基于SATAII協(xié)議的CRC32并行算法的研究
SATA協(xié)議中CRC生成校驗?zāi)K采用有限狀態(tài)機(jī)來識別傳輸數(shù)據(jù)流中的原語,從而完成CRC值的生成與校驗。其狀態(tài)機(jī)結(jié)構(gòu)圖如圖3所示。本文引用地址:http://2s4d.com/article/159619.htm
其中狀態(tài)STATE0檢測幀頭并裝入STATE1狀態(tài);在STATE1中,當(dāng)輸入數(shù)據(jù)為幀尾時,則轉(zhuǎn)入STATE3狀態(tài),否則轉(zhuǎn)入STATE2狀態(tài),在STATE1狀態(tài)下輸出幀頭,并設(shè)置CRC初始值為0x52325032h;在STATE2中,當(dāng)輸入為幀尾時,則轉(zhuǎn)入STATE3狀態(tài),否則轉(zhuǎn)入STATE2狀態(tài),對非原語數(shù)據(jù)進(jìn)行CRC值生成,并保存到寄存器中,輸出為數(shù)據(jù)或保持原語;在STATE3中輸出最終的CRC值,并轉(zhuǎn)入STATE4狀態(tài);在STATE4中輸出幀尾,并轉(zhuǎn)入STATTE0狀態(tài)等待下一次數(shù)據(jù)的輸入。
輸入一幀數(shù)據(jù),并由式(14)進(jìn)行計算,得出輸入數(shù)據(jù)對應(yīng)的CRC計算值如表1所示。
其對應(yīng)的系統(tǒng)仿真結(jié)果如圖4所示。
仿真結(jié)果顯示,CRC數(shù)據(jù)校驗與表1中的理論值一致,CRC生成模塊能夠自動識別數(shù)據(jù)流中的原語和數(shù)據(jù),并能有數(shù)據(jù)生成正確的CRC校驗值。其中每雙字?jǐn)?shù)據(jù)生成CRC值僅需一個時鐘周期,系統(tǒng)輸出延時僅為一個時鐘周期,相對于串行CRC生成算法,CRC32并行算法更能滿足SATA協(xié)議對時鐘頻率的要求。
5 結(jié)束語
文中介紹了CRC校驗原理和常用CRC32實現(xiàn)算法,并根據(jù)比特型算法推導(dǎo)出一種CRC32并行算法的實現(xiàn)方案,該方案實現(xiàn)簡單,實現(xiàn)的并行算法相對于串行算法具有速度快,運算簡單,并且易于硬件實現(xiàn)等優(yōu)點。本文還將將CRC32并行算法與SATA協(xié)議相結(jié)合,實現(xiàn)了滿足SATA協(xié)議規(guī)范的CRC生成和校驗?zāi)K,并成功應(yīng)用于SATAⅡ主控制器的設(shè)計中。
評論