Modelsim手动仿真实例

目录

1. 软件链接

2. 为什么要使用Modelsim

3. Modelsim仿真工程由几部分组成?

4. 上手实例

4.1. 新建文件夹

4.2. 指定目录

4.3. 新建工程

4.4. 新建设计文件(Design Files)

4.5. 新建测试平台文件(Testbench Files)

4.6. 更改文件的默认打开方式

4.7. 编写设计文件     

4.8. 编写测试平台文件

4.9. 编译仿真文件

4.10. 配置仿真环境

4.11. 开始仿真


1. 软件链接

链接:https://pan.baidu.com/s/12EX1wT0NshjRE4aa6_e83w 
提取码:lny1

2. 为什么要使用Modelsim

验证设计逻辑:在将设计下载到FPGA之前,需要确保逻辑设计是正确的。ModelSim等仿              真软件可以模拟FPGA硬件的行为,允许设计者在实际硬件实现之前检查和验证HDL(硬件            描述语言)代码的功能正确性。

调试方便: 在FPGA开发过程中,调试是一个复杂且耗时的过程。使用ModelSim可以在仿真环境中进行调试,通过波形查看和分析信号的变化,更容易找到问题所在,而不必依赖于物理硬件的限制。

节省成本: 如果直接在硬件上进行调试,可能会因为设计错误而损坏硬件,特别是在高频率操作或电源管理不当的情况下。在仿真环境中验证设计可以避免这种风险,从而节省成本。

加速开发过程: 仿真可以并行于硬件的准备和生产过程,这样可以在硬件还未准备好的时候就开始软件的开发和测试,加快整体的开发流程。

支持复杂测试场景: 在ModelSim等仿真工具中,可以构造复杂的测试场景来验证设计在各种条件下的表现,这些场景在实际硬件上可能难以实现或者需要大量的时间和资源来构建。

性能分析: 通过仿真可以对设计的性能进行预测和分析,如时序分析、功耗估计等,帮助设计者优化设计。

支持自动化测试: ModelSim等仿真工具通常支持自动化测试脚本,可以大量减少手动测试的工作量,提高测试的覆盖率和效率。

支持多级别仿真: ModelSim支持从单个模块到整个系统的不同级别的仿真,设计者可以逐步扩展测试范围,逐步验证整个设计。

总结来说,ModelSim仿真工具在FPGA开发中的使用,主要是为了提高设计的可靠性、调试的效率和降低开发的风险和成本。通过在软件层面上对设计进行充分的验证和测试,可以确保将设计下载到硬件上时能够正常工作,从而提高整个项目的成功率。

3. Modelsim仿真工程由几部分组成?

在使用ModelSim进行硬件设计仿真时,通常会涉及两类主要的文件:设计文件(Design Files)和测试平台文件(Testbench Files)。

设计文件(Design Files): 这些文件包含了硬件设计的实际代码,通常是用硬件描述语言(HDL)如VHDL或Verilog编写的。设计文件定义了电路的结构和行为,包括模块、寄存器、逻辑门等。在设计文件中,描述硬件应该如何响应不同的输入信号。

测试平台文件(Testbench Files): 测试平台文件是用于验证设计文件是否正确的环境。它们也是用HDL编写的,但与设计文件不同,测试平台不会在最终的硬件产品中实现。测试平台的目的是生成一系列测试信号(输入给设计文件),并观察输出是否符合预期。测试平台通常包含模拟输入信号的代码,可能还包括用于检查输出并报告测试结果的断言和检查点。

在ModelSim中进行仿真时,通常会先编译设计文件和测试平台文件,然后在仿真环境中加载测试平台,最后运行仿真以观察并验证设计的行为。通过这种方式,可以在实际制造硬件之前,检测并修复设计中的错误。

4. 上手实例

4.1. 新建文件夹

指定一个路径新建一个文件夹,用来存放将要仿真的文件。这里我在桌面新建了一个名为led_test的文件夹,并建立hal_source和sim_source两个子文件;

4.2. 指定目录

在编译和仿真过程中,ModelSim需要找到源代码文件和其他相关文件。如果没有正确设置工作目录,ModelSim可能找不到这些文件,导致编译或仿真失败。

4.3. 新建工程

4.4. 新建设计文件(Design Files)

上面章节点击完OK后会弹出如下界面,选择Creat new file,并保存在led_test/hdl_source文件夹下。

4.5. 新建测试平台文件(Testbench Files)

4.6. 更改文件的默认打开方式

完成4.4和4.5后,软件界面会出现如下两个文件。

通常情况下,在此界面双击会默认使用笔记本工具打开。为了良好的编辑体验,这里更改为notepadd。下面介绍默认打开软件的设置方式。(前提:已安装notepad)

4.7. 编写设计文件     

在modelsim界面双击打开led.v文件并插入以下代码

module flow_led(
    input               sys_clk  ,  //系统时钟
    input               sys_rst_n,  //系统复位,低电平有效
     
    output  reg  [3:0]  led         //4个LED灯
    );

