(57)【要約】【課題】  機能の変更が可能なリコンフィギュラブル回路を有する回路装置を提供する。【解決手段】  本発明の集積回路装置は、マッピング用のプログラムに含まれる条件文中にelse文が存在しない場合であっても、代入処理を適切に実行する。具体的には、プログラムのコンパイル時に、条件文の実行に先立って実行される代入処理を探索し（Ｓ１８のＹ）、探索した代入処理をelse条件成立時の代入処理として設定する。なお、探索により代入処理がみつからない場合は（Ｓ１８のＮ）、記憶部に記憶された最新の変数値をelse条件成立時の代入値として決定する（Ｓ２２）。【選択図】図７
2006004044.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが複数の演算機能を選択的に実行可能な論理回路を複数有して、条件文を含むプログラム記述を処理するリコンフィギュラブル回路を備え、論理回路に、第１入力端子と第２入力端子の少なくとも２つの入力端子が設けられており、条件文中に第１の条件が存在し且つ第１の条件とは異なる第２の条件が存在しない場合に、
第１入力端子には、第１代入値が入力され、
第２入力端子には、第２代入値が入力され、
条件文を実行する論理回路は、第１の条件が成立した場合は第１入力端子の入力を選択し、第１の条件が成立しない場合は第２入力端子の入力を選択して、変数の代入値を定めることを特徴とする回路装置。
【請求項２】
それぞれが複数の演算機能を選択的に実行可能な論理回路を複数有して、条件文を含むプログラム記述を処理するリコンフィギュラブル回路を備え、論理回路に、第１入力端子と第２入力端子の少なくとも２つの入力端子が設けられており、条件文中に第１の条件の成立時に実行する変数への第１代入処理が存在し、第１の条件とは異なる第２の条件の成立時に実行する変数への第２代入処理が存在しない場合に、
第１入力端子には、第１代入値が入力され、
第２入力端子には、第２代入値が入力され、
条件文を実行する論理回路は、第１の条件が成立した場合は第１入力端子の入力を選択し、第２の条件が成立した場合は第２入力端子の入力を選択して、変数の代入値を定めることを特徴とする回路装置。
【請求項３】
第１入力端子には、条件文中に記述される第１条件成立時に実行される第１代入処理による第１代入値が入力され、第２入力端子には、条件文の条件判定に先立って実行されるプログラム記述中の第２代入処理による第２代入値が入力されることを特徴とする請求項１または２に記載の回路装置。
【請求項４】
第２入力端子には、最新の変数値を記憶した記憶部から、最新の変数値が第２代入値として入力されることを特徴とする請求項１または２に記載の回路装置。
【請求項５】
条件文を実行する論理回路が第２代入値を出力する場合に、当該論理回路の出力の記憶部への書込みを行わせない制御回路をさらに備えることを特徴とする請求項４に記載の回路装置。
【請求項６】
それぞれが複数の演算機能を選択的に実行可能な論理回路を複数有して、条件文を含むプログラム記述を処理するリコンフィギュラブル回路と、変数の値を記憶する記憶部とを備え、条件文中に第１の条件が存在し且つ第１の条件とは異なる第２の条件が存在しておらず、第１の条件成立時には第１代入処理が実行される場合に、
第１の条件が成立した場合に論理回路から出力される第１代入処理による第１代入値を記憶部に書き込み、第１の条件が成立しない場合に記憶部に記憶されている変数の値を更新させない制御回路を備えることを特徴とする回路装置。
【請求項７】
それぞれが複数の演算機能を選択的に実行可能な論理回路を複数有して、条件文を含むプログラム記述を処理するリコンフィギュラブル回路と、変数の値を記憶する記憶部とを備え、条件文中に第１の条件の成立時に実行する変数への第１代入処理が存在し、第１の条件とは異なる第２の条件の成立時に実行する変数への第２代入処理が存在していない場合に、
第１の条件が成立した場合に論理回路から出力される第１代入処理による第１代入値を記憶部に書き込み、第２の条件が成立した場合に記憶部に記憶されている変数の値を更新させない制御回路を備えることを特徴とする回路装置。
【請求項８】
複数の論理回路を有するリコンフィギュラブル回路に機能を割り当てるためのプログラム記述の処理方法であって、
プログラム記述に含まれる条件文中の第１の条件を検出するステップと、
第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、
第１の条件とは異なる第２の条件を検出するステップと、
第２の条件が検出されなかった場合に、条件文の実行以前に実行される変数への第２の代入処理を探索する第２の探索ステップと、
第１の探索ステップにおいて探索された第１代入処理と、第２の探索ステップにおいて探索された第２代入処理とを、論理回路の入力に割り当てるステップと、
を備えることを特徴とするプログラム処理方法。
【請求項９】
複数の論理回路を有するリコンフィギュラブル回路に機能を割り当てるためのプログラム記述の処理方法であって、
プログラム記述に含まれる条件文中の第１の条件を検出するステップと、
第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、
第１の条件とは異なる第２の条件を検出するステップと、
第２の条件が成立した場合に実行する変数への第２の代入処理を探索する第２の探索ステップと、
第１の探索ステップおよび第２の探索ステップにおいて、第１代入処理または第２代入処理のいずれか一方が探索されなかった場合に、条件文の実行以前に実行される変数への代入処理を探索する第３の探索ステップと、
第３の探索ステップにおいて探索された代入処理を、検出されなかった第１代入処理または第２代入処理として設定するステップと、
検出された第１代入処理または第２代入処理と、第３の探索ステップにおいて探索された代入処理とを、論理回路の入力に割り当てるステップと、
を備えることを特徴とするプログラム処理方法。
【請求項１０】
複数の論理回路を有するリコンフィギュラブル回路に機能を割り当てるためのプログラム記述の処理方法であって、
プログラム記述に含まれる条件文中の第１の条件を検出するステップと、
第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、
第１の条件とは異なる第２の条件を検出するステップと、
第２の条件が検出されなかった場合に、条件文の実行以前に実行される変数への第２の代入処理を探索する第２の探索ステップと、
第２の探索ステップにおいて第２の代入処理が探索されなかった場合に、第１の探索ステップにおいて探索された第１代入処理と、記憶部の所定のアドレスに記憶された最新の変数値とを、論理回路の入力に割り当てるステップと、
を備えることを特徴とするプログラム処理方法。
【請求項１１】
複数の論理回路を有するリコンフィギュラブル回路に機能を割り当てるためのプログラム記述の処理方法であって、
プログラム記述に含まれる条件文中の第１の条件を検出するステップと、
第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、
第１の条件とは異なる第２の条件を検出するステップと、
第２の条件が成立した場合に実行する変数への第２の代入処理を探索する第２の探索ステップと、
第１の探索ステップおよび第２の探索ステップにおいて、第１代入処理または第２代入処理のいずれか一方が探索されなかった場合に、条件文の実行以前に実行される変数への代入処理を探索する第３の探索ステップと、
第３の探索ステップにおいて代入処理が探索されなかった場合に、第１の探索ステップまたは第２の探索ステップにおいて探索された代入処理と、記憶部の所定のアドレスに記憶された最新の変数値とを、論理回路の入力に割り当てるステップと、
を備えることを特徴とするプログラム処理方法。
【請求項１２】
記憶部に記憶された変数値が論理回路から出力される場合に、記憶部への書き込みを禁止させるステップと、
を備えることを特徴とする請求項１１に記載のプログラム処理方法。
【請求項１３】
複数の論理回路を配置した所期の回路を生成するためのプログラム記述の処理方法であって、
プログラム記述に含まれる条件文中の第１の条件を検出するステップと、
第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、
第１の条件とは異なる第２の条件を検出するステップと、
第２の条件が検出されなかった場合に、条件文の実行以前に実行される変数への第２の代入処理を探索する第２の探索ステップと、
第１の探索ステップにおいて探索された第１代入処理と、第２の探索ステップにおいて探索された第２代入処理とを、論理回路の入力に割り当てるステップと、
を備えることを特徴とするプログラム処理方法。
【請求項１４】
複数の論理回路を配置した所期の回路を生成するためのプログラム記述の処理方法であって、
プログラム記述に含まれる条件文中の第１の条件を検出するステップと、
第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、
第１の条件とは異なる第２の条件を検出するステップと、
第２の条件が成立した場合に実行する変数への第２の代入処理を探索する第２の探索ステップと、
第１の探索ステップおよび第２の探索ステップにおいて、第１代入処理または第２代入処理のいずれか一方が探索されなかった場合に、条件文の実行以前に実行される変数への代入処理を探索する第３の探索ステップと、
第３の探索ステップにおいて探索された代入処理を、検出されなかった第１代入処理または第２代入処理として設定するステップと、
検出された第１代入処理または第２代入処理と、第３の探索ステップにおいて探索された代入処理とを、論理回路の入力に割り当てるステップと、
を備えることを特徴とするプログラム処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、機能の変更が可能なリコンフィギュラブル回路を備えた回路装置、およびリコンフィギュラブル回路に機能を割り当てる方法に関する。
【背景技術】
【０００２】
近年、アプリケーションに応じてハードウエアの動作を変更可能なリコンフィギュラブルプロセッサの開発が進められている。リコンフィギュラブルプロセッサを実現するためのアーキテクチャとしては、ＤＳＰ(Digital Signal Processor)や、ＦＰＧＡ(Field Programmable Gate Array)を用いる方法が存在する。
【０００３】
ＦＰＧＡ（Field Programmable Gate Array）はＬＳＩ製造後に回路データを書き込んで比較的自由に回路構成を設計することが可能であり、専用ハードウエアの設計に利用されている。ＦＰＧＡは、論理回路の真理値表を格納するためのルックアップテーブル（ＬＵＴ）と出力用のフリップフロップからなる基本セルと、その基本セル間を結ぶプログラマブルな配線リソースとを含む。ＦＰＧＡでは、ＬＵＴに格納するデータと配線データを書き込むことで目的とする論理演算を実現できる。しかし、ＦＰＧＡでＬＳＩを設計した場合、ＡＳＩＣ（Application Specific IC）による設計と比べると、実装面積が非常に大きくなり、コスト高になる。そこで、ＦＰＧＡを動的に再構成することで、回路構成の再利用を図る方法が提案されている（例えば、特許文献１参照。）。
【特許文献１】特開平１０−２５６３８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
例えば衛星放送では、季節などにより、放送モードを切り替えて画質の調整などを行うこともある。受信機では、放送モードごとに複数の回路を予めハードウエア上に作り込んでおき、放送モードに合わせて選択器で回路を切り替えて受信している。したがって、受信機の他の放送モード用の回路はその間、遊んでいることになる。モード切り替えのように、複数の専用回路を切り替えて使用し、その切り替え間隔が比較的長い場合、複数の専用回路を作り込む代わりに、切り替え時にＬＳＩを瞬時に再構成することにすれば、回路構造をシンプルにして汎用性を高め、同時に実装コストを抑えることができる。このようなニーズに応えるべく、動的に再構成可能なＬＳＩに製造業界の関心が集まっている。特に、携帯電話やＰＤＡ（Personal Data Assistance）などのモバイル端末に搭載されるＬＳＩは小型化が必須であり、ＬＳＩを動的に再構成し、用途に合わせて適宜機能を切り替えることができれば、ＬＳＩの実装面積を抑えることができる。
【０００５】
ＦＰＧＡは回路構成の設計自由度が高く、汎用的である反面、全ての基本セル間の接続を可能とするため、多数のスイッチとスイッチのＯＮ／ＯＦＦを制御するための制御回路を含む必要があり、必然的に制御回路の実装面積が大きくなる。また、基本セル間の接続に複雑な配線パターンをとるため、配線が長くなる傾向があり、さらに１本の配線に多くのスイッチが接続される構造のため、遅延が大きくなる。そのため、ＦＰＧＡによるＬＳＩは、試作や実験のために利用されるにとどまることが多く、実装効率、性能、コストなどを考えると、量産には適していない。さらに、ＦＰＧＡでは、多数のＬＵＴ方式の基本セルに構成情報を送る必要があるため、回路のコンフィグレーションにはかなりの時間がかかる。そのため、瞬時に回路構成の切り替えが必要な用途にはＦＰＧＡは適していない。
【０００６】
それらの課題を解決するため、近年、ＡＬＵ(Arithmetic Logic Unit)と呼ばれる基本演算機能を複数持つ多機能素子を一般には多段に並べたＡＬＵアレイの検討が行われるようになった。ＡＬＵアレイでは、処理が上段から下段の一方向に流れるので、水平方向のＡＬＵを結ぶ配線は基本的には不要である。そのため、ＦＰＧＡと比較して回路規模を小さくすることが可能となる。
【０００７】
ＡＬＵアレイは、Ｃ言語などで記述されたプログラムをマッピングされて、回路のコンフィギュレーションを実行する。プログラム記述には、所期の処理を実行するための様々な演算処理が含まれており、そのうちの１つに条件文も含まれる。
【０００８】
図１は、プログラム記述に含まれる条件文を示す。この条件文は、if文により示される条件が成立すれば変数ａに代入値ｂを代入し、else文により示される条件が成立すれば変数ａに代入値ｃを代入するものである。なおelse文により示される条件が成立するとは、if文により示される条件が成立しない場合と等価である。したがって、ＡＬＵにおいて、conditionが真ならばｂを選択し、偽ならばｃを選択する機能を実行させることで、図１に示す条件文が処理される。このように、プログラム記述をコンパイルするコンパイル部が、条件文を解析してデータフローグラフ（ＤＦＧ）を作成することで、ＡＬＵに割り当てる機能およびＡＬＵの接続関係を定めた設定データが適切に生成されることになる。
【０００９】
しかしながら、図１に示すように、条件文が正確に記述されている場合には適切な設定データを生成することができるが、現実には条件文が省略された形で記述されることが少なくない。例えば、conditionが成立したときには変数ａに代入処理を施す必要があるが、成立しないときには変数ａに対して新たな代入処理を必要とせず、元の値を維持するような場合や、また条件文以外の箇所に代入処理が既に記述されているような場合である。このとき、変数ａの値を変更する代入処理については条件文に記述する必要があるものの、元の値を維持するための処理は必ずしも条件文中に記述されなくてもよい。従来では、このような場合におけるＡＬＵへのマッピング処理を適切に実行することが難しく、リコンフィギュラブル回路におけるコンフィギュレーションが正確に実行できない要因となる。
【００１０】
本発明はこうした状況に鑑みてなされたもので、その目的は、ＡＬＵアレイなどから構成される回路装置に、適切に機能を割り当てることのできる技術を提供することにある。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明のある態様は、それぞれが複数の演算機能を選択的に実行可能な論理回路を複数有して、条件文を含むプログラム記述を処理するリコンフィギュラブル回路を備える回路装置に関する。この態様の回路装置においては、論理回路に、第１入力端子と第２入力端子の少なくとも２つの入力端子が設けられている。条件文中に第１の条件が存在し且つ第１の条件とは異なる第２の条件が存在しない場合に、第１入力端子には、第１代入値が入力され、第２入力端子には、第２代入値が入力される。条件文を実行する論理回路は、第１の条件が成立した場合は第１入力端子の入力を選択し、第１の条件が成立しない場合は第２入力端子の入力を選択して、変数の代入値を定める。例えば、第２の条件は第１の条件を否定する条件であってよく、したがって第２の条件が成立する場合は、第１の条件が成立しない場合と等価であってよい。第１の条件がif条件、第２の条件がelse条件であってよい。
【００１２】
本発明の別の態様は、それぞれが複数の演算機能を選択的に実行可能な論理回路を複数有して、条件文を含むプログラム記述を処理するリコンフィギュラブル回路を備える回路装置に関する。この態様の回路装置においては、論理回路に、第１入力端子と第２入力端子の少なくとも２つの入力端子が設けられている。条件文中に第１の条件の成立時に実行する変数への第１代入処理が存在し、第１の条件とは異なる第２の条件の成立時に実行する変数への第２代入処理が存在しない場合に、第１入力端子には、第１代入値が入力され、第２入力端子には、第２代入値が入力される。条件文を実行する論理回路は、第１の条件が成立した場合は第１入力端子の入力を選択し、第２の条件が成立した場合は第２入力端子の入力を選択して、変数の代入値を定める。例えば、第２の条件は第１の条件を否定する条件であってよく、第１の条件がif条件、第２の条件がelse条件であってよく、また第１の条件がelse条件、第２の条件がif条件であってもよい。
【００１３】
本発明のさらに別の態様は、それぞれが複数の演算機能を選択的に実行可能な論理回路を複数有して、条件文を含むプログラム記述を処理するリコンフィギュラブル回路と、変数の値を記憶する記憶部とを備える回路装置に関する。条件文中に第１の条件が存在し且つ第１の条件とは異なる第２の条件が存在しておらず、第１の条件成立時には第１代入処理が実行される場合に、この態様の回路装置は、第１の条件が成立した場合に論理回路から出力される第１代入処理による第１代入値を記憶部に書き込み、第１の条件が成立しない場合に記憶部に記憶されている変数の値を更新させない制御回路を備える。例えば、第２の条件は第１の条件を否定する条件であってよく、第１の条件がif条件、第２の条件がelse条件であってよい。
【００１４】
本発明のさらに別の態様は、それぞれが複数の演算機能を選択的に実行可能な論理回路を複数有して、条件文を含むプログラム記述を処理するリコンフィギュラブル回路と、変数の値を記憶する記憶部とを備える回路装置に関する。条件文中に第１の条件の成立時に実行する変数への第１代入処理が存在し、第１の条件とは異なる第２の条件の成立時に実行する変数への第２代入処理が存在していない場合に、この態様の回路装置は、第１の条件が成立した場合に論理回路から出力される第１代入処理による第１代入値を記憶部に書き込み、第２の条件が成立した場合に記憶部に記憶されている変数の値を更新させない制御回路を備える。例えば、第２の条件は第１の条件を否定する条件であってよく、第１の条件がif条件、第２の条件がelse条件であってよく、また第１の条件がelse条件、第２の条件がif条件であってもよい。
【００１５】
本発明のさらに別の態様は、論理回路を複数有するリコンフィギュラブル回路に機能を割り当てるためのプログラム記述の処理方法に関する。この態様のプログラム処理方法は、条件文中の第１の条件を検出するステップと、第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、第１の条件とは異なる第２の条件を検出するステップと、第２の条件が検出されなかった場合に、条件文の実行以前に実行される変数への第２の代入処理を探索する第２の探索ステップと、第１の探索ステップにおいて探索された第１代入処理と、第２の探索ステップにおいて探索された第２代入処理とを、論理回路の入力に割り当てるステップとを備える。例えば、第２の条件は第１の条件を否定する条件であってよく、第１の条件がif条件、第２の条件がelse条件であってよい。
【００１６】
本発明のさらに別の態様は、論理回路を複数有するリコンフィギュラブル回路に機能を割り当てるためのプログラム記述の処理方法に関する。この態様のプログラム処理方法は、条件文中の第１の条件を検出するステップと、第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、第１の条件とは異なる第２の条件を検出するステップと、第２の条件が成立した場合に実行する変数への第２の代入処理を探索する第２の探索ステップと、第１の探索ステップおよび第２の探索ステップにおいて、第１代入処理または第２代入処理のいずれか一方が探索されなかった場合に、条件文の実行以前に実行される変数への代入処理を探索する第３の探索ステップと、第３の探索ステップにおいて探索された代入処理を、検出されなかった第１代入処理または第２代入処理として設定するステップと、検出された第１代入処理または第２代入処理と、第３の探索ステップにおいて探索された代入処理とを、論理回路の入力に割り当てるステップとを備える。例えば、第２の条件は第１の条件を否定する条件であってよく、第１の条件がif条件、第２の条件がelse条件であってよく、また第１の条件がelse条件、第２の条件がif条件であってもよい。
【００１７】
本発明のさらに別の態様は、論理回路を複数有するリコンフィギュラブル回路に機能を割り当てるためのプログラム記述の処理方法に関する。この態様のプログラム処理方法は、条件文中の第１の条件を検出するステップと、第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、第１の条件とは異なる第２の条件を検出するステップと、第２の条件が検出されなかった場合に、条件文の実行以前に実行される変数への第２の代入処理を探索する第２の探索ステップと、第２の探索ステップにおいて第２の代入処理が探索されなかった場合に、第１の探索ステップにおいて探索された第１代入処理と、記憶部の所定のアドレスに記憶された最新の変数値とを、論理回路の入力に割り当てるステップとを備える。例えば、第２の条件は第１の条件を否定する条件であってよく、第１の条件がif条件、第２の条件がelse条件であってよい。
【００１８】
本発明のさらに別の態様は、論理回路を複数有するリコンフィギュラブル回路に機能を割り当てるためのプログラム記述の処理方法に関する。この態様のプログラム処理方法は、条件文中の第１の条件を検出するステップと、第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、第１の条件とは異なる第２の条件を検出するステップと、第２の条件が成立した場合に実行する変数への第２の代入処理を探索する第２の探索ステップと、第１の探索ステップおよび第２の探索ステップにおいて、第１代入処理または第２代入処理のいずれか一方が探索されなかった場合に、条件文の実行以前に実行される変数への代入処理を探索する第３の探索ステップと、第３の探索ステップにおいて代入処理が探索されなかった場合に、第１の探索ステップまたは第２の探索ステップにおいて探索された代入処理と、記憶部の所定のアドレスに記憶された最新の変数値とを、論理回路の入力に割り当てるステップとを備える。例えば、第２の条件は第１の条件を否定する条件であってよく、第１の条件がif条件、第２の条件がelse条件であってよく、また第１の条件がelse条件、第２の条件がif条件であってもよい。
論理回路は、複数種類の多ビット演算を選択的に実行可能な算術論理回路であってよい。
【００１９】
本発明のさらに別の態様は、複数の論理回路を配置した所期の回路を生成するためのプログラム記述の処理方法に関する。所期の回路は、例えば固定的に論理回路等を実装される回路である。この態様のプログラム処理方法は、プログラム記述に含まれる条件文中の第１の条件を検出するステップと、第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、第１の条件とは異なる第２の条件を検出するステップと、第２の条件が検出されなかった場合に、条件文の実行以前に実行される変数への第２の代入処理を探索する第２の探索ステップと、第１の探索ステップにおいて探索された第１代入処理と、第２の探索ステップにおいて探索された第２代入処理とを、論理回路の入力に割り当てるステップとを備える。
【００２０】
本発明のさらに別の態様は、複数の論理回路を配置した所期の回路を生成するためのプログラム記述の処理方法に関する。所期の回路は、例えば固定的に論理回路等を実装される回路である。この態様のプログラム処理方法は、プログラム記述に含まれる条件文中の第１の条件を検出するステップと、第１の条件が成立した場合に実行する変数への第１代入処理を探索する第１の探索ステップと、第１の条件とは異なる第２の条件を検出するステップと、第２の条件が成立した場合に実行する変数への第２の代入処理を探索する第２の探索ステップと、第１の探索ステップおよび第２の探索ステップにおいて、第１代入処理または第２代入処理のいずれか一方が探索されなかった場合に、条件文の実行以前に実行される変数への代入処理を探索する第３の探索ステップと、第３の探索ステップにおいて探索された代入処理を、検出されなかった第１代入処理または第２代入処理として設定するステップと、検出された第１代入処理または第２代入処理と、第３の探索ステップにおいて探索された代入処理とを、論理回路の入力に割り当てるステップとを備える。
【００２１】
なお、以上の構成要素の任意の組み合わせ、本発明の表現を方法、装置、システム、コンピュータプログラムとして表現したものもまた、本発明の態様として有効である。
【発明の効果】
【００２２】
本発明によれば、マッピング用のプログラムを処理して、適切な入力および機能を論理回路にマッピングする技術を提供することができる。
【発明を実施するための最良の形態】
【００２３】
図２は、実施例に係る処理装置１０の構成図である。処理装置１０は、集積回路装置２６を備える。集積回路装置２６は、回路構成を再構成可能とする機能を有する。集積回路装置２６は１チップとして構成され、リコンフィギュラブル回路１２、設定部１４、制御部１８、出力回路２２、メモリ部２７および経路部２９を備える。リコンフィギュラブル回路１２は、設定を変更することにより、機能の変更を可能とする。
【００２４】
設定部１４は、リコンフィギュラブル回路１２に所期の回路を構成するための設定データ４０を供給する。設定部１４は、プログラムカウンタのカウント値に基づいて記憶したデータを出力するコマンドメモリとして構成されてもよい。この場合、制御部１８がプログラムカウンタの出力を制御する。この意味において、設定データ４０はコマンドデータと呼ばれてもよい。経路部２９は、フィードバックパスとして機能し、リコンフィギュラブル回路１２の出力を、リコンフィギュラブル回路１２の入力に接続する。出力回路２２は、例えばデータフリップフロップ（Ｄ−ＦＦ）などの順序回路として構成され、リコンフィギュラブル回路１２の出力を受ける。メモリ部２７は経路部２９に接続されている。リコンフィギュラブル回路１２は組合せ回路または順序回路等の論理回路として構成される。
【００２５】
メモリ部２７は、制御部１８からの指示に基づき、リコンフィギュラブル回路１２から出力されるデータ信号および／または外部から入力されるデータ信号を格納するための記憶領域を有する。メモリ部２７に格納されたデータ信号は、制御部１８からの指示に基づいて、経路部２９を通じてリコンフィギュラブル回路１２の入力として伝達される。メモリ部２７は、制御部１８からの指示により所定のタイミングでデータ信号をリコンフィギュラブル回路１２に供給することができる。
【００２６】
リコンフィギュラブル回路１２は、機能の変更が可能な論理回路を有して構成される。具体的にリコンフィギュラブル回路１２は、複数の演算機能を選択的に実行可能な論理回路を複数段に配列させた構成を有し、前段の論理回路列の出力と後段の論理回路列の入力との接続関係を設定可能な接続部を含む。複数の論理回路は、マトリックス状に配置される。各論理回路の機能と、論理回路間の接続関係は、設定部１４により供給される設定データ４０に基づいて設定される。設定データ４０は、以下の手順で生成される。
【００２７】
集積回路装置２６により実現されるべきプログラム３６が、記憶部３４に保持されている。プログラム３６は、回路における処理の動作を記述した動作記述を示し、信号処理回路または信号処理アルゴリズムなどをＣ言語などの高級言語で記述したものである。プログラム３６は、条件文などを含んで構成される。コンパイル部３０は、記憶部３４に格納されたプログラム３６をコンパイルし、データフローグラフ（ＤＦＧ）３８に変換して記憶部３４に格納する。データフローグラフ３８は、回路における演算間の実行順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。一般に、データフローグラフ３８は、上から下に向かって演算が進むように作成される。
【００２８】
設定データ生成部３２は、データフローグラフ３８から設定データ４０を生成する。設定データ４０は、データフローグラフ３８をリコンフィギュラブル回路１２にマッピングするためのデータであり、リコンフィギュラブル回路１２における論理回路の機能や論理回路間の接続関係を定める。設定データ生成部３２が、１つの生成すべき回路を分割してできる複数の回路の設定データ４０を生成してもよい。
【００２９】
図３は、１つの生成すべきターゲット回路４２を分割してできる複数の回路の設定データ４０について説明するための図である。１つのターゲット回路４２を分割して生成される回路を、「分割回路」と呼ぶ。この例では、１つのターゲット回路４２が、４つの分割回路、すなわち分割回路Ａ、分割回路Ｂ、分割回路Ｃ、分割回路Ｄに分割されている。ターゲット回路４２は、データフローグラフ３８における演算の流れにしたがって分割される。データフローグラフ３８において、上から下に向かう方向に演算の流れが表現される場合、そのデータフローグラフ３８を上から所定の間隔で切り取り、その切り取った部分を分割回路として設定する。流れにしたがって切り取る間隔は、リコンフィギュラブル回路１２における論理回路の段数以下に定められる。ターゲット回路４２は、データフローグラフ３８の横方向で分割されてもよい。横方向に分割する幅は、リコンフィギュラブル回路１２における論理回路の１段当たりの個数以下に定められる。
【００３０】
特に、生成すべきターゲット回路４２がリコンフィギュラブル回路１２よりも大きい場合に、設定データ生成部３２は、リコンフィギュラブル回路１２にマッピングできる大きさになるように、ターゲット回路４２を分割することが好ましい。リコンフィギュラブル回路１２へのマッピングは、一度に、例えば１回のクロックで実行することができる。したがって、この場合、４つの分割回路は、４クロックで生成することができる。設定データ生成部３２は、リコンフィギュラブル回路１２における論理回路の配列構造とデータフローグラフ３８によって、ターゲット回路４２の分割方法を定める。リコンフィギュラブル回路１２の配列構造は、制御部１８から設定データ生成部３２に伝えられてもよく、また予め記憶部３４に記録されていてもよい。また、制御部１８が、ターゲット回路４２の分割方法を設定データ生成部３２に指示してもよい。
【００３１】
以上の手順を実行することにより、記憶部３４は、リコンフィギュラブル回路１２を所期の回路として構成するための複数の設定データ４０を記憶する。複数の設定データ４０は、分割回路Ａを構成するための設定データ４０ａ、分割回路Ｂを構成するための設定データ４０ｂ、分割回路Ｃを構成するための設定データ４０ｃ、および分割回路Ｄを構成するための設定データ４０ｄである。既述のごとく、複数の設定データ４０は、１つのターゲット回路４２を分割した複数の分割回路をそれぞれ表現したものである。各設定データ４０を供給することにより、リコンフィギュラブル回路１２上に分割回路を１クロックで構成することができる。このように、リコンフィギュラブル回路１２の回路規模に応じて、生成すべきターゲット回路４２の設定データ４０を生成することにより、汎用性の高い処理装置１０を実現することが可能となる。別の視点からみると、実施例の処理装置１０によれば、回路規模の小さいリコンフィギュラブル回路１２を用いて、所望の回路を再構成することが可能となる。
【００３２】
図４は、リコンフィギュラブル回路１２の構成を示す。リコンフィギュラブル回路１２は、それぞれが複数の演算機能を選択的に実行可能な論理回路の多段配列と、前段の論理回路の出力と後段の論理回路の入力の接続関係を任意に設定可能な接続部５２とを備える。リコンフィギュラブル回路１２では、論理回路の多段配列構造により、上段から下段に向かって演算が進められる。なお、本明細書において「多段」とは、複数の段を意味する。なお、リコンフィギュラブル回路１２の回路構成は、必ずしも多段配列を有する必要はないが、ＦＰＧＡのように全ての論理回路との接続を可能とさせず、一部の論理回路との接続のみを実現させるのが好ましい。本実施例では、上記したように、リコンフィギュラブル回路１２が、上段から下段に向けて演算を進める多段配列を有する場合について説明する。
【００３３】
リコンフィギュラブル回路１２は、論理回路としてＡＬＵ(Arithmetic Logic Unit)を有している。ＡＬＵは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、論理和、論理積、ビットシフトなどの複数種類の多ビット演算を設定により選択的に実行できる。各ＡＬＵは、複数の演算機能を設定するためのセレクタを有して構成されている。図示の例では、ＡＬＵが、２つの入力端子と１つの出力端子を有して構成される。
【００３４】
リコンフィギュラブル回路１２は、縦方向にＸ個、横方向にＹ個のＡＬＵが配置されたＸ段Ｙ列のＡＬＵアレイとして構成される。ここでは、縦方向に３個、横方向に６個のＡＬＵが配置された３段６列のＡＬＵアレイを示している。リコンフィギュラブル回路１２は、接続部５２およびＡＬＵ列５３を備える。ＡＬＵ列５３は複数段に設けられ、接続部５２は前後段のＡＬＵ列５３の間に設けられて、前段のＡＬＵの出力と後段のＡＬＵの入力の接続関係を設定する。
【００３５】
図４に示す例では、第１段のＡＬＵ列５３ａと第２段のＡＬＵ列５３ｂの間に、第２段を構成する接続部５２ｂが設けられ、第２段のＡＬＵ列５３ｂと第３段のＡＬＵ列５３ｃの間に、第３段を構成する接続部５２ｃが設けられる。なお、第１段を構成する接続部５２ａは、第１段のＡＬＵ列５３ａの上側に設けられる。
【００３６】
第１段のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１６には、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第２段の接続部５２ｂに設定された接続にしたがって、第２段のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２６に入力される。第２段の接続部５２ｂにおいては、第１段のＡＬＵ列５３ａの出力と第２段のＡＬＵ列５３ｂの入力の間で任意の接続関係、あるいは予め定められた接続関係の組合せの中から選択された接続関係を実現できるように接続用結線が構成されており、設定により所期の結線が有効となる。第２段のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２６には、ＡＬＵ列５３ａの出力が入力され、設定された所定の演算がなされる。演算結果の出力は、第３段の接続部５２ｃの接続用結線において設定された接続にしたがって、第３段のＡＬＵ３１、ＡＬＵ３２、・・・、ＡＬＵ３６に入力される。
【００３７】
最終段となる第３段のＡＬＵ列５３ｃからの出力データは、出力回路２２および／またはメモリ部２７に出力される。メモリ部２７は、経路部２９を介して、出力データを接続部５２ａに入力する。接続部５２ａは、接続用結線を設定し、第１段のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１６にデータを供給する。
【００３８】
本実施例において、条件文を含むプログラム３６は各ＡＬＵに対して適切にマッピング処理されて、演算機能および接続関係の設定がなされる。コンパイル部３０は、プログラム３６に含まれる条件文を解析し、データフローグラフ３８を生成する。if文で始まる条件文のマッピング処理では、ＡＬＵの２つの入力端子に代入値を供給し、ＡＬＵが、条件の真偽に応じていずれかの代入値を出力するように機能設定される。以下に、条件文を適切に処理することのできる本実施例の集積回路装置２６について説明する。
【００３９】
図５（ａ）は、実施例のリコンフィギュラブル回路１２におけるＡＬＵが処理可能なプログラム記述における条件文の一例を示す。この条件文には、if(condition)で示される１つの条件のみが含まれ、elseで示される条件が存在しない。なお、本来else文は、if文の条件が成立しなかった場合に実行される処理であって、if文が実行される条件はconditionが真であるときであり、else文が実行される条件はconditionが偽であるときである。本明細書では、conditionが真となる条件を１つの条件とし、その裏返しであるconditionが偽となる条件も１つの条件とする。なお、conditionが真となる条件をif条件とよび、conditionが偽となる条件をelse条件と呼ぶ場合もある。
【００４０】
本実施例のＡＬＵは、条件文中にif文として示される第１の条件が存在し、else文として示される第２の条件が存在しない場合において、else条件の成立時に実行する代入処理を、この条件文の実行に先立って行われている直近の代入処理に設定する。ここで直近の代入処理はａ＝ｃである。コンパイル部３０は、if条件が成立する場合にはａ＝ｂの代入処理をＡＬＵに実行させ、if条件が成立しない場合にはａ＝ｃの代入処理を実行させるように、プログラムをＤＦＧに変換する。このようにコンパイル部３０は、図５（ａ）に示す条件文を処理して、条件文の実行時の変数ａの代入値を定めることができる。なお、else文が存在する場合であっても、else条件の成立時に変数ａへの代入処理が存在しなければ、変数ａに関してみるとelse条件が存在しない状況と同じである。
【００４１】
図５（ｂ）は、実施例のリコンフィギュラブル回路におけるＡＬＵが処理可能なプログラム記述における条件文の別の例を示す。この条件文では、if文およびelse文で示される２つの条件が存在しているが、変数ａに関する代入処理は、if条件の成立時には規定されておらず、else条件の成立時においてのみ規定されている。本実施例のＡＬＵは、条件文中にif文およびelse文で定められる２つの条件が存在し、一方の条件成立時に実行する代入処理が規定されていない場合であっても、当該一方の条件成立時に実行する代入処理を、この条件文の実行に先立って行われている直近の代入処理に設定する。具体的に、図５（ｂ）の例では、if条件の成立時に実行する変数ａへの代入処理は規定されておらず、else条件の成立時に実行する変数ａへの代入処理のみが存在しており、また直近の代入処理はａ＝ｂである。コンパイル部３０は、if条件が成立する場合にはａ＝ｂの代入処理をＡＬＵに実行させ、if条件が成立しない場合にはａ＝ｃの代入処理を実行させるように、プログラムをＤＦＧに変換する。このようにコンパイル部３０は、図５（ｂ）に示す条件文を処理して、条件文の実行時の変数ａの代入値を定めることができる。
【００４２】
図５（ａ）および図５（ｂ）に示す条件文において、条件文に記述された処理のみからは、if条件ないしはelse条件の一方の条件が成立したときの変数ａへの代入処理しか実行することができない。変数ａを設定するためのＡＬＵの処理を考えると、図５（ａ）に示す条件文ではif条件が成立しなかったとき、図５（ｂ）に示す条件文ではif条件が成立したときのＡＬＵへの代入値を、プログラム記述中の当該条件文以外の他の処理から設定する必要がある。コンパイル部３０は、プログラム３６中の条件文を解析して、ＤＦＧを作成する。
【００４３】
図６（ａ）は、実施例のリコンフィギュラブル回路１２におけるＡＬＵが処理可能なプログラム記述における条件文の一例を示す。この条件文には、if文で示される１つの条件のみが含まれ、else文で示される条件が存在しない。また、図５（ａ）と異なり、この条件文の実行に先立って行われている代入処理も存在しない。したがって、if条件が成立しない場合は、変数ａは、変化せずに、直近すなわち最新の値を維持することになる。なお最新の値とは、変数ａについて当該条件文の処理の直近の処理で設定された値である。
【００４４】
図６（ｂ）は、実施例のリコンフィギュラブル回路におけるＡＬＵが処理可能なプログラム記述における条件文の別の例を示す。この条件文では、if文およびelse文で示される２つの条件が存在しているが、変数ａに関する代入処理は、if条件の成立時に実行されず、else条件の成立時にのみ実行される。また、図５（ｂ）と異なり、この条件文の実行に先立って行われている代入処理も存在しない。したがって、else条件が成立しない場合、すなわちif条件が成立した場合には、変数ａは、変化せずに、直近すなわち最新の値を維持することになる。
【００４５】
図６（ａ）および図６（ｂ）に示す条件文において、条件文に記述された処理のみからは、if条件ないしはelse条件の一方の条件が成立したときの変数ａへの代入処理しか実行することができない。変数ａを設定するためのＡＬＵの処理を考えると、図５（ａ）に示す条件文ではif条件が成立しなかったとき、図５（ｂ）に示す条件文ではif条件が成立したときのＡＬＵへの代入値を、プログラム記述中の当該条件文以外の他の処理から設定する必要がある。図６（ａ）および図６（ｂ）に示す条件文に対しては、それに先立って実行される他の代入処理が存在しないため、変数ａとして設定されている過去の最新の値を設定する。これにより、変数ａの値を変更せずに、引き継ぐことが可能となる。
【００４６】
図７は、実施例のコンパイル部３０による条件文の処理方法を示す。実施例のコンパイル部３０は、図５および図６に示す条件文を解析して、条件分岐処理をリコンフィギュラブル回路１２に割り当てるＤＦＧを作成する。なお既述のように、ＤＦＧは、リコンフィギュラブル回路１２における演算間の実行順序の依存関係を表現する。以下では、１つの変数、具体的には変数ａについての条件文の処理方法を示す。なお、コンパイル部３０は、条件文の処理を変数ごとに実行する。
【００４７】
コンパイル部３０は、プログラム中に含まれる条件文中のif文で示される条件を検出して、if文中に含まれる変数ａについての代入処理を探索する（Ｓ１０）。具体的には、if文において、if条件が成立した場合に実行する変数ａへの代入処理を探索する。代入文が存在している場合（Ｓ１０のＹ）、その代入処理を、if条件成立時の代入処理として決定する（Ｓ１２）。図５（ａ）および図６（ａ）に示す条件文では、if文中に含まれるａ＝ｂを、if条件成立時の代入処理として決定する。続いて、条件文中にelse文で示される条件が含まれているか否かを検出する（Ｓ１４）。else条件が含まれており（Ｓ１４のＹ）、且つelse文中に変数ａについての代入処理が含まれている場合は（Ｓ１６のＹ）、その代入処理を、else条件成立時の代入処理として決定する（Ｓ２０）。これは、図１に示す条件文のコンパイル処理に相当し、条件文に含まれるif文とelse文とに基づいて、変数ａへの代入処理が定められる。
【００４８】
一方、図５（ａ）および図６（ａ）に示すようにelse条件が検出されない場合（Ｓ１４のＮ）、またelse文が存在していてもelse文中に変数ａの代入処理が存在しない場合（Ｓ１６のＮ）、対象とする条件文に先立って処理される変数ａへの代入処理を探索する（Ｓ１８）。条件文の実行以前に実行される変数ａへの代入処理が存在する場合（Ｓ１８のＹ）、その代入処理を、if条件が成立しない場合の代入処理として決定する（Ｓ２０）。図５（ａ）に示す条件文では、条件文に先立って実行されているａ＝ｃを、if条件が成立しない場合の代入処理として決定する。ここでは、Ｓ１２においてif条件成立時の代入処理を決定し、Ｓ２０においてif条件が成立しないときの代入処理を決定して、これらの代入処理を論理回路の入力に割り当てる。なお、ＡＬＵには、条件に応じて２つの入力から出力を選択するスイッチとしての機能を割り当てる。
【００４９】
一方、条件文に先立つ変数ａへの代入処理が探索されなかった場合（Ｓ１８のＮ）、変数ａの値は変化しない。したがって、この場合はメモリ部２７に記憶されている最新の変数ａの値を代入値として決定する（Ｓ２２）。図６（ａ）に示す条件文では、記憶部３４の所定のアドレスに記憶された最新の変数ａの値を、if条件が成立しない場合の代入値として決定する。ここでは、Ｓ１２においてif条件成立時の代入処理を決定し、Ｓ２２においてif条件が成立しないときの代入値を決定して、代入処理および代入値をＡＬＵの入力に割り当てる。なお、ＡＬＵには、条件に応じて２つの入力から出力を選択するスイッチとしての機能を割り当てる。以上により、if文中に代入処理が存在する場合におけるＡＬＵへの入力および機能の割当処理が実行される。
【００５０】
一方、if文中に代入処理が探索されなかった場合（Ｓ１０のＮ）、コンパイル部３０は、プログラム中に含まれる条件文中のelse文で示される条件を検出して、else文中に含まれる変数ａについての代入処理を探索する（Ｓ３０）。具体的には、else文において、else条件が成立した場合に実行する変数ａへの代入処理を探索する。図５（ｂ）および図６（ｂ）に示す条件文では、ａ＝ｃを、else条件が成立したときの代入処理として決定する。なお、else文中に変数ａについての代入処理が存在しない場合には、対象とする条件文において変数ａについての代入処理が実行されないことになる。
【００５１】
続いて、コンパイル部３０は、if条件の成立時に実行する代入処理を探索する。具体的には、コンパイル部３０は、対象とする条件文の実行以前に実行される変数ａへの代入処理を探索する（Ｓ３２）。条件文に先立って変数ａへの代入処理が存在する場合（Ｓ３２のＹ）、その代入処理を、if条件が成立した場合の代入処理として決定する（Ｓ３４）。図５（ｂ）に示す条件文では、条件文に先立って実行されているａ＝ｂを、if条件が成立した場合の代入処理として決定する。ここでは、Ｓ３０においてelse条件成立時の代入処理を決定し、Ｓ３４においてif条件が成立したときの代入処理を決定して、これらの代入処理を論理回路の入力に割り当てる。なお、ＡＬＵには、条件に応じて２つの入力から出力を選択するスイッチとしての機能を割り当てる。
【００５２】
一方、条件文に先立つ変数ａへの代入処理が存在しない場合（Ｓ３２のＮ）、変数ａの値は変化しない。したがって、この場合はメモリ部２７に記憶されている最新の変数ａの値を代入値として決定する（Ｓ３６）。図６（ｂ）に示す条件文では、記憶部３４の所定のアドレスに記憶された最新の変数ａの値を、if条件が成立した場合の代入値として決定する。ここでは、Ｓ３０においてelse条件成立時の代入処理を決定し、Ｓ３６においてif条件が成立したときの代入値を決定して、代入処理および代入値をＡＬＵの入力に割り当てる。なお、ＡＬＵには、条件に応じて２つの入力から出力を選択するスイッチとしての機能を割り当てる。以上により、if文中に代入処理が存在しない場合におけるＡＬＵへの入力および機能の割当処理が実行される。
【００５３】
本実施例のコンパイル部３０は、以上のように条件文を処理することができる。これらの処理により、ifまたはelseの片側の条件文がなかったり、片側の条件文中に関係する変数への代入がなくても、それに先行する関係する変数への代入文を利用して、回路を生成できる。また、マッピング用のプログラムを作成するプログラマは、if文およびelse文の双方に代入処理を記述しなくてもよくなり、プログラミングの作業負担を軽減できる。
【００５４】
図８は、図５（ａ）および図５（ｂ）に示すプログラム記述を実行するＡＬＵに割り当てられる入力および機能を示す。既述のように、ＡＬＵは２つの入力端子と１つの出力端子を有している。第１の入力端子には、第１の代入値ｂが入力され、第２の入力端子には、第２の代入値ｃが入力される。代入値ｂおよび代入値ｃは、代入処理により定められる値である。具体的に、代入値ｂは、if条件成立時に実行される代入処理により定められる値であり、代入値ｃは、対象となる条件文の条件判定に先立って実行される代入処理により定められる値である。ＡＬＵは、if条件が成立したときに変数ａに代入値ｂを代入し、if条件が成立しないときに変数ａに代入値ｃを代入して、代入値を出力する機能を割り当てられる。これらの入力および機能は、条件文中にif条件のみが存在し、else条件が存在しない場合に割り当てられる。なお、条件文中にif条件およびelse条件の双方が存在する場合であって、いずれか一方の条件成立時に変数ａへの代入処理が存在しない場合にも、これらの入力および機能が割り当てられる。なお、if条件が成立しないときとは、図５（ｂ）に示す条件文においてはelse条件が成立するときに相当する。
【００５５】
図９（ａ）は、図６（ａ）に示すプログラム記述を実行するＡＬＵに割り当てられる入力および機能を示す。第１の入力端子には、第１の代入値ｂが入力され、第２の入力端子には、第２の代入値が入力される。第１の代入値ｂは代入処理により定められる値であり、第２の代入値は、記憶部３４の所定のアドレスに記憶されている変数ａの最新の値である。ＡＬＵは、if条件が成立したときに変数ａに代入値ｂを代入し、if条件が成立しないときに変数ａに最新の変数値を代入して、代入値を出力する機能を割り当てられる。これらの入力および機能は、条件文中にif条件のみが存在し、else条件が存在しない場合であって、且つ条件文の実行以前に実行される変数ａへの代入処理が存在しない場合に割り当てられる。なお、条件文中にif条件およびelse条件の双方が存在する場合であって、else条件成立時に変数ａへの代入処理が存在しておらず、条件文の実行以前に実行される変数ａへの代入処理が存在しない場合にも、これらの入力および機能が割り当てられる。ＡＬＵが、第２の入力端子への入力を出力して選択する場合は、変数ａの値は、以前と同じ値を維持する。
【００５６】
図９（ｂ）は、図６（ｂ）に示すプログラム記述を実行するＡＬＵに割り当てられる入力および機能を示す。第１の入力端子には、第１の代入値が入力され、第２の入力端子には、第２の代入値ｃが入力される。第１の代入値は、記憶部３４の所定のアドレスに記憶されている変数ａの最新の値であり、第２の代入値ｃは代入処理により定められる値である。ＡＬＵは、if条件が成立したときに変数ａに最新の変数値を代入し、if条件が成立しないときに変数ａに代入値ｃを代入して、代入値を出力する機能を割り当てられる。これらの入力および機能は、条件文中にif条件およびelse条件の双方が存在する場合であって、if条件成立時に変数ａへの代入処理が存在しておらず、条件文の実行以前に実行される変数ａへの代入処理が存在しない場合に割り当てられる。ＡＬＵが、第１の入力端子への入力を出力して選択する場合は、変数ａの値は、以前と同じ値を維持する。これらの処理により、ifまたはelseの片側の条件文がなかったり、片側の条件文中に関係する変数への代入がない場合で、且つ、それに先行する関係する変数への代入文もない場合でも、回路を生成できる。また、マッピング用のプログラムを作成するプログラマは、if文およびelse文の双方に代入処理を記述したり、先行する代入文を気にする必要がなくなり、プログラミングの作業負担を軽減できる。
【００５７】
図９（ａ）および図９（ｂ）において、メモリ部２７に供給されるＷＥは、メモリ部２７への書込（ライト）イネーブル信号を表す。図９（ａ）において、conditionが真のとき、メモリ部２７に格納された変数ａの値が代入値ｂに変化するが、偽のときは、メモリ部２７の値は変化しない。同様に、図９（ｂ）において、conditionが偽のとき、メモリ部２７に格納された変数ａの値が代入値ｃに変化するが、真のときは、メモリ部２７の値は変化しない。
【００５８】
図１０は、メモリ部２７へのデータ書込を制御する回路を示す。ここでは、図９（ａ）に示すＡＬＵへの機能割当の場合を示すが、図９（ｂ）に示す機能割当の場合も同様である。この制御回路は各種ゲート回路により構成されて、制御部１８とメモリ部２７の間に配置され、ＷＥ信号をメモリ部２７に供給する。この制御回路は、ＡＬＵからの出力によりメモリ部２７の内容が変化しない場合に、ＷＥ信号をオフにして、メモリ部２７への書込を禁止することを目的とする。メモリ部２７への同一値の書込を禁止することで、データ書込に伴う電力消費を抑えることができる。以下において、各信号のオンは論理値１を、オフは論理値０を示す。各信号は制御部１８により供給されてもよいが、コマンドメモリから供給されてもよい。コマンドメモリから各信号が供給される場合は、制御回路は、設定部１４とメモリ部２７の間に配置されることになる。
【００５９】
WE_control信号は、メモリ部２７が書込可能な状態にあることを示す信号である。具体的には、WE_control信号がオンであれば、ＡＬＵからメモリ部２７に出力されるタイミングであることを示し、オフであればメモリ部２７の書込を禁止する状態にあることを示す。WE_disable信号は、メモリ部２７に、代入処理を実行するＡＬＵが接続されて、かつ、対象となるメモリ部２７の出力がそのまま同一アドレスに入力される可能性がある場合にオンとなる。input_sel信号は、対象となるメモリ部２７の出力がそのまま同一アドレスに入力されるパスが、conditionの真側、偽側のいずれに接続されているかを示す信号である。なお、conditionが真側とは、図中の左側に示される代入値ｂが入力される入力端子側であり、偽側とは、右側に示されるメモリ部２７からの変数値が入力される入力端子側である。図１０においては、input_sel信号がオンであれば真側、オフであれば偽側に接続されている。
【００６０】
このＡＬＵでは、conditionが偽であれば、対象のメモリ部２７の出力がそのまま同一アドレスに入力されるパスが選択される。このとき、input_sel信号はオフ、WE_disable信号はオンとなるため、ＷＥ信号はオフとなる。したがって、メモリ部２７の書き換えは行われず、低消費電力化を実現できる。このように、制御回路は、ＡＬＵがメモリ部２７からの変数値を出力する場合に、その出力のメモリ部２７への書込みを禁止する。これにより、データ更新に伴う消費電力を軽減することが可能となる。特に、集積回路装置２６がバッテリ駆動の場合には、バッテリの消費量を節約する効果がある。
【００６１】
図１１は、図１０に示す制御回路を簡略化した構成を示す。メモリ部２７の内容が変わらない場合は、メモリ部２７への書込を行わないため、結果的にメモリ部２７からの出力ラインは不要となり、さらなる低消費電力化および回路の小型化が可能となる。
【００６２】
以上、本発明を実施例をもとに説明した。実施例は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００６３】
例えば、リコンフィギュラブル回路１２におけるＡＬＵの配列は、縦方向にのみ接続を許した多段配列に限らず、横方向の接続も許した、メッシュ状の配列であってもよい。また、上記の説明では、段を飛ばして論理回路を接続する結線は設けられていないが、このような段を飛ばす接続結線を設ける構成としてもよい。
【００６４】
また、図２では、処理装置１０が１つのリコンフィギュラブル回路１２を有する場合を示しているが、複数のリコンフィギュラブル回路１２を有していてもよい。また、実施例ではリコンフィギュラブル回路について説明したが、Ｃ言語や回路記述言語などにより固定回路を生成するツールについても、本発明のプログラム処理方法を適用できることはいうまでもない。
【００６５】
すなわち、本発明は、リコンフィギュラブル回路の動的な回路コンフィギュレーションに限らず、他の回路、例えば固定ハードウェアの回路設計に利用することも可能である。回路実装後の固定ハードウェアにおいては、回路を再生成するなどの処理は行わないが、素子形成の前段階となる回路設計を行なう段階に本手法を利用することで、回路生成用のプログラムを効率的に処理して、回路素子の代入処理機能を決定することで、所期の固定回路を生成することが可能となる。固定回路の場合であっても、ifまたはelseの片側の条件文がなかったり、片側の条件文中に関係する変数への代入がない場合で、且つ、それに先行する関係する変数への代入文もない場合でも、回路素子の機能を決定できる。また、回路生成用のプログラムを作成するプログラマは、if文およびelse文の双方に代入処理を記述したり、先行する代入文を気にする必要がなくなり、プログラミングの作業負担を軽減できる。
【００６６】
今回開示された実施例はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【００６７】
【図１】プログラム記述に含まれる条件文を示す図である。
【図２】実施例に係る処理装置の構成図である。
【図３】生成すべきターゲット回路を分割してできる複数の回路の設定データについて説明するための図である。
【図４】リコンフィギュラブル回路の構成を示す図である。
【図５】（ａ）は、実施例のリコンフィギュラブル回路におけるＡＬＵが処理可能なプログラム記述における条件文の一例を示す図であり、（ｂ）は、条件文の別の例を示す図である。
【図６】（ａ）は、実施例のリコンフィギュラブル回路におけるＡＬＵが処理可能なプログラム記述における条件文の一例を示す図であり、（ｂ）は、条件文の別の例を示す図である。
【図７】実施例のコンパイル部による条件文の処理方法を示す図である。
【図８】図５（ａ）および図５（ｂ）に示すプログラム記述を実行するＡＬＵに割り当てられる入力および機能を示す図である。
【図９】（ａ）は、図６（ａ）に示すプログラム記述を実行するＡＬＵに割り当てられる入力および機能を示す図であり、（ｂ）は、図６（ｂ）に示すプログラム記述を実行するＡＬＵに割り当てられる入力および機能を示す図である。
【図１０】メモリ部へのデータ書込を制御する回路を示す図である。
【図１１】図１０に示す制御回路を簡略化した構成を示す図である。
【符号の説明】
【００６８】
１０・・・処理装置、１２・・・リコンフィギュラブル回路、１４・・・設定部、１８・・・制御部、２２・・・出力回路、２６・・・集積回路装置、２７・・・メモリ部、２９・・・経路部、３０・・・コンパイル部、３２・・・設定データ生成部、３４・・・記憶部、３６・・・プログラム、３８・・・データフローグラフ、４０・・・設定データ、４２・・・ターゲット回路、５２・・・接続部、５３・・・ＡＬＵ列。
【図１】
2006004044.tif 000003
【図２】
2006004044.tif 000004
【図３】
2006004044.tif 000005
【図４】
2006004044.tif 000006
【図５】
2006004044.tif 000007
【図６】
2006004044.tif 000008
【図７】
2006004044.tif 000009
【図８】
2006004044.tif 000010
【図９】
2006004044.tif 000011
【図１０】
2006004044.tif 000012
【図１１】
2006004044.tif 000013