随着IC设计规模和复杂度的增大,验证IP对于验证团队提高效率的意义越来越重要。在传统的基于
hdl的验证平台中,验证工程师创建一个
verilog写的BFM验证IP,来模仿一个特定的总线协议,并在传统的验证环境中集成
BFM(
Bus Functional Model,总线功能模型)。而近些年来,UVM得到很大发展,越来越多的验证环境被UVM建造,UVM定义了UVM UVCS,它是一个可重用的UVM接口验证IP,和传统的Verilog BFM扮演相同的角色。新建一个iUVC需要时间,基于复用理念,遗留的Verilog BFM可以通过调用BFM的内置的API连接到UVM的驱动程序,从而将传统的Verilog BFM可以在UVM中复用。本文讨论了这样一个提案:定制的UVM UVC验证IP包装Verilog BFM。
一、验证要求和挑战
如图1所示,Master IP通过shared bus连接到不同的Slave IP,这些Master IP 和Slave IP是由别的团队开发和维护的,而我们要新开发一个Slave New IP,要有相同的总线接口。

在UVM独立验证中,我们遇到以下挑战:
- 没有可用的UVM验证IP
- 没有任何的Verilog BFM(具有模块化的功能和任务API)
- IP必须在UVM被充分验证,SoC级验证为时已晚
- 如果Master IP改变了总线时序,则Slave IP UVM验证环境必须同步跟进
二、提出解决方案
图4描绘了我们一般IP UVM独立的测试平台架构,这是一个可配置的分层结构, UVM interface UVCs 被绑定到DUV(design under verification ),并被集成到模块UVC组件。在模块UVC里,有其它UVM组件,实现了预测,检查和覆盖面的工作,比如模块 monitor,模块 scoreboard等。我们期望创建一个纯粹的UVM iUVC验证IP,与DUT直接交互。
在图5中,我们提出定制的UVM UVC有以下主要特点:
- 它复用和包装了Verilog BFM,使其对用户不可见
- 我们建立一个内部upper总线接口和一个验证IP接口(这是为用户挂钩到DUV)
- 在SV接口定义了一个抽象类,他们协助创建参数化的UVM组件实例,并提供API
- UVM driver是UVM一个组件,通过upper总线接口驱动 sequence item .
- adapter是一个UVM组件,它像一个桥传递总线数据。
- agent monitor 监视着upper bus接口,并通过uvm_event将总线数据发送回sequence.
- iUVC's monitor监视验证IP总线接口,并将transaction item传递给用户。
- 有一个总线协议断言库,并写在断言界面,挂钩到DUV。
- 它具有内置的序列库来验证验证IP与DUV之间的基本握手。
- 内置的功能覆盖将覆盖验证IP协议。
- 只有 UVM driver和 adapter 可进行参数化配置。
- 为了避免 Verilog BFM 编译冲突,我们定义宏将其排除在 SoC 编译之外。
- 它提供了内置的调试日志记录级别的控制设施。

原文中给出了 vip_driver , vip_adapter 以及 slave_VIP 相关类的详尽代码,因篇幅有限,不一一列举。我们使用uvm_config_db API来获取adapter_api和driver_api的句柄,图10显示了绑定接口,并使用uvm_config_db传承Verilog BFM/DUV和UVM组件的虚拟接口。
扩展到SOC
在IP层面,我们创建了定制UVM 验证IP来充分验证Slave New IP,当我们交付slave IP给SOC层次进行芯片级验证时,当然希望其UVM环境也能尽可能的被复用。如图12所示,在SoC验证的早期阶段,集成和验证Master IP可能已经完成,而slave IP还没被集成进来,我们又希望尽可能早地验证 slave IP 的集成和基本功能,基于这一需求, master IP设计可以提供虚拟存根,使输出信号为弱的驱动强度,以避免多驱动的情况。在SOC层次,我们复用IP层次的sequences和定制的UVM验证IP,替代Master IP。当 master IP 初步验证可用于基本的集成和功能,它可以与slave IP握手时,我们可以复用早期阶段开发的定制UVM验证IP,并配置它。通过这种方式,验证IP(VIP)可以帮助收集功能覆盖率,通过断言检查总线协议时序。
三、结论
应我们的验证要求,我们使用上述方法来创建定制的UVM验证IP。利用现有的一般iUVC模板和重用Verilog BFM ,与从头搭建相比,可以显著减少付出精力,以下是付出精力对照:
- “将master RTL解耦到upper/lower BFM。”取决于RTL设计者
- “上层UVC”,一个人一周内做完。
- “下层UVC适配器”,一个人两天内做完。
- “BFM任务接口”,一个人两天内做完。
- 这是完全不可预测的,因为它取决于总线时序的复杂性,当master RTL时序发生变化时,将引入升级的问题。




