可编程逻辑设备上的错误检测的制作方法

文档序号:5860485阅读:258来源:国知局
专利名称:可编程逻辑设备上的错误检测的制作方法
对相关申请的引用本申请要求获得2001年10月11日提交的美国临时专利申请60/328668号的权利,这里通过引用将该临时申请全部包括进来。
背景技术
本发明涉及可编程逻辑设备。更具体地说,本发明涉及提供可编程逻辑设备上的错误检测。
可编程逻辑设备是一种通用集成电路,可以对这种电路进行编程以执行多种逻辑任务。众所周知的可编程逻辑设备的例子包括可编程逻辑器件(PLDs)和现场可编程门阵列(FPGAs)。在可编程逻辑设备上提供了存储器模块,可用来储存和输出数据,或是执行用户所需的各种功能。
数据可以被储存在存储器模块中作为可编程逻辑设备配置数据。当数据被写入存储器模块中或是在数据已经被储存在存储器模块中时,可编程逻辑设备配置数据的表示中可能会出现错误。这种错误包括硬错误和软错误。硬错误是由可编程逻辑设备中的缺陷或是由可编程逻辑设备受到的物理损伤引起的。软错误则是在可编程逻辑设备工作期间,如有一个阿尔法粒子或是宇宙射线击中了可编程逻辑设备的硅,造成电子-空穴对结构改变从而改变了存储单元的内容时出现的。由于可编程逻辑设备中含有大量的小容量存储节点,因此这些设备特别容易受到软错误的影响。一个软错误会直接影响可编程逻辑设备的逻辑功能,从而造成逻辑故障。目前,还没有可行的方法可用于检测可编程逻辑设备中的这类错误。
综上所述,我们迫切需要提供用于检测可编程逻辑设备中的错误的系统和方法。

发明内容
因此本发明的一个目标是要提供用于检测可编程逻辑设备中的错误的系统和方法。
根据本发明,提供了错误检测电路,它能检测可编程逻辑设备配置数据中的错误。在将数据写入可编程逻辑设备上的存储器之前或是当数据正在被写入可编程逻辑设备上的存储器时,可以通过一个控制表达式去除数据并取余数来算得一个校验和。该计算可以在软件中实现或是借助于错误检测电路实现。控制表达式可以是任意合适的数据表示法,包括多项式,比如32位循环冗余校验(CRC-32)、电器和电子工程师协会(IEEE)802标准。该校验和,也被称为期望值,可以被储存在可编程逻辑设备上任意合适的位置中(例如,在一个专用寄存器中),并且可以在错误检测过程中被取出。
用户可以初始化一个标志—比如寄存器中的一个专用比特—来表示错误检测的开始。在数据被写入存储器之后,该标志可以被设置,并通过一个有限状态机来激活错误检测,该有限状态机控制将可编程逻辑设备配置数据载入错误检测电路。当可编程逻辑设备配置数据被载入错误检测电路中时,错误检测电路开始使用与计算期望值时所用的控制表达式相同或等价的表达式、结合载入的数据计算校验和。当所有的可编程逻辑设备配置数据被载入以后,有限状态机控制将期望值载入错误检测电路。
在本发明的一个实施例中,计算出了可编程逻辑设备配置数据的校验和,并将该校验和与期望值进行比较。如果校验和与期望值满足某些预定的关系(比如说,校验和与期望值相等,校验和与期望值相差一个预定的偏差量或是倍数),那么就不会检测到错误。
在本发明的另一个实施例中,可编程逻辑设备配置数据首先被载入一个异或(XOR)树。在可编程逻辑设备配置数据被载入之后,接着将期望值载入XOR树。XOR树根据控制表达式对载入的数据与期望值计算一个校验和。如果校验和等于某个预定值(比如说,校验和是0,校验和是一个预定的偏差量),那么就不会检测到错误。错误检测电路产生的输出被送到可编程逻辑设备的一个输出管脚上,该管脚可由用户逻辑进行查看。


