reference:

  • VIVADO HLS Training
  • Creating a simple AXI-master interface for testing with Vivado HLS
  • 如何使用Vivado HLS加速FPGA算法开发
  • 米联客XILINX_ZYNQ-7000系列(第四期) HLS入门
  • 参考戴书画给的百度网盘文件里面的“04_XILINX7 系列FPGA HLS入门.pdf”

四种PS-PL接口

  • PS指的是ARM核,PL指的是FPGA
  • axi-lite接口,PS可以读写IP核里面的单个变量,参考:VIVADO HLS Training - AXI Lite slave floating point #5
  • bram接口,bram是FPGA内部的ram,bram的地址映射到了指定地址空间供PS访问,相当于PS核PL之间的共享内存,参考:VIVADO HLS Training - BRAM interface #06
    注:实验发现单个数组的大小不能超过一个BRAM的大小,一个BRAM大小参考http://xilinx.eetrend.com/blog/2018/100016569.html
  • axi stream接口,数据流的形式,结合DMA实现,参考:VIVADO HLS Training AXI Stream interface #07
  • axi master接口,IP核可以直接访问PS的地址空间,使用axi master作为接口很方便,但是读写速度较慢,因为要经过AXI总线,参考:Creating a simple AXI-master interface for testing with Vivado HLS
  • 总结最便捷的做法:使用axi master作为PS和PL之间的接口,在IP核的内部将PS内部的数据拷贝一份到bram(即在HLS中声明的变量或者数组里面),然后处理bram中的数据,最后通过axi master接口写回到PS的内存空间,注意在xilinx sdk的代码中要在IP核的驱动函数前后都加上Xil_DCacheFlush()。

循环加速

  • pipline/全展开/部分展开
  • 循环加速后会使用更多的硬件资源,通过观察c synthesis的结果中的资源占用量的变化可以看出来。
  • pipeline可以针对函数,也可以针对循环/多层循环。注意,针对函数或者多层循环的pipeline deractive内部所有的子循环都要pipeline,所以先对每一个最内层的循环pipeline,然后依次向上层加pipeline,直到pipeline失效。

数组优化

reference: https://www.bilibili.com/video/BV1J5411t7uE?p=20

  • 数组分割,分割后各个子数组可以并行读写,打破内存墙的限制,提高并行度
  • 数组重组,通过合并数组,减少资源利用率
  • hls中声明为const的数据类型,会被存在ROM里面。
  • hls中声明为static的数据类型,会用memory实现。
  • 数组可以用bram或者lutram的资源,bram可以存下int[100000],lutram可以存下int[20000],但是使用lutram会有各种问题,所以建议使用bram;
  • 可以用#pragma HLS RESOURCE指定数组使用哪种资源
  • 在不同函数中声明的局部数组占用的空间不会释放,所以尽量不要使用局部的数组,临时使用的数组建议放在全局的buffer里面

算法模块

排序

  • 参考Leetcode堆排序,https://leetcode-cn.com/problems/sort-an-array/solution/pai-xu-shu-zu-by-leetcode-solution/
  • 双调排序,https://github.com/mmxsrup/bitonic-sort

其他

  • vivado hls会将c/c++的程序转化为fpga上的一个ip核,根据入口函数的输入和输出自动生成ip核的输入输出接口。
  • 注意在使用xlinx sdk调试程序的时候要勾选"debug cofigurations"里面的"reset entire system"。因为这个问题卡了两周!!
  • bram接口的数据类型最小是4个字节,不能用char数组,可以用int数组

debug记录

  • IP核不起作用的可能原因:1)在使用xlinx sdk的时候忘记勾选"debug cofigurations"里面的"reset entire system",2)IP核内部出现错误,比如数组越界等,可以通过获取ip核函数的return值来判断IP核内部是否发生错误。
  • 在使用stream数组作为fifo的时候,虽然形式上数组可以开得很大,但是必须连续访问fifo数组,否则即使编译没有报错,最后在FPGA上运行的时候也会出错。hls fifo的例子:https://github.com/medalotte/HLS-canny-edge-detection

vivado hls 笔记相关推荐

  1. Vivado HLS(High-level Synthesis)笔记一:HLS基本流程

    前言 实验室项目需要,需要将在服务器段跑出的网络参数配置到FPGA上,一种方法是直接利用verilog或者vhdl直接去写一个网络的前向传播模型,另一种就是用 C/C++ 来描述网络的前向传播模型,然 ...

  2. vivado hls(1)

    笔记 1.vivado  hls是fpga高级综合工具,可以将C语言转换成verilog代码,适合编写算法,但是要有硬件思想. 2.软核就是只要资源足够,就可以用逻辑打一个CPU出来,与硬核不一样,硬 ...

  3. VIVADO HLS 学习之路之图像的resize

    ** VIVADO HLS 学习之路之图像的resize ** 算下来接触vivado已经有半年了,学习fpga也满打满一年半了,零零碎碎的的笔记做过一些,但是记下了却没有复习,基本上等于没有.以后的 ...

  4. Vivado HLS error: Cannot find ISE in the PATH variable or it's an unsupported version

    在Vivado HLS中export rtl时选择pcores for edk并选中Evaluate VHDL,时会出现该错误,提示ISE找不到. 解决方案: 在path中添加ISE 和Vivado的 ...

  5. Vivado HLS基本应用

    Vivado HLS基本应用 1.双击Vivado HLS图标 2.创建工程可以,点快捷键或者从File->创建新工程 3.填写工程名和工程存放路径 3.添加主函数名,添加文件(如果有需要的话) ...

  6. 在vivado里用rtl描述_如何利用Vivado HLS处理许多位准确或任意精度数据类型

    我们在设计硬件时,它往往是要求更精确的位宽.例如,一个filter的输入是12位和一个累加器的结果只需要一个最大范围为27位.然而对于硬件设计来说,使用标准的C数据类型会造成硬件成本的浪费.这就会造成 ...

  7. 在vivado hls软件上打开zynqnet工程,Vivado HLS Command Prompt(Vivado HLS 命令提示符)是什么

    直接在HLS中使用open project 是无法打开这个zynqnet的,在看zynqnet的使用说明的时候,有这样一段话: 如果使用中文翻译过的话,看到的是这样一段文字: 对于平时使用HLS编写I ...

  8. Vivado HLS常用优化命令介绍

    HLS 简介 Xilinx Vivado HLS工具可以将用户使用C++编写的逻辑自动转化为硬件语言(如Verilog或VHDL语言)编写的RTL级硬件逻辑,目的是为了让软件工程师将算法快速部署在FP ...

  9. vivado hls 2019.1百度云安装包,包含license

    vivado hls 2019.1 链接:https://pan.baidu.com/s/1MgvUn6FpHv3SWbsSlX5ZCw 提取码:uyho 复制这段内容后打开百度网盘手机App,操作更 ...

  10. Vivado HLS 入门实验

    当我们安装好Vivado 的时候,也同时装好了Vivado HLS.. 这是个什么东西?我就有一种想一探究的感觉.网上一查,Vivado High-Level Synthesis.学习了一段时间的Zy ...

最新文章

  1. ORA-00845 : MEMORY_TARGET not supported on this system(调大数据库内存无法启动)
  2. 2017-2018-1 20155222 《信息安全系统设计基础》第8周学习总结
  3. 13.PHP中循环结构之foreach循环语句(任务一)
  4. Docker 运行的 应用程序无法连接Oracle数据库的解决办法
  5. maven依赖decoder_引入依赖maven打包报错
  6. set和multiset容器简介
  7. 《Cloud Native Infrastructure》CHAPTER 7 (1)
  8. 快搜浏览器_opera、Google、firefox三个浏览器的选择
  9. shell脚本实现检測回文字符串
  10. 服务行为 之 并发与实例化
  11. 我的世界中国版服务器无限夜视,我的世界服务器游戏技巧 无限夜视的方法
  12. 携程梁建章:要让元宇宙技术成为真宇宙探索、旅游的灵感来源
  13. openstack安装指南_6种管理OpenStack的新指南
  14. 生成对抗网络 GAN 基本原理与发展历程
  15. jmake 编译当前目录所有c/c++单文件
  16. 【往届期末试卷】2018届数据库原理与应用
  17. 线下娱乐“换血”,沉浸式体验会成为下一个10年的主题吗?
  18. 百度 bae php,利用百度BAE搭建免费CDN
  19. 智能电瓶车充电桩 ,电动车充电的安全利器
  20. c 截取字符串函数代码实现

热门文章

  1. 电脑无法从U盘启动的问题解决
  2. 六十星系之14廉贞贪狼坐巳亥
  3. 电脑双系统怎么删除一个呢?教你快速删除
  4. 矩阵转置行列式的运算规律
  5. Java项目经验之交易密码安全机制
  6. 台式计算机网络共享,教大家怎么把电脑网络共享给手机上网
  7. GrapeCity Documents for PDF[GcPDF]
  8. Directadmin清空所有Tickets命令
  9. html微信分享没有图片不显示,微信分享网页链接缩略图不显示解决方法
  10. 计算机科学对自然观的影响,浅谈自然辩证法对计算机科学研究的意义