Bối cảnh và vấn đề nghiên cứu

Trong kiến trúc hệ thống trên một vi mạch (System on Chip - SoC), việc tích hợp nhiều thành phần phần cứng như bộ xử lý trung tâm (CPU), bộ nhớ và các khối ngoại vi lên cùng một đế vi mạch đòi hỏi hệ thống bus kết nối phải giải quyết được sự chênh lệch lớn về tần số hoạt động và băng thông giữa các khối. Các kiến trúc bus chuẩn hóa như AMBA (Advanced Microcontroller Bus Architecture) của hãng ARM đã phân tầng hệ thống thành các bus hiệu năng cao dành cho hệ thống chính (AHB, AXI) và bus ngoại vi nâng cao (Advanced Peripheral Bus - APB) dành cho các thiết bị ngoại vi tốc độ thấp nhằm tối ưu diện tích và giảm thiểu công suất tiêu thụ.

Chuẩn giao tiếp nối tiếp bất đồng bộ UART (Universal Asynchronous Receiver-Transmitter) là một giao thức ngoại vi được ứng dụng rộng rãi trên nhiều thiết bị nhúng và máy tính nhờ cấu trúc phần cứng đơn giản và khả năng tùy biến tốc độ truyền. Khi chuẩn bus APB phát triển lên phiên bản APB4 với việc bổ sung các đường tín hiệu điều khiển và bảo vệ mới (như tín hiệu kiểm soát byte ghi PSTRB và tín hiệu báo lỗi truyền nhận PSLVERR), yêu cầu đặt ra là phải xây dựng lõi phần cứng (IP core) trung gian thực hiện chuyển đổi dữ liệu và đồng bộ hóa hoạt động giữa bus APB4 của hệ thống bên trong với ngoại vi UART tốc độ thấp bên ngoài.

Đề tài đặt ra mục tiêu thực hiện trọn vẹn việc thiết kế và đánh giá bộ chuyển đổi giao thức APB sang UART, tập trung vào hai nhiệm vụ nghiên cứu chính được xác định cụ thể trong văn bản:

  1. Thiết kế hoàn chỉnh một bộ chuyển đổi giao thức APB sang UART bằng ngôn ngữ mô tả phần cứng Verilog, hỗ trợ đầy đủ các tính năng của bus APB4, giao tiếp UART song công và các cơ chế xử lý ngắt.
  2. Xây dựng môi trường mô phỏng để kiểm tra, xác minh và đánh giá các trường hợp kiểm thử (testcase) chức năng của bộ chuyển đổi giao thức.

Đối tượng nghiên cứu của đồ án là bộ chuyển đổi giao thức APB sang UART (IP core APB-to-UART bridge). Phạm vi nghiên cứu tập trung vào việc thiết kế ở mức thanh ghi chuyển đổi (RTL), đánh giá chức năng của khối giao tiếp APB, khối truyền/nhận UART, bộ tạo xung baud rate, hệ thống thanh ghi cấu hình, bộ đệm FIFO và cơ chế xử lý ngắt/báo lỗi trên công cụ mô phỏng phần cứng.

Cơ sở lý thuyết và phương pháp

Khóa luận xây dựng giải pháp kỹ thuật dựa trên các tiêu chuẩn công nghiệp và mô hình lý thuyết truyền thông phần cứng:

  • Kiến trúc bus AMBA và chuẩn APB4 (v2.0): Mô hình giao tiếp Master - Slave không sử dụng đường ống (non-pipelined), tối ưu hóa diện tích vi mạch và năng lượng tiêu thụ. Chuẩn APB4 sử dụng các tín hiệu điều khiển đồng bộ theo xung nhịp hệ thống PCLK, tín hiệu tích cực mức thấp PRESETn, địa chỉ PADDR[31:0], lựa chọn thiết bị PSELx, tín hiệu cho phép PENABLE, tín hiệu điều khiển đọc/ghi PWRITE, dữ liệu ghi PWDATA[31:0], dữ liệu đọc PRDATA[31:0], tín hiệu kéo dài chu kỳ PREADY, tín hiệu bảo vệ PPROT[2:0], tín hiệu kiểm soát byte PSTRB[3:0] và tín hiệu báo lỗi truyền thông PSLVERR.
  • Giao thức UART: Giao tiếp nối tiếp bất đồng bộ truyền nhận khung dữ liệu gồm start bit (mức thấp '0'), chuỗi bit dữ liệu (quy chuẩn truyền từ bit có trọng số thấp nhất LSB đến bit có trọng số cao nhất MSB, độ rộng 8 bit), bit kiểm tra chẵn lẻ (parity bit: không parity, parity chẵn hoặc parity lẻ) và stop bit (mức cao '1'). Cơ chế phát hiện các lỗi đường truyền: lỗi tràn bộ đệm (overrun error), lỗi chạy ngầm (underrun error), lỗi đóng khung (framing error) và lỗi parity.

