Thứ Bảy, 2 tháng 11, 2019

[JTAG] Bài 1 - Tổng quan về giao thức JTAG

Chuỗi bài viết này trình bày về giao thức JTAG (IEEE 1149.1). Bài viết đầu tiên trình bày tổng quan về lịch sử, ứng dụng và cấu trúc logic JTAG trong một chip.
1) Thuật ngữ
Một số từ viết tắt dùng trong chuỗi bài viết này:
  • TCK (Test Clock) chân cấp clock cho logic JTAG
  • TMS (Test Mode Select) chân điều khiển trạng thái hoạt động của TAP
  • TDI (Test Data Input) ngõ vào dữ liệu nối tiếp 
  • TDO (Test Data Output) ngõ ra dữ liệu nối tiếp
  • TRST* (Test Reset) chân reset logic JTAG, tích cực mức thấp. Ký hiệu * biểu thị tích cực mức thấp
  • IR (Instruction Register) thanh ghi lệnh, chứa các lệnh điều khiển logic JTAG
  • DR (Data Register) thanh ghi dữ liêu
  • TAP (Test Access Port) là bộ chân của chuẩn JTAG gồm TCK, TMS, TDI, TDI và TRST*
Một số thuật ngữ được sử dụng trong chuỗi bài viết này:
  • Logic JTAG bao gồm tất cả các thành phần logic trong một chip được dùng cho mục đích kiểm tra (test) chip thông qua giao thức JTAG như bộ điều khiển TAP (TAP controller), thanh ghi lệnh, thanh ghi BYPASS, thanh ghi boundary scan, …
  • Logic kiểm tra (test logic) là các thành phần logic dùng cho mục đích kiểm tra chip ngoại trừ bộ điều khiển TAP.
  • Logic hệ thống (system logic) là tất cả các thành phần không phải logic JTAG được dùng để thực thi ứng dụng thông thường của người sử dụng chip.
  • Bus master là thành phần bên ngoài chip kết nối với logic JTAG để điều khiển chip.
  • TAP (Test Access Port) là các chân truy cập logic JTAG gồm 4 hoặc 5 tín hiệu được quy định bởi chuẩn JTAG.
2) Lịch sử phát triển
Vào đầu thập niên 80, đầu những năm 1980, việc kiểm tra bo mạch in (PCB – Printed Circuit Board) ngày càng khó khăn vì các nguyên nhân chính sau đây: 
  • Mạch in nhiều lớp (multi-layer) 
