查询用于 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;
两个时钟进程之间的唯一区别是顺序。首先,变量在被访问之前被赋值;在第二个中,它在分配给之前被访问。
如果在时钟进程中访问变量之前分配给变量,将推断出组合逻辑;
如果您访问
在时钟过程中分配给它之前的变量,一个触发器
将被推断。
永远不要在赋值之前访问变量
在组合过程中对其进行处理:将推断锁存器。
变量在进程执行之间保留其值。因此,如果一个变量在一个时钟进程中被赋值之前被访问,那么读取的值一定是在该进程的前一次执行中写入的。在时钟进程中,之前的执行将在之前的时钟边沿进行:因此,可以推断出触发器。
如果对于给定的进程,我声明了一个变量(假设一个 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;
两个时钟进程之间的唯一区别是顺序。首先,变量在被访问之前被赋值;在第二个中,它在分配给之前被访问。
如果在时钟进程中访问变量之前分配给变量,将推断出组合逻辑;
如果您访问 在时钟过程中分配给它之前的变量,一个触发器 将被推断。
永远不要在赋值之前访问变量 在组合过程中对其进行处理:将推断锁存器。
变量在进程执行之间保留其值。因此,如果一个变量在一个时钟进程中被赋值之前被访问,那么读取的值一定是在该进程的前一次执行中写入的。在时钟进程中,之前的执行将在之前的时钟边沿进行:因此,可以推断出触发器。