​UVM(九)之sequencej机制续1

UVM(九)之sequencej机制续1

当一个sequence启动起来之后,UVM会自动执行sequence的body任务,所以要产生各种和杨的激励,就要写好body任务。

body这个任务完成的事情与gen_pkt函数相似,只是不同的是,gen_pkt可以直接通过一个ref形式的参数把产生的transaction交给driver,而sequence则需要使用通信的方式来传递,如下入所示:

由于传递方式的改变,所以产生transaction的方式也就有了不同。一个transaction应该这样产生:

要产生一个transaction,要分成四步:第一步就是实例化,第二部就是调用start_item,第三部就是执行randomize过程,第四部就是调用finish_item。由于是牵扯到sequencer和driver的通信,因此这里就有一个主动和被动的过程。当driver中使用seq_item_port.get_next_item主动请求一个item(transaction)时,sequencer会要求sequence产生一个item(transaction);产生完成后,sequence就要等待driver把item(transaction)取走,这需要driver显示调用seq_item_port.item_done()。当此函数被调用后,finish_item才会返回,一个transaction的产生才真正的完成。

仔细观察这四步,其中只有第三部才会有一些差异,而另外的三步则是固定不变的。针对这种情况,UVM推出了uvm_do系列宏来简化产生transaction的过程。如上,使用uvm_do宏就可以简写为:

一个宏封装了产生item的四个步骤,相当于把所有的事情做完了,极大的方便了使用。除了uvm_do宏之外,uvm_do系列宏中另外一个经常使用的就是uvm_do_with。它的使用方式如下:

使用uvm_do_with宏之后,那么产生transaction的第三部中的assert(tr.randomize() with {tr.crc_err == 1};如果需要发送多个包(其中pkt_num是要发送的包的数量):

假设一个产生特定crc_err的包的sequence如下:

另外一个sequence如下:

现在我们要写一个新的sequence,他可以替代上面的两种包,可以这样写:

这样写起来似乎显得特别的麻烦。产生的两种不同的包中,第一个约束条件有两个,第二个约束条件有三个,但是加入约束条件有10个呢?如果我们有整个验证平台中有30个case都用到了这样一个包,那么就要在这30个case中加入10行这样的代码,这是一件非常恐怖的事情,而且特别容易出错。既然我们已经定义好了crc_seq和long_seq,那么可以作为一个sequence的变量为参数。

把定义好的sequence作为uvm_do的参数,这样就实现了sequence的重用。

原文发布于微信公众号 - 瓜大三哥(xiguazai_tortoise)

原文发表时间:2017-10-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逢魔安全实验室

CVE-2018-2628 Weblogic反序列化POC重构详解

3705
来自专栏软件开发

前端MVC学习总结(二)——AngularJS验证、过滤器、指令

一、验证 angularJS中提供了许多的验证指令,可以轻松的实现验证,只需要在表单元素上添加相应的ng属性,常见的如下所示: <input Type="tex...

2336
来自专栏欧阳大哥的轮子

iOS的MVC框架之控制层的构建(上)

在我前面的两篇文章里面分别对MVC框架中的M层的定义和构建方法进行了深入的介绍和探讨。这篇文章则是想深入的介绍一下我们应该如何去构建控制层。控制层是联系视图层和...

1062
来自专栏Java架构师学习

编写 Spring 配置文件的最佳实践

Spring 是一个功能强大的Java应用框架,提供各种配置选项。它的核心特性是为简单的Java对象(PO??JO)提供服务,称为 Bean。 Spring使用...

3447
来自专栏夏时

从零开始,学会 PHP 采集

2373
来自专栏积累沉淀

Javascript模块化编程(一)

随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂。 网页越来越像桌面程序,需要一个团队分工协作、进度管理、单元测...

36410
来自专栏JAVA烂猪皮

BAT面试常的问题和最佳答案

客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将reques...

972
来自专栏Golang语言社区

Golang使用pprof监控性能及GC调优

作者:峰云就她了 链接:http://xiaorui.cc/?p=3000 來源:个人博客

3193
来自专栏信安之路

2017-NSCTF-PWN

这次比赛值得吐槽的地方很多,但是我要忍住,先讲正经的。 这次总结比赛的两道pwn,都是栈溢出类型的,比较简单。先放上题目链接:http://pan.baidu....

810
来自专栏python3

python3--文件操作

rb,只读,以bytes类型读取(非文字类的文件时,用rb,比如图片,音频文件等)

1402

扫码关注云+社区