數(shù)字系統(tǒng)設(shè)計(jì)及VHDL 實(shí)驗(yàn)指導(dǎo)書(shū)2014_第1頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)及VHDL 實(shí)驗(yàn)指導(dǎo)書(shū)2014_第2頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)及VHDL 實(shí)驗(yàn)指導(dǎo)書(shū)2014_第3頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)及VHDL 實(shí)驗(yàn)指導(dǎo)書(shū)2014_第4頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)及VHDL 實(shí)驗(yàn)指導(dǎo)書(shū)2014_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)一 Quartus9.0快速入門(mén)一、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)實(shí)驗(yàn)讓學(xué)生了解,熟悉和掌握Quartus9.0開(kāi)發(fā)軟件的使用方法及Verilog HDL的編程方法。學(xué)習(xí)簡(jiǎn)單時(shí)序電路的設(shè)計(jì)和硬件測(cè)試。二、實(shí)驗(yàn)原理在LED1LED8引腳上周期性的輸出流水?dāng)?shù)據(jù),如原來(lái)輸出的數(shù)據(jù)是11111100 則表示點(diǎn)亮LED1,LED2,流水一次后,輸出地?cái)?shù)據(jù)應(yīng)該為11111000,而此時(shí)應(yīng)該點(diǎn)亮LED1LED3三個(gè)發(fā)光二極管,就可以實(shí)現(xiàn)LED流水燈。為了觀察方便,流水速率最好在2Hz左右,在MagicSOPC核芯板上有一數(shù)字信號(hào)源,可選擇CLOCK3的2HZ時(shí)鐘信號(hào)源源作為流水燈的時(shí)鐘源。三、主要實(shí)驗(yàn)設(shè)備計(jì)算機(jī)和Magi

2、cSOPC實(shí)驗(yàn)箱。四、實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)的內(nèi)容是建立可用于控制LED流水燈的簡(jiǎn)單硬件電路,要求在MagicSOPC試驗(yàn)箱上實(shí)現(xiàn)LED1LED8發(fā)光二極管流水燈顯示。實(shí)驗(yàn)步驟如下:1啟動(dòng)Quartus II建立一個(gè)空白工程,然后命名為led_water.qpf。2新建Verilog HDL 源程序文件ledwater.v,輸入程序代碼并保存,進(jìn)行綜合編譯,若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。程序清單:module ledwater(led,clk); /模塊名ledwateroutput7:0 led; /定義LED輸出口input clk; /定義時(shí)鐘輸出口reg8:0 l

3、ed_r; /定義輸出寄存器assign led = led_r7:0; /寄存器輸出always (posedge clk) /在時(shí)鐘上升沿觸發(fā)進(jìn)程begin led_r = led_r 1; /是,則輸出左移一位 if(led_r = 9d0) /循環(huán)完畢嗎? led_r = 9b111111111; /是,則重新賦初值endendmodule3從設(shè)計(jì)文件創(chuàng)建模塊,由ledwater.v生成名為ledwater.bsf的模塊符號(hào)文件。4新建圖形設(shè)計(jì)文件命名為led_water.bdf并保存。在空白處雙擊鼠標(biāo)左鍵,將symbol對(duì)話框中l(wèi)ibraries:project下的ledwater模

4、塊放在圖形文件led_water.bdf中,加入輸入、輸出引腳,雙擊各引腳符號(hào),進(jìn)行引腳命名。將與ledwater模塊led7.0連接的引腳命名為led7.0,與clk連接的引腳命名為clock3。完整的頂層模塊原理圖如圖1-1所示。圖1-1 流水燈頂層模塊5選擇目標(biāo)芯片并對(duì)相應(yīng)的引腳進(jìn)行鎖定,在這里所選擇的器件為Altera公司的CycloneII系列的EP2C35F672C8芯片,引腳鎖定方法如下表所列。將未使用的引腳設(shè)置為三態(tài)輸入(一定要設(shè)置,否則可能會(huì)損壞芯片)設(shè)置方法。信號(hào)引腳信號(hào)引腳信號(hào)引腳Led0R5Led3P6Led6R6Led1P9Led4P3Led7T3Led2P7Led5

5、R8Clock3AE146將led_water.bdf設(shè)置為頂層實(shí)體。對(duì)該工程進(jìn)行全程編譯處理,若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。7最后確保數(shù)字源(B4區(qū)域)的JP11的短路帽是處于ON位置,JP6中CLOCK3的短路帽處于2Hz位置:拿出Z-Blaster下載電纜,并將此電纜的兩端分別接到到PC機(jī)的USB接口和實(shí)驗(yàn)箱主板模塊上的JTAG下載口(提示:下載線有小箭頭指示的為第1腳,與JTAG接口的J1腳相連),打開(kāi)電源,執(zhí)行下載命令,把程序下載到FPGA器件中,此時(shí),即可在MagicSOPC試驗(yàn)箱上看到流水燈。8更改JP6排針CLOCK3處短路帽的位置。觀察流水燈的變

