0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

理解Vitis HLS默认行为

FPGA技术驿站 来源:FPGA技术驿站 作者:FPGA技术驿站 2022-11-24 11:42 次阅读

相比于VivadoHLS,Vitis HLS更加智能化,这体现在Vitis HLS可以自动探测C/C++代码中可并行执行地部分而无需人工干预添加pragma。另一方面VitisHLS也会根据用户添加的pragma来判断是否需要额外配置其他pragma以使用户pragma生效。为便于说明,我们来看一个简单的案例。

如下图所示代码,函数array_mult用于计算两个一维数组对应元素差的平方。数组长度为N,故通过N次for循环可完成此操作(这里N为8)。

2e5b5e28-6ba9-11ed-8abf-dac502259ad0.png

如果我们不添加任何pragma,从C综合后的报告来看,工具会自动对for循环添加PIPELINE,如下图所示。同时,工具会将数组映射为单端口RAM(因为数组是顶层函数的形参,故只生成单端口RAM需要的端口信号),这样匹配了DSP48的接口需求(两个输入数据一个输出数据)。从C/RTLCosim的波形可以看到输入/输出数据流关系。

2e6ae2d0-6ba9-11ed-8abf-dac502259ad0.png

2e84e446-6ba9-11ed-8abf-dac502259ad0.png

如果我们对for循环施加UNROLL,理论上分析可知工具应将for循环展开(复制8份),这样会消耗8个DSP48,如下图所示。这就需要能同时有16个数据提供给这8个DSP48,但此时工具只是将数组映射为双端口RAM。这显然造成了数据通路的不匹配。这其实造成了DSP48的浪费。这里,因为数组是顶层函数,故工具并没有对其施加ARRAY_PARTITION,但如果是子函数的形参,工具就会自动对数组施加ARRAY_PARTITION,以确保数据通路的匹配。

2ea73208-6ba9-11ed-8abf-dac502259ad0.png

因此,我们换个思路,既然工具至多会将数组映射为双端口RAM,那么我们就将for循环复制两份,从而实现数据通路的匹配。这可通过UNROLL的选项factor设置为2。从C综合报告来看,消耗了2个DSP48,同时工具对for循环自动设置了PIPELINE。

2ec17956-6ba9-11ed-8abf-dac502259ad0.png

2ee37c4a-6ba9-11ed-8abf-dac502259ad0.png

当然,我们也可以对整个函数施加PIPELINE,这样工具会将for循环自动UNROLL,但这同样会造成DSP48的浪费,因为工具不会对顶层函数的形参数组自动进行ARRAY_PARTITION。于是,我们考虑手工添加ARRAY_PARTITION,同时对函数添加PIPELINE,从而使得数据通路完美匹配。

2f0c9efe-6ba9-11ed-8abf-dac502259ad0.png

我们对这些Solution进行对比,如下图所示。solution1消耗资源最少,但Latency最大;solution5消耗资源最多,但Latency最小。

solution1:仅对for循环施加pipeline。

solution2:仅对for循环施加UNROLL。

solution3:仅对for循环施加UNROLL并将factor设置为2。

solution4:仅对函数施加PIPELINE。

solution5:对函数施加PIPELINE,对输入/输出数组施加ARRAY_PARTITION(Complete)。

2f2bcb44-6ba9-11ed-8abf-dac502259ad0.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4303

    浏览量

    62411
  • C++
    C++
    +关注

    关注

    22

    文章

    2104

    浏览量

    73480
  • HLS
    HLS
    +关注

    关注

    1

    文章

    128

    浏览量

    24025
  • Vitis
    +关注

    关注

    0

    文章

    145

    浏览量

    7400

原文标题:理解Vitis HLS默认行为

