相比于VivadoHLS,Vitis HLS更加智能化,這體現(xiàn)在Vitis HLS可以自動探測C/C++代碼中可并行執(zhí)行地部分而無需人工干預添加pragma。另一方面VitisHLS也會根據(jù)用戶添加的pragma來判斷是否需要額外配置其他pragma以使用戶pragma生效。為便于說明,我們來看一個簡單的案例。
如下圖所示代碼,函數(shù)array_mult用于計算兩個一維數(shù)組對應元素差的平方。數(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ù)流關系。
如果我們對for循環(huán)施加UNROLL,理論上分析可知工具應將for循環(huán)展開(復制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)復制兩份,從而實現(xiàn)數(shù)據(jù)通路的匹配。這可通過UNROLL的選項factor設置為2。從C綜合報告來看,消耗了2個DSP48,同時工具對for循環(huán)自動設置了PIPELINE。
當然,我們也可以對整個函數(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設置為2。
solution4:僅對函數(shù)施加PIPELINE。
solution5:對函數(shù)施加PIPELINE,對輸入/輸出數(shù)組施加ARRAY_PARTITION(Complete)。
審核編輯:湯梓紅
-
函數(shù)
+關注
關注
3文章
4331瀏覽量
62618 -
C++
+關注
關注
22文章
2108瀏覽量
73651 -
HLS
+關注
關注
1文章
129瀏覽量
24116 -
Vitis
+關注
關注
0文章
146瀏覽量
7431
原文標題:理解Vitis HLS默認行為
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術驛站】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
FPGA高層次綜合HLS之Vitis HLS知識庫簡析
使用Vitis HLS創(chuàng)建屬于自己的IP相關資料分享
Vivado HLS和Vitis HLS 兩者之間有什么區(qū)別
Vitis初探—1.將設計從SDSoC/Vivado HLS遷移到Vitis上
![<b class='flag-5'>Vitis</b>初探—1.將設計從SDSoC/Vivado <b class='flag-5'>HLS</b>遷移到<b class='flag-5'>Vitis</b>上](https://file.elecfans.com/web1/M00/DB/AB/o4YBAGAKIy-AUecNAAEEEY9TnBc290.png)
基于Vitis HLS的加速圖像處理
![基于<b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>的加速圖像處理](https://file.elecfans.com/web2/M00/30/D6/pYYBAGIMpwuAc9UmAADrfB2ykoA971.png)
Vitis HLS工具簡介及設計流程
Vitis HLS前端現(xiàn)已全面開源
Vitis HLS知識庫總結
HLS最全知識庫
AMD全新Vitis HLS資源現(xiàn)已推出
![AMD全新<b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>資源現(xiàn)已推出](https://file1.elecfans.com/web2/M00/82/20/wKgaomREmyqAMDmOAAAdFC8hyjQ866.png)
如何在Vitis HLS GUI中使用庫函數(shù)?
![如何在<b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b> GUI中使用庫函數(shù)?](https://file1.elecfans.com/web2/M00/90/A9/wKgZomTcNDaAcqFmAAAt4OHi_oA924.png)
Vitis HLS:使用任務級并行性的高性能設計
![<b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>:使用任務級并行性的高性能設計](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論