现场可编程门阵列【LabVIEW FPGA】
文章平均质量分 65
LabVIEW FPGA编程技巧
東方神山
A YOUNG AE。
展开
-
【LabVIEW FPGA入门】同步C系列模块
数字通道可以在一个时钟周期内执行。模拟通道需要多个时钟周期。同步模拟模块的每个通道有一个 ADC,采集的数据在通道之间没有明显的偏差。多路复用模块使用多路复用器通过单个 ADC 路由多个通道,因此多路复用模块中的所有通道之间存在通道间延迟或偏移。要同步不同通道和不同模块,请将所有通道读取或更新放在同一个 FPGA I/O 节点中,以最小的偏差混合模拟输入、模拟输出和数字 I/O 通道。原创 2024-05-21 14:25:54 · 282 阅读 · 0 评论 -
【LabVIEW FPGA入门】使用事件发生函数同步FPGA循环
使用 Occurrences 函数来控制单独的同步活动。特别是,当您希望程序框图的一部分等待程序框图的另一部分完成任务而不强制 LabVIEW 进行轮询时,请使用这些函数。您可以使用全局变量执行类似于occurrences函数的功能,通过一个循环轮询全局变量,直到其值发生变化。然而,全局变量会消耗更多的系统资源,并且会因轮询循环而引入抖动。原创 2024-05-21 11:02:56 · 222 阅读 · 0 评论 -
【LabVIEW FPGA入门】FPGA不同传递数据方法比较
只有变量、寄存器项和块内存 FIFO 才具有跨不同时钟源传输数据的能力。不同时钟源的使用与单周期定时循环的使用有关。数据共享方法的选择应基于应用的需要。根据应用程序的重要特性,所讨论的任何一种方法都可能是合适的。传输缓冲数据(100 至 300 字节的 FIFO)原创 2024-03-23 20:38:48 · 496 阅读 · 0 评论 -
【LabVIEW FPGA入门】FIFO
要在 FPGA VI 的不同部分之间或 FPGA 目标中的 VI 之间传输缓冲数据,可使用 FIFO。FIFO 是一种先进先出的缓冲器,第一个写入内存的数据项就是第一个从内存中读取和删除的数据项,类似于队列。FPGA FIFO 的功能类似于一个固定长度的队列,可将多个数据项写入内存或从内存中读出。与队列不同的是,FPGA FIFO 通过对数据大小施加限制来确保行为的确定性,读写器可同时访问数据。原创 2024-03-23 18:25:23 · 1684 阅读 · 0 评论 -
【LabVIEW FPGA入门】FPGA寄存器(Register)
Target-scoped register items: 如果希望寄存器项在 "项目浏览器"(Project Explorer)窗口中可见并可配置,则可使用目标范围寄存器项。目标寄存器项可在项目浏览器窗口中同一目标下的任何 FPGA VI 中使用。- VI-defined register items: 使用VI定义的寄存器项创建可重入的子VI,避免资源冲突。如果在可重入的 FPGA VI 中配置了 VI 定义的寄存器项,LabVIEW 将为 VI 的每个实例创建寄存器项的单独副本。原创 2024-03-23 17:16:22 · 398 阅读 · 0 评论 -
【LabVIEW FPGA入门】FPGA 存储器(Memory)
可以使用内存项将数据存储在FPGA块内存中。内存项以2kb为倍数引用FPGA目标上的块内存。每个内存项引用一个单独的地址或地址块,您可以使用内存项访问FPGA上的所有可用内存。如果需要随机访问存储的数据,请使用内存项。内存项不消耗FPGA上的逻辑资源,因为它们不包括确保跨时钟域数据完整性所需的额外逻辑。内存项中的每个内存地址只存储最新的值。如果在从内存地址读取之前对该地址进行N次写入,则在最近的值之前的N - 1个值将丢失。原创 2024-03-23 16:59:26 · 1128 阅读 · 0 评论 -
【LabVIEW FPGA入门】局部变量和全局变量
无法访问某前面板对象或需要在程序框图节点之间传递数据时,可创建前面板对象的局部变量。创建局部变量后,局部变量仅仅出现在程序框图上,而不在前面板上。局部变量可对前面板上的输入控件或显示件进行数据读写。写入局部变量相当于传递数据至其他接线端。但是,局部变量还可向输入控件写入数据和从显示控件读取数据。实际上,使用局部变量可将前面板对象同时用作输入和输出。例如,如果用户界面需要用户登录,可在每次新用户登录时清空登录和密码提示框中的内容。原创 2024-03-20 23:48:42 · 1109 阅读 · 0 评论 -
【LabVIEW FPGA入门】使用FPGA实现串行同步接口(SSI)
传感器不断更新位置数据,并传送到移位寄存器中。在每一个时钟脉冲序列之间,最少有25毫秒的保持时间,用于将新的数据写入移位寄存器。当传感器从控制器接收到一个脉冲序列时,数据被移出。当最低有效位 (LSB) 变为HIGH,并且超出最小保持时间时,就可以读取新的数据。请参考下图,了解典型SSI框图,SSI时序图以及含有25毫秒的保持时间的顺序测量SSI时序图。SSI(串行同步接口)是连接绝对位置传感器和控制器的广泛应用的串行接口。SSI利用控制器发出一个时钟脉冲序列,初始化传感器的门限输出。原创 2024-03-19 20:52:58 · 469 阅读 · 0 评论 -
【LabVIEW FPGA入门】并行执行
这些任务可以作为单个循环中的序列来实现,但也可以编码为三个单独的循环,如下所示。第二个循环从第一个循环接收数据,对其进行处理,然后将其传递给第三个循环,第三个循环负责将处理后的数据传输到主机应用程序。除了提高性能之外,这种模块化编程方法还可以帮助您组织和管理应用程序代码,使您能够更轻松地测试和调试应用程序,并提高未来具有类似要求的应用程序中的代码重用。该技术几乎可以应用于任何应用。通过查看应用程序内的数据流,您可以识别可以彼此独立运行的不同进程,即使它们需要在应用程序的更大方案中同步。原创 2024-03-18 23:29:52 · 668 阅读 · 0 评论 -
【LabVIEW FPGA入门】浮点数类型支持
从定点到单精度浮点的转换需要由应用程序的主机或实时部分完成,这主要是由于在 FPGA 上实现此转换的复杂性。虽然浮点算法可以直接在 FPGA 上执行,但混合实现可以在算法内的关键计算中提供更高的灵活性和卓越的性能。值得注意的是,虽然浮点数据类型提供了许多好处,但在单周期定时循环中使用时它的支持有限,并且对于某些操作,它使用的 FPGA 资源比定点数据类型要多得多。在 FPGA 上开发单精度浮点数据类型的应用程序时,最重要的是要考虑到该数据类型比定点数据类型使用更多的资源,并且需要更多的时钟周期来完成操作。原创 2024-03-17 21:57:06 · 1140 阅读 · 0 评论 -
【LabVIEW FPGA入门】流水线
在当今多核处理器和多线程应用程序的世界中,程序员在开发应用程序时需要不断思考如何最好地利用尖端 CPU 的强大功能。尽管用传统的基于文本的语言构建并行代码可能难以编程和可视化,但 NI LabVIEW 等图形开发环境越来越多地允许工程师和科学家缩短开发时间并快速实现他们的想法。由于 NI LabVIEW 本质上是并行的(基于数据流),因此多线程应用程序编程通常是一项非常简单的任务。框图上的独立任务自动并行执行,无需程序员进行额外的工作。但是那些不独立的代码片段又如何呢?原创 2024-03-17 21:03:08 · 987 阅读 · 0 评论 -
【LabVIEW FPGA入门】单周期定时循环
组合路径是 FPGA 上一个寄存器的输出与另一个寄存器的输入之间的逻辑路径。寄存器将数据存储在FPGA上并在时钟的上升沿更新数据。长组合路径需要更多时间来执行并限制时钟域的最大时钟速率。长组合路径通常是单周期定时循环中的一个问题,因为输入寄存器和输出寄存器之间的逻辑必须在您指定的时钟速率的一个周期内执行。在单周期定时循环中,组件内部和组件之间的寄存器被移除,从而增加了寄存器之间的组合路径的长度。如果组合路径中的代码未在一个时钟周期内执行,LabVIEW将在编译失败对话框中返回时序违规。原创 2024-03-17 19:39:45 · 1131 阅读 · 0 评论 -
【LabVIEW FPGA入门】FPGA中的数据流
数据流编程模型与用 C 等语言实现的控制流模型形成对比。由于自上而下的顺序编程方法,用 C 编写的应用程序在映射到并行硬件时具有固有的局限性。相反,在数据流模型中,框图上的节点相互连接以表达逻辑执行流,并且可以使用它们轻松地表达并行性。当框图节点接收到所有必需的输入时,它会生成输出数据并将该数据传递到数据流路径中的下一个节点。数据通过节点的移动决定了框图上功能的执行顺序。LabVIEW数据流编程范例允许LabVIEW执行系统在不同线程中运行两个循环。在许多基于文本的编程语言中,您必须显式创建和处理线程。原创 2024-03-17 18:49:31 · 1173 阅读 · 0 评论 -
【LabVIEW FPGA入门】定时
在本节学习使用循环计时器来设置FPGA循环速率,等待来添加事件之间的延迟,以及Tick Count来对FPGA代码进行基准测试。原创 2024-03-17 16:46:15 · 1258 阅读 · 0 评论 -
【LabVIEW FPGA入门】插值、输出线性波形
控件中的值,程序结束。您可以再次开发一个可在主机上运行的 VI,该主机将以编程方式执行该 VI。下面的 VI,执行线性输出 - 添加点,在主机上开发并运行。通过主机上的该VI,您可以多次调用该VI,而无需手动与FPGA上的VI连接,并且可以将该VI用作其他VI中的子VI。使用线性插值生成分段线性波形分段线性波形是由线性波形组合构成的波形。整个波形不是线性的,但各个部分包括线性波形。您可以使用前面几节中描述的方法来输出分段线性函数。原创 2024-03-17 15:46:21 · 1455 阅读 · 2 评论 -
【LabVIEW FPGA入门】FPGA中的数学运算
数值控件选板上的大部分数学函数都支持整数或定点数据类型,但是需要请注意,避免使用乘法、除法、倒数、平方根等函数,此类函数比较占用FPGA资源,且如果使用的是定点数据或单精度浮点数据仅适用于FPGA终端。原创 2024-01-17 22:56:49 · 1568 阅读 · 1 评论 -
【LabVIEW FPGA入门】模拟输入和模拟输出
1.打开项目,在FPGA终端下面新建一个VI2.本示例以模拟输入卡和模拟输出卡同时举例。3.新建一个VI编写程序,同时将卡1的输出连接到卡2的输入使用物理连线。4.编译并运行程序,观察是否能从通道中采集和输出信号。5.同时也可以结合数字通道来控制一些器件的开关功能,比如继电器等等。对于cRIO设备,模拟信号默认返回的是定点数据,且数据已经经过校准,但是也可以切换为原始的整数数据,定点数据会在后面的文章中继续讲,这里概述一下。原创 2024-01-13 23:11:34 · 1196 阅读 · 0 评论 -
【LabVIEW FPGA入门】使用CompactRIO进行SPI和I2C通信
该示例已在 PXI-7854R 板上进行了测试,但我希望它也能在其他类似的板上工作(参见 I2C&SPI API 设备兼容性)。注意:要对 FPGA 进行编程,您只需将 I2C Engine.vi 拖放到 FPGA 代码上即可。首先,使用不同的传感器构建电路,并通过 SCB-68 将它们连接到 FPGA。你如果不使用相同的设备,则需要重新配置FPGA IO:打开FPGA和VI主FPGA.vi。该API使用FPGA数字I / O线与SPI或I2C设备进行通信。然后,修改您在 FPGA 上选择的引脚的 IO。原创 2024-01-13 22:51:29 · 1357 阅读 · 0 评论 -
【LabVIEW FPGA入门】使用数字IO卡进行正交编码器采集
示例程序演示了如何使用 LabVIEW FPGA 模块和 CompactRIO 硬件来估计正交编码器的速度和加速度。该示例包含一个 FPGA VI、Encoder Position & Velocity (FPGA).vi(将在 FPGA 平台上运行)和一个主机 VI、Encoder Position & Velocity (Host).vi(将在主机上运行)。此外,该示例程序专为 PXI-7811R PXI 数字可重配置 I/O 模块 FPGA 和插槽 1 中带有NI-9411。原创 2024-01-13 22:12:21 · 446 阅读 · 0 评论 -
【LabVIEW FPGA入门】LabVIEW FPGA 实现SPI通信协议
SPI 是一种以全双工方式运行的同步串行数据链路。也就是说,携带数据的信号同时在两个方向上传播。设备使用主/从协议进行通信,其中主设备启动数据帧。当主设备生成时钟然后选择从设备时,数据可以同时在一个或两个方向上传输。由主设备和从设备决定接收到的字节是否有意义。这可能需要设备丢弃“仅发送”帧中接收到的字节或为“仅接收”帧生成虚拟字节。时钟 (SCLK)- 该信号由主机生成。传输中的其他信号根据该时钟的边沿时序而变化。主数据输出,从数据输入(MOSI)——该线是从主设备到从设备的输出。原创 2024-01-13 22:00:33 · 1471 阅读 · 0 评论 -
【LabVIEW FPGA入门】NI FPGA 硬件实现RS-232、RS422、RS-485
可以在NI FPGA卡上实现RS-232,RS-422和RS-485协议。主要考虑因素是在实施RS-422或RS-485时如何处理信号的电压电平。大多数CompactRIO模块和R系列设备上的DIO线是单端3.3V TTL,而RS-422和RS-485是差分电压信号。要拥有真正的RS-422 / RS-485接口,您将需要在FPGA卡和RS-422 / RS-485设备之间添加一个信号转换器。原创 2024-01-13 21:19:09 · 456 阅读 · 0 评论 -
【LabVIEW FPGA入门】没有CompactRIO时进行编程测试
9.运行程序即可,验证自己的算法,如果需要查看FPGA资源的占用情况就不要走第8步直接编译,虽然会报连不上硬件的错误,但是布线报告可以看。8.调整FPGA终端的执行VI方式为带仿真IO的开发计算机,并保存项目。要添加仿真的远程实时目标,请选择项目名称,右击并选择。,你所能仿真创建的设备清单会显示出来。接下来,当添加目标和设备窗口出现时,请选择。6.在FPGA终端下新建一个VI,并保存。新建的目标就应在已命名的项目浏览窗口中显示出来。右键单击新添加的机箱,然后选择。窗口中,选择所需的模块和插槽,然后单击。原创 2024-01-13 20:58:08 · 671 阅读 · 0 评论 -
【LabVIEW FPGA入门】使用数字IO卡实现计数器输入功能
1.首先需要用一个数字IO的输入FPGA端口,并将其拖入程序框图中,同时创建一个循环。2.如果想要在循环中实现累加功能,就可以使用移位寄存器。数字输入的当前值和历史值进行比较,用于一个判断大于,来确定是否出现了上升沿。同时如果想确认上升沿的次数也可以用移位寄存器,如果出现上升沿则计数加1,否则保持原值。原创 2024-01-13 18:35:21 · 706 阅读 · 0 评论 -
【LabVIEW FPGA 编程入门】使用FPGA IO进行编程
3.如果新增加了FPGA资源,不是创建项目时扫描到的,则需要将FPGA IO添加到项目中。4.在程序框图中,也可以使用FPGA IO 框图选板添加FPGA IO。以FPGA IO节点为例,可以选择已添加到项目里的FPGA IO。1.在项目中新建一个VI,命名为FPGA IO Test。2. 可以直接将项目中的FPGA IO拖入程序框图中。7.简单写一个FPGA IO使用的程序。5.项目浏览器配置FPGA IO项。为FPGA IO分配名称及配置仲裁。将新添加的C系列模块添加到项目中。配置DIO初始线方向。原创 2024-01-13 16:58:34 · 808 阅读 · 0 评论 -
【LabVIEW FPGA入门】使用LabVIEW FPGA进行编程并进行编译
在LabVIEW FPGA中和rt、PC编程一样使用数据流编程,但是需要注意的是FPGA中有些函数是不可以用的,因为这些函数很占用资源,且FPGA只能同时下载运行一个程序。在此步骤中可能会出现许多错误,导致编译失败。一般编译时间根据代码的大小变化,初学者编译时间大概在5-10分钟,无论使用什么开发软件,FPGA的编译过程都是较久的。7.编译后的FPGA正在运行,可以做一个简单的测试,但是需要注意的是FPGA编程一般是不需要前面板的,同时因为前面板控件占用资源较多,尽量避免在FPGA前面板放太多的控件。原创 2024-01-13 15:48:11 · 1276 阅读 · 7 评论 -
【LabVIEW FPGA入门】创建第一个LabVIEW FPGA程序
组件说明LabVIEW项目LabVIEW项目允许用户在开发计算机上开发应用时,管理VI和终端。LabVIEW项目文件包含对项目中文件的引用、配置信息、部署信息、生成信息等。我的电脑我的电脑(通常称为开发计算机)是开发LabVIEW项目的计算机。开发计算机是指运行支持的Windows平台的计算机,该计算机已安装LabVIEW和LabVIEW FPGA模块。RIO机箱RIO机箱放置并直接连接FPGA终端的I/O块至可互换的I/O模块,以实现高性能定时、触发和同步。控制器。原创 2024-01-02 15:47:16 · 1757 阅读 · 0 评论