1 新手上路
本节将主要围绕下面几个核心词, 阐述它们的作用、 分类以及相互之间的互动关系:
• sequence item
• sequence
• sequencer
• driver
• 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。

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

本文深入探讨了UVM中sequence、sequence item、sequencer和driver的角色与交互。sequence item是驱动DUT最小粒度内容,由sequence随机生成并经sequencer流向driver。driver接收并解析sequence item,按照物理接口协议将其转化为激励。sequence和driver间通过sequencer通信,使用TLM端口实现数据传递。sequence负责生成激励内容,driver控制时序。此外,文章还介绍了sequence的分类(扁平、层次、虚拟)及其使用方法,强调了item生命周期与数据管理的重要性。
2534

被折叠的 条评论
为什么被折叠?



