用ADSP-2181和MC68302實(shí)現(xiàn)MPEG-2傳送復(fù)用器
摘要:在概述MPEG-2傳送流(TS)語法規(guī)范的基礎(chǔ)上,給出了用ADSP-2181 數(shù)字信號(hào)處理器和MC68302微控制器實(shí)現(xiàn)傳送復(fù)用器的設(shè)計(jì)方案和實(shí)現(xiàn)技術(shù)。該方法是在MC68302的控制下,用DSP查詢復(fù)用器各輸入FIFO的狀態(tài),根據(jù)各FIFO的狀態(tài)讀入數(shù)據(jù),完成音頻、視頻的均勻打包。
本文引用地址:http://2s4d.com/article/242399.htm關(guān)鍵詞:MPEG-2編碼傳輸系統(tǒng) 傳送復(fù)用器 TS流 打包
當(dāng)今世界正在向數(shù)字化方向發(fā)展,電視信號(hào)的數(shù)字編碼、數(shù)字化存儲(chǔ)、數(shù)字化傳輸、數(shù)字化處理在我們的現(xiàn)實(shí)世界中已經(jīng)變得越來越廣泛。電視系統(tǒng)的全面數(shù)字化給節(jié)目制作和傳輸都帶來了革命性的變化。隨著碼率壓縮技術(shù)的突破和MPEG標(biāo)準(zhǔn)的建立,從演播室到發(fā)射整個(gè)系統(tǒng)的各個(gè)方面正處于全面數(shù)字化的進(jìn)程中。MPEG-2編解碼傳輸系統(tǒng)是目前解決演播室節(jié)目制作和傳輸?shù)闹髁鳟a(chǎn)品。
MPEG-2編碼傳輸系統(tǒng)由音、視頻編碼器(包括音、視頻原始流的分組基本流打包)、傳輸流系統(tǒng)復(fù)用器、網(wǎng)絡(luò)適配器等組成,如圖1所示。
復(fù)用器是整個(gè)系統(tǒng)的關(guān)鍵設(shè)備之一,它接收前端多套節(jié)目編碼器來的視頻、音頻壓縮數(shù)據(jù)流,按照一定的復(fù)用策略將其交織復(fù)用成符合MPEG-2系統(tǒng)層規(guī)范的單一的系統(tǒng)碼流(傳輸流)。為實(shí)現(xiàn)一套節(jié)目音頻、視頻的解碼同步,在碼流中需插入各種時(shí)間標(biāo)記、系統(tǒng)控制等信息。最后送到網(wǎng)絡(luò)適配器或者信道調(diào)制設(shè)備,得到與傳輸信道相匹配的標(biāo)準(zhǔn)輸出碼流后,送往信道。復(fù)用器還提供整個(gè)編碼系統(tǒng)的系統(tǒng)時(shí)鐘。
本文復(fù)用器的設(shè)計(jì)是在MPEG-2音/視頻國際標(biāo)準(zhǔn)的第一部分ISO/IEC13818-1系統(tǒng)層語法規(guī)范的基礎(chǔ)上,采用ADSP-2181信號(hào)處理器芯片和MOTOROLA的微處理器MC68302實(shí)現(xiàn)的。
1 復(fù)用器的設(shè)計(jì)
1.1 ISO/IEC 13818-1傳送層語法結(jié)構(gòu)
復(fù)用器以MPEG-2系統(tǒng)規(guī)范為基礎(chǔ),對(duì)于地面廣播方式,復(fù)用器按傳輸流(TS)格式打包。TS包的長度固定為188字節(jié),傳送層采用固定字長數(shù)據(jù)包的優(yōu)點(diǎn)在于為以后新業(yè)務(wù)的創(chuàng)立提供了靈活性,新增的比特流可以直接在傳送層處理而無需增加硬件。數(shù)據(jù)包字頭信息中采用數(shù)據(jù)包標(biāo)識(shí)(PID)作為比特流的識(shí)別工具,因此可以將視頻、音頻和其它數(shù)據(jù)混合在一起。經(jīng)網(wǎng)絡(luò)適配器后,得到具有G.703標(biāo)準(zhǔn)的碼流,以便在類似SDH多路復(fù)用的環(huán)境中進(jìn)行數(shù)據(jù)的發(fā)送;同時(shí)也有利于抗信道誤碼和誤碼后的恢復(fù)。
傳送層的語法結(jié)構(gòu)如圖2所示。188字節(jié)長度的TS包由4字節(jié)的鏈接字頭、可變長字節(jié)的自適應(yīng)字頭以及有效數(shù)據(jù)負(fù)荷組成。每個(gè)TS包的字頭信息鑒別一種應(yīng)用比特流,它們構(gòu)成TS包的負(fù)荷,支持的應(yīng)用包括視頻、音頻、數(shù)據(jù)、節(jié)目流和系統(tǒng)控制信息等。
1.2 多路復(fù)用流語意的限制
(1)節(jié)目參考時(shí)鐘PCR的編碼頻率
打包時(shí),TS流的構(gòu)造應(yīng)使得含有每一節(jié)目的PCR-PID的TS流分組中連續(xù)出現(xiàn)program_clock_reference字段最后一位的字節(jié)間隔應(yīng)小于等于0.1s。
(2)顯示時(shí)間標(biāo)簽的編碼頻率
對(duì)每一個(gè)原始視頻或音頻流來說,傳送流的結(jié)構(gòu)應(yīng)使編碼的顯示時(shí)間標(biāo)簽的最大差值為0.7s,也就是
│tPnk-tPnk’’│≤0.7s
(3)在傳送流中,音頻采樣速率和系統(tǒng)目標(biāo)解碼器的系統(tǒng)時(shí)鐘頻率之間有特定的比例關(guān)系,而且視頻圖象速率和系統(tǒng)時(shí)鐘頻率之間也有特定的比例關(guān)系。
2 ADSP-2181的性能
數(shù)字信號(hào)處理器(DSP)具有速度快、運(yùn)算能力強(qiáng)、花費(fèi)低、可擴(kuò)展和集成度高等優(yōu)良特性,這就使得我們?cè)谶x擇內(nèi)嵌環(huán)境下工作的信號(hào)協(xié)處理器時(shí),能夠提供非常強(qiáng)大且靈活的系統(tǒng),并且價(jià)格非常合理。
本文采用AD公司的ADSP-2181 數(shù)字信號(hào)處理器,它具有以下主要性能:
·25ns的單周期指令執(zhí)行時(shí)間
·片內(nèi)16K字程序存儲(chǔ)器PRAM;片內(nèi)16K字?jǐn)?shù)據(jù)存儲(chǔ)器DRAM
·三個(gè)獨(dú)立的計(jì)算單元ALU、乘法/累加器和桶形移位器
·兩個(gè)獨(dú)立的地址發(fā)生器
·強(qiáng)有力的程序定序器
·循環(huán)無額外時(shí)鐘開銷
·條件算術(shù)指令
·具有壓擴(kuò)硬件和自動(dòng)數(shù)據(jù)緩沖的兩個(gè)雙緩沖串行口
·可編程的內(nèi)部定時(shí)器
·可編程的等待狀態(tài)發(fā)生器
·16比特內(nèi)部DMA口可快速訪問片內(nèi)存儲(chǔ)器
·具有2048?jìng)€(gè)存儲(chǔ)單元的I/O口支持并行的外圍設(shè)備
·13個(gè)可編程的標(biāo)志管腳可提供靈活的系統(tǒng)信令
·EPROM的自動(dòng)引導(dǎo)或通過內(nèi)部DMA口自動(dòng)引導(dǎo)
這些特點(diǎn)使得它只需最小的外部支持環(huán)境就可以工作。
用ADSP-2181實(shí)現(xiàn)壓縮的音、視頻的傳輸流打包時(shí),如果視頻編碼器以8Mbps的速率輸出壓縮的視頻流,存于視頻FIFO中,而16位操作的DSP每個(gè)指令讀兩個(gè)字節(jié),則需讀0.5M次,即每秒需要500 000次讀指令才能保證FIFO不發(fā)生溢出。與此同時(shí),DSP還需對(duì)讀出的數(shù)據(jù)進(jìn)行一定的處理,才能從DSP串口發(fā)出。ADSP-2181的最高指令周期為40MIPS,按每秒從FIFO讀1MB計(jì)算,則平均1秒一個(gè)字節(jié)可有40條指令的處理時(shí)間。對(duì)于打包處理,ADSP-2181可以滿足一套節(jié)目的復(fù)用。
3 ADSP-2181的IDMA接口與MC68302的連接
為了使DSP實(shí)現(xiàn)最好的性能,有效的微處理器通信是最關(guān)鍵的。摩托羅拉MC68300系列微控制器能提供強(qiáng)大且靈活的總線接口,很適合DSP的要求。
復(fù)用器設(shè)計(jì)時(shí),整個(gè)過程的協(xié)調(diào)控制工作是用摩托羅拉的微處理器MC68302完成的??刂撇僮髁鞒桃妶D3。圖中的標(biāo)號(hào)表示系統(tǒng)的整個(gè)初始化過程,其中,“(1)”表示MC68302對(duì)打包DSP進(jìn)行RESET(復(fù)位),DSP開始初始化;“(2)”表示MC68302給編碼器加載程序;“(3)”表示打包DSP通知MC68302已初始化完畢;“(4)”表示MC68302通知編碼器開始工作。
MC68302對(duì)整個(gè)系統(tǒng)初始化完畢后,ADSP-2181便開始從FIFO中讀取分組的視頻原始流和音頻原始流,并對(duì)所讀數(shù)據(jù)進(jìn)行判斷,加相應(yīng)的包頭,然后在外加串口時(shí)鐘的控制下,以固定速率從ADSP-2181串口把打包的TS流數(shù)據(jù)送往信道。
下面介紹ADSP-2181芯片的IDMA接口同MC68302微控制器之間的硬件界面和軟件接口的設(shè)計(jì)方案。
3.1 IDMA操作
外部器件能通過DSP的IDMA接口訪問ADSP-2181的內(nèi)存。微處理器MC68302能夠通過IDMA接口與ADSP-2181的內(nèi)存通信,把此DSP芯片當(dāng)作是隸屬自身的以存儲(chǔ)區(qū)劃分的外圍設(shè)備,并且可以訪問ADSP-2181的所有數(shù)據(jù)存儲(chǔ)器(DM)和程序存儲(chǔ)器(PM)。
ADSP-2181的IDMA接口由以下幾部分組成:一條16比特的地址/數(shù)據(jù)復(fù)用總線(IAD16:0),一條選擇線(IS),地址鎖存有效信號(hào)(ALE),讀信號(hào)(IAD),寫信號(hào)(IWR),通知信號(hào)(IACK)。MC68302負(fù)責(zé)所有數(shù)據(jù)傳輸?shù)某跏蓟ぷ鳌?br>ADSP-2181的存儲(chǔ)器地址裝載在IDMA地址寄存器中,IDMA地址寄存器包括14比特的內(nèi)存地址和1比特限定傳輸類型的標(biāo)志位。該標(biāo)志位用于區(qū)分所傳輸?shù)氖牵玻幢忍氐某绦虼鎯?chǔ)器代碼,還是16比特的數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)。IDMA地址寄存器的初始化工作既可以由DSP完成,也可以由微處理器完成。微處理器可以通過運(yùn)行一個(gè)地址鎖存周期來初始化此寄存器。一個(gè)地址鎖存周期的過程如下:先由微處理器發(fā)ALE信號(hào),然后在IAD上傳輸15比特位(14位地址信號(hào)和位目的存儲(chǔ)類型信號(hào))。為了更有效地傳送大段的操作代碼或數(shù)據(jù),并不是IDMA存取都需要一個(gè)地址鎖存周期。相反,一旦鎖定,每個(gè)IDMA字傳輸之后地址就會(huì)自動(dòng)增加。
3.2 硬件界面設(shè)計(jì)
占用微控制器外圍空間的ADSP-2181芯片的IDMA端口需要?jiǎng)澐殖蓛蓚€(gè)部分:一部分由微控制器使用,用來設(shè)置它想訪問的DSP存儲(chǔ)器地址;另一部分則用于傳輸數(shù)據(jù)和指令信息。
對(duì)于基于DSP的協(xié)處理系統(tǒng)的設(shè)計(jì)而言,微控制器和DSP之間的硬件接口設(shè)計(jì)僅僅是驅(qū)動(dòng)工作的一部分。系統(tǒng)的啟動(dòng)問題及微處理器和DSP之間的通信問題在系統(tǒng)設(shè)計(jì)中是很重要的部分。
3.3 加載DSP芯片
在加電情況下,DSP上的IDMA接口可用來加載程序。這樣DSP就無需再用單獨(dú)的EPROM芯片。對(duì)于芯片ADSP-2181,加載過程由管腳MMAP和BMODE來控制。保持管腳MMAP低電位、管腳BMODE高電位,就可以通過IDMA接口進(jìn)行程序加載了。在此狀態(tài)下,當(dāng)有復(fù)位信號(hào)時(shí),DSP并不激活它的外部地址總線去訪問EPROM芯片,而是等待微處理器開始IDMA傳輸來填充其內(nèi)部數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器,并且利用IDMA接口的地址自動(dòng)增加特性來加速以升地址順序進(jìn)行的代碼段的傳輸。當(dāng)所有初始化工作結(jié)束時(shí),微處理器初始化DSP的重啟動(dòng)向量PM(0x0000),至此,程序加載結(jié)束,DSP 程序開始執(zhí)行。此過程的流程如圖4所示。
3.4 產(chǎn)生加載代碼
ASDP-21xx系列的指令操作代碼位有24位,而IDMA接口只能接收16位的值。為了通過IDMA接口傳輸指令操作代碼,需要先傳輸16位,然后再傳輸另外8位 并進(jìn)行適當(dāng)?shù)恼{(diào)整。
DSP的可執(zhí)行文件是由ADSP_21XX鏈接器生成的。鏈接器接收由匯編器生成的目標(biāo)文件,把它們放置在由系統(tǒng)結(jié)構(gòu)文件定義的存儲(chǔ)結(jié)構(gòu)中,產(chǎn)生DSP可執(zhí)行文件。
4 ADSP-2181完成傳輸流打包
傳輸流的打包需要在ADSP-2181的數(shù)據(jù)存儲(chǔ)區(qū)DM中開辟兩個(gè)緩沖區(qū),一個(gè)是TS頭固定長度部分的BUFFER,其中包含是否需要PCR字段的PCR-flag標(biāo)志;另一個(gè)是可調(diào)字段的BUFFER,其中包括標(biāo)識(shí)PCR編碼的相關(guān)字段。根據(jù)輸入修改TS的兩個(gè)緩沖,判斷是否需要可調(diào)字段、是否需加PCR字段、是否有填充字節(jié)以及填充字節(jié)的數(shù)目等。然后以恒定速率(在此是8.448Mbps)發(fā)出。
從編碼器來的視頻、音頻原始流分組(PES)在ADSP-2181中被分割成一個(gè)個(gè)長度為188字節(jié)的小包,并插入相應(yīng)的TS字頭。由于視頻流的輸入速率遠(yuǎn)大于音頻的輸入速率,在同一時(shí)間內(nèi)的視頻TS包遠(yuǎn)遠(yuǎn)多于音頻的TS包,因此必須采取一定的措施使得視頻、音頻數(shù)據(jù)TS包能夠均勻地交織復(fù)用到最終的傳送碼流中,以保證解碼端的視頻、音頻解碼器的BUFFER不會(huì)產(chǎn)生上溢和下溢。PCR時(shí)間標(biāo)記在傳送復(fù)用器中規(guī)定的視頻TS包頭中傳輸,但要說明的是,按照MPEG-2的系統(tǒng)層規(guī)范,PCR采樣的時(shí)刻必須是當(dāng)PCR字段串行輸出離開復(fù)用器那一刻的時(shí)間,也就是說PCR的插入邏輯是復(fù)用器的最后一步操作。此外,一個(gè)PES包的包頭必須包含在一個(gè)新的TS傳送包中,同時(shí)PES包數(shù)據(jù)要充滿TS傳送包的負(fù)荷,若PES包數(shù)據(jù)的結(jié)尾無法與TS包結(jié)尾對(duì)齊,則需要在TS的調(diào)整字段中插入相應(yīng)數(shù)量的填充字節(jié),使得兩者的結(jié)尾對(duì)齊。解碼時(shí)填充字節(jié)則直接被丟棄。
復(fù)用器啟動(dòng)后,由MC68302首先向前級(jí)視頻、音頻編碼器發(fā)出系統(tǒng)編碼開始信號(hào),同時(shí)發(fā)送27MHz系統(tǒng)時(shí)鐘。ADSP-2181被動(dòng)地接收前級(jí)編碼數(shù)據(jù)。視頻、音頻分別在各自的FIFO中緩存,各FIFO設(shè)有各自的雙向計(jì)數(shù)器,動(dòng)態(tài)地反映各FIFO中緩存的視頻、音頻字節(jié)數(shù)。采用DSP輪詢技術(shù)控制復(fù)用比特流中各種TS包的交織策略。由于視頻PES數(shù)據(jù)流的輸入速率是可變的,而音頻的速率則是恒定的,若采用其他固定比例的復(fù)用策略,無法保證輸出碼流各種TS包的均勻性,采用輪詢技術(shù)除了能夠均勻打包輸出變速率的視頻數(shù)據(jù)流外,同時(shí)對(duì)多節(jié)目數(shù)據(jù)流的復(fù)用具有很好的靈活性,只需在軟件中增加輪詢的數(shù)目并合理安排其輪詢的優(yōu)先級(jí)即可,可用圖5來描述。
ADSP-2181按視頻、音頻的次序?qū)σ曨lFIFOV FIFO、音頻FIFOA FIFO進(jìn)行輪詢,即讀取反映FIFO狀態(tài)的雙向計(jì)數(shù)器,若大于預(yù)先確定的門限數(shù)值,則從相應(yīng)的FIFO中讀取184字節(jié),送入第二級(jí)公共FIFO中。
ADSP-2181在對(duì)視頻、音頻184字節(jié)的讀取過程中,同時(shí)檢測(cè)是否碰到PES包起始碼,若未碰到PES字頭,則由ADSP-2181向傳輸緩存器寫入相應(yīng)的TS包頭4字節(jié),無可調(diào)字段,再將公共FIFO中的184字節(jié)送入傳輸緩存器;若碰到PES字頭則立即停止從第一級(jí)視頻或音頻FIFO中讀取數(shù)據(jù),同時(shí)向ADSP-2181發(fā)出中斷,ADSP-2181的中斷服務(wù)讀取公共FIFO中的字節(jié)數(shù)目,設(shè)其為N,由于在這N字節(jié)數(shù)據(jù)中包含4字節(jié)的PES字頭,為了使TS包與PES包字頭對(duì)齊,公共FIFO中的數(shù)據(jù)要打成兩個(gè)TS包,由于第一個(gè)TS包有效負(fù)荷數(shù)據(jù)只有N-4個(gè)字節(jié),PES包的結(jié)尾未能和TS包的結(jié)尾對(duì)齊,因此在第一個(gè)TS包的自適應(yīng)域要插入182-N-4個(gè)填充字節(jié)0xFF,有效數(shù)據(jù)負(fù)荷為N-4,第二個(gè)TS包由于是一個(gè)新的PES數(shù)據(jù)包的開始,公共FIFO中還保留4字節(jié)的PES字頭,因此ADSP-2181還需從第一級(jí)FIFO中讀入相應(yīng)數(shù)目字節(jié)的視頻或音頻數(shù)據(jù)。對(duì)于音頻來說,不需插入PCR信息,只從音頻FIFO中讀入184-4個(gè)字節(jié)的數(shù)據(jù)。在向輸出緩存器寫入TS字頭后,再將公共FIFO中的數(shù)據(jù)送入輸出緩存器。對(duì)視頻來說,在不考慮PCR信息插入時(shí)其操作同音頻一樣。
由于兩PCR之間的時(shí)間間隔在MPEG-2視頻編碼器傳送流中要求為100 ms,因此,在DSP軟件中設(shè)計(jì)了一個(gè)計(jì)數(shù)器,用于對(duì)所有已生成的TS包進(jìn)行計(jì)數(shù)。由于ADSP-2181串口的輸出速率是恒定的(在此是靠外加8.448MHz串口時(shí)鐘實(shí)現(xiàn)的),因而單位時(shí)間內(nèi)的總的TS包的數(shù)目也是一定的。要使PCR之間的時(shí)間間隔保持恒定,只需將計(jì)數(shù)器的預(yù)置數(shù)目設(shè)定為“總的TS包數(shù)目/每秒÷25”,復(fù)用器每生成一個(gè)TS包,計(jì)數(shù)器減1,當(dāng)計(jì)數(shù)器計(jì)到零時(shí)將時(shí)間間隔標(biāo)記置位。ADSP-2181在每次輪詢打包TS數(shù)據(jù)之前,先檢測(cè)時(shí)間間隔標(biāo)記是否置位,若未置位則按前述方法處理,若置位則在打包的下一個(gè)視頻TS包中插入PCR時(shí)間標(biāo)記,當(dāng)然這里只是在TS包頭中插入相應(yīng)的可調(diào)字段,而沒有插入真正的PCR時(shí)間標(biāo)記,只是將6字節(jié)的PCR位置預(yù)留出來。因此,如果下一個(gè)復(fù)用的TS包為視頻數(shù)據(jù)并且恰好需插入PCR時(shí)間標(biāo)記,則DSP從視頻FIFO中讀的數(shù)據(jù)是176字節(jié)而不是184字節(jié),因?yàn)榭烧{(diào)字段已占用了8字節(jié)。如果該TS包為含有PES字頭的視頻TS包,則讀入的數(shù)據(jù)字節(jié)為172字節(jié)。在ADSP-2181的最后輸出單元中最重要的是完成PCR時(shí)間標(biāo)記的插入。MPEG-2系統(tǒng)規(guī)范要求PCR時(shí)間必須為PCR域最后一字節(jié)離開復(fù)用器的時(shí)間,因此,PCR只能在串出的時(shí)刻鎖存系統(tǒng)時(shí)鐘。PCR信息只包含在特定的視頻TS包中,ADSP-2181在寫入該TS字頭時(shí)可調(diào)字段已預(yù)先保留6字節(jié)的PCR位置,因此,在數(shù)據(jù)串出的同時(shí)要進(jìn)行字頭檢測(cè)。當(dāng)滿足PCR插入條件時(shí),即在檢測(cè)到TS包的同步字節(jié)以及可調(diào)字段標(biāo)志位后,則在相應(yīng)時(shí)刻啟動(dòng)PCR鎖存及串出邏輯。
需要說明的是:對(duì)于多節(jié)目輸入復(fù)用的情況,除了可以采用以上所設(shè)計(jì)的DSP輪詢策略外,還應(yīng)注意優(yōu)先級(jí)的排隊(duì)問題,以防視頻緩沖區(qū)有上溢問題出現(xiàn)。對(duì)于VBR視頻的多節(jié)目復(fù)用問題,尤其要慎重考慮。不僅要設(shè)置雙向計(jì)數(shù)器,動(dòng)態(tài)地反映各FIFO中緩存的視頻、音頻字節(jié)數(shù),還要采用相應(yīng)的預(yù)測(cè)機(jī)制來即時(shí)獲取各路視頻速率的變化趨勢(shì),同時(shí)采用相應(yīng)的返回控制機(jī)制來調(diào)整輸入端的速率,保證各路信號(hào)均勻交織,使輸入FIFO不溢出也是很有必要的。另外,節(jié)目特殊信息PSI的插入要滿足PAT之間和PMT之間的時(shí)間間隔恒定為40ms,設(shè)計(jì)時(shí)是在TS包計(jì)數(shù)器置零后緊接著的兩個(gè)TS包中放入PAT和PMT表格。解碼時(shí)選擇感興趣的節(jié)目就是根據(jù)PAT中標(biāo)明的節(jié)目號(hào)在PMT中尋找該節(jié)目對(duì)應(yīng)的音頻、視頻信息,進(jìn)而實(shí)現(xiàn)該套節(jié)目的同步解碼。
評(píng)論