6、化。注意: 選擇好器件后,先編譯頂層文件,后分配引腳,是比較有利的,因?yàn)榫幾g之后,Quartus II軟件會(huì)自動(dòng)將所有輸入.輸出引腳記錄下來(lái),不需要重新輸入各個(gè)引腳的的信號(hào)名。分配引腳也可以通過(guò)編輯*qsf文件(該文件可以用記事本打開(kāi))實(shí)現(xiàn)。五、實(shí)驗(yàn)總結(jié)1文本輸入的文件存盤(pán)時(shí),文件名與模塊名一致,即ledwater.v。2項(xiàng)目名稱與頂層文件名一樣,即led_water.qpf。3USB接口和實(shí)驗(yàn)箱主板模塊上的JTAG下載口(提示:下載線有小箭頭指示的為第1腳,與JTAG接口的J1腳相連)。4驅(qū)動(dòng)的安裝:在初次使用USB-Blaster編程器前,需首先安裝USB驅(qū)動(dòng)程序。將USB-Blaster

7、編程器一端插入PC機(jī)的USB口,這時(shí)會(huì)彈出一個(gè)USB驅(qū)動(dòng)程序?qū)υ捒颍鶕?jù)對(duì)話框的引導(dǎo),選擇用戶自己搜索驅(qū)動(dòng)程序,假定Quartus安裝在D盤(pán),則驅(qū)動(dòng)程序的路徑為D:altera90sp2quartusdiversusb-blaster。安裝完畢后,打開(kāi)Quartus,選擇編程器,單擊左上角的Hardware Setup按鈕,在彈出的窗口中選擇USB-Blaster項(xiàng),雙擊之,此后就能使用。六、預(yù)習(xí)及思考1思考:如何實(shí)現(xiàn)左流水或其他花樣流水呢?自己動(dòng)手試試。2reg數(shù)據(jù)類型:Verilog HDL有兩大類數(shù)據(jù)類型,線網(wǎng)類型和寄存器類型,形式如下: regmsb:lsb reg1,reg2.reg

8、N;msb和lsb定義了范圍,并且均為常數(shù)值表達(dá)式。范圍定義是可選的:如果沒(méi)有定義范圍,缺省值為1位寄存器。reg型數(shù)據(jù)的默認(rèn)初始值是不定值X,它可以賦正值,也可以賦負(fù)值。當(dāng)一個(gè)reg型數(shù)據(jù)是一個(gè)表達(dá)式的操作數(shù)時(shí),它的值被當(dāng)做是無(wú)符號(hào)值,即正值。(如一個(gè)4位寄存器被賦值-1,則在表達(dá)式中進(jìn)行運(yùn)算時(shí),其值被認(rèn)為是+15。)reg型只表示被定義的信號(hào)將用在always塊內(nèi),理解這一點(diǎn)很重要。并不是說(shuō)reg型信號(hào)一定是寄存器或觸發(fā)器的輸出。雖然reg型信號(hào)常常是寄存器或觸發(fā)器的輸出,但并不一定總是這樣,只有在時(shí)序邏輯中它對(duì)應(yīng)的才是寄存器,而在組合邏輯電路中它表示一個(gè)節(jié)點(diǎn)。3按照上述工程進(jìn)行編譯,會(huì)出

9、現(xiàn)“Warning:Found pins functioning as undefined clocks and/or memory enables Info:Assuming node clock is an undefined clock”的警告。大概意思是說(shuō)發(fā)現(xiàn)“clock”節(jié)點(diǎn)沒(méi)有定義成時(shí)鐘信號(hào)。消除之個(gè)警告的方法如下:(1)選擇Assignments | Timing Seting 命令,在彈出的對(duì)話框中的Clock Setting 項(xiàng)選中Individual Clocks項(xiàng),如圖1-2所示。圖1-2 Clock設(shè)置頁(yè)面1(2)在圖1-2中按Clocks.進(jìn)行設(shè)置,在彈出的對(duì)話框中按

10、New.按鈕添加節(jié)點(diǎn),如圖1-3所示,并按圖1-3所示進(jìn)行設(shè)置,圖中Required fmax 為系統(tǒng)需求的最大時(shí)鐘頻率,在這里填50MHz就可以了。圖1-3 Clock設(shè)置頁(yè)面2(3)設(shè)置好之后一直按OK按鈕保存設(shè)置,最后再進(jìn)行編譯,原先的Warning就會(huì)消除。以上的操作是將“clock3”加入時(shí)鐘域。如時(shí)“clock3”不是一個(gè)時(shí)鐘信號(hào),可將設(shè)置屬性改為“Not a clock”,也可以消除Warning。注意:如果編譯后有些Warning 或Error不能消除或解決,可選中提示信息,按F1按鍵,打開(kāi)幫助文檔,Quartus II的幫助文檔將列出Warning或error產(chǎn)生的原因及解決

