基于FPGA的VGA图像显示与控制
基于FPGA的VGA图像显示与控制
课程要求:采用verilog语言,基于FPGA的VGA图像显示,即能够在显示器上实现动态彩色图像的显示。
VGA显示接口的理论分析:硬件采用CycloneII系列的EP2C20Q240C8N,它含有240个引脚。
对于VGA的显示器遵循800*600@75模式,其中800是指每行中显示的像素的个数,而600是指屏幕每一列所包含的像素的个数。
VGA工业标准规定了具体地,在扫描过程中的时序图如下:
行扫描时序图
场扫描时序图
每场信号对应625个行周期,其中600行为图像显示行,每场有场同步信号,该脉冲宽度为3个行周期的负脉冲;每行显示行包括1056个点时钟,其中800点为有效显示区,每行有一个行同步信号的负脉冲,该脉冲宽度为80个点时钟。
这样我们可以知道,行频为625*75=46857Hz。
需要的点时钟的频率为:625*1056*75=49.5MHz约为50MHz。
由上图可知,实际上在真正的实现过程中,每一行扫描所花的时间实际上比显示一行的像素所花的时间多了1056-800=256个像素点。
同理,每一场的扫描时间多了625-600=25个行时间。
设计思路:
我们采用BmpToMif工具把BMP格式的图像转换为.mif文件。
利用QuartusII7.2自带的MegaWizard Plug-In Manager产生一个ROM存储器,并用其来初始时.mif 文件。
即将图像文件写入到存储器里面。
然后利用编程来控制图像的显示。
设计步骤:
1、工程创建:创建一个Project取名字为vga,在创建工程的向导中选着CycloneII
系列的EP2C20Q240C8。
2、代码书写:新建一个Verilog HDL File编写程序代码如下:
`timescale 1ns/1ps
module tupian (clk,rst_n,hsync,vsync,vga_r,vga_g,vga_b,addr);
input clk,rst_n;
output hsync,vsync,vga_r,vga_g,vga_b;
reg hsync,vsync;
output [14:0] addr;
reg [14:0] addr;
reg [10:0] x_cnt; //行坐标
reg [9:0] y_cnt; //列坐标
parameter h_Ta=80,h_Tb=128,h_Tc=32,h_Td=800,h_Te=8,h_Tf=8,h_Tg=1056; parameter v_Ta=3, v_Tb=14,v_Tc=7,v_Td=600,v_Te=0.8,v_Tf=0.2,v_Tg=625;
//------------------- 行场的计数-------------------
always @(posedge clk)
begin
if(x_cnt == h_Tg-1) x_cnt<=0;
else x_cnt<=x_cnt+1;
end
always @(posedge clk)
begin
if(y_cnt==v_Tg-1) y_cnt<=0;
else if ( x_cnt == h_Tg-1 )
y_cnt<=y_cnt+1;
end
//-------------------同步信号产生-------------------
always @(posedge clk)
begin
if(x_cnt<=h_Ta-1) hsync<=0;
else hsync<=1;
end
always @(posedge clk)
begin
if(y_cnt <= v_Ta -1) vsync <= 0;
else vsync <=1;
end
//---------------有效显示区坐标--------------------
wire valid;
assign valid = (x_cnt >= 11'd187) && (x_cnt <= 11'd987) && (y_cnt >= 10'd31) && (y_cnt <= 10'd631);
wire [9:0] xpos;
wire [9:0] ypos;
assign xpos = x_cnt-11'd187;
assign ypos = y_cnt-10'd31;
//-----------------显示图像-----------------------
reg[27:0] k;
always @ (posedge clk )
begin
if(k<=67108864)
begin
if((ypos >= 9'd100 && ypos <= 9'd229)&&(xpos >= 10'd65 && xpos <= 10'd192))
addr <= (ypos-100)*128 + (xpos-65);
else addr<=0;
end
else
begin
if((ypos >= 9'd100 && ypos <= 9'd229)&&(xpos >= 10'd573 && xpos <= 10'd700))
addr <= (ypos-100)*128 + (xpos-65);
else addr<=0;
end
if(k>134217728) k=0;
else k=k+1;
end
endmodule
编写好程序后,点击保存,将文件起名为tupian,并将其设置为顶层文件。
点击start compilation按钮,进行汇编。
3、为tupian.v产生Symbol file(符号文件):
编译完成后,点击File菜单——Create/Update——Create symbol files for current file。
4、新建原理图文件,并导入产生的符号文件:
点击菜单File——new——Block Diagram/Schematic File,双击原理图的空白处,将Project目录下的刚产生的符号文件引入到原理图。
如下图:
5、创建ROM并用它存储要显示的图片文件:
1)采用BmpToMif工具将BMP格式的图片转换为.mif文件如下图,打开软件,打开要转换的图片,颜色类型选为彩色(8)色,点击生成Mif文件。
给生产的文件起一个名字。
2)利用Quartus II7.2自带的MegaWizard Plug-In Manager产生一个ROM并将图片引入进去。
双击原理图空白处,点击MegaWizard Plug-In Manager——选择Creat a new custom megafunction variation,在安装的插件中找到Memory Compiler,选择ROM:1-PORT,选择Verilog语言,并为输出的文件起一个名字。
如设置如下:
点击Next,在弹出的窗口中,设置输出总线为3位,并为其分配的存储空间能够存储图片总的像素点的大小。
其他默认。
设置如下:
点击Next,前面一直默认,走到page 5 of 7,即第五步,点击Browse,将之前产生的.mif文件加入进来。
如下图:
点击Next,直至完成。
6、将tupian 符号文件和刚生成的Rom进行连线。
如下图:
7、引脚的绑定和设置
1)点击菜单Assignments——pin,为各引脚绑定如下:
2)将绑定的管脚设置为I/O复用:
点击菜单Assignments——Device——点击Device and Pin Options,切换到标签Dual-Purpose Pins,将nCEO的值设置为常规的I/O口。
如下图:
8、将原理图文件设置成为顶层文件,然后点击编译运行,运行后,引脚绑定如
下:
9、将编译生成的.sof文件下载到硬件里:
实验结果:
实验效果如下图,彩色图片能够在两个位置进行动态显示,可以在代码中控制。
华科基于FPGA的VGA显示实验
电子线路测试与实验报告基于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.工程结构与解读如图,下图为系统的结构框图。
使用 FPGA 控制 VGA 显示
使用FPGA 控制VGA 显示
显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数
设计的常用输出设备。
在FPGA 的设计中可以使用很少的资源,就产生VGA 各种控制信号。
这个示例在RHicSP2200B FPGA 开发板/学习板上使用VGA 接口在显示器上显示了文字以及简单的图形,可以作为VGA 显示设计的参考,如果在使用这个例子的过程中有任何问题都可以通过邮件说明:有效时间包括6 列过扫描边界列,有些时序表将这几列加在后沿和前沿中表 2 垂直时序
说明:有效时间包括 4 行过扫描边界行,有些时序表中将这几行加在后沿和前沿中。
*当有效时间增加时,它超过了vsync 信号的上升沿,因此前沿为-1
在实际设计中如何通过不同的系统频率确定适当的显示模式?例如在RhicSP2200 开发板中FPGA 的系统时钟频率为50MHz。
这个时钟频率可以用来设计显示800X600 模式,为了显示器显示效果好,采用场频(刷新频率)75Hz,那么帧长可以确定为666,而行总长设计为1000 像素。
根据以上所述,我们可以设计如Examples1 类似HDL 代码,使用这段代码在Valid 有效期间对RGB 中Blue 两位赋值1,得到一个蓝色屏幕显示边界如图1 所示。
色彩原理
RGB 色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB 即是代表红、绿、蓝三个通道的颜色,通过三种基本颜色亮度值从0~255 不同产生出其他各种颜色,这种模式叫加色模式。
为什么叫加色模式呢,举个例。
基于FPGA的VGA图像显示
基于FPGA的VGA图像显示1、VGA显示原理VGA标准是一种计算机显示标准,最初是由IBM公司在1987 年提出的,分辨率是640*480。
VGA 接口也叫做D_Sub 接口,是显卡上输出模拟信号的接口。
目前大多数计算机与外部显示设备之间都是通过模拟VGA接口连接,计算机内部以数字方式生成的显示图像信息,被显卡中的D/A 转换器转变为R、G、B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。
常见的彩色显示器一般由阴极射线管(CRT) 构成,彩色由GRB(Green Red Blue) 基色组成。
显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB 基色,合成一个彩色像素。
扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。
要实现VGA显示就要解决数据来源、数据存储、时序实现等问题,其中关键还是如何实现VGA时序。
VGA的标准参考显示时序如图1所示。
行时序和帧时序都需要产生同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四个部分。
2、方案设计由VGA的显示原理可知,该任务的关键是VGA时序控制部分和汉字图形显示部分:(1)VGA时序控制部分,采用FPGA本地50MHz时钟,根据所需时序要求,经Verilog语言编写的计数模块分频而得到,该部分十分重要,如果产生的时序有偏差,那么就会使汉字图形无法显示或显示结果混乱;(2)汉字图形显示部分,有2种方法可以实现:第1 种是在对像素进行行计数、场计数的时候,就把字库信息直接赋值给颜色信号R、G、B,这种方法虽然简单,但是控制很不灵活,需要对汉字的显示像素一一判定对应的位置,容易出现错误,不易修改,所以本次采用的是第2 种方法,第2 种方法是使用FPGA内部的一种资源来存储汉字的字库信息,然后由程序将其提取出来作为显示信号发送到VGA 接口,以实现汉字图形的显示,这样就克服了第一种方法易出错又不易修改的缺点。
基于FPGA的VGA图形控制器
基于FPGA的VGA图形控制器设计引言VGA(视频图形阵列)作为一种标准的显示接口得到广泛的应用。
利用FPGA 芯片和EDA 设计方法,可以因地制宜,根据用户的特定需要,设计出针对性强的VGA 显示控制器,不仅能够大大降低成本,还可以满足生产实践中不断变化的用户需要,产品的升级换代方便迅速。
在本设计中采用了Altera 公司的EDA 软件工具Quartus II ,并以ACEX系列FPGA 的器件为主实现硬件平台的设计。
1 基于FPGA 的VGA 图形控制器系统框图根据自顶向下的程序设计思想,采用模块化设计,我们对VGA 图形控制器进行功能分离并按层次设计。
利用VHDL 硬件描述语言逐一对每个功能模块进行描述,并逐个通过编译仿真,最后下载到硬件平台调试。
本设计的VGA 控制器主要由以下模块组成:VGA 时序控制模块、分频模块、汉字显示模块、图像控制模块、ROM读取模块等,如图1 所示。
图1 基于FPGA 的VGA 图形控制系统框图2 主要功能模块设计2. 1 VGA 时序控制模块VGA 时序控制模块是整个显示控制器的关键部分,最终的输出信号行、场同步信号必须严格按照VGA 时序标准产生相应的脉冲信号。
对于普通的VGA 显示器,其引出线共含5 个信号: G,R ,B (3 基色信号) ,HS (行同步信号) ,VS(场同步信号)。
在5个信号时序驱动时,VGA 显示器要严格遵循“VGA工业标准”,即640 Hz ×480 Hz ×60Hz 模式。
对于VGA 显示器,每个像素点的输出频率为25. 175MHz ,因此采用50MHz 的时钟信号,经过二分频模块,得到25MHz 的输入时钟脉冲。
依据VGA 时序标准,行同步信号HS ,行周期为31. 78μs ,每显示行包括800 点,其中640 点为有效显示区,160 点为行消隐区,每行有一个脉冲,该脉冲的低电平宽度为3. 81μs (即96 个脉冲) ; 场同步信号VS ,场周期为16.683ms ,每场有525 行,其中480 行为有效显示行,45 行为场消隐区,每场有一个脉冲,该脉冲的低电平宽度为63μs (2 行)。
基于FPGA的VGA图像控制器设计与实现
VA 图像 控制 器 是一 个较 大 的数字 系 统 。采用 模块 化 设计 原 G 则和 自顶 向 下的设 计思想 ,进 行功 能分 离并按 层 次设 计 。将 V D HL 硬件 描述 语言 设计 与 原理 图设 计相 结合 ,逐 一对 每个 功 能模 块进 行仿 真 ,使顶 层 V A图像 控制 器 的模块 实 体仿真 综合 得 以顺利 通 G 过 。V A 控制 器主 要 由 以下模 块组成 :消 隐模块 ,显 示模 块 ,分 G 频模 块 ,网格 生成 模块 ,汉字 显示模 块 , 图像控 制模 块 ,动 画生 成模 块 ,LMR M 用模 块 ,EP O P— O 调 E RM调用 模块 等 。 三 、模块 设计 ( )消 隐模块 一 消 隐模 块 是整个 显示 控制 器 的关 键部 分 ,显示 模 块 、汉字 模 块 、彩 条模 块 、 网格 模块 、动画控 制 模块 、L MR M 调用 模块 等 P- O 都 由消 隐模 块控 制 ,并且 行 同步信 号 (s 和场 同步 信 号 (s都 由 H) v)
Hu Yi ana nQa
( h n d stt f i u nN r l n esyCh n d 6 5 ,hn ) C e g uI tueo Sc a oma U i ri, e g u 1 4C ia ni h v t 1 7
Ab ta t DA c n lg sr c: E t h oo yn1i tec r fmo e eeto i eintc n lg , l so o ru o ue lt r i e s h oeo d m lc ncd s eh oo yir i np wef1c mp trpaf m r g te e o n
计 算机 光盘 软件 与应 用
基于FPGA的VGA图像的显示与控制
基于FPGA的VGA图像的显示与控制作者:刘明锐李春晓来源:《西部论丛》2019年第30期摘要:随着信息时代的到来,科技发展的脚步越来越快,CCD、COMS等传统的传感器已经无法跟上信息量越来越大的视觉图像,这使得计算机在对视觉图像处理的速度方面越来越吃力了,并具有相当的延迟性,人们对图像的要求越来越高,已不再满足于黑白画面和低像素画质。
VGA的到来解决了这个问题,而FPGA则解决了VGA显示图像时的图像显示复杂、难操作问题。
此次论文我将使用FPGA芯片让图片在VGA显示器上显示。
关键词:FPGA;; VGA显示;图像处理从结构上看,CPLD是连续式布线结构,FPGA则是分段式布线结构,CPLD有一定的延迟,但它可以在配置线上进行测量,FPGA非常逐项化,而且不可预测的可能性非常高,但是其功耗要低于CPLD。
与CPLD相比,FPGA在编程方面虽然稍逊于CPLD,但CPLD却具有更好的保密性。
虽然CPLD和结构是该方法最主要的地方。
数字设备所具备的功能它也一样可以实现。
由于FPGA是拥有多种颜色的,进行编排的时候更加方便。
可编程逻辑器件(CPLD)的修改虽然是有限的,但却适用于各种修改。
因此,对选择与时序逻辑有关的系统最好还是利用FPGA实现电路的进一步发展。
1.系统功能模块的设计1.1系统整体架构系統的整体框架由时钟分频再到VGA显示和VGA驱动,最后输出到VGA显示器中。
由于图片都是由数字信号组成的,利用VGA接口把数字信号输送至显示器。
由于VGA接口是模拟信号接口,所以要利用FPGA把图片上数字信号转变为模拟信号,再通过VGA接口传输至显示器。
1.2分频模块将输入频率固定成一种适合于系统的时钟频率。
因为此实验要求显示640*480@60Hz的图片,可以计算得出该图片的场频率,即扫描一个画面所需要的时间。
即800*525*60=25.2/MHz。
通过PLL(Phase-Locked Loop 锁相环)输出稳定且高频的信号。
华科 基于FPGA的VGA显示实验
电子线路测试与实验报告基于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.工程结构与解读如图,下图为系统的结构框图。
基于fpga的vga图像显示控制器设计__本科毕业设计论文
基于FPGA的VGA图像显示控制器设计第1页一.实验简介本实验介绍了一种利用可编程逻辑器件实现VGA图像显示控制的方法,阐述了VGA 图像显示控制器中VGA显像的基本原理以及功能演示,利用可编程器件FPGA设计VGA 图像显示控制的VHDL设计方案,并在Altera公司的QuartusII软件环境下完成VGA 模块的设计。
而且给出了VGA模块的设计思路和顶层逻辑框图。
最终实现VGA图像显示控制器,VGA图像控制器是一个较大的数字系统,传统的图像显示的方法是在图像数据传输到计算机,并通过显示屏显示出在传输过程中,将图像数据的CPU需要不断的信号控制,所以造成CPU的资源浪费,系统还需要依靠计算机,从而减少了系统的灵活性。
FPGA芯片和EDA设计方法的使用,可根据用户的需求,为设计提供了有针对性的VGA显示控制器,不需要依靠计算机,它可以大大降低成本,并可以满足生产实践中不断改变的需要,产品的升级换代和方便迅速。
二.任务要求2.1课题要求设计一个VGA 图像显示控制器。
1.显示模式为640×480×60Hz 模式;2.用拨码开关控制R、G、B(每个2 位),使显示器可以显示64 种纯色;3.在显示器上显示横向彩条信号(至少6 种颜色);4.在显示器上显示纵向彩条信号(至少8 种颜色);5.在显示器上显示自行设定的图形、图像等。
2.2设计目标根据课题要求,实验中将目标进行了细化,叙述如下:1.设定4种显示模式:横彩模式、纵彩模式、纯色模式、用户模式;第2页2.拨码开关最低两位SW1~SW0控制4种模式的切换;3.拨码开关高6位SW7~SW2每两位分别控制RGB显示64种纯色;4.横向和纵向彩条均设置为8种内置的颜色;5.用户模式中分3种子模式:1)子模式1是沿固定轨迹运动模式,固定图形沿水平方向运动,行运动到边界后折回到下一行继续水平运动;2)子模式2是反弹球模式,固定图形在矩形屏幕做内直线运动,到边界后沿反射角方向反弹,周而复始;3)子模式3是受控运动模式,使用上下左右4个按键控制固定图形在屏幕内的运动方向;4)子模式间的切换由一个单独的按键进行控制,按键按下后顺序切换子模式。
基于FPGA的PS2与VGA控制显示设计
摘要伴随着嵌入式系统的迅速发展,VGA(视频图形阵列)作为一种标准的显示接口得到广泛的应用,PS/2接口也广泛的应用于鼠标和键盘。
文中在依据VGA显示的原理和PS/2鼠标通信协议的基础上,在讨论EDA软件工具平台下的FPGA设计流程的前提下,基于模块化、层次化的设计思想,利用VHDL作为逻辑描述的手段,在Altera公司的QuarmsII软件环境下完成VGA模块和PS/2接口模块的设计。
本设计在利用VGA模块和PS/2接口模块的基础上,实现了鼠标控制VGA显示,完成了一个小游戏的设计,并给出了顶层逻辑框图和各个模块的设计思路。
通过软件和FPGA 的结合,可以将VGA接口要显示的数据直接送到显示器,保证了PS/ 2 接口收发数据的精确性和可移植性, 加快了数据的处理速度,节约了硬件成本。
关键字FPGA/VHDL/VGA /PS/2Design of PS/2 and VGA Display Control Based on FPGAABSTRACTAs the fast development of embeded system,As a standard display interface,VGA has been widely used, PS / 2 module is also widely used in the mouse and keyboard.In this article,according to the principle of VGA display and the analysis of the communication protocol of mouse,completed the design of VGA module based on QuartuslI softerware environment and the design idea about modularization、hiberarchy while using VHDL as a means of logic description as well as discussed the process of the design of FPGA based on EDA softerware platform.Also gave the ideas of VGA module and PS/2 module design and the top logic diagram of this modular.This design is based on VGA module and PS / 2 interface modules. It fulfills the mouse-control VGA display, and completes the design of a simple game. It also gives a top-level logic block diagram and the design of each module. Through the combination of certain software and FPGA, it is possible to send data which will be displayed by VGA interface directly to the monitor. It ensures the accuracy and the possibility of transplant when adopting the PS / 2 transceiver interface. Meanwhile, it speeds up the data processing rate and cut down hardware costs.KEY WORDS FPGA,VHDL,VGA ,PS/2目录中文摘要.................................... 错误!未定义书签。
基于FPGA的VGA显示
`timescale 1ns / 1ps/////////////////////////////////////////////////////////////////// /////////////// Company:// Engineer://// Create Date:// Design Name:// Module Name:// Project Name:// Target Device:// Tool versions:// Description://// Dependencies://// Revision:// Revision 0.01 ‐ File Created// Additional Comments:///////////////////////////////////////////////////////////////////// /////////////module vga_dis(clk,rst_n,hsync,vsync,vga_r,vga_g,vga_b);input clk; //50MHzinput rst_n; //低电平复位output hsync; //行同步信号output vsync; //场同步信号output vga_r;output vga_g;output vga_b;//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐reg[10:0] x_cnt; //行坐标reg[9:0] y_cnt; //列坐标always @ (posedge clk or negedge rst_n)if(!rst_n) x_cnt <= 11'd0;else if(x_cnt == 11'd1039) x_cnt <= 11'd0; else x_cnt <= x_cnt+1'b1;always @ (posedge clk or negedge rst_n)if(!rst_n) y_cnt <= 10'd0;else if(y_cnt == 10'd665) y_cnt <= 10'd0;else if(x_cnt == 11'd1039) y_cnt <= y_cnt+1'b1;//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐wire valid; //有效显示区标志assign valid = (x_cnt >= 11'd187) && (x_cnt < 11'd987)&& (y_cnt >= 10'd31) && (y_cnt < 10'd631);wire[9:0] xpos,ypos; //有效显示区坐标assign xpos = x_cnt‐11'd187;assign ypos = y_cnt‐10'd31;//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐reg hsync_r,vsync_r; //同步信号产生always @ (posedge clk or negedge rst_n)if(!rst_n) hsync_r <= 1'b1;else if(x_cnt == 11'd0) hsync_r <= 1'b0; //产生hsync信号 else if(x_cnt == 11'd120) hsync_r <= 1'b1;always @ (posedge clk or negedge rst_n)if(!rst_n) vsync_r <= 1'b1;else if(y_cnt == 10'd0) vsync_r <= 1'b0; //产生vsync信号else if(y_cnt == 10'd6) vsync_r <= 1'b1;assign hsync = hsync_r;assign vsync = vsync_r;//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//显示一个矩形框wire a_dis,b_dis,c_dis,d_dis; //矩形框显示区域定位assign a_dis = ( (xpos>=200) && (xpos<=220) )&& ( (ypos>=140) && (ypos<=460) );assign b_dis = ( (xpos>=580) && (xpos<=600) )&& ( (ypos>=140) && (ypos<=460) );assign c_dis = ( (xpos>=220) && (xpos<=580) )&& ( (ypos>140) && (ypos<=160) );assign d_dis = ( (xpos>=220) && (xpos<=580) )&& ( (ypos>=440) && (ypos<=460) );//显示一个小矩形wire e_rdy; //矩形的显示有效矩形区域assign e_rdy = ( (xpos>=385) && (xpos<=415) )&& ( (ypos>=285) && (ypos<=315) );//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//r,g,b控制液晶屏颜色显示,背景显示蓝色,矩形框显示红蓝色assign vga_r = valid ? e_rdy : 1'b0;assign vga_g = valid ? (a_dis | b_dis | c_dis | d_dis) : 1'b0; assign vga_b = valid ? ~(a_dis | b_dis | c_dis | d_dis) : 1'b0;endmodule。
