在使用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. 使用CocoaPod导入Swift第三方库报错

    在使用cocoapod导入swift第三方时出现这样的错误: [!] Pods written in Swift can only be integrated as frameworks; add ` ...

  2. 小结MapReduce 程序的流程及设计思路

    简单回顾一下,目前系统是WCF三层C/S插件系统.服务器端是WCF程序寄宿在IIS中,其中我的配置设计是长连接,客户端支持多线程,一个volatile的实例对象.客户端用Winform,其中客户端框架 ...

  3. codeforces Magnets

    link:http://codeforces.com/contest/344/problem/A 这道题目很简单. 把输入的01 和10 当做整数,如果相邻两个数字相等的话,那么就属于同一组,否则,就 ...

  4. ✡ leetcode 171. Excel Sheet Column Number 字母转换为数字 --------- java

    Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, retur ...

  5. Codeforces Round #170 (Div. 2)

    A. Circle Line 考虑环上的最短距离. B. New Problem \(n\) 个串建后缀自动机. 找的时候bfs一下即可. C. Learning Languages 并查集维护可以沟 ...

  6. [转]linux,windows 可执行文件(ELF、PE)

    ELF (Executable Linkable Format)UNIX类操作系统中普遍采用的目标文件格式 . 首先要知道它有什么作用:工具接口标准委员会TIS已经将ELF作为运行在Intel32位架 ...

  7. javascript知识点之DOM与window对象

    在学习javascript过程中只是一知半解好多,碰到自己不知道属性方法,到最后都不知道自己学到了什么 js代码为什么这样写 为什么你知道这方法或属性可以这样用. DOM和window对象 DOM基本 ...

  8. 求第K大数

    1.排序找第K个数 2.快速排序分块  时间复杂度  2呢

  9. C++引用详解

    引用的概念 引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符 &引用名=目标变量名: 如下:定义引用ra,它是变量a的引用,即别名. i ...

  10. 《HelloGitHub》之GitHub Bot

    起因 我在github上发起了一个开源项目:<HelloGitHub月刊>,内容是github上收集的好玩,容易上手的开源项目. 目的:因为兴趣是最好的老师,我希望月刊中的内容可以激发读者 ...