【LabVIEW FPGA入门】定时

news2024/11/23 18:48:33

        在本节学习使用循环计时器来设置FPGA循环速率,等待来添加事件之间的延迟,以及Tick Count来对FPGA代码进行基准测试。

 1.定时快捷VI函数

        在FPGA VI中放置的每个VI或函数都需要一定的时间来执行。您可以允许操作以数据流确定的速率发生,而无需额外编程。

        如果需要对执行时间进行控制或测量,可以使用定时VIs。您还可以使用定时VIs创建自定义的I/O应用,如计数器、触发器等。

循环定时器

        循环定时器循环定时器Express VI根据Count中指定的值在循环迭代之间等待。你可以在循环中调用这个函数来控制循环的执行速度。如果错过了执行实例,例如当循环中的逻辑执行时间长于指定的时间间隔时,loop Timer将立即返回并为后续调用建立一个新的引用时间戳。

        使用循环定时器Express VI来控制For循环或While循环,并设置循环的迭代速率。循环定时器Express VI的一个常见用途是控制模拟或数字I/O功能的采集或更新速率

等待

        Wait Express VI等待指定的时间,然后返回自由运行计数器的值。

        Wait Express VI在FPGA上的两个操作之间增加了显式延迟。使用Wait Express VI来控制数字输出的脉冲长度或在触发信号和由此产生的操作之间添加触发延迟。

时钟计数

        Tick Count Express VI在VI唤醒时返回空闲运行计数器的值。

        当计数器达到配置对话框中指定的“内部计数器大小”的最大值时,空闲运行的计数器将滚动。使用Tick Count Express VI对循环速率进行基准测试或创建您自己的自定义计时器。

        定时快速VI配置每个定时快速VI在将其添加到框图中或右键单击VI并选择“属性”时都有一个配置对话框。定时快速VIs的配置对话框包括以下选项:•计数器单位- VI用于计数器的时间单位。

        —tick -将计数器单位设置为单个时钟周期,其长度由编译VI时的时钟速率决定。

        -µsec -设置计数器单位为微秒。

        - msec -设置计数器单位为毫秒。

        -Size of Internal counter内部计数器的最大大小(8、16、32位)。当计数器达到可以使用所选位数表示的最大计数时,自由运行的计数器将滚动。为节省FPGA空间,建议FPGA VI使用尽可能小的内部计数器

2. 循环定时器详解

        应用程序通常需要以特定的频率执行循环。例如,控制回路中使用的算法通常要求以已知的速率对输入进行采样。使用While循环中的Loop Timer VI来控制循环的执行速率

        要使用循环计时器VI控制循环执行速率,请在While循环中放置一个顺序结构。将循环计时器VI放置在序列结构的第一帧中。在出现的“配置循环计时器”对话框中,指定计数器单位和内部计数器的大小。将用于I/O的LabVIEW代码放在序列结构的后续帧中。

        当Loop Timer第一次在循环中执行时,它记录当前时间。下一次循环计时器执行时,它将Count添加到初始时间中,并等待直到Count从初始记录的时间中消失。在FPGA VI中,循环计时器不会等待第一次调用它。如果将循环计时器放置在循环中,以便在循环开始时执行,则循环中与循环计时器并行的所有代码执行两次,在初始时间之后,在Count结束之前。为了防止代码在Count结束之前执行两次,请在第一帧中使用带有循环计时器的Flat Sequence结构或Stacked Sequence结构,并将其余代码放在后续帧中,以确保第一次和后续迭代的代码正确计时。

        当通过嵌套结构或连续运行模式重复调用时,循环计时器的计时不会每次都重置。循环计时器继续增加它在第一次调用时启动的时间记录。

 

3.While循环注意事项

        将False常数连接到While循环的Loop Condition终端,在许多FPGA应用中都是可以接受的。FPGA逻辑通常意味着在FPGA上无限期地运行。将控件和应用程序逻辑连接到Loop Condition终端也是可以接受的

        While循环的迭代终端计数不会翻转。相反,一旦达到该值,它将继续输出2,147,483,647。有了FPGA的速度,While循环迭代终端可能很快就会达到最大值。如果需要计数器在达到最大值时进行翻转,则应该以编程方式实现自己的计数器。

