自動(dòng)打鈴系統(tǒng)設(shè)計(jì)說(shuō)明書(shū)—課程設(shè)計(jì)
《自動(dòng)打鈴系統(tǒng)設(shè)計(jì)說(shuō)明書(shū)—課程設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《自動(dòng)打鈴系統(tǒng)設(shè)計(jì)說(shuō)明書(shū)—課程設(shè)計(jì)(12頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 自動(dòng)打鈴系統(tǒng)設(shè)計(jì)說(shuō)明書(shū) 學(xué) 生 姓 名: 學(xué) 號(hào): 專(zhuān) 業(yè) 班 級(jí): 報(bào)告提交日期:201 目錄 一、題目及要求簡(jiǎn)介……………3 1.設(shè)計(jì)題目…………………3 2.總體要求簡(jiǎn)介…
2、…………3 二、設(shè)計(jì)方案說(shuō)明……………3 三、系統(tǒng)采用器件以及模塊說(shuō)明………3 1.系統(tǒng)框圖…………4 2.選擇的FPGA芯片及配置………4 3.系統(tǒng)端口和模塊說(shuō)明…………5 四、各部分仿真結(jié)果………5 五、調(diào)試及總結(jié)………6 六、參考文獻(xiàn)……7 七、附錄………7 一、 題目及要求簡(jiǎn)介 1、設(shè)計(jì)題目 設(shè)計(jì)一個(gè)多功能自動(dòng)打鈴系統(tǒng) 2、總體要求簡(jiǎn)介 ① 基本計(jì)時(shí)和顯示功能(24小時(shí)制顯示),包括: 1. 24小時(shí)制顯示 2. 動(dòng)態(tài)掃描顯示; 3. 顯示格式:88-88-88 ② 能設(shè)置當(dāng)前時(shí)
3、間(含時(shí)、分) ③ 能實(shí)現(xiàn)基本打鈴功能,規(guī)定: 06:00起床鈴,打鈴5s 二、 設(shè)計(jì)方案說(shuō)明 本次設(shè)計(jì)主要采用Verilog HDL硬件描述性語(yǔ)言、分模塊法設(shè)計(jì)的自動(dòng)打鈴系統(tǒng)。由于這次用的開(kāi)發(fā)板提供的是50M晶振。首先要對(duì)時(shí)鐘進(jìn)行分頻,當(dāng)計(jì)時(shí)到2FA_F07F時(shí)完成1s分頻,通過(guò)計(jì)時(shí)到60s產(chǎn)生分鐘進(jìn)位信號(hào),再通過(guò)60分鐘產(chǎn)生時(shí)鐘進(jìn)位信號(hào)。最后通過(guò)6個(gè)寄存器對(duì)時(shí)分秒進(jìn)行鎖存最終輸出到8個(gè)數(shù)碼管上完成顯示。當(dāng)顯示時(shí)鐘和默認(rèn)鬧鐘時(shí)鐘相等時(shí),驅(qū)動(dòng)打鈴模塊。通過(guò)key_mode,key_turn,key_change查看鬧鐘,時(shí)鐘顯示,調(diào)整時(shí)鐘。 三、 系統(tǒng)采用器件以及
4、模塊說(shuō)明 1.系統(tǒng)框圖如下: 系統(tǒng)框圖如下: 2.選擇的FPGA芯片及配置:本次系統(tǒng)設(shè)計(jì)采用的FPGA芯片是Alter公司生產(chǎn)的Cyclone II EP2C8Q208C8。該芯片是208個(gè)管腳,138個(gè)IO,并且具有兩個(gè)內(nèi)部PLL,而且內(nèi)嵌乘法器,8K的邏輯門(mén),資源相當(dāng)豐富。完成這次自動(dòng)打鈴系統(tǒng)的設(shè)計(jì)總共消耗250個(gè)LE單元,22個(gè)IO口,131個(gè)寄存器。經(jīng)過(guò)綜合后,本系統(tǒng)最高能實(shí)現(xiàn)145M的運(yùn)行速度。通過(guò)Quartus II 軟件觀察到內(nèi)部的RTL圖如下 3.系統(tǒng)端口和模塊說(shuō)明 (1)分頻部分 分頻器的作用是對(duì)50Mhz的系統(tǒng)時(shí)鐘信號(hào)進(jìn)行分頻,得到頻率為1hz的信號(hào),即為
5、1S的計(jì)時(shí)信號(hào)。 (2)按鍵部分 按鍵key_mode--0為顯示計(jì)時(shí),1為鬧鐘顯示,2為調(diào)整時(shí)間。 按鍵key_turn—0為調(diào)整小時(shí),1為調(diào)整分鐘。 按鍵key_change—每按一次加1 (3)計(jì)時(shí)部分 通過(guò)sec_L,sec_H,min_L,min_H,hour_L,hour_H 6個(gè)寄存器對(duì)時(shí)分秒進(jìn)行鎖存然后送入數(shù)碼管顯示 (4) 鬧鐘模塊 當(dāng)設(shè)定的鬧鐘時(shí)間和數(shù)碼管上顯示的時(shí)間相等時(shí)驅(qū)動(dòng)鬧鐘,完成打鈴,持續(xù)時(shí)間5s。 (5)數(shù)碼管顯示模塊 顯示模塊是由8個(gè)位選8個(gè)段選構(gòu)成的顯示模塊,利用人眼的余暉效果完成動(dòng)態(tài)掃描,顯示時(shí)間。 四、 各部分仿真結(jié)果 測(cè)
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ù)位信號(hào) #30 rst_b = 1b1; end always #10 sysclk = ~sysclk; //輸入的系統(tǒng)時(shí)鐘,20ns的周期 endmodule 五、 調(diào)試及總結(jié) 本次課程設(shè)計(jì)總共花費(fèi)了四天左右的時(shí)間,設(shè)計(jì)了自動(dòng)打鈴系統(tǒng)。通過(guò)這次的設(shè)計(jì)更加熟悉了對(duì)EDA技術(shù)的了解和認(rèn)識(shí),在中也發(fā)現(xiàn)許多不足的地方。使用了自頂而下的設(shè)計(jì)方法,使得設(shè)計(jì)更加的簡(jiǎn)單和明了。在調(diào)試過(guò)程中,有些代碼的設(shè)計(jì)不規(guī)范性,導(dǎo)致時(shí)序相當(dāng)緩慢,甚至編譯綜合都會(huì)報(bào)錯(cuò)。在不斷的修改下
8、,發(fā)現(xiàn)時(shí)序電路和組合邏輯最好分開(kāi)寫(xiě),這樣便于查錯(cuò),和修改代碼。畢竟Verilog HDL語(yǔ)言不同于C語(yǔ)言,不能以軟件的思想來(lái)設(shè)計(jì),而是要利用電路的思想來(lái)編程,這樣可以更好的節(jié)省資源,使得時(shí)序也比較的簡(jiǎn)單明了。在以后的學(xué)習(xí)及程序設(shè)計(jì)當(dāng)中,我們一定要倍加小心,在程序出現(xiàn)不正常運(yùn)行的情況下要耐心調(diào)試,盡量做到精益求精。 最后通過(guò)這次EDA方面的課程設(shè)計(jì), 提高了我們對(duì)EDA領(lǐng)域及通信電路設(shè)計(jì)領(lǐng)域的認(rèn)識(shí),有利于培養(yǎng)我們?cè)谕ㄐ烹娐稥DA方面的設(shè)計(jì)能力。有利于鍛煉我們獨(dú)立分析問(wèn)題和解決問(wèn)題的能力。 六、 文獻(xiàn)參考 [1] . 王金明、左自強(qiáng) 編,《EDA技術(shù)與Verilog設(shè)計(jì)》科學(xué)出版社 2
9、008.8 [2] . 杜慧敏、李宥謀、趙全良 編,《基于Verilog的FPGA設(shè)計(jì)基礎(chǔ)》 西安電子科技大學(xué)出版社 2006.2 [3] . 韓彬 編,《從零開(kāi)始走進(jìn)FPGA世界》杭州無(wú)線電愛(ài)好者協(xié)會(huì)出版社 2011.8.20 七、 附錄(實(shí)物圖及源碼) 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: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案