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