eda課程設(shè)計——基于vhdl語言的數(shù)字時鐘設(shè)計_第1頁
已閱讀1頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  一、設(shè)計要求1</b></p><p>  二、設(shè)計原理及框圖1</p><p><b>  1、設(shè)計原理1</b></p><p><b>  2、結(jié)構(gòu)框圖1</b></p><p><b>  三、 設(shè)計過程2</b&

2、gt;</p><p><b>  1、模塊化設(shè)計2</b></p><p>  2、頂層文件生成3</p><p>  四、仿真調(diào)試過程4</p><p>  1、各模塊時序仿真圖4</p><p>  2、仿真過程中遇到的問題5</p><p>  五、設(shè)計體

3、會及收獲5</p><p><b>  一、設(shè)計要求</b></p><p>  1、穩(wěn)定的顯示時、分、秒。</p><p>  2、當電路發(fā)生走時誤差時,要求電路有校時功能。</p><p>  3、電路有整點報時功能。報時聲響為四低一高,最后一響高音正好為整點。</p><p><b&

4、gt;  二、設(shè)計原理及框圖</b></p><p><b>  1、設(shè)計原理</b></p><p>  系統(tǒng)框圖由六個模塊組成,分別為:秒、分、時計數(shù)模塊,整點報時模塊,LED動態(tài)顯示掃描模塊,調(diào)時控制模塊組成。其工作原理是:基準脈沖輸入信號同時加到秒、分、時、分隔符的脈沖輸入端,采用并行計數(shù)的方式,秒的進位接到分的使能端上,秒的使能借到分隔符的使能上

5、,分得接到時的使能端上,完成秒、分、時和分隔符的循環(huán)計數(shù)。整點報時是根據(jù)分的A、B輸出同時為0時,整點報時模塊輸出高電平控制報時。LED顯示掃描模塊根據(jù)輸入的掃描信號CKDSP輪流選通秒、分、時、分隔符的8位八段數(shù)碼管,LED顯示譯碼器完成計數(shù)器輸出的BCD的譯碼。</p><p><b>  2、結(jié)構(gòu)框圖</b></p><p><b>  三、 設(shè)計過程

6、</b></p><p><b>  1、模塊化設(shè)計</b></p><p><b>  (1)秒計時模塊</b></p><p>  秒計時模塊由一個60位計數(shù)器為主體構(gòu)成,其輸入輸出端口組成為:</p><p>  Clk:計時時鐘信號</p><p>  R

7、eset:異步清零信號</p><p>  Setmin:分鐘設(shè)置信號</p><p>  Enmin:使能輸出信號</p><p>  Daout[6:0]:BCD碼輸出</p><p><b> ?。?)分計時模塊</b></p><p>  分計時模塊由一個60位計數(shù)器為主體構(gòu)成,其輸入輸出

8、端口組成為:</p><p>  Clk、clk1:計時時鐘信號</p><p>  Reset:異步清零信號</p><p>  Sethour:小時設(shè)置信號</p><p>  Enmin:使能輸出信號</p><p>  Daout[6:0]:BCD碼輸出</p><p><b>

9、; ?。?)時計時模塊</b></p><p>  時計時模塊由24位計數(shù)器為主體構(gòu)成,其輸入輸出端口組成為:</p><p>  Clk:計時時鐘信號</p><p>  Reset:異步清零信號</p><p>  Daout[6:0]:BCD碼輸出</p><p><b> ?。?)顯示模塊

10、</b></p><p>  系統(tǒng)時間輸出由六個七段數(shù)碼管顯示。</p><p>  顯示的數(shù)據(jù)是各計時模塊給出的</p><p><b>  BCD碼。</b></p><p><b>  (5)調(diào)時控制模塊</b></p><p>  該模塊主要用于調(diào)節(jié)時、分

11、顯示,用于“對表”。</p><p><b> ?。?)整點報時模塊</b></p><p>  在時鐘整點的時候產(chǎn)生揚聲器驅(qū)動信號。由時鐘計時模塊中分鐘的進行信號進行控制。當contr_en 為高電平時,將輸入信號clk 送到輸出端speak 用于驅(qū)動揚聲器,同時在clk 的控制下,輸出端lamp[2..0]進行循環(huán)移位。輸出控制模塊有揚聲器控制器子模塊組成。<

12、;/p><p><b>  2、頂層文件生成</b></p><p>  前面已經(jīng)完成了電子時鐘電路的各個組成部分的設(shè)計,下面把這些組成部分組裝起來,形成完整的總體設(shè)計。該電子時鐘的命名為clock,其外部端口如右圖所示。 各個輸入/ 輸出端口的作用如下: </p><p> ?。?) clk 為外部時鐘信號,其頻率為1Hz,reset

