CN102096609B - 可编程循环冗余校验(crc)计算的指令集架构 - Google Patents

可编程循环冗余校验(crc)计算的指令集架构 Download PDF

Info

Publication number
CN102096609B
CN102096609B CN201010581502.XA CN201010581502A CN102096609B CN 102096609 B CN102096609 B CN 102096609B CN 201010581502 A CN201010581502 A CN 201010581502A CN 102096609 B CN102096609 B CN 102096609B
Authority
CN
China
Prior art keywords
positions
operand
crc
multinomial
remainder
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201010581502.XA
Other languages
English (en)
Other versions
CN102096609A (zh
Inventor
V·戈帕尔
S·格伦
G·M·沃尔里克
W·K·费加利
K·S·叶
B·A·布里斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN102096609A publication Critical patent/CN102096609A/zh
Application granted granted Critical
Publication of CN102096609B publication Critical patent/CN102096609B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • H03M13/091Parallel or block-wise CRC computation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Correction Of Errors (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

提供了通过使用多个不同的n位多项式来在数据块上执行循环冗余校验(CRC)操作的方法和装置。灵活CRC指令通过使用可编程n位多项式来执行CRC操作。通过将n位多项式存储在两个操作数中的一个,将n位多项式提供给CRC指令。

Description

可编程循环冗余校验(CRC)计算的指令集架构
技术领域
本公开涉及错误检查,并且更具体地涉及针对错误检查使用循环冗余校验(CRC)。
背景技术
多项式是具有一个或多个代数项的数学表达式,例如,“a+bx+cx2”,其中的每项都包含常数(a,b或c),所述常数乘以一个或多个变量(x)的非负整数次方。当将数据块从源端向目的端传输时,用n位多项式除数据块的二进制除法运算的固定大小的余数可以被用来验证没有发生传输错误。应用于任意长度的数据块的n位多项式检测小于或等于n位的任何单个错误突发。
在源端针对数据块计算出固定大小的余数并将所述余数与数据块一起传输。将n位多项式应用于在目的端处接收的数据块,以重新计算固定大小的余数。将重新计算出的固定大小的余数和与数据块一起被传输的固定大小的余数进行比较以验证没有发生传输错误。
循环冗余校验(CRC)是既指固定大小的余数(将任意长的数据块二进制除以固定大小的多项式而得到的余数)又指用来产生所述固定大小的余数的功能的术语。
附图说明
通过以下参照附图进行的具体描述,要求保护的主题的实施例的特征将变得显而易见,在附图中,相同的数字描述了相似的部分,并且在附图中:
图1为根据本发明原理的、包括在通用处理器中执行循环冗余校验(CRC)的指令的实施例的系统框图;
图2为图1所示处理器的实施例的框图;
图3为示出了根据本发明原理的、图2所示的执行灵活CRC的执行单元的实施例的框图;
图4示出了图3所示的扩展多项式微操作的实施例;
图5示出了图3所示的混洗字微操作的实施例;
图6示出了图3所示的CRC约减微操作的实施例;
图7为示出了图6所示的计算CRC功能的实施例的框图;
图8为示出了图7所示的4位约减阶段的框图;以及
图9为示出了根据本发明原理的、执行CRC的方法的实施例的流程图。
尽管以下具体描述将参照所要求保护的主题的说明性实施例而进行,但对于本领域技术人员来说,许多替代物、修改和其变型是显而易见的。因此,应当宽泛地看待所要求保护的主题,并仅以所附权利要求中阐述的保护范围来进行限定。
具体实施方式
存在许多已知的用于执行循环冗余校验(CRC)计算的方法。一种方法是使用专用的CRC电路来实现特定的n位多项式。另一种方法是使用CRC查找表来存储针对给定的n位多项式以及一组数据输入和余数的所有可能的CRC结果。对于这种方法,在CRC查找表中执行一次查表操作以确定CRC结果。
然而,存在许多不同的用于计算CRC的n位多项式。例如,使用不同的n位多项式来针对存储协议(例如,因特网小型计算机系统接口(iSCSI))、压缩与解压缩与图形操作(例如,移动图像专家小组(MPEG)与联合图像专家小组(JPEG))计算CRC。因此,需要专用的CRC电路或独立的查找表来计算针对每个不同的n位多项式的CRC。
也可以通过使用专用的CPU指令在硬件中执行CRC计算。然而,由于CRC指令受到操作数的数量与大小的限制。CRC指令专用于计算一个特定的固定n位多项式的CRC。
在本发明的实施例中,提供了指令集架构以通过使用多个不同的n位多项式来执行CRC操作。在实施例中,灵活CRC指令支持最大达到32次的n位多项式(即,支持位xn(第n+1位)被设置为逻辑‘1’的n位多项式)。灵活CRC指令也支持数据/余数上的位/字节反射。
图1为根据本发明原理的包括指令的实施例的系统100的框图,所述指令用于在通用处理器中执行CRC操作。系统100包括处理器101、存储器控制器中心(MCH)102以及输入/输出(I/O)控制器中心(ICH)104。MCH 102包括对处理器101与存储器108之间的通信进行控制的存储器控制器106。处理器101与MCH 102通过系统总线116来进行通信。
处理器101可以是多个处理器中的任意一种,这些处理器例如是单核心Pentium处理器、单核心Intel Celeron处理器、XScale处理器或多核心处理器例如Pentium D、 处理器,或 Duo处理器或任何其它类型的处理器。
存储器108可以是动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、同步动态随机存取存储器(SDRAM)、第二代双倍数据速率(DDR2)RAM或Rambus动态随机存取存储器(RDRAM)或任何其它类型的存储器。
ICH 104可以通过使用高速芯片到芯片互连114(例如直接媒体接口(DMI))而与MCH 102相耦合。DMI支持经由两个单向通道的2千兆位/秒的并发传输速率。
ICH 104可以包括用来控制与耦合到ICH 104的至少一个存储设备112进行的通信的存储I/O控制器110。存储设备可以是例如:磁盘驱动器、数字视频盘(DVD)驱动器、压缩盘(CD)驱动器、独立磁盘冗余阵列(RAID)、磁带驱动器或其它存储设备。ICH 104可以通过使用串行存储协议(例如串行连接小型计算机接口(SAS)或串行高级技术附件(SATA))通过存储协议互连118来与存储设备112进行通信。
处理器101包括执行CRC操作的CRC单元103。CRC单元103可以用于通过使用多个不同的n位多项式、来针对存储在存储器108和/或存储在存储设备112中的数据计算CRC。
通过使用多个不同的n位多项式中的一个来在数据块上执行循环冗余校验(CRC)操作。灵活CRC指令通过使用可编程n位多项式来执行CRC操作。与执行针对存储在CRC单元103中的固定(静态)多项式的CRC操作相反,通过将n位多项式存储在两个操作数中的一个中,将n位多项式经由CRC指令提供给CRC单元103,以提供灵活的CRC指令。
图2为图1所示的处理器101的实施例的框图。处理器101包括取出与解码单元202,取出与解码单元202用于对从1级(L1)指令高速缓存202中接收的处理器指令进行解码。用于执行指令的数据(例如,指令所使用的输入操作数)可以存储在寄存器堆(registerfile)208中。在一个实施例中,寄存器堆208包括多个寄存器,灵活CRC指令使用这些寄存器来存储灵活CRC指令所使用的数据(操作数)。
在一个实施例中,对于支持最大次数达到32次的n位多项式的指令集,寄存器堆具有多个64位寄存器。在其它实施例中,寄存器可以多于64位。例如,对于可以支持最大次数达到m次的m位多项式的灵活CRC指令集,寄存器堆可以包括多个2m位的寄存器。
取出与解码单元202从L1指令高速缓存202中取出宏指令,对宏指令进行解码并将它们拆分为被称为微操作(μops)的简单操作。执行单元210调度并执行微操作。在所示的实施例中,执行单元210中的CRC单元103包括灵活CRC指令的微操作。撤出单元212将所执行的宏指令的结果写入寄存器或存储器108(图1)。
图3为示出了根据本发明原理的、图2所示的执行灵活CRC指令的执行单元210的实施例的框图。
当灵活CRC指令由取出与解码单元206解码后,由执行单元210执行灵活CRC指令包括在CRC单元103中执行与灵活CRC指令相关联的微操作。
可以将通过使用在源(“输入”)操作数中提供的可编程n位多项式,在CRC单元103中执行CRC操作的灵活CRC指令(宏指令)用符号表示为:
Flex_CRC32 r64,r/m64
灵活CRC指令具有两个源操作数。第一操作数(“op1”)被存储在寄存器堆304的第一64位寄存器(r64)中并被用来存储CRC操作的32位多项式和初始32位CRC余数(“初始CRC”)两者。同样被存储在寄存器堆304中的第二操作数(“op2”)能够存储64位数据(要被约减的数据块)或存储64位指针,所述64位指针指向存储了64位数据(要被约减的数据块)的存储器108(图1)中的存储器位置。
通过使用第一源操作数中提供的初始CRC余数以及第一源操作数中提供的多项式,灵活CRC指令在64位数据块上执行CRC操作。通过允许在源操作数中的一个中提供多项式,该CRC指令与使用存储在CRC单元103中的固定多项式的CRC指令相比是灵活的。在第一操作数中所识别的64位寄存器也用作目的操作数以存储CRC操作的结果。可以将CRC操作的结果称为“新余数”。32位“新余数”以及32位可编程多项式均被存储在第一操作数所识别的64位寄存器中。
“初始余数”与可编程多项式在发出灵活CRC指令前被存储在第一操作数所识别的64位寄存器中。在实施例中,多项式的最大次数为32,即,项x32(33位多项式的位33)被设置为逻辑‘1’。在实施例中,操作数1的最低32位(即位[31:0])存储初始余数,而操作数1的最高32位(即位63:32)存储33位可编程多项式的最低32位。在向第一操作数的最高32位存储之前,通过“隐含的”打头的‘1’(即,由于多项式的最大次数为32,这意味着将位33设置为逻辑‘1’)对33位可编程多项式进行左对齐并丢弃第33位。在具有大于64位寄存器304(例如,在寄存器堆中)的实施例中,灵活CRC指令能够支持最大次数大于32的多项式。
CRC操作是一种用于产生大数据块(例如文件(在存储器中)或网络分组(在网络中))的摘要(通常为32位)的特殊类型的哈希函数。在进行存储或传输之前计算出摘要并将其附加到数据块上,然后从数据块中重新计算摘要并将其与原始摘要相比较,以验证数据块当存储在存储器或存储介质中时或在网络上传输时没有被改变。
CRC是一个二进制多项式对另一个二进制多项式求模的余数。可以将位流(数据块/消息)看作是带有二进制系数的多项式,其中,在流中被设置为逻辑‘1’的位对应于多项式的系数‘1’,并且其中,所述流的最低位对应于多项式的自由系数(free coefficient)。操作被定义在这些多项式/位串上。
例如,因特网SCSI(iSCSI)(在请求评议(RFC)3385中所定义)将CRC(循环冗余校验)用于端到端的数据保护。iSCSI CRC使用33位多项式11EDC6F41(以十六进制的格式)。33位因特网小型计算机系统接口(iSCSI)多项式11EDC6F41H当被写成33位二进制数时是100011110110111000110111101000001。这个33位二进制数对应于下面的多项式:
x32+x28+x27+x26+x25+x23+x22+x20+x19+x18+x14+x13+x11+x10+x9+x8+x6+1
多项式加法对应于按位异或(XOR)操作。XOR是在两个操作数上进行的逻辑操作,如果操作数中只有一个具有逻辑值‘1’则操作结果是逻辑值‘1’。如果两个逻辑值都相同(都是‘0’或都是‘1’)则操作结果是逻辑值‘0’。例如,值为‘11001010’的第一操作数与值为‘10000011’的第二操作数的异或产生值为‘01001001’的结果。
多项式乘法对应于位串的无进位乘法。例如,将二进制串左移t个位置对应于在多项式乘法中乘以xt。如果P(x)、Q(x)、R(x)、W(x)满足P(x)=W(x)*Q(x)+R(x)并且R(x)的次数少于P(x)的次数,则R(x)是P(x)对W(x)求模的余数。
使用这些术语,可以将任意位长的消息M(与二进制多项式M(x)相对应)的CRC值定义为CRC M(x)=x32 *M(x)mod P(x),其中,多项式P(x)定义了CRC算法。对于32位CRC算法,P(x)是一些32次多项式。
在实施例中,通过使用三个不同微操作的组合在执行单元210中的CRC单元103中实现了灵活CRC指令。图3所示的三个微操作为(1)扩展多项式314、(2)混洗字316以及(3)CRC约减318。
扩展多项式微操作314接收存储在第一操作数(“op1”)的最高位(MSB)中的多项式,在图3所示的实施例中,所述第一操作数被存储在寄存器堆304的寄存器306中。扩展多项式微操作314从op1中所提供的n位可编程多项式中导出预计算多项式K。预计算多项式K的最低32位被CRC单元103存储,以便稍后由CRC约减微操作318来使用。预计算多项式K通过允许并行地执行计算,减少了确定CRC余数所需的门延时的数量。
可以将扩展多项式微操作314用符号定义为:
dest:=crc_expand_poly(-,source1),select_modifier
扩展多项式微操作314计算出32位预计算多项式K=x36MOD POLY并存储K的最低32位。模约减(modulo reduction)被定义为在Galois域(GF(2))上的多项式除法。
预计算多项式K是32位CRC多项式在Galois域(GF(2))上的倍数。通过并行地处理要被约减的数据块的互斥区域(mutually exclusiveregion),预计算多项式K的形式允许并行地执行许多计算。并行地执行计算减少了用于计算CRC余数的时间。例如,CRC约减微操作318所使用的预计算多项式K允许并行地减少最高4位(40位输入数据中的位39-36)。例如,对于最大次数为32的多项式,在k具有32位的情况下,将K的最低32位应用于40位输入数据(32位多项式加上8位数据),这将40位输入数据约减到36位余数。
在实施例中,混洗字微操作316从寄存器306接收源操作数1(“op1”)并从寄存器堆304中的寄存器312(或者从由存储在寄存器312中的存储器指针所识别的存储器位置)中接收源操作数2(“op2”),并取决于存储在立即数字节(immediate byte)中的修饰符(modifier),在每个操作数中的64位中选择一个32位部分。可以将这个微操作用符号定义为:
dest:=shuffle_word(source2,source1),imm8
混洗字(shuffle word)微操作316在64位数据通路的两个半部分之间执行字级(word-level)数据(32位)的混洗。这个微操作从各个的64位操作数的每一个中选择最高32位(上半部分)或最低32位(下半部分)。也可以对所选择的半部分内的位进行混洗。对每个操作数内的位的混洗取决于存储在立即数(imm8)中的4位混洗选择修饰符。混洗的结果存储在目的寄存器(“dest”)中。
如果这是第一次调用灵活CRC指令的混洗字微操作316,那么立即数(imm8)指示将要从由灵活CRC宏指令所接收的64位第二操作数(“op2”)中选择最高32位。
对于由混洗字微操作316所提供的32位数据中的四个字节中的每一个执行CRC约减微操作318。CRC约减微操作318也使用从混洗字微操作316接收的32位初始余数、可编程多项式以及由扩展多项式微操作计算的预计算多项式K来计算余数(RES)。
当完成对灵活CRC指令的执行后,所积累的余数与多项式被存储在操作数1(既是宏指令的目的寄存器又是源寄存器)中,在图3所示的实施例中,所述操作数1可以被存储在寄存器堆304的寄存器306中。
图4示出了图3所示的扩展多项式微操作314的实施例。在CRC多项式是形式为x32=p31.x31+p30.x30+...p0的32位多项式(POLY)的实施例中,由[p31...p0]表示的32位多项式被存储在源寄存器400的最高32位(上半部)中。与x32相对应的隐含的打头的“一”被省略。
模操作(MOD)计算x36除以POLY得出的余数。例如,余数r=a modn,是当a除以n时得出的余数。在a是10并且n是3的情况下,r是1。
扩展多项式微操作314计算K=x36MOD POLY的余数并将其作为预计算多项式常数K而存储在目的寄存器406中。模约减被定义为在Galois域(GF(2))上的多项式除法。
原始的32位多项式也被存储在目的寄存器406中。在随后的CRC约减(减少)操作期间,使用预计算多项式常数(余数)K以及原始的32位多项式(多项式),以约减为计算余数所执行的异或(XOR)操作的数量。为了将提供给灵活CRC宏指令的64位数据块约减到32位余数,通过使用32位多项式来执行XOR操作。
图5示出了图3所示的混洗字微操作316的实施例。
在图5所示的实施例中,可以依据混洗字微操作316中提供的立即字节510中的状态修饰符的状态和交换位,来对控制逻辑504编程。控制逻辑504使用立即字节510以执行数据/余数上的位/字节反射,也即,将源1500以及源2502两者中的字节/位映射到目的506中的字节/位。在所示的实施例中,源1500、源2502以及目的506都是64位。在其它实施例中,源1500、源2502以及目的506可以多于64位。
在一个实施例中,立即字节510的最低四位,也即混洗选择修饰符[3:0]被控制逻辑504用来选择将64位源1500以及64位源2502的哪个32位部分转发给64位目的506的哪个32位部分。最低2位,也即混洗选择修饰符[1:0]选择将四个32位部分中的哪个部分转发到目的的低32位,而最高两位,也即混洗选择修饰符[2:3]选择将四个32位部分中的哪个部分转发到目的的高32位。
以下的表1与表2说明了如何根据混洗选择修饰符[3:0]的状态将源操作数中的32位字映射到目的中的32位字。
混洗选择修饰符[1:0] 交换操作
00 source1[31:0]->dest[31:0]
01 source1[63:32]->dest[31:0]
10 source2[31:0]->dest[31:0]
11 source2[63:32]->dest[31:0]
表1
混洗选择修饰符[3:2] 交换操作
00 source1[31:0]->dest[63:32]
01 source1[63:32]->dest[63:32]
10 source2[31:0]->dest[63:32]
11 source2[63:32]->dest[63:32]
表2
如果启用了立即字节510中的位交换位(例如,被设置为逻辑‘1’),那么32位的顺序被交换,例如,多个源中的一个源的位[31:0]在目的中被存储为位[0:31],以使得最高的第31位被存储在目的的最高位的位置中。高交换/低交换位的状态指示是在目的506的最低32位还是在目的506的最高32位上执行位交换。字节交换位的状态(‘1’或‘0’)指示当移动数据到目的506时,是否对源500、502的32位半部分中的四个字节进行交换。例如,对源502中最低32位的字节交换将源502的最高字节(位31:24)存储在了目的506的最低位(位7:0)中。
以下的表3和表4总结了根据立即字节的位7:5的状态,由混洗字微操作314所执行的数据/余数上的位/字节反射。在所示的实施例中,位7(交换(高))(交换(低))启用/禁用在目的的高半部分上进行的交换;位6启用/禁用在目的的低半部分上进行的交换;位5(字节交换)启用/禁用字节交换使能,而位4(位交换)启用/禁用位交换使能。
表3
表4
在一个实施例中,代替用微操作提供立即字节,控制逻辑被硬连线,以始终将存储在源1的最低32位中的CRC余数映射到目的的最低32位。控制逻辑也被硬连线,从而取决于是第一次还是第二次在灵活CRC宏指令中调用混洗字微操作,将来自源2的数据的最高32位映射到目的的最高32位,或者将来自源2的数据的最低32位映射到目的的最高32位。
图6示出了图3所示的CRC约减微操作318的实施例。CRC约减微操作318通过使用32位多项式和32位预计算多项式K来执行从数据块(数据流)减少8位的操作。
通过使用源406中提供的多项式在从源506中提供的32位数据中所选择的8位数据块上执行CRC约减功能。结合图4所讨论的并在源406的最高32位中提供的、由扩展多项式微操作316所计算的额外的预计算多项式K也被CRC约减功能所使用。如果CRC多项式是形式为x32=p31.x31+p30.x30+...p0的32位多项式(POLY),那么由[p31...p0]代表的32位多项式在源406的最高32位中作为输入被提供(对应于x32的隐含的打头的“一”被省略)。源406的最低32位存储预计算多项式K=x36MOD POLY。
64位源寄存器506既存储初始数据(DH或DL)又存储当前的CRC积累余数(“当前余数”),其中,用最高32位来存储所述数据,并且用最低32位来存储所述当前CRC余数。计算CRC微操作的结果(“余数”)被存储在目的寄存器606的最低32位中。
计算CRC需要计算输入数据除以生成值而得到的余数。针对存储在源寄存器506中的数据流的32位的段来计算CRC。32位数据在移位逻辑602中被移动8位,并且将移位后的数据存储在目的寄存器606中,作为被随后的CRC约减微操作318所使用的“更新的数据”。在作为“初始数据”存储在源寄存器506中的数据的最高8位上执行CRC操作。使用预计算多项式K以及所述多项式来计算CRC余数,所述CRC余数被存储在目的寄存器606中。
图7为示出了图6所示的计算CRC逻辑604的实施例的框图。
计算CRC逻辑604在8位段702的数据流的连续部分(段)上执行CRC操作。将8位段移动32位,并用移位后的8位段与也移动了8位的任何预先存在的余数(余数)执行异或操作。异或后的40位结果(输入数据)以及32位预计算多项式K被用于分阶段地计算32位CRC余数。在4位约减阶段712中,通过使用32位预计算多项式K使40位数据约减4位以提供36位余数。将该36位余数输入到包括四个独立的一位约减阶段的阶段712中,其中,所述阶段中的每一个执行一位约减操作,以使36位余数减少一位。当所有四个一位约减操作都在阶段712中执行后,回馈32位余数以处理数据流的下一个8位段。
如果这是数据流的最后一个32位数据块的最后一个8位段,那么其是最终余数,如果该数据流正在被传输,那么所述最终余数可以附加到数据流,或者可以将所述最终余数与接收的CRC进行比较以验证数据流未被破坏。
构建了阶段710、712以使得阶段输出与初始输入对于最终余数是彼此一致的。对不同的多项式重新编程仅仅需要计算不同的预计算多项式K。预计算多项式K具有打头的“1”位(即第(i+k)位),之后是i个零和按照生成多项式的顺序排列的k位数据。如上面讨论的,仅数据的最低k位被存储以由其它微操作来使用。在其中操作数具有2n位的实施例中,k是n位。例如,在具有64位操作数的实施例中,k是预计算多项式K的最低32位。
图8为示出了图7所示的4位约减阶段710的框图。4位约减阶段710接收40位输入并通过使用32位K预计算多项式将输入数据段约减到36位输出。首先,在乘法逻辑800中执行40位输入数据段的最高4位T[39:36]与32位K预计算多项式K[31:0]的4x32乘法操作。下一步,在XOR逻辑802中对36位乘法操作的结果与40位输入数据段的最低36位执行XOR操作,以提供36位输出T[35:0],所述36位输出T[35:0]被转发到下一个约减阶段712(图7)以继续计算32位余数。
在实施例中,4x32乘法逻辑800包括AND门阵列和具有多个XOR门的移位逻辑。AND门阵列包括四组32位AND门,一组32位AND门用于40位输入数据段的最高4位中的每一位。将最高四位的每个相应的位提供给多组AND门的一组中的32位AND门中的每一个的一个输入。例如,T[39]与第一组中所有32位AND门的一个输入相耦合,而T[38]与第二组中所有32位NAND门的一个输入相耦合。相应的最高位与32位K预计算多项式K[31:0]的相应的位进行“与”(AND)操作。例如在第一组32位AND门中,32位AND门中的每一个门的一个输入都接收40位输入数据段的最高位,而32位AND门中的每个门都接收32位K预计算多项式的32位中的相应的一位。
四组AND门(128(32x4)位AND门)的输出与移位逻辑相耦合,以根据输入数据的相应位的位置对输出进行移位(相乘)。在最高位(第39位)上操作的那组AND门的输出被移动了3位,并且每个随后组的AND门将这个移位约减1位,并且最后一组移动0位。
在XOR逻辑802中(使用多个XOR门)将移位后的36位结果从输入数据的最低36位(T[35:0])中减去以提供36位输入到阶段712。
图9为示出了根据本发明原理的、执行灵活可编程CRC操作的方法的实施例的流程图。将结合图2和图3对图9进行描述。
在灵活CRC指令被取出与解码单元206(图2)解码后,由执行单元210对灵活CRC指令的执行包括在CRC单元103中执行与灵活CRC指令相关联的多个微操作。
如前面所讨论的,可以将用于在CRC单元中执行CRC操作的灵活CRC指令(宏指令)用符号定义为:
Flex_CRC32 r64,r/m64
参照图9,在框900,扩展多项式微操作314(图3)接收存储在第一操作数中的最高位中的多项式,其中所述第一操作数存储在寄存器堆304的寄存器306中。扩展多项式微操作314针对给定多项式执行CRC扩展功能,并且提供由针对灵活CRC指令的CRC约减(减少)微操作318使用的预计算多项式K。在实施例中,预计算多项式K的最低32位被存储在寄存器中,例如寄存器堆304中的寄存器308或寄存器310中,以被CRC约减微操作318所使用。可以将扩展多项式微操作314用符号定义为:
dest:=crc_expand_poly(-,source1),select_modifier
扩展多项式微操作314计算32位预计算多项式K=x36MOD POLY。模约减被定义为在Galois域(GF(2))上的多项式除法。预计算多项式K被CRC约减微操作318(图3)所使用。处理继续进行到框902。
在框902,混洗字微操作316接收存储在寄存器306中的操作数1以及在寄存器堆304中的寄存器312中存储的(或是来自由寄存器312中存储的存储器指针所识别的存储器位置的)操作数2。混洗字微操作316根据存储在立即字节中的修饰符(“选择修饰符”),在每个操作数中选择64位的一个32位部分。可以将混洗字微操作316用符号定义为:
dest:=shuffle_word(source2,source1),imm8
混洗字微操作316实现在64位数据通路的两个32位部分之间对字级数据(32位)进行的混洗。混洗字微操作316从各个64位操作数中选择最高32位或者最低32位。也可以对所选择的半部分(32MSB或3LSB)内的位进行交换。对每个操作数内的位进行的混洗依据存储在立即数(imm8)中的4位混洗选择修饰符。混洗字微操作316的结果被存储在目的寄存器(dest)中。在实施例中,能够将该结果存储在寄存器堆304中的寄存器中,例如寄存器308或寄存器310中,以由其它微操作使用。
如果这是第一次在灵活CRC宏指令中调用混洗字微操作316,那么立即数指示将要从宏指令所接收的64位第二操作数(op2)中选择高32位(DH)。处理继续进行到框904。
在框904,对从混洗字微操作316输出的32位数据中相应的四个字节中的每个字节执行独立的CRC约减微操作318。使用来自混洗字微操作的32位初始余数(DH)、可编程多项式以及由扩展多项式微操作314计算的预计算多项式K。处理在框906继续进行。
在框906,如果存在要约减的32位数据块(段)DH的另一个字节,则处理在框904继续进行。如果不存在,则处理在框908继续进行。
在框908,混洗字微操作316接收操作数1和操作数2,并根据存储在立即字节中的修饰符而在每个操作数中的64位中选择的一个32位。由于这是第二次调用灵活CRC约减宏指令的混洗字微操作316,从宏指令所接收的第二操作数(op2)中选择最低32位(DL)。处理在框910继续进行。
在框910,通过使用由扩展多项式微操作314所计算的预计算多项式K,对由混洗字微操作316输出的32位数据中的相应的四个字节中的每个字节执行独立的CRC约减微操作318。处理在框912继续进行。
在框912,如果在32位数据块(DL)中有另一个字节要被约减,那么处理在框910继续进行。如果不存在,则处理在框914继续进行。
在框914,混洗字微操作316接收两个CRC约减微操作318的结果并将所述结果以及n位多项式存储在目的(op1)中。
灵活CRC指令的执行完成,所积累的余数和多项式被存储在操作数1中(所述操作数1既是灵活CRC宏指令的目的寄存器又是其源寄存器)。
对于本领域普通技术人员来说,可以在包括计算机可用介质的计算机程序产品中体现本发明的实施例所涉及的方法是显而易见的。例如,这种计算机可用介质可以包括只读存储器设备,例如压缩盘只读存储器(CDROM)盘或传统的ROM设备,或计算机磁带,其上存储了计算机可读程序代码。
尽管参照本文的实施例具体示出并描述了本发明的实施例,但是本领域技术人员应当理解,在不脱离由所附权利要求涵盖的本发明实施例的范围的情况下,可以对这些实施例做出各种形式和细节上的改变。

Claims (20)

1.一种用于执行指令的装置,包括:
取出与解码单元,用于解码指令;
寄存器堆,用于存储用于执行指令的数据;以及
执行单元,其用于执行由所述取出与解码单元解码的循环冗余校验(CRC)指令的操作序列,所述CRC指令具有存储在所述寄存器堆中的第一操作数和第二操作数,所述操作序列通过使用存储在所述第一操作数中的多个不同的n位多项式中的一个,在存储在所述第二操作数中的2n位数据块上执行循环冗余校验(CRC)操作,以使所述执行单元执行以下操作:
对n位多项式进行扩展以提供预计算多项式K;以及
通过使用存储在所述第一操作数中的所述n位多项式与当前的n位余数以及所述预计算多项式K,在所述2n位数据块上执行操作序列,以提供所述2n位数据块的n位余数。
2.根据权利要求1所述的装置,其中,所述n位多项式的最大次数为n+1。
3.根据权利要求1所述的装置,其中,所述第一操作数具有2n位并且所述第二操作数具有2n位。
4.根据权利要求3所述的装置,其中,n为32。
5.根据权利要求1所述的装置,其中,所述第一操作数既是源操作数又是目的操作数,并且所述n位余数存储在所述第一操作数中。
6.根据权利要求1所述的装置,其中,所述操作序列包括:
混洗字微指令,其用于通过从所述2n位的第一操作数中选择一n位部分以及从所述2n位的第二操作数中选择一n位部分以存储在一2n位目的操作数中,来执行混洗操作。
7.根据权利要求6所述的装置,其中,所述混洗字微指令对各个n位部分内的位进行混洗操作。
8.根据权利要求1所述的装置,其中,所述操作序列包括:
CRC约减微指令,其用于通过使用所述预计算多项式K来约减n+8位数据以提供n+4位中间余数,并通过使用所述n位多项式将所述n+4位中间余数约减为n位余数。
9.一种用于执行指令的方法,包括:
执行由取出与解码单元解码的循环冗余校验(CRC)指令的操作序列,所述CRC指令具有存储在寄存器堆中的第一操作数和第二操作数,所述操作序列通过使用存储在所述第一操作数中的多个不同的n位多项式中的一个,在存储在所述第二操作数中的2n位数据块上执行循环冗余校验(CRC)操作,包括:
对n位多项式进行扩展以提供预计算多项式K;以及
通过使用存储在所述第一操作数中的所述n位多项式和当前n位余数以及所述预计算多项式K,在所述2n位数据块上执行微操作序列,以提供所述2n位数据块的n位余数。
10.根据权利要求9所述的方法,其中,所述n位多项式的最大次数为n+1。
11.根据权利要求9所述的方法,其中,所述第一操作数具有2n位并且所述第二操作数具有2n位。
12.根据权利要求11所述的方法,其中,n为32。
13.根据权利要求9所述的方法,其中,所述第一操作数既是源操作数又是目的操作数,并且所述n位余数存储在所述第一操作数中。
14.根据权利要求9所述的方法,其中,执行所述微操作序列包括:
通过从所述2n位的第一操作数中选择一n位部分并从所述2n位的第二操作数中选择一n位部分以存储在一2n位目的操作数中,来执行混洗操作。
15.根据权利要求14所述的方法,其中,执行所述混洗操作以对所述各个n位部分内的位进行混洗。
16.根据权利要求9所述的方法,其中,执行所述微操作序列包括:
通过使用所述预计算多项式K来约减n+8位数据以提供n+4位中间余数,并通过使用所述n位多项式将所述n+4位中间余数约减为n位余数。
17.一种用于执行指令的装置,包括:
取出与解码单元;
寄存器堆;
执行单元,用于执行由所述取出与解码单元解码的循环冗余校验(CRC)指令的操作序列,所述CRC指令具有存储在所述寄存器堆中的第一操作数和第二操作数,所述操作序列通过使用存储在所述第一操作数中的多个不同的n位多项式中的一个以及存储在所述第一操作数中的当前n位余数,在存储在所述第二操作数中的2n位数据块上执行循环冗余校验(CRC)操作,包括:
对n位多项式进行扩展以提供预计算多项式K;以及
通过使用存储在所述第一操作数中的所述n位多项式与当前n位余数以及所述预计算多项式K,在所述2n位数据块上执行微操作序列,以提供所述2n位数据块的n位余数。
18.根据权利要求17所述的装置,其中,所述执行单元包括:
用于通过使用从所述n位多项式扩展出的预计算多项式K来约减n+8位数据以提供n+4位中间余数,并通过使用所述n位多项式将所述n+4位中间余数约减为n位余数的模块。
19.一种用于执行指令的系统,包括:
动态随机存取存储器,其存储数据和指令;以及
处理器,其与所述存储器相耦合以执行所述指令,所述处理器包括:
执行单元,其用于执行由取出与解码单元解码的循环冗余校验(CRC)指令的操作序列,所述CRC指令具有存储在寄存器堆中的第一操作数和第二操作数,所述操作序列通过使用存储在所述第一操作数中的多个不同的n位多项式中的一个,在存储在所述第二操作数中的2n位数据块上执行循环冗余校验(CRC)操作,以使所述执行单元执行以下操作:
对n位多项式进行扩展以提供预计算多项式K;以及
通过使用存储在所述第一操作数中的所述n位多项式和当前n位余数以及所述预计算多项式K,在所述2n位数据块上执行微操作序列,以提供所述2n位数据块的n位余数。
20.根据权利要求19所述的系统,其中,执行所述微操作序列包括:
通过使用所述预计算多项式K来约减n+8位数据以提供n+4位中间余数,并通过使用所述n位多项式将所述n+4位中间余数约减为n位余数。
CN201010581502.XA 2009-12-10 2010-12-06 可编程循环冗余校验(crc)计算的指令集架构 Active CN102096609B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/653,249 2009-12-10
US12/653,249 US8464125B2 (en) 2009-12-10 2009-12-10 Instruction-set architecture for programmable cyclic redundancy check (CRC) computations

Publications (2)

Publication Number Publication Date
CN102096609A CN102096609A (zh) 2011-06-15
CN102096609B true CN102096609B (zh) 2017-04-12

Family

ID=43993029

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010581502.XA Active CN102096609B (zh) 2009-12-10 2010-12-06 可编程循环冗余校验(crc)计算的指令集架构

Country Status (6)

Country Link
US (3) US8464125B2 (zh)
JP (1) JP5226062B2 (zh)
KR (2) KR101266746B1 (zh)
CN (1) CN102096609B (zh)
DE (1) DE102010049322B4 (zh)
TW (1) TWI464579B (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7958436B2 (en) 2005-12-23 2011-06-07 Intel Corporation Performing a cyclic redundancy checksum operation responsive to a user-level instruction
US8607129B2 (en) 2011-07-01 2013-12-10 Intel Corporation Efficient and scalable cyclic redundancy check circuit using Galois-field arithmetic
JP2013210837A (ja) * 2012-03-30 2013-10-10 Fujitsu Ltd 演算回路及び演算方法
US9904591B2 (en) * 2014-10-22 2018-02-27 Intel Corporation Device, system and method to restrict access to data error information
US9740558B2 (en) 2015-05-31 2017-08-22 Intel Corporation On-die ECC with error counter and internal address generation
US9817714B2 (en) 2015-08-28 2017-11-14 Intel Corporation Memory device on-die error checking and correcting code
US9384086B1 (en) * 2015-11-30 2016-07-05 International Business Machines Corporation I/O operation-level error checking
US9354967B1 (en) 2015-11-30 2016-05-31 International Business Machines Corporation I/O operation-level error-handling
EP3217287A1 (de) * 2016-03-11 2017-09-13 Siemens Aktiengesellschaft Verfahren und einrichtung zur erkennung von fehlern bei der speicherung oder übertragung von daten
US10243583B2 (en) * 2017-06-16 2019-03-26 Western Digital Technologies, Inc. CPU error remediation during erasure code encoding
CN108038014B (zh) * 2017-11-30 2021-06-04 中国人民解放军国防科技大学 一种图像压缩多核并行容错方法、计算机、处理器
CN108628698B (zh) * 2018-05-08 2019-11-05 华为技术有限公司 计算crc编码的方法和装置
CN109861788B (zh) * 2019-01-11 2021-12-10 中电海康集团有限公司 一种并行crc计算的实现方法及装置
CN110515656B (zh) * 2019-08-28 2021-07-16 中国人民解放军国防科技大学 一种casp指令的执行方法、微处理器及计算机设备
CN112036117B (zh) * 2020-08-28 2023-06-20 西安微电子技术研究所 一种适用于多种位宽并行输入数据的crc校验控制系统
CN112954523B (zh) * 2021-01-29 2023-06-02 佳禾智能科技股份有限公司 一种tws耳机的校验方法
CN115408574A (zh) 2021-05-28 2022-11-29 南宁富联富桂精密工业有限公司 数据分析方法、装置及计算机可读存储介质
CN114443347B (zh) * 2021-12-23 2022-11-22 湖南毂梁微电子有限公司 一种可配置crc码计算方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1543162A (zh) * 2003-11-06 2004-11-03 西安电子科技大学 变长数据分组与定长信元混合传送的方法与适配装置
CN101305349A (zh) * 2005-12-23 2008-11-12 英特尔公司 响应于用户级指令进行循环冗余校验和运算

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3175759B2 (ja) 1997-01-31 2001-06-11 日本電気株式会社 無線ネットワークインタフェースカード及び無線ネットワークインタフェースカードのためのキュー管理方法
JPH10320221A (ja) * 1997-05-16 1998-12-04 Hitachi Ltd プロセッサ
JP3255130B2 (ja) * 1998-12-16 2002-02-12 村田機械株式会社 データ検査方法及び装置並びに記録媒体
US6848072B1 (en) 2000-09-19 2005-01-25 Bbn Solutions Llc Network processor having cyclic redundancy check implemented in hardware
US6836869B1 (en) * 2001-02-02 2004-12-28 Cradle Technologies, Inc. Combined cyclic redundancy check (CRC) and Reed-Solomon (RS) error checking unit
US7216285B2 (en) * 2001-11-09 2007-05-08 Marvell International Ltd. System and method for generating cyclic redundancy check
US20040098655A1 (en) 2002-11-19 2004-05-20 Sharma Debendra Das Rolling CRC scheme for improved error detection
US7171604B2 (en) 2003-12-30 2007-01-30 Intel Corporation Method and apparatus for calculating cyclic redundancy check (CRC) on data using a programmable CRC engine
JP2009518132A (ja) * 2005-12-07 2009-05-07 イスト・テクノロジーズ・インコーポレイテッド 軟骨修復方法
US7925957B2 (en) * 2006-03-20 2011-04-12 Intel Corporation Validating data using processor instructions
US7827471B2 (en) * 2006-10-12 2010-11-02 Intel Corporation Determining message residue using a set of polynomials
US9361104B2 (en) * 2010-08-13 2016-06-07 Freescale Semiconductor, Inc. Systems and methods for determining instruction execution error by comparing an operand of a reference instruction to a result of a subsequent cross-check instruction

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1543162A (zh) * 2003-11-06 2004-11-03 西安电子科技大学 变长数据分组与定长信元混合传送的方法与适配装置
CN101305349A (zh) * 2005-12-23 2008-11-12 英特尔公司 响应于用户级指令进行循环冗余校验和运算

Also Published As

Publication number Publication date
DE102010049322B4 (de) 2022-09-15
US8464125B2 (en) 2013-06-11
US20140229807A1 (en) 2014-08-14
JP5226062B2 (ja) 2013-07-03
US9047082B2 (en) 2015-06-02
US8732548B2 (en) 2014-05-20
CN102096609A (zh) 2011-06-15
JP2011123884A (ja) 2011-06-23
TWI464579B (zh) 2014-12-11
KR20110066106A (ko) 2011-06-16
KR101374958B1 (ko) 2014-03-17
KR101266746B1 (ko) 2013-05-28
DE102010049322A1 (de) 2011-06-16
KR20130031863A (ko) 2013-03-29
US20110145683A1 (en) 2011-06-16
TW201137600A (en) 2011-11-01
US20130191699A1 (en) 2013-07-25

Similar Documents

Publication Publication Date Title
CN102096609B (zh) 可编程循环冗余校验(crc)计算的指令集架构
CN103975302B (zh) 矩阵乘法累加指令
US7797612B2 (en) Storage accelerator
US20150058595A1 (en) Systems and Methods for Implementing Dynamically Configurable Perfect Hash Tables
US9680605B2 (en) Method of offloading cyclic redundancy check on portions of a packet
US20050010630A1 (en) Method and apparatus for determining a remainder in a polynomial ring
KR101027855B1 (ko) Crc 에러 검출 방법, 장치, 시스템 및 crc 에러 검출방법을 수행하는인스트럭션 세트를 포함하는 머신판독가능한 매체
CN112214349B (zh) 一种数据循环冗余校验装置和方法
JP2010514066A (ja) パターンマッチングによる高性能raid6システムアーキテクチャ
US20100077187A1 (en) System and Method to Execute a Linear Feedback-Shift Instruction
CN114063973B (zh) 伽罗华域乘法器及纠删编解码系统
Bernstein et al. FSBday: Implementing Wagner’s generalized birthday attack against the SHA-3 round-1 candidate FSB
US20080140740A1 (en) Systems and methods for processing data sets in parallel
US6609142B1 (en) Method of performing multiplication with accumulation in a Galois body
JP2004206798A (ja) 光ディスク装置のエンコードデータ符号回路
WO2019030860A1 (ja) 誤り検出用冗長ビットの生成方法および装置
CN114968653A (zh) 一种zfs文件系统的raidz校验值的确定方法
JP2008146828A (ja) 光ディスク装置のエンコードデータ符号回路
JP2001044853A (ja) チェンサーチ回路、誤り訂正装置及びディスクドライブ装置
US8381080B2 (en) Reducing a degree of a polynomial in a polynomial division calculation
JP4990843B2 (ja) 暗号演算装置、その方法、及びプログラム
JP4313555B2 (ja) ガロア体掛け算器及び通信装置
JP2006211403A (ja) 誤り訂正装置
JP4317589B2 (ja) 符号化装置、復号化装置、符号化プログラム及び復号化プログラム
CN111201559A (zh) 置换装置、置换方法、以及程序

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant