常用數(shù)字電路的設(shè)計(jì)_第1頁(yè)
常用數(shù)字電路的設(shè)計(jì)_第2頁(yè)
常用數(shù)字電路的設(shè)計(jì)_第3頁(yè)
常用數(shù)字電路的設(shè)計(jì)_第4頁(yè)
常用數(shù)字電路的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩84頁(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)介

1、l5.1 組合邏輯電路設(shè)計(jì)組合邏輯電路設(shè)計(jì)l5.2 時(shí)序邏輯電路設(shè)計(jì)時(shí)序邏輯電路設(shè)計(jì)l5.3 存儲(chǔ)器的設(shè)計(jì)存儲(chǔ)器的設(shè)計(jì)l5.4 常用接口電路設(shè)計(jì)常用接口電路設(shè)計(jì) l任一時(shí)刻的輸出僅僅取決于當(dāng)時(shí)的輸入,與任一時(shí)刻的輸出僅僅取決于當(dāng)時(shí)的輸入,與電路原來(lái)的狀態(tài)無(wú)關(guān),這樣的數(shù)字電路叫做電路原來(lái)的狀態(tài)無(wú)關(guān),這樣的數(shù)字電路叫做組合邏輯電路。組合邏輯電路。l用用VHDL語(yǔ)言描述組合邏輯電路通常使用并語(yǔ)言描述組合邏輯電路通常使用并行語(yǔ)句或者進(jìn)程。常見(jiàn)的組合邏輯電路有運(yùn)行語(yǔ)句或者進(jìn)程。常見(jiàn)的組合邏輯電路有運(yùn)算電路、編碼器、譯碼器和數(shù)據(jù)選擇器等。算電路、編碼器、譯碼器和數(shù)據(jù)選擇器等。 l1加法器的設(shè)計(jì)加法器的設(shè)計(jì)

2、加法器有半加器和全加器兩種,利用兩個(gè)半加器可以構(gòu)加法器有半加器和全加器兩種,利用兩個(gè)半加器可以構(gòu)成一個(gè)全加器。成一個(gè)全加器。 半加器和全加器有什么區(qū)別?半加器和全加器有什么區(qū)別? 半加器只是加數(shù)與被加數(shù)相加,而全加器是加數(shù)、半加器只是加數(shù)與被加數(shù)相加,而全加器是加數(shù)、被加數(shù)與進(jìn)位值相加。所以半加器不考慮進(jìn)位,而全加被加數(shù)與進(jìn)位值相加。所以半加器不考慮進(jìn)位,而全加器要考慮進(jìn)位。器要考慮進(jìn)位。 l【例【例5-1】LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY h_adder ISPOR

3、T(a, b : INSTD_LOGIC; s, c : OUT STD_LOGIC);END h_adder;ARCHITECTURE rtl OF h_adder ISBEGINc=a AND b;s=a XOR b;END rtl; l1位全加器可以由兩個(gè)半加器和一個(gè)或門(mén)連接而成。位全加器可以由兩個(gè)半加器和一個(gè)或門(mén)連接而成。 l【例【例5-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY f_adder ISPORT(a, b,ci : INSTD_LOGIC; s, co: OUTSTD_LOGIC);END f_adder;ARCHI

4、TECTURE arc OF f_adder ISCOMPONENT h_adder -調(diào)用半加器聲明語(yǔ)句調(diào)用半加器聲明語(yǔ)句PORT(a, b: INSTD_LOGIC; s, c : OUTSTD_LOGIC);END COMPONENT;SIGNAL s1,c1,c2:STD_LOGIC; -定義三個(gè)信號(hào)作為內(nèi)部的連接線(xiàn)定義三個(gè)信號(hào)作為內(nèi)部的連接線(xiàn)BEGINu1:h_adder PORT MAP(a,b,s1,c1); -例化語(yǔ)句例化語(yǔ)句u2:h_adder PORT MAP(s1,ci,s,c2);co=c1 OR c2;END arc; l2減法器的設(shè)計(jì)減法器的設(shè)計(jì) 1位全減器由兩個(gè)半

5、減器和一個(gè)或門(mén)連接而成。位全減器由兩個(gè)半減器和一個(gè)或門(mén)連接而成。 【例【例5-3】半減器的】半減器的VHDL描述描述 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY h_suber ISPORT(a, b: IN STD_LOGIC;diff, sub: OUT STD_LOGIC);END ENTITY h_suber;ARCHITECTURE rtl OF h_suber ISBEGINsub=NOT a AND b;diff=a XOR b;END ARCHITECTURE rtl; l根據(jù)圖根據(jù)圖5-3利用元件例化語(yǔ)句來(lái)實(shí)現(xiàn)利用元件例化語(yǔ)

6、句來(lái)實(shí)現(xiàn)1位全減位全減器的頂層設(shè)計(jì)描述。器的頂層設(shè)計(jì)描述。l【例【例5-4】1位全減器位全減器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY f_suber ISPORT(a, b,subin : INSTD_LOGIC; d, subout: OUTSTD_LOGIC);END f_suber;ARCHITECTURE arc OF f_suber ISCOMPONENT h_suberPORT(a, b: INSTD_LOGIC; diff, sub : OUTSTD_LOGIC);END COMPONENT;SIGNAL s1,c1,c2:

7、STD_LOGIC;BEGINu1:h_suber PORT MAP(a,b,s1,c1);u2:h_suber PORT MAP(s1,subin,d,c2);subout Y Y Y Y Y Y Y Y Y=000;END CASE;ELSE Y=000;END IF;END PROCESS; l74/54系列系列148/348是優(yōu)先編碼器,低電平有效,是優(yōu)先編碼器,低電平有效,EIN為使能端。圖是為使能端。圖是74148優(yōu)先編碼器的引腳優(yōu)先編碼器的引腳圖。圖。 l【例【例5-6】8-3優(yōu)先編碼器優(yōu)先編碼器LIBRARY ieee;USE ieee.std_logic_1164.ALL;E

8、NTITY priencoder ISPORT(input : IN STD_LOGIC_VECTOR(7 DOWNTO 0); A : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END priencoder;ARCHITECTURE rtl OF priencoder ISBEGINPROCESS (input)BEGINIF (input(7)= 0) THEN A= 000;ELSIF (input(6)= 0) THEN A= 001;ELSIF (input(5)= 0 ) THEN A= 010;ELSIF (input(4)= 0) THEN A= 011

9、;ELSIF (input(3)= 0 ) THEN A= 100;ELSIF (input(2)= 0) THEN A= 101;ELSIF (input(1)= 0 ) THEN A= 110;ELSE A= 111 ;END IF;END PROCESS;END rtl; l3-8譯碼電路的功能與編碼器的功能相反。譯碼電路的功能與編碼器的功能相反。3個(gè)輸入變量為個(gè)輸入變量為d0,d1,d2,輸出變量有,輸出變量有8個(gè),個(gè),即即y0y7,對(duì)輸入變量,對(duì)輸入變量d0,d1,d2譯碼,就譯碼,就能確定輸出端能確定輸出端y0y7的輸出變?yōu)橛行У妮敵鲎優(yōu)橛行?低電平低電平),從而達(dá)到譯碼目的。從而

