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测试场景也可以在上层直接调用。