跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
Diodes捷比信 · 专业器件主题站

首先看一下ARRAY_PARTITION的基本语法

ARRAY_PARTITION根据指定的要求将阵列分为多个小阵列,以形成多个小存储空间。这样做最直接的好处是,它增加了数据读/写端口的数量,从而提高了数据吞吐率,但同时也消耗了更多的RAM资源或寄存器。让我们看一下ARRAY_PARTITION的基本语法,如下图所示。该方法在代码中使用#pragma直接描述,当然,也可以在VitisHLS中使用图形界面直接描述该方法,如下图所示。有两个重要的参数type和factor,其中type具有三个可选值,block,循环和complete。让我们看看这三个之间有什么区别。为了便于说明,这里以一个数组长度为12的一维数组A [12]为例。如果类型为块且因子为4,则表示将A [12]分为4个小数组,因此每个数组的长度为12/4 = 3,并且每个数组中的元素按从大到小的顺序排列原始Get in the array。如果类型为循环且因子为4,则仍将数组划分为4个长度为3的小数组,并且每个数组中的元素都是从原始数组中隔行获取的。如果类型完整,则参数因子此时不起作用。可以理解,所有的阵列都被分解了,可以同时获得12个元素,可以通过寄存器实现。两者之间的区别如下图所示。上面的三种形式以#pragma的形式描述,如下图所示。在以下描述模式下,块,循环和完成的最终结果相同。这里有一个问题。如果因子不能被数组的长度平均整除,将会发生什么?假设上述情况的因子为5,则最终结果将为5个数组,其中前4个数组的长度为2,最后一个数组的长度为4。ARRAY_PARTITION还允许分割不同的维。以二维数组A [6] [4]为例,dim的含义如下图所示。一旦指定了暗淡,就可以分割指定的暗淡。在此,以A [6] [4]为例。下图显示了分割情况。另外,使用#pragma进行描述时,可以通过宏为参数分配值,如下图所示。那么什么时候使用块,什么时候使用循环呢?从本质上讲,它与数据流密切相关。在下一篇文章中,我们将给出一个具体案例来帮助大家理解。