4.cRIO定时模块

        一些CompactRIO模块可以配置为以用户指定的数据速率传输数据。有关具体信息,请参阅具有此特性的CompactRIO模块的产品文档。

        例如,NI 9234具有四个模拟输入通道,以用户指定的数据速率同时采样。NI 9234有两个额外的数字通道,启动和停止,控制采集模式。要开始采集,将start通道从Project Explorer拖到框图中。将设置为TRUE的布尔常量连接到Start输入,以向模块发送同步脉冲,并开始以用户指定的数据速率获取数据。

        使用FPGA I/O Property Node以编程方式配置数据速率。在开始节点之前或在停止节点之后执行属性节点。当NI 9234处于采集模式时,不能更改属性。

        要配置属性节点,请右键单击Property部分并选择Data Rate,然后右键单击Data Rate输入并选择Create»Control。

        数据速率控件,如图所示,是一个严格类型定义自定义环控件,限制用户选择NI 9234允许的速率。从主机VI写入控件,以便可以在运行时更改数据速率

        采集开始后,使用FPGA I/O Node读取数据。将FPGA I/O Node的AI输出连接到FPGA Memory功能或FPGA FIFO功能。如果从模块上的多个通道读取数据,请将这些通道放在同一个FPGA I/O Node中,以确保VI同步读取数据。

        由于NI 9234内部以指定的速率获取数据,因此FPGA I/O Node在模块获取新数据之前不会返回数据。如果NI 9234没有开始采集数据或在FPGA I/O Node等待来自模块的数据时停止采集数据,FPGA I/O Node将返回一个超时错误。

        通过NI 9234的Stop通道配置FPGA I/O Node退出采集模式。在Stop输入中写入一个True常量。在改变属性和方法之前,FPGA必须退出采集模式。

        您可以使用FPGA I/O方法节点从模块读取数据。NI 9234模块处于采集模式时,不能进行其他操作,如访问属性、TEDS (Transducer Electronic Data Sheet)信息等。

        NI 9234是内部定时。不要在从NI 9234获取数据的FPGA I/O节点的环路中使用环路定时器或等待功能。当创建从NI 9234读取数据的循环时,请确保循环的执行速度不低于NI 9234的数据速率

        此处提醒的是,如果在FPGA中使用C系列模块卡,最好是先看一下范例是怎么用的,避免陷入误区。

 5.等待详解

        使用Wait Express VI在FPGA VI中创建事件之间的延迟。例如,您可能希望在触发器和后续输出之间创建延迟。您可以将触发器的LabVIEW代码放在序列结构的第一帧中。然后,将Wait Express VI放置在下一帧中。最后,将输出的LabVIEW代码放在序列结构的最后一帧中。也可以使用多个Wait VIs按顺序创建一系列延迟

        wait的定时配置和循环定时器一致,不再赘述。

等待与循环定时器之间的区别

        使用 Loop Timer Express VI 或 Wait Express VI 对 FPGA 代码进行计时。 Loop Timer 和 Wait Express VI 的不同之处在于它们影响代码执行的方式。
        如果您使用循环定时器 Express VI,则在第一次迭代期间代码会立即执行。 如果使用Wait Express VI,在第一次迭代期间,代码将等待指定等待语句的持续时间。
        对于这两种情况,都可以选择计时单位和计数器大小。顺序 结构控制数据流并确保在数字输出上的值发生变化之前发生等待。

6.时钟计数器详解

