<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è) > 嵌入式系統 > 設計應用 > FPGA協(xié)處理器實(shí)現代碼加速的設計

FPGA協(xié)處理器實(shí)現代碼加速的設計

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

當今的設計工程師受到面積、功率和成本的約束,不能采用GHz級的計算機實(shí)現嵌入式設計。在嵌入式系統中,通常是由相對數量較少的算法決定最大的運算需求。使用設計自動(dòng)化工具可以將這些算法快速轉換到硬件中。然后,可以有效地連接到處理器,產(chǎn)生“GHz”級的性能。

本文引用地址:http://dyxdggzs.com/article/201706/349128.htm

本文主要研究了和代碼轉換到硬件的方法。我們還分析了通過(guò)一個(gè)涉及到基于輔助處理器單元(APU)的實(shí)際圖像顯示案例的基準數據均衡決策的過(guò)程。該設計使用了在一個(gè)平臺FPGA中實(shí)現的一個(gè)嵌入式PowerPC。

協(xié)處理器的意義

協(xié)處理器是一個(gè)處理單元,該處理單元與一個(gè)主處理單元一起使用來(lái)承擔通常由主處理單元執行的運算。通常,協(xié)處理器功能在硬件中實(shí)現以替代幾種軟件指令。通過(guò)減少多種代碼指令為單一指令,以及在硬件中直接實(shí)現指令的方式,從而實(shí)現。

最常用的協(xié)處理器是浮點(diǎn)單元(FPU),這是與CPU緊密結合的唯一普通協(xié)處理器。沒(méi)有通用的協(xié)處理器庫,即使是存在這樣的庫,將依然難以簡(jiǎn)單地將協(xié)處理器與一個(gè)CPU(例如Pentium 4)連接。Xilinx Virtex-4 FX FPGA擁有一個(gè)或兩個(gè)PowerPC,每個(gè)都有一個(gè)APU接口。通過(guò)在FPGA中嵌入一個(gè)處理器,現在就有機會(huì )在單芯片上實(shí)現完整的處理系統。

帶APU接口的PowerPC使得在FPGA中得以實(shí)現一個(gè)緊密結合的協(xié)處理器。因為頻率的需求以及管腳數量的限制,采用外部協(xié)處理器不大可行。因此可以創(chuàng )建一個(gè)直接連接到PowerPC的專(zhuān)用應用協(xié)處理器,大大地提高了軟件速度。因為FPGA是可編程的,你可以快速地開(kāi)發(fā)和測試連接到CPU的協(xié)處理器解決方案。

協(xié)處理器連接模型

協(xié)處理器有三種基本的形式:與CPU總線(xiàn)連接的、與I/O連接的和指令流水線(xiàn)連接(Instruction Pipeline Connection)。此外,還存在一些這些形式的混合形式。

1. CPU總線(xiàn)連接

處理器總線(xiàn)連接加速器需要CPU在總線(xiàn)上移動(dòng)數據以及發(fā)送命令。通常,單個(gè)數據處理就需要很多的處理器時(shí)鐘周期。因為總線(xiàn)仲裁以及總線(xiàn)驅動(dòng)的時(shí)鐘是處理器時(shí)鐘的分頻,所以會(huì )降低數據處理速度。一個(gè)與總線(xiàn)連接的加速器可以包含一個(gè)存儲器存取(DMA)引擎。在增加額外的邏輯情況下,DMA引擎允許協(xié)處理器工作在位于連接到總線(xiàn)的存儲器上的數據塊,獨立于CPU。

2. I/O連接

與I/O連接的加速器直接連接到一個(gè)專(zhuān)用的I/O端口。通常通過(guò)GET或PUT函數提供數據和控制。因為缺少了仲裁、控制復雜度降低以及連接器件較少,因此這些接口的驅動(dòng)時(shí)鐘通常比處理器總線(xiàn)更快。這種接口的一個(gè)較好的例子如Xilinx Fast Simplex Link(FSL)。FSL是一種簡(jiǎn)單的FIFO接口,可以連接到Xilinx MicroBlaze軟核處理器或Virtex-4 FX PowerPC。與處理器總線(xiàn)接口中的數據移動(dòng)相比,通過(guò)FSL移動(dòng)的數據具有較低的延時(shí)和更高的數據速率。

