在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

如何使用xilinx的HLS工具進行算法的硬件加速

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-06-02 09:48 ? 次閱讀

引言

本系列教程演示如何使用xilinxHLS工具進行算法的硬件加速。分為三個部分,分別為HLSIP設計,vivado硬件環境搭建,SDK端軟件控制。HLS端,要將進行硬件加速的軟件算法轉換為RTL級電路,生成便于嵌入式使用的axi控制端口,進行數據的傳輸和模塊的控制。

HLS介紹】

HLS可以將算法直接映射為RTL電路,實現了高層次綜合。vivado-HLS可以實現直接使用 CC++ 以及 System C 語言對XilinxFPGA器件進行編程。用戶無需手動創建 RTL,通過高層次綜合生成HDL級的IP核,從而加速IP創建HLS的官方參考文檔主要為:ug871ug871-vivado-high-level-synthesis-tutorial.pdf )和ug902ug902-vivado-high-level-synthesis.pdf)。 對于Vivado Hls來說,輸入包括TesbenchC/C++源代碼和Directives,相應的輸出為IP CatalogDSPSysGen,特別的,一個工程只能有一個頂層函數用于綜和,這個頂層函數下面的子函數也是可以被綜合的,會生成相應的VHDLVerilog代碼,所以,C綜合后的RTL代碼結構通常是跟原始C描述的結構是一致的,除非是子函數功能很簡單,所需要的邏輯量很小。并不是所有的C/C++都可以被綜合,動態內存分配和涉及到操作系統層面的操作不可以被綜合。Vivado HLS 的設計流程如下:

b090ef62-e20a-11ec-ba43-dac502259ad0.png

在整個流程中,用戶先創建一個設計 CC++ SystemC 源代碼,以及一個C的測試平臺。通過 Vivado HLS Synthesis 運行設計,生成 RTL 設計,代碼可以是 Verilog,也可以是 VHDL。有了 RTL 后,隨即可以執行設計的 Verilog VHDL 仿真,或使用工具的C封裝器技術創建 SystemC 版本。然后可以進行System C架構級仿真,進一步根據之前創建的 C 測試平臺,驗證設計的架構行為和功能。設計固化后,就可以通過 Vivado 設計套件的物理實現流程來運行設計,將設計編程到器件上,在硬件中運行和/或使用 IP 封裝器將設計轉為可重用的 IP

Step 1: 新建一個工程

1,Creat New Project新建文檔,輸入工程名稱和工程路徑。完成后點擊Next

b0a26cd8-e20a-11ec-ba43-dac502259ad0.png

2,添加設計文件,并制定頂層函數。完成后點擊Next

b0bcbe76-e20a-11ec-ba43-dac502259ad0.png

3,添加C語言仿真文件。完成后點擊Next

b0feeb98-e20a-11ec-ba43-dac502259ad0.png

4,:配置Solution Name,一般默認即可。配置Clock Period,單位是ns。配置Uncertainty,默認為空。選擇產品型號。完成后點擊Finish

b1522f56-e20a-11ec-ba43-dac502259ad0.png

5,工程新建成功后進入的開發界面,HLS是典型的Eclipse界面,和SDK的界面十分相似。

b180db26-e20a-11ec-ba43-dac502259ad0.png

導入的文件的代碼如下:1,源文件。axi_interfaces.c
#include"axi_interfaces.h"void axi_interfaces (dout_t d_o[N], din_t d_i[N]) {inti,rem;// Store accumulated datastaticdacc_tacc[CHANNELS];axi_interfaces_label0:for (i=0;i
2,頭文件。axi_interfaces.h

		#ifndef AXI_INTERFACES_H_ #defineAXI_INTERFACES_H_ #include typedef int din_t; typedef int dout_t; typedefintdacc_t; #define CHANNELS 8 #define SAMPLES 4 #defineNCHANNELS*SAMPLES voidaxi_interfaces(dout_td_o[N],din_td_i[N]); #endif
		3,測試文件。axi_interfaces_test.c

		#include "axi_interfaces.h" int main () { // Create input data  din_t d_i[N] = {10, 20, 30, 40, 50, 60, 70, 80, 11, 21, 31, 41, 51, 61, 71, 81, 12, 22, 32, 42, 52, 62, 72, 82, 13, 23, 33, 43, 53, 63, 73, 83};  dout_t d_o[N]; int i, retval=0; FILE*fp; // Call the function to operate on the data axi_interfaces(d_o,d_i); // Save the results to a file fp=fopen("result.dat","w"); fprintf(fp, "Din Dout "); for(i=0;i  fprintf(fp, "%d %d ", d_i[i], d_o[i]); } fclose(fp); // Compare the results file with the golden results retval = system("diff --brief -w result.dat result.golden.dat"); if (retval != 0) { printf("Test failed !!! "); retval=1; } else { printf("Test passed ! "); } // Return 0 if the test passes  return retval; }
		4,測試數據。result.golden.dat

		Din Dout 10 10 20 20 30 30 40 40 50 50 60 60 70 70 80 80 11 21 21 41 31 61 41 81 51 101 61 121 71 141 81 161 12 33 22 63 32 93 42 123 52 153 62 183 72 213 82 243 13 46 23 86 33 126 43 166 53 206 63 246 73 286 83 326
		
		

