版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì)任務(wù)書學(xué)生姓名: 羅序森 專業(yè)班級(jí): 通信gj1101_ 指導(dǎo)教師: 胡輯偉 工作單位:_信息工程學(xué)院_題 目: 通信工程應(yīng)用技術(shù)課設(shè)FPGA 一、 設(shè)計(jì)任務(wù)與要求設(shè)計(jì)一個(gè)具有系統(tǒng)時(shí)間設(shè)置和帶鬧鐘功能的24小時(shí)計(jì)時(shí)器中的應(yīng)用。電子鐘要求如下:()計(jì)時(shí)功能:4位LED數(shù)字時(shí)鐘對(duì)當(dāng)前時(shí)間的小時(shí)和分鐘進(jìn)行顯示,顯示的最長(zhǎng)時(shí)間為23小時(shí)59分。()設(shè)置并顯示新的鬧鐘時(shí)間:用戶先按“set”鍵,再用數(shù)字鍵“0”“9”輸入時(shí)間,然后按“alarm”鍵確認(rèn)。在正常計(jì)時(shí)顯示狀態(tài)下,用戶直接按下“alarm”鍵,則已設(shè)置的鬧鐘時(shí)間顯示在顯示屏上。()設(shè)置新的計(jì)時(shí)器時(shí)間:用戶先按“set”鍵,再用數(shù)字鍵“
2、0”“9”輸入新的時(shí)間,然后按“time”鍵確認(rèn)。在輸入過程中;輸入的數(shù)字在顯示屏上從右到左依次顯示。例如,用戶要設(shè)置新的時(shí)間 12:00,則按順序輸入“l(fā)”,“2”,“0”,“0”鍵,與之對(duì)應(yīng),顯示屏上依次顯示的信息為:“1”,“12”;“120”,“1200”。如果用戶在輸入任意幾個(gè)數(shù)字后較長(zhǎng)時(shí)間內(nèi),例如5秒,沒有按任何鍵,則計(jì)時(shí)器恢復(fù)到正常的計(jì)時(shí)顯示狀態(tài)。()鬧鐘功能:如果當(dāng)前時(shí)間與設(shè)置的鬧鐘時(shí)間相同,則揚(yáng)聲器發(fā)出蜂鳴聲;三時(shí)間安排:序號(hào)階段內(nèi)容所需時(shí)間1查閱相關(guān)資料,了解基本原理2天2編寫程序,實(shí)現(xiàn)功能要求3天3撰寫報(bào)告1天4答辯1天合計(jì)7天指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師
3、)簽名: 年 月 日目錄摘 要IAbstractII1 緒言1 1.1 課題的研究背景及意義1 1.2 鬧鐘系統(tǒng)的12 FPGA簡(jiǎn)介22.1 FPGA簡(jiǎn)述22.2 FPGA工作原理22.3 FPGA的基本結(jié)構(gòu)22.4 FPGA系統(tǒng)設(shè)計(jì)流程43主要模塊設(shè)計(jì)53.1 分頻模塊53.1.1 分頻模塊源代碼53.1.2 分頻模塊仿真63.2 按鍵模塊73.2.1 按鍵模塊源代碼83.2.2 按鍵模塊仿真103.3 時(shí)間模塊103.3.1 時(shí)間模塊源代碼103.3.2 時(shí)間模塊仿真133.4 顯示模塊143.4.1 顯示模塊源代碼143.4.1 顯示模塊仿真173.5 鬧鐘模塊183.5.1 鬧鐘模塊源
4、代碼183.5.2 鬧鐘模塊仿真183.6 頂層模塊193.6.1 頂層模塊源代碼193.6.2 頂層模塊仿真214 小結(jié)與體會(huì)22參考文獻(xiàn)23摘 要本設(shè)計(jì)在對(duì)鬧鐘系統(tǒng)的原理及其功能進(jìn)行分析的基礎(chǔ)上,采用自頂向下的設(shè)計(jì)方法,以現(xiàn)場(chǎng)可編程門陣列(FPGA)作為硬件基礎(chǔ),對(duì)鬧鐘系統(tǒng)進(jìn)行電路設(shè)計(jì)。本文的研究目的也是利用EDA技術(shù)來實(shí)現(xiàn)帶鬧鐘功能的24小時(shí)計(jì)時(shí)器。分別介紹發(fā)展歷史、發(fā)展動(dòng)態(tài)、設(shè)計(jì)思路、系統(tǒng)原理、系統(tǒng)功能分析、系統(tǒng)結(jié)構(gòu)、各個(gè)模塊分析與設(shè)計(jì)以及主要工作過程,并且經(jīng)實(shí)際電路測(cè)試與仿真從而實(shí)現(xiàn)了一種基于FPGA的精確可靠的數(shù)字鬧鐘系統(tǒng)。關(guān)鍵字:VHDL, QuartusII, FPGA, 鬧鐘
5、AbstractThe design is based on the analysis of the alarm system and its functions, using top-down design approach to field programmable gate array (FPGA) as a hardware foundation, on the alarm system circuit design. Purpose of this paper makes use of EDA techniques to achieve the alarm clock functio
6、n with the 24-hour timer. The paper introduces the research background, the development history, the development tendency, the research mentality, the system principle the system function analysis, the system structure, each module analysis principle, the system function analysis, the system structu
7、re, each module analysis and the design as well as the prime task process separately. And by the actual circuit testing and simulation in order to achieve an accurate and reliable based on the number of FPGA alarm system.Key words: VHDL, QuartusII, FPGA, alarm clock1緒言1.1課題的研究背景及意義當(dāng)今社會(huì)是數(shù)字化的社會(huì),是數(shù)字集成電
8、路廣泛應(yīng)用的社會(huì)。數(shù)字集成電路本身在不斷地進(jìn)行更新?lián)Q代。它由早期的電子管、晶體管、小中規(guī)模集成電路,發(fā)展到超大規(guī)模集成電路(VLSIC,幾萬門以上)以及許多具有特定功能的專用集成電路。但是,隨著微電子技術(shù)的發(fā)展,設(shè)計(jì)與制造集成電路的任務(wù)已不完全由半導(dǎo)體廠商來獨(dú)立承擔(dān)。系統(tǒng)設(shè)計(jì)師們更愿意自己設(shè)計(jì)專用集成電路(ASIC)芯片,而且希望ASIC的設(shè)計(jì)周期盡可能短,最好是在實(shí)驗(yàn)室里就能設(shè)計(jì)出合適的ASIC芯片,并且立即投入實(shí)際應(yīng)用之中,因而出現(xiàn)了現(xiàn)場(chǎng)可編程邏輯器件(FPLD),其中應(yīng)用最廣泛的當(dāng)屬現(xiàn)場(chǎng)可編程門陣列(FPGA)和復(fù)雜可編程邏輯器件(CPLD)。在許多儀器儀表中都用到鬧鐘定時(shí),目前通常是采
9、用專用的數(shù)字鬧鐘芯片,但是這種芯片功能固定,不利于嵌入式應(yīng)用。而且,在儀器儀表的許多應(yīng)用場(chǎng)合已經(jīng)采用了FPGA可編程芯片。這樣一來,為我們?cè)谑褂糜布臻g的FPGA器件中在嵌入一個(gè)計(jì)時(shí)鬧鐘提供了極大的方便,而且不會(huì)增加成本,并可以使系統(tǒng)結(jié)構(gòu)更加簡(jiǎn)單,體積更小,成本更低,具有更好的嵌入式和可移植特性。1.2鬧鐘系統(tǒng)發(fā)展概述六十年代末,七十年代初帶鬧鐘的電子鐘表已悄悄在起步,因?yàn)榭陀^存在成本低,精度高,顯示直觀方便(不用上發(fā)條)的優(yōu)點(diǎn)沖擊了傳統(tǒng)機(jī)械表的統(tǒng)治地位。到底90年代初基本壟斷了鐘表市場(chǎng)。而隨著時(shí)代的發(fā)展,在生產(chǎn)生活中對(duì)計(jì)時(shí)工具的要求也逐漸增高,高效節(jié)能理念的深入人心,功耗大開發(fā)周期長(zhǎng)的傳統(tǒng)電
10、子表已經(jīng)顯然不適合時(shí)代的要求。20世紀(jì)末數(shù)字電子技術(shù)得到飛速發(fā)展,數(shù)字電子技術(shù)的應(yīng)用已經(jīng)滲透到人類生活的各個(gè)方面。從計(jì)算機(jī)到手機(jī),從數(shù)字電視到數(shù)字電話,從家用電器到軍用設(shè)備,從自動(dòng)化到航天技術(shù)都廣泛的采用了數(shù)字電子技術(shù)?,F(xiàn)代電子設(shè)計(jì)技術(shù)的核心是EDA技術(shù)。EDA技術(shù)就是領(lǐng)先功能強(qiáng)大的電子計(jì)算機(jī),在EDA工具軟件平臺(tái)上,對(duì)硬件描述語言HDL(Hardware Description Language)為系統(tǒng)邏輯描述手段完成的設(shè)計(jì)文件,自動(dòng)的邏輯編譯、化簡(jiǎn)、分割、綜合、優(yōu)化和仿真直到下載到可編程邏輯器件CPLD/FPGA或?qū)S眉呻娐稟SIC芯片中,實(shí)現(xiàn)既定的電子電路設(shè)計(jì)功能。EDA技術(shù)使得電子鬧
11、鐘設(shè)計(jì)工作僅限于利用硬件描述語言和EDA軟件平臺(tái)完成對(duì)系統(tǒng)硬件功能的實(shí)現(xiàn),極大地提高設(shè)計(jì)效率,縮短了設(shè)計(jì)周期,節(jié)省設(shè)計(jì)成本。本設(shè)計(jì)就是運(yùn)用EDA技術(shù),根據(jù)鬧鐘要實(shí)現(xiàn)的功能:計(jì)時(shí)功能、鬧鐘功能、設(shè)置新的計(jì)時(shí)器時(shí)間、設(shè)置新的鬧鐘時(shí)間、顯示所設(shè)置的鬧鐘。采用高層硬件描述語言VHDL進(jìn)行設(shè)計(jì)。首先程序文本輸入,處理(編譯、檢查、邏輯優(yōu)化與綜合。適配、分割、布局、布線、生成編程數(shù)據(jù)文件),然后進(jìn)行功能仿真和時(shí)序仿真,最后下載到FPGA器件中并進(jìn)行功能測(cè)試,進(jìn)行輸入操作、查處輸入結(jié)果驗(yàn)證設(shè)計(jì)電路。2 FPGA簡(jiǎn)介2.1 FPGA簡(jiǎn)述FPGA(FieldProgrammable Gate Array),即現(xiàn)
12、場(chǎng)可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。2.2 FPGA工作原理FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個(gè)概念,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個(gè)部分。 現(xiàn)場(chǎng)可編程門陣列(FPGA)是可編程器件,與傳統(tǒng)邏輯電路和門陣列(如PAL,GAL及CPL
13、D器件)相比,F(xiàn)PGA具有不同的結(jié)構(gòu)。FPGA利用小型查找表(161RAM)來實(shí)現(xiàn)組合邏輯,每個(gè)查找表連接到一個(gè)D觸發(fā)器的輸入端,觸發(fā)器再來驅(qū)動(dòng)其他邏輯電路或驅(qū)動(dòng)I/O,由此構(gòu)成了既可實(shí)現(xiàn)組合邏輯功能又可實(shí)現(xiàn)時(shí)序邏輯功能的基本邏輯單元模塊,這些模塊間利用金屬連線互相連接或連接到I/O模塊。FPGA的邏輯是通過向內(nèi)部靜態(tài)存儲(chǔ)單元加載編程數(shù)據(jù)來實(shí)現(xiàn)的,存儲(chǔ)在存儲(chǔ)器單元中的值決定了邏輯單元的邏輯功能以及各模塊之間或模塊與I/O間的聯(lián)接方式,并最終決定了FPGA所能實(shí)現(xiàn)的功能,F(xiàn)PGA允許無限次的編程。2.3 FPGA的基本結(jié)構(gòu)FPGA具有掩膜可編程門陣列的通用結(jié)構(gòu),它由邏輯功能塊排成陣列,并由可編程
14、的互連資源連接這些邏輯功能塊來實(shí)現(xiàn)不同的設(shè)計(jì)。FPGA一般由3種可編程電路和一個(gè)用于存放編程數(shù)據(jù)的靜態(tài)存儲(chǔ)器SRAM組成。這3種可編程電路是:可編程邏輯模塊(CLB-Configurable Logic Block)、輸入/輸出模塊(IOB-I/O Block)和互連資源(IRInterconnect Resource)??删幊踢壿嬆KCLB是實(shí)現(xiàn)邏輯功能的基本單元,它們通常規(guī)則的排列成一個(gè)陣列,散布于整個(gè)芯片;可編程輸入/輸出模塊(IOB)主要完成芯片上的邏輯與外部封裝腳的接口,它通常排列在芯片的四周;可編程互連資源包括各種長(zhǎng)度的連接線段和一些可編程連接開關(guān),它們將各個(gè)CLB之間或CLB、I
15、OB之間以及IOB之間連接起來,構(gòu)成特定功能的電路。1.CLB是FPGA的主要組成部分。圖2是CLB基本結(jié)構(gòu)框圖,它主要由邏輯函數(shù)發(fā)生器、觸發(fā)器、數(shù)據(jù)選擇器等電路組成。CLB中3個(gè)邏輯函數(shù)發(fā)生器分別是G、F和H,相應(yīng)的輸出是G 、F和H。G有4個(gè)輸入變量G1、G2、G3和G4;F也有4個(gè)輸入變量F1、F2、F3和F4。這兩個(gè)函數(shù)發(fā)生器是完全獨(dú)立的,均可以實(shí)現(xiàn)4輸入變量的任意組合邏輯函數(shù)。邏輯函數(shù)發(fā)生器H有3個(gè)輸入信號(hào);前兩個(gè)是函數(shù)發(fā)生器的輸出G和F,而另一個(gè)輸入信號(hào)是來自信號(hào)變換電路的輸出H1。這個(gè)函數(shù)發(fā)生器能實(shí)現(xiàn)3輸入變量的各種組合函數(shù)。這3個(gè)函數(shù)發(fā)生器結(jié)合起來,可實(shí)現(xiàn)多達(dá)9變量的邏輯函數(shù)。
16、CLBCLBCLBCLBCLBBCLBCLBCLBCLBCLBCLBCLBCLBBCLBCLBCLB可編程開關(guān)矩輸入輸出模塊互連資源圖1 CLB基本結(jié)構(gòu)CLB中有許多不同規(guī)格的數(shù)據(jù)選擇器(四選一、二選一等),通過對(duì)CLB內(nèi)部數(shù)據(jù)選擇器的編程,邏輯函數(shù)發(fā)生器G、F和H的輸出可以連接到CLB輸出端X或Y,并用來選擇觸發(fā)器的激勵(lì)輸入信號(hào)、時(shí)鐘有效邊沿、時(shí)鐘使能信號(hào)以及輸出信號(hào)。這些數(shù)據(jù)選擇器的地址控制信號(hào)均由編程信息提供,從而實(shí)現(xiàn)所需的電路結(jié)構(gòu)。CLB中的邏輯函數(shù)發(fā)生器F和G均為查找表結(jié)構(gòu),其工作原理類似于ROM。F和G的輸入等效于ROM的地址碼,通過查找ROM中的地址表可以得到相應(yīng)的組合邏輯函數(shù)輸
17、出。另一方面,邏輯函數(shù)發(fā)生器F和G還可以作為器件內(nèi)高速RAM或小的可讀寫存儲(chǔ)器使用,它由信號(hào)變換電路控制。2.輸入/輸出模塊IOB。IOB提供了器件引腳和內(nèi)部邏輯陣列之間的連接。它主要由輸入觸發(fā)器、輸入緩沖器和輸出觸發(fā)/鎖存器、輸出緩沖器組成。每個(gè)IOB控制一個(gè)引腳,它們可被配置為輸入、輸出或雙向I/O功能。當(dāng)IOB控制的引腳被定義為輸入時(shí),通過該引腳的輸入信號(hào)先送入輸入緩沖器。緩沖器的輸出分成兩路:一路可以直接送到MUX,另一路經(jīng)延時(shí)幾納秒(或者不延時(shí))送到輸入通路D觸發(fā)器,再送到數(shù)據(jù)選擇器。通過編程給數(shù)據(jù)選擇器不同的控制信息,確定送至CLB陣列的I1和I2是來自輸入緩沖器,還是來自觸發(fā)器。
18、當(dāng)IOB控制的引腳被定義為輸出時(shí),CLB陣列的輸出信號(hào)OUT也可以有兩條傳輸途徑:一條是直接經(jīng)MUX送至輸出緩沖器,另一條是先存入輸出通路D觸發(fā)器,再送至輸出緩沖器。IOB輸出端配有兩只MOS管,它們的柵極均可編程,使MOS管導(dǎo)通或截止,分別經(jīng)上拉電阻接通Vcc、地線或者不接通,用以改善輸出波形和負(fù)載能力。3. 可編程互連資源IR??删幊袒ミB資源IR可以將FPGA內(nèi)部的CLB和CLB之間、CLB和IOB之間連接起來,構(gòu)成各種具有復(fù)雜功能的系統(tǒng)。IR主要由許多金屬線段構(gòu)成,這些金屬線段帶有可編程開關(guān),通過自動(dòng)布線實(shí)現(xiàn)各種電路的連接。2.4 FPGA系統(tǒng)設(shè)計(jì)流程一般說來,一個(gè)比較大的完整的項(xiàng)目應(yīng)該
19、采用層次化的描述方法:分為幾個(gè)較大的模塊,定義好各功能模塊之間的接口,然后各個(gè)模塊再細(xì)分去具體實(shí)現(xiàn),這就是TOP DOWN(自頂向下)的設(shè)計(jì)方法。目前這種高層次的設(shè)計(jì)方法已被廣泛采用。高層次設(shè)計(jì)只是定義系統(tǒng)的行為特征,可以不涉及實(shí)現(xiàn)工藝,因此還可以在廠家綜合庫(kù)的支持下,利用綜合優(yōu)化工具將高層次描述轉(zhuǎn)換成針對(duì)某種工藝優(yōu)化的網(wǎng)絡(luò)表,工藝轉(zhuǎn)換變得輕而易舉。CPLD/FPGA系統(tǒng)的工作流程如圖2所示。圖2 FPGA設(shè)計(jì)流程3主要模塊設(shè)計(jì)3.1分頻模塊分頻的關(guān)鍵在于設(shè)置不同進(jìn)位規(guī)則的計(jì)數(shù)器。模塊開始定義了count1、count2、count3、count4位寬不同的寄存器,分別用于四種輸出信號(hào)的計(jì)數(shù)。
20、以1s信號(hào)輸出為例,在always引導(dǎo)的過程語句中設(shè)置了negedge clk條件,即當(dāng)時(shí)鐘下降沿到來時(shí)執(zhí)行always塊中的語句,即count1計(jì)數(shù)器加1,然后通過if語句判斷count1是否到達(dá)24d12582912,即是否達(dá)到0.5s。若達(dá)到則清零計(jì)數(shù)器并將sec_1取反。通過上述過程便實(shí)現(xiàn)了將24Mz信號(hào)分頻成1Hz秒信號(hào)的目的。另外三種信號(hào)的產(chǎn)生機(jī)制與秒信號(hào)一樣,只是改變了計(jì)數(shù)器的范圍。3.1.1分頻模塊源代碼分頻模塊源代碼如下:module fenpin (clk,rst_n,en_1s,en_1ms); /產(chǎn)生1s,1ms的分頻input clk; /FPGA晶振50Mhzinp
21、ut rst_n;output en_1s;output en_1ms;reg31:0 jishu_1s;reg15:0 jishu_1ms;parameter cnt_1s =49999999; parameter cnt_1ms =49999; always(posedge clk or negedge rst_n) begin if(!rst_n) jishu_1s=32b0;else if(jishu_1scnt_1s) jishu_1s=jishu_1s+1b1;else jishu_1s=32b0; endalways(posedge clk or negedge rst_n) b
22、egin if(!rst_n) jishu_1ms=16b0;else if(jishu_1mscnt_1ms) jishu_1ms=jishu_1ms+1b1;else jishu_1ms=16b0; end assign en_1s=(jishu_1s=cnt_1s)? 1b1 : 1b0; /1sassign en_1ms=(jishu_1ms=cnt_1ms)? 1b1 : 1b0; /1msendmodule 3.1.2 分頻模塊仿真分頻模塊的RTL視圖如圖4所示,可以看出輸出端en_1ms與en_1s與輸入端clk和rst_n的邏輯關(guān)系。圖4 分頻模塊的RTL視圖1ms時(shí)鐘信號(hào)的輸
23、出,如圖5所示,相鄰脈沖之間相隔1ms。圖5 1ms時(shí)鐘信號(hào)的仿真1s時(shí)鐘信號(hào)的輸出,如圖6所示,相鄰脈沖之間相隔1s。圖6 1s時(shí)鐘信號(hào)的仿真3.2 按鍵模塊本設(shè)計(jì)的按鍵模塊主要作用是校時(shí)作用,可以調(diào)整時(shí)間與鬧鐘時(shí)間,同時(shí)作為時(shí)間模式與鬧鐘模式的切換。本模塊用于當(dāng)有按鍵按下時(shí),采用軟件消抖的辦法去除按鍵抖動(dòng)。模塊的實(shí)現(xiàn)方法是先判斷是否有按鍵按下,如有按鍵按下則延時(shí)一段時(shí)間,待抖動(dòng)過去之后再讀行線狀態(tài),如果仍有低電平行線,則確定有按鍵按下,然后產(chǎn)生一個(gè)有按鍵按下的信號(hào)。該模塊有一個(gè)時(shí)鐘輸入端口,輸入時(shí)鐘信號(hào)是分頻出來的50MHZ的時(shí)鐘;有一個(gè)輸入端口與行線相連,用于輸入行線狀態(tài);一個(gè)輸出端口,
24、用于輸出有按鍵按下的信號(hào)。3.2.1 按鍵模塊源代碼按鍵模塊的部分源代碼如下(以一個(gè)按鍵為例):module /按鍵控制部分anjian(clk,rst_n,key1,key2,key1_low,key2_low,key3,key3_low);input clk;input rst_n;input key1; / 分加input key2; / 分減input key3; / 界面選擇output key1_low; /按鍵按下消抖后的標(biāo)志位output key2_low;output key3_low;reg reg0_key; /key1消抖reg reg1_key;reg reg2_ke
25、y; /key2消抖reg reg3_key;reg reg4_key; /key3消抖reg reg5_key;always (posedge clk or negedge rst_n) begin if(!rst_n) begin reg0_key = 1b1; reg1_key = 1b1; end else begin reg0_key = key1; reg1_key = reg0_key; /根據(jù)非阻塞賦值的原理,reg1_key 存儲(chǔ)的值是reg0_key 上一個(gè)時(shí)鐘的值 end end /脈沖邊沿檢測(cè)法,當(dāng)寄存器 key1 由 1 變?yōu)?0 時(shí),key1_an 的值變?yōu)楦?,維持
26、一個(gè)時(shí)鐘周期 wire key1_an; assign key1_an = reg1_key & ( reg0_key); always (posedge clk or negedge rst_n) begin if(!rst_n) begin reg2_key = 1b1; reg3_key = 1b1; end else begin reg2_key = key2; reg3_key = reg2_key; end endreg19:0 cnt_key1; /計(jì)數(shù)寄存器 always (posedge clk or negedge rst_n) begin if (!rst_n) cnt_
27、key1 = 20d0; /異步復(fù)位 else if(key1_an) cnt_key1 =20d0; /led1_an=1,按鍵確認(rèn)按下,cnt_key1從0開始計(jì)數(shù) else cnt_key1 = cnt_key1 + 1b1; end /以下為消抖程序 reg reg_low; reg reg1_low; always (posedge clk or negedge rst_n) begin if (!rst_n) begin reg_low = 1b1; end else if(cnt_key1 = 20hfffff) /時(shí)鐘50mhz的話大約計(jì)時(shí)是20ms begin reg_low
28、 = key1; /led_an=1,按鍵確認(rèn)按下,cnt_key從0開始計(jì)數(shù),這時(shí)候還有消抖動(dòng),計(jì)數(shù)20ms后抖動(dòng)濾除了此時(shí)再鎖存一下key1的值 end /這時(shí)key1的值就穩(wěn)定了 end always (posedge clk or negedge rst_n) begin if (!rst_n) reg1_low = 1b1; else reg1_low = reg_low; end assign key1_low = reg1_low & ( reg_low); /當(dāng)寄存器 reg_low 由 1 變?yōu)?0 時(shí),key_low 的值變?yōu)楦?,維持一個(gè)時(shí)鐘周期/以一個(gè)按鍵為例,省略其余兩
29、個(gè)按鍵endmodule3.2.2 按鍵模塊仿真 按鍵模塊的RTL視圖如圖7所示,可以看出輸出端Key1_low、Key2_low、Key3_low與輸入端Key1和Key2、 Key3、clk、rst_n的邏輯關(guān)系。圖7 按鍵模塊的RTL視圖3.3 時(shí)間模塊時(shí)間模塊的作用是:利用分頻模塊產(chǎn)生的精確的秒時(shí)鐘信號(hào),給時(shí)鐘秒位計(jì)時(shí),設(shè)置好時(shí)分秒的進(jìn)位;利用按鍵模塊的控制,給時(shí)鐘校時(shí),給鬧鐘設(shè)置時(shí)間。3.3.1 時(shí)間模塊源代碼按鍵模塊的部分源代碼如下:/時(shí)、分、秒module shijian(clk,rst_n,en_1s,key1_low,key2_low,key3_low,shi,fen,mia
30、o,nao_shi,nao_fen,nao_miao,moshi);input clk;input rst_n;input en_1s;input key1_low;input key2_low;input key3_low;output5:0 shi;output5:0 fen;output5:0 miao;output5:0 nao_shi;output5:0 nao_fen;output5:0 nao_miao;output reg1:0 moshi ;/0時(shí)顯示時(shí)間 1時(shí)顯示鬧鐘reg 5:0 shi;reg 5:0 fen;reg 5:0 miao;reg 5:0 nao_shi;r
31、eg 5:0 nao_fen;reg 5:0 nao_miao;always(posedge clk or negedge rst_n)/key3按鍵選擇模式 begin if(!rst_n)begin moshi=1b0;endelse if(key3_low)beginmoshi=moshi+1b1;endendalways(posedge clk or negedge rst_n) begin if(!rst_n) begin shi=6b000001; /1 fen=6b011000; /24 miao=6b0; /0 nao_shi=6b000001; /1 nao_fen=6b01
32、1110; /30 nao_miao=6b010100; /20 endelse if(en_1s) begin miao=miao+1b1; if(miao=60) begin miao=0; fen=fen+1b1; if(fen=60) begin fen=0; shi=shi+1b1; if(shi=24) shi=0; end end endelse if(!moshi&key1_low)/時(shí)間模式下 按加鍵 begin fen=fen+1b1; if(fen=60) begin fen=0; shi=shi+1b1; if(shi=24) shi=0; end endelse if
33、(!moshi&key2_low)/時(shí)間模式下 按減鍵 begin fen=fen-1b1; if(fen=0) begin shi=shi-1b1; fen=59; end endelse if(moshi&key1_low)/時(shí)間模式下 按加鍵 begin nao_fen=nao_fen+1b1; if(nao_fen=60) begin nao_fen=0; nao_shi=nao_shi+1b1; if(shi=24) shi=0; end end else if(moshi&key2_low)/鬧鐘模式下 按減鍵 begin nao_fen=nao_fen-1b1; if(nao_f
34、en=0) begin nao_shi=nao_shi-1b1; nao_fen=59; end end else begin shi=shi; fen=fen; miao=miao; nao_shi=nao_shi; nao_fen=nao_fen; nao_miao=nao_miao; endendendmodule3.3.2 時(shí)間模塊仿真時(shí)間模塊的RTL視圖如圖8所示,可以看出輸出端shi、fen、miao、nao_shi、nao_fen、mao_miao與輸入端Key1_low和Key2_low、Key3_low、en_1s、rst_n的邏輯關(guān)系。圖8 時(shí)間模塊的RTL視圖仿真了時(shí)鐘,
35、仿真波形圖如圖9、圖10所示,仿真圖滿足設(shè)計(jì)的要求。分計(jì)數(shù)和時(shí)計(jì)數(shù)模塊的設(shè)計(jì)原理與秒模塊的類似。圖9 秒時(shí)鐘仿真波形圖10 計(jì)時(shí)模塊仿真3.4 顯示模塊顯示模塊的作用是:在8位數(shù)碼管上顯示時(shí)間模塊輸出的時(shí)間和鬧鐘信號(hào),通過按鍵可以切換顯示時(shí)間和鬧鐘。具體原理是采用動(dòng)態(tài)掃描的方法,動(dòng)態(tài)掃描電路將計(jì)數(shù)器輸出的8421BCD碼轉(zhuǎn)換為數(shù)碼管需要的邏輯狀態(tài),并且輸出數(shù)碼管的片選信號(hào)和位選信號(hào)。所謂動(dòng)態(tài)掃描顯示方式是在顯示某一位LED顯示塊的數(shù)據(jù)的時(shí)候,讓其它位不顯示,然后在顯示下一位的數(shù)據(jù),同時(shí)關(guān)閉其他顯示塊。這樣做可以使每一個(gè)顯示塊顯示與自己相對(duì)應(yīng)的數(shù)據(jù)。只要保證每一位顯示的時(shí)間間隔不要太大,利用人眼
36、的視覺暫留的現(xiàn)象,就可以造成各位數(shù)據(jù)同時(shí)顯示的假象。一般每一位的顯示時(shí)間為110ms。3.4.1 顯示模塊源代碼顯示模塊的部分源代碼如下:(以顯示秒為例)module xianshi(clk,rst_n,en_1ms,shi,fen,miao,led_bit,dataout,moshi,nao_shi,nao_fen,nao_miao);input clk;input rst_n;input en_1ms;input5:0 shi;input5:0 fen;input5:0 miao;input5:0 nao_shi;input5:0 nao_fen;input5:0 nao_miao;inp
37、ut1:0 moshi;output2:0 led_bit; /位選output7:0 dataout; /段選/數(shù)碼管顯示 09 對(duì)應(yīng)段選輸出parameter num0 = 8b11000000, num1 = 8b11111001, num2 = 8b10100100, num3 = 8b10110000, num4 = 8b10011001, num5 = 8b10010010, num6 = 8b10000010, num7 = 8b11111000, num8 = 8b10000000, num9 = 8b10010000;reg3:0 shi1,shi2,fen1,fen2,mi
38、ao1,miao2;reg3:0 nao_shi1,nao_shi2,nao_fen1,nao_fen2,nao_miao1,nao_miao2; reg2:0 led_bit; /位選reg7:0 dataout; /段選reg2:0 state; /狀態(tài)寄存器always(posedge clk or negedge rst_n) if(!rst_n) begin state=3b0; end else if(en_1ms) begin state=state+1b1; shi1=shi/10; shi2=shi%10; fen1=fen/10; fen2=fen%10; miao1=mi
39、ao/10; miao2=miao%10; nao_shi1=nao_shi/10; nao_shi2=nao_shi%10; nao_fen1=nao_fen/10; nao_fen2=nao_fen%10; nao_miao1=nao_miao/10; nao_miao2=nao_miao%10; if(state=3b000) beginled_bit=3b101;if(!moshi)begincase(miao2) 0: dataout=num0; 1: dataout=num1; 2: dataout=num2; 3: dataout=num3; 4: dataout=num4; 5
40、: dataout=num5; 6: dataout=num6; 7: dataout=num7; 8: dataout=num8; 9: dataout=num9; default :dataout=num0; endcase endelse if(moshi)begincase(nao_miao2) 0: dataout=num0; 1: dataout=num1; 2: dataout=num2; 3: dataout=num3; 4: dataout=num4; 5: dataout=num5; 6: dataout=num6; 7: dataout=num7; 8: dataout=
41、num8; 9: dataout=num9; default :dataout=num0; endcase end end else if(state=3b001) beginled_bit=3b100;if(!moshi)begincase(miao1) 0: dataout=num0; 1: dataout=num1; 2: dataout=num2; 3: dataout=num3; 4: dataout=num4; 5: dataout=num5; default :dataout=num0; endcase endif(moshi)begincase(nao_miao1) 0: da
42、taout=num0; 1: dataout=num1; 2: dataout=num2; 3: dataout=num3; 4: dataout=num4; 5: dataout=num5; default :dataout=num0; endcase end endend/以顯示秒為例,時(shí)與分的省略Endmodule3.4.1 顯示模塊仿真顯示模塊的RTL視圖如圖11所示,可以看出輸出端控制數(shù)碼管的8位段選和3為位選與輸入端時(shí)間信號(hào)和鬧鐘信號(hào)的邏輯關(guān)系。圖11 顯示模塊的RTL視圖3.5 鬧鐘模塊鬧鐘模塊的作用是:當(dāng)時(shí)間與鬧鐘時(shí)間相同時(shí),鬧鐘模塊根據(jù)分頻模塊得出的en_1ms驅(qū)動(dòng)蜂鳴器發(fā)出
43、聲響。3.5.1 鬧鐘模塊源代碼鬧鐘模塊的源代碼如下:module naozhong(clk,en_1ms,beep,shi,fen,miao,nao_shi,nao_fen,nao_miao);input clk,en_1ms;/clk作為時(shí)鐘信號(hào),en_1ms作為發(fā)聲信號(hào)input5:0 shi; input5:0 fen; input5:0 miao;input5:0 nao_shi; input5:0 nao_fen; input5:0 nao_miao;output reg beep;/作為發(fā)聲輸出信號(hào)接揚(yáng)聲器reg bep; initial beginbeep=1;bep=0;en
44、dalways (posedge clk)begin if(nao_shi=shi & nao_fen=fen & nao_miaomiao )bep=1b1;else bep=0;endalways (bep)beginif(bep=1b1)beginbeep=en_1ms;endelse beep=1;endendmodule3.5.2 鬧鐘模塊仿真鬧鐘模塊的RTL視圖如圖12所示,可以看出當(dāng)輸出端時(shí)間信號(hào)大于等于鬧鐘信號(hào)時(shí),蜂鳴器開始工作。圖12 鬧鐘模塊的RTL視圖3.6 頂層模塊頂層模塊的作用是:例化各模塊,建立分頻模塊、時(shí)間模塊、按鍵模塊、顯示模塊、鬧鐘模塊的聯(lián)系。3.6.1 頂層
45、模塊源代碼頂層模塊的源代碼如下:module shuzizhong(clk,rst_n,key1,key2,key3,led_bit,dataout,beep);input clk;input rst_n;input key1;/加input key2;/減input key3;/模式按鍵output2:0 led_bit;output7:0 dataout;output beep;wire en_1s;wire en_1ms;wire5:0 shi;wire5:0 fen; wire5:0 miao;wire5:0 nao_shi;wire5:0 nao_fen; wire5:0 nao_miao;wire key1_low,key2_low,key3_low;wire1:0 moshi;fenpin fenpin_int(.clk(clk), .rst_n(rst_n), .en_1s(en_1s), .en_1ms(en_1ms) ); anjian anjian_int(.clk(clk), .rst_n(rst_n),.key1(key1),.key2(key2),.key3(key3),.key1_low(key1_low),.key2_low(key2_low),.key3_low(key3_low);shijian shijian_int(.clk
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度高空作業(yè)安全生產(chǎn)施工合同集2篇
- 二零二五年度綠色環(huán)保木工支模項(xiàng)目合同4篇
- 2025版木箱紙箱包裝設(shè)計(jì)創(chuàng)新與市場(chǎng)推廣合同4篇
- 2025年度個(gè)人購(gòu)房合同產(chǎn)權(quán)轉(zhuǎn)移登記流程4篇
- 危險(xiǎn)品運(yùn)輸車輛駕駛員崗前培訓(xùn)考核試卷
- 2025版二零二五年度現(xiàn)代木工清工分包合同模板4篇
- 【新課標(biāo)Ⅲ卷】高三第二次全國(guó)大聯(lián)考語文試卷(含答案)
- 愛學(xué)習(xí)有自信幼兒舞蹈創(chuàng)編15課件講解
- 2025年專業(yè)期刊發(fā)行協(xié)議
- 2025年合伙勞動(dòng)分工協(xié)議
- 2024公路瀝青路面結(jié)構(gòu)內(nèi)部狀況三維探地雷達(dá)快速檢測(cè)規(guī)程
- 2024年高考真題-地理(河北卷) 含答案
- 2024光儲(chǔ)充一體化系統(tǒng)解決方案
- 處理后事授權(quán)委托書
- 食材配送服務(wù)方案投標(biāo)方案(技術(shù)方案)
- 足療店?duì)I銷策劃方案
- 封條(標(biāo)準(zhǔn)A4打印封條)
- 2024年北京控股集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 延遲交稿申請(qǐng)英文
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第十章動(dòng)作技能的指導(dǎo)與示范
- 石油天然氣建設(shè)工程交工技術(shù)文件編制規(guī)范(SYT68822023年)交工技術(shù)文件表格儀表自動(dòng)化安裝工程
評(píng)論
0/150
提交評(píng)論