CN104471552B - 用于处置状态机引擎所接收的数据的方法及*** - Google Patents
用于处置状态机引擎所接收的数据的方法及*** Download PDFInfo
- Publication number
- CN104471552B CN104471552B CN201380038242.3A CN201380038242A CN104471552B CN 104471552 B CN104471552 B CN 104471552B CN 201380038242 A CN201380038242 A CN 201380038242A CN 104471552 B CN104471552 B CN 104471552B
- Authority
- CN
- China
- Prior art keywords
- data
- buffer
- state machine
- block
- byte
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/12—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
- G06F13/124—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Human Computer Interaction (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Computer Hardware Design (AREA)
- Logic Circuits (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明揭示一种用以分析数据的数据分析***(10)。所述数据分析***(10)包含经配置以接收待分析的数据的数据缓冲器(132)。所述数据分析***(10)还包含状态机品格(30)。所述状态机品格(30)包含多个数据分析元件,且每一数据分析元件(34、36)包含经配置以分析所述数据的至少一部分且输出所述分析的结果的多个存储器单元(80)。所述数据分析***(10)包含经配置以从所述数据缓冲器(132)接收所述数据且将所述数据提供到所述状态机品格(30)的缓冲器接口(136)。
Description
技术领域
本发明的实施例大体上涉及电子装置,且更具体来说,在某些实施例中涉及具有用于数据分析的并行装置的电子装置。
背景技术
对常规基于冯·诺伊曼(von Neumann)的计算机执行复杂数据分析(例如,模式识别)的效率可能较低。然而,生物大脑(尤其人类大脑)善于执行复杂的数据分析。当前研究表明,人类大脑使用大脑新皮质中的一系列经阶层式组织的神经元层执行数据分析。阶层的较低层中的神经元分析来自(例如)感觉器官的“原始信号”,而较高层中的神经元分析来自较低层级中的神经元的信号输出。大脑新皮质中的此阶层式***可能结合大脑的其它区域完成复杂数据分析,此使人类能够执行例如空间推理、意识思考及复杂语言等高级功能。
在计算领域中,举例来说,模式识别任务越来越具有挑战性。计算机之间发射的数据量不断增大且用户希望检测的模式数目日益增加。例如,通常通过在数据流中搜索模式(例如,特定词组或代码片段)来检测垃圾邮件或恶意软件。模式数目随着垃圾邮件及恶意软件的多样化而增加,这是因为可实施新模式以搜索新变型。针对这些模式中的每一者搜索数据流可形成计算瓶颈。通常,当接收到数据流时,针对每一模式一次一个地搜索数据流。在***准备搜索数据流的下一部分之前的延迟随模式数目增加。因此,模式识别可使数据的接收减慢。
硬件已经设计以针对模式搜索数据流,但是此硬件通常不能在给定的时间量期间处理足够的数据量。经配置以搜索数据流的一些装置通过将数据流散布在多个电路之间来进行此操作。所述电路各自确定数据流是否与模式的一部分匹配。通常,大量电路并行操作,其中每一者大体上同时搜索数据流。然而,至今仍未存在实际上允许以与生物大脑的方式更相当的方式执行复杂数据分析的***。开发此***是合乎需要的。
发明内容
根据本发明的一个方面,一种数据分析***包括:数据缓冲器,其经配置以接收待分析的数据;状态机晶格,其包括多个可配置元件且每一可配置元件包括经配置以分析所述数据的至少一部分并输出所述分析的结果的多个存储器单元;及缓冲器接口,其经配置以从所述数据缓冲器接收所述数据并将所述数据提供到所述状态机晶格,其中所述数据缓冲器经配置以经由数据突发将数据提供到所述缓冲器接口,且每一数据突发包括用于多个状态机晶格中的每一者的数据的预定部分。
根据本发明的另一方面,一种数据分析***包括:多个状态机引擎,每一状态机引擎包括具有多个数据分析元件的状态机晶格,每一数据分析元件包括经配置以分析数据的至少一部分并输出所述分析的结果的多个存储器单元;缓冲器接口,其耦合到所述多个状态机引擎中的每一者且经配置以接收所述数据并将所述数据提供到所述多个状态机引擎;及经配置以接收待分析的数据并将所述数据提供到所述缓冲器接口的数据缓冲器,其中所述数据缓冲器经配置以接收所述数据作为数据块的群组,数据块的每一群组包括用于所述多个状态机引擎中的每一者的一数据块,其中所述数据块中的至少一者包括与字节填补组合的有效数据。
根据本发明的又一方面,一种用于在数据分析***中的装置之间提供数据的方法包括:在缓冲器接口的输入处从第一装置接收数据;及在所述缓冲器接口的输出处将所述数据提供到第二装置;其中所述缓冲器接口实现数据缓冲器***与多个有限状态机核心之间的通信。
根据本发明的再一方面,一种用于准备待发送到数据分析***的数据的方法包括:将数据流的数据分段指派到多个数据块,其中每一数据分段包括待分析的数据集合且每一数据块经配置以被提供到多个状态机引擎的对应状态机引擎;在所述数据分段的至少一部分之间提供数据填补;在所述多个数据块的所述数据分段的末端处提供数据填补以产生长度相同的每一数据块;及将所述多个数据块提供到所述数据分析***。
根据本发明的另一方面,一种状态机引擎包括:总线接口,其经配置以接收待分析的数据;及数据缓冲器***,其经配置以从所述总线接口接收待分析的所述数据并将待分析的所述数据提供到状态机晶格;其中所述总线接口经配置以将待分析的所述数据提供到所述数据缓冲器***直到所述数据缓冲器***已满为止且在所述数据缓冲器***已满之后,所述总线接口经配置以用于其它目的。
附图说明
图1说明根据本发明的各种实施例的具有状态机引擎的***的实例。
图2说明根据本发明的各种实施例的图1的状态机引擎的有限状态机(FSM)晶格的实例。
图3说明根据本发明的各种实施例的图2的FSM晶格的块的实例。
图4说明根据本发明的各种实施例的图3的块的一行的实例。
图5说明根据本发明的各种实施例的图4的行的含两个元件的群组的实例。
图6说明根据本发明的各种实施例的有限状态机图表的实例。
图7说明根据本发明的各种实施例的使用FSM晶格实施的二层级阶层的实例。
图8说明根据本发明的各种实施例的编译器将源代码转换为二进制文件以编程图2的FSM晶格的方法的实例。
图9说明根据本发明的各种实施例的状态机引擎。
图10说明根据本发明的各种实施例的布置成一排装置的多个物理状态机引擎的实例。
图11说明根据本发明的各种实施例的分组成待提供到状态机引擎的数据块的数据分段的实例。
图12说明根据本发明的各种实施例的***于图11的数据块的数据分段之间的数据填补的实例。
图13说明根据本发明的各种实施例的***于图12的数据块的数据分段之后的数据填补的实例。
图14说明根据本发明的各种实施例的经组织以发射到状态机引擎的数据缓冲器***的图13的数据块的实例。
图15说明根据本发明的各种实施例的由状态机引擎接收的数据块的实例。
图16说明根据本发明的各种实施例的存储于状态机引擎的数据缓冲器***中的图15的数据块的实例。
图17说明根据本发明的各种实施例的正从数据缓冲器***提供到多个FSM晶格的数据的实例。
图18说明根据本发明的各种实施例的正提供到多个逻辑群组中的数据的实例。
具体实施方式
现转向图式,图1说明整体上由参考数字10指定的基于处理器的***的实施例。***10(例如,数据分析***)可为例如桌上型计算机、膝上型计算机、寻呼器、蜂窝式电话、个人记事簿、便携式音频播放器、控制电路、相机等多种类型中的任一者。*** 10还可为网络节点,例如路由器、服务器或客户端(例如,先前描述的计算机类型中的一者)。***10可为某个其它种类的电子装置,例如复印机、扫描仪、打印机、游戏控制台、电视机、机顶式视频分布(video distribution)或记录***、电缆箱、个人数字媒体播放器、工厂自动化***、汽车计算机***或医疗装置。(用以描述***的这些各种实例的术语(如本文中使用的许多其它术语)可共享一些参照物,且因此不应通过所列出的其它项狭隘地理解)。
在典型的基于处理器的装置(例如***10)中,例如微处理器等处理器12控制***10中的***功能及请求的处理。此外,处理器12可包括共享***控制的多个处理器。处理器12可直接或间接耦合到***10中的元件中的每一者,使得处理器12通过执行可存储于***10内或***10外部的指令而控制***10。
根据本文中描述的实施例,***10包含可在处理器12的控制下操作的状态机引擎14。如本文中所使用,状态机引擎14是指单个装置(例如,单芯片)。状态机引擎14可采用任何自动机理论。例如,状态机引擎14可采用数个状态机架构中的一者,包含(但不限于)Mealy架构、Moore架构、有限状态机(FSM)、确定性FSM(DFSM)、位并行状态机(BPSM)等等。虽然可使用多种架构,但是出于论述目的,本申请案引用FSM。然而,所属领域的技术人员将了解,可使用多种状态机架构中的任一者来采用所描述的技术。
如下文进一步论述,状态机引擎14可包含数个(例如,一或多个)有限状态机(FSM)晶格(例如,芯片的核心)。出于本申请案的目的,术语“晶格”是指元件(例如,布尔单元、计数器单元、状态机元件、状态转变元件)的组织框架(例如,路由矩阵、路由网络、帧)。此外,“晶格”可具有任何合适的形状、结构或阶层式组织(例如,栅格、立方形、球形、级联)。每一FSM晶格可实施各自并行接收及分析相同数据的多个FSM。此外,FSM晶格可布置成群组(例如,群集),使得FSM晶格的群集可并行分析相同输入数据。此外,状态机引擎14的FSM晶格的群集可布置在阶层式结构中,其中来自阶层式结构的较低层级上的状态机晶格的输出可用作到较高层级上的状态机晶格的输入。通过经由阶层式结构使状态机引擎14的并行FSM晶格的群集串联地级联,可分析(例如,评估、搜索等)日益复杂的模式。
此外,基于状态机引擎14的阶层式并行配置,状态机引擎14可用于利用高处理速度的***中的复杂数据分析(例如,模式识别)。例如,本文中描述的实施例可并入在具有1GByte/sec的处理速度的***中。因此,利用状态机引擎14,可迅速分析来自高速存储器装置或其它外部装置的数据。状态机引擎14可根据若干准则(例如,搜索项)大约同时(例如,在单个装置循环期间)分析数据流。状态机引擎14的一层级上的FSM群集 内的FSM晶格中的每一者可大约同时从数据流接收相同搜索项,且并行FSM晶格中的每一者可以处理准则确定所述项是否将状态机引擎14推进到下一状态。状态机引擎14可根据相对较大数目个准则(例如,大于100个、大于110个或大于10,000个准则)分析若干项。因为FSM晶格并行操作,所以其可将准则应用于具有相对高带宽的数据流(例如,大于或大体上等于1GByte/sec的数据流)而不使数据流减慢。
在一个实施例中,状态机引擎14可经配置以识别(例如,检测)数据流中的大量模式。例如,状态机引擎14可用以检测用户或其它实体可能希望分析的多种类型的数据流中的一或多者中的模式。例如,状态机引擎14可经配置以分析经由网络接收的数据流,例如经由因特网接收的包或经由蜂窝式网络接收的语音或数据。在一个实例中,状态机引擎14可经配置以分析垃圾邮件或恶意软件的数据流。数据流可被接收为串行数据流,其中以具有意义的次序(例如以时间、词汇或语义显著的次序)接收数据。或者,数据流可经并行或无序接收,且接着通过(例如)对经由因特网接收的包进行重新排序而转换为串行数据流。在一些实施例中,数据流可串行地呈现项,但是可并行接收表达所述项中的每一者的位。数据流可从***10外部的源接收,或可通过询问例如存储器16等存储器装置及由存储于存储器16中的数据形成数据流而形成。在其它实例中,状态机引擎14可经配置以识别拼写某一字的字符序列、指定基因的基因碱基对序列、形成图像的一部分的图片或视频文件中的位序列、形成程序的一部分的可执行文件中的位序列或形成歌曲或口语词组的一部分的音频文件中的位序列。待分析的数据流可包含呈二进制格式或其它格式(例如,十进制、ASCII等)的多个数据位。所述流可编码具有单个数字或多个数字(例如,若干二进制数字)的数据。
如将了解,***10可包含存储器16。存储器16可包含易失性存储器,例如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、同步DRAM(SDRAM)、双倍数据速率DRAM(DDR SDRAM)、DDR2SDRAM、DDR3SDRAM等。存储器16还可包含非易失性存储器,例如只读存储器(ROM)、PC-RAM、硅-氧化物-氮化物-氧化物-硅(SONOS)存储器、金属-氧化物-氮化物-氧化物-硅(MONOS)存储器、基于多晶硅浮动栅极的存储器及/或结合易失性存储器使用的各种架构的其它类型的快闪存储器(例如,NAND存储器、NOR存储器等)。存储器16可包含可提供待由状态机引擎14分析的数据的一或多个存储器装置,例如DRAM装置。如本文中所使用,术语“提供”一般可指代引导、输入、***、发送、传送、发射、产生、给定、输出、放置、写入等。此类装置可称为或包含固态驱动器(SSD)、多媒体卡(MMC)、安全数字(SD)卡、紧凑式闪存(CF)卡或任何其它合适的装置。此外,应了解,此类装置可经由任何合适的接口(例如通 用串行总线(USB)、***组件互连(PCI)、PCI Express(PCI-E)、小型计算机***接口(SCSI)、IEEE 1394(Firewire)或任何其它合适的接口)耦合到***10。为促进存储器16(例如快闪存储器装置)的操作,***10可包含存储器控制器(未说明)。如将了解,存储器控制器可为独立装置或其可与处理器12成一体。此外,***10可包含外部存储装置18,例如磁性存储装置。外部存储装置也可将输入数据提供到状态机引擎14。
***10可包含数个额外元件。例如,如关于图8更详细地描述,编译器20可用以配置(例如,编程)状态机引擎14。输入装置22也可耦合到处理器12以允许用户将数据输入到***10中。例如,输入装置22可用以将数据输入到存储器16中以供状态机引擎14随后分析。例如,输入装置22可包含按钮、交换元件、键盘、光笔、尖笔、鼠标及/或语音识别***。例如显示器等输出装置24也可耦合到处理器12。例如,显示器24可包含LCD、CRT、LED及/或音频显示器。其***还可包含用于与网络(例如因特网)介接(interface)的网络接口装置26,例如网络接口卡(NIC)。如将了解,取决于***10的应用,***10可包含许多其它组件。
图2到5说明FSM晶格30的实例。在一实例中,FSM晶格30包括块32的阵列。如将描述,每一块32可包含对应于FSM中的多个状态的多个可选择性地耦合的硬件元件(例如,可配置元件及/或专用元件)。类似于FSM中的状态,硬件元件可分析输入流并基于输入流激活下游硬件元件。
可配置元件可经配置(例如,编程)以实施许多不同功能。例如,可配置元件可包含阶层式地组织成行38(图3及4中所示)及块32(图2及3中所示)的状态机元件(SME)34、36(图5中所示)。SME还可被视为状态转变元件(STE)。为了在经阶层式组织的SME 34、36之间路由信号,可使用可配置交换元件的阶层,包含块间交换元件40(图2及3中所示)、块内交换元件42(图3及4中所示)及行内交换元件44(图4中所示)。
如上所述,交换元件可包含路由结构及缓冲器。SME 34、36可对应于由FSM晶格30实施的FSM的状态。SME 34、36可通过使用如下文描述的可配置交换元件而耦合在一起。因此,可通过以下每一者对FSM晶格30实施FSM:配置SME 34、36以对应于状态功能且选择性地将SME 34、36耦合在一起以对应于FSM中的状态之间的转变。
图2说明FSM晶格30的实例的整体视图。FSM晶格30包含可选择性地与可配置块间交换元件40耦合在一起的多个块32。块间交换元件40可包含导体46(例如,导线、迹线等等)及缓冲器48以及50。在一实例中,包含缓冲器48及50以控制信号往返于块间交换元件40的连接及时序。如下文进一步描述,缓冲器48可经提供以缓冲在块32之间发送的数据,而缓冲器50可经提供以缓冲在块间交换元件40之间发送的数据。此 外,块32可选择性地耦合到用于接收信号(例如,数据)且将数据提供到块32的输入块52(例如,数据输入端口)。块32还可选择性地耦合到用于将信号从块32提供到外部装置(例如,另一FSM晶格30)的输出块54(例如,输出端口)。FSM晶格30还可包含编程接口56以(例如,经由图像、程序)配置FSM晶格30。图像可配置(例如,设定)SME 34、36的状态。即,图像可配置SME 34、36以依某一方式对输入块52处的给定输入做出反应。例如,可设定SME 34、36以在输入块52处接收到字符“a”时输出高信号。
在一实例中,输入块52、输出块54及/或编程接口56可被实施为寄存器,使得到寄存器的写入或从寄存器的读取提供数据到相应元件或从相应元件提供数据。因此,可将来自存储于对应于编程接口56的寄存器中的图像的位加载于SME 34、36上。虽然图2说明块32、输入块52、输出块54及块间交换元件40之间的特定数目个导体(例如,导线、迹线),但是应理解在其它实例中,可使用更少或更多个导体。
图3说明块32的实例。块32可包含可选择性地与可配置块内交换元件42耦合在一起的多个行38。此外,行38可使用块间交换元件40选择性地耦合到另一块32内的另一行38。行38包含组织成在本文中称为含两个元件的群组(GOT)60的元件对的多个SME 34、36。在一实例中,块32包括十六(16)行38。
图4说明行38的实例。GOT 60可通过可配置行内交换元件44选择性地耦合到行38内的其它GOT 60及任何其它组件(例如,专用元件58)。GOT 60还可使用块内交换元件42耦合到其它行38中的其它GOT 60,或使用块间交换元件40耦合到其它块32中的其它GOT 60。在一实例中,GOT 60具有第一输入62及第二输入64以及输出66。如将参考图5进一步说明,第一输入62耦合到GOT 60的第一SME 34,且第二输入64耦合到GOT 60的第二SME 36。
在一实例中,行38包含第一多个行互连导体68及第二多个行互连导体70。在一实例中,GOT 60的输入62、64可耦合到一或多个行互连导体68、70,且输出66可耦合到一或多个行互连导体68、70。在一实例中,第一多个行互连导体68可耦合到行38内的每一GOT 60的每一SME 34、36。第二多个行互连导体70可耦合到行38内的每一GOT 60的仅一个SME 34、36,但无法耦合到GOT 60的另一SME 34、36。在一实例中,如将关于图5更好地说明,第二多个行互连导体70的第一半部分可耦合到行38内的SME 34、36的第一半部分(来自每一GOT60的一个SME 34、36),且第二多个行互连导体70的第二半部分可耦合到行38内的SME 34、36的第二半部分(来自每一GOT 60的另一SME 34、36)。第二多个行互连导体70与SME 34、36之间的有限连接性在本文中被称为“奇偶性(parity)”。在一实例中,行38还可包含专用元件58,例如计数器、可 配置布尔逻辑元件、查找表、RAM、现场可配置门阵列(FPGA)、专用集成电路(ASIC)、可配置处理器(例如,微处理器)或用于执行专用功能的其它元件。
在一实例中,专用元件58包括计数器(在本文中也被称为计数器58)。在一实例中,计数器58包括12位可配置递减计数器。12位可配置计数器58具有计数输入、复位输入及零计数输出。计数输入在经确立时使计数器58的值累减1。复位输入在经确立时使计数器58从相关联寄存器加载初始值。对于12位计数器58,可加载最多12位数字作为初始值。当计数器58的值累减到零(0)时,确立零计数输出。计数器58还具有至少两个模式:脉冲及保持。当将计数器58设定为脉冲模式时,零计数输出在计数器58达到零及时钟周期时被确立。零计数输出在计数器58的下一时钟周期期间被确立。导致计数器58在时间上偏离时钟周期。在下一时钟周期处,不再确立零计数输出。当将计数器58设定为保持模式时,零计数输出在计数器58累减到零的时钟周期期间经确立,且保持确立直到通过正经确立的复位输入复位计数器58为止。
在另一实例中,专用元件58包括布尔逻辑。例如,布尔逻辑可用以执行逻辑函数,例如AND、OR、NAND、NOR、积项的和(SoP)、否定输出积项的和(NSoP)、否定输出和项的积(NPoS)及和项的积(PoS)函数。此布尔逻辑可用以从FSM晶格30中的终端状态SME(如本文随后论述,对应于FSM的终端节点)提取数据。所提取的数据可用以将状态数据提供到其它FSM晶格30及/或提供用以重配置FSM晶格30或重配置另一FSM晶格30的配置数据。
图5说明GOT 60的实例。GOT 60包含第一SME 34及第二SME 36,其具有输入62、64且使其输出72、74耦合到OR门76及3对1多路复用器78。3对1多路复用器78可经设定以将GOT60的输出66耦合到第一SME 34、第二SME 36或OR门76。OR门76可用以将两个输出72、74耦合在一起以形成GOT 60的共同输出66。在一实例中,如上文论述,第一SME 34及第二SME 36展现奇偶性,在第一SME 34的输入62可耦合到一些行互连导体68且第二SME 36的输入64可耦合到其它行互连导体70的情况下,可产生可克服奇偶性问题的共同输出66。在一实例中,GOT 60内的两个SME 34、36可通过设定交换元件79中的任一者或二者而级联及/或回环回到其自身。SME 34、36可通过将SME 34、36的输出72、74耦合到另一SME 34、36的输入62、64而级联。SME 34、36可通过将输出72、74耦合到其自身输入62、64而回环回到其自身。因此,第一SME 34的输出72可不耦合到第一SME 34的输入62及第二SME 36的输入64、耦合到第一SME 34的输入62及第二SME 36的输入64中的一者或二者。
在一实例中,状态机元件34、36包括并联耦合到检测线82的多个存储器单元80,例如通常用于动态随机存取存储器(DRAM)中的存储器单元。一个此存储器单元80包括可设定为数据状态(例如对应于高值或低值(例如,1或0)的数据状态)的存储器单元。存储器单元80的输出耦合到检测线82且到存储器单元80的输入基于数据流线84上的数据接收信号。在一实例中,解码输入块52处的输入以选择存储器单元80中的一或多者。选定存储器单元80将其所存储的数据状态作为输出提供到检测线82上。例如,可将输入块52处接收的数据提供到解码器(未展示)且解码器可选择数据流线84中的一或多者。在一实例中,解码器可将8位ACSII字符转换到256个数据流线84的对应1数据流线。
因此,存储器单元80在其被设定为高值且数据流线84上的数据选择所述存储器单元80时将高信号输出到检测线82。当数据流线84上的数据选择存储器单元80且存储器单元80被设定为低值时,存储器单元80将低信号输出到检测线82。检测线82上来自存储器单元80的输出通过检测单元86感测。
在一实例中,输入线62、64上的信号将相应检测单元86设定为有源状态或非有源状态。当设定为非有源状态时,不管相应检测线82上的信号如何,检测单元86在相应输出72、74上输出低信号。当设定为有源状态时,检测单元86在从相应SME 34、36的存储器单元80中的一者检测到高信号时在相应输出72、74上输出高信号。当处于有源状态时,检测单元86在来自相应SME 34、36的所有存储器单元80的信号为低时在相应输出72、74上输出低信号。
在一实例中,SME 34、36包含256个存储器单元80且每一存储器单元80耦合到不同数据流线84。因此,SME 34、36可经编程以在数据流线84中的选定一者或多者上具有高信号时输出高信号。例如,SME 34可具有设定为高的第一存储器单元80(例如,位0)及设定为低的所有其它存储器单元80(例如,位1到255)。当相应检测单元86处于有源状态时,SME 34在对应于位0的数据流线84上具有高信号时在输出72上输出高信号。在其它实例中,SME 34可经设定以在多个数据流线84中的一者上具有高信号时通过将适当的存储器单元80设定为高值而输出高信号。
在一实例中,可通过从相关联寄存器读取位而将存储器单元80设定为高值或低值。因此,可通过将由编译器20产生的图像存储到寄存器中且将寄存器中的位加载到相关联存储器单元80中来配置SME 34。在一实例中,由编译器20产生的图像包含高及低(例如,1及0)位的二进制图像。图像可配置FSM晶格30以通过使SME 34、36级联而实施FSM。例如,可通过将检测单元86设定为有源状态而将第一SME 34设定为有源状态。第一SME 34可经设定以在对应于位0的数据流线84上具有高信号时输出高信号。第二SME 36最初可被设定为非有源状态,但是在有源时可经设定以在对应于位1的数 据流线84上具有高信号时输出高信号。可通过设定第一SME 34的输出72以耦合到第二SME 36的输入64而使第一SME 34及第二SME 36级联。因此,当在对应于位0的数据流线84上感测到高信号时,第一SME 34在输出72上输出高信号且将第二SME 36的检测单元86设定为有源状态。当在对应于位1的数据流线84上感测到高信号时,第二SME 36在输出74上输出高信号以激活另一SME 36或从FSM晶格30输出。
在一实例中,在单个物理装置上实施单个FSM晶格30,然而在其它实例中,可在单个物理装置(例如,物理芯片)上实施两个或两个以上FSM晶格30。在一实例中,每一FSM晶格30可包含相异数据输入块52、相异输出块54、相异编程接口56及相异可配置元件集合。此外,每一可配置元件集合可对其对应数据输入块52处的数据做出反应(例如,输出高或低信号)。例如,对应于第一FSM晶格30的第一可配置元件集合可对对应于第一FSM晶格30的第一数据输入块52处的数据做出反应。对应于第二FSM晶格30的第二可配置元件集合可对对应于第二FSM晶格30的第二数据输入块52做出反应。因此,每一FSM晶格30包含可配置元件集合,其中不同可配置元件集合可对不同输入数据做出反应。类似地,每一FSM晶格30及每一对应可配置元件集合可提供相异输出。在一些实例中,来自第一FSM晶格30的输出块54可耦合到第二FSM晶格30的输入块52,使得用于第二FSM晶格30的输入数据可包含来自一系列FSM晶格30的阶层式布置中的第一FSM晶格30的输出数据。
在一实例中,用于加载到FSM晶格30上的图像包括用于配置FSM晶格30内的可配置元件、可配置交换元件及专用元件的多个数据位。在一实例中,可将图像加载到FSM晶格30上以配置FSM晶格30以基于某些输入提供所要输出。输出块54可基于可配置元件对数据输入块52处的数据的反应而提供来自FSM晶格30的输出。来自输出块54的输出可包含指示给定模式的匹配的单个位、包括指示与多个模式匹配及不匹配的多个位的字(word)及对应于所有或某些可配置元件在给定时刻的状态的状态向量。如所描述,状态机引擎(例如状态机引擎14)中可包含数个FSM晶格30以执行数据分析,例如模式识别(例如,话音识别、图像识别等)、信号处理、成像、计算机视觉、密码编译及其它。
图6说明可通过FSM晶格30实施的有限状态机(FSM)的实例模型。FSM晶格30可配置(例如,编程)为FSM的物理实施方案。可将FSM表示为示意图90(例如,有向图、无向图、伪图),其含有一或多个根节点92。除根节点92之外,FSM还可由通过一或多个边缘98连接到根节点92及其它标准节点94的若干标准节点94及终端节点96构成。节点92、94、96对应于FSM中的状态。边缘98对应于状态之间的转变。
节点92、94、96中的每一者可处于有源或非有源状态。当处于非有源状态时,节 点92、94、96不对输入数据做出反应(例如,响应)。当处于有源状态时,节点92、94、96可对输入数据做出反应。当输入数据与由上游节点92、94与所述节点下游的节点94、96之间的边缘98指定的准则匹配时,上游节点92、94可通过激活下游节点94、96而对输入数据做出反应。例如,当指定字符“b”的第一节点94处于有源且接收字符“b”作为输入数据时,第一节点94将激活通过边缘98连接到第一节点94的第二节点94。如本文中使用,“上游”指代一或多个节点之间的关系,其中在一或多个其它节点上游(或在回环或反馈配置的情况中,在其自身上游)的第一节点指代其中第一节点可激活所述一或多个其它节点(或在回环的情况中,可激活其自身)的情境。类似地,“下游”指代其中在一或多个其它节点下游(或在回环的情况中,在其自身下游)的第一节点可通过所述一或多个其它节点激活(或在回环的情况中,可通过其自身激活)的关系。因此,术语“上游”及“下游”在本文中用以指代一或多个节点之间的关系,但是这些术语并不排除使用回环或节点之间的其它非线性路径。
在示意图90中,根节点92可最初经激活且在输入数据与来自根节点92的边缘98匹配时可激活下游节点94。当输入数据与来自节点94的边缘98匹配时,节点94可激活节点96。在接收输入数据时,可以此方式激活贯穿示意图90的节点94、96。终端节点96对应于输入数据中所关注序列的匹配。因此,激活终端节点96指示已接收所关注序列作为输入数据。在FSM晶格30实施模式识别功能的背景下,到达终端节点96可指示已在输入数据中检测到所关注特定模式。
在一实例中,每一根节点92、标准节点94及终端节点96可对应于FSM晶格30中的可配置元件。每一边缘98可对应于可配置元件之间的连接。因此,转变到另一标准节点94或终端节点96(例如,具有连接到另一标准节点94或终端节点96的边缘98)的标准节点94对应于转变到(例如,将输出提供到)另一可配置元件的可配置元件。在一些实例中,根节点92并不具有对应可配置元件。
如将了解,虽然节点92被描述为根节点且节点96被描述为终端节点,但是无须存在特定“开始”或根节点,且无须存在特定“结束”或输出节点。换句话说,任何节点皆可为起始点且任何节点可提供输出。
当编程FSM晶格30时,可配置元件中的每一者还可处于有源或非有源状态。给定可配置元件在非有源时不对对应数据输入块52处的输入数据做出反应。有源可配置元件可对数据输入块52处的输入数据做出反应,且当输入数据与可配置元件的设定匹配时可激活下游可配置元件。当可配置元件对应于终端节点96时,可配置元件可耦合到输出块54以将匹配的指示提供到外部装置。
经由编程接口56加载到FSM晶格30上的图像可配置所述可配置元件及专用元件以及所述可配置元件与专用元件之间的连接,使得基于对数据输入块52处的数据做出的反应通过节点的循序激活实施所要FSM。在一实例中,可配置元件保持有源达单个数据循环(例如,单个字符、字符集合、单个时钟周期)且接着变为非有源,除非通过上游可配置元件重新激活。
可认为终端节点96存储经压缩的过去事件历史。例如,需要到达终端节点96的输入数据的一或多个模式可由所述终端节点96的激活表示。在一实例中,由终端节点96提供的输出是二进制的,即,输出指示所关注模式是否已匹配。在示意图90中终端节点96对标准节点94的比率可相当小。换句话说,虽然在FSM中存在高复杂度,但是比较而言FSM的输出可较小。
在一实例中,FSM晶格30的输出可包括状态向量。状态向量包括FSM晶格30的可配置元件的状态(例如,激活或未经激活)。在另一实例中,状态向量可包含可配置元件的全部或子集的状态(无论可配置元件是否对应于终端节点96)。在一实例中,状态向量包含对应于终端节点96的可配置元件的状态。因此,输出可包含由示意图90的全部终端节点96提供的指示的集合。可将状态向量表示为字,其中由每一终端节点96提供的二进制指示包括所述字的一个位。终端节点96的此编码可对FSM晶格30提供检测状态(是否已检测到所关注序列及已检测到何种所关注序列)的有效指示。
如上文提及,FSM晶格30可经编程以实施模式识别功能。例如,FSM晶格30可经配置以识别输入数据中的一或多个数据序列(例如,签名、模式)。当通过FSM晶格30识别所关注数据序列时,可在输出块54处提供所述识别的指示。在一实例中,模式识别可识别一串符号(例如,ASCII字符)以(例如)识别网络数据中的恶意软件或其它数据。
图7说明阶层式结构100的实例,其中FSM晶格30的两个层级为串联耦合且用以分析数据。具体来说,在经说明的实施例中,阶层式结构100包含串联布置的第一FSM晶格30A及第二FSM晶格30B。每一FSM晶格30包含接收数据输入的相应数据输入块52、接收配置信号的编程接口块56及输出块54。
第一FSM晶格30A经配置以在数据输入块处接收输入数据,例如原始数据。第一FSM晶格30A对如上所述的输入数据做出反应并在输出块处提供输出。将来自第一FSM晶格30A的输出发送到第二FSM晶格30B的数据输入块。接着,第二FSM晶格30B可基于由第一FSM晶格30A提供的输出做出反应并提供阶层式结构100的对应输出信号102。两个FSM晶格30A及30B的此阶层式串联耦合提供将关于压缩字中的过去事 件的数据从第一FSM晶格30A提供到第二FSM晶格30B的构件。所提供的数据实际上可为已由第一FSM晶格30A记录的复杂事件(例如,所关注序列)的概要。
图7中所示的FSM晶格30A、30B的两层级阶层100允许两个独立程序基于相同数据流而操作。所述两层级阶层可类似于模型化为不同区域的生物大脑中的视觉识别。在此模型下,所述区域实际上为不同模式识别引擎,其各自执行类似计算功能(模式匹配)但使用不同程序(签名)。通过将多个FSM晶格30A、30B连接在一起,可获得关于数据流输入的增加知识。
阶层的第一层级(通过第一FSM晶格30A实施)可(例如)对原始数据流直接执行处理。即,可在第一FSM晶格30A的输入块52处接收原始数据流且第一FSM晶格30A的可配置元件可对所述原始数据流做出反应。阶层的第二层级(通过第二FSM晶格30B实施)可处理来自第一层级的输出。即,第二FSM晶格30B在第二FSM晶格30B的输入块52处接收来自第一FSM晶格30A的输出块54的输出,且第二FSM晶格30B的可配置元件可对第一FSM晶格30A的输出做出反应。因此,在此实例中,第二FSM晶格30B不接收原始数据流作为输入,而是接收通过如通过第一FSM晶格30A确定的原始数据流匹配的所关注模式的指示。第二FSM晶格30B可实施识别来自第一FSM晶格30A的输出数据流中的模式的FSM。应了解,除接收来自FSM晶格30A的输出以外,第二FSM晶格30B还可接收来自多个其它FSM晶格的输入。同样地,第二FSM晶格30B可接收来自其它装置的输入。第二FSM晶格30B可组合这些多个输入以产生输出。
图8说明编译器将源代码转换为用于配置FSM晶格(例如晶格30)以实施FSM的图像的方法110的实例。方法110包含:将源代码解析为语法树(框112);将语法树转换为自动机(框114);优化所述自动机(框116);将所述自动机转换为网表(netlist)(框118);将所述网表放置于硬件上(框120);路由所述网表(框122)及发布所得图像(框124)。
在一实例中,编译器20包含允许软件开发者产生图像以实施FSM晶格30上的FSM的应用编程接口(API)。编译器20提供将源代码中的正规表达式的输入集合转换为经配置以配置FSM晶格30的图像的方法。编译器20可通过用于具有冯·诺伊曼架构的计算机的指令实施。这些指令可使计算机上的处理器12实施编译器20的功能。例如,所述指令在通过处理器12执行时可使处理器12对可由处理器12存取的源代码执行如框112、114、116、118、120、122及124中描述的动作。
在一实例中,源代码描述用于识别符号群组内的符号模式的搜索字符串。为描述搜索字符串,源代码可包含多个正规表达式。正规表达式可为用于描述符号搜索模式的字符串。正规表达式广泛用于各种计算机领域中,例如编程语言、文本编辑器、网络安全 及其它领域。在一实例中,由编译器支持的正规表达式包含用于分析未经结构化数据的准则。未经结构化数据可包含自由形式的数据且不具有应用于数据内的字的索引。字可包含数据内可打印及不可打印的字节的任何组合。在一实例中,编译器可支持多种不同源代码语言以用于实施包含Perl(例如,Perl可兼容正规表达式(PCRE))、PHR、Jave及.NET语言的正规表达式。
在框112处,编译器20可解析源代码以形成相关连接的运算符的布置,其中不同类型的运算符对应于通过源代码实施的不同函数(例如,通过源代码中的正规表达式实施的不同函数)。解析源代码可产生源代码的通用表示。在一实例中,通用表示包括呈称作语法树的树形图的形式的源代码中的正规表达式的经编码表示。本文中描述的实例引用作为语法树(也称作“抽象语法树”)的布置,然而在其它实例中可使用具体语法树或其它布置。
如上文提及,因为编译器20可支持源代码的多种语言,所以解析将源代码转换为非语言特定表示(例如语法树)而不管语言如何。因此,通过编译器20进行的进一步处理(框114、116、118、120)可从共同输入结构发挥作用,而不管源代码的语言如何。
如上所述,语法树包含相关连接的多个运算符。语法树可包含多种不同类型的运算符。即,不同运算符可对应于源代码中通过正规表达式实施的不同函数。
在框114处,将语法树转换为自动机。自动机包括FSM的软件模型且因此可分类为确定性或非确定性。确定性自动机在给定时间具有单个执行路径,而非确定性自动机具有多个并行执行路径。自动机包括多个状态。为将语法树转换为自动机,语法树中的运算符及运算符之间的关系转换为状态,其中所述状态之间具有转变。在一实例中,可部分基于FSM晶格30的硬件而转换自动机。
在一实例中,用于自动机的输入符号包含字母表的符号、数字0到9及其它可打印字符。在一实例中,输入符号为由字节值0到255(包含0及255)表示。在一实例中,自动机可表示为有向图,其中所述图的节点对应于状态集合。在一实例中,输入符号α上从状态p到状态q的转变(即,δ(p,α))由从节点p到节点q的有向连接展示。在一实例中,自动机的反转产生新自动机,其中某个符号α上的每一转变p→q在相同符号上反转q→p。在一反转中,开始状态变为最终状态且最终状态变为开始状态。在一实例中,由自动机识别(例如,匹配)的语言为在循序地输入到自动机中时将达到最终状态的全部可能字符串的集合。由自动机识别的语言中的每一字符串追踪从开始状态到一或多个最后终态的路径。
在框116处,在构造自动机之后,所述自动机经优化以减小其复杂度及大小等等。可通过组合冗余状态优化所述自动机。
在框118处,将经优化的自动机转换为网表。将所述自动机转换为网表将所述自动机的每一状态映射到FSM晶格30上的硬件元件(例如,SME 34、SME 36、其它元件)并确定硬件元件之间的连接。
在框120处,放置网表以选择目标装置的对应于网表的每一节点的特定硬件元件(例如,SME 34、SME 36、专用元件58)。在一实例中,放置基于FSM晶格30的一般输入及输出约束来选择每一特定硬件元件。
在框122处,路由所放置的网表以确定用于可配置交换元件(例如,块间交换元件40、块内交换元件42及行内交换元件44)的设定,以将选定硬件元件耦合在一起以实现通过网表描述的连接。在一实例中,通过确定FSM晶格30的将用以连接选定硬件元件的特定导体及用于可配置交换元件的设定的特定导体来确定用于可配置交换元件的设定。与框120处的放置相比,路由可考虑到硬件元件之间的连接的更多特定限制。因此,路由可调整如通过全局放置确定的一些硬件元件的位置以鉴于FSM晶格30上的导体的实际限制而做出适当连接。
一旦放置及路由网表,便可将所述经放置及路由的网表转换为用于配置FSM晶格30的多个位。所述多个位在本文中称为图像(例如,二进制图像)。
在框124处,通过编译器20发布图像。图像包括用于配置FSM晶格30的特定硬件元件的多个位。可将位加载到FSM晶格30上以配置SME 34、36、专用元件58及可配置交换元件的状态,使得经编程FSM晶格30实施具有由源代码描述的功能性的FSM。放置(框120)及路由(框122)可将FSM晶格30中的特定位置处的特定硬件元件映射到自动机中的特定状态。因此,图像中的位可配置特定硬件元件以实施(若干)所要功能。在一实例中,可通过将机器码保存到计算机可读媒体来发布所述图像。在另一实例中,可通过在显示装置上显示所述图像来发布所述图像。在又一实例中,可通过将所述图像发送到另一装置(例如用于将所述图像加载到FSM晶格30上的配置装置)来发布所述图像。在又一实例中,可通过将所述图像加载到FSM晶格(例如,FSM晶格30)上来发布所述图像。
在一实例中,可通过将来自图像的位值直接加载到SME 34、36及其它硬件元件或通过将所述图像加载到一或多个寄存器中且接着将来自寄存器的位值写入到SME 34、36及其它硬件元件而将所述图像加载到FSM晶格30上。在一实例中,FSM晶格30的硬件元件(例如,SME 34、36、专用元件58、可配置交换元件40、42、44)经存储器映射,使得配置装置及/或计算机可通过将图像写入到一或多个存储器地址而将图像加载到 FSM晶格30上。
可至少部分由机器或计算机实施本文中描述的方法实例。一些实例可包含使用指令编码的计算机可读媒体或机器可读媒体,所述指令可操作以配置电子装置以执行如上文实例中描述的方法。此类方法的实施方案可包含代码,例如微码、汇编语言码、较高级语言码或类似物。此代码可包含用于执行各种方法的计算机可读指令。代码可形成计算机程序产品的部分。此外,代码可在执行期间或在其它时间有形地存储在一或多个易失性或非易失性计算机可读媒体上。这些计算机可读媒体可包含(但不限于)硬盘、可装卸式磁盘、可装卸式光盘(例如,压缩光盘及数字视频光盘)、磁盒、存储器卡或棒、随机存取存储器(RAM)、只读存储器(ROM)等。
现在参考图9,说明状态机引擎14的实施例(例如,单芯片上的单个装置)。如先前描述,状态机引擎14经配置以经由数据总线从源(例如存储器16)接收数据。在经说明的实施例中,数据可通过总线接口(例如第三代双倍数据速率(DDR3)总线接口130)发送到状态机引擎14。DDR3总线接口130可能够以大于或等于1GByte/sec的速率交换(例如,提供及接收)数据。此数据交换速率可大于状态机引擎14分析数据的速率。如将了解,取决于待分析的数据源,总线接口130可为用于将往返于数据源的数据交换到状态机引擎14的任何合适的总线接口,例如NAND快闪接口、***组件互连(PCI)接口、千兆位媒体独立接口(GMMI)等。如先前描述,状态机引擎14包含经配置以分析数据的一或多个FSM晶格30。每一FSM晶格30可被分为两个半晶格。在经说明的实施例中,每一半晶格可包含24K个SME(例如,SME 34、36),使得晶格30包含48K个SME。晶格30可包括如先前关于图2到5描述般布置的任何所要数目个SME。此外,虽然仅说明一个FSM晶格30,但是状态机引擎14可包含多个FSM晶格30,如先前描述。
可在总线接口130处接收待分析的数据并通过数个缓冲器及缓冲器接口将数据提供到FSM晶格30。在经说明的实施例中,数据路径包含数据缓冲器132、指令缓冲器133、过程缓冲器134及排内(IR)总线及过程缓冲器接口136。数据缓冲器132经配置以接收并暂时存储待分析的数据。在一个实施例中,存在两个数据缓冲器132(数据缓冲器A及数据缓冲器B)。可将数据存储在所述两个数据缓冲器132中的一者中,而从另一数据缓冲器132清空数据以供FSM晶格30分析。总线接口130可经配置以将待分析的数据提供到数据缓冲器132直到数据缓冲器132已满为止。在数据缓冲器132已满之后,总线接口130可经配置以自由地用于其它目的(例如,提供来自数据流的其它数据直到数据缓冲器132可用于接收待分析的额外数据为止)。在经说明的实施例中,数据缓冲器132可各自为32千字节。指令缓冲器133经配置以经由总线接口130从处理器12接收指令, 例如对应于待分析的数据的指令及对应于配置状态机引擎14的指令。IR总线及过程缓冲器接口136可促进将数据提供到过程缓冲器134。IR总线及过程缓冲器接口136可用以确保FSM晶格30按此序处理数据。IR总线及过程缓冲器接口136可协调数据、时序数据、包装指令等的交换,使得正确地接收并分析数据。一般来说,IR总线及过程缓冲器接口136允许使用一排装置中的多个装置。所述排装置中的多个装置共享数据使得所有所述多个装置依正确的次序接收全部共享数据。例如,多个物理装置(例如,状态机引擎14、芯片、分离装置)可布置成一排且可经由IR总线及过程缓冲器接口136彼此提供数据。出于本申请案的目的,术语“排”指代连接到相同芯片选择的状态机引擎14的集合。在经说明的实施例中,IR总线及过程缓冲器接口136可包含8位数据总线。
在经说明的实施例中,状态机引擎14还包含解压缩器138及压缩器140以帮助提供数据到状态机引擎14且从状态机引擎14提供数据。如可了解,压缩器140及解压缩器138可使用相同的压缩算法以简化软件及/或硬件设计;然而,压缩器140及解压缩器138还可使用不同的算法。通过压缩数据,可最小化总线接口130(例如,DDR3总线接口)利用时间。在本实施例中,压缩器140可用以压缩状态向量数据、配置数据(例如,编程数据)及由FSM晶格30分析之后获得的匹配结果数据。在一个实施例中,可停用(例如,关闭)压缩器140及解压缩器138使得流动到压缩器140及解压缩器138及/或从压缩器140及解压缩器138流动的数据并未被修改(例如,未经压缩也未经解压缩)。
压缩器140及解压缩器138还可经配置以处置多个数据集合且每一数据集合可具有变化长度。通过“填补”压缩数据且包含关于每一压缩区域何时结束的指示符,压缩器140可通过状态机引擎14提高总体处理速度。
状态机引擎14包含状态向量***141,状态向量***141具有状态向量高速缓冲存储器142、状态向量存储器缓冲器144、状态向量中间输入缓冲器146及状态向量中间输出缓冲器148。状态向量***141可用以存储FSM晶格30的多个状态向量,将状态向量移动到状态机引擎14上或从状态机引擎14移动离开且将状态向量提供到FSM晶格30以使FSM晶格30还原到对应于所提供的状态向量的状态。例如,每一状态向量可暂时存储在状态向量高速缓冲存储器142中。即,可存储每一SME 34、36的状态,使得所述状态可经还原且随后用于进一步分析,同时释放SME 34、36以分析新数据集合(例如,搜索项)。例如,如同典型高速缓冲存储器,状态向量高速缓冲存储器142允许存储状态向量以供(此处)由FSM晶格30快速检索及使用。在经说明的实施例中,状态向量高速缓冲存储器142可存储最多512个状态向量。每一状态向量包括FSM晶格30的SME 34、36的状态(例如,激活或未经激活)及计数器58的动态(例如,当前)计数。
如将了解,可在一排中的不同状态机引擎14(例如,芯片)之间交换状态向量数据。可在不同状态机引擎14之间交换状态向量数据以用于以下各种目的,例如:同步化FSM晶格30的SME 34、36的状态及计数器58的动态计数;跨多个状态机引擎14执行相同功能;跨多个状态机引擎14重现结果;跨多个状态机引擎14级联结果;存储用以分析通过多个状态机引擎14级联的数据的SME 34、36的状态的历史及计数器58的动态计数等等。此外,应注意,在状态机引擎14内,状态向量数据可用以快速地还原状态向量。例如,状态向量数据可用以:将SME 34、36的状态及计数器58的动态计数还原到初始化状态(例如,搜索新搜索项);将SME 34、36的状态及计数器58的动态计数还原到先前状态(例如,搜索先前搜索的搜索项);及将SME 34、36的状态及计数器58的动态计数改变为经配置用于级联配置(例如,以级联搜索来搜索一搜索项)。在某些实施例中,可将状态向量数据提供到总线接口130使得可将状态向量数据提供到处理器12(例如,用于分析状态向量数据、重配置状态向量数据以适用修改、重配置状态向量数据以提高效率等等)。
例如,在某些实施例中,状态机引擎14可将经高速缓冲存储的状态向量数据(例如,由状态向量***141存储的数据)从FSM晶格30提供到外部装置。外部装置可接收状态向量数据,修改状态向量数据并将经修改的状态向量数据提供到状态机引擎14以使FSM晶格30还原(例如,复位、初始化)。因此,外部装置可修改状态向量数据使得状态机引擎14可按需要略过(例如,跳过)状态。
状态向量高速缓冲存储器142可从任何合适的装置接收状态向量数据。例如,状态向量高速缓冲存储器142可从FSM晶格30、另一FSM晶格30(例如,经由IR总线及过程缓冲器接口136)、解压缩器138等接收状态向量。在经说明的实施例中,状态向量高速缓冲存储器142可经由状态向量存储器缓冲器144从其它装置接收状态向量。此外,状态向量高速缓冲存储器142可将状态向量数据提供到任何合适的装置。例如,状态向量高速缓冲存储器142可将状态向量数据提供到状态向量存储器缓冲器144、状态向量中间输入缓冲器146及状态向量中间输出缓冲器148。
例如状态向量存储器缓冲器144、状态向量中间输入缓冲器146及状态向量中间输出缓冲器148等额外缓冲器可结合状态向量高速缓冲存储器142利用以适应状态向量的快速检索及存储,同时通过状态机引擎14处理具有交错包的分离数据集合。在经说明的实施例中,状态向量存储器缓冲器144、状态向量中间输入缓冲器146及状态向量中间输出缓冲器148中的每一者可经配置以暂时存储一个状态向量。状态向量存储器缓冲器144可用以从任何合适的装置接收状态向量数据并将状态向量数据提供到任何合适的 装置。例如,状态向量存储器缓冲器144可用以从FSM晶格30、另一FSM晶格30(例如,经由IR总线及过程缓冲器接口136)、解压缩器138及状态向量高速缓冲存储器142接收状态向量。作为另一实例,状态向量存储器缓冲器144可用以将状态向量数据提供到(例如,其它FSM晶格30的)IR总线及过程缓冲器接口136、压缩器140及状态向量高速缓冲存储器142。
同样地,状态向量中间输入缓冲器146可用以从任何合适的装置接收状态向量数据并将状态向量数据提供到任何合适的装置。例如,状态向量中间输入缓冲器146可用以从FSM晶格30(例如,经由IR总线及过程缓冲器接口136)、解压缩器138及状态向量高速缓冲存储器142接收状态向量。作为另一实例,状态向量中间输入缓冲器146可用以将状态向量提供到FSM晶格30。此外,状态向量中间输出缓冲器148可用以从任何合适的装置接收状态向量并将状态向量提供到任何合适的装置。例如,状态向量中间输出缓冲器148可用以从FSM晶格30及状态向量高速缓冲存储器142接收状态向量。作为另一实例,状态向量中间输出缓冲器148可用以将状态向量提供到FSM晶格30(例如,经由IR总线及过程缓冲器接口136)及压缩器140。
一旦由FSM晶格30产生所关注结果,便可将匹配结果存储在匹配结果存储器150中。即,可将指示匹配(例如,检测到所关注模式)的“匹配向量”存储在匹配结果存储器150中。例如,接着可将匹配结果发送到匹配缓冲器152以经由总线接口130发射到处理器12。如先前描述,可压缩匹配结果。
还可在状态机引擎14中提供额外寄存器及缓冲器。例如,状态机引擎14可包含控制及状态寄存器154。此外,可提供还原及程序缓冲器156以最初用于配置FSM晶格30的SME34、36或在分析期间还原FSM晶格30中的SME 34、36的状态。类似地,还可提供保存及修复映射缓冲器158以存储保存及修复映射以供设定及使用。
图10说明布置成一排装置的实例多个物理状态机引擎14。如先前描述,在总线接口130处接收待分析的数据。总线接口130将数据引导到包含每一状态机引擎14(例如,F0、F1、F2、F3、F4、F5、F6、F7)的数据缓冲器132及指令缓冲器133的数据缓冲器***159。数据缓冲器132经配置以接收并暂时存储待分析的数据。在经说明的实施例中,每一状态机引擎14中存在两个数据缓冲器132(例如,数据缓冲器A及数据缓冲器B)。可将数据存储在两个数据缓冲器132中的一者中,同时从另一数据缓冲器132清空数据以供FSM晶格30分析。如先前论述,指令缓冲器133经配置以经由总线接口130从处理器12接收指令,例如对应于待分析的数据的指令。待分析的数据及对应于数据的指令经由IR总线及过程缓冲器接口136从数据缓冲器***159提供到FSM晶格30 中的一或多者(例如,Fa、Fb、Fc、Fd、Fe、Ff、Fg、Fh)。在本实施例中,将物理FSM晶格30布置成逻辑群组。具体来说,将Fg及Fh布置成逻辑群组A 162,将Fe及Ff布置成逻辑群组B 164,将Fc及Fd布置成逻辑群组C 166且将Fa及Fb布置成逻辑群组D 168。此外,如将了解,可经由IR总线及过程缓冲器接口136在FSM晶格30与另一装置(例如,FSM晶格30)之间交换数据。例如,IR总线及过程缓冲器接口136可用以在FSM晶格30中的任一者之间交换数据。虽然说明8个状态机引擎14,但是所述排装置可具有任何合适数目个状态机引擎14(例如,1个、2个、4个、8个等)。如将了解,IR总线及过程缓冲器接口136可包含用于(例如,从数据缓冲器***159及FSM晶格30)接收数据的输入。同样地,IR总线及过程缓冲器接口136可包含用于发送数据(例如,到FSM晶格30)的输出。
总线接口130可以经定制以有效率地使用待分析的数据的格式接收数据。具体来说,图11到14说明如何可通过处理器12将数据指派(例如,分组)为经由总线接口130提供到状态机引擎14的数据块的实例。此外,图15到17说明如何可经由状态机引擎14的数据缓冲器***159接收、存储及提供数据块的实例。图18说明如何可通过逻辑群组162、164、166及168接收数据块。
现在参考图11,说明将通过处理器12指派为数据块以提供到状态机引擎14的数据分段(例如,数据集合、搜索项)的实例。在本实施例中,将多个数据分段指派为单个数据块。每一数据块经指派以通过(例如,一排状态机引擎14中的一或多个状态机引擎14上的)FSM晶格30的单个逻辑群组分析。例如,通过处理器12将数据流170(例如,待通过处理器12发送到状态机引擎14的大量数据)指派为:对应于希望用于逻辑群组A 162的数据的第一数据块172、对应于希望用于逻辑群组B 164的数据的第二数据块174、对应于希望用于逻辑群组C166的数据的第三数据块176及对应于希望用于逻辑群组D 168的数据的第四数据块178。具体来说,通过处理器12将数据流170分为数据分段180、182、184、186、188、190、192、194、196、198及200。如将了解,数据分段180、182、184、186、188、190、192、194、196、198及200中的每一者可表示待由FSM晶格30分析的数据集合。如将了解,为任何合适理由,处理器12可将数据分段180、182、184、186、188、190、192、194、196、198及200指派到数据块172、174、176及178。例如,处理器12可基于每一数据集合的长度及/或将分析数据集合的次序将数据分段指派到特定数据块,以有效率地处理数据集合。
可使用任何合适的方式将数据分段180、182、184、186、188、190、192、194、196、198及200指派为数据块172、174、176及178。例如,可将数据分段180、182、184、 186、188、190、192、194、196、198及200指派为数据块172、174、176及178,使得最小化数据块172、174、176及178中字节的数目。作为另一实例,可将数据分段180、182、184、186、188、190、192、194、196、198及200指派为数据块172、174、176及178使得将特定数据分段分组在一起。
如所说明,第一数据块172包含数据分段A 180、数据分段F 190及数据分段I 196。第二数据块174包含数据分段B 182及数据分段K 200。此外,第三数据块176包含数据分段C184、数据分段E 188及数据分段G 192。第四数据块178包含数据分段D 186、数据分段H 194及数据分段J 198。
如将了解,为有效率地处理数据块,数据块可全部具有相等数据量。此外,数据块内的数据分段可以数据块内的预定间隔(例如,字节、字)开始及/或停止,使得处理装置可确定数据分段何时开始及停止。然而,数据分段不一定具有正确数据量以依预定间隔开始及/或停止。因此,可在特定数据分段之间***数据填补使得在数据块内数据依预定间隔开始及/或停止。此外,可对数据块的末端添加数据填补使得所有数据块具有相等数据量。
现在参考图12,说明***于图11的数据块172、174、176及178的数据分段之间的数据填补的实例。例如,在第一数据块172中,数据填补202可***在数据分段A 180与数据分段F 190之间。此外,数据填补204可***在数据分段F 190与数据分段I196之间。作为另一实例,在第二数据块174中,数据填补206可***在数据分段B 182与数据分段K 200之间。在第三数据块176中,数据填补208可***在数据分段C 184与数据分段E 188之间。同样地,数据填补210可***在数据分段E 188与数据分段G 192之间。作为另一实例,在第四数据块178中,数据填补212可***在数据分段D 186与数据分段H 194之间。此外,数据填补214可***在数据分段H 194与数据分段J 198之间。
数据填补202、204、206、208、210、212及214可包含未经分析的任何合适数目个字节的数据(例如,无效数据、垃圾数据、填隙数据、废弃项目数据等)。在一个实施例中,被用作数据填补的字节数目可为在加到先前数据分段的字节的数目时达到全字边界的字节数目(即,先前数据分段的字节数目加上被用作数据填补的字节数目可被全字边界均等地除尽)。例如,数据填补202的字节数目可使得数据填补202与数据分段A180(即,先前数据分段)的组合字节数目可被全字边界均等地除尽(例如,无余数)。在经说明的实施例中,全字边界可为8个字节。在其它实施例中,全字边界可为任何数目个字节或位。因此,在经说明的实施例中,如果数据分段A 180包含63个数据字节,那 么数据填补202将包含1个数据字节(例如,使数据分段A 180与数据填补202之间的组合数据字节为64个,其中64可被8个字节均等地除尽)。作为另一实例,如果数据分段A 180包含60个数据字节(例如,其不可被8均等地除尽),那么数据填补202将包含4个数据字节。作为进一步实例,如果数据分段A 180包含64个数据字节,那么数据填补202将包含0个数据字节,或换句话说,数据分段A 180与数据分段F 190之间将无需数据填补202。如将了解,每一数据填补202、204、206、208、210、212及214可以类似方式操作。
现在参考图13,说明***在图12的数据块172、174、176及178的数据分段之后的数据的实例。具体来说,可视需要在每一数据块172、174、176及178的末端处***数据填补以使每一数据块172、174、176及178中的字节数目相等。此外,可使用每一数据块172、174、176及178的末端处的数据填补,使得每一数据块172、174、176及178到达如先前描述的全字边界。在经说明的实施例中,在数据分段I 196之后***数据填补216,在数据分段G 192之后***数据填补218且在数据分段J 198之后***数据填补220。因此,数据块172、174、176及178中的每一者包含相等数目个字节,且数据块172、174、176及178中的每一者到达全字边界。
FSM晶格30可能难以区分数据填补与有效数据。因此,指令可伴随数据块172、174、176及178使得在分析有效数据期间FSM晶格30可识别并忽略数据填补。此类指令可通过处理器12经由总线接口130发送到状态机引擎14,且可通过状态机引擎14的指令缓冲器133接收、存储及提供。为产生指令,处理器12可在逻辑上将数据流170分为区域222、224、226、228、230、232、234及236。可形成区域222、224、226、228、230、232、234及236的结束边界,使得每一区域在任何数据填补结束时结束。例如,第一区域222在数据填补208结束时结束。作为另一实例,第五区域230在数据填补204结束时结束。
伴随数据块172、174、176及178的指令可包含每一区域222、224、226、228、230、232、234及236的字节数目及每一区域内每一数据块172、174、176及178的有效字节数目(例如,排除字节填补的字节数目)。例如,指令可包含:对应于第一区域222的字节数目238、对应于第一区域222内第一数据块172的有效字节的字节数目240、对应于第一区域222内第二数据块174的有效字节的字节数目242、对应于第一区域222内第三数据块176的有效字节的字节数目244及对应于第一区域222内第四数据块178的有效字节的字节数目246。
同样地,指令可包含:对应于第二区域224的字节数目248、250、252、254及256; 对应于第三区域226的字节数目258、260、262、264及266;对应于第四区域228的字节数目268、270、272、274及276;对应于第五区域230的字节数目278、280、282、284及286;对应于第六区域232的字节数目288、290、292、294及296;对应于第七区域234的字节数目298、302、304及306;及对应于第八区域236的字节数目308、312、314及316。因此,使用指令,FSM晶格30可识别***数据分段的数据填补。虽然本文中已呈现一种特定类型的指令,但是应注意,包含于数据块172、174、176及178的群组内的指令可为允许FSM晶格30区分有效数据与数据填补(即,无效数据)的指令的任何合适的群组。
现在参考图14,说明通过处理器12组织以发射到状态机引擎14的数据缓冲器***159的图13的数据块172、174、176及178的实例。数据块172、174、176及178中的每一者经布置具有具备等效于全字长度的字节数目318的多行数据。在经说明的实施例中,全字长度为8个字节,针对状态机引擎14中的每一者(例如,F0、F1、F2、F3、F4、F5、F6及F7)由一字节表示。来自数据分段中的每一者的第一字节开始于每一数据块172、174、176及178的右侧且朝每一数据块的左侧增加,使得数据分段A180的第一字节在列F0中且数据分段A 180的第八个字节在列F7中。如将了解,列F0表示最初将存储在F0状态机引擎14的数据缓冲器132中的数据,列F1表示最初将存储在F1状态机引擎14的数据缓冲器132中的数据,以此类推。此外,将数据分段从上而下放置在行中。如所说明,数据分段及数据填补的每一组合结束于列F7中(即,其各自延伸达全字长度)。此外,每一数据块172、174、176及178大小相等。如将了解,在操作期间,可将数据块172、174、176及178从处理器12循序提供到状态机引擎14。
来自数据块172、174、176及178的数据经布置使得希望用于逻辑群组162、164、166及168的数据混合在数据缓冲器***159中,使得希望用于每一逻辑群组162、164、166及168的数据的一部分混合在每一状态机引擎14(例如,F0、F1、F2、F3、F4、F5、F6及F7)内。可以此方式接收并存储数据以使数据能够经由总线接口130快速地提供到数据缓冲器***159。在某些实施例中,数据缓冲器***159的数据缓冲器132可经配置以(例如,依预定间隔)锁存来自总线接口130的数据。在其它实施例中,数据缓冲器***159的数据缓冲器132可基于数据缓冲器132与总线接口130之间的连接而接收数据的有限部分。如下文详细地解释,当经由IR总线及过程缓冲器接口136从数据缓冲器***159提供数据到过程缓冲器134时,清理(sort out)经混合数据。
现在参考图15,说明正通过状态机引擎14接收的数据块172、174、176及178的实例。具体来说,数据缓冲器***159接收第一数据块172,接着接收第二数据块174、 第三数据块176及第四数据块178。如上文论述,数据块172、174、176及178中的每一者可通过处理器12指派以通过特定逻辑群组162、164、166及168分析。当数据缓冲器***159接收数据块172、174、176及178时,数据缓冲器***159以***方式将来自数据块172、174、176及178的数据存储到缓冲器中,使得数据将从数据缓冲器***159正确地提供到FSM晶格162、164、166及168。
因此,图16说明如何将图15的数据块172、174、176及178存储在状态机引擎14的数据缓冲器***159中的实例。特定来说,将来自第一数据块172的数据存储在缓冲器的第一行及其后每隔第四行(例如,行5、9、13、17等)中。类似地,将来自第二数据块174的数据存储在缓冲器的第二行及其后每隔第四行(例如,行6、10、14、18等)中。此外,将来自第三数据块176的数据存储在缓冲器的第三行及其后每隔第四行(例如,行7、11、15、19等)中。此外,来自第四数据块178的数据存储在缓冲器的第四行及其后每隔第四行(例如,行8、12、16、20等)中。应注意,一些状态机引擎14可包含少于或多于四个FSM晶格162、164、166及168。因此,在其它实施例中,数据缓冲器***159可经配置以依另一方式存储来自数据块的数据。例如,在具有8个FSM晶格的状态机引擎14中,每一FSM晶格的数据块可使数据存储在缓冲器的一行及其后每隔第8行中。
现在参考图17,说明从数据缓冲器***159提供到多个FSM晶格的数据的实例。具体来说,数据以数据突发从数据缓冲器***159中提供到IR总线及过程缓冲器接口136。在一个实施例中(例如,其中全字中的字节数目318为8个字节),使用8个数据突发以完成一个IR总线循环。具体来说,在第一数据突发320中,将来自列F0的4个字节(例如,来自每一数据块172、174、176及178的字节)提供到IR总线及过程缓冲器接口136。类似地,在第二数据突发322中,将来自列F1的4个字节(例如,来自每一数据块172、174、176及178的字节)提供到IR总线及过程缓冲器接口136。在第三数据突发324中,将来自列F2的4个字节(例如,来自每一数据块172、174、176及178的字节)提供到IR总线及过程缓冲器接口136。此外,在第四数据突发326中,将来自列F3的4个字节(例如,来自每一数据块172、174、176及178的字节)提供到IR总线及过程缓冲器接口136。在第五数据突发328中,将来自列F4的4个字节(例如,来自每一数据块172、174、176及178的字节)提供到IR总线及过程缓冲器接口136。类似地,在第六数据突发330中,将来自列F5的4个字节(例如,来自每一数据块172、174、176及178的字节)提供到IR总线及过程缓冲器接口136。在第七数据突发332中,将来自列F6的4个字节(例如,来自每一数据块172、174、176及178的字节)提供到IR总线 及过程缓冲器接口136。此外,在第八数据突发334中,将来自列F7的4个字节(例如,来自每一数据块172、174、176及178的字节)提供到IR总线及过程缓冲器接口136。因此,使用数据突发将数据以***方式从数据缓冲器***159提供到IR总线及过程缓冲器接口136。
现在参考图18,说明数据突发320、322、324、326、328、330、332及334到多个逻辑群组162、164、166及168中的数据提供的实例。具体来说,在经说明的实施例中,逻辑群组A162(例如,Fg、Fh)的过程缓冲器134可经配置以锁存提供到IR总线及过程缓冲器接口136上的每一数据突发320、322、324、326、328、330、332及334的第一字节。类似地,逻辑群组B 164(例如,Fe、Ff)的过程缓冲器134可经配置以锁存提供到IR总线及过程缓冲器接口136上的每一数据突发320、322、324、326、328、330、332及334的第二字节。此外,逻辑群组C 166(例如,Fc、Fd)的过程缓冲器134可经配置以锁存提供到IR总线及过程缓冲器接口136上的每一数据突发320、322、324、326、328、330、332及334的第三字节。逻辑群组D 168(例如,Fa、Fb)的过程缓冲器134可经配置以锁存提供到IR总线及过程缓冲器接口136上的每一数据突发320、322、324、326、328、330、332及334的第四字节。
如将了解,逻辑群组162、164、166及168的过程缓冲器134可经配置以锁存已提供到IR总线及过程缓冲器接口136上的任何字节或字节的组合。此外,过程缓冲器A及过程缓冲器B可经配置以锁存相同或不同字节。在一个实施例中,状态机引擎14可包含少于或多于两个过程缓冲器134。在此实施例中,每一过程缓冲器134可经配置以锁存提供(例如,突发)到IR总线及过程缓冲器接口136上的特定字节。逻辑群组162、164、166及168的过程缓冲器134还可经配置以从数据缓冲器***159接收伴随数据突发的指令。通过使用指令,逻辑群组162、164、166及168的过程缓冲器134可忽略对应于数据区域中的字节总数与所述数据区域中的有效字节总数之间的差的数据。
虽然本发明可容许各种修改及替代形式,但是已在图式中通过实例展示且在本文中详细描述特定实施例。然而,应了解,本发明并不希望限于所揭示的特定形式。实际上,本发明将涵盖落在如所附权利要求书界定的本发明的精神及范围内的所有修改、等效物及替代。
Claims (32)
1.一种数据分析***,其包括:
数据缓冲器,其经配置以接收待分析的数据;
状态机晶格,其包括多个可配置元件且每一可配置元件包括经配置以分析所述数据的至少一部分并输出所述分析的结果的多个存储器单元;及
缓冲器接口,其经配置以从所述数据缓冲器接收所述数据并将所述数据提供到所述状态机晶格,其中所述数据缓冲器经配置以经由数据突发将数据提供到所述缓冲器接口,且每一数据突发包括用于多个状态机晶格中的每一者的数据的预定部分。
2.根据权利要求1所述的***,其中所述数据缓冲器包括第一数据缓冲器及第二数据缓冲器,其中所述第一数据缓冲器及所述第二数据缓冲器中的每一者经配置以接收数据并将数据提供到所述缓冲器接口。
3.根据权利要求2所述的***,其中所述第一数据缓冲器经配置以在所述第二数据缓冲器将数据提供到所述缓冲器接口的同时接收数据,且其中所述第二数据缓冲器经配置以在所述第一数据缓冲器将数据提供到所述缓冲器接口的同时接收数据。
4.根据权利要求1所述的***,其中所述数据缓冲器经配置以接收所述数据作为数据块且每一数据块对应于多个状态机晶格中的一者。
5.根据权利要求4所述的***,其中所述数据缓冲器经配置以接收一个、两个、四个或八个数据块。
6.根据权利要求1所述的***,其中所述数据缓冲器经配置以接收所述数据作为数据块的群组,且数据块的每一群组包括用于所述多个状态机晶格中的每一者的数据块。
7.根据权利要求6所述的***,其中所述数据缓冲器经配置以交替模式存储数据块的群组的每一数据块的预定部分直到存储完数据块的所述群组的每一数据块为止,其中所述交替模式在每一数据块之间交替。
8.根据权利要求7所述的***,其中每一数据块的所述预定部分包括八个、十六个、三十二个或六十四个数据字节。
9.根据权利要求1所述的***,其中数据的所述预定部分包括一个、两个、四个或八个数据字节。
10.根据权利要求1所述的***,其包括耦合到所述多个状态机晶格中的每一者的一或多个过程缓冲器,其中每一过程缓冲器经配置以从对应于其相应状态机晶格的每一数据突发确定数据的所述预定部分。
11.根据权利要求1所述的***,其中所述数据缓冲器包括经配置以接收对应于待分析的所述数据的指令的指令缓冲器。
12.一种数据分析***,其包括:
多个状态机引擎,每一状态机引擎包括具有多个数据分析元件的状态机晶格,每一数据分析元件包括经配置以分析数据的至少一部分并输出所述分析的结果的多个存储器单元;
缓冲器接口,其耦合到所述多个状态机引擎中的每一者且经配置以接收所述数据并将所述数据提供到所述多个状态机引擎;及
经配置以接收待分析的数据并将所述数据提供到所述缓冲器接口的数据缓冲器,其中所述数据缓冲器经配置以接收所述数据作为数据块的群组,数据块的每一群组包括用于所述多个状态机引擎中的每一者的一数据块,其中所述数据块中的至少一者包括与字节填补组合的有效数据。
13.根据权利要求12所述的***,其中所述数据缓冲器包括指令缓冲器,且其中所述指令缓冲器经配置以接收识别包含字节填补的数据块的部分的指令。
14.根据权利要求12所述的***,其中所述数据缓冲器经配置以接收多个指令群组,且每一指令群组包括与数据块的群组有关的数据。
15.根据权利要求14所述的***,其中数据块的每一群组包括多个区域且每一指令群组包括与所述多个区域中的每一者有关的数据。
16.根据权利要求15所述的***,其中与所述多个区域中的每一者有关的所述数据包括相应区域中的字节总数及所述相应区域中的所述数据块中的每一者的有效数据字节总数。
17.根据权利要求16所述的***,其中所述多个状态机引擎中的每一者经配置以忽略对应于所述字节总数与所述有效字节总数之间的差的数据。
18.根据权利要求12所述的***,其中所述多个状态机引擎包括一个、两个、四个或八个状态机引擎。
19.一种用于在数据分析***中的装置之间提供数据的方法,其包括:
在缓冲器接口的输入处从第一装置接收数据;及
在所述缓冲器接口的输出处将所述数据提供到第二装置;
其中所述缓冲器接口实现数据缓冲器***与多个有限状态机核心之间的通信,其中所述缓冲器接口经配置以经由数据突发从所述数据缓冲器***中的数据缓冲器接收数据,且每一数据突发包括用于所述多个有限状态机核心中的每一者的数据的预定部分。
20.根据权利要求19所述的方法,其中所述第一装置包括所述数据缓冲器***且所述第二装置包括所述多个有限状态机核心中的至少一个有限状态机核心。
21.根据权利要求19所述的方法,其中所述第一装置包括所述多个有限状态机核心中的第一有限状态机核心,且所述第二装置包括所述多个有限状态机核心中的第二有限状态机核心。
22.一种用于准备待发送到数据分析***的数据的方法,其包括:
将数据流的数据分段指派到多个数据块,其中每一数据分段包括待分析的数据集合且每一数据块经配置以被提供到多个状态机引擎的对应状态机引擎;
在所述数据分段的至少一部分之间提供数据填补;
在所述多个数据块的所述数据分段的末端处提供数据填补以产生长度相同的每 一数据块;及
将所述多个数据块提供到所述数据分析***。
23.根据权利要求22所述的方法,其中提供在所述数据分段的至少一部分之间的所述数据填补包括至少一个字节。
24.根据权利要求22所述的方法,其中在所述数据分段的所述至少一部分之间提供数据填补包括:在先前数据分段的字节数目不可被预定字节数目均等地除尽时在数据分段之间提供数据填补。
25.根据权利要求24所述的方法,其中所述预定字节数目包括八个字节。
26.根据权利要求22所述的方法,其中在先前数据分段之后经提供作为数据填补的字节数目与所述先前数据分段的字节数目组合导致可被预定字节数目均等地除尽的组合字节数目。
27.根据权利要求22所述的方法,其中每一数据块包括可被预定字节数目均等地除尽的字节数目。
28.根据权利要求22所述的方法,其包括将指令集合提供给所述多个数据块,所述指令集合经配置以区分有效数据与数据填补。
29.一种状态机引擎,其包括:
总线接口,其经配置以接收待分析的数据;及
数据缓冲器***,其经配置以从所述总线接口接收待分析的所述数据并将待分析的所述数据提供到状态机晶格;
其中所述总线接口经配置以将待分析的所述数据提供到所述数据缓冲器***直到所述数据缓冲器***已满为止且在所述数据缓冲器***已满之后,所述总线接口经配置以用于其它目的。
30.根据权利要求29所述的状态机引擎,其中所述总线接口包括第三代双倍数据速率DDR3总线接口。
31.根据权利要求29所述的状态机引擎,其中所述总线接口包括NAND快闪接口、***组件互连PCI接口或千兆位媒体独立接口GMMI。
32.根据权利要求29所述的状态机引擎,其中所述总线接口经配置以大于所述状态机引擎分析数据的速率的数据速率接收所述数据。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/552,479 | 2012-07-18 | ||
US13/552,479 US9235798B2 (en) | 2012-07-18 | 2012-07-18 | Methods and systems for handling data received by a state machine engine |
PCT/US2013/049744 WO2014014709A1 (en) | 2012-07-18 | 2013-07-09 | Methods and systems for handling data received by a state machine engine |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104471552A CN104471552A (zh) | 2015-03-25 |
CN104471552B true CN104471552B (zh) | 2017-11-21 |
Family
ID=49947557
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380038242.3A Active CN104471552B (zh) | 2012-07-18 | 2013-07-09 | 用于处置状态机引擎所接收的数据的方法及*** |
Country Status (7)
Country | Link |
---|---|
US (6) | US9235798B2 (zh) |
EP (1) | EP2875433B1 (zh) |
JP (1) | JP6017034B2 (zh) |
KR (1) | KR101908768B1 (zh) |
CN (1) | CN104471552B (zh) |
TW (1) | TWI502502B (zh) |
WO (1) | WO2014014709A1 (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US20100174887A1 (en) | 2009-01-07 | 2010-07-08 | Micron Technology Inc. | Buses for Pattern-Recognition Processors |
US9323994B2 (en) | 2009-12-15 | 2016-04-26 | Micron Technology, Inc. | Multi-level hierarchical routing matrices for pattern-recognition processors |
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 |
US9524248B2 (en) | 2012-07-18 | 2016-12-20 | Micron Technology, Inc. | Memory management for a hierarchical memory system |
US9389841B2 (en) | 2012-07-18 | 2016-07-12 | Micron Technology, Inc. | Methods and systems for using state vector data in a state machine engine |
US9501131B2 (en) | 2012-08-31 | 2016-11-22 | Micron Technology, Inc. | Methods and systems for power management in a pattern recognition processing system |
US9075428B2 (en) | 2012-08-31 | 2015-07-07 | Micron Technology, Inc. | Results generation for state machine engines |
US9534343B2 (en) | 2012-10-18 | 2017-01-03 | The Chemours Company Fc, Llc | Partially fluorinated copolymer emulsions containing fatty acids and esters |
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 |
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 |
WO2016109571A1 (en) | 2014-12-30 | 2016-07-07 | Micron Technology, Inc | Devices for time division multiplexing of state machine engine signals |
US10691964B2 (en) * | 2015-10-06 | 2020-06-23 | Micron Technology, Inc. | Methods and systems for event reporting |
US10846103B2 (en) | 2015-10-06 | 2020-11-24 | Micron Technology, Inc. | Methods and systems for representing processing resources |
US10977309B2 (en) | 2015-10-06 | 2021-04-13 | Micron Technology, Inc. | Methods and systems for creating networks |
US20170193351A1 (en) * | 2015-12-30 | 2017-07-06 | Micron Technology, Inc. | Methods and systems for vector length management |
US10146555B2 (en) | 2016-07-21 | 2018-12-04 | Micron Technology, Inc. | Adaptive routing to avoid non-repairable memory and logic defects on automata processor |
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 |
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 |
GB201709219D0 (en) * | 2017-06-09 | 2017-07-26 | Nchain Holdings Ltd | Computer-implemented system and method |
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 |
US10481881B2 (en) * | 2017-06-22 | 2019-11-19 | Archeo Futurus, Inc. | Mapping a computer code to wires and gates |
US11474837B2 (en) * | 2018-04-09 | 2022-10-18 | Advanced New Technologies Co., Ltd. | Method and apparatus for efficient programming of electronic payment processing |
US11755342B2 (en) | 2020-12-16 | 2023-09-12 | Texas Instruments Incorporated | Monitoring transitions of a circuit |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101490574A (zh) * | 2006-06-06 | 2009-07-22 | 莱特普茵特公司 | 捕获数据信号内的多个数据分组用来分析的装置 |
CN102193886A (zh) * | 2010-03-05 | 2011-09-21 | Lsi公司 | 能够进行并发数据操纵的dma引擎 |
TW201209717A (en) * | 2010-06-10 | 2012-03-01 | Micron Technology Inc | Analyzing data using a hierarchical structure |
Family Cites Families (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4298954A (en) * | 1979-04-30 | 1981-11-03 | International Business Machines Corporation | Alternating data buffers when one buffer is empty and another buffer is variably full of data |
US5287523A (en) | 1990-10-09 | 1994-02-15 | Motorola, Inc. | Method for servicing a peripheral interrupt request in a microcontroller |
JPH0887462A (ja) | 1994-09-20 | 1996-04-02 | Fujitsu Ltd | ステートマシン及び通信制御方式 |
US6115496A (en) * | 1995-03-02 | 2000-09-05 | Apple Computer, Inc. | Method and apparatus for accelerating image data compression |
JPH1069459A (ja) | 1996-08-29 | 1998-03-10 | Hitachi Ltd | シリアルインタフェース制御装置およびその制御方法 |
US6034963A (en) | 1996-10-31 | 2000-03-07 | Iready Corporation | Multiple network protocol encoder/decoder and data processor |
US6702417B2 (en) * | 1997-07-12 | 2004-03-09 | Silverbrook Research Pty Ltd | Printing cartridge with capacitive sensor identification |
US7152232B2 (en) * | 2001-07-16 | 2006-12-19 | Sun Microsystems, Inc. | Hardware message buffer for supporting inter-processor communication |
ATE398804T1 (de) * | 2002-04-26 | 2008-07-15 | California Inst Of Techn | Vorrichtung und verfahren für taktlose datenrückgewinnung |
US7133857B1 (en) * | 2002-10-15 | 2006-11-07 | Ximpleware, Inc. | Processing structured data |
US7487542B2 (en) | 2004-01-14 | 2009-02-03 | International Business Machines Corporation | Intrusion detection using a network processor and a parallel pattern detection engine |
US7392229B2 (en) | 2005-02-12 | 2008-06-24 | Curtis L. Harris | General purpose set theoretic processor |
EP1859346B1 (en) * | 2005-03-04 | 2012-01-11 | Hewlett-Packard Development Company, L.P. | A method and apparatus for facilitating pipeline throughput |
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 |
US7899977B2 (en) * | 2006-12-08 | 2011-03-01 | Pandya Ashish A | Programmable intelligent search memory |
TW200912728A (en) | 2007-09-13 | 2009-03-16 | Thomson Licensing | System and method for splitting data and data control information |
US7886089B2 (en) | 2008-02-13 | 2011-02-08 | International Business Machines Corporation | Method, system and computer program product for enhanced shared store buffer management scheme for differing buffer sizes with limited resources for optimized performance |
JP2009301137A (ja) * | 2008-06-10 | 2009-12-24 | Mitsubishi Electric Corp | 並列プロセッサ |
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 |
US8938590B2 (en) | 2008-10-18 | 2015-01-20 | Micron Technology, Inc. | Indirect register access method and system |
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 |
US9639493B2 (en) | 2008-11-05 | 2017-05-02 | Micron Technology, Inc. | Pattern-recognition processor with results buffer |
US20100118425A1 (en) | 2008-11-11 | 2010-05-13 | Menachem Rafaelof | Disturbance rejection in a servo control loop using pressure-based disc mode sensor |
US9164945B2 (en) | 2008-12-01 | 2015-10-20 | Micron Technology, Inc. | Devices, systems, and methods to synchronize parallel processing of a single data stream |
US10007486B2 (en) | 2008-12-01 | 2018-06-26 | Micron Technology, Inc. | Systems and methods to enable identification of different data sets |
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 |
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 |
US8281395B2 (en) | 2009-01-07 | 2012-10-02 | Micron Technology, Inc. | Pattern-recognition processor with matching-data reporting module |
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 |
US8285917B2 (en) * | 2009-03-26 | 2012-10-09 | Scaleo Chip | Apparatus for enhancing flash memory access |
US7683665B1 (en) * | 2009-04-21 | 2010-03-23 | International Business Machines Corporation | Multiple parallel programmable finite state machines using a shared transition table |
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 |
US8572016B2 (en) * | 2009-07-31 | 2013-10-29 | International Business Machines Corporation | Match engine for detection of multi-pattern rules |
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 |
US8489534B2 (en) | 2009-12-15 | 2013-07-16 | Paul D. Dlugosch | Adaptive content inspection |
US9081501B2 (en) * | 2010-01-08 | 2015-07-14 | International Business Machines Corporation | Multi-petascale highly efficient parallel supercomputer |
US8766666B2 (en) | 2010-06-10 | 2014-07-01 | Micron Technology, Inc. | Programmable device, hierarchical parallel machines, and methods for providing state information |
KR101607736B1 (ko) | 2011-01-25 | 2016-03-30 | 마이크론 테크놀로지, 인크. | 오토마톤의 진입 차수 및/또는 진출 차수를 제어하기 위한 양화 언롤링 |
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 |
WO2013032446A1 (en) * | 2011-08-30 | 2013-03-07 | Empire Technology Development Llc | Hardware-based array compression |
US8745291B2 (en) * | 2011-10-04 | 2014-06-03 | Qualcomm Incorporated | Inter-processor communication apparatus and method |
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 |
US8680888B2 (en) | 2011-12-15 | 2014-03-25 | Micron Technologies, Inc. | Methods and systems for routing in a state machine |
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 |
US9304968B2 (en) | 2012-07-18 | 2016-04-05 | Micron Technology, Inc. | Methods and devices for programming 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 |
-
2012
- 2012-07-18 US US13/552,479 patent/US9235798B2/en active Active
-
2013
- 2013-07-09 WO PCT/US2013/049744 patent/WO2014014709A1/en active Application Filing
- 2013-07-09 CN CN201380038242.3A patent/CN104471552B/zh active Active
- 2013-07-09 JP JP2015523124A patent/JP6017034B2/ja active Active
- 2013-07-09 KR KR1020157002530A patent/KR101908768B1/ko active IP Right Grant
- 2013-07-09 EP EP13819214.1A patent/EP2875433B1/en active Active
- 2013-07-18 TW TW102125814A patent/TWI502502B/zh active
-
2016
- 2016-01-11 US US14/992,616 patent/US10366009B2/en active Active
-
2019
- 2019-07-16 US US16/513,418 patent/US10915450B2/en active Active
-
2021
- 2021-01-22 US US17/155,433 patent/US11836081B2/en active Active
-
2022
- 2022-11-02 US US17/979,472 patent/US11741014B2/en active Active
-
2023
- 2023-12-04 US US18/527,793 patent/US20240104020A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101490574A (zh) * | 2006-06-06 | 2009-07-22 | 莱特普茵特公司 | 捕获数据信号内的多个数据分组用来分析的装置 |
CN102193886A (zh) * | 2010-03-05 | 2011-09-21 | Lsi公司 | 能够进行并发数据操纵的dma引擎 |
TW201209717A (en) * | 2010-06-10 | 2012-03-01 | Micron Technology Inc | Analyzing data using a hierarchical structure |
Also Published As
Publication number | Publication date |
---|---|
US20240104020A1 (en) | 2024-03-28 |
US20160124860A1 (en) | 2016-05-05 |
US9235798B2 (en) | 2016-01-12 |
US10366009B2 (en) | 2019-07-30 |
TWI502502B (zh) | 2015-10-01 |
EP2875433A1 (en) | 2015-05-27 |
US20230048032A1 (en) | 2023-02-16 |
US10915450B2 (en) | 2021-02-09 |
US20190340130A1 (en) | 2019-11-07 |
US11836081B2 (en) | 2023-12-05 |
WO2014014709A1 (en) | 2014-01-23 |
TW201419146A (zh) | 2014-05-16 |
US20140025905A1 (en) | 2014-01-23 |
US11741014B2 (en) | 2023-08-29 |
KR20150037937A (ko) | 2015-04-08 |
EP2875433B1 (en) | 2021-10-20 |
JP6017034B2 (ja) | 2016-10-26 |
EP2875433A4 (en) | 2016-11-16 |
KR101908768B1 (ko) | 2018-10-16 |
JP2015531111A (ja) | 2015-10-29 |
US20210149810A1 (en) | 2021-05-20 |
CN104471552A (zh) | 2015-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104471552B (zh) | 用于处置状态机引擎所接收的数据的方法及*** | |
CN104011736B (zh) | 用于状态机中的检测的方法及*** | |
CN104487957B (zh) | 用于编程状态机引擎的方法及装置 | |
CN104603741B (zh) | 在模式辨识处理***中用于电力管理的方法及*** | |
CN104583935B (zh) | 状态机引擎中的指令*** | |
CN104603742B (zh) | 用于状态机引擎的结果产生 | |
CN103999035B (zh) | 用于状态机中的数据分析的方法及*** | |
CN104011723B (zh) | 状态机晶格中的布尔逻辑 | |
CN104067282B (zh) | 状态机晶格中的计数器操作 | |
CN105051711B (zh) | 用于提供由状态机引擎接收的数据的方法及设备 | |
CN103988212B (zh) | 用于在状态机中路由的方法及*** | |
CN104487956B (zh) | 用于使用状态机引擎中的状态向量数据的方法及*** | |
CN105830160B (zh) | 用于将经屏蔽数据写入到缓冲器的设备及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |