一種嵌入式系統(tǒng)可執(zhí)行代碼壓縮方法及代碼解壓縮系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種嵌入式系統(tǒng)可執(zhí)行代碼的壓縮方法,包括步驟S1:對二進(jìn)制代碼集合按集合中各個不同編碼出現(xiàn)的次數(shù)進(jìn)行統(tǒng)計;步驟S2:對各個不同編碼出現(xiàn)的頻次進(jìn)行排序,組成一個新的已排序的編碼頻次表;步驟S3:根據(jù)編碼頻次表中的信息,將所有出現(xiàn)的不同編碼分為r類;步驟S4:對前r-1類編碼分別用不同索引長度的字典壓縮,對第r類編碼進(jìn)行扭環(huán)移位字典壓縮;步驟S5:將構(gòu)建的r個字典及其索引集合分別存入外部存儲器中。本發(fā)明還提供一種嵌入式系統(tǒng)可執(zhí)行代碼的解壓縮系統(tǒng),中央處理器由解壓縮邏輯中的地址映射邏輯,從r個字典及其索引集合中取得所需的壓縮代碼,經(jīng)過解壓縮邏輯中的解壓單元,得到二進(jìn)制代碼集合中的指令編碼。
【專利說明】一種嵌入式系統(tǒng)可執(zhí)行代碼壓縮方法及代碼解壓縮系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及代碼壓縮領(lǐng)域,尤其涉及嵌入式系統(tǒng)可執(zhí)行代碼的壓縮方法及運行時 解壓縮系統(tǒng)。
【背景技術(shù)】
[0002] 隨著應(yīng)用復(fù)雜度的增加,應(yīng)用程序的可執(zhí)行二進(jìn)制代碼集合尺寸也逐步增大,需 要巨大的存儲空間,從而導(dǎo)致芯片面積和系統(tǒng)功耗增加。由于外部存儲器的容量在物理上 的增加往往受到機器自身及系統(tǒng)成本的制約,因此可將代碼進(jìn)行壓縮存儲,以從邏輯上來 擴充存儲器的容量。使用代碼壓縮方法減小程序代碼尺寸,可以有效節(jié)省芯片的面積和功 耗。
[0003] 代碼壓縮技術(shù)按解壓縮結(jié)構(gòu),可分為取指時解壓和緩存中解壓兩類。取指時解壓 的方案,解壓器放在外部存儲器與指令緩沖存儲器(cache)之間。緩存中解壓的方案,解壓 器放在處理器與指令緩沖存儲器(cache)之間。就性能和功耗考慮,如果解壓邏輯的硬件 開銷和時間開銷較小,則緩存中解壓的方案要優(yōu)于取指時解壓的方案。但目前的代碼壓縮 技術(shù)因解壓邏輯的開銷問題,大多選擇取指時解壓的方案。
[0004] 按字典的個數(shù)可分為單字典壓縮和多字典壓縮。單字典壓縮技術(shù),有兩種方案,一 種是對編譯后的可執(zhí)行二進(jìn)制代碼集合,進(jìn)行頻次統(tǒng)計,將出現(xiàn)頻次高的一部分編碼采用 短的索引進(jìn)行查字典解壓,剩下的出現(xiàn)頻次低的編碼不壓縮;另一種是采用哈夫曼壓縮,建 立字典,出現(xiàn)頻次高的編碼采用短索引,出現(xiàn)頻次低的編碼采用長索引。多字典壓縮技術(shù), 是對編譯后的可執(zhí)行二進(jìn)制代碼集合,進(jìn)行頻次統(tǒng)計,然后按出現(xiàn)的頻次將編碼分成幾類, 每一類采用一個獨立的字典進(jìn)行壓縮。這樣,每個字典的索引可以選擇最佳的長度,進(jìn)一步 提高壓縮率。多字典的缺點是增加了部分硬件開銷。
[0005] 按指令的壓縮形式分,有全代碼壓縮和子代碼壓縮技術(shù)。全代碼壓縮是對完整的 指令碼進(jìn)行壓縮,在解壓邏輯中采用映射表來得到原始指令。子代碼壓縮技術(shù)是對指令編 碼中的操作碼字段進(jìn)行壓縮,而對指令編碼中表示寄存器和標(biāo)志位的字段不壓縮。
[0006] 美國專利US6564314B1給出了一種代碼壓縮方法。專利號為CN1241115C的發(fā)明 專利給出了處理壓縮程序代碼的電子設(shè)備和方法。專利號為CN101382884B的發(fā)明專利給 出了一種指令編碼方法、指令編碼系統(tǒng)及數(shù)字信號處理器,在設(shè)計指令集時,對指令編碼分 成3種長度以達(dá)到指令壓縮的效果。對指令編碼進(jìn)行分類字典壓縮,并對其中壓縮效果一 般的一類編碼采用扭環(huán)移位壓縮,以進(jìn)一步提高壓縮率,在執(zhí)行階段,從程序存儲器取出壓 縮的指令,然后用解壓縮器將其解壓為原始形式,再解碼成控制信號去控制處理器中的硬 件資源。
【發(fā)明內(nèi)容】
[0007] ( -)要解決的問題
[0008] 為了進(jìn)一步提高現(xiàn)有技術(shù)的效果,本發(fā)明目的是提供一種有效的縮小代碼存儲在 外部存儲器中所需的存儲空間的代碼壓縮方法和可執(zhí)行代碼運行時的解壓縮硬件系統(tǒng)。
[0009] (二)技術(shù)方案
[0010] 本發(fā)明的第一方面,提供一種嵌入式系統(tǒng)可執(zhí)行代碼的壓縮方法,包括步驟如 下:
[0011] 步驟Sl :對二進(jìn)制代碼集合按該集合中各個不同編碼出現(xiàn)的次數(shù)進(jìn)行統(tǒng)計,得到 編碼出現(xiàn)次數(shù)的頻次表;
[0012] 步驟S2 :對各個不同編碼出現(xiàn)的頻次進(jìn)行排序,出現(xiàn)頻次高的編碼排在前面,出 現(xiàn)頻次低的編碼排在后面,組成一個新的已排序的編碼頻次表;
[0013] 步驟S3 :根據(jù)編碼頻次表中的信息,采用分類算法,將所有出現(xiàn)的不同編碼分為r 個類;
[0014] 步驟S4 :對可執(zhí)行二進(jìn)制代碼集合H的前r-1個類編碼分別采用不同索引長度的 字典進(jìn)行壓縮,對第r類編碼進(jìn)行扭環(huán)移位字典壓縮,構(gòu)建r個字典及其索引集合;
[0015] 步驟S5 :將r個字典及其索引集合分別存入外部存儲器中。
[0016] 本發(fā)明的第二方面,提供一種嵌入式系統(tǒng)可執(zhí)行代碼的解壓縮系統(tǒng)包括:中央處 理器、緩沖存儲器、地址映射緩存、緩沖裝載邏輯單元、扭環(huán)移位序列產(chǎn)生器、r個字典、外部 存儲器;其中:
[0017] 中央處理器與緩沖存儲器和地址映射緩存相連;中央處理器的數(shù)據(jù)總線輸出信息 給緩沖存儲器,也從緩沖存儲器獲取輸入信息;中央處理器的地址總線輸出信息給地址映 射緩存,也從地址映射緩存獲取輸入信息;中央處理器通過控制總線控制信息的流向;
[0018] 緩沖存儲器與緩存裝載邏輯單元相連,緩沖存儲器從緩存裝載邏輯單元獲得通過 索引查字典所得到的原始二進(jìn)制代碼集合中的指令編碼,緩存裝載邏輯單元從緩沖存儲器 接收命令并對自身的數(shù)據(jù)進(jìn)行更新;
[0019] 地址映射緩存與緩存裝載邏輯單元相連,地址映射緩存從緩存裝載邏輯單元獲得 解壓縮后的代碼在外部存儲器中的地址,緩存裝載邏輯單元從地址映射緩存單元接收命令 對自身的地址數(shù)據(jù)進(jìn)行更新;
[0020] 緩存裝載邏輯單元分別與扭環(huán)移位序列發(fā)生器及r個字典相連;扭環(huán)移位序列發(fā) 生器和r個字典輸出字典中的數(shù)據(jù)序列發(fā)送給緩存裝載邏輯單元;
[0021] 扭環(huán)移位序列發(fā)生器和1個字典分別與外部存儲器相連;外部存儲器的輸出數(shù)據(jù) 分別發(fā)送到扭環(huán)移位序列發(fā)生器和r個字典;在計算機上編寫代碼壓縮算法,用于壓縮可 執(zhí)行二進(jìn)制代碼、壓縮第r類編碼扭環(huán)移位字典,構(gòu)建r個字典及其索引集合,壓縮后的代 碼存儲在外部存儲器中;
[0022] 中央處理器在代碼解壓時,將外部存儲器的字典載入中央處理器的內(nèi)部存儲器 中,通過解壓縮邏輯中的地址映射邏輯,找到待解壓的指令所對應(yīng)的索引,以該索引查找其 所對應(yīng)的字典條目,該字典條目的值即是二進(jìn)制代碼集合中的指令編碼。
[0023] (三)有益效果
[0024] 本發(fā)明實施例對可執(zhí)行二進(jìn)制代碼集合采用分類的字典壓縮算法,按編碼出現(xiàn)的 頻次分成r類(r = 1、2、4.......),并對最后一類編碼采用扭環(huán)移位字典壓縮技術(shù)進(jìn)行壓 縮。對可執(zhí)行二進(jìn)制代碼集合采用這種分類多字典編碼方法來表示n比特編碼S的二進(jìn)制 代碼集合H,其熵比采用哈夫曼變長編碼時的熵要大,也即這種編碼方式的冗余度要小,編 碼之間的相關(guān)性小。在對二進(jìn)制代碼集合H進(jìn)行分類時,把采用字典壓縮幾乎不產(chǎn)生效果 的編碼歸入了第r類,對可執(zhí)行二進(jìn)制代碼集合中的第r類采用扭環(huán)移位字典進(jìn)行壓縮, 能夠進(jìn)一步提高第1類的壓縮率。由于采用了分類多字典壓縮和扭環(huán)移位字典壓縮,同一 程序在同一體系結(jié)構(gòu)的處理器下編譯后生成的二進(jìn)制代碼集合,所占的外部存儲器開銷比 不使用該壓縮算法或使用其他多字典壓縮算法時要小。所做的實驗結(jié)果表明,基準(zhǔn)程序集 MiBench中的33個程序在ARM體系架構(gòu)下的可執(zhí)行二進(jìn)制代碼集合在本發(fā)明實施例中的壓 縮率都介于50%?55%之間,是目前(2014年)代碼壓縮領(lǐng)域壓縮率最佳的結(jié)果。
[0025] 現(xiàn)有技術(shù)中的多級字典壓縮技術(shù)與本發(fā)明實施例中的多字典技術(shù)在壓縮原理上 是不相同的。多級字典壓縮技術(shù)將可執(zhí)行二進(jìn)制代碼集合H采用一級字典壓縮后,得到代 碼集合H',再對代碼集合H'進(jìn)行字典壓縮,得到代碼集合H",依次逐級壓縮。本發(fā)明實施 例中的多字典技術(shù)則是將可執(zhí)行二進(jìn)制代碼集合H分為r類,對各類一次性采用不同索引 長度的字典進(jìn)行壓縮。由于采用了分類字典,可以對出現(xiàn)頻次高的編碼采用極短的索引構(gòu) 建相應(yīng)的字典,出現(xiàn)頻次稍低的編碼采用稍長的索引構(gòu)建相應(yīng)的字典,提高了壓縮率。本發(fā) 明實施例中的多字典技術(shù)在代碼解壓時的訪存次數(shù)比多級字典要少,也即代碼解壓的實時 性要比多級字典的方法要好。
[0026] 現(xiàn)有技術(shù)中的字典壓縮通常對索引進(jìn)行哈夫曼編碼,本發(fā)明實施例中對二進(jìn)制代 碼集合H采用自適應(yīng)定長編碼。所謂自適應(yīng)定長編碼,即是對二進(jìn)制代碼集合H按集合中 的編碼出現(xiàn)的次數(shù)進(jìn)行分類,對分得的每類二進(jìn)制代碼子集合h采用定長編碼進(jìn)行字典壓 縮。同一類中的編碼經(jīng)過字典壓縮后的索引長度k相同,即定長編碼;不同類的編碼經(jīng)過字 典壓縮后的索引長度不同,其索引長度由經(jīng)過分類后的每類的大小決定,即自適應(yīng)編碼。在 不同編碼的個數(shù)較多的待編碼集合中,采用自適應(yīng)編碼所需要的總的比特數(shù)比采用哈夫曼 編碼要少。
【專利附圖】
【附圖說明】
[0027] 圖1為壓縮代碼的生成過程示意圖;
[0028] 圖2為本發(fā)明實施嵌入式系統(tǒng)可執(zhí)行代碼壓縮方法的示意圖;
[0029] 圖3為本發(fā)明實施扭環(huán)移位產(chǎn)生的序列圖;
[0030] 圖4為本發(fā)明實施扭環(huán)移位字典壓縮的流程圖;
[0031] 圖5為本發(fā)明扭環(huán)移位字典壓縮的另一個實施例;
[0032] 圖6為本發(fā)明實施代碼解壓縮系統(tǒng)的示意圖;
[0033] 圖7為本發(fā)明實施指令執(zhí)行過程的流程圖;
【具體實施方式】
[0034] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,并參照 附圖,對本發(fā)明進(jìn)一步詳細(xì)說明。
[0035] 如圖1所示壓縮代碼的生成過程,將一個用戶程序經(jīng)過編譯程序100產(chǎn)生若干個 目標(biāo)模塊,然后將目標(biāo)模塊和它們所需要的庫函數(shù)文件通過鏈接程序200鏈接在一起,形 成可執(zhí)行二進(jìn)制代碼,通過壓縮程序300壓縮二進(jìn)制可執(zhí)行代碼,形成壓縮后的二進(jìn)制代 碼,將其載入存儲器400中。
[0036] 壓縮二進(jìn)制執(zhí)行代碼,目前現(xiàn)有技術(shù)常采用字典壓縮的方法。表1舉了 2個例子, 對字典壓縮進(jìn)行描述。第1列為待壓縮的原始可執(zhí)行代碼,在存儲器中是以2進(jìn)制形式儲 存,為了直觀,在表1中采用16進(jìn)制來表示,共6條指令,每條指令32比特。第2列為采用 哈夫曼編碼對指令進(jìn)行壓縮后的編碼。OXffffffff出現(xiàn)了 2次,該編碼出現(xiàn)的頻次在整個 代碼集合中與〇Xe24cb004并列第一,所以米用短的編碼來表不,于是用0來表不。為了在 解壓時,能準(zhǔn)確找出每條指令,根據(jù)哈夫曼的編碼規(guī)則,〇Xe24cb004只能編碼為10或11,這 里編碼為10。第3列為采用定長編碼對指令進(jìn)行壓縮后的編碼。原始二進(jìn)制代碼集合有4 個不同的編碼,所以采用定長編碼,2比特即可表示。
[0037] 表1字典壓縮舉例
[0038]
【權(quán)利要求】
1. 一種嵌入式系統(tǒng)可執(zhí)行代碼的壓縮方法,包括步驟如下: 步驟S1 :對二進(jìn)制代碼集合按該集合中各個不同編碼出現(xiàn)的次數(shù)進(jìn)行統(tǒng)計,得到編碼 出現(xiàn)次數(shù)的頻次表; 步驟S2 :對各個不同編碼出現(xiàn)的頻次進(jìn)行排序,出現(xiàn)頻次高的編碼排在前面,出現(xiàn)頻 次低的編碼排在后面,組成一個新的已排序的編碼頻次表; 步驟S3:根據(jù)編碼頻次表中的信息,采用分類算法,將所有出現(xiàn)的不同編碼分為r個 類; 步驟S4 :對可執(zhí)行二進(jìn)制代碼集合H的前r-1個類編碼分別采用不同索引長度的字典 進(jìn)行壓縮,對第r類編碼進(jìn)行扭環(huán)移位字典壓縮,構(gòu)建r個字典及其索引集合; 步驟S5 :將r個字典及其索引集合分別存入外部存儲器中。
2. 如權(quán)利要求1所述嵌入式系統(tǒng)可執(zhí)行代碼的壓縮方法,其特征在于,將包含m個不同 的編碼S的可執(zhí)行二進(jìn)制代碼集合H =以,S2,……,SJ,按其中每個編碼S出現(xiàn)次數(shù)的 多少對代碼集合H進(jìn)行分類;采用不同索引長度的字典對各分類進(jìn)行壓縮;每一類中不同 編碼的字典索引的長度相等,不同類的字典索引長度不等。
3. 如權(quán)利要求1所述嵌入式系統(tǒng)可執(zhí)行代碼的壓縮方法,其特征在于,所述扭環(huán)移位 序列的種子經(jīng)過扭環(huán)移位寄存器扭環(huán)左移位或扭環(huán)右移位后,得到新的扭環(huán)移位數(shù)據(jù)序 列,若該新的扭環(huán)移位數(shù)據(jù)序列與代碼集合H中的編碼S相同,則用扭環(huán)移位序列的種子來 表征編碼S。
4. 如權(quán)利要求1所述嵌入式系統(tǒng)可執(zhí)行代碼的壓縮方法,其特征在于,利用扭環(huán)移位 序列對第r類編碼進(jìn)行壓縮,只將種子信息存儲在外部存儲器中。
5. 如權(quán)利要求1所述嵌入式系統(tǒng)可執(zhí)行代碼的壓縮方法,其特征在于,對第1類編碼進(jìn) 行扭環(huán)移位字典壓縮時,尋找種子步驟如下: 步驟S41 :對第r類編碼進(jìn)行頻次統(tǒng)計和排序; 步驟S42 :以第r類中頻次高的n比特編碼作為種子進(jìn)行扭環(huán)移位,該種子將產(chǎn)生2n個 扭環(huán)移位數(shù)據(jù)序列; 步驟S43 :將這2n個扭環(huán)移位數(shù)據(jù)序列分別與第r類編碼中的每個編碼進(jìn)行比較,若 第r類編碼中存在編碼與所述2n個扭環(huán)移位數(shù)據(jù)序列中的某個扭環(huán)移位數(shù)據(jù)序列完全相 同,則記錄下種子扭環(huán)移位得到該編碼需要的扭環(huán)移位次數(shù)x,把種子存入種子集合U,并 從第r類中摘除該編碼,轉(zhuǎn)步驟S44 ;若第r類編碼中沒有編碼與這2n個扭環(huán)移位數(shù)據(jù)序 列中的某個數(shù)據(jù)序列相同,則取頻次第二高的編碼作為種子,轉(zhuǎn)步驟S42 ; 步驟S44 :若遍歷到了第r類中頻次最低的最后一個編碼,則轉(zhuǎn)步驟S45,否則轉(zhuǎn)步驟 S42 ; 步驟S45 :將種子集合U作為字典,并建立其索引,索引即是壓縮后的代碼Gp
6. 如權(quán)利要求5所述嵌入式系統(tǒng)可執(zhí)行代碼的壓縮方法,其特征在于,在所述索引中 加入扭環(huán)移位次數(shù)x,使扭環(huán)移位解壓邏輯能通過種子信息和扭環(huán)移位次數(shù)x解壓出該編 碼。
7. -種使用權(quán)利要求1所述的嵌入式系統(tǒng)可執(zhí)行代碼壓縮方法的解壓縮系統(tǒng),其特征 在于包括:中央處理器、緩沖存儲器、地址映射緩存、緩沖裝載邏輯單元、扭環(huán)移位序列產(chǎn)生 器、r個字典、外部存儲器;其中: 中央處理器與緩沖存儲器和地址映射緩存相連;中央處理器的數(shù)據(jù)總線輸出信息給緩 沖存儲器,也從緩沖存儲器獲取輸入信息;中央處理器的地址總線輸出信息給地址映射緩 存,也從地址映射緩存獲取輸入信息;中央處理器通過控制總線控制信息的流向; 緩沖存儲器與緩存裝載邏輯單元相連,緩沖存儲器從緩存裝載邏輯單元獲得通過索引 查字典所得到的原始二進(jìn)制代碼集合中的指令編碼,緩存裝載邏輯單元從緩沖存儲器接收 命令并對自身的數(shù)據(jù)進(jìn)行更新; 地址映射緩存與緩存裝載邏輯單元相連,地址映射緩存從緩存裝載邏輯單元獲得解壓 縮后的代碼在外部存儲器中的地址,緩存裝載邏輯單元從地址映射緩存單元接收命令對自 身的地址數(shù)據(jù)進(jìn)行更新; 緩存裝載邏輯單元分別與扭環(huán)移位序列發(fā)生器及r個字典相連;扭環(huán)移位序列發(fā)生器 和r個字典輸出字典中的數(shù)據(jù)序列發(fā)送給緩存裝載邏輯單元; 扭環(huán)移位序列發(fā)生器和1個字典分別與外部存儲器相連;外部存儲器的輸出數(shù)據(jù)分別 發(fā)送到扭環(huán)移位序列發(fā)生器和1個字典;在計算機上編寫代碼壓縮算法,用于壓縮可執(zhí)行 二進(jìn)制代碼、壓縮第r類編碼扭環(huán)移位字典,構(gòu)建r個字典及其索引集合,壓縮后的代碼存 儲在外部存儲器中; 中央處理器在代碼解壓時,將外部存儲器的字典載入中央處理器的內(nèi)部存儲器中,通 過解壓縮邏輯中的地址映射邏輯,找到待解壓的指令所對應(yīng)的索引,以該索引查找其所對 應(yīng)的字典條目,該字典條目的值即是二進(jìn)制代碼集合中的指令編碼。
8. 根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述r個字典,對應(yīng)于二進(jìn)制代碼集合H 的r個分類;每一類中不同編碼的字典索引的長度相等,不同類的字典索引長度不等;r個 字典的索引及字典條目存儲在外部存儲器中;程序執(zhí)行時,先將字典條目裝載入中央處理 器的內(nèi)部存儲器中。
9. 根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述扭環(huán)移位序列產(chǎn)生器,對扭環(huán)移位序 列的種子扭環(huán)左移位或扭環(huán)右移位,在規(guī)定的扭環(huán)移位次數(shù)下,得到新的扭環(huán)移位數(shù)據(jù)序 列,該數(shù)據(jù)序列即可表征編碼S。
【文檔編號】G06F9/32GK104331269SQ201410589995
【公開日】2015年2月4日 申請日期:2014年10月28日 優(yōu)先權(quán)日:2014年10月28日
【發(fā)明者】涂吉, 王子龍, 李立健, 鄭美松, 王駿也 申請人:中國科學(xué)院自動化研究所