狠狠做深爱婷婷久久一区,欧美日韩国内,久久麻豆精品传媒,久久久一区一区二区,色鬼伦理片,99视频精品久久,久久精品国产久久久久久,久久久伦理电影一区二,磁力天堂河北彩花

新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 面向算法硬件加速的FPGA實現(xiàn)方法

面向算法硬件加速的FPGA實現(xiàn)方法

作者: 時間:2026-04-30 來源: 收藏

當(dāng)開發(fā)者想要榨干某一的極限性能、且軟件優(yōu)化手段已全部用盡時,可以通過軟硬件功能重新劃分對任務(wù)進行。借助 ,無需更換處理器、也無需改動電路板級設(shè)計,就能輕松將軟件模塊替換為硬件模塊。本文將講解如何利用 實現(xiàn)。

可定制指令集的可配置處理器架構(gòu)

1777533571216935.jpg

圖 1:帶自定義指令的可配置處理器架構(gòu)

基于 簡介

低成本可編程邏輯器件在嵌入式系統(tǒng)中的應(yīng)用越來越普遍,讓設(shè)計人員無需大幅改動處理器與硬件板卡,就能提升系統(tǒng)性能??删幊踢壿嬁蓪⒂嬎忝芗秃瘮?shù)轉(zhuǎn)化為硬件加速器。從軟件視角來看,這相當(dāng)于把函數(shù)調(diào)用卸載到定制硬件模塊中執(zhí)行,其運行速度往往遠(yuǎn)高于經(jīng)過匯編極致優(yōu)化、或改用查表實現(xiàn)的同等軟件代碼。

1. 什么是硬件加速

硬件加速是用專用硬件模塊替代軟件,借助硬件天然的并行與高速特性提升運算速度。

從軟件調(diào)用角度看,訪問硬件加速器和調(diào)用普通函數(shù)并無區(qū)別;差異僅在于該功能由硬件實現(xiàn),且對調(diào)用方完全透明。

根據(jù)算法類型不同,硬件加速最高可將執(zhí)行效率提升兩個數(shù)量級。對于復(fù)雜數(shù)學(xué)運算、大批量數(shù)據(jù)搬運、重復(fù)性變換類任務(wù),硬件具備天然速度優(yōu)勢。后文將介紹非常適合硬件加速的常見軟件運算場景。

在搭載 FPGA 的系統(tǒng)中,產(chǎn)品開發(fā)周期任意階段都可新增定制硬件邏輯。設(shè)計人員可以先完成軟件開發(fā)并在硬件原型上運行,后續(xù)再逐步敲定哪些功能用硬件實現(xiàn)、哪些保留在軟件中。這種增量式開發(fā)方式可靈活劃分軟硬件邊界。

廠商配套開發(fā)工具支持軟硬件無縫切換,可自動生成總線與中斷邏輯的硬件描述語言(HDL)代碼,同時生成適配系統(tǒng)的專用軟件庫與頭文件。

2. 兼具 RISC 簡潔性與部分 CISC 能力

精簡指令集(RISC)的設(shè)計目標(biāo)是保持指令簡單、單指令執(zhí)行速度極快;復(fù)雜指令集(CISC)則思路相反:單指令執(zhí)行耗時更長,但可完成更復(fù)雜的處理邏輯。兩種架構(gòu)各有優(yōu)勢,均被廣泛應(yīng)用。

RISC 的簡潔高速,與通過硬件實現(xiàn)的類 CISC 復(fù)雜運算相結(jié)合,能帶來顯著設(shè)計優(yōu)勢。這正是硬件加速的核心思想:新增專用硬件模塊替代軟件運算,提升處理能力、降低代碼復(fù)雜度與代碼量,以硬件資源換取速度與邏輯簡潔性。

硬件加速主要有兩種實現(xiàn)方式:自定義指令硬件外設(shè)

  • 自定義指令:通常作為可配置處理器算術(shù)邏輯單元(ALU)的指令擴展,處理器將其視作一條擁有獨立操作碼的普通指令。在 C 語言中可通過宏封裝,調(diào)用方式與普通函數(shù)完全一致。

若一條自定義指令需要多個時鐘周期完成、且被頻繁調(diào)用,可設(shè)計為流水線結(jié)構(gòu),在完成首次延遲后,每個時鐘周期均可輸出一個運算結(jié)果。

  • 硬件外設(shè):以內(nèi)存映射外設(shè)形式實現(xiàn)加速。軟件向外設(shè)寄存器寫入數(shù)據(jù),而非傳入軟件函數(shù);運算在 CPU 外部獨立完成,CPU 可并行執(zhí)行其他任務(wù)。與自定義指令不同,硬件外設(shè)可無需 CPU 干預(yù),直接訪問系統(tǒng)其他外設(shè)與內(nèi)存。

