一、相关名词:
- sequence item:driver和DUT互动的最小粒度。
- sequence:产生目标数量的
sequence item
对象,也可产生多个sequence
(层次化),并进行相应的随机化。 - sequencer:
sequence item
会经过sequencer
再流向driver
。 - driver:必要时,
driver
在消耗掉一个item
后会将状态信息通过item
对象返回sequencer
,最终到达sequence
一侧。 - 其它:
1)driver
和sequencer
都是uvm组件,其之间的通信通过TLM完成。
2)uvm_sequence_item
和uvm_sequence
则都是基于uvm_object
,可以在任何阶段创建,且不作为层次关系(即无法在顶层进行配置)。object之间或者object和component之间通过uvm_event
进行通信。
3)sequence
一旦活动起来,它必须挂载到一个sequencer
上,所以可以通过sequencer
间接地获取顶层配置和更多信息。
4)数据传送机制采用的是get
模式。
二、Sequence和Item
1.uvm_sequence_item
item
通常具备控制类、负载类、配置类和调试类这些类型的数据成员。- 可根据需要将数据定义为
rand
类型,通过`uvm_field_xxx的宏进行声明,便于uvm_object的基本数据方法自动实现。
2.uvm_sequence
- 扁平类(flat sequence):往往由细小的item实例构成,其中每个item可以容纳较多的时序内容,而不只是作为一次数据传输。
- 层次类(hierarchical sequence):可以包含其它
hierarchical sequence
、flat sequence
和sequence item
三、Sequencer和Driver
-
driver和sequencer之间的TLM通信采取了
get
模式,由driver发起请求,从sequencer一端获得item,再由sequencer将其传递至driver。 -
相应的端口如下:一般只使用其中一种即可
uvm_seq_item_pull_port/imp
。uvm_analysis_port
可在monitor中使用,一对多的广播;而uvm_analysis_export
由于连接至sequencer中的rsp_fifo(imp)所以端口类型为export。
-
端口支持的相关方法:
get_next_item
、[function] item_done
、try_next_item
、wait_for_sequences
、[function] put_response
、[function] has_do_avaliable
等 -
REQ与RSP类型的一致性
-
⭐sequence的body()主要完成如下任务:
1)通过方法create_item()
创建request item
对象
2)调用start_item()
准备发送iterm
3)在完成发送item之前对item进行随机处理
4)调用finish_item()
完成item发送
5)必要时从driver获取response item
-
⭐driver的run_phase()主要完成以下任务:
示例如下:
高层环境示例:
-
总结: