基于VW2010的視頻壓縮存儲(chǔ)系統(tǒng)的軟硬件設(shè)計(jì)
0 引言
MPEG-4 (ISO/IEC 14496)是基于第二代壓縮編碼技術(shù)制定的國(guó)際標(biāo)準(zhǔn),該標(biāo)準(zhǔn)具有高壓縮比、可擴(kuò)展性和可交互性等優(yōu)點(diǎn)。在MPEG-4應(yīng)用方面,由于它能以較少的帶寬傳輸高質(zhì)量的畫(huà)面,并可將多種多媒體通信加以綜合,所以有著很好的應(yīng)用前景。為此,本文針對(duì)實(shí)際需求,提出了采用VW2010編解碼芯片為核心的嵌人式MPEG-4音視頻壓縮存儲(chǔ)系統(tǒng)的設(shè)計(jì)方案,詳盡介紹了系統(tǒng)的設(shè)計(jì)原理,給出了VW2010芯片的HOST引導(dǎo)模式程序設(shè)計(jì)方法。
1系統(tǒng)硬件設(shè)計(jì)
1.1 VW2010的主要特點(diǎn)
VW2010是VWEB公司開(kāi)發(fā)的實(shí)時(shí)MPEG-4音視頻壓縮/解壓芯片(CODEC)。該芯片具有以下主要特點(diǎn):
◇片內(nèi)集成有3個(gè)信號(hào)處理/控制單元,其中包括一個(gè)視頻編碼(壓縮)器、一個(gè)視頻解碼(解壓)器和一個(gè)片內(nèi)CPU(內(nèi)部擴(kuò)展了一個(gè)音頻編碼DSP、一個(gè)音頻解碼DSP、一個(gè)多路復(fù)合單元和一個(gè)多路解復(fù)合單元);
◇具有可編程、高性能和低功耗特點(diǎn),芯片內(nèi)的每個(gè)信號(hào)處理/控制單元都由一個(gè)RISC處理器和專(zhuān)用的硬件加速器構(gòu)成,此外,片內(nèi)視頻編解碼器中還集成了一個(gè)專(zhuān)用的SDRAM;
◇在系統(tǒng)上電/復(fù)位時(shí),視頻編解碼器的固件程序可由外部主機(jī)(host)載人各自專(zhuān)用的SDRAM,而片內(nèi)CPU的固件程序則可載人VW2010外掛的SDRAM;
◇芯片的主機(jī)接口采用標(biāo)準(zhǔn)PCI接口,符合PCI局部總線規(guī)范2.2;
◇為了使編解碼性能達(dá)到最佳,VW2010內(nèi)部集成有一個(gè)雙通道DMAC,系統(tǒng)host可直接通過(guò)主機(jī)接口對(duì)VW2010進(jìn)行控制,MPEG數(shù)據(jù)流則采用DMA方式傳輸。
◇提供有與PHILIPS公司兼容的I2C總線,可方便地對(duì)外圍芯片進(jìn)行控制。
1.2基于VW2010的壓縮存儲(chǔ)卡硬件設(shè)計(jì)
本系統(tǒng)集成了2塊VW2010芯片,可以同時(shí)對(duì)2路音視頻流進(jìn)行編碼,并可與IDE硬盤(pán)進(jìn)行無(wú)縫連接。具體的系統(tǒng)硬件框圖如圖1所示。
圖1中,復(fù)合視頻信號(hào)先經(jīng)過(guò)視頻接收電路進(jìn)行前端處理(包括阻抗匹配、限幅和鉗位),然后通過(guò)視頻解碼電路產(chǎn)生符合VW2010視頻接口標(biāo)準(zhǔn)的ITU656信號(hào)。視頻解碼電路的核心是一個(gè)視頻解碼芯片,該芯片可對(duì)視頻信號(hào)進(jìn)行A/D轉(zhuǎn)換和編碼,以產(chǎn)生ITU656標(biāo)準(zhǔn)的并行數(shù)字電視信號(hào)。本文選取SAA7113作為視頻解碼芯片。
模擬音頻信號(hào)經(jīng)過(guò)模擬音頻接收電路進(jìn)行前端處理后,通過(guò)音頻ADC電路產(chǎn)生符合VW2010音頻接口標(biāo)準(zhǔn)的I2S信號(hào)。
VW2010是壓縮卡的核心處理芯片,該芯片除可完成音、視頻信號(hào)的編碼外,還可提供對(duì)解碼器和ADC的控制(通過(guò)I℃總線),其編碼產(chǎn)生的MPEG流可通過(guò)芯片內(nèi)部集成的HOST接口和CDO接口輸出。VW2010必須在微碼和固件代碼下工作,VW2010提供有從ROM引導(dǎo)、從ICI引導(dǎo)、從主機(jī)(Host)引導(dǎo)三種引導(dǎo)方式。本文使用的方案是從主機(jī)(Host)引導(dǎo)。該方式不同于一般市面上的產(chǎn)品所采用的ROM引導(dǎo)模式。它只進(jìn)行編碼,設(shè)計(jì)時(shí)可通過(guò)設(shè)置相關(guān)的寄存器來(lái)將微代碼下載到編碼SDRAM中。
系統(tǒng)中的FPGA用來(lái)進(jìn)行總線擴(kuò)展和數(shù)據(jù)緩存。它一方面可通過(guò)HOST-intel總線接口與2片VW2010芯片連接,以用來(lái)下載固件代碼和VW2010的參數(shù)配置,同時(shí)通過(guò)CDO接口接收VW2010的編碼視頻流并進(jìn)行緩存;另一方面,F(xiàn)PGA也可通過(guò)IDE接口和硬盤(pán)進(jìn)行連接,以用來(lái)進(jìn)行編碼數(shù)據(jù)的存儲(chǔ)。
DSP是本系統(tǒng)的核心控制芯片,可配合FPGA模擬HOST-intel總線接口和IDE接口,從而控制VW2010固件代碼的下載和硬盤(pán)的讀寫(xiě),同時(shí)建立FAT32格式的文件目錄系統(tǒng)。本設(shè)計(jì)中的DSP芯片選用TI公司的TMS320VC5416。
2系統(tǒng)軟件設(shè)計(jì)
本系統(tǒng)的軟件主要分為3大模塊:VW2010控制模塊、硬盤(pán)控制模塊和數(shù)據(jù)傳輸模塊。VW2010控制模塊主要用于下載固件代碼和配置參數(shù),是啟動(dòng)VW2010正常工作的基礎(chǔ),因此也是程序設(shè)計(jì)的核心模塊。本文將著重討論如何通過(guò)HOST-intel總線接口控制VW2010芯片,以進(jìn)行固件代碼的下載和參數(shù)的配置。
2.1 固件代碼的下載
VW2010需要在固件的支持下工作。固件主要有2部分,一是boot.sre,二是pscodec.sre(PS流)或tscodec.sre(TS流)。HOST接口通過(guò)訪問(wèn)相關(guān)的寄存器和編碼SDRAM來(lái)下載固件。對(duì)寄存器和SDRAM的訪問(wèn)在有關(guān)文獻(xiàn)中已有詳細(xì)討論,在此不再贅述。具體的固件下載流程如下:
(1)設(shè)置寄存器REG_DHIU3,使VW2010處于固件下載狀態(tài);
(2)設(shè)置寄存器REG_DHIU6,設(shè)置VW2010處于VW2005工作模式,并使VW2010的系統(tǒng)時(shí)鐘為162 MHz;因?yàn)楸鞠到y(tǒng)只進(jìn)行編碼壓縮,所以應(yīng)設(shè)置寄存器REG_DHIU6,使VW2010處于VW2005工作模式,這樣,VW2010就會(huì)自動(dòng)分配編碼SDRAM的地址,以用于存放固件代碼。
(3)設(shè)置編碼軟件寄存器;
(4)設(shè)置解碼軟件寄存器;
(5)通過(guò)向0x3F1800地址發(fā)送0x0,清除FirmwareReadyCode;
(6)下載boot.sre和pscodec.sre或tscodec.sre;此處要把sre文件中的數(shù)據(jù)部分按順序?qū)懭刖幋aSDRAM中的相應(yīng)地址處。
(7)設(shè)置REG_DHIU3來(lái)啟動(dòng)VW2010;
(8)通過(guò)讀取SDRAM中的FirmwareReadyCode區(qū)來(lái)確認(rèn)固件已經(jīng)下載并準(zhǔn)備好;Firmwar-eReadyCode是編碼SDRAM的0x3F1800地址中內(nèi)容的高16位,如果讀到0x0A00,則說(shuō)明固件已經(jīng)下載成功。
2.2參數(shù)配置
因?yàn)楣碳a所對(duì)應(yīng)的參數(shù)設(shè)置是某種模式的默認(rèn)值,所以要通過(guò)參數(shù)配置來(lái)調(diào)整某些參數(shù)以適合自己的電路設(shè)計(jì)。參數(shù)配置可通過(guò)發(fā)IOCTL碼進(jìn)行。VW2010采用共享存儲(chǔ)區(qū)機(jī)制來(lái)接收HOST命令并返回命令執(zhí)行結(jié)果。HOST與VW2010進(jìn)行通信的共享存儲(chǔ)區(qū)位于編碼SDRAM中地址3F1800處,共128字節(jié);而VW2010與HOST進(jìn)行通信的共享存儲(chǔ)區(qū)則位于編碼SDRAM中的地址3F1880處,也是128字節(jié)。共享存儲(chǔ)區(qū)的格式如表1和2所列。
在發(fā)送IOCTL命令前,必須首先發(fā)送OPEN命令。OPEN命令可用來(lái)打開(kāi)設(shè)備以獲得"devicehandle"和輔助參數(shù)區(qū)的首地址等參數(shù)。
要發(fā)送的IOCLT命令全部發(fā)送完以后,還必須發(fā)送CLOSE命令來(lái)釋放"device handle"。
所有的IOCTL命令都是在OPEN命令和CLOSE命令之間發(fā)送的,VW2010提供的IOCTL碼共32位寬,由3部分組成。第一部分是固件類(lèi)型,可形成IOCTL碼的高8位;第二部分是操作類(lèi)型(分為讀和寫(xiě)),可作為IOCTL碼的[23..16]位;第三部分是要發(fā)送的IOCTL命令。其參數(shù)配置流程如圖2所示。發(fā)送IOCTL命令的詳細(xì)過(guò)程如下:
(1)讀共享存儲(chǔ)區(qū)的0x3F1884至0x3F1894中的內(nèi)容,并在0x3F1888處存放返回碼,0x3F188C存放返回的"handle",0x3F1890處存放輔助參數(shù)區(qū)地址。如果返回碼的數(shù)值是0,則說(shuō)明無(wú)錯(cuò),這時(shí),DSP將存儲(chǔ)這些返回的參數(shù)以備后用;
(2)讀REG_INT1,如果REG_INT1=0x01,則表示設(shè)備已準(zhǔn)備好接受IOCTL命令;如果設(shè)備準(zhǔn)備好,則繼續(xù)下一步;否則,重復(fù)檢查Firmwar-eReadyCode和REG_INT1,直到設(shè)備準(zhǔn)備好;
(3)寫(xiě)IOCTL命令碼到共享存儲(chǔ)區(qū)0x3F1800地址的CMD區(qū),并寫(xiě)中斷指示碼到共享存儲(chǔ)區(qū)0x3F1800地址的Int Flag區(qū)(0=關(guān)中斷,1=開(kāi)中斷)。然后把從第一步中OPEN命令返回的"de-vice handle"寫(xiě)到0x3F180C處,再把從第一步中OPEN命令返回的輔助參數(shù)區(qū)的地址"x"寫(xiě)到0x3F1810處;
(4)把要發(fā)送的IOCTL碼參數(shù)個(gè)數(shù)寫(xiě)到輔助參數(shù)區(qū)的"x"地址處,把要發(fā)送的IOCTL碼寫(xiě)到輔助參數(shù)區(qū)的"x+4"地址處,再把要發(fā)送的IOCTL碼參數(shù)寫(xiě)到輔助參數(shù)區(qū)的"x+8"地址處;
(5)給寄存器REG_DHIU5寫(xiě)0x0,以發(fā)送一個(gè)中斷給VW2010。在處理IOCTL命令前,芯片會(huì)鎖定semaphore寄存器(REG_INT1=0x0),處理完IOCTL命令后,芯片則會(huì)釋放semaphore寄存器(REG_INT1=0x01);
(6)處理中斷。
3 結(jié)束語(yǔ)
本文在介紹VW2010內(nèi)部結(jié)構(gòu)的背景下,提出了采用DSP作為外部主機(jī)的方法。該方法沒(méi)有采用VW2010的SDK中所采用的利用PC作為主機(jī)的壓縮編碼系統(tǒng)設(shè)計(jì)方案。文章從系統(tǒng)的工作原理及流程到系統(tǒng)軟硬件的設(shè)計(jì),特別是VW2010固件代碼的下載和參數(shù)的配置,都進(jìn)行了詳細(xì)的闡述。測(cè)試結(jié)果表明,該設(shè)計(jì)方案簡(jiǎn)單可行,可以在低比特率的條件下完成良好的圖象壓縮編碼和存儲(chǔ)。
評(píng)論