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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > SoPC系統(tǒng)設(shè)計(jì)的綜合優(yōu)化方案

          SoPC系統(tǒng)設(shè)計(jì)的綜合優(yōu)化方案

          作者: 時(shí)間:2010-06-12 來源:網(wǎng)絡(luò) 收藏


          根據(jù)器件內(nèi)3種存儲(chǔ)器的各自特點(diǎn),結(jié)合片內(nèi)的邏輯資源分布,在片內(nèi)了5個(gè)同步FIFO,其中4個(gè)長(zhǎng)度32位、存儲(chǔ)深度256字的FIFO作為64位PCI傳輸?shù)木彺?,另一個(gè)長(zhǎng)度32位,存儲(chǔ)深度為2 048字。M512存儲(chǔ)塊主要用于內(nèi)部FIFO的,在配置片內(nèi)FIFO時(shí)選擇M512存儲(chǔ)塊類型。1個(gè)32位長(zhǎng)、存儲(chǔ)深度256字的FIFO占用的邏輯資源為30個(gè)LUT單元、15個(gè)M512存儲(chǔ)塊、134個(gè)REG單元。4個(gè)這樣的FIFO占用60個(gè)M512存儲(chǔ)塊、120個(gè)LUT單元。536個(gè)REG單元。而1個(gè)32位長(zhǎng)、2 048字存儲(chǔ)深度的FIFO占用的邏輯資源為114個(gè)M512存儲(chǔ)塊、63個(gè)LUT單元、128個(gè)REG單元。這樣,設(shè)計(jì)中的FIFO總共占用174個(gè)M512存儲(chǔ)塊,相比表1中EP2S60器件329個(gè)M512存儲(chǔ)塊,占用率為52.9%,完全可以在片內(nèi)設(shè)計(jì)實(shí)現(xiàn)。

          類似計(jì)算機(jī),軟CPU Nios II也需要配置片上的ROM和片上RAM,如圖2所示。片上ROM設(shè)計(jì)存儲(chǔ)器類型為M4K,數(shù)據(jù)寬度32位,深度為32 KB,讀延遲1。片上RAM存儲(chǔ)器類型同樣為M4K,數(shù)據(jù)寬度32位,深度設(shè)計(jì)為16 KB,讀延遲1。



          片上ROM主要用于上電后程序從外部存儲(chǔ)器加載完成后的程序存儲(chǔ),是IDE主程序開始執(zhí)行的地方。在Nios II自動(dòng)分配的地址中,一般起始地址為0x00000000,目的地址為設(shè)計(jì)ROM容量的大小。片上RAM主要作為程序運(yùn)行的緩存和程序異常時(shí)的暫存,相當(dāng)于計(jì)算機(jī)中的內(nèi)存。在IDE編程設(shè)置中,要對(duì)片上ROM和片上RAM的使用進(jìn)行具體的設(shè)置,如圖3所示。



          對(duì)程序存儲(chǔ)器和只讀數(shù)據(jù)存儲(chǔ)器,設(shè)置為使用片上ROM。對(duì)讀寫數(shù)據(jù)存儲(chǔ)器、堆存儲(chǔ)器和堆棧存儲(chǔ)器,設(shè)置使用片上RAM存儲(chǔ)器。這樣,可以作到有效的存儲(chǔ)器配置。

          2.4 針對(duì)NiOS II系統(tǒng)的

          SOPC系統(tǒng)在沒有添加Nios II系統(tǒng)時(shí),較容易實(shí)現(xiàn)比較高的頻率,在加入Nios II系統(tǒng)后,系統(tǒng)設(shè)計(jì)頻率有較明顯的下降。因此在帶Nios II的系統(tǒng)中,對(duì)Nios II的設(shè)計(jì)是制約整個(gè)SOPC系統(tǒng)時(shí)序的一個(gè)瓶頸。

          另一方面,在Nios II系統(tǒng)中,多是應(yīng)用已經(jīng)設(shè)計(jì)好的軟核CPU和外接器件IP核,在設(shè)計(jì)時(shí)已經(jīng)進(jìn)行過并且已經(jīng)封裝集成,進(jìn)一步優(yōu)化的難度很大,因此優(yōu)化主要放在自行開發(fā)設(shè)計(jì)的IP核和軟件的參數(shù)配置以及設(shè)計(jì)NiosII系統(tǒng)時(shí)應(yīng)當(dāng)遵循的一些原則上。在Nios II IDE編程環(huán)境中,如圖4所示,選擇最大優(yōu)化,在編譯器參數(shù)設(shè)置中選擇小的C編譯庫和減少設(shè)備驅(qū)動(dòng),這樣經(jīng)優(yōu)化后可以縮減硬件代碼,減少器件資源占用。



          參考文獻(xiàn)[7]中探討了Nios II系統(tǒng)的優(yōu)化途徑。文中歸納系統(tǒng)優(yōu)化有如下方法:

          ①運(yùn)算應(yīng)采用定點(diǎn)運(yùn)算。經(jīng)過測(cè)試,浮點(diǎn)加法和乘法運(yùn)算消耗的時(shí)間為定點(diǎn)運(yùn)算的5~6倍,如果需要浮點(diǎn)運(yùn)算,也應(yīng)該采用自定義指令的方式來實(shí)現(xiàn)。

          ②采用C語言和匯編語言混合編程。對(duì)計(jì)算量大的多次調(diào)用的程序模塊采用匯編語言,對(duì)主干流程語言采用C語言,這樣可以照顧到程序的可讀性,效率也較高,同時(shí)縮減程序占用資源量。

          ③使用用戶自定義指令。將一些復(fù)雜的算法由軟件轉(zhuǎn)而交由硬件來實(shí)現(xiàn),可以獲得較高的效率提升。

          ④使用硬件加速提高軟件性能。通過添加外部協(xié)處理器來加速數(shù)據(jù)功能。

          ⑤多處理器系統(tǒng)。使用兩個(gè)或多個(gè)處理器來提高系統(tǒng)的數(shù)據(jù)處理能力。

          通過上面分析,進(jìn)行系統(tǒng)優(yōu)化似乎是一個(gè)矛盾的過程:有時(shí)需要優(yōu)化以縮減代碼量并減少資源占用,有時(shí)又通過增加邏輯和添加處理模塊來提升數(shù)據(jù)處理能力。實(shí)際上,評(píng)價(jià)一個(gè)系統(tǒng)設(shè)計(jì)的好壞,除了需要實(shí)現(xiàn)基本的功能外,還要看使用邏輯資源和性能的比較,以更好地利用處理器,達(dá)到最好的性能。

          3實(shí)驗(yàn)結(jié)論

          在系統(tǒng)設(shè)計(jì)中,應(yīng)用文中分析的優(yōu)化設(shè)計(jì)方法,系統(tǒng)最高頻率有了較大提升,從最初的88.24 MHz,優(yōu)化至目前的111.73 MHz。由于在Quartus II編譯器參數(shù)沒置中,要求最高時(shí)鐘設(shè)置為132 MHz,因此優(yōu)化后最高時(shí)鐘報(bào)告以紅色顯示,表示沒有達(dá)到預(yù)先設(shè)置的132 MHz時(shí)鐘要求。相比于優(yōu)化前,系統(tǒng)最高頻率提高了26.62%,可見采取的優(yōu)化設(shè)計(jì)措施比較有效。對(duì)于EP2S60器件,在沒有添加Nios II系統(tǒng)時(shí),可以較容易達(dá)到200~300 MHz的最高時(shí)鐘頻率,加入Nios II經(jīng)過優(yōu)化處理,最高時(shí)鐘頻率目前只實(shí)現(xiàn)111.73 MHz,應(yīng)該還有進(jìn)一步優(yōu)化空間??梢钥紤]對(duì)關(guān)鍵路徑進(jìn)行手工連線,采用DSE算法和邏輯鎖定技術(shù)進(jìn)行進(jìn)一步的優(yōu)化,從而提高系統(tǒng)最高頻率.

          上一頁 1 2 下一頁

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