華科 基于FPGA的VGA顯示實(shí)驗(yàn)_第1頁(yè)
華科 基于FPGA的VGA顯示實(shí)驗(yàn)_第2頁(yè)
華科 基于FPGA的VGA顯示實(shí)驗(yàn)_第3頁(yè)
華科 基于FPGA的VGA顯示實(shí)驗(yàn)_第4頁(yè)
華科 基于FPGA的VGA顯示實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、電子線(xiàn)路測(cè)試與實(shí)驗(yàn)報(bào)告基于FPGA的VGA顯示實(shí)驗(yàn)姓名:專(zhuān)業(yè)班級(jí):光電1208學(xué)號(hào):U2012一、實(shí)驗(yàn)要求功能要求:利用Basys2實(shí)驗(yàn)板實(shí)現(xiàn)圖片在VGA接口顯示器上的顯示?;疽螅?)實(shí)現(xiàn)240*160以上像素的圖片在VGA接口顯示器上的顯示;2)利用算法實(shí)現(xiàn)特定圖片在VGA接口顯示器上的放大、縮小旋轉(zhuǎn)及其他動(dòng)作的自動(dòng)變換。二、實(shí)驗(yàn)具體目標(biāo)1.首先實(shí)現(xiàn)特定圖片在顯示器上的顯示;2.圖片自動(dòng)旋轉(zhuǎn)90度;3.實(shí)現(xiàn)圖片的放大與縮小,同樣通過(guò)一個(gè)按鍵實(shí)現(xiàn);4.添加復(fù)位鍵,按下復(fù)位鍵后圖片返回最初的狀態(tài)。三、實(shí)驗(yàn)原理 1.VGA的顯示原理 在基于FPGA的VGA控制中,只需考慮行同步信號(hào)(HS),場(chǎng)

2、同步信號(hào)(VS),以及紅綠藍(lán)三基色(R、G、B)這五個(gè)信號(hào),即可實(shí)現(xiàn)對(duì)VGA顯示的控制。 2.對(duì)圖片的旋轉(zhuǎn)與縮放操作 對(duì)圖片的旋轉(zhuǎn)操作在本質(zhì)上是對(duì)IP核ROM的輸入地址addr進(jìn)行變換的過(guò)程。在這里,假定顯示的坐標(biāo)分別為x_vdn以及y_vdn,由于圖片是160*40的,在正常的顯示時(shí),addr與x_vdn以及y_vdn的對(duì)應(yīng)關(guān)系應(yīng)該為:addr=x_vdn+y_vdn*160即依次取像素點(diǎn),圖片正常顯示。要把圖片順時(shí)針旋轉(zhuǎn)90度,那么相當(dāng)于顯示的圖片是40*160的,重新考慮addr與兩個(gè)坐標(biāo)之間映射關(guān)系。容易得到,此時(shí):addr=(39-x_vdn)*160+y_vd對(duì)圖片的縮放操作對(duì)圖片

3、的縮放操作則只考慮以下兩種變化,即放大一倍,此時(shí)圖片的大小為320*80;縮小一倍,此時(shí)圖片的大小為80*20。對(duì)于圖片的放大一倍,則要考慮不同的像素點(diǎn)對(duì)顯示信號(hào)的共用(在這里即為m信號(hào))。由通常的規(guī)則,按照順序,構(gòu)成一個(gè)正方形的每四個(gè)相鄰的像素點(diǎn)共用一個(gè)m信號(hào)。同時(shí),在這里對(duì)x_vdn以及y_vdn的最后一位判斷,并且形成不同的映射規(guī)則。具體的映射規(guī)則在源代碼中給出。對(duì)于圖片的縮小,則相對(duì)簡(jiǎn)單的多。此時(shí)的映射關(guān)系為:addr=y_vdn*320+x_vdn*2; 3工程結(jié)構(gòu)與解讀 如圖,下圖為系統(tǒng)的結(jié)構(gòu)框圖。各模塊之間的關(guān)系為:_top.v 工程頂層模塊|_clkdiv.v 時(shí)鐘分頻|_my

