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

Đồ án thiết kế hệ thống số xây dựng bộ mã hóa và giải mã dữ liệu dựa trên thuật toán aes trên nền tảng công nghệ fpga

35 35 1

Đ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 đề Đồ Án Thiết Kế Hệ Thống Số Xây Dựng Bộ Mã Hóa Và Giải Mã Dữ Liệu Dựa Trên Thuật Toán AES Trên Nền Tảng Công Nghệ FPGA
Tác giả Trần Quốc Tuân, Đỗ Thị Thảo, Đỗ Thanh Huy, Cù Quang Anh
Trường học Trường Đại Học
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đồ Án
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 35
Dung lượng 1,35 MB

Cấu trúc

  • III. Thuật toán AES.

    • a) Phép biến đổi SubBytes

    • b) Phép biến đổi ShiftRows

    • c) Phép biến đổi MixColumns

    • d) Thao tác AddRoundKey

    • e) thuật toán sinh khóa (KeyExpansion)

    • 3. Quy trình giải mã

      • a) Phép biến đổi InvShifRows

      • b) Phép biến đổi InvSuBytes

      • c) Phép biến đổi InvMixColumns

Nội dung

LÝ THUYẾT CƠ SỞ

Tổng quan về PLD và FPGA

1 Giới thiệu về cấu kiện logic khả trình (PLD).

Cuối thập kỷ 70 của thế kỷ XX, sự bùng nổ của các thiết bị logic chuẩn và mạch in đã mở ra câu hỏi về khả năng thiết kế kết nối trong các linh kiện lớn hơn Điều này cho phép tích hợp nhiều thiết bị logic vào một linh kiện duy nhất Ron Cline từ Signetics đã đề xuất ý tưởng sử dụng hai ma trận kết nối khả trình, cho phép tổ hợp linh hoạt giữa các cổng AND và cổng OR, cũng như cho phép nhiều cổng OR chia sẻ một cổng AND Mặc dù kiến trúc này rất linh hoạt, nhưng thời điểm đó, độ trễ từ đầu vào đến đầu ra khá cao khiến thiết bị hoạt động chậm, dẫn đến sự ra đời của công nghệ SPLD Sau đó, công nghệ CPLD và FPGA xuất hiện với mật độ tích hợp cao hơn và cấu trúc linh hoạt hơn, cho phép tạo ra các mạch logic phức tạp hơn.

Cấu kiện logic khả trình (PLD) là một loại cấu kiện điện tử với nhiều ưu điểm nổi bật và đang phát triển mạnh mẽ hiện nay Về nguyên lý, PLD có cấu tạo tương tự như PROM, nhưng việc lập trình PLD có thể thực hiện qua nhiều công nghệ khác nhau, như bẻ cầu trì hoặc chuyển mạch Điều đặc biệt là ứng dụng của PLD rất khác so với PROM; một PLD, được tạo thành từ các cổng AND, OR, XOR và Flip-Flop, có khả năng thực hiện nhiều hàm Boole khác nhau.

Kiến trúc chung của FPGA

Năm 1985, công ty Xilinx đã giới thiệu một ý tưởng đột phá, kết hợp thời gian hoàn thành sản phẩm và khả năng điều khiển của PLD với mật độ và lợi thế chi phí của GateArray, từ đó dẫn đến sự ra đời của FPGA.

Cấu trúc FPGA bao gồm các tế bào logic và các khối cách đều nhau, được kết nối thông qua các đường dẫn có thể thay đổi theo yêu cầu của người thiết kế Điều này cho phép người dùng tự do thiết kế, lập trình và điều chỉnh mạch điện Hiện nay, FPGA có mật độ cao, với khả năng lên tới hàng trăm tỷ cổng và cấu trúc ngày càng đa dạng, phức tạp hơn Nhiều chức năng phức tạp đã được tích hợp sẵn để tối ưu hóa hiệu quả sử dụng FPGA.

Có hai loại FPGA cơ bản: Loại lập trình lại được, dựa trên công nghệ SRAM và loại lập trình một lần.

3 Các bước thiết kế cho FPGA.

Bước 1: Nhập thiết kế (Design Entry)

Các công cụ thiết kế cho phép nhập thiết kế theo các cách:

