SV精通2 测试的开始和结束 设置断点

4 篇文章 0 订阅

在Verilog测试方式中,即便只给设计提供时钟和复位信号,仿真也会一直持续clk如同给仿真提供供血功能来保证设计可以正常跳动,rstn信号是为了让设计进入确定的状态),不会主动结束,这就需要Verilog系统函数主动暂停** s t o p ∗ ∗ → c o n t i n u e r u n 或者结束仿真 ∗ ∗ stop**→continue run或者结束仿真** stopcontinuerun或者结束仿真finish**

仿真开始

simsmart

simsmart代码
simsmart代码

1.各变量初始值:a1已有初始值0,a2→a5为logic类型,默认初值为x,clk和rstn为bit型,默认初值为0
初始状态

2.log -r /*保存波形,在19行设断点,然后run 0(一个Δcycle),看会不会进入19行
breakpoint

3.run 0,a2 a3被a1赋值(assign语句相当于用一根线把a1 a2连在一起,不管运行多短时间a1的变化能立即体现在a2上;initial语句也能在一个Δcycle时间内立即执行,将a1值赋给a3);13行敏感事件没被触发;没有进入19行(a1没有变化,没有触发initial执行条件)
2.run 0
没有进入断点
4.modify a1:10ns后把1’h1赋给a1

5.run 20ns

6.10ns时在19行断点处停下,因为a1发生了变化
20ns后

在19行break

7.再run 0,通过断点,19行被执行,a5成功被a1赋值为1;a2被赋值为1,a3保持为0(initial只执行一次)
a5发生变化
断点通过

assign:在0时刻会执行一次; always:等到信号变化后才执行

仿真的结束

SV中推出program来将设计部分与验证部分分隔开:

program隐式结束:

如果tb中只有一个program,那么在此program的initial过程块执行完仿真会自动结束;
如果tb中有多个program,则仿真在所有program的最后一个initial过程块执行完后结束结束
program隐式结束

program显示结束:

在目标program中置入系统函数**$exit()**可将此program强行结束;
此program被强行结束后仿真器仍需等待其他program结束后再结束仿真
pgm强行结束
pgm2在700ns结束之后结束

使用program的要求和建议

  • program是软件域,内部不能出现硬件域,如module always interface
  • program不能例化program
  • program内部定义变量采用阻塞赋值(软件方法)
  • program驱动外部硬件信号采用非阻塞赋值(硬件方法)

设置断点

断点作用

  1. 查看程序在执行到断点处(程序暂停执行)时的变量数值
  2. 软件部分变量(function task等) (动态变量)无法在波形窗口上显示,需借助断点来查看当前程序中的变量数值
  3. 调试程序执行的顺序比如设置了3个断点,在前两个断点都停下来了,但是在第三个断点没有停下来,这就说明,在第二个和第三个断电之间,没有顺利地执行到第三个断点

breakpoint代码
breakpoint代码
在8 14 21 27行设置断点,断点停在第八行表示断点的入口,刚停留在第八行但是第八行还没有执行结束;
执行结果如下图:
结果

动态结果

注:
没办法停在13行,因为13行是声明,不能执行;
local里面既可以显示动态的值,也可以显示静态的值,只不过更关心动态的值;object里面只能显示静态变量

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值