Hình 1: Mạch in nhiều lớp (https://www.theengineeringprojects.com/)
  • Số lượng các vi mạch có số lượng chân lớn ngày càng phổ biến. Khi số lượng chân lớn, dạng đóng gói của các vi mạch này thường là dạng mạng lưới (grid array) như ball grid array hoặc pin grid array.
Hình 2: Chân chip dạng mạng lưới - pin grid array (trái) và ball grid array (phải)
  • Mật độ tích hợp các linh kiện trên một bo mạch ngày càng cao.
Hình 3: Một bo mạch tích hợp số lượng chip lớn
Những điểm trên làm 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.
Hình 4: Kiểm tra kết nối trên bo mạch dùng các đầu dò (probe)
Bên cạnh đó, giai đoạn này, việc kiểm tra một bo mạch phụ thuộc nhiều vào hai phương pháp sau:
  • Bed-of-nails
  • Kiểm tra chức năng (function test)
Hình 5: bed-of-nails (trái) và kiểm tra chức năng bo mạch đã gắn chip (phải)
Bed-of-nails, tạm dịch là “nền/giường đinh”. Phương pháp này kiểm tra bo mạch bằng cắt đặt nó trên một nền (bed) có nhiều “đinh” (nail) nhô lên, “đinh” chính là các đầu dò (probe), tiếp xúc với các điểm kiểm tra trên bo mạch để thực hiện việc kiểm tra.
Hình 6: Minh họa thực tế của phương pháp kiểm tra bo mạch Bed-of-nails
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.
Đồng thời, để đáp ứng nhu cầu truy cập và điều khiển các thành phần hỗ trợ kiểm tra (DFT) trong mạch tích hợp, một giao thức cần phải được định nghĩa.
Năm 1985, tổ chức Joint European Test Action Group (JETAG) đượ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 vấn đề trên. Sau đó, tổ chức này được mở rộng cho các thành viên ở Bắc Mỹ và đổi tên thành Joint Test Action Group (JTAG). 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 đề xuất về dạng chuẩn của boundary scan. Trong năm 1988, những đề xuất cuối cùng, JTAG phiên bản 2.0, được đệ trình lên Ủy ban các Tiêu chuẩn về Bus Kiểm tra của IEEE (IEEE Testability Bus Standards Committee, P1149) để đưa vào danh sách các chuẩn được phát triển và được chấp thuận. 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. Sau quyết định này, Ủy ban kỹ thuật JTAG trở thành hạt nhân chính của nhóm IEEE (IEEE Working Group) phát triển chuẩn này. 
Chuẩn được phê duyệt lần đầu vào tháng 2 năm 1990. Sau đó, nó tiếp tục được chỉnh sửa, nâng cấp và hoàn thiện. Đến tháng 6 năm 1993, chuẩn được chấp nhận với phiên bản IEEE Std 1149.1a-1993. Bản này bổ sung thêm: 
  • Hai lệnh tùy chọn là CLAMP và HIGHZ 
  • Cơ chế cho phép chuyển đổi chế độ hoạt động của một thành phần (component) tương thích chuẩn này sang một cơ chế DFT khác.
Tháng 9 năm 1994, phiên bản IEEE Std 1149.1b-1994 được chấp nhận. Bản 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. 
Ngày nay, phiên bản mới nhất của chuẩn này là IEEE 1149.1-2013 với nhiều đặc điểm mới được thêm vào như: 
  • 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 
  • Phụ lục C về ngôn ngữ mô tả thủ tục PDL (Procedural Description Language), một ngôn ngữ mới ghi lại các yêu cầu về thủ tục và dữ liệu cho các lệnh mới. 
  • Phụ lục D trình bày thêm các ví dụ cho BSDL và PDL khi sử dụng cùng nhau. 
  • Phụ lục E đưa ra một số ví dụ pseudo-code về việc thực thi của lệnh iApply trong PDL, một lệnh phức tập nhất trong các lệnh mới của PDL. 
  • Một số chỉnh sửa bổ sung khác
3) Ứng dụng
Tên gọi JTAG hay giao thức JTAG là cách gọi ngắn gọn lấy theo tên của nhóm tạo ra chuẩn 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 đó, hai nội dung chính được đề cập: 
  • Nội dung về TAP (Test Access Port) 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 chip trên bo mạch in.
JTAG có nhiều ưu điểm như: 
  • Số lượng chân giao tiếp ít (tối đa 5 chân)
  • Hoạt động của giao thức đơn giản làm cho thiết kế phần cứng cũng như lập trình phần mềm đơn giản
  • Tính linh động, cho phép tính hợp nhiều chức năng riêng.
Ngày nay, giao thức JTAG được sử dụng rộng rãi với nhiều mục đích khác nhau như: 
  • Program - Nạp chương trình cho chip 
  • Chip test - Kiểm tra kết nối và hoạt động bên trong chip sau khi chế tạo thông qua việc điều khiển các thành phần DFT của chip 
  • Debug - hoạt động của chip trong quá trình phát triển phần mềm, firmware và software 
  • Connection test - Kiểm tra kết nối khi chip tích hợp trên bo mạch in 
