UVM背景分享
UVM 起源与 UVM演进一、引子三分天下到一统江湖在UVM出现之前芯片验证方法学领域是OVM、VMM、eRM三足鼎立的局面。Cadence与Mentor Graphics于2007年联手开发了OVMOpen Verification Methodology并于2008年1月首次发布。OVM很大程度上基于Verisity Design在2001年为e验证语言开发的eRMe Reuse Methodology。与此同时Synopsys力推VMMVerification Methodology Manual三大EDA厂商各有一套体系验证IPVIP的复用和跨平台移植极为困难。转折发生在2009年12月Accellera技术小组委员会投票决定建立UVM并确定以OVM-2.1.1为基础。UVM几乎完全继承了OVM同时吸纳了VMM中的寄存器解决方案RALRegister Abstraction Layer及其他优秀实现。2011年2月21日Accellera正式批准UVM 1.0标准标志着验证方法学从“三分天下”走向“一统江湖”。三大EDA厂商——Cadence、Synopsys、Mentor Graphics——共同站到了同一面旗帜下。2017年UVM被IEEE正式收编为IEEE 1800.2标准。二、核心概念版本演进时间线UVM 1.02011年2月首个标准化版本。包含参考指南、SystemVerilog基类库参考实现和用户指南。主要新特性包括Phasing机制、寄存器包源自VMM技术、TLM-2.0支持、Resource Manager配置机制的升级、回调、消息捕获和 objection 机制。UVM 1.12011年11月同年发布的迭代版本。重点是支持OVM/VMM互操作帮助用户整合存量代码和来自不同方法学的VIP。此后Accellera陆续发布了1.1a、1.1b、1.1c和1.1d等小版本。UVM 1.22014年6月目前工业界最主流的版本。消息机制变为面向对象、序列可自动raise/drop objection、寄存器层支持控制burst内事务顺序并修复了大量bug。但1.2引入了向后不兼容的改动Accellera提供了迁移脚本辅助升级。UVM 1.2于2015年7月提交给IEEE P1800.2工作组进行标准化。IEEE 1800.2-20172017年IEEE正式批准的UVM标准。该标准以UVM 1.2为起点对规范进行了清理和整理。需要注意的是IEEE发布的是参考手册规范文档不发布源代码——源代码实现仍由Accellera UVM工作组维护。IEEE 1800.2与UVM 1.2“实质相同只是存在少量向后不兼容的改动”。三、关键代码UVM最小环境一个最基本的UVM测试环境只需要三行核心代码// 导入UVM包 import uvm_pkg::*; // 包含UVM宏定义 include uvm_macros.svh // 在顶层module中启动测试 module top; initial begin run_test(base_test); end endmoduleimport uvm_pkg::*导入UVM的所有类定义include uvm_macros.svh则引入UVM的各种宏如uvm_component_utils、uvm_info等。run_test()是UVM的入口函数参数指定要运行的测试用例名称。四、实战场景版本锁定与VIP配套在实际项目中锁定UVM版本是工程纪律不是技术问题。团队选型时通常固定一个UVM版本工业界绝大多数锁定UVM 1.2不会在项目中途随意升级。第三方vendor库尤其是Synopsys、Cadence、Mentor的商用VIP必须与项目使用的UVM版本严格配套。混用UVM 1.1和1.2的组件“充满未知问题”Accellera官方建议迁移是“all or nothing”的。使用Synopsys VIP时需确认VIP版本明确声明支持UVM 1.2。五、易踩的五个坑① 混用UVM 1.1/1.2头文件。最常见的问题——编译时用了1.2的uvm_pkg却包含了1.1的uvm_macros.svh导致莫名其妙的编译错误。② 错误引用deprecated接口。UVM 1.2中部分API已被标记为deprecated例如uvm_sequence_base::starting_phase被set_starting_phase/get_starting_phase取代。虽然deprecated接口暂时保留但强烈建议迁移到新API。③uvm_config_db在1.2才稳定。UVM 1.2彻底弃用了老旧的set_config_*系列函数强制使用uvm_config_db机制。从1.1升级到1.2时配置管理API的迁移是最大的工作量之一。④ 不指定UVM_NO_RELNOTES。每次仿真启动时UVM会打印冗长的版本信息和发布说明在大量回归测试中这些日志会严重污染输出。⑤ 仿真器版本过老不支持UVM 1.2。较老版本的VCS、Questa、Xcelium可能只内置了UVM 1.1d。使用UVM 1.2需要仿真器版本达标——例如VCS需2016.06-SP1以上Questa需10.6c以上Xcelium 20.09默认已支持UVM 1.2。