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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 設(shè)計(jì)靈活、高性能的嵌入式系統(tǒng)——軟處理和IP定制同時(shí)確保靈活性和性能

          設(shè)計(jì)靈活、高性能的嵌入式系統(tǒng)——軟處理和IP定制同時(shí)確保靈活性和性能

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

          您的下一個(gè)嵌入式系統(tǒng)設(shè)計(jì)項(xiàng)目需要的是什么:是可以讓您輕松地定制設(shè)計(jì)的靈活的系統(tǒng)元件,還是額外的性能空間,以便您在設(shè)計(jì)周期中加入更多的功能?為什么要讓自己承受過(guò)度的開(kāi)發(fā)壓力,并且只能舍此取彼呢?軟處理和IP定制能夠?yàn)橥瑫r(shí)確保靈活性和高性能提供了最佳的解決方案,將定制設(shè)計(jì)的概念和協(xié)處理帶來(lái)的性能加速結(jié)合起來(lái)。

          分立處理器只能提供固定的外設(shè)選擇,并且一些性能受到頻率的限制。在嵌入式所提供的平臺(tái)上,您可以創(chuàng)建一個(gè)具有大量定制處理器核、靈活的外設(shè)、甚至協(xié)處理減負(fù)引擎的系統(tǒng)?,F(xiàn)在,您能設(shè)計(jì)出一個(gè)不折不扣的定制處理系統(tǒng)——不僅滿(mǎn)足最具挑戰(zhàn)性的項(xiàng)目要求,而且能夠沖破性能極限,與此同時(shí),通過(guò)使用實(shí)現(xiàn)加速的軟件指令最大限度地提高系統(tǒng)的性能。隨著架構(gòu)的加速,從前的限制便不復(fù)存在。

          靈活性

          除了在Xilinx VirtexTM平臺(tái)的FPGA中所提供的高性能PowerPCTM處理核和使用匯編語(yǔ)言編程的占位空間更小的PicoBlazeTM微控制器外,Xilinx公司還提供一種可定制的通用32位RISC處理器。由于可以使用Virtex或SpartanTM系列產(chǎn)品中的任意一款在邏輯門(mén)外對(duì)其進(jìn)行構(gòu)建,因此MicroBlazeTM軟件處理器的使用十分靈活,并且您能夠通過(guò)定制處理IP外設(shè)來(lái)滿(mǎn)足您的特定要求。

          使用可定制核和IP,您只需創(chuàng)建所需的系統(tǒng)元件而不浪費(fèi)任何芯片資源。當(dāng)您使用像FPGA這樣的可編程器件構(gòu)建一個(gè)處理系統(tǒng)時(shí),就不會(huì)在分立器件中浪費(fèi)任何未使用的資源,也不會(huì)出現(xiàn)當(dāng)需要的外設(shè)數(shù)量超過(guò)所提供的數(shù)量時(shí)(例如您的設(shè)計(jì)需要3個(gè)UART,而分立器件只能提供1個(gè)或2個(gè)),設(shè)計(jì)無(wú)法繼續(xù)進(jìn)行的情況。此外,您不會(huì)受限于初始的架構(gòu)設(shè)想;相反,您能不停地進(jìn)行大的修改并且能夠調(diào)整系統(tǒng)架構(gòu)來(lái)適應(yīng)新的需求特性或不斷變化的標(biāo)準(zhǔn)。

          在“2006年嵌入式系統(tǒng)大會(huì)”的論文匯編中有一個(gè)FIR濾波器的設(shè)計(jì)示例,其中,MicroBlaze系統(tǒng)包含一個(gè)可選的符合IEEE 754標(biāo)準(zhǔn)的內(nèi)部浮點(diǎn)單元(FPU),從而大大提高了該處理器核上僅可由軟件執(zhí)行的操作的性能。通過(guò)加入可選的MicroBlaze元件,可以迅速地提高應(yīng)用程序的性能。

          這些可選內(nèi)部元件的另外一個(gè)優(yōu)勢(shì)就是它們得到MicroBlaze C編譯器的全面支持,因此不必改變?cè)创a。在這個(gè)FIR濾波器設(shè)計(jì)示例中,由于調(diào)用外部C代碼庫(kù)的浮點(diǎn)函數(shù)的操作被使用新的FPU的指令自動(dòng)取代,因此加入FPU和對(duì)設(shè)計(jì)的重復(fù)編譯意味著直接的性能提升。

          與軟件重新編碼方法相比,使用專(zhuān)用處理單元,能夠?qū)⑼瓿商囟ㄈ蝿?wù)所需的周期數(shù)減少幾個(gè)數(shù)量級(jí),從而提高處理器的性能。圖1的簡(jiǎn)化圖顯示了一個(gè)帶有內(nèi)部FPU IP核、本地存儲(chǔ)器核和像UART或JTAG調(diào)試端口這樣的可選外設(shè)的MicroBlaze處理系統(tǒng)。由于系統(tǒng)是可定制的,我們可以方便地實(shí)現(xiàn)Xilinx處理器IP產(chǎn)品目錄中所包含的多個(gè)UART或其他的IP外設(shè)核,其中包括DMA控制器、IIC、CAN或DDR存儲(chǔ)器接口等。

          該IP產(chǎn)品目錄提供了門(mén)類(lèi)齊全的其他處理IP(橋、仲裁器、中斷控制器、GPIO、定時(shí)器和存儲(chǔ)器控制器等),以及適用于每個(gè)IP核的可定制選項(xiàng)(例如波特率和奇偶校驗(yàn)位),以對(duì)元件的特性、性能和尺寸/成本進(jìn)行優(yōu)化。此外,您還能設(shè)置與處理核相關(guān)的頻率、調(diào)試模式、本地存儲(chǔ)器容量、高速緩存和其它選項(xiàng)。僅僅增加一個(gè)FPU核,我們就能創(chuàng)建一個(gè)可將前文所提到的FIR的實(shí)現(xiàn)從8,500,000個(gè)CPU周期優(yōu)化至177,000個(gè)CPU周期的MicroBlaze系統(tǒng),這樣,在不改變C代碼源文件的情況下即可將性能提高48倍。

          在第二個(gè)示例中,我們將構(gòu)建另外一個(gè)設(shè)計(jì)模塊,實(shí)現(xiàn)一個(gè)面向MP3解碼器的IDCT引擎,這一設(shè)計(jì)可使應(yīng)用模塊的速度加快一個(gè)數(shù)量級(jí)。

          您可以使用圖2中所示的開(kāi)發(fā)工具,方便地創(chuàng)建上文提到的兩個(gè)處理器平臺(tái)。這個(gè)集成式軟件/硬件開(kāi)發(fā)工具包括一塊直接支持PowerPC和MicroBlaze處理器設(shè)計(jì)的Virtex-4參考板。開(kāi)發(fā)工具還包括所有的編譯器和所需的FPGA設(shè)計(jì)工具,以及IP目錄和用作預(yù)校準(zhǔn)的參考設(shè)計(jì)。

          再加上JTAG探測(cè)器和系統(tǒng)電纜,此開(kāi)發(fā)工具能夠讓您在開(kāi)始編輯和調(diào)試自己的設(shè)計(jì)變更之前,輕松構(gòu)建和運(yùn)行一個(gè)工作系統(tǒng)。不同器件和板卡的開(kāi)發(fā)工具,可從Xilinx公司及其分銷(xiāo)商以及第三方嵌入式系統(tǒng)合作伙伴那里得到。

          查明瓶頸和實(shí)現(xiàn)協(xié)處理

          MicroBlaze處理器是EDN公司2005年的百件熱門(mén)產(chǎn)品之一,使用獲得IEC(國(guó)際工程協(xié)會(huì))大獎(jiǎng)的Xilinx Platform Studio(XPS)嵌入式工具套件實(shí)現(xiàn)硬件/IP的設(shè)置和軟件的開(kāi)發(fā)。XPS包含在我們預(yù)先配置的嵌入式開(kāi)發(fā)系統(tǒng)中,是用來(lái)創(chuàng)建系統(tǒng)的集成式開(kāi)發(fā)環(huán)境(IDE)。如果您擁有一塊標(biāo)準(zhǔn)的參考板或已經(jīng)創(chuàng)建了自己的電路板描述文檔,那么XPS就可以驅(qū)動(dòng)一個(gè)設(shè)計(jì)向?qū)?lái)快速地配置您的初始系統(tǒng)。

          通過(guò)使用智能化工具來(lái)減少錯(cuò)誤和學(xué)習(xí)壓力,您就可以集中精力提高最終產(chǎn)品的價(jià)值。完成基本的配置后,您可以花一些時(shí)間來(lái)調(diào)整IP,從而定制自己的系統(tǒng),然后進(jìn)行軟件應(yīng)用的開(kāi)發(fā)。

          XPS為程序員提供了一個(gè)功能強(qiáng)大的基于Eclipse框架的軟件開(kāi)發(fā)IDE。這一環(huán)境對(duì)于開(kāi)發(fā)、調(diào)試和管理代碼以查明隱藏于其它不可見(jiàn)的代碼執(zhí)行中的性能瓶頸是十分理想的。這些代碼中的不足之處經(jīng)常會(huì)使設(shè)計(jì)達(dá)不到所要求的性能目標(biāo),但它們又很難被發(fā)現(xiàn)而且通常更難被優(yōu)化。

          使用像“內(nèi)聯(lián)代碼”這樣的技術(shù)來(lái)減少多余的函數(shù)調(diào)用開(kāi)銷(xiāo),就能夠?qū)?yīng)用程序的性能提高1%~5%。但如果使用可編程平臺(tái),利用現(xiàn)有更強(qiáng)大的設(shè)計(jì)技術(shù),可使性能提高一到兩個(gè)數(shù)量級(jí)。

          圖3顯示了XPS性能分析截屏圖。XPS可以用不同的形式顯示分析信息(profiling information),這樣您就可以一目了然地看清突出顯示在性能圖上的趨勢(shì)或個(gè)別相沖突的程序。柱狀圖、餅狀圖和測(cè)量指標(biāo)表格,讓定位和判斷函數(shù)與程序的不足之處變得簡(jiǎn)單,這樣您就能夠采取行動(dòng)來(lái)改進(jìn)這些極大影響整體系統(tǒng)性能的程序。

          自帶IP模塊的軟處理器核

          在我前面所介紹的MP3解碼器示例中,我們從多個(gè)MicroBlaze處理器的示例化開(kāi)始,構(gòu)建了一個(gè)定制系統(tǒng)(圖4)。由于MicroBlaze處理器是一個(gè)軟核處理器,因此我們能方便地構(gòu)建一個(gè)具有多個(gè)處理器的系統(tǒng)并能平衡性能負(fù)載,從而得到一個(gè)優(yōu)化的系統(tǒng)。

          從圖4我們可以清楚地看到,頂部自帶總線(xiàn)和外設(shè)的MicroBlaze塊與底部的MicroBlaze塊和它自帶的外設(shè)是彼此分開(kāi)的。此設(shè)計(jì)的頂部區(qū)域運(yùn)行支持整個(gè)文檔系統(tǒng)的嵌入式Linux操作系統(tǒng),這樣就能通過(guò)網(wǎng)絡(luò)接入MP3比特流。我們將這些比特流的解碼和播放操作留給第二個(gè)MicroBlaze處理器。在此設(shè)計(jì)中我們加入了緊密耦合的DCT/IMDCT(正向和反向改進(jìn)的離散余弦變換)函數(shù)處理器減負(fù)引擎和兩個(gè)高精度MAC單元。

          IMDCT塊負(fù)責(zé)數(shù)據(jù)的壓縮和解壓縮,以縮短傳輸線(xiàn)的執(zhí)行時(shí)間。DCT/IMDCT是壓縮應(yīng)用中計(jì)算量最大的兩種函數(shù),因此將整個(gè)函數(shù)放到它自己的協(xié)處理模塊中執(zhí)行,極大地提高了整個(gè)系統(tǒng)的性能。與前面提到的在FIR濾波器中加入一個(gè)內(nèi)部FPU的設(shè)計(jì)示例不同的是,這個(gè)MP3設(shè)計(jì)示例已經(jīng)實(shí)現(xiàn)了MicroBlaze的定制,并且在FPGA中加入了外部專(zhuān)用硬件。

          協(xié)處理+可定制IP = 高性能

          通過(guò)將軟件函數(shù)的大量計(jì)算負(fù)擔(dān)轉(zhuǎn)移給協(xié)處理的“硬件指令”,您就能找到一個(gè)最佳的平衡點(diǎn),使系統(tǒng)性能達(dá)到最佳。圖4還顯示了Linux文件系統(tǒng)模塊的一系列IP外設(shè),其中包括UART、以太網(wǎng)MAC和其他各種存儲(chǔ)器控制器選項(xiàng)。與此不同的是,編碼/解碼應(yīng)用模塊采用了針對(duì)不同系統(tǒng)功能定制的不同IP。

          第二個(gè)MicroBlaze軟核從屬于第一個(gè)MicroBlaze處理器,并扮演用于對(duì)MP3比特流進(jìn)行解碼的任務(wù)引擎的角色。帶有附加專(zhuān)用IP核的解碼算法,通過(guò)Xilinx快速單工連接(Fast Simplex Link,F(xiàn)SL)接口直接連到FPGA架構(gòu)硬件資源內(nèi)部。這一協(xié)處理的設(shè)計(jì)技術(shù)充分利用了FPGA硬件相對(duì)于較慢的獨(dú)立式處理器的順序指令執(zhí)行而言所具有的并行和高速特性。

          與高性能FPGA架構(gòu)直接相連,可以引入快速的乘累加模塊(圖4中的LL_SH MAC1和LL_SH MAC2),與DCT和IMDCT模塊的專(zhuān)用IP形成互補(bǔ)。長(zhǎng)長(zhǎng)整型MAC模塊能夠提供更高的精度,同時(shí)減輕處理單元的計(jì)算負(fù)荷。您可能注意到,在A(yíng)C97控制器核到外部AC97多媒體數(shù)字信號(hào)編解碼器接口之間同樣使用FSL連接,這可使MP3播放器實(shí)現(xiàn)CD音質(zhì)的輸入/輸出。

          圖4所示的協(xié)處理系統(tǒng)的性能,比原有的軟件系統(tǒng)的性能累計(jì)提高了41倍。將一個(gè)“只使用軟件”的實(shí)現(xiàn)方式(參見(jiàn)圖5頂部的橫條)與硬件指令示例化的每個(gè)階段相比,您就可以看出是如何一步步提高性能的。僅僅將軟件計(jì)算轉(zhuǎn)移到IMDCT中就會(huì)帶來(lái)1.5倍的性能提升,增加DCT硬件指令后則可使性能提升1.7倍。加入一個(gè)長(zhǎng)長(zhǎng)整型乘累加單元,可帶來(lái)8.2倍的性能提升。

          采用協(xié)處理技術(shù)在硬件中實(shí)現(xiàn)所有的軟件模塊,能夠使系統(tǒng)總體性能提升41倍,這還沒(méi)有考慮減少應(yīng)用程序代碼長(zhǎng)度這一額外優(yōu)勢(shì)。由于去除了需要大量指令的乘法函數(shù),而代之以一個(gè)可以讀寫(xiě)FSL端口的單一指令,因此我們進(jìn)一步減少了指令數(shù)量,并因此壓縮了代碼的占位空間。例如在MP3的應(yīng)用示例中,代碼的占位空間縮小了20%。

          更重要的是,通過(guò)像XPS這樣的智能化工具能夠方便快速地對(duì)設(shè)計(jì)進(jìn)行修改,同時(shí)仍能保證在產(chǎn)品的開(kāi)發(fā)周期內(nèi)實(shí)現(xiàn)這些修改。僅使用軟件增強(qiáng)性能的方法,非常費(fèi)時(shí),而且得到的回報(bào)通常很有限。在一個(gè)可編程平臺(tái)之上平衡軟件應(yīng)用、硬件實(shí)現(xiàn)和協(xié)處理的劃分,您就能得到一個(gè)更理想的結(jié)果。

          結(jié)論

          基于本文所描述的示例,我們能夠輕松定制一個(gè)全嵌入式處理系統(tǒng),編輯IP從而在特性/面積/成本之間取得最佳平衡,并且在看似不可能的地方使性能得到大幅提升。Virtex-4和Spartan-3系列器件提供了靈活的軟處理器解決方案,開(kāi)發(fā)人員可以在隨后的開(kāi)發(fā)周期中對(duì)其進(jìn)行設(shè)計(jì)和改進(jìn)。屢獲殊榮的MicroBlaze軟處理器核,加上獲獎(jiǎng)不斷的XPS工具套件,為您的嵌入式設(shè)計(jì)提供了一套強(qiáng)大的工具。

          協(xié)處理技術(shù),例如采用高性能FPGA硬件指令實(shí)現(xiàn)需要大量計(jì)算的軟件算法,能夠使常規(guī)工業(yè)應(yīng)用模塊的性能提高2倍、10倍甚至40倍以上。想象一下這將為您的下一個(gè)設(shè)計(jì)帶來(lái)什么——在開(kāi)發(fā)周期的后期,您的設(shè)計(jì)仍有修改的余地,并且可以預(yù)先規(guī)劃好下一代產(chǎn)品的改進(jìn)方案。

          了解Xilinx嵌入式處理解決方案方面的更多信息,請(qǐng)登錄網(wǎng)站www.xilinx.com/cn/processor。



          關(guān)鍵詞: FPGA 硬件 時(shí)鐘

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();