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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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語言的順序語句

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

BEGIN

變量和信號(hào)賦值語句;順序語句;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)程語句,進(jìn)程中的順序語句按書寫順序循環(huán)執(zhí)行,直到敏感信號(hào)值穩(wěn)定不變?yōu)橹埂#?)說明部分:可以缺省。定義該進(jìn)程所需的局部數(shù)據(jù)環(huán)境,包括常量、變量和子程序等,但不能定義信號(hào),信號(hào)只能在結(jié)構(gòu)體的說明部分定義。(4)順序語句組:通常包含變量賦值語句、信號(hào)賦值語句、IF語句、CASE語句等順序語句。進(jìn)程語句的主要特點(diǎn)歸納如下:(1)同一結(jié)構(gòu)體中的各個(gè)進(jìn)程之間是并發(fā)執(zhí)行的,并且都可以使用實(shí)體說明和結(jié)構(gòu)體中所定義的信號(hào)、常量和變量;但同一進(jìn)程中的順序語句組則是按照書寫順序執(zhí)行的順序語句。(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)程之間,可以通過結(jié)構(gòu)體中定義的信號(hào)或變量來進(jìn)行通信,但在進(jìn)程說明部分定義的變量,只能在該進(jìn)程內(nèi)部使用。(4)VHDL中所有并行語句都可以理解為特殊的進(jìn)程,只是不以PROCESS結(jié)構(gòu)出現(xiàn),其邏輯表達(dá)式中的信號(hào)就是隱含的敏感信號(hào)。4.1.2IF語句(1)跳轉(zhuǎn)控制。格式如下:

IF條件THEN

順序語句;

