(57)【要約】【課題】  複数のプロセッシングエレメントを備え、回路を再構成可能なデバイスにループ処理を実装するのに適したハードウェア情報を提供する。【解決手段】  コンパイラ６０において、ソースプログラム６１の、第１のアルゴリズムで繰り返し行なわれる第１の処理を実行するデータパスを構成するための第１の構成情報６３ａと、入力データを第１のアドレスカウンタにより第１のメモリからロードする処理を実行するための第２の構成情報６３ｂと、出力データを第２のアドレスカウンタにより第２のメモリにストアする処理を実行するための第３の構成情報６３ｃと、入力データを第３のアドレスカウンタにより外部メモリから第１のメモリにロードする処理を実行するための第４の構成情報６３ｄと、出力データを第４のアドレスカウンタにより第２のメモリから外部メモリにストアする処理を実行するための第５の構成情報６３ｅとを含むハードウェア情報６２を生成する。【選択図】        図６
2005353061.tif 000002
【特許請求の範囲】
【請求項１】
第１の処理を繰り返す第１のアルゴリズムを含む第１のプログラムを実行するためのハードウェア情報を生成する方法であって、以下の生成を含む方法。
（ａ）  入力データに対し前記第１の処理を実行した出力データを生成するための第１の構成情報。
（ｂ）  前記入力データを第１のアドレスカウンタにより第１のメモリからロードする処理を実行するための第２の構成情報。
（ｃ）  前記出力データを第２のアドレスカウンタにより第２のメモリにストアする処理を実行するための第３の構成情報。
【請求項２】
請求項１において、前記ハードウェア情報は、再構成可能な領域を備えた集積回路装置の少なくとも一部の構成を変更するためのものである、ハードウェア情報を生成する方法。
【請求項３】
請求項２において、前記再構成可能な領域は、複数のプロセッシングエレメントを含んでおり、
前記第１の構成情報は、前記複数のプロセッシングエレメントの少なくとも一部によりパイプラインを構成するための情報を含んでいる、ハードウェア情報を生成する方法。
【請求項４】
請求項３において、前記第２の構成情報、および前記第３の構成情報は、前記第１のアドレスカウンタおよび前記第２のアドレスカウンタをそれぞれ前記複数のプロセッシングエレメントの少なくとも一部により構成するための情報を含んでいる、ハードウェア情報を生成する方法。
【請求項５】
請求項３において、前記複数のプロセッシングエレメントは、前記ロードする処理および／または前記ストアする処理に適したタイプのアドレス発生回路を備えた専用エレメントを含んでおり、
前記第２の構成情報および前記第３の構成情報は、前記第１のアドレスカウンタおよび前記第２のアドレスカウンタのそれぞれを、前記専用エレメントを含めて構成するための情報を含んでいる、ハードウェア情報を生成する方法。
【請求項６】
請求項１において、前記第１のメモリおよび前記第２のメモリは、集積回路装置の内部バッファであり、さらに、以下の生成を含む、ハードウェア情報を生成する方法。
（ｄ）  前記入力データを第３のアドレスカウンタにより外部メモリから前記第１のメモリにロードする処理を実行するための第４の構成情報。
（ｅ）  前記出力データを第４のアドレスカウンタにより前記第２のメモリから前記外部メモリにストアする処理を実行するための第５の構成情報。
【請求項７】
請求項６において、前記第１のメモリおよび前記第２のメモリはダブルバッファタイプであり、
前記第４の構成情報は、前記第１のメモリのスワッピングに連動して前記入力データをロードする処理を実現するための構成情報を含み、
前記第５の構成情報は、前記第２のメモリのスワッピングに連動して前記出力データをストアする処理を実現するための構成情報を含んでいる、ハードウェア情報を生成する方法。
【請求項８】
請求項１において、前記第１の構成情報は、前記第１のアドレスカウンタの値および／または前記第２のアドレスカウンタの値に基づきパラメータを生成する処理を実現するための構成情報を含んでいる、ハードウェア情報を生成する方法。
【請求項９】
請求項１において、前記第１のプログラムは、前記第１のアルゴリズムを含む処理を繰り返す第２のアルゴリズムを含んでおり、
前記第２の構成情報および前記第３の構成情報は、前記第２のアルゴリズムを包含した処理を実現するための構成情報を含んでいる、ハードウェア情報を生成する方法。
【請求項１０】
請求項９において、前記第１の構成情報は、前記第２のアルゴリズムに含まれる前記第１の処理以外の処理を適切なタイミングで実行するための構成情報を含んでいる、ハードウェア情報を生成する方法。
【請求項１１】
再構成可能な領域を備えた集積回路装置の少なくとも一部の構成を変更可能なハードウェア情報が記憶された記録媒体であって、前記ハードウェア情報は、第１の処理を繰り返す第１のアルゴリズムを実行するために以下の構成情報を備えている。
（ａ）  入力データに対し前記第１の処理を実行した出力データを生成するための第１の構成情報。
（ｂ）  前記入力データを第１のアドレスカウンタにより第１のメモリからロードする処理を実行するための第２の構成情報。
（ｃ）  前記出力データを第２のアドレスカウンタにより第２のメモリにストアする処理を実行するための第３の構成情報。
【請求項１２】
請求項１１において、前記第１のメモリおよび前記第２のメモリは、集積回路装置の内部バッファであり、さらに、前記ハードウェア情報は以下の構成情報を備えた、前記ハードウェア情報が記録された記録媒体。
（ｄ）  前記入力データを第３のアドレスカウンタにより外部メモリから前記第１のメモリにロードする処理を実行するための第４の構成情報。
（ｅ）  前記出力データを第４のアドレスカウンタにより前記第２のメモリから前記外部メモリにストアする処理を実行するための第５の構成情報。
【請求項１３】
請求項１２において、前記第１のメモリおよび前記第２のメモリはダブルバッファタイプであり、前記第４の構成情報は、前記第１のメモリのスワッピングに連動して前記入力データをロードする処理を実現するための構成情報を含み、
前記第５の構成情報は、前記第２のメモリのスワッピングに連動して前記出力データをストアする処理を実現するための構成情報を含んでいる、前記ハードウェア情報が記録された記録媒体。
【請求項１４】
請求項１１において、前記第１のアルゴリズムを含む処理を繰り返す第２のアルゴリズムを実行するために、前記第２の構成情報および前記第３の構成情報は、前記第２のアルゴリズムを包含した処理を実現するための構成情報を含んでいる、前記ハードウェア情報が記録された記録媒体。
【請求項１５】
請求項１４において、前記第１の構成情報は、前記第２のアルゴリズムに含まれる前記第１の処理以外の処理を適切なタイミングで実行するための構成情報を含んでいる、前記ハードウェア情報が記録された記録媒体。
【請求項１６】
第１の処理を繰り返す第１のアルゴリズムを含む第１のプログラムを実行するためのハードウェア情報をコンピュータにより生成するプログラムであって、以下を生成する処理を実行するための命令を有するプログラム。
（ａ）  入力データに対し前記第１の処理を実行した出力データを生成するための第１の構成情報。
（ｂ）  前記入力データを第１のアドレスカウンタにより第１のメモリからロードする処理を実行するための第２の構成情報。
（ｃ）  前記出力データを第２のアドレスカウンタにより第２のメモリにストアする処理を実行するための第３の構成情報。
【請求項１７】
請求項１６において、前記ハードウェア情報は、再構成可能な領域を備えた集積回路装置の少なくとも一部の構成を変更するためのものである、プログラム。
【請求項１８】
請求項１６において、前記第１のメモリおよび前記第２のメモリは、集積回路装置の内部バッファであり、
さらに、以下を生成する処理を実行するための命令を有するプログラム。
（ｄ）  前記入力データを第３のアドレスカウンタにより外部メモリから前記第１のメモリにロードする処理を実行するための第４の構成情報。
（ｅ）  前記出力データを第４のアドレスカウンタにより前記第２のメモリから前記外部メモリにストアする処理を実行するための第５の構成情報。
【請求項１９】
請求項１８において、前記第１のメモリおよび前記第２のメモリはダブルバッファタイプであり、前記第４の構成情報は、前記第１のメモリのスワッピングに連動して前記入力データをロードする処理を実現するための構成情報を含み、
前記第５の構成情報は、前記第２のメモリのスワッピングに連動して前記出力データをストアする処理を実現するための構成情報を含んでいる、プログラム。
【請求項２０】
第１の処理を繰り返す第１のアルゴリズムを含む第１のプログラムを実行するために以下の構成情報を備えたハードウェア情報を生成する手段を有するコンパイラー。
（ａ）  入力データに対し前記第１の処理を実行した出力データを生成するための第１の構成情報。
（ｂ）  前記入力データを第１のアドレスカウンタにより第１のメモリからロードする処理を実行するための第２の構成情報。
（ｃ）  前記出力データを第２のアドレスカウンタにより第２のメモリにストアする処理を実行するための第３の構成情報。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｃ言語などの高級言語により与えられた仕様を実行するための集積回路の構成および集積回路の設計に関するものである。
【背景技術】
【０００２】
目的のアルゴリズムを、ハードウェアを用いて実行する方法として、プロセッサなどの汎用のプロセッサを、目的のアルゴリズムを実現するためのソフトウェアで動作させる第１の方法と、目的のアルゴリズムを実行するためのデータパスを備えた専用回路を用いて実行する第２の方法がある。第１の方法は、ソフトウェアエンジニアが簡単に目的とするアルゴリズムを実行させることができるというメリットがあるが、実行速度はプロセッサの性能によって大きく左右される。また、汎用的なハードウェアを用いるので、ハードウェアの規模およびコストが、目的のアルゴリズムを実行するために経済的であるとは言えないことが多い。第２の方法は、専用のハードウェアを用いるので比較的シンプルなハードウェアで十分な処理速度が得られるので、ハードウェアの規模は経済的になる。しかしながら、専用のハードウェアを開発するために、多大なコストおよび時間が必要になる。特に、ソフトウェアエンジニアだけで専用回路を開発できないので、ハードウェアエンジニアも必要とし、人的費用が膨大になる。したがって、この第２の方法が、目的のアルゴリズムを実行するために経済的であると評価されるには、専用のハードウェアをどの程度量産できるかに大きく依存する。
【０００３】
ハードウェアの面では、近年、ＦＰＧＡのように、回路構成を後で変更することができるものが提供されている。ＦＰＧＡは冗長な部分を備えているので、性能および規模が専用に開発されたハードウェアと全く同一であるとは言い難いかもしれない。しかしながら、専用回路にほぼ匹敵する性能を備えたハードウェアを短期間に得ることができる。とはいっても、ＦＰＧＡは、基本的には、専用回路を設計するのと同程度の回路情報を生成し、それを実装するものであり、ハードウェアエンジニアの能力に依存する部分が多い。
【０００４】
回路構成を高速に切り替えることにより、同じひとつのデバイスを複数のアプリケーションあるいはアルゴリズムを実行するために用いることが可能なハードウェアが開発されている。動的に再構成可能なデバイスの１つの例は、ＵＳ２００３／０１８４３３９に開示されているプロセッシングエレメントをマトリクス状に配置したものである。
【特許文献１】米国特許出願公開公報２００３／０１８４３３９号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ソフトウェアの面では、Ｃ言語などの高級プログラム言語により与えられた仕様をＲＴＬなどのハードウェア記述言語に自動的に変換するツール（コンパイラー）や、ハードウェア記述が可能なＣ言語の開発が行われている。したがって、ソフトウェアエンジニアがハードウェアの設計まで手がけることが可能な環境が整い始めており、上述した再構成可能なハードウェアと相まって、今後、目的のアルゴリズムを実行するためのハードウェアの設計および開発に要する時間と費用は大幅に短縮されると考えられる。
【０００６】
しかしながら、現状の高級プログラム言語からハードウェアを設計する過程において、アルゴリズムをデータパスに実装あるいは変換する方法は、従来のＡＳＩＣなどの専用回路を設計および開発する過程において採用された方法が踏襲されているだけであり、ハードウェアの進歩に追従しているとは言い難い。例えば、従来の専用回路は、目的のアルゴリズムに従った処理を行うデータパスと、そのデータパスを制御するステートマシンとの組み合わせにより実現されている。ＦＰＧＡは、動的に回路を再構成することは不可能であるが、トランジスタレベルで回路を実装することは可能である。したがって、ＦＰＧＡに、従来の専用回路と同じ構成を実装することに大きな困難は指摘されていないようであり、データパスとステートマシンの組み合わせがベストか否かという検証は試みられていない。
【０００７】
これに対し、動的に回路を再構成するデバイスの多くは、ある程度の演算機能、例えばＡＬＵ、を備えたプロセッシングエレメント（ＰＥ）を接続してデータパスを実現する方式が多く採用されており、データパスがマトリクス内において分散された幾つかのＰＥの接続として実装される。したがって、そのようなデータパスをマトリクス内の別の領域に構成したステートマシンにより一括制御しようとすると、ステートマシンの構成にＰＥが消費され、また、ステートマシンとデータパスとの接続のために配線資源が消費される。このため、データパスとステートマシンの組み合わせは、実装効率の低下の要因となるのみならず、ＡＣ特性の低下の要因にもなると予想される。
【０００８】
ＲＩＳＣなどの汎用プロセッサと、データパスを再構成可能なハードウェアとを組み合わせたデバイスにおいて、繰り返し実行される処理をデータパス化してハードウェアを用いて実行することが望ましい。したがって、Ｃ言語で記述されたアルゴリズムのうち、“for”ループなどの繰り返し処理をデータパス化して実行することが望ましい。さらに、複数の繰り返し処理を並列に処理することができれば、さらに処理速度は向上する。しかしながら、データパスを構成するためのハードウェア資源は限られている。また、無謀にＰＥの数を増やすことは、デバイスの経済性を低下させ、ＡＣ特性も低下させることになるので、メリットはない。
【０００９】
そこで、本発明においては、ある程度の演算処理能力を持った複数のＰＥを備えた再構成可能なデバイスにおいて、繰り返し処理を実行するのに適した構成を提供する。このハードウェア構成は、繰り返し処理のアルゴリズムをハードウェアに実装するために生成されるものであり、本発明においては、そのハードウェア構成を示す情報、すなわち、ハードウェア情報を、繰り返し処理のアルゴリズムから自動的に生成する方法、コンパイラーおよびそのプログラムプロダクトを提供することを目的としている。また、再構成可能なデバイスにおいて、ハードウェア情報は、繰り返し処理を実行する構成を生成するためにロードされる情報であり、本発明においては、さらに、ハードウェア情報を記録した適当な記録媒体を提供することを目的としている。
【課題を解決するための手段】
【００１０】
まず、本発明においては、第１の処理を繰り返す第１のアルゴリズムを含む第１のプログラムを実行するためのハードウェア情報を生成する方法であって、以下の生成を含む方法を提供する。
（ａ）  入力データに対し第１の処理を実行した出力データを生成するための第１の構成情報。
（ｂ）  入力データを第１のアドレスカウンタにより第１のメモリからロードする処理を実行するための第２の構成情報。
（ｃ）  出力データを第２のアドレスカウンタにより第２のメモリにストアする処理を実行するための第３の構成情報。
【００１１】
Ｃ言語で記載された“for”ループを専用回路に実装する場合、ループ内の第１の処理を実行するためのデータパスを生成し、ループカウンタにより制御されるステートマシンを生成し、データパスをステートマシンで制御する構成となる。この構成は、ループカウンタ１つで、データパスを制御できるので、従来の専用回路としてはハードウェア資源が少なくて済み、実装効率の高い実装方法であると言える。しかしながら、複数のＰＥを接続して回路を動的に再構成するようなデバイスにとってはＰＥ資源の消費および配線資源の消費の増加につながり、好ましくないことは上述した通りである。
【００１２】
繰り返し処理は、ループ内の第１の処理をメモリに対する入出力処理を行うデータパスに変換し、そのデータパスに対する入力データおよび出力データをアドレスカウンタにより制御することによっても実行できる。第１のアドレスカウンタにより入力データのロードを制御し、第２のアドレスカウンタにより出力データのストアを制御することにより、データパス中のデータの流れを制御できるので、シーケンサによりデータパスを制御する必要はない。したがって、本発明のハードウェア情報を適用すると、１つのループカウンタの代わりに、少なくとも２つのアドレスカウンタが必要になり、カウンタの数は増加する。また、入力データをストアする第１のメモリ、出力データをストアする第２のメモリも少なくとも増加する。
【００１３】
しかしながら、本発明のハードウェア情報を適用することにより、それぞれのアドレスカウンタは入力および出力をそれぞれ制御すれば良いので、回路構成は簡単となり、入力を行うＰＥの近傍あるいは内部、出力を行うＰＥの近傍あるいは内部にそれぞれのアドレスカウンタを構成することが可能となる。したがって、ＰＥの消費および配線資源の消費は低減でき、ＰＥの制御が分散されるのでＡＣ特性の低下も防止できる。さらに、入出力を制御するＰＥの内部あるいは近くにカウンタを配置できるので、タイミング収束の問題は容易に解決でき、再構成可能な領域を再構成するためのハードウェア情報を生成する配置・配線処理を高速に実行できる。
【００１４】
また、専用回路であれば、回路化する繰り返し処理を追加する毎にカウンタ回路が増加することになる。しかしながら、再構成可能なデバイスであれば、カウンタを構成した資源は、他の処理あるいは他の繰り返し処理のために再構成される資源の一部であり、繰り返し処理単位でのカウンタの増加は、ハードウェア資源の要求を大幅に増加させることにはならない。
【００１５】
入力データおよび出力データをストアするメモリの増加も同様の解決策がある。本発明の構成では、繰り返し処理のためにメモリも増加するが、そのメモリは、他の処理あるいは他の繰り返し処理を実装するためにも用いられる資源の一部であり、ハードウェア資源を大幅に増加させる要因にはならず、使用効率を上げることに困難性はない。
【００１６】
本発明のハードウェア情報は、上述した、第１の構成情報、第２の構成情報および第３の構成情報を含むものであり、専用回路を設計するためにも用いることができる。しかしながら、上述したように、本発明のハードウェア情報は、再構成可能な領域を備えた集積回路装置の少なくとも一部の構成を変更するために適した情報である。したがって、ＲＯＭ、ＲＡＭなどの適当な記録媒体に記録して提供され、集積回路装置を制御するソフトウェアにより適切なタイミングで、再構成可能な領域を制御する回路あるいはコンフィグレーションメモリにロードされ、第１の処理を繰り返す第１のアルゴリズムを実行するために用いられるようにすることが好ましい。
【００１７】
再構成可能な領域が、複数のプロセッシングエレメント（ＰＥ）を含んでいる場合は、第１の構成情報は、複数のプロセッシングエレメントの少なくとも一部によりパイプラインを構成するための情報を含んでいることが望ましい。ＰＥの機能がトークンだけの制御により発火するデータフロータイプの集積回路装置においても本発明のハードウェア情報は有効である。さらに、ＰＥがクロック信号により同期して動作する集積回路装置であれば、第１の構成情報によりパイプラインを構成することにより、ループ内の第１の処理をパイプライン処理でき、処理時間を短縮できる。
【００１８】
再構成可能な集積回路装置用のハードウェア情報においては、再構成可能な資源によりカウンタを構成するように、第２の構成情報および第３の構成情報は、第１のアドレスカウンタおよび第２のアドレスカウンタをそれぞれ複数のプロセッシングエレメントの少なくとも一部により構成するための情報を含んでいることが望ましい。
【００１９】
汎用的な複数のプロセッシングエレメントを備えた再構成可能な集積回路装置に対して、ある程度、種々の処理に特化した複数種類のプロセッシングエレメントを備えた再構成可能な集積回路装置は、フレキシビリティーがあると共に、実装効率が高く、さらに、ＡＣ特性も良好である。プロセッシングエレメントが、ロードする処理および／またはストアする処理に適したタイプのアドレス発生回路を備えた専用エレメントを含んでいる場合は、第２の構成情報および第３の構成情報は、第１のアドレスカウンタおよび前記第２のアドレスカウンタのそれぞれを、専用エレメントを含めて構成するための情報を含んでいることが望ましい。
【００２０】
入出力データをストアする第１のメモリおよび第２のメモリは、集積回路装置の外部メモリであっても良い。第１のメモリおよび第２のメモリを内部バッファにすれば、第１および第２のメモリはキャッシュとなるので、第１の構成情報により構成されるデータパスと入出力速度を向上でき、処理速度を向上できる。内部バッファは、キャッシュ用のメモリであっても良いし、プロセッシングエレメントがＲＡＭとして機能する種類のエレメントを含んでいても良い。この場合は、外部メモリから内部バッファに対してデータを入出力する必要があり、以下の構成情報を生成し、そして、以下を含むハードウェア情報を生成することが望ましい。
（ｄ）  入力データを第３のアドレスカウンタにより外部メモリから第１のメモリにロードする処理を実行するための第４の構成情報。
（ｅ）  出力データを第４のアドレスカウンタにより第２のメモリから前記外部メモリにストアする処理を実行するための第５の構成情報。
【００２１】
外部メモリとの入出力を制御するために、さらに異なるアドレスカウンタを設けることにより、カウンタを分散配置することが可能となり、配線資源をセーブでき、また、ハードウェア情報を生成するための配置・配線処理を高速に行うことができる。
【００２２】
また、第１のメモリおよび第２のメモリがダブルバッファタイプであれば、第４の構成情報は、第１のメモリのスワッピングに連動して入力データをロードする処理を実現するための構成情報を含み、第５の構成情報は、第２のメモリのスワッピングに連動して出力データをストアする処理を実現するための構成情報を含んでいることが望ましい。繰り返し処理を行うデータが大量の場合であっても、外部メモリから内部バッファに入出力する処理がオーバーヘッドになることを防止できる。
【００２３】
繰り返し行う第１の処理がループインデックスを用いるものである場合は、第１の構成情報は、ループインデックスをカウントするカウンタを構成するための情報を含んでいても良い。また、第１の構成情報が、第１のアドレスカウンタの値および／または第２のアドレスカウンタの値に基づきパラメータを生成する処理を実現するための構成情報を含んでいれば、ループインデックスをカウントするカウンタは省略できる。
【００２４】
さらに、第１のプログラムは、第１のアルゴリズムを含む処理を繰り返す第２のアルゴリズムを含んでいる場合は、多重にアドレスカウンタを設けて入出力を多重に行うことでも対処できるが、入出力回数が倍増することになり好ましくない。したがって、第２の構成情報および第３の構成情報に、第２のアルゴリズムを包含した処理を実現するための構成情報を含め、多重ループを統合した、共通のアドレスカウンタで制御することが望ましい。
【００２５】
さらに、第１の構成情報が、第２のアルゴリズムに含まれる第１の処理以外の処理を適切なタイミングで実行するための構成情報を含むようにすれば、第２のアルゴリズムに含まれる第１の処理以外の処理を、繰り返し処理されるデータパスに組み込むことができる。したがって、データパス構成を簡略化でき、ＰＥ資源および配線資源の消費を低減できる。
【００２６】
このようなハードウェア情報を生成する方法は、上記の構成情報をコンピュータにより生成する処理を実行するためのプログラムとして提供できる。プログラムは、ＣＤ−ＲＯＭなどの適当な記録媒体に記録して提供でき、また、インターネットなどのコンピュータネットワークを介して提供することができる。そして、適当なハードウェア資源を備えたコンピュータにプログラムをロードすることにより、そのコンピュータを、第１の処理を繰り返す第１のアルゴリズムを含む第１のプログラムを実行するために上述した構成情報を備えたハードウェア情報を生成する手段を有するコンパイラーとして使用することができる。
【発明を実施するための最良の形態】
【００２７】
図１に、データ処理装置の一例を示してある。このデータ処理装置１は、チップに集積化されたプロセッシングユニット（ＰＵ）であり、再構成可能な領域１０と、この再構成可能な領域１０を再構成する機能を備えたＲＩＳＣなどの汎用プロセッサ（以降ではプロセッサ）１５、プロセッサ１５のプログラム６４および再構成用のハードウェア情報６２を格納したメモリ１７を備えている。この集積回路装置の再構成可能な回路領域１０は、複数のエレメントがアレイまたはマトリクス状に２次元に配置されており、マトリクスと称される構成である。このマトリクス１０は、縦横に２次元に配置された複数のプロセッシングエレメント（ＰＥ）２１と、それらの間に格子状に配置された配線２２と、配線２２の接続ポイントで縦横の配線２２の接続を自由に切り替えることができるスイッチングユニット２３とを備えている。
【００２８】
ＰＥ２１は、ルックアップテーブルなどにより自在に機能を設定可能なものであっても良い。本例では、算術論理演算用のエレメント、遅延用のエレメント、メモリ用のエレメント、データを入力または出力するためにアドレスを発生させるエレメント、データの入力または出力用のエレメントなど、ある程度の機能グループに分け、それぞれの機能あるいは処理に適した内部構成のエレメントを配置することによりマトリクス１０のスペース効率を向上している。また、ある程度の機能グループに分けたエレメントを配置することにより冗長性が減少するのでＡＣ特性および処理速度も向上できるといったメリットを得ている。
【００２９】
ＰＵ１のマトリクス１０は、３６８個のＰＥ２１を備えており、それらに対しプロセッサ１５の制御の下に、プロセッサ１５から、またはメモリ１７から、制御バス１９を介して、各々のＰＥ２１の機能と、配線群２２の接続とを制御するコンフィグレーションデータが供給される。したがって、配線群２２によりＰＥ２１をフレキシブルに接続し、種々のデータフロー（データパス）を自由に構成できるようになっている。
【００３０】
ＰＵ１は、さらに、他の入力方法として、入力バッファ３３と出力バッファ３４とを用いてマトリクス１０にデータを供給する構成を備えている。入力バッファ３３は４つの入力バッファエレメントＬＤＢを備えており、バッファ３３の構成および制御をコンフィグレーションデータにより設定できるようになっている。出力バッファ３４も同様であり、４つの出力バッファエレメントＳＴＢを備えている。これらの入力バッファ３３および出力バッファ３４は、アクセス調停ユニットとして機能するバススイッチングユニット（バスインターフェイス、ＢＳＵ）３６に接続されており、ＢＳＵ３６を介して外部メモリ２との間でデータを入出力できるようになっている。各々の入力バッファエレメントＬＤＢおよび各々の出力バッファエレメントＳＴＢは、２つのバッファ部を備えたダブルバッファタイプとなっている。バッファ部の一方がデータを入力するインプットバッファ部となり、他方がデータを出力するアウトプットバッファ部となり、アウトプットバッファ部から出力すべきデータが出力されると、２つのバッファ部はスワップし、アウトプットバッファ部とインプットバッファ部が入れ替わる。
【００３１】
図２は、ＰＥ２１の一例である。ＰＥ２１は、機能を変更可能な内部データパス領域２９と、その内部データパス領域２９の機能を設定する制御ユニット５０とを備えている。図２に示したＰＥ２１ｂは、算術演算および論理演算に適した構成の演算用のＰＥである。内部データパス部２９ｂは、シフト回路ＳＨＩＦＴ、マスク回路ＭＡＳＫ、論理演算ユニットＡＬＵを備えている。制御ユニット５０は、プロセッサ１５から制御バス１９を介してコンフィグレーションデータを受信して内部データパス部２９ｂの構成を制御する。ＰＥ２１ｂは、他のＰＥも同様であるが、配線群２２に含まれるいずれかの配線から入力データを選択し、また、出力データを出力するためのセレクタ（不図示）も備えており、それらの設定もコンフィグレーションデータに基づき制御ユニット５０により行われる。したがって、ＰＥ２１ｂにおいては、制御ユニット５０により、シフト回路ＳＨＩＦＴ、マスク回路ＭＡＳＫ、論理演算ユニットＡＬＵの状態が設定され、選択された入力データｄｉｘおよびｄｉｙを加算あるいは減算したり、比較したり、論理和あるいは論理積を演算することができ、その結果が出力信号ｄｏとして選択された配線（バス）２２に出力することができる。
【００３２】
図３に示したＰＥ２１ａは、バッファ３３および３４に対するデータの入出力を制御する機能を備えたエレメントである。このＰＥ２１ａの内部データパス領域２９ａは、カウンタなどからなるアドレス発生回路２８と、セレクタＳＥＬとを備えており、制御ユニット５０により設定されたコンフィグレーションデータにしたがい、入出力を制御するためのアドレスを生成し、出力信号ｄｏとして配線２２に出力する。この出力信号ｄｏは、行配線および列配線を介して、そのまま、あるいは、他のＰＥ２１によって処理された後に入力信号ｄｉｘあるいはｄｉｙとしてＰＥ２１ａにフィードバックされる。そして、ＰＥ２１ａは、制御ユニット５０によりセットされた条件でセレクタＳＥＬが選択したアドレスを、マトリクス１０からデータ入力あるいは出力用のアドレスとして出力する。
【００３３】
図４に、アドレス発生回路２８の一例を示してある。このアドレス発生回路２８は、複数のカウンタ２８ａと、これらのカウンタ２８ａからの出力を演算してアドレスとして出力する加算器２８ｂとを備えている。各々のカウンタ２８ａは、図５に示したように、算術演算ユニットＡＬＵ２８ｃと、コンパレータ２８ｄとが組み合わされた構成となっており、ＡＬＵ２８ｃは、ＡＤＤ、ＳＵＢ、ＢＩＴシフト、ＯＲ、ＸＯＲやそれらを組み合わせた演算を行うようにセットすることが可能である。したがって、クロックが来る度に値を発生する関数発生回路としての機能があり、このカウンタ２８ａの機能は制御ユニット５０を介してプロセッサ１５からセットすることができる。
【００３４】
また、ＡＬＵ２８ｃの制御信号ｅｎを他のカウンタ２８ａから供給されるキャリー信号ｃｙによりセットしたり、コンパレータ２８ｄの出力をキャリー信号ｃｙとして他のカウンタ２８ａに伝達できる。このようにキャリー信号を利用することにより、カウンタ２８ａの状態により他のカウンタ２８ａの状態をセットし、任意のアドレスを発生させることができる。さらに、本図には示されていないが、カウンタ２８ａの制御信号ｅｎを他のＰＥ２１から供給されるキャリー信号ｃｙによりセットしたり、他のＰＥ２１に伝達することも可能である。
【００３５】
したがって、アドレスを出力するＰＥ２１ａは、制御ユニット５０にプロセッサ１５から供給されるコンフィグレーションデータにより、アドレス発生の処理内容を自由に設定することができ、さらに、他のＰＥ２１との関連性も自由にセットできる。また、アドレスを発生するＰＥ２１ａは、２種類用意されている。１つのタイプは外部メモリ２とローカルバッファである内部バッファ３３および３４との間のデータの入出力を制御するアドレスを発生するＰＥであり、３２ビットのカウンタを備え、アドレス信号をＢＳＵ３６と内部バッファ３３または３４に供給する。他のタイプは、内部バッファ３３および３４とマトリクス１０との間のデータの入出力を制御するアドレスを発生するＰＥであり、１６ビットのカウンタを備え、アドレス信号を内部バッファ３３または３４と、内部バッファ３３からデータを入力するＰＥ２１、または内部バッファ３４にデータを出力するＰＥ２１に供給する。
【００３６】
図６に、本発明を用いてハードウェア情報を出力するシステム６９の概要を示してある。コンパイラー６０には、Ｃ言語で与えられた仕様（ソースプログラム）６１が入力される。コンパイラー６０からは、ソースプログラム６１を実行するのに適したハードウェアを構成するためのハードウェア情報６２と、そのハードウェアを制御するためにそのハードウェアで実行するための実行用プログラム６４とが出力される。この段階における実行用プログラム６４は、対象のハードウェアにおいて直ぐに実行可能なプログラムあるいはコードであっても良く、また、対象のハードウェアに適合する内容に変換された中間言語によるプログラムであっても良い。中間言語による実行用プログラムは、ハードウェアで直ぐに実行可能とするために、さらに、機械語に変換する必要があるかもしれない。コンパイラー６０は、これらの出力６２および６４を生成して出力するために、ソースプログラム６１の実行のために利用可能なハードウェア資源の情報が格納されたハードウェアライブラリ６５を参照する。本例においてハードウェアライブラリ６５に格納される、動的に再構成可能な領域を備えたＰＵ１のハードウェア資源の情報としては、例えば、ＰＥ２１の種類、数量、各ＰＥ２１で実行可能な処理およびそのために消費されるクロック数（レイテンシ）、配線群２２の量および接続可能な範囲などがある。
【００３７】
このシステム６９は、適当なハードウェア資源を備えた汎用のコンピュータを用いて構成することが可能であり、そのコンピュータをコンパイラー６０として機能させるためのソフトウェア（プログラム）６８をＣＤ−ＲＯＭなどの適当な記録媒体に記録して提供し、適当なタイミングでロードさせれば良い。プログラム６８は、インターネットなどのコンピュータネットワークを介して提供することも可能である。また、ソースプログラム６１、ハードウェアライブラリ６５、ハードウェア情報６２および実行用プログラム６４といった入出力データも、システム６９の記録装置に対して入出力しても良いし、コンピュータネットワークを介して異なるサーバに対して入出力しても良い。
【００３８】
図７に、コンパイラー６０における処理の概要をフローチャートにより示してある。まず、ステップ７１において、Ｃ言語あるいは他の高級プログラム言語で記述されたソースプログラム６１を読み込み、ステップ７２においてプログラム６１を解析する。ステップ７３において、プログラム６１に記述されたアルゴリズムの内、一部のアルゴリズムが特定の処理（第１の処理）を繰り返し行うループ処理であると判断されると、ステップ７４において、そのループ処理を行うアルゴリズム（第１のアルゴリズム）の記述に対して入力バッファおよび出力バッファがリザーブされる。さらに、ステップ７５において、それらのバッファに対して入出力処理を行うアドレスカウンタを備えたＰＥ２１ａがそれぞれリザーブされる。したがって、この段階で、入力データを第１のアドレスカウンタにより第１のメモリ（バッファ）からロードする処理を実行するための第２の構成情報６３ｂと、出力データを第２のアドレスカウンタにより第２のメモリ（バッファ）にストアする処理を実行するための第３の構成情報６３ｃが生成される。
【００３９】
また、バッファと外部メモリとの間の入出力を制御する必要がある場合は、この段階で、さらに、入力データを第３のアドレスカウンタにより外部メモリから第１のメモリにロードする処理を実行するための第４の構成情報６３ｄと、出力データを第４のアドレスカウンタにより第２のメモリから外部メモリにストアする処理を実行するための第５の構成情報６３ｅとが生成される。
【００４０】
次に、ステップ７６において、ステップ７４および７５と前後してあるいは同時（並列）に、第１のアルゴリズムで繰り返し行われる第１の処理を実行するデータパスが、ＰＥ２１と配線群２２の組み合わせにより生成され、それらＰＥ２１の配置を含めた構成情報（第１の構成情報）６３ａが生成される。また、実行用プログラム６４を実行中に、これらの第１から第３の構成情報がマトリクス１０に適切なタイミングでロードされる必要がある。このため、プロセッサ１５に対してロードするタイミングを与えるインターフェイスとなるステートメント６４ａが生成され、実行用プログラム６４に含まれるようにする。
【００４１】
ソースプログラム６１のループ処理以外は、ステップ７７においてマトリクス１０またはプロセッサ１５で行うことが適当か否か判断される。ＰＥ２１を用いたデータパスで実行するメリットがある処理は、そのためのＰＥ２１を用いた構成情報が生成される。プロセッサ１５において実行することが望ましい処理の記述は、プロセッサ１５において実行可能な実行用のコードに変換される。
【００４２】
ステップ７８において、プログラム６１の解析とハードウェア情報６２および実行用プログラム６４への変換が終了すると、ステップ７９および８０において、ハードウェア情報６２および実行用プログラム６４を出力する。ハードウェア情報６２および実行用プログラム６４は、出力前の段階、あるいは生成途中で様々な最適化が行われる。ハードウェア情報６２においては、いったん生成されたマトリクス１０の構成情報は、ハードウェア資源の割当てを最適化したり、配置配線を行ってタイミング収束を確認するなどの様々な過程を経て最終的に出力されるが、それらについての詳細については記載していない。さらに、生成されたハードウェア情報６２および実行用プログラム６４は、シミュレーションにより動作が検証され、さらなる最適化が図られる。
【００４３】
図８に、ソースプログラム６１の一例を示してある。このプログラム６１には、変数ａ［ｉ］およびｂ［ｉ］を足して変数ｚ［ｉ］を生成する処理６６ａをＮ回繰り返して行うループ処理６７が含まれている。図９は、参考として、ＦＰＧＡなどにループ処理６７をハードウェアマクロ８１として実装した例を示してある。このハードウェアマクロ８１は、足し算６６ａを行うデータパス８２と、それをループカウンタ８４のカウントによりコントロールするステートマシン８３とが実装されている。また、変数の入出力処理８５は、メモリ管理ユニットなどの専用ハードウェアに任される。
【００４４】
図１０に、コンパイラー６０により、図８に示したソースプログラム６１から生成されたハードウェア情報６２により、ＰＵ１が再構成された状態を模式的に示してある。まず、プログラム６１のループ処理のアルゴリズム６７において、繰り返し実行される処理を定義するステートメント６６ａに対応して生成された第１の構成情報６３ａにより、マトリクス１０に、バッファに対して入出力するタイプのデータストリーム（データパス）９１がＰＥ２１．１１〜２１．１４により構成される。足し算を行うＰＥ２１．１３には、図２に示した論理演算用のＰＥ２１ｂを割当てることができる。データの入出力を行うＰＥ２１．１１などにも論理演算用のＰＥ２１ｂを割当てることができるが、フリップフロップを備えた程度のデータ入出力専用のタイプの異なるＰＥを用意して割当てることも可能である。
【００４５】
次に、ループ処理のアルゴリズム６７の繰り返しを定義するステートメント６６ｂに対応して生成された第２の構成情報６３ｂにより、入力データａ［ｉ］およびｂ［ｉ］をそれぞれ格納するバッファ３３ａおよび３３ｂが割当てられる。また、それらのバッファ３３ａおよび３３ｂに対し内部入力アドレスをそれぞれ供給し、入力データをデータパス９１に入力する機能９２ａおよび９２ｂが、ＰＥ２１．３および２１．４を中心に構成される。第２の構成情報６３ｂには、ＰＥ２１の割り当てだけではなく、ＰＥ２１の内部の設定、アドレスの出力先までのワイヤリング情報など、実際に信号を入出力するために必要な情報が多く含まれているが、ここではＰＥ２１の選択を中心に記載している。他の構成情報についても同様である。
【００４６】
内部アドレスカウンタとして用いるＰＥ２１．３および２１．４としては、図４に示したアドレス発生用のＰＥ２１ａが用いられる。論理演算用のＰＥ２１ｂを組み合わせて内部アドレスカウンタとして機能させる構成も可能であるが、このマトリクス１０には、アドレス発生用のＰＥ２１ａが用意されているので、それを用いて構成する方が経済的である。
【００４７】
また、第２の構成情報６３ｂと共に生成された第３の構成情報６３ｃにより、出力データｚ［ｉ］を格納する出力バッファ３４ａが割当てられ、バッファ３４ａに対し内部出力アドレスを供給し、データパス９１から処理済みのデータを出力する機能９３が、ＰＥ２１．６を中心に構成される。さらに、第４の構成情報６３ｄにより、入力データａ［ｉ］およびｂ［ｉ］を外部メモリ２ａおよび２ｂから、それぞれのバッファ３３ａおよび３３ｂにロードする機能９４ａおよび９４ｂが、ＰＥ２１．１およびＰＥ２１．２を中心に構成される。また、第５の構成情報６３ｅにより、出力データｚ［ｉ］を外部メモリ２ｚにストアする機能９５が、ＰＥ２１．５を中心に構成される。外部メモリ２にはＢＳＵ３６を介して調停された後にアクセスするので、ＰＥ２１．１、２１．２および２１．５において生成された外部アドレスはＢＳＵ３６に供給される。
【００４８】
図１０に示すように、本発明において生成されるハードウェア情報による構成では、ループ処理は、１つのループカウンタに基づくシーケンサにより制御されるのではなく、多数の簡易な構成のアドレスカウンタにより制御される。したがって、多数のアドレスカウンタを生成するために、ハードウェア資源は使用される。しかしながら、個々のアドレスカウンタは、機能が限定されたもので良いので、専用化したＰＥ２１ａとして実装することができ、実装密度は向上する。さらに、それらのＰＥ２１ａを入出力するバッファ３３ａ、３３ｂおよび３４ａの近傍に配置することが可能であり、また、外部メモリ２ａ、２ｂおよび２ｚにアクセスするためのアドレスカウンタはＢＳＵ３６にアドレスを出力し易い場所に分散して配置できる。したがって、アドレスを供給するために使用される配線資源は限定されたものとなり、データパスを構成するための配線資源の多くを割くことができる。
【００４９】
特に、データパス９１によりデータをパイプライン処理しようとすると本発明のメリットは大きい。図９に示したように、パイプラインを構成していないデータパス８２においては、１つのカウンタでデータパスを制御したり、入出力データを管理することはそれほど難しくはないかもしれない。しかしながら、ループ内のアルゴリズムが複雑になれば、トークンを用いたデータフロータイプのデータパスか、パイプライン処理を行うデータパスを構成しないと、タイミング収束が図れない。さらに、データパスの処理能力を向上しようとするパイプライン処理が好適であるが、その場合、同じインデックスで入力データと出力データとを一括で管理できず、シーケンサは複雑化する。これに対し、本発明のハードウェア構成であれば、もともとアドレスカウンタは分散しているので、ループ処理のアルゴリズムの複雑さに左右されずにパイプライン構成をマトリクス１０に実装することができる。
【００５０】
マトリクス１０に構成されたデータパス９１において、ループインデックスを使用する処理が行われる場合がある。このようなときは、ループインデックスを使用する処理を行うＰＥ２１の近傍にループインデックス用のカウンタを構成することが配線資源の消費を少なくする点からは望ましい。しかしながら、ループカウンタを構成するための多くのＰＥ２１を必要とするのであれば、余っているアドレス発生用のＰＥ２１ａをループカウンタとして使用することができる。アドレス発生用のＰＥ２１ａに余裕がなければ、この処理のために使用されているアドレス発生用のＰＥ２１ａの出力をデータパス９１に導いて、ＰＥ２１の内部でループインデックスを演算することが可能である。
【００５１】
図１０に示した例では、マトリクス１０の外に用意されたキャッシュ用のバッファ３４および３５をループ処理用のデータの格納領域として用いている。マトリクス内にＲＡＭとして機能するタイプの異なるＰＥ２１を配置することにより、マトリクス１０の内部にクローズしたループ処理用のデータパスを形成することも可能である。
【００５２】
外部メモリ２ａ、２ｂおよび２ｚに対し、バッファ３３ａ、３３ｂおよび３４ａをキャッシュメモリとして使用する場合、ＢＳＵ３６を介して外部メモリとバッファとを接続するので、データの転送容量は大きいとしてもバッファと外部メモリとのアクセスを占有した状態で維持することは難しい。本例のバッファ３３ａ、３３ｂおよび３４ａは２バンクタイプのメモリであり、ダブルバッファを構成し、入力側と出力側とのスワッピングと連動させながら外部メモリとの間でデータを交換できる。したがって、入力変数入力データａ［ｉ］またはｂ［ｉ］のアレイサイズが大きな場合であっても、データの入出力のオーバーヘッドを低減することができ、入出力型のデータパスに変換したループ処理により十分な処理速度を確保することができる。
【００５３】
本発明のハードウェア情報の発生方法は、複雑なループ処理を最適化し、簡易な構成で実現するためにも適している。例えば、図１１に示すような、多重のループ処理を含むアルゴリズム６７ａにおいては、多重にバッファを設け、多重にアドレスカウンタを設けて処理することが可能である。しかしながら、多重構造になっているインデックスが連続したデータ配列を示すものであれば、多重のバッファを１つにマージすると共に、多重のアドレスカウンタを１つにマージし、多重ループを制御する情報を共通したアドレスカウンタに包含させることができる。したがって、多重ループを１つのループ処理にマージして簡易な構成で実行することができる。データ配列が連続しない場合であっても、アドレス発生用のＰＥ２１ａを論理演算用のＰＥ２１ｂと組み合わせて、多重ループを処理するのに適したアドレスが発生させ、多重ループを１つのループ処理にマージすることは可能である。
【００５４】
図１２に示したアルゴリズム６７ｂは、多重ループで、内側のループの外側にステートメント６６ｃが記載されたものである。この場合は、最も内側のループの処理を行うデータパスの構成に、外側のステートメント６６ｃの処理を適切なタイミングで行う条件付で実行する構成を含ませることにより、単純な多重ループにすることができる。したがって、上記と同様に、多重ループを１つのループ処理にマージしてマトリクス１０に実装することが可能となる。
【００５５】
以上では、複数のＰＥがマトリクス状に配列された、再構成可能な領域を備えたＰＵ１に基づき、本発明を説明しているが、本発明の適用可能なハードウェアは、これに限定されない。同一構成で、ＡＬＵあるいはそれに匹敵する程度の処理機能を備えた複数のＰＥが適当なネットワークにより接続された様々なタイプの再構成可能なハードウェアにおいて、ループ処理を実装するために本発明は好適である。さらに、ＦＰＧＡあるいは専用回路に本発明を適用することも可能である。
【図面の簡単な説明】
【００５６】
【図１】プロセッシングユニット（ＰＵ）の概要を示す図。
【図２】プロセッシングエレメント（ＰＥ）の一例を示す図。
【図３】アドレスを発生するのに適したＰＥの例を示す図。
【図４】図３に示したデータパス部のアドレス発生回路の構成を示す図。
【図５】図４に示したカウンタの構成を示す図。
【図６】ハードウェア情報を生成するシステムの概要を示す図。
【図７】コンパイラーの処理の概要を示す図。
【図８】ソースプログラムの一例を示す図。
【図９】ステートマシンを用いた実装例を示す図。
【図１０】図１に示したＰＵに実装した例を示す図。
【図１１】ソースプログラムの異なる例を示す図。
【図１２】ソースプログラムのさらに異なる例を示す図。
【符号の説明】
【００５７】
１    データ処理装置（集積回路装置）
１０    再構成可能な領域（マトリクス）
２１    プロセッシングエレメント（ＰＥ）、    ２２    配線
６０    コンパイラ、    ６１    ソースプログラム
６２    ハードウェア情報
６３ａ    第１のアルゴリズムで繰り返し行なわれる第１の処理を実行するデータパスを構成する第１の構成情報
６３ｂ    入力データを第１のアドレスカウンタにより第１のメモリからロードする処理を実行するための第２の構成情報
６３ｃ    出力データを第２のアドレスカウンタにより第２のメモリにストアする処理を実行するための第３の構成情報
９１    データパス、    ９２    データを入力する機能
９３    データを出力する機能
【図１】
2005353061.tif 000003
【図２】
2005353061.tif 000004
【図３】
2005353061.tif 000005
【図４】
2005353061.tif 000006
【図５】
2005353061.tif 000007
【図６】
2005353061.tif 000008
【図７】
2005353061.tif 000009
【図８】
2005353061.tif 000010
【図９】
2005353061.tif 000011
【図１０】
2005353061.tif 000012
【図１１】
2005353061.tif 000013
【図１２】
2005353061.tif 000014