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;
例如,当 opcode
为 00010
时,我希望 d
变为 1
。然而,在模拟中,当 opcode
变为 00011
而不是 00010
时,d
变为 1
(所有其他情况也相同),就好像值case 语句检查减 1。我将 case 语句中的 opcode
更改为 opcode+1
并且它工作正常。我知道 VHDL 是一种硬件描述语言,它的行为不同于编程语言,但我仍然无法理解为什么会发生这种情况,并希望得到解释。
模拟器 'sensed' 不会更新 opcode
信号,直到它遇到等待语句。在循环开始时添加 wait for 0 ns;
可解决问题。
我正在使用 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;
例如,当 opcode
为 00010
时,我希望 d
变为 1
。然而,在模拟中,当 opcode
变为 00011
而不是 00010
时,d
变为 1
(所有其他情况也相同),就好像值case 语句检查减 1。我将 case 语句中的 opcode
更改为 opcode+1
并且它工作正常。我知道 VHDL 是一种硬件描述语言,它的行为不同于编程语言,但我仍然无法理解为什么会发生这种情况,并希望得到解释。
模拟器 'sensed' 不会更新 opcode
信号,直到它遇到等待语句。在循环开始时添加 wait for 0 ns;
可解决问题。