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è),還剩63頁(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)偉項(xiàng)目5點(diǎn)陣廣告牌的設(shè)計(jì)與實(shí)現(xiàn)本章要點(diǎn)

分頻器的設(shè)計(jì)

寄存器的設(shè)計(jì)

點(diǎn)陣廣告牌的設(shè)計(jì)與實(shí)現(xiàn)5.1分頻器5.1.12N分頻器2N(N為正整數(shù))分頻器是一種特殊的等占空比分頻器,利用計(jì)數(shù)器計(jì)算時(shí)鐘脈沖的個(gè)數(shù),二進(jìn)制計(jì)數(shù)器的最低位(20)就是時(shí)鐘脈沖的2分頻(一個(gè)時(shí)鐘脈沖有效沿計(jì)為1,下一個(gè)時(shí)鐘脈沖有效沿計(jì)為0,兩個(gè)時(shí)鐘脈沖有效沿構(gòu)成一個(gè)周期)、次低位(21)就是4分頻,依此類(lèi)推,設(shè)計(jì)非常簡(jiǎn)單。1.設(shè)計(jì)題目設(shè)計(jì)一個(gè)可輸出時(shí)鐘脈沖2分頻、4分頻、8分頻和16分頻信號(hào)的分頻電路,并使用QuartusⅡ進(jìn)行仿真。2.實(shí)體的確定實(shí)體是設(shè)計(jì)外部電路的輸入輸出端口。根據(jù)設(shè)計(jì)題目分析,應(yīng)該有1個(gè)時(shí)鐘脈沖輸入端和4個(gè)分頻信號(hào)輸出端。設(shè)時(shí)鐘脈沖輸入端為CLK,分頻信號(hào)輸出端分別為DIV2(2分頻)、DIV4(4分頻)、DIV8(8分頻)和DIV16(16分頻),數(shù)據(jù)類(lèi)型都可以使用標(biāo)準(zhǔn)邏輯位類(lèi)型(STD_LOGIC)。實(shí)體名為DIVF。實(shí)體的參考程序如下:ENTITYDIVFISPORT(CLK:INSTD_LOGIC;DIV2,DIV4,DIV8,DIV16:OUTSTD_LOGIC);ENDENTITYDIVF;3.結(jié)構(gòu)體的確定結(jié)構(gòu)體描述設(shè)計(jì)實(shí)體內(nèi)部結(jié)構(gòu)和實(shí)體端口之間的邏輯關(guān)系,是實(shí)體的一個(gè)組成單元。在結(jié)構(gòu)體中設(shè)計(jì)一個(gè)計(jì)數(shù)器,定義一個(gè)四位臨時(shí)信號(hào)存儲(chǔ)計(jì)數(shù)值,信號(hào)的定義需要放在結(jié)構(gòu)體的聲明部分。參考程序如下:ARCHITECTUREARTOFDIVFISSIGNALQ:STD_LOGIC_VECTOR(4DOWNTO0);--定義臨時(shí)信號(hào)QBEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEN--判斷時(shí)鐘脈沖的上升沿

Q<=Q+1;ENDIF;ENDPROCESS;DIV2<=Q(0);--輸出2分頻信號(hào)

DIV4<=Q(1);--輸出4分頻信號(hào)

DIV8<=Q(2);--輸出8分頻信號(hào)

DIV16<=Q(3);--輸出16分頻信號(hào)ENDARCHITECTUREART;4.庫(kù)和程序包的確定由于實(shí)體中定義的信號(hào)類(lèi)型不是VHDL默認(rèn)類(lèi)型,需要調(diào)用IEEE庫(kù)中的STD_LOGIC_1164程序包;又由于結(jié)構(gòu)體中使用了運(yùn)算符“+”,需要調(diào)用IEEE庫(kù)中的STD_LOGIC_UNSIGNED程序包,因此在實(shí)體的前面調(diào)用IEEE庫(kù),并使用這兩個(gè)程序包。參考程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;5.波形仿真5.1.2偶數(shù)分頻器偶數(shù)分頻器的設(shè)計(jì)非常簡(jiǎn)單,通過(guò)計(jì)數(shù)器計(jì)數(shù)就完全可以實(shí)現(xiàn)。例如進(jìn)行N(N為偶數(shù))分頻,就可以通過(guò)由待分頻的時(shí)鐘脈沖觸發(fā)計(jì)數(shù)器計(jì)數(shù),當(dāng)計(jì)數(shù)器從0計(jì)數(shù)到(N/2)-1時(shí),輸出信號(hào)就進(jìn)行翻轉(zhuǎn),形成半個(gè)周期,并給計(jì)數(shù)器清零,以便在下一個(gè)時(shí)鐘脈沖有效沿到來(lái)時(shí)從零開(kāi)始計(jì)數(shù);當(dāng)計(jì)數(shù)器又計(jì)到(N/2)-1時(shí),輸出信號(hào)再次翻轉(zhuǎn),形成另半個(gè)周期。以此循環(huán),就可以實(shí)現(xiàn)任意的偶數(shù)分頻。1.設(shè)計(jì)題目設(shè)計(jì)一個(gè)等占空比的六分頻器,并使用QuartusⅡ進(jìn)行仿真。2.實(shí)體的確定根據(jù)題目要求,等占空比的六分頻器應(yīng)該有1個(gè)時(shí)鐘脈沖輸入端、1個(gè)清零端和1個(gè)分頻信號(hào)輸出端。設(shè)時(shí)鐘脈沖輸入端為CLK、清零端為RESET、分頻信號(hào)輸出端為DIV6,數(shù)據(jù)類(lèi)型都可以使用標(biāo)準(zhǔn)邏輯位類(lèi)型(STD_LOGIC)。實(shí)體名為DIVSIX。實(shí)體的參考程序如下:ENTITYDIVSIXISPORT(CLK:INSTD_LOGIC;RESET:INSTD_LOGIC;DIV6:OUTSTD_LOGIC);ENDENTITYDIVSIX;3.結(jié)構(gòu)體的確定