10、達(dá)到譯碼目的。 例例5-75-7:3-83-8譯碼器譯碼器LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY decode3_8 IS PORT (a,b,c : IN STD_LOGIC; g1,g2a,g2b : IN STD_LOGIC; y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END decode3_8;ARCHITECTURE rtl OF decode3_8 ISSIGNAL ind : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINindyyyyyyyyy=XXXXXXXX;END

11、CASE;ELSEyYYYYY=X;END CASE;END PROCESS;END arch;l任一時(shí)刻的輸出不僅取決于當(dāng)時(shí)的輸入,而且還取任一時(shí)刻的輸出不僅取決于當(dāng)時(shí)的輸入,而且還取決于電路原來(lái)的狀態(tài),這樣的數(shù)字電路叫做時(shí)序邏決于電路原來(lái)的狀態(tài),這樣的數(shù)字電路叫做時(shí)序邏輯電路。時(shí)序邏輯電路的基礎(chǔ)電路包括觸發(fā)器、鎖輯電路。時(shí)序邏輯電路的基礎(chǔ)電路包括觸發(fā)器、鎖存器、寄存器和計(jì)數(shù)器等。存器、寄存器和計(jì)數(shù)器等。l由數(shù)字電路知道,任何時(shí)序電路都以時(shí)鐘為驅(qū)動(dòng)信由數(shù)字電路知道,任何時(shí)序電路都以時(shí)鐘為驅(qū)動(dòng)信號(hào),時(shí)序電路只是在時(shí)鐘信號(hào)的邊沿到來(lái)時(shí),其狀號(hào),時(shí)序電路只是在時(shí)鐘信號(hào)的邊沿到來(lái)時(shí),其狀態(tài)才發(fā)生改變

12、。因此,時(shí)鐘信號(hào)是時(shí)序電路程序的態(tài)才發(fā)生改變。因此,時(shí)鐘信號(hào)是時(shí)序電路程序的執(zhí)行條件,時(shí)鐘信號(hào)是時(shí)序電路的同步信號(hào)。執(zhí)行條件,時(shí)鐘信號(hào)是時(shí)序電路的同步信號(hào)。 l時(shí)鐘信號(hào)上升沿到來(lái)的條件可寫(xiě)為:時(shí)鐘信號(hào)上升沿到來(lái)的條件可寫(xiě)為:IF clk =1 AND clk LAST_VAULE = 0 AND clk EVENT; l時(shí)鐘信號(hào)下降沿的屬性描述為:時(shí)鐘信號(hào)下降沿的屬性描述為:IF clk = 0 AND clk LAST_VALUE = 1 AND clk EVENT; l比較上升沿,下降沿的描述方法,可以歸納出時(shí)鐘邊沿屬性描比較上升沿,下降沿的描述方法,可以歸納出時(shí)鐘邊沿屬性描述的一般行式為

13、:述的一般行式為:IF clock_signal = current_value AND Clock_signal LAST_VALUE AND Clock_signal EVENTl時(shí)序電路中進(jìn)程敏感信號(hào)是時(shí)鐘信號(hào)時(shí)序電路中進(jìn)程敏感信號(hào)是時(shí)鐘信號(hào)l在時(shí)序電路描述中,時(shí)鐘信號(hào)作為敏感信號(hào),顯式在時(shí)序電路描述中,時(shí)鐘信號(hào)作為敏感信號(hào),顯式的出現(xiàn)在的出現(xiàn)在PROCESS語(yǔ)句后的括號(hào)中。語(yǔ)句后的括號(hào)中。 PRCESS(clock_signal)l時(shí)序信號(hào)邊沿的到來(lái)將作為時(shí)序電路語(yǔ)句執(zhí)行的條時(shí)序信號(hào)邊沿的到來(lái)將作為時(shí)序電路語(yǔ)句執(zhí)行的條件來(lái)啟動(dòng)進(jìn)程的執(zhí)行。這種以時(shí)鐘為敏感信號(hào)的進(jìn)件來(lái)啟動(dòng)進(jìn)程的執(zhí)行。這種

14、以時(shí)鐘為敏感信號(hào)的進(jìn)程描述方法為:程描述方法為:PROCESS (clock_signal) BEGIN IF(clock_edge_condition)THEN Signal_out = signal_in; 其他時(shí)序語(yǔ)句其他時(shí)序語(yǔ)句 END IF; END PROCESS;lclock信號(hào)作為進(jìn)程的敏感信號(hào),每當(dāng)信號(hào)作為進(jìn)程的敏感信號(hào),每當(dāng)clock發(fā)生變發(fā)生變化,該進(jìn)程就被觸發(fā)、啟動(dòng),而時(shí)鐘邊沿的條件得化,該進(jìn)程就被觸發(fā)、啟動(dòng),而時(shí)鐘邊沿的條件得到滿(mǎn)足時(shí),才真正執(zhí)行時(shí)序電路所對(duì)應(yīng)的語(yǔ)句。到滿(mǎn)足時(shí),才真正執(zhí)行時(shí)序電路所對(duì)應(yīng)的語(yǔ)句。l在時(shí)序電路的進(jìn)程描述中,不用敏感信號(hào)方式,而用在時(shí)序電路的

15、進(jìn)程描述中,不用敏感信號(hào)方式,而用WAIT ON語(yǔ)句來(lái)控制程序的執(zhí)行。在這種設(shè)計(jì)方式中,進(jìn)程通常語(yǔ)句來(lái)控制程序的執(zhí)行。在這種設(shè)計(jì)方式中,進(jìn)程通常停留在停留在WAIT ON語(yǔ)句上,這個(gè)點(diǎn)也稱(chēng)為進(jìn)程的同步點(diǎn),只語(yǔ)句上,這個(gè)點(diǎn)也稱(chēng)為進(jìn)程的同步點(diǎn),只有在時(shí)鐘信號(hào)到來(lái)且滿(mǎn)足邊沿條件時(shí),其余的語(yǔ)句才能執(zhí)有在時(shí)鐘信號(hào)到來(lái)且滿(mǎn)足邊沿條件時(shí),其余的語(yǔ)句才能執(zhí)行。行。lWAIT ON語(yǔ)句等待時(shí)鐘信號(hào)的設(shè)計(jì)方法為:語(yǔ)句等待時(shí)鐘信號(hào)的設(shè)計(jì)方法為:PROCESSBEGINWAIT ON (clock_signal) UNTIL(clock_edge_condition); Signal_out = signal_in;

16、 - 其他時(shí)序語(yǔ)句其他時(shí)序語(yǔ)句 END PROCESS;l時(shí)序電路的初始狀態(tài)應(yīng)由復(fù)位信號(hào)來(lái)設(shè)置。根據(jù)復(fù)位信號(hào)對(duì)時(shí)序電路復(fù)位的操作不同,使其可以分為同步復(fù)位和異步復(fù)位。l在設(shè)計(jì)時(shí)序電路同步復(fù)位功能時(shí),在設(shè)計(jì)時(shí)序電路同步復(fù)位功能時(shí),VHDL程序要把同步復(fù)位放在以時(shí)鐘為程序要把同步復(fù)位放在以時(shí)鐘為敏感信號(hào)的進(jìn)程中定義,且用敏感信號(hào)的進(jìn)程中定義,且用IF語(yǔ)句來(lái)描述必要的復(fù)位條件。語(yǔ)句來(lái)描述必要的復(fù)位條件。(A) PROCESS (clock_signal)BEGIN IF (clock_edge_condition) THEN IF (reset_condition) THEN Signal_out

17、= reset_value; ELSE Signal_out = signal_in; - 其他時(shí)序語(yǔ)句其他時(shí)序語(yǔ)句 END IF; END IF;END PROCESS; (B) PROCESS BEGIN WAIT ON (clock_signal) UNTIL (clock_edge_condition) IF (reset_condition) THEN Signal_out = reset_value; ELSE Signal_out = signal_in; - 其他時(shí)序語(yǔ)句其他時(shí)序語(yǔ)句 END IF;END PROCESS; l所謂異步復(fù)位,就是當(dāng)復(fù)位信號(hào)有效時(shí),所謂異步復(fù)位,就

18、是當(dāng)復(fù)位信號(hào)有效時(shí),時(shí)序電路立即復(fù)位,與時(shí)鐘信號(hào)無(wú)關(guān)。時(shí)序電路立即復(fù)位,與時(shí)鐘信號(hào)無(wú)關(guān)。l異步復(fù)位方法有三個(gè)要點(diǎn):異步復(fù)位方法有三個(gè)要點(diǎn):1.首先,在進(jìn)程敏感信號(hào)表中應(yīng)有首先,在進(jìn)程敏感信號(hào)表中應(yīng)有clk,Reset同時(shí)存在;同時(shí)存在;2.其次,用其次,用IF語(yǔ)句描述復(fù)位條件;語(yǔ)句描述復(fù)位條件;3.3.最后,最后,ELSIF程序段描述時(shí)鐘信號(hào)邊沿的程序段描述時(shí)鐘信號(hào)邊沿的條件,并加條件,并加clkEVENT屬性。屬性。 PROCESS(reset_signal,clock_signal)BEGINIF(reset_condition)THEN -復(fù)位條件成立復(fù)位條件成立Signal_out =

19、reset_value;-復(fù)位賦予輸出信號(hào)復(fù)位賦予輸出信號(hào) ELSIF(clock_event AND clock_edge_condition)THEN Signal_out =signal_in; -復(fù)位條件不成立復(fù)位條件不成立 其他時(shí)序語(yǔ)句;其他時(shí)序語(yǔ)句; -執(zhí)行正常時(shí)序電路功能執(zhí)行正常時(shí)序電路功能END IF;END PROCESS; l觸發(fā)器是現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)中最基本的底層觸發(fā)器是現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)中最基本的底層時(shí)序單元。觸發(fā)器的種類(lèi)繁多,常見(jiàn)的有時(shí)序單元。觸發(fā)器的種類(lèi)繁多,常見(jiàn)的有D觸觸發(fā)器、發(fā)器、T觸發(fā)器、觸發(fā)器、RS觸發(fā)器、觸發(fā)器、JK觸發(fā)器等。觸發(fā)器等。 l【例【例5-9】D觸

