sequence和sequencer — UVM

简介

发送item的过程:

  • sequence是产生sequence item对象的地方,也可以产生sequence对象来实现sequence层次化;
  • 产生sequence item经过sequencer流向driver;
  • driver得到sequence item后,将数据按照与DUT的物理接口协议写入到接口上,对DUT形成有效激励;如果DUT与driver要进行互动,需要driver返回一个sequence item,经过sequencer到达sequence;

基本概念:

  • sequence item是driver与DUT互动的最小粒度内容;
  • 通过SV的随机化和sequence item对随机化的支持,产生的每个sequence item对象中的数据内容都不同;
  • driver和sequencer的通信时通过TLM端口实现;
  • driver 和 sequencer 是component ;uvm_sequence_item 和 uvm_sequence 是object;
  • uvm_sequence 和 uvm_sequence_item并不处于UVM树结构中,所以顶层无法直接做配置。sequence活动起来,会挂载在sequencer上,这样sequence就可以依赖于sequencer的结构关系,通过sequencer来获取顶层配置
  • 数据传送机制采取的get模式,而不是put模式;

sequencer存在的意义?

  • sequencer是一个组件,可以通过TLM端口与driver传输item对象;
  • 当有多个sequence挂载在sequencer上时,sequencer有充分的仲裁机制来合理分配和传送item,继而实现并行item数据传送至driver的测试场景;
  • 由于sequence是一个object,而uvm_object是独立于build阶段的,这就使得用户可以有选择地、动态地在合适时间点挂载所需的sequence和item;

选取get()模式的原因?

  • 如果是get模式,那么当item从sequence产生,穿过sequencer到达driver时,我们就可以结束该传输。而如果是put模式,则必须是sequencer将item传送至driver,同时必须收到返回值才可以发起下一次的传输。从效率上看,是由差别的。
  • 如果需要让sequencer具有仲裁的特性,使得多个sequencer同时挂载sequencer上,那么get模式更符合“工学设计”。这是因为driver作为initiator,一旦发出get请求,会先通过sequencer,继而获得仲裁后的item。

1.sequence 和 item

item的使用:

  • 如果数据域使用来做驱动,应该定义为rand,同时按照驱动协议给出合适的constraint
  • 通过宏`uvm_field_xxx声明必要的数据成员,以便日后使用uvm_object的基本数据方法的自动实现,例如print( );
  • UVM要求item的创建和随机化都发生在sequence的body()任务中;
  • item对象的声明周期始于sequence中的body方法中的create_item(),直到被driver消化后,item生命周期结束;如果要对item做操作,可以合理利用copy()或clone()等数据方法。

sequence的分类:

  • flat sequence只产生和发送item ;
  • hierarchical sequence,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小verifier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值