在結(jié)構(gòu)體中設(shè)計(jì)一個(gè)計(jì)數(shù)器,由于是六分頻(N=6),因此(N/2)-1=2,可定義1個(gè)信號(hào)count存儲(chǔ)計(jì)數(shù)值;由于輸出方向定義為OUT的信號(hào)DIV6不能出現(xiàn)在賦值語(yǔ)句的右側(cè),無(wú)法描述觸發(fā)器的計(jì)數(shù)狀態(tài),需要設(shè)置1個(gè)臨時(shí)信號(hào)CLKTEP,信號(hào)的定義需要放在結(jié)構(gòu)體的聲明部分。3.結(jié)構(gòu)體的確定ARCHITECTUREARTOFdivsixISSIGNALcount:STD_LOGIC_VECTOR(1DOWNTO0);--計(jì)數(shù)值寄存器SIGNALclktemp:STD_LOGIC;--輸出寄存器BEGINPROCESS(RESET,CLK)BEGINIFRESET='1'THEN--異步清零,高電平有效clktemp<='0';ELSIFRISING_EDGE(CLK)THEN--判斷CLK

的上升沿3.結(jié)構(gòu)體的確定IFcount="10"THENcount<="00";--計(jì)數(shù)到(N/2)-1(N=6)就清零clktemp<=NOTclktemp;--輸出信號(hào)翻轉(zhuǎn),形成前

半個(gè)周期ELSEcount<=count+1;ENDIF;ENDIF;ENDPROCESS;DIV6<=clktemp;ENDARCHITECTUREART;4.庫(kù)和程序包的確定由于實(shí)體中定義的信號(hào)類(lèi)型不是VHDL默認(rèn)類(lèi)型,需要調(diào)用IEEE庫(kù)中的STD_LOGIC_1164程序包;由于結(jié)構(gòu)體中使用了運(yùn)算符“+”,調(diào)用IEEE庫(kù)中的STD_LOGIC_UNSIGNED程序包,因此需要在實(shí)體的前面調(diào)用IEEE庫(kù),并使用程序包。參考程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;5.波形仿真5.2寄存器的設(shè)計(jì)

寄存器是具有存儲(chǔ)二進(jìn)制數(shù)據(jù)功能的數(shù)字部件。寄存器分為基本寄存器和移位寄存器兩類(lèi),基本寄存器只具有寄存數(shù)據(jù)的功能;移位寄存器除了具有存儲(chǔ)二進(jìn)制數(shù)據(jù)的功能以外,還具有移位功能。移位功能就是指寄存器里面存儲(chǔ)的代碼能夠在時(shí)鐘脈沖的作用下依次左移或右移,可以實(shí)現(xiàn)數(shù)據(jù)的串/并轉(zhuǎn)換和數(shù)值運(yùn)算。

5.2.1數(shù)據(jù)寄存器

1.題目要求利用QuartusⅡ軟件的文本輸入方式,設(shè)計(jì)一個(gè)具有三態(tài)輸出的八位數(shù)碼寄存器,完成編譯和波形仿真后,下載到實(shí)驗(yàn)平臺(tái)驗(yàn)證電路功能。

2.電路設(shè)計(jì)設(shè)d為數(shù)據(jù)輸入端、oe為三態(tài)輸出控制端(當(dāng)oe=1時(shí)寄存器輸出為高阻態(tài);oe=0時(shí)為正常輸出狀態(tài))、q為輸出端。LIBRARYieee;USEieee.std_logic_1164.ALL;ENTITYregistISPORT(clk,oe:INstd_logic;d:INstd_logic_VECTOR(7DOWNTO0);q:BUFFERstd_logic_VECTOR(7DOWNTO0));ENDregist;ARCHITECTUREAOFregistISSIGNALqtemp:std_logic_VECTOR(7DOWNTO0);BEGINPROCESS(clk,oe)BEGINIFoe='0'THENIFclk'EVENTANDclk='1'THENqtemp<=d;ENDIF;ELSEqtemp<="ZZZZZZZZ";ENDIF;q<=qtemp;ENDPROCESS;ENDA;5.2.2循環(huán)移位寄存器

