摘要:VHDL語(yǔ)言是現(xiàn)代電子設(shè)計(jì)的重要工具。數(shù)據(jù)對(duì)象是其中的重要語(yǔ)言要素,通常由常量、變量與信號(hào)等組成,一般情況下,這些要素在經(jīng)過(guò)綜合后可以引入寄存器,這樣就能夠產(chǎn)生相同的邏輯電路,與初始值的功效基本相同。語(yǔ)言要素中的常量和變量可以從計(jì)算機(jī)語(yǔ)言中找到與其對(duì)應(yīng)的數(shù)據(jù)類型,并且這類常量和變量的語(yǔ)言行為與高級(jí)中的變量和常量基本相同。比較特殊的要素是信號(hào),它的數(shù)據(jù)對(duì)象包含更多的硬件特征,這也是VHDL中最有特色的語(yǔ)言要素之一。本論文講述的是常量和變量的相似之處,還有變量和信號(hào)的相同與不同之處,主要表現(xiàn)為定義位置、適用范圍、延時(shí)行為特性等,并以實(shí)例加以驗(yàn)證。
關(guān)鍵詞:VHDL 變量 信號(hào)
0 引言
電子電路技術(shù)更新?lián)Q代的周期很快,新技術(shù)的發(fā)明與應(yīng)用所需時(shí)間很短,集成電路技術(shù)也在發(fā)生著日新月異的變化,在這樣的背景下,傳統(tǒng)的芯片設(shè)計(jì)技術(shù)和系統(tǒng)集成技術(shù)已經(jīng)不能適應(yīng)新的標(biāo)準(zhǔn)要求。因此,必須要盡快提高設(shè)計(jì)效率,要想提高設(shè)計(jì)效率必須要降低設(shè)計(jì)難度,VHDL設(shè)計(jì)方法能夠在很大程度上降低芯片和系統(tǒng)集成的設(shè)計(jì)難度。電子設(shè)計(jì)自動(dòng)化技術(shù)是現(xiàn)代電子設(shè)計(jì)的重要技術(shù),高速集成電路硬件描述語(yǔ)言是EDA的重要工具。
1 關(guān)于數(shù)據(jù)對(duì)象的簡(jiǎn)介
在VHDL語(yǔ)言要素中,數(shù)據(jù)對(duì)象是比較重要的內(nèi)容,一般都包含如下三類:常量、變量和信號(hào)。
常量是一個(gè)全局量,它的定義和設(shè)置主要是為了使程序更容易閱讀和修改,在程序中,常量作為一個(gè)固定不變的穩(wěn)定值,不可以被改變。
變量相對(duì)于常量來(lái)說(shuō),算是一個(gè)局部量,變量主要是在局部程序的某個(gè)進(jìn)程或子程序中使用。變量一般不可以超出自身所在的程序結(jié)構(gòu),其信息的傳輸也離不開(kāi)程序結(jié)構(gòu)對(duì)其所做的定義和賦值,在實(shí)際工作過(guò)程中,不會(huì)出現(xiàn)延時(shí)暫停的狀況,工作具有即發(fā)性。
信號(hào)是一種比較特殊的數(shù)據(jù)對(duì)象,作為在VHDL中的一個(gè)全局量,通常是在程序包說(shuō)明、實(shí)體說(shuō)明和結(jié)構(gòu)體描述中使用。信號(hào)與連接線比較類似,通過(guò)基本數(shù)據(jù)來(lái)描述硬件系統(tǒng),信號(hào)可以充當(dāng)并行語(yǔ)句模塊間的信息交流通道。
2 信號(hào)與變量的定義位置與賦值范圍
在VHDL中,定義變量的一般表述是:variable 變量名:數(shù)據(jù)類型:=初始值。變量限于自身的屬性,作為局部量,其能夠適用的范圍很小,通常情況下僅限于定義了變量的進(jìn)程或子程序的順序語(yǔ)句中。變量不能將信息帶出對(duì)它作出定義的當(dāng)前結(jié)構(gòu)中。在這些語(yǔ)句結(jié)構(gòu)中,同一變量的值將隨變量的賦值語(yǔ)句前后順序的運(yùn)算而改變。變量的賦值其實(shí)從技術(shù)角度來(lái)看,本身是一種十分理想的數(shù)據(jù)傳輸模式,這種工作時(shí)瞬間發(fā)生,不會(huì)有暫停或遲滯現(xiàn)象發(fā)生。
變量定義語(yǔ)句中的初始值可以是一個(gè)與變量具有相同數(shù)據(jù)類型的常數(shù)值,這個(gè)表達(dá)式的數(shù)據(jù)類型必須與所賦值的變量一致。
變量的主要作用是在進(jìn)程中作為臨時(shí)的數(shù)據(jù)存儲(chǔ)單元。
變量賦值的一般表述為:目標(biāo)變量名:=表達(dá)式;
信號(hào)定義的語(yǔ)句格式與變量相似,信號(hào)定義也可以設(shè)置初始值。
定義信號(hào)的一般表述是:Signal 信號(hào)名:數(shù)據(jù)類型:=初始值
信號(hào)賦值語(yǔ)句表達(dá)式為:目標(biāo)信號(hào)名〈=表達(dá)式;
賦值語(yǔ)句中的表達(dá)式可以是一個(gè)運(yùn)算表達(dá)式,也可以是數(shù)據(jù)對(duì)象(常量、變量、信號(hào))。數(shù)據(jù)信息的傳入可以設(shè)置延時(shí)量。所以目標(biāo)信號(hào)獲得傳入的數(shù)據(jù)并不是即時(shí)的。即使不作任何的延時(shí)設(shè)置,也要經(jīng)歷一個(gè)特定的延時(shí)。因此,由于器件的延遲特性,符號(hào)“〈=”兩邊的數(shù)值并不是一致的。
所以,兩者賦值位置與范圍不同,主要體現(xiàn)在三個(gè)方面:①基本用法:信號(hào)用于作為電路中的信號(hào)連線;變量用于作為進(jìn)程中局部數(shù)據(jù)存儲(chǔ)單元。②適用范圍:信號(hào)適用于整個(gè)結(jié)構(gòu)體的任何地方;變量只能適用于所定義的進(jìn)程中。③行為特性:信號(hào)在進(jìn)程的最后才對(duì)信號(hào)賦值;變量是立即賦值的。
但也有相同之處,主要體現(xiàn)在兩方面:①在設(shè)計(jì)不準(zhǔn)確、不完整的計(jì)算機(jī)條件語(yǔ)句中,變量與信號(hào)在經(jīng)綜合后一般均可以存入寄存器,這樣也可產(chǎn)生基本相同的邏輯電路。②初始值的功效相同。從技術(shù)角度來(lái)看,沒(méi)有必須明確要求變量和信號(hào)定義的初始值,如果對(duì)其進(jìn)行改變或設(shè)置,可能會(huì)導(dǎo)致綜合后的硬件電路不支持。
3 實(shí)際案例分析
例1:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux4 IS
PORT(i0,i1,i2,i3,a,b:IN STD_LOGIC;
q:OUT STD_LOGIC);
END mux4;
ARCHITECTURE BODY_mux4 OF mux4 IS
Signal muxval : integer range 7 downto 0;
BEGIN
PROCESS(i0,i1,i2,i3,a,b)
Begin
Muxval<=0;
If (a=’1’) thenmuxval<=muxval+1;end if;
If (b=’1’) thenmuxval<=muxval+2;end if;
Case muxval is
When 0=>q<=i0;
When 1=>q<=i1;
When 2=>q<=i2;
When 3=>q<=i3;
When others =>1;
End case;
End PROCESS;
End BODY_mux4;
綜合后的圖為圖1。
圖1
例二:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux4 IS
PORT(i0,i1,i2,i3,a,b:IN STD_LOGIC;
q:OUT STD_LOGIC);
END mux4;
ARCHITECTURE BODY_mux4 OF mux4 IS
BEGIN
PROCESS(i0,i1,i2,i3,a,b)
Variable muxval :integer range 7 downto 0;
Begin
Muxval:=0;
If (a=’1’) thenmuxval:=muxval+1;end if;
If (b=’1’) thenmuxval:=muxval+2;end if;
Case muxval is
When 0=>q<=i0;
When 1=>q<=i1;
When 2=>q<=i2;
When 3=>q<=i3;
When others =>1;
End case;
End PROCESS;
End BODY_mux4;
綜合的結(jié)果為圖2。
從上面兩個(gè)例子的結(jié)構(gòu)可以看出,設(shè)計(jì)者的用意是想要設(shè)計(jì)一個(gè)4選1多路選擇器,對(duì)應(yīng)的電路理應(yīng)是一個(gè)純組合電路,其中的a和b是通道選通的控制信號(hào)。例一與例二的主要不同在于,例一中將標(biāo)識(shí)符muxval定義為信號(hào),而例二中將其定義為變量。結(jié)果綜合出了完全不同的電路。綜合后的電路圖如圖1和圖2所示。可以從電路圖中看出,圖1中含有時(shí)序電路,而圖2是純組合電路。
例一中,信號(hào)muxval在進(jìn)程中出現(xiàn)了三次賦值操作,即有三個(gè)賦值源:muxval<=0、muxval<=muxval+1和 muxval<=muxval+2,但根據(jù)進(jìn)程中信號(hào)的賦值規(guī)則,前兩個(gè)賦值語(yǔ)句中的賦值目標(biāo)信號(hào)muxval都不可能得到更新,只有最后的muxval<=muxval+2語(yǔ)句中的muxval的值得到了更新,所以傳輸符號(hào)右邊的muxval并未得到任何確定的初值,即并未執(zhí)行語(yǔ)句muxval<=0,結(jié)果只能被綜合成隨b和a變動(dòng)的時(shí)序電路,導(dǎo)致左邊的muxval也是一個(gè)不確定的信號(hào)。結(jié)果在進(jìn)程最后的CASE語(yǔ)句中,無(wú)法通過(guò)判斷muxval的值來(lái)確定選通輸入,及對(duì)q的賦值。
例一和例二就有所不同了,程序中首先將muxval定義為變量,根據(jù)變量順序賦值以及暫存數(shù)據(jù)的規(guī)則,首先執(zhí)行了語(yǔ)句muxval:=0,從而使兩個(gè)if語(yǔ)句中的muxval都能得到確定的初值。另一方面,當(dāng)if語(yǔ)句不滿足條件時(shí),即當(dāng)a或b不等于1時(shí),由于muxval已經(jīng)在第一條賦值語(yǔ)句中被更新為確定的值,即0了,所以盡管兩個(gè)if語(yǔ)句從表面上看都屬于不完整的條件語(yǔ)句,但都不可能被綜合成時(shí)序電路了,顯然從圖2可以看到一個(gè)純組合電路。
4 結(jié)論
本文首先通過(guò)描述和比較,總結(jié)了信號(hào)和變量在定義和賦值范圍上的不同與相同,然后經(jīng)過(guò)程序和綜合結(jié)果的比較,總結(jié)了變量與信號(hào)的其他區(qū)別,可以看出,若是信號(hào)和變量定義不夠精確和完整,很容易給設(shè)計(jì)結(jié)果造成損失,綜合的電路也會(huì)完全不同。因此,技術(shù)人員在用VHDL語(yǔ)言設(shè)計(jì)芯片或集成電路的程序時(shí),要確保信號(hào)和變量的恰當(dāng)、正確使用,在VHDL語(yǔ)言設(shè)計(jì)中,要能夠熟練準(zhǔn)確地使用信號(hào)或變量的系統(tǒng)默認(rèn)值,盡可能地靈活實(shí)現(xiàn)設(shè)計(jì)的目標(biāo)。
參考文獻(xiàn):
[1]潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程[M].北京:科學(xué)出版社,2005.
[2]曾繁泰.EDA工程的理論與實(shí)踐[M].北京:電子工業(yè)出版社,2004.
[3]徐惠民.數(shù)字邏輯設(shè)計(jì)與VHDL描述[M].北京:機(jī)械工業(yè)出版社,2004.
[4]江國(guó)強(qiáng)編著.EDA技術(shù)與應(yīng)用[M].北京:電子工業(yè)出版社,2004.
[5]姜立東等編著.VHDL語(yǔ)言程序設(shè)計(jì)及應(yīng)用 第二版[M].2004年06月.
[6]黃智偉.全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽訓(xùn)練教程[M].北京:電子工業(yè)出版社,2005:241-242.