一種矢量crc校驗指令的設計方法
【專利摘要】本發明公開了一種DSP中矢量CRC校驗指令的設計方法,在DSP中設計了全新的矢量CRC執行單元,在此基礎上實現了矢量CRC5校驗指令、矢量CRC8校驗指令、矢量CRC16校驗指令、矢量CRC24校驗指令、矢量CRC32校驗指令以及利用這些專用指令設計的CRC校驗裝置。CRC指令運行效率高,使用簡單靈活,通用性強,大大簡化了對數據進行CRC校驗的程序設計。使用較少的硬件資源實現了多條矢量CRC校驗指令,節省了硬件資源,降低了成本。本發明充分利用了處理器設計中的流水線技術、多指令并發技術和單指令多數據技術,極大地提高了CRC校驗的效率,本發明的CRC指令具有吞吐率高、功耗低、成本低等特點。
【專利說明】一種矢量CRC校驗指令的設計方法
【技術領域】
[0001]一種DSP中矢量CRC校驗指令的設計方法,涉及通信芯片中的數字信號處理,屬于通信、存儲領域,特別涉及數字信號處理芯片中CRC校驗模塊的設計。
【背景技術】
[0002]CRC編碼是一種循環冗余校驗碼(Cyclic Redundancy Check),是數據通信領域中最常用的一種差錯校驗碼,其特征是信息字段和檢驗字段的長度可以任意選定。
[0003]CRC校驗的基本思想是利用線性編碼理論,在發送端根據要傳送的k位二進制碼序列,以一定的規則產生一個檢驗碼r位,附在信息后,構成一個新的二進制碼序列共(k+r)位,最后發送出去。接收端根據同樣的規則校驗,以確定傳送中是否出錯。
[0004]傳統的CRC校驗實現方法有軟件方法和硬件方法,軟件方法主要有直接計算法和查表法,直接計算法適用于所有長度的數據校驗,最為靈活,但由于是按位計算,是一種串行計算方法,效率差,速度慢。查表法按字節計算CRC校驗,是一種并行計算方法,但是需要提前存儲一個256字節的表格,會占用較多的硬件資源。硬件實現方法的優點是計算速度快、效率高,但靈活性較差、不具有通用性,成本高。
[0005]隨著通訊技術的發展,對數據的處理效率要求越來越高,越來越多的設計方法選擇了 CRC的硬件實現方式,為了克服硬件實現方式靈活性和通用性差的缺點,在處理器中設計CRC校驗指令逐漸成為一種趨勢,Intel公司提出了一套靈活CRC指令集(CN102096609 A),任給一個CRC多項式和數據,都可以對數據進行多項式規定的CRC校驗,其實現過程是首先通過多項式求模運算對CRC多項式進行擴展,得到預計算擴展多項式,然后對數據進行混洗,混洗后利用擴展多項式反復對數據在Galois域上做多項式除法,最后得到CRC校驗結果,此種CRC指令集雖然使用靈活,但是實現流程復雜,運行效率較低。
[0006]本DSP主要面向通信領域,使用的CRC校驗種類比較固定,所以直接在DSP中設計了 CRC的專用指令,指令設計簡單,運行效率高,設計方法與Intel的靈活CRC指令集有本質的區別。通過軟件編程調用這些CRC指令即可快速完成CRC校驗,實現簡單、快速且節省資源。本發明利用SIMD(Single Instruct1n Multiple Data)技術、流水線技術和指令并發技術大幅提高了 CRC校驗的速率。同時,本CRC校驗的專用指令共享了處理器的部分硬件資源,節省了硬件開銷。
【發明內容】
[0007]本發明要解決的技術問題是:本發明設計了一種全新的矢量CRC執行單元,在此基礎上完實現了矢量CRC5校驗指令、矢量CRC8校驗指令、矢量CRC16校驗指令、矢量CRC24校驗指令、矢量CRC32校驗指令的設計以及使用這些指令設計的CRC校驗裝置。
[0008]本發明解決其技術問題所采用的技術方案是:全新的矢量CRC執行單元由硬件復用管理單元和狀態寄存器并行轉移單元組成,硬件復用管理單元控制各條矢量CRC指令充分復用硬件資源,可以保證使用較少的硬件資源即可完成多條矢量CRC指令的設計,減少了硬件開銷;狀態寄存器并行轉移單元在輸入8bit數據后只需要一個周期即可完成狀態寄存器值的轉移,運行效率高。
[0009]矢量CRC5校驗指令是8路并行CRC校驗指令,每次調用該指令可計算8bit數據,輸入Sbit數據后通過推導出的CRC5并行計算公式一個周期即可完成CRC計算,將所有數據計算完成后,結果寄存器中剩余的5bit數據即是CRC校驗結果。
[0010]矢量CRC8校驗指令是8路并行CRC校驗指令,每次調用該指令可計算Sbit數據,輸入Sbit數據后通過推導出的CRC8并行計算公式一個周期即可完成CRC計算,將所有數據計算完成后,結果寄存器中剩余的8bit數據即是CRC校驗結果。
[0011 ] 矢量CRC16校驗指令,每次調用該指令可計算Sbit數據,輸入Sbit數據后通過推導出的CRC16并行計算公式一個周期即可完成CRC計算,將所有數據計算完成后,結果寄存器中剩余的16bit數據即是CRC校驗結果。
[0012]矢量CRC24校驗指令,每次調用該指令可計算Sbit數據,輸入Sbit數據后通過推導出的CRC24并行計算公式一個周期即可完成CRC計算,將所有數據計算完成后,結果寄存器中剩余的24bit數據即是CRC校驗結果。
[0013]矢量CRC32校驗指令,每次調用該指令可計算Sbit數據,輸入Sbit數據后通過推導出的CRC32并行計算公式一個周期即可完成CRC計算,將所有數據計算完成后,結果寄存器中剩余的32bit數據即是CRC校驗結果。
[0014]本方法不僅適用于以上CRC指令的設計,也適用了任意多項式CRC指令的設計,變換CRC的多項式,同樣可以利用本方法設計出矢量CRC指令。
[0015]利用本方法不僅可以設計8路并行的CRC指令,也可以設計16路、32路并行的CRC指令,甚至可以設計任意路并行的CRC指令。
[0016]本方法的
【發明內容】
還包括利用這些CRC指令設計的CRC校驗裝置,利用本方法設計的CRC指令和處理器的讀取、存儲數據指令完成CRC校驗,在此CRC校驗裝置中充分利用了處理器的流水線技術和多指令并發技術,可以極大的提高CRC校驗的效率。
[0017]本發明的有益效果是:一種DSP中矢量CRC校驗指令的設計方法,在DSP中設計了全新的矢量CRC執行單元,在此基礎上實現了矢量CRC5校驗指令、矢量CRC8校驗指令、矢量CRC16校驗指令、矢量CRC24校驗指令、矢量CRC32校驗指令以及利用這些專用指令設計的CRC校驗裝置。此設計方法設計的CRC專用指令,運行效率高,使用簡單靈活,通用性強,大大簡化了對數據進行CRC校驗的程序設計。同時,CRC執行單元包含硬件復用管理單元,可以保證各條CRC指令充分復用DSP的硬件資源,使用較少的硬件資源實現了多條矢量CRC校驗指令,節省了硬件資源,降低了成本。另外,本設計方法充分利用了處理器設計中的流水線技術、多指令并發技術和單指令多數據(Single Instruct1n Multiple Data, SIMD)技術,極大地提高了 CRC校驗的效率。此方法設計的CRC指令具有吞吐率高、功耗低、成本低等特點。
【專利附圖】
【附圖說明】
[0018]圖1CRC指令實施例的系統框圖;
[0019]圖2圖1所示的處理器實施例的框圖;
[0020]圖3CRC指令執行單元實施例的框圖;
[0021]圖4CRC5實現原理框圖;
[0022]圖5CRC8實現原理框圖;
[0023]圖6多項式為0x1021的CRC16實現原理框圖;
[0024]圖7多項式為0x8005的CRC16實現原理框圖;
[0025]圖8多項式為0x04clldb7的CRC32實現原理框圖;
[0026]圖9利用本發明設計的CRC指令實現的CRC校驗實現流程圖;
【具體實施方式】
[0027]為了使本發明所要解決的技術問題、技術方案及有益效果更佳清楚、明白,以下結合附圖和實施例,對本發明進行進一步的詳細說明,應當理解,此處所描述的具體實施例僅用于解釋本發明,并不用于限定本發明。
[0028]本實施例使用的DSP是矢量數字信號處理器,數據總線位寬是16bit,最多支持8個16bit數據的并行乘加運算,擁有矢量viterbi指令,具有超高的數字信號處理性能。本發明使用的DSP并不局限于本實施例所使用的DSP,在任意的DSP中均可按照本設計提供的方法完成CRC指令的設計。
[0029]圖1是本發明所設計的CRC指令實施例的系統100框圖,系統100包括處理器101、程序存儲器106和數據存儲器108,處理器通過16bit位寬的總線對程序存儲器進行訪問,通過16bit位寬的數據總線對數據存儲器進行訪問。
[0030]處理器101包括程序訪問控制器102、數據訪問控制器104和CRC執行單元103,程序訪問控制器102控制CRC指令的讀取,數據訪問控制器104控制計算數據的讀取和CRC結果的存儲,CRC執行單元103是CRC指令的執行單元。
[0031]圖2是圖1所示的處理器101的實施例框圖,框圖展示了 CRC指令的執行過程,執行時需要3級流水線,在第一周期,在程序訪問控制器的控制下,通過程序數據總線105將程序存儲器106中的CRC指令讀取到寄存器堆201中,此過程稱為流水線的取指階段。在第二周期,處理器將取出的CRC指令送入指令譯碼單元202進行譯碼,將譯碼結果存儲到寄存器堆201的寄存器中,此過程稱為流水線的譯碼階段。在第三周期,根據譯碼結果在CRC執行單元103中執行CRC指令,此過程稱為流水線的執行階段,此過程需要一個周期,所以CRC指令為單周期指令。
[0032]本發明使用的DSP支持指令并發執行,在執行CRC的同時可以執行數據的訪問指令,在數據訪問控制器104的控制下,通過數據總線107將數據從數據存儲器108中讀取到寄存器堆201中,在CRC的執行階段將數據載入到CRC執行單元103中,指令執行后將數據緩存到寄存器中,CRC計算完成后將結果通過數據訪問指令存儲到存儲器108中。
[0033]以矢量CRC32指令的實施例為例說明指令的執行過程,在CRC執行單元103中執行的矢量CRC32指令(宏指令)用符號表示為:
[0034]crc32_0x04clldb7L(rI, r2, r3)
[0035]其中,rl、r2、r3是三個16bit的寄存器。矢量CRC32指令具有三個操作數,rl、r2和r3都是源操作數,同時r2和r3也是目的操作數據,CRC校驗結果存儲在r2和r3中。第一源操作數(“opl”)存儲在寄存器堆201中的rl中,第一源操作數是將要進行CRC校驗的數據;第二源操作數(“op2”)和第三源操作數(“op3”)存儲在寄存器堆201中的r2和r3中,r2存儲的是初始CRC余數的低16bit,r3存儲的是初始CRC余數的高16bit。同時,r2和r3也是指令的目的操作數,CRC指令運算后的新余數再存回到r2和r3中,r2存儲新CRC余數的低16bit,r3存儲新CRC余數的高16bit。
[0036]rl是16bit寄存器,而指令crc32_0x04clldb7L是8bit并行指令,只對rl中的低Sbit數據進行CRC計算,使用如下的指令對rl中的高Sbit數據進行CRC計算:crc32_0x04clldb7H(rI, r2, r3)。
[0037]圖3顯示了 CRC指令的執行過程,在流水線的執行階段,硬件復用管理單元根據譯碼結果控制狀態寄存器并行轉移單元的運行,寄存器并行轉移單元將3個源操作數據載入,一個周期完成狀態寄存器的轉移,狀態寄存器中的值即是新的CRC余數,最后將狀態寄存器中的值存儲到目的寄存器r2和r3中。
[0038]以下以矢量CRC5指令、矢量CRC8指令、矢量CRC16指令和矢量CRC32指令的實施例來說明硬件復用管理單元和狀態寄存器并行轉移單元的設計。
[0039]CRC5的生成多項式為:g(x) = x5+x2+l.其實現原理框圖如圖4所示。設Hii為輸入信息序列,i = I,2,...,n,Rji表示輸入Hii后移位寄存器Rj (j = 0,1,2,3,4)的狀態值,由實現原理框圖可得:
[0040]R0i = R4(H) ? Hii
[0041]Rli = R0(H)
[0042]R2i = Ri(1-1) ? 尺4(卜1) ? mi
[0043]R3i = R2(1-1)
[0044]R4i = R3(H)
[0045]由此可推導出八路并行CRC校驗公式為:
[0046]R08 = Rciq ? R2q ? R3q ? m2 ? m3 ? m5 ? m8
[0047]R18 = R10 ffi R30 ffi R40 ffi Iii1 ? m2 ? m4 ? m7
[0048]R28 = Rw ? R3。? R4。? Iii1 ? m2 ? m5 ? m6 ? m8①
[0049]R38 = R00 ffi R10 ffi R40 ffi Iii1 ? m4 ? m5 ? m7
[0050]R48 = R10 ffi R20 ffi m3 ? m4 ? m6
[0051]寫成矩陣形式為:
[0052]R8 = Scrc5R0②
[0053]其中,R8 = [R08, R18, R28, R38, R48]H,表示輸入8bit數據后新的CRC5狀態寄存器的值,R0 = [R00,R10,R20, R30, R40, In1, m2, m3, m4, m5, m6, m7, m8, ]H,是由 CRC 初始余數和 CRC 校驗數據組合成的向量,
【權利要求】
1.一種矢量CRC檢驗指令的設計方法,設計了一種全新的矢量CRC執行單元,在此基礎上實現了矢量CRC5校驗指令、矢量CRC8校驗指令、矢量CRC16校驗指令、矢量CRC24校驗指令、矢量CRC32校驗指令的設計以及使用這些指令設計的CRC校驗裝置。
2.如權利要求1所述的一種矢量CRC檢驗指令的設計方法,其特征在于,所述矢量CRC執行單元包括硬件復用管理單元和狀態寄存器并行轉移單元,硬件復用管理單元控制各條矢量CRC指令充分復用硬件資源,可以保證使用較少的硬件資源即可完成多條矢量CRC指令的設計,減少了硬件開銷;狀態寄存器并行轉移單元在輸入8bit數據后只需要一個周期即可完成狀態寄存器值的轉移,執行時間短,運行效率高。
3.如權利要求1所述的一種矢量CRC檢驗指令的設計方法,其特征在于,所述的矢量CRC5校驗指令:是一條8路并行CRC校驗指令,每次將初始CRC余數和8bit數據送入CRC執行單元,一個周期后即可得出新的CRC余數,將所有數據計算完成后,狀態寄存器中剩余的5bit數據即是CRC校驗結果。
4.如權利要求1所述的一種矢量CRC檢驗指令的設計方法,其特征在于,所述的矢量CRC8校驗指令:是一條8路并行CRC校驗指令,每次將初始CRC余數和8bit數據送入CRC執行單元,一個周期后即可得出新的CRC余數,將所有數據計算完成后,狀態寄存器中剩余的8bit數據即是CRC校驗結果。
5.如權利要求1所述的一種矢量CRC檢驗指令的設計方法,其特征在于,所述矢量CRC16校驗指令:是一條8路并行CRC校驗指令,每次將初始CRC余數和8bit數據送入CRC執行單元,一個周期后即可得出新的CRC余數,將所有數據計算完成后,狀態寄存器中剩余的16bit數據即是CRC校驗結果。
6.如權利要求1所述的一種矢量CRC檢驗指令的設計方法,其特征在于,所述的矢量CRC24校驗指令:是一條8路并行CRC校驗指令,每次將初始CRC余數和8bit數據送入CRC執行單元,一個周期后即可得出新的CRC余數,將所有數據計算完成后,狀態寄存器中剩余的24bit數據即是CRC校驗結果。
7.如權利要求1所述的一種矢量CRC檢驗指令的設計方法,其特征在于,所述的矢量CRC32校驗指令:是一條8路并行CRC校驗指令,每次將初始CRC余數和8bit數據送入CRC執行單元,一個周期后即可得出新的CRC余數,將所有數據計算完成后,狀態寄存器中剩余的32bit數據即是CRC校驗結果。
8.如權利要求1所述的一種矢量CRC檢驗指令的設計方法,其特征在于,本設計方法不僅適用于設計如權利要求1所述的各條CRC指令,也適用于設計任意多項式的CRC指令,按本文提供的設計方法可以設計出任意多項式的CRC校驗指令。
9.如權利要求1所述的一種矢量CRC檢驗指令的設計方法,其特征在于,本設計方法可以設計如權利要求2至權利要求6所述的8路并行的CRC指令,還可以設計任意路并行的CRC指令。
10.如權利要求1所述的一種矢量CRC檢驗指令的設計方法,其特征在于,所述的CRC校驗裝置:利用本方法設計的CRC指令和處理器的讀取、存儲數據指令完成CRC校驗,在此CRC校驗裝置中充分利用了流水線技術和多指令并發技術,可以極大的提高CRC校驗的效率。
【文檔編號】G06F11/10GK104133736SQ201410366239
【公開日】2014年11月5日 申請日期:2014年7月29日 優先權日:2014年7月29日
【發明者】劉勇, 陶建平, 王和國, 孫振瑋, 張永攀 申請人:江蘇宏云技術有限公司