结合附图考虑下面的详细说明时,本发明的上述及其他目标以及优点会更加明显,附图中相同的附图标记指代类似的部件,其中图1示出了根据本发明一个实施例的带有错误检测电路的可编程逻辑设备的结构框图;图2示出了根据本发明另一个实施例的带有错误检测电路的可编程逻辑设备的结构框图;图3示出了图1中根据本发明一个实施例的带有错误检测电路的可编程逻辑设备的更详细的原理框图;图4示出了根据本发明一个实施例的向一个多输入XOR树中输入数据的示意图;图5示出了根据本发明一个实施例的可以被实现在错误检测电路中的一个示例性单输入XOR树的示意图;图6示出了根据本发明一个实施例的可以被实现在错误检测电路中的一个示例性多输入XOR树的示意图;图7示出了根据本发明一个实施例的展示了可编程逻辑设备配置数据是如何存储的结构框图;图8示出了根据本发明一个实施例的展示了可编程逻辑设备配置数据是如何存储的示意图;图9-15示出了根据本发明一个实施例的向错误检测电路载入可编程逻辑配置数据中所涉及的示例性步骤的流程图;图16示出了根据本发明一个实施例的在一个可编程逻辑设备上实现错误检测中所涉及的示例性步骤的流程图;以及图17示出了根据本发明一个实施例的一个使用了电路的示例性系统的简化框图。
具体实施例方式
本发明提供了用于检测可编程逻辑设备中错误的系统和方法。可编程逻辑设备包括例如可编程逻辑器件、现场可编程门阵列,或是任何其他合适的可编程装置。错误则包括软错误、硬错误,或是两者都有。错误可能归因于电压脉冲、系统故障、包括线上传输错误和硬件故障在内的其他外部影响,或是任何其他会影响可编程逻辑设备中数据表示的事件。
一个可编程逻辑设备保存有一些数据用来对可编程逻辑设备进行编程,以实现一种或多种应用。这种数据在这里被称为可编程逻辑设备配置数据。可编程逻辑设备配置数据被表示为一组二进制数(也就是,二进制“1”和“0”),并且可以被储存在任何合适的存储器中,比如一个配置随机存取存储器(CRAM)。另外,可编程逻辑设备配置数据也可以被储存在任何其他合适的易失性或非易失性存储器中,包括例如静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、Rambus DRAM(RDRAM)、同步DRAM(SDRAM)、双倍数据率同步DRAM(DDR SDRAM)、可擦除可编程只读存储器(EPROM)、FLASH存储器,以及磁性RAM(MRAM)。
储存在存储器中的可编程逻辑设备配置数据可能与一个或多个应用相关联。举例来说,一些可编程逻辑设备配置数据可能被用来规定可编程逻辑设备中的可编程部件应该被如何设置(也就是实现某具体应用)。可编程逻辑设备配置数据中的一些二进制数位可以被用来表示数据(例如,一个控制表达式,一个期望值)。可编程逻辑设备配置数据的其他二进制数位可以被用作可编程逻辑设备所实现的一种应用的实时操作的一部分(比如说,如果应用指定了存储器的读写)。可编程逻辑设备配置数据可能被改变,使得某些二进制数位被错误地表示出来(比如说,原来是二进制“1”的一个二进制数位现在成了二进制“0”,反之亦然)。本发明提供了一种方法来检测这种错误。
这里主要根据循环冗余校验(CRC)校验和分析以检测可编程逻辑设备中错误的方法来讨论本发明,使说明具体和清晰,但是也可以使用任何其他合适的方法来检测可编程逻辑设备中的错误。在CRC校验和分析中,计算出一个校验和。该校验和可能是,例如从涉及数据与一个控制表达式的除法操作中得出的一个余数。另外,还可以利用任何其他合适的操作或是操作组合计算出校验和。控制表达式可以是任何合适的数据表示,该数据表示是被用来为可编程逻辑设备配置数据计算期望值的。
期望值是从某种操作中得到的校验和,在这种操作中,待写入的数据或是正在被写入可编程逻辑设备的数据以及控制表达式都是操作对象。这个期望值可以是用户定义的或是任何其他合适的实体。期望值可以被储存在可编程逻辑设备的一个寄存器或是存储器中,或是储存在任何其他合适的位置。
在一个实施例中,根据可编程逻辑设备配置数据计算出一个校验和,并将其与期望值对比。如果校验和与期望值满足某种预定的关系(比如说,校验和与期望值相等,校验和与期望值相差一个预定的偏差量或是倍数),那么就不会检测到错误。
在本发明的另一个实施例中,可编程逻辑设备配置数据首先被载入一个异或(XOR)树。在可编程逻辑设备配置数据被载入之后,接着将期望值载入XOR树。XOR树根据控制表达式对载入的数据与期望值计算一个校验和。如果校验和等于某个预定值(比如说,校验和是0,校验和是一个预定的偏差量),那么就不会检测到错误。
错误检测电路产生的输出被送到可编程逻辑设备的一个输出管脚上,该管脚可由用户逻辑进行查看。如果检测到了错误,那么可编程逻辑设备的用户有机会重新载入全部的或部分可编程逻辑设备配置数据,或是响应于错误检测来执行任何其他合适的操作。
可以使用一个CRC模块来执行CRC校验和分析。CRC模块可以用任何合适的结构来实现。举例来说,在一个实施例中,CRC模块可能是驻留在可编程逻辑设备上的硬线电路。在另一个实施例中,CRC模块可能被编程到一个可编程逻辑设备中。在另一个实施例中,CRC模块可能被实现为可编程逻辑设备外部的一个单独装置,在这种情况下,可以利用例如输入/输出(I/O)管脚将CRC模块连接到可编程逻辑设备上。在另一个实施例中,CRC模块可能被实现在软件中,该软件由一个微处理器(比如说在一台计算机上)执行。任何这种实施方式都可以依照本发明进行使用。为了简洁而又不产生局限性,这里主要按照布线在可编程逻辑设备上的CRC模块来说明本发明。
实现可编程逻辑设备上的错误检测可能还需要额外的信号、寄存器以及控制逻辑,下面将结合附图1-3对此进行详细说明。例如,某个特定寄存器中的一个数据比特可能被标记来指示错误检测的开始。可能还需要额外的信号来设置错误检测电路,包括例如用来清除寄存器的信号、预置计数器的信号、使能及禁用各种控制信号的信号。可能还需要额外的寄存器,包括例如一个地址寄存器用来索引可编程逻辑设备配置数据中的一个帧,以及一个数据寄存器用来在数据被载入错误检测电路之前临时储存索引帧。
在一种合适的方法中,可以使用一个有限状态机(FSM)来处理CRC模块与可编程逻辑设备之间的数据通信。更具体地说,FSM控制将CRAM中的数据载入并传送给CRC模块。另外,FSM也可以控制将CRAM中的数据载入并传送给一个临时数据寄存器,接着再从数据寄存器送入CRC模块。CRC模块中包括一个子模块,用来对可编程逻辑设备数据计算校验和,在某些例子中还要计算期望值。该子模块可以是用来执行校验和分析的任意合适的电路,它使用例如一个标准多项式(比如说,CRC-32 IEEE 802标准)、数据和,或是任何其他合适的数据表示来进行校验和分析。
计算得出的校验和接着就被送到比较电路,在比较电路中将校验和与期望值、或是任何合适的预定值进行比较。比较电路可以用一个比较器、一个OR门、一个XOR门或是任何合适的逻辑门或逻辑门的组合来实现。
图1示出了一个示例性可编程逻辑设备100的结构框图,该设备具有一个期望值102、可编程逻辑设备配置数据104、一个有限状态机(FSM)108以及一个CRC模块116。期望值102可以被储存在可编程逻辑设备100上的一个寄存器或是存储器中。可编程逻辑设备配置数据104可以被储存在可编程逻辑设备100上任何合适的存储器中,例如配置随机存取存储器(CRAM)。可编程逻辑设备配置数据104通过一条数据通路112向CRC模块116发送数据。通路112可以是用于串行、并行或是以两者组合方式传输数据的任何合适的通路。
FSM 108可以被用来控制CRC模块116与可编程逻辑设备100之间的数据通信。FSM 108发现错误检测启动之后,会生成并通过通路106发送一个时钟信号以及其他信号给可编程逻辑设备配置数据104,以便控制通过通路112向CRC模块116载入数据104。FSM108可以通过通路114来控制CRC模块116中的错误检测分析。通路106、112和114可以是用于发送数据和各种信号如时钟、预置信号或标志的任何合适的通路。
数据通路106、112和114可能是直接连接、可能包括中间电路,或是两者都有。这种中间电路可能包括例如寄存器、流水线电路、多路复用器或是任何其他合适的电路,这些电路允许各种信号在适当的时刻被声明/取消声明、使能/禁用、或同时进行两种操作,以便协调数据的载入与校验和的计算。
图2示出了一个示例性可编程逻辑设备200的结构框图,该设备在可编程逻辑设备配置数据104、FSM 108以及CRC模块116之间的通路中带有中间电路202。应该明白,这里所示出的用来辅助组件之间通信的通路都可以含有任何合适的中间电路。
参照图1,CRC模块116包括校验和计算电路118和比较电路122。校验和计算电路118通过通路112接收可编程逻辑设备配置数据104。校验和计算电路118对可编程逻辑设备配置数据计算一个校验和,该校验和可以被使用在CRC校验和分析中。可以使用任何合适的方法来对可编程逻辑设备配置数据104计算校验和。举例来说,可以用一个控制表达式来计算校验和,该控制表达式可以用以下CRC-32 IEEE 802标准这样的多项式来表示G(X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1(1)在一个实施例中,可以利用控制表达式(1)对数据(比如说,可编程逻辑设备配置数据104)取模(mod)来算得一个校验和,该校验和是用数据除以控制表达式后得到的余数。在另一个实施例中,在对数据执行取模操作前,先对数据进行乘法或移位操作。应该明白,任何其他合适的控制表达式都可以依照本发明被用来生成校验和。
当可编程逻辑设备数据104被载入CRC模块116后,期望值102也被载入CRC模块116。可以从任何合适的来源取得期望值102。在一个实施例中,可以在向可编程逻辑设备100中写入数据的时候用软件计算出期望值。在另一个实施例中,可以在向可编程逻辑设备100中写入数据的时候用CRC模块116计算出期望值。举例来说,在数据被写入可编程逻辑设备100的时候,该数据同时也被发送给CRC模块116,在CRC模块116中计算出期望值。最好用和在CRC模块116中计算校验和所用的相同的校验和计算方法计算出期望值。
在本发明的一个实施例中,可编程逻辑设备配置数据104可以被送入校验和计算电路118,以产生一个校验和。计算得到的这个校验和经数据通路120被送入比较电路122。期望值102也被送到比较电路122。在比较电路122中,使用任意合适的逻辑门或是逻辑门组合(比如说,一个比较器,一个XOR门,一个减法器)来比较计算出的校验和与期望值102。如果校验和与期望值102满足某种预定的关系(比如说,校验和与期望值102相等,校验和与期望值相差一个预定的偏差量或是倍数),那么比较电路122就会产生一个表示没有检测到错误的输出(比如说,一个二进制“0”)。但是,如果校验和与期望值102不满足这种预定的关系(比如说,校验和与期望值102不相等,校验和与期望值102相差一个不同的偏差量),那么比较电路122就会产生一个不同的输出(比如说,一个二进制“1”)来表示已经检测到了一个错误。比较电路122的输出通过通路124被发送到CRC错误管脚126。CRC错误管脚126可以被用户访问,以查看可编程逻辑设备配置数据104中是否存在错误。
在本发明的另一个实施例中,可编程逻辑设备配置数据104和期望值102都被发送给校验和计算电路118来计算一个校验和。举例来说,可编程逻辑设备配置数据被乘以或是移位若干个比特,比特数等于控制表达式的次数(比如说,对于CRC-32 IEEE 802标准来说,次数就是最高阶单项式的指数32)。期望值102(用同样的计算方法计算得到)可以被附加在可编程逻辑设备配置数据104的最后(也就是说,代表了期望值102的比特可以被附加在代表可编程逻辑设备配置数据104的比特之后)并通过校验和计算电路118发送。
计算出来的校验和接着通过数据通路120被送到比较电路122。在比较电路122中,可以使用例如一个逻辑门或是逻辑门组合(比如说,一个比较器,一个OR门,一个加法器,等等)来对计算出的校验和进行逻辑操作。如果校验和等于某个预定值(比如说,校验和是0,校验和是一个预定的偏差量),那么比较电路122就会产生一个表示没有检测到错误的输出(比如说,一个二进制“0”)。但是,如果校验和是预定值以外的其他值(比如说,校验和不等于0,校验和不同于预定的偏差量),那么比较电路122就会产生一个不同的输出(比如说,一个二进制“1”)来表示检测到了一个错误。比较电路122可以产生任意合适的输出来表示是否检测到了错误。这个输出会通过通路124被送给CRC错误引脚126。
图3示出了一个示例性可编程逻辑设备300的结构框图。CRC模块320可能包括多路复用器322和332、一个XOR树324、寄存器326、328、330和334,以及一个或多个逻辑门,如OR门336。可编程逻辑设备配置数据104和期望值102可以被输入到多路复用器322中。多路复用器根据一个选择信号的值选择一个输入送到它的输出端,该选择信号是由FSM 108监控的。举例来说,FSM 108可以设置选择信号为第一二进制比特(比如说,一个二进制“0”),该信号指示多路复用器322选择第一个输入端发送给输出端,该输入端通过通路112接收可编程逻辑设备配置数据104。当可编程逻辑设备配置数据104被发送到输出端之后,FSM 108可以设置选择信号为第二二进制比特(比如说,一个二进制“1”),该信号指示多路复用器322选择第二个输入端发送给输出端,该输入端通过通路110接收期望值102。多路复用器322的输出被送往XOR树324,在那里计算出校验和。
在一个实施例中,XOR树324可以利用一个控制表达式如表达式(1)中的CRC-32 IEEE 802标准来计算校验和。尽管可以使用任何合适的控制表达式来计算期望值102,但最好用(与计算校验和所用的)一样的或等价的控制表达式。XOR树324接收到可编程逻辑设备配置数据104和随后的期望值102后,就会处理载入的数据。XOR树324的输出端连接到寄存器326上,寄存器中的数据可以在下一个周期中被发回XOR树324进行进一步处理。寄存器326可以是锁存器、触发器(比如说,D触发器,J-K触发器),或是任何由时钟机制控制的合适的存储装置。XOR树324和寄存器326可以构成校验和计算电路118的一部分。
数据可以通过多路复用器322发送,并被串行、并行或以两者相结合的方式载入XOR树324。在一个实施例中,每个时钟周期内都会向XOR树324载入一个数据比特并进行处理。在另一个实施例中,每个时钟周期内会向XOR树324载入多个(比如说,2、8、16)数据比特并进行处理。
图4示出了作为输入402而被送入XOR树324的数据序列。可编程逻辑设备配置数据104可以被划分为多个帧(比如说,M帧)406。数据104一次被载入一帧(比如说,帧1、帧2、...、帧M)。在各个帧406中,一次被载入多个比特(比如说,N比特)404。数据可以从最重要的比特到最次要的比特依次被载入。在每个时钟周期里,各个比特404通过不同的数据通路(比如说,I1、I2、...、IN)402被送入XOR树324。在数据104被载入之后,以相似的方式将期望值载入XOR树324。如果总比特数(比如说,配置数据104和期望值102的总比特数)不是输入(N)402的数量的倍数,那么就要向数据序列添加额外的比特(比如说,二进制的“1”或“0”)。这些额外的比特可以被添加到数据序列的头部、数据序列的尾部,或是任何合适的位置。
XOR树324和寄存器326可以用下列矩阵方程实现Q=A*q+B*IN(2)一个矩阵中包含了按一行或多行及一列或多列形式排列的数据,其表示方法如下XRxC=(1,1)(1,2)...(1,C)(2,1)...............(R,1)..(R,C)---(3)]]>其中R表示行数,C表示列数。
“A”是一个d×d的矩阵,它代表了寄存器326和控制表达式,其中d是控制表达式最高次单项式的阶数。“q”是一个d×1的矩阵,它代表了当前储存在寄存器326中的来自于前一个时钟周期的内容。“B”是一个d×1的矩阵,它代表了控制表达式中各个单项式的系数。“IN”是一个代表输入比特402的常数。“Q”是一个d×1的矩阵,它代表XOR树324在下一个周期中的输出(比如说,用上一个时钟周期储存在寄存器326中的内容去处理输入比特402而得到的结果)。
根据矩阵方程(2),每个时钟周期内用于处理N个输入比特的方程如下
1inputQ1=Aq+BI1(4)2inputsQ2=A2q+ABI1+BI2(5)3inputsQ3=A3q+A2BI1+ABI2+BI3(6)NinputsQN=ANq+AN-1BI1+...+ABIN-1+BIN(7)图5示出了一个电路500的示例性实施例,该电路包括XOR树324和寄存器326(比如说,校验和计算电路118)。电路500每时钟周期处理一个输入比特(比如说,I1)。作为示例,控制表达式由下式表示G(X)=X5+X3+1 (8)因为表达式(8)中G(X)的阶数是5,所以有5个寄存器326被用来储存XOR树324的输出。电路500的输出由方程4表示,该方程中的矩阵如下A=0000110000010000010100010---(9)]]>q=q1q2q3q4q5---(10)]]>B=10010---(11)]]>“A”是一个5×5的矩阵,它的前4列代表寄存器326,最后一列代表控制表达式(8)中单项式的系数。“q”是一个5×1的矩阵,它代表了寄存器326中的内容(比如说,q1、q2、q3、q4、q5分别代表寄存器510、520、530、540和550的内容)。“B”是一个5×1的矩阵,它代表了控制表达式(8)中单项式的系数。将表达式(9)、(10)、(11)代入方程(3),产生如下输出
Q1=q5+I1q1q2q3+q5+I1q4---(12)]]>Q1是一个5×1的矩阵,它代表了寄存器326在下一个周期中的内容,即q5+I1,q1,q2,q3+q5+I1和q4。Q1的输出是二进制的(比如说,“0”或是“1”)并且可以用XOR门实现。
电路500包括XOR门502和504以及寄存器510、520、530、540和550,这些寄存器可以是寄存器326的一部分,它们受同一个时钟的控制。寄存器510的输入是XOR门502的输出,而XOR门502的输入是I1(来自多路复用器322的输出)和寄存器550当前的内容。在下一个周期中,寄存器510的内容是Q1(1,1)=q5+I1。寄存器520的输入是寄存器510当前的内容,因此在下一个周期中,寄存器520的内容是Q1(2,1)=q1。寄存器530的输入是寄存器520当前的内容,因此在下一个周期中,寄存器530的内容是Q1(3,1)=q2。寄存器540的输入是XOR门504的输出,而XOR门504的输入则是I1以及寄存器530和550当前的内容。XOR门504可以用一个3输入XOR门或是两个2输入XOR门来实现,其中的两个输入通过一个第一XOR门发送,而第一XOR门的输出以及第三个输入通过一个第二XOR门发送。在下一个周期中,寄存器540的内容是Q1(4,1)=q3+q5+I1。寄存器550的输入是寄存器540的当前内容,因此在下一个周期中,寄存器550的内容是Q1(5,1)=q4。尽管寄存器510、520、530、540和550的内容未示出,但它们也被作为输入发送给信号特征寄存器328。
图6示出了电路600的另一个示例性实施例,其中包括XOR树324和寄存器326。电路600使用相同的控制表达式(8),它在每个周期中处理三个输入比特(比如说,I1、I2、I3)。将表达式(9)、(10)、(11)代入方程(5)得到下列输出
Q3=q3+q5+I1+I3q4+I2q5+I1q1+q3+q5+I1+I3q2+q4+I2---(13)]]>电路600包括XOR门602、604、606、608和610,以及寄存器620、630、640、650和660,这些寄存器可以是寄存器326的一部分,受同一个时钟的控制。寄存器620的输入是XOR门602的输出,而XOR门602的输入是I1和I3(都来自多路复用器322的输出)以及寄存器640和660的当前内容。在下一个周期中,寄存器620的内容是Q3(1,1)=q3+q5+I1+I3。寄存器630的输入是XOR门604的输出,而XOR门604的输入是I2(来自多路复用器322的输出)以及寄存器650的当前内容。在下一个周期中,寄存器630的内容是Q3(2,1)=q4+I2。寄存器640的输入是XOR门606的输出,而XOR门606的输入是I1以及寄存器660的当前内容。在下一个周期中,寄存器640的内容是Q3(3,1)=q5+I1。寄存器650的输入是XOR门608的输出,而XOR门608的输入是I1、I3以及寄存器620、640和660的当前内容。在下一个周期中,寄存器650的内容是Q3(4,1)=q1+q3+q5+I1+I3。寄存器660的输入是XOR门610的输出,而XOR门610的输入是I2以及寄存器630和650的当前内容。在下一个周期中,寄存器660的内容是Q3(5,1)=q2+q4+I2。XOR门602、608和610可以用任何合适的XOR门或XOR门的组合来实现。尽管寄存器620、630、640、650和660的内容未示出,但它们也被作为输入发送给信号特征寄存器328。
以上是在根据控制表达式(8)来实现校验和计算的情况下对电路500和600进行说明的,这两个电路在每个时钟周期分别取入1比特和3比特作为输入,这里仅仅是为了举例的目的来说明这两个电路的。然而,XOR树324可以用任何合适的控制表达式(比如说,CRC-32 IEEE 802标准)来实现,每个时钟周期也可以有任意合适数量的输入比特。
当数据被作为输入402送往XOR树324时,寄存器326的内容就被更新。当可编程逻辑设备配置数据104和期望值102被处理以后,寄存器326的内容就保存了所得到的校验和。在一个实施例中,如果不存在错误,得到的校验和就是0,如以下证明所示。
令变量G(X)、M(X)、Q(X)、EV以及μ(X)代表下列各式G(X)=CRC-32 IEEE 802标准;M(X)=可编程逻辑设备配置数据104;Q(X)=商=M(X)/G(X);EV=期望值=M(X)(mod)G(X);μV=作为输入402发送的数据。(14)在对M(X)执行校验和计算以计算期望值的时候,得出下式X32M(X)≡EV(mod)G(X)(15)符号“≡”表示恒等,并且涉及与EV(mod)G(X)等价的一类余项(其中EV是该类中最小的成员)。M(X)如下定义X32M(X)≡Q(X)G(X)+EV(16)XOR树324的输入402可以被如下表示μ(X)=X32M(X)+EV (17)M(X)被乘以或是移位一个偏移量X32(也就是控制表达式G(X)的阶数),同时将期望值添加到M(X)中。对方程(17)进行代数运算,我们得到以下结论1.两边同时乘以X32X32μ(X)=X32[X32M(X)+EV]2.用方程(16)替代X32M(X)X32μ(X)=X32[Q(X)G(X)+EV+EV]3.以恒等形式写出X32μ(X)≡X32[EV+EV]≡2EV≡0(18)X32Q(X)G(X)项是((mod)G(X))的倍数,因此在恒等式中不存在。取2EV的XOR在二进制中恒等于零(也就是说,2输入XOR门在两个输入为相等值的情况下输出为零)。
以下是一个简化的例子,它演示了XOR树324和寄存器326的一个实施例是如何工作的。假定要写入可编程逻辑设备的数据中包含数据比特序列b110110001,该序列可以被表示为以下的多项式M(X)=X8+X7+X5+X4+1 (19)再假定控制表达式为数据比特序列b101001,它代表了控制表达式(8)。在将数据M(X)写入可编程逻辑设备之前,要计算出期望值。期望值(EV)是用数据M(X)除以控制表达式G(X)所得到的余数,计算中使用了与在XOR树324中计算校验和所用的相同方法。
EV=X5M(X)(mod)G(X)=X3+X2(20)(也就是,b10111)。因为XOR树324按控制表达式的阶数对可编程逻辑设备配置数据104进行相乘或移位,并将期望值102附到可编程逻辑配置数据104以计算校验和,因此数据M(X)同样被乘以或移位该阶数,以便计算出期望值102。
当数据被作为可编程逻辑设备配置数据104写入以后,可以置起一个标志来表示错误检测的开始。以下示出了处理没被改变过的可编程逻辑设备配置数据104的一个例子(也就是说,没有错误)。
P(X)=M(X) (21)被写入的该数据被送入XOR树324,在后面将结合图7-15对此进行详细说明。当写入的数据被载入XOR树324以后,期望值也如下被载入XOR树324X5P(X)+EV=X13+X12+X10+X9+X5+X3+X2=b11011000101100 (22)用表达式(22)除以控制表达式G(X)所得的余数是0,这正是我们所期望的,因为没有错误发生。
(X5P(X)+EV)(mod)G(X)=b0(23)如果XOR树324每时钟周期接收一个输入(比如说,I1),那么XOR树324将被实现为图5中所示的形式(对于控制表达式(8))。表1示出了在电路500计算校验和的时候,寄存器510、520、530、540和550的内容。

