系统与设计
的意见

UVM:有组织的和系统化的

掌握基本的验证标准。

受欢迎程度

使用UVM我喜欢的原因之一是它的一个有组织的结构和均匀性的倾向。有些人可能觉得它很讨厌UVM坚持这样一个严格的格式,但是我认为这是一个很好的办法来维持基本的UVM根深蒂固的在你的大脑。你总是想要一个良好的基础和发展的强劲基本面任何努力。验证和UVM锤子基本面没有什么不同。

UVM有很大的结构和组织模式。我认为有两种截然不同的和基本元素UVM结构:组件和对象。现在这个描述不是严格正确因为uvm_components从uvm_objects扩展,但我认为它们用于,认股权证的区别。我认为它类似于卡车和轿车的想法。在我看来,卡车也轿车,但它是有用的要注意区别。

1。组件
一般情况下,组件的静态部分UVM结构。我喜欢考虑组件的墙壁和房间的房子。他们把家里分成不同部分具有不同的目的。类似地,组件将验证过程划分为不同的角色。门允许从一个房间到另一个通道的端口组件允许组件之间的信息传递。

组件由常用的方法类似于一所房子有多少不同的房间包含相似的特点:灯、窗户、或媒体。许多共同的主要部分或方法UVM组件包括:

  • 工厂注册和处理程序实例化
  • 构造函数
  • Build_phases
  • Connect_phases
  • Run_phases

工厂注册和处理程序实例化
当你注册一些工厂使用的uvm_component_utils()宏,你输入到一个查找表,稍后您将能够访问它。使用这个注册功能可以覆盖组件在未来发展中先进的测试,但这超出了我所讨论的范围。处理程序是需要创建的组件和通常的实例化后工厂登记。

uvm_021016_img_01
图1:通用工厂登记处理程序实例分析港口,司机,监控和音序器。

构造函数
面向对象编程的一个主食,这些方法来创建类的实例化。

构建阶段
在构建阶段建造房子的墙壁和房间。在这个阶段,组件正在建设中,众议院已初具规模。

uvm_021016_img_02
图2:一个示例代理build_phase函数。

连接阶段
这就是你开始安装门连接不同的房间在一起。这种方法处理组件连接在一起,以便通过交易。TLM概念在UVM中大量使用和这里最明显。TLM允许抽象组件之间的通信,从而促进组件的重用代码和组件之间的简单的重路由。

uvm_021016_img_03
图3:一个通用的代理类与工厂登记、处理程序实例化,构造函数,build_phase, connect_phase。

运行阶段
这就是有趣的开始。我想不出一个伟大的相当于众议院类比,但基本上run_phase就是运动开始发生。事务是传递和时间开始消逝。信息来自或投入了他们的交易方式通过不同的组件。
一个基本的旅游事务的计划可能包括:

  1. 音序器和通过交易获得序列的司机。
  2. 司机随机事务中的值并将其传递到DUT。
  3. DUT变化值基于DUT的事务功能。
  4. 监控获取数据并将它传递给任何用户。
  5. 一个记分牌用户评估交易的数据,并决定正确DUT的表现。

run_phase UVM存在的一个重要特征是反对。异议的方式UVM决定当测试完成。我认为反对旗帜,提出当组件想要做点什么。当组件是用什么做的,然后它滴异议和测试完成时,所有的反对意见都下降了。

uvm_021016_img_04
图4:反对run_phase被抬升和下降的一个通用的测试类。

2。对象
对象是UVM验证结构的移动部件。他们随身携带的信息结构和从不同的组件。当我想到的对象,我认为主要的事务和序列。虽然配置和注册对象也可能适合的类别,他们是更高级的概念而不是我指的是什么。序列和事务包括公共部分和方法之间:

  1. 工厂注册
  2. 变量和约束声明
  3. 构造函数
  4. 身体(序列)

工厂注册
类似于组件工厂登记、序列和事务也在工厂使用' uvm_object_utils注册()宏。

变量和约束声明
这里开发的刺激变量。一般测试刺激变量声明,然后约束放在他们为了推动设计有趣的场景。

构造函数
没有什么太特别的对象构造函数。他们的目的是类似于组件的构造函数,但对象构造函数没有父母在函数参数。

的身体
身体功能通常在序列和类似于组件的run_phase鉴于消耗时间。序列的尸体可能被用来创建多个事务同时改变变量的值在这些事务。

uvm_021016_img_05
图5:常规序列类工厂登记,声明变量和约束,构造函数,和身体功能。

我只想说,这不是一个详尽的清单的UVM提供,但我希望它给一些清晰UVM背后的基本功能,并允许新用户快速开始。在UVM的更多信息,用户可以访问我们的网站,快速通道UVM培训



留下一个回复


(注意:这个名字会显示公开)

Baidu