eda數(shù)字鐘課程設計_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  課程設計報告</b></p><p>  課程名稱: EDA技術與應用 </p><p>  設計題目: 數(shù)字鐘設計 </p><p><b>  數(shù)字鐘設計</b></p><p>  摘 要 : 系統(tǒng)使用EDA技術設計

2、了數(shù)字鐘,采用硬件描述語言VHDL按模塊化方式進行設計,然后進行編程,時序仿真等。利用VHDL語言完成了數(shù)字鐘的設計。該數(shù)字鐘能實現(xiàn)時、分、秒計數(shù)的顯示功能,且以24小時循環(huán)計時。整個系統(tǒng)結構簡單,使用方便,功能齊全,精度高,具有一定的開發(fā)價值。</p><p>  關鍵字: 數(shù)字鐘;EDA;VHDL;</p><p><b>  一、設計要求</b></p&

3、gt;<p><b>  1.1、時鐘功能</b></p><p>  設計一個具有時、分、秒計時的數(shù)字鐘電路,計時采用24小時制。小時、分鐘可調的數(shù)字鐘。</p><p><b>  1.2、準確性要求</b></p><p>  設計出的時鐘電路要確保高精度的要求,每天的誤差不得超過一秒。</p&g

4、t;<p>  二、數(shù)字鐘的基本原理</p><p>  1、具有時、分、秒計數(shù)顯示功能,以24小時循環(huán)計時。其中SECOND模塊為60進制BCD碼計數(shù)電路,實現(xiàn)秒計時功能;MINUTE模塊為60進制BCD碼計數(shù)電路,實現(xiàn)分計時功能;HOUR模塊為24進制BCD碼計數(shù)電路,實現(xiàn)小時計時功能。</p><p>  2、有驅動8位七段共陰極掃描數(shù)碼管的片選驅動信號輸出和七段碼輸出

5、。SELTIME模塊產生8位數(shù)碼管的掃描驅動信號SEL[2..0]和時鐘顯示數(shù)據(jù)(動態(tài)顯示)DAOUT[3..0]。DELED模塊則為數(shù)碼管顯示時鐘數(shù)據(jù)的7段譯碼電路。</p><p><b>  三、方案論證</b></p><p>  3.1、數(shù)字鐘的基本組成</p><p>  數(shù)字鐘實際上是一個對標準頻率(1HZ)進行計數(shù)的計數(shù)電路,其

6、基本組成電路如下圖所示:</p><p>  圖3.1 數(shù)字鐘原理圖</p><p>  圖(1)中,秒沖發(fā)生器產生秒脈沖,作為圖中各個計數(shù)器的脈沖信號。分、秒計數(shù)器要求設計為六十進制計數(shù)器;時計數(shù)器則設計為二十四進制計數(shù)器。時、分、秒的計時結果分別送入譯碼器中,經(jīng)譯碼器翻譯后,共由六個LED數(shù)碼管顯示出結果。因此,使用計數(shù)器作為計時電路是可以實現(xiàn)的。</p><p&

7、gt;<b>  四、各功能模塊</b></p><p>  4.1、小時計時功能</p><p><b>  實現(xiàn)程序如下:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>

8、;  use ieee.std_logic_unsigned.all;</p><p>  entity hour is</p><p>  port(reset,clk : in std_logic;</p><p>  daout : out std_logic_vector(7 downto 0));</p><p><b>

9、  end hour;</b></p><p>  architecture behav of hour is</p><p>  signal count : std_logic_vector(3 downto 0);</p><p>  signal counter : std_logic_vector(3 downto 0);</p>

10、;<p><b>  begin</b></p><p>  p1: process(reset,clk)</p><p><b>  begin</b></p><p>  if reset='0' then </p><p>  count<="00

11、00"; </p><p>  counter<="0000"; </p><p>  elsif(clk'event and clk='1') then</p><p>  if (counter<2) then</p><p>  if (count=9) then&l

12、t;/p><p>  count<="0000";</p><p>  counter<=counter + 1;</p><p><b>  else</b></p><p>  count<=count+1;</p><p><b>  end if

13、;</b></p><p><b>  else</b></p><p>  if (count=3) then</p><p>  count<="0000";</p><p>  counter<="0000";</p><p>

14、<b>  else</b></p><p>  count<=count+1;</p><p>  end if; </p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  

15、end process;</p><p>  daout(7 downto 4)<=counter;</p><p>  daout(3 downto 0)<=count;</p><p>  end behav;</p><p>  圖4.1 時計時功能模塊</p><p><b>  4.2