Nội dung tiếp theo chủ yếu tập trung giải thích về hoạt động của TAP, từ đó, giải thích rõ “làm thế nào các chức năng như boundary scan, nạp chương trình và debug có thể tích hợp thông qua giao tiếp TAP?” Tài liệu tham khảo chính là IEEE Std 1149.1-2001. Phiên bản mới nhất là 2013 không được sử dụng vì tác giả không có tài liệu chi tiết về phiên bản này.
4) Hệ thống ứng dụng giao thức JTAG
Hình 7: Hệ thống ứng dụng JTAG
Một hệ thống ứng dụng giao thức JTAG gồm các thành phần cơ bản sau đây:
  • Một phần mềm điều khiển giao thức JTAG cài đặt trên máy tính. Thông qua phần mềm này, người dùng có thể gửi lệnh và dữ liệu đến logic JTAG bên trong chip và đọc dữ liệu mong muốn từ chip. Phần mềm này không điều khiển trực tiếp logic JTAG trong chip mà phải thông qua một phần cứng kết nối giữa máy tính và chip.
Hình 8: Một giao diện phần mềm hỗ trợ debug chip thông qua JTAG
  • Một phần cứng kết nối giữa máy tính và bo gắn chip cần test. Phần cứng này gọi là “bus master” trong IEEE 1149.1. Nó có nhiệm vụ nhận các gói dữ liệu và điều khiển từ phần mềm máy tính thông qua USB, PCI, Ethernet, … và thực thi điều khiển chip thông qua kết nối JTAG
Hình 9: Bus master dùng để debug chip thông qua JTAG
  • Một bo có gắn chip cần test
Hình 10: Bo mạch gắn chip cần test hỗ trợ giao thức JTAG
5) Cấu trúc logic JTAG bên trong chip
Một logic JTAG theo IEEE 1149.1 sẽ gồm các thành phần cơ bản sau:
  1. Một TAP – giao tiếp JTAG
  2. Một TAP controller – bộ điều khiển giao thức JTAG
  3. Một thanh ghi lệnh (Instruction Register - IR)– thanh ghi chứa lệnh (instruction) sẽ được thực thi, lệnh này có thể được quy định trong chuẩn hoặc lệnh do người thiết kế thêm vào để phục vụ mục đích riêng. Số lượng lệnh được thêm vào và chức năng của chúng là không cố định tùy vào thiết kế chip của từng hãng.
  4. Một nhóm các thanh ghi dữ liệu (Data register - DR)– các thanh ghi này bao gồm cả thanh ghi do chuẩn quy định và các thanh ghi do người thiết kế thêm vào phục vụ chức năng riêng. Số lượng thanh ghi được thêm vào và chức năng của chúng là không cố định tùy vào thiết kế của từng chip.
Điểm 3 và 4 giúp giao thức JTAG có tính linh động. Với điểm 3, người thiết kế có thể định nghĩa lệnh riêng. Với điểm 4, người thiết kế có thể tạo nhóm thanh ghi DR riêng.
Hình 11: Cấu trúc cơ bản của logic JTAG trên chip
Hình trên minh họa cấu trúc cơ bản của logic JTAG tích hợp trong một chip. Các thành phần chức năng chính trong cấu trúc này như sau:

  • TAP controller là bộ điều khiển chính nhận các thông tin điều khiển từ các chân TCK, TMS và TRST* (nếu có) và tạo ra các tín hiệu điều khiển cho các thanh ghi lệnh, thanh ghi dữ liệu và các thành phần logic khác.
  • Instruction register (IR) là thanh ghi chứa lệnh của JTAG.
  • Instruction decoder là logic giải mã lệnh chứa trong thanh ghi lệnh và tạo tín hiệu điều khiển các thanh ghi dữ liệu và thành phần logic khác.
  • Data registers (DR) là các thanh ghi dữ liệu gồm:
  • BYPASS register là thanh ghi 1 bit cho phép dịch dữ liệu từ TDI đến TDO sau một chu kỳ TCK.
  • Boundary scan register là thanh ghi dùng để kiểm tra các kết nối trên bo mạch và cho phép truy cập input/output của logic hệ thống (system logic). Logic hệ thống chính là phần lõi chip.
  • DEVICE ID register là thanh ghi lưu các thông tin riêng của chip như mã nhà máy, mã định danh chip, …
  • User register là các thanh ghi tùy chọn khác mà người thiết kế chip có thể thêm vào để phục vụ các chức năng riêng.
