【LabVIEW FPGA入门】单周期定时循环

news2024/11/22 6:23:03

单周期定时循环详解        

        单周期定时环路是FPGA编程中最强大的结构之一。单周期定时循环中的代码更加优化,在FPGA上占用更少的空间,并且比标准While循环中的相同代码执行得更快。单周期定时环路将使能链从环路中移除,以节省FPGA上的空间。由于删除了额外的使能链寄存器,因此单周期定时环路中的所有操作都可以在单个时钟周期内完成。此外,消除使能链开销减少了FPGA上使用的总空间,因为不再需要用于使能链的触发器。单周期定时环路是安全关键和控制应用的重要工具,其中快速环路速率很重要 

        LabVIEW自动优化单周期定时循环(SCTL)内的代码。与While循环内的相同代码相比,SCTL内的代码执行更快,占用FPGA终端资源更少。在FPGA终端上使用While循环时,While循环每执行一次需要占用多个时钟周期,While循环包含启用链寄存器。While循环每次执行需要占用的时钟周期的数量取决于循环内的代码。在FPGA终端上使用单周期定时循环时,单周期定时循环将在一个时钟周期内执行完循环内的所有代码。在FPGA目标上使用单周期定时循环减少了执行周期和资源占用,因为单周期定时循环不包括启用链寄存器。如果单周期定时循环包含已初始化的移位寄存器,循环第一次执行前占用一个时钟周期,以初始化移位寄存器的值。单周期定时循环类似于HDL中的定时进程。

        下列图示展示了执行相同代码的While循环和单周期定时循环之间的区别。

 

        下面列出了上述程序框图的要点。

1378

执行While循环内的代码需要四个时钟周期,不包括While循环占用的两个时间周期作为额外开销时间。

1378

红色垂直线表示每个时钟周期内While循环执行的结束位置。

1378

如时钟周期对于代码而言足够长,同样的代码放在单周期定时循环内,可以在一个时钟周期内执行完毕。

        您也可使用单周期定时循环减少FPGA VI中的执行周期,以优化代码。如下图所示。

1378

        如上图所示,如果在While循环中使用单周期定时循环,则将TRUE常量连接到条件接线端,使得定时循环内的代码在While循环的每个周期执行一次。

        下图显示了使用 SCTL 在一个时钟周期内执行一些数据处理的示例。 While 循环中的相同操作需要大约 7 个时钟周期,包括 While 循环的开销。 

        FPGA模块单周期定时环路与标准LabVIEW定时环路的不同之处在于FPGA定时环路的时序与您指定的FPGA时钟的时钟速率完全对应。通过配置单周期定时环路使用FPGA目标基时钟以外的时钟,可以在FPGA VI中实现多个时钟域。您可以通过在单周期定时环路的输入节点(input Node)的输入源名称(Source Name)上连接一个值或在“配置定时环路”对话框中指定控制单周期定时环路的FPGA时钟。

        运行在基于windows或实时目标上的VI中的定时循环将在指定的周期内依次执行一个或多个子图或帧。相比之下,FPGA VI中的单周期定时环路在与FPGA时钟相同的周期内执行一个子图。当您希望开发具有多速率计时功能、精确计时、循环执行反馈、动态变化的计时特性或多个执行优先级级别的VIs时,请使用单周期Timed Loop。右键单击结构边框以添加、删除、插入和合并框架。

FPGA时钟

基本时钟

        是硬件中存在的数字信号,可以用作FPGA应用程序的时钟。

        FPGA目标可以支持多个基本时钟,尽管一些目标在添加目标时只向Project Explorer窗口添加受支持的基本时钟的子集。如果您使用的FPGA目标在将目标添加到LabVIEW项目时不包括项目浏览器窗口中所需的FPGA基本时钟,则可以向LabVIEW项目添加新的基本时钟。

 衍生时钟

        是您从基本时钟创建的时钟,您可以将其用作FPGA应用程序的时钟。您可以在LabVIEW项目中从FPGA基本时钟派生额外的时钟。

        如果FPGA目标不支持FPGA派生时钟或您添加的FPGA基本时钟,则快捷菜单中的新FPGA派生时钟选项将变暗。

 顶层时钟

        您可以在Project Explorer窗口中为FPGA目标定义顶级时钟。顶层时钟是FPGA VI在单周期定时循环之外使用的时钟。FPGA目标默认使用FPGA基时钟之一。如果FPGA目标允许,可以配置FPGA基时钟,并将其设置为项目中的顶级时钟,以控制执行速率。如果FPGA目标不允许您以您想要的方式配置FPGA基本时钟,则可以使用派生时钟。对FPGA派生时钟的支持因FPGA目标而异。有关更多信息,请参阅特定的FPGA目标硬件文档。

        单周期Timed Loop内的代码以基本时钟或派生时钟速率执行,具体取决于使用哪个时钟作为源。顶层时钟控制单周期定时循环之外代码的执行速率。

        每个FPGA目标提供至少一个时钟来控制FPGA的内部操作。FPGA目标时钟确定FPGA VI框图上单个VI和功能的执行时间。您可以编译具有更快时钟速率的FPGA vi,以获得更高的性能。

        然而,并不是所有的FPGA VIs都可以在更快的时钟速率下正常编译。如果您选择的时钟速率对于FPGA VI来说太快了,编译状态窗口会通知您编译失败。您必须选择较低的时钟频率,然后再次尝试编译。

        在“项目资源管理器”窗口中右键单击FPGA目标,在弹出的快捷菜单中选择“属性”,可以更改FPGA目标的顶层FPGA目标时钟速率。在“FPGA Target属性”对话框的“顶层时钟”页面中,可以设置顶层时钟。您还可以通过双击输入节点并在配置定时环路对话框中选择时钟速率来更改FPGA VI内单周期定时环路的时钟速率。

        您可以选择FPGA目标顶级时钟或从FPGA目标基本时钟派生的时钟。

        如果在FPGAVI中更改顶层FPGA目标时钟速率或单周期定时环路时钟速率,则必须重新编译FPGAVI

 单周期定时循环FAQ:      

