VHDL test bench 中的 case 语句取递减值

Case statement in VHDL test bench takes decremented value

我正在使用 VHDL 进行一个项目,并且在我的一个测试平台上遇到了问题。我在我的刺激过程中使用 for 循环测试组合组件的所有输入组合,但我在 foor 循环中有一个 case 语句,它没有按我希望的方式运行。

这是代码段,它的行为方式与我希望的不同:

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(所有其他情况也相同),就好像值case 语句检查减 1。我将 case 语句中的 opcode 更改为 opcode+1 并且它工作正常。我知道 VHDL 是一种硬件描述语言,它的行为不同于编程语言,但我仍然无法理解为什么会发生这种情况,并希望得到解释。

模拟器 'sensed' 不会更新 opcode 信号,直到它遇到等待语句。在循环开始时添加 wait for 0 ns; 可解决问题。