Step 2: C源代碼驗證

本步驟是對功能代碼的邏輯驗證,相當于功能前仿。1,測試程序的代碼入下圖。該程序先調用綜合的函數,得到計算結果,再和預先的數據集進行比較,最后返回計較的結果。計算結果和預先的數據集一致時,測試通過,不一致時,測試失敗。需要查看代碼,尋找錯誤。

b1b44268-e20a-11ec-ba43-dac502259ad0.png

2,點擊紅框中的按鈕,開始C源代碼驗證。

b1fc2c2c-e20a-11ec-ba43-dac502259ad0.png

3,驗證的結果顯示在控制欄中。如圖顯示,測試通過。

b24dee86-e20a-11ec-ba43-dac502259ad0.png

4,在頭文件中,重定義了數據類型,參數,并進行了函數聲明。

b2751a1a-e20a-11ec-ba43-dac502259ad0.png

Step 3: 高層次綜合

本步驟是把功能代碼的綜合成RTL邏輯。1,點擊紅框中的按鈕,將C代碼綜合成RTL。綜合完成后,查看結果。

b29cde2e-e20a-11ec-ba43-dac502259ad0.png

2,綜合完成后,查看綜合報告。包括時序,延時,資源占用,端口信息等。

b2d2ae14-e20a-11ec-ba43-dac502259ad0.png

b31cd0ac-e20a-11ec-ba43-dac502259ad0.png

3,端口分析。1)控制端口用于控制和顯示該模塊的工作狀態。各個端口的功功能如下,默認情況下會生成下面四個控制端口。lap_startin):為高時,該模塊開始處理數據。lap_doneout):為高時,表示模塊處理數據完成。lap_idleout):表明模塊是否處于空閑態。高電平有效。為高時,該處于空閑態。lap_readyout):為高時,表示模塊可以接受新的數據。2)數據端口用于傳遞模塊的輸入輸出參數。參數d_od_i 為數組類型,故默認狀態下回生成內存接口內存接口 (數組類型參數)數據來自外部的memory,通過地址信號讀取相應的數據,輸入到該模塊中。輸入數組從外部內存中讀源數據,輸出數組從向外部內存寫入結果數據。各個端口的定義如下。laddress:地址信號lce0:片選信號lwe0:寫使能信號ld0 :數據信號4,綜合結果分析。在分析界面,可以看到模塊的運行情況。包括數據依賴關系和各個周期執行的操作,IO口的讀寫,內存端口的訪問等等。

b3972c08-e20a-11ec-ba43-dac502259ad0.png

b3bd34de-e20a-11ec-ba43-dac502259ad0.png

Step 4: 綜合優化

在使用高層次綜合,創造高質量的RTL設計時,一個重要部分就是對C代碼進行優化。Vivado HLS擁有自動優化的功能,試圖最小化loop(循環)function(函數)latency。除了自動優化,我們可以手動進行程序優化,即用在不同的solution中添加不同的directive(優化指令)的方法,進行優化和性能對比。其中,對同一個工程,可以建立多個不同的solution(解決方案),為不同的solution添加directive可以達到如下目的。優化的類型可分為如下類別:l端口優化。指定不同類型的模塊端口。l函數優化。加快函數的執行速度,減小執行周期。l循壞優化。利用展開和流水線形式,減小循環的執行周期。1,點擊下面紅框的圖標,新建solution

b3e41838-e20a-11ec-ba43-dac502259ad0.png

2,不同solution位于不同的文件夾中。

b45468e0-e20a-11ec-ba43-dac502259ad0.png

3,選中綜合文件。可以在direct框中看可進行優化的標簽

b4cb14fe-e20a-11ec-ba43-dac502259ad0.png

4,雙擊選擇d_o,選擇interfaces_axilite。點擊ok。將d_o的端口類型設置為s_axilite類型。

b4f4f396-e20a-11ec-ba43-dac502259ad0.png

5,參考d_o,將d_i的接口類型也設置為s_axilite。將d_i的端口類型設置為s_axilite類型。

