Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

保护模型以隐藏内容

当您要与第三方共享模型而又不能泄露知识产权时,请对模型进行保护。创建受保护模型时,需要将原始模型编译到引用模型中以隐藏原始模型的实现细节。受保护模型包括派生文件,以支持您指定的可选功能。

在您保护模型时,可以允许受保护模型的用户执行以下操作:

  • 打开模型的只读 Web 视图,包括模型内容和模块参数。

  • 在 Accelerator(默认值)、Rapid Accelerator 和 Normal 模式下对模型进行仿真。

  • 为包含受保护模型的模型生成代码。

  • 为包含受保护模型的模型生成 HDL 代码。要了解如何创建支持 HDL 代码生成的受保护模型,请参阅Create Protected Models to Conceal Contents and Generate HDL Code (HDL Coder)

  • 如果您有 Embedded Coder® 并为模型指定了基于 ERT 的系统目标文件,可通过独立接口为受保护模型生成代码。

您可以选择使用密码保护每个选项。如果您为其中一个选项选择了密码保护,软件将通过使用 AES-256 加密来保护支持文件。

创建受保护模型时:

  • Simulink® 以与源模型同名的文件创建并存储模型的受保护版本,但文件扩展名为 .slxp

  • 扩展名为 .slx 的原始模型文件不会更改。如果您通过 Model 模块保护模型,则 Model 模块不会更改。

  • (可选)Simulink 创建一个工程存档 (.mlproj),其中包含受保护模型、受保护模型的框架模型及其他支持文件。

要基于引用模型创建受保护模型,请选择引用该模型的一个 Model 模块,然后使用以下选项之一:

  • 在 Simulink 工具条的 Model Block 选项卡上,点击 Protect 按钮。

  • 在 Simulink 工具条的 C Code 选项卡上,点击 Share 按钮箭头,然后选择 Generate Protected Model From Selected Model Block

要基于当前模型创建受保护模型,请使用以下选项之一:

  • 在 Simulink 工具条的 Simulation 选项卡上,点击 Save 按钮箭头,然后选择 Protected Model

  • 在 Simulink 工具条 C Code 选项卡上,点击 Share 按钮箭头,然后选择 Generate Protected Model

要以编程方式创建受保护模型,请使用 Simulink.ModelReference.protect 函数。

如果您的受保护模型需要其他支持文件,如基础工作区定义或数据字典,请在共享模型时将这些文件与模型一起提供。有关详细信息,请参阅Package and Share Protected Models

此示例说明如何基于引用模型创建受保护模型,以进行只读查看、仿真或代码生成。

准备父模型

将父模型中的 Model 模块配置为引用原始的被引用模型。此步骤可防止 Model 模块在您创建受保护模型时成为受保护的引用。

  1. 打开引用要保护的模型的父模型。对于此示例,请打开模型 sldemo_mdlref_basic

  2. 要运行工作流,请创建要保护的 sldemo_mdlref_counter 模型的本地副本。然后,您可以创建父模型 sldemo_mdlref_basic 的本地副本。您必须将父模型保存在与引用模型相同的文件夹中。

  3. 打开您在本地保存的 sldemo_mdlref_basic 模型。确保 Model 模块 CounterACounterBCounterC 引用您在本地保存的 sldemo_mdlref_counter 模型。

  4. 对于每个 Model 模块,打开 Block Parameters 对话框,并在 Model name 字段中指定扩展名 .slx。如果该模型和受保护模型在同一个文件夹中,则 .slxp 优先于 .slx。如果未指定扩展名,则模型中的原始 Model 模块将引用受保护模型,而不是原始模型。点击 OK

