p_sequencer 指向创建对象之后,可以访问 sequencer_user 中的属性 user_str,通过显示函数显示出来,但是在 18 行将 m_sequencer 指向 p_sequencer 指向的对象之后,通过 m_sequencer 访问 sequencer_user 中的属性 user_str 析构时报错!
在该宏中,SEQUENCER必须为“类型”,当程序中使用该宏时,SEQUENCER为用户自定义的sequencer,即示例中的my_sequencer,而因为宏中p_sequencer指定的类型为SEQUENCER,即也就是调用该宏时传入的参数my_sequencer,所以可以知道p_sequencer的类型为用户自定义的sequencer,即示例中的my_sequencer,而用户自定义的sequencer派生自uvm...
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_...
在该宏中,SEQUENCER必须为“类型”,当程序中使用该宏时,SEQUENCER为用户自定义的sequencer,即示例中的my_sequencer,而因为宏中p_sequencer指定的类型为SEQUENCER,即也就是调用该宏时传入的参数my_sequencer,所以可以知道p_sequencer的类型为用户自定义的sequencer,即示例中的my_sequencer,而用户自定义的sequencer派生自uvm...
首先,我们需要了解一下m_sequencer和p_sequencer分别是什么。 m_sequencer本质上是一个uvm_sequencer_base类型的句柄,定义在uvm_sequence_item中,如下源码所示: class uvm_sequence_item extends uvm_transaction; ... protected uvm_sequencer_base m_sequencer; ... endclass uvm_sequencer_base是一个底层类,那么...
除了曲线救国的方法,在SV中,我们可以通过将指向子类对象的父类句柄(m_sequencer)通过$cast转换成具有子类对象类型的子类句柄,从而实现子类对象中属性的访问。 所以我们使用uvm_declare_p_sequencer(my_sequencer)宏来声明一个my_sequencer类型的子类句柄p_sequencer,并将m_sequencer向下类型转换成p_sequencer,p_sequencer...
示例中,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...
这就是m_sequencer/p_sequencer概念的用处。 m_sequencer是uvm_sequencer_base类型的句柄,默认情况下在每个sequence中都可用。连接到driver 的真正的sequencer 是从uvm_sequencer_base类派生出来的,其 被参数化为用于与driver 通信的sequence item类型。 因此要访问正在运行sequence 的真实sequencer ,我们需要将m_sequencer...
在该宏中,SEQUENCER必须为“类型”,当程序中使用该宏时,SEQUENCER为用户自定义的sequencer,即示例中的my_sequencer,而因为宏中p_sequencer指定的类型为SEQUENCER,即也就是调用该宏时传入的参数my_sequencer,所以可以知道p_sequencer的类型为用户自定义的sequencer,即示例中的my_sequencer,而用户自定义的sequencer派生自uvm...
transaction,那么它的参数需要改成uvm_sequence_item,同时,driver里面也要有相应的处理。p_sequencer的使用 前文有讲到一个m_sequencer,这个指针是在sequence启动后,所在sequencer的指针。它的类型是uvm_sequencer_base(uvm_sequencer的基类) 而不是my_sequencer类型的。 当存在这么一个情况,我在 ...