11、辦法。實(shí)驗(yàn)二 一位全加器的設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)此實(shí)驗(yàn)讓用戶逐漸料及、熟悉和掌握FPGA開(kāi)發(fā)軟件Quartu II的使用方法及原理圖輸入程序電路的方法。二、實(shí)驗(yàn)原理一位全加器的電路原理圖如圖2-1所示,真值表如表2-1所列??筛鶕?jù)全加器的電路原理圖或真值表用Verilog HDL語(yǔ)言描述。圖2-1 一位全加器原理圖f_adder.bdf表2-1 一位全加器邏輯功能真值表ainbin cin sum cout 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 1 1 0 0 1 0 0 1 1 0 1 0 1 0 1 0 1 1 0 1 1 1 1 1 1三、主要實(shí)驗(yàn)設(shè)備計(jì)算機(jī)和Magi

12、cSOPC實(shí)驗(yàn)箱。四、實(shí)驗(yàn)內(nèi)容1為本項(xiàng)工程設(shè)計(jì)建立文件夾假設(shè)本項(xiàng)設(shè)計(jì)的文件夾取名為adder,路徑為F:adder。2建立原理圖文件工程和仿真原理圖編輯輸入流程如下:(1)打開(kāi)原理圖編輯窗。打開(kāi)Quartus,選菜單File | New,在彈出的New對(duì)話框中選擇原理圖文件編輯輸入項(xiàng)Block Diagram/Schematic File(如圖2-2所示),按OK按鈕后打開(kāi)原理圖編輯窗口。圖2-2 選擇編輯文件類型(2)建立一個(gè)初始原理圖。在編輯窗口中的任何一個(gè)位置上右擊鼠標(biāo),將出現(xiàn)快捷菜單,選擇其中的輸入元件項(xiàng)Insert | Symbol(如圖2-3所示),或直接雙擊原理圖編輯窗口,于是將

13、彈出如圖2-4所示的輸入元件的對(duì)話框。在左下的Name欄鍵入輸入引腳符號(hào)input。然后單擊Symbol窗口的Ok按鈕,即可將元件調(diào)入原理圖編輯窗口中。(3)原理圖文件存盤(pán)。選擇菜單File | Save As,將此原理圖文件存于剛才建立的目錄F:adder中,將已設(shè)計(jì)好的原理圖文件取名為h_adder.bdf(注意默認(rèn)的后綴是.bdf,而且此原理圖尚未完成,因?yàn)橹患尤肓艘粋€(gè)輸入端口),并存盤(pán)在此文件夾內(nèi)。(4)建立原理圖文件為頂層設(shè)計(jì)的工程。然后將此文件h_adder.bdf設(shè)定為工程。(5)繪制半加器原理圖。創(chuàng)建工程后即進(jìn)入工程管理窗,設(shè)工程名是h_adder。注意工程管理窗左上角的工程路

14、徑和工程名是:F:/adder/h_adder。雙擊左側(cè)的工程名,再次進(jìn)入原理圖編輯窗。再雙擊原理圖編輯窗任何位置。再次彈出如圖2-4所示的輸入元件的對(duì)話框。分別在Name欄鍵入(調(diào)入)元件名and2、xor和輸出引腳output,并用單擊拖動(dòng)的方法,連接好的電路如圖2-5所示。然后分別在input和output引腳的PIN NAME上雙擊使其變黑色,再用鍵盤(pán)分別輸入各引腳名:a、b、co和so。最后,作為本項(xiàng)工程的頂層電路原理設(shè)計(jì)圖如圖2-5所示。 圖2-3 選擇打開(kāi)元件輸入窗 圖2-4 在元件輸入對(duì)話框輸入引腳圖2-5 半加器原理圖(6)仿真測(cè)試半加器。仿真波形如圖2-6所示,顯然與表2-

15、2的真值表有對(duì)應(yīng)關(guān)系,半加器設(shè)計(jì)成功。表2-2 半加器真值表absoco0000011010101101圖2-6 半加器仿真波形3將設(shè)計(jì)項(xiàng)目設(shè)置成可調(diào)用的元件為了構(gòu)成全加器的頂層設(shè)計(jì),必須將以上設(shè)計(jì)的半加器h_adder.bdf設(shè)置成可調(diào)用的底層元件。方法如圖2-7所示,在半加器原理圖文件h_adder.bdf處于打開(kāi)的情況下,選擇菜單命令File | Create/Update | Create Symbol Files for Current File,即可將當(dāng)前電路圖變成一個(gè)元件符號(hào)存盤(pán)(元件文件名是h_adder.bsf),以便在高層次設(shè)計(jì)中調(diào)用。圖2-7 將半加器封裝成一個(gè)元件可以使

