Main Content

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

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

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

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

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

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

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

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

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

    メモ

    Output data typeInherit: 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 classAuto に設定すると、コード生成中にパラメータが最適化されます。DPI 調整可能なパラメータを生成するときに推奨される値は次のとおりです。

  • Model default

  • SimulinkGlobal

  • ExportedGlobal

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

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

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

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

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

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

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

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

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

  6. Generate test benchCustomize 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.パラメータを変更してシミュレーションを実行する

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