基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)論文部分_第1頁(yè)
基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)論文部分_第2頁(yè)
基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)論文部分_第3頁(yè)
基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)論文部分_第4頁(yè)
基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)論文部分_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

畢業(yè)設(shè)計(jì)(論文)PAGEI摘要本設(shè)計(jì)為一個(gè)多功能的數(shù)字鐘,具有年、月、日、時(shí)、分、秒計(jì)數(shù)顯示功能,以24小時(shí)循環(huán)計(jì)數(shù);具有校對(duì)功能以及整點(diǎn)報(bào)時(shí)功能。本設(shè)計(jì)采用EDA技術(shù),以硬件描述語(yǔ)言VHDL為系統(tǒng)邏輯描述手段設(shè)計(jì)文件,在MaxplusII工具軟件環(huán)境下,采用自頂向下的設(shè)計(jì)方法,由各個(gè)基本模塊共同構(gòu)建了一個(gè)基于FPGA的數(shù)字鐘。系統(tǒng)主芯片采用EP1K100QC208-3,由時(shí)鐘模塊、控制模塊、計(jì)時(shí)模塊、數(shù)據(jù)譯碼模塊、顯示以及報(bào)時(shí)模塊組成。經(jīng)編譯和仿真所設(shè)計(jì)的程序,在可編程邏輯器件上下載驗(yàn)證,本系統(tǒng)能夠完成年、月、日和時(shí)、分、秒的分別顯示,由按鍵輸入進(jìn)行數(shù)字鐘的校時(shí)、清零、啟停功能。關(guān)鍵詞:數(shù)字鐘;硬件描述語(yǔ)言;VHDL;FPGA;鍵盤(pán)接口PAGEPAGE31ABSTRACTThedesignforamulti-functionaldigitalclock,withayear,month,day,hours,minutesandsecondscountdisplaytoa24-hourcyclecount;haveprooffunctionsandthewholepointtimekeepingfunction.TheuseofEDAdesigntechnology,hardware-descriptionlanguageVHDLdescriptionlogicmeansforthesystemdesigndocuments,inMaxplusIItoolsenvironment,atop-downdesign,bythevariousmodulestogetherbuildaFPGA-baseddigitalclock.ThemainsystemchipsusedEP1K100QC208-3,makeupoftheclockmodule,controlmodule,timemodule,datadecodingmodule,displayandbroadcastmodule.Aftercompilingthedesignandsimulationprocedures,theprogrammablelogicdevicetodownloadverification,thesystemcancompletetheyear,month,dayandthehours,minutesandsecondsrespectively,usingkeystomodify,cleared,startandstopthedigitalclock.Keywords:digitalclock;hardwaredescriptionlanguage;VHDL;FPGA;keyboardinterface目錄TOC\o"1-3"\u第1章緒論 31.1選題背景 31.1.1課題相關(guān)技術(shù)的發(fā)展 31.1.2課題研究的必要性 41.2課題研究的內(nèi)容 4第2章FPGA簡(jiǎn)介 52.1FPGA概述 52.2FPGA基本結(jié)構(gòu) 52.3FPGA系統(tǒng)設(shè)計(jì)流程 72.4FPGA開(kāi)發(fā)編程原理 8第3章數(shù)字鐘總體設(shè)計(jì)方案 103.1數(shù)字鐘的構(gòu)成 103.2數(shù)字鐘的工作原理 11第4章單元電路設(shè)計(jì) 124.1分頻模塊電路設(shè)計(jì)與實(shí)現(xiàn) 124.2校時(shí)控制模塊電路設(shè)計(jì)與實(shí)現(xiàn) 134.2.1鍵盤(pán)接口電路原理 134.2.2鍵盤(pán)接口的VHDL描述 144.3計(jì)數(shù)模塊設(shè)計(jì)與實(shí)現(xiàn) 194.3.1秒計(jì)數(shù)模塊 194.3.2日計(jì)數(shù)模塊 214.3.3月計(jì)數(shù)和年計(jì)數(shù)模塊 244.4動(dòng)態(tài)掃描及顯示電路設(shè)計(jì)與實(shí)現(xiàn) 254.4.1動(dòng)態(tài)掃描模塊 254.4.2顯示模塊 26第5章設(shè)計(jì)結(jié)論與研究展望 275.1設(shè)計(jì)結(jié)論 275.2研究展望 27致謝 29附錄 30參考文獻(xiàn) 34第1章緒論現(xiàn)代社會(huì)的標(biāo)志之一就是信息產(chǎn)品的廣泛使用,而且是產(chǎn)品的性能越來(lái)越強(qiáng),復(fù)雜程度越來(lái)越高,更新步伐越來(lái)越快。支撐信息電子產(chǎn)品高速發(fā)展的基礎(chǔ)就是微電子制造工藝水平的提高和電子產(chǎn)品設(shè)計(jì)開(kāi)發(fā)技術(shù)的發(fā)展。前者以微細(xì)加工技術(shù)為代表,而后者的代表就是電子設(shè)計(jì)自動(dòng)化(electronicdesignautomatic,EDA)技術(shù)。本設(shè)計(jì)采用的VHDL是一種全方位的硬件描述語(yǔ)言,具有極強(qiáng)的描述能力,能支持系統(tǒng)行為級(jí)、寄存器傳輸級(jí)和邏輯門(mén)級(jí)三個(gè)不同層次的設(shè)計(jì);支持結(jié)構(gòu)、數(shù)據(jù)流、行為三種描述形式的混合描述、覆蓋面廣、抽象能力強(qiáng),因此在實(shí)際應(yīng)用中越來(lái)越廣泛。ASIC是專(zhuān)用的系統(tǒng)集成電路,是一種帶有邏輯處理的加速處理器。而FPGA是特殊的ASIC芯片,與其他的ASIC芯片相比,它具有設(shè)計(jì)開(kāi)發(fā)周期短、設(shè)計(jì)制造成本低、開(kāi)發(fā)工具先進(jìn)、標(biāo)準(zhǔn)產(chǎn)品無(wú)需測(cè)試、質(zhì)量穩(wěn)定以及可實(shí)時(shí)在線檢測(cè)等優(yōu)點(diǎn)。在控制系統(tǒng)中,鍵盤(pán)是常用的人機(jī)交換接口,當(dāng)所設(shè)置的功能鍵或數(shù)字鍵按下的時(shí)候,系統(tǒng)應(yīng)該完成該鍵所設(shè)置的功能。因此,鍵信息輸入是與軟件結(jié)構(gòu)密切相關(guān)的過(guò)程。根據(jù)鍵盤(pán)的結(jié)構(gòu)不同,采用不同的編碼方法。但無(wú)論有無(wú)編碼以及采用什么樣的編碼,最后都要轉(zhuǎn)換成為相應(yīng)的鍵值,以實(shí)現(xiàn)按鍵功能程序的轉(zhuǎn)移。鐘表的數(shù)字化給人們生產(chǎn)生活帶來(lái)了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能。諸如定時(shí)自動(dòng)報(bào)警、定時(shí)啟閉電路、定時(shí)開(kāi)關(guān)烘箱、通斷動(dòng)力設(shè)備,甚至各種定時(shí)電氣的自動(dòng)啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非常現(xiàn)實(shí)的意義。1.1選題背景本節(jié)將從FPGA嵌入式應(yīng)用開(kāi)發(fā)技術(shù)與數(shù)字鐘技術(shù)發(fā)展的客觀實(shí)際出發(fā),通過(guò)對(duì)該技術(shù)發(fā)展?fàn)顩r的了解,以及課題本身的需要,指出研究基于FPGA的芯片系統(tǒng)與設(shè)計(jì)——數(shù)字鐘的設(shè)計(jì)與實(shí)現(xiàn)的必要性。1.1.1課題相關(guān)技術(shù)的發(fā)展當(dāng)今電子產(chǎn)品正向功能多元化,體積最小化,功耗最低化的方向發(fā)展。它與傳統(tǒng)的電子產(chǎn)品在設(shè)計(jì)上的顯著區(qū)別師大量使用大規(guī)??删幊踢壿嬈骷?,使產(chǎn)品的性能提高,體積縮小,功耗降低.同時(shí)廣泛運(yùn)用現(xiàn)代計(jì)算機(jī)技術(shù),提高產(chǎn)品的自動(dòng)化程度和競(jìng)爭(zhēng)力,縮短研發(fā)周期。EDA技術(shù)正是為了適應(yīng)現(xiàn)代電子技術(shù)的要求,吸收眾多學(xué)科最新科技成果而形成的一門(mén)新技術(shù)。美國(guó)ALTERA公司的可編程邏輯器件采用全新的結(jié)構(gòu)和先進(jìn)的技術(shù),加上MaxplusII(或最新的QUARTUS)開(kāi)發(fā)環(huán)境,更具有高性能,開(kāi)發(fā)周期短等特點(diǎn),十分方便進(jìn)行電子產(chǎn)品的開(kāi)發(fā)和設(shè)計(jì)。EDA技術(shù),技術(shù)以大規(guī)模可編程邏輯器件為設(shè)計(jì)載體,以硬件描述語(yǔ)言為系統(tǒng)邏輯描述主要表達(dá)方式,以計(jì)算機(jī)、大規(guī)模可編程邏輯器件的開(kāi)發(fā)軟件及實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng)為設(shè)計(jì)工具,通過(guò)有關(guān)的開(kāi)發(fā)軟件,自動(dòng)完成用軟件的方式設(shè)計(jì)的電子系統(tǒng)到硬件系統(tǒng)的邏輯編譯,邏輯化簡(jiǎn),邏輯分割,邏輯映射,編程下載等工作。最終形成集成電子系統(tǒng)或?qū)S眉尚酒囊婚T(mén)新技術(shù)。本設(shè)計(jì)利用VHDL硬件描述語(yǔ)言結(jié)合可編程邏輯器件進(jìn)行的,并通過(guò)數(shù)碼管動(dòng)態(tài)顯示計(jì)時(shí)結(jié)果。數(shù)字鐘可以由各種技術(shù)實(shí)現(xiàn),如單片機(jī)等.利用可編程邏輯器件具有其他方式?jīng)]有的特點(diǎn),它具有易學(xué),方便,新穎,有趣,直觀,設(shè)計(jì)與實(shí)驗(yàn)項(xiàng)目成功率高,理論與實(shí)踐結(jié)合緊密,體積小,容量大,I/O口豐富,易編程和加密等特點(diǎn),并且它還具有開(kāi)放的界面,豐富的設(shè)計(jì)庫(kù),模塊化的工具以及LPM定制等優(yōu)良性能,應(yīng)用非常方便。因此,本設(shè)計(jì)采用可編程邏輯器件實(shí)現(xiàn)。1.1.2課題研究的必要性現(xiàn)在是一個(gè)知識(shí)爆炸的新時(shí)代。新產(chǎn)品、新技術(shù)層出不窮,電子技術(shù)的發(fā)展更是日新月異??梢院敛豢鋸埖恼f(shuō),電子技術(shù)的應(yīng)用無(wú)處不在,電子技術(shù)正在不斷地改變我們的生活,改變著我們的世界。在這快速發(fā)展的年代,時(shí)間對(duì)人們來(lái)說(shuō)是越來(lái)越寶貴,在快節(jié)奏的生活時(shí),人們往往忘記了時(shí)間,一旦遇到重要的事情而忘記了時(shí)間,這將會(huì)帶來(lái)很大的損失。因此我們需要一個(gè)定時(shí)系統(tǒng)來(lái)提醒這些忙碌的人。數(shù)字化的鐘表給人們帶來(lái)了極大的方便。近些年,隨著科技的發(fā)展和社會(huì)的進(jìn)步,人們對(duì)數(shù)字鐘的要求也越來(lái)越高,傳統(tǒng)的時(shí)鐘已不能滿足人們的需求。多功能數(shù)字鐘不管在性能還是在樣式上都發(fā)生了質(zhì)的變化,有電子鬧鐘、數(shù)字鬧鐘等等。1.2課題研究的內(nèi)容本設(shè)計(jì)主要研究基于FPGA的數(shù)字鐘,要求時(shí)間以24小時(shí)為一個(gè)周期,顯示年、月、日、時(shí)、分、秒。具有校時(shí)以及報(bào)時(shí)功能,可以對(duì)年、月、日、時(shí)、分及秒進(jìn)行單獨(dú)校對(duì),使其校正到標(biāo)準(zhǔn)時(shí)間。校對(duì)時(shí)間由4×4矩形鍵盤(pán)進(jìn)行控制,為了保證計(jì)時(shí)的穩(wěn)定及準(zhǔn)確須由晶體振蕩器提供時(shí)間基準(zhǔn)信號(hào)。本設(shè)計(jì)小組成員共有三人:其他兩人分別采用原理圖設(shè)計(jì)和VerilogHDL語(yǔ)言設(shè)計(jì)。第2章FPGA簡(jiǎn)介2.1FPGA概述FPGA是現(xiàn)場(chǎng)可編程門(mén)陣列(FieldProgrammableGateArray)的簡(jiǎn)稱(chēng),與之相應(yīng)的CPLD是復(fù)雜可編程邏輯器件(ComplexProgrammableLogicDevice)的簡(jiǎn)稱(chēng),兩者的功能基本相同,只是實(shí)現(xiàn)原理略有不同,所以有時(shí)可以忽略這兩者的區(qū)別,統(tǒng)稱(chēng)為可編程邏輯器件或CPLD/PGFA。CPLD/PGFA幾乎能完成任何數(shù)字器件的功能,上至高性能CPU,下至簡(jiǎn)單的74電路。它如同一張白紙或是一堆積木,工程師可以通過(guò)傳統(tǒng)的原理圖輸入或硬件描述語(yǔ)言自由的設(shè)計(jì)一個(gè)數(shù)字系統(tǒng)。通過(guò)軟件仿真可以事先驗(yàn)證設(shè)計(jì)的正確性,在PCB完成以后,利用CPLD/FPGA的在線修改功能,隨時(shí)修改設(shè)計(jì)而不必改動(dòng)硬件電路。使用CPLA/FPGA開(kāi)發(fā)數(shù)字電路,可以大大縮短設(shè)計(jì)時(shí)間,減少PCB面積,提高系統(tǒng)的可靠性。這些優(yōu)點(diǎn)使得CPLA/FPGA技術(shù)在20世紀(jì)90年代以后得到飛速的發(fā)展,同時(shí)也大大推動(dòng)了EDA軟件和硬件描述語(yǔ)言HDL的進(jìn)步。2.2FPGA基本結(jié)構(gòu)FPGA具有掩膜可編程門(mén)陣列的通用結(jié)構(gòu),它由邏輯功能塊排成陣列,并由可編程的互連資源連接這些邏輯功能塊來(lái)實(shí)現(xiàn)不同的設(shè)計(jì)。FPGA一般由3種可編程電路和一個(gè)用于存放編程數(shù)據(jù)的靜態(tài)存儲(chǔ)器SRAM組成。這3種可編程電路是:可編程邏輯模塊(CLB--ConfigurableLogicBlock)、輸入/輸出模塊(IOB--I/OBlock)和互連資源(IR—InterconnectResource)??删幊踢壿嬆KCLB是實(shí)現(xiàn)邏輯功能的基本單元,它們通常規(guī)則的排列成一個(gè)陣列,散布于整個(gè)芯片;可編程輸入/輸出模塊(IOB)主要完成芯片上的邏輯與外部封裝腳的接口,它通常排列在芯片的四周;可編程互連資源包括各種長(zhǎng)度的連接線段和一些可編程連接開(kāi)關(guān),它們將各個(gè)CLB之間或CLB、IOB之間以及IOB之間連接起來(lái),構(gòu)成特定功能的電路。1.CLB是FPGA的主要組成部分。圖2-1是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)是來(lái)自信號(hào)變換電路的輸出H1。這個(gè)函數(shù)發(fā)生器能實(shí)現(xiàn)3輸入變量的各種組合函數(shù)。這3個(gè)函數(shù)發(fā)生器結(jié)合起來(lái),可實(shí)現(xiàn)多達(dá)9變量的邏輯函數(shù)。CLB中有許多不同規(guī)格的數(shù)據(jù)選擇器(四選一、二選一等),通過(guò)對(duì)CLB內(nèi)部數(shù)據(jù)選擇器的編程,邏輯函數(shù)發(fā)生器G、F和H的輸出可以連接到CLB輸出端X或Y,并用來(lái)選擇觸發(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),其工作原理類(lèi)似于ROM。F和G的輸入等效于ROM的地址碼,通過(guò)查找ROM中的地址表可以得到相應(yīng)的組合邏輯函數(shù)輸出。另一方面,邏輯函數(shù)發(fā)生器F和G還可以作為器件內(nèi)高速RAM或小的可讀寫(xiě)存儲(chǔ)器使用,它由信號(hào)變換電路控制。2.輸入/輸出模塊IOB。IOB提供了器件引腳和內(nèi)部邏輯陣列之間的連接。它主要由輸入觸發(fā)器、輸入緩沖器和輸出觸發(fā)/鎖存器、輸出緩沖器組成。每個(gè)IOB控制一個(gè)引腳,它們可被配置為輸入、輸出或雙向I/O功能。當(dāng)IOB控制的引腳被定義為輸入時(shí),通過(guò)該引腳的輸入信號(hào)先送入輸入緩沖器。緩沖器的輸出分成兩路:一路可以直接送到MUX,另一路經(jīng)延時(shí)幾納秒(或者不延時(shí))CLCLBCLBCLBCLBCLBBCLBCLBCLBCLBCLBCLBCLBCLBBCLBCLBCLB可編程開(kāi)關(guān)矩輸入輸出模塊互連資源圖2-1CLB基本結(jié)構(gòu)送到輸入通路D觸發(fā)器,再送到數(shù)據(jù)選擇器。通過(guò)編程給數(shù)據(jù)選擇器不同的控制信息,確定送至CLB陣列的I1和I2是來(lái)自輸入緩沖器,還是來(lái)自觸發(fā)器。當(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之間連接起來(lái),構(gòu)成各種具有復(fù)雜功能的系統(tǒng)。IR主要由許多金屬線段構(gòu)成,這些金屬線段帶有可編程開(kāi)關(guān),通過(guò)自動(dòng)布線實(shí)現(xiàn)各種電路的連接。2.3FPGA系統(tǒng)設(shè)計(jì)流程一般說(shuō)來(lái),一個(gè)比較大的完整的項(xiàng)目應(yīng)該采用層次化的描述方法:分為幾個(gè)較大的模塊,定義好各功能模塊之間的接口,然后各個(gè)模塊再細(xì)分去具體實(shí)現(xiàn),這就是TOPDOWN(自頂向下)的設(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)設(shè)計(jì)的工作流程如圖2-2所示。系統(tǒng)劃分系統(tǒng)劃分=1\*GB3①編譯器=3\*GB3③代碼級(jí)功能仿真=4\*GB3④綜合器=5\*GB3⑤適配前時(shí)序仿真=6\*GB3⑥適配器=7\*GB3⑦CPLD/FPGA實(shí)現(xiàn)適配后仿真模型=8\*GB3⑧適配后時(shí)序仿真適配報(bào)告=8\*GB3⑧ASIC實(shí)現(xiàn)VHDL代碼或圖形方式輸入=2\*GB3②仿真綜合庫(kù)器件編程文件=8\*GB3⑧圖2-2CPLD/FPGA系統(tǒng)設(shè)計(jì)流程流程說(shuō)明:1.工程師按照“自頂向下”的設(shè)計(jì)方法進(jìn)行系統(tǒng)劃分。2.輸入VHDL代碼,這是設(shè)計(jì)中最為普遍的輸入方式。此外,還可以采用圖形輸入方式(框圖、狀態(tài)圖等),這種輸入方式具有直觀、容易理解的優(yōu)點(diǎn)。3.將以上的設(shè)計(jì)輸入編譯成標(biāo)準(zhǔn)的VHDL文件。4.進(jìn)行代碼級(jí)的功能仿真,主要是檢驗(yàn)系統(tǒng)功能設(shè)計(jì)的正確性。這一步驟適用于大型設(shè)計(jì),因?yàn)閷?duì)于大型設(shè)計(jì)來(lái)說(shuō),在綜合前對(duì)源代碼仿真,就可以大大減少設(shè)計(jì)重復(fù)的次數(shù)和時(shí)間。一般情況下,這一仿真步驟可略去。5.利用綜合器對(duì)VHDL源代碼進(jìn)行綜合優(yōu)化處理,生成門(mén)級(jí)描述的網(wǎng)絡(luò)表文件,這是將高層次描述轉(zhuǎn)化為硬件電路的關(guān)鍵步驟。綜合優(yōu)化是針對(duì)ASIC芯片供應(yīng)商的某一產(chǎn)品系列進(jìn)行的,所以綜合的過(guò)程要在相應(yīng)的廠家綜合庫(kù)的支持下才能完成。6.利用產(chǎn)生的網(wǎng)絡(luò)表文件進(jìn)行適配前的時(shí)序仿真,仿真過(guò)程不涉及具體器件的硬件特性,是較為粗略的。一般的設(shè)計(jì),也可略去這一步驟。7.利用適配器將綜合后的網(wǎng)絡(luò)表文件針對(duì)某一具體的目標(biāo)器件進(jìn)行邏輯映射操作,包括底層器件配置、邏輯分割、邏輯優(yōu)化和布局布線。8.在適配完成后,產(chǎn)生多項(xiàng)設(shè)計(jì)結(jié)果:(a)適配報(bào)告,包括芯片內(nèi)部資源利用情況,設(shè)計(jì)的布爾方程描述情況等;(b)適配后的仿真模型;(c)器件編程文件。根據(jù)適配后的仿真模型,可以進(jìn)行適配后時(shí)序仿真,因?yàn)橐呀?jīng)得到器件的實(shí)際硬件特性(如時(shí)延特性),所以仿真結(jié)果能比較精確的預(yù)期未來(lái)芯片的實(shí)際性能。如果仿真結(jié)果達(dá)不到設(shè)計(jì)要求,就修改VHDL源代碼或選擇不同速度和品質(zhì)的器件,直至滿足設(shè)計(jì)要求。最后將適配器產(chǎn)生的器件編程文件通過(guò)編程器或下載電纜載入到目標(biāo)芯片CPLD/FPGA中。2.4FPGA開(kāi)發(fā)編程原理硬件設(shè)計(jì)需要根據(jù)各種性能指標(biāo)、成本、開(kāi)發(fā)周期等因素,確定最佳的實(shí)現(xiàn)方案,畫(huà)出系統(tǒng)框圖,選擇芯片,設(shè)計(jì)PCB并最終形成樣機(jī)。CPLD/FPGA軟件設(shè)計(jì)可分為兩大塊:編程語(yǔ)言和編程工具。編程語(yǔ)言主要有VHDL和Verilog兩種硬件描述語(yǔ)言;編程工具主要是兩大廠家Altera和Xilinx的集成綜合EDA軟件(如MAX+plusII、QuartusII、Foundation、ISE)以及第三方工具(如FPGAExpress、Modelsim、SynposysSVS等)。具體的設(shè)計(jì)輸入方式有以下幾種:1.HDL語(yǔ)言方式。HDL既可以描述底層設(shè)計(jì),也可以描述頂層的設(shè)計(jì),但它不容易做到較高的工作速度和芯片利用率。用這種方式描述的項(xiàng)目最后所能達(dá)到的性能與設(shè)計(jì)人員的水平、經(jīng)驗(yàn)以及綜合軟件有很大的關(guān)系。2.圖形方式。可以分為電路原理圖描述,狀態(tài)機(jī)描述和波形描述3種形式。有的軟件3種輸入方法都支持,如Active-HDL。MAX+plusII圖形輸入方式只支持電路原理圖描述和波形描述兩種。電路原理圖方式描述比較直觀和高效,對(duì)綜合軟件的要求不高。一般大都使用成熟的IP核和中小規(guī)模集成電路所搭成的現(xiàn)成電路,整體放到一片可編程邏輯器件的內(nèi)部去,所以硬件工作速度和芯片利用率很高,但是但項(xiàng)目很大的時(shí)候,該方法就顯得有些繁瑣;狀態(tài)機(jī)描述主要用來(lái)設(shè)計(jì)基于狀態(tài)機(jī)思想的時(shí)序電路。在圖形的方式下定義好各個(gè)工作狀態(tài),然后在各個(gè)狀態(tài)上輸入轉(zhuǎn)換條件以及相應(yīng)的輸入輸出,最后生成HDL語(yǔ)言描述,送去綜合軟件綜合到可編程邏輯器件的內(nèi)部。由于狀態(tài)機(jī)到HDL語(yǔ)言有一種標(biāo)準(zhǔn)的對(duì)應(yīng)描述方式,所以這種輸入方式最后所能達(dá)到的工作速度和芯片利用率主要取決于綜合軟件;波形描述方式是基于真值表的一種圖形輸入方式,直接描述輸入與輸出的波形關(guān)系。這種輸入方式最后所能達(dá)到的工作速度和芯片利用率也是主要取決于綜合軟件。

