处理电路和搜索处理器电路的制作方法

文档序号:6419548阅读:346来源:国知局
专利名称:处理电路和搜索处理器电路的制作方法
技术领域
本发明涉及在高速数据流中识别和比较的复杂模式的处理电路,特别是在搜索和查找存储在结构化或非结构化数据库中的数据的搜索引擎中的应用,其中该处理电路形成这种处理电路网络中的一个节点,一个搜索处理器电路包括一个具有树状结构的多处理器单元Pn,用于在高速数据流中识别和比较复杂模式,特别是用于查找和索引存储在结构化或非结构化数据库中的数据的搜索引擎中,其中多处理器单元Pn包括依照权利要求1的处理电路P1,并且多处理器单元Pn形成一个体现为一个具有n+1个层面S0,S1….Sn和等级数k=2m的二进制或超二进制树的电路,其中m是一个大于或等于1的正整数,一个超二进制树通过k>2来定义。
本发明在一个具有多个处理电路的多处理器单元的基础上实现一个搜索处理器电路。在一个搜索操作中,一个数据流通过搜索处理器电路的处理电路同步传送,对于每个步骤,将芯片中的当前数据与一些模式或其它的可能被编码为位串并预先输入到处理电路的模式进行比较。
为了在大型数据流中搜索信息,近年来已经开发了一些专用的处理器,例如对于互联网或内联网等类型的数据通讯网络的搜索引擎,监控数据流内容和查找大型结构化或非结构化的数据库的数据等,这些信息是很典型的。原因是在上述领域中识别和查找信息是非常关键的操作,不便于利用普通的数据处理器来得以有效的实现。大数据容量中的模式搜索和查找基本上适宜于利用很多个同时在相同或不同的数据段进行搜索的处理单元在整体上并行解决。通过利用整体并行处理,将可以同时处理大量的查询或搜索。对于搜索,建议使用具有能够充分描述搜索信息特征的表达式能力的特殊的搜索语言。
本技术领域中有熟知的使用数据或符号的串比较的处理器。作为这种连接中的先前技术的一个例子,可以参考国际专利申请PCT/NO92/00171,题目为“非数字协处理器”。此外还有Paracel公司开发的特别适用于分析数据间相似性的称为快速数据寻找器(FDF)的数据处理单元。FDF采用一个可以检测一个精确匹配的匹配技术模式,但也能够发现弱相似性,这些在基因研究和文本搜索时是很有用的。
此外,还有出自于美国专利5 553 272(Ranganathan等),被认为是一个用于计算一个给定字母表的两个字符串间的编排距离的线性脉动数组处理器。这一计算是基于一个可减少表示一个计算中的状况所需位数的编码方案。给出该脉动数组处理器一个结构,该结构不限制那些可以进行比较并使用仅需与最近的邻近单元通讯的简单基本单元的字符串长度,这样非常适合实现超大规模集成电路。
已知的专用搜索处理器的一个缺陷是它们不能提供处理非常复杂的搜索查询的足够先进的功能。另一个缺陷是在更大的程度上它们是基于一个仅能很困难地提供这种无需多余复杂程度的功能的电路结构。
美国专利4860201(Stolfo等)给出了一个解决这一问题的尝试,该专利公开了一个如同二进制树一样结构的并行处理装置,其中使用了许多个处理器,每一个都有自己的输入/输出单元。一般地说,Stolfo等人公开了一个具有连接在一个二进制树状结构中的许多个处理器的计算机,这样每个处理器除了那些分别形成树的根和叶的处理器,都有一个单独的父处理器和两个子处理器。典型地,处理器与从一个父处理器传输来的数据同步工作,并进一步将结果与最近的下面的处理器进行通讯。同时,一个父处理器的子处理器也可以相互通讯。根据Stolfo等人的专利申请,每个节点形成一个处理单元,包括一个真实意义上的处理器、一个读/写存储器或一个随机存取存储器、和一个输入/输出装置。输入/输出装置提供每个处理单元与其父处理单元和子处理单元间的接口,这样可以很好地改进通过二进制树状结构传输数据的速度。因为二进制树状结构在每个节点中有一个处理单元,处理装置通常包含2n-1个处理单元,即如果二进制树实现为n=10层,则共有1023个处理单元。在该先前技术的一个优选实施方案中,并行处理装置具有一个12MHz的时钟频率,在使用一个具有1023个处理器的树的情况下,每个具有1.8微妙平均指令周期的处理器可提供一个每秒钟大约5.7亿条指令的处理性能。
一个这种类型的二进制并行处理器可以很好地适用于解决可分区的数据处理问题,例如在大信息量中的搜索。可分区搜索问题可以定义为这样一个问题,其中关于一个对象x和对象集的关系的查询相当于重复使用一个具有一个标识的可交换的相关的二进制操作符b,和一个用于一个新对象x和集F中每个元素f间的基本的搜索查询q。当逻辑运算OR与用于一个新对象x和集F中每个元素f间的基本查询“x等于f”相结合时,存在一个分区搜索的问题。如Stolfo等人的专利所述,包括一个关于集F的查询回答的问题,可以通过用于集F的任意子集的查询的组合来回答。换句话说,该问题是分区的,并非常适应于通过并行处理快速执行。集F被任意划分为数量等于可用处理器数的子集。然后基本查询q被并行用于每个与所有处理器通讯的未知的x和集F的本地存储元素f间的处理器。而后,通过操作符b的log2N次重复把结果并行任意组合,首先在N/2个处理器毗邻对上进行大量计算,然后用第一次计算得出的结果在N/4个处理器对上进行相应数量的计算。这样,在处理期间,操作在二进制树中向上面的层面移动,换句话说,就是从子处理器向父处理器移动,并在每个层上并行重复执行。
根据属于本申请人的国际专利申请PCT/NO99/00308,已知一个适用于数字数据信号结构处理的数字处理装置,其中数据信号结构包括循环序列和/或嵌套的模式。该处理装置通常配置为一个具有n+1层面S0,S1….Sn和等级数为k的常规树。与上述编号为4860201的美国专利发布的内容相比,该结构体系提供的许多优势,并且在一个实施方案中可以用来实现基于一个常规2次二进制树或一个2m次的超二进制树的多处理器结构体系,其中m为大于2的正整数,这样,例如一个超二进制树将有4、8、16的等级数。类似与美国专利4860201中所提出的,一个这种类型的二进制或超二进制树结构将能够用一个有效的方式来解决分区搜索问题。
这样,本发明的主要目的是提供一个搜索处理器电路,在上述国际专利申请中公开的普通多处理器结构体系的基础上,可以利用一个能够避免上面提到的需要专用搜索处理器的缺陷的多处理器结构体系来实现该电路,而该电路还同时还能提供一个比美国专利4860201中公布的利用并行处理器处理更好的处理技术和装置的经济性。
而且,本发明的一个目的是提供一个处理电路,可以被用于在一个搜索处理器电路中实现一个多处理器单元,通过模式的比较来进行有效的搜索操作。
最后,本发明的另一个目的是提供一个搜索处理器电路,其结构不仅能够利用适当的功能解决二进制分区搜索问题,而且借助于微电子领域的已知的可用的电路解决方法的不同程度的集成,使其便于实现。特别地,在这种连接中,可以以一个微电子组件的形式来实现,该微电子组件可以实现为所谓的现场可编程门阵列(FPGA)或一个特定用途集成电路(ASIC)。
根据本发明,通过一个处理器电路实现上述的目的和其它特征及优势,该处理器电路的特征是它包括一个具有分别为处理电路的配置和运行参数的数据输入和输出的接口,针对一个给定的处理任务,配置参数是通过接口的未指明的或专用的输入一次性全部提供,通过执行给定处理任务来处理的运行数据是通过特定的接口输入和输出连续输入到处理电路或从处理电路输出,至少一个比较器单元形式的核心处理器,比较器单元适用于比较两个数据字,和一个与比较器单元连接的逻辑单元,逻辑单元包括一个与接口的下列输入相连的多路复用器一个顺序数据输入、一个顺序文件输入、一个顺序触发器输入、一个前面的处理电路的顺序结果输入、一个后面处理电路的顺序结果输入、一个并行数据输入、一个并行文件输入、一个并行触发器输入、一个前面的处理电路的并行结果输入和一个后面处理电路的并行结果输入;还与下列的接口输出连接一个所选数据值的输出、一个所选文件值的输出、一个所选触发器值的输出、一个所选前面的处理电路结果的输出和一个所选文件值的输出、一个所选触发器值的输出、一个所选前面电路结果的输出、和一个所选后面处理电路结果的输出;第一个D触发器;一个用于将一个正二进制值延迟给定数目时间单位的等待时间单元;一个第二D触发器;一个用于检测和控制比较器单元的比较操作的顺序控制单元,和一个用于合并两个其它处理电路的结果值的结果选择器或其它结果选择器;比较器单元连接一个多路复用器上的所选数据值的输出和一个接口中的数据输出,进一步还有一个结果输出连接第一个与门,一个相等单元连接第二个与门,第一个D触发器连接多路复用器上一个所选文件值的输出,并有一个复位输出通过一根复位线分别连接第一个与门的一个输入、第二个与门的一个输入、等待时间单元的一个输入、以及一个接口中的文件输入,第二个与门具有一个接口中的相等输出,时间等待单元连接第一个与门的输出和顺序控制单元的结果输入,第二个D触发器连接第一个D触发器的复位输出和分别连接顺序控制单元上的一个触发器输出和输入,以及连接一个接口中的触发器输出,顺序控制单元连接一个所选触发器值的输出和一个所选的多路复用器上前面处理电路结果输出,和连接一个前面处理电路的结果输入和接口中的结果输出,结果选择器分别连接接口中的第一个结果输入、第二个文件输入、第一个相等输入、第二个结果输入、第二个文件输入、和第二个相等输入,并分别连接接口中的一个结果输出、一个文件输出和一个相等输出。
依照本发明的处理电路的一个优选实施方案中,比较器单元COM包括一个第一寄存器,在所有情况下包含以数据字x形式的输入数据,分别连接一个数据输入和一个数据输出,一个第二寄存器,包括一个与第一寄存器中的数据字x进行比较的数据字a,以及一个或多个逻辑门和一个多路复用器,连接到寄存器用于执行一个比较操作,一个包括比较器单元结果输出的多路复用器输出。
依照本发明的处理电路的一个优选实施方案中,等待时间单元包括一个计数器,分别通过一个第一输入与第二与门的输出相连接,通过一个第二输入与复位线相连接,计数器与一个包含一个配置等待时间参数的等待时间寄存器相连接,并有一个输出,即等待时间单元结果输出。
依照本发明的处理电路的一个优选实施方案中,顺序控制单元包括一个第一与门,与前面处理电路的结果输入和等待时间单元的结果输出相连接。一个第一或门,分别与第一与门的一个输出和第二D触发器的一个输出相连接,一个第二与门,与等待时间单元的结果输出和后面的处理电路的结果输入相连接,一个第二或门,与后面处理电路的结果输入和第二D触发器的输出相连接,一个第三与门,与等待时间单元的结果输出和或门的输出相连接,一个多路复用器,分别与等待时间单元的结果输出、每个与门和第一或门的输出、前面处理电路的结果输入和后面处理电路的触发器输出、一个形成后面处理电路的结果输出的顺序控制单元的输出相连接。
依照本发明的处理电路的一个优选实施方案中,结果选择器包括一个第一与门,与第一相等输入和第二相等输入相连接,一个第二与门,与第一结果输入和第二结果输入相连接,一个第三与门,与第一结果输入和第二相等输入相连接,一个非门,与第二相等输入相连接,一个第四与门,与第二结果输入和非门输出相连接,一个第一或门,分别与第一和第二相等输入相连接,一个第二或门,分别与第一和第二相等输入相连接,一个第三或门,分别与第三和第四与门的输出相连接,一个多路复用器,分别与第一结果输入、第二结果输入、第一相等输入、第二相等输入、第一和第二与门的输出、以及第一、第二和第三或门的输出相连接,一个第五与门,分别与接口中的第一和第二文件输入和文件输出相连接,一个第六与门,分别与第五与门的输出、多路复用器的一个第一输出和接口中的结果输出相连接,和一个第七与门,分别与第五与门和多路复用器的一个第二输出,以及接口中的相等输出相连接。
依照本发明,也可以通过一个搜索处理器电路实现上述的目的和其它的特性及优点,该搜索处理器电路的特点是在Sn层上提供多处理器单元,形成树的一个根节点,它包括一个接口Ipn和一个逻辑单元E,最近的下面一层Sn-1包括2m个在多处理器单元Pn中嵌套提供的电路Pn- 1,并由此形成子节点,每个电路Pn-1具有唯一的接口Ipn-1并包括一个相应的逻辑单元E,下面层Sn-q(q∈{1,2,….n-1})上的多处理器单元Pn通常包括2mq个具有接口Ipn-q的电路Pn-q和相应的逻辑单元,在下面层Sn-q+1上的2m(q-1)个电路Pn-q中是嵌套提供的,该层上每个电路Pn-q-1包括2m个电路Pn-q,针对q=n=S0的多处理器单元Pn规定的n-q=0的第零层包括2m(n-1)—2mn个单元核心处理器P0,形成层S1的2m(n-1)个处理电路P1中的比较器单元,每个处理电路P1包括1—2m个比较器单元,每个单元具有接口Ip1和相应的逻辑单元,通常层S1,S2…Sn上所有的电路P1,P2…Pn具有唯一的接口I,这样有Ip1=Ip2=…Ipn=I,每个逻辑单元包括一个结果选择器或一个用于收集由层S1上的处理电路P1执行的搜索操作或比较操作结果的查询表单元。
依照本发明的搜索处理器电路的一个优选实施方案中,层上的每个处理电路包括2m个比较器单元,这样多处理器单元Pn形成一个未简化的二进制或超二进制树,一个处理电路P1映射一个上层上的具有一个因数r=2m的电路P2,通常对于q∈{1,2,….n-1},层Sn-q一个电路Pn-q映射一个上层Sn-q+1上的具有一个因数r=2m的电路Pn-q+1,这样在所有情况下配置电路Pn的二进制或超二进制树包括一个从层S1开始的递归产生的二进制或超二进制树。
依照本发明的搜索处理器电路的一个优选实施方案,其中逻辑单元包括一个等待时间单元和一个顺序控制单元,以及一个查询表单元,逻辑单元还包括一个第一与门、一个第一多路复用器、一个第二与门和一个第二多路复用器,查询表单元与下面一层的每个处理电路Pn-1的一个结果输出相连接,第一与门与每个上述电路Pn-1的一个文件输出相连接,第二与门与第一与门的输出和查询表的输出相连接,第一多路复用器与第二与门的输出和上述电路Pn-1中的最后一个电路的结果输出相连接,等待时间单元与第一个与门的输出相连接,顺序控制器单元与等待时间单元的一个输出、上述电路Pn-1中的第一个电路的一个结果输出和一个触发器输出、逻辑单元的一个结果输出和上述电路Pn-1中的最后一个电路的一个触发器输出相连接,第二多路复用器与顺序控制单元的一个触发器输出相连接,并分别与逻辑单元的一个第一和第二触发器输入相连接,进一步分别通过第一和第二触发器输出与上述电路Pn-1中的第一个电路相连接。
依照本发明的搜索处理器电路的一个优选实施方案包括一个文件管理单元,通过一个数据输出分别与多处理器Pn上的顺序的和平行的数据输入相连接,通过一个文件输出与多处理器单元Pn上的顺序文件输入相连。
依照本发明,搜索处理器电路最好还包括1/2k=2m-1选中管理单元,分别与电路Pn-1的结果输出和文件输出相连接,每个选中管理单元通过一个结果输入分别连接到多处理器单元Pn的接口输出上。
另外的特征和优点在附加的独立权利要求中有明显的说明。
现在将结合依照本发明的处理器电路独立单元的示例实施方案,及其实施方案的例子和基于这种类型的处理电路的具有一个多处理器单元的搜索处理器电路,并结合附图对本发明进行更详细的解释,附图中

