CN103547998B - 用于编译正则表达式的方法和设备 - Google Patents
用于编译正则表达式的方法和设备 Download PDFInfo
- Publication number
- CN103547998B CN103547998B CN201280012402.2A CN201280012402A CN103547998B CN 103547998 B CN103547998 B CN 103547998B CN 201280012402 A CN201280012402 A CN 201280012402A CN 103547998 B CN103547998 B CN 103547998B
- Authority
- CN
- China
- Prior art keywords
- state
- automatic machine
- netlist
- converted
- processor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
- G06F30/343—Logical level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
- G06F30/347—Physical level, e.g. placement or routing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4498—Finite state machines
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Devices For Executing Special Programs (AREA)
- Logic Circuits (AREA)
Abstract
本发明描述了用于编译程序的设备、***和方法。一个此类编译程序将源代码转换成包括状态和所述状态之间的转变的自动机,其中所述自动机中的所述状态包含对应于特殊目的硬件元件的特殊目的状态。所述编译程序将所述自动机转换成网表,且对所述网表进行放置和布线以提供用于配置目标装置的机器代码。
Description
优先权主张
本专利申请案主张2011年1月25日申请的题为“用于编译正则表达式的方法和设备(METHOD AND APPARATUS FOR COMPILING REGULAR EXPRESSIONS)”的美国临时专利申请案第61/436,013号的优先权的利益,所述美国临时专利申请案的全文特此以引用方式并入本文中。
技术领域
本发明一般来说涉及表达式处理,且更明确地说涉及用于编译正则表达式的方法和设备。
背景技术
有限状态机(FSM)(也被称作有限状态自动机、自动机或简称为状态机)为状态、状态之间的转变和动作的表示。有限状态机可用以设计数字逻辑、计算机程序,或用于平行机的映像。有限状态机为由有限数目的状态、所述状态之间的转变和输出组成的行为模型。有限状态机可表示为图,其中所述图的顶点对应于所述有限状态机的状态,且所述图的边对应于归因于到所述有限状态机的一个或一个以上输入而发生的状态之间的转变。有限状态机还可具有概率转变、模糊状态或其它异事。有限状态机具有有限内部存储器、输入特征和可选输出特征。具有输出的有限状态机可被称作有限状态转换器。
有限状态机的应用包含电子设计自动化、通信协议设计、生物学和人工智能研究,以及用以描述自然语言的文法的语言学。
发明内容
编译正则表达式可通过计算机执行,所述计算机包含上面存储有指令的存储器。所述计算机还可包含通信地耦合到所述存储器的处理器,其中所述指令在由所述处理器执行时使所述处理器将源代码转换成包括状态和所述状态之间的转变的自动机。所述自动机中的状态可包含对应于目标装置的特殊目的硬件元件的特殊目的状态。所述指令还可使所述处理器将所述自动机转换成网表且对所述网表进行放置和布线以提供用于配置目标装置的机器代码。
编译正则表达式还可通过使用一个或一个以上处理器将源代码剖析成语法树来执行。可将所述语法树转换成自动机。所述自动机可定义具有多个状态和所述多个状态之间的转变的行为模型。自动机结构可由目标硬件装置指定。可将所述自动机转换成网表。所述网表可包含多个实例,其中每一实例可对应于所述目标装置的硬件元件。可对所述实例中的每一者进行放置,包含将所述网表中的每一实例指派给所述目标装置的硬件元件。可根据所述网表来对所述硬件元件之间的连接进行布线。可创建数据编程,其中所述数据编程可用以基于放置和布线对所述目标装置编程。
编译正则表达式还可通过可编程装置执行。所述可编程装置可包含多个可编程元件,所述可编程元件包含一个或一个以上输入和一个或一个以上输出。所述可编程装置还可包含用于将所述多个可编程元件的一部分与外部电路介接的输入块和输出块。所述可编程装置还可包含将所述多个可编程元件与所述输入块和所述输出块通信地连接的多个可编程开关。一个或一个以上可编程开关的设定可选择性地控制所述多个可编程元件和所述多个可编程开关中的任两者或两者以上之间的信号路由。所述可编程装置还可包含多个寄存器,所述寄存器经配置以存储能够配置所述多个可编程元件和所述多个可编程开关的编程数据。所述编程数据可通过以下操作创建:使用一个或一个以上处理器将源代码剖析成语法树;使用所述一个或一个以上处理器将所述语法树转换成自动机,其中所述自动机定义具有多个状态和所述多个状态之间的转变的行为模型,且其中自动机结构是由目标硬件装置指定;使用所述一个或一个以上处理器将所述自动机转换成网表,其中所述网表包含多个实例,每一实例对应于目标装置的硬件元件;使用所述一个或一个以上处理器来放置所述实例中的每一者,其中放置包含将所述网表中的每一实例指派到所述目标装置的硬件元件;使用所述一个或一个以上处理器来根据所述网表对所述硬件元件之间的连接进行布线;以及基于放置和布线创建用以对所述目标装置编程的编程数据。
附图说明
图1说明根据本发明的各种实施例的平行机的实例。
图2说明根据本发明的各种实施例的实施为有限状态机引擎的图1的平行机的实例。
图3说明根据本发明的各种实施例的图2的有限状态机引擎的块的实例。
图4说明根据本发明的各种实施例的图3的块的行的实例。
图5说明根据本发明的各种实施例的图4的行的成对群组的实例。
图6说明根据本发明的各种实施例的供编译程序用以将源代码转换成经配置以对图1的平行机编程的映像的方法的实例。
图7说明根据本发明的各种实施例的可包含于用以将语法树转换成自动机的实例方法中的各种操作。
图8说明根据本发明的各种实施例的用于将语法树转换成自动机的方法。
图9说明根据本发明的各种实施例的具有特殊目的计数器状态的实例自动机。
图10说明根据本发明的各种实施例的具有特殊目的计数器状态的另一实例自动机。
图11A和11B说明根据本发明的各种实施例的实例自动机。
图12说明根据本发明的各种实施例的具有不满足无前缀条件的量化的正则表达式的实例自动机。
图13A到13C说明根据本发明的各种实施例的用于展开量化的实例自动机。
图14A和14B说明根据本发明的各种实施例的作为限制自动机的内分支度的部分的状态***。
图15A和15B说明根据本发明的各种实施例的实例网表。
图16说明根据本发明的各种实施例的具有冯诺依曼(Von Nuemann)架构的计算机的实例。
具体实施方式
以下描述和图式充分地说明了特定实施例以使所属领域的技术人员能够将其付诸实践。其它实施例可并有结构改变、逻辑改变、电改变、过程改变和其它改变。一些实施例的部分和特征可包含于其它实施例中或可替代其它实施例的部分和特征。权利要求书中所陈述的实施例涵盖了所述技术方案的所有可用等效物。
本文档尤其描述了用于将源代码(例如,正则表达式)转换成机器代码(例如,用于配置(例如,编程)平行机的映像)的编译程序。由编译程序产生的映像(输出文件)可对平行机编程以执行某些功能。在某些实例中,平行机可包含有限状态机(FSM)引擎、现场可编程门阵行(FPGA)和其变体。
图1说明目标装置(例如,平行机100的实例。平行机100可接收输入数据并基于所述输入数据提供输出。平行机100可包含用于接收输入数据的数据输入端口110和用于将输出提供到另一装置的输出端口114。数据输入端口110提供用于将输入到平行机100的数据的接口。
平行机100包含多个可编程元件,包含通用元件102和特殊目的元件112。通用元件102可包含一个或一个以上输入104和一个或一个以上输出106。可将通用元件102编程到多个状态中的一者。通用元件102的状态决定通用元件102基于给定输入将提供哪一(些)输出。也就是说,通用元件102的状态决定可编程元件将如何对给定输入起反应(例如,响应)。输入到数据输入端口110的数据可提供到所述多个通用元件102以使通用元件102对其采取行动。如下文详细论述,通用元件102的实例可包含(例如)状态机元件(SME)、计数器,和/或可配置逻辑块,以及其它可编程元件。在一实例中,SME可经编程(例如,设定)以当在数据输入端口110处接收到给定输入时提供某一输出(例如,高或“1”信号)。当在数据输入端口110处接收到不同于所述给定输入的输入时,SME可提供不同输出(例如,低或“0”信号)。在一实例中,可配置逻辑块可经设定以基于在数据输入端口110处接收到的输入来执行布尔逻辑函数(例如,“与”(AND)、“或”(OR)、“或非”(NOR)等)。稍后在本文中论述计数器的实例。特殊目的元件112可包含存储器(例如,RAM)、逻辑门、计数器、查找表、现场可编程门阵行(FPGA)和其它硬件元件。特殊目的元件112可与通用元件102交互并执行特殊目的功能。
平行机100还可包含用于将程序(例如,映像)加载到平行机100上的编程接口111。所述映像可编程(例如,设定)通用元件102的状态。也就是说,所述映像可配置通用元件102以按某一方式来对给定输入起反应。举例来说,通用元件102可经设定,以当在数据输入端口110处接收到字符“a”时输出高信号。在一些实例中,平行机100可使用时钟信号来控制通用元件102的操作的时序。在一些实施例中,在数据输入端口110处接收到的数据可包含随时间过去或一齐接收到的一组固定的数据或随时间过去而接收到的数据流。数据可从耦合到平行机100的任何来源接收或由耦合到平行机100的任何来源产生,所述任何来源例如数据库、传感器、网络等。
平行机100还包含用于将平行机100的不同元件(例如,通用元件102、数据输入端口110、输出端口114、编程接口111和特殊目的元件112)选择性地耦合在一起的多个可编程开关108。因此,平行机100包括在所述元件间形成的可编程矩阵。在一实例中,可编程开关108可将两个或两个以上元件选择性地耦合到彼此,使得通用元件102的输入104、数据输入端口110、编程接口111或特殊目的元件112可经由一个或一个以上可编程开关108而耦合到通用元件102的输出106、输出端口114、编程接口111或特殊目的元件112。因此,元件之间的信号的路由可通过设定可编程开关108来控制。尽管图1说明了给定元件与可编程开关108之间的某一数目的导体(例如,电线),但应理解,在其它实例中,可使用不同数目的导体。而且,尽管图1说明了每一通用元件102个别地耦合到可编程开关108,但在其它实例中,多个通用元件102可作为群组(例如,块202,如图2中所说明)而耦合到可编程开关108。在一实例中,数据输入端口110、数据输出端口114和/或编程接口111可实施为寄存器,以使得到寄存器的写入将数据提供到相应元件或从相应元件提供数据。
在一实例中,单一平行机100实施于一物理装置上,然而,在其它实例中,两个或两个以上平行机100可实施于单一物理装置(例如,物理芯片)上。在一实例中,多个平行机100中的每一者可包含不同的数据输入端口110、不同的输出端口114、不同的编程接口111,以及一组不同的通用元件102。此外,每一组通用元件102可对其对应输入数据端口110处的数据起反应(例如,输出高或低信号)。举例来说,对应于第一平行机100的第一组通用元件102可对与第一平行机100对应的第一数据输入端口110处的数据起反应。对应于第二平行机100的第二组通用元件102可对与第二平行机100对应的第二数据输入端口110起反应。因此,每一平行机100包含一组通用元件102,其中通用元件102的不同集合可对不同输入数据起反应。类似地,每一平行机100和对应的每一组通用元件102可提供不同输出。在一些实例中,来自第一平行机100的输出端口114可耦合到第二平行机100的输入端口110,使得用于第二平行机100的输入数据可包含来自第一平行机100的输出数据。
在一实例中,用于加载到平行机100上的映像包括用于在平行机100内设定通用元件102的状态、编程可编程开关108和配置特殊目的元件112的多个信息位。在一实例中,所述映像可被加载到平行机100上来对平行机100编程以基于某些输入而提供所要输出。输出端口114可基于通用元件102对在输入端口110处接收到的数据所起的反应来提供来自平行机100的输出。来自输出端口114的输出可包含指示给定型样的匹配的单一位、包括指示与多个型样的匹配和不匹配的多个位的字,以及对应于在给定时刻所有或某些通用元件102的状态的输出向量。
平行机100的实例用途包含型样辨识(例如,语音辨识、图像辨识等)、信号处理、成像、计算机视觉、密码学和其它。在某些实例中,平行机100可包括有限状态机(FSM)引擎、现场可编程门阵行(FPGA)和其变体。此外,平行机100可为较大装置中的组件,所述较大装置例如计算机、传呼机、蜂窝式电话、个人备忘记事本、便携式音频播放器、网络装置(例如,路由器、防火墙、交换机或其任何组合)、控制电路、摄影机等。
图2到5说明实施为有限状态机(FSM)引擎200的另一平行机。在一实例中,FSM引擎200包括有限状态机的硬件实施方案。因此,FSM引擎200实施对应于FSM中的多个状态的多个可选择性地耦合的硬件元件(例如,可编程元件)。类似于FSM中的状态,硬件元件可分析输入流且基于所述输入流来激活下游硬件元件。
FSM引擎200包含多个可编程元件,包含通用元件和特殊目的元件。通用元件可经编程以实施许多不同功能。这些通用元件包含SME204、205(展示于图5中),所述SME204、205阶层式地组织成行206(展示于图3和4中)和块202(展示于图2和3中)。为了在阶层式组织的SME204、205之间路由信号,使用可编程开关的阶层,所述阶层包含块间开关203(展示于图2和3中)、块内开关208(展示于图3和4中)和行内开关212(展示于图4中)。SME204、205可对应于通过FSM引擎200实施的FSM的状态。如下文所描述,可通过使用可编程开关将SME204、205耦合在一起。因此,可通过对SME204、205编程以对应于状态的功能且通过将SME204、205选择性地耦合在一起以对应于FSM中的状态之间的转变来在FSM引擎200上实施FSM。
图2说明实例FSM引擎200的全图。FSM引擎200包含多个块202,所述块可与可编程块间开关203选择性地耦合在一起。另外,块202可选择性地耦合到用于接收信号(例如,数据)以及将数据提供到块202的输入块209(例如,数据输入端口)。块202还可选择性地耦合到用于将来自块202的信号提供到外部装置(例如,另一FSM引擎200)的输出块213(例如,输出端口)。FSM引擎200还可包含编程接口211以将程序(例如,映像)加载到FSM引擎200上。所述映像可编程(例如,设定)SME204、205的状态。也就是说,所述映像可配置SME204、205以按某一方式对输入块209处的给定输入起反应。举例来说,SME204可经设定,以当在输入块209处接收到字符“a”时输出高信号。
在一实例中,输入块209、输出块213和/或编程接口211可实施为寄存器,以使得到寄存器的写入将数据提供到相应元件或从相应元件提供数据。因此,来自存储于对应于编程接口211的寄存器中的映像的位可加载到SME204、205上。尽管图2说明了块202、输入块209、输出块213和块间开关203之间的某一数目的导体(例如,电线、迹线),但应理解,在其它实例中,可使用更少或更多的导体。
图3说明块202的实例。块202可包含多个行206,所述行可与可编程块内开关208选择性地耦合在一起。另外,行206可通过块间开关203而选择性地耦合到另一块202内的另一行206。在一实例中,包含缓冲器201以控制去往/来自块间开关203的信号的时序。行206包含多个SME204、205,所述多个SME204、205被组织成本文中被称作成对群组(group of two;GOT)210的元件对。在一实例中,块202包括十六(16)个行206。
图4说明行206的实例。GOT210可通过可编程行内开关212而选择性地耦合到所述行206内的其它GOT210和任何其它元件224。GOT210也可通过块内开关208而耦合到其它行206中的其它GOT210,或通过块间开关203而耦合到其它块202中的其它GOT210。在一实例中,GOT210具有第一输入214和第二输入216以及输出218。第一输入214耦合到GOT210的第一SME204,且第二输入214耦合到GOT210的第二SME204。
在一实例中,行206包含第一多个行互连导体220和第二多个行互连导体222。在一实例中,GOT210的输入214、216可耦合到一个或一个以上行互连导体220、222,且输出218可耦合到一个行互连导体220、222。在一实例中,第一多个行互连导体220可耦合到行206内的每一GOT210的每一SME204。第二多个行互连导体222可耦合到行206内的每一GOT210的一个SME204,但不可耦合到GOT210的另一SME204。在一实例中,所述第二多个行互连导体222的前一半可耦合到一行206内的SME204的前一半(来自每一GOT210的一个SME204),且所述第二多个行互连导体222的后一半可耦合到一行206内的SME204的后一半(来自每一GOT210的另一SME204)。所述第二多个行互连导体222与SME204、205之间的有限连接性在本文中被称作“对等性”。
在一实例中,行206还可包含特殊目的元件224,例如计数器、可编程布尔逻辑元件、现场可编程门阵行(FPGA)、专用集成电路(ASIC)、可编程处理器(例如,微处理器)和其它元件。另外,在一实例中,特殊目的元件224在不同行206中为不同的。举例来说,一块202中的行206中的四个可包含布尔逻辑作为特殊目的元件224,而一块202中的其它八个行206可包含计数器作为特殊目的元件224。
在一实例中,特殊目的元件224包含计数器(本文中也被称作计数器224)。在一实例中,计数器224包括12位可编程递减计数器。所述12位可编程计数器224具有计数输入、重置输入,和零计数输出。所述计数输入在被断言时使计数器224的值递减一。所述重置输入在被断言时使计数器224加载来自相关联的寄存器的初始值。对于12位计数器224,可加载高达12位的数字作为初始值。当计数器224的值递减到零(0)时,断言所述零计数输出。计数器224也具有至少两种模式,脉冲和保持。当将计数器224设定为脉冲模式时,在计数器224递减到零时的第一时钟循环期间断言零计数输出,且在接下来的时钟循环时,即使断言了计数输入,也不再断言零计数输出。此状态继续,直到重置输入被断言而重置计数器224为止。当将计数器224设定为保持模式时,在计数器224递减到零时的第一时钟循环期间断言零计数输出,且在断言了计数输入时保持为经断言的,直到重置输入被断言而重置计数器224为止。
图5说明GOT210的实例。GOT210包含第一SME204和第二SME205,其具有输入214、216且具有其耦合到OR门230和3比1多路复用器242的输出226、228。3比1多路复用器242可经设定以将GOT210的输出218耦合到第一SME204、第二SME205或OR门230。可使用OR门230将输出226、228两者耦合在一起以形成GOT210的共同输出218。在一实例中,如上文所论述,第一SME204和第二SME205展现出对等性,其中第一SME204的输入214可耦合到行互连导体222中的一些,且第二SME205的输入216可耦合到其它行互连导体222。在一实例中,可通过设定开关240中的任一者或两者来使GOT210内的两个SME204、205级联和/或循环回到其自身。可通过将SME204、205的输出226、228耦合到另一SME204、205的输入214、216而使SME204、205级联。可通过将输出226、228耦合到其自身的输入214、216而使SME204、205循环回到其自身。因此,第一SME204的输出226可不耦合到第一SME204的输入214和第二SME205的输入216中的任一者,或可耦合到所述输入中的一者或两者。
在一实例中,状态机元件204、205包括与检测线234并联耦合的多个存储胞元232、例如动态随机存取存储器(DRAM)中所常用的那些存储胞元。一个此类存储胞元232包括可设定为数据状态的存储胞元,所述数据状态例如对应于高或低值(例如,1或0)的状态。存储胞元232的输出耦合到检测线234,且存储胞元232的输入基于数据流线236上的数据而接收信号。在一实例中,对数据流线236上的输入解码以选择存储胞元232中的一者。选定的存储胞元232将其所存储的数据状态作为输出提供到检测线234上。举例来说,在数据输入端口209处接收到的数据可提供到解码器(未图示),且所述解码器可选择数据流线236中的一者。在一实例中,所述解码器可将ACSII字符转换成256位的1。
因此,当存储胞元232被设定为高值且数据流线236上的数据对应于存储胞元232时,存储胞元232输出高信号到检测线234。当数据流线236上的数据对应于存储胞元232且存储胞元232被设定为低值时,存储胞元232输出低信号到检测线234。在检测线234上的来自存储胞元232的输出通过检测电路238来感测。在一实例中,输入线214、216上的信号将相应检测电路238设定为活动或不活动状态。当设定为不活动状态时,检测电路238在相应输出226、228上输出低信号,而不管相应检测线234上的信号。当设定为活动状态时,当检测到来自相应SME204、205的存储胞元234中的一者的高信号时,检测电路238在相应输出线226、228上输出高信号。当处在活动状态时,当来自相应SME204、205的所有存储胞元234的信号为低时,检测电路238在相应输出线226、228上输出低信号。
在一实例中,SME204、205包含256个存储胞元232,且每一存储胞元232耦合到不同的数据流线236。因此,SME204、205可经编程以当数据流线236中的选定的一者或一者以上上面具有高信号时输出高信号。举例来说,SME204可使第一存储胞元232(例如,位0)设定为高且使所有其它存储胞元232(例如,位1-255)设定为低。当相应检测电路238处于活动状态时,当对应于位0的数据流线236上面具有高信号时,SME204在输出226上输出高信号。在其它实例中,SME204可经设定,以当通过将适当的存储胞元232设定为高值而使多个数据流线236中的一者上面具有高信号时输出高信号。
在一实例中,可通过从相关联的寄存器读取位来将存储胞元232设定为高值或低值。因此,可通过将由编译程序产生的映像存储到寄存器中且将寄存器中的位加载到相关联的存储胞元232中来对SME204编程。在一实例中,由编译程序产生的映像包含高和低(例如,1和0)位的二进制映像。所述映像可通过将SME204、205级联而对FSM引擎200编程以操作为FSM。举例来说,可通过将检测电路238设定为活动状态而将第一SME204设定为活动状态。第一SME204可经设定,以当对应于位0的数据流线236上面具有高信号时输出高信号。第二SME205最初可设定为不活动状态,但可经设定以在活动时当对应于位1的数据流线236上面具有高信号时输出高信号。可通过设定第一SME204的输出226以耦合到第二SME205的输入216来将第一SME204与第二SME205级联。因此,当在对应于位0的数据流线236上感测到高信号时,第一SME204在输出226上输出高信号且将第二SME205的检测电路238设定为活动状态。当在对应于位1的数据流线236上感测到高信号时,第二SME205在输出228上输出高信号以激活另一SME205或用于来自FSM引擎200的输出。
图6说明供编译程序用以将源代码转换成经配置以对平行机编程的映像的方法600的实例。方法600包含:将源代码剖析成语法树(框602);将语法树转换成自动机(框604);优化自动机(框606);将自动机转换成网表(框608);将网表放置于硬件上(框610);对网表进行布线(框612);以及发布所得映像(框614)。
在一实例中,所述编译程序包含应用编程接口(API),所述API允许软件开发人员创建用于在FSM引擎600上实施FSM的映像。所述编译程序提供用以将源代码中的一组输入的正则表达式转换成经配置以对FSM引擎600编程的映像的方法。所述编译程序可通过用于具有冯诺依曼架构的计算机的指令来实施。这些指令可使计算机上的处理器实施所述编译程序的功能。举例来说,所述指令在由处理器执行时可使处理器对可被处理器存取的源代码执行如框602、604、606、608、610、612和614中所描述的动作。具有冯诺依曼架构的实例计算机展示于图16中且在下文描述。
在一实例中,源代码描述用于识别一群符号内的符号的型样的搜索字符串。为了描述所述搜索字符串,源代码可包含多个正则表达式(regex)。正则表达式可为用于描述符号搜索型样的字符串。正则表达式广泛用在各种计算机领域中,例如程序设计语言、文本编辑器、网络安全和其它领域。在一实例中,由编译程序支持的正则表达式包含用于无结构数据的搜索的搜索准则。无结构数据可包含以下数据,其为自由形式的且无索引施加于数据内的字。字可包含数据内的字节(可打印和不可打印)的任何组合。在一实例中,编译程序可支持用于实施正则表达式的多种不同的源代码语言,包含Perl(例如,Perl相容正则表达式(PCRE))、PHP、Java和.NET语言。
返回参看图6,在框602处,编译程序可剖析源代码以形成有关系连接的算子的布置,其中不同类型的算子对应于由源代码实施的不同功能(例如,由源代码中的正则表达式实施的不同功能)。剖析源代码可产生所述源代码的一般表示。在一实例中,所述一般表示包括源代码中的呈被称为语法树的树形图形式的正则表达式的经编码表示。本文中所描述的实例将所述布置称为语法树(也被称为“抽象语法树”),然而,在其它实例中,可使用具体语法树或其它布置。
由于如上文所提及,编译程序可支持多种语言的源代码,因此,不管是何种语言,剖析都会将源代码转换成非语言特定表示,例如语法树。因此,由编译程序进行的其它处理(框604、606、608、610)可从一共同输入结构来起作用,而不管源代码的语言。
如上所述,语法树包含有关系连接的多个算子。语法树可包含多种不同类型的算子。也就是说,不同算子可对应于通过源代码中的正则表达式实施的不同功能。
在框604处,将语法树转换(例如,变换)成自动机。在一实例中,自动机包括FSM的软件模型,且可因此分为确定性或非确定性。确定性自动机在给定时间具有单一执行路径,而非确定性自动机具有多个同时的执行路径。自动机包含可通过节点表示的多个状态。为了将语法树转换成自动机,将语法树中的算子以及算子之间的关系转换成状态(通过节点表示),其具有自动机中的状态之间的转变(例如,通过有向边表示)。在一实例中,可部分基于FSM引擎200的硬件来转换所述自动机。
在一实例中,用于自动机的输入符号包含字母、数字0-9和其它可打印字符的符号。在一实例中,所述输入符号通过字节值0到255(包含在内)来表示。在一实例中,自动机可表示为有向图,其中所述图的节点对应于状态集合。在一实例中,被自动机接受(例如,匹配)的数据为在按顺序地输入到自动机中时将达到最终状态的所有可能字符数据的集合。被自动机接受的数据中的每一符号沿从开始状态到一个或一个以上最终状态的路径而行。
在一实例中,自动机包括通用状态以及特殊目的状态。所述通用状态和特殊目的状态对应于受目标装置支持的通用元件和特殊目的元件,编译程序正为所述目标装置产生机器代码。不同类型的目标装置可支持不同类型的通用元件以及一种或一种以上不同类型的特殊目的元件。通用元件通常可用以实施广泛范围的功能,而特殊目的元件通常可用以实施较窄范围的功能。然而,在一实例中,特殊目的元件可在其窄的功能范围内实现(例如)较大效率。因此,特殊目的元件可用以(例如)减少在目标装置中实施某些功能所需的机器循环或机器资源。在一些实例中,目标装置仅支持特殊目的元件,其中支持多种不同类型的特殊目的元件。
在编译程序正产生用于FSM引擎200的机器代码的实例中,通用状态可对应于SME204、205,且通用状态因此在本文中被称作“SME状态”。此外,当编译程序正产生用于FSM引擎600的机器代码时,特殊目的状态可对应于计数器224且因此在本文中被称作“计数器状态”。在一实例中,自动机中的SME状态1:1映射到FSM引擎200中的SME(例如,SME204、205),不映射到SME的自动机的开始状态除外。计数器224可能或可能不1:1映射到计数器状态。
在一实例中,在自动机中可使用输入符号范围外的特殊转变符号。这些特殊转变符号可用以(例如)使得能够使用特殊目的元件224。此外,特殊转变符号可用以提供在不同于输入符号的其它事物上发生的转变。举例来说,特殊转变符号可指示当启用第二状态和第三状态两者时将启用(例如,转变到)第一状态。因此,当激活第二状态和第三状态两者时激活第一状态,且到第一状态的转变并非直接取决于输入符号。显著地,指示在启用第二状态和第三状态两者时将启用第一状态的特殊转变符号可用以将(例如)通过布尔逻辑执行的布尔AND函数表示为特殊目的元件224。在一实例中,可使用特殊转变符号来指示计数器状态已达到零,且因此转变到下游状态。
在一实例中,从语法树产生的自动机为均齐自动机(homogeneous automaton)。均齐自动机是对一般自动机定义的限制。所述限制要求进入一状态的所有转变都必须发生在同一(些)输入符号上。均齐自动机满足以下条件:对于任两个状态,q1和q2,如果r∈δ(q1)∩δ(q2),那么表示S1={a|a∈∑,r∈δ(q1,a)},S2={a|a∈∑,r∈δ(q2,a)}。S1为允许q1转变到r的符号集合;且S2为允许q2转变到r的符号集合。在此,S1=S2,也就是说,如果状态q1和状态q2均转变到状态r,那么均齐限制是转变必须发生在同一(些)符号上。
关于语法树转换成自动机的额外细节,参见下文参看图7所作的论述。
在框606处,在建构了自动机之后,优化自动机以尤其减少其复杂性和大小。可通过组合冗余状态来优化自动机。
在框608处,将自动机转换成网表。将自动机转换成网表是将自动机的状态映射到FSM引擎200的硬件元件(例如,SME204、205、GOT210、特殊目的元件224)的实例,且确定所述实例之间的连接。在一实例中,网表包括多个实例,每一实例对应于(例如,表示)FSM引擎200的硬件元件。每一实例可具有用于连接到另一实例的一个或一个以上连接点(本文中也被称作“端口”)。网表还包括实例的端口之间的多个连接,所述多个连接对应于(例如,表示)用以耦合对应于所述实例的硬件元件的导体。在一实例中,网表包括对应于不同类型的硬件元件的不同类型的实例。举例来说,网表可包含对应于通用硬件元件的通用实例以及对应于特殊目的硬件元件的特殊目的实例。作为一实例,通用状态可转换成通用实例,且特殊目的状态可转换成特殊目的实例。在一实例中,通用实例可包含用于SME204、205的SME实例以及用于包括一群SME的硬件元件的SME群组实例。在一实例中,SME群组实例包含对应于GOT210的GOT实例;然而,在其它实例中,SME群组实例可对应于包括一群三个或三个以上SME的硬件元件。特殊目的实例可包含用于计数器224的计数器实例和用于逻辑元件224的逻辑实例。由于一GOT210包含两个SME204、205,因此一GOT实例含有两个SME实例。
为创建网表,将自动机中的状态转换成网表中的实例,除了开始状态不具有对应实例之外。将SME状态转换成GOT实例,且将计数器状态转换成计数器实例。另外,针对从对应于第一实例的状态到对应于第二实例的状态的转变产生从第一实例到第二实例的对应连接。由于FSM引擎200中的SME204、205分组到被称作GOT210的对中,因此编译程序可将SME状态分组到GOT实例中的对中。归因于GOT210的物理设计,并非所有SME实例都可一起成对以形成GOT210。因此,编译程序确定在GOT210中可将哪些SME状态一起映射,且接着基于所述确定将SME状态成对到GOT实例中。下文参看下文的图15A和15B来论述关于将自动机转换成网表的实例方法的额外细节。
在框610处,一旦已产生网表,便对所述网表进行放置以针对所述网表的每一硬件元件实例选择目标装置的特定硬件元件(例如,SME204、205、其它元件224)。根据本发明的一实施例,放置是基于针对硬件元件的一般输入和输出约束来选择每一特定硬件元件。
放置可能是个难题且通常通过使用试探法来解决。它可使用多种方法来执行,例如力导向技术、分割技术、模拟退火,或上述技术的组合。
在一实例中,可使用两种方法来解决大组合式优化问题;这些方法为模拟退火和多级超图分割。这些方法之间的权衡为精确度对速度。模拟退火可产生极高质量的放置,但极耗费中央处理单元(CPU)时间。相比之下,超图分割可快多个数量级,但倾向于产生不及最佳的放置。在一实例中,模拟退火可用以确保满足目标硬件装置的需要的高质量放置。在另一实例中,超图分割可用作第一级,其后跟着模拟退火操作以细化由超图分割级产生的放置。在某一实例中,使用模拟退火与多级超图分割两者的组合以便利用每一次试探法的强度。
在框612处,对经放置的网表进行布线以确定可编程开关(例如,块间开关203、块内开关208和行内开关212)的设定以便将选定硬件元件耦合在一起以实现网表所描述的连接。在一实例中,所述可编程开关的设定是通过确定FSM引擎200的将用以连接选定硬件元件的特定导体来确定。布线可能要考虑比框610处的放置多的关于硬件元件之间的连接的特定限制。因此,布线可能要调整如由全局放置确定的一些硬件元件的位置,以便在给出对FSM引擎200的导体的实际限制的情况下进行适当连接。
一旦对网表进行了放置和布线,便可将经放置和经布线的网表转换成用于对FSM引擎200编程的多个位。所述多个位在本文中被称作映像。
在一些实例中,在框608处将自动机转换成网表之前,将自动机***成多个较小的自动机,且在框608处将每一较小的自动机个别地转换成网表。由于在框610处的放置的复杂性随着实例数目增加而增加,因此将自动机***成多个较小的自动机且将较小的自动机转换成个别网表可提供用于在框610和框612处进行放置和布线的较小网表。因此,放置较小网表可帮助减少确定可接受的配置所需的时间。在一实例中,使用图论将自动机***成多个较小的自动机。可接着将每一较小的自动机个别地转换成网表(框608),且放置(框610)于所指派区域内。因此,可划分可用区域并将其指派给不同网表,其中每一网表个别地放置于它的所指派部分中。如上所述,可用区域的一些部分可保持为未经指派的,且因此可用于放置其它网表。在一实例中,从较小自动机形成的每一网表可具有并行地确定的配置以便减少总处理时间。
在框614处,由编译程序发布映像。所述映像包括用于对FSM引擎200的特定硬件元件和/或可编程开关编程的多个位。在映像包括多个位(例如,0和1)的实施例中,映像可被称作二进制映像。所述位可加载到FSM引擎200上以对SME204、205、特殊目的元件224和可编程开关的状态进行编程,以使得经编程的FSM引擎200实施具有通过源代码描述的功能性的FSM。放置(框610)和布线(框612)可将在FSM引擎200中的特定位置处的特定硬件元件映射到自动机中的特定状态。因此,映像中的位可对特定硬件元件和/或可编程开关编程以实施所要功能。在一实例中,可通过将机器代码保存到计算机可读媒体来发布映像。在另一实例中,可通过在显示装置上显示映像来发布映像。在又一实例中,可通过将映像发送到另一装置(例如,用于将映像加载到FSM引擎2()()上的编程装置)来发布映像。在再一实例中,可通过将映像加载到平行机(例如,FSM引擎200)上来发布映像。
在一实例中,可通过将来自映像的位值直接加载到SME204、205和其它硬件元件224或通过将映像加载到一个或一个以上寄存器中且接着将来自所述寄存器的位值写入到SME204、205和其它硬件元件224来将映像加载到FSM引擎200上。在一实例中,FSM引擎200的硬件元件(例如,SME204、205、其它元件224、可编程开关203、208、212)经存储器映射,以使得计算机(例如,耦合到所述计算机或与所述计算机集成的编程装置)可通过将映像写入到一个或一个以上存储器地址而将映像加载到FSM引擎200上。
图7说明可包含于供编译程序用以将语法树转换成自动机的实例方法604中的各种额外操作。方法604可包含用于***符号(710)、处理所述语法树以在目标装置内操作(720)、对语法树元素分类(730)以及替换非确定性算子(740)的操作。图7内所描绘的方法604说明可在一个或一个以上语法树转换成一个或一个以上自动机期间执行的各种操作。图7内所描绘的操作的次序仅为说明性的;可按各种次序来执行所述操作。另外,在某些实例中,可使用不同操作组合。
在一实例中,方法700在将语法树转换成自动机的同时将特殊转变符号***到自动机中。在一种此类实例中,特殊转变符号对应于不1:1映射到自动机状态的算子。如上文所提及,特殊转变符号可预留给布尔运算、计数器和数据结束函数以及其它事物。
在720处,方法700可包含用以鉴于目标硬件装置的约束来调整语法树的操作。在一实例中,目标硬件装置(例如,FSM引擎200)的约束可将限制强加于自动机的结构上。在此些约束强加限制的情形中,编译程序可包含在转换级处用以调整在自动机内创建的状态和/或转变以便遵照硬件约束的操作。
在730处,方法700可包含用以使用一组属性对每一语法树分类的操作。在一实例中,可使用例如Glushkov的方法等的标准技术中的一者来对操作分类。
在740处,方法700可包含用以用等效的确定性算子替换语法树的非确定性算子的操作。在一实例中,可使用计数器结合标准可编程元件来实施某些类型的非确定性算子,例如循环。在一实例中,如果非确定性算子不适合于用特殊目的硬件元件(例如,计数器)来实施,那么可展开非确定性算子。展开算子可通过串行化对应于非确定性算子的状态的所有可能组合来实现。
某些正则表达式在转换成自动机时可导致大量状态。大量状态可使用大量通用元件102来实施。为了减少状态的数目且因此减少所使用的通用元件102的数目,可使用特殊目的硬件元件112来实施某些正则表达式。举例来说,在转换成标准通用元件102时可能需要大量状态的一种正则表达式为量化表达式。量化表达式对应于重复一个或一个以上表达式许多次的循环结构。量化表达式可被展开并用大量通用状态来连续地实施。然而,在一实例中,可使用例如计数器等特殊目的硬件元件(例如,其它元件112)来利用量化表达式中的重复表达式以减少用以实施量化表达式的状态的数目。
量化在此项技术中为众所周知的,且用以描述重复型样。作为一实例,“A(B){n1,n2}C”为一般正则表达式,其中A、B和C为子表达式,且“(B){n1,n2}”包括量化。如本文中所描述,使用大写字母来表示正则表达式或正则表达式的一部分(例如,子表达式)。可将双引号添加到正则表达式或子表达式周围以避免混淆。因此,描述表达式的大写字母可对应于用于多个输入符号的搜索字符串。举例来说,表达式“A”可对应于输入字符串“abbc”。
此外,应理解,术语表达式和子表达式在本文中仅用于关系描述(例如,子表达式为表达式的一部分),且术语表达式和子表达式不应限于任何特定长度、语法或字符数目。明确地说,源代码可包含大量字符(包含元字符和搜索字符),其中整组字符或其任何个别部分可被视为“表达式”。举例来说,以下各者中的每一者可被视为表达式:“a(bb|d?){5,20}c”、“(b){0,10}”、“(b|d)”和“b”。
将一量化以正则表达式表达为“(B){n1,n2}”,其中B为子表达式,且n1和n2为指定允许前面的子表达式出现多少次的整数。B在本文中被称作重复子表达式,因为B为重复了由n1和n2指定的次数的子表达式。为了匹配量化“(B){n1,n2}”,必须匹配重复子表达式Bn1到n2数目次。举例来说,正则表达式“(B){5,7)”将要求子表达式B匹配5、6或7次。在正则表达式“A(B){n1,n2}C”中,子表达式A在本文中被称作驱动表达式,因为子表达式A在匹配时转变到量化。另外,为了继续重复和递增针对所述量化的计数,必须连续地匹配所述量化的重复子表达式。也就是说,当在所述量化的给定循环期间不匹配重复子表达式时,所述量化结束。在一实例中,符号“?”也对应于量化,其中在“?”之前的符号可被识别一次或零次。
当目标装置为FSM引擎200时,方法800可识别某些量化并将所述量化映射到FSM引擎200上的计数器224。通过计数器224实施某些量化可导致优于通过状态机元件204、205实施量化的效率。因此,可简化针对FSM引擎200的自动机和所得映像。举例来说,实施量化的语法树部分可能需要大量SME204、205来实施。然而,在一实例中,这些量化中的一些可使用计数器224来实施,计数器224具有比SME204、205所需要的状态少的状态。
在框802处,编译程序识别对应于可能通过FSM引擎200中的计数器224实施的量化的语法树部分。如果所述语法树部分不对应于量化,那么方法800前进到框803,在框803处,将所述部分转换成用于通过SME204、205实施的通用状态。如果所述语法树部分确实对应于量化,那么进一步分析所述量化以确定是否可通过计数器224来实施所识别的部分。
在作出是否有可能通过计数器224来实施量化的确定之前,如果写成£(B)的型样“B”的语言(也就是说,“B”匹配的所有字符串)包含空字符串,那么“B{n1,n2}”的量化重写为“B′{0,n2}”,其中B′为B的非空字符串版本,£(B′)=£(B)-Φ。举例来说,“(bc|){10,20}”可重写为“(bc){0,20}”,因为这些正则表达式接受完全相同的数据。因此,对于给定的量化B{n1,n2},根据以下条件,所述量化可能通过计数器来实施(方法前进到框804)或者通过SME来实施且无计数器(方法前进到框808):
1)当(n1=0,n2=-1)时,将以SME204、205来展开所述量化且无计数器224(框808)。在此,不需要计数器224。
2)当(n1=1,n2=-1)时,将以SME204、205来展开所述量化且无计数器224(框808)。在此,不需要计数器224。
3)当(n1>1,n2=-1)时,所述量化将***成两个正则表达式B{n1-1}和B+,因为B{n,-1}等于B{n1-1}B+。可因此可能通过计数器来实施量化B{n1-1}(框804),而将以SME204、205来实施B+且无计数器224(框808)。对于B+,不需要计数器224。
4)当(n1=0,n2>0)时,将所述量化修改成(B{1,n2})?,因为(B{1,n2})?等于B{0,n2}。可因此可能通过计数器224来实施不可空B{1,n2}(框804)。
5)当(n1>0,n2>0)时,可能通过计数器224将所述量化实施为B{n1,n2}(框804)。
总言之,在不修改的情况下可能通过计数器224实施(框804)的量化可被写成B{n1,n2},其中B为不可空的,n1>0、n2>0且n1≤n2。
在框804处,一旦编译程序已识别了可能通过计数器224实施的量化,所述编译程序便确定语法树的对应于经识别部分的一部分是否为确定性的。当所述经识别部分为确定性时,可通过一个或一个以上计数器224来实施所述经识别部分,且方法800前进到框806和807,在框806和807处,将所述经识别部分转换成一个或一个以上计数器状态以及一个或一个以上SME状态。当所述经识别部分为非确定性时,不使用计数器224来实施所述经识别部分,且方法800前进到框808,在框808处,如下文参看图13所描述,使用一个或一个以上SME状态来展开所述经识别部分。
大体上,框806和框808、810对应于将量化转换成自动机的两种方式。在框806处,使用一个或一个以上计数器状态来转换所述量化,可能结合一个或一个以上SME状态以将所述量化实施为循环。在框808、810处,通过“展开”所述量化来转换所述量化,所述过程包含使用SME状态且无计数器状态。展开包括通过非量化语法来重写所述量化。举例来说,正则表达式“(b|c){1,2}”可展开为“(b|c)(b|c)?”。展开的优点包含(1)所得自动机为有向非循环图(DAG)且可易于分析和实施,以及(2)所得自动机可通过通用元件(尤其是状态机元件)而非特殊目的元件来实施。然而,用以实施展开量化的通用状态且因此状态机元件的数目与n1和n2成线性关系。因此,当n1或n2为大数目时,状态的数目可为大的。明确地说,现实资源为有限的,因此,在一些实例中,此展开技术仅用于有限类别的量化。在下文关于框808、810以及图13A-C来提供关于展开量化的更多细节。
然而,当目标装置具有经设计以实施计数功能的特殊目的元件(例如,计数器224)时,在某些情况下可避免展开。此方法的优点为在自动机中需要重复表达式的较少副本,且副本的数目与n1和n2无关。因此,可节省大量资源。举例来说,可使用一个或一个以上计数器224来通过用重复表达式和所述一个或一个以上计数器224创建循环来实施量化。每当匹配重复表达式,计数器224便可递增(或递减)。可因此重新激活重复表达式以搜索另一匹配。当计数器224已递增(或递减)了等于所述量化所规定的次数时,计数器224可在所述量化之后激活所述状态。因此,可通过较少SME204、205来实施所述量化,因为重复使用了用以实施重复表达式的SME。然而,归因于整个自动机(例如,对应于整个语法树)的平行性(也就是说,可同时为活动的多个状态),在一些实例中,计数器224可仅用于对应于整个自动机的确定性部分的量化。
图9说明转换成自动机900的正则表达式的实例,所述自动机900使用特殊目的计数器状态902来实施量化。自动机900对应于正则表达式“A(B){n1,n1}C”,其中所述量化的两个计数值(例如,n1、n2)为相等的。由于两个计数值为相等的,因此使用单个计数器224来实施所述量化。如图9中所展示,自动机900可表示为有向图,其中所述图的节点对应于一组状态。
正则表达式“A(B){n1,n1}C”转换成若干SME状态904、906、910、908和计数器状态902。SME状态904、906、908、910对应于子表达式“A”、“B”和“C”。SME状态904、906、910、908可通过SME204、205来实施,而计数器状态902可通过计数器224来实施。当在FSM引擎200上实施自动机910时,对应于计数器状态902的计数器224最初加载有值n1且经设定以在计数器224中的值达到零时断言零计数输出。当n1等于n2时,计数器224可被设定为停止0和脉冲输出模式,这表示一旦计数器224的值达到零,计数器224便断言其输出,且计数器224将维持于零且不发出任何信号直到重置计数器224为止。
自动机900在状态904处开始且在匹配子表达式“A”后即刻转变到状态906。当在状态906处,每当匹配子表达式“B”,便激活计数器状态902的IN端口,且计数器状态902递减一。另外,每当匹配子表达式“B”,状态906便激活其自身以及激活状态910。当计数器状态902达到零时,激活输出,且自动机900将接着搜索子表达式“C”。在接下来的循环中,将出现两种情形:第一种情形在匹配“~B”时出现。当匹配“~B”时,重置计数器状态902且将其值往回设定到n1。因此,下次匹配子表达式“A”,过程便从状态904开始。在第二种情形中,状态906的自循环仍在活动中,且在匹配子表达式“B”时继续触发计数器902的IN端口。由于计数器状态902是以脉冲模式配置的,因此尽管状态906的自循环仍在活动中,但计数器状态902将不会再次激活其输出。
子表达式“B”的否定版本在本文中也被称作“~B”。在一实例中,子表达式“B”的否定版本用以激活计数器状态902的重置端口。这是因为,由于“B”是量化“(B){n1,n1}”的重复表达式,因此当在输入处接收到不同于B的任何事物(例如,“B”的否定版本)(一旦已激活了状态906),那么所述量化结束且因此重置计数器。因此,一旦激活了状态910,便重置计数器状态902,且当匹配子表达式“B”的否定版本时,便不匹配所述量化。在一实例中,使用标准自动机理论来否定重复表达式。
尽管说明并描述了当n1等于n2时通过单个计数器状态224实施量化,但应认识到,多个计数器224可级联以考虑比由单个计数器224支持的数目大的数目。
图10说明转换成自动机1000的正则表达式的另一实例,所述自动机1000使用多个特殊目的计数器状态1002、1004来实施具有量化的正则表达式。自动机1000对应于正则表达式“A(B){n1,n2}C”,其中n1小于n2。使用两个计数器状态1002、1004,因为在量化“(B){n1,n2}”中n1小于n2。计数器状态1002、1004被配置为停止0和保持模式,这表示当计数器状态1002、1004达到零时,计数器状态1002、1004激活其输出,且在重置计数器状态1002、1004之前,计数器状态1002、1004维持于零且每当激活IN端口便保持激活其输出。在此实例中,从计数器状态1002到计数器状态1004的等待时间占用了两个循环。
计数器状态1002最初设定为n1,且计数器状态1004最初设定为n2。当匹配子表达式“A”时,自动机从状态1006转变到状态1008。一旦激活了状态1008,每当匹配子表达式“B”,便激活计数器状态1002和计数器状态1004两者的IN端口。因此,计数器状态1002和计数器状态1004两者均递减一。当计数器状态1002达到零时,激活其输出,且自动机1000接着搜索子表达式“C”的匹配且激活状态1010。一旦子表达式“B”已被匹配了n1次,计数器状态1004的值便为n2-n1。之后,每当匹配子表达式“B”,便激活计数器状态1002的IN端口,且计数器状态1002的值维持于零,且其输出仍保持激活。同时,计数器状态1004继续递减。当子表达式“B”被匹配了n2次时,计数器状态1004也达到零,且激活其输出,从而驱动了计数器状态1002的重置端口。由于计数器状态1004到计数器状态1002的等待时间为两个循环,因此计数器状态1002继续激活其输出到状态1010。在下一个循环中,从计数器状态1004的输出重置计数器状态1002,且不从计数器状态1002断言输出。在接下来的循环中,将出现两种情形。在第一种情形中,匹配“~B”。计数器状态1002和计数器状态1004两者均通过状态1012重置,且其值分别设定为n1和n2。因此,下次状态1006为活动的且下次匹配子表达式“A”时,激活状态1008,且计数器状态1002、1004再次递减。在第二种情形中,状态1008的自循环维持激活,且激活计数器状态1002、1004IN端口两者。由于计数器状态1004继续激活其输出,因此计数器状态1002继续重置,且只要状态1008的自循环处于活动中便不激活其输出。
另外,在状态1008为活动时子表达式“B”的匹配激活了状态1012。一旦状态1012被激活且“~B”被匹配,那么重置计数器状态1002、1004,且不匹配所述量化。使用子表达式“B”的否定版本,因为“B”为量化“(B){n1,n2}”的重复表达式。因此,状态1008处的表达式‘B’可重复地被匹配n1到n2次。尽管说明并描述了通过单个计数器分别实施下(例如,n1)和上(例如,n2)阈值,但应认识到,如所属领域的技术人员所知,多个计数器可级联以考虑比由单个计数器支持的数目大的数目。
在使用计数器状态转换量化之前,在框804处,编译程序确定对应于所述量化的自动机是否为确定性的。在一实例中,当表达式满足下文所论述的无前缀条件、无重入条件两者时,所述自动机为确定性的。也就是说,为了使量化映射到计数器224,所述量化应满足如下文所论述的无前缀条件和无重入条件。
参考图10的自动机1000,无重入条件要求在计数器状态1002为活动时(例如,在计数器状态1002正在计数时),从状态1006到状态1008的边不可激活。也就是说,确定在所述量化已经在处理中时是否可匹配所述量化的驱动表达式。匹配驱动表达式表示紧跟在所述量化之前的状态将转变到对应于所述量化的状态。因此,在计数器状态仍在处理重复表达式时,将“重入”所述量化。由于在FSM引擎200的此实例中,计数器224在任何给定时间可仅实施单个循环,因此在循环已经在处理中时转变到量化可使计数器224在给定循环期间不准确地计数。
图11A和11B说明自动机1100和1114,可用以进一步解释无重入条件。图11A说明对应于语法树中的量化的实例自动机1100,其中编译程序可进行分析以确定对应于所述量化的自动机是否为确定性的。
自动机1100对应于正则表达式“abb?(b|c){1,2}”且包含开始状态1102和最终状态1112、1104。所述最终状态在图11A中被识别为双重圆圈。最初先激活开始状态1102并在输入符号“a”之后即刻使其转变到状态1106。在输入符号“b”时,状态1106转变到状态1108和状态1110两者。在输入符号“b”时状态1108转变到状态1110,且在输入符号“b”或“c”时,状态1110转变到状态1112。在输入符号“b”或“c”时,自动机1100从状态1112转变到状态1104。
自动机1100包括正则表达式“abb?(b|c){1,2}”的自动机,将检查所述正则表达式是否符合无重入条件。自动机1114包括从自动机1100的正则表达式“abb?(b|c){1,2}”导出的正则表达式SS(“abb?”,“(b|c){2}”)的自动机。SS(M,N)被定义为从M、N导出的正则表达式。导出步骤包含:1)串接M和N,结果表示为“MN”。2)建构“MN”的自动机,表示为A(MN)。3)如下地修改A(MN):a)使A(MN)的开始状态驱动所有其它状态,和b)使对应于“N”的所有状态为最终状态。最后,4)将经修改的自动机的正则表达式表示为SS(M,N)。SS(M,N)的被接受数据包括从“MN”的任何状态开始且在N的任何状态处结束的子字符串。
无重入条件可定义如下。给定具有量化“AB{n1,n2}C”的正则表达式,无重入条件要求换句话说,一旦匹配子表达式“A”且计数器状态1002开始计数,那么为了满足无重入条件,将不再次激活从状态1006到状态1008的边,直到“B{n1,n2}”完成(匹配或失败)为止。举例来说,“abb”∈£(″abb?″)∩£(SS(“abb?”,“(b|c){2}”),且因此通过计数器224将不会正确地实施“abb?(b|c){1,2}”。
现在参看图12,将参考自动机1200来解释无前缀条件。无前缀条件规定£(B)的任何字符串不应为£(B)的另一字符串的前缀,这将保证B不会使计数器计数多于一次。换句话说,当一量化的第一重复子表达式为所述量化的第二重复子表达式的前缀时,所述量化不实施为(且因此不转换为)计数器224。正式的陈述为:对于所有1i,1j∈£(B),1i≠1j,要求
举例来说,正则表达式“a(b|bc){3}”不满足无前缀条件。因此,将不使用计数器状态来转换正则表达式“a(b|bc){3}”,且因此不通过计数器224来实施。实际上,将不通过任何计数器状态来将正则表达式“a(b|bc){3}”转换成通用状态。
如果通过计数器224来实施正则表达式“a(b|bc){3}”,那么会对输入“abbc”错误地进行匹配。举例来说,自动机1200为使用计数器状态1212对正则表达式“a(b|bc){3}”进行假设转换的结果。如下文所描述,此转换导致计数器状态1212的不正确运作。最初先激活状态1202,且在输入“a”处,状态1202激活状态1204。在状态1204激活的情况下,在输入“b”处,状态1204激活状态1206、1208,且再激活自身,即状态1204。而且,在输入“b”处,状态1204激活计数器1212的IN端口,其中计数器状态1212的初始值为3且接着减小到2。在状态1204、1206和1208激活的情况下,在另一输入“b”处通过状态1204再次激活计数器状态1212的IN端口,且计数器状态1212中的值减小到1。此时,激活状态1204、1206和1208。接着,输入值“c”使计数器状态1212的IN端口通过状态1208激活以将计数器1212中的值减小到0。在计数器1212中的值为零的情况下,激活输出,且激活状态1214,从而指示匹配。然而,此匹配为错误肯定,因为在序列“abbc”不满足正则表达式“a(b|bc){3}”时,输入“abbc”已造成匹配。因此,正则表达式“a(b|bc){3}”不满足无前缀条件,且不应使用计数器状态来转换且不应通过计数器224来实施。
如果在框804处,所述量化满足无前缀条件和无重入条件,那么在框806处使用特殊目的计数器状态来转换所述量化。可如上文关于图10和11所描述般转换所述量化。然而,如果所述量化既不满足无前缀条件也不满足无重入条件,那么在框808、810处通过展开所述量化且将所述量化转换成通用状态且无计数器状态224来转换所述量化。因此,通过SME204、205且无计数器224来实施所述量化。
返回参考框808,展开可与单一数目的循环相匹配的量化以形成具有多个连续地连接的重复子表达式的自动机。具有单一数目的循环的量化对应于n1等于n2的量化。举例来说,量化“B{n1}”可展开为“BB...B”,具有B的n1个副本。
在框810处,当n1不等于n2时,且当n1等于1且n2大于1时,展开可与多个数目的循环相匹配的量化。当n1大于1时,将所述量化***成可与n1-1个循环相匹配的第一量化以及可与一个到n2-n1+1个的循环相匹配的第二量化。举例来说,量化B{n1,n2}(其中n1>1、n2>1且n1<n2)可与多个数目的循环相匹配,明确地说,从n1到n2个循环。此量化B{n1,n2}可***成以下量化:B{n1-1}B{1,n2-n1+1}。第一量化为可与数目等于n1-1个的循环相匹配的重复子表达式B。将此第一量化与第二量化串接,所述第二量化具有可与数目为一个到n2-n1+1个的循环相匹配的重复子表达式。如1302处所述,展开第一量化B{n1-1}。
可基于所得自动机的内分支度(in-degree)和/或外分支度(out-degree)来展开第二量化B{1,n2-n1+1}。展开量化可创建具有大内分支度或大外分支度的状态。在一实例中,内分支度对应于到自动机的状态的转变的数目,且外分支度对应于从自动机的状态发生的转变的数目。因此,可展开所述第二量化以控制当将第二量化转换成自动机时进(内分支度)或出(外分支度)状态的转变。举例来说,可展开量化以限制每一展开状态的内分支度使之低于阈值数目。举例来说,限制内分支度可经执行以考虑目标装置中的元件的方面和/或限制。此外,在展开期间限制内分支度可减少编译程序的后续处理。
在一实例中,当展开量化B{1,n2-n1+1}时,产生自动机,作为内分支度与外分支度之间的权衡。因此,减少内分支度可增加外分支度,且减少外分支度可增加内分支度。在一实例中,为了展开量化B{1,n2-n1+1}的循环结构,进行到或自展开状态的许多转变以使自动机接受B串接了k次的任何字符串,其中1<=k<=n2-n1+1。控制是否进行到或自展开状态的转变可用以控制自动机的内分支度/外分支度。
尽管将方法800描述为对应于单个量化,但可针对语法树内的多个量化而重复方法800,且可接着将所得的单独自动机连接到较大自动机中。
图13A说明自动机1300的一实例,其中展开表达式AB{1,4}以最小化内分支度。从经展开以最小化内分支度的量化产生的自动机在本文中也被称作为散射型样。表达式AB{1,4}的散射型样展开版本完全对应于自动机1300所对应于的表达式A((((B?)B)?B)?B)。自动机1300包含用于量化B{1,4}的驱动状态1302和多个展开状态1304-1308,包含所述量化的第一状态1304和所述量化的最后一个状态1308。在一实例中,表达式A和B中的每一者可对应于未展示的较小自动机的多个状态。为了最小化自动机1300的内分支度,将所述量化的转变指派为从第一状态1304到其它展开状态1305-1308的向外转变。因此,第一状态1304具有大外分支度(4个向外转变),且所有量化状态1304-1308具有小内分支度(1或2个向内转变)。
图13B说明自动机1310的一实例,其中展开表达式AB{1,4}以最小化外分支度。从经展开以最小化外分支度的量化产生的自动机在本文中也被称作为合并型样。表达式AB{1,4}的合并型样展开版本完全对应于展开表达式AB(B(B(B)?)?)?。自动机1308包含与自动机1300相同的状态1302、1304-1308,但在状态1302、1304-1308之间具有不同转变。为了最小化自动机1310的外分支度,将量化的转变指派为到所述量化的最后一个状态1308的向内转变。向内转变是起始于展开状态1304-1307中的每一者。因此,所有量化状态1304-1308都具有小外分支度(1或2个向外转变),但所述量化的最后一个状态1308具有大内分支度(4个向内转变)。
在一实例中,展开具有量化的表达式以限制外分支度或内分支度中的一者使之小于阈值。在一实例中,为了展开表达式AB{1,n1}以将内分支度限制于阈值,可将数目高达所述阈值的量化B{1,n1}的转变指派为到量化B{1,n1}的最后一个状态的向内转变,且可将其它转变指派为针对量化B{1,n1}的第一状态的向外转变。相反地,为了展开表达式AB{1,n1}以将外分支度限制于阈值,可将数目高达所述阈值的量化B{1,n1}的转变指派为到所述量化的第一状态的向外转变,且可将其它转变指派为针对所述量化B{1,n1}的最后一个状态的向外转变。
图13C说明自动机1312的另一实例,其中展开表达式AB{1,4}以限制任何状态的向内转变使之小于或等于3。自动机1312包含与自动机1300和1308相同的状态1302、1304-1308,但在状态1302、1304-1308之间具有不同转变。在一实例中,为了限制自动机1312的内分支度使之小于或等于三(3)个向内转变,最初将量化的转变指派为到量化B{1,4}的最后一个状态1308的向内转变,直到达到三个的极限为止,且将其它转变指派为自量化状态1304-1308的向外转变。因此,最后一个状态1308以及量化的其它量化状态1304-1307具有等于或低于极限3的内分支度,且第一状态1304具有为3的外分支度。
在其它实例中,可将表达式的内分支度和外分支度设定为彼此成某一比率(例如,1比1、2比1)。在又其它实例中,可将表达式的内分支度和外分支度设定为彼此成某一比率,直到向内转变或向外转变达到阈值为止,且接着可使用另一比率,或可将所有转变分别指派为向内转变或向外转变。
网表为连接性实例,其中实例对应于硬件元件且有向边为连接硬件元件的网。如果一状态驱动另一状态,那么这两个状态被指派给的SME之间将存在电连接。大多数物理装置在硬件组件之间的连接的数目上具有一些限制。为了获得从自动机到物理装置的可行映射,必须转变所述自动机,以使得所有状态的内分支度满足硬件连接限制。
如上所述,编译程序基于FSM引擎200的限制(如果有)来确定哪些SME可被分组到一起。因此,对于GOT210,编译程序基于GOT210中的SME204、205的输出限制来确定哪些SME可一起成对。
在一个此类实施例中,FSM引擎200对于所有硬件组件具有有限的连接。为了获得从自动机到FSM引擎200的可行映射,必须转变所述自动机,以使得所有状态的内分支度满足连接限制。
因此,在一实例中,可基于目标装置的硬件约束来限制自动机的内分支度。在一实例中,两级方案可用于FSM引擎200以限制SME204、205的进入。首先,一个级可利用由GOT210提供的OR门230,其将通过将来自SME状态的输出配对成单个输出来使内分支度减少达至多50%。另一组件为布尔,其可经配置以提供复合逻辑函数。在此实例中,仅将其视为简单OR组件。在以下算法中,要保守估计GOT210的使用。在所述算法中,当估计的内分支度大于FSM引擎200的约束时,一些状态***成多个状态,或在必要时***布尔OR以减少内分支度。
状态***的基本理念是将一状态***成多个状态且将预***状态的进入分配给所述***状态,使得每一***状态的内分支度满足约束。当自动机为有向非循环图(DAG)时,所述自动机的简单广度优先遍历便可解决所述问题。然而,当循环(例如,量化)存在时,***可使状态的数目按指数增加或可造成任何可行解决方案均不可能的情形。布尔逻辑可帮助减少增加的状态且因此减轻此情形。在一实施例中,使用布尔OR或其等效物来处置循环状况。
***状态的一实例展示于图14A和14B中。在图14A中所示的实例中,八个状态1430馈入一个状态1432,状态1432又馈入两个状态1434。如图14B中所示,如上文所详述的状态***导致增添两个新的状态1436(C2和C3)。然而,现在,三个状态馈入两个状态1434。
返回参看图5,GOT210具有对SME204、205的输出限制。明确地说,GOT210具有由两个SME204、205共享的单个输出218。因此,GOT210中的每一SME204、205不可独立地驱动输出218。此输出限制限制了在GOT实例中哪些SME状态可一起成对。显著地,驱动(例如,转变到、激活)外部SME状态(例如,对应于GOT实例外的SME的SME状态)的不同集合的两个SME状态在GOT实例中不可一起成对。然而,此限制不限制两个SME状态是否驱动彼此或自循环,因为GOT210可在内部通过开关240提供此功能性。尽管将FSM引擎200描述为具有对应于SME204、205的某一物理设计,但在其它实例中,SME204、205可具有其它物理设计。举例来说,SME204、205可一起分组到SME204、205的三个或三个以上集合中。另外,在一些实例中,可存在对到SME204、205的输入214、216的限制,对来自SME204、205的输出226、228可具有或不具有限制。
然而,在任一种情况下,编译程序都基于FSM引擎200的物理设计来确定哪些SME状态可被分组到一起。因此,对于GOT实例,编译程序基于GOT210中的SME204、205的输出限制来确定哪些SME状态可一起成对。在一实例中,存在五种情形,其中两个SME状态可基于GOT210的物理设计而一起成对以形成GOT210。
在第一SME状态和第二SME状态可在GOT210中一起成对时的第一种情形出现在第一SME状态或第二SME状态皆非最终状态时,且出现在第一SME状态和第二SME状态中的一者不驱动除了第一SME状态或第二SME状态外的任何状态时。作为一实例,当第一状态转变到第二状态时,认为所述第一状态驱动所述第二状态。当此第一种情形出现时,第一SME状态和第二SME状态中的至多一者驱动一(些)外部状态。因此,第一SME状态和第二SME状态可一起成对,而不受GOT210的输出限制影响。然而,归因于GOT210在内部将SME204、205耦合到彼此的能力,允许第一SME状态和第二SME状态驱动彼此和自循环以驱动自身。在自动机项中,当q1或q2皆非最终状态,且δ(q1)-{q1,q2}为空时,或当δ(q2)-{q1,q2}为空时,第一SME状态(对应于状态q1)和第二SME状态(对应于状态q2)可一起成对。
在第一SME状态和第二SME状态可在GOT210中一起成对时的第二种情形出现在第一SME状态或第二SME状态皆非自动机中的最终状态时,且出现在第一SME状态和第二SME状态两者驱动相同的外部状态时。如本文中所使用,外部状态对应于GOT实例外部的状态,例如,不管GOT实例中的第一SME状态和第二SME状态是否驱动彼此或自循环。再次,GOT210的输出限制不影响第一SME状态和第二SME状态,因为第一SME状态和第二SME状态驱动相同的外部状态。而且,归因于GOT210在内部将SME204、205耦合到彼此的能力,对驱动相同状态的限制不包含第一状态和第二状态是否驱动彼此或自循环。使用自动机项,当q1或q2皆非最终状态,且δ(q1)-{q1,q2}=δ(q2)-{q1,q2}时,第一SME状态(对应于状态q1)和第二SME状态(对应于状态q2)可一起成对。
第一SME状态和第二SME状态可在GOT210中一起成对的第三和第四种情形出现在第一SME状态和第二SME状态中的一者为最终状态且第一SME状态和第二SME状态中的另一者并不驱动任一外部状态时。也就是说,当q1为最终状态,且δ(q2)-{q1,q2}为空时,或当q2对应于最终状态且δ(q1)-{q1,q2}为空时,第一SME状态(对应于状态q1)和第二SME状态(对应于状态q2)可一起成对。由于最终状态输出与正则表达式匹配的指示,因此对应于最终状态的SME状态应能够独立使用GOT210的输出218以便指示所述匹配。因此,不允许GOT210中的另一SME状态使用输出218。
在第一SME状态和第二SME状态可在GOT210中一起成对时的第五种情形出现在第一SME状态和第二SME状态两者对应于自动机中的最终状态且第一SME状态和第二SME状态两者驱动相同的外部状态时。使用自动机项,当q1和q2均为最终状态,且δ(q1)-{q1,q2}=δ(q2)-{q1,q2}时,第一状态(对应于状态q1)和第二SME状态(对应于状态q2)可一起成对。
一旦编译程序确定一个或一个以上SME状态是否可一起成对,编译程序便将所述SME状态成对为GOT实例。在一实例中,编译程序按SME状态被确定为能够成对以形成GOT实例的次序来将SME状态成对为GOT实例。也就是说,一旦两个特定SME状态被确定为能够一起成对,便可将这两个SME状态成对为GOT实例。一旦两个SME状态已成对以形成GOT实例,这些成对的SME状态便不可用于与其它SME状态成对。此过程可继续,直到不再有任何SME状态留待成对为止。
在一实例中,编译程序使用图论来确定哪些SME一起成对为GOT实例。由于仅某些SME可一起成对,因此一些SME成对可导致其它SME必须在其自身的GOT实例中实施,以致GOT实例中的其它SME位置未用且因此被浪费。可使用图论来通过减少网表的GOT实例中的未用SME实例的数目来优化GOT210中的SME利用(例如,减少未用SME的数目)。为了使用图论,编译程序首先根据上文所论述的FSM引擎200的物理设计来确定SME状态之间的所有可能成对。编译程序接着创建图,其中所述图的顶点对应于SME状态,且所述图的边对应于SME状态的可能成对。也就是说,如果确定两个SME状态能够在GOT实例中一起成对,那么用一条边连接两个对应的顶点。因此,所述图含有SME状态的所有可能成对。
编译程序可接着找出所述图的匹配顶点以识别哪些SME状态在GOT210中一起成对。也就是说,编译程序识别边(且因此识别顶点对),使得所述图的匹配顶点之间的两条边不会共享共同的顶点。在一实例中,编译程序可找出所述图的最大匹配。在另一实例中,编译程序可找出所述图的最大匹配。最大匹配为含有最大的可能数目的边的匹配。可存在许多最大匹配。可以用多项式时间来解决找出一般图的最大匹配的问题。
一旦已识别了所有匹配顶点(例如,作为最大匹配),那么将对应于匹配顶点的每一对SME状态映射到一GOT实例。将对应于未匹配顶点的SME状态映射到其自身的GOT实例。也就是说,将对应于未匹配顶点的SME状态映射到GOT实例中的SME位置中的一者中,且GOT实例中的其它SME位置未用。因此,给定网表N和其匹配顶点M的对应集合,所使用的N的GOT实例的数目等于|Q|-1-|M|,其中Q为自动机的状态集合,且“-1”是因为在此实例中自动机的开始状态并不对应于SME状态。
在一实例中,由G的最大匹配M建构的网表N使用最少数目的GOT实例。这可通过以下事例证明:如果存在使用更少数目的GOT实例的另一网表N′,那么将对应匹配表示为M′。由于N′的GOT实例的数目等于|Q|-1-|M′|,因此得到|M|<|M′|。这与M为最大匹配的事实冲突。因此,网表N使用最少数目的GOT实例。
一旦SME状态成对为GOT实例,便根据自动机中的状态之间的转变来连接GOT实例、计数器实例和逻辑实例。由于每一GOT210具有单个输出,因此网表中的每一GOT实例具有单个输出端口以连接到其它实例。因此,如果第一GOT实例中的任一SME状态驱动第二GOT实例中的SME状态,那么第一GOT实例的输出端口耦合到第二GOT实例的输入。
图15A和15B说明从均齐自动机创建的实例网表1500、1502。网表1500、1502包含SME实例1506、1508、1510、1512和1514。网表1500为非最佳网表的实例。网表1500使用四个GOT实例1516,同时留下三个SME实例1518未用。然而,网表1502为使用图论识别最大匹配而创建的最佳网表的实例。网表1502使用三个GOT实例1516且具有单个未用SME实例1518。在网表1502中,可通过GOT实例内部的连接(例如,经由开关240)将实例1510连接到实例1512。
本文中所描述的方法实例可至少部分为机器或计算机实施的。一些实例可包含编码有指令的计算机可读媒体或机器可读媒体,所述指令可操作以配置电子装置以执行如上述实例中所描述的方法。此些方法的一实施方案可包含代码,例如微码、汇编语言代码、高级语言代码或其类似者。此类代码可包含用于执行各种方法的计算机可读指令。代码可形成计算机程序产品的部分。另外,代码在执行期间或在其它时间可有形地存储于一个或一个以上易失性或非易失性计算机可读媒体上。这些计算机可读媒体可包含(但不限于)硬盘、可装卸式磁盘、可装卸式光盘(例如,压缩光盘和数字视频光盘)、磁带盒、存储卡或存储棒、随机存取存储器(RAM)、只读存储器(ROM)以及其类似者。
图16大体上说明具有冯诺依曼架构的计算机1600的实例。在阅读并理解了本发明的内容之后,所属领域的一般技术人员将理解,在基于计算机的***中可从计算机可读媒体加载软件程序以使之执行以软件程序定义的功能的方式。所属领域的一般技术人员将进一步理解,可使用各种编程语言来创建经设计以实施并执行本文所揭示的方法的一个或一个以上软件程序。可使用面向对象语言(例如,Java、C++或一种或一种以上其它语言)以面向对象格式来结构化所述程序。或者,可使用过程语言(例如,汇编语言、C等)以面向过程格式来结构化所述程序。软件组件可使用所属领域的一般技术人员所熟知的许多机制中的任一者来通信,例如应用编程接口或过程间通信技术,包含远程程序呼叫或其它。各个实施例的教示不限于任何特定编程语言或环境。
因此,可实现其它实施例。举例来说,制造物件(例如,计算机、存储***、磁盘或光盘、某其它存储装置,或任何类型的电子装置或***)可包含一个或一个以上处理器1602,所述一个或一个以上处理器1602耦合到上面存储有指令1624(例如,计算机程序指令)的计算机可读媒体1622,例如存储器(例如,可装卸式存储媒体,以及包含电、光或电磁导体的任何存储器),所述指令在由所述一个或一个以上处理器1602执行时致使执行关于上述方法所描述的动作中的任一者。
计算机1600可采取具有处理器1602的计算机***的形式,所述处理器1602直接和/或使用总线1608耦合到多个组件。此些组件可包含主存储器1604、静态或非易失性存储器1606和大容量存储装置1616。耦合到处理器1602的其它组件可包含输出装置1610(例如,视频显示器)、输入装置1612(例如,键盘)和光标控制装置1614(例如,鼠标)。用以将处理器1602和其它组件耦合到网络1626的网络接口装置1620也可耦合到总线1608。可利用许多熟知传输协议(例如,HTTP)中的任一者经由网络接口装置1620在网络1626上进一步发射或接收指令1624。耦合到总线1608的这些元件中的任一者可不存在,单独地存在,或以复数形式存在,此取决于待实现的特定实施例。
在一实例中,处理器1602、存储器1604、1606或存储装置1616中的一者或一者以上可各自包含指令1624,所述指令1624在执行时可使计算机1600执行本文所描述的方法中的任何一者或一者以上。在替代实施例中,计算机1600操作为单独装置或可连接(例如,网络连接)到其它装置。在网络环境中,计算机1600可以按照服务器-客户端网络环境中的服务器或客户端装置的能力来操作,或操作为对等(或分布式)网络环境中的对等装置。计算机1600可包含个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝式电话、网络设备、网络路由器、交换机或桥接器,或能够执行一组指令(顺序的或其它)的任何装置,所述一组指令指定将由所述装置采取的行动。另外,虽然仅说明了单个计算机1600,但术语“计算机”也应被视为包含个别地或共同地执行一组(或多组)指令以执行本文中所论述的方法中的任何一者或一者以上的装置的任何集合。
计算机1600还可包含用于使用一种或一种以上通信协议(例如,通用串行总线(USB)、IEEE1394等)与***装置通信的输出控制器1628。输出控制器1628可(例如)将映像提供到通信地耦合到计算机1600的编程装置1630。编程装置1630可经配置以对平行机(例如,平行机100、FSM引擎200)编程。在其它实例中,编程装置1630可与计算机1600集成且耦合到总线1608或可经由网络接口装置1620或另一装置与计算机1600通信。
虽然计算机可读媒体1622展示为单个媒体,但术语“计算机可读媒体”应被视为包含存储所述一组或一组以上指令1624的单个媒体或多个媒体(例如,集中式或分布式数据库,或相关联的高速缓冲存储器和服务器,和或各种存储媒体,例如处理器1602寄存器、存储器1604、1606和存储装置1616)。术语“计算机可读媒体”还应被视为包含任何媒体,所述媒体能够存储、编码或载运供计算机执行的一组指令且使所述计算机执行本发明的方法中的任何一者或一者以上,或能够存储、编码或载运供此组指令利用或与此组指令相关联的数据结构。术语“计算机可读媒体”因此应被视为包含(但不限于)有形媒体,例如固态存储器、光媒体和磁性媒体。
提供摘要以遵照37C.F.R.章节1.72(b)中对摘要的要求,摘要将允许读者确定技术揭示内容的性质和要旨。提交摘要的前提是要理解摘要将不用以限制或解释权利要求书的范畴或涵义。以下权利要求特此并入具体实施方式中,其中每一权利要求依赖于其自身而作为单独实施例。
实例实施例
实例1包含一种计算机,其包含上面存储有指令的存储器。所述计算机还包含通信地耦合到所述存储器的处理器,其中所述指令在由所述处理器执行时使所述处理器将源代码转换成自动机,所述自动机包括状态和所述状态之间的转变,其中所述自动机中的所述状态包含对应于特殊目的硬件元件的特殊目的状态。所述指令还使所述处理器将所述自动机转换成网表并对所述网表进行放置和布线以提供用于配置目标装置的机器代码。
实例2包含一种计算机实施方法,其包含使用一个或一个以上处理器将源代码剖析成语法树。所述方法还包含使用所述一个或一个以上处理器将所述语法树转换成自动机,其中所述自动机定义具有多个状态和所述多个状态之间的转变的行为模型,且其中自动机结构是由目标硬件装置指定。所述方法还包含使用所述一个或一个以上处理器将所述自动机转换成网表,其中所述网表包含多个实例,每一实例对应于目标装置的一硬件元件。所述方法还包含使用所述一个或一个以上处理器来放置所述实例中的每一者,其中放置包含将所述网表中的每一实例指派到所述目标装置的硬件元件。所述方法还包含根据所述网表使用所述一个或一个以上处理器来对所述硬件元件之间的连接进行布线,以及基于放置和布线来创建用以对所述目标装置编程的编程数据。
实例3包含一种可编程装置,其包含多个可编程元件,所述多个可编程元件包含一个或一个以上输入和一个或一个以上输出。所述可编程装置还包含用于将所述多个可编程元件的一部分与外部电路介接的输入块和输出块。所述可编程装置还包含将所述多个可编程元件与所述输入块和所述输出块通信地连接的多个可编程开关,其中一个或一个以上可编程开关的设定选择性地控制所述多个可编程元件和所述多个可编程开关中的任两者或两者以上之间的信号路由。所述可编程装置还包含多个寄存器,所述寄存器经配置以存储能够配置所述多个可编程元件和所述多个可编程开关的可编程数据,其中编程数据是通过使用一个或一个以上处理器将源代码剖析成语法树而创建;使用所述一个或一个以上处理器将所述语法树转换成自动机,其中所述自动机定义具有多个状态和所述多个状态之间的转变的行为模型,且其中自动机结构是由目标硬件装置指定;使用所述一个或一个以上处理器将所述自动机转换成网表,其中所述网表包含多个实例,每一实例对应于目标装置的一硬件元件;使用所述一个或一个以上处理器来放置所述实例中的每一者,其中放置包含将所述网表中的每一实例指派到所述目标装置的硬件元件;根据所述网表使用所述一个或一个以上处理器来对所述硬件元件之间的连接进行布线;以及基于放置和布线来创建用以对所述目标装置编程的编程数据。
实例4包含一种计算机可读媒体,所述计算机可读媒体包含指令,所述指令在由一个或一个以上处理器实施时执行以下操作:将源代码剖析成语法树;将所述语法树转换成自动机,其中所述自动机定义具有多个状态和所述多个状态之间的转变的行为模型,且其中自动机结构是由目标硬件装置指定;将所述自动机转换成网表,其中所述网表包含与所述目标装置相关联的多个硬件元件,且其中所述网表定义所述硬件元件之间的连接;放置所述硬件元件中的每一者,其中放置包含将所述网表中的每一硬件元件指派到所述目标装置内的位置;根据所述网表来对所述硬件元件之间的连接进行布线;以及创建用以对所述目标装置编程以反映放置和布线的编程数据。
实例5包含一种计算机实施方法,其包含:使用一个或一个以上处理器将源代码剖析成语法树;使用所述一个或一个以上处理器将所述语法树转换成自动机,其中所述转换包含基于目标装置来限制自动机结构,其中所述目标硬件装置包含成对为成对群组的状态机元件。所述方法还包含使用所述一个或一个以上处理器将所述自动机转换成网表,其中所述网表包含与所述目标装置相关联的多个硬件元件,且其中所述网表定义所述硬件元件之间的连接;使用所述一个或一个以上处理器来放置所述硬件元件中的每一者,其中放置包含将所述网表中的每一硬件元件指派到所述目标装置内的位置;使用所述一个或一个以上处理器来根据所述网表对所述硬件元件之间的连接进行布线;以及创建用以对所述目标装置编程以反映放置和布线的多个位。
在实例6中,实例1到5中任一者的主题可任选地包含,其中转换源代码包含在量化满足将被映射到特殊目的硬件元件的条件时将所述量化转换成包含特殊目的硬件状态的多个状态。
在实例7中,实例1到6中任一者的主题可任选地包含,其中转换源代码包含在所述量化不满足将被映射到特殊目的硬件元件的所述条件时将所述量化展开成多个通用状态。
在实例8中,实例1到7中任一者的主题可任选地包含,其中展开包含展开所述量化以控制所述自动机的内分支度。
在实例9中,实例1到8中任一者的主题可任选地包含优化所述自动机,其中优化包含在所述自动机的特定状态的估计内分支度大于所述目标装置的约束时将所述特定状态***成多个状态。
在实例10中,实例1到9中任一者的主题可任选地包含,其中***所述特定状态包括将所述特定状态的驱动状态分配给所述多个状态,使得所述多个状态中的每一者的内分支度满足所述约束。
在实例11中,实例1到10中任一者的主题可任选地包含,其中将所述自动机转换成所述网表包含将所述状态映射到所述网表的实例,其中映射包含将所述特殊目的状态映射到对应于特殊目的元件的特殊目的实例。
在实例12中,实例1到11中任一者的主题可任选地包含,其中将所述自动机转换成网表包含基于所述目标装置的物理设计将状态分组到一起。
在实例13中,实例1到12中任一者的主题可任选地包含,其中所述实例包含对应于状态机元件(SME)硬件元件的SME实例以及对应于包括一群SME的硬件元件的SME群组实例,且其中分组包含将状态分组到SME群组实例中。
在实例14中,实例1到13中任一者的主题可任选地包含,其中将所述语法树转换成自动机包含将所述源代码中的量化转换成多个状态,所述多个状态包含对应于所述目标装置的计数器元件的特殊目的状态。
在实例15中,实例1到14中任一者的主题可任选地包含,其中对应于SME的多个通用状态基于GOT硬件元件的输出限制而被分组到一起以形成GOT实例。
在实例16中,实例1到15中任一者的主题可任选地包含限制所述自动机的内分支度,其中限制所述内分支度包含限制到所述自动机的状态的转变的数目。
在实例17中,实例1到16中任一者的主题可任选地包含,其中限制所述内分支度包含将特定状态***成多个状态且将所述特定状态的驱动状态分配给所述多个状态,以使得所述多个状态中的每一者的内分支度满足约束。
在实例18中,实例1到17中任一者的主题可任选地包含,其中限制所述内分支度包含将量化展开成多个展开状态且限制所述展开状态中的任一者的向内转变的数目。
在实例19中,实例1到18中任一者的主题可任选地包含,其中转换包含确定所述源代码中的量化是否满足将被映射到所述目标装置的计数器的条件;当所述量化满足所述条件时,将所述量化转换成包含计数器状态的多个状态;且当所述量化不满足所述条件时,通过展开所述量化而将所述量化转换成多个SME状态。
在实例20中,实例1到19中任一者的主题可任选地包含,其中确定所述量化是否满足所述条件包含确定在正处理所述量化时是否可匹配所述量化的驱动表达式。
在实例21中,实例1到20中任一者的主题可任选地包含,其中确定所述量化是否满足所述条件包含确定所述量化的一重复表达式是否为所述量化的另一重复表达式的前缀。
在实例22中,实例1到21中任一者的主题可任选地包含,其中将所述量化转换成包含计数器状态的多个状态包含将所述多个状态实施为循环,所述循环包括所述量化的重复表达式和所述计数器状态,其中所述计数器状态经配置以对所述重复表达式被匹配的次数计数,且其中在所述重复表达式被匹配了通过所述量化指定的次数时所述计数器状态激活下游状态。
在实例23中,实例1到22中任一者的主题可任选地包含,其中展开包含基于所述目标装置的内分支度约束来展开所述量化以控制所述自动机的内分支度。
在实例24中,实例1到23中任一者的主题可任选地包含,其中转换包含基于共享共同输出的成对群组来限制自动机结构。
在实例25中,实例1到24中任一者的主题可任选地包含,其中限制包含基于所述目标装置的计数器元件来限制自动机结构。
在实例26中,实例1到25中任一者的主题可任选地包含发布所述多个位。
在实例27中,实例1到26中任一者的主题可任选地包含优化所述自动机以减少所述多个状态。
实例28包含一种通过使用技术方案1到27中任一者的主题产生的映像来进行编程的平行机。
Claims (25)
1.一种计算机,其包括:
存储器,其包含上面所存储的指令;以及
处理器,其通信地耦合到所述存储器,其中所述指令在由所述处理器执行时使所述处理器:
将源代码转换成包括状态和所述状态之间的转变的自动机,其中所述自动机中的所述状态包含对应于特殊目的硬件元件的特殊目的硬件状态;
将所述自动机转换成网表;以及
对所述网表进行放置和布线以提供用于配置目标装置的机器代码,
其中所述源代码包含量化;且
其中使所述处理器转换源代码包含:当所述量化满足将被映射到特殊目的硬件元件的条件时,将所述量化转换成包含所述特殊目的硬件状态的多个状态。
2.根据权利要求1所述的计算机,其中使所述处理器转换源代码包含:当所述量化不满足将被映射到特殊目的硬件元件的所述条件时,将所述量化展开成多个通用状态。
3.根据权利要求2所述的计算机,其中展开包含:展开所述量化以控制所述自动机的内分支度。
4.根据权利要求1所述的计算机,其进一步包括使所述处理器执行所述自动机的优化的指令,其中优化包含在所述自动机的特定状态的估计内分支度大于所述目标装置的约束时将所述特定状态***成多个状态。
5.根据权利要求4所述的计算机,其中***所述特定状态包括:将所述特定状态的驱动状态分配给所述多个状态,使得所述多个状态中的每一者的内分支度满足所述约束。
6.根据权利要求1所述的计算机,其中使所述处理器将所述自动机转换成所述网表包含将所述状态映射到所述网表的实例,其中映射包含将所述特殊目的状态映射到对应于特殊目的元件的特殊目的实例。
7.根据权利要求6所述的计算机,其中使所述处理器将所述自动机转换成网表包含:基于所述目标装置的物理设计将状态分组到一起。
8.根据权利要求6所述的计算机,其中所述实例包含对应于状态机元件SME硬件元件的SME实例以及对应于包括一群SME的硬件元件的SME群组实例,且其中分组包含将状态分组到SME群组实例中。
9.一种计算机实施方法,其包括:
使用一个或一个以上处理器将源代码剖析成语法树;
使用所述一个或一个以上处理器将所述语法树转换成自动机,其中所述自动机定义具有多个状态和所述多个状态之间的转变的行为模型,且其中自动机的结构是由目标硬件装置指定;
使用所述一个或一个以上处理器将所述自动机转换成网表,其中所述网表包含多个实例,每一实例对应于目标硬件装置的硬件元件;
使用所述一个或一个以上处理器来放置所述实例中的每一者,其中放置包含将所述网表中的每一实例指派到所述目标硬件装置的硬件元件;
使用所述一个或一个以上处理器来根据所述网表对所述硬件元件之间的连接进行布线;以及
基于放置和布线创建用以对所述目标硬件装置编程的编程数据,
其中将所述语法树转换成自动机包含:将所述源代码中的量化转换成多个状态,所述多个状态包含对应于所述目标硬件装置的计数器元件的特殊目的状态。
10.根据权利要求9所述的计算机实施方法,其中对应于SME的多个通用状态是基于GOT硬件元件的输出限制而被分组到一起以形成成对群组(GOT)实例。
11.根据权利要求9所述的计算机实施方法,其包含:
限制所述自动机的内分支度,其中限制所述内分支度包含限制到所述自动机的状态的转变的数目。
12.根据权利要求11所述的计算机实施方法,其中限制所述内分支度包含:将特定状态***成多个状态且将所述特定状态的驱动状态分配给所述多个状态,以使得所述多个状态中的每一者的内分支度满足约束。
13.根据权利要求11所述的计算机实施方法,其中限制所述内分支度包含:将量化展开成多个展开状态且限制所述展开状态中的任一者的向内转变的数目。
14.一种可编程装置,其包括:
多个可编程元件,其包含一个或一个以上输入和一个或一个以上输出;
输入块和输出块,其用于将所述多个可编程元件的一部分与外部电路介接;
多个可编程开关,其将所述多个可编程元件与所述输入块和所述输出块通信地连接,其中一个或一个以上可编程开关的设定选择性地控制所述多个可编程元件和所述多个可编程开关中的任两者或两者以上之间的信号路由;以及
多个寄存器,其经配置以存储能够配置所述多个可编程元件和所述多个可编程开关的编程数据,其中所述编程数据是通过以下操作创建:
使用一个或一个以上处理器将源代码剖析成语法树;
使用所述一个或一个以上处理器将所述语法树转换成自动机,其中所述自动机定义具有多个状态和所述多个状态之间的转变的行为模型,且其中自动机的结构是由目标装置指定;
使用所述一个或一个以上处理器将所述自动机转换成网表,其中所述网表包含多个实例,每一实例对应于所述目标装置的硬件元件;
使用所述一个或一个以上处理器来放置所述实例中的每一者,其中放置包含将所述网表中的每一实例指派到所述目标装置的硬件元件;
使用所述一个或一个以上处理器来根据所述网表对所述硬件元件之间的连接进行布线;以及
基于放置和布线创建用以对所述目标装置编程的编程数据,
其中将所述语法树转换成自动机包含:将所述源代码中的量化转换成多个状态,所述多个状态包含对应于所述目标装置的计数器元件的特殊目的状态。
15.一种计算机实施设备,其包括:
用于将源代码剖析成语法树的装置;
用于将所述语法树转换成自动机的装置,其中所述转换包含基于目标硬件装置来限制自动机的结构,其中目标硬件装置包含成对为成对群组的状态机元件;
用于将所述自动机转换成网表的装置,其中所述网表包含与所述目标硬件装置相关联的多个硬件元件,且其中所述网表定义所述硬件元件之间的连接;
用于放置所述硬件元件中的每一者的装置,其中放置包含将所述网表中的每一硬件元件指派到所述目标硬件装置内的位置;
用于根据所述网表对所述硬件元件之间的所述连接进行布线的装置;以及
用于创建用以对所述目标硬件装置编程以反映放置和布线的多个位的装置。
16.根据权利要求15所述的设备,其中所述用于将所述语法树转换成自动机的装置包含:用于基于共享共同输出的所述成对群组来限制所述自动机的结构的装置。
17.根据权利要求15所述的设备,其中所述用于限制所述自动机的结构的装置包含:
用于基于所述目标硬件装置的计数器元件来限制所述自动机的结构的装置。
18.根据权利要求15所述的设备,其进一步包括:
用于发布所述多个位的装置。
19.根据权利要求15所述的设备,其进一步包括:
用于优化所述自动机以减少所述多个状态的装置。
20.一种计算机实施方法,其包括:
使用一个或一个以上处理器将源代码剖析成语法树;
使用所述一个或一个以上处理器将所述语法树转换成自动机,其中所述转换包含基于目标硬件装置来限制自动机的结构,其中目标硬件装置包含成对为成对群组的状态机元件;
使用所述一个或一个以上处理器将所述自动机转换成网表,其中所述网表包含与所述目标硬件装置相关联的多个硬件元件,且其中所述网表定义所述硬件元件之间的连接;
使用所述一个或一个以上处理器来放置所述硬件元件中的每一者,其中放置包含将所述网表中的每一硬件元件指派到所述目标硬件装置内的位置;
使用所述一个或一个以上处理器来根据所述网表对所述硬件元件之间的所述连接进行布线;以及
创建用以对所述目标硬件装置编程以反映放置和布线的多个位。
21.根据权利要求20所述的方法,其中将所述语法树转换为自动机包含:基于共享共同输出的所述成对群组来限制所述自动机的结构。
22.根据权利要求20所述的方法,其中限制所述自动机的结构包含:基于所述目标硬件装置的计数器元件来限制所述自动机的结构。
23.根据权利要求20所述的方法,其进一步包括:
发布所述多个位。
24.根据权利要求20所述的方法,其进一步包括:
优化所述自动机以减少所述多个状态。
25.一种可编程装置,其包括:
多个可编程元件,其包含一个或一个以上输入和一个或一个以上输出;
输入块和输出块,其用于将所述多个可编程元件的一部分与外部电路介接;
多个可编程开关,其将所述多个可编程元件与所述输入块和所述输出块通信地连接,其中一个或一个以上可编程开关的设定选择性地控制所述多个可编程元件和所述多个可编程开关中的任两者或两者以上之间的信号路由;以及
多个寄存器,其经配置以存储能够配置所述多个可编程元件和所述多个可编程开关的编程数据,其中所述编程数据是通过以下操作创建:
使用一个或一个以上处理器将源代码剖析成语法树;
使用所述一个或一个以上处理器将所述语法树转换成自动机,其中所述转换包含基于目标硬件装置来限制自动机的结构,其中目标硬件装置包含成对为成对群组的状态机元件;
使用所述一个或一个以上处理器将所述自动机转换成网表,其中所述网表包含与所述目标硬件装置相关联的多个硬件元件,且其中所述网表定义所述硬件元件之间的连接;
使用所述一个或一个以上处理器来放置所述硬件元件中的每一者,其中放置包含将所述网表中的每一硬件元件指派到所述目标硬件装置内的位置;
使用所述一个或一个以上处理器来根据所述网表对所述硬件元件之间的所述连接进行布线;以及
创建用以对所述目标硬件装置编程以反映放置和布线的多个位。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201161436013P | 2011-01-25 | 2011-01-25 | |
US61/436,013 | 2011-01-25 | ||
PCT/US2012/022435 WO2012103143A2 (en) | 2011-01-25 | 2012-01-24 | Method and apparatus for compiling regular expressions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103547998A CN103547998A (zh) | 2014-01-29 |
CN103547998B true CN103547998B (zh) | 2016-11-09 |
Family
ID=46545129
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280012402.2A Active CN103547998B (zh) | 2011-01-25 | 2012-01-24 | 用于编译正则表达式的方法和设备 |
Country Status (7)
Country | Link |
---|---|
US (4) | US8726253B2 (zh) |
EP (1) | EP2668575B1 (zh) |
JP (1) | JP5763783B2 (zh) |
KR (1) | KR101640295B1 (zh) |
CN (1) | CN103547998B (zh) |
TW (1) | TWI506556B (zh) |
WO (1) | WO2012103143A2 (zh) |
Families Citing this family (82)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9710384B2 (en) | 2008-01-04 | 2017-07-18 | Micron Technology, Inc. | Microprocessor architecture having alternative memory access paths |
US8972958B1 (en) * | 2012-10-23 | 2015-03-03 | Convey Computer | Multistage development workflow for generating a custom instruction set reconfigurable processor |
US8938590B2 (en) * | 2008-10-18 | 2015-01-20 | Micron Technology, Inc. | Indirect register access method and system |
US8209521B2 (en) | 2008-10-18 | 2012-06-26 | Micron Technology, Inc. | Methods of indirect register access including automatic modification of a directly accessible address register |
US7970964B2 (en) | 2008-11-05 | 2011-06-28 | Micron Technology, Inc. | Methods and systems to accomplish variable width data input |
US7917684B2 (en) | 2008-11-05 | 2011-03-29 | Micron Technology, Inc. | Bus translator |
US8402188B2 (en) | 2008-11-10 | 2013-03-19 | Micron Technology, Inc. | Methods and systems for devices with a self-selecting bus decoder |
US9164945B2 (en) | 2008-12-01 | 2015-10-20 | Micron Technology, Inc. | Devices, systems, and methods to synchronize parallel processing of a single data stream |
US20100138575A1 (en) | 2008-12-01 | 2010-06-03 | Micron Technology, Inc. | Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices |
US9348784B2 (en) | 2008-12-01 | 2016-05-24 | Micron Technology, Inc. | Systems and methods for managing endian mode of a device |
US8140780B2 (en) | 2008-12-31 | 2012-03-20 | Micron Technology, Inc. | Systems, methods, and devices for configuring a device |
US20100174887A1 (en) | 2009-01-07 | 2010-07-08 | Micron Technology Inc. | Buses for Pattern-Recognition Processors |
US8281395B2 (en) | 2009-01-07 | 2012-10-02 | Micron Technology, Inc. | Pattern-recognition processor with matching-data reporting module |
US8214672B2 (en) | 2009-01-07 | 2012-07-03 | Micron Technology, Inc. | Method and systems for power consumption management of a pattern-recognition processor |
US9836555B2 (en) | 2009-06-26 | 2017-12-05 | Micron Technology, Inc. | Methods and devices for saving and/or restoring a state of a pattern-recognition processor |
US9501705B2 (en) | 2009-12-15 | 2016-11-22 | Micron Technology, Inc. | Methods and apparatuses for reducing power consumption in a pattern recognition processor |
US9323994B2 (en) | 2009-12-15 | 2016-04-26 | Micron Technology, Inc. | Multi-level hierarchical routing matrices for pattern-recognition processors |
US8601013B2 (en) | 2010-06-10 | 2013-12-03 | Micron Technology, Inc. | Analyzing data using a hierarchical structure |
KR101640295B1 (ko) | 2011-01-25 | 2016-07-15 | 마이크론 테크놀로지, 인크. | 정규 표현을 컴파일하기 위한 방법 및 장치 |
EP2668574B1 (en) | 2011-01-25 | 2021-11-24 | Micron Technology, INC. | Utilizing special purpose elements to implement a fsm |
WO2012103151A2 (en) | 2011-01-25 | 2012-08-02 | Micron Technology, Inc. | State grouping for element utilization |
KR101607736B1 (ko) | 2011-01-25 | 2016-03-30 | 마이크론 테크놀로지, 인크. | 오토마톤의 진입 차수 및/또는 진출 차수를 제어하기 위한 양화 언롤링 |
US8648621B2 (en) * | 2011-12-15 | 2014-02-11 | Micron Technology, Inc. | Counter operation in a state machine lattice |
US9443156B2 (en) | 2011-12-15 | 2016-09-13 | Micron Technology, Inc. | Methods and systems for data analysis in a state machine |
US8680888B2 (en) | 2011-12-15 | 2014-03-25 | Micron Technologies, Inc. | Methods and systems for routing in a state machine |
US8593175B2 (en) | 2011-12-15 | 2013-11-26 | Micron Technology, Inc. | Boolean logic in a state machine lattice |
US8782624B2 (en) | 2011-12-15 | 2014-07-15 | Micron Technology, Inc. | Methods and systems for detection in a state machine |
US9116947B2 (en) * | 2012-03-15 | 2015-08-25 | Hewlett-Packard Development Company, L.P. | Data-record pattern searching |
US20130275709A1 (en) | 2012-04-12 | 2013-10-17 | Micron Technology, Inc. | Methods for reading data from a storage buffer including delaying activation of a column select |
US10430190B2 (en) | 2012-06-07 | 2019-10-01 | Micron Technology, Inc. | Systems and methods for selectively controlling multithreaded execution of executable code segments |
US9235798B2 (en) | 2012-07-18 | 2016-01-12 | Micron Technology, Inc. | Methods and systems for handling data received by a state machine engine |
US9389841B2 (en) | 2012-07-18 | 2016-07-12 | Micron Technology, Inc. | Methods and systems for using state vector data in a state machine engine |
US9524248B2 (en) | 2012-07-18 | 2016-12-20 | Micron Technology, Inc. | Memory management for a hierarchical memory system |
US9304968B2 (en) | 2012-07-18 | 2016-04-05 | Micron Technology, Inc. | Methods and devices for programming a state machine engine |
US9075428B2 (en) | 2012-08-31 | 2015-07-07 | Micron Technology, Inc. | Results generation for state machine engines |
US9501131B2 (en) | 2012-08-31 | 2016-11-22 | Micron Technology, Inc. | Methods and systems for power management in a pattern recognition processing system |
US9063532B2 (en) | 2012-08-31 | 2015-06-23 | Micron Technology, Inc. | Instruction insertion in state machine engines |
US9459862B2 (en) | 2013-01-29 | 2016-10-04 | ArtinSoft Corporation | Automated porting of application to mobile infrastructures |
US10019259B2 (en) | 2013-01-29 | 2018-07-10 | Mobilize.Net Corporation | Code transformation using extensibility libraries |
US9465608B2 (en) * | 2013-03-15 | 2016-10-11 | ArtinSoft Corporation | Code separation with semantic guarantees |
US10061573B2 (en) | 2013-01-29 | 2018-08-28 | Mobilize.Net Corporation | User interfaces of application porting software platform |
US9703574B2 (en) | 2013-03-15 | 2017-07-11 | Micron Technology, Inc. | Overflow detection and correction in state machine engines |
US9448965B2 (en) | 2013-03-15 | 2016-09-20 | Micron Technology, Inc. | Receiving data streams in parallel and providing a first portion of data to a first state machine engine and a second portion to a second state machine |
US9742739B2 (en) * | 2013-04-25 | 2017-08-22 | Secretskydb Ltd. | Accumulating automata and cascaded equations automata for non-interactive and perennial secure multi-party computation |
US9489215B2 (en) * | 2013-08-01 | 2016-11-08 | Dell Software Inc. | Managing an expression-based DFA construction process |
US10229104B2 (en) | 2013-08-01 | 2019-03-12 | Sonicwall Inc. | Efficient DFA generation for non-matching characters and character classes in regular expressions |
US9405652B2 (en) * | 2013-10-31 | 2016-08-02 | Red Hat, Inc. | Regular expression support in instrumentation languages using kernel-mode executable code |
US10275553B2 (en) * | 2014-01-15 | 2019-04-30 | Oracle International Corporation | Custom circuit power analysis |
US20190113542A1 (en) * | 2014-12-17 | 2019-04-18 | Tektronix, Inc. | Hardware trigger generation from a declarative protocol description |
WO2016109571A1 (en) | 2014-12-30 | 2016-07-07 | Micron Technology, Inc | Devices for time division multiplexing of state machine engine signals |
US11366675B2 (en) | 2014-12-30 | 2022-06-21 | Micron Technology, Inc. | Systems and devices for accessing a state machine |
US10430210B2 (en) | 2014-12-30 | 2019-10-01 | Micron Technology, Inc. | Systems and devices for accessing a state machine |
US10977309B2 (en) | 2015-10-06 | 2021-04-13 | Micron Technology, Inc. | Methods and systems for creating networks |
US10846103B2 (en) | 2015-10-06 | 2020-11-24 | Micron Technology, Inc. | Methods and systems for representing processing resources |
US10691964B2 (en) | 2015-10-06 | 2020-06-23 | Micron Technology, Inc. | Methods and systems for event reporting |
US9792907B2 (en) | 2015-11-24 | 2017-10-17 | Intel IP Corporation | Low resource key phrase detection for wake on voice |
US10198646B2 (en) | 2016-07-01 | 2019-02-05 | International Business Machines Corporation | Hardware compilation of cascaded grammars |
US10146555B2 (en) | 2016-07-21 | 2018-12-04 | Micron Technology, Inc. | Adaptive routing to avoid non-repairable memory and logic defects on automata processor |
AU2016228166A1 (en) * | 2016-09-13 | 2018-03-29 | Canon Kabushiki Kaisha | Visualisation for guided algorithm design to create hardware friendly algorithms |
US10019311B2 (en) | 2016-09-29 | 2018-07-10 | Micron Technology, Inc. | Validation of a symbol response memory |
US10268602B2 (en) | 2016-09-29 | 2019-04-23 | Micron Technology, Inc. | System and method for individual addressing |
US20180113951A1 (en) * | 2016-10-20 | 2018-04-26 | Micron Technology, Inc. | Graph traversal using automata processor |
US10929764B2 (en) | 2016-10-20 | 2021-02-23 | Micron Technology, Inc. | Boolean satisfiability |
US10592450B2 (en) | 2016-10-20 | 2020-03-17 | Micron Technology, Inc. | Custom compute cores in integrated circuit devices |
KR20180080463A (ko) * | 2017-01-04 | 2018-07-12 | 삼성전자주식회사 | 반도체 장치 및 반도체 장치의 동작 방법 |
US10481881B2 (en) * | 2017-06-22 | 2019-11-19 | Archeo Futurus, Inc. | Mapping a computer code to wires and gates |
US9996328B1 (en) * | 2017-06-22 | 2018-06-12 | Archeo Futurus, Inc. | Compiling and optimizing a computer code by minimizing a number of states in a finite machine corresponding to the computer code |
CN108874394A (zh) * | 2018-04-17 | 2018-11-23 | 上海达野智能科技有限公司 | 机器人用户程序的解释方法及解释装置 |
US10714122B2 (en) | 2018-06-06 | 2020-07-14 | Intel Corporation | Speech classification of audio for wake on voice |
US10635419B2 (en) * | 2018-07-13 | 2020-04-28 | Fungible, Inc. | Incremental compilation of finite automata for a regular expression accelerator |
US10983721B2 (en) | 2018-07-13 | 2021-04-20 | Fungible, Inc. | Deterministic finite automata node construction and memory mapping for regular expression accelerator |
US10656949B2 (en) | 2018-07-13 | 2020-05-19 | Fungible, Inc. | Instruction-based non-deterministic finite state automata accelerator |
US10650807B2 (en) | 2018-09-18 | 2020-05-12 | Intel Corporation | Method and system of neural network keyphrase detection |
US11127394B2 (en) | 2019-03-29 | 2021-09-21 | Intel Corporation | Method and system of high accuracy keyphrase detection for low resource devices |
US11636115B2 (en) | 2019-09-26 | 2023-04-25 | Fungible, Inc. | Query processing using data processing units having DFA/NFA hardware accelerators |
US11263190B2 (en) | 2019-09-26 | 2022-03-01 | Fungible, Inc. | Data ingestion and storage by data processing unit having stream-processing hardware accelerators |
US11636154B2 (en) | 2019-09-26 | 2023-04-25 | Fungible, Inc. | Data flow graph-driven analytics platform using data processing units having hardware accelerators |
US20210216879A1 (en) * | 2020-01-13 | 2021-07-15 | International Business Machines Corporation | Methods and systems for improving heuristic searches for artificial intelligence planning |
US11934964B2 (en) | 2020-03-20 | 2024-03-19 | Microsoft Technology Licensing, Llc | Finite automata global counter in a data flow graph-driven analytics platform having analytics hardware accelerators |
US11630729B2 (en) | 2020-04-27 | 2023-04-18 | Fungible, Inc. | Reliability coding with reduced network traffic |
US11704460B2 (en) * | 2020-06-10 | 2023-07-18 | University Of Florida Research Foundation, Incorporated | System and method for fast and accurate netlist to RTL reverse engineering |
US11385876B1 (en) * | 2021-04-01 | 2022-07-12 | Salesforce.Com, Inc. | Infrastructure control interface for database systems |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5537580A (en) * | 1994-12-21 | 1996-07-16 | Vlsi Technology, Inc. | Integrated circuit fabrication using state machine extraction from behavioral hardware description language |
US6748588B1 (en) * | 1999-03-31 | 2004-06-08 | Microsoft Corporation | One-pass greedy-pattern-matching finite-state-machine code generation |
CN1877531A (zh) * | 2006-06-30 | 2006-12-13 | 浙江大学 | 一种嵌入式编译体系扫描器的实现方法 |
CN101201836A (zh) * | 2007-09-04 | 2008-06-18 | 浙江大学 | 基于带记忆确定有限自动机的正则表达式匹配加速方法 |
Family Cites Families (86)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5081608A (en) | 1988-04-18 | 1992-01-14 | Matsushita Electric Industrial Co., Ltd. | Apparatus for processing record-structured data by inserting replacement data of arbitrary length into selected data fields |
JP3130326B2 (ja) | 1991-03-20 | 2001-01-31 | 富士通株式会社 | 階層ネットワーク構成演算素子 |
US5586266A (en) | 1993-10-15 | 1996-12-17 | International Business Machines Corporation | System and method for adaptive, active monitoring of a serial data stream having a characteristic pattern |
US5831853A (en) | 1995-06-07 | 1998-11-03 | Xerox Corporation | Automatic construction of digital controllers/device drivers for electro-mechanical systems using component models |
US5729678A (en) | 1996-03-04 | 1998-03-17 | Ag Communication Systems Corporation | Bus monitor system |
EP0938701B1 (en) | 1996-11-14 | 2003-11-05 | Alcatel USA Sourcing, L.P. | Generic software state machine and method of constructing dynamic objects for an application program |
US5966534A (en) | 1997-06-27 | 1999-10-12 | Cooke; Laurence H. | Method for compiling high level programming languages into an integrated processor with reconfigurable logic |
US6262594B1 (en) | 1999-11-05 | 2001-07-17 | Ati International, Srl | Apparatus and method for configurable use of groups of pads of a system on chip |
US6564336B1 (en) | 1999-12-29 | 2003-05-13 | General Electric Company | Fault tolerant database for picture archiving and communication systems |
US7140018B1 (en) | 2000-06-20 | 2006-11-21 | International Business Machines Corporation | Method of using a distinct flow of computational control as a reusable abstract data object |
US6832378B1 (en) | 2000-06-20 | 2004-12-14 | International Business Machines Corporation | Parallel software processing system |
US6507903B1 (en) | 2000-06-20 | 2003-01-14 | International Business Machines Corporation | High performance non-blocking parallel storage manager for parallel software executing on coordinates |
GB2367917A (en) | 2000-10-12 | 2002-04-17 | Qas Systems Ltd | Retrieving data representing a postal address from a database of postal addresses using a trie structure |
US7010476B2 (en) * | 2000-12-18 | 2006-03-07 | Xerox Corporation | Method and apparatus for constructing finite-state networks modeling non-concatenative processes |
US7020850B2 (en) * | 2001-05-02 | 2006-03-28 | The Mathworks, Inc. | Event-based temporal logic |
JP4846924B2 (ja) | 2001-05-31 | 2011-12-28 | キヤノン株式会社 | パターン認識装置 |
US7546354B1 (en) | 2001-07-06 | 2009-06-09 | Emc Corporation | Dynamic network based storage with high availability |
JP2003044184A (ja) | 2001-08-01 | 2003-02-14 | Canon Inc | データ処理装置及び電力制御方法 |
US7170891B2 (en) | 2001-08-30 | 2007-01-30 | Messenger Terabit Networks, Inc. | High speed data classification system |
US20030066050A1 (en) | 2001-09-26 | 2003-04-03 | Wang Douglas W. | Method and system for programming devices using finite state machine descriptions |
US6957371B2 (en) * | 2001-12-04 | 2005-10-18 | Intellitech Corporation | Method and apparatus for embedded built-in self-test (BIST) of electronic circuits and systems |
US6785872B2 (en) | 2002-01-22 | 2004-08-31 | Hewlett-Packard Development Company, L.P. | Algorithm-to-hardware system and method for creating a digital circuit |
US20040127207A1 (en) * | 2002-09-25 | 2004-07-01 | Interdigital Technology Corporation | Programmable radio interface |
US7124392B2 (en) * | 2002-09-27 | 2006-10-17 | Stmicroelectronics, Pvt. Ltd. | Mapping of programmable logic devices |
US7171561B2 (en) | 2002-10-17 | 2007-01-30 | The United States Of America As Represented By The Secretary Of The Air Force | Method and apparatus for detecting and extracting fileprints |
US7464254B2 (en) | 2003-01-09 | 2008-12-09 | Cisco Technology, Inc. | Programmable processor apparatus integrating dedicated search registers and dedicated state machine registers with associated execution hardware to support rapid application of rulesets to data |
CN1894559A (zh) | 2003-03-17 | 2007-01-10 | 索尼电子有限公司 | 执行使命引擎的方法和装置 |
JP4620944B2 (ja) | 2003-10-16 | 2011-01-26 | キヤノン株式会社 | 積和演算回路及びその方法 |
ATE542176T1 (de) | 2003-10-16 | 2012-02-15 | Canon Kk | Betriebsschaltung und betriebssteuerverfahren dafür |
US7487542B2 (en) | 2004-01-14 | 2009-02-03 | International Business Machines Corporation | Intrusion detection using a network processor and a parallel pattern detection engine |
US20050268258A1 (en) | 2004-06-01 | 2005-12-01 | Tera Systems, Inc. | Rule-based design consultant and method for integrated circuit design |
US20050283743A1 (en) | 2004-06-07 | 2005-12-22 | Mulholland Philip J | Method for generating hardware information |
US20060020589A1 (en) | 2004-07-26 | 2006-01-26 | Nokia Corporation | System and method for searching for content stored by one or more media servers |
US8135652B2 (en) | 2004-10-29 | 2012-03-13 | Nec Laboratories America, Inc. | Parallel support vector method and apparatus |
US7392229B2 (en) | 2005-02-12 | 2008-06-24 | Curtis L. Harris | General purpose set theoretic processor |
US7761851B2 (en) | 2005-05-31 | 2010-07-20 | International Business Machines Corporation | Computer method and system for integrating software development and deployment |
US7805301B2 (en) | 2005-07-01 | 2010-09-28 | Microsoft Corporation | Covariance estimation for pattern recognition |
US20070112701A1 (en) | 2005-08-15 | 2007-05-17 | Microsoft Corporation | Optimization of cascaded classifiers |
WO2007055181A1 (ja) | 2005-11-11 | 2007-05-18 | Matsushita Electric Industrial Co., Ltd. | 対話支援装置 |
JP4528728B2 (ja) | 2006-01-31 | 2010-08-18 | 株式会社東芝 | デジタル回路の自動設計装置、自動設計方法、および自動設計プログラム |
US7427871B2 (en) * | 2006-06-21 | 2008-09-23 | Element Cxi, Llc | Fault tolerant integrated circuit architecture |
US7809723B2 (en) | 2006-06-26 | 2010-10-05 | Microsoft Corporation | Distributed hierarchical text classification framework |
US8065249B1 (en) | 2006-10-13 | 2011-11-22 | Harris Curtis L | GPSTP with enhanced aggregation functionality |
US7774286B1 (en) | 2006-10-24 | 2010-08-10 | Harris Curtis L | GPSTP with multiple thread functionality |
US7962428B2 (en) | 2006-11-30 | 2011-06-14 | Siemens Medical Solutions Usa, Inc. | System and method for joint optimization of cascaded classifiers for computer aided detection |
US20080168013A1 (en) | 2006-12-05 | 2008-07-10 | Paul Cadaret | Scalable pattern recognition system |
US8656381B2 (en) | 2006-12-07 | 2014-02-18 | International Business Machines Corporation | Presenting machine instructions in a machine-independent tree form suitable for post-link optimizations |
WO2008073824A1 (en) * | 2006-12-08 | 2008-06-19 | Pandya Ashish A | Dynamic programmable intelligent search memory |
US7899977B2 (en) | 2006-12-08 | 2011-03-01 | Pandya Ashish A | Programmable intelligent search memory |
CN101013452A (zh) | 2007-02-05 | 2007-08-08 | 江苏大学 | 一种符号化的模型检测方法 |
US7693806B2 (en) | 2007-06-21 | 2010-04-06 | Microsoft Corporation | Classification using a cascade approach |
CN101360088B (zh) | 2007-07-30 | 2011-09-14 | 华为技术有限公司 | 正则表达式编译、匹配***及编译、匹配方法 |
US8561037B2 (en) | 2007-08-29 | 2013-10-15 | Convey Computer | Compiler for generating an executable comprising instructions for a plurality of different instruction sets |
JP4957500B2 (ja) | 2007-10-12 | 2012-06-20 | 日本電気株式会社 | 文字列照合回路 |
CN101499065B (zh) | 2008-02-01 | 2011-11-02 | 华为技术有限公司 | 基于fa的表项压缩方法及装置、表项匹配方法及装置 |
CN101339501B (zh) | 2008-08-12 | 2012-07-18 | 北京航空航天大学 | 基于有向图的ws-bpel控制环路检测方法 |
JP5321589B2 (ja) | 2008-08-13 | 2013-10-23 | 日本電気株式会社 | 有限オートマトン生成装置、パターンマッチング装置、有限オートマトン回路生成方法およびプログラム |
US8095494B2 (en) * | 2008-10-16 | 2012-01-10 | International Business Machines Corporation | Rules-based cross-FSM transition triggering |
US8938590B2 (en) | 2008-10-18 | 2015-01-20 | Micron Technology, Inc. | Indirect register access method and system |
US8209521B2 (en) | 2008-10-18 | 2012-06-26 | Micron Technology, Inc. | Methods of indirect register access including automatic modification of a directly accessible address register |
US8805686B2 (en) | 2008-10-31 | 2014-08-12 | Soundbound, Inc. | Melodis crystal decoder method and device for searching an utterance by accessing a dictionary divided among multiple parallel processors |
US7970964B2 (en) | 2008-11-05 | 2011-06-28 | Micron Technology, Inc. | Methods and systems to accomplish variable width data input |
US9639493B2 (en) | 2008-11-05 | 2017-05-02 | Micron Technology, Inc. | Pattern-recognition processor with results buffer |
US7917684B2 (en) | 2008-11-05 | 2011-03-29 | Micron Technology, Inc. | Bus translator |
US20100118425A1 (en) | 2008-11-11 | 2010-05-13 | Menachem Rafaelof | Disturbance rejection in a servo control loop using pressure-based disc mode sensor |
US10007486B2 (en) | 2008-12-01 | 2018-06-26 | Micron Technology, Inc. | Systems and methods to enable identification of different data sets |
US9348784B2 (en) | 2008-12-01 | 2016-05-24 | Micron Technology, Inc. | Systems and methods for managing endian mode of a device |
US9164945B2 (en) | 2008-12-01 | 2015-10-20 | Micron Technology, Inc. | Devices, systems, and methods to synchronize parallel processing of a single data stream |
US20100138575A1 (en) | 2008-12-01 | 2010-06-03 | Micron Technology, Inc. | Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices |
US8140780B2 (en) | 2008-12-31 | 2012-03-20 | Micron Technology, Inc. | Systems, methods, and devices for configuring a device |
TWI395103B (zh) | 2008-12-31 | 2013-05-01 | C Media Electronics Inc | 自動執行訊號處理方法與具有該自動執行功能之裝置 |
US8281395B2 (en) | 2009-01-07 | 2012-10-02 | Micron Technology, Inc. | Pattern-recognition processor with matching-data reporting module |
US8214672B2 (en) | 2009-01-07 | 2012-07-03 | Micron Technology, Inc. | Method and systems for power consumption management of a pattern-recognition processor |
US20100174887A1 (en) | 2009-01-07 | 2010-07-08 | Micron Technology Inc. | Buses for Pattern-Recognition Processors |
US8843523B2 (en) | 2009-01-12 | 2014-09-23 | Micron Technology, Inc. | Devices, systems, and methods for communicating pattern matching results of a parallel pattern search engine |
US20100325633A1 (en) | 2009-06-19 | 2010-12-23 | Microsoft Corporation | Searching Regular Expressions With Virtualized Massively Parallel Programmable Hardware |
US9836555B2 (en) | 2009-06-26 | 2017-12-05 | Micron Technology, Inc. | Methods and devices for saving and/or restoring a state of a pattern-recognition processor |
US8489534B2 (en) | 2009-12-15 | 2013-07-16 | Paul D. Dlugosch | Adaptive content inspection |
US9323994B2 (en) | 2009-12-15 | 2016-04-26 | Micron Technology, Inc. | Multi-level hierarchical routing matrices for pattern-recognition processors |
US9501705B2 (en) | 2009-12-15 | 2016-11-22 | Micron Technology, Inc. | Methods and apparatuses for reducing power consumption in a pattern recognition processor |
US8601013B2 (en) | 2010-06-10 | 2013-12-03 | Micron Technology, Inc. | Analyzing data using a hierarchical structure |
US8766666B2 (en) | 2010-06-10 | 2014-07-01 | Micron Technology, Inc. | Programmable device, hierarchical parallel machines, and methods for providing state information |
WO2012103151A2 (en) | 2011-01-25 | 2012-08-02 | Micron Technology, Inc. | State grouping for element utilization |
EP2668574B1 (en) | 2011-01-25 | 2021-11-24 | Micron Technology, INC. | Utilizing special purpose elements to implement a fsm |
KR101640295B1 (ko) | 2011-01-25 | 2016-07-15 | 마이크론 테크놀로지, 인크. | 정규 표현을 컴파일하기 위한 방법 및 장치 |
KR101607736B1 (ko) | 2011-01-25 | 2016-03-30 | 마이크론 테크놀로지, 인크. | 오토마톤의 진입 차수 및/또는 진출 차수를 제어하기 위한 양화 언롤링 |
-
2012
- 2012-01-24 KR KR1020137022309A patent/KR101640295B1/ko active IP Right Grant
- 2012-01-24 EP EP12739626.5A patent/EP2668575B1/en active Active
- 2012-01-24 CN CN201280012402.2A patent/CN103547998B/zh active Active
- 2012-01-24 WO PCT/US2012/022435 patent/WO2012103143A2/en active Application Filing
- 2012-01-24 JP JP2013550669A patent/JP5763783B2/ja active Active
- 2012-01-24 US US13/357,472 patent/US8726253B2/en active Active
- 2012-01-30 TW TW101102912A patent/TWI506556B/zh active
-
2014
- 2014-04-14 US US14/252,542 patent/US9146714B2/en active Active
-
2015
- 2015-09-28 US US14/868,047 patent/US9792097B2/en active Active
-
2017
- 2017-08-11 US US15/675,391 patent/US10089086B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5537580A (en) * | 1994-12-21 | 1996-07-16 | Vlsi Technology, Inc. | Integrated circuit fabrication using state machine extraction from behavioral hardware description language |
US6748588B1 (en) * | 1999-03-31 | 2004-06-08 | Microsoft Corporation | One-pass greedy-pattern-matching finite-state-machine code generation |
CN1877531A (zh) * | 2006-06-30 | 2006-12-13 | 浙江大学 | 一种嵌入式编译体系扫描器的实现方法 |
CN101201836A (zh) * | 2007-09-04 | 2008-06-18 | 浙江大学 | 基于带记忆确定有限自动机的正则表达式匹配加速方法 |
Non-Patent Citations (1)
Title |
---|
"Fast Regular Expression Matching Using FPGAs";Reetinder Sidhu et al;《The 9th Annual IEEE Symposium on Field-Programmable Custom Computing Matchines》;20010329;正文第2.1-2.4、3.4、4.2节,附图1-5、7、11 * |
Also Published As
Publication number | Publication date |
---|---|
WO2012103143A2 (en) | 2012-08-02 |
KR20140006913A (ko) | 2014-01-16 |
US9792097B2 (en) | 2017-10-17 |
KR101640295B1 (ko) | 2016-07-15 |
TWI506556B (zh) | 2015-11-01 |
US9146714B2 (en) | 2015-09-29 |
EP2668575B1 (en) | 2021-10-20 |
US10089086B2 (en) | 2018-10-02 |
CN103547998A (zh) | 2014-01-29 |
EP2668575A4 (en) | 2014-07-16 |
US20140229925A1 (en) | 2014-08-14 |
EP2668575A2 (en) | 2013-12-04 |
US20170364337A1 (en) | 2017-12-21 |
US20160019034A1 (en) | 2016-01-21 |
US20120192163A1 (en) | 2012-07-26 |
WO2012103143A3 (en) | 2012-11-15 |
JP2014504767A (ja) | 2014-02-24 |
TW201246081A (en) | 2012-11-16 |
US8726253B2 (en) | 2014-05-13 |
JP5763783B2 (ja) | 2015-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103547998B (zh) | 用于编译正则表达式的方法和设备 | |
CN103547999B (zh) | 利用专用元件实施有限状态机 | |
CN103443767B (zh) | 展开量化以控制自动机的入度和/或出度 | |
CN103430148B (zh) | 用于元件利用的状态分组 | |
CN104011736B (zh) | 用于状态机中的检测的方法及*** | |
KR101873619B1 (ko) | 상태 기계 격자에서의 불리언 로직 | |
CN103988212B (zh) | 用于在状态机中路由的方法及*** | |
US9058465B2 (en) | Counter operation in a state machine lattice | |
CN103999035A (zh) | 用于状态机中的数据分析的方法及*** | |
KR20150037937A (ko) | 상태 기계 엔진에 의해 수신된 데이터를 핸들링하기 위한 방법들 및 시스템들 | |
CN104487956A (zh) | 用于使用状态机引擎中的状态向量数据的方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |