基于FPGA的VerilogHDL數字鐘設計-_第1頁
基于FPGA的VerilogHDL數字鐘設計-_第2頁
基于FPGA的VerilogHDL數字鐘設計-_第3頁
基于FPGA的VerilogHDL數字鐘設計-_第4頁
基于FPGA的VerilogHDL數字鐘設計-_第5頁
已閱讀5頁,還剩22頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

r~i基于FPGA的VerilogHDL數字鐘

設計-不盲而不盲而口基于FPGA的VerilogHDL數字鐘設計專業班級 姓名 學號一、 實驗目的 掌握可編程邏輯器件的應用開發技術一一設計輸入、編譯、仿真和器件編程;熟悉一種EDA軟件使用;掌握Verilog設計方法;掌握分模塊分層次的設計方法;用Verilog完成一個多功能數字鐘設計;學會FPGA的仿真。二、 實驗要求功能要求:利用實驗板設計實現一個能顯示時分秒的多功能電子鐘,基本功能:1) 準確計時,以數字形式顯示時、分、秒,可通過按鍵選擇當前顯示時間范圍模式;2) 計時時間范圍00:00:00—23:59:593) 可實現校正時間功能;4) 可通過實現時鐘復位功能:00:00:00擴展功能:5) 定時報:時間自定(不要求改變),鬧1分鐘(1kHz) 利用板上LED或外接電路實現。不盲而不盲而口6) 仿廣播電臺正點報時:XX:59:[51,53,55,57(500Hz);59(1kHz)]―-用板上LED或外接7) 報整點時數:XX:00:[00.5-XX.5](1kHz),自動、手動---用板上LED或外接8) 手動輸入校時;9) 手動輸入定時鬧鐘;10) 萬年歷;11) 其他擴展功能;設計步驟與要求:1) 計算并說明采用Basys2實驗板時鐘50MHz實現系統功能的基本原理。2) 在XilinxISE13.1軟件中,利用層次化方法,設計實現模一百計數及顯示的電路系統,設計模塊間的連接調用關系,編寫并輸入所設計的源程序文件。3) 對源程序進行編譯及仿真分析(注意合理設置,以便能夠在驗證邏輯的基礎上盡快得出仿真結果)。4) 輸入管腳約束文件,對設計項目進行編譯與邏輯綜合,生成下載所需.bit文件。5) 在Basys2實驗板上下載所生成的.bit文件,觀察驗證所設計的電路功能。三、實驗設計功能說明:實現時鐘,時間校時,鬧鈴定時,秒表計時等功能時鐘功能:完成分鐘/小時的正確計數并顯示;秒的顯示用LED燈的閃爍做指示;時鐘利用4位數碼管顯示時分;口鬧鐘定時:實現定時提醒及定時報時,利用LED燈代替揚聲器發出報時聲音;時鐘校時:當認為時鐘不準確時,可以分別對分鐘和小時位的值進行調整;秒表功能:利用4個數碼管完成秒表顯示:可以實現清零、暫停并記錄時間等功能。秒表利用4位數碼管計數;方案說明:本次設計由時鐘模塊和譯碼模塊組成。時鐘模塊中50MHz的系統時鐘clk分頻產生一個1Hz的使能控制信號enable,并以此產生1s的脈沖second_en以實現每秒計時,控制各個模式下的計數顯示。由模式控制信號選擇當前數碼管顯示哪個狀態:mode=00,時鐘常規顯示狀態,mode=01,鬧鈴定時狀態,mode=10,時鐘校時狀態,mode=11,秒表計時狀態;時鐘:利用count,smin0,smin1,shour0,shour1的計數來實現,具體情況見程序;校時:當turn=1時,調整分位smin1、smin0;當turn=0時,調整小時位shour1、shour0;鬧鈴:當turn=1時,調整分位amin1、amin0;當turn=0時,調整小時位ahour1、ahour0;秒表:當pause=0時,開始計時;當pause=1時,暫停。口習不口習不不白而rjj不斗四、實驗代碼時鐘模塊moduleclockfelk,clr,pause,turn,mode,sec,mini,min0,houri,hourO,alert,LDalert);inputclk;//時鐘信號(50MHz)inputclr;〃清零鍵inputpause;〃秒表暫停鍵input[1:0]mode;〃決定時鐘顯示功能狀態outputsec;〃接發光二極管output[3:0]min1;〃用于輸出接數碼管4output[3:0]min0;〃用于輸出接數碼管3output[3:0]hour1;〃用于輸出接數碼管2output[3:0]hour0;〃用于輸出接數碼管1outputalert;〃接發光二極管,代替蜂鳴器〃調整分還是小時位的控制inputturn;口 、IE□□用爪斗outputLD_alert;〃當鬧鈴設定后,發光二極管顯示wiresec; 〃秒位顯示wireLD_alert;〃用于鬧鈴存在時的提醒顯示//wireclkl;//時鐘1s//wireclk2;//時鐘100ms,用于秒表最小計時單位//wireclrl;reg[3:0]min1;//常規顯示reg[3:0]min0;//常規顯示reg[3:0]hour1;〃常規顯示reg[3:0]hour0;〃常規顯示reg[3:0]smin1;〃校時reg[3:0]smin0;〃校時reg[3:0]shour1;〃校時reg[3:0]shour0;〃校時reg[3:0]amin1;〃鬧鈴reg[3:0]amin0;〃鬧鈴reg[3:0]ahour1;〃鬧鈴reg[3:0]ahour0;〃鬧鈴reg[3:0]mmin1;〃秒表reg[3:0]mmin0;〃秒表reg[3:0]mhour1;〃秒表奸口僧而奸口僧而endendalways@(posedgeclk)//?????beginif(clr)beginen1<=1'b0;en2<=1'b0;endelsebeginen1<=enable;en2<=en1;endendassignsecond_en=(!en1)&&(en2);always@(posedgeclk)beginif(clr)beginamin1<=0;amin0<=0;ahour1<=0;ahour0<=0;smin1<=0;smin0<=0;shour1<=0;shour0<=0;mmin1<=0;mmin0<=0;mhour1<=0;奸口

僧而mhour0<=0;count<=0;endelseif(second_en)begincount<=count+1;///////////////////////////////////////////////////////////////////////////////////////////if(mode==2'b01) 〃鬧鈴調時狀態if(turn==1) 〃當turn為高電平時調整分位if((amin1==5)&&(amin0==9))beginamin1<=0;amin0<=0;endelseif(amin0==9)beginamin1<=amin1+1;amin0<=0;endelseamin0<=amin0+1;else 〃當turn為低電平時調整小時位if((ahour1==2)&&(ahour0==3))beginahour1<=0;ahour0<=0;奸口

僧而endelseif(ahour0==9)beginahour1<=ahour1+1;ahour0<=0;endelseahour0<=ahour0+1;////////////////////////////////////////////////////////////////////////////////////////if(mode==2'b10) 〃時鐘調時狀態if(turn==1) 〃當turn為高電平時調整分位if((smin1==5)&&(smin0==9))beginsmin1<=0;smin0<=0;endelseif(smin0==9)beginsmin1<=smin1+1;smin0<=0;endelsesmin0<=smin0+1;else 〃當turn為低電平時調整小時位if((shour1==2)&&(shour0==3))begin奸口僧而奸口僧而shour1<=shour1+1;if(shour1==2)shour1<=0;endendendendend////////////////////////////////////////////////////////////////////////////////if(mode==2'b11)begin〃秒表計時狀態if(pause==0)〃當pause為低電平時開始計時Ibeginmmin0<=mmin0+1;if(mmin0==9)beginmmin0<=0;mmin1<=mmin1+1;if(mmin1==9)beginmmin1<=0;mhour0<=mhour0+1;if(mhour0==9)beginmhour0<=0;mhour1<=mhour1+1;if(mhour1==9)奸口僧而mhour1<=0;endendendendendendendassignLD_alert=(amin11aminO|ahourl|ahour0)?1:0; 〃當鬧鈴有定時后LD_alert發光以示鬧鈴已定assignsec=enable;〃將秒針接到LED燈always@(posedgeclk)beginif(clr)alert<=0;elseif((amin1==smin1)&&(amin0==smin0)&&(ahour1==shour1)&&(ahour0==shour0))alert<=1;〃對鬧鈴做檢查,時間到時發光elsealert<=0;end〃以下為選擇顯示模塊always@(posedgeclk)beginif(clr)beginmin1<=0;min0<=smin0;min0<=smin0;奸口僧而min0<=0;hour1<=0;hour0<=0;endelsebegincase(mode)2'b01:begin //mode=01時,顯示鬧鈴模塊min1<=amin1;min0<=amin0;hour1<=ahour1;hour0<=ahour0;end2'b10:begin //mode=10時,顯示校時模塊min1<=smin1;min0<=smin0;hour1<=shour1;hour0<=shour0;end2'b11:begin //mode=11時,顯示秒表模塊min1<=mmin1;min0<=mmin0;hour1<=mhour1;hour0<=mhour0;end2'b00:begin 〃其他狀態,顯示普通時鐘模塊min1<=smin1;奸口僧而hour1<=shour1;hour0<=shour0;Iendendcaseendendendmodule譯碼模塊奸口僧而奸口

僧而always@(posedgeclk)//SegScanbeginif(reset)begintemp<=4'b0000;endelsecase(count[1:0])//仿真時將掃描信號頻率加快1000倍// case(count[11:10])//執行設計時將掃描頻率改回2'b00:temp<=h1;2'b01:temp<=h0;2'b10:temp<=m1;2'b11:temp<=m0;endcaseendalways@(posedgeclk)〃數碼管譯碼beginif(reset)beginq<=7'b0000000;endelsecase(temp)4'd0:q<=7'b0000001;//04'd1:q<=7'b1001111;//14'd2:q<=7'b0010010;//2奸口

