關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 基于SATAII協議的CRC32并行算法的研究

        基于SATAII協議的CRC32并行算法的研究

        作者: 時間:2012-12-20 來源:網絡 收藏

        串行比特型算法可以很容易通過帶反饋的移位寄存器的硬件實現,其吞吐率可以達到200 Mbps,但是遠遠不能達到高速通信系統的要求。
        對于查表法生成CRC校驗碼,要預先汁算好所要的有效信息位,并存放信息位表中,然后按信息位的順序計算好所有校驗位,并存放于表中,待要使用時通過查表輸出對于的CRC校驗值。但這種方法需要較大的存儲空間存儲長度較大的CRC余數表,并且隨著并行位數的增加,余數表的長度按指數增加,對于規范也不具有現實性。
        因此,協議中需采用并行算法以達到3 Gbps的吞吐率。

        3 推導
        CRC32可由串行比特型算法推導而出。
        令需進行校驗的32位數據以Q0表示,32位移位寄存器初始值用M0表示即:
        Q0=[D0D1D2D3…D31]T (8)
        M0=[C0C1C2C3…C31]T (9)
        自反饋的移位運算可以采用狀態轉移矩陣表示,i+1次移位后寄存器的狀態Qi+1與i次移位后寄存器的狀態Qi之間的關系可通過狀態矩陣A表示為:Qi+1=AQi,進一步又可得到第i次的狀態Qi可通過初始狀態Q0表示為:
        g.JPG
        式中狀態轉移矩陣A可由式(7)和CRC32串行實現框圖推導得到。首先32位數據串行輸入,與移位寄存器相關位中的初始值進行模2加減運算,32次移位后數據輸入完畢,即:
        h.JPG
        然后再進行32次移位,移位寄存器中的內容即為所求的CRC校驗值,則:
        i.JPG
        由式(13)可知:CRC校驗值只與CRC校驗初始值M0和需校驗數據Q0有關,其中A64和A32可以由MATLAB計算得出。通過計算,可以得出CRC校驗最高位為:
        j.JPG

        4 協議中CRC32算法實現
        總線主要由應用層、傳輸層、鏈路層和物理層組成,其中傳輸層主要用于傳輸數據命令,鏈路層則是對數據進行編碼和解碼以保證數據在鏈路中正確傳輸。SATA總線鏈路中的信息包含兩種結構:原語(Primitive)和幀(Frame),兩者都以雙字為最小的單位,其結構如圖2所示。

        本文引用地址:http://www.104case.com/article/159619.htm

        l.jpg


        幀結構由多個雙字組成,包括幀頭(SOF)、幀數據、幀尾(EOF)和用于控制碼流的控制原語HOLD原語和HOLDA原語。SATA協議中CRC校驗模塊需自動識別出數據流中的原語,并不計算這些原語的CRC值。在發送信息時,需要由幀數據生成CRC碼,即所有非原語數據都要進行CRC編碼,并且將生成的CRC值插入到幀尾(EOF)之前進行傳輸。在接受到數據時,需要對幀數據進行CRC校驗,從而判斷數據在鏈路中傳輸是否出錯。在SATA協議中規定CRC校驗初始值0x52325032,并且在幀頭和幀尾中的數據不能超過2 046個雙字。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 瓦房店市| 湟源县| 崇州市| 灵川县| 闻喜县| 汨罗市| 昭觉县| 前郭尔| 伊通| 二手房| 三原县| 砚山县| 乌什县| 叙永县| 漳平市| 石林| 龙里县| 鹿邑县| 西贡区| 沾化县| 西吉县| 赣州市| 林芝县| 敦化市| 桐梓县| 芮城县| 尉氏县| 呈贡县| 互助| 绥棱县| 上虞市| 平原县| 南宁市| 沐川县| 石嘴山市| 怀仁县| 页游| 贡觉县| 望城县| 长葛市| 六安市|