sopceda綜合課程設(shè)計報告---綜合計時系統(tǒng)_第1頁
已閱讀1頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  SOPC/EDA綜合課程設(shè)計報告</p><p>  設(shè)計題目: 綜合計時系統(tǒng)</p><p>  設(shè) 計 者: 學(xué) 號: 班 級: </p><p><b>  指導(dǎo)老師: </b></p><p>  完成時間: </p>

2、;<p><b>  目錄</b></p><p><b>  1設(shè)計總說明3</b></p><p>  1.1系統(tǒng)設(shè)計要求3</p><p>  2綜合計時系統(tǒng)設(shè)計與分析4</p><p>  2.1 綜合計時模塊:4</p><p>  2

3、.1.1單時鐘電路構(gòu)想4</p><p>  2.1.2顯示控制電路的設(shè)計7</p><p>  2.1.3調(diào)整控制電路TZKZQ的設(shè)計10</p><p>  2.2 系統(tǒng)單元仿真與分析11</p><p>  2.2.1綜合計時電路的仿真11</p><p>  2.2.2調(diào)整控制電路的仿真12<

4、;/p><p>  2.2.3顯示控制電路的仿真13</p><p>  3外圍電路設(shè)計14</p><p>  3.1 直流穩(wěn)壓電源設(shè)計電路圖14</p><p>  3.2 顯示電路的設(shè)計15</p><p>  4收獲與體會16</p><p>  4.1 改進(jìn)方法16&

5、lt;/p><p>  4.2 體會16</p><p>  5設(shè)計參考資料18</p><p>  6附錄————程序段19</p><p>  6.1 CONT60計時電路的VHDL源程序19</p><p>  6.2 CONT30計時電路的VHDL源程序19</p><p&g

6、t;  6.3 顯示控制電路XSKZQ的VHDL源程序21</p><p>  6.4 調(diào)整控制電路TZKZQ的VHDL源程序23</p><p><b>  設(shè)計總說明</b></p><p>  計時系統(tǒng)對現(xiàn)代人們生活學(xué)習(xí)工作等各方面有著巨大的作用,從以前的時鐘、手表到至今,計時系統(tǒng)已經(jīng)發(fā)展成為普遍性,綜合性,簡便性。如何用更簡單、

7、可靠的原理,更輕便、廉價的設(shè)備,更精確、綜合的計時,來設(shè)計電子計時器,是此設(shè)計的研究目的。</p><p>  隨著現(xiàn)代電子產(chǎn)品正以前所未有的高速度,向著功能多樣化、體積最小化、功耗最低化迅速發(fā)展,如何提高產(chǎn)品性能,縮小產(chǎn)品體積,降低產(chǎn)品功耗,是對現(xiàn)代電子產(chǎn)品的基本要求,而EDA,即電子設(shè)計自動化技術(shù),正是為了適應(yīng)現(xiàn)代電子產(chǎn)品的設(shè)計要求,伴隨著計算機(jī)、集成電路、電子系統(tǒng)設(shè)計的發(fā)展,吸收數(shù)據(jù)庫、圖形學(xué)、圖論與拓?fù)溥?/p>

8、輯、計算數(shù)學(xué)、優(yōu)化理論等多學(xué)科最新成果而逐步形成的一門新技術(shù)。它以大規(guī)模可編程邏輯器件為設(shè)計載體,以硬件描述語言為系統(tǒng)邏輯描述的主要表達(dá)方式,以計算機(jī)、大規(guī)??删幊踢壿嬈陂g的開發(fā)軟件及實驗開發(fā)系統(tǒng)為設(shè)計工具,通過有關(guān)的開發(fā)軟件,自動完成用軟件方式設(shè)計的電子系統(tǒng)到硬件系統(tǒng)的邏輯編譯、邏輯簡化、邏輯映射、編程下載等工作等。</p><p>  采用EDA技術(shù)進(jìn)行綜合計時系統(tǒng)的設(shè)計,可讓計時系統(tǒng)達(dá)到精確,簡易,可靠,省

9、能。EDA技術(shù)設(shè)計電子產(chǎn)品,已成為當(dāng)今電子研發(fā)行業(yè)的主流,它可提高電子設(shè)計自動化程度,縮短開發(fā)周期,提高產(chǎn)品的競爭力。</p><p>  本設(shè)計選用Altera公司的FLEX10K系列芯片,該芯片采用5V的工作模式,由Altera公司的MAXplus2開發(fā)系統(tǒng)提供軟件支持,以硬件描述語言VHDL為系統(tǒng)邏輯描述的主要表達(dá)方式,設(shè)計了一個綜合計時系統(tǒng)。</p><p><b>  

10、系統(tǒng)設(shè)計要求</b></p><p>  設(shè)計一個綜合性的計時系統(tǒng),要求能實現(xiàn)年、月、日、時、分、秒及星期的計數(shù)等綜合計時功能,同時將計時結(jié)果通過15個七段數(shù)碼管顯示,并且可通過兩個設(shè)置鍵,對計時系統(tǒng)的有關(guān)參數(shù)進(jìn)行調(diào)整。具體系統(tǒng)功能面板如圖1所示。</p><p><b>  圖1系統(tǒng)功能面板</b></p><p>  綜合計時系

11、統(tǒng)設(shè)計與分析</p><p>  2.1 綜合計時模塊:</p><p>  計時模塊又可分七個小模塊,有計秒模塊,計分模塊,計時模塊,計日模塊,計月模塊,計年模塊,計星期模塊,用于完成各種計時的功能。其中,計秒電路的輸入時鐘周期為1秒,計分電路的輸入時鐘為計秒電路的輸出進(jìn)位,如此類推下去,構(gòu)成每個計時模塊之間的聯(lián)系。而計日模塊又略有不同,因為每個月的日數(shù)受年份,月份影響,所以要輸入當(dāng)前

