熟女人妻水多爽中文字幕,国产精品鲁鲁鲁,隔壁的少妇2做爰韩国电影,亚洲最大中文字幕无码网站

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > CAN總線協議中CRC編碼的VHDL實現

CAN總線協議中CRC編碼的VHDL實現

時間:2008-12-11 11:31:48來源:ronggang

導語:?為了提高CRC編碼的生成速度和CRC檢驗的效率,介紹了CRC檢驗的并行原理。最后給出了為滿足CAN協議的VHDL代碼。經過測試,串、并行運算均滿足設計要求
摘 要:針對CAN協議中提出的串行CRC檢驗原理,給出其實現方法及硬件語言VHDL代碼。為了提高CRC編碼的生成速度和CRC檢驗的效率,介紹了CRC檢驗的并行原理。最后給出了為滿足CAN協議的VHDL代碼。經過測試,串、并行運算均滿足設計要求。 關鍵字:CAN、CRC、串行、并行 [b][align=center]The VHDL Implementation for CRC in CanBus Protocol Hou Dian-Hua Chen Xing[/align][/b] Abstract: In the light of Serial CRC examination principle which proposed in the CAN protocol,this paper introduces the implementation method and the VHDL code. In order to enhance the production speed of CRC code and the efficiency of CRC examination, introduces the CRC examination parallel principle. Finally introduces the VHDL code. Key words: CAN、CRC、Serial、Parallel 1 引言   信息在傳遞過程中,可能因某種原因使傳輸的數據發生錯誤。為減少和避免這類錯誤的發生,除提高硬件的可靠性外,在數據的編碼上也應提供檢錯和糾錯的支持。常見的校驗碼有奇偶校驗碼、海明校驗碼和循環冗余校驗CRC(Cyclic Redundancy Check)碼,它們都是將被校驗的數據代碼按k位一組分組,每組添加r個校驗位,形成n位一組的代碼,故又稱為(n,k)分組校驗碼。其中CRC碼既可檢錯又可糾錯(與生成多項式的選取有關),是以數據塊為對象進行校驗的一種高效、可靠的檢錯和糾錯方法,由于它的編解碼簡單、糾錯能力強且誤判概率很低,因而在工業測控及通信系統中得到了廣泛的應用。   CAN協議中,為了保證幀傳輸的可靠性和較高的檢錯效率,其采用了以下幾種檢錯方式:位錯誤、填充錯誤、CRC錯誤、格式錯誤及應答錯誤檢測。如果,用m表示報文受損率,那么通過以上檢錯方式,它對于受損報文檢測不到其受損的概率為:,因而CAN總線極高的檢錯率使得它目前被廣泛應用到工業控制、通信、汽車甚至軍事等多個領域。CRC檢驗作為CAN協議中一種重要的且行之有效的檢錯方式,它的生成多項式可以檢驗7級,具有編碼簡單且誤判率低的優點。 2 CRC編碼原理   循環冗余碼屬于多項式生成碼,編譯碼設備都不太復雜,檢(糾)錯能力較強。它的規律在于編碼后含n位碼元的一個碼組中有k位信息元和r=n-k位監督元,二者混合形成規律性,監督元是隨著所傳輸的信息元而改變的。其工作原理如圖1所示,圖中P為輸入數據,G為生成多項式對應的編碼。 [align=center] 圖1 CRC校驗原理圖 Fig.1The Schematic diagram of CRC[/align]   假定需傳輸的數據P=110,也就是信息元,此時k=3,與它對應的多項式為      n=7且對應的(其最低4位為零,以便拼裝4位監督位)。用生成多項式g(x)去除,在運算中使用的均為模2的特殊運算。求CRC碼所采用模2加減運算法則,即是不帶進位和借位的按位加減,這種加減運算實際上就是邏輯上的異或運算,加法和減法等價,乘法和除法運算與普通代數式的乘除法運算是一樣,符合同樣的規律。如:。則有:      取余數Q=101,所傳輸的數據為,n=7,該數據前三位是信息元,后四位是CRC序列。   接收端收到數據時,為進行校驗,仍用g(x)去除接收到信息所對應的多項式,由表達式(4)可以得到:      兩個相同的數的模2和為0,所以若接收數據無誤時,應能被個g(x)整除。在此工作機制下,上述循環碼不但可檢查出n-k-1個獨立錯誤,還可以檢查出長度b3 CRC編碼的硬件語言實現   CRC編碼的硬件語言實現,可以采用串行算法和并行算法兩種實現方式。串行算法即是移位算法,有的文獻稱之為比特流算法,需編碼的位流按位逐位輸入,位流輸入完成后生成檢驗碼,檢驗碼緊隨需檢驗的位流發出或接收到。并行方式中需檢驗的位流每k位輸入到檢驗碼生成電路中,因而檢驗碼的生成效率大大高于串行方式。以下針對CAN協議中CRC編碼的生成多項式進行闡述。   3.1 CRC編碼的串行實現   由循環碼的編碼方法可知,循環碼的編碼可以由除法電路實現。除法電路的主體由多級移位寄存器和模2加法器組成。由循環碼的譯碼與糾錯方法可知,譯碼器主要由一個除法器和緩沖移位寄存器構成。若接收有誤,可經過幾次移位后,在相應的錯碼位上輸出“1”作為檢錯,并可以通過與緩沖移位寄存器輸出的錯碼模2加后來糾正錯誤。   CAN2.0A標準中,某數據幀(無數據場)前19位為0110001000111001000,對于生成多項式g(x)可從有關資料上查閱取得,它必須滿足下述要求:  ?。?)任何一位發生錯誤都應使余數不為0;  ?。?)不同位發生錯誤應使余數不同;  ?。?)對余數繼續作模2除時,應是余數循環本處取      為完成求得CRC序列,可以使用一個15位移位寄存器CRC_RG(14:0)。若以NXTBIT標記該位流的下一位,它由從幀起始至數據場結束的無填充位的序列給定。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序列開始或者存在一個出錯狀態)   得到CRC序列為:000001000110101,發送/接收數據場的最后一位后,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并行算法是查表法及基于查表法而導出的一些方法。這些方法均需要存儲長度較大的CRC余數表,隨著并行度的增加,余數表的長度大大增加(按指數增加),其現實性亦隨之大大降低。   該算法事先把待校驗的信息碼P的所有CRC碼全部計算出來,放在一個表里,編碼時只要根據P從表中找出對應的值進行處理即可。其硬件實現示意框圖如圖2所示。編碼解碼前清零CRC寄存器。編碼時待信息碼P輸入結束,CRC寄存器的值即為校驗碼Q;解碼校驗時待傳送碼P輸入結束時,若CRC寄存器中的值為零,則表明傳輸無誤。該算法執行速度快,適合于高速通信場合,但由于需要大容量的存儲表,花費的硬件資源較串行算法要大得多。 [align=center] 圖2 并行算法示意圖 Fig.2 The Schematic drawing of Parallel Algorithm[/align]   為使(n,k)碼能具體指出數據在傳輸中出錯的位,數據位數k和校驗位數r之間應滿足海明不等式:k+r<2[sup]r[/sup]-1 。為簡明起見,這里假設欲傳送的數據代碼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 總結   本文在分析了CRC計算原理的基礎上,仔細運用VHDL的特點進行串、并行CRC算法建模從而實現的設計,不僅具備采用公式法設計所具有的優點,還能很好地適用于各種數據塊大小不同、生成多項式選取不同的CRC編、解碼運用場合,明顯減輕設計開發工作量,大幅縮短產品的研發周期。此外,由于生成結果占用的硬件資源很少,只需利用系統集成芯片中剩余的少量資源即可實現,在當前大量的系統設計實現趨向單芯片化的大潮下,更具生命力。 參考文獻   [1] 王海光,并行CRC算法硬件實現研究與VHDL設計[J]. 漳州師范學院學報(自然科學版),2007年第4期(總第58期),51-56.   [2] 李永忠,通用并行CRC計算原理及其硬件實現方法[J]. 西北民族學院學報(自然科學版),2 0 0 2年3月第23卷總第43期,33-37.   [3] 蔣安平,循環冗余校驗碼(CRC)的硬件并行實現[J]. 微電子學與計算機,2007年第24卷第2期,107-109,112.

標簽:

點贊

分享到:

上一篇:基于虛擬儀器的手機自動測試...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業自動化與智能制造的全媒體“互聯網+”創新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業執照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號

主站蜘蛛池模板: 福泉市| 当雄县| 高阳县| 惠水县| 胶州市| 平塘县| 安宁市| 保靖县| 永胜县| 吉首市| 左贡县| 明星| 天祝| 汉川市| 方城县| 泰安市| 济南市| 通海县| 克什克腾旗| 连平县| 榆林市| 宁蒗| 克东县| 大英县| 石泉县| 石柱| 开化县| 奉贤区| 荥阳市| 南充市| 铜鼓县| 寻乌县| 宾川县| 湘阴县| 麟游县| 石泉县| 深水埗区| 古蔺县| 务川| 龙门县| 信丰县|