云桂桂,楊秀芝
(福州大學,福建 福州350002)
責任編輯:薛 京
在數(shù)字化、信息化的21世紀,電視的數(shù)字化改革也進入全盛時期,數(shù)字電視系統(tǒng)的各個環(huán)節(jié)及功能模塊都是熱門研究的對象。本文研究的解復用主要完成碼流系統(tǒng)層的解析,從碼流中抽取出指定節(jié)目的音視頻流及ECM/EMM流[1-3]。它是后續(xù)解碼的基礎,并為解碼提供必要的參數(shù)和信息。因此,解復用是數(shù)字電視接收系統(tǒng)中至關重要的環(huán)節(jié)。
在目前主流的實現(xiàn)方案中,解復用有以下3種實現(xiàn)方式:
1)純硬件的設計,由FPGA等硬件電路來完成數(shù)字電視信號的分析與處理等。采用這種方案可以達到最快的處理速度,但靈活性較低,每次增加功能或更新標準都必須修改硬件電路。
2)純軟件的設計,由DSP、ARM等微處理器集成嵌入式操作系統(tǒng)。此方案具有最高的靈活性,但對于實時處理碼流顯得力不從心。
3)軟硬結(jié)合的SoC設計,用硬件來實現(xiàn)實時的信號處理。SoC內(nèi)部集成的微處理器來實現(xiàn)對硬件電路的控制及碼流的分析。既滿足實時的要求,又具有較高的靈活性。
基于以上3種方案的比較,本文采用軟硬結(jié)合的SoC設計。由FPGA實現(xiàn)硬件部分的功能模塊,根據(jù)Nios設定的參數(shù),對碼流進行過濾、匹配及提取,最后將濾出的數(shù)據(jù)送入對應的緩存中。NiosII軟核則作為系統(tǒng)的微處理器,用來實現(xiàn)軟件部分的設計。根據(jù)解復用要求設定過濾、匹配參數(shù),并對硬件濾出的數(shù)據(jù)進行分析,進而完成整個解復用過程。
硬件電路首先對輸入的ASI信號進行串并轉(zhuǎn)換,并檢測TS包的同步字節(jié)[4]。本設計中采用Altera公司提供的IP核來實現(xiàn)ASI的接收,在此不再詳細描述。然后根據(jù)Nios設定的TS過濾參數(shù)和分段匹配參數(shù),從碼流中過濾出所需的PSI/SI分段數(shù)據(jù)、音視頻的TS包及ECM/EMM的TS包,完成對傳輸流中節(jié)目的分離,過濾出用戶指定的某套節(jié)目相關的所有信息。所設計的硬件電路結(jié)構(gòu)如圖1所示。
采用參數(shù)匹配法實現(xiàn)TS包的過濾,當需要過濾不同的數(shù)據(jù)時,只需修改對應的過濾參數(shù),而不用修改過濾模塊的硬件電路。根據(jù)TS包的數(shù)據(jù)格式,TS包頭的PID值是TS包的標識,通過比對PID值便可識別所需的TS包。本設計中預設的TS包過濾參數(shù)如下:
1)pid_table_en:32位分別對應32個PID表項,用來指示PID表項中哪些PID有效,為“1”說明對應位置的PID值有效。
2)pid_table:32個16位的PID碼表,每個碼表對應一個PID通道。碼表中每個值的低3位指示具有該PID值的TS包類型,類型值如表1所示;高13位為設置的PID值。
根據(jù)表1描述的類型分別處理,其中PSI/SI信息經(jīng)過分段匹配及數(shù)據(jù)提取后,將有效分段數(shù)據(jù)送入PSI/SI緩存區(qū),其他TS包直接送入各自的緩存區(qū)。
3)pid_filter_en:32個32位寄存器,指示每個PID通道連接的分段過濾器。
TS過濾的實現(xiàn)過程如下:首先將當前TS包的PID字段與pid_table中的各個PID值進行匹配,若匹配成功,且pid_table_en中對應位置的值為“1”,說明當前TS包是所需要的包,否則丟棄。然后根據(jù)對應的pid_table的低3位判斷擁有該PID值的TS包類型,對各類型的數(shù)據(jù)進行分析處理。同時為下級模塊提供當前TS包的負載情況、加擾情況以及該PID值在碼表中的位置等信息。
根據(jù)預先配置的分段匹配參數(shù)對PSI/SI分段首部8個字節(jié)進行匹配,分段首部包含了充分的標識信息,因此可以取得很好的匹配效果[3]。分段匹配模塊的主要功能是由過濾深度為8 byte的過濾器完成的。每個過濾器有3組參數(shù):
1)sec_pattern:8個匹配字節(jié)數(shù)據(jù),作為匹配標準的數(shù)據(jù)。
2)sec_mask:8個8位匹配掩碼,1:表示該位需要匹配;0:表示不需匹配。根據(jù)TS碼流的語法規(guī)則,有些字段對識別分段沒有意義,有些字段包含了保留位。無意義的字段和保留位不需要匹配,可將對應的掩碼位置0。
3)sec_mode:8個8位匹配方式,1:表示不匹配模式;0:表示匹配模式。匹配模式是當待匹配字節(jié)與標準字節(jié)數(shù)據(jù)相同時,匹配成功。
過濾器以字節(jié)為單位,依次將分段首部的8個字節(jié)數(shù)據(jù)與匹配字節(jié)的標準數(shù)據(jù)進行比較,結(jié)合匹配掩碼和匹配方式,可以對PSI/SI表中任何一個表的任意一個分段進行匹配過濾。采用狀態(tài)機來實現(xiàn)該功能,過濾器首先處于初始等待狀態(tài),當分段首部字節(jié)有效時,進入匹配狀態(tài)。每個時鐘周期完成一個字節(jié)的匹配,若當前字節(jié)匹配成功,繼續(xù)處理下一個字節(jié),否則轉(zhuǎn)到失敗狀態(tài)直到當前的分段首部數(shù)據(jù)結(jié)束,返回等待狀態(tài)。只有8個字節(jié)全部匹配成功才輸出成功信號。狀態(tài)轉(zhuǎn)移如圖2所示。
圖2 過濾器的狀態(tài)轉(zhuǎn)移圖
分段匹配模塊則由32個上述的過濾器組成。每個通道可以連接多個過濾器,即每個通道的分段數(shù)據(jù)允許同時與多個目標分段進行匹配,只要通過其中一個過濾器即可。分段匹配模塊根據(jù)需匹配的分段數(shù)啟動其中一個或多個過濾器,每個過濾器匹配其中一個分段。最終的匹配結(jié)果是被啟動的過濾器輸出結(jié)果的“或”。其結(jié)構(gòu)如圖3所示。
圖3 分段匹配模塊結(jié)構(gòu)
PSI/SI數(shù)據(jù)提取首先要判斷當前TS包是否包含所需的PSI/SI分段數(shù)據(jù),包含兩種情況:一是匹配成功,還需判斷該分段是否已經(jīng)被收集過,如果沒被收集過則從FIFO中讀取TS包,否則丟棄;二是沒有匹配成功,那么還需進一步判斷,如果該包是PSI/SI分段有效數(shù)據(jù)的中間包并且攜帶該分段首部的TS包已被收集,則從FIFO中讀取該TS包。然后根據(jù)PSI/SI的語法結(jié)構(gòu),從讀取的TS包中提取出有效的PSI/SI負載數(shù)據(jù)。
利用SOPC builder工具可以參數(shù)化地定制NiosII處理器及其外圍接口[4-5],并為各個外設分配地址和中斷號建立自己的Nios系統(tǒng)。根據(jù)本設計的需求,定制了一個包括CPU、SDRAM、Flash、JTAG和TIMER的最小Nios系統(tǒng)。另外通過PIO內(nèi)核實現(xiàn)與FPGA內(nèi)部邏輯的聯(lián)系,實現(xiàn)參數(shù)的傳遞。
通過在Nios軟核處理器上集成uCOS嵌入式操作系統(tǒng)實現(xiàn)軟件部分的功能,一是對實現(xiàn)解復用所需參數(shù)的配置;二是對碼流PSI/SI信息的過濾分析。
在前面小節(jié)中各個模塊相關的參數(shù)已經(jīng)做了介紹。下面以某個PMT表的過濾來說明參數(shù)的具體設置,假設該PMT表的值存在PID碼表的第7個位置上。
pid_table_en:0x00000080//第7個位置上的PID值有效。
pid_table[7]:PMT_PID<<3|0x00//高13位是該PMT的PID值,低3位是000。
pid_filter_en[7]:0x00000003//啟動第0和第1個分段匹配器。
section_filter_mode[0][8]/section_filter_mode[1][8]//8個字節(jié)均為0x00,采用匹配模式。
section_filter_mask[0][8]/section_filter_mask[1][8]//第0、3、4、6個字節(jié)為0xff,其他為0x00。即只匹配table_id(0)、program_number(3,4)、section_number(6)字段。
section_filter_pattern[0][8]:0x02,0x00,0x00//節(jié)目號高8字節(jié),節(jié)目號低8字節(jié),0x00,0x00(分段0),0x00。
section_filter_pattern[1][8]:0x02,0x00,0x00//節(jié)目號高8字節(jié),節(jié)目號低8字節(jié),0x00,0x01(分段1),0x00。
根據(jù)數(shù)據(jù)過濾流程和特點,將PSI/SI信息的過濾分析分成3個子模塊:PSI/SI管理(PSI/SI_Manager)、PSI/SI分析(PSI/SI_Parser)、PSI/SI濾波(PSI/SI_filter)。
1)PSI/SI_Manager負責統(tǒng)籌調(diào)用過濾模塊或分析模塊來完成相應的功能。
2)PSI/SI_Filter負責對系統(tǒng)的PSI/SI濾波通道資源進行統(tǒng)一管理,記錄每個濾波通道的狀態(tài)和濾波參數(shù),完成對指定PSI/SI的過濾功能。
3)PSI/SI_Parser根據(jù)PSI/SI語法規(guī)則對過濾出來的各種PSI/SI表進行解析,并將解析的信息填充到對應的數(shù)據(jù)庫中,供其他模塊使用。
本設計中,作者添加了紅外遙控接口以便測試。用戶可以通過遙控來進行選擇操作。解復用工作過程如下:首先初始化完成后,用戶確認搜索,由Nios設定PAT過濾參數(shù),F(xiàn)PGA硬件模塊過濾出碼流中負載完整PAT表的分段,并將PAT分段數(shù)據(jù)分配到PSI/SI緩存區(qū)中,并在數(shù)據(jù)存儲完成后通知Nios。Nios對PAT表進行分析,提取碼流中的節(jié)目信息,并將PMT、CAT及SI表的分段信息置入過濾參數(shù)中,由硬件模塊過濾出碼流中所有的PMT、CAT和SI表的分段,分別分配到各自緩存區(qū)中。最后根據(jù)用戶的節(jié)目選擇情況,Nios分析該節(jié)目相關的PSI/SI,確定待解復用節(jié)目的全部PID值。將該套節(jié)目的音視頻和ECM/EMM的包信息置入過濾參數(shù)中,過濾出該節(jié)目的視音頻包和ECM/EMM包,如圖4所示。
圖4 解復用過程(截圖)
最后將解復用輸出的音視頻流、PCR信息及ECM/EMM流通過ASI接口發(fā)送,并接入到碼流分析儀進行分析和錄制。圖5顯示的是輸出的音視頻流的帶寬信息及播放效果。
輸出碼流中包含2路PID信息,分別是所選節(jié)目的音視頻PID。利用碼流分析儀將解復用出的音視頻流進行錄制,通過播放器可以播放出所選的節(jié)目畫面,說明系統(tǒng)正確地解復用出所選節(jié)目的音視頻流。
圖5 解復用輸出的音視頻流帶寬信息及播放效果
解復用是數(shù)字電視接收系統(tǒng)中很重要的一個環(huán)節(jié),是后續(xù)解碼的基礎。本文采用SoC架構(gòu)來實現(xiàn)TS流的解復用,利用FPGA實現(xiàn)碼流的過濾與匹配,可以很好地滿足實時性的要求。同時通過Nios嵌入uCOS操作系統(tǒng)實現(xiàn)參數(shù)的設定以及PSI/SI的分析,當需不同的數(shù)據(jù)或更新標準時,只需修改對應的參數(shù)及分析程序,而不必修改硬件電路,使系統(tǒng)達到較高的靈活性。
[1]高夫.DVB系統(tǒng)中解復用器的設計與實現(xiàn)[D].合肥:中國科學技術大學,2004.
[2]王兆慶.HDTV STB解復用技術的應用研究[J].現(xiàn)代電子技術,2010(7):186-188.
[3]陳國華.MPEG-2傳輸流解復用器的硬件實現(xiàn)[D].杭州:浙江大學,2007.
[4]云桂桂,楊秀芝,吳林煌.數(shù)字電視傳輸流中PSI信息的分析與錯誤檢測[J].電視技術,2011,35(6):82-84.
[5]Altera corp.Nios II Software Developer's Handbook[EB/OL].[2013-02-10].http://wenku.baidu.com/view/53b55fc1d5bbfd0a79567373.html.