3. 指令流水線(xiàn)連接

指令流水線(xiàn)連接加速器直接連接到CPU的計算內核。通過(guò)與指令流水線(xiàn)連接,CPU不能識別的指令可以由協(xié)處理器執行。操作數、結果以及狀態(tài)直接從數據執行流水線(xiàn)向外傳遞,或接收。單個(gè)運算可以實(shí)現兩個(gè)操作數的處理,同時(shí)返回一個(gè)結果和狀態(tài)。

作為一個(gè)直接連接的接口,連接道指令流水線(xiàn)的加速器可以用比處理器總線(xiàn)更快的時(shí)鐘驅動(dòng)。Xilinx通過(guò)APU接口實(shí)現這種協(xié)處理器連接模型,對于典型的雙操作數指令,在數據控制和數據傳輸上可以縮減10倍的時(shí)鐘周期。APU控制器還連接到數據緩存控制器,通過(guò)它可以執行數據加載/存儲操作。因此,APU接口能在每秒內移動(dòng)數百兆字節,接近DMA速度。

I/O連接加速器或指令流水線(xiàn)連接加速器可以與總線(xiàn)連接加速器結合起來(lái)。在增加額外的邏輯條件下,可以創(chuàng )建一個(gè)加速器,這個(gè)加速器運行在一個(gè)位于總線(xiàn)連接存儲器上的數據塊上,通過(guò)一個(gè)快速、低延時(shí)的接口接收命令并返回狀態(tài)。

在本文中介紹的C-工具組可以實(shí)現總線(xiàn)連接和I/O連接加速器,它還能實(shí)現連接到PowerPC的APU接口的加速器。盡管APU連接是基于指令流水線(xiàn)的,C-工具組實(shí)現了一種I/O流水線(xiàn)接口,該接口具有I/O連接加速器的典型性能。

FPGA/PowerPC/APU接口

FPGA允許硬件設計工程師利用單芯片上的處理器、解碼邏輯、外設和協(xié)處理器實(shí)現一個(gè)完整的計算系統。FPGA可以包含數千到數十萬(wàn)的邏輯單元,可以從這些邏輯單元實(shí)現一個(gè)處理器,如Xilinx PicoBlaze或MicroBlaze處理器,或者可以是一個(gè)或者更多的硬邏輯單元(如Virtex-4 FX PowerPC)。大量的邏輯單元使你可以實(shí)現數據處理單元,這些單元與處理器系統一起工作,由處理器對其進(jìn)行控制或監控。

FPGA作為一種可重復編程的單元,允許你在設計過(guò)程中進(jìn)行編程并對其進(jìn)行測試。如果你發(fā)現了一個(gè)設計缺陷,你可以立即對其進(jìn)行重新編程設計。FPGA還允許你實(shí)現硬件運算功能,而這在以前的實(shí)現成本是很高的。CPU流水線(xiàn)與FPGA邏輯之間緊密結合,這樣就可以創(chuàng )建高性能軟件加速器。

圖1的模塊框圖顯示了PowerPC、集成的APU控制器以及一個(gè)與之相連的協(xié)處理器。來(lái)自高速緩存或存儲器中的指令可以立即出現在CPU解碼器和APU控制器上,如果CPU能識別指令,則運行這些指令。否則,APU控制器或用戶(hù)創(chuàng )建的協(xié)處理器可以對指令做出應答并執行指令。一個(gè)或者兩個(gè)操作數被傳遞到協(xié)處理器,并返回一個(gè)結果或狀態(tài)。APU接口還支持用一個(gè)指令發(fā)送一個(gè)數據單元。數據單元的大小范圍從一個(gè)字節到4個(gè)32位的字。

圖1:PowerPC、集成的APU控制器和協(xié)處理器

