set_directive_array_partition - 2022.1 Chinese

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2022-06-07
Version
2022.1 简体中文

描述

重要: 针对顶层函数上的 M_AXI 接口,不支持 Array_PartitionArray_Reshape 编译指示和指令。您可改用 hls::vector 数据类型,如 矢量数据类型 中所示。

将阵列分区为更小的阵列或者独立元素。

这种分区方式可以:
  • 生成包含多个小型存储器或多个寄存器(而不是一个大型存储器)的 RTL。
  • 有效增加存储器读写端口数量。
  • 可能改善设计吞吐量。
  • 需要更多存储器实例或寄存器。

语法

set_directive_array_partition [OPTIONS] <location> <array>
  • <location> 是包含阵列变量的位置(格式为 function[/label])。
  • <array> 是要分区的阵列变量。

选项

-dim <integer>
注释: 仅与多维阵列相关。
指定要分区的阵列的维度。
  • 如果使用 0 值,则使用指定选项对所有维度进行分区。
  • 设置任何其它值都仅对该值对应的维度进行分区。例如,如果使用的值为 1,则仅对第 1 个维度进行分区。
-factor <integer>
注释: 仅与 blockcyclic 分区类型有关。
指定要创建的更小的阵列数量。
-type (block|cyclic|complete)
  • block 型分区会从原始阵列的连续块创建更小阵列。这样可将阵列有效分区为 N 个相等的块,其中 N 为 -factor 选项定义的整数。
  • cyclic 型分区会通过交织来自原始阵列的元素来创建更小的阵列。例如,如果使用 -factor 3
    • 向第 1 个新阵列分配元素 0。
    • 向第 2 个新阵列分配元素 1。
    • 向第 3 个新阵列分配元素 2。
    • 向第 4 个新阵列分配元素 3。
  • complete 分区可将阵列分解为多个独立元素。对于一维阵列,这对应于将存储器解析为独立寄存器。对于多维阵列,请指定每个维度的分区方式,或者使用 -dim 0 选项来对所有维度进行分区。
默认值为 complete

示例 1

func 函数中的 AB[13] 阵列分区为 4 个阵列。由于 4 不是 13 的整数因子,因此:

  • 有 3 个阵列各包含 3 个元素。
  • 另 1 个阵列包含 4 个元素 (AB[9:12])。
set_directive_array_partition -type block -factor 4 func AB

func 函数中的 AB[6][4] 阵列分区为 2 个阵列,每个阵列维度为 [6][2]。

set_directive_array_partition -type block -factor 2 -dim 2 func AB

func 函数中的 AB[4][10][6] 的所有维度分区为独立元素。

set_directive_array_partition -type complete -dim 0 func AB

示例 2

在您的代码中,可以按阵列的新结构来对已分区的阵列进行寻址,如以下代码示例所示。

struct SS
{
  int x[N];
  int y[N];
};
  
int top(SS *a, int b[4][6], SS &c) {...}

set_directive_array_partition top b -type complete -dim 1
set_directive_interface -mode ap_memory top b[0]
set_directive_interface -mode ap_memory top b[1]
set_directive_interface -mode ap_memory top b[2]
set_directive_interface -mode ap_memory top b[3]