文章出处:【微信号:Lauren_FPGA,微信公众号:FPGA技术驿站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA高层次综合HLSVitis HLS知识库简析

    ,Vivado 2019.1之前(包括),HLS工具叫Vivado HLS,之后为了统一将HLS集成到Vitis里了,集成之后增加了一些功能,同时将这部分开源出来了。
    发表于 09-07 15:21

    使用Vitis HLS创建属于自己的IP相关资料分享

    1、使用Vitis HLS创建属于自己的IP高层次综合(High-level Synthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。对于AMD
    发表于 09-09 16:45

    Vivado HLSVitis HLS 两者之间有什么区别

    Vitis HLS下,一个Solution的Flow Target可以是Vivado IP Flow Target,也可以是VitisKernel Flow Target,如下图所示。前者最终导出来
    的头像 发表于 11-05 17:43 3.9w次阅读

    Vitis初探—1.将设计从SDSoC/Vivado HLS迁移到Vitis上的教程

    本文介绍如何一步一步将设计从SDSoC/Vivado HLS迁移到Vitis平台。
    的头像 发表于 07-25 17:45 3780次阅读
    <b class='flag-5'>Vitis</b>初探—1.将设计从SDSoC/Vivado <b class='flag-5'>HLS</b>迁移到<b class='flag-5'>Vitis</b>上的教程

    Vitis初探—1.将设计从SDSoC/Vivado HLS迁移到Vitis

    本文介绍如何一步一步将设计从SDSoC/Vivado HLS迁移到Vitis平台。
    发表于 01-31 08:12 8次下载
    <b class='flag-5'>Vitis</b>初探—1.将设计从SDSoC/Vivado <b class='flag-5'>HLS</b>迁移到<b class='flag-5'>Vitis</b>上

    基于Vitis HLS的加速图像处理

    使用Vivado / Vitis工具提供预安装的OpenCV版本。尽管Vitis_hls编译Vision库不需要OpenCV,但是用户测试验证使用时OpenCV。
    的头像 发表于 02-16 16:21 2404次阅读
    基于<b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>的加速图像处理

    Vitis HLS工具简介及设计流程

    Vitis HLS 是一种高层次综合工具,支持将 C、C++ 和 OpenCL 函数硬连线到器件逻辑互连结构和 RAM/DSP 块上。Vitis HLS 可在
    的头像 发表于 05-25 09:43 2325次阅读

    Vitis HLS如何添加HLS导出的.xo文件

    HLS导出的.xo文件如何导入到Vitis里面?需要把.xo文件解压,然后把文件夹导入到Vitis Kernel/src文件夹下吗?
    的头像 发表于 08-03 11:20 3035次阅读
    <b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>如何添加<b class='flag-5'>HLS</b>导出的.xo文件

    Vitis HLS前端现已全面开源

    Vitis HLS 工具能够将 C++ 和 OpenCL 功能部署到器件的逻辑结构和 RAM/DSP 块上。在 GitHub 上提供 Vitis HLS 前端为研究人员、开发人员和编译
    的头像 发表于 08-03 09:53 922次阅读

    Vitis HLS知识库总结

    对于AMD Xilinx而言,Vivado 2019.1之前(包括),HLS工具叫Vivado HLS,之后为了统一将HLS集成到Vitis里了,集成之后增加了一些功能,同时将这部分开
    的头像 发表于 09-02 09:06 3422次阅读

    HLS最全知识库

    对于AMD Xilinx而言,Vivado 2019.1之前(包括),HLS工具叫Vivado HLS,之后为了统一将HLS集成到Vitis里了,集成之后增加了一些功能,同时将这部分开
    的头像 发表于 01-15 11:27 2542次阅读

    AMD全新Vitis HLS资源现已推出

    AMD Vitis HLS 工具允许用户通过将 C/C++ 函数综合成 RTL,轻松创建复杂的 FPGA 算法。Vitis HLS 工具与 Vivado Design Suite(用于
    的头像 发表于 04-23 10:41 1071次阅读
    AMD全新<b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>资源现已推出

    如何在Vitis HLS GUI中使用库函数?

    VitisHLS 2023.1 支持新的 L1 库向导,本文将讲解如何下载 L1 库、查看所有可用功能以及如何在 Vitis HLS GUI 中使用库函数。
    的头像 发表于 08-16 10:26 1151次阅读
    如何在<b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b> GUI中使用库函数?

    Vitis HLS:使用任务级并行性的高性能设计

    电子发烧友网站提供《Vitis HLS:使用任务级并行性的高性能设计.pdf》资料免费下载
    发表于 09-13 17:21 0次下载
    <b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>:使用任务级并行性的高性能设计

    Vitis HLS移植指南

    电子发烧友网站提供《Vitis HLS移植指南.pdf》资料免费下载
    发表于 09-13 09:21 0次下载
    <b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>移植指南