Answers:
我将区分三种可能性:
VHDL变量根本没有硬件表示。假设以下示例
signal a,b,c : integer;
...
process ( clk ) is
variable var : integer := 0;
begin
if ( rising_edge(clk) ) then
var := a + b;
c <= var;
end if;
end process;
变量var
实际上根本没有被合成为组合逻辑(假设这就是问题所在)。而是分配a + b
到硬件的分配的右侧。严格来说,变量永远不会被合成为组合逻辑。
变量仅保留一个中间结果,该结果要么在相同的时钟周期中进行评估->不进行任何硬件合成(再次为1),要么在随后的时钟周期中进行评估->合成触发器。
在存在条件分支的情况下,可以推断出这些令人恐惧的锁存器之一,在该条件分支中,既不给变量分配新值(取决于某些信号)也不给其默认值。通常这种情况会意外发生:-)