版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 課 程 設 計</p><p> 2009年 7 月 10 日</p><p><b> 課程設計任務書</b></p><p> 課程 硬件課程設計</p><p> 題目 數字鐘設計&l
2、t;/p><p> 專業(yè) 計算機 姓名 學號 </p><p> 主要內容、基本要求等</p><p><b> 一、主要內容:</b></p><p> 利用EL教學實驗箱、微機和QuartusⅡ軟件系統(tǒng),使用VHDL語言輸入方法設計數字鐘??梢岳脤哟卧O計
3、方法和VHDL語言,完成硬件設計設計和仿真。最后在EL教學實驗箱中實現。</p><p><b> 二、基本要求:</b></p><p> 1.具有時,分,秒,計數顯示功能,以24小時循環(huán)計時。</p><p><b> 2.具有清零功能。</b></p><p><b> 三、
4、擴展要求</b></p><p> 1.調節(jié)小時、分鐘功能。 </p><p> 2.整點報時功能,整點報時的同時LED燈花樣顯示。</p><p> 按照規(guī)范寫出論文,要求字數在4000字以上,并進行答辯。論文內容包括概述(學習、調研、分析、設計的內容摘要)、EDA技術的現狀和發(fā)展趨勢、對EL教學實驗箱和QuartusⅡ軟件的掌握程度、數字鐘的
5、設計過程(包括原理圖或程序設計、編譯、仿真分析、硬件測試的全過程),論文中含有原理圖、程序、仿真波形圖及其分析報告。</p><p><b> 摘 要</b></p><p> 本文介紹了利用EDA-V硬件系統(tǒng)和微機上的Quartus7.2-II等軟件系統(tǒng)。VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareD
6、escription Language,誕生于1982年。1987年底,VHDL被IEEE和美國國防部確認為標準硬件描述語言 。自IEEE公布了VHDL的標準版本,IEEE-1076(簡稱87版)之后,各EDA公司相繼推出了自己的VHDL設計環(huán)境,或宣布自己的設計工具可以和VHDL接口。此后VHDL在電子設計領域得到了廣泛的接受,并逐步取代了原有的非標準的硬件描述語言。有專家認為,在新的世紀中,VHDL于Verilog語言將承擔起大部分
7、的數字系統(tǒng)設計任務。</p><p> 本文設計主要利用VHDL語言在EDA平臺上設計一個電子數字鐘,它的計時周期為24小時,顯示滿刻度為23時59分59秒,另外還具有校時功能和鬧鐘功能??偟某绦蛴蓭讉€各具不同功能的單元模塊程序拼接而成,其中包括分頻程序模塊、時分秒計數和設置程序模塊、比較器程序模塊、三輸入數據選擇器程序模塊、譯碼顯示程序模塊和拼接程序模塊。并且使用Quartus7.2-II軟件進行電路波形仿真
8、,下載到EDA實驗箱進行驗證。</p><p> 關鍵詞: EDA(電子設計自動化);VHDL(硬件描述語言),數字鐘。</p><p><b> 目 錄</b></p><p><b> 第1章 概 述1</b></p><p> 1.1 EDA的概念1</p><
9、;p> 1.2 EDA的工作平臺2</p><p> 1.3 EDA的發(fā)展趨勢…………………………………………………………………………… 4</p><p> 第2章 數字鐘設計的系統(tǒng)分析6</p><p><b> 2.1設計目的6</b></p><p><b> 2.2功能說明6&
10、lt;/b></p><p><b> 2.3實驗原理6</b></p><p><b> 2.4系統(tǒng)硬件6</b></p><p> 第3章 數字鐘的底層電路設計8</p><p><b> 3.1設計規(guī)劃8</b></p><p&g
11、t;<b> 3.2設計說明8</b></p><p> 3.3底層電路程序9</p><p> 第4章 數字鐘的頂層文件設計18</p><p> 4.1設計說明18</p><p> 4.2頂層文件程序18</p><p> 第5章 數字鐘設計的測試與運行21</
12、p><p> 5.1數字鐘的調試……………………………………………………………………..21</p><p> 5.2數字鐘的適配與測試24</p><p><b> 結 論26</b></p><p><b> 參考文獻27</b></p><p><b&g
13、t; 第1章 概 述</b></p><p> 1.1 EDA的概念</p><p> EDA是電子設計自動化Electronic Design Automation的縮寫。EDA技術是以大規(guī)??删幊踢壿嬈骷樵O計載體,以硬件描述語言為系統(tǒng)邏輯描述的主要表達方式,以計算機、大規(guī)??删幊踢壿嬈骷拈_發(fā)軟件及實驗開發(fā)系統(tǒng)為設計工具,通過有關的開發(fā)軟件,自動完成用軟件的方式設計
14、電子系統(tǒng)到硬件系統(tǒng)的一門新技術??梢詫崿F邏輯編譯、邏輯化簡、邏輯分割、邏輯綜合及優(yōu)化,邏輯布局布線、邏輯仿真。完成對于特定目標芯片的適配編譯、邏輯映射、編程下載等工作,最終形成集成電子系統(tǒng)或專用集成芯片。</p><p> 1.1.1EDA技術及應用</p><p> 電子設計技術的核心就是EDA技術,EDA是指以計算機為工作平臺,融合應用電子技術、計算機技術、智能化技術最新成果而研制
15、成的電子CAD通用軟件包,主要能輔助進行三方面的設計工作,即IC設計、電子電路設計和PCB設計。EDA技術已有30年的發(fā)展歷程,大致可分為三個階段。70年代為計算機輔助設計(CAD)階段,人們開始用計算機輔助進行IC版圖編輯、PCB布局布線,取代了手工操作。80年代為計算機輔助工程(CAE)階段。與CAD相比,CAE除了有純粹的圖形繪制功能外,又增加了電路功能設計和結構設計,并且通過電氣連接網絡表將兩者結合在一起,實現了工程設計。CAE
16、的主要功能是:原理圖輸人,邏輯仿真,電路分析,自動布局布線,PCB后分析。90年代為電子系統(tǒng)設計自動化(EDA)階段[3]。</p><p> EDA技術發(fā)展迅猛,逐漸在教學、科研、產品設計與制造等各方面都發(fā)揮著巨大的作用。在教學方面:幾乎所有理工科(特別是電子信息)類的高校都開設了EDA課程。主要是讓學生了解EDA的基本原理和基本概念、鱗握用佃L描述系統(tǒng)邏輯的方法、使用扔A工具進行電子電路課程的模擬仿真實驗并
17、在作畢業(yè)設計時從事簡單電子系統(tǒng)的設計,為今后工作打下基礎。具有代表性的是全國每兩年舉辦一次大學生電子設計競賽活動。在科研方面:主要利用電路仿真工具(EwB或PSPICE、VLOL等)進行電路設計與仿真;利用虛擬儀器進行產品調試;將O)LI)/FPGA器件的開發(fā)應用到儀器設備中。例如在CDMA無線通信系統(tǒng)中,所有移動手機和無線基站都工作在相同的頻譜,為區(qū)別不同的呼叫,每個手機有一個唯一的碼序列,CDMA基站必須能判別這些不同觀點的碼序列才
18、能分辨出不同的傳呼進程;這一判別是通過匹配濾波器的輸出顯示在輸人數據流中探調到特定的碼序列;FPGA能提供良好的濾波器設計,而且能完成DSP高級數據處理功能,因而FPGA在現代通信領域方面獲得廣泛應用[4]。在產品設計與制造方面:從高性能的微處理器、數字信號處理器一直到彩電、音響和電子玩具</p><p> 電子技術全方位納入EDA領域,EDA使得電子領域各學科的界限更加模糊,更加互為包容,突出表現在以下幾個方
19、面:使電子設計成果以自主知識產權的方式得以明確表達和確認成為可能;基于EDA工具的ASIC設計標準單元已涵蓋大規(guī)模電子系統(tǒng)及IP核模塊;軟硬件IP核在電子行業(yè)的產業(yè)領域、技術領域和設計應用領域得到進一步確認;SoC高效低成本設計技術的成熟。隨著半導體技術、集成技術和計算機技術的迅猛發(fā)展,電子系統(tǒng)的設計方法和設計手段都發(fā)生了很大的變化??梢哉f電子EDA技術是電子設計領域的一場革命。傳統(tǒng)的“固定功能集成塊十連線”的設計方法正逐步地退出歷史舞
20、臺,而基于芯片的設計方法正成為現代電子系統(tǒng)設計的主流。作為高等院校有關專業(yè)的學生和廣大的電子工程師了解和掌握這一先進技術是勢在必行,這不僅是提高設計效率的需要,更是時代發(fā)展的需求,只有攀握了EDA技術才有能力參與世界電子工業(yè)市場的競爭,才能生存與發(fā)展。隨著科技的進步,電子產品的更新日新月異,EDA技術作為電子產品開發(fā)研制的源動力,已成為現代電子設計的核心。所以發(fā)展EDA技術將是電子設計領域和電子產業(yè)界的一場重大的技術革命,同時也對電類課
21、程的教學和科研提</p><p> 1.2 EDA的工作平臺</p><p> 1.2.1 EDA硬件工作平臺</p><p><b> 1.計算機。</b></p><p> 2.EDA實驗開發(fā)系統(tǒng):EDA-V。</p><p> 1.2.2 EDA 的軟件工作平臺</p>
22、<p> PLD(Programmable Logic Device)是一種由用戶根據需要而自行構造邏輯功能的數字集成電路。目前主要有兩大類型:CPLD(Complex PLD)和FPGA(Field Programmable Gate Array)。它們的基本設計方法是借助于EDA軟件,用原理圖、狀態(tài)機、布爾表達式、硬件描述語言等方法,生成相應的目標文件,最后用編程器或下載電纜,由目標器件實現。生產PLD的廠家很多,但
23、最有代表性的PLD廠家為Altera、Xilinx和Lattice 公司。</p><p> 1.3EDA的發(fā)展趨勢</p><p> 面對當今飛速發(fā)展的電子產品市場,設計師需要更加實用、快捷的EDA工具,使用統(tǒng)一的集成化設計環(huán)境,改變傳統(tǒng)設計思路,將精力集中到設計構思、方案比較和尋找優(yōu)化設計等方面,需要以最快的速度,開發(fā)出性能優(yōu)良、質量一流的電子產品,對EDA技術提出了更高的要求[3
24、]。未來的EDA技術將在仿真、時序分析、集成電路自動測試、高速印刷電路板設計及開發(fā)操作平臺的擴展等方面取得新的突破,向著功能強大、簡單易學、使用方便的方向發(fā)展。</p><p> 可編程邏輯器件已經成為當今世界上最富吸引力的半導體器件,在現代電子系統(tǒng)設計中扮演著越來越重要的角色。過去的幾年里,可編程器件市場的增長主要來自大容量的可編程邏輯器件CPLD和FPGA,其未來的發(fā)展趨勢如下:向高密度、高速度、寬頻帶方向
25、發(fā)展。在電子系統(tǒng)的發(fā)展過程中,工程師的系統(tǒng)設計理念要受到其能夠選擇的電子器件的限制,而器件的發(fā)展又促進了設計方法的更新。隨著電子系統(tǒng)復雜度的提高,高密度、高速度和寬頻帶的可編程邏輯產品已經成為主流器件,[3]其規(guī)模也不斷擴大,從最初的幾百門到現在的上百萬門,有些已具備了片上系統(tǒng)集成的能力。這些高密度、大容量的可編程邏輯器件的出現,給現代電子系統(tǒng)(復雜系統(tǒng))的設計與實現帶來了巨大的幫助。設計方法和設計效率的飛躍,帶來了器件的巨大需求,這種
26、需求又促使器件生產工藝的不斷進步,而每次工藝的改進,可編程邏輯器件的規(guī)模都將有很大擴展。[3]</p><p> 向在系統(tǒng)可編程方向發(fā)展。在系統(tǒng)可編程是指程序(或算法)在置入用戶系統(tǒng)后仍具有改變其內部功能的能力[4]。采用在系統(tǒng)可編程技術,可以像對待軟件那樣通過編程來配置系統(tǒng)內硬件的功能,從而在電子系統(tǒng)中引入“軟硬件”的全新概念。它不僅使電子系統(tǒng)的設計和產品性能的改進和擴充變得十分簡便,還使新一代電子系統(tǒng)具有極
27、強的靈活性和適應性,為許多復雜信號的處理和信息加工的實現提供了新的思路和方法。</p><p> 向可預測延時方向發(fā)展。當前的數字系統(tǒng)中,由于數據處理量的激增,要求其具有大的數據吞吐量,加之多媒體技術的迅速發(fā)展,要求能夠對圖像進行實時處理,就要求有高速的系統(tǒng)硬件系統(tǒng)[5]。為了保證高速系統(tǒng)的穩(wěn)定性,可編程邏輯器件的延時可預測性是十分重要的。用戶在進行系統(tǒng)重構的同時,擔心的是延時特性會不會因為重新布線而改變,延時
28、特性的改變將導致重構系統(tǒng)的不可靠,這對高速的數字系統(tǒng)而言將是非??膳碌摹R虼?,為了適應未來復雜高速電子系統(tǒng)的要求,可編程邏輯器件的高速可預測延時是非常必要的。</p><p> 向混合可編程技術方向發(fā)展。[3]可編程邏輯器件為電子產品的開發(fā)帶來了極大的方便,它的廣泛應用使得電子系統(tǒng)的構成和設計方法均發(fā)生了很大的變化。但是,有關可編程器件的研究和開發(fā)工作多數都集中在數字邏輯電路上,直到1999年11月,Latti
29、ce公司推出了在系統(tǒng)可編程模擬電路,為EDA技術的應用開拓了更廣闊的前景。其允許設計者使用開發(fā)軟件在計算機中設計、修改模擬電路,進行電路特性仿真,最后通過編程電纜將設計方案下載至芯片中。已有多家公司開展了這方面的研究,并且推出了各自的模擬與數字混合型的可編程器件,相信在未來幾年里,模擬電路及數?;旌想娐房删幊碳夹g將得到更大的發(fā)展。</p><p> 向低電壓、低功耗方面發(fā)展。集成技術的飛速發(fā)展,工藝水平的不斷提
30、高,節(jié)能潮流在全世界的興起,也為半導體工業(yè)提出了向降低工作電壓、降低功耗的方向發(fā)展。</p><p> 面對當今飛速發(fā)展的電子產品市場,電子設計人員需要更加實用、快捷的開發(fā)工具,使用統(tǒng)一的集成化設計環(huán)境,改變優(yōu)先考慮具體物理實現方式的傳統(tǒng)設計思路,將精力集中到設計構思、方案比較和尋找優(yōu)化設計等方面,以最快的速度開發(fā)出性能優(yōu)良、質量一流的電子產品。開發(fā)工具的發(fā)展趨勢如下:具有混合信號處理能力。由于數字電路和模擬電
31、路的不同特性,模擬集成電路EDA工具的發(fā)展遠遠落后于數字電路EDA開發(fā)工具。但是,由于物理量本身多以模擬形式存在,實現高性能復雜電子系統(tǒng)的設計必然離不開模擬信號。20世紀90年代以來,EDA 工具廠商都比較重視數?;旌闲盘栐O計工具的開發(fā)。美國 Cadence 、Synopsys等公司開發(fā)的EDA工具已經具有了數?;旌显O計能力,這些EDA開發(fā)工具能完成含有模數變換、數字信號處理、專用集成電路宏單元、數模變換和各種壓控振蕩器在內的混合系統(tǒng)設
32、計。</p><p> 高效的仿真工具。在整個電子系統(tǒng)設計過程中,仿真是花費時間最多的工作,也是占用EAD工具時間最多的一個環(huán)節(jié)??梢詫㈦娮酉到y(tǒng)設計的仿真過程分為兩個階段:設計前期的系統(tǒng)級仿真和設計過程中的電路級仿真。系統(tǒng)級仿真主要驗證系統(tǒng)的功能,如驗證設計的有效性等;電路級仿真主要驗證系統(tǒng)的性能,決定怎樣實現設計,如測試設計的精度、處理和保證設計要求等。要提高仿真的效率,一方面是要建立合理的仿真算法;另一方面
33、是要更好地解決系統(tǒng)級仿真中,系統(tǒng)模型的建模和電路級仿真中電路模型的建模技術[8]。在未來的EDA技術中,仿真工具將有較大的發(fā)展空間。</p><p> 理想的邏輯綜合、優(yōu)化工具。邏輯綜合功能是將高層次系統(tǒng)行為設計自動翻譯成門級邏輯的電路描述,做到了實際與工藝的獨立。優(yōu)化則是對于上述綜合生成的電路網表,根據邏輯方程功能等效的原則,用更小、更快的綜合結果替代一些復雜的邏輯電路單元,根據指定目標庫映射成新的網表。隨著
34、電子系統(tǒng)的集成規(guī)模越來越大,幾乎不可能直接面向電路圖做設計,要將設計者的精力從繁瑣的邏輯圖設計和分析中轉移到設計前期算法開發(fā)上。邏輯綜合、優(yōu)化工具就是要把設計者的算法完整高效地生成電路網表。第2章 數字鐘的系統(tǒng)分析</p><p><b> 2.1設計目的</b></p><p> 1.掌握多位計數器相連的設計方法。</p><p>
35、2.掌握十進制,六進制,二十四進制計數器的設計方法。</p><p> 3.繼續(xù)鞏固多位共陰極掃描顯示數碼管的驅動,及編碼。</p><p> 4.掌握揚聲器的驅動。</p><p> 5.LED燈的花樣顯示。</p><p> 6.掌握CPLD技術的層次化設計方法。</p><p><b> 2.
36、2功能說明</b></p><p> 1.具有時,分,秒,計數顯示功能,以24小時循環(huán)計時。</p><p> 2.具有清零,調節(jié)小時、分鐘功能。</p><p> 3.具有整點報時功能,整點報時的同時LED燈花樣顯示。</p><p><b> 2.3實驗原理</b></p><
37、p> 在同一EPLD芯片EPF10K10上集成了如下電路模塊:</p><p> 1.時鐘計數:秒——60進制BCD碼計數;</p><p> 分——60進制BCDD碼計數;</p><p> 時——24進制BCDD碼計數;</p><p> 同時整個計數器有清零,調分,調時功能。在接近整數時間能提供報時信號。</p&
38、gt;<p> 2.具有驅動8位八段共陰掃描數碼管的片選驅動信號輸出和八段字形譯碼輸出。編碼和掃描可參照“實驗四”。</p><p> 3.揚生器在整點時有報時驅動信號產生。</p><p> 4. LED燈按個人口味在整點時有花樣顯示信號產生。</p><p><b> 2.4系統(tǒng)硬件</b></p>&l
39、t;p> 1.主芯片EPF10K10LC84-4。</p><p><b> 2.8個LED燈。</b></p><p><b> 3.揚聲器。</b></p><p> 4.8位八段掃描共陰級數碼顯示管。</p><p> 5.三個按鍵開關(清零,調小時,調分鐘)。</p&g
40、t;<p> 第3章 數字鐘的底層電路設計</p><p><b> 3.1設計規(guī)劃</b></p><p> 該數字鐘可以實現3個功能:計時功能、整點報時功能和重置時間功能,因此有3個子模塊:計時、報時(alarm1)、重置時間(setmin1、sethour1)。其中計時模塊有3部分構成:秒計時器(second1)、分計時器(minute1)、
41、時計時器(hour1)。</p><p> 1. 秒計數模塊:秒計數,在頻率為1HZ的時鐘下以60次為循環(huán)計數,并產生進位信號影 響分計數。 </p><p> 2. 分計數模塊:分計數,在秒進位信號為高電平時,計數一次,同樣以60次為一個循環(huán)計數,同時產生分進位信號影響時計數。</p><p> 3. 時計數模塊:時計數,在分進位信號為高電平時,計數一次,以
42、24次為一個循環(huán)計數。</p><p> 4. 時間顯示模塊:通過選中不同的數碼管,同時進行一定頻率的掃描顯示時,分,秒。</p><p> 5. 時間設置模塊:設置調試使能端,可以調時,分?;竟δ苁窃谑鼓芏藶楦唠娖綍r,可以使時和分循環(huán)計數;</p><p> 6. 整點報時模塊:在秒計數到50秒時,同時分計數到59分開始,豐鳴器產生每個2秒的鳴叫(500H
43、Z),到整點是產生750HZ的鳴叫。</p><p> 7. 鬧鐘模塊:在設定鬧鐘鬧鈴時間后,當鬧鐘使能端有效時,可在鬧鈴時間鬧鈴,并有彩燈顯示。</p><p><b> 3.2設計說明</b></p><p> 首先分析數字時鐘,得出進位法則大體相同,故所得時分秒進位方式語法基本相同,因此可以將時分秒定義成六位輸出端口,即分別將時分秒
44、定義為3個component,分別給予設計。</p><p><b> 3.3底層電路程序</b></p><p> 3.3.1 秒計時器(VHDL語言編譯)</p><p> 其代碼如下:(VHDL語言):</p><p> LIBRARY ieee;</p><p> use ie
45、ee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> ENTITY second IS</p><p><b> PORT(</b></p><p> clk, reset,setmin : INSTD_LOGIC;&
46、lt;/p><p> enmin : OUTSTD_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&
47、gt; SIGNAL count: STD_LOGIC_VECTOR( 6 downto 0);</p><p><b> BEGIN</b></p><p> daout <= count;</p><p> process ( clk , reset , setmin) </p><p><b&g
48、t; begin </b></p><p> -- enmin<=k;</p><p> if (reset='0') then</p><p> count <= "0000000";</p><p> elsif (setmin='0') then<
49、;/p><p> enmin <= clk;</p><p> elsif (clk 'event and clk='1') then</p><p> if (count(3 downto 0)="1001") then</p><p> if (count <16#60#) th
50、en</p><p> if (count="1011001") then</p><p> enmin<='1'; </p><p> count<="0000000"; </p><p><b> ELSE
51、</b></p><p> count<=count+7; </p><p><b> end if;</b></p><p><b> else </b></p><p> count<="0000000";</p><p&g
52、t;<b> end if;</b></p><p> elsif (count < 16#60#) then </p><p> count <= count+1;</p><p> enmin<='0' after 100 ns; </p><p>
53、;<b> else </b></p><p> count<="0000000"; </p><p> end if; </p><p><b> end if;</b></p><p> end proce
54、ss;</p><p><b> END fun;</b></p><p> 在秒計時器的clk輸入一個周期為5ns的時鐘信號;清0端(reset)前面一小段(100ns)為低電平,后面均為高電平;置數端(set)前面一小段(200ns)為低電平,后面均為高電平;秒重置端(s1)可設置數值為50秒,保存波形圖,進行仿真,產生如下波形:</p><
55、;p> 圖3-1 5na時鐘信號</p><p> 由上述波形可以清楚的看到:當清0信號(reset)無效時,秒計時器置數,從50秒開始計數,到59秒時回到0,并且輸出一個高電平。</p><p> 3.3.2分計時器(VHDL語言編譯)</p><p> 其代碼(VHDL語言)如下:</p><p> LIBRARY iee
56、e;</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(</b></p><p> clk
57、, clk1,reset,sethour : INSTD_LOGIC;</p><p> enhour : OUTSTD_LOGIC;</p><p> daout: out std_logic_vector (6 downto 0));</p><p> END entity minute;</p><p> ARCHITECT
58、URE fun OF minute IS</p><p> SIGNAL count: STD_LOGIC_VECTOR( 6 downto 0);</p><p><b> BEGIN</b></p><p> daout <= count;</p><p> process ( clk,reset,se
59、thour) </p><p><b> begin </b></p><p> if (reset='0') then</p><p> count <= "0000000";</p><p> elsif (sethour='0') then</
60、p><p> enhour <= clk1;</p><p> elsif (clk' event and clk='1') then</p><p> if (count(3 downto 0)="1001") then</p><p> if (count <16#60#) th
61、en</p><p> if (count="1011001") then</p><p> enhour<='1'; </p><p> count<="0000000"; </p><p><b> E
62、LSE</b></p><p> count<=count+7; </p><p><b> end if;</b></p><p><b> else </b></p><p> count<="0000000";</p><
63、p><b> end if;</b></p><p> elsif(count <16#60#) then </p><p> count <= count + 1;</p><p> enhour<='0' after 100 ns;</p><p><b>
64、 else</b></p><p> count<="0000000";</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p&g
65、t;<b> END fun;</b></p><p> 在分計時器的clkm輸入一個周期為5ns的時鐘信號;清0端(reset)前面一小段(100ns)為低電平,后面均為高電平;置數端(set)前面一小段(200ns)為低電平,后面均為高電平;分重置端(m1)可設置數值為50分,保存波形圖,進行仿真,產生如下波形:</p><p> 圖3-2 分計時器信號&l
66、t;/p><p> 由上述波形可以清楚的看到:當清0信號(reset)無效時,分計時器置數,從50分開始計數,到59秒時回到0,并且從enmin輸出一個高電平。</p><p> 3、時計時器(hour)</p><p> 在時計時器的clkh輸入一個周期為5ns的時鐘信號;清0端(reset)前面一小段(100ns)為低電平,后面均為高電平;置數端(set)前面
67、一小段(200ns)為低電平,后面均為高電平;時重置端(h1)可設置數值為20時,保存波形圖,進行仿真,產生如下波形:</p><p> 圖3-3 時計時器信號</p><p> 由上述波形可以清楚的看到:當清0信號(reset)無效時,時計時器置數,從20時開始計數,到23時回到0,并且從enhour輸出一個高電平。</p><p> 3.3.3時計時器(V
68、HDL語言)</p><p><b> 代碼如下: </b></p><p> LIBRARY ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> E
69、NTITY hour IS</p><p><b> PORT(</b></p><p> clk,reset: INSTD_LOGIC;</p><p> daout: out std_logic_vector (5 downto 0));</p><p> END entity hour;</p>
70、;<p> ARCHITECTURE fun OF hour IS</p><p> SIGNAL count: STD_LOGIC_VECTOR( 5 downto 0);</p><p><b> BEGIN</b></p><p> daout <= count;</p><p> p
71、rocess ( clk,reset) </p><p><b> begin </b></p><p> if (reset='0') then</p><p> count <= "000000";</p><p> elsif (clk' event and
72、 clk='1') then</p><p> if (count(3 downto 0)="1001") then</p><p> if (count <16#24#) then</p><p> count<=count + 7; </p><p><b> else &
73、lt;/b></p><p> count<="000000";</p><p><b> end if;</b></p><p> elsif(count <16#24#) then </p><p> count <= count + 1;</p>&
74、lt;p><b> else </b></p><p> count<="000000";</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;&
75、lt;/p><p><b> END fun;</b></p><p> 時計時器是一個24進制的計數器,它從分組件的脈沖信號輸出端接受脈沖信號,每當一個脈沖信號來時,時就自動加1,并且輸出個信號給時組件,直到計滿24,再將本身清零。該組件還能對時進行數字調整,并可以將其全部清零。</p><p> 3.3.4時間顯示Deled(VHDL語言
76、)</p><p><b> 代碼如下:</b></p><p> LIBRARY ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> ENTITY
77、deled IS</p><p> PORT(num: INstd_logic_vector( 3 downto 0);</p><p> led: OUT std_logic_vector(6 downto 0));</p><p> END deled;</p><p> ARCHITECTURE fun OF deled
78、IS</p><p><b> BEGIN</b></p><p> led <= "1111110" when num= "0000" else</p><p> "0110000" when num= "0001" else</p>&
79、lt;p> "1101101" when num= "0010" else</p><p> "1111001" when num= "0011" else</p><p> "0110011" when num= "0100" else</p>
80、<p> "1011011" when num= "0101" else</p><p> "1011111" when num= "0110" else</p><p> "1110000" when num= "0111" else</p>
81、;<p> "1111111" when num= "1000" else</p><p> "1111011" when num= "1001" else</p><p> "1110111" when num= "1010" else</p&
82、gt;<p> "0011111" when num= "1011" else</p><p> "1001110" when num= "1100" else</p><p> "0111101" when num= "1101" else</
83、p><p> "1001111" when num= "1110" else</p><p> "1000111" when num= "1111" ;</p><p><b> END fun;</b></p><p> Deled模塊
84、是一個簡單的電路,它的功能將時、分、秒三個組件中所計的數編碼后,能對應在七段數碼管山顯示成數字形式。</p><p> 3.3.5報時模塊alert(VHDL語言)</p><p><b> 代碼如下:</b></p><p> LIBRARY ieee;</p><p> use ieee.std_logic_
85、1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> ENTITY alert IS</p><p><b> PORT(</b></p><p> clk : INSTD_LOGIC;</p><p> dain
86、: INSTD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> speak: OUTSTD_LOGIC;</p><p> lamp : OUT STD_LOGIC_VECTOR(2 DOWNTO 0));</p><p> END alert ;</p><p> ARCHITECTURE fun OF
87、alert IS</p><p> signal count : std_logic_vector( 1 downto 0);</p><p> signal count1: std_logic_vector( 1 downto 0);</p><p><b> BEGIN</b></p><p> speake
88、r:process (clk)</p><p><b> begin </b></p><p> speak <= count1(1);</p><p> if (clk 'event and clk= '1') then</p><p> if (dain = "0000
89、00") then</p><p> if (count1>="10") then </p><p> count1<="00";</p><p><b> else</b></p><p> count1 <= count1 + 1;</
90、p><p><b> end if; </b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process speaker;</p><p> lamper:proc
91、ess(clk)</p><p><b> begin</b></p><p> if (rising_edge(clk))then </p><p> if (count <= "10") then</p><p> if (count ="00") then<
92、;/p><p> lamp <= "001" ;</p><p> elsif (count = "01") then</p><p> lamp <= "010" ;</p><p> elsif(count="10") then </p&
93、gt;<p> lamp <= "100" ;</p><p><b> end if;</b></p><p> count <= count + 1;</p><p><b> else </b></p><p> count <=
94、"00";</p><p><b> end if;</b></p><p> end if; </p><p> end process lamper;</p><p><b> END fun ;</b></p><p> 清0端
95、(reset)前面一小段(200ns)為低電平,后面均為高電平;設置min的值,使其分別為……58分、59分、00分、01分、02分、03分……,保存波形圖,進行仿真,產生如下波形:</p><p> 圖3-4 報時模式信號圖</p><p> 由上述波形可以清楚的看到:alarm在0分時輸出高電平,并且持續(xù)至min不為0。</p><p> 3.3.6譯碼模
96、塊seltime(VHDL語言)</p><p><b> 代碼如下:</b></p><p> LIBRARY ieee;</p><p> use ieee.std_logic_1164.all</p><p> use ieee.std_logic_unsigned.all;</p><
97、p> use ieee.std_logic_arith.all;</p><p> ENTITY seltime IS</p><p><b> PORT(</b></p><p> clk1, reset: INSTD_LOGIC;</p><p> sec,min : INSTD_LOGIC_VE
98、CTOR(6 downto 0);</p><p> hour : in std_logic_vector (5 downto 0);</p><p> daout: OUTSTD_LOGIC_vector (3 downto 0);</p><p> sel : out std_logic_vector ( 2 downto 0));</p>
99、<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
100、<= count;</p><p> process ( clk1,reset)</p><p><b> begin </b></p><p> if (reset ='0') then</p><p> count <= "000";</p>&l
101、t;p> elsif (clk1 'event and clk1='1') then</p><p> if ( count >= "101") then</p><p> count <= "000";</p><p><b> else </b><
102、;/p><p> count <= count + 1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> case count is</p><p> when "000"
103、=> daout <= sec(3 downto 0);</p><p> when "001" => daout(3) <= '0';</p><p> daout(2 downto 0) <= sec (6 downto 4);</p><p> when "010" =
104、> daout <= min (3 downto 0);</p><p> when "011" => daout(3) <= '0';</p><p> daout(2 downto 0) <= min (6 downto 4);</p><p> when "100" =
105、> daout <= hour (3 downto 0);</p><p> when others => daout(3 downto 2) <= "00";</p><p> daout(1 downto 0) <= hour(5 downto 4);</p><p><b> end case;
106、</b></p><p> end process;</p><p> 譯碼模塊時時鐘顯示的最重要的部件,它的功能時將時、分、秒共六位譯碼輸出顯示在六位的led顯示器上。它的時鐘信號應接到一個高頻脈沖信號源上,這樣,由于刷新的時間間隔很短,所以,led顯示器才能一直持續(xù)的亮著。</p><p> 第4章 數字鐘的頂層文件設計</p>
107、<p><b> 4.1設計說明</b></p><p> 建立數字鐘的頂層文件就是將已經設計好的各個功能組件組合調用,連成一個整體,使整個系統(tǒng)按照設計要求在實際中工作起來。</p><p><b> 4.2頂層文件程序</b></p><p><b> 代碼如下:</b></
108、p><p> library ieee;</p><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>
109、 speaker:out std_logic;</p><p> 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,dp:out std_logic);</p><
110、p> end clock_top;</p><p> --*************************************************</p><p> architecture a of clock_top is</p><p> --***********************************************
111、**</p><p> --second counter</p><p> COMPONENT second</p><p><b> PORT(</b></p><p> clk, reset,setmin: INSTD_LOGIC;</p><p> daout:out std_
112、logic_vector(6 downto 0);</p><p> enmin: OUTSTD_LOGIC);</p><p> END COMPONENT;</p><p> --*************************************************</p><p> -- minute counte
113、r</p><p> COMPONENT minute</p><p><b> PORT(</b></p><p> clk, clk1,reset,sethour: INSTD_LOGIC;</p><p> enhour: OUTSTD_LOGIC;</p><p> daou
114、t:out std_logic_vector(6 downto 0));</p><p> END COMPONENT;</p><p> --*************************************************</p><p> --hour counter</p><p> COMPONENT ho
115、ur</p><p> PORT(clk, reset: INSTD_LOGIC;daout:out std_logic_vector(5 downto 0));</p><p> END COMPONENT;</p><p> --*************************************************</p>
116、<p> COMPONENT alert</p><p><b> PORT(</b></p><p> clk: INSTD_LOGIC;</p><p> dain:in std_logic_vector(6 downto 0);</p><p> lamp:out std_logic_vec
117、tor(2 downto 0);</p><p> speak: OUTSTD_LOGIC);</p><p> END COMPONENT;</p><p> --*************************************************</p><p> COMPONENT seltime</p&g
118、t;<p><b> PORT(</b></p><p> clk1, reset: INSTD_LOGIC;</p><p> sec,min:in std_logic_vector(6 downto 0);</p><p> hour:in std_logic_vector(5 downto 0);</p>
119、;<p> daout:out std_logic_vector(3 downto 0);</p><p> sel: OUTSTD_LOGIC_vector(2 downto 0));</p><p> END COMPONENT;</p><p> --******************************************
120、*******</p><p> COMPONENT deled</p><p><b> PORT(</b></p><p> num: INSTD_LOGIC_vector(3 downto 0);</p><p> led:out std_logic_vector(6 downto 0));</p
121、><p> END COMPONENT;</p><p> --*************************************************</p><p> signal ledout:std_logic_vector(6 downto 0);</p><p> signal enmin_re,enhour_re
122、: std_logic;</p><p> signal second_daout,minute_daout:std_logic_vector(6 downto 0);</p><p> signal hour_daout:std_logic_vector(5 downto 0);</p><p> signal seltime_daout:std_logic
123、_vector(3 downto 0);</p><p> --*************************************************</p><p><b> begin</b></p><p> a<=ledout(0);</p><p> b<=ledout(1);&
124、lt;/p><p> c<=ledout(2);</p><p> d<=ledout(3);</p><p> e<=ledout(4);</p><p> f<=ledout(5);</p><p> g<=ledout(6);</p><p><b
125、> dp<='0';</b></p><p> u1: second port map(</p><p> reset=>reset,</p><p> clk=>clk,</p><p> setmin=>setmin,</p><p>
126、enmin=>enmin_re,</p><p> daout=>second_daout);</p><p> u2:minute port map(</p><p> clk=>enmin_re,</p><p> clk1=>clk,</p><p> reset=&
127、gt;reset,</p><p> sethour=>sethour,</p><p> enhour=>enhour_re,</p><p> daout=>minute_daout);</p><p> u3:hour port map(</p><p> clk=>e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論