Bối cảnh và vấn đề nghiên cứu
Trong lĩnh vực thiết kế vi mạch hiện đại, xu hướng gia tăng số lượng chân giao tiếp và mật độ tích hợp linh kiện trên một bo mạch đã đặt ra nhiều thách thức lớn cho công tác kiểm tra, kiểm thử và gỡ lỗi (debug). Các phương pháp truyền thống như kiểm tra chức năng thông thường hay sử dụng bàn chông (bed-of-nails/đầu dò vật lý) bộc lộ hạn chế rõ rệt về thời gian, chi phí và khả năng tiếp cận trực tiếp các nút tín hiệu bên trong chip phức tạp. Để giải quyết vấn đề này, các hệ thống gỡ lỗi phần cứng tích hợp trực tiếp trên vi mạch dựa trên các chuẩn giao tiếp tiêu chuẩn đã trở thành giải pháp cốt lõi. Chuẩn giao thức JTAG (IEEE 1149.1) đóng vai trò là cầu nối đồng bộ, cho phép hệ thống phần mềm bên ngoài truy cập, điều khiển và gỡ lỗi phần cứng SoC một cách chính xác.
Nhằm làm chủ quy trình thiết kế phần cứng vi xử lý và hệ thống kiểm thử tiêu chuẩn, đề tài tập trung vào việc thiết kế lõi vi xử lý RISC-V RV32I và khối điều khiển JTAG-TAP, đồng thời tích hợp hai khối này để phục vụ quá trình nạp mã lệnh chương trình trực tiếp vào bộ nhớ vi xử lý trên nền tảng phần cứng FPGA.
Theo văn bản khóa luận, mục tiêu nghiên cứu được cụ thể hóa thành 6 nhiệm vụ chính:
- Tìm hiểu, nghiên cứu chức năng hoạt động, đồng thời kiểm tra chức năng thiết kế khối điều khiển JTAG-TAP theo chuẩn công nghiệp.
- Thiết kế lõi vi xử lý RISC-V RV32I và kiểm tra chức năng hoạt động của thiết kế.
- Tích hợp khối điều khiển JTAG-TAP với lõi vi xử lý RISC-V RV32I; xây dựng các lệnh phù hợp trên khối JTAG-TAP nhằm hỗ trợ việc nạp mã lệnh chương trình và gỡ lỗi cho lõi RISC-V.
- Xây dựng môi trường mô phỏng testbench và tập test case để kiểm tra toàn diện hoạt động của toàn bộ hệ thống tích hợp.
- Hiện thực chương trình điều khiển cho module vi điều khiển Arduino Nano để lái các chân cổng vào/ra (I/O) kết nối với FPGA.
- Hiện thực, kiểm thử và tối ưu hóa thiết kế trên board mạch FPGA Altera DE2 Cyclone II.
Đối tượng nghiên cứu của đề tài là khối điều khiển cổng truy cập kiểm tra JTAG-TAP (chuẩn IEEE 1149.1), kiến trúc tập lệnh vi xử lý RISC-V RV32I 32-bit (gồm 47 lệnh cơ bản, cấu trúc pipeline 5 chặng) và bộ nhớ lệnh IMEM. Phạm vi thực nghiệm của nghiên cứu được giới hạn trong việc mô hình hóa phần cứng ở mức RTL, kiểm tra chức năng bằng mô phỏng dạng sóng, và thực thi trên kit FPGA Altera DE2 Cyclone II kết hợp vi điều khiển Arduino Nano làm mạch nạp/điều khiển trung gian. Đề tài sử dụng kết quả khóa luận trước của tác giả Chướng Sec Váy (Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM) làm đối chuẩn so sánh.
Cơ sở lý thuyết và phương pháp
Cơ sở lý thuyết và chuẩn kỹ thuật
- Chuẩn giao diện JTAG (IEEE Std 1149.1): Kiến trúc cổng truy cập kiểm tra và quét biên (Standard Test Access Port and Boundary-Scan Architecture). Chuẩn quy định tập tín hiệu giao tiếp TAP (TCK, TMS, TDI, TDO, TRST), máy trạng thái hữu hạn TAP Controller gồm 16 trạng thái, cơ chế thanh ghi lệnh (Instruction Register - IR) và tập thanh ghi dữ liệu (Data Registers - DR) gồm thanh ghi quét biên (BSR), thanh ghi định danh thiết bị (Device ID Register - DIDR) và thanh ghi nối tắt (Bypass Register - BR).
- Kiến trúc tập lệnh RISC-V RV32I: Kiến trúc phần cứng vi xử lý mã nguồn mở 32-bit với tập lệnh cơ bản (Base Integer Instruction Set) gồm 47 lệnh, không chứa các tập lệnh mở rộng (như M, F, D, C). Kiến trúc áp dụng mô hình thực thi đường ống (pipeline) 5 tầng: Tìm nạp lệnh (Fetch), Giải mã lệnh (Decode), Thực thi (Execute), Truy xuất bộ nhớ (Memory) và Ghi lại kết quả (Write-Back), có tích hợp khối xử lý xung đột dữ liệu (Data Hazard) và xung đột điều khiển (Control Hazard) bằng giải pháp dừng đường ống (stall).
Phương pháp nghiên cứu
- Phương pháp thiết kế phần cứng số (RTL Design): Mô hình hóa các khối chức năng của TAP Controller, các ô quét biên (Boundary Scan Cell - BSC), các thanh ghi dịch, khối giải mã lệnh JTAG và các tầng pipeline của bộ xử lý RISC-V RV32I.
- Phương pháp mô phỏng và kiểm tra dạng sóng (Waveform Simulation): Xây dựng testbench để khảo sát quá trình chuyển trạng thái của FSM, quá trình dịch bit dữ liệu nối tiếp qua TDI/TDO, quá trình bắt mẫu (capture) và cập nhật (update) tại các cạnh xung nhịp TCK.
- Phương pháp thực nghiệm phần cứng (Hardware Prototyping): Tổng hợp thiết kế lên chip FPGA Altera Cyclone II (board DE2), sử dụng Arduino Nano lập trình các chuỗi tín hiệu điều khiển TMS/TCK/TDI để nạp lệnh thực tế vào bộ nhớ IMEM của vi xử lý.
Nguồn dữ liệu và tài liệu đối sánh
Nghiên cứu sử dụng hệ thống tiêu chuẩn quốc tế IEEE Std 1149.1, tài liệu kỹ thuật của tổ chức RISC-V International, các công bố khoa học về nền tảng gỡ lỗi SoC (điển hình là nghiên cứu của Kuo-Kai Liu, Wen-Hsuan Hsu và Kuen-Jong Lee, 2015), bài viết chuyên môn về ứng dụng JTAG của tác giả Nguyễn Quân (2019) và báo cáo khóa luận tốt nghiệp của tác giả Chướng Sec Váy tại Khoa Kỹ thuật Máy tính, Trường Đại học Công nghệ Thông tin.
Thiết kế và triển khai
Hệ thống được thiết kế theo cấu trúc phần cứng số tích hợp hai khối lõi chính: Khối điều khiển kiểm tra JTAG-TAP và Khối vi xử lý RISC-V RV32I kết nối với bộ nhớ lệnh IMEM.
Cấu trúc khối điều khiển JTAG-TAP
Khối JTAG-TAP thực hiện chức năng giao tiếp thụ động theo sự điều khiển của bus master bên ngoài thông qua 5 chân tín hiệu TAP:
TCK (Test Clock): Xung nhịp đồng bộ điều khiển quá trình lấy mẫu tại cạnh lên và xuất dữ liệu tại cạnh xuống.
TMS (Test Mode Select): Tín hiệu chọn chế độ, điều khiển quá trình chuyển đổi giữa 16 trạng thái của FSM.
TDI (Test Data Input): Tín hiệu nạp dữ liệu/lệnh nối tiếp vào các thanh ghi dịch.
TDO (Test Data Output): Tín hiệu xuất dữ liệu nối tiếp ra ngoài từ các thanh ghi dịch.
TRST (Test Reset): Tín hiệu reset bất đồng bộ tích cực mức cao cho logic kiểm tra.
Thanh ghi lệnh (IR) được thiết kế với độ rộng 4-bit, cấu tạo từ 4 cell cơ sở (mỗi cell gồm 2 flip-flop và 3 multiplexer: flip-flop dịch và flip-flop lưu giữ). Trong trạng thái Capture-IR, 2 bit LSB của IR luôn được nạp cố định giá trị 01 (chuỗi 4-bit nạp là 0101) nhằm phục vụ phát hiện lỗi đường truyền vật lý.
| Tên lệnh JTAG |
Mã Opcode [3:0] |
Chức năng kỹ thuật |
| EXTEST |
4'b0000 |
Kết nối chuỗi Boundary-Scan giữa TDI và TDO để kiểm tra kết nối ngoại vi chip. |
| SAMPLE/PRELOAD |
4'b0001 |
Lấy mẫu tín hiệu chân chip hoặc nạp trước dữ liệu vào thanh ghi BSR trước khi chạy EXTEST. |
| IDCODE |
4'b0010 |
Kết nối thanh ghi Device ID (32-bit) giữa TDI và TDO để đọc thông tin nhận dạng chip. |
| DEBUG |
4'b1000 |
Kết nối đường tín hiệu debug_tdi_i tới TDO để thực hiện các chức năng gỡ lỗi hệ thống. |
| MBIST |
4'b1001 |
Kết nối đường tín hiệu mbist_tdi_i tới TDO phục vụ tự kiểm tra bộ nhớ nội (Memory BIST). |
| BYPASS |
4'b1111 |
Kết nối thanh ghi Bypass (1-bit) giữa TDI và TDO nhằm rút ngắn đường truyền khi bỏ qua chip. |
Cấu trúc lõi vi xử lý RISC-V RV32I và cơ chế nạp lệnh
Lõi RISC-V RV32I được xây dựng theo kiến trúc Harvard đơn giản với bộ nhớ lệnh (IMEM) và bộ nhớ dữ liệu (DMEM) tách biệt. Đường ống xử lý gồm 5 tầng:
- Fetch: Tính toán giá trị Program Counter (PC) và tìm nạp mã lệnh từ bộ nhớ IMEM.
- Decode: Giải mã trường opcode, funct3, funct7 và đọc các thanh ghi nguồn từ Register File (gồm 32 thanh ghi 32-bit).
- Execute: Thực hiện tính toán số học/logic tại khối ALU, tính toán địa chỉ nhảy hoặc nhánh.
- Memory: Đọc hoặc ghi dữ liệu với bộ nhớ DMEM đối với các lệnh Load/Store.
- Write-Back: Ghi kết quả tính toán hoặc dữ liệu đọc từ bộ nhớ trở lại Register File.
Cơ chế nạp lệnh chương trình được hiện thực bằng cách định tuyến dữ liệu từ khối JTAG-TAP sang giao tiếp ghi của bộ nhớ IMEM. Khi cần nạp chương trình, bus master chuyển JTAG sang chế độ nạp, đưa địa chỉ và dữ liệu lệnh qua giao thức quét chuỗi nối tiếp; sau khi hoàn tất chuỗi dịch, tín hiệu điều khiển kích hoạt việc ghi song song dữ liệu vào từng ô nhớ IMEM tương ứng.
Triển khai kiểm thử phần cứng
Để xác thực trên phần cứng thực tế mà không cần thiết bị nạp chuyên dụng đắt tiền, nhóm tác giả triển khai giải pháp ghép nối bo mạch:
- Bộ điều khiển ngoài (Host Controller): Sử dụng vi điều khiển Arduino Nano, lập trình mã nguồn C/C++ để tạo dạng sóng điều khiển các chân
TCK, TMS, TDI và đọc phản hồi từ TDO.
- Nền tảng thực thi: Nạp cấu hình phần cứng tổng hợp lên FPGA Altera Cyclone II (board DE2).
- Quy trình kiểm tra: Arduino Nano nạp chuỗi lệnh thử nghiệm vào IMEM thông qua cổng JTAG, sau đó kích hoạt vi xử lý RISC-V chạy chương trình, rồi tiến hành đọc ngược giá trị trong các thanh ghi nội của vi xử lý ra màn hình máy tính (Serial Console) để đối chiếu kết quả thực thi.
Nội dung chính theo từng chương
Chương 1. Giới thiệu tổng quan đề tài
Chương mở đầu phân tích bối cảnh phát triển của ngành công nghiệp vi mạch, nhấn mạnh yêu cầu kiểm tra và gỡ lỗi trên các hệ thống tích hợp quy mô lớn (SoC). Tác giả khảo sát các nghiên cứu liên quan trong nước (các bài viết phân tích JTAG của Nguyễn Quân) và quốc tế (nền tảng SoC Debug của Kuo-Kai Liu et al., 2015), đồng thời xác định khóa luận của tác giả Chướng Sec Váy là đối tượng tham chiếu kỹ thuật trực tiếp. Chương này xác định rõ mục tiêu nghiên cứu, phương pháp tiếp cận và bảng so sánh sơ bộ các chỉ tiêu kỹ thuật giữa đề tài và khóa luận tiền đề.
Chương 2. Tổng quan về giao thức giao tiếp JTAG
Chương 2 trình bày chi tiết về chuẩn IEEE 1149.1. Tác giả tổng hợp lịch sử hình thành từ năm 1985 của tổ chức Joint Test Action Group, các mốc chuẩn hóa IEEE Std 1149.1-1990, bản bổ sung 1149.1-1993 (thêm lệnh CLAMP, HIGH-Z), bản 1149.1b-1994 (bổ sung ngôn ngữ BSDL) và các cập nhật mở rộng với ngôn ngữ PDL (Procedural Description Language). Chương này phân tích bốn nhóm ứng dụng chính của JTAG trong công nghiệp vi mạch: nạp chương trình (Program), kiểm tra kết nối bo mạch (Connection test), kiểm tra logic chip sau chế tạo (Chip test) và gỡ lỗi phần mềm/firmware (Debug).
Chương 3. Thiết kế lõi điều khiển JTAG - TAP
Chương 3 là phần trọng tâm về thiết kế phần cứng kiểm tra, mô tả chi tiết kiến trúc TAP Controller và máy trạng thái FSM 16 trạng thái. Tác giả trình bày cấu tạo chi tiết của:
- Cổng TAP và các tín hiệu vào/ra.
- Thanh ghi lệnh IR 4-bit và nguyên lý nạp mẫu
4'b0101 tại trạng thái Capture-IR.
- Các thanh ghi dữ liệu: Boundary Scan Cell (BSC), Boundary Scan Register (BSR), Bypass Register (BR 1-bit) và Device ID Register (DIDR 32-bit).
- Quy trình điều khiển thanh ghi qua các trạng thái: Select, Capture, Shift, Exit1, Pause, Exit2, Update.
- Phân tích chi tiết quy trình nạp và kết quả mô phỏng dạng sóng (waveform) của 6 lệnh kiểm tra: EXTEST, SAMPLE/PRELOAD, IDCODE, DEBUG, MBIST, BYPASS.
Chương 4. Quy trình thiết kế lõi vi xử lý RV32I
Chương 4 tập trung vào thiết kế lõi xử lý RISC-V 32-bit:
- Giới thiệu tổ chức kiến trúc tập lệnh RISC-V RV32I với 47 lệnh nguyên bản và lịch sử phát triển từ Đại học California, Berkeley đến tổ chức RISC-V International.
- Thiết kế chi tiết cấu trúc pipeline 5 chặng (Fetch, Decode, Execute, Memory, Write-Back).
- Phân tích nguyên nhân và giải pháp phần cứng xử lý xung đột dữ liệu (Data Hazard) và xung đột điều khiển (Control Hazard) bằng kỹ thuật chèn chu kỳ dừng (stall processor).
- Kết quả mô phỏng dạng sóng xác thực chức năng cho từng chu kỳ riêng biệt và mô phỏng hoàn chỉnh toàn bộ đường ống xử lý của lõi RISC-V.
Chương 5. Thiết kế tổng hợp
Chương 5 trình bày giải pháp tích hợp phần cứng giữa khối điều khiển JTAG-TAP và lõi vi xử lý RISC-V RV32I. Nội dung tập trung vào:
- Sơ đồ ghép nối liên khối và nguyên lý chuyển giao dữ liệu từ chuỗi quét nối tiếp của TAP sang bus dữ liệu song song của bộ nhớ IMEM.
- Lưu đồ quy trình nạp một mã lệnh vào bộ nhớ IMEM thông qua JTAG.
- Kết quả mô phỏng tích hợp (waveform kiểm tra thiết kế tổng hợp), chứng minh việc nạp thành công các đoạn mã chương trình vào bộ nhớ lệnh và kích hoạt vi xử lý thực thi chính xác.
Chương 6. Kịch bản kiểm tra thiết kế
Chương 6 xây dựng phương pháp kiểm thử thực nghiệm trên phần cứng:
- Xây dựng mô hình kiểm thử testbench tự động kiểm tra giá trị thanh ghi nội.
- Thiết kế mạch ghép nối giữa vi điều khiển Arduino Nano và board mạch FPGA Altera DE2 Cyclone II.
- Hiện thực mã nguồn C trên Arduino Nano để phát chuỗi xung nhịp và vector kiểm tra giao tiếp JTAG.
- Ghi nhận và hiển thị dữ liệu double-check các giá trị thanh ghi trên màn hình Serial Console, xác nhận tính đúng đắn của phần cứng khi chạy thực tế.
Chương 7. Kết luận và kết quả đề tài
Chương cuối tổng kết toàn bộ các kết quả đạt được của khóa luận:
- Báo cáo chi tiết các thông số kỹ thuật phần cứng sau khi tổng hợp trên FPGA Altera Cyclone II: tần số xung nhịp tối đa, diện tích tài nguyên logic sử dụng, công suất tiêu thụ tĩnh/động theo các mức toggle rate mặc định và tối đa.
- Tổng hợp bảng so sánh đối chuẩn với đề tài tiền đề.
- Nêu rõ các hạn chế tồn tại của thiết kế và đề xuất các hướng phát triển tiếp theo.
Kết quả và đóng góp
Kết quả kỹ thuật thực nghiệm
Khóa luận đã hoàn thành việc thiết kế, mô phỏng và hiện thực hóa thành công trên phần cứng hệ thống lõi vi xử lý RISC-V RV32I tích hợp khối điều khiển JTAG-TAP với các chỉ số kỹ thuật cụ thể:
- Hiện thực đầy đủ máy trạng thái FSM 16 trạng thái của JTAG TAP Controller tương thích chuẩn IEEE 1149.1.
- Hiện thực thành công 6 lệnh JTAG:
EXTEST (0000), SAMPLE/PRELOAD (0001), IDCODE (0010), DEBUG (1000), MBIST (1001), BYPASS (1111).
- Thiết kế thành công lõi xử lý RISC-V RV32I 5 tầng pipeline xử lý được 47 lệnh cơ bản và giải quyết triệt để các xung đột phần cứng bằng cơ chế stall.
- Tích hợp thành công chức năng nạp trực tiếp mã lệnh vào bộ nhớ IMEM thông qua JTAG mà không cần nạp lại toàn bộ cấu hình bitstream của FPGA.
- Xác thực thành công hệ thống trên kit phần cứng Altera DE2 Cyclone II thông qua bộ điều khiển giao tiếp ngoại vi Arduino Nano.
Bảng so sánh với nghiên cứu tiền đề
| Đặc điểm nghiên cứu |
Khóa luận trước (Chướng Sec Váy) |
Thiết kế của đề tài này |
| Nền tảng FPGA |
Xilinx Virtex 7 |
Altera DE2 Cyclone II |
| Kiến trúc vi xử lý hỗ trợ |
MIPS-32bits |
RISC-V RV32I (32-bit, 47 lệnh) |
| Tần số hoạt động |
55,6 MHz |
Đạt tần số cao hơn khóa luận trước |
| Tính năng tích hợp |
Chỉ hỗ trợ chức năng gỡ lỗi (debug) |
Hỗ trợ đồng thời cả nạp lệnh chương trình và gỡ lỗi |
| Phương thức kiểm thử |
Mô phỏng / Giao tiếp chuyên dụng |
Testbench RTL kết hợp Arduino Nano điều khiển ngoại vi |
Đóng góp kỹ thuật của đề tài
- Làm chủ thiết kế phần cứng JTAG: Cung cấp tài liệu thiết kế chi tiết từ mức cell (IR cell, BSC cell, Bypass cell) đến mức FSM hoàn chỉnh tương thích chuẩn công nghiệp IEEE 1149.1.
- Mở rộng tính năng nạp lệnh cho RISC-V: Khắc phục hạn chế của các thiết kế JTAG truyền thống (vốn chỉ hỗ trợ debug hoặc quét biên) bằng việc bổ sung cơ chế giao tiếp trực tiếp với bộ nhớ lệnh IMEM, biến JTAG thành công cụ nạp chương trình linh hoạt cho vi xử lý nhúng.
- Giải pháp kiểm thử kinh tế: Đề xuất và hiện thực hóa mô hình kiểm thử kết hợp giữa board FPGA và vi điều khiển Arduino Nano giá thành thấp, giúp việc xác thực phần cứng mức board trở nên đơn giản và dễ tiếp cận trong môi trường học thuật.
Hạn chế và hướng nghiên cứu tiếp
Hạn chế của đề tài
- Tập lệnh vi xử lý: Lõi RISC-V mới chỉ hiện thực tập lệnh số nguyên cơ bản RV32I (47 lệnh), chưa hỗ trợ các tập lệnh mở rộng như nhân/chia số nguyên (RV32M), số thực (RV32F/D) hay tập lệnh nén (RV32C).
- Cấu trúc bộ nhớ: Chưa tích hợp hệ thống bộ nhớ đệm (Cache Instruction/Data Cache) và các khối điều khiển bộ định thời (Timer), quản lý truy cập bộ nhớ trực tiếp (DMA).
- Nền tảng phần cứng: Thiết kế được hiện thực trên dòng FPGA Altera Cyclone II (thế hệ cũ trên board DE2), gây giới hạn nhất định về việc tối ưu hóa tần số xung nhịp tối đa so với các họ FPGA hiện đại.
- Giao diện điều khiển: Việc nạp lệnh và kiểm thử còn phụ thuộc vào vi điều khiển Arduino Nano trung gian phát xung thủ công, chưa xây dựng phần mềm giao diện đồ họa (GUI) trên máy tính kết nối trực tiếp qua chuẩn USB-to-JTAG chuyên dụng.
Hướng nghiên cứu tiếp
- Mở rộng tập lệnh cho lõi vi xử lý lên chuẩn RV32IM hoặc RV32IMC nhằm nâng cao hiệu năng tính toán và độ nhỏ gọn của mã chương trình.
- Thiết kế bổ sung khối bộ nhớ Cache (L1 I-Cache, D-Cache) và bộ điều khiển quản lý bộ nhớ để tăng tốc độ truy xuất của vi xử lý.
- Nâng cấp triển khai thiết kế trên các dòng FPGA cao cấp hơn (như Xilinx Artix-7, Zynq hoặc Altera Cyclone IV/V, Stratix) để đánh giá hiệu năng ở tần số cao.
- Phát triển phần mềm Host Controller chạy trên máy tính (kết nối qua FTDI/USB) với giao diện người dùng trực quan, hỗ trợ tự động hóa hoàn toàn quy trình biên dịch mã nguồn C sang mã máy và nạp trực tiếp qua JTAG vào chip.
Giá trị tham khảo
Tài liệu khóa luận mang lại giá trị học thuật và ứng dụng thực tiễn cho nhiều đối tượng:
- Sinh viên và học viên ngành Kỹ thuật Máy tính, Thiết kế Vi mạch, Điện tử: Là tài liệu tham khảo chi tiết về quy trình thiết kế phần cứng số bằng ngôn ngữ mô tả phần cứng (HDL/Verilog), phương pháp xây dựng máy trạng thái FSM phức tạp và quy trình hiện thực vi xử lý pipeline.
- Kỹ sư phát triển hệ thống nhúng và SoC: Cung cấp hướng dẫn cụ thể về việc hiện thực chuẩn giao tiếp JTAG IEEE 1149.1, phương pháp thiết kế khối quét biên (Boundary Scan) và cơ chế nạp chương trình nội tuyến vào vi xử lý.
- Các phần nội dung đáng tham khảo nhất:
- Sơ đồ nguyên lý và thiết kế mạch cell 1-bit của thanh ghi lệnh IR và thanh ghi quét biên BSC (Chương 3).
- Phương pháp phân tích và xử lý xung đột đường ống (Data Hazard, Control Hazard) bằng cơ chế stall trong thiết kế RISC-V RV32I (Chương 4).
- Kiến trúc ghép nối liên khối giữa JTAG-TAP và bộ nhớ IMEM của vi xử lý (Chương 5).
- Kịch bản thiết kế testbench và giải pháp ghép nối Arduino Nano với FPGA để kiểm thử tín hiệu I/O (Chương 6).
Câu hỏi thường gặp
1. Khối điều khiển JTAG-TAP trong đề tài hỗ trợ những lệnh kiểm tra nào và mã opcode tương ứng là gì?
Khối TAP Controller trong thiết kế hỗ trợ 6 lệnh kiểm tra với thanh ghi lệnh IR độ rộng 4-bit, bao gồm:
- Lệnh
EXTEST có mã opcode 4'b0000
- Lệnh
SAMPLE/PRELOAD có mã opcode 4'b0001
- Lệnh
IDCODE có mã opcode 4'b0010
- Lệnh
DEBUG có mã opcode 4'b1000
- Lệnh
MBIST có mã opcode 4'b1001
- Lệnh
BYPASS có mã opcode 4'b1111
2. Tại sao giá trị nạp vào thanh ghi dịch IR ở trạng thái Capture-IR luôn có 2 bit cuối là 01?
Theo quy định của chuẩn IEEE 1149.1 và thiết kế của khóa luận, việc bắt buộc nạp 2 bit LSB mang giá trị 01 (trong đề tài chuỗi 4-bit nạp song song là 4'b0101) vào thanh ghi dịch IR trong trạng thái Capture-IR nhằm mục đích kiểm tra và phát hiện sớm các lỗi vật lý (như đứt mạch, ngắn mạch lên nguồn hoặc xuống đất) trên đường truyền dữ liệu nối tiếp TDI-TDO của bo mạch trước khi tiến hành dịch mã lệnh.
3. Thiết kế xử lý các xung đột dữ liệu (Data Hazard) và xung đột điều khiển (Control Hazard) trong lõi RISC-V RV32I như thế nào?
Để giải quyết các xung đột phát sinh trong đường ống 5 tầng (như xung đột khi lệnh sau cần dữ liệu của lệnh LW đi ngay trước nó hoặc xung đột do lệnh nhảy/rẽ nhánh), thiết kế sử dụng giải pháp dừng vi xử lý (stall processor/pipeline stall). Bộ điều khiển sẽ tạm dừng các tầng tìm nạp và giải mã lệnh trong các chu kỳ cần thiết để dữ liệu được cập nhật chính xác trước khi tiếp tục thực thi.
4. Vai trò của vi điều khiển Arduino Nano trong kịch bản kiểm tra thiết kế là gì?
Arduino Nano được sử dụng như một thiết bị Host Controller kinh tế để điều khiển các chân vào/ra (I/O) kết nối với kit FPGA Altera DE2 Cyclone II. Nhóm tác giả nạp chương trình C lên Arduino Nano để phát chuỗi xung nhịp TCK, tạo tín hiệu chọn chế độ TMS, đưa dữ liệu nối tiếp TDI vào chip và nhận dữ liệu TDO trả về, sau đó hiển thị kết quả kiểm tra lên màn hình máy tính (Console) để xác thực hoạt động của vi xử lý và các thanh ghi.
5. Điểm cải tiến nổi bật nhất của đề tài này so với khóa luận của tác giả Chướng Sec Váy là gì?
Trong khi đề tài của tác giả Chướng Sec Váy thực hiện trên nền tảng vi xử lý MIPS-32bits và chỉ hỗ trợ tính năng gỡ lỗi (debug) thông qua JTAG, đề tài này đã phát triển trên kiến trúc vi xử lý mã nguồn mở RISC-V RV32I (47 lệnh) và bổ sung tính năng nạp trực tiếp mã lệnh chương trình vào bộ nhớ IMEM thông qua JTAG-TAP, đồng thời đạt tần số làm việc cao hơn trên board FPGA Altera DE2 Cyclone II.
Kết luận
Khóa luận tốt nghiệp của sinh viên Hồ Khả Trình và Nguyễn Nhựt Trường đã hoàn thành việc thiết kế, tích hợp và kiểm thử hệ thống lõi vi xử lý RISC-V RV32I cùng khối điều khiển JTAG-TAP theo chuẩn IEEE 1149.1 trên nền tảng FPGA Altera DE2 Cyclone II. Nghiên cứu giải quyết thành công bài toán nạp mã lệnh chương trình trực tiếp vào bộ nhớ IMEM qua giao diện quét nối tiếp, đồng thời xử lý trọn vẹn các xung đột đường ống 5 chặng của vi xử lý 32-bit. Toàn bộ thiết kế đã được thẩm định tính chính xác qua mô phỏng dạng sóng RTL và kiểm nghiệm thực tế trên phần cứng với sự hỗ trợ của mạch điều khiển Arduino Nano, đóng góp tài liệu kỹ thuật có giá trị tham khảo cao cho lĩnh vực thiết kế vi mạch và hệ thống nhúng.