问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 48 人浏览分享

开启左侧

HDMI-IP项目-主讲图像控制信号还原-连载十二

[复制链接]
48 0
1概述

本章节我们需要通过数据岛的控制信号恢复出视频数据原始的HSYNCVSYNC控制信号,首先我们回忆一下,有哪些信号受到VSYNCHSYNC控制信号影响。如下图所示:

640?wx_fmt=png&from=appmsg

如图所示,HSYNC(行同步信号)与VSYNC(场同步信号)的作用范围可明确分为两个维度:其一作用于基础控制信号层,其功能逻辑已在前文详述;其二则体现在数据岛(Data Island)的Header包结构设计中,通过同步信号的时序特征实现视频数据帧的定位与解析。这两个层级的协同作用共同构成了完整的信号传输体系。

640?wx_fmt=png&from=appmsg

那仅仅是这样了吗?有一个关键细节容易被忽略。在数据岛保护频带期间,通道0被编码为四个TERC4值之一。这些TERC4(D[3:0])0xC0xD0xE0xF,具体取决于HSYNCVSYNC的信号。

由此HSYNC(行同步信号)和VSYNC(场同步信号)的数据结构由三部分构成,分别为控制信号(Control)、保护带信号(Guard_Band)以及BCH编码信号。本讲重点解析前两部分,即控制信号的逻辑恢复与保护带中HSYNCVSYNC的时序特征提取。关于BCH编码相关的信号解析,将结合其解码原理在后续课程中展开详细阐述。

2代码部分

该模块作为HDMI控制数据解析的核心单元,专注于同步信号提取与保护带精准控制。其通过通道0TMDS控制字符检测(如0x2AA/0x355触发VSYNC),结合数据岛保护带周期解码D/E/F控制码(对应HS/VS同步参数),构建符合CTA-861规范的同步时序架构。

采用分层处理机制:基础层基于0x354等字符直接生成HS/VS脉冲,增强层在消隐期解析TERC4编码(如10'b1100011010对应垂直保护带),通过双周期协同确保同步相位连续性,严格满足HDMI 1.4b标准对控制周期与数据岛周期切换的时序精度要求。

  1. `timescale 1ns / 1ps  
  2. //////////////////////////////////////////////////////////////////////////////////  
  3. // 模块名称:HDMI控制数据解码器  
  4. // 功能描述:解析HDMI数据岛期的控制字符,生成同步信号和保护带控制  
  5. // 主要接口:  
  6. //   I_pixel_clk      - 像素时钟(TMDS字符速率,通常为视频模式的像素时钟)  
  7. //   I_control_data   - 10位TMDS控制字符输入(来自HDMI通道0)  
  8. //   I_island_guardband - 数据岛/保护带周期标志(高电平有效)  
  9. //   O_vsync/O_hsync  - 垂直/水平同步信号输出  
  10. //////////////////////////////////////////////////////////////////////////////////  
  11. module hdmi_control_data_decoder(  
  12. input wire       I_pixel_clk    ,  // 像素时钟(典型值:74.25MHz/148.5MHz)  
  13. input wire       I_reset_n      ,  // 低电平复位(异步复位信号)  
  14. input wire [9:0] I_control_data ,  // TMDS控制字符(10位差分编码)  
  15. input wire       I_island_guardband, // 数据岛保护带周期标志  
  16. output reg       O_vsync        ,  // 垂直同步输出(正极性)  
  17. output reg       O_hsync          // 水平同步输出(正极性)  
  18. );  
  19. // 内部信号寄存器  
  20. reg [9:0] r_control_data     ;  // 控制字符同步寄存器(消除亚稳态)  
  21. reg [1:0] r_guardband_control;  // 保护带控制码(00:正常 01:HS 10:VS 11:HS+VS)  
  22. // 控制字符同步流水线  
  23. always @(posedge I_pixel_clk) begin  
  24.     r_control_data <= I_control_data;  // 对输入控制字符进行时钟同步  
  25. end  
  26. // 垂直同步生成逻辑(符合HDMI规范CTA-861标准)  
  27. always @(posedge I_pixel_clk or negedge I_reset_n) begin  
  28.     if (!I_reset_n)   
  29.         O_vsync<= 'b0;  // 复位时同步信号置零  
  30.     // 检测VSYNC控制字符:0x2AA(0b0010101010)或0x355(0b1101010101)  
  31.     // 或保护带控制码10(VS)和11(VS+HS)  
  32.     else if((r_control_data == 10'b0010101010)||(r_control_data == 10'b1101010101)||(r_guardband_control == 2'b10) ||(r_guardband_control == 2'b11))  
  33.         O_vsync<= 'b1;  // 有效垂直同步信号  
  34.     else   
  35.         O_vsync<= 'b0;  // 非同步周期  
  36. end  
  37. // 水平同步生成逻辑  
  38. always @(posedge I_pixel_clk or negedge I_reset_n) begin  
  39.     if (!I_reset_n)   
  40.         O_hsync<= 'b0;  // 复位初始化  
  41.     // 检测HSYNC控制字符:0x354(0b1101010100)或0x355(0b1101010101)  
  42.     // 或保护带控制码01(HS)和11(HS+VS)  
  43.     else if((r_control_data == 10'b1101010100)||(r_control_data == 10'b1101010101)||(r_guardband_control == 2'b01)||(r_guardband_control == 2'b11))  
  44.         O_hsync<= 'b1;  // 有效水平同步信号  
  45.     else   
  46.         O_hsync<= 'b0;  // 非同步周期  
  47. end  
  48. // 保护带控制码解码器(数据岛期间有效)  
  49. // 根据HDMI规范第6.3节保护带控制字符定义  
  50. always @(posedge I_pixel_clk) begin  
  51.     if (I_island_guardband) begin  // 仅在数据岛/保护带周期处理  
  52.         case (I_control_data)      // 解码特定保护带控制字符  
  53.             // 保护带控制字符定义:  
  54.             10'b0111000101 : r_guardband_control <= 2'b00;  // 数据C(正常视频周期)  
  55.             10'b1000111001 : r_guardband_control <= 2'b01;  // 数据D(水平保护带)  
  56.             10'b1100011010 : r_guardband_control <= 2'b10;  // 数据E(垂直保护带)  
  57.             10'b1100001101 : r_guardband_control <= 2'b11;  // 数据F(复合保护带)  
  58.             default: r_guardband_control <= 2'b00;         // 非法字符处理  
  59.         endcase  
  60.     end else begin  
  61.         r_guardband_control <= 2'b0;  // 非数据岛周期清零控制码  
  62.     end  
  63. end  
  64. endmodule
复制代码
3代码仿真

根据代码仿真结果,O_hsync信号解析为0是由于时序设计中已将HSYNC信号完整嵌入island_data区间,其同步功能主要由BCH模块实现,当前模块保留该信号处理逻辑仅出于系统兼容性考量。

本模块的核心功能聚焦于VSYNC信号的解析与校准,因垂直同步信号周期较长,单周期信号必然跨越多个island_data区间,需通过本模块的多周期数据拼接及相位补偿机制实现跨区同步,确保时序基准的精确重构。

由于VSYNC信号仿真时间过长,就不特意截图展示,感兴趣的用户可以用在线逻辑分析仪抓取。

640?wx_fmt=png&from=appmsg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

303

主题
精彩推荐
热门资讯
网友晒图
图文推荐

  • 微信公众平台

  • 扫描访问手机版