[問題] CRC 錯誤偵測

看板comm_and_RF作者 (外星人)時間16年前 (2008/01/02 23:34), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/1
CRC的運算方法就是利用長除法求得餘數 然而硬體設計方式為使用移位暫存器和互斥或閘合成 就是類似一個pncode的方式 然而我想問的是 1:為何使用類似pncode的方式,當資料全部輸出完的下一筆資料,就是所謂的餘數??? 還有如何使長除法跟硬體的想法連結在一起,現在我二者都懂,不過聯想不起來,謝謝 2:我使用CRC-3的方式 (X^3+X^2+1) verilog code大致如下 always @(posedge clk) begin if(reset) data_out<=0; else xor_out[0] <= data_out[2] ^ data_in; xor_out[1] <= data_out[0]; xor_out[2] <= data_out[1] ^ xor_out[0]; data_out <= xor_out; end 並且在傳送端輸入10101010 ^ ^ | | msb lsb 經過CRC-3能求得110,所以在接收端的data最後加入110(也就是10101010+110), 再經過CRC-3能求得最後餘數為0 代表正確 不過我在使用CRC-4以及CRC-16 均不能解回正解,也就是餘數為零,請問是input data bit有限制嗎? 還是我哪裡弄錯了 下面為 CRC-16的code (X^16+X^15+X^2+1) xor_out[0] = data_out[15] ^ data_in; xor_out[1] = data_out[0]; xor_out[2] = data_out[1] ^ xor_out[0]; xor_out[3] = data_out[2]; xor_out[4] = data_out[3]; xor_out[5] = data_out[4]; xor_out[6] = data_out[5]; xor_out[7] = data_out[6]; xor_out[8] = data_out[7]; xor_out[9] = data_out[8]; xor_out[10] = data_out[9]; xor_out[11] = data_out[10]; xor_out[12] = data_out[11]; xor_out[13] = data_out[12]; xor_out[14] = data_out[13]; xor_out[15] = data_out[14] ^ xor_out[0]; data_out<=xor_out; 謝謝... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.217.208.198

01/03 05:17, , 1F
verilog 裡面 <= 與 = 有很大的不同
01/03 05:17, 1F

01/03 05:18, , 2F
你做 LFSR 應該用 <= 不然結果會不對
01/03 05:18, 2F

01/03 12:04, , 3F
我已經改好了,不過結果還是不對,請問
01/03 12:04, 3F

01/03 12:05, , 4F
是哪裡出問題? 謝謝...
01/03 12:05, 4F

01/03 16:02, , 5F
已解,由於是同時輸出,都不能加"<="
01/03 16:02, 5F

01/03 20:40, , 6F
你的同時輸出是指???
01/03 20:40, 6F
文章代碼(AID): #17UwxtBn (comm_and_RF)