メインコンテンツ

固定小数点の自動変換

ライセンス要件

固定小数点の変換には以下のライセンスが必要です。

  • Fixed-Point Designer™

  • MATLAB® Coder™

固定小数点への自動変換機能

HDL Coder™ プロジェクトに HDL ワークフロー アドバイザーの [固定小数点の変換] の手順を使用すると、MATLAB 浮動小数点コードを固定小数点コードに変換できます。シミュレーション範囲データまたは派生 (静的とも呼ばれる) 範囲データのいずれかまたは両方に基づいてデータ型を推奨するよう選択できます。

静的範囲は手動で入力できます。このように手動で入力した範囲はシミュレーション範囲よりも優先され、データ型の推奨に使用されます。また、推奨された型を変更し、ツールによって変更されないようにロックすることもできます。詳細については、推奨されたデータ型のロックを参照してください。

サポートされている MATLAB の機能と関数のリストは、固定小数点の自動変換でサポートされる MATLAB 言語機能を参照してください。

固定小数点への変換では、次のことができます。

  • コード カバレッジの結果により、テスト ファイルが目的のアルゴリズムの動作範囲のすべてに対応していることを確認。

  • 既定の語長に基づいた小数部の長さの推奨。

  • 既定の小数部の長さに基づいた語長の推奨。

  • 0 または正の整数の最適化。

  • シミュレーションの最小値/最大値データに対する安全余裕の指定。

  • 推奨されたデータ型でプロジェクトをビルドできるかの検証。

  • 固定小数点型を適用してテスト ベンチを実行し、数値をテスト。

  • 各変数で使用されるビットのヒストグラムの表示。

  • オーバーフローの検出。

コード カバレッジ

既定では、固定小数点変換ツールにはコード カバレッジの結果が表示されます。テスト ファイルは、シミュレーション範囲が正確になるよう、動作範囲全体に対してアルゴリズムを実行しなければなりません。推奨される固定小数点データ型の品質は、テスト ファイルが適切な精度でアルゴリズムの動作範囲にどの程度対応しているかによって異なります。コード カバレッジの結果を確認すると、テスト ファイルがアルゴリズムを適切に実行しているか検証できます。コード カバレッジが適切でない場合、テスト ファイルを変更するか、テスト ファイルを追加してカバレッジを大きくします。1 回の実行で複数のテスト ファイルをシミュレートすると、累積カバレッジが表示されます。一方、複数のテスト ファイルを指定して 1 つずつ実行すると、最後に実行したファイルのカバレッジが表示されます。

このツールでは、コードの左側に色分けされたカバレッジ バーが表示されます。

MATLAB function ex_2ndOrder_filter showing color-coded code coverage results to the left of the code.

次の表では色分けを説明します。

カバレッジ バーの色意味

以下のいずれかに該当します。

  • エントリポイント関数が複数回実行され、コードが 1 回を超えて実行される。

  • エントリポイント関数が 1 回実行され、コードが 1 回実行される。

さまざまな緑の色調は、行の実行回数の各範囲を示しています。最も濃い緑の色調は、最大の範囲を示しています。

オレンジエントリポイント関数が複数回実行され、コードが 1 回実行される。
コードが実行されない。

カバレッジ バーの上で一時停止すると、色の強調表示がコード上に拡大されます。コードの各セクションにそのセクションの実行回数が表示されます。

Code coverage results of MATLAB function ex_2ndOrder_filter with extended color highlighting over the code and number of times each section of code executes to the right of the code.

テスト ファイルが目的の動作範囲全体でアルゴリズムをテストしていることを検証するには、コード カバレッジの結果を確認します。

カバレッジ バーの色作業
コードのセクションがカバレッジの表示よりも頻繁に実行されることを想定する場合、MATLAB コードまたはテスト ファイルを変更します。
オレンジこれは初期化コード (永続変数の初期化など) の想定された動作です。コードが 1 回を超えて実行されることを想定する場合、MATLAB コードまたはテスト ファイルを変更します。
実行されないコードがエラー条件である場合、これは許容できる動作です。コードが実行されることを想定する場合、MATLAB コードまたはテスト ファイルを変更します。コードが保守的に作成されていて上限と下限があり、テスト ファイルを変更してもこのコードにアクセスできない場合は、静的最小値と静的最大値を追加します。派生範囲の計算を参照してください。

