電子科技大學(xué)FPGA實(shí)驗(yàn)秒表報(bào)告_第1頁
電子科技大學(xué)FPGA實(shí)驗(yàn)秒表報(bào)告_第2頁
電子科技大學(xué)FPGA實(shí)驗(yàn)秒表報(bào)告_第3頁
電子科技大學(xué)FPGA實(shí)驗(yàn)秒表報(bào)告_第4頁
電子科技大學(xué)FPGA實(shí)驗(yàn)秒表報(bào)告_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、33 電 子 科 技 大 學(xué)現(xiàn)代電子技術(shù)綜合實(shí)驗(yàn)報(bào)告姓名: #* 學(xué)號:*學(xué)院:電子工程學(xué)院指導(dǎo)老師:皇曉輝摘要:本次實(shí)驗(yàn),是基于FPGA的秒表設(shè)計(jì)。秒表是00:00:00計(jì)數(shù)到59:59:99,使用VHDL語言編寫秒表的程序,并設(shè)計(jì)有開始/暫停以及保持/恢復(fù)的功能。本試驗(yàn)利用ISE進(jìn)行設(shè)計(jì)輸入和綜合,在modelsim軟件上實(shí)現(xiàn)了波形的仿真,將程序下載到芯片Spartan-3A and 3AN上,并在七段數(shù)碼管上實(shí)現(xiàn)了秒表的顯示,在FPGA的按鍵上實(shí)現(xiàn)對秒表的控制功能。關(guān)鍵字:FPGA,VHDL,秒表 目錄第一章 引言-4第二章 設(shè)計(jì)背景-5 2.1 FPGA概念-5 2.2 FPGA設(shè)計(jì)流

2、程-6 2.3 VHDL語言簡介-7 2.4 VHDL語言的優(yōu)勢-8第三章 程序設(shè)計(jì)-93.1 各模塊設(shè)計(jì)思路-9第四章 仿真-254.1 仿真軟件使用說明-144.2 狀態(tài)仿真圖-16致謝-20附錄(各程序代碼)-21 控制模塊代碼-21 顯示模塊代碼-22 所存模塊代碼-24 計(jì)數(shù)器模塊代碼-24 消抖模塊代碼-26 分頻模塊代碼-27 Top總代碼-28 引腳連接-34 第一章 引言本文主要任務(wù)是針對設(shè)計(jì)的要求,基于FPGA利用硬件描述語言VHDL完成數(shù)字秒表的設(shè)計(jì),通過仿真,分析,綜合并最終下載到FPGA里實(shí)現(xiàn)。本次實(shí)驗(yàn)是我們第一次接觸VHDL語言。設(shè)計(jì)秒表的過程并不難,通過本次實(shí)驗(yàn)讓

3、我們對FPGA有了一定的概念,掌握了部分VHDL語言的編寫和仿真的步驟。整個過程我們不僅學(xué)會了程序的編寫,同時(shí)還清楚了怎樣設(shè)計(jì)一個高效的電路,這在數(shù)字電路的學(xué)習(xí)上讓我們提升了一個高度。這次實(shí)驗(yàn)對今后電路的設(shè)計(jì)和VHDL的學(xué)習(xí)是一個良好的開端。第二章 設(shè)計(jì)背景2.1 FPGA的概念 FPGA,即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。以硬件描述語言(Verilog或VHDL)所完成的電路設(shè)計(jì),可以經(jīng)過簡單的綜合與布局,快速

4、的燒錄至 FPGA 上進(jìn)行測試,是現(xiàn)代 IC設(shè)計(jì)驗(yàn)證的技術(shù)主流。這些可編輯元件可以被用來實(shí)現(xiàn)一些基本的邏輯門電路或者更復(fù)雜一些的組合功能比如解碼器或數(shù)學(xué)方程式。在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件例如觸發(fā)器或者其他更加完整的記憶塊。FPGA采用了邏輯單元陣列LCA這樣一個概念,內(nèi)部包括可配置邏輯模塊CLB、輸出輸入模塊IOB和內(nèi)部連線三個部分。 FPGA是可編程器件,與傳統(tǒng)邏輯電路和門陣列(如PAL,GAL及CPLD器件)相比,F(xiàn)PGA具有不同的結(jié)構(gòu)。FPGA利用小型查找表(16×1RAM)來實(shí)現(xiàn)組合邏輯,每個查找表連接到一個D觸發(fā)器的輸入端,觸發(fā)器再來驅(qū)動其他邏

