本發(fā)明涉及一種微處理器技術(shù),特別涉及一種基于散列的加速壓縮方法以及使用此方法的裝置。
背景技術(shù):
::對于壓縮加速器(compressionaccelerator)來說,最復(fù)雜的部分在于進行最長前綴字符串匹配(longest-prefixstringmatching),而最長前綴字符串匹配方法通常可歸類為:基于內(nèi)容可尋址內(nèi)存(cam-,contentaddressablememory-based);及基于散列(hash-based)二種?;谏⒘械淖址ヅ渫ǔ6冀逵山档蜕⒘墟滈L度和/或使用低沖突函數(shù)來進行優(yōu)化,而上述優(yōu)化均為軟件算法上的優(yōu)化。然而,軟件的執(zhí)行效能往往劣于專屬硬件的執(zhí)行效能。因此,需要一種基于散列的加速壓縮方法以及使用此方法的裝置,用以克服上述缺陷。技術(shù)實現(xiàn)要素:本發(fā)明的實施例提出一種基于散列的加速壓縮方法,實施于微處理器的壓縮加速器中,至少包含以下步驟:從數(shù)據(jù)緩存器提取待壓縮字符串;存儲相應(yīng)于待壓縮字符串的多個實例于中介緩存器,其中,每一實例關(guān)聯(lián)于子字符串,包含關(guān)聯(lián)的子字符串的狀態(tài)、匹配長度及匹配偏移量;為每一實例發(fā)送散列請求給散列匹配器,并且依據(jù)散列匹配器傳來的第一回復(fù)發(fā)送數(shù)據(jù)請求給最長字串匹配器,并且依據(jù)最長字串匹配器傳來的第二回復(fù)更新實例的狀態(tài)、匹配長度及匹配偏移量;以及按照實例關(guān)聯(lián)的子字符串在待壓縮字符串中的原始順序,并依據(jù)每一實例的狀態(tài)、匹配長度及匹配偏移量輸出結(jié)果給格式化器,使得格式化器據(jù)以壓縮待壓縮字符串。本發(fā)明的實施例提出一種基于散列的加速壓縮裝置,至少包含:中介緩存器;及有限狀態(tài)機。中介緩存器存儲相應(yīng)于數(shù)據(jù)緩存器中的待壓縮字符串的多個實例,其中,每一實例關(guān)聯(lián)于子字符串,包含關(guān)聯(lián)的子字符串的狀態(tài)、匹配長度及匹配偏移量。有限狀態(tài)機耦接于中介緩存器,為每一實例發(fā)送散列請求給散列匹配器,并且依據(jù)散列匹配器傳來的第一回復(fù)發(fā)送數(shù)據(jù)請求給最長字串匹配器,并且依據(jù)最長字串匹配器傳來的第二回復(fù)更新實例的狀態(tài)、匹配長度及匹配偏移量;以及按照實例關(guān)聯(lián)的子字符串在待壓縮字符串中的原始順序,并依據(jù)每一實例的狀態(tài)、匹配長度及匹配偏移量輸出結(jié)果給格式化器,使得格式化器據(jù)以壓縮待壓縮字符串。本發(fā)明的實施例提出一種基于散列的加速壓縮裝置,至少包含:有限狀態(tài)機;及散列匹配器。散列匹配器耦接于有限狀態(tài)機,包含:多個散列函數(shù);選擇器,耦接于散列函數(shù);以及對應(yīng)于多個散列函數(shù)的多個匹配路徑,耦接至選擇器。多個散列函數(shù)并行接收有限狀態(tài)機傳來的多個子字符串,并將每一子字符串映射成散列索引,及依據(jù)散列索引驅(qū)動選擇器以連接至匹配路徑中的一個。當(dāng)連接的匹配路徑判定散列表不包含子字符串時,傳送不匹配的信息給有限狀態(tài)機。當(dāng)連接的匹配路徑判定散列表包含子字符串時,傳送匹配的信息及散列表中相應(yīng)于子字符串的匹配偏移量給有限狀態(tài)機。本發(fā)明的前述有限狀態(tài)機可以在同一時鐘周期同時輸出多個散列請求分別給多個散列函數(shù)并行進行散列匹配,并且藉由本發(fā)明之中介緩存器記錄各實例的狀態(tài)、匹配長度及匹配偏移量,使得亂序執(zhí)行散列匹配和最長匹配后的實例能夠按照待壓縮字符串中的原始順序退卻以進行壓縮。附圖說明圖1是依據(jù)本發(fā)明實施例的微處理器的系統(tǒng)架構(gòu)圖。圖2是依據(jù)本發(fā)明實施例的壓縮加速器的方塊圖。圖3是依據(jù)本發(fā)明實施例的狀態(tài)圖。圖4是依據(jù)本發(fā)明實施例的散列請求程序的流程圖。圖5是依據(jù)本發(fā)明實施例的散列回復(fù)處理程序的流程圖。圖6是依據(jù)本發(fā)明實施例的數(shù)據(jù)回復(fù)處理程序的流程圖。圖7是依據(jù)本發(fā)明實施例的退卻處理程序的流程圖。圖8是依據(jù)本發(fā)明實施例的散列匹配器的方塊圖。圖9是依據(jù)本發(fā)明實施例的匹配器的方塊圖。圖10是依據(jù)本發(fā)明實施例的散列匹配方法的流程圖?!痉栒f明】10微處理器;110末級快??;130加速器接口;150_1~150_i壓縮加速器;170_1~170_j處理器內(nèi)核;20壓縮加速器;210數(shù)據(jù)緩存器;220提取單元;230中介緩存器;240有限狀態(tài)機;250散列匹配器;260最長字串匹配器;270格式化器;280預(yù)取緩存器;s31空閑狀態(tài);s32散列請求狀態(tài);s33數(shù)據(jù)請求狀態(tài);s34不匹配狀態(tài);s36完全匹配狀態(tài);s37部分匹配狀態(tài);s410~s470方法步驟;s510~s577方法步驟;s610~s695方法步驟;s710~s770方法步驟;810_1~810_4散列函數(shù);830選擇器;850_1~850_4先進先出隊列;870_1~870_4匹配器;890_1~890_4存儲器庫;910_1~910_3比較器;930仲裁器;s1010~s1077方法步驟。具體實施方式以下說明為完成發(fā)明的優(yōu)選實現(xiàn)方式,其目的在于描述本發(fā)明的基本精神,但并不用以限定本發(fā)明。實際的
發(fā)明內(nèi)容必須參考之后的權(quán)利要求范圍。必須了解的是,使用于本說明書中的“包含”、“包括”等詞,用以表示存在特定的技術(shù)特征、數(shù)值、方法步驟、作業(yè)處理、元件和/或組件,但并不排除可加上更多的技術(shù)特征、數(shù)值、方法步驟、作業(yè)處理、元件、組件,或以上的任意組合。在權(quán)利要求中使用如“第一”、“第二”、“第三”等詞用來修飾權(quán)利要求中的元件,并非用來表示之間具有優(yōu)先權(quán)順序,先行關(guān)系,或者是一個元件先于另一個元件,或者是執(zhí)行方法步驟時的時間先后順序,僅用來區(qū)別具有相同名字的元件。圖1是依據(jù)本發(fā)明實施例的微處理器的系統(tǒng)架構(gòu)圖。微處理器10可包含多個處理器內(nèi)核170_1至170_j及多個加速器(accelerator)150_1至150_i,i、j為整數(shù),隨著不同設(shè)計需求而有不同。加速器150_1至150_i舉例而言可以是加速功能單元(afu,acceleratorfunctionalunits)。處理器內(nèi)核170_1至170_j中的任何一個包含的組件都涉及計算機指令的執(zhí)行,包括算術(shù)邏輯單元(alu,arithmeticlogicunit)、浮點運算單元(fpu,floatingpointunit)、一級快取(l1cache)及二級快取(l2cache)。每一處理器內(nèi)核采用指令周期(有時亦稱提取-解碼-執(zhí)行周期),作為基本操作流程。此流程用以讓處理器內(nèi)核從存儲器取得程序指令,判定此指令指示進行何種操作,并且執(zhí)行這些操作。加速器150_1至150_n可執(zhí)行不同功能,并通過加速器接口(acceleratorinterface)130連接至末級快取(last-levelcache)110,用以與處理器內(nèi)核170_1至170_j通過虛擬地址(virtualaddress)進行數(shù)據(jù)交換。加速器150_1至150_i中的任何一個可協(xié)助處理器內(nèi)核170_1至170_j以更有效率地方式執(zhí)行特定功能,上述特定功能包括例如壓縮,加解密或正則匹配等運算量較大的功能,從而減輕處理器內(nèi)核170_1至170_j的工作負擔(dān)。加速器150_1至150_i中的一個可為壓縮加速器(compressionaccelerator),用以完成字符串壓縮功能。圖2是依據(jù)本發(fā)明實施例的壓縮加速器的方塊圖。壓縮加速器20包含數(shù)據(jù)緩存器210,長度可為1024m字節(jié)(bytes),用以存儲原始字符串(rawstring)及壓縮后字符串(compressedstring),值得注意的是,在其它實施例中,數(shù)據(jù)緩存器210可以位于例如圖1的末級快取110中,即位于壓縮加速器20外部。提取單元220每次向數(shù)據(jù)緩存器210發(fā)出預(yù)取請求(lookaheadrequest),用以從數(shù)據(jù)緩存器210提取固定長度的待壓縮的原始字符串,例如16字節(jié),并存儲至預(yù)取緩存器(lookaheadbuffer)280中,作為進行字符串壓縮的對象。該待壓縮字符串更按序存儲至中介緩存器(intermediarybuffer)230中,中介緩存器230存儲關(guān)聯(lián)于每一個字符的散列及最長字串匹配的相關(guān)運算信息。詳細來說,中介緩存器230劃分出多段存儲器空間,每段可用來存儲一個實例(instance)的信息。每個實例包含數(shù)個字段,用以記錄索引、字符、狀態(tài)、匹配偏移量(matchedoffset)及匹配長度(matchedlength)等。由于壓縮加速器20包含許多并行運算,使得相應(yīng)于每一個實例的運算時間(或稱時鐘周期數(shù)目)無法預(yù)測,也就是說,相應(yīng)于較后實例的運算結(jié)果可能早于相應(yīng)于較前實例的運算結(jié)果。因此,本發(fā)明通過中介緩存器230讓所有實例的計算結(jié)果的輸出順序相符于待壓縮的原始字符的原始順序,據(jù)以完成最終的最長字串匹配。中介緩存器230還包含發(fā)布指針(issuancepointer)及退卻指針(retirementpointer),分別指向下一個需要發(fā)出散列請求及退卻的實例。在初始時,提取單元220從數(shù)據(jù)緩存器210的待壓縮的原始字符串提取多個字符并依序?qū)懭胫薪榫彺嫫?30的實例。有限狀態(tài)機(fsm,finite-statemachine)240可發(fā)出散列請求(hashrequest)給散列匹配器(hashmatcher)250,用以取得相應(yīng)于一個實例且長度為n的字符串是否可匹配散列表(hashtable)中的一個散列鍵的信息。在一些實施例中,n為3或以上。有限狀態(tài)機240另可針對一個實例發(fā)出數(shù)據(jù)請求(datarequest)給最長字串匹配器(longeststringmatcher)260,用以取得相應(yīng)于一個實例的字符串以后可匹配到數(shù)據(jù)緩存器210的滑動窗(slidingwindow)中的原始字符串的長度。應(yīng)注意的是,滑動窗中的原始字符串位于中介緩存器230中的待壓縮的原始字符串之前,即滑動窗中的原始字符串是已經(jīng)被壓縮過的字符串。有限狀態(tài)機240可于可編程邏輯裝置(pld,programmablelogicdevice)、可編程控制器(plc,programmablelogiccontroller)、現(xiàn)場可編程門陣列(fpga,fieldprogrammablegatearray)或特殊應(yīng)用集成電路(asic,application-specificintegratedcircuit)中實現(xiàn)固定功能(fixedfunctions)來完成本發(fā)明實施例中描述的控制。圖3是依據(jù)本發(fā)明實施例的狀態(tài)圖。初始時,提取單元220從數(shù)據(jù)緩存器210的原始字符串提取固定長度的待壓縮的字符串并依序存儲其中的字符至中介緩存器230的實例。舉例來說,提取單元220從數(shù)據(jù)緩存器210提取字符串”abcdxyzefgaf”并依序存儲其中的字符至中介緩存器230。初始時,每個實例的狀態(tài)為空閑狀態(tài)(idlestate)s31,可表示為虛無值(nullvalue)。表1顯示實例的初始結(jié)果:表1索引字符狀態(tài)匹配長度(len)匹配偏移量(offset)0a/1b/2c/3d/4x/5y/6z/7e/8f/9g/10a/11f/其中,符號“/”代表虛無值。基于散列的加速壓縮方法包含數(shù)個程序:散列請求;散列回復(fù)處理;數(shù)據(jù)回復(fù)處理;及退卻處理。散列請求及退卻處理為并行處理程序,并且擁有較高的優(yōu)先級。圖4是依據(jù)本發(fā)明實施例的散列請求程序的流程圖。在每一個時鐘周期,有限狀態(tài)機240取得發(fā)布指針指向的實例(步驟s410),為取得的實例發(fā)出散列請求給散列匹配器250(步驟s430),更新此實例的狀態(tài)為“hash_issued”以指出此實例進入散列請求狀態(tài)s32(步驟s450),以及更新發(fā)布指針以指向下一個實例(步驟s470)。散列請求包含從此實例開始且長度為n的連續(xù)實例的字符,例如,參考表1,相應(yīng)于實例0的散列請求包含字符串“abc”,相應(yīng)于實例1的散列請求包含字符串“bcd”,依此類推。字符串“abc”及“bcd”可稱為字符串“abcdxyzefgaf”的子字符串(substring)。圖5是依據(jù)本發(fā)明實施例的散列回復(fù)處理程序的流程圖。當(dāng)有限狀態(tài)機240從散列匹配器250接收到相應(yīng)于一個實例的回復(fù)后(步驟s510),判斷回復(fù)中是否包含匹配的信息(步驟s530)。當(dāng)回復(fù)中包含不匹配的信息時(步驟s530中“否”的路徑),更新此實例的狀態(tài)為“nm”以指出此實例進入不匹配狀態(tài)s34(步驟s550)。從散列匹配器250接收到的回復(fù)中包含先前請求的字符串,用以讓有限狀態(tài)機240辨認此回復(fù)相應(yīng)于哪個實例。當(dāng)一個實例進入不匹配狀態(tài)s34時,有限狀態(tài)機240便可于將來的時鐘周期回收此實例的存儲器空間給將來產(chǎn)生的實例使用。當(dāng)回復(fù)中包含匹配的信息時(步驟s530中“是”的路徑),有限狀態(tài)機240從回復(fù)中取得匹配偏移量(步驟s571),發(fā)出相應(yīng)于此實例的數(shù)據(jù)請求給最長字串匹配器260,其中,數(shù)據(jù)請求包含上述匹配偏移量,用以讓最長字串匹配器260搜尋中介緩存器230中相應(yīng)于此實例的字符串開始的字符串及數(shù)據(jù)緩存器210的滑動窗(slidingwindow)中從該匹配偏移量開始的字符串兩者之間的最大匹配長度(步驟s573),更新此實例的匹配長度為n(步驟s575),以及更新此實例的狀態(tài)為”data_issued”以指出此實例進入數(shù)據(jù)請求狀態(tài)s33(步驟s577)。舉例來說,經(jīng)過7個時鐘周期后,有限狀態(tài)機240依據(jù)散列匹配器250及最長字串匹配器260的回復(fù)結(jié)果將中介緩存器230的實例狀態(tài)更新為表2:表2索引字符狀態(tài)匹配長度(len)匹配偏移量(offset)0anm1bhash_issued2cnm3dnm4xdata_issued310005ynm6znm7e/8f/9g/10a/11f/表2顯示相應(yīng)于實例0至6的散列請求已經(jīng)發(fā)出給散列匹配器250。有限狀態(tài)機240已經(jīng)從散列匹配器250接收到相應(yīng)于實例0、2至3及5至6的回復(fù),其中包含沒有匹配的信息,即均為nm(nomatch),即是說實例0、2至3及5至6對應(yīng)的字符串“abc”“cdx”“dxy”“yze”“zef”均未在散列匹配器250中匹配,即均未在數(shù)據(jù)緩存器210的滑動窗(slidingwindow)中的原始字符串出現(xiàn)過。有限狀態(tài)機240已經(jīng)從散列匹配器250接收到相應(yīng)于實例4的回復(fù),其中包含匹配的信息,以及已經(jīng)發(fā)出數(shù)據(jù)請求給最長字串匹配器260但尚未接收到任何回復(fù),即實例4對應(yīng)的字符串“xyz”在散列匹配器250中匹配,即字符串“xyz”在數(shù)據(jù)緩存器210的滑動窗中的原始字符串出現(xiàn)過;有限狀態(tài)機240取得實例4對應(yīng)的字符串“xyz”在滑動窗中的匹配偏移量offset,并發(fā)出包含該匹配偏移量offset的數(shù)據(jù)請求給最長字串匹配器260,用以搜尋中介緩存器230中相應(yīng)于實例4的字符串”xyz”開始的字符串及數(shù)據(jù)緩存器210的滑動窗中從偏移量1000開始的字符串兩者之間的最大匹配長度。此外,有限狀態(tài)機240尚未從散列匹配器250接收到相應(yīng)于實例1的任何回復(fù)。值得注意的是,在其它實施中,有限狀態(tài)機240從回復(fù)中取得匹配偏移量(步驟s571)后直接發(fā)出相應(yīng)于此實例的數(shù)據(jù)請求給最長字串匹配器260,并不會更新中介緩存器230中此實例的內(nèi)容,即不會執(zhí)行步驟s575和步驟s577。圖6是依據(jù)本發(fā)明實施例的數(shù)據(jù)回復(fù)處理程序的流程圖。當(dāng)有限狀態(tài)機240從最長字串匹配器260接收到相應(yīng)于一個實例的回復(fù)后(步驟s610),從回復(fù)中取得最長字串匹配器260計算出的長度l(步驟s630),以及判斷長度l是否小于最大匹配長度max_match(步驟s650)。當(dāng)長度l小于最大匹配長度max_match時(步驟s650中“是”的路徑),更新此實例的狀態(tài)為“pm”以指出此實例進入部分匹配狀態(tài)s37(步驟s671),以及更新此實例的匹配長度len=len+l(步驟s673)。當(dāng)一個實例進入部分匹配狀態(tài)s37時,有限狀態(tài)機240便可于將來的時鐘周期回收此實例的存儲器空間給將來產(chǎn)生的實例使用。當(dāng)長度l不小于(通常為等于)最大匹配長度max_match時(步驟s650中“否”的路徑),更新此實例的狀態(tài)為”fm”以指出此實例進入完全匹配狀態(tài)s36(步驟s691),更新此實例的匹配長度為len=len+max_match(步驟s693),以及發(fā)出相應(yīng)于此實例的另一數(shù)據(jù)請求給最長字串匹配器260,用以繼續(xù)后續(xù)的字串比對(步驟s695)。值得注意的是,在圖5如果不執(zhí)行更新中介緩存器230中實例的內(nèi)容的步驟,則圖6中更新匹配長度時len還要加上實例所對應(yīng)的子字符串的長度n(例如n=3)。在一個時鐘周期中,有限狀態(tài)機240除了執(zhí)行散列請求程序,更執(zhí)行退卻處理程序。圖7是依據(jù)本發(fā)明實施例的退卻處理程序的流程圖。在每一個時鐘周期,有限狀態(tài)機240取得退卻指針指向的實例的狀態(tài)(步驟s710),判斷中介緩存器230中此實例的狀態(tài)是否為不匹配狀態(tài)(步驟s731)。當(dāng)此實例的狀態(tài)是不匹配狀態(tài)時(步驟s731中“是”的路徑),輸出此實例的字符給格式化器270,使得格式化器270可據(jù)以壓縮預(yù)取緩存器280中的待壓縮字符串(步驟s733),更新此實例的狀態(tài)為虛無值并更新退卻指針以指向下一個實例,用以退卻此實例,使得此存儲器空間可提供給將來推入的實例(步驟s770)。當(dāng)此實例的狀態(tài)不是不匹配狀態(tài)時(步驟s731中“否”的路徑),判斷中介緩存器230中此實例的狀態(tài)是否為部分匹配狀態(tài)(步驟s751)。當(dāng)此實例的狀態(tài)是部分匹配狀態(tài)時(步驟s751中“是”的路徑),輸出此實例的匹配偏移量及匹配長度給格式化器270,使得格式化器270可據(jù)以壓縮預(yù)取緩存器280中的待壓縮字符串(步驟s753),更新此實例的狀態(tài)為虛無值并更新退卻指針以指向下一個實例,用以退卻此實例,使得此存儲器空間可提供給將來推入的實例(步驟s770)。格式化器270可使用lz4、lzo(lempel-ziv-oberhumer)、deflate等算法來壓縮待壓縮的原始字符串。當(dāng)此實例的狀態(tài)為匹配但不是部分匹配狀態(tài)時(步驟s751中“否”的路徑),即為完全匹配時,則如圖6s691所述,有限狀態(tài)機240會發(fā)出相應(yīng)于此實例的另一數(shù)據(jù)請求給最長字串匹配器260用以繼續(xù)后續(xù)的字串比對,而并不會執(zhí)行該實例的退卻程序,在圖7中步驟s751中“否”的路徑會返回步驟s710繼續(xù)等待該實例狀態(tài)的變化。概括地說,有限狀態(tài)機240在圖7的執(zhí)行退卻處理程序時,是按照中介緩存器230中各個實例關(guān)聯(lián)的子字符串在待壓縮字符串中的原始順序(例如退卻指針依照的順序),并依據(jù)每一實例在中介緩存器230中對應(yīng)狀態(tài)、匹配長度及匹配偏移量(如后續(xù)表2至表5所示)輸出結(jié)果給格式化器270,使得格式化器270據(jù)以壓縮待壓縮的原始字符串。后面會配合表2至表5詳述。接續(xù)表2的范例。假設(shè)在時鐘周期c7,發(fā)布指針指向?qū)嵗?,退卻指針指向?qū)嵗?,最大匹配長度max_match預(yù)設(shè)為16,且有限狀態(tài)機240從最長字串匹配器260接收到相應(yīng)于實例4的回復(fù):參考圖4。在此時鐘周期,有限狀態(tài)機240取得發(fā)布指針指向的實例7(步驟s410),為實例7發(fā)出散列請求給散列匹配器250,其中包含字符串“efg”(步驟s430),更新實例7的狀態(tài)為”hash_issued”以指出實例7進入散列請求狀態(tài)s32(步驟s450),以及更新發(fā)布指針以指向?qū)嵗?(步驟s470)。參考圖7。有限狀態(tài)機240取得退卻指針指向的實例0的狀態(tài)(步驟s710)。因為實例0的狀態(tài)為不匹配狀態(tài),有限狀態(tài)機240輸出實例0的字符”a”給格式化器270,使得格式化器270可據(jù)以壓縮預(yù)取緩存器280中的待壓縮的原始字符串(步驟s733),因為實例0的狀態(tài)為不匹配狀態(tài),這里字符”a”保留不做壓縮動作;并且讓數(shù)據(jù)緩存器210的中滑動窗向前移動一個字符,即讓數(shù)據(jù)緩存器210的中的字符”a”滑動進入其滑動窗中成為新字典的一部分,更新實例0的狀態(tài)為虛無值”/”并更新退卻指針以指向?qū)嵗?(步驟s770)。參考圖6。在此時鐘周期,有限狀態(tài)機240從相應(yīng)于實例4的回復(fù)中取得最長字串匹配器260計算出的長度l=2(步驟s630)。因為l<max_match,更新實例4的狀態(tài)為”pm”以指出實例4進入部分匹配狀態(tài)s37(步驟s671),以及更新實例4的匹配長度len=3+2=5(步驟s673)。中介緩存器230的實例狀態(tài)更新為表3:表3索引字符狀態(tài)匹配長度(len)匹配偏移量(offset)0/1bhash_issued2cnm3dnm4xpm510005ynm6znm7ehash_issued8f/9g/10a/11f/接續(xù)表3的范例。假設(shè)在時鐘周期c8,有限狀態(tài)機240從散列匹配器250接收到相應(yīng)于實例1的回復(fù):參考圖4。于此時鐘周期,有限狀態(tài)機240取得發(fā)布指針指向的實例8(步驟s410),為實例8發(fā)出散列請求給散列匹配器250,其中包含字符串“fga”(步驟s430),更新實例8的狀態(tài)為“hash_issued”以指出實例8進入散列請求狀態(tài)s32(步驟s450),以及更新發(fā)布指針以指向?qū)嵗?(步驟s470)。參考圖7。有限狀態(tài)機240取得退卻指針指向的實例1的狀態(tài)(步驟s710)。因為實例1的狀態(tài)為散列請求狀態(tài),有限狀態(tài)機240不做任何處理。參考圖5。于此時鐘周期,有限狀態(tài)機240從散列匹配器250接收到相應(yīng)于實例1的回復(fù)(步驟s510)。因為回復(fù)中包含不匹配的信息,更新實例1的狀態(tài)為”nm”以指出實例1進入不匹配狀態(tài)s34(步驟s550)。中介緩存器230的實例狀態(tài)更新為表4:表4索引字符狀態(tài)匹配長度(len)匹配偏移量(offset)0a/1bnm2cnm3dnm4xpm510005ynm6znm7ehash_issued8fhash_issued9g/10a/11f/接續(xù)表4的范例。假設(shè)在時鐘周期c9,有限狀態(tài)機240從散列匹配器250接收到相應(yīng)于實例7的回復(fù):參考圖4。在此時鐘周期,有限狀態(tài)機240取得發(fā)布指針指向的實例9(步驟s410),為實例9發(fā)出散列請求給散列匹配器250,其中包含字符串“gaf”(步驟s430),更新實例9的狀態(tài)為“hash_issued”以指出實例9進入散列請求狀態(tài)s32(步驟s450),以及更新發(fā)布指針以指向?qū)嵗?0(步驟s470)。參考圖7。有限狀態(tài)機240取得退卻指針指向的實例1的狀態(tài)(步驟s710)。因為實例1的狀態(tài)為不匹配狀態(tài),有限狀態(tài)機240輸出實例1的字符“b”給格式化器270,使得格式化器270可據(jù)以壓縮預(yù)取緩存器280中的待壓縮的原始字符串(步驟s733),因為實例1的狀態(tài)為不匹配狀態(tài),這里字符”b”保留不做壓縮動作;并且讓數(shù)據(jù)緩存器210的中滑動窗向前移動一個字符,即讓數(shù)據(jù)緩存器210的中的字符“b”滑動進入其滑動窗中成為新字典的一部分,更新實例1的狀態(tài)為虛無值“/”并更新退卻指針以指向?qū)嵗?(步驟s770)。參考圖5。在此時鐘周期,有限狀態(tài)機240從散列匹配器250接收到相應(yīng)于實例7的回復(fù)(步驟s510)。因為回復(fù)中包含不匹配的信息,更新實例7的狀態(tài)為“nm”以指出實例7進入不匹配狀態(tài)s34(步驟s550)。中介緩存器230的實例狀態(tài)更新為表5:表5索引字符狀態(tài)匹配長度(len)匹配偏移量(offset)0a/1b/2cnm3dnm4xpm510005ynm6znm7enm8fhash_issued9ghash_issued10a/11f/參考圖7。經(jīng)過一段時間,當(dāng)有限狀態(tài)機240取得退卻指針指向的實例4的狀態(tài)(步驟s710)。值得注意的是,在此之前,預(yù)取緩存器280中的待壓縮的原始字符串中的字符“c”和“d”均為不匹配,因此保留不做壓縮動作;并且數(shù)據(jù)緩存器210的中的字符“c”和“d”也已經(jīng)滑動進入其滑動窗中成為新字典的一部分。在本時鐘周期,因為實例4的狀態(tài)為部分匹配狀態(tài),有限狀態(tài)機240輸出實例4的匹配偏移量offset=1000及匹配長度len=5給格式化器270,使得格式化器270可據(jù)以壓縮預(yù)取緩存器280中的待壓縮的原始字符串(步驟s753),因為實例4的狀態(tài)為部分匹配狀態(tài)且匹配長度len=5,因此預(yù)取緩存器280中的字符“xyzef”以(offset,len)代替,即以(1000,5)代替;并且讓數(shù)據(jù)緩存器210的中滑動窗向前移動5個字符,即讓數(shù)據(jù)緩存器210的中的字符”xyzef”滑動進入其滑動窗中成為新字典的一部分。如以上范例所示,雖然有限狀態(tài)機240依實例的先后順序發(fā)出相應(yīng)的散列請求來啟動壓縮程序,應(yīng)注意的是,但因為散列匹配器250及最長字串匹配器260的運算時間無法預(yù)期,使得每個實例無法依原來的順序進入不匹配狀態(tài)s340或部分匹配狀態(tài)s370。盡管每個實例無法依原來的順序進入不匹配狀態(tài)s340或部分匹配狀態(tài)s370,通過以上所述的實施例,有限狀態(tài)機240還是可根據(jù)退卻指針依原來順序輸出相應(yīng)于每個實例的散列匹配器250及最長字串匹配器260的運算結(jié)果給格式化器270。圖8是依據(jù)本發(fā)明實施例的散列匹配器的方塊圖。為加速散列匹配,散列匹配器可包含多個可平行處理的匹配路徑,每一個路徑包含先進先出隊列、匹配器及存儲器庫(memorybank)。例如,第一匹配路徑包含先進先出隊列850_1、匹配器870_1及存儲器庫890_1,第二匹配路徑包含先進先出隊列850_2、匹配器870_2及存儲器庫890_2,依此類推。散列函數(shù)(hashfunctions)810_1至810_4中的任何一個將有限狀態(tài)機240傳來的子字符串映射成散列索引(hashindex),依據(jù)上述散列索引驅(qū)動選擇器830以連接至匹配路徑中的一個,用以傳送此子字符串至連接上的匹配路徑。當(dāng)連接的匹配路徑判定散列表(hashtable)不包含此子字符串時,傳送不匹配的信息給有限狀態(tài)機240。當(dāng)連接的匹配路徑判定散列表包含此子字符串(即該子字符串在數(shù)據(jù)緩存器210的中的滑動窗中存在,例如散列表中包含實例4對應(yīng)的子字符串”xyz”,即說明子字符串”xyz”在數(shù)據(jù)緩存器210的中的滑動窗中存在)時,傳送匹配的信息及散列表中相應(yīng)于此子字符串的匹配偏移量給有限狀態(tài)機240。雖然本發(fā)明實施例使用四套的匹配路徑說明,本領(lǐng)域技術(shù)人員可依據(jù)設(shè)計需求于散列匹配器250中配置較多或較少的匹配路徑,本發(fā)明并不因此受限。散列表分散存儲于四個存儲器庫(memorybanks)870_1至870_4。存儲器庫870_1至870_4可以快取存儲器(cache)實現(xiàn)。散列表包含n筆條目(entries)。存儲器庫870_1存儲第0筆至第(n/4-1)筆條目,存儲器庫870_2存儲第(n/4)筆至第(n/2-1)筆條目,存儲器庫870_3存儲第(n/2)筆至第(3n/4-1)筆條目,及存儲器庫870_4存儲第(3n/4)筆至第(n-1)筆條目,即散列表按照散列表地址高兩位來分布。在其它實施中,散列表也可以按照散列表地址的低兩位或者散列表地址的其他位來分布。在本實施例中,每筆條目可包含多個,例如三個散列鍵(hashkeys)的相關(guān)信息,而這三個散列鍵擁有相同的散列索引而形成散列鏈結(jié)(hashchain)。舉例來說,n為3且使用16字節(jié)存儲每筆條目的數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)如表6所示:表6每筆條目的第0字節(jié)存儲標簽“tag”,使用固定位置的3比特分別表示此條目中的三個散列鍵是否有效。例如,3比特“100”代表此筆條目中的第一散列鍵有效而第二及第三散列鍵無效,3比特“110”代表此筆條目中的第一及第二散列鍵有效而第三散列鍵無效,依此類推。每筆條目的第1至3字節(jié)存儲關(guān)聯(lián)于一個散列索引的第一散列鍵“hash_key_1”,表示滑動窗的原始字符串中包含第一散列鍵“hash_key_1”對應(yīng)的子字符串;第4至5字節(jié)存儲關(guān)聯(lián)于第一散列鍵的第一散列偏移量“hash_offset_1”,其代表滑動窗的原始字符串中所包含的第一散列鍵對應(yīng)的子字符串的偏移量。此條目的第6至8字節(jié)存儲關(guān)聯(lián)于相同散列索引的第二散列鍵“hash_key_2”,表示滑動窗的原始字符串中包含第二散列鍵“hash_key_2”對應(yīng)的子字符串;第9至10字節(jié)存儲關(guān)聯(lián)于第二散列鍵的第二散列偏移量“hash_offset_2”,其代表滑動窗的原始字符串中所包含的第二散列鍵對應(yīng)的子字符串的偏移量。此條目的第11至13字節(jié)存儲關(guān)聯(lián)于相同散列索引的第三散列鍵“hash_key_3”,表示滑動窗的原始字符串中包含第三散列鍵“hash_key_3”對應(yīng)的子字符串;第14至15字節(jié)存儲關(guān)聯(lián)于第三散列鍵的第三散列偏移量“hash_offset_3”,其代表滑動窗的原始字符串中所包含的第三散列鍵對應(yīng)的子字符串的偏移量。本領(lǐng)域技術(shù)人員可依據(jù)設(shè)計需求改變每筆條目的內(nèi)容,用以存儲更多或更少的散列鍵及關(guān)聯(lián)的散列偏移量,本發(fā)明并不因此受限。為了加速散列匹配,散列匹配器250可包含四個散列函數(shù)810_1至810_4,散列函數(shù)810_1至810_4執(zhí)行相同的算法,用以將任意的子字符串映射成固定長度的散列索引(hashindex)。散列索引的長度少于子字符串的長度。有限狀態(tài)機240可以以四發(fā)射(4-issue)的方式在同一時鐘周期同時輸出四個散列請求分別給散列函數(shù)810_1至810_4中的一個。散列函數(shù)810_1至810_4中的任何一個依據(jù)映射出的散列索引驅(qū)動選擇器830連接自己至先進先出隊列850_1至850_4中的一個,用以將散列請求推入連接的先進先出隊列。例如,當(dāng)散列函數(shù)810_1將字符串”abc”(亦即是子字串符)映射出散列索引“0”時,驅(qū)動選擇器830連接散列函數(shù)810_1至先進先出隊列850_1,用以將散列請求推入先進先出隊列850_1。在此須注意的是,散列請求包含有限狀態(tài)機240產(chǎn)生的字符串及相應(yīng)散列函數(shù)產(chǎn)生的散列索引。散列匹配器250可包含四個平行處理的匹配器(matchers)870_1至870_4分別連接于先進先出隊列850_1及存儲器庫890_1之間、先進先出隊列850_2及存儲器庫890_2之間、先進先出隊列850_3及存儲器庫890_3之間及先進先出隊列850_4及存儲器庫890_4之間。匹配器870_1至870_4中的任何一個從連接的先進先出隊列取出一個最早進入的散列請求,從其連接的存儲器庫找尋符合散列請求中的散列索引的條目,并且藉檢查找尋到的條目的標簽判斷是否存在有效的散列鍵。當(dāng)不存在有效的散列鍵時,匹配器判定找尋不到符合散列請求中的散列索引的條目,并且回復(fù)有限狀態(tài)機240關(guān)于散列請求中的字符串不匹配的信息。當(dāng)存在有效的散列鍵時,匹配器更判斷是否存在任何有效的散列鍵與散列請求中的字符串相同。當(dāng)所有有效的散列鍵與散列請求中的字符串不同時,匹配器回復(fù)有限狀態(tài)機240關(guān)于散列請求中的字符串不匹配的信息。當(dāng)存在一個有效的散列鍵與散列請求中的字符串相同時,此匹配器回復(fù)有限狀態(tài)機240關(guān)于散列請求中的字符串已匹配的信息及此散列鍵關(guān)聯(lián)的散列偏移量。圖9是依據(jù)本發(fā)明實施例的匹配器的方塊圖。雖然本發(fā)明實施例以匹配器870_1舉例說明,本領(lǐng)域技術(shù)人員可據(jù)以類推出匹配器870_2至870_4的技術(shù)細節(jié)。匹配器870_1包含比較器910_1至910_3及仲裁器930。比較器910_1從先進先出隊列850_1取得散列請求中的字符串以及從存儲器庫890_1中相應(yīng)條目的第一散列鍵及第一散列偏移量,以及判斷字符串與第一散列鍵是否相同。當(dāng)字符串與第一散列鍵相同時,比較器910_1輸出第一散列偏移量給仲裁器930。比較器910_2從先進先出隊列850_1取得散列請求中的字符串以及從存儲器庫890_1中相應(yīng)條目的第二散列鍵及第二散列偏移量,以及判斷字符串與第二散列鍵是否相同。當(dāng)字符串與第二散列鍵相同時,比較器910_2輸出第二散列偏移量給仲裁器930。比較器910_3從先進先出隊列850_1取得散列請求中的字符串以及從存儲器庫890_1中相應(yīng)條目的第三散列鍵及第三散列偏移量,以及判斷字符串與第三散列鍵是否相同。當(dāng)字符串與第三散列鍵相同時,比較器910_3輸出第三散列偏移量給仲裁器930。當(dāng)仲裁器930從比較器910_1至910_3沒有接收到任何散列偏移量時,回復(fù)有限狀態(tài)機240關(guān)于散列請求中的字符串不匹配的信息。當(dāng)仲裁器930從比較器910_1至910_3接收到一個散列偏移量時,回復(fù)有限狀態(tài)機240關(guān)于散列請求中的字符串已匹配的信息及接收到的散列偏移量。當(dāng)仲裁器930從比較器910_1至910_3接收到二個以上散列偏移量時,回復(fù)有限狀態(tài)機240關(guān)于散列請求中的字符串已匹配的信息及接收到的散列偏移量中的最小值。舉例而言,散列請求中的字符串“abc”,其通過散列函數(shù)810_1映射(或計算)出散列索引“0”時,對應(yīng)的存儲器庫890_1中相應(yīng)散列索引“0”的條目包括3個散列鍵及其散列偏移量:第一散列鍵“abc”(散列偏移量為50),第二散列鍵“xyz”(散列偏移量為100)及第三散列鍵“abc”(散列偏移量為200),值得注意的是,雖然散列鍵“abc”和“xyz”的鍵值不同,但有可能經(jīng)過散列函數(shù)810_1映射(或計算)出的散列索引卻相同,這跟散列函數(shù)的運算規(guī)則有關(guān),例如這里的散列鍵“abc”和“xyz”的散列索引均為“0”;此外,2個相同的散列鍵“abc”表示在滑動窗的原始字符串中的不同偏移位置出現(xiàn)了2次子字符串“abc”,但其散列偏移量不同。因為第一散列鍵“abc”和第三散列鍵“abc”均與散列請求中的字符串“abc”相同,因此比較器910_1和比較器910_3會分別輸出第一散列偏移量(50)和第三散列偏移量(200)給仲裁器930,此時仲裁器930會將字符串”abc”已匹配的信息及較小的散列偏移量50回復(fù)有限狀態(tài)機240。值得注意的是,在其它實施方式中,當(dāng)存儲器庫中的每個散列表條目有前述多個匹配(即多個散列鍵均為“abc”)時,仲裁器930會回復(fù)有限狀態(tài)機240關(guān)于散列請求中的字符串已匹配的信息,并且將所有匹配的散列偏移量均推送給有限狀態(tài)機240。本發(fā)明的前述有限狀態(tài)機可以在同一時鐘周期同時輸出多個散列請求分別給多個散列函數(shù)并行進行散列匹配,并且藉由本發(fā)明之中介緩存器記錄各實例的狀態(tài)、匹配長度及匹配偏移量,使得亂序執(zhí)行散列匹配和最長匹配后的實例能夠按照待壓縮字符串中的原始順序退卻以進行壓縮。圖10是依據(jù)本發(fā)明實施例的散列匹配方法的流程圖。散列函數(shù)810_1至810_4并行接收從有限狀態(tài)機240傳來的多個子字符串(步驟s1010)。接著,散列函數(shù)810_1將接收的子字符串映射成散列索引及依據(jù)散列索引驅(qū)動選擇器830連接至多個匹配路徑中的一個(步驟s1031),散列函數(shù)810_2將接收的子字符串映射成散列索引及依據(jù)散列索引驅(qū)動選擇器830連接至多個匹配路徑中的一個(步驟s1033),依此類推。在此須注意的是,在步驟s1031、s1033、s1035、s1037中,散列函數(shù)810_1至810_4中的至少二個可連接到相同的匹配路徑,并且將包含這些子字符串的散列請求推入此匹配路徑中的先進先出隊列。接著,當(dāng)散列函數(shù)810_1連接的匹配路徑中的匹配器(如匹配器870_1、870_2、870_3或870_4)判定散列表不包含散列函數(shù)810_1接收的子字符串時,傳送不匹配的信息給有限狀態(tài)機240(步驟s1051),以及當(dāng)散列函數(shù)810_1連接的匹配路徑中的匹配器判定散列表包含散列函數(shù)810_1接收的子字符串時,傳送匹配的信息及散列表中相應(yīng)于子字符串的匹配偏移量給有限狀態(tài)機240(步驟s1071)。當(dāng)散列函數(shù)810_2連接的匹配路徑中的匹配器(如匹配器870_1、870_2、870_3或870_4)判定散列表不包含散列函數(shù)810_2接收的子字符串時,傳送不匹配的信息給有限狀態(tài)機240(步驟s1053),以及當(dāng)散列函數(shù)810_2連接的匹配路徑中的匹配器判定散列表包含散列函數(shù)810_2接收的子字符串時,傳送匹配的信息及散列表中相應(yīng)于子字符串的匹配偏移量給有限狀態(tài)機240(步驟s1073)。步驟s1055、s1075、s1057及s1077的細節(jié)可從如上所述的步驟推論而得,不再贅述。在此須注意的是,當(dāng)一個匹配路徑的先進先出隊列包含二個以上的散列請求時,此匹配路徑的匹配器依據(jù)散列請求到達的先后順序執(zhí)行如上所述的判斷。例如,當(dāng)一個匹配路徑的先進先出隊列包含散列函數(shù)810_1及810_2的散列請求且散列函數(shù)810_1的散列請求較早時,步驟s1031、s1051及s1071的執(zhí)行早于步驟s1033、s1053及s1073的執(zhí)行。雖然圖1、2、8、9中包含了以上描述的元件,但不排除在不違反發(fā)明的精神下,使用更多其他的附加元件,以達成更佳的技術(shù)效果。此外,雖然第4至7及10圖的方法流程圖采用特定的順序來執(zhí)行,但是在不違反發(fā)明精神的情況下,本領(lǐng)域技術(shù)人員可以在達到相同效果的前提下,修改這些步驟間的順序,所以,本發(fā)明并不局限于僅使用如上所述的順序。雖然本發(fā)明使用以上實施例進行說明,但需要注意的是,這些描述并非用以限縮本發(fā)明。相反地,此發(fā)明涵蓋了本領(lǐng)域技術(shù)人員顯而易見的修改與相似設(shè)置。所以,申請權(quán)利要求范圍須以最寬廣的方式解釋來包含所有顯而易見的修改與相似設(shè)置。當(dāng)前第1頁12當(dāng)前第1頁12