固定小数点設計の概念と用語
固定小数点データ型
デジタル ハードウェアでは、数値はバイナリ ワードで格納されます。バイナリ ワードとは固定長の連続ビット (1 と 0) です。この連続する 1 と 0 をハードウェア コンポーネントやソフトウェア関数が解釈する方法はデータ型によって定義されます。
2 進数は浮動小数点または固定小数点データ型として表されます。この節では、固定小数点数、データ型および数学演算に関連するさまざまな用語と概念について説明します。
固定小数点データ型は、ビット単位の語長、2 進小数点の位置、および数値の符号属性 (符号付きまたは符号なしを指定可能) によって特徴付けられます。符号付きの数値とデータ型では正と負の両方の値を表すことができますが、符号なしの数値とデータ型で表すことができるのはゼロ以上の値のみです。
2 進小数点の位置によって、固定小数点の値がスケーリングされて解釈されます。
たとえば、以下は一般化固定小数点数 (符号付きまたは符号なし) を 2 進数で表したものです。
ここで、
bi は i 番目の 2 進数です。
wl はバイナリ ワードのビット数であり、語長とも呼ばれます。
bwl–1 は最上位 (最大) ビット (MSB) の位置です。符号付き 2 進数では、このビットは、数値が正と負のどちらであるかを示す符号ビットです。
b0 は最下位 (最小) ビット (LSB) の位置です。バイナリ ワードのこのビットは、最小値を表すことができます。LSB の重みは次のようになります。
ここで、fractionlength は 2 進小数点の右側のビット数です。
2 進小数点の左側のビットは整数ビットや符号ビットで、2 進小数点の右側のビットは小数ビットです。2 進小数点の左側のビット数は整数部の長さと呼ばれています。この例の 2 進小数点は LSB の 4 桁左に示されています。したがって、この数値には小数ビットが 4 個ある、あるいは小数部の長さが 4 であると言われます。
固定小数点データ型は符号付きまたは符号なしです。
符号付き 2 進固定小数点数は通常、次の 3 つのいずれかの方法で表します。
符号/大きさ –– 符号付きの固定小数点数または浮動小数点数の表現。符号/大きさ表現では、バイナリ ワードの 1 つのビットは常に専用の符号ビットであり、ワードの残りのビットは数値の大きさをエンコードします。符号/大きさ表現を使用した否定は、符号ビットを 0 (正) から 1 (負) へ、または 1 から 0 へ反転することで構成されます。
1 の補数
2 の補数 –– 2 の補数は符号付き固定小数点数を表す最も一般的な方法です。詳細については、2 の補数を参照してください。
符号なし固定小数点数はゼロ以上の数値のみを表現できます。
スケーリング
[勾配 バイアス] 表現では、固定小数点数はスキームに応じてエンコードできます。
ここで、勾配は次のように表現できます。
小数部の勾配の同義語として "勾配調整" という用語が使用されることがあります。
自明のケースでは、勾配 = 1、バイアス = 0 です。int8 などの純粋な整数ではスケーリングは常に自明であり、真の浮動小数点型の single と double でもまた自明です。
整数は "整数格納" と呼ばれることがあります。これは生の 2 進数で、2 進小数点がワードの右端にあると想定されます。システム ツールボックスでは、指数の負の数値を "小数部の長さ" と呼ぶことがあります。
勾配とバイアスは共に固定小数点数のスケーリングを表します。ゼロ バイアスの数では、勾配のみがスケーリングに影響します。2 進小数点位置でのみスケーリングされる固定小数点数は、バイアスがゼロで勾配調整が 1 に等しい Fixed-Point Designer™ [勾配 バイアス] で表した数値に相当します。これは「2 進小数点専用スケーリング」または「2 のべき乗スケーリング」と呼ばれます。
または
システム ツールボックス ソフトウェアでは、この量の語長と小数部の長さを指定することにより、多くのブロックの出力またはパラメーターに固定小数点データ型とスケーリングを定義できます。語長と小数部の長さは、2 進小数点のみの信号についてデータ型とスケーリング情報の全体を定義します。
固定小数点データ型をサポートするすべてのシステム ツールボックス ブロックで、2 進小数点専用スケーリングの信号がサポートされます。Delay や Matrix Transpose などの、データを並べ替えるだけで算術演算を行わない多くの固定小数点ブロックでも [勾配 バイアス] スケーリングをもつ信号がサポートされます。
精度と範囲
丸め手法が呼び出されるかオーバーフローが発生するかを判断するには、シミュレーション内のブロックで選択する固定小数点データ型およびスケーリングの精度と範囲に注意しなければなりません。
範囲
範囲とは、固定小数点データ型とスケーリングで表現できる数値の範囲です。以下は、語長が wl、スケーリングが S、バイアスが B である 2 の補数の固定小数点数で表現可能な数値の範囲です。
任意のデータ型の固定小数点数は、符号付きと符号なしのどちらも、異なるビット パターン数は 2wl です。
たとえば、2 の補数では、ゼロと同様に負の数値も表現しなければならないので、最大値は 2wl–1 です。ゼロの表現は 1 つしかないため、正の数値と負の数値の数が異なります。つまり、-2wl–1 の表現はありますが、2wl–1 の表現はありません。
全範囲とは、データ型の最も広い範囲です。浮動小数点型の場合、全範囲は -∞ ~ ∞ です。整数型の場合、全範囲は、その型が表現できる最小整数値から最大整数値まで (有限) の範囲です。たとえば、符号付き 8 ビット整数の場合は -128 ~ 127 です。
オーバーフローの処理. 固定小数点のデータ型は有限範囲内の数値を表すため、演算の結果がその範囲の数値より大きいか小さい場合、オーバーフローが発生する可能性があります。
システム ツールボックス ソフトウェアでは、オーバーフローを避けるためにデータ型にガード ビットを随時追加することはできません。ガード ビットとは、ハードウェア レジスタとソフトウェア シミュレーションのいずれかで、オーバーフローの場合に情報が失われないようにするためにバイナリ ワードの最上部に追加される特別なビットです。すべてのガード ビットはモデルの初期化時に割り当てられなければなりません。ただし、ソフトウェアでオーバーフローを "飽和" または "ラップ" することは可能です。飽和は、正のオーバーフローを使用範囲内の最大の正の数値として表し、負のオーバーフローを使用範囲内の最大の負の数値として表します。ラップはモジュロ演算を使用して、オーバーフローをそのデータ型の表現可能な範囲内にキャストします。詳細については、モジュロ演算を参照してください。
精度
固定小数点数の精度は、そのデータ型とスケーリングで表現できる連続値間の差異で、最下位ビットの値と等価です。最下位ビットの値、つまり数値の精度は小数部のビット数によって決まります。固定小数点値は、そのデータ型とスケーリングの精度の半分以内で表現できます。この定義の同義語として分解能という用語が使用されることがあります。
たとえば、2 進小数点の右側が 4 ビットの固定小数点の表現は、精度が 2-4、つまり 0.0625 であり、最下位ビットの値になります。このデータ型とスケーリングの範囲内の数値はすべて (2-4)/2、つまり 0.03125 以内で表現でき、これは精度が半分になります。これは有限精度の数値を表す例です。
丸めモード. 数値を有限精度で表す場合、使用可能な範囲のすべての数値を正確に表すことができるとは限りません。数値を指定されたデータ型とスケーリングで正確に表現できない場合、その数値は表現可能な数に "丸め" られます。丸め演算では常に精度が失われますが、演算のコストと生じるバイアスの量は丸めモードによって異なります。コストとバイアスの間のトレードオフにおける柔軟性を高めるため、DSP System Toolbox™ ソフトウェアでは現在、以下の丸めモードがサポートされています。
[正方向]
は、計算結果を正の無限大方向の最も近い表現可能な数値に丸めます。[最も近い偶数方向]
は、計算結果を最も近い表現可能な数値に丸めます。同数の場合、[最も近い偶数方向]
は最も近い偶数に丸めます。これはツールボックスで提供される最もバイアスの小さい丸めモードです。[負方向]
は切り捨てに等しく、計算結果を負の無限大方向の最も近い表現可能な数値に丸めます。切り捨て操作により、1 つ以上の最下位ビットが数値から削除されます。[最も近い正の整数方向]
は、計算結果を最も近い表現可能な数値に丸めます。同数の場合、[最も近い正の整数方向]
は正の無限大方向の最も近い表現可能な数値に丸めます。[最も近い整数方向]
は、計算結果を最も近い表現可能な数値に丸めます。同数の場合、[最も近い整数方向]
は正の数値を正の無限大方向の最も近い表現可能な数値に丸め、負の数値を負の無限大方向の最も近い表現可能な数値に丸めます。[最も簡潔]
は、生成コードに追加される丸めコードの量が最小限になるような丸めモード ([負方向]
または[ゼロ方向]
) を使用して計算結果を丸めます。詳細については、丸めモード: 最も簡潔 (Fixed-Point Designer)を参照してください。[ゼロ方向]
は、計算結果をゼロ方向の最も近い表現可能な数値に丸めます。
これらの各丸めモードの詳細については、丸め (Fixed-Point Designer)を参照してください。
丸めモードを直接比較するには、丸め手法の選択 (Fixed-Point Designer)を参照してください。