




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)字邏輯與數(shù)字系統(tǒng)課程設(shè)計(jì)北京郵電大學(xué)課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)名稱數(shù)字邏輯與數(shù)字系統(tǒng)學(xué) 院計(jì)算機(jī)指導(dǎo)教師班 級(jí)班內(nèi)序號(hào)學(xué) 號(hào)學(xué)生姓名成績(jī)0740706071147馬 釗0740714071155袁 泉0740721071162楊晨笛0740729071170羅亞群課程設(shè)計(jì)內(nèi)容教學(xué)目的:掌握isp lever 軟件的使用方法,掌握isp器件的使用方法,用vhdl進(jìn)行較復(fù)雜邏輯電路的設(shè)計(jì)和調(diào)試,熟練掌握isp器件的下載方法。基本內(nèi)容: 1.簡(jiǎn)易電子琴 2.簡(jiǎn)易頻率計(jì) 3.交通燈控制 4.電子鐘顯示 5.藥片裝瓶系統(tǒng)實(shí)驗(yàn)方法:先用vhdl進(jìn)行軟件編程,然后下載到isp器件,進(jìn)行硬件仿真實(shí)驗(yàn)。組員分工:詳
2、見各實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)分工。學(xué)生課程設(shè)計(jì)報(bào)告(附頁)課程設(shè)計(jì)成績(jī)?cè)u(píng)定遵照實(shí)踐教學(xué)大綱并根據(jù)以下四方面綜合評(píng)定成績(jī):1、課程設(shè)計(jì)目的任務(wù)明確,選題符合教學(xué)要求,份量及難易程度2、團(tuán)隊(duì)分工是否恰當(dāng)與合理3、綜合運(yùn)用所學(xué)知識(shí),提高分析問題、解決問題及實(shí)踐動(dòng)手能力的效果4、是否認(rèn)真、獨(dú)立完成屬于自己的課程設(shè)計(jì)內(nèi)容,課程設(shè)計(jì)報(bào)告是否思路清晰、文字通順、書寫規(guī)范評(píng)語: 成績(jī):指導(dǎo)教師簽名: 年 月 日注:評(píng)語要體現(xiàn)每個(gè)學(xué)生的工作情況,可以加頁。目錄實(shí)驗(yàn)一:簡(jiǎn)易電子琴3實(shí)驗(yàn)二:簡(jiǎn)易頻率計(jì)6實(shí)驗(yàn)三:交通燈控制器設(shè)計(jì)11實(shí)驗(yàn)四:電子鐘設(shè)計(jì)17實(shí)驗(yàn)五:藥片裝瓶系統(tǒng)設(shè)計(jì)26附:數(shù)字邏輯與數(shù)字系統(tǒng)課程設(shè)計(jì)心得體會(huì)34實(shí)驗(yàn)一
3、:簡(jiǎn)易電子琴一、實(shí)驗(yàn)?zāi)康恼莆蛰^復(fù)雜邏輯的設(shè)計(jì)和調(diào)試。掌握用vhdl語言設(shè)計(jì)數(shù)字邏輯電路。掌握isplever軟件的使用方法。掌握isp器件的使用。用途: 有電子琴的基本功能,可彈奏出簡(jiǎn)單的樂曲。二、實(shí)驗(yàn)所用器件和設(shè)備在系統(tǒng)可編程邏輯器件isp1032一片示波器一臺(tái)萬用表或邏輯筆一只tec-5實(shí)驗(yàn)系統(tǒng),或tds-2b數(shù)字電路實(shí)驗(yàn)系統(tǒng)一臺(tái)三、實(shí)驗(yàn)原理 用vhdl設(shè)計(jì)一個(gè)簡(jiǎn)易電子琴。有8個(gè)按鍵,每鍵代表一個(gè)音符, 1、2、3、4、5、6、7、i各音符按一定的順序排列,須符合電子琴的按鍵排列順序。每個(gè)音符對(duì)應(yīng)特定的頻率的方波信號(hào)。方波信號(hào)由多模計(jì)數(shù)器產(chǎn)生。方波信號(hào)占空比可改變音量大小。圖1-1 簡(jiǎn)易電
4、子琴原理圖四、設(shè)計(jì)方案輸入的主頻=50khz,不同的鍵產(chǎn)生不同頻率的輸出,輸出由多模計(jì)數(shù)器產(chǎn)生。多模計(jì)數(shù)器:m(模)=50000/f 音符 (c)1234567i頻率(hz)262294330349392440494523模19117015114312811410197多模計(jì)數(shù)器輸出波形: 二分頻計(jì)數(shù)器:音符 (c)1234567i模9584757163565047(改變音量使輸出信號(hào)占空比為50%)五、代碼實(shí)現(xiàn)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity piano is por
5、t(clk:in std_logic;-時(shí)鐘源為50khz k:in std_logic_vector(7 downto 0);-從高位到低位對(duì)應(yīng)1,2,3,4,5,6,7,i dout:out std_logic);-輸出至喇叭end piano;architecture art of piano is signal temp,m:integer range 0 to 127;-temp為計(jì)數(shù)值,m為計(jì)數(shù)器模值begin process(clk,k)-模m計(jì)數(shù)器 variable a:std_logic; begin case k is when 10000000 = m m m m m m
6、 m m m=0; end case; if(clkevent and clk=1) then -對(duì)50khz原始信號(hào)進(jìn)行m分頻,再進(jìn)行2分頻 if (temp=m) then temp=0; a:=not a; -“翻轉(zhuǎn)”信號(hào),實(shí)現(xiàn)信號(hào)占空比50% else temp=temp+1; end if; end if; dout=a; end process;end architecture;六、實(shí)驗(yàn)中出現(xiàn)的問題及解決方法由于學(xué)習(xí)vhdl編程已經(jīng)過去一個(gè)學(xué)期,很多東西都已經(jīng)不太清楚了。第一個(gè)實(shí)驗(yàn)比較基礎(chǔ)也比較簡(jiǎn)單,所以過程中并沒有遇到什么大問題,主要是一些小細(xì)節(jié)上的問題。比方說,首先是vhdl的
7、語法已經(jīng)不太熟練了,因此在復(fù)習(xí)vhdl硬件編程的基礎(chǔ)上著重對(duì)語法進(jìn)行了復(fù)習(xí)和記憶。例如case-is-when語句和if-then-elsif語句等。然后,此實(shí)驗(yàn)中主要涉及的兩個(gè)知識(shí):模m計(jì)數(shù)器和二分頻計(jì)數(shù)器。m的值是由k來決定的,也就是由開關(guān)來控制。而對(duì)信號(hào)二分頻的時(shí)候,需要設(shè)定一個(gè)變量,在計(jì)數(shù)值加到m的時(shí)候?qū)π盘?hào)進(jìn)行翻轉(zhuǎn),從而達(dá)到分頻目的。另外,是在對(duì)isp器件的使用上。以前只有一次實(shí)驗(yàn)實(shí)踐操作過isp器件,那時(shí)是在老師一步一步指導(dǎo)下進(jìn)行操作,了解得并不是很全面很深入。這次完全是自己來操作了,所以對(duì)每一個(gè)步驟都會(huì)很留意。對(duì)該軟件的使用上也出現(xiàn)過一些錯(cuò)誤,多次重來后解決。七、本次實(shí)驗(yàn)的收獲作
8、為小學(xué)期數(shù)字邏輯課程設(shè)計(jì)的第一個(gè)實(shí)驗(yàn),充分體現(xiàn)了其基礎(chǔ)性和概括性。為了對(duì)程序有更好地把握,不僅復(fù)習(xí)了一學(xué)期前所學(xué)習(xí)的vhdl的知識(shí),更在此基礎(chǔ)上擴(kuò)寬了對(duì)vhdl的理解和認(rèn)識(shí),學(xué)到了更多的知識(shí)。最重要的,是體會(huì)到了學(xué)以致用的樂趣。另外,對(duì)在系統(tǒng)編程了設(shè)計(jì)流程也有了一定的掌握,對(duì)isp器件的使用也有一定的熟悉。作為一個(gè)開始的基礎(chǔ)實(shí)驗(yàn),學(xué)到的東西還是挺多的。實(shí)驗(yàn)二:簡(jiǎn)易頻率計(jì)一、實(shí)驗(yàn)?zāi)康恼莆蛰^復(fù)雜邏輯的設(shè)計(jì)和調(diào)試。掌握用vhdl語言設(shè)計(jì)數(shù)字邏輯電路。掌握isplever軟件的使用方法。掌握isp器件的使用。了解頻率計(jì)的初步知識(shí)。二、實(shí)驗(yàn)所用器件和設(shè)備在系統(tǒng)可編程邏輯器件isp1032一片示波器一臺(tái)萬
9、用表或邏輯筆一只tec-5實(shí)驗(yàn)系統(tǒng),或tds-2b數(shù)字電路實(shí)驗(yàn)系統(tǒng)一臺(tái)三、實(shí)驗(yàn)內(nèi)容設(shè)計(jì)一個(gè)簡(jiǎn)易頻率計(jì),用于測(cè)量1mhz以下數(shù)字脈沖信號(hào)的頻率。閘門只有1s一檔。測(cè)量結(jié)果在數(shù)碼管上顯示出來。不測(cè)信號(hào)脈寬。用一片isp芯片實(shí)現(xiàn)此設(shè)計(jì),并在實(shí)驗(yàn)臺(tái)上完成調(diào)試,建議設(shè)計(jì)采用vhdl語言編寫。四、設(shè)計(jì)思路頻率計(jì)的基本工作原理如下:首先產(chǎn)生一系列準(zhǔn)確閘門信號(hào),例如1ms,0.1s和1s等。然后用這些閘門信號(hào)控制一個(gè)計(jì)數(shù)器對(duì)被測(cè)脈沖信號(hào)進(jìn)行計(jì)數(shù),最后將結(jié)果顯示出來。如果閘門信號(hào)是1s,那么1s內(nèi)計(jì)數(shù)的結(jié)果就是被測(cè)信號(hào)的頻率。如果閘門信號(hào)是1ms,那么計(jì)數(shù)結(jié)果是被測(cè)信號(hào)頻率的千分之一,或者說結(jié)果是以khz為單位
10、的頻率值。頻率計(jì)中,最原始的時(shí)基信號(hào)準(zhǔn)確度一定要高。建議用實(shí)驗(yàn)臺(tái)上的5khz時(shí)鐘信號(hào)做原始時(shí)基信號(hào)。1s的閘門信號(hào),由5khz時(shí)鐘經(jīng)5k分頻后,再經(jīng)2分頻產(chǎn)生。這樣產(chǎn)生的閘門信號(hào)脈寬是1s,占空比是50%。在2s的時(shí)間內(nèi),1s用于計(jì)數(shù),1s用于顯示結(jié)果。用于被測(cè)信號(hào)計(jì)數(shù)的計(jì)數(shù)器應(yīng)采用十進(jìn)制。測(cè)得的結(jié)果可直接送實(shí)驗(yàn)臺(tái)上的6個(gè)數(shù)碼管顯示。每次對(duì)被測(cè)信號(hào)計(jì)數(shù)前,計(jì)數(shù)器應(yīng)被清零。 圖2-1 簡(jiǎn)易頻率計(jì)原理圖 圖2-2 簡(jiǎn)易頻率計(jì)模塊設(shè)計(jì)五、設(shè)計(jì)方案模塊:頂層模塊library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.al
11、l;entity frequency is port(clk1,clk2:in std_logic; -clk1為5khz的原始時(shí)基信號(hào),clk2為被測(cè)信號(hào) dout:out std_logic_vector(19 downto 0); -輸出至低5位數(shù)碼管 dec:out std_logic_vector(6 downto 0); -譯碼結(jié)果送最高位數(shù)碼管end frequency;architecture art of frequency is component counter10 -十進(jìn)制計(jì)數(shù)器元件聲明 port (clk,cd,en:in std_logic; -clk時(shí)鐘,cd清零
12、,en使能 qout:out std_logic_vector(3 downto 0); -計(jì)數(shù)輸出 cout:out std_logic); -進(jìn)位輸出 end component; signal temp:std_logic_vector(19 downto 0); -十進(jìn)制計(jì)數(shù)結(jié)果的低5位 signal dec_temp:std_logic_vector(3 downto 0); -十進(jìn)制計(jì)數(shù)結(jié)果的最高位 signal c:std_logic_vector(5 downto 0); -計(jì)數(shù)器每一位的進(jìn)位信號(hào) signal gate_sig,clr:std_logic; -閘門信號(hào),清零信
13、號(hào) signal count:integer range 0 to 4999; -用于產(chǎn)生閘門信號(hào)時(shí)計(jì)數(shù)begin u1:counter10 port map (clk2,clr,gate_sig,temp(3 downto 0),c(0); -6個(gè)十進(jìn)制計(jì)數(shù)器 u2:counter10 port map (c(0),clr,gate_sig,temp(7 downto 4),c(1); -低位計(jì)數(shù)器進(jìn)位信號(hào)作 u3:counter10 port map (c(1),clr,gate_sig,temp(11 downto 8),c(2); -為高位計(jì)數(shù)器時(shí)鐘信號(hào) u4:counter10 po
14、rt map (c(2),clr,gate_sig,temp(15 downto 12),c(3); u5:counter10 port map (c(3),clr,gate_sig,temp(19 downto 16),c(4); u6:counter10 port map (c(4),clr,gate_sig,dec_temp(3 downto 0),c(5); process1:process(clk1) -對(duì)5khz原始信號(hào)進(jìn)行5000分頻,再進(jìn)行2分頻,產(chǎn)生閘門信號(hào) begin if (clk1event and clk1=1) then if (count=4999) then c
15、ount=0; gate_sig=not gate_sig; -“翻轉(zhuǎn)”閘門信號(hào),實(shí)現(xiàn)閘門信號(hào)占空比50% else count=count+1; end if; end if; end process process1; clr=0 when (count=4999 and gate_sig=0) else -在計(jì)數(shù)前對(duì)計(jì)數(shù)器清零 1; dout dec dec dec dec dec dec dec dec dec dec dec=0000000; end case; end process process2;end art;模塊:一位十進(jìn)制計(jì)數(shù)器(8421碼)library ieee;u
16、se ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter10 is port(clk,cd,en:in std_logic; -clk時(shí)鐘,cd清零,en使能 qout:out std_logic_vector(3 downto 0); -計(jì)數(shù)輸出 cout:out std_logic); -進(jìn)位輸出end counter10;architecture art of counter10 is signal temp:std_logic_vector(3 downto 0);begin process(cl
17、k,en,cd) begin if (cd=0) then -cd有效計(jì)數(shù)器清零 temp=0000; elsif (clkevent and clk=0) then -時(shí)鐘下降沿觸發(fā) if (temp=1001 and en=1) then -使能有效時(shí)計(jì)數(shù),無效時(shí)停止計(jì)數(shù) temp=0000; elsif (en=1) then temp=temp+1; end if; end if; end process; qout=temp; cout=1 when temp=1001 else -計(jì)數(shù)到9時(shí)產(chǎn)生進(jìn)位信號(hào) 0;end art;六、調(diào)試中出現(xiàn)的問題及解決方法有了前面簡(jiǎn)易電子琴的設(shè)計(jì),鞏
18、固了isp器件的設(shè)計(jì)流程、編程方式,vhdl的基本結(jié)構(gòu)、語法要點(diǎn)、設(shè)計(jì)技巧等,編程過程中比較順利,但是也遇到了一些問題。 計(jì)數(shù)器采用異步級(jí)聯(lián)方式,即最低位計(jì)數(shù)器接入待測(cè)信號(hào)作為時(shí)鐘,其余計(jì)數(shù)器接入低位計(jì)數(shù)器的進(jìn)位信號(hào)作為時(shí)鐘,其中計(jì)數(shù)器在計(jì)到9時(shí)產(chǎn)生進(jìn)位信號(hào),利用時(shí)鐘上升沿觸發(fā)。但是,由此產(chǎn)生的問題是高位提前加1(即:000006,000007,000008,000019,000010,000011,000012)。這個(gè)問題很容易解決,把時(shí)鐘改為下降沿觸發(fā)即可。 如何用閘門信號(hào)控制計(jì)數(shù)器是否計(jì)時(shí)?在十進(jìn)制計(jì)數(shù)器模塊中添加使能信號(hào)en(en=1計(jì)數(shù)器進(jìn)行加1計(jì)數(shù),en=0時(shí)計(jì)數(shù)器保持),將閘門信
19、號(hào)作為使能信號(hào)接入,即可實(shí)現(xiàn)1s計(jì)數(shù),1s顯示。 利用閘門信號(hào)gate_sig=1對(duì)待測(cè)信號(hào)進(jìn)行計(jì)數(shù),gate_sig=0顯示待測(cè)信號(hào)頻率數(shù),遇到的問題是頻率個(gè)數(shù)會(huì)累加。解決的方法是:在十進(jìn)制計(jì)數(shù)器模塊中增加清零信號(hào)。在閘門信號(hào)為0的最后一個(gè)計(jì)數(shù)周期(即count=4999 and gate_sig=0)時(shí)將頻率計(jì)清零。 elsif (clkevent and clk=0 and en=1) then語句編譯不通過,if語句中只能單獨(dú)判斷時(shí)鐘的上升沿(或者下降沿),不能在添加其他的判斷條件。解決方法是在elsif (clkevent and clk=0) then下面的每個(gè)if-else語句中
20、加en=1的判斷條件。即,if (temp=1001 and en=1) thenelsif (en=1) thenend if; 由于最初未在實(shí)驗(yàn)室編程,對(duì)實(shí)驗(yàn)臺(tái)不熟悉,對(duì)6個(gè)十進(jìn)制計(jì)數(shù)器的輸出都進(jìn)行了七段顯示譯碼,后來看到課本上的實(shí)驗(yàn)提示“測(cè)得的結(jié)果可直接送實(shí)驗(yàn)臺(tái)上的6個(gè)數(shù)碼管顯示”后,又把七段顯示譯碼部分刪去了。后來到了實(shí)驗(yàn)室才發(fā)現(xiàn)最高位需要七段顯示譯碼,其余位直接將8421碼接入即可。 由于是第一次在實(shí)踐中運(yùn)用元件例化語句(component),不是很熟悉(不知道2個(gè).vhd文件怎樣關(guān)聯(lián)起來),通過對(duì)上學(xué)期課程的復(fù)習(xí),以及逐步的摸索,對(duì)例化語句有了深入的了解。七、層次設(shè)計(jì)的體會(huì)這次實(shí)驗(yàn)
21、采用層次設(shè)計(jì)利用閘門信號(hào)模塊與(一位)十進(jìn)制計(jì)數(shù)器模塊對(duì)待測(cè)信號(hào)的上升沿進(jìn)行計(jì)數(shù)。有兩個(gè)底層模塊:一個(gè)模塊產(chǎn)生0.5hz占空比為50%的閘門信號(hào);另一個(gè)模塊是09計(jì)數(shù)的十進(jìn)制計(jì)數(shù)器。利用層次設(shè)計(jì)的方法,結(jié)構(gòu)明了、思路清晰、便于分析。并且將復(fù)雜問題簡(jiǎn)單化、模塊化、結(jié)構(gòu)化,抽象問題具體化、簡(jiǎn)單化。特別是元件例化語句使結(jié)構(gòu)功能、端口連接一目了然,可以代碼復(fù)用,避免重復(fù)代碼,還可以增強(qiáng)代碼的可讀性。八、比較不同種描述方式的心得實(shí)驗(yàn)中結(jié)構(gòu)體的三種描述方式都用到了:數(shù)據(jù)流描述、結(jié)構(gòu)描述、行為描述。數(shù)據(jù)流描述(用布爾代數(shù)描述系統(tǒng)的輸入和輸出)邏輯清晰、描述簡(jiǎn)單。結(jié)構(gòu)描述(分層次描述,高層可調(diào)用低層模塊)使程
22、序模塊劃分清晰,便于從宏觀上把握程序功能,便于整體設(shè)計(jì)。行為描述更容易把握程序?qū)τ诓煌斎牖蛘咝盘?hào)所做的動(dòng)作。根據(jù)不同情況選擇不同描述方法可以使程序得到優(yōu)化。九、本次設(shè)計(jì)的收獲和不足本次設(shè)計(jì)最大的收獲就是在電子琴的基礎(chǔ)上對(duì)“分頻”以及“計(jì)數(shù)器”有了熟練掌握,進(jìn)一步熟悉了isplever軟件和isp器件的使用與下載方法,這樣會(huì)對(duì)后面兩個(gè)實(shí)驗(yàn)幫助很大。首次嘗試了例化語句的應(yīng)用,對(duì)vhdl的理解與應(yīng)用有上了一個(gè)一個(gè)不小的臺(tái)階。對(duì)硬件編程語言和c+等高級(jí)語言的區(qū)別與聯(lián)系有了較深刻的理解,學(xué)會(huì)了用“硬件的方式”(比如說并行語句)思考問題。另外,小組成員之間的配合也更加默契,效率也在不斷地提高。由于實(shí)驗(yàn)臺(tái)
23、只提供了500khz、50khz、5khz三種頻率的信號(hào),只進(jìn)行了3組測(cè)試,結(jié)果完全正確,而沒有再編寫程序產(chǎn)生其他頻率信號(hào)進(jìn)行測(cè)試。十、實(shí)驗(yàn)分工 實(shí)驗(yàn)調(diào)試由全體成員完成,其中頂層模塊主要由馬釗和羅亞群負(fù)責(zé),計(jì)數(shù)器模塊主要由袁泉和楊晨笛負(fù)責(zé)。實(shí)驗(yàn)三:交通燈控制器設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)采用狀態(tài)機(jī)方法設(shè)計(jì)時(shí)序邏輯電路。掌握isplever軟件的使用方法。掌握用vhdl語言設(shè)計(jì)數(shù)字邏輯電路。掌握isp器件的使用。二、實(shí)驗(yàn)所用器件和設(shè)備在系統(tǒng)可編程邏輯器件isp1032一片示波器一臺(tái)萬用表或邏輯筆一只tec-5實(shí)驗(yàn)系統(tǒng),或tds-2b數(shù)字電路實(shí)驗(yàn)系統(tǒng)一臺(tái)三、實(shí)驗(yàn)內(nèi)容以實(shí)驗(yàn)臺(tái)上的4個(gè)紅色電平指示燈,4個(gè)綠色
24、電平指示燈模仿路口的東南西北4個(gè)方向的紅,綠,黃交通燈。控制這些交通燈,使它們按下列規(guī)律亮,滅。(1) 初始狀態(tài)為4個(gè)方向的紅燈全亮,時(shí)間1s。(2) 東,西方向綠燈亮,南,北方向紅燈亮。東,西方向通車,時(shí)間5s。(3) 東,西方向黃燈閃爍,南,北方向紅燈,時(shí)間2s。(4) 東,西方向紅燈亮,南,北方向綠燈亮。南,北方向通車,時(shí)間5s。(5) 東,西方向紅燈閃爍,南,北方向黃燈閃爍,時(shí)間2s。(6) 返回(2),繼續(xù)運(yùn)行。(7) 如果發(fā)生緊急事件,例如救護(hù)車,警車通過,則按下單脈沖按鈕,使得東,南,西,北四個(gè)方向紅燈亮。緊急事件結(jié)束后,松開單脈沖按鈕,將恢復(fù)到被打斷的狀態(tài)繼續(xù)運(yùn)行。四、設(shè)計(jì)思路
25、(1) 熟悉掌握使用枚舉類型數(shù)據(jù)格式結(jié)合case語句實(shí)現(xiàn)狀態(tài)機(jī)設(shè)計(jì)。(2) 這是一個(gè)典型的時(shí)序狀態(tài)機(jī),一共6個(gè)大的狀態(tài)。由于各個(gè)狀態(tài)停留時(shí)間不同,但都是秒的倍數(shù)。可以考慮設(shè)計(jì)當(dāng)前狀態(tài)與下一狀態(tài)兩個(gè)枚舉型數(shù)據(jù),每秒刷新舊狀態(tài)值,各個(gè)狀態(tài)的timeout時(shí)對(duì)下一狀態(tài)賦值。(3) 黃燈閃爍可通過連續(xù)兩0.2s,滅0.2s實(shí)現(xiàn)。(4) 選擇實(shí)驗(yàn)臺(tái)上的5khz頻率時(shí)鐘,作為設(shè)計(jì)中分頻的初始時(shí)鐘。(5) 緊急事件發(fā)生時(shí),要注意保存必要的信息,已被緊急事件結(jié)束后,恢復(fù)到原狀態(tài)繼續(xù)運(yùn)行使用。 圖3-1 交通燈控制框圖五、設(shè)計(jì)方案library ieee;use ieee.std_logic_1164.all;
26、entity tralight is port ( restart,emergency,clk: in std_logic; -restart為復(fù)位信號(hào),emergency為緊急事件信號(hào),clk為實(shí)驗(yàn)臺(tái)上的5khz頻率時(shí)鐘, 作為設(shè)計(jì)中分頻的初始時(shí)鐘 light : out std_logic_vector(11 downto 0); -light輸出到實(shí)驗(yàn)臺(tái)上12個(gè)指示燈 architecture art of tralight is type trafficstate is (s0,s1,s2,s3,s4); -交通燈狀態(tài) signal current_state,next_state:
27、trafficstate; -當(dāng)前狀態(tài),轉(zhuǎn)移狀態(tài) signal en1,en2,en3,en4, c,c1,c2,c3,c4: std_logic; -en為計(jì)數(shù)器使能控制信號(hào),c為計(jì)數(shù)器進(jìn)位信號(hào) signal temp1: integer range 0 to 49999; -產(chǎn)生1s計(jì)數(shù)器時(shí)計(jì)數(shù) signal temp2: integer range 0 to 99999; -產(chǎn)生2s計(jì)數(shù)器時(shí)計(jì)數(shù) signal temp3: integer range 0 to 249999; -產(chǎn)生5s計(jì)數(shù)器時(shí)計(jì)數(shù) signal temp4: integer range 0 to 9999; -產(chǎn)生0.
28、2s計(jì)數(shù)器時(shí)計(jì)數(shù)begin -1s計(jì)數(shù)器,對(duì)5khz原始信號(hào)進(jìn)行5000分頻,每秒產(chǎn)生一個(gè)進(jìn)位脈沖c1 process(clk,en1) begin if (clkevent and clk=1) then if (temp1=49999 and en1=1 and emergency=0) then temp1=0; c1=1; elsif (en1=1 and emergency=0) then temp1=temp1+1; c1=0; end if; end if; if (en1=0) then c1=0; temp1=0; end if; end process; -2s計(jì)數(shù)器,對(duì)5
29、khz原始信號(hào)進(jìn)行10000分頻,每?jī)擅氘a(chǎn)生一個(gè)進(jìn)位脈沖c2 process(clk,en2) begin if (clkevent and clk=1) then if (temp2=99999 and en2=1 and emergency=0) then temp2=0; c2=1; elsif (en2=1and emergency=0) then temp2=temp2+1; c2=0; end if; end if; if (en2=0) then c2=0; temp2=0; end if; end process; -5s計(jì)數(shù)器,對(duì)5khz原始信號(hào)進(jìn)行25000分頻,每五秒產(chǎn)生
30、一個(gè)進(jìn)位脈沖c3 process(clk,en3) begin if (clkevent and clk=1) then if (temp3=249999 and en3=1 and emergency=0) then temp3=0; c3=1; elsif (en3=1 and emergency=0) then temp3=temp3+1; c3=0; end if; end if; if (en3=0) then temp3=0; c3=0; end if; end process; -0.2s計(jì)數(shù)器,對(duì)5khz原始信號(hào)進(jìn)行10000分頻,每0.2秒產(chǎn)生一個(gè)進(jìn)位脈沖c4 process
31、(clk,en4) begin if (clkevent and clk=1) then if (temp4=9999 and en4=1) then temp4=0; c4=not c4; elsif (en4=1) then temp4=temp4+1; end if; end if; end process; c=c1 or c2 or c3; -進(jìn)位信號(hào)控制狀態(tài)轉(zhuǎn)移 process (c,restart) -狀態(tài)轉(zhuǎn)移進(jìn)程 begin if (restart=1) then-復(fù)位信號(hào)使?fàn)顟B(tài)回到s0,即紅燈全亮1s current_state=s0; elsif (cevent and c
32、=0) then-遇到計(jì)數(shù)器進(jìn)位轉(zhuǎn)移到下一狀態(tài) current_state=next_state; end if; end process; process (current_state,emergency) -控制狀態(tài)轉(zhuǎn)移,信號(hào)燈亮滅 begin if(emergency=1) then-緊急狀態(tài)紅燈全亮 light -初始四個(gè)方向的紅燈全亮,延時(shí)1秒 light=000000001111; en2=0; en3=0; en1=1; next_state -東西方向綠燈亮,南北方向紅燈亮,延時(shí)5秒 en1=0; en2=0; light=010100001010; en3=1; next_s
33、tate -東西方向黃燈閃,南北方向紅燈亮,延時(shí)2秒 en3=0; en2=1; en4=1; light(11 downto 7 )=00000; light(6)=c4; light(5)=0; light(4)=c4; light(3 downto 0)=1010; next_state -東西方向紅燈亮,南北方向綠燈亮,延時(shí)5秒 en2=0; en4=0; en3=1; light=101000000101; next_state -東西方向紅燈閃,南北方向黃燈閃,延時(shí)2秒 en3=0; en2=1; en4=1; light(11 downto 8 )=0000; light(7)=
34、c4; light(6)=0; light(5)=c4; light(4 downto 0)=00101; next_state=s1; end case; end if; end process;end art;六、調(diào)試中出現(xiàn)的問題及解決方法這次實(shí)驗(yàn)總體思路比較清晰,不需要太多的輸入,只有復(fù)位和緊急狀態(tài)輸入,但是在具體實(shí)現(xiàn)上遇到了一些問題,有的地方有毛刺現(xiàn)象。 對(duì)于實(shí)驗(yàn)中要求的四個(gè)時(shí)間計(jì)數(shù)器,開始我們考慮的是只寫一個(gè)0.2s的計(jì)數(shù)器,放在例化元件里,狀態(tài)需要的時(shí)間可以多次調(diào)用該元件,但是實(shí)際操作中需要用控制信號(hào)控制計(jì)數(shù)器的運(yùn)行,在一個(gè)計(jì)數(shù)器里不好控制,最終我們采用四個(gè)計(jì)數(shù)器的進(jìn)程。 在交通燈
35、系統(tǒng)運(yùn)行過程中,我們發(fā)現(xiàn)同一個(gè)狀態(tài)的時(shí)間是不穩(wěn)定的,如5s狀態(tài)可能只進(jìn)行了2s就跳到下一個(gè)狀態(tài)。這其實(shí)是一個(gè)很嚴(yán)重的問題,也是我們最后才想明白的。解決方法是:控制信號(hào)使計(jì)數(shù)器停止工作時(shí)(既狀態(tài)轉(zhuǎn)移使en=0),將進(jìn)位信號(hào)c和計(jì)數(shù)的temp都清零。 一開始我們將緊急情況單獨(dú)設(shè)置為一個(gè)狀態(tài),再次狀態(tài)下所有計(jì)數(shù)器控制信號(hào)使計(jì)數(shù)器停止工作,但是由于問題2,計(jì)數(shù)的temp清零,無法保存現(xiàn)場(chǎng)。對(duì)于此問題,我們采用另一種方法,不轉(zhuǎn)移狀態(tài),只是單獨(dú)讓計(jì)數(shù)器停止工作,既讓計(jì)數(shù)器在 emergency=1的情況下,每當(dāng)來一個(gè)脈沖,計(jì)數(shù)器加1。 對(duì)于黃燈閃的情況,我們發(fā)現(xiàn)light(11 downto 0 )=00
36、00&c4&0&c4&00101并不能使黃燈閃爍,改為light(11 downto 8)= 0000;light(7)=c4;light(6)= 0;light(5)=c4; light(4 downto 0)= 00101;問題即可解決。七、層次設(shè)計(jì)的體會(huì)實(shí)驗(yàn)思路比較簡(jiǎn)單,我們沒有采用元件例化的方法,但是模塊劃分仍然很清晰。程序可分為計(jì)數(shù)器模塊,狀態(tài)轉(zhuǎn)移模塊,輸出模塊(控制燈亮滅)。層次設(shè)計(jì)將大問題分解為較小的問題,可以提高效率,使思路清晰。八、比較不同種描述方式的心得實(shí)驗(yàn)中結(jié)構(gòu)體的三種描述方式都用到了:數(shù)據(jù)流描述、結(jié)構(gòu)描述、行為描述。數(shù)據(jù)流描述邏輯清晰、描述簡(jiǎn)單。結(jié)構(gòu)描述使程序模塊劃分清
37、晰,便于從宏觀上把握程序功能,便于整體設(shè)計(jì)。行為描述更容易把握程序?qū)τ诓煌斎牖蛘咝盘?hào)所做的動(dòng)作。根據(jù)不同情況選擇不同描述方法可以使程序得到優(yōu)化。九、本次設(shè)計(jì)的收獲和不足 本次設(shè)計(jì)我們首次用到了枚舉類型數(shù)據(jù)格式結(jié)合case語句實(shí)現(xiàn)狀態(tài)機(jī)設(shè)計(jì),了解了狀態(tài)機(jī)設(shè)計(jì)的特點(diǎn)。可以使程序結(jié)構(gòu)更清晰,提高程序運(yùn)行效率,更加簡(jiǎn)單易讀。另外,程序中多個(gè)進(jìn)程同時(shí)進(jìn)行,使我們更加理解了硬件的執(zhí)行方式,什么是并行執(zhí)行。本次是實(shí)驗(yàn)小組成員共同討論的成果,從思路的提出,具體的設(shè)計(jì),問題的調(diào)試,每個(gè)人都提出了自己的看法,使得程序更加完善,效率更高。同時(shí),提高了我們的團(tuán)隊(duì)合作意識(shí),在實(shí)驗(yàn)設(shè)計(jì)過程中,我們得到了很多工作經(jīng)驗(yàn)。對(duì)
38、于每個(gè)時(shí)間狀態(tài),我們用了4個(gè)計(jì)數(shù)器,使得代碼效率有一定的降低。十、實(shí)驗(yàn)分工 實(shí)驗(yàn)調(diào)試由全體成員完成,其中計(jì)數(shù)器模塊主要由馬釗和袁泉負(fù)責(zé),狀態(tài)轉(zhuǎn)移模塊主要由羅亞群和楊晨笛負(fù)責(zé)。實(shí)驗(yàn)四:電子鐘設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康模?)掌握復(fù)雜的邏輯設(shè)計(jì)和調(diào)試(2)學(xué)習(xí)用原理圖+vhdl語言設(shè)計(jì)邏輯電路。(3)學(xué)習(xí)數(shù)字電路模塊層次設(shè)計(jì)。(4)掌握isplever軟件的只用方法。(5)熟悉isp器件的使用二、實(shí)驗(yàn)所用器件和設(shè)備在系統(tǒng)可編程邏輯器件isp1032一片示波器一臺(tái)萬用表或邏輯筆一只tec-5實(shí)驗(yàn)系統(tǒng),或tds-2b數(shù)字電路實(shí)驗(yàn)系統(tǒng)一臺(tái)三、實(shí)驗(yàn)內(nèi)容(1)設(shè)計(jì)并用isp1032實(shí)現(xiàn)一個(gè)電子鐘。電子鐘具有下述功能:a
39、) 試驗(yàn)臺(tái)上的6個(gè)數(shù)碼管顯示時(shí)、分、秒。b) 能使電子鐘復(fù)位(清零)。c) 能啟動(dòng)或者停止電子鐘運(yùn)行。d) 再電子鐘停止運(yùn)行狀態(tài)下,能夠修改時(shí)、分、秒的值。e) 具有報(bào)時(shí)功能,整點(diǎn)時(shí)喇叭鳴叫。(2)要求整個(gè)設(shè)計(jì)分為若干模塊。頂層模塊用原理圖設(shè)計(jì),底層模塊用vhdl語言設(shè)計(jì)。(3)在試驗(yàn)臺(tái)上調(diào)試設(shè)計(jì)。圖4-1 電子鐘設(shè)計(jì)框圖四、設(shè)計(jì)思路(1)首先完成時(shí)鐘各組成計(jì)數(shù)器的設(shè)計(jì),最基本的為1s計(jì)時(shí)器,通過對(duì)5khz時(shí)鐘信號(hào)二分頻得到,構(gòu)成了整個(gè)時(shí)鐘的計(jì)時(shí)基礎(chǔ)。其次由于時(shí)鐘的分和秒為60進(jìn)制,小時(shí)為24進(jìn)制,故完成60和24進(jìn)制的計(jì)數(shù)器。(2)將各計(jì)數(shù)器按順序組合構(gòu)成基本的時(shí)鐘系統(tǒng),并將得到的相應(yīng)的時(shí)、
40、分、秒信號(hào)與對(duì)應(yīng)的輸出相連,最后通過數(shù)碼管顯示。(3)完成了基本的時(shí)鐘系統(tǒng)后,加入相應(yīng)的控制信號(hào),首先是清零信號(hào),采用了電平的觸發(fā)方式,高電平清零,低電平正常工作。其次是調(diào)表控制信號(hào),采用了24譯碼器:“00”為正常工作狀態(tài),“01”狀態(tài)下對(duì)小時(shí)進(jìn)行修改,“10”狀態(tài)下對(duì)分鐘進(jìn)行修改,“11”狀態(tài)下對(duì)秒進(jìn)行修改。其中采用信號(hào)上升沿觸發(fā)的方式進(jìn)行狀態(tài)的轉(zhuǎn)換,并采用相同的方式對(duì)時(shí)鐘的數(shù)值進(jìn)行修改。(4)最后,完成報(bào)時(shí)功能,通過分鐘向小時(shí)的進(jìn)位來產(chǎn)生響鈴的控制信號(hào),此信號(hào)持續(xù)一分鐘,為了避免響鈴時(shí)間過長(zhǎng),將響鈴時(shí)間控制在10s。此外,為了打到特定的響鈴效果,響鈴進(jìn)程采用了50khz的時(shí)鐘信號(hào)控制響鈴
41、的音調(diào),并將其二分頻以提高響度。五、設(shè)計(jì)方案模塊:頂層模塊 clocklibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-時(shí)鐘主體部分-entity clock is port(clk,clr,adj,clk1 : in std_logic; -clk為5khz的時(shí)鐘信號(hào),clr為清零信號(hào),adj為置數(shù)脈沖,clk1為以50khz時(shí)鐘信號(hào)控制響鈴 choice : in std_logic; -用來選擇時(shí)鐘狀態(tài)的脈沖信號(hào) lighthour : out std_logic_vector(10 dow
42、nto 0); lightmin : out std_logic_vector(7 downto 0); lightsec : out std_logic_vector(7 downto 0); -對(duì)小時(shí),分鐘和秒的輸出信號(hào) ring : out std_logic); -響鈴信號(hào) attribute loc : string; attribute loc of ring : signal is p74; attribute loc of choice : signal is p54; attribute loc of lighthour : signal is p9 p41 p6 p8 p12 p68 p5 p60 p10 p52 p56; attribute loc of lightmin : signal is p32 p48 p33 p79 p18 p70 p46 p83; attribute loc of lightsec : signal is p4 p14 p75 p37 p71 p47 p50 p29; attribute loc of clk : signal i
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年城市污水處理廠智能化改造對(duì)城市景觀的影響報(bào)告
- 2025年美妝個(gè)性化定制服務(wù)模式案例分析報(bào)告001
- 腎上腺調(diào)理行業(yè)策略研究:如何優(yōu)化職場(chǎng)人群健康管理方案
- 高二期末理科數(shù)學(xué)試卷
- 高三廣西數(shù)學(xué)試卷
- 第三套高考數(shù)學(xué)試卷
- 東湖小學(xué)面試數(shù)學(xué)試卷
- 光正小學(xué)升初中數(shù)學(xué)試卷
- 廣州市增城區(qū)合生育才學(xué)校招聘制教師筆試真題2024
- 2024年吉林省特崗教師招聘筆試真題
- 沙漠治理防塵網(wǎng)安裝協(xié)議
- 2023-2024學(xué)年人教版數(shù)學(xué)八年級(jí)下冊(cè)期末復(fù)習(xí)試卷(含答案)
- 2024年租賃業(yè)務(wù)操作手冊(cè)3篇
- 我的植物朋友向日葵400字
- 作家助手簽約標(biāo)準(zhǔn)合同范例
- 工廠供電期末試題A附答案
- 醫(yī)院培訓(xùn)課件:《外科手術(shù)部位感染預(yù)防與控制》
- 臨床輸血技術(shù)規(guī)范培訓(xùn)課件
- 2024年高考真題-物理(貴州卷) 含解析
- 雨污水工程安全培訓(xùn)
- 華南理工大學(xué)《機(jī)器學(xué)習(xí)》2022-2023學(xué)年期末試卷
評(píng)論
0/150
提交評(píng)論