本發明涉及電子電路領域,具體涉及一種程序計數器壓縮方法及其硬件電路。
背景技術:
隨著處理器中軟件復雜度的提高,軟件調試和分析軟件執行效果顯得越來越重要,收集程序執行的路徑信息具有重要的意義。常用的路徑信息收集方法有兩種,第一種是通過仿真器模擬程序執行,這種方法實現起來簡單,但是由于仿真速度較慢,影響了信息收集的效率,第二種是在處理器中嵌入硬件模塊實時記錄路徑信息,這種方法信息收集速度快,但是片上存儲器容量和數據傳輸帶寬限制了記錄的信息數量。為了提高信息收集的效率,同時降低對硬件條件的要求,需要高效的程序計數器壓縮方法,減少需要記錄的有效數據量。
由于程序計數器壓縮單元是處理器的非核心部件,所以其硬件資源消耗應當盡可能少,功耗也應當盡可能低,以不影響處理器的整體面積和性能。因此,探索一種高效的程序計數器的壓縮方案及其硬件電路,提高程序計數器的壓縮率,降低硬件模塊的資源消耗和功耗具有重要的研究價值。
現有的程序計數器壓縮方法主要基于兩個角度提出,第一個角度是基于體系結構的壓縮,例如僅僅記錄程序執行過程中的跳轉指令信息,對于順序指令信息不做處理,第二個角度是通用的無損數據壓縮方法,例如差分編碼和字典編碼。現有的技術大多數沒有將這兩個角度有效結合起來,壓縮效果仍有提升的空間。在體系結構壓縮方面,已有的研究對阻塞指令的關注較少,在一些特定的領域中影響了壓縮效果。字典編碼這種方法在程序計數器的壓縮中得到了較為廣泛的運用,但是已有的研究提出的字典編碼的硬件實現方法大都需要較多的硬件資源,尤其是需要較多的寄存器,同時功耗也較大,限制了這種方法的實際運用。
技術實現要素:
針對上述問題,本發明提出了一種新的程序計數器壓縮方法以及相應的硬件實現電路,或稱為壓縮裝置。
具體而言,一方面,本發明提供一種程序計數器壓縮方法,其特征在于,所述壓縮方法包括下述步驟:
步驟(1)、獲取處理器發出的指令的執行情況,并且基于所述指令的執行情況對所述指令進行分類篩選;
步驟(2)、基于分類篩選的結果對目標類型指令的程序計數器值和阻塞周期進行差分處理,并且對所獲得的差分值進行切片處理,獲得相應的有效數據段;
步驟(3)、對步驟(2)中獲得的差分切片的有效數據段進行字典編碼。
優選地,所述程序計數器壓縮方法將指令的類型分為(1)順序執行、(2)跳轉和(3)阻塞,
所述步驟(1)包括:
步驟(1.1)、獲取每個指令所對應的程序計數器值;
步驟(1.2)求解任意兩條連續指令的程序計數器值的差值PC_diff=PC-PC_pre,其中,PC表示當前周期的程序計數器值,PC_pre表示上一個周期的程序計數器值;
步驟(1.3)基于任意兩條連續指令的程序計數器值的差值PC_diff對所述指令進行分類,
(a)如果PC_diff=1,則將該指令分類為順序指令,對該指令不做記錄;
(b)如果PC_diff=0:則將該指令分類為阻塞指令,記錄阻塞指令對應的程序計數器值和阻塞的周期;
(c)如果PC_diff≠0且PC_diff≠1,則將該指令分類為跳轉指令,記錄該指令對應的分支地址和目標地址所對應的程序計數器的值。
優選地,所述步驟(2)包括:
步驟(2.1)、對于所記錄下的阻塞指令和跳轉指令的程序計數器值和相應的指令持續周期數進行差分,獲得相應差分值;
步驟(2.2)、將差分值按照數據位的順序分成若干數據段,每個數據段的數據位數相同;
步驟(2.3)、從左至右判斷每個數據段中的各個數據位是否全為0或全為1;
步驟(2.4)若數據段中的各個數據位全為0或全為1,則舍棄該數據段,若數據段中的各個數據位不全為0或1,則將該數據段以及其低位數據段均傳輸至步驟(3)。
優選地,所述步驟(3)包括:
步驟(3.1)、接收步驟(2)中所傳送的數據段,其中每個數據段包含若干源數據;
步驟(3.2)、在存儲器中構建字典,所述字典包括若干元素;
步驟(3.3)、對每個源數據,依次從字典中的每個元素中進行查找,若當前源數據與字典中的某個元素相匹配,則記錄下字典中該元素的位置后再利用源數據更新字典,若所有元素均不匹配,則直接利用源數據更新字典,字典更新時,字典不發生滑動,依次將源數據從左至右將字典中的元素覆蓋,并且,每次更新之后,將對查找起始位置+1。
優選地,所述步驟(3)還包括:
對字典窗口進行分割,單次讀入N個數據源,N為大于等于2的正整數,對于每個數據源,每個程序周期啟動一個數據源的查找,每個數據源的查找起始位置比上一個增加1,獲取對于每個數據源的查找匹配結果,基于對所有N個數據源的匹配結果,確定實際匹配結果。
另一方面,本發明提供一種程序計數器壓縮裝置,其特征在于,所述壓縮裝置包括:
指令分類模塊、數據差分切片模塊、字典編碼模塊,所述指令分類模塊用于獲取處理器發出的指令的執行情況,并且基于所述指令的執行情況對所述指令進行分類篩選;
所述數據差分切片模塊用于基于分類篩選的結果對目標類型指令的程序計數器的值和阻塞周期進行差分處理,并且對所獲得的差分值進行切片處理;
所述字典編碼模塊用于基于深度為N的RAM構建字典編碼,并且,對有效的差分切片的數據段進行LZ字典編碼。
優選地,所述壓縮裝置用于執行所述的方法。
本發明主要用于控制部分
本發明主要針對“微控制器+協處理器”的處理器架構,軟件程序在微控制器中執行,微控制器根據執行結果向協處理器發送一些控制命令,協處理器作為運算的主體,接收配置,完成具體的運算操作。基于這種架構的處理器的軟件程序中存在著大量的阻塞指令,如果某一條指令對應著向協處理器發送運算控制命令,則下一條指令為阻塞指令,指令執行會停留在這一條指令上,直到協處理器中的運算完成,這樣保證了協處理器接受微控制器的統一調配,各種運算的有序執行。
技術效果
與已有的研究相比,本發明的程序計數器的壓縮方案及其硬件電路具有如下優勢:
(1)本發明將體系結構壓縮和非體系結構壓縮兩種方法有效地結合起來,通過分類篩選、差分編碼和字典壓縮等方法的組織和運用,提出了程序計數器的三級壓縮方案,極大地提高了程序計數器的壓縮率;
(2)本發明分類篩選步驟中,對于阻塞指令做了相應的處理,針對“微控制器+協處理器”結構的處理器中,壓縮效果尤其好;
(3)本發明差分編碼步驟中,通過對差分值做切片化處理,既減少了差分值的有效位寬,又使得切片的數據位寬固定,為后續字典編碼節省了資源;
(4)本發明基于存儲器提出了一種字典編碼的硬件實現結構,其能夠明顯減少寄存器的使用數量,甚至不使用寄存器,降低了字典編碼硬件模塊的資源消耗和功耗。
附圖說明
圖1為程序計數器壓縮方法的示意流程圖;
圖2為本發明的方法進行差分切片的示意圖;
圖3為本發明進行差分切片的硬件電路;
圖4為進行LZ字典編碼的實例;
圖5字典壓縮硬件結構圖;
圖6字典窗口更新示意圖;
圖7雙RAM并行字典壓縮硬件結構圖
圖8多源數據并行壓縮匹配情況分布圖
具體實施方式
以下結合附圖及其實施例對本發明進行詳細說明,但并不因此將本發明的保護范圍限制在實施例描述的范圍之中。
圖1為三級壓縮方案的流程圖,圖1中的PC_classsify、Diff_encode和LZ_encode依次指三個壓縮步驟分類篩選、差分切片和字典編碼,PC和PC_pre指當前周期和上一個周期的程序計數器的值,Jump_PC和Stall_PC指跳轉指令和阻塞指令對應的程序計數器的值,Stall_len指阻塞指令對應的阻塞周期數,Data_slice指經過差分切片處理后的有效數據段。
如圖1所示,本發明的程序計數器的壓縮方法分為3個步驟:(1)分類篩選(2)差分切片(3)字典編碼。下面分別就這三個步驟對本實施例的實現過程進行詳細描述。
1、分類篩選
本發明將處理器GFP中的指令分為3種類型:(1)順序執行(2)跳轉(3)阻塞。在線調試設計中,僅僅通過記錄后兩種指令對應的程序計數器的值就可以解析出GFP中指令的執行情況。具體篩選方法是通過求解連續兩條指令的程序計數器的差值進行分類,具體如下:假設PC表示當前周期的程序計數器的值,PC_pre表示上一個周期的程序計數器的值,差分值PC_diff=PC-PC_pre:
(1)PC_diff=1:順序指令,不做記錄
(2)PC_diff=0:阻塞指令,記錄阻塞指令對應的程序計數器的值和阻塞的周期
(3)PC_diff≠0且PC_diff≠1:跳轉類指令,記下分支地址和目標地址
本發明所采用的這種分類篩選方法充分考慮了“微控制器+協處理器”結構的處理器中存在三種指令,即順序指令、阻塞指令和跳轉指令,最大程度地減少了需要記錄的有效數據量,現有技術大都沒有考慮阻塞指令,壓縮率方面仍有較大的提升空間。
2、差分切片(創新點)
對第一個步驟中記錄下的兩類指令的程序計數器值和阻塞類指令持續周期數進行差分編碼,假設D1和D2為分類篩選步驟中連續記錄的兩個有效數據,則差分值的計算公式為:diff=D1-D2。再對差分值diff進行切片處理。差分值切片的具體方法將差分值按照各個數據位的順序分成若干數據段,每個數據段的數據位數相同。圖2為差分切片的一個示意圖,將32位的差分值分成了8個數據段,每個數據段包含4個數據位,低16位對應的4個數據段為有效數據段。如圖3所示,只有當某一個數據段的各個數據位不全為0或者不全為1時,才將該數據段傳輸至下一個壓縮步驟(字典編碼步驟)。這里的數據段取舍規則如下:從高位至地位依次檢查各個數據段,如果數據段中的各個數據位全為0(正數)或全為1(負數),則繼續檢查下一個該數據段,否則從該數據段一直到最低位數據段均為有效數據段,都需要傳輸至下一個壓縮步驟。例如32位的差分值0000_0000_0000_0000_0000_0011_0000_0000包含3個有效數據段0011、0000、0000。
與經典差分編碼(差分有效字段+差分值位寬)方法相比,優點主要有(1)無需求解差分值的位寬,節省了時間和資源;(2)差分切片值位寬固定,為后續字典編碼節省了硬件資源。字典編碼需要大量比較器,比較器的位寬和差分編碼輸出位寬相同,經典編碼方法需要支持32位的有效位寬
目前,現有技術中,差分編碼的切片處理方法很少運用,大部分還是差分有效字段+差分值位寬的表示方法。但是,本申請的發明人經過研究發現,采用本發明的差分編碼的切片處理方式,能夠有效降低運算量,節約硬件資源。
3、LZ字典編碼
對步驟2中記錄的有效地差分切片字段進行LZ字典編碼。
(1)LZ字典編碼原理
LZ字典編碼是一種經典的無損數據壓縮算法,其主要原理是在編碼的過程中有一個動態變化的字典窗口,當讀入一批待壓縮數據與字典中的某一數據段相同,則使用該數據段的起始位置和數據匹配的長度來表示,圖4為現有技術中所采用LZ字典編碼的實例。
圖4中,左側8個小方塊組成滑動的字典窗口(Dictionary),中間7個小方塊表示待壓縮的源數據(Src),變量M的值表示當前源數據與字典的匹配情況,1表示匹配成功,0表示失敗。變量MP和ML表示源數據與字典窗口的匹配位置和匹配長度。M、MP和ML隨著源數據和字典的變化而實時改變。此處假設字典窗口包含8個數據緩存單元,初始化內容為0,1,2,…,7,待壓縮的數據為1,2,3,5,6,7。首先數據1和字典內容進行匹配,匹配成功,匹配位置為1,然后對字典內容進行更新,字典中的數據依次向左移動一個緩存單元。后續依次發現2,3兩個數據也和字典中位置為1的緩存單元中的數據匹配,直至5無法匹配成功,輸出字典編碼的第一組壓縮結果(1,3,5),匹配位置,1,匹配長度3,匹配結束數據5。后面源數據的字典壓縮原理與此相同。
本發明基于LZ字典編碼原理對其進行了改進,使其執行效率更高,壓縮比更大。
(2)LZ字典編碼硬件實現方案
如圖5所示,本實施例中用一個深度為N的RAM作為字典(Dictionary),計數器cnt1產生字典的地址addr和匹配位置MP,計數器cnt2產生匹配長度ML,比較器CP在多個周期內完成比較匹配操作,得到匹配結果M。
以圖6為例解釋這種壓縮過程,字典窗口包含4個存儲單元,初始化內容為D0、D1、D2和D3,待壓縮的源數據為s0、s1、s2和s3。在進行字典更新時,依次從左至右,用s0、s1、s2和s3將D0、D1、D2和D3替換掉,在進行匹配查找時,依次將字典窗口中第1、2、3和4個緩存單元的數據作為匹配查找對象。
字典的更新策略是字典不發生滑動,依次將源數據從左至右將字典中的元素覆蓋,同時查找的起始位置每次不從0開始,依次加1,字典更新所需要花費的周期數從2(N-1)+1縮短至1,并且極大地減小了功耗。
當對壓縮速率要求較高時,可以對字典窗口進行分割,如圖7所示,將字典窗口分割成兩個,可以在兩個字典窗口中實現并行查找。
傳統的LZ字典壓縮硬件結構中,由于數據相關性,每次只能對一個源數據進行壓縮,本設計中,一次性讀入4個源數據,對4個源數據并行查找,提高壓縮速度,根據匹配情況,壓縮過程隨時終止。
如圖8所示,為壓縮過程中匹配情況的分步特征。
圖中:A1、A2、A3和A4表示一次性讀入的4個源數據,P0表示初始匹配位置,P1、P2、P3和P4分別表示4個源數據在字典窗口中的匹配位置,Mx_Py表示第x個源數據與第y個匹配位置的匹配結果。例如M1_P0_1表示第一個源數據和P0位置的字典元素匹配成功,M1_P0_0表示第一個源數據和P0位置的字典元素匹配失敗。eof表示結束查找字典中的所有元素。
編碼過程
(1)對P0進行匹配,依次得到M1_P0、M2_P0、M3_P0、M4_P0的值;
(2)對A1、A2、A3和A4進行并行全查找,此過程中會得出M1_P1、M2_P2、M3_P3、M1_P4的值,圖中表示的是A1、A2、A3和A4結束查找的條件,當4個源數據全部結束查找,當前批次的源數據結束查找。當M1_P1拉高時,在其后面的3個周期,依次得出M2_P1、M3_P1和M4_P1的值;當M2_P2拉高時,在其后面的2個周期,依次得出M3_P2和M4_P2的值;當M3_P3拉高時,在其后面的1個周期,得出M4_P3的值;
編碼關鍵所在:
(1)編碼何時結束(如圖8所示,A1、A2、A3、A4編碼均結束);
(2)CL輸出、CP輸出和碼字輸出(分成A1、A2、A3、A4四級處理)
輸出值是等待所有的全查找結束后,先根據全查找過程中的分離匹配值確定A1、A2、A3、A4的實際匹配情況。
A1:匹配P0、匹配P1、不匹配
A2:匹配P0、匹配P1、匹配P2、不匹配:
A3:匹配P0、匹配P1、匹配P2、匹配P3、不匹配;
A4:匹配P0、匹配P1、匹配P2、匹配P3、匹配P4、不匹配;
An的匹配情況有以下幾種:
a、匹配Pn-1(CLn-1>0);——CL=CL+1,CP不變
b、不匹配Pn-1(CLn-1<0);——輸出碼字,CL清零
c、匹配Pn(CLn-1=0);——CL=CL+1,CP載值
d、不匹配Pn(CLn-1=0);——輸出碼字,CL清零
以上所述僅為本發明的較佳實施例,并非對本發明做任何形式上的限制,凡在本發明的精神和原則之內,依據本發明的技術實質對以上實施例所做的任何簡單修改、等同變化與修飾,均仍屬于本發明的保護范圍之內。
雖然上面結合本發明的優選實施例對本發明的原理進行了詳細的描述,本領域技術人員應該理解,上述實施例僅僅是對本發明的示意性實現方式的解釋,并非對本發明包含范圍的限定。實施例中的細節并不構成對本發明范圍的限制,在不背離本發明的精神和范圍的情況下,任何基于本發明技術方案的等效變換、簡單替換等顯而易見的改變,均落在本發明保護范圍之內。