ARRAY_PARTITION是将数组按照指定要求分割成多个小的数组,形成多个小的存储空间。这带来的最直接的好处是增加了数据读/写端口的个数,也就提高了数据吞吐率,但同时也会消耗更多的RAM资源或者寄存器。
先看看ARRAY_PARTITION的基本语法,如下图所示。这种方法是直接在代码中用#pragma的方式描述,当然也可以直接在VitisHLS中采用图形界面方式描述,如下图所示。
在这里有两个个重要的参数type和factor,其中type有三个可选值,分别为block、cyclic和complete。我们看看三者到底有什么区别。为便于说明,这里我们以一个数组长度为12的一维数组A[12]为例。如果type为block,factor为4,意味着将A[12]分割为4个小的数组,这样每个数组的长度为12/4=3,同时每个数组中的元素是按顺序依次从原始数组中获取。如果type为cyclic,factor为4,这仍是将数组分割为4个长度为3的小数组,每个数组中的元素是交织地从原始数组中获取。如果type是complete,此时参数factor不起作用,可理解为将数组全部打散,可同时获取到12个元素,从而以寄存器方式实现。三者的区别如下图所示。
上述三种形式以#pragma的形式描述如下图所示。
block、cyclic和complete在下面这种描述方式下,最终的结果是一致的。
这里有一个问题,如果factor不能被数组长度整除时会是怎样的结果呢?假定上述案例中factor为5,最终将是5个数组,其中前4个数组长度为2,最后一个数组长度为4。
ARRAY_PARTITION还允许对不同维度进行分割,以二维数组A[6][4]为例,dim的含义如下图所示。
一旦指定了dim,就可以对指定dim进行分割,这里以A[6][4]为例,分割情形如下图所示。

此外,在使用#pragma方式描述时,可以通过宏macro给参数赋值,如下图所示方式。
那么到底什么时候用block,什么时候用cyclic呢?本质上与数据流密切相关,在下一篇文章中我们给出一个具体案例帮助大家理解。
责任编辑:lq
-
寄存器
+关注
关注
31文章
5590浏览量
129075 -
数组
+关注
关注
1文章
420浏览量
27114 -
图形界面
+关注
关注
0文章
39浏览量
7674
原文标题:图解ARRAY_PARTITION
文章出处:【微信号:Lauren_FPGA,微信公众号:FPGA技术驿站】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
二维数组介绍
语法纠错和testbench的自动生成
如何解决将e203的rtl导入vivado后报语法错误的问题
nuclei studio生成的c语言文件是不支持c的语法吗?
程序编译运行正常但是显示语法错误,为什么?
鸿蒙开发如何显示Markdown格式语法 -- markdown_hm介绍
用于 ARRAY 制程工艺的低铜腐蚀光刻胶剥离液及白光干涉仪在光刻图形的测量

先看看ARRAY_PARTITION的基本语法
评论