表1电路500的输出为0。
如果XOR树324每时钟周期接收3个输入(比如说,I1、I2、I3),那么XOR树324将被实现为图6中所示的形式(对于控制表达式(8))。因为发给XOR树324的总比特数不是每时钟周期发送给XOR树324的输入比特数(比如说,3),所以要在数据流的头部填充额外的比特(比如说,二进制“0”)。表2示出了在电路600计算校验和的时候,寄存器620、630、640、650和660的内容。

表2电路600的输出为0。
以下是对已经被改变过的可编程逻辑设备配置数据104(也就是说,有错误的)进行处理的示例。
P(X)=X8+X7+X5+1(24)P(X)中有一个比特被取反了。写入的数据以及期望值都如下被载入XOR树324中X5P(X)+EV=X13+X12+X10+X5+X3+X2=b11010000101100 (25)用多项式(25)除以控制表达式(8)所得的余数不是0,表示有错误发生。
(X5P(X)+EV)%G(X)=b11101 (26)表3示出了在电路600计算校验和的时候,寄存器620、630、640、650和660的内容。

表3寄存器620、630、640、650和660的输出中有一些不为0,表示有错误。
参照图3,在每个时钟周期后,寄存器326的内容被送入信号特征寄存器328。当可编程逻辑设备配置数据104以及期望值102在XOR树324中经过处理以后,信号特征寄存器就保存了算得的校验和。因为信号特征寄存器328的内容在每个时钟周期内都会被更新,所以FSM 108会控制更新寄存器330在信号特征寄存器328的内容有效的情况下(也就是说,当算得的校验和被储存到信号特征寄存器328中之后)保存其中的内容。
用户可以查看计算得到的校验和或是期望值102。通过监测计算得到的校验和,用户能够确定任何检测到的错误的特性。举例来说,用户可以确定错误是否是随机的(比如说,多次计算产生不同的校验和)或者相同的错误是否会重复出现(比如说,多次计算产生相同的校验和)。
用户可以利用任何合适的方法来查看计算得到的校验和或是期望值102。在一个实施例中,每个多路复用器332从更新寄存器330中取一个比特再从期望值102中取一个比特作为输入。根据用户想要查看哪个值,FSM 108能控制多路复用器332从更新寄存器330或是期望值102中选取数据。各个多路复用器332的输出被送入移位寄存器334。移位寄存器334可以被可编程逻辑设备300访问,而且允许它的内容被用户逻辑读取。
在从移位寄存器334中读取数据的时候,可能会发生错误而影响算得的校验和。在一种更为精确的检测错误的方法中,一旦算得的校验和储存到了信号特征寄存器328中,就要把信号特征寄存器328中的每个比特发送到一个OR门336的单独输入端。OR门336可能包括一个带有与信号特征寄存器比特数相等数量输入端的门,或是包括一组级联的门,其中每个门带有较少数量的输入端,或是任何其他用于比较信号特征寄存器比特的合适方法。如果所有的信号特征寄存器比特都是二进制“0”,那么OR门336的输出就是二进制“0”,表示没有检测到错误。如果一个或多个信号特征寄存器比特是二进制“1”,那么OR门336的输出就是二进制“1”,表示检测到了错误。OR门336的输出被发送到CRC错误引脚338,该引脚可以由用户逻辑进行监测。CRC错误引脚338能保存一个数据比特,该数据比特的一个值表示没有检测到错误,而另一个值则表示检测到了错误。另外,CRC错误引脚338也可以是一个指示器,例如,一个发光二极管(LED),它能在检测到错误的时候发出信号(比如说,点亮LED)。任何其他合适的方法都可以被用来指示错误。
FSM 108发送信号给CRC模块320中的各种寄存器,以协助对信号进行采样。举例来说,当XOR树324完成处理并且信号特征寄存器328中保存了校验和之后,FSM 108向更新寄存器330发送一个时钟使能信号。该时钟使能信号使得更新寄存器330不会在信号特征寄存器328从寄存器326读取数据的同时读取信号特征寄存器328的内容。只有当用户请求查看校验和或是期望值102的时候,数据才会通过多路复用器332被发送给移位寄存器334。
图7示出了符合本发明的可编程逻辑设备中的一个存储器内核700。存储器内核700包括一个地址寄存器706、一个控制逻辑712、可编程逻辑设备配置数据714,以及一个数据寄存器722。数据714可以被放置在一个阵列中,该阵列包括数据单元716的行与列,其中每个数据单元716中含有一个二进制数。对于被放置在阵列中的数据714来说,一条数据线718可以与各行单元716相连,而一条地址线720则可以与各列单元716相连。
可编程逻辑设备配置数据714可以被组织成任意合适的结构,而且可以用任何合适的结构将它的数据单元716与数据线和地址线相连。为了表达的简单清楚,这里主要把数据714描述为数据单元716的一个阵列,数据线718穿过数据单元716的各行,而地址线720穿过数据单元716的各列,从而保证了特殊性与明确性。
地址寄存器706可以被用来选取一条地址线720,用于载入相应的一列数据单元716。每一列单元716可能代表一个帧,并且与地址寄存器706中一个不同的地址比特相关联。地址寄存器706可能含有与帧数相等数量的比特,其中地址寄存器706的每个比特对应于一条地址线720。
地址寄存器706有两个输入信号一个地址寄存器输入(AINPUT)信号702和一个地址寄存器时钟(ACLOCK)信号704。输入信号702可以由地址寄存器时钟信号704用一个第一脉冲进行声明(比如说,设置成二进制“1”),从而使得地址寄存器706中的一个第一比特位置—它对应于第一帧—被设置为二进制“1”。当地址寄存器时钟信号704的第一个脉冲过去后,输入信号702可以被取消声明(比如说,设置成二进制“0”)。随着地址寄存器时钟信号704接下来的各个脉冲,地址寄存器706中的二进制“1”被移位一个比特,以便指向下一个帧。地址寄存器706的输出通过数据通路708被发送给控制逻辑712。控制逻辑712由一个地址使能(AENABLE)信号710控制,该使能信号允许在适当的时刻选取一条地址线720。
当一个帧被选取后,储存在被选取的数据单元716中的二进制数被写到相应的数据线718上,当数据寄存器时钟(DCLOCK)信号724发出脉冲时,数据线上的数据就被载入数据寄存器722中。数据寄存器722可以是一个专用寄存器,仅在载入帧的时候才被用到,或者也可以是一个共享寄存器,在不同时刻用作不同的功能(比如说,数据寄存器722可以是在把可编程逻辑设备配置数据714写入可编程逻辑设备时所用的同一个寄存器)。数据寄存器722中的内容相继通过数据通路726被载入错误检测电路。
图8示出了符合本发明一个实施例的可编程逻辑设备中的一个更详细的存储器内核800。存储器内核800包括一个地址寄存器806,该寄存器带有下列输入端地址寄存器输入(AINPUT)信号802以及地址寄存器时钟(ACLOCK)信号804。地址寄存器806中的每个比特位沿通路808向一个输入AND门812发送它的比特值,输入AND门812可以是控制逻辑712的一部分。各个AND门812的第二个输入是地址使能信号810。当两个输入都是二进制“1”时,输出就是二进制“1”。各个AND门812的输出沿一条相应的地址线826送出。因为在每个周期里,地址寄存器806中至多只有一个比特值被置为二进制“1”,因此在任何一个时钟周期中最多只有一条地址线被激活。连接到各条地址线826上的是一帧数据单元814,数据单元814可以是,例如,配置随机存取存储器(CRAM)单元,或是任何其他合适的存储器单元。连接到各条数据线824上的是一行数据单元814。
每个CRAM单元814包括,例如,两个晶体管816和822,以及两个反向器818和820。晶体管816和822可以是任何合适的晶体管,包括双极结型晶体管(BJTs)、场效应晶体管(FETS),以及金属氧化物半导体场效应晶体管(MOSFETS)。举例来说,晶体管816可以是一个MOSFET,它的源极连接到一条相应的数据线824,门极连接到一条相应的地址线826,漏极则连接到反向器818和820。反向器818和820的输入分别被连接到其他反向器820和818的输出。举例来说,晶体管822可以是一个MOSFET,它的源极连接到反向器818和820,门极连接到一个清除(CLR)信号,漏极则连接到一个共用接地点。清除信号可以被用来向单元814写入数据比特,但通常不用来读取数据比特。
各个数据单元814中的二进制数被表示在节点A上。当一条数据线824被置为二进制“1”(也就是说,被预先充电到一个预定的电压)并且一条地址线826也被置为二进制“1”时,相应的CRAM单元814中的值就被读取出来。如果节点A表示一个二进制“1”,那么那条数据线824就被放电(也就是说,被改变为二进制“0”)。如果节点A表示一个二进制“0”,那么那条数据线824就保持预充电(也就是说,置为二进制“1”)。当数据寄存器时钟(DCLOCK)信号830发出脉冲时,读到各条数据线824上的值被发送给数据寄存器828。一个反向器可以被连接到各条数据线824上,以便在数据被送往数据寄存器828之前将数据的二进制表示反向。可以通过数据通路832从数据寄存器828中读取数据。数据通路832可以是任何用于传输数据的合适路径,包括串行总线、并行总线,或是两者的组合形式。数据寄存器828的全部内容或是数据的一个子集(比如说,1数据比特,8数据比特,16数据比特,32数据比特)可以在一个给定的周期中被发送到通路832。
图9-15示出了向错误检测电路如CRC模块320载入数据的示例性步骤的流程图。每个帧可以包含一列数据比特、一行数据比特、一块数据比特,或是任何其他合适的结构形式的数据比特,但是这里为了清楚和特定起见,主要按一列数据比特的情况加以说明。地址寄存器中的一个地址比特可以与每个帧相关联,使得当一个特定的地址比特被置起时(比如说,被置为二进制“1”),相应的帧被选取。储存在存储器—例如CRAM中的可编程逻辑设备配置数据104可以一次被读取一帧,并被保存在一个临时数据寄存器中,该临时寄存器中的数据接着会被载入CRC模块320。
流程900从处于闲置状态的步骤910开始。然后,在步骤920处,流程900判定错误检测是否已经开始,这可以由一个标志来表示。当一个需要访问CRAM中的数据的应用程序(比如说,一个错误检测应用程序或是任何其他合适的应用程序)要运行时,该标志可以被置起。可以在系统处于用户模式当中时,通过将寄存器中的一个专用比特声明为二进制“1”来表示这种情况。如果该标志没有被置起,那么流程900仍停留在步骤920。如果该标志被置起了,那么流程900就会前进到步骤1000,在步骤1000中,流程900准备将第一帧载入数据寄存器中。
图10示出了步骤1000的详细流程图。在步骤1002中,CRC模块320被预先设置。举例来说,计数器被复位为0,并且寄存器(比如说,寄存器326,信号特征寄存器328,更新寄存器330以及移位寄存器334)被清空。在步骤1002中,一个地址寄存器时钟被使能(比如说,ACLOCK信号704发出脉冲),一个地址寄存器输入被声明(比如说,AINPUT信号702被置为二进制“1”),并且一个预充电计数器被使能(比如说,PCOUNTER被激活)。预充电计数器指示了数据线718在何时被充分预充电到了某个预定的电压(比如说,一个源电压)。
接着,在步骤1004中,所有的数据线618都被预充电。同样在步骤1004,地址寄存器时钟信号704被禁用,并且地址寄存器输入信号702被取消声明。在步骤1006中,流程1000判定预充电计数器是否已经被置为二进制“1”。当数据线718已经被充分预充电的时候(比如说,在16个周期之后),预充电计数器就被置为二进制“1”。如果预充电计数器保持二进制“0”,那么流程1000就返回步骤1004。
如果预充电计数器被置为二进制“1”,那么流程1000就前进到步骤1008,在步骤1008中,数据线预充电被关闭,预充电计数器被禁用,并且一个读取计数器被使能(比如说,RCOUNTER被激活)。读取计数器指示了对应于一个被选取地址的数据何时被完全读取到相应的数据线718上(比如说,在16个周期之后)。
在步骤1010中,对应于第一帧(比如说,对应于地址线1的第一列数据单元716)的地址线被使能(比如说,AENABLE信号710被置为二进制“1”),并且相应的单元内容被读取到相应的数据线718上。在步骤1012中,流程1000判定读取计数器是否已经被置为二进制“1”。如果读取计数器仍然是二进制“0”,那么流程1000就返回步骤1010,在步骤1010中,地址使能信号710保持使能并且数据继续被读取到数据线718上。举例来说,对于图8中所示的CRAM数据单元来说,如果一个二进制“0”被表示在一个CRAM数据单元814中(比如说,在节点A上),那么相应的数据线824就会保持预充电状态。如果一个二进制“1”被表示在一个CRAM数据单元814中,那么相应的数据线824就会被放电。为了确保数据线824被充分放电到0伏特,数据在多个周期内被读取到数据线824上(比如说,在16个周期内)。如果读取计数器被置为二进制“1”,那么流程1000就前进到步骤1014,在步骤1014中,读取计数器被禁用,并且数据寄存器时钟被使能(比如说,DCLOCK信号724被激活)。
重新参照图9,当第一帧已经被载入数据寄存器722后,流程900前进到步骤1100,在步骤1100中,除了最后一帧以外的所有帧都被载入数据寄存器722。
图11-12是一组流程图,它们更详细地示出了在步骤1100中向CRC模块320载入帧的过程。在步骤1102中,来自第一帧的数据当前正处在数据线718上,它被载入数据寄存器722。同样在步骤1102中,地址使能信号710被禁用,CRC模块320被使能,并且一个数据寄存器计数器也被使能(比如说,DCOUNTER被激活)。数据寄存器计数器指示了数据寄存器722中预定数量的数据比特何时已经被载入CRC模块320中(比如说,在何时除了剩余比特之外的所有比特,比如说34比特,已经都被载入了)。这个预定的数量可以是任何合适的数量,并配合各种被使能和声明的信号,以便向数据寄存器722载入各个帧,随后再载入CRC模块320。
在步骤1104中,来自第一帧的数据当前被储存在数据寄存器722中,它被载入CRC模块320中(比如说,被发送到多路复用器322,接着被送到XOR树324以开始计算校验和)。预定数量的比特(比如说,8比特,16比特,或是任何其他合适数量的比特)在每个时钟周期中被从数据寄存器722发送到CRC模块320。接着,在步骤1106中,流程1000判定数据寄存器计数器是否被置为二进制“1”。如果数据寄存器计数器为二进制“0”,那么流程1100就返回到步骤1104,在步骤1104中,下一组预定数量的比特被载入到CRC模块320。
如果数据寄存器计数器被置为二进制“1”,那么流程1100就前进到步骤1108,在步骤1108中,数据寄存器计数器被禁用,并且地址寄存器时钟信号704被使能,预充电计数器也被使能(比如说,被复位到二进制“0”并激活),以准备载入下一个帧。地址寄存器时钟信号704将指向第一条地址线720的二进制“1”移位,来指向下一条地址线720。同样在步骤1108中,来自数据寄存器722的下一组预定数量的比特被载入CRC模块320。
在步骤1110中,所有的数据线718都被预充电,地址寄存器时钟信号704被禁用,并且来自数据寄存器722的下一组预定数量的比特被载入CRC模块320。在步骤1112中,流程1100判定预充电计数器是否被置为二进制“1”。如果预充电计数器为二进制“0”,那么流程1100就返回到步骤1110。由于数据是在预定数量的周期内(比如说,16个周期)被载入CRC电路320的,因此这下一组预定数量的比特是在预定数量的周期范围内的任意一个周期中或是在某个范围内被载入CRC电路320的。这些比特可以在一个周期或是多个周期中被并行读取,在预定数量的周期内被串行读取,或是以串并行相结合的方式读取。
如果预充电计数器被置为二进制“1”,那么流程1100就前进到步骤1114,在步骤1114中,数据线预充电被关闭,预充电计数器被禁用,并且读取计数器被使能(比如说,RCOUNTER被复位到二进制“0”并激活)。在步骤1116中,对应于下一帧的地址线被使能(比如说,AENABLE信号710被置为二进制“1”),并且下一帧中的单元716的内容被读取到相应的数据线718上。同样在步骤1116中,来自数据寄存器722的下一组预定数量的比特被载入CRC模块320。在步骤1118中,流程1100返回到步骤1116。由于数据是在预定数量的周期内(比如说,16个周期)被读取到数据线618上的,因此这下一组预定数量的比特可以在预定数量的周期范围内的任意一个周期中或是在某个范围内从数据寄存器722中被读取出来。
如果读取计数器被置为二进制“1”,那么流程1100就前进到步骤1120,在步骤1120中,数据寄存器722中当前帧的下一个到最后一个比特都被载入CRC模块320,帧计数器被加1(用N++表示,其中N是载入到数据线618上的当前帧),并且读取计数器被禁用。在步骤1122中,流程1100判定该帧是否为最后一帧。如果该帧不是最后一帧,那么流程1100就前进到步骤1124,在步骤1124中,当前处在数据寄存器722中的帧(比如说,帧N-1)的最后一个比特被移动到CRC模块320中,数据已经处在数据线718上的下一帧被载入数据寄存器722,地址使能信号710被禁用,并且数据寄存器计数器被使能(比如说,DCOUNTER被复位到二进制“0”并激活)。然后流程1100返回步骤1104,在步骤1104中,当前处在数据寄存器722中的帧被载入CRC模块320,同时下一帧也准备好要被载入数据寄存器722。
参照图9,如果该帧是最后一帧,那么流程900就前进到步骤1300来把最后一帧载入CRC模块320。图13-14是一组流程图,它们更详细地示出了步骤1300中载入最后一帧的过程。在步骤1302中,当前处在数据寄存器722中的帧(也就是说,最后一帧的前一帧)的最后1比特被载入CRC电路320。同样在步骤1302中,来自最后一帧的数据从数据线718被载入数据寄存器722,地址使能信号710被禁用,并且数据寄存器计数器被使能。
流程1300接着前进到步骤1304,在步骤1304中,最后一帧中一组预定数量的数据比特被载入CRC电路320。在步骤1306中,如果数据寄存器计数器为二进制“0”,那么流程1300就返回步骤1304。如果数据寄存器计数器被置为二进制“1”,那么流程1300就前进到步骤1308,在步骤1308中,数据寄存器计数器被禁用,地址寄存器时钟信号704被使能,预充电计数器被使能,并且最后一帧中一组预定数量的数据比特被载入CRC电路320。
在步骤1310中,所有的数据线718都被预充电,地址寄存器时钟信号704被禁用,并且最后一帧的下一个比特被载入CRC电路320。接着,在步骤1312中,流程1300判定预充电计数器是否被置为二进制“1”。如果预充电计数器保持为二进制“0”,那么流程1300就返回到步骤1310。如果预充电计数器被置为二进制“1”,那么流程1300就前进到步骤1314,在步骤1314中,数据线预充电被关闭,预充电计数器被禁用,读取计数器被使能,并且最后一帧的下一个比特被载入CRC模块320。在步骤1316中,最后一帧的下一个比特被载入CRC模块320。接着,在步骤1318中,流程1300判定读取计数器是否被置为二进制“1”。如果读取计数器保持二进制“0”,那么流程1300就返回步骤1116。如果读取计数器被置为二进制“1”,那么流程1300就前进到步骤1320,在步骤1320中,读取计数器被禁用,并且最后一个比特之前的比特被载入CRC模块320。在步骤1322中,最后一帧的最后一个比特被载入CRC模块320,并且一个载入CRC信号被声明。
参照图9,当可编程逻辑设备配置数据104的所有帧都被载入CRC模块320后,流程900就前进到步骤1500,在步骤1500中,期望值被载入CRC模块320。
图15是一张流程图,它更详细地示出了将一个32比特期望CRC值102载入CRC模块320的过程,其中CRC模块320每时钟周期接收8个数据比特作为输入。在步骤1502中,期望CRC值102的第一个字节被载入CRC模块320。第一个字节涉及最重要的字节,从最重要的比特到最不重要的比特。多路复用器322被用来选取要发送到XOR树324的期望值102,以便计算校验和。在步骤1504中,期望CRC值102的下一个字节被载入,而在步骤1508中,期望CRC值102的第四个字节被载入。
图9-15仅仅是为了示例性的目的而说明的,这些说明是针对32比特生成多项式以及每时钟周期从数据寄存器722或是期望值102中的一个接收8个数据比特作为输入的CRC模块320而展开的。可以理解,任何合适数量的比特都可以被用来表示生成多项式,并且任何时钟周期内都可以把任意数量的比特载入CRC模块320。但是要注意到的是,根据上述的两个特点,向数据寄存器722载入数据以及将数据从数据寄存器722移动到CRC模块的时序安排可能会变化。
重新参照图9,当在步骤1500中将期望CRC值102载入CRC模块320之后,流程900就返回步骤920。
图16示出了在可编程逻辑设备上执行错误检测所包含的示例性步骤的流程图。流程1600从步骤1602开始,由一个信号来表示开始对可编程逻辑设备配置数据104进行错误检测。在步骤1604中,可编程逻辑设备配置数据104被载入CRC模块320,如图9-15中所示。在步骤1606中,流程1600判定是否所有的配置数据104都已经被载入CRC电路模块320。如果并非所有的配置数据104都已经被载入,那么流程1600就返回步骤1604。流程1600还会前进到步骤1608,在步骤1608中开始对数据进行校验和计算。如果所有的配置数据104都已经被载入,那么流程1600就前进到步骤1608和1610。在步骤1610中,期望值102被载入CRC模块320,然后流程1600就前进到步骤1608。在步骤1608中,当配置数据104的最后部分以及期望值102被载入CRC模块320的时候,XOR树324不断地计算出校验和。每个时钟周期都会在步骤1612中将校验和计算的结果载入信号特征寄存器328。
当在步骤1612中把求得的校验和载入信号特征寄存器328之后,流程1600接着就前进到步骤1614,在步骤1614中对信号特征寄存器328中的每个比特执行逻辑“OR”。在步骤1616中,“OR”操作的结果被输出到一个CRC错误管脚上。然后流程1600就返回步骤1618。
图17示出了数据处理系统1700中的一个示例性可编程逻辑设备1702或是多芯片模块1704,1702或1704中包含了本发明的实施例。数据处理系统1700中可以包括一个或多个下列组件一个处理器1706;一个存储器1708;I/O电路1710;以及外围设备1712。这些组件由一条系统总线或是其他互连线路1720连接在一起,并且被安装在一块电路板1730上,该电路板是一个终端用户系统1740的一部分。
系统1700可以被使用在许多应用场合,比如计算机联网、数据联网、测量仪表、视频处理、数字信号处理,或是任何其他应用,在这些应用中需要利用到可编程或是可重复编程逻辑设备的优点。可编程逻辑设备或模块1702/1704可以被用来执行各种不同的逻辑功能。举例来说,可编程逻辑设备或模块1702/1704可以被设置成一个处理器或控制器来与处理器1706协同工作。可编程逻辑设备或模块1702/1704还可以被用作判定器,用来判决对系统1700中共享设备的访问。在另一个例子中,可编程逻辑设备或模块1702/1704可以被设置成处理器1706与系统1700中另一个组件之间的接口。应该注意的是,系统1700仅仅是示范性的,而本发明真正的范围与指导思想应该由下面的权利要求来指出。
多种不同的技术可以被用来实现具有本发明特点的可编程逻辑设备1702或多芯片模块1704,以及那些设备的各种组件(比如说,可编程逻辑连接器(“PLCs”)以及控制PLCs的可编程功能控制元件(“FCEs”))。举例来说,每个PLC可以是一个相对简单的可编程连接器,比如一个开关或是多个开关,用来将若干个输入端中的任意一个连接到一个输出端。另外,每个PLC也可以是一个稍复杂的元件,它能够执行逻辑功能(比如说,在逻辑上组合若干个输入)以及产生连接。在后一种情况下,举例来说,每个PLC可以是一个乘积项逻辑,它能实现诸如AND、NAND、OR或是NOR这些功能。适合用来实现PLCs的元件例子包括上述任何类型的易失性或非易失性存储器,比如EPROMs、EEPROMs、传递晶体管、传输门、反熔断器、激光熔断器、金属可选择性接线等等,这些存储器可以被用来储存可编程逻辑设备配置数据。PLCs以及其他电路元件可以由各种可编程功能控制元件(“FCEs”)进行控制。举例来说,FCEs可以是上述任何类型的易失性或非易失性存储器,这些存储器可以被用来储存可编程逻辑设备配置数据。FCEs也可以是先入先出(“FIFO”)存储器,比如EPROMs、EEPROMs、功能控制寄存器、铁电存储器、熔断器、反熔断器,等等。由上述的各种例子可见,本发明既可以应用在一次性可编程设备中,也可以应用在可重复编程的设备中。
至此可见,我们在可编程逻辑设备上提供了错误检测电路。精通本技术的人应该能够理解,本发明可以用上述实施例之外的其他实施例加以实现,上述的实施例是为说明性的而不是限制性的目的而提供的,本发明仅受下列权利要求的限制。
权利要求
1.用来检测储存在逻辑设备上的配置数据中的错误的一种电路,包括一个存储器,配置数据被储存在其中;以及连接到存储器上的检验电路,它分析储存在存储器中的配置数据以确定在存储器的最初设置之后是否有任何值发生了变化。
2.根据权利要求1所述的逻辑装置,其中所述的存储器是随机存取存储器。
3.根据权利要求1所述的逻辑装置,其中所述的检验电路包括校验和电路,它根据配置数据计算出一个值;以及连接到校验和电路上的比较电路,它将算得的值与一个期望值进行比较。
4.根据权利要求3所述的逻辑装置,其中算得的值是用一个基于配置数据的一个值除以一个预定的值所得到的余数。
5.根据权利要求3所述的逻辑装置,其中所述的期望值是根据用来设置逻辑装置的配置数据计算出来的。
6.根据权利要求5所述的逻辑装置,其中所述的期望值是在设置逻辑装置之前根据一个余数计算出来的,该余数是在配置数据被写入逻辑装置之前用基于该配置数据的一个值除以一个预定值而得到的。
7.根据权利要求6所述的逻辑装置,其中所述的预定值是与校验和电路所用的相等的值。
8.根据权利要求3所述的逻辑装置,其中所述的期望值是由校验和计算电路在配置数据被写入逻辑装置时计算得出的。
9.根据权利要求3所述的逻辑装置,其中所述的比较电路提供一个第一信号,表示没有检测到错误;以及第二信号,表示检测到了错误。
10.根据权利要求1所述的逻辑装置,其中所述的检验电路包括计算电路,它根据配置数据计算一个值;以及连接到计算电路上的逻辑电路,它对算得的值执行逻辑操作。
11.根据权利要求10所述的逻辑装置,其中所述的算得的值是用基于配置数据和期望值的一个值除以一个预定的值所得到的余数。
12.根据权利要求11所述的逻辑装置,其中所述的期望值是根据用来设置逻辑装置的配置数据计算出来的。
13.根据权利要求12所述的逻辑装置,其中所述的期望值是在设置逻辑装置之前根据一个余数计算出来的,该余数是在配置数据被写入逻辑装置之前用基于该配置数据的一个值除以一个预定值而得到的。
14.根据权利要求11所述的逻辑装置,其中所述的期望值是由计算电路在配置数据被写入逻辑装置时计算得出的。
15.根据权利要求10所述的逻辑装置,其中所述的逻辑电路包括能产生下列信号的逻辑第一信号,表示没有检测到错误;以及第二信号,表示检测到了错误。
16.根据权利要求1所述的逻辑装置,还包括一个连接到所述存储器上的第二存储器,其中的第二存储器储存配置数据的一部分。
17.根据权利要求16所述的逻辑装置,其中所述的检验电路被连接到第二存储器上,并对所述配置数据的一部分执行部分分析。
18.根据权利要求1所述的逻辑装置,还包括一个第二存储器,用于储存被输入到检验电路中的期望值。
19.根据权利要求18所述的逻辑装置,其中所述的期望值是根据用来设置逻辑装置的配置数据计算出来的。
20.根据权利要求19所述的逻辑装置,其中所述的期望值是在设置逻辑装置之前根据一个余数计算出来的,该余数是在配置数据被写入逻辑装置之前用基于该配置数据的一个值除以一个预定值而得到的。
21.根据权利要求18所述的逻辑装置,其中所述的期望值是由校验和计算电路在配置数据被写入逻辑装置时计算得出的。
22.根据权利要求1所述的逻辑装置,还包括连接到检验电路上的输出电路,用于输出一个指示了是否检测到错误的信号。
23.一种数字信号处理系统,包括处理电路;连接到所述处理电路上的一个第二存储器;以及如权利要求1中所定义的逻辑装置。
24.一块印制电路板,权利要求1中所定义的逻辑装置被安装其上。
25.根据权利要求24所述的印制电路板,还包括一个第二存储器,它被安装在印制电路板上并连接到所述逻辑装置上。
26.根据权利要求25所述的印制电路板,其中所述的第二存储器包含非易失性存储器,用于储存被写入逻辑装置的配置数据。
27.实现在一个逻辑装置上的一种错误检测电路,包括一个多路复用器,它取一个期望值以及储存在逻辑装置上的配置数据作为输入;以及连接到多路复用器的一个输出端上的检验电路,包括一个XOR树,用于实现多项式校验和计算,一个连接到XOR树上的信号特征寄存器,以及一个连接到信号特征寄存器上的逻辑门,其中逻辑门取信号特征寄存器的内容作为比特方式的输入。
28.根据权利要求27所述的错误检测电路,还包括一个第一存储器,配置数据被储存在其中。
29.根据权利要求28所述的错误检测电路,还包括一个连接到第一存储器上的第二存储器,其中的第二存储器储存了要作为输入被送到多路复用器的配置数据的一部分。
30.根据权利要求27所述的错误检测电路,还包括一个用来储存期望值的存储器。
31.根据权利要求30所述的错误检测电路,其中所述的期望值是根据用来设置逻辑装置的配置数据计算出来的。
32.根据权利要求31所述的错误检测电路,其中所述的期望值是在设置逻辑装置之前根据一个余数计算出来的,该余数是在配置数据被写入逻辑装置之前用基于该配置数据的一个值除以一个预定值而得到的。
33.根据权利要求30所述的错误检测电路,其中所述的期望值是由检验电路在配置数据被写入逻辑装置时计算得出的。
34.根据权利要求27所述的错误检测电路,其中所述的多路复用器首先发送配置数据作为输出,其次再发送期望值作为输出。
35.根据权利要求27所述的错误检测电路,其中所述的XOR树包括寄存器,该寄存器在每个时钟周期储存多项式校验和计算的结果,并在下一个时钟周期将结果发送给XOR树作为输入。
36.根据权利要求35所述的错误检测电路,其中所述的储存在寄存器中的结果在下一个时钟周期里被送往并储存到信号特征寄存器中。
37.根据权利要求27所述的错误检测电路,其中所述的XOR树计算出一个余数,该余数是用基于配置数据和期望值的一个值除以一个预定值而得到的。
38.根据权利要求27所述的错误检测电路,其中所述的逻辑门发送下列比特中的一种作为输出第一比特,当信号特征寄存器的内容是一个预定值的时候;以及第二比特,当信号特征寄存器的内容不是某个预定值的时候。
39.根据权利要求27所述的错误检测电路,还包括连接到逻辑门的一个输出端的输出管脚,用来输出一个表示是否检测到了错误的信号。
40.根据权利要求39所述的错误检测电路,其中所述的输出管脚可由用户逻辑访问。
41.根据权利要求27所述的错误检测电路,其中所述的错误检测电路是在逻辑装置上的一个硬布线电路。
42.根据权利要求27所述的错误检测电路,其中所述的错误检测电路是被编程到逻辑装置中的。
43.根据权利要求27所述的错误检测电路,其中所述的错误检测电路处在逻辑装置之外,并通过输入/输出管脚与逻辑装置相连。
44.根据权利要求27所述的错误检测电路,其中所述的错误检测电路是以软件来实现的。
45.用来检测被写入逻辑装置的配置数据中的错误的一种方法,包括根据被写入逻辑装置的配置数据计算一个期望值;分析储存在逻辑装置上的配置数据,以确定是否有错误发生。
46.根据权利要求45所述的方法,其中所述的计算期望值包括在设置逻辑装置之前根据一个余数进行计算,该余数是在配置数据被写入逻辑装置之前用基于该配置数据的一个值除以一个预定值而得到的。
47.根据权利要求45所述的方法,其中所述的计算期望值包括在设置逻辑装置的同时根据一个余数进行计算,该余数是在配置数据被写入逻辑装置的同时用基于该配置数据的一个值除以一个预定值而得到的。
48.根据权利要求45所述的方法,其中所述的分析配置数据包括根据配置数据计算一个值;以及将算得的值与期望值进行比较。
49.根据权利要求45所述的方法,其中所述的分析配置数据包括根据配置数据和期望值计算一个值;以及对算得的值执行一次逻辑操作。
50.根据权利要求45所述的方法,还包括输出一个分析结果,该结果表示是否检测到了错误。
51.根据权利要求45所述的方法,其中所述的输出结果包括以下之一送出一个第一信号,表示没有检测到错误;以及送出一个第二信号,表示检测到了错误。
全文摘要
在可编程逻辑设备上提供错误检测电路。可编程逻辑设备配置数据被载入一个循环冗余校验(CRC)模块,在该模块中可以进行校验和计算。在一个实施例中,校验和可能与一个期望值进行比较,该期望值是在数据被写入可编程逻辑设备之前或正被写入可编程逻辑设备的时候预先计算出来的校验和。在另一个实施例中,期望值可以被包括在校验和计算中。可以根据校验和与期望值之间的关系或是根据校验和的值产生一个输出,该输出指示是否检测到了错误。该输出可以被送到一个输出管脚,该输出管脚可以由用户逻辑访问。
文档编号G01R31/28GK1529853SQ02803300
公开日2004年9月15日 申请日期2002年10月10日 优先权日2001年10月11日
发明者尼赫·D.·尼勾, 安迪·L.·李, 凯利·维恩斯特拉, L. 李, 尼赫 D. 尼勾, 维恩斯特拉 申请人:阿尔特拉公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1