《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > 并行CRC-32校驗碼生成算法研究及其實現(xiàn)

并行CRC-32校驗碼生成算法研究及其實現(xiàn)

2008-03-19
作者:郭熙業(yè), 蘇紹 , 王躍科

  摘 要: 在分析串行結(jié)構(gòu)CRC生成算法的基礎上,提出了一種高效的8bit并行CRC-32校驗碼生成算法。利用該算法在特定FPGA芯片上實現(xiàn)了任意字節(jié)的CRC-32校驗碼的生成模塊,該模塊僅占用93個邏輯單元,最高數(shù)據(jù)吞吐量" title="數(shù)據(jù)吞吐量">數(shù)據(jù)吞吐量可達2 400Mbps。
  關鍵詞: 并行 CRC-32? 狀態(tài)轉(zhuǎn)移矩陣

?

  隨著網(wǎng)絡數(shù)據(jù)業(yè)務的快速增長,以太網(wǎng)作為局域網(wǎng)的發(fā)展主流經(jīng)歷了從10Mbps、100Mbps到1Gbps的過程,目前正向10Gbps以太網(wǎng)方向發(fā)展。千兆以太網(wǎng)數(shù)據(jù)速率達到了Gbps級,若輔以其他技術,就可以支持多媒體應用,因而以太網(wǎng)化應用領域日益廣泛。然而,千兆以太網(wǎng)中物理層具有潛在的不穩(wěn)定性,例如,在依賴鏈路和數(shù)據(jù)特性的基礎上,在發(fā)送幀中加入足夠的冗余信息,就能夠在接收端檢測出錯誤并安排受損幀的重發(fā)。雖然循環(huán)冗余校驗CRC(Cyclic Redundancy Check)具有強大的檢錯能力并在以太網(wǎng)的數(shù)據(jù)鏈路層MAC部分實現(xiàn)中得到應用。但傳統(tǒng)意義上串行移位結(jié)構(gòu)的CRC,其數(shù)據(jù)吞吐量遠遠達不到千兆以太網(wǎng)1Gbps的要求。本文在深入分析串行結(jié)構(gòu)CRC生成算法的基礎上,設計并實現(xiàn)了一種針對8bit寬度數(shù)據(jù)輸入的并行CRC-32校驗碼生成算法。
1 串行結(jié)構(gòu)CRC-32校驗碼生成方法的分析
  CRC校驗碼的編碼方法是用待發(fā)送的二進制數(shù)據(jù)t(x)乘上x r再除以生成多項式g(x)完成的,最后的余數(shù)即為CRC校驗碼,其中,r為生成多項式的階數(shù)。根據(jù)上述原理,在串行結(jié)構(gòu)的實現(xiàn)方法" title="實現(xiàn)方法">實現(xiàn)方法中采用移位寄存器構(gòu)成除法電路,寄存器的數(shù)量與生成多項式g(x)的階數(shù)一致。數(shù)據(jù)t(x)·x r以二進制位方式依次串行輸入除法電路中,當數(shù)據(jù)輸入完畢時,除法電路中寄存器的值即為生成的CRC校驗碼。
  千兆以太網(wǎng)協(xié)議中規(guī)定,采用CRC-32的方式對數(shù)據(jù)進行編碼,其生成的多項式為:x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1。對應的串行結(jié)構(gòu)CRC-32校驗碼生成原理如圖1所示。


  當t(x)為8bit時,可將數(shù)據(jù)表示為多項式:t7x7+t6x6+t5x5+t4x4+t3x3+t2x2+t1x1+t0,多項式的系數(shù)即為待編碼的二進制數(shù)據(jù)。串行結(jié)構(gòu)內(nèi)寄存器的初始值為‘0’,電路開始工作后,二進制數(shù)據(jù)序列(t7,t6,t5,t4,t3,t2,t1,t0,0,0,……,0)按照從左至右的次序輸入除法電路(其中’0’的個數(shù)為32),當數(shù)據(jù)序列輸入完畢時,除法電路中寄存器的值即為生成的CRC-32校驗碼[1]。該電路具有以下特點:
  (1)由于寄存器的初始值為零,因此,在二進制數(shù)據(jù)序列(t7,t6,t5,t4,t3,t2,t1,t0)輸入除法電路過程中,D31的反饋值始終為0,從而保證了二進制序列在數(shù)據(jù)移位過程中不受反饋值‘異或’運算的影響。當(t7,t6,t5,t4,t3,t2,t1,t0)輸入完畢時,寄存器(D0,D1,D2,D3,D4,D5,D6,D7)的值對應為:(t0,t1,t2,t3,t4,t5,t6,t7),其他寄存器的值為‘0’。
  (2)在(t7,t6,t5,t4,t3,t2,t1,t0)輸入完畢后,隨后輸入32個‘0’,由于‘0’在‘異或’運算中不起作用,因此,輸入‘0’的過程可認為是除法電路在沒有輸入數(shù)據(jù)的情況下進行自反饋" title="自反饋">自反饋式的移位運算。
  因為在千兆以太網(wǎng)中,數(shù)據(jù)傳輸速率達到了Gbps級,如果采用每個時鐘周期計算1bit數(shù)據(jù)的串行結(jié)構(gòu),很難實現(xiàn)CRC校驗碼的生成。因此,有必要研究并行的CRC校驗碼編碼方法。
