0%

SUB_SYSTEM验证环境及垂直复用


1 sub_system环境结构

UVM验证的核心思想是复用,分为水平复用和垂直复用,以及跨平台复用。针对sub_system的验证环境,需要做到垂直复用。

可复用的sub_system环境结构如图所示:

basetest中主要包括base_test_cfg,reg_model,ddr_mem和env四个部分。

base_test_cfg作为整个testcase的最顶层的配置,其内部包含了env_cfg和一些配置变量

amba_vip中涉及到ddr_mem的,ddr_mem在basetest中创建,并将发送到env_cfg中,多层环境中的ddr_mem需要在各自的env中接受上层的ddr_mem并对下层env的ddr_mem做相应的连接

环境的env中有以下几个部分:

  • virtual sequencer:所有sequencer的句柄都在virtual sequencer中
  • reference model:参考模型
  • scoreboard:用于比较参考模型和DUT输出的数据
  • 各个agent:分别用于发送和收集transaction
  • amba env:amba vip的顶层环境包括axi,ahb,apb,其配置在env_cfg中例化
  • 各个子环境的env:例化的ip env或者包多个ip env的sub sys env。ip env嵌套在sub sys env里使用
  • env cfg:严格来说不属于env的组件,它是环境的配置文件。包含各个agent的配置以及amba vip的配置。env cfg会被virtual sequencer,reference model,scoreboard所共用
  • virtual sequence严格来说不属于env的组件,它是在basetest中启动在virtual sequencer上的顶层sequence,在其中需要根据需求在对应的sequencer上启动所需的sequence(包括agent seuqence和amba vip sequence)

reg_model: 寄存器模型总是在basetest中创建,在各自的env中通过先接收上层的寄存器模型的句柄,并将对应的子环境的寄存器模型句柄连接到子环境的env_cfg中,实现多层级的环境里寄存器模型的连接,达到图上半部分的效果。具体的连接流程参考图的下半部分。


2 sub_system环境目录

sub_system验证环境与ip验证环境保持相同的目录结构。


3 垂直复用

垂直复用可以复用 agent,env,configuration,sequence。需要注意以下几点:

  • agent需要区分passive模式和active模式
  • env需要区分passive模式和active模式
  • vip需要区分passive模式和active模式
  • sequence需要层次化,便于上层环境使用
  • 寄存器模型需要具有统一结构,在上层指定address map

3.1 Active组件

具有driver,sequencer,monitor,scoreboard,coverage,stimulus。

3.2 Passive组件

仅包含monitor,scoreboard,coverage。

3.3 Active/Passive指导

  • env需要考虑active与passive,通过cfg可配置
  • agent需要考虑active与passive,通过cfg可配置
  • scoreboard不能与active组件相连接
  • scoreboard要能够控制是否结束测试,通过cfg可配置
  • 仅在passive组件中做功能检查
  • 仅在passive组件中收集覆盖率
  • 仅在passive组件中打印重要信息
  • 仅在passive组件中更新配置,不要控制sequence,不要进行寄存器读写操作
  • 在passive模式中,将warning转换成error
  • 不要在passive组件中结束测试 ,仅在顶层场景中决定何时结束测试

3.4 Passive Shadow

基于已有的ip环境,需要将active与passive模式分开。修改ip环境后,使用passvie shadow技术来确认passive模式工作正常。

  • 基于原有IP环境,额外例化一个passive的env
  • 在active env正常工作时,passive env也要求能够正常工作

3.5 垂直复用原则

  • 在env中集成所有子组件,在test中仅例化env
  • 使用层次化的配置,cfg由env逐层向下传递
  • 使用层次化的接口,interface由顶层逐层向下传递
  • 使用prefix,避免命名冲突
  • 使用单独的class来完成coverage
  • 控制信息打印级别,避免子模块中过多的冗余信息

4 总结

基于特定框架的Agent,Env和Sequence结构,在IP和子系统之间,能够复用passive的agent和env,同时层次化的sequence测试场景也可以在上层直接调用。