questasim仿真控制——breakpoint断点
在使用questasim或者modelsim仿真时,如果需要控制仿真时间长度,一般在vsim中使用 run xxxxms/us等命令。
但是有时候不好估计仿真多长时间才能得到所有希望观察的结果,这个时候可以在仿真tb文件中合适的位置加入-finish命令。不过仿真运行到这个位置时sim程序会提示退出,所以如果需要观察波形的话一般不使用这个命令。
下面还有一张方式可以控制questasim仿真时间:通过添加断点。
添加断点可以在vsim脚本中添加when { condition } { stop }命令行,例如
when -label 1 { tb/assertion_flag = 0 } { #设置断点条件
echo "assertion fail at @ [expr $now/1000] ns\n"; #设置断点处行为
stop; #停止仿真
}
上述代码是在仿真过程中检测断言的正确性,如果断言失败,则返回错误信息并停止仿真过程。
在vsim中添加的命令行遵循tcl脚本的语法,例如
[expr $now/1000]
这一句即是tcl脚本语言中的表达式替换操作,将当前时间ps换算为ns表示。
vsim中对断点的说明:

使用when可以添加断点(带上id号),而nowhen可以去掉指定label或id(两者实际一样)的breakpoint,或者全部的breakpoint。所以在使用when的时候,一般带上-id或者-label制定breakpoint的标记号,方便nowhen来随时取消。
扩展一下,为提高仿真自动化程度,可以,然后再新建一个script.do中加入各种questasim命令,如下所示:
#添加要观察的波形
add wave -noupdate /tb/U_TOP/U_PUMP_CTRL1/pump_photos_back_prim
add wave -noupdate /tb/U_TOP/U_PUMP_CTRL1/pump_photos_front_main
add wave -noupdate /tb/U_TOP/U_PUMP_CTRL1/pump_photos_front_prim
#设置breakpoint控制仿真长度
when -label 1 { tb/U_TOP/U_ACTIVE_VALVE1/valve_pwm = 1 } { nowhen 1; echo "bp1 reached at @ [expr $now/1000] ns\n" } ;#遇到此breakpoint时去掉此breakpoint,然后打印此时的时间(tcl语法),vsim中时间函数为$now,而不是$time
when -label 2 { tb/U_TOP/U_ACTIVE_VALVE1/active_valve_start_stage1 = 1 } { nowhen 2;echo "bp2 reached at @ [expr $now/1000] ns\n" }
when -label 3 { tb/U_TOP/U_ACTIVE_VALVE1/active_valve_stop = 1 } { echo "stop\n";stop }
#启动仿真
run -all 或者 run xxx ms/us
(在上述代码中只使用了when label **,因为之前尝试过when id**,好像没有作用。)
在仿真的simulate.bat中的vsim命令加入参数-do script.do
vlib work gcc -c -ID:\questa_sim_10.1b\include -I ../sim/ -I. ../sim/wave.c ::调用DPI接口,使用GCC编译器编译使用的C语言文件
gcc -shared -Bsymbolic -o wave.dll wave.o -LD:\questa_sim_10.1b\win32 -lmtipli
vlog ../ip/emi/ddr/testbench/*.v -work work ::可以使用"*.v"来包含所有.v文件,避免一个一个手动输入文件名
vlog ../ip/emi/ddr/*.vo -work work
vlog -timescale "1ns/10ps" -sv -f s.f -work work vsim -L work -L altera_libs -novopt -sv_lib wave work.tb -do script.do ::调用script.do来执行代码
questasim仿真控制——breakpoint断点的更多相关文章
- ip 核生成 rom 及questasim仿真时需要注意的问题
IP 核生成 ROM 步骤1:Tools --> MegaWizard Plug-In Manager 步骤2:Create a new custom megafuction variation ...
- vscode+php+xdebug won't stop at breakpoint 断点不起作用
not stopping on breakpoints breakpoint not working 原因: 1) php.ini xdebug 端口不配置的情况下,默认是 9000,如果vscode ...
- 可以用命令行控制eclipse断点增加删除、远程调试创建与启动的插件
java # 创建断点(支持条件断点) curl -X PUT -H "Content-Type:application/json" --data '{"language ...
- Breakpoint 断点只生效一次
- 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点
动态链接库中分配内存引起的 本文主要是探讨关于在动态链接库分配的内存在主程序中释放所产生的问题,该问题是我在刚做的PJP工程中所遇到的,由于刚碰到之时感动比较诡异(这也是学识不够所致),所以将它写下来 ...
- VerilogHDL常用的仿真知识
在描述完电路之后,我们需要进行对代码进行验证,主要是进行功能验证.现在验证大多是基于UVM平台写的systemverilog,然而我并不会sv,不过我会使用verilog进行简单的验证,其实也就是所谓 ...
- Checkpoint 和Breakpoint
参考:http://www.cnblogs.com/qiangshu/p/5241699.htmlhttp://www.cnblogs.com/biwork/p/3366724.html 1. Che ...
- ROS进阶学习手记 7.2 -- RViz仿真实例2:Create SmartCar
上一节玩了 exbot 在RViz里的仿真控制,这里我们用urdf文件写个自己的小车模型,ref: http://blog.csdn.net/hcx25909/article/details/8904 ...
- [转]HSpice仿真
一.HSPICE基础知识Avant! Start-Hspice(现在属于Synopsys公司)是IC设计中最常使用的电路仿真工具,是目前业界使用最为广泛的IC设计工具,甚至可以说是事实上的标准.目前, ...
随机推荐
- myeclipse打war包时,报错security alert integrity check error
今天在用myeclipse打包项目时,出现如下图的提示: 在网上查找了一下原因,主要是由于Jar包不符合所导致的.解决办法如下: 将com.genuitec.eclipse.export.wizard ...
- Arduino101/Genuino101的安装入门
1.首先下载Arduino IDE 下载地址:http://pan.baidu.com/s/1gewqV2j 选择arduino-1.6.8-windows. ...
- DOCTYPE声明的作用是什么?严格模式与混杂模式如何区分?
HTML语言已经存在太久了,目前必然会有一些不同版本的文档存在,为了能够让浏览器清楚你的文档的版本类型和风格,需要在文档的起始用DOCTYPE声明制定当前文档的版本和风格.如果在网页中提供了版本信息, ...
- gulp学习笔记
第一步:安装Node 首先,gulp 是基于 Nodejs 的自动任务运行器,所以安装gulp之前,最基本也最重要的是,我们需要搭建node环境.访问http://nodejs.org,下载并安装No ...
- oracle参数配置
一.Oracle LARGE_POOL_SIZE大小设置值多少 java_pool_size:以字节为单位, 指定 Java 存储池的大小, 它用于存储 Java 的方法和类定义在共享内存中的表示法, ...
- java常用IO流数据流小结
类名 常用方法 说明 输入流 InputStream int read(); 只能读字节流,虽然返回值是int,但只有低8位起作用. DataInputStream Type readType() ...
- AFN的初步封装(post、GET、有无参数)
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface MyURLPost : NSObjec ...
- JavaEE视频学习
1.实现东西应先实现静态,即使用固定的数据,比如链接数据库应先实现指定数据库如mysql的链接,成功后再向动态链接修改.方法也要这样写,一步步推进,不能一下子写出动态方法,这样很容易出错.
- dhtmlxScheduler日程安排控件
dhtmlxScheduler是一个JavaScript日程安排控件 官方网站:http://www.dhtmlx.com/在线帮助文档:http://docs.dhtmlx.com/doku.php ...
- sql 2008 游标
begin declare PlatformBulletin --定义游标 open PlatformBulletin --打开游标 declare @userid int,@zmscompanyid ...