0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在不改變RTL代碼的情況下,優(yōu)化FPGA HLS設(shè)計

454398 ? 來源:賽靈思中文社區(qū) ? 作者:賽靈思中文社區(qū) ? 2020-12-20 11:46 ? 次閱讀

用軟件從 C 轉(zhuǎn)化來的 RTL 代碼其實并不好理解。今天我們就來談?wù)?,如何在不改?RTL 代碼的情況下,提升設(shè)計性能。

本項目所需應用與工具:賽靈思HLS、Plunify Cloud 以及 InTime。

前言
高層次的設(shè)計可以讓設(shè)計以更簡潔的方法捕捉,從而讓錯誤更少,調(diào)試更輕松。然而,這種方法最受詬病的是對性能的犧牲。在復雜的 FPGA 設(shè)計上實現(xiàn)高性能,往往需要手動優(yōu)化 RTL 代碼,這也意味著從 C 轉(zhuǎn)化得到 RTL 基本不可能。其實,使用 FPGA 工具設(shè)置來優(yōu)化設(shè)計可以最小限度地減少對性能的犧牲,這種方法是存在的。

高效地找到合適的FPGA工具設(shè)置
盡管工程師們知道 FPGA 工具的設(shè)置,但是這些設(shè)置往往并沒有充分利用。一般而言,工具設(shè)置只有在出現(xiàn)時序問題的時候才會派上用途。然而,對于已經(jīng)達到性能目標的設(shè)計來說,如果繼續(xù)調(diào)整工具設(shè)計,仍然有10%-50%的性能提升潛力。

真正的難點在于選擇正確的工具設(shè)置,畢竟各種 FPGA 工具一般都有有30-70個不同的布局布線設(shè)置,可選的設(shè)置組合實在是太多了。您可以寫腳本來運行不同的推薦指令/策略。市面上也有工具,來自動管理并運行設(shè)計探索。

另一個難點就是不充裕的計算能力。典型的嵌入式應用是在單臺電腦上設(shè)計的。運行多個編譯需要更多的計算能力,這就要求更多的時間。如果您可以(使用云計算)并行運行,周轉(zhuǎn)時間就會變短。

如何優(yōu)化高層次的設(shè)計 - “Sobel濾鏡”項目
這是一個用于視屏處理的參考設(shè)計,來自賽靈思的官網(wǎng) https://china.xilinx.com/support/documentation/application_notes/xapp890... 。該設(shè)計的功能是 Sobel 濾鏡,目標器件是擁有雙核Dual ARM? Cortex?-A9MPCore 的 FPGA。

我們使用賽靈思 HLS 來打開這個設(shè)計。

圖一:參考設(shè)計– Sobel濾鏡

圖一:參考設(shè)計– Sobel濾鏡

它的時鐘周期是5.00ns,也就是200MHz。從下圖的時序預估中可以看出,它離時序目標還差506ps(181MH1),也就是比目標速率還差10%。

圖二:當前時序結(jié)果

圖二:當前時序結(jié)果

導出成 RTL 項目
不需要改變 C++ 代碼,把設(shè)計輸出成一個RTL 的 Vivado 項目。在 “Solution”下面,選擇“Export RTL”。

圖三:從HLS輸出Vivado項目

圖三:從HLS輸出Vivado項目

它會在后臺執(zhí)行 Vivado,并生成一個項目文件(XPR)。它同時也會編譯設(shè)計,您應該在控制臺(Console)看到真實的時序細節(jié)。一旦完成,您可以在 /solution/impl/verilog/ 文件夾下找到項目文件。

圖四:Vivado 項目文件

圖四:Vivado 項目文件

找到這個 XPR 文件之后,您可以用 Vivado 打開它來驗證。您將看到生成好的 RTL 源文件。

圖五:從 HLS 生成的 RTL

圖五:從 HLS 生成的 RTL

時序優(yōu)化
下一步,是使用 InTime 設(shè)計探索工具,當然,您也可以自己寫腳本來嘗試 Vivado 工具中自帶的指令和策略。請申請 InTime 的免費試用在本地運行,也可以注冊一個 Plunify Cloud 云平臺的賬戶,試用所提供的免費云幣來在云端運行預置好的 FPGA 工具。

啟動 InTime 之后,打開項目文件。在選擇 Vivado 版本時,請使用“相同的”版本。例如,如果您使用2017.3 HLS,請選擇2017.3 Vivado。

選擇“Hot Start”配方(recipe)。此配方包含一系列更具以往其他設(shè)計的經(jīng)驗而推薦的策略。

圖六:選擇

圖六:選擇 "Hot Start" 配方

點擊“Start Recipe”來開始優(yōu)化。如果您在云端運行,您應該并行運行多個編譯來減少周轉(zhuǎn)時間。

優(yōu)化過程和結(jié)果
第一輪結(jié)束之后 (“Hot Start”配方),最好的結(jié)果是“hotstart_1”策略。然而,它仍然距離目標時序90ns。

我們在“HotStart_1”的結(jié)果上使用了第二個配方,叫做“Extra Opt Exploration”。這一輪將集中優(yōu)化關(guān)鍵的路徑。這是一次迭代優(yōu)化,并且只要仍有提升,就不斷地重復自己。如果達到時序目標或者不再提升的時候,它就會停止。

圖七:僅通過工具設(shè)置完成時序收斂

圖七:僅通過工具設(shè)置完成時序收斂

經(jīng)過兩輪優(yōu)化,總共15此編譯后,設(shè)計達到了目標時序,200MHz。而這一切完全沒有修改 RTL 源代碼。

讓性能更進一步
讓性能更進一步需要各方面的優(yōu)化 – 結(jié)構(gòu)設(shè)計、代碼和工具。工具設(shè)置的探索可以克服高層次設(shè)計的性能犧牲,并且不會讓生產(chǎn)效率的好處減少。對于高層次設(shè)計的工程師來說,這是一種共贏。