5、輯電路或驅(qū)動I/O,由此構(gòu)成了既可實(shí)現(xiàn)組合邏輯功能又可實(shí)現(xiàn)時(shí)序邏輯功能的基本邏輯單元模塊,這些模塊間利用金屬連線互相連接或連接到I/O模塊。FPGA的邏輯是通過向內(nèi)部靜態(tài)存儲單元加載編程數(shù)據(jù)來實(shí)現(xiàn)的,存儲在存儲器單元中的值決定了邏輯單元的邏輯功能以及各模塊之間或模塊與I/O間的聯(lián)接方式,并最終決定了FPGA所能實(shí)現(xiàn)的功能,F(xiàn)PGA允許無限次的編程。 2.2 FPGA設(shè)計(jì)流程對于目標(biāo)器件為FPGA和CPLD的HDL設(shè)計(jì),其工程設(shè)計(jì)的基本流程如圖 2-1所示?,F(xiàn)具體說明如下圖 2-1 EDA設(shè)計(jì)流程1、文本編輯用任何文本編輯器都可以進(jìn)行,通常VHDL文件保存為vhd文件,Verilog文件保存為v

6、文件。2、使用編譯工具編譯源文件HDL的編譯器有很多,ACTIVE公司,MODELSIM公司,SYNPLICITY公司,SYNOPSYS公司,VERIBEST公司等都有自己的編譯器。3、邏輯綜合將源文件調(diào)入邏輯綜合軟件進(jìn)行綜合。綜合的目的是在于將設(shè)計(jì)的源文件由語言轉(zhuǎn)換為實(shí)際的電路。但是此時(shí)還沒有在芯片中形成真正的電路。這一步的最終目的是生成門電路級的網(wǎng)表(Netlist)。4、布局、布線將第3步生成的網(wǎng)表文件調(diào)入PLD廠家提供的軟件中進(jìn)行布線,即把設(shè)計(jì)好的邏輯安放到CPLDFPGA內(nèi)。這一步的目的是生成用于下載(編程Programming)的編程文件。在這一步,將用到第3步生成的網(wǎng)表,并根據(jù)C

7、PLDFPGA廠商的器件容量,結(jié)構(gòu)等進(jìn)行布局、布線。這就好像在設(shè)計(jì)PCB時(shí)的布局布線一樣。先將各個設(shè)計(jì)中的門根據(jù)網(wǎng)表的內(nèi)容和器件的結(jié)構(gòu)放在器件的特定部位。然后,在根據(jù)網(wǎng)表中提供的各門的連接,把各個門的輸入輸出連接起來。最后,生成一個供編程的文件。這一步同時(shí)還會加一些時(shí)序信息(Timing)到你的設(shè)計(jì)項(xiàng)目中去,以便于你做后仿真。5、后仿真利用在布局布線中獲得的精確參數(shù),用仿真軟件驗(yàn)證電路的時(shí)序。(也叫布局布線仿真或時(shí)序仿真)。這一步主要是為了確定你的設(shè)計(jì)在經(jīng)過布局布線之后,是不是還滿足你的設(shè)計(jì)要求。6、編程,下載如果前幾步都沒有發(fā)生錯誤,并且符合設(shè)計(jì)要求,這一步就可以將由適配器等產(chǎn)生的配置或下載

8、文件通過編程器或下載電纜下載到目標(biāo)芯片中。7、硬件測試硬件測試的目的是為了在更真實(shí)的環(huán)境中檢驗(yàn)HDL設(shè)計(jì)的運(yùn)行情況,特別是對于HDL程序設(shè)計(jì)上不是十分規(guī)范,語義上含有一定歧義的程序。2.3 VHDL語言簡介VHDL全名Very-High-Speed Integrated Circuit HardwareDescription Language,誕生于1982年。VHDL翻譯成中文就是超高速集成電路硬件描述語言。VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式、描述風(fēng)格以及語法是十分類似于一般的計(jì)算機(jī)高級語言。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一

