基于verilog數(shù)字鐘設計報告_第1頁
基于verilog數(shù)字鐘設計報告_第2頁
基于verilog數(shù)字鐘設計報告_第3頁
基于verilog數(shù)字鐘設計報告_第4頁
基于verilog數(shù)字鐘設計報告_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1、 課程設計目標 1. 熟悉并掌握verilog 硬件描述語言2. 熟悉quartus 軟件開發(fā)環(huán)境3. 學會設計大中規(guī)模的數(shù)字電路,并領會其中的設計思想 二、課程設計實現(xiàn)的功能(1) 設計一個數(shù)碼管實時顯示時、分、秒的數(shù)字時鐘(24小時顯示模式);(2) 可以調(diào)節(jié)小時,分鐘。(3) 能夠進行24小時和12小時的顯示切換。(4) 可以設置任意時刻鬧鐘,并且有開關鬧鐘功能。(5) 有整點報時功能,幾點鐘LED燈閃亮幾下。(6) 有復位按鍵,復位后時間從零開始計時,但鬧鐘設置時間不變。3、 設計原理:1、總原理框圖:譯碼顯示模塊切換12進制顯示復位分鐘校正小時校正分頻模塊計數(shù)模塊是輸出整點報時信

2、號到達整點輸出鬧鐘信號是否到鬧鐘時間設置鬧鐘分鐘設置鬧鐘小時模式選擇模塊是2、 各個子模塊設計: (1)、分頻模塊 :分頻模塊的作用主要是要獲得各種頻率的時鐘信號。輸入信號為50MHZ的信號,要想獲得1HZ的信號作為秒脈沖計時,則要對50MHZ信號分頻。通過計數(shù)的方式,當計數(shù)從0開始到24 999999時,1HZ信號取反一次,計數(shù)又從0開始,如此循環(huán),就可以得到1HZ脈沖信號。對于其他信號也是如此,只是計數(shù)值不一樣,得到的分頻信號不同。部分代碼如下: always(posedge _50MHZ or negedge nCR)begin if(nCR) begin Q1=32d24999999)

3、 begin Q1=32d0; _1HZ=_1HZ; end else begin Q1=Q1+1d1; end(2) 、計數(shù)模塊 : 秒計數(shù):在1HZ脈沖下進行秒計時,當計時達到59秒后,在下一個脈沖來臨變0,并發(fā)出一個脈沖信號,可供下面分鐘計數(shù)作為輸入脈沖信號計時。分鐘計數(shù):在輸入脈沖下,分鐘開始計時,當計時達到59后,在下一個脈沖來臨變0,并發(fā)出一個脈沖,供小時計數(shù)的輸入脈沖新號。小時計數(shù):脈沖信號來臨時,計數(shù)加1,達到23后在下一個脈沖的作用下清零,從新計時。如果有復位信號,則時分秒全部清零。部分代碼如下: module second(cp,reset,mode_flag,BT2,SH

4、,SL,co);input cp,reset,BT2;input3:0mode_flag;output co=1b0;/輸出脈沖信號reg co;output 3:0SL,SH; /輸出秒計時的十位、各位reg3:0SH,SL; reg7:0cnt;always(posedge cp or negedge reset )beginif(!reset) begin /有復位,清零 cnt=8d0; SH=4d0; SL=4d0;endelse if(mode_flag=4b0010)&(!BT2) begin/ 如果分鐘調(diào)節(jié),秒清零 cnt=8d0; SH=4d0; SL=4d0;end if(

5、cnt=8d59) /計時達到59,下一個脈沖下從新計時 begin cnt=8d0; SH=4d0; SL=4d0; co=1b1; end else begin co=1b0; cnt=cnt+8d1; SL=cnt%10; /秒十位 SH=cnt/10; /秒各位 end end end endmodule 分計時和小時計時代碼和上述類似,不再舉出。second u4(_1HZ,reset,mode_flag,Keydone2,SH24,SL24,co1);minute u5(co11,reset,MH24,ML24,co2);hour u6(co22,reset,HH24,HL24);

