| |
验证是保证一个设计成功的关键,而给DUT有效的激励信号以覆盖其所有功能和自动响应检测又是验证的重中之重。验证面临的一个主要挑战就是花费太多时间在调试测试平台上,UVM(通用验证方法)拥有一个强大的测试平台架构,很有助于验证工作。
待验证的DUT
锁相环(PLL)是任何SoC设计的“心脏“,其应用范围从频率合成到消除时钟偏移,以及时钟数据恢复。在设计中,PLL基于一个数字结构,它提供了减少面积和功耗对线宽、低电压的技术节点。该设计的核心是一个反馈回路,如下图所示:
传统验证方法
传统方法中,每个不同的PLL都有一个独特的测试平台和指定的人来开发,维护和验证。图2示出了其验证框架:包括激励产生器,检查模块和测试用例。数字检查模块始终贯彻的检查和基于任务的检查,每个Verilog测试用例是针对DUT特定功能而给与的激励。
缺陷:
测试平台可重用性差
缺乏约束的随机验证
提出解决方案
UVM(通用验证方法)使用SystemVerilog结构,构建可重用和可扩展的测试平台架构,借助了覆盖驱动型验证(CDV)的设计,该设计结合自动测试生成,自检测试平台,和覆盖面指标来显著减少我们验证多个不同PLL的时间。
典型的基于UVM测试平台架构包括: Sequencer, Driver, Monitor, Scoreboard, Coverage collector等,读者可自己查阅UVM的基础知识。我们方案实现的最终直接成果就是这些UVM基础组件的代码实现。先介绍方案思路:
在我们的方法中,维护多个测试平台是由如图4所示的一个可配置UVM测试平台来代替,一个综合的基于UVM的验证环境要能够灵活地增加以case-by-case为基础的验证方法,这个agent由pll_base_driver,pll_base_monitor,和configuration object 组成,对于一个给定的PLL,它是由配置参数确定的,这大大减少了建立验证环境的时间。
我们可以通过在配置对象中改变测试平台参数或采用约束随机测试改变随机种子全面验证我们的设计。这使我们可以投入精力来编写费时、随机测试难以覆盖的case。覆盖监视器加入到该环境以衡量进展,识别没有行使的功能;一个公共的序列库,拥有综合的序列列表,用于激励所有的PLL IP;SystemVerilog的断言方法被用于对PLLs的广泛的时间检查。
上图UVM结构:
一个PLL Agent基本组成:driver, monitor and a common sequencer(UVM基础)。
config 用于配置自定义验证组件。
虚拟接口(Virtual interface)用于连接验证环境和DUT。
顶层模块包含DUT的实例和相应的接口。
通用序列库。
原文给出读者我们本文提到所有UVM组件的代码,也是实现方案的直接成果。因篇幅有限,只附上其中一个:
图9示出了被选择用于从所述命令行执行多个用户定义的测试:
总结
使用上述基于UVM方法中,为了验证四种不同的PLL。绝大多数的验证环境通过很小的精力就被重复使用和扩展,我们的方法减少了以下几个方面工作:
验证投入(effort)。
测试平台开发和调试时间。
验证资源
重点突破
单个共享的测试平台架构适用于所有PLL。
平台一次创建好后,扩展只需要较少精力。
我们的解决方案通过类似的设计/功能提供了一个统一的IP验证环境。
您可以在手机移动端同步关注订阅号“路科验证”。
如需转载请联系路科验证,并注明出处“路科验证”。