版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..电子线路测试与实验报告基于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.vvga显示 说明:顶层模块只是对各模块的调用;时钟分频是用于产生25MHz的扫描信号;同步信号用来产生相应的VGA显示控制信号;rom.xco是IP核,用来存放、输出要显示图片的数据信息。最后一个模块则是显示模块,同时包括对图片的相关变换。各模块的详细说明会在下文中给出。四、源码清单1.顶层模块〔top.vmoduletop<zoom,turn,clk,clr,hs,vs,red,green,blue>;inputzoom;//缩放信号inputturn;//模式改变信号inputclk;//时钟信号inputclr;//复位信号outpuths,vs;//水平和垂直输出output[2:0]red,green;//红绿蓝三色输出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分频程序,使时钟信号为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核,功能为存储、输出图片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对图像的显示进行各种操作endmodule说明:顶层模块比较简单,只是对各分模块的调用。2.时钟分频模块〔clkdiv.v信号模式描述mclkInput主时钟输入clrInput复位键clk25output输出25MHz时钟moduleclkdiv<mclk,clr,clk25>;//对时钟信号进行二分频 inputmclk,clr; outputclk25; reg[1:0] q; assignclk25=q[0]; //25Mhz always<posedgemclkorposedgeclr> if<clr> q<=0; else q<=q+1;endmodule//实现25MHz的频率3.控制信号模块〔my_vga.v信号模式描述clrInput复位clkInput主时钟25MHzhc[9:0]Output行计数vc[9:0]Output场计数cntdyn[27:0]Outputvga控制计数vidonOutputvidon可见信号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 这是一个调用IP核的模块,该模块有两个输入,除了clka为时钟信号外,addra是一个地址信号,通过addra的控制来输出不同的m信号。 rom模块示意图:5.vga显示模块〔vga_stripes.v信号模式描述m[7:0]Input像素数据zoomInput缩放信号turnInput翻转信号vidonInputvidon像素可见hcInput行同步vcInput场同步redOutput红色greenOutput绿色blueOutput蓝色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;//若复位,则选择模式0 elseif<turn>//若无复位,按键则模式加一 mode=mode+1; end always<posedgezoomorposedgeclr>//当放大或复位信号处于上升沿时 beginif<clr>set=0;//若复位,大小设定选择0 elseif<zoom>//如果有放大信号 begin if<set==2'b10>set=0;//若大小设定为2,则改为设定0,否则设定加一 elseset=set+1; end end always<*>//当有涉及到的变量改变时 if<vidon==1>beginif<set==2'b01>//设定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;//起点为〔0,0时elseif<<x_vdn[0]==0>&&<y_vdn[0]==1>>addr=x_vdn/2+<y_vdn-1>*80;//起点为〔0,1时elseif<<x_vdn[0]==1>&&<y_vdn[0]==0>>addr=<x_vdn-1>/2+y_vdn*80;//起点为〔1,0时elseaddr=<x_vdn-1>/2+<y_vdn-1>*80;//起点为〔1,1时 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>//设定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时 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时 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 说明:相应的变量说明在表格中已经给出,有一点需要注意的是,在这里是先对zoom进行判断的,假如zoom为1,那就要对图片进行缩放处理。只有在zoom为0的情况下,才会进行翻转的变换。也就是说,这两个过程是有优先级的。若要去掉这个优先级,代码会复杂一些。同时,图片的放大只能对原图放大缩小,已经旋转的图片则不能。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等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行新入行客户经理工作总结
- 实习生工作总结15篇
- 软程序员辞职报告汇编八篇
- 教师师德工作计划范文
- 买卖合同范文集锦9篇
- 新生必bei-大学生存法则(重庆工商职业学院)知到智慧树答案
- 冀教版三年级上册 lesson 14 my body
- 《战略管理会计 》课件
- 《稿继续教育》课件
- 大班欢乐颂教案反思4篇
- 教科版2022-2023学年度上学期三年级科学上册期末测试卷及答案(含八套题)
- 大学与文化传承智慧树知到期末考试答案章节答案2024年浙江大学
- 国家开放大学电大《11662会计信息系统(本)》期末终考题库及标准参考答案
- 浙西南红军歌曲赏析智慧树知到期末考试答案章节答案2024年丽水学院
- 教科版小学科学二年级上册教案(全册)教学设计
- 2024年考研管理类联考综合能力真题及答案
- 《推荐一本书》(完美版)教学课件
- GB∕T 41115-2021 焊缝无损检测 超声检测 衍射时差技术(TOFD)的应用
- 《走进爱国主义教育基地》ppt
- 红色大气工会基础知识培训培训内容PPT演示
- 分镜头脚本(空表)
评论
0/150
提交评论