相比于VivadoHLS,Vitis HLS更加智能化,這體現(xiàn)在Vitis HLS可以自動探測C/C++代碼中可并行執(zhí)行地部分而無需人工干預(yù)添加pragma。另一方面VitisHLS也會根據(jù)用戶添加的pragma來判斷是否需要額外配置其他pragma以使用戶pragma生效。為便于說明,我們來看一個簡單的案例。
如下圖所示代碼,函數(shù)array_mult用于計算兩個一維數(shù)組對應(yīng)元素差的平方。數(shù)組長度為N,故通過N次for循環(huán)可完成此操作(這里N為8)。

如果我們不添加任何pragma,從C綜合后的報告來看,工具會自動對for循環(huán)添加PIPELINE,如下圖所示。同時,工具會將數(shù)組映射為單端口RAM(因為數(shù)組是頂層函數(shù)的形參,故只生成單端口RAM需要的端口信號),這樣匹配了DSP48的接口需求(兩個輸入數(shù)據(jù)一個輸出數(shù)據(jù))。從C/RTLCosim的波形可以看到輸入/輸出數(shù)據(jù)流關(guān)系。


如果我們對for循環(huán)施加UNROLL,理論上分析可知工具應(yīng)將for循環(huán)展開(復(fù)制8份),這樣會消耗8個DSP48,如下圖所示。這就需要能同時有16個數(shù)據(jù)提供給這8個DSP48,但此時工具只是將數(shù)組映射為雙端口RAM。這顯然造成了數(shù)據(jù)通路的不匹配。這其實造成了DSP48的浪費。這里,因為數(shù)組是頂層函數(shù),故工具并沒有對其施加ARRAY_PARTITION,但如果是子函數(shù)的形參,工具就會自動對數(shù)組施加ARRAY_PARTITION,以確保數(shù)據(jù)通路的匹配。

因此,我們換個思路,既然工具至多會將數(shù)組映射為雙端口RAM,那么我們就將for循環(huán)復(fù)制兩份,從而實現(xiàn)數(shù)據(jù)通路的匹配。這可通過UNROLL的選項factor設(shè)置為2。從C綜合報告來看,消耗了2個DSP48,同時工具對for循環(huán)自動設(shè)置了PIPELINE。


當(dāng)然,我們也可以對整個函數(shù)施加PIPELINE,這樣工具會將for循環(huán)自動UNROLL,但這同樣會造成DSP48的浪費,因為工具不會對頂層函數(shù)的形參數(shù)組自動進行ARRAY_PARTITION。于是,我們考慮手工添加ARRAY_PARTITION,同時對函數(shù)添加PIPELINE,從而使得數(shù)據(jù)通路完美匹配。

我們對這些Solution進行對比,如下圖所示。solution1消耗資源最少,但Latency最大;solution5消耗資源最多,但Latency最小。
solution1:僅對for循環(huán)施加pipeline。
solution2:僅對for循環(huán)施加UNROLL。
solution3:僅對for循環(huán)施加UNROLL并將factor設(shè)置為2。
solution4:僅對函數(shù)施加PIPELINE。
solution5:對函數(shù)施加PIPELINE,對輸入/輸出數(shù)組施加ARRAY_PARTITION(Complete)。

審核編輯:湯梓紅
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67499 -
C++
+關(guān)注
關(guān)注
22文章
2123瀏覽量
77110 -
HLS
+關(guān)注
關(guān)注
1文章
135瀏覽量
25830 -
Vitis
+關(guān)注
關(guān)注
0文章
157瀏覽量
8347
原文標(biāo)題:理解Vitis HLS默認行為
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術(shù)驛站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
如何使用AMD Vitis HLS創(chuàng)建HLS IP
使用AMD Vitis Unified IDE創(chuàng)建HLS組件
FPGA高層次綜合HLS之Vitis HLS知識庫簡析
使用Vitis HLS創(chuàng)建屬于自己的IP相關(guān)資料分享
Vivado HLS和Vitis HLS 兩者之間有什么區(qū)別
Vitis初探—1.將設(shè)計從SDSoC/Vivado HLS遷移到Vitis上
基于Vitis HLS的加速圖像處理
Vitis HLS工具簡介及設(shè)計流程
Vitis HLS如何添加HLS導(dǎo)出的.xo文件
Vitis HLS前端現(xiàn)已全面開源
Vitis HLS知識庫總結(jié)
AMD全新Vitis HLS資源現(xiàn)已推出
如何在Vitis HLS GUI中使用庫函數(shù)?
Vitis HLS:使用任務(wù)級并行性的高性能設(shè)計
理解Vitis HLS默認行為
評論