searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

UVM验证中一种创建base sequence方法

2024-10-28 09:27:15
0
0

一、UVMsequence机制简介

UVMUniversal Verification Methodology)是一种基于SystemVerilog的验证方法学,旨在为集成电路验证提供标准化的框架。UVM的核心组件包括测试平台的层次结构,如environmentsequencetransaction等。其中,环境由多个组件构成,如接口agentsequencerdrivermonitorscoreboard。这些组件协同工作,支持随机测试激励的生成、数据收集及验证覆盖率的统计。典型的UVM平台如下:

相较于testbench的验证方法,UVM搭建了独立且稳定的验证环境,具体的业务验证通过test case实现。同时UVM引入sequence机制负责激励的产生,driver组件仅发送激励,这样做的优势在于,每个验证场景不需要修改driver内容,通过sequence产生不同的激励以满足不同场景的验证需求。

二、base sequence构建方法

对于较大规模的DUT,例如DPURDMA等大型设计,在进行具体业务之前往往需要初始化操作,包括寄存器配置、地址分配、控制信息下发等操作,初始化操作对应大部分验证场景都是重复的。因此需要在验证过程中创建一个base sequence类,将重复的操作集中在类里,后续test casesequence类均为base sequence子类。

1base sequence的创建

如图示,UVM规定sequence类需要从uvm_sequence派生,对于sequence类而言每个sequence类都应该具有一个body()任务,每个sequence启动的时候都会自动执行该方法

对于base sequence而言,在body任务中加入初始化操作,由于后续所有test casesequence都从base sequence继承,因此所有sequence均会自动执行初始化操作,大大节省重复的编码工作,同时UVM也提供了pre_body()post_body()方法,分别对应在执行body任务前后自动执行,用于参数配置等操作,基础的base sequence如下图所示,new函数为语法要求。

2、base sequence的扩展

如上述,base sequence作用在于消除sequence之间的重复操作,步骤1仅是一个基础的base sequence,通过在base sequence中扩展任务,避免test case之间的重复任务。

通常,在base sequence中常采用virtual类型任务,相较于普通任务,virtual类型任务有如下优势:

1多态Polymorphism):通过 virtual 方法,可以实现多态性。即子类可以覆写父类中的 virtual 方法,提供自己的实现版本。这样,在运行时可以根据特定的激励需求改写父类中的方法,提高灵活性;

2动态绑定:当一个对象调用一个 virtual 方法时,即使父类的对象引用指向的是一个子类的对象,实际调用的也是子类中覆写的那个方法

最终base sequence呈现如下图

3、base sequence的使用

base sequence构建完毕后,在case里通过继承base sequence编写测试场景适配的sequence,构建测试场景需要的激励,如下图所示

子类data_tx_sequence继承base sequence,改写了body方法,在body方法中首先调用base sequencebody(),完成DUT初始化操作,并加入调用base sequence中的rand_tx_process()完成一个tx方向的激励构建,同理,将调用方法改为rand_rx_process(),即可完成一个rx方向的激励构建。base sequence的使用极大的降低了test case激励构建的复杂度,模仿body方法的重载方式,对base sequence中的rand_tx_process()加入更为特定的行为,具有很大的灵活性。

0条评论
作者已关闭评论
c****c
1文章数
0粉丝数
c****c
1 文章 | 0 粉丝
c****c
1文章数
0粉丝数
c****c
1 文章 | 0 粉丝
原创

UVM验证中一种创建base sequence方法

2024-10-28 09:27:15
0
0

一、UVMsequence机制简介

UVMUniversal Verification Methodology)是一种基于SystemVerilog的验证方法学,旨在为集成电路验证提供标准化的框架。UVM的核心组件包括测试平台的层次结构,如environmentsequencetransaction等。其中,环境由多个组件构成,如接口agentsequencerdrivermonitorscoreboard。这些组件协同工作,支持随机测试激励的生成、数据收集及验证覆盖率的统计。典型的UVM平台如下:

相较于testbench的验证方法,UVM搭建了独立且稳定的验证环境,具体的业务验证通过test case实现。同时UVM引入sequence机制负责激励的产生,driver组件仅发送激励,这样做的优势在于,每个验证场景不需要修改driver内容,通过sequence产生不同的激励以满足不同场景的验证需求。

二、base sequence构建方法

对于较大规模的DUT,例如DPURDMA等大型设计,在进行具体业务之前往往需要初始化操作,包括寄存器配置、地址分配、控制信息下发等操作,初始化操作对应大部分验证场景都是重复的。因此需要在验证过程中创建一个base sequence类,将重复的操作集中在类里,后续test casesequence类均为base sequence子类。

1base sequence的创建

如图示,UVM规定sequence类需要从uvm_sequence派生,对于sequence类而言每个sequence类都应该具有一个body()任务,每个sequence启动的时候都会自动执行该方法

对于base sequence而言,在body任务中加入初始化操作,由于后续所有test casesequence都从base sequence继承,因此所有sequence均会自动执行初始化操作,大大节省重复的编码工作,同时UVM也提供了pre_body()post_body()方法,分别对应在执行body任务前后自动执行,用于参数配置等操作,基础的base sequence如下图所示,new函数为语法要求。

2、base sequence的扩展

如上述,base sequence作用在于消除sequence之间的重复操作,步骤1仅是一个基础的base sequence,通过在base sequence中扩展任务,避免test case之间的重复任务。

通常,在base sequence中常采用virtual类型任务,相较于普通任务,virtual类型任务有如下优势:

1多态Polymorphism):通过 virtual 方法,可以实现多态性。即子类可以覆写父类中的 virtual 方法,提供自己的实现版本。这样,在运行时可以根据特定的激励需求改写父类中的方法,提高灵活性;

2动态绑定:当一个对象调用一个 virtual 方法时,即使父类的对象引用指向的是一个子类的对象,实际调用的也是子类中覆写的那个方法

最终base sequence呈现如下图

3、base sequence的使用

base sequence构建完毕后,在case里通过继承base sequence编写测试场景适配的sequence,构建测试场景需要的激励,如下图所示

子类data_tx_sequence继承base sequence,改写了body方法,在body方法中首先调用base sequencebody(),完成DUT初始化操作,并加入调用base sequence中的rand_tx_process()完成一个tx方向的激励构建,同理,将调用方法改为rand_rx_process(),即可完成一个rx方向的激励构建。base sequence的使用极大的降低了test case激励构建的复杂度,模仿body方法的重载方式,对base sequence中的rand_tx_process()加入更为特定的行为,具有很大的灵活性。

文章来自个人专栏
UVM验证记录
1 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0