版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> EDA技術(shù)</b></p><p> 課 程 設 計 報 告</p><p> 課題 數(shù)字時鐘 </p><p> 姓 名 </p><p> 學 號 </p&g
2、t;<p> 專業(yè)班級 </p><p> 指導教師 </p><p> 時 間 </p><p><b> 課程設計任務書</b></p><p><b> 數(shù)字鐘
3、設計</b></p><p><b> 摘 要</b></p><p> 人類社會已進入到高度發(fā)達的信息化社會。信息化社會的發(fā)展離不開電子信息產(chǎn)品開發(fā)技術(shù)、產(chǎn)品品質(zhì)的提高和進步。實現(xiàn)這種進步的主要原因就是電子設計技術(shù)和電子制造技術(shù)的發(fā)展,其核心就是電子設計自動化技術(shù),EDA技術(shù)的發(fā)展和推廣應用又極大的推動了電子信息產(chǎn)業(yè)的發(fā)展。</p>
4、<p> EDA技術(shù)在電子系統(tǒng)設計領(lǐng)域越來越普及,本設計主要利用VHDL語言在EDA平臺上設計一個電子數(shù)字鐘,它的計時為24小時小時制,顯示滿刻度為23時59分59秒,另外還具有校時功能和鬧鐘功能??偟某绦蛴蓭讉€各具不同功能的單元模塊程序拼接而成,其中包括分頻程序模塊、時分秒計時、校時程序模塊、鬧鐘控制器程序模塊、預制寄存器模塊、鬧鐘寄存器程序模塊和顯示驅(qū)動器程序設計。且使用QUARTUS II 軟件進行電路波形仿真,下載到
5、EDA實驗箱進行驗證。</p><p> 關(guān)鍵詞 數(shù)字鐘;EDA;vhdl語言</p><p><b> 目 錄</b></p><p><b> 課程設計任務書I</b></p><p><b> 摘 要II</b></p><p>
6、<b> 1設計概述1</b></p><p><b> 2設計方案2</b></p><p> 2.1系統(tǒng)設計方案2</p><p><b> 3設計實現(xiàn)4</b></p><p> 3.1鬧鐘控制器實現(xiàn)4</p><p>
7、; 3.2預置寄存器實現(xiàn)4</p><p> 3.3鬧鐘寄存器實現(xiàn)4</p><p> 3.4分頻電路實現(xiàn)5</p><p> 3.5時鐘計數(shù)器實現(xiàn)5</p><p> 3.6顯示驅(qū)動器實現(xiàn)5</p><p> 3.7頂層原件實現(xiàn)5</p><p><b
8、> 4設計驗證6</b></p><p> 4.1鬧鐘控制器驗證6</p><p> 4.2預置寄存器驗證6</p><p> 4.3鬧鐘寄存器驗證6</p><p> 4.4分頻電路驗證7</p><p> 4.5時鐘計數(shù)器驗證7</p><p
9、> 4.6顯示驅(qū)動器驗證8</p><p><b> 5總結(jié)9</b></p><p><b> 參考文獻10</b></p><p><b> 附錄11</b></p><p><b> 設計概述</b></p>
10、<p> 數(shù)字鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的鐘表。與機械鐘相比具有更高的準確性和直觀性,具有更長的使用壽命,已得到廣泛的使用。數(shù)字鐘的設計方法有許多種,例如可用中小規(guī)模集成電路組成電子鐘,也可以利用專用的電子鐘芯片配以顯示電路及其所需要的外圍電路組成電子鐘,還可以利用單片機來實現(xiàn)電子鐘等等。這些方法都各有其特點,其中利用單片機實現(xiàn)的電子鐘具有編程靈活,以便于功能的擴展[1]。</p><p&
11、gt; 數(shù)字鐘無非就是分頻計數(shù),設計出60進制,24進制計數(shù)器,在這里,秒分計數(shù)是60進制,時計數(shù)是24進制,對1Hz信號進行60分頻也就產(chǎn)生了分計數(shù)脈沖,對1Hz進行3600分頻也就產(chǎn)生了時計數(shù)脈沖,為了方便校時,系統(tǒng)設計時未直接采用試驗箱上的1Hz作為基準時鐘源,而是對1kHz進行1000分頻產(chǎn)生秒脈沖,1000分頻作為校時與鬧鐘時間設置脈沖,為方便調(diào)鬧鐘,采用了數(shù)據(jù)選擇器選擇輸出正常走時或鬧鐘時間。利用位選信號進行動態(tài)掃描,點亮
12、數(shù)碼管,顯示正常的計時時間。</p><p><b> 設計方案</b></p><p><b> 設計要求</b></p><p> 在EDA實驗箱上利用FPGA、LED彩燈及數(shù)碼管實現(xiàn)數(shù)字鐘設計,功能要求如下:</p><p> 由試驗箱上的時鐘信號經(jīng)分頻產(chǎn)生秒脈沖;</p>
13、<p> 用60進制和24進制實現(xiàn)計時;</p><p> 可手動校時,能分別進行時分的校正;</p><p> 可設置鬧時功能,當計時到預定時間時,揚聲器發(fā)出鬧鈴信號; </p><p><b> 系統(tǒng)設計方案</b></p><p> 經(jīng)過參考和分析后[2][3],得到數(shù)字鐘設計的總體設計方案
14、,總體設計方案的組成模塊及模塊間的關(guān)系如下圖所示:</p><p> 圖 21數(shù)字鐘設計原理圖</p><p> 數(shù)字時鐘設計總體設計方案中各模塊的主要功能如下:</p><p> 鬧鐘控制器模塊:通過有限狀態(tài)機(FSM)的方式來實現(xiàn)。估計設計要求及端口設置,需要五個狀態(tài)來實現(xiàn):</p><p> S0:表示電路初態(tài)即正常時鐘計數(shù)狀
15、態(tài),完成計時功能;</p><p> S1:接收預置數(shù)字輸入狀態(tài)。在狀態(tài)S0時用戶按下“key”鍵后進入此狀態(tài)。在此狀態(tài)下,顯示屏上顯示的是用戶預置的數(shù)字。</p><p> S2:設置新的鬧鐘時間。在狀態(tài)S1時用戶按下“alarm”鍵后進入此狀態(tài)。</p><p> S3:設置新的計時器時間。在狀態(tài)S1時用戶按下“time”鍵后進入此狀態(tài)。</p>
16、;<p> S4:顯示鬧鐘時間。在狀態(tài)S0時用戶直接按下“alarm”鍵后進入此狀態(tài)。在此狀態(tài)下,顯示屏上顯示的是所設置的鬧鐘時間。注意:在此狀態(tài)下,用戶按下“alarm”鍵后,顯示屏上保持顯示鬧鐘時間,經(jīng)過一段時間以后,再返回狀態(tài)S0顯示計時器時間。</p><p> 預置寄存器模塊:這是一個預置數(shù)字產(chǎn)生器和移位寄存器的結(jié)合體。</p><p> 鬧鐘寄存器模塊:在鬧
17、鐘上升沿同步下,根據(jù)load_new_a端口的輸入信號控制alarm_time端口的輸出。</p><p> 分頻模塊:將clk_in端口輸入的時鐘信號分頻后送給clk_out端口。</p><p> 時間計數(shù)模塊:由分頻電路的clk_out輸出提供1Hz的計數(shù)脈沖,實現(xiàn)秒分時的計時。</p><p> 顯示驅(qū)動模塊:根據(jù)三個位選信號的動態(tài)掃描,讓數(shù)碼管點亮并
18、顯示時間和預置數(shù)。</p><p> 頂層模塊:調(diào)用以上所有模塊,完成實驗設計。</p><p><b> 設計實現(xiàn)</b></p><p><b> 鬧鐘控制器實現(xiàn)</b></p><p> Clk為時鐘外部,rst為復位信號。當key為高電平時,表示用戶按下數(shù)字鍵(“0”~“9”)。當a
19、larm_button為高電平時,表示用戶按下alarm鍵。當time_button為高電平時,表示用戶按下time鍵。當load_new_a為高電平時,控制加載新的鬧鐘時間值。當load_new_c為高電平時,控制設置新的時間。 </p><p> 當show_new_time為高電平時,控制數(shù)碼管顯示新的時間值;當其為低電平,show_a為高電平時,控制顯示鬧鐘時間,否則,顯示當前時間。圖3.1
20、為鬧鐘控制器示意圖。</p><p><b> 預置寄存器實現(xiàn)</b></p><p> 這是一個預置數(shù)字產(chǎn)生器和移位寄存器的結(jié)合體。通過對key進行操作,選擇輸入欲預置的數(shù)字,暫存用戶輸入的數(shù)字,且用戶每輸入一個數(shù)字,暫存數(shù)字移位一次,實現(xiàn)用戶輸入數(shù)字在顯示屏上從右到左的依次顯示。圖3.2為預置寄存器示意圖。</p><p><b&
21、gt; 鬧鐘寄存器實現(xiàn)</b></p><p> 鬧鐘寄存器模塊的功能是在時鐘上升沿同步下,根據(jù)load_new_a端口的輸入信號控制alarm_time端口的輸出;當控制信號為高電平時,把new_alarm_time端口的輸入信號值輸出;rst端口輸入信號對alarm_time端口輸出進行異步的清零復位。圖3.3為鬧鐘寄存器的示意圖。 </p><p
22、><b> 分頻電路實現(xiàn)</b></p><p> 本模塊的功能是將clk_in端口輸入的時鐘信號分頻后送給clk_out端口;當rst端口輸入信號為高電平時,clk_out端口輸出信號清零。圖3.4為分頻電路示意圖。
23、 </p><p><b> 時鐘計數(shù)器實現(xiàn)</b></p><p> 時間計數(shù)器模塊的功能是當rst端口輸入信號為高電平時,對current_time端口輸出信號清零復位;當load_new_c端口輸入信號為高電平時,將new_current_time端口的輸入信號輸出給current_time端口。Rst端口的控制優(yōu)于
24、load_new_c端口。當這兩個控制信號都無效時,在時鐘上升沿同步下,對current_time端口輸出信號累加1,并根據(jù)小時,分鐘,秒的規(guī)律處理進位。圖3.5為時間計數(shù)器示意圖。 </p><p><b> 顯示驅(qū)動器實現(xiàn)</b></p><p> 本模塊的功能是
25、:當show_new_time端口輸入信號有效時,根據(jù)new_time端口輸入信號,產(chǎn)生相應的6個待顯示的數(shù)據(jù);當show_new_time端口輸入信號無效時,判斷show_a端口的輸入信號,為高電平時,據(jù)alarm_time端口的輸入信號產(chǎn)生相應的6個待顯示的數(shù)據(jù);為低電平時,據(jù)current_time端口的輸入信號,產(chǎn)生相應的6個待顯示的數(shù)據(jù)。對于各個待顯示的數(shù)據(jù),根據(jù)動態(tài)掃描顯示方式在driver端口輸出相應的數(shù)據(jù)顯示驅(qū)動信息和數(shù)
26、碼管選擇信息。當alarm_time端口的輸入信號值與current_time端口的輸入信號值相同時,sound_alarm端口的輸出信號有效,反之無效。圖3.6為顯示驅(qū)動示意圖。</p><p><b> 頂層原件實現(xiàn)</b></p><p> 根據(jù)原理圖,定義端口的輸入和輸出信號。內(nèi)部就是對各個模塊的原件例,實現(xiàn)功能。</p><p>
27、<b> 設計驗證</b></p><p><b> 鬧鐘控制器驗證</b></p><p> 對鬧鐘控制模塊進行仿真,得到仿真圖如下:</p><p> 圖 41鬧鐘控制器仿真圖</p><p> 當clk事件發(fā)生,key和alarm_button為高電平時,在下一個時鐘上升沿到來時,
28、show_new_time有值的改變。當rst為高電平時,show_new_time清零。</p><p><b> 預置寄存器驗證</b></p><p> 對預置寄存器模塊進行仿真,得到仿真圖如下:</p><p> 圖 42預置寄存器仿真圖</p><p> 時鐘事件發(fā)生時,keynum有0到9的順環(huán)輸出
29、。Rst的復位信號對keynum的輸出沒有影響,因為它們不是同一進程。</p><p><b> 鬧鐘寄存器驗證</b></p><p> 對鬧鐘寄存器模塊進行仿真,得到仿真圖如下:</p><p> 圖 43鬧鐘寄存器仿真圖</p><p> 讓load_new_a置高電平時,new_alarm_time有值
30、的改變。波形中沒有對alarm_time的設置,故此沒有它的相關(guān)波形。</p><p><b> 分頻電路驗證</b></p><p> 對分頻模塊進行仿真,得到仿真圖如下:</p><p> 對1Khz的時鐘進行1000分頻。后經(jīng)rst復位后,clk_out輸出為低。</p><p> 時鐘計數(shù)器驗證 &l
31、t;/p><p> 對時鐘計數(shù)器模塊進行仿真,得到仿真圖如下:</p><p> 圖 45時鐘計數(shù)仿真圖</p><p> 在1KHz的脈沖下計數(shù)器計時。Rst為高電平時,時間復位。</p><p><b> 顯示驅(qū)動器驗證</b></p><p> 對顯示驅(qū)動器模塊進行仿真,得到仿真
32、圖如下:</p><p> 圖 46顯示驅(qū)動仿真圖</p><p> 伴隨著時鐘信號,位選有選擇的選中某個數(shù)碼管,并點亮它們。</p><p> 由于各個模塊仿真結(jié)果均達到了設計要求,因此可以將設計下載到試驗箱上進行驗證。</p><p> 表 1端口和引腳的對應關(guān)系</p><p><b> 總
33、結(jié)</b></p><p> 本實驗我們實現(xiàn)了數(shù)字鐘設計中的計時功能,還有兩塊設置時間和鬧鐘的時間沒有在實驗箱上實現(xiàn)。通過這次課程設計,加深了我對EDA這門課程的了解,并且更加熟悉軟件的操作。在這次課程設計中,我的主要任務是查閱各種相關(guān)資料,并且整理選擇其中需要的的確是很有難度。但在組員和其他同學以及老師的幫助下,我們還是收集了一些重要的代碼。但盡管資料豐富,可惜自己平時的學習沒有到位。還是未能順利
34、相對有用的部分進行歸納。雖然中間遇到了不少的難題,在眾多的復雜資料中找出完成整個實驗,在設置時間鬧鈴是遇到的難題,始終難以克服。加上時間有限,只能留下這個遺憾。但是在未來的學習生活中,我會更加嚴格要求自己,努力克服這些難題。</p><p><b> 參考文獻</b></p><p> 百度文庫.數(shù)字鐘設計[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)設計[J].河南科技學院學報.2013,41(4):86-95</p><p> 孫維功.基于VHDL語言的數(shù)字鐘
36、設計[J].高科技產(chǎn)品研發(fā).2012,50-51</p><p> 中華文本庫.動態(tài)掃描數(shù)碼管顯示VHDL[EB/OL]. http://www.chinadmd.com/file/uazizp3vooarpxuox3piztiu_1.html,2014-1-7</p><p> 譚會生.EDA技術(shù)及應用實踐[M]. 第二版.湖南:湖南大學出版社,2010.299-314 </p
37、><p><b> 附錄</b></p><p> 附錄1:鬧鐘控制器模塊</p><p> PACKAGE P_ALARM IS --定義一個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’,則預置數(shù)被選中 </p><p> alarm_button:in std_logic; --鬧鈴設置按鈕</p><p> time_button:in std_logic
41、; --時間設置按鈕</p><p> clk:in std_logic; --時間輸入</p><p> rst:in std_logic; --復位信號</p><p> load_new_a: out std_logic; --lo
42、ad_new_a=‘1’,控制加載新的鬧鐘時間值</p><p> load_new_c:out std_logic; --load_new_c=‘1’,控制加載新的時間值</p><p> show_new_time:out std_logic; --show_new_time=‘1’,控制數(shù)碼管顯示新的時間值</p><p&
43、gt; show_a: out std_logic); --show_new_time=‘0’,且show_a=‘1’,控制顯示鬧--鐘時間,否則,顯示當前時間</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 --正常計時</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 --接收預置數(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 --設置新的鬧鐘時間</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 --設置新的計時時間</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 --顯示鬧鐘時間</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進程</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) --鬧鐘進程</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:預置寄存器模塊</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)分頻后的時鐘脈沖信號</p><p> rst:in std_
72、logic; --復位</p><p> keynum:out std_logic_vector(3 downto 0); --預置數(shù)產(chǎn)生</p><p> new_time:out t_clock_time); --新的鬧鐘時間或新的計時時間</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的計時</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、 --復位和新的時間或鬧鐘時間的產(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; --接收預置寄存器的new_time后,作為輸入</p>
82、<p> load_new_a:in std_logic; --控制加載新的鬧鐘時間</p><p> clk:in std_logic; --經(jīng)分頻后的脈沖輸入</p><p> rst:in std_logi; --復位</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 --讓秒分時清零</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 --控制新的鬧鐘時間</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 --復位</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ù)器模塊</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 --復位</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 --計時</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ū)動模塊</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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設計-電子鐘
- eda課程設計報告---數(shù)字電子鐘
- eda電子鐘課程設計----電子鐘的設計
- eda課程設計- 自動電子鐘
- 數(shù)字電子鐘課程設計
- 數(shù)字電子鐘課程設計
- 電子鐘課程設計----數(shù)字電子鐘的設計
- 課程設計---數(shù)字電子鐘
- 數(shù)字電子鐘課程設計
- 數(shù)字電子鐘課程設計
- 數(shù)字電子鐘課程設計
- eda課程設計--數(shù)字電子鐘邏輯電路設計
- 數(shù)字電路eda課程設計--多功能數(shù)字電子鐘
- 數(shù)字電子鐘課程設計 (2)
- 數(shù)字電子鐘課程設計 (3)
- 數(shù)字電子鐘課程設計論文
- 數(shù)字電子鐘課程設計 (4)
- 數(shù)字電子鐘課程設計報告
- 數(shù)字電子鐘課程設計報告
- 數(shù)字電子鐘課程設計報告
評論
0/150
提交評論