从 Simulink 模型生成 HDL 代码
此示例说明如何为 Simulink® 中的简单计数器模型生成 HDL 代码。此模型兼容 HDL 代码生成。要创建此计数器模型,请参阅创建 HDL 兼容的 Simulink 模型。
用于 HDL 代码生成的模型模板
您可以使用模板对寄存器、ROM、基本算术运算、复数乘法器、移位寄存器等进行建模。
要选择您的模板,请在 MATLAB® 工具条上,点击
按钮,然后导航到 HDL Coder 部分。请参阅Use Simulink Templates for HDL Code Generation。
在生成 HDL 代码之前,您可以使用 HDL 代码顾问检查和更新模型的 HDL 兼容性。请参阅Check HDL Compatibility of Simulink Model Using HDL Code Advisor。
简单计数器模型
此模型从零向上计数到阈值 15,然后绕回到零。通过更改连接到 count_threshold 端口的 Constant 模块值,您可以更改阈值。使能端口指定计数器是向上计数还是保持先前的值。通过更改连接到使能端口的 Constant 模块值,您可以更改计数器动作。值为 1 表示计数器向上计数。值为 0 表示保持先前的计数值。

生成 HDL 代码
对于计数器模型,HDL_DUT 子系统是 DUT。要为 DUT 生成代码,请执行以下操作:
在 App 选项卡中,选择 HDL Coder。
在模型中选择 DUT 子系统,并确保此 Subsystem 名称出现在 HDL 代码选项卡上的以下项的代码选项中。要记住所选内容,请固定此选项。点击生成 HDL 代码。
默认情况下,HDL Coder™ 在目标 hdlsrc 文件夹中生成 VHDL 代码。
生成 SystemVerilog 代码
要为计数器模型生成 SystemVerilog 代码,请执行以下操作:
在 HDL 代码选项卡中,点击设置。
在 HDL 代码生成窗格中,对于语言,选择
SystemVerilog。点击应用,然后点击生成。

HDL Coder 在生成代码之前编译模型。根据模型显示选项(如端口数据类型),模型在代码生成后外观可能会发生变化。随着代码生成的进行,HDL Coder 在 MATLAB 命令行中显示进度消息,其中包含指向配置集和生成文件的链接。要在 MATLAB 编辑器中查看文件,请点击这些链接。
该过程完成后会显示以下消息:
### HDL Code Generation Complete.
查看 HDL 代码生成文件
当前文件夹中会出现 hdlsrc 文件夹的文件夹图标。要查看生成代码和脚本文件,请双击 hdlsrc 文件夹,然后双击与您为其生成 HDL 代码的模型同名的文件夹。
HDL_DUT.vhd:VHDL® 代码,其中包含实现您设计的计数器的实体定义和 RTL 架构。如果您生成了 Verilog 或 SystemVerilog 代码,您将得到HDL_DUT.v或HDL_DUT.sv文件。HDL_DUT_compile.do:Siemens® ModelSim™ 编译脚本。HDL_DUT_map.txt:映射文件,它将 HDL 代码中生成的实体或模块映射到生成它们的模型中的子系统。请参阅Trace Code Using the Mapping File。HDL_DUT_report.html:HDL 检查报告显示 HDL 代码生成状态以及警告或消息。gm_hdlcoder_simple_up_counter.slx:在 Simulink 建模环境中在行为上表示 HDL 代码的生成模型。hcv:HDL 代码视图文件,用于在 Simulink 的代码视图面板上显示生成代码。要在 Simulink 中查看生成的 HDL 代码,请在 HDL Coder 上点击查看代码。
HDL Coder 创建一个名为生成模型的 HDL 代码行为模型。生成模型的名称与原始模型相同,并具有前缀 gm_。生成模型对生成的 HDL 代码是逐位精确和周期精确的。此模型显示您指定的模块实现以及速度和面积优化的效果。另请参阅Introduction to Optimizations in HDL Coder。
要打开计数器的生成模型,请输入:
gm_hdlcoder_simple_up_counter
对于计数器模型,因为优化被禁用,生成的模型与原始模型相同。
要同时查看生成的 HDL 代码和模型,您可以使用代码视图。在为模型生成 HDL 代码后,代码视图会在模型右侧显示生成代码。要手动打开代码视图,请打开 HDL Coder。在 Simulink 工具条上点击查看代码按钮。使用代码视图顶部的下拉列表选择要显示的文件。您可以从编辑器中停靠或取消停靠代码视图,并使用代码视图右上角的向下箭头最小化或展开代码视图。
检查生成的 HDL 代码
为了更轻松地识别源模型与生成的 HDL 代码之间的映射,请生成可追溯性报告。使用该报告从模型中的模块导航到该模块的生成代码,以及从代码导航到模型中的模块。
要生成可追溯性报告,请执行以下操作:
在 HDL 代码选项卡中,点击设置 > 报告选项。
在 HDL 代码生成 > 报告窗格中,选择生成可追溯性报告,然后为
HDL_DUT子系统生成 HDL 代码。

