在使用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断点的更多相关文章

  1. ip 核生成 rom 及questasim仿真时需要注意的问题

    IP 核生成 ROM 步骤1:Tools --> MegaWizard Plug-In Manager 步骤2:Create a new custom megafuction variation ...

  2. vscode+php+xdebug won't stop at breakpoint 断点不起作用

    not stopping on breakpoints breakpoint not working 原因: 1) php.ini xdebug 端口不配置的情况下,默认是 9000,如果vscode ...

  3. 可以用命令行控制eclipse断点增加删除、远程调试创建与启动的插件

    java # 创建断点(支持条件断点) curl -X PUT -H "Content-Type:application/json" --data '{"language ...

  4. Breakpoint 断点只生效一次

  5. 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点

    动态链接库中分配内存引起的 本文主要是探讨关于在动态链接库分配的内存在主程序中释放所产生的问题,该问题是我在刚做的PJP工程中所遇到的,由于刚碰到之时感动比较诡异(这也是学识不够所致),所以将它写下来 ...

  6. VerilogHDL常用的仿真知识

    在描述完电路之后,我们需要进行对代码进行验证,主要是进行功能验证.现在验证大多是基于UVM平台写的systemverilog,然而我并不会sv,不过我会使用verilog进行简单的验证,其实也就是所谓 ...

  7. Checkpoint 和Breakpoint

    参考:http://www.cnblogs.com/qiangshu/p/5241699.htmlhttp://www.cnblogs.com/biwork/p/3366724.html 1. Che ...

  8. ROS进阶学习手记 7.2 -- RViz仿真实例2:Create SmartCar

    上一节玩了 exbot 在RViz里的仿真控制,这里我们用urdf文件写个自己的小车模型,ref: http://blog.csdn.net/hcx25909/article/details/8904 ...

  9. [转]HSpice仿真

    一.HSPICE基础知识Avant! Start-Hspice(现在属于Synopsys公司)是IC设计中最常使用的电路仿真工具,是目前业界使用最为广泛的IC设计工具,甚至可以说是事实上的标准.目前, ...

随机推荐

  1. JDBC修改表数据

    修改数据时用到update语句,使用这个语句时也要有条件的,指定修改某一行的数据,没有条件判断,则修改全部. package qddx.JDBC; import java.sql.*; public ...

  2. 11个提问频率最高的PHP面试题

    问题:请用最简单的语言告诉我PHP是什么? 回答:PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言. 问题:什么是MVC? 回答:MVC由Model(模 ...

  3. 基于注解的SpringMVC简单介绍

    SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请 ...

  4. Android深度探索HAL与驱动开发 第二章 搭建Android开发环境

    通常以应用移植和系统移植的为Andorid系统移植的主要部分.同时为了适应不同平台硬件设备,对源代码进行相应的修改.除了要移植相适应的CPU架构,最重要是移植Linux驱动. 但是由于一些特别的原因, ...

  5. PHP实例开发(3)PHP中MVC学习之ThinkPHP

    PHP中MVC学习之ThinkPHP 1.什么是MVC MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离 MVC是一个设 ...

  6. 获取ORACLE数据库的构建信息

    首先连接到数据库,获取ORACLE数据库的基本信息: C:\USERS\ADMINISTRATOR>SQLPLUS/NOLOG SQL*PLUS: RELEASE 10.2.0.3.0 - PR ...

  7. iOS 动画

    图层树.寄宿图以及图层几何学(一)图层的树状结构 技术交流新QQ群:414971585 巨妖有图层,洋葱也有图层,你有吗?我们都有图层 -- 史莱克 Core Animation其实是一个令人误解的命 ...

  8. [UI]抽屉菜单DrawerLayout分析(一)

    本文转载于:http://www.cnblogs.com/avenwu/archive/2014/04/16/3669367.html 侧拉菜单作为常见的导航交互控件,最开始在没有没有android官 ...

  9. malloc原理和内存碎片[转]

    当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作: 1.检查要访问的虚拟地址是否合法 2.查找/分配一个物理页 3.填充物理页内容(读取磁盘,或者直接置0,或者啥也不干) 4.建立映射关系 ...

  10. unity, Shader.Find的一个坑

    所以对于没有被任何东西引用,只靠在游戏运行时使用Shader.Find换上去的shader,为了双保险,可以首先放到resources文件夹里,另外,再在ProjectSettings->Gra ...