9、項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部和內(nèi)部,即設(shè)計(jì)實(shí)體的內(nèi)部功能和算法完成部分。在對一個設(shè)計(jì)實(shí)體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就可以直接調(diào)用這個實(shí)體。這種將設(shè)計(jì)實(shí)體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計(jì)的基本點(diǎn)?,F(xiàn)在,VHDL和VERILOG作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言,又得到眾多EDA公司的支持,在電子工程領(lǐng)域,已成為事實(shí)上的通用硬件描述語言。2.4 VHDL語言的優(yōu)勢 嚴(yán)格地講,VHDL是一種用來描述數(shù)字邏輯系統(tǒng)的“編程語言”。它通過對硬件行為的直接描述來實(shí)現(xiàn)對硬件的物理實(shí)現(xiàn),代表了當(dāng)今硬件設(shè)計(jì)的發(fā)展方向。VHDL是為了滿足邏輯

10、設(shè)計(jì)過程中的各種需求而設(shè)計(jì)的。第一,它是可以用來描述邏輯設(shè)計(jì)的結(jié)構(gòu),比如邏輯設(shè)計(jì)中有多少個子邏輯,而這些子邏輯又是如何連接的。除此之外,VHDL并不十分關(guān)心一個具體邏輯依靠何種方式實(shí)現(xiàn),而是把開發(fā)者的精力集中到邏輯所實(shí)現(xiàn)的功能上。第二,VHDL采用類似高級語言的語句格式完成對硬件行為的描述,具備更強(qiáng)的模塊化能力,并擁有良好的可讀性以及程序的移植性。另外,VHDL淡化狀態(tài)機(jī),與或表達(dá)式等早一代硬件描述語言中的元素,用更類似于高級語言的表達(dá)式取代。這些也是為什么把VHDL稱為“編程語言”的原因。第三,VHDL給出邏輯的模擬與調(diào)試為設(shè)計(jì)工作提供了最大的空間。VHDL調(diào)試的過程是相當(dāng)靈活的:一方面可以

11、使用傳統(tǒng)的調(diào)試方法,比如適用傳統(tǒng)的波形激勵或編寫測試向量;另一方面,可以使用一些VHDL原碼調(diào)試器,這類調(diào)試器可以大大加快VHDL程序調(diào)試的速度,因?yàn)樗梢韵裾{(diào)試軟件一樣單步跟蹤調(diào)試每一條語句,并且可以設(shè)置斷點(diǎn),觀察內(nèi)部變量等。這些功能是傳統(tǒng)的調(diào)試仿真方法所不具備的。這種調(diào)試器比較著名的有Aldec的Active-HDL。擁有高效率的生成代碼,能夠節(jié)省大量的資源。甚至不必編寫任何測試向量便可以進(jìn)行源代碼級的調(diào)試。而且,設(shè)計(jì)者可以非常方便地比較各種方案之間的可行性及其優(yōu)劣而不需做任何實(shí)際的電路實(shí)驗(yàn)。 VHDL語言在編程時(shí)要更加規(guī)范,程序結(jié)構(gòu)要適合整個系統(tǒng)的硬件結(jié)構(gòu),要符合各模塊的信號時(shí)序關(guān)系,以

12、及數(shù)據(jù)流的走向。VHDL語言的設(shè)計(jì)格式更是面向具體的硬件對象的語言。VHDL的語言特點(diǎn)主要有:(1)更加類似軟件上的高級語言,具備更強(qiáng)的模塊化能力并擁有良好的可讀性以及程序的移植性;(2)淡化狀態(tài)機(jī),與或表達(dá)式等早一代硬件描述語言中的元素,用更類似于高級語言的表達(dá)式取代;(3)擁有高效率的生成代碼,能夠節(jié)省大量的資源。第三章 程序設(shè)計(jì) 3.1各模塊設(shè)計(jì)思路3.1.1秒表設(shè)計(jì)原理圖3.1.23.1.2.1 按鍵消抖 按鍵消抖電路應(yīng)用計(jì)數(shù)器的分頻功能以及與門電路,將按下瞬間激起的高電平延遲一個周期以致抵消,從而達(dá)到消抖的作用。當(dāng)按鍵產(chǎn)生抖動時(shí),keyin產(chǎn)生高電平,為了使keyout為低電平,將k

13、eyin與一個與門相連,使與門的另一端在抖動產(chǎn)生的一個周期內(nèi)輸入為0,所以在這個周期內(nèi),與門的輸出恒為0,并將輸出端接入keyout,從而實(shí)現(xiàn)消抖的功能。if rising_edge(clk_1k) thenifcnt_2 = 3 thenk3 <= '1'elsek3 <= '0'cnt_2 <= cnt_2+1;end if;該局是利用計(jì)數(shù)器的分頻功能;key_out2 <= not k3 and k4;該局是利用與門的功能;從而實(shí)現(xiàn)消抖的。通過計(jì)數(shù)器與狀態(tài)寄存,使得按下 key1(start_stop)、key2(split_res

14、et),這兩個按鍵時(shí),產(chǎn)生一個脈沖信號,實(shí)現(xiàn)了兩個功能鍵的控制功能(源程序見附錄1)。 3.1.2.2 狀態(tài)控制器 狀態(tài)控制器首先通過一個2位的向量定義了4個狀態(tài):正常、暫停、清零、鎖存即(normal、halt、reset、lock),以及按下兩個按鍵以后,每個狀態(tài)的轉(zhuǎn)換,狀態(tài)機(jī)有三個輸出,根據(jù)狀態(tài)器的變化與變化,三個輸出分別是計(jì)數(shù)使能carry_in,清零使能rst,鎖存使能latch。其分別接到計(jì)數(shù)器的第一位的進(jìn)位輸入,計(jì)數(shù)器的清零端,以及鎖存器的使能端,以達(dá)到控制計(jì)數(shù)器與鎖存器,功能的目的。(源程序見附錄1)2.掃描控制及顯示譯碼的電路框圖 因?yàn)閷?shí)驗(yàn)板上的顯示電路為下圖因?yàn)槠渲粦?yīng)用了一