图1显示依照本发明的搜索处理器电路的原理,图2是一个本发明使用的比较器单元。
图3是本发明中如何比较一个字符模式的原理,
图4是本发明中如何比较一个第二字符模式的原理。
图5是本发明中如何比较一个两字符模式的原理。
图6是本发明中如何比较不同长度的循环特征模式的原理,图7是本发明中所用的比较字符模式的循环发生的一个顺序控制单元,图8是与图2中的比较器单元相互连接的图7中的顺序控制单元。
图9是本发明中如何比较任意模式的字符串的原理。
图10是依照本发明的用于搜索处理器电路的一个二进制数据分布树的第一个实施方案,图11是图10中二进制数据分布树和采用图8中所示连接的实现过程,图12是依照本发明的用于搜索处理器电路的一个二进制数据分布树的第二个实施方案,图13是依照本发明的用于搜索处理器电路的一个二进制数据分布树的第三个实施方案,图14是本发明中所用的结果选择器的原理,图15本发明中采用的利用结果选择器聚集处理电路的结果的原理。
图16是依照本发明的用于搜索处理器电路的一个二进制数据分布树的第四个实施方案,图17是依照本发明的用于搜索处理器电路的一个二进制数据分布树的第五个实施方案,图18是为了在本发明中的比较之后,如何针对一定数量的字符维持一个正的比较结果的原理,图19是依照本发明如何进行模式比较的基本操作原理,图20是在本发明中如何利用每个文件的标识管理不同文件的原理,图21是在本发明中如何限制一个匹配中的选中数量的原理,图22概要说明一个同时处理几个查询的数据分布树,其中叶节点包括多个处理电路。
图23是依照本发明如何在查询处理器电路的一个数据分布树中实现选中数量简化的原理,
图24是依照本发明的处理电路中的一个比较器单元的实施方案,图25是依照本发明的处理电路中的一个D触发器的实施方案,图26是依照本发明的处理电路中的一个等待时间单元的实施方案,图27是依照本发明的搜索处理器电路中的一个文件管理单元的实施方案,图28是依照本发明的搜索处理器电路中的一个查询表的实施方案,图29是依照本发明顺序控制单元如何与处理电路一同使用的操作原理,图30是依照本发明的处理电路中的一个顺序控制单元的实施方案,图31是依照本发明如何利用搜索处理器电路的结果选择器来比较字符串的原理,图32是依照本发明的处理电路中的一个结果选择器的实施方案,图33是依照本发明的处理电路的一个实施方案。
图34是图33中处理电路输入和输出的模块图,图35是依照本发明的搜索处理器电路的一个实施方案,实现为一个具有八个处理电路的数据树的形式的多处理器单元。
图36是依照本发明的一个用于搜索处理器电路中的选中管理单元,图37是利用图27中所示的文件管理单元和图36中的选中管理单元来实现的图36中的搜索处理器电路,和图38是一个包括一个比较器单元和一个顺序控制器单元的核心处理器。
通过Verulog编码来对独立的单元和电路的做进一步解释,分别在附录的各个表A1-A13中给出。-如同该技术领域的熟练人员将会了解到的,IEEE的标准1364-1995(“基于Verilog硬件描述语言的标准描述语言”)对Verilog进行了详细说明。
现在将给出依照本发明的搜索处理器电路的详细讨论。如图1在总体上给出搜索处理器电路的运行情况。一个数据流通过电路移动,在每一步中,当前电路中的数据与其它电路中的某些其它模式进行比较。该模式被编码为一个位串,被写入到电路。搜索处理器电路的基本单元将被假定为一个字节,通常该字节将代表一个字符。然而,这一点并不是非常重要的,可以很容易地更改。
依照本发明,一个搜索处理器电路通过大量的比较器单元形式的核心处理器来构建。基本比较器单元示于图2中。图中寄存器X仅包含当前被移动到该比较器中的字节x,寄存器A包含一个将与字节x比较的字节a。从图2中可以明显看出,四个比较是同时进行的,即x=a,x≥a,x≠a,x≤a,从比较器单元的输出上得到结果。通过一个核心处理器,即图2中所示的比较器单元的互联,将可能比较或匹配简单的字符模式。例如,如图3中连接的单元将匹配字符串“abc”,即一个“a”,直接跟着一个“b”,再直接跟着一个“c”。然而,也要注重比较一个包含一个“a”接着一个“b”,再立即跟着一个“c”的模式。在下面将写成模式“ab+c”。可以更改图3中的比较器单元,使得能够通过提供一个一位存储器来操作,其中的位被赋值为与“b”匹配的元素,表明在对最后一次移动前是否发现“b”。而且,需要使用某种类型的顺序控制,这样如果下一个和后续的比较器也具有一个匹配的话,比较器单元将仅表示一个匹配。这表明从最后一个比较器中获取一个最终结果。在这种连接中,可以了解到,提供比较器单元,即核心处理器单元,这样一个字符开始移入的单元被表示为“第一个”,这意味着该单元包含模式的最后一个字符,而“最后一个”单元包含模式的第一个字符。
可以参考图4a-e,通过下面的例子来说明一个循环模式的匹配是如何进行的。
图4a-一个“a”被移动到第一个比较器单元中。没有比较器显示出一个匹配。
图4b-一个“b”被移入,仍然没有匹配。
图4c-另一个“b”被移入,最后两个单元具有一个匹配,而第一个单元没有匹配。由于最后两个单元具有一个匹配,这就要求单元要记住这一匹配必须维持到中间单元有一个匹配为止,即使最后的单元没有匹配。
图4d-几个“b”被移入,维持图4c所述的匹配。如果除了“b”以外的另一字符也被移入到中间的单元,匹配应该都已被清除。
图4e-一个“c”被移入第一个单元,所有三个单元现在都被设定为显示出一个匹配。目前发现了一个“ab+c”形式的模式。
如果该方法被用于重复包含多于一个单字符的模式,则存储器必须与一组进行模式匹配的比较器单元相连接。这将在下面描述。
为了使一种上面描述的方法能够匹配长于一个单字节模式的重复出现,例如长度为n,必须记录下n个可能的起始点中的每一个是否发现一个匹配。这可以通过连接n个触发器并在同新字节移入到单元时将存储器位移入触发器来实现。因而,最后的触发器的输出将表明是否在先前n个位置出现了一个匹配。图5显示了两字符模式匹配的一个例子。图中E[i]’是实际的比较结果,E[i-1]是下一个用于实现一个顺序控制的比较器单元的结果,而E[i]是新的结果,其中如果设定信号mi,则允许重复的匹配比较。信号sc表明是否应该完全使用顺序控制。如果不设定sc,将不会进行多个模式的匹配。如果可能改变要重复的模式的长度,可以采用一个类似图6中所示的方案。这里,一个多路复用器用来选择第i个触发器之后的输出,其中i是要匹配的模式的长度。然而,该方法的使用不是必须的,将在下面描述。
图7所示的是一个单元,来执行实现模式的循环出现的匹配所需的顺序控制。该单元应该与一组比较单元和所需数量的D触发器一同放置。多路复用器被用于决定是否允许模式的多个发生。输入和输出可以描述如下res[i]’ res[i]’信号是与可重复模式比较的结果。sc sc信号确定顺序控制是否将如下部分所描述的那样使用。
如果置位sc,则当下一个单元也有一个正的结果时,该单元仅给出一个正的结果。如果不置位sc,则该单元的结果是独立于其它的单元,将不允许循环的匹配比较。res[i-1]信号res[i-1]获取下一个单元的结果,用来实现顺序控制。ffout[i] 信号ffout[i]获取最后一个触发器的输出,并由此传递存储器位。ffin 信号ffin将作为第一个触发器的输入而给出,由此传递存储器位。res[i] 信号res[i]给出单元的新的结果。如果不用顺序控制且不置位sc,则该信号将等于res[i]’,否则,如果res[i-]为真,且res[i]’为真,或者,如果允许循环模式,如果ffout[i]被置位,则置位该信号。ffout[i+1]ffout[i+1]输入给出前面元件的触发器的输出。这样可以把用于不同长度的用于循环模式匹配的比较单元连接起来。
图8中,一同显示了顺序控制单元与图2中的比较器单元,允许通过比较器单元匹配的字符的循环。这里用一个单独的D触发器来代表存储器,这样如果下面的条件为真,该D触发器被置位●允许由这些单元匹配的模式的循环发生。●该单元和后面的单元有一个同时的匹配。●当前面的条件为真后,所有移入该单元的字节都是匹配的。
为此,必须用允许匹配模式的多次发生的单元输出来表明该单元和前面的一个单元的结果。为了使该功能通用化,如前面所述,顺序控制通常与多模式匹配一同使用。换句话说,如果前面的单元仅给出一个正的结果,则该单元也仅给出一个正的结果。
除了如前面部分所描述的匹配和循环模式,还应重视匹配那些其中模式对是可选择的字符串。这种情况会发生在一个模拟方式中,可以通过下面的例子参照图9a-c来描述。图9a -一个“a”被移入第一个单元。没有一个单元具有一个匹配。图9b -一个“c”被移入在第一个单元上并有一个匹配。中间的单元将记录下这一情况。图9c -字符被右移,此时在最后的一个单元上有一个匹配。由于在一个字符之前在中间的单元上也有一个匹配,单元此时具有一个匹配的字符串“ac”。
为此,顺序控制必须按照重复模式匹配时的情况的相反方向作用。
下面将描述用于分配到比较器单元的一个树结构。采用一个图10所示的一个作为一个分布树的完整的平衡二进制树。在树3的每个内部节点上,一个多路复用器确定两个子树是并行接收相同的数据元素,还是顺序地接收这些数据元素。图11显示了图10中的二进制数据分布树的一个简单的实现过程。
如上所述,现在可以另外观察发生的循环和跳跃模式的匹配比较。图8所示的处理电路被用来产生图11的树状结构,循环的和跳跃的模式将在几个层上进行匹配比较。为了简化说明,假设仅允许用于个别的字符或由八个处理电路组成的整个树。
对于该树,现在基本上有六个不同的运行状态●不使用顺序控制-八个处理电路的每一个的结果都是独立的。●采用简单的顺序控制-仅有处理电路0的结果将被使用,仅当八个比较器单元都有匹配时,该结果才会为正。●对于一个或几个比较器单元,允许循环匹配。●对于一个或几个比较器单元,允许跳跃匹配。●对于整个树,允许循环匹配。●对于整个树,允许跳跃匹配。
上述各点中的第一点通过图8所示的处理电路来处理,第四点通过一个用于跳跃模式的模拟元件来处理。然而最后两点要求另一个顺序控制单元用于整个树,如图7所示。从该图中可以看出,对于这一单元,必须有正确数量的触发器。将使用的触发器的数量必须与将被重复的模式中的字符数相等,但该数目可以是1—8的不同的数,取决于定义树的多路复用器的配置。一个类似于图6中的一个方案的解决方案是很显然的,但这将使得电路的规划更复杂、更容易出错,因为将做必要重复的字符的数量被设定两次,一次是在树的定义中,一次是在选择正确的触发器的结果的多路复用器中。幸好,可以通过使用树中处理电路中已有的触发器来获得一个更好的解决。由于在任何给定的时间里树中字符的数量通过数据流给出,用于数据分布的多路复用器也可以用来通过正确数量的触发器发送存储器位。该方法的一个实现过程示于图12中,由于相同的触发器用于两个可能层面上的循环,模式可以同时在一个层面上重复。应该注意到,任何情况下使用该方法,同时在几个层面上的循环模式都将是不可能的,因为可重复字符串的长度将不同。另一个复杂之处是为了实现顺序控制,每个处理电路需要前面的比较器单元的结果,这将在后面说明。
现在可以扩展树状结构。如图13所示,使用总共32个核心处理器或比较器单元,允许在一个单一的处理电路上、一个八个处理电路组上或整个树上的循环。-相同的推理也适用于模式的跳跃。
前面部分基本上描述的是收集一个数据聚合树的结果的两个实用方式。最普通的方法是使用另一个二进制树,其中在每个内部节点上对结果进行组合。但是,这种方法具有许多缺点,因为这样不可能进行某些操作,如要求一定数量的处理电路要有匹配等。如果处理电路的数量相对很小,将可能使用一个查询表LUT。然而,当允许重复匹配时,这将是有问题的,因为匹配不是针对树的一部分而定义的。这两种方法将在下面的部分说明,然后讨论其优缺点。首先将描述如何利用一个二进制树来聚集结果。
给定两个处理电路的结果,一个简单的组合该结果的方法是运行一个与和或的逻辑操作。这种方法还有一个优点,能够仅选择结果中的一个并忽略其它结果。图14中显示了一个执行该操作的单元,接下来,该单元将被表示位一个选择器。现在这样的单元可以被组合在一个二进制树中,提供一组处理电路的一个单一的结果,如图15所示。也可以使用一个二进制树,用来按字母或数字顺序比较字符串,将在下面对其进行描述。现在可以处理上面所描述的问题,即获取一个字符在被当前的处理电路处理前后的比较结果。首先,在给定的时间,仅是之前和之后的结果是必须的,因为重复的和跳跃的模式匹配不能同时进行。这就意味着,由于使用了顺序控制,结果聚集树可以这样配置,使其对于任意查看不同字符的任意的处理电路既能选择右边也能选择左边的结果。对于任意n个单元的子树,可以发现结果在结果组合树中上升了n个层面。其次,如果几个单元查看同一个字符,它们的前面和后面的结果也将是相同的。可以通过使用相同的用于控制数据流的多路复用器发现这些结果,这样一个结果仅传递到查看同一字符的邻近单元。
图16显示的是如何利用这种方法完成该实施方案。重要的是注意现在同一组多路复用器被用于三个不同的目的,即分配数据、通过正确数量的触发器发送存储器位和用于提供之前和之后的字符比较结果。
组合不同处理电路的一个结果的一种简单方法是利用一个查询表(逻辑单元表)。这样,可能给不同的处理电路指定不同的要求,包括记录匹配的数目,只要使用一个合理的小型树,查询表LUT的规模就不会太大。利用八个比较单元,可以设定28=256位,而且将便于管理。图17给出具有LUT的数据分布树的一个可能的实现。使用这种方法的主要缺点是模式的循环发生不能被匹配,除非发生在一个单独的处理电路的层面上或针对整个树而言。这是因为利用一个LUT,将不能定义由2n个单元检查的一个字符的任何组合结果,但为了能使序列控制工作,这是必须的。
在某些情况下,需要在一个长时间内维持选中的结果,即当发现了一个匹配时,在实际的匹配之后,将针对一定数量的字符维持正的结果。这一操作可以被用来进行搜索,其中在彼此之间的一定距离内将发现几个模式的匹配。这一操作的一个简单的实现过程示于图18中。图中,某一数字值n被存储到一个寄存器中,当发现一个匹配时,该值被移入计数器。这样,最后的结果被维持为一个正值,直到计数器达到0,并且任意的匹配将有n个字符的等待时间。这一等待时间被称为选中等待时间。
基于上述说明,很明显,为了聚集结果使用了树和LUT,既有优点也有缺陷。树的方法使循环模式的的匹配变得简单,但仅允许特定的逻辑功能,而LUT方法允许所有可能的功能,但使得循环模式的匹配变得更加麻烦。
因此,显而易见的解决方案是两个方法都使用,因为这样可以提供用户在各种情况下选择最佳方法的可能性,但是这样带来了附加的开销。另一种可能性是在树的不同部分采用不同的方法。例如,树的方法可以用于低层面,其中重复的模式是最需要的,而一个LUT用于高层面,其中不同模式的选中数量的计数是最需要的,或者在低层面选择两种方法之一,而在高层面仅使用LUT方法。
文本数据通常被划分为非重叠的文件,当在这样的文件上运行搜索时,一般检索跨越几个文件的匹配是不合乎要求的。这样必须用一些这样或那样的方法来避免这种情况。忽略数据分布树,图19说明一个用于模式匹配的搜索处理器电路(“模式匹配芯片”(PWC))的基本操作。图中,每个处理电路应该是仅利用文本中的一个单一字符来工作。此时,文件的分割可以利用图20所示的配置来处理。图中一个放置在数据路径起始处的特定的模式匹配单元搜索一个指示一个新文件开始的标识一个表示这一操作的信号连同数据一起传送给每个处理电路。给定该信号,处理电路可以复位所有可以设定的等待时间。该信号还被进一步传送到结果选择器和聚集结果的查询表LUT上,这样仅当它们出现在相同的文件中时,才得到正的结果。
给定了上面描述的模式匹配能力,还有两个必须要解决的问题。●对于接收系统操作来讲,选中数量将充分受到限制。●必须可能同时处理数据分布树的不同部分的不同查询。
有两个要点,将在下面讨论。
首次讨论限制选中数量的问题。因为用来从模式匹配芯片返回选中到主处理器的设施将可能有一个有限的容量,而且选中通常是成组出现的,必须用这样或那样的方法来限制选中的数量。对于这一问题,有两个显而易见的解决方案●对某一数量的邻近字符,仅报告一个选中结果。●对每个文件,仅报告一个选中结果。
通常的选择是两种方法都使用。图21显示了如何完成这一要求。触发器D记录是否在当前的选中范围内有选中报告,如果报告了所有的选中,则选择多路复用器MUX的第一输入。此外,用一个计数器来记录选中的数目,这样返回该数目而不是实际的选中结果。如果报告每个文件仅有一个选中,则该计数将是具有选中的文件数目。
现在将讨论多查询的管理。如果模式比较芯片(搜索处理器电路)能够同时处理几个查询,则会具有很大的优势。因为对于各单一查询所需的处理电路的数目在很大程度上是不同的,可以进行单独的配置。一个切实可行的方法是使数据分布树的一部分建立一个单独的查询。这种方法的问题是需要返回给接收系统很大数目的结果,对于n个处理电路该数目为2n-1,即对于512个处理电路,可能结果的数目将为2×512-1=1023,一般这一数目被认为是过大的。最简单的限制该数目的方法是为将用于一个单一查询的处理电路的数量设定一个较低的限制。这里一个合理的选择是16,对于512个电路,将给出2.51216-1=63]]>个可能的结果,这是一个可以接受的数目。图22概要显示了这些可能的结果,树的较低层面上的框中包含16个电路(或比较器单元)。当这一方法与前面的部分描述的方法结合使用时,对于每个可能的结果,可能包括一个选中限制单元。然而,因为不可能同时有多于 个的查询,这一电路的数目是足够的。为此,需要用几个选中限制单元取得可能查询数目的结果,因为必须选择这些查询,这样就没有同时进行的查询。图23显示了这一过程是如何实现的,因为图中黑色的可能查询点具有其自己的选中限制单元,而仅有白色的查询点按箭头所示来分配其结果。此外,为了表明所述的结果是否实际代表一个独立的查询,需要为每个可能的查询设定一个位。
现在将给出依照本发明的处理电路的详细说明。处理电路可以被认为是一个搜索处理器的模块,因此被描述为搜索模块。详细的说明将参照独立单元的Verilog编码,这些涉及到的编码在本说明的一个附录的表中给出。
处理电路或搜索处理器电路包括一个时钟和该时钟的Verilog编码,示于附录的表A1中,在任何情况下分别为处理电路的比较器单元和D触发器,或搜索处理器单元的所有比较器单元和D触发器给出时钟信号CLK。这一点是很常见的,因此时钟设备和时钟信号线没有在图中示出。
图25显示的是核心处理器或比较器单元。当然,它与图2中的核心处理器或比较器单元是一致的。寄存器6像前面一样包含当前被移入单元的字节x,寄存器7包含将与字节x比较的字节a。如图25中所见,可以进行四个比较,即x=a,x≥a,x≠a,x≤a。结果送给输出res。此外,信号eq表示x=a,可以用于按字母顺序和数字顺序比较字符串,后面将对此进行更详细说明。实现核心处理器或比较器单元的Verilog编码显示在附录的表A2中,表1通过其输入和输出清楚地说明了比较器单元的接口。表1


