版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于 FPGA的現(xiàn)代電子實驗設(shè)計報告數(shù)字式秒表設(shè)計(VHDL)學(xué)院: 物理電子學(xué)院專業(yè): 學(xué) 號: 學(xué)生姓名:指導(dǎo)教師: 劉曦實驗地點: 科研樓303實驗時間:摘 要:通過使用VHDL語言開發(fā)FPGA的一般流程,重點介紹了秒表的基本原理和相應(yīng)的設(shè)計方案,最終采用了一種基于 FPGA 的數(shù)字頻率的實現(xiàn)方法。該 設(shè)計采用硬件描述語言VHDL,在軟件開發(fā)平臺ISE上完成。該設(shè)計的秒表能準(zhǔn)確地完成啟動,停止,分段,復(fù)位功能。使用 ModelSim 仿真軟件對VHDL 程序做了仿真,并完成了綜合布局布線,最終下載到EEC-FPGA實驗板上取得良好測試效果。關(guān)鍵詞:FPGA,VHDL,ISE,ModelS
2、im 目錄緒論.4 第一章 實驗任務(wù).5第二章 系統(tǒng)需求和解決方案計劃.5第三章 設(shè)計思路.6第四章 系統(tǒng)組成和解決方案.6第五章 各分模塊原理8第六章 仿真結(jié)果與分析.11第七章 分配引腳和下載實現(xiàn)13第八章 實驗結(jié)論.14緒論:1.1 課程介紹:現(xiàn)代電子技術(shù)綜合實驗課程通過引入模擬電子技術(shù)和數(shù)字邏輯設(shè)計的綜合應(yīng)用、基于MCU/FPGA/EDA技術(shù)的系統(tǒng)設(shè)計等綜合型設(shè)計型實驗,對學(xué)生進行電子系統(tǒng)綜合設(shè)計與實踐能力的訓(xùn)練與培養(yǎng)。通過現(xiàn)代電子技術(shù)綜合實驗課程的學(xué)習(xí),使學(xué)生對系統(tǒng)設(shè)計原理、主要性能參數(shù)的選擇原則、單元電路和系統(tǒng)電路設(shè)計方法及仿真技術(shù)、測試方案擬定及調(diào)測技術(shù)有所了解;使學(xué)生初步掌握電
3、子技術(shù)中應(yīng)用開發(fā)的一般流程,初步建立起有關(guān)系統(tǒng)設(shè)計的基本概念,掌握其基本設(shè)計方法,為將來從事電子技術(shù)應(yīng)用和研究工作打下基礎(chǔ)。本文介紹了基于FPGA的數(shù)字式秒表的設(shè)計方法,設(shè)計采用硬件描述語言VHDL ,在軟件開發(fā)平臺ISE上完成,可以在較高速時鐘頻率(48MHz)下正常工作。該數(shù)字頻率計采用測頻的方法,能準(zhǔn)確的測量頻率在10Hz到100MHz之間的信號。使用ModelSim仿真軟件對VHDL程序做了仿真,并完成了綜合布局布線,最終下載到芯片Spartan3A上取得良好測試效果。1.2 VHDL語言簡介:VHDL 的英文全名是 Very-High-Speed Integrated Circuit
4、 Hardware Description Language,誕生于 1982 年。1987 年底,VHDL被 IEEE 和美國國防部確認為標(biāo)準(zhǔn)硬件描述語言。VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風(fēng)格與句法是十分類似于一般的計算機高級語言。VHDL的程序結(jié)構(gòu)特點是將一項工程設(shè)計,或稱設(shè)計實體(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部(或稱可視部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實體的內(nèi)部功能和算法完成部分。在對一個設(shè)計實體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計就可以直接調(diào)用這個實體。這種將設(shè)
5、計實體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計的基本點。VHDL語言的特點:VHDL 語言能夠成為標(biāo)準(zhǔn)化的硬件描述語言并獲得廣泛應(yīng)用,它自身必然具有很多其他硬件描述語言所不具備的優(yōu)點。歸納起來,VHDL 語言主要具有以下優(yōu)點:(1) VHDL 語言功能強大,設(shè)計方式多樣(2) VHDL 語言具有強大的硬件描述能力(3) VHDL 語言具有很強的移植能力(4) VHDL 語言的設(shè)計描述與器件無關(guān)(5) VHDL 語言程序易于共享和復(fù)用由于 VHDL 語言是一種描述、模擬、綜合、優(yōu)化和布線的標(biāo)準(zhǔn)硬件描述語言,因此它可以使設(shè)計成果在設(shè)計人員之間方便地進行交流和共享,從而減小硬件電路設(shè)計的工作量,縮短開發(fā)
6、周期。1.3 FPGA簡介FPGA(FieldProgrammable Gate Array),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點。以硬件描述語言(Verilog或VHDL)所完成的電路設(shè)計,可以經(jīng)過簡單的綜合與布局,快速的燒錄至 FPGA 上進行測試,是現(xiàn)代 IC設(shè)計驗證的技術(shù)主流。這些可編輯元件可以被用來實現(xiàn)一些基本的邏輯門電路(比如AND、OR、XOR、NOT)或者更復(fù)雜一些的組合功能比如解碼器或數(shù)學(xué)方程式。
7、在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件例如觸發(fā)器(Flipflop)或者其他更加完整的記憶塊。系統(tǒng)設(shè)計師可以根據(jù)需要通過可編輯的連接把FPGA內(nèi)部的邏輯塊連接起來,就好像一個電路試驗板被放在了一個芯片里。一個出廠后的成品FPGA的邏輯塊和連接可以按照設(shè)計者而改變,所以FPGA可以完成所需要的邏輯功能。FPGA一般來說比ASIC(專用集成電路)的速度要慢,實現(xiàn)同樣的功能比ASIC電路面積要大。但是他們也有很多的優(yōu)點比如可以快速成品,可以被修改來改正程序中的錯誤和更便宜的造價。廠商也可能會提供便宜的但是編輯能力差的FPGA。因為這些芯片有比較差的可編輯能力,所以這些設(shè)計的開發(fā)是在
8、普通的FPGA上完成的,然后將設(shè)計轉(zhuǎn)移到一個類似于ASIC的芯片上。另外一種方法是用CPLD(Complex Programmable Logic Device,復(fù)雜可編程邏輯器件)。 FPGA設(shè)計流程: 對于目標(biāo)文件為FPGA的HDL設(shè)計,其一般流程如下:1、 文本編輯 用任何文本編輯器都可以進行,通常 VHDL文件保存為 vhd 文件,Verilog 文件保存為 v文件。2、使用編譯工具編譯源文件 HDL 的編譯器有很多,ACTIVE 公司,MODELSIM 公司,SYNPLICITY 公司,SYNOPSYS 公司,VERIBEST公司等都有自己的編譯器。3、邏輯綜合 將源文件調(diào)入邏輯綜合
9、軟件進行綜合。綜合的目的是在于將設(shè)計的源文件 由語言轉(zhuǎn)換為實際的電路。但是此時還沒有在芯片中形成真正的電路。這一步 的最終目的是生成門電路級的網(wǎng)表(Netlist)。 4、布局、布線 將第 3 步生成的網(wǎng)表文件調(diào)入 PLD 廠家提供的軟件中進行布線,即把設(shè)計 好的邏輯安放到 CPLDFPGA 內(nèi)。這一步的目的是生成用于下載(編程 Programming)的編程文件。在這一步,將用到第 3 步生成的網(wǎng)表,并根據(jù) CPLD FPGA 廠商的器件容量,結(jié)構(gòu)等進行布局、布線。這就好像在設(shè)計 PCB 時的 布局布線一樣。先將各個設(shè)計中的門根據(jù)網(wǎng)表的內(nèi)容和器件的結(jié)構(gòu)放在器件的 特定部位。然后,在根據(jù)網(wǎng)表中
10、提供的各門的連接,把各個門的輸入輸出連接 起來。最后,生成一個供編程的文件。這一步同時還會加一些時序信息(Timing) 到你的設(shè)計項目中去,以便于你做后仿真。 5、后仿真 利用在布局布線中獲得的精確參數(shù),用仿真軟件驗證電路的時序。(也叫布 局布線仿真或時序仿真)。這一步主要是為了確定你的設(shè)計在經(jīng)過布局布線之 后,是不是還滿足你的設(shè)計要求。 6、編程,下載 如果前幾步都沒有發(fā)生錯誤,并且符合設(shè)計要求,這一步就可以將由適配 器等產(chǎn)生的配置或下載文件通過編程器或下載電纜下載到目標(biāo)芯片中。 7、硬件測試 硬件測試的目的是為了在更真實的環(huán)境中檢驗 HDL設(shè)計的運行情況,特別 是對于 HDL 程序設(shè)計上
11、不是十分規(guī)范,語義上含有一定歧義的程序。一、實驗任務(wù)設(shè)計一個秒表:秒表的計時范圍為0000”00 5959”99。有兩個按鈕開關(guān)Start/Stop和Split/Reset,控制秒表的啟動、停止、分段和復(fù)位:1,在秒表已經(jīng)被復(fù)位的情況下,按下“Start/Stop”鍵,秒表開始計時。2,在秒表正常運行的情況下,如果按下“Start/Stop”鍵,則秒表暫停計時。3,再次按下該鍵,秒表繼續(xù)計時。4,在秒表正常運行的情況下,如果按下“Split/Reset”鍵,顯示停止在按鍵時的時間,但秒表仍然在計時;5,再次按下該鍵,秒表恢復(fù)正常顯示。6,在秒表暫停計時的情況下,按下“Split/Reset”鍵
12、,秒表復(fù)位歸零。二、系統(tǒng)需求和解決方案計劃:在項目開始設(shè)計時,首先要確定系統(tǒng)的需求并發(fā)展出一個針對這些需求的計劃。按照秒表的設(shè)計要求,整個電路需要下面這些組成部分:2.1 分頻器:對晶體振蕩器產(chǎn)生的時鐘信號進行分頻,產(chǎn)生時間基準(zhǔn)信號。2.2 計數(shù)器:對時間基準(zhǔn)脈沖進行計數(shù),完成計時功能。2.3 數(shù)據(jù)鎖存器:鎖存數(shù)據(jù)使顯示保持暫停。2.4 控制器:控制計數(shù)器的運行、停止以及復(fù)位產(chǎn)生鎖存器的使能信號。2.5 掃描顯示的控制電路:包括掃描計數(shù)器、數(shù)據(jù)選擇器和7段譯碼器,控制8個數(shù)碼管以掃描方式顯示計時結(jié)果。2.6 按鍵消抖電路:消除按鍵輸入信號抖動的影響,輸出單脈沖。三、設(shè)計思路:從FPGA開發(fā)板的
13、電路可以看出,其不具備對按鍵輸入的消抖功能,故須編寫消抖功能的模塊代碼。消除按鍵抖動的影響;每按一次鍵,只輸出一個脈沖,其寬度為一個時鐘周期。由開發(fā)板電路結(jié)構(gòu)可以看出,其為共陽結(jié)構(gòu),故在其運行為低有效。8個數(shù)碼顯示管共用一個段位,故為了將時鐘顯示在8個數(shù)碼管上,需要一定頻率(本秒表為1KHz)的信號進行掃描,使得我們?nèi)庋劭瓷先ナ?個數(shù)碼管同時顯示的。為了實現(xiàn)秒表暫停和復(fù)位的功能,需要鎖存器模塊將時鐘數(shù)據(jù)鎖存起來,并且結(jié)合控制電路滿足秒表的功能。FPGA開發(fā)板的晶振頻率為48MHz,而實際電路需要的頻率為1KHz,故須建立分頻模塊,將48MHz的晶振頻率分頻成1KHz。在構(gòu)建計數(shù)范圍從0000”
14、00-5959”99的秒表時,從數(shù)碼管顯示的角度可知,需要建立模六和模十兩種計數(shù)模塊進行組合形成。設(shè)計圖如下:四、系統(tǒng)組成和解決方案:在項目開始設(shè)計時,首先要確定系統(tǒng)的需求并發(fā)展出一個針對這些需求的計劃。按照數(shù)字式秒表工作原理的描述,需要下面這些主要的子系統(tǒng):1,控制電路;2,由石英振蕩器和數(shù)字分頻器構(gòu)成的時基信號發(fā)生器;3,按鍵開關(guān)(按鍵消抖); 4,計數(shù)器;5,數(shù)據(jù)鎖存器;6,掃描顯示的控制子系統(tǒng)(包括顯示譯碼和掃描控制);7,六個數(shù)碼管(LED顯示電路)。設(shè)計框圖如下:五、各分模塊原理:5.1、48M-1K分頻器 對晶振振蕩器產(chǎn)生的時鐘信號進行分頻,產(chǎn)生時間基準(zhǔn)信號。由于FPGA開發(fā)板的
15、晶振頻率為48MHz,故在設(shè)計分頻器模塊時,為了將頻率分頻成1KHz,即將輸入的信號源每48000個周期轉(zhuǎn)換成輸出的一個周期。因此利用上升沿計數(shù)手段,將0-47999用16位二進制數(shù)表示,而在從0-47999的計數(shù)過程中,該二進制數(shù)的最高位只有一次狀態(tài)變化,故可取對應(yīng)二進制數(shù)的最高位來輸出達到分頻到1KHz的目的。如下代碼為將晶振振蕩器48MHz頻率分頻成1KHz信號:5.2、計數(shù)器對時間基準(zhǔn)脈沖進行計數(shù),完成計時功能。實現(xiàn)數(shù)字秒表的設(shè)計需要模6和模10計數(shù)器進行組合??紤]到秒表的暫停和清零等功能,在設(shè)計計數(shù)器模塊時,必須有時鐘輸入端、使能以及清零端。在有時鐘信號輸入的情況下,當(dāng)使能端無效時,
16、計數(shù)器不能進行計數(shù);當(dāng)清零端有效時,計數(shù)重新歸為0值。而為了實現(xiàn)計數(shù)的目的,故必須將各個計數(shù)器級聯(lián)來實現(xiàn)從0000”00-5959”99的計數(shù),使得級聯(lián)的各技術(shù)模塊有共同的清零端與使能端,因此該單個模塊需要有輸出進位以及該時刻的計數(shù)值并且前一級的進位端連在下一級的使能端上。如下為模6和模10計數(shù)器代碼:5.2.1、模6計數(shù)器為了實現(xiàn)在秒表計數(shù)是0-5的計數(shù)部分,故須設(shè)計一個模6計數(shù)器,輸入時鐘信號、使能和清零,遇上升沿則記一次數(shù),當(dāng)從0記到5時,進位端(用于與下一級計數(shù)器級聯(lián))有效,且遇上升沿后從5變到0,并且輸出的還有每一時刻的計數(shù)值。5.2.2、模10計數(shù)器為了實現(xiàn)在秒表計數(shù)是0-9的計數(shù)
17、部分,故須設(shè)計一個模10計數(shù)器,輸入時鐘信號、使能和清零,遇上升沿則記一次數(shù),當(dāng)從0記到9時,進位端(用于與下一級計數(shù)器級聯(lián))有效,且遇上升沿后從9變到0,并且輸出的還有每一時刻的計數(shù)值。5.3、控制電路控制計數(shù)器的運行、暫停以及復(fù)位;產(chǎn)生鎖存器的使能信號。從如下狀態(tài)圖可知,在設(shè)計控制模塊時,為實現(xiàn)開發(fā)板上控制秒表的運行暫停和清零功能,必須設(shè)置兩個控制輸入端,以及需要時鐘信號輸入端。在時鐘信號輸入情況下,由狀態(tài)圖顯示,在輸入不同的控制信號是,控制模塊需輸出信號控制計數(shù)器及其他各模塊的清零和使能端,即當(dāng)外部控制運行/暫停鍵首次按下時,控制模塊輸出控制技術(shù)模塊最開始的計數(shù)器模塊使能有效,各模塊清零
18、無效;當(dāng)?shù)诙伟聪聲r為暫停信號,控制模塊控制鎖存器鎖存并控制顯示。當(dāng)清零控制鍵按下時,控制模塊控制技術(shù)模塊清零,故要兩個輸出使能端。5.4、鎖存器鎖存數(shù)據(jù),使顯示保持鎖定。為達到鎖存數(shù)據(jù)目的,則必須要有對應(yīng)的8個數(shù)碼顯示數(shù)據(jù)輸入,當(dāng)其中兩個數(shù)碼數(shù)據(jù)為不變的,故只需輸入6組由4位二進制碼構(gòu)成的數(shù)據(jù)、1KHz時鐘信號以及控制模塊作用的使能端。當(dāng)使能端有效的情況下,將輸入6組數(shù)據(jù)輸出。5.5、消抖電路消除按鍵輸入信號抖動的影響,輸出單脈沖。在手動控制按鍵輸入控制信號前,由于人為因素,會導(dǎo)致輸入信號不穩(wěn)定等問題,故須添加一個消抖模塊,使得每次按鍵只會產(chǎn)生一個脈沖。故除1KHz時鐘信號輸入外,還需要一個
19、按鍵控制信號輸入端以及一個按鍵消抖后輸出信號。5.6、譯碼器包括掃描計數(shù)器、3-8譯碼器、數(shù)據(jù)選擇器以及7段譯碼器;控制8個數(shù)碼管一掃描方式顯示計時結(jié)果。譯碼模塊的功能是對之前計數(shù)模塊的計數(shù)值進行譯碼,使其可以在數(shù)碼管上顯示出來。在8個數(shù)碼管中有兩個數(shù)碼管顯示是不變的,故不需要輸出,所以譯碼模塊要求輸入需要譯碼的6組數(shù)據(jù)以及1KHz時鐘信號。譯碼模塊除了要求對每一個可能的值(0-9)進行譯碼外,還有設(shè)計要求8個數(shù)碼管顯示共用一個段位,故還需設(shè)計一個3-8譯碼模塊對8個數(shù)碼顯示管進行選擇,使其輪流顯示,在1KHz的掃描下,使人看上去是8個數(shù)碼管同時顯示的。l5.7、計數(shù)器模塊由模6和模10計數(shù)器
20、級聯(lián)而成。為了實現(xiàn)從0000”00-5959”99的計數(shù),需要將4個模10計數(shù)模塊和2個模6計數(shù)模塊級聯(lián),并且為了達到設(shè)計要求是這6個計數(shù)器工作在100Hz的時鐘信號下,可利用一個模10的計數(shù)模塊對1KHz進行分頻,輸出的信號頻率即為100Hz,該總計數(shù)模塊最終需輸出6組計數(shù)數(shù)據(jù)以及其最終的進位。5.8、top文件由以上各個文件相互連接而成,以及硬件的管腳管腳分布。將之前所建立的各個模塊級聯(lián)起來,從按鍵輸入信號到按鍵消抖模塊再進而連接到控制器,通過控制模塊對總計數(shù)器模塊、鎖存器模塊、譯碼器模塊、分頻器模塊相互連接起來,并設(shè)置晶振輸入信號以及兩個按鍵控制信號輸入,再由譯碼器模塊知,秒表設(shè)計的最終
21、輸出由一個3-8對應(yīng)的8位位選信號和一組7位的段選信號組成。最后對總文件的輸出進行管腳分配,并下載到FPGA開發(fā)板上驗證設(shè)計。六、仿真結(jié)果與分析:6.1 1000HZ信號的產(chǎn)生6.2 10位計數(shù)器的產(chǎn)生由圖可得,10位計數(shù)器從0000計到10016.3 6位計數(shù)器的產(chǎn)生由圖可得,6位計數(shù)器從0000計到0101。6.4七段數(shù)碼管顯示數(shù)字6.5鎖存器由圖可得,當(dāng)沒有時鐘信號時Q不變。6.6 分頻器 1000Hz-100Hz七、分配引腳和下載實現(xiàn):全部仿真通過后,就運行ISE 的設(shè)計實現(xiàn),然后再打開XILINX PACE,在里面分配引腳,即實現(xiàn)設(shè)計的輸入輸出端口與實際芯片的輸入輸出端口的對應(yīng)連接。
22、比如七段LED 管的控制信號就連接到實際電路的七個引腳。需要注意的是一些端口是固定的,不能胡亂的連接。比如時基信號即石英振蕩器所提供的信號就只能由P181輸入。同時還要考慮內(nèi)部的可配制邏輯塊CLB 的數(shù)量是否夠滿足程序的綜合要求。一切都準(zhǔn)備就緒后就可以運行Configure Device,選擇要下載的位文件(.bit)便可開始。八、實驗結(jié)論:8.1、本次實驗實現(xiàn)了秒表的計數(shù),復(fù)位,暫停,鎖顯等功能,讓我充分了解和認識到ISE 和Modelsim 軟件的強大功能和FPGA 技術(shù)的優(yōu)越性。并對軟件開發(fā)產(chǎn)生了興趣。8.2、仿真和下載實現(xiàn)是兩個不同的檢驗,仿真從軟件內(nèi)部來檢驗程序的合理性和正確性,準(zhǔn)確
23、性較高。而下載實現(xiàn)是從外部來觀察程序的實現(xiàn)效果,更直觀,但不具有準(zhǔn)確性。8.3、有時候下載實現(xiàn)了所有的功能,但是仿真通不過,這可能是因為程序中有些部分并不完善導(dǎo)致。從外部來看,效果是一樣的,但實際程序卻存在漏洞。附:參考文獻:數(shù)字設(shè)計原理與實踐 作者:(美)John F.Wakerly編FPGA應(yīng)用開發(fā)入門與典型實例 華清遠見嵌入式培訓(xùn)中心編附件:(源程序)1.TOP文件:library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity top is Port ( S_S : in STD_LOGIC; S_R : in STD_LOGIC; clk : in S
24、TD_LOGIC; Out8: out STD_LOGIC_VECTOR(7 downto 0); Seg : out STD_LOGIC_VECTOR (6 downto 0) );end top;architecture Behavioral of top isCOMPONENT fenpingqi_48m_1kPORT(clk : IN std_logic; q : OUT std_logic);END COMPONENT;COMPONENT counterPORT(clk : IN std_logic;eng : IN std_logic;clear : IN std_logic; o
25、u : OUT std_logic;daout1 : OUT std_logic_vector(3 downto 0);daout2 : OUT std_logic_vector(3 downto 0);daout3 : OUT std_logic_vector(3 downto 0);daout4 : OUT std_logic_vector(2 downto 0);daout5 : OUT std_logic_vector(3 downto 0);daout6 : OUT std_logic_vector(2 downto 0);END COMPONENT;COMPONENT keydbP
26、ORT(clk : IN std_logic;key_in : IN std_logic; key_out : OUT std_logic);END COMPONENT;COMPONENT controlPORT(clk : IN std_logic;q : IN std_logic;p : IN std_logic; j_clr : OUT std_logic;j_en : OUT std_logic;s_en : OUT std_logic);END COMPONENT;COMPONENT latchPORT(cnt_0 : IN std_logic_vector(3 downto 0);
27、cnt_00 : IN std_logic_vector(3 downto 0);cnt_1 : IN std_logic_vector(3 downto 0);cnt_11 : IN std_logic_vector(2 downto 0);cnt_2 : IN std_logic_vector(3 downto 0);cnt_22 : IN std_logic_vector(2 downto 0);display_in : IN std_logic; cnt0 : OUT std_logic_vector(3 downto 0);cnt00 : OUT std_logic_vector(3
28、 downto 0);cnt1 : OUT std_logic_vector(3 downto 0);cnt11 : OUT std_logic_vector(2 downto 0);cnt2 : OUT std_logic_vector(3 downto 0);cnt22 : OUT std_logic_vector(2 downto 0);END COMPONENT;COMPONENT displayPORT(clk_1k : IN std_logic;cnt0 : IN std_logic_vector(3 downto 0);cnt00 : IN std_logic_vector(3
29、downto 0);cnt1 : IN std_logic_vector(3 downto 0);cnt11 : IN std_logic_vector(2 downto 0);cnt2 : IN std_logic_vector(3 downto 0);cnt22 : IN std_logic_vector(2 downto 0); output: out STD_LOGIC_VECTOR(7 downto 0);seg : OUT std_logic_vector(7 downto 1);END COMPONENT;signal clk_1k,clk_100:std_logic;signa
30、l S_S_out,S_R_out:std_logic;signal clr_A,ena_A,lock_A:std_logic;signal co_out1,co_out2,co_out3,co_out4,co_out5:std_logic;signal dao1,dao2,dao3,dao5,daoA,daoB,daoC,daoE:std_logic_vector(3 downto 0);signal dao4,dao6,daoD,daoF:std_logic_vector(2 downto 0);signal Dig:std_logic_vector(2 downto 0);beginIn
31、st_fenpingqi_48000: fenpingqi_48m_1k PORT MAP(clk => clk,q => clk_1k);Inst_counter: counter PORT MAP(clk =>clk_1k ,eng =>ena_A ,clear =>clr_A ,daout1 =>dao1 ,daout2 => dao2,daout3 => dao3,daout4 => dao4,daout5 => dao5,daout6 => dao6);Inst_keydb1: keydb PORT MAP(clk =
32、>clk_1k ,key_in => S_S,key_out =>S_S_out );Inst_keydb2: keydb PORT MAP(clk =>clk_1k ,key_in => S_R,key_out =>S_R_out );Inst_control: control PORT MAP(clk =>clk_1k ,q =>S_S_out ,p =>S_R_out ,j_clr =>clr_A ,j_en =>ena_A ,s_en =>lock_A );Inst_latch: latch PORT MAP(cn
33、t_0 => dao1,cnt_00 => dao2,cnt_1 => dao3,cnt_11 => dao4,cnt_2 => dao5,cnt_22 => dao6,display_in =>lock_A ,cnt0 =>daoA,cnt00 => daoB,cnt1 => daoC,cnt11 => daoD,cnt2 => daoE,cnt22 =>daoF );Inst_display: display PORT MAP(clk_1k => clk_1k,cnt0 =>daoA ,cnt00 =
34、> daoB,cnt1 => daoC,cnt11 => daoD,cnt2 => daoE,cnt22 => daoF,output => Out8,seg => Seg);end Behavioral;2.模10計算器:entity counter10 is Port ( clr : in STD_LOGIC; clk : in STD_LOGIC; en : in STD_LOGIC; co : out STD_LOGIC; daout : out STD_LOGIC_VECTOR (3 downto 0);end counter10;archi
35、tecture Behavioral of counter10 issignal count:std_logic_vector(3 downto 0);beginprocess(clk,clr,count)beginif clr='1' thencount<="0000"co<='0'elsif(clk='1' and clk'event) thenif en='1' thenif count="1001" thencount<="0000"el
36、secount<=count+1;end if;end if;end if;if count="1001"and en='1' thenco<='1'elseco<='0'end if;daout<=count;end process;end Behavioral;3.模6計算器:entity counter6 is Port ( clr : in STD_LOGIC; clk : in STD_LOGIC; en : in STD_LOGIC; co : out STD_LOGIC; daout :
37、out STD_LOGIC_VECTOR (2 downto 0);end counter6;architecture Behavioral of counter6 issignal count:std_logic_vector(2 downto 0);beginprocess(clk,clr,count)beginif clr='1' thencount<="000" co<='0'elsif(clk='1' and clk'event) thenif en='1' thenif coun
38、t="101" thencount<="000"elsecount<=count+1;end if;end if;end if;if count="101"and en='1' thenco<='1'elseco<='0'end if;daout<=count;end process;end Behavioral;4.計算器級聯(lián):entity counter is Port ( clk : in STD_LOGIC; eng : in STD_LOGIC;
39、clear : in STD_LOGIC; ou : out STD_LOGIC; daout1 : out STD_LOGIC_VECTOR (3 downto 0); daout2 : out STD_LOGIC_VECTOR (3 downto 0); daout3 : out STD_LOGIC_VECTOR (3 downto 0); daout4 : out STD_LOGIC_VECTOR (2 downto 0); daout5 : out STD_LOGIC_VECTOR (3 downto 0); daout6 : out STD_LOGIC_VECTOR (2 downt
40、o 0);end counter;architecture Behavioral of counter isCOMPONENT fenpingqi_1k_100PORT(clk : IN std_logic; q : OUT std_logic);END COMPONENT;COMPONENT counter10PORT(clr : IN std_logic;clk : IN std_logic;en : IN std_logic; co : OUT std_logic;daout : OUT std_logic_vector(3 downto 0);END COMPONENT;COMPONE
41、NT counter6PORT(clr : IN std_logic;clk : IN std_logic;en : IN std_logic; co : OUT std_logic;daout : OUT std_logic_vector(2 downto 0);END COMPONENT;signal clk_100:std_logic;signal clr_A,ena_A:std_logic;signal co_out1,co_out2,co_out3,co_out4,co_out5:std_logic;beginInst_fenpingqi_10: fenpingqi_1k_100 P
42、ORT MAP(clk =>clk,q => clk_100);Inst_counter10_1: counter10 PORT MAP(clr => clear,clk =>clk_100 ,en => eng,co => co_out1,daout => daout1);Inst_counter10_2: counter10 PORT MAP(clr => clear,clk =>clk_100 ,en => co_out1,co => co_out2,daout => daout2);Inst_counter10_3
43、: counter10 PORT MAP(clr => clear,clk =>clk_100 ,en => co_out2,co => co_out3,daout => daout3);Inst_counter6_1: counter6 PORT MAP(clr =>clear ,clk =>clk_100,en =>co_out3,co =>co_out4 ,daout => daout4);Inst_counter10_4: counter10 PORT MAP(clr => clear,clk =>clk_100
44、,en => co_out4,co => co_out5,daout => daout5);Inst_counter6_2: counter6 PORT MAP(clr =>clear,clk =>clk_100,en =>co_out5,co =>ou,daout => daout6);end Behavioral;5.控制電路:entity control is Port ( clk : in STD_LOGIC; q : in STD_LOGIC; p : in STD_LOGIC; j_clr : out STD_LOGIC; j_en
45、: out STD_LOGIC; s_en : out STD_LOGIC);end control;architecture Behavioral of control issignal state:std_logic_vector(1 downto 0):="00"signal next_state:std_logic_vector(1 downto 0);signal key:std_logic_vector(1 downto 0);beginkey<=q&p;process(state,key)begincase state iswhen"0
46、0"=>if key="10" thennext_state<="01"elsenext_state<=state;end if;when"01"=>case key iswhen"10"=>next_state<="11"when"01"=>next_state<="10"when others=>next_state<=state;end case;when"10"
47、;=>if key="01" thennext_state<="01"elsenext_state<=state;end if;when others=>case key iswhen"10"=>next_state<="01"when"01"=>next_state<="00"when others=>next_state<=state;end case;end case;end process;process(c
48、lk)beginif rising_edge(clk) thenstate<=next_state;end if;end process;process(state)begincase state iswhen"00"=>j_clr<='1'j_en<='1's_en<='1'when"01"=>j_clr<='0'j_en<='1's_en<='1'when"10"=>j_clr
49、<='0'j_en<='1's_en<='0'when others=>j_clr<='0'j_en<='0's_en<='1'end case;end process;end Behavioral;6.分頻器(2個):entity fenpingqi_48m_1k is Port ( clk : in STD_LOGIC; q : out STD_LOGIC);end fenpingqi_48m_1k;architecture Behavioral of
50、fenpingqi_48m_1k issignal counter:STD_LOGIC_VECTOR (15 downto 0);beginprocess(clk)beginif(clk='1'and clk'event)thenif counter=47999 thencounter<=(others=>'0');else counter<=counter+1;end if;end if;q<= counter(15);end process;end Behavioral;entity fenpingqi_1k_100 is P
51、ort ( clk : in STD_LOGIC; q : out STD_LOGIC);end fenpingqi_1k_100;architecture Behavioral of fenpingqi_1k_100 issignal counter:STD_LOGIC_vector(3 downto 0);beginprocess(clk)beginif(clk='1'and clk'event)thenif counter=9 thencounter<="0000"else counter<=counter+1;end if;end
52、 if;q<=counter(3);end process;end Behavioral;7.顯示電路:entity display is Port ( clk_1k : in STD_LOGIC; cnt0 : in STD_LOGIC_VECTOR (3 downto 0); cnt00 : in STD_LOGIC_VECTOR (3 downto 0); cnt1 : in STD_LOGIC_VECTOR (3 downto 0); cnt11 : in STD_LOGIC_VECTOR (2 downto 0); cnt2 : in STD_LOGIC_VECTOR (3 d
53、ownto 0); cnt22 : in STD_LOGIC_VECTOR (2 downto 0); output: out STD_LOGIC_VECTOR(7 downto 0); seg : out STD_LOGIC_VECTOR (7 downto 1);end display;architecture Behavioral of display issignal dig:std_logic_vector(2 downto 0):="000"signal bcd:std_logic_vector(3 downto 0):="1000"sign
54、al seg7:std_logic_vector(7 downto 1):="1111110"beginprocess(clk_1k)beginif clk_1k'event and clk_1k='1' thendig<=dig+1;end if;end process;process(dig)begincase dig iswhen"000"=>bcd<=cnt0;when"001"=>bcd<=cnt00;when"010"=>bcd<=&qu
55、ot;1010"when"011"=>bcd<=cnt1;when"100"=>bcd<='0'& cnt11;when"101"=>bcd<="1010"when"110"=>bcd<=cnt2;when"111"=>bcd<='0'&cnt22;when others=>bcd<="1010"end case;end pro
56、cess;process(bcd)begincase bcd iswhen"0000"=>seg7<="0000001"when"0001"=>seg7<="1001111"when"0010"=>seg7<="0010010"when"0011"=>seg7<="0000110"when"0100"=>seg7<="1001100"when"0101"=>seg7<="0100100"when"0110"=>seg7<="1100000"when"0111"=>seg7<="0001111"when"
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄉(xiāng)鎮(zhèn)衛(wèi)生院工作經(jīng)驗與發(fā)展建議計劃
- 機械制造行業(yè)安全規(guī)范
- 文化行業(yè)助理職責(zé)概述
- 文化藝術(shù)行業(yè)營銷工作總結(jié)
- 機場前臺服務(wù)總結(jié)
- 2024年稅務(wù)師題庫【滿分必刷】
- 2024年認位置的教案
- 2024年窮人教案6篇
- 農(nóng)村建筑構(gòu)建合同(2篇)
- 出租車包班合同(2篇)
- 機械工程技術(shù)訓(xùn)練智慧樹知到期末考試答案章節(jié)答案2024年北京航空航天大學(xué)
- 人工智能導(dǎo)論智慧樹知到期末考試答案章節(jié)答案2024年哈爾濱工程大學(xué)
- 江蘇某高速公路基本表格及用表說明
- 醫(yī)生與患者關(guān)系中的信任與治療
- 心衰患者的容量管理中國專家共識-共識解讀
- 山東省濟南市2023-2024學(xué)年高一上學(xué)期1月期末考試數(shù)學(xué)試題(解析版)
- 文字學(xué)概要完整版本
- 手術(shù)室搶救工作制度
- ce自我聲明模板
- 鋼閘門監(jiān)理評估報告
- 高檔養(yǎng)老社區(qū)項目計劃書
評論
0/150
提交評論