第3章數(shù)字鐘總體設(shè)計(jì)方案3.1數(shù)字鐘的構(gòu)成數(shù)字鐘實(shí)際上是一個(gè)對(duì)標(biāo)準(zhǔn)頻率(1Hz)進(jìn)行計(jì)數(shù)的計(jì)數(shù)電路。由于計(jì)數(shù)的起始時(shí)間不可能與標(biāo)準(zhǔn)時(shí)間(如北京時(shí)間)一致,故需要在電路上加一個(gè)校時(shí)電路,同時(shí)標(biāo)準(zhǔn)的1Hz時(shí)間信號(hào)必須做到準(zhǔn)確穩(wěn)定。通常使用石英晶體振蕩器電路構(gòu)成數(shù)字鐘。圖3-1所示為數(shù)字鐘的一般構(gòu)成框圖。主要包括時(shí)間基準(zhǔn)電路、計(jì)數(shù)器電路、控制電路、譯碼和顯示電路。其中的控制邏輯電路是比較靈活多樣的,不斷完善它可以增強(qiáng)數(shù)字鐘的功能。譯碼驅(qū)動(dòng)譯碼驅(qū)動(dòng)譯碼驅(qū)動(dòng)譯碼驅(qū)動(dòng)譯碼驅(qū)動(dòng)譯碼驅(qū)動(dòng)譯碼驅(qū)動(dòng)譯碼驅(qū)動(dòng)譯碼驅(qū)動(dòng)譯碼驅(qū)動(dòng)譯碼驅(qū)動(dòng)譯碼驅(qū)動(dòng)時(shí)十位計(jì)數(shù)時(shí)個(gè)位計(jì)數(shù)分十位計(jì)數(shù)分個(gè)位計(jì)數(shù)秒十位計(jì)數(shù)秒個(gè)位計(jì)數(shù)校時(shí)控制電路校分控制電路分頻器電路分頻器電路晶體振蕩器電路1Hz圖3-1數(shù)字鐘的一般組成框圖本設(shè)計(jì)在上面數(shù)字鐘結(jié)構(gòu)的基礎(chǔ)上還加入了顯示年、月、日的功能,其顯示范圍為2000年1月1日至2099年12月31日。其總體框架如圖3-2。圖3-2總體框架3.2數(shù)字鐘的工作原理振蕩器產(chǎn)生穩(wěn)定的高頻脈沖信號(hào),作為數(shù)字鐘的時(shí)間基準(zhǔn),然后經(jīng)過(guò)分頻器輸出標(biāo)準(zhǔn)秒脈沖。秒計(jì)數(shù)器滿60后向分計(jì)數(shù)器進(jìn)位,分計(jì)數(shù)器滿60后向小時(shí)計(jì)數(shù)器進(jìn)位,小時(shí)計(jì)數(shù)器按照“24翻1”規(guī)律計(jì)數(shù)。計(jì)滿后各計(jì)數(shù)器清零,重新計(jì)數(shù)。日期部分由于日有28天、29天、30天、31天4種情況,故日由年和月共同判斷其天數(shù),日計(jì)滿后向月進(jìn)位,月滿后向年進(jìn)位。計(jì)數(shù)器的輸出分別經(jīng)譯碼器送數(shù)碼管顯示。計(jì)時(shí)出現(xiàn)誤差時(shí),可以用校時(shí)電路校時(shí)、校分、校秒和校年、校月和校日。在控制信號(hào)中除了一般的校時(shí)信號(hào)外,還有時(shí)鐘使能信號(hào)、時(shí)鐘清零信號(hào)。控制信號(hào)由4×4矩形鍵盤(pán)輸入。時(shí)基電路可以由石英晶體振蕩電路構(gòu)成,如果晶振頻率為1MHz,經(jīng)過(guò)6次十分頻就可以得到秒脈沖信號(hào)。譯碼顯示電路由七段譯碼器完成,顯示由數(shù)碼管構(gòu)成。第4章單元電路設(shè)計(jì)4.1分頻模塊電路設(shè)計(jì)與實(shí)現(xiàn)晶體振蕩器是構(gòu)成數(shù)字式時(shí)鐘的核心,振蕩器的穩(wěn)定度及頻率的精度決定了數(shù)字鐘計(jì)時(shí)的準(zhǔn)確程度,它保證了時(shí)鐘的走時(shí)準(zhǔn)確及穩(wěn)定。石英晶體的選頻特性非常好,只有某一頻率點(diǎn)的信號(hào)可以通過(guò)它,其它頻率段的信號(hào)均會(huì)被它所衰減,而且,振蕩信號(hào)的頻率與振蕩電路中的R、C元件的數(shù)值無(wú)關(guān)。因此,這種振蕩電路輸出的是準(zhǔn)確度極高的信號(hào)。然后再利用分頻電路,將其輸出信號(hào)轉(zhuǎn)變?yōu)槊胄盘?hào),其組成框圖如圖4-1。分頻電路分頻電路石英晶體振蕩電路秒信號(hào)圖4-1秒信號(hào)產(chǎn)生電路框圖本系統(tǒng)使用的晶體振蕩器電路給數(shù)字鐘提供一個(gè)頻率穩(wěn)定準(zhǔn)確的40MHz的方波信號(hào),其輸出至分頻電路。分頻電路的邏輯框圖如圖4-2所示。圖4-2分頻電路模塊圖4-3分頻模塊電路設(shè)計(jì)其內(nèi)部結(jié)構(gòu)圖見(jiàn)圖4-3。電路中采用Max+plusII元器件庫(kù)中的計(jì)數(shù)器7490進(jìn)行硬件分頻。經(jīng)分頻后輸出1Hz的標(biāo)準(zhǔn)秒信號(hào)CLK1、4MHz的按鍵掃描信號(hào)、1KHz的按鍵去抖信號(hào)和500Hz用于報(bào)時(shí)模塊的輸入信號(hào)。該模塊的時(shí)序仿真圖如圖4-4所示,滿足設(shè)計(jì)要求。圖4-4分頻模塊仿真圖4.2校時(shí)控制模塊電路設(shè)計(jì)與實(shí)現(xiàn)4.2.1鍵盤(pán)接口電路原理校時(shí)控制模塊在本系統(tǒng)中也就是鍵盤(pán)接口電路部分。下面先介紹鍵盤(pán)接口電路的工作原理,如圖4-5。本系統(tǒng)采用的就是這種行列式鍵盤(pán)接口,相對(duì)個(gè)按鍵的鍵盤(pán)接口來(lái)說(shuō)節(jié)省了I/O接口。如圖所示,行線通過(guò)一個(gè)電阻被上拉到+5V電壓。行線與按鍵的一個(gè)引腳相連,列線與按鍵的另一個(gè)引腳相連。平時(shí)列線被置成低電平,沒(méi)有按鍵被按下的時(shí)候,行線保持高電平,而有按鍵被按下的時(shí)候,行線被拉成低電平,這時(shí)候控制器就知道有按鍵被按下,但只能判斷出在哪一行,不能判斷出在哪一列,因此接下來(lái)就要進(jìn)行鍵盤(pán)掃描,以確定具體是哪個(gè)按鍵被按下。鍵盤(pán)掃描的過(guò)程事將列線逐列置成低電平,然后讀取行線狀態(tài),直到行線中出現(xiàn)低電平,可知這時(shí)哪一列是低電平,然后將行線與列線的狀態(tài)裝入鍵碼寄存器,進(jìn)行按鍵譯碼,得到按下的按鍵的相應(yīng)編碼,這樣就完成了按鍵掃描的過(guò)程。當(dāng)然,一個(gè)完整的按鍵掃描過(guò)程還需要配合相應(yīng)的鍵盤(pán)去抖手段才能正確的識(shí)別按鍵,不會(huì)發(fā)生重鍵和錯(cuò)誤判斷等情況。圖4-5鍵盤(pán)接口電路4.2.2鍵盤(pán)接口的VHDL描述1.按鍵消抖本模塊用于當(dāng)有按鍵按下時(shí),采用軟件消抖的辦法去除按鍵抖動(dòng)。模塊的實(shí)現(xiàn)方法是先判斷是否有按鍵按下,如有按鍵按下則延時(shí)一段時(shí)間,待抖動(dòng)過(guò)去之后再讀行線狀態(tài),如果仍有低電平行線,則確定有按鍵按下,然后產(chǎn)生一個(gè)有按鍵按下的信號(hào)。該模塊有一個(gè)時(shí)鐘輸入端口,輸入時(shí)鐘信號(hào)是分頻出來(lái)的1KHz的時(shí)鐘;有一個(gè)輸入端口與行線相連,用于輸入行線狀態(tài);一個(gè)輸出端口,用于輸出有按鍵按下的信號(hào)。該模塊的邏輯框圖如圖4-6所示。圖4-6去抖邏輯框圖該電路的VHDL程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityqudouisport(clk1:instd_logic;row:instd_logic_vector(3downto0);key_pre:outstd_logic);endqudou;architecturebehavofqudouissignalsig1,counter:std_logic_vector(3downto0);signaltmp1,sig2:std_logic;beginsig1<=row;tmp1<=sig1(0)andsig1(1)andsig1(2)andsig1(3);key_pre<=counter(0)andcounter(1)andcounter(2)andcounter(3);process(clk1)beginif(clk1'eventandclk1='1')thenif(tmp1='0')thenif(sig2='0')thensig2<='1';endif;endif;if(sig2='1')thenif(counter="1111")thensig2<='0';counter<="0000";elsecounter<=counter+'1';endif;endif;endif;endprocess;endbehav;程序說(shuō)明:這段程序是實(shí)現(xiàn)按鍵消抖,在這里實(shí)現(xiàn)的比較簡(jiǎn)單,原理是當(dāng)有按鍵按下的時(shí)候,temp1會(huì)變成低電平,這時(shí)把sig2變成高電平,如果此時(shí)counter不為“1111”時(shí),內(nèi)部計(jì)數(shù)器計(jì)數(shù),從“0000”直到“1111”,當(dāng)計(jì)數(shù)到“1111”時(shí),key_pre輸出高電平,同時(shí)計(jì)數(shù)器清零。由于計(jì)數(shù)脈沖為1KHz,故從有按鍵按下到輸入信號(hào)產(chǎn)生大概需要15ms。如果有按鍵抖動(dòng)的話,tem1會(huì)在“0”和“1”之間變動(dòng)多次,但是計(jì)數(shù)過(guò)程不會(huì)停止,原因是計(jì)數(shù)由sig2的電平?jīng)Q定,而sig2一旦變成高電平,再要變成低電平,需要計(jì)數(shù)完成即counter等于“1111”時(shí)。所以計(jì)數(shù)過(guò)程不會(huì)受抖動(dòng)影響。一旦計(jì)數(shù)完成,抖動(dòng)已經(jīng)過(guò)去,不會(huì)發(fā)生重鍵現(xiàn)象了,這樣就去除了抖動(dòng)。2.鍵掃描模塊鍵掃描模塊的框圖如圖4-7所示。圖4-7按鍵掃描模塊CLKY為輸入時(shí)鐘,該時(shí)鐘是分頻模塊分出的4MHz的時(shí)鐘信號(hào),之所以在這里采用頻率高的時(shí)鐘信號(hào)就是因?yàn)殒I掃描是一個(gè)快過(guò)程,不需要太慢的時(shí)鐘。Key_pre是由去抖模塊輸出的有鍵按下的信號(hào),這個(gè)信號(hào)引發(fā)按鍵掃描模塊內(nèi)部信號(hào)的變化,在該狀態(tài)信號(hào)的作用下,模塊可以鍵盤(pán)掃描。ROW[3..0]是行輸入信號(hào),與鍵盤(pán)的行線相連,COM[3..0]是列輸出信號(hào),與鍵盤(pán)的列線相連。SCAN_CODE[7..0]是掃描的鍵碼輸出端口。鍵掃描的基本方法是將列線逐一置成低電平,然后讀行線輸入端口,如果行線中有低電平出現(xiàn),說(shuō)明按鍵已經(jīng)確定,將行向量和列向量讀入鍵碼中即可。鍵盤(pán)掃描程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityajsmisport(clky,key_pre:instd_logic;row:instd_logic_vector(3downto0);com:outstd_logic_vector(3downto0);scan_code:outstd_logic_vector(7downto0));endajsm;architecturebehavofajsmissignalsig_com:std_logic_vector(3downto0);signalcounter:std_logic_vector(1downto0);signaltmp,sig1,sig2:std_logic;beginsig2<=key_pre;tmp<=row(0)androw(1)androw(2)androw(3);process(clky)beginif(clky'eventandclky='1')then--計(jì)數(shù)進(jìn)程if(sig2='1')thenif(counter="11")thensig1<='0';counter<="00";elsesig1<='1';counter<=counter+'1';endif;endif;endif;endprocess;process(clky)--列線逐位輸出低電平variablejt:std_logic;beginif(clky'eventandclky='1')thenif(sig1='1')thenjt:=sig_com(3);foriin3downto1loopsig_com(i)<=sig_com(i-1);endloop;sig_com(0)<=jt;elsesig_com<="1110";endif;endif;endprocess;process(clky)beginif(clky'eventandclky='1')thenif(sig1='1')thencom<=sig_com;elsecom<="0000";endif;endif;endprocess;process(clky)--鍵碼信號(hào)賦值beginif(clky'eventandclky='1')thenif(sig1='1')thenif(tmp='0')thenscan_code<=row&sig_com;elsescan_code<="11111111";endif;elsescan_code<="11111111";endif;endif;endprocess;endbehav;程序說(shuō)明:該程序較長(zhǎng),用個(gè)4個(gè)進(jìn)程,這里逐一介紹。第一個(gè)進(jìn)程是計(jì)數(shù)變量counter的計(jì)數(shù)進(jìn)程,當(dāng)sig2為1且counter不為11時(shí),sig1為1且counter開(kāi)始記數(shù)。第二個(gè)進(jìn)程是根據(jù)狀態(tài)變量的狀態(tài)進(jìn)行列線的低電平的逐位輸出。如果sig1等于1,那么sig_com就進(jìn)行循環(huán)移位,每個(gè)鐘周期循環(huán)左移一位。第三個(gè)進(jìn)程決定列線的輸出,平時(shí)輸出“0000”,當(dāng)sig1為1時(shí),輸出sig_com。最后一個(gè)進(jìn)程就是給鍵碼信號(hào)賦值的過(guò)程。3.鍵碼轉(zhuǎn)換模塊該模塊框圖如圖4-8所示。模塊主要完成從鍵掃描碼到按鍵編碼的轉(zhuǎn)換。圖4-8鍵碼轉(zhuǎn)換模塊邏輯框圖鍵碼轉(zhuǎn)換的核心程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityjmzhisport(clky:instd_logic;scan_code:instd_logic_vector(7downto0);key_code:outstd_logic_vector(3downto0));endjmzh;architecturebehavofjmzhisbeginprocess(clky)beginif(clky'eventandclky='1')thencasescan_codeiswhen"11101110"=>key_code<="0000";when"11101101"=>key_code<="0001";when"11101011"=>key_code<="0010";when"11100111"=>key_code<="0011";when"11011110"=>key_code<="0100";when"11011101"=>key_code<="0101";when"11011011"=>key_code<="0110";when"11010111"=>key_code<="0111";when"10111110"=>key_code<="1000";when"10111101"=>key_code<="1001";when"10111011"=>key_code<="1010";when"10110111"=>key_code<="1011";when"01111110"=>key_code<="1100";when"01111101"=>key_code<="1101";when"01111011"=>key_code<="1110";whenothers=>key_code<="1111";endcase;endif;endprocess;endbehav;程序中采用case語(yǔ)句進(jìn)行按鍵編碼,也可以用elsif語(yǔ)句實(shí)現(xiàn)此段程序設(shè)計(jì)。完整的鍵盤(pán)程序應(yīng)加上剛開(kāi)始介紹的分頻模塊,鍵盤(pán)接口電路總的邏輯連接框圖如圖4-9所示。圖4-9鍵盤(pán)接口連接框圖4.3計(jì)數(shù)模塊設(shè)計(jì)與實(shí)現(xiàn)4.3.1秒計(jì)數(shù)模塊秒計(jì)數(shù)模塊邏輯框圖如圖4-10所示。圖4-10秒計(jì)數(shù)模塊框圖輸入端口ENL是秒時(shí)鐘使能信號(hào),也是整個(gè)數(shù)字中的使能信號(hào),高電平有效;RES是異步清零信號(hào);CLK是秒脈沖輸入端口;MADD和MDEC是同步校時(shí)控制信號(hào),MADD是控制秒信號(hào)加一,MDEC是控制秒信號(hào)減一;輸出端口A[3..0]是秒時(shí)鐘的低位,B[3..0]是高位;CA端口是進(jìn)位輸出端口,當(dāng)秒計(jì)數(shù)到59時(shí)輸出高電平,其它時(shí)候輸出低電平。秒計(jì)數(shù)模塊的程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitymiaoisport(enl,res,clk,madd,mdec:instd_logic;a,b:outstd_logic_vector(3downto0);ca:outstd_logic);endmiao;architectureSECofmiaoisbeginprocess(enl,clk,res)variablem0,m1:std_logic_vector(3downto0);beginifres='1'thenm0:="0000";m1:="0000";ca<='0';elsifclk'eventandclk='1'thenca<='0';ifmadd='1'orenl='1'thenifm0="1000"andm1="0101"thenca<='1';--實(shí)際是第59個(gè)--脈沖endif;ifm0<"1001"thenm0:=m0+1;elsem0:="0000";m1:=m1+1;ifm1>"0101"thenm0:="0000";m1:="0000";ca<='0';endif;endif;elsifmdec='1'thenifm0="0000"andm1="0000"thenm0:="1001";m1:="0101";elsifm0>"0000"thenm0:=m0-1;elsem0:="1001";m1:=m1-1;endif;endif;endif;a<=m0;b<=m1;endprocess;endSEC;秒時(shí)鐘的仿真波形圖如圖4-11所示,仿真圖滿足設(shè)計(jì)的要求。分計(jì)數(shù)和時(shí)計(jì)數(shù)模塊的設(shè)計(jì)原理與秒模塊的類(lèi)似。圖4-11秒時(shí)鐘仿真波形4.3.2日計(jì)數(shù)模塊由于一年中各個(gè)月份的日的長(zhǎng)短不同,共有28、29、30和31天四種情況,可知日由年和月共同決定,如表4-1。年中0表示閏年,1表示平年;月中0表示1、2、3、5、7、8、10和12月,1表示其它月份;二月中1表示2月,0表示其它月份。年月二月日SEL[0]SEL[1]SEL[2]——000——10031010——110300012910128011——111——表4-1日長(zhǎng)短邏輯表日計(jì)數(shù)模塊的邏輯框圖如圖4-12所示輸入引腳SEL[2..0]是決定日長(zhǎng)短的輸入信號(hào),其它信號(hào)功能與秒計(jì)數(shù)模塊功能類(lèi)似。圖4-12日計(jì)數(shù)模塊邏輯框圖日計(jì)數(shù)模塊的核心程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityriisport(enl,res,clk,radd,rdec:instd_logic;sel:instd_logic_vector(2downto0);a,b:outstd_logic_vector(3downto0);ca:outstd_logic);endri;architectureSECofriissignalsr0,sr1:std_logic_vector(3downto0);beginprocess(sel)beginifsel="001"thensr0<="0001";sr1<="0011";endif;ifsel="011"thensr0<="0000";sr1<="0011";endif;ifsel="100"thensr0<="1001";sr1<="0010";endif;ifsel="101"thensr0<="1000";sr1<="0010";endif;endprocess;process(enl,clk,res)variabler0,r1:std_logic_vector(3downto0);beginifres='1'thenr0:="0000";r1:="0000";ca<='0';elsifclk'eventandclk='1'thenca<='0';ifradd='1'orenl='1'thenifr0=sr0andr1=sr1thenr0:="0001";r1:="0000";ca<='1';elsifr0<"1001"thenr0:=r0+1;ca<='0';elser0:="0000";r1:=r1+1;endif;elsifrdec='1'thenifr0="0001"andr1="0000"thenr0:=sr0;r1:=sr1;elsifr0>"0000"thenr0:=r0-1;elser0:="1001";r1:=r1-1;endif;endif;endif;a<=r0;b<=r1;endprocess;endSEC;程序中第一個(gè)進(jìn)程主要是對(duì)日的長(zhǎng)短的設(shè)置,sr0和sr1分別是日的低位和高位的信號(hào),它們的值由輸入sel[2..0]決定。sel[0]由年計(jì)數(shù)模塊輸入,sel[1]和sel[2]由月計(jì)數(shù)模塊輸入。第二個(gè)進(jìn)程主要實(shí)現(xiàn)計(jì)數(shù)和加減控制。日計(jì)數(shù)模塊的時(shí)序仿真圖如圖4-13所示,仿真圖滿足設(shè)計(jì)的要求。圖4-13日計(jì)數(shù)仿真時(shí)序圖4.3.3月計(jì)數(shù)和年計(jì)數(shù)模塊1.月計(jì)數(shù)模塊邏輯框圖如圖4-14所示。輸出ERYUE端口接日模塊的sel[2],YSEL端口接sel[1]。其VHDL程序描述見(jiàn)附錄。圖4-14月計(jì)數(shù)邏輯框圖其仿真時(shí)序圖如圖4-15所示。仿真圖中有毛刺出現(xiàn),但并不會(huì)對(duì)本模塊的計(jì)數(shù)產(chǎn)生影響,滿足本設(shè)計(jì)的需要。圖4-15月模塊仿真時(shí)序圖2.年計(jì)數(shù)模塊的邏輯框圖如圖4-16所示。年計(jì)數(shù)模塊的輸出NSEL端口接日模塊的sel[0]。其它端口的功能與上述模塊類(lèi)似。其VHDL描述見(jiàn)附錄。圖4-16年計(jì)數(shù)邏輯框圖年模塊的計(jì)數(shù)范圍是從2000到2099,在這之間的閏年見(jiàn)表4-2。由于年份都帶有20,所以省略,用年份數(shù)來(lái)表示。將表4-2中的年份用二進(jìn)制表示即可得到以下規(guī)律:當(dāng)年個(gè)位的后2位為“00”且十位的最后一位為“0”,或者年的個(gè)位的后2位為“10”且年十位的最后一位為“1”的時(shí)候,該年為閏年,否則為平年。表4-2閏年表00040812162024283236404448525660646872768084889296其仿真時(shí)序圖如圖4-17所示,滿足設(shè)計(jì)的要求。圖4-17年模塊仿真時(shí)序圖4.4動(dòng)態(tài)掃描及顯示電路設(shè)計(jì)與實(shí)現(xiàn)4.4.1動(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í)間間隔不要太大,利用人眼的視覺(jué)暫留的現(xiàn)象,就可以造成各位數(shù)據(jù)同時(shí)顯示的假象。一般每一位的顯示時(shí)間為1~10ms。動(dòng)態(tài)掃描邏輯框圖如圖4-18所示。該模塊的輸入端口DISCLK是頻率為500Hz的掃描時(shí)鐘,故每一位顯示的時(shí)間為2ms,需要掃描10個(gè)數(shù)碼管,故顯示間隔為20ms。由分頻模塊提供;端口CONV顯示轉(zhuǎn)換信號(hào),當(dāng)其為高電平時(shí),數(shù)碼管顯示時(shí)、分和秒。當(dāng)其為低電平時(shí)顯示年、月和日;其它輸入端口接計(jì)數(shù)模塊輸出的數(shù)據(jù);輸出端口DATAOUT[3..0]動(dòng)態(tài)輸出掃描的數(shù)據(jù);端口WSEL[3..0]輸出數(shù)碼管的片選信號(hào)。其VHDL程序描述見(jiàn)附錄。圖4-18動(dòng)態(tài)掃描邏輯框圖4.4.2顯示模塊本系統(tǒng)選擇7448作為顯示譯碼電路,選擇數(shù)碼管作為顯示單元電路。計(jì)數(shù)器實(shí)現(xiàn)了對(duì)時(shí)間的累計(jì)并以8421BCD碼的形式輸送到動(dòng)態(tài)掃描模塊,再由其輸出的端送到7448,將BCD碼轉(zhuǎn)換為七段碼,再由數(shù)碼管顯示出來(lái)。數(shù)碼管位選連接電路4-19所示。由于所用到的數(shù)碼管為兩組,故位選電路用到兩片7448模塊。圖4-19數(shù)碼管位選實(shí)現(xiàn)電路

