从Simulink模型生成HDL代码
这个例子展示了如何在Simulink中为一个简单的计数器模型生成HDL代码。该模型兼容HDL代码生成。要创建此计数器模型,请参考文章:Matlab Simulink HDL Coder开发流程(一)—创建HDL兼容的Simulink模型。
一、用于生成HDL代码的模型模板
您可以使用模板对寄存器、ROM、基本算术运算、复杂乘数器、移位寄存器等进行建模。
要选择模板,请在MATLAB工具栏上单击按钮,然后导航到HDL Coder部分。
在生成HDL代码之前,您可以使用HDL Code Advisor检查和更新HDL兼容性模型。
二、简单的计数器模型
打开这个模型可以看到一个简单的计数器。该模型从零开始计数到一个阈值,然后返回到零。阈值设置为15。要更改阈值,请更改count_threshold端口的输入值。Enable信号指定计数器是向上计数还是保持先前的值。值为1表示计数器持续向上计数。

三、生成HDL/Verilog代码
生成VHDL代码
对于计数器模型,HDL_DUT子系统就是DUT。为DUT生成代码:
1、在Apps选项卡中,选择HDL Coder。
2、在您的模型中选择DUT子系统,并确保该子系统名称出现在HDL Code选项卡上的Code for选项中。要记住选择,请固定此选项。单击“生成HDL代码”。
默认情况下,HDL Coder在目标hdlsrc文件夹中生成VHDL代码。
生成Verilog代码
要为计数器模型生成Verilog代码:
1、在“HDL Code”选项卡中,单击“Settings”。
2、在“HDL Code Generation Settings”窗格中,选择语言为Verilog。单击Apply,然后单击Generate。

HDL Coder在生成代码之前编译模型。根据模型显示选项(如端口数据类型),模型可以在代码生成后更改外观。随着代码生成的进行,HDL Coder在MATLAB命令行中显示进度消息,并链接到配置集和生成的文件。要在MATLAB编辑器中查看文件,请单击链接。
该过程完成并显示消息:

四、查看HDL代码生成文件
要查看生成的代码和脚本文件,双击hdlsrc文件夹,然后双击与生成HDL代码的模型同名的文件夹。
- HDL_DUT.vhd:包含实体定义和实现所设计计数器的RTL体系结构的VHDL代码。如果您生成了Verilog或SystemVerilog代码,您将得到一个HDL_DUT.v或HDL_DUT.sv文件。
- HDL_DUT_compile.do:ModelSim编译脚本。
- HDL_DUT_map.txt:将HDL代码中生成的实体或模块映射到生成它们的模型中的子系统的映射文件。
- HDL_DUT_report.html:HDL检查报告显示HDL代码生成状态和警告或消息。
- gm_hdlcoder_simple_up_counter.slx:生成的模型在Simulink建模环境中行为地表示HDL代码。
- hcv:HDL代码视图文件,用于在Simulink的代码视图面板上显示生成的代码。要在Simulink中查看生成的HDL代码,请单击HDL Coder应用程序上的“View Code”。
HDL Coder创建HDL代码的行为模型,称为生成模型。生成的模型名称与原始模型名称相同,并带有前缀gm_。生成的模型是位真生成HDL代码从Simulink模型和周期精确到生成的HDL代码。该模型显示了您指定的块实现、速度和区域优化的效果。
要打开计数器生成的模型,在Matlab命令行输入:
gm_hdlcoder_simple_up_counter
对于计数器模型,由于禁用了优化,生成的模型与原始模型相同。
要在模型旁边查看生成的HDL代码,可以使用code视图。在为模型生成HDL代码之后,code视图将生成的代码显示在模型的右侧。要手动打开代码视图,请打开HDL Coder应用程序。在Simulink工具栏上单击“View Code”按钮。通过使用Code视图顶部的下拉列表选择要显示的文件。您可以从编辑器中停靠或取消停靠代码视图,并使用代码视图右上角的向下箭头最小化或展开代码视图。
五、检查生成的HDL代码
为了更容易地识别源模型和生成的HDL代码之间的映射,生成一个可跟踪性报告。使用报告从模型中的块导航到为该块生成的代码,并从代码导航到模型中的块。
要生成可追溯性报告:
1、在“HDL Code”选项卡中,单击“Settings > Report Options”。
2、在“HDL Code Generation > Report”窗格中,选择“Generate traceability Report”,然后为HDL_DUT子系统生成HDL代码。

生成代码后,将打开“代码生成报告”窗口。HDL Coder在构建文件夹的hdlsrc\html\文件夹中编写代码生成报告文件。如果关闭报表,则可以导航到此文件夹以重新打开报表。
要从HDL代码导航到模型,请遵循以下工作流程之一:
- 使用Code视图:
1、单击生成HDL代码后右侧出现的代码视图面板,或手动单击HDL Coder应用程序的Simulink工具栏上的查看代码按钮。
2、要从模型元素导航到它们生成的代码,在您的模型中,单击一个块。Code视图突出显示块的代码,并滚动到突出显示的代码行。

3、在“Code”视图中,单击行号超链接或代码注释链接,以突出显示代码行跟踪到的块。您可以跟踪代码行到生成它们的模型元素。

- 使用代码生成报告:
1、在代码生成报告中,导航到Traceability Report部分,然后单击代码位置部分中的链接。
2、选择指向一行代码的超链接,以突出显示模型中相应的块。

要从模型中的块导航到HDL代码,请选择该块,然后单击HDL代码选项卡的Review Results部分中的导航到代码按钮。

在生成的源文件部分,如果您单击HDL文件HDL_DUT,您将看到clk、reset和clk_enable信号。这些信号是控制目标硬件上触发器的时钟、复位和时钟使能信号。HDL Coder根据您在模型中使用的延迟块等顺序元素在代码中生成这些信号。
六、使用验证模型验证HDL行为
要用原始模型验证HDL代码的行为模型,请生成一个验证模型。验证模型包含原始模型和生成的模型。它通过使用您在原始模型中提供的测试向量来比较两个模型的输出。
生成验证模型:
1、在“HDL Code”选项卡中,单击“Settings”。
2、在“HDL Code Generation > Global Settings > Model Generation”页签中,选择“Validation Model”,然后生成HDL_DUT子系统的HDL代码。

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

仿真模型之后,双击Compare子系统,然后在Assert_Out子系统中导航。如果您打开Scope块,您会看到错误信号的值为零,这意味着生成的模型输出与原始模型匹配。
注:下图是自己另一个工程的图,非本文示例仿真验证结果:

七、验证生成的HDL代码
在将设计部署到目标硬件之前,请验证生成的HDL代码。从hdlsrc文件夹导航到当前工作文件夹。
关于该章节详细内容在本系列第三篇文章进行详细说明:Matlab Simulink HDL Coder开发流程(三)— 验证从Simulink模型生成的HDL代码
1万+

被折叠的 条评论
为什么被折叠?



