用于元件利用的状态分组的制作方法

文档序号:6494656阅读:174来源:国知局
用于元件利用的状态分组的制作方法
【专利摘要】揭示一种系统及方法的实施例,所述系统及方法用于从源代码产生经配置以编程并行机的映像。一种此类并行机包括分组成对的多个状态机元件SME,使得一对中的SME具有共同输出。一种此类方法包括:将源代码转换成包含多个互连状态的自动机;及将所述自动机转换成包含实例的网表,所述实例对应于所述自动机中的状态,其中转换包括基于一对中的SME具有共同输出的事实而使对应于SME对的状态成对。可将所述网表转换成所述映像并加以发布。
【专利说明】用于元件利用的状态分组
[0001]优先权主张
[0002]本专利申请案主张2011年I月25日申请的题为“用于元件利用的状态分组(STATE GROUPING FOR ELEMENT UTILIZATION) ”的第 61/436,075 号美国临时专利申请案的优先权的利益,所述美国临时专利申请案的全文以引用方式特此并入本文中。
【技术领域】【背景技术】
[0003]用于并行机的编译程序将源代码转换成用于配置(例如,编程)所述并行机的机器代码(例如,映像)。所述机器代码可在所述并行机上实施有限状态机。将源代码转换成机器代码的过程的一个阶段包括形成网表。网表描述所述并行机的硬件元件的实例之间的连接性。所述网表可描述所述硬件元件之间的连接,使得所述硬件元件实施所述源代码的功能性。

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

