◆
[Probe mode簡介]
Pentium
在設計上增加了一種除錯模式稱為探測模式
(Probe mode),這種模
式是用來檢測新設計的主機板以及支援In-Circuit
Emulator(ICE)
的功能。何謂
ICE? 微處理機中附有程式,當這些程式發生問題時,微處理機並不能知道這些程
式跑到哪裡去了,這時就要靠ICE來模擬微處理機,讓ICE告訴我們問題出在哪裡。
Probe
mode並不能由使用者藉由軟體的操作來致能 (Enable) 或不被致能
(Disable),而是由邊界掃描暫存器(Boundary
Scan register)及接腳的組合來達
成的。說清楚一點,這些探測模式暫存器是建立在測試存取埠(Test
Access Port)
中的邊界掃描暫存器中,而且只能經由符合JTAG標準的接腳來Enable或Disable。
在Probe
mode之下,Pentium可以測試或改變系統的內在及外在狀態。並可進
入CPU內部去讀取或更改暫存器的值,或經由CPU產生的 Bus
Cycle來讀取或更改
Memory和I/O
Space的資料。
在這個模式之下,正常的指令運作會被中斷,Pentium 進入一個潛伏的狀態
(dormant state)。在以前支援有ICE的處理器進入ICE模式時,目標系統並不知道
,所以這些處理器仍然在執行x86
ICE的程式指令,此時的ICE
mode處於交錯運轉
模式,有自己的程式和記憶體空間,就好像 System
Management Mode(SMM)之於
Pentium(SMM主要是用來控制系統的一些配件電源的開關,以達到省電的目的)。但
Pentium Probe Mode卻真正的處於一種靜態的狀況,也就是說,Probe
Mode用來讀
取或更改不管是暫存器、Memory或是I/O
Space的指令,都會被直接送到 Pentium
的執行單元中,而不會經過指令預取(prefetch)(指令預取是CPU在指令還未執行完
時,先去取出下一個指令來解碼,以節省時間)及指令解碼(decode)的階段。
[Probe mode的完成]
Probe
mode的完成必須經由邊界掃描指令集延伸、兩個接腳以及三個或多個的
Probe mode暫存器。
●支援Probe
mode的邊界掃描延伸指令集中包含有下列指令:
Begin Probe Mode、End
Probe Mode、Build
Probe Instruction、
Execute
Probe Instruction、Access
Probe Data Register,以及很
有可能存在一些Flush
Data Cache、Flush
Code Cashe和Flush
Both
Cashe的指令。
( Flush#<快取記憶體作廢>:這是一個輸入訊號,當輸入為LOW時,CPU將其內
部L1
Cache中 Modified
Cache Line寫回到L2
Cache或 Main
Memory,再將L1
CacheLine無效化 )
這些指令在Pentium
邊界掃描指令集摘要中被標示為Private
Instruction。
●支援Probe
mode的兩個接腳:
R/S#<起始或停止>:這是一個輸入訊號,當R/S#為LOW時,CPU完成它正在進行的
的Bus
Cycle後就會進入Idle
State並停止正常運作,以便執
行Probe
mode的指令。
PRDY<探測模式備妥>:這是一個輸出訊號,CPU驅動PRDY為HIGH告知其已進入探測
模式,並準備經由測試存取埠來接受Probe
mode的指令。
這兩個接腳在Pentium
data sheet中有簡單的描述。
●支援Probe
mode的暫存器:
Probe
Instruction Register(PIR)、Probe
Data Register(PDR)、
Probe
Mode Control Register(PMCR),(Probe
Status Register(PSR))
在Probe
Mode時,processor是在潛伏狀態的。指令預取與指令解碼都不會發
生,任何在處理中或等候處理的中斷也會暫停,直到終止探測模式之後才繼續執行
。但有些與記憶體有關的動作在Cache被致能時是可以在探測模式中進行的,比如:
Snoop(監看別顆CPU是否改掉memory的值)、Cache
line filled(當目前所讀或寫的
Data不在Cache中時,Cache
Controller 必須從Main
Memory中讀取整條快取線的
資料並寫入Cache中)和writeback(將結果寫回cache)。
[如何進入與離開
Probe mode]
進入Probe Mode有三種方法,描述如下:
●Processor接受來自邊界掃描指令集的Begin
Probe Mode指令,然後processor就
會立即暫停執行下一個指令,並且去影響PRDY,於是PRDY就會依前述說明動作。
若要離開則要去執行Exit
Probe Mode這個指令,或是藉由外在的硬體強制把R/S#
調成LOW再調成HIGH,這就叫做low-to-high
transition。
●第二種方法是直接去從硬體上去調R/S#,若processor已準備好要接受probe
mode
指令時,就會去調整PRDY。要離開時,必須再從硬體上把R/S#調回HIGH。這是第
二種方法唯一的離開方式,End
Probe Mode指令在這裡並不會生效。
●當除錯中斷發生時,Pentium會自己進入探測模式,如果我們要允許這種情形發生
,就必須將PMCR設定成允許debug
exception發生,這樣的話只要一發生除錯中斷
,就會進入探測模式。Debug
exception的發生,是因為除錯暫存器中斷點被偵測
到(CPU有四個除錯暫存器(指Pentium),當CPU執行指令的位址與其中一個除錯暫
存器相同時,就會因為BP訊號驅動為HIGH而使CPU停止)、一個單步中斷發生、一
個事件轉換發生在一個T-bit被設定的TSS上、DR7.GD=1和除錯暫存器被意圖存取
,或者是除錯中斷指令ICEBP被執行。只要PMCR[0]=1,上述任一種狀況都會促使
Pentium進入探測模式,並且去調整PRDY而準備接受探測模式指令。要離開時,只
要去執行End
Probe Mode指令,或是進行前述第一種方法中的low-to
high tran
-sition。
[Probe mode指令]
Probe
mode的指令都是由Probe
Instruction Register來Compose的。PIR可以
完全控制Pentium的執行單元(u-pipe及v-pipe),和FPU
core。PIR的格式在邏輯上
是處於u-pipe和v-pipe之間,或是v-pipe和FPU
pipe之間,所以兩個指令可以同時
被PIR使用。Probemode指令的composed可能需要寫入PIR很多遍,在這樣的情形下,
要改變PIR的值必須先執行Build
Probe Instruction指令才行。Composed完全完成
以後,還要發布Execute
Probe Instruction指令才能執行Probe
mode指令。
[結論]
Pentium
Probe mode與Pentium的雙管架構的關係是非常密切的。Probe
mode提
供了一個非強制性的方法去讀取或寫入微處理機的任何狀態、memory及I/O
Space。
當進入探測模式之後,Pentium就一直維持在一個dormant
state,並等候Probe
mode
指令,直到離開此模式以後。同樣的,當processor的狀態沒有改變時,離開Probe
mode也是非強制性的,除非probe
mode的指令要求這麼做。Probe
mode的指令是直
接被送入v-pipe、u-pipe和FPU,並由其來composed的。指令可用來檢查和改變內部
暫存器(包含MSR's)。沒有任何的protectionchecks會和探測模式指令運算子衝突,
有問題的運算子所造成的結果在此時會呈現不確定狀態。Probe
mode由於有非強制
的特性,所以是一個很好的的hardware-based的除錯方法。
[參考書目]
我的電子郵件信箱:b841008@math.ntu.edu.tw