当前位置: 首页 > news >正文

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工程的话可能会出问题。


http://www.mrgr.cn/news/78353.html

相关文章:

  • 11.27作业
  • 英雄联盟游戏使用生存分析预测玩家流失
  • Scala—数组(数组定义、数组常用方法等)— 用法详解
  • 前端开发工程师需要学什么?
  • 快速排序 归并排序
  • 【西瓜书】神经网络-MP神经元、感知机和多层网络
  • 表征对齐在训练DiT模型中的重要性
  • 【算法 python A*算法的实现】
  • 某j,mybatis-plus,多租户,多表关联查询 ,主表不追加租户条件bug解决
  • element ui select绑定的值是对象的属性时,显示异常.
  • SAP学习
  • Android 图形系统之一:概览
  • 【Zookeeper】三,Zookeeper的安装与基本操作
  • 《Learning Three.js》学习(1)使用Three.js创建三维场景
  • ABAP OOALV模板
  • 蓝桥杯备赛笔记(一)
  • transformer学习笔记-神经网络原理
  • mini-spring源码分析
  • Leetcode(快慢指针习题思路总结,持续更新。。。)
  • 【halcon】Metrology工具系列之 get_metrology_object_model_contour
  • Leetcode 51 N Queens Leetcode N Queens II
  • Qt程序发布及打包成exe安装包
  • Windows Server 2019 虚拟机 安装Oracle19c,图文详情(超详细)
  • Chrome和edge浏览器如何为任何网站强制暗模式
  • git 学习笔记
  • VTK中对于相机camera的设置