国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      處理電路和搜索處理器電路的制作方法

      文檔序號(hào):6419548閱讀:397來源:國知局
      專利名稱:處理電路和搜索處理器電路的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及在高速數(shù)據(jù)流中識(shí)別和比較的復(fù)雜模式的處理電路,特別是在搜索和查找存儲(chǔ)在結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)庫中的數(shù)據(jù)的搜索引擎中的應(yīng)用,其中該處理電路形成這種處理電路網(wǎng)絡(luò)中的一個(gè)節(jié)點(diǎn),一個(gè)搜索處理器電路包括一個(gè)具有樹狀結(jié)構(gòu)的多處理器單元Pn,用于在高速數(shù)據(jù)流中識(shí)別和比較復(fù)雜模式,特別是用于查找和索引存儲(chǔ)在結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)庫中的數(shù)據(jù)的搜索引擎中,其中多處理器單元Pn包括依照權(quán)利要求1的處理電路P1,并且多處理器單元Pn形成一個(gè)體現(xiàn)為一個(gè)具有n+1個(gè)層面S0,S1….Sn和等級(jí)數(shù)k=2m的二進(jìn)制或超二進(jìn)制樹的電路,其中m是一個(gè)大于或等于1的正整數(shù),一個(gè)超二進(jìn)制樹通過k>2來定義。
      本發(fā)明在一個(gè)具有多個(gè)處理電路的多處理器單元的基礎(chǔ)上實(shí)現(xiàn)一個(gè)搜索處理器電路。在一個(gè)搜索操作中,一個(gè)數(shù)據(jù)流通過搜索處理器電路的處理電路同步傳送,對(duì)于每個(gè)步驟,將芯片中的當(dāng)前數(shù)據(jù)與一些模式或其它的可能被編碼為位串并預(yù)先輸入到處理電路的模式進(jìn)行比較。
      為了在大型數(shù)據(jù)流中搜索信息,近年來已經(jīng)開發(fā)了一些專用的處理器,例如對(duì)于互聯(lián)網(wǎng)或內(nèi)聯(lián)網(wǎng)等類型的數(shù)據(jù)通訊網(wǎng)絡(luò)的搜索引擎,監(jiān)控?cái)?shù)據(jù)流內(nèi)容和查找大型結(jié)構(gòu)化或非結(jié)構(gòu)化的數(shù)據(jù)庫的數(shù)據(jù)等,這些信息是很典型的。原因是在上述領(lǐng)域中識(shí)別和查找信息是非常關(guān)鍵的操作,不便于利用普通的數(shù)據(jù)處理器來得以有效的實(shí)現(xiàn)。大數(shù)據(jù)容量中的模式搜索和查找基本上適宜于利用很多個(gè)同時(shí)在相同或不同的數(shù)據(jù)段進(jìn)行搜索的處理單元在整體上并行解決。通過利用整體并行處理,將可以同時(shí)處理大量的查詢或搜索。對(duì)于搜索,建議使用具有能夠充分描述搜索信息特征的表達(dá)式能力的特殊的搜索語言。
      本技術(shù)領(lǐng)域中有熟知的使用數(shù)據(jù)或符號(hào)的串比較的處理器。作為這種連接中的先前技術(shù)的一個(gè)例子,可以參考國際專利申請PCT/NO92/00171,題目為“非數(shù)字協(xié)處理器”。此外還有Paracel公司開發(fā)的特別適用于分析數(shù)據(jù)間相似性的稱為快速數(shù)據(jù)尋找器(FDF)的數(shù)據(jù)處理單元。FDF采用一個(gè)可以檢測一個(gè)精確匹配的匹配技術(shù)模式,但也能夠發(fā)現(xiàn)弱相似性,這些在基因研究和文本搜索時(shí)是很有用的。
      此外,還有出自于美國專利5 553 272(Ranganathan等),被認(rèn)為是一個(gè)用于計(jì)算一個(gè)給定字母表的兩個(gè)字符串間的編排距離的線性脈動(dòng)數(shù)組處理器。這一計(jì)算是基于一個(gè)可減少表示一個(gè)計(jì)算中的狀況所需位數(shù)的編碼方案。給出該脈動(dòng)數(shù)組處理器一個(gè)結(jié)構(gòu),該結(jié)構(gòu)不限制那些可以進(jìn)行比較并使用僅需與最近的鄰近單元通訊的簡單基本單元的字符串長度,這樣非常適合實(shí)現(xiàn)超大規(guī)模集成電路。
      已知的專用搜索處理器的一個(gè)缺陷是它們不能提供處理非常復(fù)雜的搜索查詢的足夠先進(jìn)的功能。另一個(gè)缺陷是在更大的程度上它們是基于一個(gè)僅能很困難地提供這種無需多余復(fù)雜程度的功能的電路結(jié)構(gòu)。
      美國專利4860201(Stolfo等)給出了一個(gè)解決這一問題的嘗試,該專利公開了一個(gè)如同二進(jìn)制樹一樣結(jié)構(gòu)的并行處理裝置,其中使用了許多個(gè)處理器,每一個(gè)都有自己的輸入/輸出單元。一般地說,Stolfo等人公開了一個(gè)具有連接在一個(gè)二進(jìn)制樹狀結(jié)構(gòu)中的許多個(gè)處理器的計(jì)算機(jī),這樣每個(gè)處理器除了那些分別形成樹的根和葉的處理器,都有一個(gè)單獨(dú)的父處理器和兩個(gè)子處理器。典型地,處理器與從一個(gè)父處理器傳輸來的數(shù)據(jù)同步工作,并進(jìn)一步將結(jié)果與最近的下面的處理器進(jìn)行通訊。同時(shí),一個(gè)父處理器的子處理器也可以相互通訊。根據(jù)Stolfo等人的專利申請,每個(gè)節(jié)點(diǎn)形成一個(gè)處理單元,包括一個(gè)真實(shí)意義上的處理器、一個(gè)讀/寫存儲(chǔ)器或一個(gè)隨機(jī)存取存儲(chǔ)器、和一個(gè)輸入/輸出裝置。輸入/輸出裝置提供每個(gè)處理單元與其父處理單元和子處理單元間的接口,這樣可以很好地改進(jìn)通過二進(jìn)制樹狀結(jié)構(gòu)傳輸數(shù)據(jù)的速度。因?yàn)槎M(jìn)制樹狀結(jié)構(gòu)在每個(gè)節(jié)點(diǎn)中有一個(gè)處理單元,處理裝置通常包含2n-1個(gè)處理單元,即如果二進(jìn)制樹實(shí)現(xiàn)為n=10層,則共有1023個(gè)處理單元。在該先前技術(shù)的一個(gè)優(yōu)選實(shí)施方案中,并行處理裝置具有一個(gè)12MHz的時(shí)鐘頻率,在使用一個(gè)具有1023個(gè)處理器的樹的情況下,每個(gè)具有1.8微妙平均指令周期的處理器可提供一個(gè)每秒鐘大約5.7億條指令的處理性能。
      一個(gè)這種類型的二進(jìn)制并行處理器可以很好地適用于解決可分區(qū)的數(shù)據(jù)處理問題,例如在大信息量中的搜索。可分區(qū)搜索問題可以定義為這樣一個(gè)問題,其中關(guān)于一個(gè)對(duì)象x和對(duì)象集的關(guān)系的查詢相當(dāng)于重復(fù)使用一個(gè)具有一個(gè)標(biāo)識(shí)的可交換的相關(guān)的二進(jìn)制操作符b,和一個(gè)用于一個(gè)新對(duì)象x和集F中每個(gè)元素f間的基本的搜索查詢q。當(dāng)邏輯運(yùn)算OR與用于一個(gè)新對(duì)象x和集F中每個(gè)元素f間的基本查詢“x等于f”相結(jié)合時(shí),存在一個(gè)分區(qū)搜索的問題。如Stolfo等人的專利所述,包括一個(gè)關(guān)于集F的查詢回答的問題,可以通過用于集F的任意子集的查詢的組合來回答。換句話說,該問題是分區(qū)的,并非常適應(yīng)于通過并行處理快速執(zhí)行。集F被任意劃分為數(shù)量等于可用處理器數(shù)的子集。然后基本查詢q被并行用于每個(gè)與所有處理器通訊的未知的x和集F的本地存儲(chǔ)元素f間的處理器。而后,通過操作符b的log2N次重復(fù)把結(jié)果并行任意組合,首先在N/2個(gè)處理器毗鄰對(duì)上進(jìn)行大量計(jì)算,然后用第一次計(jì)算得出的結(jié)果在N/4個(gè)處理器對(duì)上進(jìn)行相應(yīng)數(shù)量的計(jì)算。這樣,在處理期間,操作在二進(jìn)制樹中向上面的層面移動(dòng),換句話說,就是從子處理器向父處理器移動(dòng),并在每個(gè)層上并行重復(fù)執(zhí)行。
      根據(jù)屬于本申請人的國際專利申請PCT/NO99/00308,已知一個(gè)適用于數(shù)字?jǐn)?shù)據(jù)信號(hào)結(jié)構(gòu)處理的數(shù)字處理裝置,其中數(shù)據(jù)信號(hào)結(jié)構(gòu)包括循環(huán)序列和/或嵌套的模式。該處理裝置通常配置為一個(gè)具有n+1層面S0,S1….Sn和等級(jí)數(shù)為k的常規(guī)樹。與上述編號(hào)為4860201的美國專利發(fā)布的內(nèi)容相比,該結(jié)構(gòu)體系提供的許多優(yōu)勢,并且在一個(gè)實(shí)施方案中可以用來實(shí)現(xiàn)基于一個(gè)常規(guī)2次二進(jìn)制樹或一個(gè)2m次的超二進(jìn)制樹的多處理器結(jié)構(gòu)體系,其中m為大于2的正整數(shù),這樣,例如一個(gè)超二進(jìn)制樹將有4、8、16的等級(jí)數(shù)。類似與美國專利4860201中所提出的,一個(gè)這種類型的二進(jìn)制或超二進(jìn)制樹結(jié)構(gòu)將能夠用一個(gè)有效的方式來解決分區(qū)搜索問題。
      這樣,本發(fā)明的主要目的是提供一個(gè)搜索處理器電路,在上述國際專利申請中公開的普通多處理器結(jié)構(gòu)體系的基礎(chǔ)上,可以利用一個(gè)能夠避免上面提到的需要專用搜索處理器的缺陷的多處理器結(jié)構(gòu)體系來實(shí)現(xiàn)該電路,而該電路還同時(shí)還能提供一個(gè)比美國專利4860201中公布的利用并行處理器處理更好的處理技術(shù)和裝置的經(jīng)濟(jì)性。
      而且,本發(fā)明的一個(gè)目的是提供一個(gè)處理電路,可以被用于在一個(gè)搜索處理器電路中實(shí)現(xiàn)一個(gè)多處理器單元,通過模式的比較來進(jìn)行有效的搜索操作。
      最后,本發(fā)明的另一個(gè)目的是提供一個(gè)搜索處理器電路,其結(jié)構(gòu)不僅能夠利用適當(dāng)?shù)墓δ芙鉀Q二進(jìn)制分區(qū)搜索問題,而且借助于微電子領(lǐng)域的已知的可用的電路解決方法的不同程度的集成,使其便于實(shí)現(xiàn)。特別地,在這種連接中,可以以一個(gè)微電子組件的形式來實(shí)現(xiàn),該微電子組件可以實(shí)現(xiàn)為所謂的現(xiàn)場可編程門陣列(FPGA)或一個(gè)特定用途集成電路(ASIC)。
      根據(jù)本發(fā)明,通過一個(gè)處理器電路實(shí)現(xiàn)上述的目的和其它特征及優(yōu)勢,該處理器電路的特征是它包括一個(gè)具有分別為處理電路的配置和運(yùn)行參數(shù)的數(shù)據(jù)輸入和輸出的接口,針對(duì)一個(gè)給定的處理任務(wù),配置參數(shù)是通過接口的未指明的或?qū)S玫妮斎胍淮涡匀刻峁?,通過執(zhí)行給定處理任務(wù)來處理的運(yùn)行數(shù)據(jù)是通過特定的接口輸入和輸出連續(xù)輸入到處理電路或從處理電路輸出,至少一個(gè)比較器單元形式的核心處理器,比較器單元適用于比較兩個(gè)數(shù)據(jù)字,和一個(gè)與比較器單元連接的邏輯單元,邏輯單元包括一個(gè)與接口的下列輸入相連的多路復(fù)用器一個(gè)順序數(shù)據(jù)輸入、一個(gè)順序文件輸入、一個(gè)順序觸發(fā)器輸入、一個(gè)前面的處理電路的順序結(jié)果輸入、一個(gè)后面處理電路的順序結(jié)果輸入、一個(gè)并行數(shù)據(jù)輸入、一個(gè)并行文件輸入、一個(gè)并行觸發(fā)器輸入、一個(gè)前面的處理電路的并行結(jié)果輸入和一個(gè)后面處理電路的并行結(jié)果輸入;還與下列的接口輸出連接一個(gè)所選數(shù)據(jù)值的輸出、一個(gè)所選文件值的輸出、一個(gè)所選觸發(fā)器值的輸出、一個(gè)所選前面的處理電路結(jié)果的輸出和一個(gè)所選文件值的輸出、一個(gè)所選觸發(fā)器值的輸出、一個(gè)所選前面電路結(jié)果的輸出、和一個(gè)所選后面處理電路結(jié)果的輸出;第一個(gè)D觸發(fā)器;一個(gè)用于將一個(gè)正二進(jìn)制值延遲給定數(shù)目時(shí)間單位的等待時(shí)間單元;一個(gè)第二D觸發(fā)器;一個(gè)用于檢測和控制比較器單元的比較操作的順序控制單元,和一個(gè)用于合并兩個(gè)其它處理電路的結(jié)果值的結(jié)果選擇器或其它結(jié)果選擇器;比較器單元連接一個(gè)多路復(fù)用器上的所選數(shù)據(jù)值的輸出和一個(gè)接口中的數(shù)據(jù)輸出,進(jìn)一步還有一個(gè)結(jié)果輸出連接第一個(gè)與門,一個(gè)相等單元連接第二個(gè)與門,第一個(gè)D觸發(fā)器連接多路復(fù)用器上一個(gè)所選文件值的輸出,并有一個(gè)復(fù)位輸出通過一根復(fù)位線分別連接第一個(gè)與門的一個(gè)輸入、第二個(gè)與門的一個(gè)輸入、等待時(shí)間單元的一個(gè)輸入、以及一個(gè)接口中的文件輸入,第二個(gè)與門具有一個(gè)接口中的相等輸出,時(shí)間等待單元連接第一個(gè)與門的輸出和順序控制單元的結(jié)果輸入,第二個(gè)D觸發(fā)器連接第一個(gè)D觸發(fā)器的復(fù)位輸出和分別連接順序控制單元上的一個(gè)觸發(fā)器輸出和輸入,以及連接一個(gè)接口中的觸發(fā)器輸出,順序控制單元連接一個(gè)所選觸發(fā)器值的輸出和一個(gè)所選的多路復(fù)用器上前面處理電路結(jié)果輸出,和連接一個(gè)前面處理電路的結(jié)果輸入和接口中的結(jié)果輸出,結(jié)果選擇器分別連接接口中的第一個(gè)結(jié)果輸入、第二個(gè)文件輸入、第一個(gè)相等輸入、第二個(gè)結(jié)果輸入、第二個(gè)文件輸入、和第二個(gè)相等輸入,并分別連接接口中的一個(gè)結(jié)果輸出、一個(gè)文件輸出和一個(gè)相等輸出。
      依照本發(fā)明的處理電路的一個(gè)優(yōu)選實(shí)施方案中,比較器單元COM包括一個(gè)第一寄存器,在所有情況下包含以數(shù)據(jù)字x形式的輸入數(shù)據(jù),分別連接一個(gè)數(shù)據(jù)輸入和一個(gè)數(shù)據(jù)輸出,一個(gè)第二寄存器,包括一個(gè)與第一寄存器中的數(shù)據(jù)字x進(jìn)行比較的數(shù)據(jù)字a,以及一個(gè)或多個(gè)邏輯門和一個(gè)多路復(fù)用器,連接到寄存器用于執(zhí)行一個(gè)比較操作,一個(gè)包括比較器單元結(jié)果輸出的多路復(fù)用器輸出。
      依照本發(fā)明的處理電路的一個(gè)優(yōu)選實(shí)施方案中,等待時(shí)間單元包括一個(gè)計(jì)數(shù)器,分別通過一個(gè)第一輸入與第二與門的輸出相連接,通過一個(gè)第二輸入與復(fù)位線相連接,計(jì)數(shù)器與一個(gè)包含一個(gè)配置等待時(shí)間參數(shù)的等待時(shí)間寄存器相連接,并有一個(gè)輸出,即等待時(shí)間單元結(jié)果輸出。
      依照本發(fā)明的處理電路的一個(gè)優(yōu)選實(shí)施方案中,順序控制單元包括一個(gè)第一與門,與前面處理電路的結(jié)果輸入和等待時(shí)間單元的結(jié)果輸出相連接。一個(gè)第一或門,分別與第一與門的一個(gè)輸出和第二D觸發(fā)器的一個(gè)輸出相連接,一個(gè)第二與門,與等待時(shí)間單元的結(jié)果輸出和后面的處理電路的結(jié)果輸入相連接,一個(gè)第二或門,與后面處理電路的結(jié)果輸入和第二D觸發(fā)器的輸出相連接,一個(gè)第三與門,與等待時(shí)間單元的結(jié)果輸出和或門的輸出相連接,一個(gè)多路復(fù)用器,分別與等待時(shí)間單元的結(jié)果輸出、每個(gè)與門和第一或門的輸出、前面處理電路的結(jié)果輸入和后面處理電路的觸發(fā)器輸出、一個(gè)形成后面處理電路的結(jié)果輸出的順序控制單元的輸出相連接。
      依照本發(fā)明的處理電路的一個(gè)優(yōu)選實(shí)施方案中,結(jié)果選擇器包括一個(gè)第一與門,與第一相等輸入和第二相等輸入相連接,一個(gè)第二與門,與第一結(jié)果輸入和第二結(jié)果輸入相連接,一個(gè)第三與門,與第一結(jié)果輸入和第二相等輸入相連接,一個(gè)非門,與第二相等輸入相連接,一個(gè)第四與門,與第二結(jié)果輸入和非門輸出相連接,一個(gè)第一或門,分別與第一和第二相等輸入相連接,一個(gè)第二或門,分別與第一和第二相等輸入相連接,一個(gè)第三或門,分別與第三和第四與門的輸出相連接,一個(gè)多路復(fù)用器,分別與第一結(jié)果輸入、第二結(jié)果輸入、第一相等輸入、第二相等輸入、第一和第二與門的輸出、以及第一、第二和第三或門的輸出相連接,一個(gè)第五與門,分別與接口中的第一和第二文件輸入和文件輸出相連接,一個(gè)第六與門,分別與第五與門的輸出、多路復(fù)用器的一個(gè)第一輸出和接口中的結(jié)果輸出相連接,和一個(gè)第七與門,分別與第五與門和多路復(fù)用器的一個(gè)第二輸出,以及接口中的相等輸出相連接。
      依照本發(fā)明,也可以通過一個(gè)搜索處理器電路實(shí)現(xiàn)上述的目的和其它的特性及優(yōu)點(diǎn),該搜索處理器電路的特點(diǎn)是在Sn層上提供多處理器單元,形成樹的一個(gè)根節(jié)點(diǎn),它包括一個(gè)接口Ipn和一個(gè)邏輯單元E,最近的下面一層Sn-1包括2m個(gè)在多處理器單元Pn中嵌套提供的電路Pn- 1,并由此形成子節(jié)點(diǎn),每個(gè)電路Pn-1具有唯一的接口Ipn-1并包括一個(gè)相應(yīng)的邏輯單元E,下面層Sn-q(q∈{1,2,….n-1})上的多處理器單元Pn通常包括2mq個(gè)具有接口Ipn-q的電路Pn-q和相應(yīng)的邏輯單元,在下面層Sn-q+1上的2m(q-1)個(gè)電路Pn-q中是嵌套提供的,該層上每個(gè)電路Pn-q-1包括2m個(gè)電路Pn-q,針對(duì)q=n=S0的多處理器單元Pn規(guī)定的n-q=0的第零層包括2m(n-1)—2mn個(gè)單元核心處理器P0,形成層S1的2m(n-1)個(gè)處理電路P1中的比較器單元,每個(gè)處理電路P1包括1—2m個(gè)比較器單元,每個(gè)單元具有接口Ip1和相應(yīng)的邏輯單元,通常層S1,S2…Sn上所有的電路P1,P2…Pn具有唯一的接口I,這樣有Ip1=Ip2=…Ipn=I,每個(gè)邏輯單元包括一個(gè)結(jié)果選擇器或一個(gè)用于收集由層S1上的處理電路P1執(zhí)行的搜索操作或比較操作結(jié)果的查詢表單元。
      依照本發(fā)明的搜索處理器電路的一個(gè)優(yōu)選實(shí)施方案中,層上的每個(gè)處理電路包括2m個(gè)比較器單元,這樣多處理器單元Pn形成一個(gè)未簡化的二進(jìn)制或超二進(jìn)制樹,一個(gè)處理電路P1映射一個(gè)上層上的具有一個(gè)因數(shù)r=2m的電路P2,通常對(duì)于q∈{1,2,….n-1},層Sn-q一個(gè)電路Pn-q映射一個(gè)上層Sn-q+1上的具有一個(gè)因數(shù)r=2m的電路Pn-q+1,這樣在所有情況下配置電路Pn的二進(jìn)制或超二進(jìn)制樹包括一個(gè)從層S1開始的遞歸產(chǎn)生的二進(jìn)制或超二進(jìn)制樹。
      依照本發(fā)明的搜索處理器電路的一個(gè)優(yōu)選實(shí)施方案,其中邏輯單元包括一個(gè)等待時(shí)間單元和一個(gè)順序控制單元,以及一個(gè)查詢表單元,邏輯單元還包括一個(gè)第一與門、一個(gè)第一多路復(fù)用器、一個(gè)第二與門和一個(gè)第二多路復(fù)用器,查詢表單元與下面一層的每個(gè)處理電路Pn-1的一個(gè)結(jié)果輸出相連接,第一與門與每個(gè)上述電路Pn-1的一個(gè)文件輸出相連接,第二與門與第一與門的輸出和查詢表的輸出相連接,第一多路復(fù)用器與第二與門的輸出和上述電路Pn-1中的最后一個(gè)電路的結(jié)果輸出相連接,等待時(shí)間單元與第一個(gè)與門的輸出相連接,順序控制器單元與等待時(shí)間單元的一個(gè)輸出、上述電路Pn-1中的第一個(gè)電路的一個(gè)結(jié)果輸出和一個(gè)觸發(fā)器輸出、邏輯單元的一個(gè)結(jié)果輸出和上述電路Pn-1中的最后一個(gè)電路的一個(gè)觸發(fā)器輸出相連接,第二多路復(fù)用器與順序控制單元的一個(gè)觸發(fā)器輸出相連接,并分別與邏輯單元的一個(gè)第一和第二觸發(fā)器輸入相連接,進(jìn)一步分別通過第一和第二觸發(fā)器輸出與上述電路Pn-1中的第一個(gè)電路相連接。
      依照本發(fā)明的搜索處理器電路的一個(gè)優(yōu)選實(shí)施方案包括一個(gè)文件管理單元,通過一個(gè)數(shù)據(jù)輸出分別與多處理器Pn上的順序的和平行的數(shù)據(jù)輸入相連接,通過一個(gè)文件輸出與多處理器單元Pn上的順序文件輸入相連。
      依照本發(fā)明,搜索處理器電路最好還包括1/2k=2m-1選中管理單元,分別與電路Pn-1的結(jié)果輸出和文件輸出相連接,每個(gè)選中管理單元通過一個(gè)結(jié)果輸入分別連接到多處理器單元Pn的接口輸出上。
      另外的特征和優(yōu)點(diǎn)在附加的獨(dú)立權(quán)利要求中有明顯的說明。
      現(xiàn)在將結(jié)合依照本發(fā)明的處理器電路獨(dú)立單元的示例實(shí)施方案,及其實(shí)施方案的例子和基于這種類型的處理電路的具有一個(gè)多處理器單元的搜索處理器電路,并結(jié)合附圖對(duì)本發(fā)明進(jìn)行更詳細(xì)的解釋,附圖中

      圖1顯示依照本發(fā)明的搜索處理器電路的原理,圖2是一個(gè)本發(fā)明使用的比較器單元。
      圖3是本發(fā)明中如何比較一個(gè)字符模式的原理,
      圖4是本發(fā)明中如何比較一個(gè)第二字符模式的原理。
      圖5是本發(fā)明中如何比較一個(gè)兩字符模式的原理。
      圖6是本發(fā)明中如何比較不同長度的循環(huán)特征模式的原理,圖7是本發(fā)明中所用的比較字符模式的循環(huán)發(fā)生的一個(gè)順序控制單元,圖8是與圖2中的比較器單元相互連接的圖7中的順序控制單元。
      圖9是本發(fā)明中如何比較任意模式的字符串的原理。
      圖10是依照本發(fā)明的用于搜索處理器電路的一個(gè)二進(jìn)制數(shù)據(jù)分布樹的第一個(gè)實(shí)施方案,圖11是圖10中二進(jìn)制數(shù)據(jù)分布樹和采用圖8中所示連接的實(shí)現(xiàn)過程,圖12是依照本發(fā)明的用于搜索處理器電路的一個(gè)二進(jìn)制數(shù)據(jù)分布樹的第二個(gè)實(shí)施方案,圖13是依照本發(fā)明的用于搜索處理器電路的一個(gè)二進(jìn)制數(shù)據(jù)分布樹的第三個(gè)實(shí)施方案,圖14是本發(fā)明中所用的結(jié)果選擇器的原理,圖15本發(fā)明中采用的利用結(jié)果選擇器聚集處理電路的結(jié)果的原理。
      圖16是依照本發(fā)明的用于搜索處理器電路的一個(gè)二進(jìn)制數(shù)據(jù)分布樹的第四個(gè)實(shí)施方案,圖17是依照本發(fā)明的用于搜索處理器電路的一個(gè)二進(jìn)制數(shù)據(jù)分布樹的第五個(gè)實(shí)施方案,圖18是為了在本發(fā)明中的比較之后,如何針對(duì)一定數(shù)量的字符維持一個(gè)正的比較結(jié)果的原理,圖19是依照本發(fā)明如何進(jìn)行模式比較的基本操作原理,圖20是在本發(fā)明中如何利用每個(gè)文件的標(biāo)識(shí)管理不同文件的原理,圖21是在本發(fā)明中如何限制一個(gè)匹配中的選中數(shù)量的原理,圖22概要說明一個(gè)同時(shí)處理幾個(gè)查詢的數(shù)據(jù)分布樹,其中葉節(jié)點(diǎn)包括多個(gè)處理電路。
      圖23是依照本發(fā)明如何在查詢處理器電路的一個(gè)數(shù)據(jù)分布樹中實(shí)現(xiàn)選中數(shù)量簡化的原理,
      圖24是依照本發(fā)明的處理電路中的一個(gè)比較器單元的實(shí)施方案,圖25是依照本發(fā)明的處理電路中的一個(gè)D觸發(fā)器的實(shí)施方案,圖26是依照本發(fā)明的處理電路中的一個(gè)等待時(shí)間單元的實(shí)施方案,圖27是依照本發(fā)明的搜索處理器電路中的一個(gè)文件管理單元的實(shí)施方案,圖28是依照本發(fā)明的搜索處理器電路中的一個(gè)查詢表的實(shí)施方案,圖29是依照本發(fā)明順序控制單元如何與處理電路一同使用的操作原理,圖30是依照本發(fā)明的處理電路中的一個(gè)順序控制單元的實(shí)施方案,圖31是依照本發(fā)明如何利用搜索處理器電路的結(jié)果選擇器來比較字符串的原理,圖32是依照本發(fā)明的處理電路中的一個(gè)結(jié)果選擇器的實(shí)施方案,圖33是依照本發(fā)明的處理電路的一個(gè)實(shí)施方案。
      圖34是圖33中處理電路輸入和輸出的模塊圖,圖35是依照本發(fā)明的搜索處理器電路的一個(gè)實(shí)施方案,實(shí)現(xiàn)為一個(gè)具有八個(gè)處理電路的數(shù)據(jù)樹的形式的多處理器單元。
      圖36是依照本發(fā)明的一個(gè)用于搜索處理器電路中的選中管理單元,圖37是利用圖27中所示的文件管理單元和圖36中的選中管理單元來實(shí)現(xiàn)的圖36中的搜索處理器電路,和圖38是一個(gè)包括一個(gè)比較器單元和一個(gè)順序控制器單元的核心處理器。
      通過Verulog編碼來對(duì)獨(dú)立的單元和電路的做進(jìn)一步解釋,分別在附錄的各個(gè)表A1-A13中給出。-如同該技術(shù)領(lǐng)域的熟練人員將會(huì)了解到的,IEEE的標(biāo)準(zhǔn)1364-1995(“基于Verilog硬件描述語言的標(biāo)準(zhǔn)描述語言”)對(duì)Verilog進(jìn)行了詳細(xì)說明。
      現(xiàn)在將給出依照本發(fā)明的搜索處理器電路的詳細(xì)討論。如圖1在總體上給出搜索處理器電路的運(yùn)行情況。一個(gè)數(shù)據(jù)流通過電路移動(dòng),在每一步中,當(dāng)前電路中的數(shù)據(jù)與其它電路中的某些其它模式進(jìn)行比較。該模式被編碼為一個(gè)位串,被寫入到電路。搜索處理器電路的基本單元將被假定為一個(gè)字節(jié),通常該字節(jié)將代表一個(gè)字符。然而,這一點(diǎn)并不是非常重要的,可以很容易地更改。
      依照本發(fā)明,一個(gè)搜索處理器電路通過大量的比較器單元形式的核心處理器來構(gòu)建?;颈容^器單元示于圖2中。圖中寄存器X僅包含當(dāng)前被移動(dòng)到該比較器中的字節(jié)x,寄存器A包含一個(gè)將與字節(jié)x比較的字節(jié)a。從圖2中可以明顯看出,四個(gè)比較是同時(shí)進(jìn)行的,即x=a,x≥a,x≠a,x≤a,從比較器單元的輸出上得到結(jié)果。通過一個(gè)核心處理器,即圖2中所示的比較器單元的互聯(lián),將可能比較或匹配簡單的字符模式。例如,如圖3中連接的單元將匹配字符串“abc”,即一個(gè)“a”,直接跟著一個(gè)“b”,再直接跟著一個(gè)“c”。然而,也要注重比較一個(gè)包含一個(gè)“a”接著一個(gè)“b”,再立即跟著一個(gè)“c”的模式。在下面將寫成模式“ab+c”??梢愿膱D3中的比較器單元,使得能夠通過提供一個(gè)一位存儲(chǔ)器來操作,其中的位被賦值為與“b”匹配的元素,表明在對(duì)最后一次移動(dòng)前是否發(fā)現(xiàn)“b”。而且,需要使用某種類型的順序控制,這樣如果下一個(gè)和后續(xù)的比較器也具有一個(gè)匹配的話,比較器單元將僅表示一個(gè)匹配。這表明從最后一個(gè)比較器中獲取一個(gè)最終結(jié)果。在這種連接中,可以了解到,提供比較器單元,即核心處理器單元,這樣一個(gè)字符開始移入的單元被表示為“第一個(gè)”,這意味著該單元包含模式的最后一個(gè)字符,而“最后一個(gè)”單元包含模式的第一個(gè)字符。
      可以參考圖4a-e,通過下面的例子來說明一個(gè)循環(huán)模式的匹配是如何進(jìn)行的。
      圖4a-一個(gè)“a”被移動(dòng)到第一個(gè)比較器單元中。沒有比較器顯示出一個(gè)匹配。
      圖4b-一個(gè)“b”被移入,仍然沒有匹配。
      圖4c-另一個(gè)“b”被移入,最后兩個(gè)單元具有一個(gè)匹配,而第一個(gè)單元沒有匹配。由于最后兩個(gè)單元具有一個(gè)匹配,這就要求單元要記住這一匹配必須維持到中間單元有一個(gè)匹配為止,即使最后的單元沒有匹配。
      圖4d-幾個(gè)“b”被移入,維持圖4c所述的匹配。如果除了“b”以外的另一字符也被移入到中間的單元,匹配應(yīng)該都已被清除。
      圖4e-一個(gè)“c”被移入第一個(gè)單元,所有三個(gè)單元現(xiàn)在都被設(shè)定為顯示出一個(gè)匹配。目前發(fā)現(xiàn)了一個(gè)“ab+c”形式的模式。
      如果該方法被用于重復(fù)包含多于一個(gè)單字符的模式,則存儲(chǔ)器必須與一組進(jìn)行模式匹配的比較器單元相連接。這將在下面描述。
      為了使一種上面描述的方法能夠匹配長于一個(gè)單字節(jié)模式的重復(fù)出現(xiàn),例如長度為n,必須記錄下n個(gè)可能的起始點(diǎn)中的每一個(gè)是否發(fā)現(xiàn)一個(gè)匹配。這可以通過連接n個(gè)觸發(fā)器并在同新字節(jié)移入到單元時(shí)將存儲(chǔ)器位移入觸發(fā)器來實(shí)現(xiàn)。因而,最后的觸發(fā)器的輸出將表明是否在先前n個(gè)位置出現(xiàn)了一個(gè)匹配。圖5顯示了兩字符模式匹配的一個(gè)例子。圖中E[i]’是實(shí)際的比較結(jié)果,E[i-1]是下一個(gè)用于實(shí)現(xiàn)一個(gè)順序控制的比較器單元的結(jié)果,而E[i]是新的結(jié)果,其中如果設(shè)定信號(hào)mi,則允許重復(fù)的匹配比較。信號(hào)sc表明是否應(yīng)該完全使用順序控制。如果不設(shè)定sc,將不會(huì)進(jìn)行多個(gè)模式的匹配。如果可能改變要重復(fù)的模式的長度,可以采用一個(gè)類似圖6中所示的方案。這里,一個(gè)多路復(fù)用器用來選擇第i個(gè)觸發(fā)器之后的輸出,其中i是要匹配的模式的長度。然而,該方法的使用不是必須的,將在下面描述。
      圖7所示的是一個(gè)單元,來執(zhí)行實(shí)現(xiàn)模式的循環(huán)出現(xiàn)的匹配所需的順序控制。該單元應(yīng)該與一組比較單元和所需數(shù)量的D觸發(fā)器一同放置。多路復(fù)用器被用于決定是否允許模式的多個(gè)發(fā)生。輸入和輸出可以描述如下res[i]’ res[i]’信號(hào)是與可重復(fù)模式比較的結(jié)果。sc sc信號(hào)確定順序控制是否將如下部分所描述的那樣使用。
      如果置位sc,則當(dāng)下一個(gè)單元也有一個(gè)正的結(jié)果時(shí),該單元僅給出一個(gè)正的結(jié)果。如果不置位sc,則該單元的結(jié)果是獨(dú)立于其它的單元,將不允許循環(huán)的匹配比較。res[i-1]信號(hào)res[i-1]獲取下一個(gè)單元的結(jié)果,用來實(shí)現(xiàn)順序控制。ffout[i] 信號(hào)ffout[i]獲取最后一個(gè)觸發(fā)器的輸出,并由此傳遞存儲(chǔ)器位。ffin 信號(hào)ffin將作為第一個(gè)觸發(fā)器的輸入而給出,由此傳遞存儲(chǔ)器位。res[i] 信號(hào)res[i]給出單元的新的結(jié)果。如果不用順序控制且不置位sc,則該信號(hào)將等于res[i]’,否則,如果res[i-]為真,且res[i]’為真,或者,如果允許循環(huán)模式,如果ffout[i]被置位,則置位該信號(hào)。ffout[i+1]ffout[i+1]輸入給出前面元件的觸發(fā)器的輸出。這樣可以把用于不同長度的用于循環(huán)模式匹配的比較單元連接起來。
      圖8中,一同顯示了順序控制單元與圖2中的比較器單元,允許通過比較器單元匹配的字符的循環(huán)。這里用一個(gè)單獨(dú)的D觸發(fā)器來代表存儲(chǔ)器,這樣如果下面的條件為真,該D觸發(fā)器被置位●允許由這些單元匹配的模式的循環(huán)發(fā)生?!裨搯卧秃竺娴膯卧幸粋€(gè)同時(shí)的匹配?!癞?dāng)前面的條件為真后,所有移入該單元的字節(jié)都是匹配的。
      為此,必須用允許匹配模式的多次發(fā)生的單元輸出來表明該單元和前面的一個(gè)單元的結(jié)果。為了使該功能通用化,如前面所述,順序控制通常與多模式匹配一同使用。換句話說,如果前面的單元僅給出一個(gè)正的結(jié)果,則該單元也僅給出一個(gè)正的結(jié)果。
      除了如前面部分所描述的匹配和循環(huán)模式,還應(yīng)重視匹配那些其中模式對(duì)是可選擇的字符串。這種情況會(huì)發(fā)生在一個(gè)模擬方式中,可以通過下面的例子參照圖9a-c來描述。圖9a -一個(gè)“a”被移入第一個(gè)單元。沒有一個(gè)單元具有一個(gè)匹配。圖9b -一個(gè)“c”被移入在第一個(gè)單元上并有一個(gè)匹配。中間的單元將記錄下這一情況。圖9c -字符被右移,此時(shí)在最后的一個(gè)單元上有一個(gè)匹配。由于在一個(gè)字符之前在中間的單元上也有一個(gè)匹配,單元此時(shí)具有一個(gè)匹配的字符串“ac”。
      為此,順序控制必須按照重復(fù)模式匹配時(shí)的情況的相反方向作用。
      下面將描述用于分配到比較器單元的一個(gè)樹結(jié)構(gòu)。采用一個(gè)圖10所示的一個(gè)作為一個(gè)分布樹的完整的平衡二進(jìn)制樹。在樹3的每個(gè)內(nèi)部節(jié)點(diǎn)上,一個(gè)多路復(fù)用器確定兩個(gè)子樹是并行接收相同的數(shù)據(jù)元素,還是順序地接收這些數(shù)據(jù)元素。圖11顯示了圖10中的二進(jìn)制數(shù)據(jù)分布樹的一個(gè)簡單的實(shí)現(xiàn)過程。
      如上所述,現(xiàn)在可以另外觀察發(fā)生的循環(huán)和跳躍模式的匹配比較。圖8所示的處理電路被用來產(chǎn)生圖11的樹狀結(jié)構(gòu),循環(huán)的和跳躍的模式將在幾個(gè)層上進(jìn)行匹配比較。為了簡化說明,假設(shè)僅允許用于個(gè)別的字符或由八個(gè)處理電路組成的整個(gè)樹。
      對(duì)于該樹,現(xiàn)在基本上有六個(gè)不同的運(yùn)行狀態(tài)●不使用順序控制-八個(gè)處理電路的每一個(gè)的結(jié)果都是獨(dú)立的?!癫捎煤唵蔚捻樞蚩刂?僅有處理電路0的結(jié)果將被使用,僅當(dāng)八個(gè)比較器單元都有匹配時(shí),該結(jié)果才會(huì)為正。●對(duì)于一個(gè)或幾個(gè)比較器單元,允許循環(huán)匹配?!駥?duì)于一個(gè)或幾個(gè)比較器單元,允許跳躍匹配?!駥?duì)于整個(gè)樹,允許循環(huán)匹配?!駥?duì)于整個(gè)樹,允許跳躍匹配。
      上述各點(diǎn)中的第一點(diǎn)通過圖8所示的處理電路來處理,第四點(diǎn)通過一個(gè)用于跳躍模式的模擬元件來處理。然而最后兩點(diǎn)要求另一個(gè)順序控制單元用于整個(gè)樹,如圖7所示。從該圖中可以看出,對(duì)于這一單元,必須有正確數(shù)量的觸發(fā)器。將使用的觸發(fā)器的數(shù)量必須與將被重復(fù)的模式中的字符數(shù)相等,但該數(shù)目可以是1—8的不同的數(shù),取決于定義樹的多路復(fù)用器的配置。一個(gè)類似于圖6中的一個(gè)方案的解決方案是很顯然的,但這將使得電路的規(guī)劃更復(fù)雜、更容易出錯(cuò),因?yàn)閷⒆霰匾貜?fù)的字符的數(shù)量被設(shè)定兩次,一次是在樹的定義中,一次是在選擇正確的觸發(fā)器的結(jié)果的多路復(fù)用器中。幸好,可以通過使用樹中處理電路中已有的觸發(fā)器來獲得一個(gè)更好的解決。由于在任何給定的時(shí)間里樹中字符的數(shù)量通過數(shù)據(jù)流給出,用于數(shù)據(jù)分布的多路復(fù)用器也可以用來通過正確數(shù)量的觸發(fā)器發(fā)送存儲(chǔ)器位。該方法的一個(gè)實(shí)現(xiàn)過程示于圖12中,由于相同的觸發(fā)器用于兩個(gè)可能層面上的循環(huán),模式可以同時(shí)在一個(gè)層面上重復(fù)。應(yīng)該注意到,任何情況下使用該方法,同時(shí)在幾個(gè)層面上的循環(huán)模式都將是不可能的,因?yàn)榭芍貜?fù)字符串的長度將不同。另一個(gè)復(fù)雜之處是為了實(shí)現(xiàn)順序控制,每個(gè)處理電路需要前面的比較器單元的結(jié)果,這將在后面說明。
      現(xiàn)在可以擴(kuò)展樹狀結(jié)構(gòu)。如圖13所示,使用總共32個(gè)核心處理器或比較器單元,允許在一個(gè)單一的處理電路上、一個(gè)八個(gè)處理電路組上或整個(gè)樹上的循環(huán)。-相同的推理也適用于模式的跳躍。
      前面部分基本上描述的是收集一個(gè)數(shù)據(jù)聚合樹的結(jié)果的兩個(gè)實(shí)用方式。最普通的方法是使用另一個(gè)二進(jìn)制樹,其中在每個(gè)內(nèi)部節(jié)點(diǎn)上對(duì)結(jié)果進(jìn)行組合。但是,這種方法具有許多缺點(diǎn),因?yàn)檫@樣不可能進(jìn)行某些操作,如要求一定數(shù)量的處理電路要有匹配等。如果處理電路的數(shù)量相對(duì)很小,將可能使用一個(gè)查詢表LUT。然而,當(dāng)允許重復(fù)匹配時(shí),這將是有問題的,因?yàn)槠ヅ洳皇轻槍?duì)樹的一部分而定義的。這兩種方法將在下面的部分說明,然后討論其優(yōu)缺點(diǎn)。首先將描述如何利用一個(gè)二進(jìn)制樹來聚集結(jié)果。
      給定兩個(gè)處理電路的結(jié)果,一個(gè)簡單的組合該結(jié)果的方法是運(yùn)行一個(gè)與和或的邏輯操作。這種方法還有一個(gè)優(yōu)點(diǎn),能夠僅選擇結(jié)果中的一個(gè)并忽略其它結(jié)果。圖14中顯示了一個(gè)執(zhí)行該操作的單元,接下來,該單元將被表示位一個(gè)選擇器?,F(xiàn)在這樣的單元可以被組合在一個(gè)二進(jìn)制樹中,提供一組處理電路的一個(gè)單一的結(jié)果,如圖15所示。也可以使用一個(gè)二進(jìn)制樹,用來按字母或數(shù)字順序比較字符串,將在下面對(duì)其進(jìn)行描述?,F(xiàn)在可以處理上面所描述的問題,即獲取一個(gè)字符在被當(dāng)前的處理電路處理前后的比較結(jié)果。首先,在給定的時(shí)間,僅是之前和之后的結(jié)果是必須的,因?yàn)橹貜?fù)的和跳躍的模式匹配不能同時(shí)進(jìn)行。這就意味著,由于使用了順序控制,結(jié)果聚集樹可以這樣配置,使其對(duì)于任意查看不同字符的任意的處理電路既能選擇右邊也能選擇左邊的結(jié)果。對(duì)于任意n個(gè)單元的子樹,可以發(fā)現(xiàn)結(jié)果在結(jié)果組合樹中上升了n個(gè)層面。其次,如果幾個(gè)單元查看同一個(gè)字符,它們的前面和后面的結(jié)果也將是相同的??梢酝ㄟ^使用相同的用于控制數(shù)據(jù)流的多路復(fù)用器發(fā)現(xiàn)這些結(jié)果,這樣一個(gè)結(jié)果僅傳遞到查看同一字符的鄰近單元。
      圖16顯示的是如何利用這種方法完成該實(shí)施方案。重要的是注意現(xiàn)在同一組多路復(fù)用器被用于三個(gè)不同的目的,即分配數(shù)據(jù)、通過正確數(shù)量的觸發(fā)器發(fā)送存儲(chǔ)器位和用于提供之前和之后的字符比較結(jié)果。
      組合不同處理電路的一個(gè)結(jié)果的一種簡單方法是利用一個(gè)查詢表(邏輯單元表)。這樣,可能給不同的處理電路指定不同的要求,包括記錄匹配的數(shù)目,只要使用一個(gè)合理的小型樹,查詢表LUT的規(guī)模就不會(huì)太大。利用八個(gè)比較單元,可以設(shè)定28=256位,而且將便于管理。圖17給出具有LUT的數(shù)據(jù)分布樹的一個(gè)可能的實(shí)現(xiàn)。使用這種方法的主要缺點(diǎn)是模式的循環(huán)發(fā)生不能被匹配,除非發(fā)生在一個(gè)單獨(dú)的處理電路的層面上或針對(duì)整個(gè)樹而言。這是因?yàn)槔靡粋€(gè)LUT,將不能定義由2n個(gè)單元檢查的一個(gè)字符的任何組合結(jié)果,但為了能使序列控制工作,這是必須的。
      在某些情況下,需要在一個(gè)長時(shí)間內(nèi)維持選中的結(jié)果,即當(dāng)發(fā)現(xiàn)了一個(gè)匹配時(shí),在實(shí)際的匹配之后,將針對(duì)一定數(shù)量的字符維持正的結(jié)果。這一操作可以被用來進(jìn)行搜索,其中在彼此之間的一定距離內(nèi)將發(fā)現(xiàn)幾個(gè)模式的匹配。這一操作的一個(gè)簡單的實(shí)現(xiàn)過程示于圖18中。圖中,某一數(shù)字值n被存儲(chǔ)到一個(gè)寄存器中,當(dāng)發(fā)現(xiàn)一個(gè)匹配時(shí),該值被移入計(jì)數(shù)器。這樣,最后的結(jié)果被維持為一個(gè)正值,直到計(jì)數(shù)器達(dá)到0,并且任意的匹配將有n個(gè)字符的等待時(shí)間。這一等待時(shí)間被稱為選中等待時(shí)間。
      基于上述說明,很明顯,為了聚集結(jié)果使用了樹和LUT,既有優(yōu)點(diǎn)也有缺陷。樹的方法使循環(huán)模式的的匹配變得簡單,但僅允許特定的邏輯功能,而LUT方法允許所有可能的功能,但使得循環(huán)模式的匹配變得更加麻煩。
      因此,顯而易見的解決方案是兩個(gè)方法都使用,因?yàn)檫@樣可以提供用戶在各種情況下選擇最佳方法的可能性,但是這樣帶來了附加的開銷。另一種可能性是在樹的不同部分采用不同的方法。例如,樹的方法可以用于低層面,其中重復(fù)的模式是最需要的,而一個(gè)LUT用于高層面,其中不同模式的選中數(shù)量的計(jì)數(shù)是最需要的,或者在低層面選擇兩種方法之一,而在高層面僅使用LUT方法。
      文本數(shù)據(jù)通常被劃分為非重疊的文件,當(dāng)在這樣的文件上運(yùn)行搜索時(shí),一般檢索跨越幾個(gè)文件的匹配是不合乎要求的。這樣必須用一些這樣或那樣的方法來避免這種情況。忽略數(shù)據(jù)分布樹,圖19說明一個(gè)用于模式匹配的搜索處理器電路(“模式匹配芯片”(PWC))的基本操作。圖中,每個(gè)處理電路應(yīng)該是僅利用文本中的一個(gè)單一字符來工作。此時(shí),文件的分割可以利用圖20所示的配置來處理。圖中一個(gè)放置在數(shù)據(jù)路徑起始處的特定的模式匹配單元搜索一個(gè)指示一個(gè)新文件開始的標(biāo)識(shí)一個(gè)表示這一操作的信號(hào)連同數(shù)據(jù)一起傳送給每個(gè)處理電路。給定該信號(hào),處理電路可以復(fù)位所有可以設(shè)定的等待時(shí)間。該信號(hào)還被進(jìn)一步傳送到結(jié)果選擇器和聚集結(jié)果的查詢表LUT上,這樣僅當(dāng)它們出現(xiàn)在相同的文件中時(shí),才得到正的結(jié)果。
      給定了上面描述的模式匹配能力,還有兩個(gè)必須要解決的問題。●對(duì)于接收系統(tǒng)操作來講,選中數(shù)量將充分受到限制?!癖仨毧赡芡瑫r(shí)處理數(shù)據(jù)分布樹的不同部分的不同查詢。
      有兩個(gè)要點(diǎn),將在下面討論。
      首次討論限制選中數(shù)量的問題。因?yàn)橛脕韽哪J狡ヅ湫酒祷剡x中到主處理器的設(shè)施將可能有一個(gè)有限的容量,而且選中通常是成組出現(xiàn)的,必須用這樣或那樣的方法來限制選中的數(shù)量。對(duì)于這一問題,有兩個(gè)顯而易見的解決方案●對(duì)某一數(shù)量的鄰近字符,僅報(bào)告一個(gè)選中結(jié)果?!駥?duì)每個(gè)文件,僅報(bào)告一個(gè)選中結(jié)果。
      通常的選擇是兩種方法都使用。圖21顯示了如何完成這一要求。觸發(fā)器D記錄是否在當(dāng)前的選中范圍內(nèi)有選中報(bào)告,如果報(bào)告了所有的選中,則選擇多路復(fù)用器MUX的第一輸入。此外,用一個(gè)計(jì)數(shù)器來記錄選中的數(shù)目,這樣返回該數(shù)目而不是實(shí)際的選中結(jié)果。如果報(bào)告每個(gè)文件僅有一個(gè)選中,則該計(jì)數(shù)將是具有選中的文件數(shù)目。
      現(xiàn)在將討論多查詢的管理。如果模式比較芯片(搜索處理器電路)能夠同時(shí)處理幾個(gè)查詢,則會(huì)具有很大的優(yōu)勢。因?yàn)閷?duì)于各單一查詢所需的處理電路的數(shù)目在很大程度上是不同的,可以進(jìn)行單獨(dú)的配置。一個(gè)切實(shí)可行的方法是使數(shù)據(jù)分布樹的一部分建立一個(gè)單獨(dú)的查詢。這種方法的問題是需要返回給接收系統(tǒng)很大數(shù)目的結(jié)果,對(duì)于n個(gè)處理電路該數(shù)目為2n-1,即對(duì)于512個(gè)處理電路,可能結(jié)果的數(shù)目將為2×512-1=1023,一般這一數(shù)目被認(rèn)為是過大的。最簡單的限制該數(shù)目的方法是為將用于一個(gè)單一查詢的處理電路的數(shù)量設(shè)定一個(gè)較低的限制。這里一個(gè)合理的選擇是16,對(duì)于512個(gè)電路,將給出2.51216-1=63]]>個(gè)可能的結(jié)果,這是一個(gè)可以接受的數(shù)目。圖22概要顯示了這些可能的結(jié)果,樹的較低層面上的框中包含16個(gè)電路(或比較器單元)。當(dāng)這一方法與前面的部分描述的方法結(jié)合使用時(shí),對(duì)于每個(gè)可能的結(jié)果,可能包括一個(gè)選中限制單元。然而,因?yàn)椴豢赡芡瑫r(shí)有多于 個(gè)的查詢,這一電路的數(shù)目是足夠的。為此,需要用幾個(gè)選中限制單元取得可能查詢數(shù)目的結(jié)果,因?yàn)楸仨氝x擇這些查詢,這樣就沒有同時(shí)進(jìn)行的查詢。圖23顯示了這一過程是如何實(shí)現(xiàn)的,因?yàn)閳D中黑色的可能查詢點(diǎn)具有其自己的選中限制單元,而僅有白色的查詢點(diǎn)按箭頭所示來分配其結(jié)果。此外,為了表明所述的結(jié)果是否實(shí)際代表一個(gè)獨(dú)立的查詢,需要為每個(gè)可能的查詢設(shè)定一個(gè)位。
      現(xiàn)在將給出依照本發(fā)明的處理電路的詳細(xì)說明。處理電路可以被認(rèn)為是一個(gè)搜索處理器的模塊,因此被描述為搜索模塊。詳細(xì)的說明將參照獨(dú)立單元的Verilog編碼,這些涉及到的編碼在本說明的一個(gè)附錄的表中給出。
      處理電路或搜索處理器電路包括一個(gè)時(shí)鐘和該時(shí)鐘的Verilog編碼,示于附錄的表A1中,在任何情況下分別為處理電路的比較器單元和D觸發(fā)器,或搜索處理器單元的所有比較器單元和D觸發(fā)器給出時(shí)鐘信號(hào)CLK。這一點(diǎn)是很常見的,因此時(shí)鐘設(shè)備和時(shí)鐘信號(hào)線沒有在圖中示出。
      圖25顯示的是核心處理器或比較器單元。當(dāng)然,它與圖2中的核心處理器或比較器單元是一致的。寄存器6像前面一樣包含當(dāng)前被移入單元的字節(jié)x,寄存器7包含將與字節(jié)x比較的字節(jié)a。如圖25中所見,可以進(jìn)行四個(gè)比較,即x=a,x≥a,x≠a,x≤a。結(jié)果送給輸出res。此外,信號(hào)eq表示x=a,可以用于按字母順序和數(shù)字順序比較字符串,后面將對(duì)此進(jìn)行更詳細(xì)說明。實(shí)現(xiàn)核心處理器或比較器單元的Verilog編碼顯示在附錄的表A2中,表1通過其輸入和輸出清楚地說明了比較器單元的接口。表1


      圖25概要顯示了一個(gè)D觸發(fā)器。實(shí)現(xiàn)該D觸發(fā)器的Verilog編碼顯示于附錄的表A3中,表2通過其輸入和輸出清楚說明了該觸發(fā)器的接口。表2

      圖26顯示了等待時(shí)間單元LAT,用于將一個(gè)正的二進(jìn)制值res_延遲某些個(gè)的周期。寄存器9包含等待時(shí)間而計(jì)數(shù)器8用于當(dāng)記錄一個(gè)正的結(jié)果時(shí)進(jìn)行時(shí)間的倒計(jì)數(shù)。res給出修定的結(jié)果信號(hào),而信號(hào)_reset將計(jì)數(shù)器復(fù)位為0。實(shí)現(xiàn)等待時(shí)間單元LAT的Verilog編碼顯示在附錄的表A4中,表3通過其輸入和輸出清楚說明了該單元的接口。表3

      圖27顯示的是文件管理單元DOC。它是用于使搜索處理器單元記錄不同的文件。三個(gè)比較器單元或它的一個(gè)附加器被設(shè)定與一個(gè)表示一個(gè)新文件的標(biāo)識(shí)相匹配,當(dāng)出現(xiàn)這一標(biāo)識(shí)時(shí),信號(hào)doc被設(shè)定為等于0。該圖可以稍做修改,因?yàn)樵谝粋€(gè)標(biāo)識(shí)中使用少于三個(gè)的字符時(shí),比價(jià)器單元或距左邊最遠(yuǎn)的單元將不會(huì)對(duì)結(jié)果產(chǎn)生影響。等待時(shí)間將被設(shè)定為等于標(biāo)識(shí)的字符數(shù)目,即1—3。實(shí)現(xiàn)這一單元的Verilog編碼顯示在附錄的表A5中,表4通過其輸入和輸出清楚說明了該單元的接口。表4

      圖36顯示了具有8個(gè)輸入的查詢表單元LUT。由res給出結(jié)果。實(shí)現(xiàn)這一單元的Verilog編碼顯示在附錄的表A6中,而表5通過其輸入和輸出清楚說明了該單元的接口。表5

      順序控制單元SC用于實(shí)現(xiàn)下面的三種可能性●要求前面和后面的處理電路或比較器單元在允許當(dāng)前單元報(bào)告一個(gè)匹配前報(bào)告一個(gè)匹配結(jié)果?!裨试S在模式的某些部分缺少的情況下進(jìn)行模式匹配比較?!裨试S在模式的某些部分重復(fù)的情況下進(jìn)行模式匹配比較。
      順序控制單元SC與一個(gè)處理電路一同放置,該處理電路可以是一個(gè)單一的核心處理器或比較器,或一組處理電路及一組觸發(fā)器。觸發(fā)器的數(shù)目將與通過處理電路匹配的字符數(shù)相等。如圖29所示。因此一個(gè)順序控制單元SC可以如圖30所示來實(shí)現(xiàn)。圖中三個(gè)結(jié)果值和當(dāng)前與前面的觸發(fā)器的值被用作輸入,并輸出新的結(jié)果值。這樣,確定純粹組合形式的順序控制單元SC的性能是很簡單的。
      五種情況的真值表,即無順序控制、向前順序控制、向后順序控制、重復(fù)模式匹配和跳躍模式匹配,分別示于表6-10中。表6-無順序控制

      表7-向前順序控制

      表8-向后順序控制

      表9-重復(fù)模式匹配

      表10-重復(fù)模式匹配

      即使沒有在表中顯示,前三種情況中輸出ff_out也將被設(shè)定為等于前面的允許觸發(fā)器的值通過系統(tǒng)的局部流動(dòng)的處理電路的輸出。基于附加的真值表,很容易獲得圖11中所示的符號(hào)形式。產(chǎn)生的序列控制單元示于圖30中,圖中,多路復(fù)用器在如表11所示的從右至左和從頂部至底部編號(hào)的5個(gè)狀態(tài)中選擇。表11符號(hào)表達(dá)式

      附錄的表A7顯示的是實(shí)現(xiàn)順序控制單元的Verilog編碼,而表12通過其輸入和輸出清楚說明了該單元的接口。


      結(jié)果選擇器RS用于組合前面處理電路的兩個(gè)結(jié)果或其它的結(jié)果比較器。支持下面的操作●僅使用第一個(gè)結(jié)果?!駜H使用第二個(gè)結(jié)果?!駥?duì)兩個(gè)結(jié)果進(jìn)行布爾運(yùn)算“與”。●對(duì)兩個(gè)結(jié)果進(jìn)行布爾運(yùn)算“或”?!駥?duì)一組處理電路進(jìn)行≤運(yùn)算?!駥?duì)一組處理電路進(jìn)行≥運(yùn)算。
      前四個(gè)操作可以直接處理,其它的操作比較復(fù)雜。圖31顯示的是一個(gè)可以按照字母/數(shù)字順序匹配所有大于1990的字符串的例子。通過選擇器RS2開始操作;如果通過最右邊的處理單元匹配的,并且是正在被匹配比較的的數(shù)字的最左邊的數(shù)字的字符是大于1的,則結(jié)果意味著整個(gè)數(shù)字是較大的。本例中,它們是相等的,并由其它的處理電路來決定。這樣選擇器RS2返回相等的結(jié)果。選擇器RS1也遵循相同的規(guī)則。此處第二個(gè)選擇器RS2返回相等結(jié)果,而第一個(gè)選擇器RS1的返回表明該值較大,這就是RS1的結(jié)果。選擇器RS3同樣工作,返回表明發(fā)現(xiàn)了一個(gè)大于1990的數(shù)字。對(duì)于按照字母/數(shù)字順序比較的情況,給出res=eq2res1±eq2res2。
      基于上述的特征,實(shí)現(xiàn)的結(jié)果比較器將如圖32所示。多路復(fù)用器MUX4在五個(gè)操作狀態(tài)之間選擇;選擇第一個(gè)結(jié)果,選擇第二個(gè)結(jié)果和對(duì)結(jié)果進(jìn)行與操作,對(duì)結(jié)果進(jìn)行或操作和進(jìn)行字符串比較。
      實(shí)現(xiàn)該單元的Verilog編碼示于附錄的表A8中,而表13通過其輸入和輸出清楚說明了該單元的接口。此處,文件信號(hào)與文件管理一同使用,以避免接收與文件邊界交叉的結(jié)果。表13

      依照本發(fā)明的處理電路如圖33所示。它包括至少一個(gè)比較器單元COM、一個(gè)等待時(shí)間單元LAT、D觸發(fā)器2、4、一個(gè)順序控制單元SC和一個(gè)結(jié)果比較器RS。圖33所示的是一個(gè)具有輸入和輸出的處理電路的方案。實(shí)現(xiàn)該處理電路的Verilog編碼示于附錄的表A9中,而表14通過其輸入和輸出清楚說明了該單元的接口。表14



      圖33顯示了一個(gè)依照本發(fā)明的一個(gè)多處理器單元Pn形式的數(shù)據(jù)樹,即一個(gè)搜索處理器電路PMC。多處理器單元配置為一個(gè)樹,其中包括八個(gè)處理電路Pn-1、一個(gè)順序控制單元SC、一個(gè)等待時(shí)間單元LAT和一個(gè)邏輯單元表LUT。電路Pn或可以命名為“樹8”的數(shù)據(jù)樹與處理電路具有精確相同的接口,這意味著樹中的每個(gè)處理電路可以用一個(gè)這種類型的樹來替換,這樣該樹可以包含任意數(shù)目的層面。這也意味著數(shù)據(jù)樹將包括許多嵌套的電路Pn-q,這樣如果數(shù)據(jù)樹本身形成最高的層面,即層面Sn,并且q∈{1,2….,n},則下面層面的每個(gè)電路Sn-q在上面的層面Sn-q-1上是嵌套的。如果該樹是一個(gè)規(guī)范的樹,例如一個(gè)二進(jìn)制樹,一個(gè)層面上的處理電路Pn-q將遞歸地映射上面層面Sn-q+1上的處理電路Pn-q+1,在二進(jìn)制樹的情況下具有一個(gè)映射因數(shù)2。由于一個(gè)如介紹所述的常見的搜索問題可以被認(rèn)為是一個(gè)可分區(qū)的二進(jìn)制問題,當(dāng)然通過一個(gè)被稱為超二進(jìn)制的環(huán)境,即等級(jí)數(shù)為4、8、16等,而不是2的一個(gè)樹來管理這一分區(qū)問題是不成問題的。通常一個(gè)樹具有k=2m的等級(jí)數(shù),其中對(duì)于超二進(jìn)制樹m是一個(gè)大于1的整數(shù),換句話說就是k>2。當(dāng)然,在一個(gè)遞歸映射中,映射系數(shù)為r=k。例如圖35中的樹可以看作是一個(gè)具有兩個(gè)層面S1、S2的處理器,因?yàn)榈谝粋€(gè)層面包括八個(gè)處理電路P1,其中每個(gè)電路P1又對(duì)應(yīng)于圖33中的處理電路Pn-1,從而每一個(gè)僅包含一個(gè)核心處理器或一個(gè)比較器元件COM。因而核心處理器為該樹的葉節(jié)點(diǎn),并形成樹的第零層S0,通過樹的第零層上的電路P0來實(shí)現(xiàn),而處理電路P1包括一個(gè)核心處理單元P0和一個(gè)邏輯單元E,由圖33中的處理電路的其余的組件來體現(xiàn)。在層面S2上電路與通搜索處理器本身是相同的,因而,除了在層面S1上的八個(gè)處理電路P1外,還包括一個(gè)邏輯單元E,它包括所述的順序控制單元SC、一個(gè)等待時(shí)間單元LAT和一個(gè)邏輯單元表LUT。這樣圖33中所描述的多處理器單元Pn成為一個(gè)對(duì)稱的和平衡的簡化的樹,因?yàn)槊總€(gè)處理電路P1僅包含一個(gè)單一的比較器單元。然而,將搜索處理器電路或樹8實(shí)現(xiàn)為一個(gè)等級(jí)數(shù)為8的規(guī)范的不簡化的樹,然后八個(gè)處理電路P1在第一層面上各自包括8個(gè)核心處理器或比較單元P0是不成問題的,這樣將共有64個(gè)。如果該樹擴(kuò)展一個(gè)層面并保持其規(guī)范性,則第零層面S0會(huì)出現(xiàn)512個(gè)核心處理器或比較器單元,第一個(gè)層面S1具有64個(gè)處理電路P1,第二個(gè)層面S2具有8個(gè)處理電路P2,搜索處理器單元電路將由層面S3上的電路P3組成。實(shí)現(xiàn)圖35所示的樹8的Verilog編碼示于附錄的表A10中,表15通過其輸入和輸出清楚說明了搜索處理電路的接口。表15




      例如如果分別利用64或512個(gè)核心處理器來實(shí)現(xiàn)搜索處理器,則搜索處理器單元可以很好地實(shí)現(xiàn)為一個(gè)具有映射因數(shù)為8的規(guī)范樹形式的嵌套電路,但也能分別直接實(shí)現(xiàn)為一個(gè)樹64或樹512。任意情況下的一個(gè)具有64個(gè)核心處理器的搜索處理器的Verilog編碼示于附錄的表11中,而一個(gè)具有512個(gè)核心處理器的搜索處理器的Verilog編碼示于附錄的表12中。
      選中管理單元HIT示于圖36中。圖中,觸發(fā)器用來記錄是否報(bào)告下一個(gè)單元。實(shí)現(xiàn)該選中管理單元的Verilog編碼示于附錄的表13中,表16通過其輸入和輸出清楚說明了搜索處理電路的接口。表16

      從圖35中可以清楚看出如何在一個(gè)多處理器單元Pn形式的搜索處理電路PMC中分別提供文件管理單元DOC和選中管理單元HIT。為清楚起見,在圖37中只顯示了DOC和HIT以及所處理器單元間的連接,而省去其余的信號(hào)線。還可以看出,除了多處理器單元Pn,搜索器電路PMC也包括一個(gè)文件管理單元DOC,該文件單元管理器通過一個(gè)數(shù)據(jù)輸出分別與多處理器Pn上的順序的和并行的數(shù)據(jù)輸入相連接,以及通過一個(gè)文件輸出與多處理器單元Pn的文件輸入相連接。而且,搜索處理器電路PMC還包括分別1/2k=2m-1=23-1=4個(gè)與處理電路Pn-1上的結(jié)果輸出和文件輸出相連的選中管理單元HIT1-4,每個(gè)選中管理單元通過一個(gè)結(jié)果輸出分別與搜索處理器電路的接口中的結(jié)果輸出相連接。圖21還概要顯示了一個(gè)選中管理單元并討論了其有關(guān)的連接。而且,一個(gè)搜索處理器電路中的選中管理單元HIT的設(shè)備實(shí)現(xiàn)為圖23中所示的一個(gè)具有樹狀結(jié)構(gòu)的多處理器電路,結(jié)合該圖已經(jīng)說明了選中管理器單元如何被用于報(bào)告多個(gè)問題的結(jié)果。因此這里將不作詳述。但是,應(yīng)注意在圖23中僅在黑色的節(jié)點(diǎn)中提供選中管理單元,而白色節(jié)點(diǎn)按箭頭所示來分配其結(jié)果。
      這樣,在圖37中所示的兩個(gè)選中管理單元的輸入上分別提供一個(gè)多路復(fù)用器。
      在一個(gè)電路芯片上的一個(gè)實(shí)用的實(shí)施方案中,依照本發(fā)明,搜索處理器電路PMC最好被實(shí)現(xiàn)為一個(gè)例如k=23、26或29的超二進(jìn)制樹,因此表現(xiàn)為一個(gè)在第零層面上具有平衡簡化的超二進(jìn)制樹。這還意味著多處理器單元Pn變成等同于P2,并分別形成一個(gè)具有8個(gè)處理器單元P1的樹8或一個(gè)具有64個(gè)處理單元P1的樹64或一個(gè)具有512個(gè)處理單元P1的樹512,而每個(gè)P1又包含一個(gè)單一的比較器單元COM。這樣,在第零層面上是簡化的樹。因而除了觸發(fā)器、多路復(fù)用器MUX1、等待時(shí)間單元LAT和結(jié)果選擇器RS,每個(gè)處理電路P1中的邏輯單元E也可以僅通過一個(gè)單一的順序控制單元SC來實(shí)現(xiàn)。
      最后,應(yīng)該注意依照本發(fā)明,搜索處理器電路PMC中的多處理器單元Pn形成一個(gè)基于任意等級(jí)數(shù)任意層數(shù)的樹狀網(wǎng)絡(luò)的多處理器結(jié)構(gòu)體系的特殊情況,在上面提到的與本專利申請相關(guān)的并且優(yōu)先權(quán)為19984746的1998年10月9日的國際專利申請PCT/No99/0308(Halaas等人)中公開了這些內(nèi)容。這種多處理器結(jié)構(gòu)體系的一個(gè)特殊性能是如果該樹是一個(gè)簡化的樹,則在樹狀機(jī)構(gòu)的第零層面上僅提供單一的數(shù)據(jù)處理器,或者相當(dāng)于在第一層面上提供處理電路。如果在第零層面S0上該簡化是對(duì)稱的和平衡的,電路是在上面的層面S2,…Sn上通過層面S1上的處理電路P1另外遞歸產(chǎn)生的。這樣的電路可以特別經(jīng)濟(jì)地實(shí)現(xiàn),用來解決任意分區(qū)等級(jí)數(shù)的數(shù)據(jù)處理問題,當(dāng)然,傳統(tǒng)的搜索問題通常是一個(gè)二進(jìn)制的可分區(qū)的數(shù)據(jù)處理問題。
      因此,根據(jù)Halaas等人的專利,一個(gè)核心處理器P0在形式上將對(duì)應(yīng)于圖8中的連接,除了適當(dāng)?shù)奶幚砥鳎€包括比較器單元COM、一個(gè)時(shí)間等待單元LAT、一個(gè)順序控制單元SC、所需數(shù)量的觸發(fā)器2、4和邏輯門1、3,如圖38所示。當(dāng)然,對(duì)于每個(gè)比較器單元COM,必須提供一個(gè)順序控制單元SC,參看圖29。因此,在實(shí)際中,圖33中的處理電路P1包括兩個(gè)或可能更多個(gè)通過相應(yīng)數(shù)量的順序控制單元SC提供的具有一個(gè)邏輯單元E的比較器單元。表17通過電路的輸入和輸出說明具有一個(gè)形式上為適當(dāng)?shù)暮诵奶幚砥?7的比較器單元COM和一個(gè)順序控制單元SC的電路P0的接口。表17

      依照本發(fā)明,在實(shí)際中,搜索處理器電路PMC被實(shí)現(xiàn)為一個(gè)集成電路芯片,最好實(shí)現(xiàn)成一個(gè)超二進(jìn)制樹,其中層面S1處理電路P1僅有一個(gè)單一的比較器COM。因而所有的處理(搜索或匹配操作)都是在該層面上進(jìn)行的。一個(gè)實(shí)現(xiàn)方案,其中搜索處理器電路Pn=P2,即形式上具有3個(gè)層面,形成一個(gè)具有512個(gè)處理電路P1的超二進(jìn)制樹,進(jìn)一步提供了一個(gè)非常好電路芯片的利用率。附件表A1-時(shí)鐘module Clock(CLK);output CLK;regc;initial c=0;always #1 c=~c;assign CLK=c;endmodule //Clock表A2-比較器單元module CompEl(d,d_o,res,eq,A,C,CLK);input[70]d;output[70]d_o;output res;output eq;input[70]A;input[10]C;input CLK;reg[70]X;wire la;wire lse;wire lae;wire neq;always @(posedge CLK)X=d;assign la=(X>A);assign eq=(X===A);assign lse=~la;assign lae=la|eq;assign neq=~eq;assign res=(C===0)?lse ((C===1)?lae((C===2)?neqeq));assign d_o=X;endmodule//CompEl表A3-D觸發(fā)器module Dff(in,out,_reset,CLK);input in;output out;input _reset;input CLK;regff;assign out=ff;always @(posedge CLK)ff=(_reset==0)?0in;initial beginff=0;endendmodule//Dff表A4-時(shí)間間隔單元module Latency(res_,res,_reset,L,CLK);parameter width=2;input res_;output res;input _reset;input[width-10]L;inputCLK;reg[width-10]c;initial c=0;always @(posedge CLK)c=(_reset)?((res_)?((-(&amp;L))?L+1L) (((c>0)&amp;&amp;(~(&amp;L)))?c-1c))0;always @(posedge res_)c=(~(&amp;L))?L+1L;always @(negedge res_)c=((c>0)&amp;&amp;(~(&amp;L)))?c-1c;assign res=(c>0);endmodule //Latency表A5-文件管理單元module DocMan(d,d_o,doc,A1,C1,A2,C2,A3,C3,L,D,CLK);input[70]d;output[70]d_o;output doc;input[70]A1;input[10]C1;input[70]A2;input[10]C2;input[70]A3;input[10]C3;input[10]L;inputD;inputCLK;wire[70] md1;wire[70] md2;wire m1;wire m2;wire m3;wire m4;wire res1;wire res2;wire res3;wire dummy1;wire dummy2;wire dummy3;CompE1 c1(d,md1,res1,dummy1,A1,C1,CLK);CompE1 c2(md1,md2,res2,dummy2,A2,C2,CLK);CompE1 c3(md2,d_o,res3,dummy3,A3,C3,CLK);assign m1=(L<2)?res2(res1&amp;res2);assign m2=(L<1)?res3(m1&amp;res3);Latency#(2)lat(m2,m3,1′b1,L,CLK);assign doc=(D==1)?!m31;endmodule//DocMan表A6-查找表單元module LUT8(in,res,S);input[70]in;output res;input
      S;assign res=S[in];endmodule //LUT8表A7-順序控制單元module SC(res_,res_im1,res_ip1,ff_in,ff_out,ff_im1,res,S,D,M);input res_;input res_im1;input res_ip1;input ff_in;output ff_out;input ff_im1;output res;input S;input D;input M;wire m1;wire m2;wire m3;wire m4;wire m5;assign m1=res_iml&amp;res_;assign m2=res_&amp;res_ip1;assign m3=m1|ff_in;assign m4=ff_in|res_ip1;assign m5=res_&amp;m4;assign res=(S==0)?res_((D==0)?((M==0)?m2m5)((M==0)?m1m3));assign ff_out=((S==1)&amp;&amp;(M==1))?((D==0)?m5res_im1)ff_im1;endmodule//SC表A8-結(jié)果比較器module ResSel(doc1,res1,eq1,doc2,res2,eq2,doc,res,eq,M);input doc1;input res1;input eq1;input doc2;input res2;input eq2;output doc;output res;output eq;input [20]M;wire m1;wire m2;wire m3;wire m4;wire m5;wire m6;wire m7;wire m8;wire m9;wire m10;wire m11;assign m1=!eq2;assign m2=eq1|eq2;assign m3=res1&amp;res2;assign m4=res1|res2;assign m5=res1&amp;eq2;assign m6=m1&amp;res2;assign m7=m5|m6;assign m8=eq1&amp;eq2;assign m9=(M==3′d0)?res1((M==3′d1)?res2((M==3′d2)?m3((M==3′d3)?m4m7)));assign m10=(M==3′d0)?eq1((M==3′d1)?eq2((M==3′d2)?m8((M==3′d3)?m2m8)));wire mdoc1;wire mdoc2;assign mdoc1=(M==3′d1)?1doc1;assign mdoc2=(M==3′d0)?1doc2;assign m11=mdoc1&amp;mdoc2;assign doc=m11;assign res=m11&amp;m9;assign eq=m11&amp;m10;endmoduie//ResSel表A9-處理電路module PE(d_s,doc_s,ff_s,d_p,doc_p,ff_p,d_i,doc_i,ff_i,d_o,doc_o,ff_o,res_im1_s,ras_im1_p,res_im1_i,res_ip1,res_ip1_s,res_ip1_p,res_ip1_i,doc,res,eq,doc1,resl,eq1,doc2,res2,eq2,doc_sel,res_sel,eq_sel,M,A,C,L,S,D,MM,RM,CLK);input[70]d_s;input doc_s;input ff_s;input[70]d_p;input doc_p;input ff_p;output[70]d_i;output doc_i;output ff_i;output[70]d_o;output doc_o;output ff_o;input res_im1_s;input res_im1_p;output res_im1_i;input res_ip1;input res_ip1_s;input res_ip1_p;output res_ip1_i;output doc;output res;output eq;input doc1;input res1;input eq1;input doc2;input res2;input eq2;output doc_se1;output res_sel;output eq_sel;input M;input[70]A;input[10] C;input[10] L;inputS;inputD;inputMM;input[20] RM;inputCLK;wire[70]md;wire mdoc;wire mff;wire mres_im1;wire mres_ip1;assign md=(M==0)?d_sd_p;
      assign mdoc=(M==0)?doc_sdoc_p;assign mff=(M==0)?ff_sff_p;assign mres_im1=(M==0)?res_im1_sres_im1_p;assign mres_ip1=(M==0)?res_ip1_sres_ip1_p;assign d_i=md;assign doc_i=mdoc;assign ff_i=mff;assign res_im1_i=mres_im1;assign res_ip1_i=mres_ip1;wiremres;wiremeq;wiremdoc2;wiremres2;CompEl c(md,d_o,mres,meq,A,C,CLK);Dff ffl(mdoc,mdoc2,1′b1,CLK);assign mres2=mres&amp;mdoc2;wiremres3;wireffm1;wireffm2;reg[50]mmm;initial mmm=0;Latency #(2) lat(mres2,mres3,mdoc2,L,CLK);Dff ff2(ffm1,ffm2,mdoc2,CLK);SC sc(mres3,mres_im1,res_ip1,ffm2,ffm1,mff,res,S,D,MM);ResSel sel(doc1,res1,eq1,doc2,res2,eq2,doc_sel,res_sel,eq_sel,RM);assign doc_o=mdoc2;assign ff_o=ffm2;assign doc=mdoc2;assign eq=mdoc2&amp;meq;endmodule//PE表A10-搜索處理器電路(樹8)module Tree8(d_s,doc_s,ff_s,d_p,doc_p,ff_p,d_i,doc_i,ff_i,d_o,doc_o,ff_o,res_im1_s,rms_im1_p,res_im1_i,res_ip1,res_ip1_s,res_ip1_p,res_ip1_i,doc,res,eq,doc1,res1,eq1,doc2,res2,eq2,doc_sel,res_sel,eq_sel,M,A,C,L,S,D,MM,RM,LM1,LM2,LS,LD,LM,LL,LLS,CLK);parameter lat_width=8;input[70]d_s;inputdoc_s;inputff_s;input[70]d_p;inputdoc_p;inputff_p;output[70] d_i;output doc_i;output ff_i;output[70] d_o;output doc_o;output ff_o;inputres_im1_s;inputres_im1_p;output res_im1_i;inputres_ip1;inputres_ip1_s;inputres_ip1_p;output res_ip1_i;output doc;output res;output eq;inputdoc1;inputres1;inputeq1;inputdoc2;inputres2;inputeq2;output doc_sel;output res_sel;output eq_sel;input[70]M;input[630] A;input[150] C;input[150] L;input[70]5;input[70]D;input[70]MM;input[230] RM;inputLM1;inputLM2;inputLS;inputLD;inputLM;input[lat_width-10]LL;indut
      LLS;inputCLK;wire[630] md_s;wire[70]mdoc_s;wire[70]mff_s;wire[630] md_p;wire[70]mdoc_p;wire[70]mff_p;wire[630] md_i;wire[70]mdoc_i;wire[70]mff_i;wire[630] md_o;wire[70]mdoc_o;wire[70]mff_o;wire[70]mres_im1_s;wire[70]mres_im1_p;wire[70]mres_im1_i;wire[70]mres_ip1;wire[70]mres_ip1_s;wire[70]mres_ip1_p;wire[70]mres_ip1_i;wire[70]mdoc;wire[70]mres;wire[70]meq;wire[70]mdoc1;wire[70]mres1;wire[70]meq1;wire[70]mdoc2;wire[70]mres2;wire[70]meq2;wire[70]mdoc_sel;wire[70]mres_sel;wire[70]meq_sel;wiremux1_1;wiremux1_2;wiremux2;wiremux2_in2;wirelat_res;wiremff_out;wirelut_out;wireand_out;assign md_s={d_s,md_o[6356],md_o[5548],md_o[4740],md_o[3932],md_o[3124],md_o[2316],md_o[158]};assign mdoc_s={doc_s,mdoc_o[7],mdoc_o[6],mdoc_o[5],mdoc_o[4],mdoc_o[3],mdoc_o[2],mdoc_o[1]];assign mff_s={mux1_2,mff_o[7],mff_o[6],mff_o[5],mff_o[4],mff_o[3],mff_o[2],mff_o[1]};assign md_p={d_p,md_i[6356],md_i[6356],md_i[4740],md_i[6356],md_i[3124],md_i[3124],md_i[158]};assign mdoc_p={doc_p,mdoc_i[7],mdoc_i[7],mdoc_i[5],mdoc_i[7],
      mdoc_i[3],mdoc_i[3],mdoc_i[1]};assign mff_p=(mux1_1,mff_i[7],mff_i[7] mff_i[5],mff_i[7],mff_i[3],mff_i[3],mff_i[1]};assign mres_im1_s=(res_im1_s,mres[7],mres_sel[6],mres(5],mres_sel[5],mres[3],mres_sel[2],mres[1]};assign mres_im1_p=[res_iml_p,mres_im1_i[7],mres_im1_i[7],mres_im1_i[5],mres_im1_i[7],mres_im1_i[3],mres_im1_i[3],mres_im1_i[1]};assign mres_ip1={mres_ip1_i[6],mres_ip1_i[5],mres_ip1_i[4],mres_ip1_i[3],mres_ip1_i[2],mres_ip1_i[1],mres_ip1_i
      ,res_ip1};assign mres_ip1_s={res_ip1_s,mres[6],mres_sel[4],mres[4],mres_sel[1],mres[2],mres_sel
      ,mres
      );assign mres_ip1_p={res_ip1_p,mres_ip1_i[5],mres_ip1_i[3],mres_ip1_i[3],res_ip1,mres_ip1_i[1],res_ip1,res_ip1};assign mdoc1={doc1,mdoc[7],mdoc_sel[6],mdoc[5],mdoc_sel[5],mdoc[3],mdoc_sel[2],mdoc[1]};assign mrms1={resl,mres[7],mres_sel[6],mres[5],mres_sel[5],mres[3],mres_sel[2],mres[1]};assign meq1={eql,meq[7],meq_sel[6],meq[5],meq_sel[5],meq[3],meq_sel[2],meq[1]};assign mdoc2={doc2,mdoc[6],mdoc_sel[4],mdoc[4],mdoc_sel[1],mdoc[2],mdoc_sel
      ,mdoc
      };assign mres2={res2,mres[6],mres_sel[4],mres[4],mres_sel[1],mres[2],mres_sel
      ,mres
      };assign meq2={eq2,meq[6],meq_sel[4],meq[4],meq_sel[1],meq[2],meq_sel
      ,meq
      };assign mux1_1=(LM1==0)?mff_outff_p;assign mux1_2=(LM1==0)?mff_outff_s;assign mux2=(LM2==0)?mres_sel[3]mux2_in2;assign mux2_in2=lut_out&amp;and_out;assign and_out=&amp;mdoc;SC sc(lat_res,mres_im1_i[7],res_ip1,mff_o
      ,mff_out,mff_i[7],res,LS,LD,LM);Latency #(lat_width) lat(mux2,lat_res,and_out,LL,CLK);LUT8 lut(mres,lut_out,LLS);assign d_i=md_i[6356];assign doc_i=mdoc_i[7];assign ff_i=mff_i[7];assign d_o=md_o[70];assign doc_o=mdoc_o
      ;assign ff_o=mff_o
      ;assign doc=mdoc_sel[3];assign eq=meq_sel[3];assign doc_sel=mdoc_sel[7];assign res_sel=mres_sel[7];assign eq_sel=meq_sel[7];assign res_im1_i=mres_im1_i
      ;assign res_ip1_i=mres_ip1_i[7];PE pe
      (md_s,mdoc_s,mff_s,md_p,mdoc_p,mff_p,md_i,mdoc_i,mff_i,md_o,mdoc_o,mff_o,mres_im1_s,mres_im1_p,mres_im1_i,mres_ip1,mres_ip1_s,mres_ip1_p,mres_ip1_i,mdoc,mres,meq,mdoc1,mres1,meq1,mdoc2,mres2,meq2,mdoc_sel,mres_sel,meq_sel,M,A,C,L,S,D,MM,RM,CLK);endmodule//Tree8表A11-搜索處理器電路(樹64)module Tree64(d_s,doc_s,ff_s,d_p,doc_p,ff_p,d_i,doc_i,ff_i,d_o,doc_o,ff_o,res_im1_s,res_im1_p,res_im1_i,res_ip1,res_ip1_s,res_ip1_p,res_ip1_i,doc,res,eq,doc1,res1,eq1,doc2,res2,eq2,doc_sel,res_sel,eq_sel,hits,M,A,C,L,S,D,MM,RM,LM1,LM2,LS,LD,LM,LL,LLS,LLM1,LLM2,LLS2,LLD,LLM,LLL,LLLS,CLK);parameter lat_width=16;input[70]d_s;inputdoc_s;inputff_s;input[70]d_p;inputdoc_p;inputff_p;output[70] d_i;output doc_i;output ff_i;output[70] d_o;output doc_o;output ff_o;inputres_im1_s;inputres_im1_p;output res_im1_i;inputres_ip1;inputres_ip1_s;inputres_ip1_p;output res_ip1_i;output doc;output res;output eq;inputdoc1;inputres1;inputeq1;inputdoc2;inputres2;inputeq2;output doc_sel;output res_sel;output eq_sel;output[60] hits;input[630] M;input[5110]A;input[1270]C;input[1270]L;input[630] S;input[630] D;input[630] MM;input[1910]RM;input[70] LM1;input[70] LM2;input[70] LS;input[70] LD;input[70] LM;input[630] LL;input
      LLS;input LLM1;input LLM2;input LLS2;input LLD;input LLM;input[lar_width-10]LLL;input
      LLLS;input CLK;wire[630]md_s;wire[70] mdoc_s;wire[70] mff_s;wire[630]md_p;wire[70] mdoc_p;wire[70] mff_p;wire[630]md_i;wire[70] mdoc_i;wire[70] mff_i;wire[630}md_o;wire[70] mdoc_o;wire[70] mff_o;wire[70] mres_im1_s;wire[70] mres_im1_p;wire[70] mres_im1_i;wire[70] mres_ip1;wire[70] mres_ip1_s;wire[70] mres_ip1_p;wire[70] mres_ip1_i;wire[70] mdoc;wire[70] mres;wire[70] meq;wire[70] mdoc1;wire[70] mres1;wire[70] meq1;wire[70] mdoc2;wire[70] mres2;wire[70] meq2;wire[70] mdoc_sel;wire[70] mres_sel;wire[70] meq_sel;wire mux1_1;wire mux1_2;wire mux2;wire mux2_in2;wire lat_res;wire mff_out;wire lut_out;wire and_out;assign md_s={d_s,md_o[6356],md_o[5548],md_o[4740],md_o[3932],md_o[3124],md_o[2316],md_o[158]};assign mdoc_s={doc_s,mdoc_o[7],mdoc_o[6],mdoc_o[5],
      mdoc_o[4],mdoc_o[3]mdoc_o[2],mdoc_o[1]};assign mff_s={mux1_2,mff_o[7],mff_o[6],mff_o[5],mff_o[4],mff_o[3],mff_o[2],mff_o[1]};assign md_p={d_p,md_i[6356],md_i[6356],md_i[4740],md_i[6356],md_i[3124],md_i[3124],md_i[158]};assign mdoc_p={doc_p,mdoc_i[7],mdoc_i[7],mdoc_i[5],mdoc_i[7],mdoc_i[3],mdoc_i[3],mdoc_i[1]};assign mff_p={mux1_l,mff_i [7],mff_i[7],mff_i[5],mff_i[7],mff_i[3],mff_i[3],mff_i[1]};assign mres_im1_s={res_im1_s,mres[7],mres_sel[6],mres[5],mres_sel[5],mres[3],mres_sel[2],mres[1]};assign mres_im1_p={res_im1_p,mres_im1_i[7],mres_im1_i[7] ,mres_im1_i[5],mres_im1_i[7],mres_im1_i[3],mres_im1_i[3],mres_im1_i[1]};assign mres_ip1={mres_ip1_i[6],mres_ip1_i[5],mres_ip1_i[4],mres_ip1_i[3],mres_ip1_i[2],mres_ip1_i[1],mres_ip1_i
      ,res_ip1};assign mres_ip1_s={res_ip1_s,mres[6],mres_sel[4],mres[4],mres_sel[1],mres[2],mres_sel_
      ,mres
      };assign mres_ip1_p={res_ip1_p,mres_ip1_i[5],mres_ip1_i[3],mres_ip1_i[3],res_ip1,mres_ip1_i[1],res_ip1,res_ip1};assign mdoc1={doc1,mdoc[7],mdoc_sel[6],mdoc[5],mdoc_sel[5],mdoc[3],mdoc_sel[2],mdoc[1]};assign mres1={res1,mres[7],mres_sel[6],mre5[5],mres_sel[5],mres[3],mres_sel[2],mres[1]};assign meq1={eq1,meq[7],meq_sel[6],meq[5],meq_sel[5],meq[3],meq_sel[2],meq[1]};assign mdoc2={doc2,mdoc[6],mdoc_sel[4],mdoc[4],mdoc_sel[1],mdoc[2],mdoc_sel
      ,mdoc
      };assign mres2={res2,mres[6],mres_sel[4],mres[4],mres_sel[1],mres[2],mres_sel
      ,mres
      };assign meq2={eq2,meq[6],meq_sel[4],meq[4],meq_sel[1],meq[2],meq_sel
      ,meq
      };assign mux1_1=(LLM1==0)?mff_outff_p;assign mux1_2=(LLM1==0)?mff_outff_s;assign mux2=(LLM2==0)?mres_sel[3]mux2_in2;assign mux2_in2=lut_out&amp;and_out;assign and_out=&amp;mdoc;SC sc(lat_res,mres_im1_i[7],res_ip1,mff_o
      ,mff_out,
      mff_i[7],res,LLS2,LLD,LLM);Latency#(lat_width)lat(mux2,lat_ras,and_out,LLL,CLK);LUT8 lut(mres,lut_out,LLLS);assig d_i=md_i[6356];assign doc_i=mdoc_i[7];assign ff_i=mff_i[7];assign d_o=md_o[70];assig doc_o=mdoc_o
      ;assign ff_o=mff_o
      ;assign doc=mdoc_sel[3];assign eq=meq_sel[3];assign doc_sel=mdoc_sel[7];assign res_sel=mres_sel[7];assign eq_sel=meq_sel[7];assign res_im1_i=mres_im1_i
      ;assign res_ip1_i=mres_ip1_i[7];assign hits=mres_sel[60];Tree8 tree8
      {md_s,mdoc_s,mff_s,md_p,mdoc_p,mff_p,md_i,mdoc_i,mff_i,md_o,mdoc_o,mff_o,mres_im1_s,mres_im1_p,mres_im1_i,mres_ip1,mres_ip1_s,mres_ip1_p,mres_ip1_i,mdoc,mres,meq,mdoc1,mres1,meq1,mdoc2, mres2,meq2,mdoc_sel,mres_sel,meq_sel,M,A,C,L,S,D,MM,RM,LM1,LM2,LS,LD,LM,LL,LLS,CLK};endmodule//Tree64表A12-搜索處理器電路(樹512)module Tree512{d_s,doc_s,ff_s,d_p,doc_p,ff_p,d_i,doc_i,ff_i,d_o,doc_o,ff_o,res_im1_s,res_im1_p,res_im1_i,res_ip1,res_ip1_s,res_ip1_p,res_ip1_i,doc,res,eq,doc1,res1,eq1,doc2,res2,eq2,doc_sel,res_sel,eq_sel,hits,M,A,C,L,S,D,MM,RM,LM1,LM2,LS,LD,LM,LL,LLS,LLM1,LLM2,LLS2,LLD,LLM,LLL,LLLS,LLLM1,LLLM2,LLLS2,LLLD,LLLM,LLLL,LLLLS,CLK};parameter lat_width=16;input[70] d_s;inputdoc_s;inputff_s;input[70]d_p;inputdoc_p;inputff_p;output[70] d_i;output doc_i;output ff_i;output[70] d_o;output doc_o;output ff_o;inputres_im1_s;inputres_im1_p;output res_im1_i;inputres_ip1;inputres_ip1_s;inputres_ip1_p;output res_ip1_i;output doc;output res;output eq;inputdoc1;inputres1;inputeq1;inputdoc2;inputres2;inputeq2;output doc_sel;output res_sel;output eq_sel;output[620]hits;input[5110]M;input[40950] A;input[10230] C;input[10230] L;input[5110]S;input[5110]D;input[5110]MM;input[15350] RM;input[630]LM1;input[630]LM2;input[630]LS;input[630]LD;input[630]LM;input[5110] LL;input
      LLS;input[70] LLM1;input[70] LLM2;input[70] LLS2;input[70] LLD;input[70] LLM;input[1270] LLL;input
      LLLS;input LLLM1;input LLLM2;input LLLS2;input LLLD;input LLLM;input[lat_width-10]LLLL;input
      LLLLS;input CLK;wire[630] md_s;wire[70] mdoc_s;wire[70] mff_s;wire[630] md_p;wire[70] mdoc_p;wire[70] mff_p;wire[630] md_i;wire[70] mdoc_i;wire[70] mff_i;wire[630] md_o;wire[70] mdoc_o;wire[70] mff_o;wire[70] mres_im1_s;wire[70] mres_im1_p;wire[70] mres_im1_i;wire[70] mres_ip1;wire[70] mres_ip1_s;wire[70] mres_ip1_p;wire[70] mres_ip1_i;wire[70] mdoc;wire[70] mres;wire[70] meq;wire[70] mdoc1;wire[70] mres1;wire[70] meq1;wire[70] mdoc2;wire[70] mres2;wire[70] meq2;wire[70] mdoc_sel;wire[70] mres_sel;wire[70] meq_sel;wire[550] mhits;wire mux1_1;wire mux1_2;wire mux2;wire mux2_in2;wire lat_res;wire mff_out;wire lut_out;wire and_out;assign md_s={d_s,md_o[6356],md_o[5548],md_o[4-40],md_o[3932],md_o[3124],md_o[2316],md_o[15:8]};assign mdoc_s={doc_s,mdoc_o[7],mdoc_o[6],mdoc_o[5],mdoc_o[4],mdoc_o[3],mdoc_o[2],mdoc_o[1]};assign mff_s={mux1_2,mff_o[7],mff_o[6],mff_o[5],mff_o[4],mff_o[3],mff_o[2],mff_o[1]};assign md_p={d_p,md_i[6356],md_i[6356],md_i[4740],md_i[6356],md_i[3124],md_i[3124],md_i[158]};assign mdoc_p={doc_p,mdoc_i[7],mdoc_i[7],mdoc_i[5],mdoc_i[7],mdoc_i[3],mdoc_i[3],mdoc_i[1]};assign mff_p={mux1_1,mff_i[7],mff_i[7],mff_i[5],mff_i[7],mff_i[3],mff_i[3],mff_i[1]};assign mres_im1_s={res_im1_s,mres[7],mres_sel[6],mres[5],mres_sel[5],mres[3],mres_sel[2],mres[1]};assign mres_im1_p={res_im1_p,mres_im1_i[7],mres_im1_i[7],mres_im1_i[5],mres_im1_i[7],mres_im1_i[3],mres_im1_i[3],mres_im1_i[1]};assign mres_ip1={mres_ip1_i[6],mres_ip1_i[5],mres_ip1_i[4],mres_ip1_i[3],mres_ip1_i[2],mres_ip1_i[1],mres_ip1_i
      ,res_ip1};assign mres_ip1_s={res_ip1_s,mres[6],mres_sel[4],mres[4],mres_sel[1],mres[2],mres_sel
      ,mres
      };assign mres_ip1_p={res_ip1_p,mres_ip1_i[5],mres_ip1_i[3],mres_ip1_i[3],res_ip1,mres_ip1_i[1],res_ip1,res_ip1};assign mdoc1={doc1,mdoc[7],mdoc_sel[6],mdoc[5],mdoc_sel[5],mdoc[3],mdoc_sel[2],mdoc[1]};assign mres1={res1,mres[7],mres_sel[6],mres[5],mres_sel[5],mres[3],mres_sel[2],mres[1]};assign meq1={eq1,meq[7],meq_sel[6],meq[5],meq_sel[5],meq[3],meq_sel[2],meq[1]);assigm mdoc2={doc2,mdoc[6],mdoc_sel[4],mdoc[4],mdoc_sel[1],mdoc[2],mdoc_sel
      ,mdoc
      };assign mres2={res2,mres[6],mres_sel[4],mres[4],mres_sel[1],mres[2],mres_sel
      ,mres
      );assign meq2={eq2,meq[6],meq_sel[4],meq[4],meq_sel[1],meq[2],meq_sel
      ,meq
      );assign mux1_1=(LLLM1==0)?mff_outff_p;assign mux1_2=(LLLM1==0)?mff_outff_s;assign mux2=(LLLM2==0)?mres_sel[3]mux2_in2;assign mux2_in2=lut_out&amp;and_out;assign and_out=&amp;mdoc;SC sc(lat_res,mres_im1_i[7],res_ip1,mff_o
      ,mff_out,mff_i[7],res,LLLS2,LLLD,LLLM);Latency #(lat_width) lat(mux2,lat_res,and_out,LLLL,CLK);LUT8 lut(mres,lut_out,LLLLS);assign d_i=md_i[6356];assign doc_i=mdoc_i[7];assign ff_i=mff_i[7];assign d_o=md_o[70];assign doc_o=mdoc_o
      ;assign ff_o=mff_o
      ;assign doc=mdoc_sel[3];assign eq=meq_sel[3];assign doc_sel=mdoc_sel[7];assign res_sel=mres_sel[7];assign eq_sel=meq_sel[7];assign res_im1_i=mres_im1_i
      ;assign res_ip1_i=mres_ip1_i[7];assign hits={mhits[5549],mres_sel[6],mhits[4842],mres_sel[5],mhits[4135],mres_sel[4],mhits[3428],mres_sel[3],mhits[2721],mres_sel[2],mhits[2014],mres_sel[1],mhits[137],mres_sel
      ,mhits[60]};Tree64 tree64
      {md_s,mdoc_s,mff_s,md_p,mdoc_p,mff_p,md_i,mdoc_i,mff_i,md_o,mdoc_o,mff_o,mres_im1_s,mres_im1_p,mres_im1_i,mres_ip1,mres_ip1_s,mres_ip1_p,mres_ip1_i,mdoc,mres,meq,mdoc1,mres1,meq1,mdoc2,mres2,meq2,mdoc_sel,mres_sel,meq_sel,mhits,M,A,C,L,S,D,MM,RM,LM1,LM2,LS,LD,LM,LL,LLS,LLM1,LLM2,LLS2,LLD,LLM,LLL,LLLS,CLK);endmodule//Tree512表A13-命眾管理單元module HitMan(res_,doc,res,M,MM,CLK);parameter width=5;input res_;inputdoc;output res;input[10]M;input[width-10]MM;input CLK;wire dIn;wire dout;wire m;wire mm;reg[2^width-10] c;initial c=0;always @(posedqe CLK)c=c+1;Dff dff(dIn,dout,1′b1,CLK);assign mm=c[MM];assign m=(M==0)?1((M==1)?mmdoc);assign dIn=(dout&amp;(~res_)}|m;assign res=res_&amp;dout;endmodule//HitMan
      權(quán)利要求
      1.一個(gè)處理電路(P1),用于在高速數(shù)據(jù)流中識(shí)別和比較復(fù)雜模式,特別是用于搜索和獲取存儲(chǔ)在結(jié)構(gòu)化或非結(jié)構(gòu)化的數(shù)據(jù)庫中的數(shù)據(jù)的搜索引擎中,其中,處理電路(P1)形成一個(gè)這種處理電路的網(wǎng)絡(luò)的一個(gè)節(jié)點(diǎn),其特征是處理電路(P1)包括一個(gè)接口,該接口具有分別是處理電路(P1)的配置和操作參數(shù)的數(shù)據(jù)的輸入和輸出,針對(duì)一個(gè)給定的處理任務(wù),配置參數(shù)是通過接口的未指明的或?qū)S玫妮斎胍淮涡匀刻峁┙o處理電路(P1),和通過執(zhí)行給定處理任務(wù)來處理的運(yùn)行數(shù)據(jù)是通過特定的接口輸入和輸出連續(xù)輸入到處理電路或從處理電路輸出,至少一個(gè)比較器單元(COM)形式的核心處理器(P0),比較器單元(COM)適用于比較兩個(gè)數(shù)據(jù)字,和一個(gè)與比較器單元連接的邏輯單元(E),邏輯單元包括一個(gè)連接下列接口輸入的多路復(fù)用器(MUX1)一個(gè)順序數(shù)據(jù)輸入,一個(gè)順序文件輸入,一個(gè)順序觸發(fā)器輸入,一個(gè)前面的處理電路的順序結(jié)果輸入,一個(gè)后面處理電路的順序結(jié)果輸入,一個(gè)并行數(shù)據(jù)輸入,一個(gè)并行文件輸入,一個(gè)并行觸發(fā)器輸入,一個(gè)前面的處理電路的并行結(jié)果輸入和一個(gè)后面處理電路的并行結(jié)果輸入;邏輯單元還與下列的接口輸出連接一個(gè)所選數(shù)據(jù)值的輸出,一個(gè)所選文件值的輸出,一個(gè)所選觸發(fā)器值的輸出,一個(gè)所選前面的處理電路結(jié)果的輸出和一個(gè)所選文件值的輸出,一個(gè)所選觸發(fā)器值的輸出,一個(gè)所選前面電路結(jié)果的輸出,和一個(gè)所選后面處理電路結(jié)果的輸出;一個(gè)第一D觸發(fā)器(2);一個(gè)用于將一個(gè)正二進(jìn)制值延遲一個(gè)給定數(shù)目時(shí)間單位的等待時(shí)間單元(LAT);一個(gè)第二D觸發(fā)器(4);一個(gè)用于監(jiān)視和控制比較器單元(COM)的比較操作的順序控制單元(SC),和一個(gè)用于合并兩個(gè)其它處理電路或其它結(jié)果選擇器的結(jié)果值的結(jié)果選擇器;比較器單元COM)連接一個(gè)多路復(fù)用器(MUX1)上的所選數(shù)據(jù)值的輸出和接口中的一個(gè)數(shù)據(jù)輸出,進(jìn)一步還有一個(gè)與第一與門(1)連接的結(jié)果輸出,一個(gè)與第二與門(3)連接的相等單元,第一個(gè)D觸發(fā)器連接多路復(fù)用器(MUX1)上一個(gè)所選文件值的輸出,一個(gè)復(fù)位輸出通過一根復(fù)位線(5)分別連接第一個(gè)與門(1)的一個(gè)輸入,第二個(gè)與門(3)的一個(gè)輸入,等待時(shí)間單元(LAT)的一個(gè)輸入,以及接口中的一個(gè)文件輸入,第二個(gè)與門(3)在接口中具有一個(gè)相等輸出,時(shí)間等待單元連接第一個(gè)與門(1)的輸出和順序控制單元(SC)的結(jié)果輸入,第二個(gè)D觸發(fā)器(4)連接第一個(gè)D觸發(fā)器(2)的復(fù)位輸出和順序控制單元(SC)上的一個(gè)觸發(fā)器輸出和輸入,以及連接一個(gè)接口中的觸發(fā)器的輸出,順序控制單元(SC)連接一個(gè)所選觸發(fā)器值的輸出和一個(gè)所選的多路復(fù)用器(MUX1)上前面處理電路結(jié)果輸出,和連接一個(gè)前面處理電路的結(jié)果輸入和接口中的結(jié)果輸出,結(jié)果選擇器(RS)分別連接接口中的第一個(gè)結(jié)果輸入,第一個(gè)文件輸入,第一個(gè)相等輸入,第二個(gè)結(jié)果輸入,第二個(gè)文件輸入,和第二個(gè)相等輸入,并分別連接接口中的一個(gè)結(jié)果輸出,一個(gè)文件輸出和一個(gè)相等輸出。
      2.依照權(quán)利要求1的一個(gè)處理電路(P1),其特征在于根據(jù)下面的列表通過配置參數(shù)的輸入和操作參數(shù)的輸入和輸出來說明接口,表中第一列給出參數(shù)的命名,第二列是分別是運(yùn)行的和配置的參數(shù)類型,第三列表示參數(shù)是輸入的還是輸出的,第四列是用位數(shù)表示的輸入或輸出參數(shù)的寬度,第五列是所討論的參數(shù)的簡短說明
      3.依照權(quán)利要求1的一個(gè)處理電路(P1),其特征在于比較器單元(COM)包括一個(gè)第一寄存器(6),在所有情況下包含以數(shù)據(jù)字x形式的輸入數(shù)據(jù),分別連接一個(gè)數(shù)據(jù)輸入和一個(gè)數(shù)據(jù)輸出,一個(gè)第二寄存器(7),包括一個(gè)與第一寄存器中的數(shù)據(jù)字x進(jìn)行比較的數(shù)據(jù)字a,以及一個(gè)或多個(gè)邏輯門和一個(gè)多路復(fù)用器(MUX2),連接到寄存器(6、7)用于執(zhí)行一個(gè)比較操作,一個(gè)包括比較器單元結(jié)果輸出的多路復(fù)用器(MUX2)輸出。
      4.依照權(quán)利要求3的一個(gè)處理電路(P1),其特征在于根據(jù)下面的列表通過配置參數(shù)的輸入和操作參數(shù)的輸入和輸出來說明比較器單元(COM)的接口,表中第一列給出參數(shù)的命名,第二列是分別是運(yùn)行的和配置的參數(shù)類型,第三列表示參數(shù)是輸入的還是輸出的,第四列是用位數(shù)表示的輸入或輸出參數(shù)的寬度,第五列是所討論的參數(shù)的簡短說明
      5.依照權(quán)利要求4的一個(gè)處理電路(P1),其特征在于比較操作是操作符≤、≥、≠和=中的一種,通過輸入的配置參數(shù)給出,二進(jìn)制0表示≤,二進(jìn)制1表示≥,二進(jìn)制2表示≠,og二進(jìn)制3表示=。
      6.依照權(quán)利要求1的一個(gè)處理電路(P1),其特征在于等待時(shí)間單元(LAT)包括一個(gè)計(jì)數(shù)器(8),分別通過一個(gè)第一輸入與第二與門(3)相連,通過一個(gè)第二輸入與復(fù)位線(5)相連,計(jì)數(shù)器(8)連接一個(gè)等待時(shí)間寄存器(9),該寄存器(9)包含一個(gè)配置等待時(shí)間參數(shù),并具有一個(gè)輸出,即等待時(shí)間單元的結(jié)果輸出。
      7.依照權(quán)利要求6的一個(gè)處理電路(P1),其特征在于根據(jù)下面的列表通過配置參數(shù)的輸入和操作參數(shù)的輸入和輸出來說明等待時(shí)間單元(LAT)的接口,表中第一列給出參數(shù)的命名,第二列是分別是運(yùn)行的和配置的參數(shù)類型,第三列表示參數(shù)是輸入的還是輸出的,第四列是用位數(shù)表示的輸入或輸出參數(shù)的寬度,第五列是所討論的參數(shù)的簡短說明
      8.依照權(quán)利要求7的一個(gè)處理電路(P1),其特征在于L=0表示沒有等待時(shí)間,L=t表示等待時(shí)間為t個(gè)時(shí)間單元,L=t=2W-1表示不定的等待時(shí)間。
      9.依照權(quán)利要求1的一個(gè)處理電路(P1),其特征在于順序控制單元(SC)包括一個(gè)第一與門(10),與前面一個(gè)處理電路的一個(gè)結(jié)果輸入和等待時(shí)間單元(LAT)的一個(gè)結(jié)果輸出相連接,一個(gè)第一或門(11),與第一與門(10)的一個(gè)輸出和第二D觸發(fā)器(4)的一個(gè)輸出相連接,一個(gè)第二與門(12),與等待時(shí)間單元(LAT)的結(jié)果輸出和后面一個(gè)處理電路的結(jié)果輸入相連接,一個(gè)第二或門(13)與后面一個(gè)處理電路的結(jié)果輸入和第二D觸發(fā)器(4)的輸出相連接,一個(gè)第三與門(14)與時(shí)間等待單元(LAT)的結(jié)果輸出和或門(13)的一個(gè)輸出相連接,一個(gè)多路復(fù)用器(MUX3),分別與等待時(shí)間單元(LAT)的結(jié)果輸入、每個(gè)與門(10、12、14)和第一或門(11)的一個(gè)輸出、一個(gè)前面處理電路的結(jié)果輸入和后面一個(gè)處理電路的觸發(fā)器輸出相連接,順序控制單元(SC)的一個(gè)輸出形成處理電路(P1)的結(jié)果輸出。
      10.依照權(quán)利要求9的一個(gè)處理電路(P1),其特征在于根據(jù)下面的列表通過配置參數(shù)的輸入和操作參數(shù)的輸入和輸出來說明順序控制單元(SC)的接口,表中第一列給出參數(shù)的命名,第二列是分別是運(yùn)行的和配置的參數(shù)類型,第三列表示參數(shù)是輸入的還是輸出的,第四列是用位數(shù)表示的輸入或輸出參數(shù)的寬度,第五列是所討論的參數(shù)的簡短說明
      11.依照權(quán)利要求10的一個(gè)處理電路(P1),其特征在于順序控制單元(SC)實(shí)現(xiàn)下列一個(gè)或多個(gè)順序控制操作-允許比較器單元(COM)輸出一個(gè)比較結(jié)果,取決于前面或后面單元輸出一個(gè)比較結(jié)果,-允許部分殘缺的模式的比較,-允許部分重復(fù)的模式的比較。
      12.依照權(quán)利要求11的一個(gè)處理電路(P1),其特征在于如果將運(yùn)行一個(gè)順序控制,則配置參數(shù)S是一個(gè)二進(jìn)制1的輸入,對(duì)于先前順序控制和向后順序控制,配置參數(shù)D分別是一個(gè)二進(jìn)制數(shù)0或1的輸入,如果允許進(jìn)行部分殘缺模式或重復(fù)模式的比較,則配置參數(shù)MM為一個(gè)二進(jìn)制1的輸入。
      13.依照權(quán)利要求1的一個(gè)處理電路(P1),其特征在于結(jié)果選擇器(RS)包括一個(gè)第一與門(15),與第一相等輸入和第二相等輸入相連接,一個(gè)第二與門(16),與第一結(jié)果輸入和第二結(jié)果輸入相連接,一個(gè)第三與門(17),與第一結(jié)果輸入和第二相等輸入相連接,一個(gè)非門(18),與第二相等輸入相連接,一個(gè)第四與門(19),與第二結(jié)果輸入和非門(18)輸出相連接,一個(gè)第一或門(20),與第一和第二相等輸入相連接,一個(gè)第二或門(21),分別與第一和第二相等輸入相連接,一個(gè)第三或門(22),分別與第三和第四與門(17;19)的輸出相連接,一個(gè)多路復(fù)用器(MUX4),分別與第一結(jié)果輸入、第二結(jié)果輸入、第一相等輸入、第二相等輸入、第一和第二與門(15;16)的輸出、以及第一、第二和第三或門(20;21;22)的輸出相連接,一個(gè)第五與門(23),分別與接口中的第一和第二文件輸入和文件輸出相連接,一個(gè)第六與門(24),分別與第五與門(23)的輸出、多路復(fù)用器(MUX4)的一個(gè)第一輸出和接口中的結(jié)果輸出相連接,和一個(gè)第七與門(25),分別與第五與門(23)和多路復(fù)用器(MUX4)的一個(gè)第二輸出,以及接口中的相等輸出相連接。
      14.依照權(quán)利要求13的一個(gè)處理電路(P1),其特征在于根據(jù)下面的列表通過配置參數(shù)的輸入和操作參數(shù)的輸入和輸出來說明結(jié)果比較器(RS)的接口,表中第一列給出參數(shù)的命名,第二列是分別是運(yùn)行的和配置的參數(shù)類型,第三列表示參數(shù)是輸入的還是輸出的,第四列是用位數(shù)表示的輸入或輸出參數(shù)的寬度,第五列是所討論的參數(shù)的簡短說明
      15.依照權(quán)利要求14的一個(gè)處理電路(P1),其特征在于結(jié)果選擇器(RS)實(shí)現(xiàn)下面的一個(gè)或多個(gè)操作-僅使用第一個(gè)結(jié)果(res1)-僅使用第二個(gè)結(jié)果(res2)-對(duì)第一和第二結(jié)果進(jìn)行布爾運(yùn)算“與”-對(duì)第一和第二結(jié)果進(jìn)行布爾運(yùn)算“或”-對(duì)一組處理電路(P1)進(jìn)行≥運(yùn)算-對(duì)一組處理電路(P1)進(jìn)行≤運(yùn)算。
      16.依照權(quán)利要求15的一個(gè)處理電路(P1),其特征在于結(jié)果比較器(RS)配置參數(shù)PM被當(dāng)作一個(gè)為結(jié)果比較器執(zhí)行的每個(gè)操作指定的3位二進(jìn)制值而輸入。
      17.一個(gè)搜索處理器電路(PMC),包括一個(gè)具有樹狀結(jié)構(gòu)的多處理器單元Pn,用于在高速數(shù)據(jù)流中識(shí)別和比較復(fù)雜模式,特別是用于查找和索引存儲(chǔ)在結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)庫中的數(shù)據(jù)的搜索引擎中,其中多處理器單元Pn包括依照權(quán)利要求1的處理電路P1,并且多處理器單元Pn形成一個(gè)體現(xiàn)為一個(gè)具有n+1個(gè)層S0,S1….Sn和等級(jí)數(shù)k=2m的二進(jìn)制或超二進(jìn)制樹的電路,其中m是一個(gè)大于或等于1的正整數(shù),一個(gè)超二進(jìn)制樹通過k>2來定義,其特征是在Sn層上提供多處理器單元Pn,形成樹的一個(gè)根節(jié)點(diǎn),它包括一個(gè)接口Ipn和一個(gè)邏輯單元E,最近的下面一層Sn-1包括2m個(gè)電路Pn-1,在多處理器單元Pn中是嵌套的并由此形成子節(jié)點(diǎn),每個(gè)電路Pn-1具有唯一的接口Ipn-1并包括一個(gè)相應(yīng)的邏輯單元E,下面層Sn-q(q∈{1,2,….n-1})上的多處理器單元Pn通常包括2mq個(gè)具有接口Ipn-q的電路Pn-q,相應(yīng)的邏輯單元(E),在下面層Sn-q+1上的2m(q-1)個(gè)電路Pn-q中是嵌套提供的,該層上每個(gè)電路Pn-q-1包括2m個(gè)電路Pn-q,針對(duì)q=n=S0的多處理器單元Pn定義的n-q=0的第零層包括2m(n-1)至2mn個(gè)單元核心處理器P0,形成層S1的2m(n-1)個(gè)處理電路P1中的比較器單元(COM),每個(gè)處理電路P1包括1-2m個(gè)比較器單元(COM),每個(gè)單元具有接口Ip1和相應(yīng)的邏輯單元(E),通常層S1,S2…Sn上所有的電路P1,P2…Pn具有唯一的接口I,這樣有Ip1=Ip2=…Ipn=I,每個(gè)邏輯單元(E)包括一個(gè)結(jié)果選擇器或一個(gè)用于收集由層S1上的處理電路P1執(zhí)行的搜索操作或比較操作結(jié)果的查詢表單元(LUT)。
      18.依照權(quán)利要求17的搜索處理器電路(PMC),其特征在于層S1上的每個(gè)處理電路包括2m個(gè)比較器單元(COM),這樣多處理器單元Pn形成一個(gè)未還原的二進(jìn)制或超二進(jìn)制樹,一個(gè)處理電路P1映射一個(gè)上層上的具有一個(gè)因數(shù)r=2m的電路P2,通常對(duì)于q∈{1,2,….n-1},層Sn-q一個(gè)電路Pn-q映射一個(gè)上層Sn-q+1上的具有一個(gè)因數(shù)r=2m的電路Pn-q+1,這樣在所有情況下配置電路Pn的二進(jìn)制或超二進(jìn)制樹包括一個(gè)從層S1開始的遞歸產(chǎn)生的二進(jìn)制或超二進(jìn)制樹。
      19.一個(gè)依照權(quán)利要求17的搜索處理器電路(PMC),其特征在于根據(jù)下面的列表通過配置參數(shù)的輸入和操作參數(shù)的輸入和輸出來說明多處理器Pn的接口Ipn和Pn包含的下面層面Sn-q上每個(gè)電路Pn-q的接口Ipn-q,表中第一列給出參數(shù)的命名,第二列是分別是運(yùn)行的和配置的參數(shù)類型,第三列表示參數(shù)是輸入的還是輸出的,第四列是用位數(shù)表示的輸入或輸出參數(shù)的寬度,第五列是所討論的參數(shù)的簡短說明
      20.依照權(quán)利要求17的搜索處理器電路(PMC),其中邏輯單元(E)包括一個(gè)等待時(shí)間單元(LAT)和一個(gè)順序控制單元(SC),以及一個(gè)查詢表單元(LUT),邏輯單元E進(jìn)一步包括一個(gè)第一與門(26)、一個(gè)第一多路復(fù)用器(MUX5)、一個(gè)第二與門(27)和一個(gè)第二多路復(fù)用器(MUX6),查詢表單元(LUT)與下面一層的每個(gè)處理電路Pn-1的一個(gè)結(jié)果輸出相連接,第一與門(26)與每個(gè)上述電路Pn-1的一個(gè)文件輸出相連接,第二與門(27)與第一與門(26)的輸出和查詢表單元(LUT)的輸出相連接,第一多路復(fù)用器(MUX5)與第二與門(27)的輸出和上述電路Pn-1中的最后一個(gè)電路的結(jié)果輸出相連接,等待時(shí)間單元與第一個(gè)與門(26)的輸出相連接,順序控制器單元(SC)與等待時(shí)間單元(LAT)的一個(gè)輸出、上述電路Pn-1中的第一個(gè)電路的一個(gè)結(jié)果輸出和一個(gè)觸發(fā)器輸出、邏輯單元的一個(gè)結(jié)果輸出和上述電路Pn-1中的最后一個(gè)電路的一個(gè)觸發(fā)器輸出相連接,第二多路復(fù)用器(MUX6)與順序控制單元(SC)的一個(gè)觸發(fā)器輸出相連接,并分別與邏輯單元(E)的一個(gè)第一和第二觸發(fā)器輸入相連接,進(jìn)一步分別通過第一和第二觸發(fā)器輸出與上述電路Pn-1中的第一個(gè)電路相連接。
      21.一個(gè)依照權(quán)利要求20的搜索處理器電路(PMC),其特征在于搜索處理器電路(PMC)包括一個(gè)文件管理單元(DOC),通過一個(gè)數(shù)據(jù)輸出分別與多處理器Pn上的順序的和平行的數(shù)據(jù)輸入相連接,通過一個(gè)文件輸出與多處理器單元Pn上的順序文件輸入相連接。
      22.一個(gè)依照權(quán)利要求20的搜索處理器電路(PMC),其特征在于搜索處理器電路(PMC)包括1/2k=2m-1選中管理單元(HIT),分別與電路Pn-1的結(jié)果輸出和文件輸出相連接,每個(gè)選中管理單元(HIT)通過一個(gè)結(jié)果輸入分別與多處理器單元Pn接口的結(jié)果輸出相連接。
      全文摘要
      一個(gè)用來在高速數(shù)據(jù)流中識(shí)別和比較一個(gè)復(fù)雜模式的處理電路P
      文檔編號(hào)G06F17/30GK1333895SQ99815623
      公開日2002年1月30日 申請日期1999年11月12日 優(yōu)先權(quán)日1998年11月13日
      發(fā)明者B·斯文根, A·哈拉爾斯, O·R·伯克蘭 申請人:快速檢索及傳遞公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1