Trong các thanh ghi trên thì chỉ có thanh ghi lệnh (IR), thanh ghi BYPASS và thanh ghi boundary scan là các thanh ghi bắt buộc phải có. Các thanh ghi khác chỉ là tùy chọn.
6) TAP - Giao tiếp JTAG
6.1) Mô tả các tín hiệu
Giao tiếp JTAG có tên chính thức là Test Access Port (TAP), gồm 4 tín hiệu bắt buộc:
  • TCK (Test Clock Input) cung cấp clock điều khiển hoạt động của các logic được quy định trong chuẩn IEEE 1149.1. Các logic này bao gồm TAP controller và các thanh ghi bắt buộc mà IEEE 1149.1 quy định. Bên cạnh đó, các thanh ghi tùy chọn mà người thiết kế thêm vào cũng có thể dùng clock này.
  • TMS (Test Mode Select) điều khiển quá trình hoạt động của TAP controller. Cụ thể, TAP controller sẽ giải mã mức logic của tín hiệu này để chuyển đổi giữa các trạng thái hoạt động của FSM. Mỗi trạng thái của FSM trong TAP controller sẽ điều khiển quá trình hoạt động của các thành phần khác.
  • TDI (Test Data Input) ngõ vào nối tiếp của lệnh (instruction) và dữ liệu (data).
  • TDO (Test Data Output) ngõ ra nối tiếp của lệnh (instruction) và dữ liệu (data).
và 1 tín hiệu tùy chọn, có thể có hoặc không:
  • TRST* (Test Reset) là chân reset bất đồng bộ, tích cực mức thấp. Tín hiệu này sẽ làm trạng thái của TAP controller chuyển về TEST_LOGIC_RESET.
Mọi thông tin cấu hình hoạt động, điều khiển và dữ liệu đều được truyền nhận thông qua các các tín hiệu trên.
Các chân tín hiệu này được điều khiển thông qua một “bus master”. Một bus master có thể là một thiết bị test tự động ATE (Automatic Test Equipment) dùng để kiểm tra chip hoặc kết nối của chip trên bo mạch in; một bộ debugger; một bộ điều khiển bus JTAG; ...
Hình 12: Một thiết bị kiểm tra bo mạch in hỗ trợ JTAG (nguồn: SMTnet)
Hình 13: Một debugger kết nối JTAG (nguồn: ARDUINO forum)
Trong các chân tính hiệu trên thì TCK, TMS và TRST* kết nối đến TAP controller. TDI nối trực tiếp đến bit MSB của mỗi thanh ghi. TDO nối trực tiếp đến bit LSB của mỗi thanh ghi.
Trên các chip, các tín hiệu của TAP phải là các chân chức năng độc lập, không được phép tổ hợp với các chân chức năng khác. Để tích hợp được nhiều chức năng trên một chip nhưng tối thiểu hóa số chân chip và hỗ trợ việc làm bo mạch đơn giản, một chân chip có thể được thiết kế để cấu hình các chức năng khác nhau tùy vào ứng dụng cụ thể. Tuy nhiên, các chân dùng cho giao tiếp JTAG không được phép dùng chung với bất kỳ chức năng nào khác.
Hình 14: Một chip của NXP với các IO có thể cấu hình đa chức năng
6.2) Quy định về định thời (timing)
6.2.1) TCK
Clock TCK sẽ giữ cố định mức 0 hoặc 1 trong suốt quá trình bus master rảnh hoặc đang bận xử lý tác vụ khác, chưa thể điều khiển giao tiếp JTAG. Khi clock TCK bị dừng, trạng thái của các thành phần JTAG phải giữ nguyên. Nghĩa là giá trị các thanh ghi (Flip-Flop hoặc Latch) trong JTAG giữ nguyên.
Trong quá trình bus master lái giao tiếp JTAG, clock TCK sẽ có duty cycle là 50%, độ rộng mức 0 và mức 1 bằng nhau.
Cả cạnh lên và cạnh xuống TCK đều được sử dụng trong thiết kế phần cứng JTAG.
Hình 15: Duty cycle của clock
6.2.2) TMS

