CYCLIC REDUNDANCY CHECK

     
Phương pháp kiểm tra parity đơn giản nhưng độ tin cậy kém bắt buộc được ứng dụng cho các giao thức có vận tốc truyền dữ liệu chậm hoặc con số bit tài liệu cần soát sổ ít ví như giao thức UART.CRC (Cyclic Redundancy Code) là một phương thức phổ biến có độ tin cậy cao hơn nhiều so với sử dụng bi parity. CRC được ứng dụng trong vô số nhiều giao thức có khối lượng dữ liệu truyền mập hoặc tốc độ truyền dữ liệu cao như CAN, Ethernet, giao tiếp RF 15693, ...2. Triết lý về tính toán CRCGiá trị chuỗi bit chất vấn hay chuỗi CRC là số dư của phép phân tách của chuỗi bit tài liệu cho một chuỗi bit đa thức sinh (Generator Polynomial). Đa thức sinh là số chia sẽ khác biệt tùy vào mỗi giao thức quy định. Phép chia trong đo lường và tính toán CRC sử dụng cách tính modulo-2. Modulo-2 thực chất là XOR nhị số hạng.Giả sử đa thức chuỗi dữ liệu cần truyền là M(x):

Bạn sẽ xem: Crc là gì




Bạn đang xem: Cyclic redundancy check

*

*

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



Xem thêm: Điện Thoại Nắp Trượt Đẹp Nhất Hiện Nay 2022, Điện Thoại Trượt Giá Tốt Tháng 4, 2022

Điều này, khớp ứng với vấn đề dịch trái n bit chuỗi dữ liệu M(x).Cuối cùng, phân chia T(x) mang lại G(x) cùng lấy số dư. Số dư đó là chuỗi CRC n bit.Bạn sẽ xem: Crc là gì
*

Kiểm tra CRC được triển khai bằng một trong các 2 bí quyết sau:Lấy chuỗi tài liệu có cả những bit soát sổ CRC chia cho đa thức sinh. Giả dụ số dư khác "0" thì dữ liệu nhận bị lỗi.Tách chuỗi tài liệu và chuỗi CRC riêng. Chỉ rước chuỗi dữ liệu chia mang đến đa thức sinh rồi lấy số dư phép chia so sánh với chuỗi CRC. Nếu như hai chuỗi không giống nhau thì dữ liệu nhận bị lỗi.Ví dụ về thống kê giám sát CRC-4, tương ứng với số bit chất vấn là 4 bit, với đa thức sinh như sau:x^4 + x + 1 (b10011)Chuỗi tài liệu cần truyền gồm 8 bit như sau:x^7 + x^5 + x (b1010_0010)Chuỗi dữ liệu trước lúc chia vẫn được mở rộng thêm 4 bit "0":x^11 + x^9 + x^5 (b1010_0010_0000)
*



Xem thêm: Thông Tin Mới Về Game Tam Quốc Truyền Kỳ Mobile, Game Nhập Vai Chiến Thuật Tam Quốc Siêu Khủng

