數(shù)字電路與邏輯設(shè)計實驗_第1頁
數(shù)字電路與邏輯設(shè)計實驗_第2頁
數(shù)字電路與邏輯設(shè)計實驗_第3頁
數(shù)字電路與邏輯設(shè)計實驗_第4頁
數(shù)字電路與邏輯設(shè)計實驗_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 數(shù)字電路與邏輯設(shè)計實驗報告 學(xué) 院: 班 級: 姓 名: 學(xué) 號: 日 期: 一 實驗名稱:實驗一:QuartusII 原理圖輸入法設(shè)計與實現(xiàn)實驗二:用 VHDL 設(shè)計與實現(xiàn)組合邏輯電路實驗三:用 VHDL 設(shè)計與實現(xiàn)時序邏輯電路實驗四:用 VHDL 設(shè)計與實現(xiàn)數(shù)碼管動態(tài)掃描控制器二 實驗所用器件及儀器:1.計算機(jī)2.直流穩(wěn)壓電源3.數(shù)字系統(tǒng)與邏輯設(shè)計實驗開發(fā)板三 實驗要求:實驗一:(1) 用邏輯門設(shè)計實現(xiàn)一個半加器,仿真驗證其功能,并生成新的半加器圖形模塊單元。(2) 用(1)實現(xiàn)的半加器和邏輯門設(shè)計實現(xiàn)一個全加器,仿真并驗證其功能,并下載到實驗板上測試。要求用撥碼開關(guān)設(shè)定輸入信號,發(fā)光二

2、極管顯示輸出信號。(3) 用38線譯碼器和邏輯門設(shè)計實現(xiàn)函數(shù)F=/C/B/A+/CB/A+C/B/A+CBA,仿真驗證其功能并下載到實驗板測試。要求用撥碼開關(guān)設(shè)定輸入信號,發(fā)光二極管顯示輸出信號。注:實驗時將三個元器件放在一個new block diagram中實現(xiàn)。實驗二:(1) 用VHDL語言設(shè)計實現(xiàn)一個共陰極7段數(shù)碼譯碼器,仿真驗證其功能,并下載到實驗板測試。要求用撥碼開關(guān)設(shè)定輸入信號,7段數(shù)碼管顯示輸出信號。(2) 用VHDL語言設(shè)計實現(xiàn)一個8421碼轉(zhuǎn)余三碼的代碼器,仿真驗證其功能,并下載到實驗板測試。要求用撥碼開關(guān)設(shè)定輸入信號,發(fā)光二極管顯示輸出信號。(3) 用VHDL語言設(shè)計實現(xiàn)

3、一個4位二進(jìn)制奇校驗器,輸入奇數(shù)個1時,輸出1,否則出0;仿真驗證其功能,并下載到實驗板測試。要求用撥碼開關(guān)設(shè)定輸入信號,發(fā)光二極管顯示輸出信號。實驗三:(1) 用VHDL語言設(shè)計實現(xiàn)一個帶異步復(fù)位的8421 十進(jìn)制計數(shù)器,仿真驗證其功能,并下載到實驗板測試。要求用按鍵設(shè)定輸入信號,發(fā)光二極管顯示輸出信號。(2) 用VHDL語言設(shè)計實現(xiàn)一個分頻系數(shù)為12,輸出信號占空比為50%的分頻器,仿真驗證其功能。注:實驗時將(1)、(2)和數(shù)碼管譯碼器 3 個電路進(jìn)行鏈接,并下載到實驗板顯示計數(shù)結(jié)果。實驗四:(1) 用VHDL語言設(shè)計實現(xiàn)六個數(shù)碼管串行掃描電路,要求同時顯示0,1,2,3,4,5這幾個不

4、同的數(shù)字圖形到數(shù)碼管上,仿真驗證其功能,并下載到實驗板測試。(2) 用VHDL語言設(shè)計實現(xiàn)六個數(shù)碼管滾動顯示電路:A 循環(huán)左循環(huán),左進(jìn)右出。狀態(tài)為:012345->123450->234501->345012->450123->501234->012345B 向左滾動,狀態(tài)為(X表示數(shù)碼管不顯示):012345->12345X->2345XX->345XXX->45XXXX->5XXXXX->XXXXXX->XXXXX0->XXXX01->XXX012->XX0123->X01234->

