3 信息提取的硬件实现
信息提取框图如图3所示。
一路TS流首先经过芯片CY78933进行串并转换再进入同步模块进行同步锁定后,其他各模块才开始工作。由图3可看出,以上各检测模块是并行独立工作的,但是PMT检测模块、ELE检测模块、NIT检测模块和EMM检测模块要想进行有效工作,需要先接受其他模块提供的信息,具体为PMT和N1T检测模块要接受PAT检测模块提供的PID信息,ELE检测模块要接受PMT检测模块提供的PID信息,EMM检测模块要接受CAT检测模块提供的PID信息。
3.1 信息提取同步模块
根据MPEG一2标准可知,一个有效的TS包长为188 B,且其同步头为8′h47,只有在有效地识别了包头,才能严格地按照MPEG一2标准对数据包的每一位进行分析。在同步模块检测中,当找到8′h47时,必须连续3~5次(可通过参数设置)隔188 B都找到8′h47,才能认为实现了同步。另外考虑到TS包可附加16 B的前向纠错码,故该模块做成188/204 B自适应,这样可以提高通用性。
3.2 检测模块
由于PAT,CAT,PMT,NIT等检测模块在硬件设计上都很类似,故本文重点探讨PAT检测模块的硬件设计,其他检测模块的设计将不再赘述。
PAT检测模块按照PAT提取流程进行工作,若发现PAT分段并且CRC校验正确后,提取里面的PMT—PID和NIT-PID并分别送到PMT检测模块和NIT检测模块。对PAT表全部分段都分析完后启动PMT、检测模块和NIT检测模块对TS流进行实时检测,若PAT表有更新,则将新的信息再送给此两模块,以确保实时跟踪TS流的最新变化。
在硬件实现上,从实用的角度出发,考虑到实际码流中可能出现的各种情况,将其归为三类处理:
(1)一个分段只由一个TS包来承载。
(2)一个分段由多个TS包来承载。
对于此类情况(即该分段的长度使得一个TS包无法完全承载此分段),要考虑的是第一个TS包在该分段的什么位置结束。又可以分为三种情况:
①第一个TS包结束在该分段的table_id字段到last_sectiOn_number字段这一区间。这也就是第一个TS包大部分为调整字段占据时的情况;
②第一个TS包结束在循环字段中的某个字节的情况;
③第一个TS包结束在四个CRC校验字节中的某个字节处,考虑到有三个以上TS包时更确切地说应该是最后一个TS包只承载了CRC校验字节的某几个。
(3)一个TS包承载多个分段
此类情况是第(2)类中③情况的延伸。比如一个PAT表有两个分段,第一个分段由第一个TS包承载后只剩下一个CRC校验字节需要第二个TS包来承载。那么第二个TS包只承载这一个CRC校验字节无疑将是很大的浪费,此时可以充分利用第二个TS包。使它也承载第二个分段,这就是一包多段的情况。对于一段单包、一段多包(包括三种情况)和一包多段等多种情况,在设计上无疑要充分发挥FPGA有限状态机的强大优势来进行处理。
将以上各种情况恰当地对应于状态机的各个状态,根据包头提供的信息及表段信息可以进行逻辑判断,从而控制各个状态之间的转移。在代码实现上,逻辑判断后控制信号的是否准确及时,至关重要。举例来说,把对PAT表的CRC校验分析作为一个独立模块,在分析该表时就要给予该模块准确的控制,假如PAT有两个TS包,在第一个TS包的table_id字段就要使能该模块,第一个TS包结束时要禁止使能该模块,到第二个PAT包第五个字节再使能CRC校验模块,直到CRC校验字节前再关闭该模块,总之控制信号要确保CRC校验模块校验的是PSI表的所有有效信息。