//reg define
reg [23:0] counter;

//*****************************************************                                                                                                                                                                                                          
//计数器对系统时钟计数,计时0.2秒
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        counter <= 24'd0;
    else if (counter < 24'd10)
        counter <= counter + 1'b1;
    else
        counter <= 24'd0;
end

//通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        led <= 4'b0001;
    else if(counter == 24'd10) 
        led[3:0] <= {led[2:0],led[3]};
    else
        led <= led;
end

endmodule 

4.8. 编写测试平台文件

在modelsim界面双击打开led_tb.v文件并插入以下代码

`timescale  1ns/1ns                // 定义仿真时间单位1ns和仿真时间精度为1ns

module  flow_led_tb;               // 测试模块

//parameter  define

parameter  T = 20;                 // 时钟周期为20ns

//reg define

reg  sys_clk;                      // 时钟信号

reg  sys_rst_n;                    // 复位信号

//wire define

wire  [3:0]  led;

//*****************************************************

//**                    main code

//*****************************************************

//给输入信号初始值

initial begin

    sys_clk            = 1'b0;

    sys_rst_n          = 1'b0;     // 复位

    #(T+1)  sys_rst_n  = 1'b1;     // 在第21ns的时候复位信号信号拉高

end

//50Mhz的时钟,周期则为1/50Mhz=20ns,所以每10ns,电平取反一次

always #(T/2) sys_clk = ~sys_clk;

//例化led模块

flow_led  u0_flow_led (

    .sys_clk     (sys_clk  ),

    .sys_rst_n   (sys_rst_n),

    .led         (led      )

);

endmodule

4.9. 编译仿真文件

开始编译

编译完成

4.10. 配置仿真环境

4.11. 开始仿真

上一个章节配置完成后会出现以下仿真界面

按照下图操作添加要观察的信号

添加完,信号出现在可观察窗口。设置采样时间

开始仿真,输出可视化信号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/500483.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

H7310 线性恒流调光芯片 支持24V30V48V60V100V转3.3V5V12V1.5A 外围简单 性价比高

线性恒流调光芯片是一种能够将输入电压稳定转换为恒定电流输出的电子设备&#xff0c;同时支持调光功能。这种芯片通常具有较高的效率和稳定性&#xff0c;适用于LED照明、显示屏等领域。 针对您提到的支持24V、30V、48V、60V、100V转3.3V、5V、12V&#xff0c;并且能够提供1.…

二十九 超级数据查看器 讲解稿 查询复用

二十九 超级数据查看器 讲解稿 查询复用 ​点击此处 以新页面 打开B站 播放当前教学视频 点击访问app下载页面 百度手机助手 下载地址 大家好&#xff0c;今天我们讲一下超级数据查看器的查询复用功能&#xff0c;这是新版本要增加的功能&#xff0c;这讲是预告。 先介绍…

数据可视化Grafana Windows 安装使用教程(中文版)

1.跳转连接 天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/site?url 2.下载应用程序 官网地址&#xff1a;Grafana get started | Cloud, Self-managed, Enterprisehttps://grafana.com/get/ 3.修改配置文件 grafana\conf\defaults 4.启动\bin\目录下serve应用程序 浏…

机器学习——降维算法-主成分分析(PCA)

机器学习——降维算法-主成分分析&#xff08;PCA&#xff09; 在机器学习领域&#xff0c;主成分分析&#xff08;Principal Component Analysis&#xff0c;简称PCA&#xff09;是一种常用的降维技术&#xff0c;用于减少数据集中特征的数量&#xff0c;同时保留数据集的主要…

尾矿库在线安全监测:提升矿山安全水平

在矿山安全领域&#xff0c;尾矿库的安全管理尤为关键。尾矿库作为矿山生产链条的重要环节&#xff0c;其稳定性不仅关系到生产活动的持续进行&#xff0c;更直接影响着周边环境和人民群众的生命财产安全。因此&#xff0c;尾矿库的安全监测显得尤为重要。近年来&#xff0c;随…

YOLOv9改进策略 : C2f改进 | 引入YOLOv8 C2f结构

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;应订阅者需求&#xff0c;如何将YOLOv8 C2f结构引入到YOLOv9 &#x1f4a1;&#x1f4a1;&#x1f4a1;C2f层是一种特殊的卷积层&#xff0c;用于将不同尺度的特征图融合在一起&#xff0c;以提高目标检测的准…

XXE漏洞知识及ctfshow例题

XXE漏洞相关知识 XXE全称为XML Enternal Entity Injection 中文叫xml外部实体注入 什么是xml 简单了解XML&#xff1a; &#xff08;xml和html的区别可以简易的理解成&#xff1a;xml是用来储存数据和传输数据的而html是用来将数据展现出来&#xff09; XML 指可扩展标记语…

UE5数字孪生系列笔记(三)

C创建Pawn类玩家 创建一个GameMode蓝图用来加载我们自定义的游戏Mode新建一个Pawn的C&#xff0c;MyCharacter类作为玩家&#xff0c;新建一个相机组件与相机臂组件&#xff0c;box组件作为根组件 // Fill out your copyright notice in the Description page of Project Set…

【力扣】300. 最长递增子序列(DFS+DP两种方法实现)

目录 题目传送最长递增子序列[DFS 方法]DFS方法思路图思路简述代码大家可以自行考虑有没有优化的方法 最长递增子序列[DP]方法DP方法思路图思路简述代码方案 题目传送 原题目链接 最长递增子序列[DFS 方法] DFS方法思路图 思路简述 对于序列中的每一个数字只有选择和不选择两…

C语言查找-----------BF算法KMP算法

1.问题引入 有一个主字符串&#xff0c;有一个子字符串&#xff0c;要求我们寻找子字符串在主字符串里面开始出现的位置&#xff1b; 2.BF算法 BF算法就是暴力算法&#xff0c;这个做法虽然效率不高&#xff0c;但是按照我们传统的思路依然能够得到结果&#xff0c;接下来我们…

LeetCode 523. 连续的子数组和

解题思路 相关代码 class Solution {public boolean checkSubarraySum(int[] nums, int k) {int s[] new int[nums.length1];for(int i1;i<nums.length;i) s[i]s[i-1]nums[i-1];Set<Integer> set new HashSet<>(); for(int i2;i<nums.length;i){set.ad…

filebox在线文件管理工具V1.11.1.1查分吧修改自用版免费分享[PHP]

* 基于:https://down.chinaz.com/soft/35899.htm * 查分吧 修改自用版今日对外分享(自2016年1.10版本以来一直用他云开发:Web环境即时看效果) * 也可以用于本人很多txt/csv通用查询系统的在线管理后台管理数据 * 默认登陆账号filebox密码nidemima * 修改账号密码:21-22行;获取…

Java八股文(K8S)

Java八股文のK8S K8S K8S 请解释什么是Kubernetes&#xff1f; Kubernetes是一个开源的容器编排和管理工具&#xff0c;用于自动化部署、扩展和管理容器化应用程序。 请解释Kubernetes中的Pod、Deployment和Service之间的关系。 ● Pod是Kubernetes的最小部署单元&#xff0c;…

练习 13 Web [极客大挑战 2019]Secret File

php伪协议请求&#xff0c;php代码审计 参考&#xff1a;BUUCTF__[极客大挑战 2019]Secret File_题解 没有任何上传和登录页面 查看前端源码 发现 <a id"master" href"./Archive_room.php" style"background-color:#000000;height:70px;width:20…

【java9】java9新特性值之集合不可变实例工厂方法

Java9为集合接口List、Set、Map提供了创建不可变实例的工厂方法。这些工厂方法为便利而生&#xff0c;以简单的方式创建这些集合的不可变实例。 Java9之前创建不可变集合 在Java9之前&#xff0c;创建不可变集合通常需要通过其他方式&#xff0c;比如使用Collections.unmodif…

day4 linux上部署第一个nest项目(java转ts全栈/3R教室)

背景&#xff1a;上一篇吧nest-vben-admin项目&#xff0c;再开发环境上跑通了&#xff0c;并且build出来了dist文件&#xff0c;接下来再部署到linux试试吧 dist文件夹是干嘛的&#xff1f; 一个pnpn install 直接生成了两个dist文件夹&#xff0c;前端admin项目一个&#xf…

用Kimichat快速识别出图片中的表格保存到Excel

如果有一张图片格式的表格&#xff0c;想要快速复制到Excel表格中&#xff0c;那么一般要借助于OCR工具。之前试过不少在线OCR工具&#xff0c;识别效果差强人意。其实&#xff0c;kimichat就可以非常好的完成这个任务。 下面是一张研报中的表格&#xff0c;只能以图片形式保存…

153 Linux C++ 通讯架构实战8 ,日志打印实战,设置时区,main函数中顺序调整

日志打印实战 //日志的重要性&#xff1a;供日后运行维护人员去查看、定位和解决问题&#xff1b; //新文件&#xff1a;ngx_printf.cxx以及ngx_log.cxx。 //ngx_printf.cxx&#xff1a;放和打印格式相关的函数&#xff1b; //ngx_log.cxx&#xff1a;放和日志相关…

【计算机考研】数学难,到底难在哪里?看这一篇深度分析

数一和数二的难度系数都不在一个重量级&#xff01; 数一这货&#xff0c;容量真不是数二能比的&#xff01;除了高数、线代这些常规操作&#xff0c;还要啃概率论与数理统计这本大厚书&#xff0c;简直是让人头大&#xff01; 考研数学嘛&#xff0c;大家都知道&#xff0c;…

前端是什么

1.前端的概念 1.1 前端的定义 对于网站来说&#xff0c;通常是指网站的前台部分&#xff0c;包括网站的表现层和结构层&#xff08;通俗点就是用户可以看到的部分&#xff09;。总结一下&#xff0c;浏览器、APP、应用程序的界面展现和用户交互就是前端1.2 前端的作用 前端工程…