既定の設定では、コード カバレッジはオンです。テスト ファイルのカバレッジが適切であると確認できた場合のみオフにしてください。コード カバレッジをオフにするとシミュレーションの速度が向上します。コード カバレッジを無効にするには、固定小数点の変換ツールで次の操作を行います。

  1. [シミュレーションを実行] をクリックします。

  2. [コード カバレッジを表示] をオフにします。

データ型の推奨

[入力の型を定義] ステップで、MATLAB 関数を呼び出すテスト ベンチを指定します。ツールによってテスト ファイルが実行され、コードが解析されてエントリポイントの入力引数の型が推定されます。

Define Input Types pane of the Workflow Advisor.

固定小数点の変換ツールは、計算された範囲、および語長または小数部の長さの設定に基づいて固定小数点データ型を推奨します。範囲はシミュレーション範囲データと派生範囲データのいずれかまたは両方に基づいて計算されます。シミュレーションを実行して派生範囲を計算した場合、変換ツールはシミュレーション範囲と派生範囲をマージします。

メモ

MATLAB クラスのデータ型を派生範囲に基づいて推奨することはできません。

静的範囲は手動で入力できます。このように手動で入力した範囲はシミュレーション範囲よりも優先され、データ型の推奨に使用されます。派生範囲の解析のみを使用して範囲を解析する場合は、静的範囲を入力する必要があります。また、推奨された型を変更し、ツールによって変更されないようにロックすることもできます。詳細については、推奨されたデータ型のロックを参照してください。

シミュレーションの実行

固定小数点の変換ツールを開くと、MATLAB 設計のインストルメント化された MEX 関数が生成されます。エラーが発生せずにビルドが完了すると、ツールがコード内の関数と変数のコンパイルされた情報 (型、サイズおよび実数/複素数) を表示します。ローカル関数に移動するには、[関数] タブをクリックします。ビルド エラーが発生すると、ツールはビルドの問題が発生したコード行へのリンクを示すエラー メッセージを表示します。シミュレーションを実行する前にこれらのエラーに対処しなければなりません。MATLAB エディターでリンクを使用して問題のコード行に移動し、コードを変更して問題を修正します。

固定小数点変換でサポートされない関数がコードに使用されている場合、ツールはそれらを [関数の置き換え] タブに表示します。関数の置換を参照してください。coder.float2fixed.skipを使用して、それらの関数を固定小数点の変換から省略することもできます。

シミュレーションを実行する前に、実行するテスト ベンチを指定します。シミュレーションを実行すると、ツールはテスト ベンチを実行し、インストルメント化された MEX 関数を呼び出します。MATLAB 設計コードを変更した場合、ツールはテスト ベンチを実行する前に更新された MEX 関数を自動的に生成します。

テスト ベンチが正常に実行された場合、シミュレーションの最小値と最大値および推奨された型が [変数] タブに表示されます。変数に対して手動で静的範囲を入力すると、その手動で入力した範囲がシミュレーション範囲よりも優先されます。推奨された型を、手入力またはヒストグラムの使用によって手動で変更すると、それらのデータ型はロックされ、ツールによって変更されることはありません。

テスト ベンチが正常に実行されなかった場合、エラーが [シミュレーション出力] タブに表示されます。

テスト ベンチはアルゴリズムを操作範囲全体で演習しなければなりません。推奨された固定小数点データ型の品質は、テスト ベンチがアルゴリズムの操作範囲を適切な精度でどれだけカバーできるかによって異なります。

オプションで、ヒストグラムのデータを記録するよう選択できます。シミュレーションの実行後、各変数のヒストグラムを表示できます。詳細については、ヒストグラムを参照してください。

派生範囲の計算

派生範囲に基づいてデータ型を推奨することの利点は、操作範囲全体でアルゴリズムを実行するテスト ファイルを用意する必要がないことです。一般に、このようなテスト ファイルの実行には時間がかかります。

