TS流的CRC譯碼器設計
3.4 接收模塊
接收模塊的主要功能就是檢測到起始位后再在每個數據的中央位置進行采樣,接收完一幀數據后就放到接收FIFO里供CRC校驗模塊使用,其RTL視圖如圖6所示。本文引用地址:http://www.104case.com/article/189722.htm
4 CRC校驗
CRC校驗有兩種方法:一種是按位來計算的,一種是按字節來計算的。按位來計算的占用FPGA邏輯資源比較少,但是相對來說速度會比較慢,不能適應高速的TS流的要求。按字節來運算的速度快,但是占用FPGA的邏輯資源多。綜合考慮后,這里使用按字節的算法。
本設計的CRC算法采用直驅動表法,由于一個字節只有8 b,與生成項進行異或后最多有256個結果,先將256個待查表的值生成MIF文件,放入由FPGA的IP核生成的ROM里,然后用查表法可以達到很快的運算速度,具有很強的實時性。其具體算法如下:
crc_reg=crctab[crc_reg[31:24]^buffer[7:0]8'hff]^{crc_reg[23:0],8'h0};
圖7是用model sire對CRC進行仿真的結果使用的是PSI表里的一個section的數據,可以看到,校驗到最后的時候,crc_reg的值變為了0,說明數據是正確的。
只要在接收FIFO里有數據,CRC模塊就會將讀取數據進行CRC校驗。而每個PSI表里都有一個section_length是記錄在這個表里面從該字節之后有多個字節是有效數據的。所以,要將這個數據提取出來再加上3就得到了整個表的長度。在CRC校驗的時候,也要設置一個計數器,用于記錄處理多少個數據,并與section_length比較。若這兩個數相同,則判斷CRC寄存器里的值;若為0,則說明這個數據段是正確的,通過串口發0x00給上位機;若CRC寄存器不為0,則說明這個數據斷是錯誤的,FPGA發送0x01給上位機。
CRC校驗處理的流程圖如圖8所示。
5 結論
本系統經過實際驗證具有很高的準確性和實時性,并且在上位機和FPGA上都進行了校驗,可以驗證是否數據在串口傳輸的過程發生了錯誤,其FPGA部分可以當作一個獨立的模塊加入到其他系統中,具有很強的實時性。
評論