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.mfbz.cn/a/673694.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MaxKey本地运行实战指南

MaxKey 本地运行总结 概述开发环境准备 主页传送门 : 📀 传送 概述 MaxKey单点登录认证系统,谐音为马克思的钥匙寓意是最大钥匙,是业界领先的IAM-IDaas身份管理和认证产品;支持OAuth 2.x/OpenID Connect、SAML 2.0、J…

Layui2.5.6树形表格TreeTable使用

1、问题概述? Layui2.5.6的树形表格-TreeTable终于用明白了,步骤详细,提供源码下载。 如果你使用的是Layui2.8+版本,那么点个赞,赶紧去官网看吧,官网更行了。 更新地址:树表组件 treeTable - Layui 文档 最近在项目中需要使用到树形表格,用来显示菜单的层级关系,当…

集成Google Authenticator实现多因素认证(MFA)

目录 参考1、应用背景2、多因素认证3、谷歌google authenticator集成用法3.1、原理3.2、 MFA绑定3.2.1、 用户输入用户名密码登录3.2.2、检查是否已经绑定MFA(检查数据库是否保存该用户的google secret)3.2.3、谷歌身份证认证器扫描绑定3.2.4、手动测试验…

016、集合_命令

集合(set)保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素。如图集合user:1:follow包含着"it"、“music”、“his”、"sports"四个元素,一个集合最多可以存储2(32)-1个元…

基于web的网上村委会业务办理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,基础数据管理,办事记录管理,办事申请管理,党员发展管理 前台账户功能包括:系统首页,个人中心,补贴活动通知…

14.1 Go语言代码格式、gofmt工具、配置编辑器、命名约定

1. Go语言代码格式 代码格式指的是在语法正确的前提下,源代码的书写和组织风格。比如什么时候缩进,什么时候换行,什么时候加空格,表示块边界的花括号是跟上一行放在一起还是自己独占一行等等。这些看似无关紧要的细节其实问题颇多…

LabVIEW齿轮调制故障检测系统

LabVIEW齿轮调制故障检测系统 概述 开发了一种基于LabVIEW平台的齿轮调制故障检测系统,实现齿轮在恶劣工作条件下的故障振动信号的实时在线检测。系统利用LabVIEW的强大图形编程能力,结合Hilbert包络解调技术,对齿轮的振动信号进行精确分析…

Vector - CAPL - XCP介绍_04

目录 xcpGetCalPage & OnXcpGetCalPage xcpUpload & OnXcpUoad 代码示例 xcpSendRaw & OnXcpSendRaw 代码示例 xcpGetCalPage & OnXcpGetCalPage 功能:如果XCP从设备支持校准数据页面切换,则该命令获取当前页面和访问模式。 回调返回…

数据在计算机内的表示和存储

目录 一.C语言中强制类型转换 二.数据的存储方式 1.大小端模式 2.边界对齐 一.C语言中强制类型转换 1.无符号数与有符号数:不改变数据内容,只是改变了计算机的解释方式 例如下图,短整型转为无符号短整型再赋值给y,yx1110 11…

打靶笔记w1r3s.v1.0

打靶笔记w1r3s.v1.0 nmap扫描与分析 主机发现 nmap -sn 192.168.218.0/24 历史版本为-sP(已经被放弃) n 不进行端口扫描192.168.218.155 创建文件夹保存端口信息 指定最低1万速率扫描所有端口 nmap -sT --min-rate 10000 -p- 192.168.218.155 nmapscan/ports-sS SYN扫描是快…

ubuntu安装notion

一、背景: 不用windwos系统,完全可以,然后基本软件都有,怎么安装notion呢 二、步骤 1. 更新源 echo "deb [trustedyes] https://apt.fury.io/notion-repackaged/ /" | sudo tee /etc/apt/sources.list.d/notion-repa…

【一小时学会Charles抓包详细教程】Charles移动端APP抓包之iOS手机端数据提取实战篇 (8)

🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 Charles 移动端…

详解C/C++动态内存函数(malloc、free、calloc、realloc)

1. malloc和free 为解决静态内存开辟存在的问题,C语言提供了一个动态内存开辟的函数: malloc为memory allocation的简写,意为内存分配。 这个函数的作用是向内存申请一块连续可用的空间,并返回指向这块空间的指针。 比如&#xf…

Adversarial Nibbler挑战:与多元社区持续开展开放红队测试

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【MySQL数据库】MySQL 高可用搭建方案——MHA实战

MHA(Master High Availability) MHA实战 MHA(Master High Availability) 一、MHA简介二、MHA搭建准备要求:mha集群搭建,4台服务器,1主2从,1台mha2.1实验思路2.2实验准备 三、搭建MyS…

【数据结构】链式二叉树详解

个人主页~ 链式二叉树基本内容~ 链式二叉树详解 1、通过前序遍历的数组来构建二叉树2、二叉树的销毁3、二叉树节点个数4、二叉树叶子节点个数5、二叉树第k层节点个数6、二叉树查找7、前序遍历8、中序遍历9、后序遍历10、层序遍历与检查二叉树是否为完全二叉树Queue.hQueue.c层序…

Nginx实战:防盗链

防盗链的概念 内容不在自己的服务器上,通过技术手段将其他网站的内容(比如 一些音乐、图片、软件的下载地址)放置在自己的网站中,通过这 种方法盗取其他网站的空间和流量 防盗链技术背景 防止第三方引用链接访问我们的图片&#x…

FJSP:蛇鹫优化算法(SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

详细介绍 FJSP:蛇鹫优化算法(Secretary bird optimization algorithm,SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码-CSDN博客 完整MATLAB代码 FJSP:蛇鹫优化算法&#xff…

SQL实验 连接查询和嵌套查询

一、实验目的 1.掌握Management Studio的使用。 2.掌握SQL中连接查询和嵌套查询的使用。 二、实验内容及要求(请同学们尝试每道题使用连接和嵌套两种方式来进行查询,如果可以的话) 1.找出所有任教“数据…

十_信号7-信号集

int sigemptyset(sigset_t *set); 清空信号集 int sigfillset(sigset_t *set); 填充满 信号集 int sigaddset(sigset_t *set, int signum); 向信号集中添加信号 int sigdelset(sigset_t *set, int signum); 从型号集中删除信号 int sigismember(const sigset_t *set, int s…