Vitis HLS 学习笔记--HLS流水线类型

目录

1. 简介

2. 优缺点对比

2.1 Stalled Pipeline

2.2 Free-Running/Flushable Pipeline

2.3 Flushable Pipeline

3. 设置方法

4. FRP的特殊优势

5. 总结


1. 简介

Vitis HLS 会自动选择正确的流水线样式,用于流水打拍函数或循环。

停滞的流水线(STP, Stalled Pipeline)

  • 只要在流水线输入端数据可用,流水线就会持续执行。如果没有可供处理的数据,流水线就会停滞。
  • 无使用约束。通常总体资源利用率最低。
  • 可能出现死锁。
  • 可能扇出过高导致序问题。

可刷新的流水线(FLP, Flushable Pipeline)

  • 如果没有新输入可用(由流水线起始位置的数据 valid 信号来判定),流水线就会停止读取,但仍会继续处理并关闭后续每个流水线阶段,直至最终输入已处理至流水线输出为止。

自由运行/可刷新的流水线(FRP, Free-Running/Flushable Pipeline)

  • 只能从数据流区域调用。
  • 时序更好,扇出更少,流水线控制逻辑更简单。
  • 由于输出上添加的 FIFO,资源增加量中等。

2. 优缺点对比

2.1 Stalled Pipeline

即停滞的流水线,简写为STP。

使用场景:

  • 流水线控制上不存在因扇出过高而导致的时序问题
  • 无需可刷新流水线(如不存在因停滞而导致的性能或死锁问题)

#pragma HLS pipeline style=stp

优点:

  • 通常情况下,总体资源消耗最低。

缺点:

  • 导致数据流中出现更多死锁
  • 如果缺少下一次迭代的输入,则会阻止交付计算所得的输出
  • 由于流水线控制上扇出过高导致时序问题

2.2 Free-Running/Flushable Pipeline

即自由运行/可刷新的流水线,缩写为FRP。

使用场景:

  • 需要更好的时序(从流水线控制到寄存器使能的扇出)。
  • 需要更好的性能或避免死锁
  • 只能从数据流区域(dataflow)调用。

优点:

  • 时序更好(扇出更少,流水线控制逻辑更简单)。
  • 可刷新。

缺点:

  • 由于输出上添加的 FIFO,资源增加量中等。
  • 需至少一个阻塞 I/O(串流或 ap_hs)。
  • 并非所有流水打拍场景和I/O 类型都受支持。

2.3 Flushable Pipeline

可刷新的流水线,FLP, Flushable Pipeline

使用场景:

  • 需要更好的性能或避免死锁

优点:

  • ​​​​​​​可刷新

缺点:

  • 可采用较大的 II
  • 由于 II>1 时共享更少,资源利用率更大

 

3. 设置方法

可以通过 GUI 界面,配置默认的流水线风格:

也可以通过编译指示/指令进行配置:

#pragma HLS pipeline style=stp
#pragma HLS pipeline style=frp
#pragma HLS pipeline style=flp

 

4. FRP的特殊优势

在硬件设计中,标准流水线(STP和FLP类型)使用特定的逻辑来处理数据。这些流水线会使用阻塞信号来控制数据的流动,就像交通信号灯一样。但是,这些信号有时会导致问题,因为它们需要连接到很多其他部分(高扇出),这在复杂的设计中会导致时序问题,而且这些问题不容易在设计的后期修复。

为了解决这个问题,HLS 引入了一种新的流水线设计,称为自由运行的流水线(FRP)。这种设计的好处包括:

  • 消除了阻塞信号:它不再需要那些可能导致问题的阻塞信号。
  • 可刷新性:如果数据传输无效,它可以创建“气泡”来清除这些数据,保持流水线的流畅。
  • 减少了扇出:与以前的设计相比,它减少了需要连接的部分数量。
  • 独立于优化:它不依赖于后期的综合或布局优化来解决问题。
  • 有利于布局和布线(PnR):它的结构设计有助于缩短连线长度,减少复杂性。

但是,这种设计也有一些代价:

  • 增加资源使用:为了处理阻塞,需要更大的FIFO缓冲器。
  • 延迟:阻塞输出端口上的多路复用器会增加延迟。
  • 可能影响性能:由于提前确认正压触发器,可能会影响整体性能。

