標(biāo)識符命名規(guī)范
標(biāo)識符用于定義實(shí)體名、結(jié)構(gòu)體名、信號和變量名等,選擇有意義的命名對設(shè)計(jì)是十分重要的。命名包含信號或變量諸如出處、有效狀態(tài)等基本含義,有利于提高代碼的可讀性。
1.1 標(biāo)識符習(xí)慣命名規(guī)則
1.1.1 標(biāo)識符定義命名規(guī)定
標(biāo)識符第一個(gè)字符必須是字母,最后一個(gè)字符不能是下劃線,同時(shí)不允許出現(xiàn)連續(xù)兩個(gè)下劃線?;緲?biāo)識符只能由字母、數(shù)字和下劃線組成,標(biāo)識符兩詞之間須用下劃線連接,如 Packet_addr, Data_in, Mem_wr, Mem_ce。標(biāo)識符不得與保留字同名,VHDL規(guī)定的保留字見1.3。
1.1.2 標(biāo)識符大小寫規(guī)定
通常情況下,常量、數(shù)據(jù)類型、實(shí)體名和結(jié)構(gòu)體名采用全部大寫,變量采用小寫,信號僅第一個(gè)詞首字符采用大寫,保留字一律小寫。
1.2 信號名習(xí)慣命名規(guī)則
1.2.1 信號名縮寫規(guī)定
信號名常采用縮寫形式以便書寫和理解,單詞縮寫中信號名的第一個(gè)單詞首字符通常大寫,例如Addr_in。采用縮寫時(shí)應(yīng)保證同一信號在模塊中和不同層次內(nèi)的一致性。
部分常用的縮寫為:
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 信號名命名建議
信號名應(yīng)當(dāng)使用有意義而且有效的名字,能簡單包含該信號的全部或部分信息,如:Data_in(數(shù)據(jù)輸入)、Din(單根數(shù)據(jù)線輸入)、FIFO_out(FIFO數(shù)據(jù)總線輸出)、Cnt8_q(8位計(jì)數(shù)器輸出信號)。
信號名采用明確且有意義的后綴 ,常用的后綴如下:
說明:
采用D觸發(fā)器對信號進(jìn)行延遲、延遲信號的命名在原信號名之后加后綴_L,若是在流水線設(shè)計(jì)中有級延遲,再分別加后綴_L1、_L2……(L表示lock);模塊內(nèi)的反饋信號,在原信號名之后加后綴_s(s表示same)。
1.3 VHDL保留字
VHDL的保留字匯總?cè)缦拢?/p>
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是很強(qiáng)的類型語言,其數(shù)據(jù)對象和類型匯總見下表:(其中紅色字體為不可綜合的數(shù)據(jù)對象和數(shù)據(jù)類型)
不同基本類型的數(shù)據(jù)不能由另一類型賦值,不同類型間的賦值需使用運(yùn)算符的重載,例如Cnt8_q為STD_LOGIC_VECTOR類型,若不調(diào)用相關(guān)庫(使用use IEEE.std_logic_arith.all 語句)對 '+' 運(yùn)算符進(jìn)行重載,則 Cnt8_q <= Cnt8_q + 1 語句在綜合中將報(bào)錯(cuò)。
通常情況常量名和數(shù)據(jù)類型菜用大寫標(biāo)識符表示。
2.2 數(shù)據(jù)類型使用建議與注意內(nèi)容
為改善代碼的可讀性,可把常用的常量和自定義的數(shù)據(jù)類型在程序包中定義;使用別名來標(biāo)識一組數(shù)據(jù)類型有利于使代碼更清晰,如
signal Addr STD_LOGIC_VECTOR(31 downto 0);
alias Top_addr STD_LOGIC_VECTOR(3 downto 0) is Addr(31 downto 28) ;
可枚舉類型的值為標(biāo)識符或單個(gè)字母的字面量是區(qū)分大小寫的,如 Z 與z 是兩個(gè)不同的量。
03
信號、變量與常量
3.1 信號、變量與常量的含義
VHDL常用的數(shù)據(jù)類型主要有信號、變量與常量這三類,不同類型的數(shù)據(jù)有各自不同的含義:
3.1.1 信號(signal)
信號是VHDL語法中最重要、最常用的一種可賦值對象,一般對應(yīng)電路中特定的物理連線或存儲單元。除在模塊內(nèi)部聲明的signal數(shù)據(jù)外,VHDL模塊的port結(jié)構(gòu)中in、out、buffer或者inout類型的端口也是signal類型的。
3.1.2 變量(variable)
變量在VHDL代碼中不具有特定的物理意義,對應(yīng)關(guān)系也不太直接。作為一個(gè)局部量,變量通常只代表某些值暫存的載體。
3.1.3 常量(constant)
常量在VHDL具有特定的物理意義,通常對應(yīng)數(shù)字電路中的電源或者地。常量能出現(xiàn)在所有信號和變量出現(xiàn)的場合,定義常量的主要目的是為了使設(shè)計(jì)實(shí)體中的某些量易于閱讀和修改。
3.2 信號、變量與常量的聲明與賦值
VHDL數(shù)據(jù)在調(diào)用前需要進(jìn)行聲明與賦值操作,不同數(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 信號的聲明與賦值
信號通常在結(jié)構(gòu)體內(nèi)部,進(jìn)程、子程序及函數(shù)外部聲明;在進(jìn)程中,信號賦值僅在進(jìn)程結(jié)束時(shí)起作用,即不能夠?yàn)橥恍盘柖啻钨x值。
信號聲明:SIGNAL 信號名:數(shù)據(jù)類型 := 初值;
信號賦值:信號名 <= 數(shù)值;
3.2.2 變量的聲明與賦值
變量通常只能在進(jìn)程、子程序和函數(shù)內(nèi)部聲明;變量的賦值是立即起作用的,即變量值在賦新值時(shí)立刻改變。
變量聲明:VARIABLE 變量名:數(shù)據(jù)類型 := 初值;
變量賦值:變量名 := 數(shù)值/表達(dá)式;
3.2.3 常量的聲明與賦值
常量可以在信號和變量出現(xiàn)的所有場合進(jìn)行聲明,通常情況下,常量不能單獨(dú)賦值,僅能在聲明的同時(shí)被初始化賦值。
常量聲明:CONSTANT 常量名:數(shù)據(jù)類型 := 表達(dá)式;
3.3 使用建議與注意內(nèi)容
1. 信號通常情況下不允許賦初值:
盡管當(dāng)前主流FPGA均支持?jǐn)?shù)據(jù)賦初值,但是為避免硬件可能出現(xiàn)的問題,通常不在信號聲明時(shí)賦初值,而是采用復(fù)位時(shí)賦值的方法來賦初值。
2. 變量在可綜合模塊中不建議使用:
變量主要用在高層次的模擬模型建模及用于運(yùn)算的用途,由于變量的綜合較難定義,對于編寫可綜合的VHDL模塊,在沒有把握綜合結(jié)果情況下不建議使用。
3. 信號在進(jìn)程中賦值情況解釋:
signal_assign: process(A,B,C)
begin
D <= A;----- ignored!!
X <= C or D ;
D <= B ;---- overrids !!
Y <= C xor D ;
end;
上面代碼的實(shí)際運(yùn)行結(jié)果是:B賦值給D,C or B的結(jié)果賦值給X,C xor B的結(jié)果賦值給Y。
4. 變量在進(jìn)程中賦值情況解釋:
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;
上面代碼的實(shí)際運(yùn)行結(jié)果是:C or A賦值給X,C xor B賦值給Y。
更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<