UVM模型(四)

UVM模型(四)

1.常用到的uvm_component

uvm_driver:所有的driver都要派生自uvm_driver。driver的功能就是向sequencer索要sequence_item(transaction),并把sequence_item里的信息驱动到DUT的接口上,这相当于完成了从transaction级别到dut能够接受的pin级别的信息的转变。

uvm_monitor:所有的monitor都要派生自uvm_monitor。monitor做的事情与driver先锋干,driver向DUT的pin上发送数据,而monitor则是从DUT的pin上接收数据,并且把接收到的数据转换成transaction级别的sequence_item,并且把转换后的数据发送给scoreboard,共scoreboard比较。

uvm_sequencer:所有的sequencer都要派生自uvm_sequencer。sequencer的功能就是组织管理sequence,当driver要求数据时,它就把sequence生成的sequence_item转发给driver。

uvm_scoreboard:一般的scoreboard都要派生自uvm_scoreboard。scoreboard的功能就是比较reference model和monitor分别发送来的数据,根据比较结果判断DUT是否正确工作。

reference model:reference model直接派生自uvm_component。refence model的作用就是模仿DUT,完成与DUT相同的功能。DUT是用Verilog写成的时序电路,而reference model则可以直接使用systemverilog高级语言的特性,同时还可以通过DPI等接口调用其他语言来完成与DUT相同的功能。

uvm_agent:所有的agent要派生自uvm_agent。与前面几个比起来,uvm_agent的作用并不是那么明显,它只是把driver和monitor封装在一起,根据参数值来确定只是例化monitor还是要例化driver和monitor,这个主要从可重用性的角度来考虑。

uvm_env:所有的env要派生自uvm_env。env是environment的缩写,env把验证平台上用到的固定不变的component都封装在一起,这样,当跑不同的case时,只要在case中例化一个env就可以了。

uvm_test:所有的case要派生自uvm_test。case与case之间差异很大,所以从uvm_test派生出来的类各不相同。任何一个派生出来的case中,都要实例化env,只有这样,才能把数据正常的发给DUT,并正常接受DUT。

2.常用到的uvm_object

uvm_sequence_item:所有的transaction都要从uvm_sequence_item派生。transaction就是封装了一定信息的一个类,如一个mac transaction就是把一个mac帧封装在了一起,包括目的地址、源地址、帧类型、帧数据、FCS校验和等。driver从sequencer中得到transaction,并且把其转换成pin级别的信号。

uvm_sequence:所有的sequence要从uvm_sequence派生一个。sequence就是sequence_item的组合。sequencer直接与sequencer打交道,当driver向sequencer索要数据的时候,sequencer会转而向sequence要数据,sequence发现有sequence_item时,会把此sequence_item传递给sequencer,并最终发送给driver。

config:所有的config一般直接从uvm_object派生。config的主要功能就是规范验证平台的行为方式。如CPU的driver在读取总线时地址信号要持续几个时钟,片选信号从什么时候开始有效等等。

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏韩伟的专栏

架构实现利器:反射

假设我们希望开发一套通用型的软件框架,这个框架允许用户自定义大量不同的情况下的回调函数(方法),用来实现丰富多彩的业务逻辑功能,例如一个游戏脚本引擎,那么,其中...

5630
来自专栏微信公众号:Java团长

Java的21个技术点,你知道吗?

关于Java的编程知识,有人会问哪几个是重要的知识点,不知道大家是否知道呢?给大家分享一下!

1722
来自专栏Spark生态圈

[spark] spark推测式执行

推测任务是指对于一个Stage里面拖后腿的Task,会在其他节点的Executor上再次启动这个task,如果其中一个Task实例运行成功则将这个最先完成的Ta...

1872
来自专栏牛客网

知识总结:Java的21个技术点

关于Java的编程知识,有人会问哪几个是重要的知识点,不知道大家是否知道呢?给大家分享一下! 1、JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来...

4078
来自专栏腾讯大讲堂的专栏

设计模式笔记

| 导语 “计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决” “Any problem in computer science can be so...

4808
来自专栏Python

MongoDB

一 简介 MongoDB是一款强大、灵活、且易于扩展的通用型数据库 1、易用性 MongoDB是一个面向文档(document-oriented)的数据库,而不...

3176
来自专栏java工会

CodeReview常见代码问题

空值恐怕是最容易出现的地方之一。 常见错误有: a. 值为NULL导致空指针异常; b. 参数字符串含有前导或后缀空格没有Trim导致查询为空。 导致以上结果的...

1370
来自专栏web编程技术分享

小兔JS教程(二)-- JavaScript 解释型语言的特点

3035
来自专栏AI科技评论

开发 | Python高级技巧:用一行代码减少一半内存占用

我想与大家分享一些我和我的团队在一个项目中经历的一些问题。在这个项目中,我们必须要存储和处理一个相当大的动态列表。测试人员在测试过程中,抱怨内存不足。下面介绍一...

1164
来自专栏SHERlocked93的前端小站

JS 状态模式

状态模式(State)允许一个对象在其内部状态改变的时候改变它的行为,对象看起来似乎修改了它的类。 其实就是用一个对象或者数组记录一组状态,每个状态对应一个实现...

2344

扫码关注云+社区