FPGA—基于HDL的十進(jìn)制計(jì)數(shù)器設(shè)計(jì)_第1頁
FPGA—基于HDL的十進(jìn)制計(jì)數(shù)器設(shè)計(jì)_第2頁
FPGA—基于HDL的十進(jìn)制計(jì)數(shù)器設(shè)計(jì)_第3頁
FPGA—基于HDL的十進(jìn)制計(jì)數(shù)器設(shè)計(jì)_第4頁
FPGA—基于HDL的十進(jìn)制計(jì)數(shù)器設(shè)計(jì)_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、基于HDL的十進(jìn)制計(jì)數(shù)器設(shè)計(jì)一、 實(shí)驗(yàn)?zāi)康?、掌握基于語言的ISE設(shè)計(jì)全流程;2、熟悉、應(yīng)用VerilogHDL描述數(shù)字電路;3、掌握基于Verilog的組合和時(shí)序邏輯電路的設(shè)計(jì)方法。4、掌握chipscope片內(nèi)邏輯分析儀的使用與調(diào)試方法。5、設(shè)計(jì)具有異步復(fù)位、同步使能的十進(jìn)制計(jì)數(shù)器,其計(jì)數(shù)結(jié)果可以通過七段數(shù)碼管、發(fā)光二極管等進(jìn)行顯示。二、 實(shí)驗(yàn)原理1、十進(jìn)制計(jì)數(shù)器的設(shè)計(jì)即是設(shè)置一變量,當(dāng)計(jì)數(shù)脈沖上升沿到來時(shí),先判斷是否為9,若是則置零,否則就進(jìn)行加一操作。將變量再進(jìn)行一個(gè)譯碼操作輸出到數(shù)碼管顯示即可。使能控制端異步清零端十進(jìn)制計(jì)數(shù)器七段數(shù)碼管顯示譯碼器時(shí)鐘端FPGA進(jìn)位圖1 實(shí)驗(yàn)原理圖2、

2、數(shù)碼管分為7 段和8 段,七段數(shù)碼管由 7段二極管組成。8段數(shù)碼管比起7段數(shù)碼管多了一個(gè)顯示小數(shù)點(diǎn)的LED。數(shù)碼管按發(fā)光二極管單元銜接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。本實(shí)驗(yàn)使用共陽數(shù)碼管。它是指將一切發(fā)光二極管的陽極接到一同構(gòu)成公共陽極(COM)的數(shù)碼管。共陽數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到電源VCC 上,當(dāng)某一字段發(fā)光二極管的陰極為低電平相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陰極為高電平相應(yīng)字段就不亮。共陽端可以作為位選端,實(shí)現(xiàn)動(dòng)態(tài)掃描。動(dòng)態(tài)掃描即是利用了人眼睛的視覺暫留現(xiàn)象,以合適的頻率顯示每一位數(shù)碼管,便會(huì)產(chǎn)生所有數(shù)碼管是一起點(diǎn)亮的錯(cuò)覺,數(shù)碼管原理圖如圖:圖2 共陽數(shù)碼管示意圖3、數(shù)碼管顯示

3、數(shù)字與對(duì)應(yīng)的輸入數(shù)據(jù)的關(guān)系如表所示:08'hc018'hf928'ha438'hb048'h9958'h9268'h8278'hf888'h8098'h90表1 數(shù)碼管顯示表4、本次設(shè)計(jì)一共有11個(gè)端口:輸入信號(hào):clk -待計(jì)數(shù)的時(shí)鐘。clr -異步清零信號(hào),當(dāng)clr=1,輸出復(fù)位為0,當(dāng)clr=0,正常計(jì)數(shù)。ena-使能控制信號(hào),當(dāng)ena=1,電路正常累加計(jì)數(shù),否則電路不工作。輸出信號(hào):q6:0-驅(qū)動(dòng)數(shù)碼管,顯示計(jì)數(shù)值的個(gè)位。cout -1bit數(shù)據(jù),顯示計(jì)數(shù)值向十位的進(jìn)位圖。三、 實(shí)驗(yàn)步驟1、整個(gè)系統(tǒng)主要設(shè)計(jì)

