验证环境并不是全部由verifier编写的,可以用到很多已经编写好的,复用程度高的验证模板,例如某些agent,而这些模板就是VIP。
1. 什么是VIP
VIP可用于植入用户的验证环境中,用于协议标准和接口的连接和检查。
这些VIP除了根据协议等的驱动driver和sequence外,还包括相应的覆盖率模型、dut软件模型、说明文档等。
例如高级外围总线(Advanced Peripheral Bus, APB)是唯一主多从的设备总线标准。如果在项目中涉及到了APB接口,就可以使用APB的VIP。 APB的VIP以apb_master_agent和apb_slave_agent为核心,包括apb_interface、apb_master_sequencer和apb_slave_sequencer等多个轮子 根据agent是master还是slave在VIP选择agent框架,开发者只需在VIP中填写相应的项目相关的功能代码,然后再集成到自己的验证环境中
大型项目中,涉及到众多协议和标准,所以会涉及到很多VIP,还涉及C++等跨平台联合仿真。
当然,VIP一般价格昂贵,但一般比设计IP便宜。
1.1. 应用场景
● 验证设计IP
就是IC设计者会通过购买稳定VIP来对自己的设计进行验证。
当然也可以自己开发VIP
● 集成设计IP
设计IP的参数众多,不同的参数配置会产生不同的性能、不同的功能。
所以需要集成人员,将多个设计IP进行连接、配置、调度,那么对应的VIP也要进行继承
个人理解,这就非常类似于,一个是纯做设计IP的,一个是使用设计出来的IP的。
● 子系统、SoC系统开发者
设计的IP向上层集成时,也涉及到VIP的使用和集成,例如使用什么样的sequence进行定向测试
1.2. 供应商
最典型的三大EDA公司,Cadence、Synopsys、MentorGraphics(已被SIEMENS收购)
解读:Mentor被西门子收购,EDA这个市场究竟怎么样了?
2. VIP的特点和优势
● 不断更新的标准
什么PCIe、DDR、USB、AMBA等各种协议呀,经常不断更新。
为了使硬件之间能够相互兼容,设计IP就要不断修正、完善使自己的IP兼容新的标准,相应地验证IP也要不断迭代更新。
而有了VIP之后,集成人员和验证人员就不需要花费力气去兼容协议,而将重点放在功能上去即可。
● 虚拟dut
就是说,如果用硬件模型仿真,可能会耗时巨大。VIP提供的一些用SystemC、Systemverilog等软件模拟的硬件,可加快仿真速度
● 自己开发VIP
可通过购买VIP,来促进各厂家自己开发VIP。
3. 如何使用VIP
3.1. 选择
在选择VIP时,需要考虑一下几个因素
● 仿真器(VCS、questasim等等)与VIP是否兼容
● 设计IP的协议,与VIP的可用协议是否兼容
● VIP的市场评价、上手难度和售后
3.2. 集成
模块级别
module级别的验证其实就是之前一直讲的验证框架,只不过将验证框架的内容替换成VIP
如下图所示,浅绿色的部分就是VIP的内容
子系统级别
对于多个module集成之后的子系统而言,可将VIP嵌入系统中,替换子系统中的某些控制module或响应module,进行含有driver、sequencer的UVM_ACTIVE测试。
如果驱动测试没问题,就可以接上真正的硬件模块了,然后将VIP中相应的agent设定为UVM_PASSIVE,只保留monitor监测就好。
如下图所示子系统,对于下面的摇杆还是右下角的屏幕,都可设定相应的Slave_agent看看响应如何。可以看到模块众多,因此需要设定很多很多的VIP
SoC级别
等到了系统级别,集成程度更高,就会涉及到系统级别的VIP,如下图有DDR VIP、PCIe VIP等等,模拟数据传输。
从图中也可以看到,系统中某些Process、Memory等硬件,并不是真的硬件而是VIP提供的。
这是一种虚拟的处理器,可通过SystemC、SystemVerilog实现这样的核,这是为了加快仿真速度。
需要说明的是,UVM在模块级验证优势明显,但对于子系统级、芯片级UVM则还真不如C用的多,这些VIP越来越多的出现用C写的测试平台和用例
所以就提出了便携式激励标准(Portable Stimulus Standard,PSS)进行了统一。
3.3. 跨平台混合仿真
一般仿真都在仿真器上面搞是吧,但如果在大型或超大型的SoC系统仿真时,就容易耗时很长,可能一天也就调一次,其他时间全在跑仿真。
怎么办?于是就提出了,验证平台和测试用例在仿真器、emulator和FPGA等平台之间跨接的技术。
但是这样的技术有个问题就是,仿真器与硬件FPGA、emulator之间的通信问题,接口是商业且未开源,还需进一步探索。
4. VIP的开发和发布
对于经常需要实现的总线和功能模块,可以开发相应的验证VIP
例如APB、AHB等总线标准,其实就是master和slave之间的时序交互,所以一般包含driver、monitor、sequencer、sequence、agent,还会有config
有时甚至还会搞个env
看图
4.1. 开发
过程如下
● 功能特性提取,覆盖率特性及映射
即明确该VIP是什么样的功能、时序,并创建相应的覆盖率,并映射到变量
● VIP架构,driver、sequencer、monitor等基本组件的实现,可实现基本的数据传输
trans的产生、发送、检测、配置等基本功能的实现
● 在scoreboard实现数据比对功能,在monitor和interface实现assertion、function coverage的收集
然后才是refmod、scoreboard的数据正确性比对,一般在monitor和interface进行断言、覆盖率检查
● 创建更多的sequence以不断提高功能覆盖率,直到100%
●回归测试和总结报告
4.2. 发布
发布内容包括
● 源代码
可选择加密,只保留接口task和function
● 特性列表和覆盖率列表
要与标准协议文档的特性相对应
● 文档
包括VIP结构、设计、用户指南、安装和覆盖率报告
●运行环境
回归仿真等步骤
|