保护引用的模型

  1. 点击三个 Model 模块中的任一模块。在 Simulink 工具条的 Model Block 选项卡上,点击 Protect

  2. 在 Create Protected Model 对话框中,选中 SimulateUse generated code 复选框。这些选项允许受保护模型的用户对引用了受保护模型的模型进行仿真并为其生成代码。如果要为受保护模型的功能设置密码保护,请输入至少包含四个字符的密码。每个选项都可以有唯一密码。

  3. 如果您拥有 Embedded Coder,并为模型指定了基于 ERT 的系统目标文件(例如 ert.tlc),Code interface 字段将处于可见状态。

    在此示例中,sldemo_mdlref_basic 未指定基于 ERT 的系统目标文件,因此 Create Protected Model 对话框中的 Code interface 选项不可用。

    Code interface 下拉列表中,选择以下选项之一:

    • Model reference” - 指定通过模型引用代码接口来访问代码,允许在模型引用层次结构中使用受保护模型。受保护模型的用户可以从包含受保护模型的父模型中生成代码。用户可以使用受保护模型运行 Model 模块 SIL/PIL 仿真。

    • Top model” - 指定通过独立接口来访问代码。受保护模型的用户可以使用受保护模型来运行 Model 模块 SIL/PIL 仿真。

  4. Content type 列表中选择 “Obfuscated source code”,以隐藏受保护模型的源代码目的和逻辑。有关模型保护选项的详细信息,请参阅Content type

  5. 如果您有 HDL Coder™,您可以选中 Use generated HDL code 复选框,为引用受保护模型的模型生成 HDL 代码。如果您要对受保护模型的此功能使用密码保护,您必须指定至少八个字符。您不能对受保护模型的 HDL 源代码进行模糊处理。

    在本示例中,引用模型 sldemo_mdlref_counter 使用 double 数据类型。在 HDL Code Generation > Floating Point 选项卡中,将 Library 设置为 Native Floating Point,将 Latency Strategy 设置为 ZERO。另请参阅Create Protected Models to Conceal Contents and Generate HDL Code (HDL Coder)

  6. Destination folder 框中,指定受保护模型的文件夹路径。默认值为当前工作文件夹。

  7. 要自动收集、创建和打包受保护模型的支持文件,请将 Contents 设置为 “Protected Model (.slxp) and dependencies in a project”。

    注意

    在共享工程之前,请检查工程是否包含必要的支持文件。如果缺失支持文件,对相关的框架模型进行仿真或生成代码有助于识别这些文件。将缺失的依存关系添加到工程中,并根据需要更新框架模型。

  8. Contents 设置为 “Protected Model (.slxp) and dependencies in a project” 会选中 Create harness model for protected model 复选框。框架模型包含在工程中,并为引用受保护模型的 Model 模块提供独立环境。

  9. 要进一步自定义受保护模型,您可以:

  10. 点击 Create

    包含受保护模型、框架模型和支持文件的工程存档 (.mlproj) 将出现在指定的目标文件夹中。要测试受保护模型,请通过在当前文件夹浏览器中双击工程存档并指定目标文件夹来提取工程存档的内容。或者,右键点击工程存档,然后点击 Extract Here。工程将打开,提取的文件位于以工程存档命名的新文件夹中。

  11. 从 Simulink Editor 创建受保护模型时,将生成受保护模型报告,并将其作为受保护模型的一部分。对于此示例,要查看受保护模型报告,请双击受保护模型或右键点击框架模型中模块上的受保护模型徽章图标,然后选择 Display Report

    该报告包含:

    • Summary,包括以下表:

      • Environment,提供 Simulink 版本和其他产品版本,以及用于创建受保护模型的平台。

      • Supported functionality,对受保护模型支持的每个可能功能报告 “On”、“Off” 或 “On with password protection”。如果您为多个目标配置受保护模型,此表将包含受支持目标的列表。

    • Interface Report,包括模型接口信息,如输入和输出设定、导出的函数信息、接口参数和数据存储。

    要在使用 Simulink.ModelReference.protect 函数时生成报告,请将 'Report' 设置为 true

  12. 您可以测试受保护模型以将其与原始模型进行比较。有关详细信息,请参阅Test Protected Models

  13. 要在模型层次结构中使用该受保护模型,请通过 Model 模块(例如框架模型中包含的 Model 模块)引用它。引用受保护模型的 Model 模块的 Simulation mode 设置为 “Accelerator”。您不能更改此模式。有关详细信息,请参阅引用来自第三方的受保护模型

受保护模型的要求和限制

