電子時鐘eda課程設(shè)計報告_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p><b>  1 引 言4</b></p><p>  1.1 EDA概述4</p><p>  1.2 VHDL語言概述5</p><p>  1.3 Max+Plus II概述6</p><p>  2

2、數(shù)字電子鐘設(shè)計9</p><p><b>  2.1設(shè)計方案9</b></p><p><b>  2.2設(shè)計思路9</b></p><p>  2.3模塊設(shè)計10</p><p>  3數(shù)字電子鐘的仿真15</p><p>  3.1六進制計數(shù)器的仿真15<

3、;/p><p>  3.2十進制計數(shù)器的仿真16</p><p>  3.324進制計數(shù)器的仿真17</p><p>  3.4顯示模塊的仿真18</p><p>  3.5頂層模塊的仿真18</p><p><b>  4 小 結(jié)19</b></p><p><

4、;b>  參考文獻(xiàn)20</b></p><p>  附錄:設(shè)計源程序清單21</p><p>  基于VHDL的數(shù)字電子鐘設(shè)計</p><p>  學(xué)生姓名: 指導(dǎo)老師: </p><p>  摘 要 隨著EDA技術(shù)的發(fā)展和應(yīng)用領(lǐng)域的擴大與深入, EDA技術(shù)在電子信息、通信、自動控制及計算機應(yīng)用領(lǐng)域的重要性日益突出

5、。EDA技術(shù)就是依賴功能強大的計算機,在EDA工具軟件平臺上,對以硬件描述語言VHDL為系統(tǒng)邏輯描述手段完成的設(shè)計文件,自動地完成邏輯優(yōu)化和仿真測試,直至實現(xiàn)既定的電子線路系統(tǒng)功能。本文介紹了基于VHDL硬件描述語言設(shè)計的多功能數(shù)字時鐘的思路和技巧。在MAX+Plus II開發(fā)環(huán)境中編譯和仿真了所設(shè)計的程序,并逐一調(diào)試驗證程序的運行狀況。仿真和驗證的結(jié)果表明,該設(shè)計方法切實可行,該數(shù)字時鐘具有一定的實際應(yīng)用性。</p>&

6、lt;p>  關(guān)鍵詞 數(shù)字電子鐘;仿真調(diào)試;VHDL;MAX+Plus II</p><p>  Design of digital electronic clock based on VHDL</p><p>  Student Name: Chen Ben Teacher: Chen Yuantao</p><p>  Abstract With t

7、he development of EDA technology and expansion and deepen of application, EDA technology has become more and more important in electronic information, communications, automatic control and computer app lications. EDA tec

8、hnology depends on powerful computers, complete logic optimization and simulation tests of design documents by means of making hardware description language VHDL as the system logic description automatically in EDA tools

9、 software platform, until it has achieved th</p><p>  Key words digital electronic clock; emulator debugger; VHDL; MAX+Plus II</p><p><b>  1 引 言</b></p><p>  當(dāng)今社會是數(shù)字化的社

10、會,也是數(shù)字集成電路廣泛應(yīng)用的社會,數(shù)字電路本身在不斷地進行更新?lián)Q代。它由早期的電子管、晶體管、小中規(guī)模集成電路發(fā)展到超大規(guī)模集成電路(VLSIC[1])以及許多具有特定功能的專用集成電路。但是,隨著微電子技術(shù)的發(fā)展,設(shè)計與制造集成電路的任務(wù)已不完全由半導(dǎo)體廠商來獨立承擔(dān)。系統(tǒng)設(shè)計師們更愿意自己設(shè)計專用集成電路(ASIC)芯片,而且希望ASIC的設(shè)計周期盡可能的短,最好是在實驗室里就能設(shè)計出合適的ASIC芯片,并且立即投入實際應(yīng)用之中,

11、因而出現(xiàn)了現(xiàn)場可編程邏輯器件(FPLD),其中應(yīng)用最廣泛的當(dāng)屬現(xiàn)場可編程門陣列(FPGA[2])和復(fù)雜可編程邏輯器件(CPLD)。比較典型的就是Xilinx公司的FPGA器件系列和Altera公司的CPLD器件系列,它們開發(fā)較早,占用較大的PLD市場。目前,Altera系列產(chǎn)品在我國使用較多。</p><p><b>  1.1 EDA概述</b></p><p> 

12、 20世紀(jì)90年代,國際上電子和計算機技術(shù)較先進的國家,一直在積極探索新的電子電路設(shè)計方法,并在設(shè)計方法、工具等方面進行了徹底的變革,取得了巨大成功。在電子技術(shù)設(shè)計領(lǐng)域,可編程邏輯器件(如CPLD、FPGA)的應(yīng)用,已得到廣泛的普及,這些器件為數(shù)字系統(tǒng)的設(shè)計帶來了極大的靈活性。這些器件可以通過軟件編程而對其硬件結(jié)構(gòu)和工作方式進行重構(gòu),從而使得硬件的設(shè)計可以如同軟件設(shè)計那樣方便快捷。這一切極大地改變了傳統(tǒng)的數(shù)字系統(tǒng)設(shè)計方法、設(shè)計過程和設(shè)計

13、觀念,促進了EDA技術(shù)的迅速發(fā)展。</p><p>  EDA技術(shù)就是以計算機為工具,設(shè)計者在EDA軟件平臺上,用硬件描述語言HDL完成設(shè)計文件,然后由計算機自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術(shù)的出現(xiàn),極大地提高了電路設(shè)計的效率和可操作性,減輕了設(shè)計者的勞動強度。   利用EDA工具,電子設(shè)計師可以從概念、算法、協(xié)議等開

14、始設(shè)計電子系統(tǒng),大量工作可以通過計算機完成,并可以將電子產(chǎn)品從電路設(shè)計、性能分析到設(shè)計出IC版圖或PCB版圖的整個過程的計算機上自動處理完成。</p><p>  現(xiàn)在對EDA的概念或范疇用得很寬。包括在機械、電子、通信、航空航天、化工、礦產(chǎn)、生物、醫(yī)學(xué)、軍事等各個領(lǐng)域,都有EDA的應(yīng)用。目前EDA技術(shù)已在各大公司、企事業(yè)單位和科研教學(xué)部門廣泛使用。例如在飛機制造過程中,從設(shè)計、性能測試及特性分析直到飛行模擬,都

15、可能涉及到EDA技術(shù)。</p><p>  1.2 VHDL語言概述</p><p>  硬件描述語言是EDA 技術(shù)的重要組成部分,VHDL[3] 是作為電子設(shè)計主流硬件描述語言,VHDL(Very High Speed Integrated Circuit Hardware Description Language)于1983 年由美國國防部發(fā)起創(chuàng)建,由IEEE進一步發(fā)展并在1987年作

16、為IEEE標(biāo)準(zhǔn)10760發(fā)布。因此,VHDL成為硬件描述語言的業(yè)界標(biāo)準(zhǔn)之一。VHDL作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言,得到眾多EDA公司的支持,在電子工程領(lǐng)域,已成為事實上的通用硬件描述語言。VHDL語言具有很強的電路描述和建模能力,能從多個層次對數(shù)字系統(tǒng)進行建模和描述,從而大大簡化了硬件設(shè)計任務(wù),提高了設(shè)計效率和可靠性,使用VHDL語言,可以就系統(tǒng)的總體要求出發(fā),自上而下地將設(shè)計內(nèi)容細(xì)化,最后完成系統(tǒng)硬件的整體設(shè)計。一個完整的VHD

17、L程序包括以下幾個基本組成部分:實體(Entity),結(jié)構(gòu)體(Architecture),程序包(Package),庫(Library)。其中,實體是一個VHDL程序的基本單元,由實體說明和結(jié)構(gòu)體兩部分組成,實體說明用于描述設(shè)計系統(tǒng)的外部接口信號;結(jié)構(gòu)體用于</p><p>  VHDL 語言的編譯環(huán)境有不同的版本,我們應(yīng)用的是Altera 公司的Maxplus 軟件,它的操作順序如下:使用TEXTEDITOR

18、編寫VHDL 程序使用COMPILER 編譯VHDL 程序;使用WAVE2FORMEDITOR,SIMULAROT 仿真實驗;使用TIMINGANALTZER 進行芯片的時序分析;用FLOORPLANEDITOR 鎖定芯片管腳位置;使用PROGRAMMER 將編譯好的VHDL 程序下載到芯片中。</p><p>  VHDL 進行工程設(shè)計的優(yōu)點是顯而易見的。</p><p>  1.與其他

19、的硬件描述語言相比,VHDL 具有更強的行為描述能力,從而決定了他成為系統(tǒng)設(shè)計領(lǐng)域最佳的硬件描述語言。</p><p>  2.VHDL 豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計早期就能查驗設(shè)計系統(tǒng)的功能可行性,隨時可對設(shè)計進行仿真模擬。</p><p>  3.VHDL 語句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計的分解和已有設(shè)計的再利用功能。符合市場需求的大規(guī)模系統(tǒng)高效

20、、高速地完成必須有多人甚至多個代發(fā)組共同并行工作才能實現(xiàn)。</p><p>  4.對于用VHDL 完成的一個確定的設(shè)計,可以利用EDA 工具進行邏輯綜合和優(yōu)化,并自動的將VHDL 描述設(shè)計轉(zhuǎn)變成門級網(wǎng)表。</p><p>  5.VHDL 對設(shè)計的描述具有相對獨立性,設(shè)計者可以不懂硬件的結(jié)構(gòu),也不必管理最終設(shè)計實現(xiàn)的目標(biāo)器件是什么,而進行獨立的設(shè)計。</p><p&g

21、t;  6.用VHDL 語言編寫的源程序便于文檔管理,用源代碼描述來進行復(fù)雜控制邏輯的設(shè)計,既靈活方便,又便于設(shè)計結(jié)果的交流、保存和重用。</p><p>  綜上所述,VHDL 語言的極強的行為描述能力和豐富的仿真語句及庫函數(shù),決定了它具有支持大規(guī)模設(shè)計的分析和已有設(shè)計的再利用功能5和功能6,用VHDL完成一個確定的設(shè)計,可以利用EDA 工具進行邏輯綜合和優(yōu)化,并自動把VHDL描述設(shè)計轉(zhuǎn)變成門級網(wǎng)表。這種方式突

