Modelsim 使用教程(2)——Basic Simulation

一、概述

        在本文中,我们将介绍Modelsim基本的仿真流程,包括有:

  • Create the Working Design Library(创建工具库)
  • Compile the Design Units(编译设计单元)
  • Optimize the Design(优化设计)
  • Load the Design(加载设计)
  • Run the Simulation(运行仿真)

 二、设计文件及tb

        首先给出本文中用到的设计文件及tb。

2.1 设计文件 counter.v

// Copyright 1991-2014 Mentor Graphics Corporation
//
// All Rights Reserved.
//
// THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS THE PROPERTY OF 
// MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS.
//   `timescale 1ns / 1ns
module counter (count, clk, reset);
output [7:0] count;
input clk, reset;reg [7:0] count;
parameter tpd_reset_to_count = 3;
parameter tpd_clk_to_count   = 2;function [7:0] increment;
input [7:0] val;
reg [3:0] i;
reg carry;beginincrement = val;carry = 1'b1;/* * Exit this loop when carry == zero, OR all bits processed */ for (i = 4'b0; ((carry == 4'b1) && (i <= 7));  i = i+ 4'b1)beginincrement[i] = val[i] ^ carry;carry = val[i] & carry;endend       
endfunctionalways @ (posedge clk or posedge reset)if (reset)count = #tpd_reset_to_count 8'h00;elsecount <= #tpd_clk_to_count increment(count);/***************************************************************** 
Use the following block to make the design synthesizable.always @ (posedge clk or posedge reset)if (reset)count = 8'h00;elsecount <= count + 8'h01;
******************************************************************/
endmodule

2.2 仿真文件 tcounter.v

//
// Copyright 1991-2014 Mentor Graphics Corporation
//
// All Rights Reserved.
//
// THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS THE PROPERTY OF 
// MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS.
//   `timescale 1ns / 1ns
module test_counter;reg clk, reset;
wire [7:0] count;counter dut (count, clk, reset);initial // Clock generatorbeginclk = 0;forever #10 clk = !clk;endinitial	// Test stimulusbeginreset = 0;#5 reset = 1;#4 reset = 0;endinitial$monitor($stime,, reset,, clk,,, count); endmodule    

三、操作流程

3.1 Create the Working Design Library(创建工具库)

        在开始设计仿真之前,必须首先创建一个库,并将源代码编译到该库中。

1、创建一个新的目录,并将设计文件复制到其中。

2、打开modelsim,点击File -> Change Directory,把目录改成我们之前刚刚创建的新文件夹。

3、 创建工作库

(1)选择File -> New -> Library

(2)点击OK 

         ModelSim创建一个名为work的目录,并将一个名为_info的特殊格式文件写入该目录。_info文件必须保留在目录中,以区分它作为ModelSim库。不要在操作系统中编辑文件夹内容;所有更改都应在ModelSim中进行。

        ModelSim还将库添加到库窗口,并将库映射记录在ModelSim初始化文件(modelsim.ini)中以供将来参考。

        此时在Transcript界面应该打印有如下内容:

        这两行是你所做的菜单选择的命令行。许多命令行等价物将以这种方式响应它们的菜单驱动功能。 

3.2 Compile the Design Units(编译设计单元)

         在创建了工作库后,你就可以编译源文件了。你可以使用图形界面的菜单和对话框来编译源文件,如下面的Verilog示例中所述,或者通过在ModelSim>prompt下输入一个命令。

1、编译 counter.v 和 tcounter.v

(1)选择 Compile > Compile ,这会打开编译源文件对话框。

        如果“编译”菜单选项不可用,则你可能已经打开了一个项目。如果是,通过使库窗口活动,并从菜单中选择File > Close来关闭项目。

(2)从编译源文件对话框中选择到 counter.v 和 tcounter.v 文件,分别点击Complie,完成后点击done。这些文件就会被编译到库中。

2、查看编译好的设计单元

(1)在“library”窗口中,单击work库旁边的“+”图标,您将看到两个设计单元,您还可以看到它们的类型(模块、实体等)。以及到底层源文件的路径。

 3.3 Optimize the Design(优化设计)

        优化你的仿真设计会加快这个过程。

1、使用 vopt 命令优化设计,使所有设计单位完全可见。

        在 Transcript 窗口中的 ModelSim>prompt 下输入以下命令:

vopt +acc test_counter -o testcounter_opt

        +acc为调试提供了对设计的可见性。

        -o允许你指定优化后的设计文件(testcounter_opt)的名称。

        (使用vopt命令时,必须为优化的设计文件提供名称。)

 

3.4 Load the Design(加载设计)

         现在我们就可以把设计加载进仿真中了

1、把tb_module模块加载到仿真中

        通过vsim指令,使用优化后的设计名称(testcounter_opt)来加载设计

vsim testcounter_opt

        当设计被加载时,就会打开一个结构窗口(标记为sim)。此窗口显示了设计的层次结构,如下图所示:

2、打开 Objects 和 Process 窗口

(1)选择 View > Objects,同样的方式 打开View > Process 

        Objects窗口显示了在结构(sim)窗口中选定的当前区域中的数据对象的名称和当前值。数据对象包括信号、线网、寄存器、常量和变量、泛型、参数和SystemC模块的成员数据变量。

        Process窗口提供了4种观测模式:动态,在区域、设计和分层中(Active, In Region, Design, and Hierarchical)来观测HDL或者SystemC过程。设计视图模式是用于ESL(电子系统级)设计的主要导航,其中流程是最要考虑的因素。默认情况下,此窗口将显示仿真的动态进程(active模式)。

3.5 Run the Simulation(运行仿真)

        现在我们就可以进行仿真了,但是在此之前,我们还要打开wave窗口,把信号添加进去。

1、打开wave窗口

2、把信号加到wave窗口中

(1)在结构(sim)窗口中,右键单击test_counter打开弹出上下文菜单。

(2)选择 Add Wave 

3、进行仿真

(1)点击 Run 按钮 

        仿真运行100ns(默认的仿真长度),波形会在Wave窗口中绘制。

(2)在Transcript界面的VSIM> prompt后面直接输入run 500us

        仿真器又进行了500us的仿真,总共就进行了600us的仿真

(3)在命令行输入run -all 或者在主界面点击

 

仿真继续运行,直到执行break命令或代码中的停止仿真的命令语句(即Verilog $stop语句)。

(4)单击“中断”图标以停止模拟

         至此,我们就完成了一些基本的仿真操作。

3.6  Set Breakpoints and Step through the Source(设置断点并逐行运行源代码)

         接下来,我们将简单介绍Modelsim的交互式调试特性环境。你将在“源代码”窗口中设置一个断点,运行仿真,然后逐步完成测试中的设计。断点只能在可执行行上设置,它们用红线号表示。

1、在源代码窗口打开 counter.v 文件

(1)选择 View > Files 来打开Files窗口

(2)单击sim文件名旁边的+符号,可以查看vsim.wlf数据集的内容

(3)双击打开counter.v文件 

2、在counter.v文件的第36行设置一个断点

        滚动到第36行,然后单击行号旁边的Ln#(行号)列。在第36行行号列中出现一个红点(图3-9),表示已设置了断点。

3、禁用、启用和删除该断点 

(1)单击该红点以禁用该断点。它会变成一个灰色的点

(2)再次单击灰点以重新启用断点。它会变成一个红点

 

(3)用鼠标右键单击红点,然后选择“删除断点36。

(4)再次单击第36行旁边的行号列,以重新创建断点。 

4、重新启动仿真

(1)单击“重新启动”图标以重新加载设计元素,并将模拟时间重置为零。

        出现的“重新启动”对话框为你提供了关于在重新启动期间要保留什么的选项。

(2)点击OK

(3)点击 run -all按键

        仿真将一直运行,直到到达断点为止。当仿真到达断点时,它将停止运行,在源代码视图中用蓝色箭头突出显示该行(图3-11),并在文字记录窗口中发出中断消息。

        在这个时候程序就停止了运行,我们可以通过自己的方式进行程序运行的检查。

(4)继续运行

        单击步骤”工具栏上的“Step into”图标

        程序就跳过了断点,可以继续运行了。接下来可以自己进行尝试,掌握这部分的相关内容。

四、总结

        我们需要结束当前的模拟。 1.选择“Simulate>End Simulate”。 2.当提示确认要退出仿真时,单击“是”。

        在本文中,我们详细介绍了Modelsim仿真的一个基本流程,并做出了详细的步骤指导。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库概论

目录 什么是数据库数据库的概念模型层次模型网状模型关系模型 为什么要使用关系型数据库完整性约束结构化查询语言SQL基本语句 什么是数据库 考虑这些问题&#xff1a;当用户使用软件计算时&#xff0c;如果想要保存计算结果或者想选择不同的题目&#xff0c;是否要保存、读取…

利用云计算和微服务架构开发可扩展的同城外卖APP

如今&#xff0c;同城外卖APP已经成为了人们点餐的主要方式之一。然而&#xff0c;要构建一款成功的同城外卖APP&#xff0c;不仅需要满足用户的需求&#xff0c;还需要具备可扩展性&#xff0c;以适应快速增长的用户和订单量。 一、了解同城外卖APP的需求 在着手开发同城外卖…

设计模式(23)解释器模式

一、介绍&#xff1a; 1、定义&#xff1a;解释器(Interpreter)模式是一种对象的行为模式。给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;这个解释器使用该表示来解释语言中的句子。 2、组成结构&#xff1a; &#xff08;1&…

vue项目打包时按一定的名称规范生成对应的压缩包

在项目部署中经常需要将打包的dist按一定的名称压缩成压缩包&#xff0c;今天记录一下打包时生成压缩包的过程。其中有用到的npm包需要自己安装一下。 js文件放置的目录如下 compress.js内容如下&#xff1a; // compress.jsimport fs from "fs"; import shell fro…

外网远程登录之 NAT server

案例&#xff1a; 外网远程登录内网SW&#xff1a; 需求 1.内网的PC都可以访问Server1 2.外网的R2可以远程登录SW1&#xff0c; 用户名和密码是&#xff1a;HCIE/hehe 需求 1.内网的PC都可以访问Server1 2.外网的R2可以远程登录SW1&#xff0c; 用户名和密码是&#xff1a;HCI…

OpenCV 笔记(4):图像的算术运算、逻辑运算

Part11. 图像的算术运算 图像的本质是一个矩阵&#xff0c;所以可以对它进行一些常见的算术运算&#xff0c;例如加、减、乘、除、平方根、对数、绝对值等等。除此之外&#xff0c;还可以对图像进行逻辑运算和几何变换。 我们先从简单的图像加、减、逻辑运算开始介绍。后续会有…

文件fd.

共识原理: 1.文件 内容 属性 2.文件分为打开的文件 和 没打开的文件 3.打开的文件: 谁打开? 进程! ----本质是研究进程和文件的关系! 根据冯诺依曼原理&#xff0c;文件被打开&#xff0c;必须先被加载到内存&#xff01;不然CPU怎么访问它 那么是文件内容被加载&#xff…

系列七、Mybatis的二级缓存

一、概述 Mybatis的二级缓存是多个sqlSession共享的&#xff0c;其作用域是mapper的同一个namespace&#xff0c;不同的sqlSession执行两次相同的查询&#xff0c;mybatis会将第一次执行完的数据放到二级缓存中&#xff08;坑&#xff1a;需要执行close操作&#xff0c;要不然不…

通过Python脚本支持OC代码重构实践(二):数据项提供模块接入数据通路的代码生成

作者 | 刘俊启 导读 在软件开发中&#xff0c;经常会遇到一些代码问题&#xff0c;例如逻辑结构复杂、依赖关系混乱、代码冗余、不易读懂的命名等。这些问题可能导致代码的可维护性下降&#xff0c;增加维护成本&#xff0c;同时也会影响到开发效率。这时通常通过重构的方式对已…

创建ABAP数据库表和ABAP字典对象-使用基本类型增加账号字段03

新增字段 现在你将增加字段&#xff1a;account_number,基于基本类型 1.输入以下内容(包括句点)&#xff0c;然后选择“代码补全”(Ctrl空格): key account_number : abap.2.从下拉列表中选择numc(len)并指定len为8。另外&#xff0c;指定这个关键字段为not null: key accoun…

频频让“智造大佬”们追加投资,长沙凭啥?

文 | 智能相对论 作者 | 范柔丝 自2021年长沙将每年11月1日确定为长沙“企业家日”后&#xff0c;今年已到了第三个长沙“企业家日”。 在完美闭幕的2023年第三届长沙“企业家日”活动中&#xff0c;长沙发布了民企研发投入增量10强、湘商回归标志性项目10强、湘商回归突出贡…

sql server数据库跟踪——SQL Server Profiler解析

工具&#xff1a; SQL Server Profiler这个工具是SQL Server数据库自带的语句执行跟踪工具&#xff0c;常使用于分析软件修改数据库时所执行的语句&#xff0c;适合用来研究软件运行数据库的原理。 打开方式&#xff1a; 本机安装了SQL server的话&#xff0c;都是自带的。直接…

c++设计模式二:原型模式

使用场景&#xff1a;当需要构建多个相同的类对象时&#xff0c;而且该类对象结构较为复杂&#xff0c;如果每个都重新组织构建会很麻烦。 其实&#xff0c;就是写一个拷贝构造函数&#xff0c;或者写一个拷贝每个成员变量的clone()方法。 举例说明&#xff1a;比如一个相亲网站…

R语言如何写一个爬虫代码模版

R语言爬虫是利用R语言中的网络爬虫包&#xff0c;如XML、RCurl、rvest等&#xff0c;批量自动将网页的内容抓取下来。在进行R语言爬虫之前&#xff0c;需要了解HTML、XML、JSON等网页语言&#xff0c;因为正是通过这些语言我们才能在网页中提取数据。 在爬虫过程中&#xff0c;…

阿里云无影升级2.0 云电脑解决方案时代到来

10月31日&#xff0c;杭州云栖大会上&#xff0c;阿里云宣布无影全新升级2.0&#xff1a;从云电脑到云上解决方案&#xff0c;帮助中小企业更便捷地构建云上办公&#xff0c;并开放无影产品及解决方案能力&#xff0c;为生态合作伙伴提供企业云平台&#xff0c;帮助其打造定制化…

无需服务器内网穿透Windows下快速搭建个人WEB项目

&#x1f4d1;前言 本文主要是windows下内网穿透文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ 参考自&#xff1a;Windows搭建web站点&#xff1a;免费内网穿透发布至公网 &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首…

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表)

