如果對於給定的過程,我聲明一個變量(比如說一個1位變量,variable temp : std_logic;
),那麼我可以給變量賦值如果給定條件返回true,即查詢IC設計(非FPGA)的VHDL綜合,特別是在變量賦值的情況下
if (xyz=1) then --Assuming that this condition returns TRUE
temp:= '1';
??這個邏輯是否可以合成爲ASIC?
如果對於給定的過程,我聲明一個變量(比如說一個1位變量,variable temp : std_logic;
),那麼我可以給變量賦值如果給定條件返回true,即查詢IC設計(非FPGA)的VHDL綜合,特別是在變量賦值的情況下
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 AND門):
process (CLOCK)
variable TMP : std_logic;
begin
if rising_edge(CLOCK) then
Q <= TMP;
TMP := A and B;
end if;
end process;
兩個同步進程之間的唯一區別是順序。首先,變量在被訪問之前被分配給;在第二個,它被分配給它之前被訪問。
如果您在一個變量訪問它之前分配給一個變量,則會推斷組合邏輯;
如果在訪問變量之前訪問 變量,則會在推進過程中分配一個觸發器 。
在組合過程中,在分配 之前不要訪問變量:將會推斷鎖存器。
變量在進程執行期間保持其值。因此,如果一個變量在被分配給一個時鐘進程之前被訪問,則讀取的值必須已寫入該進程的先前執行中。在一個時鐘控制的過程中,先前的執行將在前一個時鐘沿:因此,推斷出一個觸發器。
所以,我不能真正地分配布爾值的變量?我需要分配信號並將其從IC上的輸入引腳驅動嗎? –
我不明白你的問題。 'boolean'是一個_type_。你可以有'boolean'信號或變量。兩者都是可以合成的。但是最好使用_type_'std_logic'而不是'boolean',因爲'boolean'類型不能表示未知/未初始化/不關心。我編輯過的問題試圖讓它更清晰。 –
我想我沒有正確表達我的問題。我的意思是 - 如果我必須爲上面問題中定義的變量'temp'指定一個值'0',我是否需要從IC上的引腳驅動該'0'值(映射作爲輸入端口),然後將其賦值給變量,或者說在任何進程中針對給定條件,如果條件爲真,則將該值賦予變量'temp',即'temp <='0'; '所以我可以直接給任何變量賦一個常量值,並希望它能合成? –