




已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
此文檔收集于網(wǎng)絡,如有侵權,請聯(lián)系網(wǎng)站刪除數(shù)字系統(tǒng)課程設計報告書課題名稱 基于FPGA的數(shù)字鐘設計院 系姓名學號 專業(yè)班級指導教師設計時間目 錄摘要11設計目的 22設計內(nèi)容及要求23系統(tǒng)整體方案及設計原理 34各模塊電路設計與實現(xiàn) 44.1 分頻模塊設計與實現(xiàn)4 4.1.1分頻模塊圖 4.1.2分頻模塊程序4.2 計數(shù)器模塊設計與實現(xiàn)5 4.2.1計數(shù)模塊圖 4.2.2秒計數(shù)器程序 4.2.3分計數(shù)器程序 4.2.4時計數(shù)器程序4.3 1602顯示驅(qū)動模塊設計與實現(xiàn) 10 4.3.1 1602顯示驅(qū)動模塊圖 4.3.2 1602顯示驅(qū)動模塊程序5系統(tǒng)仿真及硬件下載 175.1系統(tǒng)仿真(步驟,總原理圖,仿真圖)17 5.1.1系統(tǒng)仿真步驟 5.1.2總原理圖 5.1.3仿真圖5.2硬件下載(引腳分配,下載步驟) 18 5.2.1引腳分配 5.2.2下載步驟6設計總結 21參考文獻 21此文檔僅供學習與交流摘要隨著微電子技術、計算機技術、半導體技術的發(fā)展,很多傳統(tǒng)的數(shù)字門電路設計已經(jīng)被可編程邏輯器件代替。而相對于傳統(tǒng)的模擬控制技術,也被數(shù)字控制系統(tǒng)所代替。作為可編程邏輯器件的硬件描述語言Verilog HDL,由于它具有類似于通用C語言的風格,被不少FPGA開發(fā)者所推崇。在數(shù)字控制這個領域,F(xiàn)PGA的應用也越來越廣泛,因此,作為硬件描述語言Verilog HDL就顯示出了它的重要性。它是一種全方位的硬件描述語言,具有極強的描述能力,能支持系統(tǒng)行為級、寄存器傳輸級和邏輯門級這三個不同層次的設計;支持結構、數(shù)據(jù)流、行為三種描述形式的混合描述,覆蓋面廣,抽象能力強,因此在實際應用中越來越廣泛。本設計為一個數(shù)字鐘,一個具有“時”、“分”、“秒”顯示的計時器,(23時59分59秒)。它采用EDA技術,以硬件描述語言Verilog 為系統(tǒng)邏輯描述手段設計文件,在QUARTUSII工具軟件環(huán)境下,采用自頂向下的設計方法,由各個基本模塊共同構建了一個基于FPGA的數(shù)字鐘。關鍵詞: 數(shù)字鐘 硬件描述語言Verilog HDL FPGA1. 設計目的1.掌握利用EDA開發(fā)工具QUARTUSII進行可編程邏輯器件設計的方法; 2.掌握用FPGA進行計數(shù)器設計的方法;3.熟練掌握可編程邏輯器件的原理圖輸入層次化設計方法;4掌握利用QUARTUSII進行軟件仿真及對可編程邏輯器件進行硬件下載的方法;5.進一步鞏固所學的理論知識,提高運用所學知識分析和解決實際問題的能力。2.設計內(nèi)容及要求1.設計一個具有“時”、“分”、“秒”顯示的計時器,(23時59分59秒);2.“秒電路”、“分電路”均為0059的六十進制計數(shù)、譯碼、顯示電路; 3.“時電路”為0023的二十四進制計數(shù)、譯碼、顯示電路;4.該實驗是基于FPGA的設計,采用Verilog HDL進行系統(tǒng)功能描述,采用自頂向下的設計方法,用QUARTUS軟件進行仿真測試。3.系統(tǒng)整體方案及設計原理如下圖(3.1)所示,該系統(tǒng)框圖由6個模塊組成,分別為:秒、分、時計數(shù)器模塊,分頻器模塊(fp20m),計數(shù)器顯示模塊,1602顯示驅(qū)動模塊( lcd_1602_drive)。工作原理是:基準脈沖輸入信號同時加到秒、分、時的脈沖輸入端,采用并行計數(shù)的方式,秒的進位接到分的使能端上,分的進位接到時的使能端上,完成秒、分、時的循環(huán)計數(shù)。要求輸入信號有1kHz1Hz時鐘信號、低電平有效的調(diào)秒信號set_state、低電平有效的調(diào)分信號min_state、低電平有效的調(diào)時信號hour_state。圖3.14.各模塊電路設計與實現(xiàn)4.1 分頻模塊設計與實現(xiàn)4.1.1分頻模塊圖 圖(4.1)分頻模塊圖4.1.2分頻模塊程序/輸入頻率:20MHz/輸出頻率:1Hz,1000Hzmodule fp20m(clk,clk1,clk4,clk1000,clk6m);input clk;output clk1,clk4,clk1000,clk6m;reg clk1,clk4,clk1000,clk6m;reg 25:0 cnt,cnt1,cnt2,cnt3;always(posedge clk) /1Hz分頻beginif(cnt= 9999999 ) /從0到9999999總共10000000次begin cnt=0;clk1=clk1;/每10000000次翻轉(zhuǎn),周期為20000000次,也就是1Sendelse cnt=cnt+1;endalways(posedge clk) /1000Hz分頻beginif(cnt1=9999) begin cnt1=0;clk1000=clk1000;endelse cnt1=cnt1+1;endalways(posedge clk) /1Hz分頻beginif(cnt2= 1 ) /從0到9999999總共10000000次begin cnt2=0; clk6m=clk6m;/每10000000次翻轉(zhuǎn),周期為20000000次,也就是1Sendelse cnt2=cnt2+1;endalways(posedge clk) /1Hz分頻beginif(cnt3 = 2499999 ) /從0到9999999總共10000000次begin cnt3=0;clk4=clk4;/每10000000次翻轉(zhuǎn),周期為20000000次,也就是1Sendelse cnt3=cnt3+1;endendmodule4.2 計數(shù)器模塊設計與實現(xiàn)4.2.1計數(shù)模塊圖圖(4.2)計數(shù)器模塊圖4.2.2秒計數(shù)器程序module sec_count (clk,sec_ten_c,/ 分鐘的十位的進位信號sec_one_set,/小時的個位設置數(shù)sec_ten_set,/小時的十位設置數(shù)set_state,/設置狀態(tài),0的時候計數(shù),1的時候置數(shù)sec_one,/小時的個位sec_ten);/小時的十位input clk;input set_state;input 3:0sec_one_set;input 3:0sec_ten_set;output 3:0sec_one;output 3:0sec_ten;output 3:0sec_ten_c;reg 3:0sec_one;reg 3:0sec_ten;reg 3:0sec_ten_c;reg temp;reg temp2;reg sec_one_c;initialbeginsec_one = 0 ;sec_ten = 0 ;endalways ( posedge clk)begintemp2 =set_state;if(temp2 != set_state & set_state = 0 )beginsec_one = (sec_ten_set*10+sec_one_set)%60)%10;/sec_ten = 8h59)beginsec_one = 0;sec_ten = 0;sec_ten_c = 8h58)beginsec_ten_c =1;endelsebeginsec_ten_c = 9)beginsec_one = 0;sec_ten = sec_ten + 1;endelse sec_one = sec_one + 1 ;endendendEndmodule4.2.3分計數(shù)器程序module min_count (clk, sec_ten_c, min_ten_c, / 分鐘的十位的進位信號 min_one_set, /小時的個位設置數(shù) min_ten_set, /小時的十位設置數(shù) set_state, /設置狀態(tài),0的時候計數(shù),1的時候置數(shù) min_one, /小時的個位 min_ten); /小時的十位input clk;input set_state;input 3:0min_one_set;input 3:0min_ten_set;input 3:0sec_ten_c;output 3:0min_one;output 3:0min_ten;output 3:0min_ten_c;reg 3:0min_one;reg 3:0min_ten;reg 3:0min_ten_c;reg temp;reg temp2;reg min_one_c;initialbeginmin_one = 0 ;min_ten = 0 ;endalways ( posedge clk)begin temp2 =set_state; if(temp2 != set_state & set_state = 0 ) begin min_one = (min_ten_set*10+min_one_set)%60)%10; / min_ten = 8h59)beginmin_one = 0;min_ten = 0;min_ten_c = 8h58)beginmin_ten_c =1;endelsebegin min_ten_c = 9)beginmin_one = 0;min_ten = min_ten + 1;endelse min_one = min_one + 1 ;end endtemp = sec_ten_c;endEndmodule4.2.4時計數(shù)器程序module hour_count (clk, min_ten_c, / 分鐘的十位的進位信號 hour_one_set, /小時的個位設置數(shù) hour_ten_set, /小時的十位設置數(shù) set_state, /設置狀態(tài),0的時候計數(shù),1的時候置數(shù) hour_one, /小時的個位 hour_ten); /小時的十位input clk;input set_state;input 3:0hour_one_set;input 3:0hour_ten_set;input 3:0min_ten_c;output 3:0hour_one;output 3:0hour_ten;reg 3:0hour_one;reg 3:0hour_ten;reg temp;reg temp2;reg hour_one_c;initialbeginhour_one = 0 ;hour_ten = 0 ;endalways ( posedge clk)begin temp2 =set_state; if(temp2 != set_state & set_state = 0 ) begin hour_one = (hour_ten_set*10+hour_one_set)%60)%10; / hour_ten = 8h23)beginhour_one = 0;hour_ten = 9)beginhour_one = 0;hour_ten = hour_ten + 1;endelse hour_one = hour_one + 1 ;end endtemp = min_ten_c;endendmodule4.3 1602顯示驅(qū)動模塊設計與實現(xiàn)4.3.1 1602顯示驅(qū)動模塊圖 圖(4.3)4.3.2 1602顯示驅(qū)動模塊程序module lcd_1602_drive(clk, /500Hz時鐘set_state,second_one_set,second_ten_set,minute_one_set,minute_ten_set,hour_one_set,hour_ten_set,second_one,second_ten,minute_one,minute_ten,hour_one,hour_ten,rs,rw,en,data);input clk;input set_state;input 3:0 second_one_set,second_ten_set;input 3:0 minute_one_set,minute_ten_set;input 3:0 hour_one_set,hour_ten_set;input 3:0 second_one,second_ten;input 3:0 minute_one,minute_ten;input 3:0 hour_one,hour_ten;output rs,rw,en;reg rs,rw,en;output 7:0 data;reg 7:0 data; reg 7:0 seg1,seg2,next;reg 31:0 data_clock;reg 39:0 data_chars;reg 27:0 counter,counter1,counter2;reg 0:7 m10:0; wire31:0 data_clock1;wire31:0 set_clock;parameter chars=CLOCK;parameter state0= 8d0,camd0= 8d1,state1= 8d2,camd1= 8d3,state2= 8d4,camd2= 8d5,state3= 8d6,camd3= 8d7,state4= 8d8,camd4= 8d9,state5= 8d10,data0= 8d11,state6= 8d12,camd5= 8d13,state7= 8d14,data1= 8d15,state8= 8d16;initialbeginm0 =8b0011_0000;/字符“0”代碼m1 =8b0011_0001;/字符“1”代碼m2 =8b0011_0010;/字符“2”代碼m3 =8b0011_0011;/字符“3”代碼m4 =8b0011_0100;/字符“4”代碼m5 =8b0011_0101;/字符“5”代碼m6 =8b0011_0110;/字符“6”代碼m7 =8b0011_0111;/字符“7”代碼m8 =8b0011_1000;/字符“8”代碼m9 =8b0011_1001;/字符“9”代碼m10=8b0011_1010;/字符“:”代碼 end Assigndata_clock1=hour_ten,hour_one,4d10,minute_ten,minute_one,4d10,second_ten,second_one; /8assign set_clock=hour_ten_set,hour_one_set,4d10,minute_ten_set,minute_one_set,4d10,second_ten_set,second_one_set; /8always(posedge clk)beginif(set_state=0)begincase(next)/ 初始化/*state0: begin rs=0; rw=0; data=8h38; en=1; next=camd0; /8位總線,顯示2行 5*7 seg1=8b1000_0101; /第一行首地址 seg2=8b1100_0011; /第二行首地址 endcamd0: begin en=0; rw=1; next=state1; endstate1: begin rs=0; rw=0; data=8h0c; en=1; next=camd1; end /顯示器打開,無光標,光標不閃爍camd1: begin en=0; rw=1; next=state2; endstate2: begin rs=0; rw=0; data=8h06; en=1; next=camd2; end /寫入新數(shù)據(jù)光標右移,寫入新數(shù)據(jù)后顯示屏不移動camd2: begin en=0; rw=1; next=state3; endstate3: begin rs=0; rw=0; data=8h01; en=1; next=camd3; end /清屏camd3: begin en=0; rw=1; next=state4; end/*/ 第一行,顯示CLOCK/*state4:beginrs=0;rw=0;data=seg1;en=1;next=camd4;/if(seg1=8b1000_0101) seg1=8b1000_0111; /可在此處,設置讓CLOCLK動態(tài)顯示/else seg1=seg1-1b1;endcamd4:beginen=0;rw=1;next=state5;data_chars=chars;endstate5:beginrs=1;rw=0;data=data_chars39:32;en=1;next=data0;enddata0:beginif(counter1=5) begin next=state6;counter1=0;endelse begin en=0;rw=1;counter1=counter1+1; data_chars=(data_chars8);next=state5;endend/*/ 第二行顯示,時間/*state6:beginrs=0;rw=0;data=seg2;en=1;next=camd5;/if(seg1=8b1000_0101) seg1=8b1000_0111; /可在此處,設置讓CLOCLK動態(tài)顯示/else seg1=seg1-1b1;endcamd5:beginen=0;rw=1;next=state7;data_clock=data_clock1;endstate7:beginrs=1;rw=0;data=mdata_clock31:28;en=1;next=data1;enddata1:beginif(counter2=8) begin next=state8;counter2=0;endelse begin en=0;rw=1;counter2=counter2+1; data_clock=(data_clock4);next=state7;endend/*/ 延遲處理/*state8:beginif(counter=100) begin counter=0; next=state3;endelse counter=counter+1;end/*endcaseendif(set_state = 1)begincase(next)/ 初始化/*state0: begin rs=0; rw=0; data=8h38; en=1; next=camd0; /8位總線,顯示2行 5*7 seg1=8b1000_0101; /第一行首地址 seg2=8b1100_0011; /第二行首地址 endcamd0: begin en=0; rw=1; next=state1; endstate1: begin rs=0; rw=0; data=8h0c; en=1; next=camd1; end /顯示器打開,無光標,光標不閃爍camd1: begin en=0; rw=1; next=state2; endstate2: begin rs=0; rw=0; data=8h06; en=1; next=camd2; end /寫入新數(shù)據(jù)光標右移,寫入新數(shù)據(jù)后顯示屏不移動camd2: begin en=0; rw=1; next=state3; endstate3: begin rs=0; rw=0; data=8h01; en=1; next=camd3; end /清屏camd3: begin en=0; rw=1; next=state4; end/*/ 第一行,顯示CLOCK/*state4:beginrs=0;rw=0;data=seg1;en=1;next=camd4;/if(seg1=8b1000_0101) seg1=8b1000_0111; /可在此處,設置讓CLOCLK動態(tài)顯示/else seg1=seg1-1b1;endcamd4:beginen=0;rw=1;next=state5;data_chars=chars;endstate5:beginrs=1;rw=0;data=data_chars39:32;en=1;next=data0;enddata0:beginif(counter1=5) begin next=state6;counter1=0;endelse begin en=0;rw=1;counter1=counter1+1; data_chars=(data_chars8);next=state5;endend/*/ 第二行顯示,時間/*state6:beginrs=0;rw=0;data=seg2;en=1;next=camd5;/if(seg1=8b1000_0101) seg1=8b1000_0111; /可在此處,設置讓CLOCLK動態(tài)顯示/else seg1=seg1-1b1;endcamd5:beginen=0;rw=1;next=state7;data_clock=set_clock;endstate7:beginrs=1;rw=0;data=mdata_clock31:28;en=1;next=data1;enddata1:beginif(counter2=8) begin next=state8;counter2=0;endelse begin en=0;rw=1;counter2=counter2+1; data_clock=(data_clock4);next=state7;endend/*/ 延遲處理/*state8:beginif(counter=100) begin counter=0; next=state3;endelse counter=counter+1;end/*endcaseendendEndmodule5. 系統(tǒng)仿真及硬件下載5.1系統(tǒng)仿真5.1.1系統(tǒng)仿真步驟(1)建立project項目,在軟件主窗口單擊File菜單后,單擊New選項,選擇Verilog HDL File選項。(2)單擊OK進入空白的文本編輯區(qū),進行文本編輯。(3)V文件名必須與模塊名相同,將dff1.v文件設置為頂層文件,ProjectSet as Top-level Entity。(4)單擊編譯器快捷方式按鈕,完成編譯后,彈 出菜單報告錯誤和警告數(shù)目,并生成編譯報告。(5)利用v文件生成原理圖模塊。在v文件編輯界面中,F(xiàn)ileCreat/UpdateCreat Symbol Files for Curent File.(6)打開project 項目,新建波形仿真文件;在建立的波形文件左側(cè)一欄中,點擊鼠標右鍵,在彈出菜單中選擇 Insert Node or Bus。(7)在出現(xiàn)的圖中,選擇Node Finder,將打開Node Finder 對話框,本試驗對輸入輸出的管腳信號進行仿真,所以在Filter 中選擇 Pins:all,點擊List 按鈕。(8)在圖左欄中選擇需要進行仿真的端口通過中間的按鈕加入到右欄中,點擊OK,端口加入到波形文件中。(8)選擇一段波形,通過左邊的設置工具條,給出需要的值,設置完成激勵波形,保存。(9)設置為功能仿真:AssignmentTiming Analysis Settings-Simulator SettingsSimulation mode 選擇Functional, 生成網(wǎng)絡表ProcessingGenerate Functional Simulation Netlist;點擊快捷按鈕,開始仿真,完成后得到波形。5.1.2總原理圖圖(5.1)5.1.3仿真圖圖(5.2)5.2硬件下載5.2.1引腳分配(1)根據(jù)硬件接口設計,對芯片管腳進行綁定。選擇Assignments菜單下Pins選項;(2)雙擊對應管腳后Location空白框,出現(xiàn)下拉菜單中選擇要綁定的管腳, 圖(5.3)5.2.2下載
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 服裝尺碼工程師筆試試題及答案
- 健康江西行動指標數(shù)據(jù)質(zhì)量控制規(guī)范
- 危險化學品企業(yè)“安全領導力”專業(yè)深度解讀與應用指導材料
- 2025年湖南師范大學美術學院勞動合同用工招聘考試筆試試題【答案】
- 2025年湖北黃岡黃州區(qū)專項招聘中學教師考試筆試試題【答案】
- 2025年婁底雙峰縣城區(qū)義務教育學校選調(diào)教師考試試題【答案】
- 消費品以舊換新的劣勢分析
- 2025年健腹椅項目建議書
- 2025年參數(shù)測試儀器項目發(fā)展計劃
- 湘藝版二年級上冊音樂《雪花飛舞》教案1
- 2025年校長職級考試題及答案
- 統(tǒng)借統(tǒng)還資金管理辦法
- 國家能源集團采購管理規(guī)定及實施辦法知識試卷
- 2023-2024學年四川省成都市高新區(qū)八年級(下)期末數(shù)學試卷
- 2025年廣西繼續(xù)教育公需科目考試試題和答案
- 2024年廣州市南沙區(qū)社區(qū)專職招聘考試真題
- 心理健康科普常識課件
- 山東醫(yī)藥技師學院招聘筆試真題2024
- 倉庫超期物料管理制度
- 奶茶公司供應鏈管理制度
- 加氣站風控分級管理制度
評論
0/150
提交評論