12、的年份月份來判斷是否閏年,是否大月,才可以實現(xiàn)準(zhǔn)確的計時。</p><p>  調(diào)整控制電路則用于調(diào)整計時系統(tǒng)的有關(guān)參數(shù),通過兩個按鍵來對系統(tǒng)的參數(shù)進(jìn)行修改,在修改過程中,對應(yīng)的修改計時模塊通過相應(yīng)的燈點亮來表示數(shù)據(jù)正待輸入。</p><p>  顯示控制電路用于完成計時結(jié)果的顯示控制及顯示譯碼等功能然后通過15個七段數(shù)碼管顯示出來。</p><p>  同時,設(shè)計

13、了相應(yīng)的外圍電路,因為家庭用的都是220V的交流電壓,所以可通過整流,濾波,穩(wěn)壓,產(chǎn)生5V和12V電壓的直流穩(wěn)壓電路,5V的電壓供給FLEX10K芯片,而12V電壓供給產(chǎn)生1KHz頻率的方波信號源電路,還有顯示數(shù)碼管驅(qū)動電路,用于15個數(shù)碼管的顯示驅(qū)動,還有8個LED顯示燈,表示當(dāng)前調(diào)整模式的選擇狀況,兩個點動式按鍵用于調(diào)整數(shù)據(jù)時的模式選擇和數(shù)據(jù)修改。</p><p>  關(guān)鍵詞:EDA;FLEX10K系列芯片;

14、VHDL硬件描述語言;計時模塊;顯示塊;</p><p>  調(diào)整模塊;外圍電路。</p><p>  2.1.1單時鐘電路構(gòu)想</p><p>  數(shù)字鐘以其顯示時間的直觀性、走時準(zhǔn)確性而受到了人們的歡迎并很快走進(jìn)了千家萬戶。作為一種計時工具,數(shù)字鐘的基本組成部分離不開計數(shù)器,在控制邏輯電路的控制下完成預(yù)定的各項功能。數(shù)字鐘的基本原理方框圖如下:</p>

15、;<p>  圖2 數(shù)字鐘原理方框圖</p><p><b>  時基T產(chǎn)生電路</b></p><p>  由晶振產(chǎn)生的頻率非常穩(wěn)定的脈沖,經(jīng)整形、穩(wěn)定電路后,產(chǎn)生一個頻率為1Hz的、非常穩(wěn)定的計數(shù)時鐘脈沖。</p><p><b>  控制邏輯電路</b></p><p>  產(chǎn)

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

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

18、0進(jìn)制計數(shù)器和一個12/24進(jìn)制計數(shù)器組成,其中60進(jìn)制計數(shù)器可用6進(jìn)制計數(shù)器和10進(jìn)制計數(shù)器構(gòu)成;24進(jìn)制的小時計數(shù)同樣可用6進(jìn)制計數(shù)器和10進(jìn)制計數(shù)器得到:當(dāng)計數(shù)器計數(shù)到24或晚上12時,“2”和“4”(或“1” 和“2”)同時進(jìn)行清零,則可實現(xiàn)24/12進(jìn)制計數(shù)。數(shù)據(jù)選擇器:因為本實驗用到了6個動態(tài)掃描數(shù)碼管,數(shù)據(jù)的選擇輸出是由輸出相應(yīng)的選擇位完成的,故需要提供掃描輸出程序。</p><p>  圖3 自

19、頂向下設(shè)計分割圖</p><p>  CNT60計數(shù)模塊是一個多用計時模塊,它既可作為計秒電路調(diào)用,又可作為計分電路、計時電路調(diào)用。圖4是其輸入、輸出端口圖。其中,輸入信號LD為置數(shù)控制信號,低電平有效;輸入信號CLK為計數(shù)時鐘信號;輸入信號DATA為待預(yù)置數(shù);輸出信號NUM為計數(shù)結(jié)果;輸出信號CO為計數(shù)溢出信號。</p><p>  圖4 CNT60計數(shù)模塊輸入、輸出端口圖</p

20、><p>  CNT60的主要VHDL程序段如下:</p><p>  IF(LD='0') THEN</p><p>  NUM<=DATA;</p><p>  ELSIF CLK'EVENT AND CLK='1' THEN</p><p>  IF NUM="

21、111011" THEN --59</p><p>  NUM<="000000";CO<='1';</p><p><b>  ELSE</b></p><p>  NUM<=NUM+1;CO<='0';</p><p><b&

22、gt;  END IF;</b></p><p><b>  END IF;</b></p><p>  圖5 CNT30計數(shù)模塊的輸入、輸出端口圖</p><p>  CNT30的主要VHDL程序段如下:</p><p>  IF(LD='0') THEN</p><p

23、>  NUM<=DATA;</p><p>  ELSIF CLK'EVENT AND CLK='1' THEN</p><p>  MAX_DAYS<=TOTAL_DAYS;</p><p>  IF NUM=TOTAL_DAYS THEN --99</p><p>  NUM<="

24、00001";CO<='1';</p><p><b>  ELSE</b></p><p>  NUM<=NUM+1;CO<='0';</p><p><b>  END IF;</b></p><p><b>  END IF

25、;</b></p><p>  2.1.2顯示控制電路的設(shè)計</p><p>  本設(shè)計顯示需要使用的是15個七段顯示數(shù)碼管。在計時結(jié)果顯示電路中,七段數(shù)碼管顯示部分是一個不容忽視的環(huán)節(jié),如若處理不得當(dāng),可能引起系統(tǒng)功率過大,產(chǎn)生散熱問題,嚴(yán)重時甚至?xí)?dǎo)致系統(tǒng)的燒毀。為了解決好以上問題,下面就對七段數(shù)碼管顯示電路做簡要的分析和介紹</p><p>  通