什么是单周期定时循环?
         (SCTL)是LabVIEW定时循环结构的一种特殊用途。在FPGA VI中使用时,定时循环结构始终是SCTL。当与FPGA终端一起使用时,此循环将在您选择的FPGA时钟的一个时钟滴答内执行所有函数。默认时钟是40 MHz的 FPGA全局时钟。您可以将SCTL与派生时钟一起使用,以40 MHz以外的速率为循环提供时钟。在与FPGA终端一起使用时,无法动态更改定时循环的时序属性。

程序使用SCTL执行的速度有多快?
        在FPGA VI中使用传统的While循环至少需要3个滴答才能执行每次迭代。这是因为在编译的FPGA VI中使用了启用链。对启用链的解释超出了本文档的范围,其用于确保将FPGA VI编译为位文件时的数据流进行传递。

        此外,尽管如果没有数据依赖性,函数并行执行,While循环内的每个函数都需要至少执行一个tick。使用SCTL,循环内的所有函数必须在单个时钟滴答内执行。

        在FPGA VI中使用SCTL的性能优势将根据循环中的内容而有所不同。如果您的代码可以在SCTL中成功编译而不是正常循环,您代码的运行性能显着提高。

SCTL 是否更有效利用 FPGA 资源?
        是。由于您的逻辑是在硬件中组合实现的,因此代码生成的FPGA配置使用的资源更少。 SCTL不会进行添加、保存结果,然后相乘、保存结果,而是在一个时钟滴答中完成,而不必在两者之间保存结果。这节省了FPGA资源,因为在操作之间不需要触发器来保存每个先前操作的结果。

在SCTL内部可以使用所有函数和结构吗?
        否。超过一个时钟滴答的函数,例如模拟I / O函数或任何等待的函数都无法在SCTL内部使用。此外,如果循环内部有一个逻辑链,执行时间超过一个时钟滴答,则该逻辑不能在SCTL内部使用,并且VI将无法编译。

        序列结构可以放在SCTL中,但在FPGA上执行之前将从代码中删除。

  有一个不能在SCTL中使用的功能列表。有关各个VI的SCTL支持和定时信息的更多信息,请参见LabVIEW帮助。

  • 模拟周期测量VI
  • 巴特沃斯滤波器VI
  • 离散延迟VI
  • 导数函数
  • FIFO清除函数
  • FPGA I / O方法节点,除了一些FPGA目标
  • FPGA I / O属性节点,除了一些FPGA目标
  • 中断VI
  • 1维查找表 VI,选中Interpolate data复选框
  • 循环定时器VI
  • 如果至少一个节点在循环内同时至少一个节点在循环外部,则为同一I / O资源配置多个FPGA I / O节点
  • 如果您使用多个实例,则不可重入的子VI
  • 陷波滤波器VI
  • PID VI
  • 商和余数
  • 自反函数
  • 1D数组转置函数
  • 正弦波发生器VI
  • 单精度浮点运算
  • 平方根函数
  • 定时循环
  • 等待Express VI
  • 等待发生函数
  • while循环


我可以使用流水线技术在SCTL内部执行更多逻辑吗?
        是。您可以使用移位寄存器或反馈节点来实现逻辑并行执行,并在SCTL的连续迭代之间传递数据;因此,整个逻辑链在多个SCTL迭代上执行。与FPGA VI中的任何并行实现一样,这使用额外的FPGA资源。