循環(huán)移位寄存器分為循環(huán)左移和循環(huán)右移兩種,能夠完成數(shù)碼的邏輯運(yùn)算。循環(huán)左移是數(shù)據(jù)由低位向高位移動(dòng),移出的高位又從低位端移入該寄存器,變成低位;循環(huán)右移是數(shù)據(jù)由高位向低位移動(dòng),移出的低位又從高位端移入該寄存器,變成高位。

1.題目要求利用QuartusⅡ軟件的文本輸入方式,設(shè)計(jì)一個(gè)五位循環(huán)左移寄存器,完成編譯和波形仿真后,下載到實(shí)驗(yàn)平臺(tái)驗(yàn)證電路功能。

2.電路設(shè)計(jì)設(shè)時(shí)鐘輸入端為CLK、并行數(shù)據(jù)輸入端為DATA、數(shù)據(jù)加載控制端為L(zhǎng)OAD、移位寄存器輸出端為DOUT。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSHIFTREGISPORT(CLK,LOAD:INSTD_LOGIC;DATA:INSTD_LOGIC_VECTOR(4DOWNTO0);DOUT:BUFFERSTD_LOGIC_VECTOR(4DOWNTO0));ENDSHIFTREG;ARCHITECTUREaOFSHIFTREGISBEGINProcess(CLK)BEGINIFCLK'EVENTANDCLK='1'THENIFLOAD='1'THENDOUT<=DATA;ELSEDOUT(4DOWNTO1)<=DOUT(3DOWNTO0);DOUT(0)<=DOUT(4);ENDIF;ENDIF;ENDPROCESS;ENDa;5.2.3雙向移位寄存器

雙向移位寄存器可以在工作模式控制端的控制下,能夠通過(guò)預(yù)置數(shù)據(jù)輸入端輸入并行數(shù)據(jù),還能通過(guò)移位數(shù)據(jù)輸入端輸入串行數(shù)據(jù),數(shù)據(jù)能從低位向高位移動(dòng),還能從高位移動(dòng)到低位。

1.題目要求利用QuartusⅡ軟件的文本輸入方式,設(shè)計(jì)一個(gè)五位雙向移位寄存器,完成編譯和波形仿真后,下載到實(shí)驗(yàn)平臺(tái)驗(yàn)證電路功能。

2.電路設(shè)計(jì)設(shè)時(shí)鐘輸入端為CLK、預(yù)置數(shù)據(jù)輸入端為PRED、工作模式控制端為M(00是保持、01是右移、10是左移、11是預(yù)置數(shù))、左移數(shù)據(jù)輸入端為DSL、右移數(shù)據(jù)輸入端為DSR、寄存器清零端為RESERT、移位寄存器輸出端為DOUT。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDREGISPORT(CLK,RESERT,DSL,DSR:INSTD_LOGIC;M:INSTD_LOGIC_VECTOR(1DOWNTO0);PRED:INSTD_LOGIC_VECTOR(4DOWNTO0);DOUT:BUFFERSTD_LOGIC_VECTOR(4DOWNTO0));ENDDREG;ARCHITECTUREaOFDREGISBEGINProcess(CLK,RESERT)BEGINIFCLK'EVENTANDCLK='1'THENIFRESERT='1'THENDOUT<=(OTHERS=>'0');--相當(dāng)于DOUT<=''00000''ELSEIFM(1)='0'THENIFM(0)='0'THENNULL;--NULL為空操作,保持ELSEDOUT<=DSR&DOUT(4DOWNTO1);--數(shù)據(jù)右移ENDIF;ELSIFM(0)='0'THENDOUT<=DOUT(3DOWNTO0)&DSL;--數(shù)據(jù)左移ELSEDOUT<=PRED;--預(yù)置數(shù)ENDIF;ENDIF;ENDIF;ENDPROCESS;ENDa;5.3.1用戶(hù)自定義數(shù)據(jù)類(lèi)型(1)枚舉類(lèi)型(ENUMERATED)

TYPE數(shù)據(jù)類(lèi)型名IS(取值1,取值2,…);