创建受保护模型时,请考虑以下要求:

  • 您必须拥有 Simulink Coder™ 或 HDL Coder 许可证才能创建受保护模型。

  • 模型必须位于 MATLAB® 路径上。

  • 模型不能有未保存的更改。

  • 模型不能直接或间接使用非内联 S-Function。

  • 模型使用在保护期间处于激活状态的配置。您无法更改受保护模型的配置。

  • 如果模型包含变体,则受保护模型仅包含在保护期间处于激活状态的变体。

  • 模型保护过程不保留任何回调。有关创建用于受保护模型的回调的详细信息,请参阅Define Callbacks for Protected Models

  • 不要重命名受保护模型或更改其后缀。否则,模型将不可用,直到还原了其原始名称和后缀才可用。

  • 为模型及其引用的模型使用唯一名称。如果某受保护模型所引用模型的名称与另一个受保护模型的名称相同,或与另一个受保护模型的层次结构内的不同模型的名称相同,则使用该受保护模型存在限制。如果某顶层模型引用了存在上述名称冲突的两个受保护模型,则您无法保护该顶层模型、为该顶层模型生成代码或者在软件在环 (SIL)、处理器在环 (PIL) 或 Rapid Accelerator 模式下仿真顶层模型。

该模型还必须满足模型引用的要求和限制中列出的要求。

代码生成要求和限制

要创建支持代码生成的受保护模型,您的模型必须满足以下要求:

  • 受保护模型必须使用 Normal、Accelerator、软件在环 (SIL) 或处理器在环 (PIL) 模式和单个目标。

  • 不要选中 Code Generation > Verification > Measure function execution time 复选框。如果在保护模型时选中了此选项,软件将关闭参数并显示警告。

  • 受保护引用模型必须支持代码生成且没有密码保护。

  • 受保护模型必须与每个受保护引用模型的 Content type 兼容。下表提供了兼容性信息。

    代码生成内容类型兼容性

    受保护父模型内容类型兼容的受保护引用模型内容类型
    Binaries
    • Binaries

    • Obfuscated source code

    Binaries”('ObfuscateCode' 设置为 'false'
    • Binaries

    • Binaries”('ObfuscateCode' 设置为 'false'

    • Obfuscated source code

    • Readable source code

    Obfuscated source code
    • Obfuscated source code

    Readable source code
    • Obfuscated source code

    • Readable source code

    当受保护父模型和受保护引用模型的 Content type 不匹配时,代码生成会应用它们之中保护级别较高的 Content type。例如,如果受保护父模型设置为 “Binaries” 类型,而受保护引用模型设置为 “Obfuscated source code” 类型,则该受保护引用模型会生成为 “Binaries” 类型的代码。如果受保护父模型设置为 “Readable source code” 类型,而受保护引用模型设置为 “Obfuscated source code” 类型,则该受保护引用模型会生成为 “Obfuscated source code” 类型的代码。

要避免在包含受保护模型的模型的代码生成过程中出现错误,请遵循下列各项:

  • 受保护模型名称必须与同一模型引用层次结构中的其他模型名称不同。

  • 接口必须匹配。

  • 参数必须兼容。

嵌套受保护模型的要求和限制

如果您的受保护模型被另一个受保护模型引用,则您的模型必须:

  • 支持 Accelerator 模式。您必须在 Create Protected Model 对话框中选择 Simulate,或者使用 Simulink.ModelReference.protect 函数将 'Mode' 设置为 'Accelerator''CodeGeneration'

  • 使用默认的 'CodeInterface' 设置:'Model reference'

  • 对仿真不使用密码保护。

  • 没有回调。

  • 支持受保护父模型支持的操作且这些操作不能有密码保护。

  • 使用与受保护父模型的 Content type 兼容的 Content type(如果受保护父模型支持代码生成)。有关兼容的 Content type 选项的列表,请参阅上一节中的表。

  • 引用模型的名称不能与另一个受保护模型的名称相同,或与另一个受保护模型的层次结构内的不同模型的名称相同。

如果要保护的模型引用受保护模型,受保护引用模型必须满足前面的要求。

注意

如果您在选择了 Use generated HDL code 选项的情况下创建了一个受保护模型,则支持对引用了该受保护模型的模型进行仿真和 HDL 代码生成,并可对仿真和 HDL 代码生成进行加密。在使用此选项时,您不能对 HDL 源代码进行混淆处理、使用回调或使用嵌套的受保护模型。要了解有关 HDL 代码生成限制的更多信息,请参阅 Protected Model Restrictions for HDL Code Generation (HDL Coder)

相关主题