自動打鈴系統(tǒng)設(shè)計說明書—課程設(shè)計
《自動打鈴系統(tǒng)設(shè)計說明書—課程設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《自動打鈴系統(tǒng)設(shè)計說明書—課程設(shè)計(12頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 自動打鈴系統(tǒng)設(shè)計說明書 學(xué) 生 姓 名: 學(xué) 號: 專 業(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è)置當(dāng)前時
3、間(含時、分) ③ 能實現(xiàn)基本打鈴功能,規(guī)定: 06:00起床鈴,打鈴5s 二、 設(shè)計方案說明 本次設(shè)計主要采用Verilog HDL硬件描述性語言、分模塊法設(shè)計的自動打鈴系統(tǒng)。由于這次用的開發(fā)板提供的是50M晶振。首先要對時鐘進行分頻,當(dāng)計時到2FA_F07F時完成1s分頻,通過計時到60s產(chǎn)生分鐘進位信號,再通過60分鐘產(chǎn)生時鐘進位信號。最后通過6個寄存器對時分秒進行鎖存最終輸出到8個數(shù)碼管上完成顯示。當(dāng)顯示時鐘和默認(rèn)鬧鐘時鐘相等時,驅(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的邏輯門,資源相當(dāng)豐富。完成這次自動打鈴系統(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) 鬧鐘模塊 當(dāng)設(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; //復(fù)位信號 #30 rst_b = 1b1; end always #10 sysclk = ~sysclk; //輸入的系統(tǒng)時鐘,20ns的周期 endmodule 五、 調(diào)試及總結(jié) 本次課程設(shè)計總共花費了四天左右的時間,設(shè)計了自動打鈴系統(tǒng)。通過這次的設(shè)計更加熟悉了對EDA技術(shù)的了解和認(rèn)識,在中也發(fā)現(xiàn)許多不足的地方。使用了自頂而下的設(shè)計方法,使得設(shè)計更加的簡單和明了。在調(diào)試過程中,有些代碼的設(shè)計不規(guī)范性,導(dǎo)致時序相當(dāng)緩慢,甚至編譯綜合都會報錯。在不斷的修改下
8、,發(fā)現(xiàn)時序電路和組合邏輯最好分開寫,這樣便于查錯,和修改代碼。畢竟Verilog HDL語言不同于C語言,不能以軟件的思想來設(shè)計,而是要利用電路的思想來編程,這樣可以更好的節(jié)省資源,使得時序也比較的簡單明了。在以后的學(xué)習(xí)及程序設(shè)計當(dāng)中,我們一定要倍加小心,在程序出現(xiàn)不正常運行的情況下要耐心調(diào)試,盡量做到精益求精。 最后通過這次EDA方面的課程設(shè)計, 提高了我們對EDA領(lǐng)域及通信電路設(shè)計領(lǐng)域的認(rèn)識,有利于培養(yǎng)我們在通信電路EDA方面的設(shè)計能力。有利于鍛煉我們獨立分析問題和解決問題的能力。 六、 文獻參考 [1] . 王金明、左自強 編,《EDA技術(shù)與Verilog設(shè)計》科學(xué)出版社 2
9、008.8 [2] . 杜慧敏、李宥謀、趙全良 編,《基于Verilog的FPGA設(shè)計基礎(chǔ)》 西安電子科技大學(xué)出版社 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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六級上冊科學(xué)ppt課件-誰選擇了它們-教科版
- 護理核心制度培訓(xùn)一_圖文課件
- 部編《池子與河流》課件
- SWOT分析法(非常全面)課件
- 主題班會我的成長目標(biāo)課件
- 城市交通擁堵及治理總結(jié)課件
- 輸血相關(guān)性急性肺損傷課件
- 議論文的謀篇布局與論點的提出ppt課件
- 六級上冊科學(xué)ppt課件-地球的近鄰——月球-冀人版
- 疾病預(yù)防、冬季保暖-課件
- 中考英語語法復(fù)習(xí)之狀語從句ppt課件集4
- 《百分?jǐn)?shù)的意義和讀寫》參考ppt課件
- 主題班會堅持就是勝利課件
- 第二章--用人單位對大學(xué)生的要求概況ppt課件
- 教科版六年級科學(xué)上冊第三單元檢測卷(含答案)課件