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

    文章

    130

    浏览量

    24144

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

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

收藏 人收藏

    评论

    相关推荐

    STM32F407 MCU使用SD NAND 不断电初始化失效解决方案

    STM32F407微控制器单元(MCU)与SD NAND的结合提供了强大的存储解决方案。然而,不断电初始化失效问题可能会导致系统稳定性和数据完整性受损。我们将STM32F407与SD NAND集成时可能遇到初始化问题,并提供专
    的头像 发表于 12-11 10:51 374次阅读
    STM32F407 MCU使用SD NAND 不断电<b class='flag-5'>初始化</b>失效解决方案

    segger编译器初始化问题

    的图; 2.第二张图是该变量在文件的所有操作,第一行是初始化,该行代码在初始化部分最后一个,执行完就是主循环了; 3.第2,3行也是对变量的赋值,在主循环中; 4.第4行已注释; 5.第6行是对变量
    发表于 12-09 18:06

    TLV320AIC3254初始化的时间大概是多长?

    TLV320AIC3254初始化的时间大概是多长,为什么我按标准的程序流程需要3秒左右,初始化的时间跟那些参数有关系!
    发表于 11-06 07:07

    基于旋转平移解耦框架的视觉惯性初始化方法

    精确和鲁棒的初始化对于视觉惯性里程计(VIO)至关重要,因为不良的初始化会严重降低姿态精度。
    的头像 发表于 11-01 10:16 383次阅读
    基于旋转平移解耦框架的视觉惯性<b class='flag-5'>初始化</b>方法

    TMS320C6000 McBSP初始化

    电子发烧友网站提供《TMS320C6000 McBSP初始化.pdf》资料免费下载
    发表于 10-26 10:10 0次下载
    TMS320C6000 McBSP<b class='flag-5'>初始化</b>

    Keil变量不被初始化方法

    有些时候在我们的应用过程要求变量有连续性,或者现场保留,例如Bootloader跳转,某种原因的复位过程我们有些关键变量不能被初始化,在不同的编译环境下有不同的设置,本文就这个操作做总结,分别
    的头像 发表于 08-30 11:47 725次阅读
    Keil<b class='flag-5'>中</b>变量不被<b class='flag-5'>初始化</b>方法

    瀚海微SD NAND应用之SD协议存储功能描述2 初始化命令

    初始化和识别过程: 总线激活后,主机启动卡初始化和识别过程。 初始化过程从SD SEND OP COND (ACMD41)开始,通过设置其操作条件和OCR的HCS位。HCS (Ho
    的头像 发表于 07-22 10:54 392次阅读
    瀚海微SD NAND应用之SD协议存储功能描述2 <b class='flag-5'>初始化</b>命令

    初始化IO口为外部中断线的时候,最先初始化的会被后初始化的覆盖掉为什么?

    初始化IO口为外部中断线的时候,比如GPIOA6与GPIOB6先后初始化为外部中断,最先初始化的会被后初始化的覆盖掉,不知道是为什么?
    发表于 05-14 08:26

    在一个.c文件定义一个数组遇到的疑问求解

    的时候没有指定数组的大小,只是做了初始化,而且这个初始化可以看到,而且自己可以定义初始化的值,并且初始化不同元素个数也可以,那么在其他文件求
    发表于 05-14 07:03

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

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

    深入探索KUKA KRL数组应用

    如果 CHAR 类型数组的所有数组元素都拥有相同的字符串,则不必单独初始化每个数组元素。忽略右侧的数组下标。(对于一维
    的头像 发表于 04-18 10:37 1284次阅读
    深入探索KUKA KRL<b class='flag-5'>中</b>的<b class='flag-5'>数组</b>应用

    STM32F103RC变量初始化问题求解

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

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

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

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

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

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

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