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

单周期定时循环详解        

        单周期定时环路是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.mfbz.cn/a/464111.html

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

相关文章

C++算法学习心得八.动态规划算法(4)

1.零钱兑换(322题) 题目描述: 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。…

QTextToSpeech的使用——Qt

前言 之前随便看了几眼QTextToSpeech的帮助就封装使用了,达到了效果就没再管了,最近需要在上面加功能(变换语速),就写了个小Demo后,发现不对劲了。 出现的问题 场景 写了个队列添加到语音播放子线程中&a…

多线程(代码案例: 单例模式, 阻塞队列, 生产者消费者模型,定时器)

设计模式是什么 类似于棋谱一样的东西 计算机圈子里的大佬为了能让小菜鸡的代码不要写的太差 针对一些典型的场景, 给出了一些典型的解决方案 这样小菜鸡们可以根据这些方案(ACM里面叫板子, 象棋五子棋里叫棋谱, 咱这里叫 设计模式), 略加修改, 这样代码再差也差不到哪里去 … …

官方安装配置要求服务器最低2核4G

官方安装配置要求服务器至少2核、4G。 如果服务器低于这个要求,就没有必要安装,因为用户体验超级差。 对于服务器CPU来说,建议2到4核就完全足够了,太多就浪费了,但是内存越大越好,最好是4G以上。 如果服务器…

数据库 | Mysql - [binlog]

INDEX 1 什么是 binlog2 作用3 数据恢复4 主从复制 1 什么是 binlog Mysql server 的日志文件 自动开启 2 作用 数据恢复主从复制 3 数据恢复 实际场景 01.00:数据全量备份08.00:数据丢失(比如被人误删)09.00:故…

贪心问题题目集一(代码 注解)

目录 介绍: 题目一: 题目二: 题目三: 题目四: 题目五: 题目六: 题目七: 题目八: 介绍: 贪心算法是一种特殊的算法思想,它在每一步选择中都采取…

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

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

ISIS接口MD5 算法认证实验简述

默认情况下,ISIS接口认证通过在ISIS协议数据单元(PDU)中添加认证字段,例如:MD5 算法,用于验证发送方的身份。 ISIS接口认证防止未经授权的设备加入到网络中,并确保邻居之间的通信是可信的。它可…

【教学类-34-10】20240313 春天拼图(Midjounery生成线描图,4*4格拼图块)(AI对话大师)

作品展示: 背景需求: 利用华文彩云空心字(粗胖字体。凑满9个拼图)制作了3*3的拼图块 【教学类-34-09】20240310华文彩云学号拼图(3*3格子浅灰底图 深灰拼图块)(AI对话大师)-CSDN博…

唯一约束

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 唯一约束 唯一约束的特点是在某一个列上的内容不允许出现重复。 例如,现在要收集用户的信息,假设包含编号(mid)、姓名&…

【vue在主页中点击主页面如何弹出一个指定某个页面的窗口】

【vue在主页中点击主页面跳转到某个页面的操作完整过程】 1.首先在主页面中加入一个卡槽用于展示弹出的窗口 代码如下&#xff1a; <el-dialog :visible.sync"dialogVisible1" :close-on-click-modal"false" :title"title" class"dial…

Docker出现容器名称重复如何解决

假如你的重复容器名称是mysql5 删除已存在的容器&#xff1a;如果你不再需要那个已经存在的名为“mysql5”的容器&#xff0c;你可以删除它。使用下面的命令&#xff1a; docker rm -f mysql5这条命令会强制删除正在运行的容器。一旦容器被删除&#xff0c;你就可以重新使用这个…

Git全套教程一套精通git.跟学黑马笔记

Git全套教程一套精通git.跟学黑马笔记 文章目录 Git全套教程一套精通git.跟学黑马笔记1.版本管理工具概念2. 版本管理工具介绍2.1版本管理发展简史(维基百科)2.1.1 SVN(SubVersion)2.1.2 Git 3. Git 发展简史4. Git 的安装4.1 git 的下载4.2 安装4.3 基本配置4.4 为常用指令配置…

ElasticSearch之Nested对象

写在前面 本文看下es的nested嵌套对象相关内容。 1&#xff1a;es用了啥范式&#xff1f; 在关系型数据库中定义了6大数据库范式,即1&#xff0c;2&#xff0c;3&#xff0c;BC&#xff0c;4&#xff0c;5的NF&#xff08;normal form&#xff09;,分别如下&#xff1a; 1N…

快速去除或提取视频中的任何声音,你学会了吗

怎么提取视频中的音频&#xff1f;本文将向您介绍多个简单而有效的方法&#xff0c;帮助您轻松掌握如何提取视频中的音频。无论您是视频编辑新手还是经验丰富的用户&#xff0c;这些建议都将为您提供多样选择&#xff0c;满足各种需求。 方法一&#xff1a;使用在线转换工具提取…

一维差分(模板)

差分是前缀和的逆运算&#xff0c;对于一个数组a&#xff0c;其差分数组b的每一项都是a [ i ]和前一项a [ i − 1 ]的差。 **注意&#xff1a;**差分数组和原数组必须分开存放&#xff01;&#xff01;&#xff01;&#xff01; #include <iostream> using namespace s…

python爬虫-AES.CBS加密案例(mmz批量爬取)

下载mmz本页数据 批量下载请看主页&#xff01;&#xff01;&#xff01; 代码&#xff1a; import requests from Crypto.Cipher import AES import base64cookies {PHPSESSID: 48nu182kdlsmgfo2g7hl6eufsa,Hm_lvt_6cd598ca665714ffcd8aca3aafc5e0dc: 1710568549,SECKEY_A…

deepseek-coder模型量化

1 简介 DeepSeek-Coder在多种编程语言和各种基准测试中取得了开源代码模型中最先进的性能。 为尝试在开发板进行部署&#xff0c;首先利用llama.cpp对其进行量化。 2 llama.cpp安装 git clone之后进入文件夹make即可&#xff0c;再将依赖补全pip install -r requirements.tx…

可视化图表:南丁格尔玫瑰图,来自历史上最著名的护士。

Hi&#xff0c;我是贝格前端工场的老司机&#xff0c;本文分享可视化图表设计的南丁格尔玫瑰图设计&#xff0c;欢迎老铁持续关注我们。 一、南丁格尔与玫瑰图 南丁格尔&#xff08;Florence Nightingale&#xff0c;1820年-1910年&#xff09;是一位英国护士和统计学家&…
最新文章