利用专用元件实施有限状态的制造方法

文档序号:6494655阅读:211来源:国知局
利用专用元件实施有限状态的制造方法
【专利摘要】本发明描述用于编译程序的设备、系统和方法。一种此类编译程序产生对应于包含通用元件和专用元件的一组元件的机器码。所述编译程序识别有关系连接的运算符的布置中的对应于专用元件的一部分。所述编译程序还确定所述部分是否满足将被映射到所述专用元件的条件。所述编译程序还将所述布置转换成包括多个状态的自动机,其中如果所述部分满足所述条件,那么使用对应于所述专用元件的专用状态来转换所述部分。所述编译程序还将所述自动机转换成机器码。本发明揭示额外设备、系统和方法。
【专利说明】利用专用元件实施有限状态机
[0001]优先权主张
[0002]本专利申请案主张2011年I月25日申请的标题为“利用专用元件实施有限状态机(UTILIZING SPECIAL PURPOSE ELEMENTS TO IMPLEMENT A FSM) ”的第 61/436,022 号美国临时专利申请案的优先权权益,所述美国临时专利申请案的全文特此以引用方式并入本文中。
【技术领域】【背景技术】
[0003]有限状态机(FSM)(也被称作有限状态自动机、自动机或简称为状态机)为状态、状态之间的转变和动作的表示。有限状态机可用以设计数字逻辑、计算机程序或平行机的映像。有限状态机为由有限数目个状态、那些状态之间的转变和输出组成的行为模型。有限状态机可表示为一图,其中所述图的顶点对应于FSM的状态,且所述图的边对应于归因于到所述有限状态机的一个或一个以上输入而发生的状态之间的转变。有限状态机还可具有概率转变、模糊状态或其它异事。有限状态机可充当具有输入特征和任选的输出特征的有限内部存储器。具有输出的有限状态机可被称作有限状态转换器。
[0004]有限状态机的应用包含电子设计自动化、通信协议设计、生物学和人工智能研究,以及用以描述自然语言的文法的语言学。

【发明内容】
【专利附图】

