等傾きとゼロの正味バイアスのコード置換
固定小数点データ型の加算または減算のコード置換エントリを、演算子の入力と出力全体の相対的な傾きおよびバイアス値と一致するように定義できます (等傾きとゼロの正味バイアス)。これらのエントリを使用すると、相対的な傾きおよびバイアス値を加算または減算の置換関数にマップする際に傾きとバイアス値を破棄できます。
この例では、addition 演算に対するコード置換の定義方法に関する情報を提供することで、固定小数点正味傾き演算のパフォーマンスを最適化するコード置換ライブラリを開発する方法を示します。コード置換ライブラリを開発するには、対話的な方法またはプログラムによる方法のいずれかを使用します。詳細については、コード置換ライブラリの開発を参照してください。
対話的なコード置換ライブラリの開発
MATLAB コマンド ラインから次のコマンドを使用して コード置換ツール (crtool) を開きます。
>>crtool
table を作成します。
コード置換ツールのツールストリップから、[新規] 、 [テーブル] をクリックします。
右側のペインで、table に
crl_table_equal_slope_netbias_addと名前を付けます。[適用] をクリックします。
エントリを作成します。[新規] 、 [エントリ] 、 [Net Slope Fixed-point Operation Entry] をクリックします。
エントリ パラメーターを作成します。[演算] ドロップダウン リストで、
[Addition]を選択します。概念表現を作成します。概念表現は、置換する関数のシグネチャを記述します。crtool の [概念関数] サブセクションで、
fixdt(1,16)の [データ型] およびスカラーの [引数タイプ] をもつ戻り引数y1と入力引数u1およびu2を指定します。実装表現を作成します。実装表現は最適化関数のシグネチャを記述します。crtool の [関数の引数] サブセクションで、
int 16の [データ型] をもつ戻り引数y1と入力引数u1およびu2を指定します。置換関数の [名前] に
u16_add_SameSlopeZeroBiasを指定します。[整数飽和モード] に
Saturate on Overflowを指定します。ビルド情報を指定します。[ビルド情報] タブをクリックして、ビルド要件のペインを開きます。コード ジェネレーターがコード置換に必要なファイル (ソース、ヘッダー、オブジェクト) を指定します。この例では、ビルド情報を指定する必要はありません。
table を確認して保存します。[マッピング情報] タブをクリックし、フィールドが以下に示すように入力されていることを確認します。[適用] をクリックし、[エントリの検証] をクリックします。ツールストリップで [保存] をクリックして table を保存します。

コード置換ライブラリを登録します。登録することにより、指定した table で構成されるライブラリが作成されます。[登録ファイルの作成] をクリックします。[登録ファイルの作成] ダイアログ ボックスで、以下のフィールドに入力します。
レジストリ名 —
CRL for equal slope and zero net biasテーブル リスト —
crl_table_addition基本 CRL —
Noneターゲット HW デバイス —
*説明 —
Example code replacement library