第5章設(shè)計(jì)結(jié)論與研究展望5.1設(shè)計(jì)結(jié)論將設(shè)計(jì)程序下載到實(shí)驗(yàn)箱上運(yùn)行調(diào)試后,最終結(jié)果與預(yù)期效果基本一致,年、月、日和時(shí)、分、秒能夠正常計(jì)數(shù)并能由控制鍵分別顯示,整點(diǎn)報(bào)時(shí)功能正常。在此次的數(shù)字鐘設(shè)計(jì)過(guò)程中,更進(jìn)一步地熟悉有關(guān)數(shù)字電路的知識(shí)和具體應(yīng)用。學(xué)會(huì)了利Max+plus和QuarterII軟件進(jìn)行原理圖的繪制,硬件描述語(yǔ)言VHDL的編寫(xiě),程序的仿真等工作。并能根據(jù)仿真結(jié)果分析設(shè)計(jì)的存在的問(wèn)題和缺陷,從而進(jìn)行程序的調(diào)試和完善。在設(shè)計(jì)電路中,往往是先仿真后連接實(shí)物圖,但有時(shí)候仿真和電路連接并不是完全一致的,例如在對(duì)具體模塊的仿真的過(guò)程中,往往沒(méi)有考慮到整體設(shè)計(jì)的層面以及與上下模塊接口的設(shè)計(jì)。再加上器件對(duì)信號(hào)的延時(shí)等問(wèn)題,實(shí)際下載到實(shí)驗(yàn)箱上后會(huì)出現(xiàn)一系列的問(wèn)題,因此仿真圖和電路連接圖還是有一定區(qū)別的。此次的數(shù)字鐘設(shè)計(jì)重在于按鍵的控制和各個(gè)模塊代碼的編寫(xiě),雖然能把鍵盤(pán)接口和各個(gè)模塊的代碼編寫(xiě)出來(lái),并能正常顯示,但對(duì)于各個(gè)模塊的優(yōu)化設(shè)計(jì)還有一定的缺陷和不足??偟膩?lái)說(shuō),通過(guò)這次的設(shè)計(jì)實(shí)驗(yàn)更進(jìn)一步地增強(qiáng)了實(shí)驗(yàn)的動(dòng)手能力,對(duì)數(shù)字鐘的工作原理也有了更加透徹的理解。在本設(shè)計(jì)調(diào)試過(guò)程中遇到了一些問(wèn)題如下:1.當(dāng)程序下載到實(shí)驗(yàn)箱上后,數(shù)碼管顯示全部為零,計(jì)數(shù)器不工作,經(jīng)分析得知程序中的總的清零信號(hào)保持有效狀態(tài),改動(dòng)程序后計(jì)數(shù)器開(kāi)始計(jì)數(shù)。2.當(dāng)秒時(shí)鐘計(jì)數(shù)到59時(shí)變0時(shí),分計(jì)數(shù)模塊滯后計(jì)數(shù),考慮的器件的延時(shí),將程序中秒的進(jìn)位信號(hào)提前1秒。3.利用控制按鍵給月模塊加計(jì)數(shù)時(shí),發(fā)現(xiàn)的月加到12時(shí),年則在沒(méi)有按鍵按下的情況下一直加計(jì)數(shù)。檢查程序后得知,月的進(jìn)位信號(hào)在月為12后變一直有效,其它模塊也存在這種情況,改動(dòng)程序后各個(gè)模塊工作正常。4.在檢測(cè)按鍵時(shí),由于有些按鍵控制是秒時(shí)鐘同步的,所以控制起來(lái)顯得梢慢些,但是工作正常,能滿足實(shí)際的需要。5.2研究展望本設(shè)計(jì)中雖然有控制鍵對(duì)時(shí)鐘進(jìn)行控制,但是用到的按鍵太多,在實(shí)際應(yīng)用上存在不足。故提出改進(jìn)方案為用一個(gè)按鍵控制數(shù)碼管的片選,再用兩個(gè)按鍵控制計(jì)數(shù)的加減。這樣可以節(jié)省按鍵資源,以供更多的功能的使用。本設(shè)計(jì)是采用硬件描述語(yǔ)言和FPGA芯片相結(jié)合進(jìn)行的數(shù)字鐘的研究,從中可以看出EDA技術(shù)的發(fā)展在一定程度上實(shí)現(xiàn)了硬件設(shè)計(jì)的軟件化。設(shè)計(jì)的過(guò)程變的相對(duì)簡(jiǎn)單,容易修改等優(yōu)點(diǎn),相信隨著電子技術(shù)的發(fā)展,數(shù)字鐘的功能會(huì)更加多樣化,滿足人們的各種需要。致謝時(shí)間如梭,轉(zhuǎn)眼畢業(yè)在即?;叵朐诖髮W(xué)求學(xué)的四年,心中充滿無(wú)限感激和留戀之情。感謝母校為我們提供的良好學(xué)習(xí)環(huán)境,使我們能夠在此專(zhuān)心學(xué)習(xí),陶冶情操。謹(jǐn)向我的論文指導(dǎo)老師xx老師致以最誠(chéng)摯的謝意!xx老師不僅在學(xué)業(yè)上言傳身教,而且以其高尚的品格給我以情操上的熏陶。本文的寫(xiě)作更是直接得益于他的悉心指點(diǎn),從論文的選題到體系的安排,從觀點(diǎn)推敲到字句斟酌,無(wú)不凝聚著他的心血。滴水之恩,當(dāng)以涌泉相報(bào),師恩重于山,師恩難報(bào)。我只有在今后的學(xué)習(xí)、工作中,以鍥而不舍的精神,努力做出點(diǎn)成績(jī),以博恩師一笑。另外,我必須感謝我的父母。焉得諼草,言樹(shù)之背,養(yǎng)育之恩,無(wú)以回報(bào)。作為他們的孩子,我秉承了他們樸實(shí)、堅(jiān)韌的性格,也因此我有足夠的信心和能力戰(zhàn)勝前進(jìn)路上的艱難險(xiǎn)阻;也因?yàn)樗麄兊娜找剐羷冢也庞袡C(jī)會(huì)如愿完成自己的大學(xué)學(xué)業(yè),進(jìn)而取得進(jìn)一步發(fā)展的機(jī)會(huì)。最后,我必須感謝我的朋友,我的同學(xué)們,正是因?yàn)樗麄冊(cè)陔娔X技術(shù)上的無(wú)私指引,我才能得以順利完成該論文。

