EDA技術(shù)項(xiàng)目教程-基于VHDL與FPGA 課件 項(xiàng)目1 數(shù)據(jù)比較器的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
EDA技術(shù)項(xiàng)目教程-基于VHDL與FPGA 課件 項(xiàng)目1 數(shù)據(jù)比較器的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
EDA技術(shù)項(xiàng)目教程-基于VHDL與FPGA 課件 項(xiàng)目1 數(shù)據(jù)比較器的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
EDA技術(shù)項(xiàng)目教程-基于VHDL與FPGA 課件 項(xiàng)目1 數(shù)據(jù)比較器的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
EDA技術(shù)項(xiàng)目教程-基于VHDL與FPGA 課件 項(xiàng)目1 數(shù)據(jù)比較器的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

EDA項(xiàng)目教程

——基于VHDL與FPGA主編:于潤(rùn)偉本章要點(diǎn)

VHDL的程序結(jié)構(gòu)VHDL的數(shù)據(jù)結(jié)構(gòu)VHDL的并行語(yǔ)句項(xiàng)目3數(shù)據(jù)編碼器的設(shè)計(jì)與實(shí)現(xiàn)VHDL是一種用普通文本形式設(shè)計(jì)數(shù)字系統(tǒng)的硬件描述語(yǔ)言,主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口,可以在任何文字處理軟件環(huán)境中編輯。編寫(xiě)VHDL程序時(shí)允許使用一些符號(hào)(字符串)作為標(biāo)識(shí)符,標(biāo)識(shí)符的命名規(guī)則如下:(1)由26個(gè)英文字母、數(shù)字0~9及下劃線“_”組成。(2)第一個(gè)字符必須以字母開(kāi)頭。(3)下劃線不能連用,最后一個(gè)字符不能是下劃線。(4)對(duì)大小寫(xiě)字母不敏感(英文字母不區(qū)分大小寫(xiě))。在VHDL中把具有特定意義的標(biāo)識(shí)符號(hào)稱(chēng)為關(guān)鍵字,只能作固定用途使用,用戶(hù)不能將關(guān)鍵字作為一般標(biāo)識(shí)符來(lái)使用,如ENTITY,PORT,BEGIN,END等。3.1VHDL的程序結(jié)構(gòu)3.1.1VHDL的基本結(jié)構(gòu)--庫(kù)和程序包部分LIBRARYIEEE;--IEEE庫(kù)

USEIEEE.STD_LOGIC_1164.ALL;--調(diào)用IEEE庫(kù)中STD_LOGIC_1164程序包--實(shí)體部分ENTITYnotgateIS--實(shí)體名為notgatePORT(--端口說(shuō)明

a:INSTD_LOGIC;--定義端口類(lèi)型

和數(shù)據(jù)類(lèi)型

y:OUTSTD_LOGIC);ENDnotgate;--實(shí)體結(jié)束--結(jié)構(gòu)體部分ARCHITECTUREinvOFnotgateIS--結(jié)構(gòu)體名為invBEGINy<=NOTa;--將a取反后賦值給輸出端口yENDinv;--結(jié)構(gòu)體結(jié)束3.1.2庫(kù)和程序包1.庫(kù)LIBRARY庫(kù)名;常用的庫(kù)有IEEE庫(kù)、STD庫(kù)和WORK庫(kù)。2.程序包調(diào)用程序包的通用模式為:USE庫(kù)名.程序包名.ALL;例如調(diào)用STD_LOGIC_1164程序包中的項(xiàng)目需要使用以下語(yǔ)句:LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;3.1.3VHDL的實(shí)體實(shí)體的格式如下:ENTITY實(shí)體名IS[GENERIC(類(lèi)屬說(shuō)明)][PORT(端口說(shuō)明)]END[ENTITY]實(shí)體名;1.類(lèi)屬說(shuō)明GENERIC(常數(shù)名1:數(shù)據(jù)類(lèi)型1:=設(shè)定值1;

……;常數(shù)名n:數(shù)據(jù)類(lèi)型n:=設(shè)定值n);2.端口說(shuō)明PORT(端口信號(hào)名1:端口模式1數(shù)據(jù)類(lèi)型1;

……;端口信號(hào)名n:端口模式n數(shù)據(jù)類(lèi)型n);3.1.4VHDL的結(jié)構(gòu)體

一個(gè)實(shí)體中可以有一個(gè)結(jié)構(gòu)體,也可以有多個(gè)結(jié)構(gòu)體,但各個(gè)結(jié)構(gòu)體不應(yīng)有重名,其格式如下:ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS[結(jié)構(gòu)體說(shuō)明部分;]BEGIN