Nhập thiết kế theo sơ đồ nguyên lý Schematic cho phép người thiết kế sử dụng các mô-đun có sẵn trong thư viện để tạo ra bản thiết kế theo yêu cầu Sau khi hoàn thiện sơ đồ nguyên lý, phần mềm sẽ chuyển đổi nó sang file ngôn ngữ mô tả phần cứng HDL, thường là VHDL hoặc Verilog.

Nhập thiết kế bằng ngôn ngữ mô tả phần cứng HDL (VHDL) cho phép người thiết kế sử dụng chương trình soạn thảo để mô tả toàn bộ bản thiết kế của mình một cách chi tiết và chính xác.

Công cụ thiết kế hỗ trợ nhập thiết kế dưới dạng sơ đồ, chẳng hạn như đồ hình trạng thái FSM, và sau đó chuyển đổi chúng sang HDL.

Bươc 2: Kiểm tra thiết kế (Design Verification)

Kiểm tra và mô phỏng chức năng của thiết kế HDL đã được tạo ra là bước quan trọng, mặc dù không nhất thiết phải thực hiện trong quá trình thiết kế.

Bước 3: Tổng hợp thiết kế (Design Synthesis)

Sau khi hoàn thành mô phỏng thiết kế, bước tổng hợp sẽ chuyển đổi thiết kế từ file văn bản HDL sang file Netlist, mô tả mạch thực ở mức thấp dưới dạng cổng logic và kết nối chúng.

Bước 4: Thực hiện thiết kế (Design Implementation)

Bước này sử dụng file Netlist và file ràng buộc để tạo thiết kế tối ưu cho FPGA, bao gồm các nguyên tắc thiết kế và các ràng buộc vật lý như vị trí đầu vào/ra, tốc độ, thời gian và tần số Quá trình này diễn ra qua các bước: Translate, Map, Place và Routing.

Bước này nhằm kiểm tra thiết kế và đảm bảo file Netlist tương thích với kiến trúc FPGA đã chọn, đồng thời kiểm tra file ràng buộc của người sử dụng để phát hiện lỗi mâu thuẫn với tham số FPGA Quá trình này bao gồm tối ưu hóa, biên dịch thành các thành phần vật lý và kiểm tra ràng buộc thiết kế Khi hoàn tất, các vấn đề sẽ được xác định và khắc phục.

Translate , sẽ có một bản báo cáo về các chương trình được sử dụng, danh sách các cổng I/O và các cấu kiện được sử dụng trong thiết kế.

Quá trình Map trong thiết kế FPGA tạo ra bản phân bố cho các tài nguyên cụ thể Nếu thiết kế vượt quá khả năng của thiết bị, nhiệm vụ này sẽ không hoàn thành Giai đoạn này xem xét các tham số ràng buộc như tốc độ và thời gian, và có thể yêu cầu thêm các thành phần logic để đáp ứng các yêu cầu về thời gian Mục tiêu là đưa mạch thiết kế vào một thiết bị cụ thể, đồng thời tạo ra báo cáo xác nhận các tài nguyên sử dụng trong chip, mô tả vị trí chính xác của các thành phần trong thiết kế.

Quá trình Place và Routing trong thiết kế FPGA bao gồm việc xác định vị trí tối ưu cho các khối chức năng và kết nối các cổng logic với các mô-đun cụ thể, nhằm tối ưu hóa kết nối và đảm bảo các ràng buộc về thời gian Sau khi hoàn thành, quá trình Routing tạo ra các liên kết vật lý giữa các khối logic và sản xuất file cấu hình với định dạng *.jed.

Bước 5: Mô phỏng định thời (Timing Simulation)

Sau khi hoàn thành bước Place and Routing, nhà thiết kế có thể thực hiện mô phỏng thiết kế ở mức cổng logic trên FPGA Phần mềm sẽ sử dụng file cấu hình đã tạo và kết hợp với thư viện mô hình thời gian của các họ FPGA, như thư viện VITAL trong ISE của Xilinx, để mô phỏng hoạt động của thiết kế với các tham số thời gian trễ và thời gian thiết lập của các cổng logic Bước này rất quan trọng, đặc biệt đối với những thiết kế phức tạp và yêu cầu tốc độ cao.

Chương trình điều khiển nạp cấu hình thực hiện kết nối thiết bị nạp với FPGA và nạp file cấu hình cho FPGA Khác với CPLD, FPGA yêu cầu thêm bước "Tạo file bit" để tạo ra file "luồng bit" nhằm nạp vào bộ nhớ cấu hình, thường là bộ nhớ tạm như SRAM.

