Giới thiệu dự án
Trong kiến trúc thiết kế hệ thống vi mạch tích hợp System-on-Chip (SoC) hiện đại, việc quản lý và đồng bộ hóa truyền thông giữa các khối chức năng có dải tần số hoạt động chênh lệch lớn là thách thức cốt lõi. Theo các báo cáo kỹ thuật ngành công nghiệp bán dẫn từ ARM Ltd., hơn 70% diện tích vi mạch tích hợp đa nhân hiện đại sử dụng kiến trúc phân cấp bus AMBA (Advanced Microcontroller Bus Architecture) để tối ưu hóa năng lượng và băng thông. Trong đó, hệ thống bus APB (Advanced Peripheral Bus) đóng vai trò làm cầu nối chuẩn hóa giữa bus hệ thống tốc độ cao (như AXI/AHB) với các khối ngoại vi tốc độ thấp nhằm giảm thiểu điện năng tiêu thụ và độ phức tạp mạch số.
Giao thức truyền thông nối tiếp bất đồng bộ UART (Universal Asynchronous Receiver-Transmitter) là một trong những chuẩn ngoại vi phổ biến nhất để giao tiếp vi điều khiển, máy tính và module cảm biến. Tuy nhiên, tốc độ baud của UART (thường từ 9.600 bps đến 115.200 bps) chậm hơn hàng ngàn lần so với xung nhịp hệ thống của SoC (thường từ 50 MHz đến hàng trăm MHz). Nếu bộ xử lý trung tâm (CPU) phải trực tiếp chờ (polling) quá trình truyền nối tiếp của UART, hiệu năng toàn hệ thống sẽ bị suy giảm nghiêm trọng do hiện tượng nghẽn xung nhịp (CPU stall).
Đồ án tốt nghiệp "Thiết kế và đánh giá bộ chuyển đổi giao thức APB sang UART" của tác giả Lương Công Hoàn (ngành Công nghệ Kỹ thuật Máy tính, Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh) dưới sự hướng dẫn của TS. Tạ Đình Hiến đã giải quyết triệt để bài toán này. Đề tài tập trung xây dựng một lõi sở hữu trí tuệ bán dẫn (IP Core) hoàn chỉnh, làm cầu nối trung gian giữa bus APB phiên bản APB4 và chuẩn UART song công toàn phần (Full-duplex), tích hợp bộ đệm FIFO và cơ chế ngắt phần cứng linh hoạt.
Mục tiêu cụ thể của dự án:
- Thiết kế kiến trúc phần cứng IP Core bộ chuyển đổi giao thức chuẩn hóa từ APB4 sang UART bằng ngôn ngữ mô tả phần cứng Verilog HDL.
- Tích hợp bộ đệm FIFO 16 tầng cho cả hai chiều truyền (Transmitter) và nhận (Receiver), giảm tải truy xuất cho CPU.
- Xây dựng khối tạo xung BCLK linh hoạt với bộ chia tần số hỗ trợ kỹ thuật lấy mẫu 16 lần (16x oversampling).
- Phát triển khối điều khiển ngắt đa nguồn và cơ chế thông báo lỗi slave (
PSLVERR) theo đúng chuẩn AMBA APB4.
- Xây dựng môi trường kiểm thử chức năng toàn diện (Functional Verification) trên công cụ mô phỏng ISim của Xilinx ISE.
Phạm vi đề tài tập trung vào việc thiết kế ở mức Register-Transfer Level (RTL) có khả năng tổng hợp (synthesizable) trên công nghệ FPGA/ASIC, hỗ trợ khung dữ liệu 8-bit tiêu chuẩn, cấu hình bit chẵn lẻ (Parity Even/Odd/None) và kiểm thử đầy đủ các kịch bản hoạt động biên.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Trước khi đi vào kiến trúc chi tiết, việc so sánh các phương thức ghép nối UART truyền thống với kiến trúc cầu nối APB4 tích hợp FIFO cho thấy rõ tính cấp thiết của giải pháp:
| Tiêu chí kỹ thuật |
Giao tiếp UART Polling trực tiếp |
Bộ chuyển đổi APB3 - UART cơ bản |
Bộ chuyển đổi APB4 - UART đề xuất |
| Giao thức Bus Host |
GPIO / Bus song song cũ |
AMBA APB3 |
AMBA APB4 (Hỗ trợ PSTRB, PPROT, PSLVERR) |
| Cơ chế đệm dữ liệu |
Thanh ghi đơn (1 Byte) |
FIFO cố định hoặc không có |
Dual FIFO 16x8-bit cho Tx & Rx |
| Mức độ phụ thuộc CPU |
Rất cao (>90% thời gian chờ) |
Trung bình (ngắt từng byte) |
Rất thấp (ngắt theo ngưỡng FIFO linh hoạt) |
| Khả năng báo lỗi Bus |
Không hỗ trợ |
PSLVERR cơ bản |
PSLVERR kiểm tra sai địa chỉ và PSTRB lỗi |
| Bảo vệ truy cập |
Không |
Không |
Hỗ trợ giải mã bảo mật qua PPROT[2:0] |
| Lấy mẫu tín hiệu Rx |
Lấy mẫu đơn (Dễ nhiễu) |
8x / 16x oversampling |
16x oversampling + Lọc xung Start giả |
Phân loại yêu cầu hệ thống theo mô hình MoSCoW:
- Must-have (Bắt buộc): Tuân thủ giản đồ xung APB4 (Phase SETUP, ACCESS, tín hiệu
PREADY); Truyền nhận UART song công (Full-duplex); FIFO 16 tầng; Bộ chia tần BCLK theo công thức toán học.
- Should-have (Cần có): Cấu hình Parity (chẵn/lẻ/không); Cơ chế ngắt ngưỡng (
ITX_THR, IRX_THR), ngắt tràn (I_RXOV), ngắt lỗi khung (I_FE), ngắt lỗi parity (I_PE).
- Could-have (Có thể mở rộng): Tín hiệu ngắt tổng hợp (
I_TOTAL), phát hiện xung Start bit giả để chống nhiễu đường truyền.
- Won't-have (Chưa thực hiện ở pha này): Cơ chế điều khiển luồng phần cứng RTS/CTS và kiểm thử ngẫu nhiên tự động bằng môi trường UVM.
Thiết kế hệ thống
Kiến trúc phần cứng của bộ chuyển đổi APB-UART được chia thành 4 khối chức năng chính hoạt động đồng bộ:
+------------------------------------------+
| APB-UART Protocol Bridge |
| |
AMBA APB4 Bus | +---------------+ +---------------+ | UART Interface
==================>| | APB Interface |<-->| Transmitter |==|=====> TXD (Serial Out)
PADDR, PWDATA, | | & Registers | | (Tx FIFO 16) | |
PRDATA, PWRITE, | +---------------+ +---------------+ |
PSEL, PENABLE, | ^ ^ |
PREADY, PSLVERR, | | +--------+ | |
PSTRB, PPROT | +---->| BCLK |-----+ |
| | | Gen |-----+ |
Interrupts | v +--------+ v |
<==================| +---------------+ +---------------+ |
ITX_THR, IRX_THR, | | Interrupt |<-->| Receiver |<=|====== RXD (Serial In)
I_RXOV, I_PE, I_FE | | Controller | | (Rx FIFO 16) | |
| +---------------+ +---------------+ |
+------------------------------------------+
1. Khối APB Interface & Bản đồ thanh ghi (Register Map)
Khối này quản lý giao diện slave APB4, giao tiếp với APB master thông qua bus địa chỉ 32-bit PADDR, bus dữ liệu ghi PWDATA[31:0], bus dữ liệu đọc PRDATA[31:0], tín hiệu chọn byte PSTRB[3:0], và cấp độ bảo mật PPROT[2:0].
Bản đồ thanh ghi nội bộ được ánh xạ địa chỉ chi tiết:
REG_DATA (0x00 - 8 bit, R/W): Ghi dữ liệu cần truyền vào Tx FIFO hoặc đọc dữ liệu nhận từ Rx FIFO.
REG_BCLK (0x04 - 11 bit, R/W): Lưu trữ giá trị cấu hình bộ chia tần BCLK.
REG_EN (0x08 - 8 bit, R/W): Thanh ghi cấu hình chức năng ([0]: TXTHR_EN, [1]: RXTHR_EN, [2]: RXOV_EN, [3]: PE_EN, [4]: FE_EN, [5]: IP_EN, [6]: PARITY_EN, [7]: PARITY_TYPE).
REG_THR (0x0C - 4 bit, R/W): Thiết lập ngưỡng ngắt FIFO ([1:0] cho Transmitter: mức 16, 14, 12, 8 ô trống; [3:2] cho Receiver: mức 16, 8, 4, 2 ô chứa dữ liệu).
Máy trạng thái hữu hạn (FSM) của APB điều khiển tín hiệu PREADY được kéo xuống mức thấp trong 2 chu kỳ nhịp để mở rộng quá trình truyền khi ghi/đọc thanh ghi, đảm bảo thời gian thiết lập an toàn cho các khối logic phía sau.
2. Khối BCLK Generator (Bộ tạo xung Baud)
Khối tạo xung BCLK nhận xung nhịp hệ thống PCLK và tính toán chia tần theo công thức chuẩn:
$$\text{BCLK_VAL} = \frac{\text{ClockFrequency}}{\text{Baudrate} \times 16}$$
Trong đó, hệ số 16 đại diện cho kỹ thuật lấy mẫu 16 lần trong một chu kỳ bit của UART. Xung BCLK chỉ giữ mức cao (HIGH) trong đúng một chu kỳ PCLK đầu tiên của mỗi chu kỳ baud chia 16, giúp tiết kiệm năng lượng và hỗ trợ đồng bộ chính xác. Hai tín hiệu cho phép TX_BCLK_EN và RX_BCLK_EN cho phép kích hoạt xung độc lập cho hai khối truyền và nhận.
3. Khối UART Transmitter & UART Receiver
- Transmitter: Tích hợp bộ đệm vòng FIFO 16 tầng $\times$ 8 bit. Con trỏ ghi
write_pt (5 bit) và con trỏ đọc read_pt (5 bit) xác định trạng thái fifo_full (khi khác nhau bit MSB nhưng trùng 4 bit LSB) và fifo_empty (khi trùng cả 5 bit). Dữ liệu được nạp vào thanh ghi tạm DATA_TEMP, sau đó FSM truyền nối tiếp tuần tự: Start bit (0) $\rightarrow$ 8 bit dữ liệu (LSB to MSB) $\rightarrow$ Parity bit (nếu bật) $\rightarrow$ Stop bit (1).
- Receiver: Liên tục giám sát đường truyền
RXD. Khi phát hiện cạnh xuống, bộ nhận kích hoạt bộ đếm để lấy mẫu sau 8 chu kỳ BCLK (tương ứng $\frac{1}{2}$ chu kỳ bit). Nếu tín hiệu vẫn ở mức thấp, Start bit hợp lệ được xác nhận; nếu ở mức cao, mạch xác định đây là xung Start giả (glitch) và hủy quá trình nhận. Các bit dữ liệu tiếp theo được lấy mẫu chính xác tại điểm giữa của mỗi bit (mỗi 16 chu kỳ BCLK).
Methodology
Phương pháp nghiên cứu tuân theo quy trình thiết kế mạch tích hợp số chuẩn công nghiệp:
- Đặc tả yêu cầu & Mô hình hóa kiến trúc: Xây dựng FSM và phân tầng giao thức từ thông số chuẩn của ARM AMBA APB4 Protocol Specification và giao thức UART.
- Hiện thực hóa RTL (Register Transfer Level): Viết mã nguồn Verilog-2001 hoàn toàn tổng hợp được, cấu trúc mô-đun hóa rõ ràng.
- Kiểm tra và mô phỏng chức năng (Verification): Thiết kế testbench toàn diện trên môi trường ISim của bộ phần mềm Xilinx ISE Design Suite 14.7, kích hoạt tất cả các nhánh trạng thái (FSM branch coverage) và kịch bản lỗi biên.
+-----------------------------------------------------------------------------------+
| Quy trình thực hiện dự án |
+-----------------------------------------------------------------------------------+
| [Pha 1] Phân tích AMBA APB4 & UART Specification (Tuần 1-3) |
| └── Xác định tập thanh ghi, FSM logic, tính toán BCLK divider |
| [Pha 2] Thiết kế RTL khối APB Interface & Register Map (Tuần 4-6) |
| └── Xử lý giải mã ghi/đọc, chèn chu kỳ PREADY, bẫy lỗi PSLVERR |
| [Pha 3] Thiết kế RTL khối BCLK Gen & UART Tx/Rx FIFO (Tuần 7-10) |
| └── Xây dựng bộ đệm FIFO 16x8, FSM truyền/nhận, lọc Start bit giả |
| [Pha 4] Tích hợp Top-Level & Kiểm thử mô phỏng đa kịch bản (Tuần 11-14) |
| └── Mô phỏng ISim: Truyền nhận đồng thời, chèn lỗi Frame/Parity/Overflow |
+-----------------------------------------------------------------------------------+
Implementation và kết quả
Development process
Cấu trúc mã nguồn Verilog được triển khai bảo đảm các chuẩn thiết kế phần cứng không đồng bộ và an toàn trạng thái. Đoạn mã dưới đây minh họa quá trình quản lý con trỏ đệm FIFO và cơ chế bắt cờ trạng thái fifo_full / fifo_empty trong khối Transmitter:
// FIFO Transmitter Logic & Full/Empty Flag Generation
module fifo_transmitter (
input wire pclk,
input wire presetn,
input wire write_tx_en,
input wire read_tx_en,
input wire [7:0] data_in,
output wire [7:0] data_out,
output wire fifo_full,
output wire fifo_empty,
output reg [4:0] length_fifo
);
reg [7:0] memory [0:15];
reg [4:0] write_pt;
reg [4:0] read_pt;
// Xác định trạng thái đầy / rỗng bằng bit dấu (MSB) và vị trí con trỏ (LSB)
assign fifo_empty = (write_pt == read_pt);
assign fifo_full = (write_pt[4] != read_pt[4]) && (write_pt[3:0] == read_pt[3:0]);
assign data_out = memory[read_pt[3:0]];
always @(posedge pclk or negedge presetn) begin
if (!presetn) begin
write_pt <= 5'b00000;
read_pt <= 5'b00000;
length_fifo <= 5'b00000;
end else begin
// Ghi dữ liệu vào FIFO
if (write_tx_en && !fifo_full) begin
memory[write_pt[3:0]] <= data_in;
write_pt <= write_pt + 1'b1;
end
// Đọc dữ liệu từ FIFO
if (read_tx_en && !fifo_empty) begin
read_pt <= read_pt + 1'b1;
end
// Cập nhật số lượng ô chứa dữ liệu
case ({write_tx_en && !fifo_full, read_tx_en && !fifo_empty})
2'b10: length_fifo <= length_fifo + 1'b1;
2'b01: length_fifo <= length_fifo - 1'b1;
default: length_fifo <= length_fifo;
endcase
end
end
endmodule
Logic điều khiển tín hiệu lỗi slave PSLVERR trong khối APB Interface được thiết kế để phát hiện tức thì các truy cập không hợp lệ:
// Xử lý báo lỗi PSLVERR khi sai địa chỉ hoặc strobe không hợp lệ
always @(*) begin
if (psel && penable) begin
if ((paddr != 32'h00) && (paddr != 32'h04) &&
(paddr != 32'h08) && (paddr != 32'h0C)) begin
pslverr = 1'b1; // Lỗi địa chỉ không tồn tại trong Register Map
end else if (pwrite && (pstrb == 4'b0000)) begin
pslverr = 1'b1; // Lỗi ghi nhưng không có làn byte nào được chọn
end else begin
pslverr = 1'b0;
end
end else begin
pslverr = 1'b0;
end
end
Testing và validation
Môi trường kiểm thử được thiết lập bằng Testbench Verilog, cấp xung hệ thống PCLK tần số 50 MHz. Bộ chuyển đổi được kích hoạt kiểm tra qua 35+ trường hợp kiểm thử (testcases) bao quát toàn bộ các chức năng:
| Nhóm chức năng kiểm thử |
Kịch bản mô phỏng |
Kết quả mong đợi |
Kết quả ISim thực tế |
Đánh giá |
| Truyền UART (Tx) |
Gửi 1 byte & nhiều byte liên tiếp (Baud: 9600, 115200) |
Dữ liệu nối tiếp đúng định dạng 8-N-1 |
Thời gian truyền đúng $100%$ so với lý thuyết |
Đạt (Pass) |
| Cấu hình Parity Tx/Rx |
Kiểm thử Parity Chẵn (Even) và Parity Lẻ (Odd) |
Bit Parity tính toán chính xác trên frame |
Khớp 100% bit kiểm tra ở cả 2 chế độ |
Đạt (Pass) |
| Nhận UART (Rx) |
Nhận luồng dữ liệu liên tục nạp vào Rx FIFO |
Dữ liệu đọc qua APB PRDATA chính xác |
Đọc đúng 100% không mất mát byte |
Đạt (Pass) |
| Lọc nhiễu Start Bit |
Đưa xung mức thấp kéo dài dưới 8 chu kỳ BCLK |
Hủy bỏ frame giả, không ghi vào FIFO |
Receiver trở về trạng thái IDLE an toàn |
Đạt (Pass) |
| Truyền nhận song công |
Kích hoạt đồng thời Tx và Rx ở tốc độ 115.200 bps |
Dữ liệu truyền và nhận độc lập, không xung đột |
Hoạt động trơn tru toàn phần |
Đạt (Pass) |
| Cơ chế Ngắt (Interrupt) |
Kích hoạt ITX_THR, IRX_THR, I_RXOV, I_PE, I_FE |
Cờ ngắt bật mức 1 tương ứng với lỗi/ngưỡng |
Tín hiệu ngắt đơn và I_TOTAL đáp ứng tức thì |
Đạt (Pass) |
| Bẫy lỗi Slave APB4 |
Truy cập sai địa chỉ 0x10 hoặc PSTRB = 4'b0000 |
PSLVERR kéo lên mức 1 tại pha ACCESS |
CPU nhận diện chính xác lỗi bus |
Đạt (Pass) |
Kết quả đạt được
- Độ chính xác định thời: Tốc độ truyền thực tế đo đạc qua khoảng cách các cạnh xung trên dạng sóng ISim khớp $100%$ với thông số tính toán lý thuyết từ thanh ghi
REG_BCLK.
- Khả năng chịu tải của FIFO: Hệ thống truyền nhận liên tục 16 bytes mà không gây tràn dữ liệu nhờ cơ chế cảnh báo ngắt ngưỡng linh hoạt (
ITX_THR và IRX_THR).
- Độ tin cậy xử lý tín hiệu lỗi: Mạch phát hiện chính xác lỗi vi phạm khung (Framing Error khi Stop bit bằng 0), lỗi Parity và kích hoạt cờ ngắt tương ứng trong vòng 1 chu kỳ xung nhịp sau khi kết thúc khung truyền.
Đổi mới và đóng góp
- Hiện thực hóa trọn vẹn chuẩn APB4 hiện đại: Không dừng lại ở các chuẩn cũ (APB2/APB3), thiết kế tích hợp đầy đủ tính năng kiểm tra tính hợp lệ của tín hiệu chọn byte
PSTRB[3:0], hỗ trợ bảo vệ truy cập qua PPROT[2:0] và phản hồi trạng thái lỗi tức thì qua PSLVERR.
- Kiến trúc đệm vòng FIFO kép có ngưỡng cấu hình động: Thay vì sử dụng ngưỡng cố định, người dùng có thể lập trình 4 mức ngưỡng ngắt cho Transmitter và 4 mức ngưỡng cho Receiver thông qua thanh ghi
REG_THR, giúp tối ưu hóa hiệu suất CPU cho nhiều ứng dụng thời gian thực khác nhau.
- Cơ chế lọc xung Start bit giả thông minh: Khối UART Receiver tích hợp logic xác minh trạng thái tại điểm $\frac{1}{2}$ chu kỳ bit (sau 8 chu kỳ BCLK), triệt tiêu các xung nhiễu ngắn ngẫu nhiên trên đường truyền vật lý, tăng độ bền vững cho hệ thống nhúng công nghiệp.
- Tối ưu hóa tài nguyên phần cứng: Sử dụng phương pháp chia tần số trực tiếp và FSM tối giản giúp tiết kiệm tài nguyên Logic Cells/LUTs, thích hợp làm IP Core nhúng trong các dòng vi điều khiển SoC giá rẻ hoặc FPGA tiết kiệm năng lượng.
Ứng dụng thực tế và triển khai
Trường hợp sử dụng thực tế (Use Cases)
- Hệ thống vi xử lý SoC nhúng (RISC-V / ARM Cortex-M): Đóng vai trò là khối IP ngoại vi giao tiếp chuẩn cho vi điều khiển, kết nối với modem GSM/4G, module GPS, cảm biến công nghiệp RS-485/RS-232 thông qua UART.
- Hệ thống thu thập dữ liệu công nghiệp (SCADA / Data Logger): Nhận luồng dữ liệu cảm biến liên tục ở tốc độ cao, lưu vào bộ đệm và thông báo ngắt cho vi xử lý trung tâm xử lý theo lô (batch processing), giải phóng hơn 85% thời gian xử lý cho CPU.
+-------------------------------------------------------------------+
| Sơ đồ tích hợp trong SoC thực tế |
+-------------------------------------------------------------------+
| |
| +-------------------+ +-------------------------+ |
| | CPU Core | | Cảm biến / GPS | |
| | (ARM / RISC-V) | | Module RS485 / Debug | |
| +---------+---------+ +------------+------------+ |
| | (AXI/AHB Bus) ^ |
| v | (Tx/Rx Line) |
| +---------+---------+ +------------+------------+ |
| | Bridge AHB-APB | | Module RS232/485 PHY | |
| +---------+---------+ +------------+------------+ |
| | (APB4 Bus) ^ |
| v | |
| +---------+-------------------------------------+---------+ |
| | Lõi IP APB-UART Bridge (Đề tài nghiên cứu) | |
| +---------------------------------------------------------+ |
| |
+-------------------------------------------------------------------+
Hướng dẫn tích hợp và yêu cầu hệ thống
- Yêu cầu công cụ tổng hợp: Xilinx ISE 14.7, Vivado Design Suite, hoặc Synopsys Design Compiler cho ASIC.
- Yêu cầu xung nhịp: Tần số
PCLK linh hoạt từ 10 MHz đến 200 MHz (cấu hình qua giá trị nạp vào REG_BCLK).
- Khả năng mở rộng: Tương thích trực tiếp với các hệ thống bus AMBA AXI Interconnect thông qua khối chuyển đổi tiêu chuẩn AXI-to-APB Bridge.
Hạn chế và hướng phát triển
Mặc dù đạt được toàn bộ mục tiêu thiết kế và xác minh chức năng đề ra, đề tài vẫn tồn tại một số điểm có thể nâng cấp trong các phiên bản tiếp theo:
- Môi trường kiểm thử: Quá trình kiểm thử hiện tại được thực hiện thông qua Testbench Verilog truyền thống (directed testing). Để chuẩn hóa theo quy trình sản xuất vi mạch thương mại, hệ thống cần được kiểm chứng bằng phương pháp UVM (Universal Verification Methodology) kết hợp Coverage-driven Verification và Random Testing.
- Tính năng giao thức UART: Chưa tích hợp cơ chế bắt tay điều khiển luồng phần cứng (Hardware Flow Control với các chân
RTS/CTS), chưa hỗ trợ khung truyền dữ liệu biến đổi (5-bit, 6-bit, 7-bit, 9-bit) hoặc 1.5/2 Stop bits.
- Bộ tạo xung nhịp: Chưa có bộ chia tần số dạng số thập phân phân số (Fractional Baud Rate Generator) để giảm thiểu triệt để sai số baud ở các tần số xung nhịp hệ thống không chia hết cho $16 \times \text{Baudrate}$.
Hướng phát triển đề xuất:
- Phát triển môi trường kiểm thử tự động UVM hoàn chỉnh cho IP Core.
- Tích hợp kênh DMA (Direct Memory Access) trực tiếp vào FIFO để truyền dữ liệu khối tốc độ cao không cần CPU can thiệp.
- Nâng cấp hỗ trợ giao tiếp chuẩn APB5 và bổ sung bộ Fractional Baud Rate.
Đối tượng hưởng lợi
- Sinh viên & Học viên chuyên ngành Vi mạch/Kỹ thuật Máy tính: Nguồn tài liệu tham khảo chi tiết về phương pháp thiết kế IP Core chuẩn AMBA APB4, kỹ thuật thiết kế máy trạng thái FSM điều khiển và thuật toán đệm vòng FIFO bằng Verilog HDL.
- Kỹ sư thiết kế vi mạch (ASIC/FPGA Design Engineers): Một khối IP Core sẵn sàng tái sử dụng (reusable RTL block), tối ưu tài nguyên, dễ dàng tích hợp vào các hệ thống nhúng SoC.
- Nhà phát triển hệ thống nhúng (Embedded Developers): Hiểu rõ cơ chế phần cứng tầng thấp, bản đồ thanh ghi và cách thức tối ưu hóa việc lập trình driver điều khiển ngắt UART không khóa luồng CPU.
Câu hỏi thường gặp
1. Yêu cầu phần cứng và công cụ để tổng hợp/triển khai IP Core APB-UART này là gì?
Hệ thống được viết bằng mã nguồn Verilog-2001 tiêu chuẩn, tương thích với tất cả các công cụ EDA phổ biến như Xilinx ISE 14.7, Vivado, Intel Quartus Prime, hoặc Synopsys Design Compiler. Thiết kế không chứa các cell nguyên thủy đặc thù (technology-independent), do đó có thể tổng hợp trực tiếp trên bất kỳ dòng FPGA nào (Xilinx Spartan-6, Artix-7, Intel Cyclone) hoặc tiến hành quy trình tổng hợp logic chuẩn sang ASIC.
2. Cơ chế lấy mẫu 16 lần (16x oversampling) của khối BCLK Generator giải quyết vấn đề gì?
Do UART là giao thức truyền thông bất đồng bộ (không có đường truyền xung clock chung giữa bên gửi và bên nhận), bên nhận phải tự định thời điểm đọc dữ liệu. Kỹ thuật lấy mẫu 16 lần tạo ra 16 xung BCLK trong một chu kỳ bit. Khi phát hiện cạnh xuống của Start bit, bộ nhận đếm 8 xung BCLK để lấy mẫu ngay tại trung tâm của Start bit nhằm loại bỏ xung nhiễu giả; sau đó cứ mỗi 16 xung BCLK, bộ nhận lại lấy mẫu chính xác tại trung tâm (điểm có độ ổn định điện áp cao nhất) của từng bit dữ liệu, đảm bảo dữ liệu không bị sai lệch do rung pha (clock jitter).
3. Làm thế nào để tích hợp bộ chuyển đổi này vào một hệ thống SoC sử dụng chip ARM hoặc RISC-V?
Để tích hợp, kỹ sư chỉ cần kết nối giao diện APB slave của IP Core vào cổng Master của khối APB Bridge trong hệ sinh thái AMBA. Các đường ngắt đầu ra (I_TOTAL hoặc các ngắt thành phần như ITX_THR, IRX_THR) được nối trực tiếp vào bộ điều khiển ngắt trung tâm của CPU (như NVIC trên ARM Cortex-M hoặc PLIC trên RISC-V). Phần mềm chỉ cần khởi tạo tần số qua thanh ghi REG_BCLK, bật cho phép IP trong REG_EN, và thực hiện ghi/đọc dữ liệu qua địa chỉ 0x00.
4. Tín hiệu báo lỗi PSLVERR của chuẩn APB4 trong thiết kế này hoạt động khi nào?
Tín hiệu PSLVERR được khối APB Interface kéo lên mức 1 tại chu kỳ ACCESS (khi cả PSEL và PENABLE đều tích cực) trong hai trường hợp:
- APB Master cố tình truy cập vào một địa chỉ nằm ngoài dải thanh ghi được định nghĩa (khác các địa chỉ
0x00, 0x04, 0x08, 0x0C).
- Quá trình ghi (
PWRITE = 1) diễn ra nhưng tín hiệu chọn làn byte PSTRB bằng 4'b0000 (không có byte nào được phép cập nhật dữ liệu).
5. Lợi ích của việc tích hợp bộ đệm FIFO 16 tầng so với giao tiếp UART thanh ghi đơn là gì?
Với UART thanh ghi đơn, CPU phải nhận ngắt và đọc/ghi dữ liệu sau mỗi byte truyền (mỗi byte ở tốc độ 9.600 bps mất hơn 1 ms). Điều này làm CPU liên tục bị gián đoạn công việc. Với bộ đệm FIFO 16 tầng kết hợp cơ chế ngắt ngưỡng lập trình được, CPU có thể ghi một chuỗi 16 bytes vào FIFO trong vài chu kỳ xung nhịp hệ thống (vài chục nano-giây) rồi quay lại xử lý các tác vụ tính toán khác, nâng cao hiệu suất xử lý tổng thể của SoC lên nhiều lần.
Kết luận
Đồ án tốt nghiệp "Thiết kế và đánh giá bộ chuyển đổi giao thức APB sang UART" đã hoàn thành xuất sắc các mục tiêu nghiên cứu và thiết kế phần cứng vi mạch số. Bằng việc kết hợp chuẩn giao tiếp bus ngoại vi tiên tiến AMBA APB4 với giao thức nối tiếp kinh điển UART, đề tài đã tạo ra một giải pháp IP Core hoàn chỉnh, có tính ứng dụng thực tiễn cao, đáp ứng đầy đủ các tiêu chuẩn khắt khe về thời gian định thời, bảo vệ truy cập và tối ưu hóa tài nguyên phần cứng.
Kết quả mô phỏng toàn diện trên phần mềm Xilinx ISE khẳng định tính chính xác và độ tin cậy của thiết kế trong mọi kịch bản hoạt động, từ truyền nhận dữ liệu đồng thời ở tốc độ cao đến khả năng tự động phát hiện, báo lỗi và xử lý ngắt linh hoạt. Đây là nền tảng vững chắc để tiếp tục phát triển các khối IP Core phức tạp hơn, phục vụ cho quá trình nghiên cứu, đào tạo và sản xuất vi mạch tại Việt Nam.