前言:本文属于历史项目,跨越的时间线非常长,从 2021 到 2024 年,主要涉及的版本有 MATLAB 2022a 和 MATLAB 2024a。有部分函数和代码都是继承的 2022a,现在我整理时用的 2024a,会发现 HDL Coder 工具箱在这两年变化挺大,新增了很多功能,手册也修改了很多。如果文中的描述不准确,请自行查阅官方文档。

1. HDL Coder开发流程

上图展示了使用 HDL Coder 工具箱生成和优化 HDL 代码的工作流程,具体可以分为以下几步:

  1. Develop Algorithm in Simulink or MATLAB(在 Simulink 或 MATLAB 中开发算法):

  • 开发者可以在 Simulink 或 MATLAB 环境中设计算法。为了确保代码兼容 HDL 生成,编写 MATLAB 算法时要使用符合 HDL 语法和功能的函数。对于 Simulink 设计,应使用 HDL 兼容的 Simulink 模块。

  1. Prepare Design for HDL Code Generation(准备HDL 代码生成):

  • 将设计准备好,以便进行 HDL 代码生成,可能包括debug调试等。

  1. Check HDL Compatibility Using Code Advisor(使用 Code Advisor 检查 HDL生成的 兼容性):

  • 使用 Code Advisor 检查设计是否兼容 HDL 代码生成。Code Advisor 会给出兼容性建议和可能的改进点,以确保模型可以生成高效的 HDL 代码。

  1. Set Up HDL Coder Project(设置 HDL Coder 项目):

  • 建立 HDL Coder 项目,用于管理代码生成过程中的各项参数和设置。包含目标硬件选型、优化选项等信息。

  1. Generate HDL Code(生成 HDL 代码):

  • 运行 HDL Coder 工具生成 HDL 代码。此代码可以直接用于 FPGA 或 ASIC 的设计实现。

  1. Optimize Design for Speed and Area(优化设计以提高速度和面积效率):

  • 优化生成的 HDL 代码,以提高执行速度或降低面积需求。这一过程可能包括资源共享、流水线等分别用于面积优化和时序优化。

  1. Verify Generated Code(验证生成的代码):

  • 验证生成的 HDL 代码,以确保它的功能和性能符合预期。包括仿真测试和后端,以确保代码在实际硬件上的运行效果。

  1. Deploy Generated Code(部署生成的代码):

  • 最终将验证通过的 HDL 代码部署到硬件设备上,如 FPGA 或 ASIC,完成设计的硬件实现。

2. 使用Simulink生成HDL 代码

1) 新建空白文件

在MATLAB主界面启动Simulink,选择HDL Coder下的 Blank DUT。

得到以下文件:

搭建如图所示的一个计数器模型:

需要注意每个模块的数据类型。

这个模型实现了一个计数器的功能,HDL_DUT的输入端口 count_threshold 是计数器的计数最大值,点击运行可以查看仿真波形。

2) 生成 HDL 代码

在顶端选项中选择APP,找到HDL Coder。

点击后会在窗口新建标签,在HDL Coder Setting中对代码生成的参数进行设置。

常用的有:

HDL Coder Generation-> Set Basic Options -> Language -> Verilog

Global Settings 自行设置

Report-> Generate traceability report -> Line Level

其他设置读者自行摸索。

选中HDL_DUT 模块,点击 Generate HDL Coder,需要确保左框中显示的是正确的层级。

运行后能够查看到运行报告:

进入DUT 内部可以双向跟踪代码和模块的对应关系:

单击模块可以高亮对应的代码,单击代码的行号可以高亮对应的模块。

3) hdlsrc文件夹内容说明

hdlsrc 文件夹

  • 当 HDL Coder 完成代码生成后,会在当前文件夹下创建一个名为 hdlsrc 的文件夹。

  • 双击进入 hdlsrc 文件夹,找到与模型名称相同的子文件夹,里面存放了生成的 HDL 代码和相关文件。

HDL 代码文件

  • HDL_DUT.v:这是生成的 Verilog 代码文件,包含模型中设计的主要逻辑模块(例如,一个计数器)的实体定义和 RTL 架构。

HDL_DUT_compile.doSiemens ModelSim 编译脚本

  • 这是一个 ModelSim 的编译脚本(.do 文件),用于将生成的 HDL 代码导入 ModelSim 中进行编译和仿真。

HDL_DUT_map.txt映射文件

  • 映射文件用于将生成的 HDL 代码中的实体或模块与原始 Simulink 模型中的子系统对应起来。

HDL_DUT_report.htmlHDL 检查报告

  • 这是一个 HTML 格式的报告文件,包含代码生成过程中的状态、警告和消息。

gm_hdlcoder_simple_up_counter.slx生成的行为模型

  • 这是生成的 Simulink 模型文件(文件名前缀为 gm_),它行为上等效于 HDL 代码。该模型是位真(bit-true)的,这意味着其模拟输出与生成的 HDL 代码的行为完全一致,用于在 Simulink 中验证 HDL 代码。

hcv 文件HDL 代码查看文件

  • hcv 文件用于在 Simulink 的 Code View 面板中显示生成的 HDL 代码。在 HDL Coder 应用程序中点击 View Code 按钮,即可通过此文件在 Simulink 中查看 HDL 代码。

在生成的代码中,无需考虑时钟和复位信号,这些信号在前文中的HDL Coder Setting中设置,可以修改端口名,同步/异步复位,高低电平有效,上升沿/下降沿触发等等。当模型中包含时序逻辑时,这些信号都会自动生成,但当模型完全为组合逻辑时,这些信号不会生成(除非手动指定)。

3. 使用MATLAB 函数生成HDL 代码

待补充~