一種新型編碼芯片及其驅(qū)動(dòng)程序的設(shè)計(jì)方案
目前,電視節(jié)目的拍攝、制作、傳輸?shù)讲コ稣趯?shí)現(xiàn)數(shù)字化。MPEG視頻音頻編碼標(biāo)準(zhǔn)的出現(xiàn),解決了電視信號(hào)數(shù)字化后信息量過(guò)大而信道帶寬有限的問(wèn)題,加上數(shù)字視頻硬件方面的產(chǎn)品不斷進(jìn)步,促進(jìn)了各種數(shù)字視頻產(chǎn)品的推出,這一切都預(yù)示著電視廣播全面步入數(shù)字化的時(shí)代。數(shù)字電視產(chǎn)品的開發(fā)不僅能給觀眾帶來(lái)高品質(zhì)畫面和音響效果的享受,而且MPEG-II視頻音頻壓縮的ATM網(wǎng)接入技術(shù)的開發(fā)為VOD(視頻點(diǎn)播)的時(shí)代鋪平了道路。
目前世界上的數(shù)字電視系統(tǒng)標(biāo)準(zhǔn)有歐洲的DVB系統(tǒng)和美國(guó)的ATSC系統(tǒng)。這兩種系統(tǒng)在視頻壓縮上都采用MPEG-II標(biāo)準(zhǔn),在聲音上DVB系統(tǒng)采用MPEG-II的音頻壓縮標(biāo)準(zhǔn),ATSC系統(tǒng)則采用杜比AC-3壓縮技術(shù)。本文介紹C-Cube公司MPEG-II編碼器芯片DVxpert-II,它可用于歐洲D(zhuǎn)VB標(biāo)準(zhǔn)常規(guī)數(shù)字電視的前端系統(tǒng)的產(chǎn)品開發(fā)中。
1 芯片簡(jiǎn)介
C-Cube公司開發(fā)的視頻處理單芯片DVxpert-II是在該公司DVx的MPEG-II單芯片編/解碼結(jié)構(gòu)的基礎(chǔ)上提高了性能的處理器。它可以產(chǎn)生高品質(zhì)的4:2:0和4:2:2 MPEG-II圖像,同時(shí)壓縮率也有所提高。該芯片能實(shí)現(xiàn)視頻編碼(video encoding)、解碼(decoding)和編/解碼(codec)三種功能,可實(shí)現(xiàn)運(yùn)動(dòng)補(bǔ)償、分塊/離散余弦變換壓縮算法。
DVxpert-II處理器的核心是32位Micro SPACR RISC Core處理器,工作頻率為100mhZ。該處理器內(nèi)有一個(gè)16K字節(jié)指令的高速緩沖存儲(chǔ)器(I-Cache)和一個(gè)8K字節(jié)的數(shù)據(jù)存儲(chǔ)器(Data Memory)接口,這是一種可編程可升級(jí)的結(jié)構(gòu)。芯片采用數(shù)據(jù)存儲(chǔ)器而不是數(shù)據(jù)緩沖器,目的是使軟件能更多地控制存儲(chǔ)器,并允許重復(fù)進(jìn)行DMA傳輸。此外,DVxpert-II處理器還有兩個(gè)協(xié)處理器:DSP協(xié)處理器和運(yùn)動(dòng)估計(jì)協(xié)處理器(Motion Estimator),減輕了RISC處理器運(yùn)算的負(fù)擔(dān),它們共同完成視頻壓縮編碼算法,提高了編碼速度。DSP協(xié)處理器每秒鐘可執(zhí)行大約16億個(gè)算術(shù)操作指令(1600MOPS),執(zhí)行向量從存儲(chǔ)器到存儲(chǔ)器的指令,這能提高從RISC到DSP流量操作速度。其8K字節(jié)存儲(chǔ)器有兩個(gè)緩沖區(qū)(兩個(gè)塊),可允許DMA和DSP同時(shí)操作。
DSP協(xié)處理器能完成以下功能:①解電視電影模式;②活動(dòng)測(cè)量;③運(yùn)動(dòng)補(bǔ)償;④自適應(yīng)暫時(shí)濾波;⑤線性濾波和篩選;⑥D(zhuǎn)CT變換和逆DCT變換(12位);⑦量化和逆量化;⑧變長(zhǎng)的Huffman編碼和解碼。
可編程運(yùn)動(dòng)估計(jì)協(xié)處理器(運(yùn)動(dòng)估計(jì)器ME)支持所有的塊匹配和運(yùn)動(dòng)估計(jì)類型,它從RISC處理的CPU中取得運(yùn)動(dòng)估計(jì)的命令并返回結(jié)果。每次運(yùn)動(dòng)估計(jì)完成后會(huì)產(chǎn)生一個(gè)中斷。
很多公司都有自己所開發(fā)的單芯片MPEG-II編碼的LSI。進(jìn)行DCT及運(yùn)動(dòng)補(bǔ)償?shù)妊菟闼璧碾娐方Y(jié)構(gòu)各不相同,C-Cube公司開發(fā)的DVxpert-II等芯片為大部分處理工作由RISC處理器及DSP等完成的“處理器型”芯片,與之配套的還有C-Cube公司開發(fā)的軟件,即微碼(.ux)文件。該文件包括進(jìn)行視頻壓縮的代碼以及初始化DVxpert-II處理器的存儲(chǔ)器和下面要介紹的處理器外掛的SDRAM。因?yàn)樗目删幊绦阅芎茫灰膿Q輸入到處理器的微碼,就可以變更壓縮算法或修正軟件的差錯(cuò)。
DVxpert-II的內(nèi)部模塊框圖如圖1所示。
由圖中可見,DVxpert-II處理器是利用PCI總線接口與主機(jī)等設(shè)備相通信的,主機(jī)必須用PCI總線驅(qū)動(dòng)處理器,控制編碼過(guò)程;壓縮好的視頻比特流也必須經(jīng)PCI總線存儲(chǔ)到主機(jī)內(nèi),PCI接口由主機(jī)時(shí)鐘(33MHz)驅(qū)動(dòng)。
DVxpert-II處理器還有與串行ROM的接口,開發(fā)人員可選擇利用串行EPROM裝載部分初始化程序。在本開發(fā)系統(tǒng)中,為了使硬件電路簡(jiǎn)化,所有全部初始化過(guò)程都由驅(qū)動(dòng)程序經(jīng)PCI總線接口完成(可省去串行EPROM)。
該芯片還可外掛64bit同步動(dòng)態(tài)RAM(SDRAM),實(shí)際電路采用4片16M比特的SDRAM實(shí)現(xiàn)8M字節(jié)外部存儲(chǔ)器,存儲(chǔ)C-Cube公司的微碼和數(shù)據(jù),并可由開發(fā)人員分配存儲(chǔ)空間。當(dāng)處理器進(jìn)行MPEG-II視頻編碼時(shí),SDRAM所含具體內(nèi)容如下:①應(yīng)用程序微碼;②視頻幀捕獲緩沖區(qū);③運(yùn)動(dòng)估計(jì)取樣視頻緩沖區(qū);④預(yù)測(cè)的重構(gòu)幀緩沖區(qū);⑤參考幀;⑥速率緩沖區(qū);⑦用于編碼算法的本地表和其他數(shù)據(jù)。
處理器有視頻接口,可輸入/輸出未壓縮的數(shù)字視頻流;還有音頻接口,可輸入/輸出未壓縮的數(shù)字音頻(為獲得與視頻同步的信息)。DVxpert-II處理器只能進(jìn)行視頻編碼,而未壓縮的音頻數(shù)據(jù)只能經(jīng)PCI總線送到主機(jī)存儲(chǔ)器,在DVxpert-II處理器外進(jìn)行軟件壓縮。
本開發(fā)系統(tǒng)進(jìn)行4:2:0Main Level @ Main Profile 的視頻編碼,僅用一片DVxpert-II處理器,因此可不用其和另一處理器相連的IPC的接口。
2 驅(qū)動(dòng)程序的開發(fā)
虛擬設(shè)備驅(qū)動(dòng)程序可包含對(duì)設(shè)備進(jìn)行操作的設(shè)備專用代碼,任務(wù)具有可設(shè)操作模式,需保存數(shù)據(jù)的硬件設(shè)備都需要有虛擬設(shè)備驅(qū)動(dòng)程序。虛擬設(shè)備保持了每個(gè)應(yīng)用程序的設(shè)備狀態(tài)軌跡,并能保證當(dāng)應(yīng)用程序繼續(xù)執(zhí)行時(shí)設(shè)備處于正確狀態(tài)。編碼器將DVxpert-II集成于即插即用的PCI插卡,因此要開發(fā)該P(yáng)CI設(shè)備的虛擬設(shè)備驅(qū)動(dòng)程序(VxD)以支持編碼器芯片的正常工作,該軟件采用Microsoft VC 6.0開發(fā),在WIN98操作系統(tǒng)下運(yùn)行。WIN98操作系統(tǒng)的基本系統(tǒng)體系結(jié)構(gòu)分成Ring0層和Ring3層,它們能提供不同級(jí)別的系統(tǒng)保護(hù)。Ring3層通過(guò)Intel處理器體系所提供的保護(hù)服務(wù)與其他的運(yùn)行進(jìn)程隔開,以達(dá)到保護(hù)的目的。Ring0層由虛擬機(jī)管理器(VMM)等構(gòu)成。VxD是一個(gè)管理硬件設(shè)備或者已安裝軟件等系統(tǒng)資源的32位可執(zhí)行程序,運(yùn)行在Ring0層,處理系統(tǒng)或外設(shè)中斷及DMA操作等,它使基于Windows的應(yīng)用程序可有效地實(shí)現(xiàn)多任務(wù)。WIN95/98的VxD對(duì)即插即用提供支持,因此當(dāng)DVxpert-II處理器電路設(shè)計(jì)成即插即用PCI擴(kuò)展卡時(shí),起動(dòng)后可由操作系統(tǒng)自動(dòng)檢測(cè)到它。VxD的軟件開發(fā)可利用美國(guó)Vireo.Software公司推出的VtoolsD for Win95開發(fā)工具包進(jìn)行,該VxD被開發(fā)成可動(dòng)態(tài)加載/卸載的驅(qū)動(dòng)程序,以保護(hù)模式駐留在擴(kuò)展內(nèi)存中。VtoolsD中的Quick VxD程序可提供一些選項(xiàng)來(lái)快速生成VxD代碼框架。編碼器的VxD應(yīng)包括:設(shè)備的初始化,處理中斷信號(hào),以及與運(yùn)行在Ring3層進(jìn)行通信。
設(shè)備的初始化流程圖如圖2所示。
微碼數(shù)據(jù)經(jīng)PCI總線可以兩種模式(從模式和主模式)傳輸?shù)骄幋a器設(shè)備上。從模式一次只能傳一個(gè)32位的雙字,速度慢,主模式以DMA方式猝發(fā),可高速傳大量數(shù)據(jù)。微碼中寫入處理器控制總線寄存器的部分只能采用從模式方式;微碼中寫入SDRAM中的數(shù)據(jù)根據(jù).ux文件要采用DMA方式,這要通過(guò)設(shè)置處理器的一些寄存器實(shí)現(xiàn)。
WIN95/98的內(nèi)存為平滑線性內(nèi)存模式,線性編址模式簡(jiǎn)化了應(yīng)用軟件的開發(fā)過(guò)程,提供了存取虛擬地址空間的功能,使用戶可存取的內(nèi)存地址達(dá)4GB,2GB給應(yīng)用軟件,2GB給操作系統(tǒng)本身,因此VxD能申請(qǐng)4個(gè)BUFFER,用于存放DMA方式傳輸編碼時(shí)所用的命令和消息,該BUFFER表示物理地址連續(xù)的空間,同時(shí)還可映射為相應(yīng)的線性地址空間。
虛擬設(shè)備驅(qū)動(dòng)程序可處理編碼器工作時(shí)發(fā)來(lái)的中斷,其服務(wù)過(guò)程如下:
①首先清除中斷;②ISR把BUFFER中的消息存放到消息隊(duì)列;③ISR檢查當(dāng)前消息的序列號(hào):如果有錯(cuò),轉(zhuǎn)到處理錯(cuò)誤的函數(shù),若無(wú)錯(cuò),ISR把命令隊(duì)列中的下一個(gè)命令移到Ring0層的BUFFER內(nèi);④分析消息隊(duì)列內(nèi)的新消息,并且寫相應(yīng)的新命令。
在WIN95/98中,Win32API提供設(shè)備輸入輸出控制(DeviceIoControl)來(lái)支持Ring3到Ring0的直接調(diào)用,它通常用于調(diào)用動(dòng)態(tài)加載的VxD;Ring0層則可通過(guò)OnW32DeviceIoControl(PEOCTLPARAMSpDIOCParams)中的pDIOCParams->dioc_OutBuf向Ring3層傳遞數(shù)據(jù)。
DVxpert-II提供的PCI接口和編程接口使其可方便地集成到PC插卡上,而且可由驅(qū)動(dòng)程序對(duì)其進(jìn)行較靈活的控制。目前該VxD已在使用之中,編碼器設(shè)備工作良好。