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

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. 开始仿真

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

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

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

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

相关文章:

Modelsim手动仿真实例

目录 1. 软件链接 2. 为什么要使用Modelsim 3. Modelsim仿真工程由几部分组成&#xff1f; 4. 上手实例 4.1. 新建文件夹 4.2. 指定目录 4.3. 新建工程 4.4. 新建设计文件&#xff08;Design Files&#xff09; 4.5. 新建测试平台文件&#xff08;Testbench Files&…...

AXI-Stream——草稿版

参考自哔站&#xff1a;FPGA IP之AXI4-Lite AXI4-Stream_哔哩哔哩_bilibili 信号 传输层级从小到大 包(----------transfer--transfer--------)------delay--------包(----------transfer--transfer--------) TKEEP和TSTRB共同决定了是哪种数据流...

【编码器应用】第一节-编码器从从原理到应用详解

概述&#xff1a; 本文内容为常用电机编码器概览&#xff0c;将为您重点介绍编码器大致分类&#xff0c;以及增量编码器与西门子设备的配置连接方式。 编码器简介 编码器是利用LED光源发出的透射光对码盘进行光电扫描&#xff0c;光电元件接收编码器轴旋转时产生的明暗交替变…...

瑞_23种设计模式_中介者模式

文章目录 1 中介者模式&#xff08;Mediator Pattern&#xff09;1.1 介绍1.2 概述1.3 中介者模式的结构1.4 中介者模式的优缺点1.5 中介者模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《2…...

sqlite删除数据表

1.如何删除表 在SQLite中&#xff0c;删除表的SQL语句是DROP TABLE。如果你想要在Python中使用SQLite库&#xff08;如sqlite3&#xff09;来删除一个表&#xff0c;你可以按照以下步骤操作&#xff1a; 连接到SQLite数据库。创建一个cursor对象。执行DROP TABLE语句。提交事…...

Spring Boot简介及案例

文章目录 Spring Boot简介以下是一个简单的 Spring Boot Web 应用实例**步骤 1&#xff1a;创建 Spring Boot 项目****步骤 2&#xff1a;编写 RESTful 控制器****步骤 3&#xff1a;配置主类****步骤 4&#xff1a;运行并测试应用** Spring Boot简介 Spring Boot 是一个用于简…...

Learning To Count Everything

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;学习数一切东西1、研究背景2、提出方法3、模块详细3.1、多尺度特征提取模块3.2、密度预测模块 4、损失函数5、性能对比6、贡献 二…...

大语言模型(LLM)token解读

1. 什么是token&#xff1f; 人们经常在谈论大模型时候&#xff0c;经常会谈到模型很大&#xff0c;我们也常常会看到一种说法&#xff1a; 参数会让我们了解神经网络的结构有多复杂&#xff0c;而token的大小会让我们知道有多少数据用于训练参数。 什么是token&#xff1f;比…...

【Micro 2014】NoC Architectures for Silicon Interposer Systems

NoC Architectures for Silicon Interposer Systems 背景和动机 硅中介层 主要内容 基于interposer的多核 NOC架构 试验评估 方法 NoC Architectures for Silicon Interposer Systems Natalie Enright Jerger, University of Toronto Gabriel H. Loh AMD Research 硅中介层…...

《极客时间 - 左耳听风》01 | 程序员如何用技术变现?(上)【文章笔记 + 个人思考】

《极客时间 - 左耳听风》 原文链接 &#xff1a;https://time.geekbang.org/column/intro/100002201?tabcatalog 备注&#xff1a;加粗部分为个人思考 程序员用自己的技术变现是天经地义的事情。写程序是一门手艺活&#xff0c;程序员作为手艺人完全可以不依赖任何公司或者其他…...

Typora结合PicGo + Github搭建个人图床

目录 一 、GitHub仓库设置 1、新建仓库 2、创建Token 并复制保存 二、PicGo客户端配置 1、下载 & 安装 2、配置图床 三、Typora配置 一 、GitHub仓库设置 1、新建仓库 点击主页右上角的 号创建 New repository 填写仓库信息 2、创建Token 并复制保存 点击右上角…...

【JavaWeb】Day27.Web入门——Tomcat介绍

目录 WEB服务器-Tomcat 一.服务器概述 二.Web服务器 三.Tomcat- 基本使用 1.下载 2.安装与卸载 3.启动与关闭 4.常见问题 四.Tomcat- 入门程序 WEB服务器-Tomcat 一.服务器概述 服务器硬件&#xff1a;指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算…...

