一类是function phase,如build_phase、connect_phase等,这些phase都不耗费仿真时间,通过函数来实现; 另外一类是task phase,如run_phase等,它们耗费仿真时间,通过任务来实现。 给DUT施加激励、监测DUT的输出都是在这些phase中完成的。在图5-1中,灰色背景所示的是task phase,其他为function phase。 上述所有的phase都会...
phase.drop_objection(this); endtask 在进入到某一phase时,UVM会收集此phase提出的所有objection,并且实时监测所有objection是否已经被撤销了,当发现所有都已经撤销后,那么就会关闭此phase,开始进入下一个phase。当所有的phase都执行完毕后,就会调用$finish来将整个的验证平台关掉。 如果UVM发现此phase没有提起任何objecti...
UVM 依次执行build_phase、connect_phase:test_case内例化有平台env,env内又例化agent, agent内又例化了driver、monitor、sequencer等,这样就形成完整验证平台UVM树; UVM会根据 objection 机制来安排所有组件phase执行顺序,UVM会检查是否有objection被提起(raise_objection),如果有,那么会继续这个objection run_phase 直到仿...
function void build_phase(uvm_phase phase); env = env1::type_id::create("env", this); endfunction task run_phase(uvm_phase phase); super.run_phase(phase); phase.raise_objection(phase); #1us; phase.drop_objection(phase); endtask endclass initial begin run_test("test1"); end endmodul...
<1>function phase:不消耗仿真时间,而其也可分成两大类: a. 继承自uvm_bottomup_phase, 在UVM component树中,自下而上的执行, 如connect_phase b. 继承自uvm_topdown_phase, 在UVM component树中,自上而下执行, 如build_phase<2>task phase:消耗仿真时间的,也称动态运行(run-time)phase. ...
1. do_monitor是一个无线循环,在driver_main_phase中控制objection的raise和drop。 2. 如果line42加上时间延迟,则会直接退出main_phase,进入下一个phase. 如果注释掉line43行也是直接退出main_phase,进入下一个phase. 打印结果: 3. 如果加上line49, line51,main_phase则无法退出。打印结果: ...
phase.drop_objection(this); endtask 1. 2. 3. 4. 5. 6. 7. 1)首先创建。 2)然后调用start任务,参数是一个sequencer指针。 3)在UVMZ中,objection一般伴随着sequence,之前的driver中也是这样。 10.也可以在sequencer中启动sequence: task my_sequencer::main_phase(uvm_phase phase); ...
@(posedge vif.clk);vif.valid<=1'b0;phase.drop_objection(this);endtask 现在my_drive中的绝对路径就消除了,提高了代码的复用性。但是目前还存在一个问题:如何将top_tb中的input_if和my_driver中的vif对应起来呢? config_db机制 在top_tb里,我们生成激励是用driver类来生成,driver生成激励后送到driver中的...
在run_test()执行中,它会初始化objection机制,即查看objection有没有挂起的地方,因此在test或者generator中必须至少有一处地方使用phase.raise_objection()来挂起仿真,避免仿真退出,而在仿真需要结束时,使用phase.drop_objection()来允许仿真可以退出。同时run_test()可以创建uvm_test组件,及其以下的各层组件群,并且...
phase.drop_objection( this , "finished sequence"); endtask 替换OVM configuration方法 习惯于OVM配置方法的用户,在配置过程中都使用的是[set,get]_config_[int,string,object]来在组件层次中实现配置,尽管在UVM中这些方法仍然有效,但我们并不建议再使用旧有的方法,原因有二。第一是,原来在OVM中并不支持interfa...