2-DE10-Nano的HDMI彩条显示案例(分辨率可切换)—— VGA显示控制器模块设计

VGA显示控制器模块vga_generator.v(位于Demonstrations\FPGA\HDMI_TX\vpg_source路径下)可生成符合DMT(Display Monitor Timing 显示器时序)时序的视频信号。该模块的RTL Viewer视图如下:

该模块根据输入的时序参数生成VGA的行同步信号(vga_hs)、场同步信号(vga_vs)、数据有效信号(vga_de)以及24位真彩色(RGB888)数据(vga_r, vga_g, vga_b)。本案例利用该模块生成测试图案(彩条颜色渐变和边框)用于HDMI显示验证。

输入信号

clk:像素时钟PCLK输入。

reset_n:低电平有效的异步复位信号。

h_total:一行像素的总数(包括消隐区)。

h_sync:行同步脉冲的宽度(以像素数为单位)。

h_start:行有效数据开始的像素位置。

h_end:行有效数据结束的像素位置。

v_total:一帧的总行数(包括消隐区)。

v_sync:场同步脉冲的宽度(以行为单位)。

v_start:场有效数据开始的行位置。

v_end:场有效数据结束的行位置。

v_active_14,v_active_24, v_active_34:将像素有效显示区域分为4等分,每一部分显示一种颜色。

输出信号

vga_hs:行同步信号(低电平有效)。

vga_vs:场同步信号(低电平有效)。

vga_de:数据有效信号(高电平表示有效像素区域)。

vga_r,vga_g, vga_b:8位RGB颜色输出。

关键内部信号

h_count:水平像素计数器。

v_count:垂直行计数器。

pixel_x:当前行内的像素索引(用于颜色生成)。

h_act,v_act:行和场的有效区域标志。

color_mode:颜色模式控制信号(4位,分别代表4种颜色区域)。

boarder:边框标志(用于绘制白色边框)。

逻辑代码分析

1.水平控制逻辑(Horizontal Control)

水平控制信号对应时序如下:

  • 使用h_count计数像素位置,在达到h_total时归零。

  • 生成行同步信号vga_hs:当h_count >= h_sync且未到行末时,同步信号为高(同步脉冲结束),否则为低(同步脉冲期间)。

  • 控制行有效区域h_act:在h_start到h_end之间置位。

  • pixel_x在有效区域内递增,用于生成颜色渐变。

水平控制信号对应的Signaltap 波形如图,可见pixel_x信号比h_act信号延迟二拍。因为第 一拍h_act 变高,但 h_act_d 还是旧值(低电平);第二拍h_act 的高电平被锁存到 h_act_d 中,此时 h_act_d 变高电平,于是第三拍时pixel_x 值可以从0变1。

2.垂直控制逻辑(Vertical Control)

垂直控制信号对应时序如下:

  • 在每行结束时(h_max为真)更新v_count。

  • 生成场同步信号vga_vs:当v_count >= v_sync且未到帧末时,同步信号为高(同步脉冲结束),否则为低。

  • 控制场有效区域v_act:在v_start到v_end之间置位。

  • 根据垂直位置设置color_mode:v_active_14、v_active_24、v_active_34将有效区域分为4部分,分别对应不同的颜色模式。

Signaltap 波形如下:

3.图像生成与数据有效(Pattern Generator and DE)

  • vga_de(数据有效)由pre_vga_de延迟一拍产生,pre_vga_de是h_act和v_act的逻辑与。

  • 绘制白色边框:当进入或退出有效区域时(行或场的边界),boarder置位,输出白色(RGB=0xFF)。

  • 在非边框区域,根据color_mode输出渐变颜色:

0001:由黑向红色渐变(红色分量随pixel_x递增)。

0010:由黑向绿色渐变。(绿色分量随pixel_x递增)。

0100:由黑向蓝色渐变。(蓝色分量随pixel_x递增)。

1000:由黑向白色渐变(三通道同时递增)。

默认状态:黑色(RGB=0x000000)。

Signaltap 波形如下:

\Demonstrations\FPGA\HDMI_TX\vpg_source\vpg.v模块里面给出了各个分辨率参数:

以上代码的这些参数数据参考1-DE10-Nano的HDMI方块移动案例------显示器时序(DMT)标准介绍 里面的显示器时序中不同分辨率刷新率的参数章节的表格。以640x480@60 为例,根据表格参数可以画出VGA有效显示区域如下:

读者可能觉得vpg.v模块里面给出了各个分辨率参数跟表格的数据有不同,是因为时钟节拍从0开始计数,所以每个数据都减一, 另外h_start提前 2 拍其实是全局时序补偿,目标是抵消 "h_act信号到vga_de信号的总延迟(2 拍),让最终显示位置对齐 VGA 标准。具体的计算请参考vpg.v模块里面的注释部分:

往期阅读

1-DE10-Nano的HDMI方块移动案例------显示器时序(DMT)标准介绍

2-DE10-Nano的HDMI方块移动案例------HDMI接口介绍(含TMDS)

3-DE10-Nano的HDMI方块移动案例------ADV7513芯片解读

4-DE10-Nano的HDMI方块移动案例------I2C通信协议

5-DE10-Nano的HDMI方块移动案例------基于FPGA的I2C控制模块设计

6-DE10-Nano的HDMI方块移动案例------使用Modelsim仿真I2C控制器

7-DE10-Nano的HDMI方块移动案例的整体实现(含Quartus完整工程免费下载)

Altera FPGA 的 Avalon MM总线接口规范介绍(精简版)

1- DE10-Nano的HDMI彩条显示案例(分辨率可切换)(含Quartus完整工程免费下载)

相关推荐
kanhao1002 小时前
电平交叉采样 (Level-Crossing Sampling)
算法·fpga开发·fpga
忙什么果13 小时前
上位机、下位机、FPGA、算法放在哪层合适?
算法·fpga开发
博览鸿蒙19 小时前
从迷茫自学到稳定入行:我的 FPGA 上岸全过程
fpga开发
芯门1 天前
FPGA商用级ISP(二):镜头阴影校正(LSC)的网格增益插值与并行硬件架构实现
图像处理·fpga开发·isp
Felven1 天前
corundum 40G开源网卡测试结果
fpga开发·性能测试·dds·开源网卡·mqnic
顾知行1 天前
ABB PC D230 3BHE022291R0101 励磁CCM测量板
fpga开发·abb·abb励磁
芯门1 天前
FPGA商用级ISP:动态坏点校正(DPCC)的滑窗架构与并行判决实现
图像处理·fpga开发·isp
碎碎思2 天前
双管齐下筑优势 AMD 扩容中端 FPGA 阵营并延至 2045 + 长期供货
fpga开发
绿算技术2 天前
【无标题】
数据库·人工智能·科技·算法·fpga开发·硬件架构