>
首页 » 技术文章 » SOC层次化验证方法及应用

SOC层次化验证方法及应用

作者:崔云飞,徐吉吉  时间:2006-09-19 13:27  来源:
摘 要:首先对SOC功能验证做了简要介绍,然后主要讨论了功能验证中的层次化验证方法,并以一个基于AMBA总线架构的SOC系统为例,从模块级、子系统级和系统级三个方面分别阐述了如何用层次化的方法进行验证。层次化验证方法主要分三层,第一层测试主要验证接口协议;第二层测试是对随机产生的大量的交易序列的测试;第三层测试主要是对特定的逻辑功能进行验证。每一层都是构建于其他层之上,这使得层与层之间衔接非常紧密,以便于在完成了第一层的测试之后可以快速地扩展到第二层进行测试,层次化验证方法的应用大大地提高了验证环境的执行效率。

关键词:SOC;交易;层次化验证;子系统;随机测试

  SOC(SystemOnaChip)是近几年在IC产业出现的重大技术突破,有人把他同晶体管的发明相提并论。随着SOC设计日趋复杂化,设计验证工作也越发繁重。据统计,验证过程占据了整个设计周期的2/3甚至更高,并且设计过程所需要专门的验证工程师的人数一般是RTL设计工程师人数的2倍之多,而在设计完成时,测试程序构成全部设计编码的80%。所以,验证成为集成电路设计过程中最关键的环节,他贯穿了整个设计流程。如何通过寻找新的验证方法来缩短验证时间提高验证效率是当今IC设计领域中最为关注的问题之一。

SOC功能验证

SOC系统验证就是对基于IP核实现的SOC系统进行功能验证、静态时序分析、功耗分析及规则检查等,以保证正确的系统功能和良好的产品性能。在设计被综合前,首先要对RTL描述进行逻辑功能验证,验证的目的是为了确保验证过的模块或芯片具有100%的功能正确性。通常,RTL级功能验证主要采用自底向上的验证策略,即在模块集成到芯片以前尽可能地对每一个IP核或模块进行验证,然后再对整个芯片或系统进行验证,因此RTL级验证可分为模块级验证,子系统级验证和系统级验证3个阶段。

模块级验证就是对SOC系统中某个模块或IP核进行单独的验证。模块级验证的目标是要达到足够高的功能覆盖率,使得模块在集成到整个系统中时不会带来任何模块本身的功能错误。如果模块本身有一些功能错误,那么系统级验证将变得非常困难。

当单个模块被验证完毕之后,他就可以被集成到其从属的子系统中去验证。在子系统中可能包含其他已被验证过的模块,所以,子系统级验证主要侧重于模块间接口的验证和模块间交互的验证。系统级验证就是对整个系统芯片进行验证,他通过模拟一个芯片运行的真实环境,来测试系统运行的状况是否与设计规范中的要求相符合。

为了成功的对系统中每个模块及整个系统进行验证,在写测试激励之前一定要先写一个全面高计划,并对其进行评估,而后作为规范来遵守。由于SOC是由多个模块组成的一个复杂的系统级芯片,所以,在验证计划中不仅要有对整个系统的验证策略,而且还要包括系统中每个模块的验证策略。

层次化验证

功能验证的方法有多种,如兼容性测试、边界测试、回归测试等,这里讨论一种新型的验证方法:层次化验证方法。层次化的验证方法就是把验证步骤分层进行,如图1所示。验证层次被划分为三层,每一层都构建于其他层之上,这使得层与层之间衔接非常紧密,以便于在完成了第一层的测试之后可以快速的扩展到第二层进行测试。第一层测试主要验证接口协议;第二层测试对随机产生的大量的交易序列的测试;第三层测试主要是对特定的逻辑功能进行验证。下面以一个基于AMBA总线架构的SOC系统为例(如图2所示)来讨论对层次化验证方法的应用。

图1 验证层次

图2 基于AMBA总线的SOC系统

模块级验证
在进行模块级验证以前,首先要创建一个模块级验证平台,该验证平台可以有多种形式,但由于绝大部分模块都是与总线直接相连的,故在搭建模块级验证平台时多采用基于总线的功能模型BFM(BusFunctionModel)。以对系统中的一个双通道AHB?PCI桥模块的验证为例,构建验证平台如图3所示。

图3 AHB-PCI桥模块验证平台

