我正在使用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;
作为一个例子,我希望当opcode
为00010
时,d
成为1
。但是,在模拟中,当opcode
变为00011
而不是00010
时,d
变为1
(对于所有其他情况也相同(,就好像案例语句检查的值降低了1。我在案例语句中更改为opcode+1
,并且起作用的是CC_11正确。我确实知道VHDL是一种硬件说明语言,其行为与编程语言不同,但是我仍然无法围绕发生这种情况的原因,并且想要解释。
模拟器对opcode
信号的更新直到达到等待语句之前就不会'感知'。在循环开始时添加wait for 0 ns;
解决了问题。