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

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

3天内不再提示

简述HLS中的数组初始化遇到的那些个问题

OpenFPGA 来源:TeacherGaoFPGAHub 作者:TeacherGaoFPGAHub 2021-07-21 09:36 次阅读

在HLS中使用数组时,尤其是对数组初始化时,尽可能加上关键字static,这样C++中数组的行为才能与RTL中存储单元的行为保持一致。例如:将FIR滤波器系数存储在数组coeff中,由于系数固定不变,可以断定该数组最终映射为RTL中的ROM

添加static之后,每次函数在被执行时,数组coeff都会记住其前一次被调用时的值。这就要理解static在C++中的含义,即static规定其指定的变量存储方式为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放。对于指定static关键字的变量,VitisHLS在生成RTL代码时会对其先进行初始化。

7bb53a22-e428-11eb-a97a-12bb97331649.png

如果数组在整个函数执行过程中只发生读操作而没有写操作,那么建议添加关键字const,以保证VitisHLS能正确推断出ROM。

如果在ROM的初始化过程中出现复杂的运算,例如使用了math.h中的函数等,建议将初始化过程单独封装为一个函数。我们来看一个案例。在下面的代码中,函数init_sin_table用于初始化数组sin_table。在其初始化过程中会调用math.h中的函数sin。

sin要求其形参为float或double。函数lookup_math中声明了数组sin_table,并添加关键字static。在代码第17行调用了函数init_sin_table完成数组初始化。第18行则是从sin_table中获取相应地址上的数据完成最终的乘法运算。

7be282b6-e428-11eb-a97a-12bb97331649.png

从HLS综合后的报告来看,最终sin_table的存储形式(报告中的Storage列)为rom_1p,实现方式为auto,Latency为1。在资源评估报告中可以看到消耗了1个BRAM。

7c1a0862-e428-11eb-a97a-12bb97331649.png

7c46f2dc-e428-11eb-a97a-12bb97331649.png

编辑:jq

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

    关注

    1

    文章

    126

    浏览量

    23683

原文标题:HLS中的数组初始化问题

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在一个while的循环里面,怎么样可以通过控件去让其中的数组值全部初始化

    这种方式是让所有的数据都初始化了,我只需要部分数据初始化,就是所有的数组,大佬们求帮助!
    发表于 04-18 21:19

    STM32F103RC变量初始化问题求解

    Test0变量的值一直是0x03,并且无法被初始化其他值。 例如:ArryTest[7]的地址为0x20000200,Test0 的地址为0x2000020e,则Test0 的值无法被修改,一直为0x03. 有哪位朋友遇到过这样的问题没有?
    发表于 04-10 07:35

    字符型、指针型等变量等该如何初始化

     对于数值类型的变量往往初始化为0,但对于其他类型的变量,如字符型、指针型等变量等该如何初始化呢?
    的头像 发表于 03-18 11:02 206次阅读

    TC397 SPI的初始化需要修改那些配置吗?

    我想使用TC397芯片的SPI通讯功能,由于PCB设计原理图使用的SPI通道所有自带片选都被占用,因此需要使用GPIO功能模拟SPI的片选,遇到的问题是通讯偶尔出现接收数据全为F,我在使用SPI 的硬件片选时,SPI的初始化需要修改那些
    发表于 03-06 06:02

    MCU单片机GPIO初始化该按什么顺序配置?为什么初始化时有电平跳变?

    GPIO初始化时有时钟配置、模式配置、输出配置、复用配置,那么在编写初始化代码时,到底该按什么顺序执行呢?如果顺序不当那初始化过程可能会出现短暂的电平跳变。
    的头像 发表于 02-22 11:07 371次阅读
    MCU单片机GPIO<b class='flag-5'>初始化</b>该按什么顺序配置?为什么<b class='flag-5'>初始化</b>时有电平跳变?

    如何在PSOC 6初始化QSPI?

    *cfg,uint32_t hz) 我查看了 \" MTB CAT1 外围设备驱动程序库的文档。\"初始化不会那么复杂,对吧? 我的配置有什么问题? 在此先感谢。
    发表于 01-26 07:48

    labview运行后如何初始化

    LabVIEW是一款强大的图形化编程软件,在运行之前通常需要进行一些初始化操作。本文将详细介绍LabVIEW运行前的初始化过程,并提供了一些常用的初始化方法。 创建新项目: 在LabVIEW中,首先
    的头像 发表于 12-28 17:24 922次阅读

    请问ADE7753测量直流电压电流需要初始化那些寄存器?

    你好,请问ADE7753测量直流电压电流需要初始化那些寄存器?看文档总提到波形寄存器,测量电压电流的值是不是要从波形寄存器读啊,还是直接读寄存器IRMS,VRMS就可以了?
    发表于 12-27 08:17

    C语言中的数组格式与初始化

    多少存储空间。 数组格式与初始化     格式:   元素类型 数组名[元素个数];        比如:   int[3];       数组元素有顺序之分,每个元素都有一个唯一的下
    的头像 发表于 11-26 16:12 476次阅读
    C语言中的<b class='flag-5'>数组</b>格式与<b class='flag-5'>初始化</b>

    关于ds1302的初始化问题

    用ds1302写时钟的过程,发现每一次上电后,时间都被赋了初值,每次上电ds1302都被被初始化,通过百度知道需要判断秒的第8位是否为1,来使得ds1302只初始化一次,从而实现掉电保持的功能,但是不成功,我不知道是不是代码的
    发表于 10-25 06:06

    Shell脚本程序开发-数组(四)

    数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。
    的头像 发表于 10-22 17:50 289次阅读
    Shell脚本程序开发-<b class='flag-5'>数组</b>(四)

    STM32只初始化SPIMOSI不初始化SPICLK可以用吗?

    STM32只初始化SPIMOSI,不初始化SPICLK,可以用么
    发表于 09-21 06:36

    如何解决OpenVINO工具套件环境初始化过程遇到的错误?

    执行 setupvars.bat 脚本以初始化 Windows® 10 的OpenVINO环境 收到错误: 输入线过长。命令的语法不正确。
    发表于 08-15 07:30

    在执行setupvars.bat脚本以初始化Windows10OpenVINO环境时,提示未安装Python怎么解决?

    在执行 setupvars.bat 脚本以初始化 Windows® 10 OpenVINO™环境时,遇到以下错误消息: 未安装 Python。
    发表于 08-15 06:52

    在WSL2下的Linux安装OpenVINO,为什么无法初始化Xv输出?

    已在 WSL2 下的 Linux* 安装OpenVINO™。 遇到错误:执行以下命令时 无法初始化 Xv 输出 : ./vehicle_pedestrian_tracking.sh person-bicycle-car-de
    发表于 08-15 06:38