《UVM实战》笔记 UVM中的sequence
第6章 UVM中的sequence
sequence和sequencer_wonder_coole的博客-CSDN博客
6.1什么是 sequence
上文提到,子弹,弹夹和枪的比喻,想必大家都有映像,sequence 就像一个弹夹,里面装了很多"子弹",而这里的"子弹"就是 transaction, 弹夹可长可短,只要子弹型号一致(同一种 transaction),就能通过 sequencer 和 driver 把数据驱动给 DUT。在下图中,有三个 sequence 挂载于同一个 sequncer 上(当然也可不同时间挂在其中一个 sequence),通过 driver 进行数据驱动,其中 sequencer 和 driver 是共同使用的。
6.2 什么是 sequencer
sequencer 为 uvm_component,是验证环境的不动产;而 sequence 是 uvm_object 类型,是环境中的动态产物,随时可以创建和析构。sequencer 它在验证环境作为 sequnce 于 driver 之间的连接器。我们创建出来的 sequence 实例的 sequence_item 需要通过 sequencer 才能进入验证环境中,继而才能传输给 driver。sequencer 的应用实例代码如下(直接继承于 uvm_sequencer,不需要添加任何代码):
sequence:弹夹
sequencer:枪膛
transaction:子弹
driver:扳机
virutal sequence : 可以用于承载不同目标的 sequence (参数不同),组织协调不同的 sequence 按照一定的协议顺序,异步或者同步启动;
它与普通的 sequence 的区别是,它可以包含不同类型的 sequence,其他没有任何区别。
virutal sequencer : virutal sequencer 和普通 sequencer 不同,它用于桥接其 virtual sequencer 内包含的 sequencer,即 virutal sequencer 用于链接所有底层 sequencer 的句柄;virtual sequencer 本身并不传递 transaction,因此 virutal sequencer 不需要和任何 driver 进行 TML 连接;但是用户需要在顶层的 connect_phase 中做好 virtual sequencer 中各 sequencer 句柄与底层 sequencer 实体的一一对接,避免句柄悬空。
在此 virutal sequencer 相当于 sequence 和 sequencer 之间的一个中转路由器的作用,上图中红线部分用于完成 virtual sequencer 中各 sequencer 句柄与底层 sequencer 实体的一一对接。