一、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。
本文介绍了UVM框架中Sequencer和Sequence的概念及其使用方法,包括多个Sequence的仲裁机制、Sequence的层次化组织及虚拟Sequence的应用,并探讨了item和Sequence的不同挂载方式。
1005

被折叠的 条评论
为什么被折叠?