6、 (3) 、模式選擇模塊 :同過一個模式檔按鍵MODE,按一下產(chǎn)生對應一種模式mode_flag,并且可以循環(huán)。在不同的模式下可以進行不同的操作。其中mode_flag=40000為正常顯示計時,mode_flag=40001為小時調(diào)鐘模式,mode_flag=400010為分鐘調(diào)鐘模,mode_flag=40011為鬧鐘小時設置模式,mode_flag=40100為鬧鐘分鐘設置模式。模式產(chǎn)生:module mode (MODE,mode_flag); input MODE ; output 3:0mode_flag; reg 3:0mode_flag; always (negedge MOD

7、E )begin /如果檢測到有按鍵按下mode_flag = mode_flag+ 4b1; /模式值加1if(mode_flag = 4b0101) /到最后一個模式后返回第一的模式mode_flag = 2b0; ndEndmodule模式選擇:module mode_choose(mode_flag,BT2,_250ms,co1,co2,set_co2,co11,co22,co111,co222); input 3:0mode_flag; /輸入模式方式,響應對應操作 input BT2,_250ms,co1,co2,set_co2; /調(diào)節(jié)按鈕,時鐘信號,正常計時分鐘脈沖信號, 正常

8、計時小時脈沖信號,鬧鐘設置分鐘進位信號。 output co11,co22,co111,co222; / 分鐘脈沖信號,小時脈沖信號,鬧鐘設置分鐘脈沖信號,鬧鐘設置小時脈沖信號; supply1 Vdd; reg co11,co22,co111,co222; always(mode_flag)begin case (mode_flag) 4b0001: begin if(BT2) co22=_250ms; /小時調(diào)鐘模式,有按鍵,則脈沖為250ms else begin co22=co2; /沒有按鍵,正常計時 co11=co1; end end 4b0010: begin if(BT2) b

9、egin co11=_250ms; /小時調(diào)鐘模式,有按鍵,則脈沖為250ms co22=co2;end else begin co11=co1; /沒有按鍵,正常計時 co22=co2; end end 4b0011: begin co22=co2; co11=co1; if(BT2) co222=_250ms; / 鬧鐘小時設置信號 else co222=set_co2;end 4b0100: begin co22=co2; co11=co1; if(BT2) co111=_250ms; /鬧鐘分鐘設置信號 else co111=Vdd; end default :begin co11=c

10、o1; co22=co2; end endcase end endmodule (4) 、任意鬧鐘模塊 : 一、設置鬧鐘:當對應于鬧鐘設置模式mode_flag=40011和4b0100時,有設置信號輸入時,則開始設置。對應代碼:module set_naozhong(co111,co222,set_HH,set_HL,set_MH,set_ML,co2); input co111,co222; / 鬧鐘分鐘,小時設置信號 output 3:0set_HH,set_HL,set_MH,set_ML; /輸出相應的鬧鐘設置時間 supply1 Vdd; output co2; minute (c

11、o111,Vdd,set_MH,set_ML,co2);hour (co222,Vdd,set_HH,set_HL); endmodule 二、鬧鐘響應:當正常計時達到鬧鐘設置得時間后,通過比較二者之間的時間,相等,則產(chǎn)生一個鬧鐘允許響應信號,在鬧鐘開關打開和鬧鐘允許響應信號同時滿足的情況下,則產(chǎn)生鬧鐘響應信號,并送到相應的鬧鐘設備LED燈。如果鬧鐘檔處于關閉狀態(tài),則不會產(chǎn)生鬧鐘響應信號。響應代碼如下:module naozhong (Alarm_ctr,_1HZ,set_HH,set_HL,set_MH,set_ML,HH24,HL24,MH24,ML24,nao_signal); inpu

