如果对于给定的进程,我声明了一个变量(假设一个1位变量,variable temp : std_logic;),那么如果给定的条件返回true,我可以为该变量赋值吗?
if (xyz=1) then --Assuming that this condition returns TRUE
temp:= '1';??这个逻辑会被ASIC合成吗?
发布于 2017-04-22 13:58:10
是。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;两个时钟进程之间唯一的区别是顺序。在第一种情况下,在被访问之前将变量赋值给它;在第二种情况下,在分配给它之前访问它。
变量在进程执行之间保留其值。因此,如果在时钟进程中分配给变量之前访问了一个变量,则必须在进程的前一次执行时写入读取的值。在时钟进程中,先前的执行将处于先前的时钟边缘:因此,将推断出触发器。
https://stackoverflow.com/questions/43559961
复制相似问题