我正在尝试使用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?任何帮助,将不胜感激。谢谢。
答案 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