整数データタイプを使用する
- 更新日2025-03-06
- 3分で読める
数値関数を使用して、FPGAで整数演算を実行できます。
整数演算を実行すると、オーバーフローが起こる場合があります。整数のオーバーフローは、数学演算の結果が出力データタイプの範囲を超えると起こります。たとえば、U8整数の範囲は0~255です。200 + 70のように2つのU8整数を加算した結果が255を超えると、オーバーフローが起こります。オーバーフローが起こると、結果はロールオーバーされ、モジュロ256 (256で割った余り) が返されます。たとえば、U8整数で結果が270の場合、256で折り返され、14が返されます。
アプリケーションによってはこのオーバーフローによるロールオーバーを有効に利用することができます。たとえば、実行時間の測定の例では、適切な演算を行うためにオーバーフローの繰り越しの作用を利用しています。この例では、「ティックカウント」Express VIが8ビットの内部カウンタのサイズ、そしてカウンタ単位がミリ秒に構成されます。「ティックカウント」Express VIの内部カウンタが255 msに達すると、0に繰り越されます。最初の「ティックカウント」Express VIは、132 msのティックカウントを返し、測定するLabVIEWコードの実行時間は140 msで、内部カウンタの繰り越しが起こり、2番目の「ティックカウント」Express VIは16 msのティックカウント値を返します。ブロックダイアグラムで16から132が減算されると、オーバーフローが起こり、結果値は140になります。
メモ 「ティックカウント」Express VIの実行時間は1サイクルです。このサンプルでは、カウンタ単位をmSecの代わりにティックに設定すると、シーケンス中のLabVIEWコードの実行時間が140ティックの場合でも減算で返される結果は141です。
以下の方法を使用して、整数のオーバーフローを回避してください。
- 数値データタイプの使用を評価します。
- より大きな出力データタイプを使用する。大きな出力データタイプを使用する場合、FPGAターゲットで必要な領域が増加しますが、より迅速および簡単に正確なデータを受信するようにFPGA VIをプログラムすることが可能です。
- 「2の累乗でスケール」関数を使用して、固定小数点入力値の振幅を減少します。「2の累乗でスケール」関数を定数n入力と使用する場合、スケールにFPGAリソースは使用されません。ただし、これにより精度が低下します。すべての入出力を正しくスケールするには、FPGA VIをプログラムする必要もあります。
- 「単精度浮動小数に変換」関数を使用して、整数を単精度浮動小数点データタイプに変換します。