Tác giả sử dụng kết hợp các phương pháp nghiên cứu kỹ thuật:

  • Phương pháp phân tích và tổng hợp: Phân tích đặc tả kỹ thuật của AMBA APB4 và UART để xác định tập tín hiệu giao tiếp, quy trình bắt tay, máy trạng thái hữu hạn (FSM) và ánh xạ thanh ghi.
  • Phương pháp phân loại và hệ thống: Module hóa thiết kế thành 4 khối chức năng độc lập: APB Interface, BCLK Generator, UART Transmitter và UART Receiver.
  • Phương pháp thiết kế và mô phỏng phần cứng: Mô tả phần cứng bằng ngôn ngữ Verilog HDL, tổng hợp thiết kế và thiết lập các kịch bản kiểm thử (testbench) trên công cụ mô phỏng ISIM trong môi trường phần mềm Xilinx ISE.
  • Phương pháp khảo sát hệ thống thực tế: Đánh giá độ trễ truyền nhận, kiểm tra tính toán sai số xung nhịp và so sánh thời gian truyền thực tế so với thời gian truyền lý thuyết.

Thiết kế và triển khai hệ thống

Hệ thống chuyển đổi giao thức APB sang UART được thiết kế theo cấu trúc module phân cấp với sơ đồ khối tổng quát gồm 4 khối chính:

[Bus APB4] <---> [APB Interface] <---> [UART Transmitter] ---> [TXD]
                        |         <---> [UART Receiver]    <--- [RXD]
                        v
               [BCLK Generator]

1. Khối APB Interface

Khối APB Interface đóng vai trò cầu nối tiếp nhận các yêu cầu truy xuất từ APB Master, điều khiển máy trạng thái APB FSM, thực hiện giải mã địa chỉ đọc/ghi và quản lý các tín hiệu ngắt gửi về CPU:

  • Máy trạng thái APB FSM: Gồm 3 trạng thái (IDLE, SETUP, ACCESS). Tại trạng thái SETUP và ACCESS, tín hiệu PREADY được kéo xuống mức thấp trong 2 chu kỳ xung PCLK để mở rộng chu kỳ truyền dữ liệu và kích hoạt xung ghi WRITE_TX_EN hoặc đọc READ_RX_EN với độ rộng đúng 1 chu kỳ xung nhịp.
  • Tập thanh ghi cấu hình và điều khiển:
Địa chỉ Tên thanh ghi Độ rộng Chế độ Mô tả chức năng
0x00 REG_DATA 8-bit Đọc/Ghi Lưu trữ tạm dữ liệu ghi từ PWDATA sang Transmitter hoặc dữ liệu đọc từ Receiver sang PRDATA.
0x04 REG_BCLK 11-bit Đọc/Ghi Lưu trữ giá trị cấu hình tốc độ truyền BCLK_VAL.
0x08 REG_EN 8-bit Đọc/Ghi Cho phép ngắt ngưỡng TX (bit 0), ngắt ngưỡng RX (bit 1), ngắt tràn (bit 2), ngắt lỗi parity (bit 3), ngắt lỗi khung (bit 4), bật lõi IP (bit 5), bật parity (bit 6), chọn loại parity chẵn/lẻ (bit 7).
0x0C REG_THR 4-bit Đọc/Ghi Cấu hình mức ngưỡng kích hoạt ngắt cho FIFO Transmitter (bit 1:0) và FIFO Receiver (bit 3:2).
  • Khối điều khiển ngắt: Xử lý và gom các tín hiệu ngắt thành phần (ITX_THR, IRX_THR, I_RXOV, I_PE, I_FE) để tạo ngõ ra ngắt tổng I_TOTAL báo hiệu cho bộ xử lý.
  • Cơ chế báo lỗi bus: Tín hiệu PSLVERR được nâng lên mức cao ở chu kỳ hoàn tất truyền nếu phát hiện địa chỉ truy cập không hợp lệ hoặc tín hiệu chọn byte PSTRB không đúng quy định.

