华科基于FPGA的VGA显示实验.doc_第1页
华科基于FPGA的VGA显示实验.doc_第2页
华科基于FPGA的VGA显示实验.doc_第3页
华科基于FPGA的VGA显示实验.doc_第4页
华科基于FPGA的VGA显示实验.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子线路测试与实验报告基于FPGA的VGA显示实验姓名:专业班级:光电1208学号:U2012一、实验要求功能要求:利用Basys2实验板实现图片在VGA接口显示器上的显示。基本要求:1)实现240*160以上像素的图片在VGA接口显示器上的显示;2)利用算法实现特定图片在VGA接口显示器上的放大、缩小旋转及其他动作的自动变换。二、实验具体目标1.首先实现特定图片在显示器上的显示;2.图片自动旋转90度;3.实现图片的放大与缩小,同样通过一个按键实现;4.添加复位键,按下复位键后图片返回最初的状态。三、实验原理 1.VGA的显示原理 在基于FPGA的VGA控制中,只需考虑行同步信号(HS),场同步信号(VS),以及红绿蓝三基色(R、G、B)这五个信号,即可实现对VGA显示的控制。 2.对图片的旋转与缩放操作 对图片的旋转操作在本质上是对IP核ROM的输入地址addr进行变换的过程。在这里,假定显示的坐标分别为x_vdn以及y_vdn,由于图片是160*40的,在正常的显示时,addr与x_vdn以及y_vdn的对应关系应该为:addr=x_vdn+y_vdn*160即依次取像素点,图片正常显示。要把图片顺时针旋转90度,那么相当于显示的图片是40*160的,重新考虑addr与两个坐标之间映射关系。容易得到,此时:addr=(39-x_vdn)*160+y_vd对图片的缩放操作对图片的缩放操作则只考虑以下两种变化,即放大一倍,此时图片的大小为320*80;缩小一倍,此时图片的大小为80*20。对于图片的放大一倍,则要考虑不同的像素点对显示信号的共用(在这里即为m信号)。由通常的规则,按照顺序,构成一个正方形的每四个相邻的像素点共用一个m信号。同时,在这里对x_vdn以及y_vdn的最后一位判断,并且形成不同的映射规则。具体的映射规则在源代码中给出。对于图片的缩小,则相对简单的多。此时的映射关系为:addr=y_vdn*320+x_vdn*2; 3工程结构与解读 如图,下图为系统的结构框图。各模块之间的关系为:_top.v 工程顶层模块|_clkdiv.v 时钟分频|_my_vga.v 同步信号模块|_rom.xco 像素数据|_ vga_stripes.v vga 显示说明:顶层模块只是对各模块的调用;时钟分频是用于产生25MHz的扫描信号;同步信号用来产生相应的VGA显示控制信号;rom.xco是IP核,用来存放、输出要显示图片的数据信息。最后一个模块则是显示模块,同时包括对图片的相关变换。各模块的详细说明会在下文中给出。四、源码清单1.顶层模块(top.v)module top(zoom,turn,clk, clr, hs, vs, red, green, blue );input zoom;/缩放信号input turn;/模式改变信号input clk;/时钟信号input clr;/复位信号output hs, vs;/水平和垂直输出output 2:0 red, green;/红绿蓝三色输出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分频程序,使时钟信号为25MHzmy_vga u2( .clk(clk25), .clr(clr), .hs(hs), .vs(vs), .hc(hc), .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核,功能为存储、输出图片vga_stripes u4 ( .clr(clr), .zoom(zoom), .turn(turn), .vidon(vidon), .m(m), .hc(hc), .vc(vc), .red(red), .green(green), .blue(blue), .cntdyn(cntdyn), .addr(addr) );/u4对图像的显示进行各种操作endmodule说明:顶层模块比较简单,只是对各分模块的调用。2. 时钟分频模块(clkdiv.v)信号模式描述mclkInput主时钟输入clrInput复位键clk25output输出25MHz时钟module clkdiv(mclk,clr,clk25);/对时钟信号进行二分频input mclk, clr;output clk25;reg 1:0 q;assign clk25 = q0; /25Mhzalways (posedge mclk or posedge clr)if(clr)q = 0;elseq = q + 1;endmodule /实现25MHz的频率3.控制信号模块(my_vga.v)信号模式描述clrInput复位clkInput主时钟25MHzhc9:0Output行计数vc9:0Output场计数cntdyn27:0Outputvga控制计数vidonOutputvidon可见信号module my_vga(clk,clr,hs,vs,hc,vc,vidon,cntdyn );input clk,clr;output reg hs,vs;output reg 9:0 hc,vc;output reg vidon;output reg 27:0 cntdyn;parameter hpixels = 10b1100100000; /800parameter vlines = 10b1000001001; /521parameter hbp = 10b0010010000; /144parameter hfp = 10b1100010000; /784parameter vbp = 10b0000011111;/31parameter vfp = 10b0111111111;/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 (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 hbp)&(vcvbp)vidon = 1;elsevidon = 0;endendmodule4.IP核rom(rom.xco)这是一个调用IP核的模块,该模块有两个输入,除了clka为时钟信号外,addra是一个地址信号,通过addra的控制来输出不同的m信号。rom模块示意图:5.vga显示模块(vga_stripes.v)信号模式描述m7:0Input像素数据zoomInput缩放信号turnInput翻转信号vidonInputvidon像素可见hcInput行同步vcInput场同步redOutput红色greenOutput绿色blueOutput蓝色cntdynOutputvga 控制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; reg addr;reg 1:0 mode;reg 1:0 set;parameter hbp = 10b0010010000;/144parameter vbp = 10b0000011111;/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)/选择模式beginif(clr) mode=0;/若复位,则选择模式0else if(turn)/若无复位,按键则模式加一mode=mode+1;endalways(posedge zoom or posedge clr) /当放大或复位信号处于上升沿时begin if (clr) set=0;/若复位,大小设定选择0else if(zoom)/如果有放大信号 begin if(set=2b10) set=0;/若大小设定为2,则改为设定0,否则设定加一 else set=set+1; endendalways (*)/当有涉及到的变量改变时if(vidon = 1) begin if(set=2b01)/设定1,显示320*80 begin if(x_vdn=0)&(x_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;/起点为(0,0)时 else if(x_vdn0=0)&(y_vdn0=1) addr=x_vdn/2+(y_vdn-1)*80;/起点为(0,1)时 else if(x_vdn0=1)&(y_vdn0=0) addr=(x_vdn-1)/2+y_vdn*80;/起点为(1,0)时 else addr=(x_vdn-1)/2+(y_vdn-1)*80;/起点为(1,1)时red_r = m7:5,5b00000 ;/显示green_r = m4:2,5b00000 ;blue_r = m1:0, 6h00; end else begin/否则不显示red_r = 0;green_r = 0;blue_r =0)&(x_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,5b00000 ;green_r = m4:2,5b00000 ;blue_r = m1:0, 6h00;endelse begin red_r = 0; green_r = 0; blue_r =0)&(x_vdn=0)&(y_vdn=39) /显示160*40 begin /160 * 40 200 = 144+55+1 addr=y_vdn*160+x_vdn;red_r = m7:5,5b00000 ;green_r = m4:2,5b00000 ;blue_r = m1:0, 6h00;endelse begin /其他地方不显示 red_r = 0; green_r = 0; blue_r =0)&(x_vdn=0)&(y_vdn=159)/显示40*160begin /160 * 40 200 = 144+55+1addr=(39-x_vdn)*160+y_vdn;red_r = m7:5,5b00000 ;green_r = m4:2,5b00000 ;blue_r = m1:0, 6h00;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说明:相应的变量说明在表格中已经给出,有一点需要注意的是,在这里是先对zoom进行判断的,假如zoom为1,那就要对图片进行缩放处理。只有在zoom为0的情况下,才会进行翻转的变换。也就是说,这两个过程是有优先级的。若要去掉这个优先级,代码会复杂一些。同时,图片的放大只能对原图放大缩小,已经旋转的图片则不能。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 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 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 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;说明:处理相关的信号、颜色引脚按照手册来配置以外,clr、turn、zoom分别配置按键G12、A7、M4。五、系统功能与测试结果1.将bit下载到板子后,连接开发板和显示器的VGA接口,就能看到显示器上左上角显示该图片。2.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论