2 8bit并行CRC-32校驗碼生成方法的原理
  自反饋的移位運算可以采用狀態(tài)轉(zhuǎn)移矩陣" title="狀態(tài)轉(zhuǎn)移矩陣">狀態(tài)轉(zhuǎn)移矩陣表示,i+1次移位后寄存器的狀態(tài)Qi+1與i次移位后寄存器的狀態(tài)Qi之間的關系可通過狀態(tài)矩陣A表示為:Qi+1=AQi,進一步又可得到第i次的狀態(tài)Qi可通過初始狀態(tài)Q0表示為:
  Qi=AiQ0        (1)
  CRC-32的狀態(tài)轉(zhuǎn)移矩陣A如圖2所示。


  結(jié)合串行結(jié)構(gòu)的特點(2)及公式(1),可得出:當二進制序列(t7,t6,t5,t4,t3,t2,t1,t0,0,0,……,0)輸入完畢時,寄存器的狀態(tài)Q即為生成的CRC-32校驗碼,可表示為:
  Q=A32Q0        (2)
  由于自反饋移位運算從(t7,t6,t5,t4,t3,t2,t1,t0)輸入完畢開始,因此,根據(jù)串行結(jié)構(gòu)的特點(1)可知,初始狀態(tài)Q0為(t0,t1,t2,t3,t4,t5,t6,t7,0,0,……,0)T,其中‘0’的數(shù)量為24。不難發(fā)現(xiàn),由于Q0的后24項均為‘0’,在矩陣的×、+運算中不影響運算結(jié)果,因此,Q的計算可簡化為:
  Q=BC          (3)
式中,矩陣B為矩陣A32的前8列,而C為(t0,t1,t2,t3,t4,t5,t6,t7)T
3 并行算法的實現(xiàn)
  公式(3)即為輸入8bit數(shù)據(jù)情況下CRC-32校驗碼的生成公式。在采用該公式進行校驗碼計算時,首先由MATLAB等數(shù)學工具計算出A32(其中的加法運算為模2加),然后從計算結(jié)果中取出前8列得到B,最后再根據(jù)公式(3)計算得到Q。采用VHDL語言實現(xiàn)公式(3),其程序如圖3所示。其中,t[7..0]為輸入的8bit數(shù)據(jù),CRC[31..0]為生成的校驗碼。程序中考慮了輸入數(shù)據(jù)及輸出數(shù)據(jù)的倒序操作。


  利用上述并行算法,輔以4B的移位寄存器,便可實現(xiàn)多字節(jié)的CRC-32校驗碼的生成。用VHDL語言對其進行描述如下:
entity CRC is
  port(
    clk ?:in std_logic;
    crc_en?:in?std_logic;
    rst??:in?std_logic;
    data_in? :in std_logic_vector(7 downto 0);
    fcs_out?:out std_logic_vector(31 downto 0)
    );
