Phương pháp bình chọn parity đơn giản nhưng độ tin yêu kém đề nghị được ứng dụng cho các giao thức có tốc độ truyền dữ liệu chậm hoặc số lượng bit tài liệu cần kiểm tra ít ví dụ như giao thức UART.CRC (Cyclic Redundancy Code) là một cách thức phổ biến có độ tin tưởng cao hơn các so với áp dụng bi parity. CRC được ứng dụng trong không ít giao thức có trọng lượng dữ liệu truyền phệ hoặc vận tốc truyền dữ liệu cao như CAN, Ethernet, giao tiếp RF 15693, ...2. Lý thuyết về thống kê giám sát CRCGiá trị chuỗi bit soát sổ hay chuỗi CRC là số dư của phép phân chia 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ố phân chia sẽ khác biệt tùy vào từng giao thức quy định. Phép chia trong tính toán CRC sử dụng phương pháp tính modulo-2. Modulo-2 thực ra là XOR hai số hạng.Giả sử nhiều thức chuỗi tài liệu cần truyền là M(x):
*

*

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

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

Bạn đang xem: Crc là gì

Bạn vẫn xem: Crc là gì


*

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

Hình 4. Khám nghiệm CRC bằng phương pháp chia chuỗi tài liệu có CRC với nhiều thức sinh - trường vừa lòng sai 1 bit cùng trường hợp 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 tài liệu bị sai và chuỗi CRC cũng không nên trùng với mức giá trị CRC của chuỗi tài liệu bị sai. Mặc dù nhiên, tỷ lệ để xẩy ra đúng trường vừa lòng này là thấp. Xác suất này càng thấp khi chuỗi CRC càng dài.
Xét đa thức sinh g(x) = x + 1, đấy là đa thức CRC-1, tính CRC đến chuỗi 8 bit b10100010 và chuỗi b10011111.
So sánh tác dụng với cách thức tính parity chẵn đã trình diễn phía trên chúng ta cũng có thể nhận thấy sự tương đồng. CRC-1 chính là phương pháp kiểm tra parity.3. Mạch nguyên tắc tính CRC
Xem lại các ví dụ đã trình diễn trên đây, CRC được tính theo nguyên tắc:Nếu bit MSB của lần tính lúc này bằng 1 thì nó sẽ tiến hành XOR (modulo-2) với nhiều thức sinhNếu bit MSB của lần tính bây giờ bằng 0 thì nó sẽ không còn đổi
Để tiến hành mạch CRC-1, xung quanh cách XOR tất cả các bit tài liệu đầu vào như sẽ trình bày ở vị trí trên, bạn cũng có thể thực hiện dựa trên nguyên tắc của việc chia đa thức như hình trên. Mạch đề xuất 2 FF nhằm lưu quý hiếm sau mỗi lần XOR với mạch đang dịch 1 bit sau những lần XOR để đưa 1 bit dữ 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ẽ tinh chỉnh và điều khiển MUX chọn có XOR với nhiều thức sinh x+1 tốt không? tuy nhiên, sau mỗi chu kỳ tính, bit MSB luôn bị loại bỏ bỏ đề xuất mạch MUX cùng XOR của bit MSB là không buộc phải thiết. Mạch được rút gọn gàng như hình sau:
Xét mạch MUX, nếu bit MSB bởi 1 thì bit 0 XOR với 1, trường hợp bit MSB bằng 0 thì tương ứng với việc bit 0 XOR cùng với 0 cần mạch MUX được đào thải để thay bằng bit 1 XOR bit 0.
Hình 11. Mạch nguyên lý CRC-1 (bỏ mạch MUX)​Bit 0 chỉ dùng làm lưu quý giá bit dịch vào đề xuất cũng có thể loại bỏ.

Xem thêm: Nghĩa Của Từ Stunt Là Gì Trong Tiếng Việt? 'Stunt' Là Gì


Hình 12. Mạch nguyên tắc CRC-1 (bỏ FF đầu vào)​Ở đây, bit CRC chỉ có một bit đề nghị việc thêm một bit 0 sống chuỗi tài liệu đầu vào để tính CRC cũng không cần thiết vì quý giá nào XOR cùng với 0 cũng bởi chính nó.
Hình 13. Mạch nguyên tắc CRC-1 với trình diễn thông thường​Tương tự, xét lại mạch CRC-4 gồm đa thức sinh x^4 + x + 1, mạch nguyên tắc tính CRC-4 như sau (lưu ý, vị trí XOR cùng với "0" thì loại trừ cả MUX và cổng XOR):
5. RTL code tính CRC nối tiếp5.1 dấn xét
Qua nhì ví dụ bên trên đây, thừa nhận xét thông thường như sau:Tại vị trí cơ mà bit đa thức sinh bởi "0" thì chỉ là phép dịch bitTại vị trí mà bit đa thức sinh bởi "1" thì được chèn cổng XORDữ liệu tiếp nối để tính CRC dịch trường đoản cú MSB mang đến LSB với số lần dịch bởi độ dài tài liệu cộng độ dài quý hiếm CRC. Ví dụ, tài liệu 8 bit 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 sản xuất chuỗi dữ liệu.5.2 so sánh module tạo và đánh giá CRCCăn cứ vào phần lớn nhận xét trên, một thi công thực hiện nay tính CRC tổng quát đượ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 tinh chỉnh giá trị của đa thức sinh trường hợp muốn. Chú ý, độ rộng tín hiệu tinh chỉnh bằng số bit CRC vằ thông qua số mũ lớn số 1 của nhiều thức sinh. Ví dụ, nếu đa thức sinh là x^4 + x + 1 thì độ rộng bộc lộ là 4 bit và cực hiếm gán đến tín hiệu tinh chỉnh 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 đến phép cấu hình độ rộng nhiều thức sinh. Độ rộng nhiều thức sinh thông qua số mũ lớn nhất của nhiều 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 được cho phép gán giá trị đa thức sinh đang sử dụng còn nếu như không sử dụng tín hiệu điều khiển và tinh chỉnh được tạo ra bởi khái niệm CRC_CTRL_POLY. Ví dụ, nếu như không định nghĩa CRC_CTRL_POLY, nhiều 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 giao tiếp của module CRC như sau:
Hai tín hiệu ctrl_en cùng chk_en đang điều khiển tính năng tạo và chất vấn CRC như sau, khi dấu hiệu ctrl_en tích cực, dữ liệu dùng làm tạo CRC hoặc được khám nghiệm CRC sẽ ban đầu dịch vào data_in. Ctrl_en sẽ tích cực bằng số bit yêu cầu dịch bên trên data_in.Nếu chk_en = 0 thì khi ctrl_en = 0, crc_seq sẽ giữ giá trị chuỗi CRC trong 1 chu kỳ xung clockNếu chk_en = 1 thì lúc ctrl_en = 0, crc_error đang báo lỗi CRCcrc_error = 1 thì chuỗi bình chọn bị lỗi CRCcrc_error = 0 thì chuỗi kiểm tra không trở nên lỗiMạch tổng thể của từng bit trong thanh ghi cất giá trị CRC như sau:
5.3 RTL code
Link tải về RTL code và testbench: CRC RTL codepass (nếu có): nguyenquanicd5.4 công dụng mô phỏng
Đa thức sinh: x^4 + x + 1 khớp ứ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 khoản thời gian thêm 4 bit "0" là 1010_0110_0000 => tác dụng tính CRC là 1110Dữ liệu dùng để làm kiểm tra CRC: 1010_0110_1110. Trong đó, 4 bit LSB 1110 là chuỗi CRC => hiệu quả kiểm tra CRC là crc_error = 0