0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA数字图像显示原理与实现(Verilog)

HJ18656750788 来源:Cascatrix 2023-01-29 14:12 次阅读

01视频图像接口概述

视频图像经过数十年的发展,已形成了一系列的规范,以VGA和HDMI为主的视频图像接口协议也得到定义与推广。尽管DP、DVIType-C等图像接口技术近年来得到了推广与应用,且VGA传输性能发展逐渐落后于时代,但作为显示器和显卡等设备的通用显示接口,VGA和HDMI仍是当前主流的视频图像接口技术。

2d83fd1c-974f-11ed-bfe3-dac502259ad0.jpg    

1.1 VGA视频接口

视频图形阵列(VGA,Video Graphics Array),也可称作D-Sub,是IBM于1987年提出的一个使用模拟信号电脑显示标准,因此VGA传输信号为模拟信号,并且只能传输视频信号,不能传输音频信号。

2d8b4b26-974f-11ed-bfe3-dac502259ad0.png

VGA接口共有15针,分成3排,每排5个孔,是显卡上应用最为广泛的接口类型,绝大多数显卡都带有此种接口。它传输红、绿、蓝模拟信号以及同步信号(水平和垂直信号)。

VGA各针脚定义如下:

2d9478cc-974f-11ed-bfe3-dac502259ad0.jpg

VGA支持在640×480的较高分辨率下同时显示16种色彩或256种灰度,同时在320×240分辨率下可以同时显示256种颜色。使用VGA连接设备时,线缆长度通常不超过10米,而且要注意接头是否安装牢固,否则可能引起图像中出现虚影。

1.2 HDMI视频接口

高清晰度多媒体接口(High Definition Multimedia Interface,HDMI)是一种数字化视频/音频接口技术,是适合影像传输的专用型数字化接口,HDMI可同时传送音频和影音信号,且在信号传送前无需进行数/模或者模/数转换,是当前视音频主选接口。

2d9ac682-974f-11ed-bfe3-dac502259ad0.png

HDMI自2002年提出以来,已发展到HDMI 2.1标准。该标准能够支持4K 120Hz、8K 60Hz以及高动态范围成像(HDR),能够针对场景或帧数进行优化,并向后兼容HDMI 2.0和HDMI 1.4,其中HDMI 1.4最高数据传输速度为10.2Gbps,HDMI 2.0最高数据传输速度为18Gbps。

HDMI在物理接口上主要包括以下几种类型:标准HDMI接口、mini HDMI接口和Micro HDMI接口。长距离传输通常线材较硬 ,采用标准HDMI接口以确保稳固连接;而小设备通常采用mini HDMI接口和Micro HDMI接口。

2db457dc-974f-11ed-bfe3-dac502259ad0.jpg

1.3 VGA与HDMI对比

VGA与HDMI的对比如下:

1. VGA传输模拟信号,传输过程需要转换和缓存,存在一定损失;HDMI传输数字信号,数据需要无压缩,短距离无转换无损失;

2. VGA仅支持视频传输;HDMI同时支持音频传输;

3. VGA采用PC标准,色阶从0至255;HDMI采用TV标准,色阶默认从15至255;

4. VGA在高分辨率下会存在失真虚化的问题;HDMI支持4K高清分辨率;

5. VGA不存在兼容顾虑;HDMI在PC上兼容性一般,通常不支持三屏以上多屏显示。

随着数字图像的发展,VGA接口被淘汰已成为趋势,目前大部分新生产的PC和显示器设备都不再支持VGA接口。然而,由于VGA标准早期的影响较大,大量投影仪等设备仍采用VGA,因此VGA接口目前仍被大量使用。

02图像显示时序分析

尽管HDMI接口为减少干扰、增强传输可靠性采用了TMDS编码,但其图像扫描的本质方法与VGA相同:通过行同步与场同步进行扫描控制。在设计过程中通常采用专用芯片(例如SIL9134 HDMI编码芯片与SIL9013 HDMI解码芯片)完成TMDS编码操作,因此掌握行同步与场同步的控制时序,就可以完成视频图像的显示。

2.1 图像显示时序

视频图像显示通常采用逐行扫描的方法:从屏幕左上方开始,从左向右逐点扫描。每行扫描完成时,用行同步信号HSYNC进行同步,电子束回到下一行最左侧起始位置,同时CRT对电子束进行行消隐;每帧所有行扫描完成时,用场同步信号VSYNC进行帧同步,电子束回到屏幕左上方,同时CRT对电子束进行进行场消隐,开始下一帧扫描。