如果SCTL中的逻辑无法在一个滴答中执行,会报错吗?
        是的,虽然在尝试编译FPGA VI之前,LabVIEW通常不会报告与时序相关的错误。编译中有两个不同的点,您可能会遇到与SCTL相关的错误。首先,当LabVIEW FPGA尝试将VI编译为VHDL代码(生成中间文件)时,如果在SCTL中使用了任何不受支持的函数(例如,商和余数),则会收到错误对话框。此框出现只需几秒钟(完整的VHDL编译过程不会开始)。

        即使您在SCTL中避免使用不受支持的函数,如果SCTL包含足够的逻辑,使得循环仍无法在单个时钟周期内执行,则编译将因定时违规而失败。在Xilinx工具的实际编译期间会发生此类错误,并且可能会在编译中停留几分钟(或更长时间)。如果遇到这样的错误,请尝试减少SCTL中的逻辑或修改算法以允许VI成功编译。

SCTL是一项高级功能吗?
        是。虽然某些任务可以在SCTL中非常简单地实现,但有些任务可能比较困难。例如,如果使用SCTL,则无法使用等待函数来实现高速数字协议。您必须使用状态机,以便循环的每次迭代只需要一次滴答。 SCTL为需要它的应用程序提供了速度和效率,但使用起来可能很棘手。在某些情况下,使用传统的While循环可能更合适。

我可以使用更快的全局时钟SCTL吗?
        是的,但是在80 MHz或更高频率下编译的SCTL中可以执行的功能更少。

SCTL可以嵌套While循环吗?

         单周期定时循环不能嵌套在其他单周期定时循环中。删除嵌套循环或将顶层循环替换为普通的 While 循环。

什么是组合路径错误?

        组合路径是 FPGA 上一个寄存器的输出与另一个寄存器的输入之间的逻辑路径。 寄存器将数据存储在FPGA上并在时钟的上升沿更新数据。 长组合路径需要更多时间来执行并限制时钟域的最大时钟速率。

        长组合路径通常是单周期定时循环中的一个问题,因为输入寄存器和输出寄存器之间的逻辑必须在您指定的时钟速率的一个周期内执行。 在单周期定时循环中,组件内部和组件之间的寄存器被移除,从而增加了寄存器之间的组合路径的长度。 如果组合路径中的代码未在一个时钟周期内执行,LabVIEW将在编译失败对话框中返回时序违规。

        注意 深度嵌套的 Case 结构也会导致 LabVIEW 在编译失败对话框中返回时序违规。

        要减少组合路径的长度,首先要尽可能简化逻辑。 将逻辑简化为最简单的形式后,您可以通过将逻辑划分为离散步骤并对设计进行流水线化来进一步缩短组合路径的长度。 

       

       

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

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

相关文章

491.非递减子序列

这是一个Java程序&#xff0c;实现了一个名为Solution的类&#xff0c;该类用于查找给定整数数组中所有严格递增子序列。以下是代码的逐行注释&#xff1a; // 定义一个解决方案类 class Solution {// 初始化结果集&#xff0c;用于存储满足条件的所有严格递增子序列List<L…

第七节:Vben Admin权限-后端获取路由和菜单

系列文章目录 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 第三节:Vben Admin登录对接后端login接口 第四节:Vben Admin登录对接后端getUserInfo接口 第五节:Vben Admin权限-前端控制方式 第六节:Vben Admin权限-后端控制方式 第七节…

nginx做静态代理方式