ENDIF;當(dāng)程序執(zhí)行到IF語句時(shí),先判斷IF語句指定的條件是否成立。如果成立,IF語句所包含的順序處理語句將被執(zhí)行;如果條件不成立,程序跳過IF語句包含的順序語句,而執(zhí)行ENDIF語句后面的語句,這里的條件起到?jīng)Q定是否跳轉(zhuǎn)的作用。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdffcISPORT(clk,d:INSTD_LOGIC;qout:OUTSTD_LOGIC);ENDdffc;用IF語句描述一個(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順序語句;ELSE順序語句;ENDIF;根據(jù)IF所指定的條件是否成立,程序可以選擇兩種不同的執(zhí)行路徑,當(dāng)條件成立時(shí),程序執(zhí)行THEN和ELSE之間的順序語句部分,再執(zhí)行ENDIF之后的語句;當(dāng)IF語句的條件不成立時(shí),程序執(zhí)行ELSE和ENDIF之間的順序語句,再執(zhí)行ENDIF之后的語句。設(shè)a和b為選擇電路的輸入信號(hào),sel為選擇控制信號(hào),output為輸出信號(hào)。ENTITYselection2ISPORT(a,b,sel:INBIT;output:OUTBIT);ENDselection2;用IF語句描述一個(gè)“二選一”電路ARCHITECTUREdataOFselection2ISBEGINPROCESS(a,b,sel)BEGINIF(sel='1')THEN--控制信號(hào)sel為1

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

ELSIF條件2THEN順序語句2;

……;

ELSIF條件nTHEN順序語句n;

ELSE順序語句n+1;ENDIF;多選擇控制的IF語句,可允許在一個(gè)語句中出現(xiàn)多重條件,實(shí)際上是條件的嵌套。當(dāng)滿足所給定的多個(gè)條件之一時(shí),就執(zhí)行該條件后的順序語句;當(dāng)所有的條件都不滿足時(shí),則執(zhí)行ELSE和ENDIF之間的語句。注意:每個(gè)IF語句必須有一個(gè)對(duì)應(yīng)的ENDIF語句。設(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語句描述一個(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語句描述“4選1”數(shù)據(jù)選擇器的仿真波形1.二進(jìn)制遞增計(jì)數(shù)器

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

定義一個(gè)臨時(shí)變量,使用IF語句判斷時(shí)鐘脈沖的上升沿,在每個(gè)時(shí)鐘脈沖的上升沿到來時(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í)鐘脈沖的有效沿到來,計(jì)數(shù)器才回到零狀態(tài)。

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

可逆計(jì)數(shù)器就是增加一個(gè)計(jì)數(shù)方向控制端,用來控制是遞增計(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(清零無效)、D=1(遞增計(jì)數(shù)),輸出Q按二進(jìn)制遞增,計(jì)數(shù)到111時(shí),下個(gè)脈沖上升沿回到000;在500ns~600ns區(qū)間,CLR=1(清零無效)、D=0(遞減計(jì)數(shù)),輸出Q按二進(jìn)制遞減;在600ns~700ns區(qū)間,CLR=0(清零有效),由于同步清零要等待時(shí)鐘脈沖的有效沿,所以輸出Q在625ns后清零,并保持到725ns。

想一想、做一做:刪除或注釋掉USEIEEE.STD_LOGIC_UNSIGNED.ALL;存盤后編譯,看看顯示什么錯(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(異步清零無效)、LOAD=1(同步置數(shù)有效)、DIN=5(置數(shù)數(shù)據(jù)),輸出Q=0101(十進(jìn)制的5),與DIN相同;在80~360ns區(qū)間,CLR=1(異步清零無效)、LOAD=0(同步置數(shù)無效)、CE=1(計(jì)數(shù)使能有效)、DIR=1(遞增計(jì)數(shù)),輸出Q按十進(jìn)制遞增計(jì)數(shù);在360~480ns區(qū)間,CLR=1(異步清零無效)、LOAD=0(同步置數(shù)無效)、CE=0(計(jì)數(shù)使能無效),輸出Q=0010保持不變。同樣分析其他區(qū)間。異步清零同步置數(shù)可逆計(jì)數(shù)器仿真波形;

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

數(shù)碼管是數(shù)字系統(tǒng)常用的顯示器件,鍵盤輸入的數(shù)碼管顯示器就是將鍵盤輸入的數(shù)碼顯示在數(shù)碼管上。4.2編碼鍵盤的設(shè)計(jì)4.2.1CASE語句CASE表達(dá)式ISWHEN條件選擇值1=>順序語句1;WHEN條件選擇值2=>順序語句2;WHEN條件選擇值3=>順序語句3;……;WHENOTHERS=>順序語句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語句描述“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語句描述“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ù)碼管分為共陽極和共陰極兩種接法,把數(shù)碼管內(nèi)所有二極管的陽極連接到一起的稱為共陽極接法;把所有二極管的陰極連接到一起稱為共陰極接法。4.2.2數(shù)碼管的靜態(tài)顯示靜態(tài)顯示就是將需要顯示的BCD碼數(shù)據(jù)經(jīng)過譯碼后,分別接到數(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è)無效狀態(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編碼鍵盤在數(shù)字電路中,可以利用編碼器實(shí)現(xiàn)按鍵鍵值的直接編碼。

將每個(gè)按鍵的輸出信號(hào)對(duì)應(yīng)連接到編碼器的每個(gè)輸入端,通過編碼邏輯就可以在編碼器的輸出端得到對(duì)應(yīng)每個(gè)按鍵的碼值,稱這種鍵盤為編碼鍵盤。但是當(dāng)按鍵較多時(shí),編碼鍵盤會(huì)由于按鍵和連線較多,造成成本高;另外直接編碼的方法也不夠靈括,一旦編碼邏輯固定就難以更改了。1.設(shè)計(jì)題目設(shè)計(jì)一個(gè)12-4線的編碼鍵盤,按鍵為彈起式,已經(jīng)過“去抖動(dòng)”處理。參考程序:12-4線的編碼鍵盤應(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;--打開程序包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";--9WHEN"010000000000"=>N<="1010";--*WHEN"100000000000"=>N<="1011";--#WHENOTHERS=>N<="1111";ENDCASE;ENDIF;ENDPROCESS;KEYOUT<=N;ENDARCHITECTUREART;編碼鍵盤仿真波形從仿真波形中可以看出,在0~100ns區(qū)間,輸入KEYIN=111111111110(按下0鍵),輸出KEYOUT=0000(鍵0的編碼);在100ns~200ns區(qū)間,輸入KEYIN=111111111101(按下1鍵),輸出KEYOUT=0001(鍵1的編碼)。其他波形區(qū)間情況符合設(shè)計(jì)要求。想一想、做一做:如果將12-4線編碼鍵盤改為8-3線,如何修改程序?

虛擬鍵盤需要一個(gè)由系統(tǒng)內(nèi)部時(shí)鐘信號(hào)產(chǎn)生的周期性變化的編碼信號(hào),還需要一個(gè)輸入信號(hào)確認(rèn)鍵。

當(dāng)看到顯示的數(shù)字是要向系統(tǒng)輸入的數(shù)碼時(shí),按下輸入信號(hào)確認(rèn)鍵,編碼信號(hào)就不再變化,將當(dāng)前顯示的數(shù)碼輸入到系統(tǒng);

然后抬起輸入信號(hào)確認(rèn)鍵,編碼信號(hào)再次周期性變化。

虛擬鍵盤不需要外接鍵盤電路,對(duì)輸入信息的編碼靈活方便,常用于調(diào)試硬件系統(tǒng)。4.2.4數(shù)碼顯示的虛擬鍵盤1.題目要求

設(shè)計(jì)一個(gè)能夠輸入十進(jìn)制數(shù)碼0~9的虛擬鍵盤,輸入的數(shù)碼顯示在共陰極的數(shù)碼管上。2.電路設(shè)計(jì)

根據(jù)題意要求,可分為虛擬鍵盤和數(shù)碼管靜態(tài)顯示2個(gè)部分,虛擬鍵盤應(yīng)該有1個(gè)時(shí)鐘脈沖輸入端、1個(gè)數(shù)碼確認(rèn)鍵和1個(gè)十進(jìn)制數(shù)值的顯示輸出端;1個(gè)數(shù)碼管采用靜態(tài)顯示方式,其輸入信號(hào)就是十進(jìn)制數(shù)值的顯示輸出端。設(shè)CLK為時(shí)鐘脈沖輸入端、SET為數(shù)碼確認(rèn)鍵、定義臨時(shí)信號(hào)temp為十進(jìn)制數(shù)值的顯示輸出端、臨時(shí)信號(hào)cnt作為從0到9周期性變化的計(jì)數(shù)值;當(dāng)按下數(shù)碼確認(rèn)鍵SET時(shí),將cnt的當(dāng)前值賦值給temp,再經(jīng)過數(shù)碼管譯碼后靜態(tài)顯示。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYxnjpISPORT(CLK:INSTD_LOGIC;SET:INSTD_LOGIC;--輸入數(shù)碼確認(rèn)鍵

高電平有效S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDxnjp;ARCHITECTUREARTOFxnjpISSIGNALcnt,temp:STD_LOGIC_VECTOR(3DOWNTO0);BEGINP0:PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENIFcnt="1001"THEN--0~9周期性變化的信號(hào)cnt<="0000";ELSEcnt<=cnt+1;ENDIF;ENDIF;ENDPROCESSP0;P1:PROCESS(cnt,SET)BEGINIFSET='1'THENCASEcntISWHEN"0000"=>temp<="0000";WHEN"0001"=>temp<="0001";WHEN"0010"=>temp<="0010";WHEN"0011"=>temp<="0011";WHEN"0100"=>temp<="0100";WHEN"0101"=>temp<="0101";WHEN"0110"=>temp<="0110";WHEN"0111"=>temp<="0111";WHEN"1000"=>temp<="1000";WHEN"1001"=>temp<="1001";WHENOTHERS=>temp<="1111";ENDCASE;ENDIF;ENDPROCESSP1;P2:PROCESS(temp)BEGINCASEtempISWHEN"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;ENDPROCESSP2;ENDART;虛擬鍵盤的仿真波形從仿真波形中可以看出,信號(hào)cnt在時(shí)鐘上升沿按十進(jìn)制規(guī)律遞增計(jì)數(shù),在SET為高電平時(shí),將信號(hào)cnt的當(dāng)前值賦值給temp,再將temp譯碼顯示在數(shù)碼管上;SET為低電平,temp保持原值,顯示的數(shù)碼不再變化。想一想、做一做:該程序能否將進(jìn)程P1和進(jìn)程P2合并成一個(gè)?4.3.1數(shù)碼管的動(dòng)態(tài)顯示3位一體數(shù)碼管是將3個(gè)單個(gè)數(shù)碼管的驅(qū)動(dòng)端(A、B、C、D、E、F、G和DP)連接到一起形成公用數(shù)據(jù)總線,再把3個(gè)COM(公共端)引出,作為選通端。同樣分為共陰極和共陽極兩種。動(dòng)態(tài)掃描原理

由于驅(qū)動(dòng)端接在一起,3位一體數(shù)碼管采用動(dòng)態(tài)顯示方式。動(dòng)態(tài)顯示是將所有顯示數(shù)據(jù)的BCD碼按照一定的順序和變化頻率送到公用數(shù)據(jù)總線上,再通過一個(gè)共用的顯示譯碼器譯碼后,接到數(shù)碼管的驅(qū)動(dòng)端,同時(shí)利用一個(gè)與數(shù)據(jù)總線變化頻率相同的選通信號(hào)來確定是那個(gè)數(shù)碼管顯示。即選通信號(hào)決定是那一個(gè)數(shù)碼管顯示,該時(shí)刻公用數(shù)據(jù)總線上的數(shù)據(jù)決定這個(gè)數(shù)碼管顯示的內(nèi)容。在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人眼的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。

設(shè)CLK為系統(tǒng)時(shí)鐘脈沖(1KHz左右,頻率太低會(huì)閃爍,頻率太高會(huì)暗)、A、B、C為顯示數(shù)據(jù)、COM為數(shù)碼管的選通信號(hào)、SEG為數(shù)碼管的顯示驅(qū)動(dòng)信號(hào),實(shí)體名為ddisp。結(jié)構(gòu)體中需要1個(gè)周期性變化的信號(hào)(00~10),可以用計(jì)數(shù)器實(shí)現(xiàn),設(shè)為cnt,用CASE語句描述選通過程和顯示譯碼。參考程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYddispISPORT(CLK:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(3DOWNTO0);B:INSTD_LOGIC_VECTOR(3DOWNTO0);C:INSTD_LOGIC_VECTOR(3DOWNTO0);--A、B、C為顯示數(shù)據(jù)COM:OUTSTD_LOGIC_VECTOR(2DOWNTO0);--數(shù)碼管的選通信號(hào)SEG:OUTSTD_LOGIC_VECTOR(6DOWNTO0));--數(shù)碼管的顯示驅(qū)動(dòng)信號(hào)ENDENTITYddisp;3.結(jié)構(gòu)體的確定

結(jié)構(gòu)體中需要1個(gè)周期性變化的信號(hào)(從00~11),可以用計(jì)數(shù)器實(shí)現(xiàn),設(shè)為CNT;選通信號(hào)設(shè)為COM,用CASE語句描述選通過程;再有1個(gè)數(shù)碼管共陰接法的靜態(tài)顯示器即可。ARCHITECTUREARTOFDDISPISSIGNALCNT:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALBCD:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEN--周期性變化的信號(hào)CNTIFCNT="11"THENCNT<="00";ELSECNT<=CNT+'1';ENDIF;ENDIF;ENDPROCESS;PROCESS(CNT)BEGINCASECNTISWHEN"00"=>BCD<=A;COM<="1110";--COM選通信號(hào)低電平有效WHEN"01"=>BCD<=B;COM<="1101";WHEN"10"=>BCD<=C;COM<="1011";WHEN"11"=>BCD<=D;COM<="0111";WHENOTHERS=>BCD<="0000";COM<="1111";ENDCASE;CASEBCDIS--譯碼器WHEN"0000"=>SEG<="1111110";--0WHEN"0001"=>SEG<="0110000";--1WHEN"0010"=>SEG<="1101101";--2WHEN"0011"=>SEG<="1111001";--3WHEN"0100"=>SEG<="0110011";--4WHEN"0101"=>SEG<="1011011";--5WHEN"0110"=>SEG<="1011111";--6WHEN"0111"=>SEG<="1110000";--7WHEN"1000"=>SEG<="1111111";--8WHEN"1001"=>SEG<="1111011";--9WHENOTHERS=>SEG<="0000000";ENDCASE;ENDPROCESS;ENDART;波形仿真4.3.2掃描鍵盤掃描鍵盤也稱為矩陣式鍵盤,將按鍵連接成矩陣,每個(gè)按鍵就是一個(gè)位于水平掃描線和垂直譯碼線交點(diǎn)上的開關(guān),再通過一個(gè)鍵盤輸入譯碼電路,將鍵盤掃描線和垂直輸出譯碼線信號(hào)的不同組合編碼轉(zhuǎn)化成一個(gè)特定的信號(hào)值或編碼。掃描鍵盤的優(yōu)點(diǎn)是當(dāng)需要的按鍵數(shù)量較多時(shí),可以節(jié)省I/O口線,只需要M條行線和N條列線就可以組成M×N個(gè)按鍵的掃描鍵盤;缺點(diǎn)是編程相對(duì)復(fù)雜。1.設(shè)計(jì)題目設(shè)計(jì)一個(gè)4×3掃描鍵盤,按鍵為彈起式,已經(jīng)過“去抖動(dòng)”處理。4×3掃描鍵盤電路

掃描信號(hào)通過行線KY3~KY0進(jìn)入鍵盤,按照1110→1101→1011→0111→1110的順序周期性變化,每次掃描一行(低電平有效,相當(dāng)于該行接地)。假設(shè)現(xiàn)在的掃描信號(hào)為1011,代表正在掃描4、5、6這行的按鍵,如果這行當(dāng)中沒有按鍵被按下的話,則列線KX2~KX0的輸出為111(高電平);如果有按鍵被按下,該鍵位輸出0(低電平),其余鍵位輸出1(高電平)。例如當(dāng)掃描信號(hào)為1011(KY2=0)時(shí),若列線輸出011(KX2=0),則鍵4被按下、若輸出110則鍵6被按下;當(dāng)掃描信號(hào)為1101(KY1=0)時(shí),列線輸出101(KX2=0),則鍵8被按下。4×3掃描鍵盤應(yīng)該有1個(gè)時(shí)鐘脈沖輸入端、1個(gè)3位的按鍵列信號(hào)輸入端(接KX0~KX2);1個(gè)4位的掃描信號(hào)輸出端(接KY0~KY3)、1個(gè)3位的按鍵編碼輸出端。設(shè)時(shí)鐘脈沖輸入端為CLK、按鍵列信號(hào)輸入端KEYIN、掃描信號(hào)輸出端為SCAN、數(shù)字按鍵輸出端為DATAOUT、功能按鍵輸出端FUNOUT。實(shí)體名為SCANJP。參考程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYscanjpISPORT(CLK:INSTD_LOGIC;KEYIN:INSTD_LOGIC_VECTOR(2DOWNTO0);--按鍵列信號(hào)輸入端SCAN:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--掃描信號(hào)輸出端DATAOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--數(shù)字按鍵輸出端FUNOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0));--功能按鍵輸出端ENDENTITYscanjp;ARCHITECTUREARTOFscanjpISSIGNALcnt:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALD,F:STD_LOGIC_VECTOR(3DOWNTO0);--鍵值寄存器SIGNALZ:STD_LOGIC_VECTOR(4DOWNTO0);--鍵盤信息寄存器BEGINPROCESS(CLK)--產(chǎn)生掃描信號(hào)cntBEGINIFCLK'EVENTANDCLK='1'THENIFcnt="11"THENcnt<="00";ELSEcnt<=cnt+'1';ENDIF;ENDIF;ENDPROCESS;SCAN<="1110"WHENcnt="00"ELSE--條件信號(hào)賦值語句"1101"WHENcnt="01"ELSE"1011"WHENcnt="10"ELSE"0111"WHENcnt="11"ELSE"1111";Z<=cnt&KEYIN;--連接掃描信號(hào)和列信號(hào)PROCESS(CLK,cnt,KEYIN)BEGINIFCLK'EVENTANDCLK='1'THENCASEZIS--按鍵編碼WHEN"00101"=>D<="0000";--0WHEN"11011"=>D<="0001";--1WHEN"11101"=>D<="0010";--2WHEN"11110"=>D<="0011";--3WHEN"10011"=>D<="0100";--4WHEN"10101"=>D<="0101";--5WHEN"10110"=>D<="0110";--6WHEN"01011"=>D<="0111";--7WHE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論