26、常點亮一個LED所需的電流是5~50 mA,通電的電流愈大,LED的亮度愈高,相對的也會使其壽命縮短。一般以10 mA的導(dǎo)通電流來估算它所必須串聯(lián)的阻值,其計算方式參考圖6所示。</p><p>  圖6 單個LED的串接電阻計算方式</p><p>  七段顯示器可分為共陽極、共陰極型兩種,它們都可以等效成8個LED的連接電路,其中圖7就是共陰極型七段顯示器的等效電路和每節(jié)LED的定義

27、位置圖。</p><p>  圖7 共陰極型七段顯示器</p><p>  根據(jù)以上設(shè)計思想,本系統(tǒng)的數(shù)據(jù)顯示電路可分為兩個子模塊:</p><p>  (1) 顯示控制電路XSKZQ:負(fù)責(zé)完成數(shù)據(jù)選擇掃描及數(shù)碼管位選擇信號的產(chǎn)生,數(shù)據(jù)掃描選擇輸出,對于選擇的數(shù)據(jù)進(jìn)行BCD碼轉(zhuǎn)換等功能;</p><p>  (2) 顯示譯碼電路:將用于顯示

28、的BCD碼數(shù)據(jù)進(jìn)行譯碼。</p><p>  XSKZQ的輸入、輸出端口如圖8所示。其中,輸入信號CLK_SCAN為用于產(chǎn)生數(shù)據(jù)選擇掃描等控制信號的時鐘信號;輸入信號SEC、MIN、HOUR、DAY、MON、YEAR、WEEK分別來自計秒電路、計分電路、計時電路、計日電路、計月電路、計年電路、計星期電路等計時電路的計時結(jié)果輸出端;輸出信號BCD為被選擇進(jìn)行顯示的計秒/計分/計時/計日/計月/計年/計星期電路等計時

29、電路的計時結(jié)果的8位BCD碼,輸出端SELOUT經(jīng)外部的3-8譯碼電路譯碼后用于選擇對應(yīng)計時結(jié)果顯示數(shù)碼管的公共端COM。</p><p>  圖9為15個共陰極型七段數(shù)碼管驅(qū)動接線圖</p><p>  圖9 15個共陰極型七段數(shù)碼管驅(qū)動接線圖</p><p>  2.1.3調(diào)整控制電路TZKZQ的設(shè)計</p><p>  對于系統(tǒng)中的時

30、間調(diào)整電路,擬通過模式和調(diào)整兩個外部按鍵完成。模式按鍵負(fù)責(zé)切換正常時間計數(shù)模式和時間調(diào)整模式,調(diào)整模式切換順序如圖10所示。調(diào)整鍵負(fù)責(zé)在時間調(diào)整模式之下,對當(dāng)前模式的計時結(jié)果進(jìn)行調(diào)整。</p><p>  圖10 調(diào)整模式切換順序</p><p>  對于系統(tǒng)中的時間調(diào)整電路,擬通過模式和調(diào)整兩個外部按鍵完成。模式鍵負(fù)責(zé)切換正常時間計數(shù)模式和時間調(diào)整模式,調(diào)整模式切換順序如圖10所示。調(diào)

31、整鍵負(fù)責(zé)在時間調(diào)整模式之下,對當(dāng)前模式的計時結(jié)果進(jìn)行調(diào)整。TZKZQ模塊是負(fù)責(zé)各個模塊之間的相互切換以及對被選中的模式進(jìn)行時間調(diào)整的。圖11是其輸入、輸出端口圖。</p><p>  圖11 TZKZQ的輸入、輸出端口圖</p><p>  2.2 系統(tǒng)單元仿真與分析</p><p>  各部分模塊完成后,用QUARTUS Ⅱ?qū)Τ绦蜻M(jìn)行編譯仿真,以得到相應(yīng)的仿真

32、波形。</p><p>  2.2.1綜合計時電路的仿真</p><p>  CNT60.VHD模塊仿真波形如下:</p><p>  圖12 CNT60.VHD模塊仿真圖</p><p>  從圖12可以看出,CNT60.VHD實現(xiàn)了從0到59的循環(huán)計數(shù),每實現(xiàn)一次59到0的計數(shù)動作,計數(shù)模塊輸出一個進(jìn)位信號。當(dāng)LD端有低電平輸入時,說明

33、置數(shù)信號(LD)有效,模塊將預(yù)置數(shù)(DATA)56送入計數(shù)結(jié)果(NUM)中去,計數(shù)模塊從56開始重新計數(shù)。</p><p>  CNT30.VHD的仿真波形如下:</p><p>  圖13 CNT30模塊仿真圖</p><p>  從圖13可以看出,該模塊首先要讀取當(dāng)前年月(NIAN和YUE),再對該月的最大天數(shù)(MAX_DAYS)進(jìn)行判斷并將結(jié)果向外輸出。在正

34、常計數(shù)過程中,模塊實現(xiàn)了從0到最大天數(shù)(MAX_DAYS)的循環(huán)計數(shù),每實現(xiàn)一次最大天數(shù)(MAX_DAYS)到0的計數(shù)動作,計數(shù)模塊輸出一個進(jìn)位信號。當(dāng)LD端有低電平輸入時,說明置數(shù)信號(LD)有效,模塊將預(yù)置數(shù)(DATA)24送入計數(shù)結(jié)果(NUM)中去,計數(shù)模塊從24開始重新計數(shù)。</p><p>  2.2.2調(diào)整控制電路的仿真</p><p>  TZKZQ.VHD的仿真波形如下:&