16、用完全相同的方法將Verilog文本文件變成原理圖中的一個(gè)元件(Symbol),實(shí)現(xiàn)Veriog文本設(shè)計(jì)與原理圖的混合輸入設(shè)計(jì)方法。轉(zhuǎn)換中需要注意以下三點(diǎn)。(1)被轉(zhuǎn)換的Verilog文本也要呈打開(kāi)狀態(tài),而且必須在某工程打開(kāi)狀態(tài)下。(2)轉(zhuǎn)換好的元件必須存在當(dāng)前工程的路徑文件夾中,文件后綴也默認(rèn).bdf。(3)按圖2-7的方式進(jìn)行轉(zhuǎn)換,選擇Create Symbol Files for Current File項(xiàng)。4設(shè)計(jì)全加器頂層文件為了建立全加器的頂層文件,必須另打開(kāi)一個(gè)原理圖編輯窗口,方法同前,即再次選擇菜單File | New | Block Diagram/Schematic File

17、。然后將其設(shè)置成新的工程。首先將打開(kāi)的空的原理圖存盤(pán)于F:adder,文件取名為f_adder.bdf,作為本項(xiàng)設(shè)計(jì)的頂層文件。然后按照前面介紹的方法將頂層文件f_adder.bdf設(shè)置為工程。圖2-8是f_adder.bdf的工程設(shè)置窗口,其工程名和頂層文件名都是f_adder。 圖2-8 全加器f_adder.bdf工程設(shè)置 圖2-9 在f_adder工程下的原理圖編輯 窗中加入半加器建立工程后,在新打開(kāi)的原理圖編輯窗口雙擊鼠標(biāo),在彈出的窗口(圖2-9)中選擇Project下的先前存入的h_adder元件,調(diào)入原理圖編輯窗中。最后調(diào)出相關(guān)元件,按照?qǐng)D2-1進(jìn)行連接。5將設(shè)計(jì)項(xiàng)目進(jìn)行時(shí)序仿真

18、工程完成后即可進(jìn)行全程編譯。此后的所有流程都與以上介紹的方法和流程相同。圖2-10是全加器工程f_adder的仿真波形。圖2-10 全加器工程f_adder的仿真波形6選擇目標(biāo)器件并對(duì)相應(yīng)的引腳進(jìn)行鎖定,在這里所選擇的器件為altera公司cycloneII系列的EP2C35F672C8芯片,引腳鎖定方法如圖2-3所列。將未使用的引腳設(shè)置為三態(tài)輸入(一定要設(shè)置,否則可能會(huì)損壞芯片)。注意,SW1-SW3的IO電平應(yīng)設(shè)置為2.5V。表3.8 引腳鎖定方法信號(hào)引腳信號(hào)引腳信號(hào)引腳信號(hào)引腳SW1L25SW3J21binP9sumR6SW2L24ainR5cinP7coutT37最后把程序下載到FPG

19、A器件中。撥動(dòng)SW1-SW3,觀察發(fā)光二極管LED1LED3、LED7、led8的狀態(tài)。五、實(shí)驗(yàn)總結(jié)1總之,Verilog文本設(shè)計(jì)中可用例化語(yǔ)句調(diào)用原理圖構(gòu)成的元件,同樣,原理圖中也能調(diào)用文本程序構(gòu)成的元件。2總結(jié)原理圖輸入方法的要點(diǎn)。六、預(yù)習(xí)及思考1思考:如何實(shí)現(xiàn)頂層文件的輸入設(shè)計(jì)。2多種形式文件的輸入方法和相互調(diào)用方法。實(shí)驗(yàn)三 4位加法計(jì)數(shù)器一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)計(jì)數(shù)器的設(shè)計(jì)、仿真和硬件測(cè)試,進(jìn)一步熟悉Verilog HDL的編程方法。二、實(shí)驗(yàn)原理圖3-1是一個(gè)含計(jì)數(shù)使能、異步復(fù)位的4位加法計(jì)數(shù)器,圖中間是4位鎖存器;rst是異步清零信號(hào),低電平有效;clk是鎖存信號(hào);當(dāng)ena為1時(shí)使能鎖存器。

20、圖3-1 含計(jì)數(shù)使能、異步復(fù)位的4位加法計(jì)數(shù)器三、主要實(shí)驗(yàn)設(shè)備計(jì)算機(jī)和MagicSOPC實(shí)驗(yàn)箱。四、實(shí)驗(yàn)內(nèi)容1啟動(dòng)Quartus II 建立一個(gè)空白工程,然后命名為cnt_4b.qpf。2新建 Verilog HDL源程序文件cnt4b.v,輸入程序代碼并保存,進(jìn)行綜合編譯,若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。并將cnt4b.v封裝生成cnt4b.bsf元件。程序清單 cnt4b.vmodule cnt4b(clk,rst,ena,dout,cout);/模塊名cnt4binput clk,rst,ena;/輸入信號(hào)output3:0dout;/計(jì)數(shù)輸出output c

21、out;/進(jìn)位輸出reg3:0cnt;/計(jì)數(shù)器assign cout = &cnt;/進(jìn)位輸出assign dout = cnt;/計(jì)數(shù)器輸出always (posedge clk or negedge rst)beginif(rst = 1b0)/異步清零,低電平有效cnt = 4h0;else if (ena = 1b1)/同步使能計(jì)數(shù),高電平有效cnt = cnt + 1b1;endendmodule3建立波形仿真文件并進(jìn)行仿真驗(yàn)證。4數(shù)碼管動(dòng)態(tài)驅(qū)動(dòng)程序dec17s.v清單module decl7s(d,seg);/模塊名decl7sinput3:0 d;/輸入4位二進(jìn)制碼output7

