uvm_declare_psequencer()所赋值的p_sequencer又是在什么时间点(t2)指向了我们实际的virtual_sequencer实例的呢? 结论我们不难得出,之所以出现图2的错误,一定是t1在t2之前执行了,导致p_sequencer还是没有指向任何实例的空句柄。 下面我们从UVM源代码执行顺序的角度来看看t1和t2分别是什么时候被执行的。 2. 源代码分...
`uvm_declare_p_sequencer(my_sequencer)宏干了两件事: 声明了一个sequencer类型的句柄p_sequencer 将m_sequencer句柄通过$cast(p_sequencer,m_sequencer)转化为p_sequencer 类型的句柄。 那么还有一个问题,p_sequencer为什么理解成parent sequencer? 这个问题我也没大整明白,p_sequencer是my_sequencer的句柄,可以理解...
m_set_p_seqeuncer():是set_item_context(parent_seq, sqr);的callback函数,(如果没有定义的话,默认为空)也就是说这个uvm_declare_p_sequencer宏只能在uvm_sequence的扩展类中定义。 如果你没有访问my_sequencer中相对于uvm_sequencer_base中独有的变量话,你是没有必要声明uvm_declare_p_sequencer这个宏定义...
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_...
declare_p_sequencer(my_sequencer)则相当于声明了如下的成员变量:my_sequencer p_sequencer;UVM之后会自动将m_sequencer通过cast转换成p_sequencer,因此在sequence中可以直接使用成员变量p_sequencer来引用dmac和smac:`uvm_do_with(m_trans, {m_trans.dmac == p_sequencer.dmac; m_trans.smac == p_sequencer....
m_sequencer与p_sequencer uvm_sequencer_base m_sequencer;是uvm_sequence中的protected变量。 my_sequencer是从uvm_sequencer中扩展来的,并拥有独特的dmac/smac的变量。 m_sequencer是uvm_sequencer_base类型的句柄,实际指向的对象是my_sequencer。 所以如果想通过基类的句柄m_sequencer来访问扩展类在中独有的damc/sma...
因为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()前完成。
这就是m_sequencer/p_sequencer概念的用处。 m_sequencer是uvm_sequencer_base类型的句柄,默认情况下在每个sequence中都可用。连接到driver 的真正的sequencer 是从uvm_sequencer_base类派生出来的,其 被参数化为用于与driver 通信的sequence item类型。 因此要访问正在运行sequence 的真实sequencer ,我们需要将m_sequencer...
uvm_sequence派生自uvm_sequence_item,它有一个重要的任务方法body()和两个重要的成员变量m_sequencer和p_sequencer后面会介绍。 body() 任务方法body()是sequence作为测试序列的主体部分,我们需要在body()方法中定义该sequence的功能和行为。 其实在body()方法的前后,分别还有pre_body()和post_body()可能会被调用...
`uvm_declare_p_sequencer,使得virtualsequence可以使用声明后的p_sequencer(类型为mcdf_virtual_sequencer),来进一步回溯到其内部的各个sequencer句柄。在这里,使用`uvm_declare_p_sequencer是较为方便的,因为这个宏在后台,可以新创建一个p_sequencer变量,而将m_sequencer的默认变量 ...