華科基于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è),還剩11頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

..電子線路測(cè)試與實(shí)驗(yàn)報(bào)告基于FPGA的VGA顯示實(shí)驗(yàn)__專業(yè)__光電1208__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)圖片的放大與縮小,同樣通過一個(gè)按鍵實(shí)現(xiàn);4.添加復(fù)位鍵,按下復(fù)位鍵后圖片返回最初的狀態(tài)。三、實(shí)驗(yàn)原理1.VGA的顯示原理在基于FPGA的VGA控制中,只需考慮行同步信號(hào)〔HS,場(chǎng)同步信號(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)行變換的過程。在這里,假定顯示的坐標(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ì)圖片的縮放操作則只考慮以下兩種變化,即放大一倍,此時(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_vga.v同步信號(hào)模塊

|

|______rom.xco像素?cái)?shù)據(jù)

|

|______vga_stripes.vvga顯示 說明:頂層模塊只是對(duì)各模塊的調(diào)用;時(shí)鐘分頻是用于產(chǎn)生25MHz的掃描信號(hào);同步信號(hào)用來產(chǎn)生相應(yīng)的VGA顯示控制信號(hào);rom.xco是IP核,用來存放、輸出要顯示圖片的數(shù)據(jù)信息。最后一個(gè)模塊則是顯示模塊,同時(shí)包括對(duì)圖片的相關(guān)變換。各模塊的詳細(xì)說明會(huì)在下文中給出。四、源碼清單1.頂層模塊〔top.vmoduletop<zoom,turn,clk,clr,hs,vs,red,green,blue>;inputzoom;//縮放信號(hào)inputturn;//模式改變信號(hào)inputclk;//時(shí)鐘信號(hào)inputclr;//復(fù)位信號(hào)outpuths,vs;//水平和垂直輸出output[2:0]red,green;//紅綠藍(lán)三色輸出output[1:0]blue;wireclk25;wire[9:0]hc,vc;wirevidon;wire[27:0]cntdyn;wire[7:0]m;wire[12:0]addr;clkdivu1<.mclk<clk>,.clr<clr>,.clk25<clk25>>;//u1為2分頻程序,使時(shí)鐘信號(hào)為25MHzmy_vgau2<.clk<clk25>,.clr<clr>,.hs<hs>,.vs<vs>,.hc<hc>,.vc<vc>,.vidon<vidon>, tdyn<cntdyn>>;//u2為160*40VGA圖像顯示程序//----160*40-----xilinx------romu3< .clka<clk25>,//inputclka .addra<addr>,//input[12:0]addra .douta<m>//output[7:0]douta >;//----160*40-----xilinx------u3為ROM的IP核,功能為存儲(chǔ)、輸出圖片vga_stripesu4<.clr<clr>,.zoom<zoom>,.turn<turn>,.vidon<vidon>,.m<m>,.hc<hc>,.vc<vc>,.red<red>,.green<green>,.blue<blue>,tdyn<cntdyn>,.addr<addr>>;//u4對(duì)圖像的顯示進(jìn)行各種操作endmodule說明:頂層模塊比較簡(jiǎn)單,只是對(duì)各分模塊的調(diào)用。2.時(shí)鐘分頻模塊〔clkdiv.v信號(hào)模式描述mclkInput主時(shí)鐘輸入clrInput復(fù)位鍵clk25output輸出25MHz時(shí)鐘moduleclkdiv<mclk,clr,clk25>;//對(duì)時(shí)鐘信號(hào)進(jìn)行二分頻 inputmclk,clr; outputclk25; reg[1:0] q; assignclk25=q[0]; //25Mhz always<posedgemclkorposedgeclr> if<clr> q<=0; else q<=q+1;endmodule//實(shí)現(xiàn)25MHz的頻率3.控制信號(hào)模塊〔my_vga.v信號(hào)模式描述clrInput復(fù)位clkInput主時(shí)鐘25MHzhc[9:0]Output行計(jì)數(shù)vc[9:0]Output場(chǎng)計(jì)數(shù)cntdyn[27:0]Outputvga控制計(jì)數(shù)vidonOutputvidon可見信號(hào)modulemy_vga<clk,clr,hs,vs,hc,vc,vidon,cntdyn>;inputclk,clr;outputreghs,vs;outputreg[9:0]hc,vc;outputregvidon;outputreg[27:0]cntdyn;parameterhpixels=10'b1100100000;//800parametervlines=10'b1000001001;//521parameterhbp=10'b0010010000;//144parameterhfp=10'b1100010000;//784parametervbp=10'b0000011111;//31parametervfp=10'b0111111111;//511regvsenable;always<posedgeclkorposedgeclr> begin if<clr> cntdyn<=0; else cntdyn<=cntdyn+1; endalways<posedgeclkorposedgeclr> begin if<clr> hc<=0; elsebegin if<hc==hpixels-1> begin hc<=0; vsenable<=1; end else begin hc<=hc+1; vsenable<=0; end end endalways<*> begin if<hc<96> hs=0; else hs=1; end always<posedgeclkorposedgeclr> begin if<clr> vc<=0; else if<vsenable==1> begin if<vc==vlines-1> vc<=0; else vc<=vc+1; endendalways<*> begin if<vc<2> vs=0; else vs=1; endalways<*> begin if<<hc<hfp>&&<hc>hbp>&&<vc<vfp>&&<vc>vbp>> vidon=1; else vidon=0; endendmodule4.IP核rom〔rom.xco 這是一個(gè)調(diào)用IP核的模塊,該模塊有兩個(gè)輸入,除了clka為時(shí)鐘信號(hào)外,addra是一個(gè)地址信號(hào),通過addra的控制來輸出不同的m信號(hào)。 rom模塊示意圖:5.vga顯示模塊〔vga_stripes.v信號(hào)模式描述m[7:0]Input像素?cái)?shù)據(jù)zoomInput縮放信號(hào)turnInput翻轉(zhuǎn)信號(hào)vidonInputvidon像素可見hcInput行同步vcInput場(chǎng)同步redOutput紅色greenOutput綠色blueOutput藍(lán)色cntdynOutputvga控制addr[10:0]Output地址modulevga_stripes<clr,zom,turn,vidon,m,hc,vc,red,green,blue,cntdyn,addr>; inputclr; inputzoom;inputturn; input[7:0]m; inputvidon; input[9:0]hc,vc; input[27:0]cntdyn; output[2:0]red,green; output[1:0]blue; output[12:0]addr;//6400160*40 reg[7:0]red_r; reg[7:0]green_r,blue_r;regaddr; reg[1:0]mode; reg[1:0]set; parameterhbp=10'b0010010000;//144 parametervbp=10'b0000011111;//31 reg[10:0]y_vdn,x_vdn; assignred=red_r[7:5]; assigngreen=green_r[7:5]; assignblue=blue_r[7:6]; always<*> begin y_vdn=vc-vbp;x_vdn=hc-hbp; end always<posedgeturnorposedgeclr>//選擇模式 begin if<clr>mode=0;//若復(fù)位,則選擇模式0 elseif<turn>//若無復(fù)位,按鍵則模式加一 mode=mode+1; end always<posedgezoomorposedgeclr>//當(dāng)放大或復(fù)位信號(hào)處于上升沿時(shí) beginif<clr>set=0;//若復(fù)位,大小設(shè)定選擇0 elseif<zoom>//如果有放大信號(hào) begin if<set==2'b10>set=0;//若大小設(shè)定為2,則改為設(shè)定0,否則設(shè)定加一 elseset=set+1; end end always<*>//當(dāng)有涉及到的變量改變時(shí) if<vidon==1>beginif<set==2'b01>//設(shè)定1,顯示320*80beginif<<<x_vdn>=0>&&<x_vdn<=319>&&<y_vdn>=0>&&<y_vdn<=79>>>//如果0<=x_vdn<=319且0<=y_vdn<=79 if<<x_vdn[0]==0>&&<y_vdn[0]==0>>addr=x_vdn/2+y_vdn*80;//起點(diǎn)為〔0,0時(shí)elseif<<x_vdn[0]==0>&&<y_vdn[0]==1>>addr=x_vdn/2+<y_vdn-1>*80;//起點(diǎn)為〔0,1時(shí)elseif<<x_vdn[0]==1>&&<y_vdn[0]==0>>addr=<x_vdn-1>/2+y_vdn*80;//起點(diǎn)為〔1,0時(shí)elseaddr=<x_vdn-1>/2+<y_vdn-1>*80;//起點(diǎn)為〔1,1時(shí) red_r<={m[7:5],5'b00000};//顯示 green_r<={m[4:2],5'b00000}; blue_r<={m[1:0],6'h00};endelsebegin//否則不顯示 red_r<=0; green_r<=0; blue_r<=0; end endelseif<set==2'b10>//設(shè)定2,顯示80*20begin if<<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<={m[7:5],5'b00000}; green_r<={m[4:2],5'b00000}; blue_r<={m[1:0],6'h00}; end elsebegin red_r<=0; green_r<=0; blue_r<=0; endend elsebegin case<mode[0]>//模式選擇 1'b0://為模式0時(shí) if<<x_vdn>=0>&&<x_vdn<=159>&&<y_vdn>=0>&&<y_vdn<=39>>//顯示160*40 begin//160*40200=144+55+1 addr=y_vdn*160+x_vdn; red_r<={m[7:5],5'b00000}; green_r<={m[4:2],5'b00000}; blue_r<={m[1:0],6'h00}; end elsebegin//其他地方不顯示 red_r<=0; green_r<=0; blue_r<=0; end 1'b1://為模式1時(shí) if<<<x_vdn>=0>&&<x_vdn<=39>&&<y_vdn>=0>&&<y_vdn<=159>>>//顯示40*160 begin//160*40200=144+55+1 addr=<39-x_vdn>*160+y_vdn; red_r<={m[7:5],5'b00000}; green_r<={m[4:2],5'b00000}; blue_r<={m[1:0],6'h00}; end elsebegin//其他地方不顯示 red_r<=0; green_r<=0; blue_r<=0; endendcase end endelse//不顯示 begin red_r<=0; green_r<=0; blue_r<=0;endendmodule 說明:相應(yīng)的變量說明在表格中已經(jīng)給出,有一點(diǎn)需要注意的是,在這里是先對(duì)zoom進(jìn)行判斷的,假如zoom為1,那就要對(duì)圖片進(jìn)行縮放處理。只有在zoom為0的情況下,才會(huì)進(jìn)行翻轉(zhuǎn)的變換。也就是說,這兩個(gè)過程是有優(yōu)先級(jí)的。若要去掉這個(gè)優(yōu)先級(jí),代碼會(huì)復(fù)雜一些。同時(shí),圖片的放大只能對(duì)原圖放大縮小,已經(jīng)旋轉(zhuǎn)的圖片則不能。6.引腳約束文件〔top.ucfNET"clk"LOC=B8;NET"clr"LOC=G12;#Bank=2,Pinname=IO/D5,Type=DUAL,Schname=RED0NET"red[0]"LOC=C14;#Bank=2,Pinname=IO_L10N_2,Type=I/O,Schname=RED1NET"red[1]"LOC=D13;#Bank=2,Pinname=IO_L10P_2,Type=I/O,Schname=RED2NET"red[2]"LOC=F13;#Bank=2,Pinname=IO_L09N_2,Type=I/O,Schname=GRN0NET"green[0]"LOC=F14;#Bank=2,Pinname=IO_L09P_2,Type=I/O,Schname=GRN1NET"green[1]"LOC=G13;#Bank=2,Pinname=IO_L05N_2,Type=I/O,Schname=GRN2NET"green[2]"LOC=G14;#Bank=2,Pinname=IO/VREF_2,Type=VREF,Schname=BLU1NET"blue[0]"LOC=H13;#Bank=2,Pinname=IO_L03P_2/DOUT/BUSY,Type=DUAL,Schname=BLU2NET"blue[1]"LOC=J13;#Bank=2,Pinname=IO_L03N_2/MOSI/CSI_B,Type=DUAL,Schname=HSYNCNET"hs"LOC=J14;#Bank=2,Pinname=IO_L01P_2/CSO_B,Type=DUAL,Schname=VSYNCNET"vs"LOC=K13;NET"turn"LOC=A7;#PlanAheadGeneratedphysicalconstraintsNET"

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論