這種數(shù)據(jù)類(lèi)型應(yīng)用廣泛,可以用字符來(lái)代替數(shù)字,簡(jiǎn)化了邏輯電路中狀態(tài)的表示。例如設(shè)計(jì)描述一周每一天狀態(tài)的邏輯電路時(shí),如果用數(shù)組000代表周一、001代表周二,依此類(lèi)推,直到110代表周日。但這種表示方法對(duì)編寫(xiě)和閱讀程序來(lái)說(shuō)是不方便的。若改用枚舉數(shù)據(jù)類(lèi)型表示則方便得多,可以把一個(gè)星期定義成一個(gè)名為week的枚舉數(shù)據(jù)類(lèi)型:TYPEweekIS(Mon,Tue,Wed,Thu,F(xiàn)ri,Sat,Sun);這樣,周一到周日就可以用Mon到Sun來(lái)表示,直觀了很多。5.3.1用戶(hù)自定義數(shù)據(jù)類(lèi)型(2)數(shù)組類(lèi)型(ARRAY)。TYPE數(shù)據(jù)類(lèi)型名ISARRAY數(shù)組下標(biāo)范圍OF數(shù)組元素的數(shù)據(jù)類(lèi)型;STANDARD程序包中預(yù)定義的整數(shù)類(lèi)型表示范圍是32位有符號(hào)的二進(jìn)制數(shù),這么大范圍的數(shù)據(jù)之間的運(yùn)算用硬件實(shí)現(xiàn)起來(lái)將消耗極大的資源,而應(yīng)用中涉及的整數(shù)范圍通常很小,例如一個(gè)數(shù)碼管需要顯示的數(shù)據(jù)僅為0~9。由于這個(gè)原因,VHDL使用整數(shù)時(shí),要求用RANGE語(yǔ)句為定義的整數(shù)限定一個(gè)范圍,VHDL綜合器根據(jù)用戶(hù)指定的范圍在硬件中將整數(shù)用相應(yīng)的二進(jìn)制數(shù)據(jù)表示。用戶(hù)自定義的整數(shù)類(lèi)型可認(rèn)為是STANDARD程序包中預(yù)定義整數(shù)類(lèi)型的一個(gè)子類(lèi)。其格式如下。TYPE整數(shù)類(lèi)型名ISRANGE約束范圍;例如用戶(hù)定義一個(gè)用于數(shù)碼管顯示的數(shù)據(jù)類(lèi)型,則可定義為:

TYPEdigitISRANGE0TO9;(3)用戶(hù)自定義子類(lèi)型SUBTYPE子數(shù)據(jù)類(lèi)型名IS數(shù)據(jù)類(lèi)型名RANGE數(shù)據(jù)范圍;

數(shù)組類(lèi)型是將相同類(lèi)型的數(shù)據(jù)集合在一起所形成的數(shù)據(jù)類(lèi)型,可以是一維的,也可以是多維的。數(shù)組類(lèi)型定義格式如下:TYPE數(shù)據(jù)類(lèi)型名ISARRAY數(shù)組下標(biāo)范圍OF數(shù)組元素的數(shù)據(jù)類(lèi)型;

如果數(shù)據(jù)類(lèi)型沒(méi)有指定,則使用整數(shù)數(shù)據(jù)類(lèi)型;如果用整數(shù)類(lèi)型以外的其他類(lèi)型,則需要在確定數(shù)據(jù)范圍后加上數(shù)據(jù)類(lèi)型名。例如:TYPEbusISARRAY(15DOWNTO0)OFBIT;數(shù)組名稱(chēng)為bus,共有16個(gè)元素,下標(biāo)排序是15、14、…、1、0,各元素可分別表示為bus(15)、…、bus(0),數(shù)組類(lèi)型為BIT。除了一維數(shù)組外,VHDL還可以定義二維、三維數(shù)組,例如定義一個(gè)16字、每字8位的RAM(隨機(jī)存儲(chǔ)器),可以定義為:TYPEram_16_8ISARRAY(0TO15)OFSTD_LOGIC_VECTOR(7DOWNTO0);5.3.1用戶(hù)自定義數(shù)據(jù)類(lèi)型

用戶(hù)若對(duì)自己定義的數(shù)據(jù)作出一些限制,就形成了原自定義數(shù)據(jù)類(lèi)型的子類(lèi)型。對(duì)于每一個(gè)類(lèi)型說(shuō)明都定義了一個(gè)范圍,一個(gè)類(lèi)型說(shuō)明與其他類(lèi)型說(shuō)明所定義的范圍可以是不同的,在用VHDL對(duì)硬件描述時(shí),有時(shí)一個(gè)對(duì)象可能取值的范圍是某個(gè)類(lèi)型定義范圍的子集,這時(shí)就要用到子類(lèi)型的概念。子類(lèi)型的格式如下:SUBTYPE子數(shù)據(jù)類(lèi)型名IS數(shù)據(jù)類(lèi)型名RANGE數(shù)據(jù)范圍;例如:在STD_LOGIC_VECTOR數(shù)據(jù)類(lèi)型上所形成的子類(lèi)型:SUBTYPEiobusISSTD_LOGIC_VECTOR(4DOWNTO0);

子類(lèi)型可以對(duì)原數(shù)據(jù)類(lèi)型指定范圍而形成,也可以完全和原數(shù)據(jù)類(lèi)型范圍一致。子類(lèi)型常用于存儲(chǔ)器陣列等的數(shù)組描述場(chǎng)合。5.3.2數(shù)據(jù)類(lèi)型間的轉(zhuǎn)換程序包名稱(chēng)函數(shù)名稱(chēng)功能STD_LOGIC_1164TO_BIT由STD_LOGIC轉(zhuǎn)換為BITTO_BITVECTOR由STD_LOGIC_VECTOR轉(zhuǎn)換為BIT_VECTORTO_STDLOGIC由BIT轉(zhuǎn)換為STD_LOGICTO_STDLOGICVECTER由BIT_VECTOR轉(zhuǎn)換為STD_LOGIC_VECOTRSTD_LOGIC_ARITHCONV_INTEGER由UNSIGNED,SIGNED轉(zhuǎn)換為INTEGERCONV_UNSIGNED由SIGNED,INTEGER轉(zhuǎn)換為UNSIGNEDCONV_STD_LOGIC_VECTOR由INTEGER,UNSDGNED,SIGNED類(lèi)型轉(zhuǎn)換為