通過(guò)一個(gè)結構協(xié)處理器總線(xiàn)(FCB),可以將一個(gè)或多個(gè)協(xié)處理器連接到APU接口。連接到總線(xiàn)的協(xié)處理器范圍包括現存的內核(例如FPU)到用戶(hù)創(chuàng )建的協(xié)處理器。一個(gè)協(xié)處理器可以連接到FCB用于控制和狀態(tài)運算,并連接到一個(gè)處理器總線(xiàn),實(shí)現直接存儲器數據塊訪(fǎng)問(wèn)以及DMA數據傳遞。一種簡(jiǎn)化的連接方案,例如FSL,也可以在FCB和協(xié)處理器之間使用,在犧牲一定性能的條件下實(shí)現FIFO數據和控制通信。

為展示指令流水線(xiàn)連接加速器的性能優(yōu)勢,我們采用一個(gè)處理器總線(xiàn)連接FPU首先實(shí)現了一個(gè)設計,然后采用APU/FCB連接的FPU實(shí)現設計。表1總結了兩種實(shí)現方式下有限脈沖響應(FIR)濾波器的性能。如表1中所反映的一樣,連接到一個(gè)指令流水線(xiàn)的FPU使軟件浮點(diǎn)運算速度增加30倍,而APU接口相比于總線(xiàn)連接FPU來(lái)說(shuō)改善了近4倍。

表1:未加速與加速的浮點(diǎn)性能

C代碼轉換到

采用C到HDL的轉換工具將C代碼轉換到HDL加速器是一種創(chuàng )建硬件協(xié)處理器的高效方法。圖2所示以及下面詳述的步驟總結了C到HDL轉換的過(guò)程:

圖2:C-HDL設計流程

1. 使用標準C工具實(shí)現應用程序或算法。開(kāi)發(fā)一種軟件測試向量(test bench)用于基線(xiàn)性能和正確性(主機或臺式電腦仿真)測試。使用一種編譯器(例如gprof)來(lái)開(kāi)始確定關(guān)鍵的函數。

2. 確定是否浮點(diǎn)到定點(diǎn)轉換適當。使用庫或宏來(lái)輔助這種轉換,使用一個(gè)基線(xiàn)測試向量來(lái)分析性能和準確性。使用編譯器來(lái)重新評估關(guān)鍵函數。

3. 使用C到HDL轉換工具(如Impulse C),在每個(gè)關(guān)鍵功能上重復,以實(shí)現:將算法分割成并行的進(jìn)程;創(chuàng )建硬件/軟件進(jìn)程接口(流、共享存儲器、信號);對關(guān)鍵的代碼段(例如內部代碼循環(huán))進(jìn)行自動(dòng)優(yōu)化和并行化;使用桌面電腦仿真、周期準確的C仿真以及實(shí)際的在系統測試對得到的并行算法進(jìn)行測試和驗證。

4. 使用C到HDL轉換工具將關(guān)鍵的代碼段轉換到HDL協(xié)處理器。

5. 將協(xié)處理器連接到APU接口用于最終的測試。

Impulse:C到HDL轉換工具

如圖3所示的Impulse C通過(guò)結合使用C兼容庫函數與Impulse CoDeveloper C代碼到硬件的編譯器,使嵌入式系統設計工程師能創(chuàng )建高度并行的、FPGA加速的應用。Impulse C通過(guò)使用定義完好的數據通信、消息傳遞和同步處理機制,簡(jiǎn)化了硬件/軟件混合應用設計。Impulse C提供了C代碼(例如循環(huán)流水線(xiàn)處理、展開(kāi)和運算符調度)的自動(dòng)優(yōu)化以及交互式工具,允許你對每個(gè)周期的硬件行為進(jìn)行分析。

圖3. Impulse C

Impulse C設計用于面向數據流的應用,但是它也具有足夠的靈活性來(lái)支持其他的編程模型,包括使用共享存儲器。這一點(diǎn)很重要,因為基于FPGA不同的應用具有不同的性能和數據要求。在一些應用中,通過(guò)塊存儲器讀和寫(xiě)在嵌入式處理器和FPGA之間轉移數據是有意義的;在其它的情況下,流傳數通信信道可能提供更高的性能??梢钥焖俳?、編譯和評估可選的算法的能力對于實(shí)現某個(gè)應用最佳的結果來(lái)說(shuō),非常重要。

