電子科技大學(xué)數(shù)字式秒表設(shè)計與實現(xiàn)實驗報告_第1頁
電子科技大學(xué)數(shù)字式秒表設(shè)計與實現(xiàn)實驗報告_第2頁
電子科技大學(xué)數(shù)字式秒表設(shè)計與實現(xiàn)實驗報告_第3頁
電子科技大學(xué)數(shù)字式秒表設(shè)計與實現(xiàn)實驗報告_第4頁
電子科技大學(xué)數(shù)字式秒表設(shè)計與實現(xiàn)實驗報告_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

摘要數(shù)字式秒表設(shè)計與實現(xiàn)指導(dǎo)老師:姓名:學(xué)號:

摘要本文主要介紹了基于FPGA使用VHDL語言的數(shù)字式秒表的設(shè)計開發(fā)流程。該設(shè)計以VHDL作為硬件開發(fā)語言,以ISE作為軟件開發(fā)平臺,成功的實現(xiàn)了數(shù)字式秒表的計數(shù)、清零、暫停等功能。并使用了ModelSim仿真軟件對各個單元電路模塊進(jìn)行了仿真,且完成了綜合布局布線,最終下載到電路板上,實際測試結(jié)果良好。關(guān)鍵字:FPGA,VHDL,數(shù)字目錄目錄數(shù)字式秒表設(shè)計與實現(xiàn) 1第一章引言 41.1選題背景 41.2實驗方式 41.3技能培養(yǎng) 4第二章基于FPGA的VHDL設(shè)計流程 52.1 概述 52.2 VHDL語言介紹 52.2.1 VHDL的特點 52.2.2 VHDL開發(fā)流程 62.3 FPGA開發(fā)介紹 82.3.1 FPGA簡介 82.3.2 FPGA開發(fā)流程 8第三章數(shù)字式秒表的軟件開發(fā)環(huán)境 103.1開發(fā)環(huán)境 103.2ModelSim介紹 103.3ISE介紹 11第四章數(shù)字式秒表的設(shè)計與實現(xiàn) 124.1 任務(wù)要求 124.2 實驗條件 124.3 原理框圖 134.4 各模塊的實現(xiàn) 134.4.1 分頻器 134.4.2 輸入控制電路 144.4.3 計時模塊 164.4.4 顯示模塊 184.5 分配引腳和下載實現(xiàn) 194.6 測試結(jié)果 20第五章結(jié)論 21參考文獻(xiàn) 22致謝 23附錄 24附錄1.電子秒表的頂文件 24附錄2分頻器 28附錄3消抖電路 28附錄4控制電路 29附錄5十進(jìn)制計數(shù)器 30附錄9鎖存器 30附錄10顯示電路 31第一章引言第一章引言選題背景《電子技術(shù)綜合實驗》課程通過引入模擬電子技術(shù)和數(shù)字邏輯設(shè)計的綜合應(yīng)用、基于MCU/FPGA/EDA技術(shù)的系統(tǒng)設(shè)計等綜合型設(shè)計型實驗,對學(xué)生進(jìn)行電子系統(tǒng)綜合設(shè)計與實踐能力的訓(xùn)練與培養(yǎng)。通過《電子技術(shù)綜合實驗》課程的學(xué)習(xí),使學(xué)生對系統(tǒng)設(shè)計原理、主要性能參數(shù)的選擇原則、單元電路和系統(tǒng)電路設(shè)計方法及仿真技術(shù)、測試方法擬定及調(diào)測技術(shù)有所了解;使學(xué)生初步掌握電子技術(shù)中應(yīng)用開發(fā)的一般流程,初步建立起有關(guān)系統(tǒng)設(shè)計的基本概念,掌握其基本設(shè)計方法,為將來從事電子技術(shù)應(yīng)用和研究工作打下基礎(chǔ)。實驗方式教師引導(dǎo)下的自主實驗設(shè)計的全過程:方案、電路設(shè)計與仿真、設(shè)計與實現(xiàn)、測試與調(diào)整、總結(jié)報告技能培養(yǎng)數(shù)字電路的綜合設(shè)計應(yīng)用HDL語言FPGA應(yīng)用EDA軟件:ISE、Modelsim硬件電路制作或設(shè)計,調(diào)整與實現(xiàn)設(shè)計文檔撰寫資料查閱第三章電子秒表的軟件開發(fā)環(huán)境第二章基于FPGA的VHDL設(shè)計流程概述數(shù)字秒表是數(shù)字電路中的一個典型應(yīng)用,實際的硬件設(shè)計用到的器件較多,連線比較復(fù)雜,而且會產(chǎn)生比較大的延時,造成測量誤差、可靠性差。秒表的設(shè)計有傳統(tǒng)方法和現(xiàn)代方法,傳統(tǒng)的設(shè)計方法耗時耗功,設(shè)計強(qiáng)度大,且容易出錯,設(shè)計的質(zhì)量不一定是最好的。自然我們考慮到現(xiàn)代方法,即EDA。在EDA設(shè)計工具中,用的最廣泛的是VHDL和VERILOG,當(dāng)然還有其它的。比較VHDL和VERILOG,在頂層設(shè)計方面VHDL優(yōu)于VERILOG,在門級電路設(shè)計方面VERILOG優(yōu)于VHDL。隨著復(fù)雜可編程邏輯器件(CPLD)的廣泛應(yīng)用,以EDA工具作為開發(fā)手段,運(yùn)用VHDL語言,將使整個系統(tǒng)大大簡化,提高整體的性能和可靠性。本次的數(shù)字式秒表設(shè)計主要是先頂層設(shè)計,將秒表的除了外部輸入部分以外,其余全部在一片F(xiàn)PGA芯片上實現(xiàn),整個系統(tǒng)非常精簡,而且具有靈活的現(xiàn)場可更改性。在不更改硬件電路的基礎(chǔ)上,對系統(tǒng)進(jìn)行各種改進(jìn)還可以進(jìn)一步提高系統(tǒng)的性能。該數(shù)字式秒表具有高速、精確、可靠、抗干擾性強(qiáng)和現(xiàn)場可編程等優(yōu)點。VHDL語言介紹VHDL語言是一種硬件描述語言(HardwareDescriptionLanguage,HDL),主要用在可編程邏輯器件(CPLD/FPGA)和專用集成電路(ASIC)兩個領(lǐng)域。寫好的VHDL程序既可以下載到可編程邏輯器件中實現(xiàn)電路功能,又可以提交到工廠用于ASIC芯片的流片。VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。VHDL程序結(jié)構(gòu)的特點是將一項工程設(shè)計或設(shè)計實體(可以是元件、電路模塊或系統(tǒng))分成外部和內(nèi)部兩部分,外部即可視部分,對設(shè)計實體和端口引腳進(jìn)行聲明;內(nèi)部即不可視部分,描述模塊的功能和算法。VHDL從實體與外部的接口以及實體內(nèi)部的功能與結(jié)構(gòu)這兩個方面來描述實體,設(shè)計實體定義成功后就可生成共享功能模塊。在頂層綜合或其他設(shè)計中就可以直接調(diào)用這個實體模塊。這種將設(shè)計實體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計的基本點。VHDL的特點VHDL的特點:①具有更強(qiáng)的行為描述能力VHDL的硬件描述能力很強(qiáng),可以用于從門級、電路級直至系統(tǒng)級的描述、仿真、綜合和調(diào)試,從邏輯功能和行為上描述和設(shè)計大規(guī)模系統(tǒng),避開了具體器件內(nèi)部結(jié)構(gòu)。②支持層次化和模塊化設(shè)計這是運(yùn)用EDA工具進(jìn)行電路和系統(tǒng)設(shè)計區(qū)別于傳統(tǒng)設(shè)計方法的重要方面,簡化了系統(tǒng)設(shè)計,優(yōu)化了系統(tǒng)結(jié)構(gòu),提高了系統(tǒng)可靠性。③可仿真與可綜合仿真是指代碼模擬硬件的行為,綜合是指將代碼轉(zhuǎn)化成可物理實現(xiàn)的電路結(jié)構(gòu)。所有的VHDL語句都能用于仿真,但有一部分VHDL語句不能進(jìn)行綜合、翻譯成與之對應(yīng)的硬件電路,并在邏輯器件上實現(xiàn)。VHDL強(qiáng)大的仿真建模功能使設(shè)計者能在系統(tǒng)設(shè)計的各個階段都能十分方便地對數(shù)字系統(tǒng)進(jìn)行仿真驗證。④系統(tǒng)設(shè)計與硬件結(jié)構(gòu)無關(guān)VHDL語言對設(shè)計的描述具有相對獨立性,設(shè)計者可以進(jìn)行獨立的設(shè)計,可以不懂硬件的結(jié)構(gòu),也不必了解最終設(shè)計實現(xiàn)的目標(biāo)器件是什么。⑤具有很強(qiáng)的移植能力VHDL語言描述的設(shè)計通用性好,可以被支持VHDL標(biāo)準(zhǔn)的不同工具所支持,具有很強(qiáng)的移植能力。⑥VHDL本身的生命周期長。VHDL的硬件描述與工藝無關(guān),不會因工藝變化而過時,而且與工藝技術(shù)有關(guān)的參數(shù)可以用VHDL提供的屬性加以描述,當(dāng)生產(chǎn)工藝改變時,只需修改程序中相應(yīng)屬性參數(shù)即可。VHDL語言具有強(qiáng)大的語言功能、硬件描述能力和移植能力及設(shè)計與器件無關(guān)的特性,并且VHDL語言程序易于共享和復(fù)用,因此得到了十分廣泛的應(yīng)用。VHDL開發(fā)流程采用VHDL語言對硬件電路進(jìn)行描述的過程應(yīng)該遵循一定的流程,通常情況下,其流程如圖2.2.2-1所示。圖2.2.2-1VHDL設(shè)計電路從流程圖可以看出,采用VHDL語言進(jìn)行硬件電路設(shè)計的開發(fā)步驟主要包括以下幾步:①接受電路設(shè)計任務(wù)在進(jìn)行硬件電路系統(tǒng)設(shè)計之前,首先作出總體設(shè)計方案,然后給出相應(yīng)的硬件電路系統(tǒng)設(shè)計指標(biāo),最后將總體方案中各部分電路設(shè)計任務(wù)和要求下達(dá)給相應(yīng)的設(shè)計部門。②確定電路具體功能設(shè)計人員要具體分析電路的設(shè)計要求,確定其要實現(xiàn)的具體功能。③劃分模塊、編寫程序利用VHDL語言設(shè)計硬件電路通常采用自頂向下的設(shè)計方法,從電路設(shè)計的總體要求出發(fā),先確定頂層模塊并進(jìn)行頂層模塊的設(shè)計,然后將頂層模塊劃分為不同的完成一定邏輯功能的子功能模塊,最后再詳細(xì)設(shè)計子功能模塊。模塊劃分的好壞將會直接影響到最終的電路設(shè)計,設(shè)計人員在這一步應(yīng)該花費一定的時間,保證模塊劃分的最優(yōu)化。@VHDL語言程序模擬VHDL語言程序模擬即功能仿真,是利用仿真軟件對設(shè)計的邏輯功能進(jìn)行驗證,可以在設(shè)計的早期發(fā)現(xiàn)電路設(shè)計上的缺陷和錯誤,節(jié)省設(shè)計時間、縮短開發(fā)周期。⑤綜合、優(yōu)化和布局布線綜合的作用簡單的說就將電路設(shè)計的較高級抽象層次的VHDL語言描述轉(zhuǎn)化成底層電路表示。優(yōu)化的作用是將電路設(shè)計的時延縮到最小和有效利用資源。布局布線的作用是將通過綜合和優(yōu)化所得到的邏輯規(guī)劃到一個邏輯器件的邏輯結(jié)構(gòu)中,然后將各邏輯單元放置到相應(yīng)優(yōu)化的位置,最后再進(jìn)行邏輯單元之間、邏輯單元和I/O之間的布線,以消除布線延遲。⑥布局布線后的程序模擬布局布線后的程序模擬又稱后仿真,既驗證設(shè)計的邏輯功能,又驗證時序。如果時序不能滿足要求,就需要回到前面的步驟重新進(jìn)行操作。⑦生成器件編程文件和進(jìn)行器件編程顧名思義,器件編程是針對可編程邏輯器件進(jìn)行的操作,具體過程是:將設(shè)計描述經(jīng)過編譯、綜合、優(yōu)化和布局布線的結(jié)果,經(jīng)過一定的映射轉(zhuǎn)化成一個器件編程所用的數(shù)據(jù)文件格式,然后通過燒片器或者下載電纜將數(shù)據(jù)文件下載到指定的可編程邏輯器件中去的過程。FPGA開發(fā)介紹FPGA簡介FPGA是20世紀(jì)90年代發(fā)展起來的,其密度已超過25X104f-JA平,內(nèi)部門延時小于3ns。這種器件完成某種特定的功能是完全由用戶通過軟件進(jìn)行配置和編程來實現(xiàn)的,而且可以反復(fù)擦寫,它具有芯片邏輯資源豐富、成本低、功耗小等優(yōu)勢。此外,它的另一個突出特點是現(xiàn)場編程,在FPGA工作的現(xiàn)場,可以不通過計算機(jī)把存于FPGA外的ROM中的編程數(shù)據(jù)加載給FPGA,通過簡單的設(shè)備就能改變FPGA中的編程數(shù)據(jù),從而改變FPGA執(zhí)行的邏輯功能。這種方法也叫做ICR(haCircuitReconfiguration,在電路上直接配置)編程。FPGA的這個特點為工程技術(shù)人員維修、改進(jìn)、更新電路邏輯功能提供了方便。大部分FPGA采用基于SRAM的查找表(LUT,Look.Up.Table)結(jié)構(gòu)。查找表本質(zhì)上就是一個RAM。若邏輯函數(shù)具有11個輸入項的話,就需要由輸入個數(shù)為n、容量為2n個位的RAM單元存放函數(shù)值,RAM的地址線起輸入線的作用,地址即輸入變量,RAM輸出為邏輯函數(shù)值。每輸入一個信號進(jìn)行邏輯運(yùn)算就等于輸入一個地址進(jìn)行查表,地址所對應(yīng)的內(nèi)容就是輸出。FPGA開發(fā)流程圖2.3.2-1FPGA開發(fā)流程對于目標(biāo)器件為FPGA和CPLD的HDL設(shè)計,其工程設(shè)計的基本流程如圖圖2.3.2-1所示?,F(xiàn)具體說明如下:1、文本編輯:用任何文本編輯器都可以進(jìn)行,也可以用專用的HDL編輯環(huán)境。通常VHDL文件保存為.vhd文件2、功能仿真:將文件調(diào)入HDL仿真軟件進(jìn)行功能仿真,檢查邏輯功能是否正確(也叫前仿真,對簡單的設(shè)計可以跳過這一步,只在布線完成以后,進(jìn)行時序仿真)3、邏輯綜合:將源文件調(diào)入邏輯綜合軟件進(jìn)行綜合,即把語言綜合成最簡的布爾表達(dá)式。邏輯綜合軟件會生成.edf(edif)的EDA工業(yè)標(biāo)準(zhǔn)文件。4、布局布線:將.edf文件調(diào)入PLD廠家提供的軟件中進(jìn)行布線,即把設(shè)計好的邏輯安放到PLD/FPGA內(nèi)。5、時序仿真:需要利用在布局布線中獲得的精確參數(shù),用仿真軟件驗證電路的時序。(也叫后仿真)6、編程下載:確認(rèn)仿真無誤后,將文件下載到芯片中7、硬件測試:硬件測試的目的是為了在更真實的環(huán)境中檢驗HDL設(shè)計的運(yùn)行情況,特別是對于HDL程序設(shè)計上不是十分規(guī)范,語義上含有一定歧義的程序。第三章數(shù)字式秒表的軟件開發(fā)環(huán)境本章主要介紹項目中將要用到了一系列軟件,包括用于VHDL語言編寫和編譯的ISE軟件和用于程序仿真的仿真軟件ModelSim。3.1開發(fā)環(huán)境在考慮各種情況后,在本次設(shè)計中,由于選擇的FPGA芯片是由Xilinx公司生產(chǎn)的,所以我們主要使用ModelSim和ISE軟件進(jìn)行仿真和綜合。3.2ModelSim介紹ModelSim是業(yè)界最優(yōu)秀的HDL語言仿真器,它提供最友好的調(diào)試環(huán)境,是唯一的單內(nèi)核支持VHDL和Verilog混合仿真的仿真器。是作FPGA/ASIC設(shè)計的RTL級和門級電路仿真的首選,它采用直接優(yōu)化的編譯技術(shù)、TcFTk技術(shù)、單一內(nèi)核仿真技術(shù),編譯仿真速度快,編譯的代碼與平臺無關(guān),便于保護(hù)IP核,個性化的圖形界面和用戶接口,為用戶加快調(diào)錯提供強(qiáng)有力的手段。全面支持VHDL和Verilog語言的IEEE標(biāo)準(zhǔn),支持C/C++功能調(diào)用和調(diào)試。ModelSim專業(yè)版,具有快速的仿真性能和最先進(jìn)的調(diào)試能力,全面支持UNIX(包括64位)、Linux和Windows平臺。主要特點:RTL和門級優(yōu)化,本地編譯結(jié)構(gòu),編譯仿真速度快;單內(nèi)核VHDL和Verilog混合仿真;源代碼模版和助手,項目管理;集成了性能分析、波形比較、代碼覆蓋等功能;數(shù)據(jù)流ChaseX;SignalSpy;C和Tcl/Tk接121,C調(diào)試。是業(yè)界唯一單一內(nèi)核支持VHDL、VerilogHDL和SystemC混合仿真的仿真器。同時也支持業(yè)界最廣泛的標(biāo)準(zhǔn)如Verilog2001、SystemVerilog等,內(nèi)部集成了用于C/C++,PLI/FLI和SystemC的集成C調(diào)試器。支持眾多的ASIC和FPGA廠家?guī)?,可以用于FPGA和ASIC設(shè)計的RTL級和門級電路仿真。ModelSiml8J最大的特點是其強(qiáng)大的調(diào)試功能:先進(jìn)的數(shù)據(jù)流窗121,可以迅速追蹤到產(chǎn)生不定或者錯誤狀態(tài)的原因;性能分析工具幫助分析性能瓶頸,加速仿真;代碼覆蓋率檢查確保測試的完備;多種模式的波形比較功能;先進(jìn)的SignalSpy功能,可以方便地訪問VHDL或者VHDL和Verilog混合設(shè)計中的底層信號;支持加密IP;可以實現(xiàn)與Matlab的Simulink的聯(lián)合仿真。ModelSim分幾種不同的版本:SE、PE、LE和OEM,其中SE是最高級的版本而集成在Actel、Atmel、Altera、Xilinx以及Lattice等FPGA廠商設(shè)計工具中的均是其OEM版本。SE版和OEM版在功能和性能方面有較大差別,比如對于大家都關(guān)心的仿真速度問題,以Xilinx公司提供的OEM版本ModelSimXE為例,對于代碼少于40000行的設(shè)計,ModelSimSE比ModelSimXE要快10倍;對于代碼超過40000行的設(shè)計,ModelSimSE要比ModelSimXE快近40倍。3.3ISE介紹ISEt是Xilinx公司提供的集成化FPGA開發(fā)軟件,它的主要功能包括設(shè)計輸入、綜合、仿真、實現(xiàn)和下載。(1)設(shè)計輸入ISE軟件提供的設(shè)計輸入工具包括用于HDL代碼輸入和報告查看的ISE文本編輯器(TextEditor),用于原理圖編輯的工具ECS(EngineeringCaptureSystem),用于PCORE的COREGenerator,用于狀態(tài)機(jī)設(shè)計的StateCAD,以及用于約束文件編輯的ConstraintEditor等。(2)綜合ISE的綜合工具不但包括了Xilinx自身提供的綜合工具xsr,同時還可以集成MentorGraphics公司的LeonardoSpectrum和Synplicity公司的Synplify。(3)仿真ISE本身自帶了圖形化波形編輯功能的仿真工具HDLBencher,同時又提供了使用ModelTechnology公司的ModelSim進(jìn)行仿真的接口。(4)實現(xiàn)ISE的實現(xiàn)功能包括了翻譯(Translate)、映射(Map)、布局布線(PlaceandRoute)等。(5)下載下載功能包括了BitGen,用于將布局布線后的設(shè)計文件轉(zhuǎn)換為比特流(Bitstream)文件。還包括了iMPACT功能,用于進(jìn)行設(shè)備配置和通信,控制將程序燒寫到FPGA芯片中去。使用ISE進(jìn)行FPGA開發(fā)大致可以分為3個步驟。(1)設(shè)計輸入和仿真設(shè)計輸入(DesignEntry)是指以HDL代碼、原理圖、波形圖以及狀態(tài)機(jī)的形式輸入設(shè)汁源文件,而設(shè)計仿真(Simdmion)是指通過仿真工具對設(shè)計的整體模塊或局部模塊進(jìn)行仿真來檢驗設(shè)計的功能和性能。(2)用戶約束條件、綜合和實現(xiàn)用戶約束條件(UserConstraints)的作用是對綜合、實現(xiàn)過程進(jìn)行控制,滿足速度、面積、引腳位置等需求。編輯約束條件又包括了4個子項,意義分別為:創(chuàng)建時間約束、配置引腳、創(chuàng)建面積約束、以文本方式編輯約束。綜合(Synthesize)是FPGA設(shè)計流程中的重要環(huán)節(jié),綜合結(jié)果的優(yōu)劣直接影響到設(shè)計的最終性能。ISE自帶的綜合工具是XST,同時它也支持Synplify/SynplifyPro等第三方綜合工具,但是由于Xilinx對于其器件的底層最為了解,所以使用XST綜合往往會得到比較滿意的結(jié)果。綜合包含了3個子項,意義分別為:查看綜合報告、查看綜合器件的RTL級原理圖和檢查語法。實現(xiàn)(Implementation)過程也包含了3個子項,.ImplementDesign項所對應(yīng)的子項,意義分別是:翻譯、映射和布局布線。需要注意,進(jìn)行實現(xiàn)步驟之前必須進(jìn)行約束條件的編輯,否則實現(xiàn)可能會出錯。(3)硬件編程硬件編程(Programming)是指生成編輯比特流文件bit,并將其下載到FPGA芯片內(nèi)部的過程。硬件編程對應(yīng)圖2--5所示的GenerateProgrammingFile項。第四章電子秒表的設(shè)計與實現(xiàn)第四章數(shù)字式秒表的設(shè)計與實現(xiàn)任務(wù)要求實驗條件原理框圖按照以上需求,整個電路的原理圖如圖4.3-1所示:圖4.3-1電路原理圖從原理圖可知,系統(tǒng)需要以下模塊:1.分頻器:對晶體振蕩器產(chǎn)生的時鐘進(jìn)行分頻,產(chǎn)生時間基準(zhǔn)信號。2.計數(shù)器:對時間基準(zhǔn)脈沖進(jìn)行計數(shù),完成計時功能。3.數(shù)據(jù)鎖存器:鎖存數(shù)據(jù),使顯示保持暫停。4.控制器:控制計數(shù)器的運(yùn)行、停止以及復(fù)位,產(chǎn)生鎖存器的使能信號。5.掃描顯示的控制電路:包括掃描計數(shù)器、數(shù)據(jù)選擇器和七段譯碼器,控制8個數(shù)碼管以掃描方式,顯示結(jié)果。6.按鍵消抖電路:消除按鍵輸入信號,輸出單脈沖。各模塊的實現(xiàn)分頻器XC3S200A芯片的外部有源晶振頻率為48MHz,考慮到系統(tǒng)的穩(wěn)定性,本設(shè)計選擇了1KHz的信號作為各模塊的時鐘信號,即對晶振信號進(jìn)行1/480000分頻。對晶振時鐘信號進(jìn)行計數(shù),對每個上升沿,計數(shù)器加1;當(dāng)計數(shù)達(dá)到47999時,計數(shù)清零,從頭開始計數(shù),最后獲取計數(shù)的第15位為計數(shù)的輸出信號仿真結(jié)果如圖4.4.1.2-1所示,時鐘周期為48000。圖4.4.1.2-11KHZ信號仿真圖輸入控制電路輸入控制模塊的功能是識別有效地按鍵輸入和實現(xiàn)輸入的按鍵信號對電子秒表不同狀態(tài)的控制。,秒表的狀態(tài)可分為計數(shù)開/關(guān),顯示鎖定開/關(guān)和清零??嫉接袃蓚€輸入按鍵,所以必須有輸入控制電路,同時考慮到按下按鍵以及松開按鍵會出現(xiàn)抖動,所以必須設(shè)計防抖動電路。即按鍵輸入信號,必須先經(jīng)過防抖電路,然后進(jìn)入控制電路。消抖電路由于按鍵輸入,在按下過程中電平可能會有一個不確定的抖動狀態(tài)。由于識別的有效按鍵電平為持續(xù)的低電平,因此設(shè)計一消抖電路,頂層設(shè)計框圖如下:消抖電路的仿真結(jié)果如下所示:由圖可見在1khz的驅(qū)動下,消抖電路能夠做到每按一次按鍵只輸出一個時鐘周期,達(dá)到了按鍵消抖的目的。在實際板子上應(yīng)用的時候,也還要根據(jù)按鍵實際情況來調(diào)整一下計數(shù)的周期,從而達(dá)到最佳的效果。控制電路圖4.4.2.2-1控制電路狀態(tài)圖兩個去抖動電路傳入兩個信號,將其組合成一個2bit輸入(Start/Stop為高位,Split/Reset為低位),分別代表4個狀態(tài):=1\*GB3①“00”狀態(tài):鎖定關(guān),計數(shù)關(guān),清零關(guān),輸出“111”;=2\*GB3②“10”狀態(tài):鎖定關(guān),計數(shù)開,清零關(guān),輸出“101”;=3\*GB3③“11”狀態(tài):鎖定開,計數(shù)開,清零關(guān),輸出“001”;=4\*GB3④“01”狀態(tài):鎖定關(guān),計數(shù)關(guān),清零開,輸出“110”;處在“01”狀態(tài)時,過一個時鐘周期自動回到“00”狀態(tài)。狀態(tài)圖如圖4.4.2.2-1所示。源程序為見附錄。仿真結(jié)果如圖4.4.2.2-2所示,圖4.4.2.2-2控制電路仿真計時模塊由設(shè)計指標(biāo)可知,秒表由六位顯示最大計時為59min59s99,所以需要4個10進(jìn)制計數(shù)器,還有兩個6進(jìn)制計數(shù)器。其中有暫定,清零的功能。整個計時模塊的頂層設(shè)計電路圖如下:十進(jìn)制計數(shù)器計數(shù)器輸入端每識別一個上升沿,就依次從“0000”計數(shù)到“1001”。當(dāng)計數(shù)變?yōu)椤?001”時,進(jìn)位端從‘1’變?yōu)椤?’,在下個輸入的上升沿“1001”變?yōu)椤?000”,進(jìn)位端恢復(fù)‘1’。如此,將進(jìn)位端連入下一級的輸入端時,可以實現(xiàn)低位由9變?yōu)?時高位進(jìn)1。當(dāng)清零信號有效時,計數(shù)器強(qiáng)制將計數(shù)值變?yōu)椤?000”。源程序為見附錄.圖4.4.3.1-1十進(jìn)制計數(shù)器仿真圖如圖4.4.3.1-1所示,計數(shù)周期為10。六進(jìn)制計數(shù)器六進(jìn)制計數(shù)范圍是“0000”到“0110”,在“0110”時進(jìn)位端發(fā)生變低,之后計數(shù)變?yōu)椤?000”,進(jìn)位端恢復(fù)高電平。對于六進(jìn)制來說,三個二進(jìn)制位就能夠滿足計數(shù)需要,但是考慮到后面譯碼器的輸入均為四個二進(jìn)制位,所以計數(shù)用4bit,方便譯碼。源程序為見附錄。圖4.4.3.2-1六進(jìn)制計數(shù)器仿真圖如圖4.4.3.2-1所示,計數(shù)周期為6。計數(shù)器組合由于顯示的最大計數(shù)為59min59s99,所以需要四位十進(jìn)制計數(shù)器,以及二位六進(jìn)制計數(shù)器。所以需要將六個計數(shù)器組合起來,由低位計數(shù)達(dá)到最大值,向前一位進(jìn)1;由于輸入的是1khz信號,這里用另外用了一個模10計數(shù)器將1khz信號分頻到100hz,最后組合的電路模塊連接圖如下:圖4.4.3.3-1計數(shù)器組合仿真圖鎖存器鎖存器實現(xiàn)電子秒表的顯示鎖定功能。其輸入時鐘為外部時鐘(1kHz)。當(dāng)鎖定信號無效時,在每個時鐘上升沿將輸入的數(shù)據(jù)信號輸出;當(dāng)鎖定信號有效時,輸出的數(shù)據(jù)信號保持當(dāng)前值,無視輸入數(shù)據(jù)的改變,源程序見附錄。圖4.4.3.4-1鎖存器仿真圖放著結(jié)果如圖4.4.3.4-1所示,當(dāng)輸入信號為高電平時,輸出和輸入信號相同;當(dāng)輸入信號為低電平時,輸出信號保持當(dāng)前值。顯示模塊顯示模塊主要完成顯示掃描和編碼翻譯的功能。其中需要用到掃描器,多路選擇器和譯碼器,時鐘信號連接一個掃描器,用計數(shù)原理輸出3bit掃描信號。利用3-8譯碼器的原理,實現(xiàn)對八位數(shù)碼管的掃描,輸出位選信號;另一方面根據(jù)相應(yīng)的位選信號,將要現(xiàn)實的bacd碼轉(zhuǎn)換成數(shù)碼管的七段顯示碼輸出,整個顯示模塊的頂層電路圖如下:掃描器掃描器實現(xiàn)了八位數(shù)碼管共用一組輸入數(shù)據(jù)的可能性。其通過一個計數(shù)器,在每個時鐘信號的上升沿,其輸出的三位二進(jìn)制信號加一,從“000”計數(shù)到“111”。當(dāng)輸出為“111”時,下一個時鐘上升沿輸出變?yōu)椤?00”,關(guān)鍵的程序代碼如下:weixuan_code<=weixuan_code+1whenclk'eventandclk='1';圖4.4.4.1-1掃描器仿真圖掃描器仿真圖如圖4.4.4.1-1所示,掃描器根據(jù)時鐘信號從“000”計數(shù)到“111”。多路選擇器多路選擇器輸入八組四位數(shù)據(jù)信號和一組三位掃描信號,通過掃描信號的狀態(tài)選擇相應(yīng)的數(shù)據(jù)信號進(jìn)行輸出源程序,源程序見附錄。圖4.4.4.2-1多路選擇器仿真圖多路選擇器放著結(jié)果如圖4.4.4.2-1所示,多路選擇器根據(jù)掃描信號的輸入選擇相應(yīng)的信號輸出。分配引腳和下載實現(xiàn)全部仿真通過后,就運(yùn)行ISE的設(shè)計實現(xiàn),然后再打開XILINXPACE,在里面分配引腳,即實現(xiàn)設(shè)計的輸入輸出端口與實際芯片的輸入輸出端口的對應(yīng)連接。比如七段LED管的控制信號就連接到實際電路的七個引腳。需要注意的是一些端口是固定的,不能胡亂的連接。比如時基信號即石英振蕩器所提供的信號就只能由T8輸入。一切都準(zhǔn)備就緒后就,便可開始下載了.分配引腳的源文件如下:NET"clk_raw"LOC=N9;NET"duanxuan<7>"LOC=B12;NET"duanxuan<6>"LOC=A11;NET"duanxuan<5>"LOC=C11;NET"duanxuan<4>"LOC=C10;NET"duanxuan<3>"LOC=A10;NET"duanxuan<2>"LOC=B10;NET"duanxuan<1>"LOC=A9;NET"duanxuan<0>"LOC=C9;NET"split_reset"LOC=F4;NET"start_stop"LOC=G5;NET"weixuan<0>"LOC=N13;NET"weixuan<1>"LOC=M13;NET"weixuan<2>"LOC=L13;NET"weixuan<3>"LOC=K13;NET"weixuan<4>"LOC=J13;NET"weixuan<5>"LOC=J12;NET"weixuan<6>"LOC=H13;NET"weixuan<7>"LOC=G13;測試結(jié)果這個電路完成后的最頂層模塊電路圖如下:在成功下載并運(yùn)行后,進(jìn)行了各按鈕功能的檢測(包括計數(shù)、暫停、復(fù)位、清零等功能的檢查),以及與標(biāo)準(zhǔn)時間進(jìn)行了對比,符合實驗預(yù)估的各項指標(biāo),成功完成了數(shù)字式秒表的設(shè)計與實現(xiàn)。第五章結(jié)論第五章結(jié)論本文主要介紹了利用VHDL語言完成基于FPGA的數(shù)字秒表的設(shè)計與實現(xiàn)。詳細(xì)介紹了設(shè)計原理,設(shè)計方案以及各模塊的設(shè)計過程及其實現(xiàn)的功能,并利用ISE和ModelSim對設(shè)計進(jìn)行了仿真,分析,綜合,并最終下載實際電路板中,成功實現(xiàn)了數(shù)字式秒表的所有功能。致謝參考文獻(xiàn)[1]朱正偉.EDA技術(shù)及應(yīng)用.清華大學(xué)出版社.2009[2]ISE開發(fā)流程[3]Modelsim仿真流程致謝首先必須感謝的是劉曦老師對我的教導(dǎo),在實驗過程中對我的幫助,在此對劉曦老師致于最衷心的感謝。其次感謝我的同學(xué)們,在我遇到問題時,能給我分析以及解決。最后感謝電子技術(shù)綜合實驗這門課程,讓我從中學(xué)到了很多的東西。附錄附錄附錄1.電子秒表的頂文件--Company:--Engineer:----CreateDate:11:03:0911/18/2015--DesignName:--ModuleName:my_watch-Behavioral--ProjectName:--TargetDevices:--Toolversions:--Description:Dependencies:Revision:Revision0.01-FileCreatedAdditionalComments:--#OBUF:16--=========================================================================Deviceutilizationsummary:SelectedDevice:3s200aft256-5NumberofSlices:61outof17923%--NumberofSliceFlipFlops:79outof35842%--Numberof4inputLUTs:109outof35843%--NumberofIOs:19--NumberofbondedIOBs:19outof1959%--NumberofGCLKs:3outof2412%libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;UncommentthefollowinglibrarydeclarationifinstantiatinganyXilinxprimitivesinthiscode.--libraryUNISIM;--useUNISIM.VComponents.all;entitymy_watchisport(clk_raw,start_stop,split_reset:instd_logic; weixuan:outstd_logic_vector(7downto0); duanxuan:outstd_logic_vector(7downto0)); endmy_watch;architectureBehavioralofmy_watchis COMPONENTfenpin PORT( clk_raw:INstd_logic; clk_1kh:OUTstd_logic ); ENDCOMPONENT; COMPONENTdouxiao PORT( clk:INstd_logic; key_in:INstd_logic; key_out:OUTstd_logic ); ENDCOMPONENT; COMPONENTcounter PORT( clk:INstd_logic; rst:INstd_logic; count_en:INstd_logic; seg1:OUTstd_logic_vector(3downto0); seg2:OUTstd_logic_vector(3downto0); seg3:OUTstd_logic_vector(3downto0); seg4:OUTstd_logic_vector(3downto0); seg5:OUTstd_logic_vector(3downto0); seg6:OUTstd_logic_vector(3downto0) ); ENDCOMPONENT; COMPONENTcontrol PORT( clk:INstd_logic; start_stop:INstd_logic; reset_split:INstd_logic; reset:OUTstd_logic; counter_en:OUTstd_logic; latch_en:OUTstd_logic ); ENDCOMPONENT; COMPONENTlatch PORT( latch_en:INstd_logic; cin1:INstd_logic_vector(3downto0); cin2:INstd_logic_vector(3downto0); cin3:INstd_logic_vector(3downto0); cin4:INstd_logic_vector(3downto0); cin5:INstd_logic_vector(3downto0); cin6:INstd_logic_vector(3downto0); cout1:OUTstd_logic_vector(3downto0); cout2:OUTstd_logic_vector(3downto0); cout3:OUTstd_logic_vector(3downto0); cout4:OUTstd_logic_vector(3downto0); cout5:OUTstd_logic_vector(3downto0); cout6:OUTstd_logic_vector(3downto0) ); ENDCOMPONENT; COMPONENTdisplay PORT( clk:INstd_logic; cin1:INstd_logic_vector(3downto0); cin2:INstd_logic_vector(3downto0); cin3:INstd_logic_vector(3downto0); cin4:INstd_logic_vector(3downto0); cin5:INstd_logic_vector(3downto0); cin6:INstd_logic_vector(3downto0); seg:OUTstd_logic_vector(7downto0); weixuan:OUTstd_logic_vector(7downto0) ); ENDCOMPONENT;signalclk_1kh,net_start,net_split,net_reset,net_counter_en,net_latch_en:std_logic;signalnet_seg1,net_seg2,net_seg3,net_seg4,net_seg5,net_seg6:std_logic_vector(3downto0);signalnet_out1,net_out2,net_out3,net_out4,net_out5,net_out6:std_logic_vector(3downto0);begin u0:fenpinPORTMAP( clk_raw=>clk_raw, clk_1kh=>clk_1kh ); u2:douxiaoPORTMAP( clk=>clk_1kh, key_in=>start_stop, key_out=>net_start ); u3:douxiaoPORTMAP( clk=>clk_1kh, key_in=>split_reset, key_out=>net_split ); u4_control:controlPORTMAP( clk=>clk_1kh, start_stop=>net_start, reset_split=>net_split, reset=>net_reset, counter_en=>net_counter_en, latch_en=>net_latch_en ); u5:counterPORTMAP( clk=>clk_1kh, rst=>net_reset, count_en=>net_counter_en, seg1=>net_seg1, seg2=>net_seg2, seg3=>net_seg3, seg4=>net_seg4, seg5=>net_seg5, seg6=>net_seg6 ); u6:latchPORTMAP( latch_en=>net_latch_en, cin1=>net_seg1, cin2=>net_seg2, cin3=>net_seg3, cin4=>net_seg4, cin5=>net_seg5, cin6=>net_seg6, cout1=>net_out1, cout2=>net_out2, cout3=>net_out3, cout4=>net_out4, cout5=>net_out5, cout6=>net_out6 ); u7:displayPORTMAP( clk=>clk_1kh, cin1=>net_out1, cin2=>net_out2, cin3=>net_out3, cin4=>net_out4, cin5=>net_out5, cin6=>net_out6, seg=>duanxuan, weixuan=>weixuan );附錄2分頻器signala1:std_logic_vector(15downto0):=(others=>'0');beginprocess(clk_raw)isbeginifrising_edge(clk_raw)thenifa1=47999then a1<=(others=>'0'); else a1<=a1+1; endif; endif;endprocess;clk_1kh<=a1(15);附錄3消抖電路signalcnt:std_logic_vector(2downto0):=(others=>'0');signalk1,k2:std_logic;begin p1:process(key_in,clk) begin ifkey_in='1'then cnt<="000"; elsiffalling_edge(clk)then ifcnt/=7then cnt<=cnt+1; endif; endif; endprocess; p2:process(clk) begin iffalling_edge(clk)then ifcnt/=7then k1<='0'; else k1<='1'; endif; k2<=k1; endif; endprocess; p3:key_out<=(notk1)andk2; 附錄4控制電路process(c_state,condition)begin casec_stateis when"101"=> caseconditionis when"10"=>n_state<="011"; whenothers=>n_state<="101"; endcase; when"011"=> caseconditionis when"01"=>n_state<="010"; wh

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論