1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tiểu luận cuối kỳ crc encoder decoder môn học thiết kế hệ thống và vi mạch tích hợp

35 11 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tiểu Luận Cuối Kỳ CRC Encoder/Decoder
Tác giả Phan Văn Võ, Phạm Quốc Huy, Trần Đình Lâm, Lê Đức Hòa, Trần Hiểu Nam
Người hướng dẫn TS. Đỗ Duy Tân
Trường học Trường Đại Học Sư Phạm Kỹ Thuật TP.Hồ Chí Minh
Chuyên ngành Thiết Kế Hệ Thống Và Vi Mạch Tích Hợp
Thể loại tiểu luận
Năm xuất bản 2023
Thành phố TP.Hồ Chí Minh
Định dạng
Số trang 35
Dung lượng 838,89 KB

Cấu trúc

  • CHƯƠNG 1: TỔNG QUAN VỀ CRC (4)
    • 1.1. Khái quát CRC (4)
    • 1.2 Đa thức sinh (4)
    • 1.3 Hiệu năng (7)
  • CHƯƠNG 2: TÌM HIỂU VỀ CRC ENCODER VÀ DECODER (8)
    • 2.1 Encoder / decoder là gì ? (8)
    • 2.2 CRC encoder / decoder (8)
    • 3.1 Encoder (12)
    • 3.2 Bộ Decoder (16)
    • 3.3 Đánh giá qua testbench (18)
    • 3.4. Nhận xét và đánh giá (24)
  • KẾT LUẬN (26)

Nội dung

Ví dụ, trong cuộc sống hàng ngày, gửi dữ liệu từ thiết bị này sang thiết bị khác bằng USB, bằng Bluetooth, bằng Ethernet,… CRC có độ tin cậy cao trong việc truyền dữ liệu vì thuật toán c

TỔNG QUAN VỀ CRC

Khái quát CRC

CRC (Cyclic Redundancy Check) là một phương pháp phát hiện lỗi hiệu quả trong truyền dữ liệu, thường được áp dụng trong mạng kỹ thuật số và thiết bị lưu trữ để nhận diện những thay đổi ngẫu nhiên trong dữ liệu thô Trong các tình huống hàng ngày như truyền dữ liệu qua USB, Bluetooth, hoặc Ethernet, CRC chứng tỏ độ tin cậy cao nhờ vào thuật toán dựa trên mã tuần hoàn.

Đa thức sinh

Bộ tạo CRC (bộ chia) không chỉ đơn thuần là chuỗi bit 1 và 0, mà còn được tạo ra từ các đa thức đại số Các đa thức này mang lại sự tiện lợi vì hai lý do chính.

• Chúng thường được dùng để chứng minh các ý niệm toán học trong quá trình CRC Đa thức của bộ chia:

∑ (ký số x i ); với i là vị trí của ký số, i= 0÷ n; bộ chia có n+1 bit

Quan hệ giữa chuỗi đa thức với biểu diễn nhị phân được minh họa ở hình sau:

Một đa thức sinh của bộ chia cần được chọn theo các đặc tính sau:

- Không được chia hết cho thức x

Để chia đúng cho đa thức (x + 1), cần đảm bảo rằng tất cả các nhiễu bệt có độ dài bằng bậc của đa thức sinh đều được phát hiện Đồng thời, điều kiện thứ hai cũng cần phải đảm bảo rằng tất cả các nhiễu bệt ảnh hưởng lên thứ tự bit lẻ được phát hiện.

Trong việc chọn đa thức cho bộ chia CRC, ta không thể sử dụng x (số nhị phân 10) hay x^2 + x (số nhị phân 110) vì chúng chia hết cho x Tuy nhiên, x + 1 (số nhị phân 11) có thể được chọn vì không chia hết cho x mà chỉ chia hết cho (x + 1) Tương tự, đa thức x^2 + 1 (số nhị phân 101) cũng được chấp nhận vì nó chia hết cho (x + 1) Các đa thức chuẩn trong bộ chia CRC được minh họa trong hình 13, với các số 12, 16 và 32 liên quan đến kích thước của dư số CRC, tương ứng với bộ chia CRC 13, 17 và 33 bit Đa thức sinh hoạt động như một bộ chia trong thuật toán CRC, và việc sử dụng CRC yêu cầu phải sử dụng cùng một đa thức bộ tạo trên bộ mã hóa.

Bộ giải mã cơ bản của ước đa thức tương tự như đa thức thông thường, nhưng nó trình bày mã nhị phân dưới dạng đa thức Đa thức sinh được áp dụng trong mã hóa và giải mã là CCITT X^8 + X^2 + X + 1 với độ rộng dữ liệu 8 bit CRC-8-CCITT thường được sử dụng trong các chế độ truyền bất đồng bộ như tiêu đề ATM và HEC của mạng ISDN.

CRC dựa trên lý thuyết mã sửa lỗi chu kỳ, sử dụng mã tuần hoàn hệ thống để mã hóa thông điệp Phương pháp này thêm giá trị kiểm tra có độ dài cố định nhằm phát hiện lỗi trong mạng truyền thông.

Trong mô hình OSI, CRC hoạt động ở lớp 2, tức là lớp Liên kết dữ liệu, có hai chức năng chính: Kiểm soát liên kết dữ liệu và Kiểm soát truy cập phương tiện Kiểm soát liên kết dữ liệu đảm bảo thiết kế và quy trình giao tiếp giữa các nút liền kề, bao gồm việc truyền tải dữ liệu từ nút này sang nút khác và cách chia sẻ liên kết Các chức năng của Kiểm soát Liên kết Dữ liệu bao gồm Kiểm soát Khung, Luồng và Lỗi, với các giao thức phần mềm được triển khai để đảm bảo việc truyền tải khung giữa các nút diễn ra một cách trơn tru và đáng tin cậy.

Cũng giống như nếu có một đa thức tạo G (x) với mã 𝑋 ^ 6 + X + 1, nó sẽ đại diện cho mã 1000011 Như trong Hình 1

Hiệu năng

CRC là một phương pháp phát hiện lỗi hiệu quả, đặc biệt khi bộ chia được chọn theo các quy tắc nhất định Phương pháp này có khả năng phát hiện tất cả các nhiễu bệt ảnh hưởng đến các bit có thứ tự lẻ, đồng thời có thể nhận diện các nhiễu bệt có độ dài nhỏ hơn hoặc bằng bậc của đa thức Hơn nữa, CRC cũng có khả năng phát hiện với xác suất cao các nhiễu bệt có độ dài lớn hơn bậc của đa thức.

TÌM HIỂU VỀ CRC ENCODER VÀ DECODER

Encoder / decoder là gì ?

Bộ mã hóa/giải mã (Encoder/Decoder) là một công cụ phần cứng quan trọng, giúp diễn giải thông tin và chuyển đổi nó thành mã, đồng thời có khả năng khôi phục mã về dạng gốc Trong lĩnh vực máy tính, bộ mã hóa tiếp nhận chuỗi ký tự hoặc tín hiệu analog và định dạng chúng để truyền tải hoặc lưu trữ một cách hiệu quả.

CRC encoder / decoder

Trong quá trình tính toán, sự khác biệt giữa bộ mã hóa và bộ giải mã chủ yếu nằm ở việc bộ mã hóa có một từ dữ liệu tăng cường, trong khi bộ giải mã chỉ sử dụng phần còn lại.

Quá trình mã hóa ban đầu tạo ra mã CRC duy nhất bằng cách nhập dữ liệu và sao chép vào bộ xử lý mã hóa Dữ liệu nhận một số bit theo CRC với nhị phân 0, sau đó được chia với bộ tạo đa thức Trong quá trình chia, một bit được dịch chuyển mỗi lần, và cần chú ý đến MSB để xác định xem phần còn lại có chia hết cho số chia đa thức hay không Quá trình này tiếp tục cho đến khi bit dữ liệu cuối cùng trong từ dữ liệu được sử dụng Kết quả cuối cùng sẽ là mã CRC duy nhất.

Trong bộ giải mã, các tính toán diễn ra để xử lý dữ liệu từ mã Dữ liệu này, được gọi là từ mã, sẽ được chia cho bộ tạo đa thức tương tự mà bộ mã hóa đã sử dụng Quá trình phân chia này tương tự như trong bộ mã hóa, và phần còn lại của phép tính sẽ được lấy ra làm kết quả Hình ảnh minh họa cho thấy rằng trong trường hợp không có lỗi, các giá trị còn lại sẽ bằng 0.

