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

[JTAG] Bài 4 - Thanh ghi lệnh IR

Bài viết này mô tả về cấu trúc thanh ghi lệnh IR (Instruction register) của phần cứng JTAG bên trong chip. Bên cạnh đó, một số điểm thiết kế của phần cứng JTAG thực tế có thể không tuân thủ nghiêm ngặt quy định của chuẩn IEEE 1149.1-2001 cũng được trình bày.

Danh sách bài viết trước đó:

1) Yêu cầu thiết kế đối với IR
Một trong các thành phần quan trọng và bắt buộc phải có của logic JTAG là thanh ghi lệnh IR. IR phải đáp ứng một số yêu cầu về thiết kế đã được quy định trong chuẩn IEEE 1149.1, từ đây về sau gọi tắt là chuẩn IEEE.
IR phải đáp ứng một số yêu cầu theo chuẩn IEEE như sau:
  1. IR là một thanh có khả năng dịch dữ liệu nối tiếp, có đầu vào để nạp giá trị song song.
  2. Lệnh được dịch bên trong IR có thể được lưu lại song song đến một ngõ ra, gọi là ngõ ra song song, khi quá trình dịch kết thúc
  3. Có ít nhất 2 hai phần tử (cell) cơ bản để xử lý được 2 bit. Lý do là để hỗ trợ các lệnh bắt buộc là BYPASS, EXTEST và SAMPLE/PRELOAD. Trước đây, SAMPLE và PRELOAD là hai lệnh độc lập.
  4. Lệnh được dịch trong IR chỉ được chốt lại trong hai trạng thái UPDATE_IR và TEST_LOGIC_RESET
  5. Dữ liệu vào và ra nối tiếp trên IR không được phép đảo thứ tự bit. Nghĩa là, bit nào dịch vào trước trên TDI sẽ được dịch ra trước trên TDO.
  6. IR phải nạp 2 bit LSB là “01” trong trạng thái CAPTURE_IR. Lý do là để giúp phát hiện lỗi kết nối của đường dịch dữ liệu nối tiếp trên bo mạch
2) Yêu cầu về hoạt động của IR
Hoạt động của IR phải tuân theo các yêu cầu bắt buộc sau:
  1. Hành vi IR phải tuân theo bảng phụ thuộc giữa hành vi và trạng thái bộ điều khiển TAP được mô tả trong mục này.
  2. Khi một lệnh mới được nạp đến ngõ ra IR thì hoạt động của lệnh trước đó phải dừng.
  3. IR dịch theo cạnh lên TCK
  4. Ngõ ra song song của IR được cập nhật giá trị theo cạnh xuống TCK
  5. Khi TAP trong trạng thái TEST_LOGIC_RESET, ngõ ra song song của IR phải được nạp giá trị của lệnh IDCODE.Nếu thiết kế không hỗ trợ thanh ghi định danh linh kiện (DEVICE ID), tức không cần hỗ trợ lệnh IDCODE thì IR phải được nạp lệnh BYPASS tại cạnh xuống TCK
  6. Nếu thiết kế JTAG trên chip có hỗ trợ chân TRST_n thì khi tín hiệu này tích cực (logic 0), giá trị lệnh IDCODE hoặc BYPASS sẽ được cập nhật bất đồng bộ đến IR.
Hình 1: Bảng hành vi của IR phụ thuộc vào trạng thái bộ điều khiển TAP
Bảng trên mô tả sự phụ thuộc giữa hành vi của IR vào trạng thái bộ điều khiển TAP. Hành vi được chia làm 2 loại là hành vi của phần ghi dịch (shift-register stage) và hành vi của ngõ ra song song (parallel output).
  • Tầng ghi dịch thực thi việc lấy nối tiếp từng bit dữ liệu từ TDI và truyền từng bit nối đến TDO
  • Ngõ ra song song là thành phần lấy toàn bộ các bit giá trị từ tầng ghi dịch khi tầng này hoàn thành xử lý.
Các vùng màu đỏ (undefined) không định nghĩa cụ thể hoạt động của IR nên người thiết kế có thể tùy ý quyết định. Ví dụ, trong trạng thái TEST_LOGIC_RESET, do hoạt động là “undifined” nên các tầng thanh ghi dịch có thể được reset hoặc không reset hoặc cũng có thể nạp một giá trị nào đó.
Các vùng màu tím là các vùng tích cực. Các cùng còn lại IR chỉ thực thi việc giữ nguyên giá trị của trạng thái trước đó.

3) Mô tả một thiết kế IR 

Một thanh ghi lệnh (IR) đáp ứng các yêu cầu thiết kế và hoạt động đã mô tả trên đây có thể được thiết kế gồm 2 phần là một thanh ghi dịch và một thanh ghi ngõ ra. 
  • Thanh ghi dịch là thanh ghi sẽ kết nối đến TDI và TDO trong suốt quá trình dịch dữ liệu.
  • Thanh ghi ngõ ra là thanh ghi sẽ lưu lại giá trị có trong thanh ghi dịch tại trạng thái UPDATE_IR.
Hình 2: Cấu trúc của thanh ghi lệnh (IR)
Hình trên minh họa cấu trúc của một IR. Các tín hiệu điều khiển IR như reset_n, capture_ir, shift_ir, update_ir TCK_n lấy từ logic của bộ điều khiển TAP đã trình bày trong bài viết số 3. Hoạt động của IR như sau:
  • Trạng thái TEST_LOGIC_RESET: reset_n=0 
    • Thanh ghi dịch không bị reset 
    • Thanh ghi ngõ ra bị reset đến mã lệnh IDCODE hoặc BYPASS nếu IDCODE không được hỗ trợ. 
  • Trạng thái CAPTURE_IR: 
    • capture_ir=1shift_ir=0: Thanh ghi dịch được nạp giá trị “01” cho 2 bit LSB, các bit MSB là giá trị tùy ý 
    • update_ir=0: Thanh ghi ngõ ra không thay đổi giá trị 
  • Trạng thái SHIFT_IR: 
    • shift_ir=1: Thanh ghi dịch nhận nối tiếp từng bit từ TDI vào bit MSB và gửi nối tiếp từng bit từ bit LSB đến TDO tại cạnh lên TCK 
    • update_ir=0: Thanh ghi ngõ ra không thay đổi giá trị 
  • Trạng thái UPDATE_IR: 
    • capture_ir=1shift_ir=0: Thanh ghi dịch giữ nguyên giá trị trước đó 
    • update_ir=1: Thanh ghi ngõ ra nạp giá trị mới từ thanh ghi dịch 
Chi tiết cấu trúc của một phần tử IR (một cell IR) được thể hiện trong hình tiếp theo. Trong đó, một phần tử IR gồm 2 Flip-Flip:
  • Một Flip-Flop thuộc thanh ghi dịch
  • Một Flip-Flop thuộc thanh ghi ngõ ra
Hình 3: Cấu trúc một phần tử (cell) thanh ghi IR
Chi tiết kết nối của các phần tử của IR thể hiện trong hình minh họa dưới đây. Chú ý, các tín hiệu điều khiển lấy từ logic của TAP đã phân tích ở phần trên bài viết. Đường kết nối màu tím là đường dịch dữ liệu từ TDI đến TDO thông qua thanh ghi dịch trong IR.
Hình 4: Kết nối các phần tử (cell) trong IR
4) So sánh phần tử (cell) IR của bài viết và phần tử IR trình bày trong tài liệu IEEE
Cấu trúc của phần tử IR và thanh ghi lệnh IR trình bày trong bài viết khác với cấu trúc của phần tử IR và thanh ghi lệnh IR trong tài liệu IEEE do cách thiết kế các tín hiệu điều khiển của bộ điều khiển TAP khác nhau. Điều này đã trình bày ở bài viết số 3.
Hình 5: Phần tử (cell) của IR trong tài liệu IEEE
Phần tử IR trong tài liệu IEEE cũng có 2 FF, với chứng năng tương tự như phần tử trình bày trong bài viết này nhưng chỉ dùng một MUX vì ClockIR và UpdateIR là hai tín hiệu điều khiển đã được tổ hợp với clock TCK. 
  • ClockIR chỉ đưa TCK đến FF trong trạng thái CAPTURE_IR và SHIFT_IR. Tín hiệu ShiftIR sẽ lựa chọn FF này “capture” hay là “shift”.
  • UpdateIR chỉ cung cấp một cạnh lên cho FF để chốt dữ liệu trong trạng thái UPDATE_IR. Cạnh lên này ứng với cạnh xuống của TCK.
  • Reset*, tương ứng như reset_n, tích cực mức thấp trong trạng thái TEST_LOGIC_RESET để reset FF ngõ ra.