怎么更新sd-webui AUTOMATIC1111/stable-diffusion-webui ?

整个工程依靠脚本起来的&#xff1a; 可直接到stable-diffusion-webui子目录执行&#xff1a; git pull更新代码完毕后&#xff0c;删除venv的虚拟环境。 然后再次执行webui.sh&#xff0c;这样会自动重新启动stable-diffusion-webui....

Apache Iceberg最新最全面试题及详细参考答案(持续更新)

目录 1. 描述Apache Iceberg的架构设计和它的主要组件? 2. Iceberg如何处理数据的版本控制和时间旅行?...

从TCP/IP协议到socket编程详解

​ 我的所有学习笔记&#xff1a;https://github.com/Dusongg/StudyNotes⭐⭐⭐ ​ 文章目录 1 网络基础知识1.1 查看网络信息1.2 认识端口号1.3 UDP1.4 TCP1.4.1 确认应答机制1.4.2 TCP三次握手/四次挥手为什么是三次握手为什么是四次挥手listen 的第二个参数 backlog—— 全…...

uniapp开发小程序遇到的问题,持续更新中

一、uniapp引入全局scss 在App.vue中引入uni.scss <style lang"scss">/* #ifndef APP-NVUE */import "uni.scss";/* #endif */ </style>注意&#xff1a;nvue页面的样式在编译时&#xff0c;有很多样式写法被限制了&#xff0c;容易报错。所…...

C++经典面试题目(十一)

1. final和override关键字 在C中&#xff0c;final 和 override 是两个用于类继承和成员函数重写的关键字&#xff0c;它们主要在面向对象编程的上下文中使用&#xff0c;以增强代码的可读性和安全性。 1. final 关键字 final 关键字主要有两种用法&#xff1a; 用于类&…...

设计模式(6):桥接模式

一.桥接模式核心要点 处理多层继承结构&#xff0c;处理多维度变化的场景&#xff0c;将各个维度设计成独立的继承结构&#xff0c;使各个维度可以独立的扩展在抽象层建立关系。 \color{red}{处理多层继承结构&#xff0c;处理多维度变化的场景&#xff0c;将各个维度设计成独立…...

Java切面编程

1.切面编程 无需改变原有类的情况下对业务功能实现扩展或增强。 2.目前最流行的AOP框架有两个&#xff0c;分别为Spring AOP 和 AspectJ。 3.Spring AOP使用纯java实现&#xff0c;不需要专门的编译过程和类加载器&#xff0c;在运行期间通过代理方式向目标类织入增强的代码。 …...

微服务demo(二)nacos服务注册与集中配置

环境&#xff1a;nacos1.3.0 一、服务注册 1、pom&#xff1a; 移步spring官网https://spring.io&#xff0c;查看集成Nacos所需依赖 找到对应版本点击进入查看集成说明 然后再里面找到集成配置样例&#xff0c;这里只截一张&#xff0c;其他集成内容继续向下找 我的&#x…...

面试题库二

1、简述TCP/IP的三次握手和四次挥手 TCP&#xff08;Transmission Control Protocol&#xff09;是一种可靠的、面向连接的传输层协议&#xff0c;用于在网络中传输数据。在建立连接和断开连接时&#xff0c;TCP 使用了三次握手和四次挥手来确保通信的可靠性和正确性。 三次握手…...

HarmonyOS实战开发-如何实现一个简单的电子相册应用开发

介绍 本篇Codelab介绍了如何实现一个简单的电子相册应用的开发&#xff0c;主要功能包括&#xff1a; 实现首页顶部的轮播效果。实现页面跳转时共享元素的转场动画效果。实现通过手势控制图片的放大、缩小、左右滑动查看细节等效果。 相关概念 Swiper&#xff1a;滑块视图容…...

FFmpeg将绿幕视频处理成透明视频播放

怎么在网页端插入透明视频呢&#xff0c;之前在做Web3D项目时&#xff0c;使用threejs可以使绿幕视频透明显示在三维场景中&#xff0c;但是在网页端怎么让绿幕视频透明显示呢&#xff1f; 如图上图&#xff0c;视频背景遮挡住后面网页内容 想要如下图效果 之前有使用过ffmpeg…...

