2017-04-22 122 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'; '所以我可以直接給任何變量賦一個常量值,並希望它能合成? –