my_sequencer是从uvm_sequencer中扩展来的,并拥有独特的dmac/smac的变量。 m_sequencer是uvm_sequencer_base类型的句柄,实际指向的对象是my_sequencer。 所以如果想通过基类的句柄m_sequencer来访问扩展类在中独有的damc/smac的变量是不合法的,解决方案就是按照上面的来。 p_sequencer和m_sequencer实际上都是指向my_...
其实,当在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类型的句柄,实际指向的对象是my_sequencer。 所以如果想通过基类的句柄m_sequencer来访问扩展类在中独有的damc/smac的变量是不合法的,解决方案就是按照上面的来。 p_sequencer和m_sequencer实际上都是指向my_sequencer的对象! 宏定义:`uvm_declare_p_sequencer(my_sequencer) 宏定义...
即示例中的my_sequencer,而因为宏中p_sequencer指定的类型为SEQUENCER,即也就是调用该宏时传入的参数my_sequencer,所以可以知道p_sequencer的类型为用户自定义的sequencer,即示例中的my_sequencer,而用户自定义的sequencer派生自uvm_sequencer。
这就是m_sequencer/p_sequencer概念的用处。 m_sequencer是uvm_sequencer_base类型的句柄,默认情况下在每个sequence中都可用。连接到driver 的真正的sequencer 是从uvm_sequencer_base类派生出来的,其 被参数化为用于与driver 通信的sequence item类型。 因此要访问正在运行sequence 的真实sequencer ,我们需要将m_sequencer...