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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 如何實現(xiàn)高性能的DSP處理

          如何實現(xiàn)高性能的DSP處理

          作者: 時間:2010-01-07 來源:網(wǎng)絡(luò) 收藏

            指令和數(shù)據(jù)高速緩存為Blackfin器核提供了最高帶寬的傳輸路徑,但高速緩存存在的問題是它不能預(yù)測程序接下來需要的究竟是哪些數(shù)據(jù)和指令,因此,高速緩存提供了一些功能,使用戶可以控制高速緩存的操作。在Blackfin器中一些關(guān)鍵的指令段就可以鎖定到高速指令緩存中,這樣在需要的時候可以直接使用。

            值得注意的是,當(dāng)高速緩存決定需要保留哪些指令時,它會自動保留最近使用最多的指令段。由于軟件花費大部分的時間在循環(huán)上,這樣程序往往會重復(fù)訪問相同的指令。因此,在不需要任何用戶干預(yù)情況下,指令高速緩存可以大大提高系統(tǒng)性能。

            此外,除了高速指令緩存的功能外,高速數(shù)據(jù)緩存還提供了“直寫”和“回寫”模式。在“直寫”模式中,在高速緩存中對數(shù)據(jù)的修改要傳送到外部存儲器中。總之,編程最好開始采用“回寫”模式,可以提高10-15%的效率,在大多數(shù)算法中,比“直寫”模式更加有效率。如果數(shù)據(jù)在多種資源中需要共享,由于要維護數(shù)據(jù)的一致性,因此采用“直寫”模式也是有用的。比如,在A-BF561器中,要兩個處理器核數(shù)據(jù)的共享,則“直寫”模式就十分有用。在單核處理器中,如果DMA控制器和高速緩存訪問同樣的數(shù)據(jù),這種模式也是有益的。

            利用DMA提升性能

            DMA是提高系統(tǒng)性能的另一個有效工具。因為DMA的訪問獨立于處理器核,處理器核可以專注于處理數(shù)據(jù)。在理想的配置中,處理器核只需要設(shè)置DMA控制器,并在數(shù)據(jù)傳輸完畢時響應(yīng)中斷即可。

            通常,高速外設(shè)和其他大多數(shù)外設(shè)都具有DMA傳輸能力。某些DMA控制器也允許外部存儲器與內(nèi)部存儲器,以及存儲器空間內(nèi)的數(shù)據(jù)傳遞。若設(shè)計者仔細地設(shè)計系統(tǒng),將取得巨大的性能提升,因為任何DMA控制器傳輸?shù)臄?shù)據(jù)都不需要處理器核“操心”。

            Blackfin處理器支持二維DMA的傳輸,如圖1所示。左側(cè)顯示的是輸入緩沖區(qū)數(shù)據(jù),紅、綠、藍三基色數(shù)據(jù)交替放置。一維到二維的DMA轉(zhuǎn)換將交替的數(shù)據(jù)轉(zhuǎn)換成獨立的紅、綠、藍數(shù)據(jù)。圖1的左下角為讀入數(shù)據(jù)的偽程序代碼。如果沒有DMA控制器,這些數(shù)據(jù)傳輸就只能由處理器核完成。使用DMA 控制器后,則DMA負(fù)責(zé)數(shù)據(jù)傳輸,傳輸完畢并中斷處理器核,處理器核則可解放出來做其他任務(wù),如數(shù)據(jù)處理等。

            圖1:二維DMA存儲器訪問模式。



          關(guān)鍵詞: 處理 DSP 高性能 實現(xiàn) 如何

          評論


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