コード置換ライブラリを使用するには、現在の MATLAB セッションを次のコマンドで更新します。
>>sl_refresh_customizations
コード置換ライブラリを確認します。MATLAB コマンド ラインから、コード置換ビューアーを使用してライブラリを開き、table およびエントリが正しく指定されていることを確認します。詳細については、Verify Code Replacement Libraryを参照してください。コード置換ライブラリを使用するようにモデルを構成し、コードを生成して、その置換が予期したとおりに行われることを確認します。予期しない動作が行われた場合、ヒット ログとミス ログを調べて問題のトラブルシューティングを行います。
プログラムによるコード置換ライブラリの開発
[新規]、[関数] を選択し、[MATLAB] メニューからプログラム インターフェイスを開きます。
table を作成します。
コード置換ライブラリ テーブルを呼び出す関数を作成します。この関数は引数をもつべきではなく、table オブジェクトを返します。
RTW.TflTableを呼び出して table オブジェクトを作成します。
function hTable = crl_table_equal_slope_netbias_add % Create a function to call the code replacement library table %% Create a table object hTable = RTW.TflTable;
エントリを作成します。この例では関数を置き換えるため、エントリ関数
RTW.TflCOperationEntryGenerator_NetSlopeを呼び出して table にコード置換エントリを作成します。function hTable = crl_table_equal_slope_netbias_add % Create a function to call the code replacement library table %% Create a table object hTable = RTW.TflTable; %% Create an entry hEntry = RTW.TflCOperationEntryGenerator_NetSlope;
エントリ パラメーターを作成します。この例では関数を置き換えるため、関数
setTflCOperationEntryParametersを呼び出してエントリ パラメーターを作成します。function hTable = crl_table_equal_slope_netbias_add % Create a function to call the code replacement library table %% Create a table object hTable = RTW.TflTable; %% Create an entry hEntry = RTW.TflCOperationEntryGenerator_NetSlope; %% Create entry parameters hEntry.setTflCOperationEntryParameters(... 'Key', 'RTW_OP_ADD', ... 'Priority', 90, ... 'SaturationMode', 'RTW_WRAP_ON_OVERFLOW', ... 'RoundingModes', {'RTW_ROUND_UNSPECIFIED'}, ... 'SlopesMustBeTheSame', true, ... 'MustHaveZeroNetBias', true, ... 'ImplementationName', 'u16_add_SameSlopeZeroBias', ... 'ImplementationHeaderFile', 'u16_add_SameSlopeZeroBias.h', ... 'ImplementationSourceFile', 'u16_add_SameSlopeZeroBias.c');
概念引数
y1、u1、およびu2を作成します。この例では、関数createAndAddConceptualArgの呼び出しを使用して、1 回の関数呼び出しで引数を作成して追加します。各引数を固定小数点、16 ビット、および符号付きとして指定します。また、各引数について、コード置換要求処理で呼び出しサイトの傾きおよびバイアス値との完全一致をチェック "しない" ように指定します。function hTable = crl_table_equal_slope_netbias_add % Create a function to call the code replacement library table %% Create a table object hTable = RTW.TflTable; %% Create an entry hEntry = RTW.TflCOperationEntryGenerator_NetSlope; %% Create entry parameters hEntry.setTflCOperationEntryParameters(... 'Key', 'RTW_OP_ADD', ... 'Priority', 90, ... 'SaturationMode', 'RTW_WRAP_ON_OVERFLOW', ... 'RoundingModes', {'RTW_ROUND_UNSPECIFIED'}, ... 'SlopesMustBeTheSame', true, ... 'MustHaveZeroNetBias', true, ... 'ImplementationName', 'u16_add_SameSlopeZeroBias', ... 'ImplementationHeaderFile', 'u16_add_SameSlopeZeroBias.h', ... 'ImplementationSourceFile', 'u16_add_SameSlopeZeroBias.c'); %% Create the conceptual representation createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ... 'Name', 'y1', ... 'IOType', 'RTW_IO_OUTPUT', ... 'CheckSlope', false, ... 'CheckBias', false, ... 'IsSigned', false, ... 'WordLength', 16); createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ... 'Name', 'u1', ... 'IOType', 'RTW_IO_INPUT', ... 'CheckSlope', false, ... 'CheckBias', false, ... 'IsSigned', false, ... 'WordLength', 16); createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ... 'Name', 'u2', ... 'IOType', 'RTW_IO_INPUT', ... 'CheckSlope', false, ... 'CheckBias', false, ... 'IsSigned', false, ... 'WordLength', 16);
実装表現を作成します。実装表現は最適化関数のシグネチャを記述します。この例では、関数
createAndSetCImplementationReturnの呼び出しを使用して、実装引数を作成してエントリに追加します。実装引数では、基本的な数値データ型 (固定小数点データ型ではなく) を記述する必要があります。この場合、出力引数と入力引数は 16 ビットで符号付きです (int16)。function hTable = crl_table_equal_slope_netbias_add % Create a function to call the code replacement library table %% Create a table object hTable = RTW.TflTable; %% Create an entry hEntry = RTW.TflCOperationEntryGenerator_NetSlope; %% Create entry parameters hEntry.setTflCOperationEntryParameters(... 'Key', 'RTW_OP_ADD', ... 'Priority', 90, ... 'SaturationMode', 'RTW_WRAP_ON_OVERFLOW', ... 'RoundingModes', {'RTW_ROUND_UNSPECIFIED'}, ... 'SlopesMustBeTheSame', true, ... 'MustHaveZeroNetBias', true, ... 'ImplementationName', 'u16_add_SameSlopeZeroBias', ... 'ImplementationHeaderFile', 'u16_add_SameSlopeZeroBias.h', ... 'ImplementationSourceFile', 'u16_add_SameSlopeZeroBias.c'); %% Create the conceptual representation createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ... 'Name', 'y1', ... 'IOType', 'RTW_IO_OUTPUT', ... 'CheckSlope', false, ... 'CheckBias', false, ... 'IsSigned', false, ... 'WordLength', 16); createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ... 'Name', 'u1', ... 'IOType', 'RTW_IO_INPUT', ... 'CheckSlope', false, ... 'CheckBias', false, ... 'IsSigned', false, ... 'WordLength', 16); createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ... 'Name', 'u2', ... 'IOType', 'RTW_IO_INPUT', ... 'CheckSlope', false, ... 'CheckBias', false, ... 'IsSigned', false, ... 'WordLength', 16); %% Create the Implementation Representation createAndSetCImplementationReturn(hEntry, 'RTW.TflArgNumeric', ... 'Name', 'y1', ... 'IOType', 'RTW_IO_OUTPUT', ... 'IsSigned', false, ... 'WordLength', 16, ... 'FractionLength', 0); createAndAddImplementationArg(hEntry, 'RTW.TflArgNumeric',... 'Name', 'u1', ... 'IOType', 'RTW_IO_INPUT', ... 'IsSigned', false, ... 'WordLength', 16, ... 'FractionLength', 0); createAndAddImplementationArg(hEntry, 'RTW.TflArgNumeric',... 'Name', 'u2', ... 'IOType', 'RTW_IO_INPUT', ... 'IsSigned', false, ... 'WordLength', 16, ... 'FractionLength', 0); %% Add the entry to the table addEntry(hTable, hEntry);
ビルド情報を指定します。エントリ パラメーターで、コード ジェネレーターがコード置換に必要なファイル (ソース、ヘッダー、オブジェクト) を指定します。この例では、ビルド情報は必要ありません。
カスタマイズ ファイルを確認して保存します。[MATLAB] メニューから、[ファイル]、[保存] を選択して、このカスタマイズ ファイルを保存します。コマンド ラインから、次のようにしてコード置換ライブラリ テーブルを呼び出し、確認します。
>> hTable = crl_table_equal_slope_netbias_add
コード置換ライブラリを登録します。登録では、ライブラリ名、コード置換テーブル、その他の情報を定義することにより、コード置換ライブラリが作成されます。以下の仕様を使用して登録ファイルを作成します。
function rtwTargetInfo(cm) cm.registerTargetInfo(@loc_register_crl); end function this = loc_register_crl this(1) = RTW.TflRegistry; this(1).Name = 'CRL for equal slope and zero net bias code replacement'; this(1).TableList = {'crl_table_equal_slope_netbias_add.m'}; % table created in this example this(1).TargetHWDeviceType = {'*'}; this(1).Description = 'Example code replacement library'; end
コード置換ライブラリを使用するには、現在の MATLAB セッションを次のコマンドで更新します。
>>sl_refresh_customizations
コード置換ライブラリを確認します。MATLAB コマンド ラインから、コード置換ビューアーを使用してライブラリを開き、table およびエントリが正しく指定されていることを確認します。詳細については、Verify Code Replacement Libraryを参照してください。コード置換ライブラリを使用するようにモデルを構成し、コードを生成して、その置換が予期したとおりに行われることを確認します。予期しない動作が行われた場合、ヒット ログとミス ログを調べて問題のトラブルシューティングを行います。