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的加一操作
结论:正确,信号处理正常
下一篇