浮動小数点型 - 2021.2 日本語

Vitis Model Composer ユーザー ガイド (UG1483)

Document ID
UG1483
Release Date
2021-10-22
Version
2021.2 日本語

さまざまなライブラリの多くの Model Composer HDL ブロックでは、浮動小数点型がサポートされます。

Model Composer では、Floating-Point Operator v7.1 IP を使用して、加算/減算、乗算、比較、データ型変換などの演算がインプリメントされます。

浮動小数点型のサポートは、浮動小数点演算用の IEEE-754 規格に準拠します。サポートされる HDL ブロックでは、デザイン入力、データ型表示、データ レート、データ型伝搬 (RTP) に対して単精度、倍精度、カスタム精度の浮動小数点型がサポートされます。

浮動小数点型の IEEE-754 規格

次に示すように、浮動小数点型は 1 つの符号ビット (S)、X 指数部ビット、Y 仮数部ビットを使用して記述できます。符号ビットは、常に最上位ビット (MSB) です。

図 1. 浮動小数点データ

IEEE-754 規格によれば、浮動小数点値は正規化された形で表現および格納されます。この形式では、指数値 E がバイアス/正規化された値です。正規化された指数 E は、実際の指数部の値とバイアスの合計と同じです。正規化された形式では、仮数部の値を格納するのに Y-1 ビットが使用されます。F0 仮数ビットは、常に隠しビットで、値は 1 であるとみなされます。

S は値の符号を表します。S が 0 の場合、値は正の浮動小数点になり、それ以外は負の浮動小数点になります。その後の X ビットは、正規化された指数部の値 E を格納するのに使用され、最後の Y-1 ビットは正規化された仮数部の値を格納するのに使用されます。

指数部バイアスは、指数部のビット幅 (桁数) から次の式を使用して計算されます。

Exponent_bias = 2(X - 1) - 1

X は指数部のビット幅です。

IEEE 規格では、単精度浮動小数点データは 32 ビットを使用して記述されます。正規化された指数部および仮数部は、それぞれ 8 ビットと 24 ビットです。単精度の指数部バイアスは 127 です。同様に、倍精度浮動小数点データは合計 64 ビットを使用して記述され、指数部のビット幅は 11、仮数部のビット幅は 53 になります。倍精度の指数部バイアスは 1023 です。

正規化された浮動小数点の値は次のように記述されます。

正規化された浮動小数点値 = (-1)S x F0.F1F2 . FY-2FY-1 x (2)E

実際の指数部の値 (E_actual) は E - Exponent_bias です。隠しビット F0 の値と E_actual 値を 1 とした場合、浮動小数点の数値は次のように計算できます。

FP_Value = (-1)S x 1.F1F2 . FY-2FY-1 x (2)(E_actual)

Model Composer での浮動小数点データ表記

HDL Gateway In ブロックでは、次の図に示すように、ブール型、固定小数点型、浮動小数点型がサポートされます。浮動小数点型を指定した後、SingleDouble、または Custom のいずれかの精度を選択できます。

たとえば、指数部の幅を 9、仮数部の幅を 31 に指定した場合、浮動小数点データ値は合計 40 ビットで、MSB が符号表記に、その後の 9 ビットがバイアス指数部に、残りの 30 ビットが仮数部を格納するために使用されます。

図 2. 浮動小数点の精度

IEEE-754 規格に準拠するため、Single 精度を選択すると、ビット幅は合計 32 ビット (指数部 8 ビット、仮数 24 ビット) になります。Double 精度を選択すると、ビット幅は合計 64 ビット (指数部 11 ビット、仮数部 53 ビット) になります。Custom 精度を選択すると、Exponent width および Fraction width フィールドの値を指定できるようになります (デフォルトは 8 ビットと 24 ビット)。Custom 精度のデータの合計ビット幅は、指数部ビットと仮数部ビットを加算したものになります。Single および Double 精度型の仮数部のビット幅と同様、Custom 精度型の仮数部のビット幅にも隠しビット F0 を含める必要があります。

出力信号のデータ型の表示

レートおよびデータ型が正しく伝搬されると、次の図に示すように、各 HDL ブロックの出力に浮動小数点型が表示されます。この図のように信号のデータ型を表示するには、Display > Signals & Ports > Port Data Types をクリックします。

図 3. 浮動小数点型

浮動小数点型は、XFloat_<exponent_bit_width>_<fraction_bit_width> という形式で表示されます。単精度 (Single) 型は XFloat_8_24、倍精度 (Double) 型は XFloat_11_53 という文字列を使用して表示されます。

カスタム精度 (Custom) 型で指数部のビット幅を 9、仮数部のビット幅を 31 に指定した場合は、XFloat_9_31 のように表示されます。浮動小数点データ値を格納するためには、40 ビットが使用されます。浮動小数点データは基本形式で格納されるので、仮数部の値は 30 ビットに格納されます。

Model Composer では、固定小数点型は XFix_<total_data_width>_<binary_point_width> という形式で表示されます。たとえば、データ幅 40 および 2 進小数点の幅 31 の固定小数点型は、XFix_40_31 と表示されます。

固定小数点型で仮数部の値を格納するのに使用された実際のビット数は、浮動小数点型で使用されるものとは異なります。上記の例では、固定小数点型の仮数部ビットを格納するために 31 ビットすべてが使用されます。

Model Composer では、指数部のビット幅と仮数部のビット幅を使用して、Floating-Point Operator コアのインスタンスが設定および生成されます。

レートおよびデータ型の伝搬

浮動小数点データをサポートする Model Composer HDL でのデータ レートおよびデータ型の伝搬中は、次のデザイン ルールが検証されます。次の違反のいずれかが検出されると、該当するエラー メッセージが表示されます。

  1. 浮動小数点データを転送する信号が浮動小数点型をサポートしない HDL ブロックのポートに接続されている場合。
  2. HDL ブロックのデータ入力 (該当する場合は A および B の両方のデータ入力) とデータ出力が、同じ浮動小数点型でない場合。ブロックの 2 つの入力間と、ブロックの入力と出力間で、DRC チェックが実行されます。

    [Custom] 精度の浮動小数点型を指定した場合、2 つのポートの指数部のビット幅および仮数部のビット幅が比較され、同じデータ型であるかどうかが判断されます。

    注記: Convert および Relational ブロックは、このチェックの対象外です。Convert ブロックでは、2 つの異なる浮動小数点型の間でのデータ型変換がサポートされます。Relational ブロック出力は、常に比較演算に対して true か false の結果を出力するので、常にブール型です。
  3. データ入力が固定小数点型でデータ出力が浮動小数点、またはその逆の場合。
    注記: Convert および Relational ブロックは、このチェックの対象外です。Convert ブロックでは、固定小数点から浮動小数点、浮動小数点から固定小数点への変換がサポートされます。Relational ブロック出力は、常に比較演算に対して true か false の結果を出力するので、常にブール型です。
  4. 浮動小数点型をサポートするブロックの出力のデータ型にユーザー定義の精度が選択されている場合。たとえば、AddSub、Mult、CMult、および MUX などのブロックでは、データ入力が浮動小数点型であれば、サポートされる出力精度は Full のみです。
  5. 浮動小数点型の演算で、Carry In ポートまたは Carry Out ポートが AddSub ブロックに使用されている場合。
  6. Floating-Point Operator IP コアで、その IP 用に定義されている DRC ルールのエラー メッセージが表示された場合。