<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 調節多核處理器硬件適應軟件設計方法

調節多核處理器硬件適應軟件設計方法

——
作者: 時(shí)間:2008-01-08 來(lái)源: 收藏

  典型的系統設計人員在硬件平臺上進(jìn)行編程,他們最關(guān)注的一點(diǎn)就是硬件平臺的穩定性。如果硬件沒(méi)有設置好,會(huì )帶來(lái)重新編寫(xiě)代碼的麻煩。但是一個(gè)完全設置好的穩定的硬件平臺還是會(huì )對其上運行的程序有一系列的限制。這些限制 - 無(wú)論是設計結果,還是一個(gè)完全的缺陷 - 都會(huì )造成在編碼時(shí)需要迂回處理甚至重新返工的情況,給設計實(shí)現帶來(lái)麻煩,并且耗費了大量的時(shí)間。

  通過(guò)將FPGA平臺和一個(gè)精心設計的多核方法結合在一起,開(kāi)發(fā)人員就能以下列這種方式實(shí)現高性能分組處理應用:軟件工程師能夠對計算平臺的結構有所控制,從而大大縮短編程時(shí)間,同時(shí)降低延期交付風(fēng)險。

  硬件設計流程的主要工作就是定義一塊。像存儲器類(lèi)型、總線(xiàn)協(xié)議和I/O這樣的基本組件已被預先定義。

  如果只使用一個(gè)固定的,那它也是預先定義好的。但是,單個(gè)無(wú)法運行需要吉比特性能的算法(例如分組處理算法),此時(shí)就需要多個(gè)協(xié)同工作。

  構建一個(gè)處理構造塊的最佳方法取決于所運行的軟件。使用FPGA來(lái)進(jìn)行處理,就能使你在對代碼需求有了進(jìn)一步了解后,再對精確的實(shí)現方式做出明確的決策。全新的Tejia FP平臺在Xilinx® VirtexTM - 4 FPGA上提供了一種方法和多核基礎設施,使開(kāi)發(fā)人員在完成代碼編寫(xiě)后,對多核架構進(jìn)行精確的配置。

  當軟件工程師設計硬件時(shí)

  硬件和軟件設計是兩種本質(zhì)上不同的工作。無(wú)論硬件設計語(yǔ)言多么像一個(gè)軟件,它進(jìn)行的仍然是硬件設計。硬件語(yǔ)言對結構進(jìn)行定義,并且設計流程最終要進(jìn)行結構的實(shí)體化。但是,軟件工程師正越來(lái)越多地使用C編程技術(shù)來(lái)設計系統功能;現有的工具支持使用軟件或硬件方法來(lái)設計系統功能。

  軟件實(shí)現的方法更偏向于過(guò)程導向。它考慮的是“如何去做”而不是“構建什么”的問(wèn)題,因為從傳統觀(guān)點(diǎn)來(lái)看,已經(jīng)不需要再構建什么了 - 硬件都已經(jīng)被構建好了。在真正基于軟件的設計方法中,關(guān)鍵的功能不是被構建到一種結構中去,而是在一個(gè)已經(jīng)構建好的系統中被結構執行的。靈活性是基于軟件的實(shí)現方法的優(yōu)勢:在系統出廠(chǎng)后仍能快捷地對其進(jìn)行改變。雖然FPGA也能現場(chǎng)編程,但改變軟件設計要比構建硬件快捷地多。

  由于硬件和軟件設計存在著(zhù)差異,因此硬件和軟件的設計者所考慮的問(wèn)題是不同的。硬件工程師不可能只通過(guò)改變編程語(yǔ)言的語(yǔ)法,就能轉變成軟件工程師。反之,軟件工程師也不可能因為硬件設計中需要軟件的參與,就能轉變成硬件工程師。因此,不能輕率地就讓軟件工程師加入到處理架構的設計中來(lái)。

  此外,硬件工程師、軟件工程師或項目經(jīng)理都不會(huì )同意將一個(gè)基于硬件方法的設計交給一位軟件工程師去完成。軟件工程師做出關(guān)于硬件的決定時(shí)所使用的方法,極有可能得到熟悉類(lèi)似編程語(yǔ)言的另一位軟件工程師的認同。

  如圖1所示,并行流水線(xiàn)是多核分組處理引擎中處理架構的關(guān)鍵結構。這一引擎由一個(gè)處理器陣列加上可能存在的硬件加速器構成?;卮鹆讼旅孢@些問(wèn)題,就等于完成了一個(gè)設計流程:

  需要多少個(gè)處理器?

  應該如何安排這些處理器?

  每個(gè)處理器需要處理多少代碼和存儲多少本地數據?

  代碼的哪些部分需要硬件加速

  讓我們來(lái)逐一回答這些問(wèn)題,從而為軟件工程師“組裝”出一套設計方法。

  處理器的數量和配置

  所需處理器的數量可以通過(guò)對周期預算和執行代碼所需的周期數進(jìn)行簡(jiǎn)單的數學(xué)計算得出。當你要在規定的時(shí)間內完成工作時(shí),周期預算就成為一個(gè)關(guān)鍵的參數。例如進(jìn)行分組處理時(shí),數據位置進(jìn)行劃分。這樣,就能夠圍繞劃分的情況來(lái)進(jìn)行硬件設計,而不用根據硬件來(lái)進(jìn)行劃分。軟件工程師如何進(jìn)行設計是一個(gè)關(guān)鍵問(wèn)題。Teja中集成了一組API和一個(gè)處理工具,可以用ANSI C來(lái)定義硬件平臺。此工具可執行程序,創(chuàng )建處理平臺的定義,這些定義能夠被Xilinx工具進(jìn)行處理。API組的內容十分豐富,并且能夠在很靠底的硬件層次上進(jìn)行控制,但大多數軟件工程師不希望使用它們。因此,Teja中還使用參數化的方式加入了一個(gè)“典型的”流水線(xiàn)定義的方法。要實(shí)現上述示例中的流水線(xiàn),只需要在配置頭文件中修改兩個(gè)簡(jiǎn)單的#define陳述式。