22、破了門級設(shè)計的瓶頸,極大地減少了電路設(shè)計的時間和可能發(fā)生的錯誤,降低了開發(fā)成本。</p><p>  1.3 Max+Plus II概述</p><p>  Max+Plus II[4]是美國Altera公司開發(fā)的軟件,它具有操作系統(tǒng)的程序界面,采用全菜單操作和鼠標(biāo)操作方式,是一個完全集成化,易學(xué)易用的可編程邏輯設(shè)計環(huán)境。它提供了功能強大,直觀便捷和操作靈活的原理圖輸入設(shè)計功能,同時還配備

23、了適用于各種需要的元件庫,其中包含基本邏輯元件庫(如與非門、反向器、觸發(fā)器等),宏功能元件(包含了幾乎所有74 系列的器件)以及功能強大、性能良好的類似于核的兆功能塊庫,但更為重要的是它提供了使用方便,精度良好的時序仿真器,能夠?qū)ο到y(tǒng)中任一元件的功能進行精確的時序仿真,精度達(dá)0.1ns,非常準(zhǔn)確。</p><p>  Max+Plus II開發(fā)系統(tǒng)是一個完全集成化、易學(xué)易用的可編程邏輯器件設(shè)計和開發(fā)系統(tǒng),它提供了

24、一種真正與結(jié)構(gòu)無關(guān)的可編程邏輯設(shè)計環(huán)境。它所提供的靈活性和高效性是無可比擬的,其豐富的圖形界面,輔之以完整的、可即時訪問的在線文檔,使設(shè)計人員能夠輕松、愉快地掌握和使用Max+Plus II軟件。Max+Plus II支持靈活多樣的輸入方式:原理圖輸入、硬件描述語言輸入、波形輸入,以及層次設(shè)計輸入。</p><p>  Max+Plus II的設(shè)計輸入、處理和校驗功能全部集成在統(tǒng)一的開發(fā)環(huán)境下,這樣可以加快動態(tài)調(diào)

25、試進程。它提供豐富的庫單元供設(shè)計者使用,包括74系列的全部器件、多種特殊的邏輯宏功能(macro-function)和參數(shù)化功能模塊(LPM: Library of Parameterized Modules),但更為重要的是Max+Plus II還提供了原理圖輸入多層次設(shè)計功能,使得用戶能設(shè)計更大規(guī)模的電路系統(tǒng),以及使用方便、精度良好的時序仿真器。與傳統(tǒng)的數(shù)字電路實驗相比,Max+Plus II提供靈活多樣的層次化輸入設(shè)計功能,具有顯

26、著的優(yōu)勢:</p><p>  1.能進行任意層次的數(shù)字系統(tǒng)設(shè)計。傳統(tǒng)的數(shù)字電路實驗只能完成單一層次的設(shè)計,使設(shè)計者無法了解和實現(xiàn)多層次的硬件數(shù)字系統(tǒng)設(shè)計;</p><p>  2.對系統(tǒng)中的任一層次或任一元件的功能進行精確的時序仿真,精度達(dá)0.1ns,因此能發(fā)現(xiàn)對系統(tǒng)可能產(chǎn)生不良影響的競爭冒險現(xiàn)象;</p><p>  3.通過時序仿真,能迅速定位電路系統(tǒng)的錯誤所

27、在,并隨時糾正;</p><p>  4.能對設(shè)計方案進行隨時更改,并儲存設(shè)計過程中所有的電路和測試文件入檔;</p><p>  5.通過編譯和下載,能在FPGA或CPLD上對設(shè)計項目隨時進行硬件測試驗證;</p><p>  6.如果使用FPGA和配置編程方式,將不會有器件損壞和損耗問題;</p><p>  7.符合現(xiàn)代電子設(shè)計技術(shù)規(guī)范

28、。傳統(tǒng)的數(shù)字電路實驗利用手工連線的方法完成元件連接,容易對學(xué)習(xí)者產(chǎn)生誤導(dǎo),以為只要將元件間的引腳用引線按電路圖連上即可,而不必顧及引線長短,粗細(xì)彎曲方式,可能產(chǎn)生的分布電感和電容效應(yīng),以及電磁兼容性等等十分重要的問題。</p><p>  Max+Plus II還提供設(shè)計校驗的仿真器,其中包括功能仿真和時序仿真。仿真器的靈活性很強電路設(shè)計完成后,需要驗證電路設(shè)計的邏輯功能是否正確。這是一項簡單的邏輯檢查,可采用功

29、能仿真,這對于初步的邏輯功能檢測非常方便。功能檢查完成后,可進行時序仿真。Max+Plus II的時序分析程序可以計算點到點的器件延時,確定器件引腳上的建立時間和保持時間要求,還可計算最高時鐘頻率。</p><p>  用Max+Plus II軟件進行邏輯設(shè)計的步驟包括:</p><p>  1.根據(jù)所選課題的任務(wù)和設(shè)計指標(biāo)要求,確定總體設(shè)計方案,畫出總體方案的系統(tǒng)框圖(亦稱預(yù)設(shè)計階段)&

30、lt;/p><p>  2.進行底層單元電路分析及輸入設(shè)計、編譯、仿真;</p><p>  3.利用已編譯正確的底層單元電路模塊,畫出頂層電路的原理圖 ,進行編譯調(diào)試和仿真測試;</p><p><b>  4.撰寫設(shè)計報告。</b></p><p>  Max+Plus II的設(shè)計流程可以用如下圖1.1給出。</p