4、_vga.v 同步信號(hào)模塊|_rom.xco 像素?cái)?shù)據(jù)|_ vga_stripes.v vga 顯示說(shuō)明:頂層模塊只是對(duì)各模塊的調(diào)用;時(shí)鐘分頻是用于產(chǎn)生25MHz的掃描信號(hào);同步信號(hào)用來(lái)產(chǎn)生相應(yīng)的VGA顯示控制信號(hào);rom.xco是IP核,用來(lái)存放、輸出要顯示圖片的數(shù)據(jù)信息。最后一個(gè)模塊則是顯示模塊,同時(shí)包括對(duì)圖片的相關(guān)變換。各模塊的詳細(xì)說(shuō)明會(huì)在下文中給出。四、源碼清單1.頂層模塊(top.v)module top(zoom,turn,clk, clr, hs, vs, red, green, blue );input zoom;/縮放信號(hào)input turn;/模式改變信號(hào)input clk

5、;/時(shí)鐘信號(hào)input clr;/復(fù)位信號(hào)output hs, vs;/水平和垂直輸出output 2:0 red, green;/紅綠藍(lán)三色輸出output 1:0 blue;wire clk25;wire 9:0 hc, vc;wire vidon;wire 27:0 cntdyn;wire 7:0 m;wire 12:0 addr;clkdiv u1( .mclk(clk), .clr(clr), .clk25(clk25) );/u1為2分頻程序,使時(shí)鐘信號(hào)為25MHzmy_vga u2( .clk(clk25), .clr(clr), .hs(hs), .vs(vs), .hc(hc

6、), .vc(vc), .vidon(vidon), .cntdyn(cntdyn) );/u2為160*40VGA圖像顯示程序/-160*40-xilinx-rom u3( .clka(clk25), / input clka .addra(addr), / input 12 : 0 addra .douta(m) / output 7 : 0 douta);/-160*40-xilinx-u3為ROM的IP核,功能為存儲(chǔ)、輸出圖片vga_stripes u4 ( .clr(clr), .zoom(zoom), .turn(turn), .vidon(vidon), .m(m), .hc(h

7、c), .vc(vc), .red(red), .green(green), .blue(blue), .cntdyn(cntdyn), .addr(addr) );/u4對(duì)圖像的顯示進(jìn)行各種操作endmodule說(shuō)明:頂層模塊比較簡(jiǎn)單,只是對(duì)各分模塊的調(diào)用。2. 時(shí)鐘分頻模塊(clkdiv.v)信號(hào)模式描述mclkInput主時(shí)鐘輸入clrInput復(fù)位鍵clk25output輸出25MHz時(shí)鐘module clkdiv(mclk,clr,clk25);/對(duì)時(shí)鐘信號(hào)進(jìn)行二分頻input mclk, clr;output clk25;reg 1:0 q;assign clk25 = q0; /

8、25Mhzalways (posedge mclk or posedge clr)if(clr)q <= 0;elseq <= q + 1;endmodule /實(shí)現(xiàn)25MHz的頻率3.控制信號(hào)模塊(my_vga.v)信號(hào)模式描述clrInput復(fù)位clkInput主時(shí)鐘25MHzhc9:0Output行計(jì)數(shù)vc9:0Output場(chǎng)計(jì)數(shù)cntdyn27:0Outputvga控制計(jì)數(shù)vidonOutputvidon可見(jiàn)信號(hào)module my_vga(clk,clr,hs,vs,hc,vc,vidon,cntdyn );input clk,clr;output reg hs,vs;ou

9、tput reg 9:0 hc,vc;output reg vidon;output reg 27:0 cntdyn;parameter hpixels = 10'b1100100000; /800parameter vlines = 10'b1000001001; /521parameter hbp = 10'b0010010000; /144parameter hfp = 10'b1100010000; /784parameter vbp = 10'b0000011111;/31parameter vfp = 10'b0111111111;/

10、511reg vsenable;always (posedge clk or posedge clr) beginif(clr)cntdyn <= 0;elsecntdyn <= cntdyn + 1;endalways(posedge clk or posedge clr)beginif(clr)hc<=0;else beginif(hc = hpixels - 1)beginhc <= 0;vsenable <= 1;endelse beginhc <= hc + 1;vsenable <= 0;endendendalways(*)beginif