5、012345四 實驗原理及設(shè)計思路:實驗一:(1) 半加器是考慮兩位二進(jìn)制數(shù)相加,出來的結(jié)果有二者加后的一個低位數(shù),和一個這兩位數(shù)相加所得的進(jìn)位數(shù)。所以用異或門和與門即可實現(xiàn)雙輸入雙輸出的半加器。(2) 全加器可以以半加器為基礎(chǔ),在考慮兩位二進(jìn)制數(shù)相加時也考慮上地位的進(jìn)位信號,輸出與半加器類似。(3) 譯碼器加邏輯門可以實現(xiàn)相應(yīng)的邏輯函數(shù),將有相應(yīng)最小項的輸出項或即可。實驗二:(1) 共陰極7段數(shù)碼譯碼器:撥碼開關(guān)的不同狀態(tài)對應(yīng)輸入信號的0和1,通過改變撥碼開關(guān)的狀態(tài)改變輸入值,此時用VHDL語言描述每個輸入值下對應(yīng)的數(shù)在數(shù)碼管中的顯示。(2) 8421碼轉(zhuǎn)余三碼的代碼器:將8421BCD碼加

6、上0011即為對應(yīng)的余三碼,通過通過改變撥碼開關(guān)的狀態(tài)改變輸入的84212BCD碼,由四個LED燈的亮與滅(亮表示該值為1,滅表示0),來表示余三碼的碼值。(3) 奇偶校驗電路:同理用撥碼開關(guān)設(shè)定輸入信號,發(fā)光二極管顯示輸出信號,輸入奇數(shù)個1時,對應(yīng)的發(fā)光二極管亮,反之則為熄滅狀態(tài)。實驗三:(1) 異步計數(shù)器:由于是異步復(fù)位,且yibuclear(清零信號)優(yōu)先級最高,當(dāng)它有效時使?fàn)顟B(tài)清零?;蛘弋?dāng)?shù)竭_(dá)第11個狀態(tài)(1010)時復(fù)位,使?fàn)顟B(tài)回歸到初始狀態(tài)(0000)。其余時刻,用cp來計數(shù),每按一次鍵cp=1,狀態(tài)加1。因此設(shè)計2個輸入端,一個輸出端數(shù)組即可。(2) 分頻器:是使cp經(jīng)過12個周

7、期,輸出的信號正好完成一次完整的翻轉(zhuǎn),因此需要計數(shù),該計數(shù)器模值為12,每六個狀態(tài)時翻轉(zhuǎn)一次。(3) 可以使用分頻器為異步計數(shù)器提供脈沖信號,異步計數(shù)器的輸出作為數(shù)碼管譯碼管的輸入,由數(shù)碼管譯碼管顯示當(dāng)前數(shù)據(jù)。實驗四:(1) 六個數(shù)碼管串行掃描電路:由實驗板上18號元件提供時鐘,每過一個周期,亮一個數(shù)碼管,且該數(shù)碼管序號也會改變,因此需要兩個數(shù)組來體現(xiàn)這種改變。設(shè)選擇一個管亮的數(shù)組為xuan(5 downto 0),數(shù)碼管上控制輸出數(shù)字形狀的數(shù)組為guan(6 downto 0),通過輸入的時鐘改變狀態(tài)(signal status),由狀態(tài)定xuan,guan。由于要求“同時顯示”,我們知道閃

8、爍發(fā)光的二極管閃爍頻率較高時,我們將觀察到持續(xù)點亮的現(xiàn)象,一個數(shù)碼管要穩(wěn)定,需要顯示頻率大于50HZ,現(xiàn)在需要6個數(shù)碼管同時顯示,因而時鐘的頻率應(yīng)該大于300HZ。(2) 六個數(shù)碼管滾動掃描電路:大致原理同(1),但是需要注意guan不再只有6個狀態(tài),需要用12個狀態(tài)來配合周期循環(huán)使用。需要每輪的管子狀態(tài)改變一個位移。此時可以把xuan由循環(huán)來賦值,實現(xiàn)控制不同時刻數(shù)碼管的亮與滅。五 實驗?zāi)K端口及連接圖:實驗三(3):分頻器的時鐘信號接外部時鐘,異步清零端接外部信號,異步清零信號有效時可以實現(xiàn)分頻器內(nèi)部計數(shù)清零。當(dāng)外部時鐘clk=1時,分頻器內(nèi)部計數(shù)器的狀態(tài)加1,每六個狀態(tài)clk_out實現(xiàn)