20、發(fā)器的設(shè)計(jì)觸發(fā)器的設(shè)計(jì)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DCFQ IS PORT (D,CLK : IN STD_LOGIC; Q : OUT STD_LOGIC);END DCFQ;ARCHITECTURE ART OF DCFQ IS BEGIN PROCESS(CLK) BEGIN IF(CLKENENT AND CLK=1)THEN -時(shí)鐘上升沿觸發(fā)時(shí)鐘上升沿觸發(fā) Q=D; END IF; END PROCESS;END ART; l【例【例5-10】T觸發(fā)器的設(shè)計(jì)觸發(fā)器的設(shè)計(jì)LIBRARY IEEE;USE IEEE.ST

21、D_LOGIC_1164.ALL;ENTITY TCFQ IS PORT(T,CLK : IN STD_LOGIC; Q : BUFFER STD_LOGIC);END TCFQ;ARCHITECTURE ART OF TCFQ IS BEGIN PROCESS(CLK) BEGIN IF(CLKENENT AND CLK=1 ) THEN IF T=1 THEN Q=NOT(Q); ELSE Q=Q; END IF; END IF; END PROCESS;END ART; l【例【例5-11】RS觸發(fā)器的設(shè)計(jì)觸發(fā)器的設(shè)計(jì)LIBRARY IEEE;USE IEEE.STD_LOGIC_116

22、4.ALL;ENTITY RSCFQ IS PORT(R,S,CLK : IN STD_LOGIC; Q,QB : BUFFER STD_LOGIC);END RSCFQ;ARCHITECTURE ART OF RSCFQ ISSIGNAL Q_S, QB_S : STD_LOGIC;BEGIN PROCESS(CLK, R, S) BEGIN IF(CLKEVENT AND CLK=1)THEN IF(S=0 AND R=1)THEN Q_S=0; QB_S=1; ELSIF(S=1 AND R=0)THEN Q_S=1; QB_S=0; ELSIF(S=0 AND R=0)THEN Q_S

23、=Q_S; QB_S=QB_S; END IF; END IF; Q=Q_S; QB=QB_S; END PROCESS;END ART; l【例【例5-12】JK觸發(fā)器的設(shè)計(jì)觸發(fā)器的設(shè)計(jì)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY JKCFQ IS PORT(J, K, CLK : IN STD_LOGIC; Q,QB : BUFFER STD_LOGIC);END JKCFQ;ARCHITECTURE ART OF JKCFQ IS SIGNAL Q_S,QB_S:STD_LOGIC;BEGIN PROCESS(CLK,J,K) BEGIN

24、 IF (CLKEVENT AND CLK=1)THEN IF(J=0 AND K=1) THEN Q_S=0; QB_S=1; ELSIF (J=1 AND K=0) THEN Q_S=1; QB_S=0; ELSIF (J=1 AND K=1) THEN Q_S=NOT Q_S; QB_S=NOT QB_S; END IF; END IF ; Q=Q_S; QB=QB_S; END PROCESS;END ART; 鎖存器用于鎖存一組二值代碼,廣泛用于各類(lèi)數(shù)字系統(tǒng)。鎖存器用于鎖存一組二值代碼,廣泛用于各類(lèi)數(shù)字系統(tǒng)。一個(gè)觸發(fā)器能儲(chǔ)存一個(gè)觸發(fā)器能儲(chǔ)存1位二值代碼,用位二值代碼,用N個(gè)觸發(fā)器組成

