其中除uvm_run_phase 为task phase外,其余的均为function phase,而run_phase 又分为12个与之并行运行的12个小phase,同样这12phase也属于task phase,如下图所示: 在一般的应用中,无论是function phase还是task phase使用频率最高的是build_phase(执行uvm_component及其派生类实例化工作)、connect_phase(执行连接工作...
一类是function phase,如build_phase、connect_phase等,这些phase都不耗费仿真时间,通过函数来实现; 另外一类是task phase,如run_phase等,它们耗费仿真时间,通过任务来实现。 给DUT施加激励、监测DUT的输出都是在这些phase中完成的。在图5-1中,灰色背景所示的是task phase,其他为function phase。 上述所有的phase都会...
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. ...
@(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中的...
phase.raise_objection()/phase.drop_objection()来控制run phase退出。 • 用户最好为description字符串参数提供说明,这有利于后期的调试。 • 应该使用默认count值 • 对于uvm_top或者uvm_test_top应该尽可能少地使用set_drain_time()。 uvm_pkg::uvm_test_done实例会在test1的run_phase()执行完毕之后,才...
1. do_monitor是一个无线循环,在driver_main_phase中控制objection的raise和drop。 2. 如果line42加上时间延迟,则会直接退出main_phase,进入下一个phase. 如果注释掉line43行也是直接退出main_phase,进入下一个phase. 打印结果: 3. 如果加上line49, line51,main_phase则无法退出。打印结果: ...
在run_test()执行中,它会初始化objection机制,即查看objection有没有挂起的地方,因此在test或者generator中必须至少有一处地方使用phase.raise_objection()来挂起仿真,避免仿真退出,而在仿真需要结束时,使用phase.drop_objection()来允许仿真可以退出。同时run_test()可以创建uvm_test组件,及其以下的各层组件群,并且...
登录后复制登录后复制phase.drop_objection(this); 登录后复制登录后复制endtask 登录后复制endclass 4) 实例化 VIP 组件 必须构造和配置主 VIP 代理类和从属 VIP 代理类。初始化这些配置对象后,将使用 UVM 资源数据库将它们发送到 UVM 层次结构中的相应代理实例。