【附图说明】
[0005]图1说明根据本发明的各种实施例的确定性有限状态机的实例。
[0006]图2说明根据本发明的各种实施例的非确定性有限状态机的实例。
[0007]图3说明根据本发明的各种实施例的供编译程序用以将源码转换成机器码的方法的实例。
[0008]图4说明根据本发明的各种实施例的用于将语法树转换成自动机的方法。
[0009]图5说明根据本发明的各种实施例的平行机的实例。
[0010]图6说明根据本发明的各种实施例的实施为有限状态机引擎的图5的平行机的实例。
[0011]图7说明根据本发明的各种实施例的图6的有限状态机引擎的方框的实例。
[0012]图8说明根据本发明的各种实施例的图7的方框的行的实例。
[0013]图9说明根据本发明的各种实施例的图8的行的成对群组的实例。
[0014]图10说明根据本发明的各种实施例的供编译程序用以将源码转换成经配置以对图5的平行机编程的映像的方法的实例。
[0015]图11说明根据本发明的各种实施例的具有专用计数器状态的实例自动机。[0016]图12说明根据本发明的各种实施例的具有专用计数器状态的另一实例自动机。
[0017]图13A和13B说明根据本发明的各种实施例的实例自动机。
[0018]图14说明根据本发明的各种实施例的具有不满足无前缀条件的量化的正规表达式的实例自动机。
[0019]图15说明根据本发明的各种实施例的具有冯诺依曼(Von Nuemann)架构的计算机的实例。
【具体实施方式】
[0020]以下描述和图式充分地说明特定实施例以使所属领域的技术人员能够实践所述实施例。其它实施例可并有结构、逻辑、电、过程和其它改变。一些实施例的部分和特征可包含在其它实施例的部分和特征中或可替代其它实施例的部分和特征。权利要求书中所陈述的实施例涵盖那些权利要求的所有可用等效物。
[0021]本文献尤其描述将源码转换成有限状态机的机器码实施方案的编译程序。机器码可对应于目标装置,因为所述机器码经配置以在所述目标装置上实施通过源码描述的功能。在一实例中,所述目标装置为平行机,且机器码包括用于所述平行机的映像。在另一实例中,所述目标装置包括具有冯诺依曼架构的计算机,且机器码包括供所述计算机中的处理器执行的指令。
[0022]在任何情况下,编译程序均可将源码编译成机器码,所述机器码实施体现通过所述源码描述的功能的有限状态机。在编译源码的过程中,所述编译程序将源码转换成自动机。使用所述自动机,所述编译程序可识别并组合源码中的冗余,以便优化通过机器码实施的所得有限状态机。另外,所述编译程序可识别所述自动机的部分并将所述部分映射到对应于目标装置的元件。当目标装置为平行机时,所述元件可包括所述平行机的硬件元件。当目标装置为具有冯诺依曼架构的计算机时,所述元件可包括供处理器执行的指令。在映射期间,可将有限状态机的某些部分映射到特定(例如,专用)元件以便(例如)改进所得机器码的性能。
[0023]图1说明实例有限状态机(FSM) 100。有限状态机100对应于用于将容器中的水位维持在1/4与3/4满之间的方法。在状态102处,激活泵以减少容器中的水位。当水位掉落到1/4满以下时,FSM100转变到状态104,在状态104下,对泵去活。在处于状态104时,当水位超过3/4满时,FSM100转变回到状态104,在状态104下,重新激活泵。到FSM100的输入为容器中的水位,且输出为泵开/关信号。
[0024]FSM可分成两类:确定性和非确定性的。确定性FSM在给定时间具有单一执行路径,而非确定性FSM具有多个同时的执行路径。具有N个状态的非确定性FSM通常可转换成具有最坏情况2到N个状态的确定性FSM。然而,从非确定性到确定性FSM的此指数状态展开通常使非确定性FSM成为具有有限机器资源和时间的最实际的实施方案。
[0025]FSM100为确定性FSM的实例,且此确定性FSM100可为较大非确定性FSM的一部分。举例来说,图2说明有一部分是由确定性FSM100组成的非确定性FSM200。FSM200将管压力的监视添加到水位维持FSM100。在FSM200中,在泵运作时监视管压力,且如果管压力在固定时间周期内过负荷,那么停止泵。在FSM200中,当管在状态102下激活时管压力过负荷时,FSM200转变到状态106,在状态106下开启计时器。另外,当管过负荷时,状态102转变到自身以使泵维持于“开”状态。因此,在FSM200中的此位置处,状态102( “泵开”状态)和状态106 ( “计时器开”状态)两者同时在作用中。由于状态102和106可同时在作用中,因此存在多个执行路径,且FSM200因此为非确定性的。当管中的压力不再过负荷时,FSM200从状态106转变到状态102。而且,当计时器期满时,FSM200从状态102和状态106两者转变到状态104以将泵设定为“关”状态。
[0026]图3说明实例编译程序的流程图300。所述编译程序采用源码作为输入且产生机器码以在目标装置上实施通过源码描述的功能。在一个实例中,所述目标装置包括如下文关于图5到9中所描述的平行机。所述平行机包含可设定为多个状态中的一者的多个可编程元件。用于平行机的机器码包括用于设定所述可编程元件中的一者或一者以上的状态的映像。在另一实例中,所述目标装置为具有冯诺依曼架构的计算机。所述计算机包含耦合到一个或一个以上存储器装置的一个或一个以上处理器,所述一个或一个以上存储器装置上具有供所述一个或一个以上处理器执行的软件。用于冯诺依曼架构的机器码包括供所述一个或一个以上处理器执行的指令。在下文关于图15来描述具有冯诺依曼架构的实例计算机。在任何情况下,所述编译程序通过将自动机用作中间转换来产生机器码。所述编译程序使用自动机以便尤其优化所得FSM且又优化所述机器码。
[0027]在实例中,源码描述用于识别一群符号内的符号的样式的搜索字符串。为了描述所述搜索字符串,所述源码可包含多个正规表达式(regex)。正规表达式可为用于描述符号搜索样式的字符串。正规表达式广泛用在各种计算机领域中,例如编程语言、文字编辑器、网络安全和其它领域。在实例中,由编译程序支持的正规表达式包含用于无结构数据的搜索的搜索准则。无结构数据可包含以下数据,其为自由形式的且无索引施加于数据内的字。字可包含数据内的任何字节组合,可打印和不可打印的。在实例中,编译程序可支持用于实施正规表达式的多种不同的源码语言,包含Perl (例如,Perl兼容正规表达式(PCRE))、PHP、Java 和.NET 语言。
[0028]返回参看图3,在方框302处,编译程序可剖析源码以形成有关系连接的运算符的布置。剖析源码可产生所述源码的一股表示。在实例中,所述一股表示包括所述源码中的呈被称为语法树的树形图形式的正规表达式的经编码表示。本文中所描述的实例将所述布置称为语法树(也被称为“抽象语法树”),然而,在其它实例中,可使用具体语法树或其它布置。
[0029]由于如上文所提及,编译程序可支持多种语言的源码,因此,不管是何种语言,剖析将所述源码转换成非语言特定表示,例如语法树。因此,通过编译程序进行的进一步处理(方框304、306、308、310)可从共同输入结构来起作用,而不管源码的语言。
[0030]所述语法树包含有关系连接的多个运算符。所述语法树可包含多个不同类型的运算符,其中不同类型的运算符对应于通过源码实施的不同功能。即,不同运算符可对应于通过源码中的正规表达式实施的不同功能。
[0031]在方框304处,将所述语法树转换成自动机。自动机包括FSM的软件模型,且可因此分为确定性或非确定性。确定性自动机在给定时间具有单一执行路径,而非确定性自动机具有多个同时的执行路径。所述自动机包括多个状态。为了将语法树转换成自动机,将语法树中的运算符和运算符之间的关系转换成状态和状态之间的转变。
[0032]在实例中,自动机包括通用状态和专用状态。所述通用状态和专用状态对应于通过目标装置支持的通用元件和专用元件,编译程序为所述目标装置产生机器码。不同类型的目标装置可支持不同类型的通用元件以及一个或一个以上不同类型的专用元件。通用元件通常可用以实施广泛范围的功能,而专用元件通常可用以实施更窄范围的功能。然而,在实例中,专用元件可在其窄范围的适用性内实现(例如)较大效率。因此,专用元件可用以(例如)减少在目标装置中实施某些功能所需的机器循环或机器资源。在一些实例中,目标装置仅支持专用元件,其中支持多个不同类型的专用元件。
[0033]目标装置的类型可很大程度上控制所述目标装置所支持的元件的类型。在一个实例中,所述目标装置为具有冯诺依曼架构的计算机,且所支持的元件包含对应于所述计算机的处理器的指令集。指令集可包含例如加法、减法、读取和写入等通用指令以及例如存储器的较大块的多重存储和移动等专门指令。在另一实例中,目标装置为如下文关于图5到9中所描述的平行机。由平行机支持的元件包含所述平行机的硬件元件。硬件组件可包含例如状态机元件等通用元件以及例如计数器等专用元件。在一些实例中,尤其是平行机实例,目标装置可支持与相对较少数目个专用元件相比数目较大的通用元件。因此,在一些实例中,将用通用元件来实施大多数功能,而用专用元件来实施较少的选定功能。
[0034]为了有效地利用目标装置的元件,所述编译程序使用自动机中的对应于目标装置支持的专用元件的专用状态来转换语法树的适当部分。所述语法树的不使用专用状态转换的部分可转换成对应于目标装置支持的通用元件的通用状态。所述编译程序可分析所述语法树以确定哪些部分可使用专用状态来转换且哪些部分应转换成通用状态。在一些实例中,自动机的大部分转换成一个或一个以上通用状态,而使用一个或一个以上专用状态来转换较小百分比。
[0035]举例来说,使用专用状态转换自动机的一些部分可减少状态的数目和/或简化自动机,且因此简化通过所述机器码实施的FSM。举例来说,所述语法树的某些部分在使用通用状态而不用任何专用状态来转换时可导致大数目的状态。为了减少状态的数目,可使用一个或一个以上专用状态可能结合一个或一个以上通用状态来转换这些相同部分。小数目的专用状态可能够代替大数目的通用状态。由于通用状态的数目通常对应于所得机器码所使用的通用元件的数目,因此减少通用状态的数目可归因于使用较少的通用元件而减少复杂性并增加所得机器码的效率。
[0036]在任何情况下,所述编译程序将语法树中的某些部分转换成某些类型的状态,且将所述语法树中的其它部分转换成其它类型的状态。由于状态的类型对应于目标装置支持的元件的类型,因此所述转换可具有将由所述源码实施的某些功能映射到由所述平行机支持的特定类型的元件的作用。在目标装置为具有冯诺依曼架构的计算机的实例中,源码中的某些功能可映射到由冯诺依曼计算机支持的指令集的特定类型的指令。在目标装置为平行机的实例中,源码的某些功能可映射到通用元件,例如状态机元件,且其它功能可映射到专用元件,例如计数器。下文关于图4提供关于将语法树转换成自动机的额外细节。
[0037]一旦已形成自动机,在方框306处,可将所述自动机优化以尤其减少其复杂性和大小。可尤其通过组合等效状态来优化所述自动机。
[0038]在方框308处,将所述自动机转换成用于目标装置的机器码。在方框304处,将所述自动机的每一部分转换成如所映射的对应于所述目标装置的元件的机器码。在一个实例中,所述机器码包括用于冯诺依曼架构中的处理器的可执行指令。在此,机器码可包括可执行程序。在另一实例中,机器码可包括用于平行机中的硬件元件的编程的位。在此,所述机器码可包括供加载到平行机上的映像。
[0039]在方框310处,所述机器码可通过编译程序发布。在实例中,可通过将机器码保存到计算机可读媒体来发布所述机器码。在另一实例中,可通过将机器码发送到另一装置(例如,用于将机器码加载到平行机上的编程装置)来发布所述机器码。在再一实例中,可通过将机器码加载到平行机上来发布所述机器码。在又一实例中,可通过在显示装置上显示机器码来发布所述机器码。
[0040]在实例中,所述编译程序可由用于具有冯诺依曼架构的计算机的指令来实施。这些指令可致使所述计算机上的处理器实施所述编译程序的功能。举例来说,所述指令在由所述处理器执行时可致使所述处理器对可由所述处理器存取的源码执行如方框302、304、306、308和310中所描述的动作。具有冯诺依曼架构的实例计算机展示于图15中且在下文描述。
[0041]图4说明用于将布置(例如,语法树)转换成自动机的方法400,其中使用专用状态来转换所述语法树的某些部分。为了利用自动机内的专用状态,在方框402处,编译程序首先识别所述语法树的对应于目标装置支持的专用元件的部分。举例来说,在平行机中,通常可能在需要时借助通用状态来实施整个语法树。这是因为通用状态可以某些方式组合以实施所述平行机支持的所有功能。然而,如上文所提及,专用元件希望仅实施某些功能。因此,编译程序识别所述语法树中的可由专用元件实施或可由专用元件有效实施的运算符。如下文所描述,可接着使用专用状态来转换语法树的这些运算符和周围部分。
[0042]在实例中,基于所述语法树中的运算符的功能来识别所述语法树的对应于专用状态的部分。事实上,通过编译程序识别的运算符的功能性可对应于所述目标装置的专用元件希望实施的特定功能性。在实例中,当所述目标装置支持作为专用元件的计数器时,所述编译程序可将所述语法树中的量化识别为对应于专用元件。关于图5到14提供关于量化和计数器的更多细节。
[0043]在方框404处,一旦已将一部分识别为对应于专用元件,便可进一步分析所识别的部分以确定其是否满足某些条件以便被映射到专用元件。在实例中,所述条件包含对应于所识别部分的自动机是否为确定性的。即,所述条件对应于,不管有一部分为所识别部分的较大自动机(例如,基于整个语法树形成的自动机)是否为确定性的,所识别部分在转换成通用状态的自动机时是否为确定性的。如果对应于所识别部分的自动机为确定性的,那么在方框406处,使用一个或一个以上专用状态来转换所述所识别部分。如果所述自动机并非确定性的,那么在方框408处,使用一个或一个以上通用状态而不用任何专用状态来转换所识别部分。在其它实例中,所述自动机可在所识别能力为确定性时使用第一类型的专用状态来转换所识别部分且在所识别部分并非确定性时使用另一类型的专用状态来转换所识别部分。在又其它实例中,可使用其它条件来确定在转换所述语法树的所识别部分时将使用哪类型的状态。
[0044]在实例中,为了在方框404处确定语法树的所识别部分是否为确定性的,编译程序可确定所识别部分在转换成自动机时是否在给定时间仅具有一个作用中状态。此可通过(例如)找出是否存在干扰到所识别部分的任何条件来确定。举例来说,在所识别部分为量化时,编译程序可分析所述自动机以确定所述自动机是否满足“无重入”条件或“无前缀”条件。在下文关于图10到14提供关于无重入和无前缀干扰条件的额外细节。
[0045]使用这些确定性,可将语法树中的每一运算符转换成自动机的一个或一个以上状态。一些运算符可通过识别由所述运算符所实施的特定功能和在适当时使用所述自动机中的一个或一个以上专用状态来转换那些功能来如上文所描述进行转换。不使用一个或一个以上专用状态转换的运算符可默认地转换为一个或一个以上通用状态。举例来说,可分析所述语法树以识别所有适用运算符并将所述运算符映射到平行机中的计数器。一旦所有适用运算符已映射到一个或一个以上计数器,便可将剩余运算符映射到一个或一个以上状态机元件。在其它实例中,通过识别对应于特定部分的一个或一个以上特定元件来映射所述语法树的所有部分。
[0046]实例实施例
[0047]下文关于图5到15所作的描述与使用平行机中的专用元件实施FSM的实例实施例有关。在实例中,所述平行机的专用元件包含计数器。所述计数器希望实施源码中的量化。参看图5到9所作的描述与实例平行机有关,且关于图10到14所作的描述描述了用以产生机器码以对所述平行机编程的编译程序。
[0048]图5说明可用以实施用于分析数据的阶层式结构的实例平行机500。平行机500可接收输入数据并基于所述输入数据提供输出。平行机500可包含用于接收输入数据的数据输入端口 510和用于将输出提供到另一装置的输出端口 514。数据输入端口 510提供用于将输入到所述平行机500的数据的接口。
[0049]平行机500包含多个可编程元件,包含通用元件502和专用元件512。通用元件502可包含一个或一个以上输入504和一个或一个以上输出506。可将通用元件502编程到多个状态中的一者中。通用元件502的状态确定所述通用元件502将基于给定输入提供哪一(些)输出。即,通用元件502的状态确定可编程元件将基于给定输入如何起反应。输入到数据输入端口 510的数据可提供到所述多个通用元件502以致使所述通用元件502对其采取行动。通用元件502的实例可包含下文详细论述的状态机元件(SME)和可配置逻辑块。在实例中,SME可设定为给定状态以当在数据输入端口 510处接收到给定输入时提供某一输出(例如,高或“I”信号)。当在数据输入端口 510处接收到不同于给定输入的输入时,SME可提供不同输出(例如,低或“O”信号)。在实例中,可配置逻辑块可经设定以基于在数据输入端口 510处接收到的输入来执行布林逻辑函数(例如,“和”(AND)、“或”(0R)、“或非” (NOR)等)。
[0050]平行机500还可包含用于将程序(例如,映像)加载到平行机500上的编程接口511。所述映像可编程(例如,设定)通用元件502的状态。即,所述映像可配置通用元件502以按某一方式来对给定输入起反应。举例来说,通用元件502可经设定,以当在数据输入端口 510处接收到字符‘a’时输出高信号。在一些实例中,平行机500可使用时钟信号来控制通用元件502的操作的时序。在某些实例中,平行机500可包含用于与通用元件502交互和用于执行专用功能的专用元件512(例如,RAM、逻辑门、计数器、查找表等)。在一些实施例中,在数据输入端口 510处接收到的数据可包含随时间过去或一齐接收到的一组固定的数据或随时间过去而接收到的数据流。可从耦合到平行机500的任何源接收数据或通过耦合到平行机500的任何源产生数据,所述任何源例如数据库、传感器、网络等。
[0051]平行机500还包含用于将平行机500的不同元件(例如,通用元件502、数据输入端口 510、输出端口 514、编程接口 511和专用元件512)选择性地耦合在一起的多个可编程开关508。因此,平行机500包括在所述元件间形成的可编程矩阵。在实例中,可编程开关508可将两个或两个以上元件选择性地耦合到彼此,使得通用元件502的输入504、数据输入端口 510、编程接口 511或专用元件512可经由一个或一个以上可编程开关508而耦合到通用元件502的输出506、输出端口 514、编程接口 511或专用元件512。因此,所述元件之间的信号的投送可通过设定可编程开关508来控制。尽管图5说明给定元件与可编程开关508之间的某一数目的导体(例如,电线),但应理解,在其它实例中,可使用不同数目的导体。而且,尽管图5说明每一通用元件502个别地耦合到可编程开关508,但在其它实例中,多个通用元件502可作为群组(例如,块802,如图8中所说明)而耦合到可编程开关508。在实例中,数据输入端口 510、数据输出端口 514和/或编程接口 511可实施为寄存器,以使得到寄存器的写入将数据提供到相应元件或从相应元件提供数据。
[0052]在实例中,单一平行机500实施于物理装置上,然而,在其它实例中,两个或两个以上平行机500可实施于单一物理装置(例如,物理芯片)上。在实例中,多个平行机500中的每一者可包含不同的数据输入端口 510、不同的输出端口 514、不同的编程接口 511,和一组不同的通用元件502。此外,每一组通用元件502可对其对应输入数据端口 510处的数据起反应(例如,输出高或低信号)。举例来说,对应于第一平行机500的第一组通用元件502可对对应于第一平行机500的第一数据输入端口 510处的数据起反应。对应于第二平行机500的第二组通用元件502可对对应于第二平行机500的第二数据输入端口 510起反应。因此,每一平行机500包含一组通用元件502,其中不同组的通用元件502可对不同输入数据起反应。类似地,每一平行机500和每一组对应的通用元件502可提供不同输出。在一些实例中,来自第一平行机500的输出端口 514可耦合到第二平行机500的输入端口510,使得用于第二平行机500的输入数据可包含来自第一平行机500的输出数据。
[0053]在实例中,用于加载到平行机100上的映像包括用于在平行机100内设定可编程元件102的状态、编程可编程开关108和配置专用元件112的多个信息位。在实例中,所述映像可加载到平行机100上以编程所述平行机100以基于某些输入而提供所要输出。输出端口 114可基于可编程元件102对在数据输入端口 110处的数据所起的反应来提供来自平行机100的输出。来自输出端口 114的输出可包含指示给定样式的匹配的单一位、包括指示与多个样式的匹配和不匹配的多个位的字、包括指示多个作用中和非作用中状态的多个位的字,和对应于在给定时刻所有或某些可编程元件102的状态的状态向量。
[0054]平行机500的实例用途包含样式辨识(例如,语音辨识、图像辨识等)、信号处理、成像、计算机视觉、密码学和其它。在某些实例中,平行机500可包括有限状态机(FSM)引擎、现场可编程门阵列(FPGA)和其变体。此外,平行机500可为较大装置中的组件,所述较大装置例如计算机、寻呼机、蜂窝式电话、个人记事本、便携式音频播放器、网络装置(例如,路由器、防火墙、交换机或其任何组合)、控制电路、相机等。
[0055]图6到9说明在本文中被称作“FSM引擎600”的平行机的实例。在实例中,FSM引擎600包括有限状态机的硬件实施方案。因此,FSM引擎600实施对应于FSM中的多个状态的多个可选择性地耦合的硬件元件(例如,可编程元件)。类似于FSM中的状态,硬件元件可分析输入流且基于所述输入流来激活下游硬件元件。
[0056]FSM引擎600包含多个可编程元件,包含通用元件和专用元件。通用元件可经编程以实施许多不同功能。这些通用元件包含SME604、605 (展示于图9中),所述SME604、605阶层式组织成行606 (展示于图7和8中)和块602 (展示于图6和7中)。为了在经阶层式组织的SME604、605之间投送信号,使用可编程开关的阶层,所述阶层包含块间开关603 (展示于图6和7中)、块内开关608 (展示于图7和8中)和行内开关612 (展示于图8中)。SME604、605可对应于由FSM引擎600实施的FSM的状态。如下文所描述,可通过使用可编程开关将SME604、605耦合在一起。因此,可通过编程SME604、605以对应于状态的功能和通过将SME604、605选择性地耦合在一起以对应于FSM中的状态之间的转变来在FSM引擎600上实施FSM。
[0057]图6说明实例FSM引擎600的全图。FSM引擎600包含多个块602,所述块可与可编程块间开关603选择性地耦合在一起。另外,块602可选择性地耦合到用于接收信号(例如,数据)和将数据提供到块602的输入块609(例如,数据输入端口)。块602还可选择性地耦合到用于将来自块602的信号提供到外部装置(例如,另一 FSM引擎600)的输出块613 (例如,输出端口)。FSM引擎600还可包含用于将程序(例如,映像)加载到FSM引擎600上的编程接口 611。所述映像可编程(例如,设定)SME604、605的状态。S卩,所述映像可配置SME604、605以按某一方式来对输入块609处的给定输入起反应。举例来说,SME604可经设定,以当在输入块609处接收到字符‘a’时输出高信号。
[0058]在实例中,输入块609、输出块613和/或编程接口 611可实施为寄存器,以使得到寄存器的写入将数据提供到相应元件或从相应元件提供数据。因此,来自存储于对应于编程接口 611的寄存器中的映像的位可加载于SME604、605上。尽管图6说明块602、输入块609、输出块613和块间开关603之间的某一数目的导体(例如,电线、迹线),但应理解,在其它实例中,可使用更少或更多的导体。
[0059]图7说明块602的实例。块602可包含多个行606,所述行可与可编程块内开关608选择性地耦合在一起。另外,行606可通过块间开关603而选择性地耦合到另一块602内的另一行606。在实例中,包含缓冲器601以控制去往/来自块间开关603的信号的时序。行606包含多个SME604、605,所述多个SME604、605组织成本文中被称作成对群组(GOT) 610的元件对。在实例中,块602包括十六(16)行606。
[0060]图8说明行606的实例。G0T610可通过可编程行内开关612而选择性地耦合到其它G0T610和行606内的任何其它元件624。G0T610还可借助块内开关608而耦合到其它行606中的其它G0T610,或借助块间开关603而耦合到其它块602中的其它G0T610。在实例中,G0T610具有第一输入614和第二输入616以及输出618。第一输入614耦合到G0T610的第一 SME604,且第二输入614耦合到G0T610的第二 SME604。
[0061]在实例中,行606包含第一多个行互连导体620和第二多个行互连导体622。在实例中,G0T610的输入614、616可耦合到一个或一个以上行互连导体620、622,且输出618可耦合到一个行互连导体620、622。在实例中,第一多个行互连导体620可耦合到行606内的每一 G0T610的每一 SME604。第二多个行互连导体622可耦合到行606内的每一 G0T610的一个SME604,但不可耦合到G0T610的另一 SME604。在实例中,所述第二多个行互连导体622的前一半可耦合到行606内的SME604的前一半(来自每一 G0T610的一个SME604),且所述第二多个行互连导体622的后一半可稱合到行606内的SME604的后一半(来自每一G0T610的另一 SME604)。所述第二多个行互连导体622与SME604、605之间的有限连接性在本文中被称作“对等性”。
[0062]在实例中,行606还可包含专用元件624,例如计数器、可编程布林逻辑元件、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、可编程处理器(例如,微处理器)和其它元件。另外,在实例中,所述专用元件624在不同行606中为不同的。举例来说,块602中的行606中的四个可包含布林逻辑作为专用元件624,且块602中的其它八个行606可包含计数器作为专用元件624。
[0063]在实例中,专用元件624包含计数器(本文中也被称作计数器624)。在实例中,计数器624包括12位可编程递减计数器。所述12位可编程计数器624具有计数输入、复位输入,和零计数输出。所述计数输入在被断言时使计数器624的值递减一。所述复位输入在被断言时致使计数器624加载来自相关联的寄存器的初始值。对于所述12位计数器624,可加载高达12位的数作为初始值。当计数器624的值递减到零(O)时,断言所述零计数输出。计数器624还具有至少两种模式,脉冲和保持。当将计数器624设定为脉冲模式时,在计数器624递减到零时的第一时钟循环期间断言零计数输出,且在接下来的时钟循环处,即使断言了计数输入,仍不再断言零计数输出。此状态继续,直到通过复位输入被断言而复位计数器624为止。当将计数器624设定为保持模式时,在计数器624递减到零时的第一时钟循环期间断言零计数输出,且在断言了计数输入时保持为经断言的,直到通过复位输入被断言而复位计数器624为止。
[0064]图9说明G0T610的实例。G0T610包含第一 SME604和第二 SME605,其具有输入614,616且具有其耦合到OR门630的输出626、628。用OR门630对输出626、628 —起进行逻辑OR运算以形成G0T610的共同输出618。在实例中,第一 SME604和第二 SME605展现对等性,其中第一 SME604的输入614可耦合到行互连导体622中的一些,且第二 SME605的输入616可耦合到其它行互连导体622。在实例中,可通过设定开关640以将第一 SME604的输出626耦合到第二 SME605的输入616来将G0T610内的两个SME604、605级联。
[0065]在实例中,状态机元件604、605包括与检测线634并联耦合的多个存储器单元632,例如动态随机存取存储器(DRAM)中所常用的那些存储器单元。一种此类存储器单元632包括可设定为数据状态的存储器单元,所述数据状态例如对应于高或低值(例如,I或O)的状态。存储器单元632的输出耦合到检测线634,且存储器单元632的输入基于数据流线636上的数据而接收信号。在实例中,解码数据流线636上的输入以选择所述存储器单元632中的一者。选定的存储器单元632将其所存储的数据状态作为输出提供到检测线634上。举例来说,在数据输入端口 609处接收到的数据可提供到解码器(未图示),且所述解码器可选择所述数据流线636中的一者。在实例中,所述解码器可将ACSII字符转换成256位的I。
[0066]因此,当存储器单元632设定为高值且数据流线636上的数据对应于存储器单元632时,所述存储器单元632输出高信号到检测线634。当数据流线636上的数据对应于存储器单元632且存储器单元632设定为低值时,存储器单元632输出低信号到检测线634。在检测线634上的来自存储器单元632的输出通过检测电路638来感测。在实例中,输入线614、616上的信号将相应检测电路638设定为作用中或非作用中状态。当设定为非作用中状态时,检测电路638在相应输出626、628上输出低信号,而不管相应检测线634上的信号。当设定为作用中状态时,当检测到来自相应SME604、605的存储器单元634中的一者的高信号时,检测电路638在相应输出线626、628上输出高信号。当在作用中状态时,当来自相应SME604、605的所有存储器单元634的信号为低时,检测电路638在相应输出线626、628上输出低信号。
[0067]在实例中,SME604、605包含256个存储器单元632,且每一存储器单元632耦合到不同的数据流线636。因此,SME604、605可经编程以当数据流线636中的选定的一者或一者以上上面具有高信号时输出高信号。举例来说,SME604可使第一存储器单元632(例如,位O)设定为高且使所有其它存储器单元632 (例如,位I到255)设定为低。当相应检测电路638处于作用中状态时,当对应于位O的数据流线636上面具有高信号时,SME604在输出626上输出高信号。在其它实例中,SME604可经设定,以当通过将适当的存储器单元632设定为高值而使多个数据流线636中的一者上面具有高信号时输出高信号。
[0068]在实例中,可通过从相关联的寄存器读取位来将存储器单元632设定为高值或低值。因此,可通过将由编译程序产生的映像存储到寄存器中且将寄存器中的位加载到相关联的存储器单元632中来编程SME604。在实例中,由所述编译程序产生的映像包含高和低(例如,I和O)位的二进制映像。所述映像可通过将SME604、605级联而编程FSM引擎600以作为FSM而操作。举例来说,可通过将检测电路638设定为作用中状态而将第一 SME604设定为作用中状态。第一 SME604可经设定,以当对应于位O的数据流线636上面具有高信号时输出高信号。第二 SME605最初可设定为非作用中状态,但可经设定以在作用中时当对应于位I的数据流线636上面具有高信号时输出高信号。可通过设定第一 SME604的输出626以耦合到第二 SME605的输入616来将第一 SME604与第二 SME605级联。因此,当在对应于位O的数据流线636上感测到高信号时,第一 SME604在输出626上输出高信号且将第二 SME605的检测电路638设定为作用中状态。当在对应于位I的数据流线636上感测到高信号时,第二 SME605在输出628上输出高信号以激活另一 SME605或用于来自FSM引擎600的输出。
[0069]图10说明供编译程序用以将源码转换成经配置以编程平行机的映像的方法1000的实例。方法1000包含:将所述源码剖析成语法树(方框1002);将所述语法树转换成自动机(方框1004);优化所述自动机(方框1006);将所述自动机转换成连线表(方框1008);将所述连线表放置于硬件上(方框1010);对所述连线表进行路由(方框1012);和发布所得映像(方框1014)。
[0070]在实例中,所述编译程序包含应用编程接口(API),所述API允许软件开发者产生用于在FSM引擎600上实施FSM的映像。所述编译程序提供用以将所述源码中的一组输入的正规表达式转换成经配置以编程FSM引擎600的映像的方法。所述编译程序可通过用于具有冯诺依曼架构的计算机的指令来实施。这些指令可致使所述计算机上的处理器实施所述编译程序的功能。举例来说,所述指令在由所述处理器执行时可致使所述处理器对可由所述处理器存取的源码执行如方框1002、1004、1006、1008、1010、1012和1014中所描述的动作。具有冯诺依曼架构的实例计算机展示于图15中且在下文描述。
[0071]在方框1002处,剖析正规表达式以形成语法树。如上文关于图3所解释,剖析产生所述源码的一股表示。另外,剖析可考量由FSM引擎600支持和不支持的正规表达式。所支持的正规表达式可转换成适当机器码实施方案;然而,不受支持的正规表达式可(例如)产生错误,或转换成在功能性上接近于不受支持的正规表达式的受支持的机器码。[0072]在方框1004处,将所述语法树转换成自动机。如上文关于图3所提及,转换所述语法树将所述语法树转换成包括多个状态的自动机。在实例中,可部分基于FSM引擎600的硬件来转换所述自动机。
[0073]在实例中,用于自动机的输入符号包含字母、数字O到9和其它可打印字符的符号。在实例中,所述输入符号通过字节值O到255 (包含在内)来表示。在实例中,自动机可表示为有向图,其中所述图的节点对应于状态集合。在实例中,被自动机接受(例如,匹配)的数据为在按顺序地输入到所述自动机中时将达到最终状态的所有可能数据的集合。被所述自动机接受的数据中的每一符号沿从开始状态到一个或一个以上最终状态的路径而行。被正规表达式接受的数据为匹配所述正规表达式的所有可能字符串的集合。给定正规表达式“R”,将“R”被接受的数据表示为£ (R)。
[0074]在实例中,所述自动机包括通用状态以及专用状态。在编译程序产生用于FSM引擎600的机器码的实例中,通用状态可对应于SME604、605,且通用状态因此在本文中被称作“SME状态”。此外,当编译程序产生用于FSM引擎600的机器码时,专用状态可对应于计数器624且因此在本文中被称作“计数器状态”。在实例中,自动机中的SME状态1:1映射到FSM引擎600中的SME(例如,SME604、605),不映射到SME的自动机的开始状态除外。计数器624可能或可能不1:1映射到计数器状态。
[0075]在实例中,在所述自动机中可使用输入符号范围外的特殊转变符号。这些特殊转变符号可用以(例如)使得能够使用专用元件224。此外,特殊转变符号可用以提供在不同于输入符号的一些事物上发生的转变。举例来说,特殊转变符号可指示当启用第二状态和第三状态时将启用(例如,转变到)第一状态。因此,当激活第二状态和第三状态时激活第一状态,且到所述第一状态的转变并非直接取决于输入符号。显著地,指示在启用第二状态和第三状态时将启用第一状态的特殊转变符 号可用以将(例如)通过布林逻辑执行的布林AND函数表示为专用元件224。在实例中,可使用特殊转变符号来指示计数器状态已达到零,且因此转变到下游状态。
[0076]在实例中,可使用例如葛鲁许柯夫(Glushkov)的方法等标准技术中的一者来构造自动机。在实例中,所述自动机可为无ε的同构自动机(homogeneous automaton)。下文关于图4、11、12、13A、13B和14提供关于将语法树转换成自动机的额外细节。
[0077]在方框1006处,一旦已将所述语法树转换成自动机,便优化所述自动机。所述自动机可经优化以尤其减少其复杂性和大小。可通过组合冗余状态来优化所述自动机。
[0078]在方框1008处,将所述经优化的自动机转换成连线表。将所述自动机转换成连线表将所述自动机的每一状态映射到FSM引擎600上的硬件元件(例如,SME604、605、专用元件624)的个例。而且,确定所述个例之间的连接以产生所述连线表。
[0079]在方框1010处,放置所述连线表以针对所述连线表的每一个例选择所述目标装置的特定硬件元件(例如,SME604、605、专用元件624)。在实例中,放置基于所述FSM引擎600的一股输入和输出约束而选择每一特定硬件元件。
[0080]在方框1012处,对经放置的连线表进行路由以确定可编程开关(例如,块间开关603、块内开关608和行内开关612)的设定以便将选定硬件元件耦合在一起以实现连线表所描述的连接。在实例中,通过确定FSM引擎600的将用以连接选定的硬件元件的特定导体和所述可编程开关的设定来确定所述可编程开关的设定。路由可能要考量比方框1010处的放置多的在硬件元件之间的连接的特定限制。因此,路由可调整如由全局放置确定的硬件元件中的一些的位置,以便在给出对FSM引擎600的导体的实际限制的情况下进行适当连接。
[0081]一旦对连线表进行放置和路由,便可将所放置和经路由的连线表转换成用于编程FSM引擎200的多个位。所述多个位在本文中被称作映像。
[0082]在方框1014处,通过编译程序发布映像。所述映像包括用于编程FSM引擎600的特定硬件元件和/或可编程开关的多个位。在所述映像包括多个位(例如,O和I)的实施例中,所述映像可被称作二进制映像。所述位可加载到FSM引擎600上以编程SME604、605、专用元件624和可编程开关的状态,以使得经编程的FSM引擎600实施具有由源码描述的功能性的FSM。放置(方框1010)和路由(方框1012)可将在FSM引擎600中的特定位置处的特定硬件元件映射到自动机中的特定状态。因此,所述映像中的位可编程所述特定硬件元件和/或可编程开关以实施所要功能。在实例中,可通过将机器码保存到计算机可读媒体来发布所述映像。在另一实例中,可通过在显示装置上显示所述映像来发布映像。在又一实例中,可通过将所述映像发送到另一装置(例如,用于将所述映像加载到FSM引擎600上的编程装置)来发布映像。在再一实例中,可通过将所述映像加载到平行机(例如,FSM引擎600)上来发布映像。
[0083]在实例中,可通过将来自映像的位值直接加载到SME604、605和其它硬件元件624或通过将映像加载到一个或一个以上寄存器中且接着将来自寄存器的位值写入到SME604、605和其它硬件元件624来将映像加载到FSM引擎600上。在实例中,FSM引擎600的硬件元件(例如,SME604、605、其它元件624、可编程开关603、608、612)经存储器映射,以使得计算机(例如,耦合到所述计算机或与所述计算机成一体的编程装置)可通过将映像写入到一个或一个以上存储器地址而将映像加载到FSM引擎600上。
[0084]如上文所论述, 图 4详述用于将语法树转换成自动机的方法400。以下描述提供用于在目标装置为平行机(例如,FSM引擎600)时将语法树转换成自动机的额外细节。
[0085]可以源码描述的一类正规表达式包含量化。量化在此项技术中为众所周知的,且用以描述重复样式。作为实例,“A(B) {nl, n2}C”为一股正规表达式,其中A、B和C为子表达式,且“(B) {nl, n2}”包括量化。如本文中所描述,使用大写字母来表示正规表达式或正规表达式的一部分(例如,子表达式)。可将双引号添加到正规表达式或子表达式周围以避免混淆。因此,描述表达式的大写字母可对应于用于多个输入符号的搜索字符串。举例来说,表达式“A”可对应于输入字符串‘abbc’。
[0086]此外,应理解,术语表达式和子表达式在本文中仅用于关系描述(例如,子表达式为表达式的一部分),且术语表达式和子表达式不应限于任何特定长度、语法或字符数目。明确地说,源码可包含大量字符(包含元字符和搜索字符),其中整组字符或其任何个别部分可被视为“表达式”。举例来说,以下各者中的每一者可被视为表达式:“a(bb|d? ){5,20} C”、“ (b) {0,10} ”、“ (b I d),,和 “b”。
[0087]将量化以正规表达式表达为“(B) {nl,n2} ”,其中B为子表达式,且nl和n2为指定允许前述子表达式出现多少次的整数。B在本文中被称作重复子表达式,因为B为重复了由nl和n2指定的次数的子表达式。为了匹配量化“(B) {nl,n2} ”,必须匹配重复子表达式B nl到n2次。举例来说,正规表达式“(B) {5,7) ”将要求子表达式B匹配5、6或7次。在正规表达式“A(B) {nl,n2}C”中,子表达式A在本文中被称作驱动表达式,因为子表达式A在匹配时转变为量化。另外,为了继续重复和递增针对所述量化的计数,必须连续地匹配所述量化的重复子表达式。即,当重复子表达式在所述量化的给定循环期间不匹配时,所述量化结束。在实例中,符号“?”也对应于量化,其中在“? ”之前的符号可识别一次或零次。
[0088]当目标装置为FSM引擎600时,方法400可识别某些量化并将所述量化映射到FSM引擎600上的计数器624。用计数器624实施某些量化可导致优于用状态机元件604、605实施量化的效率。因此,可简化针对FSM引擎600的自动机和所得映像。举例来说,实施量化的语法树的部分可需要大量SME604、605来实施。然而,在实例中,这些量化中的一些可使用计数器624来实施,计数器624具有比SME604、605将需要的状态少的状态。
[0089]在方框402处,编译程序识别语法树的对应于用FSM引擎600中的计数器624的可能的实施方案的量化的部分 。如果所述语法树的部分不对应于量化,那么方法400前进到方框408,在方框408处,将所述部分转换成用于用SME604、605的实施方案的通用状态。如果所述语法树的部分确实对应于量化,那么进一步分析所述量化以确定是否可用计数器624来实施所识别的部分。
[0090]在做出是否可能用计数器624来实施量化的确定之前,如果£ (B)包含空字符串,那么“B{nl,n2}”的量化重写为“B' {0,n2}”,其中B'为B的非空字符串版本,£ (B')=£ (B) -Φ。举例来说,“ (bcl) {10,20} ”可重写为“ (be) {O, 20} ”,因为这些正规表达式接受正好相同的数据。接着,对于给定的量化B{nl,n2},根据以下条件,所述量化可能用计数器来实施(方法前进到方框404)或者用SME来实施且无计数器(方法前进到方框408):
[0091].I)当(nl = O, n2 = -1)时,将借助SME604、605来实施所述量化且无计数器624 (方框408)。在此,不需要计数器624。
[0092].2)当(nl = 1,n2 = -1)时,将借助SME604、605来实施所述量化且无计数器624 (方框408)。在此,不需要计数器624。
[0093].3)当(nl > 1,η2 = -1)时,所述量化将分裂成两个正规表达式B {nl_l}和B+,因为B{n,-1}等于B{nl-1}B+。可接着可能用计数器来实施量化B {nl_l}(方框404),而将借助SME604、605来实施B+且无计数器624 (方框408)。对于B+,不需要计数器624。
[0094].4)当(ηI = 0,η2 > O)时,将所述量化修改成(Β{1, η2}) ?,因为(Β{1, η2}) ?等于Β{0,η2}。可接着可能用计数器624来实施不可空Β{1,η2}(方框404)。
[0095].5)当(nl > 0,η2 > O)时,可能用计数器624将所述量化实施为B {ηI,η2}(方框404)。
[0096]总之,在不修改的情况下可能可用计数器624实施(方框404)的量化可被写成B{nl,η2},其中B为不可空的,nl > O、η2 > O且nl≤n2。
[0097]在方框404处,一旦编译程序已识别了可能可用计数器624实施的量化,所述编译程序便确定语法树的对应于经识别部分的一部分是否为确定性的。当所述经识别部分为确定性时,可用一个或一个以上计数器624来实施所述经识别部分,且方法400前进到方框406,在方框406处,将所述经识别部分转换成一个或一个以上计数器状态以及一个或一个以上SME状态。当所述经识别部分为非确定性时,不使用计数器624来实施所述经识别部分,且方法400前进到方框408,在方框408处,将所述经识别部分转换成一个或一个以上SME状态。[0098]大体上,方框406和方框408对应于用以将量化转换成自动机的两种方式。在方框406处,使用一个或一个以上计数器状态来转换所述量化,可能结合一个或一个以上SME状态以将所述量化实施为循环。在方框408处,通过“展开”所述量化来转换所述量化,其包含使用SME状态且无计数器状态。展开包括用非量化语法来重写所述量化。举例来说,正规表达式“(b|c) {1,2}”可展开为“(b|c) (b|c) ? ”。展开的优点包含(I)所得自动机为有向非循环图(DAG)且可易于分析和实施,和(2)所得自动机可用通用元件(尤其是状态机元件)而非专用元件来实施。然而,用以实施展开量化的通用状态且因此状态机元件的数目与nl和n2成线性关系。因此,当nl或n2为大数目时,状态的数目可为大的。明确地说,真实资源为有限的,因此,在一些实例中,此展开技术仅用于有限类别的量化。
[0099]然而,当目标装置具有经设计以实施计数功能的专用元件(例如,计数器624)时,在某些情况下可避免展开。此方法的优点为在自动机中需要重复表达式的较少副本,且副本的数目独立于nl和n2。因此,可节省显著资源。举例来说,可使用一个或一个以上计数器624以通过用重复表达式和一个或一个以上计数器624产生循环来实施量化。每当重复表达式匹配时,计数器624便可递增(或递减)。可接着重新激活所述重复表达式以搜索另一匹配。当计数器624已递增(或递减)了等于所述量化所规定的次数时,计数器624可在所述量化之后激活所述状态。因此,可用较少SME604、605来实施所述量化,因为再用了用以实施重复表达式的SME。然而,归因于整个自动机(例如,对应于整个语法树)的平行性(即,可同时处于作用中的多个状态),在一些实例中,计数器624可仅用于对应于整个自动机的确定性部分的量化。
[0100] 图11说明转换成自动机1100的正规表达式的实例,所述自动机1100使用专用计数器状态1102来实施量化。自动机1100对应于正规表达式“A⑶{nl,nl}C”,其中所述量化的两个计数值(例如,nl、n2)相等。由于所述计数值中的两者相等,因此使用单一计数器624来实施所述量化。如图11中所展示,自动机1100可表示为有向图,其中所述图的节点对应于一组状态。
[0101]正规表达式“A(B) {nl, nl}C”转换成若干SME状态1104、1106、1110、1108和计数器状态1102。SME状态1104、1106、1108、1110对应于子表达式和“C”。SME状态1104、1106、1110、1108可用SME604、605来实施,而计数器状态1102可用计数器624来实施。当在FSM引擎600上实施自动机1110时,对应于计数器状态1102的计数器624最初加载有值nl且经设定以在计数器624中的值达到零时断言零计数输出。当nl等于n2时,计数器624可经设定为停止O和脉冲输出模式,其意味一旦计数器624的值达到零,计数器624便将断言其输出,且计数器624将维持于零且不发出任何信号直到复位计数器624为止。
[0102]自动机1100在状态1104处开始且在匹配子表达式“A”后即刻转变到状态1106。当处于状态1106处,每当子表达式“B”匹配时,便激活计数器状态1102的IN端口,且计数器状态1102递减一。另外,每当子表达式“B”匹配时,状态1106便激活其自身以及激活状态1110。当计数器状态1102达到零时,激活输出,且自动机1100将接着搜索子表达式“C”。在接下来的循环中,将出现两种情形:第一种情形在“~B”匹配时出现。当“~B”匹配时,复位计数器状态1102且将其值设定回到nl。因此,下次子表达式“A”匹配时,过程便从状态1104开始。在第二种情形中,状态1106的自循环仍在作用中,且在子表达式“B”匹配时继续触发计数器1102的IN端口。由于计数器状态1102是在脉冲模式下配置,因此尽管状态1106的自循环仍处于作用中,但计数器状态1102将不会再次激活其输出。
[0103]子表达式“B”的否定版本在本文中也被称作“?B”。在实例中,子表达式“B”的否定版本用以激活计数器状态1102的复位端口。这是因为,由于“B”是量化“⑶{nl,nl} ”的重复表达式,因此当在输入处接收到不同于B的任一者(例如,“B”的否定版本)时(一旦已激活了状态1106),那么所述量化结束且因此复位计数器。因此,一旦激活了状态1110,便复位计数器状态1102,且当子表达式“B”的否定版本匹配时,所述量化不匹配。在实例中,使用标准自动机理论来否定重复表达式。
[0104]尽管当nl等于n2时,说明并描述单一计数器状态624实施量化,但应认识到,多个计数器624可级联以考量比单一计数器624支持的数目大的数目。
[0105]图12说明转换成自动机1200的正规表达式的另一实例,所述自动机1200使用多个专用计数器状态1202、1204来实施具有量化的正规表达式。自动机1200对应于正规表达式“A(B) {nl,n2}C”,其中nl小于n2。使用两个计数器状态1202、1204,因为在量化“(B){nl, n2}”中nl小于n2。计数器状态1202、1204经配置到停止O和保持模式,其意味,当计数器状态1202、1204达到零时,计数器状态1202、1204激活其输出,且在复位计数器状态1202、1204之前,计数器状态1202、1204维持于零且每当激活IN端口时便保持激活其输出。在此实例中,从计数器状态1202到计数器状态1204的延时占用两个循环。
[0106]计数器状态1202最初设定为nl,且计数器状态1204最初设定为n2。当子表达式“A”匹配时,所述自动机从状态1206转变到状态1208。一旦激活了状态1208,每当子表达式“B”匹配时,便激活计数器状态1202和计数器状态1204两者的IN端口。因此,计数器状态1202和计数器状态1204两者递减一。当计数器状态1202达到零时,激活其输出,且自动机1200接着搜索子表达式“C”的匹配且激活状态1210。一旦子表达式“B”已匹配了nl次,计数器状态1204的值便为n2-nl。稍后,每当子表达式“B”匹配时,便激活计数器状态1202的IN端口,且计数器状态1202的值维持于零,且仍激活其输出。同时,计数器状态1204继续递减。当子表达式“B”匹配了 n2次时,计数器状态1204也达到零,且激活其输出,此驱动计数器状态1202的复位端口。由于计数器状态1204到计数器状态1202的延时为两个循环,因此计数器状态1202继续激活其输出到状态1210。在下一个循环中,从计数器状态1204的输出复位计数器状态1202,且不从计数器状态1202断言输出。在接下来的循环中,将出现两种情形。在第一种情形中,“?B”匹配。计数器状态1202和计数器状态1204两者均通过状态1212复位,且其值分别设定为nl和n2。因此,下次状态1206为作用中且下次子表达式“A”匹配时,激活状态1208,且计数器状态1202、1204再次递减。在第二种情形中,状态1208的自循环维持激活,且激活计数器状态1202、1204两者的IN端口。由于计数器状态1204继续激活其输出,因此计数器状态1202继续复位,且只要状态1208的自循环处于作用中便不激活其输出。
[0107]另外,在状态1208处于作用中时子表达式“B”的匹配激活了状态1212。一旦状态1212激活且“?B”匹配,便复位计数器状态1202、1204,且不匹配所述量化。使用子表达式“B”的否定版本,因为“B”为量化“⑶{nl,n2}”的重复表达式。因此,可重复地匹配在状态1208下的表达式‘B’从nl到n2次。尽管说明并描述了单一计数器分别实施下(例如,nl)和上(例如,n2)阈值,但应认识到,如所属领域的技术人员所知,多个计数器可级联以考量比单一计数器支持的数目大的数目。
[0108]在使用计数器状态转换量化之前,在方框404处,编译程序确定对应于所述量化的自动机是否为确定性的。在实例中,当表达式满足下文所论述的无前缀、无重入条件两者时,所述自动机为确定性的。即,为了使量化映射到计数器624,所述量化应满足如下文所论述的无前缀和无重入条件。
[0109]参考图12的自动机1200,无重入条件要求从状态1206到状态1208的边不可激活,而计数器状态1202处于作用中(例如,当计数器状态1202正在计数时)。即,确定在已处理所述量化时是否可匹配所述量化的驱动表达式。匹配驱动表达式意味,紧跟在所述量化之前的状态将转变到对应于所述量化的状态。因此,将“重入”所述量化,而计数器状态仍处理重复表达式。由于在FSM引擎600的此实例中,计数器624在任何给定时间时可仅实施单一循环,因此在循环已经处理时转变到量化可致使计数器624在给定循环期间不正确地计数。
[0110]图13A和13B说明自动机1500和1314,可用以进一步解释无重入条件。图13A说明对应于语法树中的量化的实例自动机1500,其中编译程序可进行分析以确定对应于所述量化的自动机是否为确定性的。
[0111]自动机1500对应于正规表达式“abb ? (b | c) {1,2} ”且包含开始状态1502和最终状态1312、1504。所述最终状态在图13A中识别为双圆。最初激活开始状态1502并在输入符号‘a’后即刻使其转变到状态1506。在输入符号‘b’时,状态1506转变到状态1308和状态1310两者。在输入符号‘b’时状态1308转变到状态1310,且在输入符号‘b’或‘C,时,状态1310转变到状态1312。在输入符号‘b’或‘C,时,自动机1300从状态1312转变到状态1304。
[0112]自动机1300包括正规表达式“abb ? (b | c) {1,2} ”的自动机,将检查所述正规表达式是否符合无重入条件。 自动机1314包括从自动机1300的正规表达式“abb ? (b | c){1,2}”导出的正规表达式55( “abb ? ”、“(b|c)⑵”)的自动机。SS (M, N)被定义为从M、N导出的正规表达式。导出步骤包含:1)串接M和N,结果表示为“丽”。2)构造“丽”的自动机,表示为A(MN)。3)如下地修改A (MN):a)使A (MN)的开始状态驱动所有其它状态,和b)使对应于“N”的所有状态为最终状态。最后,4)将经修改的自动机的正规表达式表示为SS (M,N)。SS (M,N)的被接受数据由从“MN”的任何状态开始且在N的任何状态处结束的子字符串组成。
[0113]无重入条件可定义如下。给出具有量化“八8{111,112}(:”的正规表达式,无重入条件需要£(SS(A.Β{η!.η2}) Π £(Α)=0。换句话说,一旦子表达式“Α”匹配且计数器状态1202开始计数,那么为了满足无重入条件,将不再次激活从状态1206到状态1208的边,直到进行“B{nl,n2}”(匹配或失败)为止。举例来说,用计数器624将不会正确地实施“abb” e£ ( “abb ?,,) Π £ (SS( “abb ? ”,“(blc) {2} ”),和因此 “abb ? (b | c) {1,2} ”。
[0114]现在参看图14,将参考自动机1400来解释无前缀条件。无前缀条件规定£ (B)的任何字符串不应为£ (B)的另一字符串的前缀,此将保证B不会致使计数器计数多于一次。换句话说,当量化的第一重复子表达式为所述量化的第二重复子表达式的前缀时,所述量化不实施为(且因此转换为)计数器624。正式的陈述为:对于所有Ii, Ij e £ (B),Ii关Ij,要求(丨,1叩」夕}=0。[0115]举例来说,正规表达式“a (b I be) {3}”不满足无前缀条件。因此,将不使用计数器状态来转换正规表达式“a (b I be) {3}”,且因此将不用计数器624来实施。实情为,将不用任何计数器状态来将正规表达式“a (b I be) {3} ”转换成通用状态。
[0116]如果用计数器624来实施正规表达式“a(b |bc) {3} ”,那么将错误地匹配输入“abbc”。举例来说,自动机1400为使用计数器状态1412对正规表达式“a(b | be) {3} ”的假设转换的结果。如下文所描述,此转换导致计数器状态1412的不正确执行。最初激活状态1402,且在输入“a”处,状态1402激活状态1404。在状态1404激活的情况下,在输入“b”处,状态1404激活状态1406、1408且再激活自身,即状态1404。而且,在输入“b”处,状态1404激活计数器1412的IN端口,其中计数器状态1412的初始值处于3且接着减少到2。在状态1404、1406和1408激活的情况下,在另一输入“b”处通过状态1404再次激活计数器状态1412的IN端口,且计数器状态1412中的值减少到I。此时,激活状态1404、1406和1408。接着,输入值“c”致使计数器状态1412的IN端口通过状态1408激活以将计数器1412中的值减少到O。在计数器1412中的值处于零的情况下,激活输出,且激活状态1414,此指示匹配。然而,此匹配为错误肯定,因为在序列“abbc”不满足正规表达式“a(b|bc){3}”时,输入“abbc”已造成匹配。因此,正规表达式“a (b I be) {3} ”不满足无前缀条件,且不应使用计数器状态来转换且不应用计数器624来实施。
[0117]如果在方框404处,所述量化满足无前缀条件和无重入条件两者,那么在方框406处使用专用计数器状态来转换所述量化。可如上文关于图12和13所描述股转换所述量化。然而,如果所述量化不满足无前缀或无重入条件,那么在方框408处通过展开所述量化且将所述量化转换成通用状态且无计数器状态624来转换所述量化。因此,用SME604、605而不是计数器624来实施所述量化。
[0118]本文中所描述的方法实例可至少部分为机器或计算机实施的。一些实例可包含编码有指令的计算机可读媒体或机器可读媒体,所述指令可操作以配置电子装置以执行如上述实例中所描述的方法。这些方法的实施方案可包含码,例如微码、组合语言码、高级语言码等。此类码可包含用于执行各种方法的计算机可读指令。码可形成计算机程序产品的部分。另外,码在执行期间或在其它时间时可有形地存储于一个或一个以上易失性或非易失性计算机可读媒体上。这些计算机可读媒体可包含(但不限于)硬盘、可装卸式磁盘、可装卸式光盘(例如,压缩光盘和数字视频光盘)、磁带盒、存储卡或存储条、随机存取存储器(RAM)、只读存储器(ROM)等。
[0119]图15大体上说明具有冯诺依曼架构的计算机1500的实例。在阅读和理解了本发明的内容之后,所属领域的技术人员将理解在基于计算机的系统中可从计算机可读媒体启动软件程序以使其执行以软件程序定义的功能的方式。所属领域的技术人员将进一步理解,可使用各种编程语言来产生经设计以实施并执行本文所揭示的方法的一个或一个以上软件程序。可使用对象导向语言(例如,Java、C++或一种或一种以上其它语言)以对象导向格式来结构化所述程序。或者,可使用程序语言(例如,组合语言、C等)以程序导向格式来结构化所述程序。软件组件可使用所属领域的技术人员所众所周知的许多方案中的任一者来通信,例如应用编程接口或过程间通信技术,包含远程程序呼叫或其它。各个实施例的教示不限于任何特定编程语言或环境。
[0120]因此,可实现其它实施例。举例来说,制造物件(例如,计算机、存储器系统、磁盘或光盘、某一其它存储装置,或任何类型的电子装置或系统)可包含一个或一个以上处理器1502,所述一个或一个以上处理器1502耦合到上面存储有指令1524(例如,计算机程序指令)的计算机可读媒体1522,例如存储器(例如,可装卸式存储媒体,以及包含电、光或电磁导体的任何存储器),所述指令在由所述一个或一个以上处理器1502执行时导致执行相对于上述方法所描述的动作中的任一者。
[0121]计算机1500可采取具有处理器1502的计算机系统的形式,所述处理器1502直接和/或使用总线1508而耦合到许多组件。这些组件可包含主存储器1504、静态或非易失性存储器1506和大容量存储装置1516。耦合到处理器1502的其它组件可包含输出装置1510(例如,视频显示器)、输入装置1512(例如,键盘)和光标控制装置1514(例如,鼠标)。用以将处理器1502和其它组件耦合到网络1526的网络接口装置1520还可耦合到总线1508。指令1524可利用许多众所周知的传送协议(例如,HTTP)中的任一者经由网络接口装置1520跨越网络1526来进一步发射或接收。耦合到总线1508的这些元件中的任一者可不存在,单独地存在,或以复数形式存在,这取决于待实现的特定实施例。
[0122]在实例中,处理器1502、存储器1504、1506或存储装置1516中的一者或一者以上可各自包含指令1524,所述指令1524在执行时可致使计算机1500执行本文所描述的方法中的任何一者或一者以上。在替代实施例中,计算机1500操作为单独装置或可连接(例如,联网)到其它装置。在联网环境中,计算机1500可以服务器一客户端网络环境中的服务器或客户端装置的能力来操作,或操作为对等(或分散式)网络环境中的对等装置。计算机1500可包含个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝式电话、web器具、网络路由器、交换机或桥接器,或能够执行指令集(顺序的或其它)的任何装置,所述指令集指定将由所述装置采取的行动。另外,虽然仅说明了单一计算机1500,但术语“计算机”还应被视为包含个别地或共同地执行一(或多个)指令集以执行本文中所论述的方法中的任何一者或一者以上的装置的任何集合。
[0123]计算机1500还可包含用于使用一个或一个以上通信协议(例如,通用串行总线(USB)、IEEE1394等)与外围装置通信的输出控制器1528。输出控制器1528可(例如)将映像提供到通信地耦合到计算机1500的编程装置1530。编程装置1530可经配置以编程平行机(例如,平行机500、FSM引擎600)。在其它实例中,编程装置1530可与计算机1500集成且耦合到总线1508或可经由网络接口装置1520或另一装置与计算机1500通信。
[0124]虽然计算机可读媒体1524展示为单一媒体,但术语“计算机可读媒体”应被视为包含存储所述一个或一个以上指令集1524的单一媒体或多个媒体(例如,集中式或分散式数据库,或相关联的高速缓冲存储器和服务器,和或各种存储媒体,例如处理器1502寄存器、存储器1504、1506和存储装置1516)。术语“计算机可读媒体”还应被视为包含以下任何媒体,其能够存储、编码或载运供计算机执行的指令集且致使所述计算机执行本发明的方法中的任何一者或一者以上,或能够存储、编码或载运供此指令集利用或与此指令集相关联的数据结构。术语“计算机可读媒体”因此应被视为包含(但不限于)有形媒体,例如固态存储器、光媒体和磁性媒体。
[0125]提供摘要以遵照需要摘要的37C.F.R.章节1.72 (b),此将允许读者确定技术揭示内容的性质和要旨。在理解到摘要将不用以限制或解释权利要求书的范围或涵义的情况下提交摘要。所附权利要求书特此并入详细描述中,其中每一权利要求依赖于其自身而作为单独实施例。
[0126]实例实施例
[0127]实例I包含一种计算机实施方法,所述方法用于产生对应于包含通用元件和专用元件的一组元件的机器码,所述方法包括:确定有关系连接的运算符的布置中的一部分是否满足将被映射到专用元件的条件;如果所述部分满足所述条件,那么将所述部分映射到专用元件;和将有关系连接的运算符的所述布置转换成机器码。
[0128]实例2包含一种计算机可读媒体,其包含指令,所述指令在由计算机执行时致使所述计算机执行包括以下各者的操作:识别有关系连接的运算符的布置中的对应于目标装置的专用元件的一部分,其中所述目标装置还包含通用元件;确定所述部分是否满足将被映射到所述专用元件的条件;将所述布置转换成包括多个状态的自动机,其中如果所述部分满足所述条件,那么使用对应于所述专用元件的专用状态来转换所述部分;和将所述自动机转换成机器码。
[0129]实例3包含一种计算机,其包括:存储器,其上面存储有软件;和处理器,其通信地耦合到所述存储器,其中所述软件在通过所述处理器执行时致使所述处理器将正规表达式编译成用于目标装置的码,其中所述目标装置支持第一类型的元件和至少一种其它类型的元件;其中编译包含将对应于所述第一类型的元件的第一正规表达式映射到所述第一类型的元件;且其中编译包含将不对应于所述第一类型的元件的第二正规表达式映射到所述至少一种其它类型的元件。
[0130]实例4包含一种系统,其包括计算机,所述计算机经配置以识别有关系连接的运算符的布置中的对应于目标装置的专用元件的一部分,其中所述目标装置还包含通用元件;确定所述部分是否满足将被映射到所述专用元件的条件;将所述布置转换成包括多个互连状态的自动机,其中如果第一部分满足所述条件,那么将所述部分转换成对应于所述专用元件的专用状态;和将所述自动机转换成机器码;和所述系统包括用于编程平行机的装置,所述装置经配置以将所述机器码加载到所述平行机上。
[0131]在实例5中,实例I到4中任一者的标的可任选地包含,其中所述机器码包括用于平行机的映像。
[0132]在实例6中,实例I到5中任一者的标的可任选地包含,其中所述组元件包含供在处理器上执行的指令集,且其中所述专用元件包含专用指令。
[0133]在实例7中,实例I到6中任一者的标的可任选地包含识别有关系连接的运算符的所述布置中的对应于专用元件的一部分,其中确定一部分是否满足条件,确定经识别的所述部分是否满足条件;其中映射包含将所述布置转换成包括多个状态的自动机,其中如果所述部分满足所述条件,那么使用对应于所述专用元件的专用状态来转换所述部分;且其中转换所述布置包含将所述自动机转换成机器码。
[0134]在实例8中,实例I到7中任一者的标的可任选地包含,其中识别所述布置中的对应于专用元件的一部分包括识别所述有关系连接的运算符中的可使用所述专用元件实施的运算符。
[0135]在实例9中,实例I到8中任一者的标的可任选地包含,其中将所述布置转换成自动机包括将所述布置中的运算符中的每一者转换成所述多个状态中的一者或一者以上。
[0136]在实例10中,实例I到9中任一者的标的可任选地包含,其中如果所述部分不满足所述条件,那么使用通用状态且不使用对应于专用元件的专用状态来转换所述部分,其中所述通用状态对应于所述通用元件。
[0137]在实例11中,实例I到10中任一者的标的可任选地包含,其中所述部分包括第一部分,且其中如果所述布置的第二部分并未被识别为对应于专用元件,那么使用通用状态且不使用对应于专用元件的专用状态来转换所述第二部分,其中所述通用状态对应于通用元件。
[0138]在实例12中,实例I到11中任一者的标的可任选地包含,其中所述组元件包含平行机的一组硬件元件,其中所述通用元件包括可编程元件且其中所述专用元件包含计数器。
[0139]在实例13中,实例I到12中任一者的标的可任选地包含,其中所述可编程元件包括状态机元件。
[0140]在实例14中,实例I到13中任一者的标的可任选地包含,其中所述状态机元件包含存储器单元。
[0141]在实例15中,实例I到13中任一者的标的可任选地包含,其中所述存储器单元包括易失性存储器单元。
[0142]在实例16中,实例I到15中任一者的标的可任选地包含进一步包括发布所述机器码。
[0143]在实例17中,实例I到16中任一者的标的可任选地包含,其中发布所述机器码包含将所述机器码加载到平行机上。
[0144]在实例18中,实例I到17中任一者的标的可任选地包含,其中发布所述机器码包含将所述机器码存储于计算机可读媒体上。
[0145]在实例19中,实例I到18中任一者的标的可任选地包含,其中所述指令致使所述计算机执行包括以下各者的操作:将源码转换成所述布置;和发布所述机器码。
[0146]在实例20中,实例I到19中任一者的标的可任选地包含,其中确定所述部分是否满足将被映射到专用元件的条件包括确定所述部分是否为确定性的。
[0147]在实例21中,实例I到20中任一者的标的可任选地包含,其中识别所述布置的一部分包含识别量化;且其中确定所述部分是否为确定性的包含确定在处理所述量化时是否可匹配所述量化的驱动表达式。
[0148]在实例22中,实例I到21中任一者的标的可任选地包含,其中识别所述布置的一部分包含识别量化;且其中确定所述部分是否为确定性的包含确定所述量化的重复表达式是否为所述量化的另一重复表达式的前缀。
[0149]在实例23中,实例I到22中任一者的标的可任选地包含,其中识别所述布置中的一部分包含识别量化。
[0150]在实例24中,实例I到23中任一者的标的可任选地包含,其中确定所述部分是否为确定性的包含确定在处理所述量化时是否可匹配所述量化的驱动表达式,且确定所述量化的重复表达式是否为所述量化的另一重复表达式的前缀。
[0151]在实例25中,实例I到24中任一者的标的可任选地包含,其中所述专用元件包含在所述自动机中具有对应计数器状态的计数器,且所述通用元件包含在所述自动机中具有对应状态机元件状态的状态机元件。[0152]在实例26中,实例I到25中任一者的标的可任选地包含,其中当所述部分对应于量化且所述部分为确定性时,将所述部分实施为循环,所述循环包括所述量化的重复表达式和计数器状态,其中所述计数器状态经配置以对所述重复表达式匹配的次数计数,且其中在所述重复表达式匹配了通过所述量化指定的次数时所述计数器状态激活下游状态。
[0153]在实例27中,实例I到26中任一者的标的可任选地包含,其中所述循环通过与所述重复表达式的否定版本的匹配而退出。
[0154]在实例28中,实例I到27中任一者的标的可任选地包含,其中当所述量化可与单一数目个循环匹配时,配置所述重复表达式以断言所述计数器状态的计数输入;配置所述重复表达式的否定版本以复位所述计数器状态;和配置所述计数器状态以在所述计数输入已断言了等于循环的数目的次数但未复位所述计数器状态时断言输出。
[0155]在实例29中,实例I到28中任一者的标的可任选地包含,其中当所述量化可与多个数目个循环匹配时,配置所述重复表达式以断言第一计数器状态的计数输入和第二计数器状态的计数输入;配置所述重复表达式以断言所述第一计数器状态的复位输入和所述第二计数器状态的复位输入;配置所述第一计数器状态以在所述第一计数器状态的所述计数输入已断言了等于所述多个数目个循环的低阈值的次数但未复位所述第一计数器状态时断言输出;和配置所述第二计数器状态以在所述第二计数器状态的计数输入已断言了等于所述多个数目个循环的高阈值的次数但未复位所述第二计数器状态时断言所述第二计数器状态的输出,其中所述第二计数器状态的输出经配置以断言所述第一计数器状态的复位输入。
[0156]在实例30中,实例I到29中任一者的标的可任选地包含,其中所述目标装置包括平行机,且所述第一类型的元件为第一类型的硬件元件,且所述至少一个其它类型的元件包含第二类型的硬件元件。
[0157]在实例31中,实例I到30中任一者的标的可任选地包含,其中所述第二类型的硬件元件可接收输入流且根据所述输入流而提供输出;且其中所述第一类型的硬件元件不接收所述输入流且根据来自所述目标装置的其它元件的输入而提供输出。
[0158]在实例32中,实例I到31中任一者的标的可任选地包含,其中所述第一类型的元件为计数器且所述第二类型的元件为状态机元件。
[0159]在实例33中,实例I到32中任一者的标的可任选地包含确定正规表达式是否为对应于所述第一类型的元件的类型;且当所述正规表达式并非对应于所述第一类型的元件的类型时,将所述正规表达式映射到所述至少一种其它类型的元件。
[0160]在实例34中,实例I到33中任一者的标的可任选地包含,其中确定正规表达式是否为对应于所述第一类型的元件的类型包含确定所述正规表达式是否为量化;且当所述正规表达式并非量化时,将所述正规表达式映射到所述至少一种其它类型的元件。
[0161]在实例35中,实例I到34中任一者的标的可任选地包含确定所述量化是否为确定性的;当所述量化为确定性时,将所述正规表达式映射到所述第一类型的元件;和当所述量化并非确定性时,将所述正规表达式映射到所述至少一种其它类型的元件。
[0162]在实例36中,实例I到35中任一者的标的可任选地包含,其中确定所述量化是否为确定性的包含确定在处理所述量化时是否可匹配所述量化的驱动表达式,且所述量化的重复表达式是否为所述量化的另一重复表达式的前缀。[0163]在实例37中,实例I到36中任一者的标的可任选地包含,其中编译包含剖析所述正规表达式以形成语法树;将所述语法树转换成自动机;将所述自动机转换成连线表;放置所述连线表的个例;和对所述连线表的个例之间的连接进行路由。
[0164]在实例38中,实例I到37中任一者的标的可任选地包含,其中所述正规表达式包括用于搜索无结构数据的准则。
[0165]在实例39中,实例I到38中任一者的标的可任选地包含,其中确定所述部分是否满足将被映射到专用元件的条件包括确定所述部分是否为确定性的。
[0166]在实例40中,实例I到39中任一者的标的可任选地包含,其中识别所述布置的一部分包含识别量化;且其中确定所述部分是否为确定性的包含确定在处理所述量化时是否可匹配所述量化的驱动表达式,和所述量化的重复表达式是否为所述量化的另一重复表达式的前缀。
[0167]实例41包含通过使用权利要求1到40中任一者的标的产生的映像来编程的平行机。
【权利要求】
1.一种计算机实施方法,所述方法用于产生对应于包含通用元件和专用元件的一组元件的机器码,所述方法包括: 确定有关系连接的运算符的布置中的一部分是否满足将被映射到专用元件的条件; 如果所述部分满足所述条件,那么将所述部分映射到专用元件;和 将有关系连接的运算符的所述布置转换成机器码。
2.根据权利要求1所述的计算机实施方法,其中所述机器码包括用于平行机的映像。
3.根据权利要求1所述的计算机实施方法,其中所述组元件包含供在处理器上执行的指令集,且其中所述专用元件包含专用指令。
4.根据权利要求1所述的计算机实施方法,其包括: 识别有关系连接的运算符的所述布置中的对应于专用元件的一部分,其中确定一部分是否满足条件,确定经识别的所述部分是否满足条件; 其中映射包含将所述布置转换成包括多个状态的自动机,其中如果所述部分满足所述条件,那么使用对应于所述专用元件的专用状态来转换所述部分;且 其中转换所述布置包含将所述自动机转换成机器码。
5.根据权利要求4所述的计算机实施方法,其中识别所述布置中的对应于专用元件的一部分包括:识别所述有关系连接的运算符中的可使用所述专用元件来实施的运算符。
6.根据权利要求4所述的计算机实施方法,其中将所述布置转换成自动机包括:将所述布置中的所述运算符中的每一者转换成所述多个状态中的一者或一者以上。
7.根据权利要求4所述的计算机实施方法,其中如果所述部分不满足所述条件,那么使用通用状态且不使用对应于专用元件的专用状态来转换所述部分,其中所述通用状态对应于所述通用元件。
8.根据权利要求4所述的计算机实施方法,其中所述部分包括第一部分,且其中如果所述布置的第二部分并未被识别为对应于专用元件,那么使用通用状态且不使用对应于专用元件的专用状态来转换所述第二部分,其中所述通用状态对应于通用元件。
9.根据权利要求1所述的计算机实施方法,其中所述组元件包含平行机的一组硬件元件,其中所述通用元件包括可编程元件且其中所述专用元件包含计数器。
10.根据权利要求9所述的计算机实施方法,其中所述可编程元件包括状态机元件。
11.根据权利要求10所述的计算机实施方法,其中所述状态机元件包含存储器单元。
12.根据权利要求11所述的计算机实施方法,其中所述存储器单元包括易失性存储器单元。
13.根据权利要求1所述的计算机实施方法,其进一步包括: 发布所述机器码。
14.根据权利要求13所述的计算机实施方法,其中发布所述机器码包含:将所述机器码加载到平行机上。
15.根据权利要求13所述的计算机实施方法,其中发布所述机器码包含:将所述机器码存储于计算机可读媒体上。
16.一种计算机可读媒体,其包含指令,所述指令在由计算机执行时致使所述计算机执行包括以下各者的操作: 识别有关系连接的运算符的布置中的对应于目标装置的专用元件的一部分,其中所述目标装置还包含通用元件; 确定所述部分是否满足将被映射到所述专用元件的条件; 将所述布置转换成包括多个状态的自动机,其中如果所述部分满足所述条件,那么使用对应于所述专用元件的专用状态来转换所述部分;和 将所述自动机转换成机器码。
17.根据权利要求16所述的计算机可读媒体,其中所述指令致使所述计算机执行包括以下各者的操作: 将源码转换成所述布置;和 发布所述机器码。
18.根据权利要求16所述的计算机可读媒体,其中确定所述部分是否满足将被映射到专用元件的条件包括:确定所述部分是否为确定性的。
19.根据权利要求18所述的计算机可读媒体,其中识别所述布置的一部分包含: 识别量化;且 其中确定所述部分是否为确定性的包含确定在处理所述量化时是否可匹配所述量化的驱动表达式。
20.根据权利要求18所述的计算机可读媒体,其中识别所述布置的一部分包含: 识别量化;且· 其中确定所述部分是否为确定性的包含确定所述量化的重复表达式是否为所述量化的另一重复表达式的前缀。
21.根据权利要求18所述的计算机可读媒体,其中识别所述布置中的一部分包含识别量化。
22.根据权利要求21所述的计算机可读媒体,其中确定所述部分是否为确定性的包含:确定在处理所述量化时是否可匹配所述量化的驱动表达式;和确定所述量化的重复表达式是否为所述量化的另一重复表达式的前缀。
23.根据权利要求22所述的计算机可读媒体,其中所述专用元件包含在所述自动机中具有对应计数器状态的计数器,且所述通用元件包含在所述自动机中具有对应状态机元件状态的状态机元件。
24.根据权利要求23所述的计算机可读媒体,其中当所述部分对应于量化且所述部分为确定性时,将所述部分实施为循环,所述循环包括所述量化的重复表达式和计数器状态,其中所述计数器状态经配置以对所述重复表达式匹配的次数计数,且其中在所述重复表达式匹配了通过所述量化指定的次数时所述计数器状态激活下游状态。
25.根据权利要求24所述的计算机可读媒体,其中所述循环通过与所述重复表达式的否定版本的匹配而退出。
26.根据权利要求24所述的计算机可读媒体,其中当所述量化可与单一数目个循环匹配时, 配置所述重复表达式以断言所述计数器状态的计数输入; 配置所述重复表达式的否定版本以复位所述计数器状态;和 配置所述计数器状态以在所述计数输入已断言了等于循环的所述数目的次数但未复位所述计数器状态时断言输出。
27.根据权利要求24所述的计算机可读媒体,其中当所述量化可与多个数目个循环匹配时, 配置所述重复表达式以断言第一计数器状态的计数输入和第二计数器状态的计数输A ; 配置所述重复表达式以断言所述第一计数器状态的复位输入和所述第二计数器状态的复位输入; 配置所述第一计数器状态以在所述第一计数器状态的所述计数输入已断言了等于所述多个数目个循环的低阈值的次数但未复位所述第一计数器状态时断言输出;和 配置所述第二计数器状态以在所述第二计数器状态的所述计数输入已断言了等于所述多个数目个循环的高阈值的次数但未复位所述第二计数器状态时断言所述第二计数器状态的输出,其中所述第二计数器状态的所述输出经配置以断言所述第一计数器状态的所述复位输入。
28.一种计算机,其包括: 存储器,其上面存储有 软件;和 处理器,其通信地耦合到所述存储器,其中所述软件在由所述处理器执行时致使所述处理器: 将正规表达式编译成用于目标装置的码,其中所述目标装置支持第一类型的元件和至少一种其它类型的元件; 其中编译包含将对应于所述第一类型的元件的第一正规表达式映射到所述第一类型的元件;且 其中编译包含将不对应于所述第一类型的元件的第二正规表达式映射到所述至少一种其它类型的元件。
29.根据权利要求28所述的计算机,其中所述目标装置包括平行机,且所述第一类型的元件为第一类型的硬件元件,且所述至少一种其它类型的元件包含第二类型的硬件元件。
30.根据权利要求29所述的计算机,其中所述第二类型的硬件元件可接收输入流并根据所述输入流提供输出;且 其中所述第一类型的硬件元件不接收所述输入流且根据来自所述目标装置的其它元件的输入而提供输出。
31.根据权利要求30所述的计算机,其中所述第一类型的元件为计数器且所述第二类型的元件为状态机元件。
32.根据权利要求28所述的计算机,其中所述软件致使所述处理器: 确定正规表达式是否为对应于所述第一类型的元件的类型;和 当所述正规表达式并非对应于所述第一类型的元件的类型时,将所述正规表达式映射到所述至少一种其它类型的元件。
33.根据权利要求32所述的计算机,其中确定正规表达式是否为对应于所述第一类型的元件的类型包含: 确定所述正规表达式是否为量化;和 当所述正规表达式并非量化时,将所述正规表达式映射到所述至少一种其它类型的元件。
34.根据权利要求33所述的计算机,其中所述软件致使所述处理器: 确定所述量化是否为确定性的; 当所述量化为确定性的时,将所述正规表达式映射到所述第一类型的元件;和 当所述量化并非确定性的时,将所述正规表达式映射到所述至少一种其它类型的元件。
35.根据权利要求34所述的计算机,其中确定所述量化是否为确定性的包含确定在处理所述量化时是否可匹配所述量化的驱动表达式,和所述量化的重复表达式是否为所述量化的另一重复表达式的前缀。
36.根据权利要求28所述的计算机,其中编译包含: 剖析所述正规表达式以形成语法树; 将所述语法树转换成自动机; 将所述自动机转换成连线表; 放置所述连线表的个例;和 对所述连线表的所述个例之间的连接进行路由。
37.根据权利要求36所述的计算机,其中所述正规表达式包括用于搜索无结构数据的准则。
38.一种系统,其包括: 计算机,其经配置以: 识别有关系连接的运算符的布置中的对应于目标装置的专用元件的一部分,其中所述目标装置还包含通用元件; 确定所述部分是否满足将被映射到所述专用元件的条件; 将所述布置转换成包括多个互连状态的自动机,其中如果第一部分满足所述条件,那么将所述部分转换成对应于所述专用元件的专用状态;和将所述自动机转换成机器码;和 用于编程平行机的装置,所述装置经配置以将所述机器码加载到所述平行机上。
39.根据权利要求38所述的系统,其中确定所述部分是否满足将被映射到专用元件的条件包括:确定所述部分是否为确定性的。
40.根据权利要求38所述的系统,其中识别所述布置的一部分包含: 识别量化;且 其中确定所述部分是否为确定性的包含确定在处理所述量化时是否可匹配所述量化的驱动表达式,和所述量化的重复表达式是否为所述量化的另一重复表达式的前缀。
41.一种通过使用根据权利要求1所述的过程产生的映像编程的平行机。
【文档编号】G06F9/45GK103547999SQ201280013886
【公开日】2014年1月29日 申请日期:2012年1月24日 优先权日:2011年1月25日
【发明者】许郡娟, 保罗·格伦迪宁 申请人:美光科技公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1