XILINX HLS 入坑记录 之 写RAM 综合出 读取+写入Ram
最近使用 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资源。
XILINX HLS 入坑记录 之 写RAM 综合出 读取+写入Ram的更多相关文章
- IDEA+maven+javafx(java 1.8)入坑记录
序 好久没写博客了,主要是因为懒,写博客真的是个难坚持的事.但今天登上来看了看,之前记录ctf写的wp竟然点击量这么多了,突然让我有了继续写下去的动力. 这段时间遇到了好多事,中间也有想过写几篇文章记 ...
- c#调用c++ dll 入坑记录
1.DLL引用坑 [DllImport("NetDLL.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConve ...
- NodeMCU入坑指南-烧写固件并连接WIFI
写在前面 今天入手了一个NodeMCU的板子,准备学习一下物联网相关的知识.不过由于博主学艺不精,在第一步烧写固件上就踩坑了,所以就想着把自己的踩坑经历写出来分享给大家,希望能有一些帮助~ 材料准备 ...
- React Native入坑记录
1.render中如果使用props,直接用this.props.xxx,如果是在JSX中,用{this.props.xxx} 2.警告each child in an array or iterat ...
- Windows To Go入坑记录
什么是Windows To Go? https://en.wikipedia.org/wiki/Windows_To_Go 微软为了解决企业用户的需求而推出,可以在u盘或者移动硬盘启动window系统 ...
- 入坑python 自己写的小工具,纪念一下
这个程序的功能是可以从表格中读取某一列数据,传到IDs 这一个参数里,然后在url中获取相应的请求值,并打印 import urllib.request import json import xlrd ...
- vue element InfiniteScroll 无限滚动 入坑记录
select_law_by_tag() { this.laws_loading.is_loading = true; this.laws_loading.no_more = false; this.e ...
- Angular 从入坑到挖坑 - Angular 使用入门
一.Overview angular 入坑记录的笔记第一篇,完成开发环境的搭建,以及如何通过 angular cli 来创建第一个 angular 应用.入坑一个多星期,通过学习官方文档以及手摸手的按 ...
- Angular 从入坑到挖坑 - 组件食用指南
一.Overview angular 入坑记录的笔记第二篇,介绍组件中的相关概念,以及如何在 angular 中通过使用组件来完成系统功能的实现 对应官方文档地址: 显示数据 模板语法 用户输入 组件 ...
- Angular 从入坑到挖坑 - 表单控件概览
一.Overview angular 入坑记录的笔记第三篇,介绍 angular 中表单控件的相关概念,了解如何在 angular 中创建一个表单,以及如何针对表单控件进行数据校验. 对应官方文档地址 ...
随机推荐
- API接口的研发与应用
API(Application Programming Interface,应用程序编程接口)指的是为不同的软件应用程序提供编程接口的一组协议.规则以及工具的集合,以便它们能够互相交互,实现数据通 ...
- PanGu-Coder2:从排序中学习,激发大模型潜力
本文分享自华为云社区<PanGu-Coder2:从排序中学习,激发大模型潜力>,作者: 华为云软件分析Lab . 2022年7月,华为云PaaS技术创新Lab联合华为诺亚方舟语音语义实验室 ...
- Python colorama 设置控制台、命令行输出彩色文字
为了方便调试代码,经常会向stdout中输出一些日志,但是大量日志,有时不好定位问题. 使用终端打印特定颜色字符串,可以突出显示关键性的信息,帮助用户更好地识别和理解输出内容. https://pyp ...
- WebStrom提交代码到GitLab报错Error: Cannot find any-observable implementation nor global.Observable.
项目场景: 前端代码完成后,提交代码 问题描述 提交代码到GitLab时,因自动检测机制导致项目提交失败 C:\D\insper\inspur_works\custom-manage-front\no ...
- Windows上Dart安装
过程 *1 去github上下载一个release包或者直接将flutter通过git clone下来 *2 将下载下来的flutter/bin添加到path中 *3 此时运行flutter或者flu ...
- Dubbo3应用开发—XML形式的Dubbo应用开发和SpringBoot整合Dubbo开发
Dubbo3程序的初步开发 Dubbo3升级的核心内容 易⽤性 开箱即⽤,易⽤性⾼,如 Java 版本的⾯向接⼝代理特性能实现本地透明调⽤功能丰富,基于原⽣库或轻量扩展即可实现绝⼤多数的 微服务治理能 ...
- 文心一言 VS 讯飞星火 VS chatgpt (100)-- 算法导论9.3 6题
六.用go语言,对一个包含n个元素的集合来说,k分位数是指能把有序集合分成k个等大小集合的第k-1个顺序统计量.给出一个能找出某一集合的k分位数的 O(nlgk)时间的算法. 文心一言: 要找到一个集 ...
- 使用SemanticKernel 进行智能应用开发(2023-10更新)
以OpenAI 的ChatGPT 所掀起的GenAI 快速创新浪潮,其中连接LLM 和 应用之间的桥梁的两大开源项目:LangChain[1]和Semantic Kernel[2] ,在半年前写过一篇 ...
- 有关library导入的个人总结和反思
本来帮助朋友找寻一下android的一些特效的demo,结果找到了一个,朋友试验可以,自己却是在导入项目需要的library的时候总是出问题,真的很是丢人,反省反省. 也许专业人士看来这是非常可笑的问 ...
- Linux常用命令大全 Linux Commands Line - v1.0
The most complete and updated list of commands on linux by LinuxGuide.it - over 350 commands! ...