chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

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

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-06-02 09:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言

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

HLS介紹】

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

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

在整個流程中,用戶先創(chuàng)建一個設計 C、C++ SystemC 源代碼,以及一個C的測試平臺。通過 Vivado HLS Synthesis 運行設計,生成 RTL 設計,代碼可以是 Verilog,也可以是 VHDL。有了 RTL 后,隨即可以執(zhí)行設計的 Verilog VHDL 仿真,或使用工具的C封裝器技術創(chuàng)建 SystemC 版本。然后可以進行System C架構級仿真,進一步根據之前創(chuàng)建的 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,工程新建成功后進入的開發(fā)界面,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)控制端口用于控制和顯示該模塊的工作狀態(tài)。各個端口的功功能如下,默認情況下會生成下面四個控制端口。lap_startin):為高時,該模塊開始處理數據。lap_doneout):為高時,表示模塊處理數據完成。lap_idleout):表明模塊是否處于空閑態(tài)。高電平有效。為高時,該處于空閑態(tài)。lap_readyout):為高時,表示模塊可以接受新的數據。2)數據端口用于傳遞模塊的輸入輸出參數。參數d_o,d_i 為數組類型,故默認狀態(tài)下回生成內存接口內存接口 (數組類型參數)數據來自外部的memory,通過地址信號讀取相應的數據,輸入到該模塊中。輸入數組從外部內存中讀源數據,輸出數組從向外部內存寫入結果數據。各個端口的定義如下。laddress:地址信號lce0:片選信號lwe0:寫使能信號ld0 :數據信號4,綜合結果分析。在分析界面,可以看到模塊的運行情況。包括數據依賴關系和各個周期執(zhí)行的操作,IO口的讀寫,內存端口的訪問等等。

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

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

Step 4: 綜合優(yōu)化

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

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

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

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

3,選中綜合文件??梢栽?/span>direct框中看可進行優(yōu)化的標簽

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

4,雙擊選擇d_o,選擇interface,s_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,雙擊循環(huán)標簽,選擇流水線優(yōu)化(pipeline),點擊ok。

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

8,雙擊循環(huán)標簽,選擇循環(huán)展開優(yōu)化(unroll),點擊ok。

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

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

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

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

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

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

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

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

Step 5: 綜合結果文件

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

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軟件的使用方法和優(yōu)化方法,在C語言模塊設計上沒有重點講解。在掌握了hls軟件的基本用法和優(yōu)化方法后,接下來就可以設計更加復雜的C語言模塊,進行rtl綜合,加快設計開發(fā)的速度。

審核編輯 :李倩


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

    關注

    23

    文章

    4802

    瀏覽量

    98521
  • Xilinx
    +關注

    關注

    73

    文章

    2206

    瀏覽量

    131855
  • Vivado
    +關注

    關注

    19

    文章

    860

    瀏覽量

    71392

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    新思科技2026 HAV硬件加速驗證技術開放日深圳站圓滿落幕

    4 月 2 日,新思科技 2026 硬件加速驗證(HAV)技術開放日在深圳灣畔盛大舉行。作為新思科技 HAV 技術開放日全國巡回活動的首站,本次活動匯聚了來自新思科技總部及中國技術團隊的頂尖專家
    的頭像 發(fā)表于 04-14 11:37 ?285次閱讀

    FPGA硬件加速卡設計原理圖:1-基于Xilinx XCKU115的半高PCIe x8 硬件加速卡 PCIe半高 XCKU115-3-FLVF1924-E芯片

    FPGA硬件加速, PCIe半高卡, XCKU115, 光纖采集卡, 信號計算板, 硬件加速
    的頭像 發(fā)表于 02-12 09:52 ?540次閱讀
    FPGA<b class='flag-5'>硬件加速</b>卡設計原理圖:1-基于<b class='flag-5'>Xilinx</b> XCKU115的半高PCIe x8 <b class='flag-5'>硬件加速</b>卡 PCIe半高 XCKU115-3-FLVF1924-E芯片

    HLS設計中的BRAM使用優(yōu)勢

    高層次綜合(HLS)是一種將高級編程語言(如C、C++或SystemC)轉換為硬件描述語言(HDL)的設計方法。在FPGA設計中,設計者可以靈活地利用FPGA內部的資源,如塊RAM(BRAM)。雖然
    的頭像 發(fā)表于 01-28 14:36 ?400次閱讀

    通過vivado HLS設計一個FIR低通濾波器

    Vivado HLS是一款強大的高層次綜合工具,可將C/C++代碼轉換為硬件描述語言(HDL),顯著提升FPGA開發(fā)效率。
    的頭像 發(fā)表于 01-20 16:19 ?525次閱讀
    通過vivado <b class='flag-5'>HLS</b>設計一個FIR低通濾波器

    Camellia算法的實現(基于開源蜂鳥E203協(xié)處理器)

    硬件加速器的效果。 Camellia算法的介紹 Camellia 算法由 NTT 公司和 Mitsubishi 電子公司與 2000 年聯合開發(fā),是一種Feistel 結構的分組密碼(分組長度為
    發(fā)表于 10-30 07:04

    復雜的軟件算法硬件IP核的實現

    硬件加速 IP 核 HDL 文件的生成分為兩個步驟,首先根據將要接入的 SOPC 系統(tǒng)的總線的特性,將算法做適當的包裝、暴露相關的接口以及調用方法,即適配總線接口。不同的 SOPC 總線有不同的時序以及
    發(fā)表于 10-30 07:02

    常用硬件加速的方法

    之前總結了一些常用硬件加速方法 1)面積換速度:也就是串轉并運算,可以多個模塊同時計算; 2)時間換空間:時序收斂下通過頻率提高性能,雖然面積可能稍微加大點; 3)流水線操作:流水線以面積換性能,以
    發(fā)表于 10-29 06:20

    硬件協(xié)同技術分享 - 任務劃分 + 自定義指令集

    開發(fā)技術。分文將分享介紹硬件加速器與軟件結合的協(xié)同開發(fā)方式 軟硬件任務劃分 我們的硬件設計涉及到MFCC模塊。直接交由CPU的一次指令的五級流水線處理在麥克風數據取入上的資源耗費可以說是
    發(fā)表于 10-28 08:03

    硬件加速模塊的時鐘設計

    的每一個操作賦予一個時間片,每一個操作都會在這個時間片內完成,這個時間片的時長為clk_l的時鐘周期,在整個硬件加速模塊中最為重要。 clk_r : 硬件加速模塊的每一層在每一次進行運算之前,都去先讀
    發(fā)表于 10-23 07:28

    睿擎SDK V1.5.0重磅升級:EtherCAT低抖動,AMP虛擬網卡,LVGL硬件加速,多核調試等性能大幅提升|產品動態(tài)

    )。AMP模式下虛擬網卡驅動支持,雙系統(tǒng)通信更加便利,更完善的Perfetto多核性能調試工具,AIUVC人臉識別示例,優(yōu)化LVGL支持硬件加速等。并提供對應的教
    的頭像 發(fā)表于 09-29 17:36 ?1.1w次閱讀
    睿擎SDK V1.5.0重磅升級:EtherCAT低抖動,AMP虛擬網卡,LVGL<b class='flag-5'>硬件加速</b>,多核調試等性能大幅提升|產品動態(tài)

    如何驗證硬件加速是否真正提升了通信協(xié)議的安全性?

    驗證硬件加速是否真正提升通信協(xié)議的安全性,需從 安全功能正確性、抗攻擊能力增強、安全性能適配、合規(guī)一致性 等核心維度展開,結合實驗室測試與真實場景驗證,避免 “硬件參與即安全提升” 的表面判斷。以下
    的頭像 發(fā)表于 08-27 10:16 ?1320次閱讀
    如何驗證<b class='flag-5'>硬件加速</b>是否真正提升了通信協(xié)議的安全性?

    有哪些方法可以確保硬件加速與通信協(xié)議的兼容性?

    ? 確保硬件加速與通信協(xié)議的兼容性,核心是從 硬件選型、協(xié)議標準匹配、軟硬件接口適配、全場景測試驗證 四個維度建立閉環(huán),避免因硬件功能缺失、接口不兼容或協(xié)議特性支持不全導致的性能損耗、
    的頭像 發(fā)表于 08-27 10:07 ?1349次閱讀

    如何利用硬件加速提升通信協(xié)議的安全性?

    產品實拍圖 利用硬件加速提升通信協(xié)議安全性,核心是通過 專用硬件模塊或可編程硬件 ,承接軟件層面難以高效處理的安全關鍵操作(如加密解密、認證、密鑰管理等),在提升性能的同時,通過硬件
    的頭像 發(fā)表于 08-27 09:59 ?1172次閱讀
    如何利用<b class='flag-5'>硬件加速</b>提升通信協(xié)議的安全性?

    基于FPGA的壓縮算法加速實現

    本設計中,計劃實現對文件的壓縮及解壓,同時優(yōu)化壓縮中所涉及的信號處理和計算密集型功能,實現對其的加速處理。本設計的最終目標是證明在充分并行化的硬件體系結構 FPGA 上實現該算法時,可以大大提高該
    的頭像 發(fā)表于 07-10 11:09 ?2586次閱讀
    基于FPGA的壓縮<b class='flag-5'>算法</b><b class='flag-5'>加速</b>實現

    如何使用AMD Vitis HLS創(chuàng)建HLS IP

    本文逐步演示了如何使用 AMD Vitis HLS 來創(chuàng)建一個 HLS IP,通過 AXI4 接口從存儲器讀取數據、執(zhí)行簡單的數學運算,然后將數據寫回存儲器。接著會在 AMD Vivado Design Suite 設計中使用此 HLS
    的頭像 發(fā)表于 06-13 09:50 ?2237次閱讀
    如何使用AMD Vitis <b class='flag-5'>HLS</b>創(chuàng)建<b class='flag-5'>HLS</b> IP