14 UVM sequencer

2023-12-28 03:20:56

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是什么开始。

文章来源:https://blog.csdn.net/Bonnie_89/article/details/135257771
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。