22、:0seg;/七段譯碼輸出reg7:0 seg_r;/定義數(shù)碼管輸出寄存器assign seg = seg_r;/輸出數(shù)碼管譯碼結(jié)果always (d)begincase(d)/七段譯碼4h0:seg_r = 8hc0;/顯示04h1:seg_r = 8hf9;/顯示14h2:seg_r = 8ha4;/顯示24h3:seg_r = 8hb0;/顯示34h4:seg_r = 8h99;/顯示44h5:seg_r = 8h92;/顯示54h6:seg_r = 8h82;/顯示64h7:seg_r = 8hf8;/顯示74h8:seg_r = 8h80;/顯示84h9:seg_r = 8h90;/

23、顯示94ha:seg_r = 8h88;/顯示a4hb:seg_r = 8h83;/顯示b4hc:seg_r = 8hc6;/顯示c4hd:seg_r = 8ha1;/顯示d4he:seg_r = 8h86;/顯示e4hf:seg_r = 8h8e;/顯示fendcaseendendmodule將dec17s.v封裝生成dec17s.bsf元件。5新建圖形設(shè)計(jì)文件(頂層模塊)命名為cnt_4b.bdf并保存。其模塊原理圖如圖3-2所示。圖3-2 4位加法計(jì)數(shù)器頂層模塊6選擇目標(biāo)器件并對(duì)對(duì)應(yīng)的引腳進(jìn)行鎖定,在這里所選擇的器件為Atera公司Cyclone ll系列的EP2C35F672C8芯片,

24、引腳鎖定方法如表3-1所列。注意ena信號(hào)是撥檔開(kāi)關(guān)的輸入,I/O Bank 工作電壓是2. 5v,所在I/O電平要設(shè)置為2.5v。將未使用的引腳設(shè)置為三態(tài)輸入(一定要設(shè)置,否則可能會(huì)損壞芯片)。設(shè)置方法見(jiàn)3.1節(jié)。表3-1 引腳鎖定方法信號(hào)引腳信號(hào)引腳信號(hào)引腳信號(hào)引腳seg0J8seg6L10dig4J3enaL25seg1M3seg7L9dig5K4Led1R5seg2K6dig0L6dig6L3Led2P9seg3J6dig1K5dig7M4Led8T7seg4U10dig2G3clock0N2seg5N9dig3G4sys_rstAC13注:ena 信號(hào)引腳輸入應(yīng)設(shè)為2.5v電平標(biāo)準(zhǔn)。

25、7將cnt_4b.bdf 設(shè)置為頂層實(shí)體。對(duì)該工程文件進(jìn)行全程編譯處理,若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,知道編譯成功為止。8確保數(shù)字信號(hào)源(B4 區(qū)域)的JP11的短路帽是處于ON位置,JP7中CLOCK0的短路帽處于4Hz位置;最后把程序下載到FPGA 器件中。撥動(dòng)撥動(dòng)開(kāi)關(guān)SW1,按SYS_RST按鍵,觀察數(shù)碼管和發(fā)光二極管的狀態(tài),是否與設(shè)計(jì)想符合。五、實(shí)驗(yàn)總結(jié)1文本文件生成原理圖元件的方法及其元件調(diào)用。2多個(gè)源文件如何進(jìn)行管理,放在同一個(gè)項(xiàng)目的文件夾下。六、預(yù)習(xí)及思考1帶異步復(fù)位的4位加法計(jì)數(shù)器程序always (posedge clock or negedge rst_n)be

26、ginif(!rst_n)cnt=4d0;elsecnt= cnt +4d1;end帶異步復(fù)位的4位加法計(jì)數(shù)器RTL圖如圖3-3所示。2帶同步復(fù)位的4位加法計(jì)數(shù)器程序always (posedge clock)beginif(!rst_n)cnt=4d0;elsecnt= cnt +4d1;end帶同步復(fù)位的4位加法計(jì)數(shù)器RTL圖如圖3-4所示。 圖3-3 帶異步復(fù)位4位加法計(jì)數(shù)器RTL圖 圖3-4 帶同步復(fù)位4位加法計(jì)數(shù)器RTL圖實(shí)驗(yàn)四 數(shù)字時(shí)鐘設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)數(shù)字時(shí)鐘的硬件設(shè)計(jì)。二、實(shí)驗(yàn)原理一個(gè)完整的時(shí)鐘應(yīng)由3部分組成:秒脈沖發(fā)生電路、計(jì)數(shù)顯示部分和時(shí)鐘調(diào)整部分。一個(gè)時(shí)鐘的準(zhǔn)確與否主要

