專利名稱:可重配置語義處理器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及數(shù)字處理器和數(shù)字處理,更具體地說,涉及用于數(shù)據(jù)流處理的數(shù)字語義處理器。
背景技術(shù):
傳統(tǒng)的可編程計算機使用馮·諾依曼(Von Neumann)(VN)體系結(jié)構(gòu)。VN體系結(jié)構(gòu)的最簡單形式包括中央處理單元(CPU)和附接的存儲器,通常還具有某些形式的輸入/輸出以允許有用操作。例如,圖1示出了包括CPU 30、存儲器控制器40、存儲器50和輸入/輸出(I/O)設(shè)備60的計算機20。CPU 30經(jīng)由地址/控制總線42向存儲器控制器40發(fā)送數(shù)據(jù)請求;數(shù)據(jù)自身經(jīng)由數(shù)據(jù)總線44傳輸。存儲器控制器40與存儲器50和I/O設(shè)備60通信,以執(zhí)行CPU 30(或可能是I/O設(shè)備)所請求的數(shù)據(jù)讀寫。盡管未示出,但是各種設(shè)備都有“中斷”CPU并使其切換任務(wù)的能力。
在VN機中,存儲器50存儲程序指令和數(shù)據(jù)。CPU 30從存儲器取得程序指令,并執(zhí)行包含在其中的命令-一般指令指示CPU將數(shù)據(jù)從存儲器加載到寄存器、將數(shù)據(jù)從寄存器寫入到存儲器、利用板上寄存器中的數(shù)據(jù)執(zhí)行算術(shù)或邏輯操作、或者分支到不同的指令并繼續(xù)執(zhí)行。如可意識到的,CPU 30花費了大量時間來取得指令、經(jīng)由數(shù)據(jù)總線44取得數(shù)據(jù)或?qū)懭霐?shù)據(jù)。盡管可以實現(xiàn)精細設(shè)計(通常也很昂貴)的方案來緩存可能有用的數(shù)據(jù)和指令,實現(xiàn)流水線并減少平均存儲器周期時間,但是數(shù)據(jù)總線44最終還是處理器性能的瓶頸。
VN體系結(jié)構(gòu)相比于門邏輯來說是有吸引力的,這是因為VN體系結(jié)構(gòu)可以被制成“通用的”并且可以相對較快的重配置;通過僅僅加載新的程序指令集,就可以改變VN機的功能來執(zhí)行甚至非常復(fù)雜的功能(如果時間足夠的話)。VN體系結(jié)構(gòu)的靈活性與復(fù)雜性和低效率之間有一個平衡。從而,幾乎能夠做任何事情的代價是不能有效率地執(zhí)行某些簡單操作。
發(fā)明內(nèi)容
許多正提供服務(wù)或?qū)⒁峁┓?wù)的數(shù)字設(shè)備落在一般的分組處理器范疇內(nèi)。換句話說,這些設(shè)備例如經(jīng)由電纜、光纖或無線網(wǎng)絡(luò)或點到點連接、底板(backplane)等與使用分組的另一個或另一些設(shè)備進行通信。在許多的這樣的設(shè)備中,對接收數(shù)據(jù)的處理是直接的,但是分組協(xié)議和分組處理太為復(fù)雜,而無法保證專用硬件的設(shè)計。作為替代,這些設(shè)備利用VN機來實現(xiàn)協(xié)議。
這里我們認識到,存在一種不同的且有吸引力的方法用于分組處理器,該方法更一般地可被描述為可重配置語義處理器(RSP)。這種設(shè)備優(yōu)選地是可重配置的,如同VN機,因為其處理取決于其“程序”-盡管將會發(fā)現(xiàn)該“程序”不同于VN機中使用的傳統(tǒng)機器代碼。盡管VN機總是執(zhí)行順序檢查各種數(shù)據(jù)條件的機器指令集,但是RSP直接響應(yīng)于輸入流的語義。換句話說,RSP執(zhí)行的“代碼”由其輸入選擇。從而對于分組輸入,在定義的語法下,RSP在理論上適于快速和有效的分組處理。
這里描述的某些實施例使用表驅(qū)動型預(yù)測剖析器來驅(qū)動網(wǎng)絡(luò)語法協(xié)議的直接執(zhí)行,例如LL(通過識別最左邊的產(chǎn)生從左到右剖析)剖析器。其他剖析技術(shù),例如遞歸下降、LR(通過識別最右邊的產(chǎn)生從左到右剖析)和LALR(超前查看LR)也可用在本發(fā)明的實施例中。在每種情況下,剖析器通過在簡單執(zhí)行單元上執(zhí)行微指令代碼段而響應(yīng)于其輸入。當表放在可重寫存儲設(shè)備中時,RSP可以容易地重配置,從而單個RSP設(shè)計可用在多種應(yīng)用中。在許多應(yīng)用中,整個RSP(包括其操作所必需的表)可以實現(xiàn)在單個低成本、低功耗的集成電路上。
多個可選特征可以增加該設(shè)備的可用性。可以使用一簇執(zhí)行單元來執(zhí)行不同的任務(wù),這里允許并行處理??梢赃B接有異常單元(本質(zhì)上可以是小的VN機),并用其來執(zhí)行例如復(fù)雜但是不經(jīng)常執(zhí)行且沒有嚴格時間壓力的任務(wù)。并且執(zhí)行單元可以使用機器上下文存儲器接口,從而執(zhí)行單元不必理解存儲器單元的底層格式—因而極大簡化了執(zhí)行單元執(zhí)行的代碼。
通過參考附圖閱讀公開內(nèi)容,可以更好理解本發(fā)明,其中圖1包含一般馮·諾依曼機器的框圖;圖2包含本發(fā)明的發(fā)明人在先所獲專利的預(yù)測剖析器模式識別器的框圖;圖3以方框形式圖示了根據(jù)本發(fā)明實施例的語義處理器;圖4示出了對本發(fā)明實施例有用的一種可能的剖析器表構(gòu)造;圖5示出了對本發(fā)明實施例有用的一種可能的產(chǎn)生規(guī)則表組織;圖6以方框形式圖示了對本發(fā)明實施例有用的直接執(zhí)行剖析器(DXP)的一種實現(xiàn)方式;圖7包含圖6所示的DXP操作的流程圖;圖8示出了根據(jù)本發(fā)明實施例的可重配置語義處理器的框圖;圖9示出了對本發(fā)明實施例有用的語義代碼執(zhí)行引擎的框圖結(jié)構(gòu);圖10示出了地址解析協(xié)議分組的格式;以及圖11圖示了使用內(nèi)容可尋址存儲器(CAM)的另一剖析器表實現(xiàn)方式。
具體實施例方式
本申請的發(fā)明人是1999年6月29日發(fā)布的題為“Pattern Recognitionin Data Communications Using Predictive Parsers”的在先專利(美國專利No.5,916,305)的發(fā)明人之一。盡管’305專利中描述的整個設(shè)備與本發(fā)明完全不同,但是作為對基本預(yù)測剖析器與網(wǎng)絡(luò)協(xié)議結(jié)合使用(作為模式匹配器)的一般介紹,是有益的。
圖2示出了’305專利中描述的設(shè)備80的框圖。語義引擎82讀取分組70,并將分組數(shù)據(jù)的八位字節(jié)作為值傳輸?shù)筋A(yù)測剖析器84。預(yù)測剖析器84檢查傳輸過來的每個值(八位字節(jié))。首先,剖析器84利用該值和該值的位置距離分組70起始點的偏移量作為索引,在剖析器表88中執(zhí)行表查找。剖析器表88為值和偏移量的每個組合存儲以下四個可能值中的一個“A”,表示接受該偏移量處的值;“D”,表示值和偏移量的組合是“無關(guān)緊要的”;“F”,表示由于該偏移量處的值不是要識別模式的一部分因而失?。弧?”,表示結(jié)束符號。
剖析器棧86不是字面意義(或者應(yīng)用到將要簡要描述的本發(fā)明實施例)上的真正“堆?!保鋬H僅保留剖析器84試圖匹配的每個“過濾器”的狀態(tài)變量。每個狀態(tài)變量被初始化為入口狀態(tài)。隨著隨后為每個值和偏移量返回表條目,棧更新每個棧變量。例如,如果返回“A”用于棧變量,則該棧變量從入口狀態(tài)移動到部分匹配狀態(tài)。如果返回“F”,則該棧變量從入口狀態(tài)或部分匹配狀態(tài)移動到失敗狀態(tài)。如果返回“D”,則該棧變量維持其當前狀態(tài)。如果在狀態(tài)變量為入口狀態(tài)或部分匹配狀態(tài)的同時返回“$”,則狀態(tài)變量轉(zhuǎn)變?yōu)槠ヅ錉顟B(tài)。
一旦語義引擎82已將所有分組值傳輸?shù)筋A(yù)測剖析器84,剖析器84就基于剖析器棧狀態(tài)返回匹配值。然后,語義引擎82取決于匹配的成功或失敗采取某些輸出動作。應(yīng)當注意,剖析器并不控制或調(diào)整設(shè)備功能,而僅僅充當更大系統(tǒng)的輔助模式匹配器。要區(qū)分的每個可能的模式都需要剖析器表中的新列,從而在硬件實現(xiàn)中設(shè)備80只能匹配有限數(shù)目的輸入模式。并且每個輸入八位字節(jié)位置都需要剖析器表行,即使該輸入八位字節(jié)位置不影響匹配結(jié)果。
這里描述的實施例采用了絕對不同的方法來進行數(shù)據(jù)處理。圖3示出了根據(jù)本發(fā)明實施例的語義處理器100。與僅僅將具體輸入模式匹配到具體存儲模式不同,語義處理器100包含控制輸入分組的處理的引導(dǎo)執(zhí)行剖析器(Direct Execution Parser,DXP)200。隨著DXP 200剖析在輸入端口102處接收到的數(shù)據(jù),其響應(yīng)于輸入而擴展并執(zhí)行實際的語法產(chǎn)生,并隨著語法的執(zhí)行,指示語義代碼執(zhí)行引擎(SEE)300處理輸入段,或執(zhí)行其他操作。
該結(jié)構(gòu)具有復(fù)雜的語法剖析器,其按照數(shù)據(jù)需要,將機器上下文任務(wù)分配到執(zhí)行引擎,該機構(gòu)既靈活又很有效用。在優(yōu)選實施例中,語義處理器是可重配置的,因而具有無高開銷的VN機那樣的吸引力。因為語義處理器只響應(yīng)于其給定的輸入,所以其有效操作時所利用的指令集可以小于VN機。因為語義處理器允許在機器上下文中處理,所以該指令集也是非常有利的。
語義處理器100至少使用三個表。SEE 300的代碼段存儲在語義代碼表160中。復(fù)雜語法產(chǎn)生規(guī)則存儲在產(chǎn)生規(guī)則表140中。用于檢索這些產(chǎn)生規(guī)則的代碼存儲在剖析器表120中。剖析器表120中的代碼還允許DXP200檢測在給定產(chǎn)生規(guī)則的情況下,SEE 300是否應(yīng)加載并執(zhí)行來自語義代碼表160的代碼段。
本發(fā)明的某些實施例包含比圖3所示多很多的元件,但是這些基本元件出現(xiàn)在每一個系統(tǒng)或軟件實施例中。因而,在描述更復(fù)雜的實施例之前,先給出圖3中每個方框的描述。
圖4示出了剖析器表120的一般框圖。產(chǎn)生規(guī)則代碼存儲器122例如以行-列格式存儲表值。表的行由非終端(non-terminal)代碼索引。表的列由輸入數(shù)據(jù)值索引。
實際上,在產(chǎn)生規(guī)則代碼存儲器122中可以同時存在許多不同語法的代碼。例如,如圖所示,一個代碼集可以是關(guān)于MAC(介質(zhì)訪問控制)分組頭部格式剖析的,而其他的代碼集可以是關(guān)于地址解析協(xié)議(ARP)分組處理、因特網(wǎng)協(xié)議(IP)分組處理、傳輸控制協(xié)議(TCP)分組處理、實時傳送協(xié)議(RTP)分組處理等的。非終端代碼既不需要在產(chǎn)生規(guī)則代碼存儲器122中以任何特定順序分配,也不需要在關(guān)于如圖所示的特定協(xié)議的方框中以任何特定順序分配。
尋址器124從DXP 200接收非終端(NT)代碼和數(shù)據(jù)值。尋址器124將[NT代碼、數(shù)據(jù)值]對轉(zhuǎn)換為產(chǎn)生規(guī)則代碼存儲器122中的物理位置,獲取存儲在該位置的產(chǎn)生規(guī)則(PR)代碼,并將PR代碼返回到DXP。盡管在概念上將產(chǎn)生規(guī)則代碼存儲器122的結(jié)構(gòu)視為矩陣通常是非常有幫助的(對于每個NT代碼和數(shù)據(jù)值的唯一組合存儲一個PR代碼),但是本發(fā)明并不限于此。不同應(yīng)用可以適用不同類型的存儲器和存儲器組織(圖11中示出了其中一種)。
當DXP 200和SEE 300一起集成在電路中時,剖析器表120可以位于芯片上,也可以位于芯片外。例如,位于芯片上的靜態(tài)RAM可以充當剖析器表120?;蛘?,芯片外的DRAM存儲設(shè)備可以存儲剖析器表120,其中尋址器124充當DRAM的存儲器控制器,或者與其通信。在其他實施例中,剖析器表可以位于芯片外的存儲器中,其中芯片上的高速緩存能夠保存剖析器表的一部分。尋址器124在某些實現(xiàn)中不是必要的,但是當使用時可以是剖析器200的一部分、剖析器表120的一部分或者中間功能塊。注意通過給予尋址器124對輸入流上的下一個輸入值和DXP剖析器棧上的下一個值的可視性,可以實現(xiàn)剖析器表120的超前查看(Look-ahead)能力。
圖5圖示了產(chǎn)生規(guī)則表140的一種可能實現(xiàn)。產(chǎn)生規(guī)則存儲器142將終端和非終端符號的實際產(chǎn)生規(guī)則序列例如存儲為連續(xù)存儲器地址的零終端鏈。尋址器144從DXP 200或者直接從剖析器表120接收PR代碼。
由于產(chǎn)生規(guī)則可以有各種長度,因此優(yōu)選地采用一種允許容易地對存儲器142進行索引的方法。在一種方法中,可以算術(shù)操作PR代碼來確定產(chǎn)生規(guī)則的物理存儲器起始地址(例如,如果以擴展長度對產(chǎn)生規(guī)則歸類,然后根據(jù)規(guī)則的歸類位置分配PR代碼,則這種方法就是可行的)。PR代碼也可以是實際的PR起始地址,盡管在某些應(yīng)用中這可能使PR代碼不必要地變長。在圖5所示的方法中,指針表150填充有每個PR代碼的PR起始地址。尋址器144通過利用PR代碼作為地址查詢指針表150來獲取產(chǎn)生規(guī)則。指針表150返回PR起始地址PR ADD。然后,尋址器144利用該起始地址從產(chǎn)生規(guī)則存儲器142中獲取PR數(shù)據(jù)。尋址器144遞增起始地址并繼續(xù)獲取PR數(shù)據(jù),直到檢測到NULL字符為止。
圖5示出了表150中的第二列,其被用來存儲語義代碼(SC)起始地址。當DXP 200利用PR代碼查詢尋址器144時,尋址器不僅返回對應(yīng)的產(chǎn)生規(guī)則,還返回用于要執(zhí)行的SEE任務(wù)的SC起始地址。在給定產(chǎn)生規(guī)則不需要任何SEE任務(wù)的情況下,SC起始地址被設(shè)為NULL地址。
圖6示出了DXP 200的一種可能的框圖實現(xiàn)。剖析器控制有限狀態(tài)機(FSM)210基于來自圖6中其他邏輯模塊的輸入,控制整個DXP操作并為其排序。棧操縱器220和棧222存儲DXP 200執(zhí)行的產(chǎn)生規(guī)則并為其排序。剖析器表接口230允許DXP 200從附接的剖析器表中獲取PR代碼。產(chǎn)生規(guī)則表接口240允許DXP 200從附接的產(chǎn)生規(guī)則表中獲取產(chǎn)生規(guī)則。語義代碼表接口250允許DXP 200識別與產(chǎn)生規(guī)則相關(guān)聯(lián)的語義代碼段的存儲單元(在圖示實施例中,接口240和250部分組合在一起)。
輸入流序列控制260和寄存器262從Si-Bus獲取輸入數(shù)據(jù)符號。比較器270將輸入符號與來自剖析器棧222的符號相比較。最后,SEE接口280被用來將任務(wù)分派給經(jīng)由Sx-Bus與DXP 200通信的一個或多個SEE。
下面參考圖7中的流程圖描述圖6中方框的基本操作。在每個剖析周期的開始(流程圖方框400),棧操縱器220獲取由其棧頂指針psp所指向的產(chǎn)生符號pX。產(chǎn)生符號pX被分為兩個組分前綴p和符號X。前綴p例如根據(jù)下面的兩比特前綴的映射對符號X的類型編碼表1
注意,與“無關(guān)緊要的”終端符號的前綴不同,該前綴可以指示加掩碼的終端符號。加掩碼的終端符號允許輸入符號比特掩碼的規(guī)范,即,終端符號的某些(或全部)比特是“無關(guān)緊要的”比特。加掩碼的終端符號構(gòu)造對于例如發(fā)生在許多網(wǎng)絡(luò)協(xié)議中的剖析分組標志字段可以是有用的。
輸入流序列控制260還將由輸入指針ip指向的當前輸入流值加載到aReg寄存器262中。如果先前的剖析周期不領(lǐng)先于輸入指針ip,則這一步就不是必需的。
當剖析器控制FSM 210從棧操縱器220接收到新的前綴代碼p時,其確定(流程圖方框402)對于該剖析周期采用三種可能的邏輯路徑中的哪一種。如果前綴代碼指示X是終端符號,則采用路徑410。如果前綴代碼指示X匹配任何輸入符號,則采用路徑420。而如果前綴代碼指示X是非終端符號,則采用路徑430。下面將依次解釋與每個路徑相關(guān)聯(lián)的處理。
當采用路徑410時,剖析器控制FSM 210基于比較器270所提供的符號匹配信號M,進行另一個路徑分叉。比較器270將輸入符號a與棧符號X相比較-如果兩者相同,則聲明信號M。如果允許加掩碼的終端符號并且提供加掩碼的終端符號,則比較器270應(yīng)用掩碼使得信號M只取決于未加掩碼的棧符號比特。
當希望得到特定輸入符號而未發(fā)現(xiàn)時,剖析器控制FSM 210在方框414進入錯誤恢復(fù)模式。通常,錯誤恢復(fù)將清洗(flush)輸入中的剩余分組(例如通過將輸入與棧結(jié)束(EOF)符號相匹配,直到檢測到匹配),并將剩余符號推出棧。也可以將語義代碼段分派到SEE,以清除與錯誤分組有關(guān)的任何機器狀態(tài)數(shù)據(jù)。這些和其他的動作可以取決于發(fā)生錯誤時正剖析的具體語法。
假定在方框412發(fā)現(xiàn)a和X之間的匹配,進一步的處理進入處理路徑420。
處理路徑420實現(xiàn)了兩個任務(wù),如圖7中的方框422和424所示。首先,剖析器控制FSM 210給棧操縱器220發(fā)信號,例如通過遞減棧指針psp來從棧222中“推出”X的當前值。其次,剖析器控制FSM 210給輸入流序列控制260發(fā)信號,將輸入指針ip遞增到輸入流中的下一個符號。
處理路徑430處理在棧222上出現(xiàn)的非終端符號。當非終端符號X到達棧頂時,處理方框432、434、438和440將非終端符號擴展到其對應(yīng)的產(chǎn)生規(guī)則中。剖析器控制FSM 210首先給剖析器表接口230發(fā)信號,返回產(chǎn)生規(guī)則代碼y=PT[X,a]。如果y無效,則剖析器控制FSM 210執(zhí)行例如如上所述的錯誤恢復(fù)(方框436)。
假定PR代碼y有效,則剖析器控制FSM 210將棧222上的X替換為其擴展后的產(chǎn)生規(guī)則。剖析器控制FSM給產(chǎn)生規(guī)則表(PRT)接口240和語義代碼表(SCT)接口250發(fā)信號,利用PR代碼y執(zhí)行查找。剖析器控制FSM 210還給棧操縱器220發(fā)信號,從棧222中推出X的當前值。當PRT接口240返回產(chǎn)生規(guī)則PR[y]時,剖析器控制FSM 210給棧操縱器220發(fā)信號,將PR[y]推入到棧222中。由于每個擴展的產(chǎn)生規(guī)則都有對應(yīng)的長度,因此在推入過程中必須考慮該長度,即,某些擴展可能需要從產(chǎn)生規(guī)則表中傳送多個符號(從表到棧操縱器的路徑寬度當然可能多于一個符號寬)。
其間,SCT接口250已返回產(chǎn)生規(guī)則PR[y]的對應(yīng)語義代碼地址代碼SCT[y]。地址代碼SCT[y]可包含對應(yīng)于PR代碼y的第一語義代碼微指令的實際物理地址,或者允許SEE加載該微指令的某些抽象。地址代碼SCT[y]還可包含其他信息,例如哪一個SEE(在多SEE系統(tǒng)中)應(yīng)當接收代碼段的指示。
當受到剖析器控制FSM 210命令時,SEE接口280檢查SCT[y],并確定代碼段是否需要被分派到SEE。如圖7中的判決方框442所示,如果SCT[y]不是“有效的”,即代表NULL值,則沒有必要執(zhí)行任何微指令。否則,SEE接口280確定(判決方框444)SEE在當前是否是可獲得的。SEE接口280檢查信號量(semaphore)寄存器(未示出)以確定SEE的可獲得性。如果SCT[y]指示了特定的SEE,則SEE接口280檢查該SEE的信號量。如果信號量指示所請求的SEE正忙,則SEE接口280進入等待狀態(tài)446,直到信號量清零。如果任何SEE都可執(zhí)行語義代碼段,則SEE接口280可簡單地選擇一個信號量清零的SEE。
當對于所選SEE信號量清零時,SEE接口280捕捉SX-bus,并將SCT[y]發(fā)送到所選的SEE。所選的SEE設(shè)置其信號量以指示其已接收到請求。
當剖析器控制FSM 210首先命令SEE接口280分派SCT[y]時,SEE接口280給SEE狀態(tài)線去聲明(deassert)以懸掛進一步的剖析,從而防止剖析器控制FSM 210退出當前剖析周期,直到已分派了SCT[y](在給SEE狀態(tài)線去聲明的同時,可以并行地繼續(xù)將擴展的產(chǎn)生規(guī)則PR[y]推入棧的操作)。一旦SCT[y]已被傳送到所選的SEE,DXP 200是否繼續(xù)懸掛剖析就可以取決于SCT[y]。例如,SCT[y]還可指示對應(yīng)的語義代碼段應(yīng)當阻塞(block)剖析器控制FSM 210的進一步處理多長時間。在一個實施例中,DXU可以在下列時間釋放一分派了SCT[y]就釋放;SEE一設(shè)置了其信號量就釋放;在SEE設(shè)置其信號量后經(jīng)過可編程的時鐘周期數(shù)釋放;或者直到SEE設(shè)置并清零了其信號量后才釋放?;蛘?,SEE可以有對應(yīng)于這些不同可能性的不同信號量狀態(tài)。
在每個剖析器周期的結(jié)束(圖7中的判決方框460),如果棧為空,則棧操縱器220將向剖析器控制FSM 210聲明棧空信號SE。一旦聲明了SE信號,剖析器控制FSM 210就重新設(shè)置其狀態(tài)以等待下一個輸入分組的開始。然而,只要棧未空,剖析器控制FSM就返回到方框400并開始新的剖析周期。
圖8示出了具有擴展能力的第二RSP實施例500。與圖3所示單個SEE 300不同的是,RSP 500并入了N+1個SEE 300-0到300-N。RSP 500還包含多個其他重要的附件異常處理單元(EPU)600、數(shù)組機器上下文數(shù)據(jù)存儲器(AMCD)700和變量機器上下文數(shù)據(jù)存儲器(VMCD)800。下面將解釋圖8中每個方框的功能。
圖9示出了SEE 300-0的基本功能框。在SEE 300-0的中心處是算術(shù)邏輯單元(ALU)310、流水線寄存器集320和語義代碼(或s-code)指令解碼器330。s-code隊列340存儲SEE要執(zhí)行的微指令。微指令自身存儲在語義代碼表160中,并由SEE S-bus接口360接收。SEE控制有限狀態(tài)機(FSM)350協(xié)同執(zhí)行圖示SEE方框的操作。
SEE 300-0保持空閑,直到其在Sx-bus上接收到執(zhí)行請求(來自DXP200)為止。SEE控制FSM 350檢查Sx-bus上的流量,等待定向到SEE300-0的請求(例如,可以四個Sx-bus地址線尋址上限為16個的SEE,每個SEE地址唯一)。當請求被定向到SEE 300-0時,請求例如包含起始語義代碼地址。SEE控制FSM 350以下列動作響應(yīng)請求設(shè)置其信號量以肯定其正忙;并指示S-bus接口360驅(qū)動S-bus上的請求,以獲取從接收的起始語義代碼地址開始的微指令代碼段。
S-bus接口360的任務(wù)是在s-code指令解碼器330需要s-code指令之前,將s-code指令放入隊列340中。S-bus接口沒有必要與其他SEE S-bus接口競爭以接入到S-bus,因而在一次動作中一次下載多個順序指令可能是有益的。S-bus接口360維護s-code地址計數(shù)器(未示出),并繼續(xù)順序下載指令,除非被SEE控制FSM 350定向。
S-code微指令解碼器330在ALU 310和流水線寄存器320上執(zhí)行DXP所請求的代碼段。盡管優(yōu)選地在指令解碼器330內(nèi)存在分叉能力,但是許多代碼段在RSP的整個結(jié)構(gòu)中很少需要或基本不需要分叉。
ALU 310可以是傳統(tǒng)的,例如,能夠利用其自身的寄存器值和/或來自流水線寄存器320的值執(zhí)行添加、比較、偏移等操作。
流水線寄存器320允許對數(shù)據(jù)的機器上下文訪問。與標準CPU不同的是,優(yōu)選的SEE實施例沒有關(guān)于用于其正操作的數(shù)據(jù)的物理數(shù)據(jù)存儲結(jié)構(gòu)的概念。相反地,對數(shù)據(jù)的訪問采用了機器上下文事務(wù)形式。在V-bus上訪問變量(例如標量)數(shù)據(jù);在A-bus上訪問數(shù)組數(shù)據(jù);在Si-bus上訪問輸入流數(shù)據(jù)。例如,為了讀取位于數(shù)據(jù)上下文ct內(nèi)給定位置offset的長度為m個八位字節(jié)的標量數(shù)據(jù)元素,指令解碼器330提示V-bus接口發(fā)出總線請求{read,ct,offset,m}。上下文mct指RSP的主上下文;其他的子上下文通常在RSP處理輸入數(shù)據(jù)時創(chuàng)建和毀壞,例如用于當前TCP分組或主動會話的子上下文。
一旦流水線寄存器發(fā)出命令,其就處理數(shù)據(jù)傳送過程。如果需要多個總線傳送來讀或?qū)憁個八位字節(jié),則流水線寄存器將跟蹤事務(wù)直到完成。作為示例,可以利用兩個微指令將六個八位字節(jié)字段從流輸入傳送到機器上下文變量第一指令將六個八位字節(jié)從Si-bus讀取到流水線寄存器;然后,第二指令經(jīng)由V-bus將六個八位字節(jié)從寄存器寫入到機器上下文變量。然而,需要執(zhí)行許多總線數(shù)據(jù)的寄存器接口來使傳送有效。
VMCD 800為在V-bus上發(fā)起的請求提供服務(wù)。VMCD 800能夠?qū)C器上下文變量數(shù)據(jù)請求轉(zhuǎn)換為物理存儲器事務(wù)。從而,VMCD 800優(yōu)選地維護將機器上下文標識符對應(yīng)到物理起始地址的轉(zhuǎn)換表,包含用于分配和去分配上下文的機構(gòu),允許上下文被給定的SEE鎖定,并確保所請求的事務(wù)不落在所請求的上下文邊界的外部。所采用的實際存儲機構(gòu)可以基于應(yīng)用而變化存儲器可以是完全內(nèi)部的、完全外部的、兩者的混合、帶有大的外部存儲器的緩存等。在給定實現(xiàn)中,外部存儲器可以與其他存儲器部件的外部存儲器共享如AMCD、e-code表、輸入緩沖器、剖析器表、產(chǎn)生規(guī)則表和語義代碼表。
A-bus接口和AMCD 70類似地操作,但是具有數(shù)組機器上下文組織。優(yōu)選地,利用簡單的總線請求可以分派、重新定義大小、去分配、寫入、讀取、搜索、還可能散列或歸類不同類型的數(shù)組和表。對于不同類型的數(shù)組和表,實際的根本物理存儲器可以不同,例如包括板上快速RAM、外部RAM或ROM、內(nèi)容可尋址存儲器等。
返回到SEE 300-0和其流水線寄存器的描述,每個SEE可經(jīng)由Si-bus訪問來自緩沖器510的輸入數(shù)據(jù)。并且每個SEE可以訪問P-bus和當前剖析器棧頂?shù)姆?這是有用的,例如在相同的s-code用于多個產(chǎn)生規(guī)則時,但是其輸出取決于發(fā)起其的產(chǎn)生規(guī)則。最后,可以特殊化某些SEE的流水線寄存器。例如,圖8中的SEE 300-1與本地I/O模塊520通信,以提供去往/來自例如連接到本地I/O模塊520的本地USB或串行ATA設(shè)備的數(shù)據(jù)路徑。并且圖8中的SEE 300-2與EPU 600通信以提供去往/來自異常單元的數(shù)據(jù)路徑。盡管在理論上每個SEE可以與這些設(shè)備中的每一個分離連接,但是實際上設(shè)備被簡化了,并且通過將某些SEE與某些其他功能配對,帶來了很小的性能下降。
異常處理單元600可以是標準的馮·諾依曼中央處理單元(CPU),盡管在許多應(yīng)用中其可以是非常基本的處理單元。當包括EPU 600時,其優(yōu)選地被用來處理不經(jīng)常運行或者時間要求不嚴格的復(fù)雜代碼。示例有用戶登錄過程、使本地驅(qū)動器在遠端可用的請求、錯誤登錄和恢復(fù)、系統(tǒng)啟動時的表加載和系統(tǒng)配置。EPU 600經(jīng)由加載到SEE 300-2中的s-code段不直接響應(yīng)于DXP請求。優(yōu)選地,EPU 600還可指派SEE 300-2執(zhí)行其功能,例如對AMCD 700或VMCD 800的讀或?qū)憽?br>
e-code表610對于EPU 600優(yōu)選地是可獲得的。e-code表包含設(shè)備的引導(dǎo)(boot)指令,還可包含用于執(zhí)行DXP所請求的其他功能的可執(zhí)行指令。可選地,e-code表610可包含用于將s-code請求轉(zhuǎn)換為要執(zhí)行代碼的指令地址的表,其中指令地址位于傳統(tǒng)的外部存儲器空間中。
一個示例為了更好的圖示RSP 500的操作,給出了如IETF RFC 826中所描述的地址解析協(xié)議(ARP)的實現(xiàn)示例。該示例涉及產(chǎn)生規(guī)則的創(chuàng)建、剖析器表條目和用于處理接收的ARP分組的s-code的功能實質(zhì)。
簡要地說,ARP分組允許本地網(wǎng)絡(luò)節(jié)點將每個對等體的鏈路層(硬件)地址關(guān)聯(lián)到一個或多個網(wǎng)絡(luò)協(xié)議的網(wǎng)絡(luò)(協(xié)議)地址。該示例假定硬件協(xié)議是以太網(wǎng),并且網(wǎng)絡(luò)協(xié)議是因特網(wǎng)協(xié)議(IP或IPv4)。因此,ARP分組具有如圖10所示的格式。當opcode字段被設(shè)為1時,發(fā)送者正試圖發(fā)現(xiàn)與目標協(xié)議地址相關(guān)聯(lián)的目標硬件地址,并請求ARP答復(fù)分組。當opcode字段被設(shè)為2時,發(fā)送者正答復(fù)ARP請求-這種情況下,發(fā)送者的硬件地址就是最初發(fā)送者尋找的目標硬件地址。
下面的示例性語法描述了RSP 500可以處理在輸入端口接收的ARP分組的一種方式。$指示產(chǎn)生規(guī)則的開始,{}包含SEE要執(zhí)行的s-code$MAC_PDU=MAC_DA_MAC_SA_MAC_PAYLOAD_MAC_FCSEoFrame$MAC_DA=0X08 0X01 0X02 0X03 0X04 0X05|0XFF 0XFF 0XFF 0XFF 0XFF 0XFF$MAC_SA=etherAddType{s0mct->curr_SA=MAC_SA}$MAC_PAYLOAD=0X08ET2$ET2=0X06 ARP_BODY|0X00 IP_BODY$ARP_BODY =ARP_HW_TYPE ARP_PROT_TYPEARP_HW_ADD_LEN_ARP_PROT_ADD_LEN_ARP_OP_ARP_PADDING$ARP_HW_TYPE=0X0001$ARP_PROT_TYPE=0x0800$ARP_HW_ADD_LEN=0X06$ARP_PROT_ADD_LEN=0X040x00$ARP_OP=0x01 ARP_REQ_ADDR|0x02 ARP_REPLY_ADDR$ARP_REQ_ADDR=ARP_SENDER_HW ARP_SENDER_PROTARP_TARGET_HW ARP_TARGET_PROT{s1s-code seg1}$ARP_REPLY_ADDR=ARP_SENDER_HW ARP_SENDER_PROTARP_TARGET_HW ARP_TARGET_PROT{s2s-code seg2}$ARP_SENDER_HW=etherAddType
$ARP_SENDER_PROT=ipAddType$ARP_TARGET_HW=etherAddType$ARP_TARGET_PROT=ipAddType$ARP_PADDING=octet|null{s3calc.length;throw away}$IP_BODY=//unresolved by this example$MAC_FCS=octet octet octet octet{s4check FCS}$etherAddType=octet octet octet octet octet octet$ipAddType=octet octet octet octet{s-code segl=if ARP_TARGET_PROT==mct->myIPAddress thengenerate ARP reply to mct->curr_SA;s-code seg2}{s-code seg2=update mct->ArpCache with ARP-SENDER-HW,ARP-SENDER-PROT,mct->time}該示例只處理了所有可能的ARP分組的有限集,即正確地指示了與以太網(wǎng)硬件類型和IP協(xié)議類型相一致的字段的ARP分組;所有其他的ARP分組將不被剖析并被拒絕。該語法還為處理IP分組($IP_BODY)留下了鉤子(hook)從而不會拒絕IP分組,但是對應(yīng)的IP語法不是該示例的一部分。
遍覽產(chǎn)生過程,$MAC_PDU僅僅定義了MAC幀格式。$MAC_DA允許兩個目的地MAC地址特定硬件地址(0x08 0x01 0x02 0x03 0x040x05)和全1的廣播地址。所有其他的MAC地址被自動拒絕,因此地址不是以上兩個地址之一的分組不被剖析。$MAC_SA接受任何源地址;SEE被指派用來將源地址保存為VMCD上的主上下文表變量mct→curr_SA。$MAC_PAYLOAD和$ET2組合來確保只剖析兩種類型的載荷,ARP載荷和IP載荷(這里未圖示出IP載荷的進一步剖析)。當然,通過擴展這些產(chǎn)生,可以添加其他的分組類型。
當MAC_PAYLOAD的前兩個字節(jié)指示ARP分組(類型=0x0806)時,剖析器隨后試圖剖析$ARP_BODY。為了簡化,ARP主體的前四個單元(硬件和協(xié)議類型以及地址長度)示為固定-如果對于除IP外的另一種協(xié)議實現(xiàn)了ARP,則這些單元可以通用(注意長度字段的通用可能允許隨后的地址字段的大小不同,這是產(chǎn)生規(guī)則中必須要考慮的一個條件)。
$ARP_OP可能有兩個值,1為請求,2為答復(fù)。盡管對于$ARP_OP的兩個值,地址剖析并沒有不同,但是每種情況下要執(zhí)行的s-code是不同的。ARP請求執(zhí)行的s-code段1將目標協(xié)議與存儲在VMCD上的主上下文表中的本地IP地址相比較。當兩者相等時,SEE生成到發(fā)送者的硬件和IP地址的ARP答復(fù)分組。S-code段2執(zhí)行ARP請求和ARP答復(fù)-該段以發(fā)送者的硬件和協(xié)議地址以及接收的時間來更新存儲在AMCD中的ArpCache數(shù)組。mct→ArpCache的“更新”命令包括用來識別ArpCache中的哪些數(shù)據(jù)應(yīng)當用來執(zhí)行更新的標志或掩碼;通常,緩存至少由IP地址來索引。
在以太網(wǎng)/IP ARP分組中,ARP_PADDING的長度為18個八位字節(jié)。然而,這里所示的ARP_RADDING產(chǎn)生規(guī)則適合任何數(shù)目的八位字節(jié)。在該示例中,調(diào)用s-code段來計算填充長度并例如通過領(lǐng)先輸入指針而“扔掉”該許多的八位字節(jié)?;蛘?,剖析器可以使用五個八位字節(jié)的超前查看來查看輸入中的EoFrame令牌;當發(fā)現(xiàn)令牌時,在前的四個八位字節(jié)是FCS。在該示例的結(jié)論處,將解釋剖析器具有變量符號超前查看能力的可替換實施例。
MAC_FCS產(chǎn)生指示SEE要檢查附接到分組的FCS。SEE實際上可能計算校驗和,或者可通過輸入緩沖器或其他硬件來計算校驗和,這種情況下,SEE僅僅比較分組值和計算的值,并且在不匹配時拒絕分組。
為了進一步示出RSP 500是如何被配置來執(zhí)行以上的ARP語法的,下面將給出并解釋示例性的產(chǎn)生規(guī)則表和剖析器表值。首先示出了產(chǎn)生規(guī)則,其中,十六進制符號示出了終端值,十進制符號指示產(chǎn)生規(guī)則,“octet”匹配在輸入流的頭部發(fā)現(xiàn)的任何八位字節(jié)。非終端(NT)代碼被用作剖析器表的索引;產(chǎn)生規(guī)則(PR)代碼存儲在剖析器表中,并且指示哪一個產(chǎn)生規(guī)則應(yīng)用到NT代碼和輸入值的給定組合。
ARP產(chǎn)生規(guī)則
在以上的ARP產(chǎn)生規(guī)則表中,RHS非終端值(例如,附接有特殊的規(guī)則結(jié)束符號)是存儲在RSP的產(chǎn)生規(guī)則表中的。產(chǎn)生規(guī)則代碼是到對應(yīng)產(chǎn)生規(guī)則的“指針”;實際存儲在剖析器表中的其實是PR代碼。下面的剖析器表段圖示了PR和PR代碼之間的關(guān)系A(chǔ)RP剖析器表值
*利用剖析器或SEE中的超前查看能力實現(xiàn)了PR 148.1/.2NT代碼和“輸入流數(shù)據(jù)值的頭部”的組合作為RSP中剖析器表值的索引。注意開始符號S、Eoframe符號和棧底符號$是特殊情況-對這些符號不需參考剖析器表就可實現(xiàn)剖析器控制FSM。對于許多NT代碼,不論占據(jù)輸入流頭部的數(shù)據(jù)值如何,表都產(chǎn)生相同的PR代碼。在該示例中,所有其他的NT代碼都有輸入流值一或兩個頭部的有效值(單元中的空白值代表無效條目)。該信息可以矩陣格式編碼,其中填充每個單元,或者可以某些其他更經(jīng)濟的格式編碼。
給定上面的表,下面給出RSP執(zhí)行以太網(wǎng)/ARP分組的示例。在該示例中,DXP以剖析器周期作為每一步,對應(yīng)于圖7中流程圖的一個“循環(huán)”。在每個周期中,機器狀態(tài)循著下面的順序進行輸入指針ip,指示正剖析的當前流輸入符號的字節(jié)地址;輸入指針所指向的輸入符號,*ip;剖析器棧指針psp,指示在剖析器周期的開始指向哪一個棧值;在該剖析器周期的開始的剖析器棧頂?shù)姆枺?psp,其中非終端符號指示以前綴“nt.”,終端符號t.xx匹配任何輸入符號;PT[*ip,*psp],剖析器表的當前索引值;PRT[PT],PT[*ip,*psp]所指向的產(chǎn)生規(guī)則;SCT[PT],PT[*ip,*psp]所指向的s-code段;以及*ps,剖析器棧的整個內(nèi)容。
在示例中將使用下面的ARP分組,其中所有的值標識以十六進制符號0x0000FF FF FF FF FF FF 00 02 3F 77 6D 9E 08 06 00 010x001008 00 06 04 00 01 00 02 3F 77 6D 9E C0 AS 00 040x002000 00 00 00 00 00 C0 A8 00 06 3A 20 33 0D 0A 530x003054 3A 20 75 72 6E 3A 73 63 68 65 6D EF 73 84 CC這是發(fā)送到廣播MAC地址的ARP請求分組,請求與網(wǎng)絡(luò)地址192.168.0.6(在該示例中是分配給RSP的網(wǎng)絡(luò)地址)相關(guān)聯(lián)的硬件地址。剖析該示例分組的結(jié)果以表格形式示在下面,跟隨有簡要的解釋。盡管示例較冗長,但是由于其經(jīng)歷了RSP的大部分基本功能,因而較有意義。
ARP分組剖析器周期示例
通常,以上的詳細示例圖示了產(chǎn)生規(guī)則是如何擴展到剖析器棧中然后被獨立處理的,其或者通過將終端符號與輸入符號匹配(例如見剖析器周期2-7);將終端無關(guān)緊要的符號t.xx與輸入符號匹配(例如見剖析器周期9-14);不論輸入如何(例如見剖析器周期8)或基于當前輸入符號(例如見剖析器周期0、1、17),進一步擴展非終端符號;或者執(zhí)行null周期,這種情況下允許SEE調(diào)整輸入指針以“跳過”填充字段的剖析(剖析器周期63)。該示例還圖示了在剖析過程期間的合適點處調(diào)用s-code段的操作,取決于此產(chǎn)生規(guī)則被加載到棧上(剖析器周期8、33、62、64)??梢砸庾R到,這些代碼段中的某一些可以與繼續(xù)的剖析并行執(zhí)行。
以上所給出的示例性語法只是根據(jù)本發(fā)明實施例實現(xiàn)ARP語法的一種方式。例如,通過明確地將某些非終端擴展為其父產(chǎn)生規(guī)則,可以減少某些周期的低效率。也可以在一定程度上使ARP語法通用化以處理更多的可能性。然而,所選的編碼只是說明基本原理,并不是所有可能的最優(yōu)選擇或ARP特征。對于給定實現(xiàn),顯式擴展也可能受限于所選擇的棧大小。
在替換實施例中,DXP 200可實現(xiàn)LL(f(X))剖析器,其中,超前查看值f(X)被編碼到棧符號中,從而使得每個棧符號可指定其自身的超前查看。作為示例,先前示例中ARP_PADDING的產(chǎn)生規(guī)則可以指定為$ARP_PADDING=octet ARP_PADDING|EoFrame,(LA5)其中,(LA5)指示該規(guī)則的5符號的輸入符號超前查看。超前查看值被編碼進產(chǎn)生規(guī)則表中,從而使得當執(zhí)行規(guī)則時,DXP 200在產(chǎn)生規(guī)則表中查找(X,a+5)。
也可以使用變量超前查看能力來指示在表查找中要使用多個輸入符號。例如,MAC_DA的產(chǎn)生規(guī)則可指定為$MAC_DA=0X08 0X01 0X02 0X03 0X04 0X05|0XFF 0XFF 0XFF 0XFF 0XFF 0XFF,(LA6)與創(chuàng)建每個由六個終端符號組成的兩個產(chǎn)生規(guī)則52和53不同的是,剖析器表包含兩個條目,每個匹配六個符號,例如,在剖析器表位置(X,a)=(130,0X08 0X01 0X02 0X03 0X04 0X05)和(130,0XFF 0XFF 0XFF0XFF 0XFF 0XFF)。
利用該方法,標準的行、列矩陣剖析器表可以證明是非常浪費的,這是由于上限為六個八位字節(jié)輸入符號寬度所需的可尋址列的數(shù)目和該矩陣的稀少。圖11中示出了一種使用三進制(ternary)CAM的替換實現(xiàn)方式。
圖11的三進制CAM 900加載有匹配地址和對應(yīng)產(chǎn)生規(guī)則代碼的表。每個匹配地址包括一個八位字節(jié)棧符號X和六個八位字節(jié)輸入符號a1、a2、a3、a4、a5、a6。當匹配地址被提供給CAM 900時,其確定在其剖析器表條目中是否存在匹配。如果存在匹配,則返回對應(yīng)的產(chǎn)生規(guī)則代碼(或者,返回引發(fā)匹配的表條目的地址,其可用作產(chǎn)生規(guī)則代碼或指針表的索引)。
圖11的剖析器表實現(xiàn)方式的一個優(yōu)點在于其比矩陣方法更有效率,這是由于只對于棧和輸入符號的有效組合才創(chuàng)建條目。這一相同的有效性允許在一個剖析器周期中剖析更長的輸入符號串(圖示上限為六個輸入符號,但是設(shè)計者可以使用任何方便的長度),從而可以在一個剖析器周期中剖析MAC或IP地址。另外,超前查看能力可以隱性地編碼進CAM中,例如下一個六輸入符號可以總是提供給表。對于對應(yīng)于LL(1)剖析的產(chǎn)生規(guī)則(例如CAM 900中X=136的行),該行上對應(yīng)于a2、a3、a4、a5、a6的CAM比特被設(shè)為“無關(guān)緊要的”值xx,并且對查找不起作用。對于對應(yīng)于LL(2)剖析的產(chǎn)生規(guī)則(例如X=134和135的行,其分別匹配ARP和IP分組的兩個八位字節(jié)分組型字段),這些行上對應(yīng)于a3、a4、a5、a6的CAM比特被設(shè)為xx。在表中可以輸入上限為LL(6)的剖析,如圖中X=129的兩個MAC地址條目。注意如果a1、a2、a3、a4、a5被設(shè)為xx,則也可以實現(xiàn)真正的六符號超前查看。最后一點是,利用三進制CAM,每個比特可以獨立地被設(shè)為“無關(guān)緊要的”狀態(tài),從而產(chǎn)生規(guī)則也可以被設(shè)為忽略如在標志字段中的某些比特。
二進制CAM也可用在剖析器表的實現(xiàn)中。主要的區(qū)別是二進制CAM不能以顯式方式存儲“無關(guān)緊要的”信息,從而使剖析器狀態(tài)機(或某些其他機構(gòu))負責以某些其他方式處理任何“無關(guān)緊要的”功能。
本領(lǐng)域的技術(shù)人員會意識到,這里所教導(dǎo)的概念可以許多其他的有利方式應(yīng)用到具體應(yīng)用中。例如,可以對給出的代碼和尋址方案進行許多改變。在描述的實施例中,微指令代碼段以NULL指令結(jié)束-可以由SEE的S-bus接口、微指令解碼器或s-code表功能來檢測NULL指令的存在。對于SEE來說s-code地址不是必須知道的;SCT可以跟蹤每個SEE的指令指針,其中每個SEE的指令指針由DXP設(shè)定。盡管圖示了具有不同接口的多個存儲器存儲區(qū)域,但是其中若干個接口可以共享到公共存儲器存儲區(qū)域的訪問,該公共存儲器存儲區(qū)域充當所有接口的物理存儲空間。本領(lǐng)域的技術(shù)人員將意識到,諸如異常處理單元之類的某些組件或者可以與RSP集成,或者可以連接到RSP作為分離元件。
對于給定語法集剖析器表、產(chǎn)生規(guī)則表和s-code表是如何填充的并不重要-例如,可以通過EPU、其中一個SEE上的根代碼段或在輸入端口處提供表填充指令的根語法段來實現(xiàn)填充。當然,也可以非易失性存儲器來實現(xiàn)表,從而使得不必在每次開機時都重新加載表。
圖示DXP操作的流程圖僅是說明性的-例如,這里意識到,給定的狀態(tài)機實現(xiàn)方式可并行完成圖示為順序任務(wù)的許多任務(wù),并且可以推測性地執(zhí)行許多操作。
盡管圖示并描述的多個實施例都只有單個輸入端口,但是“一個”輸入端口的描述僅僅表示至少一個端口存在。物理端口配置可以取決于應(yīng)用而變化。例如,取決于端口帶寬和剖析器性能,可以將多個輸入端口復(fù)用為相同的引導(dǎo)執(zhí)行剖析器。
本領(lǐng)域的技術(shù)人員將意識到,在本發(fā)明的范圍內(nèi)其他功能劃分也是可以的。另外,功能是否實現(xiàn)在通用集成電路(對于硬件實現(xiàn)方式)上只是設(shè)計選擇,并且可取決于應(yīng)用而變化。還意識到所描述的剖析器功能可以利用傳統(tǒng)的軟件技術(shù)實現(xiàn)在通用處理器上,盡管這可能有損于硬件實施例存在的某些優(yōu)點。
最后,盡管說明書在多個位置可能涉及到“一個”、“另一個”或“某些”實施例,但是這并不意味著每一個該處引用都指相同的實施例,或者該特征只存在于單個實施例。
權(quán)利要求
1.一種數(shù)據(jù)處理系統(tǒng),包括接收數(shù)據(jù)符號的輸入端口;具有存儲棧符號的棧的引導(dǎo)執(zhí)行剖析器,所述剖析器能夠響應(yīng)于接收的數(shù)據(jù)符號而處理棧符號;可由所述剖析器訪問的剖析器表,所述剖析器表能夠填充有產(chǎn)生規(guī)則代碼,所述產(chǎn)生規(guī)則代碼可由至少一個接收的數(shù)據(jù)符號和所述剖析器提供的棧符號的組合索引;可由所述剖析器訪問的產(chǎn)生規(guī)則表,所述產(chǎn)生規(guī)則表能夠填充有產(chǎn)生規(guī)則,所述產(chǎn)生規(guī)則可由產(chǎn)生規(guī)則代碼索引;第一語義代碼執(zhí)行引擎,當受所述引導(dǎo)執(zhí)行剖析器提示時,能夠利用所述剖析器指示的機器指令段執(zhí)行機器指令;以及可由所述語義代碼執(zhí)行引擎訪問的語義代碼表,所述語義代碼表能夠填充有機器指令段,所述機器指令段可由產(chǎn)生規(guī)則代碼索引。
2.如權(quán)利要求1所述的系統(tǒng),還包括第二語義代碼執(zhí)行引擎,當受所述引導(dǎo)執(zhí)行剖析器提示時,能夠利用所述剖析器指示的機器指令執(zhí)行機器指令,所述第一和第二語義代碼執(zhí)行引擎能夠并行執(zhí)行機器指令。
3.如權(quán)利要求2所述的系統(tǒng),還包括具有微處理器和關(guān)聯(lián)存儲器的異常處理單元,所述異常處理單元能夠在請求至少一個語義代碼執(zhí)行引擎時執(zhí)行任務(wù)。
4.如權(quán)利要求2所述的系統(tǒng),還包括連接到至少一個語義代碼執(zhí)行引擎的阻塞輸入/輸出端口,所述阻塞輸入/輸出端口能夠在至少一個語義代碼執(zhí)行引擎的控制下發(fā)起阻塞輸入/輸出操作。
5.如權(quán)利要求2所述的系統(tǒng),其中,產(chǎn)生規(guī)則代碼允許所述引導(dǎo)執(zhí)行剖析器確定對應(yīng)的語義代碼表機器指令段是否可定向到任何可用的語義代碼執(zhí)行引擎,或者該段是否應(yīng)當定向到特定的語義代碼執(zhí)行引擎。
6.如權(quán)利要求1所述的系統(tǒng),還包括所述引導(dǎo)執(zhí)行剖析器和所述語義代碼執(zhí)行引擎之間的接口,所述接口當受所述語義代碼執(zhí)行引擎引導(dǎo)時能夠懸掛所述引導(dǎo)執(zhí)行剖析器處理的棧符號。
7.如權(quán)利要求1所述的系統(tǒng),其中,所述剖析器表、產(chǎn)生規(guī)則表和語義代碼表至少部分地駐留在可重編程存儲設(shè)備中。
8.如權(quán)利要求7所述的系統(tǒng),其中,所述系統(tǒng)處理數(shù)據(jù)分組,每個數(shù)據(jù)分組根據(jù)一個或多個網(wǎng)絡(luò)協(xié)議進行格式化,所述剖析器表、產(chǎn)生規(guī)則表和語義代碼表是可重編程的以支持不同網(wǎng)絡(luò)協(xié)議的剖析。
9.如權(quán)利要求8所述的系統(tǒng),其中,在所述系統(tǒng)處理數(shù)據(jù)分組的同時,所述系統(tǒng)還可將網(wǎng)絡(luò)協(xié)議加載到剖析器表可重編程存儲設(shè)備中。
10.如權(quán)利要求1所述的系統(tǒng),還包括連接到數(shù)據(jù)存儲區(qū)域且可由所述語義代碼執(zhí)行引擎訪問的機器上下文數(shù)據(jù)接口,所述機器上下文數(shù)據(jù)接口管理所述數(shù)據(jù)存儲區(qū)域,并響應(yīng)于所述語義代碼執(zhí)行引擎發(fā)出的機器上下文指令而執(zhí)行數(shù)據(jù)操作。
11.如權(quán)利要求10所述的系統(tǒng),所述機器上下文數(shù)據(jù)接口包括變量機器上下文數(shù)據(jù)接口和數(shù)組機器上下文數(shù)據(jù)接口,所述數(shù)組機器上下文數(shù)據(jù)接口能夠管理數(shù)組數(shù)據(jù)并對數(shù)組數(shù)據(jù)執(zhí)行數(shù)據(jù)操作。
12.如權(quán)利要求11所述的系統(tǒng),其中,所述數(shù)組機器上下文數(shù)據(jù)接口以不同于所述變量機器上下文數(shù)據(jù)接口訪問數(shù)據(jù)存儲區(qū)域時的數(shù)據(jù)訪問格式的數(shù)據(jù)訪問格式來訪問至少一個數(shù)據(jù)存儲區(qū)域。
13.如權(quán)利要求1所述的系統(tǒng),其中,利用軟件來配置微處理器和其附接存儲器,實現(xiàn)了至少所述引導(dǎo)執(zhí)行剖析器、所述剖析器表和所述產(chǎn)生規(guī)則表。
14.如權(quán)利要求1所述的系統(tǒng),其中,所述產(chǎn)生規(guī)則表能夠存儲比特掩碼的終端符號,每個比特掩碼的終端符號能夠指示在對應(yīng)輸入符號中的所選比特是“無關(guān)緊要的”比特。
15.如權(quán)利要求1所述的系統(tǒng),其中,所述引導(dǎo)執(zhí)行剖析器執(zhí)行從以下方法組中選擇的剖析方法,所述方法組包括LL剖析、LR剖析、LALR剖析和遞歸下降剖析。
16.如權(quán)利要求1所述的系統(tǒng),其中,所述引導(dǎo)執(zhí)行剖析器能夠利用變量輸入符號超前查看來剖析輸入符號,所述變量輸入符號超前查看對于每個棧符號可以是變化的。
17.如權(quán)利要求16所述的系統(tǒng),其中,所述變量輸入符號超前查看可以與所述產(chǎn)生規(guī)則一同存儲為所述產(chǎn)生規(guī)則表中的值,并且當所述引導(dǎo)執(zhí)行剖析器將產(chǎn)生規(guī)則加載到所述棧中時,其也加載所述變量輸入符號超前查看。
18.如權(quán)利要求16所述的系統(tǒng),其中,所述剖析器表包括二進制或三進制內(nèi)容可尋址存儲器(CAM),其字的大小能夠存儲對應(yīng)于棧符號和上限為N個輸入符號組合的條目。
19.如權(quán)利要求18所述的系統(tǒng),其中,所述剖析器在每次訪問時向所述剖析器表提供N個輸入符號,每個CAM條目確定N個輸入符號中的哪一個影響該CAM條目的查找。
20.一種集成電路,包括接收數(shù)據(jù)符號的輸入端口;具有存儲棧符號的棧的引導(dǎo)執(zhí)行剖析器,所述剖析器能夠響應(yīng)于接收的數(shù)據(jù)符號而處理棧符號;可由所述剖析器訪問的剖析器表,所述剖析器表能夠填充有產(chǎn)生規(guī)則代碼,所述產(chǎn)生規(guī)則代碼可由接收的數(shù)據(jù)符號和所述剖析器提供的棧符號的組合索引;可由所述剖析器訪問的產(chǎn)生規(guī)則表,所述產(chǎn)生規(guī)則表能夠填充有產(chǎn)生規(guī)則,所述產(chǎn)生規(guī)則可由產(chǎn)生規(guī)則代碼索引;第一語義代碼執(zhí)行引擎,當受所述引導(dǎo)執(zhí)行剖析器提示時,能夠利用所述剖析器指示的機器指令段執(zhí)行機器指令;以及可由所述語義代碼執(zhí)行引擎訪問的語義代碼表,所述語義代碼表能夠填充有機器指令段,所述機器指令段可由產(chǎn)生規(guī)則代碼索引。
21.如權(quán)利要求20所述的集成電路,還包括第二語義代碼執(zhí)行引擎,當受所述引導(dǎo)執(zhí)行剖析器提示時,能夠利用所述剖析器指示的機器指令來執(zhí)行機器指令,所述第一和第二語義代碼執(zhí)行引擎能夠并行執(zhí)行機器指令。
22.如權(quán)利要求21所述的集成電路,還包括具有微處理器的異常處理單元,所述異常處理單元能夠在請求至少一個語義代碼執(zhí)行引擎時執(zhí)行可編程任務(wù)。
23.如權(quán)利要求21所述的集成電路,還包括連接到至少一個語義代碼執(zhí)行引擎的阻塞輸入/輸出端口,所述阻塞輸入/輸出端口能夠在至少一個語義代碼執(zhí)行引擎的控制下發(fā)起阻塞輸入/輸出操作。
24.如權(quán)利要求21所述的集成電路,其中,產(chǎn)生規(guī)則代碼允許所述引導(dǎo)執(zhí)行剖析器確定對應(yīng)的語義代碼表機器指令段是否可定向到任何可用的語義代碼執(zhí)行引擎,或者該段是否應(yīng)當定向到特定的語義代碼執(zhí)行引擎。
25.如權(quán)利要求20所述的集成電路,還包括所述引導(dǎo)執(zhí)行剖析器和所述語義代碼執(zhí)行引擎之間的接口,所述接口當受所述語義代碼執(zhí)行引擎引導(dǎo)時能夠懸掛所述引導(dǎo)執(zhí)行剖析器處理的棧符號。
26.如權(quán)利要求20所述的集成電路,其中,所述剖析器表、產(chǎn)生規(guī)則表和語義代碼表至少部分地駐留在可重編程存儲設(shè)備中。
27.如權(quán)利要求26所述的集成電路,其中,所述剖析器表、產(chǎn)生規(guī)則表和語義代碼表包括緩存,所述緩存用于駐留在與所述集成電路相分離的存儲器中的更大的表。
28.如權(quán)利要求20所述的集成電路,還包括可連接到數(shù)據(jù)存儲區(qū)域且可由所述語義代碼執(zhí)行引擎訪問的機器上下文數(shù)據(jù)接口,所述機器上下文數(shù)據(jù)接口管理所述數(shù)據(jù)存儲區(qū)域,并響應(yīng)于所述語義代碼執(zhí)行引擎發(fā)出的機器上下文指令執(zhí)行數(shù)據(jù)操作。
29.如權(quán)利要求28所述的集成電路,其中,所述數(shù)據(jù)存儲區(qū)域至少部分地集成在所述集成電路上。
30.如權(quán)利要求28所述的集成電路,所述機器上下文數(shù)據(jù)接口包括變量機器上下文數(shù)據(jù)接口和數(shù)組機器上下文數(shù)據(jù)接口,所述數(shù)組機器上下文數(shù)據(jù)接口能夠管理數(shù)組數(shù)據(jù)并對數(shù)組數(shù)據(jù)執(zhí)行數(shù)據(jù)操作。
31.如權(quán)利要求30所述的集成電路,其中,所述數(shù)組機器上下文數(shù)據(jù)接口以不同于所述變量機器上下文數(shù)據(jù)接口訪問數(shù)據(jù)存儲區(qū)域時的數(shù)據(jù)訪問格式的數(shù)據(jù)訪問格式來訪問至少一個數(shù)據(jù)存儲區(qū)域。
32.一種集成電路,包括接收數(shù)據(jù)符號的輸入端口;具有存儲棧符號的棧的引導(dǎo)執(zhí)行剖析器,所述剖析器能夠響應(yīng)于接收的數(shù)據(jù)符號而處理棧符號;可由所述剖析器訪問的剖析器表,所述剖析器表能夠填充有產(chǎn)生規(guī)則代碼,所述產(chǎn)生規(guī)則代碼可由接收的數(shù)據(jù)符號和所述剖析器提供的棧符號的組合索引;可由所述剖析器訪問的產(chǎn)生規(guī)則表,所述產(chǎn)生規(guī)則表能夠填充有產(chǎn)生規(guī)則,所述產(chǎn)生規(guī)則可由產(chǎn)生規(guī)則代碼索引;多個語義代碼執(zhí)行引擎,每個語義代碼執(zhí)行引擎當受所述引導(dǎo)執(zhí)行剖析器提示時,都能夠利用所述剖析器指示的機器指令段執(zhí)行機器指令;可由所述語義代碼執(zhí)行引擎訪問的語義代碼表,所述語義代碼表能夠填充有機器指令段,所述機器指令段可由產(chǎn)生規(guī)則代碼索引;以及可連接到數(shù)據(jù)存儲區(qū)域且可由所述語義代碼執(zhí)行引擎訪問的機器上下文數(shù)據(jù)接口,所述機器上下文數(shù)據(jù)接口管理所述數(shù)據(jù)存儲區(qū)域,并響應(yīng)于所述語義代碼執(zhí)行引擎發(fā)出的機器上下文指令來執(zhí)行數(shù)據(jù)操作。
33.如權(quán)利要求32所述的集成電路,還包括所述語義代碼執(zhí)行引擎和所述語義代碼表之間的第一總線;以及所述語義代碼執(zhí)行引擎和所述機器上下文數(shù)據(jù)接口之間的第二總線。
34.如權(quán)利要求33所述的集成電路,還包括允許所述語義代碼執(zhí)行引擎訪問所述數(shù)據(jù)符號的輸入總線。
35.如權(quán)利要求32所述的集成電路,還包括所述引導(dǎo)執(zhí)行剖析器和所述語義代碼執(zhí)行引擎之間的接口,所述接口可訪問每個語義代碼執(zhí)行引擎的狀態(tài)信息,并且能夠基于語義代碼執(zhí)行引擎的狀態(tài)懸掛所述引導(dǎo)執(zhí)行剖析器處理的棧符號。
36.如權(quán)利要求35所述的集成電路,其中,所述狀態(tài)信息包括信號量集,所述信號量集對應(yīng)于語義代碼執(zhí)行引擎,并且可由對應(yīng)的語義代碼執(zhí)行引擎設(shè)置。
37.一種集成電路,包括接收數(shù)據(jù)符號的輸入端口;引導(dǎo)執(zhí)行剖析器,包括存儲棧符號的棧,所述剖析器能夠響應(yīng)于接收的數(shù)據(jù)符號而處理棧符號;允許所述剖析器訪問剖析器表的剖析器表接口,所述剖析器表能夠填充有產(chǎn)生規(guī)則代碼,每個代碼可由接收的數(shù)據(jù)符號和所述剖析器提供的棧符號的組合索引;允許所述剖析器訪問產(chǎn)生規(guī)則表的產(chǎn)生規(guī)則表接口,所述產(chǎn)生規(guī)則表能夠填充有產(chǎn)生規(guī)則,每個規(guī)則可由產(chǎn)生規(guī)則代碼索引;以及第一語義代碼執(zhí)行引擎,當受所述引導(dǎo)執(zhí)行剖析器提示時,能夠利用所述剖析器指示的機器指令段執(zhí)行機器指令;以及允許所述語義代碼執(zhí)行引擎訪問語義代碼表的語義代碼表接口,所述語義代碼表能夠填充有對應(yīng)于產(chǎn)生規(guī)則的機器指令段。
38.如權(quán)利要求36所述的集成電路,還包括集成在所述電路上的所述剖析器表、產(chǎn)生規(guī)則表和語義代碼表中的至少一部分。
39.如權(quán)利要求36所述的集成電路,其中,所述產(chǎn)生規(guī)則表能夠存儲比特掩碼的終端符號,每個比特掩碼的終端符號能夠指示在對應(yīng)輸入符號中的所選比特是“無關(guān)緊要的”比特。
40.如權(quán)利要求36所述的集成電路,其中,所述引導(dǎo)執(zhí)行剖析器執(zhí)行從以下方法組中選擇的剖析方法,所述方法組包括LL剖析、LR剖析、LALR剖析和遞歸下降剖析。
41.如權(quán)利要求36所述的集成電路,其中,所述引導(dǎo)執(zhí)行剖析器能夠利用變量輸入符號超前查看來剖析輸入符號,所述變量輸入符號超前查看對于每個棧符號可以是變化的。
42.如權(quán)利要求41所述的集成電路,其中,所述變量輸入符號超前查看可以與所述產(chǎn)生規(guī)則一同存儲為所述產(chǎn)生規(guī)則表中的值,并且當所述引導(dǎo)執(zhí)行剖析器將產(chǎn)生規(guī)則加載到所述棧中時,其也加載所述變量輸入符號超前查看。
43.如權(quán)利要求41所述的集成電路,其中,所述剖析器表包括三進制內(nèi)容可尋址存儲器(CAM),其字的大小能夠存儲對應(yīng)于棧符號和上限為N個輸入符號組合的條目。
44.如權(quán)利要求43所述的集成電路,其中,所述剖析器在每次訪問時向所述剖析器表提供N個輸入符號,每個CAM條目確定N個輸入符號中的哪一個影響該CAM條目的查找。
45.一種配置數(shù)據(jù)處理器來處理數(shù)據(jù)報數(shù)據(jù)輸入流的方法,所述方法包括在產(chǎn)生規(guī)則表中存儲用于解釋數(shù)據(jù)報的產(chǎn)生規(guī)則集,每個規(guī)則包括一個或多個符號;在語義代碼表中存儲語義執(zhí)行引擎指令集,每個語義執(zhí)行引擎指令包括與至少某些產(chǎn)生規(guī)則相關(guān)聯(lián)的代碼段;以及在剖析器表中存儲參考所述產(chǎn)生規(guī)則的產(chǎn)生規(guī)則代碼集。
46.如權(quán)利要求45所述的方法,還包括一旦在所述數(shù)據(jù)報數(shù)據(jù)輸入流中接收到起始符號,則根據(jù)所存儲的產(chǎn)生規(guī)則初始化引導(dǎo)執(zhí)行剖析器以開始剖析數(shù)據(jù)報。
47.一種操作網(wǎng)絡(luò)處理器的方法,所述方法包括在輸入端口檢測接收到包括多個數(shù)據(jù)符號的數(shù)據(jù)報的起始;引導(dǎo)引導(dǎo)執(zhí)行剖析器根據(jù)存儲的產(chǎn)生規(guī)則集剖析來自所述數(shù)據(jù)報的數(shù)據(jù)符號;以及至少在剖析過程期間,引導(dǎo)語義代碼執(zhí)行引擎執(zhí)行與產(chǎn)生規(guī)則相關(guān)聯(lián)的代碼段。
48.如權(quán)利要求47所述的方法,還包括在所述代碼段的執(zhí)行期間,執(zhí)行生成到附接的機器上下文數(shù)據(jù)接口的機器上下文數(shù)據(jù)請求的指令,并將所述機器上下文數(shù)據(jù)請求轉(zhuǎn)換為至少一個物理存儲器的操作。
49.如權(quán)利要求47所述的方法,還包括檢測不能由語義代碼執(zhí)行引擎處理的數(shù)據(jù)報內(nèi)容的存在;以及引導(dǎo)異常處理單元處理所述數(shù)據(jù)報內(nèi)容。
50.如權(quán)利要求47所述的方法,其中,執(zhí)行所述代碼段包括引導(dǎo)對阻塞輸入/輸出端口的阻塞輸入/輸出數(shù)據(jù)操作。
51.一種實現(xiàn)網(wǎng)絡(luò)分組協(xié)議的方法,所述方法包括將所述協(xié)議劃分為可剖析語法產(chǎn)生規(guī)則集,每個包括從終端和非終端符號中選出的至少一個符號,以及要由執(zhí)行引擎執(zhí)行的至少某些產(chǎn)生規(guī)則的機器上下文任務(wù)集;將非終端代碼和產(chǎn)生規(guī)則代碼分配到產(chǎn)生規(guī)則;以機器可存儲格式組織所述語法產(chǎn)生規(guī)則,所述語法產(chǎn)生規(guī)則可由產(chǎn)生規(guī)則代碼索引;以執(zhí)行引擎指令代碼格式組織所述機器上下文任務(wù),所述機器上下文任務(wù)可由與對應(yīng)的產(chǎn)生規(guī)則相關(guān)聯(lián)的所述產(chǎn)生規(guī)則代碼索引;以及以機器可存儲格式生成產(chǎn)生規(guī)則代碼的剖析器表,所述剖析器表可由非終端符號和在所述網(wǎng)絡(luò)分組協(xié)議要剖析的分組中出現(xiàn)的至少一個符號的組合來索引。
52.如權(quán)利要求51所述的方法,還包括以所述機器可存儲格式產(chǎn)生規(guī)則給所述符號加上前綴代碼,所述前綴代碼指示每個符號是終端符號還是非終端符號。
53.如權(quán)利要求52所述的方法,所述前綴代碼還指示終端符號是否能匹配與其成對的任何網(wǎng)絡(luò)分組協(xié)議符號。
54.如權(quán)利要求51所述的方法,還包括對于至少一個終端符號,將比特掩碼分配到該符號并且以包含該符號的所述產(chǎn)生規(guī)則存儲所述比特掩碼。
55.如權(quán)利要求51所述的方法,還包括基于非終端符號和多個輸入符號的組合,設(shè)置所述剖析器表中的至少某些索引。
56.如權(quán)利要求55所述的方法,其中,所述剖析器表中的每個索引可以基于上限為N個索引位置的N個輸入符號,并且其中設(shè)置所述剖析器表中至少某些索引的步驟包括對于每個索引,使用1和N之間的索引位置,并且如果有所述索引位置的剩余部分的話,則將所述索引位置的剩余部分設(shè)為“無關(guān)緊要的”條件。
全文摘要
公開了數(shù)據(jù)處理器和其配置方法。與傳統(tǒng)的馮·諾依曼微處理器不同的是,所公開的處理器是語義處理器(100),其剖析輸入流,并且取決于剖析內(nèi)容引導(dǎo)一個或多個語義執(zhí)行引擎(300)執(zhí)行代碼段。對于諸如分組數(shù)據(jù)流之類的定義結(jié)構(gòu)輸入流,這些語義處理器與馮·諾依曼系統(tǒng)相比,可以是既經(jīng)濟又快速的。多個可選組件可以增加設(shè)備操作。例如,機器上下文數(shù)據(jù)接口將語義執(zhí)行引擎(300)從管理物理存儲器的壓力中緩解出來,允許多個引擎順序地訪問存儲器,并實現(xiàn)正常的訪問操作。另外,簡單的馮·諾依曼異常處理單元可以附接到語義執(zhí)行引擎,以執(zhí)行更復(fù)雜的、但是不經(jīng)常執(zhí)行的或時間要求不嚴格的操作。
文檔編號G06F17/27GK1742272SQ200380109213
公開日2006年3月1日 申請日期2003年11月12日 優(yōu)先權(quán)日2003年1月24日
發(fā)明者索姆索布理·司柯達爾 申請人:米斯特科技有限公司