Tín hiệu này được lấy mẫu tại cạnh lên TCK.
Tín hiệu này phải lái mức 1 nếu không sử dụng hoặc trong suốt quá trình TRST* tích cực.

6.2.3) TDI

Tín hiệu này được lấy mẫu tại cạnh lên TCK.
Tín hiệu này phải lái mức 1 nếu không sử dụng.

6.2.4) TDO

Tín hiệu này được lái theo cạnh xuống TCK.

6.2.5) TRST*

Đây là một tín hiệu tùy chọn dùng để reset bất đồng bộ máy trạng thái của TAP controller về trạng thái TEST_LOGIC_RESET. Sau khi FSM của TAP controller bị reset, các thành phần logic test khác sẽ bị reset theo yêu cầu của TAP controller.
Tín hiệu này chỉ reset logic test, không reset bất cứ logic hệ thống nào.
Tín hiệu này phải giữ mức 1 nếu không sử dụng hoặc không reset.
6.3) Lưu ý quan trọng
Bộ điều khiển JTAG sẽ lấy mẫu các tín hiệu ngõ vào tại cạnh lên clock TCK và lái ngõ ra TDO bằng cạnh xuống clock TCK.
Các chân tín hiệu TMI, TDI và TRST* sẽ được giữ mức 1 nếu không sử dụng.
Hình 16: Quy định về lấy mẫu và lái tín hiệu theo TCK (trái) và kết nối trên chân JTAG (phải)
7) Nguyên lý hoạt động cơ bản của logic JTAG trong chip
Logic JTAG là thành phần thụ động sẽ thực thi các hoạt động theo điều khiển của một bus master. Bus master thực thi hai tác vụ chính sau đây:
  1. Bus master sẽ lái TCK và TMS để điều khiển TAP controller, cụ thể là máy trạng thái trong TAP controller.
  2. Bus master sẽ lái TCK và TDI để dịch từng bit dữ liệu nối tiếp từ TDI vào thanh ghi đang được chọn và từ thanh ghi đang được chọn ra TDO. Hoạt động dịch nối tiếp từng bit vào và ra các thanh ghi còn được gọi là xử lý quét (scan operation).
Thanh ghi được chọn là một trong các thanh ghi sau:
  • Thanh ghi lệnh
  • Thanh ghi BYPASS
  • Thanh ghi DEVICE ID
  • Thanh ghi boundary scan
  • Thanh ghi người dùng
Việc điều khiển logic JTAG tập trung vào việc “làm thế nào bus master có thể nạp và đọc giá trị của các thanh ghi?”. Logic JTAG hỗ trợ một FSM để thực hiện điều này.
Chi tiết về FSM và các waveform ví dụ sẽ được trình bày trong bài kế tiếp.

Tài liệu tham khảo:
1) Test Technology Standards Committee; IEEE Std 1149.1-2001 - IEEE Standard Test Access Port and Boundary-Scan Architecture; 14.Jun.2001
2) Lauterbach GmbH; Training JTAG Interface; 16.Apr.2019
3) ASSET InterTech, Inc; Boundary-scan Tutorial

Lịch sử cập nhật:
1) 2019.11.02 - Tạo lần đầu
2) 2019.11.05 - Thêm hình 4
3) 2019.11.06 - Thêm mô tả 2 phương pháp kiểm tra bo mạch in

1 bình luận: