CRC 32 là gì?

Phương pháp rà soát chẵn lẻ đơn giản nhưng độ tin tưởng kém nên vận dụng cho các giao thức có vận tốc truyền dữ liệu chậm hoặc số bit dữ liệu cần rà soát ít, chẳng hạn như giao thức UART.CRC (Cyclic Redundancy Code). là một phương pháp rộng rãi đáng tin tưởng hơn nhiều so với sử dụng tính chẵn lẻ. CRC được ứng dụng trong nhiều giao thức có lưu lượng truyền dữ liệu lớn hoặc vận tốc truyền dữ liệu cao như CAN, Ethernet, giao tiếp RF 15693,…2. Lý thuyết CRC. Phép tínhChuỗi bit rà soát hoặc trị giá chuỗi CRC là phần còn lại của phép chia chuỗi bit dữ liệu cho chuỗi bit đa thức của trình tạo. Đa thức trình tạo là số lượng san sớt không giống nhau theo giao thức đã chỉ định. Phép chia trong phép tính CRC sử dụng phép tính modulo-2. Modulo-2 về cơ bản là XOR hai thuật ngữ. Giả sử đa thức chuỗi dữ liệu được truyền là M(x):

CRC 32 là gì?

Đa thức sinh là G(x):

CRC 32 là gì?

Trong đó: am và an bằng 1 hoặc 0 Độ dài của chuỗi CRC bằng độ dài của đa thức sinh trừ 1 và bằng số mũ lớn nhất của đa thức sinh và bằng n. Để tạo CRC, chuỗi dữ liệu được truyền sẽ được kéo dài thêm n. hơi sang phải:

CRC 32 là gì?

Điều này tương ứng với việc dịch trái n bit của chuỗi dữ liệu M(x). Cuối cùng, chia T(x) cho G(x) và lấy phần dư. Số dư chính là một chuỗi CRC n-bit.

Đang xem: Cách tính crc

CRC 32 là gì?

Việc rà soát CRC được thực hiện theo một trong hai cách: Lấy chuỗi dữ liệu chứa các bit rà soát CRC và chia nó cho đa thức sinh. Nếu số dư khác “0”, dữ liệu thu được bị lỗi. Tách riêng chuỗi dữ liệu và chuỗi CRC. Chỉ cần lấy chuỗi dữ liệu và chia cho đa thức sinh rồi so sánh phần còn lại của phép chia với chuỗi CRC. Nếu hai chuỗi không giống nhau, dữ liệu thu được bị hỏng. Ví dụ về phép tính CRC-4, tương ứng với số bit rà soát là 4 bit, với đa thức sinh như sau: x^4 + x + 1 (b10011) Dữ 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 lúc san sớt sẽ được kéo dài thêm 4 bit “0”:x^11 + x^9 + x^5 (b1010_0010_0000)

CRC 32 là gì?

Hình 2. Tính toán chuỗi CRC
Rà soát CRC được thực hiện trên chuỗi dữ liệu có đính kèm CRC như sau:

CRC 32 là gì?

Hình 3. Rà soát CRC – trong trường hợp nhận đúng, số dư bằng 0​

CRC 32 là gì?

Hình 4. Rà soát CRC bằng cách chia chuỗi dữ liệu với CRC cho đa thức bộ tạo – trường hợp sai 1 bit và trường hợp sai 2 bit, phần còn lại khác 0
Bộ thu sẽ ko phát hiện lỗi dữ liệu lúc chuỗi dữ liệu sai và chuỗi CRC cũng giống như trị giá CRC của chuỗi dữ liệu sai. Tuy nhiên, xác suất xảy ra trường hợp này là thấp. Xác suất này càng thấp thì chuỗi CRC càng dài.

CRC 32 là gì?

Xét đa thức sinh g(x) = x + 1, là đa thức CRC-1, hãy tính CRC cho chuỗi 8 bit b10100010 và chuỗi b10011111.

Xem thêm: Foc là gì? Giảng giải đầy đủ Foc có tức là gì? Ý nghĩa của từ Foc

CRC 32 là gì?

So sánh kết quả với phương pháp tính chẵn lẻ đã trình diễn ở trên, chúng ta có thể thấy sự tương đồng. CRC-1 là chẵn lẻ.3. Nguyên tắc mạch tính CRCXem xét các ví dụ được hiển thị ở trên, CRC được tính theo quy tắc sau: Nếu bit MSB của số đếm hiện nay là 1, nó sẽ được XORed (mô-đun-2) với đa thức tạo Nếu bit MSB của số đếm hiện nay bằng nhau tới 0 nó sẽ ko thay đổi

CRC 32 là gì?

Để thực hiện mạch CRC-1, ngoài việc XOR tất cả các bit dữ liệu đầu vào như đã trình diễn ở trên, chúng ta có thể thực hiện dựa trên nguyên tắc chia đa thức như đã trình diễn ở trên. Mạch cần 2 FF để lưu trị giá sau mỗi lần XOR và mạch sẽ dịch chuyển 1 bit sau mỗi lần XOR để lấy 1 bit dữ liệu mới như hình dưới:

CRC 32 là gì?

Hình 9. Mạch nguyên tắc của CRC-1 Trong hình trên, bit MSB sẽ điều khiển MUX lựa chọn có XOR với đa thức sinh x+1 hay ko? Tuy nhiên, sau mỗi chu kỳ tính toán, bit MSB luôn bị loại trừ nên mạch MUX và XOR của bit MSB là ko cần thiết. Mạch được rút ngắn như hình dưới đây:

CRC 32 là gì?

Xét mạch MUX, nếu bit MSB là 1 thì bit 0 XOR với bit 1, nếu bit MSB là 0 thì tương ứng bit 0 XOR với bit 0, tương tự mạch MUX bị loại trừ thay thế bằng bit XOR 1 0.

CRC 32 là gì?

Hình 11. Mạch nguyên tắc CRC-1 (bỏ qua mạch MUX)​
Bit 0 chỉ được sử dụng để lưu trữ trị giá bit đã dịch, vì vậy nó cũng có thể bị xóa.

Xem thêm: Tuple Data Type In Python Tuples, Python Tuples Tutorial

CRC 32 là gì?

Hình 12. Mạch nguyên tắc CRC-1 (bỏ FF đầu vào)​
Ở đây, bit CRC chỉ có 1 bit nên việc thêm bit 0 vào chuỗi dữ liệu đầu vào để tính CRC là ko cần thiết vì bất kỳ trị giá XOR nào bằng 0 đều bằng chính nó.

CRC 32 là gì?

Hình 12. Mạch nguyên tắc CRC-1
Trình diễn tiêu biểu cho mạch CRC như sau:

CRC 32 là gì?

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 mạch CRC-4 với đa thức sinh x^4 + x + 1, mạch nguyên tắc để tính CRC-4 như sau (chú ý, vị trí XOR bằng “0” loại trừ cả cổng MUX và cổng XOR) :

CRC 32 là gì?

