メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

シミュレーション中にゲインパラメータを調整する

R2024a

手順 1.シンプルなゲインモデルを作成する

例の手順を自分で実行するには、まずサンプル モデルを作成します。

サンプルモデルには、シミュレーション中に調整されるゲイン パラメーターを持つ単一のゲイン ブロックがあります。

  1. Simulink® ブロック ライブラリを開き、[よく使用されるブロック] をクリックします。

  2. Inport ブロックを追加します。

  3. Gain ブロックを追加します。ダブルクリックしてブロックマスクを開き、Gain パラメータの値を gain に変更します。

  4. Gain ブロックをダブルクリックしてブロック マスクを開きます。Signal Attributes タブで、Output data type を uint8 に設定します。

    メモ

    Output data type を Inherit: Inherit via internal rule のままにしておくと、Simulink Coder™ は Gain パラメータのデフォルト値に基づいてデータ型を選択しますが、DPI 生成後にパラメータを調整するときに値が適合しない可能性があります。Simulink Coder による誤ったタイプ設定を回避するために、ブロックの出力信号に特定のタイプを指定します。

  5. Outport ブロックを追加します。

  6. 上の図に示すように、すべてのブロックを接続します。

手順 2.ゲインパラメータのデータオブジェクトを作成する

  1. ゲインパラメータのデータ オブジェクトを作成します。

    MATLAB® コマンド プロンプトで、以下のように入力します。

     gain = Simulink.Parameter
  2. 次に、次のように入力します。

    open('gain')

    このコマンドは、パラメータ オブジェクトのプロパティ ダイアログ ボックスを開きます。

  3. Design タブで、次の値を選択します。

    • 値: 2

    • Data type: ダブル

    Code Generation タブで、次の値を選択します。

    • Storage class:Model default

  4. [OK] をクリックします。

コード生成にパラメータ オブジェクトを使用する方法の詳細については、C Data Code Interface Configuration for Model Interface Elements (Simulink Coder) を参照してください。

メモ

Storage class を Auto に設定すると、コード生成中にパラメータが最適化されます。DPI 調整可能なパラメータを生成するときに推奨される値は次のとおりです。

  • Model default

  • SimulinkGlobal

  • ExportedGlobal

パラメータがインスタンス固有の場合は Model default を使用し、グローバル変数を生成するには SimulinkGlobal と ExportedGlobal のどちらかを選択します。

手順 3.SystemVerilog DPIコンポーネントを生成する

  1. Simulink Apps タブで HDL Verifier をクリックします。右側のペインで、HDL Verifier Mode を DPI Component Generation に設定します。

  2. HDL Verifier タブで、C Code Settings をクリックします。Code Generation で Configuration Parameters ダイアログが開きます。

  3. System target file で、Browse をクリックし、systemverilog_dpi_grt.tlc を選択します。

    • Embedded Coder® のライセンスをお持ちの場合は、ターゲット systemverilog_dpi_ert.tlc を選択できます。このターゲットを使用すると、追加のコード生成オプション (モデル構成パラメーターのコード生成ペイン) にアクセスできます。

  4. Toolchain の Build process の下で、リストから使用するツールチェーンを選択します。ツールチェーンの選択に関するガイダンスについては、クロスプラットフォームDPIコンポーネントを生成する を参照してください。

    オプションでコンパイルのフラグを選択できます。Build Configuration の下で、ドロップダウン リストから Specify を選択します。現在のフラグを表示するには、Show Settings をクリックします。

  5. コード生成グループで、SystemVerilog DPI をクリックします。

  6. Generate test bench と Customize generated SystemVerilog code は両方ともクリアされたままにします (この例では生成された SystemVerilog コードが変更されるため、同時に生成されたテストベンチでは正しい結果が得られません)。

  7. これらの設定を受け入れ、[構成パラメータ] ダイアログ ボックスを閉じるには、[OK] をクリックします。

  8. サンプルモデルで、ゲイン ブロックを右クリックし、Create Subsystem from Selection を選択します。この例では、サブシステムの名前を dut に変更します。

  9. Simulink ツールストリップの HDL Verifier タブで、Generate DPI Component をクリックします。

    SystemVerilog コンポーネントは、現在の作業フォルダーに dut_build/dut_dpi.sv として生成されます。

手順 4.SystemVerilog ファイルにパラメータ調整コードを追加する

  1. ファイル dut_build/dut_dpi.sv を開き、生成されたコードを調べます。

  2. この例では、reset 関数を呼び出した後、新しいパラメーター値を使用して DPI_dut_setparam_gain 関数を呼び出します。たとえば、ここではゲインが 6 に変更されます。

    DPI_dut_setparam_gain(objhandle, 6);
    
  3. 非同期リセット信号がハイ(0 から 1 になる)の場合は、reset 関数を再度呼び出します。

    if(reset == 1'b1) begin
        DPI_dut_reset(objhandle, dut_U_In1, dut_Y_Out1);
        DPI_dut_setparam_gain(objhandle, 6);
    end
    
  4. SystemVerilog コードは次のようになります。

    module dut_dpi(
        input clk,
        input clk_enable,
        input reset,
        input real dut_U_In1,
        output real dut_Y_Out1
    );
    
        chandle objhandle=null;
        // Declare imported C functions
        import "DPI" function chandle DPI_dut_initialize(chandle existhandle);
        import "DPI" function void DPI_dut_reset
            (input chandle objhandle, input real dut_U_In1, inout real dut_Y_Out1);
        import "DPI" function void DPI_dut_output
            (input chandle objhandle, input real dut_U_In1, inout real dut_Y_Out1);
        import "DPI" function void DPI_dut_update
            (input chandle objhandle, input real dut_U_In1);
        import "DPI" function void DPI_dut_terminate(input chandle objhandle);
        import "DPI" function void DPI_dut_setparam_gain
            (input chandle objhandle, input real dut_P_gain);
    
        initial begin
            objhandle = DPI_dut_initialize(objhandle);
            DPI_dut_setparam_gain(objhandle, 6);
        end
    	
        final begin
            DPI_dut_terminate(objhandle);
        end
    
        always @(posedge clk or posedge reset) begin
            if(reset == 1'b1) begin
                DPI_dut_reset(objhandle, dut_U_In1, dut_Y_Out1);
                DPI_dut_setparam_gain(objhandle, 6);
            end
            else if(clk_enable) begin
                DPI_dut_output(objhandle, dut_U_In1, dut_Y_Out1);
                DPI_dut_update(objhandle, dut_U_In1);
            end
        end
    endmodule
    

手順 5.パラメータを変更してシミュレーションを実行する

シミュレーションを実行するには、次のトピックの説明に従って共有ライブラリをビルドし、コンポーネントをエクスポートします。