27、取決于秒時(shí)鐘的精確度。為了保證計(jì)時(shí)準(zhǔn)確對(duì)系統(tǒng)時(shí)鐘50MHz進(jìn)行了50000000分頻,從而得到了1Hz的秒脈沖,至于顯示部分與LED數(shù)碼管原理相同,而校對(duì)電路用戶可以自由發(fā)揮,如定義3個(gè)鍵keystart、keymon、keyadd,分別用于控制時(shí)鐘的計(jì)時(shí)開(kāi)始、調(diào)整功能選擇和加1處理,從而完成對(duì)現(xiàn)在時(shí)間的調(diào)整。本實(shí)驗(yàn)的校時(shí)電路在此僅僅完成了暫停、清零等基本功能。三、主要實(shí)驗(yàn)設(shè)備計(jì)算機(jī)和MagicSOPC實(shí)驗(yàn)箱。四、實(shí)驗(yàn)內(nèi)容1在QuartusII中建立了工程項(xiàng)目文件clock.qpf,并在該項(xiàng) 目下新建VerilogHDL源程序文件clock.v輸入程序代碼并保存。完整的VerilogHDL程序

28、參考清單3.18.2FPGA的I/O管腳分配見(jiàn)表4-1。注意,時(shí)鐘信號(hào)應(yīng)選擇clk,而不是clock。表4-1 引腳鎖定方法信號(hào)引腳信號(hào)引腳信號(hào)引腳信號(hào)引腳seg0J8dig1K5Led2P7key3P1seg1M3dig2G3Led3P6key4AD13seg2K6dig3G4Led4P3key5AF14seg3J6dig4J3Led5R8key6P25seg4U10dig5K4Led6R6key7P26seg5N9dig6L3Led7T7clock/clkB13seg6L10dig7M4key0C13clock0N2seg7L9Led0R5key1 D13foutF18dig0L6Led1

29、P9key2N13對(duì)該工程文件進(jìn)行全程編輯處理,若在編輯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更改錯(cuò)誤,直至編譯成功為止。程序清單:clock.vmodule clock(clk,key,dig,seg);/模塊名clockinput clk;/輸入時(shí)鐘input1:0 key;/輸入按鍵output7:0dig;/數(shù)碼管選擇輸出引腳output7:0 seg;/數(shù)碼管段輸出引腳reg7:0 seg_r;/定義數(shù)碼管輸出寄存器reg7:0 dig_r;/定義數(shù)碼管選擇輸出寄存器reg3:0 disp_dat;/定義顯示數(shù)據(jù)寄存器reg24:0count;/定義計(jì)數(shù)寄存器reg23:0hour;/定義現(xiàn)在時(shí)刻

30、寄存器reg sec,keyen;/定義標(biāo)志位reg1:0dout1,dout2,dout3;/寄存器wire1:0key_done;/按鍵消抖輸出assign dig = dig_r;/輸出數(shù)碼管選擇assign seg = seg_r;/輸出數(shù)碼管譯碼結(jié)果/秒信號(hào)產(chǎn)生部分always (posedge clk) /定義clock上升沿觸發(fā)begincount = count + 1b1;if(count = 25d25000000)/0.5S到了嗎?begincount = 25d0;/計(jì)數(shù)器清零sec = sec;/置位秒標(biāo)志endend/按鍵消抖處理部分assign key_done

31、= (dout1 | dout2 | dout3);/按鍵消抖輸出always (posedge count17)begindout1 = key;dout2 = dout1;dout3 = dout2;endalways (negedge key_done0)beginkeyen = keyen;/將琴鍵開(kāi)關(guān)轉(zhuǎn)換為乒乓開(kāi)關(guān)end/數(shù)碼管動(dòng)態(tài)掃描顯示部分always (posedge clk) /count17:15大約1ms改變一次begincase(count17:15)/選擇掃描顯示數(shù)據(jù)3d0:disp_dat = hour3:0;/秒個(gè)位3d1:disp_dat = hour7:4;/

32、秒十位3d2:disp_dat = 4ha;/顯示-3d3:disp_dat = hour11:8;/分個(gè)位3d4:disp_dat = hour15:12;/分十位3d5:disp_dat = 4ha;/顯示-3d6:disp_dat = hour19:16;/時(shí)個(gè)位3d7:disp_dat = hour23:20;/時(shí)十位endcasecase(count17:15)/選擇數(shù)碼管顯示位3d0:dig_r = 8b11111110;/選擇第一個(gè)數(shù)碼管顯示3d1:dig_r = 8b11111101;/選擇第二個(gè)數(shù)碼管顯示3d2:dig_r = 8b11111011;/選擇第三個(gè)數(shù)碼管顯示3d

33、3:dig_r = 8b11110111;/選擇第四個(gè)數(shù)碼管顯示3d4:dig_r = 8b11101111;/選擇第五個(gè)數(shù)碼管顯示3d5:dig_r = 8b11011111;/選擇第六個(gè)數(shù)碼管顯示3d6:dig_r = 8b10111111;/選擇第七個(gè)數(shù)碼管顯示3d7:dig_r = 8b01111111;/選擇第八個(gè)數(shù)碼管顯示endcaseendalways (posedge clk)begincase(disp_dat)4h0:seg_r = 8hc0;/顯示04h1:seg_r = 8hf9;/顯示14h2:seg_r = 8ha4;/顯示24h3:seg_r = 8hb0;/顯示