4、的模塊是:十進(jìn)制計(jì)數(shù)模塊和數(shù)碼管驅(qū)動(dòng)模塊,由于實(shí)驗(yàn)板的按鍵為實(shí)現(xiàn)硬件防抖,則需要將按鍵輸入的時(shí)鐘clk,先通過消抖模塊消抖后,再輸出至后續(xù)使用。圖3 系統(tǒng)結(jié)構(gòu)圖2、 分別進(jìn)行各個(gè)模塊的設(shè)計(jì)并進(jìn)行仿真測(cè)試。1)十進(jìn)制計(jì)數(shù)器模塊設(shè)計(jì)輸入:CLK -待計(jì)數(shù)的時(shí)鐘。CLR -異步清零信號(hào),當(dāng)CLR =1,輸出復(fù)位為0,當(dāng)CLR =0,正常計(jì)數(shù)。ENA-使能控制信號(hào),當(dāng)ENA=1,電路正常累加計(jì)數(shù),否則電路不工作。輸出:SUM3:0- 計(jì)數(shù)值的個(gè)位,即在CLK上升沿檢測(cè)到SUM=9時(shí),SUM將被置0,開始新一輪的計(jì)數(shù)。COUT -計(jì)數(shù)值的十位進(jìn)位,即只有在時(shí)鐘CLK上升沿檢測(cè)到SUM=9時(shí),COUT將被

5、置1,其余情況下COUT=0。2)數(shù)碼管顯示驅(qū)動(dòng)模塊輸入:sum3:0 -待顯示的數(shù)值。輸出:out6:0 -驅(qū)動(dòng)數(shù)碼管的七位數(shù)值(注意下表中out的對(duì)應(yīng)位3)消抖模塊(1)按鍵抖動(dòng)的產(chǎn)生原因:通常的按鍵所用開關(guān)為機(jī)械彈性開關(guān),當(dāng)機(jī)械觸點(diǎn)斷開、閉合時(shí),由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開時(shí)也不會(huì)一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動(dòng),為了不產(chǎn)生這種現(xiàn)象而作的措施就是按鍵消抖。圖4 按鍵抖動(dòng)波形圖(2)本次實(shí)驗(yàn)提供的消抖模塊簡(jiǎn)介 圖5 消抖模塊框圖(3)電平檢查模塊:檢測(cè)輸入的按鍵是否被按下或者釋放,并分別將H2L_Sig,L2H_Sig拉高,并

6、隨后拉低,給出按鍵的操作信息。(4)延時(shí)模塊:對(duì)輸入的信號(hào)變化進(jìn)行計(jì)時(shí)并觀察信號(hào)的變換情況,對(duì)輸出端口進(jìn)行恰當(dāng)?shù)刭x值。注:實(shí)驗(yàn)資料中將給出消抖模塊設(shè)計(jì)源代碼。對(duì)模塊的具體設(shè)計(jì)細(xì)節(jié)不需理解,消抖模塊不要求仿真。3、 根據(jù)板子鎖定引腳,并生成下載文件。數(shù)碼管驅(qū)動(dòng)的七位信號(hào)可輸出到電路板上相關(guān)引腳。為簡(jiǎn)化設(shè)計(jì),可將消抖模塊的復(fù)位信號(hào)、使能信號(hào)與cnt10模塊共用。根據(jù)下載板資料,完成引腳鎖定,生成相關(guān)的用戶約束文件(ucf)。注意:由于clk沒鎖在ISE默認(rèn)的時(shí)鐘輸入引腳上,需要添加代碼:“CLOCK_DEDICATED_ROUTE = FALSE;”鎖引腳代碼:NET "CLK"

7、; LOC = P57| CLK_DEDICATED_ROUTE = FALSE ;NET "CLK_50" LOC = P80;NET "COUT" LOC = P23;NET "ENA" LOC = P32;NET "CLR" LOC = P26;NET "DATA_OUT6" LOC = P102;NET "DATA_OUT5" LOC = P99;NET "DATA_OUT4" LOC = P107;NET "DATA_OUT3"

8、; LOC = P109;NET "DATA_OUT2" LOC = P112;NET "DATA_OUT1" LOC = P100;NET "DATA_OUT0" LOC = P106;4、 Chipscope在線調(diào)試(1)Chipscope調(diào)試開始 ,新建.cdc文件。在HDL工程中添加chipscope file,選擇ChipScope Definition and Connection File,file name 取名seg。(2)Chipscope-配置 .cdc文件在原有的HDL工程下出現(xiàn)新建seg.cdc文件,可以在c

