简易计算机系统综合设计--PC计数器

  PC计数器的作用是提供一个取指令的地址,需要支持自加一(顺序计数)和加载总线上数据(跳转)这两个功能。接着分析PC计数器的计数周期(频率),不能想到只有在需要取址或者跳转的时候才需要计数,所以这个是需要一个时钟控制的,并且可能有两个时刻需要计数:一个是在取址阶段需要将地址加一,另一个是在执行阶段中如果可以跳转的话需要计数,所以需要在这两个地方给PC计数器一个时钟信号。值得注意的是在取址阶段,这里取址的时候并不是等PC加一以后再取址,而是先取址再加一(为什么?),那么下一个周期取的址才是当前地址加一以后的结果,这也说明了PC的输出是不需要时钟控制的。

我们来看一下PC的输入输出  :

输出就是address,LDPC和INPC相当于两个使能的作用具体为:

当LDPC=1时:INPC=1->计数器自加一,INPC=0->计数器加载来自总线上的数据。

(1)VHDL代码:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; 
entity PCJSQ is
port(CLK,LDPC,INPC:in std_logic;
     Fin:in std_logic_vector(7 downto 0);
     Fout:out std_logic_vector(7 downto 0));
end PCJSQ;
architecture ST of PCJSQ is
signal Q:std_logic_vector(7 downto 0):="00000000";
begin
    process(CLK,LDPC,INPC,Fin)
    begin
        Fout<=Q;
        if(CLK'event and CLK='1')then
            if(LDPC='1')then
                if(INPC='1')then
                    Q<=Q+1;
                else Q<=Fin;
                end if;
            end if;
        end if;
    end process;
end ST;

(2)引脚说明:


输入输出端口分别为:

CLK :时钟信号,时钟信号到来时配合LDPC和INPC控制PC计数器的操作;

LDPC:控制PC计数器是否进行计数操作,高电平有效;

INPC:控制PC计数器进行加一操作还是加载BUS总线上的数据,当LDPC为高电平时,INPC为高电平则PC+1,否则PC加载BUS总线上的数据;

Fin:BUS总线上的数据输入;

Fout:PC计数器的输出,不受时钟控制,输出当前PC计数器中的值。

(3)波形仿真:


这里设置LDPC恒为高电平:

由波形仿真结果可知,当时钟信号到来,若INPC为高电平,则Fout输出为原来的值加一,

否则输出的值为BUS总线上Fin的数据,符合引脚设计的需求,结果正确。



  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值