HNU 大数据 电子电路 实验三 报告

不要照抄,仅供参考,也不一定对,请三思而后借鉴!!!!

一、实验目的

1.了解简易模型机的内部结构和工作原理。

2.分析模型机的功能,设计 8 重 3-1 多路复用器。

3.分析模型机的功能,设计移位逻辑。

4.分析模型机的工作原理,设计模型机控制信号产生逻辑。

二、实验内容

1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器;

2.用 VERILOG 语言设计模型机的移位模块;

3.用 VERILOG 语言设计模型机的控制信号产生逻辑。

三、实验过程

1、8重3-1多路复用器

A)创建工程(选择的芯片为family=Cyclone II;name=EP2C5T144C8)

B) 编写源代码

(因为不会有第四种情况,所以default的内容可写可不写)

C) 编译与调试(包含编译调试过程中的错误、警告信息以及资源消耗)

D) RTL视图

视图分析:

分析:

由视图可得,视图左边为输入,右边为输出。其中连接有一系列的元器件。

比如比较器:当输入相等时输出 1,不相等时输出 0;还有大部分的 2-1 选择器构成,当

控制信号为 0 时,输出第一位,控制信号为 1 时,输出第二位。

图中输入信号为 madd和 a,b,c,输出信号为 y。各个输出端口之间通过导线相连。

结论:

一个功能的实现需要经过多重门的处理后才能实现,一个元件的内部原理结构图十分复杂

E) 功能仿真波形

结果分析及结论:

分析:

功能仿真是指不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验

证。由仿真波形可得,对于输入状态的变化,输出结果实时变化,没有延迟,其结果与电路

设计的真值表的结果相对应。

madd =00 时,控制输出 y 等于 a,正确;

madd =01 时,控制输出 y 等于 b,正确;

Madd =10 时,控制输出 y 等于 c,正确;

Madd =11 时,控制输出高阻态,正确。

结论:

功能仿真操作简单,能体现和验证实验的功能,但忽略延迟会使结果与实际结果有一定误差

F) 时序仿真波形

结果分析及结论:

分析:

时序仿真是指在布线后进行,是最接近真实器件运行的仿真,它与特定的器件有关,

又包含了器件和布线的延时信息。由波形可得,当输入状态发生改变时,输出结果并未同时

改变,而是有一定延迟,同时由于输入状态的改变,导致电路出现“冒险”,导致输出结果

并未与预期结果相同。

结论:

时序仿真可以用来验证程序在目标器件中的时序关系。同时考虑了器件的延迟后,其

输出结果跟接近实际情况,但是考虑的情况过多,不容易操作,容易产生错误。时序仿真不

仅反应出输出和输入的逻辑关系,同时还计算了时间的延时信息,是与实际系统更接近的一

种仿真结果。不过,要注意的是,这个时间延时是仿真软件“估算”出来的。

G) 时序分析

操作方法是:编译后,在compilation report中选择【timing analysis】-【summary】和【tpd】

结果分析及结论:

分析:

由图可得,Timing Analyzer Summmary 总结所有经典定时分析的结果,并报告每个定时特性的最坏情况定时。比如从 b[7]y[7]的最坏定时情况的 tpd 为 13.772ns。下面的tpd 报告表则给出了源节点和目标节点之间的 tpd 延迟时间,比如第七行中 madd[1]y[1] 的tpd 为 12.808ns

结论:

连接图中个元器件连接之间是存在时间延迟的,而且不同的元器件之间的时间延迟也不相同

2、移位逻辑

A)创建工程(选择的芯片为family=FLEX10K;name=EPF10K20TI144-4)

B) 编写源代码

C) 编译与调试(包含编译调试过程中的错误、警告信息以及资源消耗)

D) RTL视图

结果分析:

分析:

由视图可得,视图左边为输入,右边为输出。其中连接有一系列的元器件。比如比较器:当输入相等时输出 1,不相等时输出 0;还有大部分的 2-1 选择器构成,当控制信号为0 时,输出第一位,控制信号为 1 时,输出第二位。图中输入信号为 fbus,frbus,flbus 和 a,输出信号为 w。各个输出端口之间通过导线相连。

结论:

一个功能的实现需要经过多重门的处理后才能实现,元件的内部原理结构图十分复杂。

E) 功能仿真波形

结果分析及结论:

分析:

功能仿真是指不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验

证。由仿真波形可得,对于输入状态的变化,输出结果实时变化,没有延迟,其结果与电路

设计的真值表的结果相对应。

当 fbus=1,frbus=0,flbus=0,不执行移位操作,输出等于输入,cf 不改变;

当 fbus=0,frbus=1,flbus=0,执行右移,输出等于输入右移移位,有进位的话 cf 为 1;

当 fbus=0,frbus=0,flbus=1,执行左移,输出等于输入左移一位,cf 不改变;

