下冰雹 · 2023年04月11日

浅谈验证平台的重用性设计

提纲:

1. IC验证的分级:UT,BT,IT和ST。

2. 验证平台重用性的概念。

3. 搭建验证平台时,为什么要做重用性设计?

a) 迭代开发的思想。

b) 提升复杂系统的验证平台搭建效率。

4. 验证平台可重用内容与不宜重用内容的大致分类。

a) 不宜重用内容:激励和驱动相关内容,例如agent中的driver组件和sequencer组件,与激励和测试场景相关的sequence和testcase。环境中集成RTL的TOP文件也不能重用。

b) 可重用内容::验证平台的参考模型,monitor组件,checker组件,interface文件,assertion文件,functional coverage model。部分配置流程也可重用。

5. UVM验证平台重用性设计示例。

6. 题外话

在国内芯片设计大厂中(例如菊花儿厂),一个芯片项目的验证,按照从底向上,通常被分为四个等级:单元测试(Unit Test, UT),模块测试(Block Test, BT),集成测试(Integrated Test, IT)和系统测试(System Test, ST)。

UT主要是针对一个复杂或关键的功能特性或电路结构,搭建独立的验证平台和开发测试用例进行的验证。这种电路结构可以是一个复杂的异步FIFO,例如PHY中的弹性buffer。可以是自研的较独立的数据处理单元,例如加解绕模块scrambler。也可以是一个复杂的算法处理模块,例如链路数据的偏移量补偿处理de-skew逻辑。

BT主要针对集成度较高,较为独立的模块,搭建验证平台和开发testcase进行的验证。这种模块通常会包含多个UT的测试电路逻辑。通常被挂在片上互联总线上,支持来自总线的配置读写操作和对总线发起数据的读写操作,例如硬件开发的各个加速器。BT需要重用UT的环境组件,主要是与比对机制相关的interface, monitor,reference model和checker。其中checker包含了业务报文检测的scoreboard和信号时序检查的assertion。

IT的测试对象是由各个BT的测试模块组合起来的硬件系统。在IT验证中,通常是通过VIP来模拟CPU对系统的访问行为,即寄存器读写。通过VIP来模拟片上互联总线和DDR的行为,与硬件系统进行交互。也通过VIP来模拟其他系统的行为,使之与该硬件系统进行对接和交互。与BT类似,IT通常需要重用各个BT的环境组件,主要也是与比对机制相关的interface, monitor, reference model和checker。IT通常不包含CPU,DSP,IT验证平台也通常不包含C或C++程序。

ST就是通常讲的SoC验证。测试对象是整个芯片系统,包含CPU,DSP和片上互联总线( Network on Chip, NoC)。验证环境主要分为C语言部分和System Verilog(SV)语言部分。C语言部分主要负责产生CPU和DSP相关的寄存器配置的激励,该激励通过NoC下发到各个逻辑模块,对逻辑模块进行初始化配置或者业务功能相关的配置。SV语言部分主要负责控制行为模型产生的激励,输入到逻辑模块的接口,同时也负责对逻辑模块的输出信号进行采样和检查,有时候也会启动reference model产生期望的结果,与逻辑相应的输出结果进行比对。C和SV的交互和同步可以通过一块共享的RAM空间实现,SV和C都可以访问。

有的时候,由于芯片系统的复杂度较大,也会在BT和IT之间设定一个验证级别,将多个模块组合起来进行验证,称为子系统集成验证(Subsystem Integrated Test, Sub-IT)。有的时候,芯片的架构会设计一个结构和功能都比较独立的,包含DSP/CPU的子系统,需要搭建专门的环境验证该子系统,会在IT和ST之间再定一个验证级别,称为子系统验证(Subsystem Test, Sub-ST)。

验证平台的重用性设计,也叫做可复用性设计(re-use design)。该特性通常是考察验证环境质量的一个重要方面。好的验证环境一定具备很好的重用性设计。

顾名思义,重用性设计,就是指在搭建验证平台时,采用的一系列措施,使得该验证平台的组件,functions,tasks,constraints等能够比较容易和方便的被其他的模块的验证平台或者上层验证平台所重复使用。上层验证平台是指其DUT业务功能包含了当前模块功能的复杂模块或子系统级的验证平台。其实,重用性主要还是指当前验证平台的组件(classes)被上层验证平台的重复使用。

为什么要进行重用性设计?我觉得重要的原因还是模块化设计的思想。如图1所示。

image.png

