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



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


Hình 2. Tính chuỗi CRC
Việc kiểm tra CRC được triển khai bên trên chuỗi tài liệu có đi kèm CRC như sau:

Hình 3. Kiểm tra CRC - trường hòa hợp thừa nhận đúng, số dư bởi 0

Hình 4. Kiểm tra CRC bằng phương pháp chia chuỗi tài liệu có CRC cùng với nhiều thức sinh - trường đúng theo sai 1 bit và trường đúng theo không đúng 2 bit, số dư không giống 0
Sở nhấn sẽ không vạc hiện được lỗi dữ liệu Khi chuỗi tài liệu bị không đúng và chuỗi CRC cũng sai trùng với mức giá trị CRC của chuỗi tài liệu bị không nên. Tuy nhiên, tỷ lệ để xẩy ra đúng ngôi trường hòa hợp này là rẻ. Xác suất này càng phải chăng Lúc chuỗi CRC càng lâu năm.

Xét nhiều thức sinh g(x) = x + 1, đó là đa thức CRC-1, tính CRC cho chuỗi 8 bit b10100010 với chuỗi b10011111.
Xem thêm: Decent Cinema But Be Careful

So sánh tác dụng với phương pháp tính parity chẵn vẫn trình diễn phía bên trên bạn có thể nhận thấy sự tương đương. CRC-1 chính là phương thức kiểm soát parity.3. Mạch nguyên tắc tính CRCXem lại các ví dụ đang trình bày trên trên đây, CRC được xem theo nguyên tắc:Nếu bit MSB của lần tính bây giờ bởi 1 thì nó sẽ được XOR (modulo-2) cùng với nhiều thức sinhNếu bit MSB của lần tính hiện thời bởi 0 thì nó sẽ không đổi

Để triển khai mạch CRC-1, kế bên cách XOR toàn bộ các bit dữ liệu đầu vào như đã trình diễn ở chỗ trên, bạn có thể tiến hành dựa trên nguyên lý của vấn đề phân tách đa thức nlỗi hình trên. Mạch phải 2 FF nhằm giữ giá trị sau những lần XOR với mạch đang dịch 1 bit sau mỗi lần XOR để mang 1 bit dữ liệu bắt đầu nlỗi hình sau:


Xét mạch MUX, giả dụ bit MSB bởi 1 thì bit 0 XOR với cùng 1, giả dụ bit MSB bằng 0 thì tương xứng với vấn đề bit 0 XOR với 0 yêu cầu mạch MUX được vứt bỏ để nắm bởi bit 1 XOR bit 0.

Hình 11. Mạch nguyên lý CRC-1 (quăng quật mạch MUX)
Bit 0 chỉ dùng để làm lưu cực hiếm bit dịch vào yêu cầu cũng hoàn toàn có thể loại trừ.
Xem thêm: Top 9 Dầu Gội Bồ Kết Fresh Có Tốt Không, Ưu Nhược Điểm Của Dầu Gội Bồ Kết Thorakao

Hình 12. Mạch nguyên tắc CRC-1 (quăng quật FF đầu vào)
Ở phía trên, bit CRC chỉ có 1 bit cho nên việc thêm 1 bit 0 sinh sống chuỗi dữ liệu nguồn vào nhằm tính CRC cũng không quan trọng bởi quý hiếm làm sao XOR với 0 cũng bởi chủ yếu nó.

Hình 12. Mạch nguyên lý CRC-1
Biểu diễn thường trông thấy mang lại mạch tính CRC nhỏng sau:

Hình 13. Mạch nguyên tắc CRC-1 với biểu diễn thông thường
Tương trường đoản cú, xét lại mạch CRC-4 gồm nhiều thức sinc x^4 + x + 1, mạch nguyên lý tính CRC-4 nhỏng sau (chú ý, vị trí XOR cùng với "0" thì vứt bỏ cả MUX và cổng XOR):

