ブロックの固定小数点属性の指定
固定小数点のブロック パラメーター
固定小数点がサポートされるツールボックス ブロックでは、通常ブロック パラメーターを使用して固定小数点の特性を指定できます。これらの固定小数点パラメーターにデータ型とスケーリング情報を指定することにより、ターゲット ハードウェアをより正確にシミュレートできます。
メモ
浮動小数点継承は、この節で説明されている設定より優先されます。ブロックに浮動小数点入力がある場合、すべてのブロック データ型は入力にマッチします。
大半の固定小数点パラメーターは、ツールボックス ブロックの [データ型] ペインに表示されます。次の図は一般的な [データ型] ペインです。
固定小数点機能をもつすべてのツールボックス ブロックが一連の一般的なパラメーターを共有していますが、各ブロックがこれらの固定小数点パラメーターの異なるサブセットをもつ場合もあります。次の表に、最も一般的な固定小数点ブロック パラメーターの概要を示します。
固定小数点データ型のパラメーター | 説明 |
---|---|
丸めモード | 指定のデータ型とスケーリングで固定小数点演算の結果を正確に表現できない場合に使用する、ブロックの丸めモードを指定します。 使用可能なオプションについての詳細については、丸めモードを参照してください。 |
整数オーバーフローで飽和 | このパラメーターをオンにすると、ブロックは固定小数点演算の結果を飽和させます。このパラメーターをオフにすると、ブロックは固定小数点演算の結果をラップします。 飽和およびラップの詳細については、固定小数点演算のオーバーフローの処理を参照してください。 |
中間の乗算器 | 固定小数点ブロックの中間の乗算器データ型とスケーリングを指定します。乗算の結果を乗算器の入力に戻すブロックは、中間の乗算器データ型を使用します。 特定のブロックの中間の乗算器データ型については、そのブロックのリファレンス ページを参照してください。 |
乗算出力 | 乗算結果の計算が必要とされる固定小数点ブロックの、乗算出力のデータ型とスケーリングを指定します。 特定のブロックの乗算出力データ型については、そのブロックのリファレンス ページを参照してください。複素数と複素数の乗算の場合、乗算の結果はアキュムレータのデータ型になります。ツールボックス ソフトウェアにおける複素数の固定小数点乗算の詳細については、乗算のデータ型を参照してください。 |
アキュムレータ | その後の計算用に加算結果を保持しなければならない固定小数点ブロックの、アキュムレータ (加算器) のデータ型とスケーリングを指定します。通常の場合、そのようなブロックは加算演算 (総和) を行う前に、アキュムレータのデータ型へのキャストを行います。 特定のブロックのアキュムレータのデータ型についての詳細については、そのブロックのリファレンス ページを参照してください。 |
出力 | ブロックの出力データ型とスケーリングを指定します。 |
データ型アシスタントの使用
[データ型アシスタント] は、一部の Fixed-Point Designer™ ブロックの [データ型] ペインで使用できる対話型のグラフィカル ツールです。
ブロックのデータ型パラメーターの指定を簡易化できる [データ型アシスタント] の使用の詳細については、データ型アシスタントを利用したデータ型の指定 (Simulink)を参照してください。
信号範囲の確認
一部の Fixed-Point Designer ブロックでは、[データ型] ペインに [最小] パラメーターと [最大] パラメーターがあります。固定小数点データ型にこれらのパラメーターがある場合、範囲確認の目的で適切な最小値と最大値を指定することができます。
信号範囲の指定および信号範囲の確認を有効にする方法の詳細については、信号範囲の指定 (Simulink)を参照してください。
システム レベルの設定の指定
固定小数点ツールを使用して、Fixed-Point Designer ブロックの固定小数点の設定をシステム レベルまたはサブシステム レベルで監視したり、制御したりできます。詳細については、固定小数点ツール (Fixed-Point Designer)を参照してください。
ログ記録
固定小数点ツールは、Fixed-Point Designer ブロックで発生したオーバーフロー、飽和、シミュレーションの最小値と最大値についてのログを記録します。[コンフィギュレーション パラメーター] ダイアログ ボックスの [診断]、[データの整合性] ペインで Data overflow
行が [なし]
に設定されている場合、固定小数点ツールはログにオーバーフローと飽和を記録しません。
オートスケーリング
固定小数点ツールのオートスケーリング機能を使用して、ツールボックスの固定小数点データ型のスケーリングを設定できます。
データ型オーバーライド
ツールボックスのブロックは、固定小数点ツールの [データ型オーバーライド] パラメーターの [ローカル設定を使用]
、[double]
、[single]
および [オフ]
のモードに従います。[スケーリングされた double]
モードは、ツールボックスのソース ブロックおよびバイト入れ替え用ブロック、Difference や Normalization などの一部の算術演算ブロックでもサポートされます。
スケーリングされた double は、固定小数点のスケーリング情報を保持する double データ型です。データ型オーバーライドを使用して、固定小数点データ型を、スケーリングされた double に変換できます。その後、シミュレーションを行い、システムの理想的な浮動小数点動作を決定することができます。その情報を収集した後、データ型オーバーライドをオフにして固定小数点データ型に戻すことができます。元のスケーリング情報は、スケーリングされた double データ型で保持されたため、データにはこの情報が残っています。
内部ルールによる継承
モデル内の固定小数点パラメーターに適した語長とスケーリングの選択判断が難しいこともあります。選択を支援するため、[アキュムレータ] および [乗算出力] 信号など固定小数点ブロックのデータ型パラメーターの多くで [内部ルールによる継承]
オプションを使用できます。以下の節では、ツールボックス ソフトウェアで固定小数点ブロックのデータ型パラメーターに [内部ルールによる継承]
を選択した場合に、語長と小数部の長さがどのように選択されるかについて説明します。
メモ
以下の節にある方程式では、WL が語長を、FL が小数部の長さを示します。
アキュムレータのデータ型の内部ルール
アキュムレータのデータ型の内部ルールは、まず理想的な完全精度の結果を計算します。ここで、N は加数の数です。
たとえば、長さが 6、データ型が sfix10_En8 のベクトルの全要素を総和する場合を考えてみます。理想的な完全精度の結果は語長が 13 で小数部の長さは 8 になります。
アキュムレータは、実数または複素数です。前の方程式は、アキュムレータの実数部と虚数部の両方に使用されます。すべての計算において、完全精度の結果が計算された後、内部ルールで最終的に設定される語長と小数部の長さが、実際のハードウェアの影響を受ける場合があります。詳細については、[ハードウェア実行] ペインが内部ルールに及ぼす影響を参照してください。
乗算器データ型の内部ルール
乗算器データ型の内部ルールは、まず理想的な完全精度の結果を計算します。
たとえば、長さが 2、データ型が sfix10_En8 の実数ベクトルの要素を乗算する場合を考えてみます。理想的な完全精度の結果は語長が 20 で小数部の長さは 16 になります。
実数と複素数の乗算では、結果の実数部と虚数部の両方に、理想的な語長と小数部の長さが使用されます。複素数と複素数の乗算の場合、部分的な乗算器には理想的な語長と小数部の長さが使用され、最終的な加算器には上述のアキュムレータのデータ型の内部ルールが使用されます。すべての計算において、完全精度の結果が計算された後、内部ルールで最終的に設定される語長と小数部の長さが、実際のハードウェアの影響を受ける場合があります。詳細については、[ハードウェア実行] ペインが内部ルールに及ぼす影響を参照してください。
出力データ型の内部ルール
ブロック出力における [内部ルールによる継承]
オプションは、いくつかのツールボックス ブロックで使用できます。これらの状況で使用される内部ルールはブロックに固有のもので、方程式はブロックのリファレンス ページに一覧表示されています。
アキュムレータや乗算器のデータ型の場合と同様に、内部ルールで設定される最終出力の語長と小数部の長さは、特定のハードウェアによる影響を受けます。詳細については、[ハードウェア実行] ペインが内部ルールに及ぼす影響を参照してください。
[ハードウェア実行] ペインが内部ルールに及ぼす影響
内部ルールによって、使用しているハードウェアに適した語長と小数部の長さが選択されます。内部ルールを使用して最良の結果を得るには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [ハードウェア実行] ペインで使用するハードウェアのタイプを指定しなければなりません。このダイアログ ボックスを開くには、Simulink® ツールストリップで [モデル化]、[モデル設定] をクリックします。
ASIC/FPGA. ASIC/FPGA ターゲットの場合、内部ルールにより計算された理想的な完全精度の語長と小数部の長さが使用されます。計算結果の理想的な語長が、許可されている最大語長より大きい場合、エラーが表示されます。
その他のターゲット. ASIC/FPGA 以外のすべてのターゲットについては、内部ルールにより計算された理想的な完全精度の語長が、ターゲットの次に使用可能な語長に丸められます。計算された理想的な小数部の長さが使用され、最下位ビットが保持されます。
乗算器データ型の計算された理想的な語長が、ターゲットの最大語長より大きい場合、エラーが表示されます。アキュムレータまたは出力のデータ型の計算された理想的な語長が、ターゲットの最大語長より大きい場合、最大のターゲット語長が使用されます。
どのターゲットでも Simulink およびツールボックス ソフトウェアで許可される最大語長は 128 ビットです。
内部ルールの例
以下の節では、内部ルールが [ハードウェア実行] ペインとどのように連携してアキュムレータのデータ型および乗算器データ型を計算するかの例を示します。
アキュムレータのデータ型
ex_internalRule_accumExp
モデルを開きます。
Differenceブロックでは、[アキュムレータ] パラメーターが Inherit: Inherit via internal rule
に設定され、[出力] パラメーターが Inherit: Same as accumulator
に設定されています。したがって、内部ルールにより計算されたアキュムレータのデータ型が、モデルの出力信号に表示されます。
前のモデルでは、[コンフィギュレーション パラメーター] ダイアログ ボックスの [ハードウェア実行] ペインの [デバイス タイプ] パラメーターが ASIC/FPGA
に設定されています。したがって、内部ルールで使用されるアキュムレータのデータ型は、理想的な完全精度の結果になります。
モデル内の各 Difference ブロックについて完全精度の語長を計算します。
完全精度の小数部の長さを計算します。この例ではすべての Matrix Sum ブロックで同じ長さです。
次に、[コンフィギュレーション パラメーター] ダイアログ ボックスにある [ハードウェア実行] ペインの [デバイス タイプ] パラメーターを、32-bit Embedded Processor
に設定します。次の図に示すように各パラメーターを変更してください。
ダイアログ ボックスからわかるように、このデバイスでは 8、16 および 32 ビットの語長を使用できます。したがって、内部ルールで計算された理想的な語長である 10、17 および 128 ビットは使用できません。内部ルールは、代わりに次に使用できる最大語長を各ケースで使用します。このことは、次の図のようにモデルに戻ると確認できます。
乗算器データ型
ex_internalRule_prodExp
モデルを開きます。
Array-Vector Multiplyブロックでは、[乗算出力] パラメーターが Inherit: Inherit via internal rule
に設定され、[出力] パラメーターが Inherit: Same as product output
に設定されています。したがって、内部ルールにより計算された乗算出力データ型が、モデルの出力信号に表示されます。この例では実数値を使用するため、[アキュムレータ] パラメーターの設定は重要ではありません。
前のモデルでは、[コンフィギュレーション パラメーター] ダイアログ ボックスにある [ハードウェア実行] ペインの [デバイス タイプ] パラメーターが ASIC/FPGA
に設定されています。したがって、内部ルールで使用される乗算器データ型は、理想的な完全精度の結果になります。
モデル内の各 Array-Vector Multiply ブロックについて完全精度の語長を計算します。
完全精度の小数部の長さを計算します。この例ではすべての Array-Vector Multiply ブロックで同じ長さです。
次に、[コンフィギュレーション パラメーター] ダイアログ ボックスにある [ハードウェア実行] ペインの [デバイス タイプ] パラメーターを、次の図に示すように 32-bit Embedded Processor
に設定します。
ダイアログ ボックスからわかるように、このデバイスでは 8、16 および 32 ビットの語長を使用できます。したがって、内部ルールで計算された理想的な語長である 12 および 31 ビットは使用できません。内部ルールは、代わりに次に使用できる最大語長を各ケースで使用します。このことは、次の図のようにモデルに戻ると確認できます。
固定小数点ブロックのデータ型の指定
以下の節では、固定小数点ツールを使用して ex_fixedpoint_tut
モデルの固定小数点ブロックに適切なデータ型を選択する方法を説明します。
モデルの準備
ex_fixedpoint_tut
モデルを開きます。
このモデルは Cumulative Sum ブロックを使用して、Fixed-Point Sources サブシステムから受け取った入力の和を求めます。Fixed-Point Sources サブシステムは、データ型の異なる 2 つの信号を出力します。
Signed ソースの語長は 16 ビット、小数部の長さは 15 ビットです。
Unsigned ソースの語長は 16 ビット、小数部の長さは 16 ビットです。
モデルを実行してオーバーフローが起きていないか確認します。MATLAB はコマンド ラインに次の警告を表示します。
Warning: Overflow occurred. This originated from 'ex_fixedpoint_tut/Signed Cumulative Sum'. Warning: Overflow occurred. This originated from 'ex_fixedpoint_tut/Unsigned Cumulative Sum'.
これらの警告によると、両方の Cumulative Sum ブロックでオーバーフローが発生しています。
このモデルのオーバーフローについて調査するには、固定小数点ツールを使用します。固定小数点ツールを開くには、モデルのメニューから [ツール]、[固定小数点]、[固定小数点ツール] を選択します。[固定小数点のインストルメンテーション モード] パラメーターを [Minimums, maximums and overflows]
に設定して、モデルのすべてのブロックでログ機能をオンにします。
ログ機能をオンにしたら、シミュレーション ボタンをクリックしてモデルに戻ります。
シミュレーションの結果が固定小数点ツールの中央にある [コンテンツ] ペインに表として表示されます。以下の列を確認してください。
名前: 各信号の名前。
Subsystem Name/Block Name: Signal Name
の形式で表示されます。SimDT: ログに記録される各信号のシミュレーション データ型。
SpecifiedDT: 各信号のブロック ダイアログで指定されたデータ型。
シミュレーションの最小値: ログに記録される各信号のシミュレーション中に得られた表現可能な最小値。
シミュレーションの最大値: ログに記録される各信号のシミュレーション中に得られた表現可能な最大値。
OverflowWraps: シミュレーション中にラップするオーバーフロー数。
アキュムレータのデータ型の [シミュレーションの最小値] と [シミュレーションの最大値] の値が 0 ~ .9997 の範囲にあることもわかります。ログの結果には、Signed Cumulative Sum ブロックのアキュムレータのデータ型でシミュレーション中に 8,192 個のオーバーフローがラップしたことが示されています。同様に、Unsigned Cumulative Sum ブロックのアキュムレータのデータ型では、シミュレーション中に 16,383 個のオーバーフローがラップしています。
これらの各データ型についての詳細を見るには、[コンテンツ] ペインでデータ型を強調表示して [選択した結果の詳細を表示] ボタンをクリックします。
32 ビット整数がサポートされるターゲット ハードウェアを仮定して、両方の Cumulative Sum ブロックでアキュムレータの語長を 32 に設定します。これには以下の手順を実行してください。
固定小数点ツール ペインの
Signed Cumulative Sum: Accumulator
列を右クリックし、[モデル内のブロックの強調表示] を選択します。モデル内のブロックをダブルクリックし、ダイアログ ボックスの [データ型] ペインを選択します。アキュムレータのデータ型の行にあるアシスタント ボタンをクリックして、アキュムレータの [データ型アシスタント] を開きます。[モード] を
[Fixed Point]
に設定します。現在指定されているデータ型の表現可能な範囲を確認するには、[固定小数点の詳細] リンクをクリックします。ツールに現在のデータ型で表現可能な最大値と最小値が表示されます。
[語長] を 32 に変更し、[固定小数点の詳細] セクションの [詳細の更新] ボタンをクリックして、更新された表現可能な範囲を確認します。[語長] パラメーターの値を変更すると、[データ型] エディット ボックスが自動的に更新されます。
ブロック ダイアログ ボックスで [OK] をクリックし、変更を保存してウィンドウを閉じます。
Unsigned Cumulative Sum ブロックのアキュムレータのデータ型の語長を 32 ビットに設定します。これには次の 2 つの方法があります。
アキュムレータのデータ型パラメーターの [データ型] エディット ボックスに、データ型
fixdt([],32,0)
を直接入力します。Signed Cumulative Sum ブロックのアキュムレータのデータ型の語長を 32 ビットに変更したときと同じ手順を実行します。
語長の変更を確認してオーバーフローをチェックするには、モデルを再実行します。これを行うには、固定小数点ツールの [シミュレーション] ボタンをクリックします。
固定小数点ツールの [コンテンツ] ペインが更新されて、最後に行ったシミュレーションではオーバーフローが発生しなかったことを確認できます。ただし、[シミュレーションの最小値] と [シミュレーションの最大値] の値の範囲は 0 ~ 0 になっています。このアンダーフローは、アキュムレータのデータ型の小数部の長さが小さすぎるために発生します。[SpecifiedDT] ではデータ値の精度を表すことができません。以下の節では、浮動小数点のベンチマークを取得して、固定小数点ツールを用いて小数部の長さを推奨する方法を説明します。
データ型オーバーライドを使用した浮動小数点ベンチマークの取得
固定小数点ツールの [データ型オーバーライド] 機能を使用して、モデルに指定されているデータ型を浮動小数点型でオーバーライドすることができます。モデルを [double]
のオーバーライド モードで実行すると、使用している固定小数点データ型に適した小数部の長さを選択するための参照範囲が提示されます。これには以下の手順を実行してください。
固定小数点ツールを開いて [データ型オーバーライド] を
[double]
に設定します。[Run simulation and store active results] ボタンをクリックしてモデルを実行します。
固定小数点ツールの [コンテンツ] ペインで結果を確認します。モデルを
[double]
のオーバーライド モードで実行したので、シミュレーションの最小値と最大値が正確で理想的な表現で得られます。これらの値は [シミュレーションの最小値] と [シミュレーションの最大値] パラメーターに表示されます。上記の手順でシミュレーションの最小値と最大値の正確な参照表現を取得できたので、適切な小数部の長さを選択しやすくなりました。選択を行う前に、アクティブな結果を参照用に保存して、浮動小数点ベンチマークとして使用できるようにします。これを行うには、固定小数点ツールのメニューから [結果] 、 [Move Active Results To Reference] を選択します。モデルのすべての信号について、[実行] 列に表示されるステータスが
Active
からReference
に変わります。
固定小数点ツールを使用した小数部の長さの推奨
[double]
モードのオーバーライドの結果を浮動小数点の参照として保存したので、小数部の長さを推奨する準備が整いました。
データ型に適した小数部の長さを推奨するには、固定小数点ツールで一連の
Active
の結果を使用できなければなりません。結果のアクティブ セットを作成するにはモデルを再実行してください。その後、ツールに各信号でのActive
の結果とReference
の結果の両方が表示されます。[設計の最小/最大値がわからない場合はシミュレーションの最小/最大値を使用] チェック ボックスをオンにします。このモデルではデータ型に設計の最小/最大値を指定していません。したがって、ツールはログに記録された情報を使用して小数部の長さを計算し、推奨します。設計の最小値と最大値の指定については、信号範囲の指定 (Simulink)を参照してください。
[小数部の長さを推奨] ボタン () をクリックします。ツールによって [コンテンツ] ペインの [ProposedDT] 列に推奨データ型が挿入されます。[ProposedMin] 列と [ProposedMax] 列には、推奨される最小値と最大値がそれぞれ表示されます。
結果の確認と推奨スケーリングの受諾
固定小数点ツールで推奨された小数部の長さを受け入れる前に、そのデータ型の詳細を確認することが重要です。そうすることで、実際のデータのうちどの程度を推奨されたデータ型で表現できるかを判断できます。推奨されたデータ型を確認して推奨されたスケーリングを受け入れるには、以下の手順を実行します。
固定小数点ツールの [コンテンツ] ペインには、モデル内のデータ型に推奨される小数部の長さが表示されています。
Signed Cumulative Sum ブロックと Unsigned Cumulative Sum ブロックの両方について、アキュムレータのデータ型に推奨される小数部の長さは 17 ビットです。
特定のデータ型に推奨されるスケーリングについての詳細を取得するには、固定小数点ツールの [コンテンツ] ペインでデータ型を強調表示します。
[Show autoscale information for the selected result] ボタン () をクリックし、強調表示したデータ型のオートスケール情報ウィンドウを開きます。
オートスケール情報ウィンドウが開いたら、[シミュレーションの最小値] および [シミュレーションの最大値] パラメーターの [値] 列および [Percent Proposed Representable] 列を確認します。推奨のデータ型でシミュレーション データの範囲の 100% を表現できることがわかります。
推奨されたデータ型を受け入れるには、推奨されたスケーリングを保持する各データ型について [確定] 列のチェック ボックスをオンにします。その後、[選択した小数部の長さを適用] ボタン () をクリックします。ツールにより、ブロック ダイアログ ボックスで指定したデータ型および [コンテンツ] ペインの [SpecifiedDT] 列が更新されます。
新たに受け入れたスケーリングを検証するには、[データ型オーバーライド] パラメーターの設定を [ローカル設定を使用] に戻してからモデルを実行します。固定小数点ツールの [コンテンツ] ペインで次の詳細を確認できます。
Active
実行の [シミュレーションの最小値] と [シミュレーションの最大値] の値が、浮動小数点のReference
実行の [シミュレーションの最小値] と [シミュレーションの最大値] の値にマッチすること。オーバーフローが発生しなくなったこと。
どちらの Cumulative Sum ブロックでもアキュムレータのデータ型の [SimDT] が [SpecifiedDT] にマッチしないこと。この相違は、Cumulative Sum ブロックは常にその入力信号から [符号属性] の設定を継承するため、[符号属性] は
[自動]
にしか指定できないために生じます。したがって、両方のアキュムレータのデータ型の [SpecifiedDT] がfixdt([],32,17)
になります。ただし、Signed Cumulative Sum ブロックは符号付き入力信号を受け入れるので、そのブロックの [アキュムレータ] パラメーターの [SimDT] も符号付きとなります (fixdt(1,32,17)
)。同様に、Unsigned Cumulative Sum ブロックの [アキュムレータ] パラメーターの [SimDT] はその入力信号から [符号属性] の設定を継承するので、符号なしとなります (fixdt(0,32,17)
)。