【引言】
本系列教程演示如何使用xilinx的HLS工具進(jìn)行算法的硬件加速。分為三個(gè)部分,分別為HLS端IP設(shè)計(jì),vivado硬件環(huán)境搭建,SDK端軟件控制。在HLS端,要將進(jìn)行硬件加速的軟件算法轉(zhuǎn)換為RTL級電路,生成便于嵌入式使用的axi控制端口,進(jìn)行數(shù)據(jù)的傳輸和模塊的控制。【HLS介紹】
HLS可以將算法直接映射為RTL電路,實(shí)現(xiàn)了高層次綜合。vivado-HLS可以實(shí)現(xiàn)直接使用 C,C++ 以及 System C 語言對Xilinx的FPGA器件進(jìn)行編程。用戶無需手動創(chuàng)建 RTL,通過高層次綜合生成HDL級的IP核,從而加速IP創(chuàng)建。HLS的官方參考文檔主要為:ug871( ug871-vivado-high-level-synthesis-tutorial.pdf )和ug902(ug902-vivado-high-level-synthesis.pdf)。 對于Vivado Hls來說,輸入包括Tesbench,C/C++源代碼和Directives,相應(yīng)的輸出為IP Catalog,DSP和SysGen,特別的,一個(gè)工程只能有一個(gè)頂層函數(shù)用于綜和,這個(gè)頂層函數(shù)下面的子函數(shù)也是可以被綜合的,會生成相應(yīng)的VHDL和Verilog代碼,所以,C綜合后的RTL代碼結(jié)構(gòu)通常是跟原始C描述的結(jié)構(gòu)是一致的,除非是子函數(shù)功能很簡單,所需要的邏輯量很小。并不是所有的C/C++都可以被綜合,動態(tài)內(nèi)存分配和涉及到操作系統(tǒng)層面的操作不可以被綜合。Vivado HLS 的設(shè)計(jì)流程如下:
在整個(gè)流程中,用戶先創(chuàng)建一個(gè)設(shè)計(jì) C、C++ 或 SystemC 源代碼,以及一個(gè)C的測試平臺。通過 Vivado HLS Synthesis 運(yùn)行設(shè)計(jì),生成 RTL 設(shè)計(jì),代碼可以是 Verilog,也可以是 VHDL。有了 RTL 后,隨即可以執(zhí)行設(shè)計(jì)的 Verilog 或 VHDL 仿真,或使用工具的C封裝器技術(shù)創(chuàng)建 SystemC 版本。然后可以進(jìn)行System C架構(gòu)級仿真,進(jìn)一步根據(jù)之前創(chuàng)建的 C 測試平臺,驗(yàn)證設(shè)計(jì)的架構(gòu)行為和功能。設(shè)計(jì)固化后,就可以通過 Vivado 設(shè)計(jì)套件的物理實(shí)現(xiàn)流程來運(yùn)行設(shè)計(jì),將設(shè)計(jì)編程到器件上,在硬件中運(yùn)行和/或使用 IP 封裝器將設(shè)計(jì)轉(zhuǎn)為可重用的 IP。
Step 1: 新建一個(gè)工程
1,Creat New Project新建文檔,輸入工程名稱和工程路徑。完成后點(diǎn)擊Next。
2,添加設(shè)計(jì)文件,并制定頂層函數(shù)。完成后點(diǎn)擊Next。
3,添加C語言仿真文件。完成后點(diǎn)擊Next。
4,:配置Solution Name,一般默認(rèn)即可。配置Clock Period,單位是ns。配置Uncertainty,默認(rèn)為空。選擇產(chǎn)品型號。完成后點(diǎn)擊Finish。
5,工程新建成功后進(jìn)入的開發(fā)界面,HLS是典型的Eclipse界面,和SDK的界面十分相似。
導(dǎo)入的文件的代碼如下:1,源文件。axi_interfaces.c
2,頭文件。axi_interfaces.h
typedef int din_t;
typedef int dout_t;
typedefintdacc_t;
voidaxi_interfaces(dout_td_o[N],din_td_i[N]);
3,測試文件。axi_interfaces_test.c
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,測試數(shù)據(jù)。result.golden.datDin 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源代碼驗(yàn)證
本步驟是對功能代碼的邏輯驗(yàn)證,相當(dāng)于功能前仿。1,測試程序的代碼入下圖。該程序先調(diào)用綜合的函數(shù),得到計(jì)算結(jié)果,再和預(yù)先的數(shù)據(jù)集進(jìn)行比較,最后返回計(jì)較的結(jié)果。計(jì)算結(jié)果和預(yù)先的數(shù)據(jù)集一致時(shí),測試通過,不一致時(shí),測試失敗。需要查看代碼,尋找錯(cuò)誤。
2,點(diǎn)擊紅框中的按鈕,開始C源代碼驗(yàn)證。
3,驗(yàn)證的結(jié)果顯示在控制欄中。如圖顯示,測試通過。
4,在頭文件中,重定義了數(shù)據(jù)類型,參數(shù),并進(jìn)行了函數(shù)聲明。
Step 3: 高層次綜合
本步驟是把功能代碼的綜合成RTL邏輯。1,點(diǎn)擊紅框中的按鈕,將C代碼綜合成RTL。綜合完成后,查看結(jié)果。
3,端口分析。(1)控制端口用于控制和顯示該模塊的工作狀態(tài)。各個(gè)端口的功功能如下,默認(rèn)情況下會生成下面四個(gè)控制端口。lap_start(in):為高時(shí),該模塊開始處理數(shù)據(jù)。lap_done(out):為高時(shí),表示模塊處理數(shù)據(jù)完成。lap_idle(out):表明模塊是否處于空閑態(tài)。高電平有效。為高時(shí),該處于空閑態(tài)。lap_ready(out):為高時(shí),表示模塊可以接受新的數(shù)據(jù)。(2)數(shù)據(jù)端口用于傳遞模塊的輸入輸出參數(shù)。參數(shù)d_o,d_i 為數(shù)組類型,故默認(rèn)狀態(tài)下回生成內(nèi)存接口。內(nèi)存接口 (數(shù)組類型參數(shù))數(shù)據(jù)來自外部的memory,通過地址信號讀取相應(yīng)的數(shù)據(jù),輸入到該模塊中。輸入數(shù)組從外部內(nèi)存中讀源數(shù)據(jù),輸出數(shù)組從向外部內(nèi)存寫入結(jié)果數(shù)據(jù)。各個(gè)端口的定義如下。laddress:地址信號lce0:片選信號lwe0:寫使能信號ld0 :數(shù)據(jù)信號4,綜合結(jié)果分析。在分析界面,可以看到模塊的運(yùn)行情況。包括數(shù)據(jù)依賴關(guān)系和各個(gè)周期執(zhí)行的操作,IO口的讀寫,內(nèi)存端口的訪問等等。
Step 4: 綜合優(yōu)化
在使用高層次綜合,創(chuàng)造高質(zhì)量的RTL設(shè)計(jì)時(shí),一個(gè)重要部分就是對C代碼進(jìn)行優(yōu)化。Vivado HLS擁有自動優(yōu)化的功能,試圖最小化loop(循環(huán))和function(函數(shù))的latency。除了自動優(yōu)化,我們可以手動進(jìn)行程序優(yōu)化,即用在不同的solution中添加不同的directive(優(yōu)化指令)的方法,進(jìn)行優(yōu)化和性能對比。其中,對同一個(gè)工程,可以建立多個(gè)不同的solution(解決方案),為不同的solution添加directive可以達(dá)到如下目的。優(yōu)化的類型可分為如下類別:l端口優(yōu)化。指定不同類型的模塊端口。l函數(shù)優(yōu)化。加快函數(shù)的執(zhí)行速度,減小執(zhí)行周期。l循壞優(yōu)化。利用展開和流水線形式,減小循環(huán)的執(zhí)行周期。1,點(diǎn)擊下面紅框的圖標(biāo),新建solution。
2,不同solution位于不同的文件夾中。
3,選中綜合文件??梢栽?/span>direct框中看可進(jìn)行優(yōu)化的標(biāo)簽。
4,雙擊選擇d_o,選擇interface,s_axilite。點(diǎn)擊ok。將d_o的端口類型設(shè)置為s_axilite類型。
5,參考d_o,將d_i的接口類型也設(shè)置為s_axilite。將d_i的端口類型設(shè)置為s_axilite類型。
6,雙擊選擇函數(shù)名稱axi_interface,選擇interface,s_axilite。點(diǎn)擊ok。將控制端口的端口類型設(shè)置為s_axilite類型。
7,雙擊循環(huán)標(biāo)簽,選擇流水線優(yōu)化(pipeline),點(diǎn)擊ok。
8,雙擊循環(huán)標(biāo)簽,選擇循環(huán)展開優(yōu)化(unroll),點(diǎn)擊ok。
9,同上,也將標(biāo)簽為for_loop的循環(huán)進(jìn)行流水線和展開優(yōu)化。10,最終的優(yōu)化情況總結(jié)如下。
11,重新進(jìn)行函數(shù)綜合,查看綜合報(bào)告如下。
12,分析。同未優(yōu)化相比,優(yōu)化過后的函數(shù)綜合后生成的模塊的運(yùn)行時(shí)鐘大大減小。端口的接口類型也變?yōu)榱?/span>axi_lite端口。但資源占用率有所增加,也體現(xiàn)了用資源換速度的設(shè)計(jì)理念。
Step 5: 綜合結(jié)果文件
綜合完成后,在各個(gè)solution的syn文件夾中可以看到綜合器生成的RTL代碼。包括systemc,VHDL,Verilog。
Step 6: 導(dǎo)出IP
在菜單里Solution>Export TL,設(shè)置如下,點(diǎn)擊ok。
IP封裝完成后,會在impl文件夾中輸出ip文件夾,其中包含了RTL代碼(hdl),模塊驅(qū)動(drivers),文檔(doc)等信息,其中包含一個(gè)壓縮包文件,是用于建立vivado工程所用的IP壓縮包。
Step 7: 總結(jié)
本文重點(diǎn)講解了hls軟件的使用方法和優(yōu)化方法,在C語言模塊設(shè)計(jì)上沒有重點(diǎn)講解。在掌握了hls軟件的基本用法和優(yōu)化方法后,接下來就可以設(shè)計(jì)更加復(fù)雜的C語言模塊,進(jìn)行rtl綜合,加快設(shè)計(jì)開發(fā)的速度。審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
算法
+關(guān)注
關(guān)注
23文章
4612瀏覽量
92910 -
Xilinx
+關(guān)注
關(guān)注
71文章
2167瀏覽量
121439 -
Vivado
+關(guān)注
關(guān)注
19文章
812瀏覽量
66547
原文標(biāo)題:Vivado-hls使用實(shí)例
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
基于Xilinx XCKU115的半高PCIe x8 硬件加速卡
基于Xilinx XCKU115的半高PCIe x8 硬件加速卡,支持2x72bit(數(shù)據(jù)位寬64bit+ECC)DDR4存儲,數(shù)據(jù)傳輸速率 2400Mb/s。DDR4單簇容量4GB,兩組總?cè)萘繛?GB
TDA4VM上的硬件加速運(yùn)動恢復(fù)結(jié)構(gòu)算法
電子發(fā)燒友網(wǎng)站提供《TDA4VM上的硬件加速運(yùn)動恢復(fù)結(jié)構(gòu)算法.pdf》資料免費(fèi)下載
發(fā)表于 09-24 11:39
?0次下載
AM62A SoC通過硬件加速視覺處理改進(jìn)條形碼讀取器
電子發(fā)燒友網(wǎng)站提供《AM62A SoC通過硬件加速視覺處理改進(jìn)條形碼讀取器.pdf》資料免費(fèi)下載
發(fā)表于 09-04 09:52
?0次下載
適用于數(shù)據(jù)中心應(yīng)用中的硬件加速器的直流/直流轉(zhuǎn)換器解決方案
電子發(fā)燒友網(wǎng)站提供《適用于數(shù)據(jù)中心應(yīng)用中的硬件加速器的直流/直流轉(zhuǎn)換器解決方案.pdf》資料免費(fèi)下載
發(fā)表于 08-26 09:38
?0次下載
優(yōu)化 FPGA HLS 設(shè)計(jì)
用的參考設(shè)計(jì)。該參考設(shè)計(jì)針對具有 Dual ARM? Cortex?-A9 MPCore? 的 FPGA。
我們使用 Xilinx HLS 工具來打開此設(shè)計(jì)。
它的時(shí)鐘周期為 5.00 ns,即
發(fā)表于 08-16 19:56
PSoC 6 MCUBoot和mbedTLS是否支持加密硬件加速?
。 使用 MCUBoot 驗(yàn)證兩個(gè)應(yīng)用程序時(shí),運(yùn)行時(shí)間大約需要五秒鐘。
在 README.md 的 \"安全 \"一欄中寫道
與軟件實(shí)現(xiàn)相比,硬件加速加密技術(shù)將啟動時(shí)間縮短了四倍多
發(fā)表于 05-29 08:17
簡談Xilinx Zynq-7000嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
設(shè)計(jì)。
最大優(yōu)點(diǎn)可實(shí)現(xiàn)硬件加速:
設(shè)計(jì)者可以根據(jù)需求在硬件實(shí)現(xiàn)和軟件實(shí)現(xiàn)之間進(jìn)行權(quán)衡,使所設(shè)計(jì)的嵌入式系統(tǒng)滿足最好的性價(jià)比要求,例如,在實(shí)現(xiàn)一個(gè)嵌入式系統(tǒng)設(shè)計(jì)時(shí),當(dāng)使用軟件實(shí)現(xiàn)算法
發(fā)表于 05-08 16:23
新思科技硬件加速解決方案技術(shù)日在成都和西安站成功舉辦
近日,【新思科技技術(shù)日】硬件加速驗(yàn)證解決方案專場成都站和西安站順利舉行,來自國內(nèi)領(lǐng)先的系統(tǒng)級公司、芯片設(shè)計(jì)公司以及高校的250多名開發(fā)者們積極參與。
簡談Xilinx Zynq-7000嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
定制協(xié)處理器引擎來高效的實(shí)現(xiàn)該算法,這個(gè)使用硬件邏輯實(shí)現(xiàn)的協(xié)處理器,可以通過AMBA接口與全可編程SoC內(nèi)的ARM Cortex A9嵌入式處理器連接,此外,通過XilinX所提供的最新高級綜合
發(fā)表于 04-10 16:00
用DE1-SOC進(jìn)行硬件加速的2D N-Body重力模擬器設(shè)計(jì)
該項(xiàng)目的目標(biāo)是創(chuàng)建一個(gè)用DE1-SOC進(jìn)行硬件加速的2D N-Body重力模擬器。
為何高端FPGA都非常重視軟件
)應(yīng)用程序提供了統(tǒng)一的編程模型。除了核心開發(fā)工具外,Vitis還提供了一套豐富的硬件加速庫,這些庫針對Xilinx硬件平臺進(jìn)行了預(yù)優(yōu)化?!?
發(fā)表于 03-23 16:48
【國產(chǎn)FPGA+OMAPL138開發(fā)板體驗(yàn)】(原創(chuàng))7.硬件加速Sora文生視頻源代碼
算法,如循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)或Transformer,用于文本處理,以及卷積神經(jīng)網(wǎng)絡(luò)(CNN)或生成對抗網(wǎng)絡(luò)(GAN)用于視頻生成。通常涉及對模型中的計(jì)算密集型部分進(jìn)行硬件加速。文本到視頻生成模型
發(fā)表于 02-22 09:49
音視頻解碼器硬件加速:實(shí)現(xiàn)更流暢的播放效果
隨著多媒體內(nèi)容的日益豐富和高清化,傳統(tǒng)的軟件解碼已經(jīng)難以滿足人們對流暢播放體驗(yàn)的需求。因此,音視頻解碼器硬件加速技術(shù)的出現(xiàn),為提升播放效果帶來了革命性的改變。 硬件加速的原理 硬件加速的核心
AMD-Xilinx的Vitis-HLS編譯指示小結(jié)
流水線指令
pragma HLS pipeline
通過流水線提高性能是計(jì)算機(jī)架構(gòu)設(shè)計(jì)的8個(gè)偉大思想之一,不管是硬件設(shè)計(jì)還是軟件設(shè)計(jì),流水線設(shè)計(jì)(pipeline)都能夠用更多的資源來實(shí)現(xiàn)高速
發(fā)表于 12-31 21:20
評論