版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 電 子 信 息 科 學(xué) 與 技 術(shù) </p><p><b> EDA課程設(shè)計報告</b></p><p> 設(shè)計題目: 數(shù)字時鐘的設(shè)計 </p><p> 班 級 : 電子1201 </p><p><b> 實(shí)驗(yàn)?zāi)康?lt;/b>
2、;</p><p> 學(xué)習(xí)并掌握數(shù)字鐘的原理、設(shè)計方法。</p><p><b> 實(shí)驗(yàn)內(nèi)容</b></p><p> 計數(shù)始終由模60秒計數(shù)器、模60分計數(shù)器、模24小時計數(shù)器、報時模塊、分,時校定模塊及輸出顯示組成,可以采用同步計數(shù)器或異步計數(shù)器設(shè)計方法。</p><p><b> 實(shí)驗(yàn)要求<
3、/b></p><p> 計時范圍為0小時0分0秒至23小時59分59秒。</p><p> 采用6個8段數(shù)碼管分別顯示小時十位,小時個位,分鐘十位,分鐘個位,秒十位,秒個位。</p><p> 整點(diǎn)報時,蜂鳴器響5聲,每秒響一聲。</p><p> 校時功能能夠單獨(dú)校分,校時,校秒,用按鍵控制。</p><
4、p> 具有清零,啟動,停止計數(shù)功能,用按鍵控制。</p><p> 采用靜態(tài)掃描方式顯示。</p><p><b> 系統(tǒng)設(shè)計方案</b></p><p> 整個模塊采用一個時鐘,時鐘的頻率為一秒,用于程序秒的輸入。</p><p> 時分秒皆采用兩個位的計數(shù),一位代表十位,一位代表個位。分秒為60進(jìn)制,
5、時為24進(jìn)制。個位逢九向十位進(jìn)一,秒逢59向分進(jìn)一,分逢59向時進(jìn)一。 </p><p> 在小時的子程序里把兩位小時數(shù)轉(zhuǎn)換成一位數(shù)作為報時程序的輸入。</p><p><b> 主要VHDL源程序</b></p><p> 主程序:主要將建好的模60秒計數(shù)器、模60分計數(shù)器、模24小時計數(shù)器、報時模塊、分,時校定模塊,譯碼模塊連接起來。
6、用的是端口映射方式。</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> use ieee.std_logic_arith.all;</p><
7、p> entity time1 is</p><p> --generic(N: integer :=60 );</p><p><b> port(</b></p><p> clk:in std_logic;</p><p> reset:in std_logic;</p><p
8、> stop:in std_logic;</p><p> clock_out:out std_logic;</p><p> min_add:in std_logic;</p><p> hour_add:in std_logic;</p><p> secout_1:out std_logic_vector(6 d
9、ownto 0);</p><p> secout_2:out std_logic_vector(6 downto 0); </p><p> min_out_1:out std_logic_vector(6 downto 0); </p><p> min_out_2:out std_logic_vector(6 downto 0);</p>
10、<p> hour_cout_1:out std_logic_vector(6 downto 0);</p><p> hour_cout_2:out std_logic_vector(6 downto 0)</p><p><b> );</b></p><p> end entity time1;</p>&
11、lt;p> architecture xtime1 of time1 is</p><p> --60s </p><p> component secoud is</p><p><b> port(</b></p><p> clk:in std_logic;</p><p
12、> reset:in std_logic;</p><p> secout1:out integer range 0 to 9;</p><p> secout2:out integer range 0 to 9; --0 to 5</p><p> en_min:out std_logic</p><p><b&g
13、t; ); </b></p><p> end component secoud;</p><p> --60min </p><p> component minute is</p><p><b> port(</b></p><p> en_min:in s
14、td_logic;</p><p> reset:in std_logic;</p><p> min_out1:out integer range 0 to 9;</p><p> min_out2:out integer range 0 to 9; --0 to 5</p><p> en_hour:out std_logic
15、</p><p><b> ); </b></p><p> end component minute; </p><p><b> --24hour</b></p><p> component hour is</p><p><b> port(
16、</b></p><p> en_hour:in std_logic;</p><p> reset:in std_logic;</p><p> hour_cout1:out integer range 0 to 9;</p><p> hour_cout2:out integer range 0 to 9 --0
17、to 2</p><p><b> ); </b></p><p> end component hour; </p><p><b> --yima </b></p><p> component decode_dis is</p><p><b>
18、; port(</b></p><p> din:in integer range 0 to 9; </p><p> dout:out std_logic_vector(6 downto 0) </p><p><b> ); </b></p><p> end component
19、decode_dis; </p><p><b> --huomen </b></p><p> component or_2 is</p><p><b> port(</b></p><p> a:in std_logic;</p><p> b:in std
20、_logic;</p><p> c:out std_logic </p><p><b> ); </b></p><p> end component or_2; </p><p> --div_stop </p><p> component div_stop is</
21、p><p><b> port(</b></p><p> clk:in std_logic; </p><p> stop:in std_logic;</p><p> clk_out:out std_logic </p><p><b> ); </b>&
22、lt;/p><p> end component div_stop; </p><p> --clock_bit </p><p> component clock_bit is</p><p><b> port(</b></p><p> min_in1:in integer range
23、 0 to 9;</p><p> min_in2:in integer range 0 to 9;</p><p> sec_in1:in integer range 0 to 9;</p><p> sec_in2:in integer range 0 to 9;</p><p> clock_out:out std_logic
24、</p><p><b> ); </b></p><p> end component clock_bit; </p><p> signal s1:std_logic;</p><p> signal s2:std_logic;</p><p> signal s3:std_l
25、ogic;</p><p> signal s4:std_logic;</p><p> signal clk_out:std_logic;</p><p> signal secout1:integer range 0 to 9;</p><p> signal secout2:integer range 0 to 9;-- 0 t
26、o 5;</p><p> signal min_out1:integer range 0 to 9; </p><p> signal min_out2:integer range 0 to 9;-- 0 to 5;</p><p> signal hour_cout1:integer range 0 to 9;</p><p>
27、 signal hour_cout2:integer range 0 to 9;-- 0 to 2;</p><p><b> begin</b></p><p> g1:for i in 0 to 12 generate</p><p> g2:if i=0 generate</p><p> hourx: h
28、our port map (s4,reset,hour_cout1,hour_cout2); --24hour</p><p> end generate;</p><p> g3:if i=1 generate</p><p> minutex: minute port map (s2,reset,min_out1,min_out2,s3);
29、 --60min</p><p> end generate;</p><p> g4:if i=2 generate</p><p> secoudx: secoud port map (clk_out,reset,secout1,secout2,s1); --60s</p><p> end generate;&
30、lt;/p><p> g5:if i=3 generate</p><p> decode_dis1: decode_dis port map (hour_cout1,hour_cout_1); ----24hour yima1</p><p> end generate;</p><p> g6:if i=4 generate&l
31、t;/p><p> decode_dis1: decode_dis port map (hour_cout2,hour_cout_2); ----24hour yima2</p><p> end generate;</p><p> g7:if i=5 generate</p><p> decode_dis2: decode_
32、dis port map (min_out1,min_out_1); ----60min yima1</p><p> end generate;</p><p> g8:if i=6 generate</p><p> decode_dis2: decode_dis port map (min_out2,min_out_2); -
33、---60min yima2</p><p> end generate;</p><p> g9:if i=7 generate</p><p> decode_dis3: decode_dis port map (secout1,secout_1); ----60s yima1</p><p> end gener
34、ate;</p><p> g10:if i=8 generate</p><p> decode_dis3: decode_dis port map (secout2,secout_2); ----60s yima2</p><p> end generate;</p><p> g11:if i=9 generat
35、e</p><p> xxor_2: or_2 port map (min_add,s1,s2); ----huomen min add</p><p> end generate; </p><p> g12:if i=10 generate</p><p> xxor_2: or_2 po
36、rt map (hour_add,s3,s4); ----huomen hour add</p><p> end generate; </p><p> g13:if i=11 generate</p><p> div_stop1: div_stop port map (clk,stop,clk_out);
37、 ----div_stop</p><p> end generate;</p><p> g14:if i=12 generate</p><p> clock_bit1:clock_bit port map (min_out1,min_out2,secout1,secout2,clock_out);----clock_bit</p>
38、<p> end generate; </p><p> end generate;</p><p> end architecture xtime1;</p><p> 模60秒 秒個位逢9進(jìn)一并歸零,秒十位逢5進(jìn)一并歸零,完成60秒的計時。</p><p> library ieee;</p><
39、p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> use ieee.std_logic_arith.all;</p><p><b> --60s</b></p><p> entity s
40、ecoud is</p><p> generic(N: integer :=10 );</p><p><b> port(</b></p><p> clk:in std_logic;</p><p> reset:in std_logic;</p><p> secout1:ou
41、t integer range 0 to 9;</p><p> secout2:out integer range 0 to 9;--0 to 5</p><p> en_min:out std_logic</p><p><b> );</b></p><p> end entity secoud;</
42、p><p> architecture xsecoud of secoud is</p><p> signal emin:std_logic;</p><p><b> begin</b></p><p> process(reset,clk) is</p><p> variable s
43、ec0:integer range 0 to 9;</p><p> variable sec1:integer range 0 to 9;</p><p> --signal emin:std_logic;</p><p><b> begin</b></p><p> if reset='1'
44、 then</p><p> emin<='0';</p><p><b> sec0:=0;</b></p><p><b> sec1:=0;</b></p><p> elsif clk'event and clk='1' then<
45、/p><p> if sec0=N-1 then --10-1</p><p><b> sec0:=0;</b></p><p> sec1:=sec1+1;</p><p> if sec1=N-4 then --10-4</p><p><b> sec1:=0;
46、</b></p><p> emin<='1';</p><p><b> else</b></p><p> emin<='0';</p><p><b> end if;</b></p><p><b&
47、gt; else</b></p><p> sec0:=sec0+1;</p><p> sec1:=sec1;</p><p> emin<='0';</p><p><b> end if;</b></p><p><b> end if
48、;</b></p><p> secout1<=sec0;</p><p> secout2<=sec1;</p><p> en_min<=emin;</p><p> end process;</p><p> end architecture xsecoud; <
49、/p><p> 模60分 分個位逢9進(jìn)一并歸零,分十位逢5進(jìn)一并歸零,完成60分的計時。</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p>
50、 use ieee.std_logic_arith.all;</p><p> --60 minute</p><p> entity minute is</p><p> generic(N: integer :=10 );</p><p><b> port(</b></p><p>
51、 en_min:in std_logic;</p><p> reset:in std_logic;</p><p> min_out1:out integer range 0 to 9;</p><p> min_out2:out integer range 0 to 9;--0 to 5</p><p> en_hour:ou
52、t std_logic</p><p><b> );</b></p><p> end entity minute;</p><p> architecture xminute of minute is</p><p> signal ehour:std_logic;</p><p>&
53、lt;b> begin</b></p><p> process(reset,en_min) is</p><p> variable min0:integer range 0 to N-1;--10-1</p><p> variable min1:integer range 0 to N-1;</p><p>
54、 --variable ehour:integer range 0 to 1;</p><p><b> begin</b></p><p> if reset='1' then</p><p> ehour<='0';</p><p><b> min0:=0;&
55、lt;/b></p><p><b> min1:=0;</b></p><p> elsif en_min'event and en_min='1' then</p><p> if min0=N-1 then --10-1</p><p><b> min0:=
56、0;</b></p><p> min1:=min1+1;</p><p> if min1=N-4 then --10-4</p><p><b> min1:=0;</b></p><p> ehour<='1';</p><p><b>
57、 else</b></p><p> ehour<='0';</p><p><b> end if;</b></p><p><b> else</b></p><p> min0:=min0+1;</p><p> min1:
58、=min1;</p><p> ehour<='0';</p><p><b> end if;</b></p><p><b> end if;</b></p><p> min_out1<=min0;</p><p> min_out
59、2<=min1;</p><p> en_hour<=ehour;</p><p> end process;</p><p> end architecture xminute; </p><p> 模24小時,先小時個位逢十進(jìn)一給小時十位,再每次判斷是否大于24,大于就都清零。</p><p&g
60、t; library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> use ieee.std_logic_arith.all;</p><p><b> --24 hour<
61、/b></p><p> entity hour is</p><p> generic(N: integer :=10 );</p><p><b> port(</b></p><p> en_hour:in std_logic;</p><p> reset:in std_
62、logic;</p><p> hour_cout1:out integer range 0 to 9;</p><p> hour_cout2:out integer range 0 to 9 --0 to 2</p><p><b> );</b></p><p> end entity hour;</
63、p><p> architecture xhour of hour is</p><p><b> begin</b></p><p> process(reset,en_hour) is</p><p> variable hour1:integer range 0 to N-1;</p><p
64、> variable hour2:integer range 0 to N-1;</p><p><b> begin</b></p><p> if reset='1' then</p><p><b> hour1:=0;</b></p><p><b>
65、 hour2:=0;</b></p><p> elsif en_hour'event and en_hour='1' then</p><p> if hour1=N-1 then --10-1</p><p><b> hour1:=0;</b></p><p> h
66、our2:=hour2+1;</p><p><b> else</b></p><p> hour1:=hour1+1;</p><p> hour2:=hour2;</p><p><b> end if;</b></p><p> if hour2*10+ho
67、ur1>=24 then</p><p><b> hour1:=0;</b></p><p><b> hour2:=0;</b></p><p><b> end if;</b></p><p><b> end if;</b></
68、p><p> hour_cout1<=hour1;</p><p> hour_cout2<=hour2;</p><p> end process;</p><p> end architecture xhour; </p><p> 譯碼部分,將123456789譯成二進(jìn)制碼,并能在數(shù)碼管上顯示。
69、</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> --use ieee.std_logic_unsigned.all;</p><p> --use ieee.std_logic_arith.all;</p><p>&
70、lt;b> --yima</b></p><p> entity decode_dis is</p><p> --generic(N: integer :=60 );</p><p><b> port(</b></p><p> din:in integer range 0 to 9;
71、 </p><p> dout:out std_logic_vector(6 downto 0) </p><p><b> );</b></p><p> end entity decode_dis;</p><p> architecture xdecode_dis of decode_dis is<
72、;/p><p><b> begin</b></p><p> process(din) is</p><p><b> begin</b></p><p> case din is</p><p> when 0 => dout<="111111
73、0";</p><p> when 1 => dout<="0110000";</p><p> when 2 => dout<="1101101";</p><p> when 3 => dout<="1111001";</p><p
74、> when 4 => dout<="0110011";</p><p> when 5 => dout<="1011011";</p><p> when 6 => dout<="1011111";</p><p> when 7 => dout&l
75、t;="1110000";</p><p> when 8 => dout<="1111111";</p><p> when 9 => dout<="1111011";</p><p> when others => dout<="0000000&quo
76、t;;</p><p><b> end case;</b></p><p> end process;</p><p> end architecture xdecode_dis; </p><p> 暫停,開始,分頻部分,加一個按鍵,按鍵按一次開始,再按一次就停止,同時輸出的二分頻的時鐘信號。
77、</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> ent
78、ity div_stop is</p><p> generic(N: integer :=2 );</p><p><b> port(</b></p><p> clk:in std_logic; </p><p> stop:in std_logic;</p><p> clk
79、_out:out std_logic</p><p><b> );</b></p><p> end entity div_stop;</p><p> architecture xdiv_stop of div_stop is</p><p> shared variable en_stop:integer
80、range 0 to 2;</p><p> --signal temp:std_logic;</p><p><b> begin</b></p><p> process(stop) is</p><p><b> begin</b></p><p> if
81、stop'event and stop='1'then </p><p> en_stop:=en_stop + 1;</p><p><b> end if;</b></p><p> if en_stop=N then</p><p> en_stop:=0;</p>&
82、lt;p><b> end if;</b></p><p> end process;</p><p> process(clk) is</p><p> variable counter:integer range 0 to N-1;</p><p><b> begin</b>&
83、lt;/p><p> if en_stop= 0 then </p><p> clk_out<='0';</p><p> elsif en_stop= 1 then</p><p> if clk'event and clk='1' then</p><p> i
84、f counter=N-1 then</p><p> counter:=0;</p><p><b> else</b></p><p> counter:=counter+1;</p><p><b> end if;</b></p><p> if count
85、er<N/2 then</p><p> clk_out<='0';</p><p><b> else</b></p><p> clk_out<='1';</p><p><b> end if;</b></p><p
86、><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> end architecture xdiv_stop;</p><p> 一個或門,加上按鍵,按鍵按下就產(chǎn)生高電平,或上其他信號就變成高
87、電平,用來教時分加或十加。</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> use ieee.std_logic_arith.all;</p>&
88、lt;p> entity or_2 is</p><p> --generic(N: integer :=60 );</p><p><b> port(</b></p><p> a:in std_logic;</p><p> b:in std_logic;</p><p>
89、 c:out std_logic</p><p><b> );</b></p><p> end entity or_2;</p><p> architecture xor_2 of or_2 is</p><p><b> begin</b></p><p>
90、 c<= a or b;</p><p> end architecture xor_2;</p><p> 整點(diǎn)報時,判斷分十位,分個位都為0,秒十位也為0,在判斷秒個位在0~9的情況,02468秒就響,13579秒不響。</p><p> library ieee;</p><p> use ieee.std_logic_
91、1164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity clock_bit is</p><p> --generic(N: integer :=2 );</p>
92、<p><b> port(</b></p><p> --clk:in std_logic;</p><p> min_in1:in integer range 0 to 9;</p><p> min_in2:in integer range 0 to 9;</p><p> sec_in1:in
93、 integer range 0 to 9;</p><p> sec_in2:in integer range 0 to 9;</p><p> clock_out:out std_logic</p><p><b> );</b></p><p> end entity clock_bit;</p>
94、;<p> architecture xclock_bit of clock_bit is</p><p><b> begin</b></p><p> process(min_in1,min_in2,sec_in1,sec_in2) is</p><p><b> begin</b></p&
95、gt;<p> if min_in1= 0 and min_in2= 0 and sec_in2= 0 then</p><p> if sec_in1>= 0 and sec_in1<=9 then</p><p> if sec_in1=0 then</p><p> clock_out<='1';
96、</p><p> elsif sec_in1= 1 then</p><p> clock_out<='0';</p><p> elsif sec_in1= 2 then</p><p> clock_out<='1';</p><p> elsif sec_i
97、n1= 3 then</p><p> clock_out<='0';</p><p> elsif sec_in1= 4 then</p><p> clock_out<='1';</p><p> elsif sec_in1= 5 then</p><p> c
98、lock_out<='0';</p><p> elsif sec_in1= 6 then</p><p> clock_out<='1';</p><p> elsif sec_in1= 7 then</p><p> clock_out<='0';</p>
99、;<p> elsif sec_in1= 8 then</p><p> clock_out<='1';</p><p><b> else</b></p><p> clock_out<='0';</p><p><b> end if;&l
100、t;/b></p><p><b> else</b></p><p> clock_out<='0';</p><p><b> end if;</b></p><p><b> else</b></p><p>
101、 clock_out<='0';</p><p><b> end if;</b></p><p> end process;</p><p> end architecture xclock_bit;</p><p> 設(shè)計中遇到的問題與體會 </p><p>
102、 首先是第一次用這種硬件描述語言來實(shí)際做一個時鐘,當(dāng)然會遇到好多的問題,比如實(shí)驗(yàn)開發(fā)板是怎樣的,能怎樣接起來,比如數(shù)碼管怎樣接,還有按鍵是怎樣的一種觸發(fā)機(jī)制,這是比較讓我們?yōu)殡y的。</p><p> 其次不知道怎樣實(shí)現(xiàn)所要求的功能,沒有一種實(shí)現(xiàn)的思路。</p><p> 最后還有遇到下載不了程序到開發(fā)板的問題。</p><p> 隨著我們一步步的進(jìn)行也就開始
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda數(shù)字時鐘課程設(shè)計
- eda數(shù)字時鐘課程設(shè)計
- eda課程設(shè)計——數(shù)字時鐘設(shè)計
- eda課程設(shè)計---多功能數(shù)字時鐘報告
- eda課程設(shè)計---數(shù)字時鐘(鬧鐘)
- eda課程設(shè)計--數(shù)字時鐘的設(shè)計
- eda課程設(shè)計報告---數(shù)字時鐘倒計時
- eda課程設(shè)計報告(多功能數(shù)字時鐘的設(shè)計)
- eda_電梯控制器課程設(shè)計
- 電子時鐘eda課程設(shè)計報告
- eda課程設(shè)計---關(guān)于多功能數(shù)字時鐘的設(shè)計
- eda課程設(shè)計——基于vhdl語言的數(shù)字時鐘設(shè)計
- 數(shù)字時鐘課程設(shè)計報告
- 數(shù)字時鐘課程設(shè)計報告
- 數(shù)字時鐘課程設(shè)計報告
- 數(shù)字時鐘課程設(shè)計報告
- 數(shù)字時鐘課程設(shè)計報告
- eda數(shù)字秒表課程設(shè)計報告
- eda課程設(shè)計---電子時鐘
- eda課程設(shè)計--電子時鐘
評論
0/150
提交評論