本文將介紹四種類型的 JTAG 數據寄存器,分別是:
Boundary Scan Register (BSR) 邊界掃描寄存器
Bypass Register (BR) 旁路寄存器
Device ID Register 設備 ID 寄存器
User Data Register(s) 用戶自定義數據寄存器
在討論邊界掃描寄存器之前,重要的是,讓我們首先了解為什么我們需要邊界掃描寄存器。
圖 1:示例中 PCB 上的 3 片芯片以及它們之間的連接示意圖
假設這么一種情況,我們需要將 3 片由不同廠商開發生產的芯片焊接組裝在同一塊電路板上。這些芯片在出廠時都已經由各自廠商使用自動測試設備( Automatic Test Equipment,ATE)測試通過。
但如果我們在把它們組裝到電路板上之后,它們之間的連接性有可能會出現問題,這種情況下,我們如何發現其中的連接故障?如果只是測試連通性問題,我們沒法將電路板重新送回 ATE 處再次測試其上的所有芯片,因為 ATE 的花費是非常昂貴的。
在圖 1 所示的示例中,Chip 2 的 IO 本身并不是電路板級的 IO,如果出于一些調試原因,我們想通過 Chip 2 的 IO 來訪問 Chip 2,那么我們如何做到這一點?
Boundary Scan Register (BSR) 邊界掃描寄存器
邊界掃描寄存器就是用來解決上述兩個問題的。
如果 3 個芯片都支持 JTAG 訪問以及邊界掃描,那么我們可以控制和觀測任何設備的 IO,即使它們不是板級的 IO。和掃描以及 ATPG (Scan and ATPG)的概念類似,我們可以向 BSR 中移入我們想要的數值,并觀測 BSR 中的結果,來測試芯片之間的連接性。這類測試被稱之為邊界掃描測試。
JTAG 接口允許多個設備以 Daisy Chain 的方式連接到同一個 JTAG 接口上。具體來說,TMS 和 TCK 并行地連接到各個設備上,而 TDI 和 TDO 則以圖 2 之中的串行方式連接。
Note: 我們在系統任何層級中,都只能有一個 TAP (板級/芯片級/IP 模塊級)。因此所有芯片都使用同一個 TAP,而不是每個芯片使用一個專門的 TAP。
圖 2:邊界掃描(圖中橘色的矩形表示的是芯片中的邊界掃描單元)
邊界掃描寄存器 (BSR) 中的寄存器被插在設備的核心邏輯和 IO 引腳之間。在普通運行模式下,這些單元在通路上會被旁路,從而相當于不存在。在測試模式下 BSR 被使能,可以被用于控制 IO 引腳,以及讀取 IO 引腳上當前的數值。
圖 3:BSC 內部結構圖
BSC 支持四種模式,每種模式情況如下表所示。
Bypass Register (BR) 旁路寄存器
旁路寄存器是一個位寬為 1 的寄存器,用于提供一條 TDI 和 TDO 之間的直接通路。這條直接通路的存在可以為電路中器件測試提供最小的測試時間開銷。假設我們在電路板上有多個串行連接的芯片,如圖 4 所示,如果我們想訪問其中單個芯片,比如 Chip2。在沒有旁路寄存器存在的傳統做法中,我們需要將數據移位經過 Chip1 和 Chip3 中所有 BSC,才能訪問 Chip2 中的 BSC,這增加了太多不必要的移位時間開銷。為了避免上述延遲,我們需要旁路 Chip1 和 Chip3 中所有 BSC,這樣數據穿過 Chip1/3 等 JTAG 設備時,每個 JTAG 設備只需要一個時鐘周期延遲。
在上述示例中,具體來看:
如果我們穿過整個 Chip1 和 Chip3,那么需要 12 + 8 + 12 = 32 clocks。
但如果我們旁路 Chip1 和 Chip3,那么只需要 1 + 8 + 1 = 10 clocks。
當需要旁路芯片時,我們需要將 Bypass 寄存器對應的 opcode 加載到指令寄存器中,使指令譯碼器邏輯建立一條只穿過 Bypass 寄存器的旁路 TDI-TDO 路徑。
圖 4:旁路寄存器使用方式示例
Device ID Register 設備 ID 寄存器
ID 寄存器僅用于設備識別。假設我們有多個共享調試接口或者 TAP 的 JTAG 設備。為了確保我們正在訪問正確的調試接口,每個設備的有一個 ID 寄存器,其中的數值(即設備 ID 代碼)是獨一無二的。設備 ID 用于使用戶或者調試工具識別并確認自己訪問的是正確的調試接口。
User Data Register(s) 用戶自定義數據寄存器
這些用戶自定義的寄存器用于在調試時,控制或者觀測核心邏輯中的內部功能寄存器和內部端口,如圖 5 所示。一般來說,通過 JTAG 可以訪問的內部功能寄存器,提供了 JTAG 訪問和正常功能邏輯訪問兩套接口。你可以參照后一節的 JTAG 訪問示例,來了解我們是如何通過用戶數據寄存器來訪問內部功能邏輯寄存器的。
圖 5:如何通過用戶數據寄存器來訪問內部功能邏輯寄存器的示意圖
和指令寄存器類似,用戶數據寄存器中也包括了兩級寄存器,如圖 6 所示。Hold 寄存器保持先前的數據,Shift 寄存器則在不影響當前數據的情況下,逐步移入新的數據。用戶數據寄存器的控制信號來自于 TAP 控制器,具體的控制信號數值取決于當前 FSM 狀態機的狀態,使用戶數據寄存器 Shift 寄存器移入/移出用戶數據(即 Shift-DR 狀態下的串行更新過程),或者使 Shift 寄存器的內容傳遞到 Hold 寄存器中(即 Update-DR 狀態下的并行更新過程)。
值得注意的是,我們可以設計多個用戶數據寄存器,每個寄存器有不同的 opcode。當我們裝填特定的 opcode 到指令寄存器后,對應的用戶數據寄存器才會轉變為可讀可寫,可控制也可以觀測相應的內部功能邏輯。
圖 6:用戶數據寄存器示意圖
編輯:黃飛
?
評論