当控制信号全为 0 时,输出为高阻态,正确;

结论:

功能仿真操作简单,能体现和验证实验的功能,但忽略延迟会使结果与实际结果有一定误差。

F) 时序仿真波形

结果分析及结论:

分析:

时序仿真是指在布线后进行,是最接近真实器件运行的仿真,它与特定的器件有关,又包含了器件和布线的延时信息。由波形可得,当输入状态发生改变时,输出结果并未同时改变,而是有一定延迟,同时由于输入状态的改变,导致电路出现“冒险”,导致输出结果并未与预期结果相同。

结论:

时序仿真可以用来验证程序在目标器件中的时序关系。同时考虑了器件的延迟后,其输出结果跟接近实际情况,但是考虑的情况过多,不容易操作,容易产生错误。时序仿真不仅反应出输出和输入的逻辑关系,同时还计算了时间的延时信息,是与实际系统更接近的一种仿真结果。不过,要注意的是,这个时间延时是仿真软件“估算”出来的。

G) 时序分析

结果分析及结论:

分析:

由图可得,Timing Analyzer Summmary 总结所有经典定时分析的结果,并报告每个定时特性的最坏情况定时。比如从 a[5]w[4] 的最坏定时情况的 tpd 为 20.500ns。下面的tpd 报告表则给出了源节点和目标节点之间的 tpd 延迟时间,比如第九行中 flbusw[4]的tpd 为 19.400ns

结论:

实际连接图中个元器件连接之间是存在时间延迟的,不同的元器件之间的时间延迟不相同。

3、控制信号产生逻辑

A)创建工程(选择的芯片为family=FLEX10K;name=EPF10K20TI144-4)

B) 编写源代码

C) 编译与调试(包含编译调试过程中的错误、警告信息以及资源消耗)

D) RTL视图

结果分析:

分析:

由视图可得,视图左边为输入,右边为输出。其中连接有一系列的元器件。比如比较器:当输入相等时输出 1,不相等时输出 0;还有大部分的与或门。图中输入信号为 sm 等20 个,输出信号包括 reg_ra等 19 种情况。各个输出端口之间通过导线相连。

结论:

一个功能的实现需要经过多重门的处理后才能实现,一个元件的内部原理结构图十分复杂

E) 功能仿真波形

结果分析及结论:

分析:功能仿真是指不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验

证。由仿真波形可得,对于输入状态的变化,输出结果实时变化,没有延迟,其结果与电路

设计的真值表的结果相对应。

1.当 mova 指令执行时,shi_fbus 和 sm_en 输出 1,其他输出为 0,madd 输出 00,alu_s 输出为 1100,reg_ra 输出 01,reg_wa 输出 00,正确;

2.当 movb 指令执行时,ram_xl 和 shi_fbus 和 reg_we 和 sm_en 输出为 1,其他输出为 0,madd 输出为 10,alu_s 输出为 1100,reg_ra 输出 01,reg_wa 输出 11,正确;

3.当 movc 指令执行时,ram_dl 和 sm_en 输出为 1,其他输出为 0,madd 输出 01,alu_s 输出 1100,reg_ra 输出 11,reg_wa 输出 01,正确;

4.当 add 指令执行时,shi_fbus,alu_en,cf_en,zf_en,sm_en 输出为 1,其他输出为 0,alu_s 为 1001,reg_ra 输出 01,reg_wa 输出 00,正确;

5.当 sub 指令执行时,shi_fbus 和 alu_m,cf_en,zf_en 和 sm_en 输出为 1,其他输出为 0,alu_s 输出 0110,reg_ra 输出 01,reg_wa 输出 00,正确;

6.当 and1 指令执行时,shi_fbus 和 alu_m 和 sm_en 输出 1,其他输出 0,alu_s 输出1011,reg_ra 输出 01,reg_wa 输出 00,正确;

7.not1 指令执行时,shi_fbus 和 alu_m 和 sm_en 输出 1,其他输出 0,alu_s 输出 0101,reg_ra 输出 00,reg_wa 输出 00,正确;

8.rsl 指令执行时,shi_flbus 和 alu_m 和 cf_en 和 sm_en 输出 0,其他输出 0,alu_s输出 1010,reg_ra 和 reg_wa 输出 00,正确;

9.rsr 指令执行时,shi_frbus 和 alu_m 和 cf_en 和 sm_en 输出 1,其他输出 0,alu_s输出 1010,reg_ra 输出 11,reg_wa 输出 00,正确。

F) 时序仿真波形

结果分析及结论:

分析:

时序仿真是指在布线后进行,是最接近真实器件运行的仿真,它与特定的器件有关,又包含了器件和布线的延时信息。由波形可得,当输入状态发生改变时,输出结果并未同时改变,而是有一定延迟,同时由于输入状态的改变,导致电路出现“冒险”,导致输出结果并未与预期结果相同。

