分案申请的相关信息
本申请是国际申请号为pct/us2012/067995、申请日为2012年12月5日、发明名称为“用于状态机中的检测的方法及系统”的pct申请进入中国国家阶段后申请号为201280062249.4的中国发明专利申请的分案申请。
本发明的实施例一般来说涉及电子装置,且更具体来说,在某些实施例中涉及具有用于型式辨识的并行有限状态机的电子装置。
背景技术:
在常规基于冯·诺伊曼(vonneumann)的计算机上执行复杂型式辨识可为低效的。然而,生物大脑(特定来说,人脑)擅长执行型式辨识。当前研究表明,人脑使用新皮质中的一系列以层次方式组织的神经元层执行型式辨识。层次的较低层中的神经元分析来自(举例来说)感觉器官的“原始信号”,而较高层中的神经元分析来自较低层中的神经元的信号输出。新皮质中的此层次式系统(可能与大脑的其它区一起)实现复杂型式辨识,此使得人类能够执行高级功能,例如空间推理、意识思考及复杂语言。
在计算领域中,型式辨识任务日益具挑战性。在计算机之间传输的数据量越来越大,且用户希望识别的型式的数目日益增加。举例来说,通常通过搜索数据流中的型式(例如,特定短语或代码片段)来检测垃圾邮件或恶意软件。型式的数目随垃圾邮件与恶意软件的多样化而增加,因为新型式可经实施以搜索新变化形式。针对这些型式中的每一者搜索数据流可形成计算瓶颈。通常,在接收数据流时,针对每一型式一次搜索一个数据流。在系统准备好搜索数据流的下一部分之前的延迟随型式的数目而增加。因此,型式辨识可减慢数据的接收。
已设计用以针对若干型式搜索数据流的硬件,但此硬件通常不能在给定时间量内处理充足数据量。经配置以搜索数据流的一些装置通过将数据流分布在多个电路当中而如此进行。所述电路各自确定数据流是否匹配型式的一部分。通常,大量电路并行操作,从而各自大体同时搜索数据流。然而,尚未存在一种实际上允许以与生物大脑的方式更相当的方式执行型式辨识的系统。此系统的开发是期望的。
附图说明
图1图解说明根据本发明的各种实施例的具有状态机引擎的系统的实例。
图2图解说明根据本发明的各种实施例的图1的状态机引擎的fsm晶格的实例。
图3图解说明根据本发明的各种实施例的图2的fsm晶格的块的实例。
图4图解说明根据本发明的各种实施例的图3的块的行的实例。
图5图解说明根据本发明的各种实施例的图4的行的两个一群组的实例。
图6图解说明根据本发明的各种实施例的有限状态机图的实例。
图7图解说明根据本发明的各种实施例的借助fsm晶格实施的两层级层次的实例。
图8图解说明根据本发明的各种实施例的用于编译器将源代码转换成二进制文件以用于编程图2的fsm晶格的方法的实例。
图9图解说明根据本发明的各种实施例的状态机引擎。
图10图解说明根据本发明的各种实施例的图4的检测单元的实例。
图11图解说明根据本发明的各种实施例的耦合到图10的检测单元的路由的实例。
图12图解说明根据本发明的各种实施例的图11的群组内电路。
图13图解说明根据本发明的各种实施例的图12的多路复用器的真值表。
具体实施方式
现在转到各图,图1图解说明通常由参考编号10指定的基于处理器的系统的实施例。系统10可为多种类型中的任一者,例如桌上型计算机、膝上型计算机、寻呼机、蜂窝式电话、个人记事本、便携式音频播放器、控制电路、相机等。系统10也可为网络节点,例如路由器、服务器或客户端(例如,先前所描述的类型的计算机中的一者)。系统10可为某一其它种类的电子装置,例如复印机、扫描仪、打印机、游戏控制台、电视机、机顶盒视频分配或记录系统、电缆盒、个人数字媒体播放器、工厂自动化系统、汽车计算机系统或医疗装置。(用以描述系统的这各种实例的术语(如本文中所使用的许多其它术语)可共享一些所指物,且如此不应按照所列举的其它物项来狭义地理解。)
在典型基于处理器的装置(例如系统10)中,处理器12(例如微处理器)控制系统10中的系统功能及请求的处理。此外,处理器12可包括共享系统控制的多个处理器。处理器12可直接或间接耦合到系统10中的元件中的每一者以使得处理器12通过执行可存储于系统10内或在系统10外部的指令来控制系统10。
根据本文中所描述的实施例,系统10包含可在处理器12的控制下操作的状态机引擎14。状态机引擎14可采用若干种状态机架构中的任一者,包含(但不限于)mealy架构、moore架构、有限状态机(fsm)、确定性fsm(dfsm)、位并行状态机(bpsm)等。虽然可使用多种架构,但出于论述目的,本申请案是指fsm。然而,所属领域的技术人员将了解可使用多种状态机架构中的任一者来采用所描述技术。
如下文所进一步论述,状态机引擎14可包含若干个(例如,一或多个)有限状态机(fsm)晶格。每一fsm晶格可包含各自并行接收及分析同一数据的多个fsm。此外,fsm晶格可布置成若干群组(例如,群集),以使得fsm晶格的群集可并行分析同一输入数据。此外,状态机引擎14的fsm晶格的群集可布置成层次式结构,其中来自所述层次式结构的较低层级上的状态机晶格的输出可用作到较高层级上的状态机晶格的输入。通过经由层次式结构串行地级联状态机引擎14的并行fsm晶格的群集,可分析(例如,评估、搜索等)日益复杂的型式。
此外,基于状态机引擎14的层次式并行配置,状态机引擎14可用于利用高处理速度的系统中的型式辨识。例如,本文中所描述的实施例可并入于具有1千兆字节/秒的处理速度的系统中。因此,利用状态机引擎14,可针对各种型式快速地分析来自高速存储器装置或其它外部装置的数据。状态机引擎14可根据数种准则约同时(例如,在单个装置循环期间)及其相应搜索项分析数据流。状态机引擎14的层级上的fsm群集内的fsm晶格中的每一者可各自约同时接收来自数据流的同一搜索项,且并行fsm晶格中的每一者可确定所述项是否将状态机引擎14推进到处理准则中的下一状态。状态机引擎14可根据相对大量准则(例如,100个以上、110个以上或10,000个以上)分析项。由于其并行操作,因此其可将准则应用于具有相对高带宽的数据流(例如,大于或通常等于1千兆字节/秒的数据流)而不减慢所述数据流。
在一个实施例中,状态机引擎14可经配置以辨识(例如,检测)数据流中的大量型式。例如,状态机引擎14可用以检测用户或其它实体可希望分析的多种类型的数据流中的一或多者中的型式。举例来说,状态机引擎14可经配置以分析经由网络接收的数据流,例如经由因特网接收的包或者经由蜂窝式网络接收的话音或数据。在一个实例中,状态机引擎14可经配置以针对垃圾邮件或恶意软件分析数据流。数据流可作为串行数据流接收,其中以具有意义的次序(例如以时间、词汇或语义重要性次序)接收数据。或者,数据流可经并行或无序地接收且然后转换成串行数据流,例如,通过将经由因特网接收的包重新排序。在一些实施例中,数据流可串行地呈现项,但表达所述项中的每一者的位可被并行接收。数据流可从系统10外部的源接收或可通过询问存储器装置(例如存储器16)且由存储于存储器16中的数据形成数据流而形成。在其它实例中,状态机引擎14可经配置以辨识拼写某一字的字符序列、规定基因的遗传碱基对序列、图片或视频文件中形成图像的一部分的位序列、可执行文件中形成程序的一部分的位序列或者音频文件中形成歌曲或口语短语的一部分的位序列。将分析的数据流可包含呈二进制格式或其它格式(例如,十进制、ascii等)的多个数据位。所述流可编码具有单个数字或多个数字(例如,数个二进制数字)的数据。
如将了解,系统10可包含存储器16。存储器16可包含易失性存储器,例如动态随机存取存储器(dram)、静态随机存取存储器(sram)、同步dram(sdram)、双倍数据速率dram(ddrsdram)、ddr2sdram、ddr3sdram等。存储器16还可包含用以连同易失性存储器一起使用的非易失性存储器,例如只读存储器(rom)、pc-ram、硅-氧化物-氮化物-氧化物-硅(sonos)存储器、金属-氧化物-氮化物-氧化物-硅(monos)存储器、基于多晶硅浮动栅极的存储器及/或各种架构的其它类型的快闪存储器(例如,“与非”存储器、“或非”存储器等)。存储器16可包含可提供将由状态机引擎14分析的数据的一或多个存储器装置,例如dram装置。此类装置可称为或包含固态驱动器(ssd)、multimediamediacard(mmc)、securedigital(sd)卡、compactflash(cf)卡或任何其它适合装置。此外,应了解,此类装置可经由任何适合接口(例如通用串行总线(usb)、外围组件互连(pci)、高速pci(pci-e)、小型计算机系统接口(scsi)、ieee1394(火线(firewire))或任何其它适合接口)耦合到系统10。为促进存储器16(例如快闪存储器装置)的操作,系统10可包含存储器控制器(未图解说明)。如将了解,所述存储器控制器可为独立装置或者其可与处理器12成整体。另外,系统10可包含外部存储装置18,例如磁性存储装置。所述外部存储装置也可将输入数据提供到状态机引擎14。
系统10可包含若干个额外元件。例如,编译器20可用以编程状态机引擎14,如关于图8所更详细描述。输入装置22也可耦合到处理器12以允许用户将数据输入到系统10中。例如,输入装置22可用以将数据输入到存储器16中以供稍后由状态机引擎14分析。输入装置22可包含(例如)按钮、交换元件、键盘、光笔、手写笔、鼠标及/或话音辨识系统。输出装置24(例如显示器)也可耦合到处理器12。显示器24可包含(举例来说)lcd、crt、led及/或音频显示器。其系统还可包含用于与网络(例如因特网)介接的网络接口装置26,例如网络接口卡(nic)。如将了解,系统10可取决于系统10的应用而包含许多其它组件。
图2到5图解说明fsm晶格30的实例。在一实例中,fsm晶格30包括块32的阵列。如将描述,每一块32可包含对应于fsm中的多个状态的多个可选择性耦合硬件元件(例如,可编程元件及/或专用元件)。类似于fsm中的状态,硬件元件可分析输入流且基于所述输入流而激活下游硬件元件。
可编程元件可经编程以实施许多不同功能。例如,所述可编程元件可包含以层次方式组织成若干行38(展示于图3及4中)及若干块32(展示于图2及3中)的状态机元件(sme)34、36(展示于图5中)。为了在以层次方式组织的sme34、36之间路由信号,可使用可编程交换元件的层次,其包含块间交换元件40(展示于图2及3中)、块内交换元件42(展示于图3及4中)及行内交换元件44(展示于图4中)。
如下文所描述,交换元件可包含路由结构及缓冲器。sme34、36可对应于由fsm晶格30实施的fsm的状态。可通过使用如下文所描述的可编程交换元件而将sme34、36耦合在一起。因此,可通过编程sme34、36以对应于状态的功能且通过将sme34、36选择性地耦合在一起以对应于fsm中的状态之间的转变而在fsm晶格30上实施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上。所述图像可编程(例如,设定)sme34、36的状态。也就是说,所述图像可将sme34、36配置为以某一方式对输入块52处的给定输入做出反应。举例来说,sme34、36可经设定以在于输入块52处接收到字符‘a’时输出高信号。
在一实例中,可将输入块52、输出块54及/或编程接口56实施为寄存器以使得向所述寄存器的写入将数据提供到相应元件或从所述寄存器的读取从所述相应元件提供数据。因此,来自存储于对应于编程接口56的寄存器中的图像的位可加载于sme34、36上。虽然图2图解说明块32、输入块52、输出块54与块间交换元件40之间的某一数目个导体(例如,导线、迹线),但应理解在其它实例中可使用更少或更多导体。
图3图解说明块32的实例。块32可包含可与可编程块内交换元件42选择性地耦合在一起的多个行38。另外,行38可借助块间交换元件40选择性地耦合到另一块32内的另一行38。行38包含组织成本文中称为两个一群组(got)60的若干对元件的多个sme34、36。在一实例中,块32包括十六(16)个行38。
图4图解说明行38的实例。got60可通过可编程行内交换元件44选择性地耦合到其它got60及行38内的任何其它元件(例如,专用元件58)。got60也可借助块内交换元件42耦合到其它行38中的其它got60,或者借助块间交换元件40耦合到其它块32中的其它got60。在一实例中,got60具有第一输入62及第二输入64以及输出66。第一输入62耦合到got60的第一sme34且第二输入62耦合到got60的第二sme34,如将参考图5进一步图解说明。
在一实例中,行38包含第一多个行互连导体68及第二多个行互连导体70。在一实例中,got60的输入62、64可耦合到一或多个行互连导体68、70,且输出66可耦合到一个行互连导体68、70。在一实例中,第一多个行互连导体68可耦合到行38内的每一got60的每一sme34、36。第二多个行互连导体70可耦合到行38内的每一got60的仅一个sme34、36,但无法耦合到got60的另一sme34、36。在一实例中,第二多个行互连导体70的第一半部可耦合到行38内的sme34、36的第一半部(来自每一got60的一个sme34),且第二多个行互连导体70的第二半部可耦合到行38内的sme34、36的第二半部(来自每一got60的另一sme34、36),如将关于图5更佳地图解说明。第二多个行互连导体70与sme34、36之间的有限连接性在本文中称为“奇偶”。在一实例中,行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包括布尔逻辑。在一些实例中,此布尔逻辑可用以从fsm晶格30中的终端状态sme(对应于fsm的终端节点,如本文中稍后所论述)提取信息。所提取的信息可用以将状态信息传送到其它fsm晶格30及/或传送用以重新编程fsm晶格30或重新编程另一fsm晶格30的编程信息。
图5图解说明got60的实例。got60包含具有输入62、64且使其输出72、74耦合到“或”门76及3对1多路复用器78的第一sme34及第二sme36。3对1多路复用器78可经设定以将got60的输出66耦合到第一sme34、第二sme36或者“或”门76。“或”门76可用以将输出72、74两者耦合在一起以形成got60的共同输出66。在一实例中,如上文所论述,第一sme34及第二sme36展现奇偶,其中第一sme34的输入62可耦合到行互连件导体68中的一些行互连导体且第二sme36的输入64可耦合到其它行互连件导体70。在一实例中,可通过设定交换元件79中的任一者或两者而使got60内的两个sme34、36级联及/或循环回到其自身。可通过将sme34、36的输出72、74耦合到另一sme34、36的输入62、64而将sme34、36级联。可通过将输出72、74耦合到其自己的输入62、64而使sme34、36循环回到其自身。因此,第一sme34的输出72可不耦合到第一sme34的输入62及第二sme36的输入64中的任一者、耦合到其中的一者或其中的两者。
在一实例中,状态机元件34、36包括并联耦合到检测线82的多个存储器单元80,例如通常用于动态随机存取存储器(dram)中的存储器单元。一种此类存储器单元80包括可设定到一数据状态(例如对应于高值或低值(例如,1或0)的数据状态)的存储器单元。存储器单元80的输出耦合到检测线82且到存储器单元80的输入基于数据流线84上的数据而接收信号。在一实例中,数据流线84上的输入经解码以选择存储器单元80中的一者。选定存储器单元80将其所存储数据状态作为输出提供到检测线82上。举例来说,在输入块52处所接收的数据可提供到解码器(未展示)且所述解码器可选择数据流线84中的一者。在一实例中,所述解码器可将8位acsii字符转换为256个数据流线84中的对应1。
因此,当存储器单元80设定到高值且数据流线84上的数据对应于存储器单元80时,存储器单元80将高信号输出到检测线82。当数据流线84上的数据对应于存储器单元80且存储器单元80设定到低值时,存储器单元80将低信号输出到检测线82。检测线82上的来自存储器单元80的输出由检测单元86感测。
在一实例中,输入线62、64上的信号将相应检测单元86设定到作用或非作用状态。当设定到非作用状态时,检测单元86在相应输出72、74上输出低信号,而不管相应检测线82上的信号如何。当设定到作用状态时,检测单元86在从相应sme34、36的存储器单元82中的一者检测到高信号时在相应输出线72、74上输出高信号。当处于作用状态中时,检测单元86在来自相应sme34、36的所有存储器单元82的信号为低时在相应输出线72、74上输出低信号。
在一实例中,sme34、36包含256个存储器单元80且每一存储器单元80耦合到不同数据流线84。因此,sme34、36可经编程以在数据流线84中的选定一或多者在其上具有高信号时输出高信号。举例来说,sme34可将第一存储器单元80(例如,位0)设定为高且将所有其它存储器单元80(例如,位1到255)设定为低。当相应检测单元86处于作用状态中时,sme34在对应于位0的数据流线84在其上具有高信号时在输出72上输出高信号。在其它实例中,当多个数据流线84中的一者在其上具有高信号时,可通过将适当存储器单元80设定到高值来设定sme34以输出高信号。
在一实例中,可通过从相关联寄存器读取位而将存储器单元80设定到高值或低值。因此,可通过将编译器20所创建的图像存储到寄存器中且将所述寄存器中的位加载到相关联存储器单元80中来编程sme34。在一实例中,编译器20所创建的图像包含高及低(例如,1及0)位的二进制图像。所述图像可编程fsm晶格30以通过级联sme34、36而使其作为fsm操作。举例来说,可通过将检测单元86设定到作用状态而将第一sme34设定到作用状态。第一sme34可经设定以在对应于位0的数据流线84在其上具有高信号时输出高信号。第二sme36可最初设定到非作用状态,但可在作用时经设定以在对应于位1的数据流线84在其上具有高信号时输出高信号。可通过设定第一sme34的输出72以耦合到第二sme36的输入64来级联第一sme34与第二sme36。因此,当在对应于位0的数据流线84上感测到高信号时,第一sme34在输出72上输出高信号且将第二sme36的检测单元86设定到作用状态。当在对应于位1的数据流线84上感测到高信号时,第二sme36在输出74上输出高信号以激活另一sme36或以供从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的输出可包含指示给定型式的匹配的单个位、包括指示与多个型式的匹配及不匹配的多个位的字及对应于所有或某些可编程元件在给定时刻的状态的状态向量。如所描述,若干个fsm晶格30可包含于状态机引擎(例如状态机引擎14)中以执行数据分析,例如型式辨识(例如,语音辨识、图像辨识等)、信号处理、成像、计算机视觉、密码编译及其它。
图6图解说明可由fsm晶格30实施的有限状态机(fsm)的实例性模型。fsm晶格30可配置(例如,编程)为fsm的物理实施方案。fsm可表示为含有一或多个根节点92的图90(例如,有向图、无向图、伪图)。除了根节点92之外,所述fsm还可由经由一或多个边缘98连接到根节点92及其它标准节点94的数个标准节点94及终端节点96构成。节点92、94、96对应于所述fsm中的状态。边缘98对应于所述状态之间的转变。
节点92、94、96中的每一者可处于作用或非作用状态中。当处于非作用状态中时,节点92、94、96不对输入数据做出反应(例如,响应)。当处于作用状态中时,节点92、94、96可对输入数据做出反应。上游节点92、94可在输入数据匹配由上游节点92、94与在所述节点下游的节点94、96之间的边缘98规定的准则时通过激活下游节点94、96而对所述输入数据做出反应。举例来说,规定字符‘b’的第一节点94将在第一节点94为作用的且字符‘b’被接收为输入数据时激活通过边缘98连接到第一节点94的第二节点94。如本文所使用,“上游”是指一或多个节点之间的关系,其中在一或多个其它节点上游(或在循环或反馈配置的情况中,在其自身上游)的第一节点是指其中所述第一节点可激活所述一或多个其它节点(或在循环的情况中,可激活其自身)的情形。类似地,“下游”是指其中在一或多个其它节点下游(或在循环的情况中,在其自身下游)的第一节点可由所述一或多个其它节点激活(或在循环的情况中,可由其自身激活)的关系。因此,本文中使用术语“上游”及“下游”来指一或多个节点之间的关系,但这些术语不排除循环或节点当中的其它非线性路径的使用。
在图90中,可最初激活根节点92且根节点92可在输入数据匹配来自根节点92的边缘98时激活下游节点94。节点94可在输入数据匹配来自节点94的边缘98时激活节点96。可在接收到输入数据时以此方式激活贯穿图90的节点94、96。终端节点96对应于输入数据对所关注序列的匹配。因此,终端节点96的激活指示已接收到所关注序列作为输入数据。在实施型式辨识功能的fsm晶格30的情景中,到达终端节点96可指示已在输入数据中检测到特定所关注型式。
在一实例中,每一根节点92、标准节点94及终端节点96可对应于fsm晶格30中的可编程元件。每一边缘98可对应于所述可编程元件之间的连接。因此,转变到另一标准节点94或终端节点96(例如,具有连接到另一标准节点94或终端节点96的边缘98)的标准节点94对应于转变到另一可编程元件(例如,将输出提供到另一可编程元件)的可编程元件。在一些实例中,根节点92不具有对应可编程元件。
当编程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的可编程元件的状态。因此,所述输出可包含图90的所有终端节点96所提供的指示的集合。所述状态向量可表示为字,其中每一终端节点96所提供的二进制指示包括所述字的一个位。终端节点96的此编码可提供fsm晶格30的检测状态(例如,是否已检测到所关注序列及已检测到何种所关注序列)的有效指示。在另一实例中,状态向量可包含所有或一子组的可编程元件的状态,而不论所述可编程元件是否对应于终端节点96。
如上文所提及,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。
图8图解说明用于编译器将源代码转换成经配置以编程fsm晶格(例如晶格30)的图像以实施fsm的方法110的实例。方法110包含将源代码剖析成语法树(框112),将所述语法树转换成自动机(框114),优化所述自动机(框116),将所述自动机转换成网表(框118),将所述网表放置于硬件上(框120),路由所述网表(框122)及公布所得图像(框124)。
在一实例中,编译器20包含允许软件开发者创建用于在fsm晶格30上实施fsm的图像的应用编程接口(api)。编译器20提供用以将源代码中的输入正则表达式集转换成经配置以编程fsm晶格30的图像的方法。可通过用于具有冯·诺伊曼(vonneumann)架构的计算机的指令来实施编译器20。这些指令可致使计算机上的处理器12实施编译器20的功能。举例来说,所述指令在由处理器12执行时可致使处理器12对可由处理器12存取的源代码执行如框112、114、116、118、120、122及124中所描述的动作。
在一实例中,源代码描述用于识别符号群组内的符号型式的搜索串。为了描述搜索串,源代码可包含多个正则表达式(regex)。正则表达式可为用于描述符号搜索型式的串。正则表达式广泛地用于各种计算机领域中,例如程序设计语言、文本编辑器、网络安全及其它领域。在一实例中,编译器所支持的正则表达式包含用于分析未结构化数据的准则。未结构化数据可包含自由形式的数据且不具有应用于所述数据内的字的索引。字可包含所述数据内的可打印及不可打印的字节的任一组合。在一实例中,编译器可支持多种不同源代码语言以用于实施包含perl(例如,perl兼容正则表达式(pcre))、php、java及.net语言的正则表达式。
在框112处,编译器20可剖析源代码以形成关系连接的运算符的布置,其中不同类型的运算符对应于源代码所实施的不同函数(例如,源代码中的正则表达式所实施的不同函数)。剖析源代码可创建所述源代码的类属表示。在一实例中,所述类属表示包括源代码中的正则表达式的经编码表示,其呈称作语法树的树形图的形式。本文所述的实例涉及作为语法树(还称作“抽象语法树”)的布置,然而在其它实例中可使用具体语法树或其它布置。
如上文所提及,由于编译器20可支持源代码的多种语言,因此不管语言如何剖析均将源代码转换成非语言特定表示(例如,语法树)。因此,由编译器20进行的进一步处理(框114、116、118、120)可从共同输入结构起作用而不管源代码的语言如何。
如上所述,语法树包含关系连接的多个运算符。语法树可包含多种不同类型的运算符。也就是说,不同运算符可对应于源代码中的正则表达式所实施的不同函数。
在框114处,将语法树转换成自动机。自动机包括fsm的软件模型且可因此分类为确定性或非确定性。确定性自动机在给定时间具有单个执行路径,而非确定性自动机具有多个同时执行路径。所述自动机包括多个状态。为了将语法树转换成自动机,将语法树中的运算符及运算符之间的关系转换成状态,其中所述状态之间具有转变。在一实例中,可部分地基于fsm晶格30的硬件而转换所述自动机。
在一实例中,用于自动机的输入符号包含字母、数字0到9及其它可打印字符的符号。在一实例中,输入符号由字节值0到255(包含0及255)表示。在一实例中,自动机可表示为有向图,其中所述图的节点对应于状态集。在一实例中,输入符号α(即,δ(p,α))上从状态p到状态q的转变由从节点p到节点q的有向连接展示。在一实例中,自动机的反转产生新的自动机,其中某一符号α上的每一转变p→q在同一符号上反转q→p。在反转中,开始状态变为最终状态且最终状态变为开始状态。在一实例中,自动机所辨识(例如,匹配)的语言是当依序输入到所述自动机中时将到达最终状态的所有可能字符串的集。所述自动机所辨识的语言中的每一串追踪从开始状态到一或多个最终状态的路径。
在框116处,在构造自动机之后,优化所述自动机以除其它之外还减小其复杂度及大小。可通过组合冗余状态来优化所述自动机。
在框118处,将经优化的自动机转换成网表。将所述自动机转换成网表将所述自动机的每一状态映射到fsm晶格30上的硬件元件(例如,sme34、36,其它元件)并确定所述硬件元件之间的连接。
在框120处,放置网表以选择对应于所述网表的每一节点的目标装置的特定硬件元件(例如,sme34、36,专用元件58)。在一实例中,放置基于fsm晶格30的一般输入及输出约束而选择每一特定硬件元件。
在框122处,路由所放置的网表以确定用于可编程交换元件(例如,块间交换元件40、块内交换元件42及行内交换元件44)的设定,以便将选定硬件元件耦合在一起以实现网表描述的连接。在一实例中,通过确定fsm晶格30的将用以连接选定硬件元件及用于可编程交换元件的设定的特定导体来确定用于可编程交换元件的设定。相比于框120处的放置,路由可能考虑硬件元件之间的连接的更特定限制。因此,假定有对fsm晶格30上的导体的实际限制,路由可调整如通过全局放置所确定的所述硬件元件中的一些硬件元件的位置以便做出适当连接。
一旦网表经放置及路由,便可将所述经放置及路由的网表转换成用于编程fsm晶格30的多个位。所述多个位在本文中称作图像。
在框124处,由编译器20公布图像。所述图像包括用于编程fsm晶格30的特定硬件元件的多个位。在其中所述图像包括多个位(例如,0及1)的实施例中,所述图像可称为二进制图像。可将所述位加载到fsm晶格30上以编程sme34、36、专用元件58及可编程交换元件的状态,以使得经编程fsm晶格30实施具有源代码所描述的功能性的fsm。放置(框120)及路由(框122)可将fsm晶格30中的特定位置处的特定硬件元件映射到自动机中的特定状态。因此,所述图像中的位可编程特定硬件元件以实施所要功能。在一实例中,可通过将机器代码保存到计算机可读媒体来公布所述图像。在另一实例中,可通过在显示装置上显示所述图像来公布所述图像。在又一实例中,可通过将所述图像发送到另一装置(例如用于将所述图像加载到fsm晶格30上的编程装置)来公布所述图像。在再一实例中,可通过将所述图像加载到fsm晶格(例如,fsm晶格30)上来公布所述图像。
在一实例中,可通过将位值从图像直接加载到sme34、36及其它硬件元件或通过将图像加载到一或多个寄存器中且然后将所述位值从所述寄存器写入到sme34、36及其它硬件元件来将所述图像加载到fsm晶格30上。在一实例中,fsm晶格30的硬件元件(例如,sme34、36、专用元件58、可编程交换元件40、42、44)经存储器映射以使得编程装置及/或计算机可通过将所述图像写入到一或多个存储器地址而将所述图像加载到fsm晶格30上。
本文中所描述的方法实例可为至少部分地机器或计算机实施的。一些实例可包含用指令编码的计算机可读媒体或机器可读媒体,所述指令可操作以配置电子装置以执行如在以上实例中所述的方法。此类方法的实施方案可包含代码,例如微码、汇编语言代码、高级语言代码等。此代码可包含用于执行各种方法的计算机可读指令。所述代码可形成计算机程序产品的部分。此外,所述代码可在执行期间或在其它时间有形地存储于一或多个易失性或非易失性计算机可读媒体上。这些计算机可读媒体可包含(但不限于)硬盘、可装卸磁盘、可装卸光盘(例如,压缩光盘及数字视频光盘)、盒式磁带、存储卡或存储棒、随机存取存储器(ram)、只读存储器(rom)等。
现在参考图9,其图解说明状态机引擎14的实施例。如先前所描述,状态机引擎14经配置以经由数据总线从源(例如存储器16)接收数据。在所图解说明的实施例中,数据可经由总线接口(例如ddr3总线接口130)发送到状态机引擎14。ddr3总线接口130可能够以大于或等于1千兆字节/秒的速率交换数据。如将了解,取决于将分析的数据的源,总线接口130可为用于将数据交换到数据源及将数据从数据源交换到状态机引擎14的任何适合总线接口,例如“与非”快闪接口、pci接口等。如先前所描述,状态机引擎14包含经配置以分析数据的一或多个fsm晶格30。每一fsm晶格30可划分成两半晶格。在所图解说明的实施例中,每一半晶格可包含24ksme(例如,sme34、36)以使得晶格30包含48ksme。晶格30可包括如先前关于图2到5所描述而布置的任何所要数目个sme。此外,尽管图解说明了仅一个fsm晶格30,但状态机引擎14可包含多个fsm晶格30,如先前所描述。
将分析的数据可在总线接口130处接收且经由若干个缓冲器及缓冲器接口传输到fsm晶格30。在所图解说明的实施例中,数据路径包含数据缓冲器132、过程缓冲器134及排间(ir)总线与过程缓冲器接口136。数据缓冲器132经配置以接收且暂时存储将分析的数据。在一个实施例中,存在两个数据缓冲器132(数据缓冲器a及数据缓冲器b)。可将数据存储于两个数据缓冲器132中的一者中,而从另一数据缓冲器132清空数据以供由fsm晶格30分析。在所图解说明的实施例中,数据缓冲器132可各自为32千字节。ir总线与过程缓冲器接口136可促进到过程缓冲器134的数据传送。ir总线与过程缓冲器136确保数据由fsm晶格30按次序处理。ir总线与过程缓冲器136可协调数据交换、时序信息、打包指令等以使得按正确次序接收及分析数据。通常,ir总线与过程缓冲器136允许经由fsm晶格30的逻辑排并行分析多个数据集。
在所图解说明的实施例中,状态机引擎14还包含解压缩器138及压缩器140以帮助经由状态机引擎14传送大量数据。压缩器140与解压缩器138协同工作以使得可将数据压缩以最小化数据传送时间。通过压缩将分析的数据,可最小化总线利用时间。基于由编译器20提供的信息,可将屏蔽提供到状态机引擎14以提供可能不对其使用状态机的信息。压缩器140及解压缩器138还可经配置以处置变化的突发长度的数据。通过填补经压缩数据及包含关于每一经压缩区域何时结束的指示符,压缩器140可经由状态机引擎14改进总体处理速度。压缩器140及解压缩器138还可用以压缩及解压缩在由fsm晶格30分析之后的匹配结果数据。
如先前所描述,fsm晶格30的输出可包括状态向量。所述状态向量包括fsm晶格30的可编程元件的状态(例如,经激活或未经激活)。每一状态向量可暂时存储于状态向量高速缓冲存储器142中以供进一步层次式处理及分析。也就是说,可存储每一状态机的状态以使得最终状态可用于进一步分析,同时释放状态机以用于重新编程及/或新数据集的进一步分析。如同典型高速缓冲存储器,状态向量高速缓冲存储器允许存储信息(此处,状态向量)以供快速撷取及使用(此处,(例如)由fsm晶格30撷取及使用)。额外缓冲器(例如状态向量存储器缓冲器、状态向量中间输入缓冲器146及状态向量中间输出缓冲器148)可连同状态向量高速缓冲存储器142一起利用以适应状态向量的快速分析及存储,同时遵守经由状态机引擎14的包传输协议。
一旦由fsm晶格30产生所关注结果,便可将匹配结果存储于匹配结果存储器150中。也就是说,可将指示匹配(例如,检测到所关注型式)的“匹配向量”存储于匹配结果存储器150中。举例来说,然后可将匹配结果发送到匹配缓冲器152以供经由总线接口130传输到处理器12。如先前所描述,可压缩匹配结果。
也可在状态机引擎14中提供额外寄存器及缓冲器。例如,状态机引擎14可包含控制与状态寄存器154。另外,可提供恢复与编程缓冲器156以便最初用于编程fsm晶格30或在分析期间恢复fsm晶格30中的机器的状态。类似地,也可提供保存与修复映射缓冲器158以用于存储用于设置及使用的保存与修复映射。
图10更详细地图解说明图5的检测单元86。如先前所述,此检测单元86可接收第一输入62及第二输入82。在一个实施例中,第一输入62可为统一启用输入以作为用于检测单元86的启用信号而操作。如先前所论述,此输入62可包含从耦合到行38中的got60的每一sme34的路由线接收的信号。另外,应注意,行38中的got60的sme36中的等同检测单元86也可接收为输入62镜像的输入64作为统一启用输入以作为用于检测单元86的启用信号而操作。因此,输入64可包含从耦合到行38中的got60的每一sme36的路由线接收的信号。因此,尽管下文将更详细地论述sme34的检测单元86,但应注意sme36的检测单元86将以实质上类似方式操作。
如图10中所图解说明,所述检测单元可包含d触发器160。此d触发器可操作以接收统一启用输入62以及输入162上的时钟信号。因此,当接收到输入162(时钟输入)处的正边缘时,d触发器160可在q输出164上驱动可为统一启用输入62(d输入)的状态的结果。以此方式,d触发器160允许检测单元86成为可仅在所规定时间输出使用所述sme的存储器单元80执行的分析的结果的时钟启用的电路,如下文将论述。还应注意,检测单元86可包含可用以将q输出164设定到高态有效信号的设定输入166及可用以将q输出164设定到低态有效信号的复位输入168,而不管统一启用输入62或输入162上的时钟信号中的任一者的值如何。
图10中的检测单元86还可接收第二输入82。如先前所论述,此输入82可对应于检测线82。此检测线82可载运来自对应于检测单元86的sme34的一或多个存储器单元80的分析结果(例如,匹配结果)。因此,选定存储器单元80将其所存储数据状态作为输出提供到检测线82上,所述输出然后作为分析结果传输到检测单元86。检测线82上的此结果可传输到检测单元86中的“与”门170。另外,q输出164可传输到“与”门107。举例来说,当检测线82上的合格匹配发生且经由统一启用输入62激活检测单元86(例如,在作用状态中)时,将在输出72(或sme36中的检测单元86的输出74)上从检测单元86输出匹配结果输出。此合格匹配可表示(举例来说)来自单个sme34的经分析数据流中的匹配,所述匹配可连同其它sme34、36中的其它匹配一起用于搜索(举例来说)数据流中的型式。通过使用检测单元86中的d触发器160,可在预定时间基于计时信号而执行搜索及从其产生的结果。另外,可(例如,通过统一启用输入62的选定使用)实现对将在何时从sme34、36输出(例如,在输出72、74上)结果及输出何种结果的控制。此外,经由统一启用输入62(及统一启用输入64)对sme34、36的此选择性激活允许利用在sme34、36中的每一者中找到的结果作为数据流的总体较宽广分析的部分。
图11图解说明可耦合到行38的got60的局部路由矩阵172的实例。如所图解说明,sme34包含检测单元86以及可包含sme34的存储器单元80的数据分析元件171。数据分析元件171可耦合到sme34的检测线82。类似地,sme36包含检测单元86以及可包含存储器单元80的数据分析元件173。另外,数据分析元件173可耦合到sme36的检测线82。此外,除耦合到图11中的所图解说明sme34、36之外,局部路由矩阵172也可耦合到特定行38中的got60的所有对的sme34、36。因此,局部路由矩阵172可包含可编程行内交换元件44及行互连/互连件导体68、70(其也可称为“行路由线”,如下文所描述)。
在一个实施例中,局部路由矩阵172可包含多个行路由线174、176、178、180、182、184、186、188、190、192、194、196、198、200、202及204(下文中统称为“行路由线174到204”)。以此方式,行路由线174到204的数目可对应于给定行中的got的数目。因此,在所图解说明的实施例中,存在16个行路由线174到204。然而,应了解,可在局部路由矩阵172中利用更少或更多的行路由线。
行路由线174到204中的每一者可用以为一或多个got60的sme34、36中的任一者提供启用信号。因此,通过使用这些行路由线174到204,可激活任何特定sme(例如,sme34)的任何特定检测单元86。此可通过将行路由线174到204选择性地耦合(例如,经由编程)到sme34、36的统一启用输入62、64而实现。此外,为了提供将启用信号提供到sme34、36中的进一步灵活性,可在两个sme34、36当中划分行路由线174到204。举例来说,可利用行路由线174、176、178、180、182、184、186及188来激活行38中的sme34、36中的每一者。另外,可使用行路由线190、194、198及202来将统一启用输入62传输到行38中的sme34,而可使用行路由线192、196、200及204来将统一启用输入64传输到行38中的sme36。因此,举例来说,可直接寻址行中的sme34的总共16个检测单元86中的sme34的多达12个检测单元86,而可通过使用(举例来说)上文关于图5所描述的交换元件79寻址剩余检测单元86。以此方式,可减小行路由线174到204的总体数目,同时仍允许激活行38中的sme34、36中的任一者的任何检测单元86的总体灵活性及能力。
另外,应注意图11包含群组内电路206。此群组内电路206的输出可为可传输相应got60的输出的输出66。在一个实施例中,此输出66可耦合到用于传输got60的输出66的行路由线174、176、178、180、182、184、186及188中的任一者,从而反映在作用sme34、36中产生的任何结果。通过使用行路由线174、176、178、180、182、184、186及188(其为局部路由矩阵172与sme34、36的统一启用输入62、64共有的)来传输got的输出66,可减小行路由线174到204的总体数目,同时仍允许总体系统灵活性。
应注意,图11的群组内电路206可包含先前关于图5所论述的got60的元件。将关于图12更详细地论述群组内电路206中的这些元件的特定功能性及互连。
图12中的群组内电路206包含先前已展示为耦合到sme34、36的输入62、64及输出72、74。应注意,输入62、64及输出72、74是相对于其与sme34、36的相应关系且未必相对于其在群组内电路206中的功能而提及的。另外,群组内电路206包含“或”门76、3对1多路复用器78及分别耦合到输出72、74的交换元件79。如所图解说明,耦合到输出72的交换元件79可允许sme34的输出72传输到sme36的统一启用输入64(举例来说)以允许级联搜索发生。另外或替代地,耦合到输出72的交换元件79可允许sme34的统一启用输入62传输到sme36的统一启用输入64及/或允许sme34的输出72传输到“或”门76。如前线所论述,允许sme34的统一启用输入62传输到sme36的统一启用输入64可允许经由共享行路由线174到204对给定行38的sme36中的所有检测单元元件86的完全寻址。
类似地,耦合到输出74的交换元件79可允许sme36的输出74传输到sme34的统一启用输入62(举例来说)以允许级联搜索发生。另外或替代地,耦合到输出74的交换元件79可允许sme36的统一启用输入64传输到sme34的统一启用输入62及/或允许sme36的输出74传输到“或”门76。同样,允许sme36的统一启用输入64传输到sme34的统一启用输入62可允许经由共享行路由线174到204对给定行38的sme34中的所有检测单元元件86的完全寻址。另外,尽管未图解说明,但应注意输出72、74可通过经由一个交换元件79将输出72耦合到输入62且经由另一交换元件79将输出77耦合到输入64而循环回到产生输出72、74的sme34、36。
群组内电路206的3对1多路复用器78可经设定以将got60的输出66耦合到第一sme34、第二sme36或者可用以将sme34、36的两个输出72、74耦合在一起以形成got60的共同输出66的“或”门76。因此,3对1多路复用器78可包含第一输出选择输入208及第二输出选择输入210。因此,这些输出选择输入208、210可以可编程方式选择在输出66上传输何种输出。此编程可(举例来说)基于在fsm晶格30的初始编程阶段期间执行的经加载图像而实现。图13图解说明陈述输出选择输入208、210可如何以可编程方式选择got60的输出66的实例的真值表212。
如图13中所展示,当两个输出选择输入208、210均为低(即,0)时,got60的输出66将为高阻抗信号,因此有效地防止在输出66上传输任何值。当输出选择输入208为高(即,1)且输出选择输入210为低时,got60的输出66将为第一sme34的输出(即,输出72)。当输出选择输入208为低且输出选择输入210为高时,got60的输出66将为第二sme346的输出(即,输出74)。最终,当输出选择输入208、210为高时,got60的输出66将为“或”门76的输出(即,与输出74进行逻辑“或”运算的输出72)。以此方式,3对1多路复用器78不以可编程方式选择任何输出(输出72、输出74或与输出74进行逻辑“或”运算的输出72)作为got60的输出66。此外,应注意,3对1多路复用器可以不限于图12中所图解说明的特定实施例的其它可编程配置操作。
尽管可易于对本发明做出各种修改及替代形式,但已在图式中通过举例方式展示且在本文中详细描述了特定实施例。然而,应理解,本发明并不意欲限于所揭示的特定形式。而是,本发明意欲涵盖如由以下随附申请专利范围定义的本发明的精神及范畴内的所有修改形式、等效形式及替代方案。