派生範囲を計算し、これらの範囲に基づいてデータ型を推奨するには、すべての入力変数に対して、静的最小値と最大値または推奨データ型を指定します。解析結果を向上させるために、他の変数にはできるだけ多くの静的範囲情報を入力してください。範囲を手動で入力するか、シミュレーション範囲をプロモートして静的範囲として使用できます。手動で入力した静的範囲は常にシミュレーション範囲より優先されます。

ハードウェア ターゲットによって使用されるデータ型がわかっている場合、推奨されたデータ型をその型に合わせて設定します。手動で入力されたデータ型はロックされ、ツールによって変更されることはありません。ツールでは、これらのデータ型を使用して、入力の最小値と最大値の計算と他の変数の派生範囲の導出が行われます。詳細については、推奨されたデータ型のロックを参照してください。

[派生した範囲を計算] を選択した場合、ツールは派生範囲の解析を実行して MATLAB アルゴリズムの変数の静的範囲を計算します。解析が完了すると、[変数] タブに静的範囲が表示されます。実行により、派生範囲として +/-Inf が作成された場合は、すべての永続変数の範囲を定義することを検討してください。

オプションで、[派生範囲のクイック解析] を選択できます。このオプションを使用すると、変換ツールはより高速に静的解析を実行します。計算された範囲は必要以上に大きい場合があります。このオプションは、静的解析に時間がかかりすぎる場合に選択してください。

プロジェクトの派生範囲の解析に時間がかかっている場合は、オプションでタイムアウトを設定できます。タイムアウト時間に到達するとツールは解析を中止します。

推奨されたデータ型のロック

推奨されたデータ型をロックすることで、固定小数点の変換ツールによる変更を防げます。次のいずれかの方法で行います。

  • 固定小数点の変換ツールで、推奨データ型を手動で設定。

  • ツールによって推奨されたデータ型を右クリックし、[計算値をロック] を選択。

ツールでは、ロックされているデータ型は識別しやすいように太字で表示されます。データ型のロックは次のいずれかの方法で解除できます。

  • 手動で上書き。

  • 右クリックして [変更を元に戻す] を選択。この場合、選択された型のみロックが解除されます。

  • 右クリックして [すべての変数の変更を元に戻す] を選択。これにより、ロックされているすべての推奨されたデータ型のロックが解除されます。

関数の表示

[ナビゲーション] ペインでプロジェクトの関数のリストを表示できます。このリストには関数の特殊化とクラス メソッドも含まれます。リストから関数を選択すると、その関数またはクラス メソッドの MATLAB コードが固定小数点の変換ツールのコード ウィンドウに表示されます。

In the Fixed‑Point Conversion tool, in the Navigation pane, the Function dropdown shows the function fun_with_matlab.

変換後、左側のペインに、元のアルゴリズムの固定小数点バージョンを含む出力ファイルのリストも表示されます。関数名が特殊化されていない場合、出力ファイル名は元の関数名に固定小数点を示す接尾辞を付けたものになります。たとえば、fun_with_matlab.m の固定小数点バージョンは fun_with_matlab_fixpt.m です。

変数の表示

[変数] タブには [ナビゲーション] ペインで選択した関数の各変数に関する以下の情報が表示されます。

  • [型] - MATLAB アルゴリズムで使用される変数の元のデータ型。

  • [シミュレーションの最小値][シミュレーションの最大値] - シミュレーション中に変数に代入される最小値と最大値。

    シミュレーションの最小値と最大値は編集できます。編集されたフィールドは太字で表示されます。これらのフィールドを編集しても静的な範囲解析は開始されませんが、その後の解析でツールは編集された値を使用します。ツールによって推奨された型に戻すことができます。

  • [静的最小値][静的最大値] - 静的最小値と最大値。

    派生範囲を計算し、これらに基づいてデータ型を推奨するには、すべての入力変数に静的最小値および最大値を指定します。解析結果を向上させるために、他の変数にはできるだけ多くの静的範囲情報を入力してください。

    派生範囲の計算時、固定小数点の変換ツールは静的解析を実行してコード内の変数の静的範囲を計算します。解析が完了すると静的範囲が表示されます。計算結果は編集できます。編集されたフィールドは太字で表示されます。これらのフィールドを編集しても静的な範囲解析は開始されませんが、その後の解析でツールは編集された値を使用します。ツールによって推奨された型に戻すことができます。

  • [0 または正の整数] - シミュレーション中に変数に代入される値がすべて整数かどうか。

    固定小数点の変換ツールは変数が常に 0 または正の整数であるかどうかを判定します。このフィールドは変更できます。編集されたフィールドは太字で表示されます。これらのフィールドを編集しても静的な範囲解析は開始されませんが、その後の解析でツールは編集された値を使用します。ツールによって推奨された型に戻すことができます。

  • 指定された語長 (または小数部の長さ) の推奨された固定小数点データ型。推奨されたデータ型では numerictype 表記が使用されます。たとえば、numerictype(1,16,12) は語長 16 で小数部の長さが 12 の符号付き固定小数点型を表します。numerictype(0,16,12) は語長 16 で小数部の長さが 12 の符号なし固定小数点型を表します。

    このツールでは、式に対してデータ型が適用されないため、式の推奨された型は表示されません。その代わり、元のデータ型が表示されます。

