用FPGA收发器(SERDES)编解码HDMI

简介

HDMI标准在今天变得非常流行;我们可以看到,几乎所有新用户的高清设备都内置了这种接口。本文介绍了如何采用FPGA的SERDES及VHDL模块,建立在不同HDMI分辨率(480p、720p、1080p、1080i)之间自动切换的HDMI编解码器。还将涉PCS写入模块,通过SCI总线写入PCS寄存器,以更改SERDES参数。

用FPGA收发器(SERDES)编解码HDMI_第1张图片

 

本文将详细介绍以下主题:

  • 电气考虑
  • 使用什么PCS逻辑
  • 软双字节对齐逻辑
  • 在分辨率和 PCS 寄存器设置之间切换
  • 使用 SCI 总线针对不同的数据传输速率调整 CDR 和 TxPLL
  • 通电和正确的复位顺序

电气兼容性

 按以下三个主要部分进行兼容性检查:

  • 电气兼容性
  • Tx 和 Rx 的眼图兼容性
  • 用于 Tx 和 Rx 的引脚阻抗

用FPGA收发器(SERDES)编解码HDMI_第2张图片

 

结论是,从电气角度来看,ECP2M系列可以实现这样的标准,但需要外部元件来调节部分电压电平,并保证100%的兼容性。

硬件设计

用FPGA收发器(SERDES)编解码HDMI_第3张图片

SERDES 至 HDMI 连接器

FPGA的输入首先通过均衡器(参见系统框图),其输出为CML。这与 FPGA SERDES 输入信令兼容。对于 SERDES 输出,建议使用 下面图 2中描述的解耦。

用FPGA收发器(SERDES)编解码HDMI_第4张图片

HDMI帧格式

用FPGA收发器(SERDES)编解码HDMI_第5张图片 接收方使用数据流中的控制周期与传入的数据同步。 在控制期间有序言。紧接每个视频数据周期或数据包。这是一个由八个相同的控制字符组成的序列,用于指示即将到来的数据周期是视频数据周期还是数据包。"视频数据周期"类型指示以下数据周期包含视频数据,从视频同步码开始。

 每个通道的主要同步码是:

  • 通道 0: q_输出[9:0] = "1011001100";
  • 通道 1: q_输出[9:0] = "0100110011";
  • 通道 2: q_输出[9:0] = "1011001100";

同步字符是:

  • 字符 #1 ="0010101011"
  • 字符 #2 ="1010101011"
  • 字符 #3 ="1101010100"
  • 字符 #4 ="0101010100"

有关更多详细信息,请参阅 HDMI 规范

 节对齐逻辑

从 PCS 到 FPGA 的接口是 10 位总线。此时,当我们收到此数据时,我们不会在数据字节(10位)开始和结束的位置进行切换。为了执行对齐,采用第一个和第二个10位来形成一个20位总线,将其分解为九个10位总线,并与对齐字符进行比较。仅当字符在行中出现 8 次时,才会同步。

用FPGA收发器(SERDES)编解码HDMI_第6张图片

  

我们为下面表示的每个 10 位实现了此状态机。4 位计数器与状态机一起使用以执行该功能。当字节对齐时,将启动写使能以在FIFO中写入时间。

SCI 总线配置

HDMI串行数据与相关时钟一起传输,该时钟是数据速率的1/10。当 ECP2M SERDES 设置为 10x 模式时,除了 270Mbps 的低分辨率外,这适用于 ECP2M SERDES。事实上  ,为了支持这一标准,SERDES必须处于半模式,参考时钟为54 Mhz。来自HDMI发射器的时钟将是27Mhz,为了将SERDES用于此分辨率,我们必须将参考时钟乘以2并将其馈送到PCS并将其设置为半模式。以下步骤将描述如何通过 SCI 总线从 PCS 写入或读取。

用FPGA收发器(SERDES)编解码HDMI_第7张图片

 SCI 总线是可用于访问整个 PCS 配置寄存器的虚拟总线接口。

多分辨率设置

用FPGA收发器(SERDES)编解码HDMI_第8张图片

720p的数据速率为742.5Mbps,参考时钟为74.25。参考时钟通过HDMI电缆从源发送到目标。在分辨率之间切换时,需要对接收和发送PLL进行调整以保证锁定。PLL (CDR) 有五种不同的设置,定义如下:

  • 低 :      数据速率≤ 500 Mbps,
  • 低: 500 Mbps < 数据速率≤ 1.0 Gbps,
  • Med:           1.0 Gbps < 数据速率< 2.0 Gbps,
  •   MedHigh2.0 Gbps ≤数据速率< 2.5 Gbps,
  • 高            2.5 Gbps ≤ 数据速率≤ 3.2 Gbps

 PCS 正确的复位顺序

每次更改分辨率后,都需要丢失锁定或丢失锁定,然后重置PCS的顺序。TN1124的建议是不够的。我在下面列出了这些建议,并用我在客户设计中实现的内容(斜体)来补充它们。请参阅TN1124第8-64页,启动SERDES操作的正确程序如下:

1. 确保正确完成设备配置。

2.配置完成后,通过产生最小宽度为20ns的ffc_quad_rst脉冲来重置SERDES和PCS。此脉冲必须至少持续 1 ms

3. 等待SERDES达到正常运行状态。也就是说,等到信号处于以下状态:ffs_plol=0 且 ffs_rlol[3:0]=4'h0,这些状态信号指示 TXPLL 和 CDRPLL 均已锁定。 在发出重置之前,请等待 3000

4. 通过生成tx_lane_rst  和rx_lane_rst来重置 tx 和 rx PCS 逻辑。如果用户不监视ffs_tx/rxfbfifo_error状态信号,则可以跳过此步骤。步骤 3 完成后,SERDES/PCS 即可发送和接收数据。

你可能感兴趣的:(视觉算法,fpga开发,图像处理,视频编解码)