FPGA 您所在的位置:网站首页 VGA连接线 FPGA

FPGA

2024-06-01 21:10| 来源: 网络整理| 查看: 265

目录

1. 理论

2. 实操

2.1 顶层设计

2.1.1 模块框图

2.1.2 代码编写 

2.1.3 仿真验证

2.2 时钟生成模块

2.3 VGA时序控制模块

2.3.1 模块框图

2.3.2 波形图绘制

2.3.3 代码编写

2.3.4 仿真验证

2.4 图像数据生成模块

2.4.1 模块框图

2.4.2 波形图绘制

2.4.3 代码编写

3.总结

1. 理论

VGA简介

       图像显示设备在日常生活中随处可见,例如家庭电视机、计算机显示屏幕等,这些设备能够显示数据图像信息,归功于视频传输接口。常见的视频传输接口有三种: VGA 接口、 DVI 接口和 HDMI 接口。

       VGA,英文全称“Video Graphics Array” ,译为视频图形阵列,是一种使用模拟信号进行视频传输的标准协议。由于 VGA 接口体积较大,在笔记本电脑领域, VGA 接口已被逐渐淘汰,但台式机并没有.

VGA接口及引脚定义

     在最初的应用中, VGA 接口常用于计算机与 VGA 显示器之间的图像传输,在台式计算机、旧式笔记本电脑和 VGA 显示器上一般会有标准的 VGA 接口。VGA 接口和VGA 连接线见下图。

       由下图可知VGA 接口共有 15 个引脚,分为 3 排,每排各 5 个, 按照自上而下、从左向右的顺序排列。 其中第一排的引脚 1、 2、 3 和第三排的引脚 13、 14 最为重要。

 下表为各引脚的说明。

      VGA 使用工业界通用的 RGB 色彩模式作为色彩显示标准,这种色彩显示标准是根据三原色中红色、绿色、蓝色所占比例多少及三原色之间的相互叠加得到各式各样的颜色。       引脚 1 红基色(RED)、引脚 2 绿基色(GREEN)、引脚 3 蓝基色(BLUE)就是 VGA 接口中负责传输三原色的传输通道。要注意的是,这 3 个引脚传输的是模拟信号。

      引脚 13 行同步信号(HSYNC)、引脚 14 场同步信号(VSYNC),这两个信号,是在 VGA显示图像时,负责同步图像色彩信息的同步信号。

      其他引脚,不重要不介绍。

VGA显示原理

      VGA 显示器显示图像,而是采用扫描的方式,将构成图像的像素点,在行同步信号和场同步信号的同步下,按照从上到下、 由左到右的顺序扫描到显示屏上。 VGA 显示器扫描方式,具体见图 下图。

       结合 VGA 显示器扫描方式示意图,简要说明一下其扫描规律:

      (1) 在行、场同步信号的同步作用下,扫描坐标定位到左上角第一个像素点坐标;       (2) 自左上角(第一行)第一个像素点坐标,逐个像素点向右扫描(图中第一个水平方向箭头);       (3) 扫描到第一行最后一个数据,一行图像扫描完成,进行图像消隐,扫描坐标自第一行行尾转移到第二行行首(图中第一条虚线);       (4) 重复若干次扫描至最后一行行尾,一帧图像扫描完成,进行图像消隐,扫描坐标跳转回到左上角第一行行首(图中对角线箭头),开始下一帧图像的扫描。

    (原理类似与单片机中点阵)

VGA时序标准

 VESA VGA 时序标准图

       由 VESA VGA 时序标准图可知, VGA 时序由行同步时序与场同步时序两部分构成,为了方便理解,将其分开讲解。

a. 行同步时序

      上图中 Video 代表传输的图像信息, HSync 表示行同步信号。 HSync 自上升沿起到下一个上升沿止为一个完整周期,称为行扫描周期。        一个完整的行扫描周期,包含 6 部分: Sync(同步) 、 Back Porch(后沿) 、 Left Border(左边框) 、 “Addressable” Video(有效图像)、 Right Border(右边框)、 Front Porch(前沿) ,这 6 部分的基本单位是 pixel(像素),即一个像素时钟周期。        在一个完整的行扫描周期中,Video 图像信息在 HSync 行同步信号的同步下完成一行图像的扫描显示, Video 图像信息只有在“Addressable” Video(有效图像) 阶段,图像信息有效,其他阶段图像信息无效。         HSync 行同步信号在 Sync(同步) 阶段,维持高电平,其他阶段均保持低电平,在下一个行扫描周期的 Sync(同步) 阶段,HSync 行扫描信号会再次拉高,其他阶段拉低,周而复始。 b.  场同步时序

       理解了行同步时序,两者相类似。如上图示,图中Video 代表传输的图像信息, VSync 表示场同步信号, VSync 自上升沿起到下一个上升沿止为一个完整周期,称为场扫描周期。

       周期组成相同,与行同步信号不同的是,这 6 部分的基本单位是 line(行),即一个完整的行扫描周期。

      综上所述,将行同步时序图与场同步时序图结合起来就构成了 VGA 时序图,具体见下图 。

       图中的红色区域表示在一个完整的行扫描周期中,Video 图像信息只在此区域有效,黄色区域表示在一个完整的场扫描周期中,Video 图像信息只在此区域有效,两者相交的橙色区域, 就是 VGA 图像的最终显示区域。

VGA显示模式及相关参数

       行同步时序可分为 6 个阶段,对于这 6 个阶段的参数是有严格定义的,参数配置不正确VGA 不能正常显示。 VGA 显示器可支持多种分辨率,不同分辨率对应个阶段的参数是不同的,常用 VGA 分辨率时序参数,见下图。

      以经典 VGA 显示模式 640x480@60 为例,讲解一下 VGA 显示的相关参数。

      (1) 显示模式: 640x480@60

      640x480 是指 VGA 的分辨率, 640 是指有效显示图像每一行有 640 个像素点, 480 是指每一帧图像有 480 行, 640 * 480 = 307200 ≈ 300000,每一帧图片包含约 30 万个像素点,之前某品牌手机广告上所说的 30 万像素指的就是这个; @60 是指 VGA 显示图像的刷新频率, 60 就是指 VGA 显示器每秒刷新图像 60 次,即每秒钟需要显示 60 帧图像。       (2) 时钟(MHz): 25.175MHz

      VGA 显示的工作时钟,像素点扫描频率。       (3) 行同步信号时序(像素)、 场同步信号时序(行数)

      行同步信号时序分为 6 段, Sync(同步) 、 Back Porch(后沿) 、 Left Border(左边框) 、 “Addressable” Video(有效图像)、 Right Border(右边框)、 Front Porch(前沿) ,这 6 段构成一个行扫描周期,单位为像素时钟周期。       同步阶段,参数为 96,指在行时序的同步阶段,行同步信号需要保持 96 个像素时钟周期的高电平, 其他几个阶段与此相似。场同步信号时序与其类似,只是单位不再是像素时钟周期,不介绍。

时钟频率的计算方法:

显示模式 640x480@60

行扫描周期 = 800(像素)场扫描周期 X 525(行扫描周期) X 刷新频率

      800 * 525 * 60 = 25,200,000 ≈ 25.175MHz (误差忽略不计)

     注意图像无效阶段的扫描也花费了扫描时间要使用行扫描周期和场扫描周期的参数进行计 算,不能使用有效图像的参数进行计算。

2. 实操

      编写 VGA 驱动, 使用 FPGA 开发板驱动 VGA 显示器显示十色等宽彩条(没有显示屏使用仿真波形验证),VGA 显示模式为 640x480@60。

VGA 彩条实验效果图

硬件资源:

       VGA 只能识别模拟信号,而 FPGA 输出的图像信息为数字信号,故需要数模转换。常见有以下两种方法,一,使用专业的转换芯片,如常用的转换芯片 AD7123,这种方式更为稳定,但成本稍高;二,使用权电阻网络实现数模转换,优点有效降低成本,该板就是使用的第二种方法。 

  VGA 部分原理图

      由图可知,踏浪 Pro 使用的 RGB565 图像模式,位宽为 16bit,高 5 位表示红色,低 5位表示蓝色,中间 6 位表示绿色。根据位宽不同, RGB 图形格式还包括 RGB232、RGB888 等,数据位宽越大,表示颜色种类越多,显示图像越细腻。

      VGA_D[15:0]表示 FPGA 传入权电阻网络的数字图像信号,经过权电阻网络的数模转换,生成能够被 VGA 识别的模拟图像信号 VGA_R、 VGA_G、 VGA_B。        这三路模拟信号的电压范围为 0V ~ 0.714V, 0V 代表无色, 0.714V 代表满色,电压高低由输入的数字信号决定。输入的 R、 G、 B 数字信号不同,输出的三原色红、绿、蓝电压不同,颜色深浅不同,三原色相结合可以产生多种颜色。

2.1 顶层设计 2.1.1 模块框图

       由实验目标可以确认我们需要完成按照vga显示时序,传输显示数据(内容),故将模块划分为以下三个部分。

 VGA 彩条显示实验整体框图

      本实验工程包括 4 个模块,各模块功能如下:

       为了实现模块的的复用性(可以兼容显示其他图案),没有将vga_pic划到vga_ctrl模块中。

2.1.2 代码编写  `timescale 1ns/1ns module vga_colorbar ( input wire sys_clk , input wire sys_rst_n , output wire hsync , //行同步信号 output wire vsync , //场同步信号 output wire [15:0] rgb //像素信息 ); //wire define wire vga_clk ; wire locked ; wire rst_n ; wire [9:0] pix_x ; //有效显示区域X轴坐标 wire [9:0] pix_y ; //有效显示区域Y轴坐标 wire [15:0] pix_data; //像素点色彩信息 assign rst_n = (sys_rst_n & locked); clk_gen clk_gen_inst ( .RESET (~sys_rst_n ), .CLK_IN1 (sys_clk ), .CLK_OUT1 (vga_clk ), .LOCKED (locked ) ); vga_ctrl vga_ctrl_inst ( .vga_clk (vga_clk ), .sys_rst_n (rst_n ), .pix_data (pix_data ), .pix_x (pix_x ), .pix_y (pix_y ), .hsync (hsync ), .vsync (vsync ), .rgb (rgb ) ); vga_pic vga_pic_inst ( .vga_clk (vga_clk ), .sys_rst_n (rst_n ), .pix_x (pix_x ), //像素点X轴坐标,10bit .pix_y (pix_y ), //像素点Y轴坐标 .pix_data (pix_data ) //输出像素点色彩信息,16bit ); endmodule 2.1.3 仿真验证 `timescale 1ns/1ns module tb_vga_colorbar(); wire hsync ; wire [15:0] rgb ; wire vsync ; //reg define reg sys_clk ; reg sys_rst_n ; initial begin sys_clk = 1'b1; sys_rst_n = V_SYNC + V_BACK + V_TOP) && (cnt_v < V_SYNC + V_BACK + V_TOP + V_VALID))) ? 1'b1 : 1'b0; //pix_x,pix_y:VGA有效显示区域像素点坐标 assign pix_x = (pix_data_req == 1'b1) ? (cnt_h - (H_SYNC + H_BACK + H_LEFT - 1'b1)) : 10'h3ff; assign pix_y = (pix_data_req == 1'b1) ? (cnt_v - (V_SYNC + V_BACK + V_TOP)) : 10'h3ff; //rgb:输出像素点色彩信息 assign rgb = (rgb_valid == 1'b1) ? pix_data : 16'b0 ; endmodule 2.3.4 仿真验证 `timescale 1ns/1ns module tb_vga_ctrl(); wire locked ; wire rst_n ; wire vga_clk ; reg sys_clk ; reg sys_rst_n ; reg [15:0] pix_data ; //sys_clk,sys_rst_n初始赋值 initial begin sys_clk = 1'b1; sys_rst_n


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有