(57)【特許請求の範囲】
【請求項１】
ソースコードから並列マシンをプログラムするように構成されたイメージを生成するためのコンピュータ実装方法であって、
アンコンパイルされた実行可能なソフトウェアアプリケーションのソースコードを、複数の相互接続された状態を含むオートマトンに変換することと、
前記オートマトンを、前記オートマトンの状態に対応するインスタンスを含むネットリストに変換することであって、前記インスタンスが前記並列マシンのハードウェア要素に対応し、前記オートマトンをネットリストに変換することが、前記並列マシンの物理的設計に基づいて前記オートマトンの状態を共にグループ化することを含む、前記オートマトンをネットリストに変換することと、
前記ネットリストを前記イメージに変換し、前記イメージは、前記並列マシンを、前記ネットリストの前記インスタンスに対応するようにプログラムするコンパイルされたバイナリデータを含み、前記コンパイルされたバイナリデータは、前記イメージが前記並列マシンにロードされたとき、前記アンコンパイルされた実行可能なソフトウェアアプリケーションの前記ソースコードによって特定される機能を提供するために、前記並列マシンをプログラムするように配置されていることと、
を含む方法。
【請求項２】
前記ネットリストの前記インスタンスが、状態機械要素（ＳＭＥ）ハードウェア要素に対応するＳＭＥインスタンスおよび、ＳＭＥのグループを含むハードウェア要素に対応するＳＭＥグループインスタンスを含み、かつ、グループ化することが、前記オートマトンの状態をＳＭＥグループインスタンスにグループ化することを含む、請求項１に記載の方法。
【請求項３】
前記オートマトンの前記状態をグループ化するために使用される前記物理的設計が、ＳＭＥのグループを含む前記ハードウェア要素の物理的設計を含む、請求項２に記載の方法。
【請求項４】
前記オートマトンの前記状態をグループ化するために使用される前記物理的設計が、ＳＭＥのグループを含む前記ハードウェア要素内の前記ＳＭＥに関する入力制約または出力制約のうちの１つを含む、請求項３に記載の方法。
【請求項５】
前記オートマトンの前記状態をグループ化するために使用される前記物理的設計が、ＳＭＥのグループを含む前記ハードウェア要素内の前記ＳＭＥが出力を共有するという制限を含む、請求項４に記載の方法。
【請求項６】
ＳＭＥグループインスタンスが、２つのＳＭＥインスタンスを含む２つのグループ（ＧＯＴ）インスタンスを含み、かつ、前記オートマトンの前記状態をグループ化するために使用される前記物理的設計が、各ＧＯＴ内の前記ＳＭＥが共通の出力に結合されていることを含む、請求項２に記載の方法。
【請求項７】
前記オートマトンをネットリストに変換することが、
どの前記オートマトンの前記状態がＧＯＴインスタンス内で共にグループ化できるかを判断することと、
前記判断に基づいて前記オートマトンの前記状態をペア形成することと
を含む、請求項６に記載の方法。
【請求項８】
前記オートマトンの第１の状態または第２の状態のどちらも前記オートマトンの最終状態ではなく、かつ、前記オートマトンの前記第１の状態および前記第２の状態の一方が、前記オートマトンの前記第１の状態または前記第２の状態以外のどの状態も駆動しない場合に、前記オートマトンの前記第１の状態および前記第２の状態が、ＧＯＴインスタンス内で共にペア形成できる、請求項７に記載の方法。
【請求項９】
前記オートマトンの第１の状態または第２の状態のどちらも前記オートマトンの最終状態ではなく、かつ、前記オートマトンの前記第１の状態および前記第２の状態の両方が、同じ外部状態を駆動する場合に、前記オートマトンの前記第１の状態および前記第２の状態が、ＧＯＴインスタンス内で共にペア形成できる、請求項７に記載の方法。
【請求項１０】
前記オートマトンの第１の状態および第２の状態の一方が前記オートマトンの最終状態であり、かつ、前記オートマトンの前記第１の状態および前記第２の状態の他方が、どの外部状態も駆動しない場合に、前記オートマトンの前記第１の状態および前記第２の状態が、ＧＯＴインスタンス内で共にペア形成できる、請求項７に記載の方法。
【請求項１１】
前記オートマトンの第１の状態および第２の状態の両方が前記オートマトンの最終状態であり、かつ、前記オートマトンの前記第１の状態および前記第２の状態の両方が、同じ外部状態を駆動する場合に、前記オートマトンの前記第１の状態および前記第２の状態が、ＧＯＴインスタンス内で共にペア形成できる、請求項７に記載の方法。
【請求項１２】
どの前記オートマトンの前記状態がＧＯＴインスタンス内で共にグループ化できるかを判断することが、グラフ理論を使用して、どの前記オートマトンの前記状態がＧＯＴインスタンス内で共にグループ化できるかを判断することを含む、請求項７に記載の方法。
【請求項１３】
グラフ理論を使用して、どの前記オートマトンの前記状態がＧＯＴインスタンス内で共にグループ化できるかを判断することが、最大マッチングを識別するために、グラフ理論を使用して、どの前記オートマトンの前記状態がＧＯＴインスタンス内で共にグループ化できるかを判断することを含む、請求項１２に記載の方法。
【請求項１４】
前記イメージを公開することをさらに含む、請求項１に記載の方法。
【請求項１５】
前記ネットリストの前記インスタンスが、汎用インスタンスおよび専用インスタンスを含み、前記汎用インスタンスが前記オートマトンの汎用状態に対応し、また、前記専用インスタンスが前記オートマトンの専用状態に対応する、請求項１に記載の方法。
【請求項１６】
前記汎用インスタンスに対応する前記ハードウェア要素が、状態機械要素（ＳＭＥ）および２つのグループ（ＧＯＴ）を含み、かつ、前記専用インスタンスに対応する前記ハードウェア要素がカウンタおよび論理要素を含む、請求項１５に記載の方法。
【請求項１７】
一時的な伝送信号ではない、命令を含むコンピュータ可読媒体であって、前記コンピュータによって実行されるときに、前記コンピュータに、
アンコンパイルされた実行可能なソフトウェアアプリケーションのソースコードを、複数の相互接続された状態を含むオートマトンに変換することと、
前記オートマトンを、前記オートマトンの状態に対応するインスタンスを含むネットリストに変換することであって、前記インスタンスが並列マシンのハードウェア要素に対応し、前記オートマトンをネットリストに変換することが、前記並列マシンの物理的設計に基づいて前記オートマトンの状態を共にグループ化することを含む、前記オートマトンをネットリストに変換することと、
前記ネットリストをイメージに変換し、前記イメージは、前記並列マシンを、前記ネットリストの前記インスタンスに対応するようにプログラムするコンパイルされたバイナリデータを含み、前記コンパイルされたバイナリデータは、前記イメージが前記並列マシンにロードされたとき、前記アンコンパイルされた実行可能なソフトウェアアプリケーションの前記ソースコードによって特定される機能を提供するために、前記並列マシンをプログラムするように配置されていることと
を含む動作を実行させる、コンピュータ可読媒体。
【請求項１８】
前記オートマトンが均質なオートマトンである、請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
前記オートマトンをネットリストに変換することが、前記オートマトンの前記状態の各々を、前記ハードウェア要素に対応するインスタンスにマッピングすることと、前記インスタンス間の接続性を決定することとを含む、請求項１７に記載のコンピュータ可読媒体。
【請求項２０】
前記ネットリストが、前記ハードウェア要素間の導体を表す前記インスタンス間の複数の接続をさらに含む、請求項１７に記載のコンピュータ可読媒体。
【請求項２１】
前記オートマトンをネットリストに変換することが、前記オートマトンを、開始状態を除いて、前記オートマトンの状態に対応するインスタンスを含むネットリストに変換することを含む、請求項１７に記載のコンピュータ可読媒体。
【請求項２２】
前記命令が、前記コンピュータに、
前記ネットリストの前記インスタンスに対応する前記ハードウェア要素の前記並列マシン内の位置を決定すること
を含む動作を実行させる、請求項１７に記載のコンピュータ可読媒体。
【請求項２３】
前記オートマトンの状態を共にグループ化することが、汎用要素のグループを含むハードウェア要素の物理的設計に基づいて、前記オートマトンの状態を共にグループ化することを含む、請求項２２に記載のコンピュータ可読媒体。
【請求項２４】
前記命令が、前記コンピュータに、
前記並列マシンのどの導体が前記ハードウェア要素を接続するために使用されるかを決定することと、
前記並列マシンのプログラム可能スイッチに対する設定を決定することであって、前記プログラム可能スイッチが、前記ハードウェア要素を選択的に共に結合するように構成されている、プログラム可能スイッチに対する設定を決定することと
を含む動作を実行させる、請求項２２に記載のコンピュータ可読媒体。
【請求項２５】
ソフトウェアがその上に格納されたメモリと、
前記メモリに通信的に結合されたプロセッサであって、前記ソフトウェアが、前記プロセッサによって実行されるとき、前記プロセッサに、
アンコンパイルされた実行可能なソフトウェアアプリケーションのソースコードを、複数の相互接続された状態を含むオートマトンに変換することと、
前記オートマトンを、前記オートマトンの状態に対応するインスタンスを含むネットリストに変換することであって、前記インスタンスが並列マシンのハードウェア要素に対応し、前記インスタンスが、複数の第１のインスタンスおよび２つ以上の第１のインスタンスを含むグループインスタンスを含み、前記オートマトンをネットリストに変換することが、未使用の第１のインスタンスの数に基づいて、前記オートマトンの状態をグループインスタンス内に共にグループ化することを含む、前記オートマトンをネットリストに変換することと、
前記ネットリストをイメージに変換し、前記イメージは、前記並列マシンを、前記ネットリストの前記インスタンスに対応するようにプログラムするコンパイルされたバイナリデータを含み、前記コンパイルされたバイナリデータは、前記イメージが前記並列マシンにロードされたとき、前記アンコンパイルされた実行可能なソフトウェアアプリケーションの前記ソースコードによって特定される機能を提供するために、前記並列マシンをプログラムするように配置されていることと
をさせるプロセッサと
を含むコンピュータ。
【請求項２６】
前記グループインスタンスが２つのグループ（ＧＯＴ）インスタンスを含み、かつ、前記オートマトンの状態をグループ化することが、前記ペア形成された状態がどの状態を駆動するかに応じて、前記オートマトンの状態をペア形成することを含む、請求項２５に記載のコンピュータ。
【請求項２７】
未使用の第１のインスタンスの数に基づいて前記オートマトンの状態をグループインスタンス内にグループ化することが、
以下の条件：
前記オートマトンの第１の状態または第２の状態のどちらも前記オートマトン内の最終状態ではなく、かつ前記第１の状態および第２の状態の一方が、前記第１の状態または第２の状態以外のどの状態も駆動しないことと；
前記第１の状態または第２の状態のどちらも前記オートマトン内の最終状態ではなく、かつ前記第１の状態および前記第２の状態の両方が、同じ外部状態を駆動することと；
前記第１の状態または前記第２の状態のどちらかが最終状態であり、かつ最終状態ではない前記第１の状態または第２の状態が、前記第１の状態または第２の状態以外のどの状態も駆動しないことと；
前記第１の状態および前記第２の状態の両方が最終状態であり、かつ前記第１の状態および前記第２の状態の両方が、同じ外部状態を駆動することと
に基づいて、前記第１の状態および前記第２の状態がペア形成できるかどうかを判断することを含む、請求項２６に記載のコンピュータ。
【請求項２８】
前記オートマトンをネットリストに変換することが、
前記オートマトンの前記状態をグラフとしてモデル化することであって、前記グラフのバーテックスが状態に対応し、かつ前記グラフのエッジが前記オートマトンの前記状態の可能なペア形成に対応する、前記状態をグラフとしてモデル化することと、
前記グラフに対して一致するバーテックスを決定することと、
前記一致するバーテックスに対応する前記オートマトンの状態をペア形成することと
を含む、請求項２５に記載のコンピュータ。
【請求項２９】
前記オートマトンをネットリストに変換することが、
前記グラフに対して最大マッチングを決定すること
を含む、請求項２８に記載のコンピュータ。
【請求項３０】
前記オートマトンをネットリストに変換することが、
一致するバーテックスに対応する前記オートマトンの状態の各セットをペア形成することと、
一致しないバーテックスに対応する前記オートマトンの各状態をＧＯＴインスタンスにマッピングすることであって、前記ＧＯＴインスタンス内の１つのＳＭＥインスタンスが使用されない、一致しないバーテックスに対応する各状態をＧＯＴインスタンスにマッピングすることと
を含む、請求項２９に記載のコンピュータ。
【請求項３１】
システムであって、前記システムが、
コンピュータであって、
アンコンパイルされた実行可能なソフトウェアアプリケーションのソースコードを、複数の相互接続された状態を含むオートマトンに変換することと、
前記オートマトンを、前記オートマトンの状態に対応するインスタンスを含むネットリストに変換することであって、前記インスタンスが並列マシンのハードウェア要素に対応し、前記インスタンスが、複数の第１のインスタンスおよび２つ以上の第１のインスタンスを含むグループインスタンスを含み、前記オートマトンをネットリストに変換することが、未使用の第１のインスタンスの数に基づいて、前記オートマトンの状態をグループインスタンス内に共にグループ化することを含む、前記オートマトンをネットリストに変換することと、
前記ネットリストをイメージに変換し、前記イメージは、前記並列マシンを、前記ネットリストの前記インスタンスに対応するようにプログラムするコンパイルされたバイナリデータを含み、前記コンパイルされたバイナリデータは、前記イメージが前記並列マシンにロードされたとき、前記アンコンパイルされた実行可能なソフトウェアアプリケーションの前記ソースコードによって特定される機能を提供するために、前記並列マシンをプログラムするように配置されていることと
を行うように構成された、コンピュータと、
前記イメージを並列マシン上にロードするように構成された装置と
を含む、システム。
【請求項３２】
状態を共にグループ化することが、
ペア形成された状態がどの状態を駆動するかに応じて、前記オートマトンの状態をペア形成すること
を含む、請求項３１に記載のシステム。
【請求項３３】
未使用の第１のインスタンスの数に基づいて、前記オートマトンの状態を共にグループインスタンス内にグループ化することが、
以下の条件：
第１の状態または第２の状態のどちらも前記オートマトン内の最終状態ではなく、かつ前記第１の状態および第２の状態の一方が、前記第１の状態または第２の状態以外のどの状態も駆動しないことと；
前記第１の状態または第２の状態のどちらも前記オートマトン内の最終状態ではなく、かつ前記第１の状態および前記第２の状態の両方が、同じ外部状態を駆動することと；
前記第１の状態または前記第２の状態のどちらかが最終状態であり、かつ最終状態ではない前記第１の状態または第２の状態が、前記第１の状態または第２の状態以外のどの状態も駆動しないことと；
前記第１の状態および前記第２の状態の両方が最終状態であり、かつ前記第１の状態および前記第２の状態の両方が、同じ外部状態を駆動することと
に基づいて、前記オートマトンの前記第１の状態および前記オートマトンの前記第２の状態がペア形成できるかどうかを判断することを含む、請求項３１に記載のシステム。
【請求項３４】
未使用の第１のインスタンスの数に基づいて、前記オートマトンの状態を共にグループインスタンス内にグループ化することが、
前記状態をグラフとしてモデル化することであって、前記グラフのバーテックスが状態に対応し、かつ前記グラフのエッジが前記状態の可能なペア形成に対応する、前記状態をグラフとしてモデル化することと、
前記グラフに対して一致するバーテックスを決定することと、
前記一致するバーテックスに対応する状態をペア形成することと
を含む、請求項３１に記載のシステム。
【請求項３５】
未使用の第１のインスタンスの数に基づいて、前記オートマトンの状態を共にグループインスタンス内にグループ化することが、
前記グラフに対して最大マッチングを決定すること
を含む、請求項３４に記載のシステム。
【請求項３６】
未使用の第１のインスタンスの数に基づいて、前記オートマトンの状態を共にグループインスタンス内にグループ化することが、
一致するバーテックスに対応する前記オートマトンの状態の各セットをペア形成することと、
一致しないバーテックスに対応する各状態をＧＯＴインスタンスにマッピングすることであって、前記ＧＯＴインスタンス内の１つのＳＭＥインスタンスが使用されない、一致しないバーテックスに対応する各状態をＧＯＴインスタンスにマッピングすることと
を含む、請求項３５に記載のシステム。
【請求項３７】
前記装置が、前記オートマトンの状態の各ペアを、前記並列マシン内の２つのハードウェア要素のグループとして実装するように構成されている、請求項３１に記載のシステム。
【請求項３８】
請求項１のプロセスによって生成されたイメージによってプログラム化された並列マシン。
【発明の詳細な説明】
【技術分野】
【０００１】
〔優先権主張〕
本特許出願は、２０１１年１月２５日に出願された、「ＳＴＡＴＥ  ＧＲＯＵＰＩＮＧ  ＦＯＲ  ＥＬＥＭＥＮＴ  ＵＴＩＬＩＺＡＴＩＯＮ」という名称の米国仮特許出願整理番号６１／４３６，０７５に対する優先権の利益を主張し、これによって、参照によりその全体として本明細書に組み込まれる。
【背景技術】
【０００２】
並列マシン用のコンパイラは、並列マシンを構成する（例えば、プログラミングする）ために、ソースコードを機械コード（例えば、イメージ）に変換する。機械コードは、並列マシン上に有限状態機械を実装できる。ソースコードを機械コードに変換するプロセスのうちの１つの段階は、ネットリストの形成を含む。ネットリストは、並列マシンのハードウェア要素のインスタンス間の接続性を記述する。ネットリストは、ハードウェア要素がソースコードの機能を実装できるように、ハードウェア要素間の接続性を記述できる。
【図面の簡単な説明】
【０００３】
【図１】本発明の様々な実施形態に従った、並列マシンの一例を示す。
【図２】本発明の様々な実施形態に従って、有限状態機械エンジンとして実装された図１の並列マシンの一例を示す。
【図３】本発明の様々な実施形態に従って、図２の有限状態機械エンジンのブロックの一例を示す。
【図４】本発明の様々な実施形態に従って、図３のブロックの行（ｒｏｗ）の一例を示す。
【図５】本発明の様々な実施形態に従って、図４の行の２つのグループの一例を示す。
【図６】本発明の様々な実施形態に従って、コンパイラがソースコードを、図１の並列マシンをプログラムするように構成されたイメージに変換するための方法の一例を示す。
【図７Ａ】本発明の様々な実施形態に従った、オートマトン（ａｕｔｏｍａｔｏｎ）の例を示す。
【図７Ｂ】本発明の様々な実施形態に従った、オートマトンの例を示す。
【図８Ａ】本発明の様々な実施形態に従った、ネットリストの例を示す。
【図８Ｂ】本発明の様々な実施形態に従った、ネットリストの例を示す。
【図９】本発明の様々な実施形態に従って、図６のコンパイラを実行するためのコンピュータの例を示す。
【発明を実施するための形態】
【０００４】
以下の説明および図は、特定の実施形態を当業者が実施できるように十分に説明する。他の実施形態は、構造的、論理的、電気的、プロセス、および他の変更を包含し得る。いくつかの実施形態の部分および特徴は、他の実施形態に含まれ得るか、または他の実施形態のそれらと置き換えられ得る。請求項に規定される実施形態は、それらの請求項の全ての利用可能な均等物を包含する。
【０００５】
本文書は、とりわけ、並列マシンの物理的設計に基づいてネットリストを生成するコンパイラを説明する。一例では、並列マシンの物理的設計は、並列マシンの状態機械要素間における接続性の制限を含み得る。例えば、並列マシン内の状態機械要素は、共通の出力を共有するペアにグループ化できる。その結果、コンパイラは、ＳＭＥのペアが共通の出力を共有する物理的設計に基づいて、ネットリストを生成できる。
【０００６】
図１は、並列マシン１００の例を示す。並列マシン１００は、入力データを受信し、その入力データに基づいて出力を提供できる。並列マシン１００は、入力データを受信するためのデータ入力ポート１１０および出力を別の装置に提供するための出力ポート１１４を含むことができる。データ入力ポート１１０は、並列マシン１００に入力されるデータ用のインタフェースを提供する。
【０００７】
並列マシン１００は、汎用要素１０２および専用要素１１２を含む、複数のプログラム可能要素を含む。汎用要素１０２は、１つまたは複数の入力１０４および１つまたは複数の出力１０６を含み得る。汎用要素１０２は、複数の状態のうちの１つにプログラムされ得る。汎用要素１０２の状態は、汎用要素１０２が、所与の入力に基づいて、何の出力を提供するかを決定する。すなわち、汎用要素１０２の状態は、プログラム可能要素が所与の入力に基づいてどのように反応するかを決定する。データ入力ポート１１０に対するデータ入力は、汎用要素１０２にそれに対する処置を取らせるため、複数の汎用要素１０２に提供され得る。汎用要素１０２の例には、以下で詳細に説明する状態機械要素（ＳＭＥ）、および構成可能論理ブロックを含むことができる。一例では、ＳＭＥは、所与の入力がデータ入力ポート１１０で受信される場合に、特定の出力（例えば、高信号つまり「１」信号）を提供するため、所与の状態に設定され得る。所与の入力以外の入力がデータ入力ポート１１０で受信される場合、ＳＭＥは異なる出力（例えば、低信号つまり「０」信号）を提供し得る。一例では、構成可能論理ブロックは、データ入力ポート１１０で受信された入力に基づいて、ブール論理関数（例えば、ＡＮＤ、ＯＲ、ＮＯＲなど）を実行するように設定できる。
【０００８】
並列マシン１００は、プログラム（例えば、イメージ）を並列マシン１００上にロードするためのプログラミングインタフェース１１１も含むことができる。イメージは、汎用要素１０２の状態をプログラム（例えば、設定）できる。すなわち、イメージは、所与の入力に対して特定の方法で反応するように汎用要素１０２を構成できる。例えば、汎用要素１０２は、文字「ａ」がデータ入力ポート１１０で受信される場合、高信号を出力するように設定できる。いくつかの例では、並列マシン１００は、汎用要素１０２の動作のタイミングを制御するためのクロック信号を使用できる。ある例では、並列マシン１００は、汎用要素１０２とやりとりするため、および専用機能を実行するために、専用要素１１２（例えば、ＲＡＭ、論理ゲート、カウンタ、ルックアップテーブルなど）を含むことができる。いくつかの実施形態では、データ入力ポート１１０で受信されるデータは、長い時間をかけて、もしくは一度にそろって受信されたデータの一定のセット、または長い時間をかけて受信されたデータのストリームを含むことができる。データは、並列マシン１００に結合された、データベース、センサー、ネットワークなどの任意のソースから受信され得るか、または生成され得る。
【０００９】
並列マシン１００は、並列マシン１００の異なる要素（例えば、汎用要素１０２、データ入力ポート１１０、出力ポート１１４、プログラミングインタフェース１１１、および専用要素１１２）を選択的に共に結合するための複数のプログラム可能スイッチ１０８も含む。その結果、並列マシン１００は、要素間で形成されたプログラム可能マトリックス（ｐｒｏｇｒａｍｍａｂｌｅ  ｍａｔｒｉｘ）を含む。一例では、汎用要素１０２の入力１０４、データ入力ポート１１０、プログラミングインタフェース１１１、または専用要素１１２が、１つまたは複数のプログラム可能スイッチ１０８を通して、汎用要素１０２の出力１０６、出力ポート１１４、プログラミングインタフェース１１１、または専用要素１１２に結合できるように、プログラム可能スイッチ１０８が、２つ以上の要素を選択的に互いに結合できる。従って、要素間の信号のルーティングが、プログラム可能スイッチ１０８を設定することによって制御できる。図１は、所与の要素とプログラム可能スイッチ１０８との間の特定数の導体（例えば、ワイヤー）を示しているが、他の例では、異なる数の導体が使用できることが理解されるはずである。また、図１は、個別にプログラム可能スイッチ１０８に結合された各汎用要素１０２を示しているが、他の例では、複数の汎用要素１０２がグループ（例えば、図８に示すような、ブロック８０２）としてプログラム可能スイッチ１０８に結合できる。一例では、データ入力ポート１１０、データ出力ポート１１４、および／またはプログラミングインタフェース１１１はレジスタとして実装でき、レジスタへの書込みが、それぞれの要素へデータを提供するか、またはそれぞれの要素からデータを提供するようにする。
【００１０】
一例では、単一の並列マシン１００が物理デバイス上に実装されるが、他の例では、２つ以上の並列マシン１００が単一の物理デバイス（例えば、物理チップ）上に実装できる。一例では、複数の並列マシン１００の各々が、別個のデータ入力ポート１１０、別個の出力ポート１１４、別個のプログラミングインタフェース１１１、および汎用要素１０２の別個のセットを含むことができる。さらに、汎用要素１０２の各セットは、それらの対応する入力データポート１１０でデータに反応（例えば、高信号または低信号を出力）できる。例えば、第１の並列マシン１００に対応する汎用要素１０２の第１のセットは、第１の並列マシン１００に対応する第１のデータ入力ポート１１０でデータに反応できる。第２の並列マシン１００に対応する汎用要素１０２の第２のセットは、第２の並列マシン１００に対応する第２のデータ入力ポート１１０に反応できる。その結果、各並列マシン１００は、１セットの汎用要素１０２を含み、異なるセットの汎用要素１０２は、異なる入力データに反応できる。同様に、各並列マシン１００、および汎用要素１０２の各対応するセットは、別個の出力を提供できる。いくつかの例では、第２の並列マシン１００に対する入力データが、第１の並列マシン１００からの出力データを含むことができるように、第１の並列マシン１００からの出力ポート１１４が、第２の並列マシン１００の入力ポート１１０に結合できる。
【００１１】
一例では、並列マシン１００上にロードするためのイメージは、汎用要素１０２の状態を設定するため、プログラム可能スイッチ１０８をプログラミングするため、および並列マシン１００内で専用要素１１２を構成するための複数のビットの情報を含む。一例では、ある入力に基づいて所望の出力を提供するように並列マシン１００をプログラムするために、イメージが並列マシン１００上にロードできる。出力ポート１１４は、データ入力ポート１１０での汎用要素１０２のデータに対する反応に基づいて、並列マシン１００からの出力を提供できる。出力ポート１１４からの出力は、所与のパターンの一致を示す単一ビット、複数のパターンに対する一致および不一致を示す複数のビットを含むワード（ｗｏｒｄ）、ならびに所与の時に全てまたは特定の汎用要素１０２の状態に対応する状態ベクトルを含むことができる。
【００１２】
並列マシン１００に関する使用例には、パターン認識（例えば、音声認識、画像認識など）、信号処理、画像処理、コンピュータビジョン、暗号化、およびその他を含む。ある例では、並列マシン１００は、有限状態機械（ＦＳＭ）エンジン、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、およびそれらの変形を含むことができる。さらに、並列マシン１００は、コンピュータ、ポケットベル、携帯電話、電子手帳、携帯音楽プレーヤ、ネットワーク装置（例えば、ルータ、ファイアウォール、スイッチ、またはそれらの任意の組合せ）、制御回路、カメラなどの、大きな装置内のコンポーネントであり得る。
【００１３】
図２〜図５は、有限状態機械（ＦＳＭ）エンジン２００として実装された別の並列マシンを示す。一例では、ＦＳＭエンジン２００は、有限状態機械のハードウェア実装を含む。その結果、ＦＳＭエンジン２００は、ＦＳＭ内の複数の状態に対応する、複数の選択的に結合可能なハードウェア要素（例えば、プログラム可能要素）を実装する。ＦＳＭ内の状態と同様に、ハードウェア要素は、入力ストリームを分析し、その入力ストリームに基づいて下流のハードウェア要素をアクティブにできる。
【００１４】
ＦＳＭエンジン２００は、汎用要素および専用要素を含む、複数のプログラム可能要素を含む。汎用要素は、多数の異なる機能を実装するようにプログラムされ得る。これらの汎用要素は、行（ｒｏｗ）２０６（図３および図４に示す）およびブロック２０２（図２および図３に示す）に階層的に編成されているＳＭＥ  ２０４、２０５（図５に示す）を含む。階層的に編成されたＳＭＥ  ２０４、２０５間で信号をルーティングするために、ブロック間スイッチ２０３（図２および図３に示す）、ブロック内スイッチ２０８（図３および図４に示す）、ならびに行内（ｉｎｔｒａ−ｒｏｗ）スイッチ２１２（図４に示す）を含む、プログラム可能スイッチの階層が使用される。ＳＭＥ  ２０４、２０５は、ＦＳＭエンジン２００によって実装されたＦＳＭの状態に対応できる。ＳＭＥ  ２０４、２０５は、以下で説明するように、プログラム可能スイッチの使用によって共に結合できる。その結果、ＦＳＭは、状態の機能に対応するようにＳＭＥ  ２０４、２０５をプログラミングすることにより、また、ＦＳＭ内の状態間の遷移に対応するため、ＳＭＥ  ２０４、２０５を選択的に共に結合することにより、ＦＳＭエンジン２００上に実装できる。
【００１５】
図２は、ＦＳＭエンジン例２００の全体図を示す。ＦＳＭエンジン２００は、プログラム可能ブロック間スイッチ２０３と選択的に共に結合できる複数のブロック２０２を含む。さらに、ブロック２０２は、信号（例えば、データ）を受信するため、およびデータをブロック２０２に提供するために、入力ブロック２０９（例えば、データ入力ポート）に選択的に結合できる。ブロック２０２は、ブロック２０２から外部デバイス（例えば、別のＦＳＭエンジン２００）に信号を提供するために、出力ブロック２１３（例えば、出力ポート）にも選択的に結合できる。ＦＳＭエンジン２００は、プログラム（例えば、イメージ）をＦＳＭエンジン２００上にロードするために、プログラミングインタフェース２１１も含み得る。イメージは、ＳＭＥ  ２０４、２０５の状態をプログラム（設定）できる。すなわち、イメージは、入力ブロック２０９で所与の入力に対して特定の方法で反応するように、ＳＭＥ  ２０４、２０５を構成できる。例えば、ＳＭＥ  ２０４は、入力ブロック２０９で文字「ａ」が受信される場合、高信号を出力するように設定できる。
【００１６】
一例では、入力ブロック２０９、出力ブロック２１３、および／またはプログラミングインタフェース２１１はレジスタとして実装でき、そのレジスタへの書込みがそれぞれの要素に対して、またはそれぞれの要素から、データを提供できるようにする。その結果、プログラミングインタフェース２１１に対応するレジスタ内に格納されているイメージからのビットが、ＳＭＥ  ２０４、２０５上にロードできる。図２は、ブロック２０２、入力ブロック２０９、出力ブロック２１３、およびブロック間スイッチ２０３の間に特定数の導体（例えば、ワイヤ、線）を示しているが、他の例では、もっと少ないかまたは多い導体が使用できることが理解されるはずである。
【００１７】
図３は、ブロック２０２の一例を示す。ブロック２０２は、プログラム可能ブロック内スイッチ２０８と選択的に共に結合できる複数の行２０６を含むことができる。その結果、行２０６は、ブロック間スイッチ２０３で、別のブロック２０２内の別の行２０６と選択的に結合できる。一例では、バッファ２０１は、ブロック間スイッチ２０３への／ブロック間スイッチ２０３からの信号のタイミングを制御するために含まれる。行２０６は、本明細書で２つのグループ（ＧＯＴ：ｇｒｏｕｐ  ｏｆ  ｔｏｗ）２１０として参照される要素のペアに編成された複数のＳＭＥ  ２０４、２０５を含む。一例では、ブロック２０２は、１６個の行２０６を含む。
【００１８】
図４は、行２０６の一例を示す。ＧＯＴ  ２１０は、プログラム可能行内スイッチ２１２によって、行２０６内の他のＧＯＴ  ２１０および任意の他の要素２２４と選択的に結合できる。また、ＧＯＴ  ２１０は、ブロック内スイッチ２０８で他の行２０６内の他のＧＯＴ  ２１０と、またはブロック間スイッチ２０３で他のブロック２０２内の他のＧＯＴ  ２１０とも結合できる。一例では、ＧＯＴ  ２１０は、第１および第２の入力２１４、２１６ならびに出力２１８を有する。第１の入力２１４は、ＧＯＴ  ２１０の第１のＳＭＥ  ２０４と結合され、第２の入力２１４は、ＧＯＴ  ２１０の第２のＳＭＥ  ２０４と結合される。
【００１９】
一例では、行２０６は、第１および第２の複数の行相互接続導体２２０、２２２を含む。一例では、ＧＯＴ  ２１０の入力２１４、２１６は、１つまたは複数の行相互接続導体２２０、２２２に結合でき、出力２１８は、１つの行相互接続導体２２０、２２２に結合できる。一例では、第１の複数の行相互接続導体２２０は、行２０６内の各ＧＯＴ  ２１０の各ＳＭＥ  ２０４に結合できる。第２の複数の行相互接続導体２２２は、行２０６内の各ＧＯＴ  ２１０の１つのＳＭＥ  ２０４に結合できるが、そのＧＯＴ  ２１０の他のＳＭＥ  ２０４には結合できない。一例では、第２の複数の行相互接続導体２２２の半分の第１の方が、行２０６内のＳＭＥ  ２０４の半分の第１の方（各ＧＯＴ  ２１０からの１つのＳＭＥ  ２０４）と結合でき、第２の複数の行相互接続導体２２２の半分の第２の方が、行２０６内のＳＭＥ  ２０４の半分の第２の方（各ＧＯＴ  ２１０からのその他のＳＭＥ  ２０４）と結合できる。第２の複数の行相互接続導体２２２とＳＭＥ  ２０４、２０５との間の制限された接続性は、本明細書では「パリティ」と呼ばれる。
【００２０】
一例では、行２０６は、カウンタ、プログラム可能ブール論理要素、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、プログラム可能プロセッサ（例えば、マイクロプロセッサ）、および他の要素などの、専用要素２２４も含むことができる。追加として、一例では、専用要素２２４は、異なる行２０６内では異なる。例えば、ブロック２０２内の４つの行２０６が、専用要素２２４としてブール論理を含むことができ、ブロック２０２内の他の８つの行２０６が、専用要素２２４としてカウンタを含むことができる。
【００２１】
一例では、専用要素２２４は、カウンタ（本明細書ではカウンタ２２４とも呼ばれる）を含む。一例では、カウンタ２２４は、１２ビットのプログラマブル減算カウンタを含む。１２ビットのプログラマブルカウンタ２２４は、カウント入力、リセット入力、およびゼロカウント出力を有する。カウント入力は、アサート時に、カウンタ２２４の値を１だけ減算する。リセット入力は、アサート時に、カウンタ２２４に、関連したレジスタから初期値をロードさせる。１２ビットのカウンタ２２４に対して、最大で１２ビット数が初期値としてロードできる。カウンタ２２４の値がゼロ（０）に減算されると、ゼロカウント出力がアサートされる。カウンタ２２４は、少なくとも２つのモード、パルスおよび保留（ｈｏｌｄ）を有する。カウンタ２２４がパルスモードに設定されている場合、カウンタ２２４がゼロに減算されると、第１のクロック周期中にゼロカウント出力がアサートされ、また、次のクロック周期では、たとえカウント入力がアサートされても、ゼロカウント出力はもはやアサートされない。この状態は、カウンタ２２４が、アサートされているリセット入力によってリセットされるまで、継続する。カウンタ２２４が保留モードに設定されている場合、カウンタ２２４がゼロに減算されると、第１のクロック周期中にゼロカウント出力がアサートされ、また、カウント入力がアサートされる場合、カウンタ２２４が、アサートされているリセット入力によってリセットされるまで、アサートされたままである。
【００２２】
図５は、ＧＯＴ  ２１０の一例を示す。ＧＯＴ  ２１０は、入力２１４、２１６を有し、かつＯＲゲート２３０および３入力マルチプレクサ２４２に結合されたそれらの出力２２６、２２８を有する、第１のＳＭＥ  ２０４および第２のＳＭＥ  ２０５を含む。３入力マルチプレクサ２４２は、ＧＯＴ  ２１０の出力２１８を、第１のＳＭＥ  ２０４、第２のＳＭＥ  ２０５、またはＯＲゲート２３０のいずれかに結合するように設定できる。ＯＲゲート２３０は、ＧＯＴ  ２１０の共通の出力２１８を形成するため、出力２２６、２２８の両方を共に結合するために使用できる。一例では、前述したように、第１および第２のＳＭＥ  ２０４、２０５はパリティを示し、そこで、第１のＳＭＥ  ２０４の入力２１４は、行相互接続導体２２２のいくつかに結合でき、第２のＳＭＥ  ２０５の入力２１６は、他の行相互接続導体２２２に結合できる。一例では、ＧＯＴ  ２１０内の２つのＳＭＥ  ２０４、２０５は、スイッチ２４０の一方または両方を設定することにより、カスケード接続できるか、かつ／またはそれら自身にループバックできる。ＳＭＥ  ２０４、２０５は、ＳＭＥ  ２０４、２０５の出力２２６、２２８を他のＳＭＥ  ２０４、２０５の入力２１４、２１６に結合することにより、カスケード接続できる。ＳＭＥ  ２０４、２０５は、出力２２６、２２８をそれら自身の入力２１４、２１６に結合することにより、自身にループバックできる。その結果、第１のＳＭＥ  ２０４の出力２２６は、第１のＳＭＥ  ２０４の入力２１４および第２のＳＭＥ  ２０５の入力２１６のどちらとも結合できないか、一方または両方と結合できる。
【００２３】
一例では、状態機械要素２０４、２０５は、検出線２３４と平行に結合された、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）でしばしば使用されるような、複数のメモリセル２３２を含む。１つのかかるメモリセル２３２は、高値または低値（例えば、１または０）のいずれかに対応するものなどの、データ状態に設定できるメモリセルを含む。メモリセル２３２の出力は、検出線２３４に結合され、メモリセル２３２への入力は、データストリーム線２３６上のデータに基づいて、信号を受信する。一例では、データストリーム線２３６上の入力が、メモリセル２３２の１つを選択するために復号される。選択されたメモリセル２３２は、その格納されたデータ状態を出力として検出線２３４上に提供する。例えば、データ入力ポート２０９で受信されたデータがデコーダ（図示せず）に提供でき、デコーダは、データストリーム線２３６のうちの１本を選択できる。一例では、デコーダは、ＡＳＣＩＩ文字を２５６ビットのうちの１つに変換できる。
【００２４】
メモリセル２３２は、それ故、メモリセル２３２が高値に設定され、かつ、データストリーム線２３６上のデータがメモリセル２３２に対応する場合、高信号を検出線２３４に出力する。データストリーム線２３６上のデータがメモリセル２３２に対応し、メモリセル２３２が低値に設定されている場合、メモリセル２３２は、低信号を検出線２３４に出力する。メモリセル２３２からの検出線２３４上への出力は、検出回路２３８によって検知される。一例では、入力線２１４、２１６上の信号は、それぞれの検出回路２３８をアクティブ状態または非アクティブ状態のいずれかに設定する。非アクティブ状態に設定されると、検出回路２３８は、それぞれの検出線２３４上の信号にかかわらず、低信号をそれぞれの出力２２６、２２８上に出力する。アクティブ状態に設定されると、高信号がそれぞれのＳＭＥ  ２０４、２０５のメモリセル２３２の１つから検出される場合、検出回路２３８は、高信号をそれぞれの出力線２２６、２２８上に出力する。アクティブ状態にある場合、それぞれのＳＭＥ  ２０４、２０５のメモリセル２３２の全てからの信号が低ければ、検出回路２３８は、低信号をそれぞれの出力線２２６、２２８上に出力する。
【００２５】
一例では、ＳＭＥ  ２０４、２０５は、メモリセル２３２を含み、各メモリセル２３２は、異なるデータストリーム線２３６に結合される。それ故、ＳＭＥ  ２０４、２０５は、選択された１つまたは複数のデータストリーム線２３６がその上に高信号を有する場合、高信号を出力するようにプログラムされ得る。例えば、ＳＭＥ  ２０４は、第１のメモリセル２３２（例えば、ビット０）を高に設定し、他の全てのメモリセル２３２（例えば、ビット１〜２５５）を低に設定できる。それぞれの検出回路２３８がアクティブ状態にあるとき、ＳＭＥ  ２０４は、ビット０に対応するデータストリーム線２３６がその上に高信号を有する場合、高信号を出力２２６上に出力する。他の例では、複数のデータストリーム線２３６のうちの１本が、適切なメモリセル２３２を高値に設定することにより、その上に高信号を有する場合、ＳＭＥ  ２０４は、高信号を出力するように設定できる。
【００２６】
一例では、メモリセル２３２は、関連したレジスタからビットを読み取ることにより、高値または低値に設定できる。その結果、ＳＭＥ  ２０４は、コンパイラによって作成されたイメージをレジスタ内に格納し、レジスタ内のビットを関連したメモリセル２３２にロードすることにより、プログラムされ得る。一例では、コンパイラによって作成されたイメージは、高および低（例えば、１および０）ビットのバイナリイメージを含む。イメージは、ＳＭＥ  ２０４、２０５をカスケード接続することにより、ＦＳＭエンジン２００をＦＳＭとして動作するようにプログラムできる。例えば、第１のＳＭＥ  ２０４は、検出回路２３８をアクティブ状態に設定することにより、アクティブ状態に設定できる。第１のＳＭＥ  ２０４は、ビット０に対応するデータストリーム線２３６がその上に高信号を有する場合、高信号を出力するように設定できる。第２のＳＭＥ  ２０５は、最初は非アクティブ状態に設定できるが、アクティブなとき、ビット１に対応するデータストリーム線２３６がその上に高信号を有する場合、高信号を出力するように設定できる。第１のＳＭＥ  ２０４および第２のＳＭＥ  ２０５は、第１のＳＭＥ  ２０４の出力２２６を第２のＳＭＥ  ２０５の入力２１６に結合するように設定することにより、カスケード接続できる。従って、高信号が、ビット０に対応するデータストリーム線２３６上で検知される場合、第１のＳＭＥ  ２０４は、高信号を出力２２６上に出力し、第２のＳＭＥ  ２０５の検出回路２３８をアクティブ状態に設定する。高信号が、ビット１に対応するデータストリーム線２３６上で検知される場合、第２のＳＭＥ  ２０５は、別のＳＭＥ  ２０５をアクティブにするため、またはＦＳＭエンジン２００からの出力のため、高信号を出力２２８上に出力する。
【００２７】
図６は、コンパイラがソースコードを、並列マシンをプログラムするように構成されたイメージに変換するための方法６００の一例を示す。方法６００は、ソースコードを構文木に解析すること（ブロック６０２）、構文木をオートマトンに変換すること（ブロック６０４）、オートマトンを最適化すること（ブロック６０６）、オートマトンをネットリストに変換すること（ブロック６０８）、ネットリストをハードウェア上に配置すること（ブロック６１０）、ネットリストをルーティングすること（ブロック６１２）、および結果として生じるイメージを公開すること（ブロック６１４）を含む。
【００２８】
一例では、コンパイラは、ソフトウェア開発者がＦＳＭエンジン６００上でＦＳＭを実装するために、イメージを作成できるようにする、アプリケーションプログラミングインタフェース（ＡＰＩ）を含む。コンパイラは、ソースコード内の正規表現の入力セットを、ＦＳＭエンジン６００をプログラムするように構成されているイメージに変換するための方法を提供する。コンパイラは、フォンノイマン型アーキテクチャを有するコンピュータ用の命令によって実装できる。これらの命令は、コンピュータ上のプロセッサにコンパイラの機能を実装させることができる。例えば、命令は、プロセッサによって実行される場合、プロセッサがアクセス可能なソースコード上のブロック６０２、６０４、６０６、６０８、６１０、６１２、および６１４に記載する動作をプロセッサに実行させることができる。フォンノイマン型アーキテクチャを有するコンピュータ例が図９に示され、以下で説明される。
【００２９】
一例では、ソースコードは、シンボルグループ内のシンボルのパターンを識別するための検索文字列を記述する。検索文字列を記述するため、ソースコードは、複数の正規表現（ｒｅｇｅｘ）を含むことができる。正規表現は、シンボル検索パターンを記述するための文字列であり得る。正規表現は、プログラミング言語、テキストエディタ、ネットワークセキュリティ、およびその他などの、様々なコンピュータドメインで幅広く使用されている。一例では、コンパイラによってサポートされる正規表現は、非構造化データを検索するための検索基準を含む。非構造化データは、自由形式のデータを含み得、データ内のワード（ｗｏｒｄ）に適用された指標付けがない。ワードは、データ内に、印刷可能および印字不能な、バイトの任意の組合せを含み得る。一例では、コンパイラは、Ｐｅｒｌ（例えば、Ｐｅｒｌ互換正規表現（ＰＣＲＥ））、ＰＨＰ、Ｊａｖａ（登録商標）、および．ＮＥＴ言語を含む、正規表現を実装するための、複数の異なるソースコード言語をサポートできる。
【００３０】
図６を再度参照すると、ブロック６０２で、コンパイラは、ソースコードを解析して、関係的に結合された演算子の配置を形成でき、そこでは、異なるタイプの演算子は、ソースコードによって実装された異なる機能（例えば、ソースコード内の正規表現によって実装された異なる機能）に対応する。ソースコードの解析により、ソースコードの一般的表現を作成できる。一例では、一般的表現は、ソースコード内の正規表現の、構文木として知られているツリーグラフの形でコード化された表現を含む。本明細書で説明する例は、そのアレンジメントを構文木（「抽象構文木」としても知られている）と呼ぶ。しかし、他の例では、具象構文木または他のアレンジメントも使用できる。
【００３１】
前述したように、コンパイラは、複数言語のソースコードをサポートできるので、解析は、その言語にかかわらず、ソースコードを、例えば、構文木などの、言語固有でない表現に変換する。従って、コンパイラによるさらなる処理（ブロック６０４、６０６、６０８、６１０）は、ソースコードの言語にかかわらず、共通の入力構造から動作できる。
【００３２】
前述したように、構文木は、関係的に結合されている複数の演算子を含む。構文木は、複数の異なるタイプの演算子を含むことができる。すなわち、異なる演算子は、ソースコード内の正規表現によって実装された異なる機能に対応できる。
【００３３】
ブロック６０４で、構文木はオートマトンに変換される。オートマトン（有限状態オートマトン、有限状態機械（ＦＳＭ）、または単に状態機械とも呼ばれる）は、状態、状態間の遷移、および動作の表現であり、決定性または非決定性として分類できる。決定性オートマトンは、一時に、単一経路の実行を有するが、他方、非決定性オートマトンは、複数の並列経路の実行を有する。オートマトンは、複数の状態を含む。構文木をオートマトンに変換するために、構文木内の演算子および演算子間の関係は、状態間の遷移をもつ状態に変換される。一例では、オートマトンは、ＦＳＭエンジン２００のハードウェアに一部基づいて変換され得る。
【００３４】
一例では、オートマトンに対する入力シンボルは、アルファベット、０〜９の数字、および他の印刷可能な文字のシンボルを含む。一例では、入力シンボルは、バイト値０〜２５５で表される。一例では、オートマトンは、グラフのノードが状態の集合に対応する有向グラフとして表され得る。一例では、入力シンボルαを受けての状態ｐから状態ｑへの遷移、すなわち、δ（ｐ，α）は、ノードｐからノードｑへの有向接続によって示される。一例では、オートマトンによって受け入れられた（例えば、一致した）言語は、オートマトンに連続して入力される場合に、最終状態に達し得る全ての可能な文字列の集合である。オートマトンによって受け入れられた言語内の各文字列は、開始状態から１つまたは複数の最終状態への経路を辿る。
【００３５】
一例では、入力シンボル範囲外の特別な遷移シンボルが、オートマトン内で使用され得る。これらの特別な遷移シンボルは、例えば、専用要素２２４の使用を可能にするために使用できる。さらに、特別な遷移シンボルは、入力シンボル以外の何かを受けて起こる遷移を提供するために使用できる。例えば、特別な遷移シンボルは、第２の状態および第３の状態の両方が有効な場合に、第１の状態が有効にされる（例えば、遷移される）ことを示し得る。その結果、第１の状態は、第２の状態および第３の状態の両方がアクティブにされる場合にアクティブにされ、また、第１の状態への遷移は、入力シンボルに直接依存しない。特に、第２の状態および第３の状態の両方が有効な場合に、第１の状態が有効にされることを示す特別な遷移シンボルは、例えば、専用要素２２４としてのブール論理によって実行されるブールＡＮＤ関数を表すために使用できる。一例では、特別な遷移シンボルは、カウンタ状態がゼロに達したこと、従って下流の状態への遷移を示すために使用できる。
【００３６】
一例では、オートマトンは、汎用状態ならびに専用状態を含む。汎用状態および専用状態は、コンパイラがそれに対して機械コードを生成している対象デバイスによってサポートされる汎用要素および専用要素に対応する。異なるタイプの対象デバイスは、異なるタイプの汎用要素ならびに１つまたは複数の異なるタイプの専用要素をサポートできる。汎用要素は、通常、幅広い範囲の機能を実装するために使用でき、他方、専用要素は、通常、もっと狭い範囲の機能を実装するために使用できる。しかし、一例では、専用要素は、例えば、その狭い範囲の機能内でより大きな効果を得ることができる。その結果、専用要素は、例えば、対象デバイスにおいて特定の機能を実装するために必要なマシンサイクルまたはマシンリソースを削減するために使用できる。いくつかの例では、対象デバイスは、単に専用要素をサポートし、そこで、複数の異なるタイプの専用要素がサポートされる。
【００３７】
コンパイラがＦＳＭエンジン２００に対して機械コードを生成している例では、汎用状態はＳＭＥ  ２０４、２０５に対応でき、汎用状態はそれに応じて本明細書では「ＳＭＥ状態」と呼ばれる。さらに、コンパイラがＦＳＭエンジン２００に対して機械コードを生成している場合、専用状態の一例は、カウンタ２２４に対応でき、それに応じて本明細書では「カウンタ状態」と呼ばれる。専用状態の別の例は、論理要素（例えば、プログラム可能論理、ブール論理）に対応でき、それに応じて本明細書では「論理状態」と呼ばれる。一例では、オートマトン内のＳＭＥ状態は、ＳＭＥにマッピングしないオートマトンの開始状態を除いて、ＦＳＭエンジン２００内のＳＭＥ（例えば、ＳＭＥ  ２０４、２０５）に１：１でマッピングする。専用要素２２４は、専用状態に１：１でマッピングすることもあれば、しないこともある。
【００３８】
一例では、オートマトンは、グルシコフの方法などの、標準的な方法の１つを使用して構築できる。一例では、オートマトンは、εのない（ε−ｆｒｅｅ）均質な（ｈｏｍｏｇｅｎｏｕｓ）オートマトンであり得る。均質なオートマトンは、一般的なオートマトン定義に関する制限である。その制限は、１つの状態に入る全ての遷移が同じ入力シンボルを受けて起こらなければならないことを必要とする。均質なオートマトンは、以下の条件を満足する：任意の２つの状態、ｑ１およびｑ２に対して、ｒ∈δ（ｑ１）∩δ（ｑ２）であれば、Ｓ１＝｛ａ｜ａ∈Σ，ｒ∈δ（ｑ１，ａ）｝、Ｓ２＝｛ａ｜ａ∈Σ，ｒ∈δ（ｑ２，ａ）｝を示す。Ｓ１は、ｑ１がｒに遷移できるようにするシンボルの集合であり、Ｓ２は、ｑ２がｒに遷移できるようにするシンボルの集合である。ここで、Ｓ１＝Ｓ２、すなわち、状態ｑ１および状態ｑ２が両方とも状態ｒに遷移する場合、均質な制限は、遷移が同じシンボルを受けて起こらなければならないことである。
【００３９】
図７Ａおよび図７Ｂは、構文木から作られたオートマトンの例を示す。図７Ａは、均質なオートマトン７００を示し、図７Ｂは非均質なオートマトン７０２を示す。
【００４０】
均質なオートマトン７００は、入力シンボル「ａ」を受けて状態７０６に遷移する開始状態７０４から始まる。状態７０６は、入力シンボル「ｂ」を受けて状態７０８に遷移し、状態７０８は、入力シンボル「ｂ」を受けて状態７１０に遷移する。状態７１０は、入力シンボル「ｃ」を受けて状態７１２に遷移する。状態７１２は、入力シンボル「ｂ」を受けて状態７１０に遷移し、入力シンボル「ｄ」を受けて状態７１４に遷移する。状態７１４は、最終状態であり、二重丸によってそのようなものとして識別される。一例では、最終状態のアクティブ化はオートマトンに対応する正規表現の一致を示すので、最終状態は、重要であり得る。所与の状態に対する全ての入側の遷移（ｉｎ−ｔｒａｎｓｉｔｉｏｎ）（例えば、状態への遷移）は同じシンボルを受けて起こるので、オートマトン７００は、均質なオートマトンである。特に、状態７１０は、（状態７０８および状態７１２からの）２つの入側の遷移を有し、両方の入側の遷移が同じシンボル「ｂ」を受けて起こる。
【００４１】
非均質なオートマトン７０２は、均質なオートマトン７００と同じ状態７０４、７０６、７０８、７１０、７１２、および７１４を含むが、状態７１２は、入力シンボル「ｅ」を受けて状態７１０に遷移する。その結果、状態７１０は２つの異なるシンボル、すなわち、状態７０８からのシンボル「ｂ」および状態７１２からのシンボル「ｅ」、を受けての入側の遷移を有するので、オートマトン７０２は非均質である。
【００４２】
ブロック６０６で、オートマトンが構築された後、オートマトンが、とりわけ、その複雑性およびサイズを縮小するように最適化される。オートマトンは、重複する状態を結合することにより最適化できる。
【００４３】
ブロック６０８で、オートマトンがネットリストに変換される。オートマトンのネットリストへの変換は、オートマトンの状態をＦＳＭエンジン２００のハードウェア要素（例えば、ＳＭＥ  ２０４、２０５、ＧＯＴ  ２１０、専用要素２２４）のインスタンスにマッピングし、インスタンス間の関係を決定する。一例では、ネットリストは、複数のインスタンスを含み、各インスタンスは、ＦＳＭエンジン２００のハードウェア要素に対応する（例えば、表す）。各インスタンスは、別のインスタンスへの接続のための１つまたは複数の接続点（本明細書では「ポート」とも呼ばれる）を持つことができる。ネットリストは、インスタンスに対応するハードウェア要素を結合する導体に対応する（例えば、表す）インスタンスのポート間の複数の接続も含む。一例では、ネットリストは、異なるタイプのハードウェア要素に対応する異なるタイプのインスタンスを含む。例えば、ネットリストは、汎用ハードウェア要素に対応する汎用インスタンスおよび専用ハードウェア要素に対応する専用インスタンスを含むことができる。一例として、汎用状態は汎用インスタンスに変換することができ、専用状態は、専用インスタンスに変換することができる。一例では、汎用インスタンスは、ＳＭＥ  ２０４、２０５に対するＳＭＥインスタンス、およびＳＭＥのグループを含むハードウェア要素に対するＳＭＥグループインスタンスを含むことができる。一例では、ＳＭＥグループインスタンスは、ＧＯＴ  ２１０に対応するＧＯＴインスタンスを含むが、他の例では、ＳＭＥグループインスタンスは、３つ以上のＳＭＥのグループを含むハードウェア要素に対応できる。専用インスタンスは、カウンタ２２４に対するカウンタインスタンス、および論理要素２２４に対する論理インスタンスを含み得る。ＧＯＴ  ２１０は２つのＳＭＥ  ２０４、２０５を含むので、ＧＯＴインスタンスは、２つのＳＭＥインスタンスを含む。
【００４４】
ネットリストを作成するために、オートマトン内の状態が、ネットリスト内のインスタンスに変換されるが、開始状態が対応するインスタンスを持たないことを除く。ＳＭＥ状態は、ＧＯＴインスタンスに変換され、カウンタ状態はカウンタインスタンスに変換される。その上、第１のインスタンスから第２のインスタンスへの対応する接続が、第１のインスタンスに対応する状態から第２のインスタンスに対応する状態への遷移に対して作成される。ＦＳＭエンジン２００内のＳＭＥ  ２０４、２０５が、ＧＯＴ  ２１０と呼ばれるペアにグループ化されるので、コンパイラは、ＳＭＥ状態を、ＧＯＴインスタンス内のペアにグループ化できる。ＧＯＴ  ２１０の物理的設計に起因して、ＳＭＥインスタンスの全てがＧＯＴ  ２１０を形成するために共にペア形成できるわけではない。その結果、コンパイラは、どのＳＭＥ状態がＧＯＴ  ２１０内で共にマッピングできるかを判断し、次いで、その判断に基づいてＳＭＥ状態をＧＯＴインスタンスにペア形成する。
【００４５】
図５に示すように、ＧＯＴ  ２１０は、ＳＭＥ  ２０４、２０５に関する出力制約を有する。特に、ＧＯＴ  ２１０は、２つのＳＭＥ  ２０４、２０５によって共有される単一の出力２１８を有する。その結果、ＧＯＴ  ２１０内の各ＳＭＥ  ２０４、２０５は、出力２１８を独立して駆動できない。この出力制約は、どのＳＭＥ状態がＧＯＴインスタンス内で共にペア形成できるかを制限する。特に、外部のＳＭＥ状態（例えば、ＧＯＴインスタンスの外部のＳＭＥに対応するＳＭＥ状態）の異なる集合を駆動する（例えば、遷移する、アクティブにする）２つのＳＭＥ状態は、ＧＯＴインスタンス内で共にペア形成できない。しかし、ＧＯＴ  ２１０は、この機能をスイッチ２４０で内部で提供できるので、この制約は、２つのＳＭＥ状態が互いに駆動するか、または自己ループを駆動するかを制限しない。ＦＳＭエンジン２００は、ＳＭＥ  ２０４、２０５に対応する特定の物理的設計を有するとして説明されているが、他の例では、ＳＭＥ  ２０４、２０５は、他の物理的設計を有し得る。例えば、ＳＭＥ  ２０４、２０５は、ＳＭＥ  ２０４、２０５の３つ以上のセットに共にグループ化され得る。さらに、いくつかの例では、ＳＭＥ  ２０４、２０５からの出力２２６、２２８に関する制限の有無にかかわらず、ＳＭＥ  ２０４、２０５に対する入力２１４、２１６に関する制限があり得る。
【００４６】
しかし、いずれにせよ、コンパイラは、ＦＳＭエンジン２００の物理的設計に基づいてどのＳＭＥ状態が共にグループ化できるかを判断する。その結果、ＧＯＴインスタンスに対して、コンパイラは、ＧＯＴ  ２１０内のＳＭＥ  ２０４、２０５に対する出力制約に基づいて、どのＳＭＥ状態が共にペア形成できるかを判断する。一例では、ＧＯＴ  ２１０の物理的設計に基づいて、ＧＯＴ  ２１０を形成するために、２つのＳＭＥ状態が共にペア形成できる５つの状況がある。
【００４７】
第１および第２のＳＭＥ状態がＧＯＴ  ２１０内に共にペア形成できる第１の状況は、第１または第２のＳＭＥ状態のどちらも最終状態でなく、かつ、第１および第２のＳＭＥ状態の一方が、第１または第２のＳＭＥ状態以外のどの状態も駆動しない場合に起こる。一例として、第１の状態が第２の状態に遷移する場合、第１の状態が第２の状態を駆動すると考えられる。この第１の状況が起こる場合、最大で、第１および第２のＳＭＥ状態のうちの１つが外部の状態を駆動している。その結果、第１および第２のＳＭＥ状態が、ＧＯＴ  ２１０の出力制約によって影響を受けることなく、共にペア形成できる。しかし、ＳＭＥ  ２０４、２０５を内部で互いに結合するＧＯＴ  ２１０の能力に起因して、第１および第２のＳＭＥ状態は、互いに駆動するか、または自身を駆動するために自己ループすることが可能にされる。オートマトンの用語では、第１のＳＭＥ状態（状態ｑ１に対応する）および第２のＳＭＥ状態（状態ｑ２に対応する）は、ｑ１およびｑ２のどちらも最終状態ではなく、かつδ（ｑ１）−｛ｑ１，ｑ２｝が空であるか、またはδ（ｑ２）−｛ｑ１，ｑ２｝が空である場合、共にペア形成できる。
【００４８】
第１および第２のＳＭＥ状態がＧＯＴ  ２１０内に共にペア形成できる第２の状況は、第１または第２のＳＭＥ状態のどちらもオートマトン内の最終状態でない場合、ならびに、第１および第２のＳＭＥ状態の両方が同じ外部状態を駆動する場合に起こる。本明細書では、外部状態は、例えば、ＧＯＴ  ２１０インスタンス内の第１および第２のＳＭＥ状態が互いに駆動するか、または自己ループするかに関わらず、ＧＯＴインスタンスの外部の状態に対応する。ここで再度、第１および第２のＳＭＥ状態が同じ外部状態を駆動するので、ＧＯＴ  ２１０の出力制約は、第１および第２のＳＭＥ状態に影響を及ぼさない。また、ＳＭＥ  ２０４、２０５を内部で互いに結合するＧＯＴ  ２１０の能力に起因して、同じ状態の駆動に関する制限が、第１の状態および第２の状態が互いに駆動するか、または自己ループするかを含まない。オートマトンの用語を使用すると、第１のＳＭＥ状態（状態ｑ１に対応する）および第２のＳＭＥ状態（状態ｑ２に対応する）は、ｑ１およびｑ２のどちらも最終状態ではなく、かつδ（ｑ１）−｛ｑ１，ｑ２｝＝δ（ｑ２）−｛ｑ１，ｑ２｝である場合に、共にペア形成できる。
【００４９】
第１および第２のＳＭＥ状態がＧＯＴ  ２１０内に共にペア形成できる第３および第４の状況は、第１および第２のＳＭＥ状態の一方が最終状態であり、かつ、第１および第２のＳＭＥ状態の他方がどの外部状態も駆動しない場合に起こる。すなわち、第１のＳＭＥ状態（状態ｑ１に対応する）および第２のＳＭＥ状態（状態ｑ２に対応する）は、ｑ１が最終状態であり、かつδ（ｑ２）−｛ｑ１，ｑ２｝が空であるか、またはｑ２が最終状態に対応し、かつδ（ｑ１）−｛ｑ１，ｑ２｝が空である場合、共にペア形成できる。最終状態は正規表現との一致の表示を出力するので、最終状態に対応するＳＭＥ状態は、一致を示すためにＧＯＴ  ２１０の出力２１８を独立して使用すべきである。その結果、ＧＯＴ  ２１０内の他のＳＭＥ状態は、出力２１８の使用を許可されない。
【００５０】
第１および第２のＳＭＥ状態がＧＯＴ  ２１０内に共にペア形成できる第５の状況は、第１および第２のＳＭＥ状態の両方がオートマトン内の最終状態に対応し、かつ、第１および第２のＳＭＥ状態の両方が同じ外部状態を駆動する場合に起こる。オートマトンの用語を使用すると、第１の状態（状態ｑ１に対応する）および第２のＳＭＥ状態（状態ｑ２に対応する）は、ｑ１およびｑ２の両方が最終状態であり、かつδ（ｑ１）−｛ｑ１，ｑ２｝＝δ（ｑ２）−｛ｑ１，ｑ２｝である場合に、共にペア形成できる。
【００５１】
１つまたは複数のＳＭＥ状態が共にペア形成できるかどうかをコンパイラが判断すると、コンパイラは、そのＳＭＥ状態をＧＯＴインスタンスにペア形成する。一例では、コンパイラは、ＳＭＥ状態が、ＧＯＴインスタンスを形成するためにペア形成することができると判断される順に、ＳＭＥ状態をＧＯＴインスタンスにペア形成する。すなわち、２つの特定のＳＭＥ状態が共にペア形成することができると判断されると、これら２つのＳＭＥ状態がＧＯＴインスタンスにペア形成できる。２つのＳＭＥ状態がペア形成されてＧＯＴインスタンスを形成すると、これらペア形成されたＳＭＥ状態は、他のＳＭＥ状態とペア形成するために利用できない。このプロセスは、ペア形成するＳＭＥ状態がもうなくなるまで継続され得る。
【００５２】
一例では、コンパイラは、どのＳＭＥをＧＯＴインスタンスに共にペア形成できるかを判断するためにグラフ理論を使用する。特定のＳＭＥのみが共にペア形成できるので、あるＳＭＥのペア形成は、結果として、他のＳＭＥがそれら自身のＧＯＴインスタンス内で実装される必要があり、ＧＯＴインスタンス内の他のＳＭＥ位置が未使用で、従って無駄になり得る。グラフ理論は、ネットリストのＧＯＴインスタンス内の未使用のＳＭＥインスタンスの数を減らすことにより、ＧＯＴ  ２１０内でのＳＭＥ利用（例えば、未使用のＳＭＥの数を減らす）を最適化するために使用できる。グラフ理論を使用するため、コンパイラは、まず、前述したＦＳＭエンジン２００の物理的設計に従って、ＳＭＥ状態間で全ての可能なペア形成を判断する。コンパイラは、次いで、グラフのバーテックス（ｖｅｒｔｅｘ）がＳＭＥ状態に対応し、グラフのエッジがＳＭＥ状態の可能なペア形成に対応するグラフを作成する。すなわち、２つのＳＭＥ状態がＧＯＴインスタンス内で共にペア形成することができると判断されると、その２つの対応するバーテックスがエッジと結合される。従って、グラフは、ＳＭＥ状態の全ての可能なペア形成を含む。
【００５３】
コンパイラは、次いで、どのＳＭＥ状態をＧＯＴ  ２１０内で共にペア形成するかを識別するため、グラフに対して、一致するバーテックスを見つけることができる。すなわち、グラフの一致するバーテックス間のどの２つのエッジも共通のバーテックスを共有しないように、コンパイラがエッジ（および従ってバーテックスのペア）を識別する。一例では、コンパイラは、グラフに対して最大限のマッチング（ｍａｘｉｍａｌ  ｍａｔｃｈｉｎｇ）を見つけることができる。別の例では、コンパイラは、グラフに対して最大マッチング（ｍａｘｉｍｕｍ  ｍａｔｃｈｉｎｇ）を見つけることができる。最大マッチングは、できる限り多くのエッジを含むマッチングである。多数の最大マッチングがあり得る。一般グラフの最大マッチングを見つける問題は、多項式時間で解決できる。
【００５４】
全ての一致するバーテックスが（例えば、最大マッチングとして）識別されると、一致するバーテックスに対応するＳＭＥ状態の各ペアが、ＧＯＴインスタンスにマッピングされる。一致しないバーテックスに対応するＳＭＥ状態は、それら自身のＧＯＴインスタンスにマッピングされる。すなわち、一致しないバーテックスに対応するＳＭＥ状態は、ＧＯＴインスタンス内のＳＭＥ位置の１つにマッピングされ、ＧＯＴインスタンス内の他方のＳＭＥ位置は未使用となる。その結果、ネットリストＮおよびその一致するバーテックスの対応する集合Ｍを前提として、使用されたＮのＧＯＴインスタンスの数が｜Ｑ｜−１−｜Ｍ｜に等しく、式中Ｑはオートマトンの状態の集合であり、「−１」は、この例では、オートマトンの開始状態がＳＭＥ状態に対応しないからである。
【００５５】
一例では、Ｇの最大マッチングＭから構築されているネットリストＮは、最小数のＧＯＴインスタンスを使用する。これは、以下によって示され得る：さらに少ない数のＧＯＴインスタンスを使用する別のネットリストＮ´が存在する場合、対応する一致はＭ´として示される。Ｎ´のＧＯＴインスタンスの数が｜Ｑ｜−１−｜Ｍ´｜に等しいので、｜Ｍ｜<｜Ｍ´｜となる。これは、Ｍが最大マッチングであるという事実と矛盾する。従って、ネットリストＮは、ＧＯＴインスタンスの最小数を使用する。
【００５６】
ＳＭＥ状態がＧＯＴインスタンスにペア形成されると、ＧＯＴインスタンス、カウンタインスタンス、および論理インスタンスが、オートマトン内の状態間の遷移に従って、結合される。各ＧＯＴ  ２１０は、単一の出力を有するので、ネットリスト内の各ＧＯＴインスタンスは、他のインスタンスに結合するための単一の出力ポートを有する。その結果、第１のＧＯＴインスタンス内のどちらか一方のＳＭＥ状態が第２のＧＯＴインスタンス内のＳＭＥ状態を駆動する場合、第１のＧＯＴインスタンスの出力ポートが第２のＧＯＴインスタンスの入力に結合される。
【００５７】
図８Ａおよび図８Ｂは、図７Ａの均質なオートマトン７００から作成されたネットリスト例８００、８０２を示す。ＳＭＥインスタンス８０６、８０８、８１０、８１２、および８１４は、オートマトン７００内の状態７０６、７０８、７１０、７１２、および７１４に対応する。オートマトンの開始状態７０４は、前述したように、インスタンスに対応しない。
【００５８】
ネットリスト８００は、非最適のネットリストの例である。ネットリスト８００は、４つのＧＯＴインスタンス８１６を使用するが、３つのＳＭＥインスタンス８１８を未使用のまま残している。しかし、ネットリスト８０２は、最大マッチングを識別するために、グラフ理論を使用して作成された最適なネットリストの例である。ネットリスト８０２は、３つのＧＯＴインスタンス８１６を使用し、未使用のＳＭＥインスタンス８１８が１つある。ネットリスト８０２では、インスタンス８１０は、ＧＯＴインスタンス内部の接続（例えば、スイッチ２４０を介して）で、インスタンス８１２に接続できる。
【００５９】
ブロック６１０で、ネットリストが生成されると、ネットリストの各インスタンスに対して、対象デバイスの特定のハードウェア要素（例えば、ＳＭＥ  ２０４、２０５、他の要素２２４）を選択するために、ネットリストが位置付けられる。本発明の一実施形態によれば、位置付けると、そのハードウェア要素に対する一般入力および出力制約に基づいてハードウェア要素を選択する。
【００６０】
ブロック６１２で、ネットリストによって記述された接続を達成するため、選択されたハードウェア要素を共に結合するために、グローバルに位置付けられたネットリストが、プログラム可能スイッチ（例えば、ブロック間スイッチ２０３、ブロック内スイッチ２０８、および行内スイッチ２１２）に対する設定を決定するようにルーティングされる。一例では、プログラム可能スイッチに対する設定が、選択されたハードウェア要素を接続するために使用されるＦＳＭエンジン２００の特定の導体を決定することにより決定される。ルーティングは、ＦＳＭエンジン２００上の導体および／またはスイッチの物理的設計を前提として、ハードウェア要素を結合するためなど、位置付け中にネットリストインスタンスのいくつかに対して選択された特定のハードウェア要素を調整し得る。
【００６１】
ネットリストが位置付けられルーティングされると、位置付けられルーティングされたネットリストは、ＦＳＭエンジン２００のプログラミング用に複数のビットに変換できる。複数のビットはここではイメージと呼ばれる。
【００６２】
ブロック６１４で、イメージがコンパイラによって公開される。イメージは、ＦＳＭエンジン２００の特定のハードウェア要素および／またはプログラム可能スイッチをプログラミングするための複数のビットを含む。イメージが複数のビット（例えば、０および１）を含む実施形態では、イメージは、バイナリイメージと呼ぶことができる。ビットは、プログラム化されたＦＳＭエンジン２００が、ソースコードによって記述された機能を有するＦＳＭを実装するように、ＳＭＥ  ２０４、２０５の状態、専用要素２２４、およびプログラム可能スイッチをプログラムするためにＦＳＭエンジン２００上にロードできる。位置付け（ブロック６１０）およびルーティング（ブロック６１２）は、特定のハードウェア要素をＦＳＭエンジン２００内の特定の位置で、オートマトン内の特定の状態にマッピングできる。その結果、イメージ内のビットは、特定のハードウェア要素および／またはプログラム可能スイッチを所望の機能を実装するようにプログラムできる。一例では、イメージは、機械コードをコンピュータ可読媒体に保存することにより公開できる。別の例では、イメージは、イメージをディスプレイ装置上に表示することにより公開できる。さらに別の例では、イメージは、イメージをＦＳＭエンジン２００上にロードするためのプログラミング装置などの、別の装置にイメージを送信することにより、公開できる。さらにまた別の例では、イメージは、イメージを並列マシン（例えば、ＦＳＭエンジン２００）上にロードすることにより、公開できる。
【００６３】
一例では、イメージは、イメージからのビット値をＳＭＥ  ２０４、２０５、および他のハードウェア要素２２４に直接ロードするか、またはイメージを１つまたは複数のレジスタにロードし、次いで、レジスタからのビット値をＳＭＥ  ２０４、２０５、および他のハードウェア要素２２４に書き込むかのいずれかにより、ＦＳＭエンジン２００上にロードできる。一例では、プログラム可能スイッチ（例えば、ブロック間スイッチ２０３、ブロック内スイッチ２０８、および行内スイッチ２１２）の状態。一例では、ＦＳＭエンジン２００のハードウェア要素（例えば、ＳＭＥ  ２０４、２０５、他の要素２２４、プログラム可能スイッチ２０３、２０８、２１２）が、プログラミング装置および／またはコンピュータが、イメージを１つまたは複数のメモリアドレスに書き込むことにより、イメージをＦＳＭエンジン２００上にロードできるように、メモリマップされる。
【００６４】
本明細書で説明する方法例は、少なくとも一部は、機械またはコンピュータ実装できる。いくつかの例は、上の例で説明した方法を実行する電子装置を構成するように動作可能な命令でコード化されたコンピュータ可読媒体または機械可読媒体を含み得る。かかる方法の実装は、マイクロコード、アセンブリ言語コード、高水準言語コード、または同様のものなどの、コードを含み得る。かかるコードは、様々な方法を実行するためのコンピュータ可読命令を含み得る。コードは、コンピュータプログラム製品の一部を形成し得る。さらに、コードは、実行中または他の時に、１つもしくは複数の揮発性または不揮発性のコンピュータ可読媒体上に有形的に格納され得る。これらのコンピュータ可読媒体は、ハードディスク、取り外し可能磁気ディスク、取り外し可能光ディスク（例えば、コンパクトディスクおよびデジタルビデオディスク）、磁気カセット、メモリカードまたはメモリスティック、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、および同様のものを含み得るが、これらに限定されない。
【００６５】
図９は、フォンノイマン型アーキテクチャを有するコンピュータ９００の例をおおまかに示す。本開示の内容を読んで理解すると、当業者であれば、ソフトウェアプログラム内に定義された機能を実行するために、ソフトウェアプログラムが、コンピュータベースシステム内のコンピュータ可読媒体から起動できる方法を理解するであろう。当業者は、さらに、本明細書で開示する方法を実装および実行するように設計された１つまたは複数のソフトウェアプログラムを作成するために採用できる様々なプログラム言語を理解するであろう。プログラムは、Ｊａｖａ、Ｃ＋＋、または１つもしくは複数の他の言語などのオブジェクト指向言語を使用して、オブジェクト指向フォーマットで構造化できる。代替として、プログラムは、アセンブリ、Ｃ、などの手続き型言語を使用して、手続き指向フォーマットで構造化できる。ソフトウェアコンポーネントは、リモートプロシージャコールまたはその他を含む、アプリケーションプログラムインタフェースまたはプロセス間通信技術など、当業者に周知の任意の数の機構を使用して、通信できる。様々な実施形態の技術は、任意の特定のプログラム言語または環境に制限されない。
【００６６】
このようにして、他の実施形態が実現できる。例えば、コンピュータ、メモリシステム、磁気ディスクもしくは光ディスク、何らかの他の記憶装置、または任意のタイプの電子装置もしくはシステムなどの、製品は、その上に格納された命令９２４（例えば、コンピュータプログラム命令）を有するメモリ（例えば、取り外し可能記憶媒体、ならびに電気導体、光導体、または電磁導体を含む任意のメモリ）などの、コンピュータ可読媒体９２２に結合された１つまたは複数のプロセッサ９０２を含み得、それは、１つまたは複数のプロセッサ９０２で実行される場合に、上の方法に関して説明した動作のいずれかを実行する結果となる。
【００６７】
コンピュータ９００は、いくつかのコンポーネントに直接、および／またはバス９０８を使用して、結合されたプロセッサ９０２を有するコンピュータシステムの形をとることができる。かかるコンポーネントには、メインメモリ９０４、スタティックまたは不揮発性メモリ９０６、および大容量記憶９１６を含み得る。プロセッサ９０２に結合された他のコンポーネントには、ビデオディスプレイなどの出力装置９１０、キーボードなどの入力装置９１２、およびマウスなどのカーソル制御装置９１４を含み得る。プロセッサ９０２および他のコンポーネントをネットワーク９２６に結合するためのネットワークインタフェース装置９２０は、バス９０８にも結合できる。命令９２４は、いくつかの周知の転送プロトコル（例えば、ＨＴＴＰ）のうちの任意の１つを利用するネットワークインタフェース装置９２０を経由し、ネットワーク９２６を通して、さらに転送または受信され得る。バス９０８に結合されたこれら要素のいずれかは、実現される特定の実施形態に応じて、存在しないか、単独で存在し得るか、または複数で存在し得る。
【００６８】
一例では、１つまたは複数のプロセッサ９０２、メモリ９０４、９０６、または記憶装置９１６は各々、コンピュータ９００に、実行時に、本明細書に記載する方法のいずれか１つまたは複数を実行させ得る、命令９２４を含むことができる。代替実施形態では、コンピュータ９００は、スタンドアロン装置として動作するか、または他の装置に接続（例えば、ネットワーク接続）できる。ネットワーク化された環境では、コンピュータ９００は、サーバークライアントネットワーク環境内のサーバーもしくはクライアント装置の資格で、または、ピアツーピア（もしくは分散）ネットワーク環境内のピア装置として、動作できる。コンピュータ９００には、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、セットトップボックス（ＳＴＢ）、携帯情報端末（ＰＤＡ）、携帯電話、ウェブアプライアンス、ネットワークルーター、スイッチもしくはブリッジ、またはその装置によってとられる動作を指定する命令のセットを（連続して、もしくは他の方法で）実行可能な任意の装置を含み得る。さらに、単一のコンピュータ９００のみが示されているが、「コンピュータ」という用語は、本明細書で説明する方法のいずれか１つまたは複数を実行するための命令のセット（または複数のセット）を単独に、または一緒に実行する装置の任意の集合を含むようにも解釈されるものとする。
【００６９】
コンピュータ９００は、１つまたは複数の通信プロトコル（例えば、ユニバーサルシリアルバス（ＵＳＢ）、ＩＥＥＥ  １３９４など）を使用して周辺機器と通信するための出力コントローラ９２８も含むことができる。出力コントローラ９２８は、例えば、コンピュータ９００に通信的に結合されているプログラミング装置９３０にイメージを提供できる。プログラミング装置９３０は、並列マシン（例えば、並列マシン１００、ＦＳＭエンジン２００）をプログラムするように構成できる。他の例では、プログラミング装置９３０は、コンピュータ９００と統合されて、バス９０８に結合できるか、またはネットワークインタフェース装置９２０または別の装置を経由してコンピュータ９００と通信できる。
【００７０】
コンピュータ可読媒体９２４は単一の媒体として示されているが、「コンピュータ可読媒体」という用語は、命令９２４の１つまたは複数のセットを格納する単一の媒体または複数の媒体（例えば、集中型もしくは分散型データベース、または関連するキャッシュおよびサーバー、ならびに／またはプロセッサ９０２レジスタ、メモリ９０４、９０６、および記憶装置９１６などの様々な記憶媒体）を含むように解釈されるべきである。「コンピュータ可読媒体」という用語は、コンピュータによって実行するための命令のセットを格納、コード化、または運搬可能であり、かつ、コンピュータに本発明の方法のいずれか１つまたは複数を実行させるか、または命令のかかるセットによって利用されるか、またはそれに関連したデータ構造を格納、コード化、または運搬可能である、任意の媒体を含むように解釈されるものとする。「コンピュータ可読媒体」という用語は、その結果、ソリッドステートメモリ、光媒体、および磁気媒体などの、有形的媒体を含むように解釈されるものとするが、それらに限定されない。
【００７１】
要約は、読者が技術的開示の本質および要点を確認できるようにする要約を要求する米国特許規則（３７  Ｃ．Ｆ．Ｒ）１．７２（ｂ）項に準拠するために提供されている。それは、請求項の範囲または意味を制限または解釈するために使用されないという理解で提示されている。以下の請求項は、これによって詳細な説明に組み込まれ、各請求項が別個の実施形態として権利を主張する。
【００７２】
〔実施形態例〕
例１は、ソースコードから並列マシンをプログラムするように構成されたイメージを生成するためのコンピュータ実装方法を含む。本方法は、ソースコードを、複数の相互接続された状態を含むオートマトンに変換すること；そのオートマトンを、オートマトンの状態に対応するインスタンスを含むネットリストに変換することであって、そのインスタンスが並列マシンのハードウェア要素に対応し、オートマトンをネットリストに変換することが、並列マシンの物理的設計に基づいて状態を共にグループ化することを含む、オートマトンをネットリストに変換すること；および、そのネットリストをイメージに変換することを含む。
【００７３】
例２は、命令を含むコンピュータ可読媒体を含み、それは、コンピュータによって実行されるときに、そのコンピュータに動作を実行させる。動作は、ソースコードを、複数の相互接続された状態を含むオートマトンに変換すること；そのオートマトンを、オートマトンの状態に対応するインスタンスを含むネットリストに変換することであって、そのインスタンスが並列マシンのハードウェア要素に対応し、オートマトンをネットリストに変換することが、並列マシンの物理的設計に基づいて状態を共にグループ化することを含む、オートマトンをネットリストに変換すること；および、そのネットリストをイメージに変換することを含む。
【００７４】
例３は、ソフトウェアがその上に格納されたメモリ；およびそのメモリに通信的に結合されたプロセッサを含むコンピュータを含む。そのソフトウェアは、プロセッサによって実行されるとき、そのプロセッサに：ソースコードを、複数の相互接続された状態を含むオートマトンに変換すること；そのオートマトンを、オートマトンの状態に対応するインスタンスを含むネットリストに変換することであって、インスタンスが並列マシンのハードウェア要素に対応し、インスタンスが、複数の第１のインスタンスおよび２つ以上の第１のインスタンスを含むグループインスタンスを含み、オートマトンをネットリストに変換することが、未使用の第１のインスタンスの数に基づいて状態をグループインスタンス内に共にグループ化することを含む、オートマトンをネットリストに変換すること；および、ネットリストをイメージに変換することをさせる。
【００７５】
例４は、ソースコードを、複数の相互接続された状態を含むオートマトンに変換すること；そのオートマトンを、オートマトンの状態に対応するインスタンスを含むネットリストに変換することであって、インスタンスが並列マシンのハードウェア要素に対応し、インスタンスが、複数の第１のインスタンスおよび２つ以上の第１のインスタンスを含むグループインスタンスを含み、オートマトンをネットリストに変換することが、未使用の第１のインスタンスの数に基づいて、状態をグループインスタンス内に共にグループ化することを含む、オートマトンをネットリストに変換すること；および、ネットリストをイメージに変換すること；を行うように構成されたコンピュータを含む、システムを含む。本システムは、イメージを並列マシン上にロードするように構成された装置も含む。
【００７６】
例５では、例１〜４のいずれかの主題が、インスタンスが、状態機械要素（ＳＭＥ）ハードウェア要素に対応するＳＭＥインスタンスおよびＳＭＥのグループを含むハードウェア要素に対応するＳＭＥグループインスタンスを含むこと、ならびに、グループ化することが、状態をＳＭＥグループインスタンスにグループ化することを含むこと、を随意に含み得る。
【００７７】
例６では、例１〜５のいずれかの主題が、物理的設計が、ＳＭＥのグループを含むハードウェア要素の物理的設計を含むこと、を随意に含み得る。
【００７８】
例７では、例１〜６のいずれかの主題が、物理的設計が、ＳＭＥのグループを含むハードウェア要素内のＳＭＥに関する入力制約または出力制約の１つを含むこと、を随意に含み得る。
【００７９】
例８では、例１〜７のいずれかの主題が、物理的設計が、ＳＭＥのグループを含むハードウェア要素内のＳＭＥが出力を共有するという制限を含むこと、を随意に含み得る。
【００８０】
例９では、例１〜８のいずれかの主題が、ＳＭＥグループインスタンスが、２つのＳＭＥインスタンスを含む２つのグループ（ＧＯＴ）インスタンスを含むこと、および、物理的設計が、各ＧＯＴ内のＳＭＥが共通の出力に結合されていることを含むこと、を随意に含み得る。
【００８１】
例１０では、例１〜９のいずれかの主題が、オートマトンをネットリストに変換することが：どの状態がＧＯＴインスタンス内で共にグループ化できるかを判断すること；および、その判断に基づいて状態をペア形成することを含むこと、を随意に含み得る。
【００８２】
例１１では、例１〜１０のいずれかの主題が、第１の状態または第２の状態のどちらもオートマトンの最終状態ではなく、かつ、第１の状態および第２の状態の一方が、第１の状態または第２の状態以外の任意の状態を駆動しない場合に、第１の状態および第２の状態が、ＧＯＴインスタンス内で共にペア形成できること、を随意に含み得る。
【００８３】
例１２では、例１〜１１のいずれかの主題が、第１の状態または第２の状態のどちらもオートマトンの最終状態ではなく、かつ、第１の状態および第２の状態の両方が、同じ外部状態を駆動する場合に、第１の状態および第２の状態が、ＧＯＴインスタンス内で共にペア形成できること、を随意に含み得る。
【００８４】
例１３では、例１〜１２のいずれかの主題が、第１の状態および第２の状態の一方がオートマトンの最終状態であり、かつ、第１の状態および第２の状態の他方が、どの外部状態も駆動しない場合に、第１の状態および第２の状態が、ＧＯＴインスタンス内で共にペア形成できること、を随意に含み得る。
【００８５】
例１４では、例１〜１３のいずれかの主題が、第１の状態および第２の状態の両方がオートマトンの最終状態であり、かつ、第１の状態および第２の状態の両方が、同じ外部状態を駆動する場合に、第１の状態および第２の状態が、ＧＯＴインスタンス内で共にペア形成できること、を随意に含み得る。
【００８６】
例１５では、例１〜１４のいずれかの主題が、どの状態がＧＯＴインスタンス内で共にグループ化できるかを判断することが、グラフ理論を使用して、どの状態がＧＯＴインスタンス内で共にグループ化できるかを判断することを含むこと、を随意に含み得る。
【００８７】
例１６では、例１〜１５のいずれかの主題が、グラフ理論を使用して、どの状態がＧＯＴインスタンス内で共にグループ化できるかを判断することが、最大マッチングを識別するために、グラフ理論を使用して、どの状態がＧＯＴインスタンス内で共にグループ化できるかを判断することを含むこと、を随意に含み得る。
【００８８】
例１７では、例１〜１６のいずれかの主題が、イメージを公開すること、を随意に含み得る。
【００８９】
例１８では、例１〜１７のいずれかの主題が、インスタンスが汎用インスタンスおよび専用インスタンスを含むこと、汎用インスタンスがオートマトンの汎用状態に対応し、また、専用インスタンスがオートマトンの専用状態に対応すること、を随意に含み得る。
【００９０】
例１９では、例１〜１８のいずれかの主題が、汎用インスタンスに対応するハードウェア要素が状態機械要素（ＳＭＥ）および２つのグループ（ＧＯＴ）を含むこと、ならびに専用インスタンスに対応するハードウェア要素がカウンタおよび論理要素を含むこと、を随意に含み得る。
【００９１】
例２０では、例１〜１９のいずれかの主題が、オートマトンが均質なオートマトンであること、を随意に含み得る。
【００９２】
例２１では、例１〜２０のいずれかの主題が、オートマトンをネットリストに変換することが、オートマトンの状態の各々を、ハードウェア要素に対応するインスタンスにマッピングすること、およびインスタンス間の接続性を決定することを含むこと、を随意に含み得る。
【００９３】
例２２では、例１〜２１のいずれかの主題が、ネットリストが、ハードウェア要素間の導体を表すインスタンス間の複数の接続をさらに含むこと、を随意に含み得る。
【００９４】
例２３では、例１〜２２のいずれかの主題が、オートマトンをネットリストに変換することが、オートマトンを、開始状態を除いて、オートマトンの状態に対応するインスタンスを含むネットリストに変換することを含むこと、を随意に含み得る。
【００９５】
例２４では、例１〜２３のいずれかの主題が、ネットリストのインスタンスに対応するハードウェア要素の並列マシン内の位置を決定すること、を随意に含み得る。
【００９６】
例２５では、例１〜２４のいずれかの主題が、状態を共にグループ化することが、汎用要素のグループを含むハードウェア要素の物理的設計に基づいて、状態を共にグループ化することを含むこと、を随意に含み得る。
【００９７】
例２６では、例１〜２５のいずれかの主題が、並列マシンのどの導体がハードウェア要素を接続するために使用されるかを判断すること；および並列マシンのプログラム可能スイッチに対する設定を決定することであって、プログラム可能スイッチがハードウェア要素を選択的に共に結合するように構成されている、並列マシンのプログラム可能スイッチに対する設定を決定すること、を随意に含み得る。
【００９８】
例２７では、例１〜２６のいずれかの主題が、グループインスタンスが２つのグループ（ＧＯＴ）インスタンスを含むこと、および状態をグループ化することが、ペア形成された状態がどの状態を駆動するかに応じて、状態をペア形成すること、を随意に含み得る。
【００９９】
例２８では、例１〜２７のいずれかの主題が、未使用の第１のインスタンスの数に基づいて状態をグループインスタンス内にグループ化することが：以下の条件：第１の状態または第２の状態のどちらもオートマトン内の最終状態ではなく、かつ第１の状態および第２の状態の一方が、第１の状態または第２の状態以外のどの状態も駆動しないこと；第１の状態または第２の状態のどちらもオートマトン内の最終状態ではなく、かつ第１の状態および第２の状態の両方が、同じ外部状態を駆動すること；第１の状態または第２の状態のどちらかが最終状態であり、かつ最終状態ではない第１の状態または第２の状態が、第１の状態または第２の状態以外のどの状態も駆動しないこと；ならびに、第１の状態および第２の状態の両方が最終状態であり、かつ第１の状態および第２の状態の両方が、同じ外部状態を駆動すること；に基づいて、第１の状態および第２の状態がペア形成できるかどうかを判断することを含むこと、を随意に含み得る。
【０１００】
例２９では、例１〜２８のいずれかの主題が、オートマトンをネットリストに変換することが：状態をグラフとしてモデル化することであって、グラフのバーテックスが状態に対応し、かつグラフのエッジが状態の可能なペア形成に対応する、状態をグラフとしてモデル化すること；グラフに対して一致するバーテックスを決定すること；および一致するバーテックスに対応する状態をペア形成することを含むこと、を随意に含み得る。
【０１０１】
例３０では、例１〜２９のいずれかの主題が、オートマトンをネットリストに変換することが：グラフに対して最大マッチングを決定することを含むこと、を随意に含み得る。
【０１０２】
例３１では、例１〜３０のいずれかの主題が、オートマトンをネットリストに変換することが：一致するバーテックスに対応する状態の各セットをペア形成すること；および一致しないバーテックスに対応する各状態をＧＯＴインスタンスにマッピングすることであって、そのＧＯＴインスタンス内の１つのＳＭＥインスタンスが使用されない、一致しないバーテックスに対応する各状態をＧＯＴインスタンスにマッピングすることを含むこと、を随意に含み得る。
【０１０３】
例３２では、例１〜３１のいずれかの主題が、状態を共にグループ化することが；ペア形成された状態がどの状態を駆動するかに応じて、状態をペア形成することを含むこと、を随意に含み得る。
【０１０４】
例３３では、例１〜３２のいずれかの主題が、未使用の第１のインスタンスの数に基づいて、状態を共にグループインスタンス内にグループ化することが：以下の条件：第１の状態または第２の状態のどちらもオートマトン内の最終状態ではなく、かつ第１の状態および第２の状態の一方が、第１の状態または第２の状態以外のどの状態も駆動しないこと；第１の状態または第２の状態のどちらもオートマトン内の最終状態ではなく、かつ第１の状態および第２の状態の両方が、同じ外部状態を駆動すること；第１の状態または第２の状態のどちらかが最終状態であり、かつ最終状態ではない第１の状態または第２の状態が、第１の状態または第２の状態以外のどの状態も駆動しないこと；ならびに、第１の状態および第２の状態の両方が最終状態であり、かつ第１の状態および第２の状態の両方が、同じ外部状態を駆動すること；に基づいて、第１の状態および第２の状態がペア形成できるかどうかを判断することを含むこと、を随意に含み得る。
【０１０５】
例３４では、例１〜３３のいずれかの主題が、未使用の第１のインスタンスの数に基づいて、状態を共にグループインスタンス内にグループ化することが：状態をグラフとしてモデル化することであって、グラフのバーテックスが状態に対応し、かつグラフのエッジが状態の可能なペア形成に対応する、状態をグラフとしてモデル化すること；グラフに対して一致するバーテックスを決定すること；および一致するバーテックスに対応する状態をペア形成することを含むこと、を随意に含み得る。
【０１０６】
例３５では、例１〜３４のいずれかの主題が、未使用の第１のインスタンスの数に基づいて、状態を共にグループインスタンス内にグループ化することが：グラフに対して最大マッチングを決定することを含むこと、を随意に含み得る。
【０１０７】
例３６では、例１〜３５のいずれかの主題が、未使用の第１のインスタンスの数に基づいて、状態を共にグループインスタンス内にグループ化することが：一致するバーテックスに対応する状態の各セットをペア形成すること；および一致しないバーテックスに対応する各状態をＧＯＴインスタンスにマッピングすることであって、そのＧＯＴインスタンス内の１つのＳＭＥインスタンスが使用されない、一致しないバーテックスに対応する各状態をＧＯＴインスタンスにマッピングすることを含むこと、を随意に含み得る。
【０１０８】
例３７では、例１〜３６のいずれかの主題が、装置が、状態の各ペアを、並列マシン内の２つのハードウェア要素のグループとして実装するように構成されていること、を随意に含み得る。
【０１０９】
例３８は、例１〜３７のいずれかのプロセスによって生成されたイメージによってプログラム化された並列マシンを含む。
【図１】
0005763784.tif 000002
【図２】
0005763784.tif 000003
【図３】
0005763784.tif 000004
【図４】
0005763784.tif 000005
【図５】
0005763784.tif 000006
【図６】
0005763784.tif 000007
【図７Ａ】
0005763784.tif 000008
【図７Ｂ】
0005763784.tif 000009
【図８Ａ】
0005763784.tif 000010
【図８Ｂ】
0005763784.tif 000011
【図９】
0005763784.tif 000012