Matlab Simulink HDL Coder FPGA开发初体验—计数器
目录
- 一、Simulink设计及仿真
- 二、Verilog HDL代码转换
- 1、参数配置
- 2、HDL代码生成
- 三、ModelSim仿真分析
- 1、使用自己编写的Testbench文件进行仿真
- 2、使用HDL Coder生成的Testbench文件进行仿真
前言
Simulink HDL Coder是一款将Simulink和Stateflow模型转化为可综合的Verilog和VHDL代码的工具。它支持FPGA、ASIC和SoC的高层设计,确保生成的代码与原模型保持一致,并且支持多种优化选项,如速度和面积优化、关键路径突出显示以及资源利用率估计。
主要功能:
- 代码生成:Simulink HDL Coder可以将Simulink模型和Stateflow框图生成可综合的Verilog和VHDL代码,确保与原模型的一致性。
- 优化选项:用户可以选择多种优化选项,如速度优化、面积优化等,突出显示关键路径,并在综合之前生成资源利用率估计值。
- 代码验证:支持对生成的HDL代码进行功能验证,确保代码的正确性。此外,还可以生成仿真和综合脚本文件,方便用户进一步验证和调试。
Simulink HDL Coder广泛应用于各种需要FPGA、ASIC和SoC设计的应用场景。例如:
- 数字信号处理:在通信、雷达和音频处理等领域,Simulink HDL Coder可以帮助设计高效的数字信号处理算法。
- 控制系统:在工业自动化、航空航天等领域,可以用于设计复杂的控制系统。
- 图像处理:在视频处理和图像识别等应用中,可以生成高效的图像处理算法。
开发环境和集成工具:
Simulink HDL Coder可以与MATLAB、Simulink和Stateflow紧密集成,提供从模型设计到代码生成再到验证的完整流程。
使用 MATLAB和 Simulink开发原型和生产应用程序,以部署在 FPGA、ASIC 和 SoC 设备上。借助 MATLAB 和 Simulink,您可以:
- 在高度抽象级别对数字、模拟和软件进行建模和仿真。
- 使用自动向导进行定点转换,或者为任意目标设备生成本机浮点运算。
- 通过内存、总线和 I/O 建模对硬件和软件架构进行分析。
- 生成经过优化、可读且可跟踪的 VHDL、Verilog®或 SystemVerilog,用于在数字逻辑中实现。
- 生成针对处理器优化的 C/C++ 代码,以部署到嵌入式处理器。
- 对连接到 MATLAB 或 Simulink 测试平台的 HDL 仿真器或 FPGA 或 SoC 设备上运行的算法进行验证。
基本的HDL代码生成工作流如下:
一、Simulink设计及仿真
1、打开Matlab Simulink
Simulink首页里面有很多关于HDL Coder的示例:
2、选择Blank DUT创建一个空的模板,如下所示:
关于Simulink内部的各种功能控件的使用方法后续再更新。
3、系统设计
这里我在空白的模板内部更改并添加了一些新的组件,中间绿色的子系统模块就是将要转换成HDL代码的模块,用来实现从0-10的计数器,并判断当计数值大于等于5时,子系统输出1’b1,否则输出1’b0。如下图所示:
双击子系统模块可以进入内部查看详细设计,其中Out1输出端口是为了观察计数器的仿真,后续综合为HDL代码时需要去掉:
设计完成后点击保存。
4、系统功能仿真
在仿真标签页中选择Run Simulation运行仿真,可以设置仿真的时间:
从仿真示波器中可以看到当计数值大于等于5时,模块输出高电平,否则输出低电平,功能验证没有问题:
最终将要参与综合的设计如下:
二、Verilog HDL代码转换
1、参数配置
(1)选择菜单栏APP,选择HDL Coder:
(2)选择Settings>HDL Code Generation Settings,不同版本的Matlab该设置位置可能不一致
(3)点击Solver,将Solver selection_Type改为Fixed-step,其余默认,点击Apply应用:
(4)点击Hardware Implementation,将Device vendor设置为ASIC/FPGA,其余默认,点击Apply应用:
(5)点击Target,设置芯片型号及时钟频率,其余保持默认,点击Apply:
(6)点击Global Settings,将复位电平设置为低电平有效,其余保持默认,点击Apply:
(7)关联Vivado软件进行联合编译
在Matlab命令窗口输入命令:
hdlsetuptoolpath ('ToolName','…','ToolPath','…')
2、HDL代码生成
(1)选择HDL Code Advisor自动检查设计中的错误
检查没问题进入下一步。
(2)选中要转换的子系统点击右键,选择HDL Code>HDL Workflow Advisor
弹出如下窗口:
(3)点击Set Target确认设置的目标器件型号以及时钟频率准确无误,在1、(5)的步骤中的设置会自动填充到下图中
右键点击Set Target,点击Run All完成该部分设置:
运行完成后会显示绿色√
(4)同理右键点击Prepare Model For HDL Code Generation,点击Run All完成该部分设置:
(5)选择HDL Code Generation>3.2 Generate RTL Code and Testbench,勾选Generate RTL Code与Generate Testbench选项,然后点击Apply
随后同上选中HDL Code Generation,点击Run All完成此部分设置:
(6)最后右键点击FPGA Synthesis and Analysis,选择Run All,生成最后的文件以及Vivado工程
最后会弹出代码生成报告:
最后生成有两个目录:
可以打开生成的counter.v文件看看:
生成的Testbench文件:
三、ModelSim仿真分析
下面用自己编写的Testbench文件和使用HDL Coder生成的Testbench文件进行仿真对比:
1、使用自己编写的Testbench文件进行仿真
打开自动生成的Vivado工程
将自己写的Testbench文件添加到工程
然后运行仿真,这里我用的是Vivado和ModelSim的联合仿真:
2、使用HDL Coder生成的Testbench文件进行仿真
打开Modelsim仿真工具,将工作区目录切换到HDL Coder生成的仿真文件所在文件夹下:
HDL Coder生成的仿真文件所在文件夹下有两个文件:
- xxx_tb_compile.do:ModelSim编译脚本(vcom命令)。该脚本编译并加载要测试的实体和Testbench代码。
- xxx_tb_sim.do:ModelSim脚本初始化模拟器,设置波窗口信号显示,并运行仿真。
首先在ModelSim Transcript窗口运行 xxx_tb_compile.do文件:
然后运行xxx_tb_sim.do文件:
查看仿真波形:
可以看出仿真基本没问题,和我们自己写的仿真文件结果基本一致,后续就可以自己上板调试抓取波形看看,上板是否和仿真基本一致。
建议:如果要将Simulink生成的Verilog代码上板验证的话建议重新创建一个Vivado工程,直接使用Simulink生成的Vivado工程的话可能会出问题。