34、34h4:seg_r = 8h99;/顯示44h5:seg_r = 8h92;/顯示54h6:seg_r = 8h82;/顯示64h7:seg_r = 8hf8;/顯示74h8:seg_r = 8h80;/顯示84h9:seg_r = 8h90;/顯示94ha:seg_r = 8hbf;/顯示-default:seg_r = 8hff;/不顯示endcaseif(count17:15= 3d2)&sec)seg_r = 8hff;end/計(jì)時(shí)處理部分always (negedge sec or negedge key_done1)/計(jì)時(shí)處理beginif(!key_done1)/是清零鍵嗎?b

35、eginhour = 24h0;/是,則清零endelse if(!keyen)beginhour3:0 = hour3:0 + 1b1;/秒加1if(hour3:0 = 4ha)beginhour3:0 = 4h0;hour7:4 = hour7:4 + 1b1;/秒的十位加一if(hour7:4 = 4h6)beginhour7:4 = 4h0;hour11:8 = hour11:8 + 1b1;/分個(gè)位加一if(hour11:8 = 4ha)beginhour11:8 = 4h0;hour15:12 = hour15:12 + 1b1;/分十位加一if(hour15:12 = 4h6)b

36、eginhour15:12 = 4h0;hour19:16 = hour19:16 + 1b1;/時(shí)個(gè)位加一if(hour19:16 = 4ha)beginhour19:16 = 4h0;hour23:20 = hour23:20 + 1b1;/時(shí)十位加一endif(hour23:16 = 8h24)hour23:16 = 8h0;endendendendend endendmodule4把程序下載到FPGA器件中,觀察數(shù)碼管的顯示狀態(tài)。按下按鍵KEY1、KEY2觀察數(shù)字鐘的時(shí)間有什么變化。五、實(shí)驗(yàn)總結(jié)1提高計(jì)時(shí)準(zhǔn)確度的方法,關(guān)鍵是1秒時(shí)間的準(zhǔn)確度。2時(shí)鐘信號(hào)應(yīng)選擇clk(與圖4-1中的SYS

37、_CLK_50M相連),即鎖定引腳為B13,而不是CLOCK0、CLOCK1、CLOCK2、CLOCK3。如圖4-1所示。圖4-1 系統(tǒng)時(shí)鐘電路六、預(yù)習(xí)及思考自己動(dòng)手把校時(shí)功能添加進(jìn)去試試看。實(shí)驗(yàn)五 交通燈控制器一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)交通燈控制器的設(shè)計(jì),學(xué)習(xí)簡(jiǎn)單狀態(tài)機(jī)的設(shè)計(jì)和硬件測(cè)試。二、實(shí)驗(yàn)原理本實(shí)驗(yàn)設(shè)計(jì)的交通燈控制器要求實(shí)現(xiàn)對(duì)A、B兩個(gè)方向的紅、綠、黃三種燈的控制,并能實(shí)現(xiàn)時(shí)間顯示的倒計(jì)時(shí)。因此每個(gè)方向的燈可以用一個(gè)狀態(tài)機(jī)實(shí)現(xiàn),狀態(tài)的跳轉(zhuǎn)順序?yàn)榧t燈-綠燈-黃燈-紅燈(另一個(gè)的狀態(tài)應(yīng)為綠-黃-紅-綠),同時(shí)設(shè)計(jì)一個(gè)計(jì)時(shí)器,來(lái)記錄每種燈的倒計(jì)時(shí)時(shí)間。最后將交通燈的狀態(tài)信息輸出,至數(shù)碼管顯示模塊和交通

38、燈顯示模塊。注意一個(gè)方向的紅燈時(shí)間應(yīng)和另一個(gè)方向的綠黃燈時(shí)間總和相等。三、主要實(shí)驗(yàn)設(shè)備計(jì)算機(jī)和MagicSOPC實(shí)驗(yàn)箱。四、實(shí)驗(yàn)內(nèi)容1啟動(dòng)QuartusII建立一個(gè)空白工程,然后命名為traffic-top.qpf。2新建Verilog HDL源程序文件traffic.v、traffic_test、traffic_top.v,輸入程序代碼并保存,對(duì)各個(gè)HDL文件進(jìn)行綜合編譯,若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更改錯(cuò)誤,直至編譯成功為止。程序清單:交通燈程序。(1)交通燈控制器,文件traffic.v,本模塊實(shí)現(xiàn)交通燈控制器的邏輯功能。module traffic(clock,rst_n,clke

39、n,lampa,lampb,acount,bcount);inputclock;/系統(tǒng)時(shí)鐘50MHzinput rst_n;/同步復(fù)位信號(hào),低電平有效inputclken;/時(shí)鐘使能信號(hào):1Hz。output2:0lampa;/控制A方向三盞燈的亮滅;其中l(wèi)ampa2:0分/別控制A方向的綠燈、黃燈、紅燈(低電平燈亮)output2:0lampb;/控制B方向三盞燈的亮滅;其中l(wèi)ampb2:0分/別控制B方向的綠燈、黃燈、紅燈(低電平燈亮)output7:0acount;/用于A方向燈的時(shí)間顯示,8位BCD碼輸出output7:0bcount;/用于B方向燈的時(shí)間顯示,8位BCD碼輸出reg2

