VHDL的運算符號VHDL中主要有六類運算符號:賦值運算、邏輯運算、算術運算關系運算、連接運算、移位運算運算符號主要用於各類表達式中;
運算可以分為單目運算(只有一個運算量)和雙目運算(針對兩個運算量);進行雙目運算時,兩個運算量必須類型相同;VHDL中運算沒有左右優先級差別,同一表達式中進行多個運算時必須用括號表達先后差別;
在同類運算中,單目運算優先;在所有運算符號中, NOT的優先級別最高;
賦值運算符
<= 信號賦值:將右端值賦給左端信號;
:= 變量賦值:將右端值賦給左端變量;或用於賦初始值;
=>數組內部分元素賦值;適用類型: 所有數據類型;
賦值號兩邊的數據類型原則上應該相同;
邏輯運算符
NOT AND OR NAND NOR XOR適用類型:STD LOGIC STD LOGIC VECTORBIT BIT VECTOR BOOLEAN
邏輯運算結果為同類型邏輯量;對數組類型進行邏輯運算時,參與運算的兩個數據位數必須相等,所做運算為對應位進行;
算術運算:
/ 除)* (乘) + (加)減MOD (求模) REM (取余) ** (指數) ABS (絕對值)適用類型:INTEGER REAL BIT BIT VECTOR TIME
加/減運算的結果為同類型算術量;注意:算術運算大多數只用於抽象的編程(行為設計);
只有少數算術運算符能夠進行綜合,應盡量只使用加/減;對數組類型進行算術運算時,兩邊位數必須相同;
關系運算:
=> (大於等於) <= (小於等於)> (大於)< (小於) /= (不等於) = (等於)適用類型:等於和不等於適用於所有類型;
其他運算適用於整數、實數、位、位矢量,以及枚舉類型和數組類型;
可比較位長度不相同的情況(從左向右逐位比較);關系運算的結果為boolean類型: false true
注意:小於等於符號與信號賦值符號的寫法相同,應注意使用位置和意義;
連接運算: &
適用類型bit bitvector character stringstd logic std logic_vector
連接運算結果為同類型元素構成的數組;
庫和包集合除了實體、結構體外的第三種可編程結構
Library 庫編譯后數據的集合,存放包集合定義、實體定義、構造體定義和配置定義,
其功能相當於其他操作系統中的目錄,經過說明后,設計中就可以使用庫中的數據,實現共享;在前面圖形輸入的應用中,已多次采用庫中的單元進行設計
庫的使用:
當使用庫時,需要說明使用的庫名稱,同時需要說明庫中包集合的名稱及范圍;每個實體都應獨立進行庫的說明;
庫的說明應該在實體之前;經過說明后,實體和結構體就可以自動調用庫中的資源;
庫說明語句格式library庫名;use庫名包集合名.范圍(或項目名);
例: library ieee;use ieee.std_logic_1164.all:VHDL中庫的主要種類:IEEE庫 STD庫 ASIC庫work庫 用戶定義庫IEEE庫:含有IEEE的標准包集合"STD-LOGIC-1164"以及一些大公司提供的包集合;使用前必須說明;例:library ieee;
VHDL中庫的主要種類:
IEEE庫 STD庫 ASIC庫 work庫 用戶定義庫
IEEE庫:含有IEEE的標准包集合"STD-LOGIC-1164"以及一些大公司提供的包集合;使用前必須說明;例:library ieee.
use ieee.std logic 1164.all;使用標准邏輯量的定義和運算;
use ieeestd logic-unsigned.all;無符號數算術運算的定義;
use ieee.std logic-arith.all;使用符號數算術運算的定義;
STD庫:
含有"STANDARD"包集合和"TEXTIO"包集合,使用前者時無需說明;
ASIC庫:
由各公司提供,存放與邏輯門-對應的實體,用於ASIC設計的門級仿真,使用時需加以說明;例library altera;use altera.maxplus2.all;library Ipmuse Ipm.Ipm_components.all
WORK庫:
WORK庫為現行作業庫,位於當前使用時設計文件的指定保存目錄;
WORK使用時通常無須說明;但在結構設計中進行元件,的宏調用時需要說明;例: use work.all
用戶定義庫:
由用戶自定義生成,使用時需說明(指定庫所在的路徑);
package包集合用於羅列VHDL語言中使用的類型定義、信號定義、常數定義、元件定義、函數定義和過程定義等(類似於C語言中的include語句),
方便不同模塊的設計中公共定義的共享;
數字電路設計中經常使用的包集合:
ieee.std_logic_1164邏輯量的定義
ieee.std_logic_arith數據轉換,邏輯判斷
ieee.std_logic_unsigned 算術運算
std.textio文本數據輸入/輸出格式包集合在使用前必須采用use語句進行說明(在設計程序的最前面);
包集合可以由用戶自定義;
包的結構與定義: (用戶自定義的包集合)包集合標題+ (包集合體)包集合標題:
package包集合名is
說明語句; (只有名稱)
end包集合名;
包集合體:package body包集合名is
說明語句; (完整定義)end包集合名;
例: (函數取自p.279表4-38 )library ieee;use ieee.std_logic_1164.all;
library ieee;
use ieee. std_logic 1164. all;
packge upac isconstant k: integer:= 4:subtype cpu_bus is std_logic-vector(k-1downto 0);
function conv_integer (x:std_logic_vector) return integer;
end upac;
packge body upac is
function conv_integer (x: std_logic_vector) return integer is
variable result:
integer;
begin
result :=0;
for I in x'range loop
result :=result*2:
case x(i) is when 'O'L' =>null;
when '1'H'=> result := result+ 1;
when others =>null:
end case;
end loop;
return result;
end conv_integer;
end upac;
用戶自行編寫的包集合將自動存放於WORK庫中,使用時可采用下列語句調用use work.upac.all;