Main Content

デジタル ハードウェアでのデータ型とスケーリング

固定小数点データ型

デジタル ハードウェアでは、数値はバイナリ ワードで格納されます。バイナリ ワードとは固定長の連続ビット (1 と 0) です。この連続する 1 と 0 をハードウェア コンポーネントやソフトウェア関数がどのように解釈するかは、データ型によって定義されます。2 進数は固定小数点または浮動小数点データ型として表します。

固定小数点データ型はビット単位の語長、2 進小数点の位置および符号付き/なしによって特徴付けられます。2 進小数点の位置によって、固定小数点の値がスケーリングされて解釈されます。

たとえば、以下は一般化固定小数点数 (符号付きまたは符号なし) を 2 進数で表したものです。

ここで、

  • bii 番目の 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 ビットで構成されるワードは、通常は次のいずれかの科学表記法で表現されます。

bbb.=bbb.×20bb.b=bbb.×21b.bb=bbb.×22.bbb=bbb.×23

指数が 0 より大きいか、-3 未満の場合は、表現には追加のゼロが含まれます。

bbb00000.=bbb.×25bbb00.=bbb.×22.00bbb=bbb.×25.00000bbb=bbb.×28

これらの余分なゼロが 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 コードを生成できます。

関連するトピック