类和对象中&#xff08;运算符重载补充&#xff09; 类和对象下&#xff08;初始化列表&#xff09; 一.运算符重载补充&#xff1a;1.流插入运算符&#xff1a;1.考虑到隐含的参数指针&#xff1a;2.进行优化&#xff01;2-1&#xff1a;解决办法&#xff1a;友元2-2&#xff…

Websocket传递JWT令牌

在访问带有[Authorize]的方法的时候&#xff0c;需要前端通过自定义报文头的形式将JWT令牌传递给后端进行验证&#xff0c;否则是不能访问带有[Authorize]的方法。 [Authorize]是用于限制对web应用程序中某些操作或控制器的访问。当[授权]属性应用于操作或控制器时&#xff0c;…

妙手ERP本期功能更新:TikTok支持自定义SKU规格、Temu支持创建尺码表、仓库库存可同步至Shopee全球产品 ......

为了给卖家朋友带来更好的使用体验&#xff0c;更高效地运营跨境店铺&#xff0c;妙手ERP在上周优化了以下多项功能。 01、产品模块优化 全平台 - 插件采集支持批量采集速卖通产品 - 店铺互踩、店铺产品增加销量筛选项 - 公用采集箱支持编辑产品父SKU、AI生成、SKU规格、尺码…

批量压缩图片大小的绝妙技巧,让你的图片更轻盈

在制作幻灯片演示时&#xff0c;经常需要插入图片作为视觉辅助&#xff0c;通过批量缩小图片大小&#xff0c;可以减小演示文件的大小&#xff0c;方便共享和传输。 那么怎么将图片缩小成了问题的关键&#xff0c;市面上不少方法都是需要通过下载软件来处理图片的&#xff0c;…