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

下載本文檔

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

文檔簡(jiǎn)介

EDA項(xiàng)目教程

——基于VHDL與FPGA本章要點(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)稱為關(guān)鍵字,只能作固定用途使用,用戶不能將關(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;--定義端口類型

和數(shù)據(jù)類型

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(類屬說(shuō)明)][PORT(端口說(shuō)明)]END[ENTITY]實(shí)體名;1.類屬說(shuō)明GENERIC(常數(shù)名1:數(shù)據(jù)類型1:=設(shè)定值1;

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

……;端口信號(hào)名n:端口模式n數(shù)據(jù)類型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(專用集成電路)移植

當(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è)電話用戶都有一個(gè)特定的號(hào)碼等。在數(shù)字電路中,需要將具有某種特定含義的信號(hào)變成代碼,利用代碼表示具有特定含義對(duì)象的過(guò)程,稱為編碼。能夠完成編碼功能的器件,稱為編碼器(Encoder)。編碼器分為普通編碼器和優(yōu)先級(jí)編碼器兩類。3.2.1數(shù)據(jù)對(duì)象1.常量CONSTANT常量名[,常量名…]:數(shù)據(jù)類型:=表達(dá)式;CONSTANTVCC:REAL:=3.3;--常量VCC的類型是實(shí)

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

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

時(shí)間類型,初值為100ns。數(shù)值和單位之間要留空格。3.2.1數(shù)據(jù)對(duì)象2.變量VARIABLE變量名[,變量名…]:數(shù)據(jù)類型[約束條件][:=表達(dá)式];VARIABLEs1,s2:INTEGER:=256;VARIABLEcont:INTEGERRANGE0TO10;第一條語(yǔ)句中變量s1和s2都為整數(shù)類型,初值都是256;第二條語(yǔ)句中,RANGE…TO…是約束條件,表示變量cont的數(shù)據(jù)限制在0~10的整數(shù)范圍內(nèi)。變量CONT沒(méi)有指定初值,則取默認(rèn)值,默認(rèn)值為該類型數(shù)據(jù)的最小值或最左端值,那么本條語(yǔ)句中cont初值為0(最左端值)。3.2.1數(shù)據(jù)對(duì)象3.信號(hào)SIGNAL信號(hào)名[,信號(hào)名…]:數(shù)據(jù)類型[約束條件][:=表達(dá)式];SIGNALa,b:INTEGER:RANGE0TO7:=5;SIGNALground:BIT:='0';第一條語(yǔ)句定義整數(shù)類型信號(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)有類似的對(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ǔ)言提供了兩種類型的賦值語(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ù)類型1.STANDARD程序包中預(yù)定義的數(shù)據(jù)類型(1)整數(shù)類型(INTEGER)

整數(shù)與數(shù)學(xué)中的整數(shù)相似,包括正整數(shù)、零、負(fù)整數(shù)。整數(shù)類型可進(jìn)行關(guān)系運(yùn)算和算術(shù)運(yùn)算。整數(shù)類型的表示范圍是-231~231-1,這么大范圍的數(shù)值及其運(yùn)算在硬件電路實(shí)現(xiàn)過(guò)程中將消耗很大的器件資源,而實(shí)際涉及的整數(shù)范圍通常很小,例如一個(gè)十進(jìn)制7端數(shù)碼管只需顯示“0~9”共10個(gè)數(shù)字。因此在使用整數(shù)類型時(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ù)類型1.STANDARD程序包中預(yù)定義的數(shù)據(jù)類型(2)自然數(shù)(NATURAL)和正整數(shù)(POSITIVE)

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

與數(shù)學(xué)中的實(shí)數(shù)類似,數(shù)據(jù)范圍是-1.0E38~+1.0E38。書(shū)寫(xiě)時(shí)一定要有小數(shù)點(diǎn)(包括小數(shù)部分為0時(shí))或采用科學(xué)計(jì)數(shù)形式。VHDL僅在仿真時(shí)可使用該類型,在綜合過(guò)程中綜合器是不支持實(shí)數(shù)類型的。實(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ù)類型的變量。3.3.1數(shù)據(jù)類型1.STANDARD程序包中預(yù)定義的數(shù)據(jù)類型(4)位(BIT)類型

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

位矢量是用雙引號(hào)括起來(lái)的一組數(shù)據(jù),是基于位數(shù)據(jù)類型的數(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)類型

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

在IEEE庫(kù)的STD_LOGIC_1164程序包中定義,是一個(gè)邏輯型的數(shù)據(jù)類型,取代STANDARD程序包中的BIT數(shù)據(jù)類型,擴(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ù)類型(2)標(biāo)準(zhǔn)邏輯位向量(STD_LOGIC_VECTOR)數(shù)據(jù)類型。

是基于STD_LOGIC數(shù)據(jù)類型的一維數(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ù)類型(3)無(wú)符號(hào)(UNSIGNED)數(shù)據(jù)類型。在IEEE庫(kù)的STD_LOGIC_ARITH或STD_LOGIC_UNSIGNED程序包中定義,是由STD_LOGIC數(shù)據(jù)類型構(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ù)類型(4)有符號(hào)(SIGNED)數(shù)據(jù)類型。在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滿足時(shí),就將表達(dá)式1的值賦給目標(biāo)信號(hào);當(dāng)條件2滿足時(shí),就將表達(dá)式2的值賦給目標(biāo)信號(hào);當(dāng)所有的條件都不滿足時(shí),就將表達(dá)式n的值賦給目標(biāo)信號(hào)。3.3.2條件信號(hào)賦值語(yǔ)句使用條件信號(hào)賦值語(yǔ)句時(shí),應(yīng)該注意以下幾點(diǎn):(1)只有當(dāng)條件滿足時(shí),才能將該條件前面的表達(dá)式值賦給目標(biāo)信號(hào)。(2)對(duì)條件進(jìn)行判斷是有順序的,位置靠前的條件具有較高的優(yōu)級(jí),只有不滿足本條件的時(shí)候才會(huì)去判斷下一個(gè)條件。(3)條件表達(dá)式的結(jié)果為布爾類型。(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ǔ)句描述“四選一”電路。“4選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)是塊的名稱,塊說(shuō)明語(yǔ)句與結(jié)構(gòu)體的說(shuō)明語(yǔ)句相同,用來(lái)定義塊內(nèi)局部信號(hào)、數(shù)據(jù)類型、元件和子程序,在塊內(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;ENTITYcodeblockISPORT(X:INSTD_LOGIC_VECTOR(3DOWNTO0);EY,PY:OUTSTD_LOGIC_VECTOR(1DOWNTO0));ENDcodeblock;參考程序ARCHITECTUREstrOFcodeblockISBEGINencode:BLOCK--普通編碼器塊開(kāi)始BEGINWITHXSELECTEY<="00"WHEN"0001","01"WHEN"0010","10"WHEN"0100","11"WHEN"1000","ZZ"WHENOTHERS;--“ZZ”必須大寫(xiě),表

示高阻狀態(tài)ENDBLOCKencode;--普通編碼器塊結(jié)束pencode:BLOCK--優(yōu)先編碼器塊開(kāi)始BEGINPY<="11"WHENX(0)='1'ELSE"10"WHENX(1)='1'ELSE"01"WHENX(2)='1'ELSE"00"WHENX(3)='1'ELSE"ZZ";--“ZZ”必須大寫(xiě),表示

高阻狀態(tài)ENDBLOCKpencode;--優(yōu)先編碼器塊結(jié)束ENDstr;普通編碼器和優(yōu)先編碼器仿真波形

從仿真結(jié)果中可以看出,在0~50ns區(qū)間,X(編碼按鍵)=0000,沒(méi)有按鍵按下,輸出EY(普通編碼)=ZZ、PY(優(yōu)先編碼)=ZZ,沒(méi)有編碼;在50ns~100ns區(qū)間,X(編碼按鍵)=0001,X0按鍵按下,輸出EY(普通編碼)=00、PY(優(yōu)先編碼)=11;在150ns~200ns區(qū)間,X(編碼按鍵)=0011,X0和X1按鍵都被按下,輸出EY(普通編碼)=ZZ(超過(guò)1個(gè)按鍵被按下,沒(méi)有編碼)、PY(優(yōu)先編碼)=11(按照優(yōu)先級(jí),給X0編碼)。1.題目說(shuō)明

譯碼器是把輸入的二進(jìn)制代碼翻譯成對(duì)應(yīng)的輸出信號(hào),與編碼器正好相反。設(shè)3-8線譯碼器的輸入端為d2~d0;輸出端為y7~y0,低電平有效。3-8線譯碼器真值表3.5實(shí)訓(xùn)3-8線譯碼器的設(shè)計(jì)與實(shí)現(xiàn)輸入變量輸出變量d2d1d0y7y6y5y4y3y2y1y00001111111000111111101010111110110111111011110011101111101110111111101011111111101111111參考8-3線編碼器程序,使用信號(hào)賦值語(yǔ)句實(shí)現(xiàn)。3.實(shí)訓(xùn)報(bào)告(1)寫(xiě)出VHDL程序。(2)記錄仿真波形。(3)分析實(shí)訓(xùn)結(jié)果。2.設(shè)計(jì)提示EDA項(xiàng)目教程

——基于VHDL與FPGA本章要點(diǎn)

VHDL語(yǔ)言的順序語(yǔ)句

鍵盤(pán)輸入程序設(shè)計(jì)

數(shù)碼顯示計(jì)數(shù)器的設(shè)計(jì)與實(shí)現(xiàn)項(xiàng)目4

計(jì)數(shù)器的設(shè)計(jì)與實(shí)現(xiàn)

計(jì)數(shù)器的邏輯功能就是記憶時(shí)鐘脈沖的個(gè)數(shù),是數(shù)字系統(tǒng)中常用的一種具有記憶功能的電路,可用來(lái)實(shí)現(xiàn)系統(tǒng)中的計(jì)數(shù)、分頻和定時(shí)等功能。4.1十進(jìn)制計(jì)數(shù)器的設(shè)計(jì)4.1.1進(jìn)程語(yǔ)句一個(gè)結(jié)構(gòu)體內(nèi)可以包含多個(gè)進(jìn)程語(yǔ)句,多個(gè)進(jìn)程之間是同時(shí)執(zhí)行的。進(jìn)程語(yǔ)句本身是并行語(yǔ)句,但每個(gè)進(jìn)程的內(nèi)部則由一系列順序語(yǔ)句構(gòu)成。進(jìn)程語(yǔ)句的格式如下:[進(jìn)程名]:PROCESS(敏感信號(hào)表)[IS]進(jìn)程說(shuō)明;--說(shuō)明用于該進(jìn)程的常數(shù),變量和子程序

BEGIN

變量和信號(hào)賦值語(yǔ)句;順序語(yǔ)句;ENDPROCESS[進(jìn)程名];(1)進(jìn)程名:表示該進(jìn)程的名稱,可以缺省。(2)敏感信號(hào):列出觸發(fā)啟動(dòng)本進(jìn)程的全部信號(hào)名,通常所有的輸入端口都可以列入。當(dāng)任意一個(gè)敏感信號(hào)的值發(fā)生變化時(shí),立即啟動(dòng)進(jìn)程語(yǔ)句,進(jìn)程中的順序語(yǔ)句按書(shū)寫(xiě)順序循環(huán)執(zhí)行,直到敏感信號(hào)值穩(wěn)定不變?yōu)橹?。?)說(shuō)明部分:可以缺省。定義該進(jìn)程所需的局部數(shù)據(jù)環(huán)境,包括常量、變量和子程序等,但不能定義信號(hào),信號(hào)只能在結(jié)構(gòu)體的說(shuō)明部分定義。(4)順序語(yǔ)句組:通常包含變量賦值語(yǔ)句、信號(hào)賦值語(yǔ)句、IF語(yǔ)句、CASE語(yǔ)句等順序語(yǔ)句。進(jìn)程語(yǔ)句的主要特點(diǎn)歸納如下:(1)同一結(jié)構(gòu)體中的各個(gè)進(jìn)程之間是并發(fā)執(zhí)行的,并且都可以使用實(shí)體說(shuō)明和結(jié)構(gòu)體中所定義的信號(hào)、常量和變量;但同一進(jìn)程中的順序語(yǔ)句組則是按照書(shū)寫(xiě)順序執(zhí)行的順序語(yǔ)句。(2)為啟動(dòng)進(jìn)程,進(jìn)程的結(jié)構(gòu)中必須至少包含一個(gè)敏感信號(hào)。敏感信號(hào)通常是時(shí)鐘脈沖、輸入端口等。但一個(gè)進(jìn)程中不允許出現(xiàn)兩個(gè)時(shí)鐘信號(hào)。(3)結(jié)構(gòu)體中的各個(gè)進(jìn)程之間,可以通過(guò)結(jié)構(gòu)體中定義的信號(hào)或變量來(lái)進(jìn)行通信,但在進(jìn)程說(shuō)明部分定義的變量,只能在該進(jìn)程內(nèi)部使用。(4)VHDL中所有并行語(yǔ)句都可以理解為特殊的進(jìn)程,只是不以PROCESS結(jié)構(gòu)出現(xiàn),其邏輯表達(dá)式中的信號(hào)就是隱含的敏感信號(hào)。4.1.2IF語(yǔ)句(1)跳轉(zhuǎn)控制。格式如下:

