一種用于128位并行數(shù)據(jù)的crc校驗(yàn)矩陣生成方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于可靠性編解碼領(lǐng)域,涉及一種并行數(shù)據(jù)的CRC校驗(yàn)矩陣生成方法,具 體涉及一種用于128位并行數(shù)據(jù)的CRC校驗(yàn)矩陣生成方法。
【背景技術(shù)】
[0002] 為保證數(shù)據(jù)通信的可靠性,通常在數(shù)據(jù)傳輸中采用CRC編碼對(duì)被傳輸數(shù)據(jù)進(jìn)行校 驗(yàn)。目前實(shí)現(xiàn)CRC編碼方式多樣,有串行編碼方式、查表法和公式法(也稱推導(dǎo)法)等。
[0003] 串行編碼實(shí)現(xiàn)方式簡(jiǎn)單硬件消耗很小,但是由于只能串行處理數(shù)據(jù),數(shù)據(jù)傳輸速 率非常低。查表法需要存儲(chǔ)模塊來(lái)存儲(chǔ)表項(xiàng),其硬件消耗大,并且難以實(shí)現(xiàn)高位寬的并行數(shù) 據(jù)處理。公式法目前在以太網(wǎng)和PCIe等高速并行通信中廣泛應(yīng)用,但其迭代推導(dǎo)方式對(duì)于 高位寬數(shù)據(jù)(大于16)來(lái)講,推導(dǎo)比較復(fù)雜,因此一般采用基于公式法的級(jí)聯(lián)結(jié)構(gòu)解決并行 寬位數(shù)據(jù)的CRC編碼(即采用多個(gè)窄位CRC編碼結(jié)構(gòu)級(jí)聯(lián)實(shí)現(xiàn)并行寬位數(shù)據(jù)的CRC編碼, 如采用多個(gè)面向8位數(shù)據(jù)編碼的CRC模塊,通過(guò)級(jí)聯(lián)實(shí)現(xiàn)對(duì)64并行數(shù)據(jù)的CRC編碼),級(jí)聯(lián) 結(jié)構(gòu)在對(duì)寬位并行數(shù)據(jù)(如128位)進(jìn)行編解碼時(shí)延時(shí)較大,無(wú)法滿足實(shí)際的應(yīng)用需求。
[0004] 當(dāng)前,PCIe 3. 0(8GT/s)在物理層中使用128b/130b編碼方式以實(shí)現(xiàn)負(fù)載均衡,在 單周期內(nèi)實(shí)現(xiàn)對(duì)128位并行數(shù)據(jù)的CRC校驗(yàn)是保證高速串行通信效率的前提。串行編碼、 查表法、公式法及基于公式法的級(jí)聯(lián)結(jié)構(gòu)均無(wú)法高效率的實(shí)現(xiàn)對(duì)128并行數(shù)據(jù)的CRC編解 碼。
【發(fā)明內(nèi)容】
[0005] 針對(duì)現(xiàn)有技術(shù)中存在的問(wèn)題,本發(fā)明提供一種用于128位并行數(shù)據(jù)的CRC編解碼, 減少了級(jí)聯(lián)結(jié)構(gòu)帶來(lái)的鏈路延遲,實(shí)現(xiàn)高速串行通信中接收或發(fā)送數(shù)據(jù)的實(shí)時(shí)校驗(yàn),用于 128位并行數(shù)據(jù)的CRC校驗(yàn)矩陣的生成方法。
[0006] 本發(fā)明是通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn):
[0007] -種用于128位并行數(shù)據(jù)的CRC校驗(yàn)矩陣生成方法,其特征在于,包括如下步驟,
[0008] 1)根據(jù)串行編碼CRC的編解碼原理,得到當(dāng)前CRC值與當(dāng)前數(shù)據(jù)輸入和前一級(jí) CRC值的關(guān)系;
[0009] 2)根據(jù)當(dāng)前CRC值與當(dāng)前數(shù)據(jù)輸入和前一級(jí)CRC值的關(guān)系,通過(guò)迭代得到8位并 行數(shù)據(jù)輸入的當(dāng)前CRC值與前一級(jí)CRC值和當(dāng)前8位并行數(shù)據(jù)輸入的關(guān)系;
[0010] 3)根據(jù)步驟2)中得到的CRC前后關(guān)系,提取出32x32的前一級(jí)CRC參數(shù)矩陣和 8x32的當(dāng)前數(shù)據(jù)輸入?yún)?shù)矩陣;
[0011] 4)根據(jù)步驟3)中的參數(shù)矩陣,得到8位并行數(shù)據(jù)輸入的當(dāng)前CRC值與前一級(jí)CRC 值和當(dāng)前8位并行數(shù)據(jù)輸入的相應(yīng)表達(dá)式,對(duì)該表達(dá)式進(jìn)行四次迭代運(yùn)算后,得到輸入32 數(shù)據(jù)后的CRC值及其對(duì)應(yīng)的表達(dá)式;
[0012] 5)從輸入32數(shù)據(jù)后的CRC值的表達(dá)式中提取出前一級(jí)CRC值和當(dāng)前32為數(shù)據(jù)輸 入的參數(shù)矩陣;將該參數(shù)矩陣中的奇數(shù)變?yōu)?,偶數(shù)變?yōu)椹?得到32位并行的當(dāng)前CRC值與 前一級(jí)CRC值和當(dāng)前32位并行數(shù)據(jù)輸入的關(guān)系表達(dá)式;
[0013] 6)對(duì)步驟5)中得到的關(guān)系表達(dá)式按照步驟4)和5)的方法進(jìn)行四次迭代,得到 128并行數(shù)據(jù)的當(dāng)前CRC值與前一級(jí)CRC值和當(dāng)前128位數(shù)據(jù)輸入的關(guān)系矩陣;
[0014] 7)將步驟6)得到的關(guān)系矩陣用于128并行數(shù)據(jù)編碼的實(shí)時(shí)校驗(yàn)。
[0015] 優(yōu)選的,步驟1)中,當(dāng)前CRC值與當(dāng)前數(shù)據(jù)輸入和前一級(jí)CRC值的關(guān)系為,
[0017] 其中,為第j+Ι次數(shù)據(jù)輸入后的第i+Ι位CRC值,^為第j次數(shù)據(jù)輸入后的 第i位CRC值,g1+1為CRC生成多項(xiàng)式中第i+Ι位的系數(shù),d j+1為第j+Ι次的數(shù)據(jù)輸入,遂 為第j次數(shù)據(jù)輸入后的第31位CRC值,j為自然數(shù),i = 0, 1. .. 31。
[0018] 進(jìn)一步,步驟2中,8位并行數(shù)據(jù)輸入的當(dāng)前CRC值與前一級(jí)CRC值和當(dāng)前8位并 行數(shù)據(jù)輸入的關(guān)系為,
[0020] 其中,碌為當(dāng)前CRC值的第i位,cf為前一級(jí)CRC值的第i位(i = 0, 1··· 31,j = 0, I. . . 7),4為當(dāng)前的數(shù)據(jù)輸入的第j位;\和y j為該關(guān)系中cf和4的參數(shù),由IEEE802. 3 中的CRC-32生成多項(xiàng)式?jīng)Q定。
[0021] 再進(jìn)一步,步驟3)中提取參數(shù)矩陣時(shí),
[0022] 設(shè)由步驟2)得到的8位并行數(shù)據(jù)輸入的當(dāng)前CRC值為
[0024] 將步驟2)包含參數(shù)\與y郝C,1帶入到列向量〇,其中i = 0, 1...31,j = 〇, 1. . . 7,得到
[0026] 按照上式對(duì)應(yīng)關(guān)系提取出參數(shù)\和y ,,得到一個(gè)32x40的矩陣⑶4(]X32T,轉(zhuǎn)置后得 到40x32的矩陣OT 4idx32,將⑶4(]Χ32按照X JP y j分割開(kāi),得到兩個(gè)分別關(guān)于前一級(jí)CRC值 €°?1,(4~4]和當(dāng)前數(shù)據(jù)輸入值,0|二[?...01!,]的參數(shù)矩陣02(: 32><32和02(:8><32。
[0027] 再進(jìn)一步,步驟4)中,得到8位并行數(shù)據(jù)輸入的當(dāng)前CRC值與前一級(jí)CRC值和當(dāng) 前8位并行數(shù)據(jù)輸入的相應(yīng)表達(dá)式為,
[0029] 根據(jù)表達(dá)式中C1、(:°和D 1之間的關(guān)系,得到輸入兩次8位數(shù)據(jù),即輸入16位并行 數(shù)據(jù)后的當(dāng)前CRC值為,
[0031] 采用同樣處理,繼續(xù)迭代兩次后得到輸入四次8位數(shù)據(jù),即輸入32位并行數(shù)據(jù)后 的CRC值為,
[0033] 將異或關(guān)系轉(zhuǎn)換為數(shù)學(xué)中相加,可得到(:4與C °以及D \ D2、D3、D4的關(guān)系為,
[0035] 其中,C°為前一級(jí)的CRC值,
[0036] D1、D2、D3、D4分別為第一、二、三、四次輸入的8位數(shù)據(jù),
[0041] D2CSX3AD4 的參數(shù)矩陣。
[0042] 再進(jìn)一步,步驟5)中,根據(jù)步驟4)中C4表達(dá)式,令C °的參數(shù)矩陣為C2Cfx32,D1 的參數(shù)矩陣為F8U,. D2的參數(shù)矩陣為.校32,D3的參數(shù)矩陣為拉32,D 4的參數(shù)矩陣為、,則
[0044] 對(duì)C2C3322x32、咬32、if32、i^、% 32進(jìn)行計(jì)算,將得到的矩陣中奇數(shù)變成1,偶 數(shù)變成〇 ; D2C^32為關(guān)于當(dāng)前32位并行數(shù)據(jù)的參數(shù)矩陣;
[0046] 得到32位并行的當(dāng)前CRC值與前一級(jí)CRC值和當(dāng)前32位并行數(shù)據(jù)輸入的關(guān)系
其中 D32= [D1?,D4]。
[0047] 再進(jìn)一步,步驟6)中,將關(guān)系表達(dá)式,
[0049] 按照步驟4)和步驟5)的方法迭代計(jì)算最終得到128并行數(shù)據(jù)的當(dāng)前CRC值C128 與前一級(jí)CRC值C°和當(dāng)前128位數(shù)據(jù)輸入的關(guān)系為,
[0051] 其中,為關(guān)于C°的參數(shù)矩陣,D2CH2為關(guān)于D128的參數(shù)矩陣。與現(xiàn)有技 術(shù)相比,本發(fā)明具有以下有益的技術(shù)效果:
[0052] 本發(fā)明所述的一種用于128位并行數(shù)據(jù)校驗(yàn)矩陣生成方法,該方法提供了直接對(duì) 128并行數(shù)據(jù)進(jìn)行CRC編解碼的校驗(yàn)矩陣,從而避免使用延時(shí)較大的級(jí)聯(lián)結(jié)構(gòu),提高了 128 位并行數(shù)據(jù)的CRC編解碼效率,實(shí)現(xiàn)高速串行通信中接收或發(fā)送數(shù)據(jù)的實(shí)時(shí)校驗(yàn)?;谠?校驗(yàn)矩陣的CRC電路可以用于PCIe 3. 0物理層中的128位并行數(shù)據(jù)的實(shí)時(shí)CRC校驗(yàn),保證 了數(shù)據(jù)的高效率傳輸。
【附圖說(shuō)明】
[0053] 圖1為本發(fā)明的校驗(yàn)矩陣生成方法流程圖。
【具體實(shí)施方式】
[0054] 下面結(jié)合具體的實(shí)施例對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說(shuō)明,所述是對(duì)本發(fā)明的解釋而 不是限定。
[0055] 本發(fā)明的目的在于通過(guò)使用校驗(yàn)矩陣對(duì)128位并行數(shù)據(jù)直接進(jìn)行CRC編解碼,避 免使用級(jí)聯(lián)結(jié)構(gòu)的CRC編解碼方法,從而提高128位并行數(shù)據(jù)的CRC編解碼效率。
[0056] 本發(fā)明所述的用于128位并行數(shù)據(jù)的CRC校驗(yàn)矩陣生成方法包括如下步驟:
[0057] 1)根據(jù)串行編碼CRC的編解碼原理,可知當(dāng)前CRC值與當(dāng)前數(shù)據(jù)輸入和前一級(jí) CRC值的關(guān)系為
為第j+Ι次數(shù)據(jù)輸入后的第i+Ι位 CRC值,為第j次數(shù)據(jù)輸入后的第i位CRC值,g1+1為CRC生成多項(xiàng)式中第i+Ι位的系 數(shù),d]+1為第j+Ι次的數(shù)據(jù)輸入,4為第j次數(shù)據(jù)輸入后的第31位CRC值,j為自然數(shù),i = 0, 1. · · 31) 〇
[0058] 根據(jù) IEEE802. 3 中的 CRC-32 所規(guī)定的 CRC-32 生成多項(xiàng)式 G(x) = x32+x26+x23+x22 +x16+x12+xn+x10+xs+x 7+x5+x4+x2+x+lj gi對(duì)應(yīng)值 g3i= 0, g3〇= 0."g〇= Io
[0059] 2)由步驟I)的迭代關(guān)系可推導(dǎo)出8位并行數(shù)據(jù)輸入的 當(dāng)前CRC值與前一級(jí)CRC值和當(dāng)前8位并行數(shù)據(jù)輸入的關(guān)系為
,其中4為當(dāng)前CRC值的第i位, cf為前一級(jí)CRC值的第i位(i =0, 1... 31,j =0, 1...7),?ζ為當(dāng)前的數(shù)據(jù)輸入的第j位
的參數(shù),由IEEE802. 3中的CRC-32生成多項(xiàng)式?jīng)Q定)。
[0060] 由步驟1)所述關(guān)系式迭代得到的8位并行數(shù)據(jù)輸入的當(dāng)前CRC值與前一級(jí)CRC 值和當(dāng)前8