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

    文章

    5590

    浏览量

    129075
  • 数组
    +关注

    关注

    1

    文章

    420

    浏览量

    27114
  • 图形界面
    +关注

    关注

    0

    文章

    39

    浏览量

    7674

原文标题:图解ARRAY_PARTITION

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    二维数组介绍

    大家不要认为二维数组在内存中就是按行、列这样二维存储的,实际上,不管二维、三维数组… 都是编译器的语法糖。 存储上和一维数组没有本质区别,举个例子: int array[3][3
    发表于 11-25 07:42

    语法纠错和testbench的自动生成

    在编写Verilog代码时,我一般都是先在编辑器上写完,因为编辑器vscode或者notepad++可以提供语法高亮和自动补全等功能,然后用仿真器跑仿真,但是在编写过程中不可避免的会有一些语法的错误
    发表于 10-27 07:07

    如何解决将e203的rtl导入vivado后报语法错误的问题

    主要内容是介绍一下如何解决将e203的rtl导入vivado后,报语法错误的问题。 二、分享内容 如图所示,导入源码后跑仿真,会报语法错误。 这是因为这些文件里面有用system verilog
    发表于 10-24 09:49

    nuclei studio生成的c语言文件是不支持c的语法吗?

    nuclei studio 生成的c语言文件感觉不支持c的语法,因为刚使用这个软件,还请各位大佬帮忙看看
    发表于 10-20 11:02

    程序编译运行正常但是显示语法错误,为什么?

    样例程序:can_sample.c rtconfig.h里启用了#define RT_CAN_USING_HDR 代码从图中这里开始大段标识语法错误: 跳转到宏
    发表于 09-25 06:27

    鸿蒙开发如何显示Markdown格式语法 -- markdown_hm介绍

    在开发过程中,对于内容的展示通常有富文本和Markdown两种,后者更偏向于技术文档、说明书一类的内容展示。但是和富文本不同的是,没有一个原生组件可以用来解析展示Markdown语法的内容,所以
    发表于 06-30 18:47

    用于 ARRAY 制程工艺的低铜腐蚀光刻胶剥离液及白光干涉仪在光刻图形的测量

    引言 在显示面板制造的 ARRAY 制程工艺中,光刻胶剥离是关键环节。铜布线在制程中广泛应用,但传统光刻胶剥离液易对铜产生腐蚀,影响器件性能。同时,光刻图形的精准测量对确保 ARRAY 制程工艺精度
    的头像 发表于 06-18 09:56 617次阅读
    用于 <b class='flag-5'>ARRAY</b> 制程工艺的低铜腐蚀光刻胶剥离液及白光干涉仪在光刻图形的测量

    国星光电InfoComm 2025亮点抢先看

    全球视听技术盛宴InfoComm 2025即将启幕!国星光电将携创新技术矩阵强势登陆奥兰多!从微间距显示核心到多场景显示应用,三大亮点抢先看
    的头像 发表于 06-11 09:29 755次阅读

    在K230上部署yolov5时 出现the array is too big的原因?

    the array is too big 报错\"File \"/sdcard/libs/AIBase.py\", line 73, in run File \"
    发表于 05-28 07:47

    harmony OS NEXT-双向数据绑定MVVM以及$$语法糖介绍

    # 鸿蒙Harmony-双向数据绑定MVVM以及$$语法糖介绍 ## 1.1 双向数据绑定概念 在鸿蒙(HarmonyOS)应用开发中,双向数据改变(或双向数据绑定)是一种让数据·模型和UI组件之间
    的头像 发表于 04-29 16:52 1117次阅读

    看看人家都用树莓派5做了什么产品?

    看看人家都用树莓派5做了什么产品?
    的头像 发表于 03-25 09:46 835次阅读
    <b class='flag-5'>看看</b>人家都用树莓派5做了什么产品?

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

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

    标准网络时钟系统:数字时代的通用语法

    特效与舞台灯光保持帧级对齐——这些突破物理界限的协作,都依赖着数字世界的基础语法:标准网络时钟系统。 数字世界的巴别塔解药       物联网设备每秒产生2.5亿个带时间戳的数据点,但若缺乏统一标准,就像全球机场使用不同时区:工业机
    的头像 发表于 03-03 10:08 640次阅读

    DLP3010工作区域array大约多少温度呢?是否存在风险?

    测试DLP3010的工作温度时,将温度探头放在背面焊盘附近粘住。得到75度的温度值,怀疑DLP3010不能长期工作于此温度下。 1. 那么工作区域array大约多少温度呢?是否存在风险? 2.
    发表于 02-19 07:53

    BNC 插头铜针损坏别着急!先看看能不能换

    当 BNC 插头铜针损坏时,不要盲目地进行处理,先冷静地判断能否更换,再根据实际情况采取合适的解决措施。这样既能节省成本,又能尽快恢复设备的正常运行。
    的头像 发表于 02-06 11:03 849次阅读
    BNC 插头铜针损坏别着急!<b class='flag-5'>先看看</b>能不能换