end CRC;
architecture check_crc of CRC is
signal ?fcs?: std_logic_vector(31 downto 0);
constant ini_fcs : std_logic_vector(31 downto 0):=x
'FFFFFFFF';
signal? t : std_logic_vector(7 downto 0);?????????????
begin
t<=fcs xor data_in;
process(crc_en,rst,clk)
variable fcs_shifted?:?std_logic_vector(31 downto 0);
variable crc? :?? std_logic_vector(31 downto 0);
begin?
if clk'event and clk='1' then
?if crc_en = '1' then
??if rst='1' then?
???fcs?<=?ini_fcs;
???fcs_shifted :=?(others => '-');
???crc_out? :=? (others => '-');
??else
???fcs_shifted(23 downto 0):= fcs(31 downto 8);
???fcs_shifted(31 downto 24):=x'00';?
???fcs?<=?fcs_shifted xor crc;???
??end if;???
??fcs_out?<=?(others => '-');???
?elsif crc_en = '0' then
??fcs_out??<=?not fcs;
??fcs???<=?(others => '-');
??fcs_shifted :=?(others => '-');
??crc_out???? :=? (others => '-');
?end if;
end if;?
end process;?
end check_crc;
  程序中:‘clk’代表時鐘信號,‘crc_en’代表使能信號,‘rst’代表復位信號,‘data_in’代表輸入的任意的8bit數(shù)據(jù),‘fcs_out’代表生成的校驗碼。另外,程序中‘crc’ 和 ‘t’滿足圖3所示的運算關系。由于這部分描述在前面已經(jīng)介紹過,因此在程序中省略。
  目前,該方法已在Altera公司的StratixGX40系列FPGA芯片上實現(xiàn),僅占用93個邏輯單元,便可實現(xiàn)任意字節(jié)的CRC-32校驗碼的計算,最高數(shù)據(jù)吞吐量達到2 400Mbps,完全能夠滿足千兆以太網(wǎng)的數(shù)據(jù)傳輸速度要求。圖4為輸入特定10個字節(jié)時校驗碼生成模塊的仿真結(jié)果,生成的校驗碼與低速率情況下采用串行結(jié)構(gòu)生成的校驗碼完全一致。


  本文以千兆以太網(wǎng)CRC-32校驗碼的生成算法作為研究對象,深入分析了串行結(jié)構(gòu)的實現(xiàn)方法,并根據(jù)數(shù)據(jù)‘0’在異或運算中不影響運算結(jié)果的特性,總結(jié)出串行結(jié)構(gòu)實現(xiàn)方法的兩個特點,并在此基礎上提出一種高效的8bit并行CRC-32校驗碼生成算法。該算法與傳統(tǒng)的利用狀態(tài)轉(zhuǎn)移矩陣實現(xiàn)并行運算的方法相比[3],其狀態(tài)轉(zhuǎn)移方程更加簡單,校驗碼可由輸入的8bit數(shù)據(jù)經(jīng)過‘異或’運算直接得到,從而更加便于硬件實現(xiàn)。
參考文獻
[1] ?王新梅,肖國鎮(zhèn).糾錯碼—原理與方法[M].西安:電子科技大學出版社,1991.
[2] ?CUNNINGHAM D G, PH.D, LANE W G, et al. 千兆以太網(wǎng)[M].北京:清華大學出版社,2000.
[3] ?NG S L, DEWAR B. Parallel realization of ATM cell header CRC[J]. Communications, 1996,(19):257-263.
[4] ?朱榮華.一種CRC并行計算原理及實現(xiàn)方法[J].電子學報,1999,27(4):143-145.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權者。如涉及作品內(nèi)容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 久久久久国产综合AV天堂| 人妻无码中文字幕| 18禁美女黄网站色大片免费观看 | 亚洲欧美日韩色图| 翁止熄痒禁伦短文合集免费视频| 国产精品va在线观看无| 亚洲理论电影在线观看| 色综合久久88色综合天天| 国产精品极品美女免费观看| 一本色道久久88精品综合| 日韩精品专区在线影院重磅| 亚洲精品国产精品国自产网站| 老司机美女一级毛片| 国产日韩欧美二区| 99rv精品视频在线播放| 成人免费777777| 久久国产精品一区免费下载| 欧美日韩中文视频| 免费h片在线观看网址最新| 草草影院ccyy国产日本欧美| 国产真人无码作爱视频免费| 99精品国产在热久久| 成人深夜视频在线观看| 久久精品一区二区三区四区| 欧美成人性色生活片| 人妻少妇精品视频一区二区三区| 老公和他朋友一块上我可以吗| 国产成人天天5g影院| 2021麻豆剧果冻传媒影视| 天天曰天天干天天操| 中文亚洲av片不卡在线观看| 日本特黄特色特爽大片老鸭| 亚洲av永久无码嘿嘿嘿| 欧美黑人乱大交| 免费**毛片在线播放直播| 精品欧美成人高清在线观看 | 国产无遮挡又黄又爽网站 | 最近日本免费观看高清视频| 亚洲欧美成人网| 狠狠色丁香婷婷久久综合蜜芽| 午夜时刻免费入口|