数字集成电路高级验证测试方法
2011-04-10史敬端程金海
姜 琦,史敬端,刘 健,程金海
JIANG Qi1,SHI Jing-duan2,LIU Jian2,CHENG Jin-hai2
(1. 天津天钢联合特钢有限公司 机动处,天津 301500;2. 天津电气传动设计研究所 市场部,天津 300180)
0 引言
随着超大规模数字集成电路功能的日益完善和集成度的不断提高,各个领域对其功能设计完整性、可靠性要求也变得越来越高。因此,对数字集成电路的故障检测、诊断方法、故障定位以及可测性设计技术进行全面深入的研究具有重要的现实意义,这也是确保超大规模数字集成电路器件在使用中正常安全工作的重要手段。超大规模数字集成电路自身具备的高集成度特性增加了对其进行测试和验证的难度。在测试和验证过程中,测试向量的生成又是最主要和最复杂的部分,且对测试效率和故障覆盖率的要求也越来越高。
目前的数字集成电路设计工具可以使设计师将主要精力集中在算法级和功能级设计,综合工具自动对功能设计进行RTL和门级综合,这就对数字芯片传统门级测试和验证带来了极大挑战[1]:由于设计师使用综合工具自动布局布线,因此设计师不清楚电路设计结构,因而无法进行结构级测试;另一方面,由于电路设计规模不断增大,如果使用门级测试验证方法,则需要占用大量的时间,有时甚至无法进行。
1 高级验证测试方法
数字集成电路的验证测试是实现“从设计到测试无缝连接”的关键。在深亚微米制造工艺下,芯片验证测试的重要性尤为突出。其主要功能是验证设计和测试程序的正确性,确定芯片是否符合所有设计规范[2]。从测试验证角度来说,电路描述的层次可以分为行为级描述、功能级描述、结构级描述、开关级描述以及几何级描述[3]。高级验证测试方法指的是任何高于门级的验证测试方法[4]。高级验证测试的目的在于检验数字电路系统是否达到初始说明书上的要求,发现并改正其中的设计缺陷。在这个过程中,应该有一个方法来衡量验证的完整性,这个方法就是建立覆盖模型。
覆盖模型一般包括覆盖空间和覆盖率度量。覆盖空间引入及分类的目的在于将声明、执行、内部结构以及外部调用验证相互补充完整,将声明中指出的和未指出的均实现验证。在实现中,覆盖空间中的声明、执行、内部结构以及外部调用验证相互补充完整性的检查往往通过代码覆盖率报告完成。由于器件的全部功能由其输入、输出要求定义,所以一个捕捉这些要求的覆盖空间可视为一个覆盖模型的重要组成部分,这一部分往往通过功能验证和断言验证来实现。覆盖率度量包括四方面:隐含度量、显性度量、声明度量和执行度量。
2 覆盖模型建立及应用
一个完整的覆盖模型主要包括三方面内容,即代码覆盖、断言验证和功能覆盖。概括来说,建立覆盖模型包括以下步骤:通过分析功能设计说明,记录所有设计会用到的操作状态,从中提取模型参数;捕捉所有操作状态的参数值,绘制成表;根据各参数所有可能状态定义所有节点,即每种组合为一个节点。设计并执行一个覆盖模型分为两部分内容,一部分是顶层设计,另一部分为细节设计。顶层设计关注器件本身的模型描述、定义的属性以及属性间的关系。顶层设计包括:用语言描述将要建立的模型、确定模型应包括的属性以及确定属性间的关系。细节设计关注如何用验证环境描述覆盖模型设计。细节设计包括:哪些属性必须被采样、在验证环境的何处进行采样以及何时进行采样并将其关联起来。
2.1 交互系统功能说明
功能说明即系统的使用说明,是建立覆盖模型的第一步,其用于描述系统的操作状态及参数提取。
验证的交互系统包括2个控制设备和2个从属设备。控制设备和从属设备之间通过一个连接设备相连。同一时刻,只能有一个控制设备与一个从属设备交互。任何控制设备都可以和任何一个从属设备交互。事务可以是一个读操作或写操作。连接设备用来决定哪个控制设备管理事务,同时建立指定控制设备和从属设备间的连接及成功处理该事务。
2.1.1 控制设备
控制设备可执行读和写操作,支持在交互系统中控制两个从属设备。当控制设备收到指令“bg”,就准备开始一个事物,发出一个低电平有效的脉冲到信号“ask”上,然后等待一个“gnt”信号。“gnt”信号是一个低电平有效信号。如果在2~5个时钟周期内没有等到“gnt”信号,稍后控制设备将重试这个过程。如果在2~5个时钟周期内获得了“gnt”信号,控制设备将立即断言信号“avail”,用来确认“gnt”信号的到达(“avail”信号是低电平有效信号)。
2.1.2 连接设备
连接设备负责两个重要任务:1)决定哪个控制设备管理与从属设备之间的事务。2)建立一个特定的控制设备和一个从属设备之间的连接。在一个给定的时间,控制设备可以通过断言各自的“ask”信号来请求执行事务。
控制设备选定要与其建立事务的从属设备后,连接设备将提供指定从属设备的信息。由于两个控制设备能与任何一个从属设备建立事务,因此连接设备必须监控两个控制设备的“sel”信号(即“sel1”和“sel2”)。在任何给定时间,要么两个“sel”信号都处于三态,要么其中一个处于三态。如果两个“sel”都是三态,那么在此时没有事务请求。如果有一个事务请求,那么其中一个“sel”信号的值为0或1,具体的值依赖于选择的目标设备。如果连接设备的输出信号“sel”(该信号为两位)的最高位置为高,则从属设备1被选中,如果最低位置为高,表示从属设备0被选中。
2.2 模块级断言验证
模块级断言验证是实现覆盖模型的第二步,即捕捉系统各个属性、属性间的关系以及所有操作状态的参数值,从而得到验证代码。
2.2.1 控制设备验证
根据控制设备的功能描述,可以分析出断言验证。每个控制设备只有一个“ask”、“gnt”、“avail”信号,是控制设备的单独信号,因此在编程构建系统时需调用两个实例。一旦控制设备有一个请求信号,启动信号要在2~5个时钟周期内到达,此种情况下,如果信号“sel”为高,则在同一时钟周期,控制设备应断言信号“avail”。三个时钟周期后,从属设备2应该通过断言信号“ready”确认该选择。
仿真结果如图1所示。
断言验证结果分析如图2所示。
通过波形及结果分析可知,所有断言均有效,其中成功两次,失败零次。
2.2.2 连接设备验证
每个控制设备中有唯一的“avail”信号,其为连接设备的输入。如果控制设备处于激活状态,其将信号“avail”置为低,因此,把两个“avail”信号进行“与”操作,如果结果为低,则可知总线状态为激活;如果结果为低,则没有控制设备处于激活状态。
图1 控制设备仿真波形
图2 控制设备断言验证结果分析
每个控制设备有唯一的一个“ask”信号,用来请求总线,而连接设备提高唯一的“gnt”信号。通过将所有的“ask”信号进行“或”操作来判断是否有控制设备存在有效请求;同理,将“gnt”信号进行“或”操作,可知一个控制设备的请求获得了许可。
仿真结果如图3所示。
断言验证结果分析如图4所示。
通过波形及结果分析可知,所有断言均有效,其中成功四十三次,失败一次。
2.3 系统级验证
当对系统的各个模块进行验证后,还要对系统的连接和协议进行验证,在任何一个给定的时间点,只能断言一个“ready”信号,在任何给定的时钟周期,只能激活一个“sel”信号,其他“sel”信号应该是三态,当一个控制设备发出一个正确的请求后,在2~5个时钟周期内,应该实现一个正确的“gnt”,在任何给定时钟周期,如果一个控制设备的“avail”信号被断言,则3个时钟周期后,相关的“ready”信号应该被断言,在任何给定的时钟,如果控制设备的“avail”信号被解除断言,则两个时钟周期后,相关的“ready”信号应该被解除断言,在任何给定的时钟,如果没有有效的事务,则总线“data”和“datao”应该为三态。
仿真结果如图5所示。
断言验证结果分析如图6所示。
通过波形及结果分析可知,所有断言均有效,其中成功一百九十次,失败零次。
2.4 功能覆盖
模块级验证和系统级验证检验的是任何可能存在的违反指定的功能要求的情况,从而提高系统功能的可信等级。而从测试平台角度考虑,在模拟中需要覆盖系统功能的所有可能场景,因此在模拟中覆盖的情景应成为测试计划的一部分。
图3 连接设备仿真波形
图4 连接设备断言验证结果分析
图5 系统级仿真波形
图6 系统级断言验证结果分析
检验验证的效果依然依赖于输入激励,如果输入向量不能促使系统执行某些情景,那么它们就不会被测试到。许多测试平台采用随机技术产生模拟的输入激励。一个非常通用的方法是运行许多预先定义的事务,然后测量对某些情景集合的覆盖。通过约束控制输入激励的产生,会更加有效地覆盖到各种场景。交互系统中有许多重要的功能,应作为功能验证的一部分被覆盖到。
请求场景:
在任何给定的时间,有两个控制设备可以请求访问,即控制设备的“ask”信号有四种可能的组合,如表1所示:
图7 请求状态仿真波形
表1 控制设备请求场景
图8 请求状态断言验证结果分析
图9 系统仿真验证波形
其中,“0”表示控制设备正在请求总线。
仿真结果如图7所示。
断言验证结果分析如图8所示。
通过波形及结果分析可知,所有断言均有效,其中成功四十次,失败零次。
2.5 结果分析
通过系统验证,发现在验证过程中,虽然所有断言均有效,但许多断言未被覆盖到,同时有一处断言失败,即属性check_avail_gnt(图9中向下箭头处)。该属性断言当控制设备完成该任务时,需解除对信号“avail”的断言,连接设备在下一时钟周期解除对“gnt”信号的断言。
此断言失败表明,当任务完成后,为解除信号“avail”的断言,从断言失败处到仿真结束,连接设备的状态始终为控制设备2等待,同时结合代码执行率报告发现,在断言失败处,连接设备模块的程序为死循环状态,由此发现该系统的连接模块设计存在缺陷。在交互系统验证的例子中,系统功能验证是通过断言的方式来实现的,将失败的断言与其相应处的代码执行报告结合分析,可以提高检测到系统功能缺陷的效率。
3 结论
本文通过实例介绍了高级验证测试方法的概念、作用以及应用范围,并通过SystemVerilog验证语言结合具体实例在QuestaSim仿真软件上实现了系统验证过程。通过试验可以看出,构建覆盖模型测试平台可以提高验证测试工作的效率、完备性、可靠性以及易控性。但高级验证测试方法也存在不能精确预见门级故障覆盖率的问题,因此未来的高级验证测试技术还可以在可测性设计和层次化测试两方面进行深入研究,使覆盖模型在具有代表性的同时对底层故障具有较高的覆盖率。
[1] Riesgo T,Uceda J,Aldana F,High-level testing for digital VLSI-a survey[A]. Proc Int Conf Industrial Electronics,Control,and Instrumentation[C]. Hawaii,USA. 1993. 1.402-407.
[2] M. L. Bushnell,V. D. Agrawal,“Essentials of Electronic Testing for Digital,Memory and Mixed-Signal VLSI Circuits”,Kluwer Academic Publishers,2000.
[3] Jha N K,Gupta S. Testing of digital systems[M].Cambridge University Press,2003.
[4] Kapur R. High level ATPG is important and is on its way[A]. Proc Int Test Conf[C]. Atlantic City,NJ,USA.1999.
[5] Corno F,Reorda M S,Squillero G,RT-level ITC’s99 benchmarks and first ATPG result[J]. IEEE Design & Test of Computers,2000,17(3).
[6] 成本茂,王红,刑建辉,杨士元,数字电路的高层测试技术及发展趋势[J]. 微电子学,2006.
[7] Andrew Piziali,“Functional Verification Coverage Measurement and Analysis”,Kluwer Academic Publishers,2004.