9、一次翻轉(zhuǎn)。分頻器的輸出作為異步計數(shù)器的時鐘,異步計數(shù)器的異步復(fù)位端接外部輸入,可由實驗板上撥碼開關(guān)實現(xiàn)。這樣就將外部時鐘12分頻后輸入給異步計數(shù)器,異步計數(shù)器將計數(shù)輸入數(shù)碼譯碼器,實現(xiàn)控制數(shù)碼管的狀態(tài),使之顯示異步8421十進(jìn)制計數(shù)器的此刻的數(shù)。實驗四:(1) clk是輸入信號,接外部時鐘信號(location對應(yīng)實驗板18),要求頻率大于300HZ,clear是異步復(fù)位信號。guan為輸出信號,連接到數(shù)碼管上對應(yīng)的7條線,控制這個數(shù)碼管中每一段線的亮與滅,實現(xiàn)顯示數(shù)字。xuan是控制6個數(shù)碼管此時應(yīng)該亮哪一個。由signal status根據(jù)輸入信號確定此時對應(yīng)的狀態(tài)下的xuan和guan。

10、(2) 循環(huán)左滾動:輸入信號為clk,clear。Clear為異步復(fù)位信號,Clk接外部時鐘,該時鐘共有4種頻率(可以通過改變粉紅色按鈕上的小撥碼開關(guān)調(diào)整),為了使實驗現(xiàn)象符合要求,我們可以選擇最高頻率并對它進(jìn)行分頻,分出我們所需要的合適的頻率,再由分頻器輸出的信號控制狀態(tài)變化,每來一個時鐘改變一次狀態(tài),xuan和guan為輸出信號,分別控制該時刻應(yīng)該亮哪個數(shù)碼管和這個數(shù)碼管上每條線的亮與滅狀態(tài)。故clk接實驗板上18,clear可由按鍵實現(xiàn),xuan接實驗板上cat(05)guan接數(shù)碼管上每條線所對應(yīng)的數(shù)字。小周期計數(shù)器控制每位數(shù)碼的顯示,大周期計數(shù)器控制數(shù)碼的移位。(3) clk為輸入信

11、號,接外部時鐘實驗板上18,通過循環(huán)移位及每來一個cp對xuan進(jìn)行一次賦值,選擇此時該亮的燈。通過改變輸出guan和xuan,從而得出能熄滅能亮的現(xiàn)象。guan接數(shù)碼管上的每條線所對應(yīng)位置,xuan接六個數(shù)碼管的cat端 六 實驗原理圖或者VHDL代碼:(1) 實驗一(2):其中半加器ba的原理圖如下所示:(2) 實驗三(3)VHDL代碼如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY sange IS PORT( clk:IN STD_LOGIC; clear,clea

12、ryibu:IN STD_LOGIC; b:OUT STD_LOGIC_VECTOR(6 downto 0); y2,y3,y4,y5,y6,y7:OUT STD_LOGIC);end sange;ARCHITECTURE a OF sange IS component fenpin PORT( clk:IN STD_LOGIC; clear:IN STD_LOGIC; clk_out:OUT STD_LOGIC ); END component; component yibu PORT( cp,clear:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(3 DOWN

13、TO 0) ); END component; component seg7_1 PORT(a:IN STD_LOGIC_VECTOR (3 downto 0);b:OUT STD_LOGIC_VECTOR(6 downto 0);c,d,e,f,g,h:OUT STD_LOGIC); END component;SIGNAL na:STD_LOGIC; SIGNAL nb:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN u1:fenpin PORT MAP(clk=>clk,clear=>clear,clk_out=>na); u2:yibu PORT

