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