1概述 本章节我们需要通过数据岛的控制信号恢复出视频数据原始的HSYNC、VSYNC控制信号,首先我们回忆一下,有哪些信号受到VSYNC、HSYNC控制信号影响。如下图所示:
如图所示,HSYNC(行同步信号)与VSYNC(场同步信号)的作用范围可明确分为两个维度:其一作用于基础控制信号层,其功能逻辑已在前文详述;其二则体现在数据岛(Data Island)的Header包结构设计中,通过同步信号的时序特征实现视频数据帧的定位与解析。这两个层级的协同作用共同构成了完整的信号传输体系。
那仅仅是这样了吗?有一个关键细节容易被忽略。在数据岛保护频带期间,通道0被编码为四个TERC4值之一。这些TERC4值(D[3:0])为0xC、0xD、0xE和0xF,具体取决于HSYNC和VSYNC的信号。 由此HSYNC(行同步信号)和VSYNC(场同步信号)的数据结构由三部分构成,分别为控制信号(Control)、保护带信号(Guard_Band)以及BCH编码信号。本讲重点解析前两部分,即控制信号的逻辑恢复与保护带中HSYNC、VSYNC的时序特征提取。关于BCH编码相关的信号解析,将结合其解码原理在后续课程中展开详细阐述。 2代码部分该模块作为HDMI控制数据解析的核心单元,专注于同步信号提取与保护带精准控制。其通过通道0的TMDS控制字符检测(如0x2AA/0x355触发VSYNC),结合数据岛保护带周期解码D/E/F控制码(对应HS/VS同步参数),构建符合CTA-861规范的同步时序架构。 采用分层处理机制:基础层基于0x354等字符直接生成HS/VS脉冲,增强层在消隐期解析TERC4编码(如10'b1100011010对应垂直保护带),通过双周期协同确保同步相位连续性,严格满足HDMI 1.4b标准对控制周期与数据岛周期切换的时序精度要求。
- `timescale 1ns / 1ps
- //////////////////////////////////////////////////////////////////////////////////
- // 模块名称:HDMI控制数据解码器
- // 功能描述:解析HDMI数据岛期的控制字符,生成同步信号和保护带控制
- // 主要接口:
- // I_pixel_clk - 像素时钟(TMDS字符速率,通常为视频模式的像素时钟)
- // I_control_data - 10位TMDS控制字符输入(来自HDMI通道0)
- // I_island_guardband - 数据岛/保护带周期标志(高电平有效)
- // O_vsync/O_hsync - 垂直/水平同步信号输出
- //////////////////////////////////////////////////////////////////////////////////
- module hdmi_control_data_decoder(
- input wire I_pixel_clk , // 像素时钟(典型值:74.25MHz/148.5MHz)
- input wire I_reset_n , // 低电平复位(异步复位信号)
- input wire [9:0] I_control_data , // TMDS控制字符(10位差分编码)
- input wire I_island_guardband, // 数据岛保护带周期标志
- output reg O_vsync , // 垂直同步输出(正极性)
- output reg O_hsync // 水平同步输出(正极性)
- );
-
- // 内部信号寄存器
- reg [9:0] r_control_data ; // 控制字符同步寄存器(消除亚稳态)
- reg [1:0] r_guardband_control; // 保护带控制码(00:正常 01:HS 10:VS 11:HS+VS)
-
- // 控制字符同步流水线
- always @(posedge I_pixel_clk) begin
- r_control_data <= I_control_data; // 对输入控制字符进行时钟同步
- end
-
- // 垂直同步生成逻辑(符合HDMI规范CTA-861标准)
- always @(posedge I_pixel_clk or negedge I_reset_n) begin
- if (!I_reset_n)
- O_vsync<= 'b0; // 复位时同步信号置零
- // 检测VSYNC控制字符:0x2AA(0b0010101010)或0x355(0b1101010101)
- // 或保护带控制码10(VS)和11(VS+HS)
- else if((r_control_data == 10'b0010101010)||(r_control_data == 10'b1101010101)||(r_guardband_control == 2'b10) ||(r_guardband_control == 2'b11))
- O_vsync<= 'b1; // 有效垂直同步信号
- else
- O_vsync<= 'b0; // 非同步周期
- end
-
- // 水平同步生成逻辑
- always @(posedge I_pixel_clk or negedge I_reset_n) begin
- if (!I_reset_n)
- O_hsync<= 'b0; // 复位初始化
- // 检测HSYNC控制字符:0x354(0b1101010100)或0x355(0b1101010101)
- // 或保护带控制码01(HS)和11(HS+VS)
- else if((r_control_data == 10'b1101010100)||(r_control_data == 10'b1101010101)||(r_guardband_control == 2'b01)||(r_guardband_control == 2'b11))
- O_hsync<= 'b1; // 有效水平同步信号
- else
- O_hsync<= 'b0; // 非同步周期
- end
-
- // 保护带控制码解码器(数据岛期间有效)
- // 根据HDMI规范第6.3节保护带控制字符定义
- always @(posedge I_pixel_clk) begin
- if (I_island_guardband) begin // 仅在数据岛/保护带周期处理
- case (I_control_data) // 解码特定保护带控制字符
- // 保护带控制字符定义:
- 10'b0111000101 : r_guardband_control <= 2'b00; // 数据C(正常视频周期)
- 10'b1000111001 : r_guardband_control <= 2'b01; // 数据D(水平保护带)
- 10'b1100011010 : r_guardband_control <= 2'b10; // 数据E(垂直保护带)
- 10'b1100001101 : r_guardband_control <= 2'b11; // 数据F(复合保护带)
- default: r_guardband_control <= 2'b00; // 非法字符处理
- endcase
- end else begin
- r_guardband_control <= 2'b0; // 非数据岛周期清零控制码
- end
- end
-
- endmodule
复制代码
3代码仿真根据代码仿真结果,O_hsync信号解析为0是由于时序设计中已将HSYNC信号完整嵌入island_data区间,其同步功能主要由BCH模块实现,当前模块保留该信号处理逻辑仅出于系统兼容性考量。 本模块的核心功能聚焦于VSYNC信号的解析与校准,因垂直同步信号周期较长,单周期信号必然跨越多个island_data区间,需通过本模块的多周期数据拼接及相位补偿机制实现跨区同步,确保时序基准的精确重构。 由于VSYNC信号仿真时间过长,就不特意截图展示,感兴趣的用户可以用在线逻辑分析仪抓取。
|