35、lt;/p><p>  圖14 TZKZQ.VHD仿真圖(一)</p><p>  圖15 TZKZQ.VHD仿真圖(二)</p><p>  從圖14可以看出,調(diào)整鍵被按下了8次(鍵盤產(chǎn)生“01”信號即為調(diào)整鍵按下一次),調(diào)整模式依次經(jīng)過了正常、調(diào)秒、調(diào)分、調(diào)時、調(diào)日、調(diào)月、調(diào)年、調(diào)星期再回到正常這8種模式的循環(huán),即MODE依次從0到7,再從7回到0的循環(huán)。在按鍵過

36、程中,每按下一次按鈕,相應(yīng)地被調(diào)整模式的異步并行置位使能置“0”,同時通過一個非門點亮該調(diào)整模式所對應(yīng)的發(fā)光二極管,作為該調(diào)整模式的指示信號。</p><p>  從圖15可以看出,在按動了兩次模式鍵(01)后,調(diào)整模式切換到了調(diào)分模式,然后又按動了兩次調(diào)整鍵(10),實現(xiàn)了在調(diào)分模式下對當(dāng)前分的值進(jìn)行調(diào)整(從34調(diào)到36)。 </p><p>  2.2.3顯示控制電路的仿真</p

37、><p>  XSKZQ.VHD的仿真波形如下:</p><p>  圖16 TZKZQ.VHD仿真圖</p><p>  從圖16可以看出,當(dāng)SELOUT分別等于0,1,2,3,4,5,6,7時,分別選擇對應(yīng)的輸入數(shù)據(jù)輸出,達(dá)到了設(shè)計要求。</p><p><b>  外圍電路設(shè)計</b></p><

38、p>  3.1 直流穩(wěn)壓電源設(shè)計電路圖</p><p>  圖17 直流穩(wěn)壓電源電路</p><p>  設(shè)輸出電壓為 U=+5V—15V ,輸出電流為I=800mA,則集成穩(wěn)壓器可選用CW317,其輸出電壓范圍為:U0=1.2—37V,最大輸出電流Imax為1.5A。</p><p>  在圖中,R1和R3組成輸出電壓調(diào)節(jié),輸出電壓U0≈1.25(1+

39、 R3/ R1),取R1=200Ω,可得R3≈2.2KΩ。所以R3可選2.5KΩ的精密線繞電位器。</p><p>  由于CW317的輸入電壓與輸出電壓差的最小值為3V,,輸入電壓與輸出電壓差的最大值為40V,故CW317的輸入電壓范圍為:12V到43V,所以變壓器可選擇輸入功率為20W的型號。整流二極管選用IN4001,其反向擊穿電壓為大于50V,額定工作電流為1A。濾波電容C取容量為4700uF,耐壓為25

40、V電容。其它的,C1=0.01uF, C2=10 uF, C0=1 uF。由于本系統(tǒng)需要用到12V的電壓和5V的電壓,調(diào)節(jié)R1,使輸出U1為12V,作為信號源的輸入電壓。再選用滑動變阻器Rw2=100Ω為分壓器,調(diào)節(jié)出U2為5V作為FLEX10K的輸入電壓。</p><p>  3.2 顯示電路的設(shè)計 </p><p>  圖18 顯示電路圖</p><p>

41、;  簡潔的板面實現(xiàn)了年,月,日,時,分,秒,星期的綜合計時,并通過兩個按鍵實現(xiàn)了數(shù)據(jù)的修改。內(nèi)部有直流電壓源,只需接上家庭用220V交流電壓,就可實現(xiàn)計時。而且系統(tǒng)運行只需5V電壓,可做到節(jié)能。</p><p><b>  收獲與體會</b></p><p><b>  4.1 改進(jìn)方法</b></p><p>  在

42、顯示控制電路XSKZQ的設(shè)計中,利用動態(tài)掃描顯示的原理,既簡化了顯示譯碼驅(qū)動電路的設(shè)計,又節(jié)約了硬件的I/O口,同時還減小了系統(tǒng)的驅(qū)動電流及功耗等,在實際使用中非常有價值。</p><p>  在調(diào)整控制電路TZKZQ的設(shè)計中,通過讀入系統(tǒng)當(dāng)前工作的各種時間信息進(jìn)行自加調(diào)整,簡化了預(yù)置值的設(shè)計,利用狀態(tài)機(jī)非常簡潔地實現(xiàn)了8種調(diào)整的循環(huán)變化。 </p><p>  由于本系統(tǒng)采用的是利用秒計

43、時器的進(jìn)位來作為分計時器的脈沖信號,利用分計時器的進(jìn)位來作為時計時器的脈沖信號,以此類推,這樣的設(shè)計雖然減少了器件的使用,卻會導(dǎo)致誤差呈幾何倍數(shù)的增加??梢钥紤]對于系統(tǒng)的各種控制時鐘信號,通過分頻電路對一個給定的合適頻率信號進(jìn)行分頻來產(chǎn)生,這樣就能適當(dāng)?shù)臏p少誤差的產(chǎn)生,使該產(chǎn)品計時更加精確。</p><p><b>  4.2 體會</b></p><p>  開始

44、做這個課題時,發(fā)現(xiàn)不是和想象中那樣簡單,由于以前嘗試的都是小型系統(tǒng),從沒有嘗試過制作個單獨的系統(tǒng),而且EDA的編程思想還是與C、匯編的編程方式存在很多的不同,從一開始我就用著錯誤的思想去做這個事,結(jié)果是顯當(dāng)然,毫無結(jié)果。</p><p>  終于真正的開始重視本次課程設(shè)計,參考過王老師的課程設(shè)計指導(dǎo)書后,我采用自上至下的編程思想,將本個系統(tǒng)大概分了幾塊,開始嘗試查找資料,與組里同學(xué)討論,在了解了別人的編程思想后,

