基于Z1510的音視頻壓縮卡的設(shè)計(jì)與實(shí)現(xiàn)
基于Z1510專用音視頻壓縮芯片設(shè)計(jì)的具有USB接口的實(shí)時(shí)MPEG-1音視頻壓縮卡,較傳統(tǒng)的PCI接口的MPEG-1音視頻卡具有支持熱插拔和即插即用等特點(diǎn),同時(shí)該系統(tǒng)還具備很好的可擴(kuò)展性。本文就來(lái)介紹這個(gè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。
1 硬件設(shè)計(jì)
本系統(tǒng)主要由音視頻A/D轉(zhuǎn)換單元、音視頻壓縮單元、系統(tǒng)控制單元和UBS接口單元四大部分組成,如圖1所示。模擬音視頻信號(hào)經(jīng)AK4550、SAA7113音視頻A/D轉(zhuǎn)換器后送入Z1510音視頻壓縮芯片,壓縮編碼后生成的MPEG-1碼流經(jīng)USB端口輸出。整個(gè)壓縮系統(tǒng)的控制由TMS320F2812和EPM7128AE共同完成,壓縮后的數(shù)據(jù)通過(guò)USB接口芯片PDIUSBD12輸出。
1.1 音視頻壓縮部分的電路設(shè)計(jì)
本系統(tǒng)中的MPEG-1壓縮芯片選用以色列Emblaze Semiconductor公司的Z1510。Z1510是一款高性能低成本的音視頻壓縮編碼芯片,它可完成MPEG-1音視頻壓縮、MJPEG視頻編碼以及全分辨率靜態(tài)圖像捕獲,還可對(duì)CD-ROM和VCD進(jìn)行格式化。Z1510壓縮芯片有三種系統(tǒng)配置(Master、Direct-data、Indirect-data),總共有20余種工作模式,不同的工作模式可通過(guò)加載不同的代碼來(lái)實(shí)現(xiàn)。Z1510可廣泛地應(yīng)用于VCD刻錄機(jī)、數(shù)字靜態(tài)照相機(jī)、基于PC機(jī)的視頻獲取卡、MP3播放器以及安全監(jiān)控系統(tǒng)中。它主要由視頻接口、視頻壓縮核、DSP輔助系統(tǒng)、存儲(chǔ)器接口、主機(jī)接口和串行接口、DMA控制器等六大模塊組成。
Z1510的音視頻輸入是通過(guò)視頻端口和串行接口完成的。視頻輸入端口主要接收視頻A/D轉(zhuǎn)換器產(chǎn)生的ITU-R BT.601或ITU-R BT.656格式的數(shù)字視頻信號(hào)和相應(yīng)的時(shí)鐘同步信號(hào)。Z1510有五個(gè)串行端口,包括三個(gè)輸入端口(Audio0、Audio1和CD-Drive)和兩個(gè)輸出端口(CD-Drive和SVCD decoder),每一個(gè)端口均可作為主設(shè)備端口和從設(shè)備端口,本系統(tǒng)中應(yīng)用的Audio1端口作為主設(shè)備端口,接收未壓縮的數(shù)字音頻信號(hào),同時(shí)為音頻A/D轉(zhuǎn)換器提供相應(yīng)的同步時(shí)鐘信號(hào)。
由于本系統(tǒng)使用的數(shù)字視頻數(shù)據(jù)是ITU BT.656格式,因而只需將SAA7113的VPO(7~0)和LLC管腳與Z1510視頻端口的數(shù)字視頻輸入管腳VID(7~0)和視頻輸入時(shí)鐘管腳VICLK相連即可,不需向Z1510提供行同步信號(hào)(VIVS_N)和幀同步信號(hào)(VIVS_N)。SAA7113的LLC管腳輸出的27MHz時(shí)鐘信號(hào),一路未經(jīng)分頻的信號(hào)作為Z1510內(nèi)部的數(shù)字視頻流的采樣時(shí)鐘信號(hào),輸入Z1510的視頻輸入時(shí)鐘管腳VICLK,另一路輸入分頻器MK2703的X1/CLK管腳,經(jīng)分頻器分頻后,由ACLK管腳輸出,作為音頻編碼芯片的系統(tǒng)時(shí)鐘信號(hào)MCLK,分別輸入AK4550的MCLK和Z1510的AMCLK。27MHz的數(shù)字視頻流采樣時(shí)鐘信號(hào)在Z1510內(nèi)部進(jìn)行分頻后,為工作在從模式下的AK4550提供移位時(shí)鐘信號(hào)SCLK和左右聲道時(shí)鐘信號(hào)LRCK,分別輸入AK4550的SCLK和LRCK管腳,而AK4550產(chǎn)生的數(shù)字音頻流直接輸入Z1510的Audio1端口的ASDI1管腳。
Z1510的主時(shí)鐘信號(hào)頻率為穩(wěn)定的27MHz,該時(shí)鐘信號(hào)頻率在芯片內(nèi)部被PLL1倍頻為81MHz,驅(qū)動(dòng)Z1510的視頻壓縮內(nèi)核及SDRAM。而PLL2連接到DSP內(nèi)核,該P(yáng)LL由軟件配置PLL寄存器,工作在94.5MHz,用于音頻壓縮和系統(tǒng)數(shù)據(jù)流復(fù)合。系統(tǒng)主時(shí)鐘由一個(gè)27MHz的晶體振蕩器直接提供,該晶振同時(shí)也為EPM7128AE和TMS320F2812提供時(shí)鐘信號(hào)。
Z1510的MEMORY接口支持SDRAM的讀寫,其外接的SDRAM主要用于存儲(chǔ)操作過(guò)程中輸入的數(shù)據(jù)和對(duì)壓縮后的音視頻數(shù)據(jù)進(jìn)行緩存,共支持四種SDRAM配置:1M16 2bank、8M16 2bank、4M16 4bank、8M16 4bank,其中系統(tǒng)的最小配置為1M16 2bank SDRAM。在所有的配置中,SDRAM的頻率至少為125MHz;同時(shí)在設(shè)計(jì)硬件時(shí),除相應(yīng)的數(shù)據(jù)線和地址線相連外,SDRAM的輸入管腳CS#、DQM必須接地,CKE接電源。在本設(shè)計(jì)中,SDRAM選用的是現(xiàn)代公司的HY57V161610DTC-8。
在Z1510進(jìn)行MPEG-1壓縮時(shí),它是工作在LAVE(Live Audio Video Encoding)模式。在此模式下,Z1510只能配置為間接工作(Indirect-data)狀態(tài),此時(shí)Z1510作為從設(shè)備,受主機(jī)控制,主機(jī)可以通過(guò)其HOST接口訪問(wèn)它內(nèi)部的配置和狀態(tài)寄存器,并且可以通過(guò)局部FIFO獲得壓縮后的視頻碼流。
Z1510的HOST接口的主要信號(hào)有:
HAD[15..0] 數(shù)據(jù)總線;
HCONFIG[9,8] 總線數(shù)據(jù)類型選擇;
HWR_N,HRD_N 讀寫控制,HCS_N器件片選信號(hào);
HALE在復(fù)用總線模式下,鎖定低8位地址HAD[7~0];在非復(fù)用總線模式下,指示當(dāng)前數(shù)據(jù)總線上發(fā)送的是寄存器地址還是寄存器數(shù)據(jù)。
HINT_N 中斷請(qǐng)求信號(hào),低電平有效。
Z1510可以選擇復(fù)用或非復(fù)用的Intel和Motorola總線模式,非復(fù)用總線又可分為8位和16位的總線模式。經(jīng)過(guò)與DSP的讀寫時(shí)序比較和實(shí)際調(diào)試,發(fā)現(xiàn)DSP讀寫模式與Motorola的16位非復(fù)用讀寫模式相似,使用較為方便,譯碼也較為簡(jiǎn)單,因而將主機(jī)端口配置為Motorola的16位非復(fù)用總線模式。在16位非復(fù)用總線模式下,對(duì)Z1510內(nèi)部寄存器的訪問(wèn)由兩個(gè)寄存器完成。首先IOAR地址寄存器響應(yīng)Z1510的第一個(gè)分配地址(HALE=0)和其中的數(shù)據(jù),獲得所需要的內(nèi)部寄存器地址。接著是IODR數(shù)據(jù)寄存器響應(yīng)Z1510的第二個(gè)分配地址(HALE=1)和其中的數(shù)據(jù),內(nèi)容是IOAR指向的寄存器的DATA內(nèi)容。因此在對(duì)Z1510的寄存器進(jìn)行讀寫時(shí),相當(dāng)于只占用了DSP外部拓展存儲(chǔ)空間的兩個(gè)地址位。
在存儲(chǔ)空間分配中,Z1510分在TMS320F2812外部拓展存儲(chǔ)空間(XINTF)的0區(qū)(0x00 2000~0x00 3FFF),因此需將HALE管腳在CPLD內(nèi)部通過(guò)進(jìn)位鏈與DSP的A0相連,而片選信號(hào)HCS_N需由A12、A13、A14、A15和DSP的信號(hào)經(jīng)譯碼實(shí)現(xiàn),HWR_N和HRD_N信號(hào)由A12、A13、A14、A15和DSP的信號(hào)經(jīng)譯碼實(shí)現(xiàn)。
1.2 系統(tǒng)控制單元
本系統(tǒng)使用TI公司的TMS320F2812和Altera公司的MAX7000系列的EPM7128AE實(shí)現(xiàn)系統(tǒng)的管理和控制。
TMS320F2812是基于TMS320C28xTM DSP內(nèi)核的芯片,時(shí)鐘頻率高達(dá)150MHz,具有18K的SARAM和128K的片內(nèi)Flash,另外還具有1M的外部擴(kuò)展存儲(chǔ)空間(XINTF)。TMS320F2812的外部擴(kuò)展存儲(chǔ)空間只可用作數(shù)據(jù)空間或程序空間,不支持I/O空間,它分為0、1、2、6、7五個(gè)區(qū),沒有DS、PS、IS三個(gè)信號(hào)線,取而代之的是三個(gè)區(qū)選信號(hào),其中0區(qū)和1區(qū)共用一個(gè)區(qū)選信號(hào),6區(qū)和7區(qū)共用一個(gè)區(qū)選信號(hào)。本系統(tǒng)的控制就是通過(guò)DSP的外部擴(kuò)展存儲(chǔ)空間(XINTF)實(shí)現(xiàn)的。Z1510在復(fù)位后要根據(jù)不同的工作模式進(jìn)行代碼加載,以便初始化片內(nèi)的DSP核和視頻壓縮核,變換后的代碼量有100多K,因此在DSP的外部擴(kuò)展存儲(chǔ)空間中設(shè)計(jì)了一片F(xiàn)LASH芯片MBM29LV800,用來(lái)存放代碼。
在設(shè)計(jì)中,由于SAA7113的片選信號(hào)直接拉高,而它的配置是通過(guò)TMS320F2812的GPIO模擬I2C總線實(shí)現(xiàn)的,因此不占用存儲(chǔ)空間;Z1510的控制接口地址與數(shù)據(jù)復(fù)用和USB接口芯片PDIUSBD12一樣,都只有一個(gè)地址位(占用兩個(gè)位置);只有外界FLASH芯片MBM29LV800(512K16位)占用存儲(chǔ)空間較多,因此系統(tǒng)主要存儲(chǔ)空間分配如下:
Z1510 占用Zone0 0x00 2000~0x00 2001
USB接口 占用Zone1 0x00 4000~0x00 4001
FLASH 占用Zone2 0x08 0000~0x0F FFFF
DSP的時(shí)鐘由27MHz晶體振蕩器提供,它同時(shí)給Z1510、CPLD和DSP提供時(shí)鐘,可以較好地保證系統(tǒng)操作的同步。晶振的輸出電壓一般為5V或3.3V,TMS320 F2812的外接時(shí)鐘信號(hào)電壓不應(yīng)超過(guò)1.8V,因此需要在時(shí)鐘信號(hào)線上串、并聯(lián)電阻進(jìn)行分壓。CPLD雖然外接3.3V的I/O電壓,但它可以承受5V的時(shí)鐘電壓,因此可將時(shí)鐘信號(hào)直接輸入。
由于本系統(tǒng)采用專門的視頻壓縮芯片,CPLD主要完成一些邏輯仲裁、地址解碼邏輯、控制信號(hào)的產(chǎn)生等,無(wú)需進(jìn)行一些較復(fù)雜的運(yùn)算,因而選用內(nèi)核電壓和I/O電壓均為3.3V且具有128個(gè)宏單元的EPM7128AE來(lái)實(shí)現(xiàn)。
1.3 接口單元
Z1510在進(jìn)行標(biāo)準(zhǔn)的MPEG-1音視頻壓縮時(shí),系統(tǒng)比特率一般在1.5Mbps以下。雖然最高速度12Mbps的USB1.1里的開銷包括了命令包、幀標(biāo)記和握手協(xié)議傳輸?shù)龋钥蛇_(dá)2Mbps的系統(tǒng)比特率,可以滿足系統(tǒng)設(shè)計(jì)需要。在綜合考慮性價(jià)比后,選用了Philips公司的USB1.1接口芯片PDIUSBD12。PDIUSBD12看起來(lái)就像是一個(gè)帶八位數(shù)據(jù)總線和一個(gè)地址位的存儲(chǔ)器,它提供的微處理器接口可以兼容大部分的DSP環(huán)境,其接口信號(hào)包括八位數(shù)據(jù)線D0~D7和ALE、A0、、、、,USB控制器可以分為地址/數(shù)據(jù)復(fù)用模式或單地址/數(shù)據(jù)模式,如表1所示。DSP的數(shù)據(jù)地址總線是分離的,USB控制器采用單地址/數(shù)據(jù)總線模式更容易與DSP接口。
2 軟件設(shè)計(jì)
本系統(tǒng)的軟件設(shè)計(jì)主要分兩大部分:對(duì)硬件的初始化(SAA7113、Z1510)和PC機(jī)與系統(tǒng)的實(shí)時(shí)通信。系統(tǒng)上電后,由電源輸出端的RC電路觸發(fā)CPLD里的D觸發(fā)器,對(duì)DSP進(jìn)行復(fù)位,然后由DSP對(duì)其它器件進(jìn)行復(fù)位和初始化。
2.1 硬件初始化
對(duì)SAA7113的初始化可通過(guò)將DSP的McBSP用作通用I/O腳模擬I2C總線來(lái)實(shí)現(xiàn),DSP作為主器件,SAA7113作為從器件,用McBSP的CLKR模擬SCL,FSR模擬SDA。首先設(shè)置DSP的GPFMUX寄存器的相應(yīng)位為0,使CLKR和FSR用作通用I/O腳;然后設(shè)置GPFDIR和GPFDAT寄存器的相應(yīng)位以改變CLKR和FSR的輸入輸出方向和高低電平,GPFDIR.bit=0時(shí)為輸入,相反為輸出;GPFDAT.bit=0,同時(shí)引腳為輸出時(shí)為低電平,相反為高電平。通過(guò)CLKR和FSR管腳的高低電平的變化和輸入輸出狀態(tài)的切換可以實(shí)現(xiàn)I2C協(xié)議。
Z1510的驅(qū)動(dòng)分為復(fù)位、代碼下載、內(nèi)部寄存器配置以及數(shù)據(jù)獲取四個(gè)階段。復(fù)位后,Z1510內(nèi)部的配置和狀態(tài)寄存器復(fù)位到默認(rèn)狀態(tài),所有輸出信號(hào)處于高阻狀態(tài),SDRAM視頻緩存內(nèi)容清零。具體包括硬復(fù)位和軟復(fù)位兩種,硬復(fù)位需要拉低Z1510的RESET_N的電平,軟復(fù)位可以通過(guò)寫0x55到Soft_reset寄存器(地址0x08)來(lái)實(shí)現(xiàn)。
系統(tǒng)進(jìn)行硬復(fù)位需要注意的是,上電到時(shí)鐘穩(wěn)定后,RESET_N至少要被拉低250微秒,然后主機(jī)才設(shè)置Int_enable [6]寄存器,使能RDY中斷。TMS320F2812等Z1510產(chǎn)生一個(gè)RDY中斷后寫0x20到中斷清除寄存器0x0F,清除RDY中斷,然后寫0x6E到視頻編碼核時(shí)鐘寄存器0x0A,設(shè)定其內(nèi)部DSP壓縮核工作頻率為94.5MHz。
系統(tǒng)在開始工作之前,還要進(jìn)行一個(gè)軟復(fù)位過(guò)程。TMS320F2812先向Z1510的Soft_reset寄存器(地址0x08)寫0x55,等待至少1微秒后,設(shè)置Int_enable [6]寄存器,使能RDY中斷,等Z1510產(chǎn)生一個(gè)RDY中斷后,清中斷,完成軟復(fù)位,開始代碼加載。
在Z1510內(nèi)部寄存器有一段程序空間,這段空間以塊為單位,每塊的大小是256字節(jié)。其中,DSP核程序空間為0x280~0x2BF(64 banks),視頻編碼核的二進(jìn)制代碼的裝載空間為0x000~0x004和0x00C等六個(gè)塊。裝載步驟如下:
(1)向Z1510內(nèi)部寄存器0x2E寫入0x01,表示外部的SDRAM是1M16bit;
(2)向0x0C寄存器寫0x03,使能FIFO Ready和End of Data中斷;
(3)向0x11寄存器寫0x18,設(shè)定工作模式為內(nèi)部?jī)?nèi)存寫模式;
(4)向0x10寫0x20,設(shè)定Z1510的FIFO滿為256字節(jié);
(5)向0x08寄存器寫0x04,發(fā)送開始命令;等待Ready中斷,然后清除Ready中斷;
(6)向Data _in寄存器0x01寫256個(gè)字節(jié)數(shù)據(jù);等待End of Data中斷,然后清除中斷;
(7)查程序空間的代碼是否裝載完畢,如沒有,回到(5)繼續(xù)裝載。
通過(guò)設(shè)定Z1510內(nèi)部工作寄存器的特定狀態(tài)可以使其工作在特定的模式,在本系統(tǒng)中設(shè)定Z1510工作在LAVE模式,在此模式下,Z1510從音頻和視頻A/D轉(zhuǎn)換器獲取數(shù)據(jù)并壓縮為MPEG-1碼流。Z1510正常工作后,輸出MPEG-1碼流。其輸出碼流要經(jīng)過(guò)輸出端口FIFO緩沖,每當(dāng)FIFO寫入超過(guò)半門限時(shí),產(chǎn)生中斷FRDY(FIFO Ready)通知DSP,DSP通過(guò)讀寄存器DATA_out(0x00)取走數(shù)據(jù),其半門限可由ThreshHold寄存器設(shè)定,最大256字節(jié)。FIFO滿后,DSP連續(xù)讀寄存器256次可以取走數(shù)據(jù)。Z1510的驅(qū)動(dòng)流程見圖2。
2.2 接口程序設(shè)計(jì)
在設(shè)計(jì)開發(fā)一個(gè)USB外設(shè)的時(shí)候,主要需要編寫三部分程序:①固件程序;②USB驅(qū)動(dòng)程序;③客戶應(yīng)用程序。固件編程主要完成PDIUSBD12的驅(qū)動(dòng),使DSP系統(tǒng)與外部系統(tǒng)進(jìn)行數(shù)據(jù)交換。
PDIUSBD12有三個(gè)端點(diǎn),即端點(diǎn)0、端點(diǎn)1和端點(diǎn)2,在設(shè)計(jì)中使用端點(diǎn)1和端點(diǎn)2進(jìn)行上位計(jì)算機(jī)與DSP之間的命令和數(shù)據(jù)傳輸。端點(diǎn)1和端點(diǎn)2設(shè)置成模式0,其中端點(diǎn)1進(jìn)行命令的傳輸和應(yīng)答,端點(diǎn)2用于數(shù)據(jù)的傳輸。端點(diǎn)1接收上位計(jì)算機(jī)發(fā)送過(guò)來(lái)的8字節(jié)的讀寫指令,指令正確回應(yīng)后,使用端點(diǎn)2通過(guò)FIFO返回或接收數(shù)據(jù)。
在Win32系統(tǒng)中,每一個(gè)設(shè)備對(duì)象都抽象為文件。在應(yīng)用程序設(shè)計(jì)中,只需通過(guò)幾條簡(jiǎn)單的文件操作API函數(shù),就可以實(shí)現(xiàn)與某個(gè)設(shè)備通信。主要使用的API函數(shù)有DeviceIOControl()、ReadFile()、WriteFile()。其中,DeviceIOControl()用于PC機(jī)(主機(jī))向圖像壓縮系統(tǒng)發(fā)送請(qǐng)求;ReadFile()和WriteFile()分別用于從圖像壓縮系統(tǒng)中讀出數(shù)據(jù)和寫入數(shù)據(jù)。在設(shè)計(jì)過(guò)程中必須注意的問(wèn)題是:由于USB接口是主-從方式的接口,它的一切傳輸都必須通過(guò)主機(jī)向外設(shè)發(fā)送請(qǐng)求后才能進(jìn)行,所以在使用ReadFile()、WriteFile()讀寫數(shù)據(jù)之前,必須先通過(guò)DeviceIOControl()向圖像壓縮系統(tǒng)發(fā)送請(qǐng)求,系統(tǒng)接收請(qǐng)求后才能讀寫數(shù)據(jù),開始進(jìn)行音視頻壓縮。
該音視頻壓縮系統(tǒng)具有較好的功能擴(kuò)展性,正如前面所介紹的,由于Z1510具有多種工作模式,在系統(tǒng)初始化時(shí)可根據(jù)所需工作模式加載不同的代碼,對(duì)相應(yīng)的寄存器進(jìn)行不同的初始化,通過(guò)改變工作模式,可完成單獨(dú)的視頻壓縮、音頻壓縮、靜態(tài)非壓縮或壓縮圖像獲取(PC CAMERA)等多種功能。如再在系統(tǒng)中設(shè)計(jì)大容量FLASH,還可升級(jí)為獨(dú)立的音視頻壓縮記錄系統(tǒng)。
參考文獻(xiàn)
1 SAA7113 DataSsheet. Philips, 1999
2 Z1510DataSheet. Emblaze Semiconductor, 2001
3 TMS320F2812 Data Manual. Texas Instruments, 2003
4 褚振勇,翁木云.FPGA設(shè)計(jì)及應(yīng)用.西安:西安電子科技大學(xué)出版社, 2003
評(píng)論