[実施の形態1]
図1は、この発明の実施の形態1に従う半導体演算装置を利用する処理システムの全体の構成を概略的に示す図である。図1において、処理システムは、並列演算を実行する半導体演算装置1と、この半導体演算装置1における処理の制御、システム全体の制御およびデータ処理を行なうホストCPU2と、システムの主記憶として利用されて、必要な種類のデータを格納するメモリ3と、メモリ3に対してホストCPU2を介することなく直接アクセスするDMA(ダイレクト・メモリ・アクセス)回路4とを含む。DMA回路4の制御により、メモリ3と半導体演算装置1との間で直接データ転送を行なうことができ、また、半導体演算装置1に直接アクセスすることができる。
ホストCPU2、メモリ3、DMA回路4および半導体演算装置1は、システムバス5を介して相互接続される。半導体演算装置1は、複数の並列に設けられる基本演算ブロック(並列演算装置)FB1−FBnと、システムバス5との間でデータ/命令を転送する入出力回路10と、この半導体演算装置1内部での演算処理およびデータ転送を制御する集中制御ユニット15を含む。
基本演算ブロックFB1−FBnおよび入出力回路10は、内部データバス12に結合される。集中制御ユニット15、入出力回路10および基本演算ブロックFB1−FBnは、内部バス14に結合される。基本演算ブロックFB(FB1−FBnを総称的に示す)の間には、隣接ブロック間データバス16が設けられる。ここで、図1においては、基本演算ブロックFB1およびFB2の間に配置される隣接ブロック間データバス16を代表的に示す。
基本演算ブロックFB1−FBnを並列に設け、半導体演算装置1において、並列に同一または異なる演算処理を実行する。これらの基本演算ブロックFB1−FBnは、同一構成を有するため、図1においては、基本演算ブロックFB1の構成を代表的に示す。
基本演算ブロックFB1は、メモリセルアレイ(マット)および演算器を含む主演算回路20と、マイクロコード化された実行プログラムを格納するマイクロプログラム格納メモリ23と、基本演算ブロックFB1の内部動作を制御するコントローラ21と、アドレスポインタとして用いられるレジスタ群22と、主演算回路20における不良の救済を行なうためのヒューズプログラムを実行するヒューズ回路24を含む。
コントローラ21は、ホストCPU2からシステムバス5および入出力回路10を介して与えられる制御命令により制御が手渡され、対応の基本演算ブロックFB1−FBnの動作を制御する。基本演算ブロックFB1−FBn内に、マイクロプログラム格納メモリ23を設け、コントローラ21が、このメモリ23内に実行プログラムを格納することにより、基本演算ブロックFB1−FBnそれぞれにおいて、実行する処理内容を変更することができ、基本演算ブロックFB1−FBnにおいてそれぞれ実行される処理内容を変更することができる。
隣接ブロック間データバス16は、内部データバス12を利用することなくデータ転送を実行して、基本演算ブロック間の高速データ転送を可能とする。たとえば、ある基本演算ブロックに内部データバス12を介してデータ転送を行なっている最中に、別の基本演算ブロック間でデータ転送を行なうことができる。
集中制御ユニット15は、制御用CPU25と、この制御用CPU25が実行する命令を格納する命令メモリ26と、制御用CPU25のワーキングレジスタまたはポインタ格納用のレジスタを含むレジスタ群27と、マイクロプログラムのライブラリを格納するマイクロプログラムライブラリ格納メモリ28を含む。集中制御ユニット15は、内部バス14を介してホストCPU2から制御件を手渡されて、内部バス14を介して基本演算ブロックFB1−FBnの演算および転送を含む処理動作を制御する。
このマイクロプログラムライブラリ格納メモリ28に、各種シーケンス処理がコード化されたマイクロプログラムがライブラリとして格納される。集中制御ユニット15が、このメモリ28から必要なマイクロプログラムを選択して、基本演算ブロックFB1−FBnのマイクロプログラム格納メモリ23に格納することにより、これらの基本演算ブロックFB1−FBnの処理内容の変更に柔軟に対応することができる。
ヒューズ回路24は、基本演算ブロックFB1−FBnそれぞれにおいて、不良発生時、冗長置換を用いて不良救済を行なうために用いられる。
図2は、図1に示す基本演算ブロックFBi(FB1−FBn)の要部の構成を概略的に示す図である。図2において、基本演算ブロックFBiにおいて、主演算回路20は、メモリセルが行列状に配列されるメモリセルマット30と、このメモリセルマット30に格納されるデータに対して演算処理を行なう演算処理ユニット群(ALU処理エレメント群)32を含む。メモリセルマット30が、複数のデータエントリDERYに分割される。このデータエントリDERYは、番号0からMAX_ENTRYが付されたデータエントリを含む。各データエントリは、ビット位置として、0からMAX_BITを有し、そのビット幅は、MAX_BIT+1である。
演算処理ユニット群(ALU群)32においては、各データエントリDERYに対応して演算処理ユニット(以下、適宜ALU処理エレメントと称す)34が配置される。この演算処理ユニット群32に対して、ALU間相互接続用スイッチ回路44が設けられる。
以下の説明においては、エントリ(ERY)は、データエントリDERYと、このデータエントリに対応して設けられるALU処理エレメントとを含むものとして規定する。
この主演算回路20の動作は、プログラム格納メモリ23に格納されるプログラム(マイクロプログラム)により設定される。コントローラ21は、このプログラム格納メモリ23に格納されるプログラムに従って処理を実行する。
レジスタ群22においては、ポインタレジスタr0−r3が設けられる。演算対象のデータのメモリセルマット30内のアドレスが、これらのポインタレジスタr0−r3に格納される。コントローラ21は、これらのポインタレジスタr0−r3に格納されるポインタに従って、主演算回路20におけるエントリ(データエントリ)またはデータエントリ内の位置を指定するアドレスを生成して、メモリセルマット30と演算処理ユニット群32との間のデータの転送(ロード/ストア)を制御する。
データ処理ユニット群32においては、ALU処理エレメントの演算内容が、動作モードに応じて、SIMD型演算時においては、全エントリ共通にまた、MIMD型演算時には各エントリ単位で決定される。また、ALU間相互接続スイッチ回路44も、各エントリに対応して配置されるALU間データ転送回路を含む。エントリ間でのデータ転送時、この転送先は、演算モードに応じて、SIMD型演算時には各エントリ共通に、また、MIMD型演算時には、各エントリ個々に設定することが可能である。
SIMD型演算を実行し、エントリにおいて同一に演算を実行する場合には、コントローラ21の制御により、このALU群32の演算内容およびALU間相互接続用スイッチ回路44の接続経路が共通に設定される。この接続経路は、図2において破線で示すように、コントローラ21が、プログラム格納メモリ23に格納される命令に従って、経路設定の制御を選択的に実行する(MIMD型演算時には、各エントリにおいて演算内容および転送先が、データエントリの記憶データに従って設定される。SIMD演算時には、コントローラ21により演算内容および転送先がエントリ共通に設定される)。
図3は、図2に示す主演算回路20の構成をより具体的に示す図である。図3において、メモリセルマット30が2つのメモリマット30Aおよび30Bに分割される。これらのメモリマット30Aおよび30Bにおいて、メモリセルMCが行列状に配列される。メモリセルMCは、図3においては、書込ポートと読出ポートとが別々に設けられるデュアルポートメモリセルの構成を有する。しかしながら、このメモリセルMCは、シングルポートメモリセルであってもよい。メモリセルMCは、SRAMセル(スタティック・ランダム・アクセス・メモリ)である。
これらのメモリマット30Aおよび30B各々において、行方向に整列して配置されるメモリセルMCに対応して、書込ワード線WWLおよび読出ワード線RWLが設けられる。また、列方向に整列して配置されるメモリセルMCに対応して、書込ビット線対WBLPおよび読出ビット線対RBLPがそれぞれ設けられる。
これらのメモリマット30Aおよび30Bは、各々、データエントリDERY0−DERY(m−1)のm個のデータエントリを各々有する。各書込ビット線対WBLPおよび読出ビット線対RBLPの組に対応して、データエントリが設けられる。
書込ワード線WWLおよび読出ワード線RWLにより、データエントリDERY0−DERY(m−1)の同一ビット位置のメモリセルが並行して選択される。
メモリマット30Aおよび30Bの間に、演算処理ユニット群32が設けられる。この演算処理ユニット群32に対し、図3においては明確には示していないが、ALU間相互接続用スイッチ回路(44)が設けられる。
演算処理ユニット群32とメモリマット30Aの間に、センスアンプ群40Aおよびライトドライバ群42Aが配置され、演算処理ユニット群32とメモリマット30Bの間に、センスアンプ群40Aおよびライトドライバ群42Bが配置される。
センスアンプ群40Aは、メモリマット30Aの読出ビット線対RBLP(RBLP0−RBLP(m−1))それぞれに対応して配置されるセンスアンプSAを含む。ライトドライバ群42Aは、メモリマット30Aの書込ビット線対WBLP(WBLP0−WBLP(m−1))それぞれ対応して配置されるライトドライバWBを含む。
センスアンプ群30Bも、同様、メモリマット30Bの読出ビット線対RBLP(RBLP0−RBLP(m−1))それぞれに対応して設けられるセンスアンプSAを含む。ライトドライバ群42Bは、メモリマット30Aの書込ビット線対WBLP(WBLP0−WBLP(m−1))それぞれに対応して配置されるライトドライバWBを含む。なお、シングルポートメモリセルが用いられる場合には、書込ビット線対WBLPおよび読出ビット線対RBLPは、共通のビット線対BLPで構成され、このビット線対BLPに、センスアンプおよびライトドライバが共通に結合される。
メモリマット30Aに対しては、読出ワード線RWLを選択するためのリード用ロウデコーダ36rAおよび書込ワード線WWLを選択するライト用ロウデコーダ36wAが設けられる。メモリマット30Bに対しても、同様、読出メモリセルRWLを選択するためのリード用ロウデコーダ36rBおよび書込ワード線WWLを選択するライト用ロウデコーダ36wBが設けられる。
これらのセンスアンプ群40Aおよびライトドライバ群42Aとライトドライバ群42Bおよびセンスアンプ群40Bに対して、内部データバス(図1に示すバス12)とデータの転送を行なう入出力回路49が設けられる。
この入出力回路49は、メモリマット30Aおよび30Bそれぞれに転送されるデータを並列に受けて転送する。メモリマット30Aおよび30Bそれぞれに格納されるデータは、各メモリマットごとに、ビット位置の並び替えが行なわれてデータが格納されてもよく、また、メモリマット30Aおよび30Bそれぞれに、データ配列変換用のレジスタ回路が設けられ、ワード線単位でのデータの書込および読出が、このレジスタ回路とメモリマットの間で行なわれてもよい。
入出力回路49の転送データのビット幅が、エントリ(データエントリ)の数よりも小さい場合には、データエントリを選択するためのエントリ選択回路(列選択回路)がセンスアンプ群およびライトドライバ群に対して設けられるが、図3においては明確には示していない。入出力回路49の転送データビット幅に応じて、適切な数のデータエントリが並行して選択される構成が用いられれば良い。入出力回路49が、ビット幅変換機能を有し、入出力回路49とデータエントリDERY0−DERY(m−1)との間で並行してデータ転送を行ない、また、入出力回路49と内部データバス(図1のバス12)との間で内部データバスのビット幅単位でデータ転送を行なってもよい。
この図3に示す構成においては、リード用ロウデコーダ36rAおよび36rBが、同一の構成を有し、同一のアドレスにしたがって、同一のビット位置の読出ワード線を選択状態へ駆動する。演算処理結果が、メモリマット30Aに格納される場合には、ライト用ロウデコーダ36wAが活性化され、対応の書込ワード線が選択状態へ駆動される。この場合、メモリマット30Bに対して設けられるライト用ロウデコーダ36wBが非活性状態に維持される。
この図3に示す主演算回路の構成の場合、メモリマット30Aおよび30Bと2つのメモリマットを準備し、これらのメモリマット30Aおよび30Bの間に、ALU群32を配置している。したがって、メモリマット30Aおよび30B各々に演算対象のデータの組をそれぞれ格納することにより、各マシンサイクルにおいて、演算、データの書込およびデータの読出を行なうことができ、高速演算処理が実現される。
なお、シングルポートメモリセルが用いられる場合、ライト用ロウデコーダおよびリード用ロウデコーダは、共通のロウデコーダで実現される。この構成の場合には、データのロードおよびストアが異なるマシンサイクルで実行される。
この図3に示す主演算回路20においてSIMD型演算が実行される場合には、各エントリにおいて同じ演算が実行される。このSIMD演算は、以下の様に実行される。
(i)演算対象のデータDAおよびDBの同一ビット位置のデータビットDA[i]およびDB[i]をメモリマット30Aおよび30Bから読出して対応のエントリのALU処理エレメントに転送する(ロードする)。
(ii)ALU処理エレメントにおいて、これらのデータビットDA[i]およびDB[i]に対して指定された演算を実行する。
(iii)演算結果データビットC[i]を指定されたエントリのビット位置に書き込む(ストアする)。この書込動作と並行して、次のビット位置のデータDA[i+1]およびDB[i+1]をALU処理エレメントにロードする。
(iv)上述の操作(i)から(iii)を演算対象のデータのビットがすべて演算されるまで繰返す。
なお、MIMD型演算の実行シーケンスについては、後に詳細に説明する。また、2ビット単位で演算が実行される場合もあり(SIMD型演算およびMIMD型演算いずれにおいても)、その場合には、2つのデータエントリDERYが、1つのエントリERYを構成する。
図4は、ALU群32に含まれる単位要素のALU処理エレメント34の構成を概略的に示す図である。ALU処理エレメント34においては、1ビット単位および2ビット単位での演算操作が可能である。メモリマット30Aおよび30Bそれぞれにおいて、データエントリDERYAおよびDERYBは、各々、偶数アドレスのデータビットA[2i]を格納する偶数データエントリDERYeと、奇数アドレスのデータビットA[2i+1]を格納する奇数データエントリDERYoとで構成される。偶数データエントリDERYeおよび奇数データエントリDERYoの同じアドレスのデータビットに対し並列に演算処理を行ない、高速に、処理を実行する。
データエントリDERYAの、奇数データエントリDERYoおよび偶数データエントリDERYeは、それぞれ内部データ線65aおよび66aに結合される。データエントリDERYBの奇数データエントリDERYOoおよび偶数データエントリDERYeは、それぞれ、内部データ線65bおよび66bに結合される。
ALU処理エレメント34は、演算処理を行なうための演算回路として、縦続接続される全加算器50および51を含む。このALU処理エレメント34における処理データおよび演算内容を設定するために、Xレジスタ52、Cレジスタ53、Fレジスタ54、Vレジスタ55およびNレジスタ56が設けられる。Xレジスタ52は、演算データを格納し、また他のALU処理エレメントに対するデータ転送を行なうために用いられる。Cレジスタ53は、加算演算時のキャリーを格納する。Fレジスタ54は、その格納値に従って、演算ビットの反転を選択的に行ない、減算処理を実現する。
Vレジスタ55は、このALU処理エレメント34における演算操作(データ転送を含む)に対してマスクをかけるマスクビットVを格納する。すなわち、マスクビットVが“1”に設定されるときに、ALU処理エレメント34は、指定された演算操作を実行し、マスクビットVが“0”に設定されると、演算操作は禁止される。これにより、ALU処理エレメント単位で、演算操作を選択的に実行する。
ALU処理エレメント34は、さらに、2ビットデータを並列に格納するためのXHレジスタ57およびXLレジスタ58と、レジスタ52、57および58からのデータの組の一方の2ビットをDレジスタ59の格納値に従って選択するセレクタ(SEL)60と、Fレジスタ54の格納ビットに従ってセレクタ60が選択した2ビットに対する反転/非反転操作を行なう選択反転回路61と、レジスタ55および56の格納データに従って全加算器50および51のサム出力Sを選択的に出力するゲート62および63を含む。
選択反転回路61の2ビット出力は、全加算器50および51のA入力へそれぞれ与えられる。Xレジスタ52は、スイッチ回路SWaにより、内部データ線65aおよび65bのいずれかに接続され、また、スイッチ回路SWbにより、内部データ線66aおよび66bのいずれかに接続される。このスイッチ回路SWaおよびSWbにより、1ビット演算を行なう場合、メモリマット30Aおよび30Bの一方のデータをXレジスタに格納し、またデータ転送時、転送データをXレジスタに格納する。
XHレジスタ57は、スイッチ回路SWcを介して、内部データ線65aおよび65bの一方に接続可能であり、また、スイッチ回路SWmを介して内部データ線66aおよび66bの一方に接続可能である。XLレジスタ58が、スイッチ回路SWdにより、内部データ線66aおよび66bのいずれかに接続可能である。
全加算器50のB入力は、スイッチ回路SWeにより、内部データ線65aおよび65bのいずれかに接続される。ゲート62は、スイッチ回路SWfにより、内部データ線65aおよび65bのいずれかに接続される。全加算回路51のB入力は、スイッチ回路SWgおよびスイッチ回路SWhにより、内部データ線65a、65b、66aおよび66bのいずれかに接続可能である。
ゲート63は、スイッチ回路SWjにより、内部データ線65aおよび65bのいずれかに接続可能であり、また、スイッチ回路SWkにより、内部データ線66aおよび66bのいずれかに接続可能である。
これらのスイッチ回路SWa−SWh、SWj、SWkおよびSWmにより、2ビット並列除算処理を行なう場合の1ビット単位のビットシリアル処理を実現し、また、データ転送時の2ビット単位でのデータ転送および1ビット単位でのデータ転送を実現する。
ALU処理エレメント34が、1ビット演算、すなわち1ビットシリアル態様で演算を行なう場合には、全加算器51のキャリー入力Cinは、スイッチ67で、Cレジスタ53に結合される。ゲート62および63は、Vレジスタ55およびNレジスタ56の格納値がともに“1”のときに、指定された演算処理を実行し、それ以外においては、ゲート62および63は、出力ハイインピーダンス状態となる。
Cレジスタ53の格納値は、全加算器50のキャリー入力Cinに、スイッチ回路67を介して接続される。スイッチ回路67は、1ビット単位での演算処理の実行時には、全加算器50のキャリー出力Coを切離して、全加算器51のキャリー入力Cinを、Cレジスタ53に接続する(このときには、全加算器51において加算演算が実行される)。
この図4に示すALU処理エレメント34においては、Xレジスタ52およびXHレジスタ57またはXHレジスタ57およびXLレジスタ58を用いて2ビット単位でのデータ転送を、別のエントリと対応のエントリとの間で行なうことができる。
このデータ転送を制御するために、ALU間相互接続用スイッチ回路44において、エントリに対応して、移動データレジスタ(リコンフィギャラブル・エントリ・コミュニケーション・レジスタ;RECMレジスタ)70と、この移動データレジスタ70に格納されるデータビットE0−E3に従って、データ転送経路を設定するALU間通信回路(リコンフィギャラブル・エントリ・コミュニケータ:RECM)71が設けられる。
このALU処理エレメント34においては、また、エントリ単位で、個々に、その演算内容を設定するために、MIMD命令レジスタ72と、このMIMD命令レジスタに格納されるビット値M0およびM1をデコードして、全加算器50の演算内容を設定して、組合せ論理を実現する制御信号を生成するMIMD用命令デコーダ74が設けられる。MIMD命令レジスタ72のビットM0およびM1により、各エントリごとに、異なる演算操作を実現することができ、MIMD(マルチプル・インストラクション・ストリーム−マルチプル・データ・ストリーム)型演算を実現する。このALU処理エレメント34におけるMIMD演算およびデータ通信を説明する前に、SIMD演算時の予め準備される命令群について説明する。
このメモリマットのアドレスを指定するポインタレジスタとして、ポインタレジスタp0−p3が用いられる。また、別に、図2に示すように、汎用レジスタ内のポインタレジスタr0−r3も同様、利用される。ポインタレジスタp0−p3は、図2に示すレジスタ群22に含まれる。
図5は、ポインタレジスタp0−p3の操作を行なうポインタレジスタ命令を一連にして示す図である。
命令“ptr.set n,px”は、任意の値nをポインタレジスタpxにセットする命令である。この任意の値nは、1つのデータエントリのビット幅(0−MAX_BIT)の範囲で任意の値を取ることができる。xは、0から3のいずれかである。
命令“ptr.cpy px,py”は、ポインタレジスタpxの内容を、ポインタレジスタpyに転送して格納するコピー命令である。
命令“ptr.inc px”は、ポインタレジスタpxのポインタを1増分する命令である。
命令“ptr.inc2 px”は、ポインタレジスタpxのポインタを2増分する命令である。
命令“ptr.dec px”は、ポインタレジスタpxのポインタを1減分する命令である。
命令“ptr.dec2 px”は、ポインタレジスタpxのポインタを2減分する命令である。
命令“ptr.sft px”は、ポインタレジスタpxのポインタを、1ビット左シフトする命令である。
命令“ptr.inc2 px”および命令“ptr.dec2 px”を利用することにより、2ビット並列に処理を実行することができる(奇数アドレスおよび偶数アドレスを同時に更新する)。この2ビット動作時においては、ポインタが2ビット単位で増減されても、メモリマットにおいては、選択ワード線の位置は、1ロウアドレスずつ変化する。
図6は、1ビット動作時のALU処理エレメントに対するロード・ストア命令を一覧にして示す図である。
図6において命令“mem.ld.♯R@px”は、ポインタレジスタpxのポインタが示す位置Aj[px]のデータビットを、レジスタ♯Rに格納する(ロードする)命令である。レジスタ#Rは、Xレジスタ、Nレジスタ、Vレジスタ、Fレジスタ、Dレジスタ、XLレジスタ、XHレジスタおよびCレジスタのいずれかである。なお、1ビットALU演算時においてはXレジスタが利用され、XLレジスタおよびXHレジスタは用いられない。
命令“mem.st.♯R@px”は、レジスタ♯Rの格納値を、ポインタレジスタpxの指定するメモリセル位置Aj[px]へ書込む(ストアする)命令である。
このストア命令は、マスクレジスタ(Vレジスタ55)がクリアされているときには実行されない。
ストア命令においても、レジスタ♯Rは、Xレジスタ、Nレジスタ、Vレジスタ、Fレジスタ、Dレジスタ、XLレジスタ、XHレジスタ、およびCレジスタのいずれかである。
命令“mem.swp.X@px”は、Xレジスタ52の格納値とポインタレジスタpxの指定するメモリセル位置Aj[px]のデータとを交換する命令である。このスワップ命令は、マスクレジスタ(Vレジスタ55)およびNレジスタ56にともに“1”がセットされているときに実行される。Xレジスタ52のクリア/セットを、メモリセルの格納データで実行することにより、回路構成を簡略化する。
図7は、2ビット動作時のALU処理エレメントに対するロード/ストア命令を一覧にして示す図である。
図7において、命令“mem.2.ld.X@px”は、ポインタレジスタpxのポインタが指定するメモリセル位置Aj[px]およびAj[px+1]のメモリセルのデータを、それぞれ、XLレジスタ58およびXHレジスタ57に格納する命令である。すなわち、連続アドレス位置のデータの下位ビットがXLレジスタ58に格納され、上位ビットがXHレジスタ57に格納される。
命令“mem.2.st.X@px”は、ポインタレジスタpxのポインタが指定するアドレスの連続アドレスAj[px]およびAj[px+1]のメモリセルへ、それぞれXLレジスタおよびXHレジスタの格納値を格納する命令である。ただし、この動作は、マスクレジスタ(Vレジスタ)55がクリア状態の時には実行されない。
命令“mem.2.swp.X@px”は、ポインタレジスタpxのポインタが指定するアドレスおよび上位アドレスAj[px]およびAj[px+1]のデータが、それぞれ、XLレジスタ58およびXHレジスタ57の格納値と交換される命令である。ただし、このスワップ命令は、Vレジスタ55およびNレジスタ56がともにクリア状態のときには実行されない。
この2ビット動作時においては、ポインタレジスタpxのポインタを用いて連続アドレスAj[px]およびAj[px+1]を同時にアクセスすることにより、2ビット並列処理を実行する。この2ビット動作を利用することにより、移動データレジスタ70およびMIMD命令レジスタ72へのデータの格納をも実行することができる。
なお、この2ビット演算命令においては、XLレジスタおよびXHレジスタが利用される。しかしながら、SIMD演算時において、XLレジスタおよびXHレジスタを利用し、MIMD演算命令のときにXレジスタおよびXHレジスタが利用されてもよい。また、SMID型演算およびMIMD型演算両者においてXレジスタおよびXHレジスタが利用されても良い。
図8は、1ビット動作時のエントリ間データ移動(move:vcopy)を行なう命令を一覧にして示す図である。このエントリ間データ移動時には、ポインタレジスタrnが用いられる。エントリ間データ移動用ポインタレジスタrnの候補レジスタとしては、4つのポインタレジスタr0−r3が用いられる。
命令“ecm.mv.n ♯n”は、定数n離れたエントリj+nのXレジスタの格納値をエントリjのXレジスタに転送する命令である。
命令“ecm.mv.r rn”は、レジスタrnの格納値離れたエントリj+rnのXレジスタ値を、エントリjのXレジスタに転送する操作を示す命令である。
命令“ecm.swp”は、隣接エントリj+1およびjのXレジスタXjおよびXj+1の格納値を交換する操作を指令する命令である。
この図8に示すエントリ間データ移動は、各エントリ対において共通に実行される。
図9は、2ビット動作時のALUにおけるエントリ間データ移動(move)の操作を指令する命令を一覧にして示す図である。この2ビット操作時においては、命令記述子“ecm2”が、1ビット操作時の命令記述子“ecm”に代えて用いられる。この命令記述子“ecm2”が指定されると、2ビット単位での演算処理が指定され、XHレジスタおよびXLレジスタ間(またはXLレジスタおよびXHレジスタ間)での並列データ転送が行なわれる。各レジスタ間の転送内容の指定には、先の1ビット動作時と同じ命令記述子“mv.n♯n”、“mv.r rn”および“swp”が用いられる。
したがって、SIMD型演算実行時において、転送時データレジスタXHレジスタおよびXLレジスタが利用されても良く、XレジスタおよびXHレジスタが利用されてもよい。この2ビット単位の移動操作の場合においても、各エントリのデータ転送の移動量は同じである。
また、算術演算命令として、加算命令“alu.adc@px”、減算命令“alu.sbc@px”、反転命令“alu.inb@px”、および関数値によるレジスタ値設定命令“alu.let f”が準備される。
加算命令“alu.adc@px”は、ポインタレジスタpxのポインタにより指定されるメモリアドレスのデータとXレジスタの値を加算し、結果をメモリマットに返す。メモリセルアドレスAjに、加算後の値が格納され、Cレジスタにキャリーが格納される。
減算命令“alu.sbc@px”は、ポインタレジスタpxに指定されるメモリアドレスのデータとXレジスタの値を減算し、結果がメモリマットに返される。メモリセルAjに減算後の値が格納され、Cレジスタにキャリーが格納される。
反転命令“alu.inv@px”は、ポインタレジスタpxのポインタにより指定されるメモリアドレスのデータを反転して、メモリマットに返却する(元の位置に)。
関数値命令“alu.let f”は、関数f=(F・8+D・4+N・2+C)が表わす関数値に従って、各Fレジスタ、Dレジスタ、NレジスタおよびCレジスタの値を、対応のビット値で設定する。
また、2ビット演算命令として、ブース命令“alu2.booth”および実行命令“alu2.exe@px”が設けられる。
ブース命令“alu2.booth”は、二次のブースアルゴリズムに従って乗算を行なう命令であり、XHレジスタ、XLレジスタおよびFレジスタの値から、Nレジスタ、DレジスタおよびFレジスタの次の演算用の値を決定する。また、実行命令“alu2.exe@px”は、DレジスタおよびFレジスタの値に従って、条件分岐する演算命令である。
これらの命令を利用することにより、各エントリにおいて、同じ演算命令に従って、演算またはデータ転送を実行することができる。この命令の実行制御は、図1に示すコントローラ21により制御される。
次に、先の図4に示すデータ移動レジスタ(RECMレジスタ)70およびMIMD命令レジスタ72を用いたMIMD型演算操作について説明する。
このMIMD形式の論理演算実行時においては、命令“alu.op.mimd”が用いられる。このMIMD形式演算においては、論理演算命令のみが実行可能な命令として準備される。すなわち、AND命令、OR命令、XOR命令、およびNOT命令の4種類の命令が準備される。これらの4種類の命令からの実行命令の選択に最低限必要なビット数は2ビットである。したがって、このMIMD命令レジスタ72に、2ビットデータM0およびM1が格納される。このMIMD型演算の内容が追加されれば、実行可能なMIMD演算の数に応じて、命令ビット数が設定される。
図10は、MIMD型演算、すなわちMIMD形式の命令実行時のALU処理エレメントの内部接続構成を概略的に示す図である。以下、図10を参照して、MIMD形式命令実行時のALU処理エレメントの内部構成について説明する。
MIMD形式命令の実行時、2ビット演算操作用レジスタとして、Xレジスタ52およびXHレジスタ57が用いられる。XLレジスタ58は、このMIMD演算実行時には、用いられない。したがって、スイッチ回路SWaは、内部データ線65aをXレジスタ52に接続し、スイッチ回路SWmは、内部データ線66aを、XHレジスタ57に結合する。スイッチ回路SWeが、内部データ線65bを、加算器50のB入力に結合し、スイッチ回路SWfが、ゲート62の出力を内部データ線65bに結合する。スイッチ回路SWhが、内部データ線66bを、加算器51のB入力に接続し、スイッチ回路SWkが、ゲート63の出力を内部データ線66bに接続する。
MIMD用命令デコーダ74により、加算器50は、前述のように、AND命令、OR命令、XOR命令およびNOT命令のいずれかを実行する。この論理演算結果が、メモリマット30BのデータエントリDERYBに格納される。1つの論理演算のみが行なわれるのではなく、加算器50および51において並列に、同じ論理演算処理が行なわれる場合、MIMD用命令デコーダ74の出力する制御信号が、加算器50および51に共通に与えられる。ここでは、加算器50を用いて、各エントリ個々に論理演算を実行する。
また、ALU間通信回路(RECM)71は、移動データレジスタ(RECMレジスタ)70に格納されるビット値E0−E3に従ってXレジスタ52およびXHレジスタ57を、内部データ線に結合し、このデータビットE0−E3により指定される転送先とデータの転送を行なう。
この図10に示すALU処理エレメント34においては、MIMD用命令デコーダ74の制御信号に従って、加算器50の内部演算内容が設定されて、各ALU処理エレメントごとに、指定された論理演算が実行され、また、ALU間通信回路71により各エントリ個々にデータ移動量および転送方向を設定して、データ移動を実行することができる。
図11は、MIMD命令用レジスタ72の格納データビット(MIMD命令ビット)M0およびM1と加算器50において実行される演算の対応を一覧にして示す図である。図11において、ビットM0およびM1がともに“0”のとき、否定演算NOTが指定される。ビットM0およびM1が、それぞれ“0”および“1”のとき、論理和演算ORが指定される。ビットM0およびM1が、それぞれ、“1”および“0”のとき、排他的論理和演算XORが指定される。ビットM0およびM1がともに“1”のとき、論理積演算ANDが指定される。
したがって、本実施の形態においては、4種類の論理演算が準備されており、2ビットのMIMD命令M0およびM1により、演算内容が指定される。この指定される演算内容が多くなれば、それに応じて、MIMD命令用レジスタ72の格納データビットの数も大きくされる。
図12は、このMIMD演算命令と、そのときに実行される内容とを一覧にして示す図である。
図12において、M0jおよびM1jは、ALU処理エレメントALUjにおけるMIMD命令ビットを示し、Ajは、処理エレメントALUjにおける演算結果を示す。ここで、jは、エントリ番号であり、範囲は、エントリ番号の0からMAX_ENTRYである。
この演算命令は、マスクビットVjが“1”のときに、実行される。“!”は、否定演算(反転)を示す。したがって、ビットM0jおよびM1jがともに“0”でありマスクビットVjが“1”のとき、否定演算命令“alu.op.not”が実行される。この場合、エントリjにおいて、ポインタpxが指定するビットAj[px]の反転値!Aj[px]が、演算結果データビットAjとして求められる。
論理和演算命令“alu.op.or”の場合には、ビットM0jが“0”に設定され、ビットM1jが、“1”に設定される。マスクビットVjは、命令実行時、“1”である。この論理和演算の場合には、ポインタpxが指定するデータビットAj[px]とXレジスタに格納されたデータビットXjとの論理和が求められる。
排他的論理和演算“alu.op.xor”のときには、ビットM0jが“1”に設定され、ビットM1jが、“0”に設定される。マスクビットVjは、命令実行時、“1”である。この論理和演算命令の場合には、ポインタpxが指定するデータビットAj[px]とXレジスタに格納されたデータビットXjとの排他的論理和が求められる。
論理積演算命令“alu.op.and”のときには、ビットM0jおよびM1jがともに“1”に設定される。マスクビットVjは、“1”である。この場合、ポインタpxが指定するデータビットAj[px]とXレジスタの格納データビットXjとの論理積が求められる。
図13は、1つのデータエントリにおけるデータビットの格納領域を概略的に示す図である。このデータエントリDERYは、少なくとも3つの領域RGa、RGbおよびRGcに区分される。領域RGaは、ポインタapにより、最下位アドレスビット(開始アドレスas)が指定され、その領域のビット幅はnビットである。領域RGbは、開始アドレスbsが、ポインタbpにより指定され、ビット幅は、この開始アドレスbsからnビットの領域である。領域RGcは、マスクデータおよび演算MIMD命令データを格納する領域である。この領域RGcのビット幅は、ハードウェア(H/W)、すなわち、実行可能命令の数に依存する。このメモリマットにおいて、実際に実行すべき演算内容および演算対象のデータビット幅およびデータ数に応じて、この領域RGcのビット幅は決定される。開始アドレスは、ポインタcsにより設定される。
また、作業データを格納するためのテンポラリ領域も用いられる。後に具体的な演算操作について説明する際に、併せてデータ領域の構成についても説明する。
図14は、各エントリにおいて演算命令を個々に実行するMIMD型演算実行時の命令の形式を示す図である。このMIMD演算命令は、コード“mx_mimd”で表わされる。このMIMD演算“mx_mimd”は、図1に示すコントローラ21により実行される。このMIMD演算のプロトタイプは、“void mx_mimd(intap,intbp,intcp,intn)”で表わされる。引数apはディスティネーションアドレスであり、bpはソースアドレスであり、cpは、MIMD命令格納アドレスを示す。nはビット各領域のビット長である。すなわち、intapにより、図13に示す領域RGaの開始アドレスasが設定され、intbpにより、図13に示す領域RGbの開始アドレスbsが指定され、intcpにより、図13に示す領域RGcの開始アドレスcsが設定される。nは、それぞれ領域RGaおよびRGbの領域のビット幅である。図14に示すプロトタイプにおいては、各領域RGaおよびRGbのビット幅はnビットに設定され、領域RGcのビット幅は、実行可能命令数の底2の対数に設定される。
この図14に示すMIMD演算実行時においては、以下の処理ステップが実行される。ステップ1:
mx_mimd命令を、コントローラにおいて実行する。ロード命令ldに従ってポインタcpが指定するビット位置(アドレス)のMIMD演算用命令M0,M1を、図10に示すMIMD命令用レジスタ72にコピーする。これにより、エントリ単位で実行すべき演算内容alu.op.mimdが設定される。ここで、“mimd”は、or、xor、and、およびnotのいずれかである。
ステップ2:
ポインタapが指定するビット位置(アドレス)の領域の内容とポインタbpが指定するビット位置(アドレス)の領域の内容とを1ビット単位で読出して、ALU処理エレメントに転送する(ロードする)。
ステップ3:
これらのロードされたデータビットに対して、MIMD用命令レジスタ72の格納データにより指定された論理演算を行なう。このMIMD演算命令は、ALU処理エレメントにおいて、マスクビット(Vレジスタ55)が1に設定されたときにのみ実行される。
ステップ4:
その演算結果を、開始アドレスasの図13に示す領域RGaの、ポインタapが示すビット位置(アドレス)に格納する。
ステップ5:
ステップ2から4の操作を、演算対象のデータビット全てに対して繰返し実行する。各演算においてはビットシリアルに演算は実行されるものの、複数のエントリにおいて並行して処理が実行され、SIMD型演算の高速演算性を利用して、並列性の低い演算を並行して実行することが可能となり、高速処理が実現される。
MIMD演算実行時において、ポインタap,bpおよびcpは、メモリマットのエントリに共通に与えられ、各エントリにおいて、MIMD演算命令alu.op.mimdに従って指定される演算(論理演算)が個々にビットシリアル態様で実行される。
図15は、図10に示す加算器50の構成の一例を示す図である。図15において、加算器50は、入力AおよびBに与えられるデータビットを受けるXORゲート81と、入力AおよびBのビットを受けるANDゲート82と、入力Aに与えられるビットを反転するインバータ80と、キャリー入力CiからのビットとXORゲート81の出力ビットとを受けるXORゲート83と、XORゲート81の出力ビットと、キャリー入力Ciからのビットとを受けるANDゲート84と、ANDゲート82および84の出力ビットを受けて、キャリー出力Coを生成するORゲート85を含む。サム出力Sが、XORゲート83から与えられる。
この加算器50においては、さらに、MIMD制御データに従って内部経路を切換えるために、スイッチ回路87a−87gが設けられる。スイッチ回路87aは、反転指示信号φnotに従って、インバータ80の出力信号をサム出力Sに結合する。スイッチ回路87bは、論理積指示信号φandに従って、ANDゲート82の出力をサム出力Sに結合する。スイッチ回路87cは、排他的論理和指示信号φxorに従って、XORゲート81の出力をサム出力Sに結合する。スイッチ回路87eは、論理和指示信号φorに従って、XORゲート81の出力をORゲート85の第1の入力に結合する。スイッチ回路87fは、論理和指示信号φorに従ってORゲート85の出力を、サム出力Sに結合する。スイッチ回路87dは、論理和指示信号の反転信号/φorに従って、ANDゲート84の出力を、ORゲート85の第1の入力に選択的に結合する。
スイッチ回路87gは、MIMD演算指示信号の反転信号/φmindに従って、XORゲート83の出力をサム出力Sに結合する。
MIMD指示信号/φmimdは、MIMD演算が行なわれるときに非活性状態に設定され、スイッチ回路87gを、出力ハイインピーダンス状態に設定する。同様、スイッチ回路87dも、論理和演算実行時、論理和指示信号の反転信号/φorに従って出力ハイインピーダンス状態となる。
この図15に示す加算器50は、全加算器であり、一般的に用いられる回路構成である。インバータ80が、否定演算を行なうために、新たに設けられるが、図10に示す選択反転回路61の出力を、選択するように設けられてもよい。この場合には、Fレジスタ(図10参照)のデータビットを、反転演算を行なうようにそのビット値を設定する。
また、これに代えて、XORゲート81においては、インバータが設けられており、このXORゲート81内のインバータをNOT演算実行用のインバータとして利用しても良い。
この図15に示す加算器50の構成において、否定演算NOTを行なう場合には、スイッチ回路87aが導通し、残りのスイッチ回路はすべて非導通状態となり、サム出力Sにインバータ80の出力信号が伝達される。
論理積演算ANDを実行する場合には、論理積指示信号φandが活性化され、スイッチ回路87bが導通し、残りのスイッチ回路が非導通状態(出力ハイインピーダンス状態)となる。したがって、ANDゲート82の出力ビットが、サム出力Sに、スイッチ回路87bを介して伝達される。
論理和演算ORの実行時においては、論理和指示信号φorが活性化され、スイッチ回路87eおよび87fが導通し、残りのスイッチ回路が出力ハイインピーダンス状態となる。したがって、XORゲート81およびANDゲート82の出力ビットを受けるORゲート85の出力ビットが、サム出力Sに伝達される。このOR演算実行時、XORゲート81が、入力AおよびBの与えられるビット値の論理値が異なるときに、“H”(“1”)を出力する。ANDゲート82は、入力AおよびBに与えられるビットがともに“1”のときに、“1”の信号を出力する。これにより、入力AおよびBに与えられるビットの少なくとも一方が論理値“1”のとき、ORゲート85から、スイッチ回路87fを介してサム出力Sに“1”の信号が出力され、OR演算結果が求められる。
この図15に示すように、実行されるMIMD演算に応じて、スイッチ回路87a−87gを、選択的に導通状態に設定することにより、指定された演算命令を、加算器50の内部構成要素の論理ゲートを利用して実行することができる。
なお、この加算器50の構成は単なる一例であり、たとえばFPGA(フィールドプログラムゲートアレイ)の構成と同様にして、内部の接続経路がマトリックス状に配列され、その内部配線が、演算指示信号に応じて設定される構成が用いられてもよい。
また、この図15に示す全加算器50の構成は、単なる一例であり、この構成に限定されるものではない。利用される全加算器の構成に応じて内部の接続経路が、演算指示信号に応じて設定されれば良い。
図16は、エントリ間のデータ通信を行なうための配線領域を概略的に示す図である。図16において、メモリマット30AとALU間相互接続用スイッチ回路44の間に、データ通信用配線領域90が設けられる。このデータ通信用配線領域90は、±1ビットシフト配線が配置される領域91と、±4ビットのシフト用配線が配置される領域92と、±16ビットのシフト用の配線が配置される領域93と、±64ビットシフト用配線が配置される領域94と、±256ビットシフト用の配線が配置される領域95を含む。
±iビットシフト配線は、iビット離れたエントリ間のデータ通信を行なう。ここでは、±1、±4、±169、±64、および±256ビットのシフト、および0ビットシフトを加えて合計11種類のデータ通信を行なう配線が準備される。2ビット単位で、データ通信が行なわれるため、これらの配線領域91−95に、XレジスタおよびXHレジスタを用いてデータを転送する配線が各エントリに対応して配置される。
図17は、図16に示す配線領域91および92の配線の配置の一例を示す図である。この図17においては、一例として、エントリが1024個設けられ、ALU処理エレメント0−1023が設けられる場合の配線の配置を一例として示す。
図17において、±1ビットシフト配線領域91は、+1ビットシフト配線領域91aと、−1ビットシフト配線領域91bを含む。+1ビットシフト配線領域91aにおいては、1つ番号の大きいエントリへ単方向にデータ転送を行なう配線100aと、最大番号のエントリ(ALU1023)に対する1ビットシフトを実現する配線100bを含む。この配線100aは、隣接エントリ(ALU処理エレメント)間でのシフトを行なうため、配線100aが、整列して配置される。
−1ビットシフト配線領域91bにおいては、同様、隣接エントリ間を接続する配線101aと、最小番号のエントリ(ALU処理エレメント0)から最大番号のエントリ(ALU1023)へのデータ転送を行なう配線101bを含む。この場合においても、配線101aは、整列して配置される。
したがって、これらの配線領域91aおよび91bにおいては、2列の配線が転送データ1ビット当たり配置される。したがって、2ビットデータ転送用の配線時において、この配線100a,100b、101aおよび101bが、各々、2ビットデータ転送を並列に行なうように配置される。
±4ビットシフト配線領域92は、+4ビットシフト配線領域92aと、−4ビットシフト配線領域92bを含む。図17においては、この+4ビットシフト配線領域92aの配線の配置を示し、−4ビットシフト配線領域92bは、破線ブロックで示す。
この+4ビットシフト配線領域92aは、それぞれ1エントリずつ位置がずれて配線される配線102aを含む。これらの配線102aは、4列に配列され、それぞれ4ビット離れたエントリへのデータ転送を行なう。この場合においても、番号の大きなエントリに対する+4ビットシフトを行なうために、配線102bが設けられる。この図17において、配線102aおよび102bにおける番号は、エントリ番号を示す。この場合、+4ビットシフト配線102aが4列に配置され、また最大番号から最小番号方向への、シフトを実現する配線102bが4列に配置される。したがって、この配線領域92aにおいては、転送データ1ビット当たり8列の配線が配置される。
この図17に示すように、配線を、いわゆる菱形状の四辺形形状に配置することにより、配線の錯綜を回避して、効率的にシフト用配線を配置することができ、配線レイアウト面積を低減することができる。
この場合、エントリ戻り用配線100b,101bおよび102bを、シフト用配線100a,101a,102aと、それぞれ重なり合うように、配置することにより、配線レイアウト面積をより低減することができる(多層配線構造を利用する)。
図18は、この図16に示す±16ビットシフト配線領域93の配線の配置の一例を概略的に示す図である。ここで、±16ビットシフト配線領域93においては、+16ビットシフト配線領域93aaおよび93abと、−16ビットシフト配線領域93baおよび93bbを含む。+16ビットシフト配線領域93aaにおいては、配線103aにより、16ビット離れたエントリと接続される。エントリ間でサイクリックにシフト動作を行なうために、エントリ戻り配線103bが設けられる。ここで、−16ビットシフト配線領域93baにおいて配線104aが設けられ、16ビット離れたエントリ間が接続される。配線104bが、エントリ戻り配線であり、同様、サイクリックに16ビット離れたエントリを接続する。
この±16ビットシフト配線領域93においても、2ビットデータを転送する配線を、1エントリずつシフトさせて配置することにより、エントリ方向(垂直方向)において、配線103aおよび104aを、並列して配置することができ、配線レイアウト面積を低減することができる。この場合、配線領域93aa、93ab、93ba、93bbにおいては、各々、16列に、配線が配置される。
図19は、図16に示す±64ビットシフト配線領域94および±256ビットシフト配線領域95の配線のレイアウトを概略的に示す図である。この図19において、±64ビットシフト配線領域が+64ビットシフト用配線領域94aaおよび94abと、−64ビットシフト用配線領域94baおよび94bbを含む。これらの領域94aa、94ab、94baおよび94bbには、各々、64列に配線が配置される(転送データ1ビットあたり)。この場合、シフト配線において、64ビット離れたエントリ間をそれぞれ+方向および−方向において接続する。
±256ビットシフト配線領域95も、同様、配線領域95aa、95ab,95baおよび95bbに接続される。この場合には、各領域において、配線が、転送データ1ビットあたり256列配置され、256ビット離れたエントリが接続される。
これらのシフト配線を用いて、各エントリに対して、±4ビット、±16ビット、±64ビットおよび±256ビットのシフト動作を行なう配線を設けることにより、各エントリ単位で、データ移動時のデータ移動量(エントリ間距離および移動方向)を設定することができる。以下の説明においては、「データ移動量」は移動距離および移動方向を含むものとする。
図20は、図4に示すALU間通信回路(RECM)71の構成を概略的に示す図である。図20においては、ALU処理エレメント34に含まれるXレジスタ52およびXHレジスタ57を代表的に示す。これらのXレジスタ52およびXHレジスタ57は、図10に示すように、MIMD型演算時およびMIMD型データ転送時、それぞれ内部データ線65aおよび66aに接続される。
ALU間通信回路71は、このXレジスタ52およびXHレジスタ57の格納値を受ける送信バッファ120と、移動データレジスタの格納ビットE0−E3に従って、送信バッファ120からのデータビットの転送経路を設定するマルチプレクサ122と、このALU処理エレメントに対する配線群115を共通に結合される信号線116を介して送信データを受けて転送後のデータを生成する受信バッファ124を含む。
マルチプレクサ122は、このエントリに対応して設けられる信号線110au−110edの1つを選択的に駆動する。信号線110au−110edは、各々2ビット信号線であり、図17から図19に示す±1ビットシフト配線から±256ビット配線を示す。この図20に示されるように、エントリ毎にシフト配線が設けられ、それぞれ一意的にこれらのシフト配線110au−110edの接続先が設定される。例えば、+1ビットシフト配線110auは、番号が1大きいエントリの隣接ALU処理エレメントの受信バッファに結合され、−1ビットシフト配線110adは、番号が1小さい隣接エントリの受信バッファに結合される。
受信バッファ124に対しては、対応の信号線群(±1ビットシフト線から±256ビット信号線)を共通に受ける。これらの信号線群115の信号線は、ワイヤードOR接続される。
図21は、この受信バッファに対する信号線116の接続を概略的に示す図である。この信号線群115は、先の図17から図19に示すように、エントリ間で、データ転送方向を含めて、1対1対応で接続される。すなわち、信号線群115は、±1ビットシフト信号線、±4ビット信号線、±16ビットシフト信号線、±64ビットシフト信号線および±256ビットシフト信号線を含む。これらが、信号線116に共通にワイヤードOR接続される。
データ転送時、このALU間通信回路71においては、マルチプレクサ122が、この移動データレジスタの格納値E0−E3に従ってデータ転送信号線(ビットシフト線)を選択し、該選択シフト信号線を送信バッファ120に結合する。したがって、1つのALU処理エレメントについては、1つのシフト信号線が選択される。このシフト信号線は一方方向の信号線であり、転送先のエントリ(ALU処理エレメント34)において、受信バッファ124に結合される信号線116において、信号線群115の1つが駆動される。したがって、これらのシフト信号線群をワイヤードOR接続しても、確実に、データ転送を行なって転送先のエントリにおいて受信して転送データを生成することができる。
この場合、信号線116に対する負荷が大きく、送信バッファ120を介して高速でデータ転送を行なうことができない可能性のある場合には、受信バッファに対しても、マルチプレクサ122と同様、受信用のマルチプレクサを設ける。この場合、受信用のマルチプレクサは、データ転送時の情報に基づいて、データ転送ソースを選択する。データ転送ソースの移動データE0−E3と同じデータをデータ転送デスティネーションにおいて受信バッファ選択制御データとして設定することにより、受信バッファ124において転送データが伝達されるシフト信号線を選択することができる。
図22は、このエントリ間データ移動の命令の記述の一例を示す図である。図22においては、2ビット単位でデータの移動を行なうプログラマブルジグザグコピー(2ビットモード)を示す。この2ビットモードコピーコードは、“mx2_cp_zp”で表わされる。この2ビットモードコピーのプロトタイプは、“void mx2_cp_zp(intap,intbp,intcp,intn)”で表わされる。ここで、引数apは、ディスティネーションアドレスであり、引数bpがソースアドレスである。引数cpが、エントリ間移動距離格納アドレスであり、引数nは転送データ格納領域のビット長である。
この2ビットコピーコードにおいては、ポインタcpが指すアドレスのエントリ移動距離データを、RECMレジスタ(移動データレジスタ)に2ビット単位でコピーする。ポインタbpの指す初期アドレスbsからnビットの内容を、2ビット単位でRECMレジスタのデータが指定するエントリへ転送する。転送先のエントリにおいては、ポインタapが示す初期アドレスasから始まる領域に転送データを2ビット単位でコピーする。
図23は、1ビット単位で、データ移動を行なうプログラマブルジグザグコピー(1ビットモード)の命令の記述を示す図である。この1ビットモードコピーコードは、“mx_cp_zp”で表わされる。この1ビットモードコピーコードのプロットタイプは、“void mx_cp_zp(intap,intbp,intcp,intn)”である。1ビットモードコピーコードの引数ap,bpおよびcpは、2ビットモードコピーコードの引数の定義と同じである。1ビットモードコピーコード命令の実行時には、1ビット単位でコピー動作が実行される点を除いて、2ビットモードジグザグコピー命令実行時と同様の動作が行われる。
図24は、図22および図23に示すプログラマブルジグザグコピー命令実行時のデータ移動を模式的に示す図である。この図24においては、データエントリDERYaから、データエントリDERYbへデータ転送を行なう場合の動作を一例として示す。図24に示すように、ジグザグコピーモード時、データエントリDERYaにおいてポインタcpが指定する先頭アドレスcsから4ビット幅の領域RGcの領域に格納される移動量データE0−E3に従って、転送先のデータエントリDERYbが設定される(図20のマルチプレクサ122の接続態様が設定される)。
次いで、ポインタbpが指定するスタートアドレスbsから始まるnビット幅の領域RGbのデータが、データエントリDERYbのポインタapが指定するスタートアドレスasから始まるnビット幅の領域RGaへ、1ビット単位(1ビットモードプログラマブルジグザグコピー命令実行時)または2ビット単位(2ビットモードプログラマブルジグザグコピー命令実行時)で転送される。データ転送経路は、それぞれ、エントリ間で1対1対応で設けられており、データの衝突を伴うことなく、各エントリ個々に、データ転送先を指定して、データ転送を行なうことができる。
なお、データ送信がXレジスタまたはXレジスタおよびXHレジスタを用いて行なわれ、データ受信が受信バッファを介して行われる。この場合、受信データを一旦X/XHレジスタに格納した後に、ストア命令に従ってアドレスポインタapが指定するビット位置に転送データが格納されても良い。また、これに代えて、ジグザグコピー動作時には、受信バッファから内部信号線を介して直接アドレスポインタapが指定するビット位置にデータが書き込まれても良い。
送信動作と受信動作とは、同時には行われない。例えば、1マシンサイクルの前半で送信が行なわれ、後半で受信が行われても良い。また、これに代えて、異なるマシンサイクルで送信および受信が行われても良い。したがって、1つのエントリにおいて、送信および受信を行なうことができる。
送信および受信の選択的活性化は、例えば、マスクビットVにより設定することができる。送信時にロード命令実行を、受信時にストア命令実行をマスクビットVによりマスクをかけることにより、送信および受信を選択的に実行することができる。これに代えて、受信バッファにより対応のデータエントリのビット線対を駆動することにより、全エントリにおいて並行して受信データの書込を実行することができる(書込時のアドレスポインタは、ワード線が全エントリに共通のため、全エントリに対して同一となる)。
図25は、図10に示す移動データレジスタ(RECMレジスタ)70に格納される移動量データE0−E3と、通信距離および通信方向を一覧にして示す図である。4ビット移動データE0−E3により、通信方向をアップ(+)方向(エントリ番号の増大する方向)およびダウン方向(エントリ番号の低下する方向)に設定することができ、また、データ通信距離を、1、4、16、64および256のいずれかに設定することができる。通信距離0を含めて、合計11種類のエントリ間データ通信を実現することができる。
図26は、このエントリ間データ移動の一例を示す図である。図26においては、エントリERY0−ERY8を代表的に示す。ALU間相互接続スイッチ回路44において、移動量データE0−E3に従って、データ転送経路が設定される。エントリERY0、ERY2、およびERY3およびERY7が、それぞれ、+1ビットシフト動作が指定される。エントリERY1に対しては、+4ビットシフト動作が指定される。エントリERY4に対しては、−4ビットシフト動作が指定され、エントリERY6については、−4ビットシフト動作が指定される。また、エントリERY8において、−1ビットシフト動作が指定される。
なお、図26に示すデータ移動を示す矢印において、黒丸印で示す矢の根元が、マルチプレクサを介して送信バッファに結合され、矢印の先において転送先の受信バッファに結合される。
ALU間相互接続スイッチ回路44に対して配置されるエントリ間の接続用配線は、一方方向の配線であり、エントリERY0−ERY8において、これらのデータ移動を、データの衝突を伴うことなく、並行に実行することができる。
次に、図22および図23に示すプログラマブルジグザグコピー命令実行時の動作について説明する。
ステップ1:
ジグザグコピーを行なって、エントリ個々にデータ移動を行なう場合、まず、予めデータエントリのポインタcpが指定する領域に、対応のエントリのデータ移動量を示すデータを設定する。このとき、また、マスクビットVが別の領域に設定される。
ステップ2:
コントローラ(21)が、ジグザグコピー命令を実行し、このコントローラの制御の下に、データエントリのポインタcpが指定する領域に格納されるエントリ移動量データE0−E3を、移動データレジスタ(RECMレジスタ)に格納する。この操作は、したがって全エントリ共通に行われる。
ステップ3:
このデータ移動レジスタ(RECMレジスタ)に格納された移動データE0−E3に従って、マルチプレクサ(図20の要素122)の接続経路を設定する。
ステップ4:
演算対象のデータ(移動対象のデータ)と、1ビットモードコピーまたは2ビットモードコピーに応じて、ALU処理エレメント内のレジスタ(XレジスタおよびXHレジスタ、またはXレジスタ)に送信データを設定する。このとき、データエントリのポインタbpの指定するnビット幅の領域のデータが、対応のALU処理エレメント内のレジスタに格納される。この操作もコントローラ(21)の制御の下に、全エントリに対して共通に実行される。
ステップ5:
転送用のレジスタ(XおよびXHレジスタまたはXレジスタ)に設定されたデータが、図20に示すマルチプレクサ122を介して移動先のエントリへ転送される。移動先のエントリにおいては、受信バッファを介して転送されたデータを、対応のデータエントリのポインタapが指定する領域に1ビット単位または2ビット単位で格納する(この操作もコントローラ21により全エントリ共通にポインタが生成されて実行される)。
ステップ6:
このステップ3からステップ5の動作が、移動対象のデータビットがすべて転送されるまで繰返し実行される。
このデータ転送時、マスクレジスタ(Vレジスタ)に、ビット“0”を設定することにより、エントリのデータエントリから対応のデータレジスタ(X、XHおよび移動データレジスタ)へのデータ設定および送信は行なわれない。
次に、MIMD演算動作について説明する。
ステップ1:
まず、事前に、データエントリのポインタcpが指定するnビット幅の領域に、MIMD演算を行なう命令(M0、M1)を設定する。
ステップ2:
このデータエントリに設定されたMIMD演算命令のうちの該当するMIMD用命令を、コントローラ(21)の制御の下にロード命令を実行して、MIMD命令レジスタに格納する。
ステップ3:
演算対象となるデータを、コントローラ(21)の制御の下にレジスタロード命令を実行して、データエントリの領域(RGaおよびRGb)のポインタapおよびbpが指定するビット位置のデータビットを、対応のALU処理エレメントへ転送して、一方の(先に転送された)データビットをXレジスタに設定する。ALU処理エレメントにおいては、MIMD命令レジスタに設定された命令を実行するように、MIMD用命令デコーダにより演算内容が設定される。データエントリのポインタapおよびbpが指定するアドレス位置からロードされたデータに対し、設定された演算を実行する。その演算結果を、コントローラ(21)においてストア命令を実行して、ポインタapが指定するデータエントリのビット位置に格納する。
ステップ4:
演算回数が、指定された回数に到達するまで、すなわち、演算対象のデータビットの全ての演算処理が終了するまで、ステップ3の動作を繰返し実行する。演算回数の指定回数に到達したかは、ポインタapまたはbpが、設定された最大値に到達したかを見ることにより識別される。
また、SIMD演算を実行する場合には、図2に示すコントローラ21の制御の下に、ALU間相互接続用スイッチ回路44の接続経路が全エントリに対して共通に設定され、また、ALU処理エレメント34の演算内容も全エントリに対して共通に設定される。この場合、コントローラ21によりデータエントリDERYのポインタ制御が並列に実行され、各エントリにおいて並列に同一命令が実行される。今、具体的に4ビット加算を行なう操作について考える。
[組合わせ回路の適用例]
図27は、通常の4ビット加算器の構成の一例を示す図である。この図27に示すように、4ビットデータA0−A3およびB0−B3を加算する4ビット加算器は、7個の半加算器(HA)130a−130gと、3つのORゲート132a−132cで実現される。半加算器の内部構成は、XORゲートおよびANDゲートを用いる構成、ANDゲート、ORゲートおよびNOTゲートを用いる構成などの種々の構成を利用することができる。半加算器130a−130dは、それぞれ対応の位置の2ビットを受ける。半加算器(HA)130a−130gは、出力S3−S1を生成するために設けられ、ORゲート132a−132cは、キャリーc3−c1を生成するために用いられる。半加算器130a−130gにおいて、前段の半加算器(1ビット下の半加算器)のキャリー出力と、対応のビット位置の半加算器のサム出力とを受ける。ORゲート132a−132cは、対応のビット位置の半加算器のキャリー出力を受ける。
この図27に示す4ビット加算器を、1入力1出力のNOTゲート、2入力1出力のANDゲート、2入力1出力のORゲート、および2入力1出力のXORゲートの組合せ回路で実現すると、図28に示す4ビット加算器の論理回路が求められる。
この図28に示すように、8段のステージSTGに分割して、4ビット加算が実行される。並列に行なうことのできる半加算演算は、並列に実行し、キャリーの伝搬を受ける部分の演算を、後で演算する構成である。この図28に示す論理ゲートによる組合わせ回路で実現される4ビット加算器の構成は、図27に示す4ビット加算器をキャリー伝播を考慮して、論理ゲートで展開することにより求めることができる。
この図28に示す4ビット加算器においては、4ビット入力AIN[3:0]およびBIN[3:0]から、4ビット出力DOUT[3:0]およびキャリー出力C_OUTを生成する。
この図28に示す論理回路の論理演算を、これまでに説明した並列演算装置で、MIMD命令に従って各ステージを順次実行する。図28において、このMIMD演算時において、各ステージSTGにおいて、1つのセル(論理ゲート)が、1つのエントリに割当てられる。演算ステージSTGが変化する毎に、論理ゲートの出力信号が異なるエントリに伝搬され、また、論理ゲートの出力の移動量は、各セルごとに異なる。また、各ステージにおいてエントリ(セル)において実行される演算は異なる。したがって、各エントリごとに、移動量および命令を設定して、それぞれ異なるMIMD演算命令を実行する。
図29は、この図28に示す論理回路のステージSTG4の演算時の、ステージ開始時のデータエントリの格納データの状態を示す図である。データエントリとして、データエントリDERY0−DERY7が用いられる。4つのデータエントリDERY0−DERY3に、4ビットデータAの各ビットがアドレスポインタapの指定する位置に格納され、データエントリDERY4−DERY7に、4ビットデータBの各ビットが、同様、アドレスポインタapの指定する位置に格納される。したがって、このMIMD命令実行時においては、SIMD型演算実行時と異なり、演算対象のデータが複数のエントリにわたって分散して格納され、演算結果が、それぞれ論理ゲートの伝播先のエントリに伝達されてテンポラリ領域に格納される。
テンポラリ領域t1−tmpは、加工データを格納する領域であり、テンポラリポインタt1、t2、t3が指定するアドレスには、各ステージの論理ゲートの出力値が格納される。テンポラリポインタtmpの指定する領域には、各エントリにおける他方演算データが格納される。すなわち、各エントリにおいて、テンポラリポインタti(iは、mp以外)が示すビット位置に格納されるデータビットとテンポラリポインタtmpが示すビット位置に格納されるデータビットについて2項論理演算が実行される。反転操作を行なう否定演算実行時には、テンポラリポインタtiが示すビット位置(以下、適宜、テンポラリアドレスtiと称す)に格納されるデータビットについて反転操作が行われる。
図29においては、A+B=(0011)+(1101)の演算実行時のデータの流れを示す。
MIMD命令用ビットは、データエントリDERY0−DERY7において、2ビットモードで対応のALU処理ユニットのMIMD命令レジスタに格納される。
この演算ステージSTG4の開始前(ステージSTG3終了時)において、4つのデータエントリDERY0、DERY2、DERY5およびDERY7において演算が行なわれている(マスクビットV(Vレジスタ内容)がそれぞれ“1”に設定されている)。この場合、データエントリDERY0およびDERY2に対しては、演算命令ビットM0およびM1が、AND演算を示し、データエントリDERY5に対しては、MIMD演算命令(ビットM0、M1)が、NOT演算を指定する。データDERY7については、MIMD命令ビットM0およびM1が、OR演算を指定する。データエントリDERY0およびDERY2は、ステージSTG4のORゲートG2前段のANDゲートの演算を実行し該演算結果をテンポラリアドレスt3に格納している。データエントリDERY5およびDERY7は、それぞれ、ゲートG1前段のインバータの出力およびゲートG3前段のORゲートの出力をテンポラリアドレスt3に格納している。
すなわち、図29において、ステージ4開始時(ステージSTG3完了時)においては、ステージ3の出力値が確定しており、データエントリDERY0およびDERY2の論理値が“1”であり、データエントリDERY5の否定結果は、“0”であり、データエントリDERY7におけるOR演算結果の“1”が格納される。演算時には、データエントリDERY0−DERY7において、マスクビット(Vレジスタ内容)に従って選択的に演算が実行されており、演算結果が、対応のデータエントリのテンポラリアドレスt3に格納される。したがって、データエントリDERY0およびDERY2において、テンポラリアドレスt3およびtmpのビットのAND演算が行なわれ、ビット“1”がテンポラリアドレスt3に格納される。
データエントリDERY5においては、NOT演算が実行され、先に格納されていたビット値“1”が反転され、ビット“0”がテンポラリアドレスt3に格納される。データエントリDERY7においては、テンポラリポインタt3およびtmpに格納されたビット値のOR演算が行なわれ、その演算結果が、再び、テンポラリアドレスt3に格納される。従って、データエントリDERY7のテンポラリアドレスt3には、“1”が格納される。
次いで、図28に示すステージSTG4における演算実行を行なうために、データの並び替えが行なわれる。
ここで、データエントリDERY1が、ORゲートG2の演算領域に割当てられ、データエントリDERY4が、ANDゲートG1の領域に割当てられ、データエントリDERY5が、ORゲートG5の領域に割当てられる。データエントリDERY6の領域が、NOT演算を行なうインバータG3に割当てられる。データエントリDERY7においては、このAND演算を行なうANDゲートG4に割当てられる。
図30は、ステージSTG4の演算実行時のデータの移動を模式的に示す図である。ORゲートG2は、前段のANDゲートの出力ビットを受ける必要がある。したがって、この場合、ORゲートG2の前段のANDゲートの出力値は、データエントリDERY0およびDER2のテンポラリポインタt3が指定するビット位置に格納されており、これらビットを、データエントリDERY1のテンポラリアドレスt4に転送する。この場合、データエントリDERY0のテンポラリアドレスt3のビットが、データエントリDERY1のテンポラリアドレスtmpに格納され、データエントリDERY2のテンポラリアドレスt3のビットが、データエントリDERY1のテンポラリアドレスt4に格納される。
データエントリDERY4に対しては、ANDゲートG1が割当てられる。この場合、前段のインバータおよびORゲートの出力が、データエントリDERY4に移動される。すなわち、データエントリDERY2のテンポラリアドレスt1のビットが、データエントリDERY4のテンポラリアドレスtmpに移動され、第3ステージSTG3において確定されたデータエントリDERY5のテンポラリアドレスt3のインバータの出力が、データエントリDERY4のテンポラリアドレスt4に移動される。
データエントリDERY5が、ORゲートG5に割当てられる。この場合、ORゲートG5の前段のANDゲートおよびORゲートの出力も移動させる必要があり、データエントリDERY2のテンポラリポインタt1の示すビット位置のデータおよびテンポラリポインタt2の示すデータエントリDERY1のデータビットが、それぞれテンポラリポインタtmpおよびt4の示す位置に移動される。
データエントリDERY6が、インバータG3に割当てられる。この場合、前段のORゲートの出力ビットをデータエントリDERY6のテンポラリアドレスt4に移動させる必要があり、先のステージSTG3において演算されたデータエントリDERY7のテンポラリアドレスt3の演算結果が、データエントリDERY6のテンポラリアドレスt4の位置に転送される。
データエントリDERY7は、ANDゲートG4に割当てられる。このANDゲートG4は、最上位ビットBIN[3]およびAIN[3]を受ける。したがって、データエントリDERY7のアドレスポインタapの示すビット位置のデータが、テンポラリポインタtmpの示す位置に移動され、データエントリDERY3に格納されるアドレスポインタapの示すビット位置のデータビットは、データエントリDERY7のテンポラリアドレスt4の位置に移動される。これにより、ステージSTG4における各ゲートG1−G5の入力が、各データエントリのテンポラリポインタt4およびtmpの示すビット位置に格納される。
このデータ移動操作においては、基本データ移動量が、±1、±4、±16、±64および±256であり、したがって、できるだけ、基本データ移動量が示す領域にデータが転送される。このデータ転送時に、先に示したジグザグコピー命令が用いられる。例えば、テンポラリポインタt4に示す領域へのデータ転送が先ず行なわれ、次いで、同様、ジグザグコピー命令を実行して、テンポラリアドレスtmpへのデータの移動が行なわれる。このデータ移動は、逆の順序で行なわれてもよい。すなわち、テンポラリアドレスt4およびtmpそれぞれに対するデータ移動時において、先に、テンポラリアドレスtmpへのデータ移動が行なわれる。
データ移動時において、データエントリDERY2およびDERY3のデータ移動量は、+2である。従って、この2エントリ間のデータ移動時には、+1ビットシフト動作が2回実行される。
また、このデータ移動操作時、各データエントリにおいては、図示しないロウデコーダにより、同一ビット位置のデータビットの読出(ロード)を行なって、データの転送およびストアが行なわれる。したがって、テンポラリアドレスt4およびtmpへのデータ転送時、それぞれ、ポインタをap、およびt1からt4まで更新して、データの移動が行なわれる。この場合、移動の実行/非実行は、マスクレジスタ(Vレジスタ)のマスクビットVにより設定される。
このデータ転送時、先ず、ソースアドレスを順次変更してロード命令を実行して各エントリにおいて対応のXレジスタに転送データビットを格納した後に、テンポラリアドレスt4およびtmpを行先として、順次、行先アドレスを変更して、データの転送(1ビットモードジグザグコピー命令)が実行されてもよい。例えば、図23に示すコピー命令mx_cp_zp実行時において、ポインタbpを順次更新して対応のXレジスタに転送データビットを格納した後、転送命令を実行して送信バッファを活性化して、Xレジスタから行先エントリへのデータ転送を実行する。行先アドレスがt4およびtmpと順次更新されるため、行先アドレスに応じてマスクビットVをセット/クリアして、各エントリから正確にテンポラリアドレスt4およびtmpへのデータ移動を行なう。
図31は、MIMD命令用ビット格納時のエントリ内での操作を示す図である。このMIMD命令を各エントリ毎に設定する場合、図31に示すように、図14に示すMIMD演算命令mx_mimdを実行し、MIMD命令用ビットとして、ポインタcpの指定するステージSTG4用の命令用ビットM0およびM1を、MIMD用レジスタにコピーする。このとき、また演算を行なうデータエントリDERY1、およびDERY4ないしDERY7に対して、マスクレジスタ(Vレジスタ)のビット値を、“1”に設定し、残りのエントリについては、マスクビットを“0”にセットする。これにより、図31に示すように、データエントリDERY1、およびDERY4ないしDERY7に格納されるMIMD命令用ビットがMIMD命令レジスタに格納され、実行すべき演算が指定される。
次いで、図32に示すように、MIMD命令レジスタに設定されたビット値M0およびM1に従って、アドレスt4およびtmpのビットに対してMIMD演算命令alu.op.mimdを実行する。図32においては、データエントリDERY1においては、OR演算が行なわれ、データエントリDERY4においては、AND演算が行なわれ、データエントリDERY5においては、OR演算が行なわれ、データエントリDERY6においてはNOT演算が行なわれ、データエントリDERY7においては、AND演算が行なわれる。
この演算時においては、テンポラリアドレスt4およびtmpに格納されたビット値についての演算が実行され、その演算結果が、テンポラリアドレスt4のビット位置に格納される。演算が行なわれないデータエントリに対しては、対応のマスクビットVが、“0”である。このステージSTG4の演算実行後、図32に示すように、データエントリDERY1、およびDERY4−DERY7のテンポラリアドレスt4のビット位置に、演算結果が格納される。
以降、同様の操作を行なって、ステージSTG5からSTG8の演算を実行する。
MIMD命令用制御ビットとして、各ステージに必要なMIMD命令制御ビットが格納され、したがって、MIMD演算命令制御ビットを格納する領域のビット幅も、演算ステージの段数に応じて設定され、また、テンポラリポインタが指定する領域も、演算ステージの段数に応じて、そのビット幅が設定される。
[順序回路の適用例]
図33は、順序回路の一例として、2ビットカウンタの一般的構成を示す図である。この図33に示す2ビットカウンタ33は、2段の縦続接続されるDフリップフロップDFF0およびDFF1を含む。初段のDフリップフロップDFF0は、クロック入力に、クロック信号CLKを受け、次段のDフリップフロップDFF1は、クロック入力に、初段DフリップフロップDFF0の出力/Qからの信号を受ける。このDフリップフロップDFF0およびDFF1は、それぞれ、補の出力/Qが入力Dに結合される。DフリップフロップDFF0およびDFF1の出力Qから、それぞれ、カウントビットQ0およびQ1が出力される。
この図33に示す2ビットカウンタにおいて、DフリップフロップDFF0およびDFF1は、そのクロック入力に与えられる信号の立上がり時に、その直前のD入力の信号の状態をQから出力する。したがって、DフリップフロップDFF0およびDFF1は、クロック入力に与えられる信号の立上がりに同期して、その出力Qからの信号の状態を変更する。この図33に示す2ビットカウンタの構成は、クロック信号CLKを分周する分周回路としても用いられる。
図34は、図33に示す2ビットカウンタを、XORゲートおよびANDゲートで表現した構成を示す図である。この図34において、2ビットカウンタは、フリップフロップFF0およびFF1と、フリップフロップFF0の出力Qの信号と入力信号INとを受けるXORゲートG10と、入力信号INとフリップフロップFF0の出力Qからの信号を受けるANDゲートG11と、ANDゲートG11の出力信号とフリップフロップFF1の出力Qからの信号とを受けるXORゲートG12を含む。XORゲートG10の出力信号は、フリップフロップFF0の入力Dに与えられ、XORゲートG12の出力信号は、フリップフロップFF1の入力Dに与えられる。
なお、フリップフロップFF0およびFF1のクロック入力には、共通に、クロック信号CLKが与えられる。
この図34に示す2ビットカウンタにおいて、フリップフロップFF0およびFF1は、データエントリ内に確保するメモリセル領域で実現する。この図34に示す2ビットカウンタの場合、論理演算段数として、3段のステージSTGが利用される。フリップフロップFF0、FF1への信号の取込および保持は、XORゲートG10およびG12の出力値を、対応のデータエントリ内の対応のビット位置に格納することにより実現される。
図35は、この図34に示す2ビットカウンタの動作をエミュレートする際のビット配置の一例を示す図である。データエントリDERY0−DERY7において、アドレスポインタapが指定するビット位置に、入力信号INが格納される。この入力信号INは、ビット値“1”である。テンポラリアドレスt1−t3のビット値は、それぞれ、ステージSTG1−STG3の出力ビットに対応する。テンポラリアドレスtmpは、この2ビットカウンタ動作時においては利用されない。
フリップフロップFF0−FF1の格納値を記憶するために、データエントリにおいて、ポインタアドレスFF0およびFF1(フリップフロップおよびビット位置を示すポインタアドレスを、同じ符号で示す)が準備される。
この図35において、データエントリDERY0−DERY7が8つ設けられるのは、以下の理由による。フリップフロップFF0およびFF1の初期状態として、4通り存在し、4つの初期状態に対して1組の4つのデータエントリを用いる。1組のデータエントリにおいて、1つのステージの動作を示すためである。図35においては、ステージSTG2およびSTG3の状態を、データエントリDERY4−DERY7の組およびデータエントリDERY0−DERY3の組でそれぞれ示す。この図34に示す2ビットカウンタの場合、4つのデータエントリを用いてカウント動作をエミュレートすることができる。
MIMD命令用ビットとしては、ステージSTG1−STG3それぞれに対応して、XOR演算、AND演算およびXOR演算を順次実行するために、6ビットの領域が格納される(マスクビットの格納領域等は示していない)。
データエントリDERY0−DERY3において、演算命令(制御)ビットM0およびM1が、“1,0”に設定され、XOR演算が指定される。一方、データエントリDERY4−DERY7の格納データに対しては、演算命令(制御)ビットM0およびM1が、ともに“1”に設定され、AND演算が指定される。
先ず、データエントリDERY0−DERY3の演算操作について説明する。テンポラリアドレスt3が示す領域には、フリップフロップFF1の初期値が格納される。フリップフロップFF0については、その初期値に応じてステージSTG1の演算結果が異なり、その演算結果がアドレスポインタFF0に格納される。図35において、ステージSTG1における演算結果を示すテンポラリアドレスt1のビット値が格納される。
テンポラリアドレスt2のビット値は、クロック信号CLKの立上り前の状態に対応し、フリップフロップFF0へのデータ格納前の論理値である。従って、テンポラリアドレスt2の位置のビット値とフリップフロップFF0の格納値とは論理値が逆である。
ステージSTG3においては、このテンポラリアドレスt2のビット値とフリップフロップFF1に格納されるビット値とのXOR演算が行なわれて、その演算結果が、再度、フリップフロップFF1のビット位置に格納される。
すなわち、データエントリDERY0−DERY3には、それぞれ、フリップフロップFF1およびFF0の初期値として、(0,0)、(0,1)、(1,0)および(1,1)が、ポインタアドレスFF1およびFF0に格納される。クロック信号CLKの立上がり前において、このフリップフロップFF0の格納値に従って、XORゲートG10の出力値が決定され、テンポラリアドレスt1のビット値が決定され、クロック信号CLKの立上がりに従って、フリップフロップFF0の格納値が、XORゲートG10の出力ビット値により決定される。
ステージSTG2において、クロック信号CLKの立上り前のフリップフロップFF0の格納値に従って、ANDゲートG11の出力ビット値が決定され、このビット値がテンポラリアドレスt2に格納される。従って、テンポラリアドレスt2およびt1のビット値の倫理値は反転している。
ステージSTG3においては、このANDゲートG11の出力値とフリップフロップFF1の格納値とに従ってXORゲートG12の出力値が決定される。XORゲートG12の出力値がクロック信号CLKの立上りに同期してフリップフロップFF1に格納される。図35においては、このステージSTG3において、クロック信号CLKが立ち上がる前のXOR演算が行われた状態が示される。すなわち、テンポラリアドレスt3にフリップフロップFF1の格納値が入力ビット値として設定され、このテンポラリアドレスt2およびt3のビット値のXOR演算を行ない、その演算結果をステージSTG3の演算完了時に、フリップフロップFF1の格納値として、ポインタアドレスFF1に格納する。この演算時において、テンポラリアドレスt3にXOR演算結果を書込み(ストアし)、次いで、ポインタアドレスFF1の位置にテンポラリアドレスt3に書き込む。これにより、以降の操作において、テンポラリアドレスt3には、常に、ステージSTG3の実行開始時に、フリップフロップFF1の格納値をXORゲートG12への入力ビットとして設定することができる。
データエントリDERY4−DERY7のビット配置においては、ステージSTG2の演算がこれから実行される。このステージSTG2においては、MIMD命令ビット(制御ビット)M0およびM1はともに“1”に設定され、AND演算が行なわれる。
この場合、ステージSTG1においては、フリップフロップFF0の格納値に従って、その出力ビット(XORゲートの出力ビット)の論理値が決定される。XORゲートG10は、インバータとして動作しており、テンポラリアドレスt1には、フリップフロップFF0の格納値の反転値が格納される。
このステージSTG2の演算実行時において、まだ、フリップフロップFF0へのデータの書込は行なわれておらず、これらのデータエントリDERY4−DERY7のポインタアドレスFF0およびFF1には、2ビットカウンタの初期値が維持される状態を示す。従って、ステージSTG2のテンポラリアドレスt2のビット値は、フリップフロップFF0の格納ビットの論理値に等しい(入力信号INは論理値“1”)。
ステージSTG2において、このフリップフロップFF0の格納値とアドレスポインタapのビット位置のビットとの論理積演算(AND演算)が、各エントリにおいて実行される。
図35に示すように、MIMD型演算命令として論理演算を準備することにより、各エントリごとに個々に演算を行なって、順序回路のエミュレーションを行なうことができる。
また、この演算を繰返し実行することにより、データエントリDERY0−DERY7において、ポインタアドレスFF0およびFF1に、フリップフロップFF0およびFF1の状態を格納することにより、フリップフロップの状態を表現することが可能となる。
以上のように、ALU処理エレメント内にMIMD用命令レジスタおよびデコーダを追加することにより、SIMD型アーキテクチャの並列演算装置を、MIMD型処理装置として動作させることが可能となる。これにより、一度に、エントリ単位で異なる命令を実行することが可能となり、処理時間を削減することができる。
また、MIMD用命令レジスタおよびデコーダにより、この並列演算装置上で、論理回路のエミュレーションを実現することができる。具体的には、NOT素子(1入力1出力)、AND素子(2入力1出力)、OR素子(2入力1出力)およびXOR素子(2入力・1出力)は、論理完全系を構成するため、あらゆる組合せ回路を表現することができる。また、データエントリ内にデータ保持用の領域を準備することにより、フリップフロップまたはラッチなどの順序回路も表現することができる。これにより、この発明に従う並列演算装置において、あらゆるハードウェア回路を実装することが可能となる。従って、この並列演算装置において、SIMD命令によるソフトウェア実行部と、論理回路によるハードウェア実行部とを共存させることが可能となり、汎用性の高い処理装置を実現することができる。
また、ハードウェア回路でこの図33または図34に示す2ビットカウンタを構成した場合、フリップフロップFF0においては、1段のゲート遅延であり、一方フリップフロップFF1については、2段のゲート遅延である。したがって、これらのクロック信号に同期して動作タイミングを合わせるために、この2段のゲートG11およびG12の遅延を見込んでタイミング設定を行なう必要があり、クロック信号CLKの動作マージンを大きくする必要があり、クロック信号を高速化するのが困難となる。しかしながら、この並列演算装置においては、各ステージごとに演算操作を行なっており、各ステージのサイクルは、クロック信号により規定される(並列演算装置のクロック信号)。各実行ステージの演算結果および入力は任意のタイミングでメモリセルから読出すことができる。したがって、2ビットカウンタの場合、初段フリップフロップのクリティカルパスは、1段のゲート遅延であり、次段のフリップフロップに対しては2段のゲート遅延である。各フリップフロップに対してクリティカルパスを変更することが可能となる。これにより、フリップフロップ間のタイミング調整を行なう必要がなくなり、正確に演算操作を行なうとともに、高速動作を実現することができる。
また、MIMD演算を実行可能とすることにより、処理の並列性への依存要因を減少させることができ、この並列演算装置(MTX)の適用範囲を広くすることができる。これにより、従来、ホストCPUに担当させていた演算処理も、この並列演算装置(MTX)内で閉じることができ、CPUと並列演算装置(MTX)間のデータ転送に要する時間を低減することができ、システム全体の処理能力を向上させることができる。
また、リコンフィギャラブルに、データの処理を、各エントリ単位で設定することができ、複雑なデータ転送(垂直移動:エントリ間でのデータ移動)をより柔軟に制御して、データ転送を高速化することができる。
図36は、従来の半導体並列演算装置(MTX)で用いられる垂直移動命令“vcopy”(move命令と同じ)と、この発明の実施の形態1に従うエントリ間通信回路(RECM:リコンフィギャラブルエントリコミュニケータ)を用いたデータ移動時に必要とされるサイクル数を一覧にして示す図である。この図36に示す表においては、並列演算装置(MTX)の方式シミュレータのバージョン0.03.01を使用し、2ビット単位での演算を行なう2ビットALUをモデルとしている。このRECMに対しては、方式シミュレータのバージョン0.03.01のサイクル数計算を利用し、ライブラリ化している。
図36においては、データ移動距離として、1ビット、2ビット、4ビット、8ビット、16ビット、32ビット、64ビット、128ビット、256ビット、512ビットおよび1024ビットの移動距離に要するサイクル数を示す。垂直移動命令“vcopy”(=move)を利用する場合、データの移動は、全データエントリに共通に同一方向に設定される。16ビットデータを、2ビット単位で移動する。データビットの転送には、8サイクルが必要とされ、また、転送データのロードおよびストアなどのデータ移動に要するサイクルが、方式シミュレータにより予め設定されている。
図36に示すように、RECMを用いてエントリ通信を行なう場合、通信制御用データレジスタ(RECMレジスタ)へ、通信制御データE0−E3を格納する必要があり、このサイクル数(図36では3サイクル)、移動サイクル数が長くなることが見られる。データ移動量が基本移動量の場合には、垂直移動命令実行時において26サイクルであり、同一距離の移動を繰返す場合8サイクル、データ通信に要するサイクル数が長くなる。
したがって、データ移動に、垂直コピー命令“vcopy”を用いた一斉移動のような、すべてのエントリが等距離離れたエントリと通信する場合においては、RECMを用いたエントリ個々にデータ移動を実行する場合には、動作が遅くなる。また、各エントリごとに、データ移動量を設定するための制御データをデータエントリに格納する必要があり、メモリマットにおいて、この通信制御用データ格納領域を確保する必要がある。
しかしながら、各エントリが、それぞれ異なる距離離れたエントリと通信する場合においては、各エントリ単位で、通信制御を実現することができ、より少ないサイクル数で処理を終了することができる。これは、エントリごとに通信距離(データ移動距離)が異なる場合、従来の方法では、垂直移動命令“vcopy”とマスクレジスタ(Vレジスタ)のマスクビットとを用いて選択的に移動を行なう必要があり、各データ移動量ごとにデータ移動を繰返し実行する必要があり、処理時間に長時間を要する。しかしながら、RECMレジスタを用いて通信制御を行なう場合、一度の通信でも、各エントリの通信距離を選択することができ、より少ない時間で、データ移動処理を終了することができる。したがって、たとえば図26に示すようなデータ移動を行なう場合、5種類のデータ移動量が存在する。従って、垂直移動命令vcopyまたは移動命令moveを利用する場合、5回データ転送命令を実行する必要がある。しかしながら、本実施の形態1に従えば、各エントリに対して移動量を設定することにより、一度のデータ通信でデータ移動を完了することができ、転送時間を低減することができる。
また、このデータ移動のための配線は、これまでに用いられてきている並列演算装置の移動命令vcopyまたはmoveを実行するために用いられる配線をそのまま援用することができる。従って、配線面積の増大を伴うことなく、データ移動に要するサイクル数を低減することができる。以下、具体的に、データ移動処理について説明する。
[ギャザ処理]
ギャザ処理は、8エントリ置きのデータを集め、エントリの最初から順に、集めたエントリデータを並べるデータ移動処理である。通常、画像処理において、境界領域にゆらぎのあるノイズ(アナログ的なノイズ)を導入して、境界領域の階調変化を滑らかにするために行われる。この場合の処理を、64エントリに対して実行する場合のデータ移動のフローを、図37に示す。
図37においては、メモリセルマットにおいて、エントリとして、2048エントリが準備される。エントリERY7、ERY15、ERY23、ERY31、ERY39、ERY47、ERY55およびERY63の内容A−Hを取り出して、エントリ0から順に並べる。この図37に示すギャザ処理において、以下の処理手順が実行される。
ステップ1:
先ず、データ移動制御用のデータ(E0−E3)を、データエントリの制御データ格納領域に格納する。ここで、各データエントリに共通にエントリ内のデータ格納領域が、ポインタに従って設定される。
ステップ2:
データエントリから、データ移動量に応じて、データ移動制御用データEを、対応のRECMレジスタ(移動データレジスタ)に格納する。図37に示すように、データ移動制御データEaが複数回連続して用いられる場合、通信データ移動時、最初に1回設定し、繰り返し、エントリ間データ移動を実行する。
ステップ3:
次いで、このRECMレジスタに格納された値E(E0−E3)に従って、各エントリごとに、移動距離および移動方向を設定して、データ移動を行なう。
図37において、まず移動制御データ群Eaに従って、エントリERY15のデータBが、エントリERY2047へ転送される。エントリERY7は、1ビット下方向にシフトされる。エントリERY23のデータCが、エントリERY7へ転送される(−16ビット移動)。残りの、エントリデータD−Hは、それぞれ−16ビット移動され、各データD−Hのエントリ位置が、16ビット小さい方向にシフトされる(ダウンシフト動作)。
次いで、各エントリにおいて、再び同じ移動命令を実行し、エントリERY15に格納されたデータは、エントリ2047に転送し、エントリERY7のデータは、1ビットダウン方向へシフトする。エントリERY23については、−16ビットシフトを行ない、また、残りのエントリERY23、ERY31、ERY39およびERY47についても同様のシフト動作を行なう。このとき、エントリERY2047のデータBが、エントリERY3に転送される(4ビットアップシフト)。
再び、次のサイクルにおいても制御データ群Eaに従ってデータ移動が行なわれ、エントリERY2からERY7に、データB、D、A、C、EおよびGが格納され、エントリERY15に、データHが格納される。
ステップ4:
次いで、ポインタを移動させて、次の移動制御データを対応のRECMレジスタに格納する。この移動制御データ群Ebに従って、データ移動を行なう。すなわち、エントリERY2047のデータに対して、4ビットアップシフト操作を行ない、エントリERY4のデータAについて、4ビットダウンシフト操作を行ない、残りのエントリERY2、ERY3、ERY5−ERY7について、1ビットダウンシフト操作を行ない、エントリERY15について4ビットダウンシフト操作を行なう。
ステップ5:
ポインタを更新して次の移動制御データを対応のRECMレジスタに格納する。転送データをX/XHレジスタに格納した後、制御データEcに従って、データ移動を行なう。転送データビットについて、この移動操作を繰返し実行する。この操作により、エントリERY3およびERY4において、1ビットアップシフトおよびダウンシフトを行なって、そのデータを格納交換する。エントリERY11のデータは、4ビットシフトにより、エントリERY7に格納される。
ステップ6:
最後の移動制御データ群を、対応のRECMレジスタに格納して、移動量を各エントリ毎に設定する。転送データをX/XHレジスタに格納して、制御データ群Edに従ってデータ移動を行なう。この操作においては、制御データ群Edに従って、エントリERY2およびERY3とエントリERY4およびERY5の内容を交換する。これにより、エントリERY0からエントリERY7に、データA−Hが順次格納される。
したがって、このようなギャザ処理についても、個別移動操作を行なうことにより、ギャザ処理を実現することができ、高速の処理を実現することができる。
なお、図37に示すデータ移動フローにおいて、移動制御データ群Eaに従って、データ移動を行なうエントリおよび行なわないエントリが存在する。データ移動の実行/不実行はマスクビットにより設定することができ、各移動操作時にマスクビットがセット/クリアされれば良い。また、このとき、マスクビットがセットされてエントリが移動操作を実行しても、図37において斜線ブロックで示すように、後のサイクルで転送されるデータで、不要転送データを書き換えることができ、マスクビットが同一移動制御データ群に対して同一の状態に設定されていても、後のサイクルで転送データで書き換えられる限り、特に問題は生じない。
図38は、図37に示すギャザ処理を、16ビットデータに対して行なった場合のエントリ数と必要とされるサイクル数および制御ビットの関係を一覧にして示す図である。Vフラグは、マスクレジスタ(Vレジスタ)に格納されるマスクビットである。制御ビットは、ジグザグコピーモード実行時の転送先/移動量を決定するデータ(E0−E3)数を示す。この場合、初期データの格納領域は示していない。この図38に示すエントリ数と実行サイクル数の関係においても、先のシミュレータバージョン0.03.01のサイクル数計算を利用する。
図38に示すエントリ数64の場合が、図37に示す操作に対応する。制御ビットとして、移動命令は4種類であり、合計16ビットであり、さらに、データ転送に関係しない部分の領域(エントリ)のデータ転送を停止するため、マスクフラグが利用される。したがって、それぞれ、4ビットのマスクフラグが用いられ、制御ビットとして、各移動時に使用される移動命令よりも、このマスクビットの数だけ増大する。
図39は、図38に示すギャザ処理におけるエントリ数とサイクル数の関係を示す図である。図39において、横軸にエントリ数を示し、縦軸にサイクル数を示す。図39に示すように、エントリ数が増大するにつれて、当然、必要とされるサイクル数も増大する。しかしながら、RECMレジスタを用いて、各エントリごとにデータ移動を行なう場合、垂直移動命令vcopyまたはmoveによる、各エントリで同一方向への移動を行なう構成に比べて、サイクルするが低減されているのが見られる。
図40は、図38に示すギャザ処理のエントリ数と制御ビットの占める領域のビット幅を示す。図40において、横軸にエントリ数を示し、縦軸に、制御データ格納領域のビット幅を示す。図40に示すように、RECMレジスタを用いて、各エントリ単位でデータ移動量を設定してデータ移動を行なう場合、各エントリごとに移動制御データを格納する必要があり、制御ビットの格納領域のビット幅は、通常の、垂直移動命令vcopyを利用する場合のマスクビット(Vフラグ)を格納する領域のビット幅よりも大幅に増大する。しかしながら、転送データは16ビットであり、1つのデータエントリのビット幅は、十分に広く(1つのビット線対のメモリセルの数であり、ワード線の数に対応する)、十分に、これらの制御ビットを格納する領域は確保することができる。
[デインタリーブ処理]
デインタリーブ処理は、エントリの垂直方向に並んだデータ列を、エントリ群の上半分の領域に、偶数エントリのデータを、下半分のエントリ群に奇数エントリのデータを格納するようにデータの移動を行なう処理である。
図41は、この図面の実施の形態1に従う並列演算装置(MTX)におけるデインタリーブ処理のデータの流れを示す図である。この図41において、状態SAは、エントリERYの格納データの初期状態を示し、状態SBは、4エントリの処理終了時の状態を示す。状態SCは、エントリERYが8個設けられている場合のデインタリーブ処理完了時の状態を示す。
この図41に示すように、移動制御データ群Ea−Ecを利用して、順次データ移動を行ない、各エントリ間で偶数エントリおよび奇数エントリの内容を交換することにより、偶数エントリのデータおよび奇数エントリのデータを分類することができる。
図42は、通常の、SIMD型移動命令のコピー命令(垂直移動命令)“vcopy”に従って移動操作を行なう場合の処理手順を示す図である。この場合においては、各エントリのデータは、同一方向に同一量移動させる必要があるため、偶数エントリのデータ移動と、奇数エントリのデータ移動とに分割して処理を実行する。図42に示すように、垂直コピー命令vcopyを用いてデータ移動を行なう場合、元のデータ(初期データ)を、偶数エントリおよび奇数エントリに分けて分類する必要があるため、各エントリERY0−ERY7において保持する必要がある。したがって、転送データはテンポラリ領域内に保持し、このテンポラリ領域内に保持されたデータを順次転送する。この転送時において、また、偶数エントリデータおよび奇数エントリデータを分類してデータ転送を行なう必要があり、テンポラリ領域としては、したがって、奇数列データ転送用領域および偶数列データ転送領域とを設ける必要があり、転送データの2倍のビット幅がテンポラリ領域として必要とされる。
図43は、図41および図42に示すデインタリーブ処理における16ビットデータ処理時のエントリ数とデータ格納領域のビット幅と、転送サイクル数を一覧にして示す図である。この図43に示すサイクル数も、前述のRECMシミュレータのバージョン0.03.01を用いて2ビット単位でのデータ転送時の処理を求める。
エントリ数が4の場合、図41に示すように、初期状態SAから、状態SBへ移行するだけであり、制御ビットとして移動制御データEaが用いられるだけである。したがって、RECMを利用する場合、制御ビットとして、この命令Eaの4ビットが必要とされる(マスクビットは示していない:データ移動として0ビットシフトが実行されても良い。この場合には、マスクビットは不要である)。
RECMにおいては、移動制御データのRECMレジスタへの設定を行なうサイクルが必要となり、2ビット単位でのデータ転送時においても、X/XHレジスタへの転送データの格納、データ転送、および転送データなどの転送先での書込のサイクルが必要とされる。たとえばエントリ数が4の場合でも、データ移動に33サイクルが必要とされる。しかしながら、このエントリ数が4の場合でも、垂直コピー命令vcopyを利用する場合、偶数列データ転送および奇数列データ転送時それぞれ、転送を禁止するため、マスクフラグを2ビット用いる必要がある。また、各移動は、同一移動量のデータ転送を行なう必要があり、サイクル数がたとえば172サイクルと大幅に増加する。
図44は、図43に示すデインタリーブ処理比較表におけるエントリ数とサイクル数との関係をグラフで示す図であり、図45は、図43に示す表のエントリ数と制御ビットの幅を示す図である。図43においては、横軸にエントリ数を示し、縦軸にサイクル数を示す。図45においては、横軸にエントリ数を示す、縦軸にマスク/制御ビット幅を示す。
図44に見られるように、RECMレジスタを用いてデータ移動を行なうことにより、高速でデータの移動を行なうことができる。また、図45に示すように、データ移動エントリ数が少ない場合には、メモリマットの利用領域を低減することができる。この場合、偶数列エントリのデータおよび奇数列エントリのデータを格納するテンポラリ領域を設ける必要がなく、直接、元のアドレスポインタが示す位置に移動データの書込を行なうことができる。従って、制御ビットの幅がRECMを利用する場合には増大するものの、テンポラリ領域が不要であり、データ移動時のメモリマットの使用領域ビット幅は、垂直移動命令実行時と同程度またはそれよりも小さくすることができる。
[アンチエイリアシング処理]
エイリアスとは、通常、元のデータに含まれていない虚像データを示す。アンチエイリアシング処理は、このエイリアス成分を除去または回避する処理である。画像処理分野においては、このアンチエイリアシング処理は、生成された図形に含まれるジャギー(図形の位置がピクセルに沿って階段状にギザギザになっている状態)を除去することを示す。このアンチエイリアシング処理において、この領域の画素の平均値を求める処理がある。エイリアス処理は、エントリにわたって垂直方向に沿って整列するデータのうち、一定の範囲においてデータを交換する処理である。
図46は、エイリアシング処理のデータ配列の交換の一例を示す図である。図46において、エントリERY10からエントリERY25のデータを垂直方向に並べ替え、エントリERY25からエントリERY10の元の格納データの順に配置する。
図47は、このエイリアス処理におけるデータ配列交換時のデータ垂直移動時のデータの流れを模式的に示す図である。この図47において、まず、16エントリのうち、上位または下位の8エントリのデータ移動の処理を実行し、次いで、残りの8エントリについてデータ転送を実行する。この場合、データ転送量を、8、4、2、および1と順次低減することにより、データの並び替えを行なうことができる。ただし、実施の形態1において、基本データ転送量は、±1、±4、±16であるため、8エントリ離れた位置への通信には、4ビットシフト動作を2回実行する必要があり、また、2ビットシフト動作時には、1ビットシフト動作を2回連続して実行する必要がある。このデータ転送操作時、一例として、実線で示す+シフト命令実行および一点鎖線で示す−シフト操作を、交互に実行する。データ保持とデータ移動のための領域が衝突した場合、正確にデータ転送を行なうことができなくなり、この中間データの確保のために、テンポラリ領域が必要となる。2回転送するため、通常、+シフト用および−シフト用に2つのテンポラリデータ領域を必要とする。
また、エントリERY10からERY25についてデータ転送を行ない、残りのエントリについてはデータ移動が行なわれないため、マスクビットを用いて、データ転送をマスクする必要があり、また、+シフト方向および−シフト方向交互に行なわれる場合においても、マスクをかける必要がある。
図48は、図47に示す32ビットデータのエイリアス処理実行時のシミュレーション結果を示す図である。シミュレータとして方式バージョン0.03.01を利用し、このシミュレータにおいてライブラリ化されたサイクル数計算シミュレータを利用する。垂直移動命令vcopyを用いて32ビットデータを移動させる場合、613サイクル必要とされ、また、マスクビットパターン格納領域として、8ビットの領域が必要とされ、さらに、テンポラリビット格納のために、2つのデータのビット幅、すなわち、64ビットが必要となる。一方、RECMレジスタを利用する場合、サイクル数は442であり、制御ビットとして、16ビットが用いられる。すなわち4回の移動命令を実行することが必要となる(移動量が1、4、16と限定されているため)。
したがって、この図48の表から見られるように、RECMレジスタを用いたデータ通信の場合、処理サイクル数が短く、高速の処理を実現することができる。
また、RECMレジスタを利用する場合、このエントリERY0からERY25の内容をすべて移動させることができるため、テンポラリ領域が不要となり、メモリマットのデータ通信に使用する領域幅を低減することができる。
データ移動通信回路を用いたRECMレジスタを設けることにより、以下の効果が得られる。すなわち、一斉移動を行なう垂直コピー命令vcopyまたはmoveを用いた場合、一度に同一距離のエントリ間でのデータ移動のみを行なうことができるだけであり、各エントリ単位で異なる距離をデータ移動させる必要がある場合には、エントリ間の移動を、データ移動量ごとに複数回繰返す必要がある。しかしながら、この発明の実施の形態1に従うALU間データ通信回路(RECMレジスタ)を用いることにより、各エントリ単位でプログラマブルにエントリ間のデータ移動距離を設定することができ、また、データ移動を行なうことができる。これにより、高速に、エントリ間のデータ移動を行なうことが可能となる。また、データ移動量によっては、一度のデータ移動命令実行のみで、各エントリで、異なる所望の距離、データを移動させることが可能となる。
また、このエントリ間のデータ移動のマルチプレクサの選択信号を、単に、並列演算装置(主演算回路)全体の制御(コントローラ21(図1参照)の制御)に代えて、RECMレジスタ(デコード回路を含む)による制御信号に切換えるだけで、エントリ単位でのデータ転送を制御することができ、新たな配線リソースを追加する必要がない。
[実施の形態2]
図49は、この発明の実施の形態2に従うALU処理エレメントの構成を概略的に示す図である。この図49に示すALU処理エレメントの構成は、以下の点で、図10に示す実施の形態1に従うALU処理エレメントとその構成が異なる。すなわち、Cレジスタ53、Fレジスタ54、Dレジスタ59およびXLレジスタ58を、この移動制御データE0−E3を格納するレジスタとして利用する。すなわち、MIMD用命令レジスタ(RECMレジスタ)70に代えて、ALU処理エレメント34に設けられる演算レジスタを利用する。データ移動時においては、算術演算または論理演算は実行されないため、これらのXLレジスタ58、Dレジスタ59、Cレジスタ53、およびFレジスタ54は使用されない。このデータ移動操作時において、使用されないレジスタを移動制御データ格納用のレジスタとして利用することにより、専用のMIMD命令レジスタ(RECMレジスタ)を設ける必要がなく、このALU間接続スイッチ回路の占有面積を低減する。
この図49に示すALU処理エレメントの他の構成は、図10に示すALU処理エレメントの構成と同じであり、対応する部分には同一参照番号を付し、その詳細説明は省略する。ただし、図49においては、SIMD型アーキテクチャでの演算時とMIMD型アーキテクチャでの演算時とで移動制御の経路を切換えるためにマルチプレクサ(MUX)150を例示的に示す。このマルチプレクサ150は、SIMD命令実行およびMIMD命令実行を切換えるモード制御信号S/Mに従って、コントローラ21からの制御信号と、これらのレジスタからの制御命令ビットE0−E3の一方を選択する。モード制御信号は、移動命令実行時にMIMD型移動命令であるかの判定結果に従ってコントローラ21から生成される(MIMD型移動命令実行時にモード制御信号S/Mがレジスタからの移動制御データを選択する状態に設定される)。
図49において、一例として、Cレジスタ53に、制御ビットE3が格納され、Fレジスタ54に制御ビットE1が格納され、XLレジスタ58に、E0が格納され、Dレジスタ59に制御ビットE2が格納される。しかしながら、これらのレジスタ53、54、58および59に格納される制御ビットとしては、他の組合せが用いられてもよい。
これらのレジスタ53、54、59および58に移動量データを転送する(ロードする)命令を、先の命令一覧表に示すロード命令を利用することにより、移動量データを、これらのレジスタに格納することができる。
以上のように、この発明の実施の形態2に従えば、移動データ格納レジスタとして、ALU処理ユニットに設けられているレジスタのうちデータ移動操作時に用いられないレジスタを利用しており、ALU間移動のための回路の占有面積を低減することができる。また、移動データ格納時、SIMD演算時のレジスタロード命令を利用して移動制御データを格納することができ、データ移動制御のプログラム記述が容易となる。
[実施の形態3]
図50は、この発明の実施の形態3に従うALU処理エレメントの構成を概略的に示す図である。この図50に示すALU処理エレメントは、以下の点で、図10に示す実施の形態1に従うALU処理エレメントとその構成が異なる。すなわち、MIMD用命令デコーダ74にMIMD命令を与えるレジスタとして、Cレジスタ53およびXLレジスタ58が用いられる。この図50に示すALU処理エレメントの他の構成は、図10に示すALU処理エレメントの構成と同じであり、対応する部分には同一参照番号を付し、その詳細説明は省略する。
ただし、図50に示す構成においても、ALU間通信回路(RECM)71に対して、マルチプレクサ150が設けられ、モード制御信号S/Mに従って、データレジスタ(RECMレジスタ)70からのビットE0−E3と、コントローラ21からの制御信号の一方を切換えて、ALU間通信回路71の接続経路を設定するマルチプレクサ150が設けられる。
この図50に示すALU処理エレメント34の構成においては、MIMD命令を格納するための専用のレジスタが不要となり、ALU処理エレメントのレイアウト面積を低減することができる。この図50に示す様に、レジスタ53および58をMIMD命令レジスタとして利用する場合のMIMD演算実行時の命令は、以下のように記述される。
MTX_MIMD(as,bs,cs,bit_count)
0:ptr.set♯cs,p1;
1:men.ldC@p1++;
2:men.ldXL@p1;
3:ptr.set♯as,p2;ptr.set♯bs,p3;
4:for(i=0;i<bit_count;i++){
5:men.ldX@p2++;
6:alu.op.mimd@p3++;
7:}
上述の操作記述において、行番号0の命令により、ポインタレジスタp1のポインタを、ポインタcpの初期値csとして設定する。
行番号1の命令により、Cレジスタに、ポインタレジスタp1のポインタが指定する位置のビットをロードし、ポインタレジスタp1のカウント値を1増分する。
行番号2の命令により、XLレジスタに、ポインタレジスタp1が指定するビット位置のデータビットを、XLレジスタにロードする。
行番号3の命令に従って、ポインタレジスタp2のポインタを、アドレスポインタapの初期値asとし設定し、また、ポインタレジスタp3のポインタが指定する値を、アドレスポインタbpの初期値bsとして設定する。
行番号4のfor文により、iの変化範囲が0から、ビット幅bit_countの範囲で設定され、かつ操作ごとに、iが増分される。
行番号5の命令により、ポインタレジスタp2のポインタが指定する位置のビットを、Xレジスタにロードし、次いでポインタレジスタp2のポインタを増分する。
行番号6の命令により、ポインタレジスタp3のポインタが指定する位置のデータビットとXレジスタとのデータに対し、CレジスタおよびXLレジスタ58に格納されたビットに従って、指定されたMIMD演算命令alu.op.mimdを実行し、その実行結果を、再びポインタレジスタp3のポインタが指定するビット位置に格納する。
行番号7により、命令処理の終了が記述される。
したがって、MIMD演算実行時、Cレジスタ53およびXLレジスタ58により、演算命令(制御ビット)M1およびM0を格納した後、演算対象のデータビットをXレジスタに転送し、ポインタレジスタp3のポインタが指定する位置のビットとの間の演算を実行する。この場合、1ビット単位での演算が実行される場合には、X及びXHレジスタが利用されて論理演算処理が実行される。1ビット単位での演算実行時には、行番号5の後にポインタレジスタp3のポインタが指定するビット位置のデータをXHレジスタへ転送して、演算を実行する。否定演算命令NOTの実行時には、XLレジスタ及びXHレジスタに格納されたビットのうちの予め定められたレジスタのビット値に対して反転操作が実行される。
このように、通常のSIMD型アーキテクチャの命令を利用して、MIMD命令を各ALU処理エレメントのレジスタに個々に設定して演算処理を実行することができる。
以上のように、この発明の実施の形態3に従えば、MIMD命令格納用のレジスタとして、ALU処理エレメントの演算データ格納用のレジスタを利用しており、MIMD演算命令レジスタを専用に設ける必要がなくなり、ALU処理エレメントの占有面積を低減することができる。
[実施の形態4]
図51は、この発明の実施の形態4に従うALU処理エレメント34の構成を概略的に示す図である。この図51に示すALU処理エレメントは、図50に示すALU処理エレメントと、以下の点でその構成が異なる。すなわち、ALU間通信回路(RECM)71に対する移動制御データビットE0−E3が、Cレジスタ53、Fレジスタ54、XLレジスタ58およびDレジスタ59にそれぞれ格納される。また、MIMD命令ビット0及びM1がXLレジスタ58及びCレジスタ53に格納される。
一例として、XLレジスタ58に命令ビットM0および制御データE0が格納され、Cレジスタ53に、MIMD演算命令M1およびデータ移動量制御ビットE3が格納される。Fレジスタ54およびDレジスタ59に、それぞれ移動量制御ビットE1およびE2を格納する。データ移動操作と、MIMD演算命令は、同時には実行されない。したがって、このCレジスタ53およびXLレジスタ58を、MIMD演算命令およびジグザグコピー動作の制御ビットを格納するために用いても、何らデータビットの衝突は生じない。
この図51に示す実施の形態4に従うALU処理エレメントの構成は、図49および図50に示す構成を組合せたものと等価である。この場合、エントリ単位での移動データ量設定およびエントリ単位でのMIMD命令を格納するための専用のレジスタを設ける必要がなく、よりALU処理エレメントの占有面積を低減することができる。
以上のように、この発明の実施の形態4に従えば、MIMD命令およびRECMデータそれぞれの制御ビットを格納するレジスタとして、ALU処理エレメントに設けられているレジスタを利用している。したがって、ALU処理エレメント、新たにレジスタを増加させる必要がなく、ALU処理エレメントの増大を抑制することができる。たとえば、エントリERYが1024個設けられる場合、このALU処理エレメント当たり6個のレジスタ(MIMD用レジスタ2ビット、およびRECMレジスタの4ビット)を共用することにより、6144個のレジスタを削減することができ、大幅に、面積増大を抑制することができる。
なお、各レジスタへのデータ及び移動/命令制御データのロードおよびMIMD命令を実行する手順は、先に示した実施の形態1の場合と同様であり、ジグザグコピー命令およびMIMD演算命令を1回発行することにより、各エントリ単位で、データ転送および演算をそれぞれ行なうことができる。
[実施の形態5]
図52は、この実施の形態1から4において示したMIMD用命令デコーダ74の具体的構成の一例を示す図である。図52に示す構成においては、MIMD命令ビットM0およびM1は、XLレジスタ58およびCレジスタ53からそれぞれ生成される。しかしながら、このMIMD命令ビットは、実施の形態1において示したように、専用のMIMD用レジスタに格納されてもよい。
図52において、MIMD用命令デコーダ74は、命令ビットM0およびM1をそれぞれ受けるインバータ161および162と、インバータ161および162の出力信号を受けて否定演算指定信号φnotを生成するAND回路163と、インバータ161の出力信号と命令ビットM1とを受けて、論理和演算指定信号φorを生成するAND回路164と、命令ビットM0とインバータ161の出力信号とを受けて排他的論理和演算指定信号φxorを生成するAND回路165と、命令ビットM0およびM1を受けて、論理積演算指定信号φandを生成するAND回路166を含む。命令ビットM0およびM1の論理値に従って演算指定信号φmimdが1つ活性化されて加算器50において対応の論理演算を実行する内部接続が設定される。
この図52に示すMIMD用命令デコーダ74は、インバータおよびAND回路(NANDゲートとインバータ)とを用いた組合せ回路で実現される。このMIMD用命令デコーダ74を、組合せ回路で実現することにより、命令デコーダ74の占有面積を低減することができ、また高速でデコード動作を行なうことができる。
なお、図52に示すMIMD用命令デコーダ74の組合せ回路の構成は一例であり、他の論理ゲートの組合せが用いられてもよい。
[実施の形態6]
図53は、この発明の実施の形態6に従うMIMD用命令デコーダ74の構成を概略的に示す図である。図53に示す構成においても、MIMD用命令は、Cレジスタ53およびXLレジスタ58からのビットM1およびM0により表現される。しかしながら、このMIMD命令ビットは、専用のMIMD命令レジスタから与えられても良い。
図53において、MIMD用命令デコーダ74は、命令ビットM0およびM1に従って、MIMD演算命令alu.op.not、alu.op.or、alu.op.xor、およびalu.op.andのいずれかを選択して、加算器50へ与えるマルチプレクサ(MUX)170で構成される。
マルチプレクサ170へ与えられるMIMD演算命令は、それぞれビット展開されてコードの形態で与えられる。制御ビットM0およびM1に従って、指定された演算命令を表現するコードが選択されて加算器50へ与えられる。
図54は、図53に示すマルチプレクサ170の具体的構成を概略的に示す図である。図54において、マルチプレクサ170は、各々が、MIMD命令ビットM0およびM1に従って4対1選択を行なうセレクタSEL1−SELnを含む。
MIMD演算命令のビットパターンを生成するために、命令パターンメモリROMが設けられる。この命令パターンメモリROMは、読出専用メモリであり、セレクタSEL1−SELnそれぞれに対応して設けられる各々が4ビット幅のメモリ領域MM1−MMnを含む。メモリ領域MM1−MMnの同じ番号のビット位置に、同じMIMD演算命令のコードビットが格納される。したがって、セレクタSEL1−SELnにより、演算命令ビットM0およびM1に従って、これらのメモリ領域MM1−MMnの同一ビット位置の格納値が選択されて、演算命令をビットパターン(コード)で表現したnビット幅の制御パターンが選択されて加算器50へ与えられる。このビットパターンのビット幅nは、加算器50内における内部構成に応じて設定され、加算器50内において指定された論理演算を実現するための信号伝搬経路の切換に必要なビット数が用いられる。
この命令パターンメモリROMは、主演算回路内のすべてのエントリのALU処理エレメントに共通に設けられる。命令パターンメモリROMは、記憶値が製造工程時のマスクにより設定される。したがって、命令パターンメモリROMのマスク時に、このマスク値を変更することにより、MIMD命令として実行する命令も、容易に変更することができ、実行すべき演算内容を容易に変更することができる。また、セレクタSEL1−SELnおよびメモリ領域MM1−MMnのビット幅を拡張することにより、容易に、MIMD演算命令の種類の拡張にも対応することができる。
この命令パターンメモリROMは、マスクROMでなく、電気的に書換可能な不揮発性メモリで構成されても良い。この場合でも、記憶内容を電気的に書き換えることにより、論理演算命令の変更及び拡張に容易に対応することができる。
[実施の形態7]
図55は、この発明の実施の形態7に従うMIMD用命令デコーダ74の構成を概略的に示す図である。図55において、MIMD用命令デコーダ74は、MIMD演算命令を、ビットパターンに展開して格納するメモリ175を含む。このメモリ175は、MIMD演算命令に対応して4アドレスを有する(1アドレスは、nビット幅である)。メモリ175は演算命令ビットM0およびM1をアドレスとして、指定されたアドレスの演算命令パターン(命令コード)を読出す。
メモリ175は、ランダムにアクセス可能なメモリであればよく、通常のSRAM(スタティック・ランダム・アクセス・メモリ)およびフラッシュメモリ等を利用することができる。なお、図55には明確には示していないが、メモリ175は、当然、命令ビットM0およびM1をデコードするアドレスデコーダおよびビットパターン(命令コード)を書込/読出を行なう入出力回路は有している。このメモリ175は、レジスタファイルで構成されても良い。
このメモリ175の命令セットの変更時、各命令セットのコード(ビットパターン)を、各対応のデータエントリに格納する。この場合、メモリ175内で、シリアル/パラレル変換用のレジスタを入力回路前段に設け、メモリ175に1ビット単位で命令コードを対応のデータエントリから転送し、各命令セットのnビット命令コードをビットシリアルに転送された命令コードをnビットパラレルに対応のアドレス位置に書込む構成が用いられてもよい。
また、これに代えて、MIMD命令用デコーダに対してMIMD命令転送専用のバスを設け、この専用のバスを介して、命令セットの各命令コードを図1に示す内部バス14を介して転送して、コントローラ21の制御の下にメモリ175に書込む構成が用いられてもよい。また、主演算回路20においてコントローラ21がMIMD命令コードを生成して各エントリの命令デコーダ用のメモリ175に書き込む構成が用いられても良い。
また、メモリ175を1/2ビット幅のAポートとnビット幅のBポートの2ポート構成とし、メモリ175への命令コード書込時にはAポートを介して書込み、命令コード読出時においてはBポートを介して読出す構成が用いられても良い。
図55に示すように、メモリ(RAM)175でMIMD命令用デコーダ74を実現することにより、以下の効果が得られる。すなわち、メモリ175の保持する命令コードを書換えることにより、並列演算装置(MTX)が動作中であっても、使用可能なMIMD命令の命令セットを変更することができる。
1 並列演算装置、FB1−FBn 基本演算ブロック、20 主演算回路、21 コントローラ、22 レジスタ群、30 メモリセルマット、32 ALU群、34 ALU処理エレメント、r0−r3 ポインタレジスタ、44 ALU間相互接続用スイッチ回路、30A,30B メモリマット、50,51 加算器、52 Xレジスタ、53 Cレジスタ、54 Fレジスタ、55 Vレジスタ、56 Nレジスタ、57 XHレジスタ、58 XLレジスタ、70 RECMレジスタ、71 ALU間通信回路(RECM)、72 MIMD命令用レジスタ、74 MIMD用命令デコーダ、90 シフト配線領域、91 ±1ビットシフト配線領域、92 ±4ビットシフト配線領域、93 ±16ビットシフト配線領域、94 ±64ビットシフト配線領域、95 ±256ビットシフト配線領域、91a +1ビットシフト配線領域、91b −1ビットシフト配線領域、92a +4ビットシフト配線領域、92b −4ビットシフト配線領域、93aa,93ab +16ビットシフト配線領域、93ba,93bb −16ビットシフト配線領域、94aa,94ab +64ビットシフト配線領域、94ba,94bb −64ビットシフト配線領域、95aa,95ab +256ビットシフト配線領域、95ba,95bb −256ビットシフト配線領域、120 送信バッファ、122 マルチプレクサ、124 受信バッファ、115 シフト配線群、116 受信信号線、150 マルチプレクサ、161,162 インバータ、163−166 AND回路、170 マルチプレクサ、SEL1−SELn セレクタ、ROM 命令パターンメモリ、MM1−MMn ROMメモリ領域、175 メモリ。