4 Giời thiệu chung về FPGA của xilinx.

UART

UART là một mạch điện cho phép gửi dữ liệu song song qua kênh nối tiếp, bao gồm bộ truyền và bộ nhận Bộ truyền hoạt động như một thanh ghi dịch đặc biệt, chuyển đổi dữ liệu song song thành từng bít với tốc độ cố định Ngược lại, bộ nhận tiếp nhận từng bít dữ liệu và phục hồi lại thông tin ban đầu.

Khi ở trạng thái nghỉ, kênh nối tiếp duy trì mức ‘1’ Quá trình truyền dữ liệu bắt đầu với bít start khi kênh chuyển xuống mức ‘0’, tiếp theo là các bít dữ liệu, bít parity và bít stop, sau đó kênh trở lại mức ‘1’ và về trạng thái nghỉ Số lượng bít dữ liệu có thể là 6, 7 hoặc 8 bít, trong đó bít parity được sử dụng để kiểm tra lỗi Đối với UART, tín hiệu clock không được gửi kèm với khung dữ liệu, do đó, bộ truyền và nhận cần thỏa thuận trước về các tham số như tốc độ baud, số bít dữ liệu, bít stop và việc sử dụng bít parity.

Do thiếu xung clock đồng bộ, bộ nhận sử dụng các tham số đã được xác định trước để truyền dữ liệu Bộ nhận áp dụng mạch lấy mẫu nhằm ước lượng điểm giữa của bit, từ đó khôi phục lại giá trị bít.

Tốc độ lấy mẫu phổ biến nhất hiện nay là 16 lần tốc độ baud, tức là mỗi bít nối tiếp được lấy mẫu 16 lần Mạch lấy mẫu hoạt động theo nguyên tắc này.

Khi kênh ở trạng thái nghỉ và ở mức '1', mạch lấy mẫu sẽ chờ cho đến khi kênh được kéo xuống mức '0' để bắt đầu quá trình Trong quá trình này, bộ đếm bên trong mạch sẽ ghi lại số lượng mẫu đã được lấy.

• Khi bộ đếm tăng đến 7, tín hiệu đến đạt tới điểm giữa của bit start (do 1 bit start tương đương 16 mẫu) Bộ đếm được khởi động lại.

Bộ đếm sẽ tiếp tục đếm số mẫu đã lấy, và khi đạt đến giá trị 15, tín hiệu sẽ đến điểm giữa của bít data đầu tiên Tại thời điểm này, giá trị của bít sẽ được ghi lại và dịch vào thanh ghi, sau đó khởi động lại bộ đếm.

• Lặp lại bước 3 N-1 lần nữa (N là số bít data) để nhận các bít data còn lại.

• Nếu bít parity được sử dụng, lặp lại bước 3 một lần nữa để lấy bit parity.

• Lặp lại bước 3 M (M là số bít stop) lần để thu được bit stop.

Mạch lấy mẫu hoạt động như tín hiệu clock, sử dụng để xác định thời điểm hợp lệ của tín hiệu đầu vào bằng cách ước lượng điểm giữa của mỗi bít Mặc dù bộ nhận không có thông tin chính xác về thời gian của bít start, điểm giữa ước lượng chỉ sai lệch tối đa 1/16 Tuy nhiên, mạch này không phù hợp với tốc độ dữ liệu cao do tốc độ baud cần phải chia nhỏ từ tốc độ clock hệ thống.

UART là một giao thức truyền dữ liệu dựa trên thanh ghi dịch, chuyển đổi từng bít dữ liệu với tốc độ đã được xác định trước Tốc độ này được kiểm soát bởi mạch lấy mẫu, với tốc độ lấy mẫu gấp 16 lần tốc độ baud Tuy nhiên, quá trình lấy mẫu của tín hiệu gửi chậm hơn so với tín hiệu nhận Bộ UART truyền sử dụng một bộ đếm để theo dõi số mẫu, trong đó mỗi bít được dịch ra ngoài sau 16 lần lấy mẫu.

Sau khi xác nhận tín hiệu tx_signal là yêu cầu truyền, máy trạng thái hữu hạn sẽ lấy dữ liệu 7 bits và thực hiện truyền qua các trạng thái start, data, stop để dịch ra ngoài các bít tương ứng Tín hiệu hoàn thành được báo bằng cách thiết lập tín hiệu tx_done_tick trong một chu kỳ truyền Một bít đệm, tx_reg, được sử dụng để thực hiện việc truyền này.