b52c65c4-e20a-11ec-ba43-dac502259ad0.png

6,雙擊選擇函數名稱axi_interface,選擇interfaces_axilite。點擊ok。將控制端口的端口類型設置為s_axilite類型。

b55029a0-e20a-11ec-ba43-dac502259ad0.png

7,雙擊循環標簽,選擇流水線優化(pipeline),點擊ok

b5801700-e20a-11ec-ba43-dac502259ad0.png

8,雙擊循環標簽,選擇循環展開優化(unroll),點擊ok

b5b40d6c-e20a-11ec-ba43-dac502259ad0.png

9,同上,也將標簽為for_loop的循環進行流水線和展開優化。10,最終的優化情況總結如下。

b5e6b5be-e20a-11ec-ba43-dac502259ad0.png

11,重新進行函數綜合,查看綜合報告如下。

b60a29fe-e20a-11ec-ba43-dac502259ad0.png

b61db410-e20a-11ec-ba43-dac502259ad0.png

12,分析。同未優化相比,優化過后的函數綜合后生成的模塊的運行時鐘大大減小。端口的接口類型也變為了axi_lite端口。但資源占用率有所增加,也體現了用資源換速度的設計理念。

b6490138-e20a-11ec-ba43-dac502259ad0.png

Step 5: 綜合結果文件

綜合完成后,在各個solutionsyn文件夾中可以看到綜合器生成的RTL代碼。包括systemcVHDLVerilog

b6713a04-e20a-11ec-ba43-dac502259ad0.png

Step 6: 導出IP

在菜單里Solution>Export TL,設置如下,點擊ok

b6e17abc-e20a-11ec-ba43-dac502259ad0.png

IP封裝完成后,會impl文件夾中輸出ip文件夾,其中包含了RTL代碼(hdl),模塊驅動(drivers),文檔(doc)等信息,其中包含一個壓縮包文件,是用于建立vivado工程所用的IP壓縮包。

b7302ac2-e20a-11ec-ba43-dac502259ad0.png

Step 7: 總結

本文重點講解了hls軟件的使用方法和優化方法,在C語言模塊設計上沒有重點講解。在掌握了hls軟件的基本用法和優化方法后,接下來就可以設計更加復雜的C語言模塊,進行rtl綜合,加快設計開發的速度。

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4622

    瀏覽量

    93058
  • Xilinx
    +關注

    關注

    71

    文章

    2168

    瀏覽量

    121692
  • Vivado
    +關注

    關注

    19

    文章

    813

    瀏覽量

    66671