僧而4,d3:q<=7'b0000110;//34,d4:q<=7'b1001100;//44,d5:q<=7,b0100100;//54,d6:q<=7,b0100000;//64,d7:q<=7,b0001111;//74,d8:q<=7,b0000000;//84,d9:q<=7,b0000100;//9default:q<=7'b0000001;endcaseendendmoduleUCF文件NET"clk"LOC="B8";#50MPinassignmentforDispCtlConnectedtoBasys2onBoard7qdisplayNET"q<6>"LOC="L14";#Bank=1,Signalname=CANET"q<5>"LOC="H12";#Bank=1,Signalname=CBNET"q<4>"LOC="N14";#Bank=1,Signalname=CCNET"q<3>"LOC="N11";#Bank=2,Signalname=CDNET"q<2>"LOC="P12";#Bank=2,Signalname=CENET"q<1>"LOC="L13";#Bank=1,Signalname=CFNET"q<0>"LOC="M12";#Bank=1,Signalname=CG#NET"dp"LOC="N13";#Bank=1,Signalname=DPNET"ctr<3>"LOC="K14";#Bank=1,Signalname=AN3NET"ctr<2>"LOC="M13";#Bank=1,Signalname=AN2NET"ctr<1>"LOC="J12";#Bank=1,Signalname=AN1奸口僧而NET"ctr<0>"LOC="F12";#Bank=1,Signalname=AN0NET"reset"LOC="N3";#Bank=2,Signalname=SW7NET"mode<1>"LOC="E2";#Bank=3,Signalname=SW6NET"mode<0>"LOC="F3";#Bank=3,Signalname=SW5NET"turn"LOC="G3";#Bank=3,Signalname=SW4NET"pause"LOC="B4";#Bank=3,Signalname=SW3NET"LD_alert"LOC="P7";#Bank=3,Signalname=LD2NET"alert"LOC="M11";#Bank=2,Signalname=LD1NET"sec"LOC="M5";#Bank=2,Signalname=LD0奸口僧而奸口僧而蛙口 EHffi 蛙口 EHffi endmodule五、仿真進入ISim仿真波形界面&養mIE01!■:蚩?快岫VW7*下詞f?H£激透聊§EuWE迎ndow。曄vl出p^migc MbnlM成,m#ici:i:£orIrra^ceandl^cicessNbTriEEUd— Mr上心EKZMtfid-?nI#X諾'?■■戶盧:&尸-。0史hHu.MK4DLILtlt>^migc MbnlM成,m#ici:i:£orIrra^ceandl^cicessNbTriEEUd— Mr上心EKZMtfid-?nI#X諾'?■■戶盧:&尸-。0史hHu.MK4DLILtlt>1DPtrMDt>八;,:tK而ILD.Jtflidk,NSKrrodeilOOhumpaua*韓蹌州tq□4Ijc4gmhiw.QdSd-X-E-Xa1IhiaIai,JiLlTirxLUifTIMITiEiLUfL^1KI.JIEriM3]^£ffirI.E仙rq£1rcdl.tlali4ikll.Si£id?kprdsfliEEEMnnhRisi^rmiLjiaiHd.讓―曲小pracaia.I5J>>「—?.1.~||1I匸■jllrUanLar| ~BrMJqpalJifcBIFIjmI-IjlITiljKlinlkiI*?nSiiril.UMsd-tc女eTim?:L皿皿DM1pa(1)仿真,運行1ms,將波形結果調整為適合的大小卜*Ctr[3S]4I*alertLD_al^rtAbjtEsVL。國靴1reieiHirNJcllOJlumpause牛raoogm]clockdi中I則0000001LLOL010000000oonnnnnaaaatXI:liZ.QOKOflTIE⑵這時我們可以分別點開clock模塊和display模塊查看具體的信號變化是否正確。我們先看clock模塊。▼fclock姑dkl^dr伯peuxLLturn%m▼fclock姑dkl^dr伯peuxLLturn%m"I版LD_alcrt噬minip-n]餘皇minO|51FJ*hcuriLBfl]齢*宙hournpfl]1、alert酎fmDde[l:0]9K0nd_m000000nnanOQODQDODGOOD10D0* 卩間p■mminl侶:□門齢~sminDBiUOOQDememJil:112.000030u=■C-OQOownJII二□C-01oweC-OOC'當mode=00時,實現正常時鐘顯示功能。在脈沖second_en到來時,count做計數加1,此時小時位是shourl,shourO,分鐘位是sminl,sminO,將這幾個相關信號在波形窗口中位置做個調整放到一起來查看。當count計數到59時,分鐘位sminO實現加1變化,由0變為1’?此時結果是正確的當mode=2^01時,實現鬧鈴模塊。當turn=l時,調整分位aminl、aminO;當turn=O時,調整小時位ahourlsahour0o將相關信號放在一起查看,由圖可知,當turn為低時,調整小

溫馨提示

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

評論

0/150

提交評論