第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

视频内容