基于FPGA的VGA图像显示

这篇具有很好参考价值的文章主要介绍了基于FPGA的VGA图像显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于FPGA的VGA图像显示

引言:本文我们介绍利用FPGA实现VGA图像显示,主要介绍VGA硬件接口、VGA接口时序原理以及FPGA代码实现VGA接口时序、仿真等内容。

01 VGA硬件接口介绍

VGA(Video Graphics Array)视频图形阵列是IBM于1987年提出的一个使用模拟信号的电脑显示标准。VGA接口即电脑采用VGA标准输出数据的专用接口。VGA接口共有15针,分成3排,每排5个孔,显卡上应用最为广泛的接口类型,绝大多数显卡都带有此种接口。它传输红、绿、蓝模拟信号以及同步信号(水平和垂直信号)。

基于FPGA的VGA图像显示

图1、VGA接口

管脚 信号 信号描述
1 RED 红基色
2 GREEN 绿基色
3 BLUE 蓝基色
4 ADDR_CODE 地址码
5 RES 自测试(各家定义不同)
6 RED_GND 红地
7 GREEN_GND 绿地
8 BLUE_GND 蓝地
9 RES 保留(各家定义不同)
10 DIG_GND 数字地
11 ADDR_CODE 地址码
12 ADDR_CODE 地址码
13 HS 行同步信号
14 VS 场同步信号
15 ADDR_CODE 地址码

常见的VGA分辨率如图2所示。
基于FPGA的VGA图像显示

图2、常见的VGA分辨率

02 VGA接口时序及显示原理

VGA显示主要取决于R、G、B三基色,也即三原色。根据R、G、B位宽的不同,VGA显示的效果也不同,常见有24bit(R/G/B各8bit)、16bit(R 5bit、G 6bit、B 6bit)、12bit(R/G/B各4bit)。

对于分辨率600×400@60Hz,该参数显示的是VGA有效数据参数,即VGA显示刷新率60帧,每帧600×400个像素点。VGA接口实际传输的数据比此数值要大。

VGA显示器逐行扫描原理:逐行扫描是扫描从屏幕左上角一点开始,从左至右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置。在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号HS进行同步;当扫描完所有的行,形成一帧,用场同步信号VS进行帧同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。

从逐行扫描的原理中,我们可以了解,当一行扫描完成后,切换到下一行时,需要行同步信号及行消隐时间;当一帧扫描完成后,切换到下一帧时,需要场同步信号及场消隐时间,这样就形成了VGA扫描时序,如图3所示。

基于FPGA的VGA图像显示

图3、VGA行场时序图
如图3所示,Sync为同步信号,Back Porch为显示后肩时间,Active Video为有效视频,Front Porch为显示前肩时间。Sync+Back Porch+Active Video+Front Porch构成一个完整行周期。

基于FPGA的VGA图像显示

图4、VGA图像帧定义

图4定义了一帧图像的时序定义。图中场信号的定义与行信号定义类似。行信号以像素点为单位,场信号以行为单位。VGA图像时序的编写即是对图4中各个时序段进行定时。

03 VGA接口时序关键代码编写

下面以1920×1080@60Hz分辨率介绍VGA时序定义。在VESA表准中给出了该分辨率的参数定义,如图5所示。

基于FPGA的VGA图像显示

图5、1920×1080@60Hz分辨率图像参数

在图5中,需要注意蓝色标记的HS/VS信号极性,这在VESA标准中有规定要求,图3只是给出了其中一种HS/VS信号极性,其他3种请参考VESA标准。

根据图5所示,我们需要关注的参数如图中各个颜色标记所示。

`ifdef  VIDEO_1920_1080   //一帧图像参数定义
//行周期参数定义
parameter  H_ACTIVE        = 1920;// 行数据有效像素点数
parameter  H_FRONT_PORCH   = 88;  // 行消隐前肩像素点数
parameter  H_SYNC_TIME     = 44;  // 行同步信号像素点数
parameter  H_BACK_PORCH    = 148; // 行消隐后肩像素点数 
//场周期参数定义                
parameter  V_ACTIVE        = 1080;// 场数据有效像素点数
parameter  V_FRONT_PORCH   = 4;   // 场消隐前肩像素点数
parameter  V_SYNC_TIME     = 5;   // 场同步信号像素点数
parameter  V_BACK_PORCH    = 36;  // 场消隐后肩像素点数
`endif

根据一帧图像参数定义,进一步定义行、场扫描计数器,这两个计数器可以用来产生HS行同步信号、VS场同步信号、图像有效数据使能信号DE以及图像有效数据坐标。

parameter  H_TOTAL_TIME   = H_ACTIVE + H_FRONT_PORCH + H_SYNC_TIME + H_BACK_PORCH; 
parameter  V_TOTAL_TIME   = V_ACTIVE + V_FRONT_PORCH + V_SYNC_TIME + V_BACK_PORCH;

