このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
デジタル ハードウェアでのデータ型とスケーリング
固定小数点データ型
デジタル ハードウェアでは、数値はバイナリ ワードで格納されます。バイナリ ワードとは固定長の連続ビット (1 と 0) です。この連続する 1 と 0 をハードウェア コンポーネントやソフトウェア関数がどのように解釈するかは、データ型によって定義されます。2 進数は固定小数点または浮動小数点データ型として表します。
固定小数点データ型はビット単位の語長、2 進小数点の位置および符号付き/なしによって特徴付けられます。2 進小数点の位置によって、固定小数点の値がスケーリングされて解釈されます。
たとえば、以下は一般化固定小数点数 (符号付きまたは符号なし) を 2 進数で表したものです。
ここで、
bi は i 番目の 2 進数です。
wl はビット単位の語長です。
bwl-1 は最上位 (最大) ビット (MSB) の位置です。
b0 は最下位 (最小) ビット (LSB) の位置です。
2 進小数点は LSB の 4 桁左に示されています。この例の数値は 4 小数ビット、つまり小数部の長さが 4 になります。
固定小数点データ型は符号付きまたは符号なしです。固定小数点値が符号付きか符号なしかにかかわらず、バイナリ ワード内では明確にエンコードされません。つまり、符号ビットはありません。代わりに、コンピューター アーキテクチャ内で符号情報が暗黙的に定義されます。
符号付き 2 進固定小数点数は通常、コンピューター ハードウェアでは次の 3 つのいずれかの方法で表します。
符号/大きさ – バイナリ ワードの 1 つのビットは常に専用の符号ビットで、ワードの残りのビットは数値の大きさをエンコードします。符号/大きさ表現を使用した否定は、符号ビットを 0 (正) から 1 (負) へ、または 1 から 0 へ反転することで構成されます。
1 の補数 – 1 の補数の 2 進数を否定するには、ビット単位の補数が必要になります。つまり、0 はすべて 1 に反転し、1 はすべて 0 に反転します。1 の補数表記ではゼロの表現方法が 2 とおりあります。すべて 0 のバイナリ ワードは"正"のゼロを表し、すべて 1 のバイナリ ワードは"負"のゼロを表します。
2 の補数 – 符号付き 2 の補数表現を使用した否定は、ビット反転 (1 の補数に変換) に 1 のバイナリの追加で構成されます。たとえば、000101 の 2 の補数は 111011 です。
2 の補数は符号付き固定小数点数を表す最も一般的な方法で、Fixed-Point Designer™ のドキュメンテーションでもこの表現が使用されています。
2 進小数点の解釈
2 進小数点によって、固定小数点数がスケーリングされます。2 進小数点を決定するのは通常、ソフトウェアです。加算や減算などの基本的な数学関数を実行する場合、ハードウェアではスケール係数の値にはかかわらず、同じ論理回路が使用されます。つまり、論理回路はスケール係数を認識しません。論理回路では、2 進小数点が b0 の右側にあるかのように、符号付きまたは符号なしの固定小数点 2 進演算を実行します。
Fixed-Point Designer は一般的な 2 進小数点スケーリング V = Q ✕ 2E をサポートしています。V は実際の値、Q は格納された整数値で、固定小数点の指数 E は小数部の長さの負の値に等しくなります。つまり、RealWorldValue = StoredInteger ✕ 2−FractionLength です。
小数部の長さは格納された整数値のスケーリングを定義します。語長は格納された整数が取ることができる値を制限しますが、小数部の長さが取ることができる値は制限しません。ソフトウェアでは、格納された整数 Q の語長に基づいて指数 E
の値が制限されることはありません。E は −FractionLength に等しいため、2 進小数点を小数部と連続するように制限する必要はありません。小数部の長さは負の値または語長より大きい値にできます。
たとえば、符号なしの 3 ビットで構成されるワードは、通常は次のいずれかの科学表記法で表現されます。
指数が 0 より大きいか、-3 未満の場合は、表現には追加のゼロが含まれます。
これらの余分なゼロが 1 に変化することはないため、ハードウェアには表示されません。浮動小数点の指数とは異なり、固定小数点の指数はハードウェアには表示されないので、固定小数点の指数は有限のビット数には制限されません。
語長が 8、小数部の長さが 10、格納された整数値が 5 (バイナリ値 00000101
) の符号付きの値について考えます。実際の値は式 RealWorldValue = StoredInteger ✕ 2−FractionLength を使用して計算されます。この場合は、RealWorldValue = 5 ✕ 2−10 = 0.0048828125 となります。小数部の長さが語長より 2 ビット長いため、格納された整数のバイナリ値は x.xx00000101
となります。ここで、x
は暗黙的ゼロのプレースホルダーです。0.0000000101
(2 進数) は 0.0048828125
(10 進数) と同等です。fi
オブジェクトを使用する例は、語長より大きい小数部の長さを参照してください。
浮動小数点データ型
浮動小数点データ型は、符号ビット、分数 (仮数) フィールドおよび指数フィールドで特徴付けられます。Fixed-Point Designer は、IEEE® Standard 754-1985 for Binary Floating-Point Arithmetic (このガイドでは単純に IEEE Standard 754 と呼ぶ) に準拠し、半精度、単精度、および倍精度のデータ型をサポートしています。
データ型を選択する場合、以下の要因を考慮しなければなりません。
結果の数値範囲
結果で必要な精度
関連する量子化誤差 (丸めモードなど)
例外的な算術条件を処理するための方法
これらの選択は、アプリケーション、使用したコンピューター アーキテクチャ、開発コストなどによって異なります。
Fixed-Point Designer を使用すると、動的デジタル システムのモデル化におけるデータ型、範囲、精度、量子化誤差の関係を調べることができます。Simulink® Coder™ では、そのモデルに基づき量産コードを生成できます。HDL Coder™ を使用すると、Simulink モデルと Stateflow® チャートから移植と合成が可能な VHDL と Verilog コードを生成できます。