<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于FPGA的循環(huán)冗余校驗碼設計

基于FPGA的循環(huán)冗余校驗碼設計

作者:周亮 余小平 時(shí)間:2017-03-06 來(lái)源:電子產(chǎn)品世界 收藏

     在現代數字通信中,要求信息在傳輸過(guò)程中造成的數字差錯必須足夠低。但由于通信信道存在噪聲和傳輸特性不 理想等原因造成了信號
的碼間串擾,導致信息在傳輸過(guò)程產(chǎn) 生差錯。為了最大限度地保證通信過(guò)程中信息的完整性,需 要采用信道編碼技術(shù)對可能發(fā)生的差錯進(jìn)行有效地控制,而 循環(huán)冗余就是其中一個(gè)最有效的編碼技術(shù)。

本文引用地址:http://dyxdggzs.com/article/201703/344838.htm


1  循環(huán)冗余基本思想
循環(huán)冗余是一種校錯能力很強且使用非常廣泛 的差錯檢驗方法。循環(huán)冗余校驗碼采用在發(fā)送的有用碼后面 加入校驗碼來(lái)實(shí)現數字通信傳輸過(guò)程中數據的差錯檢測,通 常的構成可以描述為:K位的有效信息數據串和R位的循環(huán) 冗余校驗碼并在一起傳輸。
1.1 循環(huán)冗余校驗碼生成基本原理
循環(huán)冗余校驗碼(亦稱(chēng)CRC碼)在通信信號校錯里廣泛使 用。其基本原理是,在發(fā)送端:將要發(fā)送的數據串序列當作 一個(gè)多項式T(x)的系數(比如,多項式為T(mén)(x)=x5+x3+x+1,則 此多項式的系數就為101011,同時(shí)可以自定義一個(gè)k次冪的 稱(chēng)為生成多項式的多項式G(x),為了使原來(lái)的數據串序列在 后面加入校驗碼,就必須使其向左移,所以用Xk乘以T(x), 根據對二進(jìn)制乘法的理解,得到的T(x)Xk,能起到把T(x) 原有數據串序列向左移動(dòng)k位的結果。為了得到校驗碼,用 G(x)作除數,T(x)Xk作被除數,相除得到一個(gè)余數多項式 R(x)。然后將余數多項式R(x)并在待發(fā)送的數據串序列后 面,把這串新的數據串序列作為發(fā)送序列發(fā)送。在接收端: 再次使用自定義的生成多項式G(x)去除接收到的數據串序列多項式,如果相除所得到的余數多項式和在發(fā)送端計算得到的余數多項式相同,則表示信號傳輸正常,沒(méi)有出現差錯;
如果兩者不相同,就表明信號傳輸錯誤,就必須檢查各方面 因素,重新發(fā)送信息,直到兩者相同為止。為了更直觀(guān)地說(shuō)明循環(huán)冗余校驗碼的生成過(guò)程、校驗 過(guò)程,以8位的有效信息數據串和4位的循環(huán)冗余校驗碼并在 一起傳輸為例。

生成過(guò)程:

(1)假設要發(fā)送的數據串序列為11011101。

(2)自定義的生成多項式G
(x)=x4+x3+x+1,其中k=4,相對應的序列為11011。
(3)把待發(fā)送的數據串序列向左移動(dòng)4位,后面補0,從 而得到新的數據串序列為110111010000。
(4)使用模2除法,用生成多項式序列去除新生成的數據 串序列。即

這樣得到了余數多項式R(x)對應序列為1010。
( 5 ) 將 余 數 多 項 式 R ( x ) 對 應 序 列 并 到 新 數 據 串 序 列 后 面 , 得 到 帶 有 循 環(huán) 冗 余 校 驗 碼 的 數 據 串 序 列 :
110111011010。 校驗過(guò)程: 假 如 信 息 在 傳 輸 過(guò) 程 中 沒(méi) 有 受 到 影 響 而 發(fā) 生 錯 誤 的話(huà),接收到的帶有循環(huán)冗余校驗碼的數據串序列必定可以被 在發(fā)送端所自定義的生成多項式整除,也就是:

1.2  生成多項式的注意事項 (1)生成多項式的最高位和最低位必須為1。 (2)當所要傳輸的數據序列任何一位發(fā)生錯誤時(shí),用生
成多項式做模2除法(即加法不進(jìn)位,減法不借位,實(shí)際上就 是數字邏輯里的“異或”操作)后要使相除后的余數不為0。 (3)對于不同的位產(chǎn)生錯誤時(shí),要使余數也不同。
(4)對余數繼續做模2除法時(shí),要使余數循環(huán)。

2  Verilog HDL核心程序
2.1  Verilog HDL實(shí)現循環(huán)冗余校驗碼的生成代碼

其中DXS表示生成多項式PROCESS(clk,rst_n )
VARIABLE dzl: STD_LOGIC_VECTOR(16 DOWNTO 0); VARIABLE sdzl:     S T D _ L O G I C _ V E C T O R ( 1 1
DOWNTO 0); BEGIN
IF (clk'event and clk='1') THEN IF    rst_n='0' THEN hsd_r<='0';
dcrco_r<=B"0_0000_0000_0000_0000"; ELSIF    dload='1'  THEN
dzl   :=sdata&'0'&'0'&'0'&'0'&'0';
sdzl  :=sdata;
IF dzl(16)='1' THEN
dzl(16 DOWNTO 11):=dzl(16 DOWNTO 11) XOR DXS; END IF;
IF dzl(15)='1' THEN
dzl(15 DOWNTO 10):=dzl(15 DOWNTO 10) XOR DXS; END IF;
IF dzl(14)='1' THEN
dzl(14 DOWNTO 9):=dzl(14 DOWNTO 9) XOR DXS; END IF;
IF dzl(5)='1' THEN

圖1  循環(huán)冗余校驗碼的生成、校驗仿真
dzl(5 DOWNTO 0):=dzl(5 DOWNTO 0) XOR DXS; END IF;
dcrco_r<=sdzl & dzl(4 DOWNTO 0);

hsd_r<='1'; ELSE hsd_r<='0'; END IF; END IF;
END PROCESS;
2.2  循環(huán)冗余校驗碼的校驗代碼

PROCESS(clk,rst_n)

VARIABLE rdzl:     STD_LOGIC_VECTOR(16 DOWNTO 0); BEGIN
IF (clk'event and clk='1') THEN IF rst_n='0'    THEN
rd_r    <=X"000";

dfsh_r    <='0';

err_r <='0';

ELSIF    hrecv='1'  THEN

rdcrc_r    <=datacrci;

rdzl         :=datacrci(16 DOWNTO 0); IF    rdzl(16)='1'     THEN
rdzl(16 DOWNTO 11):=rdzl(16 DOWNTO 11) XOR DXS; END IF;
IF    rdzl(15)='1'     THEN

rdzl(15 DOWNTO 10):=rdzl(15 DOWNTO 10) XOR DXS; END IF;
IF    rdzl(14)='1'     THEN

rdzl(14 DOWNTO 9):=rdzl(14 DOWNTO 9) XOR DXS; END IF;
IF rdzl(5)='1' THEN

rdzl(5 DOWNTO 0):=rdzl(5 DOWNTO 0) XOR DXS; END IF;
IF    rdzl(5 DOWNTO 0)="000000"
THEN

rd_r    < = r d c r c _ r ( 1 6DOWNTO 5);
dfsh_r    <='1';

err_r<='0'; ELSE rd_r<=X"000"; err_r<='1'; END IF;
ELSE dfsh_r<='0'; END IF; END IF;
END PROCESS;
對循環(huán)冗余校驗碼的生成和校驗進(jìn)行了功能仿真,結 果如圖1所示。

3  循環(huán)冗余校驗碼的應用
由于循環(huán)冗余校驗碼強大的校驗能力,在不同領(lǐng)域, 循環(huán)冗余校驗碼的生成多項式位數也不同,根據IEEE官方 文件顯示,為了更好地保證校驗可靠度,現在的位數越來(lái)越 大,目前最長(cháng)的循環(huán)冗余校驗碼已達到160位。下面簡(jiǎn)單介 紹幾種常見(jiàn)的循環(huán)冗余校驗碼及其應用領(lǐng)域。
(1)USB接口用CRC5。對應的標準生成多項式:
P(x) = x5 + x2 + 1 (2)ATM協(xié)議等用CRC8。對應的標準生成多項式:P(x) = x8 + x2 + x + 1 (3)文件傳輸通信協(xié)議,X25協(xié)議等用CRC16。對應的標
準生成多項式:
P(x) = x16 + x12 + x5 + 1 (4)IEEE802.3標準用CRC32。對應的標準生成多項式: P(x) = x32 + x26 + x23 + x22 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2
+ x + 1
(5)ISO 3309規定的CRC64。對應的生成多項式:
P(x) =x64 + x62 + x57 + x55 + x54 + x53 + x52 + x47 + x46 + x45 + x40
+ x39 + x38 + x37 + x35 + x33 + x32 + x31 + x29 + x27 + x24 + x23 + x22 + x21 +
x19 + x17 + x13 + x12 + x10 + x9 + x7 + x4 + x + 1

4  結語(yǔ)
循 環(huán) 冗 余 校 驗 碼 已 經(jīng) 成 為 各 行 各 業(yè) 通 信 校 驗 中 最 普 遍的校驗方式。本設計將循環(huán)冗余校驗碼的生成與校驗過(guò) 程進(jìn)行細致的分析,最終采用Altera公司開(kāi)發(fā)的FPFA芯片 EP1C12Q240C8進(jìn)行結果驗證。實(shí)驗表明在實(shí)現循環(huán) 冗余校驗碼方面有著(zhù)簡(jiǎn)單高效的優(yōu)勢。在未來(lái)實(shí)現更多位的 循環(huán)冗余校驗中有著(zhù)更深遠的用途。



關(guān)鍵詞: FPGA 校驗碼

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>