我知道合成工具合成 VHDL 变量的两种方式:
- 变量合成为组合逻辑
- 无意中合成为锁存器的变量(当将未初始化的变量分配给信号或另一个变量时)
可以合成 VHDL 变量的其他方法是什么?(例如:可以将其解释为 FF 吗?)
我知道合成工具合成 VHDL 变量的两种方式:
可以合成 VHDL 变量的其他方法是什么?(例如:可以将其解释为 FF 吗?)
我会区分三种可能性:
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)),要么在下一个时钟周期内评估 -> 触发器被合成。
在存在条件分支的情况下推断出这些可怕的锁存器之一,其中变量既没有分配新值(取决于某些信号)也没有分配默认值。通常这种情况会发生意外:-)
如果在存储变量之前使用变量中的值,您将获得进程上次存储它时存储的值(在时钟进程中,是前一个时钟周期的值)。那被合成为一个寄存器或FF。
当然,在第一个时钟周期中你会得到垃圾,除非你在 reset 子句中初始化了变量。