1. 为什么要 引入 p_sequencer?
主要是因为 虚virtual sequencer 造成的: 例如你的 master sequencer 中有几个 sequencer, 然后再 seq 中想挂到不同的 sequencer 上去的时候,这个时候就可以用 p_sequncer 访问其中的其他的seqr 即可以完成;
2. m_sequencer 和 p_sequencer 两个的区别?
m_sequencer 是 UVM 内部自带的一个 sequencer, 实际上是 当前 seq 已经跟 which sequencer 绑定的一个: 看源码: 当有多个 seq 的时候,就可以直接用 p_sequencer 使用了;m_sequencer是每一个 sequence 的属性;
3. p_sequencer 如何使用?
--p_sequencer 如何来的? 可以通过调用一个宏,会自动的把 m_sequencer 转化成一个 p_sequencer, 然后使用 p_sequencer. 看uvm 源码:
在 seq 中调用 uvm 自带这个宏,就会生成一个 p_sequencer. 可以看到 p_sequencer 指向的就是当前的一个具体的sequencer, 然后就可以访问该 sequncer 中的任何变量值;