選擇自定義指令還是硬件外設(shè),取決于硬件功能邏輯、工作方式與運行耗時:

  • 僅需少數(shù)時鐘周期即可完成的運算,優(yōu)先選用自定義指令,開銷更??;

  • 硬件外設(shè)通常需要多條指令配置控制、狀態(tài)、數(shù)據(jù)寄存器,再用一條指令讀取結(jié)果;

  • 運算耗時較長時更適合硬件外設(shè),不會阻塞 CPU 流水線;也可選用流水線型自定義指令。

另一區(qū)別:自定義指令支持的操作數(shù)數(shù)量有限、僅能返回單個結(jié)果,且受指令集架構(gòu)約束;若硬件需要讀寫系統(tǒng)內(nèi)存或其他外設(shè),必須采用內(nèi)存映射外設(shè),因為自定義指令無法直接訪問系統(tǒng)總線。

16位CRC算法的硬件實現(xiàn)核心

圖 2:實現(xiàn) 16 位 CRC 算法的硬件內(nèi)核

3. 篩選適合硬件加速的代碼

若要對 C 代碼做速度優(yōu)化,可通過性能分析工具或人工代碼審查找出性能熱點,熟悉代碼架構(gòu)有助于精準(zhǔn)定位瓶頸。

即便找到性能瓶頸,軟件優(yōu)化仍有一定局限。常用手段包括使用處理器原生位寬變量、預(yù)計算查表法、常規(guī)算法軟件優(yōu)化,通??蓪崿F(xiàn)數(shù)倍提速。過去用匯編重寫關(guān)鍵代碼能獲得巨大性能收益,但現(xiàn)代編譯器優(yōu)化能力極強,手寫匯編的提升空間已非常有限。想要獲得量級性能提升,僅靠軟件優(yōu)化往往難以實現(xiàn)。

硬件實現(xiàn)相比軟件可提速數(shù)個數(shù)量級。因此無需盲目把整個模塊全部硬件化,應(yīng)優(yōu)先挑選硬件天生擅長的運算:大批量數(shù)據(jù)搬移、高強度數(shù)學(xué)運算、高頻循環(huán)迭代任務(wù)。若一項任務(wù)包含多步算術(shù)運算,可整體硬件加速;有時僅加速其中關(guān)鍵一步,即可滿足整機性能指標(biāo)。

4. 實例:CRC 算法硬件加速

CRC 校驗這類校驗算法運算重復(fù)、計算密集,是硬件加速的典型適用場景。本節(jié)以 CRC 算法為例,介紹軟件優(yōu)化、自定義指令、硬件外設(shè)三種實現(xiàn)方式,并對比性能差異與取舍。

優(yōu)化思路:先做常規(guī)軟件優(yōu)化,再通過自定義指令進一步加速,最后對比不同實現(xiàn)方案的性能與利弊。

CRC 用于檢測傳輸過程中的數(shù)據(jù)損壞,具備強檢錯能力、對吞吐影響小,只需在原始數(shù)據(jù)后附加 CRC 校驗位即可。其本質(zhì)是基于 16 位或 32 位多項式的模 2 除法,通過迭代異或與移位完成計算。處理單字節(jié)可能需要上百條指令,大數(shù)據(jù)包則會產(chǎn)生數(shù)萬條指令開銷,任何優(yōu)化都能顯著提升吞吐。

如下代碼清單 1 接收消息指針與字節(jié)長度,返回 CRC 余數(shù)。雖然輸入按字節(jié)處理,但底層逐位運算,包含逐位與、移位、異或及循環(huán)控制,軟件執(zhí)行效率偏低。

(代碼清單 1:C 語言逐位 CRC 算法源碼)

4.1 基于查表法的軟件優(yōu)化

由于 CRC 多項式除數(shù)固定,可預(yù)先計算所有單字節(jié)對應(yīng)的 CRC 結(jié)果并存入查找表,運行時逐字節(jié)查表即可完成計算。

查找表可存放于 ROM 或 RAM,在 CRC 運算前初始化,共包含 256 個表項,對應(yīng)所有 8 位數(shù)值。代碼清單 2 為查找表初始化與快速 CRC 計算實現(xiàn)。

(代碼清單 2:CRC 查表初始化與快速計算 C 代碼)

優(yōu)化后每次單字節(jié)運算僅需兩次異或、兩次移位與兩次內(nèi)存讀取,以內(nèi)存換速度,相比逐位算法提速約9.9 倍。若追求更高性能,可擴大查表規(guī)?;蚴謱憛R編;但想要實現(xiàn) 20~500 倍的提升,必須依靠硬件加速。

4.2 自定義指令實現(xiàn)

CRC 由大量重復(fù)異或、移位操作構(gòu)成,邏輯簡單、非常適合硬件實現(xiàn)。硬件模塊可在極少時鐘周期內(nèi)完成一次 CRC 運算,且無需訪問系統(tǒng)外設(shè)與內(nèi)存時,自定義指令通常優(yōu)于硬件外設(shè)。

