tomako123

导航

2.2.1最简单的验证平台(单个driver)

书中的DUT(待测设计)定义如下:


这个DUT的功能非常简单,通过rxd接收数据,再通过txd发送出去,其中rx_dv是接收的数据有效指示,tx_en是发送数据的有效指示。本章中的所有例子都是基于这个DUT.

验证平台中的所有组件都应该派生自UVM中的类。

比如UVM验证平台中的driver应该派生自uvm_driver,一个简单的driver如下例所示:

下面是本人初学时对代码的理解,因为sv没学多少直接来看的,所以刚开始重点在于语法的理解:

3(第三行):这里的语法点是class中extends的用法,用于类的继承。

5:所有派生自uvm_driver的类的new函数都有两个参数,string类型的name和uvm_component的parent类型,name参数好理解,就是名字而已。parent书上说难理解后面再说。

6:这里的super.new()的用法是:

8:这里首先是extern这个关键字,这个关键字指示该任务可以在类的外部进行实现(任务的具体内容可以在class外面定义),然后在定义了virtual时,在子类中调用时会先在子类中查找,没有再去父类中查找。然后后面的task跟着的应该就是11行下面的内容了。

11:driver所做的事情几乎都是在main_ohase中完成。uvm由phase来管理验证平台的运行,这些phase统一以xxxx_phase来命名,且都有一个类型为uvm_phase、名字为phase的参数。main_phase是uvm_driver中预先定义好的一个任务,因此可以简单地认为实现一个driver等于实现其main_phase。

后面的内容就是在生成激励了,向rxd上发送256个随机数据,并将rx_dv信号置为高电平。

然后uvm_info这个宏是用来打印信息的,三个参数,第一个是用来给打印信息分类的字符串,第二个信息是要打印的内容,第三个信息是冗余级别(类似于优先级)(UVM_LOW代表的是关键信息)。

后续对my_driver的实例化和最终搭建的验证平台如下:

2:用include把uvm_macros.svh包含进来,这个文件是uvm中的一个包含众多宏定义的文件,只需要包含一次。

4:通过import语句将整个uvm_pkg导入验证平台中,只有导入了这个库才会在编译my_driver的时候能够认识其中的uvm_driver等类名。

5:包含driver文件。

24-25:实例化my_driver,并传入参数

26:显示调用main_phase

posted on 2024-05-15 11:38  甜豆莎的辣白菜  阅读(16)  评论(0编辑  收藏  举报