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

    文章

    5390

    浏览量

    121900
  • 数组
    +关注

    关注

    1

    文章

    418

    浏览量

    26108
  • 图形界面
    +关注

    关注

    0

    文章

    37

    浏览量

    7436

原文标题:图解ARRAY_PARTITION

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

收藏 人收藏

    相关推荐

    为什么无法使用“numpy.array”函数加载图像文件?

    替换为图像文件: random_input_data = np.array(r\"image.png\").astype(np.float16) 遇到错误: ValueError: 无法将字符串转换为浮点数
    发表于 03-06 07:31

    Lua语法基础教程(下篇)

    今天我们继续学习Lua语法基础教程,下篇。 九、函数 9.1 初识函数 函数是指一段在一起的、可以做某一件事儿的程序,也叫做子程序。 在前面的内容中,我们已经接触过了函数的调用,这个函数就是前面用到
    的头像 发表于 10-26 11:41 397次阅读
    Lua<b class='flag-5'>语法</b>基础教程(下篇)

    Lua语法基础教程(中篇)

    今天我们继续学习Lua语法基础教程,中篇。 五、变量 5.1 number变量 变量,可以看作是一个桶,在里面装你想要装的内容。这些内容可以是Lua包含的所有合法类型。 例如:我想要新建一个桶,名叫
    的头像 发表于 10-26 11:39 381次阅读
    Lua<b class='flag-5'>语法</b>基础教程(中篇)

    Verilog语法中运算符的用法

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

    Lua语法基础教程(上篇)

    今天我们来学习Lua语法基础教程。由于篇幅过长,将分为上中下三篇进行讲解,本篇为上篇。 一、初识Lua Lua 是一种轻量小巧的脚本语言,它用标准C语言编写并以源代码形式开放。这意味着什么呢?这
    的头像 发表于 10-24 07:17 383次阅读

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

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

    rk3568在.config中配置了CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION =y,parameter.txt却没有security分区

    security partition Authentication key not yet programmed E/TC:? 0 tee_rpmb_verify_key_sync_counter:1019
    发表于 07-29 12:14

    使用NVS Partition Generator Utility nvs读取不到key值,是怎么回事?

    /nvs_flash/nvs_partition_generator/nvs_partition_gen.py --input test.csv --output test.bin --size 0x6000
    发表于 06-26 07:37

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

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

    配置ble mesh保存节点信息时初始化partition失败了怎么处理?

    Flash Size : 4MB I (54) boot: Enabling RNG early entropy source... I (60) boot: Partition Table: I
    发表于 06-24 07:39

    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

    IDF-4.4.2在修改boot过程中,编译有提示bootloader受到partition-table offset的限制,为什么?

    我在 IDF-4.4.2在修改boot过程中,编译有提示bootloader受到partition-table offset的限制,如下图 可当我用menuconfig修改后,发现从0XC000
    发表于 06-14 06:27

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

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

    直流可编程电子负载IT8500系列编程与语法指南

    电子发烧友网站提供《直流可编程电子负载IT8500系列编程与语法指南.pdf》资料免费下载
    发表于 04-14 09:56 3次下载