打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何从零开始构建一个可用的UVM验证平台
userphoto

2016.02.21

关注
所有程序的启动都有一个入口。像是C程序的入口是main(),普通verilog的启动是在顶层模块中的
initial  beginend间的代码。一般SV验证平台的启动在顶层module或者program中的initial begin end间的代码。uvm的启动其实也是在顶层模块中的 initial  beginend间的代码,只是这段代码已经由uvm预备好了,这就是run_test()这个任务。所以所有的uvm顶层都有类似这么一段

import uvm_pkg::*;
initial
begin
run_test();
end

这里的run_test就在uvm_globals.svh中定义, 它到底都做了些什么,下面详细解释一下。




这个run_test实际调用了uvm_top也就是单实例顶层的run_test任务,然后调用m_run_phases.

这里出现一个phase概念,与phase对应的还有domain,前面已经说过了phase可以理解为一个动物的各个生命阶段,domain可以理解为哪些动物是同步行动的一个范围,这两个都是从object派生出来的类。然而phase又大体分为2种,具体见下图,一种是消耗仿真时间的task类,一种是不消耗时间的function类,task类可以类比为什么婴儿期,青春期,更年期这类持续一段时间的东西,function类可以类比为出生,死亡这种定义一个瞬间的东西。当然functionphase又分为自上而下执行与自下而上执行2种,只有build,final 2个是自上而下执行,其他的都是自下而上执行。所有的taskphase也是自下而上启动,而后并发执行。可以看到图中run_phase与其他的taskphase不同颜色表示,这是因为run_phase其实为了之前ovm的写法,代表了整个的耗时仿真过程,而uvm把这个过程进行了细分,分成12段。这里可以自由选择是使用整个的run还是分别使用12个分段的过程。





上面大体介绍了各种phase,现在再说m_run_phases,当我们不定义特殊的domain关系,则系统所有的部件使用统一的domain,也就是整个系统是统一行动的,对于相对简单的系统,这样就足够了。m_run_phases调用顶层的execute_phase然后调用tranverse遍历顶层下面所有的test,env,agent,monitor,driver等节点,依据运行时段是否task或者function型,分别执行exec_task和exec_func。然后等待所有的components执行完当下的phase,也就是等待所有的objection都已经被解除,则继续执行下一个phase,如此循环,将整个结构下所有节点的所有时段执行完成,结束仿真。

以上整个过程都是uvm内部设定好的,不需要使用者进行改动,只需要在各个phase中添加具体的行为,使得各个component安需求运行即可。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
UVM中的phase执行顺序
月薪4w的IC验证工程师的日常都做什么?
UVM系统验证基础知识1(基于UVM的verilog验证 )
UVM系统验证基础知识0(modelsim搭建第一个UVM环境及源码下载 )
C# Task.Run调用外部参数
【学术论文】基于UVM的基带射频接口电路的验证
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服