5) Nhận xét về thiết kế bộ điều khiển TAP và thanh ghi IR
Trên thực thế, một số thiết kế bộ điều khiển TAP không tuân thủ nghiêm ngặt quy định trong tài liệu IEEE, dù rằng đó là “rule” và bắt buộc. Những thiết kế này có thể tương thích (compliance) hoặc không tương thích (noncompliance) chuẩn IEEE.
  • Tương thích nếu điểm thiết kế đó chỉ ảnh hưởng đến hoạt động nội bộ của logic JTAG và không tạo ra thêm bất cứ giới hạn nào ngoài chuẩn IEEE. Ví dụ, một bus master tương thích chuẩn kết nối đến TAP có thể điều khiển logic JTAG mà không phải chịu thêm bất cứ điều kiện ràng buộc nào khác ngoài chuẩn quy định.
  • Không tương thích nếu điểm thiết kế đó yêu cầu thêm các quy định ràng buộc ngoài chuẩn thì mới hoạt động được.
Sau đây là một số điểm thiết kế không tuân thủ nghiêm ngặt quy định của IEEE 1149.1 có thể gặp trên các bộ điều khiển TAP thực tế bên trong các chip.
Điểm thứ 1, thanh ghi ngõ ra (hay FF ngõ ra) có thể chốt giá trị bằng cạnh lên của TCK thay vì cạnh xuống. Điều này có thể thực hiện bình thường vì đây là thanh ghi sử dụng nội bộ trong logic JTAG, không sử dụng để giao tiếp trực tiếp với thành phần bên ngoài chip hoặc với các thành phần logic dùng nguồn clock khác TCK, nên có thể hoạt động đồng bộ với các logic cùng sử dụng clock TCK.
Điểm thứ 2, reset của thanh ghi ngõ ra có thể đồng bộ theo clock TCK thay vì phải thay đổi bất đồng đến giá trị IDCODE hoặc BYPASS khi TRST_n mức thấp. Nghĩa là tín hiệu reset_n như đã thiết kế không kết nối trực tiếp đến chân reset bất đồng bộ của thanh ghi ngõ ra mà tổ hợp với ngõ vào của thanh ghi này.
Hình 6: Mạch nguyên lý của 1 cell IR sử dụng reset đồng bộ
Khi sử dụng reset đồng bộ trên IR, một điểm quan trọng cần lưu ý là FSM sẽ rơi vào trạng thái TEST_LOGIC_RESET ngay khi TRST_n=0 nhưng thanh ghi ngõ ra thì không. Nó cần thêm một cạnh tích cực của clock, trong ví dụ hình trên là cạnh lên của TCK_n, thì thanh ghi ngõ ra mới cập nhật mã lệnh IDCODE hoặc BYPASS.
Hình 7: Waveform reset đồng bộ thanh ghi ngõ ra của IR theo TCK_n
Trong hình minh họa trên đây, trạng thái của FSM sẽ chuyển từ một trạng thái “X” đến TEST_LOGIC_RESET ngày khi TRST_n=0 vì nó được reset bất đồng bộ với TCK. Nhưng thanh ghi ngõ ra cần cạnh lên của TCK_n mới được reset về giá trị mã lệnh IDCODE hoặc BYPASS. Như vậy, tồn tại một khoảng thời gian IR chưa được reset dù FSM đã được reset. Nếu khoảng thời gian này được đảm bảo không gây ra các rủi ro nào khác trong hoạt động thông thường của logic JTAG cũng như hệ thống thì thiết kế này được chấp nhận.
Điểm thứ 3, FSM được chèn thêm trạng thái mới. Việc chèn thêm trạng thái mới là để thực thi một quy trình nằm ngoài quy định của chuẩn JTAG. Ví dụ như FSM của bộ điều khiển TAP trên dòng vi điều khiển MSP430 của Texas Instruments (TI). Trong thiết kế của TI, một trạng thái tên “Fuse check” được thêm vào trước tất cả các trạng thái của FSM gốc. Trạng thái này được sử dụng để kiểm tra xem JTAG có được phép truy cập bộ nhớ trong chip hay không.
Hình 8: FSM bộ điều khiển TAP trong chip MSP430 của TI

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) Tesxas Instruments; User’s Guide - MSP430 Programming With the JTAG INterface; May 2019.

Lịch sử cập nhật:
1) 2019.11.09 - Tạo lần đầu

0 bình luận:

Đăng nhận xét