描述适于动态修改片上系统扫描路径的组件的方法和装置转让专利

申请号 : CN200880118835.X

文献号 : CN101883991B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 塔潘·乔蒂·查克拉伯蒂姜辰焕苏勒什·戈雅尔米歇尔·波多兰布拉德福·吉恩·范特卢勒

申请人 : 阿尔卡特朗讯美国公司

摘要 :

本发明提供了一种用于片级JTAG测试的新硬件描述语言。这种新硬件描述语言被称作新BSDL(NSDL),使得能够描述片上系统的测试资源,从而使得能够以便于片上系统测试的方式来描述片上系统。本发明提供了一种自下至上的方法来描述片上系统。本发明支持片上系统的每个组件的算法描述,并且支持片上系统的组件之间的互连的算法描述,从而能够产生整个片上系统或部分片上系统的算法描述。本发明支持适于动态修改片上系统的扫描路径的器件(这里被称作交叉器件),包括用于描述这种器件以及使用这种器件的来执行片上系统测试的方法。

权利要求 :

1.一种使用适于对片上系统的组件的访问进行控制的器件来测试片上系统的至少一部分的方法,所述方法包括:使用所述片上系统的测试资源的描述,其中所述描述是算法描述,籍此所述算法描述包含以适于测试工具理解的格式而定义的一个或多个构成规则;

接收对经由架构而互连的输入连接集合和输出连接集合的描述,所述架构适于动态地控制对组件的访问,其中,输入连接集合包括扫描路径输入连接以及至片上系统的组件的至少一个组件访问输入连接,输出连接集合包括扫描路径输出连接以及来自片上系统的组件的至少一个组件访问输出连接;以及存储对经由所述架构而互连的输入连接集合和输出连接集合的描述。

2.根据权利要求1所述的方法,其中,所述架构包括开关架构、总线架构以及网络架构中的一个。

3.根据权利要求1所述的方法,其中,所述架构适于动态地修改片上系统的系统扫描路径。

4.根据权利要求1所述的方法,其中,所述至少一个组件访问输入连接和所述至少一个组件访问输出连接适于:被动态地选择,以将所述组件添加至片上系统的扫描路径,并被动态地取消选定,以从片上系统的扫描路径中移除所述组件。

5.根据权利要求1所述的方法,其中,至少一个器件适于:经由所述至少一个组件访问输入连接和所述至少一个组件访问输出连接,使用至少一个事务将所述组件添加至片上系统的扫描路径。

6.根据权利要求1所述的方法,其中,所述架构适于支持至少一个连接,以动态地控制对组件的访问。

7.根据权利要求1所述的方法,其中,扫描路径输入连接适于接收应用于片上系统的输入测试访问端口的测试比特流,扫描路径输出连接适于向片上系统的输出测试访问端口提供测试比特流。

8.一种用于使用权利要求1所述的方法测试片上系统的组件的装置,所述装置包括:输入连接集合,包括:扫描路径输入连接、以及至片上系统的组件的至少一个组件访问输入连接;以及输出连接集合,包括:扫描路径输出连接、以及来自片上系统的组件的至少一个组件访问输出连接;

其中,所述至少一个组件访问输入连接和所述至少一个组件访问输出连接经由架构而互连,所述架构适于支持多个连接,以动态地控制对组件的访问。

说明书 :

描述适于动态修改片上系统扫描路径的组件的方法和装置

技术领域

[0001] 本发明涉及印刷电路板领域,更具体地,涉及印刷电路板的测试。

背景技术

[0002] 联合测试行动组(JTAG)是指针对测试访问端口的IEEE 1149标准,用于使用边界扫描来测试印刷电路板。自动测试产生(ATG)工具使用JTAG来测试印刷电路板。已经开发了边界扫描描述语言(BSDL)作为板级JTAG的IEEE 1149.1标准的一部分,并且还已经开发了分级扫描描述语言(HSDL)作为BSDL的扩展。BSDL/HSDL描述了在板上或板的组件上可用的资源(其中,HSDL描述了由其他组件构成的组件)。虽然BSDL/HSDL对于板级JTAG是高效的,但是从板级JTAG至片级JTAG的发展突出了BSDL/HSDL的局限性。
[0003] 正在对指令JTAG(IJTAG)进行标准化(表示为P1687标准),来克服与从板级JTAG至片级JTAG的转换相关联的现有JTAG局限性;然而,与IJTAG相关联的进行中的工作已经揭示出,BSDL/HSDL不能够满足片级JTAG测试的描述需求。BSDL/HSDL依赖于组成边界扫描寄存器的单元的有序列表,然而,这样的静态描述不适合描述IJTAG中所需的复杂动态扫描链。此外,BSDL/HSDL不能提供用于描述系统的每个组件所需的测试过程的空间。

发明内容

[0004] 本发明提供了一种用于片级JTAG测试的新硬件描述语言。这种新硬件描述语言被称作新BSDL(NSDL),使得能够描述片上系统的测试资源,从而使得能够以便于片上系统测试的方式来描述片上系统。本发明提供了一种自下至上的方法来描述片上系统。本发明支持片上系统的每个组件的算法描述,并且支持片上系统的组件之间的互连的算法描述,从而能够产生整个片上系统或部分片上系统的算法描述。本发明支持适于动态修改片上系统的扫描路径的器件(这里被称作交叉器件),包括用于描述这种器件以及使用这种器件的来执行片上系统测试的方法。
[0005] 在一个实施例中,提供了一种使用适于对片上系统的组件的访问进行控制的器件来进行测试的方法。在一个这样的实施例中,该方法包括:接收对经由架构而互连的输入连接集合和输出连接集合的描述,该架构适于动态地控制对组件的访问;以及存储对经由架构而互连的输入连接集合和输出连接集合的描述,其中,输入连接集合包括扫描路径输入连接以及至片上系统的组件的至少一个组件访问输入连接,输出连接集合包括扫描路径输出连接以及来自片上系统的组件的至少一个组件访问输出连接。
[0006] 在一个实施例中,提供了一种用于测试片上系统的组件的方法,其中,片上系统包括扫描路径,组件包括至少一个寄存器。在一个这样的实施例中,该方法包括:通过对组件的算法描述进行处理,将组件的至少一个函数转换成针对该组件的至少一个寄存器的至少一个寄存器值;通过对片上系统的算法描述进行处理,来定位片上系统的拓扑内所述组件的位置;通过对交叉器件的算法描述进行处理来驱动交叉器件(其中,交叉器件适于动态地将所述组件添加至片上系统的扫描路径);以及使用针对所述组件的至少一个寄存器值以及片上系统的拓扑内所述组件的位置,来测试组件。

附图说明

[0007] 结合附图,通过考虑以下详细描述,能够容易理解本发明的教导,在附图中:
[0008] 图1示出了测试环境的高级框图;
[0009] 图2示出了图1的测试环境的片上系统的高级框图;
[0010] 图3示出了对“无访问”组件的输入-输出认识;
[0011] 图4示出了对“受限访问”或“全访问”组件的输入-输出认识;
[0012] 图5示出了对组件的内部扫描路径的片(slice)的显式引用;
[0013] 图6示出了交叉器件的表示的高级框图;
[0014] 图7示出了使用通用交叉器件来动态修改片上系统的扫描路径的高级框图;
[0015] 图8示出了可以使用NSDL描述的一个交叉器件的高级框图;
[0016] 图9示出了可以使用NSDL描述的一个交叉器件的高级框图;
[0017] 图10示出了可以使用NSDL描述的一个交叉器件的高级框图;
[0018] 图11示出了图1的测试环境的测试系统的高级框图;
[0019] 图12示出了通过JTAG连接来测试系统的图1的测试系统执行的示例方法;
[0020] 图13示出了通过JTAG连接来测试系统的图1的测试系统执行的示例方法;
[0021] 图14示出了通过JTAG连接来测试系统的图1的测试系统执行的示例方法;
[0022] 图15示出了使用图2的片上系统的组件之一的描述来确定用于测试该组件的测试过程的寄存器比特值;
[0023] 图16示出了使用图2的片上系统的组件的描述来确定用于测试图2的片上系统的组件之一的测试过程的比特流;
[0024] 图17示出了在IJTAG/NSDL框架中测试系统的组件的图1的测试系统执行的示例方法;
[0025] 图18示出了示例片上系统的高级框图;
[0026] 图19示出了使用图18的片上系统的组件之一的描述来确定用于测试该组件的测试过程的寄存器比特值;
[0027] 图20示出了使用图18的片上系统的组件的描述来确定图18的片上系统的组件的描述;
[0028] 图21示出了并行访问接口的通用连接方案的高级框图;
[0029] 图22是示出了两个示例并行访问连接方案的高级框图;
[0030] 图23A示出了示例测试环境的高级框图;
[0031] 图23B示出了图23A的示例测试环境内的数据流的高级框图;
[0032] 图24示出了并行端口与片上系统的核心之间的示例连接的高级框图;
[0033] 图25示出了并行端口与片上系统的核心之间的示例连接的高级框图;
[0034] 图26示出了并行端口与片上系统的核心之间的示例连接的高级框图;
[0035] 图27示出了并行端口与片上系统的核心之间的示例连接的高级框图;
[0036] 图28示出了并行访问接口的内部连接方案的高级框图;
[0037] 图29示出了用于描述片上系统的测试资源的方法;以及
[0038] 图30示出了适合于执行本文描述的函数的通用计算机的高级框图。
[0039] 为便于理解,在可能的情况下,使用相同的附图标记来指示附图中相同的元件。

具体实施方式

