专利名称:关于嵌入式字段可编程门阵列核心的接口结构的制作方法
相关申请的交叉参考
本专利申请声明来自2001年10月16日提交的第60/329,818号美国临时专利申请的优先权,它被包括于此,用于各种用途。
背景技术:
本发明涉及集成电路中的可配置互连网络,更具体地说,涉及被嵌入集成电路的该FPGA(字段可编程门阵列)核心。该FPGA核心可以在该集成电路中的各个功能块(尤其是诸如处理器核心的计算元件)之间提供可配置互连,或者,它本身可以提供可配置功能块。
FPGA是其功能性由该FPGA的这些用户来指定的集成电路。该用户可以为该FPGA编程(因此采用术语“字段可编程”),以执行该用户想要的这些功能。该FPGA在这些逻辑单元与该互连网络之间具有互连网络,并且,这些逻辑单元可以加以配置,以执行该用户想要的该应用程序。通常,一个或多个FPGA与电子系统中的其他集成电路连接。该FPGA可以被配置成提供这些其他的集成电路之间的所需信号通道,并且,如果需要的话,可调节这些信号。关于用于保存这些配置位的、基于SRAM(静态随机存取存储器)的FPGA,可以为该电子系统的多个应用程序而由该用户来更改该FPGA的这个配置。关于基于单一掩码用户化的可配置核心,该FPGA可以只由该用户配置一次。
随着半导体技术中几何学运用的减少,FPGA开始嵌有ASICs(特定用途集成电路)中的功能电路块。例如,这类元件可以包括处理器、存储器和该所谓“芯片上的系统”(SOC)中的外围元件、或并行计算集成电路的多处理器元件。该FPGA的主要的可配置部分(被称作“FPGA核心”)被嵌入该ASIC,以便用可配置的方式将该ASIC的各种功能块互连起来,或者形成该集成电路的另一个功能块。这个功能块可以由该用户(或该ASIC的制造商)来编程,以便使该集成电路在其应用程序中保持灵活性。
为了给嵌入式FPGA核心(或FPGA)编程,可使用配置位来设置该FPGA逻辑和互连路径中的交换器的状态。迄今为止,已使用JTAG、被定义的IEEE1149.1标准(用于测试电子系统和集成电路)、该集成电路中的串行扫描链来携带该FPGA核心编程的这些配置位。为了测试具有FPGA核心的ASIC的完整性,该核心必须被加以配置,然后进行测试。该FPGA核心的这类配置和测试使该ASIC设计者肩负重大的责任,该ASIC设计者通常不是该FPGA核心的发明人,甚至也不是该ASIC的这些其他功能块的发明人。因此,每当FPGA核心被嵌入集成电路时,该设计者必须钻研该特定FPGA核心的细节,并为该核心创建特殊接口和测试例行程序。这延迟了该ASIC的设计,并且在可靠性方面,为错误和不定性提供了可能性。
本发明针对这些问题,并为待配置和测试的FPGA核心提供了有效率的方法。 发明概述 本发明规定具有FPGA核心的集成电路;适合接收命令来配置该FPGA核心的接口;以及被耦合到该FPGA核心的微控制器,该微控制器响应于从该接口接收到的这些命令来配置该FPGA核心。当该集成电路具有用于检测该集成电路的操作的处理器单元时,该接口适合从该处理器单元接收这些配置命令。
该接口进一步适合接收命令,以测试该FPGA核心,由此,该微控制器响应于从该接口接收到的这些测试命令来测试该FPGA核心。在该FPGA核心具有特殊的特点的情况下,该微控制器按预定的测试顺序来测试该FPGA核心。例如,在该FPGA核心具有分层结构的情况下,该预定的测试顺序对应于该结构的层级。
本发明进一步规定被耦合到该FPGA核心的多个扫描链——用于将测试矢量引入该FPGA核心,并用于响应于该微控制器而从该FPGA核心那里接收测试结果。根据该FPGA核心的预定部分来安排这些扫描链,以便第一扫描链将测试矢量引入一个部分,而第二扫描链从该部分接收该测试矢量的测试结果。
附图简述
图1是根据本发明的一个实施例的ASIC的层次框图,该ASIC跟关于该嵌入式FPGA核心的处理器单元和主机接口组织起来; 图2是该图1 ASIC的该微控制器的层次框图; 图3是代表图,展示了供这些配置位对图1中的该嵌入式FPGA核心进行编程的这些寄存器; 图4A表现了用于测试该嵌入式FPGA核心的扫描链;图4B展示了根据本发明的两个扫描链的布置,这些扫描链用于标记测试信号,并用于从该嵌入式FPGA核心的一个部分中检索测试结果信号; 图5表现了该嵌入式FPGA核心的示范的基于多路复用器的互连网络结构; 图6A展示了图1中的该嵌入式FPGA核心的基于该分层多路复用器的互连结构的底层;图6B表现了该图6A层次级的下一个更高的层次或双亲段;图6C表现了该图6B层次级的下一个更高的层次或双亲段; 图7展示了图6B中的这两个层次级的输入多路复用器和输出多路复用器;以及, 图8表现了图7中的这些多路复用器如何建立两个底层单元之间的连接。 特殊实施例的说明 ASIC的一般组织 在本发明的一个实施例中,如图1所示,ASIC跟处理器单元和嵌入式FPGA核心组合起来。该ASIC中的其他功能块未示出。处理器单元10通过总线11与其他功能块进行通信。这些功能块之中有嵌入式FPGA核心12,嵌入式FPGA核心12通过主机接口20——该ASIC的其余部分与FPGA核心12之间的接口而被连接到总线11(和处理器单元10)。主机接口20适合处理关于特定总线11的协议,特定总线11可能是标准化总线(例如,关于众所周知的ARM微控制器(起源于英国剑桥的ARM有限公司)的AMBA),也可能是关于专用处理器单元的定制的总线。
主机接口20从处理器单元10接收命令,并且将相等的命令重新发给微控制器16,以处理各项功能(例如,关于FPGA核心12的配置位的装载、这些配置装载操作的监控、FPGA核心12通过BIST(内置自检)而进行的自检、调试操作的监控)。被连接在主机接口20与微控制器16之间的有指令寄存器21、状态寄存器22和数据寄存器23。被连接在主机接口20与FPGA核心12之间的有用户邮箱寄存器(或寄存器)24,该寄存器保存针对该ASIC用户的信息,并可以由该用户进行修改。
依据通过总线11和主机接口20而来自处理器单元10的指令,微控制器16处理该FPGA核心12的该配置和测试。微控制器16也可以帮助调试FPGA核心12,即,为来自软件工具的请求服务,以调试该FPGA核心操作中的错误。微控制器16具有提供对该FPGA核心内的所有资源的访问的一般指令集。这允许该微控制器提供更高层次的服务,例如配置装载、配置监控、内置自检、故障分析和调试器支持(包括时钟控制、寄存器读取和写入)。
根据本发明,主机接口20是必须适应每个ASIC设计的总线11的这些协议的这些要求的单元。一旦已适当设计主机接口20,FPGA核心12、微控制器16、指令寄存器21和除主机接口20以外的其他这些元件就可以作为单元而被安装入ASIC。
FPGA核心微控制器 来自主机接口20的这些指令和必要的数据由微控制器16来加以解释和执行。微控制器16又使用接口20来将状态和所请求的数据传回给处理器单元10。在已接收指令之后,微控制器16生成执行这个所请求的功能所需要的低层次控制和数据传送序列。这些功能包括将配置数据装载到FPGA核心12;读回并验证所装载的该数据;检查并/或修改FPGA寄存器的这些内容;整个FPGA核心12的内置自检(BIST);以及涉及该微控制器的存储器的各种诊断功能。如图2所示,该微控制器具有CPU 30、ROM(只读存储器)31和RAM(随机存取存储器)32、静态RAM。ROM 31包含关于微控制器16的该固件或微码,以执行通过接口20而接收的指令所要求的其操作。
例如,在加电复位之后,在本发明的一个实施例中,微控制器16将默认配置安装在FPGA核心12中。然后,微控制器16自己停止。通过主机接口20而来自处理器单元10的中断信号使微控制器16脱离其停止状态,并且,可以进行配置和/或BIST会话。在配置之后,发出最后的HALT指令,该指令将微控制器16返回到其待用状态。
微控制器16被设计成灵活、熟练地处理这各种操作。在本发明的本实施例中,基本指令格式或者包括单一16位指令,或者包括16位指令加上16位直接数据扩展名。
在该单字格式中op RdRt Rs 15 9 8 6 5 3 20 在该双字格式中opRdRt Rs直接数据16 这些寄存器字段Rd、Rt和Rs每个都有3个位宽,并且主要被用来选择关于该指令的2个源寄存器和一个目的寄存器。关于一些指令,并不是所有3个寄存器都需要,所以,可以为各种指令选项使用这些对应的位字段。如果特定的位字段不被用于寄存器选择,则该指令清单将按要求把该字段称作“wd(而不是Rd)”、“wt(而不是Rt)”或“ws(而不是Rs)”,以提高清晰度。使用直接数据的指令用各种方法来解释该16位扩展字。
关于大多数指令,该op字段有7个位宽,并且被解码如下。 I类型操作码 15 14 13 12 9 I 选择单字或2字格式 类型 00逻辑/算术指令——没有设置标记 01 I/O指令,过程控制 10逻辑/算术指令——设置标记 11分支 操作码 16个指令码中的1个指令码 一些指令可能不严格遵循这个解码方案。以下在本说明书的末尾处的“附录”中可找到关于微控制器16的示范指令清单。
FPGA核心的细节 典型的FPGA核心具有用于保存这些配置位的寄存器库,这些配置位在该核心的这些FPGA逻辑和互连路径中设置这些交换器。这些配置位被扫描到这些寄存器中,以保存配线空间。图3指出这些配置寄存器40;从这些寄存器发出的线路41指出到核心12中的这些交换器(包括多路复用器)的这些控制线。
为了根据本发明来测试加以配置的FPGA核心12,核心12也具有扫描字符串33,这些扫描字符串在图4A中被加以象征性的展示。从串联的寄存器中创建每个字符串33,并且,字符串中的每个寄存器单元被连接到核心12中的所选择的位置,以便将由该单元保存的该二进制值施加于这个所选择的位置,或者,从该位置接收二进制值。这些扫描字符串33被用于以下更加详细地加以描述的这些BIST操作。如图4B所示,扫描字符串33被成对地分配和连接到核心12中的各个位置。
FPGA核心12的分段或部分(即该逻辑(FPGA核心单元)和互连(路由选择通路)由这些扫描链(这里被标注为“X”和“Y”)切割和限制。该模式发生器是一个扫描链(被任意标注为“X”),该扫描链将这些数据模式驱入待测试的、配置过的逻辑部分34。这些模式可能是任意的,也可能是为以待测试的FPGA核心12中的特殊特点作为目标而确定的。该签名分析器是具有被启用的该LFSR(线性反馈移位寄存器)模式的扫描链(这里被标注为“Y”),以便逻辑部分34的该逻辑响应与该扫描链数据结合,以创建签名值,该签名值由该Y扫描链累积,用于预定数量的迭代。通过将累积的该签名从一个逻辑样式驱动到另一个逻辑样式,可以用这种方式来测试多个逻辑样式。这样,可以与在各个阶段之间交替的X扫描链和Y扫描链同时测试一系列逻辑样式。
如上所述,扫描链33允许测试FPGA核心12的特殊的特点。关于本发明的特定实施例,FPGA核心12基于多路复用器的分层结构,该分层结构要求不同层次处的测试和不同特点的测试。
图5中示出基于多路复用器的互连网络的小例子,在图5中,四根垂直电线41和两根水平电线42交叉。使用多路复用器43,而不是使用典型FPGA互连网络的旁路晶体管或旁路门电路。在这个例子中,每个水平电线42被连接到多路复用器43的该输出终端,多路复用器43具有与垂直电线42连接的其输入终端。每个水平电线42由4∶1多路复用器43来驱动,4∶1多路复用器43由两个控制位来控制。在这个简单的例子中,只需要四个配置位,而不是需要在利用旁路晶体管来加以执行的该常规可配置网络的情况中的八个配置位。
与通常在FPGA中发现的旁路晶体管可配置互连网络比较,基于多路复用器的可配置互连网络具有许多优点。FPGA核心12也拥有具备该基于多路复用器的可配置互连网络的分层结构。分层结构具有可量测性的各种优点。随着该网络中的逻辑单元的数量的增长,这种互连要求超线性地增加。在分级网络中,只有该层级的这些较高的层次需要扩展,而这些较低的层次保持不变。互连结构可能会自动生成,并且允许容易地嵌入FPGA核心。自动软件发生器允许该用户规定任何尺寸的FPGA核心。这意味着为具有可预测定时的任意网络尺寸而使用具有算法汇编过程的统一构件块。
在FPGA核心12中,该层级的每个层次由4个单元构成,即,换言之,(较高层次的)每个父(单元)由(较低层次的)四个子(单元)构成。如图6A所示,该最低层次由4个核心单元构成。图6B表现了四个底层单元如何组成第二层级层次单元,而图6C表现了四个第二层层级层次单元50如何组成第三层级层次单元。这样,用64个核心单元来组成第三层次单元。当然,子单元的数量可以加以归纳,并且,每个层次可以根据本发明而具有不同数量的子单元。
每个层次处的每个子单元具有一组输入多路复用器和一组输出多路复用器,每个子单元分别提供进入该子单元的输入信号连接和从该子单元出来的输出信号连接。在图7所示的该示范层级中,核心单元45具有四个输入多路复用器46和两个输出多路复用器47,但该互连结构可以被推广到任何数量的输入多路复用器和输出多路复用器。四个核心单元45组成最低层次,该最低层次具有一组12个输入多路复用器58和12个输出多路复用器49。同样,这下一个层次级单元具有一组输入多路复用器和一组输出多路复用器等。
关于这些多路复用器的连接模式具有三个种类输出、交叉、输入。图8在从核心单元A到核心单元B的范例连接路由中展示了这些不同的种类。从核心单元A的输出多路复用器46A到保存核心单元A的最低的层次级1单元50A的输出多路复用器48A具有连接。于是,从输出多路复用器48A到保存核心单元B的层次1单元50B的输入多路复用器49B具有交叉连接。用虚线勾画出单元50A和50B的轮廓。最后,从输入多路复用器49B到核心单元B的输入多路复用器47B具有输入连接。应该注意,这些被配置的连接都位于包含该连接的两个末端(即核心单元A和核心单元B)的该最低层次级单元内。在这个例子中,该最低层次单元是保存16个核心单元25(包括核心单元A和B)的层次2单元。这个FPGA互连结构的这些细节在本发明的范围以外。在Dale Wong和John D.Tobey的2002年7月24日提交的、标题为《关于可量测性和自动发生的基于分层多路复用器的集成电路互连结构》的第10/202,397号美国申请(被受让于本受让人)中,可以找到更多细节。
与网孔类型的结构比较,FPGA核心12的基于多路复用器的分层结构按特定方式要求测试核心12的这些不同的特点。利用主机接口20和微控制器16,可以如以下所描述的那样来执行这类测试。
关于配置和BIST的主机接口命令 为了使用微控制器16,将来自微处理器10的命令经由主机接口20传递到微控制器指令寄存器21。许多指令也需要一些额外的信息(例如,地址或写数据)。如果需要的话,在装载指令寄存器21之前,这被扫描到数据端口寄存器23中。装载指令寄存器21可导致微控制器16中断。一发生中断,微控制器16就读取指令寄存器21,为该指令解码,读取数据端口寄存器23(如果该指令需要的话),并且继续执行这个所要求的命令。在处理命令的同时,控制器16不响应于更多的中断;而是当该当前命令终止时,该中断被闩锁并变成运行状态。
在装载指令寄存器31之后,主机接口20立即开始轮询状态寄存器22。假设该命令一直在进展中,直到在状态寄存器22中检测到非零代码为止。所有有效的状态码在寄存器22的lsb(最不重要的位)位置中返回“1”。如果该寄存器的其余部分是0,则该控制器无法执行该命令,为此,可能具有关于这类响应的几种原因。该指令码可以是无效的;一些命令必须按特定的顺序跟随;或者,该地址或数据可能越界。如果成功地完成该指令,则也将设置状态寄存器22的位[1]。一些指令会引起微控制器16将数据通过主机接口20供应给微处理器单元10。当检测到该成功的完成码时,微处理器10随后可以继续执行,并读取数据寄存器23,以获得该信息。
在开电重置之后,或在发出该HALT命令之后的任何时间,指令寄存器21处于锁定状态。也就是说,它将不会响应于命令;除Verify_Security_Key命令以外的所有命令都被拒绝。在许可使用该一般命令集之前,必须向数据寄存器23呈现有效的32位安全码。
以下是关于这些FPGA配置操作的、微处理器单元10可用的示范命令清单。
Start_Configuration 代码=1 在任何这些配置装载或读回命令之前,将发出这个命令(见以下的代码2-8)。Start_configuration开启那些命令,并使它们可用。当完成配置装载时,应该发出该End_Configuration命令(代码=10),以便重新锁定这些命令,并防止因疏忽所致的对该配置的修改。一旦验证该安全密钥,除代码=2~8以外的指令码就一直可用。
返回 3 可以 1 指令被拒绝 Start_Sequential_Load 代码=2 被发出,以开始连续的配置装载序列。该序列的这第一部分规定该FPGA中的该初始地址,将在其中存储配置数据。这个地址应该被放置在数据寄存器23中。
FPGA地址是包括行号、列号和四路号的3元组。它们被编码为32位字,如下所示行四路列 31 16 1514 13 0 关于这个指令的返回码是 返回 3 为数据准备就绪1 指令被拒绝 Load_Sequential_Data代码=3 跟随在代码=2指令之后。这个指令通过提供待装载的该数据,来完成该连续写序列。该数据应该被放置在数据寄存器23中。在该装载之后,该装入地址(的列)自动增量。可以重复地发出Code=3指令,直到该所需装入地址不再连续为止。
返回 3 完成装载1 指令被拒绝 Start_Parallel_Load 代码=4 发出这个命令,以开始并行装载序列。将加以并行装载的该数据在这个指令中被提供,并且应该被放置在数据寄存器23中。该并行装载设备在单一写周期中跨越多个位置同时装载单一数据项目,这可以在配置装载时间方面引起重大的改进。
返回 3 可以 1 指令被拒绝 Parallel_Load_Start_Address 代码=5 在代码=4指令之后发出这个命令,以规定将在那里装载所规定的数据字的该初始地址。应该将该地址放置在数据寄存器23中。
返回 3 为结尾地址准备就绪 1 指令被拒绝 Parallel_Load_Ending_Address 代码=6 在代码=5指令之后发出这个命令,以完成该并行装载。应该将该结尾地址放置在数据寄存器23中。这个所规定的数据字被并行装载到FPGA核心12中的连续的位置,包括开头的该初始地址和终止的该结尾地址在内。这是单一周期的写操作。地址在行或列方面可能是连续的。根据该地址的哪个部分不同,来自动检测该顺序。该结尾地址是高于还是低于该初始地址并不重要。该初始地址、结尾地址和介于中间的所有位置被加以定位。如果该初始地址和该结尾地址相同,则只有那一个位置被加以定位。
返回 3 完成装载 1 指令被拒绝 Start_Sequential_Read_of_Configuration_Data代码=7 发出这个命令,以开始连续的配置读序列。应该将该读周期的该初始地址放置在数据寄存器23中。这个指令从FPGA核心12读取这第一个数据项目,从而取代数据寄存器23的这些内容。
返回 3 可以 1 指令被拒绝 Read_Sequential_Configuration_Data代码=8 这个指令在代码=7之后读取额外的连续配置数据项目,而无须在新地址中进行扫描。这前一个地址在每次读取之后(在列的方面)被自动增量。这个指令可以按需要重复许多次。将数据项目放置在数据寄存器2中。
返回 3 完成装载 1 指令被拒绝 Verify_Security_Key 代码=9 这一定是在接受其他任何配置命令之前所发出的第一个指令。必须将该安全密钥(32位预先分配的整数)放置在数据寄存器23中。微控制器16读取该值,并将它与该密钥的内部保存的副本进行比较。如果它们匹配,则允许全部存取。如果该匹配失败,则存取仅限于代码=9指令。
返回 3 可以 1 坏密钥 End_Configuration 代码=10 这个指令终止配置装载/读取会话,并且封锁具有代码=2~8的指令。所有其他的指令保持运行。
返回 3 可以 1 指令被拒绝 Read_Bundle_X_Register代码=11 这个所需束号(在范围0-63以内)被放置在数据寄存器23中,并且,这个指令使微控制器16对该y扫描链进行内部扫描,直到来自这个所需的16位束寄存器的该数据出现为止。该束寄存器被读出,并被拷贝到数据寄存器23。然后,按循环方式来进一步移动该扫描链,直到这整个扫描链已恢复回到其原始状态为止。
返回 3 寄存器数据准备就绪 1 指令被拒绝 Read_Bundle_Y_Register代码=12 这个所需束号(在范围0-63以内)被放置在数据寄存器23中,并且,这个指令使微控制器16对该y扫描链进行内部扫描,直到来自这个所需的16位束寄存器的该数据出现为止。该束寄存器被读出,并被拷贝到配置装入程序数据寄存器22。然后,按循环方式进一步移动该扫描链,直到这整个扫描链已恢复回到其原始状态为止。
返回 3 寄存器数据准备就绪 1 指令被拒绝 Write_Bundle_X_Register 代码=13 这个指令启动到特定束X寄存器的写序列。该束号被放置在数据寄存器23中。随后的代码=14指令为该写操作提供该数据。
返回 3 可以,为数据准备就绪 1 指令被拒绝 Write_Bundle_Register_Data代码=14 这个指令跟在代码=13指令或代码=15指令后面。它为该束寄存器写操作提供该数据。写入的进行类似于这些束寄存器读操作的运作方式。对该X或Y扫描链进行扫描,直到来自这个所需寄存器的该数据出现为止。在这种情况下,它被取代,而不是读取该寄存器。然后,该扫描继续进行,直到该扫描链恢复到其原始状态(除这个新的寄存器值以外)为止。
返回 3 完成写操作 1 指令被拒绝 Write_Bundle_Y_Register 代码=15 这个指令启动到特定束Y寄存器的写序列。该束号被放置在该配置装入程序数据寄存器中。随后的代码=14指令为该写操作提供该数据。
返回 3 可以,为数据准备就绪 1 指令被拒绝 Shift_X_Scan_Chain 代码=16 这是将该X扫描链移动从1到32的任意位数的较低层次的功能。应该将该位计数放置在数据寄存器23中。当随后的指令(代码=17)提供该扫描输入数据模式时,发生这种移动。
返回 3 可以,为扫描输入模式准备就绪 1 指令被拒绝 Shift_Scan_Data 代码=17 这个指令跟在代码=16或代码=18指令后面;并且,当发生这种移动时,供应待扫描输入的该数据模式。当发生移位时,数据寄存器23成为该扫描链的一部分,以便数据移出该lsb(最不重要的位)末端处的该寄存器,来自该扫描链的该扫描输出数据移入到该msb(最重要的位)末端上。当该指令完成时,微控制器10可以重新获得曾被扫描输出的该数据。
返回 3 完成移位操作 1 指令被拒绝 Shift_Y_Scan_Chain 代码=18 这是将该扫描链移动从1到32的任意位数的较低层次的功能。该位计数被放置在数据寄存器23中。当随后的指令(代码=17)提供该扫描输入数据模式时,发生该移位。
返回 3 可以,为扫描输入模式准备就绪1 指令被拒绝 Reload_Default_Configuration 代码=19 在开电启动时,配置装入程序21将默认配置安装入FPGA核心12。通过发出这个指令,可以随时重新装载这个配置。
返回 3 配置被装载1 指令被拒绝 Begin_Download_to_Code_RAM 代码=20 这个指令为该微控制器的微码设立下载序列。关于该下载的该初始地址(在微控制器代码空间中)将被放置在配置装入程序数据寄存器33中。
返回 3 可以,为数据准备就绪1 指令被拒绝 Download_Code代码=21 这个指令跟在代码=20指令后面。接下来下载的该数据字被放置在数据寄存器23中。微控制器16实际上使用16位指令,而数据寄存器23有32个位宽,所以,这个指令事实上下载一对指令。一旦完成,该地址就被适当地加以自动增量。这个指令可以无限地重复,直到要求非连续的地址为止。
返回 3 数据被装载1 指令被拒绝 Read_R16_Code代码=22 使用这个指令来从其ROM或从其代码RAM读取该微控制器代码。应该将这个所需微控制器存储地址放置在数据寄存器23中,读取那个位置处的该代码,并且,它取代数据寄存器23的前面的这些内容。
返回 3 数据准备就绪1 指令被拒绝 Read_Sequential_R16_Code 代码=23 这个指令跟在代码=22指令后面。它允许读取额外的连续代码字,而无须在新地址中进行扫描。这最后读取的代码字后面的该位置被读取,并被放入配置装入程序数据寄存器23。然后,该地址被适当地加以自动增量。可以无限地重复这个指令。
返回 3 数据准备就绪 1 指令被拒绝 Do_BIST 代码=24 这个指令使这些BIST例行程序被顺次加以运行。一发生这第一个故障,BIST就停止,并且报告其结果。如果没有故障,则继续进行测试,直到所有测试都已运行为止。于是,微控制器16的该32位数据RAM中的预定义的4字块的数据按以下格式来保存这些测试结果的摘要blk addr 0=>通过-1=>失败blk addr+1 测试号码blk addr+2 扫描链中的失败位置blk addr+3 读取的实际签名 所报告的唯一测试是这最后的测试。如果检测到故障,则这将会是该失败的测试。该扫描链中的这个位置是指示符(下至该束层次),连同该测试号码(因为那指出正在测试什么结构),在其处,该故障在FPGA核心12中。如果该测试通过,则该测试号码是这最后的测试,该扫描链中的位置是该链的末端,并且,实际签名是该正确的签名。
应该通过发出Read_Data_RAM指令(代码=28和29),由微处理器单元10来检查这个测试块。
关于BIST,该状态返回迅速指出是通过,还是失败。
返回 7 BIST通过 3 BIST失败 1 指令被拒绝 Do_BIST_N 代码=25 这个指令类似于代码=24,除了“只运行单一BIST测试”以外。应该将该测试号码放置在配置装入程序数据寄存器33中。该单一测试按和关于代码=24相同的方式来进行返回 返回 7 BIST通过 3 BIST失败 1 指令被拒绝 Write_DATA_RAM_ADDR 代码=26 被发出,以启动到微控制器16的该32位数据RAM的写序列。这个指令供应关于可能的一个序列的连续写操作的该初始地址。该地址(在微控制器数据RAM空间中)被放置在数据寄存器23中。 返回 3 可以,为数据准备就绪 1 指令被拒绝 Write_DATA_RAM 代码=27 这个指令跟在代码=26指令后面。将要被写入的该数据被放置在数据寄存器23中。它被写到这个所规定的地址,然后,为这下一次写操作而自动增量该地址。只要这个所需的写地址保持连续,就可以无限地重复这个指令。 返回 3 完成写操作 1 指令被拒绝 Read_DATA_RAM_Addr 代码=28 这个指令启动到微控制器16的该32位数据RAM的数据RAM读序列。该地址在数据寄存器23中被加以提供。读取这个地址处的数据,然后,它取代数据寄存器23的前面的这些内容。 返回 3 数据准备就绪 1 指令被拒绝 Read_DATA_RAM 代码=29 在代码=28指令之后被发出。这个指令执行连续的数据RAM读操作,而无须在新地址中进行扫描。从先前读取的位置后面的该记忆位置读取该数据,然后,该地址被自动增量。只要该所需地址是连续的,就可以无限地重复这个指令。 返回 3 数据准备就绪 1 指令被拒绝 Execute_Subroutine 代码=30 发出这个指令,以便使微控制器16分支到另一个位置,可能是用于执行被下载的代码。具有该标准返回码,但只有当该执行子程序返回到该调用程序时,才如此。 返回 3 (如果该子程序返回) 1 指令被拒绝 Halt代码=31 这个指令关闭这些配置装载操作。微控制器16的这项操作被停止,并且,进一步的程序执行终止。在该停止状态中,该微控制器仍然响应于这些确定的中断,所以,可以在以后的某个时间恢复配置装载活动,但是,它随后要求重新验证该安全密钥。在该停止之前被装载的任何配置保持原封不动。 返回3 BIST操作 在已配置FPGA核心12之后,测试该核心的完整性是谨慎的。微控制器16执行FPGA核心12的彻底、有效的“内置自检”。该BIST例行程序执行核心12中的每个触发器和每个互连路径的周密测试。这些BIST算法按各种层次来运用FPGA核心12。
本发明规定从处理器单元10或可能从该ASIC外部的主机调用的一组固件例行程序。该固件位于微控制器16的该ROM中。每个例行程序以FPGA核心12的一个方面作为目标。可以单独或同时为FPGA核心12的完整测试而调用这些例行程序。微控制器控制器16管理这些BIST算法的执行和这些测试结果的解释。
在这个实施例中,具有14个BIST例行程序,这些例行程序作为该固件中的该微控制器16中断处理程序内的子程序而存在。每个BIST例行程序着重于FPGA核心12的一个方面。这些BIST例行程序也按分层方式彼此依靠。例如,着重于该较高层次的路由选择的测试取决于核心12的这些较低层次处的该正确的功能性。
每个BIST算法具有以下各个步骤 在步骤1中,处理器单元10发出命令,以调用单一BIST算法或所有算法。
在步骤2中,一接收到该命令,该主机端口处的该逻辑就将该指令寄存器和该BIST测试号码中的这个命令(如果有的话)登记在该数据寄存器中。
在步骤3中触发对微控制器16的中断。微控制器16摆脱回路,并开始为该中断服务。
微控制器16在步骤4中读取该命令,并且,对它进行解码,以确定它是否是BIST命令。如果该解码是真的,则微控制器16读取该BIST测试号码,并分支到这个合适的BIST例行程序。
在这个BIST例行程序中,从中获得这些测试矢量的这些寄存器在步骤5中被置于扫描模式。该X和Y扫描链43利用数据而被加以初始化。
在步骤6中,FPGA核心12被配置成在该X扫描链与该Y扫描链之间设立逻辑路径。一个扫描链用作驱动待测试的该逻辑的模式发生器。另一个扫描链从该逻辑接收这些结果,并将它们累积在LFSR(线性反馈移位寄存器)中。
在步骤7中,扫描链43被计时有限的周期数。
在步骤8中,根据所预期的这个签名,来比较该目的扫描链处的该实际签名。
到了步骤9,将该BIST例行程序的这些结果保存在微控制器16的该SRAM中。
关于BIST报告,该状态被报告为在单一BIST测试中,或者通过,或者失败。该返回码由处理器单元10或由这个可能的外部主机从状态寄存器22那里读取。表格1表现了来自单一BIST测试的每个可能的返回的含义。
返回码 含义7BIST测试通过3BIST测试失败1BIST测试命令被拒绝。无BIST测试运行。
表格1单一BIST返回码 关于完全BIST测试,用和关于单一BIST测试的完全相同的方法来报告该状态。此外,将诊断信息存储在微控制器16的该SRAM中的保留存储块内。这个存储块是具有0x20的基本地址的四个32位字。表格2表现了关于该BIST诊断存储块的分配图表。利用Read_DATA_RAM_Addr命令和Read_DATA_RAM命令,该存储块中的该信息可以由处理器单元10来读取。RAM地址信息0x200完全BIST通过-1完全BIST失败0x21被执行的最后一个BIST例行程序的测试号码0x22其中发生故障的扫描链位置 (0-1023)0x23实际签名 表格2完全BIST诊断存储器分配图表 以下的表格3列出被包括在微控制器16固件中的这些BIST测试。关于每次测试,将特点作为目标,并通过重新配置来加以清除,直到通过所有可能的路由选择为止。
测试号码 测试说明 1核心单元LUT(查找表格)测试 2核心单元输入多路复用器测试。测试Vss和来自X输 出的方向连接 3核心单元输入多路复用器测试。测试Vss和来自Y输 出的方向连接 4四路输入多路复用器测试。测试以下路径x_reg->quadoutmux->quadinmus->corecellmux->y_reg 5四路输入多路复用器测试。测试以下路径y_reg->quadoutmux->quadinmux->corecellmux->x_reg 6四路输入多路复用器直接连接测试。测试以下路径x_reg->quadoutmux->quadinmux->corecellmux->y_reg 7束输出多路复用器测试。测试以下路径x_reg->quadoutputmux->bundleoutmux->bundleinmux- >quadinputmux->corecellmux->y_reg 8四路分层输入测试。测试以下路径x_reg->quadoutmux->bundleoutmux->bundleinmux- >quadinmux->corecellmux->y_reg 9束输入多路复用器直接连接测试。测试以下路径x_reg->quadoutmux->bundleoutmux->bundleinmux- >quadinmux->corecellmux->y_reg 10数据条输出多路复用器测试。测试以下路径x_reg->quadoutmux->bundleoutmux->stripeoutmux- >stripeinmux->bundleinmux->quadinmux->corecellmux->y_reg 11数据条输入多路复用器直接连接测试。测试以下路径x_reg->quadoutmux->bundleoutmux->stripeoutmux- >stripeinmux->bunxleinmux->quadinmux->corecellmux->y_reg 12块输出多路复用器测试。测试以下路径x_reg->quadoutmux->bundleoutmux->stripeoutmux- >blockoutmux->blockinmux->stripeinmux->bundleinmux->quadinmux- >corecellmux->y_reg 13数据条分层输入测试。测试以下路径x_reg->quadoutmux->bundleoutmux->stripeoutmux- >blockoutmux->blockinmux->stripeinmux->bundleinmux->quadinmux- >corecellmux->y_reg 14块输入多路复用器测试。测试以下路径x_reg->quadoutmux->bunxleoutmux->stripeoutmux- >blockoutmux->blockinmux->stripeinmux->bundleinmux->quadinmux- >corecellmux->y_reg表格3BIST测试清单 这些特定的BIST测试反映了FPGA核心12的该特定结构。在这个结构中,除了基于多路复用器和按层级布置以外,FPGA的该基本单元——该核心单元还由具有两个输出(被称作“x”和“y”)的LUT(查找表格)来创建。本发明允许逐一地并按关于完整测试的特定顺序来测试FPGA核心的这些特殊的特点。
应该注意到主机接口20和跟FPGA核心12关联的其他这些元件允许处理器单元10来指示核心12的该配置和BIST操作,同时,可以出于连接到外部主机的目的来设计总线11,以控制配置和BIST操作。另一种选择方案可以是被连接到主机接口20的端口,由此,可以指示配置和BIST操作的控制。
前文是对本发明的这些实施例的完整的说明,但应该显而易见,可以执行并使用各种修改、选择方案和相等物。相应地,上文不应该被视作限制本发明的范围,本发明的范围由所附权利要求书的限度和界限来加以定义。
附录——关于微控制器的指令集 该基本指令格式或者包括单一16位指令,或者包括16位指令加上16位直接数据扩展名。
单字格式 双字格式 这些寄存器字段Rd、Rt和Rs每个有3个位宽,它们主要被用来为该指令选择2个源寄存器和一个目的寄存器。关于一些指令,不是所有3个寄存器都需要,所以,可以为各种指令选项而使用这些对应的位字段。如果特定的位字段不被用于寄存器选择,则该指令清单将按要求把该字段称作“wd”(而不是Rd)、“wt”(而不是Rt)或“ws”(而不是Rs),以提高清晰度。
使用直接数据的指令将用各种方法来解释该16位扩展字。该指令清单提供了细节。
关于大多数指令,该op字段有7个位宽,并且被加以如下解码。
I 选择单字或2字格式 类型 00逻辑/算术指令——没有设置标记 02I/O指令,过程控制 12逻辑/算术指令——设置标记 13分支 操作码 16个指令码中的1个指令码 一些指令可能不严格遵循这个解码方案。该指令清单中提供了细节。
处理器状态 该“处理器状态寄存器”包含以下状态位IC V N Z 314 3 210 I 中断启用 Z 结果是零 N 结果是负数 V 算术结果曾引起溢出 C 输出/输入位 该“处理器状态寄存器”(PSR)被称作“扩充寄存器”。扩充寄存器是具有十分特殊的专用功能的寄存器,并且必须通过特殊的MOV指令来加以间接的引用,这些MOV指令可以将它们拷贝到标准数据寄存器并从标准数据寄存器那里拷贝它们。
扩充寄存器索引 代码记忆存储器 说明0PSR处理器状态1LADDR中断程序地址 2IRETURN 中断返回地址 3IPSR 中断程序的被保存的PSR 中断 通过在该PSR上设置该I位,来启用该中断系统。一启动,就将该I位设置为零。
如果启用中断,那么,当在rat16 INTR引线上宣称逻辑“1”时,启动中断。这个引线是层次敏感的,所以,在接受该中断之前,必须宣称该逻辑“1”层次。当该cpu在该IACK引线上宣称逻辑“1”时,承认接受。IACK将保持运行,直到INTR被解除声明(de-asserted)为止。只有当IACK返回到逻辑“0”时,才可以为另一个中断宣称INTR。
当该cpu已辨认出中断请求(但还没有获得)时,该cpu开始寻找它可以用来强制该中断的指令界限。存在一些限制。直到已取出这第二个字,才能中断双字指令。如果可能会改变该程序流的分支指令或转移指令仍然在该传送途径中,则无法获取中断。如果该指令取出程序(fetcher)停止(例如,好象正在进行代码空间数据读操作),则无法获得中断。相应地,中断等待时间不可预知。
当达到合适的指令界限时,该指令解码器将转移指令塞入该传送途径。该转移的目标是当前在该iaddr寄存器中的这个地址。该当前的PC被保存在ireturn中,该当前的PSR被保存在ipsr中。然后,PSR将其I位设置为零,从而禁止进一步的中断。
iaddr应该是中断处理程序的该地址。当该中断处理完成时,该处理程序应该通过将ipsr恢复到PSR,然后通过执行对ireturn的转移,来实行返回。
当获得该中断时,宣称LACK。
移动寄存器 MOV 01 Rd wt Rs 将reg Rs移入寄存器Rd。
41将#data16移入Rd的上一半或下一半 wt
--保留— wt[2:1]00移动到下部的Rd。上部的Rd进行符号扩充。
01移动到下部的Rd。上部的Rd被设置为零。
10移动到上部的Rd。下部的Rd保持不变。
11移动到上部的Rd。下部的Rd被设置为零。
汇编语法 mov r4,r3 将r3拷贝入r4 mov r4,#0xffff 对该16位数量0xffff进行符号扩充,并插入r4 movlr4,#27 清除r4,然后将(小数)27插入这下一半 movur4,#8 清除r4,然后将8插入这上一半 movu16 r4,#8 将8插入r4的这上一半,并使下一半保持不变 位状态补码寄存器 NOT01 Rd wt Rs 01没有将reg Rs移入寄存器Rd。
wt[2:0]010将Rs的补码移动到Rd。
NOT是该MOV指令的特殊情况。
将扩充寄存器移动到寄存器文件 MOV17 Rd Regnum 17将扩充寄存器Regnum移入寄存器Rd。
将寄存器文件寄存器移动到扩充寄存器 MOV 18 Rd Regnum 18将寄存器Rd移入扩充寄存器Regnum。
注意要了解扩充寄存器代码和记忆存储器,见第2页上的该扩充寄存器清单。
装入寄存器 LDR10 Rd wt Rs 10 Rd装载有progmem[Rs]的这些内容 11 Rd装载有datamem[Rs]的这些内容 12 Rd装载有configmem[Rs]的这些内容 50 Rd装载有progmem[Rs+data16]的这些内容 51 Rd装载有datamem[Rs+data16]的这些内容 52 Rd装载有configmem[Rs+data16]的这些内容 Wt
0Rs保持不变。1Rs被算后增量1。
如果该目标只是progmem,则以下内容具有含义 wt[2:1]00将16个位装载到下部的Rd。上部的Rd进行符号扩充。
01将16个位装载到下部的Rd。上部的Rd被设置为零。
10将16个位装载到上部的Rd。下部的Rd不变。
11将16个位装载到上部的Rd。下部的Rd被设置为零。
如果该目标是datamen或configmem,则wt具有以下额外的含义。
Wt[2:0] 011Rs被预先减缩1。
关于LDR指令的汇编语法 ldr prog r3,[r5] 为r3装载rom[r5]处的进行符号扩充的16位rom数据 ldr prog r3,[r5++]为r3装载rom[r5]处的进行符号扩充的16位rom数据 然后对r5实行增量。
ldrl prog r3,[r5++,0x100]清除r3,然后为这下一半装载rom[r5+0x100]处的16 位rom数据 ldru prog r3,[r5++,0x100]清除r3,然后为这上一半装载rom[r5+0x100]处的16 位rom数据,然后对r5实行增量。
ldru16 prog r3,[r5]为r3的这上一半装载rom[r5]处的16位rom数据,r3 的这下一半保留其以前的值。
ldr r3,[r5]为r3装载sram[r5]处的32位sram数据 ldr data r3,[I-r5] r5=r5-1,然后为r3装载sram[r5]处的32位数据 ldr r3,[r5++] 对r5实行算后增量 ldr r3,[r5++,apple] 为r3装载sram中的该阵列元件apple[r5],然后对 r5实行增量。
ldr config r3,[r5] r5的这下一半包含行号。
r5的这上一半包含列号。
为r3装载config{col,row}处的该配置数据。
存储寄存器 STR13 Rd wt Rs 13 寄存器Rd的这些内容被存储在datamem[Rs]中 14 寄存器Rd的这些内容被存储在configmem[Rs]中 19 Rd的这上一半或下一半被存储在progmem[Rs]中 53 寄存器Rd的这些内容被存储在datamem[Rs+data16]中 54 寄存器Rd的这些内容被存储在configmem[Rs+data16]中 59 Rd的这上一半或下一半被存储在progmem[Rs+data16]中 Wt[1:0] 00reg Rs没有改变。01reg Rs实行算后增量。11reg Rs被预先减缩。
只有当该目标存储器是progmem时,才应用关于wt[2]的以下含义。
wt[2]0存储Rd的下一半1存储Rd的上一半 只有当该目标是configmem时,才应用关于wt[2]的以下含义。
wt
0reg Rs没有改变1reg Rs被实行算后增量(预先的减缩不可用) wr[2:1] 00该配置解码器装载有初始地址,但无配置存储周期发生。01(默认)该配置解码器装载有初始地址,并且,该存储周期被加以执行。11该配置装入程序装载有结尾地址,并且,从该初始地址到该结尾地址的所有配置位置同时接收该Rd数据。
关于STR指令的汇编语法 strl prog r3,[r5] 将r3[15:0]存储在程序存储器[r5]处 stru prog r3,[--r5]r5=r5-1,然后将r3[31:16]存储在程序ram[r5]处 str r3,[r5]将r3存储在sram位置sram[r5]处 str data r3,[r5] --与以上相同— str r3,[r5++] 对r5实行算后增量 str r3,[r5++,apple] 将r3存储在sram中的该阵列元件apple[r5]内,然 后对r5实行增量。
str config r3,[r5] r5的这下一半包含行号。
r5的这上一半包含列号。
将r3存储在该配置数据位置config{col,row}中。
str,p1 config r3,[r5] 利用初始地址来对解码器进行初始化。
str,p2 config r3,[r6] 将r3存储在各个位置中,包括R5~R6在内 扫描15 Rdimm6 15 扫描X 16 扫描Y 该扫描指令使该机器停止imm6个周期。在停止的同时,宣称输出信号scan_x或scan_y。串行输出数据移出Rd的该LSB,串行输入数据移入Rd的该MSB。
汇编语法 scanx r4,#32 scany r4,#3 转移 JMP20 wd wt Rs 20该程序计数器装载有Rs。
wd保留 wt保留 这个指令通常被用来从子程序返回,其中的Rs包含该返回地址。
汇编语法 jmpr6 加法02 Rd Rt Rs 01 Rd=Rt+Rs 42 Rd=Rt+data16 汇编语法 addcr4,r4,r3 addcr2,r1,#6 add,s r2,r3,r5;set c,n,z,v 带进位加 ADDC03 Rd Rt Rs 02 Rd=Rt+Rs+C 43 Rd=Rt+data16+C 汇编语法 addc r4,r4,r3 addc r2,r1,#6 addc,sr2,r3,r5;set c,n,z,v 减法 SUB04 Rd Rt Rs 03 Rd=Rt-Rs 44 Rd=Rt-data16 汇编语法 sub r4,r4,r3 subIr2,r1,#6 sub,s r2,r3,r5;set c,n,z,v 借位减法 SUBC05 Rd Rt Rs 05 Rd=Rt-Rs-C 45 Rd=Rt-data16-C 汇编语法 subc r4,r4,r3 subc r2,r1,#6 subc,s r2,r3,r5;set c,n,z,v “与”06 Rd Rt Rs 06 Rd=Rt“与”Rs 46 Rd=Rt“与”data16(Rd的上一半不变) 汇编语法 and r4,r4,r3 and r2,r1,#6 and,s r2,r3,r5;set c,n,z “或”07 Rd Rt Rs 07Rd=Rt“或”Rs 47Rd=Rt“或”data16(Rd的上一半不变) 汇编语法 orr4,r4,r3 orr2,r1,#6 or,s r2,r3,r5;set c,n,z “异或”08 Rd Rt Rs 08 Rd=Rt“异或”Rs 48 Rd=Rt“异或”data16(Rd的上一半不变) 汇编语法 xor r4,r4,r3 xor r2,r1,#6 xor,s r2,r3,r5;set c,n,z 比较 CMP0d wd Rt Rs 0d 标记(c,n,z)<=Rt-Rs 4d 标记(c,n,z)<=Rt-data16(data16进行符号扩充) 汇编语法 cmp r4,r3 cmp r2,#6 逻辑左移 LLS09 Rd d imm5 09,d=0 Rd=Rd<<imm509 Rdd 00 Rs 09,d=1 Rd=Rd<<Rs 零在右边移入。
关于LLS的汇编语法 lls r3,#12 lls r3,r1 lls,s r3,#1;set z,n,c=移出的最后一个位 逻辑右移 LRS0a Rdd imm5 0a,d=0 Rd=Rd>>imm50a Rdd 00 Rs 0a,d=1 Rd=Rd>>Rs 零从左边移入。
关于ASR的汇编语法 lrs r3,#12 lrs r3,r1 lrs,sr3,#1;set z,n,c=在右边移出的最后一个位 算术右移 ASR0b Rdd imm5 0b,d=0 Rd=Rd>>imm50b Rdd00 Rs0b,d=1 Rd=Rd>>Rs 当该操作数右移时,在左边复制符号位。
关于ASR的汇编语法 asr r3,#12 asr r3,r1 asr,s r3,#1;set z,n,c=在右边移出的最后一个位 循环左移 ROL0c Rdd imm5 0c,d=0Rd=Rd<<imm50c Rdd 00 Rs 0c,d=1Rd=Rd<<Rs 在左边移出的位在右边移入。
关于ROL的汇编语法 rol r3,#12 rol r3,r1 rol,s r3,#1;set z,n,c=不变 分支 BR30保留data16 30-3e该程序计数器有条件地装载有PC+data16 30 BR 始终 31 BEQ 如果(Z) 32 BNE 如果(~Z) 33 BCS 如果(C) 34 BCC 如果(~C) 35 BMI 如果(N) 36 BPL 如果(~N) 37 BVS 如果(V) 38 BVC 如果(~V) 39 BHI 如果(C&~Z) 3a BLS 如果(~C|Z) 3b BGT 如果(N==V)&~Z) 3c BGE 如果(N==V) 3d BLT 如果(N==~V) 3e BLE 如果((N==~V)|Z) 汇编语法 beq loc_3 ;汇编程序计算关于符号地址的偏移量 分支到子程序 BSR3fRd保留data16 3f 该程序计数器+1被载入Rd, 然后,该程序计数器被PC+data16取代。
直接跟在BSR后面的该指令总是在该分支生效之前被加以执行。这个指令不会是2字指令。
汇编语法 bsr r4,task3 nop <remainder of main program> halt 任务3 <task3 subroutine> jmp r4;返回到主程序 停止1e保留 1e停止 执行停止 汇编语法 停止 该机器在被停止时变得处于空闲状态,但仍然将会响应于被启用的中断。 DEC, INC, CLR 0e Rd wt ws 0e,wt=0Rd=0 0e,wt=1Rd=Rd+1 oe,wt=2Rd=Rd-1 汇编语法 clrr1 incr2 decr3 dec,s r3;set c,n,z--v不变 这些指令取代相等的2字指令。
权利要求
1.一种集成电路,其特征在于,包括
FPGA核心;
一个接口,它适合接收命令,以配置所述FPGA核心;以及,
被耦合到所述FPGA核心的微控制器,所述微控制器响应于从所述接口接收的所述命令来配置所述FPGA核心。
2.权利要求1的集成电路,其特征在于,进一步包括处理器单元,用于指示所述集成电路的操作。
3.权利要求2的集成电路,其特征在于,所述接口适合从所述处理器接收所述配置命令。
4.权利要求1的集成电路,其特征在于,所述接口进一步适合测试所述FPGA核心,所述微控制器响应于从所述接口接收的所述测试命令来测试所述FPGA核心。
5.权利要求2的集成电路,其特征在于,所述接口进一步适合测试所述FPGA核心,所述微控制器响应于由所述接口接收的所述测试命令来测试所述FPGA核心;并且,其中,所述接口适合从所述处理器接收所述测试命令。
6.权利要求4的集成电路,其特征在于,所述微控制器按关于所述FPGA核心的特殊特点的预定测试序列来测试所述FPGA核心。
7.权利要求6的集成电路,其特征在于,所述FPGA核心具有分层结构,并且,所述预定测试序列对应于所述分层结构。
8.权利要求4的集成电路,其特征在于,进一步包括被耦合到所述FPGA核心的多个扫描链,用于将测试矢量引入所述FPGA核心,并用于响应于所述微控制器来从所述FPGA核心接收测试结果。
9.权利要求8的集成电路,其特征在于,根据所述FPGA核心的至少一个预定部分来安排所述扫描链,以便第一个扫描链将测试矢量引入所述部分,并且,第二个扫描链从所述部分接收所述测试矢量的测试结果。
10.权利要求8的集成电路,其特征在于,所述微控制器按预定序列将所述测试矢量引入所述FPGA核心,并通过所述扫描链从所述FPGA核心接收测试结果。
11.权利要求10的集成电路,其特征在于,所述FPGA核心具有分层结构,并且,所述预定序列对应于所述分层结构。
全文摘要
为“字段可编程门阵列”(FPGA)核心介绍一种接口结构,由此,FPGA核心(12)可以被嵌入集成电路,并可以容易地加以配置和测试,而无需关于该FPGA核心的详细的知识。被耦合到该FPGA核心的微控制器(16)具有一般指令集,该指令集提供对该FPGA核心内的所有资源的访问。这样,依据来自主机接口(20)的指令,允许为该FPGA核心执行高级服务(例如,配置装载、配置监控、内置自检、故障分析和调试器支持)。主机接口(20)(它为(例如)该微控制器修改来自处理器单元(10)的这些指令)提供可适应的缓冲器单元,以允许该FPGA核心被容易地嵌入不同的集成电路。
文档编号G01R31/3185GK1605058SQ02825008
公开日2005年4月6日 申请日期2002年10月12日 优先权日2001年10月16日
发明者D·王 申请人:捷豹逻辑股份有限公司