综合工具如何综合一个VHDL变量

电器工程 视频文件 合成 rtl
2022-01-23 01:40:27

我知道合成工具合成 VHDL 变量的两种方式:

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

可以合成 VHDL 变量的其他方法是什么?(例如:可以将其解释为 FF 吗?)

2个回答

我会区分三种可能性:

  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. 在存在条件分支的情况下推断出这些可怕的锁存器之一,其中变量既没有分配新值(取决于某些信号)也没有分配默认值。通常这种情况会发生意外:-)

如果在存储变量之前使用变量中的值,您将获得进程上次存储它时存储的值(在时钟进程中,是前一个时钟周期的值)。那被合成为一个寄存器或FF。

当然,在第一个时钟周期中你会得到垃圾,除非你在 reset 子句中初始化了变量。