数字IC设计验证平台的搭建_第1页
数字IC设计验证平台的搭建_第2页
数字IC设计验证平台的搭建_第3页
数字IC设计验证平台的搭建_第4页
数字IC设计验证平台的搭建_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字数字ICIC验证流程验证流程一、数字IC验证流程 验证的流程并行于设计流程 验证工程师阅读硬件规范并拟定验证计划,然后依照计划创建测试来检查RTL代码是否准确实现了所有特性。 1.1 制定验证计划:验证计划是和硬件规范紧密联系在一起的,它描述了需要验证什么样的特性,以及采用哪些技术。 验证技术可能包含有定向或随机的测试、断言、软硬件协同验证、硬件仿真、形式验证(formality工具比较RTL与网表是否一致),以及对验证IP的使用。1.1 验证计划的制定 制定验证计划分为三部分:制定功能验证需求书、指定验证平台的抽象层次、激励的产生和结果检查方案。 1.1.1功能验证需求书的内容是确认设计

2、的哪些功能是需要被验证的,它主要是测试用例(testcase)和功能点(testpoint)的一个列表,构成了整个验证计划的基础。 基于覆盖率驱动的验证环境中功能覆盖率是功能测试完备程度的指标。功能覆盖率就是对功能点的覆盖。1.1 验证计划的制定 1.1.2制定验证平台的抽象层次:验证平台搭建优先考虑制定验证平台的抽象层次,高层次的抽象建模可以让平台中低层次的功能自动化,提高验证平台的效率。 1.1.3激励的产生和检查方案:有四种激励产生器:基元产生器、场景产生器、多流产生器和基于状态的产生器。这四种激励产生器均是自动化生成激励,扩展基类即可实现。 基元产生器用于生成相互独立的事务,事务之中的

3、数据变量是相互无关的。场景发生器生成的是一个数据或事务描述符的序列。多流发生器即多个数据流的发生器。基于状态的发生器是使随机化生成过程依赖于外部状态信息。1.1 验证计划的制定 检查方案:一般公司均采用计分板(scoreboard)检查机制。 Scoreboard的工作原理:DUT产生的响应input_stream压栈到queue1中,expect_stream为DUT的期望响应, expect_stream压栈到queue2中,然后将两个队列弹栈进行数据比对,同时scoreboard在仿真过程中report自检查的统计结果。1.2搭建验证平台 1.2.1搭建验证平台的方法:搭建模块级验证平台

4、时,信号层、被测设计(DUT)和验证环境(program test)必须在顶层模块实例化。1.2搭建验证平台 1.2.2搭建验证平台的注意点:1.VIP的验证组件的使用可以大大缩短平台搭建的开发周期。2.sub_env组件的使用,实现模块级到子系统级的复用,提高平台的可重用性。3.个性化代码。由callback实现,使用回调方法来检测流过事务处理器的数据流,利用回调(callback)插入异常(erro injection)和收集功能覆盖率。4.在搭建模块级验证平台时,使用好的代码风格易实现模块级代码的复用。5.验证平台搭建好后,跟RTL代码一样,是一个不断完善的过程。在验证的过程中不断完善自

5、己的平台,使其方便、准确的验证我们的项目。1.3 回归测试与覆盖率收敛 全部测试用例被成功运行后,验证就进入回归测试和覆盖率收敛阶段。 回归测试要求能够周期的批处理运行、测试用例必须能够容易得到重现、成功与失败能够自动检测。 覆盖率显示出设计被测试的程度,是验证收敛的重要标准。 所有的测试应该在每天或者每周做回归而且周期性的运行。设计人员或者验证工程师应该查看覆盖率,从而修改或者添加更多的测试用例,从而尽可能达到100%。二、VMM分层次验证平台 VMM是IC设计领域的一种高级验证方法学,主要由ARM和synopsys公司的设计验证领域的专家共同设计,用于开发先进的验证环境,已成为当前业内公认

6、的验证方法标准。 VMM验证方法学的基础是systemverilog语言。Systemverilog是一种由verilog发展过来的硬件描述、硬件验证统一语言,前者是2005年版verilog的扩展,而后者的功能验证特性以面向对象程序设计技术为基础。VMM所有的方法学基础来自于systemverilog,并吸收了C语言的一些先进思想。2.1 VMM验证方法学的特点 1.受约束的随机激励 2.覆盖率驱动 3.使用事务处理器的分层测试平台 4.对所用测试用例通用的测试平台 5.独立于测试平台之外的个性化代码 建立VMM风格的测试平台所需要的时间要比传统的定向测试平台多得多,但对于验证大规模的电路来

