VHDL将10位程序计数器递增1

时间:2016-05-27 02:09:55

标签: vhdl

我正在尝试使用VHDL中的修改MIPS指令集来创建32位CPU。我正在尝试让我的程序计数器在下一条指令中递增1,除非它是一个跳转指令,然后程序计数器将等于跳转值。

entity PC is
Port ( PC_IN     : in STD_LOGIC_VECTOR (9 downto 0); --New PC in value (PC+1 or jump)
       PC_OUT    : out STD_LOGIC_VECTOR (9 downto 0); --PC out to instruction memory
       Jump_Inst : in STD_LOGIC_VECTOR(9 downto 0); --Jump address
       Jump      : in STD_LOGIC; --Jump MUX
       clk       : in STD_LOGIC);
end PC;

architecture Behavioral of PC is
begin

PC_IN <= (PC_IN + "0000000001") when (Jump = '0')
else Jump_Inst;     

process(clk)
begin
   if rising_edge(clk) then --If it is the next clock cycle (i.e time for the next instruction)
   PC_OUT <= PC_IN;

end if;
end process;     
end Behavioral;

我在这一行PC_IN <= (PC_IN + "0000000001") when (Jump = '0')收到错误。错误包括'object pc_in 中的无法更新'和运算符“+”的 0定义,因此它不喜欢我使用+运算符并且可能是pc_in需要成为一个输出?

有没有人知道如何让我的程序计数器在下一条指令中递增1?任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

PC_IN被定义为Array(<Here?)。您不显示正在使用的库,但默认情况下std_logic_vector+的{​​{1}}没有已定义的运算符。请注意您的错误消息:

  

运算符“+”的0个定义符合此处

您希望在此上下文中未定义std_logic_vector。要使用std_logic_1164运算符,您需要包含具有该支持的库并使用相应的类型。

您的其他错误:

  

无法更新'对象pc_in

告诉您无法设置+端口。值得注意的是,+是一个输入,但您正试图驱动in。也许你的意思是开车PC_IN

我不会提到备用方法,但在这种情况下你应该使用PC_IN。例如:

PC_OUT