百度网盘:实验四
提取码:0928
实验四 模型机时序部件的实现
班级 姓名 学号
一、实验目的
- 了解模型机中 SM 的作用。
- 熟悉指令寄存器、状态寄存器、指令计数器、寄存器的工作原理
- 学会使用 VERILOG 语言设计时序电路。
二、实验内容
- 用 VERILOG 语言设计 SM;
- 用 VERILOG 语言设计一个 8 位的指令寄存器 IR;
- 用 VERILOG 语言设计一个 2 位的状态寄存器 PSW;
- 用 VERILOG 语言设计一个 8 位的指令计数器 PC;
- 用 VERILOG 语言设计 3 个 8 位寄存器组成的寄存器组,实现读写操作;
- 用 LPM_RAM_IO 定制一个 256*8 的 RAM,实现对 RAM 的读写操作。
三、实验过程
1.SM
A)创建工程
(选择的芯片为family=Cyclone II;name=EP2C5T144C8)
B) 编写源代码
C) 编译与调试
(包含编译调试过程中的错误、警告信息以及资源消耗)
D) RTL视图
E) 功能仿真波形
F) 时序仿真波形
G)结果分析及结论
(1)功能仿真:
EN=1时,在时钟下降沿,将SM进行取反,可以看到20ns时z由0变为1,40ns时z由1变为0,60ns时z由0变为1。
EN=0时,在时钟下降沿,SM不变。可以看到70~140ns过程中z值保持不变。符合该元件对于功能的要求。
(2)时序仿真:
各种指令判断是否执行后,对其相关的所有参数值进行赋值,经波形图检验,存在延迟。
2、指令寄存器IR
A)创建工程
(选择的芯片为family=Cyclone II;name=EP2C5T144C8)
B) 编写源代码
C) 编译与调试
(包含编译调试过程中的错误、警告信息以及资源消耗)
D) RTL视图
E) 功能仿真波形
F) 时序仿真波形
G) 结果分析及结论
(1)功能仿真:
当控制信号ir_ld为1 时,指令寄存器在时钟信号CLK的下降沿将总线传输的指令写入寄存器。如60ns,80ns,100ns,ir值均变为d。
而ir_ld为0是,不论时钟信号clk为上升沿还是下降沿,ir值均不变。
(2)时序仿真:
各种指令判断是否执行后,对其相关的所有参数值进行赋值,经波形图检验,存在延迟。
3、状态寄存器PSW
A)创建工程
(选择的芯片为family=Cyclone II;name=EP2C5T144C8)
B) 编写源代码
C) 编译与调试
(包含编译调试过程中的错误、警告信息以及资源消耗)
D) RTL视图
E) 功能仿真波形
F) 时序仿真波形
G)结果分析及结论
(1)功能仿真:
当控制信号cf_en=1为1 时,状态寄存器PSW在时钟信号clk的下降沿将cf写入c(有无借位进位)。如40ns,120ns,c值均变为cf。
当控制信号zf_en=1为1 时,状态寄存器PSW在时钟信号clk的下降沿将zf写入z(结果是否为零)。如40ns,100ns,c值均变为cf。
而cf_en, zf_en为0时,不论时钟信号clk为上升沿还是下降沿,z,c值均不变。
(2)时序仿真:
各种指令判断是否执行后,对其相关的所有参数值进行赋值,经波形图检验,存在延迟。
4、指令计数器PC
A)创建工程
(选择的芯片为family=Cyclone II;name=EP2C5T144C8)
B) 编写源代码
C) 编译与调试
(包含编译调试过程中的错误、警告信息以及资源消耗)
D) RTL视图
E) 功能仿真波形
F) 时序仿真波形
G)结果分析及结论
(1)功能仿真:
50~100ns:此时pc_inc为1,pc_ld为0,在时钟下降沿进行add中数据自加1,可以看到60ns,80ns均为时钟下降沿add中数据加1,数据由00000000到00000001,符合预期功能。
30~50ns:此时pc_inc为0,pc_ld为1,在时钟下降沿将a中数据向入add,可以看到add中数据由原本的00000000变为00000001,正是a中的数据,符合预期的功能。
(2)时序仿真:
各种指令判断是否执行后,对其相关的所有参数值进行赋值,经波形图检验,存在延迟。
5、通用寄存器组
A)创建工程
(选择的芯片为family=Cyclone II;name=EP2C5T144C8)
B) 编写源代码
C) 编译与调试
(包含编译调试过程中的错误、警告信息以及资源消耗)
D) RTL视图
E) 功能仿真波形
F) 时序仿真波形
G)时序分析
H)结果分析及结论
(1) 功能仿真:
0~60ns:这一段时间对写入功能进行验证,此时we=0,在时钟下降沿根据WA的值对写入哪个寄存器进行选择,00选择A寄存器,01选择B寄存器,10选择C寄存器,分别将00000001写入A,00000010写入B,00000011写入C。
60~120ns:对读功能进行验证。此时we=1,根据RA的值决定S输出哪个寄存器的值;WA的值决定D输出哪个寄存器的值。看RA和S这两行,RA为00时应输出A寄存器的值为00000001,看S的输出,恰好为00000001;RA为01应输出B寄存器的值为00000010,此时S输出为00000010,符合要求;RA为10应输出C寄存器的值为00000011,此时S输出也为00000011,符合要求。WA和D也同理不再赘述。
该元件符合要求。
(2)时序仿真:
各种指令判断是否执行后,对其相关的所有参数值进行赋值,经波形图检验,存在延迟。
(3)时序分析:
延迟时间以最长的为准,tpd为9.989ns,为从raa[0]到s[7].
6、RAM的使用
A)创建工程
(选择的芯片为family=Cyclone II;name=EP2C5T144C8)
B) 电路图
C) 编译与调试
(包含编译调试过程中的错误、警告信息以及资源消耗)
RAM读写文件:
RAM读写仿真:
D) RTL视图
E) 功能仿真波形
F) 时序仿真波形
G)结果分析及结论
0~30ns:此时XL=1,DL=0,在时钟上升沿将Dio的数据写入address所指定的存储单元,即将10101010存入01010101的位置。
30~60ns:此时XL=0,DL=1,会在时钟上升沿将address所储存的单元数据输出,此时address所指定的位置为00000011,为了验证读取的正确性,已经提前将MIF文件中的0000011位的数据改为33。观察此时的DATAOUT,恰好为00100001,即为2进制的33,功能正确。
60~90ns:此时address发生改变,变为01010101,验证之前是否成功写入与读出的正确性,观察此时的DATAOUT,恰好为之前读入的10101010,功能正确。之后XLDL均为0时输出高阻态,整个元件符合功能。
四、思考题
1.时钟周期的上升沿实现对RAM的读写操作,为何PC、SM、IR、PSW以及寄存器组的操作是下降沿完成?
因为PC、SM 以及寄存器组的操作一般在RAM 的读写操作后面,为了防止RAM 的读写操作的输出与其他操作的输出冲突,以及方便RAM读写的操作和PC、SM 以及寄存器组的操作在一个周期内完成,节约时间,固一个为上升沿实现操作,一个为下降沿实现操作。
2.采用VERILOG语言描述时序部件应该采用阻塞赋值语句还是非阻塞赋值语句?
非阻塞赋值语句。
时序逻辑中左值至少会维持一个时钟周期。(假设题目要求在时钟上升沿到来时执行赋值操作)。也就是说,右值在这个时钟变化,而(右值变化导致的)左值变化的时间是在下一个时钟的上升沿,因此它满足非阻塞语句的特性:右值先变化,一段时间后(等到时钟上升沿到来时)再赋给左值。而不是右值一变化就赋值(这样不满足 “在时钟上升沿到来时执行赋值操作” 的要求)。
3.通用寄存器组只有WE的控制信号,实现通用寄存器组读操作的电路是组合电路还是时序电路?请大致画出对寄存器组进行读操作的电路部分。
时序电路。
五、实验总结、必得体会及建议
1、从需要掌握的理论、遇到的困难、解决的办法以及经验教训等方面进行总结。
通过本次实验四的学习,我学会了时序电路中clk上升沿posedge和下降沿negedge作为敏感信号,进行电路设计,以及相关时序电路的verilog代码的编写。在完成这几个工程后,对于一个电路系统层次化设计思想有进一步体会,从顶到底分解问题,再从底部一步步映射实现。
在对模型机的构建逐渐完整、认识更加清晰的同时,我也更加熟练地了解和使用Quartus II,以及使用Verilog语言做电路设计。
2.对本实验内容、过程和方法的改进建议(可选项)。
题目可以给出几个样例与正确结果,用于学生自己验证,功能仿真时的正确性。同时也可作为作业要求提交输入该样例得到的正确结果。