版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
VHDL實(shí)用教程雷永輝VHDL硬件描述語(yǔ)言及應(yīng)用
-----------一種很好的數(shù)字系統(tǒng)硬件電路的形式化描述實(shí)現(xiàn)緒論EDA與FPGASSI(通用數(shù)字芯片)到MCU(單片機(jī))FPGA/CPLD(現(xiàn)場(chǎng)可編程門陣列和復(fù)雜可編程邏輯器件)是一種發(fā)展趨勢(shì)EDA(electronicdesignautomation,電子設(shè)計(jì)自動(dòng)化)是一個(gè)軟件平臺(tái),指利用計(jì)算機(jī),通過(guò)軟件方式的設(shè)計(jì)和測(cè)試,達(dá)到對(duì)既定功能的硬件系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)。如quartusII7.2,完成HDL文件的邏輯編譯,邏輯簡(jiǎn)化,邏輯綜合及優(yōu)化,布局布線,仿真并產(chǎn)生具體芯片的目標(biāo)文件并下載等FPGA/CPLD與EDA技術(shù)的發(fā)展,使用文本描述電路(HDL)的設(shè)計(jì)方式流行起來(lái)VHDL語(yǔ)言概述HDL:HardwareDescriptionLanguageVHDL:由美國(guó)國(guó)防部開發(fā),1987年由IEEE標(biāo)準(zhǔn)化,1993年進(jìn)一步修訂Verilog:1983年由GatewayDesignAutomation公司開發(fā),1990年被推向公眾領(lǐng)域,1995年成為IEEE標(biāo)準(zhǔn)TOPTODOWN設(shè)計(jì)方法DowntoTop:元件選型到邏輯設(shè)計(jì)到系統(tǒng)設(shè)計(jì)調(diào)試Toptodown:對(duì)系統(tǒng)功能進(jìn)行行為描述、定義和仿真(與具體的物理芯片無(wú)關(guān)),確定設(shè)計(jì)的可行性和正確性,然后利用EDA工具把把功能描述轉(zhuǎn)換成具體目標(biāo)芯片網(wǎng)表進(jìn)行布局布線及后仿真,確保實(shí)際系統(tǒng)性能。在這種設(shè)計(jì)思想下的設(shè)計(jì)師應(yīng)具有以下設(shè)計(jì)思想:
1、設(shè)計(jì)工程師首先要考慮規(guī)劃出能完成某一具體功能、滿足自己產(chǎn)品系統(tǒng)設(shè)計(jì)要求的某一功能模塊
2、利用某種方式(如HDL硬件描述語(yǔ)言)把功能描述出來(lái),通過(guò)功能仿真(HDL仿真器)以驗(yàn)證設(shè)計(jì)思路的正確性
3、當(dāng)所設(shè)計(jì)功能滿足需要時(shí),再考慮以何種方式(即邏輯綜合過(guò)程)完成所需要的設(shè)計(jì),并能直接使用功能定義的描述VHDL的EDA過(guò)程對(duì)初學(xué)者的幾點(diǎn)建議重要性:FPGA是電子設(shè)計(jì)領(lǐng)域中最具活力和發(fā)展前途的一項(xiàng)技術(shù),它的影響絲毫不亞于單片機(jī)的發(fā)明和應(yīng)用應(yīng)用領(lǐng)域:PLD能完成任何數(shù)字器件功能,上至高性能CPU,下至基本的邏輯電路要求基礎(chǔ):數(shù)字電路特別精通,特別是時(shí)序和邏輯的思維習(xí)慣,這也是數(shù)字電路設(shè)計(jì)的高級(jí)境界學(xué)習(xí)方法:FPGA開發(fā)平臺(tái)和開發(fā)流程,對(duì)PLD結(jié)構(gòu)的了解可以提高設(shè)計(jì)的效率和可靠性,如原來(lái)做過(guò)單片機(jī)要變串行思維為并行思維,語(yǔ)言和平臺(tái)是工具,設(shè)計(jì)的核心是時(shí)序和邏輯的物理實(shí)現(xiàn)PLD開發(fā)系統(tǒng)PLD開發(fā)系統(tǒng)包括硬件和軟件兩部分。硬件部分:計(jì)算機(jī)、下載電纜或編程器;軟件部分:集成開發(fā)系統(tǒng)。
Altera公司:MaxplusⅡ、QuartusⅡXilinx公司:Foundation、ISELattice公司:SynarioSystem、ispEXPERTSystem四、PLD設(shè)計(jì)流程設(shè)計(jì)準(zhǔn)備設(shè)計(jì)輸入設(shè)計(jì)處理器件編程功能仿真時(shí)序仿真器件測(cè)試PLD設(shè)計(jì)準(zhǔn)備在設(shè)計(jì)之前,首先要進(jìn)行方案論證和器件選擇等設(shè)計(jì)準(zhǔn)備工作。設(shè)計(jì)者首先要根據(jù)任務(wù)要求,判斷系統(tǒng)的可行性。系統(tǒng)的可行性要受到邏輯要求合理性、成本、開發(fā)條件、器件供應(yīng)等方面的約束。若系統(tǒng)可行,則根據(jù)系統(tǒng)所完成的功能及復(fù)雜程度,對(duì)器件本身的資源和成本、工作速度及連線的可布性等方面進(jìn)行權(quán)衡,選擇合適的設(shè)計(jì)方案和合適的器件類型。設(shè)計(jì)輸入將所設(shè)計(jì)的電路的邏輯功能按照開發(fā)系統(tǒng)要求的形式表達(dá)出來(lái)的過(guò)程稱為設(shè)計(jì)輸入。通常,設(shè)計(jì)輸入有如下三種方式:(1)原理圖輸入方式適用于對(duì)系統(tǒng)及各部分電路很熟悉的場(chǎng)合。(2)硬件描述語(yǔ)言輸入方式硬件描述語(yǔ)言是用文本方式描述設(shè)計(jì),硬件描述語(yǔ)言有ABEL、AHDL、VHDL、Verilog等,其中VHDL和Verilog已成為IEEE標(biāo)準(zhǔn)。(3)波形輸入方式設(shè)計(jì)處理邏輯優(yōu)化把邏輯描述轉(zhuǎn)變?yōu)樽钸m合在器件中實(shí)現(xiàn)的形式,優(yōu)化使設(shè)計(jì)所占用的資源最少。邏輯綜合根據(jù)設(shè)計(jì)描述,對(duì)給定的硬件結(jié)構(gòu)組件,最終獲得門級(jí)電路甚至更底層的電路描述文件,即將多個(gè)模塊化設(shè)計(jì)文件合并為一個(gè)網(wǎng)表文件。適配確定優(yōu)化后的邏輯能否與器件中的宏單元和I/O單元適配。分割將大的設(shè)計(jì)分割為多個(gè)便于器件內(nèi)部資源實(shí)現(xiàn)的邏輯小塊的形式。設(shè)計(jì)校驗(yàn)設(shè)計(jì)校驗(yàn)過(guò)程包括功能仿真和時(shí)序仿真。
功能仿真時(shí)序仿真器件編程器件編程就是將開發(fā)系統(tǒng)生成的目標(biāo)文件下載到可編程邏輯器件中,來(lái)定義內(nèi)部模塊的邏輯功能以及它們的相互連接關(guān)系。
兩種編程方式:編程器下載電纜PLD開發(fā)系統(tǒng)PLD開發(fā)系統(tǒng)包括硬件和軟件兩部分。硬件部分:計(jì)算機(jī)、下載電纜或編程器;軟件部分:集成開發(fā)系統(tǒng)。
Altera公司:MaxplusⅡ、QuartusⅡXilinx公司:Foundation、ISELattice公司:SynarioSystem、ispEXPERTSystem三、PLD電路設(shè)計(jì)的特點(diǎn)1、設(shè)計(jì)簡(jiǎn)單,方便;2、電路系統(tǒng)可以集成在一片芯片上;3、電路設(shè)計(jì)不依賴于器件進(jìn)行設(shè)計(jì);4、電路系統(tǒng)很容易完善和升級(jí)。器件選擇:(1)電路系統(tǒng)所完成的功能及復(fù)雜程度;(2)器件本身的資源和成本、性能參數(shù)、器件編程工藝等方面進(jìn)行權(quán)衡。外部示意圖內(nèi)部示意圖LIBRARYieee;USEieee.std_logic_1164.all;ENTITYmcu_collectISPORT ( iclk:INSTD_LOGIC; in1:INSTD_LOGIC; in2:INSTD_LOGIC; in3:INSTD_LOGIC; in4:INSTD_LOGIC; in5:INSTD_LOGIC; o1:OUTSTD_LOGIC; o2:OUTSTD_LOGIC; o3:OUTSTD_LOGIC; o4:OUTSTD_LOGIC; o5:OUTSTD_LOGIC); ENDmcu_collect;ARCHITECTUREmcu_collect_architectureOFmcu_collectIS BEGINk1:process(iclk)beginif(rising_edge(iclk))then o1<=in1; o2<=in2; o3<=in3; o4<=in4; o5<=in5;endif;endprocessk1;ENDmcu_collect_architecture;VHDL入門與程序結(jié)構(gòu)第二章結(jié)構(gòu)概述完整的設(shè)計(jì)實(shí)體的最低要求是能被綜合器接受并能作為一個(gè)獨(dú)立設(shè)計(jì)單元(元件)存在的vhdl程序一個(gè)實(shí)用的vhdl程序一般由庫(kù)(library)、實(shí)體(entity)和結(jié)構(gòu)體(archtecture)組成完整的設(shè)計(jì)實(shí)體由內(nèi)部和外部組成,內(nèi)組由實(shí)際功能的描述組成,為不可視部分,外部由實(shí)體名和端口組成,為可視部分。(看實(shí)例)實(shí)例LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_arith.all;USEieee.std_logic_unsigned.all;ENTITYtest1IS PORT (
iclk:INSTD_LOGIC;
oclk:OUTSTD_LOGIC );
ENDtest1;ARCHITECTUREtest1_architectureOFtest1ISsignalcount:std_logic_vector(30downto0);
BEGINoclk<=count(22);k1:process(iclk)beginifrising_edge(iclk)then count<=count+1;endif;endprocessk1;ENDtest1_architecture;VHDL語(yǔ)言程序的基本構(gòu)成示例庫(kù)、包集合說(shuō)明實(shí)體說(shuō)明構(gòu)造體庫(kù)與包集合用于存放預(yù)先編譯好的程序包(PACKAGE)和數(shù)據(jù)集合體,以便不同的VHDL設(shè)計(jì)使用(注:包集合存在于庫(kù)中)庫(kù)的說(shuō)明總是放在設(shè)計(jì)單元的最前面,如:
LIBRARYieee;前面LIBRARY為關(guān)鍵字,后面ieee為庫(kù)名稱庫(kù)的種類及使用VHDL語(yǔ)言中的庫(kù)分為5類:IEEE庫(kù)、STD庫(kù)、ASIC矢量庫(kù)、WORK庫(kù)和用戶自定義的庫(kù)系統(tǒng)默認(rèn)的庫(kù)存放路徑為:c:\altera\72\quartus\libraris\vhdl除STD庫(kù)和WORK庫(kù)外,其它庫(kù)在使用前必須加以說(shuō)明,同時(shí)還應(yīng)說(shuō)明使用庫(kù)中的具體包集合,如:
LIBRARYieee; USEieee.std_logic_1164.all; USEieee.std_logic_arith.all; USEieee.std_logic_unsigned.all;std_logic_arith與std_logic_unsigned存放在c:\altera\72\quartus\libraris\vhdl\synopsys下的syn_srit.vhd和ayn_unsi.vhd兩文件中庫(kù)的作用范圍庫(kù)的說(shuō)明語(yǔ)名作用范圍是從一個(gè)實(shí)體說(shuō)明開始到它所需結(jié)構(gòu)和配置結(jié)束為止當(dāng)一個(gè)源程序中具有多個(gè)實(shí)體時(shí),每個(gè)實(shí)體前都應(yīng)加庫(kù)說(shuō)明語(yǔ)句,即使完全一樣也要重復(fù)書寫如下:庫(kù)說(shuō)明在多實(shí)體程序中使用庫(kù)分類介紹IEEE庫(kù)STD庫(kù)ASIC矢量庫(kù)WORK庫(kù)用戶自定庫(kù)
作用:
ENTITY(實(shí)體)用于定義電路的外觀,即I/O端口的類型和數(shù)量。定義格式:Entity
實(shí)體名
is
Port(a:
inbit;
b:inbit;
c:outbit);End
實(shí)體名;ENTITY定義區(qū)端口名數(shù)據(jù)類型端口模式端口模式(MODE)有以下幾種類型:
IN;OUT;INOUT;BUFFER
端口模式可用下圖說(shuō)明:(黑框代表一個(gè)設(shè)計(jì)或模塊)
INOUTBUFFERINOUTENTITY定義區(qū)VHDL結(jié)構(gòu)要點(diǎn)注意簡(jiǎn)單地說(shuō)
In
不可以出現(xiàn)在<=或:=的左邊
out不可以出現(xiàn)在<=或:=的右邊
buffer可以出現(xiàn)在<=或:=的兩邊In信號(hào)只能被引用,不能被賦值out信號(hào)只能被賦值,不能被引用buffer信號(hào)可以被引用,也可以被賦值VHDL中的注意事項(xiàng)在VHDL語(yǔ)言中,大小寫不加區(qū)分,但在代碼中巧妙應(yīng)用大小寫,可以使代碼變得易于閱讀和規(guī)范實(shí)體名必須與VHDL文件名相同,否則編譯會(huì)出錯(cuò)信號(hào)與變量,過(guò)程與函數(shù)的區(qū)分類屬參數(shù)說(shuō)明類屬參數(shù)說(shuō)明必須放在端口說(shuō)明之前,用于指定參數(shù)LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_arith.all;USEieee.std_logic_unsigned.all;ENTITYtest_genericIS
GENERIC(m:TIME:=100ns); PORT (
idata:INSTD_LOGIC;
odata:OUTSTD_LOGIC );ENDtest_generic;ARCHITECTUREtest_generic_architectureOFtest_genericISBEGINodata<=idataAFTERm;ENDtest_generic_architecture;端口說(shuō)明端口名是賦于每個(gè)外部引腳的名稱,通常用一個(gè)或幾個(gè)英文字母,或者用英文字母加數(shù)字命名端口方向端口方向是用來(lái)定義外部引腳的信號(hào)方向OUT與BUFFER的區(qū)別端口的數(shù)據(jù)類型端口的數(shù)據(jù)類型一般使用std_logic與std_logic_vectorStd_logic數(shù)據(jù)類型:是位邏輯數(shù)據(jù)類型,其取值只能是兩個(gè)邏輯值‘0’和‘1’中之一Std_logic_vector:是邏輯總線說(shuō)明數(shù)據(jù)類型,取值是一組二進(jìn)制位的值ENTITYtest_genericIS
GENERIC(m:TIME:=100ns); PORT( idata1,idata2,idata3,idata4:INSTD_LOGIC;
odata:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDtest_generic;Idata1,idata2,idata3,idata4只能取‘0’或‘1’;odata只能取“0000”,“0001”,“0010”,“0011”,“0100”….“1111”
ExempleofENTITYGENERIC所定義的元件叫做參數(shù)化元件,即元件的規(guī)?;蛱匦杂蒅ENERIC的常數(shù)決定,利用GENERIC可以設(shè)計(jì)更加通用的元件,彈性地適應(yīng)不同的應(yīng)用
端口信號(hào)名在實(shí)體之中必須是唯一的,信號(hào)名應(yīng)是合法的標(biāo)識(shí)符分別有IN、OUT、INOUT、BUFFER、LINKAGE
常用的有INTEGER、STD_LOGIC、STD_LOGIC_VECTOR
ARCHITECTURE(構(gòu)造體或結(jié)構(gòu)體)所有能被仿真的實(shí)體都由結(jié)構(gòu)體(ARCHITECTURE)描述,即結(jié)構(gòu)體描述實(shí)體的結(jié)構(gòu)或行為,一個(gè)實(shí)體可以有多個(gè)結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體分別代表該實(shí)體功能的不同實(shí)現(xiàn)方案結(jié)構(gòu)體格式:
ARCHITECTURE
結(jié)構(gòu)體名
OF
實(shí)體名
IS
[定義語(yǔ)句(元件例化);]
BEGIN
并行處理語(yǔ)句;
END
結(jié)構(gòu)體名;結(jié)構(gòu)體名是對(duì)本結(jié)構(gòu)體的命名,它是該結(jié)構(gòu)體的惟一名稱,雖然可以由設(shè)計(jì)人員自由命名,但一般都將命名和對(duì)實(shí)體的描述結(jié)合起來(lái),例如:行為描述(BEHAVE),寄存器傳輸級(jí)(RTL)
ExempleofARCHITECTURE定義語(yǔ)名:置于architecture與begin之間,用于定義結(jié)構(gòu)體中的信號(hào)、常數(shù)、數(shù)據(jù)類型和函數(shù)并行處理語(yǔ)名:置于begin與end之間,具體描述構(gòu)造體的行為與連接關(guān)系,語(yǔ)句的執(zhí)行與書定語(yǔ)名的順序無(wú)關(guān)
構(gòu)造體的子結(jié)構(gòu)子結(jié)構(gòu)的使用使設(shè)計(jì)者可以把整個(gè)電路分成若干個(gè)相對(duì)獨(dú)立的模塊來(lái)進(jìn)行描述子結(jié)構(gòu)有:BLOCK,PROCESS,SUBPROGRAMSBLOCK與ARCHITECTURE相當(dāng)于整體原理圖與子原理圖關(guān)系,block結(jié)構(gòu)內(nèi)部語(yǔ)句是并發(fā)的,如希望BLOCK有條件執(zhí)行,可采用衛(wèi)式BLOCK,如下:
ARCHITECTURE的PROCESS子結(jié)構(gòu)PROCESS中的語(yǔ)句是順序執(zhí)行的,一個(gè)結(jié)構(gòu)體中可以有多個(gè)PROCESS,它們之間可以通過(guò)信號(hào)進(jìn)行通信PROCESS的啟動(dòng)受敏感信號(hào)控制,敏感信號(hào)的變化會(huì)直接導(dǎo)致PROCESS的啟動(dòng)進(jìn)程名,可省參數(shù)說(shuō)明:只在本進(jìn)程中有效順序執(zhí)行語(yǔ)句
ARCHITECTURE的SUBPROGRAM子結(jié)構(gòu)與高級(jí)語(yǔ)言中的子程序概念差不多,可以反復(fù)調(diào)用,但不能重入,結(jié)構(gòu)內(nèi)語(yǔ)句為順序執(zhí)行,有Procedure和Function之分多個(gè)過(guò)程和函數(shù)匯集在一起構(gòu)成包集合,幾個(gè)包集合匯集在一起構(gòu)成庫(kù)數(shù)據(jù)類型及運(yùn)算操作符第三章
VHDL中的數(shù)據(jù)對(duì)象在邏輯綜合中,VHDL常用的數(shù)據(jù)對(duì)象有信號(hào)、變量及常量
信號(hào)SIGNAL:為全局變量,定義格式:
SIGNAL
信號(hào)名:
數(shù)據(jù)類型[:=初始值];
賦值格式:
目標(biāo)信號(hào)名<=表達(dá)式常在結(jié)構(gòu)體中用賦值語(yǔ)句完成對(duì)信號(hào)賦初值的任務(wù),因?yàn)榫C合器往往忽略信號(hào)聲名時(shí)所賦的值
常量:全局變量,在設(shè)計(jì)中描述某一規(guī)定類型的特定值不變,如利用它可設(shè)計(jì)不同模值的計(jì)數(shù)器,模值存于一常量中,對(duì)不同的設(shè)計(jì),改變模值僅需改變此常量即可,就如上一章所說(shuō)的參數(shù)化元件。
定義格式:
CONSTANT
常數(shù)名:數(shù)據(jù)類型:=表達(dá)式
變量(VARIABLE):用于聲明局部值或用于子程序中,變量的賦值符號(hào)為“:=”,
定義格式:
VARIABLE
變量名:
數(shù)據(jù)類型[:=初始值]
VHDL中的信號(hào)與變量信號(hào)是實(shí)際的,是內(nèi)部的一個(gè)存儲(chǔ)元件(SIGNAL)或者是外部輸入(IN、OUT、INOUT、BUFFER)變量是虛的,僅是為了書寫方便而引入的一個(gè)名稱,常用在實(shí)現(xiàn)某種算法的賦值語(yǔ)句當(dāng)中如果在一個(gè)進(jìn)程中多次為一個(gè)信號(hào)賦值,只有最后一個(gè)值會(huì)起作用,這與SIGNAL的硬件特性有關(guān)變量賦值時(shí),變量的值改變是立即發(fā)生的信號(hào)賦值用“<=”,變量賦值用“:=”數(shù)據(jù)對(duì)象綜合實(shí)例ARCHITECTUREtest_object_architectureOFtest_objectISconstantn:std_logic:='1';signala:std_logic;BEGINk1:process(idata1)variablecount:integerrange0to10:=0;beginifrising_edge(idata1)then count:=count+1; ifcount=1then
odata<=n;
elsifcount=8then count:=0; else
odata<=idata2; endif;endif;endprocessk1;ENDtest_object_architecture;
VHDL的數(shù)據(jù)類型VHDL是一種強(qiáng)類型語(yǔ)言,對(duì)于每一個(gè)常數(shù)、變量、信號(hào)、函數(shù)及設(shè)定的各種參量的數(shù)據(jù)類型(DATA
TYPES)都有嚴(yán)格要求,相同數(shù)據(jù)類型的變量才能互相傳遞和作用,標(biāo)準(zhǔn)定義的數(shù)據(jù)類型都在VHDL標(biāo)準(zhǔn)程序表STD中定義,實(shí)際使用中,不需要用USE語(yǔ)句以顯式調(diào)用
VHDL常用的數(shù)據(jù)類型有三種:標(biāo)準(zhǔn)定義的數(shù)據(jù)類型、IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量及用戶自定義的數(shù)據(jù)類型標(biāo)準(zhǔn)定義的數(shù)據(jù)類型
Boolean布爾量:取值為FALSE和TRUE
CHARACTER字符:ASCII字符,編程時(shí)用單引號(hào)括起來(lái),如‘A’
STRING字符串:字符失量,雙引號(hào)括起來(lái),如“ADFBD”
INTEGER整數(shù):32位,范圍從-(231-1)到(231-1);
REAL實(shí)數(shù):實(shí)數(shù)類型僅能在VHDL仿真器中使用,綜合器不支持
BIT位:取值為0或1;
TIME時(shí)間:范圍從-(231-1)到(231-1),表達(dá)方法包含數(shù)字、(空格)單位兩部分,如(10
PS);
BIT_VECTOR位矢量:其于BIT數(shù)據(jù)的數(shù)組,使用矢量必須注明寬度,即數(shù)組中的元素個(gè)數(shù)和排列,如SIGNAL
A:
BIT_VECTOR(7
DOWNTO
0)
NATUREAL自然數(shù):整數(shù)的一個(gè)
POSITIVE正整數(shù):
SEVRITY
LEVEL錯(cuò)誤等級(jí):在VHDL仿真器中,錯(cuò)誤等級(jí)用來(lái)設(shè)計(jì)系統(tǒng)的工作狀態(tài),共有四種可能的狀態(tài)值:NOTE,WARNING,ERROR和FAILURE
IEEE預(yù)定義的標(biāo)準(zhǔn)邏輯位與矢量STD_LOGIC:工業(yè)標(biāo)準(zhǔn)的邏輯類型,取值為‘0’、‘1’、‘Z’、‘X’(強(qiáng)未知)、‘W’(弱未知)、‘L’(弱0)、‘H’(弱1)、‘—’(忽略)、‘U’(未初始化),只有前四種具有實(shí)際物理意義,其他的是為了與模擬環(huán)境相容才保留的STD_LOGIC_VECTOR:工業(yè)標(biāo)準(zhǔn)的邏輯類型集,STD_LOGIC的組合用戶自定義的數(shù)據(jù)類型用戶自定義的數(shù)據(jù)類型有枚舉類型、整數(shù)類型和實(shí)數(shù)類型、數(shù)組類型、記錄類型四種枚舉類型:
TYPE
數(shù)據(jù)類型名
IS
(枚舉文字,枚舉文字,.
.
.
.)整數(shù)類型與實(shí)數(shù)類型是標(biāo)準(zhǔn)包中預(yù)定義的整數(shù)類型的子集,由于綜合器無(wú)法綜合未限定范圍的整數(shù)類型的信號(hào)或變量,故一定要用RANGE子句為所定義整數(shù)范圍限定范圍以使綜合器能決定信號(hào)或變量的二進(jìn)制的位數(shù)。
格式:
TYPE
數(shù)據(jù)類型名
IS
RANGE
約束范圍;數(shù)組類型:數(shù)組是同一類型數(shù)據(jù)集合,記錄內(nèi)元素類型可以不同
TYPE
數(shù)據(jù)類型名
IS
ARRAY(下限
TO
上限)
OF
類型名稱,多維數(shù)組不能生成邏輯電路,只能用于仿真圖形記錄類型:
TYPE
記錄類型名
IS
RECODE
元素名:
數(shù)據(jù)類型名;
元素名:
數(shù)據(jù)類型名;
。。。。。。。。。。。。。
END
RECODE
用戶自定義的數(shù)據(jù)類型舉例RANGE<>其范圍一般由調(diào)用者傳遞的參數(shù)決定用戶自定義的子類型對(duì)已定義類型作一些范圍限制(也可以與原數(shù)據(jù)類型完全一致),定義格式為:
SUBTYPE子類型名IS數(shù)據(jù)類型名(范圍)數(shù)據(jù)類型轉(zhuǎn)換VHDL中,不同數(shù)據(jù)類型不能直接進(jìn)行運(yùn)算和代入,要進(jìn)行運(yùn)算或代入必需對(duì)類型進(jìn)行轉(zhuǎn)換,使之一致
BIT_VECTOR與STD_LOGIC_VECTOR代入STD_LOGIC_VECTOR的值只能是二進(jìn)制,代入BIT_VECTOR的值除二進(jìn)制外還可以是八進(jìn)制和十六進(jìn)制數(shù)據(jù)類型的限定VHDL中有時(shí)可以用上下文關(guān)系來(lái)判斷某一數(shù)據(jù)的數(shù)據(jù)類型,如果不能判斷出來(lái),就必需對(duì)數(shù)據(jù)進(jìn)行類型限定,類似C中的強(qiáng)制類型轉(zhuǎn)換運(yùn)算符運(yùn)算符的使用邏輯運(yùn)算、算術(shù)運(yùn)算、關(guān)系運(yùn)算的左右以及代入的數(shù)據(jù)類型一定要相同VHDL中左右沒有優(yōu)先級(jí)的差異,如
x<=(aANDb)OR(NOTcANDd)能真正綜合的算術(shù)運(yùn)算符只有“+”,“-”,“*”;“MOD”,“REM”,“/”分母是2乘方時(shí)可綜合,由于硬件特性,后4種應(yīng)慎用,最好作適當(dāng)變通“《=”應(yīng)通過(guò)上下文關(guān)系判定是關(guān)系運(yùn)算符還是代入符位的連接也可以采用集合的方式,把并置符改成“,”即可,如:temp_4<=(‘1’,‘0’,‘1’,‘0’);其中temp_4為4位寬的位失量,但這種方式不能用于位失量連接,如:temp_4<=(temp_2,temp_2);就是錯(cuò)誤的Vhdl順序語(yǔ)句第四章描述語(yǔ)句分類順序描述語(yǔ)句和并發(fā)描述語(yǔ)句是VHDL程序設(shè)計(jì)中兩大基本描述語(yǔ)句系列順序描述語(yǔ)名只出現(xiàn)在PROCESS和SUBPROGRAM中,語(yǔ)句按出現(xiàn)的次序加以執(zhí)行對(duì)于FPGA搭建的應(yīng)用系統(tǒng),元件在定義的仿真時(shí)該應(yīng)該是并發(fā)工作的,并發(fā)語(yǔ)句就用于表示這種并發(fā)行為順序語(yǔ)句順序描述語(yǔ)句只能出現(xiàn)在進(jìn)程(Process)或子程序中,它定義進(jìn)程或子程序所執(zhí)行的算法。順序描述語(yǔ)句按這些語(yǔ)句在進(jìn)程或子程序中出現(xiàn)的順序執(zhí)行,這一點(diǎn)與高級(jí)語(yǔ)言類似。
VHDL中常用的順序描述語(yǔ)句包括:信號(hào)和變量賦值、Wait、If、Case、Loop、Next、Exit、斷言語(yǔ)句、過(guò)程調(diào)用語(yǔ)句、空語(yǔ)句等。進(jìn)程(Process)所有的順序描述語(yǔ)句都只能在進(jìn)程(process)中使用,進(jìn)程內(nèi)是順序執(zhí)行,進(jìn)程與進(jìn)程之間是并發(fā)的,有點(diǎn)類似于計(jì)算機(jī)操作系統(tǒng)中“進(jìn)程”的概念。Process語(yǔ)句的格式:
[進(jìn)程名]:Process(敏感信號(hào)列表)
Begin
順序描述語(yǔ)句;
EndProcess;
Process語(yǔ)句從Process開始,到End
Process結(jié)束,進(jìn)程名可以省略。功能相對(duì)獨(dú)立的模塊可以用一個(gè)進(jìn)程來(lái)描述。進(jìn)程(Process)
Process語(yǔ)句的格式:例1:
Entitymux2Is
Port
(a,b:Instd_logic;
s:In
std_logic;
f:Out
std_logic);
Endmux2;
ArchitecturebehaviorOfmux2Is
Begin
mux2:Process(a,b,s)
Begin
If(s=‘0’)Thenf<=a;
Elsef<=b;
EndIf;
EndProcess;
Endbehavior;進(jìn)程(Process)
Process的啟動(dòng)和敏感信號(hào)列表:進(jìn)程在仿真運(yùn)行中,總是處于兩個(gè)狀態(tài)之一:執(zhí)行或掛起。初始啟動(dòng)時(shí),進(jìn)程處于執(zhí)行狀態(tài),進(jìn)程中的順序語(yǔ)句從前向后逐句執(zhí)行一遍,即從Process執(zhí)行到EndProcess之前。當(dāng)最后一條語(yǔ)句執(zhí)行完后,返回到進(jìn)程開始的Process語(yǔ)句,進(jìn)程處于掛起狀態(tài)。此時(shí),只要該進(jìn)程的敏感信號(hào)列表中任何一個(gè)信號(hào)發(fā)生變化(即信號(hào)的值發(fā)生變化,如從“1”變到“0”或從“0”變到“1”),進(jìn)程又再次處于執(zhí)行狀態(tài)。然后,再掛起,再執(zhí)行,一直循環(huán)下去,直到仿真結(jié)束。從硬件方面來(lái)看,一個(gè)Process相當(dāng)于一個(gè)電路模塊,它的敏感信號(hào)列表指明了所有能引起該電路模塊狀態(tài)發(fā)生改變的信號(hào)。例1中mux2進(jìn)程的敏感信號(hào)列表是(a,b,s),三個(gè)信號(hào)中的任何一個(gè)發(fā)生變化,都引起進(jìn)程重新執(zhí)行。從硬件特性來(lái)看,二選一電路的a,b,s輸入的變化都可能引起輸出發(fā)生變化。進(jìn)程(Process)
Process的啟動(dòng)和敏感信號(hào)列表:敏感信號(hào)列表對(duì)于進(jìn)程至關(guān)重要,它是進(jìn)程描述的一個(gè)重要組成部分。一般來(lái)說(shuō),如果描述的是組合電路模塊,那么敏感信號(hào)列表必須包括所有的輸入信號(hào);否則,在綜合時(shí)會(huì)出錯(cuò),在仿真時(shí)將導(dǎo)致一個(gè)錯(cuò)誤的結(jié)果。如果描述的是時(shí)序電路模塊,那么敏感信號(hào)列表只需要包括時(shí)鐘信號(hào)和異步清零/置位信號(hào)。因?yàn)?,觸發(fā)器的輸出只在時(shí)鐘上升/下降沿才會(huì)改變。在一個(gè)結(jié)構(gòu)體里可以有多個(gè)Process語(yǔ)句,這些Process之間可以通過(guò)一些信號(hào)相互聯(lián)系。在一個(gè)Process的執(zhí)行中,某個(gè)信號(hào)的值發(fā)生改變,它會(huì)導(dǎo)致另一個(gè)(或幾個(gè))進(jìn)程的重新執(zhí)行,如此構(gòu)成所有進(jìn)程的反復(fù)執(zhí)行。進(jìn)程(Process)中的順序語(yǔ)句
信號(hào)和變量的賦值:信號(hào)的賦值語(yǔ)句格式:目標(biāo)信號(hào)名<=表達(dá)式;例2:
c<=‘1’;
q<=“010010”;
q(1)<=‘1’;
q(3downto1)<=“001”;
a<=b;
s<=axorb;
x<=y+z;需要特別注意的是:VHDL是強(qiáng)類型語(yǔ)言,左邊的信號(hào)量和右邊的表達(dá)式的類型和位長(zhǎng)度都必須一致,否則將出錯(cuò)。進(jìn)程(Process)中的順序語(yǔ)句
信號(hào)和變量的賦值:變量的賦值語(yǔ)句格式:目標(biāo)變量名:=表達(dá)式;例3:
v:=‘1’;
s:=“010010”;變量賦值的符號(hào)與信號(hào)賦值的符號(hào)不同,表達(dá)式與信號(hào)賦值的表達(dá)式寫法是完全一樣的。變量與信號(hào)有明顯的區(qū)別:變量只在定義它的進(jìn)程和子程序內(nèi)有效,無(wú)法傳遞到進(jìn)程之外;而信號(hào)在定義它的結(jié)構(gòu)體內(nèi)有效。賦給變量的值立即成為當(dāng)前值;而賦給信號(hào)的值必須在進(jìn)程結(jié)束后才能成為當(dāng)前值。進(jìn)程(Process)中的順序語(yǔ)句
轉(zhuǎn)向控制語(yǔ)句:條件控制語(yǔ)句——If語(yǔ)句:
IF語(yǔ)句的基本格式:
If條件Then
If條件Then順序描述語(yǔ)句; 順序描述語(yǔ)句;
Else
EndIf;順序描述語(yǔ)句;
EndIf;
進(jìn)程(Process)中的順序語(yǔ)句
轉(zhuǎn)向控制語(yǔ)句:條件控制語(yǔ)句——If語(yǔ)句:例4:EntitydffIs
Port(d:Instd_logic;clk:In
std_logic;
q:Outstd_logic);Enddff;ArchitecturebehaviorOfdffIs
Begin
Process(clk)
Begin
If(clk'eventandclk=’l’)Then
q<=d;
EndIf;
EndProcess;Endbehavior;進(jìn)程(Process)中的順序語(yǔ)句
轉(zhuǎn)向控制語(yǔ)句:條件控制語(yǔ)句——Case語(yǔ)句:
Case語(yǔ)句的基本格式:
Case表達(dá)式Is
When條件表達(dá)式1=>順序描述語(yǔ)句;
When條件表達(dá)式2=>順序描述語(yǔ)句;
...
When條件表達(dá)式n=>順序描述語(yǔ)句;
EndCase;
Case語(yǔ)句的各個(gè)條件表達(dá)式之間沒有優(yōu)先級(jí),所以,給定的條件表達(dá)式不能有重疊,否則將無(wú)法確定執(zhí)行哪一個(gè)分支。而且,如果沒有列舉出Case和Is之間的表達(dá)式的全部取值,則Whenothers=>必不可少。
條件表達(dá)式可以是以下格式:When值=>When值1|值2|...|值n=>When值ito值j=>Whenothers=>它們分別表示條件表達(dá)式的值是某個(gè)確定的值、多個(gè)值中的一個(gè)、一個(gè)取值范圍中的一個(gè)和其他所有的默認(rèn)值。進(jìn)程(Process)中的順序語(yǔ)句
轉(zhuǎn)向控制語(yǔ)句:
Case語(yǔ)句和If語(yǔ)句的區(qū)別:在大多數(shù)情況下,能用Case語(yǔ)句描述的邏輯電路,同樣也可以用多條件If語(yǔ)句來(lái)描述。但有時(shí)能用If語(yǔ)句描述的邏輯電路,卻不能用Case語(yǔ)句描述。通常在Case語(yǔ)句中,條件表達(dá)式(When語(yǔ)句)可以顛倒次序,不致于發(fā)生錯(cuò)誤。但對(duì)于多條件的If語(yǔ)句,卻不能顛倒條件的次序。因?yàn)樵贑ase語(yǔ)句中,條件表達(dá)式是沒有優(yōu)先級(jí)的,而多條件的If語(yǔ)句的條件是有優(yōu)先級(jí)的。在If語(yǔ)句中,最前面的條件其優(yōu)先級(jí)最高,越往后優(yōu)先級(jí)越低,也就是說(shuō),先處理最起始的條件;如果不滿足,再處理下一個(gè)條件。而在Case語(yǔ)句中,所有值的判定是并行處理的。例如,優(yōu)先級(jí)編碼器可以用If語(yǔ)句來(lái)描述,但不可以用Case語(yǔ)句描述。進(jìn)程(Process)中的順序語(yǔ)句
轉(zhuǎn)向控制語(yǔ)句:例5(8位優(yōu)先編碼器):EntitypriorityIs
port(I:inbit_vector(7downto0);A:outbit_vector(2downto0);--encodedoutputGS:outbit);--groupsignaloutputEndpriority;Architecturev1OfpriorityIsBegin
process(I)beginGS<='1';--setdefaultoutputsA<="000";
IfI(7)='1'thenA<="111";
ElsifI(6)='1'thenA<="110";
ElsifI(5)='1'thenA<="101";
ElsifI(4)='1'thenA<="100";
ElsifI(3)='1'thenA<="011";
ElsifI(2)='1'thenA<="010";
ElsifI(1)='1'thenA<="001";
ElsifI(0)='1'thenA<="000";ElseGS<='0';Endif;Endprocess;Endv1;進(jìn)程(Process)中的順序語(yǔ)句
轉(zhuǎn)向控制語(yǔ)句:循環(huán)控制語(yǔ)句——For循環(huán):
For循環(huán)語(yǔ)句的基本格式:
[標(biāo)號(hào):]For循環(huán)變量in循環(huán)次數(shù)范圍Loop順序描述語(yǔ)句;
End
Loop
[標(biāo)號(hào)];這里,標(biāo)號(hào)是可以省略的;循環(huán)變量是整數(shù)型變量,它不需要在結(jié)構(gòu)體或進(jìn)程中定義,在循環(huán)體(由順序描述語(yǔ)句構(gòu)成)中不能通過(guò)信號(hào)或變量給循環(huán)變量賦值。進(jìn)程(Process)中的順序語(yǔ)句
轉(zhuǎn)向控制語(yǔ)句:例6
For循環(huán)(奇偶校驗(yàn)電路):Entityparity_checkerIs
Port(data:Instd_logic_vector(7downtoO);
p:Outstd_logic);Endparity_checker;ArcLitecturebehaviorOfparity_checkerIs
Begin
Process(data)
Variabletmp:std_logic;
Begin
tmp:=‘0’;
Foriin7downto
0Loop
tmp:=tmp
xor
data(i);
EndLoop;
p<=tmp;
EndProcess;Endbehavior;進(jìn)程(Process)中的順序語(yǔ)句轉(zhuǎn)向控制語(yǔ)句:循環(huán)控制語(yǔ)句——While循環(huán):
While循環(huán)語(yǔ)句的基本格式:
[標(biāo)號(hào):]While條件Loop順序描述語(yǔ)句;
End
Loop
[標(biāo)號(hào)];這里,當(dāng)條件為“真”時(shí),執(zhí)行循環(huán)體中的語(yǔ)句;如果條件為“假”時(shí),則結(jié)束循環(huán)。在循環(huán)體內(nèi),必須包含條件式中判別變量的賦值語(yǔ)句,否則會(huì)形成死循環(huán)。實(shí)際上,固定次數(shù)的循環(huán)一般用For循環(huán),不定次數(shù)的循環(huán)用While循環(huán)比較方便。但在進(jìn)行需要綜合的電路描述時(shí),不定次數(shù)的循環(huán)較難控制,所以,一般不用While循環(huán)。進(jìn)程(Process)中的順序語(yǔ)句
轉(zhuǎn)向控制語(yǔ)句:
Next語(yǔ)句:
Next語(yǔ)句的基本格式:
Next[標(biāo)號(hào)]
[When條件];
Next語(yǔ)句用于從循環(huán)體跳出本次循環(huán)。執(zhí)行到該語(yǔ)句時(shí),如果條件為“真”時(shí),將結(jié)束本次循環(huán),跳到“標(biāo)號(hào)”規(guī)定的語(yǔ)句,開始下次循環(huán)。如果標(biāo)號(hào)省略,則表示跳到本層循環(huán)的起始位置,開始下一次循環(huán)。如果標(biāo)號(hào)不省略,則可以跳到多層嵌套循環(huán)的指定外層循環(huán)起始處。如果“When條件”省略,則執(zhí)行到Next語(yǔ)句時(shí)無(wú)條件結(jié)束本次循環(huán)。如果“When條件”不省略,則條件為True時(shí),結(jié)束本次循環(huán)。進(jìn)程(Process)中的順序語(yǔ)句
轉(zhuǎn)向控制語(yǔ)句:
Exit語(yǔ)句:
Exit語(yǔ)句的基本格式:
Exit[標(biāo)號(hào)]
[When條件];
Exit語(yǔ)句用于結(jié)束循環(huán)。執(zhí)行到該語(yǔ)句時(shí),如果條件為“真”時(shí),將結(jié)束循環(huán),跳到“標(biāo)號(hào)”規(guī)定的語(yǔ)句。如果標(biāo)號(hào)省略,則表示跳到EndLoop語(yǔ)句的后繼位置,開始向后執(zhí)行。如果標(biāo)號(hào)不省略,則可以跳到多層嵌套循環(huán)的指定外層循環(huán)起始處。如果“When條件”省略,則執(zhí)行到Next語(yǔ)句時(shí)無(wú)條件結(jié)束循環(huán)。如果“When條件”不省略,則條件為True時(shí),結(jié)束循環(huán)。進(jìn)程(Process)中的順序語(yǔ)句
轉(zhuǎn)向控制語(yǔ)句:
Next語(yǔ)句和Exit語(yǔ)句的區(qū)別:
Next只結(jié)束本次循環(huán),開始下一次循環(huán);而Exit語(yǔ)句結(jié)束整個(gè)循環(huán),跳出循環(huán)體外。進(jìn)程(Process)中的順序語(yǔ)句
Wait等待語(yǔ)句(進(jìn)程掛起語(yǔ)句):進(jìn)程的狀態(tài)還可以通過(guò)Wait語(yǔ)句來(lái)控制,當(dāng)進(jìn)程執(zhí)行到Wait語(yǔ)句時(shí),將被掛起,并設(shè)置好再次執(zhí)行的條件??梢允菬o(wú)限等待(Wait)或有限等待。有限等待的條件可以是:等待一段時(shí)間(WaitFor)、等待某些信號(hào)發(fā)生變化(Waiton)、等待某個(gè)條件滿足(WaitUntil),這幾個(gè)條件還可以組合成一個(gè)復(fù)合條件。進(jìn)程(Process)中的順序語(yǔ)句
Wait等待語(yǔ)句(進(jìn)程掛起語(yǔ)句):
Waiton語(yǔ)句格式:
Waiton信號(hào)列表;信號(hào)列表可以包括一個(gè)或多個(gè)信號(hào),信號(hào)列表中的任何一個(gè)信號(hào)的值發(fā)生變化,進(jìn)程將結(jié)束掛起狀態(tài),進(jìn)入執(zhí)行狀態(tài),執(zhí)行Waiton語(yǔ)句后面的語(yǔ)句。如:
Waitona,b,s;它等待信號(hào)a、b、s中的任何一個(gè)發(fā)生變化。進(jìn)程(Process)中的順序語(yǔ)句
Wait等待語(yǔ)句(進(jìn)程掛起語(yǔ)句):例7:Entitymux2Is
Port(a,b:Instd_logic;
s:Instd_logic;
f:Outstd_logic);Endmux2;ArchitecturebehaviorOfmux2IsBegin
mux2:Process(a,b,s)
Begin
If(s=‘0’)Thenf<=a;
Elsef<=b;
EndIf;
EndProcess;Endbehavior;mux2:Process()Begin
If(s=‘0’)Thenf<=a;
Elsef<=b;
EndIf;
Waitona,b,s;EndProcess;進(jìn)程(Process)中的順序語(yǔ)句
Wait等待語(yǔ)句(進(jìn)程掛起語(yǔ)句):
WaitUntil語(yǔ)句格式:
WaitUntil布爾表達(dá)式;當(dāng)布爾表達(dá)式為“真”時(shí),進(jìn)程將結(jié)束掛起狀態(tài),進(jìn)入執(zhí)行狀態(tài),執(zhí)行WaitUntil語(yǔ)句的后繼語(yǔ)句。如:
WaitUntila=’1’;此時(shí),當(dāng)信號(hào)量a的值不是’1’時(shí),進(jìn)程執(zhí)行到該語(yǔ)句將被掛起,當(dāng)a的值為’1’時(shí)進(jìn)程再次被啟動(dòng),繼續(xù)執(zhí)行Wait語(yǔ)句的后繼語(yǔ)句。進(jìn)程(Process)中的順序語(yǔ)句Wait等待語(yǔ)句(進(jìn)程掛起語(yǔ)句):
WaitFor語(yǔ)句格式:
WaitFor時(shí)間表達(dá)式;如:
WaitFor30ns;
WaitFor語(yǔ)句只能仿真時(shí)使用,不能被綜合。進(jìn)程(Process)中的順序語(yǔ)句
Wait等待語(yǔ)句(進(jìn)程掛起語(yǔ)句):復(fù)合Wait語(yǔ)句:例如:
Waitonclkuntilclk=‘1’;該語(yǔ)句等待到clk信號(hào)的值發(fā)生變化,而且clk的值為‘1’(即clk從‘0’變到‘1’時(shí)),進(jìn)程將結(jié)束掛起狀態(tài),進(jìn)入執(zhí)行狀態(tài),執(zhí)行該語(yǔ)句的后繼語(yǔ)句。編程時(shí)注意等待條件的判別,不要出現(xiàn)“死鎖”狀態(tài)(即無(wú)限期等待)。進(jìn)程(Process)中的順序語(yǔ)句
空操作語(yǔ)句:格式:
Null;進(jìn)程(Process)中的順序語(yǔ)句
斷言語(yǔ)句Assert:
Assert語(yǔ)句的格式是:
Assert條件[report輸出信息]
[severity級(jí)別]斷言語(yǔ)句主要作為仿真和調(diào)試中的人-機(jī)會(huì)話,可以給出一個(gè)文字串作為警告和錯(cuò)誤提示信息。當(dāng)執(zhí)行Assert語(yǔ)句時(shí),就會(huì)對(duì)條件進(jìn)行判別。如果條件為“真”,則執(zhí)行下一條語(yǔ)句;如果條件為“假”,則輸出由report指定的輸出信息和由severity指定的錯(cuò)誤級(jí)別。在report后面跟的是設(shè)計(jì)者所寫的文字串,通常是說(shuō)明錯(cuò)誤的原因,文字串應(yīng)該用雙引號(hào)“”引起來(lái)。斷言語(yǔ)句不是一條可綜合語(yǔ)句,僅僅是為了仿真的方便。進(jìn)程(Process)中的順序語(yǔ)句
斷言語(yǔ)句Assert:例:
Assert
(B=’1’)
report”Btimedoutat
’1’”;
severityerror;
該斷言語(yǔ)句的條件是信號(hào)量B=’1’。如果執(zhí)行到該語(yǔ)句時(shí),信號(hào)量B=’0’,說(shuō)明條件不滿足,就會(huì)輸出report后跟的文字串。該文字串說(shuō)明,出現(xiàn)了超時(shí)等待錯(cuò)誤。severity后跟的錯(cuò)誤級(jí)別告訴操作人員,其出錯(cuò)級(jí)別為error。第五章Vhdl并行語(yǔ)句并發(fā)信號(hào)賦值語(yǔ)句
注意:信號(hào)賦值語(yǔ)句在順序語(yǔ)句里面也有,順序語(yǔ)句里可以給信號(hào)賦值也可以給變量賦值,而順序語(yǔ)句里只能對(duì)變量說(shuō)明,不能對(duì)信號(hào)說(shuō)明。并行語(yǔ)句剛好相反為什么變量不能在并行語(yǔ)句里面說(shuō)明呢?為什么信號(hào)不能在順序語(yǔ)句里面說(shuō)明呢?并發(fā)語(yǔ)句信號(hào)是全局的,變量是局部的
賦值方式一:信號(hào)名<=表達(dá)式賦值方式二(條件信號(hào)賦值):目標(biāo)信號(hào)<=表達(dá)式1
WHEN
條件1
ELSE
表達(dá)式2
WHEN
條件2
ELSE
表達(dá)式3
WHEN
條件3
ELSE
表達(dá)式4注意:用條件信號(hào)賦值,只有當(dāng)用進(jìn)程、IF和CASE難以對(duì)電路進(jìn)行描述時(shí)才用;條件信號(hào)賦值語(yǔ)句ELSE是必須的、不能進(jìn)行嵌套且必須用在結(jié)構(gòu)體中的進(jìn)程之外
賦值方式三(選擇信號(hào)賦值):WITH
選擇條件表達(dá)式
SELECT
目標(biāo)信號(hào)<=信號(hào)表達(dá)式1
WITH
選擇條件1
信號(hào)表達(dá)式2
WITH
選擇條件2
信號(hào)表達(dá)式3
WITH
選擇條件3
信號(hào)表達(dá)式4
WITH
OTHERS
注意:選擇信號(hào)賦值語(yǔ)句必須用在結(jié)構(gòu)體中的進(jìn)程之外
并發(fā)信號(hào)賦值語(yǔ)句的三種形式并發(fā)語(yǔ)句
塊語(yǔ)句在VHDL語(yǔ)言設(shè)計(jì)中,塊語(yǔ)句常常用來(lái)對(duì)比較復(fù)雜的結(jié)構(gòu)體作結(jié)構(gòu)化描述,格式如下
[塊標(biāo)號(hào):]
BLOCK
[衛(wèi)式表達(dá)式]
[類屬子句;]
[端口子句;]
[塊說(shuō)明部分;]
BEGIN
<塊語(yǔ)句說(shuō)明部分;>
END
BLOCK[塊標(biāo)號(hào)];
衛(wèi)式表達(dá)式:是一個(gè)布爾條件表達(dá)式,只有當(dāng)這個(gè)表達(dá)式為TURE時(shí),BLOCK語(yǔ)句才被執(zhí)行;
類屬子句:塊的屬性說(shuō)明
塊說(shuō)明部分:用于定義USE、子程序、數(shù)據(jù)類型、子類型、常量、信號(hào)和元件
塊語(yǔ)句說(shuō)明部分:用于描述塊的具體功能,可以包含結(jié)構(gòu)塊中的任何并行語(yǔ)句結(jié)構(gòu)。
注:塊語(yǔ)句的作用就是將一個(gè)大的結(jié)構(gòu)劃成一塊一塊小的結(jié)構(gòu),現(xiàn)比較流行原理圖和元件的方式,這樣更為簡(jiǎn)潔直觀并發(fā)語(yǔ)句進(jìn)程語(yǔ)句進(jìn)程語(yǔ)句是一種應(yīng)用廣泛的并行語(yǔ)句,一個(gè)結(jié)構(gòu)體中可以包括一個(gè)或者多個(gè)進(jìn)程語(yǔ)句,結(jié)構(gòu)體中的進(jìn)程語(yǔ)句是并發(fā)關(guān)系,即各個(gè)進(jìn)程是同時(shí)處理的、并行執(zhí)行的;但在每一個(gè)進(jìn)程語(yǔ)句結(jié)構(gòu)中,組成進(jìn)程的各個(gè)語(yǔ)句都是順序執(zhí)行,在進(jìn)程語(yǔ)句中是不能用并行語(yǔ)句的。
格式
[進(jìn)程標(biāo)號(hào):]PROCESS
[敏感信號(hào)表]
[IS][進(jìn)程語(yǔ)句說(shuō)明部分;]
BEGIN
<順序語(yǔ)句部分>
END
PROCESS[進(jìn)程標(biāo)號(hào)];
注:
1、
敏感信號(hào)表列出了進(jìn)程語(yǔ)句敏感的所有信號(hào),每當(dāng)其中的一個(gè)信號(hào)發(fā)生變化時(shí),就會(huì)引起其他語(yǔ)句的執(zhí)行,如果敏感信號(hào)表不寫,那么在PROCESS里面必須有WAIT語(yǔ)句,由WAIT語(yǔ)句來(lái)產(chǎn)生對(duì)信號(hào)的敏感;而當(dāng)敏感信號(hào)表存在時(shí),就不能在PROCESS里再有WAIT語(yǔ)句;
2、
IS可有可無(wú),是由93版規(guī)定的
3、
進(jìn)程語(yǔ)句說(shuō)明部分是進(jìn)程語(yǔ)句的一個(gè)說(shuō)明區(qū),它主要用來(lái)定義進(jìn)程語(yǔ)句所需要的局部數(shù)據(jù)環(huán)境,包括數(shù)據(jù)類型說(shuō)明、子程序說(shuō)明和變量說(shuō)明。
4、
進(jìn)程語(yǔ)句有兩種存在狀態(tài),一是等待,當(dāng)敏感信號(hào)沒有發(fā)生變化時(shí);一是執(zhí)行,當(dāng)敏感信號(hào)變化時(shí)。
5、時(shí)鐘信號(hào)自動(dòng)進(jìn)入敏感表
并發(fā)語(yǔ)句子程序調(diào)用語(yǔ)句子程序分為函數(shù)和過(guò)程,它們的定義屬于說(shuō)明語(yǔ)句,均可在順序語(yǔ)句和并行語(yǔ)句里面使用,它們的調(diào)用方法不一樣。
函數(shù)只有一個(gè)返回值,用于賦值,可以說(shuō)在信號(hào)賦值的時(shí)候就是對(duì)函數(shù)的調(diào)用;
過(guò)程有很多個(gè)返回值,用于進(jìn)行處理,準(zhǔn)確的來(lái)說(shuō)子程序調(diào)用語(yǔ)句就是過(guò)程調(diào)用語(yǔ)句。并發(fā)語(yǔ)句
參數(shù)傳遞語(yǔ)句參數(shù)傳遞語(yǔ)句即在實(shí)體中定義的GENERIC,可以描述不由材料和不同工藝構(gòu)成的相同元件或模塊的性能參數(shù)(如延時(shí)),在定義了GENERIC的實(shí)體叫參數(shù)化實(shí)體,由參數(shù)化實(shí)體形成的元件在例化時(shí)具有很大的適應(yīng)性,在不同的環(huán)境下,只須用GENERIC
MAP來(lái)修改參數(shù)就可以了使用時(shí),在對(duì)元件例化時(shí)加在里面就可,比如已經(jīng)定義了一個(gè)AND2的實(shí)體,要在EXAMPLE里面使用AND2,要先對(duì)AND2進(jìn)行元件聲明,再將AND2例化,如下:
u0:
AND2
GENERIC
MAP(參數(shù)值1,參數(shù)值2)
PORT
MAP(參數(shù)表)
并發(fā)語(yǔ)句
元件例化語(yǔ)句一個(gè)實(shí)體就相當(dāng)于元件,元件名就相當(dāng)于實(shí)體名,元件要實(shí)現(xiàn)的功能在實(shí)體里面就已經(jīng)描述好,比如,同一個(gè)文件夾下已經(jīng)有一個(gè)名為A.VHD的文件,如果要在另一個(gè)文件B.VHD里面用到A.VHD里面定義的功能,那么可以在B.VHD文件里面通過(guò)元件聲明和元件例化來(lái)調(diào)用A這個(gè)元件,總的來(lái)說(shuō)調(diào)用元件過(guò)程就是“建立元件----元件聲明------元件例化”,元件調(diào)用時(shí)不用USE語(yǔ)句。注:元件聲明語(yǔ)句屬說(shuō)明語(yǔ)句,不是同步語(yǔ)句,以下對(duì)元聲的說(shuō)明是為了更好地了解元件的調(diào)用,元件的實(shí)例化之前必須要有元件聲明
元件聲明語(yǔ)句格式
COMPONENT
<元件名>
——元件名就是文件名,即是實(shí)體名
[GENERIC
<參數(shù)說(shuō)明>;]
——這就是所產(chǎn)的元件參數(shù)
PORT<端口說(shuō)明>;
END
COMPONENT;
元件例化格式:
元件符:元件名
GENERIC
MAP
(參數(shù)表)
PORT
MAP(端口表)
并發(fā)語(yǔ)句元件例化語(yǔ)句實(shí)例并發(fā)語(yǔ)句元件聲明元件例化并行斷言語(yǔ)句前面已經(jīng)說(shuō)過(guò)順序斷言語(yǔ)句,這里的斷言語(yǔ)句是并行的,可以放在實(shí)體說(shuō)明、結(jié)構(gòu)體和塊語(yǔ)句中使用,可以放在任何要觀察和調(diào)試的點(diǎn)上,而順序斷言語(yǔ)句只能在進(jìn)程、函數(shù)和過(guò)程中使用其實(shí)斷言語(yǔ)句的順序使用格式和并行使用格式是一樣的,因此斷言語(yǔ)句是可以應(yīng)用在任何場(chǎng)所的,格式請(qǐng)看順序的說(shuō)明
并發(fā)語(yǔ)句思考:是不是所有的VHDL語(yǔ)句都可以歸結(jié)為順序語(yǔ)句和并行語(yǔ)句呢?
可以把VHDL語(yǔ)句分為三大類:順序語(yǔ)句、并行語(yǔ)句和說(shuō)明語(yǔ)句,其中說(shuō)語(yǔ)句在沒有調(diào)用之前是不會(huì)參與執(zhí)行的,如:元件和函數(shù)說(shuō)明,在元件實(shí)例化和函數(shù)調(diào)用前是不參與執(zhí)行的三類語(yǔ)句的關(guān)系是順語(yǔ)句可以用在并行語(yǔ)句和說(shuō)明語(yǔ)句當(dāng)中;說(shuō)明語(yǔ)句可以用在并行語(yǔ)句當(dāng)中;而并行語(yǔ)句是不能用在其他語(yǔ)句當(dāng)中,可以說(shuō)并行語(yǔ)句屬于一種高級(jí)形態(tài),是語(yǔ)句的最終形態(tài)過(guò)程和函數(shù)有什么區(qū)別?過(guò)程可以具有多個(gè)返回值(準(zhǔn)確來(lái)說(shuō)不是返回值,而是這些信號(hào)在過(guò)程之中被改變),函數(shù)只有一個(gè)返回值過(guò)程通常用來(lái)定義一個(gè)算法,而函數(shù)用來(lái)產(chǎn)生一個(gè)具有特定意義的值過(guò)程中的形式參數(shù)可以有三種通信模式(輸入、輸出、雙向),而函數(shù)中的形參只能是輸入通信模式(因?yàn)楹瘮?shù)是用來(lái)產(chǎn)生一個(gè)值的)過(guò)程中可以使用賦值語(yǔ)句或WAIT語(yǔ)句,而函數(shù)不可(因?yàn)檫^(guò)程是用來(lái)處理的)第六章Vhdl的描述風(fēng)格VHDL語(yǔ)言的構(gòu)造體描述方式行為描述方式數(shù)據(jù)流描述方式(寄存器傳輸描述RTL)結(jié)構(gòu)描述方式行為描述方式所謂行為描述,就是對(duì)設(shè)計(jì)實(shí)體的數(shù)學(xué)模型的描述,其抽象程度遠(yuǎn)遠(yuǎn)高于數(shù)據(jù)流描述方式和結(jié)構(gòu)描述方式.行為描述類似于高級(jí)編程語(yǔ)言,當(dāng)要描述一個(gè)設(shè)計(jì)實(shí)體的行為時(shí),無(wú)須知道具體電路的結(jié)構(gòu),只需要用一組狀態(tài)來(lái)描述即可.行為描述的優(yōu)點(diǎn)在于只需要描述清楚輸入與輸出的行為,而不需要花費(fèi)更多的精力關(guān)注設(shè)計(jì)功能的門級(jí)實(shí)現(xiàn).數(shù)據(jù)流描述方式數(shù)據(jù)流描述是對(duì)從信號(hào)到信號(hào)的數(shù)據(jù)流的路徑形式進(jìn)行描述,因此很容易進(jìn)行邏輯綜合.由于要對(duì)信號(hào)的流動(dòng)路徑進(jìn)行描述,因此要求設(shè)計(jì)人員對(duì)設(shè)計(jì)實(shí)體的功能實(shí)現(xiàn)要有一定的了解,有時(shí)候還需要對(duì)內(nèi)部電路有清楚的認(rèn)識(shí),具有一定的難度.結(jié)構(gòu)描述方式結(jié)構(gòu)描述方式就是在多層次的設(shè)計(jì)中,通過(guò)調(diào)用庫(kù)中的元件或是已設(shè)計(jì)好的模塊來(lái)完成設(shè)計(jì)實(shí)體功能的描述.在結(jié)構(gòu)體中,描述只表示元件(或模塊)和元件(或模塊)之間的互連,就像網(wǎng)表一樣.當(dāng)引用庫(kù)中不存在的元件時(shí),必須首先進(jìn)行元件的創(chuàng)建,然后將其放在工作庫(kù)中,通過(guò)調(diào)用工作庫(kù)來(lái)引用元件.在引用元件時(shí),要先在結(jié)構(gòu)體說(shuō)明部分進(jìn)行元件的說(shuō)明,然后在使用元件進(jìn)行元件例化.基本演變成原理圖+元件的設(shè)計(jì)方式全加器真值表AiBiCi-1SiCi0000000110010100110110010101011100111111一位全加器的邏輯示意圖ΣabCinSCo采用行為描述方法設(shè)計(jì)一位全加器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYfull_adderIS
PORT(a,b,Cin:INSTD_LOGIC;
Co,S:OUTSTD_LOGIC);ENDfull_adder;ARCHITECTUREbehavOFfull_adderISBEGIN
PROCESS(a,b,Cin)VARIABLEai,bi,ci,si:INTEGER;BEGINIF(a=‘0’)THEN
ai:=0;ELSE
ai:=1;ENDIF;IF(b=‘0’)THENbi:=0;ELSEbi:=1;ENDIF;
IF(Cin=‘0’)THEN
ci:=0;ELSE
ci:=1;ENDIF;
si:=ai+bi+ci;CASEsiISWHEN0=>S=>’0’;Co=>’0’;WHEN1=>S=>’1’;Co=>’0’;WHEN2=>S=>’0’;Co=>’1’;WHEN3=>S=>’1’;Co=>’1’;WHENOTHERS=>S=>’X’;Co=>’0’;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)審和管理評(píng)審培訓(xùn)課件
- 手球指紋課件教學(xué)課件
- 營(yíng)養(yǎng)門診課件教學(xué)課件
- 第三章第一節(jié)第二課時(shí)鐵鹽和亞鐵鹽高一上學(xué)期化學(xué)人教版(2019)必修第一冊(cè)
- 護(hù)理學(xué)科建設(shè)競(jìng)聘
- 2.3.2氣體摩爾體積 課件 高一上學(xué)期化學(xué)人教版(2019)必修第一冊(cè)
- 新食品安全責(zé)任制度
- 沉與浮科學(xué)教案反思
- 化學(xué)反應(yīng)速率說(shuō)課稿
- 好玩的沙子說(shuō)課稿
- 煤礦安全避險(xiǎn)系統(tǒng)有效性評(píng)估
- 濃密機(jī)電氣部分說(shuō)明書
- 漢字應(yīng)用水平測(cè)試國(guó)家卷
- 曼昆《經(jīng)濟(jì)學(xué)原理》(微觀)第五版測(cè)試題庫(kù) (09)
- 2022年《父母課堂》如何幫助孩子順利度過(guò)小學(xué)分化年級(jí)教學(xué)案例
- 幕墻拆除施工方案-(2)
- 感染性心內(nèi)膜炎ppt課件
- 青春期人際交往
- 2022年導(dǎo)管相關(guān)性血流感染(CRBSI)監(jiān)測(cè)規(guī)范及操作手冊(cè)
- 剪紙英文介紹paper cutting(課堂PPT)
- 研究生課件graphpad prism7作圖教程
評(píng)論
0/150
提交評(píng)論