電子科技大學數(shù)字式秒表設計與實現(xiàn) 實驗報告材料
《電子科技大學數(shù)字式秒表設計與實現(xiàn) 實驗報告材料》由會員分享,可在線閱讀,更多相關《電子科技大學數(shù)字式秒表設計與實現(xiàn) 實驗報告材料(32頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、word 數(shù)字式秒表設計與實現(xiàn) 指導老師: : 學號: 摘 要 本文主要介紹了基于FPGA使用VHDL語言的數(shù)字式秒表的設計開發(fā)流程。該設計以VHDL作為硬件開發(fā)語言,以ISE作為軟件開發(fā)平臺,成功的實現(xiàn)了數(shù)字式秒表的計數(shù)、清零、暫停等功能。并使用了ModelSim仿真軟件對各個單元電路模塊進行了仿真,且完成了綜合布局布線,最終下載到電路板上,實際測試結果良好。 關鍵字:FPGA,VHD
2、L,數(shù)字 32 / 32 目錄 數(shù)字式秒表設計與實現(xiàn)1 第一章引言4 1.1 選題背景4 1.2 實驗方式4 1.3 技能培養(yǎng)4 第二章基于FPGA的VHDL設計流程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ù)字式秒表的設計與實現(xiàn)12 4.1任務要求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測試結果20 第五章結論21 參考文獻22 致謝23 附錄24 附錄1.電子秒表的頂文件24 附錄2分頻器28 附錄3消抖電路28 附錄4 控制電路29 附錄5 十進制計數(shù)器30 附錄9 鎖存器30 附錄10 顯示電路31 第一章引言 1.1 選題背景 《電子技術綜合實驗》課程通過引入模擬電子技術和數(shù)字邏輯設計的綜合應用、基于MCU/FPGA/EDA技術的系統(tǒng)設計等綜合型設計型實驗,對學生進
4、行電子系統(tǒng)綜合設計與實踐能力的訓練與培養(yǎng)。 通過《電子技術綜合實驗》課程的學習,使學生對系統(tǒng)設計原理、主要性能參數(shù)的選擇原則、單元電路和系統(tǒng)電路設計方法及仿真技術、測試方法擬定及調(diào)測技術有所了解;使學生初步掌握電子技術中應用開發(fā)的一般流程,初步建立起有關系統(tǒng)設計的基本概念,掌握其基本設計方法,為將來從事電子技術應用和研究工作打下基礎。 1.2 實驗方式 n 教師引導下的自主實驗 n 設計的全過程:方案、電路設計與仿真、設計與實現(xiàn)、測試與調(diào)整、總結報告 1.3 技能培養(yǎng) n 數(shù)字電路的綜合設計應用 n HDL語言 n FPGA應用 n EDA軟件:ISE、Modelsi
5、m n 硬件電路制作或設計,調(diào)整與實現(xiàn) n 設計文檔撰寫 n 資料查閱 第二章基于FPGA的VHDL設計流程 第2章 2.1 概述 數(shù)字秒表是數(shù)字電路中的一個典型應用,實際的硬件設計用到的器件較多,連線比較復雜,而且會產(chǎn)生比較大的延時,造成測量誤差、可靠性差。秒表的設計有傳統(tǒng)方法和現(xiàn)代方法,傳統(tǒng)的設計方法耗時耗功,設計強度大,且容易出錯,設計的質(zhì)量不一定是最好的。自然我們考慮到現(xiàn)代方法,即EDA。在EDA設計工具中,用的最廣泛的是VHDL和VERILOG,當然還有其它的。比較VHDL和VERILOG,在頂層設計方面VHDL優(yōu)于VERILOG,在門級電路設計方面VERILO
6、G優(yōu)于VHDL。隨著復雜可編程邏輯器件(CPLD)的廣泛應用,以EDA工具作為開發(fā)手段,運用VHDL語言,將使整個系統(tǒng)大大簡化,提高整體的性能和可靠性。本次的數(shù)字式秒表設計主要是先頂層設計,將秒表的除了外部輸入部分以外,其余全部在一片F(xiàn)PGA芯片上實現(xiàn),整個系統(tǒng)非常精簡,而且具有靈活的現(xiàn)場可更改性。在不更改硬件電路的基礎上,對系統(tǒng)進行各種改進還可以進一步提高系統(tǒng)的性能。該數(shù)字式秒表具有高速、精確、可靠、抗干擾性強和現(xiàn)場可編程等優(yōu)點。 2.2 VHDL語言介紹 VHDL語言是一種硬件描述語言(Hardware DescriptionLanguage,HDL),主要用在可編程邏輯器件(CPLD
7、/FPGA)和專用集成電路(ASIC)兩個領域。寫好的VHDL 程序既可以下載到可編程邏輯器件中實現(xiàn)電路功能,又可以提交到工廠用于ASIC芯片的流片。VHDL主要用于描述數(shù)字系統(tǒng)的結構、行為、功能和接口。VHDL程序結構的特點是將一項工程設計或設計實體(可以是元件、電路模塊或系統(tǒng))分成外部和部兩部分,外部即可視部分,對設計實體和端口引腳進行聲明;部即不可視部分,描述模塊的功能和算法。VHDL從實體與外部的接口以及實體部的功能與結構這兩個方面來描述實體,設計實體定義成功后就可生成共享功能模塊。在頂層綜合或其他設計中就可以直接調(diào)用這個實體模塊。這種將設計實體分成外部分的概念是VHDL系統(tǒng)設計的基
8、本點。 2.2.1 VHDL的特點 VHDL的特點: ①具有更強的行為描述能力 VHDL的硬件描述能力很強,可以用于從門級、電路級直至系統(tǒng)級的描述、仿真、 綜合和調(diào)試,從邏輯功能和行為上描述和設計大規(guī)模系統(tǒng),避開了具體器件部結構。 ②支持層次化和模塊化設計 這是運用EDA工具進行電路和系統(tǒng)設計區(qū)別于傳統(tǒng)設計方法的重要方面,簡化了系統(tǒng)設計,優(yōu)化了系統(tǒng)結構,提高了系統(tǒng)可靠性。 ③可仿真與可綜合 仿真是指代碼模擬硬件的行為,綜合是指將代碼轉化成可物理實現(xiàn)的電路結構。所有的VHDL語句都能用于仿真,但有一部分VHDL語句不能進行綜合、翻譯成與之對應的硬件電路,并在邏輯器件上實現(xiàn)。VH
9、DL強大的仿真建模功能使設計者能在系統(tǒng)設計的各個階段都能十分方便地對數(shù)字系統(tǒng)進行仿真驗證。 ④系統(tǒng)設計與硬件結構無關 VHDL語言對設計的描述具有相對獨立性,設計者可以進行獨立的設計,可以不懂硬件的結構,也不必了解最終設計實現(xiàn)的目標器件是什么。 ⑤具有很強的移植能力 VHDL語言描述的設計通用性好,可以被支持VHDL標準的不同工具所支持,具有很強的移植能力。 ⑥VHDL本身的生命周期長。 VHDL的硬件描述與工藝無關,不會因工藝變化而過時,而且與工藝技術有關的參數(shù)可以用VHDL提供的屬性加以描述,當生產(chǎn)工藝改變時,只需修改程序中相應屬性參數(shù)即可。VHDL語言具有強大的語言功能、硬件
10、描述能力和移植能力及設計與器件無關的特性,并且VHDL語言程序易于共享和復用,因此得到了十分廣泛的應用。 2.2.2 VHDL開發(fā)流程 采用VHDL語言對硬件電路進行描述的過程應該遵循一定的流程,通常情況下,其流程如圖2.2.2-1所示。 圖2.2.2-1 VHDL設計電路 從流程圖可以看出,采用VHDL語言進行硬件電路設計的開發(fā)步驟主要包 括以下幾步: ①接受電路設計任務 在進行硬件電路系統(tǒng)設計之前,首先作出總體設計方案,然后給出相應的硬件電路系統(tǒng)設計指標,最后將總體方案中各部分電路設計任務和要求下達給相應的設計部門。 ②確定電路具體功能 設計人員要具體分析電路的設計要
11、求,確定其要實現(xiàn)的具體功能。 ③劃分模塊、編寫程序 利用VHDL語言設計硬件電路通常采用自頂向下的設計方法,從電路設計的總體要求出發(fā),先確定頂層模塊并進行頂層模塊的設計,然后將頂層模塊劃分為不同的完成一定邏輯功能的子功能模塊,最后再詳細設計子功能模塊。模塊劃分的好壞將會直接影響到最終的電路設計,設計人員在這一步應該花費一定的時間,保證模塊劃分的最優(yōu)化。 VHDL語言程序模擬 VHDL語言程序模擬即功能仿真,是利用仿真軟件對設計的邏輯功能進行驗證,可以在設計的早期發(fā)現(xiàn)電路設計上的缺陷和錯誤,節(jié)省設計時間、縮短開發(fā)周期。 ⑤綜合、優(yōu)化和布局布線 綜合的作用簡單的說就將電路設計的較高級抽
12、象層次的VHDL語言描述轉化成底 層電路表示。優(yōu)化的作用是將電路設計的時延縮到最小和有效利用資源。布局布線的作用是將通過綜合和優(yōu)化所得到的邏輯規(guī)劃到一個邏輯器件的邏輯結構中,然后將各邏輯單元放置到相應優(yōu)化的位置,最后再進行邏輯單元之間、邏輯單元和I/O之間的布線,以消除布線延遲。 ⑥布局布線后的程序模擬 布局布線后的程序模擬又稱后仿真,既驗證設計的邏輯功能,又驗證時序。如果時序不能滿足要求,就需要回到前面的步驟重新進行操作。 ⑦生成器件編程文件和進行器件編程 顧名思義,器件編程是針對可編程邏輯器件進行的操作,具體過程是:將設計描述經(jīng)過編譯、綜合、優(yōu)化和布局布線的結果,經(jīng)過一定的映射轉
13、化成一個器件編程所用的數(shù)據(jù)文件格式,然后通過燒片器或者下載電纜將數(shù)據(jù)文件下載到指定的可編程邏輯器件中去的過程。 2.3 FPGA開發(fā)介紹 2.3.1 FPGA簡介 FPGA是20世紀90年代發(fā)展起來的,其密度已超過25X 104 f-JA平,部門延時小于3ns。這種器件完成某種特定的功能是完全由用戶通過軟件進行配置和編程來實現(xiàn)的,而且可以反復擦寫,它具有芯片邏輯資源豐富、成本低、功耗小等優(yōu)勢。此外,它的另一個突出特點是現(xiàn)場編程,在FPGA工作的現(xiàn)場,可以不通過計算機把存于FPGA外的ROM中的編程數(shù)據(jù)加載給FPGA,通過簡單的設備就能改變FPGA中的編程數(shù)據(jù),從而改變FPGA執(zhí)行的邏輯功
14、能。這種方法也叫做ICR(ha Circuit Reconfiguration,在電路上直接配置)編程。FPGA的這個特點為工程技術人員維修、改進、更新電路邏輯功能提供了方便。 大部分FPGA采用基于SRAM的查找表(LUT,Look.Up.Table)結構。查找表本質(zhì)上就是一個RAM。若邏輯函數(shù)具有11個輸入項的話,就需要由輸入個數(shù)為n、容量為2n個位的RAM單元存放函數(shù)值,RAM的地址線起輸入線的作用,地址即輸入變量,RAM輸出為邏輯函數(shù)值。每輸入一個信號進行邏輯運算就等于輸入一個地址進行查表,地址所對應的容就是輸出。 2.3.2 FPGA開發(fā)流程 圖2.3.2-1 FPGA開發(fā)
15、流程 對于目標器件為FPGA和CPLD的HDL設計,其工程設計的基本流程如圖圖2.3.2-1所示?,F(xiàn)具體說明如下: 1、文本編輯:用任何文本編輯器都可以進行,也可以用專用的HDL編輯環(huán)境。通常VHDL文件保存為.vhd文件 2、功能仿真:將文件調(diào)入HDL仿真軟件進行功能仿真,檢查邏輯功能是否正確(也叫前仿真,對簡單的設計可以跳過這一步,只在布線完成以后,進行時序仿真) 3、邏輯綜合:將源文件調(diào)入邏輯綜合軟件進行綜合,即把語言綜合成最簡的布爾表達式。邏輯綜合軟件會生成.edf(edif)的EDA工業(yè)標準文件。 4、布局布線:將.edf文件調(diào)入PLD廠家提供的軟件中進行布線,即把設計好的
16、邏輯安放到PLD/FPGA。 5、時序仿真:需要利用在布局布線中獲得的精確參數(shù),用仿真軟件驗證電路的時序。(也叫后仿真) 6、編程下載:確認仿真無誤后,將文件下載到芯片中 7、硬件測試:硬件測試的目的是為了在更真實的環(huán)境中檢驗HDL設計的運行情況,特別是對于HDL程序設計上不是十分規(guī),語義上含有一定歧義的程序。 第三章 數(shù)字式秒表的軟件開發(fā)環(huán)境 本章主要介紹項目中將要用到了一系列軟件,包括用于VHDL語言編寫和編譯的ISE軟件和用于程序仿真的仿真軟件ModelSim。 3.1開發(fā)環(huán)境 在考慮各種情
17、況后,在本次設計中,由于選擇的FPGA芯片是由Xilinx公司生產(chǎn)的,所以我們主要使用ModelSim和ISE軟件進行仿真和綜合。 3.2ModelSim介紹 ModelSim是業(yè)界最優(yōu)秀的HDL語言仿真器,它提供最友好的調(diào)試環(huán)境,是唯一的單核支持VHDL和Verilog混合仿真的仿真器。是作FPGA/ASIC設計的RTL級和門級電路仿真的首選,它采用直接優(yōu)化的編譯技術、TcFTk技術、單一核仿真技術,編譯仿真速度快,編譯的代碼與平臺無關,便于保護IP核,個性化的圖形界面和用戶接口,為用戶加快調(diào)錯提供強有力的手段。全面支持VHDL和Verilog語言的IEEE標準,支持C/C++功能調(diào)用和
18、調(diào)試。ModelSim 專業(yè)版,具有快速的仿真性能和最先進的調(diào)試能力,全面支持UNIX(包括64位)、Linux和Windows平臺。主要特點:RTL和門級優(yōu)化,本地編譯結構,編譯仿真速度快;單核VHDL和Verilog混合仿真;源代碼模版和助手,項目管理;集成了性能分析、波形比較、代碼覆蓋等功能;數(shù)據(jù)流ChaseX;Signal Spy;C和Tcl/Tk接121,C調(diào)試。是業(yè)界唯一單一核支持VHDL、Verilog HDL和SystemC混合仿真的仿真器。同時也支持業(yè)界最廣泛的標準如Verilog 2001、 SystemVerilog等,部集成了用于C/C++,PLI/FLI和Syst
19、emC的集成C調(diào)試器。支持眾多的ASIC和FPGA廠家?guī)欤梢杂糜贔PGA和ASIC設計的RTL級和門級電路仿真。ModelSiml8J最大的特點是其強大的調(diào)試功能:先進的數(shù)據(jù)流窗121,可以迅速追蹤到產(chǎn)生不定或者錯誤狀態(tài)的原因;性能分析工具幫助分析性能瓶頸,加速仿真;代碼覆蓋率檢查確保測試的完備;多種模式的波形比較功能;先進的Signal Spy功能,可以方便地訪問VHDL或者VHDL和Verilog混合設計中的底層信號;支持加密IP;可以實現(xiàn)與Matlab的Simulink的聯(lián)合仿真。ModelSim 分幾種不同的版本:SE、PE、LE和OEM,其中SE是最高級的版本而集成在Actel、
20、Atmel、Altera、Xilinx以及Lattice等FPGA廠商設計工具中的均是其OEM版本。SE版和OEM版在功能和性能方面有較大差別,比如對于大家都關心的仿真速度問題,以Xilinx公司提供的OEM版本ModelSim XE為例,對于代碼少于40000行的設計,ModelSim SE比ModelSim XE要快10倍;對于代碼超過40000行的設計,ModelSim SE要比ModelSimXE快近40倍。 3.3 ISE介紹 ISEt是Xilinx公司提供的集成化FPGA開發(fā)軟件,它的主要功能包括設計 輸入、綜合、仿真、實現(xiàn)和下載。 (1)設計輸入 ISE軟件提供的設計輸
21、入工具包括用于HDL代碼輸入和報告查看的ISE文本編輯器(TextEditor),用于原理圖編輯的工具ECS(Engineering CaptureSystem),用于P CORE的COREGenerator,用于狀態(tài)機設計的StateCAD,以及用于約束文件編輯的Constraint Editor等。 (2)綜合 ISE的綜合工具不但包括了Xilinx自身提供的綜合工具xsr,同時還可以集成MentorGraphics公司的LeonardoSpectrum和Synplicity公司的Synplify。 (3)仿真 ISE本身自帶了圖形化波形編輯功能的仿真工具HDL Bencher,同
22、時又提供了使用ModelTechnology公司的ModelSim進行仿真的接口。 (4)實現(xiàn) ISE的實現(xiàn)功能包括了翻譯(Translate)、映射(Map)、布局布線(Place andRoute)等。 (5)下載 下載功能包括了BitGen,用于將布局布線后的設計文件轉換為比特流(Bitstream)文件。還包括了iMPACT功能,用于進行設備配置和通信,控制將程序燒寫到FPGA芯片中去。 使用ISE進行FPGA開發(fā)大致可以分為3個步驟。 (1)設計輸入和仿真 設計輸入(Design Entry)是指以HDL代碼、原理圖、波形圖以及狀態(tài)機的形式輸入設汁源文件,而設計仿真(S
23、imdmion)是指通過仿真工具對設計的整體模塊或局部模塊進行仿真來檢驗設計的功能和性能。 (2)用戶約束條件、綜合和實現(xiàn) 用戶約束條件(User Constraints)的作用是對綜合、實現(xiàn)過程進行控制,滿足速度、面積、引腳位置等需求。編輯約束條件又包括了4個子項,意義分別為:創(chuàng)建時間約束、配置引腳、 創(chuàng)建面積約束、以文本方式編輯約束。 綜合(Synthesize)是FPGA設計流程中的重要環(huán)節(jié),綜合結果的優(yōu)劣直接影響到設計的最終性能。ISE自帶的綜合工具是XST,同時它也支持Synplify/Synplify Pro等第三方綜合工具,但是由于Xilinx對于其器件的底層最為了解,所
24、以使用XST綜合往往會得到比較滿意的結果。綜合包含了3個子項,意義分別為:查看綜合報告、查看綜合器件的RTL級原理圖和檢查語法。實現(xiàn)(Implementation)過程也包含了3個子項,.ImplementDesign項所對應的子項,意義分別是:翻譯、映射和布局布線。需要注意,進行實現(xiàn)步驟之前必須進行約束條件的編輯,否則實現(xiàn)可能會出錯。 (3)硬件編程 硬件編程(Programming)是指生成編輯比特流文件bit,并將其下載到FPGA芯片部的過程。硬件編程對應圖2--5所示的Generate Programming File項。 第四章數(shù)字式秒表的設計與實現(xiàn) 3 4 4.1
25、任務要求 4.2 實驗條件 4.3 原理框圖 按照以上需求,整個電路的原理圖如圖4.3-1所示: 圖4.3-1 電路原理圖 從原理圖可知,系統(tǒng)需要以下模塊: 1.分頻器:對晶體振蕩器產(chǎn)生的時鐘進行分頻,產(chǎn)生時間基準信號。 2.計數(shù)器:對時間基準脈沖進行計數(shù),完成計時功能。 3.數(shù)據(jù)鎖存器:鎖存數(shù)據(jù),使顯示保持暫停。 4.控制器:控制計數(shù)器的運行、停止以及復位,產(chǎn)生鎖存器的使能信號。 5.掃描顯示的控制電路:包括掃描計數(shù)器、數(shù)據(jù)選擇器和七段譯碼器,控制8個數(shù)碼管以掃描方式,顯示結果。 6.按鍵消抖電路:消除按鍵輸入信號,輸出單脈沖
26、。 4.4 各模塊的實現(xiàn) 4.4.1 分頻器 XC3S200A芯片的外部有源晶振頻率為48MHz,考慮到系統(tǒng)的穩(wěn)定性,本設計選擇了1KHz的信號作為各模塊的時鐘信號,即對晶振信號進行1/480000分頻。 對晶振時鐘信號進行計數(shù),對每個上升沿,計數(shù)器加1;當計數(shù)達到47999時,計數(shù)清零,從頭開始計數(shù),最后獲取計數(shù)的第15位為計數(shù)的輸出信號 仿真結果如圖4.4.1.2-1所示,時鐘周期為48000。 圖4.4.1.2-1 1KHZ信號仿真圖 4.4.2 輸入控制電路 輸入控制模塊的功能是識別有效地按鍵輸入和實現(xiàn)輸入的按鍵信號對電子秒表不同狀態(tài)的控制。,秒表的狀態(tài)可分為計數(shù)開/關
27、,顯示鎖定開/關和清零。考到有兩個輸入按鍵,所以必須有輸入控制電路,同時考慮到按下按鍵以及松開按鍵會出現(xiàn)抖動,所以必須設計防抖動電路。即按鍵輸入信號,必須先經(jīng)過防抖電路,然后進入控制電路。 4.4.2.1 消抖電路 由于按鍵輸入,在按下過程中電平可能會有一個不確定的抖動狀態(tài)。由于識別的有效按鍵電平為持續(xù)的低電平,因此設計一消抖電路,頂層設計框圖如下: 消抖電路的仿真結果如下所示: 由圖可見在1khz的驅動下,消抖電路能夠做到每按一次按鍵只輸出一個時鐘周期,達到了按鍵消抖的目的。在實際板子上應用的時候,也還要根據(jù)按鍵實際情況來調(diào)整一下計數(shù)的周期,從而達到最佳的效果。
28、 4.4.2.2 控制電路 圖4.4.2.2-1 控制電路狀態(tài)圖 兩個去抖動電路傳入兩個信號,將其組合成一個2bit輸入(Start/Stop為高位,Split/Reset為低位),分別代表4個狀態(tài): ①“00”狀態(tài):鎖定關,計數(shù)關,清零關,輸出“111”; ②“10”狀態(tài):鎖定關,計數(shù)開,清零關,輸出“101”; ③“11”狀態(tài):鎖定開,計數(shù)開,清零關,輸出“001”; ④“01”狀態(tài):鎖定關,計數(shù)關,清零開,輸出“110”;處在“01”狀態(tài)時,過一個時鐘周期自動回到“00”狀態(tài)。狀態(tài)圖如圖4.4.2.2-1所示。源程序為見附錄。 仿真結果如圖4.4.2.2-2所示, 圖
29、4.4.2.2-2 控制電路仿真 4.4.3 計時模塊 由設計指標可知,秒表由六位顯示最大計時為59min59s99,所以需要4個10進制計數(shù)器,還有兩個6進制計數(shù)器。其中有暫定,清零的功能。整個計時模塊的頂層設計電路圖如下: 4.4.3.1 十進制計數(shù)器 計數(shù)器輸入端每識別一個上升沿,就依次從“0000”計數(shù)到“1001”。當計數(shù)變?yōu)椤?001”時,進位端從‘1’變?yōu)椤?’,在下個輸入的上升沿“1001”變?yōu)椤?000”,進位端恢復‘1’。如此,將進位端連入下一級的輸入端時,可以實現(xiàn)低位由9變?yōu)?時高位進1。當清零信號有效時,計數(shù)器強制將計數(shù)值變?yōu)椤?
30、000”。 源程序為見附錄. 圖4.4.3.1-1 十進制計數(shù)器仿真圖 如圖4.4.3.1-1所示,計數(shù)周期為10。 4.4.3.2 六進制計數(shù)器 六進制計數(shù)圍是“0000”到“0110”,在“0110”時進位端發(fā)生變低,之后計數(shù)變?yōu)椤?000”,進位端恢復高電平。對于六進制來說,三個二進制位就能夠滿足計數(shù)需要,但是考慮到后面譯碼器的輸入均為四個二進制位,所以計數(shù)用4bit,方便譯碼。源程序為見附錄。 圖4.4.3.2-1 六進制計數(shù)器仿真圖 如圖4.4.3.2-1所示,計數(shù)周期為6。 4.4.3.3 計數(shù)器組合 由于顯示的最大
31、計數(shù)為59min59s99,所以需要四位十進制計數(shù)器,以及二位六進制計數(shù)器。所以需要將六個計數(shù)器組合起來,由低位計數(shù)達到最大值,向前一位進1;由于輸入的是1khz信號,這里用另外用了一個模10計數(shù)器將1khz信號分頻到100hz,最后組合的電路模塊連接圖如下: 圖4.4.3.3-1 計數(shù)器組合仿真圖 4.4.3.4 鎖存器 鎖存器實現(xiàn)電子秒表的顯示鎖定功能。其輸入時鐘為外部時鐘(1kHz)。當鎖定信號無效時,在每個時鐘上升沿將輸入的數(shù)據(jù)信號輸出;當鎖定信號有效時,輸出的數(shù)據(jù)信號保持當前值,無視輸入數(shù)據(jù)的改變,源程序見附錄。 圖4.4.3.4-1
32、鎖存器仿真圖 放著結果如圖4.4.3.4-1所示,當輸入信號為高電平時,輸出和輸入信號相同;當輸入信號為低電平時,輸出信號保持當前值。 4.4.4 顯示模塊 顯示模塊主要完成顯示掃描和編碼翻譯的功能。其中需要用到掃描器,多路選擇器和譯碼器, 時鐘信號連接一個掃描器,用計數(shù)原理輸出3bit掃描信號。利用3-8譯碼器的原理,實現(xiàn)對八位數(shù)碼管的掃描,輸出位選信號;另一方面根據(jù)相應的位選信號,將要現(xiàn)實的bacd碼轉換成數(shù)碼管的七段顯示碼輸出,整個顯示模塊的頂層電路圖如下: 4.4.4.1 掃描器 掃描器實現(xiàn)了八位數(shù)碼管共用一組輸入數(shù)據(jù)的可能性。其通過一個計數(shù)器,在每個時鐘信號的上升沿,其
33、輸出的三位二進制信號加一,從“000”計數(shù)到“111”。當輸出為“111”時,下一個時鐘上升沿輸出變?yōu)椤?00”,關鍵的程序代碼如下: 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)選擇相應的數(shù)據(jù)信號進行輸出源程序,源程序見附錄。 圖4.4.4.2-1 多路選擇器仿真圖 多路選擇
34、器放著結果如圖4.4.4.2-1所示,多路選擇器根據(jù)掃描信號的輸入選擇相應的信號輸出。 4.5 分配引腳和下載實現(xiàn) 全部仿真通過后,就運行ISE的設計實現(xiàn),然后再打開XILINX PACE,在里面分配引腳,即實現(xiàn)設計的輸入輸出端口與實際芯片的輸入輸出端口的對應連接。比如七段LED管的控制信號就連接到實際電路的七個引腳。需要注意的是一些端口是固定的,不能亂的連接。比如時基信號即石英振蕩器所提供的信號就只能由T8輸入。一切都準備就緒后就,便可開始下載了.分配引腳的源文件如下: 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 測試結果 這個電路完成后的最頂層模塊電路圖如下: 在成功下載并運行后,進行了各按鈕功能的檢測(包括計數(shù)、暫停、復位、清零等功能的檢查),以及與標準時間進行了對比,符合實驗預估的各項指標,成
37、功完成了數(shù)字式秒表的設計與實現(xiàn)。 第五章 結論 本文主要介紹了利用VHDL語言完成基于FPGA的數(shù)字秒表的設計與實現(xiàn)。詳細介紹了設計原理,設計方案以及各模塊的設計過程及其實現(xiàn)的功能,并利用ISE和ModelSim對設計進行了仿真,分析,綜合,并最終下載實際電路板中,成功實現(xiàn)了數(shù)字式秒表的所有功能。 參考文獻 [1] 朱正偉.EDA技術及應用.清華大學.2009 [2] ISE開發(fā)流程 [3] Modelsim仿真流程
38、 致謝 首先必須感謝的是曦老師對我的教導,在實驗過程中對我的幫助,在此對曦老師致于最衷心的感謝。其次感謝我的同學們,在我遇到問題時,能給我分析以及解決。最后感謝電子技術綜合實驗這門課程,讓我從中學到了很多的東西。 附錄 附錄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 十進制計數(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)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 川渝旅游日記成都重慶城市介紹推薦景點美食推薦
- XX國有企業(yè)黨委書記個人述責述廉報告及2025年重點工作計劃
- 世界濕地日濕地的含義及價值
- 20XX年春節(jié)節(jié)后復工安全生產(chǎn)培訓人到場心到崗
- 大唐女子圖鑒唐朝服飾之美器物之美繪畫之美生活之美
- 節(jié)后開工第一課輕松掌握各要點節(jié)后常見的八大危險
- 廈門城市旅游介紹廈門景點介紹廈門美食展示
- 節(jié)后開工第一課復工復產(chǎn)十注意節(jié)后復工十檢查
- 傳統(tǒng)文化百善孝為先孝道培訓
- 深圳城市旅游介紹景點推薦美食探索
- 節(jié)后復工安全生產(chǎn)培訓勿忘安全本心人人講安全個個會應急
- 預防性維修管理
- 常見閥門類型及特點
- 設備預防性維修
- 2.乳化液泵工理論考試試題含答案