Main Content

保護モデルを作成し内容を隠して HDL コードを生成する

サードパーティに知的所有権を開示せずにモデルを共有する場合は、モデルを保護してください。保護モデルの作成時に、元のモデルの実装の詳細を参照モデルにコンパイルすることで隠します。保護モデルには、C コード生成や HDL コード生成のサポートなど、指定するオプション機能をサポートするための派生ファイルが含まれます。

HDL Coder™ のライセンスがある場合に、どのようにしてシミュレーションおよび HDL コード生成をサポートする保護モデルを作成できるかを示しています。保護モデルのユーザーは、その後、作成した保護モデルを参照するモデル向けの HDL コードを生成できます。C コード生成のサポートを有効にする、またはコード インターフェイスなどの追加のオプションを指定するためには、Simulink® Coder™ または Embedded Coder® ライセンスがなければなりません。このワークフローの詳細については、コンテンツを隠すためのモデルの保護を参照してください。

モデル保護が動作する仕組み

モデルを保護すると、保護モデルのユーザーに以下を許可できます。

  • モデルの内容およびブロック パラメーターを含む、モデルの読み取り専用 Web ビューを開く。

  • モデルのシミュレーションをアクセラレータ (既定)、ラピッド アクセラレータおよびノーマル モードで実行する。

  • 保護モデルを含むモデルの HDL コードを生成する。

  • Simulink Coder がある場合に、保護モデルを含むモデルの C コードを生成する。

  • Embedded Coder があり、モデルの ERT ベースのシステム ターゲット ファイルを指定する場合、スタンドアロン インターフェイスを介して保護モデルのコードを生成する。

任意で各オプションをパスワード保護できます。これらのいずれかのオプションのパスワード保護を選択する場合、ソフトウェアでは AES-256 暗号化を使用してサポート ファイルが保護されます。

保護モデルを作成する方法

次のいずれかのオプションを使用して保護モデルを作成します。

  • 参照モデルから保護モデルを作成するには、Model ブロックを選択し、Simulink ツールストリップの [Model ブロック] タブで [保護] ボタンをクリックします。

  • 現在のモデルから保護モデルを作成するには、次のようにします。

    • Simulink ツールストリップの [アプリ] タブで、[HDL Coder] を選択します。[HDL コード] タブが表示されます。

    • Model ブロックを選択し、[HDL コード][共有] タブで、[保護されたモデルの生成] を選択します。

  • 保護モデルをプログラムで作成するには、関数 Simulink.ModelReference.protect を使用します。

保護モデルを作成するときは、次の点に留意してください。

  • Simulink は、モデルの保護バージョンを作成し、拡張子が .slxp で、ソース モデルと同じ名前のファイルで保存します。

  • 拡張子が .slx の元のモデル ファイルは変更されません。Model ブロックを介してモデルを保護する場合、その Model ブロックは変更されません。

  • 必要に応じて、Simulink は、保護モデルを含むプロジェクト アーカイブ (.mlproj)、保護モデルのハーネス モデル、および追加のサポート ファイルを作成します。

保護モデルにベース ワークスペース定義またはデータ ディクショナリなどの追加のサポート ファイルが必要である場合、保護モデルを共有する際にそれらのファイルをモデルに含めます。詳細については、保護モデルのパッケージ化と共有を参照してください。

保護モデルの一般的な要件と制限

保護モデルを作成するときは、次の要件を考慮してください。

  • 保護モデルを作成するには、HDL Coder または Simulink Coder のライセンスを所有していなければなりません。

  • モデルは MATLAB® パス上で使用可能でなければなりません。

  • モデルは保存されていない変更をもつことはできません。

  • モデルは保護時にアクティブなコンフィギュレーションを使用します。保護モデルのコンフィギュレーションを変更することはできません。

  • モデルにバリアントが含まれている場合、保護モデルには保護時にアクティブなバリアントのみが含まれます。

  • 保護モデルの名前を変更してはなりません。モデルの名前を変更したり、接尾辞を変更したりすると、元の名前と接尾辞に戻すまで、モデルは使用できなくなります。

また、モデルはモデル参照の要件と制限に示されているすべての要件を満たさなければなりません。

