1. 紫光盘古22K开发套件与HDMI彩条实验概述
紫光同创作为国产FPGA的重要供应商,其盘古系列开发套件为工程师和学生提供了优质的国产FPGA学习平台。本次实验使用的盘古22K开发板搭载PGL22G芯片,是一款面向中低密度应用的FPGA器件,具有22K逻辑单元、内置Block RAM和DSP模块,以及丰富的IO资源。
HDMI彩条输出是FPGA视频处理的经典入门实验,它涉及以下几个核心知识点:
- HDMI接口的电气特性与时序要求
- 视频时序信号的生成原理
- FPGA内部时钟管理与分配
- 色彩空间与像素数据生成
这个实验虽然基础,但涵盖了FPGA开发中的多个关键技术环节,包括:
- 时钟树设计与PLL配置
- 状态机实现视频时序控制
- 并行数据处理与流水线设计
- 高速IO接口的信号完整性
提示:对于初次接触FPGA视频处理的开发者,建议先理解VESA视频时序标准,这是后续所有视频处理的基础。
2. 实验环境搭建与工程创建
2.1 开发工具链准备
紫光同创FPGA使用Pango Design Suite(PDS)作为官方开发工具。最新版本可从官网下载,安装时需注意:
- 安装路径不要包含中文或空格
- 安装完成后需配置License文件
- 建议同时安装USB Blaster驱动以备调试使用
工具链包含以下核心组件:
- PDS:集成开发环境(综合、布局布线、时序分析)
- Programmer:配置器件下载工具
- ModelSim Pango:仿真工具(需单独安装)
2.2 硬件连接检查
盘古22K开发套件的硬件连接要点:
- 使用配套12V电源适配器供电
- 通过USB-Blaster连接JTAG接口
- HDMI输出端口连接到显示器
- 确认开发板上的电源指示灯正常
硬件配置注意事项:
- 开发板上的Bank电压选择跳线需设置为3.3V(与HDMI电平匹配)
- 对于不同分辨率的显示器,可能需调整EDID配置
- 建议使用短距离(<1m)HDMI线缆以减少信号完整性问题
2.3 新建PDS工程
工程创建关键步骤:
- 选择器件型号:PGL22G-6MBG324
- 设置顶层模块名:hdmi_colorbar
- 添加约束文件(.pdc)
- 配置默认库搜索路径
工程目录结构建议:
/hdmi_demo ├── /src │ ├── hdmi_colorbar.v # 顶层模块 │ ├── pll.v # 时钟模块 │ ├── sync_gen.v # 时序生成 │ └── pattern_gen.v # 彩条生成 ├── /sim # 仿真文件 ├── /constraint # 约束文件 └── hdmi_demo.pds # 工程文件3. HDMI彩条系统架构设计
3.1 整体模块划分
系统采用典型的视频处理流水线架构:
[PLL时钟生成] → [时序控制器] → [彩条生成器] → [HDMI编码器]各模块功能说明:
时钟模块(pll)
- 生成像素时钟(如74.25MHz for 720p60)
- 提供HDMI TMDS编码时钟
- 产生系统全局复位信号
时序控制模块(sync_vg)
- 生成HSYNC/VSYNC同步信号
- 计算当前像素位置(X,Y坐标)
- 产生有效视频区域标志(active_video)
彩条生成模块(pattern_vg)
- 根据像素位置生成RGB值
- 实现标准彩条图案(75%幅度)
- 可选支持多种测试图案切换
HDMI编码模块(ms72xx_ctl)
- RGB到TMDS编码转换
- 插入控制周期和消隐数据
- 处理HDMI热插拔检测(HPD)
3.2 关键参数计算
以720p60分辨率为例:
| 参数 | 值 | 计算公式 |
|---|---|---|
| 像素时钟 | 74.25MHz | 1280×720×60×1.001 ≈ 74.25MHz |
| 水平总像素 | 1650 | 1280+370(消隐) |
| 垂直总行数 | 750 | 720+30(消隐) |
| HSYNC脉冲宽度 | 40 | 典型值 |
| VSYNC脉冲宽度 | 5 | 典型值 |
Verilog实现示例:
// 水平计数器 always @(posedge pix_clk) begin if (h_cnt == H_TOTAL-1) begin h_cnt <= 0; v_cnt <= (v_cnt == V_TOTAL-1) ? 0 : v_cnt + 1; end else begin h_cnt <= h_cnt + 1; end end // 同步信号生成 assign hsync = (h_cnt < HSYNC_PULSE); assign vsync = (v_cnt < VSYNC_PULSE); assign active = (h_cnt >= HSYNC_PULSE + HSYNC_BACK) && (h_cnt < HSYNC_PULSE + HSYNC_BACK + H_ACTIVE) && (v_cnt >= VSYNC_PULSE + VSYNC_BACK) && (v_cnt < VSYNC_PULSE + VSYNC_BACK + V_ACTIVE);4. 彩条图案生成实现
4.1 彩条规格定义
标准彩条包含8个垂直条纹,从左到右依次为:
- 白 (100% RGB)
- 黄 (R+G)
- 青 (G+B)
- 绿 (G)
- 紫 (R+B)
- 红 (R)
- 蓝 (B)
- 黑 (0%)
实际工程中常使用75%幅度彩条,各颜色分量值为191(0xBF)或0。
4.2 Verilog实现方案
module pattern_gen ( input [11:0] h_pos, input [11:0] v_pos, output [7:0] red, output [7:0] green, output [7:0] blue ); // 计算彩条索引(0-7) localparam BAR_WIDTH = H_ACTIVE / 8; wire [2:0] bar_index = h_pos / BAR_WIDTH; // 彩条颜色查找表 always @(*) begin case(bar_index) 3'd0: {red, green, blue} = {8'hBF, 8'hBF, 8'hBF}; // 白 3'd1: {red, green, blue} = {8'hBF, 8'hBF, 8'h00}; // 黄 3'd2: {red, green, blue} = {8'h00, 8'hBF, 8'hBF}; // 青 3'd3: {red, green, blue} = {8'h00, 8'hBF, 8'h00}; // 绿 3'd4: {red, green, blue} = {8'hBF, 8'h00, 8'hBF}; // 紫 3'd5: {red, green, blue} = {8'hBF, 8'h00, 8'h00}; // 红 3'd6: {red, green, blue} = {8'h00, 8'h00, 8'hBF}; // 蓝 default: {red, green, blue} = {8'h00, 8'h00, 8'h00}; // 黑 endcase end endmodule4.3 扩展功能实现
为增强实验效果,可添加以下功能:
- 移动彩条:通过改变h_pos的基准值实现水平滚动
- 渐变彩条:根据v_pos实现颜色渐变效果
- 图案切换:通过拨码开关选择不同测试图案
- 颜色深度测试:实现24位真彩到8位索引色的转换测试
5. HDMI TMDS编码与硬件接口
5.1 TMDS编码原理
TMDS(Transition Minimized Differential Signaling)是HDMI采用的编码方案,特点包括:
- 8b/10b编码(提升到10位)
- DC平衡(保证相同数量的0和1)
- 差分传输(抗干扰能力强)
编码过程分为两步:
- 将8位数据转换为9位(减少跳变)
- 将9位转换为10位(平衡直流)
5.2 FPGA端实现
紫光FPGA可通过两种方式实现TMDS编码:
方案一:使用原语(推荐)
OSER10 #( .GSREN("false"), .LSREN("true") ) oser10_inst ( .Q(tmds_data_p), .D0(din[0]), .D1(din[1]), ... .CLK(pix_clkx5), .RESET(reset) );方案二:使用IP核
- 在PDS中调用TMDS编码IP
- 配置数据宽度和时钟关系
- 生成实例化模板
5.3 硬件连接与约束
关键引脚约束示例(.pdc文件):
# 时钟输入 define_clock -name clk_50m -period 20 [get_ports clk] # HDMI差分对 define_port -name hdmi_tx_clk_p -io_type LVDS -loc E12 define_port -name hdmi_tx_d0_p -io_type LVDS -loc D11 define_port -name hdmi_tx_d1_p -io_type LVDS -loc C10 define_port -name hdmi_tx_d2_p -io_type LVDS -loc B9信号完整性注意事项:
- 保持差分对长度匹配(±50mil以内)
- 避免高速信号跨分割区
- 在接收端预留端接电阻位置
6. 调试技巧与常见问题
6.1 无图像输出排查流程
检查电源和连接
- 确认开发板供电正常
- 检查HDMI线缆连接可靠
- 测量TMDS信号电压(约3.3V)
验证时钟生成
- 使用示波器测量像素时钟
- 确认PLL锁定信号(pll_lock)为高
检查同步信号
- 捕获HSYNC/VSYNC波形
- 确认时序参数符合显示器EDID
分析数据通路
- 插入ILA核观察内部信号
- 检查RGB数据是否正常生成
6.2 典型问题解决方案
问题1:显示器显示"无信号"
- 可能原因:HPD信号未正确处理
- 解决方案:检查HPD引脚上拉电阻(典型47kΩ)
问题2:图像偏移或撕裂
- 可能原因:时序参数不匹配
- 解决方案:调整消隐区大小或同步脉冲宽度
问题3:颜色异常
- 可能原因:RGB通道顺序错误
- 解决方案:检查TMDS通道映射关系
6.3 高级调试工具
片上逻辑分析仪(ILA)
- 插入调试IP核实时捕获信号
- 设置触发条件捕获异常状态
SignalTap等效工具
- 紫光工具中的在线调试功能
- 需预留足够的Block RAM资源
HDMI协议分析仪
- 专业设备解析TMDS数据流
- 可查看实际传输的像素数据
7. 实验扩展与进阶方向
完成基础彩条输出后,可尝试以下扩展实验:
多分辨率支持
- 添加1080p/4K时序配置
- 动态切换显示模式
视频输入处理
- 接入摄像头输入
- 实现简单的图像处理流水线
OSD叠加显示
- 在视频流上叠加文字信息
- 实现菜单系统
色彩空间转换
- RGB与YUV相互转换
- 实现色度空间调整
与处理器协同
- 通过AHB总线接收图像数据
- 实现软硬件协同处理
对于想深入HDMI开发的工程师,建议研究:
- HDMI 2.1协议新特性(如FRL模式)
- HDCP内容保护实现
- CEC控制总线协议
- EDID数据的解析与生成