Bối cảnh và vấn đề nghiên cứu
Trong xu thế tích hợp hệ thống hiện đại, các vi mạch số và thiết bị điện tử nhúng ngày càng phức tạp khi kết hợp nhiều khối chức năng và ngoại vi trên cùng một nền tảng. Giao tiếp giữa các khối không chỉ giữ vai trò truyền tải tín hiệu mà còn quyết định đến tính ổn định, tốc độ và khả năng mở rộng của toàn hệ thống. Trong các chuẩn truyền thông nối tiếp, giao thức I2C (Inter-Integrated Circuit) là một trong những giải pháp được sử dụng rộng rãi nhờ ưu điểm cấu trúc tinh gọn, tiết kiệm chân kết nối và cho phép liên kết nhiều thiết bị ngoại vi trên cùng một bus. Tuy nhiên, khi khối lượng trao đổi dữ liệu tăng cao, các thiết kế I2C truyền thống thường bộc lộ hạn chế trong việc truyền dữ liệu liên tục và xử lý thời gian thực.
Phần lớn các nghiên cứu trước đây chỉ tập trung vào việc mô tả phần cứng bộ điều khiển I2C bằng các ngôn ngữ như VHDL hoặc Verilog nhằm đáp ứng các chức năng cơ bản theo chuẩn giao thức. Khâu xác minh chức năng thường bị xem nhẹ hoặc chỉ được thực hiện thông qua các kịch bản mô phỏng giản đơn, khiến hệ thống tiềm ẩn nguy cơ xuất hiện các lỗi biên, lỗi mất đồng bộ, mất tín hiệu phản hồi ACK/NACK hoặc xung đột trên đường truyền khi vận hành thực tế. Việc thiếu vắng một quy trình xác minh chuẩn hóa và toàn diện dẫn tới khó khăn trong việc đánh giá độ tin cậy của thiết kế. Đề tài "Thiết kế và xác minh giao thức I2C sử dụng UVM" được xây dựng nhằm giải quyết khoảng trống này bằng cách kết hợp thiết kế phần cứng tối ưu và phương pháp xác minh tiên tiến UVM (Universal Verification Methodology) trên nền SystemVerilog.
Mục tiêu nghiên cứu của đề tài được xác định cụ thể như sau:
- Thiết kế khối giao tiếp I2C có khả năng hoạt động ở tốc độ cao, đảm bảo quá trình truyền và nhận dữ liệu diễn ra ổn định trên bus, duy trì tính toàn vẹn và độ tin cậy của thông tin giữa các thiết bị.
- Xây dựng môi trường xác minh chức năng theo chuẩn UVM nhằm mô phỏng và kiểm tra toàn diện các đặc tính của khối I2C, bao gồm dạng sóng trên các đường tín hiệu SDA/SCL, các điều kiện START, STOP, cơ chế phản hồi ACK/NACK cùng dữ liệu truyền nhận ở các chế độ hoạt động khác nhau (master/slave, đọc/ghi).
Đối tượng và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: Các nguyên lý thiết kế phần cứng giao thức I2C, cấu trúc ngôn ngữ SystemVerilog và quy trình xác minh chức năng bán dẫn theo phương pháp luận UVM.
- Phạm vi nghiên cứu: Tập trung vào thiết kế mô-đun I2C Controller kết nối qua bus ngoại vi APB, tích hợp bộ đệm FIFO; xây dựng môi trường kiểm thử mô phỏng bằng công cụ Vivado và QuestaSim; phạm vi kiểm chứng bao gồm các hoạt động truyền nhận cơ bản và nâng cao (chế độ địa chỉ 7-bit và 10-bit, truyền liên tiếp, ngắt FIFO, xử lý điều kiện Repeat Start và lỗi NACK). Đề tài giới hạn trong môi trường mô phỏng chức năng số, chưa mở rộng sang việc thử nghiệm trên phần cứng thực tế hoặc các cấu trúc phân xử đa chủ phức tạp. Thời gian hoàn thành đồ án vào tháng 1 năm 2025 tại Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh.
Cơ sở lý thuyết và phương pháp
Khóa luận xây dựng nội dung dựa trên bốn khối kiến thức nền tảng:
- Giao thức I2C: Là chuẩn giao tiếp nối tiếp đồng bộ sử dụng hai đường dây gồm đường xung nhịp SCL (Serial Clock Line) và đường dữ liệu nối tiếp SDA (Serial Data Line). Cả hai đường tín hiệu hoạt động theo cấu trúc cực máng hở (open-drain) và được kéo lên mức điện áp cao bằng các điện trở kéo (pull-up resistor) có giá trị từ 1 kΩ đến 4,7 kΩ nhằm ngăn ngừa hiện tượng ngắn mạch khi nhiều thiết bị cùng tác động lên bus. Cấu trúc một phiên giao dịch I2C bao gồm điều kiện bắt đầu (START - đường SDA chuyển từ mức cao xuống thấp khi SCL giữ mức cao), khung địa chỉ thiết bị (7-bit hoặc 10-bit), bit xác định chiều truyền dữ liệu R/W (0: ghi, 1: đọc), bit phản hồi ACK/NACK (ACK tương ứng mức 0, NACK tương ứng mức 1), các byte dữ liệu 8-bit, điều kiện lặp lại (Repeat Start) và điều kiện kết thúc (STOP - đường SDA chuyển từ mức thấp lên cao khi SCL giữ mức cao).
- Giao thức bus APB (Advanced Peripheral Bus): Là chuẩn giao tiếp bus đồng bộ thuộc họ AMBA, không áp dụng kỹ thuật pipeline, phục vụ các khối ngoại vi có tần suất truy cập vừa phải để tiết kiệm diện tích phần cứng và tiêu thụ năng lượng. Chu kỳ truyền dữ liệu của APB được điều khiển qua máy trạng thái (FSM) gồm ba trạng thái: IDLE (trạng thái chờ mặc định), SETUP (giai đoạn thiết lập địa chỉ và dữ liệu trong đúng một chu kỳ xung clock) và ACCESS (kích hoạt tín hiệu PENABLE, duy trì các tín hiệu điều khiển cho đến khi tín hiệu PREADY báo hoàn tất). APB hỗ trợ hai cơ chế truyền dữ liệu: có thời gian chờ (wait state) và không có thời gian chờ (no wait state).
- Bộ đệm dữ liệu FIFO đồng bộ: Cấu trúc bộ nhớ đệm hoạt động theo nguyên tắc vào trước - ra trước (First In First Out), sử dụng chung một nguồn xung nhịp cho thao tác đọc và ghi. Hệ thống tích hợp hai bộ đệm FIFO riêng biệt gồm TX FIFO (send_FIFOs) và RX FIFO (receive_FIFOs), mỗi bộ đệm có độ sâu thiết kế là 16 byte (tương ứng 16 ô nhớ từ vị trí 0 đến 15). Việc quản lý trạng thái nạp và giải phóng dữ liệu được điều phối qua con trỏ ghi (
wr_ptr) và con trỏ đọc (rd_ptr) với cơ chế quay vòng con trỏ khi đạt giới hạn ô nhớ. FIFO phát cờ EMPTY khi hai con trỏ trùng nhau và phát cờ FULL khi con trỏ ghi tiệm cận con trỏ đọc theo chu kỳ quay vòng.
- Giao diện kết nối Interface và Virtual Interface: Trong ngôn ngữ SystemVerilog, Interface gom nhóm các tín hiệu vật lý của thiết kế thành một cấu trúc đồng nhất, còn Virtual Interface đóng vai trò là một con trỏ tham chiếu động giúp các lớp kiểm thử hướng đối tượng trong testbench kết nối linh hoạt với thực thể phần cứng (DUT) ở mô-đun cấp cao nhất (Top Module) mà không gây ra xung đột chạy đua (race condition).
- Phương pháp xác minh UVM: Là phương pháp luận kiểm chuẩn vi mạch hướng đối tượng do tổ chức Accellera ban hành. UVM phân cấp các lớp từ lớp gốc
uvm_void, uvm_object (chứa transaction, sequence, sequence_item), uvm_report_object đến uvm_component. Tiến trình mô phỏng được quản lý chặt chẽ qua ba nhóm pha: nhóm pha xây dựng (Build Phases gồm build_phase, connect_phase, end_of_elaboration_phase, start_of_simulation_phase), nhóm pha thực thi (Run-time Phases gồm các pha con quản lý reset, cấu hình, chạy kịch bản main_phase và kết thúc) và nhóm pha dọn dẹp (Clean-up Phases gồm extract_phase, check_phase, report_phase, final_phase). Môi trường kiểm thử chứa các thành phần chuẩn: UVM Test, UVM Environment, UVM Agent (phân loại thành Active Agent có sequencer, driver, monitor và Passive Agent chỉ có monitor), UVM Scoreboard (so sánh kết quả thực tế với mô hình tham chiếu Reference Model) và UVM Sequence (sinh kích thích ngẫu nhiên có ràng buộc).
Phương pháp nghiên cứu thực hiện:
- Phương pháp thiết kế phần cứng: Sử dụng ngôn ngữ mô tả phần cứng Verilog để thiết kế mô hình RTL cho bộ điều khiển I2C Controller, bao gồm khối giao tiếp APB Slave, khối thanh ghi cấu hình, bộ đệm FIFO và máy trạng thái I2C.
- Phương pháp xác minh chức năng: Sử dụng ngôn ngữ SystemVerilog và thư viện UVM để xây dựng môi trường testbench phân cấp. Áp dụng kỹ thuật sinh kích thích giao dịch ngẫu nhiên có ràng buộc (constrained-random stimulus) và cơ chế tự động đối chiếu dữ liệu ngõ ra trên scoreboard để xác nhận độ chính xác chức năng.
- Nguồn dữ liệu nghiên cứu: Đặc tả giao thức I2C, tài liệu chuẩn AMBA APB của ARM, hướng dẫn xác minh UVM của Accellera và cơ sở dữ liệu dạng sóng, tệp nhật ký (log) trích xuất trực tiếp từ các phiên mô phỏng trên phần mềm QuestaSim và Vivado.
Thiết kế và triển khai
Bộ điều khiển I2C Controller được thiết kế theo cấu trúc khối mô-đun hóa, tích hợp đầy đủ giao diện kết nối hệ thống và logic điều khiển giao thức nối tiếp:
- Khối APB Slave: Tiếp nhận các yêu cầu truy cập từ bus hệ thống thông qua các tín hiệu điều khiển
psel, penable, pwrite, paddr và pwdata. Khối giải mã các tín hiệu này để tạo tín hiệu cho phép đọc (rd_en) khi pwrite = 0 hoặc cho phép ghi (wr_en) khi pwrite = 1 tại thời điểm cả psel và penable đều bằng 1, đồng thời điều khiển tín hiệu pready phản hồi về bus chủ.
- Khối Register File: Tập hợp các thanh ghi lưu trữ cấu hình vận hành, chế độ truyền nhận, thông số chia tần số clock và cờ trạng thái ngắt của IP.
- Khối Clock Divider: Tiếp nhận xung nhịp hệ thống
sys_clk, thực hiện chia tần số dựa trên giá trị thiết lập tại các thanh ghi cấu hình để sinh ra xung nhịp SCL phục vụ truyền thông I2C.
- Khối send_FIFOs (TX FIFO) và receive_FIFOs (RX FIFO): Bộ nhớ đệm dữ liệu hai chiều có độ sâu 16 byte, giúp tách biệt tốc độ xử lý giữa bus APB và bus I2C, hỗ trợ quá trình nạp và đọc dữ liệu theo khối.
- Khối I2C Interface: Khối logic vật lý điều khiển trực tiếp trạng thái của hai chân tín hiệu SDA và SCL, hiện thực hóa máy trạng thái hữu hạn (FSM) cho các giai đoạn START, truyền địa chỉ, kiểm tra ACK/NACK, truyền nhận dữ liệu và STOP.
- Khối Interrupt: Giám sát trạng thái hoạt động của các bộ đệm FIFO và các điều kiện ngoại lệ trên bus để phát tín hiệu ngắt đến bộ xử lý trung tâm.
Hệ thống giao tiếp thông qua tập hợp tín hiệu ngõ vào và ngõ ra sau:
| Tên tín hiệu |
Độ rộng |
Hướng xử lý |
Mô tả chức năng |
| sys_clk |
1 bit |
Ngõ vào |
Xung clock hệ thống |
| sys_rst_n |
1 bit |
Ngõ vào |
Tín hiệu reset tích cực mức thấp |
| psel |
1 bit |
Ngõ vào |
Tín hiệu chọn ngoại vi slave APB |
| pwrite |
1 bit |
Ngõ vào |
Tín hiệu phân biệt thao tác đọc (0) hoặc ghi (1) |
| penable |
1 bit |
Ngõ vào |
Tín hiệu cho phép giai đoạn truyền nhận APB |
| paddr |
12 bit |
Ngõ vào |
Địa chỉ truy cập thanh ghi |
| pwdata |
32 bit |
Ngõ vào |
Dữ liệu ghi từ bus APB |
| prdata |
32 bit |
Ngõ ra |
Dữ liệu đọc trả về bus APB |
| pready |
1 bit |
Ngõ ra |
Tín hiệu báo hiệu slave đã sẵn sàng kết thúc giao dịch |
| sda |
1 bit |
Ngõ vào/ra |
Đường truyền dữ liệu nối tiếp I2C |
| scl |
1 bit |
Ngõ vào/ra |
Đường xung nhịp đồng bộ I2C |
Không gian bộ nhớ của bộ điều khiển được ánh xạ thành 11 thanh ghi chức năng với các địa chỉ offset và thuộc tính truy cập cụ thể:
| Địa chỉ offset |
Tên thanh ghi |
Loại truy cập |
Giá trị mặc định |
Mô tả chức năng và cấu trúc trường bit |
| 0x00 |
wr_data_reg |
WO |
- |
Trường tx_fifo [7:0]: Ghi 1 byte dữ liệu nạp vào FIFO truyền |
| 0x04 |
rd_data_reg |
RO |
- |
Trường rx_fifo [7:0]: Đọc 1 byte dữ liệu từ FIFO nhận |
| 0x08 |
target_addrl_reg |
RW |
7'h00 |
Trường target_addr_low [6:0]: Lưu 7 bit thấp của địa chỉ slave đích; bit [7] giữ chỗ (reserved) |
| 0x0C |
target_addrh_reg |
RW |
3'h00 |
Trường target_addr_high [2:0]: Lưu 3 bit cao của địa chỉ slave đích (dùng trong chế độ 10-bit); bit [7:3] giữ chỗ |
| 0x10 |
control_reg |
WO |
8'h00 |
Điều khiển hoạt động: bit [0] tạo START, bit [1] reset IP, bit [2] tx_enable đẩy dữ liệu từ FIFO truyền, bit [3] rx_enable lấy dữ liệu từ FIFO nhận; bit [7:4] giữ chỗ |
| 0x14 |
byte_cnt_reg |
RW |
8'h00 |
Trường byte_cnt [7:0]: Thiết lập số lượng byte dữ liệu cần truyền nhận trong một phiên giao dịch |
| 0x18 |
mode_reg |
RW |
8'h00 |
Cấu hình chế độ: bit [2:0] clk_presc_high (3 bit cao bộ chia clock), bit [3] trx_mode (0: truyền, 1: nhận), bit [4] addr_mode (0: địa chỉ 7-bit, 1: địa chỉ 10-bit); bit [7:5] giữ chỗ |
| 0x1C |
clk_prescl_reg |
RW |
8'h00 |
Trường clk_presc_low [7:0]: Thiết lập 8 bit thấp của bộ chia tần số xung nhịp |
| 0x20 |
int_status_reg |
RW1C |
8'h00 |
Cờ trạng thái ngắt (xóa khi ghi 1): bit [0] rx_fifo_empty_int, bit [1] rx_fifo_full_int, bit [2] tx_fifo_empty_int, bit [3] tx_fifo_full_int, bit [4] nack_int; bit [7:5] giữ chỗ |
| 0x24 |
int_enable_reg |
RW |
8'h00 |
Cho phép nguồn ngắt tương ứng: bit [0] rx_fifo_empty_en, bit [1] rx_fifo_full_en, bit [2] tx_fifo_empty_en, bit [3] tx_fifo_full_en, bit [4] nack_en |
| 0x28 |
ff_status_reg |
RO |
- |
Theo dõi trạng thái rỗng và đầy của các bộ đệm FIFO |
Môi trường xác minh UVM được triển khai theo cấu trúc kiểm thử khép kín:
uvm_test: Quản lý cấu hình toàn cục và khởi tạo đối tượng môi trường uvm_environment.
uvm_environment: Kết nối các tác nhân kiểm thử (uvm_agent) và bảng kiểm tra (uvm_scoreboard).
- Tác nhân kiểm thử APB (Active Agent): Gồm sequencer điều phối, driver chuyển đổi các transaction APB thành các chu kỳ tín hiệu thực tế trên chân giao tiếp, và monitor thụ động giám sát bus APB.
- Tác nhân kiểm thử I2C (Passive Agent): Gồm monitor theo dõi các đường SDA/SCL, giải mã trạng thái bit và đóng gói thành transaction để chuyển tới scoreboard.
uvm_scoreboard: Tích hợp mô hình tham chiếu (Reference Model) và khối logic so sánh (Compare Logic). Khi nhận dữ liệu từ các monitor qua cổng kết nối TLM, scoreboard tự động đối chiếu từng byte dữ liệu và cờ ngắt giữa DUT và mô hình dự đoán.
Nội dung chính theo từng chương
Chương 1: Tổng quan
Chương 1 khái quát vai trò của giao thức I2C trong các kiến trúc vi mạch số hiện nay, đồng thời chỉ ra các điểm nghẽn của các nghiên cứu trước đây khi việc thiết kế phần cứng chưa đi kèm một quy trình xác minh bài bản. Chương này thiết lập mục tiêu nghiên cứu của đề tài gồm thiết kế khối giao tiếp I2C tốc độ cao và phát triển môi trường UVM để đánh giá toàn diện thiết kế. Tác giả cũng xác định giới hạn thực hiện trên công cụ mô phỏng Vivado và QuestaSim, nêu rõ phương pháp xây dựng RTL kết hợp testbench UVM phân cấp và trình bày bố cục tổng thể gồm 5 chương của khóa luận.
Chương 2: Cơ sở lý thuyết
Chương 2 cung cấp hệ thống lý thuyết phục vụ đề tài. Nội dung đi sâu vào cấu trúc vật lý của giao thức I2C, phân tích chi tiết chức năng của các đường tín hiệu SDA, SCL, vai trò của thiết bị Master/Slave, định dạng giao dịch truyền nhận từ điều kiện START, truyền khối địa chỉ, bit chọn hướng R/W, bit xác nhận ACK/NACK đến điều kiện STOP. Chương này đồng thời trình bày cấu trúc và máy trạng thái FSM ba trạng thái của giao thức APB (IDLE, SETUP, ACCESS), nguyên lý vận hành của bộ nhớ đệm FIFO 16 byte đồng bộ với các con trỏ wr_ptr và rd_ptr. Cuối cùng, chương thuyết minh về cấu trúc giao diện Virtual Interface trong SystemVerilog và kiến trúc UVM toàn diện, bao gồm phân cấp lớp, cơ chế các pha thực thi và chức năng của từng thành phần cấu thành testbench.
Chương 3: Thiết kế và xác minh giao thức I2C
Chương 3 trình bày chi tiết sơ đồ khối và quy trình hiện thực hóa bộ điều khiển I2C cùng môi trường xác minh UVM tương ứng. Về mặt phần cứng, chương phân tích sơ đồ logic của khối APB Slave, khối thanh ghi Register File, bộ chia xung nhịp Clock Divider, hai bộ đệm FIFO 16 byte hai chiều, khối I2C Interface và khối ngắt Interrupt. Toàn bộ bảng mô tả tín hiệu vào/ra và cấu trúc chi tiết từng trường bit của 11 thanh ghi chức năng được chuẩn hóa. Về khâu xác minh, chương xây dựng cấu trúc môi trường UVM với các khối Test, Environment, Active APB Agent, Passive I2C Agent, cơ chế giao tiếp Virtual Interface và logic đối chiếu kết quả của Scoreboard.
Chương 4: Kết quả mô phỏng xác minh giao thức I2C
Chương 4 tập trung vào việc thực thi và đánh giá kết quả của môi trường kiểm thử UVM. Nội dung ghi nhận quá trình biên dịch (build) môi trường mô phỏng và trình bày các kết quả kiểm chứng cụ thể qua 10 mục kiểm thử chức năng:
- Kiểm tra tính đúng đắn của chu trình đọc/ghi bus APB theo đúng FSM quy định.
- Kiểm tra việc đọc giá trị mặc định sau reset và kiểm tra ghi/đọc từng bit (bit-bash) trên toàn bộ không gian thanh ghi.
- Kiểm tra kịch bản master đọc dữ liệu giá trị
8'ha5 từ slave có địa chỉ 7-bit 7'h55.
- Kiểm tra kịch bản master ghi dữ liệu giá trị
8'h3c vào slave có địa chỉ 7-bit 7'h55.
- Kiểm tra quá trình chuyển tiếp liên tục giữa ghi và đọc thông qua điều kiện lặp lại (write - repeat start - read).
- Kiểm tra khả năng master ghi 3 byte liên tiếp vào slave với thiết lập
byte_cnt = 3.
- Kiểm tra cơ chế phát tín hiệu ngắt khi các bộ đệm FIFO rơi vào trạng thái rỗng hoặc đầy.
- Kiểm tra cơ chế phát hiện lỗi và kích hoạt ngắt khi slave phản hồi tín hiệu NACK.
- Kiểm tra hoạt động truyền dữ liệu của master tới slave sử dụng địa chỉ mở rộng 10-bit (
10'b01_1101_0101).
Tất cả các kịch bản đều được minh chứng bằng các bản ghi nhật ký (log) UVM và dạng sóng mô phỏng tín hiệu.
Chương 5: Kết luận và hướng phát triển
Chương 5 đúc kết các kết quả đạt được của đề tài, khẳng định khối I2C Controller đã đáp ứng đầy đủ các yêu cầu kỹ thuật về chức năng và tính ổn định trên mô phỏng. Đồng thời, tác giả thẳng thắn chỉ ra các giới hạn của nghiên cứu và đề xuất lộ trình mở rộng cho các nghiên cứu tiếp theo.
Kết quả và đóng góp
Quá trình mô phỏng trên QuestaSim và Vivado xác nhận môi trường xác minh UVM đã kiểm thử thành công toàn bộ các trường hợp chức năng đặt ra cho thiết kế I2C Controller:
| Kịch bản kiểm thử |
Thông số và điều kiện kích thích |
Kết quả ghi nhận trên Scoreboard và dạng sóng |
| Giao thức APB |
Chu kỳ thiết lập địa chỉ paddr và dữ liệu pwdata tại pha SETUP, kích hoạt penable tại pha ACCESS |
Bus phản hồi đúng trạng thái FSM, tín hiệu pready kích hoạt kết thúc giao dịch thành công |
| Thanh ghi chức năng |
Đọc giá trị ban đầu và kiểm thử bit-bash trên 11 thanh ghi |
Tất cả các thanh ghi trả về giá trị mặc định chính xác; các bit RW, WO, RO, RW1C hoạt động đúng thiết kế |
| Master đọc từ Slave |
Đọc dữ liệu data = 8'ha5 từ slave địa chỉ 7-bit 7'h55 |
Master tạo đúng START, địa chỉ, bit R/W = 1; nhận đủ byte 8'ha5 và nạp vào RX FIFO |
| Master ghi vào Slave |
Ghi dữ liệu data = 8'h3c vào slave địa chỉ 7-bit 7'h55 |
Master truyền thành công byte 8'h3c, nhận tín hiệu ACK từ slave và tạo STOP |
| Write - Repeat Start - Read |
Giao dịch ghi chuyển sang giao dịch đọc không thông qua điều kiện STOP |
Bus tạo chính xác điều kiện Repeat Start, dữ liệu chuyển đổi chiều truyền nhận an toàn |
| Ghi nhiều byte liên tiếp |
Master ghi liên tục chuỗi 3 byte với cấu hình byte_cnt = 3 |
TX FIFO tuần tự xuất dữ liệu, bus I2C duy trì truyền tải liên tục không lỗi |
| Ngắt trạng thái FIFO |
Kích thích làm rỗng và làm đầy TX/RX FIFO |
Các cờ ngắt trong int_status_reg bật lên mức 1 chính xác khi có điều kiện rỗng/đầy |
| Ngắt cảnh báo NACK |
Slave không gửi phản hồi (đường SDA ở mức 1 trong chu kỳ ACK) |
Bit nack_int trong int_status_reg bật lên mức 1, khối ngắt phát xung báo hiệu ngắt hệ thống |
| Chế độ địa chỉ 10-bit |
Master thực hiện ghi tới slave có địa chỉ 10'b01_1101_0101 |
Header 10-bit và 2 byte địa chỉ được phát đi chính xác, slave nhận diện thành công |
Giải pháp và đóng góp của đề tài:
- Về mặt kiến trúc phần cứng: Thiết kế giải quyết triệt để tình trạng trễ dữ liệu và quá tải bộ xử lý bằng cách tích hợp hai bộ đệm FIFO 16 byte cho chiều truyền và nhận. Cấu trúc tách biệt giữa giao diện bus chuẩn APB và bộ điều khiển I2C giúp mô-đun dễ dàng tích hợp như một khối IP ngoại vi độc lập trong các hệ thống SoC (System-on-Chip).
- Về mặt phương pháp xác minh: Khắc phục hạn chế của các phương pháp mô phỏng thủ công truyền thống bằng việc xây dựng một môi trường UVM hoàn chỉnh. Việc kết hợp giữa sinh kích thích ngẫu nhiên, giám sát tự động bằng các UVC và đối chiếu tự động trên UVM Scoreboard giúp bao quát được các tình huống biên phức tạp (như lỗi mất ACK, điều kiện Repeat Start, truyền dữ liệu liên tiếp và địa chỉ 10-bit) mà testbench truyền thống dễ bỏ sót.
Hạn chế và hướng nghiên cứu tiếp
Khóa luận chỉ ra một số hạn chế gắn liền với phạm vi triển khai của đề tài:
- Thiết kế mới dừng lại ở bước mô phỏng kiểm chứng chức năng RTL bằng phần mềm (Vivado và QuestaSim), chưa thực hiện quy trình tổng hợp logic (synthesis), kiểm tra định thời tĩnh (STA) và thử nghiệm vật lý trên bo mạch FPGA thực tế.
- Phạm vi kiểm tra tập trung vào các chức năng vận hành cơ bản theo chuẩn giao thức giữa một Master và một Slave; chưa triển khai các kịch bản kiểm tra lỗi phức tạp ở mức vật lý, chưa tích hợp cơ chế kéo dài xung clock (clock stretching) và chưa mở rộng cho mô hình nhiều master cùng điều khiển bus (multi-master arbitration).
Các hướng mở rộng nghiên cứu được đề xuất:
- Hiện thực hóa thiết kế trên các dòng kit FPGA nhằm đo đạc tài nguyên phần cứng (LUTs, Flip-Flops), tần số hoạt động cực đại và công suất tiêu thụ thực tế.
- Tích hợp thêm các chế độ hoạt động tốc độ cao hơn của chuẩn I2C như Fast-mode, High-speed mode và hoàn thiện thuật toán phân xử đa chủ (Arbitration) khi có nhiều Controller cùng truyền trên bus.
- Hoàn thiện bộ đo lường độ bao phủ chức năng (functional coverage) và độ bao phủ mã nguồn (code coverage) trong môi trường UVM để đạt mức bao phủ 100% trước khi phục vụ sản xuất chip.
Giá trị tham khảo
Khóa luận là nguồn tài liệu học thuật hữu ích cho:
- Sinh viên các ngành Công nghệ Kỹ thuật Máy tính, Điện tử - Viễn thông, Công nghệ Bán dẫn và Kỹ thuật Vi điều khiển đang thực hiện đồ án tốt nghiệp, đề tài nghiên cứu về thiết kế vi mạch số và truyền thông ngoại vi.
- Các kỹ sư thiết kế phần cứng (RTL Design Engineer) và kỹ sư xác minh (Verification Engineer) cần tham khảo một trường hợp ứng dụng thực tế về việc chuyển đổi từ testbench truyền thống sang môi trường xác minh chuẩn công nghiệp UVM trên nền SystemVerilog.
Các phần nội dung có giá trị tham khảo chuyên sâu:
- Hệ thống thanh ghi cấu hình chi tiết tại Chương 3 (Bảng 3.1 đến Bảng 3.12), cung cấp mẫu kiến trúc chuẩn cho việc quản lý trạng thái, cờ ngắt và cấu hình chế độ của một khối IP ngoại vi số.
- Thiết kế chi tiết các thành phần UVM tại Chương 3 và 10 kịch bản kiểm thử kèm dạng sóng tại Chương 4, đóng vai trò là mẫu thiết kế (template) cho việc xây dựng testbench UVM từ mức giao dịch đến mức chân tín hiệu (pin-level).
Câu hỏi thường gặp
-
Bộ đệm FIFO trong bộ điều khiển I2C này có thông số kỹ thuật như thế nào và đảm nhiệm vai trò gì?
Bộ đệm FIFO được thiết kế đồng bộ, bao gồm hai khối tách biệt là TX FIFO (send_FIFOs) và RX FIFO (receive_FIFOs), mỗi khối có độ sâu 16 byte (16 ô nhớ đánh số từ 0 đến 15). FIFO hoạt động theo cơ chế vào trước - ra trước, quản lý bằng hai con trỏ wr_ptr và rd_ptr có khả năng quay vòng. Vai trò chính của FIFO là lưu trữ tạm thời dữ liệu giữa bus APB tốc độ cao và bus I2C tốc độ thấp, cho phép master truyền hoặc nhận nhiều byte liên tiếp (thông qua cấu hình byte_cnt) mà bộ xử lý không cần can thiệp liên tục sau từng byte.
-
Khối I2C Controller hỗ trợ những định dạng địa chỉ slave nào và được định cấu hình tại thanh ghi nào?
Thiết kế hỗ trợ cả hai chế độ địa chỉ 7-bit và 10-bit. Chế độ địa chỉ được lựa chọn qua bit addr_mode (bit [4]) của thanh ghi mode_reg (offset 0x18): khi bằng 0 là chế độ 7-bit, khi bằng 1 là chế độ 10-bit. Giá trị địa chỉ được nạp qua hai thanh ghi: target_addrl_reg (offset 0x08, lưu 7 bit thấp target_addr_low [6:0]) và target_addrh_reg (offset 0x0C, lưu 3 bit cao target_addr_high [2:0] trong trường hợp dùng địa chỉ 10-bit).
-
Quá trình kiểm tra tính đúng đắn của dữ liệu trong môi trường xác minh UVM diễn ra tự động ra sao?
Môi trường sử dụng khối uvm_scoreboard kết nối với các uvm_monitor thông qua các cổng giao tiếp TLM. Khi DUT vận hành, monitor thụ động ghi nhận các tín hiệu trên chân SDA/SCL và chuyển đổi thành transaction gửi về scoreboard. Tại đây, khối logic đối chiếu (Compare Logic) sẽ lấy dữ liệu thực tế này so sánh từng byte với dữ liệu dự đoán từ mô hình tham chiếu (Reference Model). Nếu có sai lệch về giá trị dữ liệu hoặc thứ tự bit, scoreboard sẽ phát cảnh báo lỗi ngay trong quá trình chạy mô phỏng.
-
Hệ thống quản lý những nguồn ngắt nào và cơ chế xóa cờ ngắt được thiết kế như thế nào?
Hệ thống hỗ trợ 5 nguồn ngắt, được cho phép độc lập thông qua thanh ghi int_enable_reg (offset 0x24) và phản ánh trạng thái tại thanh ghi int_status_reg (offset 0x20): ngắt khi slave trả về NACK (bit [4] nack_int), ngắt khi TX FIFO đầy (bit [3] tx_fifo_full_int), ngắt khi TX FIFO rỗng (bit [2] tx_fifo_empty_int), ngắt khi RX FIFO đầy (bit [1] rx_fifo_full_int) và ngắt khi RX FIFO rỗng (bit [0] rx_fifo_empty_int). Cơ chế xóa cờ ngắt áp dụng chuẩn RW1C (Read and Write 1 to Clear), tức là phần mềm chỉ cần ghi giá trị logic 1 vào bit trạng thái tương ứng để xóa cờ ngắt đó về 0.
Kết luận
Đồ án tốt nghiệp "Thiết kế và xác minh giao thức I2C sử dụng UVM" đã xây dựng thành công khối phần cứng I2C Controller bằng ngôn ngữ Verilog, tích hợp giao diện bus chuẩn APB và bộ đệm FIFO 16 byte hai chiều đáp ứng linh hoạt các chế độ truyền nhận dữ liệu 7-bit và 10-bit. Đồng thời, nghiên cứu đã phát triển một môi trường xác minh chức năng hoàn chỉnh theo chuẩn công nghiệp UVM trên nền SystemVerilog, cho phép tự động kiểm tra và đánh giá thiết kế qua 10 kịch bản mô phỏng chuyên biệt từ các điều kiện truyền thông tiêu chuẩn đến các trường hợp biên như Repeat Start, truyền khối và ngắt NACK. Kết quả mô phỏng trên các công cụ QuestaSim và Vivado đã kiểm chứng tính đúng đắn, sự ổn định của thiết kế phần cứng theo đúng đặc tả kỹ thuật, cung cấp một quy trình kết hợp thiết kế và xác minh có giá trị tham khảo thực tiễn cao cho lĩnh vực thiết kế vi mạch.