Hình 4. Bình chọn CRC bằng phương pháp chia chuỗi dữ liệu có CRC với nhiều thức sinh - trường hợp sai 1 bit và trường đúng theo sai 2 bit, số dư không giống 0​Bộ nhận sẽ không phát hiện tại được lỗi dữ liệu khi chuỗi dữ liệu bị sai và chuỗi CRC cũng không đúng trùng với giá trị CRC của chuỗi dữ liệu bị sai. Mặc dù nhiên, phần trăm để xảy ra đúng trường hợp này là thấp. Phần trăm này càng thấp khi chuỗi CRC càng dài.So sánh kết quả với phương pháp tính parity chẵn đã trình diễn phía trên chúng ta có thể nhận thấy sự tương đồng. CRC-1 chính là phương thức kiểm tra parity.3. Mạch nguyên tắc tính CRC
Xem lại các ví dụ đã trình bày trên đây, CRC được tính theo nguyên tắc:Nếu bit MSB của lần tính hiện tại bằng 1 thì nó sẽ được XOR (modulo-2) với đa thức sinhNếu bit MSB của lần tính hiện tại bằng 0 thì nó sẽ không còn đổiĐể triển khai mạch CRC-1, không tính cách XOR toàn bộ các bit tài liệu đầu vào như đang trình bày tại đoạn trên, bạn cũng có thể thực hiện dựa trên nguyên lý của việc chia đa thức như hình trên. Mạch đề nghị 2 FF nhằm lưu giá trị sau mỗi lần XOR cùng mạch đã dịch 1 bit sau các lần XOR để mang 1 bit tài liệu mới như hình sau:Hình 9. Mạch nguyên lý của CRC-1Ở hình trên, bit MSB sẽ điều khiển và tinh chỉnh MUX chọn tất cả XOR với đa thức sinh x+1 tốt không? tuy nhiên, sau mỗi chu kỳ luân hồi tính, bit MSB luôn bị loại bỏ bỏ bắt buộc mạch MUX cùng XOR của bit MSB là không bắt buộc thiết. Mạch được rút gọn như hình sau:Xét mạch MUX, ví như bit MSB bằng 1 thì bit 0 XOR với 1, giả dụ bit MSB bởi 0 thì khớp ứng với câu hỏi bit 0 XOR với 0 phải mạch MUX được sa thải để thay bởi bit 1 XOR bit 0.Hình 12. Mạch nguyên tắc CRC-1 (bỏ FF đầu vào)​Ở đây, bit CRC chỉ có một bit buộc phải việc thêm 1 bit 0 sinh hoạt chuỗi dữ liệu đầu vào để tính CRC cũng không cần thiết vì quý hiếm nào XOR cùng với 0 cũng bởi chính nó.Hình 13. Mạch nguyên lý CRC-1 với 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 lý tính CRC-4 như sau (lưu ý, vị trí XOR cùng với "0" thì loại trừ cả MUX cùng cổng XOR):5. RTL code tính CRC nối tiếp5.1 dấn xétQua hai ví dụ bên trên đây, dìm xét chung như sau:Tại vị trí mà lại bit nhiều thức sinh bằng "0" thì chỉ cần phép dịch bitTại vị trí nhưng bit nhiều thức sinh bởi "1" thì được chèn cổng XORDữ liệu nối liền để tính CRC dịch tự MSB cho LSB với mốc giới hạn dịch bằng độ dài tài liệu cộng độ dài quý giá CRC. Ví dụ, tài liệu 8 bit cần sử dụng CRC-4 thì chu kỳ dịch là 12 lần 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 tạo ra và bình chọn CRCCăn cứ vào rất nhiều nhận xét trên, một xây đắp thực hiện tại tính CRC tổng thể được tiến hành như sau:Sử dụng một define CRC_CTRL_POLY để chất nhận được tạo bộc lộ input điều khiển giá trị của nhiều thức sinh trường hợp muốn. Chú ý, độ rộng tín hiệu điều khiển và tinh chỉnh bằng số bit CRC vằ ngay số mũ lớn nhất của đa thức sinh. Ví dụ, nếu đa thức sinh là x^4 + x + 1 thì độ rộng tín hiệu là 4 bit và giá trị gán mang lại tín hiệu tinh chỉnh và điều khiển là 4'b0011 (bỏ bit 1 của x^4)Sử dụng một define CRC_CHECKER để chất nhận được tạo công dụng kiểm tra CRCSử dụng một parameter CRC_GPW_MAX cho phép cấu hình độ rộng nhiều thức sinh. Độ rộng đa thức sinh bằng số mũ lớn số 1 của đa thức sinh. Ví dụ, nếu nhiều thức sinh là x^4 + x + 1 thì CRC_GPW_MAX = 4Sử dụng một parameter CRC_POLY_VALUE cho phép gán cực hiếm đa thức sinh vẫn sử dụng nếu không sử dụng tín hiệu điều khiển được tạo ra bởi khái niệm CRC_CTRL_POLY. Ví dụ, còn nếu như không định nghĩa CRC_CTRL_POLY, đa thức sinh là x^4 + x + 1 thì CRC_GPW_MAX = 4 và cực hiếm CRC_POLY_VALUE = 4'b0011Sơ đồ tín hiệu tiếp xúc của module CRC như sau:Hai biểu đạt ctrl_en và chk_en đã điều khiển chức năng tạo và kiểm soát CRC như sau, khi biểu hiện ctrl_en tích cực, dữ liệu dùng để làm tạo CRC hoặc được soát sổ CRC sẽ bước đầu dịch vào data_in. Ctrl_en sẽ lành mạnh và tích cực bằng số bit đề xuất dịch bên trên data_in.Nếu chk_en = 0 thì khi ctrl_en = 0, crc_seq sẽ giữ lại được giá trị chuỗi CRC trong một chu kỳ xung clockNếu chk_en = 1 thì khi ctrl_en = 0, crc_error đã báo lỗi CRCcrc_error = 1 thì chuỗi soát sổ bị lỗi CRCcrc_error = 0 thì chuỗi kiểm tra không xẩy ra lỗiMạch tổng thể của từng bit vào thanh ghi đựng giá trị CRC như sau:5.3 RTL codeLink tải về RTL code với testbench: CRC RTL codepass (nếu có): nguyenquanicd5.4 kết quả mô phỏngĐa thức sinh: x^4 + x + 1 tương xứng với bài toán gán ctrl_poly_en = 4'b0011Dữ liệu dùng để làm tạo CRC: 1010_0110 sau thời điểm thêm 4 bit "0" là 1010_0110_0000 => tác dụng tính CRC là 1110Dữ liệu dùng để kiểm tra CRC: 1010_0110_1110. Vào đó, 4 bit LSB 1110 là chuỗi CRC => kết quả kiểm tra CRC là crc_error = 0 chăm mục: Công Nghệ