简易计算机系统综合设计--指令寄存器

  我们想一想,从RAM读取指令完指令之后,是不是直接可以由指令去译码得到所有部件的控制信号呢?可能比较困难,因为时钟信号是一个周期性的过程,不可能说你在取完址以后立马去译码,我们需要等待恰当的时间到来,再者就是在一个周期内我们的译码工作应该只被做一次,而总线数据上的数据可以变化多次,所以我们不难把指令直接传给控制器去产生控制信号,而需要把取址阶段得到的指令存起来,在执行阶段保持这条指令不变,才能保证在执行阶段得到的控制信号都是由期望的指令译码过来的,这也就是指令寄存器的功能。

  所以指令寄存器只能在特定的时候存入数据,显然是写入需要时钟控制的,而输出应该持续地输出到控制器,故输出不需要时钟信号控制。

(1)VHDL代码:

library ieee;
use ieee.std_logic_1164.all;
entity IRJCQ is
port(CLK:in std_logic;
     LDIR:in std_logic;
     Fin:in std_logic_vector(7 downto 0);
     OUTA,OUTB:out std_logic_vector(3 downto 0));
end entity IRJCQ;
architecture ST of IRJCQ is
signal IR:std_logic_vector(7 downto 0);
begin
    process(CLK,LDIR)
    begin
        if((CLK'event and CLK='1') and LDIR='1')then
            IR<=Fin;
        end if;
        OUTA<=IR(7 downto 4);
        OUTB<=IR(3 downto 0);
    end process;
end ST;
PS:这里看了数据通路的图以后,输出的时候把原来的指令分为了前四位和后四位,后来老师说完全没有必要 难过,直接当作八位的输出就可以了。


(2)

引脚说明:

输入输出端口分别为:

CLK:时钟信号,时钟上升沿到来时配合LDIR对IR进行写入数据;

LDIR:寄存器写入的使能信号,高电平有效;

Fin:数据输入端,来自RAM的读取数据;

OUTA:数据输出端,指令的高四位;

OUTB:数据输出端,指令的低四位。


(3)波形仿真:


由仿真结果可知,OUTA为输入Fin的前四位,而OUTB输入Fin的后四位,并且只有在LDIR为高电平且时钟信号沿到来时才会使输出改变,符合设计要求。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值