VCS+VERDI的reverse反向运行功能

电子说

1.3w人已加入

描述

背景

假设一种场景,在调试环境的时候,运行到15min的时候,环境出现bug,需要去debug。也许错误的第一现场并不是15min的时候,可能在14min30s-15min之间,那么如果正向执行就需要14min30s以上。所以这个时候如果能够直接反向运行到14min30s,就可以节省很多时间。就像jojo的奇妙冒险中吉良吉影的招式,败者食尘一样,逆转时间

编译选项

要实现这个功能,依赖于VCS和VERDI的联合调试,所以在编译的时候需要使用下面的指令

 

vcs -full64 -sverilog -ntb_opts uvm-1.2 -lca -kdb -debug_access+reverse

 

除了常规的选项以外,-kdb选项是用于生成kdb数据库,支持verdi的联合调试,而lca是kdb的依赖选项。

最后的-debug_access+reverse则是最关键的开关,需要加上这个选项才是实现反向运行。

编译完成以后,进行仿真的时候,需要使用./simv -verdi,启动仿真。这样就能够直接调用verdi进行联合仿真。

测试代码

本次的测试代码就是简单的4行打印。

 

module test ();
  import uvm_pkg::*;
  `include "uvm_macros.svh"

  initial begin
    `uvm_info("a","hello uvm!",UVM_NONE)
    `uvm_info("b","hello uvm!",UVM_NONE)
    `uvm_info("c","hello uvm!",UVM_NONE)
    `uvm_info("d","hello uvm!",UVM_NONE)
  end

endmodule

 

reverse

启动verdi之后,注意图中红色框框中的一排按钮,这就是reverse功能的按钮。从图标形状来开,和联合仿真的正向交互式仿真是一致,功能上他们其实也是对偶的。

Verdi

reverse按钮

如果你开起了reverse选项,但是仍然没有出现这一排按钮,那么就需要在tools下的perferences中,开启reverse按钮。

Verdi

perferences

在perferences中的interactive debug下,找到reverse debug

Verdi

reverse

接下来可以在代码中设置两个断点进行测试。直接单击代码左侧即可甚至断点。和C的单步调试是一样的,直接run就能在断点处停止。

Verdi

设置断点

我们跑到第九行的断点,可以看到中间在七行停止了一次,最后在第九行停下来,6 7 8行的信息都已经打印出来了。

Verdi

前向运行

那么如果我们需要回到第七行,就可以直接进行点击下图中的run reverse按钮。

Verdi

run reverse

然后就能够回到上一个断点处

Verdi

当然也可以,点击旁边的next reverse按钮进行反向单步运行

Verdi

反向单步

就能够从第九行回到第八行

Verdi

其他按钮和这两个类似,但是正向调试的反向版本。

本次分享了VCS+VERDI的reverse反向运行功能,可以将整个仿真反向运行,从而减少正向仿真的时间消耗。

当然,这必须在VCS+VERDI的联合调试下才可以,如果是VCS单独仿真,dump波形,再使用VERDI离线调试就不能使用。而联合仿真也会大幅度降低运行速度,所以推荐在早期debug验证环境的时候使用。






审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分