通過此前一系列文章熟悉 JTAG 架構后,讓我們用一個完整的示例來了解用于 Debug 訪問的 TAP 是如何工作的。
假設這么一個調試場景,我們出于調試需求,需要 JTAG 能夠訪問并修改設計中一個 3 比特位寬的控制信號。在正常的 functional 模式中,該控制信號數值為 3'b111;但出于一些調試目的,我們想要把它改成 3'b100。以下是通過 TAP 實現這一點的過程。
假設設計中的 JTAG 指令寄存器(IR)位寬為 4 比特。
首先我們需要在 JTAG 設計中增加一個 3 比特位寬的用戶數據寄存器(User DR),并將其輸出連接到我們想要修改的控制信號上。接下來,我們為該 User DR 指定一個 opcode,比如 4'b1010(因為 IR 為 4 比特,因此 opcode 同樣為 4 比特)。在設計中添加該 User DR 時,需要將其復位值設定為 3'b111(為什么?復位值對應于該控制信號在 functional 模式中需要的數值,即 3'b111)。
這樣一來,User DR 在任何 JTAG Update 事件更改數值前,將驅動該信號為 3'b111。一般來說,在芯片上電過程中,JTAG 會比其他邏輯更早退出復位狀態,因此,該控制信號能趕在被其驅動的邏輯退出復位之前,確保其數值為所需的 3'b111。
圖 1- 示例的時序圖
圖 1 中的時序圖展示了如何將 User DR 的數值更新為 3‘b100 的過程。該時序圖來自 JTAG 工業標準,其中的 TMS 和 TDI 以及 IR/DR Hold Register 在時鐘下降沿更新數值,而 FSM 狀態以及 IR/DR Hold Register 則在時鐘上升沿跳變數值。
圖 1 中的 16-狀態 FSM 從 Test-Logic Reset 狀態開始工作,通過設置 TMS 的時序使狀態機進入 Shift IR 狀態。
接下來通過 TDI 端口數據寄存器對應的 opcode(4’b1010)移入指令寄存器。shift 和 hold 寄存器的初始值均為復位值 0,4'b1010 由從 LSB 到 MSB 的順序串行地移入指令寄存器中。
通過設置 TMS 的時序使狀態機進入 Update IR 狀態。在 Update IR 狀態中,IR 的 hold 寄存器更新為 Shift 寄存器中的值,指令譯碼器解碼該指令的數值,建立起一條 TDI 和用戶數據寄存器之間的通路。
接下來,FSM 退出 Update IR 狀態,轉移至 Shift DR 狀態,此時串行地向 DR shift 寄存器中移入所需的數值 3'b100,由從 LSB 到 MSB 的順序。在數據 3'b100 完全加載到 Shift 寄存器中后,FSM 跳轉到 Update DR 狀態。在該狀態中,DR hold 寄存器更新為 3'b100,就在此時,需要修改的控制信號數值也從復位值 3’b111 改變為 3'b100。
審核編輯 :李倩
-
寄存器
+關注
關注
31文章
5423瀏覽量
123418 -
JTAG
+關注
關注
6文章
403瀏覽量
72942
原文標題:JTAG Operation 示例
文章出處:【微信號:數字ICer,微信公眾號:數字ICer】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
cc3200 移植file operation 和tcp出現的rtos問題
怎么在Xilinx FPGA上獲得JTAG詳細文檔的最佳位置
JTAG口及其對Flash的在線編程
JTAG先進的功能和系統設計,JTAG Advanced C
什么是jtag接口 jtag接口定義 JTAG ARM

PMU Mode Operation for the MAX

JTAG功能及系統設計

jtag接口是什么_jtag接口定義

ARM的JTAG調試結構
JTAG簡介 JTAG和SWD之間的區別

評論