单精度浮点型 (SGL)数据相比24位定点数据类型能够提供更高的精度,但由于其增加了函数延时且占用较多的FPGA资源,系统整体性能将被降低。评估数值数据类型的使用量,以确定最适合用户设计的数据类型。

下表详细介绍了使用单精度浮点型数据开发FPGA应用时的应注意事项:

  • FPGA模块不支持双精度或扩展精度浮点数。
  • 全部FPGA终端均支持SGL数据类型。
  • 仅特定函数支持SGL数据类型。
  • 高吞吐率数学函数不支持SGL数据类型。
  • 由于多数函数均需要大于1个时钟周期的执行时间,且不具有握手信号,因为它们仅能在单周期定时循环外执行单精度浮点型运算。
  • FPGA VI中的数据类型强制转换将占用大量的FPGA资源,尤其是接线端被强制转换为SGL数据类型。
  • FPGA模块不支持在单周期定时循环内强制转换为SGL数据类型。
  • 在FPGA模块中,SGL数据类型与IEEE Std 754-2008兼容,但其不支持非规格化数值。例如,如使用“等于?”函数比较主机和终端的位精度,如运算为非常小的数值,函数将返回FALSE结果。上述错误也可能在反馈循环内传输并降低数据精度。
  • FPGA的NaN输出的位模式可能与开发计算机的NaN输出不同。
  • FPGA上执行的单精度浮点型运算结果可能与在仿真中执行的单精度浮点型运算结果不同。

单周期定时循环内的单精度浮点型运算

由于多数函数均需要大于1个时钟周期的执行时间,且不具有握手信号,因为它们仅能在单周期定时循环外执行单精度浮点型运算。下列功能为在单周期定时循环内部使用单精度浮点型数据支持的功能:

  • IP集成节点
  • Xilinx IP
  • 存储器项
  • FIFO
  • 寄存器
  • 局部变量和全局变量
  • 非法数字/路径/引用句柄?函数
  • 选择函数

关于使用FIFO传递单精度浮点型数据至单周期定时循环的范例,见下列FPGA VI。

顶层循环显示了数据流经单周期定时循环外部的“平方”和“加”函数。即时结果随后通过FIFO方法节点被传输至单周期定时循环,以计算数据的平方根。最后DMA FIFO传输结果至主计算机。

设计带有单精度浮点型数据类型的FPGA应用

设计使用单精度浮点型运算的FPGA应用时,请考虑下列因素。

释放主机处理器以执行其他运算,并使用单精度浮点型与I/O转换

执行I/O至FPGA的转换以释放主机空间,尤其针对实时系统。如具有可用的FPGA资源,在FPGA上执行定点I/O至单精度浮点型数据转换释放主机处理器,以执行其他运算。例如,满足实时要求。

执行多个输入或输出端的运算

转换不同的数据路径为SGL数据类型,以使用相同的代码处理数据。对于需要处理来自多个输入端,且具有不同定点数据类型的运算,该转换非常有用。

下列FPGA VI执行下列操作:NI cRIO-9104从两个模块获取数据并将其转换为SGL数据类型,数据被写入至DMA FIFO。