11、(hc < 96)hs = 0;elsehs = 1;endalways (posedge clk or posedge clr)beginif(clr)vc <= 0;else if (vsenable = 1)beginif (vc = vlines - 1)vc <= 0;elsevc <= vc + 1;endendalways (*)beginif (vc < 2)vs = 0;else vs = 1;endalways (*)beginif (hc < hfp)&&(hc>hbp)&&(vc<vfp)&

12、amp;&(vc>vbp)vidon = 1;elsevidon = 0;endendmodule4.IP核rom(rom.xco)這是一個(gè)調(diào)用IP核的模塊,該模塊有兩個(gè)輸入,除了clka為時(shí)鐘信號(hào)外,addra是一個(gè)地址信號(hào),通過(guò)addra的控制來(lái)輸出不同的m信號(hào)。rom模塊示意圖:5.vga顯示模塊(vga_stripes.v)信號(hào)模式描述m7:0Input像素?cái)?shù)據(jù)zoomInput縮放信號(hào)turnInput翻轉(zhuǎn)信號(hào)vidonInputvidon像素可見(jiàn)hcInput行同步vcInput場(chǎng)同步redOutput紅色greenOutput綠色blueOutput藍(lán)色cntdyn

13、Outputvga 控制addr10:0Output地址module vga_stripes(clr,zom,turn,vidon,m,hc,vc,red,green,blue,cntdyn,addr );input clr;input zoom; input turn;input 7:0 m;input vidon;input 9:0 hc,vc;input 27:0 cntdyn;output 2:0 red,green;output 1:0 blue;output 12:0 addr; /6400 160*40reg 7:0 red_r;reg 7:0 green_r, blue_r;

14、reg addr;reg 1:0 mode;reg 1:0 set;parameter hbp = 10'b0010010000;/144parameter vbp = 10'b0000011111;/31reg 10:0 y_vdn, x_vdn;assign red = red_r7:5;assign green = green_r7:5;assign blue = blue_r7:6;always(*)beginy_vdn = vc - vbp ; x_vdn = hc - hbp ;endalways(posedge turn or posedge clr)/選擇模式b