Trong hình 4, cho thấy rằng khi bộ giải mã nhận được một từ mã đã có một sự thay đổi khi gửi dữ liệu

 Vẫn có sự sai sót trong việc phát hiện lỗi khi sử dụng mã này

Ví dụ: Dữ liệu phát là 111101, đa thức sinh là 1101

111101000 (3 bit 0 ngoài cùng là 3 bit 0 được thêm vào)

Khả năng kiểm tra lỗi của CRC:

Ví dụ ta có dữ liệu thu là 111100011 (0 là bit bị lỗi so với dữ liệu bên phát ở ví dụ trên)

Kiểm tra lỗi: 111100011 (CRC sẽ dùng lại đa thức sinh

1101 được dùng lúc tính CRC)

101 (Phần dư khác 0 => dữ liệu thu bị lỗi)

CHƯƠNG 3: THIẾT KẾ VÀ CODE VERILOG CHO BỘ CRC

Encoder

Bộ encoder đóng vai trò quan trọng trong việc tạo ra mã CRC, mà sau đó sẽ được gắn vào dữ liệu đầu vào để tạo ra dữ liệu đầu ra Dữ liệu này sẽ được chuyển tiếp đến bộ decoder để kiểm tra lỗi Để tạo mã CRC, bộ encoder sử dụng phương pháp CRC-4 với bộ chia cố định là x4 + x + 1 Bộ encoder có ngõ vào cơ bản là dữ liệu 8 bit, cùng với một ngõ vào xung clock để kích hoạt mạch Ngoài ra, mạch còn có hai ngõ vào khác: ngõ vào en để cho phép mạch hoạt động hoặc dừng, và ngõ vào reset để khôi phục hoạt động của mạch.

Sử dụng CRC-4, bộ sẽ tạo ra mã CRC 4 bit Để xác định thời điểm hoàn thành tính toán, bộ còn cung cấp ngõ ra mang tên “hoanthanh”.

“hoanthanh” lên mức 1 đồng nghĩa việc tính toán đã hoàn tất

Sơ đồ khối của Modules

3.1.2 Thiết kế chi tiết Đầu tiên là việc thiết kế cho ngõ vào Với xung clock, ngõ vào là “clk”, ngõ vào này tạo xung cho module, phần tạo mã CRC sẽ hoạt động với cạnh lên của xung clock, do đó cần để phần code tính toán CRC vào trong khối lệnh:

Dữ liệu 8 bit được gọi là "data" và được khai báo với độ dài 8 bit Trước khi thực hiện phép trừ với bộ chia CRC-5, cần thêm 4 bit 0 vào cuối dữ liệu Sử dụng các thanh ghi và dây theo thứ tự đã định.

- Thanh ghi “temp” 12 bit : mang dữ liệu của data, đồng thời có thêm 4 bit

- Dây “datavao” 8 bit: có chức năng đưa dữ liệu của data vào temp

Để tạo một dữ liệu với 4 bit 0, giá trị của dữ liệu sẽ được đưa vào 8 bit sau của thanh ghi temp Như vậy, thanh ghi temp sẽ có giá trị với 4 bit đầu là 0 và 8 bit sau giống với dữ liệu ban đầu Dòng mã thực hiện quá trình này sẽ được viết như sau:

Sau khi thêm 4 bit 0 vào dữ liệu, bước tiếp theo là tính toán CRC Bộ chia của bộ mã hóa là x^4 + x + 1, tương ứng với giá trị nhị phân 10011, giá trị này sẽ được gán cho tham số.

Bộ encoder "bochia" sử dụng phương pháp tính CRC cơ bản nhất, cụ thể là phương pháp trượt Nó được trang bị một thanh ghi 4 bit "m", có nhiệm vụ xác định thứ tự các bít trong biến temp Khi thực hiện phép trừ với bộ chia, quá trình này đảm bảo tính chính xác trong việc kiểm tra lỗi.

