H.264視頻解碼芯片中與濾波相關(guān)的存儲器的設計
4 SRAM 的規劃與設計
在H.264 解碼過(guò)程中,數據由熵解碼經(jīng)過(guò)運動(dòng)補償后再通過(guò)環(huán)路濾波最終送到存儲器中,之后顯示解碼芯片從存儲器中不斷的提取數據送到顯示器上,最終完成數據的解碼,如圖3 所示。在濾波的過(guò)程中,宏塊中的數據頻繁地被調用。而SRAM 的讀寫(xiě)速度快的特點(diǎn)能很好地適用這一要求。因為在H.264 中最小的單元為block,運動(dòng)矢量等都是以block 為單位來(lái)進(jìn)行傳遞。因此以block 為單位來(lái)進(jìn)行數據的存取會(huì )帶來(lái)很大的方便。本設計中各個(gè)SRAM 每一個(gè)地址存放一個(gè)block 單元的數據(16 個(gè)像素點(diǎn)),即采用128bit 的SRAM。
圖3 DRAM 與其它模塊之間的數據交互
在H.264 中運動(dòng)補償結束后的數據交由環(huán)路濾波運算后寫(xiě)入DRAM, 我們把寫(xiě)入DRAM 的這一過(guò)程稱(chēng)為Store 過(guò)程,由Store 模塊負責。由圖3 可以看出MC 與Deblock 是一個(gè)串聯(lián)的關(guān)系。為了提高解碼的速度,我們將運動(dòng)補償與環(huán)路濾波并行執行,即當前解碼的結束并不以環(huán)路濾波的結束為標志,而當前宏塊的運動(dòng)補償一結束我們就可以開(kāi)始下一個(gè)宏塊的解碼。經(jīng)過(guò)大量的實(shí)驗發(fā)現:MC 的時(shí)間遠比block的時(shí)間大很多,當后一個(gè)模塊要進(jìn)行濾波時(shí)濾波模塊早已準備完畢。最后對存儲模塊我們也同樣的用并行的思想來(lái)加快解碼的速度。結果當作MBx 的MC 時(shí),做MB(x-1)的濾波,同時(shí)MB(x-2)存儲。此時(shí)需要注意MB(x-1)的濾波和MB(x-2)的存儲并不是同時(shí)開(kāi)始。因為做MB(x-1)的濾波時(shí)也會(huì )影響到MB(x-2)中的數據。
因此我們要等MB(x-1)的第一條垂直邊濾波結束后才開(kāi)始MB(x-2)的存儲。具體的時(shí)間關(guān)系如圖4 所示。
圖4 各個(gè)模塊之間的時(shí)序關(guān)系圖
?。?)濾波前數據的存儲及濾波結束后數據的存儲
由于設計中采用此種流程,我們需要3 片SRAM來(lái)存儲MC 的運算結果。這3 片SRAM 交替地進(jìn)行MC、Deblock 和Store。我們稱(chēng)這3 片SRAM 為SRAM_M(jìn)B,濾波結束后的數據也存儲在此SRAM 中,在經(jīng)Store 模塊將此數據存儲到DRAM 中去。因為濾波結束時(shí),恰好原來(lái)SRAM_M(jìn)B 中的數據也已經(jīng)成為無(wú)效數據。這里需要注意,由于有幀場(chǎng)自適應的情況存在,濾波結束后的數據如果幀場(chǎng)情況不一樣,我們還需要根據數據不同的情況進(jìn)行適當的幀場(chǎng)轉化,之后再將數據存入DRAM。
?。?)垂直濾波后的數據的存儲
我們都知道濾波過(guò)程是一個(gè)先垂直后水平的過(guò)程,因此我們需要有一片SRAM 來(lái)存儲水平濾波的結果。這片SRAM 就叫SRAM_BUFFER。因為水平濾波時(shí)正在從SRAM_M(jìn)B 中讀取數據,同一時(shí)間不能同時(shí)向SRAM 中讀取、寫(xiě)入數據。因此我們用SRAM_BUFFER 來(lái)暫存垂直濾波結束后的數據。水平濾波時(shí)則從SRAM_BUFFER 中讀取數據, 濾波后存儲到SRAM_M(jìn)B 中。
5 總結
本文對H.264 解碼芯片中的濾波、存儲模塊作了深入的分析。并根據各個(gè)時(shí)間數據的特點(diǎn)作相應的存儲器的設計, 這種設計方法經(jīng)過(guò)驗證能很好地處理H.264 中濾波及存儲時(shí)的數據的調度。整個(gè)濾波過(guò)程約52 個(gè)周期就可以完成。在MBAFF 情況時(shí)各種數據的轉化時(shí)鐘周期控制在70 個(gè)以?xún)?。這種設計符合要求,并在FPGA 上驗證后能夠正常的運行,運行時(shí)鐘達到60MHz,能實(shí)時(shí)地完成對高清圖像的解碼。
評論