改配置文件 server {listen 8899;server_name localhost;location / {root html;index index.html index.htm;} } 生成页面代码 例子 GetMapping("createIndex")public Result createIndex() {//获取后台存储数据Result result productFeignClient.getB…

5G与SD-WAN的结合为企业网络注入新活力

5G作为SD-WAN的基础网络&#xff0c;具备超大带宽、超低延迟、海量连接能力&#xff0c;为企业各类业务场景提供了理想的支持&#xff0c;尤其对于对时延极为敏感的工业控制、互动应用、高带宽视频、大规模物联网应用等有着显著的推动作用。 通过与5G的融合&#xff0c;SD-WAN在…

Qt/C++监控推流设备推流/延迟极低/实时性极高/rtsp/rtmp推流/hls/flv/webrtc拉流/调整分辨率降低带宽

一、前言 算下来这个推流的项目作品写了有四年多了&#xff0c;最初第一个版本只有文件点播的功能&#xff0c;用的纯QTcpSocket通信实现&#xff0c;属于比较简单的功能。由于文件点播只支持文件形式的推流&#xff0c;不支持网络流或者本地设备采集&#xff0c;所以迫切需要…

不成功人士的7个习惯

你犹豫不决 你在做决定时犹豫不决&#xff0c;即使你辗转反侧的做了决策&#xff0c;落实到执行的时候又开始打退堂鼓&#xff0c;这种决策机制会产生一种不好的惯性&#xff0c;让你没办法做到局部最优&#xff0c;长期的随机决策让你离成功越来越远。 你缺乏清晰度 你对于…

二叉树的初步学习和顺序结构实现

当我们学完顺序表、链表、栈和队列的时候&#xff0c;我们就要开始学习树了。树对于以后的学习有非常大的帮助&#xff0c;尤其是排序。好了&#xff0c;开始我们的学习吧。 1.树的概念及结构 1.1树的结构 树结构是一种非线性结构。它是由n&#xff08;n>0&#xff09;个…

蓝桥杯每日一题——棋盘

问题描述 小蓝拥有 n xn 大小的棋盘&#xff0c;一开始棋盘上全都是白子。小蓝进行了 m 次操作&#xff0c;每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色&#xff0c;黑色棋子变为白色)请输出所有操作做完后棋盘上每个棋子的颜色。输入格式 输入的…

面向对象编程第三式: 多态 (Java篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

2024.3.17每日一题

LeetCode 最小高度树 题目链接&#xff1a;310. 最小高度树 - 力扣&#xff08;LeetCode&#xff09; 题目描述 树是一个无向图&#xff0c;其中任何两个顶点只通过一条路径连接。 换句话说&#xff0c;一个任何没有简单环路的连通图都是一棵树。 给你一棵包含 n 个节点的…

vue3 el-form中嵌套el-tabale 对输入动态校验

简单案例 <el-form :model"Form" :rules"rules" ref"FormRef" class"formDiv"><el-table :data"Form.copyWriters" style"width: 100%"><el-table-column label"文案链接"><temp…

TPU浅谈

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;上篇文章讲了FPGA和ASIC&#xff0c;讲解了 FPGA 如何实现通过“软件”来控制“硬件”&#xff0c;以及我们可以进一步把 FPGA 设计出来的电路变成一块 ASIC 芯片。今天我们来看看TPU。大家可以点击这篇文章TPU深入了解TPU。…

BUUCTF-----[CISCN 2019 初赛]Love Math

<?php error_reporting(0); //听说你很喜欢数学&#xff0c;不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (strlen($content) > 80) {die("太长了不会算");}$blacklist [ , \t, \r, \n…

如何在webapp中手动部署

前言&#xff1a;这个有不知道怎么下载Tomcat的可以看我这篇博客的前面&#xff0c;有相关链接&#xff0c;下载好后我那边也有如何运行成功的 在idea中配置tomcat服务器&#xff0c;部署一个项目-CSDN博客 接下来进入这篇博客的正题&#xff01;怎么手动部署 先找到我们下载…

基于SpringBoot+Vue的个人云盘管理系统的设计与实现(源码+部署说明+演示视频+源码介绍)

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

AI预测福彩3D第11弹【2024年3月17日预测--新算法重新开始计算第8次测试】

今天继续对第一套算法进行测试。废话不多说了&#xff0c;直接上分析出的图表&#xff0c;再上结果。 最终&#xff0c;经过研判分析&#xff0c;2024年3月17日福彩3D的七码预测结果如下&#xff1a; 百位&#xff1a;4 5 3 8 6 2 9 十位&#xff1a;9 8 7 6 2 4 5 个位&#x…

三次握手seq和ack的流程 TCP协议栈seq和ack深层理解

☆ 大家可以把想了解的问题在评论发给我?我会根据问题补充到后面 ☆ 三次握手seq和ack的流程 是的,在TCP/IP协议中,三次握手过程确实涉及到序列号(Sequence Number, 简称Seq)和确认号(Acknowledgment Number, 简称Ack)的交换。这个过程是为了建立可靠的连接,确保数据能…

Vue3-响应式基础:单文件和组合式文件

单文件&#xff1a;html <!DOCTYPE html> <html> <head><title>响应式基础</title> </head> <body><div id"app" ><!-- dynamic parameter:同样在指令参数上也可以使用一个 JavaScript 表达式&#xff0c;需要包…

基于深度学习的唇语识别系统的设计与实现

概要 人工智能作为三大工程之一&#xff0c;从上个世纪至今仍然活跃于各个行业的研究与应用之中&#xff0c;应时代的热潮方向&#xff0c;本 课题主要针对深度学习技术应用于唇语识别当中&#xff0c;实现词语唇语的翻译功能。唇语识别在图像处理中一直是一个富 有挑战性的课题…

记一些有关Element Plus的样式修改

先记一个放着&#xff0c;后续慢慢补充。。。 一个 Vue 3 UI 框架 | Element Plus Radio 单选框 1、去除radio的圆圈 .box-radio {/deep/ .el-radio__input {display: none;} }