15、根總線,大大節(jié)省了I/O口的數(shù)量,從而大大減少了制作成本,所以其顯示譯碼的電路圖應(yīng)該如下當(dāng)有時(shí)鐘作用于掃描模塊時(shí),不斷對8個數(shù)碼管進(jìn)行掃描,例如,q2q1q0為001時(shí),把c1的數(shù)據(jù)賦給bcd2led進(jìn)行顯示。3.1.2.3 時(shí)鐘分頻器 時(shí)鐘分頻器應(yīng)用計(jì)數(shù)器的模數(shù)的不同對晶振源進(jìn)行分頻,例如將48mhz分為1000hz,選用一個48000模的計(jì)數(shù)器對其進(jìn)行分頻,并應(yīng)用480000模的計(jì)數(shù)器將48mhz分為100hz。FPGA自帶的時(shí)鐘為48MHZ晶振源,但是秒表的基準(zhǔn)時(shí)鐘應(yīng)該是100HZ的時(shí)鐘,并且為了使得8位的數(shù)碼管能夠連續(xù)顯示,我們也需要另一個1KHZ的時(shí)鐘,對位選信號進(jìn)行掃頻以實(shí)現(xiàn)連續(xù)顯

16、示,因此分頻器使非常關(guān)鍵的。對輸入的48MHZ進(jìn)行一下操作:要實(shí)現(xiàn)N分頻,則輸入源時(shí)鐘信號clk每經(jīng)過N/2個上升沿,則對輸出信號去反。 (分頻器源文件見附錄1)。3.1.2.4 計(jì)數(shù)器 秒表一共需要六個計(jì)數(shù)器,2個模6的計(jì)數(shù)器,4個模10的計(jì)數(shù)器,通過if語句先判斷是否有進(jìn)位輸入,當(dāng)時(shí)鐘上升沿到來時(shí)計(jì)數(shù)一次,再通過if語句判斷計(jì)數(shù)是否到1001(模六計(jì)數(shù)器為0101),計(jì)數(shù)記到1001時(shí)則自動歸零,另外還有對清零位的判斷,若清零位有效則計(jì)數(shù)器始終保持為0。各個計(jì)數(shù)器之間,通過將低位的進(jìn)位輸出賦值給高位的進(jìn)位輸入,從而達(dá)到計(jì)數(shù)器之間的級聯(lián),10毫秒位的計(jì)數(shù)器每當(dāng)100HZ時(shí)鐘上升沿到來時(shí)計(jì)一次