图25概要显示了一个D触发器。实现该D触发器的Verilog编码显示于附录的表A3中,表2通过其输入和输出清楚说明了该触发器的接口。表2

图26显示了等待时间单元LAT,用于将一个正的二进制值res_延迟某些个的周期。寄存器9包含等待时间而计数器8用于当记录一个正的结果时进行时间的倒计数。res给出修定的结果信号,而信号_reset将计数器复位为0。实现等待时间单元LAT的Verilog编码显示在附录的表A4中,表3通过其输入和输出清楚说明了该单元的接口。表3

图27显示的是文件管理单元DOC。它是用于使搜索处理器单元记录不同的文件。三个比较器单元或它的一个附加器被设定与一个表示一个新文件的标识相匹配,当出现这一标识时,信号doc被设定为等于0。该图可以稍做修改,因为在一个标识中使用少于三个的字符时,比价器单元或距左边最远的单元将不会对结果产生影响。等待时间将被设定为等于标识的字符数目,即1—3。实现这一单元的Verilog编码显示在附录的表A5中,表4通过其输入和输出清楚说明了该单元的接口。表4

图36显示了具有8个输入的查询表单元LUT。由res给出结果。实现这一单元的Verilog编码显示在附录的表A6中,而表5通过其输入和输出清楚说明了该单元的接口。表5

