1. UVM 方法学的测试平台构建框架关系
UVM 验证方法学普遍被业界各大芯片公司、EDA公司所推崇,成为当今主流芯片验证人员的必备技能。作为初学小白,今天对平台中的三个概念,进行个人理解总结。
uvm 是以树的形式,组织所有的验证组件(其实就是验证文件)的。作为一棵树,必然有其唯一的根的存在。刚接触uvm 时候,认为我们自己写的my_test 便是最终的根,其实不然。
请注意:
(a)树形结构中的"()"双引号+括号中间的内容,是我们自己创建的uvm class(文件),其上方的标识符,才是真正的被实例化的对象存在。
(b)树形结构中,除了uvm_top 及 uvm_test_top 之外,其它所有实例化对象的标识符,都是可以受用户自行命名的。
1.1 uvm_top
uvm中真正的根是一个被称为 uvm_top 的东西。 uvm_top 是一个全局变量,它是uvm_root 的是一个实例化对象, 而且是唯一的。具体uvm 怎么做到唯一的,大家可以自行研究uvm 源码(这里用到了C++的单例模式)。uvm_top 属于 uvm_root 的唯一实例,它自然是一个uvm_component。
in uvm_root.svh:
(1). class uvm_root extends uvm_component;
…
…
endclass
(2). const uvm_root uvm_top = uvm_root::get();
运行uvm环境的时候,系统会自动创建一个全局唯一化对象uvm_top。那么,是不是只有uvm_test及其子类才有trigger 系统自动创建这个根呢。答案:当然不是。下面例子,通过修改hello_world 的父类,分别继承于uvm_driver/uvm_monitor/uvm_env 等组件 均可以得到相同效果。
uvm_root::get()被执行的时候,会调用uvm_root:new()函数。其函数原型如下: