Đỗ Duy Tân 1 trên cả phần mềm và phần cứng kit FPGA với các chuỗi dữ liệu bị lỗi nhằm kiểm tra độ hiệu quả của mã trong việc phát hiện lỗi thông qua mạch tổng hợp bộ giải mã.. Kết quả n
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
THÀNH PHỐ HỒ CHÍ MINH
S 0 9
CÔNG TRÌNH NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN
MÃ SỐ: SV2022-23 CHỦ NHIỆM ĐỀ TÀI: NGUYỄN THỊ HỒNG HẢO
THÔNG TIN VÔ TUYẾN
THIẾT KẾ VÀ THI CÔNG BỘ MÃ HÓA KÊNH THEO CÔNG NGHỆ FPGA NHẰM TĂNG ĐỘ TIN CẬY TRONG
S KC 0 0 8 0 8 2
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM
BÁO CÁO TỔNG KẾT
ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN
THIẾT KẾ VÀ THI CÔNG BỘ MÃ HÓA KÊNH THEO CÔNG NGHỆ FPGA
NHẰM TĂNG ĐỘ TIN CẬY TRONG THÔNG TIN VÔ TUYẾN
SV2022-23
Chủ nhiệm đề tài: Nguyễn Thị Hồng Hảo
TP Hồ Chí Minh, 11/2022
Trang 3BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM
BÁO CÁO TỔNG KẾT
ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN
THIẾT KẾ VÀ THI CÔNG BỘ MÃ HÓA KÊNH THEO CÔNG NGHỆ FPGA
NHẰM TĂNG ĐỘ TIN CẬY TRONG THÔNG TIN VÔ TUYẾN
SV2022-23
Thuộc nhóm ngành khoa học: Khoa học kỹ thuật
Dân tộc: Kinh
Ngành học: Công nghệ kỹ thuật Điện tử - Viễn thông
Người hướng dẫn: TS Đỗ Duy Tân
TP Hồ Chí Minh, 11/2022
MỤC LỤC
Trang 4DANH MỤC HÌNH v
DANH MỤC BẢNG viii
CÁC TỪ VIẾT TẮT ix
MỞ ĐẦU 1
I Tổng quan 1
II Lý do chọn đề tài 1
III Mục tiêu đề tài 2
IV Phương pháp nghiên cứu 2
V Đối tượng và phạm vi nghiên cứu 2
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 3
1.1 Tổng quan về mã khối 3
1.1.1 Mã khối 3
1.1.2 Mã Hamming 6
1.2 Mã CRC 7
CHƯƠNG 2: THIẾT KẾ BỘ MÃ HÓA VÀ GIẢI MÃ CRC-16 15
2.1 Yêu cầu thiết kế 15
2.2 Thiết kế bộ mã hóa CRC-16 15
2.3 Thiết kế bộ giải mã CRC-16 19
2.4 Lưu đồ và giải thuật 22
CHƯƠNG 3: KẾT QUẢ VÀ ĐÁNH GIÁ 25
3.1 Định nghĩa các Testcase 25
3.2 Mô phỏng 26
3.2.1 Testcase 1 26
3.2.2 Testcast 2 28
3.2.3 Testcast 3 29
Trang 53.2.4 Testcast 4 30
3.2.5 Testcast 5 32
3.3 Kết quả tổng hợp từ Xilinx ISE 36
3.3.1 Kiểm tra hoạt động bộ mã hóa CRC-16 36
3.3.2 Bộ giải mã CRC-16 38
3.4 Tài nguyên sử dụng 43
3.5 Đánh giá và so sánh 44
CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 46
4.1 Kết luận 46
4.2 Hướng phát triển 46
4.3 Kiến nghị 46
TÀI LIỆU THAM KHẢO 47
Trang 6DANH MỤC HÌNH
Hình 1.1: Bộ mã hóa và bộ giải mã CRC 8
Hình 1.2: Thực hiện tìm CRC thông qua phép chia số nhị phân 9
Hình 1.3: Kiểm tra CRC thông qua phép chia nhị phân lấy dư (không lỗi) 10
Hình 1.4: Thực hiện kiểm tra CRC thông qua phép chia số nhị phân (có lỗi) 10
Hình 1.5: Thiết kế đi dây cho bộ chia CRC 11
Hình 1.6: Đa thức sinh CRC-16 ở dạng nhị phân và dạng đa thức 11
Hình 1.7: Phép tính CRC bằng phương pháp chia đa thức 12
Hình 1.8: Biểu diễn lỗi 2 bit đơn phân biệt 13
Hình 2.1: Sơ đồ khối mạch mã hóa CRC-16 15
Hình 2.2: Sơ đồ chi tiết khối counter 16
Hình 2.3: Mô tả mạch tính CRC-16 với đa thức sinh g(x) = x16 + x15 + x2 + 1 17
Hình 2.4: Sơ đồ chi tiết khối Shifter_encode 18
Hình 2.5: Sơ đồ khối bộ giải mã CRC-16 19
Hình 2.6: Sơ đồ chi tiết khối Shifter_decode 21
Hình 2.7: Lưu đồ bộ counter 22
Hình 2.8: Lưu đồ bộ Shifter_encode 23
Hình 2.9: Lưu đồ bộ Shifter_decode 24
Hình 3.1: Dạng sóng kết quả tính toán CRC của block 4000 bit sau 80,34 us 27
Hình 3.2: Dạng sóng kết quả tính toán CRC của block 4000 bit sau 80,02 us 27
Hình 3.3: Dạng sóng kết quả tính toán CRC của block 32,32 bit sau 1.621 us 28
Hình 3.4: Dạng sóng kết quả tính toán CRC của block 1600 bit sau 32.02 us 29
Hình 3.5: Dạng sóng kết quả CRC của 3 block khác nhau cho ra cùng 1 mã CRC 30
Hình 3.6: Dạng sóng kết quả giải mã CRC của block 1616 bit sau 1.621 us 31
Hình 3.7: Dạng sóng kết quả của bộ giải mã CRC-16 được cho là không đáng tin 31
Hình 3.8: Dạng sóng kết quả giải mã CRC của block 1616 bit sau 1.600 us 31
Hình 3.9: Dạng sóng truyền 100 block có độ dài 4016 bit với mỗi block sai 2 bit 32
Hình 3.10: Dạng sóng truyền 100 block có độ dài 4016 bit với mỗi block sai 2 bit 33
Hình 3.11: Dạng sóng truyền 100 block có độ dài 4016 bit với mỗi block sai 3 bit 33
Hình 3.12: Dạng sóng bộ giải mã không phát hiện được block sai khi truyền 100 block có độ dài 4016 bit với với mỗi block sai 4 bit 34
Trang 7Hình 3.13: Dạng sóng truyền 100 block có độ dài 4016 bit với mỗi block sai 4 bit 34
Hình 3.14: Dạng sóng truyền 100 block có độ dài 4016 bit với mỗi block sai 5 bit 35
Hình 3.15: Dạng sóng truyền 100 block có độ dài 4016 bit với mỗi block sai 6 bit 35
Hình 3.16: Kết quả bộ mã hóa với block dữ liệu 4000 bit khi chưa có dữ liệu 36
Hình 3.17: Kết quả tính toán CRC của bộ mã hóa với block dữ liệu dài 4000 bit 36
Hình 3.18: Kết quả bộ mã hóa với block dữ liệu 1600 bit khi chưa có dữ liệu 36
Hình 3.19: Kết quả tính toán CRC của bộ mã hóa với block dữ liệu dài 1600 bit 37
Hình 3.20: Kết quả tính toán CRC của bộ mã hóa với block dữ liệu dài 1600 bit 37
Hình 3.21: Kết quả tính toán CRC của bộ mã hóa với block dữ liệu dài 1600 bit 37
Hình 3.22: Kết quả tính toán CRC của bộ mã hóa với block dữ liệu dài 1600 bit 37
Hình 3.23: Hiển thị khi chưa có dữ liệu đưa vào bộ giải mã 38
Hình 3.24: Kết quả kiểm tra của bộ giải mã với block data 0 bị sai 2 bit 38
Hình 3.25: Kết quả kiểm tra của bộ giải mã với block data 1 bị sai 2 bit 38
Hình 3.26: Kết quả kiểm tra của bộ giải mã với block data 2 bị sai 2 bit 39
Hình 3.27: Kết quả kiểm tra của bộ giải mã với block data 3 bị sai 2 bit 39
Hình 3.28: Kết quả kiểm tra của bộ giải mã với block data 0 bị sai 3 bit 39
Hình 3.29: Kết quả kiểm tra của bộ giải mã với block data 1 bị sai 3 bit 39
Hình 3.30: Kết quả kiểm tra của bộ giải mã với block data 2 bị sai 3 bit 40
Hình 3.31: Kết quả kiểm tra của bộ giải mã với block data 3 bị sai 3 bit 40
Hình 3.32: Kết quả kiểm tra của bộ giải mã với block data 0 bị sai 4 bit 40
Hình 3.33: Kết quả kiểm tra của bộ giải mã với block data 1 bị sai 4 bit 40
Hình 3.34: Kết quả kiểm tra của bộ giải mã với block data 2 bị sai 4 bit 41
Hình 3.35: Kết quả kiểm tra của bộ giải mã với block data 3 bị sai 4 bit 41
Hình 3.36: Kết quả kiểm tra của bộ giải mã với block data 0 bị sai 5 bit 41
Hình 3.37: Kết quả kiểm tra của bộ giải mã với block data 1 bị sai 5 bit 41
Hình 3.38: Kết quả kiểm tra của bộ giải mã với block data 2 bị sai 5 bit 42
Hình 3.39: Kết quả kiểm tra của bộ giải mã với block data 3 bị sai 5 bit 42
Hình 3.40: Kết quả kiểm tra của bộ giải mã với block data 0 bị sai 6 bit 42
Hình 3.41: Kết quả kiểm tra của bộ giải mã với block data 1 bị sai 6 bit 42
Hình 3.42: Kết quả kiểm tra của bộ giải mã với block data 2 bị sai 6 bit 43
Hình 3.43: Kết quả kiểm tra của bộ giải mã với block data 3 bị sai 6 bit 43
Trang 8Hình 3.45: Tài nguyên của bộ giải mã CRC-16 với dữ liệu block dài 4016 bit 44
Trang 9DANH MỤC BẢNG
Bảng 1.1: Minh họa bộ mã (5,2) 4
Bảng 1.2: Các mô hình mã hóa kênh truyền 5
Bảng 1.3: Ví dụ mã hóa của mã Hamming (7,4) 6
Bảng 1.4: Ví dụ giải mã và sửa lỗi của mã Hamming (7,4) 7
Bảng 1.5: Một số đa thức sinh g(x) thông dụng của mã CRC 7
Bảng 2.1: Bảng trạng thái của khối counter 16
Bảng 2.2: Bảng trạng thái của khối Shifter_encode 19
Bảng 2.3: Bảng trạng thái của khối Shifter_decode 20
Bảng 3.1: Bảng tóm tắt Testcase case của bộ mã hóa và giải mã CRC-16 25
Bảng 3.2: Gói dữ liệu bao gồm CRC-16 của USB 26
Bảng 3.3: Modbus message 28
Bảng 3.4: 3 block dữ liệu được tạo ra 29
Bảng 3.5: Bảng thời gian tối thiểu để mã hóa và giải mã CRC 44
Bảng 3.6: Bảng so sánh xác suất phát hiện được block sai khi truyền 100 block với xác suất lỗi ngẫu nhiên mỗi block là khác nhau 45
Trang 10CÁC TỪ VIẾT TẮT
Language
Trang 11BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM
THÔNG TIN KẾT QUẢ NGHIÊN CỨU CỦA ĐỀ TÀI
1 Thông tin chung:
- Tên đề tài: THIẾT KẾ VÀ THI CÔNG BỘ MÃ HÓA KÊNH THEO CÔNG NGHỆ
FPGA NHẰM TĂNG ĐỘ TIN CẬY TRONG THÔNG TIN VÔ TUYẾN
- Thành viên đề tài:
- Người hướng dẫn: TS Đỗ Duy Tân
1 trên cả phần mềm và phần cứng (kit FPGA) với các chuỗi dữ liệu bị lỗi nhằm kiểm tra độ hiệu quả của mã trong việc phát hiện lỗi thông qua mạch tổng hợp bộ giải mã
3 Tính mới và sáng tạo:
Phần lớn các bài báo hiện nay chỉ tập trung vào việc thực thi chức năng thiết kế qua mô phỏng và chưa có các trình bày chi tiết cho thiết kế đã để ra Vì vậy, để giúp cho đọc giả có thể dễ dàng tiếp cận với nội dung nghiên cứu, chúng tôi thực hiện trình bày
Trang 12chi tiết các thiết kế bộ mã hóa và giải mã CRC-16 và đánh giá kết quả thiết kế trên cả phần mềm Xilinx ISE và kit FPGA Xilinx AX309, trong đó khả năng phát hiện lỗi, tài nguyên sử dụng và thời gian hoạt động được xem xét và đánh giá chi tiết Bên cạnh đó, các Testcase dùng cho các đánh giá cũng tiệm cận với các ứng dụng thực tế như chuẩn
USB 2.0 và Modbus
4 Kết quả nghiên cứu:
Nghiên cứu đã đạt được những kết quả như: Xây dựng được bộ mã hóa CRC-16
từ lý thuyết dùng ngôn ngữ mô tả phân cứng Verilog HDL, các kết quả mô phỏng được xem xét cho thấy thiết kế có thể đáp ứng với các chuẩn truyền thông Bên cạnh đó, thiết
kế được tích hợp trên kit FGPA Xilix AX309 nhằm đánh giá tính thực thi của thiết kế trên phần cứng thực tế
5 Đóng góp về mặt giáo dục và đào tạo, kinh tế - xã hội, an ninh, quốc phòng và khả năng áp dụng của đề tài:
Trong đề tài này, chúng tôi đã thực hiện thiết kế, thi công và đánh giá chi tiết bộ
mã hóa và giải mã mã CRC-16 dựa trên công nghệ FPGA Các đánh giá về mã CRC được xem xét trên các block dữ liệu tiệm cận với ứng dụng trong các chuẩn truyền thông như USB 2.0 hay Modbus thông qua các Testcase mô phỏng Bài báo này có giá trị như một tài liệu tham khảo cho việc học tập các môn liên quan tới thiết kế hệ thống số và thiết kế vi mạch số, đặc biệt là thiết kế các khối mã hóa kiểm soát lỗi ứng dụng trong thông tin số
6 Công bố khoa học của SV từ kết quả nghiên cứu của đề tài (ghi rõ tên tạp chí nếu
có) hoặc nhận xét, đánh giá của cơ sở đã áp dụng các kết quả nghiên cứu (nếu có):
Bài báo “FPGA-Based Design and Implementation of CRC-16 Encoder and Decoder” đã được chấp nhận đăng trên tạp chí Khoa học Giáo dục Kỹ Thuật - Trường đại học Sư phạm Kỹ thuật thành phố Hồ Chí Minh ngày 30/08/2022
Ngày 10 tháng 11 năm 2022
SV chịu trách nhiệm chính thực hiện đề tài
(kí, họ và tên)
Trang 13Nhận xét của người hướng dẫn về những đóng góp khoa học của SV thực hiện đề
tài (phần này do người hướng dẫn ghi):
Ngày tháng năm
Người hướng dẫn
(kí, họ và tên)
Trang 14từ nhiều nguồn khác nhau như nhiễu hoặc việc truyền dẫn dữ liệu trong môi trường không dây bị ảnh hưởng bởi các vật cản, phản xạ từ các vật thể… Vì vậy hệ thống cần
có độ tin cậy cao với cơ chế phát hiện và sửa lỗi để đảm bảo tính toàn vẹn dữ liệu
vệ thông tin từ nguồn đến đích Theo đó, các mã kiểm tra và sửa lỗi cũng không ngừng được nâng cao, một số mã kiểm tra được sử dụng nhiều hiện nay như: LDPC, Reed-Solomon, CRC, Convolutional Codes, … được ứng dụng trong các khối mã hóa và giải
mã thông tin trong hệ thống số Với ưu điểm là đơn giản, phổ biến nhưng hiệu quả trong việc phát hiện các lỗi bệt trong quá trình truyền và lưu trữ dữ liệu số, mã CRC (Cyclic Redundancy Check) vẫn được tin dùng trong các giao thức truyền thông kỹ thuật số, nó cung cấp lớp bảo vệ đầu tiên chống lại sự cố hỏng dữ liệu trong quá trình truyền
Mã CRC đã được nghiên cứu trong nhiều bài báo [1-3] Trong bài báo [1], tác giả thiết kế và thi công bộ mã CRC cho hệ thống ADS-B (Automatic Dependent Surveillance Broadcast) dựa trên công nghệ FPGA Trong bài báo [2], tác giả đề xuất thuật toán CRC có khả năng giảm tỉ lệ lỗi của hệ thống bằng cách phát hiện và kiểm soát
Trang 15của mã CRC áp dụng cho hai tiêu chuẩn yêu cầu năng lượng thấp Bluetooth Low Energy (BLE) và IEEE 802.15.4 Đồng thời, các nghiên cứu, đồ án về lĩnh vực này vẫn còn rất hạn chế
Trong đề tài này, chúng tôi trình bày chi tiết thiết kế và thi công bộ mã hóa và bộ giải mã CRC-16 ứng dụng trong chuẩn Modbus RTU dựa trên công nghệ FPGA [4-5] – thường được sử dụng trong hệ thống truyền thông công nghiệp, để xác minh độ tin cậy của dữ liệu Thay vì chỉ đánh giá thực thi chức năng thiết kế qua mô phỏng như nhiều bài báo đang có, chúng tôi đánh giá kết quả thiết kế trên cả phần mềm Xilinx ISE và kit FPGA Xilinx AX309, trong đó khả năng phát hiện lỗi, tài nguyên sử dụng và thời gian hoạt động được xem xét và đánh giá chi tiết
III Mục tiêu đề tài
Mục tiêu đề tài là nghiên cứu, xây dựng và mô phỏng được một bộ mã hóa và một
bộ giải mã CRC-16
Nghiên cứu lý thuyết về mã CRC
Bộ mã hóa CRC-16 có thể tính toán ra mã CRC và nối vào block và truyền đi
Bộ giải mã CRC-16 có thể kiểm tra độ chính xác của block nhận được và giải mã block
IV Phương pháp nghiên cứu
- Nghiên cứu và phân tích lý thuyết
- Dùng các ngôn ngữ lập trình mô tả phần cứng như Verilog và các phần mềm máy tính hỗ trợ cho quá trình thiết kế vi mạch
- Đánh giá hiệu năng và tài nguyên hệ thống cần thiết của giải pháp được nêu ra
V Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu: Nhóm tập trung tìm hiểu lý thuyết, từ đó thiết kế các thành
phần của bộ mã CRC dựa trên ngôn ngữ Verilog Sau đó tiến hành tạo các bản thử nghiệm và quan sát kết quả thông qua môi trường mô phỏng
Phạm vi nghiên cứu: Đề tài chỉ nghiên cứu một trong số các mô hình mã hóa
kiểm soát lỗi đang có là CRC và chỉ giới hạn trong việc đánh giá hiệu năng của thiết kế qua mô phỏng và qua kit FPGA
Trang 16CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1 Tổng quan về mã khối
1.1.1 Mã khối
Mã khối là mã gồm k bit thông tin, người ta sẽ tính toán và tạo ra r bit kiểm tra tạo thành một từ mã (n, k) với n là tổng số bit (n = k + r) Nếu k bit được truyền từ bên phát qua môi trường đến bên thu Nếu bên thu nhận được k bit nguyên vẹn thì sẽ tính ra được
r bit giống bit kiểm tra đi kèm Có một tham số được quan tâm là R = k/n được gọi là tỉ
lệ thông tin chứa dữ liệu có ích trên tổng số thông tin truyền, tỉ lệ này liên quan mật thiết đến tốc độ truyền dữ liệu: ở điều kiện kênh truyền tốt thì ta cho tỉ lệ này cao lên, điều chế bậc cao hơn để cho tăng tốc độ, ngược lại trong điều kiện kênh truyền xấu thì phải cho tỉ lệ này thấp, bit kiểm tra nhiều lên và loại điều chế mang ít thông tin, bảo đảm độ tin cậy dữ liệu
Với k bits ta có thể tạo ra 1 bộ dữ liệu gồm 2 k thông tin, tương tự với n bits ta có
2 n từ mã Bởi vì n > k cho nên số lượng từ mã luôn luôn lớn hơn số lượng thông tin, suy
ra rằng: sẽ có (2 n – 2 k ) từ mã sẽ không phù hợp với bất kì thông tin nào, các từ mã này
được gọi là từ mã không hợp lệ Ví dụ: Mã Hamming (7, 4) với độ dài từ mã là n = 7 bit, có 3 bit mang dữ liệu và 7 bit chẵn lẻ
Khoảng cách Hamming
Khoảng cách Hamming giữa hai dãy ký tự có chiều dài bằng nhau được định nghĩa
là tổng số lượng các bit ở vị trí tương đương có giá trị khác nhau Khoảng cách Hamming dùng để đo số lượng thay thế cần phải có để đổi giá trị của một dãy ký tự sang một dãy
Trang 17Ví dụ: Trong ví dụ bên dưới từ mã có 2 lỗi và khoảng cách Hamming giữa 2 từ mã
là d(11111, 01101) = 2
Khoảng cách tối thiểu
Khoảng cách tối thiểu là khoảng cách Hamming nhỏ nhất giữa tất cả các cặp ký tự
Bằng cách xác định khoảng cách tối thiểu của bộ mã từ đó sẽ cung cấp cho chúng
ta khả năng phát hiện lỗi ngẫu nhiên của bộ mã Từ mã nhận được là tổng (phép cộng modulo-2) của từ mã được truyền và mẫu lỗi Vì vậy, lỗi có thể phát hiện được khi chúng không bị thay đổi từ từ mã được truyền thành từ mã hợp lệ khác hoặc bị thay đổi thành
từ mã không hợp lệ Theo định nghĩa của khoảng cách tối thiểu, hai từ mã bất kỳ của cùng một bộ mã khác nhau ít nhất là dmin bit Trường hợp luôn đáp ứng điều kiện này là
số lỗi nhỏ hơn khoảng cách tối thiểu dmin vì từ mã được truyền đi trong trường hợp này
sẽ không bị biến thành từ mã hợp lệ khác Do đó, có thể phát hiện đến t lỗi:
min 1
Trang 18Bên cạnh đó, khoảng cách tối thiểu còn có mối quan hệ với khả năng sửa lỗi ngẫu nhiên theo biểu thức sau đây
Với w là khả năng sửa lỗi ngẫu nhiên của mã Trong ví dụ trên w = 1, mã này có
khả năng sửa được lỗi 1 bit
Từ hai biểu thức (1.1) và (1.2) có kết luận: bất kì mã nào có khả năng phát hiện được tất cả lỗi đôi thì có khả năng sửa được lỗi 1 bit
Bảng 1.2: Các mô hình mã hóa kênh truyền
Mã không tuyến tính
Mã tuyến tính
Mã không tuần hoàn
e
>
1 Trong thực tế, luôn luôn tồn tại nhiễu và các yếu tố khác can thiệp làm thay đổi thông tin mà chúng ta muốn gửi đi Việc mã hóa dữ liệu sẽ giúp cho chúng ta có khả năng kiểm soát lỗi (Error control) từ đó cải thiện hiệu suất của hệ thống Có 2 loại kiểm soát lỗi đó là:
Trang 19+ Forward error control: thông tin sửa sai được thêm vào các ký tự hoặc các frame truyền đi, để bên nhận có thể phát hiện khi nào có lỗi và lỗi nằm ở đâu để sửa (có khả năng sửa lỗi)
+ Feedback (backward) error control: thông tin sửa sai được thêm vào các ký tự hoặc các frame truyền đi chỉ đủ để phát hiện khi nào có lỗi (không có khả năng sửa lỗi) Cơ chế yêu cầu truyền lại ký tự/frame sai được dùng trong trường hợp này (Automatic Repeat Request – ARQ)
1.1.2 Mã Hamming
Là một mã cao cấp hơn của các mã kiểm tra chẵn lẻ đơn thuần Mã Hamming chia
dữ liệu thành các khối để tính các bit chẵn lẻ Lấy ví dụ chúng ta có một từ dữ liệu dài
7 bit với giá trị là 0110101 Chữ d (data) được dùng để biểu thị các bit dữ liệu và chữ p (parity) để biểu thị các bit chẵn lẻ (parity bits) Đầu tiên, các bit của dữ liệu được
đặt vào vị trí tương thích của chúng, sau đó các bit chẵn lẻ cho mỗi trường hợp được tính toán dùng quy luật bit chẵn lẻ số chẵn
Bảng 1.3: Ví dụ mã hóa của mã Hamming (7,4)
Vị trí bit chẵn lẻ và các bit dữ liệu p1 p2 p1 p3 p2 p3 p4 p4 p5 p6 p7
Trong Bảng 1.3, bit parity p 1 được tính cho các bit dữ liệu (d 1 d 2 d 4 d 5 d 7), tương tự
cho p 2 , p 3 và p 4 Bằng phương pháp này, các bit chẵn lẻ của từng nhóm dữ liệu sẽ kết hợp với nhau và tìm ra chính xác vị trí bit bị sai
Giả sử bit cuối cùng trong nhóm dữ liệu là d 7 bị sai từ 1 0 Nhóm dữ liệu mới
sẽ là 10001100100 Trong Bảng 1.4 chúng ta sẽ phân tích quy luật giải mã của mã
Hamming Trong đó, vị trí bit bị sai là 1011 (đọc từ dưới lên) tương ứng với giá trị thập phân là 11
Trang 20Bảng 1.4: Ví dụ giải mã và sửa lỗi của mã Hamming (7,4)
Vị trí bit chẵn lẻ
và các bit dữ liệu p1 p2 p1 p3 p2 p3 p4 p4 p5 p6 p7
Kiểm tra chẵn lẻ
Bit chẵn lẻ Nhóm dữ liệu
cơ bản để giữ cho dữ liệu sạch và toàn vẹn trong một hệ thống nhúng
CRC là một phương pháp phát hiện lỗi bằng cách gắn thêm một khối bit phía sau khối dữ liệu Các bit bổ sung thêm vào được gọi là các bit CRC: giá trị chuỗi bit kiểm tra hay chuỗi CRC là số dư của phép chia chuỗi bit thông tin (message) cho một chuỗi bit đa thức sinh Đa thức sinh sẽ khác nhau tùy theo các giao thức quy định Phép chia trong tính toán CRC sử dụng phép modulo-2 CRC rất phổ biến, vì nó rất đơn giản để lắp đặt trong các máy tính sử dụng hệ cơ số nhị phân, hiệu quả trong việc kiểm tra, và rất phù hợp để dò ra các lỗi gây ra bởi nhiễu trong khi truyền dữ liệu
Các hàm CRC thường dùng và được chuẩn hóa
Các mã kiểm tra CRC được chia thành nhiều tiêu chuẩn, mỗi ứng dụng khác nhau
sẽ có các mã CRC phù hợp
Bảng 1.5: Một số đa thức sinh g(x) thông dụng của mã CRC
Tên mã Ứng dụng Đa thức biểu diễn
Trang 21Trong mô hình mã hóa ở Hình 1.1, chuỗi bit dữ liệu gồm k bits (ở hình minh họa
là 4 bit a 3 a 2 a 1 a 0 ) và từ mã phát đi gồm n bit nhị phân (ở hình minh họa là 7 bit:
a3a2a1a0r2r1r0) Kích thước của chuỗi dữ liệu được nối thêm vào n - k bits số 0 (trong
Trang 22sau khi đã chèn thêm các bit 0 sẽ đi qua bộ tạo mã CRC (generator) Bộ tạo mã CRC thực hiện phép chia nhị phân không nhớ (phép chia modulo-2) với số chia là một đa
thức sinh được quy định từ trước (hình minh họa là 1 đa thức sinh bậc 3 d 3 d 2 d 1 d 0) Cuối
cùng, phần dư của phép chia này (r 2 r 1 r 0) được nối thêm vào trước chuỗi dữ liệu tạo thành từ mã
Dữ liệu nối thêm bit 0
Đa thức sinh
Hình 1.2: Thực hiện tìm CRC thông qua phép chia số nhị phân
Các bước trong Hình 1.2 được tiến hành như sau: đầu tiên, thêm vào chuỗi dữ liệu
các bit 0, số lượng bit 0 phụ thuộc vào bậc của đa thức sinh Ở mỗi bước thực hiện, ta tiến hành xor chuỗi dữ liệu với số chia (chuỗi đa thức sinh) Sau khi xor, ta hạ 1 bit tiếp theo trong chuỗi dữ liệu xuống để tạo thành đủ số bit tương ứng với số chia Nếu bit có trọng số cao nhất của số dư sau mỗi lần chia bằng 0 thì ở bước tiếp theo ta sẽ thực hiện xor với chuỗi bit 0 thay vì xor với chuỗi đa thức sinh
Bộ kiểm tra mã CRC
Trong Hình 1.3 khối kiểm tra ở bộ giải mã sẽ thực hiện phép chia nhị phân không
nhớ của từ mã nhận được với cùng chuỗi đa thức sinh ở bộ mã hóa Phần dư của phép
chia là 1 chuỗi gồm n – k bit (n – k = 7 – 4 = 3 bits) được gọi là syndrome (s 2 s 1 s 0) Từ
mã nhận được là không lỗi nếu chuỗi syndrome chứa toàn bộ là các bit 0 và ngược lại
từ mã nhận được là có lỗi
Trang 23Hình 1.3: Kiểm tra CRC thông qua phép chia nhị phân lấy dư (không lỗi)
Hình 1.3 tiến hành phép chia lấy dư để kiểm tra lỗi của từ mã 1001110 Kết quả
nhận được là một từ mã đúng, không có lỗi Ngược lại, trong Hình 1.4 với từ mã là
1000110, dựa vào kết quả giải mã là số dư ta thu được syndrome 011 nên từ mã 1000110
Một trong những ưu điểm của mã CRC có thể thấy được qua những phân tích trên
đó là khả năng thi công phần cứng dễ dàng và đơn giản từ các linh kiện cổng xor, flip flop
Số chia (generator)
o Số chia được tiến hành xor nhiều lần với từng phần của số bị chia
o Số chia gồm n – k +1 bits Số chia có thể được định nghĩa trước hoặc
hoàn toàn là các bit 0 Việc số chia nhận giá trị nào trong hai giá trị trên phụ thuộc vào bit có trọng số lớn nhất của số bị chia mà số chia có thể
là chuỗi đa thức sinh đã được lựa chọn từ trước hoặc là chuỗi các bit 0
Trang 24Kết hợp những điều trên cùng với việc biết trước chuỗi bit của số chia, ta có thể tạo được một mô hình cố định:
Không cần kết nối cổng xor
ở vị trí bit có giá trị bằng 0
Bit MSB của dữ liệu
Hình 1.5: Thiết kế đi dây cho bộ chia CRC
Lấy ví dụ chuỗi bit số chia là 1011 (d 3 d 2 d 1 d 0 ) như Hình 1.5 Vì bit d2 bằng 0 nên nhánh d2 bị loại bỏ
Số bị chia (chuỗi dữ liệu): giữ nguyên vị trí và chỉ có số chia là dịch phải mỗi lần một bit Tuy nhiên xem xét trong quá trình thực hiện phần cứng, việc dịch chuỗi dữ liệu là một cách làm không hiệu quả Bởi vì số chia là cố định, chỉ
có dữ liệu đầu vào là thay đổi Vì vậy, ta sẽ giữ nguyên số chia và dịch chuỗi
dữ liệu
Số dư: gồm n – k bits nên chúng ta có thể sử dụng n – k thanh ghi để lưu giá
trị của các bits này
Mã CRC có thể được biểu diễn dưới 2 hình thức, đó là: dạng chuỗi các bit nhị phân
và dưới dạng đa thức Dạng đa thức sinh được lựa chọn vì phù hợp và thuận tiện cho việc phân tích mã CRC
Đa thức sinh
Hình 1.6: Đa thức sinh CRC-16 ở dạng nhị phân và dạng đa thức
Bộ tạo CRC thường không chỉ là chuỗi các bit 1 và 0, mà được tạo ra từ đa thức Các đa thức này tiện lợi vì 2 lý do: ngắn và thường dùng để chứng minh các ý niệm toán học trong quá trình giải mã CRC [6] Việc biểu diễn CRC dưới dạng đa thức thông qua
Hình 1.6 các bit nhị phân được thay bằng 4 số hạng giúp người đọc dễ hình dung hơn
Trang 25Điều này đặc biệt có lợi khi số lượng bit trình bày càng lớn Chú ý rằng bậc của đa thức sinh sẽ ít hơn so với khi biểu diễn dưới dạng bit nhị phân 1 đơn vị
Phép toán cộng và trừ được áp dụng lên đa thức là phép toán modulo-2 Và phép nhân hai đa thức thì chúng ta vẫn thực hiện như nhân đa thức thông thường
Ví dụ:x5 x4 x2cộng (hoặc trừ) cho x6 x4 x2sẽ cho ra kết quả là
x x Phép cộng (trừ) modulo-2 tiến hành loại bỏ các số hạng có cùng số mũ Chú
ý trong trường hợp số các số hạng có cùng số mũ là số lẻ thì phải giữ lại 1 số hạng Phép toán mà chúng ta quan tâm nhất ở đây đó chính là phép chia hai đa thức cho nhau Các bước tiến hành tương tự như thực hiện với các bit nhị phân Tuy nhiên, vì tính chất dịch vòng và tuyến tính của mã CRC nên chúng ta cần phải biến đổi số bị chia trước khi tiến hành phép chia đa thức
Bước 1: chúng ta nhân đa thức dữ liệu với r
x với rbậc của đa thức sinh Bước này tương tự như khi chúng ta chèn thêm các bit 0 vào trước chuỗi bit nhị phân dữ liệu
Đa thức dữ liệu m(x) trở thành: x x3( 3 1) x6 x3
Bước 2: ta thực hiện như phép chia hai đa thức thông thường Chú ý phép trừ vẫn được thực hiện theo modulo-2
Hình 1.7: Phép tính CRC bằng phương pháp chia đa thức
Hình 1.7 biểu diễn thực hiện phép chia dưới dạng đa thức sẽ đơn giản và nhanh
chóng hơn so với việc thực hiện chia dưới dạng các bit nhị phân vì đã bỏ qua bước chia cho các bit 0
Trang 26Từ biểu thức (1.3), T(x) chắc chắn chia hết cho G(x) Vì thế khả năng phát hiện lỗi
sẽ phụ thuộc vào dạng của biểu thức E(x) và kết quả của E(x) mod G(x) Dựa vào đây,
ta có thể đánh giá độ hiệu quả của đa thức sinh trong việc phát hiện các dạng lỗi và từ
đó rút ra được các quy luật để hình thành một đa thức sinh G(x) sao cho có thể phát hiện
được nhiều dạng lỗi nhất có thể
Lỗi 1 bit: giống với việc cộng thêm một đa thức ( ) E x x kvào đa thức gửi đi T x( ).
Vì thế nếu đa thức sinh có nhiều hơn 1 số hạng hoặc đa thức sinh không chia hết cho x i
(với i ∈ 𝑁) thì mã CRC có thể phát hiện được tất cả các trường hợp lỗi 1 bit
Lỗi 2 bit đơn phân biệt: Lỗi 2 bit đơn phân biệt được trình bày dưới dạng đa thức
như sau: E x( ) x i x j x x i( j i 1),(với ji) Nếu nhưG x( )có nhiều hơn 1 số hạng
thì G(x) không thể chia hết cho x i (đã chứng minh ở lỗi 1 bit) Trong trường hợpG x ( )
chia hết cho E x ( ) thì nó bắt buộc phải chia hết cho xj i 1.Vì vậy để phát hiện được
lỗi 2 bit đơn phân biệt thì G x ( )phải không chia hết cho xt 1với
Đa thức G(x) trong trường hợp này gọi là đa thức nguyên thủy
Hình 1.8: Biểu diễn lỗi 2 bit đơn phân biệt
Ta rút ra được, một đa thức sinh khi phân tích đa thức thành nhân tử có tồn tại
( x 1)thì sẽ phát hiện được toàn bộ lỗi là số lẻ các bit
Lỗi chùm (lỗi bệt): là một trong những yếu tố quan trọng để đánh giá mức độ hiệu
quả của một bộ mã hóa Lỗi chùm sẽ phải có nhiều hơn 2 số hạng trong đa thức lỗi (nếu bằng 2 thì là lỗi 2 bit) ta có:
Trang 27( ) mod ( ) 0 ( j i 1) mod( r 1) 0
x i được loại bỏ bớt vì đây là điều kiện tiên chuẩn của một đa thức sinh có thể phát
hiện được lỗi 1 bit nên đa thức sinh không thể chia hết cho x i
+ Tất cả các lỗi chùm sẽ được phát hiện nếu Lr(với Llà độ dài của đa thức lỗi) + Tất các các lỗi chùm với độ dài L r 1sẽ được phát hiện với xác suất là
1
112
a Không chia hết cho x
b Không chia hết cho x t 1,với 2 t n 1
c Khi phân tích thành nhân tử có ( x 1)
Nhận xét về hiệu năng của mã CRC
CRC là phương pháp phát hiện lỗi rất hiệu quả nếu đa thức sinh đáp ứng được các điều kiện vừa nêu do:
+ CRC có thể phát hiện các lỗi chùm có độ dài nhỏ hơn hoặc bằng bậc của đa thức sinh và phát hiện với xác suất cao các lỗi chùm có độ dài lớn hơn bậc của đa thức sinh + CRC có thể phát hiện các lỗi 2 bit ngẫu nhiên
+ CRC có thể phát hiện tất cả các lỗi chùm ảnh hưởng lên các bit có thứ tự lẻ
Trang 28CHƯƠNG 2: THIẾT KẾ BỘ MÃ HÓA VÀ GIẢI MÃ CRC-16
2.1 Yêu cầu thiết kế
Thiết kế bộ mã hóa và bộ giải mã CRC-16 dựa trên đa thức sinh
1
Thiết kế hoạt động với xung clock tần số 50 MHz
Độ dài 1 block đầu vào của bộ mã hóa CRC-16 là N và của bộ giải mã CRC-16 là N+16
2.2 Thiết kế bộ mã hóa CRC-16
Bộ mã hóa CRC-16 hoạt động dựa trên sự thay đổi trạng thái của tín hiệu en_data
Dữ liệu được đưa vào chân data_in, sau khi tính toán CRC với đa thức sinh
en_crc
en_crc clk rst_n en_data data_in
Hình 2.1: Sơ đồ khối mạch mã hóa CRC-16
Hình 2.1 mô tả sơ đồ khối trong mạch mã hóa CRC-16 Mạch gồm 2 khối chính
đó là khối counter và khối Shifter_encode Khối counter có nhiệm vụ tạo tín hiệu cho phép en_crc bằng cách đếm số lần dịch để đưa vào khối Shifter_encode cho phép đưa
dữ liệu đến ngõ ra data_out và crc_out
Trang 29+ D
Clk Q
reset
DataA
DataB Out DataA
T Out D
Clk Q
reset
1
0
N-1 0
M_3
D_0
D_1
Hình 2.2: Sơ đồ chi tiết khối counter
Khối Counter được thiết kế như Hình 2.2 Bảng trạng thái mô tả hoạt động bên trong của khối counter được thể hiện trong Bảng 2.1 Mux M_0 cho phép giá trị đếm
bên trong mạch tăng lên 1 đơn vị khi giá trị đếm nhỏ hơn N-1, Mux M_1 điều khiển cho phép mạch bắt đầu đếm khi tín hiệu en_data = 0 Khi giá trị đếm bằng giá trị N-1 mạch
sẽ giữ nguyên giá trị đếm đồng thời gán mức 1 cho tín hiệu en_crc Các bộ mux M_2, M_3 và Flip Flop D_1 đóng vai trò như một mạch chốt cho ngõ ra en_crc
Bảng 2.1: Bảng trạng thái của khối counter