我们知道,SV的核心时面向对象,随机约束,线程通信,功能覆盖率收集等,而UVM不光吸取了SV的精髓,还添加了许多新内容。其中最重要的就是UVM提供了一些可重用的类用来减轻项目之间水平复用和垂直复用的工作量。UVM中的“通用”指的就是该方法学适用于大多数的验证项目。当然,在UVM中验证环境可以分为两大部分,一部分构成了环境的层次,着部分代码由uvm_component类完成,另外一部分构成了环境的属性和数据传输,着部分通过uvm_object类完成。
我们知道,没个验证项目都无法逃脱者几点工作:1。组件的创建和访问。2.环境的结构创建,组件之间的连接和运行。3.不同阶段的顺序安排。4.激励的生成,传递和控制。5.测试的报告机制。
接下来讲一讲UVM里面的工厂机制。工厂简而言之言之,就是可以生产出对象的地方,uvm_component和uvm_object是进出工厂的主要模具和生成对象。工厂机制可以在不修改原有的验证环境层次的同时,实现方便的替换掉验证环境中的实例或者注册了的类型,这也是覆盖的意思,这可以提高验证还平台的可重用性。
我们知道uvm_component中有:generator,stimulator,monitor,agent,checker,environment,test等,而哪些非固定资产像TLM transaction这种从generator流向stimulator的数据包则是在uvm中同意由uvm_object来表示。
我们还要注意,在component和object的注册中需要应用宏来完成注册,而所做的事情就是将类注册到factory中。我们还要注意,component中药保留两个参数,这是为了通过类似钩子的做法,一层一层向上勾,将整个UVM连接起来,但是在object中没有parent参数,因此也不会显示在UVM的层次中。只能作为数据体进行传递。
接下来我们讲一讲覆盖,覆盖分为两种:类型覆盖和实例覆盖。类时覆盖指的是UVM层次结构中所有的原有类型都被覆盖类型所替换,而实例替换指的是在某些位置的原有类型会被覆盖类型所替换。