31、><p>  圖1.1 Max+Plus II 設(shè)計流程</p><p>  從圖1.1可清晰了解到Max+Plus II提供了一種與結(jié)構(gòu)無關(guān)的設(shè)計環(huán)境,使設(shè)計者能方便地進行設(shè)計輸入、快速處理和器件編程。他包括設(shè)計輸入編輯、編譯網(wǎng)表提取、數(shù)據(jù)庫建立、邏輯綜合、邏輯分割、適配、延時網(wǎng)表提取、編輯文件匯編以及編程下載9個步驟。</p><p><b>  2 數(shù)字

32、電子鐘設(shè)計</b></p><p>  本設(shè)計采用自頂向下的設(shè)計方法[5],將數(shù)字電子時鐘分11個子模塊和1個頂層模塊。子模塊包括2個六進制計數(shù)器,2個十進制計數(shù)器,1個24進制計數(shù)器和6個LED七段數(shù)碼顯示模塊。然后將各個子模塊再細(xì)分為更小的功能塊,直到最后能用 VHDL語言進行描述為止。當(dāng)各個模塊都描述完成并仿真確認(rèn)無誤后,再采用元件例化,將各個元件一層一層的例化連接起來,直到最后完成系統(tǒng)設(shè)計。秒

33、鐘和分鐘的高位只能計數(shù)到5,低位可以計數(shù)到9,如59秒,59分,而小時最大計數(shù)到23。時、分、秒的計時結(jié)果采用6個數(shù)碼管動態(tài)顯示。</p><p><b>  2.1設(shè)計方案</b></p><p>  基于可編程邏輯器件CPLD/FPGA 的芯片,使用硬件描述語言(VHDL)設(shè)計一個數(shù)字電子鐘芯片[5],并進行計算機仿真和編程下載。要求該數(shù)字電子鐘芯片能夠?qū)崿F(xiàn)如下功

34、能:</p><p>  1.計數(shù)功能:完成00時00分00秒到23時59分59秒的計時功能。</p><p>  2.清零功能:到23時59分59秒時電路自動清零,并設(shè)有一個手動清零開關(guān),通過它可以對電路實現(xiàn)隨時的手動的清零。</p><p>  3.定時功能:能夠隨意設(shè)定,精確到秒,由開關(guān)調(diào)節(jié)設(shè)定需要設(shè)定的時刻。</p><p>  4.

35、動態(tài)顯示功能:能夠動態(tài)顯示電子中的時刻數(shù)。</p><p><b>  2.2設(shè)計思路</b></p><p>  根據(jù)該數(shù)字電子鐘的功能要求,現(xiàn)劃分為以下5個模塊:</p><p><b>  1.秒計數(shù)模塊</b></p><p><b>  2.分計數(shù)模塊</b><

36、/p><p><b>  3.時計數(shù)模塊</b></p><p><b>  4.顯示模塊</b></p><p><b>  5.頂層模塊</b></p><p>  在計數(shù)模塊中,程序中的控制信號表示如下:</p><p>  clk 是脈沖控制輸入信號

37、。</p><p>  reset 是清零輸入信號,低電平有效。</p><p><b>  2.3模塊設(shè)計</b></p><p>  秒計數(shù)模塊的功能是從00計數(shù)到59,為六十進制,所以可以由1個六進制計數(shù)器和1個十進制計數(shù)器組成1個六十進制的計數(shù)器。</p><p>  六進制計數(shù)器設(shè)計圖如圖2.1所示。</

38、p><p>  圖2.1六進制計數(shù)器設(shè)計圖</p><p>  其中RESET是六進制計數(shù)器的清零輸入信號,低電平有效,CLK是脈沖控制輸入信號。DIN[2..0]是秒計數(shù)模塊的十位輸入信號,用來調(diào)整秒的十位的數(shù)值。DOUT[2..0]是秒計數(shù)模塊的十位輸出信號。C為秒計數(shù)器的進位。</p><p>  十進制計數(shù)器設(shè)計圖如圖2.2所示。</p><

39、p>  圖2.2十進制計數(shù)器設(shè)計圖</p><p>  其中RESET是十進制計數(shù)器的清零輸入信號,低電平有效,CLK是脈沖控制輸入信號。DIN[3..0]是秒計數(shù)模塊的個位輸入信號,用來調(diào)整秒的個位的數(shù)值。DOUT[3..0]是秒計數(shù)模塊的個位輸出信號。C為秒計數(shù)器的個位的進位。</p><p>  秒計數(shù)模塊的原理圖如圖2.3所示。</p><p>  圖

40、2.3秒計數(shù)模塊原理圖</p><p>  分計數(shù)模塊的功能同樣是從00計數(shù)到59,所以分計數(shù)模塊的構(gòu)成和秒計數(shù)模塊的構(gòu)成一樣。同樣由1個六進制計數(shù)器和1個十進制計數(shù)器組成。設(shè)計圖同秒計數(shù)模塊。原理圖如圖2.4所示。其中需將秒的進位輸出信號接到分計數(shù)模塊的個位的時鐘信號上。</p><p>  圖2.4分計數(shù)模塊原理圖</p><p>  時計數(shù)模塊的功能是從00計