功能描述語(yǔ)句;END[ARCHITECTURE]結(jié)構(gòu)體名;3.1.5VHDL的特點(diǎn)1.語(yǔ)法規(guī)范標(biāo)準(zhǔn)、開(kāi)發(fā)周期短VHDL具有嚴(yán)格的語(yǔ)法規(guī)范和統(tǒng)一的標(biāo)準(zhǔn),可讀性強(qiáng)。用VHDL書(shū)寫(xiě)的源文件既是程序,又是文檔,可以直接用于設(shè)計(jì)成果的交流。VHDL采用基于模塊庫(kù)的設(shè)計(jì)方法,這樣在設(shè)計(jì)一個(gè)大規(guī)模集成電路或數(shù)字系統(tǒng)的過(guò)程中,技術(shù)人員就不需要從門(mén)級(jí)電路開(kāi)始一步步地進(jìn)行設(shè)計(jì),可以用原來(lái)設(shè)計(jì)好的模塊直接進(jìn)行累加,這些模塊可以預(yù)先設(shè)計(jì)或者使用以前設(shè)計(jì)中的存檔模塊,這些模塊存放在資源庫(kù)中,就可以在以后的設(shè)計(jì)中進(jìn)行復(fù)用。不難看出,復(fù)用減小了硬件電路設(shè)計(jì)的工作量,縮短了開(kāi)發(fā)周期。3.1.5VHDL的特點(diǎn)2.與工藝無(wú)關(guān)

當(dāng)設(shè)計(jì)人員用VHDL進(jìn)行硬件電路設(shè)計(jì)時(shí),并沒(méi)有涉及到與工藝有關(guān)的信息。當(dāng)一個(gè)設(shè)計(jì)描述進(jìn)行完編譯、模擬和綜合后,就可以采用不同的工具軟件將設(shè)計(jì)映射到不同的器件上去。映射不同的器件,只需要改變相應(yīng)的工具軟件,而無(wú)需修改設(shè)計(jì)描述。3.1.5VHDL的特點(diǎn)3.易于ASIC(專(zhuān)用集成電路)移植

當(dāng)產(chǎn)品的數(shù)量達(dá)到相當(dāng)?shù)囊?guī)模時(shí),采用VHDL開(kāi)發(fā)的數(shù)字系統(tǒng)能夠很容易地轉(zhuǎn)成ASIC的設(shè)計(jì)。有時(shí)用于PLD的程序可以直接用于ASIC,并且由于VHDL是一種IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語(yǔ)言,所以使用VHDL設(shè)計(jì)可以確保ASIC廠商生產(chǎn)出高質(zhì)量的芯片產(chǎn)品。3.1.5VHDL的特點(diǎn)4.上市時(shí)間短、成本低VHDL和可編程邏輯器件很好地結(jié)合,可以大大提高數(shù)字產(chǎn)品芯片化設(shè)計(jì)的實(shí)現(xiàn)速度。VHDL使設(shè)計(jì)描述更加方便、快捷,可編程邏輯器件的應(yīng)用可以將產(chǎn)品設(shè)計(jì)的前期風(fēng)險(xiǎn)降至最低,并使設(shè)計(jì)的快速?gòu)?fù)制簡(jiǎn)單易行。3.2編碼器的設(shè)計(jì)

在一些場(chǎng)合,需要用特定的符號(hào)或數(shù)碼表示特定的對(duì)象,例如一個(gè)班級(jí)中的每個(gè)同學(xué)都有不重復(fù)的學(xué)號(hào),每個(gè)電話用戶(hù)都有一個(gè)特定的號(hào)碼等。在數(shù)字電路中,需要將具有某種特定含義的信號(hào)變成代碼,利用代碼表示具有特定含義對(duì)象的過(guò)程,稱(chēng)為編碼。能夠完成編碼功能的器件,稱(chēng)為編碼器(Encoder)。編碼器分為普通編碼器和優(yōu)先級(jí)編碼器兩類(lèi)。3.2.1數(shù)據(jù)對(duì)象1.常量CONSTANT常量名[,常量名…]:數(shù)據(jù)類(lèi)型:=表達(dá)式;CONSTANTVCC:REAL:=3.3;--常量VCC的類(lèi)型是實(shí)

數(shù),值為3.3CONSTANTGND:INTEGER:=0;--常量GND的類(lèi)型是

整數(shù),值為0CONSTANTDELAY:TIME:=100ns;--常量DELAY是

