Đặt vấn đề Ngày nay, các thiết kế vi xử lý có số lượng chân lớn ngày càng phô biến và mật độ tích hợp các linh kiện bán dẫn trên một bo mạch cũng ngày càng tăng cao. Đi kèm với đó là vấn đề kiểm tra, kiểm thử thiết kế dần trở nên phức tạp và tốn kém nhiều chi phí và thời gian. Do đó, các phương pháp kiểm tra thiết kế dần được hoàn thiện và tạo thành một hệ thống gỡ lỗi hoàn chỉnh. Hệ thống này cho phép người dùng kiểm tra và gỡ lỗi trực tiếp trên thiết kế.
Hệ thống gỡ lỗi có thiết kế phức tạp và được chia làm hai hệ thống chính: phần mềm và phần cứng. Phần mềm được thiết kế nhằm tạo nên một môi trường cho phép người dùng dễ dàng kiểm tra và gỡ lỗi. Đối với phần cứng thì phần lớn được thiết kế như một hệ thống SoC bao gồm cả thiết kế cần kiểm tra. Hai hệ thống này được thiết kế tách biệt hoàn toàn với nhau, dé hai hệ thống này có thé giao tiếp với nhau hầu hết các nhà cung cấp vi xử lý đều sử dụng chuẩn giao thức JTAG, một số nhà cung cấp khác thì phát triển giao thức riêng cho hệ thống gỡ lỗi của họ như ARM với giao thức DAP,.
Khi các thiết kế vi xử lý khi được tích hợp hệ thống gỡ lỗi sẽ giúp tiết kiệm được chỉ phí và thời gian khi gỡ lỗi chip trên các bo mạch phức tạp. Vì vậy, nhóm đưa ra dé tài hiện thực và thiết kế lõi JTAG trên vi xử ly MIPS 32-bit. Tập trung chủ yếu hiện thực thiết kế gỡ lỗi dựa trên giao thức JTAG và xây dựng một chương trình gỡ lỗi đơn giản. Các nghiên cứu liên quan Các nghiên cứu liên quan trong đề tài này được đề cập chủ yếu trong 3 chủ đề chính: Chuẩn giao tiếp JTAG IEEE 1149.1, vi xử lý MIPS và hệ thống gỡ lỗi trên phần cứng.
Chuẩn giao tiếp JTAG IEEE 1149.1 Hiện nay, chuẩn giao tiếp JTAG được sử dung rất phô biến. Ứng dụng của chuẩn giao tiếp này hầu hết đều nằm trong các hệ thống SoC, hệ thống gỡ lỗi. Các nghiên cứu ứng dụng JTAG hiện nay đều có thiết kế theo chuẩn IEEE 1149. Trong nước ta hiện nay có rất nhiều trang web giới thiệu về chuẩn giao tiếp JTAG.
Một trong số các bài viết được biết đến nhiều nhất là bài viết của tác giả Nguyễn Quân được đăng tải vào năm 2019 trên trang blog cá nhân [2], tác giả trình bày chi tiết nguyên lý hoạt động của JTAG và các thành phần bên trong của nó. Ngoài ra, tác giả còn đề cập ứng dụng lập trình bộ nhớ của JTAG. Vi xử lý MIPS Vi xử lý với kiến trúc MIPS là một bộ vi xử lý được sử dụng phổ biến trong các bài giảng của nhiều trường đại học. Hiện nay, có rất nhiều nghiên cứu hoặc thiết kế về vi xử lý MIPS đã được hiện thực.
Một nghiên cứu mới nhất tại trường Đại học Công nghệ Thông tin của tác giả Nguyễn Cao Tuan với đề tài “Nghiên cứu thiết kế bộ vi xử lý MIPS32 theo kiến trúc Superscalar” [3], tác giả đưa ra thiết kế bộ vi xử lý MIPS32 theo kiến trúc superscalar có thê xử lý hai câu lệnh trong cùng một chu kỳ xung clock, ngoài ra tác giả còn đưa ra phương pháp thiết kế đường ống (6 tang) dé giúp tăng tốc độ xử lý của thiết kế. Ngoài nghiên cứu đã nói ở trên, còn có rất nhiều nghiên cứu và thiết kế về vi xử lý MIPS được hiện thực. Các thiết kế vi xử lý MIPS đó thường được thiết kế đơn giản hoặc phức tạp để tăng hiệu suất của vi xử lý, có một số thiết kế như: MIPS 32-bit single-cycle, MIPS 32-bit pipelined,. Hệ thống gỡ lỗi trên phan cứng Sự phát triển của hệ thống gỡ lỗi phần cứng giúp việc gỡ lỗi trên nên dé dàng hơn, cũng như giúp tiết kiệm thời gian và chỉ phí.
Hiện nay, có rất nhiều hệ thống gỡ lỗi được phát triển. Một trong những hệ thống đó phải nói đến nghiên cứu “A High- Performance SoC Debug Platform” của nhóm tác giả Kou-Kai Liu, Wen-Hsuan Hsu và Kuen-Jong Lee [4]. Nghiên cứu này đề xuất một kiến trúc phần cứng có thé gỡ lỗi trên mạch với số lượng cổng giao tiếp lên đến 1500. Ngoài ra, dé có thé gỡ lỗi một cách dễ dàng, tác giả đã phát triển một công cụ giúp giao tiếp với hệ thống phần cứng gỡ lỗi và đưa ra các chức năng của toàn bộ hệ thống như: chế độ gỡ lỗi cycle-based (Single-step, Breakpoint), chế độ gỡ lỗi đặt điều kiện và chế độ gỡ lỗi đặt điều kiện phối hợp (giữa phần cứng và phần mềm).
Ngoài nghiên cứu ké trên, cũng có nghiên cứu ứng dụng hệ thống gỡ lỗi cho một thiết kế xác định, như thiết kế với một nền tảng gỡ lỗi cho vi xử lý kiến trúc RISC- V. Nghiên cứu của nhóm tác gia Wilmer Ramirez, Marco Sarmiento và Elkim Roa có tên là “A Flexible Debugger for RISC-V Based 32-bit System-on-Chip” [5], đưa ra một thiết kế gọi là “debugging platform”. Trong thiết kế của nền tảng gỡ lỗi đó sử dụng giao thức JTAG để giao tiếp với module bên ngoài. Bên cạnh đó, tác giả còn xây dựng nên một chương trình gỡ lỗi thay vì xây dựng nên một công cụ gỡ lỗi hoàn chinh.
Các nghiên cứu trong nước ta hiện nay cũng nỗi bật không kém so với các nghiên cứu nước ngoài. Điển hình trong sé đó là nghiên cứu của nhóm tác giả Nguyen Hung Quan, Duong Hai Dang Linh, Trinh Viet Quang, Hoang Minh The Nghỉ, Nguyen Phu Quoc, Tran Kien Cuong, Hoang Xuan Hoa về dé tài “An All-in-One Debugger of 8-bit Microcontroller with High Transfer Speed” [6]. Trong nghién cứu nay các tác giả dé xuất một phần cứng gỡ lỗi có tên là “All-in-One Debugger”, cũng tương tự với “debugging platform” của nghiên cứu trên. Thiết kế của phần cứng gỡ lỗi này cũng sử dụng giao thức JTAG làm kênh giao tiếp chính và cũng xây dựng chương trình gỡ lỗi dựa trên mã nguồn mở.
Tuy nhiên, phan lõi được gỡ lỗi là vi xử lý VN8, vi xử lý này được phát triển bởi Trung tâm Nghiên cứu và Dao tạo Thiết kế Vi mạch — ICDREC. Mục tiêu đề tài Thiết kế bộ vi xử lý MIPS 32-bit đơn chu kỳ bào gồm 25 lệnh: Các lệnh toán học và logic: ADD, ADDI, SUB, ADDU, SUBU, ADDIU, AND, OR, XOR, NOR, ANDI, ORI, XORI. Các lệnh dich bit: SLT, SLTU, SRL, SLL, SLTI, SLTIU. Các lệnh truy xuất bộ nhớ: SW, LW.
Các lệnh nhảy và rẽ nhánh: J, JAL, BEQ, BNE. Dựa trên chuẩn IEEE 1 149.1, hiện thực thiết kế JTAG bao gồm các lệnh: Các lệnh dịch chuỗi: BYPAS, SAMPLE, PRELOAD, EXTEST. Các lệnh truy xuất thanh ghi: IDCODE, READ REGS, PRG_COMMANDS. Các lệnh gỡ lỗi: CORE RESET, RUNSTEP, FORCE BREAK, SET_BREAK, RUN, RUN_DIRECT.
Thiết kế JTAG được hiện thực có các tính năng gỡ lỗi như Single-step cho phép gỡ lỗi từng dòng lệnh một, thiết lập các breakpoint cho phép dừng tại một vị trí lệnh đã được xác định. Bên cạnh đó, thiết kế Debug module được hiện thực nhằm điều khiển quá trình gỡ lỗi và hỗ trợ các tính năng gỡ lỗi như: cho phép lưu tối đa 15 breakpoint và thực thi gỡ lỗi từng lệnh. Hiện thực và chạy thử thiết kế trên FPGA Virtex-7 VC707, bằng cách xây dựng chương trình python giúp giao tiếp giữa PC và FPGA thông qua module FTDI USB to JTAG. Tổng quan về giao thức JTAG và hệ thống gỡ lỗi trên phần cứng 2.
Tổng quan giao thức JTAG Giao thức JTAG là cách gọi ngắn gọn theo tên của nhóm tạo ra chuẩn giao thức này. Tên chính thức của chuẩn này là “IEEE Standard Test Access Port and Boundary Scan Architecture”. Trong đó, có hai nội dung chính được đề cập: e _ Nội dung về TAP quy định giao tiếp và hoạt động của TAP trên chip. ¢ Boundary Scan quy định một phương pháp và cách thức kiểm tra các kết nối bên trong chip và các chân trên bo mạch in.
Lich sử phát triển Vào đầu những năm 1980, mạch in nhiều lớp, mạch tích hợp với số lượng chân lớn có dạng đóng gói ở dạng mạng lưới như ball grid array hoặc pin grid array và các bo mạch in có tích hợp số lương lớn linh kiện ngày càng phổ biến. Do đó, khiến việc kiểm tra kết nối của chip trên bo mạch phức tạp, tốn nhiều thời gian và khó sử dụng phương pháp đầu dò (probe) thông thường. Bên cạnh đó, tại thời điểm này, việc kiểm tra một bo mạch chủ yếu dựa vào hai phương pháp Bed-of-nails và kiểm tra chức năng (function test). Bed-of-nails, tạm dich là “nền đỉnh”.
Phương pháp này kiểm tra bo mạch bằng cách đặt bo mạch cần kiểm tra lên trên nền đỉnh hay còn gọi là đầu dò, tiếp xúc trực tiếp với các điểm kiểm tra trên bo mạch để thực hiện việc kiểm tra. Kiểm tra chức năng là việc kiểm tra khả năng hoạt động của một linh kiện bằng cách đưa các mẫu (giá trị) kiểm tra đến linh kiện cần kiểm tra và giám sát các đáp ứng từ linh kiện này. Việc chỉ sử dụng hai phương pháp trên làm thời gian kiểm tra lâu, chi phí cao. Năm 1985, tổ chức Joint Test Action Group được thành lập và bắt đầu phát triển một tiêu chuẩn giải quyết các van đề trên.
Giữa năm 1986 và 1988, Tiểu ban kỹ thuật JTAG (JTAG Technical Subcommittee) đã phát triển và công bố một nhóm các dé xuất về dang chuẩn của boundary scan. Trong năm 1988, JTAG được quyết định sẽ trở thành nền tảng của một tiêu chuẩn trong họ Bus kiểm tra — Testability Bus và dự án P1149.1 được khởi động. Vào tháng 2 năm 1990, chuẩn được phê duyệt lần đầu tiên và được tiếp tục chỉnh sửa, nâng cấp và hoàn thiện. Tháng 6 năm 1993, phiên bản IEEE Std 1149.1-1193 được chấp nhận với những bộ sung thêm: e Hai lệnh tùy chọn CLAMP và HIGHZ.
e Cơ chế cho phép chuyển đổi chế độ hoạt động của một thành phan (component) tương thích chuẩn này sang một cơ chế DFT khác. Thang 9 năm 1994, phiên bản IEEE Std 1149.1b-1994 được chấp nhận. Ban này bổ sung thêm phụ lục về ngôn ngữ mô tả Boundary-scan (Boundary-Scan Description Language). Tháng 7 năm 2001, phiên bản IEEE 1149.1-2001 được công bó với nhiều quy định bổ sung giúp giảm rủi ro (risk), tăng tính linh động (flexibility) và hiệu quả khi thiết kế phần cứng cho boundary-scan trên chip.
Phiên ban mới nhất được sử dụng cho tới ngày nay là IEEE 1149. Phiên bản này có nhiều bồ sung hơn so với các phiên bản trước đó: s Các lệnh mới của JTAG: CLAMP_HOLD, TMP_STATUS, CLAMP_RELEASE, ECIDCODE, INIT_SETUP, INIT_SETUP_CLAMP, INIT_RUN, IC_RESET.