由于被测对象是一个连接PCI总线和AHB总线的桥,所以在构建验证平台时用到了AHB总线功能模型,PCI总线功能模型和两种总线的监控器模型。在设计AHB主设备功能模型时,首先设计验证模块的最底层,他提供被测模块和总线模型之间的基本接口,即提供了模块间的信号连接,如HADDR,HWRITE,HTRANS,HWDATA等总线信号的连接。然后根据总线协议中信号被驱动的时序关系利用最底层的信号写出基本的总线交易,如ahb_read和ahb_write等任务。这为总线功能模型提供了第一级命令,他可以使模型在AHB总线上产生基本的总线读写操作,这些基本的读写操作可以用在层次化验证方法中的第一层测试中,而更加复杂的总线操作如读写命令的组合是在层次化验证方法中的第二层测试中实现的。用OpenCore上提供的已被设计好的PCI桥验证模块作为PCI主设备功能模型和从设备功能模型。在测试平台中,AHB监控器和PCI监控器的作用是分别对AHB总线上发生的操作和PCI总线上发生的操作进行检查,看他们是否违反总线访问协议。例如,在AHB总线协议中规定的对于重试响应最少要保持2个周期,如果AHB总线监控器发现重试响应只维持了1个周期,那么监控器将记录这个错误。

验证平台构建完毕之后,就可以用层次化验证方法进行测试了,其中,第一层测试和第三层测试主要通过直接测试的方法进行,而第二层测试则采用随机测试技术来完成测试目标。

第一层测试
第一层测试的目的是为了测试物理总线接口,以确保他不会违背AMBAAHB总线的协议。在第一层测试中,通过直接测试的方法来检查所有不同的总线周期运行是否正确,这就需要单独测试某个特定的总线协议。如图1所示,首先要对AMBAAHB总线上的读写操作进行测试,然后还要对PCI总线上的读写操作进行测试,由于PCI协议的复杂性,故要对PCI总线进行大量接口协议的测试。在对PCI桥进行基本的总线读写测试之前,先要对桥的配置寄存器进行配置,这就需要先测试协议中的配置读写,然后测试其他基本的总线操作,如存储器读写、I/O读写等。这样的测试结构可以保证PCI桥能够响应所有的AMBAAHB总线交易和PCI总线交易,并且可以在很短的时间内完成总线接口的测试。

这种直接测试的方法可以达到几乎100%的总线交易覆盖率,即他可以测试完所有总线协议中规定的总线操作,如读写操作,重试操作等。但他很难达到一个较高的功能覆盖率,即实现对设计模块所有功能的测试,这就需要用第二层测试来进一步验证模块的功能是否符合设计的要求。

第二层测试
第二层测试的目的是通过对大量不同的交易序列的测试来获得更高的功能覆盖率。可以通过扩展第一层来建立第二层的测试环境。在第一层的测试中已经完成了几乎所有的总线交易的测试,但每种总线交易的测试都是相互独立的,他们之间很少有关联,而在第二层的测试中主要是把这些独立的总线交易操作按照某种顺序组合起来, 构成一个或多个交易序列。这些交易序列可以完成PCI桥的某个特定功能,也可以没有任何特殊意义,而只是输入状态的一种组合,目的是为了覆盖所有的信号输入情况。为了完成第二层的测试目标,在验证环境中采用了直接随机测试技术。

随机测试就是为被测模块产生随机输入序列,目的是为模块内部当前的随机状态添加随机输入。按照这种方式,整个测试过程中对模块的状态空间的测试是均匀分布的,当然也可以通过设置权重来进行一定的调整。这种测试的均匀分布对于随机测试的成功是非常必要的,可以覆盖尽可能多的状况。

直接随机测试就是对随机测试的分布进行一定的约束。在对PCI桥的测试中主要采用了这种直接随机测试的方法。以AHB主设备功能模型发起对PCI桥的交易为例,说明被约束的交易的产生过程。如图4所示,在进行读写操作之前,先要对传输地址、传输的数据大小以及传输类型进行约束,同时还要对产生的响应也进行约束。如在随机产生的读写传输命令中AHB读传输占测试时间的35%,写传输占测试时间的45%,空闲时间占20%。当完成这些约束工作之后,就可以驱动AHB总线功能模型执行总线操作了。

图4 随机产生被约束的交易

随机测试的优点在于他能够非常快的获得较高的总线周期覆盖率和功能覆盖率,并且他还可以发现更多的边界情况和设计过程中没有考虑到的运行情况。同时,在这个随机测试环境中,可以用很少的代码产生大量的测试激励,所以能够很容易地达到第二层的测试目标。如果用直接测试的方法则不仅要耗费大量的时间,而且也不能模拟一个真实的AMBA环境。

