实验四 模型机时序部件的实现

 实验四 模型机时序部件的实现

一、实验目的

    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. 实验方法:

1采用基于FPGA进行数字逻辑电路设计的方法。

2采用的软件工具是QuartusII软件仿真平台。

  1. 实验步骤:
  1. 新建,编写源代码。

(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

  1. 编译过程

a)源代码如图(VHDL设计)

b)编译、调试过程

c)结果分析及结论

    结果显示0 errors,2 warnings,VHDL文件满足题目要求。

 

  1. 波形仿真

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 正确

 

  1. 查看RTL Viewer

        

 

 

2. 8 位指令计数器 PC

  1. 编译过程

a)源代码如图(VHDL设计)

b)编译、调试过程

c)结果分析及结论

    结果显示0 errors,2 warnings,VHDL文件满足题目要求。

  1. 波形仿真

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 正确

  1. 查看RTL Viewer

 

3. 4 位行波进位加法器

  1. 编译过程

a)源代码如图(VHDL设计)

b)编译、调试过程

c)结果分析及结论

    结果显示0 errors,2 warnings,VHDL文件满足题目要求。

  1. 波形仿真

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

  1. 编译过程

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,原理图满足题目要求。

  1. 波形仿真

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;

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是蒸饺吖~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值