HSYNC为行同步信号(Horizontal Synchronization),低电平时完成图像行数据扫描,高电平时进行行同步;VSYNC为场同步信号(Vertical Synchronization),低电平时进行图像数据扫描,高电平时进行帧同步。

2dbc4906-974f-11ed-bfe3-dac502259ad0.jpg

行同步信号HSYNC和场同步信号VSYNC均由四部分组成:Sync同步脉冲 + Back Porch消隐后肩时间 + Active Video数据有效时间 + Front Porch消隐前肩时间。

2dd39048-974f-11ed-bfe3-dac502259ad0.jpg

一幅图片的显示包括有效数据部分和消隐区部分,Blanking为图像的消隐区,Border和Addressable Video部分为图像的有效数据部分,在800×600及以上分辨率中Horizontal Left Border、Horizontal Right Border、Vertical Top Border、Vertical Bottom Border四个参数为0,即不存在Border区域。

2defb962-974f-11ed-bfe3-dac502259ad0.png

行同步时序以像素为单位,场同步时序以行为单位。例如1920×1080分辨率的图像,行时序以每行1920个像素进行同步和有效传输,场时序以每帧1080行进行同步和有效传输。

2.2 不同分辨率显示参数

通过行场同步时序分析可知,对于图像分辨率为1920×1080@60Hz的图像显示,时钟传输频率并非仅考虑有效数据像素1920×1080×60=124.416MHz,而应当同时考虑有效数据和消隐区数据2200×1125×60=148.5MHz。

不同分辨率图像有效数据和消隐区像素分布如下:

2e14cc52-974f-11ed-bfe3-dac502259ad0.png

03图像显示代码实现

3.1 Verilog代码

通过HDMI接口显示图像信息,主要包括两部分:行场同步等信号生成模块与IIC配置TMDS编码芯片模块。由于IIC协议配置芯片寄存器实现方法已在IIC协议中介绍,所以这里给出不同分辨率下HDMI行场同步信号的生成代码:

`timescale 1ns / 1ps

//////////////////////////////////////////////////////////////////////////////////

// Company: Cascatrix

// Engineer: Carson

//

// Create Date: 2023/01/15

// Design Name: Image_Base

// Module Name: cx_image

// Tool Versions: v1.0

// Description: Image read and generate display parameters

//

//////////////////////////////////////////////////////////////////////////////////

`define PIXEL_1920_1080

//`define PIXEL_1680_1050

//`define PIXEL_1280_1024

//`define PIXEL_1280_720

//`define PIXEL_1024_768

//`define PIXEL_800_600

//`define PIXEL_640_480

module cx_image(

inputwireclk,

outputreghs,

outputregvs,

outputwireen,

outputwire [23:0]data

);

//1920x1080 148.5Mhz

`ifdef PIXEL_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

//1680x1050 119Mhz

`ifdef PIXEL_1680_1050

parameter H_ACTIVE = 1680;// 行数据有效时间

parameter H_FRONT_PORCH = 48; // 行消隐前肩时间

parameter H_SYNC_TIME = 32; // 行同步信号时间

parameter H_BACK_PORCH = 80; // 行消隐后肩时间

parameter V_ACTIVE = 1050;// 列数据有效时间

parameter V_FRONT_PORCH = 3; // 列消隐前肩时间

parameter V_SYNC_TIME = 6; // 列同步信号时间

parameter V_BACK_PORCH = 21; // 列消隐后肩时间

`endif

//1280x1024 108Mhz

`ifdef PIXEL_1280_1024

parameter H_ACTIVE = 1280;// 行数据有效时间

parameter H_FRONT_PORCH = 48; // 行消隐前肩时间

parameter H_SYNC_TIME = 112; // 行同步信号时间

parameter H_BACK_PORCH = 248; // 行消隐后肩时间

parameter V_ACTIVE = 1024;// 列数据有效时间

parameter V_FRONT_PORCH = 1; // 列消隐前肩时间

parameter V_SYNC_TIME = 3; // 列同步信号时间

parameter V_BACK_PORCH = 38; // 列消隐后肩时间

`endif

//1280X720 74.25MHZ

`ifdef PIXEL_1280_720

parameter H_ACTIVE = 1280;// 行数据有效时间

parameter H_FRONT_PORCH = 110; // 行消隐前肩时间

parameter H_SYNC_TIME = 40; // 行同步信号时间

parameter H_BACK_PORCH = 220; // 行消隐后肩时间

parameter V_ACTIVE = 720; // 列数据有效时间

parameter V_FRONT_PORCH = 5; // 列消隐前肩时间

