第20講 數組優化:數組分割

  • 2019 年 10 月 31 日
  • 筆記

在採用C語言進行演算法建模時,數組會被經常用到。同樣地,採用RTL建模時,數組也會被經常使用,例如VHDL中的std_logic_vector類型(Vector就是一維向量)。此外,RTL程式碼中的Memory,無論最終採用何種方式實現,本質上都可以看做數組。這就建立了C模型與RTL模型在數組這一層面上的對應關係。簡言之,C模型中的數組對應RTL模型中的Memory。需要注意的是,這種對應關係是有條件的。為了使得C模型中的數組可綜合,需要其深度是常數,而不能是變數(RTL模型中的Memory也是固定的深度與寬度)。

有了這種對應關係,就不難理解其優化方法。Vivado HLS提供了數組分割(array_partition)、數組映射(array_map)和數組重構(array_reshape)等三種優化方法。此外,還可以通過resource選擇數組最終在FPGA中實現時是採用分散式RAM還是Block RAM或者UltraRAM。

更為深入的介紹可以閱讀以下文檔:

ug902(v2018.1) High-Level Synthesis User Guide page 145 – page 147 (ARRAY_PARTITION)

ug902(v2018.1) High-Level Synthesis User Guide page 170 – page 176 (ARRAY_MAP, ARRAY_RESHAPE)

ug871(v2018.1) High-level Synthesis Tutorial Ch6: Design Analysis Lab 1

影片內容