41、數(shù)到23,為24進制。所以該模塊只需1個24進制計數(shù)器構(gòu)成。</p><p>  24進制計數(shù)器設(shè)計圖如圖2.5所示。其中需將分的進位輸出信號接到時計數(shù)模塊的時鐘信號上。</p><p>  圖2.5 24進制計數(shù)器設(shè)計圖</p><p>  其中RESET是24進制計數(shù)器的清零輸入信號,低電平有效,CLK是脈沖控制輸入信號。DIN[5..0]是秒計數(shù)模塊的輸入信號

42、,用來調(diào)整小時的數(shù)值。DOUT[5..0]是時計數(shù)模塊的輸出信號。</p><p>  時計數(shù)模塊原理圖如圖2.6所示。</p><p>  圖2.6時計數(shù)模塊原理圖</p><p>  顯示模塊通過譯碼,將秒、分、時的高低位數(shù)字分別譯成LED七段數(shù)碼管上對應(yīng)的高低電平,然后輸出七段值。</p><p>  7段數(shù)碼顯示器由7個顯示碼管組成,

43、4個輸入信號d0,d1,d2,d3來表示0000到1111, 即表示十六進制中的0到F;同時它有7個輸出信號,分別用a,b,c,d,e,f,g來表示,決定可發(fā)光二極管的狀態(tài)。圖2.7表示的是七段數(shù)碼管的7個輸出信號a,b,c,d,e,f,g與可發(fā)光二極管的對應(yīng)關(guān)系。</p><p>  圖2.7七段數(shù)碼管輸入輸出示意圖</p><p>  若該數(shù)碼管為共陽數(shù)碼管,當(dāng)某位為0時,表示這位所在

44、的數(shù)碼管發(fā)光;如為1,則表示不發(fā)光;共陰數(shù)碼管則正好相反。從7段數(shù)碼顯示器的原理可以知道,7段數(shù)碼顯示器用4個輸入信號對應(yīng)16個輸出信號,并且一個輸入信號只能對應(yīng)一個唯一的輸出。從這點出發(fā),很容易想到前面所學(xué)的譯碼器電路,事實上,7段數(shù)碼顯示器的顯示就是調(diào)用了一個4-16線譯碼器。本設(shè)計采用的是共陽數(shù)碼管,共陽數(shù)碼管的真值表如圖2.8所示。</p><p>  圖2.8七段共陽極數(shù)碼管真值表</p>

45、<p>  顯示模塊設(shè)計圖如圖2.9所示。</p><p>  圖2.9顯示模塊設(shè)計圖</p><p>  其中DIN[3..0]是數(shù)字電子鐘的時、分、秒的個位或者十位輸入信號,DOUT[6..0]是顯示模塊的輸出信號。</p><p>  顯示模塊原理圖如圖2.10所示。</p><p>  圖2.10顯示模塊原理圖</p

46、><p>  各功能子模塊設(shè)計完成后,再設(shè)計頂層模塊,它主要是通過元件聲明和元件例化語句對各子模塊進行調(diào)用來完成的。</p><p>  頂層模塊設(shè)計圖如圖2.11所示。</p><p>  圖2.11頂層模塊設(shè)計圖</p><p>  其中RESET是頂層模塊的清零輸入信號,低電平有效,CLK是脈沖控制輸入信號。DINS[6..0]是頂層模塊的

47、秒輸入信號,用來調(diào)整秒的數(shù)值。DINM[6..0]是頂層模塊的分輸入信號,用來調(diào)整分的數(shù)值。DINH[5..0]是頂層模塊的時輸入信號,用來調(diào)整小時的數(shù)值。輸出信號為時、分、秒的個位和十位的輸出,將此輸出分別接到6個七位LED數(shù)碼管上便可顯示。</p><p>  頂層模塊原理圖如圖2.12所示。</p><p>  圖2.12頂層模塊原理圖</p><p><

48、;b>  3數(shù)字電子鐘的仿真</b></p><p>  3.1 6進制計數(shù)器的仿真</p><p>  將程序使用Max+Plus II進行運行并仿真,得到6進制計數(shù)器的計數(shù)狀態(tài)仿真圖如圖3.1所示。</p><p>  圖3.1 6進制計數(shù)器計數(shù)狀態(tài)仿真圖</p><p>  當(dāng)輸入信號reset為1時,在時鐘信號的上升

49、沿來臨時,計數(shù)器加1,加到5時,在下一個時鐘信號的上升沿來臨時,計數(shù)器清零,進位信號變?yōu)楦唠娖剑绱朔磸?fù)。</p><p>  當(dāng)輸入信號reset為0,且din為0時,得到6進制計數(shù)器的清零狀態(tài),如圖3.2所示。</p><p>  圖3.2 6進制計數(shù)器清零狀態(tài)仿真圖</p><p>  當(dāng)輸入信號reset為0,且din不為0時,得到6進制計數(shù)器的置數(shù)狀態(tài),即

50、將din的值賦給dout,如圖3.3所示。</p><p>  圖3.3 6進制計數(shù)器置數(shù)狀態(tài)仿真圖</p><p>  3.2 10進制計數(shù)器的仿真</p><p>  將程序使用Max+Plus II進行運行并仿真,得到10進制計數(shù)器計數(shù)狀態(tài)仿真圖如圖3.4所示。</p><p>  圖3.4 10進制計數(shù)器計數(shù)狀態(tài)仿真圖</p&g