[0040] 如这里所述,正在将指令JTAG(IJTAG)标准化(被称作P1687标准,或备选地,IJTAG)来克服与从板级JTAG测试至片级JTAG测试的转换相关联的现有JTAG局限性;然而,与IJTAG相关联的进行中的工作已经揭示出,BSDL/HSDL不能够满足片级边界扫描的描述需求。本发明提供了一种克服用于片级JTAG测试的BSDL/HSDL的局限性的新硬件描述语言。这种新硬件描述语言在这里被称作新BSDL(NSDL)。NSDL语言实现了片上系统的测试资源的描述,从而便于片上系统的测试。从以下NSDL描述中可以看到NSDL描述语言的许多优点。
[0041] 如这里所述,新硬件描述语言NSDL还实现了基于JTAG的测试中的附加改进。NSDL描述语言使得能够使用所谓的“交叉器件”来便于片上系统器件的测试。交叉器件实现了对片上系统的系统扫描路径的动态修改。NSDL描述语言还使得能够使用并行访问来便于片上系统器件的测试。可以多种方式来提供对片上系统器件的并行访问。此外,应当注意,虽然这些改进已由NSDL描述语言实现,但是这些改进也可以结合今后开发的其他描述语言来利用。
[0042] 在硬件开发过程中,有三个主要参与方:器件供应商、系统架构师、以及测试工程师。器件供应商制造特定器件。系统架构师使用由器件供应商提供的器件来构成系统。测试工程师对该系统进行测试,以确保该系统正确运行(例如,测试系统器件之间的互连、器件函数、系统函数等)。NSDL语言可以由器件供应商使用(例如,来描述其器件),由系统架构师使用(例如,用于构成系统),以及由测试工程师使用(例如,用于测试该系统)。因此,预期的是在整个硬件开发过程中使用NSDL语言。
[0043] 在片上系统开发过程中,组成系统的器件可以是“软”器件,即,使用某种硬件描述语言的器件描述。在该过程中,系统架构师在系统级开发流中将软器件与系统级代码集成,以获得最终由测试工程师进行测试的片上系统。由于片上系统的复杂度增加(例如,在器件数目、器件之间的互连、器件内依赖性、器件间依赖性等方面),测试片上系统的复杂度也增加。NSDL语言使得能够容易描述并从而容易测试任何复杂度的片上系统。
[0044] 图1示出了测试环境的高级框图。具体地,测试环境100包括片上系统(S-o-C)110和测试系统(TS)120。TS 120测试S-o-C 110(例如,测试S-o-C 110的各个单独组件(包括组件函数)、S-o-C 110上器件之间的互连、S-o-C 110的系统级函数等,及其各种组合)。TS 120经由测试访问端口(TAP)115测试S-o-C 110,该测试访问端口(TAP)115包括输入端口115I(表示为TDI端口)以及输出端口115O(表示为TDO端口)。
[0045] 在一个实施例中,在P1687环境中,通过IEEE 1149.1标准描述TAP115。尽管这里主要使用TDI端口115I和TDO端口115O示出和描述,但是TAP 115可以包括其他控制端口,例如,TCK端口、TMS端口、以及可选地,TRST端口(出于清楚描述目的已经省略)。此外,尽管主要关于由IEEE 1149.1标准描述的TAP来示出和描述,但是TAP 115可以利用各种其他端口(例如,由其他标准描述的端口等,及其各种组合)。
[0046] TS 120使用测试过程(test procedure)对S-o-C 110进行测试。TS 120可以使用一个或多个测试过程来执行一个或多个测试。测试过程可以用于测试组件的一部分(例如,组件函数、组件函数集、组件内依赖性等)、组件、一组组件(例如,组件之间的互连、组件间依赖性等)、一个或多个系统级函数等,及其各种组合。
[0047] TS 120产生测试过程来测试S-o-C 110。测试过程指定测试S-o-C110所需的信息。针对S-o-C 110的测试过程可以指定S-o-C 110的描述(包括对S-o-C 110的各个单独组件中的每一个的描述,以及S-o-C 110的系统级描述)。测试过程可以指定输入测试向量和预期输出测试向量。测试过程可以包括与测试相关联的其他信息,例如,测试所需的估计的时间、针对测试输出数据处理(例如,日志记录、错误触发、恢复动作等)等,及其各种组合。
[0048] TS 120使用S-o-C 110的描述(包括对S-o-C 110的各个单独组件中的每一个的描述,以及S-o-C 110的系统级描述)来产生测试过程以测试S-o-C 110。可以使用NSDL来指定对S-o-C 110的各个单独组件的描述。单独组件的描述可以描述该组件的内部扫描路径。可以使用NSDL来指定S-o-C 110的系统级描述。S-o-C 110的系统级描述可以描述S-o-C 110的拓扑(例如,组件之间的互连、组件间依赖性等)。
[0049] S-o-C 110的描述信息(包括各个单独组件的描述、系统级描述等)包括用于为S-o-C 110产生测试过程的信息。例如,描述信息包括组件扫描路径信息、系统拓扑信息等,可以对这些信息进行处理以确定扫描路径长度信息、扫描路径分级信息等,及其各种组合。S-o-C 110的描述信息可以包括这里描述的任何其他描述信息。
[0050] TS 120通过对S-o-C 110执行一个或多个测试过程来测试S-o-C110。TS 120为要执行的测试产生输入比特流和预期测试结果(例如,预期输出比特值或输出比特流)。TS120向TDI端口115I提供输入比特流(被称作输入测试向量),并接收来自TDO端口115O的相应输出比特流(被称作输出测试向量)。TS 120将实际输出比特流与预期输出比特流进行比较,以确定测试结果。TS 120可以存储测试结果。
[0051] TS 120可以执行一个或多个测试过程来测试S-o-C 110。TS 120可以以某种方式组织对多个测试过程的执行,来最小化总测试时间(由于对于相同的测试过程的集合,不同调度决策会得到不同的测试完成时间)。TS 120可以指定测试调度(即,对执行测试过程所必须按照的顺序进行指定的调度)。TS 120可以执行与片上系统的测试相关联的多种其他函数。
[0052] 图2示出了图1的测试环境的片上系统的高级框图。如图2所示,S-o-C 110包括多个组件210A-210E(共同示为组件210),这些组件通过多个组件互连220(共同示为组件互连220)而相互连接。
[0053] 组件210可以包括:可以包括在片上系统中的任何组件。可以使用NSDL来描述组件210。组件210在这里也可以被称作测试资源。
[0054] 在一个实施例中,在根据P1687标准的系统中,组件210可以包括IP、仪器(instrument)、和/或选择仪器比特(SIB)。
[0055] 知识产权(IP)器件是需要测试的正常器件。
[0056] 仪器是不需要测试的、提供适于帮助测试的功能(例如,读取值、监视值、提供有用信息等,及其各种组合)的器件。例如,仪器可以是要用于对加速寿命测试进行参数化的温度传感器的输出。例如,仪器可以是对于软件定义的无线电装置的获取阶段,用于校准可调谐滤波器的传感器的参考值。换言之,仪器可以帮助在初始系统测试期间以及在整个系统寿命期间进行测试。
[0057] 由于IP/仪器可能非常类似,这里可以交换地使用这两个术语。此外,由于IP和仪器可以用作片上系统的组件,因此更一般地,IP和仪器在这里可以被称作组件。
[0058] IP/仪器可以包括分级扫描路径。具有分级扫描路径的组件包括内部扫描路径,当将该组件引入到系统中时,该内部扫描路径成为系统扫描路径的一部分。
[0059] SIB是分级扫描路径单元,其使得能够动态地将扫描路径的一部分包括在扫描路径中或从扫描路径中去除(这取决于测试中将会使用哪个或哪些器件)。SIB形成当前P1687标准草案的硬件提议的一部分。
[0060] 一般而言,分级改善了对片上系统的组件的测试。例如,分级实现了测试期间对有源系统扫描路径的最小化以及对组件的隔离,从而减少了对片上系统的组件的访问时间。
[0061] 在其他实施例中,在根据其他标准的系统中,组件210可以包括其他类型的组件。
[0062] 在一个实施例中,组件210可以包括一个或多个交叉器件。片上系统测试中对交叉器件的使用是通过使用NSDL语言来实现的(即,大多数这样的器件不能由BSDL/HSDL来描述)。参照图6-10可以更好地理解片上系统测试中对交叉器件的使用。
[0063] 如图2所示,组件210中的每一个包括多个内部寄存器。具体地,组件210A包括三个寄存器(A0、A1、A2),组件210B包括六个寄存器(B0、B1、B2、B3、B4、B5),组件210C包括五个寄存器(C0、C1、C2、C3、C4),组件210D包括三个寄存器(D0、D1、D2),以及组件210E包括四个寄存器(E0、E1、E2、E3)。每个组件210的寄存器形成针对该组件210的内部扫描路径。可以使用NSDL来描述每个组件210的内部扫描路径。
[0064] 如图2所示,每个组件210支持至少一个函数。具体地,组件210A支持三个函数,组件210B支持四个函数,组件210C支持三个函数,组件210D支持两个函数,组件210E支持一个函数。由每个组件210支持的函数分别利用每个组件210的寄存器(即,内部扫描路径)。因此,可以使用NSDL来描述每个组件210支持的函数。
[0065] 如图2所示,S-o-C 110的组件210经由S-o-C 110的组件互连220连接。组件210(即,组件210的内部扫描路径)和组件210之间的组件互连220形成从S-o-C 110的输入测试端口(TDI)至S-o-C 110的输出测试端口(TDO)的系统扫描路径。可以使用NSDL来定义系统扫描路径(例如,通过使用NSDL来定义各个单独组件中的每一个,以及使用NSDL来定义系统的构成,从而形成基于NSDL的总体系统描述)。
[0066] 如这里所述,基于NSDL的S-o-C 110的总体系统描述是算法描述(即,由于在使用相湖关联的算法的集合中,描述组件210、组件互连220、组件内以及组件间依赖性等中的每一个)。S-o-C 110的算法描述包括适于在测试S-o-C 110时由TS 120使用的信息(例如,扫描路径长度信息、扫描路径分级信息等,及其各种组合)。
[0067] 可以通过以下方式来描述片上系统:描述片上系统的每个组件(例如,描述IP、仪器、交叉器件(当使用时)等,及其各种组合),描述片上系统的拓扑(包括描述片上系统的每个组件之间的互连、组件内以及组件间依赖性等,及其各种组合)。
[0068] 在一个实施例中,在根据P1687标准的系统中,组件可以包括IP、仪器、和/或选择仪器比特(SIB),片上系统的描述需要:每个IP/仪器的描述(例如,包括内部寄存器的含义、要应用/观察的过程/比特流集合等),每个SIB的描述(当使用SIB时),系统扫描路径的构成的描述(即,扫描路径如何通过片上系统,包括每个组件的内部扫描路径如何通过组件等)等,及其各种组合。
[0069] 将IP插入到扫描链中,这能够实现通过扫描链对IP的测试。片上系统内对IP的使用是根据针对IP的访问权限级别(APL)(例如,无访问、受限访问、全访问)而改变的。
[0070] 如果针对IP的APL是“无访问”,则测试工具不知道IP的内部,因此必须依赖于由IP的供应商提供的信息。例如,必须提供针对IP的比特流集合(即,输入比特流和预期输出比特流)。在这种情况下,认为该比特流为静态比特流。测试工具必须将针对IP的静态输入比特流插入到针对片上系统的系统比特流中,并对IP的供应商所指定的相应输出比特流进行处理。
[0071] 如果针对IP的APL是“全访问”,则测试工具完全知道IP的内部,包括用NSDL描述的IP的内部扫描链以及用选择的描述语言描述的IP的源。在这种情况下,测试工具能够直接计算针对IP的所需的输入比特流和预期输出比特流(例如,使用其自己的算法),或者IP的供应商能够提供预先计算的比特流的集合(例如,作为静态和/或动态比特流)。
[0072] 如果针对IP的APL是“受限访问”,则测试工具仅有限地知道IP的内部。提供IP的NSDL描述。IP的NSDL描述包括IP的内部扫描链的描述,以及可以用于测试IP的过程集。在这种情况下,测试工具使用IP的描述,以产生在测试IP时使用的比特流(例如,输入比特流和预期输出比特流)。
[0073] 将仪器插入到片上系统中,这能够实现了通过检查一些值或条件来测试片上系统。仪器可以支持可用于测试目的的一个或多个函数。因此,虽然IP的描述仅包括测试IP所需的过程集,但是仪器的描述还包括可以用于访问仪器的函数的过程(和/或比特流)集。仪器的描述可以包括从构成仪器的寄存器的寄存器的值方面对仪器的函数的描述。因此,使用NSDL,IP和仪器之间的唯一不同在于过程集。
[0074] 如这里关于IP和仪器所述,可以使用过程来指定IP和仪器的描述。过程可以视为每次调用过程时要执行的原子指令的拼接。
[0075] 针对IP/仪器的过程描述可以取决于IP/仪器的APL。
[0076] 如果组件的APL是“无访问”,则过程可以表示为比特流值(即,要写入扫描路径中的值以及要从扫描路径中读取的值)。
[0077] 如果组件的APL是“受限访问”或“全访问”,则对IP/仪器的扫描路径的知晓提供了相对于IP/仪器的过程的表示的附加自由度,使得可以构成过程。过程的空间构成指示可以如何使用不同过程的输入/输出来构成片上系统的系统扫描路径的输入/输出。时间构成指示可以如何将过程顺序地应用于相同组件(例如,IP/仪器),以执行特定操作。此外,过程可以嵌套至和/或嵌套自更大的过程和/或多个更小过程。
[0078] 过程包括过程属性(即,过程的描述)以及过程体。过程的描述可以包括以下信息:例如长度、忙模式指示、进入条件、退出条件、依赖性、内部扫描路径描述等,及其各种组合。
[0079] 固定长度过程可以定义为始终占用相同量的时间来执行的过程。可变长度过程可以定义为占用可变量的时间来执行的过程。可以使用其他时间值(例如,最佳和最差情况时间、平均时间等,及其各种组合)来定义可变长度过程。在一个实施例中,必须为每个可变长度过程提供至少一个退出条件。
[0080] 可以从周期角度来表达过程长度(或者,在不能够用周期来表达的情况下,用诸如秒等一些其他绝对项或时间的一些其他度量来表达)。例如,对于采取物理度量的仪器、异步仪器、在非同步时钟域中进行操作的仪器等,不能从周期角度来表达过程长度。如果以时间来表达过程长度,则测试工具可以确定周期计数(例如,利用对实际测试时钟周期的知晓),或者估计周期计数(例如,使用参考时钟周期)。
[0081] 过程应当声明过程忙模式。如果在执行过程期间,扫描链的值不得改变,则过程的忙模式为“保持”,(即,每次扫描访问必须将其重置为相同值)。例如,处于“保持”模式的仪器可以是组合(combinatorial)器件(即,每次修改都会影响结果)。如果在过程的执行期间,扫描链的值不重要,则过程的忙模式为“不理会”。例如,处于“不理会”模式的仪器可以是仅当被触发时才对输入进行采样的任何器件。
[0082] 片上系统的描述还包括与片上系统相关联的依赖性的描述。片上系统的依赖性包括组件内依赖性(片上系统的一个组件的函数或过程之间),以及组件间依赖性(片上系统的不同组件的函数或过程之间)。可以以许多方式来指定依赖性的描述(例如,通过列出这些依赖性、基于名称的链接等,及其各种组合)。
[0083] 例如,函数X可以通过″函数X依赖于函数X1,X2,…,Xn的完成″这样的指示来描述,这意味着该函数X在每个所列的子函数完成之前不能开始其执行。例如,过程X可以通过″过程X依赖于过程Y″这样的指示来描述,这意味着,出于多种原因,在执行过程X之前,必须完成过程Y。可以以各种其他方式来描述片上系统的依赖性。
[0084] 应当声明片上系统的组件内和组件间依赖性。依赖性的声明使得测试工具能够执行测试调度。在一个实施例中,可以将依赖性声明为该依赖性的过程的声明部分的一部分。在一个实施例中,可以使用显式命名来声明依赖性。在一个这样的实施例中,通用参数可以用于将外部依赖性与组件的符号名链接起来,其中该组件与该外部依赖性相关联。
[0085] 使用NSDL,可以以各种其他方式来执行依赖性的描述和声明。
[0086] 针对组件(或组件组)的一个过程(或多个过程)的构建基于组件的APL而变化,组件的APL影响对与组件相关联的输入/输出信息的认知。
[0087] 图3示出了对“无访问”组件300的输入-输出认知。如果组件的APL是“无访问”,则对于由组件支持的每个函数,函数体包括:输入流信息(要用于构成输入比特流)、函数长度和扫描路径长度信息、以及输出比特流信息(例如,预期的输出比特流、所需的输出比特流处理等,及其各种组合)。
[0088] 图4示出了对“受限访问”或“全访问”组件400的输入-输出认知。如果组件的APL是“受限访问”或“全访问”,则组件的内部扫描路径是已知的(即,组件的每个寄存器、以及寄存器的拓扑是已知的)。可以将组件的内部扫描路径分成多个片(slice),这些片可以分布在一个或多个分级级别上。可以以任何方式(例如,使用相邻级别的一个或多个寄存器)来控制对不同分级级别的访问。参照图4示出和描述的组件,可以更好地理解将组件的内部扫描路径分成多个分级级别。
[0089] 如图4所示,将内部扫描路径分成五个片(表示为片1、2、3、4、5)。内部扫描路径的五个片分布在两个分级级别(表示为级别0、1)上。片1、2、3、4、5分别包括4个、4个、3个、3个和2个寄存器。片1、2、5位于分级级别0中。片3和4位于分级级别1中。寄存器(表示为寄存器H1)控制内部扫描路径分级的级别0和级别1之间的访问。H1寄存器控制内部扫描路径,使得对片3和4旁路(即,从内部扫描路径中排除它们),或者不对片3和4旁路(即,在内部扫描路径中包括它们)。
[0090] 如图4所示,内部扫描路径的组成如下。片1的输入是TDI,并且片1的输出是片2的输入。片2的输入是片1的输出,并且片2的输出是至H1的第一输入(级别0输入)。
在级别0,H1的输入是片2的输出,并且H1的输出是片5的输入。在级别1,H1的输出是片
3的输入,并且H1的输入是片4的输出。片3的输入是H1的输出(级别1输出),片3的输出是片4的输入。片4的输入是片3的输出,片4的输出是H1的输入(级别1输入)。
片5的输入是H1的输出(级别0输出),以及片5的输出是TDO。
[0091] 在一个实施例中,将组件的内部扫描路径分成多个片是函数性,即,内部扫描路径的每个片具有在其上操作的一个或多个片函数,可以使用一个或多个片过程来测试每个片函数,每个片函数是可由测试工具独立调度的。在该实施例中,可以以类似于“无访问”组件的函数体的构成方式,来构成在内部扫描路径的给定片上操作的函数体(即,使用输入比特流信息、函数长度和扫描路径长度信息、输出比特流信息等、及其各种组合来描述函数体)。
[0092] 因此,利用与内部扫描路径的不同片或片的组合一起操作的不同过程,可以以多种方式来使用组件的内部扫描路径的划分。例如(参照图4),执行与片1相关联的第一过程P1,以将数据写入片1中,从而触发组件中某个函数的执行,这得到片2中的存储或结果数据以及片5中的差错数据。然后,可以执行两个附加过程P2和P5(分别操作于片2和5上)以分别读取片2和5的值。因此,将内部扫描路径分成片(包括在多个分级级别上划分),这提供了片上系统测试的很大灵活性。TS 120可以容易将算法过程转换成串行测试比特流(例如,输入比特流和预期输出比特流)。
[0093] 由于可以开发用于使用组件的内部扫描路径的片的不同过程,所以利用内部扫描路径的片的过程必须能够引用片(包括片内部的信号)。过程可以以任何方式引用片。在一个实施例中,例如,过程可以使用显式命名来引用片。在一个这样的实施例中,向每个片(即,寄存器或寄存器组)分配唯一名称,从而使得能够像访问记录一样来访问分级实例化的片。关于图5示出和描述了使用显式命名来标识组件的片的示例。
[0094] 图5示出了对组件500的内部扫描路径的片的显式引用。如图5所示,组件500包括具有六个片的12寄存器扫描路径,其中每个片由唯一名称指代。第一片是命名为BS_0的单个寄存器。第二片是命名为BS_1的单个寄存器。第三片是命名为SCAN_4_BIT_0的四个寄存器的串行链,该串行链包括命名为BS_0、BS_1、BS_2和BS_3的四个寄存器。第四片是命名为Another_SCAN_4_BIT的四个寄存器的串行链,该串行链包括命名为BS_0、BS_1、BS_2和BS_3的四个寄存器。第五片是命名为BS_2的单个寄存器。第六片是命名为BS_3的单个寄存器。
[0095] 如这里所述,可以像访问记录一样来访问分级实例化的寄存器。例如,由箭头1指示的寄存器的唯一名称为BS_1(即使两个其他寄存器也命名为BS_1,但可以看出,使用分级命名如何确保了寄存器的唯一命名)。例如,由箭头2指示的片(即,寄存器组)的唯一命名是SCAN_4_BIT_0。例如,由箭头3指示的寄存器的唯一命名为another_SCAN_4_BIT.BS_1。换言之,对于片和寄存器的任意数目的分级级别,能够使用唯一命名来引用内部扫描路径的每个片、以及每个片的每个寄存器。
[0096] 尽管这里主要关于可以用于定义组件的过程或过程集合的特定过程属性(例如,过程长度、函数和过程依赖性、内部扫描路径描述、片描述、片引用属性等)进行示出和描述,但是可以指定各种其他过程属性。用于描述过程的过程属性可以包括用于以支持片上系统测试的方式来描述过程的任何信息。
[0097] 除了过程属性以外,过程还包括过程体。过程体包括过程的细节。过程体可以以任何方式来实现。过程体不具有扫描路径的概念(而是,在片上并行进行访问,以及测试工具将这些操作合并成对系统扫描路径的访问)。过程体可以使用多种语句、断言、嵌套过程等,及其各种组合。
[0098] 在一个实施例中,其中,使用用VHDL语言实现的NSDL来描述片上系统(因此,使用用VHDL语言实现的NSDL来描述与片上系统相关联的每个过程),可以使用VHDL语法来表达过程体。过程的过程体可以以其他方式来表达,这取决于片上系统的描述的实现方式。
[0099] 通过NSDL容易提供组件的内部扫描路径的描述。在NSDL中,每个寄存器单元被认为是实体,可以将寄存器单元分组成包(package)(例如,使用VHDL规则,其中NSDL实现为VHDL的超集)。在NSDL中,使用两个通用参数,“precedent”(在前)和“following”(在后),来描述每个寄存器实体,这两个参数可以用于通过显式引用寄存器实例来表达扫描路径。寄存器实体的“precedent”参数指定至该寄存器实体的输入的源。寄存器实体的“following”参数指定来自该寄存器实体的输出的目的地。因此,寄存器实体可以包括单个寄存器、寄存器组(包括分级分组)等。
[0100] 针对与关于图5示出和描述的内部扫描链相对应的以下样本代码,可以更好地理解组件的内部扫描路径的描述。
[0101] 以下样本代码示出了包括串行布置的四个基本边界扫描寄存器在内的简单扫描路径,其中,第一边界扫描寄存器接收来自TDI端口的输入,第四边界扫描寄存器向TDO端口提供输出:
[0102] BS_0:BS generic map(precedent=>″TDI″,following=>″BS_1″);
[0103] BS_1:BS generic map(precedent=>″BS_0″,following=>″BS_2″);
[0104] BS_2:BS generic map(precedent=>″BS_1″,following=>″BS_3″);
[0105] BS_3:BS generic map(precedent=>″BS_2″,following=>″TDO″);
[0106] 可以将该4寄存器扫描链封装到实体中,并分级实例化。以下样本代码确切地示出了如何将该4寄存器扫描链封装到实体中并分级实例化(最终用于描述SCAN_4_BIT_0和another_SCAN_4_BIT寄存器实体):
[0107] Entity SCAN_4_BIT is
[0108] Generic(precedent:string:=″TDI″;following:string:=″TDO″);End entity;
[0109] Architecture A of SCAN_4_BIT is
[0110] begin
[0111] BS_0:BS generic map(precedent=>precedent,following=>″BS_1″);
[0112] BS_1:BS generic map(precedent=>″BS_0″,following=>″BS_2″);
[0113] BS_2:BS generic map(precedent=>″BS_1″,following=>″BS_3″);
[0114] BS_3:BS generic map(precedent=>″BS_2″,following=>following);
[0115] end;
[0116] 以下样本代码示出了图5的12寄存器扫描路径的表示(描述)(其中,如关于图5示出和描述的,使用六个寄存器实体来表示12寄存器扫描路径,包括四个单独寄存器和由4寄存器扫描链组成的两个寄存器实体)。
[0117] BS_0:BS generic map(precedent=>″TDI″,following=>″BS_1″);
[0118] BS_1:BS generic map(precedent=>″BS_0″,following=>″SCAN_4_BIT_0″);
[0119] SCAN_4_BIT_0:BS generic map(precedent = > ″ BS_1 ″,following =>″another_SCAN_4_BIT″);
[0120] another_SCAN_4_BIT:BS generic map(precedent= > ″ SCAN_4_BIT_0 ″,following=>″BS_2″);
[0121] BS_2:BS generic map(precedent=>″another_SCAN_4_BIT″,following=>″BS_3″);
[0122] BS_3:BS generic map(precedent=>″BS_2″,following=>″TDO″);
[0123] 使用这种类型的描述,测试工具可以在编译时间(例如,使用上下文校验)自动计算与扫描路径有关的信息(例如,其长度、其分级结构等,及其各种组合)。此外,寄存器实体的描述是高度可再用的(例如,用于其他设计)。由于能够以许多不同方式来收集、存储以及校验针对寄存器实体的描述信息(即,由于符号表的实现方式在编译器之间可能发生显著变化,例如,在散列表、数据库等方面),所以出于清楚和一般性的目的,省略其细节。
[0124] 此外,由于使用这种类型的描述,容易描述片上系统的每个组件,因此可以通过对单独组件的描述进行组合来获得片上系统的总体系统描述(包括组件之间互连的描述,组件间依赖性的描述等,及其各种组合)。在其他工作中,NSDL为描述(因此,测试)片上系统配置提供显著灵活性。
[0125] 如这里所述,NSDL除了能够描述形成片上系统的扫描路径的一部分的典型组件以外,NSDL还能够描述能够实现片上系统扫描路径的动态改变的器件。用NSDL术语,这种类型的器件被称作“交叉器件”。参照图6示出和描述了交叉器件的通用表示。
[0126] 图6示出了交叉器件的表示的高级框图。具体地,交叉器件表示600代表能够动态修改片上系统的扫描路径的交叉器件。交叉器件将一个或多个输入(称作支流(affluent))路由至一个或多个输出(称作分支(tributarie))。如图6所示,交叉器件表示600包括多个支流(表示为path_in_0至path_in_m)以及多个分支(表示为path_out_0至path_out_n)。
[0127] 为了在测试片上系统时利用交叉器件,必须描述交叉器件。使用BSDL/HSDL很难(如果不是不可能的话)实现交叉器件的动态可变扫描路径的描述,BSDL/HSDL专门被设计为处理静态扫描路径。相反,NSDL能够容易提供交叉器件的动态可变扫描路径的描述,NSDL提供由测试工具容易理解的交叉器件的算法描述。
[0128] 使用NSDL的交叉器件的通用描述如下:
[0129] IPis
[0130] Generic(
[0131] precedent:string:=″TDI″;
[0132] following:string:=″TDO″;
[0133] affluent:string:=″deselected″;
[0134] tributary:string:=″deselected″;
[0135] );
[0136] End
[0137] 从以上提供的交叉器件的通用描述可见,通用参数″affluent″(支流)和″tributary″(分支)可以用于访问分级扫描路径。首先将通用参数″affluent″和″tributary″设置为″deselected″(取消选定),使得交叉器件仅仅操作为扫描路径内的途经通过的组件(即,支流和分支是不活动的,因此不对扫描路径进行动态修改)。通过使用″affluent″和″tributary″参数来调用相关的选择函数,可以激活交叉器件以动态修改扫描路径。
[0138] 如果存在多于一个支流和/或多于一个分支,必须唯一地标识支流和/或分支中的每一个。在一个实施例中,例如,可以使用简单的排序编号(例如,对于支流为affluent_0、affluent_1等;对于分支为tributary_0、tributary_1等)。使用基于NSDL的描述,测试工具能够仅通过引用通用参数来理解通过交叉器件的连接。
[0139] 可以以任何方式来产生交叉器件的描述。在一个实施例中,使用经由架构而互连的输入连接集合和输出连接集合的描述,来产生交叉器件的描述,其中该架构适于动态控制对片上系统的一个组件(或多个组件)的访问。可以存储交叉器件的描述以用于测试。处理器可以接收或获取交叉器件的描述(例如,从存储器、另一系统,或从这种描述的任何其他源)以用于执行测试。
[0140] 如这里所述,输入连接集合包括扫描路径输入连接(沿着自TDI的方向,连接至片上系统的扫描路径),以及至组件的至少一个连接(表示为组件访问输入连接),输出连接集合包括扫描路径输出连接(沿着至TDO的方向,连接至片上系统的扫描路径),以及至组件的至少一个连接(表示为组件访问输出连接)。
[0141] 在一个实施例中,使用″precedent″参数(针对扫描路径输入连接)以及一个或多个″affluent″参数(针对一个或多个组件访问输入连接),来指定输入连接集合。在一个实施例中,使用″following″参数(针对扫描路径输出连接)和一个或多个″affluent″参数(这对一个或多个组件访问输出连接),来指定输出连接集合。
[0142] 交叉器件可以以任何方式动态修改系统扫描路径。架构可以是用于经由组件将输入连接集合中的输入连接动态连接至输出连接集合中的输出连接的任何架构,其中选择交叉器件来将该组件添加至系统扫描路径。例如,该架构可以是开关架构、总线架构、网络架构等。
[0143] 在一个实施例中,交叉器件的描述是算法描述,包括适于测试工具理解的至少一个构成规则。可以将交叉器件的描述动态修改为,将组件动态添加至扫描路径,并从扫描路径中动态移除组件(例如,通过修改参数″affluent″和″tributary″)。
[0144] 使用NSDL来描述片上系统测试中的测试资源,这使得能够以能够在片上系统测试中使用交叉器件的方式,来描述许多不同交叉器件。可以将由NSDL描述的不同交叉器件分组到三个宽泛类别中。具体地,交叉器件可以表示“有线”(wired)连接、“事务”(transactional)连接、或“有线-事务”(wired-transactional)连接。
[0145] “有线”交叉器件是基本上有线连接到片上系统的扫描路径的交叉器件(并可以根据需要对其进行选择或取消选择)。“有线”交叉器件以类似于开关的方式进行操作(即,根据需要能够在支流和分支之间对连接进行动态编程)。由于“有线”交叉器件的扫描路径是有线地连接到片上系统的系统扫描路径中的,所以需要显式地取消选择“有线”交叉器件的扫描路径。在图8中示出并描述了“有线”交叉器件的第一示例(具体地,作为P1687硬件建议的一部分的选择仪器比特(SIB)组件)。在图9中示出和描述了“有线”交叉器件的第二示例。
[0146] “事务”交叉器件是支持临时连接(即,表示特定事务的连接)的交叉器件。“事务”交叉器件可以作为任何架构(例如,作为总线、片上网络等)进行操作。事务可以是由“事务”交叉器件的架构支持的任何事务(例如,总线架构中的总线访问、网络架构中的路由等)。由于“事务”交叉器件的扫描路径仅在事务时间是活动的,因此不需要显式地取消选定“事务”交叉器件的扫描路径。在图10中示出和描述了“事务”交叉器件的示例。
[0147] 在“有线”交叉器件中,至少一个组件访问输入连接和至少一个组件访问输入连接是有线连接。因此,组件访问输入连接和组件访问输出连接是不同的物理连接。在“事务”交叉器件中,至少一个组件访问输入连接和至少一个组件访问输入连接是事务连接,使得一个物理连接可以用于支持多个事务(即,组件访问输入连接和组件访问输出连接可以共享相同的物理连接,但是可以被认为是不同的事务连接)。
[0148] 使用BSDL/HSDL,虽然可以描述特定的“有线”交叉器件(即,SIB组件),但是该描述非常困难。此外,不可能使用BSDL/HSDL描述更复杂的“有线”交叉器件。此外,使用BSDL/HSDL描述“事务”和“有线-事务”交叉器件更不可能。因此,出于上述原因,P1687中标准化的交叉器件仅仅是SIB组件。
[0149] 相反,使用NSDL,明显是支持对任何“有线”交叉器件、“事务”交叉器件以及“有线-事务”交叉器件的描述的,并且测试工具容易对该描述进行解释。的确,事实上,可以使用NSDL描述能够动态修改片上系统的扫描路径的任何复杂的交叉设备。为了示例NSDL的能力,这里关于图7-图10提供了交叉器件的若干示例(及其使用NSDL表达的相应描述)。
[0150] 图7示出了使用通用交叉器件来动态修改片上系统的扫描路径的高级框图。如图7所示,片上系统700包括扫描路径,该扫描路径包括通用交叉器件710。扫描路径包括两个永久扫描路径部分(即,始终包括在扫描路径中的部分)以及可选扫描路径部分(即,可以通过交叉器件710动态地包括在扫描路径中并可以从该扫描路径中移除的部分)。
[0151] 如图7所示,在片上系统700的扫描路径中,测试访问输入(TDI)耦合至第一永久扫描路径部分(包括一系列边界扫描单元),第一永久扫描路径部分耦合至交叉器件710的第一输入(即,precedent),交叉器件710的第一输出(即,following)耦合至第二永久扫描路径部分,第二永久扫描路径部分耦合至测试访问输出(TDO)。
[0152] 交叉器件710允许将可选扫描路径部分动态地(有选择地)并入片上系统70的扫描路径中。具体地,交叉器件710包括第二输出(即,分支)和第二输入(即,支流),可以选择该第二输出将第一永久扫描路径部分的输出耦合至的可选扫描路径部分的输入,可以选择该第二输入将可选扫描路径部分的输出耦合至第二永久扫描路径部分的输入。
[0153] 交叉器件710使得能够通过选择/取消选定输入/输出的特定组合,来动态修改扫描路径。当将交叉器件710的第二输出和第二输入取消选定时,扫描路径是:TDI、SCAN_4_BIT_0、BS_0、BS_1、交叉器件710、BS_2、TDO。当将交叉器件710的第二输出和第二输入选定时(即,第一输入连接至第二输出,第二输入连接至第一输出),扫描路径是:TDI、SCAN_4_BIT_0、BS_0、BS_1、交叉器件710、another_SCAN_4_BIT、BS_3、交叉器件710、BS_2、TDO。
[0154] 图8示出了可以使用NSDL描述的一个交叉器件的高级框图。具体地,图8示出了SIB器件800。SIB器件800实现了对另一组件的选择(即,使得将该组件添加至扫描路径)。
[0155] SIB器件受选择比特的控制。当选择比特的值为“0”时,该单元不是活动的(其仅是扫描路径中的比特)。当将选择比特的值设置为“1”时,扫描路径通过端口WSIo(即,支流)路由出,并通过端口WSOi(即,分支)路由入,从而将与这些端口连接的任何器件添加至扫描路径。
[0156] SIB器件800的基于NSDL的描述如下(出于清楚的目的,包括行号):
[0157] 1 IP SIB generic(precedent:string:=″TDI″;
[0158] 2 following:string:=″TDO″;
[0159] 3 tributary:string:=″deselected″;
[0160] 4 affluent:string:=″deselected″)
[0161] 5 Begin
[0162] 6 UpSIB:REG generic map(precedent=>″TDI″,
[0163] 7 following=>″TDO″
[0164] 8 elements=>1);
[0165] 9
[0166] 10 Procedure select
[0167] 11 Length 1;
[0168] 12 Selection wired;
[0169] 13 {
[0170] 14 UpSib<=′1′;
[0171] 15 tributary:=″TDI″;
[0172] 16 affluent:=″TDO″;
[0173] 17 }
[0174] 18
[0175] 19 Procedure deselect
[0176] 20 Length 1;
[0177] 21 Selection wired;
[0178] 22 {
[0179] 23 UpSib<=′0′;
[0180] 24 tributary:=″deselected″;
[0181] 25 affluent:=″deselected″;
[0182] 26 }
[0183] 27
[0184] 28 End SIB;
[0185] 在SIB器件800的描述中,6-9行声明内部寄存器(即,测试工具需要以便处理分级的比特,在SIB器件800的情况下,仅为一个比特);以及10-17行示出了选择过程,19-26行示出了取消选定的过程(使用其相应的名称,测试工具能够容易识别)。
[0186] 在描述体中,容易识别NSDL的两个作用:(1)扫描路径的修改,从而由片处理来表达比特流(见14和23行);以及(2)通过赋予串的值,来进行拓扑的修改(例如,以类似于拓扑映射中″precedent″和″following″的赋值的方式)。
[0187] 图9示出了可以使用NSDL描述的一个交叉器件的高级框图。具体地,图9示出了分级开关器件900。分级开关器件900包括三个输入支流和两个输出分支。尽管所描述的具有三个支流和两个分支,但是可以支持任何数目的支流和分支。
[0188] 分级开关器件900的基于NSDL的描述如下(为了清楚起见包括行号):
[0189] 1 IP Hierarchy_switch generic(precedent:string:=″TDI″;
[0190] 2 following:string:=″TDO″;
[0191] 3 tributary_0:string:=″deselected″;
[0192] 4 tributary_1:string:=″deselected″;
[0193] 5 affluent_0:string:=″deselected″;
[0194] 6 affluent_1:string:=″deselected″;
[0195] 7 affluent_2:string:=″deselected″;
[0196] 8 )
[0197] 9
[0198] 10 Begin
[0199] 11
[0200] 12 Affl_map:Vector_REG generic map(precedent=>″TDI″,
[0201] 13 following=>″Trib_map″
[0202] 14 elem_size=>2;
[0203] 15 elements=>3);
[0204] 16 Trib_map:Vector_REG generic map(precedent=>″Affl_map″,
[0205] 17 following=>″TDO″
[0206] 18 elem_size=>2;
[0207] 19 elements=>2);
[0208] 20
[0209] 21 subtype name is string(1 to 11);
[0210] 22 type name_vector is array(natural range<>)of name;
[0211] 23 constant affluent_name:name_vector(0 to 2):=
[0212] 24 (″affluent_0″,″affluent_1″,″affluent_2″);
[0213] 25 constant tributary_name:name_vector(0 to 1):=
[0214] 26 (″tributary_0”,″tributary_1″);
[0215] 27
[0216] 28
[0217] 29 Procedure select(affluent_nmb:in std_logic_vector(1 downto 0);
[0218] 30 tributary_nmb:in std_logic)
[0219] 31 Length 1;
[0220] 32 Selection wired;
[0221] 33 {
[0222] 34 Trib_map<=affluent_nmb;
[0223] 35 Affl_map<=″0″&tributary_nmb;
[0224] 36
[0225] 37 case(tributary_nmb)
[0226] 38 when′0′=>tributary_0):=
[0227] 39 affluent_name(conv_integer(affluent_nmb));
[0228] 40 when′1′=>tributary_1:=
[0229] 41 affluent_name(conv_integer(affluent_nmb));
[0230] 42 end case;
[0231] 43
[0232] 44 case(affluent_nmb)
[0233] 45 when″00″=>affluent_0:=
[0234] 46 tributary_name(conv_integer(tributary_nmb));
[0235] 47 when″01″=>affluent_1:=
[0236] 48 tributary_name(conv_integer(tributary_nmb));
[0237] 49 when″10″=>affluent_2:=
[0238] 50 tributary_name(conv_integer(tributary_nmb));
[0239] 51 when others=>assert false report″ERROR!″severity failure;
[0240] 52 end case;
[0241] 53 }
[0242] 54
[0243] 55 Procedure deselect_affluent
[0244] 56 (affluent_nmb:in std_logic_vector(1 downto 0))
[0245] 57 Length 1;
[0246] 58 Selection wired;
[0247] 59 {
[0248] 60 Affl_map<=″11″;
[0249] 61 case(affluent_nmb)
[0250] 62 when″00″=>affluent_0:=″deselected″;
[0251] 63 when″01″=>affluent_1:=″deselected″;
[0252] 64 when″10″=>affluent_2:=″deselected″;
[0253] 65 when others=>assert fa1se report″ERROR!″severity warning;
[0254] 66 end case;
[0255] 67
[0256] 68 }
[0257] 69
[0258] 70 Procedure deselect_tributary(tributary_nmb:in std_logic)
[0259] 71 Length 1;
[0260] 72 Selection wired;
[0261] 73 {
[0262] 74 Trib_map<=″11″;
[0263] 75 case(tributary_nmb)
[0264] 76 when′0′=>tributary_0:=″deselected″;
[0265] 77 when′1′=>tributary_1:=″deselected″;
[0266] 78 end case;
[0267] 79 }
[0268] 80 End hierarchy_switch;
[0269] 在分级开关器件900的描述中:3-7行声明支流和分支(其中每一个分别给定唯一名称);12-19行声明内部扫描路径(即,类似于开关矩阵);21-26行通过定义一些定制类型来充分利用VHDL能力(从而,为分级描述符准备了实质上等同于开关矩阵的内容)。
[0270] 在分级开关器件900的描述中:“select”(选择)过程(29-53行)负责比特流修改,此外,利用VHDL算法能力(以及先前定义的定制类型),以描述动态扫描路径修改。函数的参数是指要连接路径的有序编号。
[0271] 从分级开关器件900的描述所看到的,使通过分级开关器件90的连接为不活动,这不需要对该连接的两端进行取消选定;而是,仅对连接的一端取消选定就切断了该连接。因此,取消选定可以由两个过程来处理:(1)″deselect_affluent″实现支流的取消选定(使用有序编号作为参数),以及(2)″deselect_tributary″实现分支的取消选定(使用有序编号作为参数)。
[0272] 图10示出了可以使用NSDL描述的一个交叉器件的高级框图。具体地,图10示出了总线架构器件1000。总线架构器件1000包括经由组件总线1012互连的主网关组件1011以及5个从组件1013A-1013E(共同示为从组件1013)。
[0273] 在总线架构器件1000中,向每个从组件1012分配由网关组件1011使用的地址,以访问从组件1012。总线架构器件1000必须支持特定的协议,以使得网关组件1011能够访问从组件1012;然而,总线架构器件1000的基于NSDL的描述不需要关于该协议的任何信息。
[0274] 总线架构器件1000的基于NSDL的描述如下(为了清楚起见包括行号):
[0275] 网关包描述:
[0276] 1 Package GW_package is
[0277] 2
[0278] 3 Constant N_SLAVES:integer:=5;
[0279] 4 Constant ADDRESS_DEPTH:integer:=3;
[0280] 5 subtype slave_name_type is string(1 to 1);
[0281] 6 subtype slave_address_type is std_logic_vector
[0282] 7 (ADDRESS_DEPTH-1 downto 0);
[0283] 8
[0284] 9 Type slave_mapping_type is record
[0285] 10 slave_name:slave_name_type;
[0286] 11 slave_address:slave_address_typr;
[0287] 12 end record;
[0288] 13
[0289] 14 Type network_mapping_type is array(1 to N_SLAVES)of
[0290] 15 slave_mapping_type;
[0291] 16
[0292] 17 Constant BUS_OP_FIELDS:integer:=2;
[0293] 18
[0294] 19 Constant BUS_READ:std_logic_vector(BUS_OP_FIELDS-1
[0295] downto 0):=″01″;
[0296] 20 Constant BUS_WRITE:std_logic_vector(BUS_OP_FIELDS-1
[0297] downto 0):=″10″;
[0298] 21 Constant BUS_IDLE:std_logic_vector(BUS_OP_FIELDS-1
[0299] downto 0):=″00″;
[0300] 22
[0301] 23 End GW_package;
[0302] 网关描述:
[0303] 1 Use GW_ackage.all;
[0304] 2
[0305] 3 IP GW generic(precedent:string:=″TDI″;
[0306] 4 following:string:=″TDO″;
[0307] 5 tributary:string:=″deselected″;
[0308] 6 affluent:string:=″deselected″;
[0309] 7 network_mapping:network_mapping_type);
[0310] 8
[0311] 9
[0312] 10 Begin
[0313] 11
[0314] 12 Address_map:REG generic map(precedent=>″TDI″,
[0315] 13 following=>″TDO″
[0316] 14 elements=>ADDRESS_DEPTH);
[0317] 15 Bus_operation:REG generic map(
[0318] 16 precedent=>″Address_map″;
[0319] 17 following=>″TDO″;
[0320] 18 elements=>BUS_OP_FIELDS);
[0321] 19
[0322] 20 Function get_slave_address(name:in slave_name_type)
[0323] 21 return slave_address_type is
[0324] 22 Begin
[0325] 23 for k in N_SLAVES loop
[0326] 24 If network_mapping(k).slave_name=name then
[0327] 25 return network_mapping(k).slave_address;
[0328] 26 End loop;
[0329] 27 assert false report″ERROR,slave″&name&″does not exist″
[0330] 28 severity failure;
[0331] 29 end get_slave_address;
[0332] 30
[0333] 31 Procedure select_tributary(tributary_name:in slave_name_type)[0334] 32 Length 10;
[0335] 33 Selection transaction;
[0336] 34 {
[0337] 35 address_map<=get_slave_address(tributary_name);
[0338] 36 bus_operation<=BUS_WRITE;
[0339] 37 tributary:=tributary_name;
[0340] 38 }
[0341] 39
[0342] 40 Procedure select_affluent(affluent_name:in slave_name_type)
[0343] 41 Length 10;
[0344] 42 Selection transaction;
[0345] 43 {
[0346] 44 address_map<=get_slave_address(affluent_name);
[0347] 45 bus_operation<=BUS_READ;
[0348] 46 affluent:=affluent_name;
[0349] 47 }
[0350] 48
[0351] 49 End GW;
[0352] 为了更好的可读性,已经将总线架构器件1000的基于NSDL的描述拆分成两个文件。具体地,将总线架构器件1000的基于NSDL的描述拆分成以下部分:(1)包括针对总线架构器件1000的所有类型的声明的包;以及(2)总线架构器件1000的描述。
[0353] 总线架构器件1000的基于NSDL的描述不需与总线架构器件1000的总线协议的实际实现方式有关的信息;而基于NSDL的描述仅需要与在总线架构器件1000内发起事务所需的命令有关的信息。事务由包括在基于NSDL的描述中的″select_tributary″和″select_affluent″函数定义。
[0354] ″select_tributary″函数(31-38行)将适宜地址写入适宜寄存器(使用定制类型和函数),以命令到总线的“写入”操作。″select_affluent″函数(40-47行)读取从适宜寄存器读取适宜地址(使用定制类型和函数),以命令自总线的“读取”操作。
[0355] 由于总线架构器件1000是“事务”交叉器件,总线架构器件1000的基于NSDL的描述不需要“选择”或“取消选择”过程;而是,将“选择”和“取消选择”过程标记为“事务”,使得测试工具知道该连接只是活动一次,然后就将支流和分支设置回至“取消选定”。
[0356] 如这里所述,诸如总线架构器件1000(以及其他交叉器件)等交叉器件完全超出P1687标准的当前能力范围。只有使用NSDL,才可能对诸如总线体架构器件1000(以及其他交叉器件)等交叉器件进行描述。
[0357] 如这里所述,可以使用NSDL来描述片上系统,此外,用于测试片上系统的测试工具可以利用片上系统的系统级描述。关于图11示出和描述了适于测试使用NSDL描述的片上系统的示例测试工具。此外,参照图12-图20可以更好地理解使用NSDL描述的片上系统的测试。
[0358] 图11示出了图1的测试环境的测试系统的高级框图。具体地,TS120包括:处理器1110、存储器1120、输入输出(I/O)接口1130、以及支持电路1140。处理器1110耦合至存储器1120、I/O接口1130以及支持电路1140中的每一个。处理器1110与存储器1120、I/O接口1130以及支持电路1140协作,来提供这里示出和描述的各种测试函数。
[0359] 如图11所示,存储器1120存储适于在执行系统测试时使用的资源。具体地,存储器1120存储测试工具1121、测试资源描述1122、以及适于在执行系统测试时使用的测试数据1123。存储器可以存储用于执行系统测试的任何其他程序、描述、数据等(表示为其他1124)。
[0360] 测试工具1121控制系统测试。测试工具1121可以包括一个或多个测试过程。测试过程可以由一个或多个测试编译器产生。可以执行测试过程以测试一个或多个系统。测试工具1121包括可以用于控制系统测试的任何其他过程、程序等。
[0361] 测试资源描述1122可以包括适于在系统测试中使用的任何描述,例如组件描述、系统描述等,及其各种组合。测试资源描述1122可以包括系统拓扑的描述。测试资源描述1122可以包括被处理以用于执行片上系统测试的任何其他描述。
[0362] 测试资源描述1122可以包括一个或多个库,使得可以为不同类型的测试资源维护描述模板(因此,可以根据需要进行访问和修改)。模板可以是组件级模板(例如,针对特定IP的模板、针对特定仪器的模板等),系统拓扑模板等,及其各种组合。
[0363] 测试数据1123包括适于在执行系统测试时使用的任何数据。测试数据1123可以包括输入比特流数据、输出比特流数据(例如,由测试系统的确定预期输出比特流,以及从片上系统捕获的实际输出比特流)等,及其各种组合。测试数据1123包括可以应用于正被测试的系统和/或可以从正被测试的系统中恢复的任何其他数据。
[0364] I/O接口1130提供从TS 120至S-o-C 110的接口。I/O接口1130是基于JTAG的接口。I/O接口1130支持TDI接口,通过该TDI接口,TS 120可以响应于处理器1110执行的测试过程,来将输入比特流应用于S-o-C110。I/O接口1130支持TDO接口,通过该TDO接口,TS 120可以响应于处理器1110执行的测试过程,来从S-o-C 110中恢复实际输出比特流。
[0365] 尽管这里主要关于一个TDI和一个TDO接口进行示出和描述,但是I/O接口1130可以支持用于测试不同片上系统配置所需或期望的任何数目和类型的测试接口。例如,对于基于JTAG的测试,I/O接口1130还可以支持针对TCK信号、TMS信号、以及可选地TRST信号的接口。
[0366] 支持电路1140包括可以在执行系统测试时使用的任何附加电路。例如,支持电路1140可以包括附加处理器、附加存储器、附加接口、测试比特流产生电路、测试比特流处理电路等,及其各种组合。支持电路1140包括测试系统120可能需要的任何附加电路。
[0367] 处理器1140与存储器1120、I/O接口1130、以及支持电路1140协作,以提供这里描述的各种片上系统测试函数。
[0368] 处理器1140产生描述(例如,函数级描述、组件描述等)。处理器1140处理来自测试资源描述1122的描述,以产生描述(例如,使用组件描述来分析组件互连、产生系统描述等)。处理器1140存储该描述,作为测试资源描述1122的一部分。
[0369] 处理器1140产生用于测试片上系统的测试过程,并存储该测试过程作为测试工具1121的一部分。处理器1140使用来自测试工具1121的测试过程产生测试数据,并存储该测试数据作为测试数据1123的一部分。
[0370] 处理器可以与存储器1120、I/O接口1130、以及支持电路1140协作,以提供这里描述的任何其他片上系统测试函数。
[0371] 参照图12-14可以更好地理解使用片上系统的基于NSDL的描述的片上系统测试,图12-14提供了用于使用片上系统的基于NSDL的描述来测试片上系统的方法。也可以参照图15和16(提供示出了片上系统的一个组件的测试的示例)、图17(提供用于测试片上系统的组件的方法)、以及图18-图20(提供示出了片上系统测试的示例)理解使用片上系统的基于NSDL的描述的片上系统测试。
[0372] 图12示出了由图1的测试系统执行的、用于通过JTAG连接测试系统的示例方法。尽管示出和描述了以串行方式执行,但是可以同时地或者以与关于图12示出和描述的顺序不同的顺序来执行图12的方法1200的步骤的至少一部分。方法1200开始于步骤1202,并前进至步骤1204。
[0373] 在步骤1204,为片上系统确定测试比特流。测试比特流包括输入比特流和预期输出比特流。可以按照这里描述的任何方式确定测试比特流。在一个实施例中,使用关于图13示出和描述的方法确定测试比特流。
[0374] 在步骤1206,将输入比特流应用于片上系统。可以经由片上系统的TDI接口将输入比特流应用于片上系统。在步骤1208,从片上系统捕获实际输出比特流。可以经由片上系统的TDO接口从片上系统捕获实际输出比特流。
[0375] 在步骤1210,使用实际输出比特流和预期输出比特流,来确定测试结果。通过将实际输出比特流和预期输出比特流比较,来确定测试结果(例如,确定在测试期间是否存在任何错误)。在步骤1212,存储测试结果。
[0376] 在步骤1214,方法1200结束。
[0377] 图13示出了由图1的测试系统执行、用于通过JTAG连接测试系统的示例方法。具体地,图13的方法1300包括用于确定在测试片上系统时使用的测试比特流的方法。尽管示出和描述了以串行方式执行,但是可以同时地或者以与关于图13示出和描述的顺序不同的顺序来执行图13的方法1300的步骤的至少一部分。方法1300开始于步骤1302,并前进至步骤1304。
[0378] 在步骤1304,确定片上系统的描述(这里表示为系统描述)。可以以这里描述的任何方式来确定系统描述。系统描述是片上系统的基于NSDL的描述。在一个实施例中,使用关于图14示出和描述的方法来确定系统描述。
[0379] 在步骤1306,根据片上系统的系统描述,来确定用于测试片上系统的测试比特流。测试比特流包括:要应用于片上系统的输入比特流,以及可以与从片上系统捕获的实际输出比特流进行比较的预期输出比特流。
[0380] 在步骤1308,方法1300结束。
[0381] 图14示出了由图1的测试系统执行、用于通过JTAG连接测试系统的示例方法。具体地,图14的方法1304包括用于确定片上系统的系统描述的方法。尽管示出和描述了以串行方式执行,但是可以同时地或者以与关于图14示出和描述的顺序不同的顺序来执行图14的方法1304的步骤的至少一部分。方法1304开始于步骤1402,并前进至步骤1404。
[0382] 在步骤1404,标识片上系统的组件。可以以任何方式来标识片上系统的组件。在一个实施例中,可以标识片上系统的组件作为片上系统提供的测试资源。在一个实施例中,可以通过分析片上系统来标识片上系统的组件。可以以任何其他方式来标识片上系统的组件。
[0383] 在步骤1406,为片上系统的每个组件确定组件描述。可以以任何方式来确定组件描述。
[0384] 在一个实施例中,其中,组件描述是预定义的,可以通过简单读取预定义的描述来确定组件描述。在一个实施例中,其中组件描述不是预定义的,可以通过分析每个组件来在运行中定义组件描述。
[0385] 组件的描述指定组件的内部扫描路径。在一个实施例中,组件的描述从寄存器值方面来表示组件。在一个这样的实施例中,其中,组件支持多个函数,组件的每个函数可从寄存器值方面来表示。关于图15可以更好地理解从寄存器值方面的组件描述。使用NSDL指定组件描述。
[0386] 在步骤1408,确定片上系统的拓扑。片上系统的拓扑描述了片上系统的组件之间的互连。通过分析片上系统的组件之间的互连,来确定片上系统的拓扑。
[0387] 在步骤1410,确定片上系统的系统描述。使用组件描述和系统拓扑来确定系统描述。片上系统的系统描述表示片上系统的扫描路径,包括片上系统的各个组件中每一个的内部扫描路径以及片上系统的组件之间的互连。系统描述可以包括用于描述片上系统的任何其他信息。在步骤1412,存储片上系统的系统描述。
[0388] 在步骤1414,方法1304结束。
[0389] 图15示出了使用图2的片上系统的组件之一的描述来确定用于测试该组件的测试过程的寄存器值。具体地,将S-o-C 110(为了清楚起见省略)的组件210A的描述转换成针对S-o-C 110的组件210A的寄存器值的集合(表示为寄存器值1510)。组件210A的寄存器值1510包括针对由组件210A支持的三个函数中每一个的寄存器值。可以对针对由组件210A提供的三个函数中每一个的寄存器值进行处理,以确定用于测试组件210A的测试比特流的值。
[0390] 如图15所示,从组成组件210A的组件寄存器A0、A1、A2的寄存器值方面,来描述组件210A的函数。第一函数定义为:“000”,等待4个周期,“001”。第二函数定义为:“111”,等待1个周期,“010”,等待5个周期,“101”。第三函数定义为:“000”,等待2个周期,“100”,等待10个周期,“000”。换言之,寄存器值1510指定了针对组件210A的从函数到组件寄存器值的映射。该描述(即,从函数到寄存器值的映射)示出了,可以容易地处理组件的描述,以确定测试比特流。
[0391] 如图15所示,对于组件210A的每个函数,寄存器值1510指示:(1)如何针对函数写入和读取组件寄存器,以及(2)针对函数,必须如何解释组件寄存器值。因此,在诸如NSDL等描述语言中,组件的描述包括组件函数的描述,然后可以将该组件函数的描述转换成寄存器值,以在用于测试片上系统上下文内的组件的测试过程中使用。
[0392] 尽管出于清楚目的,在描述从函数到寄存器值的映射时被省略了,但是根据NSDL的组件210A的特定描述是算法描述,该描述是以如关于图3-图5所示出和描述的方式构成的。组件210A的基于NSDL的描述使得能够确定从函数到寄存器值的映射。尽管出于清楚的目的进行了省略,但是可以为S-o-C 110的其他组件(即,组件210B-组件210E)中的每一个定义类似描述。
[0393] 图16示出了使用图2的片上系统的组件的描述来确定用于测试图2的片上系统的组件之一的测试过程的测试比特流。如图16所示,产生测试比特流1610,以用于测试至少一部分S-o-C 110。具体地,测试比特流1610包括:应用于S-o-C 110的TDI端口的输入比特流1611I,以及从S-o-C 110的TDO端口接收的输出比特流1611O。
[0394] TS 120使用S-o-C 110的描述(使用NSDL指定的)产生测试比特流1610。S-o-C110的描述(这里也被称作系统描述)包括S-o-C 110的测试资源的描述(例如,组件210的描述、组件互连220的描述等,及其各种组合)。S-o-C 110的系统描述描述了S-o-C 110的拓扑,并从而描述了S-o-C 110的系统扫描路径。
[0395] 如这里所述,TS 120基于S-o-C 110的系统描述(提供了系统扫描路径的描述)来产生测试比特流1610。因此,由于S-o-C 110的系统描述提供了S-o-C 110的系统扫描路径的描述,因此TS 120能够确定为S-o-C 110产生的测试比特流1610的哪些部分与S-o-C110的系统扫描路径的哪些部分相对应。在图16中示出了这一点。
[0396] 如图16所示,已经定位了输入比特流1611I和输出比特流1611O内的特定比特位置(即,与组件210A相对应的比特位置)。通过使用S-o-C110的基于NSDL的描述(提供了与S-o-C 110的系统扫描路径有关的信息,包括S-o-C 110内组件210的相应位置),能够实现对输入比特流1611I和输出比特流1611O内的与组件210A内的寄存器相对应的特定位置的定位。
[0397] 尽管为了清楚起见,在描述从组件寄存器到比特流的转换时被省略了,但是根据NSDL的S-o-C 110的特定描述是算法描述,其描述了S-o-C 110的拓扑,从而描述了S-o-C110的系统扫描路径。S-o-C 110的该基于NSDL的描述使得能够执行从寄存器值到比特流的转换。
[0398] 图17示出了由图1的测试系统执行、在IJTAG/NSDL框架中测试系统的组件的示例方法。具体地,图17的方法1700包括用于测试片上系统的一个组件的方法。尽管示出和描述了以串行方式执行,但是可以同时地或者以与关于图17示出和描述的顺序不同的顺序来执行图17的方法1700的步骤的至少一部分。方法1700开始于步骤1702,并前进至步骤1704。
[0399] 在步骤1704,选择片上系统的组件(即,选作要被测试的片上系统的组件)。
[0400] 在步骤1706,获得所选组件的描述。
[0401] 在步骤1708,对于组件所支持的每个函数,将该函数转换成与组件的寄存器相关联的寄存器值。使用组件的描述将组件的函数转换成寄存器值。
[0402] 在步骤1710,获得片上系统的系统描述。片上系统的系统描述指定了片上系统的系统扫描路径,其是根据片上系统的组件描述和片上系统的拓扑的描述而确定的。系统描述可以用于指定用于片上系统的测试比特流。
[0403] 在步骤1712,使用片上系统的拓扑来确定片上系统的测试比特流内的所选组件位置。测试比特流内所选组件位置指定了输入比特流内的一个或多个比特位置以及实际输出比特流内一个或多个比特位置。
[0404] 在步骤1713(可选步骤),驱动交叉器件(即,如果对组件的访问受交叉器件的控制)。通过对交叉器件的算法描述进行处理,来驱动交叉器件。驱动交叉器件使得能够选择交叉器件,以动态地将相关联的组件添加至片上系统的扫描路径。在不再需要对组件进行访问之后,可以取消选定该交叉器件,以从片上系统的扫描路径中移除相关联的组件。该步骤是可选的,这是由于对组件的访问可以受交叉器件的控制,也可以不受交叉器件的控制。
[0405] 在步骤1714,将寄存器值插入到输入比特流的定位位置中。然后可以将输入比特流应用于片上系统的输入测试访问端口(即,用于测试片上系统的至少一部分)。在步骤1716,从输出比特流(即,从由测试系统从片上系统的输出测试访问端口捕获的输出比特流)的定位位置中恢复结果值。然后可以对恢复的结果值进行处理,以便于确定各种测试结果。
[0406] 在步骤1718,方法1700结束。
[0407] 图18示出了示例片上系统的高级框图。如图18所示,片上系统1800包括滤波器和三个仪器,这三个仪器包括:模数转换器(ADC)、数模转换器(DAC)、以及天线访问单元(AAU)。AAU支持模拟至数字至模拟转换。滤波器支持至ADC的输出连接(表示为RX_out)和来自DAC的输入连接(表示为TX_in)。滤波器支持与AAU的双向连接(表示为AN_inout)。
[0408] 如图18所示,经由从TDI输入至TDO输出的扫描路径,来提供对三个仪器的访问。该扫描路径包括致动器寄存器集合和三个SIB单元(每一个分别针对三个仪器中一个,使得能够将相应仪器添加至扫描路径)。致动器寄存器与滤波器相接口。第一SIB单元提供对ADC仪器的访问(经由支流和分支)。第二SIB单元提供对DAC仪器的访问(经由支流和分支)。第三SIB单元提供对AAU仪器的访问(经由支流和分支)。
[0409] 随后是扫描路径的描述。TDI输入耦合至致动器寄存器集合的输入。致动器寄存器集合的输出耦合至第一SIB单元的输入。第一SIB的输出耦合至第二SIB单元的输入。第二SIB单元的输出耦合至第三SIB单元的输入。第三SIB单元的输出耦合至TDO输出。
当取消选定每个SIB时(即,如果没有“选择”任何SIB,以使得它们相应的仪器不能被添加至扫描路径),从TDI输入至TDO输出的序列形成了片上系统1800的扫描路径。
[0410] 如图18所示,通过选择与三个仪器相关联的相应SIB单元的支流和分支接口,可以容易地将三个仪器中的每一个添加至扫描路径。例如,可以选择第一SIB,使得可以将ADC仪器添加至扫描路径以用于测试。例如,可以选择第一SIB和第三SIB,使得可以将ADC和AAU仪器均添加至扫描路径以用于测试。如这里所述,片上系统1800的基于NSDL的描述简化了片上系统1800的测试。
[0411] 图19示出了使用图18的片上系统的组件之一的描述来确定用于测试该组件的测试过程的寄存器比特值。具体地,图19示出了ADC仪器的描述(表示为描述1910)到与ADC仪器的寄存器(表示为寄存器1920)相关联的寄存器值的映射。如图19所示,描述1910包括:扫描路径的描述(表示为扫描路径描述1911),以及由ADC仪器执行的函数的算法表示(表示为函数算法1912)。
[0412] 描述1910是基于NSDL的(算法)描述。扫描路径描述1911标识出ADC仪器的寄存器(包括数据寄存器和控制寄存器),并描述了如何布置寄存器(例如,标识″precedent″、″following″、以及长度信息)。函数算法1912描述了由ADC仪器执行的函数的操作。根据描述1910,测试工具能够容易确定可以用于测试ADC仪器的比特流值。
[0413] 图20示出了使用图18的片上系统的组件描述来确定图18的片上系统的组件描述。具体地,图20示出了图18的片上系统的构成的描述(表示为拓扑2010)。使用片上系统1800的每个组件(例如,致动器寄存器、SIB、以及仪器)的输入和输出中的每一个的通用映射来指定拓扑2010。
[0414] 例如,致动器寄存器的描述指示,至致动器寄存器的输入是TDI输入(″precedent=>″TDI′),自致动器寄存器的输出是第一SIB,该输出表示为RX_enable,这是由于其使能了对ADC仪器的RX_register的访问(following=>″RX_enable″)。换言之,根据与其相接口的组件来描述致动器寄存器组件。
[0415] 例如,第一SIB的描述(即,RX_enable组件)指示,至RX_enable组件的输入是致动器寄存器(precedent=>″actuator_registers″),第一SIB的输出是第二SIB,该输出表示为TX_enable,这是由于其使能了对DAC仪器的TX_register的访问(following=>″Tx_enable″)。
[0416] 此外,由于第一SIB使能了对ADC仪器的访问,因此第一SIB的描述还描述了对ADC仪器的访问。具体地,第一SIB的描述指示了,经由一个输入(affluent=>″Rx_register)以及一个输出(tributary=>″Rx_enable″),使能了从第一SIB至ADC仪器的访问。
[0417] 根据这些示例,清楚的是,使用NSDL可以容易描述片上系统的整个拓扑。此外,由于该拓扑提供了片上系统的组件之间的互连的描述,因此可以容易确定片上系统的拓扑内片上系统的每个组件的定位。
[0418] 如这里所述,使用片上系统的组件描述(提供了从组件的函数到该组件的寄存器的寄存器值的映射)以及片上系统的拓扑描述,可以对片上系统执行各种类型的测试。因此,图18-20示出了使用NSDL描述片上系统的优点。
[0419] 根据以上描述,使用NSDL语言来描述片上系统的各种优点和好处是显而易见的。NSDL的算法本质特点实现了片上系统的算法描述(无论拓扑有多复杂),可以对该算法描述进行处理以确定测试比特流,该测试比特流适于测试片上系统(例如,测试多个组件、测试一个组件,测试组件的函数的子集等,及其各种组合)。因此,使用NSDL,可以确定片上系统的系统扫描路径的分级描述,以用于测试片上系统。
[0420] NSDL语言以BSDL/HSDL无法支持的方式来支持IJTAG的特征,包括:提供片上系统组件(例如,IP、仪器、交叉器件等)的算法描述、片上系统拓扑(例如,组件之间的互连、组件间依赖性等)等,及其各种组合,从而实现片上系统的算法系统级描述。因此,NSDL语言实现了分级扫描路径组织,从而实现了将寄存器值转换成测试比特流,该测试比特流可以用于测试片上系统。
[0421] 可以以许多方式来实现NSDL语言。
[0422] 在一个实施例中,使用VHDL的现有特征来实现NSDL。BSDL定义为VHDL的子集,而NSDL利用VHDL的超集。由于VHDL是主要的寄存器传送级(RTL)描述语言,因此其适于表达其描述的组件的测试需求。通过保持与VHDL的兼容,NSDL可以由现有编译器支持,只需要最小改变。此外,VHDL的使用确保了至NSDL的转换对于习惯VHDL的操作员而言是一种平滑的体验过程,此外,确保了对现有源和工具的转换和改变也是容易的。因此,利用VHDL的NSDL最小化了对现有用户群体的影响,从而简化了现有用户群体对NSDL的采用。
[0423] 相反,曾开发BSDL作为VHDL的子集,以努力使BSDL即与VHDL后向兼容也与VHDL前向兼容。子集指示了无任何添加(即,由嵌入到现有VHDL规则中的结构性语法规则承载所有信息,然后以与正常方式不同的方式来解释)。虽然后向兼容是自动的,但是定义新结构的不可能性使得演进很困难。该结构性限制导致开发者通常以反直觉方式,过度使用两个最通用的结构(属性和特性串)。换言之,将BSDL有效地限制在VHDL的一小部分内,从而消除了VHDL具有上下文意义的任何可能性。
[0424] 如这里所述,NSDL提供了片上系统测试中的许多优点。类似地,使用VHDL来实现NSDL在片上系统测试中提供了许多优点。
[0425] 可以在VHDL实体组件偶联体(couplet)上,对片上系统的组件进行建模,从而实现由片上系统的组件支持的各个单独函数的描述。因此,可以通过组件的内部扫描路径(可以包括分级)来提供对每个组件的访问。此外,组件可以与相应的测试过程集合一同提供,测试系统可以使用该测试过程集合来测试该组件,其中,使用NSDL指定过程的属性(例如,长度、依赖性等),而使用VHDL指定过程体。因此,这使得系统体系结构能够以类似于组件体系结构处理组件级描述的方式的方式来处理系统级描述。
[0426] 可以将片上系统的扫描路径构成为可以像VHDL组件一样实例化的一系列实体,从而容易地将其重新分组到包或库中。此外,容易处理许多更复杂的表示(例如,给定类型组件的多个实例化、组件间依赖性等,及其各种组合)。此外,NSDL以改善经典VDL信号映射的方式实现了对系统扫描链的构建。开发用于测试片上系统的测试过程可以引用系统扫描路径或系统扫描路径的一部分(被称作片,可以包括组件组,或者甚至包括一个组件的子集)。
[0427] 尽管这里主要关于使用VHDL实现的NSDL的实施例进行示出和描述,但是可以使用其他硬件描述语言(可以包括还没有开发的硬件描述语言)来实现NSDL。
[0428] 如这里所述,除了改善基于JTAG的测试,以及实现在基于JTAG的测试中使用交叉器件以外,NSDL语言还实现了对片上系统的组件的并行访问,从而实现片上系统测试的改善(例如,改善的测试调度、改善的测试效率等,及其各种组合)。
[0429] 在一个实施例中,例如P1687,并行访问主要用作优化数据传输带宽的方式,而串行访问仍保持对测试的控制。NSDL语言能够描述这些辅助资源,并将它们插入到测试流中(例如,分别插入到关于图12和17示出和描述的方法1200和1700中)。
[0430] 此外,也可以对NSDL进行扩展以描述更复杂的测试访问机制(TAM),例如,使用交叉器件来提供用于测试片上系统的并行访问,使用扇出-扇入方案来提供用于测试片上系统的并行访问等,及其各种组合。
[0431] 可以参照图21-28更好理解用于测试一个片上系统(或多个片上系统)的并行访问的使用。
[0432] 图21示出了并行访问接口的一般连接方案的高级框图。具体地,一般连接方案2100提供了至片上系统2120的并行访问接口2110。并行访问接口2110包括:内部并行端口2111、外部并行端口2112、以及内部接口2113。片上系统2120包括并行端口2121。
[0433] 如图21所示,通过内部并行端口2111与并行端口2121之间的连接,提供对片上系统2120的并行访问。利用并行端口2121需要:(1)并行端口2121与片上系统2120的连接和同步(可以在实例化时间进行),以及(2)通过测试系统(为了清楚起见而省略)对并行端口2121的处理。
[0434] 如图21所示,内部并行端口2111和外部并行端口2112使得n个输入连接(n>0)和m个输出连接(m>0)连接至片上系统2120的并行端口2121。
[0435] 以两种方式提供对片上系统2120的并行访问。
[0436] 外部地提供对片上系统2120的并行访问。使用外部并行端口2112提供从测试系统到片上系统2120的外部访问。外部并行端口2112用作测试系统与内部并行端口2111之间的接口。外部并行端口2112支持n个输入连接以及m个输出连接(分别与内部并行端口2111的n个输入/m个输出连接相对应)。
[0437] 内部地提供对片上系统2120的并行访问。使用内部接口2113提供从测试系统到片上系统2120的内部访问。在一个实施例中,可以使用连接至系统扫描路径的一个或多个内部寄存器来实现内部接口2113。在该实施例中,内部寄存器可以用于控制并行访问接口2110的行为,或者查询并行访问接口2110的状态。
[0438] 如上所述,为了清楚起见,省略了可以经由内部接口2112或外部接口2113访问内部并行端口2111的测试系统。
[0439] 使用NSDL描述并行访问接口2110。
[0440] 并行访问接口2110的NSDL描述包括:(1)内部端口的描述(例如,宽度信息、数据流方向等信息),以及(2)并行访问函数/过程。
[0441] 并行访问接口2110的NSDL描述也可以可选地包括:(3)外部并行端口2112的描述(例如,宽度信息、数据流方向等信息)。
[0442] 并行访问接口2110的NSDL描述也可以可选地包括:(4)内部接口2113的描述(例如,用于控制函数和/或状态函数的寄存器的描述)。
[0443] 在一个实施例中,可以使用串行测试访问接口的描述以及并行测试访问接口的描述,来描述从测试系统到具有多个组件的片上系统的并行访问,串行测试访问接口用于在测试系统与组件之间耦合测试比特流(其中,串行测试访问接口使用片上系统的串行扫描路径来提供对组件的访问),并行测试访问接口用于在测试系统与组件之间耦合测试比特流(其中,并行测试访问接口提供对组件的访问,而不使用片上系统的串行扫描路径,即,即使串行扫描路径的一个或多个值可以控制访问,也不直接经由串行扫描路径提供访问)。可以存储串行测试访问接口和并行测试访问接口,用于测试。
[0444] 在一个实施例中,可以使用并行接口模块的描述来描述从测试系统到片上系统的并行访问,并行接口模块适于将测试系统耦合至片上系统的核心模块,并存储并行接口模块的描述,其中,并行接口包括至少一个串行寄存器和至少一个并行寄存器,该至少一个串行寄存器适于使用片上系统的扫描路径来访问核心模块,该至少一个并行寄存器适于访问核心模块,而不使用片上系统的扫描路径。可以存储该描述以用于测试。
[0445] 在一个实施例中,可以通过使用串行测试访问端口的描述、并行测试访问端口的描述、以及接口端口的描述来描述从测试系统到片上系统的并行访问,串行测试访问端口适于在测试系统与组件之间耦合测试比特流,并行测试访问端口适于在测试系统与组件之间耦合测试比特流,接口端口适于将串行测试访问端口和并行测试访问端口耦合至片上系统的至少一部分组件。可以存储该描述,以用于测试片上系统。
[0446] 如这里所述,存储所产生的描述。这样,处理器可以接收该描述(例如,从存储器、从另一系统、或者从这种描述的任何其他源),以使用并行访问执行各种测试(例如,组件级测试、系统级测试等,及其各种组合)。
[0447] 可以以其他方式来描述从测试系统到片上系统的并行访问。
[0448] 并行接口2110与片上系统2120之间的通信可以为同步或异步。
[0449] 在一个实施例中,并行接口2110与片上系统2120之间的通信与扫描链同步。在一个这样的实施例中,在1149.1“更新”信号的上升沿,对并行端口2121上的值进行采样。在该实施例中,测试系统仅仅必须向端口提供值(用于输入),和/或从端口收集值(用于输出)。
[0450] 在一个实施例中,并行接口2110与片上系统2120之间的通信可以实现为同步突发。在一个这样的实施例中,为了优化带宽,将数据突发发送至并行端口2121(对于输入),和/或从并行端口2121读取数据突发(对于输出)。在一个这样的实施例中,可以在1149.1“更新”信号的上升沿处开始突发数据的发送/读取。并行接口2110指定至测试系统的数据突发的特性。
[0451] 在一个实施例中,并行接口2110和片上系统2120之间的通信为异步。在该实施例中,并行端口2121自己进行操作,对其自身用于操作连接的协议进行处理。在该实施例中,测试系统仅允许高级访问(发送数据和接收数据)。事务的协议由测试系统的并行接口驱动器进行处理。
[0452] 在一个实施例中,片上系统1220可以支持多个这种与并行接口2110通信的模式。在这样的实施例中,可以使用函数集合在不同通信模式之间切换。例如,函数集合可以包括:″disable_port″,禁用并行端口;″set_scan_synchro″,切换至扫描链同步访问模式;″set_burst″,切换至突发访问模式;以及″set_asynchro″,切换至异步模式。
[0453] 图22示出了两个示例并行访问连接方案的高级框图。
[0454] 如图22所示,在图1的测试环境的上下文内描述示例并行访问连接方案。示例的并行访问连接方案用于将测试系统120连接至片上系统110。具体地,示例的并行访问连接方案用于将测试系统120连接至片上系统110的JTAG接口2201和并行接口2202。
[0455] 如图22所示,第一并行访问连接方案2210针对JTAG和并行访问利用公共缆线。第一并行访问连接方案2210针对至片上系统110的扫描路径的JTAG接口2201以及片上系统110的并行连接2202,利用单个连接器件(表示为JTAG并行接口器件)2111。
[0456] 如图22所示,第二并行访问连接访问方案2220利用分离的JTAG和并行连接。第二并行访问连接方案2210针对至片上系统110的扫描路径的JTAG接口2201,利用第一连接器件(表示为JTAG接口器件2121),以及针对片上系统110的并行接口2202,利用第二连接器件(表示为并行接口器件2122)。
[0457] 关于第二并行访问连接方案2210,尽管参照测试系统120是针对JTAG接口2201和并行接口2202两者的测试源/宿的实施例进行示出和描述,但是在其他实施例中,针对JTAG接口2201和并行接口2202的测试源和/或宿可以是不同的。例如,JTAG接口2201或并行接口2202可以使用除了测试系统120以外的其它测试源和/或宿。
[0458] 一般而言,根据并行接口的实现方式,经由并行接口执行片上系统测试的测试系统可以直接访问片上系统的并行端口,例如,这是由于在测试系统与片上系统的并行端口之间放置有许多结构。在图23A和23B中示出和描述了示例。
[0459] 图23A示出了示例测试环境的高级框图。示例测试环境2300使得测试系统能够使用并行访问接口执行对片上系统的测试,该并行访问接口提供对片上系统的并行访问。具体地,测试环境2300包括经由接口器件(ID)2320互连的测试系统(TS)2310和芯片/板(C/B)2330。
[0460] TS 2310是测试系统,适于经由并行访问接口执行片上系统的测试。TS 2310可以以任何方式实现,以实现使用对片上系统的并行访问来测试片上系统的系统。在一个实施例中,TS 2310可以实现为图11示出和描述的TS 120的适配版本(例如,适于支持并行测试能力)。
[0461] TS 2310包括适于在经由并行访问接口执行片上系统测试时使用的软件。具体地,TS 2310包括控制测试工具2312和并行接口驱动器2313的操作系统2311。TS 2310包括适于执行片上系统测试的其他硬件和软件(例如,处理器、存储器、支持电路,等)(为了清楚起见而省略)。
[0462] 在一个实施例中,测试工具2312可以与测试工具1121相同,或者至少与关于测试工具2312示出和描述的函数可以实现为测试工具1121的一部分。
[0463] C/B 2330包括片上系统2331以及并行接口2332。片上系统2331可以是这里描述的任何片上系统。并行接口2332是关于图21和22示出和描述的并行接口。关于图21可以更好理解并行接口2332与片上系统2331之间的交互。如图23A所示,使用NSDL分别描述片上系统2331和并行接口2332。
[0464] ID 2320用作TS 2310与C/B 2330之间的接口。TS 2310与ID 2320之间的接口可以使用TS 2310所支持的任何类型的接口(例如,USB缆线或可以由TS 2310支持的任何其他类型的接口)来实现。ID2320与C/B 2330之间的接口可以实现为由C/B 2330支持的任何类型的接口。在一个实施例中,ID 2320支持至C/B 2330的分离的数据和控制接口,使得可以独立地从TS 2310向C/B 2330应用数据信号和控制信号。
[0465] 如这里所述,测试工具2312处理与并行接口2332(以及,从而与片上系统2331)的数据交换,并且并行接口驱动器2313处理与并行接口2332(以及,从而与片上系统2331)的协议交换。换言之,并行接口驱动器2313防止了必须由测试工具2312管理与并行接口2332的协议交换。如图23A所示,ID 2320支持TS 2310与C/B 2330之间的数据交换和协议交换。
[0466] 在一个实施例中,并行接口驱动器2313使用操作系统2311所支持的函数(例如,使用缓冲器、信号量、邮箱等,及其各种组合)来处理与并行接口2332的协议交换。在该实施例中,测试工具2312不直接控制片上系统的JTAG端口;而是,测试工具2312与向测试工具2312提供各种函数(例如,使用由驱动器声明并且由测试工具2312导入的函数)的驱动器交互。
[0467] 图23B示出了图23A的示例测试环境内的数据流的高级框图。如图23B所示,数据从TS 2310流向C/B 2330(表示为数据流2315)并且从C/B 2330流向TS 2310(表示为数据流2352)。在数据流2351中,数据从测试工具2312流至并行接口驱动器2313、至接口器件2320、至并行接口2332、至片上系统2331。在数据流2352中,数据沿着反向路径从片上系统2330到测试工具2312流动。如这里所述,在测试环境2300的上下文内,仅有数据流是重要的。
[0468] 片上系统2331的基于NSDL的描述包括:(例如,在实例化时)连接至相应并行接口的一个或多个并行端口,一个或多个并行片(其中存储用于并行事务的数据),以及适于在并行端口发起事务的一个或多个并行事务函数。可以使用特定命名(例如,″parallel_xxxx″)来标识并行片。可以使用特定命名(例如,″send_parallel_data″和″get_parallel_data″)来标识并行事务函数。例如,并行事务函数的原型可以包括:
[0469] function send_parallel_data(sending_slice:in string)
[0470] return boolean;
[0471] function get_parallel_data(receiving_slice:in string)
[0472] return boolean;
[0473] 这里描述的示例的并行事务函数宣告并行端口上的活动,并且还指示对串行测试比特流的修改,以控制串行测试比特流。“并行片”的实现向测试系统(示意性地,TS 2310的测试工具2312)通知片上系统的并行端口与片上系统的剩余部分(这里被称作片上系统的“核心”)之间数据流的细节。可以以许多方式来实现片上系统的并行端口与片上系统的核心之间的连接(图24-27示出和描述了该连接的示例)。
[0474] 图24示出了片上系统的并行端口与核心之间的示例连接的高级框图。如图24所示,示例连接利用完全独立的并行端口(独立于串行扫描路径)。具体地,连接2400包括TAP端口2410和提供对片上系统2430的并行访问的外部并行端口2420。片上系统2430包括可以经由TAP端口2410或经由外部并行端口2420访问的核心2439。
[0475] 可以使用片上系统2433的串行扫描路径中的串行寄存器2431,经由TAP端口2410来访问核心2439。串行寄存器2431控制经由第一接口2433对核心2439的访问。使用并行寄存器2434经由外部并行端口2420来访问核心2439,其中并行寄存器2434在片上系统2430的串行扫描路径的外部。并行寄存器2434控制经由第二接口2435对核心2439的访问。
[0476] 如图24所示,经由并行寄存器2434访问核心2439完全独立于串行寄存器2431。因此,通过并行逻辑对所有控制信号进行处理,不需要来自片上系统2430的串行扫描路径的干预。函数″get_parallel_data″简单采取并行片的名称(示意性地,″parallel_reg″)作为自变量,由于不需要对比特流进行修改,因此函数体为空。
[0477] 图25示出了片上系统的并行端口与核心之间的示例连接的高级框图。如图25所示,示例连接利用独立于串行控制的并行端口。具体地,连接2500包括TAP端口2510以及提供对片上系统2530的并行访问的外部并行端口2520。片上系统2530包括可以经由TAP端口2510或经由外部并行端口2520访问的核心2539。
[0478] 可以使用片上系统2530的串行扫描路径中的串行寄存器2531,经由TAP端口2510来访问核心2539。串行寄存器2531控制经由第一接口2533对核心2539的访问。可以使用并行寄存器2534经由外部并行端口2520来访问核心2539,其中并行寄存器2534在片上系统2530的串行扫描路径的外部。并行寄存器2534控制经由第二接口2535对核心
2539的访问。
[0479] 如图25所示,使用片上系统2530的串行扫描路径中的附加使能寄存器2531,来控制经由并行寄存器2534和关联的第二接口2535对核心2539的访问。使能寄存器2532使用从使能寄存器2532至核心2539的控制接口2537,来控制经由并行寄存器2534对核心2539的访问。因此,片上系统2530的串行扫描路径包括:TDI->使能寄存器2532->串行寄存器2531->TDO。
[0480] 因此,如图25所示,从片上系统2530的串行扫描路径,以串行方式控制经由并行寄存器2534对核心2539的访问。在该实施例中,函数″get_parallel_data″采取并行片的名称(示意性地,″parallel_reg″)作为自变量,并且由于需要对比特流进行修改,函数体包括将使能寄存器2532的值设置为所需值的指令。
[0481] 图26示出了片上系统的并行端口与核心之间的示例连接的高级框图。如图26所示,对于串行和并行数据,示例连接利用至核心的共享访问端口。具体地,连接2600包括TAP端口2610,以及提供对片上系统2630的并行访问的外部并行端口2620。片上系统2630包括核心2639,可以经由TAP端口2610或经由外部并行端口2620来访问核心2639。
[0482] 可以使用片上系统2630的串行扫描路径中的串行寄存器2631,经由TAP端口2610来访问核心2639。串行寄存器2631控制经由第一接口2633对核心2639的访问。可以使用并行寄存器2634经由外部并行端口2620来访问核心2639,该并行寄存器2634在片上系统2630的串行扫描路径的外部。并行寄存器2634控制经由第二接口2635对核心
2639的访问。
[0483] 如图26所示,使用共享访问端口2636控制经由串行寄存器2631和并行寄存器2634对核心2639的访问。共享访问端口2636采用来自串行寄存器2631的第一接口2633作为第一输入,并且采用来自并行寄存器2634的第二接口2635作为第二输入。共享访问端口2636选择输入之一,并经由共享访问接口2638向核心2639提供所选的一个输入。
[0484] 如图26所示,使用片上系统2630的串行扫描路径中的附加使能寄存器2632来控制共享访问端口2636对输入之一的选择。使能寄存器2632使用从使能寄存器2632至共享访问端口2636的控制接口2637,控制经由共享访问端口2636和共享访问接口2638对核心2539的访问。因此,片上系统2630的串行扫描路径包括:TDI->串行寄存器2631->使能寄存器2632->TDO。
[0485] 因此,如图26所示,从片上系统2630的串行扫描路径,以串行方式来控制经由并行寄存器2634对核心2639的访问。在该实施例中,片上系统2539宣告对分(dichotomy)(例如,通过将串行寄存器2631和并行寄存器2634标记为“交替”)。在这样的实施例中,测试系统获知,当并行接口活动时,串行寄存器2631对核心2639没有影响(即,效果上,它们是“死存储”)。该规则的关联之处在于,许多寄存器可以共享相同的并行端口。
[0486] 图27示出了片上系统的并行端口与核心之间的示例连接的高级框图。如图27所示,串行寄存器和提供对片上系统的核心的并行访问的并行寄存器共享相同的触发器,从而最小化提供对片上系统的核心的并行访问所需的资源。具体地,连接2700利用使能寄存器2732、多个数据寄存器27311-27318(共同为,数据寄存器2731)、以及多个共享访问端口27331-27338(共同为,共享访问端口2733)。
[0487] 如图27所示,使能寄存器2732的数据输入是TDI输入,使能寄存器2732的数据输出是第一共享访问端口27311的输入之一,第一共享访问端口27331的数据输出是第一数据寄存器27311的数据输入,第一数据寄存器27311的第一数据输出是第二共享访问端口27332的输入之一,第二共享访问端口27332的数据输出是第二数据寄存器27312的数据输入,第二数据寄存器27312的第一数据输出是第三共享访问端口27333的输入之一,第三共享访问端口27333的数据输出是第三数据寄存器27313的数据输入,依此类推,直到第八数据寄存器27318的第一数据输出是TDO输出为止。
[0488] 还如图27所示,每个共享访问端口2733包括第二数据输入(还耦合至扫描路径中在前寄存器的数据输出)。共享访问端口273311-27338的第二数据输入分别耦合至来自外部并行端口2720的相应数据输入(这里表示为并行输入连接)。因此,每个共享访问端口2733选择来自其两个数据输入之一的数据(即,选择来自串行扫描路径中的在前寄存器的数据输入或来自外部并行端口2720的并行输入连接之一的数据输入,该外部并行端口2720连接至共享访问端口2733)。
[0489] 如图27所示,使能寄存器2732的输出应用于每个共享访问端口2733,作为针对每个共享访问端口2733的输入选择信号,从而由每个共享访问端口2733控制数据选择。
[0490] 如果使能寄存器2732的值指示,应当将串行数据(来自TAP端口2710)提供给核心2739,则从使能寄存器2732向每个共享访问端口2733提供的输入选择信号指引每个共享访问端口2733来选择来自扫描路径中在前寄存器的输入(而不是来自并行输入连接的输入,该并行输入连接连接至来自外部并行端口2720的共享访问端口)。
[0491] 在这种情况下,共享访问端口27331选择来自使能寄存器2732的输入(而不是来自外部并行端口2720的并行输入连接的输入),从而使得将使能寄存器2732的值读入到第一数据寄存器27311中(并因此提供给核心2739)。类似地,在这种情况下,共享访问端口27332选择来自第一数据寄存器27311的输入(而不是来自外部并行端口2720的并行输入连接的输入),从而使得将第一数据寄存器27311的值读入到第二数据寄存器27312中(并因此提供给核心2739)。换言之,尽管为了清楚起见,省略了对剩余数据转移的描述,但是其他数据寄存器2731的类似数据转移使得能够将串行数据提供给核心2739。
[0492] 如果使能寄存器2732的值指示,应当将并行数据(来自外部并行端口2720)提供给核心2739,则从使能寄存器2732提供给每个共享访问端口2733的输入选择信号指引每个共享访问端口2733来选择来自并行输入连接的输入(而不是来自扫描路径中在前寄存器的输入),该并行输入连接连接至来自外部并行端口2720的共享访问端口。
[0493] 在这种情况下,共享访问端口27331选择来自外部并行端口2720的并行输入连接的输入(而不是来自使能寄存器2732的输入),该输入连接至共享访问端口27311,从而使得将来自外部并行端口2720的并行输入连接的值读入到第一数据寄存器27311中(并因此提供给核心2739)。类似地,在这种情况下,共享访问端口27332选择来自外部并行端口2720的并行输入连接的输入(而不是来自第一数据寄存器27311的输入),该输入连接至共享访问端口27332,从而使得将来自外部并行端口2720的并行输入连接的值读入到第二数据寄存器27312中(并因此提供给核心2739)。换言之,尽管为了清楚起见,省略了对剩余数据转移的描述,但是其他数据寄存器2731的类似数据转移使得能够将并行数据提供给核心2739。
[0494] 此外,尽管连接2700的直接NSDL描述可能会十分复杂,但是应注意,这种类型的连接在功能上等同于关于图26示出和描述的连接2600。在连接2600和2700中,“选择”片的值决定是串行数据到达核心还是并行数据到达核心。连接2600与连接2700之间的唯一不同在于预期值:在连接2700中,共享寄存器,从而在并行访问的情况下,要预期的值是并行值,而串行数据被盖写。
[0495] 尽管这里主要关于向具有一个并行端口的片上系统提供并行访问进行了示出和描述(为了清楚起见),但是可以向具有多个并行端口的片上系统提供并行访问。类似地,尽管这里主要关于向具有一个并行片的片上系统提供并行访问进行了示出和描述(为了清楚起见),但是可以向具有多个并行片的片上系统提供并行访问。
[0496] 在这样的实施例中,可以以任何方式来标识多个并行端口。例如,可以使用有序编号(例如,关于交叉器件所描述的)来标识多个并行端口。例如,具有n个并行输入和m个并行输出的片上系统具有以下端口:″parallel_in_″,i=0,1,…,n-1;″parallel_out_″,k=0,1,…,m-1。此外,每个并行端口具有其自己的函数,可以以任何方式来标识每一个函数(例如,通过使用附加在结尾处的相应端口名称,例如″get_parallel_data_parallel_in_0″、″set_scan_synchro_parallel_out_3″等)。
[0497] 相反,对于多个并行片的命名不存在限制,只要并行片的相应名称指示该片是并行片(例如,名称可以以″parallel″开始)。在一个实施例中,其中″send_parallel_data″和″get_parallel_data″采用片名称作为参数,可以将任何端口与任何并行寄存器相连接。在另一实施例中,其中,″send_parallel_data″和″get_parallel_data″不采用片名称作为参数,片上系统可以确切地声明每个端口是如何“连接至”一个或多个并行片的。
[0498] 并行接口的NSDL描述包括扫描路径及其相关函数的描述。NSDL描述指示与并行接口连接的实际物理端口(并行管脚)。这可以由顶层文件中经典BSDL/HSDL规则来处理(例如,采用BSDL识别TAP信号的方式)。将并行通信协议的实现委托给并行接口驱动器。告知测试系统哪些并行管脚受到哪些并行接口驱动器的控制。
[0499] 尽管这里主要关于针对并行端口的输入数据流进行示出和描述,但是针对并行端口的输出数据流是对称的。换言之,对于可以针对至片上系统的输入数据流而实现的每个输入连接类型(如关于图24-图27示出和描述的),可以为来自片上系统的输出数据流实现相应的对称的输出连接类型。
[0500] 尽管这里主要关于支持并行访问接口的内部并行端口与片上系统的并行端口之间的简单内部连接的并行访问接口进行示出和描述,但是并行访问接口可以支持并行访问接口的内部并行端口与片上系统的并行端口之间的更复杂的内部连接。这样,不管复杂性如何,NSDL能够描述任何测试访问机制(TAM)。
[0501] 在一个实施例中,可以使用一个或多个交叉器件来提供并行访问接口的内部并行端口与片上系统的并行端口之间的内部连接。在一个这样的实施例中,选取和取消选定函数可以用于处理内部连接,无论来自串行扫描路径还是来自并行端口。
[0502] 在另一实施例中,可以使用扇入/扇出方案来提供并行访问接口的内部并行端口与片上系统的并行端口之间的内部连接。在这样的实施例中,并行端口的比特可以用于驱动多个片上系统器件(即,通过内部并行端口在多个片上系统器件之间共享外部并行端口的带宽)。
[0503] 因此,尽管这里主要关于提供对一个片上系统的器件的并行访问的并行访问器件进行示出和描述,但是在其他实施例中,并行访问接口可以提供对多个片上系统器件的并行访问。关于图28示出和描述了这种并行访问接口的一般连接方案。
[0504] 图28示出了并行访问接口的内部连接方案的高级框图。具体地,内部连接方案2800提供至三个片上系统28201-28203(共同为片上系统2820)的并行访问接口2810。并行访问接口2810包括:内部并行端口2811、外部并行端口2812、以及内部接口2813。外部并行端口2812和内部并行端口2811支持从测试系统至片上系统2820的n个输入连接,并且支持从片上系统2820至测试系统的m个输出连接。
[0505] 如图28所示,每个片上系统2820包括支持并行输入连接和并行输出连接的并行端口。并行访问接口2810的内部端口支持:(1)至每个片上系统2120的输入数据流的扇出,以及(2)来自每个片上系统2120的输出数据流的扇入。外部并行端口2812的n个输入连接扇出到至片上系统28201的i个输入连接,至片上系统28202的j个输入连接,以及至片上系统28203的k个输入连接(即,n=i+j+k)。外部并行端口2812的m个输出连接扇入自来自于片上系统28201的p个输出连接,来自于片上系统28202的q个输出连接,以及来自于片上系统28203的r个输出连接(即,m=p+q+r)。
[0506] 因此,使用NSDL描述语言,可以容易描述任何复杂度的片上系统器件。可以描述片上系统器件的任何测试资源,包括:组件(例如,IP、仪器、交叉器件等),组件之间的互连等,及其各种组合。在NSDL中,片上系统的测试资源的描述是算法描述,其中,每个算法描述包括以适于测试工具理解的格式而定义的一个或多个构成规则。
[0507] 图29示出了用于描述片上系统的测试资源的方法。尽管示出和描述了以串行方式执行,但是可以同时地或者以与关于图29示出和描述的顺序不同的顺序来执行图29的方法2900的步骤的至少一部分。方法2900开始于步骤2902,并前进至步骤2904。
[0508] 在步骤2904,产生片上系统的每个组件的算法描述。
[0509] 每个组件的算法描述描述了组件所支持的至少一个函数到针对该组件的至少一个寄存器值的映射。每个组件的算法描述描述了组件的内部扫描路径。
[0510] 在一个实施例中,通过以下方式来产生片上系统的组件的算法描述:标识由组件支持的至少一个函数;产生组件的算法描述,其为至少一个函数中的每一个,定义该函数至针对组件的至少一个寄存器的至少一个寄存器值的映射;以及存储组件的算法描述。
[0511] 在步骤2906,产生片上系统的组件之间的互连的算法描述。组件之间互连的算法描述指定片上系统的系统级拓扑。
[0512] 在步骤2908,使用组件的算法描述和组件之间互连的算法描述来产生片上系统的算法描述。
[0513] 片上系统的算法描述描述了片上系统的拓扑,根据该拓扑,可以构建片上系统的扫描路径的描述。
[0514] 在步骤2910,存储片上系统的算法描述。可以存储每个组件的各个单独算法描述。存储组件之间互连的算法描述。可以以任何方式存储算法描述。在步骤2912,方法2900结束。
[0515] 算法描述适于测试工具理解,以用于测试片上系统。这样,处理器可以接收算法描述(例如,从存储器、从另一系统、或者从这种描述的任何其他源),以执行各种测试(例如,组件级测试、系统级测试等,及其各种组合)。
[0516] 如这里所述,在一个实施例中,可以使用VHDL实现NSDL语言。在一个这样的实施例中,可以通过上下文巴克斯范式(BNF)语法来形式化针对NSDL的语法规则。例如,BNF容易描述语法结构的产生,如以下示例:
[0517] ::=
[0518] ENTITYIS
[0519]
[0520]
[0521] [BEGIN
[0522] ]
[0523] END[ENTITY][];
[0524] 在该示例中,符号′::=′指示,可以将左侧元素派生至右侧结构中。右侧可以由更多派生词素(以大写字符指示的不可再派生的原子元素)构成。节点是派生点,而叶节点是不能再派生的节点(即,右侧仅包含词素)。方括号′[′和′]′用于表达可选的派生(它们用于定义递归规则)。符号′<′和′>′用于指示进一步派生。与VHDL规则一致,引号用于指示串。
[0525] 这种类型的语法能够产生在结构上匹配语言的任何可能“短语”,并能够用于验证给定文本是否属于该语言(即,其是否遵照规则)。这仅仅是结构性描述,且不能够传递与其“含义”有关的任何信息,而是,必须添加属性,以考虑到上下文信息:
[0526] Left_hand ↑ (H) ↓ (L):: = right_hand_0 ↑ (H0) ↓ (L0)[right_hand_1↑(H1)↓(L1)],其中:
[0527] ↑(L)指示从低级派生导出并传输至高级派生的信息;
[0528] ↓(H)指示从高级派生导出并传输至低级派生的信息;
[0529] 每个节点可以定义一组规则,以定义如何从H0…Hn开始计算H,以及如何从L开始来获得不同的L0…Ln;以及
[0530] 每个级别能够为定义对于H、L、Hi以及Li的一组条件,以使短语在该语言中具有“含义”。
[0531] 以下规则(编号[1]至[14])描述IP和仪器的声明:
[0532] [1]↑(H,n)↑(P_info)↑(Ext)↑(Cross)↑(Par)::=[0533] IPIS
[0534] ↑(Ext)↑(Cross_decl)↑(Par)
[0535] BEGIN
[0536] ↑(H,n)↓(Ext)↑(P_info)[0537] ↑(Sel_Cross)↑(Par_dec)
[0538] END[IP][];
[0539] 规则:Cross=Cross_decl∪Sel_Cross
[0540] 如 果 检 查 对 于 每 个“有 线”元 件 是 否 存 在“选择”/“取消选定”语句,以及对于每个“事务”元件是否至少存在“选择”。
否则错误
[0541] 检查是否已经解决了″architecture_body″中的所有模块间依赖性。
[0542] 如果 检查在(H,n)内是否存在至少一个并行寄存器,并且在(P_info)内是否存在相应″get_parallel_data″/″send_parallel_data″的声明。
[0543] 如果 检查其与Par中信息(端口名称、并行寄存器、连接,扇入扇出等)的一致性。 否则错误。
[0544] [2] ↑ (H ,n) ↑ (P _info)↑(Ext)↑(Cross)↑(Par)::=
[0545] INSTRUMENTIS
[0546] ↑(Ext)↑(Cross_decl)↑(Par)
[0547] ↑(Cross_decl)
[0548] BEGIN
[0549] ↑(H,n)↓(Ext)↑(P_info)
[0550] ↑(Sel_Cross)↑(Par_dec)
[0551] END[instrument][device_simple_name];
[0552] 规则:Cross=Cross_decl∪Sel_Cross[Same as rule 1]
[0553] [3]↑(P_info)↓(Ext)↑(Sel_Cross)↑(Par_dec)::=
[0554] ARCHITECTUREOFIS
[0555] architecture_declarative_part
[0556] BEGIN
[0557] ↑(H,n)↑(P_info)↓(Ext)↑(Sel_Cross)↑(Par_dec)
[0558] END[ARCHITECTURE][];
[0559] [4]↑(HIn)↑(P_info)↓(Ext)↑(Sel_Cross)↑(Par_dec)::=
[0560] ↑(H,n)
[0561] [↑(Par_dec)]
[0562] ↓(Ext)↑(P_info)↑(Sel_Cross)
[0563] [5]↑(Ext)↑(Cross_decl)↑(Par)::=
[0564] GENERIC(
[0565] [↑(Cross_decl)]
[0566] [;↑(Par)]
[0567] [;↑(Ext)]);
[0568] 该规则实现与扫描路径的链接的定义以及最终外部引用的声明。
[0569] NB:在规则[10]中导出。
[0570] [6]↑(Ext)::=
[0571] ↑(New_Ext)[;↑(Old_Ext)][0572] 规则:Ext=New_Ext∪Old_Ext
[0573] [7]↑(Ext)::=:string
[0574] Rule:↑(Ext)=string_identifier
[0575] 这些入口中的每一个定义针对外部元素的符号名称。该符号用于针对外部函数依赖性来引用该元素。
[0576] [8]IP_instrument_statement_part↓(Ext)↑(P_info)::=
[0577] ↓(Ext)↑(P_use)↑(Sel_Cross)
[0578] [TEST_SET↓(Ext)↑(P_test)END TEST_SET;]
[0579] 该规则描述关于仪器使用的强制过程集合以及可选测试过程集合。P_Info=P_Test∪P_use。
[0580] [9]↑(H,n)::=
[0581] []
[0582] 在″Partial Access(部分访问)″或″Full Access(全访问)″的情况下,扫描路径由其组件的直接实例化来描述(见针对(H,n)的上下文规则的规则[37]-[41])。注意该规则实现仪器和IP嵌套。如果不存在该派生,则标识″无访问″器件。
[0583] [10]↑(Cross)::=
[0584] PRECEDENT:STRING:=″TDI″;
[0585] FOLLOWING:STRING:=″TDO″
[0586] [↑(Affls)]
[0587] [↑(Tribs)]
[0588] ;
[0589] 规则:Cross=Affls∪Tribs
[0590] [11]↑(Tribs)::=
[0591] TRIBUTARY:STRING:=″deselected″;
[0592] |↑(num_tribs);
[0593] 规则:Tribs=″tributary″
[0594] |Tribs=num_tribs
[0595] [12]↑(Tribs)::=
[0596] TRIBUTARY_:STRING:=″deselected″
[0597] [;↑(Old_Tribs)]
[0598] 规则:Tribs=″tributary_″∪Old_tribs
[0599] [13]↑(Affls)::=
[0600] AFFLUENT:STRING:=″deselected″;
[0601] |↑(num_affls);
[0602] 规则:Affls=″affluent″
[0603] |Affls=num_affls
[0604] [14]↑(Affls)::=
[0605] AFFLUENT_:STRING:=″deselected″
[0606] [;↑(Old_Affls)]
[0607] 规则:Affls=″affluent_″∪Old_Affls
[0608] 规则[1]-[14]的仪器和IP的定义允许对IP/仪器多次实例化(例如,像利用经典VHDL组件所进行的那样)。这在规则[15]中示出。
[0609] [15]component_instantiation_statement::=
[0610] instantiation_label:
[0611] instantiated_unit
[0612] [generic_map_aspect]
[0613] [port_map_aspect];
[0614] 从语法观点来看,该实例化规则(规则[15])与经典VHDL中的确切地相同。所有新颖性都在上下文侧:
[0615] (1)实例化将器件的拷贝创建到扫描路径中。编译器可以容易地从编译库获取其信息,并使用它们来完成系统扫描路径。
[0616] (2)通用映射负责指定精确扫描路径插入点(″precedent″、″following″,支流和分支)。
[0617] (3)其他通用映射将外部元素的符号名称分解成实际名称(即相应实例的标签)。测试工具还必须检查所引用的过程实际存在于实例化的元素中。
[0618] 以下规则(编号[16]至[33])描述了示例过程:
[0619] [16]↓(Ext)↑(P_info)::=
[0620] []↓(Ext)↑(P_info)[0621] [17]::=
[0622] [;]
[0623] [18]::=|
[0624]
[0625] [19]::=
[0626] procedure()
[0627] [DEPENDENCIES();]
[0628] LENGTH();
[0629] BUSY_MODE();
[0630] [CONNECTION;]
[0631] 规则:过程原型仅仅是语法手段,以使得代码对于人类用户
[0632] 而言更加可读。它们不携带上下文信息。
[0633] NB:仅针对选择过程,允许“连接”派生。
[0634] [20]::=
[0635] FUNCTION()
[0636] [DEPENDENCIES();]
[0637] LENGTH();
[0638] BUSY_MODE();
[0639] []
[0640] RETURN
[0641] 规则:过程原型就是仅仅是语法手段,以使得代码对于人类用户而言更加可读。它们不携带上下文信息。
[0642] NB:仅针对选择过程,允许“连接”派生。
[0643] [21]
[0644] 规则:参数遵照正常VHDL参数的语法。通过显式命令来进行对扫描路径片的引用。
[0645] [22]↓(Ext)↑(P_info)↑(Cross)::=
[0646] ↓(Ext)↑(new_P)↑(Cross_Info)
[0647] [;↓(Ext)↑(OldP)↑(Old_Cross)]|
[0648] ↓(Ext)↑(new_P)
[0649] [;↓(Ext)↑(OldP)]
[0650] 规则:P_info=Old_P∪New_P
[0651] Cross=Old_Cross∪Cross_info
[0652] [23]↓(Ext)↑(Proc_info)↑(Cross_info)::=
[0653] PROCEDURE
[0654] (↑(P))
[0655] [DEPENDENCIES()↓(Ext)↑(D);]
[0656] LENGTH(↑(L));
[0657] BUSY_MODE()↑(M);
[0658] [CONNECTION↑(C_type);]
[0659] IS
[0660] begin
[0661]
[0662] END
[0663] 规则:
[0664] P=参数信息(标准VHDL)。一个参数至少应当指代片或静态比特流。
[0665] L=过程长度信息
[0666] D=依赖性信息
[0667] M=忙模式信息
[0668] 是字面标识符
[0669] 类似正常VHDL中的派生
[0670] Proc_info=P∪L∪D∪M
[0671] Cross_info=如果 (SeL[1]-SeL[6]中的命名规则)
[0672] 则Cross_info=Sel_info∪C_type 否则出错
[0673] [24]↓(Ext)↑(Proc_info)::=
[0674] FUNCTION(↑(P))
[0675] [DEPENDENCIES()↓(Ext)↑(D);]
[0676] LENGTH(↑(L));
[0677] BUSY_MODE()↑(M);
[0678] RETURNIS
[0679] BEGIN
[0680]
[0681] END
[0682] 规则:
[0683] P=参数信息(标准VHDL)。一个参数至少应当指代片或静态比特流。
[0684] L=过程长度信息
[0685] D=依赖性信息
[0686] M=忙模式信息
[0687] 是字面标识符
[0688] 类似正常VHDL中的派生
[0689] Proc_info=P∪L∪D∪M
[0690] [25]↓(Ext)↑(D_new)::=
[0691] ↓(Ext)↑(D)[;dep_list↓(Ext)↑(D_old)]
[0692] 规则:D_new=D_old∪D或D_new=D
[0693] [26]↓(Ext)↑(D)::=↑(P)|
[0694] ↑(E).↑(P)
[0695] 规则:
[0696] P=依赖过程的名称
[0697] E=在检查E∈Ext中定义外部器件P的名称,否则错误
[0698] D=P∪E
[0699] [27]↑(M)::=HOLD|DONT_CARE
[0700] 规则:M=″hold″或″dont_care″
[0701] [28]↑(L)::=↑(T)[:↑(C)][0702] 规则:L=T∪C
[0703] [29]↑(T)::=↑(T)|
[0704] ↑(L),↑(A),↑(U)
[0705] 规则:T=T或L∪A∪U
[0706] L=函数长度的下限
[0707] A=平均函数长度
[0708] U=函数长度的上限
[0709] [30]↑(T)::=|
[0710] 规则:T包含绝对时间或时钟计数(如果不指定时间单位)
[0711] [31]↑(C)::=
[0712] 规则:布尔表达指示过程的结束条件。其应当使用来自由
[0713] 显式命名标识的片的信号。
[0714] [32]::=WIRED|TRANSACTION
[0715] [33]::=
[0716] 规则:有意地将该派生保留为开放的。通过定义可选的参数,任何两个操作员能够交换他们所偏好的格式的信息,而不是在标准化时间选择的任意一种。例如,这能够用于给出用于功率管理的开关活动的估计,或者直接给出焦耳/瓦。测试工具忽略其未实现的派生,最后产生警告。
[0717] 如这里所述,选择过程由它们的名称标识。以下规则(编号Sel[1]至Sel[6])说明了对使用类似BNF语法的选择过程的命名的控制。这里关于图8、图9示出和描述了示例交叉器件,并且图10示出了这些规则的示例应用。
[0718] sel[1]↑(Sel_info)::=
[0719] [↑(Affls)↑(Tribs)]
[0720] 规则:Sel_info=(Affls)∪(Tribs)
[0721] sel[2]::=SELECT|DESELECT
[0722] sel[3]::=
[0723] |
[0724] sel[4]::=AFFLUENT
[0725] ||
[0726]
[0727] 规则:如果(affluent)Affls=″All″;
[0728] 如果(numbered_affluents)Afflls=Nmb_Affls
[0729] 如果
[0730] 说明:该规则检测函数命令的支流,函数进行命令。可以为无(即,规则以空集结束)、所有支流(非指定)、或仅仅为子集(一个或多个affluent_);
[0731] sel[5]::=
[0732] AFFLUENT_[;]
[0733] 规则:可以是任何自然数
[0734] New_Affls=Old_Affls∪afflunent_
[0735] sel[6]::=TRIBUTARY
[0736] ||
[0737]
[0738] 规则:如果(tributary)Tribs=″All″;
[0739] 如果(numbered_tributaries)Tribs=Nmb_Tribs
[0740] 如果
[0741] 说明:该规则检测函数命令的分支。可以为无(即,规则以空集结束)、所有分支(非指定)、或仅仅为子集(一个或多个tributary_);
[0742] 对于自动测试产生工具所要使用的选择过程,还需要标准化的自变量,使得自动测试产生工具知道如何处理选择过程。遵照实际选择算法,存在两种引用派生的方式:(1)通过显示命名,即,使用“串”或等同类型;(2)通过对派生的有序编号,即,使用适宜大小的std_logic_vector。
[0743] 自变量随着过程控制的派生而改变(从选择规则Sel[1]-Sel[6]看出)。以下原型与最一般的情况有关(NB:即使该示例为“选择”,相同规则对于“取消选定”当然也是有效的):
[0744] 1)select(tributary_nmb:in std_logic_vector,
[0745] affluent_nmb:in std_logic_vector)
[0746] 2)select(tributary_name:in string,
[0747] affluent_name:in string)
[0748] 自动测试产生工具只须填入相应的名称/编号。在更精确的选择函数的情况下,仅需要使用一些自变量(例如,图9的分级开关器件的取消选定函数),如果名称本身已经唯一标识了目标(例如,图8的SIB),则最终为空。
[0749] 以下规则(规则[34]至[41])基于VHDL 93,并与VHDL 93兼容,但是明显更简单。已经移除与NSDL不直接相关的所有派生。应注意规则[34]至[39]是经典VHDL语法规则,这里所示的仅用于描述新的上下文规则。
[0750] [34]library_unit::=
[0751] primary_unit
[0752] |secondary_unit
[0753] [35]primary_unit↑(H,n)↑(P_info)↑(Cross)↑(Par)::=
[0754] entity_declaration↑(H,n)
[0755] |configuration_declaration
[0756] |package_declaration
[0757] |IP_declaration↑(H,n)↑(P_info)↑(Ext)↑(Cross)↑(Par)
[0758] |lnstrument_declaration↑(H,n)↑(P_info)↑(Ext)↑(Cross)↑(Par)[0759] 注意:这是NSDL与VHDL集成的规则,允许IP和仪器定义为顶层实体;这也是如下所在的点:测试工具完成分级分析,将分级分析的信息存储在(H,n)、(P_info)、(Cross)以及(Par)中。
[0760] 规则: 否则出错(其是顶层模块)
[0761] [36]secondary_unit::=
[0762] architecture_body
[0763] |package_body
[0764] [37]entity_declaration↑(H,n)::=
[0765] ENTITYIS
[0766] entity_header
[0767] entity_declarative_part
[0768] [BEGIN
[0769] architecture_body↑(H,n)]
[0770] END[entity][entity_simple_name];
[0771] 规则:该规则描述由编译器在实例化时使用的所定义实体的扫描路径内部。该规则能够用于描述非P1687兼容的实体,该实体具有扫描路径,但不具有函数/过程集合。注意,实体保持为与在经典VHDL中类似,从而他们不允许外部依赖性。
[0772] [38]architecture_body↑(H,n)::=
[0773] ARCHITECTUREOF entity_name IS
[0774] architecture_declarative_part
[0775] BEGIN
[0776] architecture_statement_part↑(H,n)↑(P,F)
[0777] END[architecture][];
[0778] 规则:检查(P,F)所定义的扫描链的完整性(以TDI开始,以TDO结束,没有漏洞、线性而非分级等)。
[0779] [39]architecture_statement_part↑(H,n)↑(P,F)::=
[0780] [component_instantiation_statement↑(Hi,ni)↑(P,F)i]
[0781] 规则:
[0782] H=∪Hi+(H_in,H_out)i
[0783] (P,F)=∪(P,F)i,
[0784] n=∑ini
[0785] [40]↑(SP_info)::=
[0786] ↑(C_info)
[0787] [↑(S_old)]
[0788] 规则:也可以将该规则解释为,在并发语句上对VHDL规则的上下文检查,这将规则的开发限制到扫描链相关的单元实例的实例。
[0789] SP_info=S_old∪C_infor
[0790] 使用C_info内的P和F来检查扫描路径完整性。
[0791] [41]component_instantiation_statement↑(C_info)::=
[0792] instantiation_label:
[0793] instantiated_unit↑(H,n)↑(P,F[,H_in,H_out])
[0794] [generic_map_aspect]
[0795] [port_map_aspect];
[0796] 规则:n(单元数目),H(分级信息),P(在前),F在后),从数据库中的″instatiated_unit″描述中获取
[0797] H_in,H_out,由控制单元引入的分级扫描路径
[0798] C_info=(H,n)∪(P,F[,H_in,H_out])
[0799] 以下规则(编号[42]至[57])包括用于并行访问的示例正式规则:
[0800] [42]↑(Par)::=
[0801] [↑(par_in)]
[0802] [↑(par_out)]
[0803] ;
[0804] 规则:Par=par_in∪par_out
[0805] [43]↑(Par_dec)::=
[0806] [↑(par_connection)]
[0807] [↑(alter_info)]
[0808] [↑(fanning_info)]
[0809] 规则:Par_dec=par_connection·fanning_info·alter_info
[0810] [44]↑(par_in)::=
[0811] ↑(idf)
[0812] |↑(par_ins);
[0813] 规则:par_in=idf
[0814] |par_in=par_ins
[0815] [45]↑(idf)::=
[0816] PARALLEL_IN:STRING:=″deselected″;
[0817] 规则:idf=″parallel_in″
[0818] [46]↑(par_in)::=
[0819] ↑(idf)
[0820] [;↑(par_ins)]
[0821] 规则:par_in=idf∪par_ins
[0822] [47]↑(idf)::=
[0823] PARALLEL_IN_:STRING:=″deselected″
[0824] 规则:idf=″parallel_in_
[0825] [48]↑(par_out)::=
[0826] ↑(idf)
[0827] |↑(par_outs);
[0828] 规则:par_out=idf
[0829] |par_out=par_outs
[0830] [49]↑(idf)::=
[0831] PARALLEL_OUT:STRING:=″deselected″;
[0832] 规则:idf=″parallel_out″
[0833] [50]↑(par_outs)::=
[0834] ↑(idf)
[0835] [;↑(old_par_outs)]
[0836] 规则:par_outs=idf∪old_par_outs
[0837] [51]↑(idf)::=
[0838] PARALLEL_OUT_:STRING:=″deselected″
[0839] 规则:idf=″parallel_out_
[0840] [52]↑(fanning_info)::=
[0841] ↑(idf)FAN↑(provenance_info);
[0842] 规则:fanning_info=idf∪provenance_info
[0843] [53](idf)::=↑(idf)
[0844] |↑(idf)
[0845] |↑(idf)
[0846] |↑(idf)
[0847] [54]↑(provenance_info)::=
[0848] ↑(idf)[&↑(old_prov)]
[0849] 规则:provenance_info=old_prov∪idf
[0850] NB:″标识符″
[0851] 该规则允许扇入和扇出的描述(关于图28所示出和描述的),而不具有对用于该构成的并行端口的任何约束。使用全部端口,遵照VHDL信号的拼接规则(′&′符号)进行构成。
[0852] [55](alter_info)::=
[0853] ↑(idf)IS ALTERNATE OF↑(idf_list);
[0854] 规则:alter_info=idf∪idf_list
[0855] [56]↑(idf_list)::=
[0856] ↑(idf)[,↑(old_idf_list)];
[0857] 规则:idf_list=idf∪old_idf_list
[0858] ″parallel_reg″是经典VHDL标识符。
[0859] [57]↑(par_connection)::=
[0860] ↑(idf)CONNECTS↑(idf_list);
[0861] 规则:par_connection=idf∪idf_list
[0862] 如这里所述,以类似于交叉器件的方式,并行接口使用一些命名规则来标识关键资源。需要命名的元素包括:
[0863] 并行片:可以由并行连接访问的片,其名称以“parallel_”开始。遵照连接方案,这些片完全独立于串行扫描路径或串行扫描路径的一部分。
[0864] 并行函数:通过两个特定函数:″get_parallel_data″和″send_parallel_data″,来获得对并行资源的访问。
[0865] 如这里所述,对于并行接口存在三种可能的同步模式:与扫描链同步、突发、以及异步。在一个实施例中,通过特定函数在这些模式之间切换,该特定函数正如交叉选择函数一样,在需要时指定必须如何改变比特流。这些函数包括:
[0866] function set_scan_synchro return boolean;
[0867] function set_burst(length:in burst_length_type)return boolean;
[0868] function set_asynchro return boolean;
[0869] function disable_port return boolean;
[0870] 测试工具通过跟踪对这些函数的调用,能够容易获知哪个模式是活动的。器件仅声明针对其实际实现的模式的函数。
[0871] 必须在并行接口内部将类型″burst_length_type″定义为整数子类型,使得开发人员能够指出允许用于突发的值的范围。示例包括:″subtype burst_length_type is3到10的整数范围″,″typeburst_length_type是(6,8,10)″等。该解决方案意味着每个并行接口声明其自己的″burst_length_type″,这仅在局部是有效的,从而不会干涉最终的其他接口。
[0872] 在并行接口具有多于一个端口的实施例中,函数所引用的端口的名称被附加至函数名称。示例包括:″set_scan_synchro_parallel_out_0″,″disable_port_parallel_in″等。
[0873] 上述BNF规则仅组成了可以用于实现NSDL的规则的示例。本发明并不意在受限于这样的规则。
[0874] 图30示出了适合于执行这里描述的函数的通用计算机的高级框图。如图30所示,系统3000包括:处理器元件3002(例如,CPU)、存储器3004(例如,随机存取存储器(RAM)和/或只读存储器(ROM))、测试模块3005、以及各种输入/输出设备3006(例如,存储设备,包括但不限于磁带驱动、软盘驱动、硬盘驱动或光盘驱动、接收器、发送器、扬声器、显示器、输出端口以及用户输入设备(例如,键盘、键区、鼠标等))。
[0875] 应注意,本发明可以以软件和/或软件和硬件的组合来实现,例如,使用专用集成电路(ASIC)、通用计算机或任何其他硬件等同物。在一个实施例中,能够将本发明测试过程3005加载到存储器3004中,并由处理器3002执行,以实现如上所述的功能。这样,能够将本发明的测试过程3005(包括关联的数据结构)存储在计算机可读介质或载体上,例如RAM存储器、磁或光驱动或磁盘等。
[0876] 尽管这里主要关于可以使用NSDL描述和测试的片上系统器件的特定实现方式进行了示出和描述,但是可以使用NSDL描述和测试各种其他片上系统器件。尽管这里主要示出和描述了关于使用NSDL来描述和测试片上系统,但是可以使用NSDL描述和测试各种其他电子电路。本发明并不意在仅限于描述和测试这里示出和描述的特定电子电路。
[0877] 尽管这里主要关于可以用于使用NSDL来描述和测试片上系统的测试系统的特定实现方式进行了示出和描述,但是测试系统的各种其他实现方式可以用于使用NSDL来描述和测试片上系统。本发明并不意在仅限于这里示出和描述的测试系统的特定实现方式。
[0878] 这里作为软件方法讨论的一些步骤可以在硬件内实现,例如,作为与处理器协作以执行各种方法步骤的电路。本发明的一部分可以实现为计算机程序产品,其中,当由计算机处理时,计算机指令适配计算机的操作,使得能够调用或以其他方式提供本发明的方法和/或技术。可以将用于调用本发明的方法的指令存储在固定或可拆卸的介质中、经由广播的数据流或其他信号承载介质进行传输、和/或存储在根据指令进行操作的计算设备内的存储器中。
[0879] 尽管这里已经详细示出并描述了结合本发明的教导的各种实施例,但是本领域技术人员能够容易设想同样结合这些教导的其他改变的实施例。