Chúng ta sẽ sử dụng 5 bit, trong đó bit bên trái có trọng số lớn nhất và giá trị bằng 1, sau đó lấy thêm 4 bit tiếp theo để bắt đầu quá trình trừ Do đó, giá trị của thanh ghi “m” sẽ khác nhau tùy thuộc vào dữ liệu đầu vào Nếu dữ liệu đầu vào là 8 bit và bit trọng số lớn nhất có giá trị là 1, thì “m” sẽ có giá trị là 7, và quy trình này sẽ tiếp tục với các giá trị khác.

Sau khi thực hiện phép trừ, 5 bit giá trị sẽ được gán lại vào 5 bit vừa mới trừ Quá trình này tiếp tục cho đến khi bit thứ tự "m" trong temp có giá trị 1 Khi đó, 4 bit tiếp theo từ "m" sẽ được sử dụng để trừ cho bochia.

Hoạt động tính toán sẽ kết thúc khi giá trị m=3, vì dữ liệu không thể tiếp tục trừ cho bộ chia nếu số bit thấp hơn số bit của bochia Lúc này, 4 bit có trọng số thấp nhất của thanh ghi temp sẽ là mã CRC cần tìm, và sẽ được gán vào ngõ ra 4 bit mang tên “CRC”.

Giá trị của “m” khi bắt đầu sẽ là 11, còn khi bắt đầu trừ sẽ tùy thuộc vào data

Sau khi giải quyết phần tính toán CRC, phần tiếp theo sẽ là giải quyết các chân ngõ vào reset, en, ngõ ra “hoanthanh”

Khi ngõ vào reset được kích hoạt với giá trị "rst" bằng 1, mạch sẽ trở về trạng thái ban đầu Lúc này, biến m sẽ được thiết lập lại thành 11, giá trị của temp sẽ trở về giá trị khởi đầu trừ đi bochia, và CRC sẽ được đặt lại về 0 Để đạt được điều này, chúng ta cần thực hiện các liên kết phù hợp.

Trong bài viết này, chúng tôi đề cập đến việc sử dụng 13 khối gán dữ liệu cho biến tạm (temp) và khối tính toán CRC Đặc biệt, trước khi thực hiện các hoạt động, một điều kiện sẽ được thêm vào cho khối gán dữ liệu Bộ mã hóa sẽ tận dụng thanh ghi "m" để đơn giản hóa quá trình Thanh ghi "m" có thể nhận bất kỳ giá trị nào, miễn là không nằm trong khoảng từ 11 đến 3, vì đây là khoảng giá trị không hợp lệ.

Trong khối tính toán, thanh ghi "m" ban đầu có giá trị là 12 Để thực hiện khối gán giá trị, "m" cần bằng 12; sau khi gán xong, "m" phải giảm xuống còn 11 để tiếp tục khối tính toán Khi các liên kết đã hoàn tất, rst sẽ hoạt động mỗi khi tăng lên 1, lúc này "m" sẽ trở lại giá trị 12 và giá trị temp sẽ được gán lại, bắt đầu lại các bước tính toán từ đầu.

Với tín hiệu en, mạch sẽ dừng lại sau khi hoàn thành tính toán CRC tại khối tính toán Do đó, mạch sẽ dừng hoạt động nếu m = 3 hoặc en = 1.

Ngõ ra "hoanthanh" có chức năng thông báo rằng quá trình tính toán CRC đã hoàn tất, và nó sẽ được kích hoạt khi m = 3 Giá trị cho ngõ ra "hoanthanh" sẽ được gán thông qua thanh ghi i.

Bộ Decoder

Bộ decoder CRC-4 hoạt động tương tự như bộ encoder, với điểm khác biệt là dữ liệu đầu vào là 12 bit, bao gồm dữ liệu từ bộ encoder cộng thêm 4 bit CRC đã được tính toán Ngõ ra của bộ decoder là 3 bit, được gọi là "remainder", dùng để phát hiện lỗi.

CRC là 4 bit có trọng số thấp nhất của temp

15 thử dữ liệu truyền có bị lồi không Sơ đồ tổng quát của bộ decoder CRC –

Bộ decoder hoạt động tương tự như bộ encoder, với các ngõ vào clk, en, rst và ngõ ra hoàn thành các thanh ghi giống hệt nhau.

