| 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标准对控制周期与数据岛周期切换的时序精度要求。 3代码仿真复制代码`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
根据代码仿真结果,O_hsync信号解析为0是由于时序设计中已将HSYNC信号完整嵌入island_data区间,其同步功能主要由BCH模块实现,当前模块保留该信号处理逻辑仅出于系统兼容性考量。 本模块的核心功能聚焦于VSYNC信号的解析与校准,因垂直同步信号周期较长,单周期信号必然跨越多个island_data区间,需通过本模块的多周期数据拼接及相位补偿机制实现跨区同步,确保时序基准的精确重构。 由于VSYNC信号仿真时间过长,就不特意截图展示,感兴趣的用户可以用在线逻辑分析仪抓取。   
 |