25、的鎖存器能個(gè)觸發(fā)器組成的鎖存器能儲(chǔ)存一組儲(chǔ)存一組N位的二值代碼。位的二值代碼。 D3D3CPCPQ3Q3D2D2Q2Q2D1D1Q1Q1結(jié)論結(jié)論: 一個(gè)脈沖存儲(chǔ)一組數(shù)據(jù)一個(gè)脈沖存儲(chǔ)一組數(shù)據(jù),即一拍存儲(chǔ)一組數(shù)據(jù)即一拍存儲(chǔ)一組數(shù)據(jù)110110l【例【例5-13】一個(gè)】一個(gè)8位鎖存器的位鎖存器的VHDL描述描述 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG IS PORT(D:IN STD_LOGIC_VECTOR(0 TO 7); CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(0 TO 7);END RE

26、G;ARCHITECTURE ART OF REG IS BEGIN PROCESS(CLK) BEGIN IF(CLKEVENT AND CLK=1)THEN Q=D; END IF; END PROCESS;END ART; l移位寄存器除了具有存儲(chǔ)代碼的功能以外,還具有移位功能。移位寄存器除了具有存儲(chǔ)代碼的功能以外,還具有移位功能。所謂移位功能,是指寄存器里存儲(chǔ)的代碼能在移位脈沖的作所謂移位功能,是指寄存器里存儲(chǔ)的代碼能在移位脈沖的作用下依次左移或右移。因此,移位寄存器不但可以用來(lái)寄存用下依次左移或右移。因此,移位寄存器不但可以用來(lái)寄存代碼,還可用來(lái)實(shí)現(xiàn)數(shù)據(jù)的串并轉(zhuǎn)換、數(shù)值的運(yùn)算以及數(shù)據(jù)

27、代碼,還可用來(lái)實(shí)現(xiàn)數(shù)據(jù)的串并轉(zhuǎn)換、數(shù)值的運(yùn)算以及數(shù)據(jù)處理等。處理等。 l串入串入/串出移位寄存器有數(shù)據(jù)輸入端和同步時(shí)鐘輸入端,一個(gè)串出移位寄存器有數(shù)據(jù)輸入端和同步時(shí)鐘輸入端,一個(gè)數(shù)據(jù)輸出端。在同步時(shí)鐘的作用下,前級(jí)的數(shù)據(jù)向后級(jí)移動(dòng)。數(shù)據(jù)輸出端。在同步時(shí)鐘的作用下,前級(jí)的數(shù)據(jù)向后級(jí)移動(dòng)。l語(yǔ)句語(yǔ)句GENERATE用來(lái)產(chǎn)生多個(gè)相同的結(jié)構(gòu)。利用用來(lái)產(chǎn)生多個(gè)相同的結(jié)構(gòu)。利用GENERATE和和D觸發(fā)器元件觸發(fā)器元件dff,可以很方便地設(shè)計(jì)出,可以很方便地設(shè)計(jì)出8位串位串入入/串出移位寄存器。串出移位寄存器。 l【例【例5-14】一個(gè)】一個(gè)8位的移位寄存器位的移位寄存器 LIBRARY IEEE;USE

28、 IEEE.STD_LOGIC_1164.ALL;ENTITY SHIFTER ISPORT(DATA:IN STD_LOGIC_VECTOR(7 DOWNTO 0);SHIFT_LEFT:IN STD_LOGIC;SHIFT_RIGHT:IN STD_LOGIC;RESET:IN STD_LOGIC;MODE:IN STD_LOGIC_VECTOR(1 DOWNTO 0);QOUT:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END SHIFTER;ARCHITECTURE ART OF SHIFTER ISBEGINPROCESSBEGINWAIT UNTIL(

29、RISING_EDGE(CLK);IF (RESET=1)THEN QOUTQOUTQOUTQOUTNULL;END CASE;END IF;END PROCESS;END ART; l【例【例5-15】一個(gè)】一個(gè)4位串行輸入并行輸出的右移位串行輸入并行輸出的右移移位寄存器移位寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHIFTER1 ISPORT( DIN : IN STD_LOGIC; RESET, CLK : IN STD_LOGIC; QOUT : BUFFER STD_LOGIC_VECTOR(0 TO 3); END SH

30、IFTER1;ARCHITECTURE BEHAVE OF SHIFTER1 ISBEGINPROCESS (CLK) VARIABLE Q : STD_LOGIC_VECTOR(0 TO 3); BEGIN IF(RESET=1) THEN Q:=(OTHERS=0); ELSE IF (CLKEVENT AND CLK = 1) THEN Q(3):= Q(2); Q(2):= Q(1); Q(1):= Q(0); Q(0):= DIN; END IF; END IF; QOUT0) ; ELSIF CLKEVENT AND CLK=1 THEN IF EN = 1 THEN IF CQI

31、 0); END IF; END IF; END IF; IF CQI = 9 THEN COUT = 1; ELSE COUT = 0; END IF; CQ = CQI; END PROCESS; END behav; l【例【例5-17】模為】模為60,具有異步復(fù)位、同步置數(shù)功能的,具有異步復(fù)位、同步置數(shù)功能的8421BCD碼計(jì)數(shù)器。碼計(jì)數(shù)器。 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNTM60 IS PORT(CI:IN STD_LOGIC; NRESET:IN S

32、TD_LOGIC; LOAD:IN STD_LOGIC; D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC; CO:OUT STD_LOGIC; QH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); QL:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);END CNTM60;ARCHITECTURE ART OF CNTM60 ISBEGIN CO=1 WHEN(QH=0101AND QL=1001AND CI=1) ELSE 0; -進(jìn)位輸出的產(chǎn)生進(jìn)位輸出的產(chǎn)生PROCESS(CLK,NR

33、ESET)BEGIN IF(NRESET=0)THEN -異步復(fù)位異步復(fù)位 QH=0000; QL=0000;ELSIF(CLKEVENT AND CLK=1)THEN -同步置數(shù)同步置數(shù) IF(LOAD=1)THENQH=D(7 DOWNTO 4)Q L=D(3 DOWNTO 0);ELSIF(CI=1)THEN -模模60的實(shí)現(xiàn)的實(shí)現(xiàn) IF(QL=9)THEN QL=0000; IF(QH=5)THEN QH=0000; ELSE -計(jì)數(shù)功能的實(shí)現(xiàn)計(jì)數(shù)功能的實(shí)現(xiàn) QH=QH+1; END IF ELSE QL=QL+1; END IF; END IF; -END IF LOAD END P

34、ROCESS;END ART;l在數(shù)字系統(tǒng)設(shè)計(jì)中,分頻器是一種基本電路。在數(shù)字系統(tǒng)設(shè)計(jì)中,分頻器是一種基本電路。分頻器的實(shí)現(xiàn)非常簡(jiǎn)單,可采用標(biāo)準(zhǔn)的計(jì)數(shù)分頻器的實(shí)現(xiàn)非常簡(jiǎn)單,可采用標(biāo)準(zhǔn)的計(jì)數(shù)器。分頻器通常用來(lái)對(duì)某個(gè)給定頻率進(jìn)行分器。分頻器通常用來(lái)對(duì)某個(gè)給定頻率進(jìn)行分頻,得到所需的頻率。頻,得到所需的頻率。 l計(jì)數(shù)器就是對(duì)時(shí)鐘脈沖計(jì)數(shù),同時(shí)計(jì)數(shù)器還計(jì)數(shù)器就是對(duì)時(shí)鐘脈沖計(jì)數(shù),同時(shí)計(jì)數(shù)器還是一個(gè)分頻器。是一個(gè)分頻器。 l【例【例5-18】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COU

35、NT ISPORT( CLK: IN STD_LOGIC; Q: OUT STD_LOGIC;END COUNT;ARCHITECTURE A OF COUNT ISSIGNAL TMP: STD_LOGIC_VECTOR(21 DOWNTO 0);BEGINPROCESS(CLK) BEGINIF CLKEVENT AND CLK=1 THEN TMP=TMP+1;END IF;END PROCESS;Q=TMP(21);END A; l只讀存儲(chǔ)器存儲(chǔ)單元中的信息可一次寫(xiě)入、只讀存儲(chǔ)器存儲(chǔ)單元中的信息可一次寫(xiě)入、多次讀出。且當(dāng)多次讀出。且當(dāng)ROM存儲(chǔ)器芯片掉電時(shí),存存儲(chǔ)器芯片掉電時(shí),存儲(chǔ)單元

36、中的信息不會(huì)消失,在計(jì)算機(jī)系統(tǒng)中儲(chǔ)單元中的信息不會(huì)消失,在計(jì)算機(jī)系統(tǒng)中常用常用ROM存放固定的程序和數(shù)據(jù)。存放固定的程序和數(shù)據(jù)。l下面給出一個(gè)下面給出一個(gè)ROM的行為描述。該的行為描述。該ROM有有4位地址線(xiàn)位地址線(xiàn)addr(3)addr(0),8位數(shù)據(jù)輸出線(xiàn)位數(shù)據(jù)輸出線(xiàn)Dout(7)Dout(0)及使能端及使能端oe, l【例【例5-19】Library ieee;Use ieee.std_logic_1164.all;Entity rom isPort(addr : in std_logic_vector(3 downto 0); oe : in std_logic; Dout : out

37、 std_logic_vector(15 downto 0);End rom;Architecture a of rom isBeginDout=0000000000000001 when addr=”0000” and oe=1 else 0000000000000010 when addr=”0001” and oe=1 else 0000000000000100 when addr=”0010” and oe=1 else 0000000000001000 when addr=”0011” and oe=1 else 0000000000010000 when addr=”0100” a

38、nd oe=1 else 0000000000100000 when addr=”0101” and oe=1 else 0000000001000000 when addr=”0110” and oe=1 else 0000000010000000 when addr=”0111” and oe=1 else 0000000100000000 when addr=”1000” and oe=1 else 0000001000000000 when addr=”1001” and oe=1 else 0000010000000000 when addr=”1010” and oe=1 else

39、 0000100000000000 when addr=”1011” and oe=1 else 0001000000000000 when addr=”1100” and oe=1 else 0010000000000000 when addr=”1101” and oe=1 else 0100000000000000 when addr=”1110” and oe=1 else 1000000010000000;End a; l利用利用LPM宏功能模塊可以很方便的定制宏功能模塊可以很方便的定制ROM。1建立建立mif格式文件格式文件 2定制定制LPM_ROM元件元件 lRAM作為時(shí)序器件,

40、與作為時(shí)序器件,與ROM的主要區(qū)別在于,的主要區(qū)別在于,RAM描述上有讀和寫(xiě)兩種操作,而且在讀寫(xiě)描述上有讀和寫(xiě)兩種操作,而且在讀寫(xiě)上對(duì)時(shí)間有較嚴(yán)格的要求。上對(duì)時(shí)間有較嚴(yán)格的要求。 l利用利用MegaWizard Plug-In Manager也可以定也可以定制制RAM宏功能塊。宏功能塊。 lFIFO是先進(jìn)先出存儲(chǔ)器,作為數(shù)據(jù)緩沖器,是先進(jìn)先出存儲(chǔ)器,作為數(shù)據(jù)緩沖器,通常其數(shù)據(jù)存放結(jié)構(gòu)與通常其數(shù)據(jù)存放結(jié)構(gòu)與RAM一致,只是存取一致,只是存取方式有所不同。方式有所不同。lLPM_FIFO的定制與前面介紹的流程相同。的定制與前面介紹的流程相同。 l當(dāng)設(shè)計(jì)完成之后,往往需要在當(dāng)設(shè)計(jì)完成之后,往往需要在

41、EDA實(shí)驗(yàn)系統(tǒng)實(shí)驗(yàn)系統(tǒng)上進(jìn)行硬件驗(yàn)證。對(duì)大多數(shù)的上進(jìn)行硬件驗(yàn)證。對(duì)大多數(shù)的EDA實(shí)驗(yàn)系統(tǒng),實(shí)驗(yàn)系統(tǒng),都提供了按鍵、撥碼開(kāi)關(guān)、都提供了按鍵、撥碼開(kāi)關(guān)、LED電路、蜂鳴電路、蜂鳴器電路、七段數(shù)碼管顯示電路以及液晶顯示器電路、七段數(shù)碼管顯示電路以及液晶顯示電路等等。電路等等。l利用這些接口電路,可以使設(shè)計(jì)結(jié)果看得見(jiàn)利用這些接口電路,可以使設(shè)計(jì)結(jié)果看得見(jiàn)或聽(tīng)得到,從而用實(shí)驗(yàn)驗(yàn)證工程的正確性?;蚵?tīng)得到,從而用實(shí)驗(yàn)驗(yàn)證工程的正確性。 l利用二級(jí)管的正向?qū)ㄌ匦钥梢渣c(diǎn)亮發(fā)光二利用二級(jí)管的正向?qū)ㄌ匦钥梢渣c(diǎn)亮發(fā)光二級(jí)管,根據(jù)不同的連接方式,可以是低電平級(jí)管,根據(jù)不同的連接方式,可以是低電平點(diǎn)亮或高電平點(diǎn)亮。點(diǎn)

