MPEG-2復(fù)用器PSI信息分析部分的FPGA實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
復(fù)用器是數(shù)字電視前端平臺(tái)的關(guān)鍵設(shè)備,它的主要功能是完成對(duì)輸入多路傳輸流(Transport Stream,TS)的復(fù)用工作,它的性能穩(wěn)定性直接影響前端平臺(tái)的運(yùn)行。而復(fù)用器對(duì)傳輸流中節(jié)目特殊信息(Program Spe-cial Information,PSI)的分析處理是否完整全面,則直接影響到復(fù)用器其他功能部分的運(yùn)行結(jié)果是否正確。對(duì)PSI信息的檢測(cè)分析是復(fù)用器設(shè)計(jì)中首要的也是最重要的部分之一。下文將對(duì)PSI信息檢測(cè)問(wèn)題進(jìn)行深入的分析探討。
1 TS流語(yǔ)法結(jié)構(gòu)
傳輸流以TS包為單位,其中每個(gè)包的長(zhǎng)度為188 B,這188個(gè)字節(jié)大致可以分為:包頭、調(diào)整字段和有效負(fù)載三個(gè)主要部分。包頭占4個(gè)字節(jié),如圖1所示。
同步字節(jié):8 b,值為0x47,表示一個(gè)TS包的開始。傳輸錯(cuò)誤指示:1b,當(dāng)置為1時(shí),表明在相關(guān)的TS包中至少有一個(gè)不可糾正的錯(cuò)誤。有效負(fù)載起始指示:1 b,在帶有PSI信息時(shí),置1表示TS包含有PSI部分的第一個(gè)字節(jié)并帶有pointer field字段,否則表示不含有PSI的第一個(gè)字節(jié)。傳輸優(yōu)先級(jí):1 b,置1表明相關(guān)的包比其他具有相同PID但此位沒(méi)有置1的TS包有更高的優(yōu)先級(jí)。PID:13 b字段,指示傳輸流有效負(fù)載的數(shù)據(jù)類型。傳輸加擾控制:2b,用來(lái)指示TS包有效負(fù)載的加擾方式。自適應(yīng)字段控制:2b,用來(lái)指示本TS包首部是否跟有調(diào)整字段。連續(xù)計(jì)數(shù)器:4b,隨著每一個(gè)具有相同PID的傳輸流包而增加,當(dāng)它達(dá)到最大值后又恢復(fù)到0。
節(jié)目專用信息PSI用來(lái)描述TS流的組成結(jié)構(gòu)。它包括節(jié)目關(guān)聯(lián)表(Program Association Table,PAT)、節(jié)目映射表(Program Map Table,PMT)、網(wǎng)絡(luò)信息表(Network Information Table,NIT)和條件訪問(wèn)表(Conditional Access Table,CAT)。PAT是PSI信息的最上層,列出了傳輸流中所有節(jié)目所對(duì)應(yīng)的PMT的PID值,可以根據(jù)節(jié)目的PID值找到相應(yīng)的PMT信息及NIT信息。節(jié)目映射表PMT提供節(jié)目號(hào)碼與組成它們的原始流之間的映射關(guān)系,這種映射表是一個(gè)TS流中所有節(jié)目定義的集合。網(wǎng)絡(luò)信息表NIT是可選的,其內(nèi)容是私有的,通常包括用戶選擇的服務(wù)和通道頻率、衛(wèi)星脈沖發(fā)射機(jī)、調(diào)制特性等的映射。條件接收表CAT提供條件接收(CA)系統(tǒng)的相關(guān)信息,指定EMM的PID值及相關(guān)的參數(shù)。
2 PSI信息提取分析
由于PSI信息四個(gè)表結(jié)構(gòu)差別不大,所以提取算法也大致相似,在此主要以PAT表為例詳細(xì)介紹J"SI信息的提取流程。對(duì)TS流的分析在FPGA內(nèi)部以字節(jié)為單位。PAT語(yǔ)法結(jié)構(gòu)如圖2所示。
PAT的提取流程:
(1)首先應(yīng)在傳輸流中找到包首PID 13位全為0且有效負(fù)載起始指示位為l的TS包。
(2)然后根據(jù)自適應(yīng)字段控制位判斷是否含有調(diào)整字段,再結(jié)合pointer_field字段值找到table_id,從此字段開始到CRC校驗(yàn)字節(jié)之前,將對(duì)所有有效數(shù)據(jù)進(jìn)行CRC校驗(yàn)。
(3)接下來(lái)是section_length字段,由此字段可以得到該P(yáng)AT分段的TS包個(gè)數(shù)。[!--empirenews.page--]
(4)接下來(lái)兩字節(jié)是傳輸流標(biāo)識(shí)字段,再接下來(lái)的一個(gè)字節(jié)包含著版本號(hào)信息及當(dāng)前段是否可用信息。保留當(dāng)前版本號(hào)并與下一次的版本號(hào)對(duì)比以確定版本是否有更新。若當(dāng)前段可用,則繼續(xù),否則返回(1)。
(5)接下來(lái)的兩個(gè)字節(jié)分別是當(dāng)前分段號(hào)和最后分段號(hào),由此信息可以得知是否提取了所有分段的信息,即對(duì)整個(gè)PAT表是否進(jìn)行了一次完整的分析。
(6)對(duì)循環(huán)字段的處理,每4字節(jié)一次循環(huán),由前兩字節(jié)的節(jié)目號(hào)可以得知后2字節(jié)的PID是PMTPID還是NIT—PID。在循環(huán)字段結(jié)束后立即停止CRC校驗(yàn)并把校驗(yàn)的結(jié)果和碼流中的CRC四字節(jié)進(jìn)行比較從而得知傳輸是否有誤。
(7)在TS包結(jié)尾處判斷當(dāng)前PAT分段是否結(jié)束,否則繼續(xù)檢測(cè)下一TS包,是則進(jìn)一步判斷是否分析了所有分段,若已經(jīng)分析了所有分段則給出一個(gè)表示PAT分析全部結(jié)束的信號(hào),否則轉(zhuǎn)到(1)繼續(xù)分析下一分段。
3 信息提取的硬件實(shí)現(xiàn)
信息提取框圖如圖3所示。
一路TS流首先經(jīng)過(guò)芯片CY78933進(jìn)行串并轉(zhuǎn)換再進(jìn)入同步模塊進(jìn)行同步鎖定后,其他各模塊才開始工作。由圖3可看出,以上各檢測(cè)模塊是并行獨(dú)立工作的,但是PMT檢測(cè)模塊、ELE檢測(cè)模塊、NIT檢測(cè)模塊和EMM檢測(cè)模塊要想進(jìn)行有效工作,需要先接受其他模塊提供的信息,具體為PMT和N1T檢測(cè)模塊要接受PAT檢測(cè)模塊提供的PID信息,ELE檢測(cè)模塊要接受PMT檢測(cè)模塊提供的PID信息,EMM檢測(cè)模塊要接受CAT檢測(cè)模塊提供的PID信息。
3.1 信息提取同步模塊
根據(jù)MPEG一2標(biāo)準(zhǔn)可知,一個(gè)有效的TS包長(zhǎng)為188 B,且其同步頭為8′h47,只有在有效地識(shí)別了包頭,才能嚴(yán)格地按照MPEG一2標(biāo)準(zhǔn)對(duì)數(shù)據(jù)包的每一位進(jìn)行分析。在同步模塊檢測(cè)中,當(dāng)找到8′h47時(shí),必須連續(xù)3~5次(可通過(guò)參數(shù)設(shè)置)隔188 B都找到8′h47,才能認(rèn)為實(shí)現(xiàn)了同步。另外考慮到TS包可附加16 B的前向糾錯(cuò)碼,故該模塊做成188/204 B自適應(yīng),這樣可以提高通用性。
3.2 檢測(cè)模塊
由于PAT,CAT,PMT,NIT等檢測(cè)模塊在硬件設(shè)計(jì)上都很類似,故本文重點(diǎn)探討PAT檢測(cè)模塊的硬件設(shè)計(jì),其他檢測(cè)模塊的設(shè)計(jì)將不再贅述。
PAT檢測(cè)模塊按照PAT提取流程進(jìn)行工作,若發(fā)現(xiàn)PAT分段并且CRC校驗(yàn)正確后,提取里面的PMT—PID和NIT-PID并分別送到PMT檢測(cè)模塊和NIT檢測(cè)模塊。對(duì)PAT表全部分段都分析完后啟動(dòng)PMT、檢測(cè)模塊和NIT檢測(cè)模塊對(duì)TS流進(jìn)行實(shí)時(shí)檢測(cè),若PAT表有更新,則將新的信息再送給此兩模塊,以確保實(shí)時(shí)跟蹤TS流的最新變化。
在硬件實(shí)現(xiàn)上,從實(shí)用的角度出發(fā),考慮到實(shí)際碼流中可能出現(xiàn)的各種情況,將其歸為三類處理:
(1)一個(gè)分段只由一個(gè)TS包來(lái)承載。
(2)一個(gè)分段由多個(gè)TS包來(lái)承載。
對(duì)于此類情況(即該分段的長(zhǎng)度使得一個(gè)TS包無(wú)法完全承載此分段),要考慮的是第一個(gè)TS包在該分段的什么位置結(jié)束。又可以分為三種情況:
①第一個(gè)TS包結(jié)束在該分段的table_id字段到last_sectiOn_number字段這一區(qū)間。這也就是第一個(gè)TS包大部分為調(diào)整字段占據(jù)時(shí)的情況;
②第一個(gè)TS包結(jié)束在循環(huán)字段中的某個(gè)字節(jié)的情況;
③第一個(gè)TS包結(jié)束在四個(gè)CRC校驗(yàn)字節(jié)中的某個(gè)字節(jié)處,考慮到有三個(gè)以上TS包時(shí)更確切地說(shuō)應(yīng)該是最后一個(gè)TS包只承載了CRC校驗(yàn)字節(jié)的某幾個(gè)。
(3)一個(gè)TS包承載多個(gè)分段
此類情況是第(2)類中③情況的延伸。比如一個(gè)PAT表有兩個(gè)分段,第一個(gè)分段由第一個(gè)TS包承載后只剩下一個(gè)CRC校驗(yàn)字節(jié)需要第二個(gè)TS包來(lái)承載。那么第二個(gè)TS包只承載這一個(gè)CRC校驗(yàn)字節(jié)無(wú)疑將是很大的浪費(fèi),此時(shí)可以充分利用第二個(gè)TS包。使它也承載第二個(gè)分段,這就是一包多段的情況。對(duì)于一段單包、一段多包(包括三種情況)和一包多段等多種情況,在設(shè)計(jì)上無(wú)疑要充分發(fā)揮FPGA有限狀態(tài)機(jī)的強(qiáng)大優(yōu)勢(shì)來(lái)進(jìn)行處理。
將以上各種情況恰當(dāng)?shù)貙?duì)應(yīng)于狀態(tài)機(jī)的各個(gè)狀態(tài),根據(jù)包頭提供的信息及表段信息可以進(jìn)行邏輯判斷,從而控制各個(gè)狀態(tài)之間的轉(zhuǎn)移。在代碼實(shí)現(xiàn)上,邏輯判斷后控制信號(hào)的是否準(zhǔn)確及時(shí),至關(guān)重要。舉例來(lái)說(shuō),把對(duì)PAT表的CRC校驗(yàn)分析作為一個(gè)獨(dú)立模塊,在分析該表時(shí)就要給予該模塊準(zhǔn)確的控制,假如PAT有兩個(gè)TS包,在第一個(gè)TS包的table_id字段就要使能該模塊,第一個(gè)TS包結(jié)束時(shí)要禁止使能該模塊,到第二個(gè)PAT包第五個(gè)字節(jié)再使能CRC校驗(yàn)?zāi)K,直到CRC校驗(yàn)字節(jié)前再關(guān)閉該模塊,總之控制信號(hào)要確保CRC校驗(yàn)?zāi)K校驗(yàn)的是PSI表的所有有效信息。[!--empirenews.page--]
另外需要說(shuō)明的是PMT檢測(cè)模塊在實(shí)現(xiàn)上不需要考慮多個(gè)分段的情況,但有兩處描述子要進(jìn)行CA描述子的檢測(cè);NIT檢測(cè)模塊可以對(duì)指定描述子做檢測(cè),如衛(wèi)星傳送系統(tǒng)描述符等;ELE檢測(cè)模塊檢測(cè)elementary_PID、PCR PID和可能存在的ECM_PID,該模塊能正常工作說(shuō)明PMT檢測(cè)模塊正確工作;同理EMM檢測(cè)模塊能正常工作說(shuō)明CAT檢測(cè)模塊正確工作。
3. 3 資源的優(yōu)化
由圖3可見,PAT檢測(cè)和CAT檢測(cè)同為一個(gè)模塊。這也算是本文在硬件實(shí)現(xiàn)上的一個(gè)創(chuàng)新點(diǎn)。之所以如此,是因?yàn)楣P者在程序代碼的編寫上巧妙地將對(duì)CAT的檢測(cè)分析融入到對(duì)PAT的檢測(cè)分析中,而整合到一起的檢測(cè)模塊消耗的資源比原先PAT檢測(cè)模塊消耗的資源只增加一點(diǎn)點(diǎn),這就意味著幾乎沒(méi)有增加硬件資源消耗的情況下完成了對(duì)CAT的檢測(cè),從而大大節(jié)省了FPGA內(nèi)部寶貴的邏輯資源。
經(jīng)過(guò)仔細(xì)分析對(duì)照,筆者發(fā)現(xiàn)PAT表和CAT表有著驚人的相似性,這種相似性給編寫硬件語(yǔ)言帶來(lái)了極大的便利。PAT和CAT的差別主要在循環(huán)字段,其他字段位置字節(jié)數(shù)都能很好對(duì)應(yīng)。若把對(duì)兩個(gè)表的循環(huán)字段的處理分別獨(dú)立為兩個(gè)小模塊,則剩下的部分就可以很好地將對(duì)PAT和CAT的處理融合到一起,融合到一起的模塊只需要給這兩個(gè)小模塊恰當(dāng)?shù)目刂萍纯伞?/p>
4 實(shí)際測(cè)試
本設(shè)計(jì)采用硬件平臺(tái)DE2開發(fā)板,F(xiàn)PGA型號(hào)EP2C35F672C6N,接口芯片通過(guò)DE2板GPIO接口和FPGA相連。測(cè)試碼流有將衛(wèi)星信號(hào)轉(zhuǎn)換而得的實(shí)時(shí)碼流和人工制作的非實(shí)時(shí)碼流。對(duì)于A類情況,采用由亞洲三號(hào)衛(wèi)星頻點(diǎn)為4095H的信號(hào)轉(zhuǎn)換的實(shí)時(shí)碼流進(jìn)行測(cè)試,如圖4所示,從左向右:數(shù)碼管數(shù)值1和3分別表示有一套節(jié)目,該套節(jié)目里有3個(gè)PID,它們是13′h0021,13′h00A0,13′h0050;三個(gè)紅色LED燈亮表示發(fā)現(xiàn)PAT,PMT和基本音視頻包,兩個(gè)綠色LED燈亮表示接收同步及提取分析完P(guān)SI信息。DE2板顯示的節(jié)目數(shù)及PID值跟專業(yè)數(shù)字衛(wèi)星接收機(jī)顯示的結(jié)果一樣,表明PSI信息檢測(cè)正確。對(duì)于其他各種可能的情況,由于在實(shí)際碼流中很少見,所以采用人工構(gòu)造符合標(biāo)準(zhǔn)的碼流進(jìn)行驗(yàn)證,發(fā)現(xiàn)結(jié)果也是正確的。
5 結(jié) 語(yǔ)
隨著將來(lái)復(fù)用器應(yīng)用范圍的擴(kuò)展,數(shù)據(jù)業(yè)務(wù)量的加大,實(shí)際碼流中會(huì)出現(xiàn)一段多包或一包多段的情況,本文針對(duì)實(shí)際碼流中可能出現(xiàn)的各種情況進(jìn)行實(shí)用性的設(shè)計(jì),完全能保證復(fù)用器在無(wú)論業(yè)務(wù)量多大的場(chǎng)合都能進(jìn)行完整全面的PSI信息檢測(cè),具有很強(qiáng)的現(xiàn)實(shí)意義。