STD_LOGIC_VECTORSTD_LOGIC_UNSIGNEDCONV_INTEGER由STD_LOGIC_VECTOR轉(zhuǎn)換為INTEGER5.3.2數(shù)據(jù)類(lèi)型間的轉(zhuǎn)換例如:把INTEGER數(shù)據(jù)類(lèi)型的信號(hào)A轉(zhuǎn)換為STD_LOGIC_VECTOR數(shù)據(jù)類(lèi)型的信號(hào)B,程序如下:SIGNALA:INTEGERRANGER0TO15;--定義信號(hào)ASIGNALB:STD_LOGIC_VECTOR(3DOWNTO0);--定義信號(hào)BB<=CONV_STD_LOGIC_VECTOR(A);--調(diào)用轉(zhuǎn)換函數(shù)注意:使用數(shù)據(jù)類(lèi)型轉(zhuǎn)換函CONV_STD_LOGIC_VECTOR,需要調(diào)用IEEE庫(kù)中的STD_LOGIC_ARITH程序包。5.3.3元件例化語(yǔ)句1.元件聲明語(yǔ)句(COMPONENT)格式如下:COMPONENT元件名

PORT元件端口說(shuō)明(與該元件源程序?qū)嶓w中的PORT部分相同)ENDCOMPONENT;2.元件例化語(yǔ)句(PORTMAP)格式如下:例化名:元件名PORTMAP(元件端口對(duì)應(yīng)關(guān)系列表);信號(hào)之間有位置映射和名稱(chēng)映射兩種映射(關(guān)聯(lián))方式:(1)位置映射。就是被調(diào)用元件端口說(shuō)明中信號(hào)的書(shū)寫(xiě)順序及位置和PORTMAP語(yǔ)句中實(shí)際信號(hào)的書(shū)寫(xiě)順序及位置一一對(duì)應(yīng)。例如某元件的端口說(shuō)明為:PORT(a,b:INBIT;c:OUTBIT);調(diào)用該元件時(shí)可使用:com1:u1PORTMAP(n1,n2,m);顯然n1對(duì)應(yīng)a,n2對(duì)應(yīng)b,m對(duì)應(yīng)c,com1是例化名,u1是元件名。(2)名稱(chēng)映射。就是將庫(kù)中已有的模塊的端口名稱(chēng)賦予設(shè)計(jì)中的信號(hào)名。上例可改為:com1:u1PORTMAP(a=>n1,b=>n2,c=>m);用元件例化語(yǔ)句

