hnu 数字电路 实验1.3 模型机指令译码器

本文详细介绍了使用VHDL语言设计一个模型机指令译码器的过程,包括理解指令译码器功能、编写源代码、编译调试、查看RTL视图、功能仿真和时序仿真的步骤。实验验证了不同输入指令对应的正确输出,展示了VHDL在逻辑电路设计中的应用。此外,还探讨了译码器在日常生活中的应用场合,总结了VHDL描述译码器的方法和语句,以及原理图方式与VHDL方式设计组合逻辑电路的优缺点。
摘要由CSDN通过智能技术生成

3.用VHDL语言设计一个模型机指令译码器
① 理解模型机指令译码器,相应的输入要对应上相应的输出。
在这里插入图片描述
② 打开QuartusII,新建工程,工程命名为zhi_ling,开始编写源代码。
③ 写好源代码,保存文件。(如图为源代码)

library ieee;
use ieee.std_logic_1164.all;

entity zhi_ling is
  port(EN:in std_logic;
       IR:in std_logic_vector(7 downto 0);
       MOVA,MOVB,MOVC,ADD,SUE,OR0,NOT0,RSR,RSL,JMP,JZ,JC,IN0,OUT0,NOP,HEAL:out std_logic);
end zhi_ling;

architecture a of zhi_ling is
 begin  process(IR)
              variable temp:std_logic_vector(15 downto 0);
              begin
              if IR(7 downto 4)="1000" then temp:="0000000000000001";
              elsif IR(7 downto 4)="0111" then temp:="0000000000000010";
              elsif IR(7 downto 4)="0100" then temp:="0000000000000100";
              elsif IR(7 downto 4)="0010" then temp:="0000000000001000";
              elsif IR(7 downto 4)="0011"and IR(1 downto 0)="10" then temp:="0000000000010000";
              elsif IR(7 downto 4)="0011"and IR(1 downto 0)="01" then temp:="0000000000100000";
              elsif IR(7 downto 4)="0011"and IR(1 downto 0)="00" then temp:="0000000001000000";
              elsif IR(7 downto 4)="1010"and IR(1 downto 0)="11" then temp:="0000000010000000";
              elsif IR(7 downto 4)="1010"and IR(1 downto 0)="00" then temp:="0000000100000000";
              elsif IR(7 downto 4)="0101" then temp:="0000001000000000";
              elsif IR(7 downto 4)="1011" then temp:="0000010000000000";
              elsif IR(7 downto 4)="0110" then temp:="0000100000000000";
              elsif IR(7 downto 4)="1001" then temp:="0001000000000000";
              elsif IR(7 downto 4)="1111"and IR(3 downto 2)/="11" and IR(1 downto 0)="11"then temp:="0010000000000000";
              elsif IR(7 downto 4)="1111"and IR(3 downto 2)="11" and IR(1 downto 0)/="11" then temp:="0100000000000000";
              elsif IR(7 downto 4)="1111"and IR(3 downto 2)/="11" and IR(1 downto 0)/="11" then temp:="1000000000000000";
              else  temp:="0000000000000000";
              end if;
              MOVB<=temp(15);MOVA<=temp(14);MOVC<=temp(13);ADD<=temp(12);
              SUE<=temp(11);OR0<=temp(10);NOT0<=temp(9);RSR<=temp(8);
              RSL<=temp(7);JMP<=temp(6);JZ<=temp(5);JC<=temp(4);
              IN0<=temp(3);OUT0<=temp(2);NOP<=temp(1);HEAL<=temp(0);
end process;
end a;

在这里插入图片描述
④ 编译与调试。确保顶层实现的命名和工程名一致。编译成功。
在这里插入图片描述