コード ペインでカーソルを変数名に移動させて、変数の情報を表示および編集することもできます。

Ctrl+F キーを使用してMATLAB コード内および [変数] タブ上で変数を検索することが可能です。ツールによってコード内における出現場所が強調表示され、[変数] タブ上に指定された名称で変数のみが表示されます。

MATLAB クラスの情報の表示

ツールには次が表示されます。

  • MATLAB クラスのコードと、クラス メソッドのコード カバレッジがコード ウィンドウに表示されます。ナビゲーション バーの [関数] リストを使用して、表示するクラスまたはクラス メソッドを選択します。

    In the Fixed‑Point Conversion tool, in the Navigation pane, the Function dropdown shows the class Counter and class methods next and use_counter.

    The Function dropdown shows next selected. The Fixed-Point Conversion tool code window displays the MATLAB code for next.

  • MATLAB クラスに関する情報が [変数] タブに表示されます。

    Fixed‑Point Conversion tool Variables tab showing class variables, simulation ranges, and proposed types.

特殊化

関数を特殊化している場合、すべての特殊化がリストされ、連番が付けられます。たとえば、foo および bar というサブ関数を異なる入力の型を使用して複数回呼び出す関数 dut を考えます。

function y = dut(u, v)
 
tt1 = foo(u);
tt2 = foo([u v]);
tt3 = foo(complex(u,v));
 
ss1 = bar(u);
ss2 = bar([u v]); 
ss3 = bar(complex(u,v));
 
y = (tt1 + ss1) + sum(tt2 + ss2) + real(tt3) + real(ss3);
 
end
 
function y = foo(u)
  y = u * 2;
end
 
function y = bar(u)
  y = u * 4;
end

In the Fixed‑Point Conversion tool, in the Navigation pane, the Function dropdown shows the function dut and each specialization of the subfunctions foo and bar.

特殊化の 1 つを選択すると、その特殊化が使用する変数だけが表示されます。

The Function dropdown shows the first foo specialization selected. The Variables tab only shows variables used by the first foo specialization.

生成された固定小数点コードでは、固定小数点の各特殊化の番号がソース コードのリストにある番号に一致しているので、コードの浮動小数点バージョンと固定小数点バージョンを簡単に比較できます。たとえば、foo > 1 から生成される固定小数点関数には foo_s1 という名前が付きます。

MATLAB Editor showing generated fixed‑point code with each subfunction specialization named according to the function call number in the source code.

ヒストグラム

ヒストグラム用のデータを記録するには、[固定小数点の変換] ウィンドウで [シミュレーションを実行] をクリックし、[ヒストグラム データを記録] を選択します。その後、[シミュレーションを実行] ボタンをクリックします。

シミュレーションの終了後に変数のヒストグラムを表示するには、[変数] タブで、その変数の [推奨された型] フィールドをクリックします。

ヒストグラムは、推奨されるデータ型および推奨されるデータ型がカバーするシミュレーション値の割合を示します。ビットの重みが "X" 軸、出現割合が "Y" 軸に沿って表示されます。ヒストグラムの各ビンはバイナリ ワード中のビットに対応しています。たとえば、このヒストグラムでは numerictype(1,16,14) 型の変数の範囲を表示します。