16、、分計時功能</b></p><p><b>  實現(xiàn)程序如下:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p>&

17、lt;p>  entity minute is</p><p>  port(reset,clk,sethour: in std_logic;</p><p>  daout : out std_logic_vector(7 downto 0);</p><p>  enhour : out std_logic);</p><p>  

18、end minute;</p><p>  architecture behav of minute is</p><p>  signal count : std_logic_vector(3 downto 0);</p><p>  signal counter : std_logic_vector(3 downto 0);</p><p

19、>  signal carry_out1 : std_logic;</p><p>  signal carry_out2 : std_logic;</p><p><b>  begin</b></p><p>  p1: process(reset,clk)</p><p><b>  begin&l

20、t;/b></p><p>  if reset='0' then </p><p>  count<="0000"; </p><p>  counter<="0000"; </p><p>  elsif(clk'event and clk='1

21、') then</p><p>  if (counter<5) then</p><p>  if (count=9) then</p><p>  count<="0000";</p><p>  counter<=counter + 1;</p><p><b&

22、gt;  else</b></p><p>  count<=count+1;</p><p><b>  end if;</b></p><p>  carry_out1<='0';</p><p><b>  else</b></p><

23、;p>  if (count=9) then</p><p>  count<="0000";</p><p>  counter<="0000";</p><p>  carry_out1<='1';</p><p><b>  else</b&

24、gt;</p><p>  count<=count+1;</p><p>  carry_out1<='0';</p><p>  end if; </p><p><b>  end if;</b></p><p><b>  end if;</

25、b></p><p>  end process;</p><p>  p2: process(clk)</p><p><b>  begin</b></p><p>  if(clk'event and clk='0') then</p><p>  if (co

26、unter=0) then</p><p>  if (count=0) then</p><p>  carry_out2<='0';</p><p><b>  end if; </b></p><p><b>  else</b></p><p>

27、  carry_out2<='1'; </p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process; </p><p>  daout(7 downto 4)<=counte

28、r;</p><p>  daout(3 downto 0)<=count;</p><p>  enhour<=(carry_out1 and carry_out2) or sethour;</p><p>  end behav; </p><p>  圖4.2 分計時模塊</p><p>

29、<b>  4.3、秒計時功能</b></p><p><b>  實現(xiàn)程序如下;</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all

30、;</p><p>  entity second is</p><p>  port(reset,clk,setmin : in std_logic;</p><p>  daout : out std_logic_vector(7 downto 0);</p><p>  enmin : out std_logic);</p>

31、<p>  end second;</p><p>  architecture behav of second is</p><p>  signal count : std_logic_vector(3 downto 0);</p><p>  signal counter : std_logic_vector(3 downto 0);<

32、/p><p>  signal carry_out1 : std_logic;</p><p>  signal carry_out2 : std_logic;</p><p><b>  begin</b></p><p>  p1: process(reset,clk)</p><p><b

33、>  begin</b></p><p>  if reset='0' then </p><p>  count<="0000"; </p><p>  counter<="0000"; </p><p>  elsif(clk'event a

34、nd clk='1') then</p><p>  if (counter<5) then</p><p>  if (count=9) then</p><p>  count<="0000";</p><p>  counter<=counter + 1;</p>&l

35、t;p><b>  else</b></p><p>  count<=count+1;</p><p><b>  end if;</b></p><p>  carry_out1<='0';</p><p><b>  else</b>&l

36、t;/p><p>  if (count=9) then</p><p>  count<="0000";</p><p>  counter<="0000";</p><p>  carry_out1<='1';</p><p><b>

37、  else</b></p><p>  count<=count+1;</p><p>  carry_out1<='0';</p><p>  end if; </p><p><b>  end if;</b></p><p><b> 

38、 end if;</b></p><p>  end process;</p><p>  daout(7 downto 4)<=counter;</p><p>  daout(3 downto 0)<=count;</p><p>  enmin<=carry_out1 or setmin;</p>

39、;<p>  end behav;</p><p>  圖4.3 秒計時模塊</p><p>  4.4、alert模塊</p><p><b>  實現(xiàn)程序如下:</b></p><p>  Library IEEE;</p><p>  use IEEE.std_logic_

40、1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity alert is</p><p><b>  Port(</b></p><p>  clkspk : in std_logic;</p><p>  sec

41、ond : in std_logic_vector(7 downto 0);</p><p>  minute : in std_logic_vector(7 downto 0);</p><p>  speak : out std_logic;</p><p>  lamp : out std_logic_vector(8 downto 0));</p>

42、;<p>  end alert;</p><p>  architecture behav of alert is</p><p>  signal divclkspk2 : std_logic;</p><p><b>  begin</b></p><p>  p1: process(clkspk)&

43、lt;/p><p><b>  begin</b></p><p>  if (clkspk'event and clkspk='1') then</p><p>  divclkspk2<=not divclkspk2;</p><p><b>  end if;</b>

44、</p><p>  end process;</p><p>  p2: process(second,minute)</p><p><b>  begin</b></p><p>  if (minute="01011001") then</p><p>  case s

45、econd is</p><p>  when "01010001"=>lamp<="000000001";speak<=divclkspk2;</p><p>  when "01010010"=>lamp<="000000010";speak<='0';&

46、lt;/p><p>  when "01010011"=>lamp<="000000100";speak<=divclkspk2;</p><p>  when "01010100"=>lamp<="000001000";speak<='0';</p>

47、<p>  when "01010101"=>lamp<="000010000";speak<=divclkspk2;</p><p>  when "01010110"=>lamp<="000100000";speak<='0';</p><p&g

48、t;  when "01010111"=>lamp<="001000000";speak<=divclkspk2;</p><p>  when "01011000"=>lamp<="010000000";speak<='0';</p><p>  when

49、"01011001"=>lamp<="100000000";speak<=clkspk;</p><p>  when others=>lamp<="000000000";</p><p><b>  end case;</b></p><p><b

50、>  end if;</b></p><p>  end process;</p><p>  end behav;</p><p>  圖4.4 alert模塊</p><p>  4.5、DELED模塊</p><p><b>  實現(xiàn)程序如下;</b></p>

51、<p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  ENTITY DELED IS</p><p><b>  PORT(</b></p><p>  S: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

52、</p><p>  A,B,C,D,E,F,G,H: OUT STD_LOGIC);</p><p>  END DELED;</p><p>  ARCHITECTURE BEHAV OF DELED IS</p><p>  SIGNAL DATA:STD_LOGIC_VECTOR(3 DOWNTO 0);</p><

53、;p>  SIGNAL DOUT:STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p><b>  BEGIN</b></p><p><b>  DATA<=S;</b></p><p>  PROCESS(DATA)</p><p><b>  BEG

54、IN</b></p><p>  CASE DATA IS</p><p>  WHEN "0000"=>DOUT<="00111111";</p><p>  WHEN "0001"=>DOUT<="00000110";</p>&l

55、t;p>  WHEN "0010"=>DOUT<="01011011";</p><p>  WHEN "0011"=>DOUT<="01001111";</p><p>  WHEN "0100"=>DOUT<="01100110&quo

56、t;;</p><p>  WHEN "0101"=>DOUT<="01101101";</p><p>  WHEN "0110"=>DOUT<="01111101";</p><p>  WHEN "0111"=>DOUT<=&

57、quot;00000111";</p><p>  WHEN "1000"=>DOUT<="01111111";</p><p>  WHEN "1001"=>DOUT<="01101111";</p><p>  WHEN "1010&quo

58、t;=>DOUT<="01110111";</p><p>  WHEN "1011"=>DOUT<="01111100";</p><p>  WHEN "1100"=>DOUT<="00111001";</p><p>  WH

59、EN "1101"=>DOUT<="01011110";</p><p>  WHEN "1110"=>DOUT<="01111001";</p><p>  WHEN "1111"=>DOUT<="01000000";</p&g

60、t;<p>  WHEN OTHERS=>DOUT<="00000000";</p><p><b>  END CASE;</b></p><p>  END PROCESS;</p><p>  H<=DOUT(7);</p><p>  G<=DOUT(6)

61、;</p><p>  F<=DOUT(5);</p><p>  E<=DOUT(4);</p><p>  D<=DOUT(3);</p><p>  C<=DOUT(2);</p><p>  B<=DOUT(1);</p><p>  A<=DOUT(

62、0);</p><p>  END BEHAV;</p><p>  圖4.5 deled模塊</p><p>  4.6、seltime模塊</p><p><b>  實現(xiàn)程序如下:</b></p><p>  library ieee;</p><p>  use

63、ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity seltime is</p><p><b>  port(</b></p><p>  ckdsp : in std_logic;</p>

64、<p>  reset : in std_logic;</p><p>  second : in std_logic_vector(7 downto 0);</p><p>  minute : in std_logic_vector(7 downto 0);</p><p>  hour : in std_logic_vector(7 downto

65、 0);</p><p>  daout : out std_logic_vector(3 downto 0);</p><p>  sel : out std_logic_vector(2 downto 0));</p><p>  end seltime;</p><p>  architecture behav of seltime i

66、s</p><p>  signal sec : std_logic_vector(2 downto 0);</p><p><b>  begin</b></p><p>  process(reset,ckdsp)</p><p><b>  begin</b></p><p

67、>  if(reset='0') then</p><p>  sec<="000";</p><p>  elsif(ckdsp'event and ckdsp='1') then </p><p>  if(sec="111") then</p><

68、p>  sec<="000";</p><p><b>  else</b></p><p>  sec<=sec+1;</p><p><b>  end if;</b></p><p><b>  end if;</b></p&g

69、t;<p>  end process;</p><p>  process(sec,second,minute,hour)</p><p><b>  begin</b></p><p>  case sec is</p><p>  when "000"=>daout<=

70、second(3 downto 0);</p><p>  when "001"=>daout<=second(7 downto 4);</p><p>  when "011"=>daout<=minute(3 downto 0);</p><p>  when "100"=>

71、;daout<=minute(7 downto 4);</p><p>  when "110"=>daout<=hour(3 downto 0);</p><p>  when "111"=>daout<=hour(7 downto 4);</p><p>  when others=>d

72、aout<="1111";</p><p><b>  end case;</b></p><p>  end process;</p><p><b>  sel<=sec;</b></p><p>  end behav;</p><p>

73、  圖4.6 seltime模塊</p><p><b>  五、功能實現(xiàn)簡述</b></p><p>  5.1、具有時、分、秒計數(shù)顯示功能,以24小時循環(huán)計時。其中SECOND模塊為60進制BCD碼計數(shù)電路,實現(xiàn)秒計時功能;MINUTE為60進制BCD碼計數(shù)電路,實現(xiàn)分計時功能;HOUR模塊為24進制BCD碼計數(shù)電路,實現(xiàn)小時計時功能。</p>&

74、lt;p>  5.2、有驅動8位七段共陰極掃描數(shù)碼管的片選驅動信號輸出和七段碼輸出。SELTIME模塊產生8位數(shù)碼管的掃描驅動信號SEL[2..0]和時鐘顯示數(shù)據(jù)(動態(tài)顯示)DAOUT[3..0]。DELED模塊則為數(shù)碼管顯示時鐘數(shù)據(jù)的7段譯碼電路。</p><p>  根據(jù)圖1所示原理圖,對其進行仿真,其仿真圖如下:</p><p>  圖5.1 實驗仿真圖</p>

75、<p>  完成功能仿真之后,如圖所示對其進行管腳鎖定,并下載到目標芯片,將第一全局時鐘CLK1的跳線器接1Hz,第二全局時鐘CLK2的跳線器接1024Hz,第三全局時鐘CLK3的跳線器接32768Hz。撥位開關KD1為清零控制開關(高電平有效),KD2、KD3分別為小時調節(jié)、分鐘調節(jié)允許端(低電平允許調節(jié),高電平禁止調節(jié)/正常計時)。按鍵K2、K3分別為小時調節(jié)、分鐘調節(jié)按鍵(僅當KD2、KD3為低電平允許調節(jié)時有效),只

76、能加調節(jié)。數(shù)碼管SM6-SM1分別顯示小時,分鐘,秒。</p><p><b>  結果顯示</b></p><p>  圖6.1 實驗顯示圖</p><p><b>  心得體會</b></p><p>  這次實驗中積累了如下經(jīng)驗:</p><p>  1、系統(tǒng)設計進要

77、行充分的方案論證,不可盲目就動手去做;</p><p>  2、實驗中對每一個細節(jié)部分都要全面思考,要對特殊情況進行處理;</p><p>  3、對于數(shù)字系統(tǒng),要考慮同步、異步問題;</p><p>  4、數(shù)字電路的理論分析要結合時序圖;</p><p>  5、遇到問題,要順藤摸瓜,分析清楚,不可胡亂改動,每做一次改變都要有充分的理由;

78、</p><p>  6、模塊化設計方法的優(yōu)點在于其簡潔性,但是在實驗設計中也發(fā)現(xiàn),在實驗最終電路確定之前,要盡量減少模塊重疊嵌套,因為在總的電路敲定之前,電路還不成熟,很多地方需要改進,如果在開始時就進行多層模塊化,里層模塊電路的修改將影響其外層的全部電路,這樣就是牽一發(fā)動全身,很顯然,這樣將導致電路設計的低效,所以在設計過程中,一定要盡量減少超過兩層的模塊;</p><p>  7、遇

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論