一个复杂的模块或系统,是由多个较为简单的模块组合而成的。在搭建验证环境时,复杂模块或系统对应的验证平台,也应该集成简单的模块或集成验证平台的组件。通过统一配置和调度这些相对简单验证平台的组件,来实现对复杂模块或子系统的复杂业务场景的模拟、监测和比对,同时也实现了对复杂业务场景的构造和验证。

直接重用已经开发好的组件,能避免重复开发,减少编码的错误,缩短调试时间。事半功倍,何乐不为。

站在DUT角度看,简单模块的激励和驱动,往往是来自上下游的DUT子模块,无需手动输入。因此在重用验证平台之时,与测试激励和驱动相关的组件都不能重用,如sequence, sequencer, driver, test case等。此外当DUT从简单模块改成复杂的模块或子系统时,RTL模块的Module名称和接口信号都已改变,因此模块级验证平台的sim_top文件不可重用。其余的组件与业务功能的配置(configure),监测(monitor),模拟(reference model),检查(checker/SVA),比对(scoreboard),和完备性分析(functional cover/assert cover),相关联,都可以重用。

搭建验证环境时,怎样做才能提高验证环境的重用性呢?

IC验证环境的重用性设计,并非是一个系统化的方法学,而是一系列的小技巧和小窍门组合起来的“套路”,我们先从一些小技巧谈起吧。

1、配置寄存器

通常有两种方式配置寄存器,一种是读写函数+地址+读写变量,另一种是RAL.Reg_X.read/write。两种方式都可重用。前一种的地址要写成base address+offset address的形式,并且把base address用宏或者变量指示,以便于统一修改。后一种在重用的时候,可通过set_base_addr函数修改RAL模型的base address。我喜欢前一种,因为通过重新定义base address实现寄存器配置的代码的重用,显得更加直接,也与真实的软件的配置寄存器的形式更加接近。

2、在Test Bench中加载文件时,不能使用绝对路径。

3、各个验证组件的parameter定义时,不能重名。组件需要使用的parameter,就在组件内部定义。验证组件的开发要做到高内聚,低耦合。

4、函数或类的命名时,要加上子模块的名称的关键字,避免重用时发生重名。例如uvm_analysis_imp_decl()要加子模块的名称关键字。开发的验证组件,新建的class等在命名的时候,要加上子模块名称的关键字。

5、config_db_set

config_db_set的参数用“*”通配符比直接用uvm_test_top.env...的绝对路径形式去赋值更易于重用。但在重用的时候,要保证调用config_db_set的时候,目标参数所在的class已被new()过,目标参数可以被访问到。通常情况,在UVM的configure_phase执行config_db_set。

config_db_set传递一个变量的值时,在参数中填写变量路径时,用“*+模块关键字”的形式。

6、Fork join_none慎用。如果真的要使用fork join_none,要想清楚,被fork join_none包裹的全部线程会一直执行下去,直到当前调用fork join_none的UVM Phase彻底结束。可能是水平有限,直到目前为止,但凡使用fork join_none,总会给自己挖一些或大或小的坑,既坑了自己,有时候也坑同事。

7、Memory model的初始化操作,封装成一个函数。调用该函数要放在能被重用的文件中,例如env.sv,而不要放在base_test_case.sv中。

8、在子模块的验证环境中,设置一个开关,可以把整个子模块的各个组件都关闭,此处的组件关闭是指:monitor停止采数,reference model停止计算,scoreboard停止比对。当重用该子模块环境时,可通过该开关把该子模块环境关闭。因为在IT或ST的后期,或者在网表仿真时期,主要做端到端的比对,各个UT/BT的比对可关闭。

9、Reference model的启动方式,也就是它开始计算的触发条件,应该与DUT的尽量一致。举个例子,若DUT的启动是通过软件配置START寄存器,那么在Reference Model内部也要监测寄存器的配置Port,一旦get到寄存器写transaction,并且offset对应的就是START寄存器,write data的值符合预期,那么reference model开始计算。

10、子模块级验证平台的base test case的初始化配置操作或其他的公共特性的配置操作,要封装成task(),以便于其他test case调用。这可认为是一种广义的重用。

验证平台重用性设计的内容是广大而深邃的,是值得IC验证工程师不断思考和探索的。就像匠人制作家具,做出能用的家具很容易,但是要做出精美绝伦的传世之作,就需要不断的思考和探索。如图2所示。我们IC验证工程师常常自嘲是搬砖的码农,但我们绝不仅仅只是搬砖而已。

image.png

作者:一只特立独行的猪
文章来源:IC验证者之家

推荐阅读

更多IC设计技术干货请关注IC设计技术专栏。
迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
20179
内容数
1307
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息