編輯:hfy


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598879
收藏 人收藏

    評論

    相關(guān)推薦

    優(yōu)化 FPGA HLS 設(shè)計

    優(yōu)化 FPGA HLS 設(shè)計 用工具用 C 生成 RTL代碼基本不可讀。以下是如何在
    發(fā)表于 08-16 19:56

    何在UDP的情況下監(jiān)聽自己通信是否中斷?

    請教大佬一個問題。 我如何在UDP的情況下監(jiān)聽自己通信是否中斷? 不知道有沒有什么可以參考的?
    發(fā)表于 06-24 06:04

    谷景揭秘如何在色環(huán)電感封裝尺寸不變的情況下升級電感性能

    谷景揭秘如何在色環(huán)電感封裝尺寸不變的情況下升級電感性能 編輯:谷景電子 色環(huán)電感作為電子電路中的一種特別重要的電感元件,它對于電路運行的穩(wěn)定性有著重要影響。色環(huán)電感的種類很多,不同的電路需求對色環(huán)
    的頭像 發(fā)表于 06-23 09:45 ?269次閱讀

    請問如何在不使用代碼配置的情況下閃爍LED指示燈?

    我試圖閃爍端口引腳上不閃爍的 LED 指示燈,但當我使用內(nèi)置代碼配置器進行嘗試時,在這種情況下 LED 指示燈會閃爍。 但我想使用代碼配置器以及我自己的函數(shù),在這種情況下,我遇到了問題
    發(fā)表于 05-24 07:47

    使用增量式編碼器,在PI參數(shù)不改變情況下,為什么MCSDK初始定位后轉(zhuǎn)速波動大?

    使用增量式編碼器,第一次啟動時,轉(zhuǎn)速波動較大,然后第二次啟動轉(zhuǎn)速波動就平穩(wěn)了,我想問一,在PI參數(shù)不改變情況下,為什么MCSDK初始定位后轉(zhuǎn)速波動大?
    發(fā)表于 03-20 06:03

    何在幅度頻率不變的情況下將正弦波變?yōu)榉讲ǎ?/a>

    何在幅度頻率不變的情況下將正弦波變?yōu)榉讲ǎ?方波是一種特殊形式的波形,它的波形在周期內(nèi)由兩個值之間的突然跳變組成,通常是由高電平和低電平組成。與之相反,正弦波是一種平滑連續(xù)的波形,其幅度變化是沿著
    的頭像 發(fā)表于 02-06 15:51 ?3335次閱讀

    何在不改變頻率的情況下改變PWM占空比?

    我需要支持來改變 PWM 的到期周期,而不會發(fā)生故障,每 10 毫秒就會改變頻率。 目前我遇到了故障,這導致 PWM 在驅(qū)動電機方面出現(xiàn)了意想不到的功能。
    發(fā)表于 01-29 08:37

    AMD-Xilinx的Vitis-HLS編譯指示小結(jié)

    ;j++) { b = 2; } } 由于這條指令的應用條件十分苛刻,因此很少使用。一般直接通過代碼重構(gòu)的方式對連續(xù)循環(huán)進行優(yōu)化。 參考文檔 官方vitis-hls的ug1399文檔 FP
    發(fā)表于 12-31 21:20

    什么是always on buffer?什么情況下需要插always on buffer?

    相比普通的buffer cell,always on buffer(AOB)有secondary always on pin,可以讓AOB即使在primary power off的情況下保持on的狀態(tài);AOB在secondary pg pin off的情況下也是off的。
    的頭像 發(fā)表于 12-01 15:31 ?1883次閱讀
    什么是always on buffer?什么<b class='flag-5'>情況下</b>需要插always on buffer?

    何在電壓不穩(wěn)的情況下保障SSD的穩(wěn)定性能?

    何在電壓不穩(wěn)的情況下保障SSD的穩(wěn)定性能?
    的頭像 發(fā)表于 11-24 15:50 ?475次閱讀
    如<b class='flag-5'>何在</b>電壓不穩(wěn)的<b class='flag-5'>情況下</b>保障SSD的穩(wěn)定性能?

    何在不燒寫的情況下使用軟件讀取ESP8266內(nèi)存容量?

    何在不燒寫的情況下使用軟件讀取ESP8266內(nèi)存容量
    發(fā)表于 11-10 08:06

    何在不拆芯片的情況下讀取出esp8266燒寫的固件?

    何在不拆芯片不使用編程器的情況下讀取出esp8266燒寫的固件
    發(fā)表于 11-09 06:45

    如何優(yōu)化FPGA HLS設(shè)計呢?

    用工具用 C 生成 RTL代碼基本不可讀。以下是如何在不更改任何 RTL情況下提高設(shè)計性能。
    的頭像 發(fā)表于 10-30 14:34 ?890次閱讀
    如何<b class='flag-5'>優(yōu)化</b><b class='flag-5'>FPGA</b> <b class='flag-5'>HLS</b>設(shè)計呢?

    優(yōu)化FPGA HLS設(shè)計

    用工具用 C 生成 RTL代碼基本不可讀。以下是如何在不更改任何 RTL情況下提高設(shè)計性能。
    的頭像 發(fā)表于 10-30 11:41 ?591次閱讀
    <b class='flag-5'>優(yōu)化</b><b class='flag-5'>FPGA</b> <b class='flag-5'>HLS</b>設(shè)計

    HLSRTL無法導出IP核是為什么?

    請教一,我在HLS里面要將以下程序生成IP核,C Synthesis已經(jīng)做好了,但是在export RTL的時候一直在運行 int sum_single(int A int B
    發(fā)表于 09-28 06:03