(57)【特許請求の範囲】
【請求項１】
データフローグラフ（ＤＦＧ）を分割して２以上のサブＤＦＧを生成するデータフローグラフ生成装置であって、  
サブＤＦＧ間のデータ入出力がメモリを介して行われるような複数のサブＤＦＧを生成する手段、
前記サブＤＦＧ内の第１ノードからのデータがメモリへ出力され、かつ前記第１ノードの出力ノードに接続されたスルーノードである第２ノードからのデータがメモリに出力される場合、前記第２ノードからのメモリへの出力を削除する手段、
を備えることを特徴とするデータフローグラフ生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、集積回路の動作設定に必要なデータフローグラフを生成する技術に関する。
【背景技術】
【０００２】
近年、アプリケーションに応じてハードウエアの動作を変更可能なリコンフィギュラブルプロセッサの開発が進められている。リコンフィギュラブルプロセッサを実現するためのアーキテクチャとしては、ＤＳＰ(Digital Signal Processor)や、ＦＰＧＡ(Field Programmable Gate Array)を用いる方法が存在する。
【０００３】
ＦＰＧＡ（Field Programmable Gate Array）はＬＳＩ製造後に回路データを書き込んで比較的自由に回路構成を設計することが可能であり、専用ハードウエアの設計に利用されている。ＦＰＧＡは、論理回路の真理値表を格納するためのルックアップテーブル（ＬＵＴ）と出力用のフリップフロップからなる基本セルと、その基本セル間を結ぶプログラマブルな配線リソースとを含む。ＦＰＧＡでは、ＬＵＴに格納するデータと配線データを書き込むことで目的とする論理演算を実現できる。しかし、ＦＰＧＡでＬＳＩを設計した場合、ＡＳＩＣ（Application Specific IC）による設計と比べると、実装面積が非常に大きくなり、コスト高になる。そこで、ＦＰＧＡを動的に再構成することで、回路構成の再利用を図る方法が提案されている（例えば、特許文献１参照。）。
【０００４】
例えば衛星放送では、季節などにより、放送モードを切り替えて画質の調整などを行うこともある。受信機では、放送モードごとに複数の回路を予めハードウエア上に作り込んでおき、放送モードに合わせて選択器で回路を切り替えて受信している。したがって、受信機の他の放送モード用回路はその間、遊んでいることになる。モード切り替えのように、複数の専用回路を切り替えて使用し、その切り替え間隔が比較的長い場合、複数の専用回路を作り込む代わりに、切り替え時にＬＳＩを瞬時に再構成することにすれば、回路構造をシンプルにして汎用性を高め、同時に実装コストを抑えることができる。このようなニーズに応えるべく、動的に再構成可能なＬＳＩに製造業界の関心が集まっている。特に、携帯電話やＰＤＡ（Personal Data Assistance）などのモバイル端末に搭載されるＬＳＩは小型化が必須であり、ＬＳＩを動的に再構成し、用途に合わせて適宜機能を切り替えることができれば、ＬＳＩの実装面積を抑えることができる。
【０００５】
ＦＰＧＡは回路構成の設計自由度が高く、汎用的である反面、全ての基本セル間の接続を可能とするため、多数のスイッチとスイッチのＯＮ／ＯＦＦを制御するための制御回路を含む必要があり、必然的に制御回路の実装面積が大きくなる。また、基本セル間の接続に複雑な配線パターンをとるため、配線が長くなる傾向があり、さらに１本の配線に多くのスイッチが接続される構造のため、遅延が大きくなる。そのため、ＦＰＧＡによるＬＳＩは、試作や実験のために利用されるにとどまることが多く、実装効率、性能、コストなどを考えると、量産には適していない。さらに、ＦＰＧＡでは、多数のＬＵＴ方式の基本セルに構成情報を送る必要があるため、回路のコンフィグレーションにはかなりの時間がかかる。そのため、瞬時に回路構成の切り替えが必要な用途にはＦＰＧＡは適していない。
【０００６】
それらの課題を解決するため近年、ＡＬＵ(Arithmetic Logic Unit)と呼ばれる基本演算機能を複数持つ多機能素子を多段に並べたＡＬＵアレイを用いたリコンフィギュラブルプロセッサの検討も行われるようになった。ＡＬＵアレイでは、処理が上から下の一方向に流れるので、水平方向のＡＬＵを結ぶ配線は基本的には不要である。そのため、ＦＰＧＡと比較して回路規模を小さくすることが可能となる。
【０００７】
ＡＬＵアレイでは、コマンドデータによりＡＬＵ回路の演算機能構成と前後段のＡＬＵを接続する接続部の配線が制御され、所期の演算処理を実行することができる。コマンドデータは、一般にＣ言語等の高級プログラム言語で記述されたソースプログラムからデータフローグラフ（ＤＦＧ：Data Flow Graph）を作成し、その情報をもとに作成される。
ＡＬＵアレイ上に１度にマッピングできるＤＦＧの大きさはＡＬＵアレイの回路規模により制限されるため、大きなＤＦＧは複数のＤＦＧに分割して結合させる必要がある。結合して生成されるＤＦＧの大きさは、ＡＬＵアレイで実行する回路コンフィギュレーションの回数に直接的な影響を与えるため、できるだけ小さく生成することが好ましい。
【０００８】
こうした状況に鑑み、本出願人は、リコンフィギュラブル回路の動作設定に必要なＤＦＧを効率よく処理できる技術を開発した（特許文献２参照）。
【０００９】
この特許文献２のＤＦＧ処理方法は、機能の変更が可能なリコンフィギュラブル回路にマッピングされるＤＦＧが、前記リコンフィギュラブル回路の論理回路の列数及び段数以下となるようＤＦＧを再構成する方法に関するものである。
【特許文献１】特開平１０-２５６３８３号公報
【特許文献２】特開２００６−４３４５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
ところで、上記特許文献２のＤＦＧ処理方法においては、リコンフィギュラブル回路上にマッピングされる分割されたサブＤＦＧからの出力データは、リコンフィギュラブル回路に接続されたメモリ（特許文献２でいうところのメモリ部２９）を介して、他の分割されたサブＤＦＧに渡される。
【００１１】
しかし、このようなＤＦＧ処理方法によれば、サブＤＦＧ間のデータ受渡しが多くなるとそれだけ多くのメモリが必要となる。場合によってはメモリ不足により演算そのものが実行不可能となる恐れがある。
【００１２】
そこで、この発明は上記の事情に鑑み、リコンフィギュラブル回路の動作設定に必要なＤＦＧを前記リコンフィギュラブル回路にマッピング可能な大きさに再構成すると共に、サブＤＦＧ間のデータ受渡しに必要なメモリの使用量を減らすことを目的とする。
【課題を解決するための手段】
【００１３】
本発明のある態様は、データフローグラフ（ＤＦＧ）を分割して２以上のサブＤＦＧを生成するデータフローグラフ生成装置であって、サブＤＦＧ間のデータ入出力がメモリを介して行われるような複数のサブＤＦＧを生成する手段、前記サブＤＦＧ内の第１ノードからのデータがメモリへ出力され、かつ前記第１ノードの出力ノードに接続されたスルーノードである第２ノードからのデータがメモリに出力される場合、前記第２ノードからのメモリへの出力を削除する手段、を備えることを特徴とする。
【００１４】
このデータフローグラフ生成装置によれば、ＤＦＧを分割して得られるサブＤＦＧ間のデータ受渡しに必要なメモリの使用量を減らすことができる。また、使用メモリの低減に伴い消費電力を低減することもできる。
【００１６】
本発明のある態様のデータフローグラフ生成装置は、前記サブＤＦＧ生成手段で生成された複数のサブＤＦＧを結合するＤＦＧ結合手段を更に備える。サブＤＦＧ生成手段と、ＤＦＧ結合手段の両方を備えることにより、前記ＤＦＧ（複数のサブＤＦＧに分割される前のＤＦＧ）の再構成を行うことができる。
【００１７】
ところで、上記のサブＤＦＧ生成手段は、サブＤＦＧの一部ノードからのメモリ出力をしている。したがって、このままサブＤＦＧを結合しても、結合後のＤＦＧでは正しく演算を行うことができない。そこで、このＤＦＧ結合手段は、前記サブＤＦＧ生成手段での処理により使用されなくなるメモリからの入力を受けていたノードの入力元の変更を行う。例えば、前記メモリの異なる領域をＡ、Ｂとしたとき、このＤＦＧ結合手段は、メモリ出力の前記削除により使用されなくなるメモリ領域Ｂからの入力を受けていたノードの入力元を、メモリ領域Ａに変更する、といった処理を行う。
【００１８】
本発明のある態様のデータフローグラフ生成装置は、集積回路にマッピングされるＤＦＧの生成に用いられる。このデータフローグラフ生成装置は、上記説明したようなサブＤＦＧ生成手段、及びＤＦＧ結合手段を有する。そして、入力されたＤＦＧを、前記サブＤＦＧ生成手段、及び前記ＤＦＧ結合手段での処理を経て、前記集積回路にマッピング可能なＤＦＧに再構成することを特徴とする。
【００１９】
なお、集積回路にマッピング可能なＤＦＧとは、例えば、集積回路の大きさを超えないようなＤＦＧであるとか、集積回路の接続制限を満たすようなＤＦＧのことをいう。この集積回路の例としては、リコンフィギュラブル回路が挙げられる。この場合、前記のサブＤＦＧ生成手段は、分割して生成するサブＤＦＧの列数がリコンフィギュラブル回路１段あたりの論理回路の数以下となるようなサブＤＦＧを生成する。更に生成したサブＤＦＧはリコンフィギュラブル回路各段の論理回路の集合体間に課された接続制限も満たす。
【００２０】
なお、上記の集積回路が回路遅延を有している場合は、たとえＤＦＧが集積回路にマッピング可能な大きさであっても演算を正しく行えないようなことがある。そこで、上記のサブＤＦＧ生成手段は、該集積回路の回路遅延を考慮してサブＤＦＧの生成を行うものであっても良い。回路規模を小さくすることで回路遅延の問題を解消することができるからである。
【００２１】
本発明の集積回路の設定データ生成装置は、ソースプログラムをコンパイルしてＤＦＧを生成するコンパイル手段と、前記コンパイル手段が生成するＤＦＧを再構成することを特徴とした上記のデータフローグラフ生成装置と、前記データフローグラフ生成装置で再構成されたＤＦＧから、前記集積回路に所期の回路を構成するための設定データを生成する設定データ生成手段を備えることを特徴とする。
【００２２】
本発明の集積回路は、上記の設定データ生成装置から供給された設定データに基づいて構成されたことを特徴とする。
【００２３】
本発明の処理装置は、上記の設定データ生成装置と、上記の集積回路を備えることを特徴とする。
【００２４】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラムとして表現したものもまた、本発明の態様として有効である。
【発明の効果】
【００２５】
本発明によれば、リコンフィギュラブル回路などの集積回路の動作設定に必要なＤＦＧを、前記集積回路にマッピング可能な大きさに再構成することができるだけでなく、更に前記ＤＦＧを構成するサブＤＦＧ間のデータ受渡しに必要なメモリの使用量を減らすことができる。また、これによって、集積回路による演算がメモリ不足により実行不可能になるような恐れも減らすことができる。また、使用メモリの低減に伴い消費電力を低減することもできる。
【発明を実施するための最良の形態】
【００２６】
図１は、実施例に係る処理装置１０の構成図である。処理装置１０は、集積回路装置２６を備える。集積回路装置２６は、回路構成を再構成可能とする機能を有する。集積回路装置２６は１チップとして構成され、リコンフィギュラブル回路１２、設定部１４、制御部１８、出力回路２２、メモリ部２７および経路部２４、２９を備える。リコンフィギュラブル回路１２は、設定を変更することにより、機能の変更を可能とする。
【００２７】
設定部１４は、リコンフィギュラブル回路１２に所期の回路を構成するための設定データ４０を供給する。設定部１４は、プログラムカウンタのカウント値に基づいて記憶したデータを出力するコマンドメモリとして構成されてもよい。この場合、制御部１８がプログラムカウンタの出力を制御する。この意味において、設定データ４０はコマンドデータと呼ばれてもよい。経路部２４、２９は、フィードバックパスとして機能し、リコンフィギュラブル回路１２の出力を、リコンフィギュラブル回路１２の入力に接続する。出力回路２２は、例えばデータフリップフロップ（Ｄ-ＦＦ）などの順序回路として構成され、リコンフィギュラブル回路１２の出力を受ける。メモリ部２７は経路部２９に接続されている。リコンフィギュラブル回路１２は組合せ回路または順序回路等の論理回路として構成される。
【００２８】
メモリ部２７は、制御部１８からの指示に基づき、リコンフィギュラブル回路１２から出力されるデータ信号および／または外部から入力されるデータ信号を格納するための記憶領域を有する。メモリ部２７はＲＡＭとして構成される。メモリ部２７にデータを書き込んで、そのデータを読み出すためには、少なくとも、それぞれの処理につき１クロック分の時間がかかる。メモリ部２７に格納されたデータ信号は、制御部１８からの指示に基づいて、経路部２９を通じてリコンフィギュラブル回路１２の入力として伝達される。メモリ部２７は、制御部１８からの指示により所定のタイミングでデータ信号をリコンフィギュラブル回路１２に供給することができる。なお、メモリ部２７は、設定部１４からの指示によりデータ信号を出力してもよい。設定部１４がコマンドメモリとして構成されている場合、メモリ部２７の出力タイミングを指示するコマンドデータを有し、制御部１８からのカウント値に基づいてコマンドデータをメモリ部２７に出力してもよい。この場合、設定部１４は、メモリ部２７の動作を制御する制御部としても機能する。
【００２９】
リコンフィギュラブル回路１２は、機能の変更が可能な論理回路を有して構成される。具体的にリコンフィギュラブル回路１２は、複数の演算機能を選択的に実行可能な論理回路を複数段に配列させた構成を備え、さらに前段の論理回路列の出力と後段の論理回路列の入力との接続関係を設定可能な接続部を備える。各段に含まれる複数の論理回路は、論理回路の集合体を構成する。この接続部は、前段の論理回路列の出力すなわち内部状態を保持する状態保持回路（以下、ＦＦ回路とも呼ぶ）の機能も備える。複数の論理回路は、マトリックス状に配置される。各論理回路の機能と、論理回路間の接続関係は、設定部１４により供給される設定データ４０に基づいて設定される。設定データ４０は、以下の手順で生成される。
【００３０】
集積回路装置２６により実現されるべきプログラム３６が、記憶部３４に保持されている。プログラム３６は、回路における処理の動作を記述した動作記述を示し、信号処理回路または信号処理アルゴリズムなどをＣ言語などの高級言語で記述したものである。コンパイル部３０は、記憶部３４に格納されたプログラム３６をコンパイルし、プログラム全体のデータフローグラフ（ＤＦＧ）３８に変換して記憶部３４に格納する。ＤＦＧ３８は、回路における演算間の実行順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。一般に、ＤＦＧ３８は、上から下に向かって演算が進むように形成される。
【００３１】
データフローグラフ処理部３１は、コンパイル部３０により生成された１以上のＤＦＧを、リコンフィギュラブル回路１２の論理回路の集合体に含まれる論理回路の数に応じて、複数のサブＤＦＧに分割する。具体的には、１以上のＤＦＧを、リコンフィギュラブル回路１２の段あたりの論理回路数、すなわち列数以下となる大きさに分割する。リコンフィギュラブル回路１２が６列×３段の論理回路を有して構成される場合、ＤＦＧが６列を超えている場合に、列数を６以下とするサブＤＦＧに分割する。
【００３２】
そして、データフローグラフ処理部３１は、分割した複数のサブＤＦＧを、論理回路の列数を超えないように結合する。これにより、列数を論理回路の集合体の列数以下とする結合ＤＦＧを生成する。
【００３３】
ここで、生成された結合ＤＦＧがリコンフィギュラブル回路の論理回路の集合体の個数（論理回路を構成するＡＬＵの段数）を超える場合、データフローグラフ処理部３１は、更に結合ＤＦＧを分割して、複数のサブ結合ＤＦＧを生成する。具体的に、データフローグラフ処理部３１は、結合したＤＦＧをリコンフィギュラブル回路１２の回路の段数以下となるように再分割する。リコンフィギュラブル回路１２が６列×３段の論理回路を有して構成される場合、結合したＤＦＧは、３段以下のサブ結合ＤＦＧに再分割される。分割した複数のサブ結合ＤＦＧは記憶部３４に格納される。リコンフィギュラブル回路１２に、分割した複数のサブ結合ＤＦＧにより定められる回路を繰り返し生成することで、リコンフィギュラブル回路１２上に所期の回路を表現することが可能となる。
【００３４】
また、プログラム３６の構成上、コンパイルした時点で複数のＤＦＧが生成されることもある。例えば、互いに関連する複数のプログラム３６をコンパイルする場合や、繰り返し呼び出されるルーチンプログラムが複数存在するプログラム３６をコンパイルする場合などである。処理装置１０において、複数のＤＦＧがコンパイル部３０により生成され、またコンパイル部３０により生成されたＤＦＧをデータフローグラフ処理部３１が上述した処理を行うことで、複数のサブ結合ＤＦＧが生成される。
【００３５】
設定データ生成部３２は、データフローグラフ処理部３１により決定されたＤＦＧ３８をもとに、設定データ４０を生成する。設定データ４０は、ＤＦＧ３８をリコンフィギュラブル回路１２にマッピングするためのデータであり、リコンフィギュラブル回路１２における論理回路の機能や論理回路間の接続関係、さらには論理回路に入力させる定数データなどを定める。以下では、設定データ生成部３２が、１つの生成すべきターゲット回路を分割してできる複数の回路の設定データ４０を生成する例について説明する。
【００３６】
図２は、ターゲット回路４２を分割してできる複数の回路について説明するための図である。１つのターゲット回路４２を分割して生成される回路を、「分割回路」と呼ぶ。この例では、１つのターゲット回路４２が、上下方向および左右方向に４つの分割回路、すなわち分割回路Ａ、分割回路Ｂ、分割回路Ｃ、分割回路Ｄに分割されている。複数の分割回路は、リコンフィギュラブル回路１２の列数の範囲内でそれぞれ結合され、実質的に等価な新たなターゲット回路として再生成されることになる。
【００３７】
例えば、生成すべきターゲット回路４２の横方向のノード数がリコンフィギュラブル回路１２の横方向のノード数（列数）よりも大きい場合、リコンフィギュラブル回路１２にマッピングできる大きさになるように、ターゲット回路４２のＤＦＧ３８がデータフローグラフ処理部３１において左右方向に分割される。なおノードは、ＤＦＧ３８において論理回路の機能を表現する。また、リコンフィギュラブル回路１２の列数や、ＡＬＵ間の入出力制限などにより、上下方向のノード間の接続を変更する必要がある場合に、ターゲット回路４２のＤＦＧ３８が上下方向に分割される。リコンフィギュラブル回路１２の配列構造は、制御部１８からデータフローグラフ処理部３１に伝えられてもよく、また予め記憶部３４に記録されていてもよい。本実施例において、ＤＦＧ３８は演算間の実行順序の依存関係を表現するものであり、データフローグラフ処理部３１は、ＤＦＧを、リコンフィギュラブル回路１２の列数に応じて分割し、分割したＤＦＧをサブＤＦＧとして設定する。
【００３８】
また、データフローグラフ処理部３１は、複数のサブＤＦＧの接続関係を調査する。なお、左右方向のみに分割した場合も同様に、データフローグラフ処理部３１は、その接続関係を調査する必要がある。接続関係を調査すると、データフローグラフ処理部３１は、接続関係にしたがって、複数のサブＤＦＧを結合し、１つの大きな結合ＤＦＧを生成する。なお、この結合ＤＦＧは、その列数がリコンフィギュラブル回路１２の列数以下となるように生成される。結合したＤＦＧがリコンフィギュラブル回路１２の段数よりも大きい場合、データフローグラフ処理部３１は結合したＤＦＧを分割して複数のサブ結合ＤＦＧを生成する。
【００３９】
設定データ生成部３２は、結合ＤＦＧの設定データ４０を生成し、記憶部３４に記憶する。この設定データ４０は、結合ＤＦＧを、リコンフィギュラブル回路１２にマッピングするためのデータとして表現したものである。このように、リコンフィギュラブル回路１２の列数に応じてＤＦＧを再構成して、ターゲット回路４２の設定データ４０を生成することにより、汎用性の高い処理装置１０を実現することが可能となる。
【００４０】
なお、データフローグラフ処理部３１において複数のサブ結合ＤＦＧが生成された場合、設定データ生成部３２は、複数のサブ結合ＤＦＧの設定データ４０を生成し、記憶部３４に記憶する。複数の設定データ４０は、リコンフィギュラブル回路１２の段数以下に分割した複数のサブ結合ＤＦＧを、リコンフィギュラブル回路１２にマッピングするためのデータとして表現したものである。これにより、リコンフィギュラブル回路１２の回路規模よりも大きいＤＦＧを、リコンフィギュラブル回路１２にマッピング可能な大きさに処理することが可能となる。即ち、処理装置１０によれば、回路規模の小さいリコンフィギュラブル回路１２を用いて、所望の回路を再構成することが可能となる。
【００４１】
図３は、リコンフィギュラブル回路１２の構成を示す。リコンフィギュラブル回路１２は、複数の演算機能を選択的に実行可能な論理回路５０より構成される論理回路列を複数備える。具体的に、リコンフィギュラブル回路１２は、論理回路列の多段接続構造と、各段に設けられた接続部５２を備えて構成される。ここで多段とは、２以上の段であることを意味する。接続部５２は、前段の論理回路の出力と後段の論理回路の入力の任意の接続関係あるいは予め定められた接続関係の組合せの中から選択された接続関係を設定することができる。また接続部５２は、前段の論理回路の出力信号を保持することができる。リコンフィギュラブル回路１２では、論理回路の多段接続構造により、上段から下段に向かって演算が進められる。なお、リコンフィギュラブル回路１２は、論理回路列の１段の接続構造を有していてもよい。
【００４２】
リコンフィギュラブル回路１２は、論理回路５０としてＡＬＵ(Arithmetic Logic Unit)を有している。ＡＬＵは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、論理和、論理積、ビットシフトなどの複数種類の多ビット演算を設定により選択的に実行できる。各ＡＬＵは、複数の演算機能を設定するためのセレクタを有して構成されている。図示の例では、ＡＬＵが、２つの入力端子と２つの出力端子を有して構成される。
【００４３】
図示のように、リコンフィギュラブル回路１２は、縦方向にＸ個、横方向にＹ個のＡＬＵが配置されたＸ段Ｙ列のＡＬＵアレイとして構成される。第１段のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１Ｙには、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第１段の接続部５２に設定された接続にしたがって、第２段のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２Ｙに入力される。第１段の接続部５２においては、第１段のＡＬＵ列の出力と第２段のＡＬＵ列の入力の間で任意の接続関係、あるいは予め定められた接続関係の組合せの中から選択された接続関係を実現できるように結線が構成されており、設定により所期の結線が有効となる。以下、最終段である第Ｘ段の接続部５２まで同様の構成である。ＡＬＵ列は、ＡＬＵの集合体に相当する。
【００４４】
なお、図３のリコンフィギュラブル回路１２においては、接続部５２が、ＡＬＵ列と交互に１段ずつ設けられた構成を示している。この接続部５２を各ＡＬＵ列の下段に配置することにより、リコンフィギュラブル回路１２は、１段ずつのＡＬＵ列から構成されるＸ段のリコンフィギュラブルユニットに分割されることになる。具体的に、１段のリコンフィギュラブルユニットは、１段のＡＬＵ列と１段の接続部５２で構成される。この分割は、接続部５２に含まれるＦＦ回路にしたがうものであり、例えば２段のＡＬＵ列ごとに接続部５２を設け、２段のＡＬＵ列の間を、ＦＦ回路を有しない接続部で接続する場合には、２段ずつのＡＬＵ列で構成されるＸ／２段のリコンフィギュラブルユニットに分割されることになる。それ以外にも、ＦＦ回路を所定段のＡＬＵ列ごとに設けることにより、所望段のリコンフィギュラブルユニットを構成することができる。
【００４５】
回路のコンフィギュレーションは１クロックで行われる。具体的に、設定部１４が１クロックごとに設定データをリコンフィギュラブル回路１２にマッピングする。各ＡＬＵ列の出力は、後段の接続部５２に保持される。なお、メモリ部２７へのデータの書込および読出しも、それぞれ１クロックで行われる。したがって、メモリ部２７にデータを書き込んで、そのデータを読み出すためには、少なくともＡＬＵ列２段分の処理に相当する時間が必要となる。
【００４６】
接続部５２は、外部やメモリ部２７から供給される変数や定数を、所期のＡＬＵに供給する機能を有している。この機能を途中入力機能と呼ぶ。また、接続部５２は、前段のＡＬＵの演算結果を外部に直接出力することもできる。この機能を途中出力機能と呼ぶ。この構成により、多様な組合せ回路を構成することが可能となり、設計の自由度が向上する。
【００４７】
図４は、ＤＦＧ３８の構造を説明するための図である。ＤＦＧ３８においては、入力される変数や定数の演算の流れが段階的にグラフ構造で表現されている。図中、演算子は丸印で示されており、ノードを表現する。設定データ生成部３２は、このＤＦＧ３８をリコンフィギュラブル回路１２にマッピングするための設定データ４０を生成する。実施例では、特にＤＦＧ３８をリコンフィギュラブル回路１２にマッピングしきれない場合に、ＤＦＧ３８を複数の領域に分割して結合し、さらに再分割することによって分割回路の設定データ４０を生成する。ＤＦＧ３８による演算の流れを回路上で実現するべく、設定データ４０は、演算機能を割り当てる論理回路を特定し、また論理回路間の接続関係を定め、さらに入力変数や入力定数などを定義したデータとなる。したがって、設定データ４０は、各論理回路５０の機能を選択するセレクタに供給する選択情報、接続部５２の結線を設定する接続情報、必要な変数データや定数データなどを含んで構成される。
【００４８】
図１に戻って、回路の構成時、制御部１８は、１つのターゲット回路４２を構成するための複数の設定データ４０を記憶部３４から選択して読み出す。設定部１４がコマンドメモリとして構成されている場合、制御部１８は設定部１４に対してプログラムカウンタ値を与え、設定部１４は、そのカウンタ値に応じて格納した設定データを、コマンドデータとしてリコンフィギュラブル回路１２に設定する。なお、設定部１４は、キャッシュメモリや他の種類のメモリを有して構成されてもよい。なお、制御部１８が記憶部３４から設定データ４０を受けて、その設定データ４０を設定部１４に供給してもよいが、制御部１８を介さずに、予め設定部１４に設定データを格納しておいてもよい。この場合、制御部１８は、設定部１４に予め格納された複数の設定データの中からターゲット回路４２に応じた設定データがリコンフィギュラブル回路１２に供給されるように、設定部１４のデータ読出しを制御する。
【００４９】
設定部１４は、設定データ４０をリコンフィギュラブル回路１２に設定し、リコンフィギュラブル回路１２の回路を逐次再構成させる。これにより、リコンフィギュラブル回路１２は、ターゲット回路に基づく所期の演算を実行できる。リコンフィギュラブル回路１２は、基本セルとして高性能の演算能力のあるＡＬＵを用いており、またリコンフィギュラブル回路１２および設定部１４を１チップ上に構成することから、コンフィグレーションを高速に、例えば１クロックで実現することができる。制御部１８はクロック機能を有し、クロック信号は、出力回路２２およびメモリ部２７に供給される。また制御部１８は４進カウンタを含み、カウント信号を設定部１４に供給してもよい。
【００５０】
図５は、リコンフィギュラブル回路１２におけるＡＬＵ間の接続関係を示す図である。なお、図５では、ＡＬＵ列の間に配置される接続部５２の図示を省略している。図５に示すリコンフィギュラブル回路１２では、横方向に４個、縦方向に６個のＡＬＵが配置されたＡＬＵアレイとして構成される。第１段のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１４には、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第１段の接続部５２に設定された接続にしたがって、第２段のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２４に入力される。第１段の接続部５２においては、第１段のＡＬＵ列の出力と第２段のＡＬＵ列の入力の間で、一定の接続制限が課された接続関係を実現できるように結線が構成されており、設定により、その範囲内での所期の結線が有効となる。なお、第２段から第５段の接続部５２においても同様である。最終段である第６段のＡＬＵ列は演算の最終結果を出力する。接続部５２は、ＡＬＵ段の間で、物理的に近接して配置された論理回路同士を接続可能とするように構成される。これにより、配線長を短くすることができ、回路規模を削減することができる。その結果、低消費電力化及び処理高速化が可能となる。
【００５１】
図５に示すリコンフィギュラブル回路１２では、６段×４列のＡＬＵが存在し、上段における１つのＡＬＵからの配線は、下段の３つのＡＬＵに制限される。図示のように、下段における１つのＡＬＵの入力は、上段における直上のＡＬＵと、直上のＡＬＵの左右のＡＬＵに制限され、また上段における１つのＡＬＵの出力は、下段における直下のＡＬＵと、直下のＡＬＵの左右のＡＬＵに制限される。例えば、ＡＬＵ２２に関してみると、その入力は、ＡＬＵ１１、ＡＬＵ１２、ＡＬＵ１３の３方向に制限され、その出力は、ＡＬＵ３１、ＡＬＵ３２、ＡＬＵ３３の３方向に制限される。なお、左または右に対応するＡＬＵが存在しなければ、その入力および出力は、それぞれ２方向に制限される。このような配線とすることにより、上下段の全てのＡＬＵ間の接続を可能とする場合と比較すると、配線数を大幅に削減することが可能となる。
【００５２】
図６は、データフローグラフ処理部３１の構成を示す。データフローグラフ処理部３１は、ＤＦＧ分割部６０、サブＤＦＧ最適化部６１、ＤＦＧ結合部６２を備える。実施例におけるデータフローグラフ処理機能は、処理装置１０において、ＣＰＵ、メモリ、メモリにロードされたＤＦＧ処理用プログラムなどによって実現され、ここではそれらの連携によって実現される機能ブロックを描いている。ＤＦＧ処理用プログラムは、処理装置１０に内蔵されていてもよく、また記録媒体に格納された形態で外部から供給されるものであってもよい。したがってこれらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者に理解されるところである。
【００５３】
ＤＦＧ分割部６０は、コンパイル部３０により生成されたＤＦＧが、例えば以下のような場合に該当するような場合、ＤＦＧを分割して複数のサブＤＦＧを生成する。
【００５４】
（１）ＤＦＧの列数がリコンフィギュラブル回路の１段あたりの論理回路の数よりも大きい場合。即ち、ＤＦＧの列数がリコンフィギュラブル回路のＡＬＵアレイの列数を超える場合。例えば、ＤＦＧが図５のようなリコンフィギュラブル回路１２にマッピングされるのであれば、ＤＦＧの列数が５以上の場合。
【００５５】
（２）ＤＦＧがリコンフィギュラブル回路の接続制限に合致しない場合。例えばＤＦＧが図５のようなリコンフィギュラブル回路１２にマッピングされる場合、１つのＡＬＵからの配線は下段の３つのＡＬＵに制限されるが、マッピングしようとするＤＦＧが、４つ以上のノードに対する出力を行うノードを有しているような場合。
【００５６】
なお、分割して生成されたサブＤＦＧ間のノード間を直接的に接続することができない場合、ノードの出力データは、一旦メモリ部２７に格納される。
【００５７】
サブＤＦＧ最適化部６１は、ＤＦＧ分割部６０で生成されたサブＤＦＧの最適化を行う。例えば、生成されたサブＤＦＧ間のデータ受渡しが多い場合、それだけメモリ部２７の使用量が多くなる。場合によってはメモリ不足によりサブＤＦＧ間のデータ受渡しができなくなって、演算そのものが実行不可能となる恐れがある。そこで、サブＤＦＧ最適化部６１は、例えば、同一内容のデータが同じサブＤＦＧ内の複数ノードからメモリへ出力されるような場合があれば、いずれかのノードからのメモリ出力を削除するようにする。そうすることで、サブＤＦＧ間のデータ受渡しに使用するメモリの使用量を減らすことができる。これにより、メモリ不足による演算エラーの恐れを減らすことができるし、また、リコンフィギュラブル回路１２を備えた集積回路装置２６の消費電力を低減することができる。
【００５８】
ＤＦＧ結合部６２は、サブＤＦＧ最適化部６１により最適化された複数のサブＤＦＧを結合したＤＦＧを生成する。
【００５９】
図７は、本実施例におけるＤＦＧ３８の処理フローを示す。コンパイル部３０がプログラム３６をコンパイルして（Ｓ１０）、ＤＦＧ３８を生成する（Ｓ１２）。データフローグラフ処理部３１のＤＦＧ分割部６１は、生成されたＤＦＧ３８を分割してサブＤＦＧを生成する（Ｓ１４）。サブＤＦＧ最適化部６２は、分割したサブＤＦＧの最適化を行う（Ｓ１６）。ＤＦＧ結合部６３は、最適化されたサブＤＦＧを結合してＤＦＧを生成する（Ｓ１８）。そして、設定データ生成部３２は、結合されたＤＦＧをもとに設定データ４０を生成する（Ｓ２０）。
【００６０】
なお、Ｓ１８においてサブＤＦＧを結合したＤＦＧがリコンフィギュラブル回路の段数を超える場合、結合ＤＦＧを分割して複数のサブ結合ＤＦＧを生成する。そして、設定データ生成部３２は、それぞれのサブ結合ＤＦＧをもとに複数の設定データ４０を生成する。
【００６１】
（実施例）
以下、実施例を用いて、本願発明についての説明を行う。
【００６２】
図８は、コンパイル部３０に入力されるＣソースプログラムである。コンパイル部３０は、このＣ言語で記述されたプログラムをコンパイルして、ＤＦＧを生成する。図９は、コンパイル部３０から出力されるＤＦＧである。このようなＤＦＧを図５で示すような接続制限が課されたリコンフィギュラブル回路１２にマッピングすることはできない。なぜなら図９のＤＦＧには、下段の４つのノードへの出力を行っているノード（第１段目の加算ノード）が存在しているのに対し、図５のＤＦＧは、１つのノードからは、下段の３つ以下のノードにしか接続できないという制約が課されているからである。そこで、ＤＦＧ分割部６０は、図９のＤＦＧを図１０のような２つのサブＤＦＧに分割することで、下段の４つのノードへの出力を行うノードをなくす。
【００６３】
なお、図１０の２つのサブＤＦＧをリコンフィギュラブル回路にマッピングするには、リコンフィギュラブル回路が６段×３列のＡＬＵを備えていれば良い。図５のリコンフィギュラブル回路は６段×４列のＡＬＵを有しているから、図９のＤＦＧをマッピングすることが可能である。なお、リコンフィギュラブル回路にマッピングされる２つのサブＤＦＧ間のデータ受け渡しは、メモリ部２９に割り当てられるメモリ領域Ａ、Ｂ、Ｃを介して行われる。
【００６４】
ここで、図１０のＤＦＧに着目すると、メモリＡに出力されるデータと、メモリＢに出力されるデータはスルーノード（ｍｏｖノード）を介して接続されていることに気づく。即ち、メモリＡに出力されるデータと、メモリＢに出力されるデータは同じ内容である。そこで、メモリＡへの出力と、メモリＢへの出力のいずれか一方は削除することができる。ここでは、ｍｏｖノードからのメモリＢへの出力を削除する。その結果、図１０のＤＦＧは、図１１のようなＤＦＧに置き換えることができる。これによって、サブＤＦＧ間のデータ受け渡しに使用するメモリ使用量を減らすことができる。
【００６５】
図１２は、サブＤＦＧ最適化部６１が行う最適化処理のフローチャートを示したものである。このフローチャートは、サブＤＦＧ間のデータ受け渡しに使用されるメモリの使用量を減らす処理手順を示したものである。例えば、上記の図１０のＤＦＧから、図１１のようなＤＦＧを生成するための手順を示したものである。
【００６６】
サブＤＦＧファイルが読み込まれると、まず、メモリへの出力を行うｍｏｖノードの探索を行う（Ｓ３０）。メモリ出力を行うｍｏｖノード（このノードのことをノードＭと呼ぶ）があれば（Ｓ３１のｙｅｓ）、ステップＳ３２へ進む。ない場合は（Ｓ３１のｎｏ）、サブＤＦＧ最適化部６１による最適化処理は終了である。
【００６７】
ステップＳ３２では、ノードＭの入力ノードを辿り、非ｍｏｖノード（このノードのことをノードＰと呼ぶ）の探索を行う。ステップＳ３３では、ノードＰが既にメモリ出力（この出力変数をＡとする）を有しているかどうかを調べる。メモリ出力を既に有していれば（ｙｅｓの場合）Ｓ３８へ進み、有していないのであれば（ｎｏの場合）Ｓ３４へ進む。
【００６８】
ステップＳ３４では、ノードＰにメモリ出力Ａを作成する。ステップＳ３５では、ノードＭのメモリ出力（この出力変数をＢとする）を削除する。ステップＳ３６では、出力変数Ｂを入力とするノードをサーチする。ステップＳ３７では、Ｓ３６で発見されたノードの入力ＢをＡに変更する。そして、ステップＳ３０へ戻る。
【００６９】
ステップＳ３８では、出力変数Ａが最終出力かどうかを判断する。ここで、最終出力とは、サブＤＦＧに分割される前のＤＦＧの出力である。例えば、図９〜図１１でいうところの、ｒｅｔ１、ｒｅｔ２のことである。最終出力ではないとは、他のサブＤＦＧへのデータ受け渡しを行うメモリへの出力のことである。例えば、図１０でいうところの、メモリＡ、Ｂ、Ｃへの出力のことである。最終出力であればステップＳ３０へ戻り、最終出力でない場合はステップＳ３５へ進む。
【００７０】
ここで、上記のフローチャートによる処理の具体例を説明する。図１０のＤＦＧから図１１のＤＦＧが生成される手順を説明する。
【００７１】
まず、図１０で示されるようなＤＦＧのファイルが読み込まれる。Ｓ３０では、メモリＢへの出力を行うｍｏｖノードＭが発見される。Ｓ３２では、ｍｏｖノードＭへの入力を行う加算ノードＰが発見される（図１３の「状態１」参照）。このノードＰは既にメモリ出力Ａを持っているので、Ｓ３３ではｙｅｓと判断される。しかし、このメモリ出力Ａは、サブＤＦＧ間のデータ受け渡しを行うメモリへの出力であり、最終出力ではない。よってＳ３８ではＮｏと判断され、Ｓ３５へ進む。このノードＰは既にメモリ出力Ａを持っているので、Ｓ３３ではｙｅｓと判断される。
【００７２】
Ｓ３５では、ノードＭのメモリ出力Ｂが削除される。Ｓ３６では、メモリＢからの入力を受けていたノード（図１０のｍｅｒｇｅノード）が発見される。Ｓ３７では、このｍｅｒｇｅノードへの入力ノードをメモリＢからメモリＡに変更する。
【００７３】
そして再びＳ３０へ戻るが、メモリ出力を行うｍｏｖノードはＳ３５での処理によりなくなっている（ｍｏｖノードからのメモリ出力が削除されている）ため、Ｓ３１ではＮｏと判断され、サブＤＦＧ最適化処理部６１による最適化処理は終了である。   
以上、本発明を実施例もとに説明した。実施例は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００７４】
例えば、リコンフィギュラブル回路１２におけるＡＬＵの配列は、縦方向にのみ接続を許した多段配列に限らず、横方向の接続も許した、メッシュ状の配列であってもよい。また、上記の説明では、段を飛ばして論理回路を接続する結線は設けられていないが、このような段を飛ばす接続結線を設ける構成としてもよい。
【００７５】
また、図１では、処理装置１０が１つのリコンフィギュラブル回路１２を有する場合を示しているが、複数のリコンフィギュラブル回路１２を有していてもよい。複数のリコンフィギュラブル回路１２が存在する場合は、複数のＤＦＧを同時に処理することが可能となり、データ処理時間を短縮することが可能となる。
【００７６】
今回開示された実施形態及び実施例はすべての点で例示であって制限的なものではない。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【００７７】
例えば、上記実施形態では、リコンフィギュラブル回路にマッピングされるＤＦＧの処理に係るものであったが、この出願明細書において開示した考え方は、他にも適用することが可能である。
【００７８】
例えば、回路遅延を有する集積回路に演算を表すＤＦＧを割り当てる場合において、回路遅延の影響を小さくするために、ＤＦＧを複数の小さなサブＤＦＧに分割して集積回路にマッピングすることがある。上記リコンフィギュラブル回路での実施形態と同様、この場合もサブＤＦＧ間のデータのやり取りはＤ／ＦＦ（Ｄ−フリップフロップ）などのメモリを介して行うこととなるが、やはりサブＤＦＧ間のデータ受渡しに必要なメモリの使用量が問題になることがある。そのような場合においても、本願発明のように、サブＤＦＧ内の複数ノードから同一内容のデータがメモリの異なる領域へそれぞれ出力される場合は、いずれかのノードからのメモリ出力を削除することにより、メモリ使用量を減らすことができる。このように本願発明は、リコンフィギュラブル回路の設計に限らず、論理回路の設計において広く適用することが可能である。
【図面の簡単な説明】
【００７９】
【図１】実施例に係る処理装置の構成図である。
【図２】ターゲット回路を分割してできる複数の回路について説明するための図である。
【図３】リコンフィギュラブル回路１２の構成図である。
【図４】ＤＦＧ３８の構造を説明するための図である。
【図５】リコンフィギュラブル回路１２におけるＡＬＵ間の接続関係を示す図である。
【図６】本実施例におけるＤＦＧ３８の処理フローチャートである。
【図７】データフローグラフ処理部３１の構成図である。
【図８】コンパイル部３０に入力されるＣソースプログラムである。
【図９】コンパイル部３０から出力されるＤＦＧである。
【図１０】図９に示すＤＦＧを、ＤＦＧ分割部６が分割して生成した２つのサブＤＦＧを示す図である。
【図１１】サブＤＦＧ最適化部６１により最適化されたサブＤＦＧである。
【図１２】サブＤＦＧ最適化部６１が行う最適化処理のフローチャートである。
【図１３】最適化処理の途中のデータフローグラフを示すものである。
【符号の説明】
【００８０】
１０  処理装置
１２  リコンフィギュラブル回路
１４  設定部
１８  制御部
２２  出力回路
２４  経路部
２６  集積回路装置
２７  メモリ部
２９  経路部
３０  コンパイル部
３１  データフローグラフ処理部
３２  設定データ生成部
３４  記憶部
３６  プログラム、
３８  データフローグラフ
４０  設定データ
５０  論理回路
５２  接続部
６０  ＤＦＧ分割部
６１  サブＤＦＧ最適化部
６２  ＤＦＧ結合部
【図１】
0004562679.tif 000002
【図２】
0004562679.tif 000003
【図３】
0004562679.tif 000004
【図４】
0004562679.tif 000005
【図５】
0004562679.tif 000006
【図６】
0004562679.tif 000007
【図７】
0004562679.tif 000008
【図８】
0004562679.tif 000009
【図９】
0004562679.tif 000010
【図１０】
0004562679.tif 000011
【図１１】
0004562679.tif 000012
【図１３】
0004562679.tif 000013
【図１２】
0004562679.tif 000014