我们在sequence中往driver发包时,最常用的方法就是使用uvm_do()系列宏,偶尔会使用方法start_item()和finish_item()的组合,极个别场景下会 使用`uvm_create()和`uvm_send()宏,极极个别场景下还会看到create_item()方法的使用,这些宏和方法有什么区别,各自使用场景有什么局限和注意事项,他们分别定义在了UVM源代码...
从log中可以很清楚的看出,factory注册了多少类型,类型之间的override关系,instance之间的override关系,基本上factory的问题看这个信息都可以搞定了。 2. debug_create_by_type()和debug_create_by_name() 这两个函数对factory的搜索算法类似于create_by_type()和create_by_type(),但它们不创建新对象。相反,它们提供...
set_parent_seq get_parent_seq seq_item pre_do seq_item body seq_item mid_do seq_item post_do seq_item wait_for_grant seq_item send_request seq_item wait_for_item_done start_sequence OVM_REPORT_ ovm_seq_prod_if ovm_seq_cons_if ovm_seq_item_prod_if ovm_seq_item_cons_if ovm_vir...
uvm_factory::print():打印全局工厂中注册的类型以及instance和type重载信息 uvm_factory::debug_create_by_type():打印工厂根据参数实际会创建的类型 uvm_factory::debug_create_by_name():打印工厂根据参数实际会创建的类型 uvm_port_base::debug_connected_to():打印当前端口连接的下游端口网络,包括port/export/...
get_seq_kind get_sequence do_sequence_kind get_sequence_by_name OVM sequencer的'count'和'default_sequence'的相关机制: count (in context of set_config) max_random_count max_random_depth 上面这些已经废止的方法,到了UVM一侧有了新的特性和使用方式,接下来我们就UVM新特性中的重点,关于UVM sequence...
(3) 根据test_name,调用工厂函数create_component_by_name,创建testcase的实例,并且赋值给uvm_test_top,因此对于UVM环境,顶层的testcase将来都会变成uvm_test_top; (4) m_children是uvm_component中内建的变量,保存该类包含哪些子类;当一个子类,通过UVM的工厂机制创建类实例后,会往其父类的m_children中加入该类...
1.sequence的路径可以通过get_full_name()获得。 # env top_reg_model m_regmodel; m_regmodel = top_reg_model::create("m_regmodel"); uvm_config_db #(top_reg_model)::set(this, " agt.sqr.* ","reg_model",m_regmodel); # seq ...
uvm_create(SEQ_OR_ITEM): 工厂模式创建一个transaction或sequence,只后用户应该随机化,或指定某个值给创建的trans。uvm_create(SEQ_OR_ITEM,SEQR): 和uvm_create宏一样,并且指定了对应的sequencer。 uvm_send(SEQ_OR_ITEM): 将有uvm_create创建的tr/seq发送出去,其他send宏如下:uvm_send_pri(SEQ_OR_ITEM,...
actual_seq.start(m_sequencer,this);7:endtask8:endclass// From the test:tasksfr_test::run_phase(uvm_phasephase);sfr_test_upper_seqseq=sfr_test_upper_seq::type_id::create("test_seq");phase.raise_objection(this);seq.start(env.agent.sequencer);phase.drop_objection(this);endtask:run_...
long_seq lseq=long_seq:;type_id::create("lseq"); repeat(10)begin cseq.start(m_sequencer);//启动嵌套的seqlseq.start(m_sequencer);endendtask endclass 采用uvm_do宏启动嵌套的seq,更加简单; classbase_sequenceextendsuvm_sequence#(transaction); ...