[转]序列组件的互动

一、序列组件的互动

在这里插入图片描述

  • sequence对象会产生目标数量的sequence item对象。借助于SV的随机化和sequence item对随机化的支持,使得产生的每个sequence item对象中的数据内容都不相同。
  • 产生的sequence item会经过sequencer再流向driver
  • driver陆续得到每一个sequence item,经过数据解析,将数据按照与DUT的物理接口协议写入到接口上,对DUT形成有效激励。
  • 当有必要时,driver在每解析并消化完一个sequence item后,它会将最后的状态信息写会sequence item对象再返回给sequencer,最终抵达sequence对象一侧。这样做的目的是,有时sequence需要得知driver与DUT互动的状态,这就需要driver有一个回路将更新过的sequence item对象写回至sequence一侧。
  • sequence itemdriver与DUT每一次互动的最小粒度内容。例如DUT如果是一个slave端,driver扮演master去访问DUT的寄存器,那么sequence item需要定义的数据信息至少包括访问地址、命令码、数据和状态值,这样的信息在driver取得后,会通过时序方式在interface一侧发起激励送至DUT。按照一般总线做寄存器访问的习惯,这种访问在时序上大致会保持几个时钟周期,直至数据传送完毕,而由driver再准备发起下一次操作。
  • 除了可以在声明sequence item时添加必要的成员变量,也可以添加对这些成员变量进行操作的成员方法。要注意添加的成员变量是否需要随机化。
  • 对于一个sequence而言,它会产生多个sequence item,也可以产生多个sequence。从产生层次来看,sequence item是最小粒度,它可以由sequence生成,而相关sequence也可以进一步组织继而实现层次化,最终由更上层的sequence进行调度,所以sequence可以看做是产生激励内容的载体。
  • sequencedriver之间起到桥梁作用的sequencer,由于sequencerdriver都是component组件,它们之间的通信也是通过TLM端口实现的。之间的TLM通信参数即sequence item类,由于这一限制,使得sequencerdriver的传输数据类型不能改变,同时与sequencer挂接的sequence创建的sequence item类型也应为指定类型。
  • 激励驱动链的最后一道关卡是driver。对于常见用法,driver往往是一个sequence item消化完,报告给sequencersequence,同时再请求消化下一个sequence itemdriver看起来永远喂不饱,同时还又对食物很挑剔。在消化每一个sequence item之前,该item中的数据是已经随机化好的,所以每个item内容一般都是各不相同的。driver自己并不会轻易修改item中的值,它会把item中的数据按照与DUT的物理协议时序关系驱动到接口上面。例如对于一个标准的写操作,driver不但需要按照时序依次驱动地址总线、命令码总线和数据总线,还应该等待从端的返回信号和状态值,这样才算完成了一次数据写传输。

二、继承关系

在这里插入图片描述
uvm_sequence_itemuvm_sequence都是基于uvm_object,它们不同于uvm_component只应当在build阶段作为UVM环境的“不动产”进行创建和配置,而是可以在任何阶段创建。这种类的继承带来的UVM应用区别在于:

  • 由于无法判定环境在run阶段什么时间点会创建sequence和将其挂载(attach)到sequencer上面,所以无法通过UVM环境结构或者phase机制来识别sequence的运行阶段。
  • 由于uvm_object独立于build阶段之外,这使得可以有选择地、动态地在合适时间点挂载所需要的sequenceitem
  • 由于uvm_sequenceuvm_sequencer_item并不处于UVM结构当中,所以顶层在做配置时,无法按照层次关系直接配置到sequence中。
  • 如果sequence一旦活动起来,它必须挂载到一个sequencer上,这样sequence可以依赖于sequencer的结构关系,间接通过sequencer来获取顶层的配置和更多信息。

一般情况下,可能会将时序控制的权利赋予sequence,这种从sequence产生item,继而将item通过sequencer推送给driver的职责划分方式有点不太合适。如果明确划分责任的话,sequence应该只负责生成item的内容,而不应该控制item消化的方式和时序,而驱动激励时序的任务应当由driver来完成。

item的生成和传送,并不表示最终的接口驱动时序,决定这一点的还包括sequencer和driver。sequencer之所以作为一个“路由”管道,设立在sequence和driver之间,主要有两个原因:

  • sequence作为一个组件,它可以通过TLM端口与driver传送item对象。
  • sequencer在面向多个并行sequence时,它

---------------------
作者:煎丶包
来源:CSDN
原文:https://blog.csdn.net/qq_39794062/article/details/114259842
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值