{{分頁(yè)}}

  下面的陳述式定義了一個(gè)兩級的流水線(xiàn),在第一級使用了4個(gè)引擎,在第二級使用了2個(gè)引擎:圖1 - 并行的流水線(xiàn),每個(gè)引擎由一個(gè)MicroBlaze處理器、專(zhuān)用存儲器和可選的減負器構成。包不停地到來(lái),而你在下一個(gè)數據包到來(lái)之前,只有那么多周期來(lái)完成你的工作。如果你的代碼需要更長(cháng)的時(shí)間來(lái)執行,那么就需要添加更多的處理器。例如,如果周期預算是100個(gè)周期,而代碼執行需要520個(gè)周期,那么你就需要6個(gè)處理器(520除以100,然后進(jìn)位到整數)。你可以對處理器數量進(jìn)行調整,但必須滿(mǎn)足預算的要求。使用Teja工具時(shí),可以通過(guò)分析來(lái)確定周期數。

  下一個(gè)問(wèn)題是如何安排這些處理器。處理這一問(wèn)題最簡(jiǎn)單的辦法就是確定你是否需要劃分代碼,來(lái)創(chuàng )建一個(gè)流水線(xiàn)。流水線(xiàn)使用較少的硬件資源,但會(huì )增加等待時(shí)間。如果你需要對代碼進(jìn)行劃分,最好選擇在一個(gè)明顯的位置(自然和直觀(guān)的位置)進(jìn)行。而沒(méi)有必要計算出周期中點(diǎn)精確的位置。

  

并行的流水線(xiàn)

  圖1 - 并行的流水線(xiàn),每個(gè)引擎由一個(gè)MicroBlaze處理器、專(zhuān)用存儲器和可選的減負器構成。

  假設你要用6個(gè)處理器構成一個(gè)兩級流水線(xiàn)。那么你現在就需要計算出每一級所需的處理器的數量;先通過(guò)分析來(lái)確定每個(gè)劃分的周期數,如后再用它去除以周期預算,就可以得到每一級所需的處理器的數量。。因此,如果第一個(gè)劃分需要380個(gè)周期,則它需要4個(gè)處理器;這樣第二級就需要140個(gè)周期,從而需要兩個(gè)處理器。(兩個(gè)劃分所需的周期數之和實(shí)際上不一定正好等于未劃分的程序所需的周期數,但會(huì )非常接近,因此在這里可以近似看作相等。)因此,這個(gè)兩級的流水線(xiàn)的第一級需要4個(gè)處理器,第二級需要2個(gè)處理器。如果有足夠的邏輯資源,使用Xilinx MicroBlazeTM軟核,就能夠實(shí)體化任何這樣的流水線(xiàn)。

  相比較而言,在一個(gè)固定的流水線(xiàn)結構中,每一級的處理器數量都已經(jīng)預先確定。因此就只能強制使用一種專(zhuān)門(mén)的劃分方法,實(shí)現這一劃分就會(huì )需要相當長(cháng)的時(shí)間。相反地,如果每一級使用的處理器數量不同,流水線(xiàn)就可以定制,并且可以是不規則的。因此能夠從任何位置進(jìn)行劃分。這樣,就能夠圍繞劃分的情況來(lái)進(jìn)行硬件設計,而不用根據硬件來(lái)進(jìn)行劃分。

  軟件工程師如何進(jìn)行設計是一個(gè)關(guān)鍵問(wèn)題。Teja中集成了一組API和一個(gè)處理工具,可以用ANSI C來(lái)定義硬件平臺。此工具可執行程序,創(chuàng )建處理平臺的定義,這些定義能夠被Xilinx工具進(jìn)行處理。API組的內容十分豐富,并且能夠在很靠底的硬件層次上進(jìn)行控制,但大多數軟件工程師不希望使用它們。因此,Teja中還使用參數化的方式加入了一個(gè)“典型的”流水線(xiàn)定義的方法。要實(shí)現上述示例中的流水線(xiàn),只需要在配置頭文件中修改兩個(gè)簡(jiǎn)單的#define陳述式。

  下面的陳述式定義了一個(gè)兩級的流水線(xiàn),在第一級使用了4個(gè)引擎,在第二級使用了2個(gè)引擎:

  #define PIPELINE_LENGTH 2

  #define PIPELINE_CONFIG {4,2};

  由上述陳述式和預設的配置程序,TejaCC程序就能構建出流水線(xiàn)。當然,無(wú)論由于什么原因使得流水線(xiàn)的配置需要發(fā)生改變時(shí),只要使用與上面相似的方法進(jìn)行編輯即可。

