这是一个UVM的基本结构问题。
sequecne的启动
先理解一个sequence 的启动机制吧。白书第二章有讲解。
对于一个sequence,在环境中的任意一处实际调用sequence.start就可以启动啦。
但是一般会在前后加上raise/drop_objection().
objection机制
这就是,objection机制了,在程序进入到某一个phase时,UVM会收集这个phase 所有的objection,并且实时监测是否objection被drop,一旦所有objection都被drop,则当前phase会关闭。
这一机制的用途是,当你在环境中某一个phase添加一些耗费时间的代码时,一定要rasie/drop_objsection.,不然这些耗时操作会被略去。
所以,一般只有会在sequence中用raise与drop,因为一般只有他们会有些耗时操作。
偶尔在driver或者monitor中要用的话就也要注意啦。
default 方式启动
除了手动使用start方式启动sequence外,更加常见的是default sequence方式启动,default方式也有两种,可见P165(区别在于creat sequence的地方不同罢了)
uvm_config_db#(uvm_object_warapper)::set(this,