HDL Coder のネイティブ浮動小数点サポート入門
HDL Coder™ でのネイティブ浮動小数点のサポートによって、浮動小数点設計からコードを生成できます。設計に複雑な算術演算および三角関数演算が使用されている場合、またはダイナミック レンジの広いデータが含まれている場合は、ネイティブ浮動小数点を使用します。Simulink® モデルまたは MATLAB® 関数でネイティブ浮動小数点を使用できます。
主な機能
Simulink モデルまたは MATLAB 関数では、次のようになります。
半精度、単精度および倍精度浮動小数点データ型および演算を含めることができます。
整数、固定小数点および浮動小数点の演算の組み合わせを含めることができる。Data Type Conversion ブロックを使用して、浮動小数点データ型と固定小数点データ型間の変換を実行できます。
生成されたコードは、次のようになります。
浮動小数点演算の IEEE 754 標準に準拠する。
ターゲットに依存しない。汎用の FPGA または ASIC にコードを展開できます。
ターゲットの ASIC または FPGA で浮動小数点処理装置またはハード浮動小数点 DSP ブロックを必要としない。
HDL Coder は以下をサポートします。
数学関数と三角関数
Simulink ブロックの大きなサブセット
非正規数
浮動小数点演算子のレイテンシのカスタマイズ
数値に関する考慮事項と IEEE-754 標準準拠
HDL Coder におけるネイティブ浮動小数点テクノロジーは、浮動小数点演算の IEEE 標準に従っています。加算、減算、乗算、除算、逆数などの基本的な算術演算については、ネイティブ浮動小数点モードで HDL コードを生成する場合、得られた数値結果が元の Simulink モデルまたは MATLAB 関数と一致します。
指数、対数、三角関数演算子といった高度な数学演算にはすべて、マシン固有の実装動作が伴います。これは、演算子がテイラー級数や Remez 式に基づく反復的な実装を使用するためです。これらの演算をネイティブ浮動小数点モードで使用する場合、生成された HDL コードと Simulink モデルまたは MATLAB 関数との数値の差は比較的小さくなる可能性があります。これらの数値の差は許容誤差範囲内であり、したがって、IEEE-754 標準に準拠していることが示されます。
IEEE-754 標準に準拠するコードを生成するために、HDL Coder は以下をサポートします。
最も近い整数方向への丸めモード
非正規数
NaN (非数)、Inf、ゼロなどの例外
ULP (Units in the Last Place) および相対精度のカスタマイズ
詳細については、ネイティブ浮動小数点の数値に関する考慮事項を参照してください。
浮動小数点型
単精度
IEEE 754–2008 標準では、単精度浮動小数点数は 32 ビットです。32 ビット数は 1 ビット符号、8 ビット指数および 23 ビット仮数を符号化します。
このグラフは浮動小数点数の正規化表現です。正規数の実際の値は次のように計算することができます。
指数フィールドは、指数に 127 のバイアスが付けられた形で表現されます。仮数のサイズは 24 ビットです。最初のビットは 1 であるため、この表現では下位の 23 ビットが符号化されます。
半精度型より広いダイナミック レンジが必要なアプリケーションには、単精度型を使用します。単精度演算は、倍精度型よりメモリの消費が少なく、レイテンシが低くなります。
倍精度
IEEE 754–2008 標準では、単精度浮動小数点数は 64 ビットです。64 ビット数は 1 ビット符号、11 ビット指数および 52 ビット仮数を符号化します。
指数フィールドは、指数に 1023 のバイアスが付けられた形で表現されます。仮数のサイズは 53 ビットです。最初のビットは 1 であるため、この表現では下位の 52 ビットが符号化されます。
広いダイナミック レンジ、高い正確性と精度が必要なアプリケーションには、倍精度型を使用します。これらの演算は、より大きな FPGA の面積とより低いターゲット周波数を消費します。
半精度
IEEE 754–2008 標準では、半精度浮動小数点数は 16 ビットです。16 ビット数は 1 ビット符号、5 ビット指数および 10 ビット仮数を符号化します。
指数フィールドは、指数に 15 のバイアスが付けられた形で表現されます。仮数のサイズは 11 ビットです。最初のビットは 1 であるため、この表現では下位の 10 ビットが符号化されます。
より狭いダイナミック レンジを必要とし、メモリの消費が少なく、レイテンシが低い、FPGA リソースを節約できるアプリケーションには、半精度型を使用します。
half
型を使用する場合、ブロックの [出力データ型] を既定の設定 [継承: 内部ルールによる継承] ではなく、[half]
に明示的に設定します。パラメーターをプログラムにより変更する方法については、複数のブロックの HDL ブロック パラメーターのプログラムによる設定を参照してください。
データ型の考慮事項
ネイティブ浮動小数点のサポートにより、HDL Coder は浮動小数点信号と固定小数点信号を含む Simulink モデルまたは MATLAB 関数からのコード生成をサポートします。以下を行うために、浮動小数点型を使用する設計をモデル化できます。
表現可能な固定小数点型の範囲外になる可能性のある広いまたは不明なダイナミック レンジをもつアルゴリズムの実装。
固定小数点での設計が難しい複素数演算または三角関数演算の実装。
高い精度と正確性の実現。
浮動小数点設計は、ターゲット ハードウェア上でより多くの面積を占有する可能性があります。Simulink モデルまたは MATLAB 関数では、アルゴリズム データ パスには浮動小数点データ型を使用し、アルゴリズム制御ロジックには固定小数点データ型を使用することが推奨されます。この図は、single
と固定小数点型を使用する Simulink モデルのセクションを示しています。Data Type Conversion ブロックを使用して、single 型と固定小数点型との間の変換を実行できます。