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

下載本文檔

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

文檔簡介

1、<p><b>  摘要: </b></p><p>  EDA(Electronic Design Automation)電子設(shè)計自動化,就是以大規(guī)??删幊唐骷樵O(shè)計載體,以硬件描述語言為系統(tǒng)邏輯描述的主要表達方式,通過相關(guān)的軟件,自動完成用軟件方式設(shè)計的電子系統(tǒng)到硬件系統(tǒng), 最終形成集成電子系統(tǒng)或?qū)S眉尚酒?。本次實?xí)利用QuartusII 為設(shè)計軟件、VHDL 為硬件描述語言

2、,結(jié)合所學(xué)的數(shù)字電路的知識設(shè)計一個12 時多功能數(shù)字鐘,具有正常時、分、秒、1/10秒計時,動態(tài)顯示,清零等功能。利用硬件描述語言VHDL 對設(shè)計系統(tǒng)的各個子模塊進行邏輯描述,采用模塊化的設(shè)計思想完成頂層模塊的設(shè)計,通過軟件編譯、邏輯化簡、邏輯分割、邏輯綜合優(yōu)化、邏輯布線、邏輯仿真,最終將設(shè)計的軟件系統(tǒng)下載設(shè)計實驗系統(tǒng),對設(shè)計的系統(tǒng)進行硬件測試。</p><p>  Abstract: EDA (Electron

3、ic Design Automation), electronic design automation, is based on the design of large-scale programmable devices for carrier, logic for the system with hardware description language describing the main expressions, throug

4、h the relevant software, automating software design of electronic systems, hardware systems, resulting in integrated electronic systems or special-purpose integrated circuits. This practice QuartusII design software, the

5、 VHDL hardware description language, </p><p><b>  課程設(shè)計報告</b></p><p><b>  一、任務(wù)和設(shè)計要求</b></p><p>  1. 熟悉集成電路的引腳安排。</p><p>  2. 掌握各芯片的邏輯功能及使用方法。<

6、/p><p>  3. 了解數(shù)字鐘的組成及工作原理。 </p><p>  4. 熟悉數(shù)字鐘的設(shè)計與制作。</p><p><b>  1.設(shè)計指標 </b></p><p> ?。?)時間以 24 小時為一個周期; </p><p> ?。?)顯示時、分、秒; </p><p&g

7、t;  (3)有校時功能,可以分別對時及分進行單獨校時,使其校正到標準時間; </p><p>  (4)計時過程具有報時功能,當時間到達整點前 5 秒進行蜂鳴報時。</p><p><b>  2.設(shè)計要求 </b></p><p>  (1)畫出電路原理圖(或仿真電路圖); </p><p> ?。?)元器件及參數(shù)選

8、擇; </p><p> ?。?)電路仿真與調(diào)試</p><p><b>  二、設(shè)計原理</b></p><p><b>  設(shè)計思路</b></p><p>  根據(jù)系統(tǒng)設(shè)計要求,系統(tǒng)設(shè)計采用自頂向下設(shè)計方法,由時鐘分頻部分、計時部分、按鍵部分調(diào)時部分和顯示部分五個部分組成。這些模塊都放在一個頂

9、層文件中。</p><p><b>  1)時鐘計數(shù):</b></p><p>  首先下載程序進行復(fù)位清零操作,電子鐘從00:00:00計時開始。sethour可以調(diào)整時鐘的小時部分, setmin可以調(diào)整分鐘,步進為1。</p><p>  由于電子鐘的最小計時單位是1s,因此提供給系統(tǒng)的內(nèi)部的時鐘頻率應(yīng)該大于1Hz,這里取100Hz。CL

10、K端連接外部10Hz的時鐘輸入信號clk。對clk進行計數(shù),當clk=10時,秒加1,當秒加到60時,分加1;當分加到60時,時加1;當時加到24時,全部清0,從新計時。</p><p>  用6位數(shù)碼管分別顯示“時”、“分”、“秒”,通過OUTPUT( 6 DOWNTO 0 )上的信號來點亮指定的LED七段顯示數(shù)碼管。</p><p><b>  時間設(shè)置:</b>

