验证的概述

    为什么要验证(Verification)?在从定SPEC到流片,中间每一步都会出BUG,经可能的找出设计中的bug,IC设计中有70%的工作量在验证上,在SoC设计中至关重要。

    什么是验证?验证是确保设计和预定的设计期望一致的过程,设计期望可以说是Spec,通常是通过一个或者多个设计规范来定义的。

    不同阶段有不同形式验证:RTL级的功能验证,主要关注设计的行为(feature),又可分为IP 验证(关注IP的功能,寄存器等细节)和SoC验证(关注IP的互联,clock& reset,低功耗,通路等等);门级验证,是将RTL综合成网表后进行的仿真,主要是为了保证综合后的代码正确性;形式验证(等效性检查,formal),通过formal工具检查RTL和综合后网表的一致性;时序验证(网表+SDF),也就是通常说的后仿,signoff,是为了验证设计能否在特性的频率上运行。

    怎么去验证?施加正确的激励,检查结果是否与预期一致,基于cycle精度的仿真。在传统的功能验证中,把用于测试的DUT的环境统称为验证平台。TB首先产生激励,然后将激励驱动到DUT中,最后检查DUTd输出结果。产生激励的方式有很多,如果是提供的确定输入,这种称为直接测试,如果是随机生成的激励,这种称为随机测试。输出结果检查可以查看波形,或将结果输出到文件再用脚本进行处理,或在仿真的过程中及时比较。仿真精度一般分为cycle base,transaction base,event base,这三者精度越来越低,速度越来越快。系统建模的时候仿真精度一般比较低。

    近几年有一个比较火的验证方法学,叫formal verification。对某些信号(e.g clk, rstn)加约束,其他值做穷举,通过穷举的结果和我们定义的Properties进行对比,来做的一种验证。这种非常适合控制逻辑的验证,DMA, CPU,或者带状态机的设计。

    Emulation是基于FPGA 阵列(也有基于CPU阵列的,都是ASIC电路,类似FPGA,带有debug功能)的仿真加速器,Cadence的叫PXP,Synopsys的叫Zebu。仿真速度比较快,这里面仿真瓶颈在于交互。解决方法之一,在communication channel两侧加Proxy Model和BFM,使每一次交互打包测试数据,降低交互次数,方法有很多,其他有待继续了解。

    主要的高级抽象验证语言:e语言(面向方面的语言AOP),open vera,system C,system Verilog(面向对象)。

    验证方法学的组成部分:1.断言,TLM,验证语言。2.如何构建统一的验证平台。3.如何进行验证环境和测试用例的重用。3.如何产生随机/直接的激励。4.以coverage为导向的验证。

    TLM(Transaction Level Modeling)源于系统建模,验证中用于高层次的抽象模拟,TB中的数据传输一般基于Transaction。

    根据TB的功能进行划分,减少耦合,一般调用TLM中的通用port,这是层次化的验证平台。提高重用性,减少验证工作,提高验证效率。可以分为Driver/Monitor/Generator/Scoreboard/RM等部分。

    VIP(Verification IP)针对特定设计/标准提供的验证total solution包,一般包含从激励产生,driver, monitor, RM, scoreboard, coverage等。一般像DDR3,PCI-e,USB,WIFI等等,得用VIP,使用其开放的接口去做验证,减少验周期,提高验证质量。

    验证的流程。Verification input(Design SPEC, Design RTL)

                   -->Verification output(Verification/Test Plan, Verification Report, TestBench/Tests, Coverage report)

                   -->Co-work member(Verification leader/Designer/Other Verification engineer)

                   -->Tools/Working encironment(Verificaton language:SV/UVM, Simulation Tools:VCS/NC, Debug tools:Verdi/Simvision, Coverage tools:Verdi/IMC)

     验证流程中的调试和回归,指和designer一起分析RTL/TB中的错误,对RTL/TB进行修改,对所有的测试用例进行回归测试,分析coverage,增加测试用例,生成coverage报告,完成验证。

posted @ 2018-12-09 13:19  yiwenbo  阅读(2654)  评论(0编辑  收藏  举报