从VGA时序到HDMI信号:基于Verilog的TMDS编码实战指南
在数字视频传输领域,HDMI已成为连接显示设备的事实标准。但对于嵌入式开发者而言,理解其底层工作原理并实现一个基础的HDMI输出系统,仍然是极具挑战性的任务。本文将带领读者从最基础的VGA时序开始,逐步构建完整的HDMI信号生成系统,重点解析TMDS编码的核心原理与Verilog实现技巧。
1. 数字视频基础与硬件准备
1.1 VGA时序:HDMI的起点
任何数字视频系统的核心都是时序控制。VGA(Video Graphics Array)作为最基础的数字视频标准,其时序生成是理解HDMI的绝佳切入点。一个典型的VGA时序包含以下几个关键参数:
-
水平时序:
- 同步脉冲(Sync Pulse):指示行扫描开始
- 后沿(Back Porch):同步结束到有效数据开始
- 有效数据(Active Video):实际像素数据
- 前沿(Front Porch):有效数据结束到下一同步开始
-
垂直时序:
- 类似水平时序,但以行为单位控制帧刷新
以640x480@60Hz分辨率为例,其时序参数如下表所示:
| 参数 | 水平时序(像素) | 垂直时序(行数) |
|---|---|---|
| 同步脉冲 | 96 | 2 |
| 后沿 | 48 | 33 |
| 有效数据 | 640 | 480 |
| 前沿 | 16 | 10 |
| 总周期 | 800 | 525 |
在Verilog中,我们可以用简单的计数器实现这时序生成器:
verilog复制module vga_timing (
input clk,
output reg hsync,
output reg vsync,
output reg [9:0] x_pos,
output reg [9:0] y_pos,
output reg active
);
// 水平时序参数
parameter H_SYNC = 96;
parameter H_BACK = 48;
parameter H_ACTIVE = 640;
parameter H_FRONT = 16;
parameter H_TOTAL = H_SYNC + H_BACK + H_ACTIVE + H_FRONT;
// 垂直时序参数
parameter V_SYNC = 2;
parameter V_BACK = 33;
parameter V_ACTIVE = 480;
parameter V_FRONT = 10;
parameter V_TOTAL = V_SYNC + V_BACK + V_ACTIVE + V_FRONT;
// 水平计数器
always @(po