Thuật toán AES

1 Giới thiệu về chuẩn mã hóa tiên tiến AES.

The Advanced Encryption Standard (AES) is a symmetric key encryption algorithm known as Rijndael, developed by Belgian cryptographers Joan Daemen and Vincent Rijmen AES is widely used for securing sensitive data and is recognized for its efficiency and strong encryption capabilities.

Vincent Rijmen đã giới thiệu AES vào năm 2002, cho phép xử lý khối dữ liệu đầu vào có kích thước 128 bit với các khóa có độ dài 128, 192 hoặc 256 bit Trong AES, các phép toán cộng và nhân được thực hiện trên các byte trong trường hữu hạn GF.

Quy trình mã hóa sử dụng bốn phép biến đổi chính:

• AddRoundKey: cộng mã khóa của chu kỳ vào trạng thái hiện hành Độ dài của mã khóa của chu kỳ bằng với kích thước của trạng thái.

• SubBytes: thay thế phi tuyến mỗi byte trong trạng thái hiện hành thông qua bảng thay thế (S-box).

• MixColumns: trộn thông tin của từng cột trong trạng thái hiện hành Mỗi cột được xử lý độc lập.

• ShiftRows : dịch chuyển xoay vòng từng dòng của trạng thái hiện hành với di số khác nhau.

Quy trình mã hóa được tóm tắt lại như sau:

• Thực hiện thao tác AddRoundKey đầu tiên trước khi thực hiện các chu kỳ mã hóa.

• N - 1 chu kỳ mã hóa bình thường, mỗi chu kỳ bao gồm bốn bước biến đổi liên tiếp nhau: SubBytes, ShiftRows, MixColumns, và AddRoundKey.

• Thực hiện chu kỳ mã hóa cuối cùng: trong chu kỳ này thao tác MixColumns được bỏ qua

Final Round Key Round Key

Key Register a) Phép biến đổi SubBytes

Quá trình phi tuyến của thuật toán diễn ra thông qua việc thay thế các byte bằng bảng tra S-box, được tạo ra từ một phép biến đổi khả nghịch trong trường hữu hạn GF (28) Để bảo vệ chống lại các tấn công dựa trên đặc tính đại số, S-box kết hợp phép nghịch đảo với một phép biến đổi affine khả nghịch, đồng thời được thiết kế để tránh các điểm bất động.

Thao tác SubBytes tác động trên từng byte của trạng thái

Bước này chuyển đổi mỗi byte trong ma trận thành byte tương ứng, trong đó hàng đại diện cho 4 bít đầu tiên và cột đại diện cho 4 bít cuối cùng của byte trong s-box Phép biến đổi ShiftRows là một bước quan trọng trong quá trình mã hóa.

Thao tác ShiftRows tác động trên từng dòng của trạng thái

Thao tác MixColumns tác động lên mỗi cột của trạng thái

Trong quá trình mã hóa AES, các hàng trong khối dữ liệu được dịch vòng theo một số bước nhất định Hàng đầu tiên giữ nguyên, trong khi hàng thứ hai được dịch vòng trái một vị trí, hàng thứ ba hai vị trí và hàng thứ tư ba vị trí Kết quả là mỗi cột trong khối đầu ra sẽ bao gồm các byte từ bốn cột khác nhau của khối đầu vào Đối với thuật toán Rijndael với các độ dài khối khác nhau, số vị trí dịch chuyển cũng sẽ có sự thay đổi.

Mỗi khối 4 byte đầu vào được kết hợp qua một phép biến đổi tuyến tính khả nghịch, tạo ra một khối 4 byte đầu ra Tính chất đặc biệt là mỗi byte đầu vào đều ảnh hưởng đến cả 4 byte đầu ra, cùng với bước ShiftRows.

MixColumns đã tạo ra tính chất khuyếch tán cho thuật toán Mỗi cột được xem như một đa thức trong trường hữu hạn và được nhân với đa thức c ( x ) = 3x 3 + x 2 + x + 2

(modulo x 4 + 1) Vì thế, bước nàycó thể được xem là phép nhân ma trận trong trường

Thao tác AddRoundKey tác động lên mỗi cột của trạng thái hữu hạn