45、我們發(fā)現(xiàn)資料不是絕對的、完整的,我們開始在各個資料之間挑出精華,再加上自己的知識來完善該個課程設(shè)計。</p><p>  經(jīng)過幾天的調(diào)試,經(jīng)過仿真終于能達(dá)到們所需的設(shè)計要求,雖然最終的設(shè)計還存在些小瑕疵.但畢竟是第一次做,我還是比較滿意的。</p><p>  本次設(shè)計讓我們那發(fā)現(xiàn)了自己很多的不足,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固。</p><p>

46、  這次設(shè)計的綜合計時系統(tǒng)還是比較成功的,雖然這次設(shè)計的綜合計時系統(tǒng)不是很完美,在設(shè)計中遇到了很多的難題,最后在老師的辛勤的指導(dǎo)下,終于迎刃而解.還是覺得不錯的,終于覺得平時所學(xué)的知識有了實用的價值,達(dá)到了理論與實際相結(jié)合的目的,不僅學(xué)到了不少知識,而其鍛煉了自己的能力,使自己對以后的路有了更加清楚的認(rèn)識,同時,對未來有了更多的信心。最后,對給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示衷心的感謝!</p><p>

47、  此設(shè)計反映出EDA技術(shù)在電子產(chǎn)品的設(shè)計的優(yōu)勢和實用性。EDA技術(shù)將更廣泛應(yīng)用于高校電類專業(yè)的實踐教學(xué)當(dāng)中,將更廣泛應(yīng)用于科研工作和新產(chǎn)品的開發(fā)中,將更廣泛應(yīng)用于專用集成電路的開發(fā),將更廣泛應(yīng)用于傳統(tǒng)機(jī)電設(shè)備的升級換代和技術(shù)改。</p><p><b>  設(shè)計參考資料</b></p><p>  [1] SOPC/EDA綜合課程設(shè)計指導(dǎo)書,自編</p>

48、<p>  [2] 譚會生,張昌凡.EDA技術(shù)及應(yīng)用(第二版). 西安:西安電子科技大學(xué)出版社,2001</p><p>  [3] 第二屆全國大學(xué)生電子設(shè)計競賽組委會. 全國大學(xué)生電子設(shè)計競賽獲獎作品選編(1994-1995). 北京:北京理工大學(xué)出版社,1997</p><p>  [4] 徐光軍,徐光輝.CPLD/FPGA 的開發(fā)與應(yīng)用. 北京:電子工業(yè)出版社,2002

49、</p><p>  [5] 李國麗,朱維勇. EDA與數(shù)字系統(tǒng)設(shè)計. 北京:機(jī)械工業(yè)出版社,2004</p><p>  [6] 第三屆全國大學(xué)生電子設(shè)計競賽組委會. 全國大學(xué)生電子設(shè)計競賽獲獎作品選編(1997). 北京:北京理工大學(xué)出版社,1999</p><p>  [7] 潘松,黃繼業(yè). EDA技術(shù)實用教程. 北京:科學(xué)出版社,2002</p>

50、<p>  [8] www.altera.com.cn</p><p>  [9] www.fpga.com.cn</p><p>  [10] www.pld.com.cn</p><p><b>  附錄————程序段</b></p><p>  綜合計時電路的VHDL源程序</p>&l

51、t;p>  6.1 CONT60計時電路的VHDL源程序</p><p><b>  CNT60.VHD</b></p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED

52、.ALL;</p><p>  ENTITY CNT60 IS</p><p><b>  PORT(</b></p><p>  CLK: IN STD_LOGIC;--時鐘脈沖</p><p>  NUM: BUFFER STD_LOGIC_VECTOR(5 DOWNTO 0); --計數(shù)結(jié)果</p>

53、<p>  CO: OUT STD_LOGIC); --進(jìn)位信號</p><p>  END ENTITY CNT60;</p><p>  ARCHITECTURE ART OF CNT60 IS</p><p><b>  BEGIN</b></p><p>  PROCESS(CLK)</p&g

54、t;<p><b>  BEGIN</b></p><p>  IF CLK'EVENT AND CLK='1' THEN</p><p>  IF NUM="111011" THEN --59</p><p>  NUM<="000000";CO<=&#

55、39;1';</p><p><b>  ELSE</b></p><p>  NUM<=NUM+1;CO<='0';</p><p><b>  END IF;</b></p><p><b>  END IF;</b></p>

56、<p>  END PROCESS;</p><p>  END ARCHITECTURE ART;</p><p>  6.2 CONT30計時電路的VHDL源程序</p><p><b>  CNT30.VHD</b></p><p>  LIBRARY IEEE;--CONT30計時電路的VHDL源

57、程序</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  ENTITY CNT30 IS</p><p><b>  PORT(</b></p><p>  CLK:

58、IN STD_LOGIC; --時鐘脈沖</p><p>  NIAN:IN STD_LOGIC_VECTOR(6 DOWNTO 0); --當(dāng)前年</p><p>  YUE:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --當(dāng)前月</p><p>  NUM:BUFFER STD_LOGIC_VECTOR(4 DOWNTO 0);

59、 --計數(shù)結(jié)果</p><p>  MAX_DAYS:OUT STD_LOGIC_VECTOR(4 DOWNTO 0); --本月總天數(shù)</p><p>  CO:OUT STD_LOGIC);--進(jìn)位信號</p><p>  END CNT30;</p><p>  ARCHITECTURE ART OF CNT30 IS</p&g

60、t;<p>  SIGNAL TOTAL_DAYS:STD_LOGIC_VECTOR(4 DOWNTO 0);</p><p><b>  BEGIN</b></p><p>  PROCESS(CLK) IS</p><p>  VARIABLE IS_RUNNIAN:STD_LOGIC;</p><p>

61、;<b>  BEGIN</b></p><p>  CASE NIAN IS</p><p>  WHEN "0000000" => IS_RUNNIAN:='1'; --0如當(dāng)前年為00,</p><p><b>  則輸出閏年確認(rèn)信號</b&

62、gt;</p><p>  WHEN "0000100" => IS_RUNNIAN:='1';--4</p><p>  WHEN "0001000" => IS_RUNNIAN:='1';--8</p><p>  WHEN "0001100" =&g

63、t; IS_RUNNIAN:='1';--12</p><p>  WHEN "0010000" => IS_RUNNIAN:='1';--16</p><p>  WHEN "0010100" => IS_RUNNIAN:='1';--20</p><p&g

64、t;  WHEN "0011000" => IS_RUNNIAN:='1';--24</p><p>  WHEN "0011100" => IS_RUNNIAN:='1';--28</p><p>  WHEN "0100000" => IS_RUNNIAN:='

65、1';--32</p><p>  WHEN "0100100" => IS_RUNNIAN:='1';--36</p><p>  WHEN "0101000" => IS_RUNNIAN:='1';--40</p><p>  WHEN "01011

66、00" => IS_RUNNIAN:='1';--44</p><p>  WHEN "0110000" => IS_RUNNIAN:='1';--48</p><p>  WHEN "0110100" => IS_RUNNIAN:='1';--52</p&

67、gt;<p>  WHEN "0111000" => IS_RUNNIAN:='1';--56</p><p>  WHEN "0111100" => IS_RUNNIAN:='1';--60</p><p>  WHEN "1000000" => IS_RU

68、NNIAN:='1';--64</p><p>  WHEN "1000100" => IS_RUNNIAN:='1';--68</p><p>  WHEN "1001000" => IS_RUNNIAN:='1';--72</p><p>  WHEN

69、 "1001100" => IS_RUNNIAN:='1';--76</p><p>  WHEN "1010000" => IS_RUNNIAN:='1';--80</p><p>  WHEN "1010100" => IS_RUNNIAN:='1';

70、--84</p><p>  WHEN "1011000" => IS_RUNNIAN:='1';--88</p><p>  WHEN "1011100" => IS_RUNNIAN:='1';--92</p><p>  WHEN "1100000"

71、 => IS_RUNNIAN:='1';--96</p><p>  WHEN OTHERS => IS_RUNNIAN:='0';</p><p><b>  END CASE;</b></p><p>  CASE YUE IS</p><p>  WHEN &q

72、uot;0001" => TOTAL_DAYS<="11111"; --1 </p><p>  WHEN "0011" => TOTAL_DAYS<="11111";--3</p><p>  WHEN "0101" => TOTAL_DAYS<

73、;="11111";--5</p><p>  WHEN "0111" => TOTAL_DAYS<="11111";--7</p><p>  WHEN "1000" => TOTAL_DAYS<="11111";--8</p><

74、;p>  WHEN "1010" => TOTAL_DAYS<="11111";--10</p><p>  WHEN "1100" => TOTAL_DAYS<="11111";--12</p><p>  WHEN "0100" => T

75、OTAL_DAYS<="11110";--4</p><p>  WHEN "0110" => TOTAL_DAYS<="11110";--6</p><p>  WHEN "1001" => TOTAL_DAYS<="11110";--9<

76、;/p><p>  WHEN "1011" => TOTAL_DAYS<="11110";--11</p><p>  WHEN "0010" => --2</p><p>  IF (IS_RUNNIAN='1') THEN

77、</p><p>  TOTAL_DAYS<="11101"; --如是閏年2月則總天數(shù)為29</p><p><b>  ELSE</b></p><p>  TOTAL_DAYS<="11100";--否則,2月總天數(shù)為28</p><p><b> 

78、 END IF;</b></p><p>  WHEN OTHERS=>NULL;</p><p><b>  END CASE;</b></p><p>  IF CLK'EVENT AND CLK='1' THEN</p><p>  MAX_DAYS<=TOTAL_D

79、AYS;</p><p>  IF NUM=TOTAL_DAYS THEN</p><p>  NUM<="00001";CO<='1';</p><p>  ELSE NUM<=NUM+1;CO<='0';</p><p>  END IF; END IF;&l

80、t;/p><p>  END PROCESS;</p><p><b>  END ART;</b></p><p>  6.3 顯示控制電路XSKZQ的VHDL源程序</p><p><b>  XSKZQ.VHD</b></p><p>  LIBRARY IEEE;--顯

81、示控制電路XSKZQ的VHDL源程序</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>  ENTITY XSKZQ IS</p

82、><p>  PORT(CLK_SCAN:IN STD_LOGIC; --掃描時鐘</p><p>  SEC,MIN:IN STD_LOGIC_VECTOR(5 DOWNTO 0); --當(dāng)前秒、分</p><p>  HOUR:IN STD_LOGIC_VECTOR(4 DOWNTO 0); --當(dāng)前時</p><p>  DAY:

83、IN STD_LOGIC_VECTOR(4 DOWNTO 0); --當(dāng)前日</p><p>  MON:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --當(dāng)前月</p><p>  YEAR:IN STD_LOGIC_VECTOR(6 DOWNTO 0); --當(dāng)前年</p><p>  WEEK:IN STD_LOGIC_VECT

84、OR(2 DOWNTO 0); --當(dāng)前星期</p><p>  SEL:IN STD_LOGIC;--輸出時、分、秒或年、月、日選擇</p><p>  SELOUT:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); --掃描信號</p><p>  HOUR_YEAR:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);&l

85、t;/p><p>  MIN_MON:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p>  SEC_DAY:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --2位LED BCD顯示碼輸出</p><p>  END ENTITY XSKZQ;</p><p>  ARCHITECTURE

86、ART OF XSKZQ IS</p><p>  SIGNAL TEMP:INTEGER RANGE 0 TO 99;</p><p>  SIGNAL BCD:STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p>  SIGNAL SELOUT:STD_LOGIC_VECTOR(2 DOWNTO 0);</p><p&g

87、t;  SIGNAL outreg:STD_LOGIC_VECTOR(23 DOWNTO 0);</p><p>  SIGNAL CLK_SCAN1: STD_LOGIC;</p><p><b>  BEGIN</b></p><p>  PROCESS(CLK_SCAN)</p><p>  VARIABLE CN

88、T:STD_LOGIC_VECTOR(2 DOWNTO 0);</p><p><b>  BEGIN</b></p><p>  IF CLK_SCAN'EVENT AND CLK_SCAN='1' THEN--對各個輸出信號進(jìn)行掃描</p><p>  CNT:=CNT+'1';</p>

89、<p><b>  END IF;</b></p><p>  SELOUT<=CNT;</p><p>  CASE CNT IS</p><p>  WHEN "000" => TEMP<=CONV_INTEGER(SEC);</p><p>  WHEN &quo

90、t;001" => TEMP<=CONV_INTEGER(MIN);</p><p>  WHEN "010" => TEMP<=CONV_INTEGER(HOUR);</p><p>  WHEN "011" => TEMP<=CONV_INTEGER(DAY);</p><p

91、>  WHEN "100" => TEMP<=CONV_INTEGER(MON);</p><p>  WHEN "101" => TEMP<=CONV_INTEGER(YEAR);</p><p>  WHEN "110" => TEMP<=2;</p><p&

92、gt;  WHEN "111" => TEMP<=CONV_INTEGER(WEEK);</p><p>  WHEN OTHERS=>NULL;</p><p><b>  END CASE;</b></p><p>  END PROCESS;</p><p>  PROCES

93、S(SELOUT,SEL,CLK_SCAN)—輸出選擇</p><p><b>  BEGIN</b></p><p>  CASE TEMP IS --2進(jìn)制碼到2位BCD碼轉(zhuǎn)換</p><p>  WHEN 0 =>BCD<="00000000" ;</p><p>  WHEN

94、1 =>BCD<="00000001" ;</p><p>  WHEN 2 =>BCD<="00000010" ;</p><p>  WHEN 3 =>BCD<="00000011" ;</p><p>  WHEN 4 =>BCD<="

95、00000100" ;</p><p>  WHEN 5 =>BCD<="00000101" ;</p><p>  WHEN 6 =>BCD<="00000110" ;</p><p>  WHEN 7 =>BCD<="00000111" ;</p

96、><p>  WHEN 8 =>BCD<="00001000" ;</p><p>  WHEN 9 =>BCD<="00001001" ;</p><p>  WHEN 10 =>BCD<="00010000" ;</p><p>  WHEN

97、11 =>BCD<="00010001" ;</p><p>  WHEN 12 =>BCD<="00010010" ;</p><p>  WHEN 13 =>BCD<="00010011" ;</p><p>  WHEN 14 =>BCD<="

98、00010100" ;</p><p>  WHEN 15 =>BCD<="00010101" ;</p><p>  WHEN 16 =>BCD<="00010110" ;</p><p>  WHEN 17 =>BCD<="00010111" ;</p

99、><p>  WHEN 18 =>BCD<="00011000" ;</p><p>  WHEN 19 =>BCD<="00011001" ;</p><p>  WHEN 20 =>BCD<="00100000" ;</p><p>  WHEN

100、21 =>BCD<="00100001" ;</p><p>  WHEN 22 =>BCD<="00100010" ;</p><p>  WHEN 23 =>BCD<="00100011" ;</p><p>  WHEN 24 =>BCD<="

101、00100100" ;</p><p>  WHEN 25 =>BCD<="00100101" ;</p><p>  WHEN 26 =>BCD<="00100110" ;</p><p>  WHEN 27 =>BCD<="00100111" ;</p

102、><p>  WHEN 28 =>BCD<="00101000" ;</p><p>  WHEN 29 =>BCD<= "00101001";</p><p>  WHEN 30 =>BCD<="00110000" ;</p><p>  WHEN

103、31 =>BCD<="00110001" ;</p><p>  WHEN 32 =>BCD<="00110010" ;</p><p>  WHEN 33 =>BCD<="00110011" ;</p><p>  WHEN 34 =>BCD<="

104、00110100" ;</p><p>  WHEN 35 =>BCD<="00110101" ;</p><p>  WHEN 36 =>BCD<="00110110" ;</p><p>  WHEN 37 =>BCD<="00110111" ;</p

105、><p>  WHEN 38 =>BCD<="00111000" ;</p><p>  WHEN 39 =>BCD<="00111001" ;</p><p>  WHEN 40 =>BCD<="01000000" ;</p><p>  WHEN

106、41 =>BCD<="01000001" ;</p><p>  WHEN 42 =>BCD<="01000010" ;</p><p>  WHEN 43 =>BCD<="01000011" ;</p><p>  WHEN 44 =>BCD<="

107、01000100" ;</p><p>  WHEN 45 =>BCD<="01000101" ;</p><p>  WHEN 46 =>BCD<="01000110" ;</p><p>  WHEN 47 =>BCD<="01000111" ;</p

108、><p>  WHEN 48 =>BCD<="01001000" ;</p><p>  WHEN 49 =>BCD<="01001001" ;</p><p>  WHEN 50 =>BCD<="01010000" ;</p><p>  WHEN

109、51 =>BCD<="01010001" ;</p><p>  WHEN 52 =>BCD<="01010010" ;</p><p>  WHEN 53 =>BCD<="01010011" ;</p><p>  WHEN 54 =>BCD<="

110、01010100" ;</p><p>  WHEN 55 =>BCD<="01010101" ;</p><p>  WHEN 56 =>BCD<="01010110" ;</p><p>  WHEN 57 =>BCD<="01010111" ;</p

111、><p>  WHEN 58 =>BCD<="01011000" ;</p><p>  WHEN 59 =>BCD<="01011001" ;</p><p>  WHEN 60 =>BCD<="01100000" ;</p><p>  WHEN

112、61 =>BCD<="01100001" ;</p><p>  WHEN 62 =>BCD<="01100010" ;</p><p>  WHEN 63 =>BCD<="01100011" ;</p><p>  WHEN 64 =>BCD<="

113、01100100" ;</p><p>  WHEN 65 =>BCD<="01100101" ;</p><p>  WHEN 66 =>BCD<="01100110" ;</p><p>  WHEN 67 =>BCD<="01100111" ;</p

114、><p>  WHEN 68 =>BCD<="01101000" ;</p><p>  WHEN 69 =>BCD<="01101001" ;</p><p>  WHEN 70 =>BCD<="01110000" ;</p><p>  WHEN

115、71 =>BCD<="01110001" ;</p><p>  WHEN 72 =>BCD<="01110010" ;</p><p>  WHEN 73 =>BCD<="01110011" ;</p><p>  WHEN 74 =>BCD<="

116、01110100" ;</p><p>  WHEN 75 =>BCD<="01110101" ;</p><p>  WHEN 76 =>BCD<="01110110" ;</p><p>  WHEN 77 =>BCD<="01110111" ;</p

117、><p>  WHEN 78 =>BCD<="01111000" ;</p><p>  WHEN 79 =>BCD<="01111001" ;</p><p>  WHEN 80 =>BCD<="10000000" ;</p><p>  WHEN

118、81 =>BCD<="10000001" ;</p><p>  WHEN 82 =>BCD<="10000010" ;</p><p>  WHEN 83 =>BCD<="10000011" ;</p><p>  WHEN 84 =>BCD<="

119、10000100" ;</p><p>  WHEN 85 =>BCD<="10000101" ;</p><p>  WHEN 86 =>BCD<="10000110" ;</p><p>  WHEN 87 =>BCD<="10000111" ;</p

120、><p>  WHEN 88 =>BCD<="10001000" ;</p><p>  WHEN 89 =>BCD<="10001001" ;</p><p>  WHEN 90 =>BCD<="10010000" ;</p><p>  WHEN

121、91 =>BCD<="10010001" ;</p><p>  WHEN 92 =>BCD<="10010010" ;</p><p>  WHEN 93 =>BCD<="10010011" ;</p><p>  WHEN 94 =>BCD<="

122、10010100" ;</p><p>  WHEN 95 =>BCD<="10010101" ;</p><p>  WHEN 96 =>BCD<="10010110" ;</p><p>  WHEN 97 =>BCD<="10010111" ;</p

123、><p>  WHEN 98 =>BCD<="10011000" ;</p><p>  WHEN 99 =>BCD<="10011001" ;</p><p>  WHEN OTHERS=>BCD<=NULL;</p><p><b>  END CASE;&

124、lt;/b></p><p>  END PROCESS;</p><p>  PROCESS(SELOUT,SEL,CLK_SCAN)—輸出選擇</p><p><b>  BEGIN</b></p><p>  IF CLK_SCAN'EVENT AND CLK_SCAN='0' THE

125、N</p><p>  IF SEL='0' THEN</p><p>  CASE SELOUT IS</p><p>  WHEN "000" => outreg(7 DOWNTO 0)<=BCD;</p><p>  WHEN "001" => outreg(

126、15 DOWNTO 8)<=BCD;</p><p>  WHEN "010" => outreg(23 DOWNTO 16)<=BCD;</p><p>  WHEN OTHERS=>NULL;</p><p><b>  END CASE;</b></p><p><

127、;b>  ELSE</b></p><p>  CASE SELOUT IS</p><p>  WHEN "011" => outreg(7 DOWNTO 0)<=BCD;</p><p>  WHEN "100" => outreg(15 DOWNTO 8)<=BCD;<

128、/p><p>  WHEN "101" => outreg(23 DOWNTO 16)<=BCD;</p><p>  WHEN OTHERS=>NULL;</p><p><b>  END CASE;</b></p><p><b>  END IF;</b>

129、</p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  SEC_DAY<=outreg(7 DOWNTO 0);</p><p>  MIN_MON<=outreg(15 DOWNTO 8);</p><p>  HOUR

130、_YEAR<=outreg(23 DOWNTO 16);</p><p>  END ARCHITECTURE ART;</p><p>  6.4 調(diào)整控制電路TZKZQ的VHDL源程序</p><p><b>  TZKZQ.VHD</b></p><p>  LIBRARY IEEE;--調(diào)整控制電路TZK

131、ZQ的VHDL源程序</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  ENTITY TZKZQ IS</p><p>  PORT(CLK1HZ:IN STD_LOGIC;</p><p&

132、gt;  SET:IN STD_LOGIC; --校表/走時</p><p>  SETEN:IN STD_LOGIC;</p><p>  SEL:IN STD_LOGIC;--校表選擇</p><p>  SEC_CO,MIN_CO,HOUR_CO,DAY_CO,MON_CO:IN STD_LOGIC;</p><p>  ENOUT

133、:OUT STD_LOGIC;--校表使能輸出</p><p>  SEL_DSP:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); SEC_CLK,MIN_CLK,HOUR_CLK,DAY_CLK,MON_CLK,YEAR_CLK,WEEK_CLK:OUT STD_LOGIC); --異步并行置位使能</p><p>  END ENTITY TZKZQ;<

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論