最后,一个重要的提示:自由运行的流水线(FRP)只能在数据流区域内部使用,不能用于顺序区域或流水打拍区域内的循环。

5. 总结

在Vitis HLS中,流水线设计对于硬件性能至关重要。停滞的流水线(STP)在数据可用时持续执行,但可能导致死锁和时序问题。可刷新的流水线(FLP)则在没有新输入时停止读取,但会继续处理,避免了死锁,但可能需要更大的迭代间隔(II)。自由运行的流水线(FRP)提供了一种高效的解决方案,它通过减少扇出和简化控制逻辑来改善时序,同时允许流水线在无效数据传输时自我清理。尽管FRP增加了资源使用并可能引入延迟,但它的结构有利于布局和布线,减少了连线长度和复杂性。重要的是,FRP只适用于数据流区域,不适用于顺序区域或流水打拍区域的循环。这些流水线样式的选择和应用对于优化硬件设计的性能和资源利用率至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8S SWCK SkyWalking全链路跟踪工具安装

官方参考:如何使用java探针注入器? 配置两个demo,建立调用关系, 首先创建一个基础镜像dockerfile from centos 先安装java 参考: linux rpm方式安装java JAVA_HOME/usr/java/jdk1.8.0-x64 CLASSPATH.:$JAVA_HOME/lib/tools.jar PATH…

了解Maven,并配置国内源

目录 1.了解Maven 1.1什么是Maven 1.2快速创建一个Maven项⽬ 1.3Maven 核⼼功能 1.3.1项⽬构建 1.3.2依赖管理 1.4Maven Help插件 2.Maven 仓库 2.1中央仓库 2.2本地仓库 3.Maven 设置国内源 1.查看配置⽂件的地址 2.配置国内源 3.设置新项⽬的setting 1.了解Ma…

Hive安装-内嵌模式

1.官网下在hive3.1.2版本 Index of /dist/hive/hive-3.1.2 2.上传到master节点的/opt/software目录下 3.解压到/opt/module目录下 tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/ 检查解压后文件 4.修改名字 改为hive cd /opt/module mv apache-hive-3.1.2-bin…

期权的时间价值是什么?和期权内在价值有啥不同?

今天带你了解期权的时间价值是什么?和期权内在价值有啥不同?期权的内在价值,是指期权立即执行产生的经济价值。 期权的时间价值是什么? 期权的时间价值是期权价格的一个重要组成部分,也被称为期权的外在价值。它是指期…

【再探】设计模式—备忘录模式与解释器模式

备忘录模式是用于保存对象在某个时刻的状态,来实现撤销操作。而解释器模式则是将文本按照定义的文法规则解析成对应的命令。 1 备忘录模式 需求:保存对象在某个时刻的状态,后面可以对该对象实行撤销操作。 1.1 备忘录模式介绍 提供一种状…

RK3568笔记二十九:RTMP推流

若该文为原创文章,转载请注明原文出处。 基于RK3568的RTMP推流测试,此代码是基于勇哥的github代码修改的,源码地址MontaukLaw/3568_rknn_rtmp: rk3568的推理推流 (github.com) 感兴趣的可以clone下来测试。 也可以下载修改后的代码测试。Y…

普华永道信任危机:上市公司解约风波与反思

在全球会计业界的星空中,普华永道无疑是那颗最为耀眼的星之一。然而,近日这颗星却遭遇了前所未有的信任危机。这家大名鼎鼎的四大会计师事务所之一,近期陷入了上市公司解约的风波之中,其声誉与地位正面临严峻挑战。 就在昨晚&…

Vivado的两种下载安装方式:Webpack下载与安装、本地文件安装详细步骤讲解

目录 1.前言2. Vivado Webpack下载、安装3.本地文件下载安装 微信公众号获取更多FPGA相关源码: 1.前言 本人自本科大二开始接触FPGA相关知识,现已将近六年,由于一直在上学,也不是一直在搞FPGA,但是也完成过一些项目…

【学习】企业如何选择一个合适的DCMM咨询机构

DCMM是我国首个数据管理领域正式发布的国家标准。旨在帮助企业利用先进的数据管理理念和方法,建立和评价自身数据管理能力,持续完善数据管理组织、程序和制度,充分发挥数据在促进企业向信息化、数字化、智能化发展方面的价值。该标准借鉴了国…