17、數(shù),從而實(shí)現(xiàn)了秒表的整體計(jì)數(shù)功能。(源程序見附錄1)3.1.2.5 鎖存器鎖存器分為透明鎖存器和不透明鎖存器,本設(shè)計(jì)中,我們應(yīng)用的是透明選擇器,如下圖,即當(dāng)使能端en有效時(shí),鎖存器為“通”,即直接將計(jì)數(shù)器輸入的數(shù)據(jù)傳輸出去,當(dāng)時(shí)能端en無效時(shí),鎖存器進(jìn)入鎖存功能,此時(shí)停止計(jì)數(shù),并將當(dāng)前狀態(tài)輸出。(源程序見附錄1)3.1.3.6 顯示模塊a.位選掃描 當(dāng)1KHZ的時(shí)鐘上升沿到來時(shí),位選計(jì)數(shù)器加一,從而實(shí)現(xiàn)循環(huán)顯示,由于掃描速度很快,人眼無法分辨,從視覺上秒表實(shí)際是連續(xù)顯示。程序如下: process(clk_1khz) begin if rising_edge (clk_1khz) then s

18、<=s+1; end if; end process;choose<=s;b.數(shù)碼管譯碼 將每一位的BCD碼輸出接到譯碼器上,使其能讓七段數(shù)碼管能顯示對應(yīng)的十進(jìn)制下的數(shù)字,從而實(shí)現(xiàn)的譯碼器的顯示。(源程序見附錄1) 第四章 仿真4.1 仿真軟件使用說明4.1.1 ModelSim介紹ModelSim支持PC和UNIX平臺,是單一內(nèi)核支持VHDL和Verilog混合仿真的HDL語言仿真器。ModelSim不僅可以完成設(shè)計(jì)的功能驗(yàn)證,也可實(shí)現(xiàn)邏輯綜合后的門級仿真以及布局布線后的功能與時(shí)序驗(yàn)證。ModelSim完全支持VHDL和Verilog標(biāo)準(zhǔn);采用直接編輯技術(shù),大大提高HDL編譯和仿

19、真速度。還可以利用ModelSim調(diào)用設(shè)計(jì)文件進(jìn)行仿真分析。在調(diào)試環(huán)境中,設(shè)計(jì)者可以通過ModelSim的快速調(diào)試步驟以及對各種信號的監(jiān)控功能(無論信號處于VHDL層,還是處于混合語言層)使仿真的執(zhí)行過程形象直觀化,幫助設(shè)計(jì)者及時(shí)發(fā)現(xiàn)漏洞,縮短設(shè)計(jì)周期。ModelSim最大的特點(diǎn)是其強(qiáng)大的調(diào)試功能:先進(jìn)的數(shù)據(jù)流窗口,可以迅速追蹤到生產(chǎn)不定或者錯誤狀態(tài)的原因;性能分析工具幫助分析性能瓶頸,加速仿真;代碼覆蓋率檢查確保測試的完備;多種模式的波形比較功能;先進(jìn)的 SignalSpy功能,可以方便地訪問VHDL或者VHDL和Verilog混合設(shè)計(jì)中的底層信號;支持加密IP;可以實(shí)現(xiàn)與Matlab的Si

20、mulink的聯(lián)合仿真。4.1.2 ISE環(huán)境中ModelSim的使用ModelSim是一個獨(dú)立的仿真工具,它在工作的時(shí)候并不需要其他軟件的協(xié)助,在Xilinx公司的ISE集成開發(fā)環(huán)境中給ModelSim仿真軟件預(yù)留了接口,通過這個接口可以從ISE集成環(huán)境中直接啟動ModelSim工具進(jìn)行仿真。這個過程通常會給初學(xué)者一個錯覺,以為ISE集成環(huán)境和ModelSim工具是聯(lián)合工作的,其實(shí)ISE并沒有集成ModelSim工具,只是預(yù)留了軟件接口。為了說明ModelSim的用戶接口,將使用從ISE集成開發(fā)環(huán)境中直接啟動ModelSim仿真工具的方法。使用此種方法啟動ModelSim工具需要具備3個條件

