1.m_sequencer定义
在uvm_sequence_item中定义了protected变量m_sequencer,它的类型是uvm_sequencer_base;我们常用的uvm_sequence继承于uvm_sequence_item,那么所有的sequence都是可以看到m_sequencer的.
2.m_sequencer获取
通常有两种方法启动sequence,一种是通过uvm_config_db设置default sequence来实现.在环境中会自动get来获取对应的参数.获取成功之后,通过sequence中的set_sequencer将sequencer设置给m_sequecer.
3.set_sequencer函数
通过以上的分析可知m_sequecer实际上指向实际运行的sequencer的指针.
4.p_sequencer引入
我们知道uvm_sequencer是uvm_component类型,uvm_sequence是uvm_sequence_item类型;uvm_component可以通过树形组织结构管理,可以很方便的通过uvm_config_db实现对其类成员的参数设置.
uvm_sequence产生的xaction会通过uvm_sequencer最终发送到driver.在发送xaction时,会对其进行随机,有时候需要相应的参数对随机结果控制.此时,可能会想到通过sequencer来传递对应的参数.
因为sequence中看到了是指向m_sequencer的指针,不能直接使用sequencer中的类成员.一个简单的办法便是将m_sequencer赋给实际的sequencer,这样便可以使用其类成员了.环境中定义了
uvm_declare_p_sequencer宏,在相应的sequence中使用即可.