Gau*_*ngh 2 synthesis vhdl register-transfer-level soc asic
如果对于给定的进程,我声明一个变量(假设是一个1位变量variable temp : std_logic;),那么如果给定的条件返回true,我可以为变量赋值,即
if (xyz=1) then --Assuming that this condition returns TRUE
temp:= '1';
Run Code Online (Sandbox Code Playgroud)
?? 这种逻辑是否可以用于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;
Run Code Online (Sandbox Code Playgroud)
下面是一个使用变量的示例,该变量将合成到触发器的D输入上的组合逻辑(因为它处于时钟进程中):
process (CLOCK)
variable TMP : std_logic;
begin
if rising_edge(CLOCK) then
TMP := A and B;
Q <= TMP;
end if;
end process;
Run Code Online (Sandbox Code Playgroud)
以下是在时钟进程中使用变量的示例,该变量将合成到触发器(在其D输入上具有AND门):
process (CLOCK)
variable TMP : std_logic;
begin
if rising_edge(CLOCK) then
Q <= TMP;
TMP := A and B;
end if;
end process;
Run Code Online (Sandbox Code Playgroud)
两个时钟进程之间的唯一区别是顺序.在第一个中,变量在被访问之前被分配; 在第二个中,它在被分配之前被访问.
如果在时钟进程中访问变量之前分配给变量,将推断出组合逻辑;
如果在时钟进程中分配变量之前访问变量,则会推断出触发器.
在组合过程中分配变量之前,不要访问变量:将推断出锁存器.
变量在进程的执行之间保留其值.因此,如果在分配给时钟进程之前访问变量,则必须在先前执行的进程上写入读取的值.在一个时钟进程中,先前的执行将在前一个时钟边沿:因此,推断出一个触发器.