処理装置
【課題】 回路規模の縮小化に貢献するリコンフィギュラブル回路およびその周辺技術を提供する。
【解決手段】 処理装置は、論理回路の機能をノードとして表現して、入力データから出力データに至るデータの流れをノードの接続で表現するデータフローグラフを生成するDFG生成部と、生成されたデータフローグラフをもとに、構成情報を生成する構成情報生成部と、機能の変更が可能なリコンフィギュラブル回路と、前記リコンフィギュラブル回路に所期の回路を構成するための構成情報を供給する設定部とを備える。この処理装置において、前記DFG生成部は、あるノードの出力数が、対応する論理回路が接続できる論理回路の数よりも多い場合は、データフローグラフにおいて、入力を同一とする別のノードを複製して、ノード出力を分散させる。
【解決手段】 処理装置は、論理回路の機能をノードとして表現して、入力データから出力データに至るデータの流れをノードの接続で表現するデータフローグラフを生成するDFG生成部と、生成されたデータフローグラフをもとに、構成情報を生成する構成情報生成部と、機能の変更が可能なリコンフィギュラブル回路と、前記リコンフィギュラブル回路に所期の回路を構成するための構成情報を供給する設定部とを備える。この処理装置において、前記DFG生成部は、あるノードの出力数が、対応する論理回路が接続できる論理回路の数よりも多い場合は、データフローグラフにおいて、入力を同一とする別のノードを複製して、ノード出力を分散させる。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、集積回路技術に関し、特にリコンフィギュラブル回路を備えた処理装置に関する。
【背景技術】
【0002】
近年、アプリケーションに応じてハードウェアの動作を変更可能なリコンフィギュラブルプロセッサの開発が進められている。リコンフィギュラブルプロセッサを実現するためのアーキテクチャとしては、DSP(Digital Signal Processor)や、FPGA(Field Programmable Gate Array)を用いる方法が存在する。
【0003】
FPGA(Field Programmable Gate Array)はLSI製造後に回路データを書き込んで比較的自由に回路構成を設計することが可能であり、専用ハードウエアの設計に利用されている。FPGAは、論理回路の真理値表を格納するためのルックアップテーブル(LUT)と出力用のフリップフロップからなる基本セルと、その基本セル間を結ぶプログラマブルな配線リソースとを含む。FPGAでは、LUTに格納するデータと配線データを書き込むことで目的とする論理演算を実現できる。しかし、FPGAでLSIを設計した場合、ASIC(Application Specific IC)による設計と比べると、実装面積が非常に大きくなり、コスト高になる。そこで、FPGAを動的に再構成することで、回路構成の再利用を図る方法が提案されている(例えば、特許文献1参照。)。
【特許文献1】特開平10−256383号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
FPGAは回路構成の設計自由度が高く、汎用的である反面、全ての基本セル間の接続を可能とするため、多数のスイッチとスイッチのON/OFFを制御するための制御回路を含む必要があり、必然的に制御回路の実装面積が大きくなる。また、基本セル間の接続に複雑な配線パターンをとるため、配線が長くなる傾向があり、さらに1本の配線に多くのスイッチが接続される構造のため、遅延が大きくなる。そのため、FPGAによるLSIは、試作や実験のために利用されるにとどまることが多く、実装効率、性能、コストなどを考えると、量産には適していない。さらに、FPGAでは、多数のLUT方式の基本セルに構成情報を送る必要があるため、回路のコンフィグレーションにはかなりの時間がかかる。そのため、瞬時に回路構成の切り替えが必要な用途にはFPGAは適していない。
【0005】
それらの課題を解決するため、近年、ALU(Arithmetic Logic Unit)と呼ばれる基本演算機能を持つ多機能素子を多段に並べたALUアレイの検討が行われるようになった。ALUアレイでは、処理が上から下の一方向に流れるので、水平方向の配線は不要である。なお、FPGAのように、1つのALUから全てのALUに接続することもできるが、この場合、データをどのALUに渡すこともできる代わりに、配線数および接続スイッチの数が膨大となるため、回路規模が増大する原因となる。
【0006】
本発明はこうした状況に鑑みてなされたもので、その目的は、回路規模の縮小化に貢献するリコンフィギュラブル回路およびその周辺技術の提供にある。
【課題を解決するための手段】
【0007】
上記課題を解決するために、本発明のある態様の処理装置は、論理回路の機能をノードとして表現して、入力データから出力データに至るデータの流れをノードの接続で表現するデータフローグラフを生成するDFG生成部と、生成されたデータフローグラフをもとに、構成情報を生成する構成情報生成部と、機能の変更が可能なリコンフィギュラブル回路と、前記リコンフィギュラブル回路に所期の回路を構成するための構成情報を供給する設定部とを備え、前記DFG生成部は、あるノードの出力数が、対応する論理回路が接続できる論理回路の数よりも多い場合は、データフローグラフにおいて、入力を同一とする別のノードを複製して、ノード出力を分散させる。この処理装置によれば、限られたリコンフィギュラブル回路12の回路規模のなかで、効率よい演算処理を実行することができるので、リコンフィギュラブル回路の回路規模削減に貢献できる。
【0008】
本発明の他の態様の処理装置は、論理回路の機能をノードとして表現して、入力データから出力データに至るデータの流れをノードの接続で表現するデータフローグラフを生成するDFG生成部と、生成されたデータフローグラフをもとに、構成情報を生成する構成情報生成部と、機能の変更が可能なリコンフィギュラブル回路と、前記リコンフィギュラブル回路に所期の回路を構成するための構成情報を供給する設定部とを備えた処理装置であって、前記DFG生成部は、あるノードの出力数が、対応する論理回路が接続できる論理回路の数よりも多い場合は、データフローグラフにおいて、処理を行わないスルーノードを、前記ノードの出力ノードの一部とともに、前記ノードの出力と接続するように追加し、スルーノードの後に残りの出力ノードを配置することで、ノード出力を分散させる。
【0009】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0010】
本発明によれば、回路規模の縮小化に貢献するリコンフィギュラブル回路およびその周辺技術を提供することができる。
【発明を実施するための最良の形態】
【0011】
(実施例1)
図1は、ALUアレイを用いたリコンフィギュラブルプロセッサの構成図を示す。図1に示すように、最初に構成情報格納メモリからALUの機能を制御する命令セットとALU間の接続先を制御する接続データセット(以下、「構成情報」と呼ぶ)をALUアレイに設定する。ALUアレイは複数段で構成され、ALUを各段に複数個配置する。ALUには、予め複数の演算回路が実装されており、命令セットによってどの演算を行うかが選択される。上段から下段へのALU間のデータ渡しは、ALU間の接続切替を行う接続スイッチに接続データセットを設定することで、下段のどのALUにデータを渡すかが定められる。動作時には、構成情報に従って演算処理し、結果を出力する。
【0012】
構成情報は、一般にC言語のような高品位言語で記述されたプログラムから作成される。Cのプログラムは、変換ツールによってDFG(Data Flow Graph)と呼ばれるデータフローグラフへ変換される。図2は、C言語プログラムの一例を示し、図3は、図2に示すプログラムに対応するDFGを示す。図3において、mulは乗算、addは加算を示す。プログラムでは、変数a、bに入力された値をそれぞれ2倍、5倍して、その乗算結果を足し合わせる機能を表している。これをDFG化するには、x、yを求める2つの式は並列に処理することが可能であるため、1段目でこの2つの乗算を行い、2段目でそれぞれの乗算結果を入力として加算を行う。変換ツールは、このDFGからALUアレイ上の各ALUの命令とALU間の接続を決定し、それらの情報からハードウェアの入力となるデータセットである構成情報に変換する。図4は、図3のDFGから構成情報をALUアレイに割り当てた時の構成図を示す。ここで、movはALUへの入力をそのままスルーして、下段に渡すことを示す。
【0013】
図5は、縦方向の段をまたぐALU間接続をなくした接続方式を示す。図5に示す接続方式によると、段をまたいだ接続が存在しないため、回路規模を削減させることが可能となる。以下では、図5に示す接続方式よりも、さらに配線数を削減したALUアレイのアーキテクチャについて説明する。
【0014】
(実施例2)
図6は、実施例2に係る処理装置10の構成図である。処理装置10は、集積回路装置26を備える。集積回路装置26は、回路構成を再構成可能とする機能を有する。集積回路装置26は1チップとして構成され、リコンフィギュラブル回路12、設定部14、制御部18、内部状態保持回路20、出力回路22および経路部24を備える。リコンフィギュラブル回路12は、設定を変更することにより、機能の変更を可能とする。
【0015】
設定部14は、第1設定部14a、第2設定部14b、第3設定部14c、第4設定部14dおよび選択器16を有し、リコンフィギュラブル回路12に所期の回路を構成するための構成情報40を供給する。経路部24は、フィードバックパスとして機能し、リコンフィギュラブル回路12の出力を、リコンフィギュラブル回路12の入力に接続する。内部状態保持回路20および出力回路22は、例えばデータフリップフロップ(D−FF)などの順序回路あるいはメモリで構成され、リコンフィギュラブル回路12の出力を受ける。内部状態保持回路20は経路部24に接続されている。リコンフィギュラブル回路12は組合せ回路、またはD−FFのような状態保持を含む順序回路として構成される。
【0016】
リコンフィギュラブル回路12は、機能の変更が可能なALUなどの論理回路の集合体を複数備えた構造を有し、また、それぞれの集合体の間に設けられて、集合体間の論理回路の接続を選択的に確立可能な少なくとも1つの接続部を有する。具体的に、リコンフィギュラブル回路12において、演算機能を選択的に実行可能な複数のALUがマトリックス状に配列され、各段に配列された複数のALUが集合体を構成して、前段の集合体における処理結果が、接続部において選択的に確立される接続にしたがって後段の集合体に引き渡される。ここで、接続部は、接続する一方の集合体における論理回路が、別の集合体に含まれる一部の論理回路のみと接続可能であるように構成される。これにより、図5に示す接続方式と比較すると、回路規模を大幅に削減することが可能となる。各論理回路の機能と、論理回路間の接続関係は、設定部14により供給される構成情報40に基づいて設定される。構成情報40は、以下の手順で生成される。
【0017】
集積回路装置26により実現されるべきプログラム36が、記憶部34に保持されている。プログラム36は、信号処理回路または信号処理アルゴリズムなどをC言語などの高級言語で記述したものである。DFG生成部30は、DFG化処理を実行し、具体的には記憶部34に格納されたプログラム36をコンパイルし、データフローグラフ(DFG)38に変換して記憶部34に格納する。データフローグラフ38は、入力変数および定数による入力データから出力データに至る演算ないしはデータの流れをグラフ構造で表現したものである。ここで、DFG生成部30は、リコンフィギュラブル回路12における論理回路の集合体の接続制限に応じて、データフローグラフ38を生成する。詳細については後述する。
【0018】
構成情報生成部32は、データフローグラフ38から構成情報40を生成する。構成情報40は、データフローグラフ38をリコンフィギュラブル回路12にマッピングするためのデータであり、リコンフィギュラブル回路12における論理回路の機能や論理回路間の接続関係を定める。本実施例では、DFG生成部30が、1つの回路を分割してできる複数の回路のサブDFGを生成する機能をもつ。なお、この処理機能は、構成情報生成部32により実現されてもよい。この場合は、構成情報生成部32が、DFG生成部30が最初に生成したDFGを分割して、複数の回路の構成情報を生成することになる。
【0019】
図7は、1つの生成するべき回路42を分割してできる複数の回路のサブDFG38について説明するための図である。1つの回路42を分割して生成される回路を、「分割回路」と呼ぶ。この例では、1つの回路42が、4つの分割回路、すなわち分割回路A、分割回路B、分割回路C、分割回路Dに分割されている。回路42は、プログラム36から直接生成されるデータフローグラフ38における演算の流れにしたがって分割される。最初のデータフローグラフ38において、上から下に向かう方向に演算の流れが表現される場合には、そのデータフローグラフ38を上から所定の間隔で切り取り、その切り取った部分をサブDFGとして設定する。流れにしたがって切り取る間隔は、リコンフィギュラブル回路12における論理回路の段数以下に定められる。回路42は、データフローグラフ38の横方向で分割されてもよい。横方向に分割する幅は、リコンフィギュラブル回路12における論理回路の1段あたりの個数以下に定められる。
【0020】
特に、生成すべき回路がリコンフィギュラブル回路12よりも大きい場合に、DFG生成部30は、リコンフィギュラブル回路12にマッピングできる大きさになるように、回路42を分割することが好ましい。なお、この処理は、構成情報生成部32によって、構成情報を再生成するという形で行われてもよい。DFG生成部30は、リコンフィギュラブル回路12における論理回路の配列構造と、プログラム36から直接生成されるデータフローグラフ38によって、回路42の分割方法を定める。リコンフィギュラブル回路12の配列構造は、制御部18からDFG生成部30に伝えられてもよく、また予め記憶部34に記録されていてもよい。また、制御部18が、回路42の分割方法をDFG生成部30に指示してもよい。このようにして生成されたサブDFGは、構成情報生成部32により構成情報に変換される。
【0021】
以上の手順を実行することにより、記憶部34は、リコンフィギュラブル回路12を所期の回路として構成するための複数の構成情報40を記憶する。複数の構成情報40は、分割回路Aを構成するための構成情報40a、分割回路Bを構成するための構成情報40b、分割回路Cを構成するための構成情報40c、および分割回路Dを構成するための構成情報40dである。複数の構成情報40は、1つの回路42を分割した複数の分割回路をそれぞれ表現したものである。このように、リコンフィギュラブル回路12の回路規模に応じて、生成すべき回路42のサブDFG38ないしは構成情報40を生成することにより、汎用性の高い処理装置10を実現することが可能となる。別の視点からみると、本実施例の処理装置10によれば、回路規模の小さいリコンフィギュラブル回路12を用いて、所望の回路を再構成することが可能となる。
【0022】
図8は、実施例2による接続方式のリコンフィギュラブル回路12の構成図である。リコンフィギュラブル回路12は、複数の論理回路50が複数段にわたって配列されたもので、各段に設けられた接続部52によって、前段の論理回路列の出力と後段の論理回路列の入力が設定により接続可能な構造となっている。各段に設けられた複数の論理回路50は集合体を構成する。ここでは、論理回路50の例としてALUを示す。各ALUは、論理和、論理積、ビットシフトなどの複数種類の多ビット演算を設定により選択的に実行できる。各ALUは、複数の演算機能を選択するためのセレクタを有している。
【0023】
図8に示すリコンフィギュラブル回路12では、横方向に6個、縦方向に3個のALUが配置されたALUアレイとして構成される。第1段のALU00、ALU10、・・・、ALU50には、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第1段の接続部52に設定された接続にしたがって、第2段のALU01、ALU11、・・・、ALU51に入力される。第1段の接続部52においては、第1段のALU列の出力と第2段のALU列の入力の間で、一定の接続制限が課された接続関係を実現できるように結線が構成されており、設定により、その範囲内での所期の結線が有効となる。なお、第2段の接続部52においても同様である。最終段である第3段のALU列は演算の最終結果を出力する。接続部52は、ALU段の間で、物理的に近接して配置された論理回路同士を接続可能とするように構成される。これにより、配線長を短くすることができ、回路規模を削減することができる。その結果、低消費電力化及び処理高速化が可能となる。
【0024】
図8に示すリコンフィギュラブル回路12では、3段×6列のALUが存在し、上段における1つのALUからの配線は、下段の3つのALUに制限される。図示のように、下段における1つのALUの入力は、上段における直上のALUと、直上のALUの左右のALUに制限され、また上段における1つのALUの出力は、下段における直下のALUと、直下のALUの左右のALUに制限される。例えば、ALU21に関してみると、その入力は、ALU10、ALU20、ALU30の3方向に制限され、その出力は、ALU12、ALU22、ALU32の3方向に制限される。なお、左または右に対応するALUが存在しなければ、その入力および出力は、それぞれ2方向に制限される。このような配線とすることにより、1段につき6個のALUで3段構成とした場合、ALU間の配線数は、図5に示した接続方式の配線数と比較すると、
(図5に示すALUアレイの配線数)
6×12=72
(図8)に示すALUアレイの配線数)
3×8+2×4=32
となり、およそ50%の配線数の削減が可能となる。
【0025】
図9は、図2に示すCプログラムを図8に示したALUアレイに割り当てた(マッピングした)結果を示す。図9では、可能な限り上方のALUを使用している。図9を参照して、□はALUを示し、また□を塗り潰した■は命令(この例ではmu1、add)を割り当てたALUを示し、太線で示された線は、ALU間の接続を示す。以下、このように、有意な命令を割り当てられるALUをノードとして表現する。なお、本実施例および以降の実施例において、ノードは、ALUの機能を特定するための探索処理において演算的に使用する概念である。また、同様に、マッピング(処理)は、リコンフィギュラブル回路12上に回路を実際に構成する処理だけでなく、演算上、ALUの機能を特定するための探索処理において演算的に実行する処理も含む。演算上のマッピング処理は、制御部18により制御されてもよく、またDFG生成部30ないしは構成情報生成部32により制御されてもよい。
【0026】
図10は、データフローグラフ38の例を示す図である。データフローグラフ38においては、入力される変数や定数の演算の流れが段階的にグラフ構造で表現されている。図中、演算子は丸印で示されている。構成情報生成部32は、このデータフローグラフ38をリコンフィギュラブル回路12にマッピングするための構成情報40を生成する。実施例では、特にデータフローグラフ38をリコンフィギュラブル回路12にマッピングしきれない場合に、データフローグラフ38を複数の領域に分割して、分割回路のサブDFG38ないしは構成情報40を生成する。データフローグラフ38による演算の流れをリコンフィギュラブル回路12上で実現するべく、構成情報40は、演算機能を割り当てる論理回路を特定し、また論理回路間の接続関係を定め、さらに入力変数や入力定数などを定義したデータとなる。したがって、構成情報40は、各論理回路50の機能を選択するセレクタに供給する選択情報、接続部52の結線を設定する接続情報、必要な変数データや定数データなどを含んで構成される。
【0027】
図6に戻って、回路の構成時、制御部18は、1つの回路を構成するための構成情報40を選択する。ここでは、制御部18が、図7に示す回路42を構成するための構成情報40、すなわち分割回路Aの構成情報40a、分割回路Bの構成情報40b、分割回路Cの構成情報40cおよび分割回路Dの構成情報40dを選択するものとする。制御部18は、選択した構成情報40を設定部14に供給する。設定部14はキャッシュメモリや他の種類のメモリを有し、供給される構成情報40をそれぞれ保持する。具体的に制御部18は、構成情報40aを第1設定部14aに、構成情報40bを第2設定部14bに、構成情報40cを第3設定部14cに、構成情報40dを第4設定部14dに供給する。
【0028】
設定部14は、選択された構成情報40をリコンフィギュラブル回路12に設定し、リコンフィギュラブル回路12の回路を再構成する。これにより、リコンフィギュラブル回路12は、所期の演算を実行できる。リコンフィギュラブル回路12は、基本セルとして高性能の演算能力のあるALUを用いており、またリコンフィギュラブル回路12および設定部14を1チップ上に構成することから、コンフィグレーションを高速に、例えば1クロックで実現することができる。制御部18はクロック機能を有し、クロック信号は、内部状態保持回路20および出力回路22に供給される。また制御部18はカウンタ回路を含み、カウント信号を選択器16に供給してもよい。この場合、カウンタ回路は4進カウンタである。
【0029】
図11は、実施例における信号処理のフローチャートを示す。制御部18は、カウンタ回路からのカウント信号に合わせて、リコンフィギュラブル回路12に複数の構成情報40、すなわち構成情報40a、構成情報40b、構成情報40cおよび構成情報40dを順次供給するように設定部14を制御する。設定部14が、複数の構成情報40をリコンフィギュラブル回路12に順次供給することにより、全体として1つの回路が構成されることになる。出力回路22は、設定部14によりリコンフィギュラブル回路12が複数回、ここでは4回構成されると、リコンフィギュラブル回路12の出力を出力する。この回数は、使用する構成情報40のサイクルに相当する。以下、具体的な手順を示す。
【0030】
まず、制御部18が、選択器16を制御して第1設定部14aを選択する。選択器16は、カウンタ回路により制御されてもよい。第1設定部14aは、分割回路Aの構成情報40aをリコンフィギュラブル回路12に供給し、リコンフィギュラブル回路12上に分割回路Aを構成する(S10)。分割回路Aが構成されると同時に、入力データが分割回路Aに供給される。組合せ回路である分割回路Aは、次のクロック信号までの間に、演算処理を実行する。
【0031】
制御部18がクロック信号を内部状態保持回路20に供給すると、内部状態保持回路20は、分割回路Aによる処理結果を保持する(S12)。S10およびS12のステップを第1サイクルと呼ぶ。同時に、制御部18が、選択器16を制御して第2設定部14bを選択する。第2設定部14bは、分割回路Bの構成情報40bをリコンフィギュラブル回路12に供給し、リコンフィギュラブル回路12上に分割回路Bを構成する。このとき、内部状態保持回路20に保持された分割回路Aの処理結果が、経路部24を通って分割回路Bの入力に供給される(S14)。分割回路Bは、次のクロック信号までの間に、演算処理を実行する。
【0032】
制御部18が次のクロック信号を内部状態保持回路20に供給すると、内部状態保持回路20は、分割回路Bの処理結果を保持する(S16)。S14およびS16のステップを第2サイクルと呼ぶ。同時に、制御部18が、選択器16を制御して第3設定部14cを選択する。第3設定部14cは、分割回路Cの構成情報40cをリコンフィギュラブル回路12に供給し、リコンフィギュラブル回路12上に分割回路Cを構成する。このとき、内部状態保持回路20に保持された分割回路Bの処理結果が、経路部24を通って分割回路Cの入力に供給される(S18)。分割回路Cは、次のクロック信号までの間に、演算処理を実行する。
【0033】
制御部18が次のクロック信号を内部状態保持回路20に供給すると、内部状態保持回路20は、分割回路Cの処理結果を保持する(S20)。S18およびS20のステップを第3サイクルと呼ぶ。同時に、制御部18が、選択器16を制御して第4設定部14dを選択する。第4設定部14dは、分割回路Dの構成情報40dをリコンフィギュラブル回路12に供給し、リコンフィギュラブル回路12上に分割回路Dを構成する。このとき、内部状態保持回路20に保持された分割回路Cの処理結果が、経路部24を通って分割回路Dの入力に供給される(S22)。分割回路Dは、次のクロック信号までの間に、演算処理を実行する。
【0034】
制御部18が次のクロック信号を出力回路22に供給すると、出力回路22は、分割回路Dの処理結果を出力する(S24)。S22およびS24のステップを第4サイクルと呼ぶ。第1サイクルから第4サイクルまでの処理を繰り返し行う場合には、再度、制御部18が選択器16を制御して第1設定部14aを選択し、リコンフィギュラブル回路12上に分割回路Aを構成して、入力データが供給される。
【0035】
以上のように、1つの回路42を分割した複数の分割回路A〜Dをリコンフィギュラブル回路12上に順次構成し、各分割回路の出力を次の分割回路の入力にフィードバックして各分割回路における演算処理を実行し、最後に構成された分割回路Dから、回路42の出力を取り出す。S10からS24までにかかる時間は4クロック分であり、本実施例の処理装置10によると、限られたリコンフィギュラブル回路12の回路規模のなかで、効率よい演算処理を実行することができる。また、リコンフィギュラブル回路12の回路規模が小さいため、消費電力も小さくできる。
【0036】
制御部18は、内部状態保持回路20および出力回路22に同一のクロック信号を供給してもよいが、出力回路22に供給するクロック信号の周期を、内部状態保持回路20に供給するクロック信号の周期の4倍に設定してもよい。内部状態保持回路20および出力回路22に同一のクロック信号を供給する場合は、内部状態保持回路20に出力回路22の役目をもたせ、1つの回路にまとめることもできる。この場合は、出力先の回路以降で必要な信号を取り出すための回路が必要となる。また、この例では第1設定部14a〜第4設定部14dの4つの設定部を利用したが、この数も回路42の分割数に応じて変動することは当業者に容易に理解されるところである。以下の実施例は、基本的に、上記した実施例2に関連して説明した処理装置10の構造をベースとする。
【0037】
(実施例3)
図2のCプログラムから作成されたDFGは、リコンフィギュラブル回路12におけるALUアレイのサイズ(この場合、横6個×縦3個)に収まっている。実施例3では、DFGがこのALUアレイサイズを超える場合の処理について述べる。DFGがALUアレイの縦方向のサイズを超える場合、DFGをALUアレイの縦方向に分割する。
【0038】
図12は、ALUアレイの縦方向のサイズを超えたDFGをALUアレイにマッピングした仮想的な状態の一例を示す。このDFGは縦の大きさが5であるので、DFG生成部30は、このDFGを2つに分割してできる分割回路のサブDFGを生成する。
【0039】
図13は、図12におけるDFGを2つに分割したサブDFGをALUアレイにマッピングした状態を示す。図13(a)は、図12に示した前半3段分のALUアレイのマッピング状態であり、図13(b)は、図12に示した後半2段分のALUアレイのマッピング状態である。ここでは、分割したDFGを、サブDFGと呼ぶ。サブDFGをALUアレイに割り当てて動作させる場合、図13(a)のALUアレイの3段目の出力は、一旦、内部状態保持回路20(図6参照)に保持されて、経路部24のループ配線を通じて図13(b)のALUアレイの1段目の入力データとして引き渡される。具体的には、制御部18が、設定部14に対して、第1設定部14aに、図13(a)に示すALUアレイを構成するための構成情報を保持させ、また第2設定部14bに、図13(b)に示すALUアレイを構成するための構成情報を保持させて、選択器16を介して、リコンフィギュラブル回路12(ALUアレイ)に、順次、構成情報を用いて分割回路を構成させることで、図12に示したALUアレイの処理を実現することができる。その結果、回路規模の小型化が実現でき、低消費電力化が可能となる。また、リコンフィギュラブル回路12におけるALUアレイのサイズを超えるDFGを処理する場合でも、ALUアレイを設計し直す必要がなく、回路の再利用性が高まる。
【0040】
(実施例4)
次に、DFGがALUアレイの横方向のサイズを超える場合、DFGを横方向に分割する。このDFGの分割は、DFG生成部30により行われる。
【0041】
図14は、縦横の両方向にALUアレイのサイズを超えるDFGをALUアレイにマッピングした仮想的な状態の一例を示す。このDFGは、横8個×縦5個のサイズで表現される。ALUアレイのサイズは、横6個×縦3個であるため、このDFGを、3つのサブDFGに分割する。図14において、点線で3つに分割されたサブDFGa、サブDFGbおよびサブDFGcで、もとのDFGを構成させる。
【0042】
図15は、図14におけるDFGを分割したそれぞれのサブDFGをALUアレイにマッピングした状態を示す。図15(a)は、サブDFGaをマッピングした状態を示し、図15(b)は、サブDFGbをマッピングした状態を示し、図15(c)は、サブDFGcをマッピングした状態を示す。サブDFGをALUアレイに割り当てて動作させる場合、図15(c)のALUアレイの処理は、図15(a)および図15(b)に示すALUアレイの出力を入力データとしているため、設定部14において、構成情報をALUアレイに割り当てる順序は、サブDFGaの構成情報、サブDFGbの構成情報、サブDFGcの構成情報の順に行う必要がある。なお、サブDFGaとサブDFGbの構成情報の割り当て順序は入れ替わってもよい。また、サブDFGaおよびサブDFGbで分割回路を構成したときの結果は、内部状態保持回路20に蓄えられ、サブDFGcの割り当て時に、入力データとして読み込まれる。このように、縦横のサイズがALUアレイのサイズを超えるDFGを処理する場合においても、小型の回路で実現でき、低消費電力化を可能とする。また、リコンフィギュラブル回路12におけるALUアレイのサイズを超えるDFGを処理する場合でも、ALUアレイを設計し直す必要がなく、回路の再利用性が高まる。
【0043】
(実施例5)
上述した実施例3および実施例4では、DFGをそのまま分割するだけで、サブDFGとしてALUアレイに割り当てられる場合について述べた。実施例5では、DFGがALUアレイの接続制限に合わない場合の処理方法について述べる。この処理は、DFG生成部30により行われる。なお、この処理は、制御部18が担当してもよい。
【0044】
図8に関連して説明したように、ALUアレイの接続制限が3方向の場合、ノードが4つ以上の入力や出力を持つと、そのノードをALUアレイに直接割り当てできない。入力については、とり得る命令の処理内容が問題となる。表1は、命令セットの例を示す。ここで、merge命令は、条件文からの出力(0か1)によって、2つのデータのうちの1つを選択する処理を行うため、3入力が必要となる。ここに示した命令であれば、全て3入力以下となるため、入力用の接続は全て制限内に収まる。
【0045】
【表1】
【0046】
出力については、もとのCのプログラムによって変化するため、実施例のリコンフィギュラブル回路12においては、ノードの出力数が3以下となるように、出力数を調整する必要がある。
【0047】
図16は、Cプログラムの例を示し、図17は、図16に示すCプログラムのDFGを示す。図17のnegノードの出力数は4であるため、そのままではDFGをALUアレイに割り当てることはできない。この場合の処理方法として、以下に3つの方法を示す。
【0048】
(i)ノードコピー
1番目の方法は、接続制限に合わないノードをコピーし、出力数を分散させる方法である。ここでは、DFGにおいて、入力を同一とする別のノードを複製して、ノード出力を分散させる処理を実行する。図16の例では、negノードを同じ段にコピーすることにより、1ALUあたりの出力数を3と1に制限する。
【0049】
図18は、ノードコピーを行って、出力数を3つに制限したDFGを示す。1段目のnegノードを、出力数が3つと1つになるように複製している。これにより、リコンフィギュラブル回路12における接続制限の問題を解決することができる。また、後述する (ii)スルーノードの挿入、および(iii)DFG分割の手法と比較すると、これらの手法に必要な段数の増加をなくすことができ、処理の高速化が可能となる。
【0050】
図19は、図18に示したDFGを割り当てたALUアレイを示す。なお、ここでは、説明の便宜上、横8×縦5のALUアレイとして示しているが、前述したように、このALUアレイは、横6×縦3のALUアレイに分割される。
【0051】
(ii)スルーノードの挿入
2番目の方法は、ノード間にスルーノードを挿入することによって、隣接するALU間の配線に適したDFGに変形する方法である。ここでは、DFGにおいて、スルーノードを、ノードの出力ノードの一部とともに、ノードの出力と接続するように追加し、スルーノードの後に残りの出力ノードを配置することで、ノード出力を分散させる処理を実行する。スルーノードは表1のmov命令を使用し、このノードは、何の処理も行わない。
【0052】
図20は、movノードを挿入したDFGを示す。これは、図17における2段目のnegノードの出力を用いた処理を、スルーノードを用いて一部を3段目にずらすことで、4つの処理を2段目と3段目で分けて行うDFGとして構成されている。これにより、リコンフィギュラブル回路12における接続制限の問題を解決することができる。また、後述の(iii)DFG分割の手法の場合に比べて、1つのDFGとして処理が可能であるため、処
理の高速化が可能となる。
【0053】
図21は、図20に示したDFGを割り当てたALUアレイを示す。なお、ここでは、説明の便宜上、横8×縦5のALUアレイとして示しているが、前述したように、このALUアレイは、横6×縦3のALUアレイに分割される。
【0054】
(iii)DFG分割
3番目の方法は、接続制限に合わないノードに接続されたノードを出力制限数だけ配置し、サブDFGとして切り出す方法である。残りのノードは、別のサブDFGとして作成する。
【0055】
図17の例では、negノードに接続された2つのaddと1つのsubを同じサブDFGとして作成する。残り1つのsubとその出力であるaddノード以降は割り当てできないので、別のサブDFGとして作成する。図22は、分割した2つのサブDFGを示す。図23は、図22に示したサブDFGを割り当てたALUアレイを示す。DFGの分割については、後に詳述する。
【0056】
(実施例6)
次に、DFGのノードの接続形態によってDFGがALUアレイに割り当てできない場合の処理方法について述べる。
【0057】
図24は、条件文を含んだCプログラムの一例を示し、図25は、図24のCプログラムに対応したDFGを示す。条件文に対するDFGでは、条件ノードに対応してmergeノードが生成され、条件ノードの出力の真偽に応じて、mergeノードの2つの入力のうちの1つが選択される。従って、mergeノードの入力数は3である。
【0058】
図26は、図25のDFGをそのまま割り当てたALUアレイを示す。図26に示すように、2つのmergeノードは、それぞれALU11およびALU41(図8参照)に対応付けられるが、その下段においてALU11およびALU41の出力先は、接続制限のため合わせることができない。したがって、図25のDFGにおいて、addノードをALUアレイに対応付けることができない。この場合、上述したDFG分割の方法を用いる。
【0059】
図25の左側のmergeノードまでの領域と残りのノードの領域とを2つのサブDFGとして分割する。図27は、このようにして生成したサブDFGを割り当てたALUアレイを示す。このように、DFGがALUアレイの接続制限に合わない場合でも、DFGを分割することにより、接続制限したALUアレイを用いた処理が可能となる。
【0060】
(実施例7)
前述したように、DFGをALUアレイに割り当てるには、ALUアレイの大きさや接続制限を考慮して割り当てなければならない。実施例7では、DFG内の各ノードをどの位置のALUに割り当てるか決定する方法、すなわち、接続制限されたリコンフィギュラブル回路12における論理回路の機能決定方法について述べる。ここで、各命令間の入出力変数を元に、ノード間の接続関係が明らかになったDFGを初期状態のDFGと呼ぶ。この状態からALUアレイへ割り当てるには、以下の手順で行う。
(1)ノード位置の高さ決定
(2)フライパス除去
(3)4以上の出力数を持つノードの最適化
(4)ノードの横方向位置決定、DFG分割
(5)サブDFGの合成
なお、DFGにおける各ノードをリコンフィギュラブル回路12の論理回路に対応付けるマッピング処理は、制御部18により行われてもよく、またDFG生成部30により行われてもよい。なお、このマッピング処理は、実際にリコンフィギュラブル回路12上に回路を構成するものではなく、回路を構成するための最終的なサブDFGや構成情報を取得するために、演算上実行されるマッピング処理を意味する。
【0061】
(1)では、既に公知のアルゴリズムを適用することにより、ノード位置の高さを決める。
【0062】
(2)では、ノード間の接続が段を跨ぐ場合、スルーノードを挿入する。
【0063】
(3)では、ノード出力数が4以上の場合、ノードをコピーし、3以下に削減する。
【0064】
(4)では、ノードを横方向に探索することでノードの横方向位置を決定し、配置できないDFGは分割を行う。この分割後のDFGをサブDFGと呼ぶ。
【0065】
(5)では、複数のサブDFGのうち、並列的に動作可能で、かつ、ALUアレイにまとめて配置可能なものを合成する。
【0066】
(4)の横方向の探索を行う場合、各段に対して全探索を行うと、膨大な処理時間を要する。例えば、1段あたり6個のALUが配置されるALUアレイに、1段あたり3個のノードで3段のDFGの各ノード横方向位置の探索を行うとすると、
(6P3)3=(6×5×4)3=1203=1,728,000(回)
の位置探索を行う必要がある。また、この探索では全パターンを探索しても必ず全ノードが配置できるとは限らず、サブDFGヘの分割も必要である。このため、効率的な探索方法が必要となる。
【0067】
図28は、図18に示すDFGの各ノードにノード番号を割り振った状態を示す。ノード番号の割り振り方法は任意であってよいが、この例では、基本的に左から右に番号を増やすように割り振っている。まず、最上段のノードから1つを選択し、ALUアレイ内の左上に配置する。複数のノードがある場合は、どれを選んでも構わないが、ここでは、ノード番号の小さいものを選択した場合を例示する(具体的にはノード1を選択する)。図29は、左上にノード1を配置した状態を示す。なお、以下では、説明の便宜上、図8に示したリコンフィギュラブル回路12のALUアレイよりも段数の多いALUアレイを例に、説明を行う。既述したように、実際に図8のALUアレイに割り当てる場合には、回路を分割する必要がある。
【0068】
次に、配置したノードの出力を入力に持つノードから1つを選択し、配置したノードの左下、真下、右下の順に配置可能ならば配置する。ここでは、ノード1の出力を入力に持つノードが、ノード2,3,4であるが、ここでもノード番号の小さいものを選択した場合を例示する。今後、位置を(X,Y)で表すことにする。ノード1の位置は(0,0)であるので、ノード2は(-1,1)、(0,1)、(1,1)の順に配置可能な位置を探索するが、負値はとることができないため、(0,1)に配置する。次に、ノード2の入力に、ノード1以外が存在するか否かを調べて、存在していれば、入力ノードを配置する。ここでは、ノード1以外に存在しないため、このステップは省略する。次に、ノード2の出力を入力に持つノードはノード6であるので、これも同様にして、(0,2)に配置する。ノード6はその入力に、未配置のノード3があるため、次にこの配置を行う。ノード3が配置できる位置を、ノード6の左上、真上、右上の順に探索する。ここで、既に真上の(0,1)にはノード2が配置済みのため、ノード3は(1,1)に配置する。更に、ノード3の入力にはノード1がある。ノード1はノード3の左上になるので、マージ可能である。ここまで配置した状態を図30に示す。
【0069】
同様にして、ノード6の出力を入力に持つノード8を配置する。ノード8を真下、右下、と順に移動し、ノード8が全て配置可能な位置を探索する。ノード8を(O,3)に置いた図を図31に、(1,3)に置いた図を図32に示す。図31および図32に示すように、ノード7を(1,2)又は(2,2)のどちらに置いてもその入力のノード4は(2,1)に置くことになり、ノード4の入力であるノード1とはマージできない。よって、この時点でノード8の配置は不適切であったことが判明しノード8、ノード7及びノード4の横位置を削除する。
【0070】
次に、図33に示すように、ノード6を(1,2)に変更し、ノード8の配置探索を行う。なお、この場合であっても、上記した探索処理を繰り返すと、ノード4を(2,1)に配置するしかないため、ノード4の入力であるノード1とはマージできない。このような探索処理を順次繰り返す。ノード2を(O,1)から(1,1)に変更して同様の探索を行い、全て配置不可であれば、ノード1の配置ステップまで戻って、ノード1の位置を(0,0)から(1,0)、(2,0)、・・・、(5,0)まで変更して探索する。この例の場合、結果として、ノード1の位置を(1,0)にずらすと、全てのノードを配置できることになる。この処理アルゴリズムから明らかなように、各段に対して全探索を行う場合と比較すると、大幅に探索数を低減することが可能となる。
【0071】
図34は、ノード1を(1,0)に配置して、ノード2、ノード6、ノード3の順にそれぞれの配置を決定した状態を示す。続いて、図35に示すように、ノード6に対して、ノード8、ノード7、ノード4の配置を決定する。しかしながら、この場合、ノード7に対してノード5を配置することができない。したがって、ノード8の位置を1つ右にずらして配置してみる。そうすると、図36に示すように、ノード7を(2,2)に配置することができる。したがって、ノード5を(3,1)に配置することができ、図37に示すように、接続制限されたALUアレイにおける配置を決定することができる。
【0072】
以下、図38から図41を用いて、接続制限されたALUアレイにおけるノード配置方法を説明する。ノードは論理回路(ALU)の機能を表現するものであり、ノードの配置を定めることは、すなわちALUアレイにおける論理回路の機能を定めることと等価である。以下では、図28に示したDFGをALUアレイにマッピングする場合を例に説明する。
【0073】
図38は、ノード配置のメインフローを示す。図38において、DFGにおける最上段のノードN0を1つ取り出す(S10)。ここでは、ノード1を取り出すものとする。X0およびY0の初期値をそれぞれ0に設定し(S12)、ノードN0を(0,0)に配置する(S14)。この状態は、図29に示される。
【0074】
次に、ノードN0の出力ノードN1を1つ取り出す(S16)。ただし、既に取り出したノードがある場合は、それを除く。図28を参照すると、ノード1の出力ノードとしてノード2、ノード3、ノード4が存在するが、ここではノード2を取り出すものとする。出力ノードN1が存在する場合(S18のN)、処理は、出力ノード配置モードにはいる(S20)。なお、(N1,X0,Y0)は、出力ノード配置モードにおける処理フローに引数として渡される。
【0075】
図39は、出力ノード配置モードの処理フローを示す。出力ノード配置モードにおいて、まず、段数を1段下げて(Y'←Y+1)、列を1つだけ左にずらす(X'←X-1)(S30)。その結果、座標(0,0)は、座標(-1,1)に変換される。段数を1段下げるのは、出力ノードが1段下に存在するためである。列を1つ左にずらすのは、本実施例のALUアレイは、出力ノードの存在方向を、直下とその左右の3方向に制限しているためであり、まず最初に左下にノードを配置できるかどうかを探索して、続いて直下、右下にノードを配置した場合を順をおって探索するためである。この状態で、入力ノード配置モードにはいる(S32)、なお、(N,X',Y')は、入力ノード配置モードにおける処理フローに引数として渡される。
【0076】
図40は、入力ノード配置モードの処理フローを示す。入力ノード配置モードにおいて、X<0またはXMAX<Xの場合(S50のY)、配置失敗として入力ノード配置モードを終了し、図39のS34に移行する。なお、XMAXはALUアレイ1段におけるALUの個数から1を減じた値であり、図8に示す例では、ALUの横方向の個数が6であるため、XMAXは5である。また、0≦X≦XMAXであって(S50のN)、(X,Y)にノードが既に配置されている場合(S52のY)、配置されているノードが自分自身であれば(S54のY)、配置成功であり、自分自身でなければ(S54のN)、配置失敗となる。S54の判定が終了すると、図39のS34に移行する。図28のDFGをマッピングする具体例においては、まず、引数として(-1,1)が渡されるため、S50においてX<0であることが判定されるために、配置失敗として、図39のS34に戻る。
【0077】
図39のS34において、配置失敗であったために(S34のN)、X'を1インクリメントする(S36)。この処理は、出力ノードを、左下から直下、右下へと順次サーチするためのステップであり、この例では、続いて、直下にノードを配置した場合の妥当性の検証を行うことになる。具体的に、1インクリメントされると、座標(X',Y')は(0,1)となる。X'が、(X+1)を超えない限りにおいて(S38のN)、入力ノード配置モードに戻ることができる(S32)。なおX'が、(X+1)を超える場合(S38のY)とは、出力ノードとして、右下よりさらに右側の出力ノードを探索する場合に相当する。本実施例では、論理回路の接続に制限を課していることを前提としているため、直下から2つ以上右側(ないしは左側)への配置は考慮しない。
【0078】
S32において、再度、入力ノード配置モードにはいる。このとき、S50では、X(=0)が0以上の値をとっており、且つXMAX以下であり(S50のN)、さらに(X,Y)、具体的には(0,1)にノードを配置済みでないため(S52のN)、ノードN(ここでは、ノード2)を(X,Y)に配置する(S56)。これにて、ノード1が(0,0)に、ノード2が(0,1)に配置された状態となる。
【0079】
続いて、ノードNの入力ノードN’をDFGから1つ取り出す(S58)。なお、既に取り出した入力ノードは除く。ここで、ノード2の入力ノードはノード1のみであり(取り出し済み)、他の入力ノードは存在しないため、入力ノードN’がない(S60のY)とし、ここまでの配置を成功とみなして、入力ノード配置モードを抜けて、図39のS34に移行する。S34では、配置可能であったため(S34のY)、ノード配置チェック・配置状態保存モード(以下、「ノード配置チェックモード」と呼ぶ)に移行する(S40)。
【0080】
図41は、ノード配置チェックモードの処理フローを示す。このノード配置チェックモードでは、最もノード数を多く配置することのできた状態をチェックして、配置状態を保存する。全てのノードを配置することができた場合だけでなく、一部のみしか配置できない場合であっても、その配置状態を保存しておく。これは、例えば複数のサブDFGのデータとしてもつことができる。これにより、後にALUアレイを構成する場合に、生成すべき回路を1つのDFGによって作成することができない場合であっても、サブDFGを組み合わせることで、生成すべき回路を作成することが可能となる。
【0081】
ノード配置チェックモードにおいて、まず、現在配置しているノード数Sをカウントする(S80)。ノード数Sは、SMAXと比較される。SMAXの初期値は0にセットされている。ノード数SがSMAXよりも大きい場合(S82のY)、そのときのノード配置を保持して(S84)、SMAXをSに設定する(S86)。なお、ノード数SがSMAX以下の場合(S82のN)、ノード配置チェックモードを終了して、図39のS42に移行する。
【0082】
S42において、ノードNの出力ノードN’をDFGから1つ取り出す。具体例では、ノード2の出力ノード6を取り出すこととする。出力ノードN’がない場合(S44のY)は、ここまでの配置を成功とみなすことができ、一方、出力ノードN’が存在する場合(S44のN)、出力ノード配置モードを再帰的に呼び出す(S46)。
【0083】
再帰的に呼び出した出力ノード配置モードでは、S30において、1段下がった段にて、ノード6の配置可能な位置を探索する。この出力ノード配置モードでは、(0,1)に配置したノード2を基準として、ノード6の配置を定めていくことになる。以下では、座標(0,0)のノード1に対してノード2の座標を(0,1)に定めたように、ノード2に対して、ノード6の座標が(0,2)に定まる。この座標の決定は、図40におけるS56にて行われる。
【0084】
続いてS58にて、ノード6の入力ノード3が取り出される。なお、ノード6の入力ノードとしてノード2も存在するが、既に取り出したノードであるため、S58では、新たに取り出すことはしない。ノード3が存在するため(S60のN)、このノード3の配置をチェックするべく、段数を1段上げて(Y'←Y-1)、列を1つだけ左にずらす(X'←X-1)(S62)。ここで、入力ノード配置モードを再帰的に呼び出し(S64)、(X-1,Y-1)において、具体的には(-1,1)に、ノード3を配置可能であるか否かをチェックする。なお、X<0(S50のY)であるため、この座標(-1,1)にはノード3を配置することはできず(S66のN)、X'を1インクリメントして(S68)、X'が(X+1)を超えない限りにおいて(S70のN)、隣の座標(0,1)においてノード3を配置することができるか否かをチェックする(S64)。(0,1)には、既にノード2が配置されているため(S52のY、S54のN)、ノード3を配置することはできず(S66のN)、さらに、X'を1インクリメントして(S68)、(1,1)にノード3を配置することができるか否かをチェックする(S64)。0≦X≦XMAXであり(S50のN)、(1,1)が空いているため(S52のN)、ノード3を(1,1)に配置する(S56)。続いて、ノード3の入力ノードがノード1以外に存在しないため(S60のY)、これまでの配置が成功したものとして、入力ノード配置モードを抜ける。この状態は、図30に示される。なお、S70において、X'が(X+1)を超えた場合(S70のY)、NおよびNの入力を辿って消去する(S72)。この場合、図39のS34に戻る。
【0085】
続いて、入力ノード配置モード(S32)において、配置が成功したため(S34のY)、ノード配置チェックモード(S40)を実行し、さらにS42〜S46までのステップを実行する。これにより、これまでと同様に、ノード6の出力を入力にもつノード8を配置する。S56において、ノード8は、(0,3)ないしは(0,1)に配置することができる。図31は、ノード8を(0,3)に配置した状態を、図32は、ノード8を(1,3)に配置した状態を示す。その後、S58においてノード8の入力ノードであるノード7を取り出し、ノード7を(1,2)または(2,2)に配置し(S64)、さらに、ノード7の入力ノードであるノード4を取り出して(S58)、ノード4を(2,1)に配置することができるが、(2,1)に配置したノード4は、接続制限の関係から、(0,0)に配置したノード1とリンクすることができない。したがって、この配置は、失敗であることが分かる。
【0086】
図38のメインフローに戻って、以上のように、ノード1を(0,0)からスタートして、最も適切な配置状態を探索していく。最上段のノードN0の配置を(0,0)に設定して探索処理を行い、最終的に出力ノードN1がなくなるまで(S18のY)、探索処理が完了すると、S22において、X0を1インクリメントして、ノード1の座標を(1,0)に設定して、探索をやり直す。なお、ノード1を(0,0)に配置したときに、全ノードを配置することができた場合は、その時点でメインフローを終了してもよい。なお、探索の繰り返しは、X0がXMAX以下の間行われ(S24のY)、X0がXMAXより大きくとなると(S24のN)、この探索処理は終了する。このように、各段に対して全探索を行う場合と比較すると、大幅に探索数を低減することが可能となる。また、できる限り多くのノードが1つのサブDFGに含まれるように割り当てられるので、効率的な処理が可能となる。
【0087】
(実施例8)
実施例8では、DFGの分割処理について説明する。
【0088】
図42は、図25の各ノードにノード番号を割り振った状態を示す。まず、図27(a)に示すように、図42における左側のノード1〜4をALUアレイに割り当て、ノード4の出力を入力にもつノード9の横位置を、ノード4の左下、真下、右下の順に探索を行う。それぞれの位置において、ノード9の上段にノード8を配置し、その入力であるノード5〜7の配置を探索する。この探索処理は、実施例7で説明したとおりである。
【0089】
この例では、ノード9及びその入力ノード5〜7を配置する際、ノード5〜7の全てを配置することができない。そこで、ノード9の配置が失敗した時点で、ノード9を除いた状態で一旦DFGを切り出し、残ったDFGに対して、再度割り当てを行う。図27(b)が、残りのDFGに対して割り当てたALUアレイを示す。このようにして、DFGを分割することが可能となる。分割したサブDFGは、実施例7において図41に関連して説明したノード配置チェックモードにおいて保存されたものを利用する。既述したように、S84では、配置することができた最大数のノードの配置状態を保持するため、これをもとにサブDFG(ないしは、その構成情報)を形成することが可能となる。なお、この配置状態は、S84において記憶部34(図6参照)に記憶される。このような分割手法を用いることにより、できる限り多くのノードが1つのサブDFGに含まれるように分割できるので、効率的な処理が可能となる。また、後述のサブDFGの合成手法との組み合わせにより、全体としてサブDFGの数を低減できる。
【0090】
(実施例9)
次に、サブDFGの合成について、例に沿って説明する。図43は、分割して得られたサブDFGの例を示す。なお、実際のDFGは、図3や図10などにおいて繰り返し示したように、ノードと接続関係を示した処理の流れを表現するものであるが、ここでは、説明の便宜上、ALUアレイにマッピングした状態のものと等価なものとして扱っている。図43において、"dfgoutx-x"はサブDFGの出力データを表す。例えば、サブDFG1の出力データdfgout1-1は、サブDFG2に入力され、サブDFG2の出力dfgout2-1、dfgout2-2は、それぞれサブDFG3、サブDFG5に入力される。分割後の状態では、ALUアレイの右側にノードが割り当てられていないALUが多いので、複数のサブDFGを1つに合成して処理できれば、使用しているALUの並列度が向上し、高速化できる。但し、サブDFG間でデータの入出力が存在するので、そのような関係にあるサブDFGは合成できない、そのため、まずサブDFG間で合成可能か否かを判定し、合成可能であれば、実際の合成処理を行う。サブDFG間で合成可能か否かの判定は、まず、サブDFGを1つのノードとし、その入出力データの流れをデータフローとしてDFGを作成することで行ってもよい。
【0091】
図6に戻って、DFG生成部30は、同時実行可能な複数の回路に対応するサブDFGを探索して合成し、新たなDFGを生成する。合成可能なサブDFGは、入出力において互いに独立していることが条件となる。構成情報生成部32は、合成したDFGから構成情報を生成し、記憶部34に記憶させる。制御部18は、この構成情報を設定部14を介してリコンフィギュラブル回路12に供給する。これにより、リコンフィギュラブル回路12には、同時実行可能な複数の回路が同時に形成されることになる。
【0092】
図44は、サブDFG間のデータフローを示す。DFG生成部30は、図44のデータフローをもとに、合成可能なサブDFGを探索する。サブDFG1の出力を直接的または間接的に受け取るサブDFG2、サブDFG3およびサブDFG5は、サブDFG1と合成することはできないが、サブDFG1とサブDFG4は入出力データを受け取る関係にはないため、合成しても問題はない。
【0093】
図45は、合成判定を行うフローチャートを示す。まず、iを1にセットする(S100)。iがサブDFGの個数以下であれば(S102のY)、i番目のサブDFGiを取り出す(S104)。このサブDFGiについて、入力DFGチェックモード(S106)および出力DFGチェックモード(S108)における処理を実行する。
【0094】
図46は、入力DFGチェックモードにおける処理のフローチャートを示す。まず、サブDFGiの入力DFGを取り出す(S120)。取り出したDFGを、以下のフローでは、DFGiとして定義する。DFGiが存在しない場合(S122のY)、S104で取り出したサブDFGiの入力が存在しないことが判定され、入力DFGチェックモードにおける処理を終了する。一方、入力DFGiが存在する場合(S122のN)、そのDFGiをチェックして(S124)、再度、入力DFGモードにおける処理を再帰的に実行する(S126)。この再帰処理は、入力DFGiが存在しなくなった時点で(S122のY)で、終了する。
【0095】
図47は、出力DFGチェックモードにおける処理のフローチャートを示す。まず、サブDFGiの出力DFGを取り出す(S130)。取り出したDFGを、以下のフローでは、DFGiとして定義する。DFGiが存在しない場合(S132のY)、S104で取り出したサブDFGiの出力が存在しないことが判定され、出力DFGチェックモードにおける処理を終了する。一方、出力DFGiが存在する場合(S132のN)、そのDFGiをチェックして(S134)、再度、出力DFGモードにおける処理を再帰的に実行する(S136)。この再帰処理は、出力DFGiが存在しなくなった時点で(S132のY)で、終了する。
【0096】
図45に戻って、DFGiは、未チェックのサブDFGと合成可能であることが判明する(S110)。すなわち、入力DFGチェックモードおよび出力DFGチェックモードにおいてチェックされなかったサブDFGは、サブDFGiとの間で、互いの処理に影響を及ぼしあわないことが分かる。つまり、サブDFGiは、未チェックのサブDFGに入力データを直接的または間接的に供給するものではなく、また未チェックのサブDFGからの出力データを直接的または間接的に必要とするものではない。合成可能なサブDFGは、サブDFGiと対応付けて記憶される。続いて、チェックを解除し(S112)、iを1インクリメントして(S114)、再度、合成判定の処理を実行する。iがサブDFGの個数を超えると(S102のN)、この合成判定処理を終了する。
【0097】
以上のフローを用いると、図44の例では、サブDFG1とサブDFG4の合成が可能であることが分かる。さらに、図44の例では、サブDFG2とサブDFG4の組合せ、サブDFG3とサブDFG4の組合せ、さらにはサブDFG3とサブDFG5の組合せが可能であることが分かる。このように、複数のサブDFGを1つのDFGに合成することができるので、並列度が増し、高速化が可能となる。
【0098】
以上、複数の実施例をもとに本発明を説明した。なお本発明はこの実施例に限定されることなく、そのさまざまな変形例もまた、本発明の態様として有効である。特に、本発明に関して、実施例1から9まで例示したが、これらは単独で用いられてもよいが、それぞれを組み合わせたものも、本発明の範囲内にある。例えば、上記した実施例において、リコンフィギュラブル回路12における論理回路の機能を決定する方法を説明したが、この機能決定方法は、リコンフィギュラブル回路に限らず、他の回路、例えば固定ハードウェアの回路設計に利用することも可能である。回路実装後の固定ハードウェアにおいては、DFGを複数に分割して回路を再生成するなどの処理は行わないが、素子形成の前段階となる回路設計を行なう段階に本手法を利用することで、効率よく回路素子の機能および配置を決定して、決定した位置に決定した機能をもつ回路素子を形成することで、所期の回路を生成することが可能となる。リコンフィギュラブル回路12の回路機能を決定する場合には、複数のALUにDFGのノードを対応付ける処理を行っていたが、固定ハードウェアの回路を生成する場合には、ALUアレイが存在するわけではないため、基板上の回路素子を配置する位置、例えば他の回路素子との並びにおける順番なども決めることになる。その他の処理は、上記した実施例と同様である。その結果、所期の回路を簡易に生成することが可能となる。
【図面の簡単な説明】
【0099】
【図1】ALUアレイを用いたリコンフィギュラブルプロセッサの構成図である。
【図2】C言語プログラムの一例を示す図である。
【図3】図2に示すプログラムに対応するDFGを示す図である。
【図4】図3のDFGから構成情報をALUアレイに割り当てた時の構成図である。
【図5】縦方向の段をまたぐALU間接続をなくした接続方式を示す図である。
【図6】実施例2に係る処理装置の構成図である。
【図7】1つの生成するべき回路を分割してできる複数の回路の構成情報について説明するための図である。
【図8】実施例2による接続方式のリコンフィギュラブル回路12の構成図である。
【図9】図2に示すCプログラムを図8に示したALUアレイに割り当てた結果を示す図である。
【図10】データフローグラフの例を示す図である。
【図11】信号処理のフローチャートである。
【図12】ALUアレイの縦方向のサイズを超えたDFGをALUアレイにマッピングした仮想的な状態の一例を示す図である。
【図13】図12におけるDFGを2つに分割したサブDFGをALUアレイにマッピングした状態を示す図である。
【図14】縦横の両方向にALUアレイのサイズを超えるDFGをALUアレイにマッピングした仮想的な状態の一例を示す図である。
【図15】図14におけるDFGを分割したそれぞれのサブDFGをALUアレイにマッピングした状態を示す図である。
【図16】Cプログラムの例を示す図である。
【図17】図16に示すCプログラムのDFGを示す図である。
【図18】ノードコピーを行って、出力数を3つに制限したDFGを示す図である。
【図19】図18に示したDFGを割り当てたALUアレイを示す図である。
【図20】スルーノードを挿入したDFGを示す図である。
【図21】図20に示したDFGを割り当てたALUアレイを示す図である。
【図22】分割した2つのサブDFGを示す図である。
【図23】図22に示したサブDFGを割り当てたALUアレイを示す図である。
【図24】条件文を含んだCプログラムの一例を示す図である。
【図25】図24のCプログラムに対応したDFGを示す図である。
【図26】図25のDFGをそのまま割り当てたALUアレイを示す図である。
【図27】生成したサブDFGを割り当てたALUアレイを示す図である。
【図28】図18に示すDFGの各ノードにノード番号を割り振った状態を示す図である。
【図29】ノード1を配置した状態を示す図である。
【図30】複数のノードを配置した状態を示す図である。
【図31】ノード8を(O,3)に置いた図である。
【図32】ノード8を(1,3)に置いた図である。
【図33】ノード6を(1,2)に置いた図である。
【図34】ノード1を(1,0)に配置して、ノード2、ノード6、ノード3の順にそれぞれの配置を決定した状態を示す図である。
【図35】ノード6に対して、ノード8、ノード7、ノード4の配置を決定した状態を示す図である。
【図36】ノード7を(2,2)に置いた図である。
【図37】ALUアレイにおける全てのノード配置が決定された状態を示す図である。
【図38】ノード配置のメインフローチャートである。
【図39】出力ノード配置モードの処理フローチャートである。
【図40】入力ノード配置モードの処理フローチャートである。
【図41】ノード配置チェックモードの処理フローチャートである。
【図42】図25の各ノードにノード番号を割り振った状態を示す図である。
【図43】分割して得られたサブDFGの例を示す図である。
【図44】サブDFG間のデータフローを示す図である。
【図45】合成判定を行うフローチャートである。
【図46】入力DFGチェックモードにおける処理のフローチャートである。
【図47】出力DFGチェックモードにおける処理のフローチャートである。
【符号の説明】
【0100】
10・・・処理装置、12・・・リコンフィギュラブル回路、14・・・設定部、16・・・選択器、18・・・制御部、20・・・内部状態保持回路、22・・・出力回路、24・・・経路部、26・・・集積回路装置、30・・・DFG生成部、32・・・構成情報生成部、34・・・記憶部、38・・・データフローグラフ、40・・・構成情報、50・・・論理回路。
【技術分野】
【0001】
この発明は、集積回路技術に関し、特にリコンフィギュラブル回路を備えた処理装置に関する。
【背景技術】
【0002】
近年、アプリケーションに応じてハードウェアの動作を変更可能なリコンフィギュラブルプロセッサの開発が進められている。リコンフィギュラブルプロセッサを実現するためのアーキテクチャとしては、DSP(Digital Signal Processor)や、FPGA(Field Programmable Gate Array)を用いる方法が存在する。
【0003】
FPGA(Field Programmable Gate Array)はLSI製造後に回路データを書き込んで比較的自由に回路構成を設計することが可能であり、専用ハードウエアの設計に利用されている。FPGAは、論理回路の真理値表を格納するためのルックアップテーブル(LUT)と出力用のフリップフロップからなる基本セルと、その基本セル間を結ぶプログラマブルな配線リソースとを含む。FPGAでは、LUTに格納するデータと配線データを書き込むことで目的とする論理演算を実現できる。しかし、FPGAでLSIを設計した場合、ASIC(Application Specific IC)による設計と比べると、実装面積が非常に大きくなり、コスト高になる。そこで、FPGAを動的に再構成することで、回路構成の再利用を図る方法が提案されている(例えば、特許文献1参照。)。
【特許文献1】特開平10−256383号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
FPGAは回路構成の設計自由度が高く、汎用的である反面、全ての基本セル間の接続を可能とするため、多数のスイッチとスイッチのON/OFFを制御するための制御回路を含む必要があり、必然的に制御回路の実装面積が大きくなる。また、基本セル間の接続に複雑な配線パターンをとるため、配線が長くなる傾向があり、さらに1本の配線に多くのスイッチが接続される構造のため、遅延が大きくなる。そのため、FPGAによるLSIは、試作や実験のために利用されるにとどまることが多く、実装効率、性能、コストなどを考えると、量産には適していない。さらに、FPGAでは、多数のLUT方式の基本セルに構成情報を送る必要があるため、回路のコンフィグレーションにはかなりの時間がかかる。そのため、瞬時に回路構成の切り替えが必要な用途にはFPGAは適していない。
【0005】
それらの課題を解決するため、近年、ALU(Arithmetic Logic Unit)と呼ばれる基本演算機能を持つ多機能素子を多段に並べたALUアレイの検討が行われるようになった。ALUアレイでは、処理が上から下の一方向に流れるので、水平方向の配線は不要である。なお、FPGAのように、1つのALUから全てのALUに接続することもできるが、この場合、データをどのALUに渡すこともできる代わりに、配線数および接続スイッチの数が膨大となるため、回路規模が増大する原因となる。
【0006】
本発明はこうした状況に鑑みてなされたもので、その目的は、回路規模の縮小化に貢献するリコンフィギュラブル回路およびその周辺技術の提供にある。
【課題を解決するための手段】
【0007】
上記課題を解決するために、本発明のある態様の処理装置は、論理回路の機能をノードとして表現して、入力データから出力データに至るデータの流れをノードの接続で表現するデータフローグラフを生成するDFG生成部と、生成されたデータフローグラフをもとに、構成情報を生成する構成情報生成部と、機能の変更が可能なリコンフィギュラブル回路と、前記リコンフィギュラブル回路に所期の回路を構成するための構成情報を供給する設定部とを備え、前記DFG生成部は、あるノードの出力数が、対応する論理回路が接続できる論理回路の数よりも多い場合は、データフローグラフにおいて、入力を同一とする別のノードを複製して、ノード出力を分散させる。この処理装置によれば、限られたリコンフィギュラブル回路12の回路規模のなかで、効率よい演算処理を実行することができるので、リコンフィギュラブル回路の回路規模削減に貢献できる。
【0008】
本発明の他の態様の処理装置は、論理回路の機能をノードとして表現して、入力データから出力データに至るデータの流れをノードの接続で表現するデータフローグラフを生成するDFG生成部と、生成されたデータフローグラフをもとに、構成情報を生成する構成情報生成部と、機能の変更が可能なリコンフィギュラブル回路と、前記リコンフィギュラブル回路に所期の回路を構成するための構成情報を供給する設定部とを備えた処理装置であって、前記DFG生成部は、あるノードの出力数が、対応する論理回路が接続できる論理回路の数よりも多い場合は、データフローグラフにおいて、処理を行わないスルーノードを、前記ノードの出力ノードの一部とともに、前記ノードの出力と接続するように追加し、スルーノードの後に残りの出力ノードを配置することで、ノード出力を分散させる。
【0009】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0010】
本発明によれば、回路規模の縮小化に貢献するリコンフィギュラブル回路およびその周辺技術を提供することができる。
【発明を実施するための最良の形態】
【0011】
(実施例1)
図1は、ALUアレイを用いたリコンフィギュラブルプロセッサの構成図を示す。図1に示すように、最初に構成情報格納メモリからALUの機能を制御する命令セットとALU間の接続先を制御する接続データセット(以下、「構成情報」と呼ぶ)をALUアレイに設定する。ALUアレイは複数段で構成され、ALUを各段に複数個配置する。ALUには、予め複数の演算回路が実装されており、命令セットによってどの演算を行うかが選択される。上段から下段へのALU間のデータ渡しは、ALU間の接続切替を行う接続スイッチに接続データセットを設定することで、下段のどのALUにデータを渡すかが定められる。動作時には、構成情報に従って演算処理し、結果を出力する。
【0012】
構成情報は、一般にC言語のような高品位言語で記述されたプログラムから作成される。Cのプログラムは、変換ツールによってDFG(Data Flow Graph)と呼ばれるデータフローグラフへ変換される。図2は、C言語プログラムの一例を示し、図3は、図2に示すプログラムに対応するDFGを示す。図3において、mulは乗算、addは加算を示す。プログラムでは、変数a、bに入力された値をそれぞれ2倍、5倍して、その乗算結果を足し合わせる機能を表している。これをDFG化するには、x、yを求める2つの式は並列に処理することが可能であるため、1段目でこの2つの乗算を行い、2段目でそれぞれの乗算結果を入力として加算を行う。変換ツールは、このDFGからALUアレイ上の各ALUの命令とALU間の接続を決定し、それらの情報からハードウェアの入力となるデータセットである構成情報に変換する。図4は、図3のDFGから構成情報をALUアレイに割り当てた時の構成図を示す。ここで、movはALUへの入力をそのままスルーして、下段に渡すことを示す。
【0013】
図5は、縦方向の段をまたぐALU間接続をなくした接続方式を示す。図5に示す接続方式によると、段をまたいだ接続が存在しないため、回路規模を削減させることが可能となる。以下では、図5に示す接続方式よりも、さらに配線数を削減したALUアレイのアーキテクチャについて説明する。
【0014】
(実施例2)
図6は、実施例2に係る処理装置10の構成図である。処理装置10は、集積回路装置26を備える。集積回路装置26は、回路構成を再構成可能とする機能を有する。集積回路装置26は1チップとして構成され、リコンフィギュラブル回路12、設定部14、制御部18、内部状態保持回路20、出力回路22および経路部24を備える。リコンフィギュラブル回路12は、設定を変更することにより、機能の変更を可能とする。
【0015】
設定部14は、第1設定部14a、第2設定部14b、第3設定部14c、第4設定部14dおよび選択器16を有し、リコンフィギュラブル回路12に所期の回路を構成するための構成情報40を供給する。経路部24は、フィードバックパスとして機能し、リコンフィギュラブル回路12の出力を、リコンフィギュラブル回路12の入力に接続する。内部状態保持回路20および出力回路22は、例えばデータフリップフロップ(D−FF)などの順序回路あるいはメモリで構成され、リコンフィギュラブル回路12の出力を受ける。内部状態保持回路20は経路部24に接続されている。リコンフィギュラブル回路12は組合せ回路、またはD−FFのような状態保持を含む順序回路として構成される。
【0016】
リコンフィギュラブル回路12は、機能の変更が可能なALUなどの論理回路の集合体を複数備えた構造を有し、また、それぞれの集合体の間に設けられて、集合体間の論理回路の接続を選択的に確立可能な少なくとも1つの接続部を有する。具体的に、リコンフィギュラブル回路12において、演算機能を選択的に実行可能な複数のALUがマトリックス状に配列され、各段に配列された複数のALUが集合体を構成して、前段の集合体における処理結果が、接続部において選択的に確立される接続にしたがって後段の集合体に引き渡される。ここで、接続部は、接続する一方の集合体における論理回路が、別の集合体に含まれる一部の論理回路のみと接続可能であるように構成される。これにより、図5に示す接続方式と比較すると、回路規模を大幅に削減することが可能となる。各論理回路の機能と、論理回路間の接続関係は、設定部14により供給される構成情報40に基づいて設定される。構成情報40は、以下の手順で生成される。
【0017】
集積回路装置26により実現されるべきプログラム36が、記憶部34に保持されている。プログラム36は、信号処理回路または信号処理アルゴリズムなどをC言語などの高級言語で記述したものである。DFG生成部30は、DFG化処理を実行し、具体的には記憶部34に格納されたプログラム36をコンパイルし、データフローグラフ(DFG)38に変換して記憶部34に格納する。データフローグラフ38は、入力変数および定数による入力データから出力データに至る演算ないしはデータの流れをグラフ構造で表現したものである。ここで、DFG生成部30は、リコンフィギュラブル回路12における論理回路の集合体の接続制限に応じて、データフローグラフ38を生成する。詳細については後述する。
【0018】
構成情報生成部32は、データフローグラフ38から構成情報40を生成する。構成情報40は、データフローグラフ38をリコンフィギュラブル回路12にマッピングするためのデータであり、リコンフィギュラブル回路12における論理回路の機能や論理回路間の接続関係を定める。本実施例では、DFG生成部30が、1つの回路を分割してできる複数の回路のサブDFGを生成する機能をもつ。なお、この処理機能は、構成情報生成部32により実現されてもよい。この場合は、構成情報生成部32が、DFG生成部30が最初に生成したDFGを分割して、複数の回路の構成情報を生成することになる。
【0019】
図7は、1つの生成するべき回路42を分割してできる複数の回路のサブDFG38について説明するための図である。1つの回路42を分割して生成される回路を、「分割回路」と呼ぶ。この例では、1つの回路42が、4つの分割回路、すなわち分割回路A、分割回路B、分割回路C、分割回路Dに分割されている。回路42は、プログラム36から直接生成されるデータフローグラフ38における演算の流れにしたがって分割される。最初のデータフローグラフ38において、上から下に向かう方向に演算の流れが表現される場合には、そのデータフローグラフ38を上から所定の間隔で切り取り、その切り取った部分をサブDFGとして設定する。流れにしたがって切り取る間隔は、リコンフィギュラブル回路12における論理回路の段数以下に定められる。回路42は、データフローグラフ38の横方向で分割されてもよい。横方向に分割する幅は、リコンフィギュラブル回路12における論理回路の1段あたりの個数以下に定められる。
【0020】
特に、生成すべき回路がリコンフィギュラブル回路12よりも大きい場合に、DFG生成部30は、リコンフィギュラブル回路12にマッピングできる大きさになるように、回路42を分割することが好ましい。なお、この処理は、構成情報生成部32によって、構成情報を再生成するという形で行われてもよい。DFG生成部30は、リコンフィギュラブル回路12における論理回路の配列構造と、プログラム36から直接生成されるデータフローグラフ38によって、回路42の分割方法を定める。リコンフィギュラブル回路12の配列構造は、制御部18からDFG生成部30に伝えられてもよく、また予め記憶部34に記録されていてもよい。また、制御部18が、回路42の分割方法をDFG生成部30に指示してもよい。このようにして生成されたサブDFGは、構成情報生成部32により構成情報に変換される。
【0021】
以上の手順を実行することにより、記憶部34は、リコンフィギュラブル回路12を所期の回路として構成するための複数の構成情報40を記憶する。複数の構成情報40は、分割回路Aを構成するための構成情報40a、分割回路Bを構成するための構成情報40b、分割回路Cを構成するための構成情報40c、および分割回路Dを構成するための構成情報40dである。複数の構成情報40は、1つの回路42を分割した複数の分割回路をそれぞれ表現したものである。このように、リコンフィギュラブル回路12の回路規模に応じて、生成すべき回路42のサブDFG38ないしは構成情報40を生成することにより、汎用性の高い処理装置10を実現することが可能となる。別の視点からみると、本実施例の処理装置10によれば、回路規模の小さいリコンフィギュラブル回路12を用いて、所望の回路を再構成することが可能となる。
【0022】
図8は、実施例2による接続方式のリコンフィギュラブル回路12の構成図である。リコンフィギュラブル回路12は、複数の論理回路50が複数段にわたって配列されたもので、各段に設けられた接続部52によって、前段の論理回路列の出力と後段の論理回路列の入力が設定により接続可能な構造となっている。各段に設けられた複数の論理回路50は集合体を構成する。ここでは、論理回路50の例としてALUを示す。各ALUは、論理和、論理積、ビットシフトなどの複数種類の多ビット演算を設定により選択的に実行できる。各ALUは、複数の演算機能を選択するためのセレクタを有している。
【0023】
図8に示すリコンフィギュラブル回路12では、横方向に6個、縦方向に3個のALUが配置されたALUアレイとして構成される。第1段のALU00、ALU10、・・・、ALU50には、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第1段の接続部52に設定された接続にしたがって、第2段のALU01、ALU11、・・・、ALU51に入力される。第1段の接続部52においては、第1段のALU列の出力と第2段のALU列の入力の間で、一定の接続制限が課された接続関係を実現できるように結線が構成されており、設定により、その範囲内での所期の結線が有効となる。なお、第2段の接続部52においても同様である。最終段である第3段のALU列は演算の最終結果を出力する。接続部52は、ALU段の間で、物理的に近接して配置された論理回路同士を接続可能とするように構成される。これにより、配線長を短くすることができ、回路規模を削減することができる。その結果、低消費電力化及び処理高速化が可能となる。
【0024】
図8に示すリコンフィギュラブル回路12では、3段×6列のALUが存在し、上段における1つのALUからの配線は、下段の3つのALUに制限される。図示のように、下段における1つのALUの入力は、上段における直上のALUと、直上のALUの左右のALUに制限され、また上段における1つのALUの出力は、下段における直下のALUと、直下のALUの左右のALUに制限される。例えば、ALU21に関してみると、その入力は、ALU10、ALU20、ALU30の3方向に制限され、その出力は、ALU12、ALU22、ALU32の3方向に制限される。なお、左または右に対応するALUが存在しなければ、その入力および出力は、それぞれ2方向に制限される。このような配線とすることにより、1段につき6個のALUで3段構成とした場合、ALU間の配線数は、図5に示した接続方式の配線数と比較すると、
(図5に示すALUアレイの配線数)
6×12=72
(図8)に示すALUアレイの配線数)
3×8+2×4=32
となり、およそ50%の配線数の削減が可能となる。
【0025】
図9は、図2に示すCプログラムを図8に示したALUアレイに割り当てた(マッピングした)結果を示す。図9では、可能な限り上方のALUを使用している。図9を参照して、□はALUを示し、また□を塗り潰した■は命令(この例ではmu1、add)を割り当てたALUを示し、太線で示された線は、ALU間の接続を示す。以下、このように、有意な命令を割り当てられるALUをノードとして表現する。なお、本実施例および以降の実施例において、ノードは、ALUの機能を特定するための探索処理において演算的に使用する概念である。また、同様に、マッピング(処理)は、リコンフィギュラブル回路12上に回路を実際に構成する処理だけでなく、演算上、ALUの機能を特定するための探索処理において演算的に実行する処理も含む。演算上のマッピング処理は、制御部18により制御されてもよく、またDFG生成部30ないしは構成情報生成部32により制御されてもよい。
【0026】
図10は、データフローグラフ38の例を示す図である。データフローグラフ38においては、入力される変数や定数の演算の流れが段階的にグラフ構造で表現されている。図中、演算子は丸印で示されている。構成情報生成部32は、このデータフローグラフ38をリコンフィギュラブル回路12にマッピングするための構成情報40を生成する。実施例では、特にデータフローグラフ38をリコンフィギュラブル回路12にマッピングしきれない場合に、データフローグラフ38を複数の領域に分割して、分割回路のサブDFG38ないしは構成情報40を生成する。データフローグラフ38による演算の流れをリコンフィギュラブル回路12上で実現するべく、構成情報40は、演算機能を割り当てる論理回路を特定し、また論理回路間の接続関係を定め、さらに入力変数や入力定数などを定義したデータとなる。したがって、構成情報40は、各論理回路50の機能を選択するセレクタに供給する選択情報、接続部52の結線を設定する接続情報、必要な変数データや定数データなどを含んで構成される。
【0027】
図6に戻って、回路の構成時、制御部18は、1つの回路を構成するための構成情報40を選択する。ここでは、制御部18が、図7に示す回路42を構成するための構成情報40、すなわち分割回路Aの構成情報40a、分割回路Bの構成情報40b、分割回路Cの構成情報40cおよび分割回路Dの構成情報40dを選択するものとする。制御部18は、選択した構成情報40を設定部14に供給する。設定部14はキャッシュメモリや他の種類のメモリを有し、供給される構成情報40をそれぞれ保持する。具体的に制御部18は、構成情報40aを第1設定部14aに、構成情報40bを第2設定部14bに、構成情報40cを第3設定部14cに、構成情報40dを第4設定部14dに供給する。
【0028】
設定部14は、選択された構成情報40をリコンフィギュラブル回路12に設定し、リコンフィギュラブル回路12の回路を再構成する。これにより、リコンフィギュラブル回路12は、所期の演算を実行できる。リコンフィギュラブル回路12は、基本セルとして高性能の演算能力のあるALUを用いており、またリコンフィギュラブル回路12および設定部14を1チップ上に構成することから、コンフィグレーションを高速に、例えば1クロックで実現することができる。制御部18はクロック機能を有し、クロック信号は、内部状態保持回路20および出力回路22に供給される。また制御部18はカウンタ回路を含み、カウント信号を選択器16に供給してもよい。この場合、カウンタ回路は4進カウンタである。
【0029】
図11は、実施例における信号処理のフローチャートを示す。制御部18は、カウンタ回路からのカウント信号に合わせて、リコンフィギュラブル回路12に複数の構成情報40、すなわち構成情報40a、構成情報40b、構成情報40cおよび構成情報40dを順次供給するように設定部14を制御する。設定部14が、複数の構成情報40をリコンフィギュラブル回路12に順次供給することにより、全体として1つの回路が構成されることになる。出力回路22は、設定部14によりリコンフィギュラブル回路12が複数回、ここでは4回構成されると、リコンフィギュラブル回路12の出力を出力する。この回数は、使用する構成情報40のサイクルに相当する。以下、具体的な手順を示す。
【0030】
まず、制御部18が、選択器16を制御して第1設定部14aを選択する。選択器16は、カウンタ回路により制御されてもよい。第1設定部14aは、分割回路Aの構成情報40aをリコンフィギュラブル回路12に供給し、リコンフィギュラブル回路12上に分割回路Aを構成する(S10)。分割回路Aが構成されると同時に、入力データが分割回路Aに供給される。組合せ回路である分割回路Aは、次のクロック信号までの間に、演算処理を実行する。
【0031】
制御部18がクロック信号を内部状態保持回路20に供給すると、内部状態保持回路20は、分割回路Aによる処理結果を保持する(S12)。S10およびS12のステップを第1サイクルと呼ぶ。同時に、制御部18が、選択器16を制御して第2設定部14bを選択する。第2設定部14bは、分割回路Bの構成情報40bをリコンフィギュラブル回路12に供給し、リコンフィギュラブル回路12上に分割回路Bを構成する。このとき、内部状態保持回路20に保持された分割回路Aの処理結果が、経路部24を通って分割回路Bの入力に供給される(S14)。分割回路Bは、次のクロック信号までの間に、演算処理を実行する。
【0032】
制御部18が次のクロック信号を内部状態保持回路20に供給すると、内部状態保持回路20は、分割回路Bの処理結果を保持する(S16)。S14およびS16のステップを第2サイクルと呼ぶ。同時に、制御部18が、選択器16を制御して第3設定部14cを選択する。第3設定部14cは、分割回路Cの構成情報40cをリコンフィギュラブル回路12に供給し、リコンフィギュラブル回路12上に分割回路Cを構成する。このとき、内部状態保持回路20に保持された分割回路Bの処理結果が、経路部24を通って分割回路Cの入力に供給される(S18)。分割回路Cは、次のクロック信号までの間に、演算処理を実行する。
【0033】
制御部18が次のクロック信号を内部状態保持回路20に供給すると、内部状態保持回路20は、分割回路Cの処理結果を保持する(S20)。S18およびS20のステップを第3サイクルと呼ぶ。同時に、制御部18が、選択器16を制御して第4設定部14dを選択する。第4設定部14dは、分割回路Dの構成情報40dをリコンフィギュラブル回路12に供給し、リコンフィギュラブル回路12上に分割回路Dを構成する。このとき、内部状態保持回路20に保持された分割回路Cの処理結果が、経路部24を通って分割回路Dの入力に供給される(S22)。分割回路Dは、次のクロック信号までの間に、演算処理を実行する。
【0034】
制御部18が次のクロック信号を出力回路22に供給すると、出力回路22は、分割回路Dの処理結果を出力する(S24)。S22およびS24のステップを第4サイクルと呼ぶ。第1サイクルから第4サイクルまでの処理を繰り返し行う場合には、再度、制御部18が選択器16を制御して第1設定部14aを選択し、リコンフィギュラブル回路12上に分割回路Aを構成して、入力データが供給される。
【0035】
以上のように、1つの回路42を分割した複数の分割回路A〜Dをリコンフィギュラブル回路12上に順次構成し、各分割回路の出力を次の分割回路の入力にフィードバックして各分割回路における演算処理を実行し、最後に構成された分割回路Dから、回路42の出力を取り出す。S10からS24までにかかる時間は4クロック分であり、本実施例の処理装置10によると、限られたリコンフィギュラブル回路12の回路規模のなかで、効率よい演算処理を実行することができる。また、リコンフィギュラブル回路12の回路規模が小さいため、消費電力も小さくできる。
【0036】
制御部18は、内部状態保持回路20および出力回路22に同一のクロック信号を供給してもよいが、出力回路22に供給するクロック信号の周期を、内部状態保持回路20に供給するクロック信号の周期の4倍に設定してもよい。内部状態保持回路20および出力回路22に同一のクロック信号を供給する場合は、内部状態保持回路20に出力回路22の役目をもたせ、1つの回路にまとめることもできる。この場合は、出力先の回路以降で必要な信号を取り出すための回路が必要となる。また、この例では第1設定部14a〜第4設定部14dの4つの設定部を利用したが、この数も回路42の分割数に応じて変動することは当業者に容易に理解されるところである。以下の実施例は、基本的に、上記した実施例2に関連して説明した処理装置10の構造をベースとする。
【0037】
(実施例3)
図2のCプログラムから作成されたDFGは、リコンフィギュラブル回路12におけるALUアレイのサイズ(この場合、横6個×縦3個)に収まっている。実施例3では、DFGがこのALUアレイサイズを超える場合の処理について述べる。DFGがALUアレイの縦方向のサイズを超える場合、DFGをALUアレイの縦方向に分割する。
【0038】
図12は、ALUアレイの縦方向のサイズを超えたDFGをALUアレイにマッピングした仮想的な状態の一例を示す。このDFGは縦の大きさが5であるので、DFG生成部30は、このDFGを2つに分割してできる分割回路のサブDFGを生成する。
【0039】
図13は、図12におけるDFGを2つに分割したサブDFGをALUアレイにマッピングした状態を示す。図13(a)は、図12に示した前半3段分のALUアレイのマッピング状態であり、図13(b)は、図12に示した後半2段分のALUアレイのマッピング状態である。ここでは、分割したDFGを、サブDFGと呼ぶ。サブDFGをALUアレイに割り当てて動作させる場合、図13(a)のALUアレイの3段目の出力は、一旦、内部状態保持回路20(図6参照)に保持されて、経路部24のループ配線を通じて図13(b)のALUアレイの1段目の入力データとして引き渡される。具体的には、制御部18が、設定部14に対して、第1設定部14aに、図13(a)に示すALUアレイを構成するための構成情報を保持させ、また第2設定部14bに、図13(b)に示すALUアレイを構成するための構成情報を保持させて、選択器16を介して、リコンフィギュラブル回路12(ALUアレイ)に、順次、構成情報を用いて分割回路を構成させることで、図12に示したALUアレイの処理を実現することができる。その結果、回路規模の小型化が実現でき、低消費電力化が可能となる。また、リコンフィギュラブル回路12におけるALUアレイのサイズを超えるDFGを処理する場合でも、ALUアレイを設計し直す必要がなく、回路の再利用性が高まる。
【0040】
(実施例4)
次に、DFGがALUアレイの横方向のサイズを超える場合、DFGを横方向に分割する。このDFGの分割は、DFG生成部30により行われる。
【0041】
図14は、縦横の両方向にALUアレイのサイズを超えるDFGをALUアレイにマッピングした仮想的な状態の一例を示す。このDFGは、横8個×縦5個のサイズで表現される。ALUアレイのサイズは、横6個×縦3個であるため、このDFGを、3つのサブDFGに分割する。図14において、点線で3つに分割されたサブDFGa、サブDFGbおよびサブDFGcで、もとのDFGを構成させる。
【0042】
図15は、図14におけるDFGを分割したそれぞれのサブDFGをALUアレイにマッピングした状態を示す。図15(a)は、サブDFGaをマッピングした状態を示し、図15(b)は、サブDFGbをマッピングした状態を示し、図15(c)は、サブDFGcをマッピングした状態を示す。サブDFGをALUアレイに割り当てて動作させる場合、図15(c)のALUアレイの処理は、図15(a)および図15(b)に示すALUアレイの出力を入力データとしているため、設定部14において、構成情報をALUアレイに割り当てる順序は、サブDFGaの構成情報、サブDFGbの構成情報、サブDFGcの構成情報の順に行う必要がある。なお、サブDFGaとサブDFGbの構成情報の割り当て順序は入れ替わってもよい。また、サブDFGaおよびサブDFGbで分割回路を構成したときの結果は、内部状態保持回路20に蓄えられ、サブDFGcの割り当て時に、入力データとして読み込まれる。このように、縦横のサイズがALUアレイのサイズを超えるDFGを処理する場合においても、小型の回路で実現でき、低消費電力化を可能とする。また、リコンフィギュラブル回路12におけるALUアレイのサイズを超えるDFGを処理する場合でも、ALUアレイを設計し直す必要がなく、回路の再利用性が高まる。
【0043】
(実施例5)
上述した実施例3および実施例4では、DFGをそのまま分割するだけで、サブDFGとしてALUアレイに割り当てられる場合について述べた。実施例5では、DFGがALUアレイの接続制限に合わない場合の処理方法について述べる。この処理は、DFG生成部30により行われる。なお、この処理は、制御部18が担当してもよい。
【0044】
図8に関連して説明したように、ALUアレイの接続制限が3方向の場合、ノードが4つ以上の入力や出力を持つと、そのノードをALUアレイに直接割り当てできない。入力については、とり得る命令の処理内容が問題となる。表1は、命令セットの例を示す。ここで、merge命令は、条件文からの出力(0か1)によって、2つのデータのうちの1つを選択する処理を行うため、3入力が必要となる。ここに示した命令であれば、全て3入力以下となるため、入力用の接続は全て制限内に収まる。
【0045】
【表1】
【0046】
出力については、もとのCのプログラムによって変化するため、実施例のリコンフィギュラブル回路12においては、ノードの出力数が3以下となるように、出力数を調整する必要がある。
【0047】
図16は、Cプログラムの例を示し、図17は、図16に示すCプログラムのDFGを示す。図17のnegノードの出力数は4であるため、そのままではDFGをALUアレイに割り当てることはできない。この場合の処理方法として、以下に3つの方法を示す。
【0048】
(i)ノードコピー
1番目の方法は、接続制限に合わないノードをコピーし、出力数を分散させる方法である。ここでは、DFGにおいて、入力を同一とする別のノードを複製して、ノード出力を分散させる処理を実行する。図16の例では、negノードを同じ段にコピーすることにより、1ALUあたりの出力数を3と1に制限する。
【0049】
図18は、ノードコピーを行って、出力数を3つに制限したDFGを示す。1段目のnegノードを、出力数が3つと1つになるように複製している。これにより、リコンフィギュラブル回路12における接続制限の問題を解決することができる。また、後述する (ii)スルーノードの挿入、および(iii)DFG分割の手法と比較すると、これらの手法に必要な段数の増加をなくすことができ、処理の高速化が可能となる。
【0050】
図19は、図18に示したDFGを割り当てたALUアレイを示す。なお、ここでは、説明の便宜上、横8×縦5のALUアレイとして示しているが、前述したように、このALUアレイは、横6×縦3のALUアレイに分割される。
【0051】
(ii)スルーノードの挿入
2番目の方法は、ノード間にスルーノードを挿入することによって、隣接するALU間の配線に適したDFGに変形する方法である。ここでは、DFGにおいて、スルーノードを、ノードの出力ノードの一部とともに、ノードの出力と接続するように追加し、スルーノードの後に残りの出力ノードを配置することで、ノード出力を分散させる処理を実行する。スルーノードは表1のmov命令を使用し、このノードは、何の処理も行わない。
【0052】
図20は、movノードを挿入したDFGを示す。これは、図17における2段目のnegノードの出力を用いた処理を、スルーノードを用いて一部を3段目にずらすことで、4つの処理を2段目と3段目で分けて行うDFGとして構成されている。これにより、リコンフィギュラブル回路12における接続制限の問題を解決することができる。また、後述の(iii)DFG分割の手法の場合に比べて、1つのDFGとして処理が可能であるため、処
理の高速化が可能となる。
【0053】
図21は、図20に示したDFGを割り当てたALUアレイを示す。なお、ここでは、説明の便宜上、横8×縦5のALUアレイとして示しているが、前述したように、このALUアレイは、横6×縦3のALUアレイに分割される。
【0054】
(iii)DFG分割
3番目の方法は、接続制限に合わないノードに接続されたノードを出力制限数だけ配置し、サブDFGとして切り出す方法である。残りのノードは、別のサブDFGとして作成する。
【0055】
図17の例では、negノードに接続された2つのaddと1つのsubを同じサブDFGとして作成する。残り1つのsubとその出力であるaddノード以降は割り当てできないので、別のサブDFGとして作成する。図22は、分割した2つのサブDFGを示す。図23は、図22に示したサブDFGを割り当てたALUアレイを示す。DFGの分割については、後に詳述する。
【0056】
(実施例6)
次に、DFGのノードの接続形態によってDFGがALUアレイに割り当てできない場合の処理方法について述べる。
【0057】
図24は、条件文を含んだCプログラムの一例を示し、図25は、図24のCプログラムに対応したDFGを示す。条件文に対するDFGでは、条件ノードに対応してmergeノードが生成され、条件ノードの出力の真偽に応じて、mergeノードの2つの入力のうちの1つが選択される。従って、mergeノードの入力数は3である。
【0058】
図26は、図25のDFGをそのまま割り当てたALUアレイを示す。図26に示すように、2つのmergeノードは、それぞれALU11およびALU41(図8参照)に対応付けられるが、その下段においてALU11およびALU41の出力先は、接続制限のため合わせることができない。したがって、図25のDFGにおいて、addノードをALUアレイに対応付けることができない。この場合、上述したDFG分割の方法を用いる。
【0059】
図25の左側のmergeノードまでの領域と残りのノードの領域とを2つのサブDFGとして分割する。図27は、このようにして生成したサブDFGを割り当てたALUアレイを示す。このように、DFGがALUアレイの接続制限に合わない場合でも、DFGを分割することにより、接続制限したALUアレイを用いた処理が可能となる。
【0060】
(実施例7)
前述したように、DFGをALUアレイに割り当てるには、ALUアレイの大きさや接続制限を考慮して割り当てなければならない。実施例7では、DFG内の各ノードをどの位置のALUに割り当てるか決定する方法、すなわち、接続制限されたリコンフィギュラブル回路12における論理回路の機能決定方法について述べる。ここで、各命令間の入出力変数を元に、ノード間の接続関係が明らかになったDFGを初期状態のDFGと呼ぶ。この状態からALUアレイへ割り当てるには、以下の手順で行う。
(1)ノード位置の高さ決定
(2)フライパス除去
(3)4以上の出力数を持つノードの最適化
(4)ノードの横方向位置決定、DFG分割
(5)サブDFGの合成
なお、DFGにおける各ノードをリコンフィギュラブル回路12の論理回路に対応付けるマッピング処理は、制御部18により行われてもよく、またDFG生成部30により行われてもよい。なお、このマッピング処理は、実際にリコンフィギュラブル回路12上に回路を構成するものではなく、回路を構成するための最終的なサブDFGや構成情報を取得するために、演算上実行されるマッピング処理を意味する。
【0061】
(1)では、既に公知のアルゴリズムを適用することにより、ノード位置の高さを決める。
【0062】
(2)では、ノード間の接続が段を跨ぐ場合、スルーノードを挿入する。
【0063】
(3)では、ノード出力数が4以上の場合、ノードをコピーし、3以下に削減する。
【0064】
(4)では、ノードを横方向に探索することでノードの横方向位置を決定し、配置できないDFGは分割を行う。この分割後のDFGをサブDFGと呼ぶ。
【0065】
(5)では、複数のサブDFGのうち、並列的に動作可能で、かつ、ALUアレイにまとめて配置可能なものを合成する。
【0066】
(4)の横方向の探索を行う場合、各段に対して全探索を行うと、膨大な処理時間を要する。例えば、1段あたり6個のALUが配置されるALUアレイに、1段あたり3個のノードで3段のDFGの各ノード横方向位置の探索を行うとすると、
(6P3)3=(6×5×4)3=1203=1,728,000(回)
の位置探索を行う必要がある。また、この探索では全パターンを探索しても必ず全ノードが配置できるとは限らず、サブDFGヘの分割も必要である。このため、効率的な探索方法が必要となる。
【0067】
図28は、図18に示すDFGの各ノードにノード番号を割り振った状態を示す。ノード番号の割り振り方法は任意であってよいが、この例では、基本的に左から右に番号を増やすように割り振っている。まず、最上段のノードから1つを選択し、ALUアレイ内の左上に配置する。複数のノードがある場合は、どれを選んでも構わないが、ここでは、ノード番号の小さいものを選択した場合を例示する(具体的にはノード1を選択する)。図29は、左上にノード1を配置した状態を示す。なお、以下では、説明の便宜上、図8に示したリコンフィギュラブル回路12のALUアレイよりも段数の多いALUアレイを例に、説明を行う。既述したように、実際に図8のALUアレイに割り当てる場合には、回路を分割する必要がある。
【0068】
次に、配置したノードの出力を入力に持つノードから1つを選択し、配置したノードの左下、真下、右下の順に配置可能ならば配置する。ここでは、ノード1の出力を入力に持つノードが、ノード2,3,4であるが、ここでもノード番号の小さいものを選択した場合を例示する。今後、位置を(X,Y)で表すことにする。ノード1の位置は(0,0)であるので、ノード2は(-1,1)、(0,1)、(1,1)の順に配置可能な位置を探索するが、負値はとることができないため、(0,1)に配置する。次に、ノード2の入力に、ノード1以外が存在するか否かを調べて、存在していれば、入力ノードを配置する。ここでは、ノード1以外に存在しないため、このステップは省略する。次に、ノード2の出力を入力に持つノードはノード6であるので、これも同様にして、(0,2)に配置する。ノード6はその入力に、未配置のノード3があるため、次にこの配置を行う。ノード3が配置できる位置を、ノード6の左上、真上、右上の順に探索する。ここで、既に真上の(0,1)にはノード2が配置済みのため、ノード3は(1,1)に配置する。更に、ノード3の入力にはノード1がある。ノード1はノード3の左上になるので、マージ可能である。ここまで配置した状態を図30に示す。
【0069】
同様にして、ノード6の出力を入力に持つノード8を配置する。ノード8を真下、右下、と順に移動し、ノード8が全て配置可能な位置を探索する。ノード8を(O,3)に置いた図を図31に、(1,3)に置いた図を図32に示す。図31および図32に示すように、ノード7を(1,2)又は(2,2)のどちらに置いてもその入力のノード4は(2,1)に置くことになり、ノード4の入力であるノード1とはマージできない。よって、この時点でノード8の配置は不適切であったことが判明しノード8、ノード7及びノード4の横位置を削除する。
【0070】
次に、図33に示すように、ノード6を(1,2)に変更し、ノード8の配置探索を行う。なお、この場合であっても、上記した探索処理を繰り返すと、ノード4を(2,1)に配置するしかないため、ノード4の入力であるノード1とはマージできない。このような探索処理を順次繰り返す。ノード2を(O,1)から(1,1)に変更して同様の探索を行い、全て配置不可であれば、ノード1の配置ステップまで戻って、ノード1の位置を(0,0)から(1,0)、(2,0)、・・・、(5,0)まで変更して探索する。この例の場合、結果として、ノード1の位置を(1,0)にずらすと、全てのノードを配置できることになる。この処理アルゴリズムから明らかなように、各段に対して全探索を行う場合と比較すると、大幅に探索数を低減することが可能となる。
【0071】
図34は、ノード1を(1,0)に配置して、ノード2、ノード6、ノード3の順にそれぞれの配置を決定した状態を示す。続いて、図35に示すように、ノード6に対して、ノード8、ノード7、ノード4の配置を決定する。しかしながら、この場合、ノード7に対してノード5を配置することができない。したがって、ノード8の位置を1つ右にずらして配置してみる。そうすると、図36に示すように、ノード7を(2,2)に配置することができる。したがって、ノード5を(3,1)に配置することができ、図37に示すように、接続制限されたALUアレイにおける配置を決定することができる。
【0072】
以下、図38から図41を用いて、接続制限されたALUアレイにおけるノード配置方法を説明する。ノードは論理回路(ALU)の機能を表現するものであり、ノードの配置を定めることは、すなわちALUアレイにおける論理回路の機能を定めることと等価である。以下では、図28に示したDFGをALUアレイにマッピングする場合を例に説明する。
【0073】
図38は、ノード配置のメインフローを示す。図38において、DFGにおける最上段のノードN0を1つ取り出す(S10)。ここでは、ノード1を取り出すものとする。X0およびY0の初期値をそれぞれ0に設定し(S12)、ノードN0を(0,0)に配置する(S14)。この状態は、図29に示される。
【0074】
次に、ノードN0の出力ノードN1を1つ取り出す(S16)。ただし、既に取り出したノードがある場合は、それを除く。図28を参照すると、ノード1の出力ノードとしてノード2、ノード3、ノード4が存在するが、ここではノード2を取り出すものとする。出力ノードN1が存在する場合(S18のN)、処理は、出力ノード配置モードにはいる(S20)。なお、(N1,X0,Y0)は、出力ノード配置モードにおける処理フローに引数として渡される。
【0075】
図39は、出力ノード配置モードの処理フローを示す。出力ノード配置モードにおいて、まず、段数を1段下げて(Y'←Y+1)、列を1つだけ左にずらす(X'←X-1)(S30)。その結果、座標(0,0)は、座標(-1,1)に変換される。段数を1段下げるのは、出力ノードが1段下に存在するためである。列を1つ左にずらすのは、本実施例のALUアレイは、出力ノードの存在方向を、直下とその左右の3方向に制限しているためであり、まず最初に左下にノードを配置できるかどうかを探索して、続いて直下、右下にノードを配置した場合を順をおって探索するためである。この状態で、入力ノード配置モードにはいる(S32)、なお、(N,X',Y')は、入力ノード配置モードにおける処理フローに引数として渡される。
【0076】
図40は、入力ノード配置モードの処理フローを示す。入力ノード配置モードにおいて、X<0またはXMAX<Xの場合(S50のY)、配置失敗として入力ノード配置モードを終了し、図39のS34に移行する。なお、XMAXはALUアレイ1段におけるALUの個数から1を減じた値であり、図8に示す例では、ALUの横方向の個数が6であるため、XMAXは5である。また、0≦X≦XMAXであって(S50のN)、(X,Y)にノードが既に配置されている場合(S52のY)、配置されているノードが自分自身であれば(S54のY)、配置成功であり、自分自身でなければ(S54のN)、配置失敗となる。S54の判定が終了すると、図39のS34に移行する。図28のDFGをマッピングする具体例においては、まず、引数として(-1,1)が渡されるため、S50においてX<0であることが判定されるために、配置失敗として、図39のS34に戻る。
【0077】
図39のS34において、配置失敗であったために(S34のN)、X'を1インクリメントする(S36)。この処理は、出力ノードを、左下から直下、右下へと順次サーチするためのステップであり、この例では、続いて、直下にノードを配置した場合の妥当性の検証を行うことになる。具体的に、1インクリメントされると、座標(X',Y')は(0,1)となる。X'が、(X+1)を超えない限りにおいて(S38のN)、入力ノード配置モードに戻ることができる(S32)。なおX'が、(X+1)を超える場合(S38のY)とは、出力ノードとして、右下よりさらに右側の出力ノードを探索する場合に相当する。本実施例では、論理回路の接続に制限を課していることを前提としているため、直下から2つ以上右側(ないしは左側)への配置は考慮しない。
【0078】
S32において、再度、入力ノード配置モードにはいる。このとき、S50では、X(=0)が0以上の値をとっており、且つXMAX以下であり(S50のN)、さらに(X,Y)、具体的には(0,1)にノードを配置済みでないため(S52のN)、ノードN(ここでは、ノード2)を(X,Y)に配置する(S56)。これにて、ノード1が(0,0)に、ノード2が(0,1)に配置された状態となる。
【0079】
続いて、ノードNの入力ノードN’をDFGから1つ取り出す(S58)。なお、既に取り出した入力ノードは除く。ここで、ノード2の入力ノードはノード1のみであり(取り出し済み)、他の入力ノードは存在しないため、入力ノードN’がない(S60のY)とし、ここまでの配置を成功とみなして、入力ノード配置モードを抜けて、図39のS34に移行する。S34では、配置可能であったため(S34のY)、ノード配置チェック・配置状態保存モード(以下、「ノード配置チェックモード」と呼ぶ)に移行する(S40)。
【0080】
図41は、ノード配置チェックモードの処理フローを示す。このノード配置チェックモードでは、最もノード数を多く配置することのできた状態をチェックして、配置状態を保存する。全てのノードを配置することができた場合だけでなく、一部のみしか配置できない場合であっても、その配置状態を保存しておく。これは、例えば複数のサブDFGのデータとしてもつことができる。これにより、後にALUアレイを構成する場合に、生成すべき回路を1つのDFGによって作成することができない場合であっても、サブDFGを組み合わせることで、生成すべき回路を作成することが可能となる。
【0081】
ノード配置チェックモードにおいて、まず、現在配置しているノード数Sをカウントする(S80)。ノード数Sは、SMAXと比較される。SMAXの初期値は0にセットされている。ノード数SがSMAXよりも大きい場合(S82のY)、そのときのノード配置を保持して(S84)、SMAXをSに設定する(S86)。なお、ノード数SがSMAX以下の場合(S82のN)、ノード配置チェックモードを終了して、図39のS42に移行する。
【0082】
S42において、ノードNの出力ノードN’をDFGから1つ取り出す。具体例では、ノード2の出力ノード6を取り出すこととする。出力ノードN’がない場合(S44のY)は、ここまでの配置を成功とみなすことができ、一方、出力ノードN’が存在する場合(S44のN)、出力ノード配置モードを再帰的に呼び出す(S46)。
【0083】
再帰的に呼び出した出力ノード配置モードでは、S30において、1段下がった段にて、ノード6の配置可能な位置を探索する。この出力ノード配置モードでは、(0,1)に配置したノード2を基準として、ノード6の配置を定めていくことになる。以下では、座標(0,0)のノード1に対してノード2の座標を(0,1)に定めたように、ノード2に対して、ノード6の座標が(0,2)に定まる。この座標の決定は、図40におけるS56にて行われる。
【0084】
続いてS58にて、ノード6の入力ノード3が取り出される。なお、ノード6の入力ノードとしてノード2も存在するが、既に取り出したノードであるため、S58では、新たに取り出すことはしない。ノード3が存在するため(S60のN)、このノード3の配置をチェックするべく、段数を1段上げて(Y'←Y-1)、列を1つだけ左にずらす(X'←X-1)(S62)。ここで、入力ノード配置モードを再帰的に呼び出し(S64)、(X-1,Y-1)において、具体的には(-1,1)に、ノード3を配置可能であるか否かをチェックする。なお、X<0(S50のY)であるため、この座標(-1,1)にはノード3を配置することはできず(S66のN)、X'を1インクリメントして(S68)、X'が(X+1)を超えない限りにおいて(S70のN)、隣の座標(0,1)においてノード3を配置することができるか否かをチェックする(S64)。(0,1)には、既にノード2が配置されているため(S52のY、S54のN)、ノード3を配置することはできず(S66のN)、さらに、X'を1インクリメントして(S68)、(1,1)にノード3を配置することができるか否かをチェックする(S64)。0≦X≦XMAXであり(S50のN)、(1,1)が空いているため(S52のN)、ノード3を(1,1)に配置する(S56)。続いて、ノード3の入力ノードがノード1以外に存在しないため(S60のY)、これまでの配置が成功したものとして、入力ノード配置モードを抜ける。この状態は、図30に示される。なお、S70において、X'が(X+1)を超えた場合(S70のY)、NおよびNの入力を辿って消去する(S72)。この場合、図39のS34に戻る。
【0085】
続いて、入力ノード配置モード(S32)において、配置が成功したため(S34のY)、ノード配置チェックモード(S40)を実行し、さらにS42〜S46までのステップを実行する。これにより、これまでと同様に、ノード6の出力を入力にもつノード8を配置する。S56において、ノード8は、(0,3)ないしは(0,1)に配置することができる。図31は、ノード8を(0,3)に配置した状態を、図32は、ノード8を(1,3)に配置した状態を示す。その後、S58においてノード8の入力ノードであるノード7を取り出し、ノード7を(1,2)または(2,2)に配置し(S64)、さらに、ノード7の入力ノードであるノード4を取り出して(S58)、ノード4を(2,1)に配置することができるが、(2,1)に配置したノード4は、接続制限の関係から、(0,0)に配置したノード1とリンクすることができない。したがって、この配置は、失敗であることが分かる。
【0086】
図38のメインフローに戻って、以上のように、ノード1を(0,0)からスタートして、最も適切な配置状態を探索していく。最上段のノードN0の配置を(0,0)に設定して探索処理を行い、最終的に出力ノードN1がなくなるまで(S18のY)、探索処理が完了すると、S22において、X0を1インクリメントして、ノード1の座標を(1,0)に設定して、探索をやり直す。なお、ノード1を(0,0)に配置したときに、全ノードを配置することができた場合は、その時点でメインフローを終了してもよい。なお、探索の繰り返しは、X0がXMAX以下の間行われ(S24のY)、X0がXMAXより大きくとなると(S24のN)、この探索処理は終了する。このように、各段に対して全探索を行う場合と比較すると、大幅に探索数を低減することが可能となる。また、できる限り多くのノードが1つのサブDFGに含まれるように割り当てられるので、効率的な処理が可能となる。
【0087】
(実施例8)
実施例8では、DFGの分割処理について説明する。
【0088】
図42は、図25の各ノードにノード番号を割り振った状態を示す。まず、図27(a)に示すように、図42における左側のノード1〜4をALUアレイに割り当て、ノード4の出力を入力にもつノード9の横位置を、ノード4の左下、真下、右下の順に探索を行う。それぞれの位置において、ノード9の上段にノード8を配置し、その入力であるノード5〜7の配置を探索する。この探索処理は、実施例7で説明したとおりである。
【0089】
この例では、ノード9及びその入力ノード5〜7を配置する際、ノード5〜7の全てを配置することができない。そこで、ノード9の配置が失敗した時点で、ノード9を除いた状態で一旦DFGを切り出し、残ったDFGに対して、再度割り当てを行う。図27(b)が、残りのDFGに対して割り当てたALUアレイを示す。このようにして、DFGを分割することが可能となる。分割したサブDFGは、実施例7において図41に関連して説明したノード配置チェックモードにおいて保存されたものを利用する。既述したように、S84では、配置することができた最大数のノードの配置状態を保持するため、これをもとにサブDFG(ないしは、その構成情報)を形成することが可能となる。なお、この配置状態は、S84において記憶部34(図6参照)に記憶される。このような分割手法を用いることにより、できる限り多くのノードが1つのサブDFGに含まれるように分割できるので、効率的な処理が可能となる。また、後述のサブDFGの合成手法との組み合わせにより、全体としてサブDFGの数を低減できる。
【0090】
(実施例9)
次に、サブDFGの合成について、例に沿って説明する。図43は、分割して得られたサブDFGの例を示す。なお、実際のDFGは、図3や図10などにおいて繰り返し示したように、ノードと接続関係を示した処理の流れを表現するものであるが、ここでは、説明の便宜上、ALUアレイにマッピングした状態のものと等価なものとして扱っている。図43において、"dfgoutx-x"はサブDFGの出力データを表す。例えば、サブDFG1の出力データdfgout1-1は、サブDFG2に入力され、サブDFG2の出力dfgout2-1、dfgout2-2は、それぞれサブDFG3、サブDFG5に入力される。分割後の状態では、ALUアレイの右側にノードが割り当てられていないALUが多いので、複数のサブDFGを1つに合成して処理できれば、使用しているALUの並列度が向上し、高速化できる。但し、サブDFG間でデータの入出力が存在するので、そのような関係にあるサブDFGは合成できない、そのため、まずサブDFG間で合成可能か否かを判定し、合成可能であれば、実際の合成処理を行う。サブDFG間で合成可能か否かの判定は、まず、サブDFGを1つのノードとし、その入出力データの流れをデータフローとしてDFGを作成することで行ってもよい。
【0091】
図6に戻って、DFG生成部30は、同時実行可能な複数の回路に対応するサブDFGを探索して合成し、新たなDFGを生成する。合成可能なサブDFGは、入出力において互いに独立していることが条件となる。構成情報生成部32は、合成したDFGから構成情報を生成し、記憶部34に記憶させる。制御部18は、この構成情報を設定部14を介してリコンフィギュラブル回路12に供給する。これにより、リコンフィギュラブル回路12には、同時実行可能な複数の回路が同時に形成されることになる。
【0092】
図44は、サブDFG間のデータフローを示す。DFG生成部30は、図44のデータフローをもとに、合成可能なサブDFGを探索する。サブDFG1の出力を直接的または間接的に受け取るサブDFG2、サブDFG3およびサブDFG5は、サブDFG1と合成することはできないが、サブDFG1とサブDFG4は入出力データを受け取る関係にはないため、合成しても問題はない。
【0093】
図45は、合成判定を行うフローチャートを示す。まず、iを1にセットする(S100)。iがサブDFGの個数以下であれば(S102のY)、i番目のサブDFGiを取り出す(S104)。このサブDFGiについて、入力DFGチェックモード(S106)および出力DFGチェックモード(S108)における処理を実行する。
【0094】
図46は、入力DFGチェックモードにおける処理のフローチャートを示す。まず、サブDFGiの入力DFGを取り出す(S120)。取り出したDFGを、以下のフローでは、DFGiとして定義する。DFGiが存在しない場合(S122のY)、S104で取り出したサブDFGiの入力が存在しないことが判定され、入力DFGチェックモードにおける処理を終了する。一方、入力DFGiが存在する場合(S122のN)、そのDFGiをチェックして(S124)、再度、入力DFGモードにおける処理を再帰的に実行する(S126)。この再帰処理は、入力DFGiが存在しなくなった時点で(S122のY)で、終了する。
【0095】
図47は、出力DFGチェックモードにおける処理のフローチャートを示す。まず、サブDFGiの出力DFGを取り出す(S130)。取り出したDFGを、以下のフローでは、DFGiとして定義する。DFGiが存在しない場合(S132のY)、S104で取り出したサブDFGiの出力が存在しないことが判定され、出力DFGチェックモードにおける処理を終了する。一方、出力DFGiが存在する場合(S132のN)、そのDFGiをチェックして(S134)、再度、出力DFGモードにおける処理を再帰的に実行する(S136)。この再帰処理は、出力DFGiが存在しなくなった時点で(S132のY)で、終了する。
【0096】
図45に戻って、DFGiは、未チェックのサブDFGと合成可能であることが判明する(S110)。すなわち、入力DFGチェックモードおよび出力DFGチェックモードにおいてチェックされなかったサブDFGは、サブDFGiとの間で、互いの処理に影響を及ぼしあわないことが分かる。つまり、サブDFGiは、未チェックのサブDFGに入力データを直接的または間接的に供給するものではなく、また未チェックのサブDFGからの出力データを直接的または間接的に必要とするものではない。合成可能なサブDFGは、サブDFGiと対応付けて記憶される。続いて、チェックを解除し(S112)、iを1インクリメントして(S114)、再度、合成判定の処理を実行する。iがサブDFGの個数を超えると(S102のN)、この合成判定処理を終了する。
【0097】
以上のフローを用いると、図44の例では、サブDFG1とサブDFG4の合成が可能であることが分かる。さらに、図44の例では、サブDFG2とサブDFG4の組合せ、サブDFG3とサブDFG4の組合せ、さらにはサブDFG3とサブDFG5の組合せが可能であることが分かる。このように、複数のサブDFGを1つのDFGに合成することができるので、並列度が増し、高速化が可能となる。
【0098】
以上、複数の実施例をもとに本発明を説明した。なお本発明はこの実施例に限定されることなく、そのさまざまな変形例もまた、本発明の態様として有効である。特に、本発明に関して、実施例1から9まで例示したが、これらは単独で用いられてもよいが、それぞれを組み合わせたものも、本発明の範囲内にある。例えば、上記した実施例において、リコンフィギュラブル回路12における論理回路の機能を決定する方法を説明したが、この機能決定方法は、リコンフィギュラブル回路に限らず、他の回路、例えば固定ハードウェアの回路設計に利用することも可能である。回路実装後の固定ハードウェアにおいては、DFGを複数に分割して回路を再生成するなどの処理は行わないが、素子形成の前段階となる回路設計を行なう段階に本手法を利用することで、効率よく回路素子の機能および配置を決定して、決定した位置に決定した機能をもつ回路素子を形成することで、所期の回路を生成することが可能となる。リコンフィギュラブル回路12の回路機能を決定する場合には、複数のALUにDFGのノードを対応付ける処理を行っていたが、固定ハードウェアの回路を生成する場合には、ALUアレイが存在するわけではないため、基板上の回路素子を配置する位置、例えば他の回路素子との並びにおける順番なども決めることになる。その他の処理は、上記した実施例と同様である。その結果、所期の回路を簡易に生成することが可能となる。
【図面の簡単な説明】
【0099】
【図1】ALUアレイを用いたリコンフィギュラブルプロセッサの構成図である。
【図2】C言語プログラムの一例を示す図である。
【図3】図2に示すプログラムに対応するDFGを示す図である。
【図4】図3のDFGから構成情報をALUアレイに割り当てた時の構成図である。
【図5】縦方向の段をまたぐALU間接続をなくした接続方式を示す図である。
【図6】実施例2に係る処理装置の構成図である。
【図7】1つの生成するべき回路を分割してできる複数の回路の構成情報について説明するための図である。
【図8】実施例2による接続方式のリコンフィギュラブル回路12の構成図である。
【図9】図2に示すCプログラムを図8に示したALUアレイに割り当てた結果を示す図である。
【図10】データフローグラフの例を示す図である。
【図11】信号処理のフローチャートである。
【図12】ALUアレイの縦方向のサイズを超えたDFGをALUアレイにマッピングした仮想的な状態の一例を示す図である。
【図13】図12におけるDFGを2つに分割したサブDFGをALUアレイにマッピングした状態を示す図である。
【図14】縦横の両方向にALUアレイのサイズを超えるDFGをALUアレイにマッピングした仮想的な状態の一例を示す図である。
【図15】図14におけるDFGを分割したそれぞれのサブDFGをALUアレイにマッピングした状態を示す図である。
【図16】Cプログラムの例を示す図である。
【図17】図16に示すCプログラムのDFGを示す図である。
【図18】ノードコピーを行って、出力数を3つに制限したDFGを示す図である。
【図19】図18に示したDFGを割り当てたALUアレイを示す図である。
【図20】スルーノードを挿入したDFGを示す図である。
【図21】図20に示したDFGを割り当てたALUアレイを示す図である。
【図22】分割した2つのサブDFGを示す図である。
【図23】図22に示したサブDFGを割り当てたALUアレイを示す図である。
【図24】条件文を含んだCプログラムの一例を示す図である。
【図25】図24のCプログラムに対応したDFGを示す図である。
【図26】図25のDFGをそのまま割り当てたALUアレイを示す図である。
【図27】生成したサブDFGを割り当てたALUアレイを示す図である。
【図28】図18に示すDFGの各ノードにノード番号を割り振った状態を示す図である。
【図29】ノード1を配置した状態を示す図である。
【図30】複数のノードを配置した状態を示す図である。
【図31】ノード8を(O,3)に置いた図である。
【図32】ノード8を(1,3)に置いた図である。
【図33】ノード6を(1,2)に置いた図である。
【図34】ノード1を(1,0)に配置して、ノード2、ノード6、ノード3の順にそれぞれの配置を決定した状態を示す図である。
【図35】ノード6に対して、ノード8、ノード7、ノード4の配置を決定した状態を示す図である。
【図36】ノード7を(2,2)に置いた図である。
【図37】ALUアレイにおける全てのノード配置が決定された状態を示す図である。
【図38】ノード配置のメインフローチャートである。
【図39】出力ノード配置モードの処理フローチャートである。
【図40】入力ノード配置モードの処理フローチャートである。
【図41】ノード配置チェックモードの処理フローチャートである。
【図42】図25の各ノードにノード番号を割り振った状態を示す図である。
【図43】分割して得られたサブDFGの例を示す図である。
【図44】サブDFG間のデータフローを示す図である。
【図45】合成判定を行うフローチャートである。
【図46】入力DFGチェックモードにおける処理のフローチャートである。
【図47】出力DFGチェックモードにおける処理のフローチャートである。
【符号の説明】
【0100】
10・・・処理装置、12・・・リコンフィギュラブル回路、14・・・設定部、16・・・選択器、18・・・制御部、20・・・内部状態保持回路、22・・・出力回路、24・・・経路部、26・・・集積回路装置、30・・・DFG生成部、32・・・構成情報生成部、34・・・記憶部、38・・・データフローグラフ、40・・・構成情報、50・・・論理回路。
【特許請求の範囲】
【請求項1】
論理回路の機能をノードとして表現して、入力データから出力データに至るデータの流れをノードの接続で表現するデータフローグラフを生成するDFG生成部と、
生成されたデータフローグラフをもとに、構成情報を生成する構成情報生成部と、
機能の変更が可能なリコンフィギュラブル回路と、
前記リコンフィギュラブル回路に所期の回路を構成するための構成情報を供給する設定部とを備えた処理装置であって、
前記DFG生成部は、あるノードの出力数が、対応する論理回路が接続できる論理回路の数よりも多い場合は、データフローグラフにおいて、入力を同一とする別のノードを複製して、ノード出力を分散させることを特徴とする処理装置。
【請求項2】
論理回路の機能をノードとして表現して、入力データから出力データに至るデータの流れをノードの接続で表現するデータフローグラフを生成するDFG生成部と、
生成されたデータフローグラフをもとに、構成情報を生成する構成情報生成部と、
機能の変更が可能なリコンフィギュラブル回路と、
前記リコンフィギュラブル回路に所期の回路を構成するための構成情報を供給する設定部とを備えた処理装置であって、
前記DFG生成部は、あるノードの出力数が、対応する論理回路が接続できる論理回路の数よりも多い場合は、データフローグラフにおいて、処理を行わないスルーノードを、前記ノードの出力ノードの一部とともに、前記ノードの出力と接続するように追加し、スルーノードの後に残りの出力ノードを配置することで、ノード出力を分散させることを特徴とする処理装置。
【請求項1】
論理回路の機能をノードとして表現して、入力データから出力データに至るデータの流れをノードの接続で表現するデータフローグラフを生成するDFG生成部と、
生成されたデータフローグラフをもとに、構成情報を生成する構成情報生成部と、
機能の変更が可能なリコンフィギュラブル回路と、
前記リコンフィギュラブル回路に所期の回路を構成するための構成情報を供給する設定部とを備えた処理装置であって、
前記DFG生成部は、あるノードの出力数が、対応する論理回路が接続できる論理回路の数よりも多い場合は、データフローグラフにおいて、入力を同一とする別のノードを複製して、ノード出力を分散させることを特徴とする処理装置。
【請求項2】
論理回路の機能をノードとして表現して、入力データから出力データに至るデータの流れをノードの接続で表現するデータフローグラフを生成するDFG生成部と、
生成されたデータフローグラフをもとに、構成情報を生成する構成情報生成部と、
機能の変更が可能なリコンフィギュラブル回路と、
前記リコンフィギュラブル回路に所期の回路を構成するための構成情報を供給する設定部とを備えた処理装置であって、
前記DFG生成部は、あるノードの出力数が、対応する論理回路が接続できる論理回路の数よりも多い場合は、データフローグラフにおいて、処理を行わないスルーノードを、前記ノードの出力ノードの一部とともに、前記ノードの出力と接続するように追加し、スルーノードの後に残りの出力ノードを配置することで、ノード出力を分散させることを特徴とする処理装置。
【図40】
【図42】
【図43】
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図41】
【図44】
【図45】
【図46】
【図47】
【図42】
【図43】
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図41】
【図44】
【図45】
【図46】
【図47】
【公開番号】特開2008−90869(P2008−90869A)
【公開日】平成20年4月17日(2008.4.17)
【国際特許分類】
【出願番号】特願2007−337374(P2007−337374)
【出願日】平成19年12月27日(2007.12.27)
【分割の表示】特願2003−425657(P2003−425657)の分割
【原出願日】平成15年12月22日(2003.12.22)
【出願人】(000001889)三洋電機株式会社 (18,308)
【Fターム(参考)】
【公開日】平成20年4月17日(2008.4.17)
【国際特許分類】
【出願日】平成19年12月27日(2007.12.27)
【分割の表示】特願2003−425657(P2003−425657)の分割
【原出願日】平成15年12月22日(2003.12.22)
【出願人】(000001889)三洋電機株式会社 (18,308)
【Fターム(参考)】
[ Back to top ]