parameter V_SYNC_TIME = 5; // 列同步信号时间

parameter V_BACK_PORCH = 20; // 列消隐后肩时间

`endif

//1024x768 65Mhz

`ifdef PIXEL_1024_768

parameter H_ACTIVE = 1024;// 行数据有效时间

parameter H_FRONT_PORCH = 24; // 行消隐前肩时间

parameter H_SYNC_TIME = 136; // 行同步信号时间

parameter H_BACK_PORCH = 160; // 行消隐后肩时间

parameter V_ACTIVE = 768; // 列数据有效时间

parameter V_FRONT_PORCH = 3; // 列消隐前肩时间

parameter V_SYNC_TIME = 6; // 列同步信号时间

parameter V_BACK_PORCH = 29; // 列消隐后肩时间

`endif

//800x600 40Mhz

`ifdef PIXEL_800_600

parameter H_ACTIVE = 800;// 行数据有效时间

parameter H_FRONT_PORCH = 40 ;// 行消隐前肩时间

parameter H_SYNC_TIME = 128;// 行同步信号时间

parameter H_BACK_PORCH = 88 ;// 行消隐后肩时间

parameter V_ACTIVE = 600;// 列数据有效时间

parameter V_FRONT_PORCH = 1 ;// 列消隐前肩时间

parameter V_SYNC_TIME = 4 ;// 列同步信号时间

parameter V_BACK_PORCH = 23 ;// 列消隐后肩时间

`endif

//640x480 25.175Mhz

`ifdef PIXEL_640_480

parameter H_ACTIVE = 640; // 行数据有效时间

parameter H_FRONT_PORCH = 16 ; // 行消隐前肩时间

parameter H_SYNC_TIME = 96 ; // 行同步信号时间

parameter H_BACK_PORCH = 48 ; // 行消隐后肩时间

parameter V_ACTIVE = 480; // 列数据有效时间

parameter V_FRONT_PORCH = 10 ; // 列消隐前肩时间

parameter V_SYNC_TIME = 2 ; // 列同步信号时间

parameter V_BACK_PORCH = 33 ; // 列消隐后肩时间

