【文章內(nèi)容簡(jiǎn)介】
ECTOR( high DOWNTO low)。 output name,output name:OUT STD_LOGIC)。END entity name。 ARCHITECTURE a OF entity name IS SIGNAL signal name:STD_LOGIC。BEGIN process statement (optional): generate statement (optional) END a。 一、實(shí)體VHDL實(shí)體是一個(gè)設(shè)計(jì)實(shí)體(獨(dú)立的電路功能結(jié)構(gòu))的結(jié)構(gòu)之一,它的作用是對(duì)這個(gè)設(shè)計(jì)實(shí)體與外部電路進(jìn)行接口描述。實(shí)體是設(shè)計(jì)實(shí)體的表層設(shè)計(jì)單元,實(shí)體說(shuō)明部分規(guī)定了設(shè)計(jì)單元的輸入輸出接口信號(hào)或引腳,它是設(shè)計(jì)實(shí)體對(duì)外的一個(gè)通信界面。端口名是賦予每個(gè)系統(tǒng)引腳的名稱。一個(gè)實(shí)體通常有一個(gè)或多個(gè)端口,端口類似于原理圖部件符合上的管腳。實(shí)體與外界交流的信息必須通過(guò)端口通道流入或流出。VHDL要求只有相同的數(shù)據(jù)類型的端口信號(hào)和操作數(shù)才能相互作用。二、結(jié)構(gòu)體 結(jié)構(gòu)體構(gòu)造圖在這里塊語(yǔ)句是一連串平行語(yǔ)句組成的組合體,它的作用是把結(jié)構(gòu)體中的并行語(yǔ)句組成一個(gè)或著多個(gè)子模塊;進(jìn)程語(yǔ)句:定義順序語(yǔ)句模塊,用于將從外面獲取的信號(hào)值或內(nèi)部演算數(shù)據(jù)向其余的信號(hào)進(jìn)行賦值[10];信號(hào)賦值語(yǔ)句:將設(shè)計(jì)的實(shí)體內(nèi)的處理結(jié)果向之前定義的信號(hào)或界面端口進(jìn)行賦值;子程序調(diào)用語(yǔ)句:用以調(diào)用過(guò)程或函數(shù),并將獲得的結(jié)果賦值與信號(hào);元件例化語(yǔ)句:就是將提前設(shè)定好的設(shè)計(jì)實(shí)體作為一個(gè)元件,然后運(yùn)用映射語(yǔ)句把該元件與另外的一個(gè)設(shè)計(jì)實(shí)體中的指定端口,繼而實(shí)現(xiàn)層次化的設(shè)計(jì)。結(jié)構(gòu)體是實(shí)體所定義的設(shè)計(jì)實(shí)體中一個(gè)構(gòu)成部分。結(jié)構(gòu)體描述的設(shè)計(jì)實(shí)體的內(nèi)部結(jié)構(gòu)和外部設(shè)計(jì)實(shí)體端口間的邏輯關(guān)系。結(jié)構(gòu)體的組成部分是:對(duì)數(shù)據(jù)類型的、常數(shù)、信號(hào)、子程序和元件等元素的說(shuō)明部分[11]。描述實(shí)體邏輯行為的,以各種不同的描述風(fēng)格表達(dá)的功能描述語(yǔ)句。以例化語(yǔ)句為特征的外部元件端口間的連接。每個(gè)實(shí)體可以擁有多個(gè)結(jié)構(gòu)體,但是綜合器只能夠接受一個(gè)結(jié)構(gòu)體。并且每個(gè)結(jié)構(gòu)體對(duì)應(yīng)的實(shí)體不同的結(jié)構(gòu)和算法實(shí)現(xiàn)方案,其間的各結(jié)構(gòu)體的位置是平等的。三、庫(kù) 庫(kù)是可以看成是一種用來(lái)儲(chǔ)存預(yù)先完成的程序包、數(shù)據(jù)集合體和元件的倉(cāng)庫(kù)。一般的,庫(kù)中放置不同的程序包、而程序包中又可以放置不同數(shù)量的子程序;子程序中又含有函數(shù)、過(guò)程、設(shè)計(jì)實(shí)體(元件)等基礎(chǔ)設(shè)計(jì)單元。VHDL語(yǔ)言的庫(kù)分為兩類:一類是設(shè)計(jì)庫(kù),如在具體設(shè)計(jì)項(xiàng)目中用戶設(shè)定的文件目錄所對(duì)應(yīng)的work庫(kù);另一類是資源庫(kù),資源庫(kù)是常規(guī)元件盒標(biāo)準(zhǔn)模塊存放的庫(kù)。VHDL程序設(shè)計(jì)中常用的庫(kù)有IEEE庫(kù),STD庫(kù),WORK庫(kù)及VITAL庫(kù)。在平時(shí)的FPGA/CPLD的實(shí)驗(yàn)和開(kāi)發(fā),IEEE庫(kù)中的四個(gè)程序包STDLOGICARITH、STDLOGIC116STDLOGICSIGNED和STDLOGICUNSIGNED 足夠工程師使用。但是也要注意在使用庫(kù)之前,一定要進(jìn)行庫(kù)說(shuō)明,庫(kù)的說(shuō)明總是放在設(shè)計(jì)單元的前面。 第二節(jié) VHDL語(yǔ)言一、VHDL文字規(guī)則 VHDL文字主要有數(shù)值型文字和字符串型文字以及標(biāo)識(shí)符。數(shù)值型文字主要整數(shù)(十進(jìn)制),實(shí)數(shù)(十進(jìn)制,小數(shù)點(diǎn)),數(shù)制(進(jìn)制基數(shù)數(shù)值指數(shù),各部全為十進(jìn)制)同時(shí)指數(shù)為零可以省略,物理數(shù)字。字符串型文字包括文字字符串以及數(shù)字字符串。標(biāo)識(shí)符:用于常變量、信號(hào)、端口、子程序或參數(shù)的名字;有效字符;必須以英文字母開(kāi)頭;下劃線必須單一,前后必須有字母或數(shù)字;不區(qū)別字母大小寫。二、VHDL數(shù)據(jù)對(duì)象在VHDL中,數(shù)據(jù)對(duì)象相當(dāng)于傳遞信息的載體,根據(jù)不同的數(shù)據(jù)類型賦予不同的值。在VHDL數(shù)據(jù)對(duì)象的中包含三中類型:常量,變量,信號(hào)。常量:顧名思義是規(guī)定的值,不能在程序中被改變。變量:用于對(duì)暫時(shí)數(shù)據(jù)的局部?jī)?chǔ)存,變量值是在進(jìn)程內(nèi)部是可實(shí)現(xiàn)的,沒(méi)有物理意義。它只能在Process和Function中定義,必須在進(jìn)程和子程序的說(shuō)明性區(qū)域說(shuō)明,并只在其內(nèi)部有效。信號(hào)是描述硬件系統(tǒng)的基本數(shù)據(jù)對(duì)象,代表連接線,Port也是一種信號(hào)。三、VHDL數(shù)據(jù)類型VHDL對(duì)運(yùn)算關(guān)系與賦值關(guān)系中各量(操作數(shù))的數(shù)據(jù)類型有嚴(yán)格的要求,一個(gè)新的數(shù)據(jù)類型必須先建立一個(gè)類型說(shuō)明。類型說(shuō)明規(guī)定說(shuō)明部分、結(jié)構(gòu)體說(shuō)明部分、子程序說(shuō)明部分和進(jìn)程說(shuō)明部分中都中允許有類型說(shuō)明。VHDL 的基本類型有:bit(位)、bitVector(位矢量)、Boolean、time、character、string、integer 、real。 四、VHDL 順序語(yǔ)句VHDL有包括六類基本順序語(yǔ)句 :賦值語(yǔ)句、返回語(yǔ)句、等待語(yǔ)句、流程控制語(yǔ)句、子程序調(diào)用語(yǔ)句、空操作語(yǔ)句。賦值語(yǔ)句有兩種賦值語(yǔ)句:信號(hào)賦值語(yǔ)句以及變量賦值語(yǔ)句。流程控制語(yǔ)句共有五種:IF語(yǔ)句、CASE語(yǔ)句、LOOP語(yǔ)句、NEXT語(yǔ)句、EXIT語(yǔ)句。根據(jù)if語(yǔ)句判斷順序語(yǔ)句的對(duì)或者錯(cuò),當(dāng)條件滿足時(shí),執(zhí)行順序語(yǔ)句A;當(dāng)當(dāng)條件不成立是,執(zhí)行順序語(yǔ)句B。在用VHDL語(yǔ)言進(jìn)行邏輯設(shè)計(jì)時(shí),有些操作室根據(jù)某表達(dá)式的值來(lái)進(jìn)行的,這時(shí)常常會(huì)用到case語(yǔ)句。 在滿足的條件下用case 語(yǔ)句直接選擇多項(xiàng)順序語(yǔ)句中的某一項(xiàng)進(jìn)行執(zhí)行。其中空操作語(yǔ)句不進(jìn)行任何操作,它通常出現(xiàn)在CASE語(yǔ)句中,利用它來(lái)表示剩下的無(wú)效條件下的操作行為——滿足所有可能的條件。但是必須注意:①條件句中的選擇值必在表達(dá)式的取值范圍內(nèi)。 ②除非所有條件句中的選擇值能完全覆蓋CASE語(yǔ)句中表達(dá)式的取值,否則最末一個(gè)條件句中的選擇必須用“OTHER”表示。 ③CASE語(yǔ)句中每一條件句的選擇值只能出現(xiàn)一次,不能有相同選擇值的條件語(yǔ)句出現(xiàn)。 ④CSAE語(yǔ)句執(zhí)行中必須選中且只能選中所列條件語(yǔ)句中的一條。五、VHDL并行語(yǔ)句在VHDL中,并行語(yǔ)句有多種語(yǔ)句結(jié)構(gòu)格式,各種并行語(yǔ)句在結(jié)構(gòu)體中的執(zhí)行時(shí)同步執(zhí)行的。更嚴(yán)格的說(shuō),并行語(yǔ)句在執(zhí)行順序的地位上是平等的,在執(zhí)行順序與書寫的順序無(wú)關(guān)。在執(zhí)行中,并行語(yǔ)句之間可以有信息往來(lái),也可以是互為獨(dú)立,互不相關(guān)。每一并行語(yǔ)句內(nèi)部的語(yǔ)句運(yùn)行方式可以有兩種不同的方式,即并行執(zhí)行方式和順序執(zhí)行方式。在結(jié)構(gòu)體中的可綜合的并行語(yǔ)句主要有七種:并行信號(hào)賦值語(yǔ)句;進(jìn)程語(yǔ)句;快語(yǔ)句;條件信號(hào)賦值語(yǔ)句;元件例化語(yǔ)句;生成語(yǔ)句;并行語(yǔ)句在結(jié)構(gòu)體中的使用格式。第三節(jié) 本章小結(jié)本章主要詳細(xì)描述了VHDL語(yǔ)言程序基本結(jié)構(gòu),包括實(shí)體、結(jié)構(gòu)體、庫(kù),接著論述了VHDL的文字規(guī)則,數(shù)據(jù)對(duì)象,數(shù)據(jù)類型,順序語(yǔ)句,并行語(yǔ)句,給了讀者清晰的概念,為下文的程序設(shè)計(jì)奠定了基礎(chǔ)。第四章 系統(tǒng)設(shè)計(jì)與仿真第1節(jié) 系統(tǒng)介紹在復(fù)雜的十字路口的交通環(huán)境,通過(guò)交通的控制電路設(shè)計(jì)可以有效的實(shí)現(xiàn)全自動(dòng)的控制十字路口的交通燈和倒計(jì)時(shí)器,從而保障了行人和社會(huì)車輛的安全通行。一、設(shè)計(jì)任務(wù)在一個(gè)十字路口,我們?cè)O(shè)計(jì)一個(gè)交通燈控制器,分別安置在東南西北的各個(gè)方向。在東南西北的各個(gè)方向的交通燈上都有四盞燈分別是紅黃綠三種顏色的燈以及左轉(zhuǎn)向燈,我們可以設(shè)定東西交通燈的狀態(tài)是一樣的,南北方向上的交通燈的狀態(tài)時(shí)一樣的。這樣我們要求南北方向的交通燈亮成紅色的時(shí)候,表示東西方向的車輛可以直行和左轉(zhuǎn)。同理,當(dāng)東西方向的交通燈的顏色變成紅色的時(shí)候,表示南北方向的車輛可以直行和左轉(zhuǎn)。當(dāng)左轉(zhuǎn)向燈量的時(shí)候,這是表明該方向的車輛可以進(jìn)行左轉(zhuǎn)。黃燈閃爍表示對(duì)于左轉(zhuǎn)以及直行的車輛馬上就要禁止;當(dāng)然我們也要用到顯示器來(lái)顯示車輛通行的時(shí)間和禁止通行的時(shí)間。二、設(shè)計(jì)要求在十字路口東西方向以及在南北方向各設(shè)一組交通燈;交通燈顯示的順序如下圖所示: 交通燈顯示順序圖東南西北各自設(shè)立一個(gè)倒計(jì)時(shí)器。倒計(jì)時(shí)只顯示對(duì)應(yīng)方向上的紅燈倒計(jì)時(shí)和綠燈倒計(jì)時(shí)。其余的狀態(tài)不顯示倒計(jì)時(shí),到黃燈的時(shí)候只是閃爍。左轉(zhuǎn)燈、紅燈、綠燈和黃燈亮的時(shí)間分別是15秒、80秒、45秒、5秒。狀態(tài)表如表41所示:表41 交通燈狀態(tài)轉(zhuǎn)換表狀態(tài)S0S1S2S3S4S5東 西 方 向紅紅紅紅 左轉(zhuǎn)綠黃亮 燈 1545515455南 北 方 向紅 左轉(zhuǎn)綠黃紅紅紅亮燈1545515455 : 交通信號(hào)燈狀態(tài)轉(zhuǎn)換圖第二節(jié) 系統(tǒng)設(shè)計(jì)仿真對(duì)于交通燈控制器,可基于Quartus II 軟件,采用層次化混合輸入方式進(jìn)行設(shè)計(jì),即頂層采用原理圖設(shè)計(jì),底層采用VHDL語(yǔ)言設(shè)計(jì)。一、頂層框圖的設(shè)計(jì)頂層原理圖設(shè)計(jì)可以依據(jù)系統(tǒng)框圖進(jìn)行,有分頻模塊、控制模塊、倒計(jì)時(shí)模塊、紅綠燈顯示模塊、譯碼模塊、譯碼顯示模塊6六部分組成,: 頂層原理圖系統(tǒng)框圖二、時(shí)序狀態(tài)圖的設(shè)計(jì) 圖32 交通燈時(shí)序狀態(tài)圖 頂層原理圖系統(tǒng)框圖 交通燈時(shí)序狀態(tài)圖時(shí)序狀態(tài)的設(shè)計(jì)實(shí)現(xiàn)十字路口的交通車流控制,: ,當(dāng)東西的紅燈亮?xí)r,此時(shí)南北左轉(zhuǎn)向燈亮起,向左的車輛通行15s的時(shí)間,過(guò)后左轉(zhuǎn)向燈變紅。然后南北直線行駛的綠燈亮起,而且此時(shí)的行人開(kāi)始穿行過(guò)馬路,當(dāng)時(shí)間要到之時(shí)黃燈開(kāi)始閃爍5s,從而完成路口的車輛控制。同理當(dāng)南北方向紅燈時(shí),其東西方向的車輛控制跟南北方向的車輛控制情形一樣。三、工程設(shè)計(jì)流程框圖:新建工程新建原理圖文件或VHDL文件輸入程序或編輯原理圖編譯,若有錯(cuò),修改程序,直至無(wú)錯(cuò)建立波形文件,導(dǎo)入管腳編譯波形文件,查看仿真結(jié)果,保存 工程設(shè)計(jì)流程框圖第三節(jié) 各個(gè)模塊的設(shè)計(jì)與仿真一、 模塊設(shè)計(jì)該模塊可將頻率為1KHZ的脈沖波,經(jīng)過(guò)分頻變?yōu)轭l率為1HZ的脈沖波,這樣我們就得到了周期為1s的脈沖波。利用一下程序我們可以實(shí)現(xiàn)這個(gè)功能:if clk 1khz’event and clk1khz=39。139。 then if q=512 then r:=not r。 q:=0。 else q:=q+1。 end if。 根據(jù)該程序,我們可以通過(guò)仿真可以得到時(shí)序波形,: 分頻器程序仿真結(jié)果圖我們可以看出在分頻器程序仿真結(jié)果圖中,clk1khz 為輸入脈沖信號(hào),頻率為1khz;clk1hz為輸出脈沖信號(hào),頻率為1hz。從圖中,我們可以看出clk1hz的周期為1s。這表明程序的確把1khz的信號(hào)分頻成1hz的信號(hào)。二、control模塊設(shè)計(jì)control模塊可根據(jù)clk的脈沖信號(hào)輸出S的值,下層模塊根據(jù)S的值來(lái)決定紅綠燈的狀態(tài)[13]。同時(shí)對(duì)倒計(jì)時(shí)的信號(hào)賦初值。利用以下程序進(jìn)行各個(gè)燈的狀態(tài)控制: if clk39。event and clk=39。139。 then loadat=39。039。loadbt=39。039。 if t=0 then s=000。 at=80。 loadat=39。139。 elsif t=15 then s=001。 bt=45。 loadbt=39。139。 elsif t=60 then s=010。 elsif t=65 then s=011。 bt=80。 loadbt=39。139。 elsif t=80 then s=100。 at=45。 loadat=39。139。 elsif t=125 then s=101。 end if。 t=t+1。 end if。 if t=130 then t=0。 end if。: control模塊程序仿真結(jié)果圖在control模塊程序仿真結(jié)果圖中,只有一個(gè)輸入信號(hào)clk,它是一個(gè)頻率為1hz的時(shí)鐘脈沖信號(hào),輸出信號(hào)有3個(gè)分別是s、at、bt。程序中,通過(guò)變量t的值來(lái)確定輸出信號(hào)s的值,并由此確定將要賦得倒計(jì)時(shí)的初值,然后賦給at,bt。在每次給at,bt賦值時(shí),都會(huì)使另一個(gè)輸出信號(hào)loadat,loadbt變成高電平,從而可以觸發(fā)下一模塊的裝載。三、atdaojishi和btdaojishi模塊設(shè)計(jì) 該模塊用來(lái)接收control模塊的輸出作為初值,并進(jìn)行減一操作,最后把減一得結(jié)果輸出。程序里每檢測(cè)到一個(gè)脈沖clk,: atdaojishi模塊程序仿真結(jié)果圖在atdaojishi模塊程序仿真結(jié)果圖中,clk為1hz的輸入信號(hào),loadat為at計(jì)數(shù)器的裝載信號(hào),當(dāng)loadat為高電平時(shí),將輸入信號(hào)atin的值裝載到計(jì)數(shù)器中,開(kāi)始執(zhí)行減一操作,每接受一次clk,執(zhí)行一次,并將結(jié)果輸出。 btdaojishi : btdaojishi 模塊仿真程序仿真結(jié)果圖在模塊設(shè)計(jì)中的程序if loadbt=39。139。 then countbt=btin。else countbt=countbt1。實(shí)現(xiàn)了倒計(jì)時(shí)的進(jìn)行。在btdaojishi模塊程序仿真結(jié)果圖中,clk為1hz的輸入信號(hào),loadbt為bt計(jì)數(shù)器的裝載信號(hào),當(dāng)loadbt為高電平時(shí),將輸入信號(hào)btin的值裝載到計(jì)數(shù)器中,開(kāi)始執(zhí)行減一操作,每接受一次clk,執(zhí)行一次,并將結(jié)果輸出。四、Mai