路科验证(Rocker IC)专注于验证系统思想和前沿工程资讯,拥有一支活跃的技术原创团队,为高校微电子相关专业学生与IC从业人员提供技术食粮。 您可以在手机移动端同步关注微信订阅号“路科验证”。如果您需要联系我们,请发送邮件至 rocker.ic@vip.163.com 或者 bin.rocker.liu@intel.com 。

UVM序列篇之三:sequence和item(下)

上一篇 / 下一篇  2018-02-04 14:12:52 / 个人分类:验证系统思想

Flat Sequence

一个flat sequence往往由细小的sequence item群落构成,在此之上sequence中还有澳门皇冠APP的信息来完备它自身需要实现的激励场景。一般对于一个flat sequence而言,它里面包含的信息有:

  • sequence item以及相关的constraint用来关联生成的item之间的关系,从而完善出一个flat sequence的时序形态。

  • 除了限制sequence item的内容,各个item之间的时序信息也需要由flat sequence给定,例如何时来生成下一个item并且发送至driver。

  • 对于需要与driver握手的情况(例如读操作),或者等待monitor的事件从而做出反应(例如slave的memory response数据响应操作),都需要sequence在收到另外一侧组件的状态之后,再决定下一步的操作,即响应具体事件从而创建对应的item并且发送出去。


接下来我们给出一个例子,帮助读者理解flat sequence的大致结构和用法:



输出结果:



这个例子中,我们暂时没有使用sequence的宏或者其它用来发送item的宏来表示sequence/item与sequencer之间的传送方法,而是用更直白的方式来描述这种层次关系和包含性。flat_seq自身可以看做是一个更长的数据包,其中数据包的具体内容、长度、地址等信息都包含在flat_seq中,在生成item的过程中,通过将自身的随机变量作为constraint来限定item的变量随机内容,这是flat sequence的大致处理方法。在上面例码中没有给出例如`uvm_do/`uvm_do_with/`uvm_create等宏是为了让读者首先认清sequence与item之间的关系。因此上面的例子也只给出了在flat_seq::body()任务中创建和随机item,而省略了发送item。关于完整的过程,我们将在稍后的《sequencer与sequence》中具体阐述常见的方法和宏。


而读者看到这里,可能会觉得,实际上bus_trans理应可以容纳澳门皇冠APP的时序内容,而不应该只是一次数据传输。没错!作为数据传送的最小粒度,用户们有权利将它们扩展到更大的数据和时间范围,从而间接减小数据通信和处理的成本,提高整体的运行效率。因此,我们可以通过下面的这段例码来对之前的例码进行改建,从而起到一样的效果:



输出结果:



从这段修改后的例码可以看到,我们可以将一段完整发生在数据传输中的,更长的数据都“收编”在一个bus_trans中,增加这个item粒度的层次,让它变得更有“气质”。而一旦拥有了更成熟的、更切割得合适的item,在上层的flat sequence使用过程中那就更顺手一些了。譬如上面的例子中,flat_seq类不再操本不属于自己的闲心,考虑数据的内容,而只应该考虑这个数据包的长度、地址等信息,因为扩充随机数据的责任一般由item负责就足够了,而使用flat_seq的用户也无需考虑多余的constraint。


Hierarchical Sequence

Hierarchical sequence区别于flat sequence的地方在于,它可以使用其他的sequence,当然还有item,这么做是为了创建更丰富的激励场景。通过层次嵌套的关系,可以使得hierarchical sequence可以同时使用其它hierarchical sequence、flat sequence和sequence item,这也就意味着,如果底层的sequence item和flat sequence的粒度得当,那么就可以充分利用这些sequence/item来构成形式各样的hierarchical sequence。接下来,我们就着之前定义的bus_trans和flat_seq来给出一个简单的hier_seq,帮助读者们理解这些类之间的联系:



从hier_seq::body()来看,它其中包含有bus_trans t1,t2和flat_seq s1,s2。而它的层次关系就体现在了对于各个sequence/item的协调上面。例码中使用了`uvm_do_with宏,这个宏完成了三个步骤:

  • sequence或者item的创建

  • sequence或者item的随机化

  • sequence或者item的传送


区别于之前例码,这个例码通过`uvm_do_with宏帮助读者理解,所谓的sequence的复用也就是通过高层的sequence来嵌套底层的sequence/item,最后来创建期望的场景。上面的例子中,既有串行的激励关系,也有并行的激励关系,而在更复杂的场景中,用户还可以考虑加入事件同步(通过uvm_event、uvm_barrier或者interface上的信号变化),或者一定的延迟关系(最好基于时钟)来完成sequence/item之间的时序关系。


谢谢你对路科验证的关注,也欢迎你分享和转发真正的技术价值,你的支持是我们保持前行的动力。


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

路科验证

路科验证

路科验证(Rocker IC)专注于验证系统思想和前沿工程资讯,拥有一支活跃的技术原创团队,为高校微电子相关专业学生与IC从业人员提供技术食粮。 您可以在手机移动端同步关注微信订阅号“路科验证”。如果您需要联系我们,请发送邮件至 rocker.ic@vip.163.com 或者 bin.rocker.liu@intel.com 。

日历

« 2018-02-22  
    123
45678910
11121314151617
18192021222324
25262728   

数据统计

  • 访问量: 75338
  • 日志数: 177
  • 建立时间: 2016-06-25
  • 更新时间: 2018-02-04

RSS订阅

Open Toolbar
博聚网