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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何从零开始构建一个可用的UVM验证平台
所有程序的启动都有一个入口。

像是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安需求运行即可。

相关文档
最新文档