(57)【要約】【課題】リコンフィギュラブル回路の利用効率を高める。【解決手段】あるプログラムに対応するふたつのｍｕｌ命令とひとつのａｄｄ命令をロードし、空き領域に別のプログラムに対応するｓｕｂ命令、ｄｉｖ命令、ａｄｄ命令をロードする。ひとつのＡＬＵアレイに複数の機能回路をロードする。プログラムをロードしたとき、ＡＬＵの使用状態を監視し、記録しておく。【選択図】        図１３
2004302856.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが複数の算術論理機能を選択的に実行可能な論理回路のアレイと、
前記アレイにおける各論理回路の機能と論理回路間の接続関係を設定するための設定データを記憶する記憶部と、
前記記憶部から前記設定データを読み込み、前記アレイにロードする設定部と、
を含み、前記設定データは、前記アレイに第１の機能回路をロードしたときに未使用となる領域に第２の機能回路をロードするよう記述されていることを特徴とする集積回路装置。
【請求項２】
請求項１に記載の装置において、前記設定データは、前記未使用となる領域中、前記第２の機能回路を入力段に近い行に詰めて配置するよう記述されていることを特徴とする集積回路装置。
【請求項３】
請求項１または２に記載の装置において、前記設定データは、前記未使用となる領域中、前記第２の機能回路を前記第１の機能回路がロードされている論理回路に近い列に詰めて配置するよう記述されていることを特徴とする集積回路装置。
【請求項４】
それぞれが複数の算術論理機能を選択的に実行可能な論理回路のｍ行ｎ列のアレイを有し、このアレイの１行１列から第１の機能回路をロードして配置し、その結果前記アレイにおいて未使用となる領域において、ｉ行ｊ列（１≦ｉ≦ｍ，１≦ｊ≦ｎ）から第２の機能回路をロードして配置し、前記のｉの値が最小になるよう第２の機能回路をロードおよび配置したことを特徴とする集積回路装置。
【請求項５】
それぞれが複数の算術論理機能を選択的に実行可能な論理回路のｍ行ｎ列のアレイを有し、このアレイの１行１列から第１の機能回路をロードして配置し、その結果前記アレイにおいて未使用となる領域において、ｉ行ｊ列（１≦ｉ≦ｍ，１≦ｊ≦ｎ）から第２の機能回路をロードして配置し、前記のｊの値が最小になるよう第２の機能回路をロードおよび配置したことを特徴とする集積回路装置。
【請求項６】
それぞれが複数の算術論理機能を選択的に実行可能な論理回路のｍ行ｎ列のアレイを有し、このアレイの１行１列から第１の機能回路をロードして配置し、その結果前記アレイにおいて未使用となる領域において、可能な限り行番号の小さな行および列番号の小さな列を利用して第２の機能回路をロードして配置したことを特徴とする集積回路装置。
【請求項７】
請求項４から６のいずれかに記載の装置において、適宜スルーノードを利用して第２の機能回路を最適化配置したことを特徴とする集積回路装置。
【請求項８】
それぞれが複数の算術論理機能を選択的に実行可能な論理回路のアレイを含む集積回路装置に所期の機能をロードするための設定データを生成する制御部と、
前記設定データをロードしたとき、前記アレイにおいて使用されている領域を監視する監視部と、
を含むことを特徴とするデータ設定装置。
【請求項９】
請求項８に記載の装置において、前記制御部は、前記監視部による監視の結果を受けて、前記アレイにおいて未使用の領域に別の機能をロードするための設定データを生成することを特徴とするデータ設定装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、集積回路技術に関し、特にリコンフィギュラブル回路、およびそれを利用可能な集積回路装置とデータ変換装置に関する。
【０００２】
【従来の技術】
最近、携帯電話、ＧＰＳ、ＶＩＣＳなど、無線通信が広く普及し、無線機の種類も増えている。これらの無線機またはその機能をすべてハードウエアで実装すると、コストや実装面積が嵩む。そこで、ハードウエアとしては汎用的な能力を有する回路を搭載しておき、それにロードするソフトウエアを切り替えることで多様な機能を実現する「ソフトウエア無線機」という考え方がある。
【０００３】
ソフトウエア無線機を実現する回路として、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）やＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）がある。特許文献１には、ＦＰＧＡを動的に再構成することで、回路構成の再利用を図る方法が提案されている。動的変更が可能なタイプの回路を以下リコンフィギュラブル回路ともいう。
【０００４】
【特許文献１】
特開平１０−２５６３８３号公報  （全文、第１−４図）
【０００５】
【発明が解決しようとする課題】
ＦＰＧＡをベースとすれば、論理回路の真理値表を格納するためのルックアップテーブル（ＬＵＴ）を使っていろいろな論理を実現できるが、一般には論理素子の単位が小さく、所期の機能の実現に多くのＬＵＴと配線リソースが必要となる。その結果、通常のＬＳＩと比べると、一般に実装面積が大きく、コスト高になる。また、回路を書き換えるためのプログラム時間がある程度長く、リアルタイムの機能切替に適さないことが多い。
【０００６】
本発明はこうした現状に鑑みてなされたものであり、その目的は、コスト、書換速度、回路利用効率、消費電力などの観点において有利なリコンフィギュラブル回路とそれを用いた集積回路装置およびデータ設定装置を提供することにある。
【０００７】
【課題を解決するための手段】
本発明のある態様は、集積回路装置に関し、それぞれが複数の算術論理機能を選択的に実行可能な論理回路のアレイと、アレイにおける各論理回路の機能と論理回路間の接続関係を設定するための設定データを記憶する記憶部と、記憶部から設定データを読み込み、前記アレイにロードする設定部とを含み、設定データは、アレイに第１の機能回路をロードしたときに未使用となる領域に第２の機能回路をロードするよう記述されている。
【０００８】
設定部は、たとえばこの装置が有するＣＰＵ（中央処理装置）のプログラムの組合せのほか、専用ハードウエアで構成してもよい。アレイは例えば論理回路を８×８に配置して構成される。アレイ、すなわち機能構成の最小単位に複数の機能をロードする結果、アレイの有効利用率が高まる。
【０００９】
前記の設定データは、未使用となる領域中、第２の機能回路を入力段に近い行に詰めて配置するよう記述されていてもよい。または、第２の機能回路を前記第１の機能回路がロードされている論理回路に近い列に詰めて配置するよう記述されていてもよい。いずれの場合も、そうした規則を課して第２の機能回路を配置することにより、その回路をアレイ内に収容しやすくなる。また、さらに第３の機能回路を実装する余地も出る。
【００１０】
本発明の別の態様も集積回路装置に関し、それぞれが複数の算術論理機能を選択的に実行可能な論理回路のｍ行ｎ列のアレイを有し、このアレイの１行１列から第１の機能回路をロードして配置し、その結果アレイにおいて未使用となる領域において、ｉ行ｊ列（１≦ｉ≦ｍ，１≦ｊ≦ｎ）から第２の機能回路をロードして配置し、前記のｉまたはｊの一方が最小になるよう第２の機能回路をロードおよび配置したものである。
【００１１】
本発明の別の態様も集積回路装置に関し、それぞれが複数の算術論理機能を選択的に実行可能な論理回路のｍ行ｎ列のアレイを有し、このアレイの１行１列から第１の機能回路をロードして配置し、その結果アレイにおいて未使用となる領域において、可能な限り行番号の小さな行および列番号の小さな列を利用して第２の機能回路をロードして配置したものである。
【００１２】
これらの構成において、適宜スルーノードを利用して第２の機能回路を最適化配置してもよい。「最適化配置」とは、配置が可能になることのみをいう場合、配置したとき使用する論理回路の総数が最小になる場合、さらに第３の機能回路を配置する余地が生ずる場合など、何らかの意味において有用な配置をいう。「スルーノード」はＮＯＰ（ノーオペレーション）、すなわち何もしないノードをいい、実際には論理回路の内部で単に入力と出力をつなぐ配線を選択したり、論理回路を恒等写像演算器、すなわち乗算器として１を掛けたり、加算器としてゼロを足したりする回路に設定すれば、この論理回路がスルーノードとなる。
【００１３】
本発明のさらに別の態様は、データ設定装置に関する。この装置は、たとえば前述の集積回路装置に対して設定データを提供する外部装置であってもよく、Ｃ言語その他の高級言語で書かれたプログラムを設定データへ変換するコンパイラを備えてもよい。設定データは、例えばデータフローグラフに対応する。
【００１４】
この装置は、それぞれが複数の算術論理機能を選択的に実行可能な論理回路のアレイを含む集積回路装置に所期の機能をロードするための設定データを生成する制御部と、設定データをロードしたとき、アレイにおいて使用されている領域を監視する監視部とを含む。制御部および場合により監視部は、コンパイラまたはそれとＣＰＵその他、任意のハードウエア、ソフトウエアの組合せからなる。制御部が、監視部による監視の結果を受けて、アレイにおいて未使用の領域に別の機能をロードするための設定データを生成すれば、アレイの利用効率が高まる。
【００１５】
なお、以上の集積回路装置とデータ設定装置は、単一の装置であってもよい。その場合、例えば前者の設定部と後者の制御部などを単一のＣＰＵおよびプログラムで構成できる。前者の一部と後者の一部を単一の装置として構成してもよい。
【００１６】
以上いずれの場合も、論理回路のアレイは、横方向に並べられた論理回路の列が縦方向に複数段組み合わされた配列であり、横方向の論理回路間の接続用結線はなく、各段の論理回路列の出力と直後の段の論理回路列の入力との間に接続用結線が設けられた構造であってもよい。
【００１７】
なお、以上の構成要素の任意の組み合わせ、本発明の表現を方法、装置、システム、コンピュータプログラムとして表現したものもまた、本発明の態様として有効である。
【００１８】
【発明の実施の形態】
実施の形態は、ＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）アレイを基本素子とするリコンフィギュラブル回路に関する。このタイプの回路は、ひとつのＡＬＵがひとつの論理単位を構成し、この論理単位が複数の算術演算を選択的に実行できるため、回路構成が簡単であり、後述のデータフローグラフを直接的にマッピング可能なため、コンフィグレーションにかかる時間も節約できる。マッピングとは、リコンフィギュラブル回路で実行すべきプログラムの命令セットと、それを実現するためにリコンフィギュラブル回路内で必要な接続データセットをＡＬＵアレイ（以下単に「アレイ」ともいう）にロードして設定することをいう。以下、構成を定義する。
【００１９】
１．アレイ・・・ＡＬＵをｍ×ｎのマトリックス状に有する。
２．リコンフィギュラブル回路・・・アレイを複数内蔵するが、以下の説明ではひとつのアレイに注目する（以下、このアレイを「注目アレイ」ともよぶ）。
【００２０】
ＡＬＵは「論理単位」であるが、通常はひとつのＡＬＵでひとつの機能を実現する。このため、アレイが「機能単位」となる。アレイの大きさ、すなわち、上記のｍとｎの値の設定は、実現すべき機能の想定をもとに経験則からなされる。アレイが小さすぎるとひとつの機能を実現しきれず、一方、大きすぎると、ひとつの機能をロードしたとき、未使用のＡＬＵが増えて利用効率が悪い。
【００２１】
こうした観点から、実施の形態の特徴は、機能単位であるアレイに複数の機能を実装することにある。すなわち、まず第１の機能回路をロードし、未使用の領域があれば、第２の機能回路をロードしてアレイの有効利用を図る。もちろん、さらに残余の領域に第３以下の機能回路をロードすれば効果的である。
【００２２】
図１は、実施の形態に係る集積回路装置１０およびデータ設定装置２４の構成を示す。データ設定装置２４は、集積回路装置１０の回路構成を設定するためのデータを作成して集積回路装置１０に供給する。
【００２３】
集積回路装置１０は、リコンフィギュラブル回路１２と、リコンフィギュラブル回路１２を再構成するための設定データ１７を格納する設定データ記憶部１６と、リコンフィギュラブル回路１２に設定データ１７をロードする設定部１４とを含む。「再構成」とは、所期の機能を実現するための回路を作ることをいい、実際には設定データ１７のロードがそれに当たる。
【００２４】
データ設定装置２４は、制御部１８と、コンパイル部２０と、プログラム記憶部２２と、注目アレイにおけるＡＬＵの利用状況を監視する監視部２３とを含む。
監視部２３は、制御部１８から設定データ１７が送出されるとき、または設定部１４によって設定データ１７が設定されるときなど、いくつか可能なタイミングのいずれかで設定データ１７を監視する。これにより、常に注目アレイにおいて使用されているＡＬＵを把握し、逆に、未使用のＡＬＵを特定し、制御部１８へ伝える。制御部１８は、ＡＬＵの使用状況から注目アレイに第２の機能回路をロードできるかどうかを判断し、可能ならロードするよう設定データ１７を生成する。不可能であれば、別のアレイに第２の機能回路をマッピングするよう設定データ１７を変更する。
【００２５】
データ設定装置２４のプログラム記憶部２２は、集積回路装置１０が実行すべき各種のプログラム１９を保持する。コンパイル部２０はプログラム記憶部２２に格納されたプログラム１９をコンパイルして、データフローグラフ２１に変換してプログラム記憶部２２に格納する。データフローグラフ２１は、後述のように、入力変数および定数の演算の流れをグラフ構造で示したものである。
【００２６】
制御部１８は、データフローグラフ２１をリコンフィギュラブル回路１２の回路構成にマッピングするための設定データ１７に変換し、集積回路装置１０の設定部１４に供給する。この際、監視部２３から未使用ＡＬＵの情報を取得し、可能なかぎり注目アレイに複数の機能回路がロードされるよう設定データ１７を記述する。設定データ１７は設定データ記憶部１６に格納される。
【００２７】
設定部１４は、設定データ記憶部１６から設定データ１７を読み出し、リコンフィギュラブル回路１２にロードすることで、リコンフィギュラブル回路１２を再構成する。再構成されたリコンフィギュラブル回路１２は、ロードされた設定データ１７にもとづいた処理を行う。
【００２８】
図２は、注目アレイ１２ａの構成を示す。注目アレイ１２ａは、設定データ１７をロードするためのデータ入力部４０と、ＡＬＵの行が配列された領域４２を含み、各行に設けられた接続スイッチ４４と接続結線３０によって、前行のＡＬＵの出力と後行のＡＬＵの入力が設定により任意に接続可能となっている。接続スイッチ４４によって接続結線３０が選択されるが、以降、「接続結線３０による設定」とも略記する。各ＡＬＵは、例えば加算器、減算器、乗算器などを内蔵している。
【００２９】
同図のように、横方向にはＹ個、縦方向にはＸ個のＡＬＵが配置されており、第１行のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１Ｙには、入力変数や定数が入力され、設定により所定の演算がなされる。演算結果の出力は、第１行の接続結線３０に設定された接続にしたがって、第２行のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２Ｙに入力される。第１行の接続結線３０は、第１行のＡＬＵ群の出力と第２行のＡＬＵ群の入力の間の任意の接続関係を実現できるように結線が構成されており、設定により特定の結線が有効となる。以下、第（Ｘ−１）行の接続結線３０まで、同様の構成であり、最終行である第Ｘ行のＡＬＵ群は演算の最終結果を出力する。なお、各ＡＬＵは、後述のｍｏｖ演算を実行するために、入力をそのまま出力するスルーの経路（図示せず）を有し、これを選択することでそのＡＬＵがスルーノードとなる。
【００３０】
データフローグラフ２１を注目アレイ１２ａにマッピングするための設定データ１７には、各ＡＬＵの演算を選択する情報、ＡＬＵ行間の接続結線を選択する情報、第１行のＡＬＵ群に入力される変数と定数の値が含まれる。
【００３１】
いま、以下の実行対象プログラムを考える。
ｉｎｔ  ｍａｉｎ（ｉｎｔ  ａ，  ｉｎｔ  ｂ）｛
ｉｎｔ  ｘ  ＝  ２＊ａ；
ｉｎｔ  ｘ  ＝  ５＊ｂ；
ｒｅｔｕｒｎ  （ｘ＋ｙ）；
｝
図３は上記プログラムに対応するデータフローグラフを示す。図中、定数、変数および演算子は丸で囲まれ、ｍｕｌは乗算、ａｄｄは加算を示す。これをそのままリコンフィギュラブル回路１２へマッピングすると、図４の状態になる。以上が実施の形態の基礎である。
【００３２】
以下、ふたつ以上の機能回路をロードする方法を述べる。いま、図５のごとく、２行４列のアレイに含まれるＡＬＵを（ｉ，ｊ）で座標表示する。ただし、ｉ＝１，２、ｊ＝１，２，３，４である。図６、図７はそれぞれ、図４の設定を座標表示したところである。ここでは、例えばふたつのｍｕｌとひとつのａｄｄがそれぞれ（１，１）（１，２）（２，１）に設定され、（１，１）と（１，２）の出力がともに（２，１）の入力へ接続されている。
【００３３】
監視部２３は、すでに命令が設定されている、すなわち使用済みのＡＬＵを調べ、その結果を自己の内部メモリ（図示せず）に記録する。図８はそのための処理を示す。ここで、アレイはＺ行Ｗ列とし、内部変数ｉ，ｊをそれぞれ行、列のカウンタとして使用する。同図のごとく、まずカウンタｉ，ｊに初期値「１」がセットされ（Ｓ１０）、ｉとＺが比較され（Ｓ１２）、ｉがＺ以下なら（Ｓ１２のＹ）調査すべき行がまだ残っているので、Ｓ１４へ進む。Ｓ１４では、ｊとＷが比較され、ｊがＷ以下なら（Ｓ１４のＹ）まだ列が残っているため、Ｓ１６へ進む。
【００３４】
Ｓ１６では、（ｉ，ｊ）のＡＬＵが未設定であるか、すなわち空いているか調べ、空いていれば（Ｓ１６のＹ）「ｉ行の空き数がＷ−ｊ＋１、使用数がｊ−１」を出力し（Ｓ２２）、ｉをインクリメントおよびｊを「１」に戻し（Ｓ２４）、次の行を調査すべくＳ１２へ戻る。Ｓ１６で（ｉ，ｊ）のＡＬＵが使用済みであればＳ１８へ進み、ｊをインクリメントしてＳ１４へ戻る。
【００３５】
Ｓ１４においてｊがすでにＷの値を超えていれば（Ｓ１４のＮ）、その行には空きがなかったため、「ｉ行の空き数がゼロ、使用数がＷ」を出力し（Ｓ２０）、Ｓ２４へ進む。
【００３６】
Ｓ１２においてｉがすでにＺを超えていれば（Ｓ１２のＮ）、すべての行の調査が終わっているので処理を終了する。以上の処理により、監視部２３は各行の空き数を記録できる。空き数がわかるため、監視部２３は結果的にいずれのｉ，ｊについても（ｉ，ｊ）のＡＬＵが空いているか使用済みかを知ることができる。
【００３７】
このアレイに、第２のプログラム、すなわち第２の機能回路を設定する。このプログラムは以下のとおりである。
ｉｎｔ  ｍａｉｎ（ｉｎｔ  ｃ，  ｉｎｔ  ｄ）｛
ｉｎｔ  ｘ  ＝  ３−ｃ；
ｉｎｔ  ｙ  ＝  ｄ／８；
ｒｅｔｕｒｎ  （ｘ＋ｙ）；
｝
図９はこのプログラムのデータフローグラフ、図１０は仮にこのプログラムのみをアレイにロードした場合の設定を座標表示で示す。しかし、すでに最初のプログラムがロードされているので、第２のプログラムのロードに当たり、空いているＡＬＵへ命令を設定していく。
【００３８】
図１１は制御部１８が第２のプログラムのロードが可能かどうかを判定する処理を示す。ここでＮは第２のプログラムの設定に必要な行数である。まず、カウンタｉを「１」とし（Ｓ３０）、ｉとＮを比較する（Ｓ３２）。ｉがＮ以下であれば設定は完了していないため、Ｓ３４へ進み、ｉ行目の空いているＡＬＵに第２のプログラムの実現に必要な命令をすべて収容できるか否かを判定する。これは、ＡＬＵの空き数をもとに判断される。収容可能であれば（Ｓ３４のＹ）設定データ１７に反映してｉをインクリメントし（Ｓ３６）、その行で新たに設定したＡＬＵの個数だけ空き数を減らし（Ｓ３８）、Ｓ３２へ戻る。
【００３９】
Ｓ３４において、ｉ行目への命令の収容が不可能だったとき、すなわち、収容すべき命令の数が空き数を上回ったとき（Ｓ３４のＮ）、エラー処理（Ｓ４０）を実行して処理を終える。エラー処理（Ｓ４０）として、このアレイ以外のアレイへの第２のプログラムのロードがある。別の処理として、後述の図１４の処理がある。一方、Ｓ３２において、ｉの値がすでにＮを超えていれば、全命令の設定が完了したことになるので、同じく処理を終える。
【００４０】
図１２、図１３は、第２のプログラムが設定された状態を各命令とＡＬＵの座標表示の関係で示している。ｓｕｂは（１，３）のごとく、空いていたＡＬＵを利用している。図１３は、第１、第２のプログラムを実装した状態のアレイの様子を示す。
【００４１】
図１４は、前述のエラー処理の一例を示す。最初に処理の概要を述べ、後に実例を挙げる。
図１４のごとく、まずカウンタｉ、ｊ、ｋに「１」をセットする（Ｓ５０）。ここでｋは、新たにロードすべきプログラムを構成する第ｋ番目の命令とし、そのプログラムには全部Ｌ個の命令があるとする。
【００４２】
制御部１８は、ｋがＬ以下（Ｓ５２）で、ｉがＺ以下（Ｓ５４）で、ｊがＷ以下（Ｓ５６）のとき、（ｉ，ｊ）のＡＬＵが空いているかどうか調べる（Ｓ５８）。空いていれば第ｋの命令がそのＡＬＵに設定可能かどうか検査する（Ｓ６０）。後述のごとく、ＡＬＵが空いていても、この命令に必要な入力ノード数と出力ノード数によっては、このＡＬＵが使用できないことがある。検査の結果使用できるとわかれば（Ｓ６０のＹ）、設定データ１７に反映し、ｋをインクリメントし（Ｓ６２）、ｊをインクリメントし（Ｓ６４）、Ｓ５２へ戻る。Ｓ６０でＡＬＵが第ｋ命令のために使用できないとわかれば（Ｓ６０のＮ）、Ｓ６２をスキップしてＳ６４へ進む。Ｓ５８で（ｉ，ｊ）が空いていないことがわかれば、Ｓ６０とＳ６２をスキップしてＳ６４へ進む。
【００４３】
Ｓ５６でｊがすでにＷを超えていれば、その行の検査は終わっているため（Ｓ５６のＮ）、次の行を検査すべくｊを「１」に戻し、ｉをインクリメントし（Ｓ６６）、Ｓ５４へ戻る。
【００４４】
Ｓ５４でｉがすでにＺを超えていれば、このプログラムの設定が完了せずに終わったため、エラー処理（Ｓ６８）を実行して処理を終える。一方、Ｓ５２でｋがすでにＬを超えていれば、このプログラムの設定が完了したため、正常に処理を終える。Ｓ６８のエラー処理として、このプログラムを別のアレイへロードする等がある。以上が処理の大筋である。
【００４５】
図１５以下、図１１および図１４の処理を総括して実例で示す。ここでは、複数のプログラムに対応する第１データフローグラフ、第２データフローグラフ、・・・を設定する場合、アレイの空き領域に合わせて適宜データフローグラフを変形することにある。データフローグラフの設定は以下の手順に従う。
【００４６】
（１）    第１データフローグラフを設定する。
（２）    第１データフローグラフの設定情報から未設定のＡＬＵに関する情報を取得し、その未設定のＡＬＵに第２データフローグラフが設定できれば、そのまま設定する（図１１の場合）。
（３）    未設定のＡＬＵに第２データフローグラフが収まらない場合、第２データフローグラフを変形し、設定する（図１４の場合）。
（４）    どのように変形しても第２データフローグラフが収まらない場合、残りのデータフローグラフに対して設定処理を行う（図１４のエラー処理）。
（５）    最終的に設定できなかったデータフローグラフは、別のＡＬＵアレイに設定を行う（同エラー処理）。
【００４７】
図１５、図１６、図１７は、設定すべき３つのデータフローグラフを模式的に示す。但し、番号はノードの番号を表し、各ノードには所定の論理演算が割り当てられている。また、アレイは８×８とする。
【００４８】
まず、アレイは初期状態では未設定の状態なので、第１データフローグラフはそのまま設定できる。図１８はその状態を示す。図１９はこの時点でのＡＬＵの空き状態を示す。
【００４９】
つぎに、第２データフローグラフを設定する。図１９の空き状態と図１６の必要なＡＬＵ数から、第２データフローグラフもそのまま設定できることが分かる。図２０は、アレイに第２データフローグラフを設定しおえた状態を示す。また、図２１はこの時点でのＡＬＵの空き状態を示す。
【００５０】
最後に、第３データフローグラフを設定する。図１７から判明する必要なＡＬＵ数と図１９から判明する空き状態を比較すると、第３データフローグラフはそのままの接続状態ではアレイに設定できないことがわかる。第３データフローグラフの接続状態を変更することにより、設定が可能になるか検査する。アレイにノードを設定する規則は以下の通りである。
【００５１】
（１）    できるだけ上の行（ｉが小さい行）に設定する。
（２）    できるだけ左寄りの列（ｊが小さい列）に設定する。
（３）    空いているＡＬＵが不足するなどの問題があり、データフローグラフを変形するとき、適宜スルーノードを追加する。
【００５２】
図１９に示す未使用のＡＬＵの位置を分かりやすくするため、既述の座標表示を使う。最上行から検査すると、（８，１）に設定できるのは、入力ノード数０で出力ノード数１のノードのみである。図２２は第３データフローグラフを構成する各ノードの入力ノード数と出力ノード数を示す。図２２から、ノード２４を（８，１）に設定する。図２３はこの時点での設定状態を上３行について示す。
【００５３】
次に、設定したノード２４の出力ノードを調べる。ノード２４は出力ノードとしてノード２８を持つが、ノード２８は入力ノード数２であるため、（８，２）には設定できない。従って、更に下行に設定する。ここでは左寄せにするので、ノード２８を仮に（６，３）に設定する。しかし、その場合でもノード２８の２つの入力ノードの設定できないため、更に下行であって左寄せを満たす（４，４）に設定する。ノード２４とノード２８は接続されているので、（６，３）、（８，２）にスルーノード（図中「Ｎ」）を設定することにより接続する。図２４はこの時点での設定状態を示す。
【００５４】
つづいて、ノード２８の入力ノードであるノード２５を設定する。ノード２５はノード２８の上行に設定すればよいので、（７，３）へ設定する。以上でノード２８の入力ノードの設定が終了する。図２５はこの時点での設定状態を示す。
【００５５】
次に、ノード２８の出力ノードはノード３１のみである。既述同様、ノード３１を設定し、ノード３１の入力ノードのうち未設定のノード２９を（５，４）に設定する。更にノード２９の入力ノードのうち未設定のノード２６を（８，４）に設定する。図２６はこの時点での設定状態を示す。
【００５６】
つづいて、ノード３１の出力のノード３３を設定する。ノード３３は入力ノード数が２であるので（１，６）に設定を行い、その入力ノードの設定を前述同様に設定する。しかし、ノード３０の入力ノードのノード２７に対して設定可能なＡＬＵがないため、設定は失敗となる。よって、ノード３３以降の設定をクリアする。図２７はクリア前の設定状態を示す。
【００５７】
ノード２７を設定するために（１，６）にスルーノードを挿入し、ノード３３の設定位置を１行下げてスペースを作る。ノード３３は（１，７）へ設定する。以上の手順で、図２８のごとく、第３データフローグラフの設定が完了する。
【００５８】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。以下、そうした例を挙げる。
【００５９】
図１のデータ設定装置２４その他にタイマー（図示せず）を設け、制御部１８がタイマー出力に応じてリコンフィギュラブル回路１２にロードする機能を切り替えてもよい。その場合、複数の機能を順次切り替えて実現することができる。この方法は、集積回路装置１０にいろいろな機能を時分割で行わせる場合、有効である。
【００６０】
実施の形態の集積回路装置１０は、例えばソフトウエア無線機に応用できる。その場合、リコンフィギュラブル回路１２には、適宜ＦＭラジオ、カーナビゲーション機能、テレビジョン受像機能、音声通話機能などをロードすればよい。
【００６１】
【発明の効果】
本発明によれば、利用効率面で改善された集積回路装置、およびその装置にデータを設定するためのデータ設定装置を提供できる。また、同じ機能を実現する際、回路規模、消費電力を削減することができる。
【図面の簡単な説明】
【図１】実施の形態に係る集積回路装置およびデータ設定装置の構成図である。
【図２】図１のリコンフィギュラブル回路の中のＡＬＵアレイ部分の構成図である。
【図３】あるプログラムの処理を表したデータフローグラフを示す図である。
【図４】図３のデータフローグラフに対応してマッピングされたＡＬＵアレイの構成図である。
【図５】２×４のＡＬＵアレイを座標表示して示す図である。
【図６】命令セットとＡＬＵの対応関係を示す図である。
【図７】命令セットとＡＬＵの対応関係を示す図である。
【図８】監視部がＡＬＵの空き状態を検査する手順を示すフローチャートである。
【図９】ＡＬＵアレイにロードすべき第２のプログラムのデータフローグラフを示す図である。
【図１０】第１のプログラムを考慮しない場合、第２のプログラムの命令セットとＡＬＵの対応関係を示す図である。
【図１１】第２のプログラムが、あるＡＬＵアレイにロード可能かどうかを判定する手順を示すフローチャートである。
【図１２】第１のプログラムを考慮した場合、第２のプログラムの命令セットとＡＬＵの対応関係を示す図である。
【図１３】第１および第２のプログラムがＡＬＵアレイにロードされた状態を示す図である。
【図１４】第２以下のプログラムをＡＬＵアレイにロードする際、ロード可能か否かを判定する手順を示し、とくに図１１のエラー処理の一例を示すフローチャートである。
【図１５】第１データフローグラフで使用すべきＡＬＵを番号をつけて示す図である。
【図１６】第２データフローグラフで使用すべきＡＬＵを番号をつけて示す図である。
【図１７】第３データフローグラフで使用すべきＡＬＵを番号をつけて示す図である。
【図１８】第１データフローグラフを８×８のＡＬＵアレイにロードした状態を示す図である。
【図１９】図１８の時点でのＡＬＵの使用状態を示す図である。
【図２０】第２データフローグラフを８×８のＡＬＵアレイにロードした状態を示す図である。
【図２１】図２０の時点でのＡＬＵの使用状態を示す図である。
【図２２】第３データフローグラフに必要なＡＬＵの入力および出力ノード数を示す図である。
【図２３】第３データフローグラフのノード「２４」を設定した状態を示す図である。
【図２４】第３データフローグラフのノード「２８」を設定した状態を示す図である。
【図２５】第３データフローグラフのノード「２５」を設定した状態を示す図である。
【図２６】第３データフローグラフのノード「２６」「２９」「３１」を設定した状態を示す図である。
【図２７】第３データフローグラフのノード「２７」が設定できず、設定が一時的に失敗して状態を示す図である。
【図２８】図２８の失敗を解消して第３データフローグラフの設定が完了した状態を示す図である。
【符号の説明】
１０  集積回路装置、  １２  リコンフィギュラブル回路、  １２ａ  ＡＬＵアレイ、  １４  設定部、  １８  制御部、  ２０  コンパイル部、  ２１  データフローグラフ、  ２３  監視部、  ２４  データ設定装置。
【図１】
2004302856.tif 000003
【図２】
2004302856.tif 000004
【図３】
2004302856.tif 000005
【図４】
2004302856.tif 000006
【図５】
2004302856.tif 000007
【図６】
2004302856.tif 000008
【図７】
2004302856.tif 000009
【図８】
2004302856.tif 000010
【図９】
2004302856.tif 000011
【図１０】
2004302856.tif 000012
【図１１】
2004302856.tif 000013
【図１２】
2004302856.tif 000014
【図１３】
2004302856.tif 000015
【図１４】
2004302856.tif 000016
【図１５】
2004302856.tif 000017
【図１６】
2004302856.tif 000018
【図１７】
2004302856.tif 000019
【図１８】
2004302856.tif 000020
【図１９】
2004302856.tif 000021
【図２０】
2004302856.tif 000022
【図２１】
2004302856.tif 000023
【図２２】
2004302856.tif 000024
【図２３】
2004302856.tif 000025
【図２４】
2004302856.tif 000026
【図２５】
2004302856.tif 000027
【図２６】
2004302856.tif 000028
【図２７】
2004302856.tif 000029
【図２８】
2004302856.tif 000030