實(shí)現(xiàn)4位移位寄存器的設(shè)計(jì)根據(jù)題目要求,調(diào)用D觸發(fā)器模塊dff,并使用元件例化語(yǔ)句設(shè)計(jì)的程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYshiftISPORT(DIN:INSTD_LOGIC;CP:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDshift;ARCHITECTUREstrOFshiftISCOMPONENTdff--元件聲明語(yǔ)句PORT(D:INSTD_LOGIC;CLK:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALq:STD_LOGIC_VECTOR(4DOWNTO0);BEGINq(0)<=DIN;dff1:dffPORTMAP(q(0),CP,q(1));--位置映射dff2:dffPORTMAP(q(1),CP,q(2));dff3:dffPORTMAP(D=>q(2),CLK=>CP,Q=>q(3));--名稱(chēng)映射dff4:dffPORTMAP(D=>q(3),CLK=>CP,Q=>q(4));DOUT<=q(4DOWNTO1);ENDstr;4位移位寄存器仿真波形

從仿真波形中可以看出,在0~50ns區(qū)間,DIN=1,在CP(時(shí)鐘)上升沿,DOUT=0001(移入數(shù)據(jù)“1”);在50~100ns區(qū)間,DIN=1,在CP上升沿,DOUT=0011(再次移入數(shù)據(jù)“1”)。其他區(qū)間的波形情況符合4位移位寄存器。5.3.4生成語(yǔ)句1.FOR工作模式的生成語(yǔ)句FOR工作模式常常用來(lái)進(jìn)行

重復(fù)結(jié)構(gòu)的描述,格式如下:[生成標(biāo)號(hào):]FOR循環(huán)變量IN取值范圍GENERATE并行語(yǔ)句;ENDGENERATE[生成標(biāo)號(hào)];2.IF工作模式的生成語(yǔ)句IF工作模式的生成語(yǔ)句常用來(lái)

描述帶有條件選擇的結(jié)構(gòu)。格式如下:[生成標(biāo)號(hào):]IF條件GENERATE并行語(yǔ)句;ENDGENERATE[生成標(biāo)號(hào)];LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYshiftforISPORT(DIN:INSTD_LOGIC;CP:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(5DOWNTO0));ENDshiftfor;用FOR工作模式生成語(yǔ)句描述6位移位寄存器ARCHITECTUREstrOFshiftforISCOMPONENTdff--元件聲明語(yǔ)句PORT(D:INSTD_LOGIC;CLK:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALq:STD_LOGIC_VECTOR(6DOWNTO0);BEGINq(0)<=DIN;reg1:FORiIN0TO5GENERATE--FOR工作模式

生成語(yǔ)句dffx:dffPORTMAP(q(i),cp,q(i+1));--元件例化語(yǔ)句ENDGENERATEreg1;DOUT<=q(6DOWNTO1);ENDstr;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYshift1ISPORT(d1:INSTD_LOGIC;cp:INSTD_LOGIC;d0:OUTSTD_LOGIC);ENDshift1;ARCHITECTUREstrOFshift1IS

COMPONENTdffPORT(d:INSTD_LOGIC;

clk:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONENT;用FOR和IF工作模式的生成語(yǔ)句描述8位移位寄存器SIGNALq:STD_LOGIC_VECTOR(7DOWNTO1);BEGINreg:FORiIN0TO7GENERATE--FOR工作模式生成語(yǔ)句g1:IFi=0GENERATE--IF工作模式生成語(yǔ)句dffx:dffPORTMAP(d1,cp,q(i+1));ENDGENERATE;g2:IFi=7GENERATEdffx:dffPORTMAP(q(i),cp,d0);ENDGENERATE;g3:IF((i/=0)AND(i/=7))GENERATE--IF語(yǔ)句

描述規(guī)則部分dffx:dffPORTMAP(q(i),cp,q(i+1));ENDGENERATE;ENDGENERATEreg;ENDstr;5.4.1LED點(diǎn)陣8行8列的LED點(diǎn)陣具有64個(gè)像素點(diǎn),可以顯示數(shù)字和一些比較簡(jiǎn)單的漢字。內(nèi)部結(jié)構(gòu)上由64個(gè)發(fā)光二極管組成,每個(gè)發(fā)光二極管是放置在行線和列線的交叉點(diǎn)上。5.4點(diǎn)陣顯示的設(shè)計(jì)使用1088AS(共陰極)點(diǎn)陣的某一行,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)能夠異步復(fù)位的8路彩燈控制器,要求彩燈按照4種自動(dòng)循環(huán)變化的花型閃爍。1.實(shí)體的確定分析設(shè)計(jì)題目,應(yīng)該有1個(gè)時(shí)鐘脈沖輸入端、1個(gè)異步清零端和8個(gè)信號(hào)輸出端。設(shè)時(shí)鐘脈沖輸入端為CLK、異步復(fù)位端為CLR;輸出端口為L(zhǎng)ED。實(shí)體名為ledctrl。參考程序如下:ENTITYledctrlISPORT(CLKIN:INSTD_LOGIC;CLR:INSTD_LOGIC;LED:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDENTITYledctrl;5.4.2彩燈控制器2.結(jié)構(gòu)體的確定在結(jié)構(gòu)體中定義4個(gè)常量(F1、F2、F3、F4),代表4種花型;自定義只有5種取值的枚舉數(shù)組類(lèi)型(STATE),用于記錄當(dāng)前的4種花型和1個(gè)高阻狀態(tài)(復(fù)位狀態(tài)),使用狀態(tài)驅(qū)動(dòng),即用CASE語(yǔ)句判斷“當(dāng)前狀態(tài)”并運(yùn)行相應(yīng)語(yǔ)句(某個(gè)花型),然后再將下一個(gè)狀態(tài)賦值給“當(dāng)前狀態(tài)”;運(yùn)行下一個(gè)狀態(tài)對(duì)應(yīng)的語(yǔ)句(另一個(gè)花型),再改變“當(dāng)前狀態(tài)”,利用狀態(tài)的變化驅(qū)動(dòng)程序不斷運(yùn)行。參考程序如下:ARCHITECTUREARTOFledctrlISTYPESTATEIS(S0,S1,S2,S3,S4);--自定義枚舉數(shù)組類(lèi)型STATESIGNALCURRSTATE:STATE;--定義STATE類(lèi)型信號(hào)CURRSTATESIGNALFLOWER:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(CLR,CLKIN)ISCONSTANTF1:STD_LOGIC_VECTOR(7DOWNTO0):="01010101";--定義花型1CONSTANTF2:STD_LOGIC_VECTOR(7DOWNTO0):="00100100";--定義花型2CONSTANTF3:STD_LOGIC_VECTOR(7DOWNTO0):="11001100";--定義花型3CONSTANTF4:STD_LOGIC_VECTOR(7DOWNTO0):="11100010";--定義花型4BEGINIFCLR='1'THENCURRSTATE<=S0;--狀態(tài)S0ELSIFRISING_EDGE(CLKIN)THENCASECURRSTATEISWHENS0=>--CURRSTATE=S0時(shí),執(zhí)行的語(yǔ)句FLOWER<="000000000000";CURRSTATE<=S1;--將CURRSTATE改為S1WHENS1=>FLOWER<=F1;--CURRSTATE=S1時(shí),執(zhí)行的語(yǔ)句CURRSTATE<=S2;--將CURRSTATE改為S2WHENS2=>FLOWER<=F2;CURRSTATE<=S3;WHENS3=>FLOWER<=F3;CURRSTATE<=S4;WHENS4=>FLOWER<=F4;CURRSTATE<=S1;--將CURRSTATE改為S1,實(shí)現(xiàn)循環(huán)運(yùn)行ENDCASE;ENDIF;ENDPROCESS;LED<=FLOWER;ENDARCHITECTUREART;從仿真波形中可以看出,在0~50ns區(qū)間,CLR=1(異步復(fù)位有效),LED=00000000;在50~200ns區(qū)間,LED=00000000(狀態(tài)S0);在250~350ns區(qū)間,LED=01010101(狀態(tài)S1);在350~450ns區(qū)間,LED=001001001(狀態(tài)S2)。其他區(qū)間的波形情況符合題意。想一想、做一做:改成按列顯示,如何修改程序?彩燈控制器的仿真波形LED點(diǎn)陣可以顯示漢字或字符,只是此時(shí)的漢字或字符應(yīng)以點(diǎn)陣來(lái)表示,取點(diǎn)越多,漢字或字符越逼真,通常8行8列的點(diǎn)陣可以用來(lái)顯示一些簡(jiǎn)單的漢字。把要顯示的漢字用8位的二進(jìn)制代碼(對(duì)應(yīng)點(diǎn)陣的行或列)來(lái)表示,這一過(guò)程稱(chēng)為取字模。

例如漢字“電”的十六進(jìn)制字模為:10、7C、54、7C、54、7C、12、1E,其中“1”表示該點(diǎn)發(fā)光,“0”表示該點(diǎn)不發(fā)光。將字模賦值給點(diǎn)陣的每一列,在程序中采用逐行掃描的方法掃描點(diǎn)陣的每一行,使之輪流為低電平,于是每列字模的相應(yīng)點(diǎn)被點(diǎn)亮。雖然漢字是逐行顯示的,但由于人眼的視覺(jué)暫留,且只要掃描速度足夠快,看到的還將是一個(gè)完整的漢字。

使用1088AS(共陰極)點(diǎn)陣設(shè)計(jì)并實(shí)現(xiàn)一個(gè)顯示漢字“電”的電路,要求顯示穩(wěn)定、筆畫(huà)完整。5.4.3漢字的顯示

分析設(shè)計(jì)題目,點(diǎn)陣漢字的顯示是多行、多列的顯示,相當(dāng)于數(shù)碼管的動(dòng)態(tài)顯示。應(yīng)該有1個(gè)時(shí)鐘脈沖輸入端、1個(gè)異步清零端、8個(gè)行信號(hào)輸出端和8個(gè)列信號(hào)輸出端。設(shè)時(shí)鐘脈沖輸入端為CLKIN、異步復(fù)位端為CLR;行信號(hào)輸出端口為ROLED、列信號(hào)輸出端口為COLED。文件名為ledword。參考程序如下:ENTITYledwordISPORT(CLKIN:INSTD_LOGIC;CLR:INSTD_LOGIC;ROLED,LEDCO:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDENTITYledword;1.實(shí)體的確定

在結(jié)構(gòu)體中定義8個(gè)常量(F0~F7),代表漢字字模;自定義只有9種取值的枚舉數(shù)組類(lèi)型(STATE),用于記錄當(dāng)前的漢字字模和1個(gè)高阻狀態(tài)(復(fù)位狀態(tài))。字模賦值給行信號(hào),列信號(hào)(低電平)決定顯示字模某列。同樣使用狀態(tài)驅(qū)動(dòng)。參考程序如下:ARCHITECTUREARTOFledwordISTYPESTATEIS(S0,S1,S2,S3,S4,S5,S6,S7,S8);SIGNALCURRSTATE:STATE;SIGNALtmproled,tmpledco:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(CLR,CLKIN)IS2.結(jié)構(gòu)體的確定CONSTANTF0:STD_LOGIC_VECTOR(7DOWNTO0):="00010000";CONSTANTF1:STD_LOGIC_VECTOR(7DOWNTO0):="01111100";CONSTANTF2:STD_LOGIC_VECTOR(7DOWNTO0):="01010100";CONSTANTF3:STD_LOGIC_VECTOR(7DOWNTO0):="01111100";CONSTANTF4:STD_LOGIC_VECTOR(7DOWNTO0):="01010100";CONSTANTF5:STD_LOGIC_VECTOR(7DOWNTO0):="01111100";CONSTANTF6:STD_LOGIC_VECTOR(7DOWNTO0):="00010010";CONSTANTF7:STD_LOGIC_VECTOR(7DOWNTO0):="00011110";

BEGINIFCLR='1'THENCURRSTATE<=S0;tmpledco<="11111111";ELSIFRISING_EDGE(CLKIN)THENCASECURRSTATEISWHENS0=>tmproled<="00000000";CURRSTATE<=S1;WHENS1=>tmpledco<=F0;tmproled<="01111111";CURRSTATE<=S2;WHENS2=>tmpledco<=F1;tmproled<="10111111";CURRSTATE<=S3;WHENS3=>tmpledco<=F2;tmproled<="11011111";CURRSTATE<=S4;WHENS4=>tmpledco<=F3;tmproled<="11101111";CURRSTATE<=S5;WHENS5=>tmpledco<=F4;tmproled<="11110111";CURRSTATE<=S6;WHENS6=>tmpledco<=F5;tmproled<="11111011";CURRSTATE<=S7;WHENS7=>tmpledco<=F6;tmproled<="11111101";CURRSTATE<=S8;WHENS8=>tmpledco<=F7;tmproled<="11111110";CURRSTATE<=S1;ENDCASE;ENDIF;ENDPROCESS;ROLED<=tmproled;LEDCO<=tmpledco;ENDARCHITECTUREART;

由于實(shí)體中定義的STD_LOGIC信號(hào)類(lèi)型不是VHDL默認(rèn)類(lèi)型,需要調(diào)用IEEE庫(kù)中的STD_LOGIC_1164程序包,因此需要在實(shí)體的前面調(diào)用IEEE庫(kù),并使用該程序包。參考程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;3.庫(kù)和程序包的確定從仿真波形中可以看出,在0~50ns區(qū)間,CLR=1(異步復(fù)位有效),LEDCO=FF、ROLED=00000000(狀態(tài)S0);在150ns處,CLKIN上升沿右側(cè),LEDCO=10、ROLED=01111111(狀態(tài)S1)。其他區(qū)間的波形情況符合題意。漢字顯示控制的仿真波形

使用1088AS(共陰極)點(diǎn)陣設(shè)計(jì)并實(shí)現(xiàn)漢字“電”的滾動(dòng)顯示。要求:能夠異步復(fù)位、漢字從下到上循環(huán)滾動(dòng)顯示。

把所有需顯示的漢字或字符的字模從上往下依次排好,一方面用足夠快的速度(即滿(mǎn)足視覺(jué)暫留的頻率)從上往下掃描整個(gè)點(diǎn)陣,顯示該時(shí)刻所掃描的漢字或字符,即顯示一個(gè)完整“畫(huà)面”;另外,用一個(gè)較慢的速度每次從下往上移動(dòng)一行,即將“畫(huà)面”的首行移出,補(bǔ)充到“畫(huà)面”的末行,這時(shí)將顯示上方缺少首行、下方多個(gè)首行的“畫(huà)面”。不斷重復(fù),視覺(jué)看上去就是滾動(dòng)的效果了。5.4.4漢字的滾動(dòng)顯示

分析設(shè)計(jì)題目,與漢字顯示相同,應(yīng)該有1個(gè)時(shí)鐘脈沖輸入端、1個(gè)異步清零端、8個(gè)行信號(hào)輸出端和8個(gè)列信號(hào)輸出端。設(shè)時(shí)鐘脈沖輸入端為CLK、異步復(fù)位端為CLR;行信號(hào)輸出端口為ROLED、列信號(hào)輸出端口為COLED。文件名為rollword。參考程序如下:ENTITYrollwordISPORT(CLK:INSTD_LOGIC;CLR:INSTD_LOGIC;ROLED,LEDCO:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDENTITYrollword;1.實(shí)體的確定結(jié)構(gòu)體中定義4個(gè)進(jìn)程:復(fù)位和慢速信號(hào)產(chǎn)生進(jìn)程、穩(wěn)定“畫(huà)面”顯示進(jìn)程、行掃描進(jìn)程、行遞增計(jì)數(shù)進(jìn)程,其中行遞增計(jì)數(shù)進(jìn)程由慢速信號(hào)驅(qū)動(dòng),用于滾動(dòng)“畫(huà)面”;其他進(jìn)程由快速時(shí)鐘驅(qū)動(dòng),用于顯示穩(wěn)定“畫(huà)面”。參考程序如下:ARCHITECTUREARTOFrollwordISSIGNALtmproled,tmpledco:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALrow,col,count:STD_LOGIC_VECTOR(2DOWNTO0);SIGNALCLKLOW:STD_LOGIC;BEGIN2.結(jié)構(gòu)體的確定p0:PROCESS(CLR,CLK)IS--復(fù)位和慢速信號(hào)產(chǎn)生進(jìn)程VARIABLEcnt:STD_LOGIC_VECTOR(9DOWNTO0);BEGINIFCLR='1'THENcnt:=(OTHERS=>'0'); col<="000";row<="000"; ELSIFRISING_EDGE(CLK)THEN cnt:=cnt+1;col<=col+1;row<=row+1; ENDIF; CLKLOW<=cnt(9);--慢速信號(hào) ENDPROCESSp0;p1:PROCESS(CLK)IS--穩(wěn)定“畫(huà)面”顯示進(jìn)程CONSTANTF0:STD_LOGIC_VECTOR(7DOWNTO0):="00010000";CONSTANTF1:STD_LOGIC_VECTOR(7DOWNTO0):="01111100";CONSTANTF2:STD_LOGIC_VECTOR(7DOWNTO0):="01010100";CONSTANTF3:STD_LOGIC_VECTOR(7DOWNTO0):="01111100";CONSTANTF4:STD_LOGIC_VECTOR(7DOWNTO0):="01010100";CONSTANTF5:STD_LOGIC_VECTOR(7DOWNTO0):="01111100";

溫馨提示

  • 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)論