時(shí)間:2008-12-11 11:31:48來(lái)源:ronggang
圖1 CRC校驗(yàn)原理圖
Fig.1The Schematic diagram of CRC[/align]
假定需傳輸?shù)臄?shù)據(jù)P=110,也就是信息元,此時(shí)k=3,與它對(duì)應(yīng)的多項(xiàng)式為
n=7且對(duì)應(yīng)的
(其最低4位為零,以便拼裝4位監(jiān)督位)。用生成多項(xiàng)式g(x)去除
,在運(yùn)算中使用的均為模2的特殊運(yùn)算。求CRC碼所采用模2加減運(yùn)算法則,即是不帶進(jìn)位和借位的按位加減,這種加減運(yùn)算實(shí)際上就是邏輯上的異或運(yùn)算,加法和減法等價(jià),乘法和除法運(yùn)算與普通代數(shù)式的乘除法運(yùn)算是一樣,符合同樣的規(guī)律。如:
取余數(shù)Q=101,所傳輸?shù)臄?shù)據(jù)為
,n=7,該數(shù)據(jù)前三位是信息元,后四位是CRC序列。
接收端收到數(shù)據(jù)時(shí),為進(jìn)行校驗(yàn),仍用g(x)去除接收到信息所對(duì)應(yīng)的多項(xiàng)式
,由表達(dá)式(4)可以得到:
應(yīng)能被個(gè)g(x)整除。在此工作機(jī)制下,上述循環(huán)碼不但可檢查出n-k-1個(gè)獨(dú)立錯(cuò)誤,還可以檢查出長(zhǎng)度b
為完成求得CRC序列,可以使用一個(gè)15位移位寄存器CRC_RG(14:0)。若以NXTBIT標(biāo)記該位流的下一位,它由從幀起始至數(shù)據(jù)場(chǎng)結(jié)束的無(wú)填充位的序列給定。CRC序列的計(jì)算如下:
CRC_RG=0 //初始化寄存器
REPEAT
CRCNXT = NXTBITE XOR CRC_RG(14);
CRC_RG(14:1) = CRC_RG(13:0);//寄存器左移一位
CRC_RG(0) = 0;
IF CRCNXT THEN
CRC_RG(14:0) = CRC_RG(14:0) EXOR (4599H);
END IF
UNTIL(CRC序列開(kāi)始或者存在一個(gè)出錯(cuò)狀態(tài))
得到CRC序列為:000001000110101,發(fā)送/接收數(shù)據(jù)場(chǎng)的最后一位后,CRC_RG包含CRC序列,CRC序列后面是CRC界定符,它只包含一個(gè)隱位(高電平)1。
串行算法的VHDL程序代碼如下:
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Use ieee.std_logic_arith.all;
Entity can_vhdl_crc is
port (
clk : in std_logic;
data : in std_logic;
enable : in std_logic;
initialize : in std_logic;
crc : out std_logic_vector(14 downto 0));
End entity can_vhdl_crc;
Architecture rtl of can_vhdl_crc is
Type xhdl_46 is array(0 ot 7) of std_logic_vector(7 downto 0);
Signal crc_next : std_logic;
Signal crc_tmp : std_logic_vector(14 DOWNTO 0);
Signal crc_xhdl1 : std_logic_vector(14 DOWNTO 0);
begin
crc <= crc_xhdl1;
crc_next <= data xor crc_xhdl1(14) ;
crc_tmp <= crc_xhdl1(13 downto 0) & ‘0‘ ;
process (clk)
begin
if (clk‘event and clk = ‘1‘) then
if (initialize = ‘1‘) then
crc_xhdl1 <= "000000000000000";
else
if (enable = ‘1‘) then then
if (crc_next = ‘1‘) then
crc_xhdl1 <= crc_tmp xor "100010110011001";
else
crc_xhdl1 <= crc_tmp ;
end if;
end if;
end if;
end if;
end process;
end Architecture rtl;
3.2 CRC編碼的并行計(jì)算
目前已采用CRC并行算法是查表法及基于查表法而導(dǎo)出的一些方法。這些方法均需要存儲(chǔ)長(zhǎng)度較大的CRC余數(shù)表,隨著并行度的增加,余數(shù)表的長(zhǎng)度大大增加(按指數(shù)增加),其現(xiàn)實(shí)性亦隨之大大降低。
該算法事先把待校驗(yàn)的信息碼P的所有CRC碼全部計(jì)算出來(lái),放在一個(gè)表里,編碼時(shí)只要根據(jù)P從表中找出對(duì)應(yīng)的值進(jìn)行處理即可。其硬件實(shí)現(xiàn)示意框圖如圖2所示。編碼解碼前清零CRC寄存器。編碼時(shí)待信息碼P輸入結(jié)束,CRC寄存器的值即為校驗(yàn)碼Q;解碼校驗(yàn)時(shí)待傳送碼P輸入結(jié)束時(shí),若CRC寄存器中的值為零,則表明傳輸無(wú)誤。該算法執(zhí)行速度快,適合于高速通信場(chǎng)合,但由于需要大容量的存儲(chǔ)表,花費(fèi)的硬件資源較串行算法要大得多。
[align=center]
圖2 并行算法示意圖
Fig.2 The Schematic drawing of Parallel Algorithm[/align]
為使(n,k)碼能具體指出數(shù)據(jù)在傳輸中出錯(cuò)的位,數(shù)據(jù)位數(shù)k和校驗(yàn)位數(shù)r之間應(yīng)滿足海明不等式:k+r<2[sup]r[/sup]-1 。為簡(jiǎn)明起見(jiàn),這里假設(shè)欲傳送的數(shù)據(jù)代碼P按4位一組分組(即k=4),則r≥3,若選定生成多項(xiàng)式g(x)=x[sup]3[/sup]+x[sup]2[/sup]+1則可得采用并行算法求Q的VHDL程序如下:
library ieee;
use ieee.std_logic_1164.all;
entity crc_jym1 is
generic(m_wide:integer:=3;
r_wide:integer:=2);
port(m_in:in std_logic_vector(m_wide downto 0);
r_out:out std_logic_vector(r_wide downto 0));
end crc_jym1;
architecture a of crc_jym1 is
constant crc_wide:integer:=m_wide+r_wide+1;
constant g_wide:integer:=r_wide+1;
signal mm:std_logic_vector(crc_wide downto 0);
constant g:std_logic_vector(g_wide downto 0):="1101";
begin
process(m_in)
variable d:std_logic_vector(g_wide downto 0);
variable r:std_logic_vector(r_wide downto 0);
begin
r:=(others=>‘0‘);
mm<=m_in&r;
d:=mm(crc_wide downto(crc_wide-g_wide));
for i in(crc_wide-g_wide-1)downto 0 loop
if d(g_wide)=‘0‘then
r:=d(r_wide downto 0);
else
for j in r_wide downto 0 loop
r(j):=d(j)xor g(j);
end loop;
end if;
d:=r&mm(i);
end loop;
if d(g_wide)=‘0‘then
r:=d(r_wide downto 0);
else
for j in r_wide downto 0 loop
r(j):=d(j)xor g(j);
end loop;
end if;
r_out<=r;
end process;
end a;
4 總結(jié)
本文在分析了CRC計(jì)算原理的基礎(chǔ)上,仔細(xì)運(yùn)用VHDL的特點(diǎn)進(jìn)行串、并行CRC算法建模從而實(shí)現(xiàn)的設(shè)計(jì),不僅具備采用公式法設(shè)計(jì)所具有的優(yōu)點(diǎn),還能很好地適用于各種數(shù)據(jù)塊大小不同、生成多項(xiàng)式選取不同的CRC編、解碼運(yùn)用場(chǎng)合,明顯減輕設(shè)計(jì)開(kāi)發(fā)工作量,大幅縮短產(chǎn)品的研發(fā)周期。此外,由于生成結(jié)果占用的硬件資源很少,只需利用系統(tǒng)集成芯片中剩余的少量資源即可實(shí)現(xiàn),在當(dāng)前大量的系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)趨向單芯片化的大潮下,更具生命力。
參考文獻(xiàn)
[1] 王海光,并行CRC算法硬件實(shí)現(xiàn)研究與VHDL設(shè)計(jì)[J]. 漳州師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2007年第4期(總第58期),51-56.
[2] 李永忠,通用并行CRC計(jì)算原理及其硬件實(shí)現(xiàn)方法[J]. 西北民族學(xué)院學(xué)報(bào)(自然科學(xué)版),2 0 0 2年3月第23卷總第43期,33-37.
[3] 蔣安平,循環(huán)冗余校驗(yàn)碼(CRC)的硬件并行實(shí)現(xiàn)[J]. 微電子學(xué)與計(jì)算機(jī),2007年第24卷第2期,107-109,112.
標(biāo)簽:
傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為傳動(dòng)網(wǎng)(m.y3602.cn)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>勇梅機(jī)械液壓閘門(mén)給煤機(jī)的優(yōu)點(diǎn)
2025-10-22
2025-10-17
2025-10-11
「一體機(jī)性價(jià)比王者」NK290M普及型數(shù)控...
2025-10-09
耐磨管道機(jī)器人檢測(cè)電纜CCTV,水下管道...
2025-09-23
影視舞臺(tái)燈光低煙無(wú)鹵扁平電纜13*4+2*(2...
2025-09-23
推薦專(zhuān)題
更多>