电力电子转战数字IC20220722day55——sequence相关

目录

继承关系

sequence和item

uvm_sequence_item

uvm_sequence

flat sequence

hierarchical sequence

sequencer和driver

通信时序


 

类比:sequence=道路,seuqence item=货车,sequencer=目的地收费站,driver=卸货地点。item从sequence一端出发经过sequencer最终到达driver。

  • driver陆续拿到多个随机化的item,经过数据解析,按照与dut的物理接口协议将数据写入到接口上,对dut形成激励
  • 有必要时,driver解析完一个item回返回最后的状态信息给item对象并回到出发点(互动)

继承关系

 

 

  • item和sequence可以在任何phase创建
  • 无法通过uvm环境结构或phase机制来识别sequence的运行阶段
  • 顶层配置时无法按照层次关系直接配置到sequence中,因为item和sequence不在uvm结构中
  • sequence活动起来必须挂在attach到一个sequencer上,间接通过sequencer来获取顶层的配置和信息
  • sequence只负责生成item的内容,driver负责驱动激励时序,最终的接口驱动时序由driver和sequencer共同决定
  • sequencer:作为一个组件可以通过tlm端口与driver传送tiem对象;面向多个并行sequence有仲裁机制来合理分配和传送item
  • 数据传送机制采用get模式:driver从sequencer获取item

sequence和item

  • 分别是uvm_sequence类和uvm_sequence_item类
  • sequence编织激励生成和场景控制;对于激励所需要的的具体数据和控制要求,是从itme的成员数据得来的

uvm_sequence_item

  • item基于uvm_object类,具备uvm核心基类的数据操作方法:copy,clone, compare,record
  • item具备的数据成员:
    • 控制类(总线协议上的读写模式、数据长度、传送模式),
    • 负载类(数据总线上的数据包),
    • 配置类(控制driver的驱动行为)
    • 调试类(标记信息以方便调试,id、time)
class bus_trans extends uvm_sequence_item;
rand bit write;
rand int data;
rand int addr;
rand int delay;
static int id_num;
`uvm_object_utils_begin()
	`uvm_field_int()
	...
`uvm_object_utils_end
...endclass

class test1 extends uvm_test;
`uvm_component_utils()
...
task run_phase(u p);
	bus_trans t1, t2;
	phase.raise_objection(p);
	#100ns;
	t1=new("t1");
	t1.print();
	#200ns;
	t2=new("t2");
	void'(t2.randomize());
	t2.print();
	phase.drop_objection(p);
	endtask
endclass
  • 如果数据域属于需要用来做驱动,应该考虑定义为rand,按照驱动协议给出合适的约束constraint
  • 域的自动化不要忘记,便于使用uvm_object的基本数据方法
  • uvm要求item的创建和随机化都要发生在sequence的body()任务中
  • item生命周期:产生于sequence的body(),经历随机化,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值