13、為異步清零信號. </p><p> ?。?) sethour 和setmin分別為調(diào)時調(diào)分脈沖輸入信號 ,當en_set為高電平時,</p><p>  每來一個sethour 脈沖或setmin脈沖,時、分輸出將分別加1; </p><p> ?。?) second[6...0]為秒的個位和十位BCD 碼輸出,min[6…0]為分鐘的個位和十位BCD 碼輸出

14、,hour[6...0]為小時的個位和十位BCD 碼輸出,它們最終中用來驅(qū)動七段數(shù)碼管,lamp[2...0]為花樣顯示輸出信號,speak 為整點報時揚聲器驅(qū)動信號 </p><p><b>  四、仿真調(diào)試過程</b></p><p>  1、各模塊時序仿真圖</p><p> ?。?)秒計數(shù)器仿真圖</p>

15、<p> ?。?)分計數(shù)器仿真圖</p><p>  (3)時計數(shù)器仿真圖</p><p> ?。?)整點報時仿真圖</p><p>  (5)調(diào)時調(diào)分仿真圖</p><p> ?。?)LED顯示譯碼仿真圖</p><p>  2、仿真過程中遇到的問題</p><p> ?。?)由于距

16、離學(xué)習EDA技術(shù)課程的時間較長,遺忘了部分課程內(nèi)容,對仿真軟件不熟悉造成多次仿真失敗。就此問題我認真復(fù)習了所學(xué)的EDA相關(guān)課程,按照課本上介紹的步驟重新進行了仿真,問題得以解決。</p><p> ?。?)因為仿真過程中對各部分時序波形應(yīng)采取什么樣的激勵波形不清楚,給仿真過程帶來了較大的麻煩。通過查閱相關(guān)資料,閱讀網(wǎng)上一些比較成熟的論文,確定了仿真過程中的相關(guān)參數(shù)。</p><p><

17、;b>  五、設(shè)計體會及收獲</b></p><p>  本次課程設(shè)計我做出的數(shù)字時鐘能夠正確的進行整點報時,顯示時間,但是對于調(diào)時調(diào)分功能不能正確顯示。經(jīng)過努力,簡易電子時鐘的設(shè)計基本上算是完成了,在整個設(shè)計中,我最大的體會就是:對學(xué)過的知識遺忘太多。在本次的課程設(shè)計中,我發(fā)現(xiàn)了很多問題,同時做起來也很難不順手,看著簡單的電路,要動手把它設(shè)計出來實非易事,主要原因?qū)ο嚓P(guān)應(yīng)用軟件的不熟悉,這就要

18、求我們在以后的學(xué)習中,應(yīng)該注意復(fù)習的重要性,對學(xué)過的知識要時常復(fù)習,加深記憶,更重要的是我們要學(xué)會把從書本上學(xué)到的知識和實際電路聯(lián)系起來,這不論對我們以后的學(xué)習還是就業(yè),都會起到很大的促進和幫助。我相信,通過這次的課程設(shè)計,在下一階段的學(xué)習中我們會更加努力,力爭把這門課學(xué)好學(xué)精。同時通過本次課程設(shè)計,鞏固了我們以前學(xué)過的專業(yè)知識,通過這次的程序設(shè)計,使我們對數(shù)字系統(tǒng)結(jié)構(gòu)也有了更進一步的了解與認識,同時對數(shù)據(jù)庫軟件EDA技術(shù),VHDL語言

19、等系列知識都有了一定的了解與認識。使用EDA技術(shù)開發(fā)頁面的能力也有了提高,也使我們把理論與實踐從正真意義上結(jié)合了起來,考驗了我們的動手能力和查閱相關(guān)資料的能力,還有組織材料的能力。 通過此次實踐,我們從中可以找</p><p><b>  附 錄</b></p><p><b>  1、秒計數(shù)單元代碼</b></p>&l

20、t;p>  LIBRARY ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  ENTITY second IS</p><p><b>  PORT(</b></p

21、><p>  clk,reset,setmin:IN STD_LOGIC;</p><p>  enmin:OUT STD_LOGIC;</p><p>  daout:out std_logic_vector(6 downto 0));</p><p>  END entity second;</p><p>  ARC

22、HITECTURE fun OF second IS</p><p>  SIGNAL count:STD_LOGIC_VECTOR(6 downto 0);</p><p>  SIGNAL enmin_1,enmin_2:STD_LOGIC;</p><p><b>  BEGIN</b></p><p>  dao

