CYCLIC REDUNDANCY CHECK LÀ GÌ

  -  
Phương thơm pháp soát sổ parity đơn giản và dễ dàng mà lại độ tin cẩn kém nhẹm buộc phải được áp dụng cho các giao thức tất cả tốc độ truyền tài liệu chậm rãi hoặc con số bit dữ liệu đề nghị khám nghiệm ít ví như giao thức UART.CRC (Cyclic Redundancy Code) là 1 trong cách thức thông dụng bao gồm độ tin cẩn cao hơn nữa những so với áp dụng bi parity. CRC được áp dụng trong nhiều giao thức bao gồm khối lượng dữ liệu truyền to hoặc tốc độ truyền tài liệu cao nlỗi CAN, Ethernet, giao tiếp RF 15693, ...2. Lý tngày tiết về tính toán CRCGiá trị chuỗi bit đánh giá tốt chuỗi CRC là số dư của phxay phân tách của chuỗi bit dữ liệu cho 1 chuỗi bit nhiều thức sinh (Generator Polynomial). Đa thức sinch là số chia vẫn không giống nhau tùy thuộc vào từng giao thức mức sử dụng. Phép phân tách vào tính toán thù CRC áp dụng phương pháp tính modulo-2. Modulo-2 thực chất là XOR nhì số hạng.Giả sử đa thức chuỗi tài liệu yêu cầu truyền là M(x):
*

*

Trong đó:am và an bởi 1 hoặc 0Độ lâu năm chuỗi CRC bằng độ dài nhiều thức sinh trừ 1 và bằng số mũ lớn nhất của đa thức sinh và bằng n.Để sinh sản CRC, chuỗi dữ liệu cần truyền sẽ được không ngừng mở rộng thêm n bit về phía bên phải:
*

Điều này, khớp ứng với vấn đề dịch trái n bit chuỗi tài liệu M(x).Cuối cùng, phân chia T(x) cho G(x) cùng đem số dư. Số dư đó là chuỗi CRC n bit.

Bạn đang xem: Cyclic redundancy check là gì

Quý Khách đang xem: Crc là gì


*

Kiểm tra CRC được thực hiện bằng 1 trong những 2 giải pháp sau:Lấy chuỗi tài liệu tất cả cả những bit đánh giá CRC phân tách cho nhiều thức sinh. Nếu số dư không giống "0" thì dữ liệu nhấn bị lỗi.Tách chuỗi dữ liệu cùng chuỗi CRC riêng. Chỉ lấy chuỗi tài liệu chia cho đa thức sinc rồi đem số dư phép phân chia so sánh với chuỗi CRC. Nếu nhị chuỗi không giống nhau thì dữ liệu nhấn bị lỗi.Ví dụ về tính toán CRC-4, khớp ứng cùng với số bit đánh giá là 4 bit, với đa thức sinc như sau:x^4 + x + 1 (b10011)Chuỗi dữ liệu buộc phải truyền gồm 8 bit nlỗi sau:x^7 + x^5 + x (b1010_0010)Chuỗi dữ liệu trước khi phân tách sẽ tiến hành không ngừng mở rộng thêm 4 bit "0":x^11 + x^9 + x^5 (b1010_0010_0000)
*

Hình 4. Kiểm tra CRC bằng cách phân tách chuỗi tài liệu có CRC cùng với nhiều thức sinc - ngôi trường hợp sai 1 bit và ngôi trường đúng theo không đúng 2 bit, số dư không giống 0​Bộ nhấn sẽ không phạt hiện tại được lỗi tài liệu Khi chuỗi tài liệu bị không đúng và chuỗi CRC cũng không nên trùng với giá trị CRC của chuỗi dữ liệu bị không đúng. Tuy nhiên, tỷ lệ để xẩy ra đúng ngôi trường thích hợp này là thấp. Xác suất này càng rẻ lúc chuỗi CRC càng lâu năm.
Xét đa thức sinh g(x) = x + 1, đấy là đa thức CRC-1, tính CRC cho chuỗi 8 bit b10100010 cùng chuỗi b10011111.

Xem thêm: Chơi Game Quán Giải Khát : Trò Chơi Quán Nước Giải Khát, Game Cua Hang Ban Nuoc Giai Khat


So sánh tác dụng cùng với phương pháp tính parity chẵn vẫn trình diễn bên trên bạn cũng có thể nhận thấy sự tương đương. CRC-1 đó là cách thức bình chọn parity.3. Mạch nguyên tắc tính CRC
Xem lại các ví dụ đã trình diễn trên phía trên, CRC được xem theo nguyên ổn tắc:Nếu bit MSB của lần tính hiện thời bằng 1 thì nó sẽ tiến hành XOR (modulo-2) cùng với đa thức sinhNếu bit MSB của lần tính bây chừ bởi 0 thì nó sẽ không còn đổi
Để tiến hành mạch CRC-1, không tính cách XOR toàn bộ các bit dữ liệu nguồn vào nlỗi vẫn trình bày tại đoạn bên trên, chúng ta có thể triển khai dựa vào nguyên lý của vấn đề phân chia nhiều thức như hình bên trên. Mạch yêu cầu 2 FF để giữ quý hiếm sau những lần XOR cùng mạch sẽ dịch 1 bit sau những lần XOR để mang 1 bit tài liệu bắt đầu như hình sau:
Hình 9. Mạch nguyên tắc của CRC-1Tại hình trên, bit MSB đã tinh chỉnh và điều khiển MUX chọn tất cả XOR cùng với nhiều thức sinch x+1 xuất xắc không? Tuy nhiên, sau từng chu kỳ luân hồi tính, bit MSB luôn bị loại bỏ yêu cầu mạch MUX cùng XOR của bit MSB là không quan trọng. Mạch được rút gọn gàng nhỏng hình sau:
Xét mạch MUX, giả dụ bit MSB bằng 1 thì bit 0 XOR với một, nếu bit MSB bởi 0 thì tương ứng cùng với Việc bit 0 XOR cùng với 0 buộc phải mạch MUX được sa thải để ráng bằng bit 1 XOR bit 0.
Hình 11. Mạch nguyên tắc CRC-1 (bỏ mạch MUX)​Bit 0 chỉ dùng làm lưu giữ quý hiếm bit dịch vào bắt buộc cũng rất có thể sa thải.