9、hipscope植入 ILA 和 ICON IP核,雙擊seg.cdc文件,進(jìn)入配置界面。(3)Chipscope-設(shè)置觸發(fā)端口、類型等。進(jìn)入配置界面,每個(gè)觸發(fā)端口ILA核可支持多路比特?cái)?shù)據(jù),最多可有16個(gè)端口,觸發(fā)匹配類型共有6種。這里配置根據(jù)需要調(diào)試的數(shù)據(jù)個(gè)數(shù)、類型決定。(4)Chipscope-設(shè)置采樣深度設(shè)置采樣深度,即為一次采樣數(shù)據(jù)所顯示的深度、個(gè)數(shù)。深度范圍512-16384,采樣深度越深,耗費(fèi)資源越多。然后點(diǎn)擊Net Connections標(biāo)簽,設(shè)置設(shè)置觸發(fā)時(shí)鐘與觸發(fā)信號(hào)界面。(5)Chipscope-設(shè)置采樣信號(hào)選擇Modify Connections 選項(xiàng),進(jìn)入采樣時(shí)鐘和觸發(fā)

10、信號(hào)設(shè)置,采樣時(shí)鐘用于捕捉觸發(fā)信號(hào)(6)Chipscope-設(shè)置采樣時(shí)鐘設(shè)置觸發(fā)時(shí)鐘,一般選擇系統(tǒng)頻率最高的主時(shí)鐘。注:Net selections中每個(gè)channel必須有添加有信號(hào),否則綜合要報(bào)錯(cuò)。(7)Chipscope-設(shè)置觸發(fā)數(shù)據(jù)同樣設(shè)置觸發(fā)信號(hào),將TPO與TP1端口中的每個(gè)channel都添加,此處TP0監(jiān)測(cè)clk、clr、ena、cout。TP1監(jiān)測(cè)的數(shù)碼管七段信號(hào)q7:0、以及COM。(8)Chipscope-JTAG掃描設(shè)置好以后保存退出,綜合與實(shí)現(xiàn),雙擊圖中Analyze Design Using Chipscope。進(jìn)入chipscope軟件,單擊 按鈕開始JTAG掃描,

11、查找FPGA器件。(9)Chipscope-裝載.bit文件JTAG掃描以后會(huì)發(fā)現(xiàn)三個(gè)設(shè)備,選擇XC3S500E,在DEV:0 MyDevice(XC3S500E)右擊configure按以下圖進(jìn)行操作,選擇下載的bit流文件(10)Chipscope-裝載.cdc文件(11)開始采樣(12)Chipscope-分析數(shù)據(jù)分析數(shù)據(jù),在開發(fā)板上數(shù)碼管顯示為0,統(tǒng)通過計(jì)算得出七段輸出q6:0 = 7b1000000,加上COM端為8b11000000。觀察chipscope軟件中,如下圖所示,采樣數(shù)據(jù)為0xc0,換成二進(jìn)制剛好是8b11000000。得出結(jié)論:硬件測(cè)試系統(tǒng)設(shè)計(jì)正確。圖6 Chipsc

12、ope在線調(diào)試仿真圖四、 實(shí)驗(yàn)結(jié)果1、 十進(jìn)制計(jì)數(shù)器模塊仿真測(cè)試圖7 計(jì)數(shù)器波形圖由圖可以看出測(cè)試波形與理論分析結(jié)果相符,當(dāng)使能ena=1時(shí),clr=0,且時(shí)鐘上升沿來臨時(shí),十進(jìn)制計(jì)數(shù)模塊開始計(jì)數(shù),當(dāng)計(jì)數(shù)到9時(shí),產(chǎn)生進(jìn)位,當(dāng)clr=1時(shí),計(jì)數(shù)清零;當(dāng)ena=0時(shí)暫停計(jì)數(shù)。2、 下載到實(shí)驗(yàn)板上面后的結(jié)果數(shù)碼管開始顯示為0,之后每撥動(dòng)一次撥動(dòng)開關(guān),數(shù)碼管的顯示值就加1,當(dāng)加到9的時(shí)候產(chǎn)生一個(gè)進(jìn)位即是LED0發(fā)光,并且又從0開始計(jì)數(shù)。撥動(dòng)復(fù)位鍵數(shù)碼管清零。將使能開關(guān)置低,可以看到數(shù)碼管顯示值不在變化,即是計(jì)數(shù)器不在計(jì)數(shù)。實(shí)驗(yàn)結(jié)果符合設(shè)計(jì)要求。3、 跑表下載實(shí)驗(yàn)效果八位數(shù)碼管全部顯示為0,之后開始計(jì)數(shù)

