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