Thiết kế bộ mã hóa QR-code bằng ngôn ngữ VHDL. Bài viết rình bày theo 5 phần chính bao gồm: Tổng quan đề tài, Phương pháp và thuật toán, Mã nguồn và Kết quả mô phỏng.
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN ********** Công nghệ FPGA ngôn ngữ VHDL E E4527 Bài tập lớn Thiết kế mã hóa QR code Giảng viên phụ trách: TS NGUYỄN ĐẠI DƯƠNG Sinh viên thực hiện: Phùng Tiến Dũng Vũ Văn Hưng Nguyễn Ngọc Tú Hà Nội, 2021 20160706 20164474 20162048 Mục lục Danh mục hình ảnh Chương – Tổng quan đề tài Mã QR gì? Yêu cầu toán Chương - Phương pháp thuật toán Phân tích liệu mã hóa Mã hóa tin liệu Bản tin mã sửa lỗi 12 Bản tin hoàn chỉnh 14 Cấu trúc 2D mã QR (QR image) 15 Chương – Lập trình 19 Mã VHDL 19 Testbench 20 Mã Python 21 Chương – Kết mô 23 Kết testbench 23 Kết mô hình ảnh 23 Kết Luận 25 Tài liệu tham khảo 26 Danh mục hình ảnh Hình Các phiên mã QR Hình Quy trình thực toán Hình Khả chứa ký tự theo phiên mức sửa lỗi Hình Kích thước số đếm ký tự cho chế độ phiên bả 10 Hình Bảng sau liệt kê số lượng từ mã liệu, từ mã sửa lỗi cấu tạo block cho phiên mức độ sửa lỗi mã QR 11 Hình Cấu trúc hồn chỉnh tin liệu 12 Hình Một số phép biến đổi GF (256) 13 Hình Các bước tạo ECC 14 Hình Bản tin hoàn chỉnh phiên 1-H 14 Hình 10 Các mẫu chức QR image 15 Hình 11 Thêm mẫu thời gian 16 Hình 12 Các module tối khu vực dành riêng 17 Hình 13 Sắp xếp chuỗi bit 18 Hình 14 Thứ tự đặt bit liệu cột hướng lên 18 Hình 15 Sơ đồ khối mã VHDL 19 Hình 16 Kết testbench khối input_number 20 Hình 17 Kết testbench khối generer_ecc 20 Hình 18 Kết testbench tồn chương trình 21 Hình 19 Hàm đọc file chèn dãy bits làm đầu vào cho chương trình 21 Hình 20 Tạo ảnh QRcode thư viện qrcode với python 21 Hình 21 Ảnh mã QR code tạo qrcode python 22 Hình 22 Kết file text chứa chuỗi bit 23 Hình 23 Hình ảnh QR sau mơ 24 Lời nói đầu Ngày nay, thường xuyên bắt gặp hình ảnh vng bên có nhiều ký tự lạ chồng chéo bảng quảng cáo bên đường, nhận thư mời chứa ô vuông lạ Đó QR Code (mã QR) Nó bắt đầu xuất khắp nơi nhãn bìa sản phẩm, gần phương thức nhận diện chủ yếu cho ứng dụng di động Mã QR giới marketing quảng cáo chuộng dùng cho ý tưởng quảng cáo tạp chí, băng ghế cơng viên, xe bt, đóng gói sản phẩm hay sản phẩm vật lý mà người tiêu dùng muốn tìm hiểu thêm thơng tin Ví dụ bạn nối kết website lên namecard, tờ rơi quảng cáo nối kết website Google Maps để dẫn hướng Tiện lợi hơn, tham dự buổi hội thảo hay triển lãm, bạn quét mã QR ban tổ chức cung cấp để dẫn đến tập tin video hay audio giới thiệu thêm thông tin chi tiết Công nghệ FPGA tảng công nghệ phát triển mạnh giúp thực hóa thiết kế chức thành sản phẩm ứng dụng Ưu điểm lớn FPGA tính linh động người dùng, giúp phát triển giải pháp tốt mà không phụ thuộc vào phần cứng nhà sản xuất Chúng ta sử dụng FPGA để thiết kế lập trình hầu hết chức mạng số Ngôn ngữ đôi với phần cứng FPGA thường thấy VHDL (VHSIC Hardware Description Language), ngôn ngữ mô tả phần cứng tốc độ cao Từ vấn đề thực tiễn với u cầu mơn học, nhóm chúng em lựa chọn đề tài “Thiết kế mã hóa QR-code ngơn ngữ VHDL” Đề tài giúp chúng em có nhìn sâu sắc lĩnh vực FPGA, rèn luyện khả tư logic với ngơn ngữ lập trình tạo tiền đề cho dự án thwucj tế sau Trong đề tài chúng em trình bày theo phần bao gồm: Tổng quan đề tài, Phương pháp thuật tốn, Lập trình Kết mơ Về bản, đề tài đạt được kết mong muốn yêu cầu ban đầu Tuy nhiên, dự án nên không tránh khỏi sai sót, nhóm chúng em mong nhận đóng góp ý kiến thầy bạn để dự án sau tốt Chúng em xin chân thành gửi lời cảm ơn đến TS Nguyễn Đại Dương, Trường Đại học Bách khoa Hà Nội giúp đỡ tư vấn cho nhóm q trình thực đề tài Nhóm xin chân thành cảm ơn Thư viện Tạ Quang Bửu tạo điều kiện cung cấp tài liệu hữu ích cho trình nghiên cứu Chương – Tổng quan đề tài Mã QR gì? Mã QR loại mã vạch đặc biệt mã hóa thông tin số, chữ ký tự Kanji QR Code, viết tắt Quick response code (tạm dịch "Mã phản hồi nhanh") hay gọi mã vạch ma trận (matrix-barcode) dạng mã vạch hai chiều (2D) đọc máy đọc mã vạch hay smartphone (điện thoại thơng minh) có chức chụp ảnh (camera) với ứng dụng chuyên biệt để quét mã vạch Một mã QR chứa đựng thơng tin địa web (URL), thời gian diễn kiện, thông tin liên hệ (như vCard), địa email, tin nhắn SMS, nội dung ký tự văn hay chí thơng tin định vị vị trí địa lý Tùy thuộc thiết bị đọc mã QR mà bạn dùng quét, dẫn bạn tới trang web, gọi đến số điện thoại, xem tin nhắn Định dạng mã QR tạo vào năm 1994 công ty Nhật Bản DensoWave, công ty Toyota chuyên sản xuất linh kiện ô tô Tiêu chuẩn định nghĩa ISO / IEC 18004: 2006 Việc sử dụng mã QR khơng cần có giấy phép Hình Các phiên mã QR Mã QR nhỏ mẫu có kích thước 21x21 pixel lớn 177x177 Các kích thước đặc trưng nhận biết phiên Ví dụ: Kích thước pixel 21x21 phiên 1, 25x25 phiên 2, v.v Kích thước 177x177 phiên 40 Ngoài ra, mã QR bao gồm mã sửa lỗi: mã hóa mã QR, ta tạo số liệu dư thừa giúp trình đọc QR đọc xác mã phần khơng thể đọc Có bốn cấp độ sửa lỗi mà bạn lựa chọn Mức thấp L, cho phép đọc mã 7% đọc Sau M, cung cấp khả sửa lỗi 15%, sau Q, cung cấp 25% cuối H, cung cấp 30% Dung lượng mã QR định phụ thuộc vào phiên mức độ sửa lỗi, loại liệu mà bạn mã hóa Có bốn chế độ liệu mà mã QR mã hóa: số, chữ số, nhị phân Kanji Danh sách phiên QR trang web Denso-Wave list of QR versions bao gồm thông tin số lượng bit liệu mã hóa phiên Mọi người tạo mã QR cho riêng hồn tồn miễn phí Chỉ cần gõ từ khóa "QR code generator" cơng cụ tìm kiếm bạn tìm nhiều cơng cụ trực tuyến giúp tạo mã QR Đọc mã QR việc dễ dàng Mã QR code người tạo sản phẩm đọc được, nhiều phương tiện kết nối đại đọc mã vạch đó.Mọi mã QR đọc máy đọc mã vạch, hay đọc smart phone chức chụp ảnh, xây dựng phần mềm chuyên biệt dùng để quết mã vạch u cầu tốn Có nhiều phiên mã QR khác với kích thước mức sửa lỗi đa dạng Đối với đề tài này, nhóm đặt mục tiêu vận dụng kiến thức học vào xử lý vấn đề thực tế nên chọn phiên QR đơn giản Yêu cầu cụ thể sau: - Viết mã VHDL để mã hóa chuỗi liệu số tự nhiên có chữ số (Chữ số chữ số thứ từ trái sang số khác 0) - Viết Testbench xuất file định dạng txt mang thông tin mã QR gồm: Bản tin liệu Bản tin sửa lỗi - Sử dụng phần mềm mơ vẽ hình ảnh QR code từ file txt - Sử dụng phần mềm smartphone để quét mã QR, kiểm tra kết mơ Nhóm sử dụng phiên mã hóa 1-H (sự khác biệt phiên trình bày chương 2) kích thước 21x21 pixel, có mức sửa lỗi cao Bản tin gôm 26 byte với byte liệu 17 byte sử lỗi Hình Quy trình thực tốn Chương - Phương pháp thuật tốn Q trình mã hóa QR loạt bước phức tạp, đặc biệt bước tạo mã sửa lỗi Chương cố gắng giải thích tồn quy trình thuật ngữ đơn giản Dưới tổng quan chung quy trình trước chuyển sang bước chi tiết Bước 1: Phân tích liệu Mã QR mã hóa chuỗi văn Tiêu chuẩn QR có bốn chế độ để mã hóa văn bản: số, chữ số, byte Kanji Mỗi chế độ mã hóa văn dạng chuỗi bit (1 0), chế độ sử dụng phương pháp khác để chuyển đổi văn thành bit phương pháp mã hóa tối ưu hóa để mã hóa liệu chuỗi bit ngắn Do đó, bước nên thực phân tích liệu để xác định xem văn mã hóa chế độ số, chữ số, byte Kanji hay khơng, sau chọn chế độ tối ưu cho văn Bước 2: Mã hóa liệu Bây giờ, chọn chế độ mã hóa thích hợp cho văn bản, bước mã hóa văn Phần mã hóa liệu mơ tả chi tiết trình cho chế độ mã hóa Kết bước chuỗi bit chia thành codeword (từ mã) liệu có độ dài từ bit Bước 3: Mã hóa mã sửa lỗi Như giải thích trên, mã QR sử dụng tính sửa lỗi Điều có nghĩa sau tạo chuỗi bit liệu đại diện cho văn bản, phải sử dụng bit để tạo từ mã sửa lỗi cách sử dụng quy trình gọi sửa lỗi Reed-Solomon Máy quét QR đọc từ mã liệu từ mã sửa lỗi Bằng cách so sánh hai, máy quét xác định xem có đọc liệu xác hay khơng sửa lỗi đọc liệu khơng xác Phần mã hóa sửa lỗi giải thích chi tiết trình tạo từ mã sửa lỗi Bước 4: Cấu trúc tin hoàn chỉnh cuối Dữ liệu từ mã sửa lỗi tạo bước trước phải xếp theo thứ tự thích hợp Đối với mã QR lớn, liệu từ mã sửa lỗi tạo thành khối khối phải xen kẽ theo đặc điểm kỹ thuật mã QR Quá trình giải thích phần cấu trúc thơng báo cuối Bước 5: Vị trí mơ-đun hình ảnh ma trận QR 2D Sau tạo từ mã liệu từ mã sửa lỗi xếp chúng theo thứ tự, bạn phải đặt bit ma trận mã QR Các từ mã xếp ma trận cách cụ thể Trong bước này, đặt mẫu chung cho tất mã QR, chẳng hạn hộp ba góc Q trình giải thích chi tiết vị trí mơ-đun phần ma trận Bước 6: Mặt nạ liệu Một số mẫu định ma trận mã QR khiến máy quét mã QR khó đọc mã xác Để chống lại điều này, đặc điểm kỹ thuật mã QR xác định tám mẫu mặt nạ, mẫu thay đổi mã QR theo mẫu cụ thể Bạn phải xác định mẫu mặt nạ số dẫn đến mã QR có đặc điểm không mong muốn Điều thực cách đánh giá ma trận mặt nạ dựa bốn quy tắc phạt Mã QR cuối bạn phải sử dụng hình mặt nạ dẫn đến điểm phạt thấp Quá trình tạo mặt nạ giải thích phần tạo mặt nạ liệu Đây bước dành cho mã QR có kích thước lớn liệu phwucs tạp Trong đề tài không đề cập đến bước Bước 7: Thông tin định dạng phiên Bước cuối thêm thông tin định dạng (nếu cần) phiên vào mã QR cách thêm pixel vào vùng cụ thể mã bị bỏ trống bước trước Các pixel định dạng xác định mức độ sửa lỗi mẫu mặt nạ sử dụng mã QR Các pixel phiên mã hóa kích thước ma trận QR sử dụng mã QR lớn Để biết chi tiết bước cuối này, đọc phần thông tin định dạng phiên Bước bước bước dành cho mã QR có kích thước lớn liệu phức tạp Trong đề tài không đề cập đến bước Phân tích liệu mã hóa Mã QR mã hóa chuỗi văn Tiêu chuẩn mã QR có bốn chế độ để mã hóa văn bản: số, chữ số, byte Kanji Mỗi chế độ mã hóa văn dạng chuỗi bit (1 0), chế độ sử dụng phương pháp khác để chuyển đổi văn thành bit Mỗi phương thức tối ưu hóa để tạo chuỗi bit ngắn cho kiểu liệu Phần giải thích cách xác định chế độ sử dụng a Chế độ mã QR Bốn chế độ mã hóa bao gồm ký tự sau: - Chế độ Numeric mode dành cho chữ số thập phân từ đến - Chế độ Alphanumeric mode dành cho chữ số thập phân từ đến 9, chữ hoa (không phải chữ thường!) Và ký hiệu $, %, *, +, -,., /, và: dấu cách - Chế độ Byte mode, theo mặc định, dành cho ký tự từ ký tự ISO8859-1 Tuy nhiên, số máy quét mã QR tự động phát UTF-8 sử dụng chế độ byte - Chế độ Kanji mode dành cho ký tự byte từ ký tự Shift JIS Mặc dù UTF-8 mã hóa ký tự Kanji, phải sử dụng ba bốn byte để làm Mặt khác, Shift JIS sử dụng hai byte để mã hóa ký tự Kanji, đó, chế độ Kanji nén ký tự Kanji hiệu Nếu toàn chuỗi đầu vào bao gồm ký tự dải byte kép Shift JIS, sử dụng chế độ Kanji Cũng sử dụng nhiều chế độ mã QR, mô tả sau trang - Chế độ Extended Channel Interpretation (ECI) mode định trực tiếp ký tự (ví dụ: UTF-8) Tuy nhiên, số trình đọc mã QR khơng hỗ trợ chế độ ECI không hiểu mã QR sử dụng - Chế độ Structured Append mode mã hóa liệu nhiều mã QR, tối đa 16 mã QR - Chế độ FNC1 mode cho phép mã QR hoạt động mã vạch GS1 b Cách chọn chế độ hiệu Để chọn chế độ hiệu cho mã QR, kiểm tra ký tự chuỗi nhập kiểm tra điều kiện sau: - Nếu chuỗi đầu vào bao gồm chữ số thập phân (0 đến 9), sử dụng chế độ số - Nếu chế độ số không áp dụng tất ký tự chuỗi nhập tìm thấy cột bên trái bảng chữ số, sử dụng chế độ chữ số KHƠNG THỂ mã hóa chữ thường chế độ chữ số; chữ hoa - Nếu có ký tự khơng nằm cột bên trái bảng chữ số mã hóa theo ISO 8859-1, sử dụng chế độ byte Như đề cập trên, trình đọc mã QR nhận UTF-8 chế độ byte - Nếu tất ký tự nằm ký tự Shift JIS, sử dụng chế độ Kanji Thay vào đó, ký tự Shift JIS mã hóa UTF-8, sử dụng chế độ byte cho chữ Kanji, nhìn chung hiệu sử dụng Shift JIS sử dụng chế độ Kanji cho ký tự Kanji Bài toán sử dụng chế độ số Numeric mode Mã hóa tin liệu Bước 1: Chọn mức sửa lỗi Trước mã hóa liệu, chọn mức sửa lỗi Như đề cập phần giới thiệu, mã QR sử dụng sửa lỗi Reed-Solomon Quá trình tạo từ mã sửa lỗi (byte) dựa liệu mã hóa Trình đọc mã QR sử dụng byte sửa lỗi để xác định xem có đọc khơng xác liệu hay khơng từ mã sửa lỗi sử dụng để sửa lỗi Có bốn cấp độ sửa lỗi: L, M, Q, H Bảng sau liệt kê cấp độ khả sửa lỗi chúng Error Correction Level M L Q H Error Correction Capability Khôi phục 7% liệu Khôi phục 15% liệu Khôi phục 25% liệu Khôi phục 30% liệu Bước 2: Xác định phiên nhỏ cho liệu Các kích thước khác mã QR gọi phiên Có bốn mươi phiên có sẵn Phiên nhỏ phiên có kích thước 21 pixel x 21 pixel Phiên 25 x 25 pixel Phiên lớn phiên 40, có kích thước 177 x 177 pixel Mỗi phiên lớn pixel so với phiên trước Mỗi phiên có dung lượng tối đa, tùy thuộc vào chế độ sử dụng Ngoài ra, mức độ sửa lỗi hạn chế dung lượng Bảng dung lượng ký tự liệt kê dung lượng tất phiên QR cho chế độ mã hóa định mức sửa lỗi Hình Khả chứa ký tự theo phiên mức sửa lỗi - Đầu tiên, thêm tối đa bit ‘0’ Terminal đệm vào phía sau chuỗi chuỗi chưa đủ độ dài - Tiếp theo, tổng số bit chưa phải bội 8, thêm tối đa bit ‘0’ vào sau chuỗi để tổng số bit bội - Nếu chuỗi chưa đủ độ dài, thêm chuỗi bit ‘11101100’ ‘00010001’ (tương đương số “236” “17”) vào chuỗi đủ độ dài Như tin liệu cho ví dụ “161998” có dạng đầy đủ hình Hình Cấu trúc hồn chỉnh tin liệu Bản tin mã sửa lỗi Các từ mã sửa lỗi cho phép người đọc mã QR phát sửa lỗi mã QR Phần trình bày giải thích cách tạo từ mã sửa lỗi sau mã hóa liệu Bước 1: Chia từ mã liệu thành khối cần thiết Trước tạo từ mã sửa lỗi, cần phải chia từ mã liệu thành khối nhỏ mã QR lớn phiên Ví dụ: tạo mã QR 5-Q, bảng sửa lỗi cho biết mã 5-Q có 62 từ mã liệu (chuỗi số nhị phân bit) Đối với phiên 1, chứa khối block Bước 2: Tìm hiểu Trường Galois Như đề cập phần trước, để tạo từ mã sửa lỗi, trình sử dụng phương pháp gọi Sửa lỗi Reed-Solomon Cùng với phép chia dài đa thức, phương pháp sử dụng trường Galois, tập hợp số bị giới hạn, số phép toán tạo số nằm tập hợp Tiêu chuẩn Mã QR cho biết sử dụng mô-đun số học bit-wise mô-đun byte-wise 100011101 số học Điều có nghĩa sử dụng Trường Galois 28 , hay nói cách khác Trường Galois 256, viết GF (256) Các số GF (256) nằm khoảng từ đến 255 (bao gồm cả) Lưu ý dải số biểu diễn byte bit (byte tám bit lớn 11111111, 255) Điều có nghĩa tất phép toán GF (256) dẫn đến số biểu diễn dạng byte bit 12 Một cách dễ hiểu hơn, Thuật toán tạo ECC sử dụng phép biến đổi trường Galois (GF) GF tập hợp biến đổi số X số 𝛼 𝑛 Hình Một số phép biến đổi GF (256) Bước 3: Đa thức tin liệu (Message Polynomial – MP) Đa thức sinh (Generator Polynomial - GP) Đa thức MP đa thức đầy đủ có hệ số byte tin liệu Ví dụ có đa thức MP sau: MP = 16x8 + 24x7 + 161x6 + 149x5 + 128x4 + 236x3 + 17x2 + 236x1 + 17 Đa thức sinh đa thức tạo cách nhân (x - α0) (x - αn-1) Trong n số lượng từ mã sửa lỗi phải tạo (xem bảng sửa lỗi) Như đề cập phần trước, α (alpha) Thực tế, để có đa thức GP cụ thể mà khơng cần phải tính toáncos thể sử dụng tool link: generator polynomial tool Ví dụ sử dụng phiên 1-H nên đa thức GP có dạng: GP = α0x17 + α43x16 + α139x15 + α206x14 + α78x13 + α43x12 + α239x11 + α123x10 + α206x9 + α214x8 + α147x7 + α24x6 + α99x5 + α150x4 + α39x3 + α243x2 + α163x + α136 Bước 4: Tạo tin mã sửa lỗi (Error Correction Codewords – ECC) ECC kết phép chia đa thức MP cho GP Trong ví dụ trên, MP có bậc nhỏ GP nên ta làm cho bậc cua đa thức cách nhân MP với x17 nhân GP với x8 Các bước tạo ECC sau: - Lập mảng: mảng GP chứa phần tử số mũ α mảng MP chứa phần tử hệ số tin liệu - B1a: Chuyển mảng MP dạng số mũ α theo trường GF Nhân vô hương ma trận GP với phần tử MP Được ma trận RS1 có phần tử số mũ α 13 - B1b: Chuyển mảng RS1 sang dạng số integer theo trường GF Tiến hanh XOR phần tửu tương ứng mảng RS1 với mảng MP Kết thu mảng RS1’ mảng số integer - Bước 2: Thực tương tự bước 1, thay mảng MP mảng RS1’ - Lặp lại đến hết bước thứ Kết thu mảng ECC Hình Các bước tạo ECC Bản tin hồn chỉnh Sau có ECC ta chuyển tách lấy hệ số đa thức ECC Chuyển đổi số hạng dạng số nhị phân bit Đặt chuỗi bit phía sau chuỗi bit tin liệu ta có tin hồn chỉnh Hình Bản tin hồn chỉnh phiên 1-H Các bit xếp có thứ tự vào ma trận 2D để hồn thành QR image Với ví dụ mã hóa số “161998” ta có tin hồn chỉnh chuỗi bit sau: 14 ‘000100000001100010100001111110011000000011101100000100011110 1100000100010101010101111010000001110001110111000001010000101 1110001110111001010011000110001011011100010110101010110100001 01110101000011001010101010’ Cấu trúc 2D mã QR (QR image) Bước đưa chuỗi bit tin hoàn chỉnh (Sau gọi chuỗi bit liệu) vào ma trận mã QR với mẫu chức cần thiết Mẫu chức phần tử liệu mã QR yêu cầu đặc điểm kỹ thuật mã QR, chẳng hạn ba mẫu cơng cụ tìm góc ma trận mã QR Trong QR image bao gồm ô pixel trắng đen đại diện cho bit bit Mỗi phiên mã QR có cải tiến cấu trúc QR image Trong đề tài này, nhóm sử dụng phiên 1-H nên trình bày cấu trúc phiên a Các mẫu chức (Function Patterns) Hình 10 Các mẫu chức QR image - Các mẫu cơng cụ tìm (finder patterns) ba khối góc mã QR bên trái, bên phải bên trái 15 - Các dấu phân cách (separators) vùng khoảng trắng bên cạnh mẫu cơng cụ tìm - Các mẫu chỉnh (alignment patterns) tương tự mẫu cơng cụ tìm, nhỏ đặt toàn mã Chúng sử dụng phiên trở lên vị trí chúng phụ thuộc vào phiên mã QR b Các mẫu thời gian (Timing Patterns) Các mẫu thời gian đường chấm kết nối mẫu cơng cụ tìm Hình 11 Thêm mẫu thời gian Các mẫu thời gian hai đường, ngang dọc, mô-đun sáng tối xen kẽ Mẫu thời gian theo chiều ngang đặt hàng thứ mã QR dải phân cách Mẫu thời gian dọc đặt cột thứ mã QR dấu phân cách Các mẫu thời gian bắt đầu kết thúc mô-đun tối Các mẫu chỉnh chồng lên mẫu thời gian mơ-đun sáng tối chúng ln trùng với mô-đun sáng tối mẫu thời gian, thấy hình ảnh bên phải Các hình ảnh sau hiển thị mẫu thời gian phiên khác mã QR c Các module tối khu vực dành riêng Mô-đun tối mô-đun màu đen đặt bên cạnh mẫu cơng cụ tìm phía bên trái Vùng thông tin dành riêng định dạng dải mô-đun bên cạnh dấu phân cách phải dành riêng cho vùng thông tin định dạng sau: 16 - Gần mẫu cơng cụ tìm bên trái, dải mô-đun phải dành riêng bên bên phải dấu phân cách - Gần mẫu công cụ tìm bên phải, dải mơ-đun phải đặt trước bên dấu phân cách - Gần mẫu cơng cụ tìm phía bên trái, dải mô-đun phải dành riêng bên phải dấu phân cách Hình ảnh sau hiển thị khu vực dành riêng có màu xanh lam Chúng ln đặt dọc theo dải phân cách, mã QR phiên Hình 12 Các module tối khu vực dành riêng d Sắp xếp chuỗi bit liệu Các bit liệu đặt phía bên phải ma trận tiếp tục lên cột có chiều rộng mô-đun Sử dụng pixel trắng cho pixel đen cho Khi cột lên đến đỉnh, cột mô-đun bắt đầu bên trái cột trước tiếp tục xuống Bất cột đến cạnh ma trận, chuyển sang cột mô-đun thay đổi hướng Nếu gặp phải mẫu chức vùng dành riêng, bit liệu đặt mô-đun không sử dụng Hình 13 sau cho thấy mơ hình đặt bit liệu mã QR Lưu ý đạt đến mơ hình thời gian dọc, cột bắt đầu bên trái Hình 14 cho thấy thứ tự đặt bit liệu cột hướng lên 17 Hình 13 Sắp xếp chuỗi bit Hình 14 Thứ tự đặt bit liệu cột hướng lên 18 Chương – Lập trình Mã VHDL Mã VHDL thiết kế bao gồm khối chính: - Khối array_outp.vhd: Khối có nhiệm vụ tạo mảng liệu số ngun, tin hồn chỉnh trình bày Nhận đầu vào số có chữ số xung clock (clk) - Khối output_bin.vhd: Khối có nhiệm vụ chuyển đổi mảng liệu số nguyên thành mảng liệu mà phần tửu bit ‘0’ ‘1’ Trong khối array_outp.vhd bao gồm khối con: - Khối input_nbr.vhd: Nhiệm vụ nhận chữ số đầu vào tạo mảng chứa liệu - Khối generer_ecc.vhd: Tính tốn hệ số đa thức ECC dựa thuật tốn trình bày chương Khối làm việc theo chu kỳ clock đưa mảng chứa hệ số ECC dạng số nguyên - Khối full_array_outp.vhd: Ghép hệ số tin dữu liệu tin ECC thành mảng hoàn chỉnh chứa mã liệu hoàn chỉnh Các phần tử mảng đầu số nguyên Hình 15 Sơ đồ khối mã VHDL Các kiến thức ngôn ngữ VHDL vận dụng toán bao gồm: - Sử dụng component Tạo sử dụng package riêng Viết sử dụng function, LUT Viết sử dụng proceduce Sử dụng linh hoạt đối tượng signal, variable, constant Sử dụng linh hoạt process biến nhạy Sử dụng đa dạng kiểu liệu nguyên thủy Sử dụng cú pháp phục vụ ép kiểu liệu 19 - Sử dụng kiểu liệu người dùng tự định nghĩa Sử dụng linh hoạt mảng Sử dụng toán tử logic toán tử số Sử dụng thư viện Textio Sử dụng lệnh rẽ nhánh lệnh lặp Testbench Mã testbench đưcọ sử dụng phương pháp debug, kiểm tra q trình tính tốn Đối với khối tính tốn quan trọng nhóm viết testbench để kiểm tra kết Khối input_number sau chạy testbench với đầu vào số “161998”được kết sau: Hình 16 Kết testbench khối input_number Khối generer_ecc có kết testbench sau: Hình 17 Kết testbench khối generer_ecc Kết testbench chương trình sau: 20 Hình 18 Kết testbench tồn chương trình Đối với testbench khối entity, nhóm xuất file “test_log.txt” để lưu chuỗi 208 bit File sử dụng để tạo QR image phần sau Mã Python Thư viện qrcode Python hỗ trợ tạo mã QR với đầu vào dãy số chuỗi string không hỗ trợ dạng chuỗi bit mã hóa hồn chỉnh từ liệu thơ ban đầu Do đó, chúng em sửa lại thư viện viết thêm hàm có chức đọc file chèn chuỗi bits mã hóa làm đầu vào thư viện Hình 19 Hàm đọc file chèn dãy bits làm đầu vào cho chương trình Tiếp theo, cần thêm vài bước đơn giản để tạo ảnh QR code từ thư viện này: Hình 20 Tạo ảnh QRcode thư viện qrcode với python Trong đó: 21 • version : integer từ đến 40 ấn định size qrcode • error_correction : Lựa chọn error correction QR code • box_size : Bao nhiêu pixels để thị box (1 box tương ứng với modues) • border : Sử dụng boxs làm viền quanh QR code Kết chương trình ảnh qrcode.png tạo hiển thị mã QR code đoạn mã bit tương ứng đầu vào: Hình 21 Ảnh mã QR code tạo qrcode python 22 Chương – Kết mô Kết testbench Chương trình thiết kế chạy theo yêu cầu Nhóm sử dụng Quartus II để viết mã Model SIM để chạy mô testbench Kết chạy testbench toàn thiết kế với đầu vào số “161998” chu kỳ clk = 20ns, trả file kết sau: Hình 22 Kết file text chứa chuỗi bit So sánh với kết tính tool [2] kết xác Kết mơ hình ảnh Chạy mã python Jupyter Annaconda Chương trình trả kết hình ảnh QR sau: 23 Hình 23 Hình ảnh QR sau mơ Sử dụng app quét mã QR smartphone để quét hình ảnh, trả kết “161998” Như thiết kế chạy hồn tồn xác Bài tốn hồn thành 24 Kết Luận Đề tài “Thiết kế mã hóa QR code” dựa công nghệ FPGA ngôn ngữ VHDL có ứng dụng thực tế Cùng với phát triển ngàu nhanh công nghệ, tin ứng dụng liên quan đến mã hóa giải mã sử dụng FPGA – VHDL nhanh chóng mở rộng Việt Nam Nhóm nỗ lực nghiên cứu, lập trình tiến hành kiểm thử thiết kế để hồn thành dề tài vịng tuần học Bước đầu, nhóm đạt yêu cầu thiết kế rèn luyện, trau dồi kiến thức ngơn ngữ VHDL Mơ hình thiết kế chạy ổn định bước mô phỏng, tạo mã QR phiển 1, mức sửa lỗi cao với liệu mã hóa văn gồm ký tự số Mã QR tạo qua kiểm thử phần mềm quét mã QR smartphone đưa kết xác 100% Dù đạt thành cơng ban đầu dự án thời gian cho đề tài hạn chế nên thiết kế mặt ngôn ngữ VHDL chưa tối ưu Thiết kế thực phần mềm Quartus II tiêu tốn 3000 logic elements Trong tương lai, nhóm hi vọng tiếp tục cho phiên mã hóa tốt hơn, tối ưu mặt thiết kế, mở rộng phiên QR mã hóa phát triển tính giải mã QR Nhóm mong nhận đóng góp thầy để làm tốt dự án sau Một lần nữa, nhóm xin chân thành gửi lời cảm ơn tới thầy Nguyễn Đại Dương hỗ trợ nhóm q trình thực đề tài 25 Tài liệu tham khảo [1] Douglas Perry (2002), VHDL Programming by Example, Fourth Edition The McGraw-Hill Companies, Inc [2] QR code Tutorial [Available]: https://www.thonky.com/qr-code-tutorial [3] Nguyễn Đại Dương (2020), [Slide] Công nghệ FPGA ngôn ngữ VHDL Trường ĐH Bách khoa Hà Nội, Viện Điện, Bộ môn Kỹ thuật đo tin học cơng nghiệp [4] Nhóm tác giả (2011), Thiết kế logic số Học viện Kỹ thuật Quân sự, Bộ môn Kỹ thuật xung số, vi xử lý – Khoa Vô tuyến điện tử [5] James R Armstrong, F Gail Gray (2000), VHDL Design Representation and Synthesis Prentice Hall; 2nd edition [6] Trương Thị Bích Ngà, Nguyễn Bình Phú (2018), Giáo trình thực hành thiết kế vi mạch số VHDL-XILINX Nhà xuất Thanh Niên 26 ... Mã QR gì? Mã QR loại mã vạch đặc biệt mã hóa thơng tin số, chữ ký tự Kanji QR Code, viết tắt Quick response code (tạm dịch "Mã phản hồi nhanh") hay gọi mã vạch ma trận (matrix-barcode) dạng mã. .. mã hóa phiên Mọi người tạo mã QR cho riêng hồn tồn miễn phí Chỉ cần gõ từ khóa "QR code generator" cơng cụ tìm kiếm bạn tìm nhiều cơng cụ trực tuyến giúp tạo mã QR Đọc mã QR việc dễ dàng Mã QR. .. border : Sử dụng boxs làm viền quanh QR code Kết chương trình ảnh qrcode.png tạo hiển thị mã QR code đoạn mã bit tương ứng đầu vào: Hình 21 Ảnh mã QR code tạo qrcode python 22 Chương – Kết mô Kết