顺序控制单元SC用于实现下面的三种可能性●要求前面和后面的处理电路或比较器单元在允许当前单元报告一个匹配前报告一个匹配结果。●允许在模式的某些部分缺少的情况下进行模式匹配比较。●允许在模式的某些部分重复的情况下进行模式匹配比较。
顺序控制单元SC与一个处理电路一同放置,该处理电路可以是一个单一的核心处理器或比较器,或一组处理电路及一组触发器。触发器的数目将与通过处理电路匹配的字符数相等。如图29所示。因此一个顺序控制单元SC可以如图30所示来实现。图中三个结果值和当前与前面的触发器的值被用作输入,并输出新的结果值。这样,确定纯粹组合形式的顺序控制单元SC的性能是很简单的。
五种情况的真值表,即无顺序控制、向前顺序控制、向后顺序控制、重复模式匹配和跳跃模式匹配,分别示于表6-10中。表6-无顺序控制

表7-向前顺序控制

表8-向后顺序控制

表9-重复模式匹配

表10-重复模式匹配

即使没有在表中显示,前三种情况中输出ff_out也将被设定为等于前面的允许触发器的值通过系统的局部流动的处理电路的输出。基于附加的真值表,很容易获得图11中所示的符号形式。产生的序列控制单元示于图30中,图中,多路复用器在如表11所示的从右至左和从顶部至底部编号的5个状态中选择。表11符号表达式

附录的表A7显示的是实现顺序控制单元的Verilog编码,而表12通过其输入和输出清楚说明了该单元的接口。


结果选择器RS用于组合前面处理电路的两个结果或其它的结果比较器。支持下面的操作●仅使用第一个结果。●仅使用第二个结果。●对两个结果进行布尔运算“与”。●对两个结果进行布尔运算“或”。●对一组处理电路进行≤运算。●对一组处理电路进行≥运算。
前四个操作可以直接处理,其它的操作比较复杂。图31显示的是一个可以按照字母/数字顺序匹配所有大于1990的字符串的例子。通过选择器RS2开始操作;如果通过最右边的处理单元匹配的,并且是正在被匹配比较的的数字的最左边的数字的字符是大于1的,则结果意味着整个数字是较大的。本例中,它们是相等的,并由其它的处理电路来决定。这样选择器RS2返回相等的结果。选择器RS1也遵循相同的规则。此处第二个选择器RS2返回相等结果,而第一个选择器RS1的返回表明该值较大,这就是RS1的结果。选择器RS3同样工作,返回表明发现了一个大于1990的数字。对于按照字母/数字顺序比较的情况,给出res=eq2res1±eq2res2。
基于上述的特征,实现的结果比较器将如图32所示。多路复用器MUX4在五个操作状态之间选择;选择第一个结果,选择第二个结果和对结果进行与操作,对结果进行或操作和进行字符串比较。
实现该单元的Verilog编码示于附录的表A8中,而表13通过其输入和输出清楚说明了该单元的接口。此处,文件信号与文件管理一同使用,以避免接收与文件边界交叉的结果。表13