15、eginif(clr) mode=0;/若復(fù)位,則選擇模式0else if(turn)/若無(wú)復(fù)位,按鍵則模式加一mode=mode+1;endalways(posedge zoom or posedge clr) /當(dāng)放大或復(fù)位信號(hào)處于上升沿時(shí)begin if (clr) set=0;/若復(fù)位,大小設(shè)定選擇0else if(zoom)/如果有放大信號(hào) begin if(set=2'b10) set=0;/若大小設(shè)定為2,則改為設(shè)定0,否則設(shè)定加一 else set=set+1; endendalways (*)/當(dāng)有涉及到的變量改變時(shí)if(vidon = 1) begin if(set

16、=2'b01)/設(shè)定1,顯示320*80 begin if(x_vdn>=0)&&(x_vdn<=319)&&(y_vdn>=0)&&(y_vdn<=79)/如果0<=x_vdn<=319且0<=y_vdn<=79if(x_vdn0=0)&&(y_vdn0=0) addr=x_vdn/2+y_vdn*80;/起點(diǎn)為(0,0)時(shí) else if(x_vdn0=0)&&(y_vdn0=1) addr=x_vdn/2+(y_vdn-1)*80;/起點(diǎn)為(0,1)時(shí)

17、else if(x_vdn0=1)&&(y_vdn0=0) addr=(x_vdn-1)/2+y_vdn*80;/起點(diǎn)為(1,0)時(shí) else addr=(x_vdn-1)/2+(y_vdn-1)*80;/起點(diǎn)為(1,1)時(shí)red_r <= m7:5,5'b00000 ;/顯示green_r <= m4:2,5'b00000 ;blue_r <= m1:0, 6'h00; end else begin/否則不顯示red_r <= 0;green_r <= 0;blue_r <= 0; endendelse if (se

18、t=2'b10)/設(shè)定2,顯示80*20 beginif(x_vdn>=0)&&(x_vdn<=79)&&(y_vdn>=0)&&(y_vdn<=19) /如果0<=x_vdn<=79且0<=y_vdn<=19,則顯示 begin addr=y_vdn*320+x_vdn*2;red_r <= m7:5,5'b00000 ;green_r <= m4:2,5'b00000 ;blue_r <= m1:0, 6'h00;endelse begin re

19、d_r <= 0; green_r <= 0; blue_r <= 0; end endelse begincase (mode0)/模式選擇1'b0: /為模式0時(shí)if(x_vdn>=0)&&(x_vdn<=159)&&(y_vdn>=0)&&(y_vdn<=39) /顯示160*40 begin /160 * 40 200 = 144+55+1 addr=y_vdn*160+x_vdn;red_r <= m7:5,5'b00000 ;green_r <= m4:2,5

20、9;b00000 ;blue_r <= m1:0, 6'h00;endelse begin /其他地方不顯示 red_r <= 0; green_r <= 0; blue_r <= 0; end1'b1: /為模式1時(shí)if(x_vdn>=0)&&(x_vdn<=39)&&(y_vdn>=0)&&(y_vdn<=159)/顯示40*160begin /160 * 40 200 = 144+55+1addr=(39-x_vdn)*160+y_vdn;red_r <= m7:5,5&

21、#39;b00000 ;green_r <= m4:2,5'b00000 ;blue_r <= m1:0, 6'h00;endelse begin /其他地方不顯示red_r <= 0;green_r <= 0;blue_r <= 0;end endcase end endelse /不顯示beginred_r <= 0;green_r <= 0;blue_r <= 0;endendmodule說(shuō)明:相應(yīng)的變量說(shuō)明在表格中已經(jīng)給出,有一點(diǎn)需要注意的是,在這里是先對(duì)zoom進(jìn)行判斷的,假如zoom為1,那就要對(duì)圖片進(jìn)行縮放處理。只有

22、在zoom為0的情況下,才會(huì)進(jìn)行翻轉(zhuǎn)的變換。也就是說(shuō),這兩個(gè)過(guò)程是有優(yōu)先級(jí)的。若要去掉這個(gè)優(yōu)先級(jí),代碼會(huì)復(fù)雜一些。同時(shí),圖片的放大只能對(duì)原圖放大縮小,已經(jīng)旋轉(zhuǎn)的圖片則不能。6.引腳約束文件(top.ucf)NET "clk" LOC = B8;NET "clr" LOC = G12;# Bank = 2, Pin name = IO/D5, Type = DUAL, Sch name = RED0NET "red0" LOC = C14;# Bank = 2, Pin name = IO_L10N_2, Type = I/O, Sch

23、 name = RED1NET "red1" LOC = D13;# Bank = 2, Pin name = IO_L10P_2, Type = I/O, Sch name = RED2NET "red2" LOC = F13;# Bank = 2, Pin name = IO_L09N_2, Type = I/O, Sch name = GRN0NET "green0" LOC = F14;# Bank = 2, Pin name = IO_L09P_2, Type = I/O, Sch name = GRN1NET "

24、green1" LOC = G13;# Bank = 2, Pin name = IO_L05N_2, Type = I/O, Sch name = GRN2NET "green2" LOC = G14;# Bank = 2, Pin name = IO/VREF_2, Type = VREF, Sch name = BLU1NET "blue0" LOC = H13;# Bank = 2, Pin name = IO_L03P_2/DOUT/BUSY, Type = DUAL, Sch name = BLU2NET "blue1&q

25、uot; LOC = J13;# Bank = 2, Pin name = IO_L03N_2/MOSI/CSI_B, Type = DUAL, Sch name = HSYNCNET "hs" LOC = J14;# Bank = 2, Pin name = IO_L01P_2/CSO_B, Type = DUAL, Sch name = VSYNCNET "vs" LOC = K13;NET "turn" LOC = A7;# PlanAhead Generated physical constraints NET "zoom" LOC = M4;說(shuō)明:處理相關(guān)的信號(hào)、顏色引腳按照手冊(cè)來(lái)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論