Matlab Simulink HDL Coder开发流程(三)— 验证从Simulink模型生成的HDL代码

embedded/2024/11/29 11:32:11/

验证从Simulink模型生成的HDL代码

  • 一、什么是HDL Test Bench(测试台)
  • 二、简单的计数器模型
  • 三、验证方法
  • 四、生成HDL Test Bench
    • 生成VHDL Test Bench
    • 生成Verilog Test Bench代码
  • 五、查看HDL Test Bench文件
  • 六、运行仿真和验证生成的HDL代码
  • 七、在目标设备上部署生成的HDL代码

这个例子展示了如何生成一个HDL Testbench,并验证一个简单计数器模型生成的代码。要为该模型生成HDL代码,请参考本系列上一篇文章:Matlab Simulink HDL Coder开发流程(二)—从Simulink模型生成HDL代码”。

如果您没有为这个模型生成HDL代码,那么HDL Coder将在生成Testbench之前运行代码生成。

一、什么是HDL Test Bench(测试台)

为了验证DUT的HDL代码的功能,生成一个HDL测试台(测试台)。测试台包括:

  • 由连接到被测实体的信号源产生的激励数据。
  • 被测实体生成的输出数据。在测试台运行期间,将此数据与VHDL模型的输出进行比较以进行验证。
  • 时钟、复位和时钟使能输入能够驱动被测实体。
  • 被测实体的组件实例化。
  • 驱动被测实体的代码,并将其输出与预期数据进行比较。

您可以使用ModelSim模拟器模拟生成的测试台架和脚本文件。

二、简单的计数器模型

打开这个模型可以看到一个简单的计数器。该模型从零开始计数到一个阈值,然后返回到零。阈值设置为15。要更改阈值,请更改count_threshold端口的输入值。Enable信号指定计数器是向上计数还是保持先前的值。值为1表示计数器持续向上计数。
在这里插入图片描述

三、验证方法

如果安装了HDL验证程序,也可以使用这些方法验证生成的HDL代码。
在这里插入图片描述

四、生成HDL Test Bench

生成VHDL Test Bench

生成VHDL、Verilog或SystemVerilog测试台架代码。默认情况下,相对于当前文件夹,HDL代码和测试台代码被写入相同的目标文件夹hdlsrc。

对于计数器模型,HDL_DUT子系统就是DUT。要生成测试台架,请选择此子系统。
1、在Apps选项卡中,选择HDL Coder。
2、选择DUT子系统HDL_DUT,并确保此名称出现在HDL Code选项卡上的Code for选项中。要记住选择,请固定此选项。单击Generate T estbench。

生成Verilog Test Bench代码

要为计数器模型生成Verilog测试台架代码:
1、在“HDL Code”选项卡中,单击“设置”。
2、在“HDL Code Generation”区域框的“Language”中选择“Verilog”。
3、在“HDLCode Generation > Test Bench”窗格中,单击“Generate Test Bench”。
在这里插入图片描述
在这里插入图片描述
HDL Coder对模型进行编译并生成测试台架。
测试台架生成完成并显示此消息。生成的文件出现在hdlsrc文件夹中
在这里插入图片描述

五、查看HDL Test Bench文件

对于计数器模型,hdlsrc文件夹包含这些测试台架文件:

  • HDL_DUT_tb.vhd:VHDL测试台代码包含生成的测试和输出数据。如果您生成了Verilog或SystemVerilog测试台架代码,生成的文件是HDL_DUT_tb.v或HDL_DUT_tb.sv。
  • HDL_DUT_tb_pkg.vhd:包文件为VHDL测试台代码。如果生成SystemVerilog测试台架代码,生成的文件是HDL_DUT_tb_pkg.sv。如果指定Verilog作为目标语言,则不会生成此文件。
  • HDL_DUT_tb_compile.do:ModelSim编译脚本(vcom命令)。该脚本编译并加载要测试的实体(HDL_DUT_tb.vhd)和测试台架代码(HDL_DUT_tb.vhd)。
  • HDL_DUT_tb_sim.do:ModelSim脚本初始化模拟器,设置波窗口信号显示,并运行仿真。

要在MATLAB编辑器中查看生成的测试台架代码,在当前文件夹中双击HDL_DUT_tb.vhd或HDL_DUT_tb.v。

六、运行仿真和验证生成的HDL代码

为了验证仿真结果,您可以使用Siemens ModelSim模拟器。您必须已经安装了Siemens ModelSim。
直接打开ModelSim或者在Matlab中打开模拟器,使用vsim (HDL验证器)功能。这个命令显示了如何通过指定可执行文件的路径来打开模拟器,在Matlab命令窗口中执行:

vsim('vsimdir','vsim.exe可执行文件所在路径')

在这里插入图片描述
要编译和运行模拟生成的模型和测试台代码,请使用HDL Coder生成的脚本。对于计数器模型,运行这些命令来编译和模拟为HDL_DUT子系统生成的测试台。
1、打开ModelSim软件并导航到包含生成的代码文件和脚本的文件夹。
在这里插入图片描述
2、使用生成的编译脚本来编译和加载生成的模型和文本工作台代码。对于HDL_DUT子系统,运行此命令编译生成的代码。
在这里插入图片描述
3、使用生成的仿真脚本执行仿真。您可以忽略警告消息。对于HDL_DUT子系统,运行此命令模拟生成的代码。
在这里插入图片描述
模拟器优化您的设计并在波窗口中显示结果。如果没有看到模拟结果,请打开波窗口。仿真脚本显示模型中的输入和输出,包括波窗口中的时钟、复位和时钟使能信号。
在这里插入图片描述
现在可以查看信号并验证仿真结果是否与原始设计的功能相匹配。验证完成后,关闭Siemens ModelSim模拟器,然后关闭MATLAB Editor中打开的文件。

七、在目标设备上部署生成的HDL代码

要在目标FPGA设备上部署生成的代码,请使用Simulink HDL Workflow Advisor。
关于该章节详细内容在本系列第四篇文章进行详细说明:Matlab Simulink HDL Coder开发流程(四)— 基于Simulink模型的HDL代码生成和FPGA综合

参考文档:Matlab Simulink HDL Coder官方使用文档说明


http://www.ppmy.cn/embedded/141450.html

相关文章

量化交易系统开发-实时行情自动化交易-8.1.TradingView平台

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于TradingView平台介绍。 T…

【Java】验证 Mybatis 数据分片可以减轻GC压力

文章目录 前言1. 配置用例堆内存大小2. 单次全量查造成 GC overhead limit exceeded3. 分片查询减轻GC压力4. Spock 语法积累4.1 测试用例的钩子函数4.2 given when then expect 的用法 5. Groovy 语法积累5.1 Rang 数据结构5.2 List.collect 6. Guava 工具类积累后记 前言 本…

springboot 整合 rabbitMQ (延迟队列)

前言: 延迟队列是一个内部有序的数据结构,其主要功能体现在其延时特性上。这种队列存储的元素都设定了特定的处理时间,意味着它们需要在规定的时间点或者延迟之后才能被取出并进行相应的处理。简而言之,延时队列被设计用于存放那…

探索天空中的“名字”——用Landsat影像记录你的名字形状!

大家好!今天我发现了一个特别有趣的工具——NASA官网上有一个功能,允许你输入自己的名字,然后它会根据Landsat卫星影像显示出与你名字形状相符的地形图。是不是很酷?🎉 🌍 Landsat影像的神奇之处Landsat是N…

语言模型中的多模态链式推理

神经网络的公式推导 简介摘要引言多模态思维链推理的挑战多模态CoT框架多模态CoT模型架构细节编码模块融合模块解码模块 实验结果运行代码补充细节安装包下载Flan-T5数据集准备rougenltkall-MiniLM-L6-v2运行 简介 本文主要对2023一篇论文《Multimodal Chain-of-Thought Reason…

Java接收LocalDateTime、LocalDatee参数

文章目录 引言I java服务端的实现1.1 基于注解规范日期格式1.2 json序列化和反序列化全局配置自动处理日期格式化II 知识扩展: 枚举的转换和序列化III 签名注意事项引言 应用场景举例:根据时间段进行分页查询数据 前后端交互日期字符串统一是yyyy-MM-dd HH:mm:ss 或者yyyy-M…

大模型开发中LCEL与LLMChain响应度的对比

管道连接 import timefrom langchain_community.chat_models import ChatOpenAI from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import PromptTemplatet1 time.time() llm ChatOpenAI( )resp_prompt_path response_prompt.md pr…

【Leetcode 每日一题】235. 二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大&…