HDL コード生成のための保護モデルの制限事項

HDL コード生成サポートのある保護モデルを作成するときは、次の制限が適用されます。

  • 保護モデルは、参照される最上位のモデルと同じコンフィギュレーション パラメーターを使用しなければなりません。

    R2021b では、HDL Coder において、次のパラメーターの値を保護モデルと最上位モデルで異なる値にすることができます。これにより、最上位のモデルの合成パラメーターの設定を残したまま、最上位モデルと保護モデルの HDL コードをシミュレートして生成できます。

    • ファミリ

    • デバイス名

    • パッケージ名

    • 速度値

    • ターゲット周波数

  • [コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで指定するソルバーの設定は、Fixed-step および auto でなければなりません。

  • [コンフィギュレーション パラメーター] ダイアログ ボックスで以下の設定を有効にしてはなりません。

    • [マスクされたサブシステムからのパラメーター化された HDL コードの生成]

    • [モジュール名の接頭辞]

    • [トリガー信号をクロックとして使用]

    • [クロック イネーブルの最小化]

    • [ベクトル端子のスカラー化]

    • [Allow clock-rate pipelining at DUT output ports]

  • 複数のクロック信号をもつモデル、または [コンフィギュレーション パラメーター] ダイアログ ボックスで [クロックの入力]multiple に設定されているモデルはサポートされません。

  • モデル引数を含むモデルはサポートされません。

  • 保護モデルの HDL ソース コードは難読化できません。

  • 入れ子にされた保護モデルはサポートされません。

  • 保護モデルはコールバックをもつことができません。

C コード生成の制限の詳細についてはコード生成の要件と制限を参照してください。

親モデルの準備

この例では、親モデルの Model ブロックにより参照されるモデルを保護する方法を説明します。親モデル hdlcoder_protected_model_parent_harness を開きます。

open_system('hdlcoder_protected_model_parent_harness')
set_param('hdlcoder_protected_model_parent_harness','SimulationCommand','Update')

親モデルの Model ブロックに移動します。DUT サブシステムをダブルクリックしてから、mynested サブシステムを開くと、モデル hdlcoder_referenced_model_gain を参照する Model ブロックが表示されます。

open_system('hdlcoder_protected_model_parent_harness/DUT/mynested')

Model ブロックを開き、拡張子 .slx をもつ modelname[モデル名] フィールドで指定されていることを確認します。参照モデルと保護モデルが同じフォルダーに存在している場合、拡張子が指定されていない限り、親モデルは保護モデルを参照します。

この場合、Model ブロックはモデル hdlcoder_referenced_model_gain.slx を参照しています。このモデルは保護するモデルです。Model ブロックをダブルクリックするか、モデル hdlcoder_referenced_model_gain を別のウィンドウで開きます。

open_system('hdlcoder_referenced_model_gain')
set_param('hdlcoder_referenced_model_gain','SimulationCommand','Update')

参照されるモデルの保護

  1. Model ブロックを選択します。

  2. Simulink ツールストリップの [Model ブロック] タブで、[保護] をクリックします。

  3. [保護モデルの作成] ダイアログ ボックスで [シミュレーション] を選択します。このオプションにより、保護モデルのユーザーがその保護モデルを参照するモデルをシミュレーションできます。

  4. Simulink Coder または Embedded Coder がある場合、[生成されたコードを使用] チェック ボックスを使用してパスワード保護されたコード生成のサポートを有効にしたり、[コード インターフェイス] を指定したりするなど追加の設定を指定できます。これらのオプションの詳細については、コンテンツを隠すためのモデルの保護 (Embedded Coder)を参照してください。

  5. [生成された HDL コードを使用] チェック ボックスをオンにして、保護モデルを参照するモデルの HDL コードを生成します。保護モデルのこの機能をパスワード保護する場合、8 文字以上を指定しなければなりません。このオプションには一意のパスワードを指定できます。保護モデルの HDL ソース コードを難読化することはできません。

  6. [保存先フォルダー] ボックスで、保護モデルのフォルダー パスを指定します。既定値は、現在の作業フォルダーです。

  7. 保護モデルを使用してサポート ファイルを自動的に収集、作成、およびパッケージ化するには、[コンテンツ][保護されたモデル (.slxp) とプロジェクト内の依存関係] に設定します。この例では、[コンテンツ][保護されたモデル (.slxp) のみ] に設定します。

  8. 保護モデルのハーネス モデルを作成するには、[保護されたモデル用にハーネス モデルを作成する] チェック ボックスをオンにします。ハーネス モデルは、保護モデルを参照する Model ブロックの分離された環境を提供します。この例では、チェック ボックスをオフのままにします。

  9. [作成] をクリックします。

    HDL Coder は HDL コード生成のためのモデルの互換性をチェックし、その後モデル向けのコードを生成します。生成されたコード ファイルの内容は hdlsrc フォルダーにあります。生成されたファイルの詳細については保護モデルのパッケージ化と共有を参照してください。

  10. 保護モデルをモデルの階層構造で使用するには、これを Model ブロックを介して参照します。保護モデルを参照する Model ブロックの [シミュレーション モード] は、[アクセラレータ] に設定されます。このモードは変更できません。詳細については、サードパーティからの保護モデルの参照を参照してください。

オプションの詳細については、保護されたモデルを作成を参照してください。

関数 Simulink.ModelReference.protect を使用しているときに保護モデルを作成するには、ModeHDLCodeGeneration に設定します。たとえば、このコマンドを実行して参照モデル hdlcoder_referenced_model_gain を保護します。

Simulink.ModelReference.protect('hdlcoder_referenced_model_gain', ... 
                                    'Mode','HDLCodeGeneration')

保護モデルのレポート

Simulink エディターで保護モデルを作成すると、保護モデルのレポートが生成され、保護モデルの一部として含められます。この例で、保護モデルのレポートを表示するには、保護モデルをダブルクリックするか、ハーネス モデルのブロック上の保護モデルのバッジ アイコンを右クリックし、[レポートの表示] を選択します。

このレポートには以下のものが含まれています。

  • [Summary]。次のテーブルが含まれます。

    • [環境]。保護モデルの作成に使用された Simulink のバージョン、Simulink Coder のバージョン、HDL Coder のバージョンおよびプラットフォームなどが記載されます。

    • [Supported functionality]。保護モデルがサポートする機能ごとに、[オン][オフ]、または [パスワード保護でオン] を報告します。複数のターゲットに対して保護モデルを設定する場合、このテーブルにはサポートされているターゲットのリストが含まれます。

    • [Licenses]。保護モデルの実行に必要なライセンスを一覧表示します。

  • [インターフェイス レポート]。入出力仕様、インターフェイス パラメーターおよびデータ ストアなど、モデル インターフェイス情報が記載されます。

関数 Simulink.ModelReference.protect を使用するときにレポートを生成するには、"Report" オプションを True に設定します。

保護モデルを参照しているモデル向けの HDL コードの生成

保護モデルにシミュレーションおよび HDL コード生成サポートがある場合、保護モデルのユーザーは、保護モデルを参照するモデルからシミュレーションを行ったり HDL コードを生成したりできます。通常のモデル向けのコードを生成するのと同じ方法で、保護モデルを参照するモデル向けの HDL コードを生成します。

保護モデルがパスワード保護されている場合、コードを生成する前に、保護モデルのバッジ アイコンを右クリックして [承認] を選択します。その後、各オプションのパスワードを入力しなければなりません。入力されたパスワードが保護モデルを作成するときに指定したパスワードと一致すると、モデルは承認されます。その後、このモデルの HDL コードを生成できます。

たとえば、モデル hdlcoder_protected_model_parent_harness によって参照されている保護モデル hdlcoder_referenced_model_gain.slxp の HDL コードを生成するには、次のようにします。

  1. 保護モデルを作成するときにパスワードを指定した場合は、保護モデル hdlcoder_referenced_model_gain.slxp を承認します。

  2. コンテキスト メニューから、または関数 makehdl を使用して、DUT サブシステムの HDL コードを生成します。

    makehdl('hdlcoder_protected_model_parent_harness/DUT')

参考

関数

関連するトピック