高度可配置参数化UVM IP验证环境

 

【路科验证】高度可配置参数化UVM IP验证环境...



摘要

参数化的IP是可配置的,这意味着在不同的SOC中IP设计可以有不同的设计参数,设计参数可以对应到协议、端口号、端口名称、以及内部逻辑。大量的IP设计参数非常影响验证环境的构建,比如testbench的连接、驱动器、监视器、仿真序列以及功能覆盖率的建立。

本文呈现出了一种使用UVM验证方法学构建基于高可配置性的高级微处理器总线架构(AMBA)的IP验证环境,其中会使用到Synopsys公司的AMBA VIP和Ruby脚本。该验证环境可以支持通过使用AMBA设计参数进行自动化的验证环境更新,包括IP preprocess、IP  testbench以及IP MODULE UVC。

同时本文也会介绍如何去做testbench绑定连接的垂直复用和水平复用,验证IP(VIP)、序列(sequence)的复用、UVM环境配置、记分板(socreboard)复用以及覆盖率(coverage)。

通过项目最终结果表明,当参数化的IP改变它的设计参数并且集成到不同的SoC中时,使用该方法可以减少30%的额外资源需求。

关键字:可配置化,水平复用,垂直复用,参数化IP,通用验证方法学(UVM)

1.   简介

参数化的IP设计是加速行业的趋势。同样地,在不同的参数配置、不同的SoC项目中使用使用IP设计也是一个加速的趋势。这些趋势虽然提高了RTL的开发效率,但是也带来了许多新的验证要求。

Janick Bergeron曾写道”在数百万门asic和fpga的时代,可重用IP、系统级芯片(SoC)设计,验证花费约占70%项目周期[1]”。验证通常来说是直接处在项目进度的关键路径上的,对于理解如何让一个验证环境自动地适应不同的IP设计参数,以及当IP设计参数变化后验证人员只需花费最少的努力是至关重要的。

为了减少验证的时间消耗,验证环境必须做成高度可配置型以及易复用型,本文详细描述了如何开发可配置和可复用型的验证平台组件,以及如何通过设计参数自动化地配置它们。在本文中该方法被称为是一种自适应的IP验证环境。

2.   参数化IP验证的挑战

当设计需要在多参数配置的环境中验证时,共享参数就成为一个挑战[2]。手动在验证环境中更新新的设计参数是一件很复杂的工作。其中包括了修改验平台的连接关系;添加或者减少驱动器(driver)、监视器(monitor)、记分板(scoreboard)的数量;以及调整功能覆盖率(function coverage)和断言(assertion)等等。