Bước này mở rộng và thực hiện nhân ma trận từ bước shiftrows với ma trận các hệ số theo quy tắc đã nêu, nhằm thu được ma trận 128 bit đầu ra Cuối cùng, thao tác AddRoundKey được thực hiện để hoàn thiện quá trình.

Tại bước này, khóa con được kết hợp với các khối dữ liệu Mỗi khóa con trong chu trình được tạo ra từ khóa chính thông qua quá trình tạo khóa con Rijndael, với độ dài tương đương các khối Quá trình kết hợp diễn ra bằng cách XOR từng bít của khóa con với khối dữ liệu.

Quá trình tạo vòng khóa từ khóa chính bao gồm việc mỗi khóa con chứa 4 byte Với khóa ban đầu, mạch tạo khóa sử dụng 128 bít của khóa từ vòng mã hóa trước làm đầu vào để tạo ra khóa mới.

Quá trình tạo khóa như sau:

Lấy cột cuối cùng trong ma trận khóa và dịch byte đầu xuôi dưới cùng Các byte trong cột này sẽ được thay thế bằng các byte tương ứng trong S-box như trong bước subbytes Sau đó, thực hiện phép XOR từng bít với cột đầu tiên và cột thứ i tương ứng với vòng mã hóa thứ i của ma trận Rcon Kết quả thu được sẽ là cột đầu tiên trong ma trận khóa cho vòng i+1.

Tiếp theo, chúng ta thực hiện phép XOR từng bít của các cột từ 2 đến 4 của ma trận khóa đầu vào với cột mới tạo ra, nhằm tạo ra các cột còn lại cho ma trận khóa ở vòng i+1.

Quy trình giải mã được thực hiện qua các giai đoạn sau:

• Thực hiện thao tác AddRoundKey đầu tiên trước khi thực hiện các chu kỳ giải mã.

• Nr - 1 chu kỳ giải mã bình thường: mỗi chu kỳ bao gồm bốn biến đổi liên tiếp nhau: InvShiftRows, InvSubBtes, AddRoundKey, InvMixColumns.

• Thực hiện chu kỳ giải mã cuối cùng Trong chu kỳ này, thao tác InvMixColumns được bỏ qua. a) Phép biến đổi InvShifRows

InvShiftRows chính là phép biến đổi ngược của phép biến đổi ShiftRows Bước này dịch vòng ngược lại với bước ShifRows. b) Phép biến đổi InvSuBytes

Phép biến đổi ngược của thao tác SubBytes, được gọi là InvSubBytes, thực hiện tương tự như bước SubBytes nhưng sử dụng ma trận invS-box, là ma trận nghịch của S-box Bên cạnh đó, phép biến đổi InvMixColumns cũng đóng vai trò quan trọng trong quá trình mã hóa.

InvMixColumns là biến đổi ngược của phép biến đổi MixColumns Bước này thực hiện tương tự bước MixColumns nhưng ma trận nhân là nghịch đảo nhân trong bướcMixColumns.

XÂY DỰNG BỘ MÃ HÓA VÀ GIẢI MÃ DỮ LIỆU DỰA TRÊN THUẬT TOÁN AES TRÊN NỀN TẢNG CÔNG NGHỆ FPGA 18 I Đặt vấn đề

Thiết kế phần cứng

Sơ đồ khối: rx en edsel rst clk tx

Sơ đồ các chân vào ra rst tx edsel clk rx en

Sơ đồ các khối bên trong

Giải thích các chân tín hiệu:

• rx : Chân đầu vào dữ liệu qua cổng nối tiếp.

• tx : Chân đầu ra dữ liệu qua cổng nối tiếp.

• clk : Tín hiệu đồng bộ hệ thống.

• rst : Khởi động lại hệ thống

• en : Chân cho phép truyền / nhận dữ liệu.

• edsel : Chân lựa chọn mã hóa / giải mã dữ liệu.

Mạch bao gồm ba khối cơ bản: Bộ phát UART, Bộ thu UART và AES Trong bài viết này, chúng ta sẽ phân tích chi tiết thiết kế của các khối cơ bản này cho mạch mã hóa và giải mã.

1 UART Receiver rx clk baud rate generator

Flag FF d q rd_uart set_flag clr_flag rx rx_done_tick b_reg rx_empty

8 bits datain rx en rst clk rx_empty

