一种矢量crc校验指令的设计方法
【专利摘要】本发明公开了一种DSP中矢量CRC校验指令的设计方法,在DSP中设计了全新的矢量CRC执行单元,在此基础上实现了矢量CRC5校验指令、矢量CRC8校验指令、矢量CRC16校验指令、矢量CRC24校验指令、矢量CRC32校验指令以及利用这些专用指令设计的CRC校验装置。CRC指令运行效率高,使用简单灵活,通用性强,大大简化了对数据进行CRC校验的程序设计。使用较少的硬件资源实现了多条矢量CRC校验指令,节省了硬件资源,降低了成本。本发明充分利用了处理器设计中的流水线技术、多指令并发技术和单指令多数据技术,极大地提高了CRC校验的效率,本发明的CRC指令具有吞吐率高、功耗低、成本低等特点。
【专利说明】一种矢量CRC校验指令的设计方法
【技术领域】
[0001]一种DSP中矢量CRC校验指令的设计方法,涉及通信芯片中的数字信号处理,属于通信、存储领域,特别涉及数字信号处理芯片中CRC校验模块的设计。
【背景技术】
[0002]CRC编码是一种循环冗余校验码(Cyclic Redundancy Check),是数据通信领域中最常用的一种差错校验码,其特征是信息字段和检验字段的长度可以任意选定。
[0003]CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个检验码r位,附在信息后,构成一个新的二进制码序列共(k+r)位,最后发送出去。接收端根据同样的规则校验,以确定传送中是否出错。
[0004]传统的CRC校验实现方法有软件方法和硬件方法,软件方法主要有直接计算法和查表法,直接计算法适用于所有长度的数据校验,最为灵活,但由于是按位计算,是一种串行计算方法,效率差,速度慢。查表法按字节计算CRC校验,是一种并行计算方法,但是需要提前存储一个256字节的表格,会占用较多的硬件资源。硬件实现方法的优点是计算速度快、效率高,但灵活性较差、不具有通用性,成本高。
[0005]随着通讯技术的发展,对数据的处理效率要求越来越高,越来越多的设计方法选择了 CRC的硬件实现方式,为了克服硬件实现方式灵活性和通用性差的缺点,在处理器中设计CRC校验指令逐渐成为一种趋势,Intel公司提出了一套灵活CRC指令集(CN102096609 A),任给一个CRC多项式和数据,都可以对数据进行多项式规定的CRC校验,其实现过程是首先通过多项式求模运算对CRC多项式进行扩展,得到预计算扩展多项式,然后对数据进行混洗,混洗后利用扩展多项式反复对数据在Galois域上做多项式除法,最后得到CRC校验结果,此种CRC指令集虽然使用灵活,但是实现流程复杂,运行效率较低。
[0006]本DSP主要面向通信领域,使用的CRC校验种类比较固定,所以直接在DSP中设计了 CRC的专用指令,指令设计简单,运行效率高,设计方法与Intel的灵活CRC指令集有本质的区别。通过软件编程调用这些CRC指令即可快速完成CRC校验,实现简单、快速且节省资源。本发明利用SIMD(Single Instruct1n Multiple Data)技术、流水线技术和指令并发技术大幅提高了 CRC校验的速率。同时,本CRC校验的专用指令共享了处理器的部分硬件资源,节省了硬件开销。
【发明内容】
[0007]本发明要解决的技术问题是:本发明设计了一种全新的矢量CRC执行单元,在此基础上完实现了矢量CRC5校验指令、矢量CRC8校验指令、矢量CRC16校验指令、矢量CRC24校验指令、矢量CRC32校验指令的设计以及使用这些指令设计的CRC校验装置。
[0008]本发明解决其技术问题所采用的技术方案是:全新的矢量CRC执行单元由硬件复用管理单元和状态寄存器并行转移单元组成,硬件复用管理单元控制各条矢量CRC指令充分复用硬件资源,可以保证使用较少的硬件资源即可完成多条矢量CRC指令的设计,减少了硬件开销;状态寄存器并行转移单元在输入8bit数据后只需要一个周期即可完成状态寄存器值的转移,运行效率高。
[0009]矢量CRC5校验指令是8路并行CRC校验指令,每次调用该指令可计算8bit数据,输入Sbit数据后通过推导出的CRC5并行计算公式一个周期即可完成CRC计算,将所有数据计算完成后,结果寄存器中剩余的5bit数据即是CRC校验结果。
[0010]矢量CRC8校验指令是8路并行CRC校验指令,每次调用该指令可计算Sbit数据,输入Sbit数据后通过推导出的CRC8并行计算公式一个周期即可完成CRC计算,将所有数据计算完成后,结果寄存器中剩余的8bit数据即是CRC校验结果。
[0011 ] 矢量CRC16校验指令,每次调用该指令可计算Sbit数据,输入Sbit数据后通过推导出的CRC16并行计算公式一个周期即可完成CRC计算,将所有数据计算完成后,结果寄存器中剩余的16bit数据即是CRC校验结果。
[0012]矢量CRC24校验指令,每次调用该指令可计算Sbit数据,输入Sbit数据后通过推导出的CRC24并行计算公式一个周期即可完成CRC计算,将所有数据计算完成后,结果寄存器中剩余的24bit数据即是CRC校验结果。
[0013]矢量CRC32校验指令,每次调用该指令可计算Sbit数据,输入Sbit数据后通过推导出的CRC32并行计算公式一个周期即可完成CRC计算,将所有数据计算完成后,结果寄存器中剩余的32bit数据即是CRC校验结果。
[0014]本方法不仅适用于以上CRC指令的设计,也适用了任意多项式CRC指令的设计,变换CRC的多项式,同样可以利用本方法设计出矢量CRC指令。
[0015]利用本方法不仅可以设计8路并行的CRC指令,也可以设计16路、32路并行的CRC指令,甚至可以设计任意路并行的CRC指令。
[0016]本方法的
【发明内容】
还包括利用这些CRC指令设计的CRC校验装置,利用本方法设计的CRC指令和处理器的读取、存储数据指令完成CRC校验,在此CRC校验装置中充分利用了处理器的流水线技术和多指令并发技术,可以极大的提高CRC校验的效率。
[0017]本发明的有益效果是:一种DSP中矢量CRC校验指令的设计方法,在DSP中设计了全新的矢量CRC执行单元,在此基础上实现了矢量CRC5校验指令、矢量CRC8校验指令、矢量CRC16校验指令、矢量CRC24校验指令、矢量CRC32校验指令以及利用这些专用指令设计的CRC校验装置。此设计方法设计的CRC专用指令,运行效率高,使用简单灵活,通用性强,大大简化了对数据进行CRC校验的程序设计。同时,CRC执行单元包含硬件复用管理单元,可以保证各条CRC指令充分复用DSP的硬件资源,使用较少的硬件资源实现了多条矢量CRC校验指令,节省了硬件资源,降低了成本。另外,本设计方法充分利用了处理器设计中的流水线技术、多指令并发技术和单指令多数据(Single Instruct1n Multiple Data, SIMD)技术,极大地提高了 CRC校验的效率。此方法设计的CRC指令具有吞吐率高、功耗低、成本低等特点。
【专利附图】
【附图说明】
[0018]图1CRC指令实施例的系统框图;
[0019]图2图1所示的处理器实施例的框图;
[0020]图3CRC指令执行单元实施例的框图;
[0021]图4CRC5实现原理框图;
[0022]图5CRC8实现原理框图;
[0023]图6多项式为0x1021的CRC16实现原理框图;
[0024]图7多项式为0x8005的CRC16实现原理框图;
[0025]图8多项式为0x04clldb7的CRC32实现原理框图;
[0026]图9利用本发明设计的CRC指令实现的CRC校验实现流程图;
【具体实施方式】
[0027]为了使本发明所要解决的技术问题、技术方案及有益效果更佳清楚、明白,以下结合附图和实施例,对本发明进行进一步的详细说明,应当理解,此处所描述的具体实施例仅用于解释本发明,并不用于限定本发明。
[0028]本实施例使用的DSP是矢量数字信号处理器,数据总线位宽是16bit,最多支持8个16bit数据的并行乘加运算,拥有矢量viterbi指令,具有超高的数字信号处理性能。本发明使用的DSP并不局限于本实施例所使用的DSP,在任意的DSP中均可按照本设计提供的方法完成CRC指令的设计。
[0029]图1是本发明所设计的CRC指令实施例的系统100框图,系统100包括处理器101、程序存储器106和数据存储器108,处理器通过16bit位宽的总线对程序存储器进行访问,通过16bit位宽的数据总线对数据存储器进行访问。
[0030]处理器101包括程序访问控制器102、数据访问控制器104和CRC执行单元103,程序访问控制器102控制CRC指令的读取,数据访问控制器104控制计算数据的读取和CRC结果的存储,CRC执行单元103是CRC指令的执行单元。
[0031]图2是图1所示的处理器101的实施例框图,框图展示了 CRC指令的执行过程,执行时需要3级流水线,在第一周期,在程序访问控制器的控制下,通过程序数据总线105将程序存储器106中的CRC指令读取到寄存器堆201中,此过程称为流水线的取指阶段。在第二周期,处理器将取出的CRC指令送入指令译码单元202进行译码,将译码结果存储到寄存器堆201的寄存器中,此过程称为流水线的译码阶段。在第三周期,根据译码结果在CRC执行单元103中执行CRC指令,此过程称为流水线的执行阶段,此过程需要一个周期,所以CRC指令为单周期指令。
[0032]本发明使用的DSP支持指令并发执行,在执行CRC的同时可以执行数据的访问指令,在数据访问控制器104的控制下,通过数据总线107将数据从数据存储器108中读取到寄存器堆201中,在CRC的执行阶段将数据载入到CRC执行单元103中,指令执行后将数据缓存到寄存器中,CRC计算完成后将结果通过数据访问指令存储到存储器108中。
[0033]以矢量CRC32指令的实施例为例说明指令的执行过程,在CRC执行单元103中执行的矢量CRC32指令(宏指令)用符号表示为:
[0034]crc32_0x04clldb7L(rI, r2, r3)
[0035]其中,rl、r2、r3是三个16bit的寄存器。矢量CRC32指令具有三个操作数,rl、r2和r3都是源操作数,同时r2和r3也是目的操作数据,CRC校验结果存储在r2和r3中。第一源操作数(“opl”)存储在寄存器堆201中的rl中,第一源操作数是将要进行CRC校验的数据;第二源操作数(“op2”)和第三源操作数(“op3”)存储在寄存器堆201中的r2和r3中,r2存储的是初始CRC余数的低16bit,r3存储的是初始CRC余数的高16bit。同时,r2和r3也是指令的目的操作数,CRC指令运算后的新余数再存回到r2和r3中,r2存储新CRC余数的低16bit,r3存储新CRC余数的高16bit。
[0036]rl是16bit寄存器,而指令crc32_0x04clldb7L是8bit并行指令,只对rl中的低Sbit数据进行CRC计算,使用如下的指令对rl中的高Sbit数据进行CRC计算:crc32_0x04clldb7H(rI, r2, r3)。
[0037]图3显示了 CRC指令的执行过程,在流水线的执行阶段,硬件复用管理单元根据译码结果控制状态寄存器并行转移单元的运行,寄存器并行转移单元将3个源操作数据载入,一个周期完成状态寄存器的转移,状态寄存器中的值即是新的CRC余数,最后将状态寄存器中的值存储到目的寄存器r2和r3中。
[0038]以下以矢量CRC5指令、矢量CRC8指令、矢量CRC16指令和矢量CRC32指令的实施例来说明硬件复用管理单元和状态寄存器并行转移单元的设计。
[0039]CRC5的生成多项式为:g(x) = x5+x2+l.其实现原理框图如图4所示。设Hii为输入信息序列,i = I,2,...,n,Rji表示输入Hii后移位寄存器Rj (j = 0,1,2,3,4)的状态值,由实现原理框图可得:
[0040]R0i = R4(H) ? Hii
[0041]Rli = R0(H)
[0042]R2i = Ri(1-1) ? 尺4(卜1) ? mi
[0043]R3i = R2(1-1)
[0044]R4i = R3(H)
[0045]由此可推导出八路并行CRC校验公式为:
[0046]R08 = Rciq ? R2q ? R3q ? m2 ? m3 ? m5 ? m8
[0047]R18 = R10 ffi R30 ffi R40 ffi Iii1 ? m2 ? m4 ? m7
[0048]R28 = Rw ? R3。? R4。? Iii1 ? m2 ? m5 ? m6 ? m8①
[0049]R38 = R00 ffi R10 ffi R40 ffi Iii1 ? m4 ? m5 ? m7
[0050]R48 = R10 ffi R20 ffi m3 ? m4 ? m6
[0051]写成矩阵形式为:
[0052]R8 = Scrc5R0②
[0053]其中,R8 = [R08, R18, R28, R38, R48]H,表示输入8bit数据后新的CRC5状态寄存器的值,R0 = [R00,R10,R20, R30, R40, In1, m2, m3, m4, m5, m6, m7, m8, ]H,是由 CRC 初始余数和 CRC 校验数据组合成的向量,
【权利要求】
1.一种矢量CRC检验指令的设计方法,设计了一种全新的矢量CRC执行单元,在此基础上实现了矢量CRC5校验指令、矢量CRC8校验指令、矢量CRC16校验指令、矢量CRC24校验指令、矢量CRC32校验指令的设计以及使用这些指令设计的CRC校验装置。
2.如权利要求1所述的一种矢量CRC检验指令的设计方法,其特征在于,所述矢量CRC执行单元包括硬件复用管理单元和状态寄存器并行转移单元,硬件复用管理单元控制各条矢量CRC指令充分复用硬件资源,可以保证使用较少的硬件资源即可完成多条矢量CRC指令的设计,减少了硬件开销;状态寄存器并行转移单元在输入8bit数据后只需要一个周期即可完成状态寄存器值的转移,执行时间短,运行效率高。
3.如权利要求1所述的一种矢量CRC检验指令的设计方法,其特征在于,所述的矢量CRC5校验指令:是一条8路并行CRC校验指令,每次将初始CRC余数和8bit数据送入CRC执行单元,一个周期后即可得出新的CRC余数,将所有数据计算完成后,状态寄存器中剩余的5bit数据即是CRC校验结果。
4.如权利要求1所述的一种矢量CRC检验指令的设计方法,其特征在于,所述的矢量CRC8校验指令:是一条8路并行CRC校验指令,每次将初始CRC余数和8bit数据送入CRC执行单元,一个周期后即可得出新的CRC余数,将所有数据计算完成后,状态寄存器中剩余的8bit数据即是CRC校验结果。
5.如权利要求1所述的一种矢量CRC检验指令的设计方法,其特征在于,所述矢量CRC16校验指令:是一条8路并行CRC校验指令,每次将初始CRC余数和8bit数据送入CRC执行单元,一个周期后即可得出新的CRC余数,将所有数据计算完成后,状态寄存器中剩余的16bit数据即是CRC校验结果。
6.如权利要求1所述的一种矢量CRC检验指令的设计方法,其特征在于,所述的矢量CRC24校验指令:是一条8路并行CRC校验指令,每次将初始CRC余数和8bit数据送入CRC执行单元,一个周期后即可得出新的CRC余数,将所有数据计算完成后,状态寄存器中剩余的24bit数据即是CRC校验结果。
7.如权利要求1所述的一种矢量CRC检验指令的设计方法,其特征在于,所述的矢量CRC32校验指令:是一条8路并行CRC校验指令,每次将初始CRC余数和8bit数据送入CRC执行单元,一个周期后即可得出新的CRC余数,将所有数据计算完成后,状态寄存器中剩余的32bit数据即是CRC校验结果。
8.如权利要求1所述的一种矢量CRC检验指令的设计方法,其特征在于,本设计方法不仅适用于设计如权利要求1所述的各条CRC指令,也适用于设计任意多项式的CRC指令,按本文提供的设计方法可以设计出任意多项式的CRC校验指令。
9.如权利要求1所述的一种矢量CRC检验指令的设计方法,其特征在于,本设计方法可以设计如权利要求2至权利要求6所述的8路并行的CRC指令,还可以设计任意路并行的CRC指令。
10.如权利要求1所述的一种矢量CRC检验指令的设计方法,其特征在于,所述的CRC校验装置:利用本方法设计的CRC指令和处理器的读取、存储数据指令完成CRC校验,在此CRC校验装置中充分利用了流水线技术和多指令并发技术,可以极大的提高CRC校验的效率。
【文档编号】G06F11/10GK104133736SQ201410366239
【公开日】2014年11月5日 申请日期:2014年7月29日 优先权日:2014年7月29日
【发明者】刘勇, 陶建平, 王和国, 孙振玮, 张永攀 申请人:江苏宏云技术有限公司