【UVM入门笔记(五)】sequence和sequencer相关内容(2)

一、Sequencer和Sequence
  • 相关问题:
    1)如果多个sequence需要同时挂载到sequencer,则需要进行仲裁。
    2)区别item和sequence的挂载方式,明确`uvm_do等宏的使用。
  • sequence挂载到sequencer的方法
uvm_sequence::start(uvm_sequencer_base sequencer, 
                    uvm_sequence_base parent_sequence=null,
                    int this_priority=-1, bit call_pre_post=1);
  • item挂载到sequencer的方法
uvm_sequence::start_item(uvm_sequence_item item, int set_priority=-1,
                         uvm_sequencer_base sequencer=null);
uvm_sequence::finish_item(uvm_sequence_item item, int set_priority=-1);
//finish_item的过程中实际上调用了uvm_sequencer::send_request()和uvm_sequencer::wait_for_item_done()等方法。
  • 相关宏
    在这里插入图片描述
    另外还有将优先级作为参数传递的uvm_do_pri_with等等。

  • sequencer的仲裁特性
    在这里插入图片描述
    示例:
    在这里插入图片描述

  • 锁定机制
    1)lock()/unlock():一旦sequence获得授权则无需担心权限被收回。
    2)grab()/ungrab():能够在sequencer下一次授权周期无条件地获取授权。

// inside the body task of a child sequence
m_sequencer.lock(this);     //or grab(this)
repeat(3) #10ns `uvm_do_with(...)
m_sequencer.unlock(this);   //or ungrab(this)
二、Sequence的层次化

1)hierarchical sequence
在这里插入图片描述
2)Virtual Sequence

  • 其内部的sequence允许挂载到不同的sequencer,即可以承载不同目标sequencer的sequence的群落。
  • virtual sequencer则是一个链接所有底层sequencer句柄的地方,它是一个中心化的路由器。且virtual sequencer本身不会传递item,不需与任何driver进行TLM连接;同时为避免句柄的悬空,在顶层connect阶段要完成各个sequencer句柄与底层实体对象的一一连接。

示例:
在这里插入图片描述
……
在这里插入图片描述

3)Layering Sequence

  • 深层次化数据传输,例如复杂的协议总线传输,倾向于通过若干抽象层次的sequence群落来模拟协议层次。
  • 包括高抽象的item、中间做转换的layer和低抽象的item。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值