2. Khối BCLK Generator

Khối BCLK Generator nhận xung hệ thống PCLK và giá trị cài đặt BCLK_VAL từ thanh ghi REG_BCLK để tạo ra hai xung nhịp độc lập TX_BCLK và RX_BCLK, cho phép hệ thống hoạt động ở chế độ song công toàn phần (Full-duplex). Giá trị BCLK_VAL được tính toán theo công thức:

$$\text{BCLK_VAL} = \frac{\text{ClockFrequency}}{\text{Baudrate} \times 16}$$

Trong đó, hệ số 16 biểu thị tần số xung BCLK nhanh gấp 16 lần tốc độ Baud nhằm tạo 16 điểm lấy mẫu trong một chu kỳ bit dữ liệu UART, hỗ trợ việc định thời và đồng bộ lấy mẫu chính xác tại trung tâm của chu kỳ bit. Mỗi chu kỳ xung BCLK chỉ giữ mức cao trong đúng 1 chu kỳ PCLK.

3. Khối UART Transmitter

Khối truyền UART chuyển đổi dữ liệu song song 8-bit từ APB Interface thành chuỗi bit nối tiếp trên chân TXD:

  • Bộ đệm FIFO Transmitter: Cấu trúc 16 ô nhớ (mỗi ô rộng 8 bit), quản lý bởi hai con trỏ 5-bit write_pt và read_pt. Bit thứ 5 của con trỏ được sử dụng để phân biệt trạng thái rỗng (fifo_empty) khi hai con trỏ bằng nhau và trạng thái đầy (fifo_full) khi 4 bit đầu bằng nhau nhưng bit MSB khác nhau. Thanh ghi length_fifo theo dõi số ô dữ liệu hiện có để kích hoạt tín hiệu ngưỡng TX_THR.
  • Khối Control FSM và Transmitter FSM: Điều phối quá trình đọc dữ liệu từ FIFO sang thanh ghi tạm DATA_TEMP và tuần tự phát các bit ra đường truyền TXD (Start bit $\rightarrow$ Data bits D0..D7 $\rightarrow$ Parity bit nếu bật $\rightarrow$ Stop bit).

4. Khối UART Receiver

Khối nhận UART chuyển đổi dòng dữ liệu nối tiếp từ chân RXD thành dữ liệu song song 8-bit:

  • Cơ chế lấy mẫu và lọc nhiễu: Khi phát hiện sườn xuống của đường truyền RXD, khối nhận đếm 8 xung RX_BCLK (tương đương nửa chu kỳ bit) để lấy mẫu kiểm tra. Nếu tín hiệu vẫn ở mức thấp, hệ thống xác nhận Start bit hợp lệ và bắt đầu lấy mẫu các bit tiếp theo tại điểm giữa chu kỳ bit (sau mỗi 16 xung BCLK).
  • Bộ đệm FIFO Receiver và kiểm tra lỗi: Bộ FIFO 16 ô nhớ lưu trữ dữ liệu nhận được cùng trạng thái cờ lỗi tương ứng cho từng byte. Khối phát hiện và kích hoạt các cờ báo lỗi đóng khung RX_FE khi không nhận được Stop bit, lỗi chẵn lẻ RX_PE khi bit parity nhận được sai lệch so với tính toán, và lỗi tràn RX_OV khi nhận dữ liệu mới trong lúc FIFO đã đầy.

Nội dung chính theo từng chương

Chương 1: Tổng quan đề tài

Trình bày tính cấp thiết của đề tài xuất phát từ nhu cầu thiết kế các hệ thống SoC sử dụng kiến trúc AMBA của ARM; nêu bật vai trò của bus APB4 làm trung gian kết nối các khối ngoại vi tốc độ thấp như UART. Chương này xác định rõ 2 mục tiêu nghiên cứu, phạm vi giới hạn kỹ thuật (sử dụng ngôn ngữ Verilog HDL, công cụ Xilinx ISE và trình mô phỏng ISIM), 4 phương pháp nghiên cứu và bố cục tổng thể 5 chương của khóa luận.

Chương 2: Cơ sở lý thuyết

Hệ thống hóa nền tảng lý thuyết về hệ thống trên vi mạch (SoC) và các thế hệ chuẩn bus AMBA (từ AMBA 1 đến AMBA 5). Đi sâu phân tích đặc tả kỹ thuật bus APB4, bao gồm bảng tín hiệu chi tiết, giản đồ thời gian quá trình ghi/đọc có và không có trạng thái chờ (wait states), chức năng của các tín hiệu mới như PSTRB, PSLVERR, PPROT. Phân tích cấu trúc giao thức UART, định dạng khung dữ liệu 8-bit, nguyên lý bộ truyền/nhận và các dạng lỗi truyền thông nối tiếp.

Chương 3: Thiết kế hệ thống

Xây dựng chi tiết kiến trúc phần cứng của bộ chuyển đổi APB sang UART. Mô tả đặc tả tín hiệu và sơ đồ kết nối nội bộ của 4 khối chức năng: APB Interface (thiết kế máy trạng thái APB FSM, logic giải mã Read/Write Decoder, bản đồ 4 thanh ghi chức năng REG_DATA, REG_BCLK, REG_EN, REG_THR), BCLK Generator (nguyên lý tạo xung chia tần số lấy mẫu 16x), UART Transmitter (cấu trúc bộ đệm FIFO 16 ô nhớ 8-bit, máy trạng thái điều khiển phát tín hiệu TXD) và UART Receiver (mô hình lọc nhiễu start bit, bộ đệm FIFO RX, kiểm tra mã lỗi parity/khung truyền/tràn dữ liệu).

Chương 4: Kết quả và đánh giá

Trình bày chi tiết môi trường mô phỏng trên ISIM và phân tích kết quả dạng sóng của các kịch bản kiểm thử:

  • Quá trình truyền dữ liệu: Kiểm thử truyền ở các chế độ không parity, parity chẵn, parity lẻ, truyền chuỗi 2 dữ liệu liên tiếp và truyền ở các tốc độ Baud khác nhau (như 115200 baud). So sánh thời gian truyền mô phỏng với tính toán lý thuyết.
  • Quá trình nhận dữ liệu: Kiểm tra đọc dữ liệu vào thanh ghi, lọc start bit giả, xử lý nhận chuỗi dữ liệu liên tục.
  • Quá trình truyền/nhận đồng thời (Full-duplex).
  • Quá trình xử lý tín hiệu ngắt và báo lỗi: Kích hoạt ngắt ngưỡng phát ITX_THR, ngắt ngưỡng thu IRX_THR, ngắt tràn bộ đệm IRX_OV, ngắt lỗi parity I_PE, ngắt lỗi khung I_FE, và kiểm tra phản hồi của tín hiệu PSLVERR khi truy cập sai địa chỉ hoặc sai PSTRB.

Chương 5: Kết luận và hướng phát triển

Đánh giá mức độ hoàn thành mục tiêu thiết kế lõi IP chuyển đổi APB sang UART và tổng hợp các ưu điểm của kiến trúc đã triển khai. Đề xuất các hướng nghiên cứu mở rộng nhằm hoàn thiện và nâng cao tính tin cậy của sản phẩm.

Kết quả và đóng góp

Kết quả kỹ thuật chính

Đồ án đã thiết kế thành công lõi IP bộ chuyển đổi APB sang UART trên nền tảng Verilog HDL và kiểm tra đầy đủ các tính năng thông qua hệ thống kịch bản mô phỏng trên ISIM:

Nội dung kiểm thử Các trường hợp đã xác minh Kết quả đánh giá trên mô phỏng
Giao tiếp APB4 Ghi/đọc thanh ghi, điều khiển PREADY, tạo lỗi PSLVERR khi sai địa chỉ hoặc PSTRB không hợp lệ. Đáp ứng đúng chuẩn AMBA APB4; PREADY tạo độ trễ 2 chu kỳ chính xác; PSLVERR phản hồi đúng điều kiện lỗi.
Truyền dữ liệu UART Truyền không parity, parity chẵn, parity lẻ, truyền liên tục qua FIFO 16 byte, truyền ở tốc độ baud khác nhau. Dạng sóng TXD xuất đúng định dạng khung; thời gian truyền từng bit khớp hoàn toàn với tính toán từ BCLK_VAL.
Nhận dữ liệu UART Nhận không parity, parity chẵn, parity lẻ, lọc xung Start bit giả, nhận liên tục qua FIFO. Lọc nhiễu Start bit thành công sau nửa chu kỳ bit; dữ liệu giải mã chính xác và lưu đầy đủ vào FIFO RX.
Chế độ Full-duplex Vận hành khối Transmitter và Receiver độc lập cùng thời điểm. Không xảy ra xung đột dữ liệu hay xung nhịp giữa hai kênh truyền/nhận.
Cơ chế ngắt Kích hoạt và phản hồi ngắt ngưỡng (ITX_THR, IRX_THR), ngắt tràn (IRX_OV), ngắt lỗi (I_PE, I_FE), ngắt tổng I_TOTAL. Kích hoạt chính xác khi số lượng ô nhớ FIFO hoặc trạng thái lỗi đạt điều kiện thiết lập trong REG_THR và REG_EN.

Đóng góp của đề tài

  • Hoàn thiện một thiết kế RTL hoàn chỉnh cho bộ chuyển đổi giao thức APB4 sang UART, hỗ trợ đầy đủ các tính năng mới của chuẩn APB4 bao gồm kiểm soát truy xuất byte và báo lỗi bus.
  • Tích hợp cấu trúc bộ đệm FIFO 16 byte độc lập ở cả kênh truyền và nhận cùng hệ thống ngắt ngưỡng linh hoạt, giúp giải tỏa áp lực xử lý của CPU hệ thống đối với các giao tiếp ngoại vi tốc độ chậm.

Hạn chế và hướng nghiên cứu tiếp

Khóa luận và biên bản nhận xét của giảng viên hướng dẫn ghi nhận các hạn chế và định hướng phát triển:

  • Hạn chế: Hệ thống mới dừng lại ở bước mô phỏng kiểm thử chức năng dựa trên các kịch bản testbench truyền thống (directed testcases) trong môi trường ISIM; chưa xây dựng môi trường kiểm thử tự động toàn diện bằng phương pháp luận xác minh nâng cao UVM (Universal Verification Methodology) và chưa kiểm định thực tế trên chip FPGA/ASIC.
  • Hướng nghiên cứu tiếp:
    1. Xây dựng môi trường mô phỏng và kiểm thử chuyên sâu thông qua môi trường UVM để nâng cao độ bao phủ kiểm thử (coverage) và độ tin cậy của lõi IP.
    2. Tổng hợp, tối ưu hóa mức tiêu thụ năng lượng/diện tích vi mạch và nạp kiểm định trên kit phần cứng FPGA thực tế.

Giá trị tham khảo

Báo cáo khóa luận là tài liệu tham khảo hữu ích cho:

  • Đối tượng: Sinh viên ngành Công nghệ Kỹ thuật Máy tính, Kỹ thuật Điện tử - Viễn thông, các kỹ sư bước đầu tiếp cận lĩnh vực thiết kế vi mạch số (Digital IC/SoC Design) và lập trình phần cứng Verilog HDL.
  • Nội dung đáng giá:
    • Phương pháp thiết kế máy trạng thái APB FSM tuân thủ chuẩn AMBA APB4.
    • Thiết kế bộ tạo xung lấy mẫu $16\times$ (BCLK Generator) phục vụ giao tiếp bất đồng bộ.
    • Cấu trúc thiết kế bộ đệm FIFO đồng bộ sử dụng con trỏ 5-bit để kiểm tra điều kiện rỗng/đầy và ngắt ngưỡng.
    • Phương pháp xây dựng testbench mô phỏng toàn diện các kịch bản bắt tay giao thức, truyền nhận song công và xử lý ngoại lệ ngắt.

Câu hỏi thường gặp