测量事件之间的执行时间

        使用Tick Count Express VI来测量数字信号上的边缘等事件之间的时间。当需要确定输入信号的周期、脉冲宽度或频率时,或者想要确定一段LabVIEW代码的执行时间时,可以使用Tick Count Express VI。这个和上位机函数的用法是一致的。

 

        在序列结构的第一帧中放置一个Tick Count Express VI。然后,将您想要测量的LabVIEW代码放在序列结构的第二帧中。最后,将另一个Tick Count Express VI放在序列结构的最后一帧中。然后可以计算两个Tick Count Express vi结果之间的差异,以确定执行时间。从计算结果中减去1,以补偿Tick Count Express VI的执行时间。

        Tick Count Express VI使用内部计数器跟踪时间。同一框图上每个Tick Count Express VI的内部计数器共享相同的开始时间。因此,每个Tick Count Express VI使用相同的值为计数器单位和内部计数器选项的大小跟踪相同的时间。例如,如果同时调用两个使用相同配置Tick Count选项的Tick Count Express vi,它们将返回相同的Tick Count值

        Tick Count Express VI以计数器单位返回整数值。Tick Count值不能表示为uSec或mSec配置Counter Units时发生的任何小数时间段。为uSec或mSec配置计数器单位可能导致计时测量的精度为±1计数器单位值。例如,您可以配置Tick Count Express VIs以毫秒为单位测量时间。如果第一个Tick Count Express VI在47.9毫秒执行,则Tick Count返回值47。如果第二个Tick Count Express VI在53.2毫秒执行,则Tick Count返回值53。

测量While循环执行周期

        使用滴答计数是计算循环周期的最佳方法,其中一个滴答等于时基的一个时钟周期(大多数FPGA目标上默认为40 MHz)。要测量一次迭代和下一次迭代之间的滴答数,只需使用带有移位寄存器的滴答计数VI。

        将Tick Count VI放入所需的循环中,并将输出连接到移位寄存器。然后,通过减去两者之间的差值来比较之前的迭代计数和当前迭代计数。在subtract函数的输出上,连接一个指示器以查看迭代之间经过的时间。

 

        

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

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

相关文章

科研学习|论文解读——交替协同注意力网络下基于属性的情感分析 (IPM, 2019)

论文题目 Aspect-based sentiment analysis with alternating coattention networks 摘要 基于属性的情感分析(ABSA)旨在预测给定文本中特定目标的情感极性。近年来,为了获得情感分类任务中更有效的特征表示,人们对利用注意力网络…

使用kettle导入Elasticsearch数据库

资源文件: 操作步骤: 1、删除data-integration\lib 下 所有 jackson- 开头的jar包,然后把jackson-2.8.10-libs文件夹中的jar拷到lib目录下 2、替换data-integration\plugins\elasticsearch-bulk-insert-plugin文件夹 3、如果开启了ssl认证…

Spring6--IOC反转控制 / 基于XML管理bean

1. 容器IOC 先理解概念,再进行实际操作。概念比较偏术语化,第一次看可能看不懂,建议多看几遍,再尝试自己独立复述一遍,效果会好些 1.1. IOC容器 1.1.1. 控制反转(IOC) IOC (Inversion of Con…

27-Java MVC 模式

Java空对象模式 实现范例 MVC模式代表 Model-View-Controller(模型-视图-控制器) 模式MVC模式用于应用程序的分层开发 Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO 它也可以带有逻辑,在数据变化时更新控制…

Sharding sphere分库分表

需要物理自己实现分表分库,然后通过配置文件配置。 配置文件: 需要配置多个数据源,主从表的关系【默认主表修改,从表读取】,定义分库的策略【比如User id】和分表【表Id】的策略 分库和分表策略:分库策略…

K8S之持久化存储

持久化存储 支持的持久化存储类型EmptyDirHostPathNFS 在K8S中部署的应用都是以pod容器的形式运行的,假如部署数据库服务 例如:MySQL、Redis等,需要对产生的数据做备份。如果pod不挂载数据卷,那pod被删除或重启后这些数据会随之消…

双指针 | 移动零 | 复写零

1.移动零 题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]解题思路: right指针一直往后移动,当…

LAMP架构部署--yum安装方式

这里写目录标题 LAMP架构部署web服务器工作流程web工作流程 yum安装方式安装软件包配置apache启用代理模块 配置虚拟主机配置php验证 LAMP架构部署 web服务器工作流程 web服务器的资源分为两种,静态资源和动态资源 静态资源就是指静态内容,客户端从服…

