1.前言
随着微电子制造技术向深亚微米方向发展,数字集成电路的集成度也越来越高,而半导体工艺中可能引入各种失效,另外材料的缺陷以及工艺的偏差都可能会导致芯片中电路连接的短路、断路以及器件结间穿通等问题。这样的物理失效必然导致电路功能或者性能方面的故障。为了保证设计的正确性,在制造和使用芯片时必须要对其进行测试。目前最有效的方法就是采用可测性设计技术(DFT,De-sign For Testability),即在设计时就保证电路的可测性。对数字逻辑电路的测试包括功能测试和结构测试。功能测试是检测该模块在系统中工作状态下的常用功能,并检测模块与系统的接口连接。但由于模块的复杂性,在限定的时间内,穷举所有的功能并加以测试通常是不可能的。结构电路测试是对内部的电路结构进行全面的测试,以保证该电路实现的功能的正确性。结构电路测试首先需要将电路的物理缺陷模型化,建立故障模型,产生测试激励。然后将测试激励从原始输入引入故障点,并将故障点的测试响应传播到电路的原始输出,最后比较测试响应与无故障响应,判断电路是否有故障。 1986~1988年,以欧洲和北美会员为主的联合测试行动组织(JTAG,joint test action group)率先开展了边界扫描技术的研究,提出了一系列JTAG边界扫描标准草案。1990年TEEE和JTAC共同推出了IEEE Std 1149.1边界扫描标准。其主要思想是:通过在芯片管脚和芯片内部逻辑电路之间,即芯片的边界上,增加边界扫捕单元来实现对芯片管脚状态的串行设定和读取,从而提供芯片级、板级和系统级的标准测试框架。芯片扫描机制可实现下列目标:测试电路板上不同芯片之间的连接;测试芯片及电路板的功能;应用边界扫描寄存器完成其他测试功能,如特征分析等。在本项目中将采用边界扫描技术,针对AlteraDE2,Cyclone II开发板进行结构测试,以保证电路功能的正确性。其基本测试思路是采用遍历的方式检测开发板上多个集成器件的不同引脚之间的连通性,在保证连通性的基础上,引人测试激励来判断电路是否有相应的响应输出。这中间最关键的要素是要通过对开发板网表文件的解析,提取出待测的集成器件的引脚连线。本文通过对网表结构的分析,得出解析网表的一种有效方法:首先,针对cadence网表文件,一行一行的读出每行数据,然后针对每行数据进行语义解析,从中抽出相关的网络信息,再选取需要测试的元件名,把与这些元件相连的所有引脚抽取出来,存到一个新的文件中去,该文件就包含了待测器件的所有连线信息。
2.网表文件格式分析
Cadence网表的格式由两部分组成,一部分是元件的定义,另一部分是网络的定义。具体如下: 2.1 元件的定义格式网络表第一部分是对所使用的元件进行定义,一个典型的元件定义如下: 每一个元件的定义都以符号“[”开始,以符号“]”结束。第一行是元件的名称,即Designator信息;第二行为元件的封装,即footprint信息;第三行为元件的注释。 2.2 网络的定义格式网表的后半部分为电路图中所使用的网络定义。每一个网络定义就是对应电路中有电气连接关系的一个点。一个典型的网络定义如下: 每一个网络定义的部分从符号“(”开始,以符号“)”结束。“(”符号下第一行为网络的名称。以下几行都是连接到该网络点的所有元件的元件标识和引脚号。如C2-2表示电容C2的第2脚连接到网络。NetC2_2上;X1-1表示还有晶振X1的第1脚也连接到该网络点上。根据对网表格式的分析可以看出每个元件都具有固定的格式:元件名,元件值,封装类型,引脚数,X坐标,Y坐标;器件与器件之间用[]隔开;紧随器件之后的是net;每个net 中的内容都是“元件名-引脚号”(注:个数可能是不一样);net与net之间用()隔开。本软件的开发平台是C++builder6.0,采用的编程语言为C语言。基本思路为从网表文件的读入解析开始,先从网表文件中删除元件定义部分,然后是根据输入待测试的集成器件名进行抽取相关的网络信息,最后生成一个层次清晰、功能明确的待测元件管脚连线文件。
3.网表解析过程分析
本文介绍了集成电路可测性设计项目中针对电路网表文件进行解析,提取待测集成器件之间管脚连线的方法和过程。网表析取程序的要求是:在给定网表基础上,首先将网表转换为有利于提取网络定义信息的新网表,即从原有网表文件中删除所有的元件定义信息和电源|稳压器模块及接地模块信息;然后从新网表中,根据要测试的集成元件名提取出相应的管脚连线信息;最后再把管脚连线信息按照易于测试的文件格式进行保存。 3.1 网表文件中元件信息的过滤根据对网表格式的分析可以看出对网表采用单行读取的方法比较方便,故通过调用fgets()函数来读取文件的每一行。由于每个器件的信息是用“[]”隔开的,这样“[”,就可以作为一个元件信息是否开始的标志,而“]”就可以作为一个元件信息是否读完的标志。对旧网表,首先声明一个FILE指针,用fopen(“旧网表的路径”,“r”)打开旧网表文件,然后利用fgets()函数把一行信息读到临时字符数组str[]中,使用strcmp()函数分别与“[”和“]”进行比较,以确定某一个元件信息的开始和结束。另外使用strcmp()函数与“(”比较,以确定元件定义的结束和网络信息定义的开始。按照前面的设计思路,我们需要从网表文件中提取的仅是网络信息,因此,用feof()函数判别是否读到旧网表文件尾,如没有,则通过调用fgets()函数读取一行信息,只要不是“(”,说明该行信息不属于网络定义部分,用continue语句跳过;继续读取下一行,直到读到“(”,说明已经读到网络定义部分,可以将该行信息及其之后的所有信息都写入新的网表文件。打开新网表文件可以看到,新网表文件已经过滤掉了旧网表文件中与测试无关的元件信息部分,而只保留了网络的定义部分。本部分程序流程如图1所示。 3.2 网表文件中电源及接地模块的过滤在新网表文件创建成功以后,对其进一步分析可以知道,在新的网表文件中包含了一些电源模块,如+1.2v,+1.8V,+2.5V,+3.3V,+5V,+12V等;还有接地模块GND,GNDC等。这些模块所包含信息仍与测试管脚无关,所以还需要过滤掉。过滤这些电源模块和接地模块的方法仍然是采用fgets()函数依次渎取每一行信息,然后调用strcmp()函数进行判断是否为对应的电源及接地模块,如果是,则跳过该模块的文件块,从“(”开始,至“)”结束。本部分流程如图2所示。 3.3 待测器件管脚连线文件的生成过程分析经过以上两步处理后的网表文件中只余下net信息了。在界面上输入需要测试的元件名,然后在新网表文件中查找出包含所有待测试元件的网络节点,最后将查找出的网络结点以一定的格式存入一个新的文件。由于在新网表文件中要抽取出的是在同一个网络结点中同时包括多个待测元件的那些引脚号,即这些器件之间的连线。因此,在使用fgets()函数一行一行读取信息时,首先从每行信息中抽取出元件名,然后将该元件名与输入的待测试的元件名进行比较,如一致则将该行信息写入新文件,否则接着读下一行信息。当整个结点信息读取完毕时,新文件保存的只是那些与待测元件相匹配的引脚信息。本部分程序流程如图3所示。
4.结束语
本文主要介绍集成电路可测性设计项目中针对Altera DE2 Cyclone II开发板的网表文件进行解析,提取待测试器件引脚连线的方法及实现过程,该方法同样适用于其他的网表文件。经过测试,本软件通过对开发板网表文件的解析,为实现对电路的结构测试奠定了一个非常好的基础,既提高了芯片的质量保证,又改善了设计电路的可测性,基本达到了预期的目的。