综合工具如何合成VHDL变量


9

我知道通过综合工具综合VHDL变量的两种方式:

  • 变量合成为组合逻辑
  • 变量被无意地合成为锁存器(将未初始化的变量分配给信号或另一个变量时)

VHDL变量可以通过哪些其他方式合成?(例如:可以解释为FF吗?)

Answers:


8

我将区分三种可能性:

  1. 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到硬件的分配的右侧。严格来说,变量永远不会被合成为组合逻辑。

  2. 变量仅保留一个中间结果,该结果要么在相同的时钟周期中进行评估->不进行任何硬件合成(再次为1),要么在随后的时钟周期中进行评估->合成触发器。

  3. 在存在条件分支的情况下,可以推断出这些令人恐惧的锁存器之一,在该条件分支中,既不给变量分配新值(取决于某些信号)也不给其默认值。通常这种情况会意外发生:-)


不过,“可怕的闩锁”只能在计时进程之外发生,而根据我的经验,如今大多数人都没有在使用非计时进程。因此,闩锁恐惧不再是一个问题(IMHO)-它源于您不得不在单独的触发器程序中编写组合逻辑的古老日子
Martin Thompson

4

如果在存储变量之前在变量中使用该值,则将获得该进程上次存储该变量时存储的值(在计时过程中,该值来自上一个时钟周期)。合成为寄存器或FF。

当然,除非您在reset子句中初始化了变量,否则在第一个时钟周期中会产生垃圾。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.