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

          新聞中心

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

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

          作者: 時間:2007-03-06 來源:網絡 收藏

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

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

          靈活性

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

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

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

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

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

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

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

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

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

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

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

          通過使用智能化工具來減少錯誤和學習壓力,您就可以集中精力提高最終產品的價值。完成基本的配置后,您可以花一些時間來調整IP,從而定制自己的系統(tǒng),然后進行軟件應用的開發(fā)。

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

          使用像“內聯(lián)代碼”這樣的技術來減少多余的函數(shù)調用開銷,就能夠將應用程序的性能提高1%~5%。但如果使用可編程平臺,利用現(xiàn)有更強大的設計技術,可使性能提高一到兩個數(shù)量級。

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

          自帶IP模塊的軟處理器核

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

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

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

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

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

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

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

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

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

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

          結論

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

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

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



          關鍵詞: FPGA 硬件 時鐘

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();