演算処理回路
【課題】単精度演算及び倍長演算の両方が可能な演算処理回路を提供する。
【解決手段】段方向と列方向にマトリックス状に配列された複数の論理回路(L11、…、L44)からなり、論理回路からの出力が次段の論理回路に入力されるよう構成された処理回路であって、論理回路が、入力されたデータに対して演算を行う演算回路(ALU)と、演算回路から出力されたデータ、又は前段の論理回路から出力されたデータのいずれかを選択して次段の論理回路に出力する選択部(MUX)を備えることを特徴とする。
【解決手段】段方向と列方向にマトリックス状に配列された複数の論理回路(L11、…、L44)からなり、論理回路からの出力が次段の論理回路に入力されるよう構成された処理回路であって、論理回路が、入力されたデータに対して演算を行う演算回路(ALU)と、演算回路から出力されたデータ、又は前段の論理回路から出力されたデータのいずれかを選択して次段の論理回路に出力する選択部(MUX)を備えることを特徴とする。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、ALU(Arithmetic Logic Unit)アレイ等を用いた演算処理回路に関する。特に単精度演算及び倍長演算の両方が可能な演算処理回路に関する。
【背景技術】
【0002】
出願人は、ALU(Arithmetic Logic Unit)と呼ばれる基本演算機能を複数持つ多機能素子を多段に並べたALUアレイを用いたリコンフィギュラブル回路の検討を行ってきた(例えば、特許文献1、非特許文献1)。このリコンフィギュラブル回路では、ALUの機能を制御する命令セット及びALU間の接続先を制御する接続データセットからなる構成情報が各ALUに設定されることにより、所望の演算処理回路として機能する。
【0003】
ALUアレイによるリコンフィギュラブル回路では、FPGA(Field Programmable Gate Array)によるリコンフィギュラブル回路よりも実装サイズを小型化できる上、回路の再構成が高速に実行できるという利点がある。このため、各種の処理や規格に対応した演算処理回路を1つのLSIで実現できる。また、新規格にもソフトウエアのアップデートにより即座に対応可能である。
【特許文献1】特開2005−182654号公報
【非特許文献1】: 「情報家電向け小型リコンフィギュラブルデバイス」、三洋電機技報 VOL.37, No.2, MARCH 2006 通巻第77号
【発明の開示】
【発明が解決しようとする課題】
【0004】
上記のリコンフィギュラブル回路により、様々な演算処理回路を実現する場合、処理内容によっては、リコンフィギュラブル回路のALUが可能な演算ビット数を超える、多ビットの演算が必要になる場合がある。例えば、リコンフィギュラブル回路のALUの演算ビット幅が16ビットの場合に32ビット演算を実行させる必要が生じることがある。いわゆる倍長演算が必要な場合がある。
【0005】
一方、処理内容によっては、リコンフィギュラブル回路のALUが可能な演算ビット数での演算でも済む場合もある。即ち単精度演算でも足る場合もある。例えば、リコンフィギュラブル回路のALUの演算ビット幅が16ビットの場合に16ビット演算で済む場合もある。
【0006】
このように、リコンフィギュラブル回路では、倍長演算と単精度演算の両方に対応できることが望まれている。
【0007】
本発明は上記の事情に鑑み、単精度演算及び倍長演算の両方が可能な演算処理回路を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明のある態様の演算処理回路は、複数の論理回路からなり、第1の論理回路からの演算出力が第2の論理回路に入力されるよう構成された演算処理回路であって、前記第2の論理回路が、入力されたデータに対して演算を行う演算回路と、前記演算回路から出力された演算出力、又は第1の論理回路からの演算出力のいずれかを選択して出力する選択部を備えることを特徴とする。なお、ここで演算とは、加算、減算の他、シフト演算などであってもよい。
【0009】
前記選択部は、前記第2の論理回路が単精度演算を実行するときは、前記演算回路から出力された演算出力を選択し、前記第2の論理回路が倍長演算を実行するときは、前記第1の論理回路からの演算出力を選択するものであっても良い。
【0010】
ここで、倍長演算とは、いわゆる2倍長演算の他、n倍長演算(n:自然数、n>3)も含むものである。
【0011】
前記複数の論理回路は、例えば、段方向と列方向にマトリックス状に構成されても良い。
【0012】
この場合、前記の第1、第2の論理回路は、それぞれが連続する2段に配置される論理回路であっても良い。また、論理回路の選択部の出力が、次段の一部の論理回路のみに入力されるように構成されていても良い。
【0013】
また、前記複数の論理回路は、所定段に配置され、単精度演算又は倍長演算の下位桁の演算を実行する第1タイプの論理回路と、前記所定段の次段に配置され、単精度演算又は倍長演算の上位桁の演算を実行する第2タイプの論理回路と、を少なくとも含むものであっても良い。
【0014】
なお、上記「複数の論理回路」に関し、第1の論理回路と第2の論理回路は同じ論理回路であっても良い。したがって、第1の論理回路からの演算出力が、再び第1の論理回路の入力として用いられるような演算処理回路も本発明の範囲に含まれる。
【0015】
本発明の他の態様の演算処理回路は、段方向に構成され、所定時間ごとに外部から供給される設定データに従って動作する複数の論理回路を備えた演算処理回路であって、前記論理回路は、入力されたデータに対して演算を行う演算回路と、前記演算回路から出力された演算出力を前記所定時間保持する状態保持回路と、前記演算回路から出力された演算出力、又は前記状態保持回路に保持されていた演算出力のいずれかを選択する選択部を備え、更に該演算処理回路は、所定の論理回路の選択部の出力を、前記複数の論理回路を構成する一部の論理回路に入力させる接続部を備えることを特徴とする。
【0016】
本発明の他の態様の演算処理回路は、所定時間ごとに外部から供給される設定データに従って動作する論理回路を備えた演算処理回路であって、前記論理回路は、入力されたデータに対して演算を行う演算回路と、前記演算回路から出力された演算出力を前記所定時間保持する状態保持回路と、前記演算回路から出力された演算出力、又は前記状態保持回路に保持されていた演算出力のいずれかを選択する選択部を備え、更に該演算処理回路は、該論理回路からの選択部の出力を、該論理回路に入力させる接続部と、を備えたことを特徴とする。
【発明の効果】
【0017】
この発明によれば、単精度演算及び倍長演算の両方が可能な演算処理回路を提供することができる。また、いわゆる接続制限のある演算処理回路において、倍長演算を効率的に実行することができる。
【発明を実施するための最良の形態】
【0018】
<第1の実施形態>
図1は、実施の形態に係る処理装置10の構成、並びに設定データ生成装置30の構成を示す図である。
【0019】
(処理装置10の構成)
処理装置10は、1チップとして構成される集積回路からなり、リコンフィギュラブル回路12、設定部14、制御部18を備える。
【0020】
リコンフィギュラブル回路12は、機能の変更が可能なALUによる論理回路を複数備えた構造を有する。このようなリコンフィギュラブル回路12は、後述する設定部14から供給される設定データに従って動作する演算回路として機能する。即ちリコンフィギュラブル回路12は、外部からの入力データに対して、前記設定データに従った演算を行い、演算結果を出力する。このリコンフィギュラブル回路12の構成については後で詳しく説明する。なお、リコンフィギュラブル回路12は、本願発明の演算処理回路の一例に相当するものである。
【0021】
設定部14は、リコンフィギュラブル回路12に所望の演算回路を構成するための設定データを供給する。設定部14から設定データを供給することにより、リコンフィギュラブル回路12は所望の演算回路として構成される。この設定データは後述する設定データ生成装置30で生成される。
【0022】
制御部18は、処理装置10の各部、即ち、リコンフィギュラブル回路12、設定部14を制御する。
【0023】
(設定データ生成装置30の構成)
設定データ生成装置30は、リコンフィギュラブル回路12で実現されるべき処理の動作を設定したプログラムを解析し、リコンフィギュラブル回路12にマッピングするための設定データを生成する。この設定データは、リコンフィギュラブル回路12における論理回路の機能や論理回路間の接続関係を定める。設定データ生成装置30により生成された設定データは、設定部14を介してリコンフィギュラブル回路12へ供給される。
【0024】
(リコンフィギュラブル回路12の構成)
図2は、リコンフィギュラブル回路12の構成の一部を示すものである。
【0025】
図2のように、リコンフィギュラブル回路12では、演算器であるALU、選択器であるMUX、D型フリップフロップであるDFF1及びDFF2からなる論理回路(同図ではL11、…、L44として示している)がアレイ状に配列されてなる。
各論理回路内のALUは、設定データに従って演算機能が設定される。例えば、設定データに従って、あるときは加算器、あるときは減算器、論理和演算器、論理積演算器、ビットシフト演算器、…、などとして機能する。
【0026】
各論理回路において、ALUでの演算結果は、MUXへ出力される。MUXに出力されたデータは、DFF1を介して次段の論理回路のALUに入力される。また、各ALUの演算結果は、DFF2を介して、同列次段の論理回路内のMUXへも出力される(以後、このようなDFF2を介して次段の論理回路へ出力されるデータのことを「遅延出力データ」と呼ぶ)。例えば、論理回路L11のALUによる演算結果は、L11のMUXだけでなく、L11のDFF2を介して論理回路L12のMUXへも出力される。MUXは、同じ論理回路内にあるALUからの出力データと、前段の論理回路内にあるALUからの出力データを選択して出力する。例えば、論理回路L12のMUXは、L12内のALUからの出力と、L11内のALUからの出力を選択して出力する。
【0027】
尚、リコンフィギュラブル回路12では、各論理回路のDFF1からの出力データは、同列次段、及び左右列次段の3つの論理回路のみに入力される。即ち、回路規模の小型化を図るために論理回路からの出力の接続先を制限した、いわゆる「接続制限」を有する構成となっている。また、遅延出力は次段同列の論理回路に入力されるよう構成される。
【0028】
なお、図2は、リコンフィギュラブル回路12の構成の説明を簡略化するために、16個の論理回路からなる例を示したが、数十、数百、あるいはそれ以上の多数の論理回路を備えるものも本発明の権利範囲であることは、明らかである。同様に、16個未満の論理回路からなる論理回路も本発明の権利範囲である。
【0029】
(リコンフィギュラブル回路12を用いた倍長演算の例)
図3を参照して、リコンフィギュラブル回路12を用いた倍長演算の実行例を説明する。ここでは、リコンフィギュラブル回路12の各論理回路のALUの演算ビット幅が16ビットであると仮定し、32ビット変数同士の加算A+Bを行う場合を説明する。いま、32ビット変数Aの上位16ビットをAH、下位16ビットをAL、32ビット変数Bの上位16ビットをBH、下位16ビットをBLとしたとき、A+Bの演算は、下位ビット同士の加算AL+BLと、上位ビット同士の加算AH+BHとに分けて行われる。ここでは、論理回路L11内のALUから出力されるデータをAL、論理回路L12内のALUから出力されるデータをAH、論理回路L21内のALUから出力されるデータをBL、論理回路L22内のALUから出力されるデータをBHとする。
【0030】
まず、下位ビットの演算を説明する。論理回路L11内のALUから出力されるALは、L11内のDFF2を介して論理回路L12内のMUXへ入力される。このMUXでは、このALが選択されてL12内のDFF1へ出力される。そして、このDFF1を介して、L13内のALUへ出力される。
【0031】
一方、論理回路L21内のALUから出力されるBLは、L21内のDFF2を介して論理回路L22内のMUXへ入力される。このMUXでは、このBLが選択されてL22内のDFF1へ出力される。そして、このDFF1を介して、論理回路L13内のALUへ出力される。このALUではALとBLの加算が行なわれる。
【0032】
上記のような構成により、論理回路L13内のALUを用いて、2段上に配置された論理回路L11、及びL21のALUからの出力に対する加算処理を行うことができる。
即ち、加算演算を行うALUが属する論理回路L13の同列前段にある論理回路L12のMUXが、同じ論理回路L12のALUの出力ではなく、その同列前段にある論理回路L11のALUの出力を選択する。また、論理回路L13の右上段にある論理回路L22のMUXが、同じ論理回路L22のALUの出力ではなく、その同列前段にある論理回路L21のALUの出力を選択する。このようにして、2段上に配置された論理回路L11、及びL21の出力に対する加算処理を行うことができるのである。
【0033】
次に、上位ビットの演算を説明する。論理回路L12内のALUから出力されるAHは、L12内のDFF2を介して論理回路L13のMUXへ入力される。このMUXでは、このAHが選択されてL13内のDFF1へ出力される。そして、このDFF1を介して、論理回路L14内のALUへ出力される。
【0034】
一方、論理回路L22内のALUから出力されるBHはL22内のDFF2を介して論理回路L23のMUXへ入力される。このMUXでは、このBHが選択されてL23内のDFF1へ出力される。そして、このDFF1を介して、論理回路L14内のALUへ出力される。そして、このALUではAHとBHの加算が行なわれる。
【0035】
上記のような構成により、論理回路L14中のALUを用いて、2段上に配置された論理回路L12、及びL22のALUからの出力に対する加算処理を行うことができる。即ち、加算演算を行うALUが割り当てられる論理回路L14の同列前段にある論理回路L13のMUXが、同じ論理回路L13のALUの出力ではなく、その同列前段にある論理回路L12のALUの出力を選択するように構成することで、このような加算処理を行うことができる。
【0036】
以上のようにして、リコンフィギュラブル回路12による倍長演算が実行できる。
【0037】
一方、単精度演算を行う場合、即ち、リコンフィギュラブル回路12の各論理回路のALUの演算ビット幅と変数のビット数が等しい場合の演算を行う場合、MUXは前段の論理回路中のDFF2からの入力データではなく、同じ論理回中の演算器からの入力データを選択するようにすればよい。
【0038】
図4を参照して、リコンフィギュラブル回路12を用いて単精度演算を行う例を説明する。図3での例と同様、リコンフィギュラブル回路12の各論理回路のALUの演算ビット幅が16ビットであると仮定し、16ビット変数同士の加算A+Bを行う場合を説明する。いま、論理回路L11内のALUから出力されるデータをA、論理回路L12内のALUから出力されるデータをBとする。
【0039】
論理回路L11内のMUXは、論理回路L11内のALUから出力されるAを選択して、L11内のDFF1に出力する。そして、このDFF1を介して、論理回路L12内のALUへ出力される。
【0040】
一方、論理回路L21内のMUXは、論理回路L21内のALUから出力されるBを選択して、L21内のDFF1に出力する。そして、このDFF1を介して、論理回路L12内のALUへ出力される。そして、このALUではAとBの加算が行なわれる。
【0041】
上記のようにして、リコンフィギュラブル回路12では単精度演算も行うことができる。
【0042】
このように、リコンフィギュラブル回路12では、選択器MUXが、単精度演算時は同じ論理回路内のALUからの出力を選択し、倍長演算時は前段同列の論理回路のALUからの出力を選択する、といったように選択を切り替えることで、単精度と倍精度の両方の演算が実現できる。
【0043】
また、リコンフィギュラブル回路12によれば、いわゆる「接続制限」を有するリコンフィギュラブル回路において、図3のように単精度演算で処理可能である演算の場合、図2のように縦方向に2倍した演算配置にすることによって、同じ接続制限下で倍長演算が実現できるので、倍長演算の効率化を実現できる。
【0044】
なお、図2〜4では図示していないが、下位ビットの加算を行う論理回路L13内のALUでのキャリーは、上位ビットの加算を行う論理回路L14内のALUに入力される。従って、倍長演算を行う場合は、論理回路L14内のALUでは、AHとBHに加えて、L13内のALUのキャリーを加算する。これにより、倍長の加算処理が正しく実行することができる。
【0045】
(演算器の構成)
リコンフィギュラブル回路12の各ALU内部の構成について、以下に説明する。
図5は、リコンフィギュラブル回路12の各論理回路内にあるALUの内部構成を示したものである。ここでは、ALUに加算機能を割り当てた場合を説明する。この場合のALUの機能は、等価的には選択器であるMUX3と加算器a1により記述できる。まず、MUX3には下位からのキャリー入力と0(ゼロ)が入力され、これらを選択して加算器a1へ出力する。ALUが最下位ビットの加算を行うものであれば、MUX3は0を選択して出力する。ALUが最下位ビットの加算を行うものでない場合は、MUX3は下位からのキャリー入力を選択して出力する。加算器a1には、入力1、2及びMUX3の出力が入力される。そして、これらの加算結果、及びキャリー出力が出力される。このような演算器をリコンフィギュラブル回路12の論理回路中のALUとして用いることで、上述した倍長の加算演算が可能となる。
【0046】
なお、リコンフィギュラブル回路12に演算を割り当てる際、例えばリコンフィギュラブル回路12の奇数段では下位ビットの演算又は単精度演算を行い、偶数段では上位ビットの演算又は単精度演算を行う、というように割り当てる場合は、奇数段においてはキャリー入力をゼロに固定できるため選択器MUXm1が省略できる。このようにALUを下位演算用、上位演算用というように割り当てを限定することで、各論理回路内のALUの回路規模の削減が可能となる。
【0047】
<第2の実施形態>
(リコンフィギュラブル回路12Aの構成)
図6のリコンフィギュラブル回路12Aでも倍長演算と単精度演算の両方が可能である。このリコンフィギュラブル回路12Aは、図2のリコンフィギュラブル回路12のように4段の構成とする代わりに1段構成でループバックさせる構成である。リコンフィギュラブル回路12Aには、所定時間ごとに設定部14(図1参照)から設定データが供給される。そして、リコンフィギュラブル回路12Aを構成する各論理回路は、この設定部14から供給される設定データに従って動作する。このようなリコンフィギュラブル回路12Aを用いても、倍長の加算(A+B)を実行することができる。以下、その手順を説明する。
【0048】
まず、第1のタイミングにおいて、L1のALUからはALが、L2のALUからはBLが出力される。L1のALUから出力されるALは、L1のDFF2へ出力される。L2のALUから出力されるBLは、L2のDFF2へ出力される。L1、L2それぞれのDFF2は、それぞれAL、BLを保持(一時的に格納)する。即ち、第1のタイミングでは、L1、L2のそれぞれは、図3でいうところのL11、L21と同じように機能する。
【0049】
次に第2のタイミングでは、L1のALUからAHが、L2のALUからBHが出力される。このとき、L1のDFF2で格納されていたALはL1のMUXへ出力され、L2のDFF2で格納されていたBLはL2のMUXへ出力される。L1のALUからは、AHがL1のMUXとDFF2の両方へ出力される。L1のMUXは、AHとALのうち、ALの方を選択してDFF1へ出力するよう設定される。同様に、L2のALUからは、BHがL2のMUXとDFF2の両方へ出力される。L2のMUXは、BHとBLのうち、BLの方を選択してDFF1へ出力するよう設定される。従って、L1のDFF1にはALが、DFF2にはAHが格納され、L2のDFF1にはBLが、DFF2にはBHが格納されることとなる。即ち、第2のタイミングでは、L1、L2のそれぞれは、図3でいうところのL12、L22と同じように機能する。
【0050】
次に第3のタイミングにおいて、L1のALUには加算機能が設定される。このとき、L1のDFF2で格納されていたAHはL1のMUXへ出力され、L2のDFF2で格納されていたBHはL2のMUXへ出力される。また、L1のDFF1で格納されていたAL、L2のDFF1で格納されていたBLは、L1のALUへ出力される。L1のALUからは、ALとBLの加算結果がL1のMUXとDFF2の両方へ出力される。L1のMUXは、上記加算結果と、AHのうち、AHの方を選択してDFF1へ出力するよう設定される。また、L2のMUXは、2入力のうち、BHの方を選択してDFF1へ出力するよう設定される。即ち、第3のタイミングでは、L1、L2のそれぞれは、図3でいうところのL13、L23と同じように機能する。
【0051】
次に第4のタイミングにおいて、L1のALUには加算機能が設定される。このとき、L1のDFF1で格納されていたAH、L2のDFF1で格納されていたBHは、L1のALUへ出力される。L1のALUからは、AHとBHの加算結果が出力される。即ち、第4のタイミングでは、L1、L2のそれぞれは、図3でいうところのL14、L24と同じように機能する。
【0052】
即ち、リコンフィギュラブル回路12Aは、1段構成でループバックさせる構成とし、設定部14が供給する設定データに従ってALUの機能やMUXの動作を各タイミングで切り換えることで、倍長演算を実現するものである。
【0053】
<第3の実施形態>
(リコンフィギュラブル回路12Bの構成)
図7のようなリコンフィギュラブル回路12Bでは、3倍長演算、倍長演算、並びに単精度演算が実行可能である。このリコンフィギュラブル回路12Bは、演算器であるALU、選択器であるMUX、及び、D型フリップフロップであるDFF1、DFF2及びDFF3からなる論理回路(同図ではL11、…、L16、L21、…L26、L31、…として示している)がアレイ状に配列されてなる。
【0054】
各論理回路において、ALUからの出力は、MUX及びDFF3へ出力される。
DFF3からの出力は、同列次段にあるMUX及びDFF2へ出力される。例えば、L11のDFF3からの出力は、L12のMUX及びDFF2へ出力される。
【0055】
各論理回路のMUXは、同じ論理回路のALUからの出力、前段の論理回路のDFF2からの出力、又は前段の論理回路のDFF3からの出力、の3入力のいずれか1つを選択して同じ論理回路内のDFF1へ出力する。例えば、L13のMUXは、L13のALU、L12のDFF2、L12のDFF3のいずれか1つを選択して、L13のDFF1へ出力する。ここで、L12のDFF2には、L11のALUからの出力がL11のDFF3を介して入力されている。従って、L13のMUXがL12のDFF2からの入力を選択することは、L11のALUの出力を選択することに相当する。また、L12のDFF3には、L12のALUからの出力が入力されている。従って、L13のMUXがL12のDFF3からの入力を選択することは、L12のALUの出力を選択することに相当する。したがって、各論理回路のMUXは、同じ論理回路のALUからの出力、前段のALUからの出力、又は前々段のALUからの出力のいずれか1つを選択してDFF1へ出力することができる。
【0056】
そして、DFF1からの出力は、同列次段、右隣列次段、及び左隣列次段にある3つの論理回路のALUに入力される。例えば、L21のDFF1の出力はL12のALU、L22のALU、及びL32のALUへ出力される。
【0057】
(リコンフィギュラブル回路12Bを用いた3倍長演算の例)
図8を参照して、リコンフィギュラブル回路12Bを用いた、3倍長演算の実行例を説明する。
【0058】
ここでは、リコンフィギュラブル回路12Bの各論理回路にあるALUの演算ビット幅が16ビットであると仮定し、48ビット変数同士の加算A+Bを行う場合を説明する。いま、48ビット変数Aの上位16ビットをAH、中位16ビットをAM、下位16ビットをAL、48ビット変数Bの上位16ビットをBH、中位16ビットをBM、下位16ビットをBLとすると、A+Bの演算は、下位ビット同士の加算AL+BL、中位ビット同士の加算AM+BM、及び上位ビット同士の加算AH+BHに分けて行われる。
【0059】
ここでは、L11内のALUからの出力をAL、L12内のALUからの出力をAM、L13内のALUからの出力をAH、L21内のALUからの出力をBL、L22内のALUからの出力をBM、L23内のALUからの出力をBHとする。
【0060】
まず、下位ビットの演算を説明する。L11のALUから出力されるALは、L11のDFF3、L12のDFF2を介してL13のMUXへ入力される。このMUXでは、このALが選択されてL13のDFF1へ出力される。そして、このDFF1を介して、L14のALUへ出力される。
【0061】
一方、L21のALUから出力されるBLは、L21のDFF3、L22のDFF2を介してL23のMUXへ入力される。このMUXでは、このBLが選択されてL23のDFF1へ出力される。そして、このDFF1を介して、L14のALUへ出力される。そして、L14のALUではALとBLの加算が行なわれる。
【0062】
上記のような構成により、L14内のALUを用いて、3段上に配置された論理回路L11、及びL21の出力に対する加算処理を行うことができる。
【0063】
即ち、下位ビットの加算演算を行うALUが属するL14の同列前段にあるL13のMUXが、同じ論理回路L13のALUの出力ではなく、その同列前々段にあるL11のALUの出力を選択する。また、L14の右上段にあるL23のMUXが、L23のALUの出力ではなく、その同列前々段にあるL21のALUの出力を選択する。このようにして、3段上に配置された論理回路L11、及びL21の出力に対する加算処理を行うことができるのである。
【0064】
次に、中位ビットの演算を説明する。L12のALUから出力されるAMは、L12のDFF3、L13のDFF2を介してL14のMUXへ入力される。このMUXでは、このAMが選択されてL14のDFF1へ出力される。そして、このDFF1を介して、L15のALUへ出力される。
【0065】
一方、L22のALUから出力されるBMは、L22のDFF3、L23のDFF2を介してL24のMUXへ入力される。このMUXでは、このBMが選択されてL24のDFF1へ出力される。そして、このDFF1を介して、L15のALUへ出力される。そして、L15のALUではAMとBMの加算が行われる。
【0066】
即ち、中位ビットの加算演算を行うALUが属するL15の同列前段にあるL14のMUXが、同じ論理回路L14のALUの出力ではなく、その同列前々段にあるL12のALUの出力を選択する。また、L15の右上段にあるL24のMUXが、L24のALUの出力ではなく、その同列前々段にあるL22のALUの出力を選択する。このようにして、3段上に配置された論理回路L12、及びL22の出力に対する加算処理を行うことができるのである。
【0067】
次に、上位ビットの演算を説明する。L13のALUから出力されるAHは、L13のDFF3、L14のDFF2を介してL15のMUXへ入力される。このMUXでは、このAHが選択されてL15のDFF1へ出力される。そして、このDFF1を介して、L16のALUへ出力される。
【0068】
一方、L23のALUから出力されるBHは、L23のDFF3、L24のDFF2を介してL25のMUXへ入力される。このMUXでは、このBHが選択されてL25のDFF1へ出力される。そして、このDFF1を介して、L16のALUへ出力される。そして、L16のALUではAHとBHの加算が行われる。
【0069】
即ち、上位ビットの加算演算を行うALUが属するL16の同列前段にあるL15のMUXが、同じ論理回路L15のALUの出力ではなく、その同列前々段にあるL13のALUの出力を選択する。また、L16の右上段にあるL25のMUXが、L25のALUの出力ではなく、その同列前々段にあるL23のALUの出力を選択する。このようにして、3段上に配置された論理回路L13、及びL23の出力に対する加算処理を行うことができるのである。
【0070】
このようにして、下位ビットの演算を行う論理回路、中位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、3倍長の演算が可能となるのである。
【0071】
(リコンフィギュラブル回路12Bを用いた倍長演算の例)
図9を参照して、リコンフィギュラブル回路12Bによる倍長演算の実行例を説明する。
【0072】
リコンフィギュラブル回路12Bの各論理回路にあるALUの演算ビット幅は16ビットであるときに、32ビット変数同士の加算A+Bを行う場合を説明する。32ビット変数Aの上位16ビットをAH、下位16ビットをAL、32ビット変数Bの上位16ビットをBH、下位16ビットをBLとすると、A+Bの演算は、下位ビット同士の加算AL+BL、上位ビット同士の加算AH+BHに分けて行われる。
【0073】
ここでは、L11内のALUからの出力をAL、L12内のALUからの出力をAH、L21内のALUからの出力をBL、L22内のALUからの出力をBHとする。
【0074】
まず、下位ビットの演算を説明する。L11のALUから出力されるALは、L11のDFF3を介してL12のMUXへ入力される。このMUXでは、このALが選択されてL12のDFF1へ出力される。そして、このDFF1を介して、L13のALUへ出力される。
【0075】
一方、L21のALUから出力されるBLは、L21のDFF3を介してL22のMUXへ入力される。このMUXでは、このBLが選択されてL22のDFF1へ出力される。そして、このDFF1を介して、L13のALUへ出力される。そして、L13のALUではALとBLの加算が行なわれる。
【0076】
上記のような構成により、L13内のALUを用いて、2段上に配置された論理回路L11、及びL21の出力に対する加算処理を行うことができる。
【0077】
即ち、下位ビットの加算演算を行うALUが属するL13の同列前段にあるL12のMUXが、同じ論理回路L12のALUの出力ではなく、その前段にあるL11のALUの出力を選択する。また、L13の右上段にあるL22のMUXが、L22のALUの出力ではなく、その前段にあるL21のALUの出力を選択する。このようにして、2段上に配置された論理回路L11、及びL21の出力に対する加算処理を行うことができるのである。
【0078】
次に、上位ビットの演算を説明する。L12のALUから出力されるAHは、L12のDFF3を介してL13のMUXへ入力される。このMUXでは、このAHが選択されてL13のDFF1へ出力される。そして、このDFF1を介して、L14のALUへ出力される。
【0079】
一方、L22のALUから出力されるBHは、L22のDFF3を介してL23のMUXへ入力される。このMUXでは、このBHが選択されてL23のDFF1へ出力される。そして、このDFF1を介して、L14のALUへ出力される。そして、L14のALUではAHとBHの加算が行われる。
【0080】
即ち、上位ビットの加算演算を行うALUが属するL14の同列前段にあるL13のMUXが、同じ論理回路L13のALUの出力ではなく、その前段にあるL12のALUの出力を選択する。また、L14の右上段にあるL23のMUXが、L23のALUの出力ではなく、その前段にあるL22のALUの出力を選択する。このようにして、2段上に配置された論理回路L12、及びL22の出力に対する加算処理を行うことができるのである。
【0081】
このようにして、下位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、倍長の演算も可能となるのである。
【0082】
(リコンフィギュラブル回路12Bを用いた単精度演算の例)
図10を参照して、リコンフィギュラブル回路12Bによる単精度演算の実行例を説明する。
【0083】
リコンフィギュラブル回路12Bの各論理回路にあるALUの演算ビット幅は16ビットであるときに、16ビット変数同士の加算A+Bを行う場合を説明する。L11内のALUからの出力をA、L21内のALUからの出力をBとする。
【0084】
L11のALUから出力されるAは、L11のMUXへ入力される。このMUXでは、このAが選択されてL11のDFF1へ出力される。そして、このDFF1を介して、L12のALUへ出力される。
【0085】
一方、L21のALUから出力されるBは、L21のMUXへ入力される。このMUXでは、このBが選択されてL21のDFF1へ出力される。そして、このDFF1を介して、L12のALUへ出力される。そして、L12のALUではAとBの加算が行なわれる。
【0086】
これにより、L12内のALUを用いて、単精度の加算演算を行うことができる。即ち、加算演算を行うALUが属するL12の同列前段にあるL11のMUXが、同じ論理回路L11のALUを選択する。また、L12の右上段にあるL21のMUXが、L21のALUの出力を選択する。このようにして、リコンフィギュラブル回路12Bでは、単精度の加算演算も行うことができるのである。
【0087】
このようにリコンフィギュラブル回路12Bでは、各論理回路内に設けられたMUXへの入力の選択を制御することにより、3倍長、倍長、単精度演算の切り換えが可能となるのである。
【0088】
<第4の実施形態>
(リコンフィギュラブル回路12Cの構成)
図11のようなリコンフィギュラブル回路12Cでも、3倍長、倍長、単精度演算すべての演算が可能である。このリコンフィギュラブル回路12Cは、演算器であるALU、選択器であるMUX、及び、D型フリップフロップであるDFF1、DFF2及びDFF3からなる論理回路(同図ではL11、…、L16、L21、…L26、L31、…として示している)がアレイ状に配列されてなる。
【0089】
各論理回路において、ALUからの出力は、MUX1、MUX2及びDFF3へ出力される。
【0090】
各論理回路のMUX1は、同じ論理回路のALUからの出力、前段のDFF2からの出力、のいずれか1つを選択して同じ論理回路内のDFF1へ出力する。例えば、論理回路L13のMUX1は、L13のALU、L12のDFF2からの出力のいずれかを選択して、L13のDFF1へ出力する。
【0091】
各論理回路のMUX2は、同じ論理回路のALUからの出力、前段のDFF3からの出力、のいずれか1つを選択して同じ論理回路内のDFF2へ出力する。例えば、論理回路L13のMUX2は、L13のALU、L12のDFF3からの出力のいずれかを選択して、L13のDFF2へ出力する。
【0092】
また、DFF3からの出力は、次段の論理回路のMUX2へ出力される。
【0093】
(リコンフィギュラブル回路12Cを用いた3倍長演算の例)
図12を参照して、リコンフィギュラブル回路12Cを用いた、3倍長演算の実行例を説明する。
【0094】
リコンフィギュラブル回路12Cの各論理回路にあるALUの演算ビット幅が16ビットであると仮定し、48ビット変数同士の加算A+Bを行う場合を説明する。いま、48ビット変数Aの上位16ビットをAH、中位16ビットをAM、下位16ビットをAL、Bの上位16ビットをBH、中位16ビットをBM、下位16ビットをBLとする。そして、L11、L12、L13のALUからの出力をそれぞれ、AL、AM、AHとし、L21、L22、L23のALUからの出力をそれぞれ、BL、BM、BHとする。
【0095】
まず、下位ビットの演算を説明する。L11のALUから出力されるALは、DFF3、L12のMUX2、DFF2、L13のMUX1、DFF1を介して、L14のALUへ出力される。
【0096】
一方、L21のALUから出力されるBLは、L21のDFF3、L22のMUX2、DFF2、L23のMUX1、DFF1を介してL14のALUへ出力される。そして、L14のALUではALとBLの加算が行われる。
【0097】
次に、中位ビットの演算を説明する。L12のALUから出力されるAMは、DFF3、L13のMUX2、DFF2を介してL14のMUX1、DFF1を介して、L15のALUへ出力される。
【0098】
一方、L22のALUから出力されるBMは、L22のDFF3、L23のMUX2、DFF2、L24のMUX1、DFF1を介してL15のALUへ出力される。そして、L15のALUではAMとBMの加算が行われる。
【0099】
次に、上位ビットの演算を説明する。L13のALUから出力されるAHは、DFF3、L14のMUX2、DFF2、L15のMUX1、DFF1を介して、L16のALUへ出力される。
【0100】
一方、L23のALUから出力されるBHは、L23のDFF3、L24のMUX2、DFF2、L25のMUX1、DFF1を介してL16のALUへ出力される。そして、L16のALUではAHとBHの加算が行われる。
【0101】
このようにして、下位ビットの演算を行う論理回路、中位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、3倍長の演算が可能となるのである。
【0102】
(リコンフィギュラブル回路12Cを用いた倍長演算の例)
図13を参照して、リコンフィギュラブル回路12Cによる倍長演算の実行例を説明する。
【0103】
リコンフィギュラブル回路12Cの各論理回路にあるALUの演算ビット幅は16ビットであるときに、32ビット変数同士の加算A+Bを行う場合を説明する。32ビット変数Aの上位16ビットをAH、下位16ビットをAL、32ビット変数Bの上位16ビットをBH、下位16ビットをBLとする。そして、L11、L12のALUからの出力をそれぞれ、AL、AHとし、L21、L22のALUからの出力をそれぞれ、BL、BHとする。
【0104】
まず、下位ビットの演算を説明する。L11のALUから出力されるALは、L11のMUX2、DFF2、L12のMUX1、DFF1を介して、L13のALUへ出力される。一方、L21のALUから出力されるBLは、L21のMUX2、DFF2、L22のMUX1、DFF1を介して、L13のALUへ出力される。そして、L13のALUではALとBLの加算が行われる。
【0105】
次に、上位ビットの演算を説明する。L12のALUから出力されるAHは、L12のMUX2、DFF2、L13のMUX1、DFF1を介して、L14のALUへ出力される。一方、L22のALUから出力されるBHは、L22のMUX2、DFF2、L23のMUX1、DFF1を介して、L14のALUへ出力される。そして、L14のALUではAHとBHの加算が行われる。
【0106】
このようにして、下位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、倍長の演算も可能となるのである。
【0107】
(リコンフィギュラブル回路12Cを用いた単精度演算の例)
図14を参照して、リコンフィギュラブル回路12Cによる単精度演算の実行例を説明する。
【0108】
リコンフィギュラブル回路12Cの各論理回路にあるALUの演算ビット幅は16ビットであるときに、16ビット変数同士の加算A+Bを行う場合を説明する。L11のALUからの出力をA、L21のALUからの出力をBとする。
【0109】
L11のALUから出力されるAは、L11のMUX1、DFF1を介して、L12のALUへ出力される。一方、L21のALUから出力されるBは、L21のMUX1、DFF1を介して、L12のALUへ出力される。そして、L12のALUではAとBの加算が行なわれる。これにより、単精度の加算演算を行うことができる。
このようにリコンフィギュラブル回路12Cでは、各論理回路内に設けられた選択器MUX1、MUX2を制御することにより、3倍長、倍長、単精度演算の切り換えが可能となるのである。
【0110】
<第5の実施形態>
(リコンフィギュラブル回路12Dの構成)
本実施形態は、倍長シフト演算と、単精度のシフト演算の両方が可能な演算が可能なリコンフィギュラブル回路12Dに関する。
【0111】
図15を参照して、リコンフィギュラブル回路12Dは、バレルシフタとして機能する演算器であるALU、選択器であるMUX、及び、D型フリップフロップであるDFF1、DFF2なる論理回路(同図ではL11、…、L44として表示)がアレイ状に配列されてなる。
【0112】
各論理回路において、ALUは2つの出力を有する。第1の出力は、MUXへ出力される。第2の出力はMUXとDFF2の両方へ出力される。なお、第1の出力、第2の出力が何であるかについては後で詳しく説明する。
【0113】
各論理回路のMUXは、ALUからの第1の出力又は第2の出力のいずれかを選択してDFF1へ出力する。
【0114】
DFF1からの出力は(同列又は左右の列に位置する)次段の論理回路(のALU)へ出力される。一方、DFF2からの出力は、同列次段にある論理回路(のALU)へ出力される。
【0115】
(リコンフィギュラブル回路12Dにおける論理回路のALUの構成)
図16は、リコンフィギュラブル回路12Dにおける論理回路のALUの構成図である。このALUは、バレルシフタと、選択器であるMUX1、MUX2を備えている。また、各ALUは、入力1、入力2、遅延入力の3入力を有する。入力1、入力2は、前段のいずれかの論理回路のDFF1から出力されたデータのことをいう。遅延入力とは、前段の同列の論理回路のDFF2から出力されたデータのことをいう。なお、入力1、入力2、遅延入力はいずれも16ビットであるとし、バレルシフタは32ビットデータに対するシフト演算が可能であるとする。また、各MUXは16ビットデータに対応するものとする。
【0116】
MUX1は、入力1と、0(ゼロ)のいずれかを選択してバレルシフタへ出力する。MUX2は、遅延入力と、0(ゼロ)のいずれかを選択してバレルシフタへ出力する。
【0117】
バレルシフタには、MUX1からの出力、MUX2からの出力、並びに入力2、の3つの16ビットデータの入力がなされる。バレルシフタは、MUX2からのデータを下位16ビットデータとし、入力2を上位16ビットデータとして結合した32ビットデータに対し、MUX1から指定されたビット数だけシフトする演算を行う。そして、シフト演算された32ビットデータのうち、上位16ビットは、MUX及びDFF2へ出力される。下位16ビットについてはMUXへ出力される。
【0118】
(リコンフィギュラブル回路12Dによる倍長演算の例)
図17を参照して、リコンフィギュラブル回路12Dによる倍長演算の実行例を説明する。ここでは、上位16ビットをd2、下位16ビットをd1とするデータに対し、列方向に隣接して配置された論理回路L(x)(y)と、L(x)(y+1)を用いて倍長のビットシフト演算を行う場合を説明する。
【0119】
まず、L(x)(y)のMUX2は遅延入力であるデータd2を選択する。そして、バレルシフタには、入力2であるデータd1と、データd2とが結合された形で入力される。即ち、バレルシフタには、データd1を上位16ビット、データd2を下位16ビットとした32ビットデータが入力される。
【0120】
一方、MUX1は、0を選択してバレルシフタへ出力する。従って、バレルシフタはシフト演算を行わずに上位16ビット(即ちd1)をDFF2とMUXへ出力し、下位16ビット(即ちd2)をMUXへ出力する。MUXは、下位16ビット(データd2)を選択してDFF1へ出力する。
【0121】
次に、L(x)(y+1)のMUX2は遅延入力(データd1)を選択する。そして、バレルシフタには、入力2(データd2)を上位16ビット、データd1を下位16ビットとした32ビットデータが入力される。
【0122】
一方、MUX1は、入力1であるデータsを選択してバレルシフタへ出力する。そして、バレルシフタは、上記の32ビットデータに対してsビットシフト(ここでは右シフトとする)させる。そして、バレルシフタからは、sビットシフトさせた32ビットデータの上位16ビットがDFF2とMUXに出力され、下位16ビットがMUXへ出力される。
【0123】
以上のようにして、リコンフィギュラブル回路12Dにより、倍長のバレルシフト演算が可能となる。
【0124】
(リコンフィギュラブル回路12Dによる単精度演算の例)
図18を参照して、リコンフィギュラブル回路12Dによる単精度演算の実行例を説明する。ここでは、データd1に対し、単精度のバレルシフト演算を行う場合を説明する。
【0125】
まず、MUX2は(遅延入力ではなく)0を選択する。そして、バレルシフタには、入力2(データd1)を上位16ビット、0を下位16ビットとした32ビット形式のデータが入力される。
【0126】
一方、MUX1は、入力1(データs)を選択してバレルシフタへ出力する。従って、バレルシフタは、上記の32ビット形式のデータに対してsビットシフト(ここでは右シフトとする)させる。そして、バレルシフタからは、sビットシフトさせたデータの上位16ビットがDFF2とMUXに、下位16ビットがMUXへ出力される。MUXは、上位、下位のうち上位16ビットを選択してDFF1に出力する。なお、DFF1からの出力は、次段の同列又は左右列の論理回路へ入力される。即ち、データd1をsビットシフトさせたデータが次段の論理回路へ出力されることとなる。
【0127】
以上のようにして、リコンフィギュラブル回路12Dにより、単精度のバレルシフト演算が可能となる。さらに、MUX2に0を選択させることでバレルシフタの下位16ビットには0が入力されるので、右シフト演算時だけでなく左シフト演算時も正しく演算することが可能となる。
【0128】
リコンフィギュラブル回路12Dによれば、倍長のバレルシフタ1つで、単精度と倍精度の両方に対応するシフト演算を実現することができるので、単精度と倍精度の2つのバレルシフタを持つ場合と比較して回路規模を削減することができる。
【0129】
なお、上記リコンフィギュラブル回路12Dでは、入力1、入力2は、前段の論理回路のDFF1から出力されたデータであるとしたが、これに限られるものではなく、例えば、単なる定数入力、もしくはリコンフィギュラブル回路内に設けられた図示しない状態保持回路(RAMなど)から入力されるデータなどが入力されるものであっても良い。
【0130】
<第6の実施形態>
(リコンフィギュラブル回路12Eの構成)
図19のようなリコンフィギュラブル回路12Eを用いてもバレルシフト演算が可能である。リコンフィギュラブル回路12Eは、リコンフィギュラブル回路12Dと比較して、奇数段にある論理回路(L11、L21、L31、L41、L13、L23、L33、L43)の構成が相違する。リコンフィギュラブル回路12Eでは、奇数段にある論理回路L(x)(2y−1)と、偶数段にある論理回路L(x)(2y)の2個の論理回路をペアとして使用することで倍長のバレルシフト演算が可能である。
【0131】
図20は、リコンフィギュラブル回路12Eの奇数段に配置される論理回路L(x)(2y−1)の構成を示す図である。この論理回路L(x)(2y−1)は、ALUの内部が、選択器MUX2を備えない点、バレルシフタが32ビット対応でなく、16ビット対応である点で、リコンフィギュラブル回路12Dの各論理回路のALUと相違する。
なお、リコンフィギュラブル回路12Eの偶数段に配置される論理回路L(x)(2y)の構成は、リコンフィギュラブル回路12Dの各論理回路のALUと同じである。
【0132】
(リコンフィギュラブル回路12Eによる倍長演算の例)
図21を参照して、リコンフィギュラブル回路12Eによる倍長演算の実行例を説明する。ここでは、上位16ビットをd2、下位16ビットをd1とする32ビットデータに対し、論理回路L(x)(2y-1)と、その同列次段にあるL(x)(2y)を用いて倍長のビットシフト演算を行う場合を説明する。
【0133】
まず、L(x)(2y-1)での動作を説明する。L(x)(2y-1)のバレルシフタには入力2としてL(x)(2y-1)に入力されたデータd1が入力される。ALU内のMUX1は(入力1ではなく)0を選択してバレルシフタへ出力する。従って、バレルシフタからはデータd1がそのまま(ビットシフトされないまま)MUX及びDFF2の両方へ出力される。
【0134】
一方、MUXには、前記のバレルシフタからの出力と、遅延入力としてL(x)(2y-1)に入力されたデータd2とが入力されるが、MUXは、このうちデータd2を選択してDFF1へ出力する。DFF1から出力されるd2はL(x)(2y)へ出力される。DFF2から出力されるd1は、遅延出力としてL(x)(2y)へ出力される。
【0135】
次に、L(x)(2y) での動作を説明する。L(x)(2y)のMUX1には、入力1としてL(x)(2y)に入力されたデータsと、0とが入力されるが、MUX1はデータsを選択してバレルシフタへ出力する。MUX2は、遅延入力(上記の遅延出力であるd1)と0のうち、データd1を選択してバレルシフタへ出力する。バレルシフタには、入力2(上記のd2)を上位16ビット、データd1を下位16ビットとした32ビットデータが入力される。
【0136】
そして、バレルシフタからは、この32ビットデータをsビットシフトさせたデータのうち、上位16ビットをDFF2とMUXに出力し、下位16ビットをMUXへ出力する。このようにして、リコンフィギュラブル回路12Eよっても、倍長のバレルシフト演算が可能となる。
【0137】
即ち、リコンフィギュラブル回路12Dでは、任意の段の論理回路とその次段同列の論理回路を用いて倍長シフト演算を実行可能であるのに対し、このリコンフィギュラブル回路12Eでは、奇数段とその次段である偶数段にある2つの論理回路を用いて倍長シフト演算をさせている。即ち、「任意の段」を奇数段に、「その次段」の偶数段に、というふうに配置を限定することにより、奇数段に配置される論理回路のバレルシフタが単精度でまかなうことができる(この例では32ビットではなく、16ビットで済む)ので、回路規模を小型化することができる。
【0138】
<第7の実施形態>
(リコンフィギュラブル回路12Fの構成)
図22は、単精度演算と倍長演算の両方を行うことができると共に、単精度演算の結果を倍長演算へ供給することができるリコンフィギュラブル回路12Fの構成を示すものである。このリコンフィギュラブル回路12Fは、演算ビット幅が16ビットであるものとする。
【0139】
このリコンフィギュラブル回路12Fは、2段目の論理回路(L12、…L42)に特徴を有する。これらの論理回路は、演算器であるALU、選択器であるMUX1、MUX2、D型フリップフロップであるDFF1、DFF2、並びに符号拡張処理を行うEXを有する。符号拡張処理とは、ここでは、元々16ビット変数であったデータを32ビットに拡張した上で、拡張後の上位16ビットのデータを生成する処理のことをいう。ALUからの出力はMUX1、MUX2、並びにEXへ入力される。EXからの出力はMUX2へ入力される。また、MUX1には、同列前段のDFF2からの出力も入力される。ALUが単精度演算を行う場合、MUX2は、EXを選択してDFF2へ出力する。これにより、DFF2からは、拡張後変数の上位ビットが出力される。また、MUX1がALUからの入力データを選択した場合、DFF1からは、拡張後変数の下位ビットが出力されこととなる。このように2段目の論理回路では、単精度演算を行った後、符号拡張を行うことで倍長に変換して、上位ビット及び下位ビットに分けて出力するのである。例えば、ALUによる単精度演算の結果が16ビット変数でいうところの0x89abであるとき、EXからの出力は0xffffとなる。従って、この論理回路は0xffff89abなる32ビット変数を出力することとなる。
【0140】
なお、1段目、3段目、4段目の論理回路の構成はリコンフィギュラブル回路12と同じである。
【0141】
(リコンフィギュラブル回路12Fによる演算例)
図23を参照して、リコンフィギュラブル回路12Fによる演算例を説明する。ここでは、、単精度の加算A+B(=Cとする)、及び単精度の加算D+E(=Fとする)を実行したのち、C+Fの倍長加算を行う例を用いて説明する。リコンフィギュラブル回路12Fの各論理回路の演算ビット幅は16ビットであるとし、変数A、B、D、Eもそれぞれ16ビット変数であるとする。
【0142】
まず、論理回路L11、L21、L31、L41のALUからはそれぞれ変数A、B、D、Eが出力されるものとする。
【0143】
L11のMUXはAを選択し、DFF1を介してL22のALUにAが入力される。L21のMUXはBを選択し、DFF1を介してL22のALUにはBも入力される。そして、L22のALUでは、A+Bの単精度加算が実行される。
【0144】
L31のMUXはDを選択し、DFF1を介してL32のALUにDが入力される。L41のMUXはEを選択し、DFF1を介してL32のALUにはEも入力される。そして、L32のALUでは、D+Eの単精度加算が実行される。
【0145】
L22のALUからの出力であるC(=A+B)は、L22のMUX1、MUX2、並びにEXへ出力される。MUX1は、(L21のDFF2からの入力ではなく)、ALUからの出力であるCを選択してDFF1へ出力する。MUX2は、EXからの出力を選択してDFF2へ出力する。その結果、DFF2からは、16ビット変数Cを32ビットに符号拡張したときの上位16ビットであるCHが出力され、DFF1からは、16ビット変数Cを32ビットに符号拡張したときの下位16ビットであるCLが出力される。DFF1から出力されるCLは、L23のALUへ入力される。一方、DFF2から出力されるCHは、L23のMUXを介してL24のALUへ入力される。
【0146】
同様に、L32のALUからの出力であるF(=D+E)は、L32のMUX1、MUX2、並びにEXへ出力される。MUX1は、(L31のDFF2からの入力ではなく)、ALUからの出力であるFを選択してDFF1へ出力する。MUX2は、EXからの出力を選択してDFF2へ出力する。その結果、DFF2からは、16ビット変数Fを32ビットに符号拡張したときの上位16ビットであるFHが出力され、DFF1からは、16ビット変数Fを32ビットに符号拡張したときの下位16ビットであるFLが出力される。DFF1から出力されるFLは、L23のALUへ入力される。一方、DFF2から出力されるFHは、L33のMUXを介してL24のALUへ入力される。
【0147】
その結果、L23のALUではCL+FLの加算演算が実行され、L24のALUではCH+FHの加算演算が実行される。このようにして、リコンフィギュラブル回路12Fでは、単精度演算の実行結果を倍長演算に供給するのである。
【0148】
なお、2段目の論理回路(L12、…、L42)のALUにおいて倍長の演算を行っている場合は、MUX2は、EXからの入力ではなく、ALUからの入力を選択する。このときの動作は、図2を参照して説明した、リコンフィギュラブル回路12と同じである。
【0149】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【0150】
例えば、上記実施例のリコンフィギュラブル回路12等では、各論理回路のDFF1からの出力が次段の一部の論理回路(次段同列、及び次段左右列)に制限されて入力されるよう構成されているが、このような制限のないリコンフィギュラブル回路において本願発明が適用されるものであっても良い。
【0151】
また、上記実施例では、リコンフィギュラブル回路12、12B、12Cなど、段方向と列方向にマトリックス状に構成された複数の論理回路からなるリコンフィギュラブル回路を例に説明したが、列方向に並ぶように構成された複数の論理回路からなるリコンフィギュラブル回路であっても良い。この場合、各論理回路への演算入力は、前段の論理回路のDFF1からの出力の他、リコンフィギュラブル回路の外部からの入力、あるいはリコンフィギュラブル回路内に設けられた状態保持回路からの入力であっても良い。
【0152】
また、1つの論理回路により構成されるリコンフィギュラブル回路であっても良い。このリコンフィギュラブル回路には、リコンフィギュラブル回路12Aと同様、所定時間ごとに(例えば制御部18から周期的に入力されるクロックに従って)設定部14から設定データが供給される。そして、リコンフィギュラブル回路を構成する論理回路は、この設定部14から供給される設定データに従って動作する。論理回路のDFF1からの出力は、次のクロックでの演算に用いる為の演算入力として、この論理回路自身へループバックされる。なお、演算入力としては、論理回路のDFF1の出力からループバックして入力されるものの他、リコンフィギュラブル回路の外部からの入力、あるいはリコンフィギュラブル回路内に設けられた状態保持回路からの入力であっても良い。
【図面の簡単な説明】
【0153】
【図1】本実施の形態に係る処理装置10、設定データ生成装置30の構成を示す図である。
【図2】リコンフィギュラブル回路12の構成を示す図である。
【図3】リコンフィギュラブル回路12を用いた倍長演算の実行例を説明する図である。
【図4】リコンフィギュラブル回路12を用いた単精度演算の実行例を説明する図である。
【図5】リコンフィギュラブル回路12の各論理回路内にあるALUの内部構成を示す図である。
【図6】リコンフィギュラブル回路12Aの構成を示す図である。
【図7】リコンフィギュラブル回路12Bの構成を示す図である。
【図8】リコンフィギュラブル回路12Bを用いた、3倍長演算の実行例を説明する図である。
【図9】リコンフィギュラブル回路12Bによる倍長演算の実行例を説明する図である。
【図10】リコンフィギュラブル回路12Bによる単精度演算の実行例を説明する図である。
【図11】リコンフィギュラブル回路12Cの構成を示す図である。
【図12】リコンフィギュラブル回路12Cによる3倍長演算の実行例を説明する図である。
【図13】リコンフィギュラブル回路12Cによる倍長演算の実行例を説明する図である。
【図14】リコンフィギュラブル回路12Cによる単精度演算の実行例を説明する図である。
【図15】リコンフィギュラブル回路12Dの構成を示す図である。
【図16】リコンフィギュラブル回路12Dにおける論理回路のALUの構成図である。
【図17】リコンフィギュラブル回路12Dによる倍長演算の実行例を説明する図である。
【図18】リコンフィギュラブル回路12Dによる単精度演算の実行例を説明する図である。
【図19】リコンフィギュラブル回路12Eの構成を示す図である。
【図20】リコンフィギュラブル回路12Eの奇数段に配置される論理回路の構成を示す図である。
【図21】リコンフィギュラブル回路12Eによる倍長演算の実行例を説明する図である。
【図22】リコンフィギュラブル回路12Fの構成を示す図である。
【図23】リコンフィギュラブル回路12Fによる演算例を説明する図である。
【符号の説明】
【0154】
10 処理装置
12 リコンフィギュラブル回路
14 設定部
18 制御部
30 設定データ生成装置
【技術分野】
【0001】
この発明は、ALU(Arithmetic Logic Unit)アレイ等を用いた演算処理回路に関する。特に単精度演算及び倍長演算の両方が可能な演算処理回路に関する。
【背景技術】
【0002】
出願人は、ALU(Arithmetic Logic Unit)と呼ばれる基本演算機能を複数持つ多機能素子を多段に並べたALUアレイを用いたリコンフィギュラブル回路の検討を行ってきた(例えば、特許文献1、非特許文献1)。このリコンフィギュラブル回路では、ALUの機能を制御する命令セット及びALU間の接続先を制御する接続データセットからなる構成情報が各ALUに設定されることにより、所望の演算処理回路として機能する。
【0003】
ALUアレイによるリコンフィギュラブル回路では、FPGA(Field Programmable Gate Array)によるリコンフィギュラブル回路よりも実装サイズを小型化できる上、回路の再構成が高速に実行できるという利点がある。このため、各種の処理や規格に対応した演算処理回路を1つのLSIで実現できる。また、新規格にもソフトウエアのアップデートにより即座に対応可能である。
【特許文献1】特開2005−182654号公報
【非特許文献1】: 「情報家電向け小型リコンフィギュラブルデバイス」、三洋電機技報 VOL.37, No.2, MARCH 2006 通巻第77号
【発明の開示】
【発明が解決しようとする課題】
【0004】
上記のリコンフィギュラブル回路により、様々な演算処理回路を実現する場合、処理内容によっては、リコンフィギュラブル回路のALUが可能な演算ビット数を超える、多ビットの演算が必要になる場合がある。例えば、リコンフィギュラブル回路のALUの演算ビット幅が16ビットの場合に32ビット演算を実行させる必要が生じることがある。いわゆる倍長演算が必要な場合がある。
【0005】
一方、処理内容によっては、リコンフィギュラブル回路のALUが可能な演算ビット数での演算でも済む場合もある。即ち単精度演算でも足る場合もある。例えば、リコンフィギュラブル回路のALUの演算ビット幅が16ビットの場合に16ビット演算で済む場合もある。
【0006】
このように、リコンフィギュラブル回路では、倍長演算と単精度演算の両方に対応できることが望まれている。
【0007】
本発明は上記の事情に鑑み、単精度演算及び倍長演算の両方が可能な演算処理回路を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明のある態様の演算処理回路は、複数の論理回路からなり、第1の論理回路からの演算出力が第2の論理回路に入力されるよう構成された演算処理回路であって、前記第2の論理回路が、入力されたデータに対して演算を行う演算回路と、前記演算回路から出力された演算出力、又は第1の論理回路からの演算出力のいずれかを選択して出力する選択部を備えることを特徴とする。なお、ここで演算とは、加算、減算の他、シフト演算などであってもよい。
【0009】
前記選択部は、前記第2の論理回路が単精度演算を実行するときは、前記演算回路から出力された演算出力を選択し、前記第2の論理回路が倍長演算を実行するときは、前記第1の論理回路からの演算出力を選択するものであっても良い。
【0010】
ここで、倍長演算とは、いわゆる2倍長演算の他、n倍長演算(n:自然数、n>3)も含むものである。
【0011】
前記複数の論理回路は、例えば、段方向と列方向にマトリックス状に構成されても良い。
【0012】
この場合、前記の第1、第2の論理回路は、それぞれが連続する2段に配置される論理回路であっても良い。また、論理回路の選択部の出力が、次段の一部の論理回路のみに入力されるように構成されていても良い。
【0013】
また、前記複数の論理回路は、所定段に配置され、単精度演算又は倍長演算の下位桁の演算を実行する第1タイプの論理回路と、前記所定段の次段に配置され、単精度演算又は倍長演算の上位桁の演算を実行する第2タイプの論理回路と、を少なくとも含むものであっても良い。
【0014】
なお、上記「複数の論理回路」に関し、第1の論理回路と第2の論理回路は同じ論理回路であっても良い。したがって、第1の論理回路からの演算出力が、再び第1の論理回路の入力として用いられるような演算処理回路も本発明の範囲に含まれる。
【0015】
本発明の他の態様の演算処理回路は、段方向に構成され、所定時間ごとに外部から供給される設定データに従って動作する複数の論理回路を備えた演算処理回路であって、前記論理回路は、入力されたデータに対して演算を行う演算回路と、前記演算回路から出力された演算出力を前記所定時間保持する状態保持回路と、前記演算回路から出力された演算出力、又は前記状態保持回路に保持されていた演算出力のいずれかを選択する選択部を備え、更に該演算処理回路は、所定の論理回路の選択部の出力を、前記複数の論理回路を構成する一部の論理回路に入力させる接続部を備えることを特徴とする。
【0016】
本発明の他の態様の演算処理回路は、所定時間ごとに外部から供給される設定データに従って動作する論理回路を備えた演算処理回路であって、前記論理回路は、入力されたデータに対して演算を行う演算回路と、前記演算回路から出力された演算出力を前記所定時間保持する状態保持回路と、前記演算回路から出力された演算出力、又は前記状態保持回路に保持されていた演算出力のいずれかを選択する選択部を備え、更に該演算処理回路は、該論理回路からの選択部の出力を、該論理回路に入力させる接続部と、を備えたことを特徴とする。
【発明の効果】
【0017】
この発明によれば、単精度演算及び倍長演算の両方が可能な演算処理回路を提供することができる。また、いわゆる接続制限のある演算処理回路において、倍長演算を効率的に実行することができる。
【発明を実施するための最良の形態】
【0018】
<第1の実施形態>
図1は、実施の形態に係る処理装置10の構成、並びに設定データ生成装置30の構成を示す図である。
【0019】
(処理装置10の構成)
処理装置10は、1チップとして構成される集積回路からなり、リコンフィギュラブル回路12、設定部14、制御部18を備える。
【0020】
リコンフィギュラブル回路12は、機能の変更が可能なALUによる論理回路を複数備えた構造を有する。このようなリコンフィギュラブル回路12は、後述する設定部14から供給される設定データに従って動作する演算回路として機能する。即ちリコンフィギュラブル回路12は、外部からの入力データに対して、前記設定データに従った演算を行い、演算結果を出力する。このリコンフィギュラブル回路12の構成については後で詳しく説明する。なお、リコンフィギュラブル回路12は、本願発明の演算処理回路の一例に相当するものである。
【0021】
設定部14は、リコンフィギュラブル回路12に所望の演算回路を構成するための設定データを供給する。設定部14から設定データを供給することにより、リコンフィギュラブル回路12は所望の演算回路として構成される。この設定データは後述する設定データ生成装置30で生成される。
【0022】
制御部18は、処理装置10の各部、即ち、リコンフィギュラブル回路12、設定部14を制御する。
【0023】
(設定データ生成装置30の構成)
設定データ生成装置30は、リコンフィギュラブル回路12で実現されるべき処理の動作を設定したプログラムを解析し、リコンフィギュラブル回路12にマッピングするための設定データを生成する。この設定データは、リコンフィギュラブル回路12における論理回路の機能や論理回路間の接続関係を定める。設定データ生成装置30により生成された設定データは、設定部14を介してリコンフィギュラブル回路12へ供給される。
【0024】
(リコンフィギュラブル回路12の構成)
図2は、リコンフィギュラブル回路12の構成の一部を示すものである。
【0025】
図2のように、リコンフィギュラブル回路12では、演算器であるALU、選択器であるMUX、D型フリップフロップであるDFF1及びDFF2からなる論理回路(同図ではL11、…、L44として示している)がアレイ状に配列されてなる。
各論理回路内のALUは、設定データに従って演算機能が設定される。例えば、設定データに従って、あるときは加算器、あるときは減算器、論理和演算器、論理積演算器、ビットシフト演算器、…、などとして機能する。
【0026】
各論理回路において、ALUでの演算結果は、MUXへ出力される。MUXに出力されたデータは、DFF1を介して次段の論理回路のALUに入力される。また、各ALUの演算結果は、DFF2を介して、同列次段の論理回路内のMUXへも出力される(以後、このようなDFF2を介して次段の論理回路へ出力されるデータのことを「遅延出力データ」と呼ぶ)。例えば、論理回路L11のALUによる演算結果は、L11のMUXだけでなく、L11のDFF2を介して論理回路L12のMUXへも出力される。MUXは、同じ論理回路内にあるALUからの出力データと、前段の論理回路内にあるALUからの出力データを選択して出力する。例えば、論理回路L12のMUXは、L12内のALUからの出力と、L11内のALUからの出力を選択して出力する。
【0027】
尚、リコンフィギュラブル回路12では、各論理回路のDFF1からの出力データは、同列次段、及び左右列次段の3つの論理回路のみに入力される。即ち、回路規模の小型化を図るために論理回路からの出力の接続先を制限した、いわゆる「接続制限」を有する構成となっている。また、遅延出力は次段同列の論理回路に入力されるよう構成される。
【0028】
なお、図2は、リコンフィギュラブル回路12の構成の説明を簡略化するために、16個の論理回路からなる例を示したが、数十、数百、あるいはそれ以上の多数の論理回路を備えるものも本発明の権利範囲であることは、明らかである。同様に、16個未満の論理回路からなる論理回路も本発明の権利範囲である。
【0029】
(リコンフィギュラブル回路12を用いた倍長演算の例)
図3を参照して、リコンフィギュラブル回路12を用いた倍長演算の実行例を説明する。ここでは、リコンフィギュラブル回路12の各論理回路のALUの演算ビット幅が16ビットであると仮定し、32ビット変数同士の加算A+Bを行う場合を説明する。いま、32ビット変数Aの上位16ビットをAH、下位16ビットをAL、32ビット変数Bの上位16ビットをBH、下位16ビットをBLとしたとき、A+Bの演算は、下位ビット同士の加算AL+BLと、上位ビット同士の加算AH+BHとに分けて行われる。ここでは、論理回路L11内のALUから出力されるデータをAL、論理回路L12内のALUから出力されるデータをAH、論理回路L21内のALUから出力されるデータをBL、論理回路L22内のALUから出力されるデータをBHとする。
【0030】
まず、下位ビットの演算を説明する。論理回路L11内のALUから出力されるALは、L11内のDFF2を介して論理回路L12内のMUXへ入力される。このMUXでは、このALが選択されてL12内のDFF1へ出力される。そして、このDFF1を介して、L13内のALUへ出力される。
【0031】
一方、論理回路L21内のALUから出力されるBLは、L21内のDFF2を介して論理回路L22内のMUXへ入力される。このMUXでは、このBLが選択されてL22内のDFF1へ出力される。そして、このDFF1を介して、論理回路L13内のALUへ出力される。このALUではALとBLの加算が行なわれる。
【0032】
上記のような構成により、論理回路L13内のALUを用いて、2段上に配置された論理回路L11、及びL21のALUからの出力に対する加算処理を行うことができる。
即ち、加算演算を行うALUが属する論理回路L13の同列前段にある論理回路L12のMUXが、同じ論理回路L12のALUの出力ではなく、その同列前段にある論理回路L11のALUの出力を選択する。また、論理回路L13の右上段にある論理回路L22のMUXが、同じ論理回路L22のALUの出力ではなく、その同列前段にある論理回路L21のALUの出力を選択する。このようにして、2段上に配置された論理回路L11、及びL21の出力に対する加算処理を行うことができるのである。
【0033】
次に、上位ビットの演算を説明する。論理回路L12内のALUから出力されるAHは、L12内のDFF2を介して論理回路L13のMUXへ入力される。このMUXでは、このAHが選択されてL13内のDFF1へ出力される。そして、このDFF1を介して、論理回路L14内のALUへ出力される。
【0034】
一方、論理回路L22内のALUから出力されるBHはL22内のDFF2を介して論理回路L23のMUXへ入力される。このMUXでは、このBHが選択されてL23内のDFF1へ出力される。そして、このDFF1を介して、論理回路L14内のALUへ出力される。そして、このALUではAHとBHの加算が行なわれる。
【0035】
上記のような構成により、論理回路L14中のALUを用いて、2段上に配置された論理回路L12、及びL22のALUからの出力に対する加算処理を行うことができる。即ち、加算演算を行うALUが割り当てられる論理回路L14の同列前段にある論理回路L13のMUXが、同じ論理回路L13のALUの出力ではなく、その同列前段にある論理回路L12のALUの出力を選択するように構成することで、このような加算処理を行うことができる。
【0036】
以上のようにして、リコンフィギュラブル回路12による倍長演算が実行できる。
【0037】
一方、単精度演算を行う場合、即ち、リコンフィギュラブル回路12の各論理回路のALUの演算ビット幅と変数のビット数が等しい場合の演算を行う場合、MUXは前段の論理回路中のDFF2からの入力データではなく、同じ論理回中の演算器からの入力データを選択するようにすればよい。
【0038】
図4を参照して、リコンフィギュラブル回路12を用いて単精度演算を行う例を説明する。図3での例と同様、リコンフィギュラブル回路12の各論理回路のALUの演算ビット幅が16ビットであると仮定し、16ビット変数同士の加算A+Bを行う場合を説明する。いま、論理回路L11内のALUから出力されるデータをA、論理回路L12内のALUから出力されるデータをBとする。
【0039】
論理回路L11内のMUXは、論理回路L11内のALUから出力されるAを選択して、L11内のDFF1に出力する。そして、このDFF1を介して、論理回路L12内のALUへ出力される。
【0040】
一方、論理回路L21内のMUXは、論理回路L21内のALUから出力されるBを選択して、L21内のDFF1に出力する。そして、このDFF1を介して、論理回路L12内のALUへ出力される。そして、このALUではAとBの加算が行なわれる。
【0041】
上記のようにして、リコンフィギュラブル回路12では単精度演算も行うことができる。
【0042】
このように、リコンフィギュラブル回路12では、選択器MUXが、単精度演算時は同じ論理回路内のALUからの出力を選択し、倍長演算時は前段同列の論理回路のALUからの出力を選択する、といったように選択を切り替えることで、単精度と倍精度の両方の演算が実現できる。
【0043】
また、リコンフィギュラブル回路12によれば、いわゆる「接続制限」を有するリコンフィギュラブル回路において、図3のように単精度演算で処理可能である演算の場合、図2のように縦方向に2倍した演算配置にすることによって、同じ接続制限下で倍長演算が実現できるので、倍長演算の効率化を実現できる。
【0044】
なお、図2〜4では図示していないが、下位ビットの加算を行う論理回路L13内のALUでのキャリーは、上位ビットの加算を行う論理回路L14内のALUに入力される。従って、倍長演算を行う場合は、論理回路L14内のALUでは、AHとBHに加えて、L13内のALUのキャリーを加算する。これにより、倍長の加算処理が正しく実行することができる。
【0045】
(演算器の構成)
リコンフィギュラブル回路12の各ALU内部の構成について、以下に説明する。
図5は、リコンフィギュラブル回路12の各論理回路内にあるALUの内部構成を示したものである。ここでは、ALUに加算機能を割り当てた場合を説明する。この場合のALUの機能は、等価的には選択器であるMUX3と加算器a1により記述できる。まず、MUX3には下位からのキャリー入力と0(ゼロ)が入力され、これらを選択して加算器a1へ出力する。ALUが最下位ビットの加算を行うものであれば、MUX3は0を選択して出力する。ALUが最下位ビットの加算を行うものでない場合は、MUX3は下位からのキャリー入力を選択して出力する。加算器a1には、入力1、2及びMUX3の出力が入力される。そして、これらの加算結果、及びキャリー出力が出力される。このような演算器をリコンフィギュラブル回路12の論理回路中のALUとして用いることで、上述した倍長の加算演算が可能となる。
【0046】
なお、リコンフィギュラブル回路12に演算を割り当てる際、例えばリコンフィギュラブル回路12の奇数段では下位ビットの演算又は単精度演算を行い、偶数段では上位ビットの演算又は単精度演算を行う、というように割り当てる場合は、奇数段においてはキャリー入力をゼロに固定できるため選択器MUXm1が省略できる。このようにALUを下位演算用、上位演算用というように割り当てを限定することで、各論理回路内のALUの回路規模の削減が可能となる。
【0047】
<第2の実施形態>
(リコンフィギュラブル回路12Aの構成)
図6のリコンフィギュラブル回路12Aでも倍長演算と単精度演算の両方が可能である。このリコンフィギュラブル回路12Aは、図2のリコンフィギュラブル回路12のように4段の構成とする代わりに1段構成でループバックさせる構成である。リコンフィギュラブル回路12Aには、所定時間ごとに設定部14(図1参照)から設定データが供給される。そして、リコンフィギュラブル回路12Aを構成する各論理回路は、この設定部14から供給される設定データに従って動作する。このようなリコンフィギュラブル回路12Aを用いても、倍長の加算(A+B)を実行することができる。以下、その手順を説明する。
【0048】
まず、第1のタイミングにおいて、L1のALUからはALが、L2のALUからはBLが出力される。L1のALUから出力されるALは、L1のDFF2へ出力される。L2のALUから出力されるBLは、L2のDFF2へ出力される。L1、L2それぞれのDFF2は、それぞれAL、BLを保持(一時的に格納)する。即ち、第1のタイミングでは、L1、L2のそれぞれは、図3でいうところのL11、L21と同じように機能する。
【0049】
次に第2のタイミングでは、L1のALUからAHが、L2のALUからBHが出力される。このとき、L1のDFF2で格納されていたALはL1のMUXへ出力され、L2のDFF2で格納されていたBLはL2のMUXへ出力される。L1のALUからは、AHがL1のMUXとDFF2の両方へ出力される。L1のMUXは、AHとALのうち、ALの方を選択してDFF1へ出力するよう設定される。同様に、L2のALUからは、BHがL2のMUXとDFF2の両方へ出力される。L2のMUXは、BHとBLのうち、BLの方を選択してDFF1へ出力するよう設定される。従って、L1のDFF1にはALが、DFF2にはAHが格納され、L2のDFF1にはBLが、DFF2にはBHが格納されることとなる。即ち、第2のタイミングでは、L1、L2のそれぞれは、図3でいうところのL12、L22と同じように機能する。
【0050】
次に第3のタイミングにおいて、L1のALUには加算機能が設定される。このとき、L1のDFF2で格納されていたAHはL1のMUXへ出力され、L2のDFF2で格納されていたBHはL2のMUXへ出力される。また、L1のDFF1で格納されていたAL、L2のDFF1で格納されていたBLは、L1のALUへ出力される。L1のALUからは、ALとBLの加算結果がL1のMUXとDFF2の両方へ出力される。L1のMUXは、上記加算結果と、AHのうち、AHの方を選択してDFF1へ出力するよう設定される。また、L2のMUXは、2入力のうち、BHの方を選択してDFF1へ出力するよう設定される。即ち、第3のタイミングでは、L1、L2のそれぞれは、図3でいうところのL13、L23と同じように機能する。
【0051】
次に第4のタイミングにおいて、L1のALUには加算機能が設定される。このとき、L1のDFF1で格納されていたAH、L2のDFF1で格納されていたBHは、L1のALUへ出力される。L1のALUからは、AHとBHの加算結果が出力される。即ち、第4のタイミングでは、L1、L2のそれぞれは、図3でいうところのL14、L24と同じように機能する。
【0052】
即ち、リコンフィギュラブル回路12Aは、1段構成でループバックさせる構成とし、設定部14が供給する設定データに従ってALUの機能やMUXの動作を各タイミングで切り換えることで、倍長演算を実現するものである。
【0053】
<第3の実施形態>
(リコンフィギュラブル回路12Bの構成)
図7のようなリコンフィギュラブル回路12Bでは、3倍長演算、倍長演算、並びに単精度演算が実行可能である。このリコンフィギュラブル回路12Bは、演算器であるALU、選択器であるMUX、及び、D型フリップフロップであるDFF1、DFF2及びDFF3からなる論理回路(同図ではL11、…、L16、L21、…L26、L31、…として示している)がアレイ状に配列されてなる。
【0054】
各論理回路において、ALUからの出力は、MUX及びDFF3へ出力される。
DFF3からの出力は、同列次段にあるMUX及びDFF2へ出力される。例えば、L11のDFF3からの出力は、L12のMUX及びDFF2へ出力される。
【0055】
各論理回路のMUXは、同じ論理回路のALUからの出力、前段の論理回路のDFF2からの出力、又は前段の論理回路のDFF3からの出力、の3入力のいずれか1つを選択して同じ論理回路内のDFF1へ出力する。例えば、L13のMUXは、L13のALU、L12のDFF2、L12のDFF3のいずれか1つを選択して、L13のDFF1へ出力する。ここで、L12のDFF2には、L11のALUからの出力がL11のDFF3を介して入力されている。従って、L13のMUXがL12のDFF2からの入力を選択することは、L11のALUの出力を選択することに相当する。また、L12のDFF3には、L12のALUからの出力が入力されている。従って、L13のMUXがL12のDFF3からの入力を選択することは、L12のALUの出力を選択することに相当する。したがって、各論理回路のMUXは、同じ論理回路のALUからの出力、前段のALUからの出力、又は前々段のALUからの出力のいずれか1つを選択してDFF1へ出力することができる。
【0056】
そして、DFF1からの出力は、同列次段、右隣列次段、及び左隣列次段にある3つの論理回路のALUに入力される。例えば、L21のDFF1の出力はL12のALU、L22のALU、及びL32のALUへ出力される。
【0057】
(リコンフィギュラブル回路12Bを用いた3倍長演算の例)
図8を参照して、リコンフィギュラブル回路12Bを用いた、3倍長演算の実行例を説明する。
【0058】
ここでは、リコンフィギュラブル回路12Bの各論理回路にあるALUの演算ビット幅が16ビットであると仮定し、48ビット変数同士の加算A+Bを行う場合を説明する。いま、48ビット変数Aの上位16ビットをAH、中位16ビットをAM、下位16ビットをAL、48ビット変数Bの上位16ビットをBH、中位16ビットをBM、下位16ビットをBLとすると、A+Bの演算は、下位ビット同士の加算AL+BL、中位ビット同士の加算AM+BM、及び上位ビット同士の加算AH+BHに分けて行われる。
【0059】
ここでは、L11内のALUからの出力をAL、L12内のALUからの出力をAM、L13内のALUからの出力をAH、L21内のALUからの出力をBL、L22内のALUからの出力をBM、L23内のALUからの出力をBHとする。
【0060】
まず、下位ビットの演算を説明する。L11のALUから出力されるALは、L11のDFF3、L12のDFF2を介してL13のMUXへ入力される。このMUXでは、このALが選択されてL13のDFF1へ出力される。そして、このDFF1を介して、L14のALUへ出力される。
【0061】
一方、L21のALUから出力されるBLは、L21のDFF3、L22のDFF2を介してL23のMUXへ入力される。このMUXでは、このBLが選択されてL23のDFF1へ出力される。そして、このDFF1を介して、L14のALUへ出力される。そして、L14のALUではALとBLの加算が行なわれる。
【0062】
上記のような構成により、L14内のALUを用いて、3段上に配置された論理回路L11、及びL21の出力に対する加算処理を行うことができる。
【0063】
即ち、下位ビットの加算演算を行うALUが属するL14の同列前段にあるL13のMUXが、同じ論理回路L13のALUの出力ではなく、その同列前々段にあるL11のALUの出力を選択する。また、L14の右上段にあるL23のMUXが、L23のALUの出力ではなく、その同列前々段にあるL21のALUの出力を選択する。このようにして、3段上に配置された論理回路L11、及びL21の出力に対する加算処理を行うことができるのである。
【0064】
次に、中位ビットの演算を説明する。L12のALUから出力されるAMは、L12のDFF3、L13のDFF2を介してL14のMUXへ入力される。このMUXでは、このAMが選択されてL14のDFF1へ出力される。そして、このDFF1を介して、L15のALUへ出力される。
【0065】
一方、L22のALUから出力されるBMは、L22のDFF3、L23のDFF2を介してL24のMUXへ入力される。このMUXでは、このBMが選択されてL24のDFF1へ出力される。そして、このDFF1を介して、L15のALUへ出力される。そして、L15のALUではAMとBMの加算が行われる。
【0066】
即ち、中位ビットの加算演算を行うALUが属するL15の同列前段にあるL14のMUXが、同じ論理回路L14のALUの出力ではなく、その同列前々段にあるL12のALUの出力を選択する。また、L15の右上段にあるL24のMUXが、L24のALUの出力ではなく、その同列前々段にあるL22のALUの出力を選択する。このようにして、3段上に配置された論理回路L12、及びL22の出力に対する加算処理を行うことができるのである。
【0067】
次に、上位ビットの演算を説明する。L13のALUから出力されるAHは、L13のDFF3、L14のDFF2を介してL15のMUXへ入力される。このMUXでは、このAHが選択されてL15のDFF1へ出力される。そして、このDFF1を介して、L16のALUへ出力される。
【0068】
一方、L23のALUから出力されるBHは、L23のDFF3、L24のDFF2を介してL25のMUXへ入力される。このMUXでは、このBHが選択されてL25のDFF1へ出力される。そして、このDFF1を介して、L16のALUへ出力される。そして、L16のALUではAHとBHの加算が行われる。
【0069】
即ち、上位ビットの加算演算を行うALUが属するL16の同列前段にあるL15のMUXが、同じ論理回路L15のALUの出力ではなく、その同列前々段にあるL13のALUの出力を選択する。また、L16の右上段にあるL25のMUXが、L25のALUの出力ではなく、その同列前々段にあるL23のALUの出力を選択する。このようにして、3段上に配置された論理回路L13、及びL23の出力に対する加算処理を行うことができるのである。
【0070】
このようにして、下位ビットの演算を行う論理回路、中位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、3倍長の演算が可能となるのである。
【0071】
(リコンフィギュラブル回路12Bを用いた倍長演算の例)
図9を参照して、リコンフィギュラブル回路12Bによる倍長演算の実行例を説明する。
【0072】
リコンフィギュラブル回路12Bの各論理回路にあるALUの演算ビット幅は16ビットであるときに、32ビット変数同士の加算A+Bを行う場合を説明する。32ビット変数Aの上位16ビットをAH、下位16ビットをAL、32ビット変数Bの上位16ビットをBH、下位16ビットをBLとすると、A+Bの演算は、下位ビット同士の加算AL+BL、上位ビット同士の加算AH+BHに分けて行われる。
【0073】
ここでは、L11内のALUからの出力をAL、L12内のALUからの出力をAH、L21内のALUからの出力をBL、L22内のALUからの出力をBHとする。
【0074】
まず、下位ビットの演算を説明する。L11のALUから出力されるALは、L11のDFF3を介してL12のMUXへ入力される。このMUXでは、このALが選択されてL12のDFF1へ出力される。そして、このDFF1を介して、L13のALUへ出力される。
【0075】
一方、L21のALUから出力されるBLは、L21のDFF3を介してL22のMUXへ入力される。このMUXでは、このBLが選択されてL22のDFF1へ出力される。そして、このDFF1を介して、L13のALUへ出力される。そして、L13のALUではALとBLの加算が行なわれる。
【0076】
上記のような構成により、L13内のALUを用いて、2段上に配置された論理回路L11、及びL21の出力に対する加算処理を行うことができる。
【0077】
即ち、下位ビットの加算演算を行うALUが属するL13の同列前段にあるL12のMUXが、同じ論理回路L12のALUの出力ではなく、その前段にあるL11のALUの出力を選択する。また、L13の右上段にあるL22のMUXが、L22のALUの出力ではなく、その前段にあるL21のALUの出力を選択する。このようにして、2段上に配置された論理回路L11、及びL21の出力に対する加算処理を行うことができるのである。
【0078】
次に、上位ビットの演算を説明する。L12のALUから出力されるAHは、L12のDFF3を介してL13のMUXへ入力される。このMUXでは、このAHが選択されてL13のDFF1へ出力される。そして、このDFF1を介して、L14のALUへ出力される。
【0079】
一方、L22のALUから出力されるBHは、L22のDFF3を介してL23のMUXへ入力される。このMUXでは、このBHが選択されてL23のDFF1へ出力される。そして、このDFF1を介して、L14のALUへ出力される。そして、L14のALUではAHとBHの加算が行われる。
【0080】
即ち、上位ビットの加算演算を行うALUが属するL14の同列前段にあるL13のMUXが、同じ論理回路L13のALUの出力ではなく、その前段にあるL12のALUの出力を選択する。また、L14の右上段にあるL23のMUXが、L23のALUの出力ではなく、その前段にあるL22のALUの出力を選択する。このようにして、2段上に配置された論理回路L12、及びL22の出力に対する加算処理を行うことができるのである。
【0081】
このようにして、下位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、倍長の演算も可能となるのである。
【0082】
(リコンフィギュラブル回路12Bを用いた単精度演算の例)
図10を参照して、リコンフィギュラブル回路12Bによる単精度演算の実行例を説明する。
【0083】
リコンフィギュラブル回路12Bの各論理回路にあるALUの演算ビット幅は16ビットであるときに、16ビット変数同士の加算A+Bを行う場合を説明する。L11内のALUからの出力をA、L21内のALUからの出力をBとする。
【0084】
L11のALUから出力されるAは、L11のMUXへ入力される。このMUXでは、このAが選択されてL11のDFF1へ出力される。そして、このDFF1を介して、L12のALUへ出力される。
【0085】
一方、L21のALUから出力されるBは、L21のMUXへ入力される。このMUXでは、このBが選択されてL21のDFF1へ出力される。そして、このDFF1を介して、L12のALUへ出力される。そして、L12のALUではAとBの加算が行なわれる。
【0086】
これにより、L12内のALUを用いて、単精度の加算演算を行うことができる。即ち、加算演算を行うALUが属するL12の同列前段にあるL11のMUXが、同じ論理回路L11のALUを選択する。また、L12の右上段にあるL21のMUXが、L21のALUの出力を選択する。このようにして、リコンフィギュラブル回路12Bでは、単精度の加算演算も行うことができるのである。
【0087】
このようにリコンフィギュラブル回路12Bでは、各論理回路内に設けられたMUXへの入力の選択を制御することにより、3倍長、倍長、単精度演算の切り換えが可能となるのである。
【0088】
<第4の実施形態>
(リコンフィギュラブル回路12Cの構成)
図11のようなリコンフィギュラブル回路12Cでも、3倍長、倍長、単精度演算すべての演算が可能である。このリコンフィギュラブル回路12Cは、演算器であるALU、選択器であるMUX、及び、D型フリップフロップであるDFF1、DFF2及びDFF3からなる論理回路(同図ではL11、…、L16、L21、…L26、L31、…として示している)がアレイ状に配列されてなる。
【0089】
各論理回路において、ALUからの出力は、MUX1、MUX2及びDFF3へ出力される。
【0090】
各論理回路のMUX1は、同じ論理回路のALUからの出力、前段のDFF2からの出力、のいずれか1つを選択して同じ論理回路内のDFF1へ出力する。例えば、論理回路L13のMUX1は、L13のALU、L12のDFF2からの出力のいずれかを選択して、L13のDFF1へ出力する。
【0091】
各論理回路のMUX2は、同じ論理回路のALUからの出力、前段のDFF3からの出力、のいずれか1つを選択して同じ論理回路内のDFF2へ出力する。例えば、論理回路L13のMUX2は、L13のALU、L12のDFF3からの出力のいずれかを選択して、L13のDFF2へ出力する。
【0092】
また、DFF3からの出力は、次段の論理回路のMUX2へ出力される。
【0093】
(リコンフィギュラブル回路12Cを用いた3倍長演算の例)
図12を参照して、リコンフィギュラブル回路12Cを用いた、3倍長演算の実行例を説明する。
【0094】
リコンフィギュラブル回路12Cの各論理回路にあるALUの演算ビット幅が16ビットであると仮定し、48ビット変数同士の加算A+Bを行う場合を説明する。いま、48ビット変数Aの上位16ビットをAH、中位16ビットをAM、下位16ビットをAL、Bの上位16ビットをBH、中位16ビットをBM、下位16ビットをBLとする。そして、L11、L12、L13のALUからの出力をそれぞれ、AL、AM、AHとし、L21、L22、L23のALUからの出力をそれぞれ、BL、BM、BHとする。
【0095】
まず、下位ビットの演算を説明する。L11のALUから出力されるALは、DFF3、L12のMUX2、DFF2、L13のMUX1、DFF1を介して、L14のALUへ出力される。
【0096】
一方、L21のALUから出力されるBLは、L21のDFF3、L22のMUX2、DFF2、L23のMUX1、DFF1を介してL14のALUへ出力される。そして、L14のALUではALとBLの加算が行われる。
【0097】
次に、中位ビットの演算を説明する。L12のALUから出力されるAMは、DFF3、L13のMUX2、DFF2を介してL14のMUX1、DFF1を介して、L15のALUへ出力される。
【0098】
一方、L22のALUから出力されるBMは、L22のDFF3、L23のMUX2、DFF2、L24のMUX1、DFF1を介してL15のALUへ出力される。そして、L15のALUではAMとBMの加算が行われる。
【0099】
次に、上位ビットの演算を説明する。L13のALUから出力されるAHは、DFF3、L14のMUX2、DFF2、L15のMUX1、DFF1を介して、L16のALUへ出力される。
【0100】
一方、L23のALUから出力されるBHは、L23のDFF3、L24のMUX2、DFF2、L25のMUX1、DFF1を介してL16のALUへ出力される。そして、L16のALUではAHとBHの加算が行われる。
【0101】
このようにして、下位ビットの演算を行う論理回路、中位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、3倍長の演算が可能となるのである。
【0102】
(リコンフィギュラブル回路12Cを用いた倍長演算の例)
図13を参照して、リコンフィギュラブル回路12Cによる倍長演算の実行例を説明する。
【0103】
リコンフィギュラブル回路12Cの各論理回路にあるALUの演算ビット幅は16ビットであるときに、32ビット変数同士の加算A+Bを行う場合を説明する。32ビット変数Aの上位16ビットをAH、下位16ビットをAL、32ビット変数Bの上位16ビットをBH、下位16ビットをBLとする。そして、L11、L12のALUからの出力をそれぞれ、AL、AHとし、L21、L22のALUからの出力をそれぞれ、BL、BHとする。
【0104】
まず、下位ビットの演算を説明する。L11のALUから出力されるALは、L11のMUX2、DFF2、L12のMUX1、DFF1を介して、L13のALUへ出力される。一方、L21のALUから出力されるBLは、L21のMUX2、DFF2、L22のMUX1、DFF1を介して、L13のALUへ出力される。そして、L13のALUではALとBLの加算が行われる。
【0105】
次に、上位ビットの演算を説明する。L12のALUから出力されるAHは、L12のMUX2、DFF2、L13のMUX1、DFF1を介して、L14のALUへ出力される。一方、L22のALUから出力されるBHは、L22のMUX2、DFF2、L23のMUX1、DFF1を介して、L14のALUへ出力される。そして、L14のALUではAHとBHの加算が行われる。
【0106】
このようにして、下位ビットの演算を行う論理回路、上位ビットの演算を行う論理回路を縦一列に配置することができ、倍長の演算も可能となるのである。
【0107】
(リコンフィギュラブル回路12Cを用いた単精度演算の例)
図14を参照して、リコンフィギュラブル回路12Cによる単精度演算の実行例を説明する。
【0108】
リコンフィギュラブル回路12Cの各論理回路にあるALUの演算ビット幅は16ビットであるときに、16ビット変数同士の加算A+Bを行う場合を説明する。L11のALUからの出力をA、L21のALUからの出力をBとする。
【0109】
L11のALUから出力されるAは、L11のMUX1、DFF1を介して、L12のALUへ出力される。一方、L21のALUから出力されるBは、L21のMUX1、DFF1を介して、L12のALUへ出力される。そして、L12のALUではAとBの加算が行なわれる。これにより、単精度の加算演算を行うことができる。
このようにリコンフィギュラブル回路12Cでは、各論理回路内に設けられた選択器MUX1、MUX2を制御することにより、3倍長、倍長、単精度演算の切り換えが可能となるのである。
【0110】
<第5の実施形態>
(リコンフィギュラブル回路12Dの構成)
本実施形態は、倍長シフト演算と、単精度のシフト演算の両方が可能な演算が可能なリコンフィギュラブル回路12Dに関する。
【0111】
図15を参照して、リコンフィギュラブル回路12Dは、バレルシフタとして機能する演算器であるALU、選択器であるMUX、及び、D型フリップフロップであるDFF1、DFF2なる論理回路(同図ではL11、…、L44として表示)がアレイ状に配列されてなる。
【0112】
各論理回路において、ALUは2つの出力を有する。第1の出力は、MUXへ出力される。第2の出力はMUXとDFF2の両方へ出力される。なお、第1の出力、第2の出力が何であるかについては後で詳しく説明する。
【0113】
各論理回路のMUXは、ALUからの第1の出力又は第2の出力のいずれかを選択してDFF1へ出力する。
【0114】
DFF1からの出力は(同列又は左右の列に位置する)次段の論理回路(のALU)へ出力される。一方、DFF2からの出力は、同列次段にある論理回路(のALU)へ出力される。
【0115】
(リコンフィギュラブル回路12Dにおける論理回路のALUの構成)
図16は、リコンフィギュラブル回路12Dにおける論理回路のALUの構成図である。このALUは、バレルシフタと、選択器であるMUX1、MUX2を備えている。また、各ALUは、入力1、入力2、遅延入力の3入力を有する。入力1、入力2は、前段のいずれかの論理回路のDFF1から出力されたデータのことをいう。遅延入力とは、前段の同列の論理回路のDFF2から出力されたデータのことをいう。なお、入力1、入力2、遅延入力はいずれも16ビットであるとし、バレルシフタは32ビットデータに対するシフト演算が可能であるとする。また、各MUXは16ビットデータに対応するものとする。
【0116】
MUX1は、入力1と、0(ゼロ)のいずれかを選択してバレルシフタへ出力する。MUX2は、遅延入力と、0(ゼロ)のいずれかを選択してバレルシフタへ出力する。
【0117】
バレルシフタには、MUX1からの出力、MUX2からの出力、並びに入力2、の3つの16ビットデータの入力がなされる。バレルシフタは、MUX2からのデータを下位16ビットデータとし、入力2を上位16ビットデータとして結合した32ビットデータに対し、MUX1から指定されたビット数だけシフトする演算を行う。そして、シフト演算された32ビットデータのうち、上位16ビットは、MUX及びDFF2へ出力される。下位16ビットについてはMUXへ出力される。
【0118】
(リコンフィギュラブル回路12Dによる倍長演算の例)
図17を参照して、リコンフィギュラブル回路12Dによる倍長演算の実行例を説明する。ここでは、上位16ビットをd2、下位16ビットをd1とするデータに対し、列方向に隣接して配置された論理回路L(x)(y)と、L(x)(y+1)を用いて倍長のビットシフト演算を行う場合を説明する。
【0119】
まず、L(x)(y)のMUX2は遅延入力であるデータd2を選択する。そして、バレルシフタには、入力2であるデータd1と、データd2とが結合された形で入力される。即ち、バレルシフタには、データd1を上位16ビット、データd2を下位16ビットとした32ビットデータが入力される。
【0120】
一方、MUX1は、0を選択してバレルシフタへ出力する。従って、バレルシフタはシフト演算を行わずに上位16ビット(即ちd1)をDFF2とMUXへ出力し、下位16ビット(即ちd2)をMUXへ出力する。MUXは、下位16ビット(データd2)を選択してDFF1へ出力する。
【0121】
次に、L(x)(y+1)のMUX2は遅延入力(データd1)を選択する。そして、バレルシフタには、入力2(データd2)を上位16ビット、データd1を下位16ビットとした32ビットデータが入力される。
【0122】
一方、MUX1は、入力1であるデータsを選択してバレルシフタへ出力する。そして、バレルシフタは、上記の32ビットデータに対してsビットシフト(ここでは右シフトとする)させる。そして、バレルシフタからは、sビットシフトさせた32ビットデータの上位16ビットがDFF2とMUXに出力され、下位16ビットがMUXへ出力される。
【0123】
以上のようにして、リコンフィギュラブル回路12Dにより、倍長のバレルシフト演算が可能となる。
【0124】
(リコンフィギュラブル回路12Dによる単精度演算の例)
図18を参照して、リコンフィギュラブル回路12Dによる単精度演算の実行例を説明する。ここでは、データd1に対し、単精度のバレルシフト演算を行う場合を説明する。
【0125】
まず、MUX2は(遅延入力ではなく)0を選択する。そして、バレルシフタには、入力2(データd1)を上位16ビット、0を下位16ビットとした32ビット形式のデータが入力される。
【0126】
一方、MUX1は、入力1(データs)を選択してバレルシフタへ出力する。従って、バレルシフタは、上記の32ビット形式のデータに対してsビットシフト(ここでは右シフトとする)させる。そして、バレルシフタからは、sビットシフトさせたデータの上位16ビットがDFF2とMUXに、下位16ビットがMUXへ出力される。MUXは、上位、下位のうち上位16ビットを選択してDFF1に出力する。なお、DFF1からの出力は、次段の同列又は左右列の論理回路へ入力される。即ち、データd1をsビットシフトさせたデータが次段の論理回路へ出力されることとなる。
【0127】
以上のようにして、リコンフィギュラブル回路12Dにより、単精度のバレルシフト演算が可能となる。さらに、MUX2に0を選択させることでバレルシフタの下位16ビットには0が入力されるので、右シフト演算時だけでなく左シフト演算時も正しく演算することが可能となる。
【0128】
リコンフィギュラブル回路12Dによれば、倍長のバレルシフタ1つで、単精度と倍精度の両方に対応するシフト演算を実現することができるので、単精度と倍精度の2つのバレルシフタを持つ場合と比較して回路規模を削減することができる。
【0129】
なお、上記リコンフィギュラブル回路12Dでは、入力1、入力2は、前段の論理回路のDFF1から出力されたデータであるとしたが、これに限られるものではなく、例えば、単なる定数入力、もしくはリコンフィギュラブル回路内に設けられた図示しない状態保持回路(RAMなど)から入力されるデータなどが入力されるものであっても良い。
【0130】
<第6の実施形態>
(リコンフィギュラブル回路12Eの構成)
図19のようなリコンフィギュラブル回路12Eを用いてもバレルシフト演算が可能である。リコンフィギュラブル回路12Eは、リコンフィギュラブル回路12Dと比較して、奇数段にある論理回路(L11、L21、L31、L41、L13、L23、L33、L43)の構成が相違する。リコンフィギュラブル回路12Eでは、奇数段にある論理回路L(x)(2y−1)と、偶数段にある論理回路L(x)(2y)の2個の論理回路をペアとして使用することで倍長のバレルシフト演算が可能である。
【0131】
図20は、リコンフィギュラブル回路12Eの奇数段に配置される論理回路L(x)(2y−1)の構成を示す図である。この論理回路L(x)(2y−1)は、ALUの内部が、選択器MUX2を備えない点、バレルシフタが32ビット対応でなく、16ビット対応である点で、リコンフィギュラブル回路12Dの各論理回路のALUと相違する。
なお、リコンフィギュラブル回路12Eの偶数段に配置される論理回路L(x)(2y)の構成は、リコンフィギュラブル回路12Dの各論理回路のALUと同じである。
【0132】
(リコンフィギュラブル回路12Eによる倍長演算の例)
図21を参照して、リコンフィギュラブル回路12Eによる倍長演算の実行例を説明する。ここでは、上位16ビットをd2、下位16ビットをd1とする32ビットデータに対し、論理回路L(x)(2y-1)と、その同列次段にあるL(x)(2y)を用いて倍長のビットシフト演算を行う場合を説明する。
【0133】
まず、L(x)(2y-1)での動作を説明する。L(x)(2y-1)のバレルシフタには入力2としてL(x)(2y-1)に入力されたデータd1が入力される。ALU内のMUX1は(入力1ではなく)0を選択してバレルシフタへ出力する。従って、バレルシフタからはデータd1がそのまま(ビットシフトされないまま)MUX及びDFF2の両方へ出力される。
【0134】
一方、MUXには、前記のバレルシフタからの出力と、遅延入力としてL(x)(2y-1)に入力されたデータd2とが入力されるが、MUXは、このうちデータd2を選択してDFF1へ出力する。DFF1から出力されるd2はL(x)(2y)へ出力される。DFF2から出力されるd1は、遅延出力としてL(x)(2y)へ出力される。
【0135】
次に、L(x)(2y) での動作を説明する。L(x)(2y)のMUX1には、入力1としてL(x)(2y)に入力されたデータsと、0とが入力されるが、MUX1はデータsを選択してバレルシフタへ出力する。MUX2は、遅延入力(上記の遅延出力であるd1)と0のうち、データd1を選択してバレルシフタへ出力する。バレルシフタには、入力2(上記のd2)を上位16ビット、データd1を下位16ビットとした32ビットデータが入力される。
【0136】
そして、バレルシフタからは、この32ビットデータをsビットシフトさせたデータのうち、上位16ビットをDFF2とMUXに出力し、下位16ビットをMUXへ出力する。このようにして、リコンフィギュラブル回路12Eよっても、倍長のバレルシフト演算が可能となる。
【0137】
即ち、リコンフィギュラブル回路12Dでは、任意の段の論理回路とその次段同列の論理回路を用いて倍長シフト演算を実行可能であるのに対し、このリコンフィギュラブル回路12Eでは、奇数段とその次段である偶数段にある2つの論理回路を用いて倍長シフト演算をさせている。即ち、「任意の段」を奇数段に、「その次段」の偶数段に、というふうに配置を限定することにより、奇数段に配置される論理回路のバレルシフタが単精度でまかなうことができる(この例では32ビットではなく、16ビットで済む)ので、回路規模を小型化することができる。
【0138】
<第7の実施形態>
(リコンフィギュラブル回路12Fの構成)
図22は、単精度演算と倍長演算の両方を行うことができると共に、単精度演算の結果を倍長演算へ供給することができるリコンフィギュラブル回路12Fの構成を示すものである。このリコンフィギュラブル回路12Fは、演算ビット幅が16ビットであるものとする。
【0139】
このリコンフィギュラブル回路12Fは、2段目の論理回路(L12、…L42)に特徴を有する。これらの論理回路は、演算器であるALU、選択器であるMUX1、MUX2、D型フリップフロップであるDFF1、DFF2、並びに符号拡張処理を行うEXを有する。符号拡張処理とは、ここでは、元々16ビット変数であったデータを32ビットに拡張した上で、拡張後の上位16ビットのデータを生成する処理のことをいう。ALUからの出力はMUX1、MUX2、並びにEXへ入力される。EXからの出力はMUX2へ入力される。また、MUX1には、同列前段のDFF2からの出力も入力される。ALUが単精度演算を行う場合、MUX2は、EXを選択してDFF2へ出力する。これにより、DFF2からは、拡張後変数の上位ビットが出力される。また、MUX1がALUからの入力データを選択した場合、DFF1からは、拡張後変数の下位ビットが出力されこととなる。このように2段目の論理回路では、単精度演算を行った後、符号拡張を行うことで倍長に変換して、上位ビット及び下位ビットに分けて出力するのである。例えば、ALUによる単精度演算の結果が16ビット変数でいうところの0x89abであるとき、EXからの出力は0xffffとなる。従って、この論理回路は0xffff89abなる32ビット変数を出力することとなる。
【0140】
なお、1段目、3段目、4段目の論理回路の構成はリコンフィギュラブル回路12と同じである。
【0141】
(リコンフィギュラブル回路12Fによる演算例)
図23を参照して、リコンフィギュラブル回路12Fによる演算例を説明する。ここでは、、単精度の加算A+B(=Cとする)、及び単精度の加算D+E(=Fとする)を実行したのち、C+Fの倍長加算を行う例を用いて説明する。リコンフィギュラブル回路12Fの各論理回路の演算ビット幅は16ビットであるとし、変数A、B、D、Eもそれぞれ16ビット変数であるとする。
【0142】
まず、論理回路L11、L21、L31、L41のALUからはそれぞれ変数A、B、D、Eが出力されるものとする。
【0143】
L11のMUXはAを選択し、DFF1を介してL22のALUにAが入力される。L21のMUXはBを選択し、DFF1を介してL22のALUにはBも入力される。そして、L22のALUでは、A+Bの単精度加算が実行される。
【0144】
L31のMUXはDを選択し、DFF1を介してL32のALUにDが入力される。L41のMUXはEを選択し、DFF1を介してL32のALUにはEも入力される。そして、L32のALUでは、D+Eの単精度加算が実行される。
【0145】
L22のALUからの出力であるC(=A+B)は、L22のMUX1、MUX2、並びにEXへ出力される。MUX1は、(L21のDFF2からの入力ではなく)、ALUからの出力であるCを選択してDFF1へ出力する。MUX2は、EXからの出力を選択してDFF2へ出力する。その結果、DFF2からは、16ビット変数Cを32ビットに符号拡張したときの上位16ビットであるCHが出力され、DFF1からは、16ビット変数Cを32ビットに符号拡張したときの下位16ビットであるCLが出力される。DFF1から出力されるCLは、L23のALUへ入力される。一方、DFF2から出力されるCHは、L23のMUXを介してL24のALUへ入力される。
【0146】
同様に、L32のALUからの出力であるF(=D+E)は、L32のMUX1、MUX2、並びにEXへ出力される。MUX1は、(L31のDFF2からの入力ではなく)、ALUからの出力であるFを選択してDFF1へ出力する。MUX2は、EXからの出力を選択してDFF2へ出力する。その結果、DFF2からは、16ビット変数Fを32ビットに符号拡張したときの上位16ビットであるFHが出力され、DFF1からは、16ビット変数Fを32ビットに符号拡張したときの下位16ビットであるFLが出力される。DFF1から出力されるFLは、L23のALUへ入力される。一方、DFF2から出力されるFHは、L33のMUXを介してL24のALUへ入力される。
【0147】
その結果、L23のALUではCL+FLの加算演算が実行され、L24のALUではCH+FHの加算演算が実行される。このようにして、リコンフィギュラブル回路12Fでは、単精度演算の実行結果を倍長演算に供給するのである。
【0148】
なお、2段目の論理回路(L12、…、L42)のALUにおいて倍長の演算を行っている場合は、MUX2は、EXからの入力ではなく、ALUからの入力を選択する。このときの動作は、図2を参照して説明した、リコンフィギュラブル回路12と同じである。
【0149】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【0150】
例えば、上記実施例のリコンフィギュラブル回路12等では、各論理回路のDFF1からの出力が次段の一部の論理回路(次段同列、及び次段左右列)に制限されて入力されるよう構成されているが、このような制限のないリコンフィギュラブル回路において本願発明が適用されるものであっても良い。
【0151】
また、上記実施例では、リコンフィギュラブル回路12、12B、12Cなど、段方向と列方向にマトリックス状に構成された複数の論理回路からなるリコンフィギュラブル回路を例に説明したが、列方向に並ぶように構成された複数の論理回路からなるリコンフィギュラブル回路であっても良い。この場合、各論理回路への演算入力は、前段の論理回路のDFF1からの出力の他、リコンフィギュラブル回路の外部からの入力、あるいはリコンフィギュラブル回路内に設けられた状態保持回路からの入力であっても良い。
【0152】
また、1つの論理回路により構成されるリコンフィギュラブル回路であっても良い。このリコンフィギュラブル回路には、リコンフィギュラブル回路12Aと同様、所定時間ごとに(例えば制御部18から周期的に入力されるクロックに従って)設定部14から設定データが供給される。そして、リコンフィギュラブル回路を構成する論理回路は、この設定部14から供給される設定データに従って動作する。論理回路のDFF1からの出力は、次のクロックでの演算に用いる為の演算入力として、この論理回路自身へループバックされる。なお、演算入力としては、論理回路のDFF1の出力からループバックして入力されるものの他、リコンフィギュラブル回路の外部からの入力、あるいはリコンフィギュラブル回路内に設けられた状態保持回路からの入力であっても良い。
【図面の簡単な説明】
【0153】
【図1】本実施の形態に係る処理装置10、設定データ生成装置30の構成を示す図である。
【図2】リコンフィギュラブル回路12の構成を示す図である。
【図3】リコンフィギュラブル回路12を用いた倍長演算の実行例を説明する図である。
【図4】リコンフィギュラブル回路12を用いた単精度演算の実行例を説明する図である。
【図5】リコンフィギュラブル回路12の各論理回路内にあるALUの内部構成を示す図である。
【図6】リコンフィギュラブル回路12Aの構成を示す図である。
【図7】リコンフィギュラブル回路12Bの構成を示す図である。
【図8】リコンフィギュラブル回路12Bを用いた、3倍長演算の実行例を説明する図である。
【図9】リコンフィギュラブル回路12Bによる倍長演算の実行例を説明する図である。
【図10】リコンフィギュラブル回路12Bによる単精度演算の実行例を説明する図である。
【図11】リコンフィギュラブル回路12Cの構成を示す図である。
【図12】リコンフィギュラブル回路12Cによる3倍長演算の実行例を説明する図である。
【図13】リコンフィギュラブル回路12Cによる倍長演算の実行例を説明する図である。
【図14】リコンフィギュラブル回路12Cによる単精度演算の実行例を説明する図である。
【図15】リコンフィギュラブル回路12Dの構成を示す図である。
【図16】リコンフィギュラブル回路12Dにおける論理回路のALUの構成図である。
【図17】リコンフィギュラブル回路12Dによる倍長演算の実行例を説明する図である。
【図18】リコンフィギュラブル回路12Dによる単精度演算の実行例を説明する図である。
【図19】リコンフィギュラブル回路12Eの構成を示す図である。
【図20】リコンフィギュラブル回路12Eの奇数段に配置される論理回路の構成を示す図である。
【図21】リコンフィギュラブル回路12Eによる倍長演算の実行例を説明する図である。
【図22】リコンフィギュラブル回路12Fの構成を示す図である。
【図23】リコンフィギュラブル回路12Fによる演算例を説明する図である。
【符号の説明】
【0154】
10 処理装置
12 リコンフィギュラブル回路
14 設定部
18 制御部
30 設定データ生成装置
【特許請求の範囲】
【請求項1】
複数の論理回路からなり、第1の論理回路からの演算出力が第2の論理回路に入力されるよう構成された演算処理回路であって、
前記第2の論理回路が、
入力されたデータに対して演算を行う演算回路と、
前記演算回路から出力された演算出力、又は第1の論理回路からの演算出力のいずれかを選択して出力する選択部を備えることを特徴とする演算処理回路。
【請求項2】
前記選択部は、
前記第2の論理回路が単精度演算を実行するときは、前記演算回路から出力された演算出力を選択し、
前記第2の論理回路が倍長演算を実行するときは、前記第1の論理回路からの演算出力を選択することを特徴とする、請求項1記載の演算処理回路。
【請求項3】
前記複数の論理回路が、段方向と列方向にマトリックス状に構成されることを特徴とする、請求項1又は2に記載の演算処理回路。
【請求項4】
論理回路の選択部の出力が、次段の一部の論理回路のみに入力されるように構成されることを特徴とする、請求項3に記載の演算処理回路。
【請求項5】
前記複数の論理回路は、
所定段に配置され、単精度演算又は倍長演算の下位桁の演算を実行する第1タイプの論理回路と、
前記所定段の次段に配置され、単精度演算又は倍長演算の上位桁の演算を実行する第2タイプの論理回路と、を少なくとも含むことを特徴とする、請求項3又は4に記載の演算処理回路。
【請求項6】
段方向に構成され、所定時間ごとに外部から供給される設定データに従って動作する複数の論理回路を備えた演算処理回路であって、
前記論理回路は、
入力されたデータに対して演算を行う演算回路と、
前記演算回路から出力された演算出力を前記所定時間保持する状態保持回路と、
前記演算回路から出力された演算出力、又は前記状態保持回路に保持されていた演算出力のいずれかを選択する選択部を備え、
更に該演算処理回路は、所定の論理回路の選択部の出力を、前記複数の論理回路を構成する一部の論理回路に入力させる接続部と、を備えることを特徴とする演算処理回路。
【請求項7】
所定時間ごとに外部から供給される設定データに従って動作する論理回路を備えた演算処理回路であって、
前記論理回路は、
入力されたデータに対して演算を行う演算回路と、
前記演算回路から出力された演算出力を前記所定時間保持する状態保持回路と、
前記演算回路から出力された演算出力、又は前記状態保持回路に保持されていた演算出力のいずれかを選択する選択部を備え、
更に該演算処理回路は、該論理回路からの選択部の出力を、該論理回路に入力させる接続部と、を備えることを特徴とする演算処理回路。
【請求項1】
複数の論理回路からなり、第1の論理回路からの演算出力が第2の論理回路に入力されるよう構成された演算処理回路であって、
前記第2の論理回路が、
入力されたデータに対して演算を行う演算回路と、
前記演算回路から出力された演算出力、又は第1の論理回路からの演算出力のいずれかを選択して出力する選択部を備えることを特徴とする演算処理回路。
【請求項2】
前記選択部は、
前記第2の論理回路が単精度演算を実行するときは、前記演算回路から出力された演算出力を選択し、
前記第2の論理回路が倍長演算を実行するときは、前記第1の論理回路からの演算出力を選択することを特徴とする、請求項1記載の演算処理回路。
【請求項3】
前記複数の論理回路が、段方向と列方向にマトリックス状に構成されることを特徴とする、請求項1又は2に記載の演算処理回路。
【請求項4】
論理回路の選択部の出力が、次段の一部の論理回路のみに入力されるように構成されることを特徴とする、請求項3に記載の演算処理回路。
【請求項5】
前記複数の論理回路は、
所定段に配置され、単精度演算又は倍長演算の下位桁の演算を実行する第1タイプの論理回路と、
前記所定段の次段に配置され、単精度演算又は倍長演算の上位桁の演算を実行する第2タイプの論理回路と、を少なくとも含むことを特徴とする、請求項3又は4に記載の演算処理回路。
【請求項6】
段方向に構成され、所定時間ごとに外部から供給される設定データに従って動作する複数の論理回路を備えた演算処理回路であって、
前記論理回路は、
入力されたデータに対して演算を行う演算回路と、
前記演算回路から出力された演算出力を前記所定時間保持する状態保持回路と、
前記演算回路から出力された演算出力、又は前記状態保持回路に保持されていた演算出力のいずれかを選択する選択部を備え、
更に該演算処理回路は、所定の論理回路の選択部の出力を、前記複数の論理回路を構成する一部の論理回路に入力させる接続部と、を備えることを特徴とする演算処理回路。
【請求項7】
所定時間ごとに外部から供給される設定データに従って動作する論理回路を備えた演算処理回路であって、
前記論理回路は、
入力されたデータに対して演算を行う演算回路と、
前記演算回路から出力された演算出力を前記所定時間保持する状態保持回路と、
前記演算回路から出力された演算出力、又は前記状態保持回路に保持されていた演算出力のいずれかを選択する選択部を備え、
更に該演算処理回路は、該論理回路からの選択部の出力を、該論理回路に入力させる接続部と、を備えることを特徴とする演算処理回路。
【図1】
【図7】
【図8】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図9】
【図10】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図7】
【図8】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図9】
【図10】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【公開番号】特開2009−181509(P2009−181509A)
【公開日】平成21年8月13日(2009.8.13)
【国際特許分類】
【出願番号】特願2008−22064(P2008−22064)
【出願日】平成20年1月31日(2008.1.31)
【出願人】(000001889)三洋電機株式会社 (18,308)
【Fターム(参考)】
【公開日】平成21年8月13日(2009.8.13)
【国際特許分類】
【出願日】平成20年1月31日(2008.1.31)
【出願人】(000001889)三洋電機株式会社 (18,308)
【Fターム(参考)】
[ Back to top ]