我需要实现MIPS32的slt指令。
操作本身很简单。如果input_1小于input_2,则输出为1。
来自MIPS规范:
if GPR[rs] < GPR[rt] then
GPR[rd] ← 0(GPRLEN-1) || 1
else
GPR[rd] ← 0(GPRLEN)
endif
因为我解析了我的alu-stage中的功能,我可以直接执行计算。到目前为止这么好,但我不明白,为什么vcom只接受第一个选项。第二个选项总是产生“非法顺序语句”。
第二个问题是,如果等式为真,输出必须是“0 ... 01”还是“111..111”?
case funct is
*
*
*
--first option
when "101010" => if (signed(s_alu_input_1) < signed(s_alu_input_2)) then
s_alu_result(0) <= '1';
s_alu_result(31 downto 1) <= (others => '0');
else
s_alu_result <= (others => '0');
end if;
--second option
when "101010" => s_alu_result(0) <= '1' when signed(s_alu_input_1) < signed(s_alu_input_2) else
'0';
s_alu_result(31 downto 1) <= (others => '0');
*
*
*
end case;
答案 0 :(得分:2)
在VHDL中,您不能在when
中使用process
语句。您需要使用if
。
这一行:
s_alu_result(0) <= '1' when signed(s_alu_input_1) < signed(s_alu_input_2) else
'0';
VHDL中的 when
只能用于进程外的组合分配。