Histogram for proposed fixed‑point type numerictype(1,16,14).

以下の操作により、推奨されるデータ型の変更による影響を表示することもできます。

  • ヒストグラム ウィンドウ内で境界ボックスの端をドラッグして、推奨されるデータ型を変更。

    Change proposed fixed‑point type numerictype(1,16,14) by dragging edges of Histogram.

  • [符号付き] を選択または選択解除。

自動変換によって推奨された型に戻すためには、ヒストグラム ウィンドウ内で をクリックします。

関数の置換

MATLAB コードで固定小数点に対応していない関数を使用している場合、ツールはこれらの関数を [関数の置き換え] タブ上に一覧表示します。サポートされていない関数を、カスタム関数とルックアップ テーブルのどちらに置き換えるかを指定できます。

Fixed‑Point Conversion tool Function Replacements tab. Map custom function foo to foo_fixedpoint. Use lookup table for exp.

このリストから関数の置換を追加したり削除したりできます。関数に対して関数の置換を入力すると、プロジェクトの作成時に置換関数が使用されます。置換を入力しない場合、ツールは関数に元の MATLAB コード内で指定された型を使用します。

メモ

このテーブルを使用して関数名を置換することが可能ですが、引数パターンを置換することはできません。

あるいは、coder.float2fixed.skip を使用して関数を固定小数点の変換から除外できます。たとえば、既に固定小数点データ型を使用しているカスタム関数を使用する場合、あるいは HDL コード生成用にネイティブ浮動小数点のサポートを利用する場合、関数を固定小数点の変換から除外することがあります。詳細については、coder.float2fixed.skipを参照してください。

型の検証

[型の検証] を選択することによって、推奨される固定小数点データ型を使用するビルドを検証します。検証に合格すると、固定小数点型 MATLAB アルゴリズムの数値的な動作のテストの準備が整います。

検証時にエラーまたは警告が発生した場合は、[型の検証の出力] タブに表示されます。エラーまたは警告が発生した場合、以下を行ってください。

  • [変数] タブで、推奨される型および手作業で修正した型を確認し、それらが有効であることを検証します。

  • [関数の置き換え] タブで、サポートされていない関数に対して関数の置換を行ったことを確認します。

数値のテスト

推奨された固定小数点型データ型を検証した後、[数値のテスト] を選択して固定数値型 MATLAB アルゴリズムの動作を検証します。既定では、テスト ベンチを追加して入力を定義またはシミュレーションを実行した場合、ツールはこのテスト ベンチを使用して数値をテストします。ツールは生成された固定小数点型 MATLAB コードを元の浮動小数点型 MATLAB コードの数値的な動作と比較します。比較プロットの入力と出力を記録するように選択した場合は、ツールは各スカラー出力の追加プロットを生成します。このプロットは浮動小数点と固定小数点の結果およびこれらの相違を示します。非スカラー出力についてはエラー情報のみを示します。

固定小数点シミュレーション後に数値的な結果が所要の精度を満たさない場合は、固定小数点データ型の設定を修正し、型の検証と数値的なテストのステップを繰り返します。必要な結果を得るには、これらのステップを複数回繰り返す必要がある場合があります。

オーバーフローの検出

数値をテストする際に [スケーリングされた double を使用してオーバーフローを検出] を選択すると、オーバーフローを検出できるようになります。このオプションが選択されている場合、変換ツールでは、推奨された固定小数点型のスケーリングされた double のバージョンを使用してシミュレーションが実行されます。スケーリングされた double には倍精度浮動小数点でデータが格納されているため、演算が全範囲で実行されます。また、固定小数点設定も維持されるため、計算が固定小数点型の範囲から外れた場合にレポートすることが可能です。

ツールによってオーバーフローが検出された場合、[オーバーフロー] タブに次が表示されます。

  • オーバーフローが発生した変数と式のリスト

  • 各変数のオーバーフローの量に関する情報

  • コード ウィンドウにある変数または式へのリンク

Fixed‑Point Conversion tool Overflows tab shows the function, line number, and description of the overflow error.

元のアルゴリズムでスケーリングされた double を使用している場合、それらの式のオーバーフロー情報も表示されます。

参考

オーバーフローの検出