【附图说明】
[0004]图1说明根据本发明的各种实施例的并行机的实例。
[0005]图2说明根据本发明的各种实施例的实施为有限状态机引擎的图1的并行机的实例。
[0006]图3说明根据本发明的各种实施例的图2的有限状态机引擎的块的实例。
[0007]图4说明根据本发明的各种实施例的图3的块的行的实例。
[0008]图5说明根据本发明的各种实施例的图4的行的成对群组的实例。
[0009]图6说明根据本发明的各种实施例的供编译程序用以将源代码转换成经配置以编程图1的并行机的映像的方法的实例。
[0010]图7A及图7B说明根据本发明的各种实施例的实例自动机。
[0011]图8A及图8B说明根据本发明的各种实施例的实例网表。
[0012]图9说明根据本发明的各种实施例的用于执行图6的编译程序的实例计算机。
【具体实施方式】
[0013]以下描述及图式充分地说明使所属领域的技术人员能够实践的特定实施例。其它实施例可并入有结构、逻辑、电、过程及其它改变。一些实施例的部分及特征可包括于其它实施例中或可替代其它实施例的部分及特征。权利要求书中所陈述的实施例涵盖那些权利要求的所有可用等效物。
[0014]本文件尤其描述基于并行机的物理设计产生网表的编译程序。在一实例中,所述并行机的物理设计可包括所述并行机的状态机元件之间的连接性限制。举例来说,所述并行机中的状态机元件可分组成共享一共同输出的对。因此,所述编译程序可基于一物理设计产生网表,在所述物理设计中,SME对共享一共同输出。
[0015]图1说明实例并行机100。并行机100可接收输入数据并基于所述输入数据提供一输出。并行机100可包括用于接收输入数据的数据输入端口 110及用于将输出提供到另一装置的输出端口 114。数据输入端口 110提供用于将输入到所述并行机100的数据的接□。
[0016]并行机100包括多个可编程元件,包括通用元件102及专用元件112。通用元件102可包括一个或一个以上输入104及一个或一个以上输出106。可将通用元件102编程为多个状态中的一者。通用元件102的状态确定所述通用元件102将基于给定输入提供哪一(些)输出。也就是说,通用元件102的状态确定可编程元件将基于给定输入如何起反应。输入到数据输入端口 110的数据可提供到所述多个通用元件102以使所述通用元件102对其采取行动。通用元件102的实例可包括下文详细论述的状态机元件(SME)及一可配置逻辑块。在一实例中,SME可设定为给定状态以当在数据输入端口 110处接收到给定输入时提供某一输出(例如,高或“I”信号)。当在数据输入端口 110处接收到不同于所述给定输入的输入时,所述SME可提供不同输出(例如,低或“O”信号)。在一实例中,一可配置逻辑块可经设定以基于在数据输入端口 110处接收到的输入来执行布尔逻辑函数(例如,“与(AND) ”、“或(OR) ”、“或非(NOR) ”等)。
[0017]并行机100还可包括编程接口 111以将程序(例如,映像)加载到并行机100上。所述映像可编程(例如,设定)通用元件102的状态。也就是说,所述映像可配置通用元件102以按某一方式对给定输入起反应。举例来说,一通用元件102可经设定,以当在数据输入端口 Iio处接收到字符“a”时输出高信号。在一些实例中,并行机100可使用时钟信号来控制通用元件102的操作的时序。在某些实例中,并行机100可包括用于与通用元件102互动及用于执行专用功能的专用元件112(例如,RAM、逻辑门、计数器、查找表等)。在一些实施例中,在数据输入端口 110处接收到的数据可包括随时间过去或一齐接收到的一组固定的数据或随时间过去而接收到的数据串流。数据可从耦合到并行机100的任何来源接收或通过耦合到并行机100的任何来源产生,所述任何来源例如数据库、传感器、网络等。
[0018]并行机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可作为一群组(例如,块802,如图8中所说明)而耦合到一可编程开关108。在一实例中,数据输入端口 110、数据输出端口 114及/或编程接口 111可实施为寄存器,以使得到寄存器的写入将数据提供到相应元件或从相应元件提供数据。
[0019]在一实例中,单一并行机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的输出数据。
[0020]在一实例中,用于加载到并行机100上的映像包含用于在并行机100内设定通用元件102的状态、编程可编程开关108及配置专用元件112的多个信息位。在一实例中,所述映像可加载到并行机100上以编程所述并行机100以基于某些输入而提供所要输出。输出端口 114可基于通用元件102对数据输入端口 110处的数据所起的反应来提供来自并行机100的输出。来自输出端口 114的输出可包括指示给定模式的匹配的单一位、包含指示与多个模式的匹配及不匹配的多个位的字,及对应于在给定时刻所有或某些通用元件102的状态的状态向量。
[0021]并行机100的实例用途包括模式识别(例如,语音识别、图像识别等)、信号处理、成像、计算机视觉、密码学及其它。在某些实例中,并行机100可包含有限状态机(FSM)引擎、现场可编程门阵列(FPGA)及其变体。此外,并行机100可为较大装置中的一组件,所述较大装置例如计算机、寻呼机、蜂窝式电话、个人管理器、便携型音频播放器、网络装置(例如,路由器、防火墙、交换机或其任何组合)、控制电路、照相机等。
[0022]图2至5说明实施为有限状态机(FSM)引擎200的另一并行机。在一实例中,FSM引擎200包含有限状态机的硬件实施方案。因此,FSM引擎200实施对应于FSM中的多个状态的多个可选择性地耦合的硬件元件(例如,可编程元件)。类似于FSM中的状态,硬件元件可分析输入串流且基于所述输入串流来激活下游硬件元件。
[0023]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。
[0024]图2说明实例FSM引擎200的全图。FSM引擎200包括多个块202,所述块可与可编程块间开关203选择性地耦合在一起。另外,块202可选择性地耦合到用于接收信号(例如,数据)及将数据提供到块202的输入块209 (例如,数据输入端口)。块202还可选择性地耦合到用于将来自块202的信号提供到外部装置(例如,另一 FSM引擎200)的输出块213 (例如,输出端口)。FSM引擎200还可包括用于将程序(例如,映像)加载到FSM引擎200上的编程接口 211。所述映像可编程(例如,设定)SME204、205的状态。也就是说,所述映像可配置SME204、205以按某一方式来对输入块209处的给定输入起反应。举例来说,SME204可经设定,以当在输入块209处接收到字符“a”时输出高信号。
[0025]在一实例中,输入块209、输出块213及/或编程接口 211可实施为寄存器,以使得到寄存器的写入将数据提供到相应元件或从相应元件提供数据。因此,来自存储于对应于编程接口 211的寄存器中的映像的位可加载于SME204、205上。尽管图2说明块202、输入块209、输出块213及块间开关203之间的某一数目的导体(例如,电线、迹线),但应理解,在其它实例中,可使用更少或更多的导体。
[0026]图3说明块202的实例。块202可包括多个行206,所述行可与可编程块内开关208选择性地耦合在一起。另外,行206可通过块间开关203而选择性地耦合到另一块202内的另一行206。在一实例中,包括缓冲器201以控制去往/来自块间开关203的信号的时序。行206包括多个SME204、205,所述多个SME204、205组织成本文中被称作成对群组(group of two ;G0T)210的元件对。在一实例中,块202包含十六(16)个行206。
[0027]图4说明行206的实例。G0T210可通过可编程行内开关212而选择性地耦合到其它G0T210及行206内的任何其它元件224。G0T210也可通过块内开关208而耦合到其它行206中的其它G0T210,或通过块间开关203而耦合到其它块202中的其它G0T210。在一实例中,G0T210具有第一输入214及第二输入216以及一输出218。第一输入214 I禹合到G0T210的第一 SME204,且第二输入214耦合到G0T210的第二 SME204。
[0028]在一实例中,行206包括第一多个行互连导体220及第二多个行互连导体222。在一实例中,G0T210的输入214、216可耦合到一个或一个以上行互连导体220、222,且输出218可耦合到一个行互连导体220、222。在一实例中,第一多个行互连导体220可耦合到行206内的每一 G0T210的每一 SME204。第二多个行互连导体222可耦合到行206内的每
一G0T210的一 SME204,但不可耦合到G0T210的另一 SME204。在一实例中,所述第二多个行互连导体222的前一半可耦合到一行206内的SME204的前一半(来自每一 G0T210的一SME204),且所述第二多个行互连导体222的后一半可耦合到一行206内的SME204的后一半(来自每一 G0T210的另一 SME204)。所述第二多个行互连导体222与SME204、205之间的有限连接性在本文中被称作“对等性”。
[0029]在一实例中,行206还可包括专用元件224,例如计数器、可编程布尔逻辑元件、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、可编程处理器(例如,微处理器)及其它元件。另外,在一实例中,所述专用元件224在不同行206中为不同的。举例来说,一块202中的行206中的四个可包括布尔逻辑作为专用元件224,且一块202中的其它八个行206可包括计数器作为专用元件224。
[0030]在一实例中,专用元件224包括计数器(本文中也被称作计数器224)。在一实例中,计数器224包含12位可编程递减计数器。所述12位可编程计数器224具有计数输入、复位输入,及零计数输出。所述计数输入在被断言时使计数器224的值递减一。所述复位输入在被断言时使计数器224加载来自相关联的寄存器的初始值。对于所述12位计数器224,可加载高达12位的数目作为初始值。当计数器224的值递减到零(O)时,断言所述零计数输出。计数器224还具有至少两种模式,脉冲及保持。当将计数器224设定为脉冲模式时,在计数器224递减到零时的第一频率循环期间断言零计数输出,且在接下来的频率循环处,即使断言了计数输入,仍不再断言零计数输出。此状态继续,直到通过复位输入被断言而复位计数器224为止。当将计数器224设定为保持模式时,在计数器224递减到零时的第一频率循环期间断言零计数输出,且在断言了计数输入时保持为经断言的,直到通过复位输入被断言而复位计数器224为止。
[0031]图5说明G0T210的实例。G0T210包括第一 SME204及第二SME205,其具有输入214、216且具有其耦合到OR门230及3比I多路复用器242的输出226、228。所述3比I多路复用器242可经设定以将G0T210的输出218耦合到第一 SME204、第二 SME205或OR门230。可使用OR门230将输出226、228耦合在一起以形成G0T210的共同输出218。在一实例中,如上文所论述,第一 SME204及第二 SME205展现对等性,其中第一 SME204的输入214可耦合到行互连导体222中的一些,且第二 SME205的输入216可耦合到其它行互连导体222。在一实例中,可通过设定开关240中的任一者或两者来使G0T210内的两个SME204、205级联及/或循环回到其自身。可通过将SME204、205的输出226、228耦合到另一 SME204、205的输入214、216而使SME204、205级联。可通过将输出226、228耦合到其自身的输入214、216而使SME204、205循环回到其自身。因此,第一 SME204的输出226可不耦合到第一 SME204的输入214及第二 SME205的输入216中的任一者,或可耦合到所述输入中的一者或两者。
[0032]在一实例中,一状态机元件204、205包含与检测线234并联耦合的多个存储器单元232,例如动态随机存取存储器(DRAM)中所常用的那些存储器单元。一种此类存储器单元232包含可设定为一数据状态的存储器单元,所述数据状态例如对应于高或低值(例如,I或O)的状态。存储器单元232的输出耦合到检测线234,且存储器单元232的输入基于数据串流线236上的数据而接收信号。在一实例中,解码数据串流线236上的输入以选择所述存储器单元232中的一者。选定的存储器单元232将其所存储的数据状态作为输出提供到检测线234上。举例来说,在数据输入端口 209处接收到的数据可提供到解码器(未图示),且所述解码器可选择所述数据串流线236中的一者。在一实例中,所述解码器可将ACSII字符转换成256位的I。
[0033]因此,当存储器单元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上输出低信号。
[0034]在一实例中,SME204、205包括256个存储器单元232,且每一存储器单元232耦合到一不同的数据串流线236。因此,SME204、205可经编程以当数据串流线236中的选定的一者或一者以上上面具有高信号时输出高信号。举例来说,SME204可使第一存储器单兀232(例如,位O)设定为高且使所有其它存储器单元232 (例如,位1-255)设定为低。当相应检测电路238处于作用中状态时,当对应于位O的数据串流线236上面具有高信号时,SME204在输出226上输出高信号。在其它实例中,SME204可经设定,以当通过将适当的存储器单元232设定成高值而使多个数据串流线236中的一者上面具有高信号时输出高信号。
[0035]在一实例中,可通过从相关联的寄存器读取位来将存储器单元232设定成高值或低值。因此,可通过将由编译程序产生的映像存储到寄存器中且将寄存器中的位加载到相关联的存储器单元232中来编程SME204。在一实例中,由所述编译程序产生的映像包括高及低(例如,I及O)位的二进制映像。所述映像可通过将SME204、205级联而编程FSM引擎200以作为FSM操作。举例来说,可通过将检测电路238设定成作用中状态而将第一 SME204设定成作用中状态。第一 SME204可经设定,以当对应于位O的数据串流线236上面具有高信号时输出高信号。第二 SME205最初可设定成非作用中状态,但可经设定以在作用中时当对应于位I的数据串流线236上面具有高信号时输出高信号。可通过设定第一 SME204的输出226以耦合到第二 SME205的输入216来将第一 SME204与第二 SME205级联。因此,当在对应于位O的数据串流线236上感测到高信号时,第一 SME204在输出226上输出高信号且将第二 SME205的检测电路238设定成作用中状态。当在对应于位I的数据串流线236上感测到高信号时,第二 SME205在输出228上输出高信号以激活另一 SME205或用于来自FSM引擎200的输出。
[0036]图6说明供编译程序用以将源代码转换成经配置以编程并行机的映像的方法600的实例。方法600包括:将所述源代码剖析成语法树(框602);将所述语法树转换成自动机(框604);最佳化所述自动机(框606);将所述自动机转换成网表(框608);将所述网表放置于硬件上(框610);对所述网表进行布线(框612);及发布所得映像(框614)。
[0037]在一实例中,所述编译程序包括应用编程接口(API),所述API允许软件开发者产生用于在FSM引擎600上实施FSM的映像。所述编译程序提供用以将所述源代码中的一组输入的正规表达式转换成经配置以编程FSM引擎600的映像的方法。所述编译程序可通过用于具有冯诺依曼架构的计算机的指令来实施。这些指令可使所述计算机上的处理器实施所述编译程序的功能。举例来说,所述指令在通过所述处理器执行时可使所述处理器对可由所述处理器存取的源代码执行如框602、604、606、608、610、612及614中所描述的动作。具有冯诺依曼架构的实例计算机展示于图9中且在下文描述。
[0038]在一实例中,源代码描述用于识别一群符号内的符号的模式的搜索字符串。为了描述所述搜索字符串,所述源代码可包括多个正规表达式(regex)。正规表达式可为用于描述符号搜索模式的字符串。正规表达式广泛用在各种计算机领域中,例如编程语言、文字编辑器、网络安全及其它领域。在一实例中,由编译程序支持的正规表达式包括用于无结构数据的搜索的搜索准则。无结构数据可包括以下数据,其为自由形式的且无索引施加于数据内的字。字可包括数据内的任何字节组合,可打印及不可打印的。在一实例中,编译程序可支持用于实施正规表达式的多种不同的源代码语言,包括Perl(例如,Perl兼容正规表达式(PCRE))、PHP、Java 及.NET 语言。
[0039]返回参看图6,在框602处,编译程序可剖析源代码以形成有关系连接的运算符的布置,其中不同类型的运算符对应于通过源代码实施的不同功能(例如,通过源代码中的正规表达式实施的不同功能)。剖析源代码可产生所述源代码的一般表示。在一实例中,所述一般表示包含所述源代码中的呈被称为语法树的树形图形式的正规表达式的经编码表示。本文中所描述的实例将所述布置称为语法树(也被称为“抽象语法树”)。然而,在其它实例中,可使用具体语法树或其它布置。
[0040]由于如上文所提及,编译程序可支持多种语言的源代码,因此,不管是何种语言,剖析将所述源代码转换成非语言特定表示,例如语法树。因此,通过编译程序进行的其它处理(框604、606、608、610)可从共同输入结构来起作用,而不管源代码的语言。
[0041]如上所述,所述语法树包括有关系连接的多个运算符。语法树可包括多种不同类型的运算符。也就是说,不同运算符可对应于通过源代码中的正规表达式实施的不同功能。
[0042]在框604处,将所述语法树转换成自动机。自动机(也被称作有限状态自动机、有限状态机(FSM)或简称为状态机)为状态、状态之间的转变及动作的表示,且可分为确定性或非确定性的。确定性自动机在给定时间具有单一执行路径,而非确定性自动机具有多个同时的执行路径。所述自动机包含多个状态。为了将语法树转换成自动机,将语法树中的运算符及运算符之间的关系转换成状态及状态之间的转变。在一实例中,可部分基于FSM引擎200的硬件来转换所述自动机。
[0043]在一实例中,用于自动机的输入符号包括字母、数字0-9及其它可打印字符的符号。在一实例中,所述输入符号通过字节值O至255(包括在内)来表示。在一实例中,自动机可表示为有向图,其中所述图的节点对应于状态集合。在一实例中,在输入符号α时从状态P到状态q的转变(即,S (ρ,α))通过从节点P到节点q的有向连接展示。在一实例中,被自动机接受(例如,匹配)的语言为在按顺序地输入到所述自动机中时将达到最终状态的所有可能字符字符串的集合。被所述自动机接受的语言中的每一字符串沿从开始状态到一个或一个以上最终状态的路径而行。
[0044]在一实例中,在所述自动机中可使用输入符号范围外的特殊转变符号。这些特殊转变符号可用以(例如)使得能够使用专用元件224。此外,特殊转变符号可用以提供在不同于输入符号的其它者上发生的转变。举例来说,一特殊转变符号可指示当启用第二状态及第三状态时将启用(例如,转变到)第一状态。因此,当激活第二状态及第三状态时激活第一状态,且到所述第一状态的转变并非直接取决于输入符号。显著地,指示在启用第二状态及第三状态时将启用第一状态的特殊转变符号可用以将(例如)通过布尔逻辑执行的布尔AND函数表示为专用元件224。在一实例中,可使用特殊转变符号来指示计数器状态已达到零,且因此转变成下游状态。
[0045]在一实例中,所述自动机包含通用状态以及专用状态。所述通用状态及专用状态对应于通过目标装置支持的通用元件及专用元件,编译程序为所述目标装置产生机器代码。不同类型的目标装置可支持不同类型的通用元件以及一种或一种以上不同类型的专用元件。通用元件通常可用以实施广泛范围的功能,而专用元件通常可用以实施更窄范围的功能。然而,在一实例中,专用元件可在其窄范围的功能内实现(例如)较大效率。因此,专用元件可用以(例如)减少在目标装置中实施某些功能所需的机器循环或机器资源。在一些实例中,所述目标装置仅支持专用元件,其中支持多种不同类型的专用元件。
[0046]在编译程序产生用于FSM引擎200的机器代码的实例中,通用状态可对应于SME204、205,且通用状态因此在本文中被称作“SME状态”。此外,当编译程序产生用于FSM引擎200的机器代码时,专用状态的实例可对应于计数器224且因此在本文中被称作“计数器状态”。专用状态的另一实例可对应于一逻辑元件(例如,可编程逻辑、布尔逻辑)且因此在本文中被称作“逻辑状态”。在一实例中,自动机中的SME状态1:1映射到FSM引擎200中的SME(例如,SME204、205),不映射到SME的自动机的开始状态除外。专用元件224可或可不1:1映射到专用状态。
[0047]在一实例中,可使用例如Glushkov的方法的标准技术中的一者来建构自动机。在一实例中,所述自动机可为无ε的均齐自动机(homogeneous automaton)。均齐自动机为对一般自动机定义的限制。所述限制要求进入一状态的所有转变必须发生在同一(些)输入符号上。均齐自动机满足以下条件:对于任何两个状态,1及%,如果
r e δ (q) Π δ (q2),则表示 S1 = {a | a e Σ , r e δ (q1; a)} > S2 = {a | a e Σ , r e δ (q2,
a)}。S1为允许qi转变成r的符号的集合;且S2为允许q2转变成r的符号的集合。在此,S1=S2,即,如果状态Q1及状态q2均转变成状态r,则均齐限制为转变必须发生在同一(些)符号上。
[0048]图7A及7B说明从语法树产生的实例自动机。图7A说明均齐自动机700,且图7B说明非均齐自动机702。
[0049]均齐自动机700在开始状态704处开始,开始状态704在输入符号“a”时转变成状态706。在输入符号“b”时状态706转变成状态708,且在输入符号“b”时,状态708转变成状态710。在输入符号“c”时,状态710转变成状态712。状态712在输入符号“b”时转变成状态710,且在输入符号“d”时转变成状态714。状态714为最终状态且通过双圆来识别为最终状态。在一实例中,最终状态可为重要的,因为最终状态的激活指示对应于所述自动机的正规表达式的匹配。自动机700为均齐自动机,因为给定状态的所有内转变(例如,到状态的转变)发生在同一(些)符号上。显著地,状态710具有两个内转变(从状态708及状态712),且所述两个内转变均发生在同一符号“b”上。
[0050]非均齐自动机702包括与均齐自动机700相同的状态704、706、708、710、712及714,然而,状态712在输入符号“e”时转变成状态710。因此,自动机702为非均齐的,因为状态710在两个不同符号时具有内转变;符号“b”时从状态708且符号“e”时从状态712。
[0051]在框606处,在建构了自动机之后,最佳化所述自动机以尤其减少其复杂性及大小。可通过组合冗余状态来最佳化所述自动机。
[0052]在框608处,将所述自动机转换成网表。将所述自动机转换成网表将所述自动机的状态映射到FSM引擎200的硬件元件(例如,SME204、205、G0T210、专用元件224)的实例,且确定所述实例之间的连接。在一实例中,所述网表包含多个实例,每一实例对应于(例如,表示)FSM引擎200的一硬件元件。每一实例可具有用于连接到另一实例的一个或一个以上连接点(本文中也被称作“端口”)。所述网表还包含所述实例的端口之间的多个连接,所述多个连接对应于(例如,表示)用以耦合对应于所述实例的硬件元件的导体。在一实例中,所述网表包含对应于不同类型的硬件元件的不同类型的实例。举例来说,所述网表可包括对应于通用硬件元件的通用实例及对应于专用硬件元件的专用实例。作为一实例,通用状态可转换成通用实例,且专用状态可转换成专用实例。在一实例中,所述通用实例可包括用于一 SME204、205的一 SME实例及用于包含一群SME的硬件元件的一 SME群组实例。在一实例中,所述SME群组实例包括对应于G0T210的GOT实例;然而,在其它实例中,所述SME群组实例可对应于包含一群三个或三个以上SME的硬件元件。专用实例可包括用于计数器224的计数器实例及用于逻辑元件224的逻辑实例。由于G0T210包括两个SME204、205,因此GOT实例含有两个SME实例。
[0053]为产生网表,将自动机中的状态转换成网表中的实例,除了开始状态不具有对应实例之外。将SME状态转换成GOT实例,且将计数器状态转换成计数器实例。另外,针对从对应于第一实例的状态到对应于第二实例的状态的转变产生从第一实例到第二实例的对应连接。由于FSM引擎200中的SME204、205分组到被称作G0T210的对中,因此编译程序可将SME状态分组到GOT实例中的对中。归因于G0T210的物理设计,并非所有SME实例可一起成对以形成G0T210。因此,编译程序确定可将哪些SME状态一起映射在G0T210中,且接着基于所述确定将SME状态成对到GOT实例中。
[0054]如图5中所示,G0T210具有对SME204、205的输出限制。确切地说,G0T210具有由两个SME204、205共享的单一输出218。因此,G0T210中的每一 SME204、205不可独立地驱动输出218。此输出限制限制了在GOT实例中哪些SME状态可一起成对。显著地,驱动(例如,转变到、激活)外部SME状态(例如,对应于GOT实例外的SME的SME状态)的不同集合的两个SME状态在一 GOT实例中不可一起成对。然而,此限制不限制所述两个SME状态是否驱动彼此或自循环,因为G0T210可在内部通过开关240提供此功能性。尽管将FSM引擎200描述为具有对应于SME204、205的某一物理设计,但在其它实例中,SME204、205可具有其它物理设计。举例来说,SME204、205可一起分组到SME204、205的三个或三个以上集合中。另外,在一些实例中,可存在对到SME204、205的输入214、216的限制,对来自SME204、205的输出226、228可具有或不具有限制。
[0055]然而,在任一种情况下,编译程序基于FSM引擎200的物理设计来确定哪些SME状态可一起分组。因此,对于GOT实例,编译程序基于G0T210中的SME204、205的输出限制来确定哪些SME状态可一起成对。在一实例中,存在五种情形,其中两个SME状态可基于G0T210的物理设计而一起成对以形成G0T210。
[0056]在第一 SME状态及第二 SME状态可在G0T210中一起成对时的第一种情形出现在第一 SME状态或第二 SME状态均非最终状态时,及出现在第一 SME状态及第二 SME状态中的一者不驱动不同于第一 SME状态或第二 SME状态的任何状态时。作为一实例,当第一状态转变成第二状态时,认为所述第一状态驱动所述第二状态。当此第一种情形出现时,至多第一SME状态及第二 SME状态中的一者驱动一(些)外部状态。因此,第一 SME状态及第二 SME状态可一起成对,而不受G0T210的输出限制影响。然而,归因于G0T210在内部将SME204、205耦合到彼此的能力,允许第一 SME状态及第二 SME状态驱动彼此及自循环以驱动自身。在自动机项中,当Q1或均非最终状态,且δ (q^-1q^qal为空时,或当δ (q^-jq^qj为空时,第一 SME状态(对应于状态qi)及第二 SME状态(对应于状态q2)可一起成对。
[0057]在第一 SME状态及第二 SME状态可在G0T210中一起成对时的第二种情形出现在第一或第二 SME状态均非自动机中的最终状态时,及出现在第一 SME状态及第二 SME状态驱动相同的外部状态时。如本文中所使用,外部状态对应于GOT实例外部的状态,例如,不管GOT实例中的第一 SME状态及第二 SME状态是否驱动彼此或自循环。再次,G0T210的输出限制不影响第一 SME状态及第二 SME状态,因为第一 SME状态及第二 SME状态驱动相同的外部状态。而且,归因于G0T210在内部将SME204、205耦合到彼此的能力,对驱动相同状态的限制不包括第一状态及第二状态是否驱动彼此或自循环。使用自动机项,当Q1或q2均非最终状态,且S (qi)-{qi,q2} = δ (q2)-{qi,q2}时,第一 SME状态(对应于状态qj及第
二SME状态(对应于状态q2)可一起成对。
[0058]第一 SME状态及第二 SME状态可在G0T210中一起成对的第三及第四种情形出现在第一 SME状态及第二 SME状态中的一者为最终状态且第一 SME状态及第二 SME状态中的另一者并不驱动任一外部状态时。也就是说,当Q1为最终状态且δ (q2)-{qi, q2}为空时,或当q2对应于最终状态且S (Q1)-1q1, q2}为空时,第一 SME状态(对应于状态qj及第二SME状态(对应于状态q2)可一起成对。由于最终状态输出与正规表达式匹配的指示,因此对应于最终状态的SME状态应能够独立使用G0T210的输出218以便指示所述匹配。因此,不允许G0T210中的另一 SME状态使用输出218。
[0059]在第一 SME状态及第二 SME状态可在G0T210中一起成对时的第五种情形出现在第一 SME状态及第二 SME状态均对应于一自动机中的最终状态且第一 SME状态及第二 SME状态均驱动相同的外部状态时。使用自动机项,当Q1及92均为最终状态,且δ (q^-tq^qj=δ (q2)-{qi,q2}时,第一状态(对应于状态qj及第二 SME状态(对应于状态q2)可一起成对。
[0060]一旦编译程序确定一个或一个以上SME状态是否可一起成对,编译程序便将所述SME状态成对为GOT实例。在一实例中,编译程序按SME状态被确定为能够成对以形成GOT实例的次序来将SME状态成对为GOT实例。也就是说,一旦两个特定SME状态被确定为能够一起成对,此两个SME状态便可成对为一 GOT实例。一旦两个SME状态已成对以形成GOT实例,这些成对的SME状态不可用于与其它SME状态成对。此过程可继续,直到不再有任何SME状态留待成对为止。
[0061]在一实例中,编译程序使用图论来确定哪些SME—起成对为GOT实例。由于仅某些SME可一起成对,因此一些SME成对可导致其它SME必须在其自身的GOT实例中实施,以致GOT实例中的其它SME位置 未用且因此被浪费。可使用图论来通过减少网表的GOT实例中的未用SME实例的数目来最佳化G0T210中的SME利用(例如,减少未用SME的数目)。为了使用图论,编译程序首先根据上文所论述的FSM引擎200的物理设计来确定SME状态之间的所有可能成对。编译程序接着产生一图,其中所述图的顶点对应于SME状态,且所述图的边对应于SME状态的可能成对。也就是说,如果确定两个SME状态能够在GOT实例中一起成对,则用一条边连接两个对应的顶点。因此,所述图含有SME状态的所有可能成对。
[0062]编译程序可接着找出所述图的匹配顶点以识别哪些SME状态在G0T210中一起成对。也就是说,编译程序识别边(且因此识别顶点对),使得所述图的匹配顶点之间的两条边不会共享一个共同顶点。在一实例中,编译程序可找出所述图的最大匹配。在另一实例中,编译程序可找出所述图的最大匹配。最大匹配为含有最大的可能数目的边的匹配。可存在许多最大匹配。可以多项式时间来解决找出一般图的最大匹配的问题。
[0063]一旦已识别了所有匹配顶点(例如,作为最大匹配),则将对应于匹配顶点的每一对SME状态映射到一 GOT实例。将对应于未匹配顶点的SME状态映射到其自身的GOT实例。也就是说,将对应于未匹配顶点的SME状态映射到GOT实例中的SME位置中的一者中,且GOT实例中的其它SME位置未用。因此,假定网表N及其匹配顶点M的对应集合,所使用的N的GOT实例的数目等于I Q1-1-1MI,其中Q为自动机的状态集合,且“-1 ”是因为在此实例中自动机的开始状态并不对应于SME状态。[0064]在一实例中,网表N是使用最少数目的GOT实例由G的最大匹配M来建构。此可通过以下事例证明:如果存在使用更少数目的GOT实例的另一网表N',则将所述对应匹配表示为M'。由于N'的got实例的数目等于Iq1-1-1m' I,因此我们得到|m| < |m' I。此与M为最大匹配的事实冲突。因此,网表N使用最少数目的GOT实例。
[0065]一旦SME状态成对为GOT实例,便根据自动机中的状态之间的转变来连接GOT实例、计数器实例及逻辑实例。由于每一 G0T210具有单一输出,因此网表中的每一 GOT实例具有单一输出端口以供连接到其它实例。因此,如果第一 GOT实例中的任一 SME状态驱动第二 GOT实例中的一 SME状态,则第一 GOT实例的输出端口耦合到第二 GOT实例的输入。
[0066]图8A及8B说明从图7A的均齐自动机700产生的实例网表800、802。SME实例806、808、810、812及814对应于自动机700中的状态706、708、710、712及714。如上文所论述,所述自动机的开始状态704不对应于一实例。
[0067]网表800为非最佳网表的一实例。网表800使用四个GOT实例816,同时留下三个SME实例818未用。然而,网表802为使用图论识别最大匹配而产生的最佳网表的实例。网表802使用三个GOT实例816且具有单一未用SME实例818。在网表802中,可通过GOT实例内部的连接(例如,经由开关240)将实例810连接到实例812。
[0068]在框610处,一旦已产生网表,便放置所述网表以针对所述网表的每一实例选择所述目标装置的特定硬件元件(例如,SME204、205、其它元件224)。根据本发明的一实施例,放置基于针对硬件元件的一般输入及输出约束来选择硬件元件。
[0069]在框612处,对经全局放置的网表进行布线以确定可编程开关(例如,块间开关203、块内开关208及行内开关212)的设定以便将选定硬件元件耦合在一起以实现网表所描述的连接。在一实例中,所述可编程开关的设定通过确定FSM引擎200的将用以连接选定的硬件元件的特定导体及所述可编程开关的设定来确定。布线可调整在放置期间针对网表实例中的一些选择的特定硬件元件,例如以便耦合硬件元件,给定FSM引擎200上的导体及/或开关的物理设计。
[0070]一旦对网表进行放置及布线,便可将所放置及经布线的网表转换成用于编程FSM引擎200的多个位。所述多个位在本文中被称作映像。
[0071]在框614处,通过编译程序发布映像。所述映像包含用于编程FSM引擎200的特定硬件元件及/或可编程开关的多个位。在所述映像包含多个位(例如,O及I)的实施例中,所述映像可被称作二进制映像。所述位可加载到FSM引擎200上以编程SME204、205、专用元件224及可编程开关的状态,以使得经编程的FSM引擎200实施具有通过源代码描述的功能性的FSM。放置(框610)及布线(框612)可将在FSM引擎200中的特定位置处的特定硬件元件映像到自动机中的特定状态。因此,所述映像中的位可编程所述特定硬件元件及/或可编程开关以实施所要功能。在一实例中,可通过将机器代码存储到计算机可读媒体来发布所述映像。在另一实例中,可通过在显示装置上显示所述映像来发布映像。在又一实例中,可通过将所述映像发送到另一装置(例如,用于将所述映像加载到FSM引擎200上的编程装置)来发布映像。在再一实例中,可通过将所述映像加载到并行机(例如,FSM引擎200)上来发布映像。
[0072]在一实例中,可通过将来自映像的位值直接加载到SME204、205及其它硬件元件224或通过将映像加载到一个或一个以上寄存器中且接着将来自寄存器的位值写入到SME204、205及其它硬件元件224来将映像加载到FSM引擎200上。在一实例中,可编程开关(例如,块间开关203、块内开关208及行内开关212)的状态。在一实例中,FSM引擎200的硬件元件(例如,SME204、205、其它元件224、可编程开关203、208、212)经存储器映射,以使得编程装置及/或计算机可通过将映像写入到一个或一个以上存储器地址而将映像加载到FSM引擎200上。
[0073]本文中所描述的方法实例可至少部分为机器或计算机实施的。一些实例可包括编码有指令的计算机可读媒体或机器可读媒体,所述指令可操作以配置电子装置以执行如上述实例中所描述的方法。这些方法的实施方案可包括代码,例如微码、汇编语言代码、高级语言代码或其类似者。此类代码可包括用于执行各种方法的计算机可读指令。代码可形成计算机程序产品的部分。另外,代码在执行期间或在其它时间时可有形地存储于一个或一个以上易失性或非易失性计算机可读媒体上。这些计算机可读媒体可包括(但不限于)硬盘、可装卸磁盘、可装卸光盘(例如,压缩光盘及数字视频光盘)、磁带、存储器卡或存储器棒、随机存取存储器(RAM)、只读存储器(ROM)及其类似者。
[0074]图9大体上说明具有冯诺依曼架构的计算机900的实例。在阅读及理解了本发明的内容之后,一般所属领域的技术人员将理解,在基于计算机的系统中可从计算机可读媒体加载软件程序以使其执行以软件程序定义的功能的方式。一般所属领域的技术人员将进一步理解,可使用各种编程语言来产生经设计以实施并执行本文所揭示的方法的一个或一个以上软件程序。可使用面向对象的语言(例如,Java、C++或一种或一种以上其它语言)以面向对象的格式来结构化所述程序。或者,可使用程序语言(例如,汇编语言、C等)以面向程序的格式来结构化所述程序。软件组件可使用一般所属领域的技术人员所众所周知的许多方案中的任一者来通信,例如应用编程接口或过程间通信技术,包括远程过程调用或其它。各个实施例的教示不限于任何特定编程语言或环境。
[0075]因此,可实现其它实施例。举例来说,一制造对象(例如,计算机、存储器系统、磁盘或光盘、某其它存储装置,或任何类型的电子装置或系统)可包括一个或一个以上处理器902,所述一个或一个以上处理器902耦合到上面存储有指令924 (例如,计算机程序指令)的计算机可读媒体922,例如存储器(例如,可装卸存储媒体,以及包括电、光或电磁导体的任何存储器),所述指令在通过所述一个或一个以上处理器902执行时导致执行相对于上述方法所描述的动作中的任一者。
[0076]计算机900可采取具有处理器902的计算机系统的形式,所述处理器908直接及/或使用总线908来耦合到许多元件。这些元件可包括主存储器904、静态或非易失性存储器906及大容量存储装置916。耦合到处理器902的其它元件可包括输出装置910 (例如,视频显示器)、输入装置912 (例如,键盘)及光标控制装置914 (例如,鼠标)。用以将处理器902及其它元件耦合到网络926的网络接口装置920还可耦合到总线908。指令924可利用许多众所周知的传送协议(例如,HTTP)中的任一者经由网络接口装置920跨越网络926来进一步传输或接收。耦合到总线908的这些元件中的任一者可不存在,单独地存在,或以复数形式存在,此取决于待实现的特定实施例。
[0077]在一实例中,处理器902、存储器904、906或存储装置916中的一者或一者以上可各自包括指令924,所述指令924在执行时可使计算机900执行本文所描述的方法中的任何一者或一者以上。在替代实施例中,计算机900作为单独装置操作或可连接(例如,网络连接)到其它装置。在网络环境中,计算机900可以服务器-客户端网络环境中的服务器或客户端装置的能力来操作,或操作为对等(或分布式)网络环境中的对等装置。计算机900可包括个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝式电话、web器具、网络路由器、交换机或桥接器,或能够执行一组指令(顺序的或其它)的任何装置,所述组指令指定将由所述装置采取的行动。另外,虽然仅说明了单一计算机900,但术语“计算机”还应被视为包括个别地或共同地执行一组(或多组)指令以执行本文中所论述的方法中的任何一者或一者以上的装置的任何集合。
[0078]计算机900还可包括用于使用一个或一个以上通信协议(例如,通用串行总线(USB)、IEEE1394等)与外围装置通信的输出控制器928。输出控制器928可(例如)将映像提供到通信地耦合到计算机900的编程装置930。编程装置930可经配置以编程并行机(例如,并行机100、FSM引擎200)。在其它实例中,编程装置930可与计算机900集成且耦合到总线908或可经由网络接口装置920或另一装置与计算机900通信。
[0079]虽然计算机可读媒体924展示为单一媒体,但术语“计算机可读媒体”应被视为包括存储所述一组或一组以上指令924的单一媒体或多个媒体(例如,集中式或分布式数据库,或相关联的高速缓存及服务器,及或各种存储媒体,例如处理器902寄存器、存储器904,906及存储装置916)。术语“计算机可读媒体”还应被视为包括以下任何媒体,其能够存储、编码或载运供计算机执行的一组指令且使所述计算机执行本发明的方法中的任何一者或一者以上,或能够存储、编码或载运供此组指令利用或与此组指令相关联的数据结构。术语“计算机可读媒体”因此应被视为包括(但不限于)有形媒体,例如固态存储器、光媒体及磁性媒体。
[0080]提供摘要以遵照需要摘要的37C.F.R.章节1.72 (b),此将允许读者确定技术揭示内容的性质及要旨。在理解到摘要将不用以限制或解释权利要求书的范畴或涵义的情况下提交摘要。以下权利要求书借此并入详细描述中,其中每一权利要求依赖于其自身而作为一单独实施例。
[0081]实例实施例
[0082]实例I包括一种计算机实施方法,其用于从源代码产生经配置以编程并行机的映像。所述方法包括:将源代码转换成包含多个互连状态的自动机;将所述自动机转换成网表,所述网表包含对应于所述自动机的状态的实例,其中所述实例对应于所述并行机的硬件元件,其中将所述自动机转换成网表包括基于所述并行机的物理设计来对状态一起分组;及将所述网表转换成所述映像。
[0083]实例2包括一种计算机可读媒体,其包括指令,所述指令在由所述计算机执行时使所述计算机执行操作。所述操作包括:将源代码转换成包含多个互连状态的自动机;将所述自动机转换成网表,所述网表包含对应于所述自动机的状态的实例,其中所述实例对应于所述并行机的硬件元件,其中将所述自动机转换成网表包括基于所述并行机的物理设计来对状态一起分组;及将所述网表转换成所述映像。
[0084]实例3包括一种计算机,其包括:存储器,其上面存储有软件;及处理器,其通信地耦合到所述存储器。其中所述软件在由所述处理器执行时使所述处理器:将源代码转换成包含多个互连状态的自动机;将所述自动机转换成网表,所述网表包含对应于所述自动机的状态的实例,其中所述实例对应于所述并行机的硬件元件,其中所述实例包括多个第一实例及含有两个或两个以上第一实例的一群组实例,其中将所述自动机转换成网表包括基于许多未用的第一实例来将状态一起分组在一群组实例中;及将所述网表转换成所述映像。
[0085]实例4包括一种系统,其包括计算机,所述计算机经配置以:将源代码转换成包含多个互连状态的自动机;将所述自动机转换成网表,所述网表包含对应于所述自动机的状态的实例,其中所述实例对应于所述并行机的硬件元件,其中所述实例包括多个第一实例及含有两个或两个以上第一实例的一群组实例,其中将所述自动机转换成网表包括基于许多未用的第一实例来将状态一起分组在一群组实例中;及将所述网表转换成所述映像。所述系统还包括经配置以将所述映像加载到并行机上的装置。
[0086]在实例5中,实例I至4中任一者的主题可任选地包括,其中所述实例包括对应于状态机元件(SME)硬件元件的SME实例及对应于包含一群SME的硬件元件的SME群组实例,且其中分组包括将状态分组到SME群组实例中。
[0087]在实例6中,实例I至5中任一者的主题可任选地包括,其中所述物理设计包括包含一群SME的所述硬件元件的物理设计。
[0088]在实例7中,实例I至6中任一者的主题可任选地包括,其中所述物理设计包括对包含一群SME的所述硬件元件中的所述SME的输入或输出限制中的一者。
[0089]在实例8中,实例I至7中任一者的主题可任选地包括,其中所述物理设计包括包含一群SME的所述硬件元件中的所述SME共享输出的限制。
[0090]在实例9中,实例I至8中任一者的主题可任选地包括,其中SME群组实例包括含有两个SME实例的成对群组(GOT)实例,且其中所述物理设计包括每一 GOT中的所述SME耦合到共同输出。
[0091]在实例10中,实例I至9中任一者的主题可任选地包括,其中将所述自动机转换成网表包含:确定所述状态中的哪些可一起分组在GOT实例中;及基于所述确定来使所述状态成对。
[0092]在实例11中,实例I至10中任一者的主题可任选地包括,其中当第一状态或第二状态均非所述自动机的最终状态,且所述第一状态及所述第二状态中的一者不驱动不同于所述第一状态或所述第二状态的任何状态时,所述第一状态及所述第二状态可在GOT实例中一起成对。
[0093]在实例12中,实例I至11中任一者的主题可任选地包括,其中当第一状态或第二状态均非所述自动机的最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态时,所述第一状态及所述第二状态可在GOT实例中一起成对。
[0094]在实例13中,实例I至12中任一者的主题可任选地包括,其中当第一状态及第二状态中的一者为所述自动机的最终状态,且所述第一状态及所述第二状态中的另一者不驱动任何外部状态时,所述第一状态及所述第二状态可在GOT实例中一起成对。
[0095]在实例14中,实例I至13中任一者的主题可任选地包括,其中当第一状态及第二状态均为所述自动机的最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态时,所述第一状态及所述第二状态可在GOT实例中一起成对。
[0096]在实例15中,实例I至14中任一者的主题可任选地包括,其中确定所述状态中的哪些可一起分组在GOT实例中包含使用图论来确定所述状态中的哪些可一起分组在GOT实例中。
[0097]在实例16中,实例I至15中任一者的主题可任选地包括,其中使用图论来确定所述状态中的哪些可一起分组在GOT实例中包含使用图论识别最大匹配来确定所述状态中的哪些可一起分组在GOT实例中。
[0098]在实例17中,实例I至16中任一者的主题可任选地包括发布所述映像。
[0099]在实例18中,实例I至17中任一者的主题可任选地包括,其中所述实例包含通用实例及专用实例,其中所述通用实例对应于所述自动机的通用状态,且所述专用实例对应于所述自动机的专用状态。
[0100]在实例19中,实例I至18中任一者的主题可任选地包括,其中对应于所述通用实例的所述硬件元件包括状态机元件(SME)及成对群组(G0T),且其中对应于所述专用实例的所述硬件元件包括计数器及逻辑元件。
[0101]在实例20中,实例I至19中任一者的主题可任选地包括,其中所述自动机为均齐自动机。
[0102]在实例21中,实例I至20中任一者的主题可任选地包括,其中将所述自动机转换成网表包含将所述自动机的所述状态中的每一者映像到对应于所述硬件元件的实例及确定所述实例之间的连接性。
[0103]在实例22中,实例I至21中任一者的主题可任选地包括,其中所述网表进一步包含表示所述硬件元件之间的导体的所述实例之间的多个连接。
[0104]在实例23中,实例I至22中任一者的主题可任选地包括,其中将所述自动机转换成网表包含将所述自动机转换成包含实例的网表,所述实例对应于所述自动机的除了开始状态之外的状态。
[0105]在实例24中,实例I至23中任一者的主题可任选地包括确定对应于所述网表的实例的所述硬件元件在所述并行机中的位置。
[0106]在实例25中,实例I至24中任一者的主题可任选地包括,其中对状态一起分组包括基于包含一群通用元件的硬件元件的物理设计来对状态一起分组。
[0107]在实例26中,实例I至25中任一者的主题可任选地包括确定将使用所述并行机的哪些导体来连接所述硬件元件;及确定所述并行机的可编程开关的设定,其中所述可编程开关经配置以选择性地将所述硬件元件耦合在一起。
[0108]在实例27中,实例I至26中任一者的主题可任选地包括,其中所述群组实例包括成对群组(GOT)实例,且其中分组状态包括根据成对的状态驱动哪些状态来使状态成对。
[0109]在实例28中,实例I至27中任一者的主题可任选地包括,其中基于许多未用的第一实例将状态分组在群组实例中包括:基于以下条件确定第一状态与第二状态是否可成对:所述第一状态或所述第二状态均非所述自动机中的最终状态,且所述第一状态及所述第二状态中的一者不驱动不同于所述第一状态或所述第二状态的任何状态;所述第一状态或所述第二状态均非所述自动机中的最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态;所述第一状态或所述第二状态中的任一者为最终状态,且并非最终状态的所述第一状态或所述第二状态不驱动除了所述第一状态或所述第二状态的外的任何状态;及所述第一状态及所述第二状态均为最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态。[0110]在实例29中,实例I至28中任一者的主题可任选地包括,其中将所述自动机转换成网表包括:将所述状态模型化为一图,其中所述图的顶点对应于状态,且所述图的边对应于所述状态的可能成对;确定所述图的匹配顶点;及使对应于所述匹配顶点的状态成对。
[0111]在实例30中,实例I至29中任一者的主题可任选地包括,其中将所述自动机转换成网表包括:确定所述图的最大匹配。
[0112]在实例31中,实例I至30中任一者的主题可任选地包括,其中将所述自动机转换成网表包括:使对应于匹配顶点的每一组状态成对;及将对应于未匹配顶点的每一状态映像到GOT实例,其中所述GOT实例中的SME实例将为未用的。
[0113]在实例32中,实例I至31中任一者的主题可任选地包括,其中对状态一起分组包括:根据成对的状态驱动哪些状态来使状态成对。
[0114]在实例33中,实例I至32中任一者的主题可任选地包括,其中基于许多未用的第一实例将状态一起分组在群组实例中包括:基于以下条件确定第一状态与第二状态是否可成对:所述第一状态或所述第二状态均非所述自动机中的最终状态,且所述第一状态及所述第二状态中的一者不驱动不同于所述第一状态或所述第二状态的任何状态;所述第一状态或所述第二状态均非所述自动机中的最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态;所述第一状态或所述第二状态中的任一者为最终状态,且并非最终状态的所述第一状态或所述第二状态不驱动除了所述第一状态或所述第二状态之外的任何状态;及所述第一状态及所述第二状态均为最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态。
[0115]在实例34中,实例I至33中任一者的主题可任选地包括,其中基于许多未用的第一实例将状态一起分组在群组实例中包括:将所述状态模型化为一图,其中所述图的顶点对应于状态,且所述图的边对应于所述状态的可能成对;确定所述图的匹配顶点;及使对应于所述匹配顶点的状态成对。
[0116]在实例35中,实例I至34中任一者的主题可任选地包括,其中基于许多未用的第一实例将状态一起分组在群组实例中:确定所述图的最大匹配。
[0117]在实例36中,实例I至35中任一者的主题可任选地包括,其中基于许多未用的第一实例将状态一起分组在群组实例中包括:使对应于匹配顶点的每一组状态成对;及将对应于未匹配顶点的每一状态映射到一 GOT实例,其中所述GOT实例中的SME实例将为未用的。
[0118]在实例37中,实例I至36中任一者的主题可任选地包括,其中装置经配置以将每一对状态实施为所述并行机中的两个硬件元件的一群组。
[0119]实例38包括通过用实例I至37中任一者的过程产生的映像来编程的并行机。
【权利要求】
1.一种计算机实施的方法,其用于从源代码产生经配置以编程并行机的映像,所述方法包含: 将源代码转换成包含多个互连状态的自动机; 将所述自动机转换成网表,所述网表包含对应于所述自动机的状态的实例,其中所述实例对应于所述并行机的硬件元件,其中将所述自动机转换成网表包括基于所述并行机的物理设计来对状态一起分组;及 将所述网表转换成所述映像。
2.根据权利要求1所述的方法,其中所述实例包括对应于状态机元件SME硬件元件的SME实例及对应于包含一群SME的硬件元件的SME群组实例,且其中分组包括将状态分组到SME群组实例中。
3.根据权利要求2所述的方法,其中所述物理设计包括包含一群SME的所述硬件元件的物理设计。
4.根据权利要求3所述的方法,其中所述物理设计包括对包含一群SME的所述硬件元件中的所述SME的输入或输出限制中的一者。
5.根据权利要求4所述的方法,其中所述物理设计包括包含一群SME的所述硬件元件中的所述SME共享输出的限制。
6.根据权利要求2所述的方法,其中SME群组实例包括含有两个SME实例的成对群组GOT实例,且其中所述物理设计包括每一 GOT中的所述SME耦合到共同输出。
7.根据权利要求6所述的方法,其中将所述自动机转换成网表包含:` 确定所述状态中的哪些可一起分组在GOT实例中;及 基于所述确定使所述状态成对。
8.根据权利要求7所述的方法,其中当第一状态或第二状态均非所述自动机的最终状态,且所述第一状态及所述第二状态中的一者不驱动不同于所述第一状态或所述第二状态的任何状态时,所述第一状态及所述第二状态可在GOT实例中一起成对。
9.根据权利要求7所述的方法,其中当第一状态或第二状态均非所述自动机的最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态时,所述第一状态及所述第二状态可在GOT实例中一起成对。
10.根据权利要求7所述的方法,其中当第一状态及第二状态中的一者为所述自动机的最终状态,且所述第一状态及所述第二状态中的另一者不驱动任何外部状态时,所述第一状态及所述第二状态可在GOT实例中一起成对。
11.根据权利要求7所述的方法,其中当第一状态及第二状态均为所述自动机的最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态时,所述第一状态及所述第二状态可在GOT实例中一起成对。
12.根据权利要求7所述的方法,其中确定所述状态中的哪些可一起分组在GOT实例中包含:使用图论来确定所述状态中的哪些可一起分组在GOT实例中。
13.根据权利要求12所述的方法,其中使用图论来确定所述状态中的哪些可一起分组在GOT实例中包含:使用图论识别最大匹配来确定所述状态中的哪些可一起分组在GOT实例中。
14.根据权利要求1所述的方法,其进一步包含:发布所述映像。
15.根据权利要求1所述的方法,其中所述实例包含通用实例及专用实例,其中所述通用实例对应于所述自动机的通用状态,且所述专用实例对应于所述自动机的专用状态。
16.根据权利要求15所述的方法,其中对应于所述通用实例的所述硬件元件包括状态机元件SME及成对群组GOT,且其中对应于所述专用实例的所述硬件元件包括计数器及逻辑元件。
17.一种计算机可读媒体,其包括指令,所述指令在由所述计算机执行时使所述计算机执行包含以下各者的操作: 将源代码转换成包含多个互连状态的自动机; 将所述自动机转换成网表,所述网表包含对应于所述自动机的状态的实例,其中所述实例对应于并行机的硬件元件,其中将所述自动机转换成网表包括基于所述并行机的物理设计来对状态一起分组 '及 将所述网表转换成所述映像。
18.根据权利要求17所述的计算机可读媒体,其中所述自动机为均齐自动机。
19.根据权利要求17所述的计算机可读媒体,其中将所述自动机转换成网表包含:将所述自动机的所述状态中的每一者映射到对应于所述硬件元件的实例及确定所述实例之间的连接性。
20.根据权利要求17所述的计算机可读媒体,其中所述网表进一步包含所述实例之间的表示所述硬件元件之间的导体的多个连接。
21.根据权利要求17 所述的计算机可读媒体,其中将所述自动机转换成网表包含:将所述自动机转换成包含实例的网表,所述实例对应于所述自动机的除了开始状态之外的状态。
22.根据权利要求17所述的计算机可读媒体,其中所述指令使所述计算机执行包含以下各者的操作: 确定对应于所述网表的所述实例的所述硬件元件在所述并行机中的位置。
23.根据权利要求22所述的计算机可读媒体,其中对状态一起分组包括:基于包含一群通用元件的硬件元件的物理设计来对状态一起分组。
24.根据权利要求22所述的计算机可读媒体,其中所述指令使所述计算机执行包含以下各者的操作: 确定将使用所述并行机的哪些导体来连接所述硬件元件;及 确定所述并行机的可编程开关的设定,其中所述可编程开关经配置以选择性地将所述硬件元件稱合在一起。
25.一种计算机,其包含: 存储器,其上面存储有软件 '及 处理器,其通信地耦合到所述存储器,其中所述软件在由所述处理器执行时使所述处理器: 将源代码转换成包含多个互连状态的自动机; 将所述自动机转换成网表,所述网表包含对应于所述自动机的状态的实例,其中所述实例对应于所述并行机的硬件元件,其中所述实例包括多个第一实例及含有两个或两个以上第一实例的群组实例,其中将所述自动机转换成网表包括基于许多未用的第一实例来将状态一起分组在群组实例中;及将所述网表转换成所述映像。
26.根据权利要求25所述的计算机,其中所述群组实例包括成对群组GOT实例,且其中分组状态包括根据成对的状态驱动哪些状态来使状态成对。
27.根据权利要求26所述的计算机,其中基于许多未用的第一实例将状态分组在群组实例中包括: 基于以下条件确定第一状态与第二状态是否可成对: 所述第一状态或所述第二状态均非所述自动机中的最终状态,且所述第一状态及所述第二状态中的一者不驱动不同于所述第一状态或所述第二状态的任何状态; 所述第一状态或所述第二状态均非所述自动机中的最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态; 所述第一状态或所述第二状态中的任一者为最终状态,且并非最终状态的所述第一状态或所述第二状态不驱动除了所述第一状态或所述第二状态之外的任何状态;及 所述第一状态及所述第二状态均为最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态。·
28.根据权利要求25所述的计算机,其中将所述自动机转换成网表包括: 将所述状态模型化为图,其中所述图的顶点对应于状态,且所述图的边对应于所述状态的可能成对; 确定所述图的匹配顶点;及 使对应于所述匹配顶点的状态成对。
29.根据权利要求28所述的计算机,其中将所述自动机转换成网表包括: 确定所述图的最大匹配。
30.根据权利要求29所述的计算机,其中将所述自动机转换成网表包括: 使对应于匹配顶点的每一组状态成对;及 将对应于未匹配顶点的每一状态映射到一 GOT实例,其中所述GOT实例中的一个SME实例将为未用的。
31.一种系统,其包含: 计算机,其经配置以: 将源代码转换成包含多个互连状态的自动机; 将所述自动机转换成网表,所述网表包含对应于所述自动机的状态的实例,其中所述实例对应于所述并行机的硬件元件,其中所述实例包括多个第一实例及含有两个或两个以上第一实例的群组实例,其中将所述自动机转换成网表包括基于许多未用的第一实例来将状态一起分组在群组实例中;及将所述网表转换成映像;及装置,其经配置以将所述映像加载到并行机上。
32.根据权利要求31所述的系统,其中对状态一起分组包括: 根据成对的状态驱动哪些状态来使状态成对。
33.根据权利要求31所述的系统,其中基于许多未用的第一实例将状态一起分组在群组实例中包括: 基于以下条件确定第一状态与第二状态是否可成对: 所述第一状态或所述第二状态均非所述自动机中的最终状态,且所述第一状态及所述第二状态中的一者不驱动不同于所述第一状态或所述第二状态的任何状态; 所述第一状态或所述第二状态均非所述自动机中的最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态; 所述第一状态或所述第二状态中的任一者为最终状态,且并非最终状态的所述第一状态或所述第二状态不驱动除了所述第一状态或所述第二状态之外的任何状态;及 所述第一状态及所述第二状态均为最终状态,且所述第一状态及所述第二状态均驱动相同的外部状态。
34.根据权利要求31所述的系统,其中基于许多未用的第一实例将状态一起分组在群组实例中包括: 将所述状态模型化为图,其中所述图的顶点对应于状态,且所述图的边对应于所述状态的可能成对; 确定所述图的匹配顶点;及 使对应于所述匹配顶点的状态成对。
35.根据权利要求34所述的系统,其中基于许多未用的第一实例将状态一起分组在群组实例中: 确定所述图的最大匹 配。
36.根据权利要求35所述的系统,其中基于许多未用的第一实例将状态一起分组在群组实例中包括: 使对应于匹配顶点的每一组状态成对;及 将对应于未匹配顶点的每一状态映射到一 GOT实例,其中所述GOT实例中的一个SME头例将为未用的。
37.根据权利要求31所述的系统,其中所述装置经配置以将每一对状态实施为所述并行机中的两个硬件元件的群组。
38.一种通过用根据权利要求1所述的过程产生的映像编程的并行机。
【文档编号】G06F9/45GK103430148SQ201280013903
【公开日】2013年12月4日 申请日期:2012年1月24日 优先权日:2011年1月25日
【发明者】许郡君, 保罗·格伦迪宁 申请人:美光科技公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1