21、:第一,啟動ISE集成開發(fā)環(huán)境并建立了一個FPGACPLD的工程項(xiàng)目;第二,添加設(shè)計(jì)源代碼并且編譯通過;第三,使用ISE中的TestFixture或者TestBenchWaveform工具為當(dāng)前的設(shè)計(jì)提供一個測試模板(Testbench),并且在測試模板中添加設(shè)計(jì)激勵。只有上述條件具備之后才可以從ISE的當(dāng)前資源操作窗中直接啟動ModelSim工具并運(yùn)行仿真,以下使用ISE自帶的一個例子加以說明。在ISE中直接啟動ModelSim1、在Windows操作系統(tǒng)中選擇開始程序Xilinx ISE 10.1Project Navigator命令,啟動ISE集成開發(fā)環(huán)境。2、在ISE主窗口中選擇Fil

22、eOpen Example命令,彈出Open Example對話框,如圖所示,然后在Select an Example Project欄目中選擇“goldcode-ver-217”,在Destination Directory中選擇項(xiàng)目存放的目錄,單擊OK按鈕打開例子程序。3、在資源管理窗口(Source in Project)中的模塊視圖(Model View)中選中的測試文件“testbench.tf”,在相應(yīng)的當(dāng)前資源操作窗口(Process for Current Source)中將會出現(xiàn)與Modelsim仿真器相關(guān)的行為仿真(Simulate Behavioral Verilog M

23、odel),翻譯后仿真(Simulate Post-Map Verilog Model)和布局布線后仿真(Simulate Post-Place & Route Verilog Model)等4個不同的操作選項(xiàng),如圖所示:4、雙擊Simulate Behavioral Model操作選項(xiàng),將啟動Modelsim仿真器。5、在Modelsim主窗口中選擇View/All命令,將顯示所有的窗口。在當(dāng)前資源操作窗口中選擇任意一個操作選項(xiàng)都可以啟動相應(yīng)階段的仿真操作,如果相應(yīng)階段的仿真文件不存在,那么集成環(huán)境將自動生成仿真文件。4.2 狀態(tài)仿真圖A計(jì)數(shù)器模6計(jì)數(shù)器:模10計(jì)數(shù)器:B.分頻器.C

