用FPGA 嵌入式處理器實(shí)現(xiàn)高性能浮點(diǎn)元算
在采用數(shù)值處理技術(shù)創(chuàng)建嵌入式應(yīng)用時(shí),通常以整數(shù)或定點(diǎn)表示法來確保算術(shù)運(yùn)算盡量簡(jiǎn)單,這一點(diǎn)至關(guān)重要。因其不僅有助于使成本和功耗降至最低,而且還能盡可能地加速硬件部署。FPGA 非常適用于執(zhí)行定點(diǎn)運(yùn)算,并能在邏輯或基于軟件或硬件處理器的實(shí)施方案中創(chuàng)建高度并行的數(shù)據(jù)路徑解決方案。Virtex®-5 FPGA 產(chǎn)品系列中 FXT 系列的最新硬件處理器 Xilinx® PowerPC® 440 可提供超標(biāo)量功能,讓用戶能夠?qū)ζ骷幊蹋蛊湟愿哌_(dá) 550 MHz 的時(shí)鐘速率并行執(zhí)行一個(gè)或兩個(gè)定點(diǎn)運(yùn)算。
本文引用地址:http://www.ex-cimer.com/article/119376.htm盡管用戶能通過對(duì)器件進(jìn)行編程來執(zhí)行大多數(shù)采用整數(shù)或定點(diǎn)算術(shù)的運(yùn)算,但通常須重新運(yùn)算并插入比例運(yùn)算以確保計(jì)算結(jié)果足夠精確。對(duì)于復(fù)雜運(yùn)算而言,這不僅耗時(shí),而且還會(huì)導(dǎo)致程序變?yōu)閷S眯颓也豢芍赜谩@硐氲奶娲椒ㄊ遣捎脴?biāo)準(zhǔn)浮點(diǎn)表示法來提供一種適用于多個(gè)應(yīng)用的高動(dòng)態(tài)范圍。這樣人們就無需修改算法即可獲得適用于任何特定應(yīng)用或操作環(huán)境的定點(diǎn)實(shí)施方案,也無需為隨后的項(xiàng)目及應(yīng)用而大范圍地修改代碼。
雖然賽靈思為基于 IBM 浮點(diǎn)性能庫的 PowerPC 440 處理器提供了一種行之有效的仿真浮點(diǎn)解決方案,但處理器內(nèi)核仍需占用數(shù)十個(gè)周期來執(zhí)行每條運(yùn)算。而采用浮點(diǎn)運(yùn)算單元 (FPU) 形式的浮點(diǎn)運(yùn)算硬件加速功能可縮短該運(yùn)算周期。Virtex-5 FXT 系列中的 PowerPC 440 處理器提供了有效接口,能夠?qū)①愳`思軟 FPU 等硬件加速器連接至該處理器內(nèi)核。該方案可通過結(jié)構(gòu)協(xié)處理器總線 (FCB) 將 PowerPC 440 處理器上的 128 位輔助處理器單元 (APU) 接口橋接至協(xié)處理器。使用該類協(xié)處理器(賽靈思 LogiCORE™ IP Virtex-5 APU-FPU),Virtex-5 FXT 用戶可以選擇軟件仿真或者專用軟邏輯 FPU 在 PowerPC 上自如地實(shí)現(xiàn)浮點(diǎn)運(yùn)算。圖 1 顯示了通過 FCB 將 PowerPC 440 處理器連接至 Virtex-5 APU-FPU 的典型實(shí)施方案。
PowerPC 440 Processor Block: PowerPC 440 處理器模塊
PowerPC 440 Processor: PowerPC 440處理器
PLB and Memory Crossbar: PLB 和存儲(chǔ)器交叉開關(guān)
Virtex-5 APU Floating-Point Unit: Virtex-5 APU 浮點(diǎn)單元
in FPGA Logic: FPGA 邏輯內(nèi)
關(guān)于 PowerPC 440 FPU
賽靈思針對(duì)嵌入在 Virtex-5 FXT FPGA 中的 PowerPC 440 處理器專門設(shè)計(jì)了 APU-FPU。FPU 通過 APU 接口與處理器的緊密結(jié)合可讓浮點(diǎn)運(yùn)算單元直接執(zhí)行原生 PowerPC 浮點(diǎn)指令,這相對(duì)軟件仿真而言,速度一般可提高 6 倍。
除少數(shù)情況外,賽靈思 PowerPC FPU 一般符合單精度和雙精度浮點(diǎn)運(yùn)算的 IEEE-754 標(biāo)準(zhǔn)。賽靈思提供了為 2:1和 3:1 APU-FPU 時(shí)鐘速率而優(yōu)化的變量,使 PowerPC 處理器能夠以最高頻率運(yùn)行。自發(fā)性指令發(fā)送不僅會(huì)隱藏運(yùn)算時(shí)延,而且還會(huì)減少每條指令的周期。此外,這些優(yōu)化的實(shí)施方案可充分發(fā)揮器件的高性能 DSP 特性,以縮短運(yùn)算符時(shí)延并減少邏輯計(jì)數(shù)與功耗。賽靈思在其嵌入式開發(fā)套件 (EDK) 中支持 APU-FPU 流。
圖 2 為 FPU 架構(gòu)的整體框架圖。APU-FPU 由執(zhí)行單元、寄存器文件、總線接口以及所有管理浮點(diǎn)指令執(zhí)行情況所必需的控制邏輯組成。
FCB2 Bus: FCB2 總線
FCB2 Bus Interface: FCB2 總線接口
Execution Control/Decode Logic: 執(zhí)行控制/解碼邏輯
Register File & Forwarding: 寄存器文件與轉(zhuǎn)發(fā)
Add/Sub/Convert: 添加/子集/轉(zhuǎn)換
Compare: 比較
Multiply: 乘
Divide: 除
Square Root: 平方根
Round: 四舍五入
圖 2——Virtex-5 FXT PowerPC 440 浮點(diǎn)協(xié)處理器架構(gòu)
FPU 含有兩個(gè)變量。雙精度變量可執(zhí)行除 PowerPC ISA 圖形子集(fsel、fres 和 frsqrte)以外的所有浮點(diǎn)指令,其中也包括單精度變量執(zhí)行的指令。這意味著您能使用帶各種商用編譯器和操作系統(tǒng)的 FPU(具體請(qǐng)參見: www.xilinx.com/ise/embedded/epartners/listing.htm )。
賽靈思編譯器支持的 APU-FPU 單精度變量使用的資源較少。當(dāng) FPU 被占用時(shí),雙精度操作將通過軟件仿真來執(zhí)行。
將 APU-FPU 連接至 PowerPC 440
有兩種方法可將 APU-FPU 連接至 PowerPC 440 處理器:1、利用賽靈思 Platform Studio 設(shè)計(jì)工具中的 Base System Builder (BSB) 向?qū)В?、將 APU-FPU 單元添加至當(dāng)前設(shè)計(jì)方案中即可。
您首先需利用 BSB 向?qū)Т_定目標(biāo)板和所期望的處理器(PowerPC 或 MicroBlaze™),然后通過一系列復(fù)選框和下拉菜單選擇設(shè)計(jì)中所需的 IP。借助 BSB 向?qū)?,能夠輕松快速地組裝并測(cè)試基礎(chǔ)處理器系統(tǒng)。您只需勾選您要選擇的 FPU 框,即可實(shí)現(xiàn)APU-FPU 連接(見圖 3 頂部)。該向?qū)Э蓪?shí)現(xiàn)一個(gè)經(jīng)過優(yōu)化能以處理器時(shí)鐘三分之一速率運(yùn)行的雙精度 FPU。您也可定制更高時(shí)鐘速率的 FPU 和單精度 FPU。
如果不想使用向?qū)?,您也可通過另一種方法來實(shí)現(xiàn),即按照系統(tǒng)組裝視圖拖動(dòng) IP Catalog 下的 APU- FPU IP,然后對(duì) FPU 進(jìn)行配置即可。圖 3 底部圖片顯示了 IP Catalog (見左下方)和系統(tǒng)組裝視圖中新添加的 FPU。右擊 FPU 并選擇 Configure IP,然后您便可選取想要的精度(單精度或雙精度)并確定您希望該 FPU 是針對(duì)低時(shí)延(三分之一時(shí)鐘速率)或是高速率(二分之一時(shí)鐘速率)而進(jìn)行優(yōu)化;最后將 FPU 連接至 FCB 并將 FPU/FCB 時(shí)鐘鏈接至適當(dāng)?shù)臅r(shí)鐘(通常是二分之一或三分之一處理器時(shí)鐘速率。)
圖 3——通過 BSB 向?qū)В敳浚┮约跋到y(tǒng)組裝視圖將 FPU 添加至現(xiàn)有 PowerPC 處理器設(shè)計(jì)方案中
讓浮點(diǎn)盡在掌握之中
Virtex-5 APU-FPU 提供免費(fèi)的 Platform Studio,支持浮點(diǎn)定制。您可分別采用約 2500 個(gè)或約 4900 個(gè) LUT 寄存器對(duì)來實(shí)現(xiàn)單或雙精度 FPU,也可在無需添加 FPGA 邏輯的情況下運(yùn)行具有浮點(diǎn)仿真功能的軟件應(yīng)用。
性能水平可預(yù)先選擇:選擇適當(dāng)?shù)?FPU,或?qū)嵤┰O(shè)計(jì)并確定軟件仿真是否滿足要求;如未滿足,可升級(jí)軟 FPU。
顯而易見,如果能從軟件仿真中獲得足夠的性能,則無需 FPU。但如果需要更高的性能,可使用 APU-FPU。如果應(yīng)用需要 FPU 或正在使用與之配套的編譯器,可選擇雙精度 FPU。如果應(yīng)用僅需單精度運(yùn)算且您正在使用賽靈思 GNU 編譯器,則單精度 FPU 會(huì)降低邏輯要求。謹(jǐn)記,如果選擇雙精度 FPU,它將執(zhí)行單精度運(yùn)算,然后將運(yùn)算結(jié)果進(jìn)行四舍五入,以提供單精度 FPU 的精確度。
典型性能增益
當(dāng)您在評(píng)估是需要硬 FPU 還是軟 FPU 時(shí),應(yīng)首先確定代碼的浮點(diǎn)密集程度。代碼通常包括不同浮點(diǎn)、整數(shù)、存儲(chǔ)器以及邏輯運(yùn)算等。因此,盡管基準(zhǔn)可作為潛在性能提升的指示器,但運(yùn)行您自己的代碼會(huì)更好。
表 1 列出了 400 MHz Virtex-5 FXT PowerPC 440 處理器、軟件仿真以及與該處理器相連的 200 MHz 雙精度 APU-FPU 的基準(zhǔn)數(shù)據(jù),透過該表可清晰了解 APU-FPU 執(zhí)行浮點(diǎn)密集代代碼的性能表現(xiàn)。
表中所列數(shù)據(jù)是賽靈思用于評(píng)估處理器浮點(diǎn)單元性能的一組基準(zhǔn)數(shù)據(jù)的子集。平均而言,軟 FPU 可比軟件仿真快 6 倍,而單精度 FPU 可比雙精度 FPU 快 13%。
在浮點(diǎn)占主導(dǎo)地位的情況下,可通過優(yōu)化代碼來提高軟 FPU 的性能,以充分利用 FPU 管線。FIR 濾波器基準(zhǔn)就是一例很好的潛在性能增益。未經(jīng)優(yōu)化的代碼是典型的“教科書代碼”,雖便于閱讀,但大多數(shù) FPU 執(zhí)行時(shí)往往效率低下。然而,通過實(shí)施循環(huán)展開、最大限度地延長(zhǎng) FPU 寄存器中常數(shù)的保留時(shí)間,以及交叉存取其他代碼與浮點(diǎn)指令,設(shè)計(jì)方案的性能可得到顯著提高。在本例中,優(yōu)化濾波器代碼比未經(jīng)優(yōu)化的代碼快 3.8 倍,比軟件仿真快 30 倍。
總之,Virtex-5 FXT 借助其 PowerPC 440 處理器可為嵌入式應(yīng)用提供眾多選擇。您可在有無 FPU 的情況下執(zhí)行設(shè)計(jì)方案、用性能較高的 FPU來替代軟件仿真技術(shù)、為 Virtex-5 FXT 量身定制處理能力資源,所有這些都是為了滿足您的最佳設(shè)計(jì)需求,讓“一切盡在您的掌握之中” 。
* EDK 10.1 SP2 GNU 帶標(biāo)志的編譯器:-O3 -funroll-循環(huán)
表 1——400 MHz 處理器與 200-MHz FPU 的典型浮點(diǎn)性能
評(píng)論