[問題] CRC

看板Electronics作者 (外星人)時間18年前 (2008/01/03 13:47), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串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: 163.13.133.33

01/03 19:38, , 1F
問題2已解,由於要同時輸出,不能加"<=",謝謝
01/03 19:38, 1F
文章代碼(AID): #17V7RS-H (Electronics)