首页 > 其他分享 >XILINX HLS 入坑记录 之 写RAM 综合出 读取+写入Ram

XILINX HLS 入坑记录 之 写RAM 综合出 读取+写入Ram

时间:2023-12-21 21:22:20浏览次数:31  
标签:Ram 读取 写入 RAM HLS ram ARRAY

最近使用 Xilinx HLS 来开发 算法的IPcore,使用的Vitis 2021,发现光是 EDA 工具就存在很多的bug,比如:

1.经常C综合 停留在 Using flow_target 'vivado' 不给任何报错提示,永远卡死;

2.点击coSimulation vivado 启动 后读取脚本卡死,不能正常仿真;

3.C综合给出的资源使用和IPCore实现后的资源使用相差甚远,通常C综合的LUT资源会比实现后的LUT资源高一倍以上;

遇到这种情况只能重新建立工程添加derectives ,真的太难用了,希望Xilinx 能够提供更好的工具。

 

以上坑都踩完了 还有一个问题卡了3天才解决,这个是使用上的问题;

问题表象是使用双端口Ram写入一段数据,使用 pipeline 后,总共的写入延时应该为Ram长度的一半,最后综合出来 pipeline 的II=2,也就是延时为整个Ram数据的长度。

  最开始综合单独将这个循环所在的函数设置为TOP Fuction 时,延时正确的,但是这个函数是作为子模块存在更大的顶层模块中。当我设置最终的顶层函数作为顶层模块时,这个子函数的 pipeline 的II=2,延时为Ram的长度;最终查看Schedule Viewer 发现在写入双端口ram之前需要读取目标ram的数据,这是想了很久都没想明白的。最终经过不同版本的折腾和上面的踩坑过程,最后通过查看生成出verilog 代码,发现写入数据前需要和读取的数据进行与操作和其他乱七八糟的逻辑运算操作,我需要写入的数据位宽为5bit,ram的端口位宽为10bit,如果只需要写入5bit确实需要读取再写入(在没有做过HDL 开发的情况下,不清楚ram读写逻辑,通过询问做FPGA的同事才知道)。

  为什么操作的Ram从5bit位宽变成了10bit 位宽,是因为我的顶层函数下的其他函数需要2个5bit 同时访问,因此对Ram添加了 #pragma HLS ARRAY_RESHAPE dim=1 factor=2 type=cyclic variable=xxxx,这个优化将Ram变成2倍位宽,最终改为#pragma HLS ARRAY_PARTITION dim=1 factor=2 type=cyclic variable=xxxx;就可以了。

总结: 不是说有的 ARRAY_RESHAPE  都可以替代 ARRAY_PARTITION   ,需要读写多组 数据,而且是需要单独读写其中某一个数据时 必须使用 ARRAY_PARTITION  ,仅仅需要同时读写多组数据时 就可以使用 ARRAY_RESHAPE  以便节省 ram资源。

标签:Ram,读取,写入,RAM,HLS,ram,ARRAY
From: https://www.cnblogs.com/hook-gou/p/17920086.html

相关文章

  • 《OneLLM: One Framework to Align All Modalities with Language》论文学习
    一、Abstract随着LLM的兴起,由于其强大的语言理解和推理能力,在学术和工业界中越来越受欢迎。LLM的进展也启发了研究人员将LLM作为多模态任务的接口,如视觉语言学习、音频和语音识别、视频理解等,因此多模态大语言模型(MultimodalLargeLanguageModel,MLLM)也引起了研究人员的关注......
  • CF527E Data Center Drama
    题意给你一张无向图。你可以添加若干条边,然后给所有边定向。使得每一个点的出入度为偶数。Sol出入度为偶数,显然为欧拉环路的充要条件。考虑对于所有原图度数为奇数的点两两相连。如果不满足边数为偶数直接连自环即可。跑一边欧拉环路,对于相邻两条边反向连就行了。Code#i......
  • 芯片之SRAM介绍
    链接如下:https://blog.csdn.net/i_chip_backend/article/details/121130370?spm=1001.2014.3001.5502https://blog.csdn.net/i_chip_backend/article/details/121662466?spm=1001.2014.3001.5502https://blog.csdn.net/i_chip_backend/article/details/122411816?s......
  • RTSP流媒体视频平台LiteNVR播放HLS流,出现中断且无法自动恢复的原因排查
    有用户反映,在使用安防视频LiteNVR平台时,取平台分发的hls地址在移动端播放一段时间就会停止,且无法自动恢复播放。今天我们来介绍下该问题的排查与解决方法。LiteNVR是基于RTSP/Onvif协议推出的安防视频监控管理平台,它可实现设备接入、实时直播、录像、检索与回放、存储、视频分发......
  • CF1914F Programming Competition
    原题链接感觉有点类似agc034eCompleteCompress,但那题比这个难得多。定义\(f_x\)为以\(x\)为根的子树中,尽可能组队后最多剩下多少人,\(siz_x\)为子树大小。记\(y\inson(x)\)中\(f_y\)最大的点为\(hson_x\)。当\(\sum\limits_{y\inson(x),y\not=hson_x}siz_y<......
  • vue中@param 常用注释模板
    /***获取事件在列表中的位置*@paramcontext*@paramcallback*@private*/_evIndex(event,context,callback){letindex=-1;for(leti=0;i<=event.length;i++){if(event[i].context===contex&&event[i].callback===callback){......
  • mapstruct报错 No property named "XXXX" exists in source parameter(s). Type "XXXX
    1、问题现象java:Nopropertynamed"XXXX"existsinsourceparameter(s).Type"XXXX"hasnoproperties.2、相关环境依赖版本jdk:17maven:3.8.8springboot:3.1.4lombok:1.18.30mapstruct:1.5.53、解决办法在pom.xml中加入如下配置<annotationProcessor......
  • GoFrame Goland插件
    前言GoFrame是一款模块化、高性能、企业级的Go基础开发框架。GoFrame是一款通用性的基础开发框架,是Golang标准库的一个增强扩展级,包含通用核心的基础开发组件,优点是实战化、模块化、文档全面、模块丰富、易用性高、通用性强、面向团队。GoFrame既可用于开发完整的工程化项......
  • 启用微服务报错:Method has too many Body parameters
    启用微服务报错:MethodhastoomanyBodyparameterspackagecom.llq.springcloud.controller;@RestControllerpublicclassStorageController{@ResourceprivateStorageServicestorageService;//扣减库存你@PostMapping("/storage/reduce")......
  • drf( Restful规范——序列化与反序列化——DjangoRESTframewordk用法——原生与drf实
    #Restful规范(重要-概念)```python#API接口---》后端要提供api接口---》2000年RoyFielding的博士论文中###restful是什么?REST全称是RepresentationalStateTransfer,表征性状态转移WebAPI接口的设计风格,尤其适用于前后端分离的应用模式中#有哪些规范10条 1数据的安全......