<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > 軟硬件協(xié)同設(shè)計在H.264解碼器設(shè)計中的應(yīng)用

          軟硬件協(xié)同設(shè)計在H.264解碼器設(shè)計中的應(yīng)用

          作者: 時間:2006-11-06 來源:網(wǎng)絡(luò) 收藏

          摘 要:作為SoC設(shè)計的三大關(guān)鍵支撐技術(shù)之一,技術(shù)已經(jīng)得到了越來越廣泛的應(yīng)用。針對H.解碼芯片的設(shè)計,本文提出了一種、仿真以及驗證的系統(tǒng)模型。設(shè)計實踐證明,有效地提高了設(shè)計效率,加快了開發(fā)進度。
          關(guān)鍵詞:軟硬件協(xié)同設(shè)計;H.;SoC

          引言
          H./AVC標準是由ISO/IEC的運動圖像專家組(MPEG)和ITU-T的視頻編碼專家組(VCEG)共同制訂的新一代圖像壓縮標準,它具有一系列優(yōu)于MPEG4和H.263的新特性,在相同的重建圖像質(zhì)量下,能比H.263節(jié)約50%左右的碼率。但是,在獲得優(yōu)越性能的同時,H.264的計算復(fù)雜度卻大大增加。據(jù)估計,其編碼的計算復(fù)雜度大約相當(dāng)于H.263的3倍,解碼復(fù)雜度大約相當(dāng)于H.263的2倍。在這種情況下,如果用純軟件的方式進行實時解碼就會顯得力不從心,因此需要由軟件結(jié)合硬件加速器來完成實時的編解碼任務(wù)。本文提出了一種基于軟硬件協(xié)同設(shè)計技術(shù)的H.264解碼芯片的SoC設(shè)計方案。

          軟硬件協(xié)同設(shè)計理論

          SoC設(shè)計主要有3個關(guān)鍵的支撐技術(shù):
          1. 軟硬件協(xié)同設(shè)計技術(shù):它主要是面向不同目標系統(tǒng)的軟件和硬件的功能劃分理論和設(shè)計空間搜索技術(shù)。
          2. IP模塊復(fù)用技術(shù)。IP是指那些集成度較高并具有完整功能的單元模塊,如MPU、DSP、DRAM、Flash等模塊。IP模塊的再利用除了可以縮短芯片的設(shè)計時間外,還能大大降低設(shè)計和制造的成本,提高可靠性。
          3. 模塊以及模塊界面間的綜合分析和驗證技術(shù)。綜合分析和驗證是難點,要為硬件和軟件的協(xié)同描述、驗證和綜合提供一個自動化的集成開發(fā)環(huán)境。


          圖1 軟硬件協(xié)同設(shè)計的基本流程

          其中軟硬件協(xié)同設(shè)計技術(shù)往往成為影響開發(fā)周期以及系統(tǒng)性能的關(guān)鍵因素。軟硬件協(xié)同設(shè)計的基本流程如圖1所示。設(shè)計初期需要對設(shè)計進行系統(tǒng)級建模。在經(jīng)過分析后對軟硬件進行適當(dāng)?shù)膭澐?,于是系統(tǒng)設(shè)計分為軟件設(shè)計和硬件設(shè)計兩條路線。為了保證軟硬件設(shè)計的協(xié)同,在設(shè)計的各個時期還要對軟硬件接口進行設(shè)計。當(dāng)軟硬件設(shè)計完成后,就可將設(shè)計中軟件和硬件部分加以集成以完成最后的設(shè)計。如果此時的設(shè)計不能完全滿足設(shè)計目標,還需要將整個架構(gòu)進行重新劃分,進行迭代直到設(shè)計滿足要求。


          圖2 H.264解碼功能模塊劃分

          系統(tǒng)軟硬件劃分
          采用軟硬件協(xié)同設(shè)計,在系統(tǒng)模型建立以后,就要對系統(tǒng)的軟硬件進行劃分。一部分工作需要交給嵌入式處理器用軟件來完成,而剩余的部分則要用硬件來實現(xiàn)。在劃分時,要考慮目標體系結(jié)構(gòu)、軟硬件實現(xiàn)所占用的成本等各種因素。劃分完后,產(chǎn)生軟硬件分割界面,供軟硬件仿真、驗證和測試使用。

          H.264的解碼功能模塊如圖2所示,整個解碼的過程由碼流輸入單元、熵解碼單元、反量化及反離散余弦變換單元、幀內(nèi)預(yù)測單元、幀間預(yù)測單元、去塊效應(yīng)單元、內(nèi)存控制單元、顯示輸出單元、圖像信息管理單元、解碼過程控制單元和內(nèi)存等功能單元組成。

          對高清碼流進行解碼時,的工作頻率一般為200MHz,此時對一個宏塊圖像的信息進行處理的時間平均只有900個時鐘,實時性要求很高,因此必須將軟件的工作量減小。設(shè)計中采用嵌入式處理器控制解碼過程能給系統(tǒng)設(shè)計帶來更大的靈活性,而圖像信息管理只涉及針對圖像級別的計算,在對一幀圖像進行解碼時只會計算一次,故將這兩部分任務(wù)交給嵌入式處理器完成。為了保證軟硬件負荷的平衡,還將碼流輸入和熵解碼任務(wù)交給嵌入式處理器處理。圖2中灰色的模塊則需要用專門的硬件加速模塊來完成。


          圖3 H.264軟硬件協(xié)同設(shè)計的軟件仿真模型

          系統(tǒng)的軟硬件協(xié)同設(shè)計

          H.264軟硬件協(xié)同設(shè)計的仿真平臺

          當(dāng)系統(tǒng)設(shè)計的軟硬件劃分完成后,設(shè)計就分成軟件設(shè)計和硬件設(shè)計兩條路線,為了保證在軟、硬件設(shè)計過程中能夠隨時進行聯(lián)合仿真,本文建立了如圖3所示的仿真模型。由圖中的硬件設(shè)計部分可知,嵌入式處理器將通過片內(nèi)高速總線對掛在總線上的各個硬件加速器進行控制。為了使得軟硬件劃分的界面更加清晰,嵌入式處理器解碼時產(chǎn)生的數(shù)據(jù)通過連接在片內(nèi)高速總線上的動態(tài)存儲控制器存入DRAM中,而后各個硬件加速器通過片內(nèi)高速總線將各自需要的數(shù)據(jù)從動態(tài)存儲器中讀出,進行相應(yīng)的解碼??紤]到片內(nèi)高速總線的負擔(dān)比較重,設(shè)計中將總線位寬設(shè)定為64bit,以提高數(shù)據(jù)傳輸?shù)乃俣取?BR>
          為了保持軟件與硬件設(shè)計的協(xié)同性,在進行硬件加速模塊設(shè)計的同時,軟件設(shè)計也需要作相應(yīng)的改動。如圖3所示,在已經(jīng)劃分好的由嵌入式處理器完成的軟件模型和將由硬件實現(xiàn)的軟件模型之間,加入數(shù)據(jù)打包和數(shù)據(jù)解包單元。數(shù)據(jù)打包單元是為了生成軟件仿真所需要的輸入向量,數(shù)據(jù)解包單元用于將打包后的數(shù)據(jù)還原,作為將由硬件實現(xiàn)的軟件模型的輸入,以便模型能夠生成硬件設(shè)計部分進行軟仿真所需要的參照向量。

          在軟件仿真時期,軟件與硬件的接口主要通過數(shù)據(jù)打包單元完成。各個硬件加速器解碼所需的數(shù)據(jù)是從動態(tài)存儲器獲取的,而這些數(shù)據(jù)是由嵌入式處理器通過片內(nèi)高速總線事先存入動態(tài)存儲器中的。于是在數(shù)據(jù)打包單元的幫助下,軟件模型就可以用打包單元模擬DRAM輸出數(shù)據(jù),而后硬件設(shè)計中就可以將這些數(shù)據(jù)加載到自己的軟件仿真測試平臺中,供其軟件仿真使用。為了驗證硬件設(shè)計的正確性,在硬件設(shè)計中還加入了測試單元。測試單元將硬件解碼的數(shù)據(jù)暫存到其內(nèi)部緩存中,測試平臺中的解碼數(shù)據(jù)檢測單元就可以通過片內(nèi)總線將解碼后的數(shù)據(jù)讀回,與軟件模型生成的參照向量進行比較。于是,通過軟件仿真便可以初步驗證硬件設(shè)計的正確性??紤]到在硬件與軟件協(xié)同仿真完成后,要通過PC對設(shè)計進行加速驗證,本文在硬件設(shè)計中加入了PCI總線到片內(nèi)高速總線橋接器。

          H.264解碼器軟硬件協(xié)同設(shè)計的加速驗證環(huán)節(jié)
          由于解碼器設(shè)計的規(guī)模比較大,硬件設(shè)計進行軟件仿真的速度比較慢,而且在前期設(shè)計中軟件和硬件都是通過生成的輸入向量和參照向量的方式進行耦合的。為了加快仿真的速度,并為嵌入式處理器和硬件加速器的集成做進一步的準備,設(shè)計中將圖3所示的仿真模型演變成了圖4所示的模型。

          在設(shè)計完成并通過軟件仿真后,硬件設(shè)計被綜合成網(wǎng)表文件下載到FPGA中。系統(tǒng)通過PCI 總線到片內(nèi)總線橋接器與PC相連,PC模擬嵌入式處理器的軟件工作,并通過PCI總線將控制信號以及解碼數(shù)據(jù)送到FPGA內(nèi)部的片內(nèi)高速總線上,由硬件模塊完成最終的解碼任務(wù)。

          為了驗證設(shè)計的正確性,PC可以通過PCI總線將硬件解碼后的數(shù)據(jù)從測試單元讀出,與圖3模型中生成的參照向量進行比較,驗證解碼的正確性。由于在FPGA中硬件仿真的速度遠高于軟件仿真,因此使驗證的速度得以加快。


          圖4 H.264解碼器軟硬件協(xié)同設(shè)計的加速驗證模型

          H.264解碼器軟硬件協(xié)同設(shè)計的系統(tǒng)集成
          通過如圖4所示的驗證環(huán)節(jié)后,設(shè)計的正確性以及軟硬件設(shè)計的協(xié)同性得到了進一步的驗證。為了方便軟、硬件的集成,本文將圖4中的設(shè)計模型進一步進行了修改。圖5所示的設(shè)計模型為H.264解碼器軟硬件集成后的最終系統(tǒng)評估和設(shè)計驗證模型??梢?,在經(jīng)過PC模擬嵌入式處理器行為與硬件聯(lián)合進行硬件仿真后,嵌入式處理器通過片內(nèi)高速總線與硬件系統(tǒng)進行了連接,最終完成了軟硬件的集成。


          圖5 H.264解碼器的最終系統(tǒng)評估和設(shè)計驗證模型

          此時系統(tǒng)仍使用PCI接口對碼流進行輸入,并將解碼后的數(shù)據(jù)從測試單元讀入PC,與圖3模型中生成的參照向量進行比較,對最終設(shè)計的正確性進行驗證。當(dāng)驗證完成后測試單元將被移除。

          當(dāng)然此時的設(shè)計不一定能完全滿足設(shè)計要求,如果沒有完全達到設(shè)計的要求,那么整個設(shè)計將從軟硬件劃分步驟重新進行,一次次進行迭代直到滿足最終的要求。

          結(jié)語
          由于采用了軟硬件協(xié)同設(shè)計技術(shù),整個SoC系統(tǒng)的軟件設(shè)計和硬件設(shè)計能夠方便地進行聯(lián)合仿真以及測試。在整個設(shè)計過程中,軟件設(shè)計和硬件設(shè)計能夠很好地協(xié)同,當(dāng)軟件或硬件的一方需要改動的時候,另一方能夠及時地進行相應(yīng)的改動。同時軟件設(shè)計還能在設(shè)計的各個階段為硬件設(shè)計提供必要的驗證數(shù)據(jù),使得軟件與硬件設(shè)計能夠進行快速有效的集成,從而減小了系統(tǒng)在開發(fā)過程中的風(fēng)險,提高了系統(tǒng)設(shè)計的正確性,加快了開發(fā)的速度。
            
          參考文獻:
          1 Joint Video Team (JVT) of ISO/IEC MPEG ITU-T VCEG. Proposed Draft Errata List with Revision-Marked Corrections for H.264/AVC[M], 2003.12.
          2 畢厚杰. 新一代視頻壓縮編碼標準―H.264/AVC[M]. 北京:人民郵電出版社,2005.5.
          3 (美)Rochit Raj Suman. System On Chip:Design and Test. 于敦山,盛世敏,田澤譯. 北京:北京航空航天大學(xué)出版社,2003
          4 郭鵬飛. SoC設(shè)計中的軟硬件協(xié)同設(shè)計. 中國電子站,2005.02.11



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();