13、,最右邊兩個(gè)數(shù)碼管一直在加和清零。右邊第三個(gè)數(shù)碼管按照一秒加一的速度在進(jìn)行變化。按下復(fù)位端,及撥碼開關(guān)1撥動(dòng)到低電位,數(shù)碼管顯示值清零。撥碼開關(guān)2波動(dòng)到低電位時(shí),數(shù)碼管顯示值暫停。實(shí)驗(yàn)結(jié)果符合設(shè)計(jì)要求。4、 四位十進(jìn)制頻率計(jì)下載效果開始時(shí)數(shù)碼管全顯示為0。大概過了一秒左右,顯示為500,即是事先設(shè)定好的計(jì)數(shù)脈沖的頻率。撥動(dòng)撥碼開關(guān)1到低電位的位置,數(shù)碼管顯示值清零,過一秒左右又顯示頻率值。五、 思考題1、如何用兩個(gè)或一個(gè)always 實(shí)現(xiàn)十進(jìn)制計(jì)數(shù)模塊?module cnt10(clk_k,clk,clr,ena,sum,cout);input clk,clk_k,clr,ena;output

14、3:0 sum;output cout;reg3:0 sum;reg cout;reg a,b;always (posedge clk )begin a <= clk_k;b = a;endwire key_posedge = (b&a)?1'b1:1'b0;always (posedge clk)beginif(clr)begincout <= 0;sum <= 0;endelse if(key_posedge&ena)beginif(sum < 4'd9)beginsum <= sum+1'b1;cout <

15、;= 0;endelsebegincout <= 1;sum <= 0;endendelsebegincout <= cout;sum <= sum;endendendmodule2、如何用always,或assign實(shí)現(xiàn)數(shù)碼管的驅(qū)動(dòng)設(shè)計(jì)?module tube(clk,sum,seg);input clk;input3:0 sum;output7:0 seg;reg7:0 seg;always (posedge clk)begin case(sum)4'd0:seg <= 8'hc0;4'd1:seg <= 8'hf9;4&

16、#39;d2:seg <= 8'ha4;4'd3:seg <= 8'hb0;4'd4:seg <= 8'h99;4'd5:seg <= 8'h92;4'd6:seg <= 8'h82;4'd7:seg <= 8'hf8;4'd8:seg <= 8'h80;4'd9:seg <= 8'h90;default:seg <= 8'h00;endcaseend3、比較實(shí)驗(yàn)一與實(shí)驗(yàn)二的實(shí)驗(yàn)過程,說明原理圖輸入法與HDL輸入法

17、的不同的應(yīng)用環(huán)境。原理圖適用于將模塊綜合的設(shè)計(jì)。HDL輸入可以適用基礎(chǔ)模塊的設(shè)計(jì),基礎(chǔ)模塊寫好以后調(diào)用起來更方便。六、 代碼1、Cnt10的Verilog HDL代碼:module cnt10(clk_k,clk,clr,ena,sum,cout);input clk,clk_k,clr,ena;output3:0 sum;output cout;reg3:0 sum;reg cout;reg a,b;always (posedge clk )begin a <= clk_k;b = a;endwire key_posedge = (b&a)?1'b1:1'b0;

18、always (posedge clk)beginif(clr)begincout <= 0;sum <= 0;endelse if(key_posedge&ena)beginif(sum < 4'd9)beginsum <= sum+1'b1;cout <= 0;endelsebegincout <= 1;sum <= 0;endendelsebegincout <= cout;sum <= sum;endendendmodule2、數(shù)碼管的VerilogHDL代碼: module tube(clk,sum,seg

19、);input clk;input3:0 sum;output7:0 seg;reg7:0 seg;always (posedge clk)begin case(sum)4'd0:seg <= 8'hc0;4'd1:seg <= 8'hf9;4'd2:seg <= 8'ha4;4'd3:seg <= 8'hb0;4'd4:seg <= 8'h99;4'd5:seg <= 8'h92;4'd6:seg <= 8'h82;4'd7:seg

20、 <= 8'hf8;4'd8:seg <= 8'h80;4'd9:seg <= 8'h90;default:seg <= 8'h00;endcaseendendmodule3、激勵(lì)文件:module test_cnt10;/ Inputsreg clk_k;reg clk;reg clr;reg ena;/ Outputswire 3:0 sum;wire cout;/ Instantiate the Unit Under Test (UUT)cnt10 uut (.clk_k(clk_k), .clk(clk), .clr(clr), .ena(ena), .sum(sum), .cout(cout);initial begin/ Initialize Inputsclk_k = 0;clk = 0;clr = 0;ena = 0;/ Wait 100 ns f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論