42、亮或高電平點(diǎn)亮。 l例【例【5-22】是流水燈顯示電路的】是流水燈顯示電路的VHDL描述描述ENTITY ledwater IS PORT ( clk : IN std_logic; rst : IN std_logic; dataout : OUT std_logic_vector(15 DOWNTO 0); END ledwater;ARCHITECTURE arch OF ledwater IS SIGNAL cnt : std_logic_vector(15 DOWNTO 0); SIGNAL dataout_tmp : std_logic_vector(15 DOWNTO 0); B

43、EGIN dataout = dataout_tmp; PROCESS(clk,rst) BEGIN IF (NOT rst = 1) THEN cnt = 0000000000000000; dataout_tmp = 0000000110000000; -為為1的的bit位代表要點(diǎn)亮的位代表要點(diǎn)亮的LED的位置的位置 ELSIF(clkevent and clk=1)THEN cnt = cnt + 0000000000000001; IF (cnt = 1111111111111111) THEN dataout_tmp(6 DOWNTO 0) = dataout_tmp(7 DOWNT

44、O 1); dataout_tmp(7) = dataout_tmp(0); dataout_tmp(15 DOWNTO 9) = dataout_tmp(14 DOWNTO 8); dataout_tmp(8) data_out data_out data_out data_out data_out data_out data_out data_out data_out data_out NULL;end case;end process;end architecture;共陽(yáng)極呢?共陽(yáng)極呢?-共陽(yáng)極顯示譯碼共陽(yáng)極顯示譯碼 case data_in iswhen 0000 = data_ou

45、t data_out data_out data_out data_out data_out data_out data_out data_out data_out NULL;end case;end process;end architecture;顯示譯碼器功能顯示譯碼器功能顯顯示示譯譯碼碼器器1515141413131212111110109 9YfYfYgYgYaYaYbYbYcYcYdYdYeYeA3A3A2A2A1A1A0A0a ad dg gl數(shù)碼管的驅(qū)動(dòng)方式可以分成靜態(tài)和動(dòng)態(tài)顯示數(shù)碼管的驅(qū)動(dòng)方式可以分成靜態(tài)和動(dòng)態(tài)顯示兩種方式。靜態(tài)顯示編程方法較簡(jiǎn)單,但是兩種方式。靜態(tài)顯示編程方

46、法較簡(jiǎn)單,但是需要占用較多的需要占用較多的IO口,功耗較大??冢妮^大。l在大多數(shù)場(chǎng)合通常采用動(dòng)態(tài)掃描的方法來(lái)控在大多數(shù)場(chǎng)合通常采用動(dòng)態(tài)掃描的方法來(lái)控制制LED數(shù)碼管的顯示。數(shù)碼管的顯示。思考:如何進(jìn)行思考:如何進(jìn)行動(dòng)態(tài)掃描?動(dòng)態(tài)掃描?l動(dòng)態(tài)掃描的原理是:每個(gè)時(shí)鐘周期內(nèi)只顯示一位數(shù)動(dòng)態(tài)掃描的原理是:每個(gè)時(shí)鐘周期內(nèi)只顯示一位數(shù)據(jù),數(shù)據(jù)值由段碼來(lái)控制。對(duì)各數(shù)碼管進(jìn)行掃描,據(jù),數(shù)據(jù)值由段碼來(lái)控制。對(duì)各數(shù)碼管進(jìn)行掃描,分時(shí)輪流工作,由位碼來(lái)選擇數(shù)碼管。雖然每次只分時(shí)輪流工作,由位碼來(lái)選擇數(shù)碼管。雖然每次只有一個(gè)數(shù)碼管顯示,但由于人的視覺(jué)暫留現(xiàn)象,只有一個(gè)數(shù)碼管顯示,但由于人的視覺(jué)暫留現(xiàn)象,只要時(shí)鐘掃

47、描足夠快(要時(shí)鐘掃描足夠快(100HZ),使我們?nèi)詴?huì)感覺(jué)所),使我們?nèi)詴?huì)感覺(jué)所有的數(shù)碼管是同時(shí)顯示的。有的數(shù)碼管是同時(shí)顯示的。l例【例【5-23】 七段數(shù)碼管動(dòng)態(tài)顯示的七段數(shù)碼管動(dòng)態(tài)顯示的VHDL描述描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SEG7 IS PORT ( CLK : IN STD_LOGIC; -外部時(shí)鐘輸入外部時(shí)鐘輸入20MHZ RST : IN STD_LOGIC; DATAOUT : OUT S

48、TD_LOGIC_VECTOR(7 DOWNTO 0); -各段數(shù)據(jù)輸出(段碼)各段數(shù)據(jù)輸出(段碼) EN : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -數(shù)碼管位選輸出(位碼)數(shù)碼管位選輸出(位碼)END SEG7;ARCHITECTURE ARCH OF SEG7 ISSIGNAL CNT_SCAN : STD_LOGIC_VECTOR(15 DOWNTO 0 );SIGNAL DATA4 : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL DATAOUT_XHDL1 : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNA

49、L EN_XHDL : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN DATAOUT=DATAOUT_XHDL1; EN=EN_XHDL; P1: PROCESS(CLK,RST) BEGIN IF(RST=0)THEN CNT_SCAN=0000000000000000; ELSIF(CLKEVENT AND CLK=1)THEN CNT_SCAN EN_XHDL EN_XHDL EN_XHDL EN_XHDL EN_XHDL EN_XHDL EN_XHDL EN_XHDL EN_XHDL DATA4 DATA4 DATA4 DATA4 DATA4 DATA4 DAT

50、A4 DATA4 DATA4 DATAOUT_XHDL1 DATAOUT_XHDL1 DATAOUT_XHDL1 DATAOUT_XHDL1 DATAOUT_XHDL1 DATAOUT_XHDL1 DATAOUT_XHDL1 DATAOUT_XHDL1 DATAOUT_XHDL1 DATAOUT_XHDL1 = 11111100; -0 END CASE; END PROCESS P4;END ARCH; l聲音的頻譜范圍約在幾十到幾千赫茲,若能聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來(lái)控制利用程序來(lái)控制FPGA/CPLD某個(gè)引腳輸出一某個(gè)引腳輸出一定頻率的矩形波,接上揚(yáng)聲器或蜂鳴器就能

51、定頻率的矩形波,接上揚(yáng)聲器或蜂鳴器就能發(fā)出相應(yīng)頻率的聲音。發(fā)出相應(yīng)頻率的聲音。l因此,只要產(chǎn)生樂(lè)曲發(fā)音所需要的對(duì)應(yīng)頻率因此,只要產(chǎn)生樂(lè)曲發(fā)音所需要的對(duì)應(yīng)頻率即可。此電路的核心是一個(gè)數(shù)控分頻器,它即可。此電路的核心是一個(gè)數(shù)控分頻器,它是由終值可變的加法計(jì)數(shù)器組成。是由終值可變的加法計(jì)數(shù)器組成。 l頻率的高低決定了音調(diào)的高低,而樂(lè)曲簡(jiǎn)譜頻率的高低決定了音調(diào)的高低,而樂(lè)曲簡(jiǎn)譜的音名與頻率的對(duì)應(yīng)關(guān)系如表的音名與頻率的對(duì)應(yīng)關(guān)系如表5-7所示。所示。l下面的例子可以使蜂鳴器發(fā)出下面的例子可以使蜂鳴器發(fā)出“多來(lái)咪發(fā)梭多來(lái)咪發(fā)梭拉西多拉西多”的音符。的音符。 1975.5高音高音7987.8中音中音7493.

52、9低音低音71760高音高音6880中音中音6440低音低音61568高音高音5784中音中音5392低音低音51396.9高音高音4698.5中音中音4349.2低音低音41318.5高音高音3659.3中音中音3329.6低音低音31174.7高音高音2587.3中音中音2293.7低音低音21045.5高音高音1523.3中音中音1261.6低音低音1頻率頻率/Hz音名音名頻率頻率/Hz音名音名頻率頻率/Hz音名音名例【例【5-24】 蜂鳴器電路的蜂鳴器電路的VHDL描述描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOG

53、IC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY buzzer IS PORT ( clk : IN std_logic; rst : IN std_logic; out_bit : OUT std_logic); END buzzer;ARCHITECTURE arch OF buzzer IS SIGNAL clk_div: std_logic_vector(12 DOWNTO 0); -由基頻分頻產(chǎn)生各個(gè)音階由基頻分頻產(chǎn)生各個(gè)音階 SIGNAL cnt : std_logic_vector(21 DOWNTO 0); -各音階發(fā)聲時(shí)間

54、長(zhǎng)短計(jì)數(shù)器各音階發(fā)聲時(shí)間長(zhǎng)短計(jì)數(shù)器 SIGNAL state : std_logic_vector(2 DOWNTO 0); -各個(gè)音符的分頻系數(shù)各個(gè)音符的分頻系數(shù) CONSTANT duo : std_logic_vector(12 DOWNTO 0) :=0111011101110; -3822 CONSTANT lai : std_logic_vector(12 DOWNTO 0) := 0110101001101; -3405 CONSTANT mi : std_logic_vector(12 DOWNTO 0) := 0101111011010; -3034 CONSTANT fa

55、: std_logic_vector(12 DOWNTO 0) := 0101100110001; CONSTANT suo : std_logic_vector(12 DOWNTO 0) := 0100111110111; CONSTANT la : std_logic_vector(12 DOWNTO 0) := 0100011100001; CONSTANT xi : std_logic_vector(12 DOWNTO 0) := 0011111101000; CONSTANT duo1 : std_logic_vector(12 DOWNTO 0) := 0011101110111;

56、 SIGNAL out_bit_tmp :std_logic; BEGIN out_bit=out_bit_tmp; PROCESS(clk,rst) BEGIN IF (NOT rst = 1) THEN clk_div = 0000000000000; state = 000; cnt = 0000000000000000000000; out_bit_tmp -發(fā)發(fā)“多多” cnt = cnt + 0000000000000000000001; IF (cnt = 1111111111111111111111) THEN state = 001; END IF; IF (clk_div /= duo) THE

溫馨提示

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