数据仓库核心:维度表设计的艺术与实践

文章目录 1. 引言1.1基本概念1.2 维度表定义 2. 设计方法2.1 选择或新建维度2.2 确定维度主维表2.3 确定相关维表2.14 确定维度属性 3. 维度的层次结构3.1 举个例子3.2 什么是数据钻取?3.3 常见的维度层次结构 4. 高级维度策略4.1 维度整合维度整合:构建…

IDEA 学习之 疑难杂症系列

IDEA 学习之 疑难杂症系列 1. Mapstruct 编译空指针问题 1.1. 现象 NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifest1.2. 原因 MapStruct 在 IDEA 2020.3 版本编译 NPE 问题 1.3. 解决办法 2. IDEA 学习之 编译内…

python列表的进阶

小结: # 列表的删除小结: # 删除列表的最后一列 punished students.pop() print(被罚站的人是: punished ,同学们引以为戒。)# 根据下标删除 del students[0]#根据名称删除 students.remove(王熙凤)在今天的课程里&#xff0c…

绿联 安装SeaTable在线协同表格

绿联 安装SeaTable在线协同表格 1、镜像 seatable/seatable-developer:latest 2、安装 2.1、基础设置 重启策略:容器退出时总是重启容器。 2.2、网络 网络选择桥接(bridge)。 2.3、存储空间 装载路径/shared不可变更。 2.4、端口设置 容器端口固定80&#x…

Unity动画系统介绍

Unity动画系统介绍 Animator组件: 这是Unity中用于控制动画状态的组件,它与Animator Controller一起工作,可以基于游戏逻辑来切换不同的动画状态。 Animator Controller: 这是一个用于管理动画状态机的组件,它允许…

Leetcode:回文数

题目链接&#xff1a;9. 回文数 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;字符串双指针&#xff09; 1、x为负数时永远不可能为回文数 2、x为个位数时不可能是回文数 class Solution { public:bool isPalindrome(int x) {if(x<0||(x%100 &&…

音视频开发—V4L2介绍,FFmpeg 打开摄像头输出yuv文件

实验平台&#xff1a;Ubuntu20.04 摄像头&#xff1a;1080P 监控摄像头&#xff0c;采用V4L2驱动框架 文章目录 1.V4L2相关介绍1.1. 基本概念1.2. 主要功能1.3. V4L2驱动框架1.4. 主要组件1.5. 使用V4L2的应用1.6. 常用V4L2工具 2.ffmpeg命令实现打开摄像头输出yuv文件3.使用C…

ssm整合(spring+springmvc+mybatis)做一个小项目(SpringMVC学习笔记六)

一、mybatis层 1、搭建数据库&#xff1a; //创建数据库 CREATE DATABASE ssmbuild; //选择数据库 USE ssmbuild//检查如果数据库中有books这个表的话就给他删除 DROP TABLE IF EXISTS books//创建表books CREATE TABLE books( bookID INT(10) NOT NULL AUTO_INCREMENT COMME…

二叉树链式结构的实现

1.创建二叉树 (1)创建结构体 typedef int BTDataType;typedef struct BinaryTreeNode {BTDataType _data;struct BinaryTreeNode* _left;struct BinaryTreeNode* _right; }BTNode;(2)根据前序遍历构建树 //通过前序遍历的数组"123##45##6##"构建二叉树 BTNode* Bi…

docker以挂载目录启动容器报错问题的解决

拉取镜像&#xff1a; docker pull elasticsearch:7.4.2 docker pull kibana:7.4.2 创建实例&#xff1a; mkdir -p /mydata/elasticsearch/configmkdir -p /mydata/elasticsearch/dataecho "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasti…

vs2019 c++20 规范 STL库中关于时间的模板 ratio<T,U> , duration<T,U> , time_point<T,U>等

(探讨一)在学习线程的时候&#xff0c;一些函数会让线程等待或睡眠一段时间。函数形参是时间单位&#xff0c;那么在 c 中是如何记录和表示时间的呢&#xff1f;以下给出模板简图&#xff1a; &#xff08;2 探讨二&#xff09;接着给出对模板类 duration_values 的成员函数的测…