MATLAB环境下基于可调Q因子小波变换的滚动轴承故障诊断(MATLAB R2021B)

小波变换是一种时频局域化方法,它的窗口面积固定但形状可以发生改变(时间窗与频率窗均可变化)。小波变换在时间域与频率域都能够表示信号的局部特征,并具有多分辨率分析的特点,是机械故障诊断中常用的方法。小波变换故…

【机器学习系列】M3DM工业缺陷检测部署与训练

一.基础资料 1.Git 地址 地址 2.issues issues 3.参考 参考 csdn 二.服务器信息 1.GPU 服务器 GPU 服务器自带 CUDA 安装(前提是需要勾选上)CUDA 需要选择大于 11.3 的版本登录服务器后会自动安装 GPU 驱动 2.CUDA 安装 GPU 服务器自带 CUDA CUDA 版本查看 3.登录信…

deepseek-coder模型量化

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

蓝桥杯2023年省A(一波三折的)【买瓜】折半搜索+剪枝+排序

题目:洛谷 P9234 [蓝桥杯 2023 省 A] 买瓜 折半搜索 一开始觉得像dp,试着写了,显然过不了,但我实在觉得搜索也过不了啊,去看题解,发现使用了折半搜索(每天都觉得啥都不会捏 折半搜索就是先搜一…

Elasticsearch 主副分片切换过程中对业务写入有影响吗

🍊🍉🍋 先说下结论,只要集群中的工作节点过半,有候选的master节点,挂掉的节点中不同时包含索引的主分片和副分片,那么ES是可以做到让业务无感知的进行主副分片切换的。 蓝胖子会先讲解下ES集群写…

Oracle P6 Professional 配置连接数据库总结

前言 P6 Professional作为Oracle P6计划管理系统的重要套件之一,其操作出色,体检佳,是非常多的计划工程师跟踪项目进度计划的辅助工具。自20年前,Professional一直在不断的演变更新,以适应当前的新技术,从…

从零开始搭建游戏服务器 第三节 Protobuf的引入并使用

目录 上一节问题答案公布本节内容Protobuf介绍正文在build.gradle引入protobuf编写proto并生成使用生成的proto来进行数据传输 总结 上一节问题答案公布 上一节我们创建了ConnectActor,并且使用ConnectActorManager和connectId将其管理起来。 并且我们在收到客户端…

掌握C#: 从基础到精通 - 中级实战练习集

文章目录 异常处理尝试-捕获结构 文件 I/O 练习追加而不覆盖处理目录 LINQ 查询练习筛选集合中的对象排序复杂对象 类与对象练习继承与多态性 你是否已经掌握了C#的基础知识,正在寻找更多挑战来提升你的能力?那么,这篇文章就是为你准备的。我…

实锤!北大学者证实富钾盐代替食盐可安全降低高血压风险,发文顶刊JACC

编者 “要注意饮食,减少食盐摄入”这是高血压患者就诊时,医生说的最多的一句话。虽然低盐可以预防高血压,但国人食盐摄入量还是高于世界卫生组织(成人每天摄入盐不超过5克)的建议。 好在“天无绝人之路”,一…

人脸检测的5种实现方法

众所周知,人脸识别是计算机视觉应用的一个重大领域,在学习人脸识别之前,我们先来简单学习下人脸检测的几种用法。 常见的人脸检测方法大致有5种,Haar、Hog、CNN、SSD、MTCNN: 相关构造检测器的文件:opencv…

Java实现简单的通讯录

每日一言 泪眼问花花不语,乱红飞过秋千去。 —欧阳修- 简单的通讯录实现,跟写Java实现图书管理系统差不多,用到的知识也差不多,就当个小练习,练习一下写Java程序的手感。 Java实现图书管理系统 关于通讯录的代码都写…

P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值:做题笔记

目录 思路 代码 注意点 题目链接: P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值 (可跳) 这道题刚看到的时候想着主要就是算出每层2的次方个节点的权值和。 我的思路经过了很多次缝缝补补。创建一个sum数组,下标表示深度,每个元素代表…