版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 數(shù)字電路課程設(shè)計</b></p><p> 院系:創(chuàng)新實驗學院</p><p> 專業(yè):電子信息工程</p><p> 姓名: </p><p> 學號: </p><p> 完成日期:2009-12-24
2、</p><p><b> 數(shù)字鐘的設(shè)計</b></p><p><b> 一、系統(tǒng)功能概述</b></p><p> ?。ㄒ唬?、系統(tǒng)實現(xiàn)的功能:</p><p> 1、具有“時”、“分”、“秒”的十進制數(shù)字顯示(小時從00 ~ 23)。</p><p> 2、具有手
3、動校時、校分、校秒的功能。</p><p> 3、有定時和鬧鐘功能,能夠在設(shè)定的時間發(fā)出鬧鈴聲。</p><p> 4、能進行整點報時。從59分50秒起,每隔2秒發(fā)一次低音“嘟”的信號,連續(xù)5次,最后一次為高音“嘀”的信號。</p><p> ?。ǘ?、各項設(shè)計指標:</p><p> 1、顯示部分采用的6個LED顯示器,從高位至低位分
4、別顯示時、分、秒。</p><p> 2、有一個設(shè)置調(diào)鬧鐘定時時間、正常時間的按鈕,選擇調(diào)的對象。</p><p> 3、有三個按鈕分別調(diào)時、分、秒的時間。</p><p> 4、有一個按鈕用作開啟/關(guān)閉鬧鈴。</p><p> 5、另外需要兩個時鐘信號來給系統(tǒng)提供脈沖信號,使時鐘和鬧鐘正常工作,分別為1Hz、1kHz的脈沖。<
5、/p><p> 二、系統(tǒng)組成以及系統(tǒng)各部分的設(shè)計</p><p> 1、系統(tǒng)結(jié)構(gòu)描述 //要求:系統(tǒng)(或頂層文件)結(jié)構(gòu)描述,各個模塊(或子程序)的功能描述;</p><p><b> 系統(tǒng)的頂層文件:</b></p><p> 頂層文件圖:(見下頁)</p><p><b> 各
6、模塊的解釋:</b></p><p> ?。?)、7個輸入量clk_1khz、clk_1hz、key_slt、key_alarm、sec_set、min_set、hour_set:</p><p> 其中clk_1khz為鬧鈴模塊提供時鐘,處理后能產(chǎn)生“嘟”、“嘀”和變化的鬧鈴聲音;clk_1hz為計時模塊提供時鐘信號,每秒計數(shù)一次;key_slt選擇設(shè)置對象:定時或正常時間
7、;key_alarm能夠開啟和關(guān)閉鬧鈴;sec_set、min_set、hour_set用于設(shè)置時間或定時,與key_slt相關(guān)聯(lián)。各按鍵輸出為脈沖信號。</p><p> (2)、CNT60_A_SEC模塊:</p><p> 這個模塊式將clk_1hz這個時鐘信號進行60進制計數(shù),并產(chǎn)生一個分鐘的觸發(fā)信號。該模塊能將當前計數(shù)值實時按BCD碼的格式輸出。將該輸出接到兩位LED數(shù)碼后能
8、時時顯示秒的狀態(tài)。通過alarm_clk可以選擇設(shè)置對象為時間還是定時值。在設(shè)置時間模式上,key上的一個輸入脈沖可以將clk的輸入信號加一。在設(shè)置定時模式上,key上的脈沖只修改定時值,不影響時間脈沖clk的狀態(tài)。</p><p> 同時該模塊具有兩個輸出口out_do、out_di來觸發(fā)整點報時的“嘟”、“嘀”聲音。</p><p> ?。?)、CNT60_A_MIN模塊:</
9、p><p> 這個模塊式將CNT60_A_SEC的輸出信號進行60進制計數(shù),并產(chǎn)生一個時位的觸發(fā)信號。該模塊能將當前計數(shù)值實時按BCD碼的格式輸出。將該輸出接到兩位LED數(shù)碼后能時時顯示分的狀態(tài)。通過alarm_clk可以選擇設(shè)置對象為時間還是定時值。在設(shè)置時間模式上,key上的一個輸入脈沖可以將clk的輸入信號加一。在設(shè)置定時模式上,key上的脈沖只修改定時值,不影響時間脈沖clk的狀態(tài)。</p>
10、<p> 同時該模塊具有三個輸出口out_do、out_di、out_alarm來觸發(fā)整點報時的“嘟”、“嘀”、鬧鈴聲音。</p><p> (4)、CNT24_A_HOUR模塊:</p><p> 這個模塊式將CNT60_A_MIN的輸出信號做24進制計數(shù)。該模塊能將當前計數(shù)值實時按BCD碼的格式輸出。將該輸出接到兩位LED數(shù)碼后能時時顯示時的狀態(tài)。通過alarm_clk
11、可以選擇設(shè)置對象為時間還是定時值。在設(shè)置時間模式上,key上的一個輸入脈沖可以將clk的輸入信號加一。在設(shè)置定時模式上,key上的脈沖只修改定時值,不影響時間脈沖clk的狀態(tài)。</p><p> 同時該模塊具有一個輸出口out_alarm來觸發(fā)整點報時的鬧鈴聲音。</p><p> (5)、PWM_OUT模塊:</p><p> 該模塊為PWM產(chǎn)生模塊,通過E
12、N可開啟和關(guān)閉PWM輸出。模塊根據(jù)CLK信號二分頻產(chǎn)生的高低音,并組合,能輸出三種聲音狀態(tài)——“嘟”、“嘀”、鬧鈴。而該三種聲音要被秒、分、時的輸出觸發(fā)才能輸出PWM。</p><p> 系統(tǒng)各個模塊的VHDL程序:</p><p> ?。?)、CNT60_A_SEC模塊:</p><p><b> 程序源代碼如下:</b></p&g
13、t;<p> 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(</
14、b></p><p> clk,clr,enb: in std_logic;--clk:時鐘輸入信號,clr:清零端,enb:使能端</p><p> key: in std_logic;--輸入按鍵脈沖,調(diào)整鬧鈴定時或時間</p><p> alarm_clk: in std_logic;--1:alarm 0:clk --設(shè)置模式選擇:鬧鈴調(diào)節(jié)模式
15、、時間調(diào)節(jié)模式</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; --進位輸出,觸發(fā)分計數(shù)模塊</p
16、><p> out_do: out std_logic;--在整點報時中輸出“嘟”觸發(fā)信號</p><p> out_di: out std_logic --在整點報時中輸出“嘀”觸發(fā)信號</p><p><b> );</b></p><p><b> end;</b></p>
17、<p> architecture 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_l
18、ogic_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><b> begin</b></p>&l
19、t;p> process(alarm_clk) --當該端口輸入一個脈沖時,修改設(shè)置模式:時間調(diào)整或鬧鈴模式切換</p><p><b> begin</b></p><p> if alarm_clk'event and alarm_clk='1' then</p><p> if ac_slt='
20、;0' then--如果為定時模式,將改為鬧鈴模式</p><p> ac_slt<='1';</p><p><b> else</b></p><p> ac_slt<='0';</p><p><b> end if;</b><
21、/p><p><b> end if;</b></p><p> end process;</p><p> process(key,clk,ac_slt)--根據(jù)設(shè)置模式,處理key上的脈沖信號</p><p><b> begin</b></p><p> if a
22、c_slt='0' then --時間調(diào)整模式</p><p> aclk<='0';</p><p> if clk='1' and key='1' then --clk=1則tclk<=0,通過挖洞方式添加一個脈沖</p><p> tclk<='0';<
23、;/p><p> elsif clk='0' and key='1' then --clk=0,則tclk<=1,產(chǎn)生一個高電平,添加一脈沖</p><p> tclk<='1';</p><p><b> else</b></p><p> tclk<
24、;=clk;</p><p><b> end if;</b></p><p> elsif ac_slt='1' then --鬧鈴調(diào)整模式</p><p> tclk<=clk;</p><p> aclk<=key; --key上的脈沖直接修改鬧鈴定時值</p>&
25、lt;p><b> end if;</b></p><p> end process;</p><p> process(tclk,clr,enb) --60進制計數(shù),個位、十位放在兩個臨時變量中,表示秒的狀態(tài)</p><p><b> begin</b></p><p> if c
26、lr='1' 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
27、='1' 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<="00
28、00";--a 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&q
29、uot;;</p><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></
30、p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> process(aclk,clr,enb)--修改鬧鈴的定時值</p><p><b> begin&
31、lt;/b></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><
32、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" and alarm_h="0101" then</p&
33、gt;<p> 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>
34、<p> 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&
35、gt;<b> 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,a
36、larm_h,alarm_clk)-- 產(chǎn)生進位,顯示時間或鬧鈴定時值</p><p><b> begin </b></p><p> if qout2_l="0000" and qout2_h="0000" then</p><p><b> co<='1';&l
37、t;/b></p><p><b> else </b></p><p><b> co<='0';</b></p><p><b> end if;</b></p><p> if ac_slt='0' then -- 顯示
38、時間</p><p> qout_sl<=qout2_l;</p><p> qout_sh<=qout2_h;</p><p> else -- 顯示定時值</p><p> qout_sh<=alarm_h;</p><p> qout_sl<=alarm_l;&
39、lt;/p><p><b> end if;</b></p><p> end process;</p><p> process(qout2_l,qout2_h) -- 根據(jù)秒的狀態(tài)輸出“嘟”、“嘀”觸發(fā)信號</p><p><b> begin</b></p><p>
40、; if qout2_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
41、_do<='1';</p><p> elsif qout2_l="0100" then</p><p> out_do<='1';</p><p> elsif qout2_l="0110" then</p><p> out_do<='
42、;1';</p><p> elsif qout2_l="1000" then</p><p> out_do<='1';</p><p><b> else</b></p><p> out_do<='0';</p><
43、p><b> 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_d
44、o<='0';</p><p><b> else </b></p><p> out_di<='0';</p><p><b> end if;</b></p><p><b> else</b></p>&l
45、t;p> out_do<='0';</p><p> out_di<='0';</p><p><b> end if;</b></p><p> end process;</p><p><b> end;</b></p>
46、<p> (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</
47、p><p><b> port(</b></p><p> clk,clr,enb: in std_logic; --clk:時鐘輸入信號,clr:清零端,enb:使能端</p><p> key: in std_logic; --輸入按鍵脈沖,調(diào)整鬧鈴定時或時間</p><p> alarm_clk: in std
48、_logic; --1:alarm 0:clk --設(shè)置模式選擇:鬧鈴調(diào)節(jié)模式、時間調(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>
49、 co: out std_logic; --進位輸出,觸發(fā)時計數(shù)模塊</p><p> out_alarm:out std_logic;--鬧鈴觸發(fā)信號,時間到后輸出高電平觸發(fā)鬧鈴</p><p> out_do,out_di: out std_logic--在整點報時中輸出“嘟”“嘀”觸發(fā)信號</p><p><b> );</b>&l
50、t;/p><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
51、(3 downto 0);</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;</
52、p><p><b> begin</b></p><p> process(alarm_clk) --當該端口輸入一個脈沖時,修改設(shè)置模式:時間調(diào)整或鬧鈴模式切換</p><p><b> begin</b></p><p> if alarm_clk'event and alarm_c
53、lk='1' then</p><p> if ac_slt='0' then--如果為定時模式,將改為鬧鈴模式</p><p> ac_slt<='1';</p><p><b> else</b></p><p> ac_slt<='0
54、9;;</p><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上的脈沖信號</p><p
55、><b> begin</b></p><p> if ac_slt='0' then --時間調(diào)整模式</p><p> aclk<='0';</p><p> if clk='1' and key='1' then--clk=1則tclk<=0,通過挖
56、洞方式添加一個脈沖</p><p> tclk<='0';</p><p> elsif clk='0' and key='1' then--clk=0,則tclk<=1,產(chǎn)生一個高電平,添加一脈沖</p><p> tclk<='1';</p><p>
57、<b> else</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>&
58、lt;p> aclk<=key; --key上的脈沖直接修改鬧鈴定時值</p><p><b> end if;</b></p><p> end process; </p><p> process(tclk,clr,enb) --60進制計數(shù),個位、十位放在兩個臨時變量中,表示分的狀態(tài)</p><p&
59、gt;<b> 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&qu
60、ot;;</p><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="01
61、01" then</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&q
62、uot; then</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 counti
63、ng</p><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,
64、clr,enb) --修改鬧鈴的定時值</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>
65、<p> 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=
66、"1001" 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>
67、<p> elsif 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&
68、lt;=alarm_l+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
69、;</p><p> process(qout2_l,qout2_h,alarm_l,alarm_h,alarm_clk) -- 產(chǎn)生進位,顯示時間或鬧鈴定時值of high voltage</p><p><b> begin </b></p><p> if qout2_l="0000" and qout2_h=&
70、quot;0000" then</p><p><b> co<='1';</b></p><p><b> else </b></p><p><b> co<='0';</b></p><p><b>
71、 end if;</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>
72、 qout_mh<=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) –判斷定時值與
73、時間值相等,輸出鬧鈴觸發(fā)信號</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&
74、gt;</p><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ā)信號</p>&l
75、t;p><b> begin</b></p><p> if qout2_l="1001" and qout2_h="0101" then</p><p> out_do<='1';</p><p><b> else</b></p>
76、<p> 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
77、><p><b> else</b></p><p> out_di<='0';</p><p><b> end if;</b></p><p> end process;</p><p><b> end;</b><
78、/p><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_ho
79、ur is</p><p><b> port(</b></p><p> clk,clr,enb: in std_logic; --clk:時鐘輸入信號,clr:清零端,enb:使能端</p><p> key: in std_logic; --輸入按鍵脈沖,調(diào)整鬧鈴定時或時間</p><p> alarm_c
80、lk: in std_logic;--1:alarm 0:clk--設(shè)置模式選擇:鬧鈴調(diào)節(jié)模式、時間調(diào)節(jié)模式</p><p> qout_hl: out std_logic_vector(3 downto 0); --顯示輸出時的低位</p><p> qout_hh: out std_logic_vector(3 downto 0); --顯示輸出時的高位</p>&l
81、t;p> co: out std_logic; --進位輸出</p><p> out_alarm:out std_logi--鬧鈴觸發(fā)信號輸出</p><p><b> );</b></p><p><b> end;</b></p><p> architecture a of
82、cnt24_a_hour 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);<
83、/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> process(alarm_clk)
84、--當該端口輸入一個脈沖時,修改設(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--如果為定時模式,將改為鬧鈴模
85、式</p><p> ac_slt<='1'; </p><p><b> else</b></p><p> ac_slt<='0';</p><p><b> end if;</b></p><p><b>
86、 end if;</b></p><p> end process;</p><p> process(key,clk,ac_slt) --根據(jù)設(shè)置模式,處理key上的脈沖信號</p><p><b> begin</b></p><p> if ac_slt='0' then --時
87、間調(diào)整模式</p><p> aclk<='0';</p><p> if clk='1' and key='1' then--clk=1則tclk<=0,通過挖洞方式添加一個脈沖</p><p> tclk<='0';</p><p> elsif c
88、lk='0' and key='1' then--clk=0,則tclk<=1,產(chǎn)生一個高電平,添加一脈沖</p><p> tclk<='1';</p><p><b> else</b></p><p> tclk<=clk;</p><p>&
89、lt;b> end if;</b></p><p> elsif ac_slt='1' then --鬧鈴調(diào)整模式</p><p> tclk<=clk;</p><p> aclk<=key; --key上的脈沖直接修改鬧鈴定時值</p><p><b> end if;&
90、lt;/b></p><p> end process; </p><p> process(tclk,clr,enb) --24進制計數(shù),個位、十位放在兩個臨時變量中,表示時的狀態(tài)</p><p><b> begin</b></p><p> if clr='1' then--clear
91、ing 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' then</p>
92、;<p> 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 g
93、enerated</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
94、_h<="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>
95、 end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> process(aclk,clr,enb) --修改鬧鈴的定時值</p><p><b> begin</b></p><
96、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 aclk'eve
97、nt and aclk='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
98、mode is completed 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<="00
99、00";</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;<
100、/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_clk) -- 產(chǎn)生進位
101、,顯示時間或鬧鈴定時值of high voltage</p><p><b> begin </b></p><p> if qout2_l="0000" and qout2_h="0000" then</p><p><b> co<='1';</b>&
102、lt;/p><p><b> else </b></p><p><b> co<='0';</b></p><p><b> end if;</b></p><p> if ac_slt='0' then</p><
103、;p> qout_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
104、><b> end if;</b></p><p> end process;</p><p> process(qout2_l,qout2_h,alarm_l,alarm_h)--定時值與時間值相等,則輸出鬧鐘觸發(fā)信號</p><p><b> begin </b></p><p>
105、 if qout2_l=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>
106、 end if;</b></p><p> end process;</p><p><b> end;</b></p><p> 2、系統(tǒng)以及各個模塊的仿真波形</p><p> ?。?)、系統(tǒng)仿真波形:</p><p> 注:由于下面的模塊仿真存在毛刺,導致系統(tǒng)的仿真圖有一
107、定的問題。</p><p> ?。?)、CNT60_A_SEC模塊:</p><p> 注:在50、52、54、56、58處有嘟觸發(fā)輸出,00處有嘀觸發(fā)輸出等。</p><p> ?。?)、CNT60_A_MIN模塊:</p><p> 注:本圖展示了按鍵調(diào)節(jié)時間值和定時值的仿真波形(部分仿真圖)。</p><p>
108、; 注:該模塊的仿真波形圖,具有嘟、嘀聲音觸發(fā)輸出,定時與時間相等時有鬧鈴觸發(fā)輸出等。</p><p> ?。?)、CNT24_A_HOUR模塊</p><p> 注:該模塊的仿真圖,包含按鍵調(diào)整時間、定時值,鬧鐘觸發(fā)輸出等。</p><p> ?。?)、PWM_OUT模塊(分三段剪切下來的,展示了三種聲音的效果)</p><p> ?。?/p>
109、1)、“嘟”、“嘀”輸出波形(只有在en有脈沖,打開PWMO后,才有效)</p><p> 注:在打開輸出后,當兩路嘟、嘀觸發(fā)輸入同時有效時分別輸出嘟、嘀聲音。當兩路鬧鈴觸發(fā)同時有效時開始鬧鈴聲音的輸出。</p><p> 注:鬧鈴輸出的變化情況(“嘀”、“嘟”交替發(fā)聲)。</p><p> 注:鬧鈴輸出的變化情況。</p><p>
110、 3、下載時選擇的開發(fā)系統(tǒng)模式以及管腳定義</p><p> 表1 GW48-CK開發(fā)系統(tǒng)工作模式:3</p><p> 三、課程設(shè)計過程中遇到的問題以及解決方法</p><p> 主要是在“調(diào)整時間”和“調(diào)整定時”的上面遇到非常大的困難。與開始想象的不一樣,一個進程中不能加入時鐘信號,沒能夠?qū)存I脈沖直接與時鐘脈沖進行累加。同時,在對VHDL的語法的熟悉上也
111、花費了大量的時間。</p><p> 最后的解決方法是,通過另一個進程,先將這兩個信號進行處理后,分別產(chǎn)生aclk和tclk分別為定時調(diào)整部分、和時間調(diào)整部分提供時鐘信號。調(diào)整按鍵的脈沖信號和正常的時鐘信號不是按照簡單的或運算來處理的。</p><p> 1)、如果要調(diào)整時間:</p><p> 當時鐘信號是高電平,按鍵信號也是高電平時,則給tclk賦值0。&
112、lt;/p><p> 當時鐘信號是高電平,按鍵信號是低電平時,則給tclk賦值1。</p><p> 當時鐘信號是低電平,按鍵信號是高電平時,則給tclk賦值1。</p><p> 當時鐘信號是低電平,按鍵信號是低電平是,則給tclk賦值0。</p><p> 這樣無論按鍵脈沖是在高電平還是低電平,或者是在高低電平兩種狀態(tài)下出現(xiàn),其最終結(jié)
113、果都是會多產(chǎn)生一個脈沖信號,導致計數(shù)值變化,達到修改時間的目的。期間,aclk始終不變。</p><p> 2)、如果要調(diào)整定時:</p><p> 1、時鐘輸入信號賦值給tclk</p><p> 2、按鍵輸入信號賦值給aclk</p><p> 這樣,當按鍵脈沖結(jié)束時,定時調(diào)整信號會出現(xiàn)一個脈沖。而時鐘信號不受影響。</p&
114、gt;<p> 另外,在鬧鈴產(chǎn)生上也遇到了一些小問題,最后,通過在產(chǎn)生周期較長的信號,切換輸出值的內(nèi)容“嘟”還有“嘀”,最后的效果就是“嘟”、“嘀”聲音交替發(fā)出。</p><p> 在仿真時,大多數(shù)模塊會出現(xiàn)毛刺,會導致最后的總仿真結(jié)果不是很樂觀,會把脈沖的幾個干擾加上去。這方面,我試圖調(diào)了很久也沒解決。不過由于在實際下載后還是相對比較正常的,仿真中的毛刺最后沒有消除掉。</p>
115、<p><b> 8路彩燈控制系統(tǒng)</b></p><p><b> 一、系統(tǒng)功能概述</b></p><p> (一)、系統(tǒng)實現(xiàn)的功能:</p><p> 1、彩燈自左向右依次點亮。</p><p> 2、彩燈自左向右依次熄滅。</p><p> 3、
116、彩燈自右向左依次點亮。</p><p> 4、彩燈自右向左依次熄滅。</p><p><b> 5、彩燈全亮。</b></p><p><b> 6、彩燈全滅。</b></p><p> (二)、各項設(shè)計指標:</p><p> 1、顯示部分采用的8個彩燈。<
117、/p><p> 2、需要一個時鐘信號來給系統(tǒng)提供脈沖信號,為1Hz的脈沖。</p><p> 二、系統(tǒng)組成以及系統(tǒng)各部分的設(shè)計</p><p> 1、系統(tǒng)的VHDL設(shè)計</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p>
118、<p> use ieee.std_logic_unsigned.all;</p><p> entity colorlight66 is</p><p> port(clk:in std_logic;</p><p> q: out std_logic_vector(7 downto 0);</p><p> s: ou
119、t std_logic_vector(1 downto 0));</p><p><b> end;</b></p><p> architecture one of colorlight66 is</p><p> signal cnt4:std_logic_vector(1 downto 0);</p><p>
120、;<b> begin</b></p><p> process(clk)</p><p> variable cnt:integer range 0 to 34;</p><p><b> begin</b></p><p> if rising_edge(clk)then</p&
121、gt;<p> if cnt=34 then</p><p> cnt:=0;cnt4<=cnt4+1;</p><p><b> else</b></p><p> cnt:=cnt+1;</p><p><b> end if;</b></p><
122、;p> case cnt is</p><p> when 0 =>q<="00000000" ; </p><p> when 1 =>q<="10000000" ;</p><p> when 2 =>q<="11000000" ;</p>
123、<p> when 3 =>q<="11100000" ;</p><p> when 4 =>q<="11110000" ;</p><p> when 5 =>q<="11111000" ;</p><p> when 6 =>q<=&
124、quot;11111100" ;</p><p> when 7 =>q<="11111110" ;</p><p> when 8 =>q<="11111111" ;</p><p> when 9 =>q<="01111111" ;</p>
125、<p> when 10=>q<="00111111" ;</p><p> when 11=>q<="00011111" ;</p><p> when 12=>q<="00001111" ;</p><p> when 13=>q<=
126、"00000111" ;</p><p> when 14=>q<="00000011" ;</p><p> when 15=>q<="00000001" ;</p><p> when 16=>q<="00000000" ;</p>
127、;<p> when 17=>q<="00000001" ;</p><p> when 18=>q<="00000011" ;</p><p> when 19=>q<="00000111" ;</p><p> when 20=>q<
128、="00001111" ;</p><p> when 21=>q<="00011111" ;</p><p> when 22=>q<="00111111" ;</p><p> when 23=>q<="01111111" ;</p&g
129、t;<p> when 24=>q<="11111111" ;</p><p> when 25=>q<="11111110" ;</p><p> when 26=>q<="11111100" ;</p><p> when 27=>q<
130、;="11111000" ;</p><p> when 28=>q<="11110000" ;</p><p> when 29=>q<="11100000" ;</p><p> when 30=>q<="11000000" ;</p&
131、gt;<p> when 31=>q<="10000000" ;</p><p> when 32=>q<="00000000" ;</p><p> when 33=>q<="11111111" ;</p><p> when 34=>q&l
132、t;="00000000" ;</p><p> when others=>null;</p><p><b> end case;</b></p><p><b> end if;</b></p><p> end process;</p><
133、p><b> s<=cnt4;</b></p><p><b> end;</b></p><p><b> 系統(tǒng)仿真波形</b></p><p> 3、下載時選擇的開發(fā)系統(tǒng)模式以及管腳定義</p><p> 表1 GW48-CK開發(fā)系統(tǒng)工作模式:3<
134、;/p><p> 三、課程設(shè)計過程中遇到的問題以及解決方法</p><p> 由于這個實驗比較簡單,所以設(shè)計過程中沒有遇到什么問題。</p><p><b> 四、對本課程的建議</b></p><p> 這種實驗方式挺好的,能夠提高同學自主學習以及理論應用于實踐的能力。希望能夠在平時開放,給喜歡學習這種編程的人更多
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 課程設(shè)計-- 數(shù)字鐘的設(shè)計
- 課程設(shè)計---數(shù)字鐘的設(shè)計
- 數(shù)字電子課程設(shè)計---數(shù)字鐘
- 數(shù)字鐘課程設(shè)計---多功能數(shù)字鐘的設(shè)計與制作
- 數(shù)字鐘課程設(shè)計 (2)
- 課程設(shè)計數(shù)字鐘
- eda數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計 (2)
- 數(shù)字鐘--eda課程設(shè)計
- 數(shù)字鐘課程設(shè)計報告
- 數(shù)字鐘課程設(shè)計 (2)
- 數(shù)字時鐘課程設(shè)計--數(shù)字鐘的設(shè)計
- 數(shù)字鐘課程設(shè)計3
- eda數(shù)字鐘課程設(shè)計
評論
0/150
提交評論