Xem thêm: Top Phần Mềm Hỗ Trợ Chơi Game Trên Android Và Ios, Game Booster


Hình 12. Mạch nguyên lý CRC-1 (quăng quật FF đầu vào)​Tại phía trên, bit CRC chỉ có 1 bit nên việc thêm 1 bit 0 sinh hoạt chuỗi tài liệu nguồn vào để tính CRC cũng ko quan trọng do quý giá như thế nào XOR cùng với 0 cũng bằng chính nó.
Hình 13. Mạch nguyên tắc CRC-1 cùng với màn biểu diễn thông thường​Tương từ, xét lại mạch CRC-4 tất cả đa thức sinh x^4 + x + 1, mạch nguyên tắc tính CRC-4 nhỏng sau (lưu ý, vị trí XOR với "0" thì đào thải cả MUX và cổng XOR):
5. RTL code tính CRC nối tiếp5.1 Nhận xét
Qua nhị ví dụ bên trên trên đây, dìm xét bình thường như sau:Tại vị trí cơ mà bit đa thức sinc bằng "0" thì chỉ nên phxay dịch bitTại địa chỉ cơ mà bit đa thức sinch bởi "1" thì được cyếu cổng XORDữ liệu nối tiếp nhằm tính CRC dịch từ bỏ MSB mang lại LSB với số lần dịch bằng độ dài dữ liệu cộng độ nhiều năm quý giá CRC. lấy một ví dụ, tài liệu 8 bit dùng CRC-4 thì chu kỳ dịch là 1gấp đôi với 4 bit cuối là 4 bit 0 được cấp dưỡng chuỗi dữ liệu.5.2 Phân tích module chế tạo ra với soát sổ CRCCnạp năng lượng cđọng vào rất nhiều thừa nhận xét bên trên, một kiến thiết tiến hành tính CRC tổng quát được triển khai như sau:Sử dụng một define CRC_CTRL_POLY nhằm được cho phép tạo biểu đạt đầu vào điều khiển quý giá của đa thức sinh nếu như muốn. Crúc ý, phạm vi biểu lộ điều khiển thông qua số bit CRC vằ ngay số nón lớn nhất của nhiều thức sinch. ví dụ như, ví như nhiều thức sinh là x^4 + x + 1 thì phạm vi dấu hiệu là 4 bit cùng quý hiếm gán cho bộc lộ điều khiển là 4'b0011 (bỏ bit 1 của x^4)Sử dụng một define CRC_CHECKER nhằm chất nhận được tạo thành tác dụng kiểm tra CRCSử dụng một parameter CRC_GPW_MAX được cho phép thông số kỹ thuật phạm vi nhiều thức sinc. Độ rộng lớn nhiều thức sinch thông qua số nón lớn số 1 của đa thức sinh. lấy ví dụ, nếu như nhiều thức sinch là x^4 + x + 1 thì CRC_GPW_MAX = 4Sử dụng một parameter CRC_POLY_VALUE chất nhận được gán quý giá đa thức sinc đã sử dụng nếu không sử dụng dấu hiệu tinh chỉnh và điều khiển được tạo ra vì chưng có mang CRC_CTRL_POLY. lấy ví dụ, nếu không định nghĩa CRC_CTRL_POLY, đa thức sinh là x^4 + x + 1 thì CRC_GPW_MAX = 4 cùng giá trị CRC_POLY_VALUE = 4'b0011Sơ đồ gia dụng dấu hiệu tiếp xúc của module CRC như sau:
Hai tín hiệu ctrl_en và chk_en vẫn tinh chỉnh công dụng chế tạo và khám nghiệm CRC nhỏng sau, Lúc biểu đạt ctrl_en tích cực và lành mạnh, dữ liệu dùng để tạo thành CRC hoặc được đánh giá CRC đang bước đầu dịch vào data_in. ctrl_en vẫn tích cực ngay số bit yêu cầu dịch bên trên data_in.Nếu chk_en = 0 thì lúc ctrl_en = 0, crc_seq sẽ giữ lại được giá trị chuỗi CRC trong một chu kỳ luân hồi xung clockNếu chk_en = 1 thì lúc ctrl_en = 0, crc_error vẫn báo lỗi CRCcrc_error = 1 thì chuỗi soát sổ bị lỗi CRCcrc_error = 0 thì chuỗi chất vấn không xẩy ra lỗiMạch tổng thể của từng bit vào tkhô nóng ghi đựng quý hiếm CRC nlỗi sau:
5.3 RTL code
Link download RTL code với testbench: CRC RTL codepass (giả dụ có): nguyenquanicd5.4 Kết quả tế bào phỏng
Đa thức sinh: x^4 + x + 1 tương ứng cùng với bài toán gán ctrl_poly_en = 4'b0011Dữ liệu dùng để chế tạo ra CRC: 1010_0110 sau khi thêm 4 bit "0" là 1010_0110_0000 => Kết trái tính CRC là 1110Dữ liệu dùng làm bình chọn CRC: 1010_0110_1110. Trong đó, 4 bit LSB 1110 là chuỗi CRC => Kết trái chất vấn CRC là crc_error = 0