基于DSP和FPGA的視頻編碼器
1 硬件設(shè)計(jì)方案
基于TI公司的圖像開發(fā)工具包(Imaging Developer Kit,即IDK)[2]架構(gòu),設(shè)計(jì)了視頻編碼器的硬件平臺(tái)。從整體上來講,視頻編碼器的硬件實(shí)現(xiàn)由DSP和FPGA兩個(gè)模塊組成,其邏輯框圖如圖1所示。由于視頻壓縮編碼計(jì)算量很大,為了盡可能提高視頻壓縮幀率,由DSP專門負(fù)責(zé)視頻壓縮編碼,而視頻采集、YUV轉(zhuǎn)換和編碼器I/O接口等其它功能則交由FPGA模塊來實(shí)現(xiàn)。
如圖1所示,用戶控制命令(例如視頻壓縮模式)由FPGA模塊首先截獲,然后FPGA模塊向DSP模塊產(chǎn)生外部中斷,DSP在響應(yīng)中斷時(shí)讀取存儲(chǔ)在FPGA中的用戶控制命令字,然后DSP解析命令字,并根據(jù)用戶要求的視頻格式、幀圖像分辨率和視頻壓縮碼流速率進(jìn)行視頻壓縮編碼。
模擬視頻信號(hào)經(jīng)視頻解碼器轉(zhuǎn)換為裸視頻數(shù)據(jù)流,該數(shù)據(jù)流(或從數(shù)字?jǐn)z像機(jī)直接獲得的數(shù)據(jù)流)經(jīng)FPGA預(yù)處理后送入幀存中。DSP讀取幀存中的數(shù)據(jù)進(jìn)行壓縮編碼,壓縮后的視頻數(shù)據(jù)送入FIFO中,最后FIFO中的數(shù)據(jù)通過串口送給信道編碼器。
FPGA模塊的邏輯框圖見圖2。如圖2所示,視頻解碼器首先將模擬視頻信號(hào)量化為復(fù)合的YUV數(shù)據(jù),然后經(jīng)FPGA進(jìn)行YUV分離(和濾波)后送到幀存(圖1中的SDRAM1)中,C6201使用DMA通道(異步方式)通過FPGA讀取幀存中的YUV數(shù)據(jù)進(jìn)行壓縮編碼。幀存(SDRAM1)在刷新(refresh)或缺頁(pagemiss)時(shí)會(huì)引起DMA讀等待,為了平滑這種等待引起的DMA讀數(shù)據(jù)的抖動(dòng),設(shè)計(jì)時(shí)在FPGA的內(nèi)部實(shí)現(xiàn)了一個(gè)高速FIFO。視頻幀存采用了乒乓結(jié)構(gòu),將8M字節(jié)SDRAM分為兩個(gè)4M字節(jié)的地址空間(每一個(gè)地址空間可以容納一幀YUV視頻數(shù)據(jù)(720×576×115字節(jié))),一個(gè)地址空間用于存儲(chǔ)當(dāng)前正在采集的視頻數(shù)據(jù),另一個(gè)地址空間用于DSP的數(shù)據(jù)讀取。在壓縮CCIR601格式的視頻圖像(每秒25幀)時(shí),由于DSP的處理速度(大約每秒10幀)慢于視頻采集的速度,所以FPGA模塊在采集完一幀數(shù)據(jù)進(jìn)入等待狀態(tài),直到DSP壓縮完上一幀視頻數(shù)據(jù)時(shí),這2個(gè)地址空間才進(jìn)行互換。
DSP模塊接收FPGA模塊送過來的YUV視頻數(shù)據(jù),然后進(jìn)行視頻壓縮編碼,最后將壓縮的碼流再轉(zhuǎn)交給FPGA模塊,由FPGA模數(shù)據(jù)發(fā)送出去。DSP模塊的存儲(chǔ)單元(圖1中的SDRAM2)用來存放參考幀數(shù)據(jù)和中間運(yùn)算結(jié)構(gòu)。MPEG-4壓縮編碼算法指令存放在PROM中,為縮短取指時(shí)間,編碼器在啟動(dòng)時(shí)已將指令從PROM讀到片內(nèi)存儲(chǔ)器中。MPEG壓縮碼流是變速碼流(VBR),而當(dāng)該碼流在恒定速率(CBR)的信道上發(fā)送時(shí),需要一個(gè)FIFO緩存來平滑編碼器輸出碼率的波動(dòng)。
該設(shè)計(jì)的特點(diǎn)主要表現(xiàn)在以下2個(gè)方面:
①可擴(kuò)展性好。FPGA模塊除了負(fù)責(zé)數(shù)據(jù)I/O功能外,還作為協(xié)處理器使用,可根據(jù)需要增加FPGA的門數(shù)來實(shí)現(xiàn)原來由DSP完成的功能,例如Huffman編碼、運(yùn)動(dòng)估計(jì)等;
②靈活的視頻壓縮編碼格式控制,編碼器能夠?qū)崟r(shí)地根據(jù)用戶的要求進(jìn)行壓縮編碼。
評(píng)論