51、t;<p>  當(dāng)輸入信號reset為1時,在時鐘信號的上升沿來臨時,計數(shù)器加1,加到9時,在下一個時鐘信號的上升沿來臨時,計數(shù)器清零,進位信號變?yōu)楦唠娖?,如此反?fù)。</p><p>  當(dāng)輸入信號reset為0,且din為0時,得到10進制計數(shù)器的清零狀態(tài),如圖3.5所示。</p><p>  圖3.5 10進制計數(shù)器清零狀態(tài)仿真圖</p><p>

52、  當(dāng)輸入信號reset為0,且din不為0時,得到10進制計數(shù)器的置數(shù)狀態(tài),即將din的值賦給dout,如圖3.6所示。</p><p>  圖3.6 10進制計數(shù)器置數(shù)狀態(tài)仿真圖</p><p>  3.3 24進制計數(shù)器的仿真</p><p>  將程序使用Max+Plus II進行運行并仿真,得到24進制計數(shù)狀態(tài)的仿真圖如圖3.7所示。</p>

53、<p>  圖3.7 24進制計數(shù)狀態(tài)仿真圖</p><p>  當(dāng)輸入信號reset為1時,在時鐘信號的上升沿來臨時,計數(shù)器加1,加到23時,在下一個時鐘信號的上升沿來臨時,計數(shù)器清零,如此反復(fù)。</p><p>  當(dāng)輸入信號reset為0,且din為0時,得到24進制計數(shù)器的清零狀態(tài),如圖3.8所示。</p><p>  圖3.8 24進制清零狀態(tài)

54、仿真圖</p><p>  當(dāng)輸入信號reset為0,且din不為0時,得到24進制計數(shù)器的置數(shù)狀態(tài),即將din的值賦給dout,如圖3.9所示。</p><p>  圖3.9 24進制置數(shù)狀態(tài)仿真圖</p><p>  3.4顯示模塊的仿真</p><p>  將程序使用Max+Plus II進行運行并仿真,得到顯示模塊仿真圖如圖3.10所

55、示。</p><p>  圖3.10 顯示模塊仿真圖</p><p>  此模塊是將4為二進制輸入信號轉(zhuǎn)化成對應(yīng)的七段數(shù)碼管的7位二進制輸出信號。</p><p>  3.5頂層模塊的仿真</p><p>  將程序使用Max+Plus II進行運行并仿真,得到頂層模塊仿真圖如圖3.11所示。</p><p>  圖3

56、.11 頂層模塊仿真圖</p><p>  此模塊是通過元件聲明和元件例化語句對各子模塊進行調(diào)用,同時將時、分、秒的個位和十位都轉(zhuǎn)換成4位二進制數(shù),然后將這六組數(shù)據(jù)傳給顯示模塊。頂層模塊的輸出的數(shù)據(jù)是七段數(shù)碼管的7位二進制輸出信號。</p><p><b>  4 小 結(jié)</b></p><p>  本課題要求基于可編程邏輯器件,使用硬件描述語

57、言VHDL編寫一個數(shù)字電子鐘芯片,并用Max+Plus II軟件進行仿真。根據(jù)自己對數(shù)字電子鐘的理解我設(shè)計了四大功能:一是計數(shù)功能,二是清零功能,三是定時功能,四是動態(tài)顯示功能。由此必需設(shè)計出五個大的模塊:一是秒計數(shù)模塊,此模塊是由1個6進制計數(shù)器和1個10進制計數(shù)器組成1個60進制計數(shù)器;二是分計數(shù)模塊,此模塊也是是由1個6進制計數(shù)器和1個10進制計數(shù)器組成1個60進制計數(shù)器;三是時計數(shù)模塊,此模塊由1個24進制計數(shù)器構(gòu)成;四是顯示模

58、塊,主要功能是把輸入的4位二進制信號轉(zhuǎn)換為對應(yīng)的七段數(shù)碼管的7位二進制信號。五是頂層模塊,此模塊是通過元件聲明和元件例化語句對各子模塊進行調(diào)用,將其余模塊整合成一塊芯片,避免的繁雜的連線。在設(shè)計剛開始,我對Max+Plus II很陌生,所以我花了不少時間來熟悉該軟件的使用方法。我一度比別的同學(xué)落下不少,所以回到宿舍后我仔細(xì)研究了該軟件的使用,繪圖方法,連接快捷鍵。這樣軟件的使用就不是大問題了,也使得我能夠在最后的幾個功能上趕上來,很好的

59、完成數(shù)字電子鐘的設(shè)計。對于一些提高的要求,我們也可以通過學(xué)過的數(shù)電知識進行分</p><p>  通過本學(xué)期課程設(shè)計的學(xué)習(xí),我從中學(xué)習(xí)到了很多東西,對可編程邏輯器件,VHDL語言,Max+Plus II軟件有了一定的了解,尤其是用VHDL語言編程和仿真。在本次設(shè)計中最大的收獲是在不斷地發(fā)現(xiàn)問題,分析問題,解決問題的過程中培養(yǎng)了自己的科研能力,為今后的學(xué)習(xí)工作做了一個良好的鋪墊。EDA軟件的應(yīng)用簡化了像通信電路實習(xí)

