系统与设计
的意见

内部UVM

第一部分:通用的验证方法和如何有效地使用它。

受欢迎程度

我们都见证iPhone处理器芯片的快速进步。与iPhone 8展示最新A11仿生10 nm FinFET 43亿个晶体管,我个人无法理解所需的验证工作的这种类型的SoC -所需的人力和时间来完成这项工作绝对是令人难以置信的。值得庆幸的是,我们有几个pre-silicon验证方法来帮助发现bug硅tape-out之前,如普遍的验证方法(UVM)。UVM一直是一个关键因素在改善今天的SoC验证精度和质量。

UVM是一个开源系统Verilog库,旨在使验证过程灵活通过创建可重用的验证组件和装配强大的测试环境使用约束随机刺激生成和功能覆盖率的方法。它是为了提高开发/简化试验台的创造。UVM附带了一个通用的结构,每个人都利用和操纵根据验证需求。在这个博客我将讨论UVM最本质的特性,在一起,创建UVM的基础结构。

如下所示图1中UVM结构是由不同的类。使用OOP的继承概念,一个可以扩展的可用性的语言。UVM结构基本上是分为3基类。

  1. uvm_object
  2. uvm_transaction
  3. uvm_component。

UVM_Object

  • uvm_object基本上是主类。这是所有UVM数据和层次类的基类。uvm_transaction和uvm_component也来自uvm_object。它包括所有的基本方法、宏标识字段。来自uvm_object类必须实现纯虚拟方法创建和get_type_name等。
  • uvm_object等基本方法包括创建、印刷、复制、克隆、比较、包,解压缩等。
  • 大部分的这些基本方法是有用的进一步构建特定的验证目标的基础。如图1所示,使用uvm_object写uvm_sequence_item。uvm_object有很多虚拟方法如上所述,用于实现通用数据对象的功能。这些方法使sequence_item有目的的实现。

接下来,让我们考虑一下宏——uvm_object不同的宏定义,主要效用宏和宏。实用宏创建等提供基本的实现方法。当你想写对象没有任何领域宏,写如下:“uvm_object_utils(类型)。

UVM场宏等的实现方法通常是有用的复制、印刷、包装、解压等。他们是在“uvm_object_utils_begin和“uvm_object_utils_end调用。宏基本上有两个参数作为它的一部分:字段和旗帜。因此,uvm领域宏观的结构如下:“uvm_field_ *(字段,标志)。

为了保持连续性,我决定包括Sequence_Item信息类。通过这样做,我将能够展示一个方法中描述uvm_object通常是执行。

Sequence_Item
用于生成序列项刺激。编写所有必需的类之后,当你写完testbench,物品是随机序列来生成刺激然后传递给被测试设计。我有没有提到随机的序列项呢?那么,是不是明显在序列项声明数据属性“兰德”?

考虑图1中的关系图。序列条目类是由扩展uvm_sequence_item写的。现在从uvm_object uvm_sequence_item继承。因此,它的对象类型。

下面是一个示例,展示了一个序列项可用于随机数据。

例子:

类bus_trans uvm_sequence_item延伸;

兰德钻头(握)addr;
兰德一点写;
兰德一点读;
兰德一点[7:0]w_data;
位[7:0]r_data;

“uvm_object_utils_begin宏声明(bus_trans)——效用和字段
“uvm_field_int (addr, UVM_DEFAULT)
“uvm_field_int(写,UVM_DEFAULT)
“uvm_field_float (w_data UVM_ALL_ON)
“uvm_object_utils_end
新功能(bus_trans);——构造函数声明
super.new (bus_trans);
endfunction
endclass

顶级Testbench随机和访问序列条目
模块结核病();
bus_trans trans_seq_0;——创建实例
bus_trans trans_seq_1;——创建实例
最初的开始
trans_seq_0 = bus_trans:: type_id::创建(“trans_seq_0”);不管是bus_trans类型创建的对象。
trans_seq_0.randomize ();——随机trans_seq_0数据字段。
trans_seq_0.print ();——打印trans_seq_0数据字段
把美元(trans_seq_1 trans_seq_0.clone ());——创建trans_seq_1和复制trans_seq_0 trans_seq_1
结束
endmodule

在上面的例子中,我展示了类bus_trans uvm_sequence_item写通过扩展类。接下来,作为顶级testbench的一部分,我创建了类bus_trans的对象使用默认方法可供使用类uvm_object并生成随机刺激通过访问类bus_trans的数据字段。

以上听起来可能令人困惑,但不要担心!实践是成功的关键。有许多UVM-related Aldec网站上可用的网络研讨会。下面我提供的链接:

不要害怕UVM (UVM硬件设计师)
OVM技术和UVM——建立一个SystemVerilog Testbench Riviera-PRO

在下一个博客,我将继续从我离开的地方。我将讨论类音序器,以及它如何与类uvm_sequence sequence_item产生刺激。



留下一个回复


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

Baidu