//行扫描计数器
always@(posedge i_clk) begin
  if(h_syn_cnt >= H_TOTAL_TIME-1)  h_syn_cnt <= 0;
  else h_syn_cnt <= h_syn_cnt + 1;
end

// 场扫描计数器
always@(posedge i_clk) begin
  if(h_syn_cnt >= H_TOTAL_TIME-1) begin
        if(v_syn_cnt >= V_TOTAL_TIME-1)
            v_syn_cnt <= 0;
        else
            v_syn_cnt <= v_syn_cnt + 1;
  end
end

HS行同步信号、VS场同步信号Verilog代码。

// 行同步信号
always@(posedge i_clk) begin
    if(h_syn_cnt < H_SYNC_TIME)
        o_hsyn <= 0;
    else
        o_hsyn <= 1;
end

// 场同步信号
always@(posedge i_clk) begin
    if(v_syn_cnt < V_SYNC_TIME)
        o_vsyn <= 0;
    else
        o_vsyn <= 1;
end

图像有效数据使能信号DE。

//有效数据使能信号DE
always@(posedge i_clk) begin
    if(v_syn_cnt >= V_SYNC_TIME + V_BACK_PORCH && v_syn_cnt < V_SYNC_TIME + V_BACK_PORCH + V_ACTIVE)
    begin
        if(h_syn_cnt >= H_SYNC_TIME + H_BACK_PORCH && h_syn_cnt < H_SYNC_TIME + H_BACK_PORCH + H_ACTIVE)
            o_en_pos <= 1;
        else
            o_en_pos <= 0;
    end
    else
        o_en_pos <= 0;
end

图像有效数据坐标产生x_pose、y_pose。

//x坐标数据
always@(posedge i_clk) begin
    if(v_syn_cnt >= V_SYNC_TIME + V_BACK_PORCH && v_syn_cnt < V_SYNC_TIME + V_BACK_PORCH + V_ACTIVE)
    begin
        if(h_syn_cnt >= H_SYNC_TIME + H_BACK_PORCH && h_syn_cnt < H_SYNC_TIME + H_BACK_PORCH + H_ACTIVE)
            o_x_pos <= h_syn_cnt - (H_SYNC_TIME + H_BACK_PORCH);
        else
            o_x_pos <= 0;
    end
    else
        o_x_pos <= 0;
end

//y坐标数据
always@(posedge i_clk) begin
    if(v_syn_cnt >= V_SYNC_TIME + V_BACK_PORCH && v_syn_cnt < V_SYNC_TIME + V_BACK_PORCH + V_ACTIVE)
        o_y_pos <= v_syn_cnt - (V_SYNC_TIME + V_BACK_PORCH);
    else
        o_y_pos <= 0;
end

04 FPGA工程实现框架

FPGA实现VGA显示功能框架如图6所示。

基于FPGA的VGA图像显示

图6、FPGA实现VGA显示功能框图

如图6所示,整个工程由四个模块组成:PLL模块、vga_timing_ctrl模块、video_source模块和hdmi_interface_dir模块。由于实验电路板上没有VGA接口,因此采用HDMI接口实现最终图像显示。图中video_source输出的信号可以直接送入视频DAC芯片,如ADV7123实现VGA图像显示。

PLL模块:产生VGA图像像素时钟pixclk和pixclk_x5时钟(HDMI接口串行时钟);

vga_timing_ctrl模块:实现VGA时序产生和控制;

video_source模块:产生VGA图像数据;

hdmi_interface_dir模块:实现HDMI接口驱动功能。

05 Modelsim软件仿真与测试

编写Testbench测试文件,功能仿真如图7所示。

基于FPGA的VGA图像显示

图7、VGA时序Modelsim仿真

06 硬件测试与验证

硬件平台:XC7Z035FFG676-2

Vivado软件:2017.4

工程编译完成后,下载bit文件到电路板,测试结果如图所示。

基于FPGA的VGA图像显示

图8、VGA时序图像显示

本文来源于微信公众号:FPGA技术实战,参考原文:《基于FPGA的VGA图像显示》文章来源地址https://www.toymoban.com/news/detail-463075.html

到了这里,关于基于FPGA的VGA图像显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 基于FPGA:运动目标检测(VGA显示,原理图+源码+硬件选择)

    基于FPGA:运动目标检测(VGA显示,原理图+源码+硬件选择)

        话不多说,先上视频看效果。 基于FPGA:运动目标检测 开发板Altera:EP4CE10F17C8 摄像头:OV5640 缓存数据:SDRAM 板子是自己制作的     根据帧差法的实现流程,设计的双端口SDRAM控制器,一侧读写端口用做帧缓存,另一个端口用来缓存视频流,如图所示。     在使用

    2024年02月04日
    浏览(7)
  • 基于Quartus Prime平台FPGA关于VGA显示的模块化设计:VGA八种单色屏1s切换显示、横条纹、竖条纹、棋盘格显示、显示模式按键可调、数码管显示单色屏序号

    基于Quartus Prime平台FPGA关于VGA显示的模块化设计:VGA八种单色屏1s切换显示、横条纹、竖条纹、棋盘格显示、显示模式按键可调、数码管显示单色屏序号

    VGA(Video Graphics Array)是一种显示接口标准,它最初由IBM于1987年推出。VGA协议定义了计算机视频输出信号的格式和特性。它主要用于连接计算机和显示器之间的传输,实现图像和视频的显示。 VGA协议支持最高分辨率为640x480像素,色彩深度为16位色(即65,536种颜色)。它使用模

    2024年02月03日
    浏览(25)
  • 记一次基于FPGA的VGA显示四操作数计算器工程的开发流程——(1)从顶层设计说起

    记一次基于FPGA的VGA显示四操作数计算器工程的开发流程——(1)从顶层设计说起

    首先值得说明的是,在这个项目几乎完成之际,笔者才愈发体会到了硬件思维和软件思维的云泥之别。不幸的是,在此项目的实现过程中,绝大部分代码的思维仍然是软件思维,因此该项目主要模块的设计部分可能并不能体现硬件操作的独到之处,不符合硬件工程师的基本设

    2024年02月04日
    浏览(13)
  • FPGA学习——VGA显示

    FPGA学习——VGA显示

    VGA(Video Graphics Array)是IBM在1987年随PS/2机⼀起推出的⼀种视频,具有分辨率⾼、显⽰速率快、颜⾊丰富等优点,在彩 ⾊显⽰器领域得到了⼴泛的应⽤。不⽀持热插拔,不⽀持⾳频传输。对于⼀些嵌⼊式VGA显⽰系统,可以在不使⽤VGA显⽰卡和计算机的 情况下,实现VGA图像的显⽰

    2024年02月04日
    浏览(11)
  • 【FPGA开发】VGA彩条显示及VGA白块位移

    【FPGA开发】VGA彩条显示及VGA白块位移

    为了理解VGA的工作模式,并且进行vga一部分的模板开发,方便后续图像处理显示的需求。这里通过对vga时序进行分析,进行简单的vga图像控制。实验阶段进行的是640*480@60hz的分辨率和刷新率,后续因为需要适应显示器的规格。会在模块化的阶段进行参数的重新分配,变成可编

    2024年01月21日
    浏览(7)
  • FPGA—VGA 显示器显示彩条(附代码)

    FPGA—VGA 显示器显示彩条(附代码)

    目录 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.总结 VGA简介        图像显示

    2024年02月09日
    浏览(13)
  • FPGA图像音频通信接口:VGA

    FPGA图像音频通信接口:VGA

    目录 VGA 1 VGA彩条显示实验 2、VGA方块移动实验 3 VGA字符显示实验    VGA是IBM公司在1987年推出的一种视频传输标准,具有分辨率高,显示速率快、颜色丰富等优点。VGA的全称是Video Graphics Array,即视频图形阵列,是一个使用模拟信号进行视频传输的标准。 VGA接口定义及各引脚功

    2023年04月08日
    浏览(11)
  • 【FPGA】通俗理解从VGA显示到HDMI显示

    【FPGA】通俗理解从VGA显示到HDMI显示

    注:大部分参考内容来自“征途Pro《FPGA Verilog开发实战指南——基于Altera EP4CE10》2021.7.10(上)”  贴个下载地址: 野火FPGA-Altera-EP4CE10征途开发板_核心板 — 野火产品资料下载中心 文档 hdmi显示器驱动设计与验证 — [野火]FPGA Verilog开发实战指南——基于Altera EP4CE10 征途Pro开

    2024年02月09日
    浏览(11)
  • 【FPGA开发】SDRAM的读写VGA显示

    【FPGA开发】SDRAM的读写VGA显示

            实验的目的旨在使用sdram作为中间媒介,在sdram上读写以在显示器上显示图像的目的。 1.2.1 SDRAM型号介绍 这里我们使用的 sdram为 Hynix 公司生产的型号为 HY57V281620F 的 芯片,其存储空间可以分为4Bank x 2M x16Bit ,其中 4Bank 指的是该芯片有 4 个bank区间, 2M 指的是每个 ba

    2024年01月17日
    浏览(12)
  • 【FPGA入门】第八篇、FPGA驱动VGA实现动态图像移动

    【FPGA入门】第八篇、FPGA驱动VGA实现动态图像移动

    目录 第一部分、实现效果 第二部分、动态VGA显示的原理 1、将动态显示的区域提前进行赋值 2、图像块的移动是每张图片叠加后的效果 3、如何实现图像块位置的改变 第三部分、系统结构和驱动波形 1、系统的Top-down结构 2、图像块移动的驱动波形 第四部分、代码 1、同步信号

    2024年02月04日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包