依照本发明的处理电路如图33所示。它包括至少一个比较器单元COM、一个等待时间单元LAT、D触发器2、4、一个顺序控制单元SC和一个结果比较器RS。图33所示的是一个具有输入和输出的处理电路的方案。实现该处理电路的Verilog编码示于附录的表A9中,而表14通过其输入和输出清楚说明了该单元的接口。表14



图33显示了一个依照本发明的一个多处理器单元Pn形式的数据树,即一个搜索处理器电路PMC。多处理器单元配置为一个树,其中包括八个处理电路Pn-1、一个顺序控制单元SC、一个等待时间单元LAT和一个逻辑单元表LUT。电路Pn或可以命名为“树8”的数据树与处理电路具有精确相同的接口,这意味着树中的每个处理电路可以用一个这种类型的树来替换,这样该树可以包含任意数目的层面。这也意味着数据树将包括许多嵌套的电路Pn-q,这样如果数据树本身形成最高的层面,即层面Sn,并且q∈{1,2….,n},则下面层面的每个电路Sn-q在上面的层面Sn-q-1上是嵌套的。如果该树是一个规范的树,例如一个二进制树,一个层面上的处理电路Pn-q将递归地映射上面层面Sn-q+1上的处理电路Pn-q+1,在二进制树的情况下具有一个映射因数2。由于一个如介绍所述的常见的搜索问题可以被认为是一个可分区的二进制问题,当然通过一个被称为超二进制的环境,即等级数为4、8、16等,而不是2的一个树来管理这一分区问题是不成问题的。通常一个树具有k=2m的等级数,其中对于超二进制树m是一个大于1的整数,换句话说就是k>2。当然,在一个递归映射中,映射系数为r=k。例如图35中的树可以看作是一个具有两个层面S1、S2的处理器,因为第一个层面包括八个处理电路P1,其中每个电路P1又对应于图33中的处理电路Pn-1,从而每一个仅包含一个核心处理器或一个比较器元件COM。因而核心处理器为该树的叶节点,并形成树的第零层S0,通过树的第零层上的电路P0来实现,而处理电路P1包括一个核心处理单元P0和一个逻辑单元E,由图33中的处理电路的其余的组件来体现。在层面S2上电路与通搜索处理器本身是相同的,因而,除了在层面S1上的八个处理电路P1外,还包括一个逻辑单元E,它包括所述的顺序控制单元SC、一个等待时间单元LAT和一个逻辑单元表LUT。这样图33中所描述的多处理器单元Pn成为一个对称的和平衡的简化的树,因为每个处理电路P1仅包含一个单一的比较器单元。然而,将搜索处理器电路或树8实现为一个等级数为8的规范的不简化的树,然后八个处理电路P1在第一层面上各自包括8个核心处理器或比较单元P0是不成问题的,这样将共有64个。如果该树扩展一个层面并保持其规范性,则第零层面S0会出现512个核心处理器或比较器单元,第一个层面S1具有64个处理电路P1,第二个层面S2具有8个处理电路P2,搜索处理器单元电路将由层面S3上的电路P3组成。实现图35所示的树8的Verilog编码示于附录的表A10中,表15通过其输入和输出清楚说明了搜索处理电路的接口。表15




例如如果分别利用64或512个核心处理器来实现搜索处理器,则搜索处理器单元可以很好地实现为一个具有映射因数为8的规范树形式的嵌套电路,但也能分别直接实现为一个树64或树512。任意情况下的一个具有64个核心处理器的搜索处理器的Verilog编码示于附录的表11中,而一个具有512个核心处理器的搜索处理器的Verilog编码示于附录的表12中。
选中管理单元HIT示于图36中。图中,触发器用来记录是否报告下一个单元。实现该选中管理单元的Verilog编码示于附录的表13中,表16通过其输入和输出清楚说明了搜索处理电路的接口。表16

从图35中可以清楚看出如何在一个多处理器单元Pn形式的搜索处理电路PMC中分别提供文件管理单元DOC和选中管理单元HIT。为清楚起见,在图37中只显示了DOC和HIT以及所处理器单元间的连接,而省去其余的信号线。还可以看出,除了多处理器单元Pn,搜索器电路PMC也包括一个文件管理单元DOC,该文件单元管理器通过一个数据输出分别与多处理器Pn上的顺序的和并行的数据输入相连接,以及通过一个文件输出与多处理器单元Pn的文件输入相连接。而且,搜索处理器电路PMC还包括分别1/2k=2m-1=23-1=4个与处理电路Pn-1上的结果输出和文件输出相连的选中管理单元HIT1-4,每个选中管理单元通过一个结果输出分别与搜索处理器电路的接口中的结果输出相连接。图21还概要显示了一个选中管理单元并讨论了其有关的连接。而且,一个搜索处理器电路中的选中管理单元HIT的设备实现为图23中所示的一个具有树状结构的多处理器电路,结合该图已经说明了选中管理器单元如何被用于报告多个问题的结果。因此这里将不作详述。但是,应注意在图23中仅在黑色的节点中提供选中管理单元,而白色节点按箭头所示来分配其结果。
这样,在图37中所示的两个选中管理单元的输入上分别提供一个多路复用器。
在一个电路芯片上的一个实用的实施方案中,依照本发明,搜索处理器电路PMC最好被实现为一个例如k=23、26或29的超二进制树,因此表现为一个在第零层面上具有平衡简化的超二进制树。这还意味着多处理器单元Pn变成等同于P2,并分别形成一个具有8个处理器单元P1的树8或一个具有64个处理单元P1的树64或一个具有512个处理单元P1的树512,而每个P1又包含一个单一的比较器单元COM。这样,在第零层面上是简化的树。因而除了触发器、多路复用器MUX1、等待时间单元LAT和结果选择器RS,每个处理电路P1中的逻辑单元E也可以仅通过一个单一的顺序控制单元SC来实现。
最后,应该注意依照本发明,搜索处理器电路PMC中的多处理器单元Pn形成一个基于任意等级数任意层数的树状网络的多处理器结构体系的特殊情况,在上面提到的与本专利申请相关的并且优先权为19984746的1998年10月9日的国际专利申请PCT/No99/0308(Halaas等人)中公开了这些内容。这种多处理器结构体系的一个特殊性能是如果该树是一个简化的树,则在树状机构的第零层面上仅提供单一的数据处理器,或者相当于在第一层面上提供处理电路。如果在第零层面S0上该简化是对称的和平衡的,电路是在上面的层面S2,…Sn上通过层面S1上的处理电路P1另外递归产生的。这样的电路可以特别经济地实现,用来解决任意分区等级数的数据处理问题,当然,传统的搜索问题通常是一个二进制的可分区的数据处理问题。
因此,根据Halaas等人的专利,一个核心处理器P0在形式上将对应于图8中的连接,除了适当的处理器,还包括比较器单元COM、一个时间等待单元LAT、一个顺序控制单元SC、所需数量的触发器2、4和逻辑门1、3,如图38所示。当然,对于每个比较器单元COM,必须提供一个顺序控制单元SC,参看图29。因此,在实际中,图33中的处理电路P1包括两个或可能更多个通过相应数量的顺序控制单元SC提供的具有一个逻辑单元E的比较器单元。表17通过电路的输入和输出说明具有一个形式上为适当的核心处理器17的比较器单元COM和一个顺序控制单元SC的电路P0的接口。表17

