時間:2008-12-11 11:31:48來源:ronggang
圖1 CRC校驗原理圖
Fig.1The Schematic diagram of CRC[/align]
假定需傳輸?shù)臄?shù)據(jù)P=110,也就是信息元,此時k=3,與它對應(yīng)的多項式為
n=7且對應(yīng)的
(其最低4位為零,以便拼裝4位監(jiān)督位)。用生成多項式g(x)去除
,在運算中使用的均為模2的特殊運算。求CRC碼所采用模2加減運算法則,即是不帶進位和借位的按位加減,這種加減運算實際上就是邏輯上的異或運算,加法和減法等價,乘法和除法運算與普通代數(shù)式的乘除法運算是一樣,符合同樣的規(guī)律。如:
取余數(shù)Q=101,所傳輸?shù)臄?shù)據(jù)為
,n=7,該數(shù)據(jù)前三位是信息元,后四位是CRC序列。
接收端收到數(shù)據(jù)時,為進行校驗,仍用g(x)去除接收到信息所對應(yīng)的多項式
,由表達式(4)可以得到:
應(yīng)能被個g(x)整除。在此工作機制下,上述循環(huán)碼不但可檢查出n-k-1個獨立錯誤,還可以檢查出長度b
為完成求得CRC序列,可以使用一個15位移位寄存器CRC_RG(14:0)。若以NXTBIT標記該位流的下一位,它由從幀起始至數(shù)據(jù)場結(jié)束的無填充位的序列給定。CRC序列的計算如下:
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序列開始或者存在一個出錯狀態(tài))
得到CRC序列為:000001000110101,發(fā)送/接收數(shù)據(jù)場的最后一位后,CRC_RG包含CRC序列,CRC序列后面是CRC界定符,它只包含一個隱位(高電平)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編碼的并行計算
目前已采用CRC并行算法是查表法及基于查表法而導(dǎo)出的一些方法。這些方法均需要存儲長度較大的CRC余數(shù)表,隨著并行度的增加,余數(shù)表的長度大大增加(按指數(shù)增加),其現(xiàn)實性亦隨之大大降低。
該算法事先把待校驗的信息碼P的所有CRC碼全部計算出來,放在一個表里,編碼時只要根據(jù)P從表中找出對應(yīng)的值進行處理即可。其硬件實現(xiàn)示意框圖如圖2所示。編碼解碼前清零CRC寄存器。編碼時待信息碼P輸入結(jié)束,CRC寄存器的值即為校驗碼Q;解碼校驗時待傳送碼P輸入結(jié)束時,若CRC寄存器中的值為零,則表明傳輸無誤。該算法執(zhí)行速度快,適合于高速通信場合,但由于需要大容量的存儲表,花費的硬件資源較串行算法要大得多。
[align=center]
圖2 并行算法示意圖
Fig.2 The Schematic drawing of Parallel Algorithm[/align]
為使(n,k)碼能具體指出數(shù)據(jù)在傳輸中出錯的位,數(shù)據(jù)位數(shù)k和校驗位數(shù)r之間應(yīng)滿足海明不等式:k+r<2[sup]r[/sup]-1 。為簡明起見,這里假設(shè)欲傳送的數(shù)據(jù)代碼P按4位一組分組(即k=4),則r≥3,若選定生成多項式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計算原理的基礎(chǔ)上,仔細運用VHDL的特點進行串、并行CRC算法建模從而實現(xiàn)的設(shè)計,不僅具備采用公式法設(shè)計所具有的優(yōu)點,還能很好地適用于各種數(shù)據(jù)塊大小不同、生成多項式選取不同的CRC編、解碼運用場合,明顯減輕設(shè)計開發(fā)工作量,大幅縮短產(chǎn)品的研發(fā)周期。此外,由于生成結(jié)果占用的硬件資源很少,只需利用系統(tǒng)集成芯片中剩余的少量資源即可實現(xiàn),在當(dāng)前大量的系統(tǒng)設(shè)計實現(xiàn)趨向單芯片化的大潮下,更具生命力。
參考文獻
[1] 王海光,并行CRC算法硬件實現(xiàn)研究與VHDL設(shè)計[J]. 漳州師范學(xué)院學(xué)報(自然科學(xué)版),2007年第4期(總第58期),51-56.
[2] 李永忠,通用并行CRC計算原理及其硬件實現(xiàn)方法[J]. 西北民族學(xué)院學(xué)報(自然科學(xué)版),2 0 0 2年3月第23卷總第43期,33-37.
[3] 蔣安平,循環(huán)冗余校驗碼(CRC)的硬件并行實現(xiàn)[J]. 微電子學(xué)與計算機,2007年第24卷第2期,107-109,112.
標簽:
上一篇:基于虛擬儀器的手機自動測試...
傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為傳動網(wǎng)(m.y3602.cn)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>2025-10-22
2025-10-17
2025-10-11
2025-10-09
2025-09-23
2025-09-23