時(shí)間類(lèi)型,初值為100ns。數(shù)值和單位之間要留空格。3.2.1數(shù)據(jù)對(duì)象2.變量VARIABLE變量名[,變量名…]:數(shù)據(jù)類(lèi)型[約束條件][:=表達(dá)式];VARIABLEs1,s2:INTEGER:=256;VARIABLEcont:INTEGERRANGE0TO10;第一條語(yǔ)句中變量s1和s2都為整數(shù)類(lèi)型,初值都是256;第二條語(yǔ)句中,RANGE…TO…是約束條件,表示變量cont的數(shù)據(jù)限制在0~10的整數(shù)范圍內(nèi)。變量CONT沒(méi)有指定初值,則取默認(rèn)值,默認(rèn)值為該類(lèi)型數(shù)據(jù)的最小值或最左端值,那么本條語(yǔ)句中cont初值為0(最左端值)。3.2.1數(shù)據(jù)對(duì)象3.信號(hào)SIGNAL信號(hào)名[,信號(hào)名…]:數(shù)據(jù)類(lèi)型[約束條件][:=表達(dá)式];SIGNALa,b:INTEGER:RANGE0TO7:=5;SIGNALground:BIT:='0';第一條語(yǔ)句定義整數(shù)類(lèi)型信號(hào)a、b,取值范圍限定在0~7,并賦初值5;第二條語(yǔ)句定義位信號(hào)ground并賦初值'0'。在VHDL程序中,信號(hào)和變量是兩個(gè)經(jīng)常使用的對(duì)象,都要求先聲明,后使用,具有一定的相似性,其主要區(qū)別如下:(1)在聲明中賦初值,都使用:=運(yùn)算符;聲明后使用時(shí),信號(hào)賦值使用<=運(yùn)算符,變量賦值仍然使用:=運(yùn)算符;(2)信號(hào)賦值有附加延時(shí),變量賦值則沒(méi)有。(3)對(duì)于進(jìn)程語(yǔ)句,進(jìn)程只對(duì)信號(hào)敏感,不對(duì)變量敏感。(4)外部信號(hào)表示端口,內(nèi)部信號(hào)可看成硬件中的一根連線。變量在硬件中沒(méi)有類(lèi)似的對(duì)應(yīng)關(guān)系,常用于保存運(yùn)算的中間結(jié)果。描述硬件邏輯時(shí),還是應(yīng)以信號(hào)為主,盡量減少變量的使用。3.2.2VHDL的運(yùn)算符(1)邏輯運(yùn)算符。(2)關(guān)系運(yùn)算符。(3)移位運(yùn)算符。(4)符號(hào)運(yùn)算符。(5)連接運(yùn)算符。(6)算術(shù)運(yùn)算符。3.2.3賦值語(yǔ)句賦值語(yǔ)句是將一個(gè)值或者一個(gè)表達(dá)式的結(jié)果傳遞給某一個(gè)數(shù)據(jù)對(duì)象,數(shù)據(jù)在實(shí)體內(nèi)部的傳遞以及對(duì)端口外的傳遞都必須通過(guò)賦值語(yǔ)句來(lái)實(shí)現(xiàn)。VHDL語(yǔ)言提供了兩種類(lèi)型的賦值語(yǔ)句:信號(hào)賦值語(yǔ)句和變量賦值語(yǔ)句。變量賦值語(yǔ)句和信號(hào)賦值語(yǔ)句的語(yǔ)法格式如下:變量:=表達(dá)式;信號(hào)<=表達(dá)式;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYvote_3ISPORT(A,B,C:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDvote_3;ARCHITECTUREdeOFvote_3ISSIGNALe:STD_LOGIC;--定義e為信號(hào)BEGINY<=(AANDB)OR(AANDC)ORe;--以下兩條并行語(yǔ)句與書(shū)寫(xiě)順序無(wú)關(guān)e<=BANDC;ENDde;用賦值語(yǔ)句描述三人表決器三人表決器的波形3.2.4選擇信號(hào)賦值語(yǔ)句WITH選擇表達(dá)式SELECT目標(biāo)信號(hào)<=信號(hào)表達(dá)式1WHEN選擇條件1,信號(hào)表達(dá)式2WHEN選擇條件2,

……,信號(hào)表達(dá)式nWHEN選擇條件n;先對(duì)選擇條件表達(dá)式進(jìn)行判斷,當(dāng)選擇條件表達(dá)式的值符合某一選擇條件時(shí),就將該條件前面的信號(hào)表達(dá)式賦給目標(biāo)信號(hào)。例如,當(dāng)選擇條件表達(dá)式的值符合條件1時(shí),就將信號(hào)表達(dá)式1賦給目標(biāo)信號(hào);當(dāng)選擇條件表達(dá)式的值符合選擇條件n時(shí),就將信號(hào)表達(dá)式n賦給目標(biāo)信號(hào)。(1)只有當(dāng)選擇條件表達(dá)式的值符合某一選擇條件時(shí),才將該選擇條件前面的信號(hào)表達(dá)式賦給目標(biāo)信號(hào)。(2)每一個(gè)信號(hào)表達(dá)式后面都含有WHEN子句。(3)由于選擇信號(hào)賦值語(yǔ)句是并發(fā)執(zhí)行的,所以不能夠在進(jìn)程中使用。(4)對(duì)選擇條件的測(cè)試是同時(shí)進(jìn)行的,語(yǔ)句將對(duì)所有的選擇條件進(jìn)行判斷,而沒(méi)有優(yōu)先級(jí)之分。這時(shí)如果選擇條件重疊,就有可能出現(xiàn)兩個(gè)或兩個(gè)以上的信號(hào)表達(dá)式賦給同一目標(biāo)信號(hào),這樣就會(huì)引起信號(hào)沖突,因此不允許有選擇條件重疊的情況。(5)選擇條件不允許出現(xiàn)涵蓋不全的情況。如果選擇條件不能涵蓋選擇條件表達(dá)式的所有值,就有可能出現(xiàn)選擇條件表達(dá)式的值找不到與之符合的選擇條件,這時(shí)編譯將會(huì)給出錯(cuò)誤信息。用選擇信號(hào)賦值語(yǔ)句描述“四選一”電路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(d0,d1,d2,d3:INSTD_LOGIC;s0,s1:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErt1OFmux4ISSIGNALcomb:STD_LOGIC_VECTOR(1DOWNTO0);BEGINcomb<=s1&s0;WITHcombSELECTq<=d0WHEN"00",d1WHEN"01",d2WHEN"10",d3WHEN"11",'Z'WHENOTHERS;--'Z'必須大寫(xiě),表示高阻狀態(tài)ENDrt1;用選擇信號(hào)賦值語(yǔ)句描述“四選一”電路需要注意的是,以上程序的選擇信號(hào)賦值語(yǔ)句中,comb的值"00"、"01"、"10"和"11"被明確規(guī)定,而用保留字OTHERS來(lái)表示comb的所有其他可能值。因此,為了使選擇條件能夠涵蓋選擇條件表達(dá)式的所有值,這里用OTHERS來(lái)代替comb的所有其他可能值。注意:每條WHEN短句表示并列關(guān)系用逗號(hào),最后一句用分號(hào)。選擇器的波形3.2.58-3線普通編碼器

普通編碼器在某一時(shí)刻只能對(duì)一個(gè)輸入信號(hào)進(jìn)行編碼,即只能有一個(gè)輸入端有效,當(dāng)信號(hào)高電平有效時(shí),則應(yīng)只有一個(gè)輸入信號(hào)為高電平,其余輸入信號(hào)均為低電平。一般來(lái)說(shuō),由于n位二進(jìn)制代碼可以表示2n種不同的狀態(tài),所以,2n個(gè)輸入信號(hào)只需要n個(gè)輸出就完成編碼工作。

1.題目要求利用QuartusⅡ軟件的文本輸入方式,設(shè)計(jì)一個(gè)8-3線普通編碼器,完成編譯和波形仿真后,下載到實(shí)驗(yàn)平臺(tái)驗(yàn)證電路功能。2.電路設(shè)計(jì)8-3線普通編碼器電路具有8個(gè)輸入端,3個(gè)輸出端(23=8),屬于二進(jìn)制編碼器。用X7~X0表示8路輸入,Y2~Y0表示3路輸出。原則上對(duì)輸入信號(hào)的編碼是任意的,常用的編碼方式是按照二進(jìn)制的順序由小到大進(jìn)行編碼。輸入變量輸出變量X7X6X5X4X3X2X1X0Y2Y1Y00000000100000000010001000001000100000100001100010000100001000001010100000011010000000111表3-48-3線普通編碼器真值表LIBRARYieee;USEieee.std_logic_1164.ALL;ENTITYENCODEISPORT(X:INstd_logic_VECTOR(7DOWNTO0);Y:BUFFERstd_logic_VECTOR(2DOWNTO0));ENDENCODE;編碼器程序ARCHITECTUREAOFENCODEISBEGINWITHXSELECTY<="000"WHEN"00000001","001"WHEN"00000010","010"WHEN"00000100","011"WHEN"00001000","100"WHEN"00010000","101"WHEN"00100000","110"WHEN"01000000","111"WHEN"10000000","ZZZ"WHENOTHERS;--“ZZZ”必須大寫(xiě),表示高阻狀態(tài)ENDA;仿真波形從仿真結(jié)果中可以看出,在0~100ns區(qū)間,X(編碼按鍵)=00000000,沒(méi)有按鍵按下,輸出Y(編碼)=ZZZ,表示高阻狀態(tài);在100ns~200ns區(qū)間,X(編碼按鍵)=00000001,X0按鍵按下,輸出Y(編碼)=000;在200ns~300ns區(qū)間,X(編碼按鍵)=00000010,X1按鍵按下,輸出Y(編碼)=001;在300ns~400ns區(qū)間,X(編碼按鍵)=00000011,X1和X0按鍵都被按下,多余1個(gè)按鍵,輸出Y(編碼)=ZZZ,表示高阻狀態(tài)。其他區(qū)間的波形情況符合8-3線普通編碼器。按下與X7鎖定的按鍵,輸出信號(hào)應(yīng)該為111;抬起與X7鎖定的按鍵,按下與X3鎖定的按鍵,輸出信號(hào)應(yīng)該為011;不抬起與X3鎖定的按鍵,再按下與X7鎖定的按鍵,由于輸入編碼信號(hào)超過(guò)1個(gè),輸出信號(hào)為高阻狀態(tài)(觀察與低電平的區(qū)別);按下與其他信號(hào)端鎖定的按鍵,觀察輸出信號(hào)。電路測(cè)試3.3優(yōu)先編碼器的設(shè)計(jì)

普通編碼器工作時(shí)若同時(shí)出現(xiàn)兩個(gè)以上的有效輸入信號(hào),則會(huì)造成電路工作的混亂,為此設(shè)計(jì)了優(yōu)先編碼器。

優(yōu)先編碼器允許多個(gè)有效輸入信號(hào)同時(shí)存在,但根據(jù)事先設(shè)定的優(yōu)先級(jí)別不同,編碼器只輸入信號(hào)中優(yōu)先級(jí)別最高的編碼請(qǐng)求,而不響應(yīng)其他的輸入信號(hào)。3.3.1數(shù)據(jù)類(lèi)型1.STANDARD程序包中預(yù)定義的數(shù)據(jù)類(lèi)型(1)整數(shù)類(lèi)型(INTEGER)

整數(shù)與數(shù)學(xué)中的整數(shù)相似,包括正整數(shù)、零、負(fù)整數(shù)。整數(shù)類(lèi)型可進(jìn)行關(guān)系運(yùn)算和算術(shù)運(yùn)算。整數(shù)類(lèi)型的表示范圍是-231~231-1,這么大范圍的數(shù)值及其運(yùn)算在硬件電路實(shí)現(xiàn)過(guò)程中將消耗很大的器件資源,而實(shí)際涉及的整數(shù)范圍通常很小,例如一個(gè)十進(jìn)制7端數(shù)碼管只需顯示“0~9”共10個(gè)數(shù)字。因此在使用整數(shù)類(lèi)型時(shí),要求用RANGE語(yǔ)句為定義的整數(shù)確定一個(gè)范圍。例如:SIGNALnum:INTEGERRANGE0TO255;--定義整型信號(hào)num的范圍0~255整數(shù)包括十進(jìn)制、二進(jìn)制、八進(jìn)制和十六進(jìn)制,默認(rèn)進(jìn)制是十進(jìn)制。其他進(jìn)制在表示時(shí)用符號(hào)#區(qū)分進(jìn)制與數(shù)值。例如:123表示十進(jìn)制整數(shù)123、2#0110#表示二進(jìn)制整數(shù)0110、8#576#表示八進(jìn)制整數(shù)576、16#FA#表示十六進(jìn)制整數(shù)FA。3.3.1數(shù)據(jù)類(lèi)型1.STANDARD程序包中預(yù)定義的數(shù)據(jù)類(lèi)型(2)自然數(shù)(NATURAL)和正整數(shù)(POSITIVE)

自然數(shù)類(lèi)型是整數(shù)的子集,正整數(shù)類(lèi)型又是自然數(shù)類(lèi)型的子集。自然數(shù)包括零和正整數(shù),正整數(shù)只包括大于零的整數(shù)。3.3.1數(shù)據(jù)類(lèi)型1.STANDARD程序包中預(yù)定義的數(shù)據(jù)類(lèi)型(3)實(shí)數(shù)(REAL)類(lèi)型

與數(shù)學(xué)中的實(shí)數(shù)類(lèi)似,數(shù)據(jù)范圍是-1.0E38~+1.0E38。書(shū)寫(xiě)時(shí)一定要有小數(shù)點(diǎn)(包括小數(shù)部分為0時(shí))或采用科學(xué)計(jì)數(shù)形式。VHDL僅在仿真時(shí)可使用該類(lèi)型,在綜合過(guò)程中綜合器是不支持實(shí)數(shù)類(lèi)型的。實(shí)數(shù)也包括十進(jìn)制、二進(jìn)制、八進(jìn)制和十六進(jìn)制,例如:2.0表示十進(jìn)制實(shí)數(shù)2.0、605.3表示十進(jìn)制實(shí)數(shù)605.3、8#46.1#E+5表示八進(jìn)制實(shí)數(shù)46.1E+5。注意:不能把實(shí)數(shù)賦給信號(hào),只能賦給實(shí)數(shù)類(lèi)型的變量。3.3.1數(shù)據(jù)類(lèi)型1.STANDARD程序包中預(yù)定義的數(shù)據(jù)類(lèi)型(4)位(BIT)類(lèi)型

位數(shù)據(jù)類(lèi)型是屬于可枚舉類(lèi)型,信號(hào)常用位表示,位值用帶單引號(hào)括起來(lái)的'0'和'1'表示,只代表電平的高低,與整數(shù)中的0和1意義不同。位類(lèi)型可以進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算,而整數(shù)類(lèi)型只能進(jìn)行關(guān)系運(yùn)算和算術(shù)運(yùn)算。(5)位向量(BIT_VECTOR)類(lèi)型

位矢量是用雙引號(hào)括起來(lái)的一組數(shù)據(jù),是基于位數(shù)據(jù)類(lèi)型的數(shù)組,可以表示二進(jìn)制(符號(hào)為B,可缺?。?、八進(jìn)制(符號(hào)為O)、十進(jìn)制(符號(hào)為D)或十六進(jìn)制(符號(hào)為H)的位矢量,例如"011010"、H"00AB",分別表示二進(jìn)制位矢量"011010"和十六進(jìn)制位矢量"00AB"。使用位矢量通常要聲明位寬,即數(shù)組中元素的個(gè)數(shù)和排列順序。例如:SIGNALA:BIT_VECTOR(3DOWNTO0);A<="0101";表示信號(hào)A被定義為具有4位位寬的位矢量,最左位(即最高位)是A(3)=0,A(2)=1,A(1)=0,最右位(即最低位)是A(0)=1。如果寫(xiě)成:SIGNALA:BIT_VECTOR(0TO3);A<="0101";同樣表示信號(hào)A被定義為具有4位位寬的位矢量,但最左位(即最低位)是A(0)=0,A(1)=1,A(2)=0,最右位(即最高位)是A(3)=1。(6)布爾(BOOLEAN)類(lèi)型

布爾類(lèi)型只有TURE和FALSE兩種取值,初值通常定義為FALSE。雖然布爾類(lèi)型也是二值枚舉量,但與位數(shù)據(jù)類(lèi)型不同,沒(méi)有數(shù)值的含義,不能進(jìn)行算術(shù)運(yùn)算,只能進(jìn)行邏輯運(yùn)算。關(guān)系表達(dá)式或邏輯表達(dá)式的運(yùn)算結(jié)果就是布爾類(lèi)型,當(dāng)表達(dá)式成立時(shí),表達(dá)式值為T(mén)RUE;表達(dá)式不成立,表達(dá)式值為FALSE。(7)字符(CHARACTER)類(lèi)。(8)字符串(STRING)類(lèi)型(9)時(shí)間(TIME)類(lèi)型(10)錯(cuò)誤等級(jí)(SEVERITYLEVEL)類(lèi)型2.IEEE庫(kù)中預(yù)定義的數(shù)據(jù)類(lèi)型(1)標(biāo)準(zhǔn)邏輯位(STD_LOGIC)數(shù)據(jù)類(lèi)型。

在IEEE庫(kù)的STD_LOGIC_1164程序包中定義,是一個(gè)邏輯型的數(shù)據(jù)類(lèi)型,取代STANDARD程序包中的BIT數(shù)據(jù)類(lèi)型,擴(kuò)展定義了9種值,符號(hào)和含義分別為'U'表示未初始化;'X'表示不定;'0'表示低電平;'1'表示高電平;'Z'表示高阻;'W'表示弱信號(hào)不定;'L'表示弱信號(hào)低電平;'H'表示弱信號(hào)高電平;'-'表示可忽略(任意)狀態(tài)。需要注意的是:表示高阻的'Z'必須大寫(xiě);'U'、'X'和'W'不能被綜合工具支持,僅用于仿真。2.IEEE庫(kù)中預(yù)定義的數(shù)據(jù)類(lèi)型(2)標(biāo)準(zhǔn)邏輯位向量(STD_LOGIC_VECTOR)數(shù)據(jù)類(lèi)型。

是基于STD_LOGIC數(shù)據(jù)類(lèi)型的一維數(shù)組,使用時(shí)必須說(shuō)明位寬和排列順序,數(shù)據(jù)要用雙引號(hào)括起來(lái)。例如:SIGNALA:STD_LOGIC_VECTOR(0TO7);A<=H"47";--定義信號(hào)A為十六進(jìn)制數(shù)472.IEEE庫(kù)中預(yù)定義的數(shù)據(jù)類(lèi)型(3)無(wú)符號(hào)(UNSIGNED)數(shù)據(jù)類(lèi)型。在IEEE庫(kù)的STD_LOGIC_ARITH或STD_LOGIC_UNSIGNED程序包中定義,是由STD_LOGIC數(shù)據(jù)類(lèi)型構(gòu)成的一維數(shù)組,表示一個(gè)自然數(shù)。當(dāng)一個(gè)數(shù)據(jù)除了執(zhí)行算術(shù)運(yùn)算外,還要執(zhí)行邏輯運(yùn)算,就必須定義成UNSIGNED。例如:SIGNALDAT:UNSIGNED(3DOWNTO0);DAT<="0110";定義信號(hào)DAT是4位二進(jìn)制數(shù)碼表示的無(wú)符號(hào)數(shù)據(jù),數(shù)值是6。2.IEEE庫(kù)中預(yù)定義的數(shù)據(jù)類(lèi)型(4)有符號(hào)(SIGNED)數(shù)據(jù)類(lèi)型。在IEEE庫(kù)的STD_LOGIC_ARITH或STD_LOGIC_SIGNED程序包中定義,表示一個(gè)帶符號(hào)的整數(shù),其最高位是符號(hào)位(0代表正整數(shù),1代表負(fù)整數(shù)),用補(bǔ)碼表示數(shù)值。SIGNALSIGNEDDAT:SIGNED(3DOWNTO0);SIGNEDDAT<="1101";定義信號(hào)SIGNEDDAT是4位二進(jìn)制數(shù)碼表示的有符號(hào)數(shù)據(jù),數(shù)值是-3。信號(hào)<=表達(dá)式1WHEN賦值條件1ELSE

表達(dá)式2WHEN賦值條件2ELSE……

表達(dá)式n;執(zhí)行該語(yǔ)句時(shí)首先要進(jìn)行條件判斷,然后再進(jìn)行信號(hào)賦值操作。例如,當(dāng)條件1滿(mǎn)足時(shí),就將表達(dá)式1的值賦給目標(biāo)信號(hào);當(dāng)條件2滿(mǎn)足時(shí),就將表達(dá)式2的值賦給目標(biāo)信號(hào);當(dāng)所有的條件都不滿(mǎn)足時(shí),就將表達(dá)式n的值賦給目標(biāo)信號(hào)。3.3.2條件信號(hào)賦值語(yǔ)句使用條件信號(hào)賦值語(yǔ)句時(shí),應(yīng)該注意以下幾點(diǎn):(1)只有當(dāng)條件滿(mǎn)足時(shí),才能將該條件前面的表達(dá)式值賦給目標(biāo)信號(hào)。(2)對(duì)條件進(jìn)行判斷是有順序的,位置靠前的條件具有較高的優(yōu)級(jí),只有不滿(mǎn)足本條件的時(shí)候才會(huì)去判斷下一個(gè)條件。(3)條件表達(dá)式的結(jié)果為布爾類(lèi)型。(4)最后一個(gè)表達(dá)式后面不含有WHEN子句。(5)條件信號(hào)賦值語(yǔ)句允許條件重疊,但位置在后面的條件不會(huì)被執(zhí)行。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYselection4ISPORT(a:INSTD_LOGIC_VECTOR(3DOWNTO0);sel:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDselection4;ARCHITECTUREoneOFselection4ISBEGINy<=a(0)WHENsel="00"ELSE--從第一個(gè)條件開(kāi)始判斷a(1)WHENsel="01"ELSEa(2)WHENsel="10"ELSEa(3);

ENDone;用條件信號(hào)賦值語(yǔ)句描述“四選一”電路?!?選1”數(shù)據(jù)選擇器波形8421-BCD優(yōu)先編碼器的設(shè)計(jì)1.題目要求

利用QuartusⅡ軟件的文本輸入方式,設(shè)計(jì)一個(gè)8421-BCD優(yōu)先編碼器,設(shè)大數(shù)優(yōu)先級(jí)別高,完成編譯和波形仿真后,下載到實(shí)驗(yàn)平臺(tái)驗(yàn)證電路功能。

2.電路設(shè)計(jì)8421-BCD優(yōu)先編碼器具有10個(gè)輸入端,分別代表十進(jìn)制數(shù)9~0,用X9~X0表示;具有4個(gè)輸出端,代表對(duì)應(yīng)輸入的8421碼,用Y3~Y0表示。根據(jù)題意輸入十進(jìn)制數(shù)越大,其優(yōu)先級(jí)別越高。輸入變量輸出變量X9X8X7X6X5X4X3X2X1X0Y3Y2Y1Y0

00000000010000

000000001×0001

00000001××0010

0000001×××0011

000001××××0100

00001×××××0101

0001××××××0110

001×××××××0111

01××××××××1000

1×××××××××1001

8421-BCD優(yōu)先編碼器真值表LIBRARYieee;USEieee.std_logic_1164.ALL;ENTITYPENCODEISPORT(X:INstd_logic_VECTOR(9DOWNTO0);Y:OUTstd_logic_VECTOR(3DOWNTO0));ENDPENCODE;參考程序:ARCHITECTUREAOFPENCODEISBEGINY<="1001"WHENX(9)='1'ELSE"1000"WHENX(8)='1'ELSE"0111"WHENX(7)='1'ELSE"0110"WHENX(6)='1'ELSE"0101"WHENX(5)='1'ELSE"0100"WHENX(4)='1'ELSE"0011"WHENX(3)='1'ELSE"0010"WHENX(2)='1'ELSE"0001"WHENX(1)='1'ELSE"0000"WHENX(0)='1'ELSE"ZZZZ";ENDA;仿真結(jié)果

從仿真結(jié)果中可以看出,在0~100ns區(qū)間,X(編碼按鍵)=00000000,沒(méi)有按鍵按下,輸出Y(編碼)=ZZZ,表示高阻狀態(tài);

在100ns~200ns區(qū)間,X(編碼按鍵)=00000001,X0按鍵按下,輸出Y(編碼)=000;

在200ns~300ns區(qū)間,X(編碼按鍵)=00000010,X1按鍵按下,輸出Y(編碼)=001;

在300ns~400ns區(qū)間,X(編碼按鍵)=00000011,X1和X0按鍵都被按下,按照優(yōu)先級(jí)的設(shè)置,X1的優(yōu)先級(jí)更高,輸出Y(編碼)=001,表示高阻狀態(tài)。其他區(qū)間的波形情況符合8421-BCD優(yōu)先編碼器。按下與X7鎖定的按鍵,輸出信號(hào)應(yīng)該為0111;按下與X3鎖定的按鍵,如果沒(méi)有抬起與X7鎖定的按鍵,輸出信號(hào)應(yīng)該仍為0111,抬起與X7鎖定的按鍵后才能輸出0011;同樣操作與其他信號(hào)端鎖定的按鍵,觀察輸出信號(hào)。電路測(cè)試3.4.1塊語(yǔ)句

塊語(yǔ)句是一種并行語(yǔ)句的組合方式,可以使程序更加有層次、更加清晰。在物理意義上,一個(gè)塊語(yǔ)句對(duì)應(yīng)一個(gè)子電路;在邏輯電路圖上,一個(gè)塊語(yǔ)句對(duì)應(yīng)一個(gè)子電路圖。塊語(yǔ)句的格式如下:塊標(biāo)號(hào):BLOCK

說(shuō)明語(yǔ)句;

BEGIN

并行語(yǔ)句;

……;ENDBLOCK塊標(biāo)號(hào);塊標(biāo)號(hào)是塊的名稱(chēng),塊說(shuō)明語(yǔ)句與結(jié)構(gòu)體的說(shuō)明語(yǔ)句相同,用來(lái)定義塊內(nèi)局部信號(hào)、數(shù)據(jù)類(lèi)型、元件和子程序,在塊內(nèi)并行語(yǔ)句區(qū)可以使用所有的并行語(yǔ)句。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadsuISPORT(a,b:INSTD_LOGIC;co,sum,bo,sub:OUTSTD_LOGIC);ENDadsu;設(shè)計(jì)一個(gè)電路,包含一個(gè)半加器和一個(gè)半減器ARCHITECTUREstrOFadsuISBEGINhalf_add:BLOCK--半加器塊開(kāi)始BEGINsum<=aXORb;co<=aANDb;ENDBLOCKhalf_add;--半加器塊結(jié)束half_sub:BLOCK--半減器塊開(kāi)始BEGINsub<=aXORb;bo<=(NOTa)ANDb;

ENDBLOCKhalf_sub;--半減器塊結(jié)束ENDstr;

設(shè)計(jì)一個(gè)4-2編碼器,能夠?qū)Υ?~3數(shù)碼的開(kāi)關(guān)量進(jìn)行編碼,同時(shí)輸出普通編碼和優(yōu)先編碼(數(shù)碼越小優(yōu)先級(jí)越高),比較2種編碼器的區(qū)別。1.題目分析

根據(jù)題意,使用塊語(yǔ)句設(shè)計(jì)4-2編碼器,包含普通編碼塊和優(yōu)先編碼塊(數(shù)碼越小優(yōu)先級(jí)越高),普通編碼塊使用選擇信號(hào)賦值語(yǔ)句實(shí)現(xiàn);優(yōu)先編碼塊使用條件賦值信號(hào)語(yǔ)句實(shí)現(xiàn)。2.建立項(xiàng)目3.編輯與編譯3.4.2編碼模塊LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcodebl

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論