常用數(shù)字電路的設(shè)計_第1頁
常用數(shù)字電路的設(shè)計_第2頁
常用數(shù)字電路的設(shè)計_第3頁
常用數(shù)字電路的設(shè)計_第4頁
常用數(shù)字電路的設(shè)計_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、加法器有半加器和全加器兩種,利用兩個半加器可以構(gòu)加法器有半加器和全加器兩種,利用兩個半加器可以構(gòu)成一個全加器。成一個全加器。 半加器和全加器有什么區(qū)別?半加器和全加器有什么區(qū)別? 半加器只是加數(shù)與被加數(shù)相加,而全加器是加數(shù)、半加器只是加數(shù)與被加數(shù)相加,而全加器是加數(shù)、被加數(shù)與進位值相加。所以半加器不考慮進位,而全加被加數(shù)與進位值相加。所以半加器不考慮進位,而全加器要考慮進位。器要考慮進位。 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位全加器可以由兩個半加器和一個或門連接而成。位全加器可以由兩個半加器和一個或門連接而成。 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)用半加器聲明語句調(diào)用半加器聲明語句PORT(a, b: INSTD_LOGIC; s, c : OUTSTD_LOGIC);END COMPONENT;SIGNAL s1,c1,c2:STD_LOGIC; -定義三個信號作為內(nèi)部的連接線定義三個信號作為內(nèi)部的連接線BEGINu1:h_adder PORT MAP(a,b,s1,c1); -例化語句例化語句u2:h_adder PORT MAP(s1,ci,s,c2);co=c1 OR c2;END arc; l2減法器的設(shè)計減法器的設(shè)計 1位全減器由兩個半

5、減器和一個或門連接而成。位全減器由兩個半減器和一個或門連接而成。 【例【例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利用元件例化語句來實現(xiàn)利用元件例化語

6、句來實現(xiàn)1位全減位全減器的頂層設(shè)計描述。器的頂層設(shè)計描述。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個輸入變量為個輸入變量為d0,d1,d2,輸出變量有,輸出變量有8個,個,即即y0y7,對輸入變量,對輸入變量d0,d1,d2譯碼,就譯碼,就能確定輸出端能確定輸出端y0y7的輸出變?yōu)橛行У妮敵鲎優(yōu)橛行?低電平低電平),從而達到譯碼目的。從而

10、達到譯碼目的。 例例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任一時刻的輸出不僅取決于當時的輸入,而且還取任一時刻的輸出不僅取決于當時的輸入,而且還取決于電路原來的狀態(tài),這樣的數(shù)字電路叫做時序邏決于電路原來的狀態(tài),這樣的數(shù)字電路叫做時序邏輯電路。時序邏輯電路的基礎(chǔ)電路包括觸發(fā)器、鎖輯電路。時序邏輯電路的基礎(chǔ)電路包括觸發(fā)器、鎖存器、寄存器和計數(shù)器等。存器、寄存器和計數(shù)器等。l由數(shù)字電路知道,任何時序電路都以時鐘為驅(qū)動信由數(shù)字電路知道,任何時序電路都以時鐘為驅(qū)動信號,時序電路只是在時鐘信號的邊沿到來時,其狀號,時序電路只是在時鐘信號的邊沿到來時,其狀態(tài)才發(fā)生改變

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

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

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

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

16、 - 其他時序語句其他時序語句 END PROCESS;l時序電路的初始狀態(tài)應(yīng)由復(fù)位信號來設(shè)置。根據(jù)復(fù)位信號對時序電路復(fù)位的操作不同,使其可以分為同步復(fù)位和異步復(fù)位。l在設(shè)計時序電路同步復(fù)位功能時,在設(shè)計時序電路同步復(fù)位功能時,VHDL程序要把同步復(fù)位放在以時鐘為程序要把同步復(fù)位放在以時鐘為敏感信號的進程中定義,且用敏感信號的進程中定義,且用IF語句來描述必要的復(fù)位條件。語句來描述必要的復(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; - 其他時序語句其他時序語句 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; - 其他時序語句其他時序語句 END IF;END PROCESS; l所謂異步復(fù)位,就是當復(fù)位信號有效時,所謂異步復(fù)位,就

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

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

20、發(fā)器的設(shè)計觸發(fā)器的設(shè)計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 -時鐘上升沿觸發(fā)時鐘上升沿觸發(fā) Q=D; END IF; END PROCESS;END ART; l【例【例5-10】T觸發(fā)器的設(shè)計觸發(fā)器的設(shè)計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è)計觸發(fā)器的設(shè)計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è)計觸發(fā)器的設(shè)計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; 鎖存器用于鎖存一組二值代碼,廣泛用于各類數(shù)字系統(tǒng)。鎖存器用于鎖存一組二值代碼,廣泛用于各類數(shù)字系統(tǒng)。一個觸發(fā)器能儲存一個觸發(fā)器能儲存1位二值代碼,用位二值代碼,用N個觸發(fā)器組成

25、的鎖存器能個觸發(fā)器組成的鎖存器能儲存一組儲存一組N位的二值代碼。位的二值代碼。 D3D3CPCPQ3Q3D2D2Q2Q2D1D1Q1Q1結(jié)論結(jié)論: 一個脈沖存儲一組數(shù)據(jù)一個脈沖存儲一組數(shù)據(jù),即一拍存儲一組數(shù)據(jù)即一拍存儲一組數(shù)據(jù)110110l【例【例5-13】一個】一個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移位寄存器除了具有存儲代碼的功能以外,還具有移位功能。移位寄存器除了具有存儲代碼的功能以外,還具有移位功能。所謂移位功能,是指寄存器里存儲的代碼能在移位脈沖的作所謂移位功能,是指寄存器里存儲的代碼能在移位脈沖的作用下依次左移或右移。因此,移位寄存器不但可以用來寄存用下依次左移或右移。因此,移位寄存器不但可以用來寄存代碼,還可用來實現(xiàn)數(shù)據(jù)的串并轉(zhuǎn)換、數(shù)值的運算以及數(shù)據(jù)