7、说,VMM验证平台要比传统的定向测试平台功能验证的齐备性要高得多,大大提高流片的成功率,并且平台的可重用性在后期的验证工作中将发挥节约测试时间和人力资源的功效。2.2 基于事务的验证环境 事务(Transaction)是指验证平台与DUT之间通过设计的特定接口(interface)进行的高层次的数据或者控制信号的传输。接口包含了连接、同步、甚至两个或者更多块之间的通信功能,它们连接了设计块和测试平台。 基于事务的验证技术是对底层信号的封装,这样验证人员可以关注工程中的事务级验证,而不是过分关注底层的逻辑和时序的实现。因此是在对更高抽象级别上对系统硬件的建模,在接口组件上交换数据或执行事件。2.

8、2.1 VMM分层次验证平台 VMM验证方法学是一种基于事务的层次化验证方法学。层次化是把验证的步骤分层进行,把验证工作提高到更高的抽象层次,即事务层。 VMM验证平台分为五层,每一层完成独立的功能,层与层之间通过接口相互连接。2.2.1 VMM分层次验证平台2.2.1 VMM分层次验证平台测试层即测试用例,是顶层模块,控制着整个环境的运行;设定约束使激励产生器生成相应的命令操作和数据;定义新的随机场景,同步不同的事务并创建直接测试用例。场景层即产生器(generator),产生应用于功能层数据和事务描述符。产生器根据指定的约束和随机场景来生成相应的命令操作和数据。带约束的随机测试在此层引入。

9、测试场景是一系列随机的有着某种关联的事务,每种测试场景代表着一种独立的事务来针对一个特殊的边界功能。功能层是对DUT功能验证的核心部件。功能层从场景层接收到数据和事务描述符,事务描述符主要是选择事务处理的类型,例如是读操作还是写操作。接收的数据一般是对DUT施加的激励,分为DUT的配置信息和DUT的交换数据。此外,功能层还包含比较器和功能覆盖模块,比较器负责检查DUT的功能是否满足设计规范,功能覆盖模块用于统计和记录DUT的功能覆盖情况。2.2.1 VMM分层次验证平台命令层主要包含驱动器和监视器这两种事务处理器。驱动器从通道接收到功能层传递下来的事务,将事务激励转化为信号级激励信号,通过接口

10、对DUT进行驱动。驱动器中的事务被定义为基于接口的最小数据传输或命令操作,比如寄存器的读写、发送包数据等。监视器检测DUT的各个引脚信号的变化,将引脚信号所表征的信息转换为事务,通过事务通道反馈给验证平台的高层模块。最底层为信号层,完成验证平台与DUT的引脚连接。该层提供的信号可以被上层直接访问,给平台带来了极大的灵活性。信号层是用systemverilog编写的接口,在接口中定义了信号的同步或异步时序关系,对应于DUT的引脚信号的时序。一旦DUT的引脚发生了变化只需要修改systemverilog定义的信号,使得验证工程师的精力可以集中在更高的抽象层次上。以事务级的角度看VMM验证环境的基础

11、架构,可以看到从测试用例到最后BFM(总线功能模型)的处理,都是对事务的处理。2.2.1 VMM分层次验证平台 BFM(bus function model)的作用是把底层总线的时序封装起来,向上层提供一个统一的任务接口,使上层不用关心底层的实现细节,而专注于testcase的设计。这一点同c+的面向对象的概念很类似,在c+里,对象相当于命令或调用,而对象的成员函数实现具体细节,外部无需关心它的内部细节。2.2.2 VMM数据与事务 数据与事务就像整个VMM验证平台的细胞,它存在于验证环境中的每个组件。VMM的场景层(generator)用于生成验证环境的数据和事务描述符,而VMM的其他验证组

12、件均是对事务进行处理的处理器(除测试层和信号层外)。 Synopsys公司应用systemverilog的继承(extends)语言特点提出基类概念,基类是Synopsys编写的一个模型,用户只需根据自己项目要求扩展基类就能生成自己的验证模型。Vmm_data和Vmm_xactor分别是数据与事务的生成和处理的基类。 Vmm_data基类是验证平台中所有事务描述以及数据建模的基础。这个类提供的一些属性和方法专门用于生成数据包和事务描述符。Vmm_xactor基类被用作处理所有事务的基础,包括总线功能模型,监视器和发生器。它提供一套标准的控制机制,作为所有事务控制的基础。2.2.2 VMM数据与

13、事务 Vmm_data和vmm_xactor两个基类基本构成了VMM的场景层、功能层和命令层的验证组件,而继承的方法,又可以方便的定制用户需要的数据和事务处理器模型,因此,VMM验证平台非常容易搭建。2.2.3VMM事务层接口 数据与事务生成于激励生成器并被不同的事务处理器处理。VMM规定两个事务处理器之间,必须使用通道来进行事务交易。 Vmm_channel是Synopsys推出的通道模板类。Channel传输的是数据与事务,而Vmm_data是对数据与事务的生成模板类,所以vmm_channel应该是vmm_data扩展类的通道。 Vmm_channel:put 将新生成的数据与事务描述符

