从前面的部分可知,解复用器需要承担将数据分流的工作,所以数据处理量相当大,很多解复用器都采用DSP或者专用ASIC进行处理。本文中,有别与以往的结构,利用EPXA10的片上ARM处理器,以及片上内嵌的SDRAM控制器和DMA控制器的特性,来实现对MPEG-2的传输流进行解复用,同时由硬件完成对PID包过滤的任务。所有的数据分解过程都由系统软件来完成,因此在数据处理方面更加灵活,保证了系统对于MPEG-2传输流解码的灵活性,同时避免了语法上的不兼容。
系统硬件由PID过滤、片上缓存及DMA等构成;系统软件部分由ARM实现。片外SDRAM用来存放数据。音/视频解码模块使用硬件实现,在本文中不涉及到相关内容。
系统硬件的功能是:当外部的8位传输流数据输入到FPGA上时,根据传输流包头进行同步,并将同步好的数据送入到PID过滤器。如果在传输过程中有错误,也就是包头中有sequence-error-code=1,就丢弃这个包;如果没有,则检查PID码表的数据,如果在码表中有这个PID值,那么就将这个传输流的包送入到FPGA的片上缓存中;否则就丢弃这个包。PID过滤器工作完成后,数据送入FPGA片上缓存部分,为了加快数据处理速度,使用DMA将缓存中的数据传输到片上SDRAM对应的传输流缓冲区。
如果片外SDRAM的传输流缓存中有未处理的包,则取出该包,判断PID的值。如果PID=0,表示当前的包是PAT,那么就对该包进行解析,根据选定的节目号,确定需要解码的PMT包的PID,再更新FPGA上PID码表中PMT的PID,并将PMT的状态位设定为需要解码。
如果PID等于PID码表中PMT包的PID,则判断PMT的状态位。如果不需要解码,就丢弃这个包;如果需要解码,则进入PMT包解析子程序,提取出该解码对应的音、视频传输流包的PID,将提取出的音、视频传输流包的PID值对FPGA片上的PID码表进行更新。
如果PID等于PID码表中的音、视频PID值,那么就进入到音/视频处理程序,对音、视频的传输流包进行解包,将解得的PES包的内容(就是实际的音、视频流)通过DMA发送到片外SDRAM的音/视频缓冲区中,供下一级的音/视频解码器完成解码功能,最终完成MPEG-2码流的解码过程。
结语
本文使用了ALTEra公司的一款具有ARM硬核的FPGA器件EPXA10,提出了一种基于ARM微处理器的对MPEG-2的传输流进行解复用的解复用器设计方案。根据传输流的特点,使用硬件实现了数据量操作比较大的PID包过滤、DMA传输等任务,并利用ARM处理器完成较为复杂的PAT、PMT包的解包工作,同时也将音、视频包解包,并将解出的音、视频发送到片外SDRAM上的音/视频缓冲区中。
最终设计的解复用器能对码率最高为19 Mbps的传输流进行解复用,对系统层的数据和其他辅助数据进行解码。解复用得出的视频流和音频流可供下一级的音/视频模块进行实时解码。