14、 MAP(cp=>na,clear=>clearyibu,q=>nb); u3:seg7_1 PORT MAP(a=>nb,b=>b,c=>y2,d=>y3,e=>y4,f=>y5,g=>y6,h=>y7); END a;其中fenpin,yibu,seg7_1的VHDL代碼如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fenpin IS PORT( clk:IN STD_LOGIC; clear:IN

15、STD_LOGIC; clk_out:OUT STD_LOGIC ); END fenpin; ARCHITECTURE a OF fenpin IS SIGNAL tmp:INTEGER RANGE 0 TO 5; SIGNAL clktmp: STD_LOGIC; BEGIN PROCESS(clear,clk) BEGIN IF clear='0' THEN tmp<=0; ELSIF (clk'event and clk='1') THEN IF tmp=5 THEN tmp<=0; clktmp<=NOT clktmp; EL

16、SE tmp<=tmp+1; END IF; END IF; END PROCESS; clk_out<=clktmp; END a;yibu:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY yibu IS PORT( cp,clear:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END yibu; ARCHITECTURE a OF yibu IS SIGNAL temp:STD_LOGIC_VECTOR

17、(3 DOWNTO 0); BEGIN PROCESS(cp) BEGIN IF clear='1' THEN temp<="0000" elsIF temp="1010"THEN temp<="0000" else IF (cp'event and cp='1') THEN temp<=temp+1; END IF; end if; END PROCESS; q<=temp; END a;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;

18、ENTITY seg7_1 ISPORT(a:IN STD_LOGIC_VECTOR (3 downto 0);b:OUT STD_LOGIC_VECTOR(6 downto 0);c,d,e,f,g,h:OUT STD_LOGIC);數(shù)碼管譯碼器VHDL代碼:end seg7_1;ARCHITECTURE seg7_1_arch OF seg7_1 ISBEGINc<='0'd<='1'e<='1'f<='1'g<='1'h<='1' PROCESS (a) B

19、EGIN CASE a IS WHEN"0000"=>B<="1111110" -0WHEN"0001"=>B<="0110000" -1WHEN"0010"=>B<="1101101" -2WHEN"0011"=>B<="1111001" -3WHEN"0100"=>B<="0110011" -4WHEN"0101"

20、=>B<="1011011" -5WHEN"0110"=>B<="1011111" -6WHEN"0111"=>B<="1110000" -7WHEN"1000"=>B<="1111111" -8WHEN"1001"=>B<="1111011" -9WHEN OTHERS =>B<="0000000" END CASE;END

21、 PROCESS;END;(3) 實驗四(1) 數(shù)據(jù)管串行掃描電路:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY chuanxing ISPORT(clk,clear:IN STD_LOGIC;guan:out STD_LOGIC_VECTOR (6 downto 0);xuan:OUT STD_LOGIC_VECTOR(5 downto 0);end chuanxing;ARCHITECTURE yu OF chuanxing ISsignal status:integer ra

22、nge 0 to 6;BEGINprocess(clk)beginif clear='0' then status<=0;elsif (clk'event and clk='1')thenif status=6 then status<=1;elsestatus<=status+1;end if;end if;end process; PROCESS (status) BEGIN CASE status IS WHEN 1=>guan<="1111110"xuan<="011111&quo

23、t; WHEN 2=>guan<="0110000"xuan<="101111" WHEN 3=>guan<="1101101"xuan<="110111" WHEN 4=>guan<="1111001"xuan<="111011" WHEN 5=>guan<="0110011"xuan<="111101" WHEN 6=>guan<="101

24、1011"xuan<="111110" WHEN OTHERS=>guan<="0000000"xuan<="111111" END CASE;END PROCESS;END;(2) 循環(huán)左滾動:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY move IS PORT( clk,clear:IN STD_LOGIC; guan:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)

25、; xuan:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);END move;ARCHITECTURE zuo OF move is SIGNAL l:STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL c:STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL cnt,cnt1:INTEGER RANGE 0 TO 5; SIGNAL tmp:INTEGER RANGE 0 TO 1999; signal clk1:STD_LOGIC;BEGIN Fenpin1:PROCESS(clk,clear) BEGIN IF clear=&

26、#39;0' THEN tmp<=0; ELSIF clk'EVENT AND clk='1' THEN IF tmp=1999 THEN tmp<=0; ELSE tmp<=tmp+1; END IF; END IF; END PROCESS fenpin1; fenpin2:PROCESS(tmp) BEGIN IF clk'EVENT AND clk='1' THEN IF tmp<1000 THEN clk1<='0' ELSE clk1<='1' END IF;

27、 END IF; END PROCESS fenpin2; change:PROCESS(clk) BEGIN IF(clk'EVENT AND clk='1')THEN IF(cnt=5)THEN cnt<=0; ELSE cnt<=cnt+1; END IF; END IF; END PROCESS change; P0:PROCESS(clk1) BEGIN IF(clk1'EVENT AND clk1='1')THEN IF(cnt1=5)THEN cnt1<=0; ELSE cnt1<=cnt1+1; END I

28、F; END IF; END PROCESS p0; P1:PROCESS(cnt,cnt1) BEGIN IF(clear='0')THEN l<="0000000" ELSE CASE cnt+cnt1 IS WHEN 0=>l<="1111110" WHEN 1=>l<="0110000" WHEN 2=>l<="1101101" WHEN 3=>l<="1111001" WHEN 4=>l<="0

29、110011" WHEN 5=>l<="1011011" WHEN 6=>l<="1111110" WHEN 7=>l<="0110000" WHEN 8=>l<="1101101" WHEN 9=>l<="1111001" WHEN 10=>l<="0110011" WHEN 11=>l<="1011011" WHEN OTHERS =>l<=&qu

30、ot;0000000" END CASE; END IF; END PROCESS p1; guan<=q_temp; p2:PROCESS(cnt) BEGIN IF(clear='0')THEN c<="111111" ELSE CASE cnt IS WHEN 0=>c<="011111" WHEN 1=>c<="101111" WHEN 2=>c<="110111" WHEN 3=>c<="111011"

31、; WHEN 4=>c<="111101" WHEN 5=>c<="111110" WHEN OTHERS =>c<="111111" END CASE; END IF; END PROCESS p2; xuan<=count;END zuo; (3) 亮了又熄滅:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY bianhua ISPORT(clk,clear:IN STD_LOGI

32、C;guan:out STD_LOGIC_VECTOR (6 downto 0);xuan:OUT STD_LOGIC_VECTOR(5 downto 0);end bianhua;ARCHITECTURE wei OF bianhua ISsignal tmp:integer range 0 to 5;signal w:integer range 0 to 5;signal s:integer range 0 to 10;signal k:integer range 0 to 1;signal o:integer range 0 to 6;signal p:integer range -1

33、to 1;signal clko:std_logic_vector(0 to 5);BEGIN process(clear,clk)beginif clear='0' then tmp<=0; w<=0; s<=0; k<=0; o<=6; p<=-1;elsif (clk'event and clk='1')thenif tmp=5 then tmp<=0;w<=w+1;elsetmp<=tmp+1;end if;if w=6 thenw<=0;end if;for i in 0 to 5 l

34、oopif k=0 thenif tmp>=o thenclko(i)<='1'elsif tmp<i thenclko(i)<='1'elsif tmp<i+1 thenclko(i)<='0'elseclko(i)<='1'end if;elsif k=1 thenif (5-tmp)>=o thenclko(i)<='1'elsif tmp<i thenclko(i)<='1'elsif tmp<i+1 thenclko(

35、i)<='0'elseclko(i)<='1'end if;end if;end loop;if tmp=5 then o<=o+p; end if; if o=0 then k<=1; p<=1;elsif o=6 then p<=-1; k<=0; end if;for i in 0 to 5 loopxuan(i)<=clko(i);end loop;s<=tmp+w; CASE s IS WHEN 10=>guan<="0110011" WHEN 9=>guan&

36、lt;="1111001" WHEN 8=>guan<="1101101" WHEN 7=>guan<="0110000" WHEN 6=>guan<="1111110" WHEN 0=>guan<="1111110" WHEN 1=>guan<="0110000" WHEN 2=>guan<="1101101" WHEN 3=>guan<="1111001&qu

37、ot; WHEN 4=>guan<="0110011" WHEN 5=>guan<="1011011" END CASE; end if;END PROCESS;END;七 實驗的仿真波形圖及分析:(1) 實驗一(2)A,B 為進(jìn)行加運(yùn)算的二進(jìn)制數(shù),CI為前一位數(shù)的進(jìn)位,CO是A,B相加的進(jìn)位,A,B都為1時CO=1,其余時候為零。S是A,B加后的最低位,A,B,CI異或而得。實驗一(3)A,B,C為地址端,當(dāng)輸入的最小項在F的表達(dá)式中時,F(xiàn)=1,其余F=0。(2) 實驗二8421BCD碼轉(zhuǎn)為余三碼,從0000至1001,余三碼等于8421bcd碼加0011,其余情況,輸出0000;當(dāng)輸入的四位二進(jìn)制數(shù)有奇數(shù)個1時出1,其余出0;輸入0000至1001時,輸出數(shù)碼管上其相應(yīng)的表現(xiàn)形式,否則數(shù)碼管沒有一根線亮。(3)實驗三外部時鐘每過6個周期,分頻器輸出翻轉(zhuǎn)一次,數(shù)碼管從顯示0開始,直到9的對應(yīng)輸入的數(shù)據(jù)。y數(shù)組表示數(shù)碼管的選通與否,clear,yibuclear為分別為分頻器和計數(shù)器的異步復(fù)位信

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論