技術領域:
本發明涉及一種crc-32算法在usb3.0數據包中的實現方法。
背景技術:
:
在計算機通信和數據傳輸的過程中,難免會受到各種因素(比如信道內存在的噪聲及信道傳輸特性不理想造成的碼間串擾)的影響,從而造成所傳數據的失真,影響傳輸的可靠性。為了提高數據傳輸的準確性和有效性,通常加入校驗位來檢測數據是否正確。基于循環冗余碼(crc)編解碼方法簡單,檢錯能力強的特點,其成為數據通信中錯誤檢測的重要措施,它是在需要傳輸的數據后面,增加冗余校驗位后一起發送,接收端收到數據后,以同樣的編碼規則生成校驗碼,二者相比較可知信息是否正確。該方法檢錯能力強,檢測電路容易實現。然而,usb3.0協議對數據傳輸速度和可靠性提出了更高的要求,在更高的傳輸速度下,數據傳輸的誤碼率也會增加。現在一般情況下使用的串行crc算法,每個時鐘內只處理一位數據,若干位被處理的數據存入存儲器后,與校驗位一起發送,該算法是通過提高時鐘頻率來提高數據吞吐率,難以滿足高速數據傳輸的需求。為了克服這個缺點,許多研究者提出了新的crc校驗算法,常用的改進方法是并行查表crc算法。利用該方法需要提前存儲余數表,在數據輸入之后從中生成crc校驗碼,所以要占用一定量的表空間,需要反復查表,所以crc校驗的運算速度被降低。
技術實現要素:
:
本發明的目的是為了解決現有并行查表crc算法中crc校驗的運算速度低的問題,而提出的crc-32算法在usb3.0數據包中的實現方法。
上述的目的通過以下的技術方案實現:
一種crc-32算法在usb3.0數據包中的實現方法,所述的crc-32算法在usb3.0數據包中的實現方法通過以下步驟實現:
步驟一、確定usb中的crc校驗規則與usb3.0數據包結構;
步驟二、確定usb3.0協議中crc-32校驗生成的多項式;
步驟三、以crc串行比特算法為基礎來推導遞推并行crc-32算法;
步驟四、使用verilog硬件編程語言驗證遞推并行crc-32算法的正確性。
有益效果:
本發明針對usb3.0協議中對數據傳輸準確性和高速性的要求,通過對串行算法的分析,導出了新的遞推并行crc-32算法,并利用了verilog進行實現。與現有查表并行crc算法相比節省了存儲余數表的空間,省略了查表時間,提高了運算速度,克服了串行算法數據吞吐率低的不足,提高了運行效率,更好的滿足了高速數據傳輸的要求。
附圖說明:
圖1為本發明仿真實驗涉及的遞推并行crc_32verilog實現流程圖;
圖2為本發明仿真實驗涉及的遞推并行crc-32仿真結果;
圖3為本發明仿真實驗涉及的串行crc-32仿真結果。
具體實施方式:
具體實施方式一:
本實施方式的crc-32算法在usb3.0數據包中的實現方法,所述的crc-32算法在usb3.0數據包中的實現方法通過以下步驟實現:
步驟一、確定usb中的crc校驗規則與usb3.0數據包結構;
步驟二、確定usb3.0協議中crc-32校驗生成的多項式;
步驟三、以crc串行比特算法為基礎來推導遞推并行crc-32算法;
步驟四、使用verilog硬件編程語言驗證遞推并行crc-32算法的正確性。
crc即循環冗余校驗碼:是數據通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。是通過對所傳數據進行一定規則的多項式計算,然后將計算出的結果附在幀的后面,接收設備也執行類似的算法,以保證數據傳輸的正確性和完整性。
crc檢驗原理實際上就是在一個p位二進制數據序列之后附加一個r位二進制檢驗碼(序列),從而構成一個總長為n=p+r位的二進制序列;附加在數據序列之后的這個檢驗碼與數據序列的內容之間存在著某種特定的關系。如果因干擾等原因使數據序列中的某一位或某些位發生錯誤,這種特定關系就會被破壞。因此,通過檢查這一關系,就可以實現對數據正確性的檢驗。
usb3.0協議中規定了四種數據包,分別為鏈路管理包lmp,傳輸包tp,數據包dp,時間戳包itp。鏈路管理包主要用來鏈路管理,傳輸包主要用來控制流式數據包,數據包穿過所有鏈路,時間戳包主要用于多點廣播。數據包是數據傳輸的基本單位。數據包是由數據包頭dph(datapacketheader)后面無縫鏈接一個數據負載包dpp(datapacketpayload)構成的。dpp的結構由四個字節的dppstart,0~1024字節的數據,四個字節的32位crc,以及四個字節的dppend構成。
數據包是數據傳輸的基本單位。
具體實施方式二:
與具體實施方式一不同的是,本實施方式的crc-32算法在usb3.0數據包中的實現方法,步驟一所述的usb中的crc校驗規則是指,編碼過程對需要傳輸的k位二進制數據,按照設定的規則處理,生成一個r位的檢驗數據,附加在需要傳輸的k位二進制數據后面,形成一個k+r位的二進制數據發送到對方,接收方收到數據后,以同樣的規則生成校驗碼進行比對;將k位二進制數據表示成多項式m(x),除以一個k+1位的生成多項式g(x),所得余數r(x)即為crc校驗碼。
具體實施方式三:
與具體實施方式一或二不同的是,本實施方式的crc-32算法在usb3.0數據包中的實現方法,步驟一所述的usb3.0數據包結構為:usb3.0協議中基本傳輸單位數據包由數據包頭dph(datapacketheader)后面無縫鏈接一個數據負載包dpp(datapacketpayload)構成,dpp由四個字節的dppstart,0~1024字節的數據,四個字節的32位crc,以及四個字節的dppend構成。
具體實施方式四:
與具體實施方式三不同的是,本實施方式的crc-32算法在usb3.0數據包中的實現方法,步驟二所述的usb3.0協議中crc-32校驗生成的多項式為:
x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1,
多項式的系數即為待編碼的二進制數據,二進制數據按照從高位到地位的順序,從左至右的次序輸入除法電路,當8位數據輸入完畢后,寄存器的值即為crc-32校驗碼。
具體實施方式五:
與具體實施方式一、二或四不同的是,本實施方式的crc-32算法在usb3.0數據包中的實現方法,步驟三所述的以crc串行比特算法為基礎來推導遞推并行crc-32算法具體為,使用a0[c1c1c2...c31]表示32位的初始校驗數據,使用p0[d0d1d2...d31]表示移位寄存器的初始值;a1表示移位一次后的校驗數據,an表示通過經過n次移位后寄存器的狀態,an可以用第n-1次的寄存器狀態a(n-1)和狀態轉移矩陣b來表示為an=ba(n-1),根據該公式可以推出,經過n次移位后移位寄存器的狀態an可由初始狀態a0表示為an=b(n-1)a0,對32字節的進行模二加減運算,經過32次移位后為:a32=b32p0+a0,再進行32次的移位得到crc-32的值,在移位寄存器中所得到的數據即為crc校驗值為a32*2=b32*1a32,從而推導出a32*2=b32*2p0+b32a0,通過原始數據和crc校驗碼的初始值求出crc校驗碼
仿真實驗:
用verilog硬件編程語言實現遞推并行crc-32算法,流程圖如圖1所示,并用modulesimse10.1c仿真工具進行仿真。圖1中:datain表示輸入數據,clk表示時鐘信號,oldcrc表示舊的crc,dataout表示輸出信號,enable表示使能信號,crc_operation,表示算法運算,result_final表示最終結果,n表示否,y表示是;初始化時,寄存器的oldcrc=h52325032,在count=1時datain=h3737b57c,寄存器的值隨著輸入數的變化不斷跟新,直到最后產校驗碼。遞推并行crc-32生成模塊的仿真波形圖截圖,如圖2所示。同時對串行crc32進行了仿真,仿真結果截圖如圖3所示。從圖2和圖3可見,遞推并行crc-32運算速度是串行crc-32校驗的8倍。其原因是串行crc-32校驗是通過一個線性反饋移位寄存器按每次輸入一位的方式產生校驗碼,每個時鐘周期只能進行1位的計算,遞推并行crc-32每個時鐘周期內可以完成8位的數據校驗。
除了運算速度快的優點外,遞推并行crc_32硬件資源消耗少,硬件電路更容易實現。