生成代码后,“代码生成报告”窗口将打开。HDL Coder 将代码生成报告文件写入编译文件夹的 hdlsrc\html\ 文件夹中。如果您关闭了报告,可以导航到此文件夹重新打开报告。
要从 HDL 代码导航到模型,请遵循以下任一工作流:
使用代码视图:
点击生成 HDL 代码后出现在右侧的代码视图面板,或手动点击 HDL Coder 的 Simulink 工具条上的查看代码按钮。
要从模型元素导航到其生成代码,请在模型中点击一个模块。代码视图会突出显示该模块的代码,并滚动到突出显示的代码行。

在代码视图中,点击行号超链接或代码注释链接,以突出显示该代码行追溯到的模块。您可以将代码行追溯到生成这些代码行的模型元素。

使用代码生成报告:
在代码生成报告中,导航到可追溯性报告部分,然后点击代码位置部分中的链接。
选择一个代码行的超链接,以在您的模型中突出显示对应的模块。
要从模型中的模块导航到 HDL 代码,请选择该模块,然后在 HDL 代码选项卡的查看结果部分中点击导航到代码按钮。

请参阅Navigate Between Simulink Model and HDL Code by Using Traceability和Create and Use Code Generation Reports。
在生成的源文件部分中,如果点击 HDL 文件 HDL_DUT,您会看到信号 clk、reset 和 clk_enable。这些信号是控制目标硬件上触发器的时钟、复位和时钟使能信号。HDL Coder 根据您在模型中使用的顺序元素(如 Delay 模块)在代码中生成这些信号。请参阅Generation of Clock Bundle Signals in HDL Coder。
使用验证模型验证 HDL 行为
为了使用原始模型验证 HDL 代码的行为模型,请生成验证模型。验证模型同时包含原始模型和生成模型。它使用您在原始模型中提供的测试向量来比较两个模型的输出。
要生成验证模型,请执行以下操作:
在 HDL 代码选项卡中,点击设置。
在 HDL 代码生成 > 全局设置 > 模型生成选项卡中,选择验证模型,然后为
HDL_DUT子系统生成 HDL 代码。

在代码生成日志中,您会看到指向验证模型的链接。验证模型具有与生成模型相同的前缀,并且还具有后缀 _vnl。对于计数器模型,验证模型的名称为 gm_hdlcoder_simple_up_counter_vnl.slx。您可以在与生成模型相同的文件夹中找到此模型。要打开此模型,请输入:
gm_hdlcoder_simple_up_counter_vnl

在对模型进行仿真后,双击 Compare 子系统,然后导航到 Assert_Out 子系统内部。如果您打开 Scope 模块,您会看到 err 信号的值为零,这意味着生成模型的输出与原始模型匹配。
验证生成的 HDL 代码
在将设计部署到目标硬件之前,请验证生成的 HDL 代码。从 hdlsrc 文件夹导航到当前工作文件夹。请参阅Verify Generated HDL Code from Simulink Model。
另请参阅
makehdl | hdlset_param | hdlsetup