進入 Pentium Probe Mode 世界

˙ 作者:Robert R. Collins ˙ 譯者:張任君 ˙

※文中以藍色標示之文字為譯者之說明,

[Probe mode簡介]

  Pentium 在設計上增加了一種除錯模式稱為探測模式 (Probe mode),這種模
式是用來檢測新設計的主機板以及支援
In-Circuit Emulator(ICE) 的功能。何謂
ICE? 微處理機中附有程式,當這些程式發生問題時,微處理機並不能知道這些程
式跑到哪裡去了,這時就要靠
ICE來模擬微處理機,讓ICE告訴我們問題出在哪裡。

  Probe mode並不能由使用者藉由軟體的操作來致能 (Enable) 或不被致能
(Disable),而是由邊界掃描暫存器(Boundary Scan register)及接腳的組合來達
成的。說清楚一點,這些探測模式暫存器是建立在測試存取埠
(Test Access Port)
中的邊界掃描暫存器中,而且只能經由符合JTAG標準的接腳來EnableDisable

  在Probe mode之下,Pentium可以測試或改變系統的內在及外在狀態。並可進
CPU內部去讀取或更改暫存器的值,或經由CPU產生的 Bus Cycle來讀取或更改
MemoryI/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 ModeEnd Probe ModeBuild Probe Instruction
 Execute Probe InstructionAccess Probe Data Register,以及很
 有可能存在一些
Flush Data CacheFlush Code CasheFlush 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驅動PRDYHIGH告知其已進入探測
           模式,並準備經由測試存取埠來接受
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 RegisterComposePIR可以
完全控制
Pentium的執行單元(u-pipev-pipe),和FPU corePIR的格式在邏輯上
是處於
u-pipev-pipe之間或是v-pipeFPU pipe之間所以兩個指令可以同時
PIR使用。Probemode指令的composed可能需要寫入PIR很多遍,在這樣的情形下,
要改變
PIR的值必須先執行Build Probe Instruction指令才行Composed完全完成
以後
,還要發布Execute Probe Instruction指令才能執行Probe mode指令

[結論]

  Pentium Probe modePentium的雙管架構的關係是非常密切的。Probe mode
供了一個非強制性的方法去讀取或寫入微處理機的任何狀態、
memoryI/O Space
當進入探測模式之後
Pentium就一直維持在一個dormant state,並等候Probe mode
指令,直到離開此模式以後。同樣的,當processor的狀態沒有改變時,離開Probe
mode
也是非強制性的,除非probe mode的指令要求這麼做Probe mode的指令是直
接被送入
v-pipeu-pipeFPU,並由其來composed。指令可用來檢查和改變內部
暫存器
(包含MSR's)。沒有任何的protectionchecks會和探測模式指令運算子衝突
有問題的運算子所造成的結果在此時會呈現不確定狀態
Probe mode由於有非強制
的特性,所以是一個很好的的
hardware-based的除錯方法

[參考書目]


我的電子郵件信箱:b841008@math.ntu.edu.tw