專利名稱::高速程序跟蹤的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明一般涉及程序跟蹤,更具體地說,涉及提供數(shù)據(jù)壓縮以輔助高速程序跟蹤的方法和裝置。
背景技術(shù):
:程序跟蹤器提供了跟蹤正在微處理器、數(shù)字信號處理器、有限狀態(tài)機或其它處理器設(shè)備(在此統(tǒng)稱為“處理器”)上運行程序的執(zhí)行序列的能力。典型地,通過維護來自程序計數(shù)器(PC)(例如,與執(zhí)行的程序指令對應(yīng)的地址或地址的表達(dá))的程序計數(shù)值(即程序跟蹤)的日志(log)來跟蹤執(zhí)行序列。為了調(diào)試程序或者另外地對其執(zhí)行進(jìn)行分析,日志可以是機器解釋成文本的格式、圖形格式或者其它人類可讀的格式。程序跟蹤提供了對程序的執(zhí)行序列的動態(tài)視圖。這種視圖可以在改善程序和編譯器的效率或速度、研究程序邏輯、研究編譯用于處理器設(shè)備程序的編譯器的效率或運行的方面上有用。因為程序計數(shù)值對于每個程序指令可以包括16比特或者甚至32比特的地址數(shù)據(jù),并且因為新指令通常在處理器設(shè)備的每個時鐘周期上出現(xiàn),所以,只是通過輸出純程序計數(shù)值來跟蹤程序的方式會很繁重,且將需要大量的物理資源。例如,如果將從在其上面實現(xiàn)跟蹤器的集成電路中輸出每個PC值,則可能需要大量的專用引腳(結(jié)合相關(guān)的電路)。因為除了程序計數(shù)器輸出之外,程序跟蹤器可能復(fù)用程序計數(shù)值以及其它數(shù)據(jù)值(例如,提供了解執(zhí)行序列的數(shù)據(jù)寄存器值),所以可能引起進(jìn)一步的需求。除了物理資源需求之外,大量數(shù)據(jù)的輸出導(dǎo)致了過度的功率需求,以生成用于傳送數(shù)據(jù)所需的信號。因此,為了使用合理數(shù)量的物理資源來獲得程序跟蹤器能力,可以使程序計數(shù)值串行化(即,32比特程序計數(shù)值被緩沖,并以連續(xù)的8比特分段形式輸出)和可以實現(xiàn)壓縮方案。例如,在這些方案中,因為最普通的程序流事件是指令的序列執(zhí)行(即,程序計數(shù)值根據(jù)每個接續(xù)的指令而遞增1來至下一行的程序“編碼”),所以程序跟蹤器輸出表示程序計數(shù)值中的單個遞增已發(fā)生的值,而不是輸出整個程序計數(shù)值。此外,在不連續(xù)的情況中,程序跟蹤器輸出位移值;即,程序跟蹤器提供表示不連續(xù)執(zhí)行之前的程序計數(shù)器值(也稱為不連續(xù)來源程序計數(shù)器值)與不連續(xù)執(zhí)行之后的程序計數(shù)器值(也稱為不連續(xù)目的程序計數(shù)器值)之間的符號差分(signeddifference)的標(biāo)示,而不是提供不連續(xù)執(zhí)行之后的純程序計數(shù)值。術(shù)語“不連續(xù)”在此定義為在程序中具有非連續(xù)程序計數(shù)值的指令的執(zhí)行;例如,不連續(xù)可能由于跳轉(zhuǎn)、調(diào)用或分支的執(zhí)行而引起。雖然這種程序跟蹤器能力可以降低用于跟蹤程序執(zhí)行所需的數(shù)據(jù),但是,傳統(tǒng)壓縮方案會引起了數(shù)據(jù)的丟失,因而造成了不完整的程序跟蹤。因為程序跟蹤器所輸出的數(shù)據(jù)量是過量的,所以可能發(fā)生數(shù)據(jù)丟失。例如,由于數(shù)據(jù)量的原因,可能致使諸如串行化緩沖器的內(nèi)部緩沖器出現(xiàn)溢出。因此,需要在指定用于跟蹤的資源與數(shù)據(jù)丟失的可接受水平之間尋求一種折衷方案。所需要的是一種具有改善的壓縮方案的程序跟蹤器,以提供較低的數(shù)據(jù)丟失實例。此外,所需的是一種具有降低的物理資源需求和降低的功率需求的程序跟蹤器。發(fā)明概述根據(jù)本發(fā)明的各個方面的程序跟蹤器提供了相對較高的壓縮因子。本發(fā)明的一些方面涉及提供了線性遞增運行長度和循環(huán)壓縮的程序跟蹤器。本發(fā)明的第一方面是一種用于跟蹤在處理器上執(zhí)行程序的執(zhí)行序列的程序跟蹤器,該處理器帶有用于在執(zhí)行程序時為程序指令保留程序指令計數(shù)值的程序計數(shù)器,程序跟蹤器包含程序計數(shù)定序器,其在操作中連接至程序計數(shù)器,以接收來自程序計數(shù)器的當(dāng)前程序計數(shù)值,以及還接收程序中的關(guān)于不連續(xù)的通知,程序計數(shù)定序器進(jìn)行響應(yīng)而生成當(dāng)前不連續(xù)目的計數(shù)值;以及線性遞增發(fā)生器模塊,其在操作中連結(jié)至程序計數(shù)定序器,以接收當(dāng)前程序計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值,以及響應(yīng)于程序中的關(guān)于不連續(xù)的通知而計算線性遞增運行長度和選擇性地提供線性遞增運行長度值。在一些實施例中,程序跟蹤器進(jìn)一步包含位移發(fā)生器模塊,其在操作中連結(jié)至程序計數(shù)定序器,以接收當(dāng)前程序計數(shù)值和先前程序計數(shù)值,以及進(jìn)行響應(yīng)而計算位移值。可選地,位移發(fā)生器模塊響應(yīng)于程序中的關(guān)于不連續(xù)的通知而選擇性地提供位移值。本發(fā)明的第二方面是一種用于跟蹤在處理器上執(zhí)行程序的執(zhí)行序列的程序跟蹤器,該處理器帶有用于在執(zhí)行程序時為程序指令保留程序指令計數(shù)值的程序計數(shù)器,程序跟蹤器包含程序計數(shù)定序器,其用于接收用于接收來自程序計數(shù)器的當(dāng)前程序計數(shù)值和保留先前程序計數(shù)值,以及確定當(dāng)前不連續(xù)來源計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值;以及循環(huán)計數(shù)模塊,其連結(jié)至程序計數(shù)定序器,以接收當(dāng)前不連續(xù)來源計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值,以及保留第一先前不連續(xù)來源計數(shù)值和第一先前不連續(xù)目的計數(shù)值,以及通過把當(dāng)前不連續(xù)來源計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值與第一先前不連續(xù)來源計數(shù)值和第一先前不連續(xù)目的計數(shù)值進(jìn)行比較,來對至少第一循環(huán)的循環(huán)執(zhí)行進(jìn)行計數(shù)。本發(fā)明的第三方面是一種用于跟蹤在處理器上執(zhí)行程序的執(zhí)行序列的方法,其中,該處理器帶有用于在執(zhí)行程序時為程序指令保留程序指令計數(shù)值的程序計數(shù)器,該方法包含響應(yīng)于關(guān)于不連續(xù)的通知而生成當(dāng)前不連續(xù)目的計數(shù)值;以及根據(jù)當(dāng)前不連續(xù)目的值和當(dāng)前程序計數(shù)值,計算線性遞增運行長度。跟蹤執(zhí)行序列的方法可以進(jìn)一步包含響應(yīng)于程序中的關(guān)于不連續(xù)的通知而選擇性地提供線性遞增運行長度值。本發(fā)明的第四方面是一種用于跟蹤在處理器上執(zhí)行程序的執(zhí)行序列的方法,該處理器帶有用于在執(zhí)行程序時為程序指令保留程序指令計數(shù)值的程序計數(shù)器,該方法包含確定當(dāng)前不連續(xù)來源計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值;以及通過把當(dāng)前不連續(xù)來源計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值與第一先前不連續(xù)來源計數(shù)值和第一先前不連續(xù)目的計數(shù)值進(jìn)行比較,來對至少第一循環(huán)的循環(huán)執(zhí)行進(jìn)行計數(shù)。附圖的簡要說明現(xiàn)在將參考附圖通過示例對本發(fā)明的示出性而非限制性的實施例進(jìn)行描述,在附圖中,不同附圖中的相同參考數(shù)字用于表示相同的組件。在附圖中圖1是程序跟蹤器系統(tǒng)和執(zhí)行將被跟蹤的程序的處理器的功能性框圖;圖2是根據(jù)本發(fā)明的至少一些方面的程序跟蹤器的示例性實施例的功能性框圖;圖3是結(jié)合適用于根據(jù)本發(fā)明的程序跟蹤器使用的壓縮方案的一個示例而使用的編碼值的表;圖4是根據(jù)本發(fā)明的至少一些方面的程序跟蹤器的示例性實施例的示意性框圖;圖5A是含有示例性壓縮數(shù)據(jù)結(jié)構(gòu)的緩沖器的示意性示出;以及圖5B示出了包括集成數(shù)據(jù)結(jié)構(gòu)的存儲器。詳細(xì)描述圖1是程序跟蹤器系統(tǒng)100和執(zhí)行將被跟蹤程序的處理器150的功能性框圖。處理器150可以是任何設(shè)備,其能夠執(zhí)行程序指令且?guī)в杏糜诒A絷P(guān)于所執(zhí)行的程序指令的程序計數(shù)值(例如,與所執(zhí)行的程序指令對應(yīng)的地址或地址的表達(dá))的程序計數(shù)器(PC)152。例如,處理器150可以是微處理器、數(shù)字信號處理器或者有限狀態(tài)機。優(yōu)選地,處理器150生成關(guān)于不連續(xù)的通知156,以表示程序執(zhí)行中的不連續(xù)。例如,對程序執(zhí)行中的不連續(xù)的通知可以在執(zhí)行中斷、分支、調(diào)用、返回指令或零開銷硬件循環(huán)的時候生成。另一種選擇是,程序跟蹤器110或者另一資源能夠把緊靠前面的PC值與當(dāng)前PC值進(jìn)行比較,以檢測和信號通知不連續(xù)。程序跟蹤器系統(tǒng)100包括程序跟蹤器110,以接收來自程序計數(shù)器152的當(dāng)前程序計數(shù)值154和關(guān)于不連續(xù)的通知156。當(dāng)前程序計數(shù)值154可以為任意長度m(例如16比特或32比特)。如下面所更加詳細(xì)的描述,程序跟蹤器110生成程序跟蹤的壓縮輸出111,其包括一個或多個位移值112和一個或多個線性遞增運行長度值113。可選地,可以包括數(shù)據(jù)控制器120,以允許程序跟蹤器系統(tǒng)100輸出補充數(shù)據(jù)153,其可以與壓縮輸出111一起被復(fù)用。例如,補充數(shù)據(jù)153可以包括在執(zhí)行被跟蹤程序期間由處理器150生成的定時信息或數(shù)據(jù)值??梢蕴峁┐鎯ζ髟O(shè)備130來存儲輸出114,以及包括輸出設(shè)備140來啟動對輸出114的分析??梢蕴峁┙鈮嚎s器145來對壓縮輸出114進(jìn)行解壓縮,從而重構(gòu)所執(zhí)行的指令的序列。展示(Presentation)設(shè)備140可以是諸如陰極射線管或液晶顯示屏的顯示設(shè)備、打印設(shè)備或者任何其它的展示設(shè)備。典型地,輸出114具有比程序計數(shù)值154長度m(例如32比特)短的長度n(例如8比特)。長度的減小可能是由于壓縮以及數(shù)據(jù)的串行化而引起的。圖2是根據(jù)本發(fā)明的至少一些方面的程序跟蹤器110的示例性實施例的功能性框圖。程序跟蹤器110包括程序計數(shù)定序器212、位移發(fā)生器模塊220、線性遞增發(fā)生器模塊230和循環(huán)計數(shù)模塊240。“程序計數(shù)值”在此也稱為“計數(shù)值”或“PC值”。程序計數(shù)定序器212接收來自程序計數(shù)器152(如圖1所示)的當(dāng)前PC值154和關(guān)于不連續(xù)的通知156,并且提供當(dāng)前程序計數(shù)值154、先前PC值214、當(dāng)前不連續(xù)目的PC值216和當(dāng)前不連續(xù)來源PC值218。當(dāng)前不連續(xù)目的PC值216和當(dāng)前不連續(xù)來源PC值218分別指最接近當(dāng)前的不連續(xù)的不連續(xù)來源PC值和不連續(xù)目的PC值。線性遞增發(fā)生器模塊230在操作中被連結(jié)至程序計數(shù)定序器212,以接收先前程序計數(shù)值214和當(dāng)前不連續(xù)目的程序計數(shù)值216,并且包括線性線性遞增發(fā)生器232,以計算線性遞增運行長度值238。詞組“線性遞增運行長度值”在此定義為等于在最接近當(dāng)前的不連續(xù)和先前的不連續(xù)之間所執(zhí)行的程序指令數(shù)。應(yīng)當(dāng)理解,結(jié)合已知PC值的線性遞增運行長度值形成一部分程序跟蹤的壓縮表達(dá)??梢园ň€性遞增壓縮器234來壓縮線性遞增運行長度值238。如下所述,根據(jù)遞增運行長度值238的量值(magnitude),線性遞增壓縮器234提供所選擇的數(shù)據(jù)字?jǐn)?shù)來表達(dá)線性遞增運行長度值??蛇x地,壓縮器234可以使線性遞增運行長度值串行化。此外,線性遞增壓縮器234可以提供與線性遞增運行長度值中的所選擇的數(shù)據(jù)字?jǐn)?shù)對應(yīng)的字計數(shù)263??蛇x地,緩沖器236可以被連結(jié)至線性遞增發(fā)生器模塊230的輸出,以暫時存儲線性遞增運行長度值238。例如,緩沖器236可以是先進(jìn)先出(FIFO)緩沖器。線性遞增運行長度值238可以在緩沖器236中累加,例如,由于壓縮器234對數(shù)據(jù)的串行化或者因為在程序跟蹤器中包括數(shù)據(jù)控制器120(如上面圖1所示),因此當(dāng)較高優(yōu)先權(quán)數(shù)據(jù)經(jīng)由數(shù)據(jù)控制器120輸出時,需要緩沖線性遞增運行長度值238。在一些實施例中,線性遞增發(fā)生器模塊230計算線性遞增運行長度值,作為對從程序計數(shù)定序器212接收到的每個先前程序計數(shù)值214的輸出。即,對于每個當(dāng)前程序值,線性遞增值增加1。但是,因為只有在不連續(xù)的時候存在的線性遞增運行長度值是保留精確程序跟蹤所需的,所以在程序跟蹤器110的一些實施例中,向線性遞增模塊230提供了關(guān)于不連續(xù)的通知156,以允許線性遞增模塊230響應(yīng)于對程序中的不連續(xù)的通知來選擇性地提供線性遞增運行長度值。關(guān)于不連續(xù)的通知156可以在很多方式中使用,以防止線性遞增模塊230在不存在關(guān)于不連續(xù)的通知的時候提供線性遞增運行長度值。例如,緩沖器236可以被配置成只在收到關(guān)于不連續(xù)的通知156的時候存儲運行長度值,從而丟棄其它線性遞增運行長度值。位移發(fā)生器模塊220包括位移發(fā)生器222且在操作中連結(jié)至程序計數(shù)定序器212,以接收當(dāng)前程序計數(shù)值154和先前程序計數(shù)值214。通過計算當(dāng)前程序計數(shù)值154和先前程序計數(shù)值214之間的差,位移發(fā)生器222計算出與處理器150(如上面圖1所示)所執(zhí)行程序的指令執(zhí)行序列對應(yīng)的位移值228。在程序跟蹤器110的一些實施例中,位移發(fā)生器模塊220為從程序計數(shù)定序器212接收的每個當(dāng)前程序計數(shù)值154來計算位移值。但是,因為只有在不連續(xù)的時候存在的位移值是保留精確程序跟蹤所需的,所以在程序跟蹤器110的一些實施例中,向位移發(fā)生器模塊220提供了關(guān)于不連續(xù)的通知信號154,以響應(yīng)于對程序中的不連續(xù)通知而選擇性地提供位移值228。即,如果已收到關(guān)于不連續(xù)的通知,則位移值228只從位移發(fā)生器模塊220中輸出。關(guān)于不連續(xù)的通知154可以在很多方式中使用,以防止位移發(fā)生器模塊220在不存在關(guān)于不連續(xù)的通知的時候提供位移值。例如,緩沖器226可以被配置成只在收到關(guān)于不連續(xù)的通知256的時候存儲位移值,可以防止壓縮器224提供輸出。另一種選擇是,可以防止復(fù)用器270發(fā)送位移值??梢园ㄎ灰茐嚎s器224來壓縮位移值228。如下所述,位移壓縮器224根據(jù)位移值228的量值來提供所選擇的數(shù)據(jù)字?jǐn)?shù)??蛇x地,位移壓縮器224可以使位移數(shù)串行化據(jù)。此外,位移壓縮器224可以提供與所選擇的數(shù)據(jù)字?jǐn)?shù)對應(yīng)的字計數(shù)262??蛇x地,緩沖器226可以被連結(jié)至位移發(fā)生器模塊220的輸出,以暫時存儲位移值228。例如,緩沖器226可以是先進(jìn)先出(FIFO)的。位移值228可以在緩沖器226中累加,例如,由于壓縮器224對數(shù)據(jù)的串行化或者因為在程序跟蹤器中包括數(shù)據(jù)控制器120(如上面圖1所示),因此當(dāng)較高優(yōu)先權(quán)數(shù)據(jù)經(jīng)由數(shù)據(jù)控制器120輸出時,需要緩沖位移值228。如下面參考圖5所描述,典型地,數(shù)據(jù)控制器120(可從圖1中看到)從緩沖器226和236中成對地讀取位移值228和線性遞增運行長度值238,其包括一個位移值和一個對應(yīng)的線性遞增運行長度值??蛇x地,可以向位移發(fā)生器模塊220提供信號226,信號226表示給定的不連續(xù)是由帶有結(jié)合有固定程序計數(shù)器值的目的地址的指令(例如,帶有已知目的地址(帶有已知程序計數(shù)器值)的跳轉(zhuǎn)或調(diào)用)而生成;在收到信號226時,可以消除(suppress)位移值,且壓縮器224可以在輸出228上提供空值(即下面圖3所示的302)。在一些實施例中,數(shù)據(jù)控制器120忽略空值,使得沒有浪費時間在處理這個空值上。本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,重構(gòu)程序執(zhí)行序列包括這種被消除的位移值,必須為程序給出參考,以確定合適的位移值。循環(huán)計數(shù)模塊240至少包括內(nèi)循環(huán)計數(shù)器242。循環(huán)計數(shù)模塊240被連結(jié)至程序計數(shù)定序器212,以接收當(dāng)前不連續(xù)來源計數(shù)值218和當(dāng)前不連續(xù)目的計數(shù)值216。另外,循環(huán)計數(shù)模塊240保留第一先前不連續(xù)來源計數(shù)值245和第一先前不連續(xù)目的計數(shù)值246。通過把當(dāng)前不連續(xù)來源計數(shù)值218和當(dāng)前不連續(xù)目的計數(shù)值216與第一先前不連續(xù)來源計數(shù)值245和第一先前不連續(xù)目的計數(shù)值246進(jìn)行比較,循環(huán)計數(shù)器242對至少第一循環(huán)的循環(huán)執(zhí)行進(jìn)行計數(shù)。在確定當(dāng)前不連續(xù)來源計數(shù)值218和當(dāng)前不連續(xù)目的計數(shù)值216分別等于第一先前不連續(xù)來源計數(shù)值245和第一先前不連續(xù)目的計數(shù)值246時,計數(shù)寄存器249進(jìn)行遞增。可選地,循環(huán)計數(shù)模塊240可以包括外循環(huán)計數(shù)器243,以對第二循環(huán)的循環(huán)執(zhí)行進(jìn)行計數(shù)。在帶有外循環(huán)計數(shù)器243的實施例中,循環(huán)計數(shù)器模塊240保留第二先前不連續(xù)來源計數(shù)值247和第二先前不連續(xù)目的計數(shù)值248。在確定當(dāng)前不連續(xù)來源計數(shù)值218和當(dāng)前不連續(xù)目的計數(shù)值216分別等于第二先前不連續(xù)來源計數(shù)值247和第二先前不連續(xù)目的計數(shù)值248時,計數(shù)寄存器241進(jìn)行遞增。雖然只對內(nèi)循環(huán)計數(shù)器和外循環(huán)計數(shù)器進(jìn)行了討論,但是帶有多于兩個循環(huán)計數(shù)器的程序跟蹤器也處于本發(fā)明的范圍之內(nèi)??梢园▋?nèi)循環(huán)計數(shù)壓縮器244和/或外循環(huán)壓縮器254,以分別壓縮內(nèi)循環(huán)計數(shù)和外循環(huán)計數(shù)。內(nèi)循環(huán)計數(shù)壓縮器244和外循環(huán)計數(shù)壓縮器254可以根據(jù)循環(huán)計數(shù)248的量值而提供所選擇的數(shù)據(jù)字?jǐn)?shù)。此外,循環(huán)計數(shù)壓縮器244和254提供字計數(shù)251和245,每個均分別與內(nèi)循環(huán)計數(shù)和外循環(huán)計數(shù)中的數(shù)據(jù)字?jǐn)?shù)對應(yīng)。如下面參考圖4所描述,使用復(fù)用器270和272,內(nèi)循環(huán)計數(shù)和外循環(huán)計數(shù)可以分別存儲緩沖器226和236中。復(fù)用器272用于在緩沖器260中存儲字計數(shù)262、263、245和251中的每一個。圖3是結(jié)合適用于根據(jù)本發(fā)明的程序跟蹤器使用的壓縮方案的一個示例而使用的編碼值的表。編碼值304、308和310可以用于對線性遞增值進(jìn)行編碼。在示例性壓縮方案中,根據(jù)線性遞增值的量值,所選擇的字?jǐn)?shù)用于表達(dá)線性遞增值。前綴(prefix)304a、308a和310a存在于每個編碼值304、308和310中,每個前綴均表達(dá)字?jǐn)?shù),該字?jǐn)?shù)表達(dá)線性遞增值。符號比特308b和310b也存在于每個編碼值308和310中。編碼值306、308、310和312可以用于對位移值進(jìn)行編碼。在示例性壓縮方案中,根據(jù)位移值的量值,所選擇的字?jǐn)?shù)用于表達(dá)位移值。前綴306a、308a、310a和312a存在于每個編碼值306、308、310和312中。這些前綴表達(dá)字?jǐn)?shù),該表達(dá)線性遞增值。符號比特306b、308b、310b和312b存在于每個編碼值306、308、310和312中;因為不連續(xù)可能是正的不連續(xù)或者負(fù)的不連續(xù),所以符號比特用于表示正或負(fù)不連續(xù)方向性。編碼值318和320可以用于分別表達(dá)內(nèi)循環(huán)計數(shù)值和外循環(huán)計數(shù)值。在示出的示例性壓縮方案中,使用固定的字計數(shù)(即,沒有提供壓縮);但是,應(yīng)當(dāng)理解,可以提供循環(huán)計數(shù)壓縮。例如,類似于上述的壓縮方案,根據(jù)循環(huán)計數(shù)的量值,可以使用所選擇的字?jǐn)?shù)來表達(dá)循環(huán)計數(shù)值。如果計數(shù)為零或者在如上所述位移值被消除的情況中,可以使用編碼值302(在此也稱為空值)。在位移消除的情況中,編碼值302可以由壓縮器224輸出,因為在如下面所討論的一些實施例中,位移值和線性遞增值可以由數(shù)據(jù)控制器120(如上面圖1所示)成對地交替輸出;因此,編碼值302操作為占位符。在一些實施例中,編碼值302由數(shù)據(jù)控制器120識別,并被丟棄而沒有被發(fā)送。除了壓縮值之外,壓縮器224、234、244和254可能需要提供純程序計數(shù)器值。例如,在位移值或線性遞增運行長度值太大的情況中(例如,位移發(fā)生器模塊220或線性遞增發(fā)生器模塊230中的寄存器被致使溢出),對應(yīng)的壓縮器224和234輸出包含純PC值的編碼值314。同樣,在緩沖器226和236中的一個發(fā)生溢出的情況中,對應(yīng)的壓縮器224和234輸出包括純PC值的編碼值314。同樣,除了示出的編碼值之外,還可以提供其它編碼值,每個均與來自附加來源的輸出(即圖1中的信號153)對應(yīng)。與這種輸出對應(yīng)的編碼值允許展示設(shè)備140識別并響應(yīng)這些值。圖4是根據(jù)本發(fā)明的至少一些方面的程序跟蹤器110的示例性實施例的示意性框圖。程序跟蹤器110包括程序計數(shù)定序器212、位移發(fā)生器模塊220、線性遞增發(fā)生器模塊230和循環(huán)計數(shù)模塊240。程序計數(shù)定序器212接收來自程序計數(shù)器152(如圖1所示)的當(dāng)前程序計數(shù)值154和關(guān)于不連續(xù)的通知156。當(dāng)前PC值154被諸如觸發(fā)器(flip-flop)的延時設(shè)備414延時一個時鐘周期并由其保留,以提供先前程序計數(shù)值114。應(yīng)當(dāng)理解,當(dāng)前PC值不必需是與正由執(zhí)行被跟蹤程序的處理器來執(zhí)行的當(dāng)前程序指令對應(yīng)的PC值402。例如,正被執(zhí)行的當(dāng)前程序指令的PC值402可以被延時設(shè)備405延時。但是,先前PC值114應(yīng)當(dāng)是存在于當(dāng)前PC值154的前一個時鐘周期的PC值;且關(guān)于不連續(xù)的通知156應(yīng)當(dāng)被延時的時間量應(yīng)當(dāng)?shù)扔诋?dāng)前PC值154相對于PC值402而被延時的時間量。程序計數(shù)定序器212通過把當(dāng)前程序計數(shù)值154和關(guān)于不連續(xù)的通知156輸入邏輯“與”設(shè)備416(例如“與”門)中來生成當(dāng)前不連續(xù)目的PC值118。程序計數(shù)定序器212通過把先前程序計數(shù)值114和關(guān)于不連續(xù)的通知256輸入邏輯“與”設(shè)備419中來生成當(dāng)前不連續(xù)來源計數(shù)值116。邏輯“與”設(shè)備415和延時設(shè)備418操作來提供先前不連續(xù)目的值413至線性遞增發(fā)生器模塊230。線性遞增發(fā)生器模塊230接收先前程序計數(shù)值114和先前不連續(xù)目的計數(shù)值413,并且包括差分設(shè)備432,以通過計算先前程序計數(shù)值114和先前不連續(xù)目的計數(shù)值413之間的差來計算出線性遞增運行長度值。線性遞增發(fā)生器模塊230可以包括壓縮器434。壓縮器434可以使用任何合適的壓縮方案(其中幾種方案在本
技術(shù)領(lǐng)域:
中是已知的),以減少提供線性遞增運行長度值438所需的總比特數(shù)。例如,壓縮器434可以使用如上面參考圖3所討論的壓縮方案。使用任何已知方法,根據(jù)所選擇的壓縮方案,由差分設(shè)備432計算的線性遞增運行長度值可以被轉(zhuǎn)換成編碼值304、308和310。例如,可以使用查找表(look-uptable)來提供編碼值;另一種選擇是,根據(jù)差分的量值,可以把合適的報頭附加到差分設(shè)備432的輸出上。在一些實施例中,最多三個字是可能的;但是,由于報頭和符號數(shù)據(jù)比特的原因,則可用最多19比特來表示線性遞增運行長度值(即最大線性遞增運行長度值量值是219)。在差分設(shè)備的輸出的量值超過219的情況中,壓縮器434提供與絕對PC值對應(yīng)的編碼值314(如圖3所示)。如上所討論,在一些情況中,壓縮器434提供與線性遞增運行長度值438中的字?jǐn)?shù)對應(yīng)的字計數(shù)439。如下面參考圖5所討論,數(shù)據(jù)控制器120可以使用字計數(shù)來協(xié)調(diào)被壓縮的跟蹤序列的輸出。位移發(fā)生器模塊220接收先前程序計數(shù)值114和當(dāng)前程序計數(shù)值254,并且包括差分設(shè)備422,其通過計算先前程序計數(shù)值114和當(dāng)前程序計數(shù)值154之間的差來計算出位移值428。位移發(fā)生器模塊220可以包括壓縮器424。壓縮器424可以使用任何壓縮方案,以減少提供位移值428所需的總比特數(shù)。例如,壓縮器424可以使用如上面參考圖3所討論的壓縮方案。使用任何已知方法,根據(jù)圖3所示的壓縮方案,由差分設(shè)備422計算的位移值可以被轉(zhuǎn)換成編碼值306、308、310和312;例如,可以使用查找表來提供編碼值;另一種選擇是,根據(jù)差分的量值,可以把合適的報頭附加到差分設(shè)備422的輸出上。在一些實施例中,最多四個字是可能的;但是,由于報頭和符號數(shù)據(jù)比特的原因,可用最多25比特來表示差分(即最大差分量值是225)。在差分設(shè)備的輸出的量值超過225的情況中,壓縮器424提供與絕對PC值對應(yīng)的編碼值314(如圖3所示)。如上所討論,在一些實施例中,壓縮器424提供與輸出428中的字?jǐn)?shù)對應(yīng)的字計數(shù)429。如下面參考圖5所討論,數(shù)據(jù)控制器120可以使用字計數(shù)來協(xié)調(diào)被壓縮的跟蹤序列的輸出。循環(huán)計數(shù)模塊包括含有至少第一先前不連續(xù)來源計數(shù)值444和第一先前不連續(xù)目的計數(shù)值445的存儲器422(例如2×nFIFO緩沖器)。在示出的示例性實施例中,存儲器是2×2FIFO緩沖器,因此,它還包括第二先前不連續(xù)來源計數(shù)值446和第二先前不連續(xù)目的計數(shù)值447。應(yīng)當(dāng)理解,存儲器442可以是包含任何數(shù)目的先前不連續(xù)來源計數(shù)值和第一先前不連續(xù)目的計數(shù)值的存儲器(例如2×nFIFO緩沖器)。如圖所示,通過使用比較器448和449,循環(huán)計數(shù)器模塊240把由程序計數(shù)定序器212生成的每個先前程序來源計數(shù)值114和當(dāng)前程序計數(shù)值154分別與第一先前不連續(xù)來源計數(shù)值444和第一先前不連續(xù)目的計數(shù)值445進(jìn)行比較。如果先前程序計數(shù)值114等于第一先前不連續(xù)來源計數(shù)值444且當(dāng)前程序計數(shù)值154等于第一先前不連續(xù)目的計數(shù)值445,則如“與”設(shè)備452所表示,內(nèi)循環(huán)計數(shù)器454進(jìn)行遞增。在一些實施例中,內(nèi)循環(huán)計數(shù)器454經(jīng)由復(fù)用器480提供內(nèi)循環(huán)計數(shù)至緩沖器226(如圖2所示)。此外,內(nèi)循環(huán)計數(shù)器454經(jīng)由復(fù)用器482提供字計數(shù)至緩沖器260(如圖2所示)。在一些示例中,內(nèi)循環(huán)計數(shù)器454根據(jù)如圖3所示的編碼值318來生成前綴。在圖3示出的壓縮方案中,沒有對內(nèi)循環(huán)計數(shù)器值進(jìn)行壓縮(例如,用于內(nèi)循環(huán)計數(shù)值的編碼值的字計數(shù)沒有與內(nèi)循環(huán)值的量值相關(guān));因此,可以通過硬連線生成根據(jù)如圖3所示方案的內(nèi)循環(huán)計數(shù)器值,使得前綴被附加到計數(shù)值上。另一種選擇是,可以使用查找表或任何其它合適的方法來生成根據(jù)如圖3所示方案的編碼值。雖然如圖3所示的方案沒有對循環(huán)計數(shù)值進(jìn)行壓縮,但是包含循環(huán)值壓縮的壓縮方案也處于本發(fā)明的范圍之內(nèi);并且應(yīng)當(dāng)理解,可以類似于壓縮器224或234(如圖2所示)的循環(huán)壓縮器也應(yīng)合并進(jìn)來。類似地,通過使用比較器451和452,循環(huán)計數(shù)器模塊440把由程序計數(shù)定序器212生成的每個先前程序計數(shù)值114和當(dāng)前程序計數(shù)值154分別與第二先前不連續(xù)來源計數(shù)值446和第二先前不連續(xù)目的計數(shù)值447進(jìn)行比較。如果先前程序計數(shù)值114等于第二先前不連續(xù)來源計數(shù)值446且當(dāng)前程序計數(shù)值254等于第二先前不連續(xù)目的計數(shù)值447,則如“與”設(shè)備453所表示,表示為外循環(huán)執(zhí)行。因此,外循環(huán)計數(shù)器455進(jìn)行遞增。在一些實施例中,外循環(huán)計數(shù)器455經(jīng)由復(fù)用器481提供外循環(huán)計數(shù)至緩沖器236(如圖2所示)。此外,外循環(huán)計數(shù)器455經(jīng)由復(fù)用器482提供字計數(shù)至緩沖器260(如圖2所示)。在一些示例中,外循環(huán)計數(shù)器255根據(jù)如圖3所示的編碼值320來生成前綴。在圖3示出的壓縮方案中,沒有對循環(huán)計數(shù)器值進(jìn)行壓縮;因此,可以通過硬連線生成根據(jù)如圖3所示方案的外循環(huán)計數(shù)器值,使得前綴被附加到計數(shù)值上。另一種選擇是,可以使用查找表或任何其它合適的方法來生成根據(jù)如圖3所示方案的編碼值。復(fù)用器480允許位移發(fā)生器模塊220和內(nèi)循環(huán)計數(shù)器454都來填充緩沖器226(如圖2所示),且復(fù)用器481允許線性遞增發(fā)生器模塊430和外循環(huán)計數(shù)器455都來填充緩沖器256(如圖2所示)。復(fù)用器482允許來自壓縮器424、壓縮434、內(nèi)循環(huán)計數(shù)器454和外循環(huán)計數(shù)器455中每一個的字計數(shù)來填充緩沖器260(如上面圖2所示)。除非表示為內(nèi)循環(huán)執(zhí)行或外循環(huán)執(zhí)行,否則“或非”設(shè)備(門)457就生成邏輯高。因此,關(guān)于不連續(xù)的通知256被“與”設(shè)備458阻塞,從而防止了“與”設(shè)備419和416提供未更新的不連續(xù)來源PC值444和未更新的不連續(xù)目的PC值445。但是,如果“或非”設(shè)備4576既不表示為內(nèi)循環(huán)執(zhí)行也不表示為外循環(huán)執(zhí)行,則存儲器設(shè)備442在發(fā)生每次新不連續(xù)時進(jìn)行更新。此外,如果表示存在內(nèi)或外循環(huán),則可以向位移發(fā)生器模塊220和線性遞增發(fā)生器模塊230提供信號459(門458的輸出),以防止計算位移值428和線性遞增運行值438。圖5A是含有示例性被壓縮數(shù)據(jù)結(jié)構(gòu)的緩沖器226、260和236的示意性示出。在示例性實施例中,每個緩沖器都是FIFO緩沖器,在緩沖器的最上面字上的數(shù)據(jù)(即第一位置或地址)是首先進(jìn)入的數(shù)據(jù)。緩沖器226包括位移數(shù)據(jù)的兩個字,502a和502a’,它們兩個均與第一位移值對應(yīng);內(nèi)循環(huán)計數(shù)數(shù)據(jù)的三個字,504a、504a’和504a”,它們均與第一內(nèi)循環(huán)計數(shù)值對應(yīng);以及位移數(shù)據(jù)的一個字,506a’,其與第二位移計數(shù)值對應(yīng)。緩沖器236包括線性遞增計數(shù)數(shù)據(jù)的一個字,502b,其與第一位移計數(shù)值對應(yīng)(以及與位移值502a和502a’對應(yīng));外循環(huán)計數(shù)數(shù)據(jù)的兩個字,504b和504b’,它們兩個均與第一外循環(huán)計數(shù)值對應(yīng);以及線性遞增數(shù)據(jù)的一個字,506b’,其與第二線性遞增計數(shù)值對應(yīng)(以及與位移計數(shù)數(shù)據(jù)506a對應(yīng))。字計數(shù)緩沖器260包括與緩沖器226和236中每一個的數(shù)據(jù)對應(yīng)的字計數(shù)值。例如,可以使用適當(dāng)?shù)木幊虜?shù)據(jù)控制器(例如數(shù)據(jù)控制器120)來從緩沖器526和緩沖器536中讀取位移數(shù)據(jù)、線性遞增數(shù)據(jù)、內(nèi)循環(huán)數(shù)據(jù)和外循環(huán)數(shù)據(jù),使它們形成一個集成的壓縮程序跟蹤。然后,這個集成的壓縮程序跟蹤可以由解壓縮器145(如圖1所示)進(jìn)行解壓縮,以形成解壓縮的程序跟蹤。通過讀取字計數(shù)502、502’、504、504’、506和506’,以及使用替換的字計數(shù)從緩沖器226和236中讀取對應(yīng)個數(shù)的字來發(fā)生數(shù)據(jù)的集成。例如,根據(jù)示出的示例性數(shù)據(jù)結(jié)構(gòu),通過首先從緩沖器226中讀取與來自緩沖器的字計數(shù)502對應(yīng)的兩個數(shù)據(jù)字502a和502a’來形成作為結(jié)果的集成的壓縮程序跟蹤。接下來,從緩沖器236中讀取與來自緩沖器260的字計數(shù)502’對應(yīng)的單個數(shù)據(jù)字502b。然后,從緩沖器526中讀取與來自緩沖器260的字計數(shù)502對應(yīng)的兩個數(shù)據(jù)字的三個字502a和502a’。包含作為結(jié)果的集成數(shù)據(jù)的存儲器550在圖5B中示出。存儲器550被從緩沖器226和236中讀取的數(shù)據(jù)從底部向上進(jìn)行填充。可以使用解壓縮器145(如圖1所示)來獲得對作為結(jié)果的集成數(shù)據(jù)的解壓縮。雖然已對發(fā)明概念和若干示例性實施例進(jìn)行了描述,但是,對于本領(lǐng)域的普通技術(shù)人員來說,顯然,本發(fā)明可以以各種方式實現(xiàn),且且對于本領(lǐng)域普通技術(shù)人員來說,它們將會發(fā)生修改和改進(jìn)。因此,給出的示例并不是為了限制。本發(fā)明只受所附的權(quán)利要求及其等同物的限制。同樣,應(yīng)當(dāng)理解,術(shù)語“包括(including)”、“包含(comprising)”或“帶有(having)”的使用應(yīng)當(dāng)涵蓋所列出的項目及其等同物以及列出的項目的前面、后面或者之間的附加的項目。權(quán)利要求1.一種用于跟蹤在處理器上執(zhí)行程序的執(zhí)行序列的程序跟蹤器,該處理器帶有用于在執(zhí)行程序時為程序指令保留程序指令計數(shù)值的程序計數(shù)器,程序跟蹤器包含程序計數(shù)定序器,其在操作中連接至程序計數(shù)器,以接收來自程序計數(shù)器的當(dāng)前程序計數(shù)值,以及還接收程序指令流中的關(guān)于不連續(xù)的通知,程序計數(shù)定序器響應(yīng)于所述通知而生成當(dāng)前不連續(xù)目的計數(shù)值;以及線性遞增發(fā)生器模塊,其在操作中連結(jié)至程序計數(shù)定序器,以接收當(dāng)前程序計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值,以及響應(yīng)于程序中的關(guān)于不連續(xù)的通知而計算線性遞增運行長度和選擇性地提供線性遞增運行長度值。2.如權(quán)利要求1所述的程序跟蹤器,進(jìn)一步包含位移發(fā)生器模塊,其在操作中連結(jié)至程序計數(shù)定序器,以接收當(dāng)前程序計數(shù)值和先前程序計數(shù)值,以及進(jìn)行響應(yīng)而計算位移值。3.如權(quán)利要求1所述的程序跟蹤器,其中,位移發(fā)生器模塊響應(yīng)于對程序中的關(guān)于不連續(xù)的通知而選擇性地提供位移值。4.一種用于跟蹤在處理器上執(zhí)行程序的執(zhí)行序列的程序跟蹤器,該處理器帶有用于在執(zhí)行程序時為程序指令保留程序指令計數(shù)值的程序計數(shù)器,程序跟蹤器包含程序計數(shù)定序器,其用于接收用于接收來自程序計數(shù)器的當(dāng)前程序計數(shù)值和保留先前程序計數(shù)值,以及確定當(dāng)前不連續(xù)來源計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值;以及循環(huán)計數(shù)模塊,其連結(jié)至程序計數(shù)定序器,以接收當(dāng)前不連續(xù)來源計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值,以及保留第一先前不連續(xù)來源計數(shù)值和第一先前不連續(xù)目的計數(shù)值,以及通過把當(dāng)前不連續(xù)來源計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值與第一先前不連續(xù)來源計數(shù)值和第一先前不連續(xù)目的計數(shù)值進(jìn)行比較,來對至少第一循環(huán)的循環(huán)執(zhí)行進(jìn)行計數(shù)。5.一種用于跟蹤在處理器上執(zhí)行程序的執(zhí)行序列的方法,該處理器帶有用于在執(zhí)行程序時為程序指令保留程序指令計數(shù)值的程序計數(shù)器,該方法包含響應(yīng)于關(guān)于不連續(xù)的通知而生成當(dāng)前不連續(xù)目的計數(shù)值;以及根據(jù)當(dāng)前不連續(xù)目的值和當(dāng)前程序計數(shù)值,來計算線性遞增運行長度。6.如權(quán)利要求5所述的跟蹤執(zhí)行序列的方法,進(jìn)一步包含響應(yīng)于程序中的關(guān)于不連續(xù)的通知而選擇性地提供線性遞增運行長度值。7.一種用于跟蹤在處理器上執(zhí)行程序的執(zhí)行序列的方法,該處理器帶有用于在執(zhí)行程序時為程序指令保留程序指令計數(shù)值的程序計數(shù)器,該方法包含確定當(dāng)前不連續(xù)來源計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值;以及通過把當(dāng)前不連續(xù)來源計數(shù)值和當(dāng)前不連續(xù)目的計數(shù)值與第一先前不連續(xù)來源計數(shù)值和第一先前不連續(xù)目的計數(shù)值進(jìn)行比較,來對至少第一循環(huán)的循環(huán)執(zhí)行進(jìn)行計數(shù)。全文摘要一種高速程序跟蹤器,其使用線性遞增運行長度值、與不連續(xù)對應(yīng)的位移值和循環(huán)壓縮來提供壓縮。一種程序計數(shù)定序器接收來自處理器的程序計數(shù)值,并輸出各種程序計數(shù)值和信號,以允許根據(jù)線性遞增運行長度、不連續(xù)檢測和對重復(fù)指令循環(huán)的檢測而作出壓縮計算??梢允褂帽磉_(dá)各種壓縮值的所選擇的字?jǐn)?shù)來獲得壓縮。文檔編號G06F13/28GK1549971SQ02816926公開日2004年11月24日申請日期2002年8月29日優(yōu)先權(quán)日2001年8月29日發(fā)明者約爾格·施豐姆萊因,約爾格施豐姆萊因申請人:模擬設(shè)備公司