23、ut<=count;</p><p>  enmin_2<=(setmin and clk);</p><p>  enmin<=(enmin_1 or enmin_2);</p><p>  process(clk,reset,setmin)</p><p><b>  begin</b></p

24、><p>  if(reset='0') then count<="0000000";</p><p>  elsif(clk'event and clk='1')then</p><p>  if(count(3 downto 0)="1001")then</p>&l

25、t;p>  if(count<16#60#)then</p><p>  if(count="1011001")then</p><p>  enmin_1<='1';count<="0000000";</p><p><b>  else</b></p>

26、;<p>  count<=count+7;</p><p><b>  end if;</b></p><p><b>  else</b></p><p>  count<="0000000";</p><p><b>  end if;&

27、lt;/b></p><p>  elsif(count<16#60#)then</p><p>  count<=count+1;</p><p>  enmin_1<='0' after 100 ns;</p><p><b>  else</b></p><

28、;p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p><b>  end fun ;</b></p><p><b>  2、分計數(shù)單元代碼</b>

29、</p><p>  LIBRARY ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  ENTITY minute IS</p><p><b>  PORT(&l

30、t;/b></p><p>  clk,clk1,reset,sethour:IN STD_LOGIC;</p><p>  enhour:OUT STD_LOGIC;</p><p>  daout:out std_logic_vector(6 downto 0));</p><p>  END entity minute;</

31、p><p>  ARCHITECTURE fun OF minute IS</p><p>  SIGNAL count:STD_LOGIC_VECTOR(6 downto 0);</p><p>  SIGNAL enhour_1,enhour_2:STD_LOGIC;</p><p><b>  BEGIN</b><

32、;/p><p>  daout<=count;</p><p>  enhour_2<=(sethour and clk1);</p><p>  enhour<=(enhour_1 or enhour_2);</p><p>  process(clk,reset,sethour)</p><p>&l

33、t;b>  begin</b></p><p>  if(reset='0')then</p><p>  count<="0000000";</p><p>  elsif(clk'event and clk='1')then</p><p>  if(co

34、unt(3 downto 0)="1001")then</p><p>  if(count<16#60#)then</p><p>  if(count="1011001")then</p><p>  enhour_1<='1';</p><p>  count<=

35、"0000000";</p><p><b>  ELSE</b></p><p>  count<=count+7;</p><p><b>  end if;</b></p><p><b>  else</b></p><p&

36、gt;  count<="0000000";</p><p><b>  end if;</b></p><p>  elsif(count<16#60#)then</p><p>  count<=count+1;</p><p>  enhour_1<='0'

37、;after 100 ns;</p><p><b>  else</b></p><p>  count<="0000000";</p><p><b>  end if;</b></p><p><b>  end if;</b></p>

38、;<p>  end process;</p><p><b>  END fun;</b></p><p><b>  3、時計數(shù)單元代碼</b></p><p>  LIBRARY ieee;</p><p>  use ieee.std_logic_1164.all;</p

39、><p>  use ieee.std_logic_unsigned.all;</p><p>  ENTITY hour IS</p><p><b>  PORT(</b></p><p>  clk,reset:IN STD_LOGIC;</p><p>  daout:out std_logi

40、c_vector(5 downto 0));</p><p>  END entity hour;</p><p>  ARCHITECTURE fun OF hour IS</p><p>  SIGNAL count:STD_LOGIC_VECTOR(5 downto 0);</p><p><b>  BEGIN</b&

41、gt;</p><p>  daout<=count;</p><p>  process(clk,reset)</p><p><b>  begin</b></p><p>  if(reset='0')then</p><p>  count<="000

42、000";</p><p>  elsif(clk'event and clk='1')then</p><p>  if (count(3 downto 0)="1001")then</p><p>  if(count<=16#23#)then</p><p>  count&l

43、t;=count+7;</p><p><b>  else</b></p><p>  count<="000000";</p><p><b>  end if;</b></p><p>  elsif(count<16#23#)then</p>&

44、lt;p>  count<=count+1;</p><p><b>  else</b></p><p>  count<="000000";</p><p><b>  end if;</b></p><p><b>  end if;</b

45、></p><p>  end process;</p><p><b>  END fun;</b></p><p><b>  4、顯示單元代碼</b></p><p>  LIBRARY ieee;</p><p>  use ieee.std_logic_116

46、4.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  ENTITY deled IS</p><p>  PORT(num:IN std_logic_vector(3 downto 0);</p><p>  led:OUT std_logic_vector(6 downto

47、0));</p><p>  end deled;</p><p>  ARCHITECTURE fun OF deled IS</p><p><b>  BEGIN</b></p><p>  led<="1111110"when num="0000"else</p

48、><p>  "0110000"when num="0001"else</p><p>  "1101101"when num="0010"else</p><p>  "1111001"when num="0011"else</p>&

49、lt;p>  "0110011"when num="0100"else</p><p>  "1011011"when num="0101"else</p><p>  "1011111"when num="0110"else</p><p>

50、;  "1110000"when num="0111"else</p><p>  "1111111"when num="1000"else</p><p>  "1111011"when num="1001"else</p><p>  &quo

51、t;1110111"when num="1010"else</p><p>  "0011111"when num="1011"else</p><p>  "1001110"when num="1100"else</p><p>  "01111

52、01"when num="1101"else</p><p>  "1001111"when num="1110"else</p><p>  "1000111"when num="1111";</p><p><b>  END fun;<

53、/b></p><p>  5、調(diào)時控制單元代碼</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_log

54、ic_arith.all;</p><p>  ENTITY seltime IS</p><p><b>  PORT(</b></p><p>  clk1,reset:IN STD_LOGIC;</p><p>  sec,min:IN STD_LOGIC_VECTOR(6 downto 0);</p>

55、<p>  hour:in std_logic_vector(5 downto 0);</p><p>  daout:OUT STD_LOGIC_vector(3 downto 0);</p><p>  dp:OUT std_LOGIC;</p><p>  sel:out std_logic_vector(2 downto 0));</p&

56、gt;<p>  END seltime;</p><p>  ARCHITECTURE fun OF seltime IS</p><p>  SIGNAL count:STD_LOGIC_vector(2 downto 0);</p><p><b>  BEGIN</b></p><p>  sel&

57、lt;=count;</p><p>  process(clk1,reset)</p><p><b>  begin</b></p><p>  if(reset='0')then</p><p>  count<="000";</p><p>  e

58、lsif(clk1'event and clk1='1')then</p><p>  if(count>="101")then</p><p>  count<="000";</p><p><b>  else</b></p><p>  c

59、ount<=count+1;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  case count is</p><p>  when"000"=>daout<=sec(3 downto

60、 0);dp<='0';</p><p>  when"001"=>daout(3)<='0';daout(2 downto 0)<=sec(6 downto 4);dp<='0';</p><p>  when"010"=>daout<=min(3 downt

61、o 0);dp<='1';</p><p>  when"011"=>daout(3)<='0';daout(2 downto 0)<=min(6 downto 4);dp<='0';</p><p>  when"100"=>daout<=hour(3 dow

62、nto 0);dp<='1';</p><p>  when others=>daout(3 downto 2)<="00";</p><p>  daout(1 downto 0)<=hour(5 downto 4);dp<='0';</p><p><b>  end c

63、ase;</b></p><p>  end process;</p><p><b>  end fun;</b></p><p>  6、整點報時單元代碼</p><p>  LIBRARY ieee;</p><p>  use ieee.std_logic_1164.all;&

64、lt;/p><p>  use ieee.std_logic_unsigned.all;</p><p>  ENTITY alert IS</p><p><b>  PORT(</b></p><p>  clk:IN STD_LOGIC;</p><p>  dain:IN STD_LOGIC_

65、VECTOR (6 DOWNTO 0);</p><p>  speak:OUT STD_LOGIC;</p><p>  lamp:OUT STD_LOGIC_VECTOR (2 DOWNTO 0));</p><p>  END alert;</p><p>  ARCHITECTURE fun OF alert IS</p>

66、<p>  signal coun:std_logic_vector (1 downto 0);</p><p>  signal count1:std_logic_vector (1 downto 0);</p><p><b>  BEGIN</b></p><p>  speaker:process(clk)</p&g

67、t;<p><b>  begin</b></p><p>  speak<=count1(1);</p><p>  if(clk'event and clk='1')then</p><p>  if(dain="0000000")then</p><p&g

68、t;  if(count1>="10")then</p><p>  count1<="00";</p><p><b>  else</b></p><p>  count1<=count1+1;</p><p><b>  end if;</b

69、></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process speaker;</p><p>  lamper:process(clk)</p><p><b>  b

70、egin</b></p><p>  if(rising_edge(clk))then</p><p>  if(coun<="10")then</p><p>  if(coun="00")then</p><p>  lamp<="001";</p&

71、gt;<p>  elsif(coun="01")then</p><p>  lamp<="010";</p><p>  elsif(coun="10")then</p><p>  lamp<="100";</p><p><

72、b>  end if;</b></p><p>  coun<=coun+1;</p><p><b>  else</b></p><p>  coun<="00";</p><p><b>  end if;</b></p><

73、;p><b>  end if;</b></p><p>  end process lamper;</p><p><b>  END fun;</b></p><p><b>  7、頂層代碼</b></p><p>  library ieee;</p>

74、<p>  use ieee.std_logic_1164.all;</p><p>  entity clock_top is</p><p>  port(clk,reset,setmin,sethour,clkdsp:in std_logic;</p><p>  speaker:out std_logic;</p><p&g

75、t;  lamp:out std_logic_vector(2 downto 0);</p><p>  sel:out std_logic_vector(2 downto 0);</p><p>  a,b,c,d,e,f,g,dpout:out std_logic);</p><p>  end clock_top;</p><p>  

76、architecture a of clock_top is</p><p>  COMPONENT second</p><p><b>  PORT(</b></p><p>  clk,reset,setmin:IN STD_LOGIC;</p><p>  daout:out std_logic_vector(6

77、 downto 0);</p><p>  enmin:OUT STD_LOGIC);</p><p>  END COMPONENT;</p><p>  COMPONENT minute</p><p><b>  PORT(</b></p><p>  clk,clk1,reset,seth

78、our:IN STD_LOGIC;</p><p>  enhour:OUT STD_LOGIC;</p><p>  daout:out std_logic_vector(6 downto 0));</p><p>  END COMPONENT;</p><p>  COMPONENT hour</p><p>&

79、lt;b>  PORT(</b></p><p>  clk,reset:IN STD_LOGIC;</p><p>  daout:out std_logic_vector(5 downto 0));</p><p>  END COMPONENT;</p><p>  COMPONENT alert</p>

80、<p><b>  PORT(</b></p><p>  clk:IN STD_LOGIC;</p><p>  dain:in std_logic_vector(6 downto 0);</p><p>  lamp:out std_logic_vector(2 downto 0);</p><p>  

81、speak:OUT STD_LOGIC);</p><p>  END COMPONENT;</p><p>  COMPONENT seltime</p><p><b>  PORT(</b></p><p>  clk1,reset:IN STD_LOGIC;</p><p>  sec,m

82、in:in std_logic_vector(6 downto 0);</p><p>  hour:in std_logic_vector(5 downto 0);</p><p>  dp:out std_logic;</p><p>  daout:out std_logic_vector(3 downto 0);</p><p>  

83、sel:OUT STD_LOGIC_vector(2 downto 0));</p><p>  END COMPONENT;</p><p>  COMPONENT deled</p><p><b>  PORT(</b></p><p>  num:IN STD_LOGIC_vector(3 downto 0);&

84、lt;/p><p>  led:out std_logic_vector(6 downto 0));</p><p>  END COMPONENT;</p><p>  signal enmin_re,enhour_re:std_logic;</p><p>  signal second_daout,minute_daout:std_logi

85、c_vector(6 downto 0);</p><p>  signal hour_daout:std_logic_vector(5 downto 0);</p><p>  signal seltime_daout:std_logic_vector(3 downto 0);</p><p>  signal ledout:std_logic_vector(6

86、downto 0);</p><p><b>  begin</b></p><p>  a<=ledout(6);b<=ledout(5);c<=ledout(4);d<=ledout(3);</p><p>  e<=ledout(2);f<=ledout(1);g<=ledout(0);</

87、p><p>  u1: second port map(reset=>reset,</p><p><b>  clk=>clk,</b></p><p>  setmin=>setmin,</p><p>  enmin=>enmin_re,</p><p>  daout=

88、>second_daout);</p><p>  u2:minute port map(clk=>enmin_re,</p><p>  clk1=>clk,</p><p>  reset=>reset,</p><p>  sethour=>sethour,</p><p>  en

89、hour=>enhour_re,</p><p>  daout=>minute_daout);</p><p>  u3:hour port map(clk=>enhour_re,</p><p>  reset=>reset,</p><p>  daout=>hour_daout);</p>

90、<p>  u4:alert port map(clk=>clk,</p><p>  dain=>minute_daout,</p><p>  speak=>speaker,</p><p>  lamp=>lamp);</p><p>  u5:seltime port map(clk1=>clk

91、dsp,</p><p>  reset=>reset,</p><p>  sec=>second_daout,</p><p>  min=>minute_daout,</p><p>  hour=>hour_daout,</p><p>  daout=>seltime_daout

92、,</p><p>  dp=>dpout,</p><p>  sel=>sel);</p><p>  u6:deled port map(num =>seltime_daout,</p><p>  led=>ledout);</p><p><b>  end a;</b

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論