在目前的DVB-C广播电视系统的传输接口中,有两种MPEG-2视频传输接口标准:异步串行接口标准 ASI和同步并行接口SPI。SPI一共有11位有用信号,每位信号差分成两个信号用来提高传输抗干扰性,在物理链接上用DB25传输,因此连线多且复杂,传输距离短,容易出现故障。但SPI是并行11位信号,处理简单且扩展性强,因此目前一般的MPEG-2视频编码器的输出和视频解码器的输入都是标准的并行11位信号。ASI用串行传输,只需一根同轴电缆线传输,连线简单,传输距离长。根据SPI和ASI的优缺点,需要传输信号的SPI和ASI的互相转换。
1 SPI信号结构
并行传输系统SPI包括一位时钟信号、8位数据信号、一位帧同步信号PSYNC和一位数据有效信号DVALID。帧同步信号对应TS包的同步字节047H,DVALID信号用来区分TS包的长度为188个字节或204个字节。当TS包长为188字节时,DVALID信号一直为高,同时所有信号都与时钟信号保持同步。SPI数据格式如图所示。
2 ASI接口
ASI传输流可以有不同数据速率,但传输速率恒定,为270Mbps,因此ASI可以发送和接收不同速率的MPEG-2数据。ASI传输系统为分层结构。最高层、第2层使用MPEG-2标准ISO/IEC 13818-(Systems),第0层和第1层是基于ISO/IEO CD 14165-1的FC纤维信道。FC支持多种物理传输媒介,本方案选用同轴电缆传输,图2是基于同轴电缆的ASI传输系统框图。
图2 基于同轴电缆的ASI传输系统框图
首先将包同步的MPEG-2传送包的8-bit码字转换成10-bit码字;接着在并/串转换时,当要求输入一个新字、而数据源还没有准备好时,应插入一个K28.5的同步字,以达到ASI的固定270Mbps传输速率。所形成的串行比特流将通过缓冲/驱动电路和耦合网络,送到同轴电缆连接器上。插入同步码字可以有三种方法:传输码流的单个字节前后不能都是同步字;传输码流的单个字节前后必须都是同步字;或者是两者的组合。
到达同轴电缆的接收数据,首先要经过连接器和耦合网络耦合到恢复时钟和数据的电路上,然后进行串/并变换;为了恢复字节同步,ASI解码器必须先搜寻到K28.5同步字,一旦搜索到该同步字,即为随后接收的数据标定了边界,从而建立了解码器输出字节的正确字节排列;最后进行10/8-bit变换,恢复出包同步的MPEG-2 TS码流数据。但是K28.5同步字不是有效数据,因此解码时必须删除。
3 ASI接口实现方案
在本方案中,MPEG-2 TS码流由单片MPEG-2编码器MB86390提供,它输出符合SPI标准的并行11位信号,TS包长度为188个字节。在SPI/ASI转换方案中,主要选用CYPRESS公司cyb923/cyb933芯片、异步FIFO和逻辑编程器CPLD实现。
cyb923主要实现码字的8/10bit转换、插入同步字K28.5和并/串变换。ASI的传输速率恒定为270MHz,而输入MPEG-2 TS码率是不同的,所以要用FIFO实现速率匹配,需要对输入的SPI数据、FIFO和cyb923之间的通信进行逻辑控制。综合性能、价格和程序复杂度的考虑,本方案采用xilinx公司的CPLD逻辑编程器XC95108;用VHDL编程实现对它们的逻辑控制。ASI的解码也是相似的过程,cyb933主要实现10/8bit转换、去除同步字K28.5和串并变换。
3.1 ASI编码
在ASI的编码过程中,只需将MPEG-2 TS的八位数据和一位TS码率传输时钟输入到CPLD。因为在本方案中,TS格式为188个字节,因此数据有效信号DVALID一直为高,CPLD忽略这个信号,只管接收TS码流数据,而不用关心TS码流的同步头。PSYNC帧同步信号也一样忽略。CPLD将接收到的数据以TS码率时钟写入FIFO。当FIFO半满时,CPLD接收到FIFO的半满信号,然后CPLD给cyb923发FIFO可读信号,cyb923以27Mbps读取FIFO中的数据;当CPLD计数到cyb923读取了一定数量的FIFO数据,CPLD则向cyb923发送FIFO不可读信号,防止FIFO读空。MPEG-2传输码率的并行最大速度为27/8=3.375Mbps,而读FIFO速率为27Mbps,因此FIFO不会有溢出。考虑到延时,本方案选用较小容量的FIFO7202。cyb923在FIFO不可读时,向ASI码流中填充K28.5以维持270Mbps的固定传输速率。最后串行数据经过驱动就可用同轴电缆传送出去。本方案中,同步字K28.5的插入采用传输码流的单个字节前后不能都是K28.5同步字的方式。这种方案相对其它两种方案来说,判断和处理都相对简单。
3.2 ASI解码
在ASI的接收端,输入的ASI码流经过均衡后,输入到cyb933芯片。它由内部的时钟锁相环首先锁定ASI码流时钟,检测同步字K28.5;找到后即确定了ASI比特流顺序,然后进行串/并转换。
由此可知,检测到K28.5,即字节对齐是ASI解码的重要前提,由此cyb933定义了一套检测字节同步的方法。考虑到传输误码等原因可能造成假K28.5,因此cyb933采用双字节确认方法。即连续两个字节都是K28.5,才确认字节同步了,接着进入正常的单字节解码状态。在解码状态,如果在64个解码字节中,CPLD计数到有16个字节是错误的,则CPLD必须向cyb933发送信息,要求cyb933重新进行字节同步。
字节同步后,因为K28.5是cyb923插入的同步字节,不能作为有效数据输出,cyb933自动略除这些同步字节。当cyb933检测到有效数据时,cyb933将输出一位当前数据有效的指示,如果把这个信号当作FIFO的写有效,则FIFO中的数据一定都是有效数据了。当FIFO半满时,CPLD接收FIFO的半满信号后,CPLD读取FIFO中的数据,并根据读出的字节是否是047H来确定TS包的同步字节;如果找到TS包同步字,将恢复对应的帧同步信号,此时CPLD计数188恢复出完整的TS包,接下来的字节如果不是047H,说明输入数据有误,CPLD将丢弃这些数据直到找到047H同步字,在此期间CPLD输出TS空包。重新包同步后,CPLD才又开始计数输出正确的188字节的MPEG-2 TS包,从而恢复出SPI正确的11位信号。同样,当FIFO数据不可读时,CPLD也输出TS空包,以维持输出的MPEG-2码率恒定。
在SPI转ASI的设计中,直接对SPI数据进行ASI编码,而不考虑误码问题。主要考虑SPI数据直接从MB390输出,没有经过远距离传输,因而降低了ASI编码逻辑控制的复杂度。在ASI解码过程中,ASI数据经过远距离传输,要考虑误码的因素,所以增加了字节和包的重同步设计,以增加抗干扰能力。本方案在实际应用中很好地实现了SPI/ASI的相互转换。