理解仲裁选项
- 更新时间2025-03-06
- 阅读时长4分钟
FPGA模块的可用仲裁选项如下:
- 始终仲裁
- 仅在多个请求时仲裁
- 从不仲裁
判定器在仲裁过程中执行下列通用步骤:
- 等待一个或多个请求方。多个请求方请求访问时,通过判定器确定执行的请求方。 注: 判定器最终确定的多个请求方的执行顺序为非确定性的。
- 从访问方传递数据至资源接口。
- 开始资源执行。
- 等待资源完成执行。
- 将数据传递回访问方。
- 准备下一次执行的资源。
- 等待下一个请求方。
仲裁需要使用大量的FPGA资源。如将资源接口的请求方数量在整个FPGA VI层次结构中减少为一个,可使用仅在有多个请求方时仲裁或从不仲裁仲裁选项。单个请求方不需要使用仲裁。
始终仲裁
即使仅有一个请求方请求访问,带有始终仲裁选项的资源接口也会一直使用仲裁器。始终仲裁仲裁器采用公正的轮询机制,能够确保按顺序访问共享资源。在下一个等待的请求方成为访问方之前,判定器不允许当前请求方再次成为访问方。因此,同步请求方超出一个时将产生抖动。
需要单个请求方通道与多个请求方通道同步时,选择始终仲裁选项。关于同步通道的信息,见启用仲裁的定时FPGA VI。
仅在多个请求时仲裁
带有仅在有多个请求方时仲裁选项的资源接口仅在FPGA VI包含不止一个请求方时使用仲裁器。如果资源接口具有多个请求方,即使请求方未同步,LabVIEW也会生成仲裁电路。如果共享资源在整个FPGA VI层次结构中仅包含一个请求方,使用仅在有多个请求方时仲裁仲裁选项可节省FPGA VI的时间和空间。
在下列情况下使用仅在有多个请求方时仲裁:
- FPGA VI较大且需要节省空间。
- 在整个FPGA VI层次结构中资源接口仅有一个访问方。
- 单个请求方通道不需要与多个请求方通道同步。关于同步通道的信息,见启用仲裁的定时FPGA VI。
- 在单周期定时循环内使用配置为读取或写入方法的FIFO方法节点。
- 在单周期定时循环内使用配置为读取或写入方法的存储器方法节点。
- 在单周期定时循环内使用数字输出。
从不仲裁
如果您为资源接口选择从不仲裁选项,则LabVIEW不会添加仲裁组件,显著节约了FPGA资源。除了节省资源,从不仲裁选项还使一些FPGA I/O和FIFO函数可在单时钟周期内执行。但对于多个请求方的情况,多个信号将被合并为一个信号,从而导致产生额外的逻辑占用。要使用从不仲裁选项,您必须保证按顺序访问FPGA VI数据流中的资源接口,如下图所示。
在上图中,平铺式顺序结构确保两个FIFO方法节点同时执行,资源竞态不会发生。在这种情况下,从不仲裁是一个合适的选项。但如果选择了从不仲裁选项并发出同步请求,FPGA VI的行为将无法定义且可能发生数据冲突。
仿真包含多个处理器的存储器项的FPGA应用时,选择从不仲裁选项可能导致错误行为。例如,应用程序包含多个写入方,每个写入方可在仿真时更新指定的存储器地址。此外,如应用程序包含多个读取方,每个读取方可在仿真时读取指定的存储器地址。