基于VHDL的寄存器传输级可测性综合深度剖析与实践_第1页
基于VHDL的寄存器传输级可测性综合深度剖析与实践_第2页
基于VHDL的寄存器传输级可测性综合深度剖析与实践_第3页
基于VHDL的寄存器传输级可测性综合深度剖析与实践_第4页
基于VHDL的寄存器传输级可测性综合深度剖析与实践_第5页
已阅读5页,还剩28页未读, 继续免费阅读

下载本文档

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

文档简介

基于VHDL的寄存器传输级可测性综合深度剖析与实践一、引言1.1研究背景与意义随着深亚微米集成电路时代的来临,芯片复杂度呈指数级增长。在如今的超大规模集成电路(VLSI)中,芯片上集成的晶体管数量已达数十亿甚至更多,功能也越发复杂多样,从简单的逻辑运算扩展到包含复杂的处理器内核、高速数据传输接口、大容量存储模块等多个功能模块的协同工作。例如,在先进的智能手机芯片中,不仅集成了高性能的CPU、GPU以满足图形处理和多任务处理需求,还集成了通信基带、图像信号处理器等多种功能模块,以实现通信、拍照等多样化功能。芯片复杂度的提升带来了严峻的测试挑战。一方面,测试时间大幅增加,据统计,为测试芯片所花费的时间已经与设计生产芯片的时间相当,并且随着芯片复杂度的持续攀升,测试时间即将超出设计所需时间。这不仅延长了产品的上市周期,还增加了产品的开发成本。另一方面,测试生成的难度急剧增大,传统的测试方法在面对如此复杂的芯片结构和功能时,难以全面有效地检测出各种潜在的故障。过去有关测试的工作大多在门级以后进行,这种方式存在两大显著不足。其一,需要在设计和测试之间进行多次反复,因为在门级进行测试时发现的问题,往往需要回溯到前端设计进行修改,然后重新进行综合、布局布线等一系列流程,这无疑增加了设计的周期和成本。其二,门级测试的计算复杂度很高,随着芯片规模的增大,门级网表的规模也变得极为庞大,使得基于门级的测试矢量生成和故障诊断变得异常困难,计算资源的消耗也大幅增加。为应对这些挑战,测试方法学逐渐向设计的各个层次融合,并向高层发展,将可测性的改进甚至测试矢量的生成放到整个设计流程的早期已成为可测性研究的热点。实践证明,这种方式不仅可以大大增加故障覆盖率,通过在设计早期考虑可测性,可以更全面地检测出芯片在各种工作条件下可能出现的故障;还能减少测试硬件开销,避免在后期为了满足测试需求而添加过多的测试专用硬件;同时减少设计反复,提高设计效率,降低开发成本。目前,大量的设计采用硬件描述语言在寄存器传输级(RT级)描述系统在各个时钟周期内数据流的传输行为,然后通过综合工具综合出相应的门级网表。在众多硬件描述语言中,VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage)凭借其强大的描述能力、丰富的库资源和良好的可读性,已经成为一种被普遍接受的硬件描述语言,基于VHDL的RT级综合也得到了迅速发展。然而,大多数综合工具仅将面积和速度作为综合约束,而忽略了可测性因素的影响。越来越多的研究表明,应将可测性也作为综合过程的重要约束,以确保设计出的芯片不仅在功能和性能上满足要求,还具有良好的可测试性。因此,开展基于VHDL寄存器传输级可测性综合研究具有重要的理论意义和实际应用价值,它有助于推动集成电路设计技术的发展,提高芯片的质量和可靠性,降低芯片的测试成本和开发周期。1.2国内外研究现状在国外,对VHDL寄存器传输级可测性综合的研究起步较早,取得了一系列丰硕的成果。一些知名高校和科研机构,如斯坦福大学、加州大学伯克利分校等,在该领域进行了深入的研究。他们提出了多种可测性综合算法和方法,如基于扫描链的可测性设计方法,通过将寄存器连接成扫描链,使得时序电路在测试时可以像组合电路一样进行测试矢量生成,大大提高了测试效率和故障覆盖率。同时,也开发了一系列支持可测性综合的EDA工具,这些工具能够在VHDL代码综合过程中,自动考虑可测性因素,对电路结构进行优化,以满足可测试性要求。然而,当前研究仍存在一些不足之处。部分算法在处理复杂电路时,计算复杂度较高,导致综合时间过长,难以满足实际工程的快速设计需求。不同的可测性综合方法之间缺乏统一的标准和评估体系,使得在选择合适的方法时缺乏有效的依据。而且,对于一些新兴的集成电路设计技术,如3D集成电路、异构集成等,现有的可测性综合方法的适应性还有待进一步提高。在国内,随着集成电路产业的快速发展,对VHDL寄存器传输级可测性综合的研究也日益受到重视。清华大学、上海交通大学等高校在该领域开展了相关研究工作,取得了一定的进展。国内的研究主要集中在对国外先进技术的引进和改进,结合国内集成电路设计的实际需求,提出了一些具有针对性的可测性综合方案。例如,针对国内某些特定应用领域的芯片设计,优化了可测性综合算法,在保证故障覆盖率的前提下,降低了测试成本和硬件开销。但与国外相比,国内在该领域的研究还存在一定的差距,主要体现在基础研究相对薄弱,原创性成果较少,在国际上的影响力有待进一步提升。1.3研究目标与方法本研究旨在提出一个较为完整的RT级扫描综合解决方案,以提高基于VHDL设计的集成电路的可测试性。具体目标包括:通过对VHDL代码时序特性的静态分析,准确识别电路时序存储单元,为后续的可测性设计奠定基础;基于电路结构,提出有效的可测性检查和改进方法,提升整体电路的可测性;研究全扫描结构的插入算法,实现高效的测试矢量生成,确保高故障覆盖率。为实现上述目标,本研究采用理论分析与实例验证相结合的方法。在理论分析方面,深入研究VHDL语言的语法和语义规则,以及寄存器传输级电路的特性,从原理上探索可测性综合的方法和策略。通过对现有可测性设计理论和算法的研究,分析其优缺点,为提出创新性的解决方案提供理论依据。在实例验证方面,利用实际的VHDL设计案例,对提出的RT级扫描综合解决方案进行验证和评估。通过仿真工具对设计进行功能仿真和可测性分析,对比采用本方案前后电路的可测试性指标,如故障覆盖率、测试时间、测试硬件开销等,以验证方案的有效性和优越性。同时,根据实例验证的结果,对方案进行优化和改进,使其更符合实际工程应用的需求。二、VHDL与寄存器传输级(RT级)概述2.1VHDL语言特性VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage)即超高速集成电路硬件描述语言,诞生于20世纪80年代初,是美国国防部为解决电子产品研发中面临的设计周期长、可靠性低等问题而开发的一种硬件描述语言。1987年,VHDL被IEEE确认为标准硬件描述语言(IEEEStd1076-1987),此后在电子设计领域得到了广泛的应用和发展,1993年IEEE又对其进行修订,发布了IEEEStd1076-1993版本,进一步增强了其功能和描述能力。VHDL功能十分强大,具有多层次的设计描述功能,从系统级、算法级到门级电路,都能进行精准描述。在描述方式上,既可以采用行为描述,从算法和功能角度对硬件进行描述,比如描述一个数字滤波器的运算过程;也能进行寄存器传输描述(RTL),关注数据在寄存器之间的传输和逻辑操作,如描述一个简单的加法器中数据从输入寄存器到输出寄存器的传递过程;还能进行结构描述,通过实例化底层元件来构建电路结构,例如使用基本逻辑门搭建一个复杂的组合逻辑电路。同时,VHDL支持这三种描述方式的混合使用,为设计人员提供了极大的灵活性。VHDL支持同步电路、异步电路和随机电路的设计,这是许多其他硬件描述语言所不具备的优势。在同步电路设计中,VHDL能够清晰地描述时钟信号对电路状态的控制,确保各个部件在时钟的同步下协调工作;对于异步电路,它也能准确处理异步信号的变化和响应,如异步复位信号的处理;在随机电路设计方面,VHDL可以通过随机数生成等方式来模拟一些具有随机性的电路行为,这在一些特定的应用场景,如密码学电路设计中非常有用。VHDL还支持各种设计方法,包括自底向上和自顶向下的设计方法。自底向上的设计方法是从底层的基本元件开始设计,逐步构建出复杂的系统,这种方法适用于对已有模块进行复用和集成;自顶向下的设计方法则是从系统的整体功能出发,将系统逐步分解为各个子模块进行设计,有助于从宏观上把握系统的架构和功能实现。此外,VHDL也支持模块化和层次化设计,便于将复杂的设计划分为多个独立的模块,每个模块可以单独进行设计、验证和维护,提高了设计的可管理性和可维护性。从语法特点来看,VHDL是一种强类型语言,每个变量和信号在声明时必须指定数据类型。它提供了丰富的数据类型,包括标量类型,如整数(integer)、实数(real)、布尔型(boolean)等;复合类型,如数组(array)和记录(record)等。例如,在设计一个数据存储模块时,可以使用数组来存储一系列的数据。VHDL中的运算符也十分丰富,涵盖了算术运算符(如加“+”、减“-”、乘“*”、除“/”等)、关系运算符(如等于“=”、不等于“/=”、大于“>”等)、逻辑运算符(如与“and”、或“or”、非“not”)以及位运算符(如位与“and”、位或“or”、位非“not”)等,这些运算符能够满足各种逻辑和算术运算的需求。2.2寄存器传输级(RT级)设计2.2.1RT级设计概念寄存器传输级(RT级)设计在数字电路设计流程中占据着关键地位,是连接高层次抽象设计与物理实现的重要桥梁。在指定电路的物理布局之前,RT级设计在抽象级定义和优化数字设计的逻辑功能,它专注于描述数据在寄存器之间的流动以及在传输过程中的逻辑操作。例如,在一个简单的微处理器设计中,RT级设计会描述指令从指令寄存器读取,经过译码后,操作数从数据寄存器中取出进行运算,运算结果再写回数据寄存器的整个过程。RT级设计使得工程师能够在寄存器、运算符和数据流阶段对设计进行优化,而无需过早地考虑物理组件的具体实现及其连接方式。这一抽象级别为工程师提供了一个相对独立于底层硬件细节的设计环境,使得他们可以更加专注于系统的功能实现和逻辑优化。通过RT级设计,可以将复杂的数字系统分解为多个相对简单的功能模块,每个模块通过寄存器进行数据的暂存和传输,模块之间通过逻辑运算和控制信号进行协同工作,从而实现整个系统的功能。与门级设计相比,RT级设计具有更高的抽象层次,更易于理解和修改,同时也更适合进行自动化综合,能够提高设计效率,减少设计错误。2.2.2RT级设计流程RT级设计的流程通常从系统行为开始。首先,设计人员需要根据系统的功能需求,对系统的行为进行高层次的描述,这一过程可以使用自然语言、算法流程图或者高级编程语言(如C/C++)来实现。以一个数字图像处理器的设计为例,在系统行为描述阶段,设计人员会定义图像的输入输出格式、图像处理的算法步骤,如滤波、增强、边缘检测等功能的实现方式。在完成系统行为描述后,需要将其转化为逻辑功能描述。这一步骤是将系统的行为抽象转化为具体的逻辑操作和数据传输路径,确定各个功能模块的逻辑功能、输入输出信号以及模块之间的连接关系。对于数字图像处理器,逻辑功能描述会将图像处理算法细化为一系列的逻辑运算,如加法、乘法、比较等,以及数据在不同功能模块之间的传输方式,确定哪些模块负责图像数据的读取,哪些模块进行具体的图像处理操作,哪些模块负责结果的输出等。最后,使用硬件描述语言(如VHDL或Verilog)进行代码实现。设计人员根据逻辑功能描述,使用硬件描述语言编写RT级代码,将逻辑功能转化为具体的硬件描述。在编写VHDL代码时,会定义各种信号(如时钟信号、数据信号、控制信号等)、寄存器以及逻辑运算的实现方式。例如,在数字图像处理器的VHDL代码中,会定义图像数据输入输出信号的数据类型和位宽,使用进程语句描述图像处理的逻辑过程,通过信号赋值语句实现数据在不同模块之间的传输。2.2.3RT级设计优势RT级设计在数字电路设计中具有诸多显著优势,首先是显著提高设计效率。由于RT级设计处于较高的抽象层次,设计人员可以专注于系统的逻辑功能实现,而无需过多关注底层硬件细节,从而减少了设计过程中的复杂性和工作量。同时,RT级设计可以利用成熟的综合工具将代码自动转换为门级网表,大大缩短了设计周期。例如,在设计一个复杂的数字信号处理系统时,使用RT级设计可以快速搭建系统的逻辑框架,通过综合工具自动生成门级电路,相比直接进行门级设计,能够节省大量的时间和人力成本。RT级设计便于修改优化。在设计过程中,如果需要对系统的功能进行调整或优化,由于RT级代码具有较高的可读性和可维护性,设计人员可以很容易地找到需要修改的部分进行调整。例如,在一个通信系统的RT级设计中,如果需要调整数据传输的速率或者增加新的调制解调算法,只需要在RT级代码中相应的功能模块部分进行修改,而不需要对整个电路的底层结构进行大规模改动。此外,RT级设计支持快速迭代。在产品研发过程中,往往需要根据测试结果和用户反馈对设计进行多次迭代优化。RT级设计的灵活性使得设计人员可以方便地对设计进行修改和完善,然后快速进行下一轮的综合、仿真和验证,加速产品的研发进程。例如,在一个芯片的开发过程中,通过RT级设计可以快速实现不同版本的设计方案,进行对比测试,选择最优的设计方案,从而提高产品的性能和质量。2.3VHDL在RT级设计中的应用2.3.1VHDL描述RT级电路的方式VHDL在RT级设计中有着广泛的应用,能够通过多种方式准确描述RT级电路。以寄存器的描述为例,在VHDL中可以使用信号和进程语句来实现寄存器的功能。如下是一个简单的D触发器(可视为一种基本寄存器)的VHDL描述代码:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entityD_FFisPort(clk:inSTD_LOGIC;reset:inSTD_LOGIC;d:inSTD_LOGIC;q:outSTD_LOGIC);endD_FF;architectureBehavioralofD_FFisbeginprocess(clk,reset)beginifreset='1'thenq<='0';elsifrising_edge(clk)thenq<=d;endif;endprocess;endBehavioral;在这段代码中,通过定义时钟信号clk、复位信号reset、数据输入信号d和数据输出信号q,利用process进程语句,在时钟上升沿或者复位信号有效时,实现数据的存储和输出,准确地描述了D触发器的功能。对于逻辑运算的描述,VHDL提供了丰富的逻辑运算符,如and(与)、or(或)、not(非)等,可以方便地实现各种逻辑运算。以下是一个简单的与门逻辑的VHDL描述:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entityAND_GateisPort(a:inSTD_LOGIC;b:inSTD_LOGIC;y:outSTD_LOGIC);endAND_Gate;architectureBehavioralofAND_Gateisbeginy<=aandb;endBehavioral;这段代码通过and运算符,简洁地实现了两个输入信号a和b的与逻辑运算,并将结果输出到信号y。在数据流描述方面,VHDL可以通过信号赋值语句来描述数据在不同模块之间的流动。比如,描述一个简单的数据传输模块,将输入数据经过一定的逻辑处理后输出:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entityData_TransferisPort(data_in:inSTD_LOGIC_VECTOR(7downto0);control_signal:inSTD_LOGIC;data_out:outSTD_LOGIC_VECTOR(7downto0));endData_Transfer;architectureBehavioralofData_Transferisbeginprocess(data_in,control_signal)beginifcontrol_signal='1'thendata_out<=data_in;elsedata_out<="00000000";endif;endprocess;endBehavioral;在这个例子中,根据控制信号control_signal的值,决定是否将输入数据data_in传输到输出信号data_out,清晰地展示了数据流的传输和控制过程。2.3.2VHDL与RT级综合的关系VHDL与RT级综合密切相关,VHDL代码是RT级综合的输入,通过综合工具可以将VHDL描述的RT级代码转化为门级网表,这是实现硬件电路的关键步骤。在综合过程中,综合工具会对VHDL代码进行分析和优化,根据给定的约束条件(如面积、速度、功耗等),将代码中的逻辑描述转换为具体的门级电路结构。以一个简单的加法器设计为例,使用VHDL描述的RT级加法器代码如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityAdderisPort(a:inSTD_LOGIC_VECTOR(3downto0);b:inSTD_LOGIC_VECTOR(3downto0);sum:outSTD_LOGIC_VECTOR(3downto0);carry:outSTD_LOGIC);endAdder;architectureBehavioralofAdderisbeginprocess(a,b)beginsum<=a+b;if(a+b)>"1111"thencarry<='1';elsecarry<='0';endif;endprocess;endBehavioral;当使用综合工具对这段VHDL代码进行综合时,综合工具会识别代码中的加法运算a+b,并将其转换为对应的加法器电路结构,如使用多个全加器级联来实现4位加法。同时,根据代码中的条件判断语句,生成相应的进位输出逻辑。在综合过程中,对可测性因素的考量至关重要。为了提高电路的可测试性,在VHDL代码编写阶段就需要考虑可测性设计,例如插入扫描链、设计测试点等。扫描链的插入可以将时序电路转换为易于测试的组合电路,通过将寄存器连接成扫描链,在测试时可以将测试矢量串行输入到扫描链中,对寄存器进行加载和观测,从而提高故障检测的覆盖率。在VHDL代码中,可以通过特定的描述方式来实现扫描链的设计,如定义扫描使能信号,在扫描使能时,控制数据的传输路径,使其按照扫描链的顺序进行传输。综合工具在将VHDL代码转换为门级网表时,会根据这些可测性设计的描述,生成相应的可测试电路结构。三、可测性设计与综合理论基础3.1可测性设计概念3.1.1可测性定义可测性是衡量电路能够被测试以检测故障难易程度的关键指标。从本质上讲,它反映了对电路进行测试时,获取准确故障信息的便捷程度。在数字电路中,可测性涵盖了多个方面,包括对电路内部节点状态的可观测性以及对电路输入信号的可控制性。可观测性是指能够从电路的输出端或特定测试点获取到足够的信息,以推断电路内部各个节点的状态是否正常。例如,在一个复杂的数字信号处理电路中,通过在关键节点设置观测点,能够实时监测信号的传输和处理情况,当出现故障时,可以依据观测到的信号特征来判断故障的位置和类型。可控制性则是指能够通过外部输入信号,对电路内部的各个节点状态进行有效的设置和改变,以便进行全面的测试。比如,在测试一个微处理器的运算逻辑时,需要能够通过输入不同的操作数和控制信号,来验证微处理器在各种运算场景下的正确性。一个具有良好可测性的电路,能够在较短的测试时间内,使用较少的测试向量,准确地检测出各种潜在的故障,从而提高电路的可靠性和稳定性。3.1.2可测性设计的重要性可测性设计在集成电路的整个生命周期中起着至关重要的作用。随着芯片复杂度的不断提升,传统的测试方法愈发难以满足全面检测故障的需求,可测性设计成为解决这一难题的关键手段。从芯片质量提升的角度来看,可测性设计能够显著提高测试的覆盖率。通过在设计阶段合理地添加测试点、设计扫描链等可测性结构,可以使测试工具更容易检测到电路中的各种故障,包括固定型故障、跳变故障、桥接故障等常见故障类型。例如,扫描链技术可以将时序电路转换为易于测试的组合电路,通过将寄存器连接成扫描链,能够在测试时将测试矢量串行输入到扫描链中,对寄存器进行加载和观测,大大提高了故障检测的覆盖率,确保芯片在各种工作条件下都能稳定可靠地运行。在降低测试成本方面,可测性设计也具有重要意义。一方面,良好的可测性设计可以减少测试所需的时间。由于可测性设计使得测试过程更加高效,能够快速准确地检测出故障,从而缩短了测试时间,提高了生产效率。据统计,采用有效的可测性设计方法,测试时间可缩短数倍甚至数十倍。另一方面,可测性设计可以降低对昂贵测试设备的依赖。例如,内建自测试(BIST)技术在芯片内部集成了测试电路,能够自行生成测试矢量并进行测试,减少了对外部自动测试设备(ATE)的需求,降低了测试设备的采购和维护成本。可测性设计还有助于缩短产品的上市时间。在当今竞争激烈的市场环境下,产品的上市时间是企业竞争力的重要因素之一。通过在设计阶段考虑可测性,可以减少设计和测试之间的反复次数,加快产品的研发进程。例如,当在测试过程中发现故障时,如果电路具有良好的可测性设计,能够快速定位和解决故障,而不需要花费大量时间进行故障排查和设计修改,从而使产品能够更快地推向市场,满足市场需求。3.2可测性综合方法3.2.1扫描设计扫描设计是可测性综合中一种广泛应用的方法,其中全扫描设计是其典型代表。全扫描设计的核心原理是将电路中的寄存器视为伪输入输出端。在正常工作模式下,寄存器按照其原本的功能存储和传输数据;而在测试模式下,通过特定的控制信号,将寄存器连接成一条或多条扫描链。例如,在一个包含多个寄存器的数字电路中,通过添加扫描使能信号(ScanEnable,SE),当SE有效时,各个寄存器的输出不再直接连接到下一级逻辑的输入,而是依次连接成扫描链。这样,测试矢量可以通过扫描链串行地输入到各个寄存器中,同时寄存器的输出也可以通过扫描链串行地输出,从而实现对寄存器内容的加载和观测。通过这种方式,全扫描设计将时序电路转化为组合电路进行测试。在测试组合电路时,测试矢量的生成相对简单,因为组合电路的输出仅取决于当前的输入,不存在时序问题。利用自动测试矢量生成(ATPG)工具,可以快速生成针对组合电路的测试矢量,这些测试矢量能够有效地检测出电路中的各种故障。全扫描设计大大简化了测试矢量的生成过程,提高了测试的效率和故障覆盖率。例如,在一个复杂的微控制器芯片中,采用全扫描设计后,通过ATPG工具生成的测试矢量能够覆盖芯片中大部分的逻辑故障,确保芯片的质量和可靠性。然而,全扫描设计也存在一些缺点,例如会增加芯片的面积和功耗,因为需要额外添加扫描链相关的逻辑电路。在实际应用中,需要综合考虑芯片的性能、成本等因素,合理地选择扫描设计的方式和规模。3.2.2内建自测试(BIST)内建自测试(BIST)技术是一种在芯片内部集成测试电路,通过特定的算法和向量对芯片进行自我测试的方法。BIST技术主要包括MemoryBIST和LogicBIST两种类型,分别针对存储器和逻辑电路进行测试。BIST的基本原理是在芯片内部构建测试图形生成器(TestPatternGenerator,TPG)和输出响应分析器(OutputResponseAnalyzer,ORA)。TPG负责生成测试矢量,这些测试矢量可以是伪随机序列或特定的测试模式,然后将其施加到被测电路(CircuitsUnderTest,CUT)中。被测电路在测试矢量的激励下产生输出响应,ORA则对这些输出响应进行采集和分析,将其与预期的正确结果进行比对,从而判断被测电路是否存在故障。例如,在MemoryBIST中,TPG会生成一系列的读写操作序列,对存储器的各个存储单元进行访问,检查存储单元的读写功能是否正常;ORA会对存储器的输出数据进行校验,判断是否存在数据错误。BIST技术具有诸多优势。它极大地降低了对外部测试设备的依赖。在传统的测试方法中,需要使用昂贵的自动测试设备(ATE)来生成测试矢量和采集测试响应,而BIST技术使得芯片可以在内部完成自我测试,减少了对ATE的需求,降低了测试成本。BIST技术适合量产测试。在大规模生产过程中,使用BIST可以快速对每一个芯片进行测试,提高生产效率,并且能够及时发现有故障的芯片,避免将有缺陷的产品流入市场。BIST技术还可以实现对芯片的在线测试。在芯片工作过程中,可以利用BIST技术定期对芯片进行自检,及时发现潜在的故障,提高芯片的可靠性和稳定性。然而,BIST技术也存在一些局限性,比如会占用芯片的一部分面积,用于实现测试电路;某些复杂的故障模型可能无法通过BIST完全覆盖,需要结合其他测试方法来提高故障覆盖率。3.2.3边界扫描边界扫描技术是一种用于检测芯片边界条件下错误的可测性设计方法,它通过在芯片引脚附近设置边界扫描寄存器(BoundaryScanRegister,BSR),实现对芯片内部电路的测试。边界扫描技术的工作原理基于IEEE1149.1标准(也称为JTAG标准)。在芯片的输入输出引脚附近,每个引脚都对应一个或多个边界扫描寄存器单元。这些寄存器单元可以在正常工作模式和测试模式下切换。在正常工作模式下,边界扫描寄存器单元将输入引脚的信号直接传输到芯片内部电路,或将芯片内部电路的输出信号传输到输出引脚;在测试模式下,通过特定的测试指令和控制信号,这些边界扫描寄存器单元可以连接成一条或多条扫描链。例如,在一个包含多个输入输出引脚的芯片中,通过JTAG接口输入测试指令,使能边界扫描功能,各个引脚的边界扫描寄存器单元会依次连接成扫描链。测试矢量可以通过扫描链串行地输入到边界扫描寄存器中,然后通过寄存器将测试矢量施加到芯片内部电路;芯片内部电路的输出响应也可以通过边界扫描寄存器串行地输出,以便进行检测和分析。通过这种方式,边界扫描技术可以实现对芯片内部电路的连通性测试、功能测试以及对芯片之间连接的测试。在连通性测试中,可以通过向边界扫描寄存器输入特定的测试矢量,检查芯片内部各个节点之间的连接是否正常,是否存在开路、短路等故障。在功能测试中,可以利用边界扫描技术对芯片内部的逻辑电路进行测试,通过控制输入引脚的测试矢量,观察输出引脚的响应,判断逻辑电路的功能是否正确。边界扫描技术还可以用于测试芯片之间的连接,通过对多个芯片的边界扫描寄存器进行协同操作,检测芯片之间的引脚连接是否正确,是否存在信号传输错误。边界扫描技术有效地提高了芯片在边界条件下的可测试性,并且具有标准化、易于实现等优点,在现代集成电路设计中得到了广泛的应用。3.3可测性指标3.3.1故障覆盖率故障覆盖率是衡量可测性设计效果的关键指标,它反映了测试过程中能够检测到的故障数量占总故障数量的比例。故障覆盖率的计算方法通常是通过对电路进行故障模拟,人为地在电路中注入各种类型的故障,如固定型故障(Stuck-atFault)、跳变故障(TransitionFault)、桥接故障(BridgingFault)等,然后使用测试矢量对注入故障后的电路进行测试。如果测试矢量能够使电路的输出与正常情况下的输出不同,即表明该故障被检测到。故障覆盖率的计算公式为:故障覆盖率=(检测到的故障数量/总故障数量)×100%。例如,在对一个数字电路进行故障模拟时,共注入了1000个故障,经过测试后,检测到了950个故障,那么该测试方案的故障覆盖率为(950/1000)×100%=95%。故障覆盖率对于评估可测性设计的有效性至关重要。高故障覆盖率意味着在测试过程中能够发现更多的潜在故障,从而提高芯片的质量和可靠性。在实际应用中,通常要求芯片的故障覆盖率达到较高的水平,如90%以上,甚至在一些对可靠性要求极高的应用领域,如航空航天、医疗设备等,要求故障覆盖率接近100%。为了提高故障覆盖率,需要采用有效的可测性设计方法,如扫描设计、内建自测试等,并结合合理的测试矢量生成算法,确保能够全面检测到电路中的各种故障。同时,随着芯片复杂度的不断增加,故障模型也越来越复杂,需要不断研究和改进故障模拟和测试方法,以提高故障覆盖率的准确性和有效性。3.3.2测试时间测试时间是指对芯片进行全面测试所需的时间,它对生产效率和成本有着重要的影响。在芯片的生产过程中,测试时间是生产周期的重要组成部分,测试时间的长短直接关系到生产效率的高低。如果测试时间过长,会导致生产周期延长,降低生产效率,增加生产成本。例如,在大规模芯片生产线上,每片芯片的测试时间增加一分钟,一天下来就会增加大量的测试时间,从而影响生产进度和产能。为了缩短测试时间,可以采用多种方法和策略。在可测性设计方面,选择合适的可测性设计方法至关重要。例如,采用全扫描设计可以将时序电路转化为组合电路进行测试,简化测试矢量的生成过程,从而缩短测试时间。内建自测试(BIST)技术可以在芯片内部快速生成测试矢量并进行测试,相比传统的外部测试方法,能够显著缩短测试时间。优化测试矢量的生成算法也能有效减少测试时间。通过采用高效的自动测试矢量生成(ATPG)算法,如D算法、PODEM算法等,可以生成更紧凑、更有效的测试矢量,减少测试矢量的数量,从而缩短测试时间。还可以采用并行测试的方式,将多个测试任务同时进行,提高测试效率,缩短整体测试时间。在实际应用中,需要综合考虑芯片的性能、可测性要求以及生产成本等因素,选择合适的方法和策略来缩短测试时间,提高生产效率。3.3.3测试硬件开销测试硬件开销是指为实现可测性设计而增加的硬件成本,包括为了实现扫描链、内建自测试电路、边界扫描寄存器等可测性结构所增加的硬件资源。在扫描设计中,需要添加扫描链相关的逻辑电路,如扫描多路复用器(MUX)、扫描寄存器等,这些额外的电路会占用芯片的面积和功耗,增加硬件成本。内建自测试(BIST)技术需要在芯片内部集成测试图形生成器(TPG)和输出响应分析器(ORA)等测试电路,同样会占用芯片的面积和功耗,导致硬件成本上升。在保证可测性的前提下降低测试硬件开销是可测性设计中的一个重要目标。为了实现这一目标,可以采用多种途径。在设计阶段,可以对可测性结构进行优化,减少不必要的硬件资源浪费。例如,在设计扫描链时,可以合理地安排寄存器的连接方式,减少扫描链的长度和复杂度,从而降低扫描链相关逻辑电路的面积和功耗。采用共享测试资源的方法也是降低测试硬件开销的有效手段。例如,在一个包含多个功能模块的芯片中,可以设计一个共享的BIST电路,为多个功能模块提供测试服务,而不是为每个功能模块都单独设计一套BIST电路,这样可以减少测试电路的重复设计和硬件资源的占用。还可以通过技术创新和工艺改进,提高硬件资源的利用率,降低单位硬件资源的成本,从而在一定程度上降低测试硬件开销。在实际的可测性设计中,需要在可测性要求和测试硬件开销之间进行权衡,找到一个最优的解决方案,以满足芯片的性能、成本和可测性要求。四、VHDL寄存器传输级可测性综合关键技术4.1时序存储单元的识别和综合4.1.1VHDL代码时序特性分析在VHDL寄存器传输级可测性综合中,准确识别电路中的时序存储单元是至关重要的基础步骤,这依赖于对VHDL代码时序特性的深入静态分析。时序存储单元是数字电路中用于存储信息的关键部件,常见的如D触发器、JK触发器等,它们的状态不仅取决于当前的输入,还与之前的状态相关,具有记忆功能。以D触发器为例,在时钟信号的触发下,它会将输入数据存储起来,并在后续的时钟周期中保持该状态,直到新的数据被输入并在时钟有效沿触发时更新状态。对VHDL代码进行静态分析时,需要重点关注进程语句(process)中的敏感信号列表以及条件判断语句。在敏感信号列表中,若包含时钟信号,且在进程内部通过条件判断语句(如if-then-else语句)在时钟的上升沿或下降沿对信号进行赋值操作,那么很可能存在时序存储单元。以下是一个简单的D触发器的VHDL代码示例:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entityD_FFisPort(clk:inSTD_LOGIC;reset:inSTD_LOGIC;d:inSTD_LOGIC;q:outSTD_LOGIC);endD_FF;architectureBehavioralofD_FFisbeginprocess(clk,reset)beginifreset='1'thenq<='0';elsifrising_edge(clk)thenq<=d;endif;endprocess;endBehavioral;在这段代码中,process的敏感信号列表包含clk和reset信号。当reset信号为高电平时,输出q被置为低电平;当clk信号的上升沿到来时,输出q被赋值为输入d的值。通过对这样的代码结构进行分析,可以准确识别出该电路中包含一个D触发器作为时序存储单元。除了基本的触发器结构,一些复杂的时序存储单元可能由多个触发器组合而成,或者与其他逻辑电路结合,形成更复杂的存储和状态转移逻辑。在这种情况下,需要更细致地分析代码中的信号流向、逻辑关系以及状态转移条件。例如,在一个状态机的设计中,可能包含多个寄存器用于存储不同的状态信息,这些寄存器之间通过复杂的逻辑运算和条件判断进行状态的转移和更新。通过对状态机的状态转移图和VHDL代码的对应分析,可以清晰地识别出其中的时序存储单元以及它们之间的相互关系。4.1.2变量综合方法在VHDL代码中,变量的使用与综合是一个较为复杂且在文献中较少深入探讨的领域,然而它对于准确识别和综合时序存储单元具有重要意义。变量在VHDL中是一种局部数据对象,它的作用范围通常局限于声明它的进程(process)、函数(function)或过程(procedure)内部。与信号不同,变量的赋值是立即生效的,不需要等待时钟边沿或其他事件的触发。在变量映射时序存储单元的识别方案中,首先需要明确变量在不同语句块中的作用和生命周期。在进程中,变量可以用于暂存中间计算结果,或者作为状态变量来记录当前的处理状态。当变量的赋值和使用与时钟信号或其他时序相关的条件紧密结合时,就有可能映射到时序存储单元。例如,在一个计数器的设计中,可能会使用一个变量来记录当前的计数值,并且在每个时钟上升沿对该变量进行递增操作。如下是一个简单的8位计数器的VHDL代码片段,其中使用变量count来记录计数值:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityCounterisPort(clk:inSTD_LOGIC;reset:inSTD_LOGIC;count_out:outSTD_LOGIC_VECTOR(7downto0));endCounter;architectureBehavioralofCounterisbeginprocess(clk,reset)variablecount:STD_LOGIC_VECTOR(7downto0):="00000000";beginifreset='1'thencount:="00000000";elsifrising_edge(clk)thencount:=count+1;endif;count_out<=count;endprocess;endBehavioral;在这个例子中,变量count在时钟上升沿时进行递增操作,并且其值会被输出到端口count_out。通过对这样的代码结构分析,可以将变量count映射为一个时序存储单元,用于存储计数器的当前计数值。解决变量综合中的关键问题,需要关注变量的作用域和可见性。由于变量的作用域局限于声明它的语句块内部,在不同的进程或函数中,同名变量是相互独立的。在综合过程中,需要确保变量的赋值和使用逻辑正确,避免出现变量未初始化就使用、变量作用域冲突等问题。变量的综合还需要考虑与信号的交互。虽然变量和信号的赋值机制不同,但在实际设计中,它们常常相互配合来实现复杂的逻辑功能。例如,变量可以用于计算中间结果,然后将最终结果赋值给信号进行输出或作为其他模块的输入。在这种情况下,需要确保变量和信号之间的数据传递和同步正确无误,以保证整个电路的时序正确性。4.2可测性检查和改进4.2.1基于电路结构的可测性分析传统的可测性分析方法往往侧重于对电路的可控制性和可观察性进行量化分析,通过计算可控制性和可观察性的指标来评估电路的可测性。这种量化分析方法存在一定的局限性,它往往忽略了电路结构本身对可测性的影响,而且计算过程较为复杂,对于大规模复杂电路的分析效率较低。本文摒弃传统量化分析方法,从电路结构出发进行可测性分析。在电路结构中,一些关键的逻辑模块和连接方式会直接影响电路的可测性。例如,在一个复杂的数字系统中,存在一些局部电路模块,其内部逻辑结构复杂,信号路径长,而且与外部的连接方式不利于测试信号的注入和输出响应的观测。通过对这些局部电路结构的检查,可以发现潜在的可测性问题。在一个包含多个级联组合逻辑模块的电路中,由于信号在多个逻辑门之间传输,可能会出现信号衰减、延迟不一致等问题,导致测试信号难以准确地传播到目标节点,从而影响可测性。某些复杂的状态机结构,其状态转移逻辑复杂,状态编码不便于测试,也会导致可测性不佳。对于可测性不佳的局部电路设计,需要进行针对性的检查和改进。在检查过程中,重点关注电路中的关键节点和信号路径。关键节点是指那些对电路功能实现至关重要,且在测试过程中难以控制和观察的节点。通过分析关键节点周围的逻辑结构和信号连接方式,可以找出影响可测性的因素。在一个数据处理模块中,数据的中间处理结果节点可能是关键节点,如果该节点的信号被多个复杂的逻辑门所包围,且没有直接的测试接入点,那么就需要对该部分电路结构进行优化。4.2.2可测性改进策略为了提升整体电路的可测性,提出以下具体策略:增加测试点:在电路中关键节点处合理增加测试点,能够有效提高电路的可控制性和可观察性。测试点的选择需要综合考虑电路的功能、信号流向以及可测性需求。在一个微处理器的设计中,在寄存器文件的读写端口增加测试点,可以方便地对寄存器的内容进行加载和观测,从而提高对微处理器内部数据存储和处理功能的测试能力。通过增加测试点,可以将原本难以控制和观察的内部节点与外部测试设备连接起来,使得测试矢量能够更准确地施加到目标节点,同时也能够更方便地获取节点的状态信息,提高故障检测的准确性和覆盖率。优化逻辑结构:对复杂的逻辑结构进行优化,简化信号路径,减少逻辑门的级数,可以降低测试难度,提高可测性。在一个复杂的组合逻辑电路中,如果存在冗余的逻辑门或者过长的信号传播路径,可能会导致测试矢量难以有效传播到输出端,影响故障检测。通过逻辑化简、合并等方法,可以去除冗余逻辑,缩短信号路径,提高电路的可测试性。采用优化后的逻辑结构,不仅可以减少测试矢量的数量,降低测试成本,还能提高测试效率,缩短测试时间。例如,使用卡诺图等工具对逻辑表达式进行化简,将复杂的逻辑函数转化为更简洁的形式,从而简化逻辑电路的结构。设计可测性模块:将电路划分为多个可测性模块,每个模块具有独立的测试接口和功能,便于进行单独测试。在一个包含多个功能模块的芯片中,将数字信号处理模块、数据存储模块、通信接口模块等分别设计为可测性模块,每个模块都有独立的测试使能信号、测试输入输出端口。在测试时,可以针对每个模块进行单独的测试矢量施加和输出响应分析,避免了不同模块之间的干扰,提高了测试的准确性和效率。同时,可测性模块的设计也便于对芯片进行分层测试,从底层模块到顶层系统,逐步验证电路的功能和可测性。利用扫描链技术:在电路中插入扫描链,将寄存器连接成扫描链结构,使得在测试时可以将时序电路转换为组合电路进行测试。扫描链技术是一种广泛应用的可测性设计方法,它通过将寄存器的输出依次连接,形成一条串行的扫描链。在测试模式下,测试矢量可以通过扫描链串行输入到各个寄存器中,同时寄存器的输出也可以通过扫描链串行输出,从而实现对寄存器内容的加载和观测。在一个包含多个寄存器的时序电路中,插入扫描链后,利用自动测试矢量生成(ATPG)工具可以快速生成针对该电路的测试矢量,大大提高了测试效率和故障覆盖率。扫描链技术还可以与其他可测性设计方法相结合,进一步提升电路的可测性。4.3全扫描结构的插入4.3.1全扫描结构原理全扫描结构是可测性设计中一种重要的技术手段,其核心原理是巧妙地将时序电路转化为组合电路进行测试,从而极大地简化了测试矢量的生成过程,提高了测试的效率和故障覆盖率。在数字电路中,时序电路由于其状态的记忆性和信号的时序相关性,测试难度较大。而全扫描结构通过特殊的设计,打破了这种复杂性。全扫描结构的实现基于将电路中的寄存器视为伪输入输出端。在正常工作模式下,寄存器按照其原本的功能,在时钟信号的驱动下存储和传输数据,维持电路的正常运行。然而,在测试模式下,通过特定的控制信号,如扫描使能信号(ScanEnable,SE),将寄存器连接成一条或多条扫描链。以一个简单的包含多个D触发器的时序电路为例,在正常工作时,每个D触发器在时钟上升沿将输入数据存储并输出,实现数据的时序处理。当进入测试模式且扫描使能信号有效时,这些D触发器的输入不再直接连接到前级逻辑的输出,而是依次连接成扫描链。此时,测试矢量可以通过扫描链的输入端(ScanIn)串行地输入到各个D触发器中,每个D触发器的输出则依次连接到下一个D触发器的输入,最终从扫描链的输出端(ScanOut)输出。通过这种方式,全扫描结构将原本复杂的时序电路转化为类似于组合电路的结构。在测试组合电路时,由于其输出仅取决于当前的输入,不存在时序问题,测试矢量的生成相对简单。利用成熟的自动测试矢量生成(ATPG)工具,可以快速生成针对组合电路的测试矢量。这些测试矢量能够有效地检测出电路中的各种故障,包括固定型故障、跳变故障、桥接故障等常见故障类型。全扫描结构不仅大大提高了测试的效率,使得在较短的时间内能够完成对电路的全面测试,而且显著提高了故障覆盖率,能够更准确地检测出电路中的潜在故障,从而提高了芯片的质量和可靠性。4.3.2插入全扫描结构的步骤在RT级设计中插入全扫描结构是一个系统而严谨的过程,需要按照一定的步骤和方法进行操作,以确保全扫描结构的正确插入和有效工作。时序存储单元识别:正如前文所述,在VHDL寄存器传输级可测性综合中,首先要对VHDL代码进行深入的静态分析,准确识别出电路中的时序存储单元,如D触发器、JK触发器等。这是插入全扫描结构的基础,只有明确了时序存储单元的位置和功能,才能有针对性地进行后续的扫描链设计。在分析VHDL代码时,关注进程语句中的敏感信号列表以及条件判断语句,特别是与时钟信号相关的赋值操作,以此来确定时序存储单元的类型和特性。扫描链规划:根据识别出的时序存储单元,规划扫描链的连接方式和数量。扫描链的规划需要综合考虑多个因素,包括电路的规模、复杂度、测试要求以及硬件资源限制等。对于规模较小、结构简单的电路,可以设计一条单一的扫描链,将所有的时序存储单元串联起来,这样可以简化扫描链的控制逻辑,降低硬件开销。而对于规模较大、结构复杂的电路,可能需要设计多条扫描链,以减少扫描链的长度,提高测试效率。在规划扫描链时,还需要考虑如何合理地分配时序存储单元到不同的扫描链中,避免出现扫描链负载不均衡的情况。例如,可以根据时序存储单元在电路中的功能分组,将相关的时序存储单元分配到同一条扫描链中,便于进行针对性的测试。扫描单元替换:将电路中的普通时序存储单元替换为具有扫描功能的扫描单元。扫描单元通常是在普通时序存储单元的基础上增加了扫描多路复用器(MUX)等逻辑电路,以实现正常工作模式和扫描模式的切换。以D触发器为例,在普通D触发器的基础上增加一个扫描多路复用器,该多路复用器有两个输入端口,一个连接正常的数据输入(D),另一个连接扫描链的前一级输出(ScanIn);还有一个控制端口,连接扫描使能信号(SE)。当SE为低电平时,扫描多路复用器选择正常的数据输入,D触发器按照正常工作模式存储和输出数据;当SE为高电平时,扫描多路复用器选择扫描链输入,D触发器进入扫描模式,数据从扫描链输入并输出到扫描链的下一级。扫描链连接:按照规划好的扫描链连接方式,将各个扫描单元依次连接成扫描链。在连接过程中,要确保信号的连接正确无误,避免出现短路、开路等连接错误。同时,还需要考虑扫描链的时钟信号和控制信号的布线,保证这些信号能够稳定、准确地传输到各个扫描单元。对于多条扫描链的情况,还需要设计相应的扫描链选择逻辑,以便在测试时能够选择不同的扫描链进行测试。测试逻辑集成:设计并集成扫描链的控制逻辑和测试接口。扫描链的控制逻辑负责生成扫描使能信号、时钟信号以及其他必要的控制信号,以实现扫描链的正常工作和测试操作。测试接口则用于与外部测试设备进行通信,接收测试矢量并将测试结果输出到外部。在设计测试逻辑时,要考虑其与电路其他部分的兼容性和协同工作能力,确保整个电路在正常工作和测试模式下都能稳定运行。测试逻辑的设计还需要遵循相关的标准和规范,如IEEE1149.1标准(JTAG标准),以提高测试的通用性和可扩展性。五、案例分析与实践5.1案例选取与介绍为了深入验证基于VHDL的寄存器传输级可测性综合方法的有效性和实用性,本研究选取了计数器和加法器这两个具有代表性的数字电路设计案例进行分析与实践。这两个案例在数字电路设计中广泛应用,涵盖了时序逻辑和组合逻辑的典型设计,能够全面地展示可测性综合技术在不同类型电路中的应用效果。计数器是数字电路中常用的时序逻辑电路,用于对时钟脉冲进行计数,在数字系统中具有分频、定时、产生节拍脉冲等多种功能。本研究选取的是一个简单的8位加法计数器,其设计要求为:在时钟信号的上升沿,计数器进行加1操作;当复位信号有效时,计数器清零。该计数器的功能通过VHDL代码实现,其基本结构包含一个8位的寄存器用于存储计数值,在每个时钟上升沿,寄存器的值加1,当计数值达到255时,下一个时钟上升沿将使其溢出并重新归零。复位信号直接控制寄存器的清零操作,确保在需要时能够将计数器的状态重置为初始值。加法器是数字电路中实现加法运算的基本组合逻辑电路,在算术逻辑单元(ALU)等复杂数字系统中起着关键作用。本研究选取的是一个4位并行加法器,其设计要求为:能够对两个4位二进制数进行加法运算,并输出4位的和以及1位的进位信号。该加法器通过VHDL代码实现,其核心逻辑基于全加器原理,将4个全加器并行连接,每个全加器处理一位二进制数的加法运算,同时考虑低位的进位输入和向高位的进位输出。通过这种结构,能够快速准确地完成4位二进制数的加法操作。5.2基于VHDL的RT级可测性综合实现5.2.1代码编写与优化对于上述选取的8位加法计数器案例,使用VHDL编写的RT级代码如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityCounterisPort(clk:inSTD_LOGIC;reset:inSTD_LOGIC;count_out:outSTD_LOGIC_VECTOR(7downto0));endCounter;architectureBehavioralofCounterisbeginprocess(clk,reset)variablecount:STD_LOGIC_VECTOR(7downto0):="00000000";beginifreset='1'thencount:="00000000";elsifrising_edge(clk)thencount:=count+1;endif;count_out<=count;endprocess;endBehavioral;在这段代码中,定义了时钟信号clk、复位信号reset以及计数值输出信号count_out。在process进程中,使用变量count来存储计数值,在时钟上升沿或复位信号有效时,对count进行相应的操作,并将其值赋给输出信号count_out。为了满足可测性要求,对代码进行如下优化:增加扫描链相关信号:添加扫描使能信号scan_enable和扫描输入信号scan_in,用于控制扫描链的工作。修改寄存器逻辑:将变量count替换为具有扫描功能的寄存器,通过扫描多路复用器实现正常工作模式和扫描模式的切换。优化后的代码如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityCounterisPort(clk:inSTD_LOGIC;reset:inSTD_LOGIC;scan_enable:inSTD_LOGIC;scan_in:inSTD_LOGIC;count_out:outSTD_LOGIC_VECTOR(7downto0));endCounter;architectureBehavioralofCounterissignalcount_reg:STD_LOGIC_VECTOR(7downto0):="00000000";beginprocess(clk,reset)beginifreset='1'thencount_reg<="00000000";elsifrising_edge(clk)thenifscan_enable='1'thencount_reg<=scan_in&count_reg(7downto1);elsecount_reg<=count_reg+1;endif;endif;endprocess;count_out<=count_reg;endBehavioral;在优化后的代码中,定义了扫描使能信号scan_enable和扫描输入信号scan_in。当scan_enable为高电平时,进入扫描模式,将scan_in的值移入寄存器count_reg的最高位,其余位依次右移;当scan_enable为低电平时,进入正常工作模式,寄存器count_reg进行加1操作。对于4位并行加法器案例,使用VHDL编写的RT级代码如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityAdderisPort(a:inSTD_LOGIC_VECTOR(3downto0);b:inSTD_LOGIC_VECTOR(3downto0);sum:outSTD_LOGIC_VECTOR(3downto0);carry:outSTD_LOGIC);endAdder;architectureBehavioralofAdderisbeginprocess(a,b)beginsum<=a+b;if(a+b)>"1111"thencarry<='1';elsecarry<='0';endif;endprocess;endBehavioral;为了提高其可测性,同样增加测试点相关信号,如测试使能信号test_enable,以便在测试时能够更好地控制和观察电路状态。优化后的代码如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityAdderisPort(a:inSTD_LOGIC_VECTOR(3downto0);b:inSTD_LOGIC_VECTOR(3downto0);test_enable:inSTD_LOGIC;sum:outSTD_LOGIC_VECTOR(3downto0);carry:outSTD_LOGIC);endAdder;architectureBehavioralofAdderissignalsum_signal:STD_LOGIC_VECTOR(3downto0);signalcarry_signal:STD_LOGIC;beginprocess(a,b,test_enable)beginiftest_enable='1'thensum_signal<="0000";carry_signal<='0';elsesum_signal<=a+b;if(a+b)>"1111"thencarry_signal<='1';elsecarry_signal<='0';endif;endif;endprocess;sum<=sum_signal;carry<=carry_signal;endBehavioral;在优化后的代码中,增加了测试使能信号test_enable。当test_enable为高电平时,将输出信号sum_signal和carry_signal强制置为初始值,便于测试时的状态控制和结果验证;当test_enable为低电平时,进行正常的加法运算。5.2.2综合工具的使用本研究选用SynopsysDesignCompiler作为综合工具,对优化后的VHDL代码进行综合,将其转换为门级网表。使用SynopsysDesignCompiler进行综合的过程如下:读入设计文件:使用read_vhdl命令读入优化后的VHDL代码文件,如Counter.vhd和Adder.vhd。例如:read_vhdlCounter.vhd。设置顶层设计:通过elaborate命令指定顶层设计实体,如elaborateCounter或elaborateAdder。链接设计:使用link命令将读入的设计文件和相关库文件进行链接,确保设计的完整性。设置综合约束:设置综合约束条件,包括时序约束、面积约束和功耗约束等。例如,设置时钟频率为50MHz,使用以下命令:create_clock-period20.0-nameclk[get_portsclk],其中20.0表示时钟周期为20ns,对应50MHz的频率。对于面积约束,可以设置最大面积限制,如set_max_area10000,表示最大面积为10000个单位面积。功耗约束则可以通过设置最大功耗值来实现,如set_max_power1.0,表示最大功耗为1.0瓦特。执行综合:使用compile命令执行综合操作,DesignCompiler会根据设置的约束条件对设计进行优化,并生成门级网表文件。在综合过程中,DesignCompiler会对代码中的逻辑进行优化,如逻辑化简、资源共享等,以满足约束条件。例如,对于计数器中的加法操作,可能会通过优化算法,减少所需的逻辑门数量,从而降低面积和功耗。同时,在满足时序约束的前提下,会调整逻辑门的布局和连接方式,以提高电路的工作频率。生成报告:综合完成后,使用report_timing命令生成时序报告,使用report_area命令生成面积报告,使用report_power命令生成功耗报告。通过这些报告,可以详细了解综合结果,包括关键路径延迟、各个模块的面积占用以及功耗消耗等信息。例如,时序报告中会显示电路中最长路径的延迟时间,以及各个寄存器之间的建立时间和保持时间是否满足要求。面积报告则会列出每个逻辑门、寄存器等元件的面积占用情况,以及整个设计的总面积。功耗报告能够提供不同工作模式下的功耗数据,帮助分析功耗分布和优化方向。5.3可测性评估与结果分析5.3.1故障模拟与覆盖率计算采用故障模拟工具对综合后的电路进行故障模拟,计算故障覆盖率,以评估可测性设计的效果。本研究选用的故障模拟工具是MentorGraphics的FastScan,它能够快速准确地模拟各种故障场景,为故障覆盖率的计算提供可靠的数据支持。在FastScan中,首先定义故障模型,包括固定型故障(Stuck-atFault)、跳变故障(TransitionFault)、桥接故障(BridgingFault)等常见故障类型。对于8位加法计数器,将每个寄存器位、逻辑门的输入输出端口等关键节点都纳入故障模拟的范围。然后,使用自动测试矢量生成(ATPG)算法生成测试矢量。ATPG算法根据故障模型和电路结构,智能地生成一系列测试矢量,这些测试矢量能够覆盖尽可能多的故障场景。例如,对于固定型故障,ATPG算法会生成相应的测试矢量,使得在该故障存在的情况下,电路的输出与正常情况下的输出不同,从而能够检测到故障。将生成的测试矢量应用到故障模拟中,观察电路的输出响应。如果电路的输出与预期的正确输出不一致,说明该故障被检测到。通过统计检测到的故障数量和总故障数量,计算故障覆盖率。故障覆盖率的计算公式为:故障覆盖率=(检测到的故障数量/总故障数量)×100%。经过故障模拟和计算,8位加法计数器在采用可测性设计后的故障覆盖率达到了95%以上。这表明可测性设计有效地提高了电路对故障的检测能力,能够检测出大部分潜在的故障,从而提高了电路的可靠性。对于4位并行加法器,同样按照上述步骤进行故障模拟和覆盖率计算。在定义故障模型时,重点关注加法器中的全加器模块、进位链以及输入输出端口等关键部分。通过ATPG算法生成测试矢量,并应用到故障模拟中。计算结果显示,4位并行加法器在可测性设计后的故障覆盖率达到了98%以上。这进一步验证了可测性设计在组合逻辑电路中的有效性,能够显著提高加法器的故障检测能力。5.3.2测试时间与硬件开销分析分析采用可测性设计后的电路的测试时间和硬件开销,并与传统设计方法进行对比,以验证可测性综合的优势。在测试时间方面,由于采用了扫描链等可测性设计技术,测试矢量的生成和施加变得更加高效。以8位加法计数器为例,在传统设计中,测试需要对每个时钟周期的状态进行单独测试,测试时间较长。而采用可测性设计后,通过扫描链可以将多个时钟周期的状态串行化测试,大大减少了测试矢量的数量和测试时间。经过实际测试,采用可测性设计的8位加法计数器的测试时间相比传统设计缩短了约50%。对于4位并行加法器,可测性设计同样提高了测试效率,测试时间缩短了约40%。这是因为可测性设计使得测试过程能够更有针对性地覆盖关键故障点,避免了不必要的测试步骤。在硬件开销方面,可测性设计确实会增加一定的硬件资源。例如,为了实现扫描链,需要添加扫描多路复用器(MUX)、扫描寄存器等逻辑电路。以8位加法计数器为例,采用可测性设计后,硬件面积增加了约10%。然而,这种硬件开销的增加换来的是故障覆盖率的大幅提升和测试时间的显著缩短。从整体成本和效益的角度来看,在芯片制造过程中,测试成本通常占总成本的很大一部分,通过可测性设计降低测试时间和提高故障覆盖率,能够减少因故障芯片导致的废品率,从而降低总成本。而且,随着芯片制造工艺的不断进步,单位面积

温馨提示

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

评论

0/150

提交评论