図2は、実施例に係る処理装置10の構成図である。処理装置10は、集積回路装置26を備える。集積回路装置26は、回路構成を再構成可能とする機能を有する。集積回路装置26は1チップとして構成され、リコンフィギュラブル回路12、設定部14、制御部18、出力回路22、メモリ部27および経路部29を備える。リコンフィギュラブル回路12は、設定を変更することにより、機能の変更を可能とする。
設定部14は、リコンフィギュラブル回路12に所期の回路を構成するための設定データ40を供給する。設定部14は、プログラムカウンタのカウント値に基づいて記憶したデータを出力するコマンドメモリとして構成されてもよい。この場合、制御部18がプログラムカウンタの出力を制御する。この意味において、設定データ40はコマンドデータと呼ばれてもよい。経路部29は、フィードバックパスとして機能し、リコンフィギュラブル回路12の出力を、リコンフィギュラブル回路12の入力に接続する。出力回路22は、例えばデータフリップフロップ(D−FF)などの順序回路として構成され、リコンフィギュラブル回路12の出力を受ける。メモリ部27は経路部29に接続されている。リコンフィギュラブル回路12は組合せ回路または順序回路等の論理回路として構成される。
メモリ部27は、制御部18からの指示に基づき、リコンフィギュラブル回路12から出力されるデータ信号および/または外部から入力されるデータ信号を格納するための記憶領域を有する。メモリ部27に格納されたデータ信号は、制御部18からの指示に基づいて、経路部29を通じてリコンフィギュラブル回路12の入力として伝達される。メモリ部27は、制御部18からの指示により所定のタイミングでデータ信号をリコンフィギュラブル回路12に供給することができる。
リコンフィギュラブル回路12は、機能の変更が可能な論理回路を有して構成される。具体的にリコンフィギュラブル回路12は、複数の演算機能を選択的に実行可能な論理回路を複数段に配列させた構成を有し、前段の論理回路列の出力と後段の論理回路列の入力との接続関係を設定可能な接続部を含む。複数の論理回路は、マトリックス状に配置される。各論理回路の機能と、論理回路間の接続関係は、設定部14により供給される設定データ40に基づいて設定される。設定データ40は、以下の手順で生成される。
集積回路装置26により実現されるべきプログラム36が、記憶部34に保持されている。プログラム36は、回路における処理の動作を記述した動作記述を示し、信号処理回路または信号処理アルゴリズムなどをC言語などの高級言語で記述したものである。プログラム36は、条件文などを含んで構成される。コンパイル部30は、記憶部34に格納されたプログラム36をコンパイルし、データフローグラフ(DFG)38に変換して記憶部34に格納する。データフローグラフ38は、回路における演算間の実行順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。一般に、データフローグラフ38は、上から下に向かって演算が進むように作成される。
設定データ生成部32は、データフローグラフ38から設定データ40を生成する。設定データ40は、データフローグラフ38をリコンフィギュラブル回路12にマッピングするためのデータであり、リコンフィギュラブル回路12における論理回路の機能や論理回路間の接続関係を定める。設定データ生成部32が、1つの生成すべき回路を分割してできる複数の回路の設定データ40を生成してもよい。
図3は、1つの生成すべきターゲット回路42を分割してできる複数の回路の設定データ40について説明するための図である。1つのターゲット回路42を分割して生成される回路を、「分割回路」と呼ぶ。この例では、1つのターゲット回路42が、4つの分割回路、すなわち分割回路A、分割回路B、分割回路C、分割回路Dに分割されている。ターゲット回路42は、データフローグラフ38における演算の流れにしたがって分割される。データフローグラフ38において、上から下に向かう方向に演算の流れが表現される場合、そのデータフローグラフ38を上から所定の間隔で切り取り、その切り取った部分を分割回路として設定する。流れにしたがって切り取る間隔は、リコンフィギュラブル回路12における論理回路の段数以下に定められる。ターゲット回路42は、データフローグラフ38の横方向で分割されてもよい。横方向に分割する幅は、リコンフィギュラブル回路12における論理回路の1段当たりの個数以下に定められる。
特に、生成すべきターゲット回路42がリコンフィギュラブル回路12よりも大きい場合に、設定データ生成部32は、リコンフィギュラブル回路12にマッピングできる大きさになるように、ターゲット回路42を分割することが好ましい。リコンフィギュラブル回路12へのマッピングは、一度に、例えば1回のクロックで実行することができる。したがって、この場合、4つの分割回路は、4クロックで生成することができる。設定データ生成部32は、リコンフィギュラブル回路12における論理回路の配列構造とデータフローグラフ38によって、ターゲット回路42の分割方法を定める。リコンフィギュラブル回路12の配列構造は、制御部18から設定データ生成部32に伝えられてもよく、また予め記憶部34に記録されていてもよい。また、制御部18が、ターゲット回路42の分割方法を設定データ生成部32に指示してもよい。
以上の手順を実行することにより、記憶部34は、リコンフィギュラブル回路12を所期の回路として構成するための複数の設定データ40を記憶する。複数の設定データ40は、分割回路Aを構成するための設定データ40a、分割回路Bを構成するための設定データ40b、分割回路Cを構成するための設定データ40c、および分割回路Dを構成するための設定データ40dである。既述のごとく、複数の設定データ40は、1つのターゲット回路42を分割した複数の分割回路をそれぞれ表現したものである。各設定データ40を供給することにより、リコンフィギュラブル回路12上に分割回路を1クロックで構成することができる。このように、リコンフィギュラブル回路12の回路規模に応じて、生成すべきターゲット回路42の設定データ40を生成することにより、汎用性の高い処理装置10を実現することが可能となる。別の視点からみると、実施例の処理装置10によれば、回路規模の小さいリコンフィギュラブル回路12を用いて、所望の回路を再構成することが可能となる。
図4は、リコンフィギュラブル回路12の構成を示す。リコンフィギュラブル回路12は、それぞれが複数の演算機能を選択的に実行可能な論理回路の多段配列と、前段の論理回路の出力と後段の論理回路の入力の接続関係を任意に設定可能な接続部52とを備える。リコンフィギュラブル回路12では、論理回路の多段配列構造により、上段から下段に向かって演算が進められる。なお、本明細書において「多段」とは、複数の段を意味する。なお、リコンフィギュラブル回路12の回路構成は、必ずしも多段配列を有する必要はないが、FPGAのように全ての論理回路との接続を可能とさせず、一部の論理回路との接続のみを実現させるのが好ましい。本実施例では、上記したように、リコンフィギュラブル回路12が、上段から下段に向けて演算を進める多段配列を有する場合について説明する。
リコンフィギュラブル回路12は、論理回路としてALU(Arithmetic Logic Unit)を有している。ALUは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、論理和、論理積、ビットシフトなどの複数種類の多ビット演算を設定により選択的に実行できる。各ALUは、複数の演算機能を設定するためのセレクタを有して構成されている。図示の例では、ALUが、2つの入力端子と1つの出力端子を有して構成される。
リコンフィギュラブル回路12は、縦方向にX個、横方向にY個のALUが配置されたX段Y列のALUアレイとして構成される。ここでは、縦方向に3個、横方向に6個のALUが配置された3段6列のALUアレイを示している。リコンフィギュラブル回路12は、接続部52およびALU列53を備える。ALU列53は複数段に設けられ、接続部52は前後段のALU列53の間に設けられて、前段のALUの出力と後段のALUの入力の接続関係を設定する。
図4に示す例では、第1段のALU列53aと第2段のALU列53bの間に、第2段を構成する接続部52bが設けられ、第2段のALU列53bと第3段のALU列53cの間に、第3段を構成する接続部52cが設けられる。なお、第1段を構成する接続部52aは、第1段のALU列53aの上側に設けられる。
第1段のALU11、ALU12、・・・、ALU16には、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第2段の接続部52bに設定された接続にしたがって、第2段のALU21、ALU22、・・・、ALU26に入力される。第2段の接続部52bにおいては、第1段のALU列53aの出力と第2段のALU列53bの入力の間で任意の接続関係、あるいは予め定められた接続関係の組合せの中から選択された接続関係を実現できるように接続用結線が構成されており、設定により所期の結線が有効となる。第2段のALU21、ALU22、・・・、ALU26には、ALU列53aの出力が入力され、設定された所定の演算がなされる。演算結果の出力は、第3段の接続部52cの接続用結線において設定された接続にしたがって、第3段のALU31、ALU32、・・・、ALU36に入力される。
最終段となる第3段のALU列53cからの出力データは、出力回路22および/またはメモリ部27に出力される。メモリ部27は、経路部29を介して、出力データを接続部52aに入力する。接続部52aは、接続用結線を設定し、第1段のALU11、ALU12、・・・、ALU16にデータを供給する。
本実施例において、条件文を含むプログラム36は各ALUに対して適切にマッピング処理されて、演算機能および接続関係の設定がなされる。コンパイル部30は、プログラム36に含まれる条件文を解析し、データフローグラフ38を生成する。if文で始まる条件文のマッピング処理では、ALUの2つの入力端子に代入値を供給し、ALUが、条件の真偽に応じていずれかの代入値を出力するように機能設定される。以下に、条件文を適切に処理することのできる本実施例の集積回路装置26について説明する。
図5(a)は、実施例のリコンフィギュラブル回路12におけるALUが処理可能なプログラム記述における条件文の一例を示す。この条件文には、if(condition)で示される1つの条件のみが含まれ、elseで示される条件が存在しない。なお、本来else文は、if文の条件が成立しなかった場合に実行される処理であって、if文が実行される条件はconditionが真であるときであり、else文が実行される条件はconditionが偽であるときである。本明細書では、conditionが真となる条件を1つの条件とし、その裏返しであるconditionが偽となる条件も1つの条件とする。なお、conditionが真となる条件をif条件とよび、conditionが偽となる条件をelse条件と呼ぶ場合もある。
本実施例のALUは、条件文中にif文として示される第1の条件が存在し、else文として示される第2の条件が存在しない場合において、else条件の成立時に実行する代入処理を、この条件文の実行に先立って行われている直近の代入処理に設定する。ここで直近の代入処理はa=cである。コンパイル部30は、if条件が成立する場合にはa=bの代入処理をALUに実行させ、if条件が成立しない場合にはa=cの代入処理を実行させるように、プログラムをDFGに変換する。このようにコンパイル部30は、図5(a)に示す条件文を処理して、条件文の実行時の変数aの代入値を定めることができる。なお、else文が存在する場合であっても、else条件の成立時に変数aへの代入処理が存在しなければ、変数aに関してみるとelse条件が存在しない状況と同じである。
図5(b)は、実施例のリコンフィギュラブル回路におけるALUが処理可能なプログラム記述における条件文の別の例を示す。この条件文では、if文およびelse文で示される2つの条件が存在しているが、変数aに関する代入処理は、if条件の成立時には規定されておらず、else条件の成立時においてのみ規定されている。本実施例のALUは、条件文中にif文およびelse文で定められる2つの条件が存在し、一方の条件成立時に実行する代入処理が規定されていない場合であっても、当該一方の条件成立時に実行する代入処理を、この条件文の実行に先立って行われている直近の代入処理に設定する。具体的に、図5(b)の例では、if条件の成立時に実行する変数aへの代入処理は規定されておらず、else条件の成立時に実行する変数aへの代入処理のみが存在しており、また直近の代入処理はa=bである。コンパイル部30は、if条件が成立する場合にはa=bの代入処理をALUに実行させ、if条件が成立しない場合にはa=cの代入処理を実行させるように、プログラムをDFGに変換する。このようにコンパイル部30は、図5(b)に示す条件文を処理して、条件文の実行時の変数aの代入値を定めることができる。
図5(a)および図5(b)に示す条件文において、条件文に記述された処理のみからは、if条件ないしはelse条件の一方の条件が成立したときの変数aへの代入処理しか実行することができない。変数aを設定するためのALUの処理を考えると、図5(a)に示す条件文ではif条件が成立しなかったとき、図5(b)に示す条件文ではif条件が成立したときのALUへの代入値を、プログラム記述中の当該条件文以外の他の処理から設定する必要がある。コンパイル部30は、プログラム36中の条件文を解析して、DFGを作成する。
図6(a)は、実施例のリコンフィギュラブル回路12におけるALUが処理可能なプログラム記述における条件文の一例を示す。この条件文には、if文で示される1つの条件のみが含まれ、else文で示される条件が存在しない。また、図5(a)と異なり、この条件文の実行に先立って行われている代入処理も存在しない。したがって、if条件が成立しない場合は、変数aは、変化せずに、直近すなわち最新の値を維持することになる。なお最新の値とは、変数aについて当該条件文の処理の直近の処理で設定された値である。
図6(b)は、実施例のリコンフィギュラブル回路におけるALUが処理可能なプログラム記述における条件文の別の例を示す。この条件文では、if文およびelse文で示される2つの条件が存在しているが、変数aに関する代入処理は、if条件の成立時に実行されず、else条件の成立時にのみ実行される。また、図5(b)と異なり、この条件文の実行に先立って行われている代入処理も存在しない。したがって、else条件が成立しない場合、すなわちif条件が成立した場合には、変数aは、変化せずに、直近すなわち最新の値を維持することになる。
図6(a)および図6(b)に示す条件文において、条件文に記述された処理のみからは、if条件ないしはelse条件の一方の条件が成立したときの変数aへの代入処理しか実行することができない。変数aを設定するためのALUの処理を考えると、図5(a)に示す条件文ではif条件が成立しなかったとき、図5(b)に示す条件文ではif条件が成立したときのALUへの代入値を、プログラム記述中の当該条件文以外の他の処理から設定する必要がある。図6(a)および図6(b)に示す条件文に対しては、それに先立って実行される他の代入処理が存在しないため、変数aとして設定されている過去の最新の値を設定する。これにより、変数aの値を変更せずに、引き継ぐことが可能となる。
図7は、実施例のコンパイル部30による条件文の処理方法を示す。実施例のコンパイル部30は、図5および図6に示す条件文を解析して、条件分岐処理をリコンフィギュラブル回路12に割り当てるDFGを作成する。なお既述のように、DFGは、リコンフィギュラブル回路12における演算間の実行順序の依存関係を表現する。以下では、1つの変数、具体的には変数aについての条件文の処理方法を示す。なお、コンパイル部30は、条件文の処理を変数ごとに実行する。
コンパイル部30は、プログラム中に含まれる条件文中のif文で示される条件を検出して、if文中に含まれる変数aについての代入処理を探索する(S10)。具体的には、if文において、if条件が成立した場合に実行する変数aへの代入処理を探索する。代入文が存在している場合(S10のY)、その代入処理を、if条件成立時の代入処理として決定する(S12)。図5(a)および図6(a)に示す条件文では、if文中に含まれるa=bを、if条件成立時の代入処理として決定する。続いて、条件文中にelse文で示される条件が含まれているか否かを検出する(S14)。else条件が含まれており(S14のY)、且つelse文中に変数aについての代入処理が含まれている場合は(S16のY)、その代入処理を、else条件成立時の代入処理として決定する(S20)。これは、図1に示す条件文のコンパイル処理に相当し、条件文に含まれるif文とelse文とに基づいて、変数aへの代入処理が定められる。
一方、図5(a)および図6(a)に示すようにelse条件が検出されない場合(S14のN)、またelse文が存在していてもelse文中に変数aの代入処理が存在しない場合(S16のN)、対象とする条件文に先立って処理される変数aへの代入処理を探索する(S18)。条件文の実行以前に実行される変数aへの代入処理が存在する場合(S18のY)、その代入処理を、if条件が成立しない場合の代入処理として決定する(S20)。図5(a)に示す条件文では、条件文に先立って実行されているa=cを、if条件が成立しない場合の代入処理として決定する。ここでは、S12においてif条件成立時の代入処理を決定し、S20においてif条件が成立しないときの代入処理を決定して、これらの代入処理を論理回路の入力に割り当てる。なお、ALUには、条件に応じて2つの入力から出力を選択するスイッチとしての機能を割り当てる。
一方、条件文に先立つ変数aへの代入処理が探索されなかった場合(S18のN)、変数aの値は変化しない。したがって、この場合はメモリ部27に記憶されている最新の変数aの値を代入値として決定する(S22)。図6(a)に示す条件文では、記憶部34の所定のアドレスに記憶された最新の変数aの値を、if条件が成立しない場合の代入値として決定する。ここでは、S12においてif条件成立時の代入処理を決定し、S22においてif条件が成立しないときの代入値を決定して、代入処理および代入値をALUの入力に割り当てる。なお、ALUには、条件に応じて2つの入力から出力を選択するスイッチとしての機能を割り当てる。以上により、if文中に代入処理が存在する場合におけるALUへの入力および機能の割当処理が実行される。
一方、if文中に代入処理が探索されなかった場合(S10のN)、コンパイル部30は、プログラム中に含まれる条件文中のelse文で示される条件を検出して、else文中に含まれる変数aについての代入処理を探索する(S30)。具体的には、else文において、else条件が成立した場合に実行する変数aへの代入処理を探索する。図5(b)および図6(b)に示す条件文では、a=cを、else条件が成立したときの代入処理として決定する。なお、else文中に変数aについての代入処理が存在しない場合には、対象とする条件文において変数aについての代入処理が実行されないことになる。
続いて、コンパイル部30は、if条件の成立時に実行する代入処理を探索する。具体的には、コンパイル部30は、対象とする条件文の実行以前に実行される変数aへの代入処理を探索する(S32)。条件文に先立って変数aへの代入処理が存在する場合(S32のY)、その代入処理を、if条件が成立した場合の代入処理として決定する(S34)。図5(b)に示す条件文では、条件文に先立って実行されているa=bを、if条件が成立した場合の代入処理として決定する。ここでは、S30においてelse条件成立時の代入処理を決定し、S34においてif条件が成立したときの代入処理を決定して、これらの代入処理を論理回路の入力に割り当てる。なお、ALUには、条件に応じて2つの入力から出力を選択するスイッチとしての機能を割り当てる。
一方、条件文に先立つ変数aへの代入処理が存在しない場合(S32のN)、変数aの値は変化しない。したがって、この場合はメモリ部27に記憶されている最新の変数aの値を代入値として決定する(S36)。図6(b)に示す条件文では、記憶部34の所定のアドレスに記憶された最新の変数aの値を、if条件が成立した場合の代入値として決定する。ここでは、S30においてelse条件成立時の代入処理を決定し、S36においてif条件が成立したときの代入値を決定して、代入処理および代入値をALUの入力に割り当てる。なお、ALUには、条件に応じて2つの入力から出力を選択するスイッチとしての機能を割り当てる。以上により、if文中に代入処理が存在しない場合におけるALUへの入力および機能の割当処理が実行される。
本実施例のコンパイル部30は、以上のように条件文を処理することができる。これらの処理により、ifまたはelseの片側の条件文がなかったり、片側の条件文中に関係する変数への代入がなくても、それに先行する関係する変数への代入文を利用して、回路を生成できる。また、マッピング用のプログラムを作成するプログラマは、if文およびelse文の双方に代入処理を記述しなくてもよくなり、プログラミングの作業負担を軽減できる。
図8は、図5(a)および図5(b)に示すプログラム記述を実行するALUに割り当てられる入力および機能を示す。既述のように、ALUは2つの入力端子と1つの出力端子を有している。第1の入力端子には、第1の代入値bが入力され、第2の入力端子には、第2の代入値cが入力される。代入値bおよび代入値cは、代入処理により定められる値である。具体的に、代入値bは、if条件成立時に実行される代入処理により定められる値であり、代入値cは、対象となる条件文の条件判定に先立って実行される代入処理により定められる値である。ALUは、if条件が成立したときに変数aに代入値bを代入し、if条件が成立しないときに変数aに代入値cを代入して、代入値を出力する機能を割り当てられる。これらの入力および機能は、条件文中にif条件のみが存在し、else条件が存在しない場合に割り当てられる。なお、条件文中にif条件およびelse条件の双方が存在する場合であって、いずれか一方の条件成立時に変数aへの代入処理が存在しない場合にも、これらの入力および機能が割り当てられる。なお、if条件が成立しないときとは、図5(b)に示す条件文においてはelse条件が成立するときに相当する。
図9(a)は、図6(a)に示すプログラム記述を実行するALUに割り当てられる入力および機能を示す。第1の入力端子には、第1の代入値bが入力され、第2の入力端子には、第2の代入値が入力される。第1の代入値bは代入処理により定められる値であり、第2の代入値は、記憶部34の所定のアドレスに記憶されている変数aの最新の値である。ALUは、if条件が成立したときに変数aに代入値bを代入し、if条件が成立しないときに変数aに最新の変数値を代入して、代入値を出力する機能を割り当てられる。これらの入力および機能は、条件文中にif条件のみが存在し、else条件が存在しない場合であって、且つ条件文の実行以前に実行される変数aへの代入処理が存在しない場合に割り当てられる。なお、条件文中にif条件およびelse条件の双方が存在する場合であって、else条件成立時に変数aへの代入処理が存在しておらず、条件文の実行以前に実行される変数aへの代入処理が存在しない場合にも、これらの入力および機能が割り当てられる。ALUが、第2の入力端子への入力を出力して選択する場合は、変数aの値は、以前と同じ値を維持する。
図9(b)は、図6(b)に示すプログラム記述を実行するALUに割り当てられる入力および機能を示す。第1の入力端子には、第1の代入値が入力され、第2の入力端子には、第2の代入値cが入力される。第1の代入値は、記憶部34の所定のアドレスに記憶されている変数aの最新の値であり、第2の代入値cは代入処理により定められる値である。ALUは、if条件が成立したときに変数aに最新の変数値を代入し、if条件が成立しないときに変数aに代入値cを代入して、代入値を出力する機能を割り当てられる。これらの入力および機能は、条件文中にif条件およびelse条件の双方が存在する場合であって、if条件成立時に変数aへの代入処理が存在しておらず、条件文の実行以前に実行される変数aへの代入処理が存在しない場合に割り当てられる。ALUが、第1の入力端子への入力を出力して選択する場合は、変数aの値は、以前と同じ値を維持する。これらの処理により、ifまたはelseの片側の条件文がなかったり、片側の条件文中に関係する変数への代入がない場合で、且つ、それに先行する関係する変数への代入文もない場合でも、回路を生成できる。また、マッピング用のプログラムを作成するプログラマは、if文およびelse文の双方に代入処理を記述したり、先行する代入文を気にする必要がなくなり、プログラミングの作業負担を軽減できる。
図9(a)および図9(b)において、メモリ部27に供給されるWEは、メモリ部27への書込(ライト)イネーブル信号を表す。図9(a)において、conditionが真のとき、メモリ部27に格納された変数aの値が代入値bに変化するが、偽のときは、メモリ部27の値は変化しない。同様に、図9(b)において、conditionが偽のとき、メモリ部27に格納された変数aの値が代入値cに変化するが、真のときは、メモリ部27の値は変化しない。
図10は、メモリ部27へのデータ書込を制御する回路を示す。ここでは、図9(a)に示すALUへの機能割当の場合を示すが、図9(b)に示す機能割当の場合も同様である。この制御回路は各種ゲート回路により構成されて、制御部18とメモリ部27の間に配置され、WE信号をメモリ部27に供給する。この制御回路は、ALUからの出力によりメモリ部27の内容が変化しない場合に、WE信号をオフにして、メモリ部27への書込を禁止することを目的とする。メモリ部27への同一値の書込を禁止することで、データ書込に伴う電力消費を抑えることができる。以下において、各信号のオンは論理値1を、オフは論理値0を示す。各信号は制御部18により供給されてもよいが、コマンドメモリから供給されてもよい。コマンドメモリから各信号が供給される場合は、制御回路は、設定部14とメモリ部27の間に配置されることになる。
WE_control信号は、メモリ部27が書込可能な状態にあることを示す信号である。具体的には、WE_control信号がオンであれば、ALUからメモリ部27に出力されるタイミングであることを示し、オフであればメモリ部27の書込を禁止する状態にあることを示す。WE_disable信号は、メモリ部27に、代入処理を実行するALUが接続されて、かつ、対象となるメモリ部27の出力がそのまま同一アドレスに入力される可能性がある場合にオンとなる。input_sel信号は、対象となるメモリ部27の出力がそのまま同一アドレスに入力されるパスが、conditionの真側、偽側のいずれに接続されているかを示す信号である。なお、conditionが真側とは、図中の左側に示される代入値bが入力される入力端子側であり、偽側とは、右側に示されるメモリ部27からの変数値が入力される入力端子側である。図10においては、input_sel信号がオンであれば真側、オフであれば偽側に接続されている。
このALUでは、conditionが偽であれば、対象のメモリ部27の出力がそのまま同一アドレスに入力されるパスが選択される。このとき、input_sel信号はオフ、WE_disable信号はオンとなるため、WE信号はオフとなる。したがって、メモリ部27の書き換えは行われず、低消費電力化を実現できる。このように、制御回路は、ALUがメモリ部27からの変数値を出力する場合に、その出力のメモリ部27への書込みを禁止する。これにより、データ更新に伴う消費電力を軽減することが可能となる。特に、集積回路装置26がバッテリ駆動の場合には、バッテリの消費量を節約する効果がある。
図11は、図10に示す制御回路を簡略化した構成を示す。メモリ部27の内容が変わらない場合は、メモリ部27への書込を行わないため、結果的にメモリ部27からの出力ラインは不要となり、さらなる低消費電力化および回路の小型化が可能となる。
以上、本発明を実施例をもとに説明した。実施例は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
例えば、リコンフィギュラブル回路12におけるALUの配列は、縦方向にのみ接続を許した多段配列に限らず、横方向の接続も許した、メッシュ状の配列であってもよい。また、上記の説明では、段を飛ばして論理回路を接続する結線は設けられていないが、このような段を飛ばす接続結線を設ける構成としてもよい。
また、図2では、処理装置10が1つのリコンフィギュラブル回路12を有する場合を示しているが、複数のリコンフィギュラブル回路12を有していてもよい。また、実施例ではリコンフィギュラブル回路について説明したが、C言語や回路記述言語などにより固定回路を生成するツールについても、本発明のプログラム処理方法を適用できることはいうまでもない。
すなわち、本発明は、リコンフィギュラブル回路の動的な回路コンフィギュレーションに限らず、他の回路、例えば固定ハードウェアの回路設計に利用することも可能である。回路実装後の固定ハードウェアにおいては、回路を再生成するなどの処理は行わないが、素子形成の前段階となる回路設計を行なう段階に本手法を利用することで、回路生成用のプログラムを効率的に処理して、回路素子の代入処理機能を決定することで、所期の固定回路を生成することが可能となる。固定回路の場合であっても、ifまたはelseの片側の条件文がなかったり、片側の条件文中に関係する変数への代入がない場合で、且つ、それに先行する関係する変数への代入文もない場合でも、回路素子の機能を決定できる。また、回路生成用のプログラムを作成するプログラマは、if文およびelse文の双方に代入処理を記述したり、先行する代入文を気にする必要がなくなり、プログラミングの作業負担を軽減できる。
今回開示された実施例はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
10・・・処理装置、12・・・リコンフィギュラブル回路、14・・・設定部、18・・・制御部、22・・・出力回路、26・・・集積回路装置、27・・・メモリ部、29・・・経路部、30・・・コンパイル部、32・・・設定データ生成部、34・・・記憶部、36・・・プログラム、38・・・データフローグラフ、40・・・設定データ、42・・・ターゲット回路、52・・・接続部、53・・・ALU列。