Ngõ vào codeworld hiện đã có sẵn 12 bit, vì vậy không cần phải gán thêm gì Khối gán giờ chỉ cần sử dụng câu lệnh duy nhất: temp = datavao.

Với datavao là wire 12 bit được nối với ngõ vào codeword

Khi bộ decoder hoàn tất tính toán với m bằng 3, 4 bit trọng số bé nhất của biến temp sẽ được gán vào ngõ ra remainder Nếu giá trị này bằng 0, dữ liệu được coi là không có sai sót, ngược lại, nếu khác 0, điều này cho thấy có lỗi xảy ra trong dữ liệu.

16 không, dự liệu có thể đã xảy ra sai sót hoặc do lúc bắt đầu, dữ liệu giống hoàn toàn với bochia.

Đánh giá qua testbench

3.3.1 Mô hình testbench tổng quát

Nối dây và các thanh ghi vào các ngõ vào/ra như sau:

*Encoder module CRC_4_EN_tb; reg clk; reg rst; reg [7:0] data; reg en; wire [3:0] CRC; wire hoanthanh;

.clk(clk), rst(rst), data(data), CRC(CRC), en(en), hoanthanh(hoanthanh) );

*Decoder module CRC_4_DE_tb; reg clk; reg rst; reg [11:0] codeword; reg en;

.clk(clk), rst(rst), codeword(codeword), remainder(remainder), en(en),

Về bộ tạo xung clock, cả hai bộ encoder và decoder đều dùng chung như sau: always begin

Về dữ liệu vào data của bộ encoder, mặc định sẽ là giá trị 8’b 11010011 Ngõ ra CRC của bộ encoder sẽ được thêm vào codeword của bộ decoder

Các trường hợp testcase khác nhau sẽ được dùng chung cho hai bộ encoder và decoder

Mạch bắt đầu hoạt động với tín hiệu clk = 0, en = 1 và rst = 0 trong khoảng thời gian 400ns, đủ lâu để xung clk với chu kỳ 20ns đảm bảo chương trình hoạt động hoàn chỉnh.

Thứ hai, rst = 1 trong 20ns, chương trình sẽ được reset về lại ban đầu

Thứ 3, rst về lại, en về 0 trong 50ns, sau đó lên 1 lại đến hết

Từ 400ns đầu trở về sau:

Với bộ Decoder: Do ngõ ra CRC của encoder là khi hoanthanh lên 1 là

1001 nên codeword của bộ decoder sẽ là 12'b110100111001

Từ 400ns đầu trở về sau:

Với bộ decoder: Với codeword = 12'b111100111001 (dữ liệu sai lệch với codeword ở trên 1 bit

Nhận xét và đánh giá

-Với dữ liệu vào là 8'b11010011, khi hoanthanh lên 1, CRC có giá trị là 4’b1001, sau đó giá trị vẫn được giữ nguyên như vậy đến khi rst lên 1

Sau khi tín hiệu reset (rst) được kích hoạt lên 1 trong 20ns, giá trị CRC trở về 0 Tiếp theo, tín hiệu rst giảm xuống 0 và en cũng giảm xuống 0 trong 50ns Sau đó, tín hiệu en lại tăng lên 1 Thời gian từ khi rst giảm xuống cho đến khi en hoàn thành tăng lên 1 không dài hơn 400ns so với giai đoạn đầu.

Như vậy, ngõ vào rst , en, khối dừng lại khi tính xong CRC, ngõ ra hoanthanh đã hoạt động hiệu quả

Các ngõ vào rst , en, khối dừng lại khi tính xong remainder, ngõ ra hoanthanh cũng giống như bộ encoder, chúng hoạt động hiệu quả

-Với dữ liệu vào là 12'b110100111001, khi hoanthanh lên 1, remainder bằng 0

-Với dữ liệu vào là 12'b111100111001, khi hoanthanh lên 1, remainder bằng 1010

Như vậy, có thể thấy 2 điều:

-Thứ nhất: Bộ encoder đã hoạt động đúng như yêu cầu

-Thứ hai: Bộ decoder cũng đã hoạt động đúng khi nó đã phát hiện được sự sai sót nếu như dữ liệu vào bị sai

Ngày đăng: 01/12/2024, 20:32

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w