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

          新聞中心

          EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 數(shù)字語(yǔ)音解碼器的低功耗設(shè)計(jì)策略

          數(shù)字語(yǔ)音解碼器的低功耗設(shè)計(jì)策略

          作者: 時(shí)間:2010-09-10 來(lái)源:網(wǎng)絡(luò) 收藏

          在本設(shè)計(jì)里主要根據(jù)SoC平臺(tái)的資源和指令集特點(diǎn),使用軟硬件協(xié)同設(shè)計(jì)方法在C代碼轉(zhuǎn)化為匯編代碼時(shí),通過(guò)分析標(biāo)準(zhǔn)C算法發(fā)現(xiàn),大部分循環(huán)和函數(shù)的調(diào)用存在冗余,頻繁的函數(shù)調(diào)用操作(壓棧出棧)占用了CPU的部分處理時(shí)間。在匯編代碼中可以通過(guò)循環(huán)展開(kāi)以減少不必要的循環(huán)判斷,其基本原則的原始代碼為:普通的單循環(huán),一個(gè)周期執(zhí)行一次乘累加(MAC)指令,優(yōu)化后進(jìn)行了4次循環(huán)展開(kāi)。在優(yōu)化后的代碼中,4個(gè)MAC被同時(shí)使用,并且在作乘累加時(shí),提取下次運(yùn)算的數(shù)據(jù),消除了流水線等待,充分應(yīng)用了硬件資源,提高了效率。除了循環(huán)展開(kāi),在某些情況下進(jìn)行循環(huán)合并也可提高效率。主要原因是每個(gè)循環(huán)體均需要有控制指令,減少循環(huán)的個(gè)數(shù)自然會(huì)減少控制指令的條數(shù)。注意兩個(gè)合并的循環(huán)必須有相同的循環(huán)數(shù)。
          對(duì)于在代碼里多次用到的函數(shù),應(yīng)考慮用調(diào)用指令,這樣可以大大減少代碼的體積;而對(duì)于只調(diào)用少次的函數(shù),則宜嵌入主函數(shù)中,因?yàn)樗粌H可以減少傳參過(guò)程中的指令,而且可以減少調(diào)用函數(shù)的壓棧出棧操作。當(dāng)然,對(duì)于一些大而復(fù)雜的函數(shù),雖然它只被調(diào)用1次,但由于寄存器的數(shù)目有限,如果考慮直接嵌入主函數(shù),可能要頻繁地做push和pop操作,反而得不償失,這時(shí)就應(yīng)該用調(diào)用指令。
          如果有些處理比較復(fù)雜,在整個(gè)解碼過(guò)程中運(yùn)算量大且耗時(shí)長(zhǎng),有必要設(shè)計(jì)相關(guān)硬件協(xié)處理器,通過(guò)匯編指令直接操作協(xié)處理器,既可以提高效率減少運(yùn)算量也有利于控制功耗,但成本會(huì)增加。這種處理方法在實(shí)時(shí)影響明顯的模塊尤其關(guān)鍵和有效。例如在MP3的解碼中,通過(guò)增加矩陣乘法器以提高子帶綜合濾波的處理速度,取得明顯效果:可減少運(yùn)算時(shí)間91%。這種軟硬件協(xié)同的設(shè)計(jì)手段在語(yǔ)音解碼器中多處用到。
          在算法級(jí)中還涉及其他方面的低功耗設(shè)計(jì),如減少存儲(chǔ)器的存取次數(shù),縮短片選信號(hào)的寬度等方面的考慮,本設(shè)計(jì)也做了相應(yīng)的處理。總的說(shuō)來(lái),算法級(jí)的優(yōu)化設(shè)計(jì)在降低系統(tǒng)功耗方面潛力大,對(duì)降低整個(gè)語(yǔ)音解碼器的功耗具有重要意義。
          1.3 結(jié)構(gòu)級(jí)低功耗設(shè)計(jì)策略
          在結(jié)構(gòu)級(jí),降低功耗最重要的策略是利用并行處理或流水線技術(shù)。流水優(yōu)化后,還可以減少中間數(shù)據(jù)的讀取操作,且比串行處理對(duì)存儲(chǔ)器的讀取操作減少約50%,這對(duì)降低系統(tǒng)功耗大有裨益。
          由于語(yǔ)音解碼的模塊較多,通過(guò)研究可以發(fā)現(xiàn),通過(guò)簡(jiǎn)單的消除數(shù)據(jù)相關(guān)后各模塊可以流水操作,減少了解碼的時(shí)間,從而降低實(shí)時(shí)處理的時(shí)鐘頻率;在多聲道語(yǔ)音處理中,可以使用多聲道并行處理,增加處理模塊以減少處理時(shí)間。在MP3解碼中,立體聲處理之后,左聲道的后續(xù)處理(混疊重建、IMDCT和子帶綜合濾波等)和右聲道的后續(xù)處理可以并行進(jìn)行,由于IMDCT(逆改進(jìn)離散余弦變換)和子帶綜合濾波是解碼中運(yùn)算量最大的部分,左右聲道的并行性幾乎可以把系統(tǒng)的處理時(shí)間減少一半。
          為了提高處理速度,還可以挖掘耗時(shí)長(zhǎng)的模塊的內(nèi)部并行處理潛力。例如在IMDCT處理是MP3和ACC語(yǔ)音處理中運(yùn)算量大耗時(shí)長(zhǎng)的模塊??梢栽贗MDCT內(nèi)部放置2個(gè)乘法器,這樣可以同時(shí)運(yùn)算兩列數(shù)據(jù),速度提高1倍。
          顯然通過(guò)增加硬件的模式提高處理速度并未減少運(yùn)算量,但提高了處理速度,其代價(jià)就是增加了芯片面積,導(dǎo)致成本上升,處理時(shí)必須綜合考慮,以達(dá)到較好的性價(jià)比。
          在電路級(jí)和工藝級(jí)的低功耗設(shè)計(jì)技術(shù)主要是全定制集成電路設(shè)計(jì)技術(shù)。全定制的設(shè)計(jì)可以將硅片充分利用,布局、布線、排版組合等均需要反復(fù)斟酌調(diào)整,按最佳尺寸、最合理布局、最短連線、最便捷引腳等設(shè)計(jì)原則設(shè)計(jì)版圖,與同樣功能而采用自動(dòng)布局布線方法實(shí)現(xiàn)的電路相比較,手工設(shè)計(jì)電路可以節(jié)省一半以上的芯片面積,尤其是使用基于鎖存器的手工布局布線代替基于D觸發(fā)器自動(dòng)布局布線,降低面積
          的同時(shí)系統(tǒng)功耗減少了約88%。

          2 結(jié)論
          首先分析了CMOS集成電路的功耗物理組成,得到其主要功耗。其次,SoC低功耗設(shè)計(jì)的各種級(jí)別層次采用不同的設(shè)計(jì)方法,由此重點(diǎn)分析了在語(yǔ)音解碼中各層次采取各種策略以降低系統(tǒng)功耗,并取得了初步效果。系統(tǒng)級(jí)使用雙向不交疊時(shí)鐘技術(shù),可以將運(yùn)算主頻降低50%;算法級(jí)主要使用匯編語(yǔ)言重寫(xiě)和優(yōu)化原代碼,將MP3解碼的C代碼轉(zhuǎn)為匯編代碼后,從原來(lái)的86 Kb降為13 Kb,AMR解碼的C代碼轉(zhuǎn)為匯編代碼后,從原來(lái)的158Kb降為25 Kb;在結(jié)構(gòu)級(jí),增加協(xié)處理器進(jìn)行并行計(jì)算,在IMDCT內(nèi)部放置2個(gè)乘法器,這樣可以同時(shí)計(jì)算兩列數(shù)據(jù),速度提高1倍,MP3的解碼中,通過(guò)增加矩陣乘法器以提高子帶綜合濾波的處理速度,可減少91%的運(yùn)算時(shí)間。

          本文引用地址:http://www.ex-cimer.com/article/166578.htm

          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: 編解碼器 音頻

          評(píng)論


          相關(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); })();