14、添加到通道。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事件一旦触

15、发,解除以前等待的线程。vmm_notify:BLAST在通知发出的同一个时阶,所有等待通知发出的线程同时得到通知。本模式可以消除某种形式的竞争条件。Vmm_notify:ON_OFF通知是电平敏感的。显式的复位后,才能解除通知的有效。将不再继续等待仍然有效的通知线程。本模式可消除某种形式的竞争条件。2.3 基于覆盖率驱动的验证环境覆盖率驱动验证是一个基于仿真的验证方法,专门被开发用来解决当前功能验证项目面临的效率和完备性挑战。Synopsys公司提供的VCS工具能够生成覆盖率列表,分析覆盖率列表,验证工程师可在最短的时间内找到哪些功能已经通过测试,哪些功能还没有被测试到,从而保证验证的完备性

16、。覆盖率可分为:代码覆盖率、功能覆盖率、漏洞率和断言覆盖率。代码覆盖告诉验证者在一个特定仿真运行中,所有RTL设计描述代码是否被执行。代码覆盖率只说明了RTL代码被运行过,并不能说明RTL功能被执行了。功能覆盖率则能很清楚的告诉我们哪些功能点被执行过了。漏洞率是衡量覆盖率的一个间接的方式,漏洞率与项目所处的阶段、近期设计上的变化、正在集成的模块、人事上的变动等等有关,每次比率下跌时,就应该寻找各种不同的方法去测试各种边界情况。2.3 基于覆盖率驱动的验证环境 断言是用于一次性地或在一段时间内核对两个设计信号间的关系的声明性代码。断言最常用于查找错误,例如两个信号是否应该互斥或者请求是否被许可等

17、。一旦检测到问题,仿真立即停止。断言也可用于检查仲裁算法、各种FIFO以及其他硬件。以上这些情况会使用到assert property语句。 有些断言会被用于查找感兴趣的信号值或设计状态,例如一次成功的总线数据交换。这要用到cover property语句。2.3 基于覆盖率驱动的验证环境2.3 基于覆盖率驱动的验证环境 当所有测试案例都仿真结束后,就要收集覆盖率,分析验证结果。覆盖率通常会有四种情况:1、代码覆盖率功能覆盖率都很低,说明产生的测试激励较少,没有触发DUT全部功能。此时需检查验证平台的generator,是否封装了所有DUT的所有输入数据以及配置数据,另外也要检查平台的各个处理

18、器是否存在缺陷。2、功能覆盖率明显高于代码覆盖率,可能是设计中的冗余代码太多也可能是验证人员对DUT的功能点提取不够全面和完整。3、代码覆盖率明显高于功能覆盖率,有两种可能,一是测试激励没有触发DUT的某些功能,测试应增加一些针对某些功能的受约束的测试例;二是功能覆盖点定义的有问题,验证人员对DUT功能的错误理解,定义了一些不可能达到的错误功能点。2.3 基于覆盖率驱动的验证环境 4、代码覆盖率和代码覆盖率都很高,但是并没有达到我们的预期,此时如果再采用随机验证方法将浪费很多时间,可以手动的加入一些定向测试案例来对DUT进行验证,提高覆盖率。2.4 可重用的验证环境 Synopsys推出很多基

19、于VMM关于验证的VIP(verification IP),这些VIP可以在VMM的验证环境中方便的集成和重用,极大的提高了整个验证的效率。 AMBA总线在SOC设计中应用极为普遍,Synopsys针对AMBA总线也有自己的VIP,对其功能和时序方面做了严谨的研究。 验证分为:模块级验证、子系统级验证、系统级验证。模块级验证主要验证单一模块的功能,子系统级验证则侧重于多个模块间的交互,系统级验证更关注整个系统的性能。使用sub_env可以使得模块验证能够应用到子系统级和系统级的验证平台的开发中去,那么子系统和系统级验证平台就不需要再构建该模块的部件,节省了整个验证项目的时间。2.4 可重用的验

20、证环境 VMM提供的基类vmm_subenv,用来对重用模块进行封装。Vmm_subenv中提供的方法configure()、start()、stop()、report(),决定了重用模块的封装和使用的基本模式。 实现subenv时,方法new()中,根据配置文件来决定Subenv内部组件的连接方式,进行连接,并构建重用模块。方法configure()中,实现对DUT的配置。方法start()中,将subenv中的模块启动起来,这个start()在环境env中的start()调用的。方法stop()和start()类似,由环境env调用执行。方法report()可以报告这个重用模块在仿真中的执行情况。2.5 VMM提供的标准库 为了方便工程师更加快速的搭建标准化验证平台,VMM为用户提供了标准库。VMM标准库中主要的基类:1.Vmm_env基类,用于控制每个测试用例运行,包括产生测试用例配置、建立验证平台、复位DUT、配置DUT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论