UVM Phase UVM Phases 所有testbench的组件都是继承uvm_component来的,每一个组件都包括一些预定义的同名phase,在没有执行完所有组件的当前phase之前绝对不会去执行所有组件的下一个phase ,这就保证了所有组件之间是同步的!UVM就是利用phase机制实现了各个组件之间的同步! 因为所有的phase都被定义为回调(callback)...
在使用start()或`uvm_do()挂载sequence时,会将其挂载到m_sequencer指定的sequencer上,但是一般情况下,这个sequencer是一个自定义的sequencer子类。父类句柄指向子类对象本身合理,但无法访问子类扩展的数据类型,为了能在发送时访问子类的成员,就需要使用`uvm_declare_p_sequencer(),比如: (参考UVM实战6.4.4的内容) cl...
p_sequencer是由`uvm_decalre_p_sequencer宏,定义在用户指定的sequence(例如类库中的your_sequence)中的,用户指定的类型的句柄(例如类库中的your_sequencer),也就是说 p_sequencer是由uvm_decalre_p_sequencer宏产生的 p_sequencer是用户指定的sequence的成员变量(这里是your_sequence的成员变量,因为`uvm_decalre_p_...
因为m_sequencer 是uvm_sequencr_base (uvm_sequencr 的基类)类型,而不是my_sequencer 类型。 所以要cast:把m_sequencer 转换成my_sequencer: 但是好麻烦。所以内建了一个宏:uvm_declare_p_sequencer(SEQUENCER) 相当于声明如下变量: 自动将m_sequencer cast 成p_sequencer。在pre_body()前完成。
uvm_object_utils(my_base_sequence)uvm_declare_p_sequencer(my_sequencer) function new(string name = “my_base_sequence”); super.new(name); endfunction : new task body(); //create packet //give some value //send packet to driver
p_sequencer是用户指定的sequence的成员变量(这里是your_sequence的成员变量,因为`uvm_decalre_p_sequencer宏是在your_sequence中使用的) p_sequencer是指向用户指定的类型的句柄(这里是your_sequencer的成员变量) p_sequencer源代码如下: `defineuvm_declare_p_sequencer(SEQUENCER) ...
p_sequencer是用户指定的sequence的成员变量(这里是your_sequence的成员变量,因为`uvm_decalre_p_sequencer宏是在your_sequence中使用的) p_sequencer是指向用户指定的类型的句柄(这里是your_sequencer的成员变量) p_sequencer源代码如下: `defineuvm_declare_p_sequencer(SEQUENCER) ...