12、t Alarm_ctr,_1HZ; input 3:0 set_HH,set_HL,set_MH,set_ML; input 3:0 HH24,HL24,MH24,ML24; output nao_signal; reg signal; reg nao_signal; reg 16:0 Q; /計數(shù),調(diào)節(jié)鬧鐘響應時間長度 always(posedge _1HZ)begin if(signal)&(Alarm_ctr)begin if(set_HH=HH24)&(set_HL=HL24)&(set_MH=MH24)&(set_ML=ML24)signal=1b1 /達到鬧鐘設置時間,產(chǎn)生鬧鐘允許

13、響應信號 else signal=1b0;end /未達到,不產(chǎn)生 else if(signal)&(Alarm_ctr)begin /鬧鐘開關打開和鬧鐘允許響應信號同時滿足 nao_signal=8d720)begin /響應時間完畢,關閉鬧鐘允許響應信號 Q=16b0; signal=1b0;end end else begin signal=1b0; nao_signal=1b0;end end endmodule (5) 、整點報時模塊 :檢測分鐘和秒鐘計數(shù)是否都達到了59,然后再下一個秒脈沖的作用下發(fā)出整點報時信號,送到LED。并開始計數(shù),計數(shù)達到報時信號響應次數(shù)后,終止報時信號。部

14、分代碼如下: always(posedge _500ms)begin if(SH*10+SL)=8d59)&(MH*10+ML)=8d59)begin Q1=7b0; bao=1b1;end /允許報時 else if(Q110*HH+HL)&(bao) begin bao_signal=bao_signal; / 產(chǎn)生報時信號 Q1=Q1+bao_signal; /響一次計數(shù)加一 end else if(Q1=(10*HH+HL) /報時次數(shù)達到整點時數(shù),終止信號 bao=1b0; else begin bao_signal=1b0; end End(6) 、1224小時切換模塊:將24小時

15、切換成12小時,并存入相應的寄存器。如果撥上切換顯示檔,則切換顯示。 相應代碼如下: module hour12_24(HH24,HL24,HH12,HL12); input 3:0 HH24,HL24; output 3:0 HH12,HL12; reg 3:0 HH12,HL12; always(HH24 or HL24)begin if(HH24*10+HL24)=12) begin HH12=HH24; HL12=13)&(HH24*10+HL24)=19) begin HH12=4d0; HL12=19)&(HH24*10+HL24)=21) begin HH12=4d0; HL12

16、=HL24+4d8; end else begin HH12=HH24-4d1; HL12=HL24-4d2; end end endmodule (7) 、譯碼顯示模塊:一、數(shù)碼管顯示:通過傳入響應的4位十進制數(shù),運用case語句轉(zhuǎn)換輸出相應的8位二進制顯示碼,送入數(shù)碼管顯示。 代碼如下: module SEG7_LUT(oSEG1,iDIG); input3:0iDIG; /輸入要顯示的數(shù) output7:0oSEG1; reg7:0oSEG; wire 7:0oSEG1; always (iDIG) begincase(iDIG) 4h0: oSEG = 8b00111111;4h1:

17、oSEG = 8b00000110;4h2: oSEG = 8b01011011; 4h3: oSEG = 8b01001111; 4h4: oSEG = 8b01100110;4h5: oSEG = 8b01101101;4h6: oSEG = 8b01111101; 4h7: oSEG = 8b00000111;4h8: oSEG = 8b01111111;4h9: oSEG = 8b01101111;endcase end assign oSEG1=oSEG; /由于是共陰極數(shù)碼管,低電平顯示,所以取反Endmodule 二、LED顯示 :module display_LED(s_out

18、,s_int);input3:0s_int;output3:0s_out;reg3:0s_out;wire 3:0s_out1;always (s_int)begincase(s_int) 4h0:s_out=4b0000;4h1:s_out=4b0001;4h2:s_out=4b0010;4h3:s_out=4b0011;4h4:s_out=4b0100;4h5:s_out=4b0101;4h6:s_out=4b0110;4h7:s_out=4b0111;4h8:s_out=4b1000;4h9:s_out=4b1001;endcaseendassign s_out1=s_out;Endmo