5. RTL code tính CRC nối tiếp5.1 Nhận xétQua nhì ví dụ trên phía trên, nhấn xét bình thường nlỗi sau:Tại địa điểm nhưng mà bit nhiều thức sinh bởi "0" thì chỉ cần phxay dịch bitTại địa chỉ cơ mà bit nhiều thức sinch bởi "1" thì được cnhát cổng XORDữ liệu tiếp nối để tính CRC dịch từ MSB đến LSB với chu kỳ dịch bằng độ lâu năm dữ liệu cộng độ dài cực hiếm CRC. lấy một 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 cung cấp chuỗi dữ liệu.5.2 Phân tích module tạo và bình chọn CRCCăn uống cđọng vào phần đa dấn xét bên trên, một kiến tạo triển khai tính CRC tổng thể được tiến hành như sau:Sử dụng một define CRC_CTRL_POLY nhằm có thể chấp nhận được chế tác dấu hiệu input đầu vào điều khiển và tinh chỉnh cực hiếm của đa thức sinc nếu muốn. Crúc ý, độ rộng dấu hiệu điều khiển ngay số bit CRC vằ bằng số mũ lớn nhất của đa thức sinh. lấy một ví dụ, giả dụ đa thức sinch là x^4 + x + 1 thì phạm vi biểu thị là 4 bit với quý giá gán mang lại biểu thị tinh chỉnh là 4'b0011 (quăng quật bit 1 của x^4)Sử dụng một define CRC_CHECKER để được cho phép tạo tính năng đánh giá CRCSử dụng một parameter CRC_GPW_MAX được cho phép cấu hình phạm vi đa thức sinh. Độ rộng lớn đa thức sinc thông qua số mũ lớn số 1 của đa thức sinch. ví dụ như, giả dụ đa 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 quý hiếm nhiều thức sinc đang sử dụng còn nếu không sử dụng biểu thị tinh chỉnh được tạo thành vày khái niệm CRC_CTRL_POLY. lấy ví dụ, nếu không định nghĩa CRC_CTRL_POLY, nhiều thức sinch là x^4 + x + 1 thì CRC_GPW_MAX = 4 và cực hiếm CRC_POLY_VALUE = 4'b0011Sơ thứ bộc lộ tiếp xúc của module CRC nhỏng sau:

Hai bộc lộ ctrl_en với chk_en đang tinh chỉnh và điều khiển chức năng tạo nên và chất vấn CRC như sau, Khi biểu hiện ctrl_en tích cực, tài liệu dùng làm tạo ra CRC hoặc được kiểm tra CRC đã bước đầu dịch vào data_in. ctrl_en đã tích cực và lành mạnh ngay số bit phải dịch bên trên data_in.Nếu chk_en = 0 thì khi ctrl_en = 0, crc_seq sẽ lưu lại giá trị chuỗi CRC trong một chu kỳ xung clockNếu chk_en = 1 thì lúc ctrl_en = 0, crc_error sẽ báo lỗi CRCcrc_error = 1 thì chuỗi đánh giá 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 trong tkhô hanh ghi chứa quý giá CRC nhỏng sau:

Riêng bit 0 có nguồn vào là data_in có mạch như sau:

Khi tất cả tư tưởng CRC_CHECKER, mạch đánh giá lỗi CRC sẽ được tạo thành nlỗi sau:

5.3 RTL codeLink tải về RTL code cùng testbench: CRC RTL codepass (nếu có): nguyenquanicd5.4 Kết quả tế bào phỏng

Đa thức sinh: x^4 + x + 1 tương ứng với bài toán gán ctrl_poly_en = 4'b0011Dữ liệu dùng để làm tạo ra CRC: 1010_0110 sau khoản thời gian thêm 4 bit "0" là 1010_0110_0000 => Kết quả tính CRC là 1110Dữ liệu dùng để đánh giá CRC: 1010_0110_1110. Trong đó, 4 bit LSB 1110 là chuỗi CRC => Kết quả kiểm soát CRC là crc_error = 0
Chuyên mục: Công Nghệ