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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

11、辦法。實(shí)驗(yàn)二 一位全加器的設(shè)計一、實(shí)驗(yàn)?zāi)康耐ㄟ^此實(shí)驗(yàn)讓用戶逐漸料及、熟悉和掌握FPGA開發(fā)軟件Quartu II的使用方法及原理圖輸入程序電路的方法。二、實(shí)驗(yàn)原理一位全加器的電路原理圖如圖2-1所示,真值表如表2-1所列。可根據(jù)全加器的電路原理圖或真值表用Verilog HDL語言描述。圖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 13、 主要實(shí)驗(yàn)設(shè)備計算機(jī)和Mag

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

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

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

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

16、使用完全相同的方法將Verilog文本文件變成原理圖中的一個元件(Symbol),實(shí)現(xiàn)Veriog文本設(shè)計與原理圖的混合輸入設(shè)計方法。轉(zhuǎn)換中需要注意以下三點(diǎn)。(1)被轉(zhuǎn)換的Verilog文本也要呈打開狀態(tà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è)計全加器頂層文件為了建立全加器的頂層文件,必須另打開一個原理圖編輯窗口,方法同前,即再次選擇菜單File | New | Block Diagram/Schematic Fil

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

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

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

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

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

22、7: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è)計文件(頂層模塊)命名為cnt_4b.bdf并保存。其模塊原理圖如圖3-2所示。圖3-2 4位加法計數(shù)器頂層模塊6選擇目標(biāo)器件并對對應(yīng)的引腳進(jìn)行鎖定,在這里所選擇的器件為Atera公司Cyclone ll系列的EP2C35F672C8芯片

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

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

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

27、要取決于秒時鐘的精確度。為了保證計時準(zhǔn)確對系統(tǒng)時鐘50MHz進(jìn)行了50000000分頻,從而得到了1Hz的秒脈沖,至于顯示部分與LED數(shù)碼管原理相同,而校對電路用戶可以自由發(fā)揮,如定義3個鍵keystart、keymon、keyadd,分別用于控制時鐘的計時開始、調(diào)整功能選擇和加1處理,從而完成對現(xiàn)在時間的調(diào)整。本實(shí)驗(yàn)的校時電路在此僅僅完成了暫停、清零等基本功能。三、主要實(shí)驗(yàn)設(shè)備計算機(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管腳分配見表4-1。注意,時鐘信號應(yīng)選擇clk,而不是clock。表4-1 引腳鎖定方法信號引腳信號引腳信號引腳信號引腳seg0J8dig1K5Led2P7key3P1seg1M3dig2G3Led3P6key4AD13seg2K6dig3G4Led4P3key5AF14seg3J6dig4J3Led5R8key6P25seg4U10dig5K4Led6R6key7P26seg5N9dig6L3Led7T7clock/clkB13seg6L10dig7M4key0C13clock0N2seg7L9Led0R5key1 D13foutF18dig0L6Led

29、1P9key2N13對該工程文件進(jìn)行全程編輯處理,若在編輯過程中發(fā)現(xiàn)錯誤,則找出并更改錯誤,直至編譯成功為止。程序清單:clock.vmodule clock(clk,key,dig,seg);/模塊名clockinput clk;/輸入時鐘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;/定義計數(shù)寄存器reg23:0hour;/定義現(xiàn)在時

30、刻寄存器reg sec,keyen;/定義標(biāo)志位reg1:0dout1,dout2,dout3;/寄存器wire1:0key_done;/按鍵消抖輸出assign dig = dig_r;/輸出數(shù)碼管選擇assign seg = seg_r;/輸出數(shù)碼管譯碼結(jié)果/秒信號產(chǎn)生部分always (posedge clk) /定義clock上升沿觸發(fā)begincount = count + 1b1;if(count = 25d25000000)/0.5S到了嗎?begincount = 25d0;/計數(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;/將琴鍵開關(guān)轉(zhuǎn)換為乒乓開關(guān)end/數(shù)碼管動態(tài)掃描顯示部分always (posedge clk) /count17:15大約1ms改變一次begincase(count17:15)/選擇掃描顯示數(shù)據(jù)3d0:disp_dat = hour3:0;/秒個位3d1:disp_dat = hour7:4;

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

33、d3:dig_r = 8b11110111;/選擇第四個數(shù)碼管顯示3d4:dig_r = 8b11101111;/選擇第五個數(shù)碼管顯示3d5:dig_r = 8b11011111;/選擇第六個數(shù)碼管顯示3d6:dig_r = 8b10111111;/選擇第七個數(shù)碼管顯示3d7:dig_r = 8b01111111;/選擇第八個數(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/計時處理部分always (negedge sec or negedge key_done1)/計時處理beginif(!key_done1)/是清零鍵嗎?

35、beginhour = 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;/分個位加一if(hour11:8 = 4ha)beginhour11:8 = 4h0;hour15:12 = hour15:12 + 1b1;/分十位加一if(hour15:12 = 4h6)

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

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

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

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

40、2:0 lampa,lampb;reg7:0 numa,numb;/時間計數(shù)器reg tempa,tempb;/防重進(jìn)入標(biāo)志reg2:0 StateA,StateB;/A、B方向燈控制狀態(tài)機(jī)的狀態(tài)/設(shè)置各種燈的計數(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)b

41、eginif(!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:l

42、ampa 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,功能:顯示交通燈時間,并產(chǎn)生1Hz時鐘使能信號。module traffic_test(clock,clken,rst_n,acount,bcount,seg,dig);inputclock;/系統(tǒng)時鐘(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ù)器reg1:0 cnt;/數(shù)碼管掃描計數(shù)器reg3:

45、0disp_dat;/數(shù)碼管掃描顯存wire div_clk;/分頻時鐘/產(chǎn)生1Hz時鐘使能信號always (posedge clock)beginif(clken)clk_cnt = 26h0;elseclk_cnt = 26d49999999);/時鐘分頻進(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;/第一個數(shù)碼管2d1:disp_dat = acount3:0;/第二個數(shù)碼管2d2:disp_dat = bcount7:4;/第五個數(shù)碼管2d3:disp_dat = bcount3:0;/第六個數(shù)碼管endcasecase(cnt)/選擇數(shù)碼管顯示位2d0:dig = 8b01111111;/選擇第一個數(shù)碼管顯示2d1:dig = 8b10111111;/選擇第二個數(shù)碼管顯示2d2:dig = 8b11110111;/選擇第五個數(shù)碼管顯示2d3:dig = 8b11111011;/選擇第六個數(shù)碼管顯示endcaseendendalways (disp_dat)begincase(di

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論