查询用于 IC 设计(非 FPGA)的 VHDL 合成,特别是在变量分配的情况下

Query for VHDL synthesis for IC Design (Not FPGA), specifically in case of variable assignment

如果对于给定的进程,我声明了一个变量(假设一个 1 位变量,variable temp : std_logic;),那么如果给定条件 returns 为真,我可以为该变量赋值,即

if (xyz=1) then --Assuming that this condition returns TRUE
temp:= '1';

??这个逻辑可以为 ASIC 合成吗?

是的。变量对于 FPGA 和 IC 都是可综合的。进程是对硬件进行建模的一小部分软件。那个小软件可以使用变量,但是由于变量只在一个进程的范围内,最终你必须驱动一个信号——这个小硬件的输出。

例如,这里有一些组合逻辑:

process (A, B, C, D)
  variable TMP : std_logic;
begin
  if A = '1' then
    TMP := B and C;
    TMP := TMP and D;
  else
    TMP := '0';
  end if;
  F <= TMP;
end process;

这是一个使用变量的示例,该变量将在触发器的 D 输入上合成组合逻辑(因为它处于时钟过程中):

process (CLOCK)
  variable TMP : std_logic;
begin
  if rising_edge(CLOCK) then
    TMP := A and B;
    Q <= TMP;
  end if;
end process;

这里是一个在时钟过程中使用变量的示例,该过程将合成为触发器(在其 D 输入上带有与门):

process (CLOCK)
  variable TMP : std_logic;
begin
  if rising_edge(CLOCK) then
    Q <= TMP;
    TMP := A and B;
  end if;
end process;

两个时钟进程之间的唯一区别是顺序。首先,变量在被访问之前被赋值;在第二个中,它在分配给之前被访问。

  • 如果在时钟进程中访问变量之前分配给变量,将推断出组合逻辑;

  • 如果您访问 在时钟过程中分配给它之前的变量,一个触发器 将被推断。

  • 永远不要在赋值之前访问变量 在组合过程中对其进行处理:将推断锁存器。

变量在进程执行之间保留其值。因此,如果一个变量在一个时钟进程中被赋值之前被访问,那么读取的值一定是在该进程的前一次执行中写入的。在时钟进程中,之前的执行将在之前的时钟边沿进行:因此,可以推断出触发器。