0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

先看看ARRAY_PARTITION的基本语法

FPGA技术驿站 来源:Lauren的FPGA 作者:Lauren的FPGA 2020-11-20 10:48 次阅读

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5020

    浏览量

    117630
  • 数组
    +关注

    关注

    1

    文章

    408

    浏览量

    25593
  • 图形界面
    +关注

    关注

    0

    文章

    37

    浏览量

    7292

原文标题:图解ARRAY_PARTITION

文章出处:【微信号:Lauren_FPGA,微信公众号:FPGA技术驿站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    hierarchy partition后,为何maia_cpu做floorplan时候不见pin?

    小编首先联想到partition是否将pin push下去,我们可以debug一下,回到maia_topdown/work目录下,invs打开MAIA命令如下:
    的头像 发表于 02-23 10:11 147次阅读
    hierarchy <b class='flag-5'>partition</b>后,为何maia_cpu做floorplan时候不见pin?

    AMD-Xilinx的Vitis-HLS编译指示小结

    。 含多个退出条件的循环 由于篇幅原因,这里就不细讲了,详情可以参考Vitis高层次综合用户指南 (UG1399) 阵列优化指令 pragma HLS array_partition
    发表于 12-31 21:20

    【飞腾派4G版免费试用】请打算使用EMMC的小伙伴先看看坑大不大

    飞腾派实属小巧灵动,但存在一定的设计不足,对于使用者来说或者测试者来说还有麻烦。 一、硬件坑关于打算使用EMMC的小伙伴先看看坑大不大,再打算使用。先说E2000q是存在两个SDIO口的,这是
    发表于 12-13 10:07

    oracle的update语法

    Oracle是一种强大的关系型数据库管理系统,具有广泛的应用,UPDATE语句是用于修改数据库中现有记录的重要操作之一。在本文中,我们将详细介绍Oracle的UPDATE语法及其用法。 首先,我们
    的头像 发表于 12-05 16:22 604次阅读

    select语句的基本语法

    、详实、细致地解释SELECT语句的基本语法以及关键部分。 SELECT语句的基本语法如下: SELECT 列名 1 , 列名 2 , ... FROM 表名 WHERE 条件 上述语法可以分为三个
    的头像 发表于 11-17 16:23 655次阅读

    List和Numpy Array有什么区别

    了 List 列表。列表是最常见的Python数据类型之一,它可以调整大小并且包含不同类型的元素,非常方便。 那么List和Numpy Array到底有什么区别?为什么我们需要在大数据处理的时候使用Numpy Array?答案是性能。 Numpy数据结构在以下方面表现更好
    的头像 发表于 10-30 10:49 331次阅读
    List和Numpy <b class='flag-5'>Array</b>有什么区别

    quartus基本语法集合

    quartus基本语法集合
    发表于 09-26 07:05

    Python的基本语法汇总

    Python是一门应用性较强的编程语言,近年来的市场也非常大。学习需要,先熟悉一下python的语法
    发表于 09-04 16:26 268次阅读
    Python的基本<b class='flag-5'>语法</b>汇总

    ICer如何设置gvim语法亮亮

    在创建一个linux系统的时候,安装完gvim,系统默认的gvim的模式是白色背景,黑色字体,无语法亮亮。打开一个python脚本大概是下面这种效果。
    发表于 07-24 15:42 171次阅读
    ICer如何设置gvim<b class='flag-5'>语法</b>亮亮

    verilog可综合的语法子集

    可综合的语法是指硬件能够实现的一些语法,这些语法能够被EDA工具支持,能够通过编译最终生成用于烧录到FPGA器件中的配置数据流。
    的头像 发表于 07-23 12:25 801次阅读

    ​数组和C++ std::array详解

    std::array是C++容器库提供的一个固定大小数组的容器。其与内置的数组相比,是一种更安全、更容易使用的数组类型。
    的头像 发表于 07-19 11:02 583次阅读
    ​数组和C++ std::<b class='flag-5'>array</b>详解

    ARRAY 数据类型的变量

    要求 全局数据块已打开。 操作步骤 要声明一个 ARRAY 数据类型的变量,请按以下步骤操作: 在“名称”(Name) 列中,输入变量的名称。 在“数据类型”列中输入“Array”数据类型。在此步骤
    的头像 发表于 07-06 11:08 643次阅读

    西门子博途:ARRAY变量的结构

    在非优化块中,ARRAY 变量不得在字限值处开始。即,在偶数地址的字节处开始。ARRAY 变量将使用该存储空间,直到下一个字限值处。
    的头像 发表于 06-12 09:59 4598次阅读
    西门子博途:<b class='flag-5'>ARRAY</b>变量的结构

    SpinalHDL语法之Bool类型

    作为SpinalHDL语法篇的第一节,我们也从最简单的开始。 Bool类型定义
    的头像 发表于 05-05 16:01 387次阅读

    学习GNU汇编语法

    学习Cortex-A7的GUN汇编语法
    的头像 发表于 04-30 08:42 52.1w次阅读