`endif

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;

reg h_act;

reg v_act;

reg [12:0] h_syn_cnt;

reg [12:0] v_syn_cnt;

reg [31:0] image_cnt;

// 有效数据控制

assign en = h_act & v_act;

// 行扫描计数器

always@(posedge clk)

begin

if(h_syn_cnt == H_TOTAL_TIME - 1)

h_syn_cnt <= 13'b0;

else

h_syn_cnt <= h_syn_cnt + 1'b1;

end

// 列扫描计数器

always@(posedge clk)

begin

if(h_syn_cnt == H_TOTAL_TIME - 1)

begin

if(v_syn_cnt == V_TOTAL_TIME-1)

v_syn_cnt <= 13'b0;

else

v_syn_cnt <= v_syn_cnt + 1'b1;

end

end

// 行同步控制

always@(posedge clk)

begin

if(h_syn_cnt < H_SYNC_TIME)

hs <= 1'b0;

else

hs <= 1'b1;

end

// 场同步控制

always@(posedge clk)

begin

if(v_syn_cnt < V_SYNC_TIME)

vs <= 1'b0;

else

vs <= 1'b1;

end

// 行有效控制

always@(posedge clk)

begin

if(h_syn_cnt == H_SYNC_TIME + H_BACK_PORCH - 1)

h_act = 1'b1;

else if(h_syn_cnt == H_SYNC_TIME + H_BACK_PORCH + H_ACTIVE - 1)

h_act = 1'b0;

end

// 列有效控制

always@(posedge clk)

begin

if(v_syn_cnt == V_SYNC_TIME + V_BACK_PORCH - 1 && h_syn_cnt == 0)

v_act = 1'b1;

else if(v_syn_cnt == V_SYNC_TIME + V_BACK_PORCH + V_ACTIVE - 1 && h_syn_cnt == 0)

v_act = 1'b0;

end

// 像素数计数器

always@(posedge clk)

begin

if(image_cnt == H_ACTIVE*V_ACTIVE - 1)

image_cnt <= 'd0;

else if(h_act & v_act)

image_cnt <= image_cnt + 1;

end

// 图像像素值存储rom

rom_image inst_rom_image

(

.clk (clk),

.en (h_act & v_act),

.addr (image_cnt),

.dout (data)

);

endmodule

rom_image为图像像素数据存储模块,根据不同地址依次存入对应像素的像素值。该模块可通过Matlab生成,具体方法将在后续FPGA数字图像仿真中介绍。部分代码如下:

module rom_image

(

input clk,

input[31:0] addr,

inputen,

output[23:0]dout

);

reg [23:0] DATA;

assigndout = DATA;

always@(*)

begin

if(en)

case(addr)

0 : DATA<=24'hB18D81;

1 : DATA<=24'h967266;

2 : DATA<=24'h987468;

...

2073597 : DATA<=24'hAE8070;

2073598 : DATA<=24'hAE8070;

2073599 : DATA<=24'hC79989;

default: DATA<= 0;

endcase

else

DATA <= 0;

end

endmodule

3.2 实现效果分析

选择分辨率为1920×1080的图像:

2e383156-974f-11ed-bfe3-dac502259ad0.png

FPGA通过HDMI输入到显示器,显示效果如下:

2e46ecaa-974f-11ed-bfe3-dac502259ad0.jpg

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21644

    浏览量

    601403
  • HDMI
    +关注

    关注

    32

    文章

    1648

    浏览量

    151586
  • 接口
    +关注

    关注

    33

    文章

    8472

    浏览量

    150759
  • Verilog
    +关注

    关注

    28

    文章

    1343

    浏览量

    109939
  • 数字图像
    +关注

    关注

    2

    文章

    119

    浏览量

    18726

原文标题:FPGA数字图像显示原理与实现(Verilog)

文章出处:【微信号:Carlinx FPGA,微信公众号:Carlinx FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RGB数字图像显示中错误图像分析

    RGB数字图像显示中错误图像分析Incorrect colours in the RGB display of the "digital" colour bars Products:CCVS +[hide][/hide]
    发表于 06-13 00:05

    数字图像空域滤波算法的FPGA设计

    方法却都是类似的,都是通过模板卷积的方法来实现的。  VLSI技术的迅猛发展为数字图像实时处理技术提供了硬件基础,其中FPGA(现场可编程门阵列)的特点使其非常适用于数字图像处理。本文
    发表于 02-24 14:20

    DCT实现Verilog HDL的数字图像处理源代码

    DCT实现Verilog HDL的数字图像处理源代码
    发表于 08-11 09:30

    基于FPGA的B超数字图像实时采集系统

    基于FPGA的B超数字图像实时采集系统
    发表于 08-17 11:55

    FreeDev FPGA数字图像处理板

    FreeDev FPGA数字图像处理板
    发表于 08-17 22:34

    基于FPGA数字图像处理中的边缘检测系统

    `基于FPGA数字图像处理领域的边缘检测系统。该系统实现了从24位真彩色图片的存储到VGA显示边缘信息。`
    发表于 06-26 13:36

    有谁用FPGA做过数字图像直方图统计

    刚开始用FPGA数字图像处理,看了一些有关直方图方面的资料但是感觉还是不太清晰,请问有谁做过求带顺便求推荐FPGA数字图像处理方面入门级的书
    发表于 08-21 09:48

    有谁用FPGA做过数字图像直方图统计

    刚开始用FPGA数字图像处理,看了一些有关直方图方面的资料但是感觉还是不太清晰,请问有谁做过求带顺便求推荐FPGA数字图像处理方面入门级的书
    发表于 08-23 11:01

    基于FPGA数字图像处理

    分享一本用fpga数字图像处理的书。
    发表于 03-05 21:40

    【电子书】基于FPGA数字图像处理

    `一个FPGA工程师的数字图像处理笔记。`
    发表于 03-29 15:01

    怎么利用FPGA实现数字图像的空域滤波算法?

    本文研究的就是在FPGA设计平台上设计硬件电路,实现数字图像的空域滤波算法。
    发表于 04-30 06:29

    基于FPGA数字图像显示系统

    主要讨论如何利用FPGA 实现数字图像在VGA 显示器和电视上进行显示, 并介绍所使用的Atmel AT40K 系列
    发表于 04-16 14:16 25次下载

    基于FPGA数字图像显示系统

    主要讨论如何利用FPGA 实现数字图像在VGA 显示器和电视上进行显示, 并介绍所使用的Atmel AT40K 系列
    发表于 05-14 14:44 17次下载

    数字图像边缘检测的FPGA实现

    数字图像边缘检测的FPGA实现......
    发表于 01-04 15:31 18次下载

    FPGA设计中 Verilog HDL实现基本的图像滤波处理仿真

    参考。 《冈萨雷斯数字图像处理MATLAB版》中文版(第二版) 电子版 荐读:FPGA设计经验之图像处理 基于FPGA的实时图像边缘检测系统
    的头像 发表于 07-13 09:30 2777次阅读