您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数字IC设计验证平台的搭建.
数字IC验证流程一、数字IC验证流程•验证的流程并行于设计流程•验证工程师阅读硬件规范并拟定验证计划,然后依照计划创建测试来检查RTL代码是否准确实现了所有特性。•1.1制定验证计划:验证计划是和硬件规范紧密联系在一起的,它描述了需要验证什么样的特性,以及采用哪些技术。•验证技术可能包含有定向或随机的测试、断言、软硬件协同验证、硬件仿真、形式验证(formality工具比较RTL与网表是否一致),以及对验证IP的使用。1.1验证计划的制定•制定验证计划分为三部分:制定功能验证需求书、指定验证平台的抽象层次、激励的产生和结果检查方案。•1.1.1功能验证需求书的内容是确认设计的哪些功能是需要被验证的,它主要是测试用例(testcase)和功能点(testpoint)的一个列表,构成了整个验证计划的基础。•基于覆盖率驱动的验证环境中功能覆盖率是功能测试完备程度的指标。功能覆盖率就是对功能点的覆盖。1.1验证计划的制定•1.1.2制定验证平台的抽象层次:验证平台搭建优先考虑制定验证平台的抽象层次,高层次的抽象建模可以让平台中低层次的功能自动化,提高验证平台的效率。•1.1.3激励的产生和检查方案:有四种激励产生器:基元产生器、场景产生器、多流产生器和基于状态的产生器。这四种激励产生器均是自动化生成激励,扩展基类即可实现。•基元产生器用于生成相互独立的事务,事务之中的数据变量是相互无关的。场景发生器生成的是一个数据或事务描述符的序列。多流发生器即多个数据流的发生器。基于状态的发生器是使随机化生成过程依赖于外部状态信息。1.1验证计划的制定•检查方案:一般公司均采用计分板(scoreboard)检查机制。•Scoreboard的工作原理:DUT产生的响应input_stream压栈到queue1中,expect_stream为DUT的期望响应,expect_stream压栈到queue2中,然后将两个队列弹栈进行数据比对,同时scoreboard在仿真过程中report自检查的统计结果。1.2搭建验证平台•1.2.1搭建验证平台的方法:搭建模块级验证平台时,信号层、被测设计(DUT)和验证环境(programtest)必须在顶层模块实例化。1.2搭建验证平台•1.2.2搭建验证平台的注意点:1.VIP的验证组件的使用可以大大缩短平台搭建的开发周期。2.sub_env组件的使用,实现模块级到子系统级的复用,提高平台的可重用性。3.个性化代码。由callback实现,使用回调方法来检测流过事务处理器的数据流,利用回调(callback)插入异常(erroinjection)和收集功能覆盖率。4.在搭建模块级验证平台时,使用好的代码风格易实现模块级代码的复用。5.验证平台搭建好后,跟RTL代码一样,是一个不断完善的过程。在验证的过程中不断完善自己的平台,使其方便、准确的验证我们的项目。1.3回归测试与覆盖率收敛•全部测试用例被成功运行后,验证就进入回归测试和覆盖率收敛阶段。•回归测试要求能够周期的批处理运行、测试用例必须能够容易得到重现、成功与失败能够自动检测。•覆盖率显示出设计被测试的程度,是验证收敛的重要标准。•所有的测试应该在每天或者每周做回归而且周期性的运行。设计人员或者验证工程师应该查看覆盖率,从而修改或者添加更多的测试用例,从而尽可能达到100%。二、VMM分层次验证平台•VMM是IC设计领域的一种高级验证方法学,主要由ARM和synopsys公司的设计验证领域的专家共同设计,用于开发先进的验证环境,已成为当前业内公认的验证方法标准。•VMM验证方法学的基础是systemverilog语言。Systemverilog是一种由verilog发展过来的硬件描述、硬件验证统一语言,前者是2005年版verilog的扩展,而后者的功能验证特性以面向对象程序设计技术为基础。VMM所有的方法学基础来自于systemverilog,并吸收了C语言的一些先进思想。2.1VMM验证方法学的特点•1.受约束的随机激励•2.覆盖率驱动•3.使用事务处理器的分层测试平台•4.对所用测试用例通用的测试平台•5.独立于测试平台之外的个性化代码•建立VMM风格的测试平台所需要的时间要比传统的定向测试平台多得多,但对于验证大规模的电路来说,VMM验证平台要比传统的定向测试平台功能验证的齐备性要高得多,大大提高流片的成功率,并且平台的可重用性在后期的验证工作中将发挥节约测试时间和人力资源的功效。2.2基于事务的验证环境•事务(Transaction)是指验证平台与DUT之间通过设计的特定接口(interface)进行的高层次的数据或者控制信号的传输。接口包含了连接、同步、甚至两个或者更多块之间的通信功能,它们连接了设计块和测试平台。•基于事务的验证技术是对底层信号的封装,这样验证人员可以关注工程中的事务级验证,而不是过分关注底层的逻辑和时序的实现。因此是在对更高抽象级别上对系统硬件的建模,在接口组件上交换数据或执行事件。2.2.1VMM分层次验证平台•VMM验证方法学是一种基于事务的层次化验证方法学。层次化是把验证的步骤分层进行,把验证工作提高到更高的抽象层次,即事务层。•VMM验证平台分为五层,每一层完成独立的功能,层与层之间通过接口相互连接。2.2.1VMM分层次验证平台2.2.1VMM分层次验证平台•测试层即测试用例,是顶层模块,控制着整个环境的运行;设定约束使激励产生器生成相应的命令操作和数据;定义新的随机场景,同步不同的事务并创建直接测试用例。•场景层即产生器(generator),产生应用于功能层数据和事务描述符。产生器根据指定的约束和随机场景来生成相应的命令操作和数据。带约束的随机测试在此层引入。测试场景是一系列随机的有着某种关联的事务,每种测试场景代表着一种独立的事务来针对一个特殊的边界功能。•功能层是对DUT功能验证的核心部件。功能层从场景层接收到数据和事务描述符,事务描述符主要是选择事务处理的类型,例如是读操作还是写操作。接收的数据一般是对DUT施加的激励,分为DUT的配置信息和DUT的交换数据。此外,功能层还包含比较器和功能覆盖模块,比较器负责检查DUT的功能是否满足设计规范,功能覆盖模块用于统计和记录DUT的功能覆盖情况。2.2.1VMM分层次验证平台•命令层主要包含驱动器和监视器这两种事务处理器。驱动器从通道接收到功能层传递下来的事务,将事务激励转化为信号级激励信号,通过接口对DUT进行驱动。驱动器中的事务被定义为基于接口的最小数据传输或命令操作,比如寄存器的读写、发送包数据等。监视器检测DUT的各个引脚信号的变化,将引脚信号所表征的信息转换为事务,通过事务通道反馈给验证平台的高层模块。•最底层为信号层,完成验证平台与DUT的引脚连接。该层提供的信号可以被上层直接访问,给平台带来了极大的灵活性。信号层是用systemverilog编写的接口,在接口中定义了信号的同步或异步时序关系,对应于DUT的引脚信号的时序。一旦DUT的引脚发生了变化只需要修改systemverilog定义的信号,使得验证工程师的精力可以集中在更高的抽象层次上。•以事务级的角度看VMM验证环境的基础架构,可以看到从测试用例到最后BFM(总线功能模型)的处理,都是对事务的处理。2.2.1VMM分层次验证平台•BFM(busfunctionmodel)的作用是把底层总线的时序封装起来,向上层提供一个统一的任务接口,使上层不用关心底层的实现细节,而专注于testcase的设计。这一点同c++的面向对象的概念很类似,在c++里,对象相当于命令或调用,而对象的成员函数实现具体细节,外部无需关心它的内部细节。2.2.2VMM数据与事务•数据与事务就像整个VMM验证平台的细胞,它存在于验证环境中的每个组件。VMM的场景层(generator)用于生成验证环境的数据和事务描述符,而VMM的其他验证组件均是对事务进行处理的处理器(除测试层和信号层外)。•Synopsys公司应用systemverilog的继承(extends)语言特点提出基类概念,基类是Synopsys编写的一个模型,用户只需根据自己项目要求扩展基类就能生成自己的验证模型。Vmm_data和Vmm_xactor分别是数据与事务的生成和处理的基类。•Vmm_data基类是验证平台中所有事务描述以及数据建模的基础。这个类提供的一些属性和方法专门用于生成数据包和事务描述符。Vmm_xactor基类被用作处理所有事务的基础,包括总线功能模型,监视器和发生器。它提供一套标准的控制机制,作为所有事务控制的基础。2.2.2VMM数据与事务•Vmm_data和vmm_xactor两个基类基本构成了VMM的场景层、功能层和命令层的验证组件,而继承的方法,又可以方便的定制用户需要的数据和事务处理器模型,因此,VMM验证平台非常容易搭建。2.2.3VMM事务层接口•数据与事务生成于激励生成器并被不同的事务处理器处理。VMM规定两个事务处理器之间,必须使用通道来进行事务交易。•Vmm_channel是Synopsys推出的通道模板类。Channel传输的是数据与事务,而Vmm_data是对数据与事务的生成模板类,所以vmm_channel应该是vmm_data扩展类的通道。•Vmm_channel::put将新生成的数据与事务描述符添加到通道。Vmm_channel::get从通道中获得新生成的数据与事务描述符。Vmm_channel的函数还有很多,其他的可参考VMM验证方法学手册。2.2.4事务处理器的协调工作•事务层的接口使VMM验证平台的各组件在纵向上实现了连接,但是并没有实现各组件横向上的同步执行。VMM提供了通知(notify)接口实现同步执行。•Vmm_notify是VMM提供的一个基类。Vmm_notify类实现进行通知服务的接口。该通知服务可为并发线程或者事务提供同步机制。Vmm_notify有三种通知同步模式,ONE_SHOT、BLAST、ON_OFF。•vmm_notify::ONE_SHOT事件一旦触发,解除以前等待的线程。vmm_notify::BLAST在通知发出的同一个时阶,所有等待通知发出的线程同时得到通知。本模式可以消除某种形式的竞争条件。Vmm_notify::ON_OFF通知是电平敏感的。显式的复位后,才能解除通知的有效。将不再继续等待仍然有效的通知线程。本模式可消除某种形式的竞争条件。2.3基于覆盖率驱动的验证环境•覆盖率驱动验证是一个基于仿真的验证方法,专门被开发用来解决当前功能验证项目面临的效率和完备性挑战。Synopsys公司提供的VCS工具能够生成覆盖率列表,分析覆盖率列表,验证工程师可在最短的时间内找到哪些功能已经通过测试,哪些功能还没有被测试到,从而保证验证的完备性。•覆盖率可分为:代码覆盖率、功能覆盖率、漏洞率和断言覆盖率。•代码覆盖告诉验证者在一个特定仿真运行中,所有RTL设计描述代码是否被执行。代码覆盖率只说明了RTL代码被运行过,并不能说明RTL功能被执行了。•功能覆盖率则能很清楚的告诉我们哪些功能点被执行过了。•漏洞率是衡量覆盖率的一个间接的方式,漏洞率与项目所处的阶段、近期设计上的变化、正在集成的模块、人事上的变动等等有关,每次比率下跌时,就应该寻找各种不同的方法去测试各种边界情况。2.3基于覆盖率驱动的验证环境•断言是用于一次性地或在一段时间内核对两个设计信号间的关系的声明性代码。断言最常用于查找错误,例如两个信号是否应该互斥或者请求是否被许可等。一旦检测到问题,仿真立即停止。断言也可用于检查仲裁算法、各种FIFO以及其他硬件。以上这些情况会使用到assertproperty语句。•有些断言会被用于查找感兴趣的信号值或设计状态,例如一次成功的总线数据交换。这要用到coverproperty语句。2.3基于覆盖率驱动的验证环境2.3基于覆盖率驱动的验证环境•当所有测试案例都仿真结束后,就要收集覆盖率,分析验证结果。覆盖率通常会有四种情况:1、代码覆盖率功能覆盖率都很
本文标题:数字IC设计验证平台的搭建.
链接地址:https://www.777doc.com/doc-2387615 .html