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