关于UVM的一些知识2

首先讲一讲UVM的一些核心基类。从uvm_object提供的方法和相关的宏操作来看,他的和新方法主要提供与数据操作相关的服务:copy,clone,compare,print等等。在此之前,我们首先要完成域的自动化。

在其中,我们要注意区分copy和clone的区别,copy默认已经创建好了对象,只需要对数据进行拷贝,此时不i你会执行copy(),还会执行do_copy(),是深拷贝,而clone会自动创建对象并对数据进行拷贝。

在uvm中还存在一个phase机制,通过该机制可以清晰的将UVM仿真阶段层次化。这里的层次化,不仅仅有各个phaase的先后执行顺序,还有处于通一个phase中的层次化组建之间的pahse也有先后关系。

常见的phase机制包括build,connect,run,report等,他们分别完成了组件的建立,连接,运行和报告。注意,只有build和final是自顶向下的,其他都是自底向上的。,只有run是任务(耗时任务),其他的都是函数(不耗时间)。还需要注意的是,run phase可以细分为12个phase,与run是并行的。

那么仿真是如何开始的呢?1。我们可以通过全局函数run_test()来选择性的指定运行哪一个uvm_test,这样的话,指定的test类将被例化并指定为顶层的组件。

2.如果没有任何参数传递给run_test()的话,我们可以通过在仿真中传递参数UVM_TESTNAME=<test_name>,来指定仿真时调用uvm_test。

那么仿真时如何让结束的呢?结束的方式有且只有一种就是利用objection挂起机制来控制仿真结束。每个objection机制的参与组件,都可以独立的各自挂起objection,只有当所有的组件都落下objection的时后,仿真才会结束。

接下来讲一讲config机制。这个机制可以用于验证组件之间传递参数。有两个参数:get和set函数,发送数据用set函数,接受数据用get函数。

这表示为传递参数类型为APB总线接口apb_if,第一个参数this是发送方的实例句柄,第二个参数是目标相对于第一个参数的路径。两个参数联合起来组成了目标路径,第三个参数是要传递的参数的标记,第四个参数是要传递的参数的值。

第三个内容是消息的管理。其中最重要的是冗余度的概念,有:high,medium,low,none,冗余度和消息处理中的过滤直接相关。

接下来讲一讲uvm的组建家族。首先是driver,driver可以从sequencer中获取transaction,经过转化进而在接口中对dut进行时序激励。

monitor是为了检测接口激励如观测dut的interface,并且收集总线信息。海可以通过广播将数据发送给其他组件(scoreboard)。

sequencer如同一个管道,将sequence的数据通过TLM接口传递给driver一侧。

agent是验证环境的一个标准单位,通常包含driver,monitor和sequencer,agebt的存在是为了验证环境中的复用,总体可以分为master和slave。

scoreboard进行数据的比对和报告,他可以收到多个monitor的数据。

最后一个是env,他包含了多个agent和其他的component,这些不同的组件共同构成了一个完整的验证还将,而这个环境可以作为一个子环境被进一步集成到更高的环境中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值