整数比较在if语句中不起作用(vhdl)

时间:2014-01-26 17:21:08

标签: integer comparison vhdl

以下代码中的错误是什么?

在测试平台中x设置为"00001111",然后执行else分支(在模拟中,所有y的位都设置为高阻态,但是{{ 1}}应该等于y)。我使用xXILNX ISE Design Suite作为模拟环境。提前谢谢。

ISim

1 个答案:

答案 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;