Sơ đồ các chân vào ra được thiết kế để dễ dàng thay đổi trong tương lai, sử dụng hai hằng số quan trọng là numdbit và numstopbit Trong đó, numdbit đại diện cho số bít dữ liệu được truyền, còn numstopbit là số mẫu cho bit stop Số mẫu cho bit stop có thể là 16, 24 hoặc 32, tương ứng với thời gian của bit stop là 1, 1.5 và 2.

2 bít Trong thiết kế của đề tài này numdbit = 8 và numstopbit = 16.

Thuật toán hoạt động với 4 trạng thái chính: idle, start, data, và stop, phản ánh quá trình xử lý các bit start, data, và stop Tín hiệu s_tick cho phép bộ tạo tốc độ baud tạo ra tín hiệu lấy mẫu, trong khi hai bộ đếm được quản lý bởi các thanh ghi s và n Thanh ghi s theo dõi số lần lấy mẫu, đếm đến 7 trong trạng thái start, 15 trong trạng thái data, và đến numstopbit trong trạng thái stop Thanh ghi n theo dõi số bít dữ liệu nhận trong trạng thái data, và các bít này được dịch vào và tập hợp trong thanh ghi b Cuối cùng, tín hiệu rx_done_tick được thêm vào để xác nhận hoàn thành một chu kỳ nhận.

Sơ đồ khối của bộ UART nhận.

• Khối “baud rate generator” tạo tốc độ baud để truyền và nhận các bít dữ liệu

UART truyền thông không đồng bộ với tốc độ 19200 baud (19200 bits/s) không sử dụng tín hiệu clock đồng bộ Do đó, quá trình nhận dữ liệu cần phải được thỏa thuận trước thông qua các tham số đã định Để lấy mẫu các bít, bộ nhận tạo ra tín hiệu clock nhằm xác định điểm giữa của các bít đã truyền Khối tạo xung baud rate tạo ra tín hiệu lấy mẫu với tần số gấp 16 lần tốc độ baud.

The "receiver" block identifies the start, data, and stop bits, transferring the 8-bit data into a shift register Upon successfully receiving 8 bits, the rx_done_tick signal is activated to indicate that the data is ready to be sent to the encoder.

• Khối “register” là một bộ đệm tránh tình trạng ghi đè dữ liệu trong khi chưa xử lý xong 8 bits dữ liệu trước đó.

Khối AES theo dõi tín hiệu "rx_empty" để xác định thời điểm có 8 bits dữ liệu mới sẵn sàng gửi tới bộ mã hóa Sau khi hoàn tất việc đọc 8 bits, khối AES sẽ kích hoạt tín hiệu rd_uart nhằm xóa trạng thái "rx_empty".

If s==numstopbit Rx_done_tick=1 s = s+1

Thuật toán thiết kế bộ nhận UART trong FPGA:

Thuật toán hoạt động của bộ UART bắt đầu với tín hiệu Rx ở trạng thái nghỉ ('1') Bộ UART liên tục lấy mẫu tín hiệu Rx từ PC với tốc độ gấp 16 lần tốc độ Baud (19200 baud) Quá trình lấy mẫu diễn ra cho đến khi tín hiệu Rx chuyển sang '0', đánh dấu sự bắt đầu của quá trình trao đổi dữ liệu Khi Rx='0', bộ nhận chuyển sang trạng thái START và nếu tín hiệu s_tick='1', bộ nhận lấy mẫu bit start, khởi động bộ đếm Khi bộ đếm đạt giá trị s=7, bit start được khôi phục và bộ đếm được reset (s=0, n=0) Tiếp theo, bộ nhận chuyển sang trạng thái data; nếu s_tick='1', quá trình lấy mẫu các bit dữ liệu bắt đầu Mỗi khi mẫu được lấy, thanh ghi s tăng lên cho đến khi đạt đến điểm giữa của bit dữ liệu đầu tiên, tại đó bit dữ liệu được khôi phục và dịch vào thanh ghi b, đồng thời thanh ghi n tăng lên Quá trình này tiếp tục cho đến khi nhận đủ numdbit dữ liệu, sau đó bộ nhận chuyển sang trạng thái STOP Bộ đếm được khởi động để xác định điểm giữa của bit stop, và sau khi khôi phục bit stop, tín hiệu rx_done_tick được set lên '1', báo hiệu quá trình nhận đã hoàn tất Cuối cùng, bộ nhận quay về trạng thái nghỉ để chờ tín hiệu tiếp theo.

