实验四 模型机时序部件的实现
一、实验目的
1.熟悉计数器、寄存器和 RAM 的工作原理。
2.了解模型机中 SM 的作用。
3.学会使用 VHDL 语言设计时序电路。
二、实验内容
1.用 VHDL 语言设计 SM;
2.用 VHDL 语言设计一个 8 位的指令计数器 PC;
3.用 VHDL 语言设计 3 个 8 位寄存器组成的寄存器组,实现读写操作。
4.用 LPM_RAM_IO 定制一个 256*8 的 RAM,实现对 RAM 的读写操作;
三、实验方法
- 实验方法:
1采用基于FPGA进行数字逻辑电路设计的方法。
2采用的软件工具是QuartusII软件仿真平台。
- 实验步骤:
- 新建,编写源代码。
(1).选择保存项和芯片类型:【File】-【new project wizard】-【next】(设置文件路径+设置project name)-【next】-【next】(设置Family=FLEX10K;name=EPF10K10TI144-4)-【next】-【finish】
(2).新建:【file】-【new】(选择AHDL File)-【OK】
2、写好源代码,保存文件(文件名与工程名需保持一致)。
3、编译与调试。确定源代码文件为当前工程文件,点击【processing】-【start compilation】进行文件编译。编译结果无警告,文件编译成功。
4、波形仿真及验证。【file】-【new】(选择Vector Waveform File)-【OK】。按照程序所述插入节点(插入输入节点和输出节点)。(操作为:左键双击NAME下方框框 -【Node Finder】(设置Filter:Pins:all)-【list】)-【>>】-【ok】-【ok】)。按题目需求设置输入波形,点击保存按钮保存。
5、时序仿真或功能仿真。
(1).时序仿真:
编译VHDL文件-选择.VWF波形文件-【Processing】-【Simulator Tool】(Simulation mode:选择Timing)-点击开始仿真按钮。
(2).功能仿真
编译VHDL文件-选择.VWF波形文件-【Processing】-【Simulator Tool】(Simulation mode:选择Functional)-【Generate Funtional Silmulation Netlist】-点击开始仿真按钮。
6、查看RTL Viewer:【Tools】-【netlist viewer】-【RTL viewer】。
四、实验过程
1. SM
- 编译过程
a)源代码如图(VHDL设计)
b)编译、调试过程
c)结果分析及结论
结果显示0 errors,2 warnings,VHDL文件满足题目要求。
- 波形仿真
a)波形仿真过程(详见实验步骤)
b)波形仿真波形图
功能仿真波形图:
c)结果分析及结论
20ns对应:时钟下降沿,控制端EN为1,SM取反,输出为1 正确
40ns对应:时钟下降沿,控制端EN为0,SM不变,输出为1 正确
60ns对应:时钟下降沿,控制端EN为1,SM取反,输出为0 正确
80ns对应:时钟下降沿,控制端EN为0,SM不变,输出为0 正确
100ns对应:时钟下降沿,控制端EN为1,SM取反,输出为1 正确
120ns对应:时钟下降沿,控制端EN为0,SM不变,输出为1 正确
140ns对应:时钟下降沿,控制端EN为1,SM取反,输出为0 正确
- 查看RTL Viewer
2. 8 位指令计数器 PC
- 编译过程
a)源代码如图(VHDL设计)
b)编译、调试过程
c)结果分析及结论
结果显示0 errors,2 warnings,VHDL文件满足题目要求。
- 波形仿真
a)波形仿真过程(详见实验步骤)
b)波形仿真波形图
功能仿真波形图:
c)结果分析及结论
20ns对应:时钟下降沿,IN PC为1,则数据自加1,输出为00000001 正确
40ns对应:时钟下降沿,IN PC为1,则数据自加1,输出为00000010 正确
60ns对应:时钟下降沿,LD PC为1,则传入a中数据,输出为01000000 正确
80ns对应:时钟下降沿,LD PC为1,则传入a中数据,输出为11111111 正确
100ns对应:时钟下降沿,IN PC为1,则数据自加1,输出为00000000 正确
120ns对应:时钟下降沿,IN PC为1,则数据自加1,输出为00000001 正确
140ns对应:时钟下降沿,LD PC为1,则传入a中数据,输出为00100000 正确
160ns对应:时钟下降沿,LD PC为1,则传入a中数据,输出为00010000 正确
180ns对应:时钟下降沿,IN PC为1,则数据自加1,输出为00010001 正确
- 查看RTL Viewer
3. 4 位行波进位加法器
- 编译过程
a)源代码如图(VHDL设计)
b)编译、调试过程
c)结果分析及结论
结果显示0 errors,2 warnings,VHDL文件满足题目要求。
- 波形仿真
a)波形仿真过程(详见实验步骤)
b)波形仿真波形图
功能仿真波形图:
c)结果分析及结论
对于功能仿真:
20ns对应:时钟下降沿,we为0, rwba为00,则i向量的数据传给a向量,此时输出均为高阻 正确
40ns对应:时钟下降沿,we为0, rwba为10,则i向量的数据传给b向量,此时输出均为高阻 正确
60ns对应:时钟下降沿,we为0, rwba为01,则i向量的数据传给c向量,此时输出均为高阻 正确
70-90ns对应:we为1,raa为00,rwba为10,则a向量的数据传给s向量,c向量的数据传给d向量,此时s输出为00000001,d输出为00000100 正确
70-90ns对应:we为1,raa为00,rwba为10,则a向量的数据传给s向量,c向量的数据传给d向量,此时s输出为00000001,d输出为00000100 正确
70-90ns对应:we为1,raa为01,rwba为01,则b向量的数据传给s向量,b向量的数据传给d向量,此时s输出为00000010,d输出为00000010 正确
70-90ns对应:we为1,raa为10,rwba为00,则c向量的数据传给s向量,a向量的数据传给d向量,此时s输出为00000100,d输出为00000001 正确
3 查看RTL Viewer
4.RAM
- 编译过程
a)新建项目并画出原理图。
(1).选择保存项和芯片类型:【File】-【new project wizard】-【next】(设置文件路径+设置project name)-【next】-【next】(设置Family=FLEX10K;name=EPF10K10TI144-4)-【next】-【finish】
(2).新建:【file】-【new】(选择Block Diagram/Schematic File)-【OK】
(3).调用器件
右键该器件,选择Properties,将未用到的接口去掉,修改值
b)原理图如图
c)编译、调试过程
d)结果分析及结论
结果显示0 errors,11 warnings,原理图满足题目要求。
- 波形仿真
a)波形仿真过程(详见实验步骤)
b)波形仿真波形图
功能仿真波形图:
c)结果分析及结论
对于功能仿真:
0-40ns:XL为0,DL为0,输出为高阻,正确
40-90ns: XL为1,DL为0,Dio的数据写入address所指定的存
储单元,正确
90ns:时钟为上升沿,XL为0,DL为1,address所指定的存储单
元数据从dio输出 正确
110ns:时钟为上升沿,XL为0,DL为1,address所指定的存储单
元数据从dio输出 正确
3 查看RTL Viewer
五、实验结论与心得
经过本次实验,我对Quartus II仿真软件有了更好的理解和运用,对VHDL语言的使用有了更好的掌握,熟练掌握了创建工程文件、软件编译操作、原理图器件的调用、仿真波形模拟等操作。
对于时序电路的VHDL设计,熟练掌握了并行语句的使用,明白了clock时钟的使用沿与其他输入不同之处,熟练掌握了上升沿和下降沿的操作使用。
对于原理图的设计,学会了调用器件并将其配置为需要的部件,同时了解到向量的走线和单一输入的走线是不一样的。
六、思考题
1.时钟周期的上升沿实现对 RAM 的读写操作,为何 PC、SM 以及寄存器组的操作是下降沿完成?
因为PC、SM 以及寄存器组的操作一般在RAM 的读写操作后面,为了防止RAM 的读写操作的输出与其他操作的输出冲突,以及方便RAM读写的操作和PC、SM 以及寄存器组的操作在一个周期内完成,节约时间,固一个为上升沿实现操作,一个为下降沿实现操作。
2.总结 VHDL 语言描述时序部件的方法和常用语句。
时钟的上升沿描述:clk =’1’and elk’EVENT
时钟的下降沿描述: clk =’0’and elk’EVENT
常用语句并行语句:
when(clk =’0’and elk’EVENT)
case state is
when INIT =>
if AB = "00" then
next_state <= A0;
elsif AB = "01" then
next_state <= A0;
elsif AB = "11" then
next_state <= A1;
elsif AB = "10" then
next_state <= A1;
end if;