{{分頁(yè)}}

  存儲器

  第三個(gè)問(wèn)題跟所需的存儲器數量有關(guān)。在一個(gè)典型的系統中,所能存儲的代碼和數據的數量是固定的。如果你的設計沒(méi)有滿(mǎn)足這一要求,就需要做大量的工作來(lái)將多出的內容壓縮到存儲空間中。但是在使用FPGA時(shí),只要所需存儲器的數量在芯片所能提供的范圍之內,就能夠按照實(shí)際需要為每個(gè)處理器分配存儲空間。在更典型的情況下,所有的存儲空間的大小都相同(由于每個(gè)塊的最小容量為2k,這就限制了進(jìn)行微調的程度)。

  

配置并行流水線(xiàn)的流程

  圖2 - 配置并行流水線(xiàn)的流程

  代碼編譯時(shí)提供所需存儲器的大小,并且可以使用下面的陳述式來(lái)編輯配置頭文件,在這個(gè)示例中為代碼和數據存儲分配的存儲空間均為8KB:

  #define CPE_CODE_MEM_SIZE_KB 8

  #define CPE_DATA_MEM_SIZE_KB 8

{{分頁(yè)}}

  使用減負器來(lái)加快處理速度

  第四個(gè)問(wèn)題和創(chuàng )建硬件加速器有關(guān)??赡苡幸徊糠殖绦驎?huì )占用太多的周期。要減少周期就需要更多的處理器,而使用硬件加速器就能減少處理器的數量。只要硬件加速器比其所替代的處理器占用更少的門(mén),就能夠減少整個(gè)硬件實(shí)現的面積。

  Teja有一項功能就是用來(lái)從代碼中直接創(chuàng )建這樣的加速器或減負器。通過(guò)對程序進(jìn)行注釋?zhuān)斯δ芫涂蓜?chuàng )建:

  實(shí)現代碼的硬件邏輯

  通過(guò)系統接口在處理器基礎設施中添加加速器

  調用原型替換程序中最初的代碼

  在將減負器集成于系統之前,先使用測試臺對其進(jìn)行驗證。

  一旦創(chuàng )建了減負器,周期數就會(huì )減少,因此你需要重新安排處理器。但由于重新定義流水線(xiàn)結構的操作十分方便,因此這是一項很簡(jiǎn)單的任務(wù)。

  一個(gè)簡(jiǎn)單直接的方法

  將前面所述的步驟組合在一起,就產(chǎn)生了圖2中所示的設計流程。你可以先定義減負器(對于明顯需要減負器的任務(wù)),或在配置好流水線(xiàn)之后再定義減負器(如果現有的代碼使用了太多的處理器)。

  軟件工程師所能控制的是一些在他們看來(lái)自然和簡(jiǎn)單的參數,這里使用自然的軟件語(yǔ)言(ANSI C)來(lái)表達這些參數。對硬件進(jìn)行實(shí)體化的所有細節都由TejaCC程序來(lái)處理,它會(huì )為Xilinx嵌入式開(kāi)發(fā)系統(EDK)創(chuàng )建一個(gè)項目。剩下的編譯/綜合/布局/布線(xiàn)和產(chǎn)生比特流以及鏡像代碼的工作全都由EDK來(lái)完成。

  在這種方式下,可以由硬件工程師設計,但通過(guò)使用FPGA,硬件工程師能夠將最終的實(shí)現中硬件配置的關(guān)鍵部分,留給軟件設計者去完成。這一方法還支持在設計即將完成時(shí)對進(jìn)行改動(dòng)(例如,由于性能原因要對存儲器的類(lèi)型和容量進(jìn)行改動(dòng))。由于Teja工具能創(chuàng )建FPGA的硬件定義,其中包括存儲器控制器和其他外設,因此設計人員可以輕松地調節電路板。最終的結果是,由于硬件實(shí)現可以適應軟件的變化,因此軟件設計者不再需要花費大量的時(shí)間來(lái)圍繞一個(gè)固定的硬件設置編寫(xiě)程序。

  通過(guò)利用靈活的Virtex - 4 FPGA和MicroBlaze核,Teja FP環(huán)境和基本結構使得所有這一切都變成了可能。有了這一強大的工具,你就能夠將開(kāi)發(fā)周期縮短幾周甚至幾個(gè)月。

  Teja還提供了一些高級應用程序,這些應用程序能用來(lái)啟動(dòng)一個(gè)項目,并減少所需的工作量。將一個(gè)靈活省時(shí)的設計方法和一個(gè)事先定義好的應用程序結合起來(lái)使用,網(wǎng)絡(luò )設備的制造者就能更快地完成他們的設計。

  了解Teja FP方面的更多信息,請與bmoyer@xilinx.com聯(lián)系。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>