19、dule設計過程常見問題:(1) 要注意編寫程序的過程中begin和end配對問題,類似于C語言中的括號匹配問題,在編寫計數(shù)模塊時編譯不通過,最后檢查出是缺少一個end結(jié)束符號,經(jīng)修改后編譯通過。(2)Verilog HDL語言編寫時的語法問題。在最初的計時模塊的程序設計中,將小時、分鐘的調(diào)節(jié)信號放在了另外的一個always語句塊中,編譯無法通過,經(jīng)查閱資料,在Verilog HDL語言的編寫中應該注意不同的always語句塊不可以對同一個變量進行操作,即一個變量不可以經(jīng)過兩個always語句塊操作。將對小時和分鐘調(diào)節(jié)信號的操作與計時放在同一個語句塊中,編譯通過。(3) 數(shù)碼管剛開始時顯示于實

20、際計數(shù)不一樣,主要是由譯碼錯誤造成的原因。數(shù)碼管一開始不變化,說明計數(shù)沒有進行,是由于分鐘的輸入脈沖信號錯誤引起。心得體會這次的課程設計結(jié)束了,在這次的設計中我學會了很多東西。首先是對Verilog HDL語言的設計思想有了深入理解,將這種自頂向下的設計理念運用于實踐中,設計多功能數(shù)字鐘,突出了Verilog HDL作為硬件描述語言的良好可讀性和可移植性,對上學期所學的而理論知識有了深刻的理解。其次是對Verilog HDL語言的語法熟悉,在這次的課程設計中,我學習到很多Verilog HDL語言的語法知識,比如在兩個不同的語句塊中不能對同一個變量進行操作,比如在用Verilog HDL語言中

21、編寫程序時要注意begin和end語句的匹配問題,在使用Verilog HDL語言時不可以使用中文注釋等等。對于這種語言的學習也有了很大的幫助。最后是設計作品時的設計邏輯和設計思想,在選擇不同的系統(tǒng)方案時要綜合考慮,選擇最優(yōu)方案。各個模塊的實現(xiàn)也要考慮綜合情況而制定出最符合實際情況的實現(xiàn)方案,方案間要進行對比、實踐,最終確定。在這次的課程設計中我不僅學習到有關程序編寫以及設計方面的邏輯思維,對系統(tǒng)功能的實現(xiàn)也有了較為深入的了解,對各模塊的調(diào)試等也學習到不少東西,總之,從這次設計中學到很多東西,也鞏固了我的理論學習。附代碼:總模塊:module clock(clk,reset,MODE,Alar

22、m_ctr,BT2,H12_24,DSH,DSL,DMH,DML,DHH,DHL,dian,bao_signal,nao_signal); input clk;/50MHz input reset,MODE,Alarm_ctr,BT2,H12_24;/復位鍵,模式選擇按鈕,鬧鐘開關檔,調(diào)節(jié)按 鈕 ,1224小時切換檔 output 7:0DMH,DML,DHH,DHL; /4個數(shù)碼管顯示輸入信號 output dian,bao_signal,nao_signal; /時分間隔點,報時信號,鬧鐘信號 output 3:0DSH,DSL; /秒鐘輸出信號 wire 3:0 SH,SL,MH,ML,

