以下代码中的错误是什么?
在测试平台中x
设置为"00001111"
,然后执行else分支(在模拟中,所有y
的位都设置为高阻态,但是{{ 1}}应该等于y
)。我使用x
和XILNX ISE Design Suite
作为模拟环境。提前谢谢。
ISim
答案 0 :(得分:2)
tmp
是一个信号,因此在显示(pkg_sig_1'range) <= z(pkg_sig_1'range);
指定的值之前需要一个delta延迟。因此,当在x
更改时触发流程时,tmp
将具有if tmp = 15 then ...
中的先前值,并且直到之后才会分配新值tmp
这个过程已经完成。
将tmp
添加到敏感度列表,或将tmp
更改为流程中的变量,例如:
process(x)
variable tmp : integer;
begin
tmp := to_integer(unsigned(x(3 downto 0)));
if tmp = 15 then
y <= std_logic_vector(to_unsigned(tmp, 8));
else
y <= "ZZZZZZZZ";
end if;
end process;