5. Mã RTL để tính CRC5.1 tiếp nối Nhận xétQua hai ví dụ trên, có nhận xét chung như sau: Tại vị trí sinh ra bit đa thức là “0” thì chỉ là dịch chuyển bit Tại vị trí sinh ra bit đa thức là “1” thì cổng XOR là đã chèn dữ liệu Tiếp nối để tính toán chuyển đổi CRC từ MSB sang LSB với số lần chuyển đổi bằng độ dài dữ liệu cùng với độ dài của trị giá CRC. Ví dụ: đối với dữ liệu 8 bit sử dụng CRC-4, số lần dịch chuyển là 12 lần với 4 bit cuối cùng là 4 số 0 được thêm vào chuỗi dữ liệu.5.2 Phân tích mô đun tạo và rà soát CRC.Dựa trên các nhận xét trên, một thiết kế triển khai CRC chung được triển khai như sau: Sử dụng một CRC_CTRL_POLY xác định để cho phép tạo tín hiệu đầu vào kiểm soát trị giá của đa thức tạo nếu muốn. Xem xét rằng độ rộng của tín hiệu điều khiển bằng với số bit CRC và với số mũ tối đa của đa thức tạo. Ví dụ: nếu đa thức tạo là x^4 + x + 1, độ rộng tín hiệu là 4 bit và trị giá được gán cho tín hiệu điều khiển là 4’b0011 (bỏ qua bit 1 của x^4) Sử dụng CRC_CHECKER xác định để kích hoạt tạo của công dụng rà soát CRC Sử dụng thông số CRC_GPW_MAX cho phép định cấu hình chiều rộng của đa thức trình tạo. Bề rộng của đa thức sinh bằng số mũ lớn nhất của đa thức sinh. Ví dụ: nếu đa thức bộ tạo là x^4 + x + 1 thì CRC_GPW_MAX = 4Sử dụng thông số CRC_POLY_VALUE cho phép sử dụng trị giá của đa thức bộ tạo nếu ko sử dụng tín hiệu điều khiển do khái niệm CRC_CTRL_POLY tạo ra. Ví dụ: nếu CRC_CTRL_POLY ko được xác định, đa thức sinh là x^4 + x + 1 thì CRC_GPW_MAX = 4 và trị giá CRC_POLY_VALUE = 4’b0011 Sơ đồ tín hiệu giao tiếp của mô-đun CRC như sau:

CRC 32 là gì?

Hai tín hiệu ctrl_en và chk_en sẽ điều khiển công dụng tạo và rà soát CRC như sau, lúc tín hiệu ctrl_en hoạt động, dữ liệu dùng để tạo CRC hoặc cần rà soát CRC sẽ mở đầu chuyển thành data_in. ctrl_en sẽ hoạt động bằng với số bit cần dịch chuyển trên data_in. Nếu chk_en = 0 thì lúc ctrl_en = 0, crc_seq sẽ giữ trị giá chuỗi CRC trong 1 chu kỳ clock Nếu chk_en = 1 thì lúc ctrl_en = 0, crc_error sẽ báo lỗi CRCcrc_error = 1 thì trình tự rà soát thất bại CRCcrc_error = 0 thì trình tự rà soát ko bị lỗi Mạch tổng quát của từng bit trong thanh ghi chứa trị giá CRC như sau:

CRC 32 là gì?

Riêng bit 0 có đầu vào là data_in, mạch như sau:

CRC 32 là gì?

Lúc CRC_CHECKER được xác định, mạch rà soát lỗi CRC sẽ được tạo ra như sau:

CRC 32 là gì?

5.3 Mã RTLLink tải code RTL và testbench: CRC RTL codepass (nếu có): nguyenquanicd5.4 Kết quả mô phỏng

CRC 32 là gì?

Đa thức sinh: x^4 + x + 1 tương ứng với phép gán ctrl_poly_en = 4’b0011 Dữ liệu dùng để sinh CRC: 1010_0110 sau lúc thêm 4 bit “0” là 1010_0110_0000 => Kết quả tính CRC là 1110 Dữ liệu dùng để rà soát CRC: 1010_0110_1110 . Trong đó 4 bit LSB 1110 là chuỗi CRC => Kết quả rà soát CRC là crc_error = 0

Xem thêm các bài viết trong phân mục này: hỏi đáp

Bạn thấy bài viết Cách Tính Crc 32 Được Tính Như Thế Nào? Tổng Kiểm Tra Crc32 Được Tính Như Thế Nào có khắc phục đươc vấn đề bạn tìm hiểu ko?, nếu  ko hãy comment góp ý thêm về Cách Tính Crc 32 Được Tính Như Thế Nào? Tổng Kiểm Tra Crc32 Được Tính Như Thế Nào bên dưới để thpttranhungdao.edu.vn có thể thay đổi & cải thiện nội dung tốt hơn cho độc giả nhé! Cám ơn bạn đã ghé thăm Website Trường THPT Trần Hưng Đạo