保護モデルを作成し内容を隠して HDL コードを生成する
知的財産を開示せずにサードパーティとモデルを共有する場合は、モデルを保護してください。保護モデルの作成時に、元のモデルの実装の詳細を参照モデルにコンパイルすることで隠します。保護モデルには、C コード生成や HDL コード生成のサポートなど、指定するオプション機能をサポートするための派生ファイルが含まれます。
HDL Coder™ のライセンスがある場合に、どのようにしてシミュレーションおよび HDL コード生成をサポートする保護モデルを作成できるかを示しています。保護モデルのユーザーは、その後、作成した保護モデルを参照するモデル向けの HDL コードを生成できます。C コード生成のサポートを有効にする、またはコード インターフェイスなどの追加のオプションを指定するためには、Simulink® Coder™ または Embedded Coder® ライセンスがなければなりません。このワークフローの詳細については、コンテンツを隠すためのモデルの保護を参照してください。
モデル保護が動作する仕組み
モデルを保護すると、保護モデルのユーザーに以下を許可できます。
ノーマル モード、アクセラレータ モード、ラピッド アクセラレータ モード、またはエクスターナル モードで、保護モデルを含むモデルをシミュレートする。
モデルの内容およびブロック パラメーターを含む、モデルの読み取り専用 Web ビューを開く。モデルの読み取り専用 Web ビューを作成するには、Simulink Report Generator™ のライセンスが必要です。
保護モデルを含むモデルの HDL コードを生成する。
Simulink Coder のライセンスがある場合に、保護モデルを含むモデルの C および 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
という名前の親モデルを開きます。情報オーバーレイを表示するには、Simulink ツールストリップの [モデル化] タブで [モデルの更新] をクリックします。
mdl = "hdlcoder_protected_model_parent_harness"; open_system(mdl) set_param(mdl,SimulationCommand="Update")
親モデルの Model ブロックに移動するには、DUT
という名前の Subsystem ブロックをダブルクリックします。次に、mynested
という名前の Subsystem ブロックをダブルクリックします。このサブシステムでは、Model ブロックは hdlcoder_referenced_model_gain
という名前のモデルを参照します。
ss = "hdlcoder_protected_model_parent_harness/DUT/mynested";
open_system(ss)
プロパティ インスペクターを開きます。次に、Model ブロックを選択します。この例では、[モデル名] の値に拡張子 .slx
が含まれています。参照モデルと保護モデルが同じフォルダーに存在している場合、拡張子が指定されていない限り、親モデルは保護モデルを参照します。
Model ブロックは、保護するモデルである hdlcoder_referenced_model_gain.slx
という名前のモデルを参照します。参照モデルを表示するには、Model
ブロックをダブルクリックするか、hdlcoder_referenced_model_gain
という名前のモデルを別のウィンドウで開きます。
refmdl = "hdlcoder_referenced_model_gain"; open_system(refmdl) set_param(refmdl,SimulationCommand="Update")
参照されるモデルの保護
Model ブロックを選択します。
Simulink ツールストリップの [Model ブロック] タブで、[保護] をクリックします。
[保護モデルの作成者] が開きます。
[保護モデルの作成者] で [シミュレーション] を選択します。このオプションにより、保護モデルのユーザーがその保護モデルを参照するモデルをシミュレーションできます。
ヒント
[保護モデルの作成者] では、MATLAB セッション中にモデルの設定がキャッシュされます。このダイアログ ボックスを閉じてから再び開いても、設定は保持されています。パスワードおよび調整可能なパラメーターの選択はキャッシュされません。既定の設定を復元するには、[リセット] をクリックします。 (R2023b 以降)
Simulink Coder または Embedded Coder がある場合、[コード生成] を選択するか、[コード インターフェイス] を指定することで、パスワードで保護されたコード生成のサポートを有効にするといった追加設定を指定できます。これらのオプションの詳細については、コンテンツを隠すためのモデルの保護 (Embedded Coder)を参照してください。
[HDL コード生成] を選択して、保護モデルを参照するモデルの HDL コードを生成します。保護モデルのこの機能をパスワード保護する場合、8 文字以上を指定しなければなりません。このオプションには一意のパスワードを指定できます。保護モデルの HDL ソース コードを難読化することはできません。
[保存先フォルダー] ボックスで、保護モデルのフォルダー パスを指定します。既定値は、現在の作業フォルダーです。
保護モデルを使用してサポート ファイルを自動的に収集、作成、およびパッケージ化するには、[保護モデルをプロジェクト内の依存関係と共にパッケージ化] を選択します。この例では、このオプションをオフにします。
保護モデルのハーネス モデルを作成するには、[保護モデル用にハーネス モデルを作成する] を選択します。ハーネス モデルは、保護モデルを参照する Model ブロックの分離された環境を提供します。この例では、このオプションはオフのままにします。
[作成] をクリックします。
HDL Coder は HDL コード生成のためのモデルの互換性をチェックし、その後モデル向けのコードを生成します。生成されたコード ファイルの内容は
hdlsrc
フォルダーにあります。生成されたファイルの詳細については保護モデルのパッケージ化と共有を参照してください。保護モデルをモデルの階層構造で使用するには、これを Model ブロックを介して参照します。保護モデルを参照する Model ブロックの [シミュレーション モード] は、
[アクセラレータ]
に設定されます。このモードは変更できません。詳細については、サードパーティからの保護モデルの参照を参照してください。
オプションの詳細については、保護モデルの作成者を参照してください。
関数 Simulink.ModelReference.protect
を使用しているときに保護モデルを作成するには、Mode
を HDLCodeGeneration
に設定します。たとえば、このコマンドを実行して参照モデル hdlcoder_referenced_model_gain
を保護します。
Simulink.ModelReference.protect('hdlcoder_referenced_model_gain', ... 'Mode','HDLCodeGeneration')
保護モデルのレポート
Simulink エディターで保護モデルを作成すると、保護モデルのレポートが生成され、保護モデルの一部として含められます。この例で、保護モデルのレポートを表示するには、保護モデルをダブルクリックするか、ハーネス モデルのブロック上の保護モデルのバッジ アイコンを右クリックし、[レポートの表示] を選択します。
このレポートには以下のものが含まれています。
[Summary]。次のテーブルが含まれます。
[環境]。保護モデルの作成に使用された Simulink のバージョン、Simulink Coder のバージョン、HDL Coder のバージョンおよびプラットフォームなどが記載されます。
[Supported functionality]。保護モデルがサポートする機能ごとに、
[オン]
、[オフ]
、または[パスワード保護でオン]
を報告します。複数のターゲットに対して保護モデルを設定する場合、このテーブルにはサポートされているターゲットのリストが含まれます。
[インターフェイス レポート]。入出力仕様、エクスポート関数の情報、インターフェイス パラメーター、データ ストアなど、モデル インターフェイス情報が記載されます。
関数 Simulink.ModelReference.protect
を使用するときにレポートを生成するには、Report
を true
に設定します。
保護モデルを参照しているモデル向けの HDL コードの生成
保護モデルにシミュレーションおよび HDL コード生成サポートがある場合、保護モデルのユーザーは、保護モデルを参照するモデルからシミュレーションを行ったり HDL コードを生成したりできます。通常のモデル向けのコードを生成するのと同じ方法で、保護モデルを参照するモデル向けの HDL コードを生成します。
保護モデルがパスワード保護されている場合、コードを生成する前に、保護モデルのバッジ アイコンを右クリックして [承認] を選択します。その後、各オプションのパスワードを入力しなければなりません。入力されたパスワードが保護モデルを作成するときに指定したパスワードと一致すると、モデルは承認されます。その後、このモデルの HDL コードを生成できます。
たとえば、モデル hdlcoder_protected_model_parent_harness
によって参照されている保護モデル hdlcoder_referenced_model_gain.slxp
の HDL コードを生成するには、次のようにします。
保護モデルを作成するときにパスワードを指定した場合は、保護モデル
hdlcoder_referenced_model_gain.slxp
を承認します。コンテキスト メニューから、または関数
makehdl
を使用して、DUT サブシステムの HDL コードを生成します。makehdl('hdlcoder_protected_model_parent_harness/DUT')