第23講 函數層面的優化
- 2019 年 10 月 31 日
- 筆記
談到函數,我們會很自然地聯想到Verilog中的module或者VHDL中的entity,沒錯,它們之間是相互對應的。通常在Vivado HLS中,每個函數會生成相應的RTL代碼。類似的,如果一個函數功能簡單,代碼量很小,那麼該函數就有可能被合併到調用它的函數中,這其實就是所謂的層次打平。
採用C描述的函數,因為C本身的特性,函數是順序執行的,可理解為串行工作。實際上,有的函數是可以並行工作的。Vivado HLS提供了這種機制,通過使用Allocation可確定函數是順序執行還是並行執行。此外,通過對函數使用DATAFLOW,也可提高吞吐率。其本質是採用乒乓工作機制使得函數並行工作。
無論是RTL代碼還是C代碼,清晰合理的數據流是非常重要的,它可以有效幫助設計者劃分模塊、設計函數層次。因此,在寫代碼之前,畫出清晰合理的數據流是很有必要的。
更為深入的介紹可以閱讀以下文檔:
ug902 (v2018.1) High-Level Synthesis UserGuide:page 312-page313