附錄1.主程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityyueisport(enl,res,clk,yadd,ydec:instd_logic;a,b:outstd_logic_vector(3downto0);eryue,ysel,ca:outstd_logic);endyue;architectureSECofyueisbeginprocess(enl,clk,res)variabley0,y1:std_logic_vector(3downto0);beginifres='1'theny0:="0000";y1:="0000";ca<='0';elsifclk'eventandclk='1'thenca<='0';ifyadd='1'orenl='1'thenify0="0010"andy1="0001"theny0:="0001";y1:="0000";ca<='1';elsify0<"1001"theny0:=y0+1;ca<='0';elsey0:="0000";y1:=y1+1;endif;elsifydec='1'thenify0="0001"andy1="0000"theny0:="0010";y1:="0001";elsify0>"0000"theny0:=y0-1;elsey0:="1001";y1:=y1-1;endif;endif;endif;if((y0="0100"ory0="0110"ory0="1001")andy1="0000")or(y0="0000"andy1="0001")thenysel<='1';elseysel<='0';endif;ify0="0010"andy1="0000"theneryue<='1';elseeryue<='0';endif;a<=y0;b<=y1;endprocess;endSEC;2.年計(jì)數(shù)模塊的程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitynianisport(enl,res,clk,nadd,ndec:instd_logic;a,b,c,d:outstd_logic_vector(3downto0);nsel:outstd_logic);endnian;architecturendofnianisbeginprocess(res,enl,clk)variablen0,n1,n2,n3:std_logic_vector(3downto0);beginifres='1'thenn0:="0000"; n1:="0000"; n2:="0000"; n3:="0000";elsifclk'eventandclk='1'then ifnadd='1'orenl='1'then ifn0<"1001"thenn0:=n0+1; elsifn0="1001"thenn0:="0000"; n1:=n1+1; ifn1="1010"thenn1:="0000"; n2:=n2+1; endif; ifn2="1010"thenn2:="0000"; n3:=n3+1; endif; ifn3="1010"thenn3:="0000";endif;endif; elsifndec='1'then ifn0>"0000"thenn0:=n0-1; elsifn0="0000"andn1="0000"andn2="0000"andn3="0000"thenn0:="1001"; n1:="1001"; n2:="1001"; n3:="1001"; elsifn0="0000"andn1="0000"andn2="0000"thenn0:="1001"; n1:="1001"

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論