为了使激励的产生,发送和驱动分工更加的明确,分为了driver, sequencer和sequnce。而uvm中的sequence机制使得激励的产生和约束变得更加灵活。sequence机制是一种与sequencer,driver交互的过程,概括为:
1,通过sequence发送层次化、随机化的激励。
2,sequencer对sequence进行仲裁。
3,driver接受sequencer传递来的sequence(req)并按照时序激励发送到DUT,而后driver等待从端口返回信号和状态。
4,dirver给sequencer发送反馈信息(rsp)。
sequence的生命周期到此结束,完成一个完整的握手。
如果把sequence_item比作乘客的话,sequence类比为电梯调度中心的调度员,它决定了哪些乘客(sequence_item)进入电梯(driver),sequencer可以比作大楼的调度中心,它控制着哪些事务(transactions)何时被发送到driver。
UVM squence是一个参数化的类,属于uvm_object,不属于uvm树形结构中,它在验证平台中是有生命周期。
图3.14是sequence机制交互流程:
图3.14 sequence机制交互流程图
1,sequence中的流程为:
(1)产生sequence item(create_item)。
(2)sequence_item的随机化。
(3)指定sequencer发送这个sequence(start_item)。
(4)sequence_item送到REQ_FIFO(finish_item),如果有response,得到response(get_response(rsp)) 。
2,sequencer的流程为:
(1)对sequence进行仲裁。
3,driver的流程为:
(1)得到sequence_item(get_next_item(req))。
(2)发送给DUT。
(3)产生response。
这里会涉及到两个概念:sequence的执行和sequence的启动。
执行:sequence的执行是指sequence在sequencer中启动后,执行pre_start、body、post_body等函数,主要涉及到数据的生成和激励的发送。
启动:sequence的启动是指通过手动启动方式和自动启动的方式来激活和使用sequence,从而实现对硬件功能的准确、高效的测试。
一、 sequence中的执行
sequence的执行必须在task body中执行,task body是在task phase中自动调用的。
sequence的发送可以分为uvm_sequence_item类型的发送和uvm_sequence类型的发送。
1, sequence_item的发送
如果sequence发送的是uvm_sequence_item类型,那么发送的方法有以下几种:
(1)start_item 和finish_item
virtual task start_item(uvm_sequence_item item, int set_priority=-1,uvm_sequence_base sequence=null);
start_item()有三个参数,第一个是传入的sequence_it