通常使用的方法是使用红(`ifdef)去区分不同的设计参数。典型地,一个设计拥有一组宏,但是当项目规模不断的增长时,这种方法对于验证平台的调试以及后续的维护就变得非常复杂。

在下一部分我们将会介绍一个自使用的IP验证环境专门去应对这个挑战。

3.   自适应参数化IP验证环境架构

本文中,参数化的IP设计是一种高级的微处理器总线,它连接了一组AXI,AHB,APB   的masters和slaves。端口的位宽和端口的协议、端口号、内部寄存器基址以及计数器初始值都可以被设计参数参数化控制。

如图1所示,这个自适应的IP验证环境包括了第三方IP的预处理、IP验证平台以及相对应IP模块的通用验证组件(UVC)。

图1-自适应IP验证环境


3.1        IP预处理(IP_PREPROCESS)

IP预处理机制需要将所有的IP设计参数都放入一个参数组中,之后这个组将会被预处理,为设计生成一个参数文件去使用,同时一个全局的ruby数组@@FEATURES也会被生成去给验证使用。本文主要关注的是验证这一部分:



这个全局的Ruby数组@@FEATURES存储着所有的IP设计参数,无论什么时候IP设计参数被改变,这个全局的Ruby数组在VCS仿真运行之前会自动地更新。3.2   IP 验证平台(IP_TESTBENCH)

IP 验证平台是由一个IP模块UVM组件(UVC)、一个Ruby主程序、一个绑定结合了模块的Ruby程序以及一个断言Ruby程序,其中这三个Ruby程序均是在VCS仿真之前执行的,并且自动地扑获IP设计参数。

(A)这个IP模块通用验证组件(UVC)的主要功能是通过生成带约束的随机事物去模拟一些行为场景,监视DUT的响应,确保DUT的功能工作正常,检查协议活动的有效性,并且收集覆盖率数据。这些内容将会在在第五部分详细描述。

(B)这个Ruby主程序遍历了上面所讲的那个全局的Ruby数组@@FEATURES,并且将里

面所有的IP设计参数都转换成一个SystemVerilog 类里面的属性---本文中ip组件的特性是实例化ip的特性,所有SV类中的属性储存着所有IP设计参数。代码如下所示,该UVC通过ip设计特性进行配置操作。



(C)绑定Ruby程序的模块绑定其作用是连接DUT模块和验证平台(testbench)。下面的代码部分描述了Synopsys SVT AXI slave接口实例的数目是被IP设计参数”axi slave”所控制的,AXI slave接口信号wdata和awaddr的连接使它能够过IP设计参数控制的:



本文使用了uvm_resource_db在一个顶层模块中进行接口实例的绑定:



之后UVM验证环境在动态的驱动器(driver)、监视器(monitor)类中通过使用虚接口(virtual interfaces)去访问静态接口[3],然后验证环境通过读取uvm_resource_db去检测取回绑定的接口实例:
      图2-通过接口绑定连接RTL和UVM验证环境


这种接口绑定能够被直接复用到芯片级(chip level),因为IP设计模块名称在IP级验证环境和SoC整个芯片级验证环境中是保持一致的。

   

(D)断言Ruby程序把IP设计参数传递给一种类型与设计模块功能相关的断言。这些断言通过IP设计说明书被创建,并且断言的属性在时许表达式中使用本地变量(local variables),因此它是自适应的。这些断言被放置在一个接口中,然后绑定到DUT模块。对于DUT模块可以被复用到SoC级和不同的项目,因此它们在垂直复用和水平复用都可以适用:



4. 自适应参数化IP模块通用验证组件(UVC)结构

IP_MODULE_UVC是从uvm_env扩展而来,其中包含了AMBA SVT VIPs,预测器(predictors)、计分板(scoreboards)、监视器(monitors)、IP模块通用验证组件配置对象(IP module UVC configuration object)、基本的事物序列(basic sequence)以及全局的虚的事物序列发生器(global virtual sequencer)。图3阐述了IP_MODULE_UVC。
图3-IP模块UVC结构


这个SystemVerilog特性的类-ip_component_features在4.2部分将会被被生成,并且它是被初始化在名为ip_features的IP模块UVC配置对象中。其中IP_MODULE_UVC中的每一个组件都可以通过IP设计参数进行配置和控制。

4.1   AMBA SVT VIPs

Synopsys AMBA SVT VIP 是一个通用验证组件其中包含了主代理(master agents) 和从代理(slave agents)、驱动器(drivers)、生成器(sequencers)、监视器(monitors)、配置对象(configuration objects)、协议检查器(protocol checker)、功能覆盖组(functional covergroups)、约束随机序列(constrained random sequences)以及事务包(transaction packets)。

(A)        实例化AXI、AHB以及APB SVT UVC

正如图2描述的那样,为了让环境中的agents自动地得到IP设计参数,本文中在IP_MODULE_UVC所创建的AXI、AHB以及APB SVT UVC动态数组如下:



(B)        配置AXI、AHB以及APB SVT UVC

AMBA SVT UVC配置类[4]在模块UVC配置对象中实例化并且被连接到同样的位置去捕获IP设计参数,在UVM配置机制中[5],AXI SVT UVC 以及APB SVT UVC 是通过IP设计参数在UVM build phase阶段被配置的。



4.2        自适应预测器以及计分板(self-adapting predictor and scoreboard)

预测器从AMBA UVC TLM 端口接受了一个真实的事务包,经过处理之后在通过TML 端口将被预测的事物发送给计分板,让计分板去检查事物的正确性。

正如图3所示,每一个slave都有一个计分板,预测器TML端口编号和计分板编号对于IP设计参数--ip_feature来说是自适应的,它们都是动态数组数据结构。当slave的数目减少时,计分板数目以及TML端口数目会自动减少;当slaves数目增加时,计分板数目以及TMl端口数目会自动地增加。
图4-预测器和计分板结构
4.3        自适应基本事物序列(self-adapting basic sequence)

这些基本事物序列会提供激励源,本文中所提及的解决方案使用IP设计参数去控制事物序列的产生以及启动。

例如,当设计参数改变了一个AXI slave中的基址(base address)时,AXI地址激励会自动更新的。



4.4        自适应功能覆盖率(self-adapting functional coverage)

Synopsys 公司的AMBA SVT VIP 提供内部的AXI、AHB以及APB功能覆盖率;对于用户来说仅仅需要在VIP 卑职类中对它们做使能处理即可。

Synopsys 公司的AMBA SVT VIP对于IP设计自身的覆盖率也提供覆盖率回调操作。为了使用IP设计参数去控制功能覆盖率,本文延伸扩展了Synopsys公司的覆盖率回调类,在Synopsys覆盖率回调类中实例化ip_component_features,并且使用IP设计特性去配置覆盖点(cover point),因此覆盖点的自适应如下:



但是要在功能覆盖率中小心使用ip_feature,因为功能覆盖率应当一直来自于设计说明书(design spec),而不是直接来自于IP设计参数代码。

5.   复用自适应参数化IP验证环境

5.1        垂直复用(Veritical reuse)

垂直复用意味着复用是从IP级到SoC级。

(A)        AMBA SVT VIP 复用

AMBA SVT VIP是由驱动器代理(driver agent)、监视器(monitor)以及协议检查器(protocol checker)组成;在IP级,所有以上三部分都是工作在active模式下的。当AMBA SVT VIP 被复用到SoC级,驱动器代理可以被配置成passive模式去工作,意味着它就不能产生master 请求或者slave 响应激励去驱动RTL信号;监视器和协议检查器工作在active模式。

(B)        UVM事物序列复用(UVM sequence reuse)

至于事物序列,一般的事物序列是很难拿来复用的,因为它粘黏着接口协议;寄存器模型序列可以直接从IP级复用到SoC级,其中关键的一点是对于不同的协议去实现相应的寄存器适配器(register adapters)。

(C)         连接性复用(connection reuse)

自适应参数化IP验证环境在一下三个层面来处理连接性。

第一,如何把静态的RTL端口信号和动态的AMBA VIP连接起来?我们在静态的RTL世界里实例化真正的AMBA接口,在AMBA VIP中声明虚的AMBA接口,并且使用全局的uvm_resource_db去连接真实的AMBA 接口到虚的AMBA接口。如所示:
第二,如何直接从IP级到SoC级复用连接性?我们绑定了真实的接口实例到RTL模块,当IP RTL 被复用到SoC级时,模块通常在IP级和SoC级保持相同,因此连接性绑定可以直接从IP级到SoC级被复用;而且绑定方法从RTL代码分割了验证环境代码,我们可以得到干净整洁的RTL代码去用任何的EDA工具去检查。

第三,如何让连接性自适应端口信号的变化?正如第三部分的描述,当设计参数变化时,端口信号可以被改变过来。5.2        水平复用(Horizontal reuse)

水平复用意味着复用是从一个项目到另一个项目。

整个IP模块通用验证组件可以直接被复用到不同的项目,因为对于IP设计参数来说它是自适应的。
      图5-IP模块通用验证组件水平复用


然而,在一个新的项目中,用户可以扩展AMBA SVT VIP 内建的包,修改一些内容去适应新的项目需求。并且使用UVM工厂机制中的应用编程接口(API)set_type_override_by_type()或者set_inst_override_by_type()在仿真时候去替换旧的包。

6.   结果(result)

本文描述了一个使用AMBA VIP 的高可配置UVM验证环境。用这种方法,slaves个数、存储器寻址范围、地址和数据总线宽度以及端口名称都是IP设计参数,这些都可以在不同的项目中被修改。整个UVM验证环境对于那些IP设计参数的变化来说是自适应的。

因此,当IP设计参数改变时,仅仅只需要最小的精力投入就可以更新整个验证环境。模块通用验证组件(module UVC)通过新的参数直接自动化地创建正确合适的组件。预测器对于新的参数也是适应它自身的功能。测试平台的连接性自动化地增加或者删除端口。功能覆盖率和断言相对于新的IP设计参数来说也是自适应的。

整体来说整个UVM验证环境都是支持垂直复用和水平复用。

7.   结论(conclusions)

该方法改善了参数化IP验证效率,并且在UVM组件创建、UVM配置性、激烈序列约束、计分板、预测器、断言、功能覆盖组以及测试平台连接的灵活性。通过项目实施显示,当IP设计参数改变时,该方法减少了30%的额外资源需求。

谢谢你对路科验证的关注,也欢迎你分享和转发真正的技术价值,你的支持是我们保持前行的动力。


    关注 路科验证


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册