




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、FPGA課程設計實驗報告題目: VHDL編寫的數(shù)字鐘設計 學院: 電子信息學院 專業(yè): 電子與通訊工程 姓名: 朱振軍 基于FPGA的VHDL數(shù)字鐘設計 一、功能介紹 1在七段數(shù)碼管上具有時-分-秒的依次顯示。 2時、分、秒的個位記滿十向高位進一,分、秒的十位記滿五向高位進一,小時按24進制計數(shù),分、秒按60進制計數(shù)。 3整點報時,當計數(shù)到整點時揚聲器發(fā)出響聲。 4時間設置:可以通過按鍵手動調節(jié)秒和分的數(shù)值。此功能中可通過按鍵實現(xiàn)整體清零和暫停的功能。 5LED燈循環(huán)顯示:在時鐘正常計數(shù)下,LED燈被依次循環(huán)點亮。 待增加功能:1. 實現(xiàn)手動調節(jié)鬧鈴時間,在制定時間使揚聲器發(fā)聲。2. 實現(xiàn)微妙
2、的快速計數(shù)功能,可實現(xiàn)暫停、保存當前時間、繼續(xù)計數(shù)的功能。二、設計方案 本文數(shù)字鐘的設計采用了自頂向下分模塊的設計。底層是實現(xiàn)各功能的模塊,各模塊由vhdl語言編程實現(xiàn):頂層采用原理圖形式調用。其中底層模塊包括秒、分、時三個計數(shù)器模塊、按鍵去抖動模塊、按鍵控制模塊、時鐘分頻模塊、數(shù)碼管顯示模塊共7個模塊。設計框圖如下: 圖一 數(shù)字鐘系統(tǒng)設計框圖由圖1可以清晰的看到數(shù)字鐘系統(tǒng)設計中各功能模塊間連接關系。系統(tǒng)時鐘50MHZ經(jīng)過分頻后產(chǎn)生1秒的時鐘信號,1秒的時鐘信號作為秒計數(shù)模塊的輸入信號,秒計數(shù)模塊產(chǎn)生的進位信號作為分計數(shù)模塊的輸入信號,分計數(shù)模塊的進位信號作為時計數(shù)模塊的輸入信號。秒計數(shù)模塊、
3、分計數(shù)模塊、時計數(shù)模塊的計數(shù)輸出分別送到顯示模塊。由于設計中要使用按鍵進行調節(jié)時間,而按鍵的動作過程中存在產(chǎn)生得脈沖的不穩(wěn)定問題,所以就牽扯到按鍵去抖動的問題,對此系統(tǒng)中設置了按鍵去抖動模塊,按鍵去抖動模塊產(chǎn)生穩(wěn)定的脈沖信號送入按鍵控制模塊,按鍵控制模塊根據(jù)按鍵的動作對秒、分、時進行調節(jié)。 圖二 數(shù)字鐘的頂層設計原理圖三、設計過程由數(shù)字鐘的頂層設計原理圖可知:系統(tǒng)的外部輸入即為系統(tǒng)的時鐘信號CLK =50MHZ,系統(tǒng)的外部輸出有蜂鳴器信號buzzer,LED顯示信號LED3.1和shan(與按鍵去抖動模塊的o3相連),數(shù)碼管顯示信號xianshi7.0,數(shù)碼管位選信號xuanze7.0。 下面
4、將對內部功能模塊進行詳細說明;1.分頻模塊pinlv對系統(tǒng)的時鐘50MHZ進行分頻,設置不同長度的計數(shù)值,當系統(tǒng)時鐘clk有變化時計數(shù)器開始計數(shù),當計數(shù)到某個值時輸出一個信號,計數(shù)值不同輸出信號的周期也就不同,從而實現(xiàn)了對系統(tǒng)時鐘進行不同的分頻,產(chǎn)生不同頻率的信號。由VHDL語言生成的模塊圖和程序說明如下: 圖三 分頻模塊 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pinlv isport( clk:in std_logic;-系統(tǒng)時鐘輸入端口 clk2ms:out std_l
5、ogic; clk500ms:out std_logic; clk1s:out std_logic);-各頻率信號的輸出端口 end; architecture beh of pinlv isbeginp1:process(clk) 進程p1variable count1:integer range 0 to 49999999;begin if(clkevent and clk=1)then count1:=count1+1;-在clk 的上升沿計數(shù) if count1=24999999 then clk1s=0; elsif count1=49999999 then clk1s=1; els
6、e count1:=0;-產(chǎn)生周期為1s的時鐘信號 end if; end if; end process p1;-結束進程p1 p2:process(clk)進程p2 variable count2:integer range 0 to 99999; begin if(clkevent and clk=1)then count2:=count2+1;-在clk上升沿計數(shù) if count2=49999 then clk2ms=0;elsif count2=99999 then clk2ms=1;-產(chǎn)生周期為2ms的掃描信號 end if; end if; end process p2;-結束
7、進程p2 p3:process(clk)進程p3 variable count3:integer range 0 to 24999999; begin if(clkevent and clk=1)then count3:=count3+1;在clk上升沿計數(shù) if count3=12499999 then clk500ms=0; elsif count3=24999999 then clk500ms2499999 then o1=0; else o12499999 then o2=0; else o22499999 then o3=0; else o32499999 then o4=0; el
8、se o4=1; -延時0.5s end if;cant1:=cant1+1; -加一計數(shù)cant2:=cant2+1; -加一計數(shù)cant3:=cant3+1; -加一計數(shù)cant4:=cant4+1; -加一計數(shù) end if;end process;end beh; -設置計數(shù)初值在quartus II開發(fā)環(huán)境中進行仿真驗證 圖五 按鍵去抖動仿真效果圖由于0.5s太長,在本仿真中設置了很小的一個量10clk,從圖中可以看出基本實現(xiàn)了按鍵去抖動的效果。無論按鍵怎么抖動,輸出總是保持穩(wěn)態(tài)10clk,當下一個觸發(fā)來了以后,就可以觸發(fā)單穩(wěn)態(tài)。3,按鍵控制模塊self1本設計中使用了兩個按鍵進行對
9、時鐘的暫停和調秒操作,當ok2按下時時鐘暫停,再按ok3則進行秒個位的加一計數(shù),每按一次進行加一處理。當調節(jié)好時間后,在按ok2鍵重新開始計數(shù)。由VHDL語言生成的模塊圖和程序說明如下: 圖六 按鍵控制模塊 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity self1 isport(c:in std_logic;ok2:in std_logic;ok3:in std_logic;ck:out std_logic);end ;-設置端口architecture bea of self1
10、issignal m:std_logic;signal t:std_logic;beginp1:process(ok2,ok3,c)ok2和ok3觸發(fā)進程beginif ok2event and ok2=0 then m=not m;-由ok2 的動作產(chǎn)生m的電平信號 end if; if m=1 then ck=not(ok3);-把按鍵ok3的脈沖信號給輸出 else ck=c;-否則把正常計數(shù)時鐘給輸出 end if;end process p1;-結束進程end bea;4,秒、分六十進制模塊cantsixty本設中秒、分的六十進制是由個位的十進制和十位的六進制進行組合實現(xiàn)的。當個位記
11、到9時自動向高位進一,同時個位自動清零。當十位記到5并且個位記到9時,自動產(chǎn)生一個進位脈沖,同時個位和十位分別從零開始重新計數(shù)。由VHDL語言生成的模塊圖和程序說明如下: 圖七 六十進制模塊library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cantsixty isport(clk:in std_logic; reset:in std_logic; out1:out std_logic_vector(3 downto 0); out2:out std_logic_vector(3 dow
12、nto 0); c:out std_logic); end;architecture beh of cantsixty issignal ss1,ss2:std_logic_vector( 3 downto 0);beginp1:process(clk,reset) beginif(reset=0)then ss1=0000;ss2=0000; elsif(clkevent and clk=1)then if ss1=1001 and ss2=0101 then c=1;-當計數(shù)到59時產(chǎn)生進位信號 else c=0;-否則不產(chǎn)生 end if; if ss1=1001 then ss1=00
13、00; if ss2=0101 then ss2=0000; else ss2=ss2+1; end if; else ss1=ss1+1;-計數(shù)過程 end if;end if;end process p1;-結束進程out1=ss1;out2=ss2;-把信號送輸出end beh;在quartus II開發(fā)環(huán)境中進行仿真驗證: 圖八 六十進制波形仿真圖由上圖可見,當1s的時鐘信號加入時,個位out1從0到9不斷循環(huán),而且當個位out1記到9時產(chǎn)生一個進位信號 使十位out2加一,以此類推就實現(xiàn)了六十進制計數(shù)?;具_到了正確計數(shù)的理想效果。5.時計數(shù)模塊hourtwenty時計數(shù)模塊是二十四
14、進制相對復雜一點,因為當十位0或著1時個位需要記到9并產(chǎn)生進位信號,當十位是2時,個位記到3時,就全部從零開始重新計數(shù)。即是在十位為不同值時個位兩種計數(shù)過程。由VHDL語言生成的模塊圖和程序說明如下: 圖九 二十四進制波形仿真圖 在quartus II開發(fā)環(huán)境中進行仿真驗證: 圖十 二十四進制波形仿真圖 由上圖看出十位為0或1時,個位記到9時,十位才進行加一計數(shù),但當十位為2時,個位記到3時,十位變成了0,個位又從0重新開始計數(shù),這樣就實現(xiàn)了二十四進制的計數(shù)。從圖形的顯示波形可知,設計基本達到了正確計數(shù)的功能。6.秒、分、時組合后的仿真驗證 把設計的秒、分、時模塊連接起來,再通過仿真驗證,各模
15、塊間的進位是否正確連接后的原理圖如下 圖十一 秒、分、時組合后原理圖在quartus II開發(fā)環(huán)境中進行仿真驗證: 圖十二 組合后波形仿真圖由于需要設置很長的仿真時間,才能完全觀察到進位信號,本次仿真只截取了一小部分,觀察不到分模塊向時模塊的進位。由仿真結果圖可以看到,秒模塊向分鐘模塊的正常進位,以及分模塊的正常計數(shù),所以各模塊連接后的計數(shù)狀態(tài)也符合設計的要求,基本實現(xiàn)了正常計數(shù)。7 .數(shù)碼管顯示模塊 本模塊中包含數(shù)碼管的段選和位選設計,Led燈循環(huán)設計,以及整點報時的設計。模塊的輸入信號有數(shù)碼管掃描頻率clk2ms,秒、分、時各模塊的個位和十位輸入,以及由分模塊向時模塊產(chǎn)生的進位脈沖信號。由
16、VHDL語言生成的模塊圖和程序說明如下: 圖十三 數(shù)碼管顯示原理圖 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qudong isport(s1,s2,m1,m2,h1,h2:in std_logic_vector(3 downto 0); clk2ms: in std_logic; xiang:in std_logic; led:out std_logic_vector(3 downto 1); buzzer:out std_logic; xianshi:out std_log
17、ic_vector(7 downto 0); xuanze:out std_logic_vector( 7 downto 0); end qudong; architecture behav of qudong issignal sel:std_logic_vector( 2 downto 0);signal A:std_logic_vector( 3 downto 0);signal t:std_logic_vector ( 11 downto 0);signal f:std_logic_vector(1 downto 0);signal count1:std_logic_vector(1
18、downto 0);beginp1:process(clk2ms)beginif clk2msevent and clk2ms=1 then sel=sel+1;t=t+1; if t=110010000000 then t0);end if;end if;f=t(11)&t(10);if f=01 then led(3)=0;else led(3)=1;end if;if f=10 then led(2)=0;else led(2)=1;end if;if f=11 then led(1)=0; else led(1)xuanze=11111110; Axuanze=11111101; Ax
19、uanze=11111011; Axuanze=11110111; Axuanze=11101111; Axuanze=11011111; Axuanze=10111111; Axuanze=01111111; Anull;end case;end process p2;p3:process(A)begincase A iswhen 0000 = xianshi xianshi xianshi xianshi xianshi xianshi xianshi xianshi xianshi xianshi xianshi xianshi null; -數(shù)碼管的段選設計end case;end process p3;P4:process(xiang)begin if xiang=1 then buzzer=0; -當進位信號xiang為1時就把低電平給buzzer讓蜂鳴器響 else
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 沖床買賣合同范本
- 勞動合同范本文書
- 單位出售住宅合同范本
- 企業(yè)設計顧問合同范本
- 單位采購電子設備合同范本
- 裝修設計報價合同范本
- 租房無責任合同范本
- 肺部感染的護理課件
- 2024年年底音樂報告
- 2025至2030年中國慢回彈棉數(shù)據(jù)監(jiān)測研究報告
- 室上性心動過速診斷及治療中國專家共識2021要點解讀
- 一步裙結構制圖
- FZT 14035-2017 棉與滌爛花印染布
- (2024年)健康評估教學教案心電圖檢查教案
- 政府機關保安服務項目整體服務方案
- 村民委員會組織法解讀(修改)課件
- 旅店會客登記制度
- 無人機校企合作方案
- 城市軌道交通員工職業(yè)素養(yǎng)(高職)全套教學課件
- 工程力學期末考試試卷A及答案
- 氣體充裝安全操作規(guī)程
評論
0/150
提交評論