23、HH,HL; wire 3:0 LED_mode; wire 3:0 HH12,HL12,HH24,HL24,MH24,ML24,SH24,SL24; wire 3:0 set_HH,set_HL,set_MH,set_ML; wire _1HZ,_10ms,_250ms,_500ms; wire Keydone1; wire Keydone2; wire co1,co11,co111,co2,co22,co222,set_co2; wire 3:0mode_flag; assign dian=1b0; devide_f u1(_1HZ,_10ms,_250ms,_500ms,reset,cl

24、k); /分頻,得到4種不同頻率的時鐘信號key_press u2(_10ms,MODE,Keydone1); /模式檔按鈕去抖動key_press u20(_10ms,BT2,Keydone2); /調(diào)節(jié)按鈕去除抖動mode u3(Keydone1,mode_flag); /通過模式按鈕產(chǎn)生不同模式second u4(_1HZ,reset,mode_flag,Keydone2,SH24,SL24,co1); /秒計時minute u5(co11,reset,MH24,ML24,co2); /分計時hour u6(co22,reset,HH24,HL24); /小時計時 SEG7_LUT u7

25、(DML,ML); /4個數(shù)碼管顯示SEG7_LUT u8(DMH,MH);SEG7_LUT u9(DHL,HL);SEG7_LUT u10(DHH,HH);display_LED u11(DSL,SL); /LED燈顯示秒或模式燈display_LED u12(DSH,SH);mode_choose u13(mode_flag,Keydone2,_250ms,co1,co2,set_co2,co11,co22,co111,co222); /選擇模式進行不同操作 hour12_24 u14(HH24,HL24,HH12,HL12); /12-24小時切換boshi u15(HH,HL,MH,M

26、L,SH,SL,_1HZ,bao_signal); /整點報時set_naozhong u16(co111,co222,set_HH,set_HL,set_MH,set_ML,set_co2); /設置鬧鐘時間Naozhong u17(Alarm_ctr,_500ms,set_HH,set_HL,set_MH,set_ML,HH24,HL24,MH24,ML24,nao_signal); /任意鬧鐘響應LUT_mode u18(mode_flag,H12_24,HH12,HL12,HH24,HL24,MH24,ML24,set_HH,set_HL,set_MH,set_ML,MH,ML,HH,

27、HL);/通過模式選擇數(shù)碼管顯示 LED_mode u19(mode_flag,SH24,SL24,SH,SL); 模式選擇LED燈顯示Endmodule分頻模塊:module devide_f(_1HZ,_10ms,_250ms,_500ms,nCR,_50MHZ); input _50MHZ,nCR; output _1HZ,_10ms,_250ms,_500ms; reg _1HZ,_10ms,_250ms,_500ms; reg31:0Q1,Q2,Q3,Q4; always(posedge _50MHZ or negedge nCR)begin if(nCR) begin Q1=32d

28、0; Q2=32d0; Q3=32d0; Q4=32d24999999) begin Q1=32d249999) begin Q2=32d6299999) begin Q4=32d12499999) begin Q3=32d0; _500ms=_500ms; end else begin Q1=Q1+1d1; Q2=Q2+1d1; Q3=Q3+1d1; Q4=Q4+1d1; end end endmodule計時模塊:module second(cp,reset,mode_flag,BT2,SH,SL,co);input cp,reset,BT2;input3:0mode_flag;outpu

29、t co=1b0;reg co;output 3:0SL,SH;reg3:0SH,SL;reg7:0cnt;always(posedge cp or negedge reset )beginif(!reset) begin SL=4b0;SH=4b0;cnt=8b0;endelse if(mode_flag=4b0010)&(!BT2) begin SL=4b0;SH=4b0;cnt=8b0;endelsebegin if(cnt=8d59) begin cnt=8d0; SH=4d0; SL=4d0; co=1b1; end else begin co=1b0; cnt=cnt+8d1; S

30、L=cnt%10; SH=cnt/10; end end end endmodule module minute (cp,reset,MH,ML,co);input cp ,reset;output co=1b0;output 3:0ML,MH;reg3:0MH,ML;reg7:0cnt;reg co;always(posedge cp or negedge reset)beginif(!reset) begin ML=4b0;MH=4b0;cnt=8b0;endelsebegin if(cnt=8d59) begin cnt=8d0; MH=4d0; ML=4d0; co=1b1; end