结论:

时序仿真可以用来验证程序在目标器件中的时序关系。同时考虑了器件的延迟后,其输出结果跟接近实际情况,但是考虑的情况过多,不容易操作,容易产生错误。时序仿真不仅反应出输出和输入的逻辑关系,同时还计算了时间的延时信息,是与实际系统更接近的一种仿真结果。不过,要注意的是,这个时间延时是仿真软件“估算”出来的。

G) 时序分析

结果分析及结论:

分析:

由图可得,Timing Analyzer Summmary 总结所有经典定时分析的结果,并报告每个定时特性的最坏情况定时。比如从 addreg_we 的最坏定时情况的 tpd 为 25.600ns。下面的 tpd 报告表则给出了源节点和目标节点之间的 tpd 延迟时间,比如第六行中 cram_dl的 tpd 为 22.700ns

结论:

连接图中个元器件连接之间是存在时间延迟的,不同的元器件之间的时间延迟也不相同。

四、思考题

1.移位逻辑不工作时,输出应该为何值?为什么?

答:

即fbus,flbus,frbus都为0时,输出呈高阻态。

是为了预防移位逻辑输出数据到总线中和其他位置输出到总线中的数据起冲突,应该阻止移位逻辑向总线输出数据,所以此时移位逻辑输出应该为高阻。

2.移位逻辑的输出Cf应该如何处理?

答:

用一个带使能端的寄存器保存起来。

CF和ZF只有在执行算术运算的时候值才进行更新,其余时间保持原有值不变,根据这种工作特点,带使能端的锁存器保存CF和ZF的值能很好地完成需求。

3.如何产生正确的控制信号以及具体的编程实现?

答:

首先需要对16种命令分别是如何控制信号的一一分析,得出不同命令下信号的输出是什么;然后根据分析的结果将控制信号的命令用或运算组合起来;

再根据之前所列的每个控制信号的或运算式子,采用if语句/when else语句进行编程实现。

五、实验总结、必得体会及建议

1、从需要掌握的理论、遇到的困难、解决的办法以及经验教训等方面进行总结。

需要掌握的理论:

1.8重3-1多路复用器是由4-1多路复用器缺失一个输入引脚形成的,及其两位选择信号如何控制哪一个输入引脚传送到输出引脚,还有其内部电路逻辑原理;

2.移位逻辑是如何控制左右移动一位或者直接输出的,与flbus,frbus,fbus值的关系,以及输出高阻态的意义是什么,还有cf储存了移动后多出来的一位。

3.控制信号产生逻辑,需要了解每一个指令信号背后需要多少量的变化,又变化成什么。

遇到的困难:

1.没见过3-1多路复用器,上课讲的都是2-1,4-1,8-1等,有些迷茫3个输入的,选择信号该怎么设置;

2.移位逻辑怎么移位,怎么拼接后输出,准确来说,还是对Verilog的语言一些写法不太熟悉;

3.发现没有tpd,只有tco,tsu等;

4.控制信号产生逻辑不太清楚那些值是怎么变化,变量太多,容易相互混淆。

解决的办法:

1.询问了同学关于多路复用器,才发现3-1其实没啥难的,就是简单4-1少了一个输入引脚,选择信号还是两位,不过只是11对应的值没有罢了,default的内容也可写可不写。

2.查阅CSDN资料,向右移位可以直接用输出={输入[0],输入[7,1]},向左移位可以直接用输出={输入[6,0],输入[7]};

(这么说,有点像C++的字符串拼接还有字符串截取,果然还是所有的代码不管高级低级,都有着一些相似之处的)

3.tpd没有是因为输出的变量没有初始化,而且变量需要在begin里面初始化。

4.查阅了老师上课的PPT,以及自己推导了每个变量变化的表格,方便了写代码。

经验教训:

1.要学会变通,学了4-1,8-1,多路复用器,我自然应该会做3-1,5-1或者7-1多路复用器,而不是拘泥于PPT上的硬性知识。

2.感觉经过实验二写代码还有仿真操作之后,实验三做起来快多了,果然还是孰能生巧,但还不够,还需多练,更加熟悉Verilog语言。

3.一些错误一定要犯了才会记忆深刻,比如未初始化,感觉这个错误无论是在哪一个代码里面都是很基础的,但是又很重要(C++也是)。

4.遇到问题,多问同学,多问老师,多问CSDN,憋着自己写代码,没啥好处,只会越来越迷糊

2、对本实验内容、过程和方法的改进建议(可选项)。

答:

1.最好能给出控制器各个控制信号的输出功能表,方便我们写代码

(当然自己总结也行)

2.提供Verilog语言的部分写法,比如说移位逻辑的输出={输入[0],输入[7,1]}

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值