2017-04-22 120 views

回答

6

是的。变量对于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 AND门):

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

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

  • 如果您在一个变量访问它之前分配给一个变量,则会推断组合逻辑;

  • 如果在访问变量之前访问 变量,则会在推进过程中分配一个触发器 。

  • 在组合过程中,在分配 之前不要访问变量:将会推断锁存器。

变量在进程执行期间保持其值。因此,如果一个变量在被分配给一个时钟进程之前被访问,则读取的值必须已写入该进程的先前执行中。在一个时钟控制的过程中,先前的执行将在前一个时钟沿:因此,推断出一个触发器。

+0

所以,我不能真正地分配布尔值的变量?我需要分配信号并将其从IC上的输入引脚驱动吗? –

+0

我不明白你的问题。 'boolean'是一个_type_。你可以有'boolean'信号或变量。两者都是可以合成的。但是最好使用_type_'std_logic'而不是'boolean',因为'boolean'类型不能表示未知/未初始化/不关心。我编辑过的问题试图让它更清晰。 –

+0

我想我没有正确表达我的问题。我的意思是 - 如果我必须为上面问题中定义的变量'temp'指定一个值'0',我是否需要从IC上的引脚驱动该'0'值(映射作为输入端口),然后将其赋值给变量,或者说在任何进程中针对给定条件,如果条件为真,则将该值赋予变量'temp',即'temp <='0'; '所以我可以直接给任何变量赋一个常量值,并希望它能合成? –