最近使用 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的更多相关文章

  1. IDEA+maven+javafx(java 1.8)入坑记录

    序 好久没写博客了,主要是因为懒,写博客真的是个难坚持的事.但今天登上来看了看,之前记录ctf写的wp竟然点击量这么多了,突然让我有了继续写下去的动力. 这段时间遇到了好多事,中间也有想过写几篇文章记 ...

  2. c#调用c++ dll 入坑记录

    1.DLL引用坑 [DllImport("NetDLL.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConve ...

  3. NodeMCU入坑指南-烧写固件并连接WIFI

    写在前面 今天入手了一个NodeMCU的板子,准备学习一下物联网相关的知识.不过由于博主学艺不精,在第一步烧写固件上就踩坑了,所以就想着把自己的踩坑经历写出来分享给大家,希望能有一些帮助~ 材料准备 ...

  4. React Native入坑记录

    1.render中如果使用props,直接用this.props.xxx,如果是在JSX中,用{this.props.xxx} 2.警告each child in an array or iterat ...

  5. Windows To Go入坑记录

    什么是Windows To Go? https://en.wikipedia.org/wiki/Windows_To_Go 微软为了解决企业用户的需求而推出,可以在u盘或者移动硬盘启动window系统 ...

  6. 入坑python 自己写的小工具,纪念一下

    这个程序的功能是可以从表格中读取某一列数据,传到IDs 这一个参数里,然后在url中获取相应的请求值,并打印 import urllib.request import json import xlrd ...

  7. vue element InfiniteScroll 无限滚动 入坑记录

    select_law_by_tag() { this.laws_loading.is_loading = true; this.laws_loading.no_more = false; this.e ...

  8. Angular 从入坑到挖坑 - Angular 使用入门

    一.Overview angular 入坑记录的笔记第一篇,完成开发环境的搭建,以及如何通过 angular cli 来创建第一个 angular 应用.入坑一个多星期,通过学习官方文档以及手摸手的按 ...

  9. Angular 从入坑到挖坑 - 组件食用指南

    一.Overview angular 入坑记录的笔记第二篇,介绍组件中的相关概念,以及如何在 angular 中通过使用组件来完成系统功能的实现 对应官方文档地址: 显示数据 模板语法 用户输入 组件 ...

  10. Angular 从入坑到挖坑 - 表单控件概览

    一.Overview angular 入坑记录的笔记第三篇,介绍 angular 中表单控件的相关概念,了解如何在 angular 中创建一个表单,以及如何针对表单控件进行数据校验. 对应官方文档地址 ...

随机推荐

  1. 虾皮shopee根据ID取商品详情 API 返回值说明

    ​ item_get-根据ID取商品详情  注册开通 shopee.item_get 公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) secr ...

  2. Vs2022安装.Net4.5程序包

    因为VS2022将不再支持.NET4.5,即使在Visual Studio Installer中也找不到.NET4.5的选项 我们可以在NuGet包中下载.NET 4.5的工具包 找到程序包管理器控制 ...

  3. umich cv-1

    UMICH CV Image Classification---KNN 在本节课中,首先justin老师为我们介绍了图像分类了基础概念以及其用途,这里就不多涉及了 接着我们思考图像分类问题,如果我们想 ...

  4. 几个易错的python小知识点

    大家好,我是暴走の海鸽~ 本期整理了几个基础python防坑小常识,希望对大家有所帮助. 1. type == object? 执行以下代码的结果是什么: >>> isinstanc ...

  5. Util应用框架 7.x 来了

    什么是Util应用框架? Util是一个.Net平台下的应用框架,旨在提升中小团队的开发能力,由工具类.分层架构基类.Ui组件,配套代码生成模板,权限等组成. Util应用框架 7.x介绍 Util应 ...

  6. 从零用VitePress搭建博客教程(3) - VitePress页脚、标题logo、最后更新时间等相关细节配置

    接上一节:从零用VitePress搭建博客教程(2) –VitePress默认首页和头部导航.左侧导航配置 五.默认主题相关细节配置 关于默认主题的标题,logo.页脚,最后更新时间等相关细节配置,我 ...

  7. 2023-10-25:用go语言,假如某公司目前推出了N个在售的金融产品(1<=N<=100) 对于张三,用ai表示他购买了ai(0<=ai<=10^4)份额的第i个产品(1<=i<=N) 现给出K(

    2023-10-25:用go语言,假如某公司目前推出了N个在售的金融产品(1<=N<=100) 对于张三,用ai表示他购买了ai(0<=ai<=10^4)份额的第i个产品(1& ...

  8. springboot整合shiro框架学习

    springboot整合shiro框架做用户认证与授权 springboot整合shiro框架的流程主要分为: 导入shiro依赖 <dependency> <groupId> ...

  9. MySQL系列:binlog日志详解(参数、操作、GTID、优化、故障演练)

    目录 简介 作用 系统参数 --log_bin --server_id --binlog_format --sync-binlog(双一标准) --gtid-mode(gtid) --enforce- ...

  10. (Good topic)双指针:判断子序列

    给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=1 ...