14 UVM sequencer

sequencer是在sequence和driver之间建立连接的中介。最终,它将transactions或sequence items传递给driver,以便将其驱动到DUT。

1. uvm_sequencer class hierarchy

uvm_sequencer class declaration:

class uvm_sequencer #( type REQ  = uvm_sequence_item, RSP = REQ ) extends uvm_sequencer_param_base #(REQ, RSP)

建议从参数化基类“uvm_sequencer”扩展用户定义的sequencer,该基类由请求(REQ)和响应(RSP)项类型参数化。response item的用法是可选的。所以,大多数sequencer类是从只有REQ item 的基类扩展而来的。 

class my_sequencer extends uvm_sequencer #(data_item, data_rsp); // with rsp
class my_sequencer extends uvm_sequencer #(data_item);           // without rsp

sequencer和driver使用TLM(事务级建模)接口传递事务。seq_item_export和seq_iem_port TLM连接方法在uvm_sequencer和uvm_driver类中定义。有关详细信息,请参阅sequence-driver-sequencer handshake章节。

class my_sequencer extends uvm_sequencer #(data_item);
  `uvm_component_utils(my_sequencer)

  function new (string name, uvm_component parent);
    super.new(name, parent); 
  endfunction
endclass

2. m_sequencer and p_sequencer in UVM

2.1 m_sequencer

m_sequencer是一个sequence中默认可用的句柄。m_sequencer的type是uvm_sequencer_base.

简单地说,它是运行sequence的sequencer的引用句柄。

要在sequencer上运行sequence,需要调用start()方法。此start()方法需要提供sequencer句柄。

例子:

base_seq.start(env_o.seqr);

这里,m_sequencer是设置为env_o.seqr的base_seq的句柄。 

2.2 p_sequencer

所有序列都有m_sequencer句柄,但它们没有p_sequencer句柄。

p_sequencer不是自动定义。它是使用宏`uvm_declare_p_sequencer(sequencer_name)定义的。

`define uvm_declare_p_sequencer(SEQUENCER) \
  SEQUENCER p_sequencer;\
  virtual function void m_set_p_sequencer();\
    super.m_set_p_sequencer(); \
    if( !$cast(p_sequencer, m_sequencer)) \
      `uvm_fatal("DCLPSQ", $sformatf("%m %s Error casting p_sequencer, please verify that this sequence/sequence item is intended to execute on this type of sequencer",get_full_name())) \
  endfunction

如上所示,定义 p_sequencer宏声明了SEQUENCER类型的p_sequencer句柄,并将m_sequencer句柄强制转换为p_sequencer。

virtual sequencer通常称为p_sequencer。这是为了方便用户。这不是强制性要求。您可以使用env层次结构路径访问virtual_sequencer。

这听起来很令人困惑,但要理解p_sequencer的用法以及它到底是什么。我们将在下一节中理解virtual sequence and virtual sequencer是什么开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值