31、else begin co=1b0; cnt=cnt+8d1; ML=cnt%10; MH=cnt/10; end end end endmodule module hour (cp,reset,HH,HL);input cp,reset;output 3:0HL,HH;reg3:0HH,HL;reg7:0cnt;always(posedge cp or negedge reset)beginif(!reset) begin HL=4b0;HH=4b0;cnt=8b0;end elsebegin if(cnt=8d23) begin cnt=8d0; HH=4d0; HL=4d0; end e

32、lse begin cnt=cnt+8d1; HL=cnt%10; HH=cnt/10; end end end Endmodule模式選擇模塊:module key_press(_10ms,KEY,Keydone);input KEY,_10ms;output Keydone;reg dout1,dout2,dout3;always (posedge _10ms)begin dout1 = KEY; dout2 = dout1; dout3 = dout2; endassign Keydone = (dout1 | dout2 | dout3);endmodule module mode (

33、MODE,mode_flag); input MODE ; output 3:0mode_flag; reg 3:0mode_flag; always (negedge MODE ) beginmode_flag = mode_flag+ 4b1;if(mode_flag = 4b0101)mode_flag = 2b0; endendmodule module LED_mode (mode_flag,SH24,SL24,SH,SL); input 3:0 mode_flag; input 3:0 SH24,SL24; output 3:0SH,SL; reg 3:0SH,SL; always

34、(mode_flag )begin case (mode_flag) 4b0000:begin SH=SH24; SL=SL24;end 4b0001: begin SH=4b0000; SL=4b0001;end 4b0010: begin SH=4b0000; SL=4b0010;end 4b0011: begin SH=4b0000; SL=4b0100;end 4b0100: begin SH=4b0000; SL=4b1000;end default : begin SH=SH24; SL=SL24;end endcase end endmodule Module LUT_mode

35、(mode_flag,H12_24,HH12,HL12,HH24,HL24,MH24,ML24,set_HH,set_HL,set_MH,set_ML,MH,ML,HH,HL);input 3:0 HH12,HL12,HH24,HL24,MH24,ML24;input 3:0 set_HH,set_HL,set_MH,set_ML;input 3:0 mode_flag;input H12_24;output 3:0 MH,ML,HH,HL;reg 3:0 MH,ML,HH,HL;always(mode_flag or H12_24) begin case (mode_flag) 4b0011

36、, 4b0100: begin HH=set_HH; HL=set_HL; MH=set_MH; ML=set_ML; end default:begin if(H12_24)begin HH=HH12; HL=HL12; MH=MH24; ML=ML24;end else begin HH=HH24; HL=HL24; MH=MH24; ML=ML24;end end endcase end endmodule module mode_choose(mode_flag,BT2,_250ms,co1,co2,set_co2,co11,co22,co111,co222); input 3:0mo

37、de_flag; input BT2,_250ms,co1,co2,set_co2; output co11,co22,co111,co222; supply1 Vdd; reg co11,co22,co111,co222; always(mode_flag)begin case (mode_flag) 4b0001: begin if(BT2) co22=_250ms; else begin co22=co2; co11=co1; end end 4b0010: begin if(BT2) begin co11=_250ms; co22=co2;end else begin co11=co1

38、; co22=co2; end end 4b0011: begin co22=co2; co11=co1; if(BT2) co222=_250ms; else co222=set_co2;end 4b0100: begin co22=co2; co11=co1; if(BT2) co111=_250ms; else co111=Vdd; end default :begin co11=co1; co22=co2; end endcase end endmodule 鬧鐘模塊 :module set_naozhong(co111,co222,set_HH,set_HL,set_MH,set_ML,co2); input co111,co222; output 3:0set_HH,set_HL,set_MH,set_ML; supply1 Vdd; output co2; minute (co111,Vdd,set_MH,set_ML,co2);h

溫馨提示

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

評論

0/150

提交評論