自動打鈴系統(tǒng)設(shè)計說明書—課程設(shè)計
《自動打鈴系統(tǒng)設(shè)計說明書—課程設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《自動打鈴系統(tǒng)設(shè)計說明書—課程設(shè)計(12頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 自動打鈴系統(tǒng)設(shè)計說明書 學 生 姓 名: 學 號: 專 業(yè) 班 級: 報告提交日期:201 目錄 一、題目及要求簡介……………3 1.設(shè)計題目…………………3 2.總體要求簡介…
2、…………3 二、設(shè)計方案說明……………3 三、系統(tǒng)采用器件以及模塊說明………3 1.系統(tǒng)框圖…………4 2.選擇的FPGA芯片及配置………4 3.系統(tǒng)端口和模塊說明…………5 四、各部分仿真結(jié)果………5 五、調(diào)試及總結(jié)………6 六、參考文獻……7 七、附錄………7 一、 題目及要求簡介 1、設(shè)計題目 設(shè)計一個多功能自動打鈴系統(tǒng) 2、總體要求簡介 ① 基本計時和顯示功能(24小時制顯示),包括: 1. 24小時制顯示 2. 動態(tài)掃描顯示; 3. 顯示格式:88-88-88 ② 能設(shè)置當前時
3、間(含時、分) ③ 能實現(xiàn)基本打鈴功能,規(guī)定: 06:00起床鈴,打鈴5s 二、 設(shè)計方案說明 本次設(shè)計主要采用Verilog HDL硬件描述性語言、分模塊法設(shè)計的自動打鈴系統(tǒng)。由于這次用的開發(fā)板提供的是50M晶振。首先要對時鐘進行分頻,當計時到2FA_F07F時完成1s分頻,通過計時到60s產(chǎn)生分鐘進位信號,再通過60分鐘產(chǎn)生時鐘進位信號。最后通過6個寄存器對時分秒進行鎖存最終輸出到8個數(shù)碼管上完成顯示。當顯示時鐘和默認鬧鐘時鐘相等時,驅(qū)動打鈴模塊。通過key_mode,key_turn,key_change查看鬧鐘,時鐘顯示,調(diào)整時鐘。 三、 系統(tǒng)采用器件以及
4、模塊說明 1.系統(tǒng)框圖如下: 系統(tǒng)框圖如下: 2.選擇的FPGA芯片及配置:本次系統(tǒng)設(shè)計采用的FPGA芯片是Alter公司生產(chǎn)的Cyclone II EP2C8Q208C8。該芯片是208個管腳,138個IO,并且具有兩個內(nèi)部PLL,而且內(nèi)嵌乘法器,8K的邏輯門,資源相當豐富。完成這次自動打鈴系統(tǒng)的設(shè)計總共消耗250個LE單元,22個IO口,131個寄存器。經(jīng)過綜合后,本系統(tǒng)最高能實現(xiàn)145M的運行速度。通過Quartus II 軟件觀察到內(nèi)部的RTL圖如下 3.系統(tǒng)端口和模塊說明 (1)分頻部分 分頻器的作用是對50Mhz的系統(tǒng)時鐘信號進行分頻,得到頻率為1hz的信號,即為
5、1S的計時信號。 (2)按鍵部分 按鍵key_mode--0為顯示計時,1為鬧鐘顯示,2為調(diào)整時間。 按鍵key_turn—0為調(diào)整小時,1為調(diào)整分鐘。 按鍵key_change—每按一次加1 (3)計時部分 通過sec_L,sec_H,min_L,min_H,hour_L,hour_H 6個寄存器對時分秒進行鎖存然后送入數(shù)碼管顯示 (4) 鬧鐘模塊 當設(shè)定的鬧鐘時間和數(shù)碼管上顯示的時間相等時驅(qū)動鬧鐘,完成打鈴,持續(xù)時間5s。 (5)數(shù)碼管顯示模塊 顯示模塊是由8個位選8個段選構(gòu)成的顯示模塊,利用人眼的余暉效果完成動態(tài)掃描,顯示時間。 四、 各部分仿真結(jié)果 測
6、試文件如下: module clock_tb; reg sysclk,rst_b; reg key_mode,key_turn,key_change; wire buzzer; wire [7:0] led_sel,led_data; clock I_clock( .sysclk (sysclk),.rst_b (rst_b),.key_mode (key_mode), .key_change (key_change),.key_turn (key_turn),.buzzer (buzzer),.led_sel (led_sel),.led_data (led_da
7、ta)); initial begin sysclk = 1b1; rst_b = 1b0; //復位信號 #30 rst_b = 1b1; end always #10 sysclk = ~sysclk; //輸入的系統(tǒng)時鐘,20ns的周期 endmodule 五、 調(diào)試及總結(jié) 本次課程設(shè)計總共花費了四天左右的時間,設(shè)計了自動打鈴系統(tǒng)。通過這次的設(shè)計更加熟悉了對EDA技術(shù)的了解和認識,在中也發(fā)現(xiàn)許多不足的地方。使用了自頂而下的設(shè)計方法,使得設(shè)計更加的簡單和明了。在調(diào)試過程中,有些代碼的設(shè)計不規(guī)范性,導致時序相當緩慢,甚至編譯綜合都會報錯。在不斷的修改下
8、,發(fā)現(xiàn)時序電路和組合邏輯最好分開寫,這樣便于查錯,和修改代碼。畢竟Verilog HDL語言不同于C語言,不能以軟件的思想來設(shè)計,而是要利用電路的思想來編程,這樣可以更好的節(jié)省資源,使得時序也比較的簡單明了。在以后的學習及程序設(shè)計當中,我們一定要倍加小心,在程序出現(xiàn)不正常運行的情況下要耐心調(diào)試,盡量做到精益求精。 最后通過這次EDA方面的課程設(shè)計, 提高了我們對EDA領(lǐng)域及通信電路設(shè)計領(lǐng)域的認識,有利于培養(yǎng)我們在通信電路EDA方面的設(shè)計能力。有利于鍛煉我們獨立分析問題和解決問題的能力。 六、 文獻參考 [1] . 王金明、左自強 編,《EDA技術(shù)與Verilog設(shè)計》科學出版社 2
9、008.8 [2] . 杜慧敏、李宥謀、趙全良 編,《基于Verilog的FPGA設(shè)計基礎(chǔ)》 西安電子科技大學出版社 2006.2 [3] . 韓彬 編,《從零開始走進FPGA世界》杭州無線電愛好者協(xié)會出版社 2011.8.20 七、 附錄(實物圖及源碼) module clock(//Input sysclk,rst_b,key_mode,key_change,key_turn, //Output buzzer,led_sel,led_data ); input sysclk,rst_b; //sysclk--global sy
10、stem clock,rst_b--global reset signal input key_mode;//mode choose .0--Timing function.1--Alarm clock function.2--adjust function input key_turn;//choose adjust minute or hour input key_change;//count add 1 output buzzer; //device buzzer output [7:0] led_sel;//led tube bit choose output [
11、7:0] led_data;//led_tube 8 bit data choose parameter init_hour = 8h12; parameter init_min = 8h59; parameter init_sec = 8h50; //initial time :12:59:50 parameter init_alarm_hour = 8h06; parameter init_alarm_min = 8h30;//initial alarm time : 06:30:0 parameter Count_1s = 28h2FA_F07F; //count
12、time 1s; reg [7:0] sec; reg [7:0] min; reg [7:0] hour; reg [3:0] min_L; //minute low 4 bit reg [3:0] min_H; //minute high 4 bit reg [3:0] hour_L; //hour low 4 bit reg [3:0] hour_H; //hour high 4 bit reg [23:0] key_time; //press key away shake reg key_mode_n; //press key_mode next sta
13、te reg key_change_n; //press key_change next state reg key_turn_n; //press key_turn next state wire key_mode_press; //sure Button press key_mode wire key_turn_press; //sure button press key_turn wire key_change_press;//sure button press key_change always @ (posedge sysclk ) key_mode_n
14、<= key_mode; assign key_mode_press = (!key_mode) && (key_mode_n); always @ (posedge sysclk ) key_turn_n <= key_turn; assign key_turn_press = (!key_turn) && (key_turn_n); always @ (posedge sysclk ) key_change_n <= key_change; assign key_change_press = (!key_change) && (key_change_n); always @
15、 (posedge sysclk or negedge rst_b) begin if(!rst_b) key_time <= 24h0; else if(key_time != 24h0) key_time <= key_time + 24h1; else if((key_time == 24h0) && (key_mode_press || key_change_press || key_turn_press)) key_time <= key_time + 24h1; end reg [1:0] mode_num; //key mode ..0--Timin
16、g function.1--Alarm clock function.2--adjust function always @ (posedge sysclk or negedge rst_b) begin if(!rst_b) mode_num <= 2b00; else if(mode_num == 2h3) mode_num <= 2h0; else if(key_mode_press && (key_time == 24h0)) mode_num <= mode_num + 2h1; end always @ (*) begin if(mode_n
17、um == 2h1)begin min = init_alarm_min; hour = init_alarm_hour; end else begin min = {min_H,min_L}; hour = {hour_H,hour_L}; end end reg fm; //choose turn hour or minute always @ (posedge sysclk or negedge rst_b) begin if(!rst_b) fm <= 1b0; else if(key_turn_press && (mode_num == 2
18、h2) && (key_time == 24h0)) fm <= ~fm; end reg [27:0] time_cnt; ///count time reg [27:0] time_cnt_n; //count time next state always @ (posedge sysclk or negedge rst_b) begin if(!rst_b) time_cnt <= 28h0; else time_cnt <= time_cnt_n; end always @ (*) begin if(time_cnt == Count_1s)
19、 time_cnt_n <= 28h0; else if(mode_num != 2h0) time_cnt_n <= time_cnt; else time_cnt_n <= time_cnt + 28h1; end reg [3:0] sec_L; //second low 4 bit reg [3:0] sec_H; //second high 4 bit wire sec_cb; //second carry bit signal assign sec_cb = (sec_L == 4h9) && (sec_H == 4h5); always @ (
20、posedge sysclk or negedge rst_b) begin if(!rst_b)begin sec_L <= init_sec[3:0]; sec_H <= init_sec[7:4]; end else if((sec_L == 4h9) && (sec_H != 4h5) && (time_cnt == Count_1s)) begin sec_L <= 4h0; sec_H <= sec_H + 4h1; end else if(sec_cb && (time_cnt == Count_1s)) begin sec_L <
21、= 4h0; sec_H <= 4h0; end else if(time_cnt == Count_1s) sec_L <= sec_L + 4h1; end wire min_cb; //minute carry bit signal assign min_cb = (min_L == 4h9) && (min_H == 4h5); always @ (posedge sysclk or negedge rst_b) begin if(!rst_b)begin min_L <= init_min[3:0]; min_H <= init_min[7:
22、4]; end else if((sec_cb) && (min_L !=4h9) && (time_cnt == Count_1s)) min_L <= min_L + 4h1; else if((sec_cb) && (min_L == 4h9) && (min_H != 4h5) && (time_cnt == Count_1s)) begin min_L <= 4h0; min_H <= min_H + 4h1; end else if((sec_cb) && (min_cb) && (time_cnt == Count_1s)) begin
23、 min_L <= 4h0; min_H <= 4h0; end else if((fm) && (mode_num == 2h2) && (key_change_press) && (key_time == 24h0) && (min_L != 4h9)) min_L = min_L + 4h1; else if((fm) && (mode_num == 2h2) &&(key_change_press) && (key_time == 24h0) && (min_L == 4h9) && (min_H !=4h5)) begin min_L = 4h0; mi
24、n_H = min_H + 4h1; end else if((fm) && (mode_num == 2h2) &&(key_change_press) && (key_time == 24h0) && (min_L == 4h9) && (min_H ==4h5)) begin min_L = 4h0; min_H = 4h0; end end always @ (posedge sysclk or negedge rst_b) begin if(!rst_b) begin hour_L <= init_hour[3:0]; hour_H <=
25、init_hour[7:4]; end else if((sec_cb) && (min_cb) && (hour_L != 4h9) && (hour_H != 4h2) && (time_cnt == Count_1s)) hour_L <= hour_L + 4h1; else if((sec_cb) && (min_cb) && (hour_L != 4h3) && (hour_H == 4h2) && (time_cnt == Count_1s)) hour_L <= hour_L + 4h1; else if((sec_cb) && (min_cb) &
26、& (hour_L == 4h9) && (hour_H != 4h2) && (time_cnt == Count_1s)) begin hour_L <= 4h0; hour_H <= hour_H + 4h1; end else if((sec_cb) && (min_cb) && (hour_L == 4h3) && (hour_H == 4h2) && (time_cnt == Count_1s)) begin hour_L <= 4h0; hour_H <= 4h0; end else if((!fm) && (mode_num == 2h2)
27、&&(key_change_press) && (key_time == 24h0) && (hour_L != 4h9) && (hour_H !=4h2)) hour_L <= hour_L + 4h1; else if((!fm) && (mode_num == 2h2) &&(key_change_press) && (key_time == 24h0) && (hour_L != 4h3) && (hour_H ==4h2)) hour_L <= hour_L + 4h1; else if((!fm) && (mode_num == 2h2) &&(key_cha
28、nge_press) && (key_time == 24h0) && (hour_L == 4h9) && (hour_H !=4h2)) begin hour_L <= 4h0; hour_H <= hour_H + 4h1; end else if((!fm) && (mode_num == 2h2) &&(key_change_press) && (key_time == 24h0) && (hour_L == 4h3) && (hour_H ==4h2)) begin hour_L <= 4h0; hour_H <= 4h0; end end
29、 wire buzzer_en; assign buzzer_en = (init_alarm_min == {min_H,min_L}) && (init_alarm_hour == {hour_H,hour_L}); led_tube I_led_tube ( .sysclk (sysclk), .rst_b (rst_b), .scan_time (24h1F090), .data0 ({1h1,sec_L}), .data1 ({1h1,sec_H}), .data2 ({1h1,4hA}), .data3 ({1h1,min[3:0]}), .data4 ({1h1,min[7:4]}), .data5 ({1h1,4hA}), .data6 ({1h1,hour[3:0]}), .data7 ({1h1,hour[7:4]}), .led_data (led_data), .led_sel (led_sel) ); buzzer I_buzzer ( .sysclk (sysclk), .rst_b (rst_b), .buzzer_en (buzzer_en), .buzzer (buzzer) ); endmodule
- 溫馨提示:
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復習題含答案
- 1 各種煤礦安全考試試題含答案