IF條件THEN

順序語(yǔ)句;

ENDIF;當(dāng)程序執(zhí)行到IF語(yǔ)句時(shí),先判斷IF語(yǔ)句指定的條件是否成立。如果成立,IF語(yǔ)句所包含的順序處理語(yǔ)句將被執(zhí)行;如果條件不成立,程序跳過(guò)IF語(yǔ)句包含的順序語(yǔ)句,而執(zhí)行ENDIF語(yǔ)句后面的語(yǔ)句,這里的條件起到?jīng)Q定是否跳轉(zhuǎn)的作用。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdffcISPORT(clk,d:INSTD_LOGIC;qout:OUTSTD_LOGIC);ENDdffc;用IF語(yǔ)句描述一個(gè)上升沿觸發(fā)的基本D觸發(fā)器ARCHITECTUREoneOFdffcISBEGINPROCESS(CLK)BEGINIF(CLK'EVENTANDCLK='1')THEN--判斷時(shí)鐘脈沖上升沿qout<=d;ENDIF;ENDPROCESS;ENDone;從仿真波形中可以看出,在0~100ns區(qū)間,CLK在50ns處出現(xiàn)上升沿,D=0,輸出Q=0;在100ns~200ns區(qū)間,CLK在150ns處出現(xiàn)上升沿,D=1,輸出Q=1;在200ns~300ns區(qū)間,CLK在250ns處出現(xiàn)上升沿,D=0,輸出Q=0。其他區(qū)間的波形情況符合時(shí)鐘上升沿觸發(fā)的基本D觸發(fā)器。時(shí)鐘上升沿觸發(fā)的基本D觸發(fā)器仿真波形(2)二選一控制。格式如下:IF條件THEN順序語(yǔ)句;ELSE順序語(yǔ)句;ENDIF;根據(jù)IF所指定的條件是否成立,程序可以選擇兩種不同的執(zhí)行路徑,當(dāng)條件成立時(shí),程序執(zhí)行THEN和ELSE之間的順序語(yǔ)句部分,再執(zhí)行ENDIF之后的語(yǔ)句;當(dāng)IF語(yǔ)句的條件不成立時(shí),程序執(zhí)行ELSE和ENDIF之間的順序語(yǔ)句,再執(zhí)行ENDIF之后的語(yǔ)句。設(shè)a和b為選擇電路的輸入信號(hào),sel為選擇控制信號(hào),output為輸出信號(hào)。ENTITYselection2ISPORT(a,b,sel:INBIT;output:OUTBIT);ENDselection2;用IF語(yǔ)句描述一個(gè)“二選一”電路ARCHITECTUREdataOFselection2ISBEGINPROCESS(a,b,sel)BEGINIF(sel='1')THEN--控制信號(hào)sel為1

則輸出aoutput<=a;ELSEoutput<=b;ENDIF;ENDPROCESS;ENDdata;(3)多選擇控制語(yǔ)句。格式如下:IF條件1THEN順序語(yǔ)句1;

ELSIF條件2THEN順序語(yǔ)句2;

……;

ELSIF條件nTHEN順序語(yǔ)句n;

ELSE順序語(yǔ)句n+1;ENDIF;多選擇控制的IF語(yǔ)句,可允許在一個(gè)語(yǔ)句中出現(xiàn)多重條件,實(shí)際上是條件的嵌套。當(dāng)滿足所給定的多個(gè)條件之一時(shí),就執(zhí)行該條件后的順序語(yǔ)句;當(dāng)所有的條件都不滿足時(shí),則執(zhí)行ELSE和ENDIF之間的語(yǔ)句。注意:每個(gè)IF語(yǔ)句必須有一個(gè)對(duì)應(yīng)的ENDIF語(yǔ)句。設(shè)輸入信號(hào)為a0~a3,sel為選擇信號(hào),y為輸出信號(hào)。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYselection4ISPORT(a:INSTD_LOGIC_VECTOR(3DOWNTO0);sel:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDselection4;用IF語(yǔ)句描述一個(gè)“四選一”電路ARCHITECTUREoneOFselection4ISBEGINPROCESS(a,sel)--進(jìn)程中任何一個(gè)信號(hào)出現(xiàn)變化,將導(dǎo)致進(jìn)程執(zhí)行一次BEGINIF(sel="00")THENy<=a(0);ELSIF(sel="01")THENy<=a(1);ELSIF(sel="10")THENy<=a(2);ELSEy<=a(3);ENDIF;ENDPROCESS;ENDone;從仿真波形中可以看出,SEL=00時(shí),輸出Y=A(0);SEL=01時(shí),輸出Y=A(1);SEL=10時(shí),輸出A(2);SEL=11時(shí),Y=A(3)。用IF語(yǔ)句描述“4選1”數(shù)據(jù)選擇器的仿真波形1.二進(jìn)制遞增計(jì)數(shù)器

設(shè)計(jì)一個(gè)4位二進(jìn)制遞增計(jì)數(shù)器,沒(méi)有控制端,系統(tǒng)通電就開(kāi)始計(jì)數(shù),實(shí)現(xiàn)單一遞增計(jì)數(shù)的功能。

定義一個(gè)臨時(shí)變量,使用IF語(yǔ)句判斷時(shí)鐘脈沖的上升沿,在每個(gè)時(shí)鐘脈沖的上升沿到來(lái)時(shí),臨時(shí)變量就加1,最后將臨時(shí)變量值賦值給輸出信號(hào)。

由于結(jié)構(gòu)體中,進(jìn)行了加法運(yùn)算,使用了“+”號(hào),需要調(diào)用STD_LOGIC_UNSIGNED程序包。設(shè)CLK為時(shí)鐘輸入端、Q為計(jì)數(shù)輸出端,臨時(shí)變量名為qtemp。4.1.3二進(jìn)制計(jì)數(shù)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYbcountISPORT(CLK:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDbcount;參考程序:ARCHITECTUREaOFbcountISBEGINProcess(CLK)VARIABLEqtemp:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFCLK'EVENTANDCLK='1'THENqtemp:=qtemp+1;ENDIF;Q<=qtemp;ENDPROCESS;ENDa;二進(jìn)制遞增計(jì)數(shù)器仿真波形

從仿真波形中可以看出,在時(shí)鐘脈沖的上升沿,輸出Q按二進(jìn)制遞增,當(dāng)計(jì)數(shù)到1111時(shí),下一個(gè)脈沖上升沿回到0000。

想一想、做一做:將VARIABLE(變量)改成SIGNAL(信號(hào))是否可行?為什么?

設(shè)計(jì)一個(gè)3位二進(jìn)制同步清零可逆計(jì)數(shù)器,能實(shí)現(xiàn)遞增計(jì)數(shù)、遞減計(jì)數(shù)和同步清零功能。

時(shí)序邏輯電路的清零方式有同步和異步兩種。同步清零是指清零信號(hào)有效時(shí),還要等待時(shí)鐘脈沖的有效沿到來(lái),計(jì)數(shù)器才回到零狀態(tài)。

異步清零則不用等待時(shí)鐘有效沿的到來(lái),只要清零信號(hào)有效,計(jì)數(shù)器就會(huì)清零。

可逆計(jì)數(shù)器就是增加一個(gè)計(jì)數(shù)方向控制端,用來(lái)控制是遞增計(jì)數(shù)還是遞減計(jì)數(shù)。2.二進(jìn)制可逆計(jì)數(shù)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYscountISPORT(CLK:INSTD_LOGIC;CLR:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(2DOWNTO0));ENDscount;

設(shè)CLK為時(shí)鐘輸入端、D為計(jì)數(shù)方式控制端(高電平為遞增計(jì)數(shù)、低電平為遞減計(jì)數(shù))、CLR為清零控制端和Q為計(jì)數(shù)輸出端。參考程序如下。

ARCHITECTUREaOFscountISSIGNALQTMP:STD_LOGIC_VECTOR(2DOWNTO0);BEGINProcess(CLK)BEGINIFCLK'EVENTANDCLK='1'THENIFCLR='0'THENQTMP<="000";ELSIFD='1'THENQTMP<=QTMP+1;ELSEQTMP<=QTMP-1;ENDIF;ENDIF;Q<=QTMP;ENDPROCESS;ENDa;3位二進(jìn)制同步清零可逆計(jì)數(shù)器仿真波形

從仿真波形中可以看出,在0~100ns區(qū)間,CLR=0(清零有效),輸出Q=000;在100~500ns區(qū)間,CLR=1(清零無(wú)效)、D=1(遞增計(jì)數(shù)),輸出Q按二進(jìn)制遞增,計(jì)數(shù)到111時(shí),下個(gè)脈沖上升沿回到000;在500ns~600ns區(qū)間,CLR=1(清零無(wú)效)、D=0(遞減計(jì)數(shù)),輸出Q按二進(jìn)制遞減;在600ns~700ns區(qū)間,CLR=0(清零有效),由于同步清零要等待時(shí)鐘脈沖的有效沿,所以輸出Q在625ns后清零,并保持到725ns。

想一想、做一做:刪除或注釋掉USEIEEE.STD_LOGIC_UNSIGNED.ALL;存盤(pán)后編譯,看看顯示什么錯(cuò)誤?1.題目要求

利用QuartusⅡ軟件的文本輸入方式,設(shè)計(jì)一個(gè)4位異步清零、同步置數(shù)、同步使能的十進(jìn)制可逆計(jì)數(shù)器,完成編譯和波形仿真后,下載到實(shí)驗(yàn)平臺(tái)驗(yàn)證電路功能。2.電路設(shè)計(jì)

置數(shù)是設(shè)置計(jì)數(shù)初始值,使能是允許計(jì)數(shù)器工作。設(shè)CLR為異步清零端(低電平有效)、CE為計(jì)數(shù)使能端(高電平有效)、LOAD為同步置數(shù)端(高電平有效)、DIR為計(jì)數(shù)方向端(1表示遞增計(jì)數(shù)、0表示遞減計(jì)數(shù))、DIN為置數(shù)數(shù)據(jù)輸入端、Q為計(jì)數(shù)器輸出端。4.1.4十進(jìn)制可逆計(jì)數(shù)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSPCOUNTISPORT(clk:INSTD_LOGIC;reset:INSTD_LOGIC;ce,load,dir:INSTD_LOGIC;din:INSTD_LOGIC_VECTOR(3DOWNTO0); Q:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));ENDSPCOUNT;ARCHITECTUREAOFSPCOUNTISBEGINPROCESS(clk,reset)VARIABLEcounter:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFreset='0'THENcounter:="0000";--reset高電平有效ELSIFclk'EVENTANDclk='1'THENIFload='1'THENcounter:=din;ELSEIFce='1'THENIFdir='1'THENIFcounter="1111"THENcounter:="0000";ELSEcounter:=counter+1;ENDIF;ELSEIFcounter="0000"THENcounter:="1111";ELSEcounter:=counter-1;ENDIF;ENDIF;ENDIF;ENDIF;ENDIF;Q<=counter;ENDPROCESS;ENDA;

從仿真波形中可以看出,在0~40ns區(qū)間,CLR=0(異步清零有效),輸出Q=0000;40~80ns區(qū)間,CLR=1(異步清零無(wú)效)、LOAD=1(同步置數(shù)有效)、DIN=5(置數(shù)數(shù)據(jù)),輸出Q=0101(十進(jìn)制的5),與DIN相同;在80~360ns區(qū)間,CLR=1(異步清零無(wú)效)、LOAD=0(同步置數(shù)無(wú)效)、CE=1(計(jì)數(shù)使能有效)、DIR=1(遞增計(jì)數(shù)),輸出Q按十進(jìn)制遞增計(jì)數(shù);在360~480ns區(qū)間,CLR=1(異步清零無(wú)效)、LOAD=0(同步置數(shù)無(wú)效)、CE=0(計(jì)數(shù)使能無(wú)效),輸出Q=0010保持不變。同樣分析其他區(qū)間。異步清零同步置數(shù)可逆計(jì)數(shù)器仿真波形;

按鍵是最常見(jiàn)的人機(jī)交互接口部件。電子產(chǎn)品所需要的鍵盤(pán)按鍵個(gè)數(shù)非常有限,通常為幾個(gè)到十幾個(gè)不等,需要單獨(dú)設(shè)計(jì)成專用的小鍵盤(pán),常用的有編碼鍵盤(pán)、掃描鍵盤(pán)和虛擬鍵盤(pán)等。

數(shù)碼管是數(shù)字系統(tǒng)常用的顯示器件,鍵盤(pán)輸入的數(shù)碼管顯示器就是將鍵盤(pán)輸入的數(shù)碼顯示在數(shù)碼管上。4.2編碼鍵盤(pán)的設(shè)計(jì)4.2.1CASE語(yǔ)句CASE表達(dá)式ISWHEN條件選擇值1=>順序語(yǔ)句1;WHEN條件選擇值2=>順序語(yǔ)句2;WHEN條件選擇值3=>順序語(yǔ)句3;……;WHENOTHERS=>順序語(yǔ)句n;ENDCASE;其中WHEN的條件選擇值有以下幾種形式:(1)單個(gè)數(shù)值,如WHEN3。(2)并列數(shù)值,如WHEN1|2,表示取值1或者2。(3)數(shù)值選擇范圍,如WHEN(1TO3),表示取值為1、2、或者3。(4)其他取值情況,如WHENOTHERS,常出現(xiàn)在ENDCASE之前,代表已給出的各條件選擇值中未能列出的其他可能取值。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux41ISPORT(S1,S0:INSTD_LOGIC;A,B,C,D:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDmux41;用CASE語(yǔ)句描述“4選1”數(shù)據(jù)選擇器ARCHITECTUREoneOFmux41ISSIGNALS:STD_LOGIC_VECTOR(1DOWNTO0);BEGINPROCESS(S1,S0,A,B,C,D)BEGINS<=S1&S0;CASESISWHEN"00"=>Y<=A;WHEN"01"=>Y<=B;WHEN"10"=>Y<=C;WHEN"11"=>Y<=D;WHENOTHERS=>Y<='Z';ENDCASE;ENDPROCESS;ENDone;用CASE語(yǔ)句描述“4選1”數(shù)據(jù)選擇器波形

從仿真波形中可以看出,在0~100ns區(qū)間,S0=0、S1=0,即S=00,輸出Q=A;在100ns~200ns區(qū)間,S0=1、S1=0,即A=01,輸出Q=B;在200ns~300ns區(qū)間,S0=0、S1=1,即A=10,輸出Q=C;在300ns~400ns區(qū)間,S0=1、S1=1,即A=11,輸出Q=D。其他區(qū)間的波形情況符合“4選1”數(shù)據(jù)選擇器。4.2.2數(shù)碼管的靜態(tài)顯示數(shù)字系統(tǒng)常用的顯示器件有發(fā)光二極管、數(shù)碼管、液晶顯示器等,其中最常用的是數(shù)碼管。數(shù)碼管分別由A、B、C、D、E、F、G位段和表示小數(shù)點(diǎn)的DP位段組成。內(nèi)部是由8個(gè)LED發(fā)光二極管組成的,控制每個(gè)LED的點(diǎn)亮或熄滅實(shí)現(xiàn)數(shù)字顯示。數(shù)碼管分為共陽(yáng)極和共陰極兩種接法,把數(shù)碼管內(nèi)所有二極管的陽(yáng)極連接到一起的稱為共陽(yáng)極接法;把所有二極管的陰極連接到一起稱為共陰極接法。4.2.2數(shù)碼管的靜態(tài)顯示靜態(tài)顯示就是將需要顯示的BCD碼數(shù)據(jù)經(jīng)過(guò)譯碼后,分別接到數(shù)碼管的驅(qū)動(dòng)端,每4位BCD碼連接一個(gè)數(shù)碼管。靜態(tài)顯示的優(yōu)點(diǎn)是結(jié)構(gòu)簡(jiǎn)單、顯示穩(wěn)定,缺點(diǎn)是數(shù)碼較多時(shí),會(huì)占用大量的I/O接口線。4位BCD譯碼器的輸入端有4個(gè),共有24=16種不同的輸入組合,每一種組合可對(duì)應(yīng)一個(gè)數(shù)碼,而十進(jìn)制數(shù)碼共有10個(gè),因此會(huì)出現(xiàn)6個(gè)無(wú)效狀態(tài),這時(shí)數(shù)碼管的顯示應(yīng)該為暗。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSDISPISPORT(D:INSTD_LOGIC_VECTOR(3DOWNTO0);S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDSDISP;

ARCHITECTUREAOFSDISPISBEGINPROCESS(D)BEGINCASEDISWHEN"0000"=>S<="1111110";--0WHEN"0001"=>S<="0110000";--1WHEN"0010"=>S<="1101101";--2WHEN"0011"=>S<="1111001";--3WHEN"0100"=>S<="0110011";--4WHEN"0101"=>S<="1011011";--5WHEN"0110"=>S<="1011111";--6WHEN"0111"=>S<="1110000";--7WHEN"1000"=>S<="1111111";--8WHEN"1001"=>S<="1111011";--9WHENOTHERS=>S<="0000000";ENDCASE;ENDPROCESS;ENDA;波形仿真4.2.3編碼鍵盤(pán)在數(shù)字電路中,可以利用編碼器實(shí)現(xiàn)按鍵鍵值的直接編碼。

將每個(gè)按鍵的輸出信號(hào)對(duì)應(yīng)連接到編碼器的每個(gè)輸入端,通過(guò)編碼邏輯就可以在編碼器的輸出端得到對(duì)應(yīng)每個(gè)按鍵的碼值,稱這種鍵盤(pán)為編碼鍵盤(pán)。但是當(dāng)按鍵較多時(shí),編碼鍵盤(pán)會(huì)由于按鍵和連線較多,造成成本高;另外直接編碼的方法也不夠靈括,一旦編碼邏輯固定就難以更改了。1.設(shè)計(jì)題目設(shè)計(jì)一個(gè)12-4線的編碼鍵盤(pán),按鍵為彈起式,已經(jīng)過(guò)“去抖動(dòng)”處理。參考程序:12-4線的編碼鍵盤(pán)應(yīng)該有1個(gè)時(shí)鐘脈沖輸入端、1個(gè)十二位的按鍵輸入端和1個(gè)四位的按鍵輸出端。設(shè)時(shí)鐘脈沖輸入端為CLK、按鍵輸入端為KEYIN、按鍵輸出端為KEYOUT。實(shí)體名為ENCODEJP。LIBRARYIEEE;--調(diào)用IEEE庫(kù)USEIEEE.STD_LOGIC_1164.ALL;--打開(kāi)程序包ENTITYENCODEJPISPORT(CLK:INSTD_LOGIC;KEYIN:INSTD_LOGIC_VECTOR(11DOWNTO0);KEYOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDENTITYENCODEJP;

ARCHITECTUREARTOFENCODEJPISSIGNALN:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALZ:STD_LOGIC_VECTOR(11DOWNTO0);BEGINPROCESS(CLK,KEYIN)BEGINZ<=KEYIN;IFCLK'EVENTANDCLK='1'THENCASEZISWHEN"000000000001"=>N<="0000";--0WHEN"000000000010"=>N<="0001";--1WHEN"000000000100"=>N<="0010";--2WHEN"000000001000"=>N<="0011";--3WHEN"000000010000"=>N<="0100";--4WHEN"000000100000"=>N<="0101";--5WHEN"000001000000"=>N<="0110";--6WHEN"000010000000"=>N<="0111";--7WHEN"000100000000"=>N<="1000";--8WHEN"001000000000"=>N<="1001";

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論