40、:0 lampa,lampb;reg7:0 numa,numb;/時(shí)間計(jì)數(shù)器reg tempa,tempb;/防重進(jìn)入標(biāo)志reg2:0 StateA,StateB;/A、B方向燈控制狀態(tài)機(jī)的狀態(tài)/設(shè)置各種燈的計(jì)數(shù)器的預(yù)置數(shù)parameter ared=8h30,/30秒ayellow=8h5,/5秒agreen=8h15,/15秒bred=8h20,/20秒byellow=8h5,/5秒bgreen=8h25;/25秒assign acount=numa;assign bcount=numb;/控制A方向的三種燈always (posedge clock or negedge rst_n)be

41、ginif(!rst_n)beginStateA = 3h0; lampa = 3b011;tempa = 1b0;endelse if(clken)beginif(!tempa)begintempa = 1b1;/防重進(jìn)入標(biāo)志case(StateA)/控制亮燈的順序0: begin numa = agreen;lampa = 3b011;StateA = 1; end1: begin numa = ayellow;lampa = 3b101;StateA = 2; end2: begin numa = ared;lampa = 3b110; StateA = 0; enddefault:la

42、mpa 1)if(numa3:0=0) begin numa3:0=4h9; numa7:4=numa7:4-4h1; endelse numa3:0=numa3:0-4h1; if (numa=2) tempa=1b0;endendend/控制A方向的三種燈always (posedge clock or negedge rst_n)beginif(!rst_n)beginlampb=3b110;StateB=3h0;tempb=1b0; endelse if (clken)begin if(!tempb) begin tempb=1b1;/防重進(jìn)入標(biāo)志 case (StateB)/控制亮燈

43、的順序0: begin numb=bred;lampb=3b110;StateB=1; end1: begin numb=bgreen;lampb=3b011;StateB=2; end2: begin numb=byellow;lampb=3b101;StateB=0; enddefault:lampb1) if(numb3:0=0) beginnumb3:0=4h9; numb7:4=numb7:4-4h1;endelse numb3:0=numb3:0-4h1;if(numb=2)tempb = 1b0; end endendendmodule(2)顯示控制程序,文件名為traffic.

44、v,功能:顯示交通燈時(shí)間,并產(chǎn)生1Hz時(shí)鐘使能信號(hào)。module traffic_test(clock,clken,rst_n,acount,bcount,seg,dig);inputclock;/系統(tǒng)時(shí)鐘(50MHz)inputrst_n;outputclken;input7:0acount;input7:0bcount;output7:0seg;/數(shù)碼管段碼輸出output7:0dig;/數(shù)碼管位碼輸出/I/O寄存器reg7:0seg;reg7:0dig;/內(nèi)部寄存器reg25:0clk_cnt;reg16:0count;/時(shí)鐘分頻計(jì)數(shù)器reg1:0 cnt;/數(shù)碼管掃描計(jì)數(shù)器reg3:0

45、disp_dat;/數(shù)碼管掃描顯存wire div_clk;/分頻時(shí)鐘/產(chǎn)生1Hz時(shí)鐘使能信號(hào)always (posedge clock)beginif(clken)clk_cnt = 26h0;elseclk_cnt = 26d49999999);/時(shí)鐘分頻進(jìn)程,用于數(shù)碼管掃描顯示always (posedge clock)begincount = count + 1b1;endassign div_clk = &count;/數(shù)碼管掃描顯示部分always (posedge clock) beginif(div_clk)cnt = cnt + 1b1;endalways (posedge

46、clock) beginif(div_clk)begincase(cnt)/選擇掃描顯示數(shù)據(jù)2d0:disp_dat = acount7:4;/第一個(gè)數(shù)碼管2d1:disp_dat = acount3:0;/第二個(gè)數(shù)碼管2d2:disp_dat = bcount7:4;/第五個(gè)數(shù)碼管2d3:disp_dat = bcount3:0;/第六個(gè)數(shù)碼管endcasecase(cnt)/選擇數(shù)碼管顯示位2d0:dig = 8b01111111;/選擇第一個(gè)數(shù)碼管顯示2d1:dig = 8b10111111;/選擇第二個(gè)數(shù)碼管顯示2d2:dig = 8b11110111;/選擇第五個(gè)數(shù)碼管顯示2d3:dig = 8b11111011;/選擇第六個(gè)數(shù)碼管顯示endcaseendendalways (disp_dat)be

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論