VHDL测试工作台中的案例语句采用降低值



我正在使用VHDL从事一个项目,在我的一个测试台上我正在面临问题。我在刺激过程中使用for循环测试了组合组件的所有输入组合,但是我在foor循环中有一个案例语句,这并不像我希望的那样行事。

这是我希望它的行为方式的代码段:

for i in 0 to 20 loop
    case opcode is
        when "01001" | "01010" | "01100" | "01110" | "10000" =>
            d <= '0';
            wait for period;
            d <= '1';
        when "00010" | "00100" | "00101" | "00110" | "10001" | "10010" | "10011" =>
            d <= '1';
        when others =>
            d <= '0';
    end case;
    wait for period;
    opcode <= opcode + 1;
end loop;

作为一个例子,我希望当opcode00010时,d成为1。但是,在模拟中,当opcode变为00011而不是00010时,d变为1(对于所有其他情况也相同(,就好像案例语句检查的值降低了1。我在案例语句中更改为opcode+1,并且起作用的是CC_11正确。我确实知道VHDL是一种硬件说明语言,其行为与编程语言不同,但是我仍然无法围绕发生这种情况的原因,并且想要解释。

模拟器对opcode信号的更新直到达到等待语句之前就不会'感知'。在循环开始时添加wait for 0 ns;解决了问题。

最新更新