主要内容

创建 HDL 兼容的 Simulink 模型

此示例说明如何创建一个适用于 HDL 代码生成的 Simulink® 模型。要创建一个与 HDL 代码生成兼容的 MATLAB® 算法,请参阅Create HDL- or HLS-Compatible MATLAB Algorithms

该模型是一个简单的计数器算法,它向上计数,并在达到您指定的上限后绕回到零。要直接打开模型而不执行这些步骤,请参阅简单计数器模型

使用空白 DUT 模板

要创建一个 HDL 兼容的 Simulink 模型,请使用空白 DUT 模板。该模板使用 hdlsetup 函数针对 HDL 代码生成进行了预配置。

  1. 在 MATLAB 工具条上,点击 Simulink 按钮。

  2. 在 Simulink 起始页中,导航到 HDL Coder 部分,然后选择空白 DUT 模板。

  3. 将模型以文件名 hdlcoder_simple_up_counter.slx 保存在可写的工作文件夹中。

Simple counter model that has subsystem named HDL_DUT.

空白 DUT 模板有 HDL_DUT 子系统,该子系统对应于您要为其生成 HDL 代码的在测设计 (DUT)。为了验证 DUT 功能,模板包含一个在 HDL_DUT 子系统外部的测试平台,该测试平台向 DUT 提供输入并记录输出值。请参阅Partition Model into DUT and Test Bench

从 HDL Coder 库中选择模块

要设计您的计数器算法,请使用 HDL Coder 模块库中的模块。此库中的模块已针对 HDL 代码生成进行了预配置。要过滤 Simulink 库浏览器以显示支持 HDL 代码生成的模块库,请执行以下操作:

  1. App 选项卡上,选择 HDL Coder

  2. HDL Code 选项卡中,选择 HDL 模块属性 > 打开 HDL 模块库

或者,在命令行中输入 hdllib

hdllib

Simulink Library Browser that shows the HDL Coder compatible blocks.

您可以通过 Simulink 使用 HDL Coder 库中的模块。如果您没有 HDL Coder™,您可以在模型中对这些模块进行仿真,但无法生成 HDL 代码。

您可以在以下模块库中找到 HDL 支持的其他模块:

  • DSP System Toolbox HDL Support

  • Communications Toolbox HDL Support

  • Vision HDL Toolbox

  • Wireless HDL Toolbox

要将库浏览器还原到默认视图,请在库浏览器中点击 exit HDL-compatible blocks mode 按钮。或者,在命令行中输入:

hdllib('off')

为 DUT 开发算法

  1. 双击 HDL_DUT 子系统。将模块从 HDL Coder 库拖到您的模型中。下表列出了要添加到模型以设计计数器的模块。要了解模块的功能并指定其模块参数,请双击该模块。

    模块模块数量模块参数
    ConstantSources2
    • 常量值:1 和 0

    • 输出数据类型:uint8

    SwitchSignal Routing2首个输入传递条件::u2 > 阈值
    DelayDiscrete2延迟长度:1
    SumMath Operations1累加器数据类型:继承:与第一个输入相同
    Relational OperatorLogic and Bit Operations1关系运算符:>
  2. 将输入端口 In1In2 分别重命名为 count_thresholdEnable。将模块放置在您的模型中并连接它们。

    HDL_DUT Subsystem to model simple up counter. The subsystem has two input named, Enable and count_threshold.

Enable 信号指定计数器是否从先前值向上计数。当 Enable 信号为逻辑高电平时,计数器进行从零到 count_threshold 值的向上计数。当 out 的值等于 count_threshold 值时,计数器绕回到零并重新开始计数。当 Enable 信号变为逻辑低电平时,计数器保持先前的值。

为设计创建测试平台

导航到模型的顶层并更改输入设置。

  • Constant 模块输入更改为 count_threshold:此输入指示计数器计数所达到的最大值。此示例说明如何设计一个 4 位向上计数器。将常量值设置为 15 (2^4 - 1),并将输出数据类型设置为 uint8

    然后,此 Constant 模块的输出数据类型与 HDL_DUT 子系统内部的 Constant 模块的输出数据类型匹配。

  • Counter Free-Running 模块输入更改为 Enable:删除 Counter Free-Running 模块。将此模块替换为 Constant 模块,后者的值为 1输出数据类型设置为 boolean,并且采样时间1

HDL_DUT subsystem with ports connected to inputs and display.

另请参阅创建简单模型

上一节显示了您按照上述步骤创建的 hdlcoder_simple_up_counter.slx 模型。要在 MATLAB 中打开该模型,请点击打开模型按钮。

简单计数器模型

此模型从零向上计数到阈值 15,然后绕回到零。通过更改连接到 count_threshold 端口的 Constant 模块值,您可以更改阈值。使能端口指定计数器是向上计数还是保持先前的值。通过更改连接到使能端口的 Constant 模块值,您可以更改计数器动作。值为 1 表示计数器向上计数。值为 0 表示保持先前的计数值。

仿真并验证设计功能

将模型的停止时间设置为 50。通过点击 按钮对您的模型进行仿真。要查看仿真结果,请打开模型顶层的 Scope 模块。

仿真结果显示 Enable 信号生成常量值 1out 信号从 0 计数到 15,绕回到零,然后再次向上计数。

display of Ramp signal with uniform step increments.

从 Simulink 模型生成 HDL 代码

在生成 HDL 代码之前,您可以验证模型设置是否与 HDL 代码生成兼容。此示例中使用的计数器模型与 HDL 代码生成兼容。要验证和更新模型以与 HDL 兼容,请使用 HDL 代码顾问。请参阅Check HDL Compatibility of Simulink Model Using HDL Code Advisor

请参阅从 Simulink 模型生成 HDL 代码

另请参阅

| | |

主题