硬件實現(xiàn)時可依據(jù) CRC 標(biāo)準(zhǔn),按 16 位或 32 位分塊并行處理。以 16 位多項式 CRC-CCITT 為例,按 16 位并行處理效率最優(yōu)。若在 8 位單片機上運行,操作數(shù)加載與結(jié)果返回的額外開銷會抵消部分優(yōu)勢。

圖 2 為 16 位 CRC 硬件內(nèi)核,逐位將消息比特送入異或 - 移位運算單元。

代碼清單 3 為在可配置嵌入式處理器上,對 64KB 數(shù)據(jù)塊通過自定義指令計算 CRC 的 C 語言示例。

(代碼清單 3:基于自定義指令的 CRC 計算 C 代碼)

采用自定義指令后,CRC 運算在代碼層面體現(xiàn)為普通函數(shù)或宏調(diào)用。例如 Nios 處理器開發(fā)工具會自動生成nm_crc()宏用于調(diào)用自定義指令。使用前需按 CRC 標(biāo)準(zhǔn)初始化內(nèi)部 CRC 寄存器,循環(huán)中每處理一個 16 位字調(diào)用一次指令即可。該方案相比逐位軟件實現(xiàn)提速約 27 倍。

4.3 外設(shè) + DMA 實現(xiàn)

將 CRC 實現(xiàn)為內(nèi)存映射硬件外設(shè),搭配 DMA 自動喂入數(shù)據(jù),可實現(xiàn)更高吞吐。DMA 省去 CPU 為每次 CRC 運算加載操作數(shù)的額外時鐘開銷;外設(shè)處理當(dāng)前數(shù)據(jù)塊時,DMA 可提前搬運下一塊數(shù)據(jù)。

1777533658523739.jpg

圖 3:集成 CRC 外設(shè)與 DMA 的系統(tǒng)框圖

針對 64KB 數(shù)據(jù)塊,硬件外設(shè) + DMA方案相比純軟件逐位 CRC最高可提速約 500 倍。數(shù)據(jù)塊越大,DMA 初始化開銷占比越低,性能提升越明顯;小數(shù)據(jù)量場景下使用 DMA 收益有限。

本文基于 Altera Stratix FPGA 內(nèi)部 Nios 處理器,完成了 CRC-CCITT(16 位多項式)三種方案實測。不同數(shù)據(jù)長度下的性能對比、FPGA 資源(內(nèi)存、邏輯單元)占用情況表明:投入硬件資源越多,運算速度越高,本質(zhì)是以硬件資源換取性能

5. 基于 FPGA 硬件加速的優(yōu)勢

基于 FPGA 的嵌入式系統(tǒng),無需在項目初期就硬性劃分軟硬件邊界。開發(fā)中途若需要更高性能,可直接用 FPGA 邏輯對性能熱點做硬件加速。

只要 FPGA 容量充足,可編程邏輯可按需定制功能、無需改動電路板,僅實現(xiàn)必需的硬件邏輯即可,也無需更換處理器、手寫匯編來提升性能。

在 FPGA 內(nèi)部嵌入可配置處理器,賦予設(shè)計極高靈活性:任意軟件模塊均可改成自定義指令或硬件外設(shè)實現(xiàn)。新增專用硬件的性能往往優(yōu)于通用商用微處理器。

FPGA 擁有豐富的邏輯、存儲資源,可供可配置處理器系統(tǒng)充分調(diào)度利用。

算法既可以軟件實現(xiàn),也可以硬件實現(xiàn)。出于開發(fā)便捷性與成本考量,絕大多數(shù)常規(guī)運算仍保留軟件實現(xiàn),僅在速度不達標(biāo)時引入硬件加速。軟件優(yōu)化有上限,而硬件加速是突破性能瓶頸的有效途徑。

借助 FPGA 可靈活互換軟硬件模塊,無需更換處理器、無需板級改版,設(shè)計人員可在速度、邏輯資源、內(nèi)存、代碼量、成本之間做最優(yōu)權(quán)衡,快速定制具備功能擴展與性能優(yōu)化能力的嵌入式專用系統(tǒng)。


關(guān)鍵詞: 算法 硬件加速 FPGA

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉
扶沟县| 即墨市| 滦平县| 越西县| 巴林右旗| 靖远县| 伊金霍洛旗| 元朗区| 襄城县| 铁力市| 鄂伦春自治旗| 洛隆县| 聊城市| 赫章县| 文水县| 阿克陶县| 惠来县| 诏安县| 沐川县| 济南市| 忻城县| 梨树县| 灵山县| 吉隆县| 禹城市| 蒲江县| 和林格尔县| 含山县| 始兴县| 钟祥市| 海南省| 五大连池市| 临湘市| 杭锦旗| 石林| 武川县| 商水县| 湘潭市| 缙云县| 额尔古纳市| 吉安县|