【2024系统架构设计】案例分析- 4 嵌入式

目录 一 基础知识 二 真题 一 基础知识 1 基本概念 ◆系统可靠性是系统在规定的时间内及规定的环境条件下,完成规定功能的能力,也就是系统无故障运行的概率。或者,可靠性是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。...

基于javaweb(springboot+mybatis)生活美食分享平台管理系统设计和实现以及文档报告

基于javaweb(springbootmybatis)生活美食分享平台管理系统设计和实现以及文档报告 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 …...

【MySQL探索之旅】MySQL数据表的增删查改——约束

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…...

【Linux】体验一款开源的Linux服务器运维管理工具

今天为大家介绍一款开源的 Linux 服务器运维管理工具 - 1panel。 一、安装 根据官方那个提供的在线文档&#xff0c;这款工具的安装需要执行在线安装&#xff0c; # Redhat / CentOScurl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start…...

STM32 软件I2C方式读取AS5600磁编码器获取角度例程

STM32 软件I2C方式读取AS5600磁编码器获取角度例程 &#x1f516;本例程使用正点原子例程作为工程模板创建。 &#x1f4d8; 硬件电路部分 &#x1f33f;原理图部分&#xff1a; &#x1f33f;PCB布线和电路 &#x1f4d9;驱动代码部分 int main(void) {u16 i 0;u16 ra…...

[WTL/Win32]_[初级]_[如何设置ListView的列宽不出现水平滚动条]

场景 开发WTL/Win32的程序时&#xff0c;经常会用到表格控件CListViewCtrl。这个控件需要设置列的宽度&#xff0c;当用完100%的宽度来平均分配给列宽时&#xff0c;一加载数据多&#xff0c;就会出现垂直滚动条后&#xff0c;水平滚动条也会同时出现的问题。怎么设置才能让水…...

Mac更换JDK版本

1.确保系统中存在多个Java版本。 在Terminal中执行&#xff1a; /usr/libexec/java_home -V 结果&#xff1a; Matching Java Virtual Machines (2): 11.0.1, x86_64: "Java SE 11.0.1" /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home 1.8.0_2…...

郑州做网站推广的公司/2022近期时事热点素材

大家好&#xff0c;我是为人造的智能操碎了心的智能禅师。⚠️&#xff1a;今天图很多&#xff01;首先禅师跟大家说个事儿。因为周六的推送&#xff0c;审核不严&#xff0c;导致文章有错字。平时很多粉丝只是看一看&#xff0c;点个赞&#xff0c;转发一下就完事了。结果一旦…...

全球设计网站排行/菏泽资深seo报价

比较好的一篇博客&#xff0c;拿来学习。转载于:https://www.cnblogs.com/ee2213/articles/4478497.html...

天津制作网页/杭州网站优化方案

R Markdown是一种用于在R中生成可重复生成的报告的开源工具。它可以帮助您将所有代码&#xff0c;结果和编写都放在一个地方&#xff0c;并以一种有吸引力且易于消化的方式格式化所有内容。它也是将您的数据工作展示给其他人的宝贵工具。使用R Markdown&#xff0c;您可以选择将…...

做网站销售怎么找客户/怎样创建一个网站

简介&#xff1a;对于一个 ZIP 文件&#xff0c;由于标准的解压方式总是从读取文件的末尾开始的&#xff0c;因此必须下载完整个 ZIP 解压后才能访问。当用户通过网络访问 ZIP 文件时&#xff0c;下载解压所带来的耗时将大大降低用户体验。那么能不能边下载边解压呢&#xff1f…...

济南做网站公司/医疗网站优化公司

0、引言 本系列博客仅作为本人学习K210单片机的学习记录&#xff0c;主要学习其内部资源使用&#xff0c;作为初学者难免有错误之处&#xff0c;如有发现还望指出。 硬件&#xff1a;Sipeed Maix Dock开发板&#xff08;推荐官方KD233开发板&#xff09; 软件&#xff1a;Kend…...

wordpress log/品牌推广的作用

第一步进入wordpress后台(这是废话)&#xff0c;找到“外观”模块下面 的“编辑”选项&#xff0c;进入主题编辑选项;这一步太简单&#xff0c;就不截图了。 在模版里面点击“顶部(header.php)”模版&#xff1a; 关键词如何添加 在左侧的header.php编辑框中找到<header>…...