验证平台中配置的艺术之配置分类
所有的验证平台(即使是最简单的验证平台)都需要一些配置参数用于设置验证环境中的功能(feature)。同时在验证环境中还需要提供一种方式允许测试用例的编写者override这些默认配置参数,用于测试某些定向的场景。
这些配置参数可用于配置DUT的参数、验证平台的拓扑结构,验证组件参数、测试用例参数等。合理地规划这些参数将有利于验证平台的垂直和横向复用,并提供较好的可控性和随机性。
本文将这些配置参数分为以下几类:
(1) DUT 配置
(2)验证组件配置
(3)验证环境配置
(4)测试用例配置
(1) DUT 配置
一般复杂的DUT设计为了复用都会具有大量的参数配置。这些配置可能通过软件配置寄存器、verilog parameters、宏定义或者DUT顶层连线控制。通常DUT配置在仿真开始时会进行严格约束,因为在同一个项目中DUT配置一般是固定的,例如总线位宽不会动态变化,而且不同的DUT配置就意味着不同的测试对象。
(2) 验证组件配置
验证组件通常包括各种参数,用于配置:
1、工作模式,maskter或者slave,以控制激励和响应的产生。
2、不同发送包之间的延迟。
3、包内容域相关的配置,例如请求类型,请求数量等
(3) 验证环境配置
一般一个接口会有一个相应的agent,这些agent可以在不同的模块和项目之间复用。
对于模块A,接口a可能是master,对于模块B,接口a可能就是slave。可以在模块A和B各自的验证环境中配置这些agent的模式,使能相应的monitor和driver(在UVM中这个参数值就是passive/active)。验证环境中还可以配置这些agent的数量,例如不同的核心数就可能会有不同数量的agent。同DUT配置类似,验证环境的相关配置一般在最初build时就已经固定下来了。
(4) 测试用例配置
测试用例配置用于控制激励类型的发送,也可以用于override验证组件的行为参数配置。另外,如果有特别需要,还有测试过程中间过程的一些参数配置。
最后,合理地、层次化地进行验证平台配置参数的管理,更加有利于验证环境的维护、测试用例的新增。复用性和复杂度控制在验证环境简单时可能没那么重要,随着测试需求的增多,这是个一劳永逸,提高工作效率的事情。