到目前為止,Impulse C庫包含以新數據類(lèi)型和預定義的函數調用形式的最少C語(yǔ)言擴展。使用Impulse C函數調用,你可以定義多個(gè)并行程序段(調用進(jìn)程),并使用流、信號和其他機制描述它們的互連。Impulse C編譯器將這些C語(yǔ)言進(jìn)程轉換并優(yōu)化成:可以綜合到FPGA的較低級HDL,或可以通過(guò)廣泛存在的C交叉編譯器編譯到支持的微處理器上標準C(帶相關(guān)的庫調用)。

完整的CoDeveloper開(kāi)發(fā)環(huán)境包括與標準C編譯器和調試器(包括微軟公司的Visual Studio和GCC/GDB)兼容的臺式電腦仿真庫。使用這些庫,Impulse C程序設計工程師能編譯和執行他們用于算法驗證和調試目的的應用程序。C程序設計工程師還能檢驗并行進(jìn)程,分析數據移動(dòng),并利用CoDeveloper Application Monitor解決進(jìn)程到進(jìn)程的通信問(wèn)題。

在編譯時(shí),Impulse C應用的輸出是一組硬件和軟件源文件,用于輸入到FPGA綜合工具。這些文件包括:
1. 用于描述編譯硬件進(jìn)程的自動(dòng)產(chǎn)生的HDL文件;
2. 用于描述連接硬件進(jìn)程到系統總線(xiàn)所需的流、信號和存儲器組件的自動(dòng)產(chǎn)生的HDL文件;
3. 自動(dòng)產(chǎn)生的軟件組件(包括運行時(shí)間庫)用于建立任何硬件/軟件流連接的軟件端;
4. 附加文件,包括腳本文件,用于輸入產(chǎn)生的應用程序到目標FPGA布局布線(xiàn)環(huán)境。這種編譯進(jìn)程的結果是一個(gè)完整的應用,包括需要的硬件/軟件接口,用于在基于FPGA的編程平臺上實(shí)現。

設計實(shí)例

圖4所示的Mandelbrot圖是一種經(jīng)典的不規則幾何圖形,該圖形廣泛用在科學(xué)和工程學(xué)界用于仿真無(wú)序事件,例如天氣。不規則圖形也用于產(chǎn)生紋理和在視頻顯示應用上成像。Mandelbrot圖像描述為自相似性。放大圖形的局部,可以獲得類(lèi)似于整個(gè)圖形的另外一個(gè)圖形。

圖4:Mandelbrot圖

Mandelbrot圖形是硬件/軟件協(xié)同設計的理想選擇,因為它具有單個(gè)運算密集的函數。通過(guò)將關(guān)鍵的函數轉移到硬件實(shí)現將大大地增加整個(gè)系統的速度,使這個(gè)關(guān)鍵函數更快。Mandelbrot應用還能清楚地區分硬件和軟件進(jìn)程,使用C-HDL工具很容易實(shí)現。

本文使用CoDeveloper工具組作為C-HDL工具組用于該設計實(shí)例,而且只修改了軟件Mandelbrot C程序以使其與C-HDL工具兼容。其中的改變包括:將軟件項目分割成不同的進(jìn)程(順序執行的獨立單元);函數接口轉換(硬件到軟件)到流;增加編譯器指令來(lái)對產(chǎn)生的硬件進(jìn)行優(yōu)化。我們隨后使用CoDeveloper工具組來(lái)創(chuàng )建Pcore協(xié)處理器,將該協(xié)處理器輸入到Xilinx Platform Studio(XPS)。利用XPS,我們將PC連接到PowerPC APU控制器接口,并測試系統。

Xilinx公司的應用說(shuō)明資料XAPP901中提供了該設計的全面描述和設計文件,并提供下載。同時(shí),用戶(hù)指南UG096提供一種實(shí)現設計實(shí)例的逐步設計指導。

我們對Mandelbrot圖像紋理問(wèn)題、圖像濾波應用和三倍DES加密的性能改善進(jìn)行了測量。性能改善顯示了從11倍到34倍的加速。



關(guān)鍵詞: 協(xié)處理器 代碼加速 HDL

評論


相關(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>