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

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

    关注

    31

    文章

    5305

    浏览量

    119914
  • 数组
    +关注

    关注

    1

    文章

    412

    浏览量

    25893
  • 图形界面
    +关注

    关注

    0

    文章

    37

    浏览量

    7352

原文标题:图解ARRAY_PARTITION

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

收藏 人收藏

    评论

    相关推荐

    Verilog语法中运算符的用法

    verilog语法中使用以下两个运算符可以简化我们的位选择代码。
    的头像 发表于 10-25 15:17 269次阅读
    Verilog<b class='flag-5'>语法</b>中运算符的用法

    编译例程partition_mmap,报错no such vaddr range怎么解决?

    内存映射问题:编译例程partition_mmap,报错no such vaddr range怎么解决?
    发表于 09-26 07:03

    为什么nvs_partition_gen.py无法对csv文件转换成bin文件?

    对应的 NVS 分区: $IDF_PATH/components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py --input
    发表于 06-25 06:25

    FPGA学习笔记---基本语法

    Verilog语法是指硬件能够实现的语法。它的子集很小。常用的RTL语法结构如下: 1、模块声明:module ... end module 2、端口声明:input, output, inout
    发表于 06-23 14:58

    擦除flash的API函数esp_partition_erase_range(),擦除的扇区大小能否设置呢?

    前提:如题,esp_partition_erase_range()函数擦除flash要求偏移offset与大小size必须对齐4KByte,即整片扇区擦除; 使用场景:我需要
    发表于 06-20 06:26

    请问如何读取partition table的数据?

    用分区API ,esp_partition_find_first(); 无法找到partition table分区,只能查到0x9000后面的地址! 只能读取NVS,PHY这些。 有什么方法可以读取 0x8000 -0x9000 的数据吗?
    发表于 06-11 06:57

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

    小编首先联想到partition是否将pin push下去,我们可以debug一下,回到maia_topdown/work目录下,invs打开MAIA命令如下:
    的头像 发表于 02-23 10:11 471次阅读
    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和mysql语法区别大吗

    Oracle和MySQL是两种不同的关系型数据库管理系统(RDBMS)。虽然它们都是遵循SQL标准,但在语法和特性上仍存在一些区别。以下是对Oracle和MySQL语法区别的详细说明: 数据类型
    的头像 发表于 12-06 10:26 1095次阅读

    oracle case when 语法介绍

    Oracle的CASE WHEN语法是一种在数据库查询中使用的条件语句,它提供了一种在SELECT语句中根据条件对结果进行转换或筛选的方法。在本文中,我们将详细介绍Oracle的CASE WHEN
    的头像 发表于 12-06 10:21 1677次阅读

    oracle的update语法

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

    javascript的基本语法遵循的标准

    JavaScript是一种脚本语言,用于为网站添加交互性和动态性的功能。它的基本语法遵循ECMAScript标准,这是一种由Ecma国际组织制定的语言标准。本文将详细介绍JavaScript
    的头像 发表于 12-03 11:35 2681次阅读

    xlookup比vlookup好在哪

    相对于vlookup的优点,包括语法、功能、性能和用法。 语法灵活性: xlookup的语法比vlookup更加直观和灵活。xlookup函数的语法为:xlookup(lookup_v
    的头像 发表于 12-01 10:52 4270次阅读

    java switch case的语法规则

    在Java中,switch case语句是一种用于多分支选择的控制流语句。它允许根据某个表达式的值来执行不同的代码块。下面是关于switch case语法规则的详细解释。 基本语法 switch语句
    的头像 发表于 11-30 14:40 2113次阅读