数字电路实验(十一)——CPU综合设计(7)

6)PC部分

在这里插入图片描述

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity pc is
port(LD_PC,IN_PC,clock:in std_logic;
	input:in std_logic_vector(7 downto 0);
	sm:in std_logic;
	output:out std_logic_vector(7 downto 0)
);
end pc;
architecture st of pc is
signal s:std_logic_vector(7 downto 0):="00000000";
begin
process(LD_PC,IN_PC,clock,input)
begin--shi neng duan wei 0 de shi hou ke yi xie ru
if (sm='0' and falling_edge(clock)) then--rising_edge(clock)
	if (in_pc='1' and ld_pc='0') then
		s<=s+1;
	elsif (in_pc='0' and ld_pc='1') then
		s<=input-1;
	elsif (in_pc='1' and ld_pc='1') then
		s<=s-1;
	end if;
elsif (sm='1' and falling_edge(clock) and s/="00000000" and s/="00000001" and s/="00000010") then--rising_edge(clock)
	if (in_pc='1' and ld_pc='0') then
		s<=s+1;
	elsif (in_pc='0' and ld_pc='1') then
		s<=input-1;
	elsif (in_pc='1' and ld_pc='1') then
		s<=s-1;
	end if;
end if;
end process;
output<=s;
end st;

接口设计:
Input:传入的处理数据
Clock:时钟信号
Sm:控制信号
Ld_pc,in_pc:控制信号
Output:数据的输出

功能实现:
控制信号的指导下,进行累加操作或者赋值操作(跳转操作)。即在控制信号允许的时候,进行跳转,改变pc的值,从输入的值处开始重新计数。例如当前已经执行到了第11条指令,现要求跳转到第4条指令进行执行操作,需要再从RAM中读取一次数据,以此来得到下一步要去的地址(4),并在下一个周期完成赋值操作,改变PC的值。

仿真验证:
在这里插入图片描述
在时钟下降沿进行,在in_pc=0时进行赋值操作,如15ns,将pc从原本的00000000跳转到了10010110,开始进行第10010110条指令
在ld_pc=0时进行累加操作,如25,35,45ns ,均进行了PC的加一操作
结论:正确,信号处理正常
下一篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值