VHDL:if子句在case子句中

时间:2014-05-19 13:36:19

标签: syntax mips vhdl modelsim mips32

我需要实现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;

1 个答案:

答案 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只能用于进程外的组合分配。