11、</p><p>  手動調(diào)節(jié)分鐘、小時,可以對所設(shè)計的時鐘任意調(diào)時間,這樣使數(shù)字鐘真正具有使用功能。我們可以通過實驗板上的鍵7和鍵4進行任意的調(diào)整,因為我們用的時鐘信號均是1HZ的,所以每LED燈變化一次就來一個脈沖,即計數(shù)一次。</p><p><b>  3)清零功能:</b></p><p>  reset為復(fù)位鍵,低電平時實現(xiàn)清零功能

12、,高電平時正常計數(shù)。可以根據(jù)我們自己任意時間的復(fù)位。</p><p><b>  總體結(jié)構(gòu)圖</b></p><p><b>  三、系統(tǒng)設(shè)計</b></p><p>  1)時、分、秒計時器</p><p>  時計時器為一個24進制計數(shù)器,分、秒計時器均為60進制計數(shù)器。當秒計時器接受到一個秒脈

13、沖時,秒計數(shù)器開始從1計數(shù)到60,此時秒顯示器將顯示00、01、02、...、59、00;每當秒計數(shù)器數(shù)到00時,就會產(chǎn)生一個脈沖輸出送至分計時器,此時分計數(shù)器數(shù)值在原有基礎(chǔ)上加1,其顯示器將顯示00、01、02、...、59、00;每當分計數(shù)器數(shù)到00時,就會產(chǎn)生一個脈沖輸出送至?xí)r計時器,此時時計數(shù)器數(shù)值在原有基礎(chǔ)上加1,其顯示器將顯示00、01、02、...、23、00。即當數(shù)字鐘運行到23點59分59秒時,當秒計時器在接受一個秒脈

14、沖,數(shù)字鐘將自動顯示00點00分00秒。</p><p><b>  2)校時電路</b></p><p>  當開關(guān)撥至校時檔時,電子鐘秒計時工作,通過時、分校時開關(guān)分別對時、分進行校對,開關(guān)每按1次,與開關(guān)對應(yīng)的時或分計數(shù)器加1,當調(diào)至需要的時與分時,撥動reset開關(guān),電子鐘從設(shè)置的時間開始往后計時。</p><p><b> 

15、 四、參考程序</b></p><p><b>  Alert模塊</b></p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p>

