使用握手信号控制定时
- 更新时间2025-05-20
- 阅读时长8分钟
握手是指建立了用于持续通信的参数的两个节点间的通信。对于给定程序框图的单周期定时循环中的节点F,握手机制确定发生下列动作的时间:
- F 丢弃来自上方数据流节点的数据。上方数据流节点是指发送数据至F的节点。
- F 接收来自上方数据流节点的数据。
- 下方数据流节点丢弃来自F的数据。下方数据流节点是指接收来自F的数据的节点。
- 下方数据流的节点接收来自F的数据。
在单周期定时循环中,握手是非常必要的。因为多个周期节点需要不止一个周期来计算有效的数据,但单周期定时循环强制这些节点在每个时钟周期内返回数据。因此,多周期节点不能在每个时钟周期返回有效的数据。为了确保算法的数值精确性,依赖于此数据的节点必须了解该数据为有效数据还是无效数据。
NI已经建立了可与单周期定时循环内的特定节点配合使用的握手协议。协议包含下列接线端:
- 输入有效-指定下一个数据已经到达并等待处理。
- 输出有效-指示节点当前处理的数据有效,且准备用于下方数据流节点。
- 准备输出-指定数据流节点是否接收新的数据。
- 准备输入-指示节点在下一个时钟周期是否接收新的数据。
确保单输入节点使用有效的数据
假设在单周期定时循环中有3个单输入函数:上方数据流函数U、函数F及下方数据流函数D。这些函数的输入值为x,并在指定时钟周期后产生输出数据。下图给出了使用NI建议的握手协议连线U、F和D的方法。
在上图中,连线端的数值取决于下列步骤:
- U发送有效数据至F时,F的输入有效接线端的值变为TRUE。TRUE表示U已经产生了有效的输出值,并已发送该值至F。如要使用该逻辑,连线U的输出有效接线端至F的输入有效接线端。即F能够获知U何时产生有效的输出值。
- F的输入有效接线端接收到TRUE值后,F开始计算结果。F计算结果时,F的输出有效接线端返回FALSE。当下列2个标准均满足时,输出有效接线端返回TRUE。
- 自F开始计算结果以来,至少已经过L f个时钟周期,其中L f是F的延迟时间。在函数的配置对话框中可查看函数的延迟。双击函数可打开函数配置对话框。
- F的准备输出接线端为TRUE。该接线端通知F,何时D已经准备好从F接收输入值。如要使用该逻辑,可通过反馈节点将D的准备输入接线端连线至F的准备输出接线端。由于反馈节点默认情况下需要一个执行时间周期,F将在D发送数据后的一个时钟周期接收到该值。
- 如果将F的输出有效接线端连线至D的输入有效接线端,D就会知道F何时生成了有效值,并将该值发送给D。此逻辑与步骤1中的逻辑类似。除F变为上面数据流函数外,D执行的进程均相同。
- 如在下一个时钟周期,F可接收另一个有效输入数据点,F的输入就绪接线端会返回TRUE。如要使用该逻辑,通过反馈节点连线F的准备输入接线端至U的准备输出接线端。即U可获知F何时准备好接收新的输入值。由于反馈节点默认情况下需要一个执行时间周期,U将在F发送数据后的一个时钟周期接收到该值。
| 提示如要获取高吞吐率,请在F的吞吐率输入控件中输入较小的值。F接收到有效输入并开始计算结果后,在F可接收下一个有效输入前至少已经经过了T f个时钟周期,其中T f为F的吞吐率控件值。因此,吞吐率控件的较小的值意味着相对于较大的吞吐率值,F能够更快的接收到下一个有效输入数据。小吞吐率值还意味着相对于较大的吞吐率值,F的准备输入接线端能够更早的返回TRUE。 |
确保多输入节点使用有效的数据
“高吞吐率加”函数为多输入函数,因此此函数有2个输入端x和y。在单周期定时循环中,必须确保在同一个时钟周期内的x和y均有效。如仅一个输入端有效,另一个输入端无效。函数将使用一个有效输入值和一个无效输入值计算输出数据。
为了确保有效x和y在同一个时钟周期内到达,给所有为x提供数据的节点添加延迟。然后给为y提供数据的所有节点提供延迟。2个延迟的总和必须相等。如果延迟总和不同,可为延迟短的路径(具有最低延迟总和的路径)添加反馈节点,直至x和y路径的延迟总和相等。
关于演示如何在多输入握手应用中平衡延迟路径的范例,见labview\examples\target_type \FPGA Fundamentals\FPGA Math and Analysis\High-Throughput Math\Vector Normalization\Vector Normalization.lvproj,其中target_type为CompactRIO或R Series,具体取决于所安装的驱动程序。
支持握手机制的节点
下列节点支持握手接线端:
- FFT Express VI
- 握手方法节点
- 高吞吐率数学函数,除基本元素函数外。
- 线性代数函数
- 配置DRAM时的存储器方法节点
- FIFO方法节点,已启用握手接口
- 有理重采样 Express VI
- 缩放窗口 Express VI
- 用户控制I/O采样函数
支持多通道握手的节点
下列节点支持多通道握手:
- 有理重采样 Express VI
对于多通道节点,LabVIEW交错分配值,进而第一个有效数据进入第一个通道,第二个有效数据进入第二个通道,以此类推。如在通道扫描过程中,输入有效变为FALSE,对应下一个通道的下一个有效值立即进入队列。如下列示意图所示。
在示意图中,d0、d1和d2为3个接收数据的通道。注意每次输入有效接线端变为FALSE,然后又转换为TRUE时,对应下一个通道的下一个有效数据立即进入队列。
确定最快的可用吞吐率
对于单周期定时循环内部的一系列连接节点,最快吞吐率是指可发送更多数据至系列节点的最少时钟周期数。最快吞吐率等于系列中最慢的节点的吞吐率(即带有最大值吞吐率输入控件的节点)。此节点为所有节点的瓶颈。如系统以高于此最快吞吐率的速率向节点发送数据(即发送数据至节点时,系统等待的时钟周期少于最小允许的时钟周期数量),LabVIEW将丢弃该数据。
如要判定节点的最快吞吐率,首先查看该节点的吞吐率输入控件确定每个节点的吞吐率。双击节点或显示节点的即时帮助窗口可查看控件信息。具有最大值(即最慢的节点)的吞吐率输入控件为系统可发送数据至此系列函数的最快速率(即最少的时钟周期数)。
例如,假设一系列节点中,最慢节点吞吐率为32周期/样本,FPG终端A的时钟速率为40MHz,输入采样率为2MS/s。时钟速率除以输入采样率得到系统吞吐率,即40000000周期/ 2000000样本(20周期/样本)。此时,系统每20个时钟周期发送数据至节点,该周期比最快吞吐率32个时钟周期要快。这将导致LabVIEW丢弃数据。