単精度浮動小数点データタイプを使用する
- 更新日2025-03-06
- 4分で読める
単精度浮動小数点 (SGL) データタイプは24ビット固定小数点データタイプよりも高い確度を提供しますが、関数のレイテンシが増加し、多数のFPGAリソースを使用することで、全体的なパフォーマンスは低下します。数値データタイプの使用を評価して、どのデータタイプが設計に最適かを決定します。
以下の一覧は、単精度浮動小数点データタイプでFPGAアプリケーションを開発する際の注意事項です。
- FPGAモジュールは、倍精度または拡張精度の浮動小数点データタイプをサポートしません。
- すべてのFPGAターゲットはSGLデータタイプをサポートしています。
- 特定の関数のみがSGLデータタイプをサポートしています。
- 高スループット数学関数はSGLデータタイプをサポートしていません。
- 関数の実行には複数回のクロックサイクルが必要ですが、ハンドシェイク信号がないため、ほとんどの関数はシングルサイクルタイミングループ内で単精度浮動小数点演算を実行できません。
- FPGA VIでのデータタイプ強制変換は、特に端子をSGLデータタイプに強制変換する際に、大量のFPGAリソースを消費します。
- FPGAモジュールは、シングルサイクルタイミングループ内でのSGLデータタイプへの強制変換をサポートしていません。
- FPGAモジュールでは、非正規数をサポートしていないことを除き、SGLデータタイプはIEEE Std 754-2008に準拠しています。たとえば、「等しい?」関数を使用してホストおよびターゲット間でビット確度を比較する場合、操作で非常に小さい数値が発生すると、関数はFALSEの結果を返します。このようなエラーがフィードバックループでも伝播し、データの精度が下がることがあります。
- FPGA上でのNaN出力のビットパターンは、開発コンピュータ上でのNaN出力と異なる場合があります。
- FPGAで実行された単精度浮動小数点計算の結果は、シミュレーションで行われた単精度浮動小数点の計算結果と異なる場合があります。
シングルサイクルタイミングループ内の単精度浮動小数点演算
関数の実行には複数回のクロックサイクルが必要ですが、ハンドシェイク信号がないため、ほとんどの関数はシングルサイクルタイミングループ内で単精度浮動小数点演算を実行できません。単精度浮動小数点データを持つシングルサイクルタイミングループの内側では、以下の機能がサポートされています。
- IP統合ノード
- Xilinx IP
- メモリ項目
- FIFO
- レジスタ
- ローカル変数とグローバル変数
- 「非数/無効パス/非Refnum?」関数
- 「選択」関数
FIFOを使用して単精度浮動小数点データをシングルサイクルタイミングループに渡す方法の例は、以下のFPGA VIを参照してください。
上のループは、データがシングルサイクルタイミングループ外の「二乗」および「加算」関数を通過していることを示しています。その後に中間結果がFIFOメソッドノードを介してシングルサイクルタイミングループに渡り、データの平方根を計算します。最後にDMA FIFOは結果をホストコンピュータに返します。
FPGAアプリケーションを単精度浮動小数点データタイプで設計する
単精度浮動小数点演算を使用してFPGAアプリケーションを設計する際は、以下の使用を検討してください。
他の操作を実行するようにホストプロセッサを解放し、I/Oで単精度浮動小数点変換を使用
I/O変換をFPGAに実行することで、特にリアルタイムシステムでホストコンピュータ上の処理を解放します。使用可能なFPGAリソースがある場合、FPGA上で固定小数点I/Oの単精度浮動小数点データへの変換を実行して、リアルタイムの要件を満たすなど他の操作の実行にホストプロセッサを解放します。
複数の入力または出力からデータを操作
非同一データパスをSGLデータタイプに変換して、一般的なコードでそれらを処理します。この変換は、異なる固定小数点データタイプを返す複数の入力からのデータを操作する場合に役立ちます。
以下のFPGA VIは、2つのモジュールからデータを取得して、SGLデータタイプに変換し、データをDMA FIFOに書き込むNI cRIO-9104を示しています。