16、<p>  ENTITY alert IS</p><p>  PORT(clk:IN STD_LOGIC;</p><p>  dain:IN STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p>  speak:OUT STD_LOGIC;</p><p>  lamp:OUT STD_LOGIC_VECT

17、OR(2 DOWNTO 0));</p><p>  END alert;</p><p>  ARCHITECTURE fun OF alert IS </p><p>  SIGNAL count:STD_LOGIC_VECTOR(1 DOWNTO 0);</p><p>  SIGNAL count1:STD_LOGIC_VECTOR(

18、1 DOWNTO 0);</p><p><b>  BEGIN</b></p><p>  speaker:PROCESS(clk)</p><p><b>  BEGIN</b></p><p>  --speak<=count1(1);</p><p>  IF(

19、clk'event and clk='1')THEN</p><p>  IF(dain="0000000")THEN</p><p>  speak<=count1(1);</p><p>  IF(count1>="10")THEN</p><p>  count

20、1<="00";--count1為三進制加法計數(shù)器</p><p><b>  ELSE</b></p><p>  count1<=count1+1;</p><p>  --speak<=count1(0);</p><p><b>  END IF ; </b&

21、gt;</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>

22、  BEGIN</b></p><p>  IF(rising_edge(clk))THEN</p><p>  IF(count<="10")THEN</p><p>  IF(count="00")THEN</p><p>  lamp<="001";--

23、循環(huán)點亮三只燈</p><p>  ELSIF(count="01")THEN</p><p>  lamp<="010";</p><p>  ELSIF(count="10")THEN</p><p>  lamp<="100";</p>

24、;<p><b>  END IF;</b></p><p>  count<=count+1;</p><p><b>  ELSE</b></p><p>  count<="00";</p><p><b>  END IF;</b

25、></p><p><b>  END IF;</b></p><p>  END PROCESS lamper;</p><p><b>  END fun;</b></p><p><b>  Hour模塊</b></p><p>  LIBR

26、ARY IEEE;</p><p>  use IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  ENTITY hour IS</p><p>  PORT(clk,reset:IN STD_LOGIC;</p><p

27、>  daout:out STD_LOGIC_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&

28、gt;<b>  BEGIN</b></p><p>  daout<=count;</p><p>  PROCESS(clk,reset)</p><p><b>  BEGIN</b></p><p>  IF(reset='0')THEN count<=&quo

29、t;000000"; --若reset=0,則異步清零</p><p>  ELSIF(clk'event and clk='1')THEN --否則,若clk上升沿到</p><p>  IF(count(3 DOWNTO 0)="1001")THEN --若個位計時恰好到"1001"即9<

30、/p><p>  IF(count<16#23#)THEN --23進制</p><p>  count<=count+7; --若到23D則</p><p><b>  else</b></p><p>  count<="000000&quo

31、t;; --復(fù)0</p><p><b>  END IF;</b></p><p>  ELSIF (count<16#23#)THEN --若未到23D,則count進1</p><p>  count<=count+1;</p><p>  ELSE

32、 --否則清零</p><p>  count<="000000";</p><p>  END IF; --END IF(count(3 DOWNTO 0)="1001")</p><p>  END IF; --END IF(reset='0')

33、</p><p>  END PROCESS;</p><p><b>  END fun;</b></p><p><b>  Minute模塊</b></p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.AL

34、L;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  ENTITY minute IS</p><p>  PORT(clk,clk1,reset,sethour:IN STD_LOGIC; </p><p>  enhour:OUT STD_LOGIC;</p>&l

35、t;p>  daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));</p><p>  END ENTITY minute ;</p><p>  ARCHITECTURE fun OF minute IS</p><p>  SIGNAL count :STD_LOGIC_VECTOR (6 DOWNTO 0);</p>

36、<p>  SIGNAL enhour_1, enhour_2: STD_LOGIC; --enmin_1為59分時的進位信號</p><p>  BEGIN --enmin_2由clk調(diào)制后的手動調(diào)時脈沖信號串</p><p>  daout<=count;</p><p>  enhour_2&

37、lt;= (sethour and clk1); --sethour為手動調(diào)時控制信號,高電平有效</p><p>  enhour<= (enhour_1 or enhour_2);</p><p>  PROCESS(clk,reset,sethour)</p><p><b>  BEGIN </b></p><

38、p>  IF(reset='0') THEN --若reset為0,則異步清零</p><p>  count<="0000000";</p><p>  ELSIF(clk'event and clk='1')THEN --否則,若clk上升沿到</p><p>  IF(count (3

39、DOWNTO 0) ="1001")THEN--若個位計時恰好到"1001"即9</p><p>  IF(count <16#60#) THEN --又若count小于16#60#,即60 </p><p>  IF(count="1011001") THEN--又若已到59D</p>&l

40、t;p>  enhour_1<='1'; --則置進位為1</p><p>  count<="0000000"; --count復(fù)0</p><p>  ELSE </p><p>  count<=count+7; --若count未到59D,則加7,即作"加6校正&

41、quot;</p><p>  END IF; --使前面的16#60#的個位轉(zhuǎn)變?yōu)?421BCD的容量</p><p><b>  ELSE</b></p><p>  count<="0000000";--count復(fù)0(有此句,則對無效狀態(tài)電路可自啟動)</p><p>  END IF;

42、 --END IF(count<16#60#)</p><p>  ELSIF (count <16#60#) THEN</p><p>  count<=count+1; --若count<16#60#則count加1</p><p>  enhour_1<='0' after 100 ns; --沒有發(fā)生進位&

43、lt;/p><p>  ELSE </p><p>  count<="0000000"; --否則,若count不小于16#60# count復(fù)0</p><p>  END IF; --END IF(count(3 DOWNTO 0)="1001")</p><p>

44、;  END IF; --END IF(reset='0')</p><p>  END process;</p><p><b>  END fun;</b></p><p><b>  Second模塊</b></p><p>  LIBRARY IEEE;</p>

45、<p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  ENTITY second IS</p><p>  PORT( clk,reset,setmin:STD_LOGIC;</p><p>  enmin:O

46、UT STD_LOGIC;</p><p>  daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));</p><p>  END ENTITY second;</p><p>  ARCHITECTURE fun OF second IS</p><p>  SIGNAL count:STD_LOGIC_VECTO

47、R(6 DOWNTO 0);</p><p>  SIGNAL enmin_1,enmin_2:STD_LOGIC; --enmin_1為59秒時的進位信號</p><p>  BEGIN --enmin_2由clk調(diào)制后的手動調(diào)分脈沖信號串</p><p>  daout<=count;</p>&l

48、t;p>  enmin_2<=(setmin and clk); --setmin為手動調(diào)分控制信號,高電平有效</p><p>  enmin<=(enmin_1 or enmin_2); --enmin為向分進位信號</p><p>  PROCESS(clk,reset,setmin)</p><p><b>  BEGIN<

49、/b></p><p>  IF(reset='0')THEN count<="0000000"; --若reset為0,則異步清零</p><p>  ELSIF(clk 'event and clk='1')then --否則,若clk上升沿到</p><p>  IF(count(3 d

50、ownto 0)="1001")then --若個位計時恰好到"1001"即9</p><p>  IF(count<16#60#)then --又若count小于16#60#,即60H</p><p>  IF(count="1011001")then --又若已到59D</p><p>

51、  enmin_1<='1';count<="0000000";--則置進位為1及count復(fù)0</p><p>  ELSE --未到59D</p><p>  count<=count+7; --則加7,而+7=+1+6,即作"加6校正"</p><p><b>  END

52、IF;</b></p><p>  ELSE --若count不小于16#60#(即count等于或大于16#60#)</p><p>  count<="0000000"; --count復(fù)0</p><p>  END IF; --END IF(count<16#60#)&l

53、t;/p><p>  ELSIF(count<16#60#)then --若個位計數(shù)未到"1001"則轉(zhuǎn)此句再判</p><p>  count<=count+1; --若count<16#60#則count加1 </p><p>  enmin_1<='0'after 100 ns; --沒

54、有發(fā)生進位 </p><p>  ELSE --否則,若count不小于16#60#</p><p>  count<="0000000"; --則count復(fù)0</p><p>  END IF; --END IF(count(3 DOWNTO 0)="1001

55、")</p><p>  END IF; --END IF(reset='0')</p><p>  END PROCESS;</p><p><b>  END fun;</b></p><p>  五、系統(tǒng)調(diào)試與性能分析</p><p&

56、gt;<b>  時基T 產(chǎn)生電路</b></p><p>  數(shù)字鐘以其顯示時間的直觀性、走時準確性作為一種計時工具,數(shù)字鐘的基本組成部分離不開計數(shù)器,在控制邏輯電路的控制下完成預(yù)定的各項功能。</p><p>  由晶振產(chǎn)生的頻率非常穩(wěn)定的脈沖,經(jīng)整形、穩(wěn)定電路后,產(chǎn)生一個頻率為1Hz的、非常穩(wěn)定的計數(shù)時鐘脈沖。</p><p>  調(diào)時、

57、調(diào)分信號的產(chǎn)生</p><p>  由計數(shù)器的計數(shù)過程可知,正常計數(shù)時,當秒計數(shù)器(60進制)計數(shù)到59 時,再來一個脈沖,則秒計數(shù)器清零,重新開始新一輪的計數(shù),而進位則作為分計數(shù)器的計數(shù)脈沖,使分計數(shù)器計數(shù)加1。現(xiàn)在我們把電路稍做變動:把秒計數(shù)器的進位脈沖和一個頻率為2Hz的脈沖信號同時接到一個2選1數(shù)據(jù)選擇器的兩個數(shù)據(jù)輸入端,而位選信號則接一個脈沖按鍵開關(guān),當按鍵開關(guān)不按下去時(即為0),則數(shù)據(jù)選擇器將秒計數(shù)

58、器的進位脈沖送到分計數(shù)器,此時,數(shù)字鐘正常工作;當按鍵開關(guān)按下去時(即為1),則數(shù)據(jù)選擇器將另外一個2Hz 的信號作為分計數(shù)器的計數(shù)脈沖,使其計數(shù)頻率加快,當達到正確時間時,松開按鍵開關(guān),從而達到調(diào)時的目的。調(diào)節(jié)小時的時間也一樣的實現(xiàn)。</p><p><b>  計數(shù)顯示電路</b></p><p>  由計數(shù)部分、數(shù)據(jù)選擇器、譯碼器組成,是時鐘的關(guān)鍵部分。<

59、/p><p>  1、計數(shù)部分:由兩個60進制計數(shù)器和一個24 進制計數(shù)器組成,其中60 進制計數(shù)器可用6 進制計數(shù)器和10 進制計數(shù)器構(gòu)成;24 進制的小時計數(shù)同樣可用6 進制計數(shù)器和10 進制計數(shù)器得到:當計數(shù)器計數(shù)到24 時,“2”和“4”同時進行清零,則可實現(xiàn)24 進制計數(shù)。</p><p>  2、數(shù)據(jù)選擇器:84 輸入14 輸出的多路數(shù)據(jù)選擇器,因為本實驗用到了8個數(shù)碼管(有兩個用

60、來產(chǎn)生隔離符號‘—’)。</p><p>  3、譯碼器:七段譯碼器。譯碼器必須能譯出‘—’,由實驗二中譯碼器真值表可得:字母F 的8421BCD 碼為“1111”,譯碼后為“1000111”,現(xiàn)在如果只譯出‘—’,即字母F的中間一橫,則譯碼后應(yīng)為“0000001”,這樣,在數(shù)碼管上顯示的就為‘—’。</p><p><b>  仿真</b></p>&

61、lt;p><b>  未曾編輯的仿真波形</b></p><p><b>  仿真波形</b></p><p><b>  實驗結(jié)果</b></p><p>  實驗箱使用模式7,鍵8為復(fù)位按鍵,鍵8為1時正常工作。鍵4設(shè)置小時,鍵7設(shè)置分鐘。</p><p>  下載成

62、功后,按下鍵8,及使六個LED復(fù)位清零,顯示數(shù)秒的自動計時,可以通過4鍵設(shè)置小時數(shù),7鍵設(shè)置分鐘數(shù)。當秒數(shù)滿60則進一位,分鐘數(shù)滿60進一位,當顯示為23:59:59時,秒數(shù)在加一則顯示00:00:00,之后從新計時。</p><p><b>  六、訓(xùn)練體會</b></p><p>  通過這次課程設(shè)計,我進一步加深了對電子設(shè)計自動化的了解。并進一步熟練了對Quar

63、tusII軟件的操作。EDA這門課程再也不像學(xué)習(xí)理論般那么空洞,有了更加貼切的了解及運用。</p><p>  在編寫程序的過程中,遇到了很多問題,使我發(fā)現(xiàn)自己以前學(xué)習(xí)上存在的不足。通過與同學(xué)探討和請教老師,終于把問題都解決了,并加深了對數(shù)字時鐘原理和設(shè)計思路的了解。</p><p>  同時我也掌握了做課程設(shè)計的一般流程,為以后的電子設(shè)計這塊積累了一定的經(jīng)驗,為以后從事相關(guā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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論