版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> EDA技術(shù)</b></p><p> 課 程 設(shè) 計(jì) 報(bào) 告</p><p> 課題 數(shù)字時(shí)鐘 </p><p> 姓 名 </p><p> 學(xué) 號(hào) </p&g
2、t;<p> 專業(yè)班級(jí) </p><p> 指導(dǎo)教師 </p><p> 時(shí) 間 </p><p><b> 課程設(shè)計(jì)任務(wù)書</b></p><p><b> 數(shù)字鐘
3、設(shè)計(jì)</b></p><p><b> 摘 要</b></p><p> 人類社會(huì)已進(jìn)入到高度發(fā)達(dá)的信息化社會(huì)。信息化社會(huì)的發(fā)展離不開電子信息產(chǎn)品開發(fā)技術(shù)、產(chǎn)品品質(zhì)的提高和進(jìn)步。實(shí)現(xiàn)這種進(jìn)步的主要原因就是電子設(shè)計(jì)技術(shù)和電子制造技術(shù)的發(fā)展,其核心就是電子設(shè)計(jì)自動(dòng)化技術(shù),EDA技術(shù)的發(fā)展和推廣應(yīng)用又極大的推動(dòng)了電子信息產(chǎn)業(yè)的發(fā)展。</p>
4、<p> EDA技術(shù)在電子系統(tǒng)設(shè)計(jì)領(lǐng)域越來越普及,本設(shè)計(jì)主要利用VHDL語言在EDA平臺(tái)上設(shè)計(jì)一個(gè)電子數(shù)字鐘,它的計(jì)時(shí)為24小時(shí)小時(shí)制,顯示滿刻度為23時(shí)59分59秒,另外還具有校時(shí)功能和鬧鐘功能。總的程序由幾個(gè)各具不同功能的單元模塊程序拼接而成,其中包括分頻程序模塊、時(shí)分秒計(jì)時(shí)、校時(shí)程序模塊、鬧鐘控制器程序模塊、預(yù)制寄存器模塊、鬧鐘寄存器程序模塊和顯示驅(qū)動(dòng)器程序設(shè)計(jì)。且使用QUARTUS II 軟件進(jìn)行電路波形仿真,下載到
5、EDA實(shí)驗(yàn)箱進(jìn)行驗(yàn)證。</p><p> 關(guān)鍵詞 數(shù)字鐘;EDA;vhdl語言</p><p><b> 目 錄</b></p><p><b> 課程設(shè)計(jì)任務(wù)書I</b></p><p><b> 摘 要II</b></p><p>
6、<b> 1設(shè)計(jì)概述1</b></p><p><b> 2設(shè)計(jì)方案2</b></p><p> 2.1系統(tǒng)設(shè)計(jì)方案2</p><p><b> 3設(shè)計(jì)實(shí)現(xiàn)4</b></p><p> 3.1鬧鐘控制器實(shí)現(xiàn)4</p><p>
7、; 3.2預(yù)置寄存器實(shí)現(xiàn)4</p><p> 3.3鬧鐘寄存器實(shí)現(xiàn)4</p><p> 3.4分頻電路實(shí)現(xiàn)5</p><p> 3.5時(shí)鐘計(jì)數(shù)器實(shí)現(xiàn)5</p><p> 3.6顯示驅(qū)動(dòng)器實(shí)現(xiàn)5</p><p> 3.7頂層原件實(shí)現(xiàn)5</p><p><b
8、> 4設(shè)計(jì)驗(yàn)證6</b></p><p> 4.1鬧鐘控制器驗(yàn)證6</p><p> 4.2預(yù)置寄存器驗(yàn)證6</p><p> 4.3鬧鐘寄存器驗(yàn)證6</p><p> 4.4分頻電路驗(yàn)證7</p><p> 4.5時(shí)鐘計(jì)數(shù)器驗(yàn)證7</p><p
9、> 4.6顯示驅(qū)動(dòng)器驗(yàn)證8</p><p><b> 5總結(jié)9</b></p><p><b> 參考文獻(xiàn)10</b></p><p><b> 附錄11</b></p><p><b> 設(shè)計(jì)概述</b></p>
10、<p> 數(shù)字鐘是一種用數(shù)字電路技術(shù)實(shí)現(xiàn)時(shí)、分、秒計(jì)時(shí)的鐘表。與機(jī)械鐘相比具有更高的準(zhǔn)確性和直觀性,具有更長(zhǎng)的使用壽命,已得到廣泛的使用。數(shù)字鐘的設(shè)計(jì)方法有許多種,例如可用中小規(guī)模集成電路組成電子鐘,也可以利用專用的電子鐘芯片配以顯示電路及其所需要的外圍電路組成電子鐘,還可以利用單片機(jī)來實(shí)現(xiàn)電子鐘等等。這些方法都各有其特點(diǎn),其中利用單片機(jī)實(shí)現(xiàn)的電子鐘具有編程靈活,以便于功能的擴(kuò)展[1]。</p><p&
11、gt; 數(shù)字鐘無非就是分頻計(jì)數(shù),設(shè)計(jì)出60進(jìn)制,24進(jìn)制計(jì)數(shù)器,在這里,秒分計(jì)數(shù)是60進(jìn)制,時(shí)計(jì)數(shù)是24進(jìn)制,對(duì)1Hz信號(hào)進(jìn)行60分頻也就產(chǎn)生了分計(jì)數(shù)脈沖,對(duì)1Hz進(jìn)行3600分頻也就產(chǎn)生了時(shí)計(jì)數(shù)脈沖,為了方便校時(shí),系統(tǒng)設(shè)計(jì)時(shí)未直接采用試驗(yàn)箱上的1Hz作為基準(zhǔn)時(shí)鐘源,而是對(duì)1kHz進(jìn)行1000分頻產(chǎn)生秒脈沖,1000分頻作為校時(shí)與鬧鐘時(shí)間設(shè)置脈沖,為方便調(diào)鬧鐘,采用了數(shù)據(jù)選擇器選擇輸出正常走時(shí)或鬧鐘時(shí)間。利用位選信號(hào)進(jìn)行動(dòng)態(tài)掃描,點(diǎn)亮
12、數(shù)碼管,顯示正常的計(jì)時(shí)時(shí)間。</p><p><b> 設(shè)計(jì)方案</b></p><p><b> 設(shè)計(jì)要求</b></p><p> 在EDA實(shí)驗(yàn)箱上利用FPGA、LED彩燈及數(shù)碼管實(shí)現(xiàn)數(shù)字鐘設(shè)計(jì),功能要求如下:</p><p> 由試驗(yàn)箱上的時(shí)鐘信號(hào)經(jīng)分頻產(chǎn)生秒脈沖;</p>
13、<p> 用60進(jìn)制和24進(jìn)制實(shí)現(xiàn)計(jì)時(shí);</p><p> 可手動(dòng)校時(shí),能分別進(jìn)行時(shí)分的校正;</p><p> 可設(shè)置鬧時(shí)功能,當(dāng)計(jì)時(shí)到預(yù)定時(shí)間時(shí),揚(yáng)聲器發(fā)出鬧鈴信號(hào); </p><p><b> 系統(tǒng)設(shè)計(jì)方案</b></p><p> 經(jīng)過參考和分析后[2][3],得到數(shù)字鐘設(shè)計(jì)的總體設(shè)計(jì)方案
14、,總體設(shè)計(jì)方案的組成模塊及模塊間的關(guān)系如下圖所示:</p><p> 圖 21數(shù)字鐘設(shè)計(jì)原理圖</p><p> 數(shù)字時(shí)鐘設(shè)計(jì)總體設(shè)計(jì)方案中各模塊的主要功能如下:</p><p> 鬧鐘控制器模塊:通過有限狀態(tài)機(jī)(FSM)的方式來實(shí)現(xiàn)。估計(jì)設(shè)計(jì)要求及端口設(shè)置,需要五個(gè)狀態(tài)來實(shí)現(xiàn):</p><p> S0:表示電路初態(tài)即正常時(shí)鐘計(jì)數(shù)狀
15、態(tài),完成計(jì)時(shí)功能;</p><p> S1:接收預(yù)置數(shù)字輸入狀態(tài)。在狀態(tài)S0時(shí)用戶按下“key”鍵后進(jìn)入此狀態(tài)。在此狀態(tài)下,顯示屏上顯示的是用戶預(yù)置的數(shù)字。</p><p> S2:設(shè)置新的鬧鐘時(shí)間。在狀態(tài)S1時(shí)用戶按下“alarm”鍵后進(jìn)入此狀態(tài)。</p><p> S3:設(shè)置新的計(jì)時(shí)器時(shí)間。在狀態(tài)S1時(shí)用戶按下“time”鍵后進(jìn)入此狀態(tài)。</p>
16、;<p> S4:顯示鬧鐘時(shí)間。在狀態(tài)S0時(shí)用戶直接按下“alarm”鍵后進(jìn)入此狀態(tài)。在此狀態(tài)下,顯示屏上顯示的是所設(shè)置的鬧鐘時(shí)間。注意:在此狀態(tài)下,用戶按下“alarm”鍵后,顯示屏上保持顯示鬧鐘時(shí)間,經(jīng)過一段時(shí)間以后,再返回狀態(tài)S0顯示計(jì)時(shí)器時(shí)間。</p><p> 預(yù)置寄存器模塊:這是一個(gè)預(yù)置數(shù)字產(chǎn)生器和移位寄存器的結(jié)合體。</p><p> 鬧鐘寄存器模塊:在鬧
17、鐘上升沿同步下,根據(jù)load_new_a端口的輸入信號(hào)控制alarm_time端口的輸出。</p><p> 分頻模塊:將clk_in端口輸入的時(shí)鐘信號(hào)分頻后送給clk_out端口。</p><p> 時(shí)間計(jì)數(shù)模塊:由分頻電路的clk_out輸出提供1Hz的計(jì)數(shù)脈沖,實(shí)現(xiàn)秒分時(shí)的計(jì)時(shí)。</p><p> 顯示驅(qū)動(dòng)模塊:根據(jù)三個(gè)位選信號(hào)的動(dòng)態(tài)掃描,讓數(shù)碼管點(diǎn)亮并
18、顯示時(shí)間和預(yù)置數(shù)。</p><p> 頂層模塊:調(diào)用以上所有模塊,完成實(shí)驗(yàn)設(shè)計(jì)。</p><p><b> 設(shè)計(jì)實(shí)現(xiàn)</b></p><p><b> 鬧鐘控制器實(shí)現(xiàn)</b></p><p> Clk為時(shí)鐘外部,rst為復(fù)位信號(hào)。當(dāng)key為高電平時(shí),表示用戶按下數(shù)字鍵(“0”~“9”)。當(dāng)a
19、larm_button為高電平時(shí),表示用戶按下alarm鍵。當(dāng)time_button為高電平時(shí),表示用戶按下time鍵。當(dāng)load_new_a為高電平時(shí),控制加載新的鬧鐘時(shí)間值。當(dāng)load_new_c為高電平時(shí),控制設(shè)置新的時(shí)間。 </p><p> 當(dāng)show_new_time為高電平時(shí),控制數(shù)碼管顯示新的時(shí)間值;當(dāng)其為低電平,show_a為高電平時(shí),控制顯示鬧鐘時(shí)間,否則,顯示當(dāng)前時(shí)間。圖3.1
20、為鬧鐘控制器示意圖。</p><p><b> 預(yù)置寄存器實(shí)現(xiàn)</b></p><p> 這是一個(gè)預(yù)置數(shù)字產(chǎn)生器和移位寄存器的結(jié)合體。通過對(duì)key進(jìn)行操作,選擇輸入欲預(yù)置的數(shù)字,暫存用戶輸入的數(shù)字,且用戶每輸入一個(gè)數(shù)字,暫存數(shù)字移位一次,實(shí)現(xiàn)用戶輸入數(shù)字在顯示屏上從右到左的依次顯示。圖3.2為預(yù)置寄存器示意圖。</p><p><b&
21、gt; 鬧鐘寄存器實(shí)現(xiàn)</b></p><p> 鬧鐘寄存器模塊的功能是在時(shí)鐘上升沿同步下,根據(jù)load_new_a端口的輸入信號(hào)控制alarm_time端口的輸出;當(dāng)控制信號(hào)為高電平時(shí),把new_alarm_time端口的輸入信號(hào)值輸出;rst端口輸入信號(hào)對(duì)alarm_time端口輸出進(jìn)行異步的清零復(fù)位。圖3.3為鬧鐘寄存器的示意圖。 </p><p
22、><b> 分頻電路實(shí)現(xiàn)</b></p><p> 本模塊的功能是將clk_in端口輸入的時(shí)鐘信號(hào)分頻后送給clk_out端口;當(dāng)rst端口輸入信號(hào)為高電平時(shí),clk_out端口輸出信號(hào)清零。圖3.4為分頻電路示意圖。
23、 </p><p><b> 時(shí)鐘計(jì)數(shù)器實(shí)現(xiàn)</b></p><p> 時(shí)間計(jì)數(shù)器模塊的功能是當(dāng)rst端口輸入信號(hào)為高電平時(shí),對(duì)current_time端口輸出信號(hào)清零復(fù)位;當(dāng)load_new_c端口輸入信號(hào)為高電平時(shí),將new_current_time端口的輸入信號(hào)輸出給current_time端口。Rst端口的控制優(yōu)于
24、load_new_c端口。當(dāng)這兩個(gè)控制信號(hào)都無效時(shí),在時(shí)鐘上升沿同步下,對(duì)current_time端口輸出信號(hào)累加1,并根據(jù)小時(shí),分鐘,秒的規(guī)律處理進(jìn)位。圖3.5為時(shí)間計(jì)數(shù)器示意圖。 </p><p><b> 顯示驅(qū)動(dòng)器實(shí)現(xiàn)</b></p><p> 本模塊的功能是
25、:當(dāng)show_new_time端口輸入信號(hào)有效時(shí),根據(jù)new_time端口輸入信號(hào),產(chǎn)生相應(yīng)的6個(gè)待顯示的數(shù)據(jù);當(dāng)show_new_time端口輸入信號(hào)無效時(shí),判斷show_a端口的輸入信號(hào),為高電平時(shí),據(jù)alarm_time端口的輸入信號(hào)產(chǎn)生相應(yīng)的6個(gè)待顯示的數(shù)據(jù);為低電平時(shí),據(jù)current_time端口的輸入信號(hào),產(chǎn)生相應(yīng)的6個(gè)待顯示的數(shù)據(jù)。對(duì)于各個(gè)待顯示的數(shù)據(jù),根據(jù)動(dòng)態(tài)掃描顯示方式在driver端口輸出相應(yīng)的數(shù)據(jù)顯示驅(qū)動(dòng)信息和數(shù)
26、碼管選擇信息。當(dāng)alarm_time端口的輸入信號(hào)值與current_time端口的輸入信號(hào)值相同時(shí),sound_alarm端口的輸出信號(hào)有效,反之無效。圖3.6為顯示驅(qū)動(dòng)示意圖。</p><p><b> 頂層原件實(shí)現(xiàn)</b></p><p> 根據(jù)原理圖,定義端口的輸入和輸出信號(hào)。內(nèi)部就是對(duì)各個(gè)模塊的原件例,實(shí)現(xiàn)功能。</p><p>
27、<b> 設(shè)計(jì)驗(yàn)證</b></p><p><b> 鬧鐘控制器驗(yàn)證</b></p><p> 對(duì)鬧鐘控制模塊進(jìn)行仿真,得到仿真圖如下:</p><p> 圖 41鬧鐘控制器仿真圖</p><p> 當(dāng)clk事件發(fā)生,key和alarm_button為高電平時(shí),在下一個(gè)時(shí)鐘上升沿到來時(shí),
28、show_new_time有值的改變。當(dāng)rst為高電平時(shí),show_new_time清零。</p><p><b> 預(yù)置寄存器驗(yàn)證</b></p><p> 對(duì)預(yù)置寄存器模塊進(jìn)行仿真,得到仿真圖如下:</p><p> 圖 42預(yù)置寄存器仿真圖</p><p> 時(shí)鐘事件發(fā)生時(shí),keynum有0到9的順環(huán)輸出
29、。Rst的復(fù)位信號(hào)對(duì)keynum的輸出沒有影響,因?yàn)樗鼈儾皇峭贿M(jìn)程。</p><p><b> 鬧鐘寄存器驗(yàn)證</b></p><p> 對(duì)鬧鐘寄存器模塊進(jìn)行仿真,得到仿真圖如下:</p><p> 圖 43鬧鐘寄存器仿真圖</p><p> 讓load_new_a置高電平時(shí),new_alarm_time有值
30、的改變。波形中沒有對(duì)alarm_time的設(shè)置,故此沒有它的相關(guān)波形。</p><p><b> 分頻電路驗(yàn)證</b></p><p> 對(duì)分頻模塊進(jìn)行仿真,得到仿真圖如下:</p><p> 對(duì)1Khz的時(shí)鐘進(jìn)行1000分頻。后經(jīng)rst復(fù)位后,clk_out輸出為低。</p><p> 時(shí)鐘計(jì)數(shù)器驗(yàn)證 &l
31、t;/p><p> 對(duì)時(shí)鐘計(jì)數(shù)器模塊進(jìn)行仿真,得到仿真圖如下:</p><p> 圖 45時(shí)鐘計(jì)數(shù)仿真圖</p><p> 在1KHz的脈沖下計(jì)數(shù)器計(jì)時(shí)。Rst為高電平時(shí),時(shí)間復(fù)位。</p><p><b> 顯示驅(qū)動(dòng)器驗(yàn)證</b></p><p> 對(duì)顯示驅(qū)動(dòng)器模塊進(jìn)行仿真,得到仿真
32、圖如下:</p><p> 圖 46顯示驅(qū)動(dòng)仿真圖</p><p> 伴隨著時(shí)鐘信號(hào),位選有選擇的選中某個(gè)數(shù)碼管,并點(diǎn)亮它們。</p><p> 由于各個(gè)模塊仿真結(jié)果均達(dá)到了設(shè)計(jì)要求,因此可以將設(shè)計(jì)下載到試驗(yàn)箱上進(jìn)行驗(yàn)證。</p><p> 表 1端口和引腳的對(duì)應(yīng)關(guān)系</p><p><b> 總
33、結(jié)</b></p><p> 本實(shí)驗(yàn)我們實(shí)現(xiàn)了數(shù)字鐘設(shè)計(jì)中的計(jì)時(shí)功能,還有兩塊設(shè)置時(shí)間和鬧鐘的時(shí)間沒有在實(shí)驗(yàn)箱上實(shí)現(xiàn)。通過這次課程設(shè)計(jì),加深了我對(duì)EDA這門課程的了解,并且更加熟悉軟件的操作。在這次課程設(shè)計(jì)中,我的主要任務(wù)是查閱各種相關(guān)資料,并且整理選擇其中需要的的確是很有難度。但在組員和其他同學(xué)以及老師的幫助下,我們還是收集了一些重要的代碼。但盡管資料豐富,可惜自己平時(shí)的學(xué)習(xí)沒有到位。還是未能順利
34、相對(duì)有用的部分進(jìn)行歸納。雖然中間遇到了不少的難題,在眾多的復(fù)雜資料中找出完成整個(gè)實(shí)驗(yàn),在設(shè)置時(shí)間鬧鈴是遇到的難題,始終難以克服。加上時(shí)間有限,只能留下這個(gè)遺憾。但是在未來的學(xué)習(xí)生活中,我會(huì)更加嚴(yán)格要求自己,努力克服這些難題。</p><p><b> 參考文獻(xiàn)</b></p><p> 百度文庫.數(shù)字鐘設(shè)計(jì)[EB/OL]. http://baike.baidu.c
35、om/link?url=MWdwBL06cnRZqwHfU2IOx4jIbR75C1QW1hwlhbrRbrvvf-V_BlgFo0_jyYL__ESeNDFLJ2WpNzwlHYE5EIVA_K,2014-1-6</p><p> 劉艷昌,王廷雨.基于FPGA的數(shù)字鐘系統(tǒng)設(shè)計(jì)[J].河南科技學(xué)院學(xué)報(bào).2013,41(4):86-95</p><p> 孫維功.基于VHDL語言的數(shù)字鐘
36、設(shè)計(jì)[J].高科技產(chǎn)品研發(fā).2012,50-51</p><p> 中華文本庫.動(dòng)態(tài)掃描數(shù)碼管顯示VHDL[EB/OL]. http://www.chinadmd.com/file/uazizp3vooarpxuox3piztiu_1.html,2014-1-7</p><p> 譚會(huì)生.EDA技術(shù)及應(yīng)用實(shí)踐[M]. 第二版.湖南:湖南大學(xué)出版社,2010.299-314 </p
37、><p><b> 附錄</b></p><p> 附錄1:鬧鐘控制器模塊</p><p> PACKAGE P_ALARM IS --定義一個(gè)P_ALARM包</p><p> subtype t_digital is integer range 0 to 9;</p>
38、;<p> subtype t_short is integer range 0 to 65535;</p><p> type t_clock_time is array(5 downto 0) of t_digital;</p><p> type t_display is array(5 downto 0) of t_digital;</p><
39、;p> end PACKAGE P_ALARM;</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use work.P_ALARM.all;</p><p> entity control is </p><p>
40、;<b> port(</b></p><p> key:in std_logic; --若key=‘1’,則預(yù)置數(shù)被選中 </p><p> alarm_button:in std_logic; --鬧鈴設(shè)置按鈕</p><p> time_button:in std_logic
41、; --時(shí)間設(shè)置按鈕</p><p> clk:in std_logic; --時(shí)間輸入</p><p> rst:in std_logic; --復(fù)位信號(hào)</p><p> load_new_a: out std_logic; --lo
42、ad_new_a=‘1’,控制加載新的鬧鐘時(shí)間值</p><p> load_new_c:out std_logic; --load_new_c=‘1’,控制加載新的時(shí)間值</p><p> show_new_time:out std_logic; --show_new_time=‘1’,控制數(shù)碼管顯示新的時(shí)間值</p><p&
43、gt; show_a: out std_logic); --show_new_time=‘0’,且show_a=‘1’,控制顯示鬧--鐘時(shí)間,否則,顯示當(dāng)前時(shí)間</p><p> end entity control;</p><p> architecture art of control is </p><p> type t
44、_state is(s0,s1,s2,s3,s4);</p><p> constant key_timeout:t_short:=500;</p><p> constant show_alarm_timeout:t_short:=500;</p><p> signal curr_state:t_state;</p><p> s
45、ignal next_state:t_state;</p><p> signal counter_k:t_short;</p><p> signal enable_count_k:std_logic;</p><p> signal count_k_end:std_logic;</p><p> signal counter_a:
46、t_short;</p><p> signal enable_count_a:std_logic;</p><p> signal count_a_end:std_logic;</p><p><b> begin</b></p><p> p1: process(clk,rst)
47、 --初始狀態(tài)</p><p><b> begin</b></p><p> if rst='1' then</p><p> curr_state<=S0;</p><p> elsif clk'event and clk='1' t
48、hen</p><p> curr_state<=next_state;</p><p><b> end if;</b></p><p> end process p1;</p><p> p2:process(key,alarm_button,time_button,curr_state,count_a
49、_end,count_k_end) --狀態(tài)轉(zhuǎn)換</p><p><b> begin</b></p><p> next_state<=curr_state;</p><p> load_new_a<='0';</p><p> load_new_c<='0'
50、;;</p><p> show_a<='0';</p><p> show_new_time<='0';</p><p> enable_count_k<='0';</p><p> enable_count_a<='0';</p>
51、<p> case curr_state is</p><p> when S0=>if (key='0') then --正常計(jì)時(shí)</p><p> next_state<=S1;</p><p> show_new_time<='1';</p><
52、p> elsif (alarm_button='1') then</p><p> next_state<=S4;</p><p> show_a<='1';</p><p><b> else</b></p><p> next_state<=S0;&l
53、t;/p><p><b> end if;</b></p><p> when S1=>if (key='1') then --接收預(yù)置數(shù)字輸入狀態(tài)</p><p> next_state<=S1;</p><p> show_new_time<='1
54、';</p><p> elsif (alarm_button='1') then</p><p> next_state<=S2;</p><p> load_new_a<='1';</p><p> elsif (time_button='1') then<
55、/p><p> next_state<=S3;</p><p> load_new_c<='1';</p><p><b> else</b></p><p> if (count_k_end='1') then</p><p> next_sta
56、te<=S0;</p><p><b> else</b></p><p> next_state<=S1;</p><p><b> end if;</b></p><p> enable_count_k<='1';</p><p>
57、;<b> end if;</b></p><p> show_new_time<='1';</p><p> when S2=>if (alarm_button='1') then --設(shè)置新的鬧鐘時(shí)間</p><p> next_state<=S2;</p>&l
58、t;p> load_new_a<='1';</p><p><b> else</b></p><p> next_state<=S0;</p><p><b> end if;</b></p><p> when S3=>if (time_butt
59、on='1') then --設(shè)置新的計(jì)時(shí)時(shí)間</p><p> next_state<=S3;</p><p> load_new_c<='1';</p><p><b> else</b></p><p> next_state<=S0;</p
60、><p><b> end if;</b></p><p> when S4=>if (key='1') then --顯示鬧鐘時(shí)間</p><p> next_state<=S1;</p><p><b> else</b></p>
61、<p> next_state<=S4;</p><p> if (count_a_end='1') then</p><p> next_state<=S0;</p><p><b> else</b></p><p> next_state<=S4;</p&
62、gt;<p> show_a<='1';</p><p><b> end if;</b></p><p> enable_count_a<='1';</p><p><b> end if;</b></p><p> when o
63、thers=>null;</p><p><b> end case;</b></p><p> end process p2;</p><p> count_key:process(enable_count_k,clk) --key進(jìn)程</p><p><b> begi
64、n</b></p><p> if(enable_count_k='0') then</p><p> counter_k<=0;</p><p> count_k_end<='0';</p><p> elsif clk'event and clk='1'
65、; then</p><p> if (counter_k>=key_timeout) then</p><p> count_k_end<='1';</p><p><b> else</b></p><p> counter_k<=counter_k+1; </p>
66、;<p><b> end if;</b></p><p><b> end if;</b></p><p> end process count_key;</p><p> count_alarm:process(enable_count_a,clk) --鬧鐘進(jìn)程</p>
67、<p><b> begin</b></p><p> if (enable_count_a='0') then</p><p> counter_a<=0;</p><p> count_a_end<='0';</p><p> elsif clk
68、39;event and clk='1' then</p><p> if (counter_a>=show_alarm_timeout) then</p><p> count_a_end<='1';</p><p><b> else</b></p><p> co
69、unter_a<=counter_a+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process count_alarm;</p><p> end architecture art;
70、 </p><p> 附錄2:預(yù)置寄存器模塊</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> use work.P_ALARM.al
71、l;</p><p> entity keybuffer is</p><p> port(key:in std_logic; -- key輸入</p><p> clk:in std_logic; --經(jīng)分頻后的時(shí)鐘脈沖信號(hào)</p><p> rst:in std_
72、logic; --復(fù)位</p><p> keynum:out std_logic_vector(3 downto 0); --預(yù)置數(shù)產(chǎn)生</p><p> new_time:out t_clock_time); --新的鬧鐘時(shí)間或新的計(jì)時(shí)時(shí)間</p><p> end entity keyb
73、uffer;</p><p> architecture art of keybuffer is</p><p> signal n_t:t_clock_time;</p><p> signal cnt:std_logic_vector(3 downto 0);</p><p> signal temp:t_digital;<
74、;/p><p><b> begin</b></p><p> process(clk)</p><p><b> begin</b></p><p> if clk'event and clk='1' then --內(nèi)部0到9的計(jì)時(shí)</p&g
75、t;<p> if cnt=9 then</p><p> cnt<="0000";</p><p><b> else</b></p><p> cnt<=cnt+1;</p><p><b> end if;</b></p>
76、<p><b> end if;</b></p><p> temp<=conv_integer(cnt);</p><p> keynum<=cnt;</p><p> end process;</p><p> shift:process(rst,key)
77、 --復(fù)位和新的時(shí)間或鬧鐘時(shí)間的產(chǎn)生</p><p><b> begin</b></p><p> if rst='1' then</p><p> n_t(5)<=0;</p><p> n_t(4)<=0;</p><p> n_t
78、(3)<=0;</p><p> n_t(2)<=0;</p><p> n_t(1)<=0;</p><p> n_t(0)<=0;</p><p> elsif key'event and key='1' then</p><p> for i in 5 d
79、ownto 1 loop</p><p> n_t(i)<=n_t(i-1);</p><p><b> end loop;</b></p><p> n_t(0)<=temp;</p><p><b> end if;</b></p><p> end
80、 process shift;</p><p> new_time<=n_t;</p><p> end architecture art;</p><p> 附錄3:鬧鐘寄存器模塊</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;
81、</p><p> use work.P_ALARM.all;</p><p> entity reg is</p><p><b> port(</b></p><p> new_alarm_time:in t_clock_time; --接收預(yù)置寄存器的new_time后,作為輸入</p>
82、<p> load_new_a:in std_logic; --控制加載新的鬧鐘時(shí)間</p><p> clk:in std_logic; --經(jīng)分頻后的脈沖輸入</p><p> rst:in std_logi; --復(fù)位</p><p> alarm
83、_time:out t_clock_time --鬧鐘</p><p><b> );</b></p><p> end entity reg;</p><p> architecture art of reg is</p><p><b> begin </b></p
84、><p> process(clk,rst)</p><p><b> begin</b></p><p> if rst='1' then --讓秒分時(shí)清零</p><p> alarm_time(0)<=0;</p>
85、<p> alarm_time(1)<=0;</p><p> alarm_time(2)<=0;</p><p> alarm_time(3)<=0;</p><p> alarm_time(4)<=0;</p><p> alarm_time(5)<=0;</p><
86、p><b> else</b></p><p> if clk'event and clk='1' then</p><p> if load_new_a='1' then --控制新的鬧鐘時(shí)間</p><p> alarm_time&
87、lt;=new_alarm_time;</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p&g
88、t; end architecture art;</p><p> 附錄4:分頻電路模塊</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use work.P_ALARM.all;</p><p> entity d
89、ivider is</p><p><b> port(</b></p><p> clk_in:in std_logic;</p><p> rst:in std_logic;</p><p> clk_out:out std_logic);</p><p> end entity d
90、ivider;</p><p> architecture art of divider is</p><p> signal cnt_freq:integer range 0 to 999;</p><p> signal clk_1Hz:std_logic;</p><p> constant divide_period:t_sh
91、ort:=6000;</p><p><b> begin</b></p><p> process(clk_in,rst)</p><p> variable cnt:t_short;</p><p><b> begin</b></p><p> if rst
92、='1' then --復(fù)位</p><p><b> cnt:=0;</b></p><p> clk_out<='0';</p><p> elsif (clk_in'event and clk_in='1') then
93、 --分頻</p><p> if (cnt<=(divide_period/2)) then</p><p> clk_out<='1';</p><p> cnt:= cnt+1;</p><p> elsif (cnt < (divide_period-1)) then</p>
94、<p> clk_out<='0';</p><p> cnt:= cnt+1;</p><p><b> else</b></p><p><b> cnt:=0;</b></p><p><b> end if;</b></p
95、><p><b> end if;</b></p><p> end process;</p><p> end architecture art;</p><p> 附錄5:時(shí)間計(jì)數(shù)器模塊</p><p> library ieee;</p><p> use i
96、eee.std_logic_1164.all;</p><p> use work.P_ALARM.all;</p><p> entity counter is</p><p><b> port(</b></p><p> new_current_time:in t_clock_time;</p>
97、<p> load_new_c,clk,rst:in std_logic;</p><p> current_time:out t_clock_time);</p><p> end entity counter;</p><p> architecture art of counter is</p><p> sig
98、nal i_current_time:t_clock_time;</p><p><b> begin </b></p><p> process(clk,rst,load_new_c)</p><p> variable c_t:t_clock_time;</p><p><b> begin<
99、/b></p><p> if clk'event and clk='1' then</p><p> if rst='1' then --復(fù)位</p><p> i_current_time(5)<=0;</p><p>
100、 i_current_time(4)<=0;</p><p> i_current_time(3)<=0;</p><p> i_current_time(2)<=0;</p><p> i_current_time(1)<=0;</p><p> i_current_time(0)<=0;</p
101、><p> elsif load_new_c='1' then --計(jì)時(shí)</p><p> i_current_time<=new_current_time; </p><p> else </p><p&
102、gt; c_t:=i_current_time;</p><p> if c_t(0)<9 then</p><p> c_t(0):=c_t(0)+1;</p><p><b> else</b></p><p> c_t(0):=0;</p><p> if c_t(1)&l
103、t;5 then</p><p> c_t(1):=c_t(1)+1;</p><p><b> else</b></p><p> c_t(1):=0;</p><p> if c_t(2)<9 then</p><p> c_t(2):=c_t(2)+1;</p>
104、<p><b> else</b></p><p> c_t(2):=0;</p><p> if c_t(3)<5 then</p><p> c_t(3):=c_t(3)+1;</p><p><b> else </b></p><p>
105、c_t(3):=0;</p><p> if c_t(5)<2 then</p><p> if c_t(4)<9 then</p><p> c_t(4):=c_t(4)+1;</p><p><b> else</b></p><p> c_t(4):=0;</p
106、><p> c_t(5):=c_t(5)+1;</p><p><b> end if;</b></p><p><b> else</b></p><p> if c_t(4)<3 then</p><p> c_t(4):=c_t(4)+1;</p>
107、;<p><b> else</b></p><p> c_t(4):=0;</p><p> c_t(5):=0;</p><p><b> end if;</b></p><p><b> end if;</b></p><p&g
108、t;<b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> i_current_time<=c_t;</p><p><b> end if;</b&
109、gt;</p><p> i_current_time<=c_t;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> current_time<
110、;=i_current_time;</p><p> end architecture art;</p><p> 附錄6:顯示驅(qū)動(dòng)模塊</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_log
111、ic_arith.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> use work.P_ALARM.all;</p><p> entity driver is</p><p><b> port(</b></p><p>
112、 keynum:in std_logic_vector(3 downto 0);</p><p> clk:in std_logic;</p><p> alarm_time:in t_clock_time;</p><p> current_time:in t_clock_time;</p><p> new_time:in t_c
113、lock_time;</p><p> show_new_time:in std_logic;</p><p> show_a:in std_logic;</p><p> sound_alarm:out std_logic;</p><p> ledw:out std_logic_vector(2 downto 0);</p&
114、gt;<p> seg7:out std_logic_vector(7 downto 0)</p><p><b> );</b></p><p> end entity driver;</p><p> architecture art of driver is</p><p> signal
115、display_time:t_clock_time;</p><p> signal temp:integer range 0 to 9;</p><p> signal cnt:std_logic_vector(2 downto 0);</p><p><b> begin</b></p><p> a1: p
116、rocess(alarm_time,current_time,show_a,show_new_time)</p><p><b> begin</b></p><p> sound_lp:for i in alarm_time'range loop</p><p> if not(alarm_time(i)=current_tim
117、e(i)) then</p><p> sound_alarm<='0';</p><p><b> else</b></p><p> sound_alarm<='1';</p><p><b> end if;</b></p>&
118、lt;p> end loop sound_lp;</p><p> if show_new_time='1' then</p><p> display_time<=new_time;</p><p> elsif show_a='1' then</p><p> display_tim
119、e<=alarm_time;</p><p> elsif show_a='0' then</p><p> display_time<=current_time;</p><p><b> end if;</b></p><p> end process a1;</p>
120、<p> a2: process(clk)</p><p><b> begin</b></p><p> if clk'event and clk='1' then --位選</p><p> if cnt="111" then</p>
121、;<p> cnt<="000";</p><p><b> else</b></p><p> cnt<=cnt+'1';</p><p><b> end if;</b></p><p><b> end if;&
122、lt;/b></p><p> end process a2;</p><p> ledw<=cnt;</p><p> a3:process(cnt) --譯碼輸出</p><p><b> begin</b></p
123、><p> case cnt is</p><p> when "000"=>temp<=display_time(0);</p><p> when "001"=>temp<=display_time(1);</p><p> when "010"=&g
124、t;temp<=display_time(2);</p><p> when "011"=>temp<=display_time(3);</p><p> when "100"=>temp<=display_time(4);</p><p> when "101"=>
125、;temp<=display_time(5);</p><p> when "111"=>temp<=conv_integer(keynum);</p><p> when others=>temp<=0;</p><p><b> end case;</b></p>&
126、lt;p> case temp is --0 到9的段碼</p><p> when 0=>seg7<="00111111";</p><p> when 1=>seg7<="00000110";</p><p> when 2=&g
127、t;seg7<="01011011";</p><p> when 3=>seg7<="01001111";</p><p> when 4=>seg7<="01100110";</p><p> when 5=>seg7<="01101101&qu
128、ot;;</p><p> when 6=>seg7<="01111101";</p><p> when 7=>seg7<="00000111";</p><p> when 8=>seg7<="01111111";</p><p> w
129、hen 9=>seg7<="01101111";</p><p> when others=>seg7<="01101111";</p><p><b> end case;</b></p><p> end process a3;</p><p>
130、 end architecture art;</p><p> 附錄7:頂層原件模塊</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use
131、 ieee.std_logic_unsigned.all;</p><p> use work.P_ALARM.all;</p><p> entity d_clock is</p><p> port(key:in std_logic;</p><p> clk:in std_logic;</p><p>
132、 alarm_button:in std_logic;</p><p> time_button:in std_logic;</p><p> rst:in std_logic;</p><p> sound_alarm:out std_logic;</p><p> ledw:out std_logic_vector(2 downt
133、o 0);</p><p> seg7:out std_logic_vector(7 downto 0)</p><p><b> );</b></p><p> end entity d_clock;</p><p> architecture art of d_clock is</p><
134、p> signal keynum1:std_logic_vector(3 downto 0);</p><p> signal new_time1,current_time1,alarm_time1:t_clock_time;</p><p> signal clk_out1,load_new_a1,load_new_c1,show_new_time1,show_a1:std_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計(jì)-電子鐘
- eda課程設(shè)計(jì)報(bào)告---數(shù)字電子鐘
- eda電子鐘課程設(shè)計(jì)----電子鐘的設(shè)計(jì)
- eda課程設(shè)計(jì)- 自動(dòng)電子鐘
- 數(shù)字電子鐘課程設(shè)計(jì)
- 數(shù)字電子鐘課程設(shè)計(jì)
- 電子鐘課程設(shè)計(jì)----數(shù)字電子鐘的設(shè)計(jì)
- 課程設(shè)計(jì)---數(shù)字電子鐘
- 數(shù)字電子鐘課程設(shè)計(jì)
- 數(shù)字電子鐘課程設(shè)計(jì)
- 數(shù)字電子鐘課程設(shè)計(jì)
- eda課程設(shè)計(jì)--數(shù)字電子鐘邏輯電路設(shè)計(jì)
- 數(shù)字電路eda課程設(shè)計(jì)--多功能數(shù)字電子鐘
- 數(shù)字電子鐘課程設(shè)計(jì) (2)
- 數(shù)字電子鐘課程設(shè)計(jì) (3)
- 數(shù)字電子鐘課程設(shè)計(jì)論文
- 數(shù)字電子鐘課程設(shè)計(jì) (4)
- 數(shù)字電子鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字電子鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字電子鐘課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論