0
点赞
收藏
分享

微信扫一扫

采用FPGA进行SDI输入输出时钟同步设计

模块综述


    目前SDI传输系统的视频传输都需要进行时钟恢复和去抖,导致每一级都耗费了较大的成本,而且不利于板卡的布局布线。因此该设计的优点在于每一级传输不需要si5324等芯片的费用,FPGA内部不同通道的数据也会同步到同一个主时钟上,节省了时钟资源。此外,该模块仍然遵循BT1120的数据协议。不足之处在于,在输出SDI端需要进行帧缓存,否则这种异步传输方式无法直接输出,需要重新生成标准SDI的BT1120格式才可。

  如图所示为顶层模块的模块关系图,数据流的工作过程如下描述。该模块分为两个独立的子模块,编码模块和解码模块。对于编码模块sdi_encoder,外部BT1120数据流首先进入sdi_resync进行时域转换,转换后的时钟(本地时钟)必须与原来基本同频,譬如源时钟为74.2500MHz(A时域),本地时钟为74.2499MHz(B时域),基本需要保持在200ppm以内的误差。同步完成之后进入sdi_nrzi_encoder进行非归零反转码的编码。编码完成之后可由FPGA的serdes发送出去,当然发送参考时钟需要和编码后的时钟同源,即需要为本地时钟。
  若为解码,则将待解码数据先进入sdi_nrzi_decoder模块进行非归零反转码的解码,然后进入sdi_framer模块进行TRS数据字对齐,输出结果到sdi_resync模块再次同步到本地时钟。
从上述的描述来看,无论是在B时域的输出还是C时域的输出都不是标准的SDI格式BT1120数据流,即每一行的消隐区的长度会不一致。对于A时域和D时域的输入数据来说,不需要为标准的SDI格式BT1120,故该模块可以多级累加使用,但级数会有所限制,具体限制级数未测试,不确定,具体原因见下述。

模块接口


如图所示为顶层模块的接口,表是对接口的详细描述。

 

模块详细设计


    表1-1所示的3个绿色斜体字样的模块是来自XILINX公司的SDI编解码模块的源代码,在引入到本模块中时没有改动。所以该模块的设计主要是指sdi_resync这个同步模块的设计,因此下文描述的是该模块的详细设计。如图2-1所示为该模块的数据处理流程图。

在此设计中重点需要描述以下3点设计,状态机设计,特定字节位置的设计,另一个是不同时域之间的地址之差计算。

 状态机设计


状态机的设计比较简单,主要作用是为了判断帧格式,状态描述图如图2-2所示:

STD0~STD8代表了9种SDI的视频格式,分别为576I50Hz, 486I60Hz, 720P50Hz, 720P60Hz, 1080P24Hz, 1080P25Hz, 1080P30Hz, 1080I50Hz, 1080I60Hz。其中3G-SDI和HD-SDI的模式一致,可以服用状态机。当每一种状态机匹配后回到初始态,否则一直等到SAV的到来后跳转到下一个状态判断是否匹配新帧格式。

特定位置同步字节


    首先是特定字节位置,根据《非压缩视频及多业务数据传输协议》的描述,需要在特定字节进行增删操作,特定字节位置如图2-3所示:

 

同步原理图正如图中所述,而理论上的设计依据则是根据时钟之差来考虑,假设读时钟为74.2500MHz,而写时钟为74.2499MHz,这两个时钟的精度之差为100ppm。即表示在10000个时钟周期以后74.2499MHz的时钟会少一个周期,在HD-SDI视频信号中10000个周期在1080p@25Hz下3.78(10000/2640)行,在1080p@30Hz下为4.54(10000/2200)行。但仍然还需要注意一点,当该数据流被多级传输时,若连续这几集都需要删除字节,那么需要防止一行内被删除多个字节,因此代码中对这个还进行了判断,如图2-4所示。当发现该行在锁定视频格式下的行消隐区内已经少了一个字节,那么就不能进行删除字节操作,但仍然可以进行增加字节操作。

不同时域之间的地址差计算


    当需要对RAM读写两端的地址进行差值计算时涉及到了不同时域,因此不可直接用读时钟采样写地址,特别是同频不同源的时钟,否则采样到的地址极易出错。因此在设计这个时将RAM的地址分为了4段,即取了8位地址的高2位。一方面这2位跳变不会很频繁,容易被采样,另一方面则刚好可以区分读写地址间隔需要为1/4的RAM地址深度。但在高两位变换时仍然可能会出现采样错误,故需要对采样到的地址打三拍,当3拍数据均相同时表示不在跳变区,可以进行比较,仿真如图2-5所示。

 

如图2-6中所示的addr_diff_en信号即表示在此时是否进行读写地址的差值计算,以避免不同时域采集wr_addr[7:6]在跳变时出错。

资源利用

 

 

 

 

举报

相关推荐

0 条评论