60、那樣插線的繁瑣,使我們的時間多花在實驗的原理上,基本的東西由軟件來完成,這樣的實驗不但可以少花時間,也使得我們了解了現(xiàn)在做一些數(shù)字系統(tǒng)的基本流程。受益匪淺。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]王道憲.VHDL電路設(shè)計技術(shù)[M].北京:國防工業(yè)出版社 2004.1.</p><p>  [2]劉瑞.VHDL語

61、言與FPGA設(shè)計[M].北京:機械工業(yè)出版社 2004.4.</p><p>  [3]王振紅.VHDL數(shù)字電路設(shè)計與應(yīng)用實踐教程[M]. 北京:機械工業(yè)出版社2004.</p><p>  [4]潘松,王國棟.VHDL實用教程[M]. 西安:電子科技大學(xué)出版社 2000.3.</p><p>  [5]王毓銀.?dāng)?shù)字電路邏輯設(shè)計[M].北京:高等教育出版社,1999

62、.9.</p><p>  [6]王道憲,賀名臣,劉偉.VHDL電路設(shè)計技術(shù)[M].北京:國防工業(yè)出版社,2004.1.</p><p>  附錄:設(shè)計源程序清單</p><p>  // 程序名稱:基于VHDL語言的數(shù)字電子鐘實現(xiàn)</p><p><b>  // 程序作者: </b></p><p

63、>  // 最后修改日期:2010-12-29</p><p><b>  六進制計數(shù)器的程序</b></p><p>  library IEEE; --庫說明</p><p>  use IEEE.STD_LOGIC_1164.ALL; --調(diào)用庫文件</p><p>  use IEEE.STD

64、_LOGIC_ARITH.ALL;</p><p>  use IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  entity counter6 is</p><p>  Port(clk:in std_logic;</p><p>  reset:in std_logic;</p><p>

65、;  din:in std_logic_vector(2 downto 0);</p><p>  dout:out std_logic_vector(2 downto 0);</p><p>  c:out std_logic);</p><p>  end counter6;</p><p>  architecture Behavior

66、al of counter6 is</p><p>  signal count:std_logic_vector(2 downto 0);</p><p><b>  begin</b></p><p>  dout<=count;</p><p>  process(clk, reset,din)</p&

67、gt;<p><b>  begin</b></p><p>  if reset='0'then</p><p>  count<=din;</p><p><b>  c<='0';</b></p><p>  elsif rising_

68、edge(clk) then</p><p>  if count="101" then</p><p>  count<="000";</p><p><b>  c<='1';</b></p><p><b>  else</b>

69、;</p><p>  count<=count+1;</p><p><b>  c<='0';</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>

70、;  end process;</p><p>  end Behavioral;</p><p><b>  十進制計數(shù)器的程序</b></p><p>  library IEEE;</p><p>  use IEEE.STD_LOGIC_1164.ALL;</p><p>  use IE

71、EE.STD_LOGIC_ARITH.ALL;</p><p>  use IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  entity counter10 is</p><p>  Port(clk:in std_logic;</p><p>  reset:in std_logic;</p>&

72、lt;p>  din:in std_logic_vector(3 downto 0);</p><p>  dout:out std_logic_vector(3 downto 0);</p><p>  c:out std_logic) ;</p><p>  end counter10;</p><p>  architecture

73、 Behavioral of counter10 is</p><p>  signal count:std_logic_vector(3 downto 0);</p><p><b>  begin</b></p><p>  dout<=count;</p><p>  process(clk,reset,di

74、n)</p><p><b>  begin</b></p><p>  if reset='0' then</p><p>  count<=din;</p><p><b>  c<='0';</b></p><p>  els

75、if rising_edge(clk) then</p><p>  if count="1001" then</p><p>  count<="0000";</p><p><b>  c<='1';</b></p><p><b>  e

76、lse</b></p><p>  count<=count+1;</p><p><b>  c<='0';</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p&g

77、t;<p>  end process;</p><p>  end Behavioral;</p><p>  24進制計數(shù)器的程序</p><p>  library IEEE;</p><p>  use IEEE.STD_LOGIC_1164.ALL;</p><p>  use IEEE.STD

78、_LOGIC_ARITH.ALL;</p><p>  use IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  entity counter24 is</p><p>  Port(clk:in std_logic;</p><p>  reset:in std_logic;</p><p&g

79、t;  din:in std_logic_vector(5 downto 0);</p><p>  dout:out std_logic_vector(5 downto 0));</p><p>  end counter24;</p><p>  architecture Behavioral of counter24 is</p><p&g

80、t;  signal count:std_logic_vector(5 downto 0);</p><p><b>  begin</b></p><p>  dout<=count;</p><p>  process(clk,reset,din)</p><p><b>  begin</b&

81、gt;</p><p>  if reset='0' then</p><p>  count<=din;</p><p>  elsif rising_edge(clk) then</p><p>  if (count(3 downto 0)=3 and count(5 downto 4)=2) or count(3

82、 downto 0)=9 then</p><p>  count(3 downto 0)<="0000";</p><p>  if count(5 downto 4)=2 then</p><p>  count(5 downto 4)<="00";</p><p>  else cou

83、nt(5 downto 4)<= count(5 downto 4)+1;</p><p><b>  end if;</b></p><p>  else count(3 downto 0)<= count(3 downto 0)+1;</p><p><b>  end if;</b></p>

