標識符命名規(guī)范
標識符用于定義實體名,、結構體名,、信號和變量名等,選擇有意義的命名對設計是十分重要的,。命名包含信號或變量諸如出處,、有效狀態(tài)等基本含義,有利于提高代碼的可讀性,。
1.1 標識符習慣命名規(guī)則
1.1.1 標識符定義命名規(guī)定
標識符第一個字符必須是字母,,最后一個字符不能是下劃線,同時不允許出現(xiàn)連續(xù)兩個下劃線,?;緲俗R符只能由字母、數(shù)字和下劃線組成,,標識符兩詞之間須用下劃線連接,,如 Packet_addr, Data_in, Mem_wr, Mem_ce。標識符不得與保留字同名,,VHDL規(guī)定的保留字見1.3,。
1.1.2 標識符大小寫規(guī)定
通常情況下,,常量、數(shù)據(jù)類型,、實體名和結構體名采用全部大寫,,變量采用小寫,信號僅第一個詞首字符采用大寫,,保留字一律小寫,。
1.2 信號名習慣命名規(guī)則
1.2.1 信號名縮寫規(guī)定
信號名常采用縮寫形式以便書寫和理解,單詞縮寫中信號名的第一個單詞首字符通常大寫,,例如Addr_in,。采用縮寫時應保證同一信號在模塊中和不同層次內的一致性。
部分常用的縮寫為:
Addr address; Clk clock; Clr clear;
Cnt counter; En enable; Inc increase;
Lch latch; Mem memory; Pntr pointer;
Pst preset; Rst reset; Reg register;
Rd reader; Wr write;
ROM; RAM; CPU; FIFO; ALU; CS; CE
1.2.2 信號名命名建議
信號名應當使用有意義而且有效的名字,,能簡單包含該信號的全部或部分信息,,如:Data_in(數(shù)據(jù)輸入)、Din(單根數(shù)據(jù)線輸入),、FIFO_out(FIFO數(shù)據(jù)總線輸出),、Cnt8_q(8位計數(shù)器輸出信號)。
信號名采用明確且有意義的后綴 ,,常用的后綴如下:
說明:
采用D觸發(fā)器對信號進行延遲,、延遲信號的命名在原信號名之后加后綴_L,,若是在流水線設計中有級延遲,,再分別加后綴_L1、_L2……(L表示lock),;模塊內的反饋信號,,在原信號名之后加后綴_s(s表示same)。
1.3 VHDL保留字
VHDL的保留字匯總如下:
absaccess after alias all and architecture array assert attribute begin block buffer bus case component configuraTIon constant disconnect downto else elsif end enTIty exit file for funcTIon generate generic group guarded if impure in inerTIal inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package port postponed procedure process pure range record register reject rem report return rol ror select severity signal shared sla sll sra srl subtype then to transport type unaffected units until use variablewait when while with xnor xor
02
數(shù)據(jù)對象與類型
2.1 數(shù)據(jù)對象與類型概述
VHDL是很強的類型語言,,其數(shù)據(jù)對象和類型匯總見下表:(其中紅色字體為不可綜合的數(shù)據(jù)對象和數(shù)據(jù)類型)
不同基本類型的數(shù)據(jù)不能由另一類型賦值,,不同類型間的賦值需使用運算符的重載,例如Cnt8_q為STD_LOGIC_VECTOR類型,,若不調用相關庫(使用use IEEE.std_logic_arith.all 語句)對 '+' 運算符進行重載,,則 Cnt8_q <= Cnt8_q + 1 語句在綜合中將報錯。
通常情況常量名和數(shù)據(jù)類型菜用大寫標識符表示,。
2.2 數(shù)據(jù)類型使用建議與注意內容
為改善代碼的可讀性,,可把常用的常量和自定義的數(shù)據(jù)類型在程序包中定義;使用別名來標識一組數(shù)據(jù)類型有利于使代碼更清晰,,如
signal Addr STD_LOGIC_VECTOR(31 downto 0),;
alias Top_addr STD_LOGIC_VECTOR(3 downto 0) is Addr(31 downto 28) ;
可枚舉類型的值為標識符或單個字母的字面量是區(qū)分大小寫的,,如 Z 與z 是兩個不同的量,。
03
信號,、變量與常量
3.1 信號、變量與常量的含義
VHDL常用的數(shù)據(jù)類型主要有信號,、變量與常量這三類,,不同類型的數(shù)據(jù)有各自不同的含義:
3.1.1 信號(signal)
信號是VHDL語法中最重要、最常用的一種可賦值對象,,一般對應電路中特定的物理連線或存儲單元,。除在模塊內部聲明的signal數(shù)據(jù)外,VHDL模塊的port結構中in,、out,、buffer或者inout類型的端口也是signal類型的。
3.1.2 變量(variable)
變量在VHDL代碼中不具有特定的物理意義,,對應關系也不太直接,。作為一個局部量,變量通常只代表某些值暫存的載體,。
3.1.3 常量(constant)
常量在VHDL具有特定的物理意義,,通常對應數(shù)字電路中的電源或者地。常量能出現(xiàn)在所有信號和變量出現(xiàn)的場合,,定義常量的主要目的是為了使設計實體中的某些量易于閱讀和修改,。
3.2 信號、變量與常量的聲明與賦值
VHDL數(shù)據(jù)在調用前需要進行聲明與賦值操作,,不同數(shù)據(jù)類型的數(shù)據(jù)聲明與賦值的位置和方式有所不同:
ARCHITECTURE … OF … IS
SIGNAL 信號1:數(shù)據(jù)類型,;
--信號聲明在這里,在ARCHITECTURE的BEGIN之前
BEGIN
PROCESS(…)
VARIABLE 變量1:數(shù)據(jù)類型,;
--變量聲明在這里,,在PROCESS的BEGIN之前。
BEGIN
END PROCESS;
END;
3.2.1 信號的聲明與賦值
信號通常在結構體內部,,進程,、子程序及函數(shù)外部聲明;在進程中,,信號賦值僅在進程結束時起作用,,即不能夠為同一信號多次賦值。
信號聲明:SIGNAL 信號名:數(shù)據(jù)類型 := 初值,;
信號賦值:信號名 <= 數(shù)值,;
3.2.2 變量的聲明與賦值
變量通常只能在進程、子程序和函數(shù)內部聲明,;變量的賦值是立即起作用的,,即變量值在賦新值時立刻改變。
變量聲明:VARIABLE 變量名:數(shù)據(jù)類型 := 初值;
變量賦值:變量名 := 數(shù)值/表達式,;
3.2.3 常量的聲明與賦值
常量可以在信號和變量出現(xiàn)的所有場合進行聲明,,通常情況下,常量不能單獨賦值,,僅能在聲明的同時被初始化賦值,。
常量聲明:CONSTANT 常量名:數(shù)據(jù)類型 := 表達式;
3.3 使用建議與注意內容
1. 信號通常情況下不允許賦初值:
盡管當前主流FPGA均支持數(shù)據(jù)賦初值,,但是為避免硬件可能出現(xiàn)的問題,,通常不在信號聲明時賦初值,而是采用復位時賦值的方法來賦初值,。
2. 變量在可綜合模塊中不建議使用:
變量主要用在高層次的模擬模型建模及用于運算的用途,,由于變量的綜合較難定義,對于編寫可綜合的VHDL模塊,,在沒有把握綜合結果情況下不建議使用,。
3. 信號在進程中賦值情況解釋:
signal_assign: process(A,B,C)
begin
D <= A;----- ignored!!
X <= C or D ,;
D <= B ,;---- overrids !!
Y <= C xor D ;
end;
上面代碼的實際運行結果是:B賦值給D,,C or B的結果賦值給X,,C xor B的結果賦值給Y。
4. 變量在進程中賦值情況解釋:
variable_assign:process(A,B,C)
variable d:STD_LOGIC
begin
d := A,;
X <= C or d,;
d := B;
Y <= C xor d ,;
end process,;
上面代碼的實際運行結果是:C or A賦值給X,,C xor B賦值給Y,。
更多信息可以來這里獲取==>>電子技術應用-AET<<