電子科技大學(xué)數(shù)字式秒表設(shè)計與實現(xiàn) 實驗報告材料
《電子科技大學(xué)數(shù)字式秒表設(shè)計與實現(xiàn) 實驗報告材料》由會員分享,可在線閱讀,更多相關(guān)《電子科技大學(xué)數(shù)字式秒表設(shè)計與實現(xiàn) 實驗報告材料(32頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、word 數(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,VHD
2、L,數(shù)字 32 / 32 目錄 數(shù)字式秒表設(shè)計與實現(xiàn)1 第一章引言4 1.1 選題背景4 1.2 實驗方式4 1.3 技能培養(yǎng)4 第二章基于FPGA的VHDL設(shè)計流程5 2.1概述5 2.2VHDL語言介紹5 2.2.1VHDL的特點5 2.2.2VHDL開發(fā)流程6 2.3FPGA開發(fā)介紹8 2.3.1FPGA簡介8 2.3.2FPGA開發(fā)流程8 第三章數(shù)字式秒表的軟件開發(fā)環(huán)境10 3.1開發(fā)環(huán)境10 3.2ModelSim介紹10 3.3 ISE介紹11 第四章數(shù)字式秒表的設(shè)計與實現(xiàn)12 4.1任務(wù)要求12 4.2實驗條件12 4.3原理框圖13
3、 4.4各模塊的實現(xiàn)13 4.4.1分頻器13 4.4.2輸入控制電路14 4.4.3計時模塊16 4.4.4顯示模塊18 4.5分配引腳和下載實現(xiàn)19 4.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 第一章引言 1.1 選題背景 《電子技術(shù)綜合實驗》課程通過引入模擬電子技術(shù)和數(shù)字邏輯設(shè)計的綜合應(yīng)用、基于MCU/FPGA/EDA技術(shù)的系統(tǒng)設(shè)計等綜合型設(shè)計型實驗,對學(xué)生進(jìn)
4、行電子系統(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ǔ)。 1.2 實驗方式 n 教師引導(dǎo)下的自主實驗 n 設(shè)計的全過程:方案、電路設(shè)計與仿真、設(shè)計與實現(xiàn)、測試與調(diào)整、總結(jié)報告 1.3 技能培養(yǎng) n 數(shù)字電路的綜合設(shè)計應(yīng)用 n HDL語言 n FPGA應(yīng)用 n EDA軟件:ISE、Modelsi
5、m n 硬件電路制作或設(shè)計,調(diào)整與實現(xiàn) n 設(shè)計文檔撰寫 n 資料查閱 第二章基于FPGA的VHDL設(shè)計流程 第2章 2.1 概述 數(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è)計方面VERILO
6、G優(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)點。 2.2 VHDL語言介紹 VHDL語言是一種硬件描述語言(Hardware DescriptionLanguage,HDL),主要用在可編程邏輯器件(CPLD
7、/FPGA)和專用集成電路(ASIC)兩個領(lǐng)域。寫好的VHDL 程序既可以下載到可編程邏輯器件中實現(xiàn)電路功能,又可以提交到工廠用于ASIC芯片的流片。VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。VHDL程序結(jié)構(gòu)的特點是將一項工程設(shè)計或設(shè)計實體(可以是元件、電路模塊或系統(tǒng))分成外部和部兩部分,外部即可視部分,對設(shè)計實體和端口引腳進(jìn)行聲明;部即不可視部分,描述模塊的功能和算法。VHDL從實體與外部的接口以及實體部的功能與結(jié)構(gòu)這兩個方面來描述實體,設(shè)計實體定義成功后就可生成共享功能模塊。在頂層綜合或其他設(shè)計中就可以直接調(diào)用這個實體模塊。這種將設(shè)計實體分成外部分的概念是VHDL系統(tǒng)設(shè)計的基
8、本點。 2.2.1 VHDL的特點 VHDL的特點: ①具有更強(qiáng)的行為描述能力 VHDL的硬件描述能力很強(qiáng),可以用于從門級、電路級直至系統(tǒng)級的描述、仿真、 綜合和調(diào)試,從邏輯功能和行為上描述和設(shè)計大規(guī)模系統(tǒng),避開了具體器件部結(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)。VH
9、DL強(qiáng)大的仿真建模功能使設(shè)計者能在系統(tǒng)設(shè)計的各個階段都能十分方便地對數(shù)字系統(tǒng)進(jìn)行仿真驗證。 ④系統(tǒng)設(shè)計與硬件結(jié)構(gòu)無關(guān) VHDL語言對設(shè)計的描述具有相對獨(dú)立性,設(shè)計者可以進(jìn)行獨(dú)立的設(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)大的語言功能、硬件
10、描述能力和移植能力及設(shè)計與器件無關(guān)的特性,并且VHDL語言程序易于共享和復(fù)用,因此得到了十分廣泛的應(yīng)用。 2.2.2 VHDL開發(fā)流程 采用VHDL語言對硬件電路進(jìn)行描述的過程應(yīng)該遵循一定的流程,通常情況下,其流程如圖2.2.2-1所示。 圖2.2.2-1 VHDL設(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è)計要
11、求,確定其要實現(xiàn)的具體功能。 ③劃分模塊、編寫程序 利用VHDL語言設(shè)計硬件電路通常采用自頂向下的設(shè)計方法,從電路設(shè)計的總體要求出發(fā),先確定頂層模塊并進(jìn)行頂層模塊的設(shè)計,然后將頂層模塊劃分為不同的完成一定邏輯功能的子功能模塊,最后再詳細(xì)設(shè)計子功能模塊。模塊劃分的好壞將會直接影響到最終的電路設(shè)計,設(shè)計人員在這一步應(yīng)該花費(fèi)一定的時間,保證模塊劃分的最優(yōu)化。 VHDL語言程序模擬 VHDL語言程序模擬即功能仿真,是利用仿真軟件對設(shè)計的邏輯功能進(jìn)行驗證,可以在設(shè)計的早期發(fā)現(xiàn)電路設(shè)計上的缺陷和錯誤,節(jié)省設(shè)計時間、縮短開發(fā)周期。 ⑤綜合、優(yōu)化和布局布線 綜合的作用簡單的說就將電路設(shè)計的較高級抽
12、象層次的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)
13、化成一個器件編程所用的數(shù)據(jù)文件格式,然后通過燒片器或者下載電纜將數(shù)據(jù)文件下載到指定的可編程邏輯器件中去的過程。 2.3 FPGA開發(fā)介紹 2.3.1 FPGA簡介 FPGA是20世紀(jì)90年代發(fā)展起來的,其密度已超過25X 104 f-JA平,部門延時小于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í)行的邏輯功
14、能。這種方法也叫做ICR(ha Circuit Reconfiguration,在電路上直接配置)編程。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)的容就是輸出。 2.3.2 FPGA開發(fā)流程 圖2.3.2-1 FPGA開發(fā)
15、流程 對于目標(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è)計好的
16、邏輯安放到PLD/FPGA。 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)境 在考慮各種情
17、況后,在本次設(shè)計中,由于選擇的FPGA芯片是由Xilinx公司生產(chǎn)的,所以我們主要使用ModelSim和ISE軟件進(jìn)行仿真和綜合。 3.2ModelSim介紹 ModelSim是業(yè)界最優(yōu)秀的HDL語言仿真器,它提供最友好的調(diào)試環(huán)境,是唯一的單核支持VHDL和Verilog混合仿真的仿真器。是作FPGA/ASIC設(shè)計的RTL級和門級電路仿真的首選,它采用直接優(yōu)化的編譯技術(shù)、TcFTk技術(shù)、單一核仿真技術(shù),編譯仿真速度快,編譯的代碼與平臺無關(guān),便于保護(hù)IP核,個性化的圖形界面和用戶接口,為用戶加快調(diào)錯提供強(qiáng)有力的手段。全面支持VHDL和Verilog語言的IEEE標(biāo)準(zhǔn),支持C/C++功能調(diào)用和
18、調(diào)試。ModelSim 專業(yè)版,具有快速的仿真性能和最先進(jìn)的調(diào)試能力,全面支持UNIX(包括64位)、Linux和Windows平臺。主要特點:RTL和門級優(yōu)化,本地編譯結(jié)構(gòu),編譯仿真速度快;單核VHDL和Verilog混合仿真;源代碼模版和助手,項目管理;集成了性能分析、波形比較、代碼覆蓋等功能;數(shù)據(jù)流ChaseX;Signal Spy;C和Tcl/Tk接121,C調(diào)試。是業(yè)界唯一單一核支持VHDL、Verilog HDL和SystemC混合仿真的仿真器。同時也支持業(yè)界最廣泛的標(biāo)準(zhǔn)如Verilog 2001、 SystemVerilog等,部集成了用于C/C++,PLI/FLI和Syst
19、emC的集成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)的Signal Spy功能,可以方便地訪問VHDL或者VHDL和Verilog混合設(shè)計中的底層信號;支持加密IP;可以實現(xiàn)與Matlab的Simulink的聯(lián)合仿真。ModelSim 分幾種不同的版本:SE、PE、LE和OEM,其中SE是最高級的版本而集成在Actel、
20、Atmel、Altera、Xilinx以及Lattice等FPGA廠商設(shè)計工具中的均是其OEM版本。SE版和OEM版在功能和性能方面有較大差別,比如對于大家都關(guān)心的仿真速度問題,以Xilinx公司提供的OEM版本ModelSim XE為例,對于代碼少于40000行的設(shè)計,ModelSim SE比ModelSim XE要快10倍;對于代碼超過40000行的設(shè)計,ModelSim SE要比ModelSimXE快近40倍。 3.3 ISE介紹 ISEt是Xilinx公司提供的集成化FPGA開發(fā)軟件,它的主要功能包括設(shè)計 輸入、綜合、仿真、實現(xiàn)和下載。 (1)設(shè)計輸入 ISE軟件提供的設(shè)計輸
21、入工具包括用于HDL代碼輸入和報告查看的ISE文本編輯器(TextEditor),用于原理圖編輯的工具ECS(Engineering CaptureSystem),用于P CORE的COREGenerator,用于狀態(tài)機(jī)設(shè)計的StateCAD,以及用于約束文件編輯的Constraint Editor等。 (2)綜合 ISE的綜合工具不但包括了Xilinx自身提供的綜合工具xsr,同時還可以集成MentorGraphics公司的LeonardoSpectrum和Synplicity公司的Synplify。 (3)仿真 ISE本身自帶了圖形化波形編輯功能的仿真工具HDL Bencher,同
22、時又提供了使用ModelTechnology公司的ModelSim進(jìn)行仿真的接口。 (4)實現(xiàn) ISE的實現(xiàn)功能包括了翻譯(Translate)、映射(Map)、布局布線(Place andRoute)等。 (5)下載 下載功能包括了BitGen,用于將布局布線后的設(shè)計文件轉(zhuǎn)換為比特流(Bitstream)文件。還包括了iMPACT功能,用于進(jìn)行設(shè)備配置和通信,控制將程序燒寫到FPGA芯片中去。 使用ISE進(jìn)行FPGA開發(fā)大致可以分為3個步驟。 (1)設(shè)計輸入和仿真 設(shè)計輸入(Design Entry)是指以HDL代碼、原理圖、波形圖以及狀態(tài)機(jī)的形式輸入設(shè)汁源文件,而設(shè)計仿真(S
23、imdmion)是指通過仿真工具對設(shè)計的整體模塊或局部模塊進(jìn)行仿真來檢驗設(shè)計的功能和性能。 (2)用戶約束條件、綜合和實現(xiàn) 用戶約束條件(User Constraints)的作用是對綜合、實現(xiàn)過程進(jìn)行控制,滿足速度、面積、引腳位置等需求。編輯約束條件又包括了4個子項,意義分別為:創(chuàng)建時間約束、配置引腳、 創(chuàng)建面積約束、以文本方式編輯約束。 綜合(Synthesize)是FPGA設(shè)計流程中的重要環(huán)節(jié),綜合結(jié)果的優(yōu)劣直接影響到設(shè)計的最終性能。ISE自帶的綜合工具是XST,同時它也支持Synplify/Synplify Pro等第三方綜合工具,但是由于Xilinx對于其器件的底層最為了解,所
24、以使用XST綜合往往會得到比較滿意的結(jié)果。綜合包含了3個子項,意義分別為:查看綜合報告、查看綜合器件的RTL級原理圖和檢查語法。實現(xiàn)(Implementation)過程也包含了3個子項,.ImplementDesign項所對應(yīng)的子項,意義分別是:翻譯、映射和布局布線。需要注意,進(jìn)行實現(xiàn)步驟之前必須進(jìn)行約束條件的編輯,否則實現(xiàn)可能會出錯。 (3)硬件編程 硬件編程(Programming)是指生成編輯比特流文件bit,并將其下載到FPGA芯片部的過程。硬件編程對應(yīng)圖2--5所示的Generate Programming File項。 第四章數(shù)字式秒表的設(shè)計與實現(xiàn) 3 4 4.1
25、任務(wù)要求 4.2 實驗條件 4.3 原理框圖 按照以上需求,整個電路的原理圖如圖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.按鍵消抖電路:消除按鍵輸入信號,輸出單脈沖
26、。 4.4 各模塊的實現(xiàn) 4.4.1 分頻器 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-1 1KHZ信號仿真圖 4.4.2 輸入控制電路 輸入控制模塊的功能是識別有效地按鍵輸入和實現(xiàn)輸入的按鍵信號對電子秒表不同狀態(tài)的控制。,秒表的狀態(tài)可分為計數(shù)開/關(guān)
27、,顯示鎖定開/關(guān)和清零。考到有兩個輸入按鍵,所以必須有輸入控制電路,同時考慮到按下按鍵以及松開按鍵會出現(xiàn)抖動,所以必須設(shè)計防抖動電路。即按鍵輸入信號,必須先經(jīng)過防抖電路,然后進(jìn)入控制電路。 4.4.2.1 消抖電路 由于按鍵輸入,在按下過程中電平可能會有一個不確定的抖動狀態(tài)。由于識別的有效按鍵電平為持續(xù)的低電平,因此設(shè)計一消抖電路,頂層設(shè)計框圖如下: 消抖電路的仿真結(jié)果如下所示: 由圖可見在1khz的驅(qū)動下,消抖電路能夠做到每按一次按鍵只輸出一個時鐘周期,達(dá)到了按鍵消抖的目的。在實際板子上應(yīng)用的時候,也還要根據(jù)按鍵實際情況來調(diào)整一下計數(shù)的周期,從而達(dá)到最佳的效果。
28、 4.4.2.2 控制電路 圖4.4.2.2-1 控制電路狀態(tài)圖 兩個去抖動電路傳入兩個信號,將其組合成一個2bit輸入(Start/Stop為高位,Split/Reset為低位),分別代表4個狀態(tài): ①“00”狀態(tài):鎖定關(guān),計數(shù)關(guān),清零關(guān),輸出“111”; ②“10”狀態(tài):鎖定關(guān),計數(shù)開,清零關(guān),輸出“101”; ③“11”狀態(tài):鎖定開,計數(shù)開,清零關(guān),輸出“001”; ④“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所示, 圖
29、4.4.2.2-2 控制電路仿真 4.4.3 計時模塊 由設(shè)計指標(biāo)可知,秒表由六位顯示最大計時為59min59s99,所以需要4個10進(jìn)制計數(shù)器,還有兩個6進(jìn)制計數(shù)器。其中有暫定,清零的功能。整個計時模塊的頂層設(shè)計電路圖如下: 4.4.3.1 十進(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)椤?
30、000”。 源程序為見附錄. 圖4.4.3.1-1 十進(jìn)制計數(shù)器仿真圖 如圖4.4.3.1-1所示,計數(shù)周期為10。 4.4.3.2 六進(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。 4.4.3.3 計數(shù)器組合 由于顯示的最大
31、計數(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ù)器組合仿真圖 4.4.3.4 鎖存器 鎖存器實現(xiàn)電子秒表的顯示鎖定功能。其輸入時鐘為外部時鐘(1kHz)。當(dāng)鎖定信號無效時,在每個時鐘上升沿將輸入的數(shù)據(jù)信號輸出;當(dāng)鎖定信號有效時,輸出的數(shù)據(jù)信號保持當(dāng)前值,無視輸入數(shù)據(jù)的改變,源程序見附錄。 圖4.4.3.4-1
32、鎖存器仿真圖 放著結(jié)果如圖4.4.3.4-1所示,當(dāng)輸入信號為高電平時,輸出和輸入信號相同;當(dāng)輸入信號為低電平時,輸出信號保持當(dāng)前值。 4.4.4 顯示模塊 顯示模塊主要完成顯示掃描和編碼翻譯的功能。其中需要用到掃描器,多路選擇器和譯碼器, 時鐘信號連接一個掃描器,用計數(shù)原理輸出3bit掃描信號。利用3-8譯碼器的原理,實現(xiàn)對八位數(shù)碼管的掃描,輸出位選信號;另一方面根據(jù)相應(yīng)的位選信號,將要現(xiàn)實的bacd碼轉(zhuǎn)換成數(shù)碼管的七段顯示碼輸出,整個顯示模塊的頂層電路圖如下: 4.4.4.1 掃描器 掃描器實現(xiàn)了八位數(shù)碼管共用一組輸入數(shù)據(jù)的可能性。其通過一個計數(shù)器,在每個時鐘信號的上升沿,其
33、輸出的三位二進(jìn)制信號加一,從“000”計數(shù)到“111”。當(dāng)輸出為“111”時,下一個時鐘上升沿輸出變?yōu)椤?00”,關(guān)鍵的程序代碼如下: weixuan_code <= weixuan_code+1 when clk'event and clk='1'; 圖4.4.4.1-1 掃描器仿真圖 掃描器仿真圖如圖4.4.4.1-1所示,掃描器根據(jù)時鐘信號從“000” 計數(shù)到“111”。 4.4.4.2 多路選擇器 多路選擇器輸入八組四位數(shù)據(jù)信號和一組三位掃描信號,通過掃描信號的狀態(tài)選擇相應(yīng)的數(shù)據(jù)信號進(jìn)行輸出源程序,源程序見附錄。 圖4.4.4.2-1 多路選擇器仿真圖 多路選擇
34、器放著結(jié)果如圖4.4.4.2-1所示,多路選擇器根據(jù)掃描信號的輸入選擇相應(yīng)的信號輸出。 4.5 分配引腳和下載實現(xiàn) 全部仿真通過后,就運(yùn)行ISE的設(shè)計實現(xiàn),然后再打開XILINX PACE,在里面分配引腳,即實現(xiàn)設(shè)計的輸入輸出端口與實際芯片的輸入輸出端口的對應(yīng)連接。比如七段LED管的控制信號就連接到實際電路的七個引腳。需要注意的是一些端口是固定的,不能亂的連接。比如時基信號即石英振蕩器所提供的信號就只能由T8輸入。一切都準(zhǔn)備就緒后就,便可開始下載了.分配引腳的源文件如下: NET "clk_raw" LOC = N9; NET "duanxuan<7>" LOC = B12; N
35、ET "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 "we
36、ixuan<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; 4.6 測試結(jié)果 這個電路完成后的最頂層模塊電路圖如下: 在成功下載并運(yùn)行后,進(jìn)行了各按鈕功能的檢測(包括計數(shù)、暫停、復(fù)位、清零等功能的檢查),以及與標(biāo)準(zhǔn)時間進(jìn)行了對比,符合實驗預(yù)估的各項指標(biāo),成
37、功完成了數(shù)字式秒表的設(shè)計與實現(xiàn)。 第五章 結(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仿真流程
38、 致謝 首先必須感謝的是曦老師對我的教導(dǎo),在實驗過程中對我的幫助,在此對曦老師致于最衷心的感謝。其次感謝我的同學(xué)們,在我遇到問題時,能給我分析以及解決。最后感謝電子技術(shù)綜合實驗這門課程,讓我從中學(xué)到了很多的東西。 附錄 附錄1.電子秒表的頂文件 -- pany: -- Engineer: -- -- Create
39、 Date: 11:03:09 11/18/2015 -- Design Name: -- Module Name: my_watch - Behavioral -- Project Name: -- Target Devices: -- Tool versions: -- Description: ---- Dependencies: ---- ---- Revision: ---- Revision 0.01 - File Created ---- Additional ments: --# OBUF
40、 : 16 --========================================================================= -- --Device utilization summary: ----------------------------- -- --Selected Device : 3s200aft256-5 -- -- Number of Slices: 61 out of 1792 3% -- Number of Slice Flip
41、Flops: 79 out of 3584 2% -- Number of 4 input LUTs: 109 out of 3584 3% -- Number of IOs: 19 -- Number of bonded IOBs: 19 out of 9% -- Number of GCLKs: 3 out of 24 12%
42、 -- ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Unment the following library declaration if instantiating ---- any Xilinx primitives in
43、this code. --library UNISIM; --use UNISIM.Vponents.all; entity my_watch is port(clk_raw,start_stop,split_reset:in std_logic; weixuan:out std_logic_vector(7 downto 0); duanxuan:out std_logic_vector(7 downto 0)); end my_watch; architecture Behavioral of my_watch is PONENT fenpin
44、 PORT( clk_raw : IN std_logic; clk_1kh : OUT std_logic ); END PONENT; PONENT douxiao PORT( clk : IN std_logic; key_in : IN std_logic; key_out : OUT std_logic ); END PONENT; PONENT counter PORT( clk : IN std_logic; r
45、st : IN std_logic; count_en : IN std_logic; seg1 : OUT std_logic_vector(3 downto 0); seg2 : OUT std_logic_vector(3 downto 0); seg3 : OUT std_logic_vector(3 downto 0); seg4 : OUT std_logic_vector(3 downto 0); seg5 : OUT std_logic_vector(3 downto 0); seg6 : OUT std_logic
46、_vector(3 downto 0) ); END PONENT; PONENT control PORT( clk : IN std_logic; start_stop : IN std_logic; reset_split : IN std_logic; reset : OUT std_logic; counter_en : OUT std_logic; latch_en : OUT std_logic ); END PONENT; PONENT latch PORT( latch_en :
47、 IN std_logic; cin1 : IN std_logic_vector(3 downto 0); cin2 : IN std_logic_vector(3 downto 0); cin3 : IN std_logic_vector(3 downto 0); cin4 : IN std_logic_vector(3 downto 0); cin5 : IN std_logic_vector(3 downto 0); cin6 : IN std_logic_vector(3 downto 0); cout1 : OUT st
48、d_logic_vector(3 downto 0); cout2 : OUT std_logic_vector(3 downto 0); cout3 : OUT std_logic_vector(3 downto 0); cout4 : OUT std_logic_vector(3 downto 0); cout5 : OUT std_logic_vector(3 downto 0); cout6 : OUT std_logic_vector(3 downto 0) ); END PONENT; PONENT display PORT(
49、clk : IN std_logic; cin1 : IN std_logic_vector(3 downto 0); cin2 : IN std_logic_vector(3 downto 0); cin3 : IN std_logic_vector(3 downto 0); cin4 : IN std_logic_vector(3 downto 0); cin5 : IN std_logic_vector(3 downto 0); cin6 : IN std_logic_vector(3 downto 0); seg : OUT
50、 std_logic_vector(7 downto 0); weixuan : OUT std_logic_vector(7 downto 0) ); END PONENT; signal clk_1kh,net_start,net_split,net_reset,net_counter_en,net_latch_en :std_logic; signal net_seg1,net_seg2,net_seg3,net_seg4,net_seg5,net_seg6:std_logic_vector(3 downto 0); signal net_out1,net_out2
51、,net_out3,net_out4,net_out5,net_out6:std_logic_vector(3 downto 0); begin u0: fenpin PORT MAP( clk_raw =>clk_raw , clk_1kh =>clk_1kh ); u2: douxiao PORT MAP( clk =>clk_1kh, key_in =>start_stop , key_out =>net_start ); u3: douxiao PORT MAP( clk =>clk_1kh , key_in =>sp
52、lit_reset , key_out =>net_split ); u4_control: control PORT MAP( 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: counter PORT MAP( clk => clk_1kh, rst =>net_reset ,
53、 count_en =>net_counter_en , seg1 =>net_seg1, seg2 =>net_seg2, seg3 =>net_seg3, seg4 =>net_seg4, seg5 =>net_seg5, seg6 =>net_seg6 ); u6: latch PORT MAP( latch_en => net_latch_en, cin1 => net_seg1, cin2 => net_seg2, cin3 => net_seg3, cin4 => net_seg4, cin5
54、=> net_seg5, cin6 => net_seg6, cout1 => net_out1, cout2 => net_out2, cout3 => net_out3, cout4 => net_out4, cout5 => net_out5, cout6 => net_out6 ); u7: display PORT MAP( clk => clk_1kh, cin1 => net_out1, cin2 => net_out2, cin3 => net_out3, cin4 => net_out4,
55、cin5 => net_out5, cin6 => net_out6, seg => duanxuan, weixuan =>weixuan ); 附錄2分頻器 signal a1: std_logic_vector(15 downto 0):= ( others =>'0'); begin process(clk_raw) is begin if rising_edge(clk_raw) then if a1=47999 then a1<=(others=>'0'); else a1<=a1+1; e
56、nd if; end if; end process; clk_1kh<=a1(15); 附錄3消抖電路 signal t:std_logic_vector(2 downto 0):=(others=>'0'); signal k1,k2:std_logic; begin p1:process(key_in,clk) begin if key_in='1' then t<="000"; elsif falling_edge(clk) then if t /=7 then t<=t+1; end if; end if;
57、 end process; p2:process(clk) begin if falling_edge(clk) then if t /=7 then k1<='0'; else k1<='1'; end if; k2<=k1; end if; end process; p3:key_out<=(not k1)and k2; 附錄4 控制電路 process(c_state,condition) begin case c_state is when "101"=> case condit
58、ion is when "10" => n_state<="011"; when others=>n_state<="101"; end case; when "011"=> case condition is when "01" => n_state<=""; when "10" => n_state<="001"; when others=> n_state<="011"; end case; when ""=> case condition is when "01" => n_state<="011"
59、; when others=> n_state<=""; end case; when "001"=> case condition is when "10" => n_state<="011"; when "01" => n_state<="101"; when others=> n_state<="001"; end case; when others=>n_state<="101"; end case; end process; process(clk) begin if rising_edge(clk) th
60、en c_state<=n_state; end if; 附錄5 十進(jìn)制計數(shù)器 process(rst,clk)is begin if rst='1' then count<="0000"; elsif rising_edge(clk) then if carry_in='1' then if count="1001" then count<="0000"; else count<=count+1; end if; end if; else null; end if; end process; 附錄9 鎖存器 process(latch_en
61、) begin data1<=cin1; data2<=cin2; data3<=cin3; data4<=cin4; data5<=cin5; data6<=cin6; if latch_en='1' then cout1<=data1; cout2<=data2; cout3<=data3; cout4<=data4; cout5<=data5; cout6<=data6; end if; end process; 附錄10 顯示電路 architecture Behavioral of displ
62、ay is signal weixuan_code:std_logic_vector(2 downto 0):=(others=>'0'); signal bcd:std_logic_vector(3 downto 0):=(others=>'0'); begin weixuan_code <= weixuan_code+1 when clk'event and clk='1'; with weixuan_code select weixuan<="11111110" when "000", "11111101" when "001", "1
63、1111011" when "", "11110111" when "011", "11101111" when "100", "11011111" when "101", "10111111" when "110", "01111111" when "111", "11111111" when others; with weixuan_code select bcd<=cin1 when "000", cin2 when "001", "1111" when "",
64、 cin3 when "011", cin4 when "100", "1111" when "101", cin5 when "110", cin6 when "111", "1111" when others; with bcd select seg<="00000011" when "0000", "10011111" when "0001", "00100101" when "0010", "00001101" when "0011", "10011001" when "0100", "01001001" when "0101", "01000001" when "0110", "00011111" when "0111", "00000001" when "1000", "00001001" when "1001", "11111101" when "1111", "00000011" when others; end Behavioral;
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。