Tín hiệu rx_done_tick thông báo cho khối mã hóa khi bộ nhận đã hoàn tất việc nhận numdbit dữ liệu Sau khi nhận dữ liệu từ thanh ghi đệm của bộ UART, khối mã hóa sẽ kích hoạt tín hiệu rd_uart để xóa tín hiệu rx_done_tick, giúp bộ nhận có thể thông báo cho khối mã hóa khi nhận được các bít dữ liệu tiếp theo.

Hệ thống hoạt động với tần số 50MHz, yêu cầu tần số lấy mẫu gấp 16 lần tốc độ baud (16*19200 = 307200), do đó cần thiết kế bộ chia tần sử dụng bộ đếm mod-163 Để ngăn chặn lỗi ghi đè dữ liệu cũ bởi dữ liệu mới chưa xử lý xong, một bộ đệm được sử dụng để lưu trữ dữ liệu gửi vào, có thể là thanh ghi dịch hoặc stack theo cơ chế FIFO Thiết kế này cho phép xử lý dữ liệu nhanh chóng, với dữ liệu vào bộ mã hóa theo tín hiệu đồng bộ từ clock hệ thống và dữ liệu nhận trên kênh theo tốc độ lấy mẫu, nên một thanh ghi dịch đơn giản là lựa chọn phù hợp để đệm dữ liệu.

Chương trình VHDL mô tả bộ nhận có 4 process chính:

• Chiatan : process(clk,rst); có nhiệm vụ chia clock hệ thống để tạo tốc độ lấy

• mẫu.Capnhat : process (clk,tick); có nhiệm vụ cập nhật các trạng thái mới cho thanh ghi b, n, s.

Quá trình Uart: (cst, s_reg, n_reg, b_reg, rx_done_tick, rx) là bộ phận quan trọng trong bộ nhận, có chức năng cập nhật trạng thái của bộ nhận và khôi phục các bit đã nhận.

Quá trình "rx_done_tick, rd_uart, rst" được thiết lập để quản lý tín hiệu giao tiếp với khối mã hóa Khi nhận được dữ liệu numdbit, tín hiệu rx_done_tick sẽ thông báo cho bộ mã hóa, đồng thời tín hiệu rd_uart từ khối mã hóa sẽ xóa tín hiệu rx_done_tick để chuẩn bị cho lần nhận dữ liệu tiếp theo.

Bộ UART có cấu trúc tương tự như bộ nhận, bao gồm các khối truyền, tạo tốc độ baud và mạch giao diện Ngoài ra, UART truyền cũng sử dụng các hằng số numdbit và numstopbit với chức năng tương tự như bộ nhận, giúp dễ dàng thay đổi trong tương lai.

Thuật toán hoạt động với bốn trạng thái chính: idle, start, data và stop, tương ứng với các giai đoạn truyền bit start, data và stop Tín hiệu s_tick cho phép bộ tạo tốc độ baud tạo ra tín hiệu lấy mẫu, trong khi hai bộ đếm được quản lý bởi các thanh ghi s và n Thanh ghi s theo dõi số lần lấy mẫu, đếm đến 15 trong trạng thái start và data, và đến numstopbit trong trạng thái stop Thanh ghi n theo dõi số bít dữ liệu đã truyền trong trạng thái data Các bít sẽ được dịch ra ngoài sau 16 lần lấy mẫu, và tín hiệu tx_done_tick được thêm vào để xác nhận rằng một chu kỳ truyền đã hoàn thành.

Sơ đồ các chân vào ra tx clk baud rate generator

Flag FF q d wr_uart clr_flag set_flag tx_start tx tx_done_tick b_reg tx_empty

Sơ đồ các khối bên trong

Sơ đồ khối của bộ UART truyền:

The "baud rate generator" creates a baud rate for transmitting data bits, operating at 19200 baud, which equals 19200 bits per second It generates a sampling signal frequency that is 16 times the baud rate.

The "Transmitter" block sequentially transmits the start, data, and stop bits Once 8 bits are transmitted, the tx_done_tick signal is activated, indicating the completion of the transmission and the need to send the next set of 8 bits.

If s==numstopbit Rx_done_tick=1 s = s+1

• Khối “register” là một bộ đệm tránh tình trạng ghi đè dữ liệu trong khi chưa xử lý xong 8 bits dữ liệu trước đó.

Ngày đăng: 25/08/2021, 14:25

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w