原文標題:Vivado-hls使用實例

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于Xilinx XCKU115的半高PCIe x8 硬件加速

    基于Xilinx XCKU115的半高PCIe x8 硬件加速卡,支持2x72bit(數據位寬64bit+ECC)DDR4存儲,數據傳輸速率 2400Mb/s。DDR4單簇容量4GB,兩組總容量為8GB
    的頭像 發表于 11-14 11:30 ?289次閱讀
    基于<b class='flag-5'>Xilinx</b> XCKU115的半高PCIe x8 <b class='flag-5'>硬件加速</b>卡

    RISC-V跑AI算法加速嗎?

    現在好多ARM單片機都帶機器學習加速,RISC-V有這方面的硬件加速嗎?
    發表于 10-10 22:14

    TDA4VM上的硬件加速運動恢復結構算法

    電子發燒友網站提供《TDA4VM上的硬件加速運動恢復結構算法.pdf》資料免費下載
    發表于 09-24 11:39 ?0次下載
    TDA4VM上的<b class='flag-5'>硬件加速</b>運動恢復結構<b class='flag-5'>算法</b>

    AM62A SoC通過硬件加速視覺處理改進條形碼讀取器

    電子發燒友網站提供《AM62A SoC通過硬件加速視覺處理改進條形碼讀取器.pdf》資料免費下載
    發表于 09-04 09:52 ?0次下載
    AM62A SoC通過<b class='flag-5'>硬件加速</b>視覺處理改進條形碼讀取器

    適用于數據中心應用中的硬件加速器的直流/直流轉換器解決方案

    電子發燒友網站提供《適用于數據中心應用中的硬件加速器的直流/直流轉換器解決方案.pdf》資料免費下載
    發表于 08-26 09:38 ?0次下載
    適用于數據中心應用中的<b class='flag-5'>硬件加速</b>器的直流/直流轉換器解決方案

    優化 FPGA HLS 設計

    用的參考設計。該參考設計針對具有 Dual ARM? Cortex?-A9 MPCore? 的 FPGA。 我們使用 Xilinx HLS 工具來打開此設計。 它的時鐘周期為 5.00 ns,即
    發表于 08-16 19:56

    PSoC 6 MCUBoot和mbedTLS是否支持加密硬件加速

    。 使用 MCUBoot 驗證兩個應用程序時,運行時間大約需要五秒鐘。 在 README.md 的 \"安全 \"一欄中寫道 與軟件實現相比,硬件加速加密技術將啟動時間縮短了四倍多
    發表于 05-29 08:17

    簡談Xilinx Zynq-7000嵌入式系統設計與實現

    設計。 最大優點可實現硬件加速: 設計者可以根據需求在硬件實現和軟件實現之間進行權衡,使所設計的嵌入式系統滿足最好的性價比要求,例如,在實現一個嵌入式系統設計時,當使用軟件實現算法
    發表于 05-08 16:23

    新思科技硬件加速解決方案技術日在成都和西安站成功舉辦

    近日,【新思科技技術日】硬件加速驗證解決方案專場成都站和西安站順利舉行,來自國內領先的系統級公司、芯片設計公司以及高校的250多名開發者們積極參與。
    的頭像 發表于 04-19 17:35 ?461次閱讀

    Elektrobit利用其首創的硬件加速軟件優化汽車通信網絡的性能

    Elektrobit今日宣布推出 EB zoneo GatewayCore——首款支持、配置和集成現代微控制器新一代硬件加速器的軟件產品,可應用于先進的汽車電子/電氣架構(基于被廣泛采用
    的頭像 發表于 04-17 09:51 ?379次閱讀

    簡談Xilinx Zynq-7000嵌入式系統設計與實現

    定制協處理器引擎來高效的實現該算法,這個使用硬件邏輯實現的協處理器,可以通過AMBA接口與全可編程SoC內的ARM Cortex A9嵌入式處理器連接,此外,通過XilinX所提供的最新高級綜合
    發表于 04-10 16:00

    用DE1-SOC進行硬件加速的2D N-Body重力模擬器設計

    該項目的目標是創建一個用DE1-SOC進行硬件加速的2D N-Body重力模擬器。
    的頭像 發表于 04-09 11:08 ?583次閱讀
    用DE1-SOC<b class='flag-5'>進行</b><b class='flag-5'>硬件加速</b>的2D N-Body重力模擬器設計

    為何高端FPGA都非常重視軟件

    )應用程序提供了統一的編程模型。除了核心開發工具外,Vitis還提供了一套豐富的硬件加速庫,這些庫針對Xilinx硬件平臺進行了預優化。”
    發表于 03-23 16:48

    【國產FPGA+OMAPL138開發板體驗】(原創)7.硬件加速Sora文生視頻源代碼

    算法,如循環神經網絡(RNN)或Transformer,用于文本處理,以及卷積神經網絡(CNN)或生成對抗網絡(GAN)用于視頻生成。通常涉及對模型中的計算密集型部分進行硬件加速。文本到視頻生成模型
    發表于 02-22 09:49

    音視頻解碼器硬件加速:實現更流暢的播放效果

    隨著多媒體內容的日益豐富和高清化,傳統的軟件解碼已經難以滿足人們對流暢播放體驗的需求。因此,音視頻解碼器硬件加速技術的出現,為提升播放效果帶來了革命性的改變。 硬件加速的原理 硬件加速的核心
    的頭像 發表于 02-21 14:40 ?1006次閱讀
    音視頻解碼器<b class='flag-5'>硬件加速</b>:實現更流暢的播放效果
    主站蜘蛛池模板: 免费一级特黄欧美大片勹久久网| 国产午夜精品福利| 国产精品毛片久久久久久久| 韩国激情啪啪| bt天堂网在线www资源| 又粗又爽又色男女乱淫播放男女| 午夜tv影院| 两性色午夜视频免费老司机| 大香线蕉97久久| ⅹxxxx68日本老师hd| 黄网站在线观看视频| 亚洲三级电影| 色国产在线视频一区| 久久这里只有精品免费视频| 国产女人在线视频| 午夜视频在线观看免费视频| 免费在线黄色网址| 日韩啪啪网| 老师下面很湿很爽很紧| 五月综合色| 六月激情| 亚洲午夜影视| 国产小视频网站| 女a男0攻巨肉高h| 色综合99| 国产视频一二| 色就操| 欧美性极品高清| 中文字幕在线看精品乱码| 日产毛片| 国产精品伦子一区二区三区| 人人爽天天爽夜夜爽曰| 黄h视频在线观看视频| 曰本又色又爽又黄三级视频| 日本国产视频| www在线视频观看| 久久精品隔壁老王影院| 亚欧一区| 三级视频在线播放线观看| 国产成人精品视频一区二区不卡| 手机看片日本|