版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 數(shù)字鐘的設(shè)計(jì)</b></p><p><b> 一、系統(tǒng)功能概述</b></p><p> ?。ㄒ唬?、系統(tǒng)實(shí)現(xiàn)的功能:</p><p> 1、具有“時(shí)”、“分”、“秒”的十進(jìn)制數(shù)字顯示(小時(shí)從00 ~ 23)。</p><p> 2、具有手動(dòng)校時(shí)、校分、校秒的功能
2、。</p><p> 3、有定時(shí)和鬧鐘功能,能夠在設(shè)定的時(shí)間發(fā)出鬧鈴聲。</p><p> 4、能進(jìn)行整點(diǎn)報(bào)時(shí)。從59分50秒起,每隔2秒發(fā)一次低音“嘟”的信號(hào),連續(xù)5次,最后一次為高音“嘀”的信號(hào)。</p><p> ?。ǘ?、各項(xiàng)設(shè)計(jì)指標(biāo):</p><p> 1、顯示部分采用的6個(gè)LED顯示器,從高位至低位分別顯示時(shí)、分、秒。<
3、;/p><p> 2、有一個(gè)設(shè)置調(diào)鬧鐘定時(shí)時(shí)間、正常時(shí)間的按鈕,選擇調(diào)的對(duì)象。</p><p> 3、有三個(gè)按鈕分別調(diào)時(shí)、分、秒的時(shí)間。</p><p> 4、有一個(gè)按鈕用作開(kāi)啟/關(guān)閉鬧鈴。</p><p> 5、另外需要兩個(gè)時(shí)鐘信號(hào)來(lái)給系統(tǒng)提供脈沖信號(hào),使時(shí)鐘和鬧鐘正常工作,分別為1Hz、1kHz的脈沖。</p><
4、p> 二、系統(tǒng)組成以及系統(tǒng)各部分的設(shè)計(jì)</p><p> 1、系統(tǒng)結(jié)構(gòu)描述 //要求:系統(tǒng)(或頂層文件)結(jié)構(gòu)描述,各個(gè)模塊(或子程序)的功能描述;</p><p><b> 系統(tǒng)的頂層文件:</b></p><p> 頂層文件圖:(見(jiàn)下頁(yè))</p><p><b> 各模塊的解釋?zhuān)?lt;/b
5、></p><p> ?。?)、7個(gè)輸入量clk_1khz、clk_1hz、key_slt、key_alarm、sec_set、min_set、hour_set:</p><p> 其中clk_1khz為鬧鈴模塊提供時(shí)鐘,處理后能產(chǎn)生“嘟”、“嘀”和變化的鬧鈴聲音;clk_1hz為計(jì)時(shí)模塊提供時(shí)鐘信號(hào),每秒計(jì)數(shù)一次;key_slt選擇設(shè)置對(duì)象:定時(shí)或正常時(shí)間;key_alarm能夠
6、開(kāi)啟和關(guān)閉鬧鈴;sec_set、min_set、hour_set用于設(shè)置時(shí)間或定時(shí),與key_slt相關(guān)聯(lián)。各按鍵輸出為脈沖信號(hào)。</p><p> ?。?)、CNT60_A_SEC模塊:</p><p> 這個(gè)模塊式將clk_1hz這個(gè)時(shí)鐘信號(hào)進(jìn)行60進(jìn)制計(jì)數(shù),并產(chǎn)生一個(gè)分鐘的觸發(fā)信號(hào)。該模塊能將當(dāng)前計(jì)數(shù)值實(shí)時(shí)按BCD碼的格式輸出。將該輸出接到兩位LED數(shù)碼后能時(shí)時(shí)顯示秒的狀態(tài)。通過(guò)a
7、larm_clk可以選擇設(shè)置對(duì)象為時(shí)間還是定時(shí)值。在設(shè)置時(shí)間模式上,key上的一個(gè)輸入脈沖可以將clk的輸入信號(hào)加一。在設(shè)置定時(shí)模式上,key上的脈沖只修改定時(shí)值,不影響時(shí)間脈沖clk的狀態(tài)。</p><p> 同時(shí)該模塊具有兩個(gè)輸出口out_do、out_di來(lái)觸發(fā)整點(diǎn)報(bào)時(shí)的“嘟”、“嘀”聲音。</p><p> ?。?)、CNT60_A_MIN模塊:</p><p
8、> 這個(gè)模塊式將CNT60_A_SEC的輸出信號(hào)進(jìn)行60進(jìn)制計(jì)數(shù),并產(chǎn)生一個(gè)時(shí)位的觸發(fā)信號(hào)。該模塊能將當(dāng)前計(jì)數(shù)值實(shí)時(shí)按BCD碼的格式輸出。將該輸出接到兩位LED數(shù)碼后能時(shí)時(shí)顯示分的狀態(tài)。通過(guò)alarm_clk可以選擇設(shè)置對(duì)象為時(shí)間還是定時(shí)值。在設(shè)置時(shí)間模式上,key上的一個(gè)輸入脈沖可以將clk的輸入信號(hào)加一。在設(shè)置定時(shí)模式上,key上的脈沖只修改定時(shí)值,不影響時(shí)間脈沖clk的狀態(tài)。</p><p> 同
9、時(shí)該模塊具有三個(gè)輸出口out_do、out_di、out_alarm來(lái)觸發(fā)整點(diǎn)報(bào)時(shí)的“嘟”、“嘀”、鬧鈴聲音。</p><p> ?。?)、CNT24_A_HOUR模塊:</p><p> 這個(gè)模塊式將CNT60_A_MIN的輸出信號(hào)做24進(jìn)制計(jì)數(shù)。該模塊能將當(dāng)前計(jì)數(shù)值實(shí)時(shí)按BCD碼的格式輸出。將該輸出接到兩位LED數(shù)碼后能時(shí)時(shí)顯示時(shí)的狀態(tài)。通過(guò)alarm_clk可以選擇設(shè)置對(duì)象為時(shí)間還
10、是定時(shí)值。在設(shè)置時(shí)間模式上,key上的一個(gè)輸入脈沖可以將clk的輸入信號(hào)加一。在設(shè)置定時(shí)模式上,key上的脈沖只修改定時(shí)值,不影響時(shí)間脈沖clk的狀態(tài)。</p><p> 同時(shí)該模塊具有一個(gè)輸出口out_alarm來(lái)觸發(fā)整點(diǎn)報(bào)時(shí)的鬧鈴聲音。</p><p> ?。?)、PWM_OUT模塊:</p><p> 該模塊為PWM產(chǎn)生模塊,通過(guò)EN可開(kāi)啟和關(guān)閉PWM輸出
11、。模塊根據(jù)CLK信號(hào)二分頻產(chǎn)生的高低音,并組合,能輸出三種聲音狀態(tài)——“嘟”、“嘀”、鬧鈴。而該三種聲音要被秒、分、時(shí)的輸出觸發(fā)才能輸出PWM。</p><p> 系統(tǒng)各個(gè)模塊的VHDL程序:</p><p> (1)、CNT60_A_SEC模塊:</p><p><b> 程序源代碼如下:</b></p><p>
12、; library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity cnt60_a_sec is</p><p><b> port(</b></p&
13、gt;<p> clk,clr,enb: in std_logic;--clk:時(shí)鐘輸入信號(hào),clr:清零端,enb:使能端</p><p> key: in std_logic;--輸入按鍵脈沖,調(diào)整鬧鈴定時(shí)或時(shí)間</p><p> alarm_clk: in std_logic;--1:alarm 0:clk --設(shè)置模式選擇:鬧鈴調(diào)節(jié)模式、時(shí)間調(diào)節(jié)模式</
14、p><p> qout_sl: out std_logic_vector(3 downto 0); --顯示輸出秒的低位</p><p> qout_sh: out std_logic_vector(3 downto 0);--顯示輸出秒的高位</p><p> co: out std_logic; --進(jìn)位輸出,觸發(fā)分計(jì)數(shù)模塊</p><p&
15、gt; out_do: out std_logic;--在整點(diǎn)報(bào)時(shí)中輸出“嘟”觸發(fā)信號(hào)</p><p> out_di: out std_logic --在整點(diǎn)報(bào)時(shí)中輸出“嘀”觸發(fā)信號(hào)</p><p><b> );</b></p><p><b> end;</b></p><p> a
16、rchitecture a of cnt60_a_sec is</p><p> signal qout2_l:std_logic_vector(3 downto 0);</p><p> signal qout2_h:std_logic_vector(3 downto 0);</p><p> signal alarm_l:std_logic_vector(
17、3 downto 0);</p><p> signal alarm_h:std_logic_vector(3 downto 0);</p><p> signal clk1,clk2,tclk,aclk,ac_slt: std_logic;</p><p><b> begin</b></p><p> pro
18、cess(alarm_clk) --當(dāng)該端口輸入一個(gè)脈沖時(shí),修改設(shè)置模式:時(shí)間調(diào)整或鬧鈴模式切換</p><p><b> begin</b></p><p> if alarm_clk'event and alarm_clk='1' then</p><p> if ac_slt='0' then
19、--如果為定時(shí)模式,將改為鬧鈴模式</p><p> ac_slt<='1';</p><p><b> else</b></p><p> ac_slt<='0';</p><p><b> end if;</b></p><
20、p><b> end if;</b></p><p> end process;</p><p> process(key,clk,ac_slt)--根據(jù)設(shè)置模式,處理key上的脈沖信號(hào)</p><p><b> begin</b></p><p> if ac_slt='0
21、' then --時(shí)間調(diào)整模式</p><p> aclk<='0';</p><p> if clk='1' and key='1' then --clk=1則tclk<=0,通過(guò)挖洞方式添加一個(gè)脈沖</p><p> tclk<='0';</p><
22、;p> elsif clk='0' and key='1' then --clk=0,則tclk<=1,產(chǎn)生一個(gè)高電平,添加一脈沖</p><p> tclk<='1';</p><p><b> else</b></p><p> tclk<=clk;</p
23、><p><b> end if;</b></p><p> elsif ac_slt='1' then --鬧鈴調(diào)整模式</p><p> tclk<=clk;</p><p> aclk<=key; --key上的脈沖直接修改鬧鈴定時(shí)值</p><p><
24、b> end if;</b></p><p> end process;</p><p> process(tclk,clr,enb) --60進(jìn)制計(jì)數(shù),個(gè)位、十位放在兩個(gè)臨時(shí)變量中,表示秒的狀態(tài)</p><p><b> begin</b></p><p> if clr='1
25、9; then--clearing works at the state of high voltage</p><p> qout2_l<="0000";</p><p> qout2_h<="0000";</p><p> elsif tclk'event and tclk='1'
26、 then</p><p> if enb='1' then--enable works at high voltage</p><p> if qout2_l="1001" and qout2_h="0101" then</p><p> qout2_l<="0000";--a
27、 full mode is completed and a carryout is generated</p><p> qout2_h<="0000";</p><p> elsif qout2_l="1001" then</p><p> qout2_l<="0000";</p&
28、gt;<p> qout2_h<=qout2_h+1;</p><p><b> else</b></p><p> qout2_l<=qout2_l+1;-- in process of counting</p><p><b> end if;</b></p><p
29、><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> process(aclk,clr,enb)--修改鬧鈴的定時(shí)值</p><p><b> begin</b><
30、;/p><p> if clr='1' then--clearing works at the state of high voltage</p><p> alarm_l<="0000";</p><p> alarm_h<="0000";</p><p> elsif
31、 aclk'event and aclk='1' then</p><p> if enb='1' then--enable works at high voltage</p><p> if alarm_l="1001" and alarm_h="0101" then</p><p&g
32、t; alarm_l<="0000";--a full mode is completed and a carryout is generated</p><p> alarm_h<="0000";</p><p> elsif alarm_l="0101" then</p><p>
33、alarm_l<="0000";</p><p> alarm_h<=alarm_h+1;</p><p><b> else</b></p><p> alarm_l<=alarm_l+1;-- in process of counting</p><p><b>
34、 end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> process(qout2_l,qout2_h,alarm_l,alarm_h,alarm
35、_clk)-- 產(chǎn)生進(jìn)位,顯示時(shí)間或鬧鈴定時(shí)值</p><p><b> begin </b></p><p> if qout2_l="0000" and qout2_h="0000" then</p><p><b> co<='1';</b><
36、/p><p><b> else </b></p><p><b> co<='0';</b></p><p><b> end if;</b></p><p> if ac_slt='0' then -- 顯示時(shí)間</p>
37、<p> qout_sl<=qout2_l;</p><p> qout_sh<=qout2_h;</p><p> else -- 顯示定時(shí)值</p><p> qout_sh<=alarm_h;</p><p> qout_sl<=alarm_l;</p>&
38、lt;p><b> end if;</b></p><p> end process;</p><p> process(qout2_l,qout2_h) -- 根據(jù)秒的狀態(tài)輸出“嘟”、“嘀”觸發(fā)信號(hào)</p><p><b> begin</b></p><p> if qout2_
39、h="0101" then</p><p> if qout2_l="0000" then</p><p> out_do<='1';</p><p> elsif qout2_l="0010" then</p><p> out_do<='
40、;1';</p><p> elsif qout2_l="0100" then</p><p> out_do<='1';</p><p> elsif qout2_l="0110" then</p><p> out_do<='1';<
41、/p><p> elsif qout2_l="1000" then</p><p> out_do<='1';</p><p><b> else</b></p><p> out_do<='0';</p><p><b&g
42、t; end if;</b></p><p> elsif qout2_h="0000" then</p><p> if qout2_l="0000" then</p><p> out_di<='1';</p><p> out_do<='0
43、';</p><p><b> else </b></p><p> out_di<='0';</p><p><b> end if;</b></p><p><b> else</b></p><p> out
44、_do<='0';</p><p> out_di<='0';</p><p><b> end if;</b></p><p> end process;</p><p><b> end;</b></p><p> ?。?/p>
45、2)、CNT60_A_MIN模塊:</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity cnt60_a_min is</p><p
46、><b> port(</b></p><p> clk,clr,enb: in std_logic; --clk:時(shí)鐘輸入信號(hào),clr:清零端,enb:使能端</p><p> key: in std_logic; --輸入按鍵脈沖,調(diào)整鬧鈴定時(shí)或時(shí)間</p><p> alarm_clk: in std_logic; --1:
47、alarm 0:clk --設(shè)置模式選擇:鬧鈴調(diào)節(jié)模式、時(shí)間調(diào)節(jié)模式</p><p> qout_ml: out std_logic_vector(3 downto 0); --顯示輸出分的低位</p><p> qout_mh: out std_logic_vector(3 downto 0); --顯示輸出分的高位</p><p> co: out std
48、_logic; --進(jìn)位輸出,觸發(fā)時(shí)計(jì)數(shù)模塊</p><p> out_alarm:out std_logic;--鬧鈴觸發(fā)信號(hào),時(shí)間到后輸出高電平觸發(fā)鬧鈴</p><p> out_do,out_di: out std_logic--在整點(diǎn)報(bào)時(shí)中輸出“嘟”“嘀”觸發(fā)信號(hào)</p><p><b> );</b></p>&l
49、t;p><b> end;</b></p><p> architecture a of cnt60_a_min is</p><p> signal qout2_l:std_logic_vector(3 downto 0);</p><p> signal qout2_h:std_logic_vector(3 downto 0)
50、;</p><p> signal alarm_l:std_logic_vector(3 downto 0);</p><p> signal alarm_h:std_logic_vector(3 downto 0);</p><p> signal clk1,clk2,tclk,aclk,ac_slt: std_logic;</p><p
51、><b> begin</b></p><p> process(alarm_clk) --當(dāng)該端口輸入一個(gè)脈沖時(shí),修改設(shè)置模式:時(shí)間調(diào)整或鬧鈴模式切換</p><p><b> begin</b></p><p> if alarm_clk'event and alarm_clk='1
52、9; then</p><p> if ac_slt='0' then--如果為定時(shí)模式,將改為鬧鈴模式</p><p> ac_slt<='1';</p><p><b> else</b></p><p> ac_slt<='0';</p>
53、;<p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> process(key,clk,ac_slt) --根據(jù)設(shè)置模式,處理key上的脈沖信號(hào)</p><p><b>
54、; begin</b></p><p> if ac_slt='0' then --時(shí)間調(diào)整模式</p><p> aclk<='0';</p><p> if clk='1' and key='1' then--clk=1則tclk<=0,通過(guò)挖洞方式添加一個(gè)脈沖<
55、;/p><p> tclk<='0';</p><p> elsif clk='0' and key='1' then--clk=0,則tclk<=1,產(chǎn)生一個(gè)高電平,添加一脈沖</p><p> tclk<='1';</p><p><b> e
56、lse</b></p><p> tclk<=clk;</p><p><b> end if;</b></p><p> elsif ac_slt='1' then --鬧鈴調(diào)整模式</p><p> tclk<=clk;</p><p> ac
57、lk<=key; --key上的脈沖直接修改鬧鈴定時(shí)值</p><p><b> end if;</b></p><p> end process; </p><p> process(tclk,clr,enb) --60進(jìn)制計(jì)數(shù),個(gè)位、十位放在兩個(gè)臨時(shí)變量中,表示分的狀態(tài)</p><p><b>
58、 begin</b></p><p> if clr='1' then--clearing works at the state of high voltage</p><p> qout2_l<="0000";</p><p> qout2_h<="0000";</p&g
59、t;<p> elsif tclk'event and tclk='1' then</p><p> if enb='1' then--enable works at high voltage</p><p> if qout2_l="1001" and qout2_h="0101" the
60、n</p><p> qout2_l<="0000";--a full mode is completed and a carryout is generated</p><p> qout2_h<="0000";</p><p> elsif qout2_l="1001" then<
61、;/p><p> qout2_l<="0000";</p><p> qout2_h<=qout2_h+1;</p><p><b> else</b></p><p> qout2_l<=qout2_l+1;-- in process of counting</p>
62、<p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> process(aclk,clr,enb) --修
63、改鬧鈴的定時(shí)值</p><p><b> begin</b></p><p> if clr='1' then--clearing works at the state of high voltage</p><p> alarm_l<="0000";</p><p>
64、alarm_h<="0000";</p><p> elsif aclk'event and aclk='1' then</p><p> if enb='1' then--enable works at high voltage</p><p> if alarm_l="1001&q
65、uot; and alarm_h="0101" then</p><p> alarm_l<="0000";--a full mode is completed and a carryout is generated</p><p> alarm_h<="0000";</p><p> e
66、lsif alarm_l="0101" then</p><p> alarm_l<="0000";</p><p> alarm_h<=alarm_h+1;</p><p><b> else</b></p><p> alarm_l<=alarm_l+
67、1;-- in process of counting</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p>
68、<p> process(qout2_l,qout2_h,alarm_l,alarm_h,alarm_clk) -- 產(chǎn)生進(jìn)位,顯示時(shí)間或鬧鈴定時(shí)值of high voltage</p><p><b> begin </b></p><p> if qout2_l="0000" and qout2_h="0000&qu
69、ot; then</p><p><b> co<='1';</b></p><p><b> else </b></p><p><b> co<='0';</b></p><p><b> end if;<
70、/b></p><p> if ac_slt='0' then</p><p> qout_ml<=qout2_l;</p><p> qout_mh<=qout2_h;</p><p><b> else</b></p><p> qout_mh<
71、;=alarm_h;</p><p> qout_ml<=alarm_l;</p><p><b> end if;</b></p><p> end process;</p><p> process(qout2_l,qout2_h,alarm_l,alarm_h) –判斷定時(shí)值與時(shí)間值相等,輸出鬧鈴觸發(fā)
72、信號(hào)</p><p><b> begin </b></p><p> if qout2_l=alarm_l and qout2_h=alarm_h then</p><p> out_alarm<='1';</p><p><b> else</b></p>
73、;<p> out_alarm<='0';</p><p><b> end if;</b></p><p> end process;</p><p> process(qout2_l,qout2_h) -- 根據(jù)分的狀態(tài)輸出“嘟”、“嘀”觸發(fā)信號(hào)</p><p><b
74、> begin</b></p><p> if qout2_l="1001" and qout2_h="0101" then</p><p> out_do<='1';</p><p><b> else</b></p><p>
75、out_do<='0';</p><p><b> end if;</b></p><p> if qout2_l="0000" and qout2_h="0000" then</p><p> out_di<='1';</p><p&
76、gt;<b> else</b></p><p> out_di<='0';</p><p><b> end if;</b></p><p> end process;</p><p><b> end;</b></p><
77、p> ?。?)、CNT24_A_HOUR模塊:</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity cnt24_a_hour is</p&
78、gt;<p><b> port(</b></p><p> clk,clr,enb: in std_logic; --clk:時(shí)鐘輸入信號(hào),clr:清零端,enb:使能端</p><p> key: in std_logic; --輸入按鍵脈沖,調(diào)整鬧鈴定時(shí)或時(shí)間</p><p> alarm_clk: in std_l
79、ogic;--1:alarm 0:clk--設(shè)置模式選擇:鬧鈴調(diào)節(jié)模式、時(shí)間調(diào)節(jié)模式</p><p> qout_hl: out std_logic_vector(3 downto 0); --顯示輸出時(shí)的低位</p><p> qout_hh: out std_logic_vector(3 downto 0); --顯示輸出時(shí)的高位</p><p> co:
80、 out std_logic; --進(jìn)位輸出</p><p> out_alarm:out std_logi--鬧鈴觸發(fā)信號(hào)輸出</p><p><b> );</b></p><p><b> end;</b></p><p> architecture a of cnt24_a_hour
81、 is</p><p> signal qout2_l:std_logic_vector(3 downto 0);</p><p> signal qout2_h:std_logic_vector(3 downto 0);</p><p> signal alarm_l:std_logic_vector(3 downto 0);</p><
82、p> signal alarm_h:std_logic_vector(3 downto 0);</p><p> signal clk1,clk2,tclk,aclk,ac_slt: std_logic;</p><p><b> begin</b></p><p> process(alarm_clk) --當(dāng)該端口輸入一個(gè)脈沖
83、時(shí),修改設(shè)置模式:時(shí)間調(diào)整或鬧鈴模式切換</p><p><b> begin</b></p><p> if alarm_clk'event and alarm_clk='1' then</p><p> if ac_slt='0' then--如果為定時(shí)模式,將改為鬧鈴模式</p>
84、<p> ac_slt<='1'; </p><p><b> else</b></p><p> ac_slt<='0';</p><p><b> end if;</b></p><p><b> end if;<
85、/b></p><p> end process;</p><p> process(key,clk,ac_slt) --根據(jù)設(shè)置模式,處理key上的脈沖信號(hào)</p><p><b> begin</b></p><p> if ac_slt='0' then --時(shí)間調(diào)整模式</p&
86、gt;<p> aclk<='0';</p><p> if clk='1' and key='1' then--clk=1則tclk<=0,通過(guò)挖洞方式添加一個(gè)脈沖</p><p> tclk<='0';</p><p> elsif clk='0
87、9; and key='1' then--clk=0,則tclk<=1,產(chǎn)生一個(gè)高電平,添加一脈沖</p><p> tclk<='1';</p><p><b> else</b></p><p> tclk<=clk;</p><p><b> en
88、d if;</b></p><p> elsif ac_slt='1' then --鬧鈴調(diào)整模式</p><p> tclk<=clk;</p><p> aclk<=key; --key上的脈沖直接修改鬧鈴定時(shí)值</p><p><b> end if;</b><
89、;/p><p> end process; </p><p> process(tclk,clr,enb) --24進(jìn)制計(jì)數(shù),個(gè)位、十位放在兩個(gè)臨時(shí)變量中,表示時(shí)的狀態(tài)</p><p><b> begin</b></p><p> if clr='1' then--clearing works at
90、 the state of high voltage</p><p> qout2_l<="0000";</p><p> qout2_h<="0000";</p><p> elsif tclk'event and tclk='1' then</p><p>
91、 if enb='1' then--enable works at high voltage</p><p> if qout2_l="1001" then</p><p> qout2_l<="0000";--a full mode is completed and a carryout is generated<
92、/p><p> qout2_h<=qout2_h+1;</p><p> elsif qout2_l="0011" and qout2_h="0010" then</p><p> qout2_l<="0000";</p><p> qout2_h<="
93、;0000";</p><p><b> else</b></p><p> qout2_l<=qout2_l+1;-- in process of counting</p><p><b> end if;</b></p><p><b> end if;<
94、/b></p><p><b> end if;</b></p><p> end process;</p><p> process(aclk,clr,enb) --修改鬧鈴的定時(shí)值</p><p><b> begin</b></p><p> if cl
95、r='1' then--clearing works at the state of high voltage</p><p> alarm_l<="0000";</p><p> alarm_h<="0000";</p><p> elsif aclk'event and aclk=
96、'1' then</p><p> if enb='1' then--enable works at high voltage</p><p> if alarm_l="1001" then</p><p> alarm_l<="0000";--a full mode is comp
97、leted and a carryout is generated</p><p> alarm_h<=qout2_h+1;</p><p> elsif alarm_l="0011" and alarm_h="0010" then</p><p> alarm_l<="0000";<
98、;/p><p> alarm_h<="0000";</p><p><b> else</b></p><p> alarm_l<=alarm_l+1;-- in process of counting</p><p><b> end if;</b></p
99、><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> process(qout2_l,qout2_h,alarm_l,alarm_h,alarm_clk) -- 產(chǎn)生進(jìn)位,顯示時(shí)間或鬧鈴定時(shí)值o
100、f high voltage</p><p><b> begin </b></p><p> if qout2_l="0000" and qout2_h="0000" then</p><p><b> co<='1';</b></p>&
101、lt;p><b> else </b></p><p><b> co<='0';</b></p><p><b> end if;</b></p><p> if ac_slt='0' then</p><p> qout
102、_hl<=qout2_l;</p><p> qout_hh<=qout2_h;</p><p><b> else</b></p><p> qout_hh<=alarm_h;</p><p> qout_hl<=alarm_l;</p><p><b>
103、; end if;</b></p><p> end process;</p><p> process(qout2_l,qout2_h,alarm_l,alarm_h)--定時(shí)值與時(shí)間值相等,則輸出鬧鐘觸發(fā)信號(hào)</p><p><b> begin </b></p><p> if qout2_l
104、=alarm_l and qout2_h=alarm_h then</p><p> out_alarm<='1';</p><p><b> else</b></p><p> out_alarm<='0';</p><p><b> end if;<
105、/b></p><p> end process;</p><p><b> end;</b></p><p> 2、系統(tǒng)以及各個(gè)模塊的仿真波形</p><p> (1)、系統(tǒng)仿真波形:</p><p> 注:由于下面的模塊仿真存在毛刺,導(dǎo)致系統(tǒng)的仿真圖有一定的問(wèn)題。</p&
106、gt;<p> ?。?)、CNT60_A_SEC模塊:</p><p> 注:在50、52、54、56、58處有嘟觸發(fā)輸出,00處有嘀觸發(fā)輸出等。</p><p> ?。?)、CNT60_A_MIN模塊:</p><p> 注:本圖展示了按鍵調(diào)節(jié)時(shí)間值和定時(shí)值的仿真波形(部分仿真圖)。</p><p> 注:該模塊的仿真波
107、形圖,具有嘟、嘀聲音觸發(fā)輸出,定時(shí)與時(shí)間相等時(shí)有鬧鈴觸發(fā)輸出等。</p><p> ?。?)、CNT24_A_HOUR模塊</p><p> 注:該模塊的仿真圖,包含按鍵調(diào)整時(shí)間、定時(shí)值,鬧鐘觸發(fā)輸出等。</p><p> ?。?)、PWM_OUT模塊(分三段剪切下來(lái)的,展示了三種聲音的效果)</p><p> ?。?)、“嘟”、“嘀”輸出
108、波形(只有在en有脈沖,打開(kāi)PWMO后,才有效)</p><p> 注:在打開(kāi)輸出后,當(dāng)兩路嘟、嘀觸發(fā)輸入同時(shí)有效時(shí)分別輸出嘟、嘀聲音。當(dāng)兩路鬧鈴觸發(fā)同時(shí)有效時(shí)開(kāi)始鬧鈴聲音的輸出。</p><p> 注:鬧鈴輸出的變化情況(“嘀”、“嘟”交替發(fā)聲)。</p><p> 注:鬧鈴輸出的變化情況。</p><p> 3、下載時(shí)選擇的開(kāi)發(fā)系
109、統(tǒng)模式以及管腳定義</p><p> 表1 GW48-CK開(kāi)發(fā)系統(tǒng)工作模式:3</p><p> 三、課程設(shè)計(jì)過(guò)程中遇到的問(wèn)題以及解決方法</p><p> 主要是在“調(diào)整時(shí)間”和“調(diào)整定時(shí)”的上面遇到非常大的困難。與開(kāi)始想象的不一樣,一個(gè)進(jìn)程中不能加入時(shí)鐘信號(hào),沒(méi)能夠?qū)存I脈沖直接與時(shí)鐘脈沖進(jìn)行累加。同時(shí),在對(duì)VHDL的語(yǔ)法的熟悉上也花費(fèi)了大量的時(shí)間。<
110、;/p><p> 最后的解決方法是,通過(guò)另一個(gè)進(jìn)程,先將這兩個(gè)信號(hào)進(jìn)行處理后,分別產(chǎn)生aclk和tclk分別為定時(shí)調(diào)整部分、和時(shí)間調(diào)整部分提供時(shí)鐘信號(hào)。調(diào)整按鍵的脈沖信號(hào)和正常的時(shí)鐘信號(hào)不是按照簡(jiǎn)單的或運(yùn)算來(lái)處理的。</p><p> 1)、如果要調(diào)整時(shí)間:</p><p> 當(dāng)時(shí)鐘信號(hào)是高電平,按鍵信號(hào)也是高電平時(shí),則給tclk賦值0。</p>&
111、lt;p> 當(dāng)時(shí)鐘信號(hào)是高電平,按鍵信號(hào)是低電平時(shí),則給tclk賦值1。</p><p> 當(dāng)時(shí)鐘信號(hào)是低電平,按鍵信號(hào)是高電平時(shí),則給tclk賦值1。</p><p> 當(dāng)時(shí)鐘信號(hào)是低電平,按鍵信號(hào)是低電平是,則給tclk賦值0。</p><p> 這樣無(wú)論按鍵脈沖是在高電平還是低電平,或者是在高低電平兩種狀態(tài)下出現(xiàn),其最終結(jié)果都是會(huì)多產(chǎn)生一個(gè)脈沖信
112、號(hào),導(dǎo)致計(jì)數(shù)值變化,達(dá)到修改時(shí)間的目的。期間,aclk始終不變。</p><p> 2)、如果要調(diào)整定時(shí):</p><p> 1、時(shí)鐘輸入信號(hào)賦值給tclk</p><p> 2、按鍵輸入信號(hào)賦值給aclk</p><p> 這樣,當(dāng)按鍵脈沖結(jié)束時(shí),定時(shí)調(diào)整信號(hào)會(huì)出現(xiàn)一個(gè)脈沖。而時(shí)鐘信號(hào)不受影響。</p><p&g
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- vhdl課程設(shè)計(jì)---多功能數(shù)字鐘
- eda數(shù)字鐘課程設(shè)計(jì)--用vhdl語(yǔ)言實(shí)現(xiàn)數(shù)字鐘的設(shè)計(jì)
- eda課程設(shè)計(jì)報(bào)告--基于vhdl的數(shù)字鐘的設(shè)計(jì)
- vhdl語(yǔ)音數(shù)字鐘設(shè)計(jì)()
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 課程設(shè)計(jì)-- 數(shù)字鐘的設(shè)計(jì)
- 課程設(shè)計(jì)---數(shù)字鐘的設(shè)計(jì)
- 基于vhdl簡(jiǎn)易數(shù)字鐘設(shè)計(jì)
- 數(shù)字電子課程設(shè)計(jì)---數(shù)字鐘
- 數(shù)字鐘課程設(shè)計(jì)---多功能數(shù)字鐘的設(shè)計(jì)與制作
- 數(shù)字鐘課程設(shè)計(jì) (2)
- 課程設(shè)計(jì)數(shù)字鐘
- eda數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì) (2)
評(píng)論
0/150
提交評(píng)論