示例中,m_sequencer句柄的类型为sequencer_base,p_sequencer句柄类型为sequencer_user,p_sequencer指向创建对象之后,可以访问sequencer_user中的属性user_str,通过显示函数显示出来,但是在18行将m_sequencer指向p_sequencer指向的对象之后,通过m_sequencer访问sequencer_user中的属性user_str析构时报错!这是因为在SystemVerilog...
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 是一个指向执行当前sequence的sequencer句柄。 p_sequencer: 可以理解为parent_sequencer,父类sequencer 使用`uvm_declare_p_sequencer(my_sequencer) 宏声明p_sequencer,宏本质是在当前sequence也就是case0_sequence中声明了一个成员变量p_sequencer。 类型为my_sequencer,定义在case0_sequence中。 p_sequenc...
其实,当在sequence中使用uvm_do宏时,其默认的sequencer就是此sequence启动时为其指定的sequencer(my_sequence.start(my_sequencer), 括号里的my_sequencer),sequence会将这个sequencer的指针my_sequencer放在其成员变量m_sequencer中,换句话说就是m_sequencer此时指向的就是my_sequencer。这里要注意,虽然m_sequencer句柄具...
m_sequencer是uvm_sequencer_base类型的句柄,默认情况下在每个sequence中都可用。连接到driver 的真正的sequencer 是从uvm_sequencer_base类派生出来的,其 被参数化为用于与driver 通信的sequence item类型。 因此要访问正在运行sequence 的真实sequencer ,我们需要将m_sequencer类型转化为真实sequencer ,通常称为p_sequencer...
m_sequencer和p_sequencer: m_sequencer就是每个seq都有的一个成员变量,但是是uvm_sequencer_base类型的 p_sequencer就是把m_sequencer通过cast转化为当前seq挂载的sqr类型,之后就可以用p_seqeucner去应用当前sqr里面的一些变量了: sequence之间的同步::!!! 用...
uvm_sequence派生自uvm_sequence_item,它有一个重要的任务方法body()和两个重要的成员变量m_sequencer和p_sequencer后面会介绍。 body() 任务方法body()是sequence作为测试序列的主体部分,我们需要在body()方法中定义该sequence的功能和行为。 其实在body()方法的前后,分别还有pre_body()和post_body()可能会被调用...
uvm_sequencer_base m_sequencer;是uvm_sequence中的protected变量。 my_sequencer是从uvm_sequencer中扩展来的,并拥有独特的dmac/smac的变量。 m_sequencer是uvm_sequencer_base类型的句柄,实际指向的对象是my_sequencer。 所以如果想通过基类的句柄m_sequencer来访问扩展类在中独有的damc/smac的变量是不合法的,解决方...
1)在介绍sequence 时,内部有m_sequencer, 直接使用m_sequencer 得到这两个变量: 编译错误: 因为m_sequencer 是uvm_sequencr_base (uvm_sequencr 的基类)类型,而不是my_sequencer 类型。 所以要cast:把m_sequencer 转换成my_sequencer: 但是好麻烦。所以内建了一个宏:uvm_declare_p_sequencer(SEQUENCER) ...
在start()函数中,首先调用了函数set_item_context()函数,这个函数位于sequence的父类uvm_sequence_item中,负责给成员变量m_sequencer, m_parent_sequence赋值。 如果没有指定挂载的sequencer,则挂载到parent_sequence的sequencer上。 此处seq0显示传入了需要挂载的p_sqr0,则调用set_sequencer()函数完成挂载,给m_sequenc...