第三层测试
第三层测试的目的是测试特定的应用逻辑功能[4]。通过对第三层的测试,可以使设计变得更稳定,从而提高了设计的鲁棒性。在这一层的验证中,可以针对某一特定功能进行测试,如在对PCI桥的验证中可以对如下功能进行验证:PCI设备的初始化,PCI桥的命令寄存器和状态寄存器,快速背靠背传输,奇偶校验,译码逻辑功能以及基本的读写操作等。第三层测试的优点是他强调对模块或系统整体功能的测试,更接近被测模块所运行的真实的环境。例如他能够模拟系统启动时主机对PCI桥进行初始化配置的过程,如果这个过程的运行结果不正确,那么在真正的配置过程中会导致主机启动时产生黑屏或死机的现象。所以,在第三层的测试中可以找到传统上只有在整个产品或系统都已设计完毕后才能检测到的问题。

子系统级验证
当单个模块验证完毕后就可以集成到子系统验证环境中来验证,因为每个模块在模块级验证中没有问题,并不能说明他在整个芯片中能正常工作,模块级验证只能说明模块本身的功能是正确的,而他与其他模块之间的接口以及模块与模块之间信号的相互连接是否正常仍然不能确定,所以在子系统级验证中主要侧重于接口的验证和模块间交互的验证[3]。子系统级验证平台与模块级验证平台稍有不同,他不只是包含单个被测的模块,而且包含被测对象所从属的子系统中的所有模块,但验证模块仍然可以应用模块级验证中使用的总线功能模型,如图5所示。

图5 子系统级验证环境

在子系统级验证时仍然可以用层次化方法,可以把在模块级验证中使用的层次化验证方法完全的移植到子系统验证环境中,每一层的验证目标均保持不变。

第一层测试主要检测子系统连接是否正确和系统中所有的模块的接口是否都符合AMBA总线协议。在模块级验证中创建的在第一层测试中用到的任务模块(如taskahb_read,taskahb_write等)在这里可以被重用,而测试激励可以被很快地修改来完成子系统协议的检测和系统内单个模块的检测。

第二层测试主要是检测子系统各模块间交互是否正确。而在模块级验证中用到的第二层测试中产生的任务序列也可以被重用,由AHB主设备功能模型和PCI主设备功能模型产生的随机约束测试向量仍然可以用来在子系统中进行测试。

第三层是对特定逻辑功能的测试,为了可以覆盖到系统中更多的模块,可以扩展但不是重用模块级验证时所用到的测试向量。例如,可以把数据由PCI主设备功能模型通过PCI桥写道AHB的片上RAM里而不是原来的AHB从设备功能模型,然后再把他读出来,与被写数据进行比较,从而可以检测出数据是否已正确的写入RAM中。

系统级验证
当对子系统验证完毕之后就可以进行系统级验证。在系统级,层次化验证方法仍然可以被应用,他主要是检验整个系统的运行情况是否与设计规范相符,尤其是侧重于对高级应用的测试。他的第一层和第二层测试与子系统级验证方法一样,但第三层测试主要是由软件来完成。真正的软件代码执行在一个全功能软件处理器模型上,而不是在模块级验证中用到的AHB主设备功能模型。运行真正的软件代码的优点是他可以创建一个与芯片运行尽可能相似的环境,而他的缺点是当软件运行时难于对总线周期进行控制,因为软件代码不能产生测试所有总线交易所需要的总线周期,这也就是为什么在系统级验证环境中还要重新运行第一层和第二层测试的原因。

结 论

层次化验证方法的应用将大大提高验证环境的执行效率。用层次化验证方法,可以更快地发现每一个验证级别的问题,并且通过在层次化验证流程中使用随机测试技术,可以在很短的时间内得到更高的功能覆盖率,从而可以达到有效缩短验证周期的目的。

相关推荐

SoC验证走出实验室良机已到

SoC  ICE  2014-01-17

蓝牙整合无线充电方案领舞穿戴式产品

SoC  Bluetooth  2013-12-31

Xilinx授予TSMC最佳供应商奖

Xilinx  SoC  2013-08-28

多核竞争已过时 “处理技术”将成新战场

SoC  处理技术  2013-08-26

物联网融合自动化推动高效生产模式变革

物联网  FPGA  SoC  2013-07-09

Semico:28nm SoC开发成本较40nm攀升1倍

28nm  SoC  2013-06-25
在线研讨会
焦点