24、鎖存器D消抖E控制F顯示致謝 此次實(shí)驗(yàn),從一開始什么都不懂到最后自己完成設(shè)計(jì),要多多感謝劉老師的細(xì)心講解。劉老師從最基本的數(shù)電知識的復(fù)習(xí)到VHDL語言的滲透,對我完成本次設(shè)計(jì)的完成功不可沒。這對我以后學(xué)習(xí)電路設(shè)計(jì)和語言編程增添了很多信心,附錄1:1、頂層源文件library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity top is Port ( clk_top : in STD_LOGIC; key1 : in STD_LOGIC; ke

25、y2 : in STD_LOGIC; ncso : out STD_LOGIC; displayo : out STD_LOGIC_VECTOR (6 downto 0); chooseo : out STD_LOGIC_VECTOR (2 downto 0);end top;architecture Behavioral of top issignal a: std_logic;signal b: std_logic;signal r: std_logic;signal c: std_logic;signal c12:std_logic;signal c23:std_logic;signal

26、 c34:std_logic;signal c45:std_logic;signal c56:std_logic;signal la: std_logic;signal one: std_logic;signal two: std_logic;signal four: std_logic_vector(3 downto 0);signal six: std_logic_vector(3 downto 0);signal w: std_logic_vector(3 downto 0);signal e: std_logic_vector(3 downto 0);signal n: std_log

27、ic_vector(3 downto 0);signal i: std_logic_vector(3 downto 0);signal result1: std_logic_vector(3 downto 0);signal result2: std_logic_vector(3 downto 0);signal result3: std_logic_vector(3 downto 0);signal result4: std_logic_vector(3 downto 0);signal result5: std_logic_vector(3 downto 0);signal result6

28、: std_logic_vector(3 downto 0); COMPONENT controlPORT(clk1000Hz : IN std_logic;start_stop : IN std_logic;split_reset : IN std_logic; rst : OUT std_logic;carry_in : OUT std_logic;latch : OUT std_logic);END COMPONENT;COMPONENT count6PORT(clk : IN std_logic;rst : IN std_logic;carry_in : IN std_logic;ca

29、rry_out:out std_logic;count : OUT std_logic_vector(3 downto 0);END COMPONENT;COMPONENT countPORT(clk : IN std_logic;rst : IN std_logic;carry_in : IN std_logic; carry_out:out std_logic;count : OUT std_logic_vector(3 downto 0);END COMPONENT;COMPONENT displayPORT(clk1000hz : IN std_logic;d1 : IN std_lo

30、gic_vector(3 downto 0);d2 : IN std_logic_vector(3 downto 0);d3 : IN std_logic_vector(3 downto 0);d4 : IN std_logic_vector(3 downto 0);d5 : IN std_logic_vector(3 downto 0);d6 : IN std_logic_vector(3 downto 0); choose : OUT std_logic_vector(2 downto 0);ncs : OUT std_logic;display7 : OUT std_logic_vect

31、or(6 downto 0);END COMPONENT;COMPONENT f_divPORT(clk : IN std_logic; clk100hz : OUT std_logic;clk1000hz : OUT std_logic);END COMPONENT;COMPONENT suocunPORT(latch : IN std_logic;count1 : IN std_logic_vector(3 downto 0);count2 : IN std_logic_vector(3 downto 0);count3 : IN std_logic_vector(3 downto 0);

32、count4 : IN std_logic_vector(3 downto 0);count5 : IN std_logic_vector(3 downto 0);count6 : IN std_logic_vector(3 downto 0); d1 : OUT std_logic_vector(3 downto 0);d2 : OUT std_logic_vector(3 downto 0);d3 : OUT std_logic_vector(3 downto 0);d4 : OUT std_logic_vector(3 downto 0);d5 : OUT std_logic_vecto

33、r(3 downto 0);d6 : OUT std_logic_vector(3 downto 0);END COMPONENT;COMPONENT xiaodouPORT(clk_1k : IN std_logic;key_in1 : IN std_logic;key_in2 : IN std_logic; key_out1 : OUT std_logic;key_out2 : OUT std_logic);END COMPONENT;beginInst_control: control PORT MAP(clk1000Hz => a ,start_stop => one ,s

34、plit_reset => two ,rst => r ,carry_in => c ,latch => la);u1: count PORT MAP(clk => b ,rst => r ,carry_in => c ,carry_out=>c12,count => w);u2: count PORT MAP(clk => b ,rst => r ,carry_in =>c12 ,carry_out=>c23,count => e); u3: count PORT MAP(clk => b ,rst =

35、> r ,carry_in =>c23 ,carry_out=>c34,count => n);u4: count6 PORT MAP(clk => b ,rst => r ,carry_in => c34 ,carry_out=>c45,count => four); u5: count PORT MAP(clk => b ,rst => r ,carry_in =>c45 ,carry_out=>c56,count => i );u6: count6 PORT MAP(clk => b ,rst =&

36、gt; r ,carry_in => c56 ,carry_out=> open,count => six); Inst_display: display PORT MAP(clk1000hz => a ,d1 => result1 ,d2 => result2 ,d3 => result3 ,d4 => result4,d5 => result5 ,d6 => result6 ,choose => chooseo,ncs => ncso,display7 => displayo);Inst_f_div: f_div

37、 PORT MAP(clk => clk_top ,clk100hz => b ,clk1000hz => a);Inst_suocun: suocun PORT MAP(latch => la ,d1 => result1 ,d2 => result2 ,d3 => result3,d4 => result4,d5 => result5,d6 => result6,count1 => w ,count2 => e ,count3 => n ,count4 => four,count5 => i ,cou

38、nt6 => six);Inst_xiaodou: xiaodou PORT MAP(clk_1k => a ,key_in1 => key1 ,key_in2 => key2 ,key_out1 => one ,key_out2 => two);end Behavioral;2、控制電路library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity control is Port ( clk1000hz

39、: in STD_LOGIC; start_stop : in STD_LOGIC; split_reset : in STD_LOGIC; rst : out STD_LOGIC; carry_in : out STD_LOGIC; latch : out STD_LOGIC);end control;architecture Behavioral of control is type states is(reset,normal,halt,lock);signal c_state,n_state:states;signal control_sig:std_logic_vector(1 do

40、wnto 0);begincontrol_sig<=start_stop & split_reset;process(control_sig,c_state)begincase c_state iswhen reset=> case control_sig is when "10" =>n_state<=normal;when others =>n_state<=reset;end case;when normal=>case control_sig iswhen"10"=>n_state<=

41、halt;when"01"=>n_state<=lock;when others=>n_state<=normal;end case;when halt=> case control_sig is when "10" =>n_state<=normal;when"01"=>n_state<=reset;when others =>n_state<=halt;end case;when lock=>case control_sig iswhen"01&qu

42、ot;=>n_state<=normal;when others=>n_state<=lock;end case;when others =>n_state<=reset;end case;end process;process(clk1000Hz)beginif rising_edge(clk1000Hz) thenc_state<=n_state;end if;end process;process(c_state)begincase c_state iswhen reset=>rst<='1'carry_in<=

43、'1'latch<='1'when normal=>rst<='0'carry_in<='1'latch<='1'when halt=>rst<='0'carry_in<='0'latch<='1'when lock=>rst<='0'carry_in<='1'latch<='0'when others=>rst<='1&#

44、39;carry_in<='1'latch<='1'end case;end process;end Behavioral;3、消抖電路library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;use IEEE.STD_LOGIC_ARITH.ALL;entity xiaodou is Port ( clk_1k : in STD_LOGIC; key_in1 : in STD_LOGIC; key_in2 : in STD_LOGIC; key_out1 : o

45、ut STD_LOGIC; key_out2 : out STD_LOGIC);end xiaodou;architecture Behavioral of xiaodou is signal k1,k2: STD_LOGIC;signal cnt_1: STD_LOGIC_VECTOR(1 downto 0);signal k3,k4: STD_LOGIC;signal cnt_2: STD_LOGIC_VECTOR(1 downto 0);beginprocess(clk_1k,key_in1)beginif rising_edge(clk_1k) thenifcnt_1 = 3 then

46、k1 <= '1'elsek1 <= '0'cnt_1 <= cnt_1+1;end if;k2 <= k1;end if;if key_in1 = '0' thencnt_1 <= "00"end if;end process;key_out1 <= not k1 and k2;process(clk_1k,key_in2)beginif rising_edge(clk_1k) thenifcnt_2 = 3 thenk3 <= '1'elsek3 <= 

47、9;0'cnt_2 <= cnt_2+1;end if;k4 <= k2;end if;if key_in2 = '0' thencnt_2 <= "00"end if;end process;key_out2 <= not k3 and k4;end Behavioral;4、顯示電路library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity display is Po

48、rt ( clk1000hz : in STD_LOGIC; d1 : in STD_LOGIC_VECTOR (3 downto 0); d2 : in STD_LOGIC_VECTOR (3 downto 0); d3 : in STD_LOGIC_VECTOR (3 downto 0); d4 : in STD_LOGIC_VECTOR (3 downto 0); d5 : in STD_LOGIC_VECTOR (3 downto 0); d6 : in STD_LOGIC_VECTOR (3 downto 0); choose : out STD_LOGIC_VECTOR (2 do

49、wnto 0); ncs : out STD_LOGIC; display7 : out STD_LOGIC_VECTOR (6 downto 0);end display;architecture Behavioral of display issignal s:std_logic_vector (2 downto 0);signal data:std_logic_vector (3 downto 0);begin process(clk1000hz)begin if rising_edge(clk1000hz) thenif s<7 then s<=s+1; else s<

50、;="000"end if; end if; end process; choose<=s; process(d1,d2,d3,d4,d5,d6,s) begin case s is when"000"=>data<=d1; when"001"=>data<=d2; when"011"=>data<=d3; when"100"=>data<=d4; when"110"=>data<=d5; when"

51、111"=>data<=d6; when others=>data<="1111" end case; end process;process(data)begin case data is when "0000" =>display7<="0000001" when "0001" =>display7<="1001111" when "0010" =>display7<="0010010" when "0011" =>display7<="0000110" when "0100" =>display7<=&

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論