⑤ 查看RTL视图。
在这里插入图片描述
⑥ 结果分析及结论。
如RTL图所示,该指令译码器共EN,IR(0-7)九个输入,16个对应指令的输出。
⑦ 功能仿真的波形及验证。
a.新建波形文件,将对应的16种输入存储在波形文件zhi_ling.vwf中。
b.生成网表。
在这里插入图片描述
c.进行功能仿真。
在这里插入图片描述
波形图如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
d.结果分析及结论
0-10.0ns,输入为11110110,查表可知对应指令为MOVB,此时MOVB为1,其余为0,译码无误。
10.0-20.0ns,输入为11111101,查表可知对应指令为MOVA,此时MOVA为1,其余为0,译码无误。
20.0-30.0ns,输入为11110111,查表可知对应指令为MOVC,此时MOVC为1,其余为0,译码无误。
30.0-40.0ns,输入为10011010,查表可知对应指令为ADD,此时ADD为1,其余为0,译码无误。
40.0-50.0ns,输入为01100110,查表可知对应指令为SUE,此时SUE为1,其余为0,译码无误。
50.0-60.0ns,输入为10110000,查表可知对应指令为OR0,此时OR0为1,其余为0,译码无误。
60.0-70.0ns,输入为01011000,查表可知对应指令为NOT0,此时NOT0为1,其余为0,译码无误。
70.0-80.0ns,输入为10101000,查表可知对应指令为RSR,此时RSR为1,其余为0,译码无误。
80.0-90.0ns,输入为10101011,查表可知对应指令为TSL,此时TSL为1,其余为0,译码无误。
90.0-100.0ns,输入为00110000,查表可知对应指令为JMP,此时JMP为1,其余为0,译码无误。
100.0-110.0ns,输入为00110001,查表可知对应指令为JZ,此时JZ为1,其余为0,译码无误。
110.0-120.0ns,输入为00110010,查表可知对应指令为JC,此时JC为1,其余为0,译码无误。
120.0-130.0ns,输入为00101000,查表可知对应指令为IN0,此时IN0为1,其余为0,译码无误。
130.0-140.0ns,输入为01000000,查表可知对应指令为OUT0,此时OUT0为1,其余为0,译码无误。
140.0-150.0ns,输入为01110000,查表可知对应指令为NOF,此时NOP为1,其余为0,译码无误。
150.0-160.0ns,输入为10000000,查表可知对应指令为HALT,此时HALT为1,其余为0,译码无误。

⑧ 实现时序仿真。
a.仿真成功。
在这里插入图片描述
b.时序仿真波形图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
c.结果分析及结论
在这里插入图片描述
五、实验结论
1、思考题
① 在日常在活中,我们哪些场所会用到译码器?
答 :LED数码管适合于生活中各种需要用到灯光的场所,液晶显示数码管适合于有光的场所。在计算机领域,还可用于代码的转换、数据分配、存储器寻址和组合控制信号。除此之外,还可用于终端数字的显示,如电梯内、电子表上数字的显示。

② 总结 VHDL 语言描述译码器电路的方法和常用语句。
答:VHDL描述译码器电路的常用方法有三种,分别是:结构化电路设计方法、数据流式电路设计方法、行为式电路设计方法。

常用语句:并行语句和顺序语句。
并行语句:process statement、component statement、Function statement、procedure statement等
顺序语句:赋值语句、WAIT语句等

③ 比较原理图方式和 VHDL 方式设计组合逻辑电路的方法、步骤和优缺点。
答:原理图方式:
方式:手动画出原理图
步骤:画出真值表,列出表达式,设计电路,将设计的电路画出
优点:逐步理解设计,简单易懂
缺点:工作量较大,遇到复杂电路时设计难度高,不易实现;运行结果不易推测,工作量大
VHDL方式:
方式:通过Quartus II 软件实现
步骤:画出原理图,通过结构化、数据流或者行为描述用代码描述 电路,得到RTL视图和功能仿真、时序仿真两种仿真视图
优点:只需要对电路进行描述,实现部分交给软件自己设计完成,减小设计难度;两种仿真能够很快得到大量输入时的输出
缺点:使用高级描述时,得到的RTL视图难以展示设计原理

2、实验总结与实验心得
答:本次实验难度不算大,主要还是熟悉软件的使用上花了较多时间。通过这次实验,我熟悉了 Quartus II 软件的基本操作,通过设计异或门、3-8译码器和指令译码器了解了三种设计方法。
总的来说,在设计电路之前,需要我们先进性逻辑设计,画出真值表和逻辑图,再选择合适的设计方法进行设计。除此之外,我还熟悉了Quartus II 软件工程的创建,代码编写的基础方法,以及两种仿真,知道了网表的生成和输入波形文件的创建和设计方法。
心得:实践是最好的学习方法。尽管之前老师在课堂上对VHDL语言讲授了很多,但具体的设计和编写步骤经常忘记。这次实验让我快速熟悉了VHDL语言,理解也比之前单纯听老师授课深入了很多。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值