(57)【特許請求の範囲】
【請求項１】
複数の論理回路からなり、第１の論理回路からの演算出力が第２の論理回路に入力されるよう構成された演算処理回路であって、
前記第２の論理回路が、
入力されたデータに対して演算を行う演算回路と、
前記演算回路から出力された演算出力、又は第１の論理回路からの演算出力のいずれかを選択して出力する選択部を備え、
前記選択部は、
前記第２の論理回路が単精度演算を実行するときは、前記演算回路から出力された演算出力を選択し、
前記第２の論理回路が倍長演算を実行するときは、前記第１の論理回路からの演算出力を選択し、
前記複数の論理回路が、
段方向と列方向にマトリックス状に構成されると共に、単精度演算又は倍長演算の下位桁の演算を実行する第１タイプの論理回路と、
前記所定段の次段に配置され、単精度演算又は倍長演算の上位桁の演算を実行する第２タイプの論理回路と、を含み、
論理回路の選択部の出力が、次段の一部の論理回路のみに入力されるように構成されることを特徴とする演算処理回路。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＡＬＵ(Arithmetic Logic Unit)アレイ等を用いた演算処理回路に関する。特に単精度演算及び倍長演算の両方が可能な演算処理回路に関する。
【背景技術】
【０００２】
出願人は、ＡＬＵ(Arithmetic Logic Unit)と呼ばれる基本演算機能を複数持つ多機能素子を多段に並べたＡＬＵアレイを用いたリコンフィギュラブル回路の検討を行ってきた（例えば、特許文献１、非特許文献１）。このリコンフィギュラブル回路では、ＡＬＵの機能を制御する命令セット及びＡＬＵ間の接続先を制御する接続データセットからなる構成情報が各ＡＬＵに設定されることにより、所望の演算処理回路として機能する。
【０００３】
ＡＬＵアレイによるリコンフィギュラブル回路では、ＦＰＧＡ（Ｆｉｅｌｄ Ｐｒｏｇｒａｍｍａｂｌｅ Ｇａｔｅ Ａｒｒａｙ）によるリコンフィギュラブル回路よりも実装サイズを小型化できる上、回路の再構成が高速に実行できるという利点がある。このため、各種の処理や規格に対応した演算処理回路を１つのＬＳＩで実現できる。また、新規格にもソフトウエアのアップデートにより即座に対応可能である。
【特許文献１】特開２００５−１８２６５４号公報
【非特許文献１】: 「情報家電向け小型リコンフィギュラブルデバイス」、三洋電機技報 VOL.37, No.2, MARCH 2006 通巻第77号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記のリコンフィギュラブル回路により、様々な演算処理回路を実現する場合、処理内容によっては、リコンフィギュラブル回路のＡＬＵが可能な演算ビット数を超える、多ビットの演算が必要になる場合がある。例えば、リコンフィギュラブル回路のＡＬＵの演算ビット幅が１６ビットの場合に３２ビット演算を実行させる必要が生じることがある。いわゆる倍長演算が必要な場合がある。
【０００５】
一方、処理内容によっては、リコンフィギュラブル回路のＡＬＵが可能な演算ビット数での演算でも済む場合もある。即ち単精度演算でも足る場合もある。例えば、リコンフィギュラブル回路のＡＬＵの演算ビット幅が１６ビットの場合に１６ビット演算で済む場合もある。  
【０００６】
このように、リコンフィギュラブル回路では、倍長演算と単精度演算の両方に対応できることが望まれている。
【０００７】
本発明は上記の事情に鑑み、単精度演算及び倍長演算の両方が可能な演算処理回路を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明のある態様の演算処理回路は、複数の論理回路からなり、第１の論理回路からの演算出力が第２の論理回路に入力されるよう構成された演算処理回路であって、前記第２の論理回路が、入力されたデータに対して演算を行う演算回路と、前記演算回路から出力された演算出力、又は第１の論理回路からの演算出力のいずれかを選択して出力する選択部を備えることを特徴とする。なお、ここで演算とは、加算、減算の他、シフト演算などであってもよい。    
【０００９】
前記選択部は、前記第２の論理回路が単精度演算を実行するときは、前記演算回路から出力された演算出力を選択し、前記第２の論理回路が倍長演算を実行するときは、前記第１の論理回路からの演算出力を選択するものであっても良い。
【００１０】
ここで、倍長演算とは、いわゆる２倍長演算の他、ｎ倍長演算（ｎ：自然数、ｎ＞３）も含むものである。
【００１１】
前記複数の論理回路は、例えば、段方向と列方向にマトリックス状に構成されても良い。
【００１２】
この場合、前記の第１、第２の論理回路は、それぞれが連続する２段に配置される論理回路であっても良い。また、論理回路の選択部の出力が、次段の一部の論理回路のみに入力されるように構成されていても良い。
【００１３】
また、前記複数の論理回路は、所定段に配置され、単精度演算又は倍長演算の下位桁の演算を実行する第１タイプの論理回路と、前記所定段の次段に配置され、単精度演算又は倍長演算の上位桁の演算を実行する第２タイプの論理回路と、を少なくとも含むものであっても良い。
【００１４】
なお、上記「複数の論理回路」に関し、第１の論理回路と第２の論理回路は同じ論理回路であっても良い。したがって、第１の論理回路からの演算出力が、再び第１の論理回路の入力として用いられるような演算処理回路も本発明の範囲に含まれる。
【００１５】
本発明の他の態様の演算処理回路は、段方向に構成され、所定時間ごとに外部から供給される設定データに従って動作する複数の論理回路を備えた演算処理回路であって、前記論理回路は、入力されたデータに対して演算を行う演算回路と、前記演算回路から出力された演算出力を前記所定時間保持する状態保持回路と、前記演算回路から出力された演算出力、又は前記状態保持回路に保持されていた演算出力のいずれかを選択する選択部を備え、更に該演算処理回路は、所定の論理回路の選択部の出力を、前記複数の論理回路を構成する一部の論理回路に入力させる接続部を備えることを特徴とする。
【００１６】
本発明の他の態様の演算処理回路は、所定時間ごとに外部から供給される設定データに従って動作する論理回路を備えた演算処理回路であって、前記論理回路は、入力されたデータに対して演算を行う演算回路と、前記演算回路から出力された演算出力を前記所定時間保持する状態保持回路と、前記演算回路から出力された演算出力、又は前記状態保持回路に保持されていた演算出力のいずれかを選択する選択部を備え、更に該演算処理回路は、該論理回路からの選択部の出力を、該論理回路に入力させる接続部と、を備えたことを特徴とする。
【発明の効果】
【００１７】
この発明によれば、単精度演算及び倍長演算の両方が可能な演算処理回路を提供することができる。また、いわゆる接続制限のある演算処理回路において、倍長演算を効率的に実行することができる。
【発明を実施するための最良の形態】
【００１８】
＜第１の実施形態＞
図１は、実施の形態に係る処理装置１０の構成、並びに設定データ生成装置３０の構成を示す図である。
【００１９】
(処理装置１０の構成)
処理装置１０は、１チップとして構成される集積回路からなり、リコンフィギュラブル回路１２、設定部１４、制御部１８を備える。
【００２０】
リコンフィギュラブル回路１２は、機能の変更が可能なＡＬＵによる論理回路を複数備えた構造を有する。このようなリコンフィギュラブル回路１２は、後述する設定部１４から供給される設定データに従って動作する演算回路として機能する。即ちリコンフィギュラブル回路１２は、外部からの入力データに対して、前記設定データに従った演算を行い、演算結果を出力する。このリコンフィギュラブル回路１２の構成については後で詳しく説明する。なお、リコンフィギュラブル回路１２は、本願発明の演算処理回路の一例に相当するものである。
【００２１】
設定部１４は、リコンフィギュラブル回路１２に所望の演算回路を構成するための設定データを供給する。設定部１４から設定データを供給することにより、リコンフィギュラブル回路１２は所望の演算回路として構成される。この設定データは後述する設定データ生成装置３０で生成される。
【００２２】
制御部１８は、処理装置１０の各部、即ち、リコンフィギュラブル回路１２、設定部１４を制御する。
【００２３】
(設定データ生成装置３０の構成)
設定データ生成装置３０は、リコンフィギュラブル回路１２で実現されるべき処理の動作を設定したプログラムを解析し、リコンフィギュラブル回路１２にマッピングするための設定データを生成する。この設定データは、リコンフィギュラブル回路１２における論理回路の機能や論理回路間の接続関係を定める。設定データ生成装置３０により生成された設定データは、設定部１４を介してリコンフィギュラブル回路１２へ供給される。
【００２４】
（リコンフィギュラブル回路１２の構成）
図２は、リコンフィギュラブル回路１２の構成の一部を示すものである。
【００２５】
図２のように、リコンフィギュラブル回路１２では、演算器であるＡＬＵ、選択器であるＭＵＸ、Ｄ型フリップフロップであるＤＦＦ１及びＤＦＦ２からなる論理回路（同図ではＬ１１、…、Ｌ４４として示している）がアレイ状に配列されてなる。
各論理回路内のＡＬＵは、設定データに従って演算機能が設定される。例えば、設定データに従って、あるときは加算器、あるときは減算器、論理和演算器、論理積演算器、ビットシフト演算器、…、などとして機能する。
【００２６】
各論理回路において、ＡＬＵでの演算結果は、ＭＵＸへ出力される。ＭＵＸに出力されたデータは、ＤＦＦ１を介して次段の論理回路のＡＬＵに入力される。また、各ＡＬＵの演算結果は、ＤＦＦ２を介して、同列次段の論理回路内のＭＵＸへも出力される（以後、このようなＤＦＦ２を介して次段の論理回路へ出力されるデータのことを「遅延出力データ」と呼ぶ）。例えば、論理回路Ｌ１１のＡＬＵによる演算結果は、Ｌ１１のＭＵＸだけでなく、Ｌ１１のＤＦＦ２を介して論理回路Ｌ１２のＭＵＸへも出力される。ＭＵＸは、同じ論理回路内にあるＡＬＵからの出力データと、前段の論理回路内にあるＡＬＵからの出力データを選択して出力する。例えば、論理回路Ｌ１２のＭＵＸは、Ｌ１２内のＡＬＵからの出力と、Ｌ１１内のＡＬＵからの出力を選択して出力する。
【００２７】
尚、リコンフィギュラブル回路１２では、各論理回路のＤＦＦ１からの出力データは、同列次段、及び左右列次段の３つの論理回路のみに入力される。即ち、回路規模の小型化を図るために論理回路からの出力の接続先を制限した、いわゆる「接続制限」を有する構成となっている。また、遅延出力は次段同列の論理回路に入力されるよう構成される。
【００２８】
なお、図２は、リコンフィギュラブル回路１２の構成の説明を簡略化するために、１６個の論理回路からなる例を示したが、数十、数百、あるいはそれ以上の多数の論理回路を備えるものも本発明の権利範囲であることは、明らかである。同様に、１６個未満の論理回路からなる論理回路も本発明の権利範囲である。
【００２９】
（リコンフィギュラブル回路１２を用いた倍長演算の例）
図３を参照して、リコンフィギュラブル回路１２を用いた倍長演算の実行例を説明する。ここでは、リコンフィギュラブル回路１２の各論理回路のＡＬＵの演算ビット幅が16ビットであると仮定し、32ビット変数同士の加算A+Bを行う場合を説明する。いま、32ビット変数Ａの上位16ビットをAH、下位16ビットをAL、32ビット変数Ｂの上位16ビットをBH、下位16ビットをBLとしたとき、A+Bの演算は、下位ビット同士の加算AL+BLと、上位ビット同士の加算AH+BHとに分けて行われる。ここでは、論理回路Ｌ１１内のＡＬＵから出力されるデータをAL、論理回路Ｌ１２内のＡＬＵから出力されるデータをAH、論理回路Ｌ２１内のＡＬＵから出力されるデータをBL、論理回路Ｌ２２内のＡＬＵから出力されるデータをBHとする。
【００３０】
まず、下位ビットの演算を説明する。論理回路Ｌ１１内のＡＬＵから出力されるALは、Ｌ１１内のＤＦＦ２を介して論理回路Ｌ１２内のＭＵＸへ入力される。このＭＵＸでは、このALが選択されてＬ１２内のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１３内のＡＬＵへ出力される。
【００３１】
一方、論理回路Ｌ２１内のＡＬＵから出力されるBLは、Ｌ２１内のＤＦＦ２を介して論理回路Ｌ２２内のＭＵＸへ入力される。このＭＵＸでは、このBLが選択されてＬ２２内のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、論理回路Ｌ１３内のＡＬＵへ出力される。このＡＬＵではALとBLの加算が行なわれる。
【００３２】
上記のような構成により、論理回路Ｌ１３内のＡＬＵを用いて、２段上に配置された論理回路Ｌ１１、及びＬ２１のＡＬＵからの出力に対する加算処理を行うことができる。
即ち、加算演算を行うＡＬＵが属する論理回路Ｌ１３の同列前段にある論理回路Ｌ１２のＭＵＸが、同じ論理回路Ｌ１２のＡＬＵの出力ではなく、その同列前段にある論理回路Ｌ１１のＡＬＵの出力を選択する。また、論理回路Ｌ１３の右上段にある論理回路Ｌ２２のＭＵＸが、同じ論理回路Ｌ２２のＡＬＵの出力ではなく、その同列前段にある論理回路Ｌ２１のＡＬＵの出力を選択する。このようにして、２段上に配置された論理回路Ｌ１１、及びＬ２１の出力に対する加算処理を行うことができるのである。
【００３３】
次に、上位ビットの演算を説明する。論理回路Ｌ１２内のＡＬＵから出力されるAHは、Ｌ１２内のＤＦＦ２を介して論理回路Ｌ１３のＭＵＸへ入力される。このＭＵＸでは、このAHが選択されてＬ１３内のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、論理回路Ｌ１４内のＡＬＵへ出力される。
【００３４】
一方、論理回路Ｌ２２内のＡＬＵから出力されるBHはＬ２２内のＤＦＦ２を介して論理回路Ｌ２３のＭＵＸへ入力される。このＭＵＸでは、このBHが選択されてＬ２３内のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、論理回路Ｌ１４内のＡＬＵへ出力される。そして、このＡＬＵではAHとBHの加算が行なわれる。
【００３５】
上記のような構成により、論理回路Ｌ１４中のＡＬＵを用いて、２段上に配置された論理回路Ｌ１２、及びＬ２２のＡＬＵからの出力に対する加算処理を行うことができる。即ち、加算演算を行うＡＬＵが割り当てられる論理回路Ｌ１４の同列前段にある論理回路Ｌ１３のＭＵＸが、同じ論理回路Ｌ１３のＡＬＵの出力ではなく、その同列前段にある論理回路Ｌ１２のＡＬＵの出力を選択するように構成することで、このような加算処理を行うことができる。
【００３６】
以上のようにして、リコンフィギュラブル回路１２による倍長演算が実行できる。
【００３７】
一方、単精度演算を行う場合、即ち、リコンフィギュラブル回路１２の各論理回路のＡＬＵの演算ビット幅と変数のビット数が等しい場合の演算を行う場合、ＭＵＸは前段の論理回路中のＤＦＦ２からの入力データではなく、同じ論理回中の演算器からの入力データを選択するようにすればよい。
【００３８】
図４を参照して、リコンフィギュラブル回路１２を用いて単精度演算を行う例を説明する。図３での例と同様、リコンフィギュラブル回路１２の各論理回路のＡＬＵの演算ビット幅が16ビットであると仮定し、16ビット変数同士の加算A+Bを行う場合を説明する。いま、論理回路Ｌ１１内のＡＬＵから出力されるデータをA、論理回路Ｌ１２内のＡＬＵから出力されるデータをBとする。
【００３９】
論理回路Ｌ１１内のＭＵＸは、論理回路Ｌ１１内のＡＬＵから出力されるAを選択して、Ｌ１１内のＤＦＦ１に出力する。そして、このＤＦＦ１を介して、論理回路Ｌ１２内のＡＬＵへ出力される。
【００４０】
一方、論理回路Ｌ２１内のＭＵＸは、論理回路Ｌ２１内のＡＬＵから出力されるBを選択して、Ｌ２１内のＤＦＦ１に出力する。そして、このＤＦＦ１を介して、論理回路Ｌ１２内のＡＬＵへ出力される。そして、このＡＬＵではAとBの加算が行なわれる。
【００４１】
上記のようにして、リコンフィギュラブル回路１２では単精度演算も行うことができる。
【００４２】
このように、リコンフィギュラブル回路１２では、選択器ＭＵＸが、単精度演算時は同じ論理回路内のＡＬＵからの出力を選択し、倍長演算時は前段同列の論理回路のＡＬＵからの出力を選択する、といったように選択を切り替えることで、単精度と倍精度の両方の演算が実現できる。
【００４３】
また、リコンフィギュラブル回路１２によれば、いわゆる「接続制限」を有するリコンフィギュラブル回路において、図３のように単精度演算で処理可能である演算の場合、図２のように縦方向に２倍した演算配置にすることによって、同じ接続制限下で倍長演算が実現できるので、倍長演算の効率化を実現できる。
【００４４】
なお、図２〜４では図示していないが、下位ビットの加算を行う論理回路Ｌ１３内のＡＬＵでのキャリーは、上位ビットの加算を行う論理回路Ｌ１４内のＡＬＵに入力される。従って、倍長演算を行う場合は、論理回路Ｌ１４内のＡＬＵでは、ＡＨとＢＨに加えて、Ｌ１３内のＡＬＵのキャリーを加算する。これにより、倍長の加算処理が正しく実行することができる。
【００４５】
（演算器の構成）
リコンフィギュラブル回路１２の各ＡＬＵ内部の構成について、以下に説明する。
図５は、リコンフィギュラブル回路１２の各論理回路内にあるＡＬＵの内部構成を示したものである。ここでは、ＡＬＵに加算機能を割り当てた場合を説明する。この場合のＡＬＵの機能は、等価的には選択器であるＭＵＸ３と加算器a1により記述できる。まず、ＭＵＸ３には下位からのキャリー入力と０（ゼロ）が入力され、これらを選択して加算器a1へ出力する。ＡＬＵが最下位ビットの加算を行うものであれば、ＭＵＸ３は０を選択して出力する。ＡＬＵが最下位ビットの加算を行うものでない場合は、ＭＵＸ３は下位からのキャリー入力を選択して出力する。加算器a1には、入力１、２及びＭＵＸ３の出力が入力される。そして、これらの加算結果、及びキャリー出力が出力される。このような演算器をリコンフィギュラブル回路１２の論理回路中のＡＬＵとして用いることで、上述した倍長の加算演算が可能となる。
【００４６】
なお、リコンフィギュラブル回路１２に演算を割り当てる際、例えばリコンフィギュラブル回路１２の奇数段では下位ビットの演算又は単精度演算を行い、偶数段では上位ビットの演算又は単精度演算を行う、というように割り当てる場合は、奇数段においてはキャリー入力をゼロに固定できるため選択器ＭＵＸm1が省略できる。このようにＡＬＵを下位演算用、上位演算用というように割り当てを限定することで、各論理回路内のＡＬＵの回路規模の削減が可能となる。
【００４７】
＜第２の実施形態＞
（リコンフィギュラブル回路１２Ａの構成）
図６のリコンフィギュラブル回路１２Ａでも倍長演算と単精度演算の両方が可能である。このリコンフィギュラブル回路１２Ａは、図２のリコンフィギュラブル回路１２のように４段の構成とする代わりに１段構成でループバックさせる構成である。リコンフィギュラブル回路１２Ａには、所定時間ごとに設定部１４（図１参照）から設定データが供給される。そして、リコンフィギュラブル回路１２Ａを構成する各論理回路は、この設定部１４から供給される設定データに従って動作する。このようなリコンフィギュラブル回路１２Ａを用いても、倍長の加算（Ａ＋Ｂ）を実行することができる。以下、その手順を説明する。
【００４８】
まず、第１のタイミングにおいて、Ｌ１のＡＬＵからはＡＬが、Ｌ２のＡＬＵからはＢＬが出力される。Ｌ１のＡＬＵから出力されるＡＬは、Ｌ１のＤＦＦ２へ出力される。Ｌ２のＡＬＵから出力されるＢＬは、Ｌ２のＤＦＦ２へ出力される。Ｌ１、Ｌ２それぞれのＤＦＦ２は、それぞれＡＬ、ＢＬを保持（一時的に格納）する。即ち、第１のタイミングでは、Ｌ１、Ｌ２のそれぞれは、図３でいうところのＬ１１、Ｌ２１と同じように機能する。
【００４９】
次に第２のタイミングでは、Ｌ１のＡＬＵからＡＨが、Ｌ２のＡＬＵからＢＨが出力される。このとき、Ｌ１のＤＦＦ２で格納されていたＡＬはＬ１のＭＵＸへ出力され、Ｌ２のＤＦＦ２で格納されていたＢＬはＬ２のＭＵＸへ出力される。Ｌ１のＡＬＵからは、ＡＨがＬ１のＭＵＸとＤＦＦ２の両方へ出力される。Ｌ１のＭＵＸは、ＡＨとＡＬのうち、ＡＬの方を選択してＤＦＦ１へ出力するよう設定される。同様に、Ｌ２のＡＬＵからは、ＢＨがＬ２のＭＵＸとＤＦＦ２の両方へ出力される。Ｌ２のＭＵＸは、ＢＨとＢＬのうち、ＢＬの方を選択してＤＦＦ１へ出力するよう設定される。従って、Ｌ１のＤＦＦ１にはＡＬが、ＤＦＦ２にはＡＨが格納され、Ｌ２のＤＦＦ１にはＢＬが、ＤＦＦ２にはＢＨが格納されることとなる。即ち、第２のタイミングでは、Ｌ１、Ｌ２のそれぞれは、図３でいうところのＬ１２、Ｌ２２と同じように機能する。
【００５０】
次に第３のタイミングにおいて、Ｌ１のＡＬＵには加算機能が設定される。このとき、Ｌ１のＤＦＦ２で格納されていたＡＨはＬ１のＭＵＸへ出力され、Ｌ２のＤＦＦ２で格納されていたＢＨはＬ２のＭＵＸへ出力される。また、Ｌ１のＤＦＦ１で格納されていたＡＬ、Ｌ２のＤＦＦ１で格納されていたＢＬは、Ｌ１のＡＬＵへ出力される。Ｌ１のＡＬＵからは、ＡＬとＢＬの加算結果がＬ１のＭＵＸとＤＦＦ２の両方へ出力される。Ｌ１のＭＵＸは、上記加算結果と、ＡＨのうち、ＡＨの方を選択してＤＦＦ１へ出力するよう設定される。また、Ｌ２のＭＵＸは、２入力のうち、ＢＨの方を選択してＤＦＦ１へ出力するよう設定される。即ち、第３のタイミングでは、Ｌ１、Ｌ２のそれぞれは、図３でいうところのＬ１３、Ｌ２３と同じように機能する。
【００５１】
次に第４のタイミングにおいて、Ｌ１のＡＬＵには加算機能が設定される。このとき、Ｌ１のＤＦＦ１で格納されていたＡＨ、Ｌ２のＤＦＦ１で格納されていたＢＨは、Ｌ１のＡＬＵへ出力される。Ｌ１のＡＬＵからは、ＡＨとＢＨの加算結果が出力される。即ち、第４のタイミングでは、Ｌ１、Ｌ２のそれぞれは、図３でいうところのＬ１４、Ｌ２４と同じように機能する。
【００５２】
即ち、リコンフィギュラブル回路１２Ａは、１段構成でループバックさせる構成とし、設定部１４が供給する設定データに従ってＡＬＵの機能やＭＵＸの動作を各タイミングで切り換えることで、倍長演算を実現するものである。
【００５３】
＜第３の実施形態＞
（リコンフィギュラブル回路１２Ｂの構成）
図７のようなリコンフィギュラブル回路１２Ｂでは、３倍長演算、倍長演算、並びに単精度演算が実行可能である。このリコンフィギュラブル回路１２Ｂは、演算器であるＡＬＵ、選択器であるＭＵＸ、及び、Ｄ型フリップフロップであるＤＦＦ１、ＤＦＦ２及びＤＦＦ３からなる論理回路（同図ではＬ１１、…、Ｌ１６、Ｌ２１、…Ｌ２６、Ｌ３１、…として示している）がアレイ状に配列されてなる。
【００５４】
各論理回路において、ＡＬＵからの出力は、ＭＵＸ及びＤＦＦ３へ出力される。
ＤＦＦ３からの出力は、同列次段にあるＭＵＸ及びＤＦＦ２へ出力される。例えば、Ｌ１１のＤＦＦ３からの出力は、Ｌ１２のＭＵＸ及びＤＦＦ２へ出力される。
【００５５】
各論理回路のＭＵＸは、同じ論理回路のＡＬＵからの出力、前段の論理回路のＤＦＦ２からの出力、又は前段の論理回路のＤＦＦ３からの出力、の３入力のいずれか１つを選択して同じ論理回路内のＤＦＦ１へ出力する。例えば、Ｌ１３のＭＵＸは、Ｌ１３のＡＬＵ、Ｌ１２のＤＦＦ２、Ｌ１２のＤＦＦ３のいずれか１つを選択して、Ｌ１３のＤＦＦ１へ出力する。ここで、Ｌ１２のＤＦＦ２には、Ｌ１１のＡＬＵからの出力がＬ１１のＤＦＦ３を介して入力されている。従って、Ｌ１３のＭＵＸがＬ１２のＤＦＦ２からの入力を選択することは、Ｌ１１のＡＬＵの出力を選択することに相当する。また、Ｌ１２のＤＦＦ３には、Ｌ１２のＡＬＵからの出力が入力されている。従って、Ｌ１３のＭＵＸがＬ１２のＤＦＦ３からの入力を選択することは、Ｌ１２のＡＬＵの出力を選択することに相当する。したがって、各論理回路のＭＵＸは、同じ論理回路のＡＬＵからの出力、前段のＡＬＵからの出力、又は前々段のＡＬＵからの出力のいずれか１つを選択してＤＦＦ１へ出力することができる。
【００５６】
そして、ＤＦＦ１からの出力は、同列次段、右隣列次段、及び左隣列次段にある３つの論理回路のＡＬＵに入力される。例えば、Ｌ２１のＤＦＦ１の出力はＬ１２のＡＬＵ、Ｌ２２のＡＬＵ、及びＬ３２のＡＬＵへ出力される。
【００５７】
（リコンフィギュラブル回路１２Ｂを用いた３倍長演算の例）
図８を参照して、リコンフィギュラブル回路１２Ｂを用いた、３倍長演算の実行例を説明する。
【００５８】
ここでは、リコンフィギュラブル回路１２Ｂの各論理回路にあるＡＬＵの演算ビット幅が16ビットであると仮定し、48ビット変数同士の加算A+Bを行う場合を説明する。いま、48ビット変数Ａの上位16ビットをAH、中位16ビットをAM、下位16ビットをAL、48ビット変数Ｂの上位16ビットをBH、中位16ビットをBM、下位16ビットをBLとすると、A+Bの演算は、下位ビット同士の加算AL+BL、中位ビット同士の加算AM+BM、及び上位ビット同士の加算AH+BHに分けて行われる。
【００５９】
ここでは、Ｌ１１内のＡＬＵからの出力をAL、Ｌ１２内のＡＬＵからの出力をAM、Ｌ１３内のＡＬＵからの出力をAH、Ｌ２１内のＡＬＵからの出力をBL、Ｌ２２内のＡＬＵからの出力をBM、Ｌ２３内のＡＬＵからの出力をBHとする。
【００６０】
まず、下位ビットの演算を説明する。Ｌ１１のＡＬＵから出力されるALは、Ｌ１１のＤＦＦ３、Ｌ１２のＤＦＦ２を介してＬ１３のＭＵＸへ入力される。このＭＵＸでは、このALが選択されてＬ１３のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１４のＡＬＵへ出力される。
【００６１】
一方、Ｌ２１のＡＬＵから出力されるBLは、Ｌ２１のＤＦＦ３、Ｌ２２のＤＦＦ２を介してＬ２３のＭＵＸへ入力される。このＭＵＸでは、このBLが選択されてＬ２３のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１４のＡＬＵへ出力される。そして、Ｌ１４のＡＬＵではALとBLの加算が行なわれる。
【００６２】
上記のような構成により、Ｌ１４内のＡＬＵを用いて、３段上に配置された論理回路Ｌ１１、及びＬ２１の出力に対する加算処理を行うことができる。
【００６３】
即ち、下位ビットの加算演算を行うＡＬＵが属するＬ１４の同列前段にあるＬ１３のＭＵＸが、同じ論理回路Ｌ１３のＡＬＵの出力ではなく、その同列前々段にあるＬ１１のＡＬＵの出力を選択する。また、Ｌ１４の右上段にあるＬ２３のＭＵＸが、Ｌ２３のＡＬＵの出力ではなく、その同列前々段にあるＬ２１のＡＬＵの出力を選択する。このようにして、３段上に配置された論理回路Ｌ１１、及びＬ２１の出力に対する加算処理を行うことができるのである。
【００６４】
次に、中位ビットの演算を説明する。Ｌ１２のＡＬＵから出力されるAMは、Ｌ１２のＤＦＦ３、Ｌ１３のＤＦＦ２を介してＬ１４のＭＵＸへ入力される。このＭＵＸでは、このAMが選択されてＬ１４のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１５のＡＬＵへ出力される。
【００６５】
一方、Ｌ２２のＡＬＵから出力されるBMは、Ｌ２２のＤＦＦ３、Ｌ２３のＤＦＦ２を介してＬ２４のＭＵＸへ入力される。このＭＵＸでは、このBMが選択されてＬ２４のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１５のＡＬＵへ出力される。そして、Ｌ１５のＡＬＵではAMとBMの加算が行われる。
【００６６】
即ち、中位ビットの加算演算を行うＡＬＵが属するＬ１５の同列前段にあるＬ１４のＭＵＸが、同じ論理回路Ｌ１４のＡＬＵの出力ではなく、その同列前々段にあるＬ１２のＡＬＵの出力を選択する。また、Ｌ１５の右上段にあるＬ２４のＭＵＸが、Ｌ２４のＡＬＵの出力ではなく、その同列前々段にあるＬ２２のＡＬＵの出力を選択する。このようにして、３段上に配置された論理回路Ｌ１２、及びＬ２２の出力に対する加算処理を行うことができるのである。
【００６７】
次に、上位ビットの演算を説明する。Ｌ１３のＡＬＵから出力されるAHは、Ｌ１３のＤＦＦ３、Ｌ１４のＤＦＦ２を介してＬ１５のＭＵＸへ入力される。このＭＵＸでは、このAHが選択されてＬ１５のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１６のＡＬＵへ出力される。
【００６８】
一方、Ｌ２３のＡＬＵから出力されるBHは、Ｌ２３のＤＦＦ３、Ｌ２４のＤＦＦ２を介してＬ２５のＭＵＸへ入力される。このＭＵＸでは、このBHが選択されてＬ２５のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１６のＡＬＵへ出力される。そして、Ｌ１６のＡＬＵではAHとBHの加算が行われる。
【００６９】
即ち、上位ビットの加算演算を行うＡＬＵが属するＬ１６の同列前段にあるＬ１５のＭＵＸが、同じ論理回路Ｌ１５のＡＬＵの出力ではなく、その同列前々段にあるＬ１３のＡＬＵの出力を選択する。また、Ｌ１６の右上段にあるＬ２５のＭＵＸが、Ｌ２５のＡＬＵの出力ではなく、その同列前々段にあるＬ２３のＡＬＵの出力を選択する。このようにして、３段上に配置された論理回路Ｌ１３、及びＬ２３の出力に対する加算処理を行うことができるのである。
【００７０】
このようにして、下位ビットの演算を行う論理回路、中位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、３倍長の演算が可能となるのである。
【００７１】
（リコンフィギュラブル回路１２Ｂを用いた倍長演算の例）
図９を参照して、リコンフィギュラブル回路１２Ｂによる倍長演算の実行例を説明する。
【００７２】
リコンフィギュラブル回路１２Ｂの各論理回路にあるＡＬＵの演算ビット幅は16ビットであるときに、32ビット変数同士の加算A+Bを行う場合を説明する。32ビット変数Ａの上位16ビットをAH、下位16ビットをAL、32ビット変数Ｂの上位16ビットをBH、下位16ビットをBLとすると、A+Bの演算は、下位ビット同士の加算AL+BL、上位ビット同士の加算AH+BHに分けて行われる。
【００７３】
ここでは、Ｌ１１内のＡＬＵからの出力をAL、Ｌ１２内のＡＬＵからの出力をAH、Ｌ２１内のＡＬＵからの出力をBL、Ｌ２２内のＡＬＵからの出力をBHとする。
【００７４】
まず、下位ビットの演算を説明する。Ｌ１１のＡＬＵから出力されるALは、Ｌ１１のＤＦＦ３を介してＬ１２のＭＵＸへ入力される。このＭＵＸでは、このALが選択されてＬ１２のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１３のＡＬＵへ出力される。
【００７５】
一方、Ｌ２１のＡＬＵから出力されるBLは、Ｌ２１のＤＦＦ３を介してＬ２２のＭＵＸへ入力される。このＭＵＸでは、このBLが選択されてＬ２２のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１３のＡＬＵへ出力される。そして、Ｌ１３のＡＬＵではALとBLの加算が行なわれる。
【００７６】
上記のような構成により、Ｌ１３内のＡＬＵを用いて、２段上に配置された論理回路Ｌ１１、及びＬ２１の出力に対する加算処理を行うことができる。
【００７７】
即ち、下位ビットの加算演算を行うＡＬＵが属するＬ１３の同列前段にあるＬ１２のＭＵＸが、同じ論理回路Ｌ１２のＡＬＵの出力ではなく、その前段にあるＬ１１のＡＬＵの出力を選択する。また、Ｌ１３の右上段にあるＬ２２のＭＵＸが、Ｌ２２のＡＬＵの出力ではなく、その前段にあるＬ２１のＡＬＵの出力を選択する。このようにして、２段上に配置された論理回路Ｌ１１、及びＬ２１の出力に対する加算処理を行うことができるのである。
【００７８】
次に、上位ビットの演算を説明する。Ｌ１２のＡＬＵから出力されるAHは、Ｌ１２のＤＦＦ３を介してＬ１３のＭＵＸへ入力される。このＭＵＸでは、このAHが選択されてＬ１３のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１４のＡＬＵへ出力される。
【００７９】
一方、Ｌ２２のＡＬＵから出力されるBHは、Ｌ２２のＤＦＦ３を介してＬ２３のＭＵＸへ入力される。このＭＵＸでは、このBHが選択されてＬ２３のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１４のＡＬＵへ出力される。そして、Ｌ１４のＡＬＵではAHとBHの加算が行われる。
【００８０】
即ち、上位ビットの加算演算を行うＡＬＵが属するＬ１４の同列前段にあるＬ１３のＭＵＸが、同じ論理回路Ｌ１３のＡＬＵの出力ではなく、その前段にあるＬ１２のＡＬＵの出力を選択する。また、Ｌ１４の右上段にあるＬ２３のＭＵＸが、Ｌ２３のＡＬＵの出力ではなく、その前段にあるＬ２２のＡＬＵの出力を選択する。このようにして、２段上に配置された論理回路Ｌ１２、及びＬ２２の出力に対する加算処理を行うことができるのである。
【００８１】
このようにして、下位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、倍長の演算も可能となるのである。
【００８２】
（リコンフィギュラブル回路１２Ｂを用いた単精度演算の例）
図１０を参照して、リコンフィギュラブル回路１２Ｂによる単精度演算の実行例を説明する。
【００８３】
リコンフィギュラブル回路１２Ｂの各論理回路にあるＡＬＵの演算ビット幅は16ビットであるときに、16ビット変数同士の加算A+Bを行う場合を説明する。Ｌ１１内のＡＬＵからの出力をA、Ｌ２１内のＡＬＵからの出力をBとする。
【００８４】
Ｌ１１のＡＬＵから出力されるAは、Ｌ１１のＭＵＸへ入力される。このＭＵＸでは、このAが選択されてＬ１１のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１２のＡＬＵへ出力される。
【００８５】
一方、Ｌ２１のＡＬＵから出力されるBは、Ｌ２１のＭＵＸへ入力される。このＭＵＸでは、このBが選択されてＬ２１のＤＦＦ１へ出力される。そして、このＤＦＦ１を介して、Ｌ１２のＡＬＵへ出力される。そして、Ｌ１２のＡＬＵではAとBの加算が行なわれる。
【００８６】
これにより、Ｌ１２内のＡＬＵを用いて、単精度の加算演算を行うことができる。即ち、加算演算を行うＡＬＵが属するＬ１２の同列前段にあるＬ１１のＭＵＸが、同じ論理回路Ｌ１１のＡＬＵを選択する。また、Ｌ１２の右上段にあるＬ２１のＭＵＸが、Ｌ２１のＡＬＵの出力を選択する。このようにして、リコンフィギュラブル回路１２Ｂでは、単精度の加算演算も行うことができるのである。
【００８７】
このようにリコンフィギュラブル回路１２Ｂでは、各論理回路内に設けられたＭＵＸへの入力の選択を制御することにより、３倍長、倍長、単精度演算の切り換えが可能となるのである。
【００８８】
＜第４の実施形態＞
（リコンフィギュラブル回路１２Ｃの構成）
図１１のようなリコンフィギュラブル回路１２Ｃでも、３倍長、倍長、単精度演算すべての演算が可能である。このリコンフィギュラブル回路１２Ｃは、演算器であるＡＬＵ、選択器であるＭＵＸ、及び、Ｄ型フリップフロップであるＤＦＦ１、ＤＦＦ２及びＤＦＦ３からなる論理回路（同図ではＬ１１、…、Ｌ１６、Ｌ２１、…Ｌ２６、Ｌ３１、…として示している）がアレイ状に配列されてなる。
【００８９】
各論理回路において、ＡＬＵからの出力は、ＭＵＸ１、ＭＵＸ２及びＤＦＦ３へ出力される。
【００９０】
各論理回路のＭＵＸ１は、同じ論理回路のＡＬＵからの出力、前段のＤＦＦ２からの出力、のいずれか１つを選択して同じ論理回路内のＤＦＦ１へ出力する。例えば、論理回路Ｌ１３のＭＵＸ１は、Ｌ１３のＡＬＵ、Ｌ１２のＤＦＦ２からの出力のいずれかを選択して、Ｌ１３のＤＦＦ１へ出力する。
【００９１】
各論理回路のＭＵＸ２は、同じ論理回路のＡＬＵからの出力、前段のＤＦＦ３からの出力、のいずれか１つを選択して同じ論理回路内のＤＦＦ２へ出力する。例えば、論理回路Ｌ１３のＭＵＸ２は、Ｌ１３のＡＬＵ、Ｌ１２のＤＦＦ３からの出力のいずれかを選択して、Ｌ１３のＤＦＦ２へ出力する。
【００９２】
また、ＤＦＦ３からの出力は、次段の論理回路のＭＵＸ２へ出力される。
【００９３】
（リコンフィギュラブル回路１２Ｃを用いた３倍長演算の例）
図１２を参照して、リコンフィギュラブル回路１２Ｃを用いた、３倍長演算の実行例を説明する。
【００９４】
リコンフィギュラブル回路１２Ｃの各論理回路にあるＡＬＵの演算ビット幅が16ビットであると仮定し、48ビット変数同士の加算A+Bを行う場合を説明する。いま、48ビット変数Ａの上位16ビットをAH、中位16ビットをAM、下位16ビットをAL、Ｂの上位16ビットをBH、中位16ビットをBM、下位16ビットをBLとする。そして、Ｌ１１、Ｌ１２、Ｌ１３のＡＬＵからの出力をそれぞれ、AL、AM、AHとし、Ｌ２１、Ｌ２２、Ｌ２３のＡＬＵからの出力をそれぞれ、BL、BM、BHとする。
【００９５】
まず、下位ビットの演算を説明する。Ｌ１１のＡＬＵから出力されるALは、ＤＦＦ３、Ｌ１２のＭＵＸ２、ＤＦＦ２、Ｌ１３のＭＵＸ１、ＤＦＦ１を介して、Ｌ１４のＡＬＵへ出力される。
【００９６】
一方、Ｌ２１のＡＬＵから出力されるBLは、Ｌ２１のＤＦＦ３、Ｌ２２のＭＵＸ２、ＤＦＦ２、Ｌ２３のＭＵＸ１、ＤＦＦ１を介してＬ１４のＡＬＵへ出力される。そして、Ｌ１４のＡＬＵではALとBLの加算が行われる。
【００９７】
次に、中位ビットの演算を説明する。Ｌ１２のＡＬＵから出力されるAMは、ＤＦＦ３、Ｌ１３のＭＵＸ２、ＤＦＦ２を介してＬ１４のＭＵＸ１、ＤＦＦ１を介して、Ｌ１５のＡＬＵへ出力される。
【００９８】
一方、Ｌ２２のＡＬＵから出力されるBMは、Ｌ２２のＤＦＦ３、Ｌ２３のＭＵＸ２、ＤＦＦ２、Ｌ２４のＭＵＸ１、ＤＦＦ１を介してＬ１５のＡＬＵへ出力される。そして、Ｌ１５のＡＬＵではAMとBMの加算が行われる。
【００９９】
次に、上位ビットの演算を説明する。Ｌ１３のＡＬＵから出力されるAHは、ＤＦＦ３、Ｌ１４のＭＵＸ２、ＤＦＦ２、Ｌ１５のＭＵＸ１、ＤＦＦ１を介して、Ｌ１６のＡＬＵへ出力される。
【０１００】
一方、Ｌ２３のＡＬＵから出力されるBHは、Ｌ２３のＤＦＦ３、Ｌ２４のＭＵＸ２、ＤＦＦ２、Ｌ２５のＭＵＸ１、ＤＦＦ１を介してＬ１６のＡＬＵへ出力される。そして、Ｌ１６のＡＬＵではAHとBHの加算が行われる。
【０１０１】
このようにして、下位ビットの演算を行う論理回路、中位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、３倍長の演算が可能となるのである。
【０１０２】
（リコンフィギュラブル回路１２Ｃを用いた倍長演算の例）
図１３を参照して、リコンフィギュラブル回路１２Ｃによる倍長演算の実行例を説明する。
【０１０３】
リコンフィギュラブル回路１２Ｃの各論理回路にあるＡＬＵの演算ビット幅は16ビットであるときに、32ビット変数同士の加算A+Bを行う場合を説明する。32ビット変数Ａの上位16ビットをAH、下位16ビットをAL、32ビット変数Ｂの上位16ビットをBH、下位16ビットをBLとする。そして、Ｌ１１、Ｌ１２のＡＬＵからの出力をそれぞれ、AL、AHとし、Ｌ２１、Ｌ２２のＡＬＵからの出力をそれぞれ、BL、BHとする。
【０１０４】
まず、下位ビットの演算を説明する。Ｌ１１のＡＬＵから出力されるALは、Ｌ１１のＭＵＸ２、ＤＦＦ２、Ｌ１２のＭＵＸ１、ＤＦＦ１を介して、Ｌ１３のＡＬＵへ出力される。一方、Ｌ２１のＡＬＵから出力されるBLは、Ｌ２１のＭＵＸ２、ＤＦＦ２、Ｌ２２のＭＵＸ１、ＤＦＦ１を介して、Ｌ１３のＡＬＵへ出力される。そして、Ｌ１３のＡＬＵではALとBLの加算が行われる。
【０１０５】
次に、上位ビットの演算を説明する。Ｌ１２のＡＬＵから出力されるAHは、Ｌ１２のＭＵＸ２、ＤＦＦ２、Ｌ１３のＭＵＸ１、ＤＦＦ１を介して、Ｌ１４のＡＬＵへ出力される。一方、Ｌ２２のＡＬＵから出力されるBHは、Ｌ２２のＭＵＸ２、ＤＦＦ２、Ｌ２３のＭＵＸ１、ＤＦＦ１を介して、Ｌ１４のＡＬＵへ出力される。そして、Ｌ１４のＡＬＵではAHとBHの加算が行われる。
【０１０６】
このようにして、下位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、倍長の演算も可能となるのである。
【０１０７】
（リコンフィギュラブル回路１２Ｃを用いた単精度演算の例）
図１４を参照して、リコンフィギュラブル回路１２Ｃによる単精度演算の実行例を説明する。
【０１０８】
リコンフィギュラブル回路１２Ｃの各論理回路にあるＡＬＵの演算ビット幅は16ビットであるときに、16ビット変数同士の加算A+Bを行う場合を説明する。Ｌ１１のＡＬＵからの出力をA、Ｌ２１のＡＬＵからの出力をBとする。
【０１０９】
Ｌ１１のＡＬＵから出力されるAは、Ｌ１１のＭＵＸ１、ＤＦＦ１を介して、Ｌ１２のＡＬＵへ出力される。一方、Ｌ２１のＡＬＵから出力されるBは、Ｌ２１のＭＵＸ１、ＤＦＦ１を介して、Ｌ１２のＡＬＵへ出力される。そして、Ｌ１２のＡＬＵではAとBの加算が行なわれる。これにより、単精度の加算演算を行うことができる。
このようにリコンフィギュラブル回路１２Ｃでは、各論理回路内に設けられた選択器ＭＵＸ１、ＭＵＸ２を制御することにより、３倍長、倍長、単精度演算の切り換えが可能となるのである。
【０１１０】
＜第５の実施形態＞
（リコンフィギュラブル回路１２Ｄの構成）
本実施形態は、倍長シフト演算と、単精度のシフト演算の両方が可能な演算が可能なリコンフィギュラブル回路１２Ｄに関する。
【０１１１】
図１５を参照して、リコンフィギュラブル回路１２Ｄは、バレルシフタとして機能する演算器であるＡＬＵ、選択器であるＭＵＸ、及び、Ｄ型フリップフロップであるＤＦＦ１、ＤＦＦ２なる論理回路（同図ではＬ１１、…、Ｌ４４として表示）がアレイ状に配列されてなる。
【０１１２】
各論理回路において、ＡＬＵは２つの出力を有する。第１の出力は、ＭＵＸへ出力される。第２の出力はＭＵＸとＤＦＦ２の両方へ出力される。なお、第１の出力、第２の出力が何であるかについては後で詳しく説明する。
【０１１３】
各論理回路のＭＵＸは、ＡＬＵからの第１の出力又は第２の出力のいずれかを選択してＤＦＦ１へ出力する。
【０１１４】
ＤＦＦ１からの出力は（同列又は左右の列に位置する）次段の論理回路（のＡＬＵ）へ出力される。一方、ＤＦＦ２からの出力は、同列次段にある論理回路（のＡＬＵ）へ出力される。
【０１１５】
（リコンフィギュラブル回路１２Ｄにおける論理回路のＡＬＵの構成）
図１６は、リコンフィギュラブル回路１２Ｄにおける論理回路のＡＬＵの構成図である。このＡＬＵは、バレルシフタと、選択器であるＭＵＸ１、ＭＵＸ２を備えている。また、各ＡＬＵは、入力１、入力２、遅延入力の３入力を有する。入力１、入力２は、前段のいずれかの論理回路のＤＦＦ１から出力されたデータのことをいう。遅延入力とは、前段の同列の論理回路のＤＦＦ２から出力されたデータのことをいう。なお、入力１、入力２、遅延入力はいずれも１６ビットであるとし、バレルシフタは３２ビットデータに対するシフト演算が可能であるとする。また、各ＭＵＸは１６ビットデータに対応するものとする。
【０１１６】
ＭＵＸ１は、入力１と、０（ゼロ）のいずれかを選択してバレルシフタへ出力する。ＭＵＸ２は、遅延入力と、０（ゼロ）のいずれかを選択してバレルシフタへ出力する。
【０１１７】
バレルシフタには、ＭＵＸ１からの出力、ＭＵＸ２からの出力、並びに入力２、の３つの１６ビットデータの入力がなされる。バレルシフタは、ＭＵＸ２からのデータを下位１６ビットデータとし、入力２を上位１６ビットデータとして結合した３２ビットデータに対し、ＭＵＸ１から指定されたビット数だけシフトする演算を行う。そして、シフト演算された３２ビットデータのうち、上位１６ビットは、ＭＵＸ及びＤＦＦ２へ出力される。下位１６ビットについてはＭＵＸへ出力される。
【０１１８】
（リコンフィギュラブル回路１２Ｄによる倍長演算の例）
図１７を参照して、リコンフィギュラブル回路１２Ｄによる倍長演算の実行例を説明する。ここでは、上位１６ビットをｄ２、下位１６ビットをｄ１とするデータに対し、列方向に隣接して配置された論理回路L(x)(y)と、L(x)(y+1)を用いて倍長のビットシフト演算を行う場合を説明する。
【０１１９】
まず、L(x)(y)のＭＵＸ２は遅延入力であるデータｄ２を選択する。そして、バレルシフタには、入力２であるデータｄ１と、データｄ２とが結合された形で入力される。即ち、バレルシフタには、データｄ１を上位１６ビット、データｄ２を下位１６ビットとした３２ビットデータが入力される。
【０１２０】
一方、ＭＵＸ１は、０を選択してバレルシフタへ出力する。従って、バレルシフタはシフト演算を行わずに上位１６ビット（即ちｄ１）をＤＦＦ２とＭＵＸへ出力し、下位１６ビット（即ちｄ２）をＭＵＸへ出力する。ＭＵＸは、下位１６ビット（データｄ２）を選択してＤＦＦ１へ出力する。
【０１２１】
次に、L(x)(y+1)のＭＵＸ２は遅延入力（データｄ１）を選択する。そして、バレルシフタには、入力２（データｄ２）を上位１６ビット、データｄ１を下位１６ビットとした３２ビットデータが入力される。  
【０１２２】
一方、ＭＵＸ１は、入力１であるデータｓを選択してバレルシフタへ出力する。そして、バレルシフタは、上記の３２ビットデータに対してｓビットシフト（ここでは右シフトとする）させる。そして、バレルシフタからは、ｓビットシフトさせた３２ビットデータの上位１６ビットがＤＦＦ２とＭＵＸに出力され、下位１６ビットがＭＵＸへ出力される。
【０１２３】
以上のようにして、リコンフィギュラブル回路１２Ｄにより、倍長のバレルシフト演算が可能となる。
【０１２４】
（リコンフィギュラブル回路１２Ｄによる単精度演算の例）
図１８を参照して、リコンフィギュラブル回路１２Ｄによる単精度演算の実行例を説明する。ここでは、データｄ１に対し、単精度のバレルシフト演算を行う場合を説明する。
【０１２５】
まず、ＭＵＸ２は（遅延入力ではなく）０を選択する。そして、バレルシフタには、入力２（データｄ１）を上位１６ビット、０を下位１６ビットとした３２ビット形式のデータが入力される。  
【０１２６】
一方、ＭＵＸ１は、入力１（データｓ）を選択してバレルシフタへ出力する。従って、バレルシフタは、上記の３２ビット形式のデータに対してｓビットシフト（ここでは右シフトとする）させる。そして、バレルシフタからは、ｓビットシフトさせたデータの上位１６ビットがＤＦＦ２とＭＵＸに、下位１６ビットがＭＵＸへ出力される。ＭＵＸは、上位、下位のうち上位１６ビットを選択してＤＦＦ１に出力する。なお、ＤＦＦ１からの出力は、次段の同列又は左右列の論理回路へ入力される。即ち、データｄ１をｓビットシフトさせたデータが次段の論理回路へ出力されることとなる。
【０１２７】
以上のようにして、リコンフィギュラブル回路１２Ｄにより、単精度のバレルシフト演算が可能となる。さらに、ＭＵＸ２に０を選択させることでバレルシフタの下位１６ビットには０が入力されるので、右シフト演算時だけでなく左シフト演算時も正しく演算することが可能となる。
【０１２８】
リコンフィギュラブル回路１２Ｄによれば、倍長のバレルシフタ１つで、単精度と倍精度の両方に対応するシフト演算を実現することができるので、単精度と倍精度の２つのバレルシフタを持つ場合と比較して回路規模を削減することができる。
【０１２９】
なお、上記リコンフィギュラブル回路１２Ｄでは、入力１、入力２は、前段の論理回路のＤＦＦ１から出力されたデータであるとしたが、これに限られるものではなく、例えば、単なる定数入力、もしくはリコンフィギュラブル回路内に設けられた図示しない状態保持回路（ＲＡＭなど）から入力されるデータなどが入力されるものであっても良い。
【０１３０】
＜第６の実施形態＞
（リコンフィギュラブル回路１２Ｅの構成）
図１９のようなリコンフィギュラブル回路１２Ｅを用いてもバレルシフト演算が可能である。リコンフィギュラブル回路１２Ｅは、リコンフィギュラブル回路１２Ｄと比較して、奇数段にある論理回路（Ｌ１１、Ｌ２１、Ｌ３１、Ｌ４１、Ｌ１３、Ｌ２３、Ｌ３３、Ｌ４３）の構成が相違する。リコンフィギュラブル回路１２Ｅでは、奇数段にある論理回路Ｌ（ｘ）（２ｙ−１）と、偶数段にある論理回路Ｌ（ｘ）（２ｙ）の２個の論理回路をペアとして使用することで倍長のバレルシフト演算が可能である。
【０１３１】
図２０は、リコンフィギュラブル回路１２Ｅの奇数段に配置される論理回路Ｌ（ｘ）（２ｙ−１）の構成を示す図である。この論理回路Ｌ（ｘ）（２ｙ−１）は、ＡＬＵの内部が、選択器ＭＵＸ２を備えない点、バレルシフタが３２ビット対応でなく、１６ビット対応である点で、リコンフィギュラブル回路１２Ｄの各論理回路のＡＬＵと相違する。
なお、リコンフィギュラブル回路１２Ｅの偶数段に配置される論理回路Ｌ（ｘ）（２ｙ）の構成は、リコンフィギュラブル回路１２Ｄの各論理回路のＡＬＵと同じである。
【０１３２】
（リコンフィギュラブル回路１２Ｅによる倍長演算の例）
図２１を参照して、リコンフィギュラブル回路１２Ｅによる倍長演算の実行例を説明する。ここでは、上位１６ビットをｄ２、下位１６ビットをｄ１とする３２ビットデータに対し、論理回路L(x)(2y-1)と、その同列次段にあるL(x)(2y)を用いて倍長のビットシフト演算を行う場合を説明する。
【０１３３】
まず、L(x)(2y-1)での動作を説明する。L(x)(2y-1)のバレルシフタには入力２としてL(x)(2y-1)に入力されたデータｄ１が入力される。ＡＬＵ内のＭＵＸ１は（入力１ではなく）０を選択してバレルシフタへ出力する。従って、バレルシフタからはデータｄ１がそのまま（ビットシフトされないまま）ＭＵＸ及びＤＦＦ２の両方へ出力される。
【０１３４】
一方、ＭＵＸには、前記のバレルシフタからの出力と、遅延入力としてL(x)(2y-1)に入力されたデータｄ２とが入力されるが、ＭＵＸは、このうちデータｄ２を選択してＤＦＦ１へ出力する。ＤＦＦ１から出力されるｄ２はL(x)(2y)へ出力される。ＤＦＦ２から出力されるｄ１は、遅延出力としてL(x)(2y)へ出力される。
【０１３５】
次に、L(x)(2y) での動作を説明する。L(x)(2y)のＭＵＸ１には、入力１としてL(x)(2y)に入力されたデータｓと、０とが入力されるが、ＭＵＸ１はデータｓを選択してバレルシフタへ出力する。ＭＵＸ２は、遅延入力（上記の遅延出力であるｄ１）と０のうち、データｄ１を選択してバレルシフタへ出力する。バレルシフタには、入力２（上記のｄ２）を上位１６ビット、データｄ１を下位１６ビットとした３２ビットデータが入力される。      
【０１３６】
そして、バレルシフタからは、この３２ビットデータをｓビットシフトさせたデータのうち、上位１６ビットをＤＦＦ２とＭＵＸに出力し、下位１６ビットをＭＵＸへ出力する。このようにして、リコンフィギュラブル回路１２Ｅよっても、倍長のバレルシフト演算が可能となる。
【０１３７】
即ち、リコンフィギュラブル回路１２Ｄでは、任意の段の論理回路とその次段同列の論理回路を用いて倍長シフト演算を実行可能であるのに対し、このリコンフィギュラブル回路１２Ｅでは、奇数段とその次段である偶数段にある２つの論理回路を用いて倍長シフト演算をさせている。即ち、「任意の段」を奇数段に、「その次段」の偶数段に、というふうに配置を限定することにより、奇数段に配置される論理回路のバレルシフタが単精度でまかなうことができる（この例では３２ビットではなく、１６ビットで済む）ので、回路規模を小型化することができる。
【０１３８】
＜第７の実施形態＞
（リコンフィギュラブル回路１２Ｆの構成）
図２２は、単精度演算と倍長演算の両方を行うことができると共に、単精度演算の結果を倍長演算へ供給することができるリコンフィギュラブル回路１２Ｆの構成を示すものである。このリコンフィギュラブル回路１２Ｆは、演算ビット幅が１６ビットであるものとする。
【０１３９】
このリコンフィギュラブル回路１２Ｆは、２段目の論理回路（Ｌ１２、…Ｌ４２）に特徴を有する。これらの論理回路は、演算器であるＡＬＵ、選択器であるＭＵＸ１、ＭＵＸ２、Ｄ型フリップフロップであるＤＦＦ１、ＤＦＦ２、並びに符号拡張処理を行うＥＸを有する。符号拡張処理とは、ここでは、元々１６ビット変数であったデータを３２ビットに拡張した上で、拡張後の上位１６ビットのデータを生成する処理のことをいう。ＡＬＵからの出力はＭＵＸ１、ＭＵＸ２、並びにＥＸへ入力される。ＥＸからの出力はＭＵＸ２へ入力される。また、ＭＵＸ１には、同列前段のＤＦＦ２からの出力も入力される。ＡＬＵが単精度演算を行う場合、ＭＵＸ２は、ＥＸを選択してＤＦＦ２へ出力する。これにより、ＤＦＦ２からは、拡張後変数の上位ビットが出力される。また、ＭＵＸ１がＡＬＵからの入力データを選択した場合、ＤＦＦ１からは、拡張後変数の下位ビットが出力されこととなる。このように２段目の論理回路では、単精度演算を行った後、符号拡張を行うことで倍長に変換して、上位ビット及び下位ビットに分けて出力するのである。例えば、ＡＬＵによる単精度演算の結果が１６ビット変数でいうところの0x89abであるとき、ＥＸからの出力は0xffffとなる。従って、この論理回路は0xffff89abなる３２ビット変数を出力することとなる。
【０１４０】
なお、１段目、３段目、４段目の論理回路の構成はリコンフィギュラブル回路１２と同じである。
【０１４１】
（リコンフィギュラブル回路１２Ｆによる演算例）
図２３を参照して、リコンフィギュラブル回路１２Ｆによる演算例を説明する。ここでは、、単精度の加算Ａ＋Ｂ（＝Ｃとする）、及び単精度の加算Ｄ＋Ｅ（＝Ｆとする）を実行したのち、Ｃ＋Ｆの倍長加算を行う例を用いて説明する。リコンフィギュラブル回路１２Ｆの各論理回路の演算ビット幅は１６ビットであるとし、変数Ａ、Ｂ、Ｄ、Ｅもそれぞれ１６ビット変数であるとする。
【０１４２】
まず、論理回路Ｌ１１、Ｌ２１、Ｌ３１、Ｌ４１のＡＬＵからはそれぞれ変数Ａ、Ｂ、Ｄ、Ｅが出力されるものとする。
【０１４３】
Ｌ１１のＭＵＸはＡを選択し、ＤＦＦ１を介してＬ２２のＡＬＵにＡが入力される。Ｌ２１のＭＵＸはＢを選択し、ＤＦＦ１を介してＬ２２のＡＬＵにはＢも入力される。そして、Ｌ２２のＡＬＵでは、Ａ＋Ｂの単精度加算が実行される。
【０１４４】
Ｌ３１のＭＵＸはＤを選択し、ＤＦＦ１を介してＬ３２のＡＬＵにＤが入力される。Ｌ４１のＭＵＸはＥを選択し、ＤＦＦ１を介してＬ３２のＡＬＵにはＥも入力される。そして、Ｌ３２のＡＬＵでは、Ｄ＋Ｅの単精度加算が実行される。
【０１４５】
Ｌ２２のＡＬＵからの出力であるＣ（＝Ａ＋Ｂ）は、Ｌ２２のＭＵＸ１、ＭＵＸ２、並びにＥＸへ出力される。ＭＵＸ１は、（Ｌ２１のＤＦＦ２からの入力ではなく）、ＡＬＵからの出力であるＣを選択してＤＦＦ１へ出力する。ＭＵＸ２は、ＥＸからの出力を選択してＤＦＦ２へ出力する。その結果、ＤＦＦ２からは、１６ビット変数Ｃを３２ビットに符号拡張したときの上位１６ビットであるＣＨが出力され、ＤＦＦ１からは、１６ビット変数Ｃを３２ビットに符号拡張したときの下位１６ビットであるＣＬが出力される。ＤＦＦ１から出力されるＣＬは、Ｌ２３のＡＬＵへ入力される。一方、ＤＦＦ２から出力されるＣＨは、Ｌ２３のＭＵＸを介してＬ２４のＡＬＵへ入力される。
【０１４６】
同様に、Ｌ３２のＡＬＵからの出力であるＦ（＝Ｄ＋Ｅ）は、Ｌ３２のＭＵＸ１、ＭＵＸ２、並びにＥＸへ出力される。ＭＵＸ１は、（Ｌ３１のＤＦＦ２からの入力ではなく）、ＡＬＵからの出力であるＦを選択してＤＦＦ１へ出力する。ＭＵＸ２は、ＥＸからの出力を選択してＤＦＦ２へ出力する。その結果、ＤＦＦ２からは、１６ビット変数Ｆを３２ビットに符号拡張したときの上位１６ビットであるＦＨが出力され、ＤＦＦ１からは、１６ビット変数Ｆを３２ビットに符号拡張したときの下位１６ビットであるＦＬが出力される。ＤＦＦ１から出力されるＦＬは、Ｌ２３のＡＬＵへ入力される。一方、ＤＦＦ２から出力されるＦＨは、Ｌ３３のＭＵＸを介してＬ２４のＡＬＵへ入力される。
【０１４７】
その結果、Ｌ２３のＡＬＵではＣＬ＋ＦＬの加算演算が実行され、Ｌ２４のＡＬＵではＣＨ＋ＦＨの加算演算が実行される。このようにして、リコンフィギュラブル回路１２Ｆでは、単精度演算の実行結果を倍長演算に供給するのである。
【０１４８】
なお、２段目の論理回路（Ｌ１２、…、Ｌ４２）のＡＬＵにおいて倍長の演算を行っている場合は、ＭＵＸ２は、ＥＸからの入力ではなく、ＡＬＵからの入力を選択する。このときの動作は、図２を参照して説明した、リコンフィギュラブル回路１２と同じである。
【０１４９】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【０１５０】
例えば、上記実施例のリコンフィギュラブル回路１２等では、各論理回路のＤＦＦ１からの出力が次段の一部の論理回路（次段同列、及び次段左右列）に制限されて入力されるよう構成されているが、このような制限のないリコンフィギュラブル回路において本願発明が適用されるものであっても良い。
【０１５１】
また、上記実施例では、リコンフィギュラブル回路１２、１２Ｂ、１２Ｃなど、段方向と列方向にマトリックス状に構成された複数の論理回路からなるリコンフィギュラブル回路を例に説明したが、列方向に並ぶように構成された複数の論理回路からなるリコンフィギュラブル回路であっても良い。この場合、各論理回路への演算入力は、前段の論理回路のＤＦＦ１からの出力の他、リコンフィギュラブル回路の外部からの入力、あるいはリコンフィギュラブル回路内に設けられた状態保持回路からの入力であっても良い。
【０１５２】
また、１つの論理回路により構成されるリコンフィギュラブル回路であっても良い。このリコンフィギュラブル回路には、リコンフィギュラブル回路１２Ａと同様、所定時間ごとに（例えば制御部１８から周期的に入力されるクロックに従って）設定部１４から設定データが供給される。そして、リコンフィギュラブル回路を構成する論理回路は、この設定部１４から供給される設定データに従って動作する。論理回路のＤＦＦ１からの出力は、次のクロックでの演算に用いる為の演算入力として、この論理回路自身へループバックされる。なお、演算入力としては、論理回路のＤＦＦ１の出力からループバックして入力されるものの他、リコンフィギュラブル回路の外部からの入力、あるいはリコンフィギュラブル回路内に設けられた状態保持回路からの入力であっても良い。
【図面の簡単な説明】
【０１５３】
【図１】本実施の形態に係る処理装置１０、設定データ生成装置３０の構成を示す図である。
【図２】リコンフィギュラブル回路１２の構成を示す図である。
【図３】リコンフィギュラブル回路１２を用いた倍長演算の実行例を説明する図である。
【図４】リコンフィギュラブル回路１２を用いた単精度演算の実行例を説明する図である。
【図５】リコンフィギュラブル回路１２の各論理回路内にあるＡＬＵの内部構成を示す図である。
【図６】リコンフィギュラブル回路１２Ａの構成を示す図である。
【図７】リコンフィギュラブル回路１２Ｂの構成を示す図である。
【図８】リコンフィギュラブル回路１２Ｂを用いた、３倍長演算の実行例を説明する図である。
【図９】リコンフィギュラブル回路１２Ｂによる倍長演算の実行例を説明する図である。
【図１０】リコンフィギュラブル回路１２Ｂによる単精度演算の実行例を説明する図である。
【図１１】リコンフィギュラブル回路１２Ｃの構成を示す図である。
【図１２】リコンフィギュラブル回路１２Ｃによる３倍長演算の実行例を説明する図である。
【図１３】リコンフィギュラブル回路１２Ｃによる倍長演算の実行例を説明する図である。
【図１４】リコンフィギュラブル回路１２Ｃによる単精度演算の実行例を説明する図である。
【図１５】リコンフィギュラブル回路１２Ｄの構成を示す図である。
【図１６】リコンフィギュラブル回路１２Ｄにおける論理回路のＡＬＵの構成図である。
【図１７】リコンフィギュラブル回路１２Ｄによる倍長演算の実行例を説明する図である。
【図１８】リコンフィギュラブル回路１２Ｄによる単精度演算の実行例を説明する図である。
【図１９】リコンフィギュラブル回路１２Ｅの構成を示す図である。
【図２０】リコンフィギュラブル回路１２Ｅの奇数段に配置される論理回路の構成を示す図である。
【図２１】リコンフィギュラブル回路１２Ｅによる倍長演算の実行例を説明する図である。
【図２２】リコンフィギュラブル回路１２Ｆの構成を示す図である。
【図２３】リコンフィギュラブル回路１２Ｆによる演算例を説明する図である。
【符号の説明】
【０１５４】
１０  処理装置
１２  リコンフィギュラブル回路
１４  設定部
１８  制御部
３０  設定データ生成装置
【図１】
0005116499.tif 000002
【図７】
0005116499.tif 000003
【図８】
0005116499.tif 000004
【図１１】
0005116499.tif 000005
【図１２】
0005116499.tif 000006
【図１３】
0005116499.tif 000007
【図１４】
0005116499.tif 000008
【図２】
0005116499.tif 000009
【図３】
0005116499.tif 000010
【図４】
0005116499.tif 000011
【図５】
0005116499.tif 000012
【図６】
0005116499.tif 000013
【図９】
0005116499.tif 000014
【図１０】
0005116499.tif 000015
【図１５】
0005116499.tif 000016
【図１６】
0005116499.tif 000017
【図１７】
0005116499.tif 000018
【図１８】
0005116499.tif 000019
【図１９】
0005116499.tif 000020
【図２０】
0005116499.tif 000021
【図２１】
0005116499.tif 000022
【図２２】
0005116499.tif 000023
【図２３】
0005116499.tif 000024