用于使用扫描链分解进行系统测试的方法与设备的制作方法

文档序号:6000140阅读:513来源:国知局
专利名称:用于使用扫描链分解进行系统测试的方法与设备的制作方法
技术领域
本发明涉及系统测试领域,更具体地但并不限于涉及生成并控制用于系统测试的指令。
背景技术
电子电路一般是以印刷电路板(PCB)的形式构建而成,该印刷电路板包括焊接于电路板基板上的多个电子元器件,其中电路板基板具有互连各种设备终端以形成电路的导电迹线。因为PCB以及其实现的电路通常都很复杂,制造商对电路板测试正日益变得自动化。在这方面,电路板测试设备已经由连接到密集PCB的I/O连接器并用于高级自动化功能测试的简单I/O功能测试仪,演化为包括用于和被测试电路板上的所有或者一些电路节点进行电连接的探针引脚以用于执行高级和低级测试的测试固定装置,再演化为不需要外部探查被测试电路板的单个电路节点就能提供PCB自动测试的集成测试设备。电路板和设备中的电路测试一般受到测试自动化工具(Testing Automation Tools)的控制,该测试自动化工具支持从定义测试算法到实际测试操作的处理所需的步骤。为了便于测试自动化,测试资源经常嵌入在电路板和设备中,并可以利用通常称为测试访问端口(TAP)的标准化接口进行访问。这样会造成对于引脚数以及合理资源访问和管理的限制。通常,大多数现有标准提供能用于描述被测系统(SUT :SyStem under test)内资源的一种或多种语言,这些资源能用作测试自动化工具的输入。这些测试自动化工具能应用他们自己的算法以便生成利用TAP的测试序列。然后,由测试控制单元(TCU :Test Control Unit)使用这些测试序列以控制TAP并执行测试操作。测试操作的特征和性能取决于这些因素中的每一个,即,访问标准、数据格式以及TCU实施。联合测试行动组(JTAG)已开发出命名为IEEE 1149. 1的电路板测试标准。IEEE 1149. 1指定用于测试电路板的测试访问端口(TAP)。IEEE 1149. 1支持经由被测试电路板上包括的测试设备来对硬件的边界扫描(BQ测试。边界扫描测试包括在软件的控制下控制和监视JTAG可兼容设备的边界引脚以提供超过其他情况下所能达到的测试覆盖率。而且,正在对指令JTAG(IJTAG)进行标准化(命名为P1687),来克服与从板级JTAG至片级 JTAG的转换相关联的现有JTAG局限性。
自动测试生成(ATG =Automated Test Generation)工具能使用 JTAG 和 IJTAG 来测试芯片和电子设备。JTAG提供简单的5线TAP,其能使用最少的负载串行访问芯片内所实施的资源。然后将访问构架描述成诸如边界扫描描述语言(BSDL)的特定语言,这种特定语言能被许多商用TGT用于生成测试矢量。这些测试矢量一般以称为串行矢量格式(SVF) 的格式保存,这样提供1149. ITAP基本操作的高级描述。对于SVF更复杂的替换是STAPL, 该STAPL扩展SVF的矢量操作以允许对测试矢量的基本流程控制(if-then-else)以及算术操作。遵从JTAG的TAP接收来自SVF或STAPL播放器的命令,并生成能以后离线解释的简单Go/NoGo结果。遗憾的是,这些现有的方法具有许多限制。第一个限制在于数据格式,因为测试播放器对于被测系统一无所知,因此,只能执行最基本的操作。第二个限制在于不支持(本地或远程的)交互性测试;而是任何测试结果必须离线检查。而且,这些现有方法是依赖实施的并一般具有专有性。

发明内容
通过用于经由被测系统的扫描链测试被测系统的一部分的方法和设备能解决现有技术中的各种缺陷。在一个实施例中,提供一种用于经由被测系统的扫描链测试所述被测系统的一部分的方法。该方法包括将所述扫描链分解成多个段,生成用于测试所述被测系统的所述部分的指令集,并执行所述指令集以用于测试被测系统的所述部分。扫描链包括多个元件,并且每个段包括所述扫描链的至少一个元件。指令集包括多个处理器指令以及多个测试指令,所述多个处理器指令与指令集体系结构(ISA)相关。对于所述扫描链的多个段中的每段,所述测试指令包括对该段执行的至少一个扫描操作。在一个实施例中,提供一种用于经由被测系统的扫描链测试所述被测系统的一部分的设备。所述设备包括将所述扫描链分解成多个段的装置、生成用于测试所述被测系统的所述部分的指令集的装置、执行所述指令集以用于测试所述被测系统的所述部分的装置。所述扫描链包括多个元件,以及每个段包括所述扫描链的至少一个元件。所述指令集包括多个处理器指令以及多个测试指令,所述多个处理器指令与指令集体系结构(ISA)相关。对于所述扫描链的多个段的每段,所述测试指令包括对该段执行的至少一个扫描操作。


结合附图,通过考虑以下详细描述,能够容易理解本发明的教导,在附图中图1示出了包括测试系统和被测系统的系统测试环境的高级框图;图2示出了图1的测试系统的一个实施例的高级框图,包括协作生成用于被测系统的测试指令的测试生成工具和软件编译器;图3示出了图1的测试系统的一个实施例的高级框图,包括协作生成用于被测系统的测试指令的测试生成工具和软件编译器;图4A-4E示出了利用SPARC V8 ISA实施TISA,说明用于利用SPARC V8 ISA实施 TISA的指令编码的细节;图5示出了利用SPARC V8 ISA实施TISA,说明用于利用SPARC V8 ISA实施TISA
5的示例性TISA结构;图6示出了支持交互测试能力的基于TISA测试环境的实施例;图7示出了图6的基于TISA测试环境的示例性实施例;图8示出了用于执行图5A的被测系统的传送-接收信道的优化的示例性程序结构;图9示出了用于修改适配处理器的指令集体系结构(ISA)流以形成测试指令集体系结构(TISA)流程的方法的一个实施例;图10示出了用于生成适用于测试至少部分被测系统的指令的方法的一个实施例;图IlA示出了用于生成适用于测试至少部分被测系统的指令的方法的一个实施例;图IlB示出了用于生成适用于测试至少部分被测系统的指令的方法的一个实施例;图12示出了 TISA处理器体系结构的示例性实施例;图13示出了利用多个处理器提供系统测试能力的测试处理器体系结构的示例性实施例;图14示出了测试协处理器体系结构的示例性实施例;图15示出了测试辅助处理器体系结构的示例性实施例;图16示出了能由TISA处理器使用的示例性寄存器集合;图17示出了被测系统的高级框图,说明被测系统的示例性扫描链的示例性分解;图18示出了利用扫描链的扫描段层抽象经由被测系统的扫描链用以测试部分被测系统的方法的一个实施例的高级框图;以及图19示出了适用于执行在此所述功能中的计算机的高级框图;为便于理解,在可能的情况下,使用相同的附图标记来指示附图中相同的元件。
具体实施例方式提供各种系统测试能力用于执行被测系统(SUT system under test)的测试。在一个实施例中,提供了测试指令集体系结构(TISA)。提供TISA用于执行系统测试。TISA将计算机科学能力与系统测试能力相结合以提供改进的系统测试能力,包括交互测试能力、远程测试能力和在此所述的各种其他能力。通过利用系统测试能力适配基于软件的指令集体系结构(ISA)形成TISA。基于软件的ISA能使用任一合适的软件编程语言 (例如,C++、Java等,及其各种组合)并能使用任何合适的处理器进行实施。系统测试能力可以使用任何合适的TAP,诸如IEEE1149. 1 (也称为JTAG)TAP或任何其他合适的TAP。一般而言,通过结合软件处理的原子操作和测试过程的原子测试操作形成TISA。在TISA中, 测试过程的算法部分由软件流程处理,诸如测试过程的算法部分被翻译成原子测试操作。 通过结合软件处理的原子操作和测试过程的原子测试操作形成TISA,以使原子测试操作以与处理测试过程的算法部分的的软件处理的原子操作相同的方式被处理。这使得能够细粒度地控制内嵌测试执行、远程测试执行和在此所示出并描述的各种其他改进的系统测试能力。
图1示出了包括测试系统和被测系统的系统测试环境的高级框图。如图1所示,系统测试环境100包括测试系统(TS) 110和被测系统(SUT) 120。TSllO可以是适于测试SUT120的任何系统。TSllO被配置用于测试SUT120。TSllO 能执行SUT120的任何测试,例如,测试SUT120的一个或多个单独组件,SUT120的组件的一个或多个组合,SUT120的组件之间的一个或多个互连,SUT120的一个或多个系统级功能等,及其各种组合。TSllO能执行一般与测试被测系统相关的任何功能,诸如执行测试过程、 向被测系统提供输入数据、从被测系统接收输出数据、处理从被测系统接收的输出数据用于确定系统测试结果以及类似功能,及其各种组合。下文将更详细地解释用于测试被测系统的TSllO的设计和使用。SUT120可以是可利用TSllO测试的任何系统。SUT120包括至少其部分由TSllO单独地和/或组合地测试的任何组件。TSllO包括一个或多个扫描链,具有一个或多个相关输入和输出访问引脚集合,提供由SUT120测试的组件的访问。本领域普通技术人员能理解其中在SUT120中利用扫描链用于测试SUT120的方式。例如,SUT120包括一个或多个电路板, 利用具有相关输入和输出访问引脚的一个或多个扫描链执行该电路板的测试,其中该输入和输出访问引脚能用于将输入测试信号应用于SUT120并从SUT120收集输出测试信号。如图1所示,TSllO经过测试访问接口(TAI) 115访问SUT120。可以使用任何合适的测试访问接口实施测试访问接口,这取决于如下因素的一个或多个TS110、SUT120、要执行的测试类型等,及其各种组合。例如,TAI115包括在IEEEl 149. 1标准中标准化为联合测试行动组(JTAG)测试访问端口(TAP),该标准以全文引用方式包含在此。IEEE1149. 1标准定义支持如下信号集合的TAP 测试数据流入(TDI)、测试数据流出(TDO)、测试模式选择(TMS)、测试时钟(TCK)以及可选地测试复位信号(TRST)。SUT120的TDI和TDO引脚在边界扫描链中互连,通过该边界扫描链,TSllO能访问SUT120以用于测试至少部分的SUT120。TAI115可以包括任何其他合适的测试访问接口。本领域普通技术人员可以理解,TS110、TAI115和SUT120能以适于提供在此所覆盖实施例的特征的任何方式实施。如在此所述,TISA能利用计算机科学能力以及系统测试能力以提供系统测试中的显著改进。系统测试能力和计算机科学能力的一般性描述如下,接着是其中一起利用计算机科学能力和系统测试能力提供TISA的方式的描述。TISA通过利用计算机科学能力以改进系统测试能力。系统测试能力包括在“自动化测试”流程的所有阶段中通常支持的能力(该流程一般包括从定义测试算法到实际测试操作所需要获得的所有步骤和资源)。为了有助于测试自动化,测试资源经常嵌入在电路板和设备内,并能使用一般称为测试访问端口(TAP)的标准化接口进行访问。这样会造成对引脚数量以及合理化资源访问和管理的限制。能使用多种语言描述被测系统内的资源,并因此,被测设备内的资源能用作测试生成工具(TGT)的输入。TGT能应用算法以生成测试序列,测试控制单元(TCU)能使用这些测试序列以控制TAP并执行相关测试操作。测试操作的特征和性能取决于如下三个因素访问标准、数据格式和TCU实施。。TISA能利用计算机科学能力以提供改进的系统测试能力。该过程包括利用在“软件开发流程”的所有阶段中可用到的计算机科学能力(该流程一般包括从以选择的软件语言编码的软件算法到在目标处理器上最终调试和执行中所需要的任一或所有步骤,诸如编译、指令集体系结构(ISA)、交互调试等,及其各种组合)。计算机科学中使用编译将以程序员友好的高级抽象定义的算法简化为一系列的机器可执行指令。这个过程差异很大,取决于输入的程序语言和项目的复杂度;然而,即使不是所有,大部分的方法共享同样的基本假设不管算法有多复杂,任何算法都可以被分解为基本的指令。该假设不但运用于经典的语言,也运用于更多的现代高级语言和面向对象语言,诸如,例如C++,Java, Python等。指令集体系结构(ISA)是任何处理器的核心,也是编译之所以有效的原因。一般而言,每个处理器都提供一套指令,这些指令定义了其中处理器运行的方式。这些指令形成处理器的至少部分ISA。可以理解的是ISA可被认为包括和指令相关的各种结构,诸如寄存器、寻址模式、操作码、存储结构等,及其各种组合。ISA能使处理器执行简单的指令,诸如读 /写值自/至于存储器、在寄存器上执行逻辑或算术操作、处理中断等。该基本性能可以随着时间保持基本不变,由于现代处理器能高效利用大量资源而实现优越的性能,并因此能在大致相同的时间量内完成更大量的基本指令。而且,从使用协处理器能达到更高的性能 (例如,浮点协处理器、图形协处理器等),其能够通过硬编码复杂操作来帮助主处理器。计算机科学中调试的使用允许监视并验证软件开发和执行处理。一般而言,软件开发是个长期并困难的过程,需要对该过程进行严格监视和验证以保证最后的产品没有缺陷,或者说没有一般称为的“缺陷”。为了帮助测试软件程序,软件开发流程提供许多强大的调试特性。例如,通用的软件开发流程调试特性包括逐步执行;所有寄存器和存储器位置的可观察性/可控制性,断点和观察点的使用等。这些调试特性以及各种其他调试特性更经常地由软件编译器嵌入到最终代码中的算法和结构提供,但也能由处理器内用到的硬件资源辅助。根据这些信息,调试器能重建原始代码并将ISA-层操作关联到编程抽象层。通过参考图2和图3能更好地理解一起使用自动测试执行能力和计算机科学软件能力以提供改进的系统测试能力。图2示出了图1的测试系统的一个实施例的高级框图,包括协作生成被测系统的测试指令的测试生成工具和软件编译器。如图2所示,TSllO包括测试生成工具(TGT) 210和软件编译器(SC) 220。TGT210 包括 TGT 构成器 212 和 TGT 算法 214。TGT构成器212接收系统描述文件211作为输入。系统描述文件211包括TGT能用于生成测试指令/矢量用于测试被测系统的所有合适的描述文件。例如,系统描述文件 211包括电路描述文件、电路/固定装置网表文件、其他描述文件等,及其各种组合。系统描述文件211能在TGT210上获得和/或从一个或多个远程组件和/或系统获取。系统描述文件211包括一个或多个电路描述文件。可以使用任何合适的诸如边界扫描描述语言(BSDL,已开发该语言作为IEEE1149. 1标准部分以用于板级JTAG)、分级扫描描述语言(HSDL,已开发该语言作为BSDL的扩展)、新扫描描述语言(NSDL)等,及其各种组合的描述语言指定该电路描述文件。系统描述文件211包括一个或多个电路板/固定装置网表文件。该电路板/固定装置网表文件包括和设备的物理描述相关的文件,用于描述网表、连接及类似信息。可以以任何合适的格式,诸如PCB、Gerber和/或适于电路板/固定装置网表文件的任何其他格式,指定电路板/固定装置网表文件。系统描述文件211包括一个或多个其他描述文件。该其他描述文件可以包括用作生成电路模型的输入的任何其他合适的描述文件。例如,其他描述文件包括任何合适的应用特定和/或工具特定的描述语言文件,诸如Asset的Macro语言、Go印el的CASLAN语言和/或任何其他合适的描述语言文件。TGT构成器212对系统描述文件211进行处理以生成电路模型213。能以任何合适的方式执行TGT构成器212对系统描述文件211的处理以生成电路模型213。电路模型 213指定对其运行TGT210的被测系统或部分被测系统的模型。TGT构成器212向TGT算法 214提供电路模型213。TGT算法214接收电路模型213。TGT算法214处理该电路模型213以生成TGT原子测试操作216。可以以任何合适的方式执行由TGT算法214对电路模型213的处理以生成TGT原子测试操作216。SC220包括SC前端算法222和SC后端算法224。SC前端算法222接收计算机科学源文件221作为输入。该计算机科学源文件221 包括能由编译器编译的任何合适的计算机科学源文件。例如,计算机科学源文件221能包括用于任何合适的计算机编程语言的计算机科学源文件,诸如C++、Java, Python等,及其各种组合。例如,计算机科学源文件221能包括一个或多个C文件、一个或多个C++文件和 /或任何其他合适的计算机科学源文件。SC前端算法222处理计算机科学源文件221以生成程序模型223。该程序模型 223指定计算机科学源文件221的中间表示。SC前端算法222向SC后端算法2M提供程序模型223。SC后端算法2M接收程序模型223作为输入。该SC后端算法2M处理该程序模型223以生成包括ISA原子操作226的一个或多个ISA 二进制文件225。可以以任何合适的方式执行由SC后端算法2M对程序模型223的处理以形成该ISA 二进制文件225。ISA 原子操作2 是实施TISA的处理器支持的汇编级指令。如图2所示,除了 TGT210和SC220的各自处理流程,也能利用TGT210和SC220之间的其他交互以用于控制TISA原子操作235的生成。在一个实施例中,SC后端算法2M能初始化一个或多个矢量计算请求230至TGT算法214。当SC后端算法需要访问TAP时,SC 后端算法2M初始化矢量计算请求230。TGT算法214 —旦从SC后端算法2M接收矢量计算请求230,则根据所接收的矢量计算请求230生成对于TAP的一个或多个TGT原子测试操作216。然后以受到SC后端算法2M控制的方式将一个或多个TGT原子测试操作216应用于TAP,这是因为TGT原子测试操作216和ISA原子操作2 结合能使用ISA原子操作2 对TGT原子测试操作216进行算法控制。这样,SC220提供对TAP的访问的算法控制。如图2所示,除了 TGT210和SC220,TSllO进一步包括TISA构成器240。TISA构成器240接收TGT原子测试操作216和ISA原子操作226。TISA构成器240将TGT原子测试操作216转换为TISA指令并将该TISA指令插入到ISA 二进制文件225 ( S卩,结合TISA指令和ISA原子操作226以形成包括TISA原子操作M6的TISA 二进制文件M5)。TISA构成器240可以是TGT210的一部分、SC220的一部分、拆分到TGT210和SC220、独立于TGT210和SC220实施等。可以理解的是,可以以任何其他合适的方式及其组合存储、显示、执行、传播和/ 或处理参考图2所示出和描述的各种输入和输出。图3示出了图1的测试系统的一个实施例的高级框图,包括协作生成用于被测系统的测试指令的测试生成工具和软件编译器。如图3所示,图3的TSllO以类似于图2的TSllO的方式运行,在于利用测试生成工具和软件编译器之间的交互生成包括TISA原子操作的TISA 二进制文件;然而,图3的 TSllO中测试生成工具和软件编译器之间的交互不同于图2的TSllO中测试生成工具和软件编译器之间的交互。如图3所示,TSllO包括测试生成工具(TGT) 310和软件编译器(SC) 320。TGT310并包括TGT构成器312和TGT算法314。TGT构成器312接收系统描述文件311作为输入。系统描述文件311包括TGT能用于生成测试指令/矢量以用于测试被测系统的所有合适的描述文件。例如,系统描述文件311包括电路描述文件、电路板/固定装置网表文件、其他描述文件等,及其各种组合。图 3的系统描述文件311包括类似于参考图2所示和描述的系统描述文件211(例如,一个或多个电路描述文件、一个或多个电路板/固定装置网表文件、一个或多个其他描述文件等, 及其各种组合)。系统描述文件311能在TGT310上获得和/或从一个或多个远程组件和/ 或系统获取。TGT构成器312接收一个或多个测试操作描述文件3311-331N (统称为测试操作描述文件331)作为输入。由SC320生成该测试操作描述文件331。下文将详细描述由SC320 对测试操作描述文件331的生成。TGT构成器312处理该系统描述文件311和该测试操作描述文件331以生成电路模型313。能以任何合适的方式执行由TGT构成器312对系统描述文件311的处理以生成电路模型313。电路模型313指定对其运行TGT310的被测系统或部分被测系统的模型。系统描述文件311结合测试操作描述文件331的处理使TGT构成器312生成电路模型313,以使TGT310生成合适的TAP原子操作。该TGT构成器312向TGT算法314提供该电路模型 313。TGT算法314接收电路模型313。TGT算法314处理该电路模型313以生成TGT原子测试操作316。能以任何合适的方式执行由TGT算法314对电路模型313的处理以生成 TGT原子测试操作316。如图3所示,除了 TGT310和SC320,TSllO还包括TISA翻译器340。该TISA翻译器340接收TGT原子测试操作316。TISA翻译器340翻译TGT原子测试操作316以形成 TISA原子测试操作346。TISA翻译器340向SC320提供TISA原子测试操作346以包括在软件编译处理中。下文将详细描述SC320对TISA原子测试操作346的使用。TISA翻译器 340可以是TGT310的一部分、SC320的一部分、拆分到TGT310和SC320、独立于TGT310和 SC320实施等。SC320包括SC预编译器330、SC前端算法322和SC后端算法324。SC预编译器330接收计算机科学源文件321。计算机科学源文件321包括能由编译器编译的任何合适的计算机编程源文件。例
10如,计算机科学源文件321包括用于任何合适的计算机编程语言的计算机编程源文件,诸如C++、JaVa、Pyth0n等,及其各种组合。例如,计算机科学源文件321包括一个或多个C文件、一个或多个C++文件和/或任何其他合适的计算机科学源文件。SC预编译器330对该计算机科学源文件321进行处理。SC预编译器330处理计算机科学源文件321,生成预处理的计算机科学源文件 321P。可以以任何合适的方式由SC预编译器330预处理计算机科学源文件321以形成预处理的计算机科学源文件321P。SC预编译器330向前端算法322提供该预处理的计算机科学源文件321P。SC预编译器330在计算机科学源文件321的处理过程中检测测试操作,并生成测试操作描述文件331。能使用任何合适的测试描述语言指定该测试操作描述文件331 (例如,利用一个或多个标准测试描述语言、利用TGT310特定的测试描述语言等,及其各种组合)。SC预编译器330向TGT310提供测试操作描述文件331 (示意性地,提供到TGT310的 TGT构成器312),该TGT构成器312结合系统描述文件311处理测试操作描述文件331以生成电路模型313。SC前端算法322接受预处理的计算机科学源文件321P。SC前端算法322还接受 TISA原子测试操作346,该TISA原子测试操作346由TISA翻译器340利用TGT310从测试操作描述文件331生成的TGT原子测试操作316生成。SC前端算法322编译预处理的计算机科学源文件321P和TISA原子测试操作346以生成程序模型323。该程序模型323指定预处理的计算机科学源文件321P的中间表示,该中间表示包括TISA原子测试操作346,以使在ISA原子操作中集成TISA原子测试操作346以形成TISA原子操作。SC前端算法322 向SC后端算法3M提供给程序模型323。SC后端算法3 接受程序模型323。SC后端算法3 对程序模型323进行处理以生成包括TISA原子操作356的一个或多个TISA 二进制文件355。可以以任何合适的方式执行由SC后端算法3M对程序模型323的处理以形成包括TISA原子操作356的TISA 二进制文件355。TISA原子操作356包括ISA原子操作(即,对其实施TISA的处理器所支持的汇编级指令)以及TISA原子测试操作346。TISA原子操作356提供对于TGT原子测试操作316 (即以TISA原子测试操作346 的方式)的算法控制(使用ISA原子操作),借此对应用TISA原子操作356的被测系统能够提供改进的系统测试。因此,以受到SC后端算法324的控制的方式将TGT原子测试操作 316 (即以TISA原子测试操作346的方式)应用于TAP,这是因为TGT原子测试操作316和 ISA原子操作结合以能够利用ISA原子操作对TGT原子测试操作316进行算法控制。这样, SC220提供访问TAP的算法控制。可以理解的是,参考图3所示出并描述的各种输入和输出可以以任何其他合适的方式及其组合存储、显示、执行、传播和/或处理。参考图2和图3,虽然主要参考特定数量的输入文件、中间文件、模型、输出文件等示出并描述图2和图3的实施例,但可以理解的是可以使用任何合适数量的输入文件、中间文件、模型、输出文件等实施图2和图3的实施例以及在此提供的各种相关教导。图2和图3示出了其中利用计算机科学能力以改进系统测试能力的方式(例如,提供系统测试的更细粒度控制、实现交互系统测试、实现系统测试期间的交互调试,并提供在此示出并描述的各种其他优势)。图2和图3的系统测试方案提供对诸如STAPL的现有方法的改进,其目标在于向矢量格式添加编程特征,并因此从头开始增加调试、远程访问和交互特征。相比而言,TISA利用来自计算机编程和嵌入式应用的信息量以控制系统测试的测试访问。参考图2和图3,可以理解的是TISA的能力和特性由其抽象层确定,即,TISA原子操作的定义越精细,TISA的性能越优异。在一个实施例中,其中TISA实施在JTAG架构中,支持用于扫描操作三个抽象层。第一个抽象层是矢量层。矢量层是三个抽象层中最粗粒度的,其中,原子操作是扫描矢量的输入和输出。矢量层最好以矢量格式表示,诸如串行矢量格式(SVF)或任何其他合适的矢量格式,并给与最高级别的控制。第二个抽象层是TAP层。在TAP层中,对原子操作进行升级以允许完全控制TAP 状态机。这样能更精确地控制扫描操作、支持非标准序列(例如,如在可寻址阴影协议或其他类似协议中需要的非标准序列)。第三个抽象层是扫描段层。扫描段层是三个抽象层中最细粒度的。矢量层和TAP 层抽象层使用扫描矢量作为原子数据格式,该原子数据格式对于涉及整个扫描链的常规一致性测试是足够的,但对于基于设备的测试来说是繁重的,其中,需要精细控制几十或几百个构成扫描链的设备。扫描段层允许定义整个扫描路径内的“扫描段”,该操作能单独处理, 借此提供灵活强大的原语集合,该原语集合能用于直接定义问题空间中的扫描操作并在实施时解决扫描操作。本方法优选在嵌入式应用中,其中可用的计算资源是十分有限的。下文将详细描述扫描段层的使用。如图2和图3所示,无论扫描操作的抽象层,TGT计算生成的TAP原子操作(示例性地,TGT原子测试操作216和TGT原子测试操作316)都被转换为对应的TISA原子测试操作并插入到二进制可执行文件(即,插入到SC生成的ISA原子操作中)。参见图2,TGT原子测试操作216和ISA原子操作2 经处理形成TISA 二进制可执行文件(示例性地,TISA 二进制文件M5)中的TISA原子操作M6。TISA原子操作246 包括TISA原子测试操作和ISA原子操作。参见图3,在不需要修改SC310的SC前端3M的情况下,可以将TISA原子测试操作(该TISA原子测试操作由TISA翻译器340从TGT310生成的TGT原子测试操作316生成)作为预编译汇编指令输入到SC前端324。可以理解的是基本上所有的编程语言都允许该操作。例如,在C语言中,利用“asm”命令获取该操作。在一个实施例中,需要对SC后端算法3M进行细微修改(例如,以处理TISA汇编指令的二进制转换)。在此参考图IlA和 IlB示出并描述该处理的示例。虽然已主要参考JTAG架构中TISA原子操作的粒度级别示出并描述,但本领域普通技术人员可以理解的是在其他架构中能使用相同粒度级别的TISA原子操作,在JTAG架构和/或其他架构中能使用不同粒度级别的TISA原子操作等,及其各种组合。如以上所述,能利用任何合适的指令集体系结构(ISA)实施TISA。例如,能使用 SPARC V8 ISA、INTEL ISA 等实施 TISA。为了便于清楚描述TISA的实施,在此参考图4A-4E示出并描述利用SPARC V8 ISA的TISA的示例性实施例。在该示例性实施例中,TISA实施为矢量层TISA,其允许直接编码构成SVF格式的指令;然而,如上文所述,可以理解的是,也可以执行利用SPARC V8 ISA实施TISA,其中TISA被实施为TAP层TISA或扫描段层TISA。SPARC V8 ISA在许多产品中实施,诸如开源软处理器系列Leon 2和Leon 3。回顾由SPARC国际公司在1992年发布的“SPARC结构手册版本8”(下文称为 “SPARC结构手册”)表明存在许多没被SPARC V8 ISA利用的码字。至少从附录F的“操作码和条件代码”可以明显看出。图4A示出了 SPARC V8 ISA的未被利用的码字。图4所示出的未被利用码字能用于编码TISA的“测试”指令。更具体而言,当“op”和“op2”都设置为零时,该指令在“The SPARC Manual Version 8”中标记为未实施的,以使该指令能用于TISA。图4B示出了能表示所有十三个SVF指令的编码格式。如图4B所示,比特位30-25 包括指令自身的编码,如有TAP状态与该指令一起使用,则比特位21-18可用于编码该TAP 状态,以及当需要时每个指令可以使用比特位17-14来指定可选信息。图4C示出了 IEEE1149. 1 TAP的TAP状态的示例性比特位编码。使用第一列、第二列和第三列表示TAP状态的比特位编码,其中第一列表示IEEE1149. 1 TAP状态名,第二列表示和IEEE1149. 1 TAP状态名相关的SVF TAP状态名,以及第三列表示图4B的比特位 21-18的位编码。可以理解的是,能以各种其他方式将比特位编码分配给TAP状态。SVF指令允许使用多个参数,需要在最后代码中编码这些参数。为了表示这些参数,并符合保持指令和数据分离的通常架构最佳实践,为此矢量层TISA的示例性实施定义基于寄存器的参数传递。因此,矢量层TISA提供六个专用32位寄存器GENERIC1、 GENERIC1、TDI、TDO、MASK和SMASK。在图4D中示出了这六个专用32-位寄存器。下文中将详细描述这六个专用32-位寄存器的使用,但作为一般规则,这些寄存器或用于存储参数或用于指向存储参数的存储器位置。因此,在编译时,在TISA指令被调用前,标准的ISA 指令能用于加载这些寄存器。更具体而言,在TISA的SPARC V8 ISA实施中,协处理器寄存器能直接用作通常加载/存储指令的参数。在TISA的SPARC V8 ISA实施中可能使用的SVF指令包括ENDDR、ENDIR、STATE、 FREQUENCY、ΡΙΟ、PIOMAP, HDR、HIR、TDR、TIR、SDR、SIR 和 RUNTEST。通过参考 ASSETI InterTech公司1997年发布的“串行矢量格式参考”(下文中称为“SVF手册”)能更好的理解这些SVF指令,该SVF手册以全文引用的方式包含于此。下文将更详细地描述在TISA 的SPARC V8 ISA实施中这些SVF指令的使用。ENDDR, ENDIR, STATEENDDR和ENWR指令指示TAP接口结束其操作时的TAP状态。STATE指令使TAP 接口进入特定状态。在这个TISA的示例性实施中,如图4E所示,ENDDR,ENDIR, STATE指令的SVF编码分别是“000000”、“000001”和“000010”。当需要时,可以使用“TAP STATE” 文件(即,图4C所示的TAP状态的示例性比特位编码)执行这些SVF指令的SVF编码。根据对SVF手册的回顾至少可以理解,STATE指令可以可选地采用显式的序列状态作为参数。 在TISA的此示例性实施中,将显式的序列状态作为参数将通过一系列指令进行编码,一个指令用于序列中的每个状态。FREQUENCY
13
FREQUENCY指令用于指定TAP接口的工作频率。FREQUENCY指令表示为32位整数的赫兹周期。在TISA的此示例性实施中,如图4E所示,FREQUENCY指令的SVF编码是 “000011”。FREQUENCY指令的值存储在GENERIC1寄存器中。ΡΙ0, PIOMAPPIO指令用于处理并行矢量,以之前通过调用PIOMAP设置的格式。在RISA的此示例性实施例中,将PIOMAP看作生成合适命令以建立TAP接口的预处理器指示。因此,PIO 指令仅仅需要表示并行矢量,可以通过(在GERERIC1寄存器中)指示其中存储并行矢量的地址来表示。在指令的比特位13-0指定组成矢量的字数“n”,并因此,该矢量具有的尺寸上限为213 = 8K字=3 字节。如果矢量大小不是字的精确倍数,当需要时可以在存储器中提供填充和重对齐。在TISA的此示例性实施例中,PIO指令的SVF编码是“000100”。HDR, HIR, TDR, TIRHDR,HIR,TDR和IlR指令的作用各不相同。在此,一起考虑这些SVF指令是因为 ⑴这些SVF指令功能上类似(S卩,即使它们是不同的类型,但它们都控制位移操作),以及 (2)这些SVF指令接受相同的参数(1)长度表示位移的比特位数的32位数字;(2) TDI (可选)输入位移矢量;(3)TD0(可选)期望的输出位移矢量;(4)MASK(可选)当将实际值和TDO比较时使用的掩码,“1”表示关心,“0”表示不关心;(5)SMASK(可选)标记在TDI中要考虑哪些比特位的掩码,“ 1”表示关心,“0”表示不关心。在TISA的此示例性实施例中,如图4E所示,HDR、HIR、TDR和IlR指令的SVF编码分别是 “000110”、“000111”、“001010” 禾口 “001011”。在TISA的此示例性实施例中,可使用如下额外的编码(1)长度被保存在GENERIC1寄存器中;(2)当TDI出现时01为“1”,否则为零。如果设置,TDI寄存器包含存储输入矢量的地址;(3)当TDO出现时02为“1”,否则为零。如果设置,TDO寄存器包含存储期望输出的地址;(4)当MASK出现时03为“1”,否则为零。如果设置,MASK寄存器包含存储输出掩码的地址;以及(5)当SMASK出现时04为“1”,否则为零。如果设置,SMASK寄存器包含存储输出掩码的地址。SDR, SIRSDR和S^指令具有与HDR、HIR、TDR和IlR指令相同的语法,但功能上不同SDR 和S^触发TAP上的实际扫描操作。在交互测试中,从系统读取的实际输出矢量是算法的基础,因此,TISA提供了在存储器中存储实际输出矢量的可能性。当“TAP STATE”字段(如图4B所示,比特位21-18)不同于零时,GENERIC2寄存器指示实际输出矢量的存储位置。因此,SDR和S^可以支持最大七个参数。如SPARC结构手册的4. 2章所描述的,如果指定TDO并且实际输出矢量不同于期望输出矢量,则在处理器状态寄存器(PSR Processor State Register)中设置溢出标志。RUNTESTRUNTEST指令使得TAP接口在特定的状态运行特定的时间长度的测试,并主要用于控制RUNBIST操作(例如,如IEEE1149. 1所定义)。RUNTEST指令接受如下参数中的一个或多个(所有这些参数都是可选的)(1)run_state接口在测试执行期间必须维护的状态;(2)run_count测试必须采用的时钟周期数量;(3)run_clk:run_count参考哪个时钟(TCK =TAP时钟,SCK 系统时钟);⑷min_time 以秒计的最小运行时间,表示为实数;(5)max_time以秒计的最大运行时间,表示为实数;以及(6)endstate在命令结束时接口必须达到的状态。 在TISA的此示例性实施例中,RUNTEST指令的SVF编码可以是“000101 ”或者“100101”。在TISA的此示例性实施例中,可使用如下额外的编码(1)TAP_STATE 其包含被定义的 run_state ;(2)01 如果定义 TAP_STATE 则为 ‘1,,否则为 ‘0,;(3)02 如果指定 mirucount 则为 ‘1,,否则为 ‘0' 如果设置,GENERIC1寄存器包含min_count的32位无符号表示;(4)03 如果设置max_COunt则为‘1,,否则为‘0,。如果设置,GENERIC2寄存器包含max_count的32位无符号表示;(5)04 如果设置endstate则为‘1,,否则为‘0,。如果设置,比特位13-10包含该
结束状态。(6)比特位9-0 如果指定rurucount,则表示为无符号整数(run_COimt最大值= 210 = 1024) ο 如果该字段不是“0”,则比特位 30 指示 run_clock( ‘ 1,= TCK,‘0,= SCK)。虽然在TISA的此SPARC V8 ISA实施例中主要参考特定的SVF指令的使用进行示出和描述(即,ENDDR、ENDIR、STATE、FREQUENCY、ΡΙΟ、PIOMAP、HDR、HIR、TDR、TIR、SDR、SIR 和RUNTEST),但可以理解的是也能使用更少或更多的SVF指令。虽然在此主要参考利用SPARC V8 ISA的TISA的实施例进行示出并描述,但可以理解的是根据在此所示出并描述的TISA教导也能使用各种其他ISA。在交互性测试方法中,数据切换(handoff)点非常重要。如上文所述,测试程序由两个主要部分组成算法部分(表示为软件编译器)和测试访问部分(表示为测试生成工具)。在使用测试程序的测试操作中,会出现如下时刻测试程序正访问被测系统的时刻, 以及当测试程序正检查测试结果并决定所需下一步骤的时刻。这两个操作之间的切换对于获取高效的交互性测试非常重要。在诸如SVF和STAPL的现有基于脚本的方法中,脚本处理矢量层的所有TAP操作。 在该层中,接口(或“播放器”)能与TAP协议进行通信,并发送/接收矢量至/自被测系统。 而且,STAPL也允许某些对位矢量的基本流程控制(if-then-else)以及算法操作。如果需要更复杂的处理(例如,识别所接收矢量内的寄存器,或计算矢量以访问特定设备),播放器将控制权交给算法部分。在STAPL中,可通过“导出”(“export”)命令进行该操作。然而,遗憾的是,SVF和STAPL都不具有它的标准格式(例如,对于STAPL,切换处理通常是某些厂家专有的)。在现有的嵌入式方法中,如Ericsson的主测试控制器(MTC)和系统BIST处理器, 在算法部分和测试访问部分使用相同的划分。在这样的嵌入式方法中,算法部分和测试访问部分由必须单独编程的不同协处理器执行。而且,算法部分和测试访问部分的存储空间是物理上不同的,因此生成的切换机制类似于STAPL的切换机制。结果使得用于测试访问部分的协处理器在切换到算法部分之前存储许多扫描操作,考虑到增加的扫描链大小,该协处理器会需要大量资源。与现有的集成测试方法相比(例如,诸如SVF和STAPL的基于脚本的方法,以及诸如MTC和系统BIST处理器的嵌入式方法),TISA在算法部分(即常规ISA)中集成测试访问部分(即测试操作),以使测试访问部分和算法部分共享相同的物理存储空间,因此使得测试访问部分和算法部分之间的切换(以及由此的数据传递)自动化。在TISA中,在指令层执行测试访问部分和算法部分之间的切换,以使处理器能根据相关的调度策略当需要时灵活地混合扫描和算法(即,灵活地混合测试操作和算法操作)。在TISA的此示例性实施例中,使用SPARC V8 ISA,处理矢量的所有操作使用绝对寻址(如上述参考SVF指令所描述的)。结果,可以像ISA程序中的标准变量一样使用测试矢量,由此使得测试访问部分和算法部分之间的接口自动化。作为示例,根据上文所述的使用SPARC V8 ISA的TISA的示例性实施例,如下步骤举例说明典型的测试序列(I)SDR指令用于从被测系统获取测试输出数据。生成的输出数据置于特定的存储器位置(例如,GENERIC2寄存器中的“实际”参数);(2)常规LOAD指令传输该将被加载到寄存器中的输出数据;(3) 一旦输出数据被加载到寄存器中,可使用算术操作和/或逻辑操作处理输出数据(注意因为SPARC V8 ISA是加载/存储结构,所有的数据在被处理前都必须加载到处理器中);(4)常规STORE指令用于将算法结果传输到存储器中;(5) SDR指令将新的测试输入数据发送到TAP (例如,使用TDI寄存器中的“TDI ”参数)。注意,常规算术操作(2)44)对于任何ISA算术实施都是标准的,绝不能由TISA 修改。因此,从这个简单示例可以看出,使用在算法部分和测试访问部分之间具有正常有效的切换的任何给定算法或计算机程序都能支持TISA。在TISA的此示例性实施例中,使用SPARC V8 ISA,采用绝对寻址(为了清楚描述 TISA);然而,本领域普通技术人员根据在此的教导告知可以修改TISA的此示例性实施例以支持在SPARC结构手册中描述的所有合法SPARC V8寻址模式。虽然在此主要参考其中利用SVF的TISA的示例性实施例进行示出并描述,在示例性实施例中利用SVF是因为它是已被证实能提供完整甚至基础的1149. ITAP处理的众所周知的格式,但本领域技术人员根据在此的教导告知可以理解,能够使用任何其他合适的控制格式实施TISA,其中许多格式允许更精细的TAP状态机控制并支持更复杂的测试操作。
虽然在此主要参考其中抽象层是矢量层的TISA的示例性实施例进行示出并描述,但本领域技术人员根据在此的教导告知可以理解,可以修改在此示出并描述的示例性 TISA实施例,以使TISA的抽象层是TAP层或扫描段层。为了清楚地描述TISA,在此参考图5和图6示出并描述在示例性被测系统上执行测试的TISA的示例性使用。在TISA的此示例性使用中,TISA被实施为使用SPARC V8ISA 和SVF的矢量层TISA(即,继参考图4A-4E所示出并描述的示例性实施例)。图5A和图5B示出了对被测系统执行测试的TISA的示例性使用。图5A示出了包括JTAG TAP510和被测系统520的系统测试环境500。JTAG TAP510提供到被测系统520的测试访问。JTAG TAP510提供到被测系统520 的测试访问,用于向被测系统520发送输入数据并从被测系统520接收输出数据。JTAG TAP510包括指令寄存器(IR) 512,该寄存器是8位指令寄存器。JTAG TAP510由测试系统控制(例如,诸如参考图3示出并描述的测试系统110, 为了清楚起见,在此将其省略)。被测系统520包括第一电路板521(表示为Bi)和第二电路板525 (表示为B2)。 第一电路板521包括发送器522 (表示为T)。第二电路板525包括接收器5 (表示为R)。 发送器522在连接5 上将数据发送到接收器526。在本示例中,连接5 是8位连接。如图5A所示,从JTAG TAP510经由每个电路板自身的扫描链可访问每个电路板。 即,经由第一扫描链523可访问第一电路板521并经由第二扫描链527可访问第二电路板 525。第一扫描链523和第二扫描链527可由JTAG TAP510的IR512选择(即,IR = 0选择第一电路板Bi,IR= 1选择第二电路板B2)。发送器522和接收器5 在它们的电路板上都不是孤立的,而是更大的扫描链的一部分(例如,对于该示例,分别具有M比特位和16 比特位)。在测试程序中,经由第一扫描链523将输入数据发往发送器522,并通过利用第二扫描链527从接收器5 收集生成的输出数据。为了执行详尽的测试,通过连接5 发送所有可能的值,以使通过连接5 发送观=256个矢量。使用C语言的示例性程序如下1include <stdio.h>
2include <jtag.h>
3
4char sent_value, received value;
5
6define MAX COUNT 256;
7
8void main(void)
9{
10for (sent_value=0;sent_value<MAX_COUNT;sent_value++) H(
12apply_JTAG(sent—value,Bi.T);
13read JTAG (received_value,B2 .R);
14if (sent—value != received value) exit (0);
15}
16exit(l);
17}在该程序中,第2行包括处理JTAG操作的C模块,其中定义了分别用在12行和 13行的函数“apply_JTAG”和“Read_JTAG”。SC320的预编译器330识别这些函数并生成 TGT310的测试操作描述文件331。测试操作描述文件331的格式取决于第一电路板521 和第二电路板525的实际实施而变化。例如,如果第一电路板521和第二电路板525都是 IJTAG兼容的,则可以例如利用新扫描描述语言(NSDL)编码指定测试操作描述文件331。 TGT310利用测试操作描述文件331生成TGT原子测试操作316,TISA翻译器340将这些 TGT原子测试操作316翻译为TISA原子测试操作346。TISA原子测试操作346被提供给 SC320的前端324。图5B所示为TGT原子测试操作316、TISA原子测试操作346和生成的 TISA 二进制编码。图5B示出了由执行图5A的系统测试环境500的测试的测试系统使用的从C命令到TISA编码的映射。如图5B所示,使用具有如下四列的表格540表示从C命令到TISA编码的映射“C 命令”列541、“SVF指令”列542、“TISA汇编程序”列543以及“TISA编码”列544。表格 540从左到右示例性示出C命令被翻译成SVF指令、SVF指令被翻译成TISA汇编程序、TISA 汇编程序被编码为TISA 二进制编码的方式。Apply_JTAG (value, Bi. Τ)命令被翻译成两个 SVF 命令SIR 8 TDI (00)和 SDR 24 TDI (value)。
SIR 8 TDI (00) SVF指令被翻译成TISA汇编程序的如下三个操作SET 8,% cGENERIClSET 00,% cTDISIR TDI,其被翻译成 TISA 编码 12010000。SDR 24 TDI (value) SVF指令被翻译成TISA汇编程序的如下三个操作SET 24,% cGENERIClSET value, % cTDISDR TDI,其被翻译成 TISA 编码 10010000。Read_JTAG (value, B2. R)命令被翻译成两个 SVF 指令SIR 8 TDI(Ol)和 SDR 16 ACTUAL(value)。SIR 8 TDI (01) SVF指令被翻译成TISA汇编程序的如下三个操作SET 8,% cGENERIClSET 01,% cTDISIR TDI,其被翻译成 TISA 编码 12010000。SDR 16 ACTUAL (value) SVF指令被翻译为TISA汇编程序的如下三个操作SET 16,% cGENERIClSET “value”,% cGENERIC2SDR ACTUAL,其被翻译成 TISA 编码 10008000。没有指定SET操作的TISA编码,这是因为SPARC V8手册将它们识别为“伪指令”, 随着处理器的实施,伪指令具有不同的编码。利用所确定的TISA编码,预编译器330现在可用高级JTAG访问相关的TISA汇编指令取代该高级JTAG访问。结果是下列用C指定的编码,其中调用JTAG TAP已经由相关的TISA汇编编码代替
191include <stdio.h>
2include <jtag.h>
3
4char sent—value, received value;
5
6define MAX—COUNT 256;
7
8void main(void)
9{
10for (sent_value=0;sent_value<MAX_COUNT;sent_value++)
11 12
13
14
15
16
17
18
19
20
21 22
23
24
25
26 27可将这些编码输入到前端算法322,该前端算法3 将生成程序模型323。可将该程序模型323输入到后端算法324,该后端算法3 将生成包括TISA原子操作356的可执行TISA 二进制文件355。
20
asm volatile ("SET 8, %cGENERICl; SET 00,%cTDI; SIR TDI;
SET 24, %cGENERICl; SET &sent_value,%cTDI; SDR TDI;"); asm volatile ("SET 8, %cGENERICl; SET 01, %cTDI; SIR TDI;
SET 16, %cGENERICl; SET &received_value, %cGENERIC2; SDR ACTUAL"); if (sent_value != received value) exit (0);
}
exit(l);
表格MO的“TISA编码”列示出了 TISA汇编指令的二进制编码(例如,如参考图 4A-4E所示出并描述的,使用参考利用SPARC V8 ISA的TISA的示例性实施例定义的各种规则)。如在此描述的,TISA提供在执行被测系统的测试中关于测试粒度的完全自由 (即,从TAP层到扫描段层)。如图2和图3所示,并使用图4A-4E和图5A-5B的示例性TISA 实施进一步解释,使用由软件编译器到测试生成工具的显式查询可以计算测试模式,以使对软件算法的唯一限制是查询本身的清晰度。作为示例,在粗糙层,从SC到TGT的查询包括被测系统的整个扫描链(例如,诸如在常规的基于BSDL边界扫描测试中)。作为示例,在精细层,从SC到TGT的查询包括寄存器或偶数比特。例如,专用扫描段原语可以显著加快设备访问和TAP重新配置,促进编码重用以及提供各种其他好处。作为示例,在粗糙层和精细层之间某处的中间层,功能性地执行从SC到TGT的查询(例如,使用诸如IJTAG的标准和其他合适的标准,并使用诸如NSDL和其他合适的面向对象描述语言的描述语言)。如此,TISA使得不在模型空间(即,在TGT中)推行有待解决的设备/寄存器访问,而是允许开发者在问题空间(即,在SC中)处理设备/寄存器访问,借此使得开发者能够根据他们的需要和可用的资源调整分析粒度。而且,在TISA处理器具有足够资源的实施例中,例如,诸如对于自动测试设备 (ATE)的情况,能在程序模型中实施至少一部分电路模型,因此能使TISA器直接计算矢量模式。而且,TISA能支持之前没有TISA时不可能具有的各种其他系统测试能力,诸如包括交互调试(本地和/或远程)的交互测试、并发性、可移植性等,及其各种组合。现在将详细阐述这些额外的能力。图6示出了支持交互性测试能力的基于TISA测试环境的实施例。如图6所示,基于TISA的测试环境600包括主机(HC) 601、测试系统(TS) 610和被测系统(SUT) 620。HC601被配置用于控制TS610以控制SUT620的测试。HC601包括耦接到存储器 604的处理器602。处理器602和存储器604可以是任何合适的处理器和存储器。存储器604存储一个或多个调试控制程序605。调试控制程序605能使HC601跟踪,并在需要或必要时变更运行在TS610上计算机程序执行。例如,调试控制程序605包括一个或多个GNU调试器(⑶B)、dbx调试器、Perl调试器、Bash调试器、Python调试器,及类似的合适的调试程序及其各种组合。存储器604也能存储一个或多个调试显示程序606。调试显示程序606能使HC601 显示和调试控制程序605相关联的信息。能以任何合适的方式由调试显示程序606显示和调试控制程序605相关联的信息(例如,使用一个或多显示设备)。例如,调试显示程序606 包括一个或多个hsight (其是到⑶B的图形用户接口)、数据显示调试器(DDD,其为各种命令行调试器提供图形用户接口,诸如GDB及其他)、及类似合适的调试器显示程序,及其各种组合。TS610由HC601控制用于测试SUT620。TS610被配置用于与TISA —致的方式运行(例如,诸如参考图1-图3的TSllO示出并描述的)以及,进一步被配置用于支持交互性测试(例如,通过启动由HC601上运行的调试器访问)。TS610包括耦接到存储器614的TISA处理器612。可以利用任何合适的处理器, 诸如SPARC V8(如参考图4A-4E和图5示出并描述的)、INTEL等实现TISA处理器612。存储器604可以是任何合适的存储器。存储器614存储一个或多个调试程序余段(stub) 615。调试程序余段615获知在 HC601上运行的对应调试控制程序的调试协议,因此能使HC601与TS610通信。例如,调试余段615包括一个或多个⑶B余段、DBX余段、Perl余段、Bash余段、Python余段,及类似合适的调试程序余段,及其各种组合。存储器614存储TISA 二进制文件616。以参考图2和图3所示并描述的方式由 TS610生成该TISA 二进制文件。由TISA处理器612执行该TISA 二进制文件616以对SUT 620进行测试。TS610还包括耦接到TISA处理器612的测试访问端口(TAP)618。TAP 618提供 TISA处理器612和SUT 620之间的测试接口以使TISA处理器612执行在由HC601控制时的SUT 620的测试。TAP618可以是任何合适的TAP(例如,1149. 1TAP)。TISA处理器612使用接口 617与TAP 618连接。接口 617可以是TAP和被测系统之间任何合适的接口(例如,诸如支持TCK,TMS, TDI, TDO和可选地TRST的接口,其中TAP 618 被实施为 1149. 1 TAP)。如图6所示,HC 601和TS 610之间具有接口 609。接口 609可以支持HC601和 TS610之间的本地通信和/或远程通信。因此,HC 601可经由TS610本地和/或远程地控制SUT 620的交互性测试。例如,对于本地测试,接口 609能实施为一个或多个通用异步收发器(UART)接口、 串行接口等,及其各种组合。例如,对于远程测试,可利用任何合适的通信能力,诸如传输控制协议(TCP)/网络协议(IP)或任何其他合适的通信协议实现接口 609。这样能远程测试,其中HC601和 TS610分隔很远的地理距离,并且HC601仍能控制TS610以执行SUT620的测试。在基于TISA的测试环境600中,HC601通过经由标准连接(例如UART、TCP/IP 等)控制TS610的操作而能逐步地控制对SUT620的测试执行,因此实现交互性测试和调试能力。虽然为了清楚起见而省略,但可以理解的是HC601和TS 610可包括各种其他组件,诸如其他处理器、其他存储器、内部通信总线、输入/输出模块、其他支持电路(例如,电源)等,及其各种组合。虽然为了清楚起见而省略,但可以理解的是SUT620可以是利用TISA测试的任何被测系统。虽然主要参考特定类型的调试控制程序、调试显示程序、接口等示出并描述,但可以理解的是能使用各种其他调试控制程序、调试显示程序、接口等、及其各种组合以实现完全交互性测试的方式实施基于TISA的测试环境600。图7示出了图6的基于TISA测试环境的示例性实施例。如图7所示,图7的示例性基于TISA测试环境是图6的基于TISA的测试环境600的实施,其中GNU工具套件用于支持图5A的示例性系统测试环境的交互性测试。如图7所示,示例性基于TISA的测试环境700包括主机(HC) 701、测试系统 (TS) 710 和被测系统(SUT) 720。HC701包括处理器702和存储器704。图7的HC 701是图6的HC 601的实施,其中使用⑶B (⑶B 705)实施调试控制程序605并使用DDD (DDD 706)实施调试显示程序606。TS710包括TISA处理器712和存储器714。图7的TS 710是图6的TS 610的实施,其中使用SPARC V8 ISA(表示为SPARC V8 TISA处理器712)实施该TISA处理器 612,使用⑶B余段(⑶B余段715)实施调试程序余段615,并基于和SPARC V8 TISA处理器 712 (TlSA 二进制文件716)相关联的SPARC V8 ISA生成TISA 二进制文件616。TS710还包括耦接到SPARC V8 TISA处理器712的测试访问端口(TAP) 718。图7 的 TS 710 是图 6 的 TS 610 的实施,其中使用 1149. 1 TAP (1149. 1 TAP 718)实施 TAP618。SPARC V8 TISA 处理器 712 利用接口 717 与 1149. 1 TAP718 连接。接口 717 是标准1149. 1接口,它能支持TCK、TMS、TDI、TD0以及可选地TRST。SUT720是图5A的SUT 520。如同图5A的SUT520 —样,SUT720包括不同电路板上的发送器和接收器。1149.1 TAP718提供SPARC V8 TISA处理器712和SUT 720之间的测试接口,用于在受到HC701的控制下,使SPARC V8 TISA处理器712执行SUT720的测试。如图7所示,在HC701和TS710之间具有接口 709。接口 709支持HC701和TS710 之间的本地通信和/或远程通信(例如,经由网络)。因此,HC701经由TS710本地和/或远程地控制SUT720的交互性测试。在示例的基于TISA的测试环境700中,HC 701能通过经由于接口 709控制TS710 的操作而逐步地控制SUT720的测试执行,因此实现交互性测试和调试能力。可以理解的是图7左手边的大多数元件重用现有的计算机科学元件S卩,整个 HC701,以及TS 710上的⑶B余段(stub) 715。对于图7的中间部分同样如此,HC 701和 TS710之间(以及它们相关的子元件之间)的相似之处很明显。TISA允许利用整个架构以提供系统测试。作为示例,参考图5A的系统测试环境500 (包括相关示例性的C程序、SVF指令、 TISA汇编指令及TISA编码),通过利用⑶B (或任何其他合适的调试器),TISA可以实现许多交互性测试操作,诸如(a)在监视变量“sentjalue”和“receivecLvalue”的情况下逐步执行;(b)飞速修改要发送到tap的值(变量“sentjalue”); (c)修改循环结束条件; (d)监视所有变量等,及其各种组合。如上文所述,这些交互性测试操作是标准⑶B操作,由于TISA能在算法和测试访问部分之间自动切换控制,因此TISA能直接使用它们。在没有 TISA的情况下,需要开发特殊工具以适于每个切换实施。虽然在此主要参考使用GNU工具套件示出并描述图7的示例性基于TISA的测试环境700以支持具体被测系统的交互性测试,但本领域技术人员根据在此的教导告知可以理解,可以使用任何合适的工具套件来实现基于TISA的测试环境中的交互性测试能力以用于测设任何类型的被测系统。虽然在此主要参考线性测试进程示出并描述了图6的基于TISA的测试环境600 和图7的示例性的基于TISA的测试环境700,该线性测试进程遵循预定算法逐步执行测试(为了便于清楚描述TISA实现的交互性测试能力),但可以理解的是通过利用TISA实现的计算机科学经验和技术,其他更复杂的交互性测试场景也是可能的。在此参考图8示出并描述了 TISA实现的更加复杂的交互性测试场景的示例。可以理解,这仅仅是个示例,本领域普通技术人员根据在此的教导告知能在许多其他交互性测试场景和应用中使用TISA。如在此所述,除了支持粒度和交互性,TISA也支持并发性。TISA内在完全地合并系统测试流程和计算机科学软件流程,并因此能利用这两个流程的最佳方面。作为示例,诸如STAPL的方法难以处理设备的并发控制,这是因为该方法由定义可知是完全顺序执行的。而且,诸如MTC和SystemBIST的方法本质是顺序执行并且是单任务的,因此难以对该方法编程以支持并发性。相比之下,并发执行在计算机科学中是公知问题,并现在例如是所有操作系统的基础。可获得大量支持并发执行的库(例如, POSIX套件、BOOST套件等),并且大多数现代处理器都被设计为高效支持多任务和环境切换(例如,SPARC V8支持旋转寄存器窗口)。TISA实现的系统测试流程和计算机科学软件流程之间的内在交互允许TISA完全利用该计算机科学的并发性方法。通过示例能更好的理解TISA对并发能力的支持。作为示例,考虑图5A和图7的被测系统520的发送器522和接收器5 之间的T-R信道的优化数据传输率的问题。其包括从第一电路板521上的发送器522发送数据模式流,在第二电路板525上的接收器5 上接收对应的数据模式流,并比较发送和接收的数据模式流以计算比特位/误差率以及相应地调整发送器522和/或接收器5 的参数。利用并发运行的三个程序能高效地执行该优化。FIG. 8示出了用于执行图5A和图7的被测系统的发送器-接收器信道优化的示例性程序架构。如图8所示,示例性程序架构包括模式生成器802、模式接收器804以及比较器 806。模式生成器802、模式接收器804以及比较器806协作优化图5A和图7的被测系统 520的发送器522和接收器5 之间的T-R信道传输率。模式生成器802向第一电路板521上的发送器522 (T)发送合适的输入数据模式。 模式生成器802可访问TAP (示例性的,图5A中的TAP510,图7中的TAP718)以便经由第一电路板521 (Bi)的扫描链523向发送器522提供输入数据模式。模式生成器802能以任何合适的方式(例如在此参考图5A描述的代码的12-13行所指定的)向发送器522提供输入数据模式。输入数据模式可以是适于优化发送器522和接收器5 之间T-R信道的任何数据模式。例如,输入数据模式可以是预计算的模式、随机模式等,及其各种组合。模式接收器804从第二电路板525的接收器526(R)收集合适的输出数据模式。模式接收器804能访问TAP (示意性的,图5A中的TAP 510,图7中的TAP 718)以便经由第二电路板525 (B2)的扫描链527从接收器5 收集输出数据模式。模式接收器804能以任何合适的方式从接收器526收集输出数据模式(例如在此参考图5A描述的代码的14-15行所指定的)。比较器806与模式生成器802和模式接收器804进行通信。比较器比较输入数据模式和输出数据模式。比较器806评估T-R信道的比特位传输率和比特位误差率,并根据该比较结果,访问发送器522和接收器526的控制寄存器(为了清楚起见,在图5A和图7 中省略该部件)以优化T-R信道的参数。
24
为了执行该优化测试进程,模式生成器802、模式接收器804和比较器806需要并行工作,其中每个都必须能独立于彼此访问TAP。这种类型的控制结构在常规环境中难于编码,开发该控制结构仅仅为了支持对TAP的单点串行切换控制。这种类型的控制结构在利用MTC或其他也共享相同的串行TAP访问范式的方法的环境中也难于编码。相比之下, 设计TISA并没带有任何此类关于测试访问的假设;而是,在TISA中,测试访问以类似于其他处理器资源的方式处理,并且测试访问指令直接与常规ISA指令混合。使用TISA,通过利用如进程、线程、进程间通信(IPC)等,及其各种组合的标准结构的任意多任务操作系统执行图8的优化测试过程。这样,模式生成器802、模式接收器804和比较器806能共享对 TAP的访问,并能利用公知结构和算法(例如Dijkstra信号量)解决任何最终的TAP共享问题,这对于所有处理器资源都是这样做的。因此,虽然现有系统测试能力不支持并发,但显然TISA可轻易地全面支持并发。如在此所述,TISA对于测试访问方法或相关测试程序划分没有做任何假设;而是,以与常规ISA指令相同或实质上相同的方式处理测试指令,两者之间没有任何先验区分。这使得TISA能与所有现有(以及,非常可能地未来的)计算机科学算法和结构完全兼容,这些算法和结构是现有测试处理器方法所不支持的。可以理解的是,任何现有的软件库都能移植到TISA架构。例如,通过利用POSIX 和BOOST套件能轻易获取多任务性和并发性(例如,在此参考图8所示出并描述的)。而且,可以理解的是,对于作为现有ISA的概括获取的TISA(如参考图5A和图5B示出并描述的示例性SPARC V8 TISA实施所示出并描述的),移植甚至不是必要的,因为从其开发TISA 的ISA将已经包括该软件库。而且,可以理解的是也能使用各种其他计算机科学技术以提供利用TISA的改进系统测试。例如,对于TISA可利用的该计算机科学技术的某些示例包括(a)使用独立于平台的编码风格,(b)使用ISA-ISA转换器,(c)使用例如Java的虚拟机方法,以获取独立于平台的字节码,或甚至扩展Java虚拟机自身以成为TISA ;以及(d)使用应用编程接口 (API)以对某些TISA软件接口进行标准化,由合适的驱动器将这些软件接口翻译成原语 (primitive) 0可以理解的是,这些技术仅仅是可被TISA利用的计算机科学技术的一些示例。图9示出了修改处理器的指令集体系结构(ISA)流程以形成包括TISA指令的测试指令集体系结构(TISA)的方法的一个实施例,该些TISA指令适于由处理器用于测试被测系统的至少一部分。虽然在此主要示出并描述的为串行执行,但方法900的至少一部分步骤能同时执行,或以不同于参考图9所示出和描述的顺序执行。在步骤902,方法900开始。在步骤904,生成第一指令集。第一指令集包括处理器支持的ISA指令(即,利用 ISA指令以为处理器提供TISA)。在步骤906,生成第二指令集。第二指令集包括和被测系统相关的测试指令。能以任何合适的方式生成该第二指令集,例如,如参考图2的TGT210示出并描述的,如参考图3 的TGT310示出并描述的,和/或生成测试指令的任何其他合适的方法。在步骤908,第一指令集和第二指令集被集成以形成TISA指令。TISA指令为处理
25器提供TISA。在步骤910,TISA指令被存储、显示、传播和/或执行,及其各种组合。能以任何其他合适的方式处理该TISA指令。在步骤912,方法900结束。该TISA可以以任何合适的方式而形成,例如,如参考图10的方法1000所示出并描述的,如参考图2的测试系统和图IlA的相关方法1110所示出并描述的,如参考图3的测试系统和图IlB的相关方法1120所示出并描述的,和/或使用形成TISA的任何其他合适方法。图10示出了用于生成适于测试被测系统的至少一部分的指令的方法的一个实施例。虽然在此主要示出并描述的为串行执行,但方法1000的至少一部分步骤可同时执行, 或以不同于参考图10示出并描述的顺序执行。在步骤1002,方法1000开始。在步骤1004,生成第一指令集。该第一指令集包括通过编译至少一个计算机科学软件文件生成的指令(例如,处理器支持的ISA的ISA指令)。在步骤1006,生成第二指令集。第二指令集包括通过编译和被测系统相关的至少一个描述文件生成的测试指令。在步骤1008,将第一指令集和第二指令集合并形成合并的指令集。在合并的指令集中,第一指令集的指令适用于控制第二指令集的测试指令的执行。在步骤1010,合并的指令集被存储、显示、传播和/或执行,或其任何组合。能以任何合适的方式处理合并的指令集。在步骤3012,方法1000结束。图IlA和图IlB示出了参考图9示出并描述的方法900和/或参考图10示出并描述的方法1000的更加详细的实施例。图IlA示出了用于生成适于测试被测系统的至少一部分的方法的一个实施例。虽然在此主要示出并描述的是以特定顺序执行,但能以不同于参考图IlA示出并描述的顺序执行图IlA的方法1110的至少一部分步骤。通过结合图2和图2的相关描述查看图IlA 可更好的理解图IlA0在步骤1111,方法1000开始。在步骤1112,生成程序模型。通过编译至少一个计算机科学软件文件生成该程序模型(例如,由处理器支持的ISA的ISA指令),其中至少一个计算机科学软件文件包括至少一个调用。在步骤1113,生成第一指令集,使用程序模型生成该第一指令集。使用在该至少一个计算机科学软件文件中包括的至少一个调用也生成至少一个计算请求。在步骤1114,生成电路模型。通过编译和被测系统相关的至少一个系统描述文件生成该电路模型。在步骤1115,生成第二指令集。使用电路模型和至少一个计算请求生成该第二指令集。在步骤1116,第一指令集和第二指令集经过合并以形成合并的指令集。在合并的指令集中,第一指令集的指令适用于控制第二指令集的测试指令的执行。在步骤1117,合并的指令集被存储、显示、传播和/或执行,及其各种组合。能以任何其他合适的方式处理该合并的指令集。在步骤1118,方法1000结束。图IlB示出了生成适用于测试被测系统的至少一部分的指令的方法的一个实施例。虽然在此主要示出并描述的是串行执行,但图IlB的方法 1120的至少一部分步骤可同时执行,或以不同于参考图IlB所示出并描述的顺序执行。通过结合图3和图3的相关描述查看图IlB能更好的理解图11B。在步骤1121,方法1100开始。在步骤1122,通过预处理至少一个计算机科学软件文件生成至少一个预处理的计算机科学软件文件和至少一个测试操作描述文件。在步骤1123,生成电路模型。通过编译和被测系统相关的至少一个系统描述文件和至少一个测试操作描述文件生成该电路模型。在步骤1124,生成测试操作集。利用电路模型生成该测试操作集。利用测试原语 (例如,由生成电路模型的测试生成工具所定义的测试原语)描述来自测试操作集的测试操作。测试原语集合包括适于测试被测系统的测试操作。在步骤1125,通过将测试操作集的测试原语翻译成适用于与指令集体系结构的软件指令结合的测试指令,测试操作集被翻译成测试指令集。在步骤1126,生成程序模型。通过编译该至少一个预处理的计算机科学软件文件和测试指令集生成该程序模型。在步骤1127,生成合并的指令集。利用程序模型生成该第二指令集。合并的指令集包括(a)从至少一个预处理计算机科学软件文件确定的软件指令和(b)测试指令集的测试指令。在步骤11 ,合并的指令集被存储、显示、传播和/或执行,或其各种组合。能以任何其他合适的方式处理该合并的指令集。在步骤1129,方法1120结束。图12示出了 TISA处理器架构的示例性实施例。如图12所示,TISA处理器架构1200包括TISA处理器1210和存储器1220。TISA处理器1210可以是适于利用TISA执行系统测试的任何处理器,诸如SPARC V8处理器、INTEL处理器或任何其他合适的处理器。存储器1220包括适用于由TISA处理器1210利用TISA支持系统测试的任何存储器,包括一个或多个随机访问存储器、永久存储器等,及其各种组合。存储器1220可存储用于利用TISA执行系统测试所需的任何信息,诸如测试程序、TISA指令、测试数据等,及其各种组合。例如,在一个实施例中,图12的TISA处理器架构1200支持参考图2和图3所示出并描述的TISA流程。例如,在一个实施例中,图12的TISA处理器架构1200以类似于参考图6示出并描述的测试系统610的TISA处理器612和存储器614的方式运行。例如,可利用SPARC V8 TISA处理器和相关存储器实现图12的TISA处理器架构1200,例如在参考图7示出并描述的测试系统710中。在该实施例中,TISA处理器1210本身解释并执行ISA和TISA指令。在一个实施例中,经由测试访问端口(TAP)用于测试至少部分被测系统的设备包括存储器和处理器,其中,存储器用于存储测试指令集体系结构的指令集,处理器经由TAP
27执行测试指令集体系结构的指令集以用于测试被测系统的至少一部分。指令集体系结构的指令集包括第一指令集和第二指令集,其中,第一指令集包括处理器支持的指令集体系结构(ISA)的多个指令,第二指令集包括和TAP相关的多个测试指令,其中第一类(class)指令的指令和第二类(class)指令的指令被集成以借此形成测试指令集体系结构的指令集。在一个实施例中,用于经由测试访问端口(TAP)测试被测系统的至少一部分的 TISA处理器包括第一类(class)指令和第二类(class)指令,其中,第一类指令包括处理器支持的指令集体系结构(ISA)的指令,第二类指令包括和TAP相关的测试指令,其中第一指令集的ISA指令和第二指令集的测试指令被集成以形成适于测试被测系统的至少一部分的 TISA00在一个实施例中,用于经由测试访问端口(TAP)测试被测系统(SUT)的计算机处理器包括被配置用于根据测试指令集体系结构(TISA)来处理指令的电路,该测试指令集体系结构(TISA)具有经由TAP实现与被测系统进行交互的语义。TISA包括多个第一类型 (type)指令和多个第二类型(type)指令,其中第一类型指令包括计算机处理器支持的指令集体系结构(ISA)的指令,而第二类型指令包括经由TAP用于测试被测系统的测试指令。虽然上文主要参考其中以特定方式(例如,使用特定语言描述不同类(class)和 /或类型(type)的指令)定义TISA处理器的实施例示出并描述,但可以理解的是,能以在此提供的各种TISA示出及描述完全支持的其他方式定义TISA。虽然在此主要参考其中利用单个处理器支持TISA来实现TISA处理器架构的实施例进行示出并描述。但在其他实施例中,可以使用多个处理器实现TISA处理器架构。图13示出了利用多个处理器提供系统测试能力的测试处理器架构的示例性实施例。如图13所示,测试处理器架构1300包括主处理器1310和经由通信路径1330进行通信的第二处理器1320。主处理器1310可以是适于支持系统测试的任何处理器,诸如SPARC V8处理器、 INTEL处理器,或任何其他合适的处理器。主处理器1310执行指令以用于测试被测系统。 例如,在一个实施例中,主处理器1310支持与图12(其中测试处理器架构1300利用TISA) 的TISA处理器架构1200中的CPU1210支持的功能相类似的测试功能。例如,在一个实施例中,在未利用TISA的测试处理器架构中,主处理器1310支持由测试处理器支持的测试功能。主处理器1310可以支持其他测试能力。第二处理器1320可以是适于支持系统测试的任何处理器,诸如SPARC V8处理器、 INTEL处理器,或任何其他合适的处理器。第二处理器1320支持测试访问端口(TAP)连接到被测系统(为了清楚起见,故省略该被测系统)。TAP接口与任何合适的TAP连接。例如, TAP接口提供连接到IEEE1149. 1 TAP或任何其他合适的用于测试被测系统的TAP的接口。主处理器1310和从处理器1320协作以执行至少部分被测系统的测试。主处理器1310执行用于测试被测系统的指令。测试指令可以是TISA的测试指令 (其中测试处理器架构1300利用TISA)或与TISA不相关联的测试指令(其中测试处理器架构1300未利用TISA)。在测试指令执行期间,主处理器1310检测与控制被测系统的TAP 相关指令(例如,诸如将输入数据装载到被测系统的TAP控制器的指令,从被测系统的TAP 控制器读出数据的指令,及类似指令,及其各种组合)。主处理器1310向从处理器1320提供TAP相关的指令。从处理器1320从主处理器1310接收TAP相关的指令。从处理器1320 执行TAP相关指令。当从处理器1320执行从主处理器1310接收的TAP相关指令时,主处理器1310继续执行测试指令。这样,当从处理器1320经由被测系统的TAP控制扫描操作时,主处理器1310执行环境切换并继续操作。由于当单个处理器控制TAP时,该单个处理器不能执行其他操作,因此利用单个处理器的方法难于实现上述操作。因此,如在测试处理器架构1300中,多个处理器的使用提供了测试效率的显著改进,而无需使用高端处理器, 尤其考虑到和处理器执行单个操作所需时间相比,对TAP的操作一般费时很长。通过通信路径1330帮助主处理器1310和从处理器1320之间的协作以用于执行对被测系统的至少一部分的测试。可以使用主处理器1310和从处理器1320之间任何合适的通信装置实施通信路径1330,主要取决于实施测试处理器架构1300的多处理器架构类型。例如,通信路径1330包括一个或多个主处理器接口总线、辅助处理器接口、通信接口 (例如,串并行转换器(SERDEQ接口或其他合适的通信接口)等,及其各种组合。虽然为了清楚起见在此省略,但可以理解的是测试处理器架构1300包括存储器 (例如,随机访问存储器、永久存储器、缓存等,及其各种组合)。测试处理器架构1300的存储器包括一个或多个由主处理器1310和从处理器1320共享的存储器、主处理器1310专用的存储器、从处理器1320专用的存储器等,及其各种组合。虽然为了清楚起见在此省略,但可以理解的是测试处理器架构1300可以包括各种其他支持电路,诸如总线、I/O电路等,及其各种组合。能以多种方式实施图13的测试处理器架构1300。例如,在一个实施例中,测试处理器架构可以使用测试协处理器单元架构,其中中央处理单元(CPU)和测试协处理器单元(TCPU)协作以便支持系统测试。参考图14示出并描述示例性实施例。例如,在一个实施例中,测试处理器架构可以使用测试附属处理器单元结构,其中中央处理单元(CPU)和测试附属处理器单元(TAPU)协作以便支持系统测试。参考图15示出并描述示例性实施例。图14示出了测试协处理器架构的示例性实施例。测试协处理器架构1400适于用作利用TISA支持系统测试的TISA处理器架构。测试协处理器架构1400也适于用作未利用TISA支持系统测试的测试处理器架构。测试协处理器架构1400包括中央处理单元(CPU) 1410、测试协处理器单元 (TCPU) 1420、主存 1430 和闪存 1440。测试协处理器架构1400包括主处理器接口总线1451。CPU1410 TCPU1420、主存 1430和闪存1440中的每个都耦接到主处理器接口总线1451,或以其他方式被配置用于能够与主处理器接口总线1451通信。测试协处理器架构1400还包括直接耦接CPU1410和TCPU1420的辅助处理器接口 1452,因此实现CPU1410和TCPU1420之间的直接通信。CPU1410可以是适于执行被测系统的系统测试的任何CPU。CPU1410支持由参考图 13示出并描述的主处理器1310支持的测试能力。TCPU1420可以是适于推动被测系统的系统测试的任何CPU。TCPU1420支持测试访问端口 (TAP)接口 1460,该接口 1460可以与任何合适的TAP (例如,诸如IEEE 1149. 1 TAP或用于测试被测系统的任何其他合适的TAP)连接。TCPU1420支持由参考图13示出并描述的从处理器1320支持的测试能力。以类似于参考图13示出并描述的主处理器1310和从处理器1320的方式, CPU1410和TCPU1420协作执行被测系统的至少一部分的测试。当TCPU1420执行TAP相关指令以用于在测试期间控制被测系统的TAP时,CPU1410和TCPU1420利用指令异常处理以便能使CPU1410继续运行以处理测试指令。CPU1410执行用于测试被测系统的测试指令。在执行测试指令期间,CPU1410检测指令异常(即,关于控制被测系统的TAP的指令)并将指令异常提供给TCPU1420。TCPU1420 从CPU1410接收指令异常,并处理该等指令异常,以便当CPU1410继续运行以执行其他任务(例如,执行其他测试指令)时TCPU1420能处理该等指令异常。换而言之,CPU1410 和TCPU1420在系统测试期间协作,以便当TCPU1420处理由CPU1410检测的指令异常时 CPU1410能切换环境并继续运行以执行其他任务,借此改进系统测试效率。在一个实施例中,CPU1410包括缓存1411,例如用于改进CPU1410的性能。在一个实施例中,TCPU1420包括直接存储器访问(DMA)单元1421,该单元可以是适用于支持系统测试的任何类型的DMA单元。例如,在一个实施例中,DMA单元1421是分散/收集(S/G)DMA单元。TCPU1420可以利用DMA单元1421来处理从CPU1410接收的指令异常,以及高效地访问存储器中存储的敏感数据。在一个实施例中,CPU1410可在遇到指令异常之前配置S/G DMA表格。在一个实施例中,TCPU1420支持专用TCPU指令集。专用TCPU指令集支持TAP访问和控制。TCPU1420能使用专用TCPU指令集以用于在TAP状态机上执行具体TAP操作。CPU1410和TCPU1420利用主存1430和/或闪存1440以用于执行各种测试功能, 诸如由CPU1410执行测试指令、由TCPU1420处理指令异常、由TCPU1420执行TCPU指令等,及其各种组合。主存1430可以是任何合适的处理器存储器。闪存1440可以是任何合适的闪存或任何其他合适方式的永久存储器。CPU1410和TCPU1420共享随机存取的存储器。CPU1410和TCPU1420还可为交换信息共享存储器。虽然主要参考特定数量和类型的存储器示出并描述,但可以理解的是也能使用各种其他存储器方案以用于支持CPU1410和 TCPU1420执行的功能。CPU1410 和 TCPU1420 利用 CPU1410 和 TCPU1420 之间的通信、CPU1410 和 / 或 TCPU1420与测试协处理器架构1400 (例如,主存储器1430、闪存1440和其他组件)的其他组件之间的通信等,及其各种组合,执行被测系统的测试。使用主处理器接口总线1441和辅助处理器接口 1452中的一个或两个支持通信。CPU1410和TCPU1420之间的通信可包括和指令异常通知、中断访问、DMA仲裁等,及其各种组合相关的通信。CPU1410和TCPU1420 以及测试协处理器架构1400的其他组件之间的通信包括和如下任务相关的通信从存储器读取、写入存储器、和/或支持测试被测系统所执行的任何其他任务。图15示出了测试附属处理器架构的示例性实施例。测试附属处理器架构1500适于用作利用TISA支持系统测试的TISA处理器架构。测试附属处理器架构1500也适于用作未利用TISA支持系统测试的测试处理器架构。测试附属处理器架构1500包括中央处理单元(CPU) 1510和测试附属处理器单元 (TAPU) 1520。CPU1510和TAPU1520位于相同的电路板或不同的电路板上。
CPU1510可以是适于执行被测系统的系统测试的任何CPU。CPU1510支持由参考图 13示出并描述的主处理器1310所支持的测试能力。CPU1510具有主存1530M、闪存1530F以及与其关联的输入/输出模块巧40。 CPU1510具有与其关联的主处理器接口总线1550。CPU1510、主存1530M、闪存1530F和输入 /输出模块1540每个都耦接到主处理器接口总线1550,或以其他方式被配置用于能够与主处理器接口总线1550通信。在一个实施例中,CPU1510包括例如用于改进CPU1510的性能缓存1511。TAPU1520可以是适于推动被测系统的系统测试的任何CPU。TAPU1520包括输入/ 输出模块1521。TAPU1520支持测试访问端口(TAP)接口 1590,该接口 1590可以与任何合适的TAP (例如,诸如IEEE 1149. 1 TAP或用于测试被测系统的任何其他合适的TAP)连接。 TAPU1520支持由参考图13示出并描述的从处理器1320所支持的测试能力。TAPU1520具有与其连接的本地测试存储器1560。TAPU1520具有与其连接的内部接口总线1570。TAPU1520和本地测试存储器1560每个都耦接到内部接口总线1570,或以其他方式被配置用于能够与内部接口总线1570通信。与CPU1510和TAPU1520的输入/输出模块1521相关联的输入/输出模块1540支持在CPU1510和TAPU1520之间实现通信的通信接口 1580。通信接口 1580支持从CPU1510 到TAPU1520的TAP相关命令流。在一个实施例中,和CPU1510相关联的输入/输出模块1540以及TAPU1520的输入/输出模块1521支持串并行转换器(SERDEQ的通信能力,并因此,通信接口 1580是基于SERDES的通信接口。在这个实施例中,能使用任何合适的SERDES通信协议(例如,诸如千兆位以太网(GigE)、高速串行IO(SRIO)、外设部件互连(PCIe)等)实施基于SERDES的通信接口 1580。虽然在此主要参考在CPU1510和TAPU1520之间使用基于SERDES的通信进行示出并描述,但也能使用其他合适的通信能力以支持CPU1510和TAPU1520之间的通信。以类似于参考图13所示出并描述的主处理器1310和从处理器1320的方式, CPU1510和TAPU1520协作执行被测系统的至少一部分的测试。CPU1510和TAPU1520经由通信接口 1580利用命令流以实现当TAPU1520执行TAP相关指令以在测试期间控制被测系统的TAP时,CPU1510能继续运行以处理测试指令。CPU1510执行用于测试被测系统的测试指令。在执行测试指令期间,CPU1510检测与控制被测系统的TAP相关的指令。CPU1510经由通信接口 1580将TAP相关指令传播到 TAPUl520 ( S卩,经由主处理器接口总线1550从CPUl510到输入/输出模块1540,以用于经由通信接口 1580的传播)。TAPU1520接收TAP来自CPU1510的相关指令并处理该TAP相关指令,以便当CPU1510继续运行以执行其他任务(例如,执行其他测试指令)时,TAPU1520 能处理对TAP的控制。换而言之,CPU1510和TAPU1520在系统测试期间进行协作以便当 TAPU1520处理由CPU1510检测的TAP相关指令时,CPU1510能切换环境并继续运行以执行其他任务,借此改进系统测试效率。在一个实施例中,CPU1510对由CPU1510检测并由TAPU1520处理的TAP相关指令进行分组以用于传播到TAPU1520。在一个实施例中,由CPU1510检测并由TAPU1520处理的TAP相关指令包括 TAPU1520支持的操作码。在一个该实施例中,TAP相关指令还包括适用于在与CPU1510相关联的存储器和与TAPU1520相关联的存储器之间(例如,在主存储器1530M和本地测试存储器1560之间)执行块存储拷贝的一个或多个扩展命令。CPU1510利用主存储器1530M和/或闪存1530F用于执行各种测试功能,诸如执行测试指令、检测TAP相关指令、分组TAP相关指令等,及其各种组合。主存储器1530M可以是任何合适的处理器存储器。闪存1530F可以是任何合适的闪存或任何其他合适的永久存储器。TAPU1520利用本地测试存储器1560用于执行各种测试功能,诸如存储接收自 CPU1510的TAP相关指令、处理接收自CPU1510的TAP相关指令等,及其各种组合。本地测试存储器1560可以是任何合适的处理器存储器。在一个实施例中,本地测试存储器1560 相对较小,这是因为它处理被测系统的扫描链的扫描链段,而不是整个扫描链(这在片上存储器中是需要的)。虽然主要参考特定数量和类型的存储器进行示出并描述,但可以理解的是也能使用各种其他存储器方案以用于支持CPU1510和TCPU1520执行的功能。虽然在此主要参考使用协处理器架构或附属处理器架构实施TISA进行示出并描述,但可以理解的是可以使用任何合适的处理器架构实施TISA,该处理器架构包括除了协处理器架构或附属处理器架构之外的处理器架构。因此,可以使用各种其他方式利用多个处理器实施TISA处理器架构,至少其中某些方式包括使用两个以上的处理器用于支持 TISA。虽然在此主要参考使用协处理器架构或附属处理器架构的以便实施TISA架构进行示出并描述,但本领域普通技术人员根据在此教导告知可以理解,协处理器架构或附属处理器架构中的每个都用于实施其他类型的测试架构(即,未采用TISA的其他测试架构)。可以理解的是测试协处理器架构和测试附属处理器架构功能上类似,因为每个架构都能使TISA由两个正在通信的处理器执行。在给出的应用中,两个架构之间的选择可由设计者根据实施相关的参数做出,诸如可用的资源、成本、性能、物理限制(相同芯片、不同芯片和/或电路板或其任意组合中的集成),以及任何其他实施参数。虽然在此主要参考测试协处理器和测试附属处理器架构进行示出并描述,但本领域普通技术人员根据在此教导告知可以理解,这些实施考虑因素将应用于任何其他类型的测试架构/基础结构。在此示出并描述的TISA处理器架构能使用任何合适的TISA用于执行系统测试。适用于TISA处理器架构的TISA的一个示例性实施例的描述如下。该TISA的示例性实施例实现在此示出并描述的扫描段层原语。在扫描段层抽象层,被测系统的整个扫描链被划分为段,这些段然后用作算法的数据原子。可以理解的是,可由算法开发者将被测系统划分为扫描段,该算法开发者可以是人和/或自动化工具。下文将详细提供使用TISA实现在扫描段级执行的扫描操作的更一般性的描述,即,该描述独立于该示例性TISA实施。TISA的如下实施例提出能够定义并处理这些扫描段的寄存器和指令集合。如下实施例基于32位大小的TISA,但也能适于任何其他字(word)大小(例如,16位、64位或任何其他合适的字大小)。图16示出了能由TISA处理器使用的示例性寄存器集。示例性TISA包括四个寄存器集(表示为寄存器集R1-R4),分别在图16A-16D中所示。如图16A所示,第一寄存器集Rl包括如下用户可访问数据寄存器
· StatusRegister 包含状态指示信息的32位寄存器;· ControlRegister 包含命令编码的32位寄存器;.BlockRegister 包含到预格式化数据结构的存储器偏移的32位寄存器,其间接指向扫入数据(收集数据)和写出数据(分散数据)的地方[用于访问分散/收集段描述的所有扫描和比较操作];· ScanLengthRegister 有待扫描的当前比特位数量所在的32位寄存器(也由用于块模式操作码的分散/收集段描述来自动填充);-ScanStateRegister :32位寄存器,包含3组4比特位,每组表示扫描操作的开始状态、扫描状态和结束状态,4比特位表示TAP状态机的16个状态编码。(也由块模式中的分散/收集段描述来填充);以及· UserDataRegisters [1-11] :32位寄存器,包含用于小型扫描操作和数据重用的扫描段数据(可以是源寄存器或目标寄存器)。如图16B所示,第二寄存器集R2包括如下内部临时寄存器· BlockPointerRegister 指向在多个扫描指令期间要处理的当前分散/收集段描述参考的32位寄存器;· BlockCountRegister 包含在多个扫描指令期间要处理的分散/收集段描述数量的32位寄存器;以及· InstructionRegister 32位寄存器,其中放置用于解码当前操作码。如图16C所示,第三寄存器集R3包括如下分散/收集段描述寄存器· BlockOffsetField 当使用64位架构时,描述地址库的32位数字;· ScanLengthField 指定为该段要扫描的比特位数量的32位整数;· StateTraversalField 4比特位的3个字段,每个表示该扫描操作的开始状态、 扫描状态和结束状态(每4比特位表示TAP状态机的16个状态);· SourceLocationField =TDI数据位于存储器中的32位基地址;· DestinationLocationField 将TDO数据存储在存储器中的32位基地址;· ExpectedValueField 期望矢量位于存储器中的32位地址;· ResponseLocationField 获取的TDI数据位于存储器中的32位基地址;· MaskField 用于限制比较操作的MASK数据位于存储器中的32位基地址;· ResultLocationField 将比较结果保存在存储器中的32位基地址。如图16D所示,第四寄存器集R4包括如下多块分散/收集段描述寄存器· BlockOffsetField 当使用64位架构时描述地址库的32位数字;.BlockCountField 定义由该多块(MultiBlock)扫描表示的扫描段数量的32位数字(用于在多块扫描操作期间初始化BlockCoimtRegister);· ScatterGatherOpcodeField 用于由相关的 ScatterGatherBlockField 指向的分散/收集段描述的32位命令操作码;以及'ScatterGatherBlockField 和前述 ^atterGatherOpcodeField相关的分散 / 收集段描述位于存储器中的32位地址。可以理解,能以任何合适的方式修改该示例性TISA寄存器集。例如,每个示例性寄存器集可以经过修改以包括更少、更多和/或不同的寄存器。例如,可以将示例性寄存器重新分组成更少、更多和/或不同的集合。例如,可以使用为更少、更多和/或不同的寄存器集。换而言之,可以用适于与TISA指令集来实施TISA处理器架构的任何其他TISA寄存器集取代示例性TISA寄存器集。示例性TISA能使用任何合适的用于执行系统测试的TISA指令集(例如,命令词典)。示例性TISA指令集包括如下操作码,该操作码可以用于操纵参考图16A-16D示出并描述的寄存器集R1-R4,以及在此示出并描述的原始ISA寄存器集合StateTransition<TMS 值 >,<TCK 周期 >·该操作码利用TMS的值为给定数量的TCK时钟周期遍历TAP状态机。该操作码用于执行TAP状态机的状态之间的一般性状态转换。<TMS值 > 表示单个比特位,而<TCK周期 > 表示操作码的剩余的数据比特位。RunTest<开始状态 >,< 测试状态 >,< 结束状态>·该操作码用于从 < 开始状态 > 转换到 < 测试状态 >,并在kanLengthRegister 指定数量的TCK周期内在 < 测试状态 > 内循环。该操作码用于在循环结束时转换到 < 结束状态〉。ScanRegister<源寄存器 >,< 目标寄存器〉[,< 期望寄存器 >][,< 屏蔽寄存器>]·该操作码用于扫描用户数据寄存器 < 源寄存器 > 中的数据并将获取的值保存在用户数据寄存器 < 目标寄存器 > 中。如果 < 期望寄存器 > 出现,则相应地将获取的数据和该值进行比较并提出错误,如果出现,最终使用〈屏蔽寄存器〉。SteHO <=η < 32)中定义扫描的比特位数量。在kar^tateRegister中定义开始状态、扫描状态和结束状态。ScanRegisterZero<目标寄存器〉[,< 期望寄存器 >][,< 屏蔽寄存器>]·该操作码用于扫描全“0”的矢量值并将获取的值存储在用户数据寄存器 < 目标寄存器〉中。在^anLengthRegister(0 <= η < 32)中定义扫描的比特位数量。在 ScanStateRegister中定义开始状态、扫描状态和结束状态。如在kanRegister指令中一样使用 < 期望寄存器 > 和 < 屏蔽寄存器>。ScanRegisterOne<目标寄存器〉[,< 期望寄存器 >][,< 屏蔽寄存器>]·该操作码用于扫描全“1”的矢量值并将获取的值存储在用户数据寄存器 < 目标寄存器〉中。在^anLengthRegister(0 <= η < 32)中定义扫描的比特位数量。在 ScanStateRegister中定义开始状态、扫描状态和结束状态。如在kanRegister指令中一样使用 < 期望寄存器 > 和 < 屏蔽寄存器>。ScanBlock·该操作码用于将BlockRegister指向的数据扫描到SUT,其始于 < 开始状态>, 在 < 开始状态 > 中扫描数据,< 结束状态 > 完成如块的MateTraversalField定义的操作状态。在扫描操作之前,用来自StateTraversalField的数据填充kar^tateRegister。在扫描操作之前,用来自^anLengthField的数据填充kanLengthRegister。不保留来自TDO 的数据。如果设置ExpectedValueField和Maskf ield,则相应地进行比较和错误生成。ScanBlockCapture 该操作码用于将BlockRegister指向的数据扫描到SUT,其始于 < 开始状态〉,在
34<开始状态 > 中扫描数据,随着 < 结束状态 > 完成如块的MateTraversalField定义的操作状态。在扫描操作之前,用来自StateTraversalField的数据填充kar^tateRegister。在扫描操作之前,用来自^anLengthField的数据填充kanLengthRegister。保留从TDO获取的数据。如果设置ExpectedValueField和Maskfield,则相应地进行比较和错误生成。ScanBlockZeroCapture 该操作码用于将全“O”的数据矢量扫描到SUT,其始于 < 开始状态 >,在 < 开始状态 > 中扫描数据,随着 < 结束状态 > 完成如块的MateTraversalField定义的操作状态,在 BlockRegister定义的寄存器中获取结果。在扫描操作之前,用来自StatdraversalField 的数据填充kar^tateRegister。在扫描操作之前,用来自^anLengthField的数据填充 kanLengthRegister。如果设置 ExpectedValueField 和 Maskfield,则相应地进行比较和错误生成。ScanBlockZero·该操作码用于将全“O”的数据矢量扫描到SUT,其始于 < 开始状态 >,在< 开始状态〉中扫描数据,随着〈结束状态〉完成如块的StateTraversalField定义的操作状态而不获取结果。在扫描操作之前,用来自StateTraversalField的数据填充kar^tateRegister。在扫描操作之前,用来自^anLengthField的数据填充 ^anLengthRegister。如果设置 ExpectedValueField 和 Maskfield,则相应地进行比较和错误生成。ScanBlockOneCapture 该操作码用于将全“1”的数据矢量扫描到SUT,其始于 < 开始状态 >,在 < 开始状态 > 中扫描数据,随着 < 结束状态 > 完成如块的MateTraversalField定义的操作状态,在 BlockRegister定义的寄存器中获取结果。在扫描操作之前,用来自StateTraversalField 的数据填充kar^tateRegister。在扫描操作之前,用来自^anLengthField的数据填充 kanLengthRegister。如果设置 ExpectedValueField 和 Maskfield,则相应地进行比较和错误生成。ScanBlockOne·该操作码用于将全“1”的数据矢量扫描到SUT,其始于 < 开始状态 >,在< 开始状态〉中扫描数据,随着〈结束状态〉完成如块的StateTraversalField定义的操作状态而不获取结果。在扫描操作之前,用来自StateTraversalField的数据填充kar^tateRegister。在扫描操作之前,用来自^anLengthField的数据填充 kanLengthRegister。如果设置 ExpectedValueField 和 Maskfield,则相应地进行比较和错误生成。示例性TISA指令集包括使用显式数值的如下寄存器修改指令LoadRegisterExplicit< 常量值 >,< 寄存器名 >·该指令将 < 常量值 > 的常量数值装载到由 < 寄存器名 > 命名的寄存器中。CopyRegisteK源寄存器 >,< 目标寄存器>·该指令将命名为 < 源寄存器 > 的寄存器的内容传播到由 < 目标寄存器 > 命名的寄存器中。示例性TISA指令集包括使用隐式数值的如下寄存器修改指令
LoadRegisterImplicit<用户数据寄存器 >,< 寄存器名>·该指令使用命名为 < 用户数据寄存器 > 中的值作为引用实际数据所在存储器位置的指针,并将被引用的数值保存在名为 < 寄存器名 > 的寄存器中。示例性TISA指令集包括如下寄存器保留指令StoreRegisterImplicit<寄存器名 >,< 用户数据寄存器> 该指令使用命名为〈用户数据寄存器〉中的值作为引用存储器位置的指针,该存储器位置存储名为 < 寄存器名 > 的寄存器中的数值。StoreRegisterExplicit< 寄存器名 >,< 常量值 >·该指令将名为 < 寄存器名 > 的寄存器的数值保存在 < 常量值 > 指定的存储器位置中。示例性TISA指令集包括如下对寄存器的逻辑操作AND<源寄存器 >,< 目标寄存器> 该操作执行 < 源寄存器 > 和 < 目标寄存器 > 之间的逻辑AND操作,并将结果值放置在 < 目标寄存器〉中。0R<源寄存器 >,< 目标寄存器>·该操作执行 < 源寄存器 > 禾日〈目的寄存器 > 之间的逻辑OR操作,并将结果值放置在 < 目的寄存器〉中。X0R<源寄存器 >,〈目的寄存器> 该操作执行 < 源寄存器 > 和〈目的寄存器 > 之间的逻辑XOR操作,并将结果值放置在 < 目的寄存器〉中。Ν0Τ<源寄存器 >,〈目的寄存器>·该操作执行〈源寄存器〉的逻辑NOT操作,并将结果值放置在 < 目的寄存器〉 中。X0RM<源寄存器 >,< 屏蔽寄存器 >,< 目的寄存器> 该操作执行用户数据寄存器〈源寄存器〉和用户数据寄存器 < 目的寄存器〉之间的逻辑XOR操作,仅对与用户数据寄存器 < 屏蔽寄存器 > 中含有“1”的比特位对齐的那些比特位进行比较,并将结果值放置于 < 目的寄存器〉中,注意,未被比较的比特位在 < 目的寄存器〉中的值为“0”。示例性的TISA指令集包括对寄存器的如下杂项操作NOP·无操作的操作码,在某些ISA指令集中作为填补以提供对齐。示例的TISA指令集包括如下指令以拓展支持用于使用附属处理器架构的实施例的流Memoryffrite·该指令利用如下变量写入本地测试存储器〈序列号 >,< 块偏移(32位偏移)>, <要传送的字节数 >,< 目标地址(在指定的存储块中)>,< 数据字节>。MemoryRead·该指令利用如下变量从本地测试存储器读出< 序列号 >,< 块偏移(32位偏移)>,〈要传送的字节数〉,〈源地址(在指定的存储块中)。该指令返回以序列号和被传送的字节数为标记的数据字节流。示例性TISA指令集包括用于扫描状态的如下数值StartState,ScanState,EndStat 扫描状态代码包括 JestLogicReset(TLR) ,RunjTesVIdle(RTI) ,PauseDR(PDR), PauseIR (PIR),ScanDR (SDR),ScanIR (SIR)。每个状态代码有4个比特位表示,并且有12个比特位用于为扫描操作描述整个状态转换序列。本领域普通技术人员基于在此的教导可以理解,在此示出并描述的TISA处理器结构也能使用各种其他的TISA实施。例如,其他的TISA实施可能使用更少、更多和/或不同的寄存器,可能使用更少、更多和/或不同的指令集等,及其各种组合。在一个实施例中, 为了提供更适于特定应用的TISA实施,和/或为了任何其他合适的原因,其他的TISA实施能够被应用于使用不同的处理器架构的地方。如上文所述,在JTAG架构中使用TISA可以使得扫描操作在扫描段层执行,该扫描段层允许在整个扫描路径中定义独立可控的“扫描段”,因而提供了一套灵活的和强大的原语集合,其能够用于在问题空间中直接定义扫描操作,并能够在实施时刻解决扫描操作。一般而言,JTAF操作基于扫描操作,在该扫描操作中,当比特位被一个接一个地串行扫描出去的同时,所有的比特位被一个接一个地串行扫描进入。这意味着,为了能够执行扫描操作,需知晓在扫描链(例如,输入和输出矢量)中每个比特位需要哪个值。TGT通常通过从诸如BSDL的描述语言获得的系统模型计算所需矢量,为常规的结构测试提供这种能力。此外,如SVF和STAPL的格式镜像这些矢量,就像它们允许用户操作这些矢量。虽然以此方式的测试对于结构(以及其他类型)的测试是足够的,但是以此方式的测试对于交互装置的效率是非常低的,在交互装置中并不实际需要访问整个扫描链。这种低效率可以通过考虑一个例子来看到。例如,考虑一个由100个仪器组成的扫描链,每个仪器具有16比特位。如果用户需要在扫描链中第76号仪器的寄存器中写入0x1234,那么TGT就需要为整个扫描链生成矢量(100*16 = 1600比特),并将该矢量发送到将被输入扫描链的TAP接口。类似地,如果用户需要读取相关的输出,TGT在能够提取所需的输出信息之前需要接收全部1600比特的矢量。在这个示例中,当扫描效率并不是目标之一时(而是,在该示例中,目标主要是能够有效地访问扫描链中一个特定实体),大部分的扫描位是无用的这一事实并不重要。这种类型的方法有问题,至少由于如下原因(a)计算上需要处理长矢量(例如, 许多存储器传送对性能有较大影响);(b)需要在存储器中存储整个矢量(这对于长链可能是个问题);(c)存储器存储不限于数据输入和数据输出,而且包括期望数据、输入和输出掩码等(因此,倍增的存储需求已经可能受到来自输入和输出数据的限制);以及⑷每次必须进行仪器-矢量-仪器的转换(这需要计算能力和计算时间)。在不特别强调扫描效率的情况下(即使强调,当然在需要时也能满足要求),扫描段层抽象层是提供高效访问被测系统的扫描链的单个实体或实体组的强大工具。在一个实施例中,通过将扫描链分解成连续段并对每个段定义一个或多个扫描操作而实施扫描段层抽象。扫描链包括多个元件,每段包括扫描链的至少一个元件。可以在被测系统的许多层级对元件进行定义(例如,元件可以是设备、仪器、寄存器、寄存器段等, 及其各种组合),并因此可以在被测系统的许多层级定义将扫描链分解成的段(例如,段可以包括一个或多个设备、设备的一部分、一个或多个仪器、仪器的一部分、一个或多个寄存器、寄存器的一部分、一个或多个寄存器段等,及其各种组合)。以此方式,段能表示扫描链的最小控制单元。在一个实施例中,将扫描链分解成段是分层级的。例如,可以将扫描链分解成段, 至少某些段可以由子段组成,至少某些子段可以由子子段组成等。以此方式,可以将扫描链的层级分解看作具有基于树的结构,其中一个段由其他多个段组成。在一个这样的实施例中,将位于树叶的段称为段(因为他们表示扫描链的最小控制单元),将位于树叶上方的段称为超段。可以理解,在一个实施例中,扫描链的一个或多个段由可控制的虚拟子段组成, 仅以对用户/系统透明的方式可控制。扫描链的层级分解可以以任何其他合适的方式定义。使用分段能为段的类型和/或段组合的类型定义实体。实体是目标类型的类属描述,该描述对于目标类型的每个物理实例有效并能为其重用。例如,实体能定义设备描述、 设备组、设备的一部分、仪器、仪器组、仪器的一部分等,及其各种组合的描述。因此,由于扫描链能被分解以使扫描链的段包括特定元件或元件组合,因此能对于扫描链的各个段和 /或各个段组合定义实体。例如,分解扫描链以使段包括仪器,对该类型的段可以定义实体 (即,每个段包括该类型的仪器),以使扫描链中该类型的段的每个物理实例可以重用该实体。类似地,例如,分解扫描链以使段包括多个仪器,对该类型的段(即,每个段包括仪器的类型组合)定义实体,以使扫描链中该类型的段的每个物理实例可以重用该实体。如下文所述,这样能支持额外的特征和功能。使用分段允许实体和物理协议关联,该物理协议用于和该实体通信。结果,可为该实体专门书写描述语言(例如,诸如NSDL、P1687 IJTAG PDL等),并且连接性描述部分(例如,NSDL或IJTAG HDL结构)可以描述分段指令的顺序。因为TISA指令是基于段的操作而不是基于模型的操作,因此TISA提供了可重用的模块性,其对特定的实体类型的所有出现只需定义一次。这样,因为对于在特定段中被测实体,TISA既是模块化的也是自治的,所以TISA提供了明显优于现有的架构的优势。TISA能将测试数据寄存器定义直接映射到可重用并可移植的模块,该模块可以在扫描过程的任一个点上被插入到执行流程中,以任何需要的次序,无需象现有的工具要求的一样将整个连接性预先定义为静态模块。作为基于统一的控制流程和标准的计算机科学技术的基础上单一的解决空间架构,TISA能够集成对于扫描操作为非扫描的端口 /信号接口(相对于其中用本机语言构造来提供非扫描操作访问的技术方案来说,提供了明显的优势)。TISA能为同一实体的多个实例实现指令序列的重用,因而能够减少系统中代码存储的需求。例如,可写一个映射到被管理程序调用的描述语言函数的广义函数。在这个示例中,每个函数都是表示该实体的本机语言对象的方法,并且对于系统中定义的每个实体, 具有这些对象的单独实例,但是可以有代码的单个拷贝,其用于与这些实例中的每一个进
行通信。以此方式,本机语言实现模块直接控制了用于指明电路连接性和功能性的描述语 、
曰ο参考以上所给出的示例,利用扫描段层抽象能够定义如下三段包含仪器1至75 的段Si,包含仪器76的段S2,以及包含了仪器77至100的段S3。以此方式,对仪器76的
38访问被大大地简化了。例如,可以通过如下操作对仪器76访问对段S3进行“虚位移”(例如,kanBlockZero),对段S2(即,仪器76)执行指令,对段Sl进行另一个虚位移,然后随着更新结束操作。在这样的顺序中,除了段Sl或段S3的长度,对段S2的访问(例如,对扫描链中一个特定的仪器)无需了解该段Sl或段S3的其他。可以理解,这只是一个示例,因此,具有100个仪器长度的链的其他分解可能能够访问其他仪器或者仪器组。图17示出了被测系统的高级框图,说明被测系统的示例性扫描链的示例性分解。示例性SUT170包括四个设备17101-17104(统称为设备1710 ;并在图17中分别表示为设备1、设备2、设备3和设备4)。在SUT1700内串行地部署设备1710以形成扫描链1720。扫描链1720如下TAP的TDI连接到设备17104的输入端口,设备17104的输出端口连接到设备17103的输入端口,设备17103的输出端口连接到设备17102的输入端口, 设备17102的输出端口连接到设备17101的输入端口,以及设备17101的输出端口连接到 TAP 的 TDO。在示例性SUT1700中,每个设备1710包括(1)输入解复用器,其向测试指令寄存器(TIR)和测试数据寄存器(TDR)提供输入;以及(2)输出复用器,其收集来自IlR和TDR 的输出。每个设备1710的IlR和TDR都是并行寄存器。设备17103包括一个另外的TDR, 以使输入解复用器向一个IlR和两个TDR提供输入并收集来自该一个IlR和两个TDR的输出,其中一个IlR和两个TDR都是并行的。IlR和TDR每个都被示出为串行移位寄存器,每个都包括九个相关的元件(例如触发器)。以此方式,(a)IlR形成包括三十六个串行元件的一个扫描链(表示为测试指令扫描链)以及(b) TDR形成包括整个四十五个元件和三十六个串行元件的另一扫描链(表示为测试数据扫描链)(即,由于设备17103的两个TDR都是并行的)。在示例性SUT1700中,已将测试指令扫描链分解成如下的四个段第一个段SI4, 包括设备17104的TIR的九个元件;第二个段SI3,包括设备17103的TIR的九个元件;第三个段SI2,包括设备17102的TIR的九个元件;以及第四个段SI1,包括设备17101的HR 的九个元件。以此方式,测试系统可以单独的或组合地访问SUT1700的任何TIR,而无需太多知晓SUT1700的其他TIR(除了组成它们的元件数量之外)。在示例性SUT1700中,已将测试指令扫描链分解成如下的六个串行段(总共七个段)第一个段SD4,包括设备17104的TDR的九个元件;第二个段SD3,包括设备17103 的TDR的九个元件;第三个段SD2,包括设备17102的第一 TDR的九个元件(表示为子段 SD2. 1)或设备17102的第二 TDR的九个元件(表示为子段SD2. 2),这里将它们计算为单独的段以便计算段的总数;以及将第四个段进一步分解为如下的三个串行子段包括设备 17101的TDR的前三个部件的第一个子段(表示为子段SDl. 1),包括设备17101的TDR的接下来四个元件的第二个子段(表示为子段SDl. 2),以及包括设备17101的TDR的最后两个元件的第三个子段(表示为子段SDl. 3)。以此方式,测试系统可以单独的或组合地访问 SUT1700的任何TDR(或甚至设备17101的TDR的子部分),而无需太多知晓SUT1700的其他TDR (除了组成它们的元件数量之外)可以理解的是图17的SUT1700仅仅是分解被测系统的扫描链以用于提供扫描段层抽象的方式的一个示例。虽然这里参考特定类型、数量和配置的元件、部件等进行示出并描述,但可以理解的是分解扫描链的被测系统可以包括各种其他类型、数量和/或配置的元件、部件等。如在此所述,被测系统的扫描链的分解实现将在段上定义的扫描操作,借此改进测试效率。在此参考图18示出并描述根据一个实施例,用于生成指令集的方法,该指令集包括对于分解的扫描链的段的扫描操作。下文提供扫描分解并生成扫描段操作的更详细的示例。作为一般示例,考虑包括三个电路板的扫描链,其中每个电路板包括一个段(分别表示为和第一电路板相关联的段A、和第二电路板相关联的段B以及和第三电路板相关联的段C)。在这个示例中,扫描段是分层级的,第一电路板上的段A由多个子段组成(例如,子段Al-An)、第二电路板上的段B由多个子段组成(例如,子段Bl-Bn)、和/或第三电路板上的段C由多个子段组成(例如,子段Cl-Cn)。作为更具体的示例,由于应用和SUT,段可以是仪器内的一个或多个寄存器、仪器、一组寄存器、一个或多个电路板等,及其各种组合。因此将整个扫描操作分解为一系列的段扫描操作。结果,为了获取最后的扫描链操作所需要的是一系列简单的原子操作。因此,虽然不是唯一的限定于,但扫描段层抽象的实施例在原子测试操作如同处理器操作一样被处理的实施中特别有效(例如,诸如在此示出并描述的各种TISA实施中、或在原子测试操作如同处理器操作一样被处理的任何其他类似实施中)。在扫描段层抽象的该实施例中,扫描段层扫描操作的实际实施需要解决和JTAG 链接的一个或多个技术限制。例如,需要解决诸如需要定义TAP机的状态和利用Pause-DR 状态(并非总是实施)的风险的限制。为了识别经由扫描链接收的输出比特流中的仪器/段输出,根据扫描链中的仪器 /段的位置,可将扫描链看作先进先出(FIFO)系统(考虑它的串行特点),以使第一个被扫描进入的段也是第一个被扫描出去的段(因为该段最接近扫描段的末端)。为了使SUT如同单个扫描操作一样“经历”扫描段操作序列,在段操作之间暂停 TCK。由于扫描链内的所有元件都是同步的,以该方式暂停TCK的影响在于扫描链和TCK 一起被暂停。通过一些示例可以更好地理解在基于TISA的测试系统中的扫描段层的使用。在如下的示例中,假设被测系统(SUT)由三个段(依次表示为A、B和C)组成,以及用户需要写入段B中的值V。作为第一示例,假设在相同JTAG设备内实施系统的三个段(A、B和C)。在该第一示例中,一旦在存储器中定义三个段,则TISA操作将变成i.设置 Startstate = Run-Test-Idle, Scanstate = Endstate = ShiftDR ;ii.设置 kanLenghtField 为段 A 的长度;iii.将旁路序列扫描到段A中;iv.设置 Startstate = Scanstate = Endstate = ShiftDR ;v.设置 kanLenghtField 为段 B 的长度;vi.将V扫描到段B中;vii.设置 Startstate = Scanstate = ShiftDR, Endstate = Run-Test-Idle ;vi ii.设置 ^anLenghtField 为段 C 的长度;
ix.将旁路系列扫描到段C中。参考该第一示例,保持TAP有限状态机(FSM)处于ShiftDR状态能确保不需要更新扫描链。可以从第一示例中看出,其中从步骤(i)至步骤(ix)保持TAP FSM处于SiiftDR 状态能确保不需要更新扫描链,考虑到一旦离开SiiftDR就将到达UpdateDR状态。进一步参考第一示例,扫描时钟TCK只有在扫描操作期间(S卩,步骤(iii)、(vi) 和(ix))才是激活的并在其余状态中被暂停。从基于与TCK同步的操作的SUT的角度看, 影响在于SUT将步骤(iii)、(Vi)和(ix)看作连续比特流。进一步参考第一示例,“旁路序列”是扫描段的属性,并例如是给定序列(全零、全一、或任何其他合适的序列)或“不关心”,这由TGT决定该序列。作为第二示例,假设在不同的JTAG设备上实施系统的三个段(A、B和C)。在该第二示例中,一旦在存储器中定义该三个块,TISA操作会变为i.设置段 A 状态StartMate = RunTest/Idle, ScanState = ShiftIR, EndState =ShiftIR(gateTCK indicator);ii.设置段 A 的 kanLengthField 为段 A IR 的长度;iii.为段A运行具有BYPASS指令模式的kanBlock ;iv.设置段 B 状态=StartState = ShiftIR, ScanState = ShiftIR, EndState = ShiftIR(gateTCK indicator);v.设置 ScanLenghtField 为段 B IR 的长度;vi.为段B运行具有EXTEST指令模式的kanBlock ;vii.设置段 C 状态=StartState = ShiftIR, ScanState = ShiftIR, EndState = RunTest/Idle ;vi ii.设置段 C 的 kanLengthField 为段 C IR 的长度;ix.对于段C运行具有BYPASS指令模式的kanBlock ;χ.设置段 A 状态StartMate = RunTest/Idle, ScanState = ShiftDR, EndState =ShiftDR(gateTCK);xi.设置段A的kanLengthField为段A所选DR的长度(1比特BYPASS DR);xii.对于段A运行具有BYPASS数据模式的kanBlock ;xi ii.设置段 B 状态=StartState = ShiftDRjScanState = ShiftDRjEndState = ShiftDR(gateTCK);xiv.设置段B的kanLengthField为段B所选DR的长度(到引脚的η比特BSR DR);XV.对于段B运行具有EXTEST数据模式的kanBlock ;xvi.设置段 C 状态=StartState = ShiftDR, ScanState = ShiftDR, EndState = RunTest/Idle ;xvii.设置段 CWkanLengthField 为段 C 所选 DR 的的长度(1 比特 BYPASS DR);xviii.对于段C运行具有BYPASS数据模式的kanBlock ;通过比较第一示例和第二示例,可以理解和第二示例相关的增加的复杂性来自于需要使用每个JTAG设备的指令寄存器(IR)来选择/取消选择段。在这种情况下,通过在 1149. 1标准的BYPASS模式中放置相关JTAG设备将没用到的段从链中直接取出(如第二示例的步骤(iii)和(XVii)所示)。可以理解,上面两个示例的所有组合都是可能的,在一个或多个JTAG设备上定义任何数量的段。进一步可以理解,上面两个示例仅仅是用来解释扫描段层用于测试被测系统的示例,并因此,其中扫描段层用于测试被测系统的实施例并非意在受这些示例的限制。在这些实施例中,TISA指令的实际序列可以具有多个起点,包括如下的一个或多个(1) TISA指令可由TGT静态计算,在这种情况下,每当用户需要访问段,必须扫描整个链 (可以理解,虽然该方案对于扫描时间并未优化,但对于具有有限计算资源并没有或基本没有时间限制的嵌入式系统是有用的);( 由软件调度器发布TISA指令,该软件调度器接收访问请求并将它们构成扫描操作;和/或(3)由硬件调度器发布该TISA指令(例如,诸如, 但不限于,在某些高性能处理器中所进行的指令重新排序和旁路)。可以理解,可以以任何合适的方式发布和扫描段层控制相关联的TISA指令,这些方式包括上述方法和/或一个或多个其他合适的方法的组合,这些合适的方法用于取代上述的一个或多个方法或补充上述一个或多个方法。扫描段层抽象层是用于处理动态拓扑的强大工具,诸如IEEE P1687标准提出的拓扑和其他动态拓扑。如果能在动态扫描路径中加入并取出扫描链的一部分(例如,利用 IEEE P1687标准提出的SIB单元或任何其他合适的层级使能组件),可以将部分标记为一个(或多个)段。然后,测试调度器从系统状态获知该段是否有效,并因此是否应在TISA 指令调度中包括该段。本领域普通技术人员根据在此教导可以理解,这一原则也能用于其他动态元件,诸如热插拔电路板(例如,通过从状态寄存器检测该电路板的出现)或任何其他合适的动态元件。图18示出了利用扫描链的扫描段层抽象经由被测系统的扫描链用以测试部分被测系统的方法的一个实施例的高级框图。虽然这里主要示出并描述的为串行执行,但方法1800的至少一部分步骤能同时执行,或以不同于参考图18所示出和描述的顺序执行。在步骤1802,方法1800开始。在步骤1804,将扫描链被分解成多个段。该扫描链包括多个元件,并且每个段包括扫描链的至少一个元件。如上文所示,能以任何合适的方式将扫描链分解成段。如在此所述,将扫描链分解成段可以应用在开发流程中的任何位置(例如,由测试开发者、由测试生成工具、由嵌入式电路模型等)。在步骤1806,生成指令集。指令集包括和ISA相关联的处理器指令以及用于测试部分被测系统的测试指令。对于扫描链的每个段,测试指令包括对该段执行的至少一个扫描操作。测试指令可以是任何类型的测试指令,诸如常规测试指令、TISA测试指令等,并能以任何适合的方式生成。能以任何适合的方式生成指令集(例如,以与上文所示和描述相同或类似方式)。在步骤1808,执行该指令集以用于测试部分被测系统。可以以任何合适的方式执行该指令集,这取决于指令集中指令的类型。在步骤1810,方法1800结束。虽然这里参考其中TISA的实施例用于实现将在扫描段层被执行的扫描操作的实施例进行示出并描述,但可以理解的是在利用TISA类指令架构、非TISA指令架构和/或非TISA测试环境实施等环境中也可以提供在此示出并描述的一个或多个扫描段层实施例。虽然在此引用“该TISA”用于描述改进的系统测试能力,该测试能力由在此示出并描述的被形成并利用的TISA的示例性实施例实现,但可以理解的是,可以取决于各种因素形成许多不同的TISA,诸如为其形成该TISA的处理器的一个或多个ISA、为其形成该TISA 的SUT的特点、该TISA应该执行的测试算法的特点等,及其各种组合。因此,在此引用“该 TISA”也能理解为更一般的“TISA”,因为可形成许多不同类型的TISA。图19示出了适合于执行在此描述的功能的计算机的高级框图。如图19所示,计算机1900包括处理器元件1902 (例如,中央处理单元(CPU)或其他合适的处理器)、存储器1904(例如,随机存取存储器(RAM)、只读存储器(ROM)和/或任何其他合适的存储器类型)、适于执行在此示出并描述的系统测试功能的系统测试模块/过程1905、以及各种输入 /输出设备1906(如,用户输入设备(诸如键盘、键区、鼠标等)、用户输出设备(诸如显示器、扬声器等)、输入端口、输出端口、接收器、发送器、以及存储设备(例如,磁带驱动、软盘驱动、硬盘驱动或光盘驱动等))。应注意,这里示出并描述的系统测试功能可以以软件和/或软件和硬件的组合来实现,例如,使用通用计算机、一个或多个专用集成电路(ASIC)和/或任何其他硬件等同物。在一个实施例中,能够将系统测试过程1905加载到存储器1904中,并由处理器1902 执行,以实现和/或支持实现如上所述的至少一部分系统测试功能。这样,能够将系统测试过程1905 (包括关联的数据结构)存储在计算机可读介质或载体上,例如RAM存储器、磁或光驱动或磁盘等。可以设想,这里作为软件方法讨论的一些步骤可以在硬件内实现,例如,作为与处理器协作以执行各种方法步骤的电路。这里所述的一部分功能/元件可以实现为计算机程序产品,其中,当由计算机处理时,计算机指令适配计算机的操作,使得能够调用或以其他方式提供本发明的方法和/或技术。可以将用于调用本发明的方法的指令存储在固定或可拆卸的介质中、经由广播的数据流或其他信号承载介质进行传输、和/或存储在根据指令进行操作的计算设备内的存储器中。尽管在此已经详细示出并描述了结合本发明的教导的各种实施例,但是本领域技术人员能够容易设想同样结合这些教导的许多变化的实施例。
4权利要求
1.一种用于对包括扫描链的被测系统的一部分进行测试的方法,包括将所述扫描链分解为多个段,其中所述扫描链包括多个元件,其中每段包括所述扫描链的至少一个元件;生成用于测试所述被测系统的所述部分的指令集,其中所述指令集包括多个处理器指令以及多个测试指令,所述多个处理器指令与指令集体系结构(ISA)相关,其中,对于所述扫描链的多个段中的每段,所述测试指令包括对该段执行的至少一个扫描操作;以及执行所述指令集以用于测试所述被测系统的所述部分。
2.如权利要求1所述的方法,其中所述ISA和处理器相关,所述处理器执行所述测试指令以用于测试所述被测系统的所述部分,其中所述测试指令与测试访问端口(TAP)相关, 所述处理器经由所述测试访问端口访问所述被测系统的所述扫描链。
3.如权利要求1所述的方法,其中至少部分段具有与其相关的相应段类型,其中对于所述扫描链中具有相同段类型的段的多个实例,与这些段的所述多个实例相关的相应指令集部分基本上类似或相同;以及对于所述扫描链中具有相同段类型的段的多个实例,与这些段的所述多个实例相关的相应指令集部分只被存储一次并且每当检测到该段类型时被访问。
4.如权利要求1所述的方法,其中,对于所述扫描操作中的至少一个扫描操作,执行该扫描操作包括将旁路序列扫描到所述扫描链的所述相关段中。
5.如权利要求1所述的方法,其中经由测试访问端口(TAP)访问所述被测系统,所述测试访问端口具有与其相关的扫描时钟,其中所述扫描时钟只有在扫描操作期间是激活的, 以使所述被测系统将所述扫描操作看作连续比特流。
6.如权利要求1所述的方法,其中所经由测试访问端口(TAP)访问所述被测系统,所述测试访问端口具有与其相关的扫描时钟,该方法还包括在扫描操作之间暂停所述扫描时钟。
7.如权利要求1所述的设备,其中经由测试访问端口(TAP)访问所述被测系统,所述测试访问端口具有与其相关的TAP有限状态机(FSM),其中,对于所述扫描操作中的每个扫描操作,所述方法还包括在执行所述扫描操作之前将所述TAP FSM置于第一任意状态;在执行所述扫描操作期间将所述TAP FSM保持在第二任意状态;在执行所述扫描操作之后将所述TAP FSM置于第三任意状态;其中所述三个任意状态是相同或不同的。
8.如权利要求1所述的方法,其中经由测试访问端口(TAP)访问所述被测系统,所述测试访问端口具有与其相关的TAP有限状态机(FSM),其中,将所述TAP FSM保持在ShiftDR 状态以阻止对所述扫描链的更新。
9.一种用于经由被测系统的扫描链测试所述被测系统的一部分的设备,包括用于将所述扫描链分解成多个段的装置,其中所述扫描链包括多个实体,其中每个段包括所述扫描链的至少一个实体;用于生成测试所述被测系统的所述部分的指令集的装置,其中所述指令集包括多个处理器指令以及多个测试指令,所述多个处理器指令与指令集体系结构(ISA)相关,其中对于所述扫描链的多个段中的每段,所述测试指令包括对该段执行的至少一个扫描操作;以及用于执行所述指令集以测试所述被测系统的所述部分的装置。
10. 一种其上存储指令的计算机可读存储介质,当由计算机处理时,所述指令使得所述计算机执行经由被测系统的扫描链测试所述被测系统的一部分的方法,该方法包括将所述扫描链分解为多个段,其中所述扫描链包括多个实体,其中每段包括所述扫描链的至少一个实体;生成用于测试所述被测系统的所述部分的指令集,其中所述指令集包括多个处理器指令以及多个测试指令,所述多个处理器指令与指令集体系结构(ISA)相关,其中,对于所述扫描链的多个段中的每段,所述测试指令包括对该段执行的至少一个扫描操作;以及执行所述指令集以用于测试所述被测系统的所述部分。
全文摘要
本发明提供一种用于经由被测系统的扫描链测试所述被测系统的至少一部分的方法。该方法包括将所述扫描链分解成多个段、生成用于测试所述被测系统的所述部分的指令集,并执行所述指令集以用于测试所述被测系统的所述部分。所述扫描链包括多个元件,并且每段包括所述扫描链的至少一个元件。所述指令集包括多个处理器指令以及多个测试指令,所述多个处理器指令与指令集体系结构(ISA)相关。对于所述扫描链的多个段中的每个段,所述测试指令包括对该段执行的至少一个扫描操作。也提供了相关设备。
文档编号G01R31/3185GK102341719SQ201080010625
公开日2012年2月1日 申请日期2010年3月3日 优先权日2009年3月4日
发明者布拉德福德·范特鲁尤伦, 米歇尔·波特兰, 苏雷什·戈雅尔 申请人:阿尔卡特朗讯
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1