依照本发明,在实际中,搜索处理器电路PMC被实现为一个集成电路芯片,最好实现成一个超二进制树,其中层面S1处理电路P1仅有一个单一的比较器COM。因而所有的处理(搜索或匹配操作)都是在该层面上进行的。一个实现方案,其中搜索处理器电路Pn=P2,即形式上具有3个层面,形成一个具有512个处理电路P1的超二进制树,进一步提供了一个非常好电路芯片的利用率。附件表A1-时钟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触发器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-时间间隔单元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_)?((-(&L))?L+1L) (((c>0)&&(~(&L)))?c-1c))0;always @(posedge res_)c=(~(&L))?L+1L;always @(negedge res_)c=((c>0)&&(~(&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&res2);assign m2=(L<1)?res3(m1&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&res_;assign m2=res_&res_ip1;assign m3=m1|ff_in;assign m4=ff_in|res_ip1;assign m5=res_&m4;assign res=(S==0)?res_((D==0)?((M==0)?m2m5)((M==0)?m1m3));assign ff_out=((S==1)&&(M==1))?((D==0)?m5res_im1)ff_im1;endmodule//SC表A8-结果比较器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&res2;assign m4=res1|res2;assign m5=res1&eq2;assign m6=m1&res2;assign m7=m5|m6;assign m8=eq1&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&mdoc2;assign doc=m11;assign res=m11&m9;assign eq=m11&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&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&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&and_out;assign and_out=&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&and_out;assign and_out=&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&and_out;assign and_out=&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&(~res_)}|m;assign res=res_&dout;endmodule//HitMan
权利要求
1.一个处理电路(P1),用于在高速数据流中识别和比较复杂模式,特别是用于搜索和获取存储在结构化或非结构化的数据库中的数据的搜索引擎中,其中,处理电路(P1)形成一个这种处理电路的网络的一个节点,其特征是处理电路(P1)包括一个接口,该接口具有分别是处理电路(P1)的配置和操作参数的数据的输入和输出,针对一个给定的处理任务,配置参数是通过接口的未指明的或专用的输入一次性全部提供给处理电路(P1),和通过执行给定处理任务来处理的运行数据是通过特定的接口输入和输出连续输入到处理电路或从处理电路输出,至少一个比较器单元(COM)形式的核心处理器(P0),比较器单元(COM)适用于比较两个数据字,和一个与比较器单元连接的逻辑单元(E),逻辑单元包括一个连接下列接口输入的多路复用器(MUX1)一个顺序数据输入,一个顺序文件输入,一个顺序触发器输入,一个前面的处理电路的顺序结果输入,一个后面处理电路的顺序结果输入,一个并行数据输入,一个并行文件输入,一个并行触发器输入,一个前面的处理电路的并行结果输入和一个后面处理电路的并行结果输入;逻辑单元还与下列的接口输出连接一个所选数据值的输出,一个所选文件值的输出,一个所选触发器值的输出,一个所选前面的处理电路结果的输出和一个所选文件值的输出,一个所选触发器值的输出,一个所选前面电路结果的输出,和一个所选后面处理电路结果的输出;一个第一D触发器(2);一个用于将一个正二进制值延迟一个给定数目时间单位的等待时间单元(LAT);一个第二D触发器(4);一个用于监视和控制比较器单元(COM)的比较操作的顺序控制单元(SC),和一个用于合并两个其它处理电路或其它结果选择器的结果值的结果选择器;比较器单元COM)连接一个多路复用器(MUX1)上的所选数据值的输出和接口中的一个数据输出,进一步还有一个与第一与门(1)连接的结果输出,一个与第二与门(3)连接的相等单元,第一个D触发器连接多路复用器(MUX1)上一个所选文件值的输出,一个复位输出通过一根复位线(5)分别连接第一个与门(1)的一个输入,第二个与门(3)的一个输入,等待时间单元(LAT)的一个输入,以及接口中的一个文件输入,第二个与门(3)在接口中具有一个相等输出,时间等待单元连接第一个与门(1)的输出和顺序控制单元(SC)的结果输入,第二个D触发器(4)连接第一个D触发器(2)的复位输出和顺序控制单元(SC)上的一个触发器输出和输入,以及连接一个接口中的触发器的输出,顺序控制单元(SC)连接一个所选触发器值的输出和一个所选的多路复用器(MUX1)上前面处理电路结果输出,和连接一个前面处理电路的结果输入和接口中的结果输出,结果选择器(RS)分别连接接口中的第一个结果输入,第一个文件输入,第一个相等输入,第二个结果输入,第二个文件输入,和第二个相等输入,并分别连接接口中的一个结果输出,一个文件输出和一个相等输出。
2.依照权利要求1的一个处理电路(P1),其特征在于根据下面的列表通过配置参数的输入和操作参数的输入和输出来说明接口,表中第一列给出参数的命名,第二列是分别是运行的和配置的参数类型,第三列表示参数是输入的还是输出的,第四列是用位数表示的输入或输出参数的宽度,第五列是所讨论的参数的简短说明
3.依照权利要求1的一个处理电路(P1),其特征在于比较器单元(COM)包括一个第一寄存器(6),在所有情况下包含以数据字x形式的输入数据,分别连接一个数据输入和一个数据输出,一个第二寄存器(7),包括一个与第一寄存器中的数据字x进行比较的数据字a,以及一个或多个逻辑门和一个多路复用器(MUX2),连接到寄存器(6、7)用于执行一个比较操作,一个包括比较器单元结果输出的多路复用器(MUX2)输出。
4.依照权利要求3的一个处理电路(P1),其特征在于根据下面的列表通过配置参数的输入和操作参数的输入和输出来说明比较器单元(COM)的接口,表中第一列给出参数的命名,第二列是分别是运行的和配置的参数类型,第三列表示参数是输入的还是输出的,第四列是用位数表示的输入或输出参数的宽度,第五列是所讨论的参数的简短说明
5.依照权利要求4的一个处理电路(P1),其特征在于比较操作是操作符≤、≥、≠和=中的一种,通过输入的配置参数给出,二进制0表示≤,二进制1表示≥,二进制2表示≠,og二进制3表示=。
6.依照权利要求1的一个处理电路(P1),其特征在于等待时间单元(LAT)包括一个计数器(8),分别通过一个第一输入与第二与门(3)相连,通过一个第二输入与复位线(5)相连,计数器(8)连接一个等待时间寄存器(9),该寄存器(9)包含一个配置等待时间参数,并具有一个输出,即等待时间单元的结果输出。
7.依照权利要求6的一个处理电路(P1),其特征在于根据下面的列表通过配置参数的输入和操作参数的输入和输出来说明等待时间单元(LAT)的接口,表中第一列给出参数的命名,第二列是分别是运行的和配置的参数类型,第三列表示参数是输入的还是输出的,第四列是用位数表示的输入或输出参数的宽度,第五列是所讨论的参数的简短说明
8.依照权利要求7的一个处理电路(P1),其特征在于L=0表示没有等待时间,L=t表示等待时间为t个时间单元,L=t=2W-1表示不定的等待时间。
9.依照权利要求1的一个处理电路(P1),其特征在于顺序控制单元(SC)包括一个第一与门(10),与前面一个处理电路的一个结果输入和等待时间单元(LAT)的一个结果输出相连接,一个第一或门(11),与第一与门(10)的一个输出和第二D触发器(4)的一个输出相连接,一个第二与门(12),与等待时间单元(LAT)的结果输出和后面一个处理电路的结果输入相连接,一个第二或门(13)与后面一个处理电路的结果输入和第二D触发器(4)的输出相连接,一个第三与门(14)与时间等待单元(LAT)的结果输出和或门(13)的一个输出相连接,一个多路复用器(MUX3),分别与等待时间单元(LAT)的结果输入、每个与门(10、12、14)和第一或门(11)的一个输出、一个前面处理电路的结果输入和后面一个处理电路的触发器输出相连接,顺序控制单元(SC)的一个输出形成处理电路(P1)的结果输出。
10.依照权利要求9的一个处理电路(P1),其特征在于根据下面的列表通过配置参数的输入和操作参数的输入和输出来说明顺序控制单元(SC)的接口,表中第一列给出参数的命名,第二列是分别是运行的和配置的参数类型,第三列表示参数是输入的还是输出的,第四列是用位数表示的输入或输出参数的宽度,第五列是所讨论的参数的简短说明
11.依照权利要求10的一个处理电路(P1),其特征在于顺序控制单元(SC)实现下列一个或多个顺序控制操作-允许比较器单元(COM)输出一个比较结果,取决于前面或后面单元输出一个比较结果,-允许部分残缺的模式的比较,-允许部分重复的模式的比较。
12.依照权利要求11的一个处理电路(P1),其特征在于如果将运行一个顺序控制,则配置参数S是一个二进制1的输入,对于先前顺序控制和向后顺序控制,配置参数D分别是一个二进制数0或1的输入,如果允许进行部分残缺模式或重复模式的比较,则配置参数MM为一个二进制1的输入。
13.依照权利要求1的一个处理电路(P1),其特征在于结果选择器(RS)包括一个第一与门(15),与第一相等输入和第二相等输入相连接,一个第二与门(16),与第一结果输入和第二结果输入相连接,一个第三与门(17),与第一结果输入和第二相等输入相连接,一个非门(18),与第二相等输入相连接,一个第四与门(19),与第二结果输入和非门(18)输出相连接,一个第一或门(20),与第一和第二相等输入相连接,一个第二或门(21),分别与第一和第二相等输入相连接,一个第三或门(22),分别与第三和第四与门(17;19)的输出相连接,一个多路复用器(MUX4),分别与第一结果输入、第二结果输入、第一相等输入、第二相等输入、第一和第二与门(15;16)的输出、以及第一、第二和第三或门(20;21;22)的输出相连接,一个第五与门(23),分别与接口中的第一和第二文件输入和文件输出相连接,一个第六与门(24),分别与第五与门(23)的输出、多路复用器(MUX4)的一个第一输出和接口中的结果输出相连接,和一个第七与门(25),分别与第五与门(23)和多路复用器(MUX4)的一个第二输出,以及接口中的相等输出相连接。
14.依照权利要求13的一个处理电路(P1),其特征在于根据下面的列表通过配置参数的输入和操作参数的输入和输出来说明结果比较器(RS)的接口,表中第一列给出参数的命名,第二列是分别是运行的和配置的参数类型,第三列表示参数是输入的还是输出的,第四列是用位数表示的输入或输出参数的宽度,第五列是所讨论的参数的简短说明
15.依照权利要求14的一个处理电路(P1),其特征在于结果选择器(RS)实现下面的一个或多个操作-仅使用第一个结果(res1)-仅使用第二个结果(res2)-对第一和第二结果进行布尔运算“与”-对第一和第二结果进行布尔运算“或”-对一组处理电路(P1)进行≥运算-对一组处理电路(P1)进行≤运算。
16.依照权利要求15的一个处理电路(P1),其特征在于结果比较器(RS)配置参数PM被当作一个为结果比较器执行的每个操作指定的3位二进制值而输入。
17.一个搜索处理器电路(PMC),包括一个具有树状结构的多处理器单元Pn,用于在高速数据流中识别和比较复杂模式,特别是用于查找和索引存储在结构化或非结构化数据库中的数据的搜索引擎中,其中多处理器单元Pn包括依照权利要求1的处理电路P1,并且多处理器单元Pn形成一个体现为一个具有n+1个层S0,S1….Sn和等级数k=2m的二进制或超二进制树的电路,其中m是一个大于或等于1的正整数,一个超二进制树通过k>2来定义,其特征是在Sn层上提供多处理器单元Pn,形成树的一个根节点,它包括一个接口Ipn和一个逻辑单元E,最近的下面一层Sn-1包括2m个电路Pn-1,在多处理器单元Pn中是嵌套的并由此形成子节点,每个电路Pn-1具有唯一的接口Ipn-1并包括一个相应的逻辑单元E,下面层Sn-q(q∈{1,2,….n-1})上的多处理器单元Pn通常包括2mq个具有接口Ipn-q的电路Pn-q,相应的逻辑单元(E),在下面层Sn-q+1上的2m(q-1)个电路Pn-q中是嵌套提供的,该层上每个电路Pn-q-1包括2m个电路Pn-q,针对q=n=S0的多处理器单元Pn定义的n-q=0的第零层包括2m(n-1)至2mn个单元核心处理器P0,形成层S1的2m(n-1)个处理电路P1中的比较器单元(COM),每个处理电路P1包括1-2m个比较器单元(COM),每个单元具有接口Ip1和相应的逻辑单元(E),通常层S1,S2…Sn上所有的电路P1,P2…Pn具有唯一的接口I,这样有Ip1=Ip2=…Ipn=I,每个逻辑单元(E)包括一个结果选择器或一个用于收集由层S1上的处理电路P1执行的搜索操作或比较操作结果的查询表单元(LUT)。
18.依照权利要求17的搜索处理器电路(PMC),其特征在于层S1上的每个处理电路包括2m个比较器单元(COM),这样多处理器单元Pn形成一个未还原的二进制或超二进制树,一个处理电路P1映射一个上层上的具有一个因数r=2m的电路P2,通常对于q∈{1,2,….n-1},层Sn-q一个电路Pn-q映射一个上层Sn-q+1上的具有一个因数r=2m的电路Pn-q+1,这样在所有情况下配置电路Pn的二进制或超二进制树包括一个从层S1开始的递归产生的二进制或超二进制树。
19.一个依照权利要求17的搜索处理器电路(PMC),其特征在于根据下面的列表通过配置参数的输入和操作参数的输入和输出来说明多处理器Pn的接口Ipn和Pn包含的下面层面Sn-q上每个电路Pn-q的接口Ipn-q,表中第一列给出参数的命名,第二列是分别是运行的和配置的参数类型,第三列表示参数是输入的还是输出的,第四列是用位数表示的输入或输出参数的宽度,第五列是所讨论的参数的简短说明
20.依照权利要求17的搜索处理器电路(PMC),其中逻辑单元(E)包括一个等待时间单元(LAT)和一个顺序控制单元(SC),以及一个查询表单元(LUT),逻辑单元E进一步包括一个第一与门(26)、一个第一多路复用器(MUX5)、一个第二与门(27)和一个第二多路复用器(MUX6),查询表单元(LUT)与下面一层的每个处理电路Pn-1的一个结果输出相连接,第一与门(26)与每个上述电路Pn-1的一个文件输出相连接,第二与门(27)与第一与门(26)的输出和查询表单元(LUT)的输出相连接,第一多路复用器(MUX5)与第二与门(27)的输出和上述电路Pn-1中的最后一个电路的结果输出相连接,等待时间单元与第一个与门(26)的输出相连接,顺序控制器单元(SC)与等待时间单元(LAT)的一个输出、上述电路Pn-1中的第一个电路的一个结果输出和一个触发器输出、逻辑单元的一个结果输出和上述电路Pn-1中的最后一个电路的一个触发器输出相连接,第二多路复用器(MUX6)与顺序控制单元(SC)的一个触发器输出相连接,并分别与逻辑单元(E)的一个第一和第二触发器输入相连接,进一步分别通过第一和第二触发器输出与上述电路Pn-1中的第一个电路相连接。
21.一个依照权利要求20的搜索处理器电路(PMC),其特征在于搜索处理器电路(PMC)包括一个文件管理单元(DOC),通过一个数据输出分别与多处理器Pn上的顺序的和平行的数据输入相连接,通过一个文件输出与多处理器单元Pn上的顺序文件输入相连接。
22.一个依照权利要求20的搜索处理器电路(PMC),其特征在于搜索处理器电路(PMC)包括1/2k=2m-1选中管理单元(HIT),分别与电路Pn-1的结果输出和文件输出相连接,每个选中管理单元(HIT)通过一个结果输入分别与多处理器单元Pn接口的结果输出相连接。
全文摘要
一个用来在高速数据流中识别和比较一个复杂模式的处理电路P
文档编号G06F17/30GK1333895SQ99815623
公开日2002年1月30日 申请日期1999年11月12日 优先权日1998年11月13日
发明者B·斯文根, A·哈拉尔斯, O·R·伯克兰 申请人:快速检索及传递公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1