84、<p><b>  end if;</b></p><p>  end process;</p><p>  end Behavioral;</p><p><b>  顯示模塊的程序</b></p><p>  library IEEE;</p><p>  u

85、se IEEE.STD_LOGIC_1164.ALL;</p><p>  use IEEE.STD_LOGIC_ARITH.ALL;</p><p>  use IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  entity decoder is</p><p>  Port (din:in std_logic_

86、vector(3 downto 0); </p><p>  dout:out std_logic_vector(6 downto 0)) ; </p><p>  end decoder;</p><p>  architecture Behavioral of decoder is</p><p><b>  begin<

87、/b></p><p>  process(din)</p><p><b>  begin</b></p><p>  case din is</p><p>  when "0000" => dout <= "0000001";</p><

88、p>  when "0001" => dout <= "1001111";</p><p>  when "0010" => dout <= "0010010"; </p><p>  when "0011" => dout <= "000

89、0110"; </p><p>  when "0100" => dout <= "1001100"; </p><p>  when "0101" => dout <= "0100100"; </p><p>  when "0110&quo

90、t; => dout <= "0100000"; </p><p>  when "0111" => dout <= "0001111"; </p><p>  when "1000" => dout <= "0000000"; </p>&

91、lt;p>  when "1001" => dout <= "0000100"; </p><p>  when others => dout <= "1111111";</p><p><b>  end case;</b></p><p>  end

92、process;</p><p>  end Behavioral;</p><p><b>  頂層模塊的程序</b></p><p>  library IEEE;</p><p>  use IEEE.STD_LOGIC_1164.ALL;</p><p>  use IEEE.STD_LO

93、GIC_ARITH.ALL;</p><p>  use IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  entity clock is</p><p>  Port(clk,reset:in std_logic;</p><p>  dins:in std_logic_vector(6 downto 0); &

94、lt;/p><p>  dinm:in std_logic_vector(6 downto 0); </p><p>  dinh:in std_logic_vector(5 downto 0); </p><p>  secondl:out std_logic_vector(6 downto 0); </p><p>  secondh:out

95、 std_logic_vector(6 downto 0); </p><p>  minutel:out std_logic_vector(6 downto 0); </p><p>  minuteh:out std_logic_vector(6 downto 0); </p><p>  hourl:out std_logic_vector(6 downto

96、0); </p><p>  hourh:out std_logic_vector(6 downto 0));</p><p>  end clock;</p><p>  architecture Behavioral of clock is</p><p>  component counter10 is</p><p

97、>  Port(clk:in std_logic;</p><p>  reset:in std_logic;</p><p>  din:in std_logic_vector(3 downto 0);</p><p>  dout:out std_logic_vector(3 downto 0);</p><p>  c:out s

98、td_logic);</p><p>  end component;</p><p>  component counter6 is</p><p>  Port(clk:in std_logic;</p><p>  reset:in std_logic;</p><p>  din:in std_logic_ve

99、ctor(2 downto 0);</p><p>  dout:out std_logic_vector(2 downto 0);</p><p>  c:out std_logic);</p><p>  end component;</p><p>  component counter24 is</p><p>

100、;  Port(clk:in std_logic;</p><p>  reset:in std_logic;</p><p>  din:in std_logic_vector(5 downto 0);</p><p>  dout:out std_logic_vector(5 downto 0));</p><p>  end compo

101、nent;</p><p>  component decoder is</p><p>  Port ( din: in std_logic_vector(3 downto 0 ) ;</p><p>  dout: out std_logic_vector(6 downto 0) ) ;</p><p>  end component;&

102、lt;/p><p>  signal c1, c2, c3, c4:std_logic;</p><p>  signal doutsl,doutml:std_logic_vector(3 downto 0);</p><p>  signal doutsh,doutmh:std_logic_vector(2 downto 0);</p><p>

103、;  signal douth:std_logic_vector(5 downto 0);</p><p>  signal rdoutsh,rdoutmh:std_logic_vector(3 downto 0);</p><p>  signal rdouth:std_logic_vector(7 downto 0);</p><p><b>  be

104、gin</b></p><p>  rdoutsh<='0'&doutsh; </p><p>  rdoutmh<='0'&doutmh; </p><p>  rdouth<="00"&douth; </p><p>  u1:cou

105、nter10 port map(clk=>clk,reset=>reset,din=>dins(3 downto 0),dout=>doutsl,c=>c1);</p><p>  u2:counter6 port map(clk=>c1,reset=>reset,din=>dins(6 downto 4),dout=>doutsh,c=>c2);<

106、;/p><p>  u3:counter10 port map(clk=>c2,reset=>reset,din=>dinm(3 downto 0),dout=>doutml,c=>c3);</p><p>  u4:counter6 port map(clk =>c3,reset=>reset,din=>dinm(6 downto 4),dou

107、t=>doutmh,c=>c4);</p><p>  u5:counter24 port map(clk=>c4,reset=>reset,din=>dinh,dout=>douth);</p><p>  u6:decoder port map(din=>doutsl,dout=>secondl);</p><p>

108、;  u7:decoder port map(din=>rdoutsh,dout=>secondh);</p><p>  u8:decoder port map(din=>doutml,dout=>minutel);</p><p>  u9:decoder port map(din=>rdoutmh,dout=>minuteh);</p>

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論