一. 代碼風格
- 從函數這個角度來說代碼風格,主要是看參數的數據類型,C++中的數據類型是以8爲邊界的,而實際硬件中我們可能會遇到任意精度的數據類型,因此我們一定在C++中定義爲任意精度的數據類型;
二. lnline
- 對函數的Inline實際是去除函數的層次化,帶來的好處是可以改善資源,不再需要調用函數的相關邏輯,對於小函數HLS會自動Inline,如果我們不希望,可以通過directive中的 -off這個選型來實現;
三. Allocation
- allocation定義了函數與相應的RTL model之間的關係;
- allocation的影響,它實際上是在Latency和Area上做折衷;
四. Task Level Pipelining: Dataflow
- 實際上是做並行處理,可以看到用到了channel,channel可以是ping-pong RAM,也可以是FIFO;
- Dataflow可以作用於一些順序處理的任務,比如函數或者循環,或者兩者都有;
- Dataflow是將順序處理變爲並行處理,使得當前任務不需要前面的任務結束才執行,可以並行處理,所以Dataflow允許任務之間有交疊,提高了數據吞吐量,降低了Latency;
總結: