目录
【说明】
与本次实验相关的代码及报告等文件见以下链接:
一、实验目的
二、实验内容
三:实验原理
1.指令译码器
2.AU 算术单元
四:实验过程
1.指令译码器
A)创建工程(选择的芯片为 family=Cyclone II;name=EP2C5T144C8)
B)编写源代码
C)编译与调试(包含编译调试过程中的错误、警告信息以及资源消耗)
D)RTL 视图
E)功能仿真波形
F)时序仿真波形
G) 时序分析
2.算术单元AU
A)创建工程(选择的芯片为 family=Cyclone II;name=EP2C5T144C8)
B)编写源代码
C) 编译与调试(包含编译调试过程中的错误、警告信息以及资源消耗)
D)RTL视图
E)功能仿真波形
F)时序仿真波形
G)时序分析
五:思考题
1. 指令译码器必须要 12 个输出吗?可否将一些输出合并,哪些可以合并,为什么?
2. AU 中的 S[3…0]控制信号是来自哪里或者说与什么信息相同?
3、为何 AU 算术单元不执行加、减运算和 MOVA、MOVB 和 OUT 指令的数据传送功能时,输出为高阻态?
六:实验总结、必得体会及建议
【说明】
电子电路每次实验的提交都是会进行查重的,不过后面的三次实验都比电子秤要好通过的多,这个不必太担心,这里给出的代码提交都是100分,可以参考一下。
与本次实验相关的代码及报告等文件见以下链接:
通过网盘分享的文件:电子电路实验二.zip
链接:https://pan.baidu.com/s/1EnuK8tZ-Exi1Hm7dvA-OHg
提取码:9785
一、实验目的
1.了解简易模型机的内部结构和工作原理。
2.熟悉译码器、运算器的工作原理。
3.分析模型机的功能,设计指令译码器。
4.分析模型机的功能,设计 AU 算术单元。
二、实验内容
1.用 VERILOG 语言实现指令译码器;
2.用 VERILOG 语言实现 AU 算术单元。
三:实验原理
1.指令译码器
译码是将一个 n 位的输入码转换成一个 m 位的输出码,并且,以保证每一个有效的输入码都产生唯一的输出码。译码通过译码器实现,译码器是一个多输入多输出的组合电路,当其输入端加载一个 n 位的二进制码时,输出端产生一个 m 位的二进制码。
指令译码器根据表 1 指令系统表中的指令编码,对指令的操作码进行解析,判定是哪条指令,并且使该指令对应的输出为 1,否则输出为 0。
指令译码器的端口如上图所示,其中 en 为使能输入信号,ir[3..0]是指令的 4位操作码,输出是对应的 12 条指令。指令译码器的功能如下表所示:
2.AU 算术单元
运算器 ALU 是中央处理器(CPU)的重要组成部分,专门执行算术运算和
逻辑运算的组合逻辑电路。本模型机只执行算术运算,故此部件简称为 AU 算术
单元。模型机算术运算类指令:
ADD Rd, Rs
SUB Rd, Rs
ADD 指令与 SUB 指令的执行过程相似,具体过程为:
控制信号 SR1、SR0 选择源寄存器 Rs 的数据从 S 口输出,控制信号 DR1、DR0 选择目的寄存器 Rd 的数据从 D 口输出;在 AC3~AC0 和 AU_EN 的控制下,在 AU 中进行加法(减法)运算后将相加的和(相减的差)送入总线 BUS;S0为 1,BUS 上的数据传送至通用寄存器的输入端;在 WE 和 DR1、DR0 的控制下,时钟下降沿将输入端的数据写入目的寄存器 Rd。其中 SUB 指令影响状态位G,如果 Rd>Rs,则 G=1,否则 G=0。
指令功能如下:
AU 算术单元除了要完成 ADD、SUB 运算外,还需在 MOVA、MOVB 和 OUT三条指令执行时,提供将数据传送至总线的数据通路。AU 算术单元 的端口及功能如下所示:
四:实验过程
1.指令译码器
A)创建工程(选择的芯片为 family=Cyclone II;name=EP2C5T144C8)
B)编写源代码
C)编译与调试(包含编译调试过程中的错误、警告信息以及资源消耗)
调试过程无错误
图示为警告信息
图示为资源消耗
D)RTL 视图
视图分析及结论:视图分析:
通过观察 RTL 视图可知:左侧为输入,右侧为输入,电路中有很多的元器件进行连接,如:比较器(输入相等输出 1,输入不相等输入 0)等,以及含有多路复用器,输入信号包含指令码 ir以及使能信号 en,输出信号为十二条相应操作指令,各个输出端口以及输入端口由导线相连接。
结论:
一个功能的实现需要多重门的处理,Verilog 中简单的代码对应的实际元件内部的结构原理十分复杂。
E)功能仿真波形
结果分析及结论:结果分析:
功能仿真是指不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验证。由仿真波形可得,对于输入状态的变化,输出结果实时变化,没有延迟,其结果与电路设计的真值表的结果相对应。
当 en 为 0 时,不管 ir 为何值,12 个输出全为 0当 en 为 1 时:
当 ir=0100 时,mova 输出为 1,其余输出为 0;当 ir=0101 时,movb 输出为 1,其余输出为 0;当 ir=0110 时,movc 输出为 1,其余输出为 0;当 ir=0111 时,movd 输出为 1,其余输出为 0;当 ir=1000 时,add 输出为 1,其余输出为 0;当 ir=1001 时,sub 输出为 1,其余输出为 0;当 ir=1010 时,jmp 输出为 1,其余输出为 0;当 ir=1011 时,jg 输出为 1,其余输出为 0; 当 ir=1100 时,in1 输出为 1,其余输出为 0;当 ir=1101 时,out1 输出为 1,其余输出为 0;当 ir=1110 时,movi 输出为 1,其余输出为 0;当 ir=1111 时,halt 输出为 1,其余输出为 0;当 ir 输出错误为其他值时,12 个输出全为 0;
结论:
功能仿真操作简单,能体现和验证实验的功能,但忽略延迟的影响会使结果与实际结果有一定误差。
F)时序仿真波形
结果分析及结论:
结果分析:
时序仿真是指在布线后进行,是最接近真实器件运行的仿真,它与特定的器件有关,又包含了器件和布线的延时信息。由波形可得,当输入状态发生改变时,输出结果并未同时改变,而是有一定延迟,同时由于输入状态的改变,导致电路出现“冒险”,导致输出结果并未与预期结果相同。
结论:
1、时序仿真可以用来验证程序在目标器件中的时序关系。同时考虑了器件的延迟后,其输出结果跟接近实际情况,但是考虑的情况过多,不容易操作,容易产生错误。
2、时序仿真不 仅反应出输出和输入的逻辑关系,同时还计算了时间的延时信息,是与实际系统更接近的一种仿真结果。不过,要注意的是,这个时间延时是仿真软件“估算”出来的。
G) 时序分析
结果分析及结论:
结果分析:
1、由图可得,Timing Analyzer Summmary 总结所有经典定时分析的结果,并报告每个定时特性的最坏情况定时。比如从 ir[2]到 movb 的最坏定时情况的 tpd 为 15.757ns。下面的 tpd 报告表则给出了源节点和目标节点之间的 tpd 延迟时间,比如第七行中 ir[3]到 sub 的 tpd 为 14.916ns。
结论:实际连接图中个元器件连接之间是存在时间延迟的,而且不同的元器件之间的时间延迟也不相同。
2.算术单元AU
A)创建工程(选择的芯片为 family=Cyclone II;name=EP2C5T144C8)
B)编写源代码
C) 编译与调试(包含编译调试过程中的错误、警告信息以及资源消耗)
调试过程无错误
图示为警告信息
图示为资源消耗
D)RTL视图
结果分析及结论:
分析:通过观察 RTL 视图可知:左侧为输入,右侧为输入,电路中有很多的元器件进行连接,如:比较器(输入相等输出 1,输入不相等输入 0)等,以及含有多路复用器,输入信号包含使能信号 au_en、控制信号 ac 以及八位二进制数 a、b,输出信号为 ab 之间进行计算得到的结果 t, 个输出端口以及输入端口由导线相连接。
结论:一个功能的实现需要多重门的处理,Verilog 中简单的代码对应的实际元件内部的结构原理十分复杂。
E)功能仿真波形
结果分析:
功能仿真是指不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验证。由仿真波形可得,对于输入状态的变化,输出结果实时变化,没有延迟,其结果与电路设计的真值表的结果相对应。
au_en 为使能信号,当 au_en 为 0 时,无论 ab 输入多少均输出高阻态;当 au_en 为 1 时,使能有效:
当 ac=1000 时,执行加法操作:
输出 t=a+b,a=00000001,b=00000101 时,t=a+b=00000100,gf=0;
当 ac=1001 时,执行减法操作:
输出t=b-a,a=00000001,b=00000101 时,t=b-a=00000100,b>a 输出gf=1;
a=11111011,b=00000001 时,t=b-a=00000110,b>a 输出 gf=1; a=00000001,b=11111011 时,t=b-a=11111010,b<a 输出 gf=0; a=11111011,b=11111111 时,t=b-a=00000100,b>a 输出 gf=1;
结论:
功能仿真操作简单,能体现和验证实验的功能,但忽略延迟的影响会使结果与实际结果有一定误差。
F)时序仿真波形
结果分析及结论:
分析:
时序仿真是指在布线后进行,是最接近真实器件运行的仿真,它与特定的器件有关,又包含了器件和布线的延时信息。由波形可得,当输入状态发生改变时,输出结果并未同时改变,而是有一定延迟,同时由于输入状态的改变,导致电路出现“冒险”,导致输出结果并未与预期结果相同。
结论:
1、时序仿真可以用来验证程序在目标器件中的时序关系。同时考虑了器件的延迟后,其输出结果跟接近实际情况,但是考虑的情况过多,不容易操作,容易产生错误。
2、时序仿真不仅反应出输出和输入的逻辑关系,同时还计算了时间的延时信息,是与实际系统更接近的一种仿真结果。不过,要注意的是,这个时间延时是仿真软件“估算”出来的。
G)时序分析
结果分析及结论:
结果分析:
由图可得,Timing Analyzer Summmary 总结所有经典定时分析的结果,并报告每个定时特性的最坏情况定时。比如从 b[0] 到 t[6] 的最坏定时情况的 tpd 为 26.400 ns。下面的 tpd 报告表则给出了源节点和目标节点之间的 tpd 延迟时间,比如第二行中 b[1] 到 t[6]的 tpd 为 25.800 ns。
结论:实际连接图中个元器件连接之间是存在时间延迟的,而且不同的元器件之间的时间延迟也不相同。
五:思考题
1. 指令译码器必须要 12 个输出吗?可否将一些输出合并,哪些可以合并,为什么?
答:不一定,mova 和 add 可以合并,因为这两条输出指令在模型机中对应的控制信号完全相同,即进行相同的操作,以及 add、sub、in1、out1 可以进行合并,因为这四条输出指令对应的功能及控制信号基本一致,且输出为使能信号,可以用一个合并使能信号来代替这四个信号的使能信号。
2. AU 中的 S[3…0]控制信号是来自哪里或者说与什么信息相同?
答:AU 中的 S[3…0]控制信号来自于指令码 ir。
3、为何 AU 算术单元不执行加、减运算和 MOVA、MOVB 和 OUT 指令的数据传送功能时,输出为高阻态?
答: 因为 AU 算数单元的输出端与其他输出单元共用一根总线,当 AU 在不执行相应的运算和数据传送功能时,输出高阻态从而与总线断开,避免对其他输出端产生影响。
六:实验总结、必得体会及建议
对于本实验的进行,需要基本了解模型机的内部结构和工作原理,同时需要熟悉译码器和 ALU 的工作原理,以及需要熟练使用 Verilog 语言进行电路程序的编写。但对 Quartus II 软件的使用不熟练,不了解功能仿真以及时序仿真的使用方法,通过搜索资料解决了该问题。经验教训:遇到不懂的问题一定要及时想办法解决,不要将问题积累,同时多使用仿真对电路进行检验。