1. Bộ chuyển đổi APB sang UART sử dụng cơ chế nào để giải quyết vấn đề chênh lệch xung nhịp giữa hệ thống SoC và giao thức UART?
Bộ chuyển đổi tích hợp khối BCLK Generator nhận xung hệ thống PCLK và giá trị cài đặt BCLK_VAL để tạo ra xung nhịp BCLK có tần số gấp 16 lần tốc độ Baud của UART. Xung này cho phép bộ truyền phát dữ liệu chính xác và bộ nhận lấy mẫu tín hiệu tại trung tâm chu kỳ bit (sau 8 xung BCLK từ Start bit và mỗi 16 xung BCLK tiếp theo).

2. Dung lượng bộ đệm FIFO ở khối truyền và nhận là bao nhiêu và cách thức xác định trạng thái đầy/rỗng?
Cả bộ FIFO Transmitter và FIFO Receiver đều có dung lượng 16 ô nhớ, mỗi ô rộng 8 bit. Hệ thống sử dụng hai con trỏ 5-bit (write_pt và read_pt): trạng thái rỗng (fifo_empty) được xác nhận khi cả 5 bit của hai con trỏ bằng nhau; trạng thái đầy (fifo_full) được xác nhận khi 4 bit thấp bằng nhau nhưng bit cao nhất (MSB) khác nhau.

3. Khối APB Interface quản lý bao nhiêu thanh ghi nội và địa chỉ của từng thanh ghi là gì?
Khối APB Interface quản lý 4 thanh ghi nội có thể truy xuất đọc/ghi:

  • REG_DATA (Địa chỉ 0x00, 8-bit): Lưu trữ dữ liệu truyền/nhận.
  • REG_BCLK (Địa chỉ 0x04, 11-bit): Lưu giá trị cấu hình xung nhịp Baud rate.
  • REG_EN (Địa chỉ 0x08, 8-bit): Bật/tắt hoạt động của IP core, chế độ parity và các nguồn ngắt.
  • REG_THR (Địa chỉ 0x0C, 4-bit): Thiết lập mức ngưỡng kích hoạt ngắt cho FIFO TX và RX.

4. Khối nhận UART xử lý thế nào khi phát hiện tín hiệu mức thấp (Start bit) trên đường truyền RXD?
Khi phát hiện sườn xuống trên chân RXD, khối Receiver FSM không ghi nhận dữ liệu ngay mà đếm 8 chu kỳ xung RX_BCLK (nửa chu kỳ bit) để lấy mẫu lại. Nếu tín hiệu tại thời điểm này ở mức cao, hệ thống xác định đó là xung nhiễu (Start bit giả) và quay về trạng thái nghỉ; nếu vẫn ở mức thấp, hệ thống mới xác nhận Start bit hợp lệ và bắt đầu quá trình nhận dữ liệu.

5. Tín hiệu PSLVERR trên bus APB4 được kích hoạt trong những trường hợp nào?
Tín hiệu PSLVERR được khối APB Interface nâng lên mức cao ở chu kỳ cuối của quá trình truyền (khi cả PENABLE và PREADY đều ở mức cao) nếu phát hiện địa chỉ truy cập PADDR không nằm trong tập thanh ghi được hỗ trợ hoặc tín hiệu kiểm soát byte PSTRB không hợp lệ đối với thanh ghi đang thao tác.

Kết luận

Đồ án "Thiết kế và đánh giá bộ chuyển đổi giao thức APB sang UART" của sinh viên Lương Công Hoàn đã hoàn thành đầy đủ các mục tiêu đề ra trong việc xây dựng lõi phần cứng chuyển đổi giao thức hoàn chỉnh bằng ngôn ngữ Verilog HDL. Thiết kế đáp ứng các quy chuẩn của bus AMBA APB4 và giao thức nối tiếp UART, tích hợp bộ đệm FIFO 16 byte, cơ chế tạo xung lấy mẫu $16\times$ và hệ thống quản lý ngắt/báo lỗi toàn diện. Kết quả mô phỏng trên phần mềm Xilinx ISE/ISIM đã xác minh độ chính xác chức năng của thiết kế trong tất cả các kịch bản truyền nhận đơn kênh, song công và xử lý lỗi đường truyền.