27、代碼,還可用來實現(xiàn)數(shù)據(jù)的串并轉(zhuǎn)換、數(shù)值的運算以及數(shù)據(jù)處理等。處理等。 l串入串入/串出移位寄存器有數(shù)據(jù)輸入端和同步時鐘輸入端,一個串出移位寄存器有數(shù)據(jù)輸入端和同步時鐘輸入端,一個數(shù)據(jù)輸出端。在同步時鐘的作用下,前級的數(shù)據(jù)向后級移動。數(shù)據(jù)輸出端。在同步時鐘的作用下,前級的數(shù)據(jù)向后級移動。l語句語句GENERATE用來產(chǎn)生多個相同的結(jié)構(gòu)。利用用來產(chǎn)生多個相同的結(jié)構(gòu)。利用GENERATE和和D觸發(fā)器元件觸發(fā)器元件dff,可以很方便地設(shè)計出,可以很方便地設(shè)計出8位串位串入入/串出移位寄存器。串出移位寄存器。 l【例【例5-14】一個】一個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】一個】一個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碼計數(shù)器。碼計數(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; -進位輸出的產(chǎ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的實現(xiàn)的實現(xiàn) IF(QL=9)THEN QL=0000; IF(QH=5)THEN QH=0000; ELSE -計數(shù)功能的實現(xiàn)計數(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è)計中,分頻器是一種基本電路。在數(shù)字系統(tǒng)設(shè)計中,分頻器是一種基本電路。分頻器的實現(xiàn)非常簡單,可采用標準的計數(shù)分頻器的實現(xiàn)非常簡單,可采用標準的計數(shù)器。分頻器通常用來對某個給定頻率進行分器。分頻器通常用來對某個給定頻率進行分頻,得到所需的頻率。頻,得到所需的頻率。 l計數(shù)器就是對時鐘脈沖計數(shù),同時計數(shù)器還計數(shù)器就是對時鐘脈沖計數(shù),同時計數(shù)器還是一個分頻器。是一個分頻器。 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只讀存儲器存儲單元中的信息可一次寫入、只讀存儲器存儲單元中的信息可一次寫入、多次讀出。且當多次讀出。且當ROM存儲器芯片掉電時,存存儲器芯片掉電時,存儲單元

36、中的信息不會消失,在計算機系統(tǒng)中儲單元中的信息不會消失,在計算機系統(tǒng)中常用常用ROM存放固定的程序和數(shù)據(jù)。存放固定的程序和數(shù)據(jù)。l下面給出一個下面給出一個ROM的行為描述。該的行為描述。該ROM有有4位地址線位地址線addr(3)addr(0),8位數(shù)據(jù)輸出線位數(shù)據(jù)輸出線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作為時序器件,

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

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

42、亮或高電平點亮。 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位代表要點亮的位代表要點亮的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;共陽極呢?共陽極呢?-共陽極顯示譯碼共陽極顯示譯碼 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ū)動方式可以分成靜態(tài)和動態(tài)顯示數(shù)碼管的驅(qū)動方式可以分成靜態(tài)和動態(tài)顯示兩種方式。靜態(tài)顯示編程方法較簡單,但是兩種方式。靜態(tài)顯示編程方

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

47、描足夠快(要時鐘掃描足夠快(100HZ),使我們?nèi)詴杏X所),使我們?nèi)詴杏X所有的數(shù)碼管是同時顯示的。有的數(shù)碼管是同時顯示的。l例【例【5-23】 七段數(shù)碼管動態(tài)顯示的七段數(shù)碼管動態(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; -外部時鐘輸入外部時鐘輸入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聲音的頻譜范圍約在幾十到幾千赫茲,若能聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制利用程序來控制FPGA/CPLD某個引腳輸出一某個引腳輸出一定頻率的矩形波,接上揚聲器或蜂鳴器就能

51、定頻率的矩形波,接上揚聲器或蜂鳴器就能發(fā)出相應(yīng)頻率的聲音。發(fā)出相應(yīng)頻率的聲音。l因此,只要產(chǎn)生樂曲發(fā)音所需要的對應(yīng)頻率因此,只要產(chǎn)生樂曲發(fā)音所需要的對應(yīng)頻率即可。此電路的核心是一個數(shù)控分頻器,它即可。此電路的核心是一個數(shù)控分頻器,它是由終值可變的加法計數(shù)器組成。是由終值可變的加法計數(shù)器組成。 l頻率的高低決定了音調(diào)的高低,而樂曲簡譜頻率的高低決定了音調(diào)的高低,而樂曲簡譜的音名與頻率的對應(yīng)關(guān)系如表的音名與頻率的對應(yīng)關(guān)系如表5-7所示。所示。l下面的例子可以使蜂鳴器發(fā)出下面的例子可以使蜂鳴器發(fā)出“多來咪發(fā)梭多來咪發(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)生各個音階由基頻分頻產(chǎn)生各個音階 SIGNAL cnt : std_logic_vector(21 DOWNTO 0); -各音階發(fā)聲時間

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

評論

0/150

提交評論