do文件的编写(转)

以前在使用ModelSim进行仿真的时候,一直是使用其GUI进行操作的,但是这样很繁琐也很费时。故希望学习其自动化仿真do文件,下面是学习的一些总结。

一、编写基本的do文件

下面按照实际仿真的步骤来说明do文件中需要用到的各个tcl命令。

1、quit -sim —- 退出原来的仿真工程;

2、cd —- 设置工作目录的路径,就是仿真工程路径;

3、vlib work —- 在工作目录下建立一个work目录,请注意不要用操作系统直接新建一个work的文件夹,因为用操作系统建立的work文件夹并没有modelsim SE自动生成的_info文件。还有个问题是,当你的软件工程里需要用到软核时,可能会需要一些库,但这些库ISE软件中是没有的,此时就需要我们自己新建库了,并映射到当前目录下。我们将自己新建的库一般放在work库前面建立;

4、vmap work /vmap work work —- 将新建的work库映射到当前工作目录下(当前目录就是第一步中的目录了),其他新建的库也要这样的方法映射。此处需要注意的事逻辑库名与物理库名最好保持一致,后面的work为物理的库目录,即上一步的目录;

5、vlog +acc –work work “file_path/*.v” —- 编译“file_path”目录下所有.v文件,并将其添加进工作库(work)中,包括IP生成的V文件也要编译的。编译时可以分开单独编译,但是一定要注意顺序,先编译被调用的文件。其中的“-work work”是将后面的源文件编译到哪个库中,如果是编译到默认的work库中,则也可以不写该参数。若只想编译其中某些文件,则可以直接写出这些文件的名字,比如下面两种写法等效:

vlog div.v div_tb.v 
vlog -work work div.v div_tb.v

若是要编译基本器件库,可参照下面的例子:

vlib verilog_libs/altera_ver 
vmap altera_ver ./verilog_libs/altera_ver 
vlog -vlog01compat -work altera_ver {d:/quartus9.0/quartus/eda/sim_lib/altera_primitives.v 
vlog后面的两个参数“-vlog01compat”、“-work”是固定的。其中“-work”是必须保留的,“-vlog01compat”则在源文件为verilog文件时可以保留,如果为VHDL文件则不能使用该参数。需要注意的一点是该工程目录下的“verilog_libs”库文件夹需要手动建立,否则运行会出现错误。 
需要编译的文件有两种:源代码文件、库文件。对于库文件的编译可以有两种处理方式: 
1、将这些库文件与源代码文件一起编译到work库中,这样比较方便省事; 
2、将库文件单独编译到一个库中,在运行的时候需要通过参数设置来将库选择上。由于第一种方式较为简单,后面将采用第二种方式。 
当某一路径会经常用到时,可以通过设置一个路径变量来存储该路径,示例如下: 
set LIBPATH c:/altera/11.0/quartus/eda/sim_lib/ 
vlib sim_lib 
vmap sim_lib sim_lib 
vlog -work sim_lib LIBPATH/alteramf.vvlogworksimlibLIBPATH/alteramf.vvlog−worksimlibLIBPATH/altera_primitives.v 
vlog命令负责编译verilog文件,如果是VHDL文件,则需要将vlog命令换成vcom命令。 
在该命令中,如果想要include某个文件,则可以通过vlog的incdir选项来实现,比如: 
vlog +incdir+d:/work

6、vsim -novopt -quiet -c -L altera_ver -L E:/modeltech_6.6a/Xilinx_lib_edk/unimacro_ver -lib work div -t 1ns -do “run 2084655ns” —- 启动仿真命令,该命令可以有许多参数。

参数“-L altera_ver”是添加仿真库,该处是直接使用逻辑库名称,也可以像后面一样使用物理库的名称及路径;若是库与源文件一起编译到work库中的,则不需要该参数; 
参数“-t 1ns”表示仿真时间单位为1ns; 
参数“-novopt”禁止优化(no vopt),可能会因为vopt的缘故使得一些不重要signal被modelsim自动忽略,一般会保留该参数; 
参数“-do”表示运行时间,该参数一般不用,在后面再运行该命令; 
参数“-c”表示进入命令行模式,如果没有该参数,则表示进行GUI模式。 
默认工作库为work,因而下面几种写法等效: 
vsim div_tb 
vsim -lib work div_tb 
vsim work.div_tb 
sim -L D:/Modelsim/Installfiles/altera/altera_mf work.videoin_tb

7、view signals source wave —- 打开signal、source、wave窗口,也可以只打开wave窗口;

8、delete wave * —- 删除原来wave窗口中的波形;

9、add wave -binary clk rst —- 打添加要观察的波形信号,clk、rst为tb的顶层信号名,若要添加内部信号则要给出路径,-binary表示使用二进制显示;

添加一个模块的所有信号则可以用下面的方式: 
add wave -dec sim:/div_tb/* 
若只是要添加单个信号,则把“*”换成对应的信号即可,比如: 
add wave -unsigned sim:/div_tb/clk 
在wave窗口中,可以对波形进行相关配置,下面是常用的配置命令: 
WaveRestoreCursors {{Cursors 1} {200ns} 0} {{Cursors 2} {400ns} 0} 
configure wave -rowmargin 4 
configure wave -childrowmargin 2 
configure wave -namecolwidth 150 
configure wave -valuecolwidth 100 
configure wave -signalnamewidth 0 
configure wave -justifyvalue left 
configure wave -snapdistance 10 
configure wave -datasetprefix 0 
configure wave -gridoffset 0 
configure wave -gridperiod 1 
configure wave -griddelta 40 
configure wave -timeline 0 
update 
WaveRestoreZoom {0 ns} {1000 ns} 
如果所有信号均采用同一种方式显示,则可以用如下方式设置,就不必要在每次添加信号时设置显示参数: 
radix -hex

10、run 5000/run @5000 —- 开始运行仿真程序;

没有“@”则表示在当前时刻继续运行5000个单位时间; 
有“@”则表示运行到5000这个时刻,如果当前程序仿真已经运行到了5000以后的时刻,则该方法不会继续向后运行,而会弹出一个错误信息,提示当前仿真时刻已经超过了该数值。 
run -all则表示一直运行,直到手动停止。 
在5000后面也可以跟上一个单位,不跟单位时则以仿真的最小单位为基准。

11、quit -f/quit -sim —- 参数为“f”时则结束ModelSim,参数为“sim”时则结束该仿真进程。

下图是我写的一个do文件的截图,能够正确运行。 
这里写图片描述

这里只是编写了基本的do文件,需要在ModelSIm的Transcipts窗口输入相应的命令才可以执行。 
1、cd filepath —-进入do文件所在的目录; 
2、do filename.do —-执行do文件,开始仿真。

二、进行优化

还可以对上面的流程进行优化,真正达到自动仿真,使得仿真更有效率。 
1、批处理bat文件 —- 直接运行该文件即可启动仿真,而不需要首先进入ModelSim启动do文件;该方法还未实验成功。 
2、单独的文件存储文件路径 —-当有多个不同的文件路径时,为使do文件更加简洁,可以将所有路径存储在一个文件中。该方法也未实验成功。 
我是按照Modelsim中常用的Tcl命令中的方法实验的,以后有时间再来看看怎么弄这个。 
三、交互式命令 
通过在主窗口的命令窗口输入命令来实现,具有更好的调试和交互功能,提供多种指令,既可以是单步指令,也可以构成批处理文件,用来控制编辑、编译和仿真流程。 
1、force-repeat 
指令格式:force 开始时间开始电平值,结束电平值忽略时间(即0电平保持时间) -repeat 周期 
force clk 0 0,1 30 -repeat 100 表示强制clk从0时间单元开始,起始电平为0,结束电平为1,0电平保持时间为30个默认时间单元,周期为100个默认时间单元,占空比为70%。 
指令功能:每隔一段的周期重复一定的force命令,用来产生时钟信号,也可用来产生周期的输入信号,如01010101,00110011等。 
2、force 
指令格式:force item_name value time,value time;item_name为端口信号或内部信号,支持通配符号,但只能匹配一个;value不能默认,time,可选项,支持时间单元; force din 16#40900000 从当前时刻起给din赋值16进制40900000; force bus 16#F @100ns 在100ns时刻给bus赋值16进制F; force clr 1 100 经历100个默认时间单元延迟后为clr赋值1; 
force clr 1,0 100 表示clr赋值1后,经历100个默认时间单元延迟后为clr赋值为0。 
3、run 
指令格式:run timestepstime_unit,timesteps时间步长,time_unit时间单元,可以是fs、ps、ns、us、ms、sec; 
指令功能:运行(仿真)并指定时间及单元; 
run 100,表示运行100个默认时间单元; 
run 2500ns,表示运行2500ns; 
run -all,表示运行全过程; 
run -continue,表示继续运行。 
4、force-cancel 
指令格式:force-cancel period 
指令功能:执行period周期时间后取消force命令; 
force clk 0 0,1 30 -repeat 60-cancel 1000,表示强制clk从0时刻开始,直到1000个时间单元结束。 
5、view 
指令格式:view 窗口名 
指令功能:打开Modelsim的窗口 
view souce,打开源代码窗口; 
view wave,打开波形窗口; 
view list,打开列表窗口; 
view varibles,打开变量窗口; 
view signals,打开信号窗口; 
view all,打开所有窗口。

转载于:https://www.cnblogs.com/limanjihe/p/10052029.html

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

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

相关文章

PMP读书笔记(第4章)

大家好,我是烤鸭:     今天做一个PMP的读书笔记。 第四章 项目整合管理概述项目整合管理的核心概念项目整合管理的发展趋势和新兴实践裁剪时需要考虑的因素在敏捷或适应型环境中需要考虑的因素4.1 制定项目章程4.1.1 制定项目章程:输入4.…

php中foreach循环遍历二维数组

最近在用tp3.2框架,在查询的时候用到了select(),这条语句返回的是二维数组,所以在对返回的数据做处理时,遇到了些麻烦,百度了下foreach,终于用foreach解决了数据的筛选问题 (因为不知道该怎么设…

PMP读书笔记(第6章)

大家好,我是烤鸭:     今天做一个PMP的读书笔记。 第六章 项目进度管理项目进度管理项目进度管理的核心概念项目进度管理的发展趋势和新兴实践裁剪考虑因素关于敏捷/适应型环境的考虑因素6.1 规划进度管理6.1.1 规划进度管理:输入6.1.1.1…

connect ECONNREFUSED 151.101.0.133:443 | spawn xxx ENOENT

大家好: 我是烤鸭,今天分享一个node项目打包失败的问题。 1. 问题复现 之前一直出现node项目打包失败的情况,使用测试环境的jenkins没问题,生产的有问题。基本可以排除代码层面的问题。 报错信息如图。另外说一下出现了 con…

Python(八) 函数、模块

函数 定义函数 1、意义:函数是实现某个功能的一些代码,提高代码的复用性。 2、定义:用def关键字定义函数, 3、函数组成:函数由函数名、形参、函数体、调用函数(里面会有函数体)组成 4、要使用函数&#xff…

PMP读书笔记(第7章)

大家好,我是烤鸭:     今天做一个PMP的读书笔记。 第七章 项目成本管理项目成本管理项目成本管理的核心概念项目成本管理的趋势和新兴实践裁剪考虑因素关于敏捷/适应型环境的考虑因素7.1 规划成本管理7.1.1 规划成本管理:输入7.1.1.1 项目…

PMP 第六版 p25 矩阵图 方便记忆 口诀

大家好,我是烤鸭:     这是我第六版PMP矩阵图和自己总结的方便记忆的方法。 记忆方法: 首先是6大管理过程,10大知识领域。这个需要背下来。 过程:启动-规划-执行-监控-收尾 知识领域:整合-范围-进度-…

IntelliJ Idea注释模板--类注释、方法注释

刚从Eclipse切换到IntelliJ Idea,之前使用eclipse时用到了注释模板,包括类注释和方法注释,现在分别讲一下在Intellij Idea中如何进行配置,作为备忘 一. 类注释模板配置 1. 配置效果 2. 配置方法 【File】-->【settings】-->…

maven 关于使用 snapshot 的坑

大家好,我是烤鸭: 今天分享一下maven项目引入"快照"版依赖的问题。 1. snapshot 和 realease 顾名思义 就是 快照和稳定版。快照是不稳定的开发版本,不定时更新。稳定版不会有这个问题。 不定时更新有什么危害。 maven install…

PMP读书笔记(第11章)

大家好,我是烤鸭:     今天做一个PMP的读书笔记。 第十一章 项目风险管理项目风险管理项目风险管理的核心概念项目风险管理的趋势和新兴实践裁剪考虑因素在敏捷或适应型环境中需要考虑的因素11.1 规划风险管理11.1.1 规划风险管理:输入11…

PMP读书笔记(第12章)

大家好,我是烤鸭:     今天做一个PMP的读书笔记。 第十二章 项目采购管理项目采购管理项目采购管理的核心概念项目采购管理的趋势和新兴实践裁剪考虑因素在敏捷或适应型环境中需要考虑的因素12.1 规划采购管理12.1.1 规划采购管理:输入12…

奇怪的问题,再次启动jar包会导致bean对象失效?Unknown redis exception Cannot connect, Event executor group is terminated

大家好,我是烤鸭: 踩坑实录。一个某次上线导致的问题,并没有改过什么代码,只是重新上了一次包,没上之前从来没出过这个问题。最开始日志的报错信息一直是 NoClassDefFoundError could not initialize class ,发现是 st…

从Spring到SpringBoot构建WEB MVC核心配置详解

目录 理解Spring WEB MVC架构的演变认识Spring WEB MVC传统时代的Spring WEB MVC新时代Spring WEB MVCSpringBoot简化WEB MVC开发自动装配条件装配外部化配置本章源码下载理解Spring WEB MVC架构的演变 基础Servlet架构核心架构:前端控制器Spring WEB MVC架构认识Sp…

bouncycastle NoSuchFieldError:xxx 版本冲突

大家好,我是烤鸭: bouncycastle NoSuchFieldError:xxx 就是版本冲突了。 这里提示下,冲突有可能不止在项目里,也有可能在jre的lib目录下... 总之就是classpath加载了同样的jar包(不同版本)。如图所示: 项目…

团队项目测评博客

第一部分 调研,评测 评测 安卓端评测 测试人:文垚描述最简单直观的个人第一次上手体验。第一次上手体验,操作简单,界面简洁。课程表与超级课程表差不多,不同课程不同颜色显示,简洁明了。但是整体界面在简洁…

springboot 整合 kafka demo 顺便看一下源码

大家好,我是烤鸭: 今天分享下 springboot 整合 kafka。 1. 环境参数: windows kafka_2.11-2.3.0 zookeeper-3.5.6 springboot 2.3.0 2. 下载安装zookeeper kafka zookeeper: https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zooke…

.NETCore_生成实体

先安装以下三个包,或者使用Nuget引用 不要问我为什么,按哥说的做吧: Install-Package Microsoft.EntityFrameworkCore.SqlServer Install-Package Microsoft.EntityFrameworkCore.Tools Install-Package Microsoft.VisualStudio.Web.CodeGene…

执行mongod其他实例出现的问题

windows环境下,配置其他mongo实例,会出现一些问题 1、配置路径不对,执行bat文件时出现闪屏 根据提示创建C:\data\db\ 目录(因为mongodb默认在/data/db下创建数据库),重新执行mongod实例,就OK&am…

从 class 文件 看 synchronize 锁膨胀过程(偏向锁 轻量级锁 自旋锁 重量级锁)

大家好,我是烤鸭: 前几天看马士兵老师的并发的课,里边讲到了 synchronize 锁的膨胀过程,今天想用代码演示一下。 1. 简单介绍 关于synchronize jdk 1.5 以后的优化,由重量级锁调整为膨胀过程。分别是 偏向锁 轻量级锁&#xff0…

php opcache 详解

PHP性能提升之OPcache相关参数详解 工具 memory 发布于December 15, 2016 标签: PHPOPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。 PHP 5.5.0 及后续版本中已经绑定…