(57)【要約】【課題】単一命令・多重データ型演算装置において、多重命令・多重データ演算を高速かつ柔軟に実行する。【解決手段】エントリそれぞれに対応して設けられるＡＬＵユニット（３４）において、ＭＩＭＤ用命令に従って制御信号群を生成するＭＩＭＤ用命令デコーダ（７４）と、このＭＩＭＤ命令を指定するデータを格納するＭＩＭＤ用レジスタ（７２）を設けるとともに、ＡＬＵ間通信回路（７１）を設ける。ＡＬＵ間通信回路の移動量および移動方向を、移動データレジスタ（７０）に格納されるデータビット（Ｅ０−Ｅ３）で設定する。ＡＬＵユニットごとに移動量および演算命令を設定してデータ移動および演算を実行することができる。【選択図】図４
2008047031.tif 000002
【特許請求の範囲】
【請求項１】
各々が複数ビット幅を有する複数のデータエントリを有するデータ記憶部、および
前記複数のデータエントリに対応して配置され、個々に演算内容が設定されて、該設定された演算を与えられたデータに対して個々に実行する複数の演算処理エレメントを備える、並列演算装置。
【請求項２】
各前記演算処理エレメントは、
演算内容を指定するデータを格納する命令レジスタと、
前記命令レジスタのデータをデコードして、演算内容を規定する信号を生成する命令デコーダと、
前記命令デコーダの出力信号従って演算内容が設定される演算回路を備える、請求項１記載の並列演算装置。
【請求項３】
各前記演算処理エレメントは、
前記演算回路の演算に利用されるデータおよび前記演算にマスクをかけるマスクデータを格納するための複数のレジスタを含み、
前記命令レジスタは、前記複数のレジスタのうちの前記命令実行時に不使用とされるレジスタで構成される、請求項２記載の並列演算装置。
【請求項４】
前記命令デコーダは、組合せ回路で構成される、請求項２記載の並列演算装置。
【請求項５】
前記命令デコーダは、前記命令レジスタに格納されるデータに従って各々がコード形態の複数の命令のうちから命令を選択するマルチプレクサで構成される、請求項２記載の並列演算装置。
【請求項６】
前記命令デコーダは、複数の命令をコードの形態で格納する命令メモリを備え、前記命令レジスタに格納されるデータをアドレスとして前記命令メモリから、指定された命令に対応する命令コードが前記制御信号群として読出される、請求項２記載の並列演算装置。
【請求項７】
各前記演算処理エレメントは、前記命令レジスタの格納データに従って、個々に、否定、論理積、論理和、および排他的論理和演算のうちのいずれかの演算が指定される、請求項１記載の並列演算装置。
【請求項８】
各々が複数ビット幅を有しかつ各エントリに対応して配置される複数のデータエントリを有するデータ記憶部、
各前記エントリに対応して配置され、各々が与えられたデータに対して設定された演算を実行する複数の演算処理エレメント、および
前記複数のエントリに対応して設けられ、各々が対応のエントリと別のエントリとの間でデータ通信を行なう複数のデータ通信回路を備え、前記複数のデータ通信回路は、個々に、データ移動のエントリ間距離および方向が設定される、並列演算装置。
【請求項９】
各前記データ通信回路は、
データ移動量を設定するデータを格納する移動データレジスタと、
前記移動データレジスタの格納データに従ってデータ転送経路を設定するマルチプレクサとを備える、請求項８記載の並列演算装置。
【請求項１０】
各前記演算処理エレメントは、演算されるデータおよび演算をマスクするマスクデータを格納する複数のレジスタを備え、
前記移動データレジスタは、前記複数のレジスタのうちの前記データ移動時に不使用とされるレジスタで構成される、請求項８記載の並列演算装置。
【請求項１１】
前記データの移動量を設定する移動データは、データ転送方向を含めて予め定められた複数のデータ移動量のうちの１つのデータ移動量を指定し、前記複数のエントリは、最上位から最下位に向かって順次配置され、データ移動時、移動先が最上位または最下位のエントリを超えるとき、該移動先がサイクリックに指定される、請求項８記載の並列演算装置。
【請求項１２】
各々が複数ビット幅を有しかつエントリに対応して配置される複数のデータエントリを有するデータ記憶部、
前記複数のエントリに対応して配置され、個々に演算内容が設定されて、与えられたデータに対して設定された演算を実行する複数の演算処理エレメント、および
前記複数のエントリに対応して設けられ、各々が対応のエントリと別のエントリとの間でのデータ通信を行なう複数のデータ通信回路を備え、前記複数のデータ通信回路は、個々に、データ移動のエントリ間距離および方向が設定され、
前記演算処理エレメントの演算内容およびデータ通信回路のデータ移動量を指定するデータは、前記演算処理エレメント内に設けられる演算されるデータを格納および演算をマスクするマスクデータを格納する複数のレジスタのうちの空きレジスタに設定される、並列演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、半導体演算装置に関し、特に、半導体メモリを用いて高速に大量のデータの演算処理を行なう演算回路の構成に関する。
【背景技術】
【０００２】
近年、携帯端末機器の普及に伴い、音声および画像のような大量のデータを高速に処理するデジタル信号処理の重要性が高くなってきている。デジタル信号処理には、一般に、専用の半導体装置として、ＤＳＰ（デジタル・シグナル・プロセッサ）が用いられる事が多い。音声および画像に対するデジタル信号処理においては、フィルタ処理などのデータ処理が行なわれ、このような処理においては、積和演算を繰返す演算処理が多い。したがって、一般に、ＤＳＰの構成においては、乗算回路、加算回路および累算用のレジスタが設けられる。このような専用のＤＳＰを用いると、積和演算を１マシンサイクルで実行することが可能となり、高速演算処理が可能となる。
【０００３】
しかしながら、処理対象のデータ量が非常に多い場合には、専用のＤＳＰを用いても、性能を飛躍的に向上させることは困難である。たとえば、演算対象のデータが１００００組ある場合、１つ１つのデータに対する演算を１マシンサイクルで実行することができたとしても、最低でも、１００００サイクルが演算に必要となる。したがって、レジスタファイル等を用いて積和演算を行なうような構成の場合、１つ１つの処理が高速であるものの、データ処理が直列に行なわれるため、データ量が多くなると、それに比例して処理時間が長くなり、高速処理を実現することはできない。
【０００４】
また、このような専用のＤＳＰを使用する場合、処理性能は動作周波数に大きく依存することになるため、高速処理を優先した場合、消費電力が増大することとなる。
【０００５】
そこで、本出願人は、大量のデータを高速に演算処理することのできる構成を、すでに提案している（特許文献１（特開２００６−１２７４６０号公報））。
【０００６】
この特許文献１に示される構成においては、メモリセルマットを複数のエントリに分割し、各エントリごとに演算器（ＡＬＵ）を設ける。各エントリと対応の演算器（ＡＬＵ）の間で、ビットシリアル態様でデータ転送を行なって、複数のエントリにおいて並列に、演算を実行する。たとえば二項演算の場合、二項のデータを読出し、演算を行ない、その演算結果を格納する。これらのデータ操作をビット単位で実行する。データビットの読出（ロード）、演算、および演算結果の書込（ストア）に、それぞれ１マシンサイクルが必要とされる場合、演算対象のデータワードのビット幅がＮの場合、各エントリの演算には、４・Ｎマシンサイクルが必要となる。演算対象のデータワードのビット幅は、８ビットから６４ビット程度である。エントリ数を、たとえば１０２４と大きくすることにより、たとえば８ビットデータの場合、３２マシンサイクルで、１０２４個の演算結果を得ることができ、１０２４組のデータをシーケンシャルに処理する場合に比べて、大幅に処理時間を短縮することができる。
【０００７】
また、この特許文献１に示される構成においては、エントリに対応して、データ転送回路が設けられる。ＡＬＵ間相互接続用スイッチ回路（データ転送回路：ＥＣＭ（entry communicator））を設け、演算器間でデータ転送を行なうことにより、エントリ内部の専用のバスを介してデータの転送を行なっているため、システムバスを介してエントリ間でデータ転送を行なう構成に較べて、高速でデータ転送を行なって演算処理を実行することができる。また、ＡＬＵ間相互接続用スイッチ回路を利用することにより、メモリセルマット内のさまざまな領域に格納されるデータに対する演算を実現することができ、演算の自由度を高くすることができ、多様な演算を行なう半導体演算装置を実現することができる。
【特許文献１】特開２００６−１２７４６０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
この特許文献１に示される構成においては、メモリセルマット間のすべてのエントリの演算器において、同一の演算処理を並列に実行することができる。すなわち、この特許文献１に示される並列演算装置（ＭＴＸ）は、ＳＩＭＤ（シングル・インストラクション・ストリーム−マルチプル・データ・ストリーム）アーキテクチャをベースとした演算装置である。また、ＡＬＵ相互接続スイッチ回路を用いており、各エントリにおいて物理的に遠く離れたエントリ間の通信も同時に行なうことができ、エントリ間に跨った処理も実行することができる。
【０００９】
また、特許文献１に示される構成においては、メモリセルマット内のアクセス位置を示すポインタレジスタの内容を操作するポインタレジスタ命令、エントリのデータ記憶部と対応の演算器との間でデータを転送する１ビットロード・ストア命令、２ビットロード・ストア命令、１ビットエントリ間データ移動命令、２ビットエントリ間データ移動命令、１ビット算術演算命令、および２ビット算術演算命令を実行することができる。また、演算器内に設けられるマスクレジスタ（Ｖレジスタ）の値を“０”に設定することにより、そのエントリの演算をマスクして、演算を不実行状態に設定することが可能である。
【００１０】
この特許文献１に示される演算装置は、ＳＩＭＤベースであり、すべてのエントリが並行して、同じ演算を実行する。したがって、同一の演算処理を複数のデータの組に対して実行する場合には、高速演算処理を行なうことができ、応じて、たとえば画像データのフィルタ処理などを、高速で実行することができる。
【００１１】
しかしながら、並列性の低い演算処理は、演算装置内において、演算対象以外の演算に対してマスクをかけて、それぞれ個別に順次、演算処理を実行するか、または、ホストＣＰＵで処理することとなる。したがって、この並列性の低い演算処理の逐次処理が、高速化に対する１つの障害となり、この並列演算装置の性能を最大限に引出すことができなくなるという問題が生じる。
【００１２】
また、エントリ間通信においては、ＳＩＭＤ型アーキテクチャの構成では、すべてのエントリが、並行して、同一距離離れたエントリと通信を行なう（エントリ間データ移動命令に従って）。しかしながら、各エントリが、それぞれ、任意の距離離れたエントリと通信を行なう場合には、エントリ間移動命令（データ移動命令）と演算器のＶレジスタのマスクビットとを組合わせて、データ移動の距離を調整する必要があり、距離の異なるエントリ間のデータの移動は、並列に処理することは不可能である。
【００１３】
したがって、この並列性の低い演算および／またはデータ移動処理を効率的に行なうことができれば、演算装置の用途も広くすることができる。
【００１４】
それゆえ、この発明の目的は、並列性の低い演算およびデータ移動等の処理を効率的に行なうことのできる並列演算装置を提供することである。
【課題を解決するための手段】
【００１５】
この発明の第１の観点に係る並列演算装置は、各々が複数ビット幅を有しかつエントリに対応して配置される複数のデータエントリを有するデータ記憶部と、このデータ記憶部のデータエントリに対応して配置され、個々に演算内容が設定されて、与えられたデータに対して設定された演算を実行する複数の演算処理エレメントを備える。
【００１６】
この発明の第２の観点に係る並列演算装置は、各々が複数ビット幅を有しかつエントリに対応して配置される複数のデータエントリを有するデータ記憶部と、各エントリに対応して配置され、各々が与えられたデータに対して設定された演算を実行する複数の演算処理エレメントと、複数のエントリに対応して設けられ、各々が対応のエントリと別のエントリとの間でのデータ通信を行なう複数のデータ通信回路を備える。これらの複数のデータ通信回路は、個々に、データ移動のエントリ間距離および方向が設定される。
【００１７】
この発明の第３の観点に係る並列演算装置は、各々が複数ビット幅を有しかつエントリに対応して配置される複数のデータエントリを有するデータ記憶部と、このエントリに対応して配置され、個々に演算内容が設定されて、与えられたデータに対して設定された演算を実行する複数の演算処理エレメントと、これら複数のエントリに対応して設けられ、各々が対応のエントリと別のエントリとの間でのデータ通信を行なう複数のデータ通信回路を備える。複数のデータ通信回路は、個々に、データ移動のエントリ間距離および方向が設定される。
【００１８】
また、各エントリの演算処理エレメントの演算内容およびデータ通信回路のデータ移動量および方向は、該演算処理エレメント内に設けられる演算データおよび演算マスク用のデータを格納するレジスタ内に設定される。
【発明の効果】
【００１９】
この発明の第１の観点に係る並列演算装置においては、演算処理エレメント個々に、演算内容を設定するように構成しており、並列性の低い演算を、並列にエントリごとに実行することができ、より性能が改善される。特にホストＣＰＵにデータを転送することなく、この演算装置内で閉じて、データ演算処理を実行することができ、データ転送に要する時間を短縮することができる。
【００２０】
また、この発明の第２の観点に係る並列演算装置においては、エントリ個々に、データ移動量を設定しており、高速で、データのエントリ間移動を行なうことができ、データ転送に要する時間を短縮することができる。
【００２１】
また、この発明の第３の観点に係る並列演算装置においては、演算処理のレジスタ毎に、この演算内容およびデータ移動量を設定するデータを格納しており、専用のレジスタを用いる必要がなく、レイアウト面積の増大を抑制することができる。また、エントリ個々に、データ移動量および演算内容を設定しており、高速の処理を実現することができる。
【発明を実施するための最良の形態】
【００２２】
［実施の形態１］
図１は、この発明の実施の形態１に従う半導体演算装置を利用する処理システムの全体の構成を概略的に示す図である。図１において、処理システムは、並列演算を実行する半導体演算装置１と、この半導体演算装置１における処理の制御、システム全体の制御およびデータ処理を行なうホストＣＰＵ２と、システムの主記憶として利用されて、必要な種類のデータを格納するメモリ３と、メモリ３に対してホストＣＰＵ２を介することなく直接アクセスするＤＭＡ（ダイレクト・メモリ・アクセス）回路４とを含む。ＤＭＡ回路４の制御により、メモリ３と半導体演算装置１との間で直接データ転送を行なうことができ、また、半導体演算装置１に直接アクセスすることができる。
【００２３】
ホストＣＰＵ２、メモリ３、ＤＭＡ回路４および半導体演算装置１は、システムバス５を介して相互接続される。半導体演算装置１は、複数の並列に設けられる基本演算ブロック（並列演算装置）ＦＢ１−ＦＢｎと、システムバス５との間でデータ／命令を転送する入出力回路１０と、この半導体演算装置１内部での演算処理およびデータ転送を制御する集中制御ユニット１５を含む。
【００２４】
基本演算ブロックＦＢ１−ＦＢｎおよび入出力回路１０は、内部データバス１２に結合される。集中制御ユニット１５、入出力回路１０および基本演算ブロックＦＢ１−ＦＢｎは、内部バス１４に結合される。基本演算ブロックＦＢ（ＦＢ１−ＦＢｎを総称的に示す）の間には、隣接ブロック間データバス１６が設けられる。ここで、図１においては、基本演算ブロックＦＢ１およびＦＢ２の間に配置される隣接ブロック間データバス１６を代表的に示す。
【００２５】
基本演算ブロックＦＢ１−ＦＢｎを並列に設け、半導体演算装置１において、並列に同一または異なる演算処理を実行する。これらの基本演算ブロックＦＢ１−ＦＢｎは、同一構成を有するため、図１においては、基本演算ブロックＦＢ１の構成を代表的に示す。
【００２６】
基本演算ブロックＦＢ１は、メモリセルアレイ（マット）および演算器を含む主演算回路２０と、マイクロコード化された実行プログラムを格納するマイクロプログラム格納メモリ２３と、基本演算ブロックＦＢ１の内部動作を制御するコントローラ２１と、アドレスポインタとして用いられるレジスタ群２２と、主演算回路２０における不良の救済を行なうためのヒューズプログラムを実行するヒューズ回路２４を含む。
【００２７】
コントローラ２１は、ホストＣＰＵ２からシステムバス５および入出力回路１０を介して与えられる制御命令により制御が手渡され、対応の基本演算ブロックＦＢ１−ＦＢｎの動作を制御する。基本演算ブロックＦＢ１−ＦＢｎ内に、マイクロプログラム格納メモリ２３を設け、コントローラ２１が、このメモリ２３内に実行プログラムを格納することにより、基本演算ブロックＦＢ１−ＦＢｎそれぞれにおいて、実行する処理内容を変更することができ、基本演算ブロックＦＢ１−ＦＢｎにおいてそれぞれ実行される処理内容を変更することができる。
【００２８】
隣接ブロック間データバス１６は、内部データバス１２を利用することなくデータ転送を実行して、基本演算ブロック間の高速データ転送を可能とする。たとえば、ある基本演算ブロックに内部データバス１２を介してデータ転送を行なっている最中に、別の基本演算ブロック間でデータ転送を行なうことができる。
【００２９】
集中制御ユニット１５は、制御用ＣＰＵ２５と、この制御用ＣＰＵ２５が実行する命令を格納する命令メモリ２６と、制御用ＣＰＵ２５のワーキングレジスタまたはポインタ格納用のレジスタを含むレジスタ群２７と、マイクロプログラムのライブラリを格納するマイクロプログラムライブラリ格納メモリ２８を含む。集中制御ユニット１５は、内部バス１４を介してホストＣＰＵ２から制御件を手渡されて、内部バス１４を介して基本演算ブロックＦＢ１−ＦＢｎの演算および転送を含む処理動作を制御する。
【００３０】
このマイクロプログラムライブラリ格納メモリ２８に、各種シーケンス処理がコード化されたマイクロプログラムがライブラリとして格納される。集中制御ユニット１５が、このメモリ２８から必要なマイクロプログラムを選択して、基本演算ブロックＦＢ１−ＦＢｎのマイクロプログラム格納メモリ２３に格納することにより、これらの基本演算ブロックＦＢ１−ＦＢｎの処理内容の変更に柔軟に対応することができる。
【００３１】
ヒューズ回路２４は、基本演算ブロックＦＢ１−ＦＢｎそれぞれにおいて、不良発生時、冗長置換を用いて不良救済を行なうために用いられる。
【００３２】
図２は、図１に示す基本演算ブロックＦＢｉ（ＦＢ１−ＦＢｎ）の要部の構成を概略的に示す図である。図２において、基本演算ブロックＦＢｉにおいて、主演算回路２０は、メモリセルが行列状に配列されるメモリセルマット３０と、このメモリセルマット３０に格納されるデータに対して演算処理を行なう演算処理ユニット群（ＡＬＵ処理エレメント群）３２を含む。メモリセルマット３０が、複数のデータエントリＤＥＲＹに分割される。このデータエントリＤＥＲＹは、番号０からＭＡＸ＿ＥＮＴＲＹが付されたデータエントリを含む。各データエントリは、ビット位置として、０からＭＡＸ＿ＢＩＴを有し、そのビット幅は、ＭＡＸ＿ＢＩＴ＋１である。
【００３３】
演算処理ユニット群（ＡＬＵ群）３２においては、各データエントリＤＥＲＹに対応して演算処理ユニット（以下、適宜ＡＬＵ処理エレメントと称す）３４が配置される。この演算処理ユニット群３２に対して、ＡＬＵ間相互接続用スイッチ回路４４が設けられる。
【００３４】
以下の説明においては、エントリ（ＥＲＹ）は、データエントリＤＥＲＹと、このデータエントリに対応して設けられるＡＬＵ処理エレメントとを含むものとして規定する。
【００３５】
この主演算回路２０の動作は、プログラム格納メモリ２３に格納されるプログラム（マイクロプログラム）により設定される。コントローラ２１は、このプログラム格納メモリ２３に格納されるプログラムに従って処理を実行する。
【００３６】
レジスタ群２２においては、ポインタレジスタｒ０−ｒ３が設けられる。演算対象のデータのメモリセルマット３０内のアドレスが、これらのポインタレジスタｒ０−ｒ３に格納される。コントローラ２１は、これらのポインタレジスタｒ０−ｒ３に格納されるポインタに従って、主演算回路２０におけるエントリ（データエントリ）またはデータエントリ内の位置を指定するアドレスを生成して、メモリセルマット３０と演算処理ユニット群３２との間のデータの転送（ロード／ストア）を制御する。
【００３７】
データ処理ユニット群３２においては、ＡＬＵ処理エレメントの演算内容が、動作モードに応じて、ＳＩＭＤ型演算時においては、全エントリ共通にまた、ＭＩＭＤ型演算時には各エントリ単位で決定される。また、ＡＬＵ間相互接続スイッチ回路４４も、各エントリに対応して配置されるＡＬＵ間データ転送回路を含む。エントリ間でのデータ転送時、この転送先は、演算モードに応じて、ＳＩＭＤ型演算時には各エントリ共通に、また、ＭＩＭＤ型演算時には、各エントリ個々に設定することが可能である。
【００３８】
ＳＩＭＤ型演算を実行し、エントリにおいて同一に演算を実行する場合には、コントローラ２１の制御により、このＡＬＵ群３２の演算内容およびＡＬＵ間相互接続用スイッチ回路４４の接続経路が共通に設定される。この接続経路は、図２において破線で示すように、コントローラ２１が、プログラム格納メモリ２３に格納される命令に従って、経路設定の制御を選択的に実行する（ＭＩＭＤ型演算時には、各エントリにおいて演算内容および転送先が、データエントリの記憶データに従って設定される。ＳＩＭＤ演算時には、コントローラ２１により演算内容および転送先がエントリ共通に設定される）。
【００３９】
図３は、図２に示す主演算回路２０の構成をより具体的に示す図である。図３において、メモリセルマット３０が２つのメモリマット３０Ａおよび３０Ｂに分割される。これらのメモリマット３０Ａおよび３０Ｂにおいて、メモリセルＭＣが行列状に配列される。メモリセルＭＣは、図３においては、書込ポートと読出ポートとが別々に設けられるデュアルポートメモリセルの構成を有する。しかしながら、このメモリセルＭＣは、シングルポートメモリセルであってもよい。メモリセルＭＣは、ＳＲＡＭセル（スタティック・ランダム・アクセス・メモリ）である。
【００４０】
これらのメモリマット３０Ａおよび３０Ｂ各々において、行方向に整列して配置されるメモリセルＭＣに対応して、書込ワード線ＷＷＬおよび読出ワード線ＲＷＬが設けられる。また、列方向に整列して配置されるメモリセルＭＣに対応して、書込ビット線対ＷＢＬＰおよび読出ビット線対ＲＢＬＰがそれぞれ設けられる。
【００４１】
これらのメモリマット３０Ａおよび３０Ｂは、各々、データエントリＤＥＲＹ０−ＤＥＲＹ（ｍ−１）のｍ個のデータエントリを各々有する。各書込ビット線対ＷＢＬＰおよび読出ビット線対ＲＢＬＰの組に対応して、データエントリが設けられる。
【００４２】
書込ワード線ＷＷＬおよび読出ワード線ＲＷＬにより、データエントリＤＥＲＹ０−ＤＥＲＹ（ｍ−１）の同一ビット位置のメモリセルが並行して選択される。
【００４３】
メモリマット３０Ａおよび３０Ｂの間に、演算処理ユニット群３２が設けられる。この演算処理ユニット群３２に対し、図３においては明確には示していないが、ＡＬＵ間相互接続用スイッチ回路（４４）が設けられる。
【００４４】
演算処理ユニット群３２とメモリマット３０Ａの間に、センスアンプ群４０Ａおよびライトドライバ群４２Ａが配置され、演算処理ユニット群３２とメモリマット３０Ｂの間に、センスアンプ群４０Ａおよびライトドライバ群４２Ｂが配置される。
【００４５】
センスアンプ群４０Ａは、メモリマット３０Ａの読出ビット線対ＲＢＬＰ（ＲＢＬＰ０−ＲＢＬＰ（ｍ−１））それぞれに対応して配置されるセンスアンプＳＡを含む。ライトドライバ群４２Ａは、メモリマット３０Ａの書込ビット線対ＷＢＬＰ（ＷＢＬＰ０−ＷＢＬＰ（ｍ−１））それぞれ対応して配置されるライトドライバＷＢを含む。
【００４６】
センスアンプ群３０Ｂも、同様、メモリマット３０Ｂの読出ビット線対ＲＢＬＰ（ＲＢＬＰ０−ＲＢＬＰ（ｍ−１））それぞれに対応して設けられるセンスアンプＳＡを含む。ライトドライバ群４２Ｂは、メモリマット３０Ａの書込ビット線対ＷＢＬＰ（ＷＢＬＰ０−ＷＢＬＰ（ｍ−１））それぞれに対応して配置されるライトドライバＷＢを含む。なお、シングルポートメモリセルが用いられる場合には、書込ビット線対ＷＢＬＰおよび読出ビット線対ＲＢＬＰは、共通のビット線対ＢＬＰで構成され、このビット線対ＢＬＰに、センスアンプおよびライトドライバが共通に結合される。
【００４７】
メモリマット３０Ａに対しては、読出ワード線ＲＷＬを選択するためのリード用ロウデコーダ３６ｒＡおよび書込ワード線ＷＷＬを選択するライト用ロウデコーダ３６ｗＡが設けられる。メモリマット３０Ｂに対しても、同様、読出メモリセルＲＷＬを選択するためのリード用ロウデコーダ３６ｒＢおよび書込ワード線ＷＷＬを選択するライト用ロウデコーダ３６ｗＢが設けられる。
【００４８】
これらのセンスアンプ群４０Ａおよびライトドライバ群４２Ａとライトドライバ群４２Ｂおよびセンスアンプ群４０Ｂに対して、内部データバス（図１に示すバス１２）とデータの転送を行なう入出力回路４９が設けられる。
【００４９】
この入出力回路４９は、メモリマット３０Ａおよび３０Ｂそれぞれに転送されるデータを並列に受けて転送する。メモリマット３０Ａおよび３０Ｂそれぞれに格納されるデータは、各メモリマットごとに、ビット位置の並び替えが行なわれてデータが格納されてもよく、また、メモリマット３０Ａおよび３０Ｂそれぞれに、データ配列変換用のレジスタ回路が設けられ、ワード線単位でのデータの書込および読出が、このレジスタ回路とメモリマットの間で行なわれてもよい。
【００５０】
入出力回路４９の転送データのビット幅が、エントリ（データエントリ）の数よりも小さい場合には、データエントリを選択するためのエントリ選択回路（列選択回路）がセンスアンプ群およびライトドライバ群に対して設けられるが、図３においては明確には示していない。入出力回路４９の転送データビット幅に応じて、適切な数のデータエントリが並行して選択される構成が用いられれば良い。入出力回路４９が、ビット幅変換機能を有し、入出力回路４９とデータエントリＤＥＲＹ０−ＤＥＲＹ（ｍ−１）との間で並行してデータ転送を行ない、また、入出力回路４９と内部データバス（図１のバス１２）との間で内部データバスのビット幅単位でデータ転送を行なってもよい。
【００５１】
この図３に示す構成においては、リード用ロウデコーダ３６ｒＡおよび３６ｒＢが、同一の構成を有し、同一のアドレスにしたがって、同一のビット位置の読出ワード線を選択状態へ駆動する。演算処理結果が、メモリマット３０Ａに格納される場合には、ライト用ロウデコーダ３６ｗＡが活性化され、対応の書込ワード線が選択状態へ駆動される。この場合、メモリマット３０Ｂに対して設けられるライト用ロウデコーダ３６ｗＢが非活性状態に維持される。
【００５２】
この図３に示す主演算回路の構成の場合、メモリマット３０Ａおよび３０Ｂと２つのメモリマットを準備し、これらのメモリマット３０Ａおよび３０Ｂの間に、ＡＬＵ群３２を配置している。したがって、メモリマット３０Ａおよび３０Ｂ各々に演算対象のデータの組をそれぞれ格納することにより、各マシンサイクルにおいて、演算、データの書込およびデータの読出を行なうことができ、高速演算処理が実現される。
【００５３】
なお、シングルポートメモリセルが用いられる場合、ライト用ロウデコーダおよびリード用ロウデコーダは、共通のロウデコーダで実現される。この構成の場合には、データのロードおよびストアが異なるマシンサイクルで実行される。
【００５４】
この図３に示す主演算回路２０においてＳＩＭＤ型演算が実行される場合には、各エントリにおいて同じ演算が実行される。このＳＩＭＤ演算は、以下の様に実行される。
【００５５】
（ｉ）演算対象のデータＤＡおよびＤＢの同一ビット位置のデータビットＤＡ［ｉ］およびＤＢ［ｉ］をメモリマット３０Ａおよび３０Ｂから読出して対応のエントリのＡＬＵ処理エレメントに転送する（ロードする）。
【００５６】
（ｉｉ）ＡＬＵ処理エレメントにおいて、これらのデータビットＤＡ［ｉ］およびＤＢ［ｉ］に対して指定された演算を実行する。
【００５７】
（ｉｉｉ）演算結果データビットＣ［ｉ］を指定されたエントリのビット位置に書き込む（ストアする）。この書込動作と並行して、次のビット位置のデータＤＡ［ｉ＋１］およびＤＢ［ｉ＋１］をＡＬＵ処理エレメントにロードする。
【００５８】
（ｉｖ）上述の操作（ｉ）から（ｉｉｉ）を演算対象のデータのビットがすべて演算されるまで繰返す。
【００５９】
なお、ＭＩＭＤ型演算の実行シーケンスについては、後に詳細に説明する。また、２ビット単位で演算が実行される場合もあり（ＳＩＭＤ型演算およびＭＩＭＤ型演算いずれにおいても）、その場合には、２つのデータエントリＤＥＲＹが、１つのエントリＥＲＹを構成する。
【００６０】
図４は、ＡＬＵ群３２に含まれる単位要素のＡＬＵ処理エレメント３４の構成を概略的に示す図である。ＡＬＵ処理エレメント３４においては、１ビット単位および２ビット単位での演算操作が可能である。メモリマット３０Ａおよび３０Ｂそれぞれにおいて、データエントリＤＥＲＹＡおよびＤＥＲＹＢは、各々、偶数アドレスのデータビットＡ［２ｉ］を格納する偶数データエントリＤＥＲＹｅと、奇数アドレスのデータビットＡ［２ｉ＋１］を格納する奇数データエントリＤＥＲＹｏとで構成される。偶数データエントリＤＥＲＹｅおよび奇数データエントリＤＥＲＹｏの同じアドレスのデータビットに対し並列に演算処理を行ない、高速に、処理を実行する。
【００６１】
データエントリＤＥＲＹＡの、奇数データエントリＤＥＲＹｏおよび偶数データエントリＤＥＲＹｅは、それぞれ内部データ線６５ａおよび６６ａに結合される。データエントリＤＥＲＹＢの奇数データエントリＤＥＲＹＯｏおよび偶数データエントリＤＥＲＹｅは、それぞれ、内部データ線６５ｂおよび６６ｂに結合される。
【００６２】
ＡＬＵ処理エレメント３４は、演算処理を行なうための演算回路として、縦続接続される全加算器５０および５１を含む。このＡＬＵ処理エレメント３４における処理データおよび演算内容を設定するために、Ｘレジスタ５２、Ｃレジスタ５３、Ｆレジスタ５４、Ｖレジスタ５５およびＮレジスタ５６が設けられる。Ｘレジスタ５２は、演算データを格納し、また他のＡＬＵ処理エレメントに対するデータ転送を行なうために用いられる。Ｃレジスタ５３は、加算演算時のキャリーを格納する。Ｆレジスタ５４は、その格納値に従って、演算ビットの反転を選択的に行ない、減算処理を実現する。
【００６３】
Ｖレジスタ５５は、このＡＬＵ処理エレメント３４における演算操作（データ転送を含む）に対してマスクをかけるマスクビットＶを格納する。すなわち、マスクビットＶが“１”に設定されるときに、ＡＬＵ処理エレメント３４は、指定された演算操作を実行し、マスクビットＶが“０”に設定されると、演算操作は禁止される。これにより、ＡＬＵ処理エレメント単位で、演算操作を選択的に実行する。
【００６４】
ＡＬＵ処理エレメント３４は、さらに、２ビットデータを並列に格納するためのＸＨレジスタ５７およびＸＬレジスタ５８と、レジスタ５２、５７および５８からのデータの組の一方の２ビットをＤレジスタ５９の格納値に従って選択するセレクタ（ＳＥＬ）６０と、Ｆレジスタ５４の格納ビットに従ってセレクタ６０が選択した２ビットに対する反転／非反転操作を行なう選択反転回路６１と、レジスタ５５および５６の格納データに従って全加算器５０および５１のサム出力Ｓを選択的に出力するゲート６２および６３を含む。
【００６５】
選択反転回路６１の２ビット出力は、全加算器５０および５１のＡ入力へそれぞれ与えられる。Ｘレジスタ５２は、スイッチ回路ＳＷａにより、内部データ線６５ａおよび６５ｂのいずれかに接続され、また、スイッチ回路ＳＷｂにより、内部データ線６６ａおよび６６ｂのいずれかに接続される。このスイッチ回路ＳＷａおよびＳＷｂにより、１ビット演算を行なう場合、メモリマット３０Ａおよび３０Ｂの一方のデータをＸレジスタに格納し、またデータ転送時、転送データをＸレジスタに格納する。
【００６６】
ＸＨレジスタ５７は、スイッチ回路ＳＷｃを介して、内部データ線６５ａおよび６５ｂの一方に接続可能であり、また、スイッチ回路ＳＷｍを介して内部データ線６６ａおよび６６ｂの一方に接続可能である。ＸＬレジスタ５８が、スイッチ回路ＳＷｄにより、内部データ線６６ａおよび６６ｂのいずれかに接続可能である。
【００６７】
全加算器５０のＢ入力は、スイッチ回路ＳＷｅにより、内部データ線６５ａおよび６５ｂのいずれかに接続される。ゲート６２は、スイッチ回路ＳＷｆにより、内部データ線６５ａおよび６５ｂのいずれかに接続される。全加算回路５１のＢ入力は、スイッチ回路ＳＷｇおよびスイッチ回路ＳＷｈにより、内部データ線６５ａ、６５ｂ、６６ａおよび６６ｂのいずれかに接続可能である。
【００６８】
ゲート６３は、スイッチ回路ＳＷｊにより、内部データ線６５ａおよび６５ｂのいずれかに接続可能であり、また、スイッチ回路ＳＷｋにより、内部データ線６６ａおよび６６ｂのいずれかに接続可能である。
【００６９】
これらのスイッチ回路ＳＷａ−ＳＷｈ、ＳＷｊ、ＳＷｋおよびＳＷｍにより、２ビット並列除算処理を行なう場合の１ビット単位のビットシリアル処理を実現し、また、データ転送時の２ビット単位でのデータ転送および１ビット単位でのデータ転送を実現する。
【００７０】
ＡＬＵ処理エレメント３４が、１ビット演算、すなわち１ビットシリアル態様で演算を行なう場合には、全加算器５１のキャリー入力Ｃｉｎは、スイッチ６７で、Ｃレジスタ５３に結合される。ゲート６２および６３は、Ｖレジスタ５５およびＮレジスタ５６の格納値がともに“１”のときに、指定された演算処理を実行し、それ以外においては、ゲート６２および６３は、出力ハイインピーダンス状態となる。
【００７１】
Ｃレジスタ５３の格納値は、全加算器５０のキャリー入力Ｃｉｎに、スイッチ回路６７を介して接続される。スイッチ回路６７は、１ビット単位での演算処理の実行時には、全加算器５０のキャリー出力Ｃｏを切離して、全加算器５１のキャリー入力Ｃｉｎを、Ｃレジスタ５３に接続する（このときには、全加算器５１において加算演算が実行される）。
【００７２】
この図４に示すＡＬＵ処理エレメント３４においては、Ｘレジスタ５２およびＸＨレジスタ５７またはＸＨレジスタ５７およびＸＬレジスタ５８を用いて２ビット単位でのデータ転送を、別のエントリと対応のエントリとの間で行なうことができる。
【００７３】
このデータ転送を制御するために、ＡＬＵ間相互接続用スイッチ回路４４において、エントリに対応して、移動データレジスタ（リコンフィギャラブル・エントリ・コミュニケーション・レジスタ；ＲＥＣＭレジスタ）７０と、この移動データレジスタ７０に格納されるデータビットＥ０−Ｅ３に従って、データ転送経路を設定するＡＬＵ間通信回路（リコンフィギャラブル・エントリ・コミュニケータ：ＲＥＣＭ）７１が設けられる。
【００７４】
このＡＬＵ処理エレメント３４においては、また、エントリ単位で、個々に、その演算内容を設定するために、ＭＩＭＤ命令レジスタ７２と、このＭＩＭＤ命令レジスタに格納されるビット値Ｍ０およびＭ１をデコードして、全加算器５０の演算内容を設定して、組合せ論理を実現する制御信号を生成するＭＩＭＤ用命令デコーダ７４が設けられる。ＭＩＭＤ命令レジスタ７２のビットＭ０およびＭ１により、各エントリごとに、異なる演算操作を実現することができ、ＭＩＭＤ（マルチプル・インストラクション・ストリーム−マルチプル・データ・ストリーム）型演算を実現する。このＡＬＵ処理エレメント３４におけるＭＩＭＤ演算およびデータ通信を説明する前に、ＳＩＭＤ演算時の予め準備される命令群について説明する。
【００７５】
このメモリマットのアドレスを指定するポインタレジスタとして、ポインタレジスタｐ０−ｐ３が用いられる。また、別に、図２に示すように、汎用レジスタ内のポインタレジスタｒ０−ｒ３も同様、利用される。ポインタレジスタｐ０−ｐ３は、図２に示すレジスタ群２２に含まれる。
【００７６】
図５は、ポインタレジスタｐ０−ｐ３の操作を行なうポインタレジスタ命令を一連にして示す図である。
【００７７】
命令“ｐｔｒ．ｓｅｔ  ｎ，ｐｘ”は、任意の値ｎをポインタレジスタｐｘにセットする命令である。この任意の値ｎは、１つのデータエントリのビット幅（０−ＭＡＸ＿ＢＩＴ）の範囲で任意の値を取ることができる。ｘは、０から３のいずれかである。
【００７８】
命令“ｐｔｒ．ｃｐｙ  ｐｘ，ｐｙ”は、ポインタレジスタｐｘの内容を、ポインタレジスタｐｙに転送して格納するコピー命令である。
【００７９】
命令“ｐｔｒ．ｉｎｃ  ｐｘ”は、ポインタレジスタｐｘのポインタを１増分する命令である。
【００８０】
命令“ｐｔｒ．ｉｎｃ２  ｐｘ”は、ポインタレジスタｐｘのポインタを２増分する命令である。
【００８１】
命令“ｐｔｒ．ｄｅｃ  ｐｘ”は、ポインタレジスタｐｘのポインタを１減分する命令である。
【００８２】
命令“ｐｔｒ．ｄｅｃ２  ｐｘ”は、ポインタレジスタｐｘのポインタを２減分する命令である。
【００８３】
命令“ｐｔｒ．ｓｆｔ  ｐｘ”は、ポインタレジスタｐｘのポインタを、１ビット左シフトする命令である。
【００８４】
命令“ｐｔｒ．ｉｎｃ２  ｐｘ”および命令“ｐｔｒ．ｄｅｃ２  ｐｘ”を利用することにより、２ビット並列に処理を実行することができる（奇数アドレスおよび偶数アドレスを同時に更新する）。この２ビット動作時においては、ポインタが２ビット単位で増減されても、メモリマットにおいては、選択ワード線の位置は、１ロウアドレスずつ変化する。
【００８５】
図６は、１ビット動作時のＡＬＵ処理エレメントに対するロード・ストア命令を一覧にして示す図である。
【００８６】
図６において命令“ｍｅｍ．ｌｄ．♯Ｒ＠ｐｘ”は、ポインタレジスタｐｘのポインタが示す位置Ａｊ［ｐｘ］のデータビットを、レジスタ♯Ｒに格納する（ロードする）命令である。レジスタ＃Ｒは、Ｘレジスタ、Ｎレジスタ、Ｖレジスタ、Ｆレジスタ、Ｄレジスタ、ＸＬレジスタ、ＸＨレジスタおよびＣレジスタのいずれかである。なお、１ビットＡＬＵ演算時においてはＸレジスタが利用され、ＸＬレジスタおよびＸＨレジスタは用いられない。
【００８７】
命令“ｍｅｍ．ｓｔ．♯Ｒ＠ｐｘ”は、レジスタ♯Ｒの格納値を、ポインタレジスタｐｘの指定するメモリセル位置Ａｊ［ｐｘ］へ書込む（ストアする）命令である。
【００８８】
このストア命令は、マスクレジスタ（Ｖレジスタ５５）がクリアされているときには実行されない。
【００８９】
ストア命令においても、レジスタ♯Ｒは、Ｘレジスタ、Ｎレジスタ、Ｖレジスタ、Ｆレジスタ、Ｄレジスタ、ＸＬレジスタ、ＸＨレジスタ、およびＣレジスタのいずれかである。
【００９０】
命令“ｍｅｍ．ｓｗｐ．Ｘ＠ｐｘ”は、Ｘレジスタ５２の格納値とポインタレジスタｐｘの指定するメモリセル位置Ａｊ［ｐｘ］のデータとを交換する命令である。このスワップ命令は、マスクレジスタ（Ｖレジスタ５５）およびＮレジスタ５６にともに“１”がセットされているときに実行される。Ｘレジスタ５２のクリア／セットを、メモリセルの格納データで実行することにより、回路構成を簡略化する。
【００９１】
図７は、２ビット動作時のＡＬＵ処理エレメントに対するロード／ストア命令を一覧にして示す図である。
【００９２】
図７において、命令“ｍｅｍ．２．ｌｄ．Ｘ＠ｐｘ”は、ポインタレジスタｐｘのポインタが指定するメモリセル位置Ａｊ［ｐｘ］およびＡｊ［ｐｘ＋１］のメモリセルのデータを、それぞれ、ＸＬレジスタ５８およびＸＨレジスタ５７に格納する命令である。すなわち、連続アドレス位置のデータの下位ビットがＸＬレジスタ５８に格納され、上位ビットがＸＨレジスタ５７に格納される。
【００９３】
命令“ｍｅｍ．２．ｓｔ．Ｘ＠ｐｘ”は、ポインタレジスタｐｘのポインタが指定するアドレスの連続アドレスＡｊ［ｐｘ］およびＡｊ［ｐｘ＋１］のメモリセルへ、それぞれＸＬレジスタおよびＸＨレジスタの格納値を格納する命令である。ただし、この動作は、マスクレジスタ（Ｖレジスタ）５５がクリア状態の時には実行されない。
【００９４】
命令“ｍｅｍ．２．ｓｗｐ．Ｘ＠ｐｘ”は、ポインタレジスタｐｘのポインタが指定するアドレスおよび上位アドレスＡｊ［ｐｘ］およびＡｊ［ｐｘ＋１］のデータが、それぞれ、ＸＬレジスタ５８およびＸＨレジスタ５７の格納値と交換される命令である。ただし、このスワップ命令は、Ｖレジスタ５５およびＮレジスタ５６がともにクリア状態のときには実行されない。
【００９５】
この２ビット動作時においては、ポインタレジスタｐｘのポインタを用いて連続アドレスＡｊ［ｐｘ］およびＡｊ［ｐｘ＋１］を同時にアクセスすることにより、２ビット並列処理を実行する。この２ビット動作を利用することにより、移動データレジスタ７０およびＭＩＭＤ命令レジスタ７２へのデータの格納をも実行することができる。
【００９６】
なお、この２ビット演算命令においては、ＸＬレジスタおよびＸＨレジスタが利用される。しかしながら、ＳＩＭＤ演算時において、ＸＬレジスタおよびＸＨレジスタを利用し、ＭＩＭＤ演算命令のときにＸレジスタおよびＸＨレジスタが利用されてもよい。また、ＳＭＩＤ型演算およびＭＩＭＤ型演算両者においてＸレジスタおよびＸＨレジスタが利用されても良い。
【００９７】
図８は、１ビット動作時のエントリ間データ移動（move：ｖｃｏｐｙ）を行なう命令を一覧にして示す図である。このエントリ間データ移動時には、ポインタレジスタｒｎが用いられる。エントリ間データ移動用ポインタレジスタｒｎの候補レジスタとしては、４つのポインタレジスタｒ０−ｒ３が用いられる。
【００９８】
命令“ｅｃｍ．ｍｖ．ｎ  ♯ｎ”は、定数ｎ離れたエントリｊ＋ｎのＸレジスタの格納値をエントリｊのＸレジスタに転送する命令である。
【００９９】
命令“ｅｃｍ．ｍｖ．ｒ  ｒｎ”は、レジスタｒｎの格納値離れたエントリｊ＋ｒｎのＸレジスタ値を、エントリｊのＸレジスタに転送する操作を示す命令である。
【０１００】
命令“ｅｃｍ．ｓｗｐ”は、隣接エントリｊ＋１およびｊのＸレジスタＸｊおよびＸｊ＋１の格納値を交換する操作を指令する命令である。
【０１０１】
この図８に示すエントリ間データ移動は、各エントリ対において共通に実行される。
図９は、２ビット動作時のＡＬＵにおけるエントリ間データ移動（move）の操作を指令する命令を一覧にして示す図である。この２ビット操作時においては、命令記述子“ｅｃｍ２”が、１ビット操作時の命令記述子“ｅｃｍ”に代えて用いられる。この命令記述子“ｅｃｍ２”が指定されると、２ビット単位での演算処理が指定され、ＸＨレジスタおよびＸＬレジスタ間（またはＸＬレジスタおよびＸＨレジスタ間）での並列データ転送が行なわれる。各レジスタ間の転送内容の指定には、先の１ビット動作時と同じ命令記述子“ｍｖ．ｎ♯ｎ”、“ｍｖ．ｒ  ｒｎ”および“ｓｗｐ”が用いられる。
【０１０２】
したがって、ＳＩＭＤ型演算実行時において、転送時データレジスタＸＨレジスタおよびＸＬレジスタが利用されても良く、ＸレジスタおよびＸＨレジスタが利用されてもよい。この２ビット単位の移動操作の場合においても、各エントリのデータ転送の移動量は同じである。
【０１０３】
また、算術演算命令として、加算命令“ａｌｕ．ａｄｃ＠ｐｘ”、減算命令“ａｌｕ．ｓｂｃ＠ｐｘ”、反転命令“ａｌｕ．ｉｎｂ＠ｐｘ”、および関数値によるレジスタ値設定命令“ａｌｕ．ｌｅｔ  ｆ”が準備される。
【０１０４】
加算命令“ａｌｕ．ａｄｃ＠ｐｘ”は、ポインタレジスタｐｘのポインタにより指定されるメモリアドレスのデータとＸレジスタの値を加算し、結果をメモリマットに返す。メモリセルアドレスＡｊに、加算後の値が格納され、Ｃレジスタにキャリーが格納される。
【０１０５】
減算命令“ａｌｕ．ｓｂｃ＠ｐｘ”は、ポインタレジスタｐｘに指定されるメモリアドレスのデータとＸレジスタの値を減算し、結果がメモリマットに返される。メモリセルＡｊに減算後の値が格納され、Ｃレジスタにキャリーが格納される。
【０１０６】
反転命令“ａｌｕ．ｉｎｖ＠ｐｘ”は、ポインタレジスタｐｘのポインタにより指定されるメモリアドレスのデータを反転して、メモリマットに返却する（元の位置に）。
【０１０７】
関数値命令“ａｌｕ．ｌｅｔ  ｆ”は、関数ｆ＝（Ｆ・８＋Ｄ・４＋Ｎ・２＋Ｃ）が表わす関数値に従って、各Ｆレジスタ、Ｄレジスタ、ＮレジスタおよびＣレジスタの値を、対応のビット値で設定する。
【０１０８】
また、２ビット演算命令として、ブース命令“ａｌｕ２．ｂｏｏｔｈ”および実行命令“ａｌｕ２．ｅｘｅ＠ｐｘ”が設けられる。
【０１０９】
ブース命令“ａｌｕ２．ｂｏｏｔｈ”は、二次のブースアルゴリズムに従って乗算を行なう命令であり、ＸＨレジスタ、ＸＬレジスタおよびＦレジスタの値から、Ｎレジスタ、ＤレジスタおよびＦレジスタの次の演算用の値を決定する。また、実行命令“ａｌｕ２．ｅｘｅ＠ｐｘ”は、ＤレジスタおよびＦレジスタの値に従って、条件分岐する演算命令である。
【０１１０】
これらの命令を利用することにより、各エントリにおいて、同じ演算命令に従って、演算またはデータ転送を実行することができる。この命令の実行制御は、図１に示すコントローラ２１により制御される。
【０１１１】
次に、先の図４に示すデータ移動レジスタ（ＲＥＣＭレジスタ）７０およびＭＩＭＤ命令レジスタ７２を用いたＭＩＭＤ型演算操作について説明する。
【０１１２】
このＭＩＭＤ形式の論理演算実行時においては、命令“ａｌｕ．ｏｐ．ｍｉｍｄ”が用いられる。このＭＩＭＤ形式演算においては、論理演算命令のみが実行可能な命令として準備される。すなわち、ＡＮＤ命令、ＯＲ命令、ＸＯＲ命令、およびＮＯＴ命令の４種類の命令が準備される。これらの４種類の命令からの実行命令の選択に最低限必要なビット数は２ビットである。したがって、このＭＩＭＤ命令レジスタ７２に、２ビットデータＭ０およびＭ１が格納される。このＭＩＭＤ型演算の内容が追加されれば、実行可能なＭＩＭＤ演算の数に応じて、命令ビット数が設定される。
【０１１３】
図１０は、ＭＩＭＤ型演算、すなわちＭＩＭＤ形式の命令実行時のＡＬＵ処理エレメントの内部接続構成を概略的に示す図である。以下、図１０を参照して、ＭＩＭＤ形式命令実行時のＡＬＵ処理エレメントの内部構成について説明する。
【０１１４】
ＭＩＭＤ形式命令の実行時、２ビット演算操作用レジスタとして、Ｘレジスタ５２およびＸＨレジスタ５７が用いられる。ＸＬレジスタ５８は、このＭＩＭＤ演算実行時には、用いられない。したがって、スイッチ回路ＳＷａは、内部データ線６５ａをＸレジスタ５２に接続し、スイッチ回路ＳＷｍは、内部データ線６６ａを、ＸＨレジスタ５７に結合する。スイッチ回路ＳＷｅが、内部データ線６５ｂを、加算器５０のＢ入力に結合し、スイッチ回路ＳＷｆが、ゲート６２の出力を内部データ線６５ｂに結合する。スイッチ回路ＳＷｈが、内部データ線６６ｂを、加算器５１のＢ入力に接続し、スイッチ回路ＳＷｋが、ゲート６３の出力を内部データ線６６ｂに接続する。
【０１１５】
ＭＩＭＤ用命令デコーダ７４により、加算器５０は、前述のように、ＡＮＤ命令、ＯＲ命令、ＸＯＲ命令およびＮＯＴ命令のいずれかを実行する。この論理演算結果が、メモリマット３０ＢのデータエントリＤＥＲＹＢに格納される。１つの論理演算のみが行なわれるのではなく、加算器５０および５１において並列に、同じ論理演算処理が行なわれる場合、ＭＩＭＤ用命令デコーダ７４の出力する制御信号が、加算器５０および５１に共通に与えられる。ここでは、加算器５０を用いて、各エントリ個々に論理演算を実行する。
【０１１６】
また、ＡＬＵ間通信回路（ＲＥＣＭ）７１は、移動データレジスタ（ＲＥＣＭレジスタ）７０に格納されるビット値Ｅ０−Ｅ３に従ってＸレジスタ５２およびＸＨレジスタ５７を、内部データ線に結合し、このデータビットＥ０−Ｅ３により指定される転送先とデータの転送を行なう。
【０１１７】
この図１０に示すＡＬＵ処理エレメント３４においては、ＭＩＭＤ用命令デコーダ７４の制御信号に従って、加算器５０の内部演算内容が設定されて、各ＡＬＵ処理エレメントごとに、指定された論理演算が実行され、また、ＡＬＵ間通信回路７１により各エントリ個々にデータ移動量および転送方向を設定して、データ移動を実行することができる。
【０１１８】
図１１は、ＭＩＭＤ命令用レジスタ７２の格納データビット（ＭＩＭＤ命令ビット）Ｍ０およびＭ１と加算器５０において実行される演算の対応を一覧にして示す図である。図１１において、ビットＭ０およびＭ１がともに“０”のとき、否定演算ＮＯＴが指定される。ビットＭ０およびＭ１が、それぞれ“０”および“１”のとき、論理和演算ＯＲが指定される。ビットＭ０およびＭ１が、それぞれ、“１”および“０”のとき、排他的論理和演算ＸＯＲが指定される。ビットＭ０およびＭ１がともに“１”のとき、論理積演算ＡＮＤが指定される。
【０１１９】
したがって、本実施の形態においては、４種類の論理演算が準備されており、２ビットのＭＩＭＤ命令Ｍ０およびＭ１により、演算内容が指定される。この指定される演算内容が多くなれば、それに応じて、ＭＩＭＤ命令用レジスタ７２の格納データビットの数も大きくされる。
【０１２０】
図１２は、このＭＩＭＤ演算命令と、そのときに実行される内容とを一覧にして示す図である。
【０１２１】
図１２において、Ｍ０ｊおよびＭ１ｊは、ＡＬＵ処理エレメントＡＬＵｊにおけるＭＩＭＤ命令ビットを示し、Ａｊは、処理エレメントＡＬＵｊにおける演算結果を示す。ここで、ｊは、エントリ番号であり、範囲は、エントリ番号の０からＭＡＸ＿ＥＮＴＲＹである。
【０１２２】
この演算命令は、マスクビットＶｊが“１”のときに、実行される。“！”は、否定演算（反転）を示す。したがって、ビットＭ０ｊおよびＭ１ｊがともに“０”でありマスクビットＶｊが“１”のとき、否定演算命令“ａｌｕ．ｏｐ．ｎｏｔ”が実行される。この場合、エントリｊにおいて、ポインタｐｘが指定するビットＡｊ［ｐｘ］の反転値！Ａｊ［ｐｘ］が、演算結果データビットＡｊとして求められる。
【０１２３】
論理和演算命令“ａｌｕ．ｏｐ．ｏｒ”の場合には、ビットＭ０ｊが“０”に設定され、ビットＭ１ｊが、“１”に設定される。マスクビットＶｊは、命令実行時、“１”である。この論理和演算の場合には、ポインタｐｘが指定するデータビットＡｊ［ｐｘ］とＸレジスタに格納されたデータビットＸｊとの論理和が求められる。
【０１２４】
排他的論理和演算“ａｌｕ．ｏｐ．ｘｏｒ”のときには、ビットＭ０ｊが“１”に設定され、ビットＭ１ｊが、“０”に設定される。マスクビットＶｊは、命令実行時、“１”である。この論理和演算命令の場合には、ポインタｐｘが指定するデータビットＡｊ［ｐｘ］とＸレジスタに格納されたデータビットＸｊとの排他的論理和が求められる。
【０１２５】
論理積演算命令“ａｌｕ．ｏｐ．ａｎｄ”のときには、ビットＭ０ｊおよびＭ１ｊがともに“１”に設定される。マスクビットＶｊは、“１”である。この場合、ポインタｐｘが指定するデータビットＡｊ［ｐｘ］とＸレジスタの格納データビットＸｊとの論理積が求められる。
【０１２６】
図１３は、１つのデータエントリにおけるデータビットの格納領域を概略的に示す図である。このデータエントリＤＥＲＹは、少なくとも３つの領域ＲＧａ、ＲＧｂおよびＲＧｃに区分される。領域ＲＧａは、ポインタａｐにより、最下位アドレスビット（開始アドレスａｓ）が指定され、その領域のビット幅はｎビットである。領域ＲＧｂは、開始アドレスｂｓが、ポインタｂｐにより指定され、ビット幅は、この開始アドレスｂｓからｎビットの領域である。領域ＲＧｃは、マスクデータおよび演算ＭＩＭＤ命令データを格納する領域である。この領域ＲＧｃのビット幅は、ハードウェア（Ｈ／Ｗ）、すなわち、実行可能命令の数に依存する。このメモリマットにおいて、実際に実行すべき演算内容および演算対象のデータビット幅およびデータ数に応じて、この領域ＲＧｃのビット幅は決定される。開始アドレスは、ポインタｃｓにより設定される。
【０１２７】
また、作業データを格納するためのテンポラリ領域も用いられる。後に具体的な演算操作について説明する際に、併せてデータ領域の構成についても説明する。
【０１２８】
図１４は、各エントリにおいて演算命令を個々に実行するＭＩＭＤ型演算実行時の命令の形式を示す図である。このＭＩＭＤ演算命令は、コード“ｍｘ＿ｍｉｍｄ”で表わされる。このＭＩＭＤ演算“ｍｘ＿ｍｉｍｄ”は、図１に示すコントローラ２１により実行される。このＭＩＭＤ演算のプロトタイプは、“ｖｏｉｄ  ｍｘ＿ｍｉｍｄ（ｉｎｔａｐ，ｉｎｔｂｐ，ｉｎｔｃｐ，ｉｎｔｎ）”で表わされる。引数ａｐはディスティネーションアドレスであり、ｂｐはソースアドレスであり、ｃｐは、ＭＩＭＤ命令格納アドレスを示す。ｎはビット各領域のビット長である。すなわち、ｉｎｔａｐにより、図１３に示す領域ＲＧａの開始アドレスａｓが設定され、ｉｎｔｂｐにより、図１３に示す領域ＲＧｂの開始アドレスｂｓが指定され、ｉｎｔｃｐにより、図１３に示す領域ＲＧｃの開始アドレスｃｓが設定される。ｎは、それぞれ領域ＲＧａおよびＲＧｂの領域のビット幅である。図１４に示すプロトタイプにおいては、各領域ＲＧａおよびＲＧｂのビット幅はｎビットに設定され、領域ＲＧｃのビット幅は、実行可能命令数の底２の対数に設定される。
【０１２９】
この図１４に示すＭＩＭＤ演算実行時においては、以下の処理ステップが実行される。ステップ１：
ｍｘ＿ｍｉｍｄ命令を、コントローラにおいて実行する。ロード命令ｌｄに従ってポインタｃｐが指定するビット位置（アドレス）のＭＩＭＤ演算用命令Ｍ０，Ｍ１を、図１０に示すＭＩＭＤ命令用レジスタ７２にコピーする。これにより、エントリ単位で実行すべき演算内容ａｌｕ．ｏｐ．ｍｉｍｄが設定される。ここで、“ｍｉｍｄ”は、ｏｒ、ｘｏｒ、ａｎｄ、およびｎｏｔのいずれかである。
【０１３０】
ステップ２：
ポインタａｐが指定するビット位置（アドレス）の領域の内容とポインタｂｐが指定するビット位置（アドレス）の領域の内容とを１ビット単位で読出して、ＡＬＵ処理エレメントに転送する（ロードする）。
【０１３１】
ステップ３：
これらのロードされたデータビットに対して、ＭＩＭＤ用命令レジスタ７２の格納データにより指定された論理演算を行なう。このＭＩＭＤ演算命令は、ＡＬＵ処理エレメントにおいて、マスクビット（Ｖレジスタ５５）が１に設定されたときにのみ実行される。
【０１３２】
ステップ４：
その演算結果を、開始アドレスａｓの図１３に示す領域ＲＧａの、ポインタａｐが示すビット位置（アドレス）に格納する。
【０１３３】
ステップ５：
ステップ２から４の操作を、演算対象のデータビット全てに対して繰返し実行する。各演算においてはビットシリアルに演算は実行されるものの、複数のエントリにおいて並行して処理が実行され、ＳＩＭＤ型演算の高速演算性を利用して、並列性の低い演算を並行して実行することが可能となり、高速処理が実現される。
【０１３４】
ＭＩＭＤ演算実行時において、ポインタａｐ，ｂｐおよびｃｐは、メモリマットのエントリに共通に与えられ、各エントリにおいて、ＭＩＭＤ演算命令ａｌｕ．ｏｐ．ｍｉｍｄに従って指定される演算（論理演算）が個々にビットシリアル態様で実行される。
【０１３５】
図１５は、図１０に示す加算器５０の構成の一例を示す図である。図１５において、加算器５０は、入力ＡおよびＢに与えられるデータビットを受けるＸＯＲゲート８１と、入力ＡおよびＢのビットを受けるＡＮＤゲート８２と、入力Ａに与えられるビットを反転するインバータ８０と、キャリー入力ＣｉからのビットとＸＯＲゲート８１の出力ビットとを受けるＸＯＲゲート８３と、ＸＯＲゲート８１の出力ビットと、キャリー入力Ｃｉからのビットとを受けるＡＮＤゲート８４と、ＡＮＤゲート８２および８４の出力ビットを受けて、キャリー出力Ｃｏを生成するＯＲゲート８５を含む。サム出力Ｓが、ＸＯＲゲート８３から与えられる。
【０１３６】
この加算器５０においては、さらに、ＭＩＭＤ制御データに従って内部経路を切換えるために、スイッチ回路８７ａ−８７ｇが設けられる。スイッチ回路８７ａは、反転指示信号φｎｏｔに従って、インバータ８０の出力信号をサム出力Ｓに結合する。スイッチ回路８７ｂは、論理積指示信号φａｎｄに従って、ＡＮＤゲート８２の出力をサム出力Ｓに結合する。スイッチ回路８７ｃは、排他的論理和指示信号φｘｏｒに従って、ＸＯＲゲート８１の出力をサム出力Ｓに結合する。スイッチ回路８７ｅは、論理和指示信号φｏｒに従って、ＸＯＲゲート８１の出力をＯＲゲート８５の第１の入力に結合する。スイッチ回路８７ｆは、論理和指示信号φｏｒに従ってＯＲゲート８５の出力を、サム出力Ｓに結合する。スイッチ回路８７ｄは、論理和指示信号の反転信号／φｏｒに従って、ＡＮＤゲート８４の出力を、ＯＲゲート８５の第１の入力に選択的に結合する。
【０１３７】
スイッチ回路８７ｇは、ＭＩＭＤ演算指示信号の反転信号／φｍｉｎｄに従って、ＸＯＲゲート８３の出力をサム出力Ｓに結合する。
【０１３８】
ＭＩＭＤ指示信号／φｍｉｍｄは、ＭＩＭＤ演算が行なわれるときに非活性状態に設定され、スイッチ回路８７ｇを、出力ハイインピーダンス状態に設定する。同様、スイッチ回路８７ｄも、論理和演算実行時、論理和指示信号の反転信号／φｏｒに従って出力ハイインピーダンス状態となる。
【０１３９】
この図１５に示す加算器５０は、全加算器であり、一般的に用いられる回路構成である。インバータ８０が、否定演算を行なうために、新たに設けられるが、図１０に示す選択反転回路６１の出力を、選択するように設けられてもよい。この場合には、Ｆレジスタ（図１０参照）のデータビットを、反転演算を行なうようにそのビット値を設定する。
【０１４０】
また、これに代えて、ＸＯＲゲート８１においては、インバータが設けられており、このＸＯＲゲート８１内のインバータをＮＯＴ演算実行用のインバータとして利用しても良い。
【０１４１】
この図１５に示す加算器５０の構成において、否定演算ＮＯＴを行なう場合には、スイッチ回路８７ａが導通し、残りのスイッチ回路はすべて非導通状態となり、サム出力Ｓにインバータ８０の出力信号が伝達される。
【０１４２】
論理積演算ＡＮＤを実行する場合には、論理積指示信号φａｎｄが活性化され、スイッチ回路８７ｂが導通し、残りのスイッチ回路が非導通状態（出力ハイインピーダンス状態）となる。したがって、ＡＮＤゲート８２の出力ビットが、サム出力Ｓに、スイッチ回路８７ｂを介して伝達される。
【０１４３】
論理和演算ＯＲの実行時においては、論理和指示信号φｏｒが活性化され、スイッチ回路８７ｅおよび８７ｆが導通し、残りのスイッチ回路が出力ハイインピーダンス状態となる。したがって、ＸＯＲゲート８１およびＡＮＤゲート８２の出力ビットを受けるＯＲゲート８５の出力ビットが、サム出力Ｓに伝達される。このＯＲ演算実行時、ＸＯＲゲート８１が、入力ＡおよびＢの与えられるビット値の論理値が異なるときに、“Ｈ”（“１”）を出力する。ＡＮＤゲート８２は、入力ＡおよびＢに与えられるビットがともに“１”のときに、“１”の信号を出力する。これにより、入力ＡおよびＢに与えられるビットの少なくとも一方が論理値“１”のとき、ＯＲゲート８５から、スイッチ回路８７ｆを介してサム出力Ｓに“１”の信号が出力され、ＯＲ演算結果が求められる。
【０１４４】
この図１５に示すように、実行されるＭＩＭＤ演算に応じて、スイッチ回路８７ａ−８７ｇを、選択的に導通状態に設定することにより、指定された演算命令を、加算器５０の内部構成要素の論理ゲートを利用して実行することができる。
【０１４５】
なお、この加算器５０の構成は単なる一例であり、たとえばＦＰＧＡ（フィールドプログラムゲートアレイ）の構成と同様にして、内部の接続経路がマトリックス状に配列され、その内部配線が、演算指示信号に応じて設定される構成が用いられてもよい。
【０１４６】
また、この図１５に示す全加算器５０の構成は、単なる一例であり、この構成に限定されるものではない。利用される全加算器の構成に応じて内部の接続経路が、演算指示信号に応じて設定されれば良い。
【０１４７】
図１６は、エントリ間のデータ通信を行なうための配線領域を概略的に示す図である。図１６において、メモリマット３０ＡとＡＬＵ間相互接続用スイッチ回路４４の間に、データ通信用配線領域９０が設けられる。このデータ通信用配線領域９０は、±１ビットシフト配線が配置される領域９１と、±４ビットのシフト用配線が配置される領域９２と、±１６ビットのシフト用の配線が配置される領域９３と、±６４ビットシフト用配線が配置される領域９４と、±２５６ビットシフト用の配線が配置される領域９５を含む。
【０１４８】
±ｉビットシフト配線は、ｉビット離れたエントリ間のデータ通信を行なう。ここでは、±１、±４、±１６９、±６４、および±２５６ビットのシフト、および０ビットシフトを加えて合計１１種類のデータ通信を行なう配線が準備される。２ビット単位で、データ通信が行なわれるため、これらの配線領域９１−９５に、ＸレジスタおよびＸＨレジスタを用いてデータを転送する配線が各エントリに対応して配置される。
【０１４９】
図１７は、図１６に示す配線領域９１および９２の配線の配置の一例を示す図である。この図１７においては、一例として、エントリが１０２４個設けられ、ＡＬＵ処理エレメント０−１０２３が設けられる場合の配線の配置を一例として示す。
【０１５０】
図１７において、±１ビットシフト配線領域９１は、＋１ビットシフト配線領域９１ａと、−１ビットシフト配線領域９１ｂを含む。＋１ビットシフト配線領域９１ａにおいては、１つ番号の大きいエントリへ単方向にデータ転送を行なう配線１００ａと、最大番号のエントリ（ＡＬＵ１０２３）に対する１ビットシフトを実現する配線１００ｂを含む。この配線１００ａは、隣接エントリ（ＡＬＵ処理エレメント）間でのシフトを行なうため、配線１００ａが、整列して配置される。
【０１５１】
−１ビットシフト配線領域９１ｂにおいては、同様、隣接エントリ間を接続する配線１０１ａと、最小番号のエントリ（ＡＬＵ処理エレメント０）から最大番号のエントリ（ＡＬＵ１０２３）へのデータ転送を行なう配線１０１ｂを含む。この場合においても、配線１０１ａは、整列して配置される。
【０１５２】
したがって、これらの配線領域９１ａおよび９１ｂにおいては、２列の配線が転送データ１ビット当たり配置される。したがって、２ビットデータ転送用の配線時において、この配線１００ａ，１００ｂ、１０１ａおよび１０１ｂが、各々、２ビットデータ転送を並列に行なうように配置される。
【０１５３】
±４ビットシフト配線領域９２は、＋４ビットシフト配線領域９２ａと、−４ビットシフト配線領域９２ｂを含む。図１７においては、この＋４ビットシフト配線領域９２ａの配線の配置を示し、−４ビットシフト配線領域９２ｂは、破線ブロックで示す。
【０１５４】
この＋４ビットシフト配線領域９２ａは、それぞれ１エントリずつ位置がずれて配線される配線１０２ａを含む。これらの配線１０２ａは、４列に配列され、それぞれ４ビット離れたエントリへのデータ転送を行なう。この場合においても、番号の大きなエントリに対する＋４ビットシフトを行なうために、配線１０２ｂが設けられる。この図１７において、配線１０２ａおよび１０２ｂにおける番号は、エントリ番号を示す。この場合、＋４ビットシフト配線１０２ａが４列に配置され、また最大番号から最小番号方向への、シフトを実現する配線１０２ｂが４列に配置される。したがって、この配線領域９２ａにおいては、転送データ１ビット当たり８列の配線が配置される。
【０１５５】
この図１７に示すように、配線を、いわゆる菱形状の四辺形形状に配置することにより、配線の錯綜を回避して、効率的にシフト用配線を配置することができ、配線レイアウト面積を低減することができる。
【０１５６】
この場合、エントリ戻り用配線１００ｂ，１０１ｂおよび１０２ｂを、シフト用配線１００ａ，１０１ａ，１０２ａと、それぞれ重なり合うように、配置することにより、配線レイアウト面積をより低減することができる（多層配線構造を利用する）。
【０１５７】
図１８は、この図１６に示す±１６ビットシフト配線領域９３の配線の配置の一例を概略的に示す図である。ここで、±１６ビットシフト配線領域９３においては、＋１６ビットシフト配線領域９３ａａおよび９３ａｂと、−１６ビットシフト配線領域９３ｂａおよび９３ｂｂを含む。＋１６ビットシフト配線領域９３ａａにおいては、配線１０３ａにより、１６ビット離れたエントリと接続される。エントリ間でサイクリックにシフト動作を行なうために、エントリ戻り配線１０３ｂが設けられる。ここで、−１６ビットシフト配線領域９３ｂａにおいて配線１０４ａが設けられ、１６ビット離れたエントリ間が接続される。配線１０４ｂが、エントリ戻り配線であり、同様、サイクリックに１６ビット離れたエントリを接続する。
【０１５８】
この±１６ビットシフト配線領域９３においても、２ビットデータを転送する配線を、１エントリずつシフトさせて配置することにより、エントリ方向（垂直方向）において、配線１０３ａおよび１０４ａを、並列して配置することができ、配線レイアウト面積を低減することができる。この場合、配線領域９３ａａ、９３ａｂ、９３ｂａ、９３ｂｂにおいては、各々、１６列に、配線が配置される。
【０１５９】
図１９は、図１６に示す±６４ビットシフト配線領域９４および±２５６ビットシフト配線領域９５の配線のレイアウトを概略的に示す図である。この図１９において、±６４ビットシフト配線領域が＋６４ビットシフト用配線領域９４ａａおよび９４ａｂと、−６４ビットシフト用配線領域９４ｂａおよび９４ｂｂを含む。これらの領域９４ａａ、９４ａｂ、９４ｂａおよび９４ｂｂには、各々、６４列に配線が配置される（転送データ１ビットあたり）。この場合、シフト配線において、６４ビット離れたエントリ間をそれぞれ＋方向および−方向において接続する。
【０１６０】
±２５６ビットシフト配線領域９５も、同様、配線領域９５ａａ、９５ａｂ，９５ｂａおよび９５ｂｂに接続される。この場合には、各領域において、配線が、転送データ１ビットあたり２５６列配置され、２５６ビット離れたエントリが接続される。
【０１６１】
これらのシフト配線を用いて、各エントリに対して、±４ビット、±１６ビット、±６４ビットおよび±２５６ビットのシフト動作を行なう配線を設けることにより、各エントリ単位で、データ移動時のデータ移動量（エントリ間距離および移動方向）を設定することができる。以下の説明においては、「データ移動量」は移動距離および移動方向を含むものとする。
【０１６２】
図２０は、図４に示すＡＬＵ間通信回路（ＲＥＣＭ）７１の構成を概略的に示す図である。図２０においては、ＡＬＵ処理エレメント３４に含まれるＸレジスタ５２およびＸＨレジスタ５７を代表的に示す。これらのＸレジスタ５２およびＸＨレジスタ５７は、図１０に示すように、ＭＩＭＤ型演算時およびＭＩＭＤ型データ転送時、それぞれ内部データ線６５ａおよび６６ａに接続される。
【０１６３】
ＡＬＵ間通信回路７１は、このＸレジスタ５２およびＸＨレジスタ５７の格納値を受ける送信バッファ１２０と、移動データレジスタの格納ビットＥ０−Ｅ３に従って、送信バッファ１２０からのデータビットの転送経路を設定するマルチプレクサ１２２と、このＡＬＵ処理エレメントに対する配線群１１５を共通に結合される信号線１１６を介して送信データを受けて転送後のデータを生成する受信バッファ１２４を含む。
【０１６４】
マルチプレクサ１２２は、このエントリに対応して設けられる信号線１１０ａｕ−１１０ｅｄの１つを選択的に駆動する。信号線１１０ａｕ−１１０ｅｄは、各々２ビット信号線であり、図１７から図１９に示す±１ビットシフト配線から±２５６ビット配線を示す。この図２０に示されるように、エントリ毎にシフト配線が設けられ、それぞれ一意的にこれらのシフト配線１１０ａｕ−１１０ｅｄの接続先が設定される。例えば、＋１ビットシフト配線１１０ａｕは、番号が１大きいエントリの隣接ＡＬＵ処理エレメントの受信バッファに結合され、−１ビットシフト配線１１０ａｄは、番号が１小さい隣接エントリの受信バッファに結合される。
【０１６５】
受信バッファ１２４に対しては、対応の信号線群（±１ビットシフト線から±２５６ビット信号線）を共通に受ける。これらの信号線群１１５の信号線は、ワイヤードＯＲ接続される。
【０１６６】
図２１は、この受信バッファに対する信号線１１６の接続を概略的に示す図である。この信号線群１１５は、先の図１７から図１９に示すように、エントリ間で、データ転送方向を含めて、１対１対応で接続される。すなわち、信号線群１１５は、±１ビットシフト信号線、±４ビット信号線、±１６ビットシフト信号線、±６４ビットシフト信号線および±２５６ビットシフト信号線を含む。これらが、信号線１１６に共通にワイヤードＯＲ接続される。
【０１６７】
データ転送時、このＡＬＵ間通信回路７１においては、マルチプレクサ１２２が、この移動データレジスタの格納値Ｅ０−Ｅ３に従ってデータ転送信号線（ビットシフト線）を選択し、該選択シフト信号線を送信バッファ１２０に結合する。したがって、１つのＡＬＵ処理エレメントについては、１つのシフト信号線が選択される。このシフト信号線は一方方向の信号線であり、転送先のエントリ（ＡＬＵ処理エレメント３４）において、受信バッファ１２４に結合される信号線１１６において、信号線群１１５の１つが駆動される。したがって、これらのシフト信号線群をワイヤードＯＲ接続しても、確実に、データ転送を行なって転送先のエントリにおいて受信して転送データを生成することができる。
【０１６８】
この場合、信号線１１６に対する負荷が大きく、送信バッファ１２０を介して高速でデータ転送を行なうことができない可能性のある場合には、受信バッファに対しても、マルチプレクサ１２２と同様、受信用のマルチプレクサを設ける。この場合、受信用のマルチプレクサは、データ転送時の情報に基づいて、データ転送ソースを選択する。データ転送ソースの移動データＥ０−Ｅ３と同じデータをデータ転送デスティネーションにおいて受信バッファ選択制御データとして設定することにより、受信バッファ１２４において転送データが伝達されるシフト信号線を選択することができる。
【０１６９】
図２２は、このエントリ間データ移動の命令の記述の一例を示す図である。図２２においては、２ビット単位でデータの移動を行なうプログラマブルジグザグコピー（２ビットモード）を示す。この２ビットモードコピーコードは、“ｍｘ２＿ｃｐ＿ｚｐ”で表わされる。この２ビットモードコピーのプロトタイプは、“ｖｏｉｄ  ｍｘ２＿ｃｐ＿ｚｐ（ｉｎｔａｐ，ｉｎｔｂｐ，ｉｎｔｃｐ，ｉｎｔｎ）”で表わされる。ここで、引数ａｐは、ディスティネーションアドレスであり、引数ｂｐがソースアドレスである。引数ｃｐが、エントリ間移動距離格納アドレスであり、引数ｎは転送データ格納領域のビット長である。
【０１７０】
この２ビットコピーコードにおいては、ポインタｃｐが指すアドレスのエントリ移動距離データを、ＲＥＣＭレジスタ（移動データレジスタ）に２ビット単位でコピーする。ポインタｂｐの指す初期アドレスｂｓからｎビットの内容を、２ビット単位でＲＥＣＭレジスタのデータが指定するエントリへ転送する。転送先のエントリにおいては、ポインタａｐが示す初期アドレスａｓから始まる領域に転送データを２ビット単位でコピーする。
【０１７１】
図２３は、１ビット単位で、データ移動を行なうプログラマブルジグザグコピー（１ビットモード）の命令の記述を示す図である。この１ビットモードコピーコードは、“ｍｘ＿ｃｐ＿ｚｐ”で表わされる。この１ビットモードコピーコードのプロットタイプは、“ｖｏｉｄ  ｍｘ＿ｃｐ＿ｚｐ（ｉｎｔａｐ，ｉｎｔｂｐ，ｉｎｔｃｐ，ｉｎｔｎ）”である。１ビットモードコピーコードの引数ａｐ，ｂｐおよびｃｐは、２ビットモードコピーコードの引数の定義と同じである。１ビットモードコピーコード命令の実行時には、１ビット単位でコピー動作が実行される点を除いて、２ビットモードジグザグコピー命令実行時と同様の動作が行われる。
【０１７２】
図２４は、図２２および図２３に示すプログラマブルジグザグコピー命令実行時のデータ移動を模式的に示す図である。この図２４においては、データエントリＤＥＲＹａから、データエントリＤＥＲＹｂへデータ転送を行なう場合の動作を一例として示す。図２４に示すように、ジグザグコピーモード時、データエントリＤＥＲＹａにおいてポインタｃｐが指定する先頭アドレスｃｓから４ビット幅の領域ＲＧｃの領域に格納される移動量データＥ０−Ｅ３に従って、転送先のデータエントリＤＥＲＹｂが設定される（図２０のマルチプレクサ１２２の接続態様が設定される）。
【０１７３】
次いで、ポインタｂｐが指定するスタートアドレスｂｓから始まるｎビット幅の領域ＲＧｂのデータが、データエントリＤＥＲＹｂのポインタａｐが指定するスタートアドレスａｓから始まるｎビット幅の領域ＲＧａへ、１ビット単位（１ビットモードプログラマブルジグザグコピー命令実行時）または２ビット単位（２ビットモードプログラマブルジグザグコピー命令実行時）で転送される。データ転送経路は、それぞれ、エントリ間で１対１対応で設けられており、データの衝突を伴うことなく、各エントリ個々に、データ転送先を指定して、データ転送を行なうことができる。
【０１７４】
なお、データ送信がＸレジスタまたはＸレジスタおよびＸＨレジスタを用いて行なわれ、データ受信が受信バッファを介して行われる。この場合、受信データを一旦Ｘ／ＸＨレジスタに格納した後に、ストア命令に従ってアドレスポインタａｐが指定するビット位置に転送データが格納されても良い。また、これに代えて、ジグザグコピー動作時には、受信バッファから内部信号線を介して直接アドレスポインタａｐが指定するビット位置にデータが書き込まれても良い。
【０１７５】
送信動作と受信動作とは、同時には行われない。例えば、１マシンサイクルの前半で送信が行なわれ、後半で受信が行われても良い。また、これに代えて、異なるマシンサイクルで送信および受信が行われても良い。したがって、１つのエントリにおいて、送信および受信を行なうことができる。
【０１７６】
送信および受信の選択的活性化は、例えば、マスクビットＶにより設定することができる。送信時にロード命令実行を、受信時にストア命令実行をマスクビットＶによりマスクをかけることにより、送信および受信を選択的に実行することができる。これに代えて、受信バッファにより対応のデータエントリのビット線対を駆動することにより、全エントリにおいて並行して受信データの書込を実行することができる（書込時のアドレスポインタは、ワード線が全エントリに共通のため、全エントリに対して同一となる）。
【０１７７】
図２５は、図１０に示す移動データレジスタ（ＲＥＣＭレジスタ）７０に格納される移動量データＥ０−Ｅ３と、通信距離および通信方向を一覧にして示す図である。４ビット移動データＥ０−Ｅ３により、通信方向をアップ（＋）方向（エントリ番号の増大する方向）およびダウン方向（エントリ番号の低下する方向）に設定することができ、また、データ通信距離を、１、４、１６、６４および２５６のいずれかに設定することができる。通信距離０を含めて、合計１１種類のエントリ間データ通信を実現することができる。
【０１７８】
図２６は、このエントリ間データ移動の一例を示す図である。図２６においては、エントリＥＲＹ０−ＥＲＹ８を代表的に示す。ＡＬＵ間相互接続スイッチ回路４４において、移動量データＥ０−Ｅ３に従って、データ転送経路が設定される。エントリＥＲＹ０、ＥＲＹ２、およびＥＲＹ３およびＥＲＹ７が、それぞれ、＋１ビットシフト動作が指定される。エントリＥＲＹ１に対しては、＋４ビットシフト動作が指定される。エントリＥＲＹ４に対しては、−４ビットシフト動作が指定され、エントリＥＲＹ６については、−４ビットシフト動作が指定される。また、エントリＥＲＹ８において、−１ビットシフト動作が指定される。
【０１７９】
なお、図２６に示すデータ移動を示す矢印において、黒丸印で示す矢の根元が、マルチプレクサを介して送信バッファに結合され、矢印の先において転送先の受信バッファに結合される。
【０１８０】
ＡＬＵ間相互接続スイッチ回路４４に対して配置されるエントリ間の接続用配線は、一方方向の配線であり、エントリＥＲＹ０−ＥＲＹ８において、これらのデータ移動を、データの衝突を伴うことなく、並行に実行することができる。
【０１８１】
次に、図２２および図２３に示すプログラマブルジグザグコピー命令実行時の動作について説明する。
【０１８２】
ステップ１：
ジグザグコピーを行なって、エントリ個々にデータ移動を行なう場合、まず、予めデータエントリのポインタｃｐが指定する領域に、対応のエントリのデータ移動量を示すデータを設定する。このとき、また、マスクビットＶが別の領域に設定される。
【０１８３】
ステップ２：
コントローラ（２１）が、ジグザグコピー命令を実行し、このコントローラの制御の下に、データエントリのポインタｃｐが指定する領域に格納されるエントリ移動量データＥ０−Ｅ３を、移動データレジスタ（ＲＥＣＭレジスタ）に格納する。この操作は、したがって全エントリ共通に行われる。
【０１８４】
ステップ３：
このデータ移動レジスタ（ＲＥＣＭレジスタ）に格納された移動データＥ０−Ｅ３に従って、マルチプレクサ（図２０の要素１２２）の接続経路を設定する。
【０１８５】
ステップ４：
演算対象のデータ（移動対象のデータ）と、１ビットモードコピーまたは２ビットモードコピーに応じて、ＡＬＵ処理エレメント内のレジスタ（ＸレジスタおよびＸＨレジスタ、またはＸレジスタ）に送信データを設定する。このとき、データエントリのポインタｂｐの指定するｎビット幅の領域のデータが、対応のＡＬＵ処理エレメント内のレジスタに格納される。この操作もコントローラ（２１）の制御の下に、全エントリに対して共通に実行される。
【０１８６】
ステップ５：
転送用のレジスタ（ＸおよびＸＨレジスタまたはＸレジスタ）に設定されたデータが、図２０に示すマルチプレクサ１２２を介して移動先のエントリへ転送される。移動先のエントリにおいては、受信バッファを介して転送されたデータを、対応のデータエントリのポインタａｐが指定する領域に１ビット単位または２ビット単位で格納する（この操作もコントローラ２１により全エントリ共通にポインタが生成されて実行される）。
【０１８７】
ステップ６：
このステップ３からステップ５の動作が、移動対象のデータビットがすべて転送されるまで繰返し実行される。
【０１８８】
このデータ転送時、マスクレジスタ（Ｖレジスタ）に、ビット“０”を設定することにより、エントリのデータエントリから対応のデータレジスタ（Ｘ、ＸＨおよび移動データレジスタ）へのデータ設定および送信は行なわれない。
【０１８９】
次に、ＭＩＭＤ演算動作について説明する。
ステップ１：
まず、事前に、データエントリのポインタｃｐが指定するｎビット幅の領域に、ＭＩＭＤ演算を行なう命令（Ｍ０、Ｍ１）を設定する。
【０１９０】
ステップ２：
このデータエントリに設定されたＭＩＭＤ演算命令のうちの該当するＭＩＭＤ用命令を、コントローラ（２１）の制御の下にロード命令を実行して、ＭＩＭＤ命令レジスタに格納する。
【０１９１】
ステップ３：
演算対象となるデータを、コントローラ（２１）の制御の下にレジスタロード命令を実行して、データエントリの領域（ＲＧａおよびＲＧｂ）のポインタａｐおよびｂｐが指定するビット位置のデータビットを、対応のＡＬＵ処理エレメントへ転送して、一方の（先に転送された）データビットをＸレジスタに設定する。ＡＬＵ処理エレメントにおいては、ＭＩＭＤ命令レジスタに設定された命令を実行するように、ＭＩＭＤ用命令デコーダにより演算内容が設定される。データエントリのポインタａｐおよびｂｐが指定するアドレス位置からロードされたデータに対し、設定された演算を実行する。その演算結果を、コントローラ（２１）においてストア命令を実行して、ポインタａｐが指定するデータエントリのビット位置に格納する。
【０１９２】
ステップ４：
演算回数が、指定された回数に到達するまで、すなわち、演算対象のデータビットの全ての演算処理が終了するまで、ステップ３の動作を繰返し実行する。演算回数の指定回数に到達したかは、ポインタａｐまたはｂｐが、設定された最大値に到達したかを見ることにより識別される。
【０１９３】
また、ＳＩＭＤ演算を実行する場合には、図２に示すコントローラ２１の制御の下に、ＡＬＵ間相互接続用スイッチ回路４４の接続経路が全エントリに対して共通に設定され、また、ＡＬＵ処理エレメント３４の演算内容も全エントリに対して共通に設定される。この場合、コントローラ２１によりデータエントリＤＥＲＹのポインタ制御が並列に実行され、各エントリにおいて並列に同一命令が実行される。今、具体的に４ビット加算を行なう操作について考える。
【０１９４】
［組合わせ回路の適用例］
図２７は、通常の４ビット加算器の構成の一例を示す図である。この図２７に示すように、４ビットデータＡ０−Ａ３およびＢ０−Ｂ３を加算する４ビット加算器は、７個の半加算器（ＨＡ）１３０ａ−１３０ｇと、３つのＯＲゲート１３２ａ−１３２ｃで実現される。半加算器の内部構成は、ＸＯＲゲートおよびＡＮＤゲートを用いる構成、ＡＮＤゲート、ＯＲゲートおよびＮＯＴゲートを用いる構成などの種々の構成を利用することができる。半加算器１３０ａ−１３０ｄは、それぞれ対応の位置の２ビットを受ける。半加算器（ＨＡ）１３０ａ−１３０ｇは、出力Ｓ３−Ｓ１を生成するために設けられ、ＯＲゲート１３２ａ−１３２ｃは、キャリーｃ３−ｃ１を生成するために用いられる。半加算器１３０ａ−１３０ｇにおいて、前段の半加算器（１ビット下の半加算器）のキャリー出力と、対応のビット位置の半加算器のサム出力とを受ける。ＯＲゲート１３２ａ−１３２ｃは、対応のビット位置の半加算器のキャリー出力を受ける。
【０１９５】
この図２７に示す４ビット加算器を、１入力１出力のＮＯＴゲート、２入力１出力のＡＮＤゲート、２入力１出力のＯＲゲート、および２入力１出力のＸＯＲゲートの組合せ回路で実現すると、図２８に示す４ビット加算器の論理回路が求められる。
【０１９６】
この図２８に示すように、８段のステージＳＴＧに分割して、４ビット加算が実行される。並列に行なうことのできる半加算演算は、並列に実行し、キャリーの伝搬を受ける部分の演算を、後で演算する構成である。この図２８に示す論理ゲートによる組合わせ回路で実現される４ビット加算器の構成は、図２７に示す４ビット加算器をキャリー伝播を考慮して、論理ゲートで展開することにより求めることができる。
【０１９７】
この図２８に示す４ビット加算器においては、４ビット入力ＡＩＮ［３：０］およびＢＩＮ［３：０］から、４ビット出力ＤＯＵＴ［３：０］およびキャリー出力Ｃ＿ＯＵＴを生成する。
【０１９８】
この図２８に示す論理回路の論理演算を、これまでに説明した並列演算装置で、ＭＩＭＤ命令に従って各ステージを順次実行する。図２８において、このＭＩＭＤ演算時において、各ステージＳＴＧにおいて、１つのセル（論理ゲート）が、１つのエントリに割当てられる。演算ステージＳＴＧが変化する毎に、論理ゲートの出力信号が異なるエントリに伝搬され、また、論理ゲートの出力の移動量は、各セルごとに異なる。また、各ステージにおいてエントリ（セル）において実行される演算は異なる。したがって、各エントリごとに、移動量および命令を設定して、それぞれ異なるＭＩＭＤ演算命令を実行する。
【０１９９】
図２９は、この図２８に示す論理回路のステージＳＴＧ４の演算時の、ステージ開始時のデータエントリの格納データの状態を示す図である。データエントリとして、データエントリＤＥＲＹ０−ＤＥＲＹ７が用いられる。４つのデータエントリＤＥＲＹ０−ＤＥＲＹ３に、４ビットデータＡの各ビットがアドレスポインタａｐの指定する位置に格納され、データエントリＤＥＲＹ４−ＤＥＲＹ７に、４ビットデータＢの各ビットが、同様、アドレスポインタａｐの指定する位置に格納される。したがって、このＭＩＭＤ命令実行時においては、ＳＩＭＤ型演算実行時と異なり、演算対象のデータが複数のエントリにわたって分散して格納され、演算結果が、それぞれ論理ゲートの伝播先のエントリに伝達されてテンポラリ領域に格納される。
【０２００】
テンポラリ領域ｔ１−ｔｍｐは、加工データを格納する領域であり、テンポラリポインタｔ１、ｔ２、ｔ３が指定するアドレスには、各ステージの論理ゲートの出力値が格納される。テンポラリポインタｔｍｐの指定する領域には、各エントリにおける他方演算データが格納される。すなわち、各エントリにおいて、テンポラリポインタｔｉ（ｉは、ｍｐ以外）が示すビット位置に格納されるデータビットとテンポラリポインタｔｍｐが示すビット位置に格納されるデータビットについて２項論理演算が実行される。反転操作を行なう否定演算実行時には、テンポラリポインタｔｉが示すビット位置（以下、適宜、テンポラリアドレスｔｉと称す）に格納されるデータビットについて反転操作が行われる。
【０２０１】
図２９においては、Ａ＋Ｂ＝（００１１）＋（１１０１）の演算実行時のデータの流れを示す。
【０２０２】
ＭＩＭＤ命令用ビットは、データエントリＤＥＲＹ０−ＤＥＲＹ７において、２ビットモードで対応のＡＬＵ処理ユニットのＭＩＭＤ命令レジスタに格納される。
【０２０３】
この演算ステージＳＴＧ４の開始前(ステージＳＴＧ３終了時)において、４つのデータエントリＤＥＲＹ０、ＤＥＲＹ２、ＤＥＲＹ５およびＤＥＲＹ７において演算が行なわれている（マスクビットＶ（Ｖレジスタ内容）がそれぞれ“１”に設定されている）。この場合、データエントリＤＥＲＹ０およびＤＥＲＹ２に対しては、演算命令ビットＭ０およびＭ１が、ＡＮＤ演算を示し、データエントリＤＥＲＹ５に対しては、ＭＩＭＤ演算命令(ビットＭ０、Ｍ１)が、ＮＯＴ演算を指定する。データＤＥＲＹ７については、ＭＩＭＤ命令ビットＭ０およびＭ１が、ＯＲ演算を指定する。データエントリＤＥＲＹ０およびＤＥＲＹ２は、ステージＳＴＧ４のＯＲゲートＧ２前段のＡＮＤゲートの演算を実行し該演算結果をテンポラリアドレスｔ３に格納している。データエントリＤＥＲＹ５およびＤＥＲＹ７は、それぞれ、ゲートＧ１前段のインバータの出力およびゲートＧ３前段のＯＲゲートの出力をテンポラリアドレスｔ３に格納している。
【０２０４】
すなわち、図２９において、ステージ４開始時(ステージＳＴＧ３完了時）においては、ステージ３の出力値が確定しており、データエントリＤＥＲＹ０およびＤＥＲＹ２の論理値が“１”であり、データエントリＤＥＲＹ５の否定結果は、“０”であり、データエントリＤＥＲＹ７におけるＯＲ演算結果の“１”が格納される。演算時には、データエントリＤＥＲＹ０−ＤＥＲＹ７において、マスクビット（Ｖレジスタ内容）に従って選択的に演算が実行されており、演算結果が、対応のデータエントリのテンポラリアドレスｔ３に格納される。したがって、データエントリＤＥＲＹ０およびＤＥＲＹ２において、テンポラリアドレスｔ３およびｔｍｐのビットのＡＮＤ演算が行なわれ、ビット“１”がテンポラリアドレスｔ３に格納される。
【０２０５】
データエントリＤＥＲＹ５においては、ＮＯＴ演算が実行され、先に格納されていたビット値“１”が反転され、ビット“０”がテンポラリアドレスｔ３に格納される。データエントリＤＥＲＹ７においては、テンポラリポインタｔ３およびｔｍｐに格納されたビット値のＯＲ演算が行なわれ、その演算結果が、再び、テンポラリアドレスｔ３に格納される。従って、データエントリＤＥＲＹ７のテンポラリアドレスｔ３には、“１”が格納される。
【０２０６】
次いで、図２８に示すステージＳＴＧ４における演算実行を行なうために、データの並び替えが行なわれる。
【０２０７】
ここで、データエントリＤＥＲＹ１が、ＯＲゲートＧ２の演算領域に割当てられ、データエントリＤＥＲＹ４が、ＡＮＤゲートＧ１の領域に割当てられ、データエントリＤＥＲＹ５が、ＯＲゲートＧ５の領域に割当てられる。データエントリＤＥＲＹ６の領域が、ＮＯＴ演算を行なうインバータＧ３に割当てられる。データエントリＤＥＲＹ７においては、このＡＮＤ演算を行なうＡＮＤゲートＧ４に割当てられる。
【０２０８】
図３０は、ステージＳＴＧ４の演算実行時のデータの移動を模式的に示す図である。ＯＲゲートＧ２は、前段のＡＮＤゲートの出力ビットを受ける必要がある。したがって、この場合、ＯＲゲートＧ２の前段のＡＮＤゲートの出力値は、データエントリＤＥＲＹ０およびＤＥＲ２のテンポラリポインタｔ３が指定するビット位置に格納されており、これらビットを、データエントリＤＥＲＹ１のテンポラリアドレスｔ４に転送する。この場合、データエントリＤＥＲＹ０のテンポラリアドレスｔ３のビットが、データエントリＤＥＲＹ１のテンポラリアドレスｔｍｐに格納され、データエントリＤＥＲＹ２のテンポラリアドレスｔ３のビットが、データエントリＤＥＲＹ１のテンポラリアドレスｔ４に格納される。
【０２０９】
データエントリＤＥＲＹ４に対しては、ＡＮＤゲートＧ１が割当てられる。この場合、前段のインバータおよびＯＲゲートの出力が、データエントリＤＥＲＹ４に移動される。すなわち、データエントリＤＥＲＹ２のテンポラリアドレスｔ１のビットが、データエントリＤＥＲＹ４のテンポラリアドレスｔｍｐに移動され、第３ステージＳＴＧ３において確定されたデータエントリＤＥＲＹ５のテンポラリアドレスｔ３のインバータの出力が、データエントリＤＥＲＹ４のテンポラリアドレスｔ４に移動される。
【０２１０】
データエントリＤＥＲＹ５が、ＯＲゲートＧ５に割当てられる。この場合、ＯＲゲートＧ５の前段のＡＮＤゲートおよびＯＲゲートの出力も移動させる必要があり、データエントリＤＥＲＹ２のテンポラリポインタｔ１の示すビット位置のデータおよびテンポラリポインタｔ２の示すデータエントリＤＥＲＹ１のデータビットが、それぞれテンポラリポインタｔｍｐおよびｔ４の示す位置に移動される。
【０２１１】
データエントリＤＥＲＹ６が、インバータＧ３に割当てられる。この場合、前段のＯＲゲートの出力ビットをデータエントリＤＥＲＹ６のテンポラリアドレスｔ４に移動させる必要があり、先のステージＳＴＧ３において演算されたデータエントリＤＥＲＹ７のテンポラリアドレスｔ３の演算結果が、データエントリＤＥＲＹ６のテンポラリアドレスｔ４の位置に転送される。
【０２１２】
データエントリＤＥＲＹ７は、ＡＮＤゲートＧ４に割当てられる。このＡＮＤゲートＧ４は、最上位ビットＢＩＮ［３］およびＡＩＮ［３］を受ける。したがって、データエントリＤＥＲＹ７のアドレスポインタａｐの示すビット位置のデータが、テンポラリポインタｔｍｐの示す位置に移動され、データエントリＤＥＲＹ３に格納されるアドレスポインタａｐの示すビット位置のデータビットは、データエントリＤＥＲＹ７のテンポラリアドレスｔ４の位置に移動される。これにより、ステージＳＴＧ４における各ゲートＧ１−Ｇ５の入力が、各データエントリのテンポラリポインタｔ４およびｔｍｐの示すビット位置に格納される。
【０２１３】
このデータ移動操作においては、基本データ移動量が、±１、±４、±１６、±６４および±２５６であり、したがって、できるだけ、基本データ移動量が示す領域にデータが転送される。このデータ転送時に、先に示したジグザグコピー命令が用いられる。例えば、テンポラリポインタｔ４に示す領域へのデータ転送が先ず行なわれ、次いで、同様、ジグザグコピー命令を実行して、テンポラリアドレスｔｍｐへのデータの移動が行なわれる。このデータ移動は、逆の順序で行なわれてもよい。すなわち、テンポラリアドレスｔ４およびｔｍｐそれぞれに対するデータ移動時において、先に、テンポラリアドレスｔｍｐへのデータ移動が行なわれる。
【０２１４】
データ移動時において、データエントリＤＥＲＹ２およびＤＥＲＹ３のデータ移動量は、＋２である。従って、この２エントリ間のデータ移動時には、＋１ビットシフト動作が２回実行される。
【０２１５】
また、このデータ移動操作時、各データエントリにおいては、図示しないロウデコーダにより、同一ビット位置のデータビットの読出（ロード）を行なって、データの転送およびストアが行なわれる。したがって、テンポラリアドレスｔ４およびｔｍｐへのデータ転送時、それぞれ、ポインタをａｐ、およびｔ１からｔ４まで更新して、データの移動が行なわれる。この場合、移動の実行／非実行は、マスクレジスタ（Ｖレジスタ）のマスクビットＶにより設定される。
【０２１６】
このデータ転送時、先ず、ソースアドレスを順次変更してロード命令を実行して各エントリにおいて対応のＸレジスタに転送データビットを格納した後に、テンポラリアドレスｔ４およびｔｍｐを行先として、順次、行先アドレスを変更して、データの転送（１ビットモードジグザグコピー命令）が実行されてもよい。例えば、図２３に示すコピー命令ｍｘ＿ｃｐ＿ｚｐ実行時において、ポインタｂｐを順次更新して対応のＸレジスタに転送データビットを格納した後、転送命令を実行して送信バッファを活性化して、Ｘレジスタから行先エントリへのデータ転送を実行する。行先アドレスがｔ４およびｔｍｐと順次更新されるため、行先アドレスに応じてマスクビットＶをセット／クリアして、各エントリから正確にテンポラリアドレスｔ４およびｔｍｐへのデータ移動を行なう。
【０２１７】
図３１は、ＭＩＭＤ命令用ビット格納時のエントリ内での操作を示す図である。このＭＩＭＤ命令を各エントリ毎に設定する場合、図３１に示すように、図１４に示すＭＩＭＤ演算命令ｍｘ＿ｍｉｍｄを実行し、ＭＩＭＤ命令用ビットとして、ポインタｃｐの指定するステージＳＴＧ４用の命令用ビットＭ０およびＭ１を、ＭＩＭＤ用レジスタにコピーする。このとき、また演算を行なうデータエントリＤＥＲＹ１、およびＤＥＲＹ４ないしＤＥＲＹ７に対して、マスクレジスタ（Ｖレジスタ）のビット値を、“１”に設定し、残りのエントリについては、マスクビットを“０”にセットする。これにより、図３１に示すように、データエントリＤＥＲＹ１、およびＤＥＲＹ４ないしＤＥＲＹ７に格納されるＭＩＭＤ命令用ビットがＭＩＭＤ命令レジスタに格納され、実行すべき演算が指定される。
【０２１８】
次いで、図３２に示すように、ＭＩＭＤ命令レジスタに設定されたビット値Ｍ０およびＭ１に従って、アドレスｔ４およびｔｍｐのビットに対してＭＩＭＤ演算命令ａｌｕ．ｏｐ．ｍｉｍｄを実行する。図３２においては、データエントリＤＥＲＹ１においては、ＯＲ演算が行なわれ、データエントリＤＥＲＹ４においては、ＡＮＤ演算が行なわれ、データエントリＤＥＲＹ５においては、ＯＲ演算が行なわれ、データエントリＤＥＲＹ６においてはＮＯＴ演算が行なわれ、データエントリＤＥＲＹ７においては、ＡＮＤ演算が行なわれる。
【０２１９】
この演算時においては、テンポラリアドレスｔ４およびｔｍｐに格納されたビット値についての演算が実行され、その演算結果が、テンポラリアドレスｔ４のビット位置に格納される。演算が行なわれないデータエントリに対しては、対応のマスクビットＶが、“０”である。このステージＳＴＧ４の演算実行後、図３２に示すように、データエントリＤＥＲＹ１、およびＤＥＲＹ４−ＤＥＲＹ７のテンポラリアドレスｔ４のビット位置に、演算結果が格納される。
【０２２０】
以降、同様の操作を行なって、ステージＳＴＧ５からＳＴＧ８の演算を実行する。
ＭＩＭＤ命令用制御ビットとして、各ステージに必要なＭＩＭＤ命令制御ビットが格納され、したがって、ＭＩＭＤ演算命令制御ビットを格納する領域のビット幅も、演算ステージの段数に応じて設定され、また、テンポラリポインタが指定する領域も、演算ステージの段数に応じて、そのビット幅が設定される。
【０２２１】
［順序回路の適用例］
図３３は、順序回路の一例として、２ビットカウンタの一般的構成を示す図である。この図３３に示す２ビットカウンタ３３は、２段の縦続接続されるＤフリップフロップＤＦＦ０およびＤＦＦ１を含む。初段のＤフリップフロップＤＦＦ０は、クロック入力に、クロック信号ＣＬＫを受け、次段のＤフリップフロップＤＦＦ１は、クロック入力に、初段ＤフリップフロップＤＦＦ０の出力／Ｑからの信号を受ける。このＤフリップフロップＤＦＦ０およびＤＦＦ１は、それぞれ、補の出力／Ｑが入力Ｄに結合される。ＤフリップフロップＤＦＦ０およびＤＦＦ１の出力Ｑから、それぞれ、カウントビットＱ０およびＱ１が出力される。
【０２２２】
この図３３に示す２ビットカウンタにおいて、ＤフリップフロップＤＦＦ０およびＤＦＦ１は、そのクロック入力に与えられる信号の立上がり時に、その直前のＤ入力の信号の状態をＱから出力する。したがって、ＤフリップフロップＤＦＦ０およびＤＦＦ１は、クロック入力に与えられる信号の立上がりに同期して、その出力Ｑからの信号の状態を変更する。この図３３に示す２ビットカウンタの構成は、クロック信号ＣＬＫを分周する分周回路としても用いられる。
【０２２３】
図３４は、図３３に示す２ビットカウンタを、ＸＯＲゲートおよびＡＮＤゲートで表現した構成を示す図である。この図３４において、２ビットカウンタは、フリップフロップＦＦ０およびＦＦ１と、フリップフロップＦＦ０の出力Ｑの信号と入力信号ＩＮとを受けるＸＯＲゲートＧ１０と、入力信号ＩＮとフリップフロップＦＦ０の出力Ｑからの信号を受けるＡＮＤゲートＧ１１と、ＡＮＤゲートＧ１１の出力信号とフリップフロップＦＦ１の出力Ｑからの信号とを受けるＸＯＲゲートＧ１２を含む。ＸＯＲゲートＧ１０の出力信号は、フリップフロップＦＦ０の入力Ｄに与えられ、ＸＯＲゲートＧ１２の出力信号は、フリップフロップＦＦ１の入力Ｄに与えられる。
【０２２４】
なお、フリップフロップＦＦ０およびＦＦ１のクロック入力には、共通に、クロック信号ＣＬＫが与えられる。
【０２２５】
この図３４に示す２ビットカウンタにおいて、フリップフロップＦＦ０およびＦＦ１は、データエントリ内に確保するメモリセル領域で実現する。この図３４に示す２ビットカウンタの場合、論理演算段数として、３段のステージＳＴＧが利用される。フリップフロップＦＦ０、ＦＦ１への信号の取込および保持は、ＸＯＲゲートＧ１０およびＧ１２の出力値を、対応のデータエントリ内の対応のビット位置に格納することにより実現される。
【０２２６】
図３５は、この図３４に示す２ビットカウンタの動作をエミュレートする際のビット配置の一例を示す図である。データエントリＤＥＲＹ０−ＤＥＲＹ７において、アドレスポインタａｐが指定するビット位置に、入力信号ＩＮが格納される。この入力信号ＩＮは、ビット値“１”である。テンポラリアドレスｔ１−ｔ３のビット値は、それぞれ、ステージＳＴＧ１−ＳＴＧ３の出力ビットに対応する。テンポラリアドレスｔｍｐは、この２ビットカウンタ動作時においては利用されない。
【０２２７】
フリップフロップＦＦ０−ＦＦ１の格納値を記憶するために、データエントリにおいて、ポインタアドレスＦＦ０およびＦＦ１（フリップフロップおよびビット位置を示すポインタアドレスを、同じ符号で示す）が準備される。
【０２２８】
この図３５において、データエントリＤＥＲＹ０−ＤＥＲＹ７が８つ設けられるのは、以下の理由による。フリップフロップＦＦ０およびＦＦ１の初期状態として、４通り存在し、４つの初期状態に対して１組の４つのデータエントリを用いる。１組のデータエントリにおいて、１つのステージの動作を示すためである。図３５においては、ステージＳＴＧ２およびＳＴＧ３の状態を、データエントリＤＥＲＹ４−ＤＥＲＹ７の組およびデータエントリＤＥＲＹ０−ＤＥＲＹ３の組でそれぞれ示す。この図３４に示す２ビットカウンタの場合、４つのデータエントリを用いてカウント動作をエミュレートすることができる。
ＭＩＭＤ命令用ビットとしては、ステージＳＴＧ１−ＳＴＧ３それぞれに対応して、ＸＯＲ演算、ＡＮＤ演算およびＸＯＲ演算を順次実行するために、６ビットの領域が格納される（マスクビットの格納領域等は示していない）。
【０２２９】
データエントリＤＥＲＹ０−ＤＥＲＹ３において、演算命令（制御）ビットＭ０およびＭ１が、“１，０”に設定され、ＸＯＲ演算が指定される。一方、データエントリＤＥＲＹ４−ＤＥＲＹ７の格納データに対しては、演算命令（制御）ビットＭ０およびＭ１が、ともに“１”に設定され、ＡＮＤ演算が指定される。
【０２３０】
先ず、データエントリＤＥＲＹ０−ＤＥＲＹ３の演算操作について説明する。テンポラリアドレスｔ３が示す領域には、フリップフロップＦＦ１の初期値が格納される。フリップフロップＦＦ０については、その初期値に応じてステージＳＴＧ１の演算結果が異なり、その演算結果がアドレスポインタＦＦ０に格納される。図３５において、ステージＳＴＧ１における演算結果を示すテンポラリアドレスｔ１のビット値が格納される。
【０２３１】
テンポラリアドレスｔ２のビット値は、クロック信号ＣＬＫの立上り前の状態に対応し、フリップフロップＦＦ０へのデータ格納前の論理値である。従って、テンポラリアドレスｔ２の位置のビット値とフリップフロップＦＦ０の格納値とは論理値が逆である。
【０２３２】
ステージＳＴＧ３においては、このテンポラリアドレスｔ２のビット値とフリップフロップＦＦ１に格納されるビット値とのＸＯＲ演算が行なわれて、その演算結果が、再度、フリップフロップＦＦ１のビット位置に格納される。
【０２３３】
すなわち、データエントリＤＥＲＹ０−ＤＥＲＹ３には、それぞれ、フリップフロップＦＦ１およびＦＦ０の初期値として、（０，０）、（０，１）、（１，０）および（１，１）が、ポインタアドレスＦＦ１およびＦＦ０に格納される。クロック信号ＣＬＫの立上がり前において、このフリップフロップＦＦ０の格納値に従って、ＸＯＲゲートＧ１０の出力値が決定され、テンポラリアドレスｔ１のビット値が決定され、クロック信号ＣＬＫの立上がりに従って、フリップフロップＦＦ０の格納値が、ＸＯＲゲートＧ１０の出力ビット値により決定される。
【０２３４】
ステージＳＴＧ２において、クロック信号ＣＬＫの立上り前のフリップフロップＦＦ０の格納値に従って、ＡＮＤゲートＧ１１の出力ビット値が決定され、このビット値がテンポラリアドレスｔ２に格納される。従って、テンポラリアドレスｔ２およびｔ１のビット値の倫理値は反転している。
【０２３５】
ステージＳＴＧ３においては、このＡＮＤゲートＧ１１の出力値とフリップフロップＦＦ１の格納値とに従ってＸＯＲゲートＧ１２の出力値が決定される。ＸＯＲゲートＧ１２の出力値がクロック信号ＣＬＫの立上りに同期してフリップフロップＦＦ１に格納される。図３５においては、このステージＳＴＧ３において、クロック信号ＣＬＫが立ち上がる前のＸＯＲ演算が行われた状態が示される。すなわち、テンポラリアドレスｔ３にフリップフロップＦＦ１の格納値が入力ビット値として設定され、このテンポラリアドレスｔ２およびｔ３のビット値のＸＯＲ演算を行ない、その演算結果をステージＳＴＧ３の演算完了時に、フリップフロップＦＦ１の格納値として、ポインタアドレスＦＦ１に格納する。この演算時において、テンポラリアドレスｔ３にＸＯＲ演算結果を書込み（ストアし）、次いで、ポインタアドレスＦＦ１の位置にテンポラリアドレスｔ３に書き込む。これにより、以降の操作において、テンポラリアドレスｔ３には、常に、ステージＳＴＧ３の実行開始時に、フリップフロップＦＦ１の格納値をＸＯＲゲートＧ１２への入力ビットとして設定することができる。
【０２３６】
データエントリＤＥＲＹ４−ＤＥＲＹ７のビット配置においては、ステージＳＴＧ２の演算がこれから実行される。このステージＳＴＧ２においては、ＭＩＭＤ命令ビット（制御ビット）Ｍ０およびＭ１はともに“１”に設定され、ＡＮＤ演算が行なわれる。
【０２３７】
この場合、ステージＳＴＧ１においては、フリップフロップＦＦ０の格納値に従って、その出力ビット（ＸＯＲゲートの出力ビット）の論理値が決定される。ＸＯＲゲートＧ１０は、インバータとして動作しており、テンポラリアドレスｔ１には、フリップフロップＦＦ０の格納値の反転値が格納される。
【０２３８】
このステージＳＴＧ２の演算実行時において、まだ、フリップフロップＦＦ０へのデータの書込は行なわれておらず、これらのデータエントリＤＥＲＹ４−ＤＥＲＹ７のポインタアドレスＦＦ０およびＦＦ１には、２ビットカウンタの初期値が維持される状態を示す。従って、ステージＳＴＧ２のテンポラリアドレスｔ２のビット値は、フリップフロップＦＦ０の格納ビットの論理値に等しい（入力信号ＩＮは論理値“１”）。
【０２３９】
ステージＳＴＧ２において、このフリップフロップＦＦ０の格納値とアドレスポインタａｐのビット位置のビットとの論理積演算（ＡＮＤ演算）が、各エントリにおいて実行される。
【０２４０】
図３５に示すように、ＭＩＭＤ型演算命令として論理演算を準備することにより、各エントリごとに個々に演算を行なって、順序回路のエミュレーションを行なうことができる。
【０２４１】
また、この演算を繰返し実行することにより、データエントリＤＥＲＹ０−ＤＥＲＹ７において、ポインタアドレスＦＦ０およびＦＦ１に、フリップフロップＦＦ０およびＦＦ１の状態を格納することにより、フリップフロップの状態を表現することが可能となる。
【０２４２】
以上のように、ＡＬＵ処理エレメント内にＭＩＭＤ用命令レジスタおよびデコーダを追加することにより、ＳＩＭＤ型アーキテクチャの並列演算装置を、ＭＩＭＤ型処理装置として動作させることが可能となる。これにより、一度に、エントリ単位で異なる命令を実行することが可能となり、処理時間を削減することができる。
【０２４３】
また、ＭＩＭＤ用命令レジスタおよびデコーダにより、この並列演算装置上で、論理回路のエミュレーションを実現することができる。具体的には、ＮＯＴ素子（１入力１出力）、ＡＮＤ素子（２入力１出力）、ＯＲ素子（２入力１出力）およびＸＯＲ素子（２入力・１出力）は、論理完全系を構成するため、あらゆる組合せ回路を表現することができる。また、データエントリ内にデータ保持用の領域を準備することにより、フリップフロップまたはラッチなどの順序回路も表現することができる。これにより、この発明に従う並列演算装置において、あらゆるハードウェア回路を実装することが可能となる。従って、この並列演算装置において、ＳＩＭＤ命令によるソフトウェア実行部と、論理回路によるハードウェア実行部とを共存させることが可能となり、汎用性の高い処理装置を実現することができる。
【０２４４】
また、ハードウェア回路でこの図３３または図３４に示す２ビットカウンタを構成した場合、フリップフロップＦＦ０においては、１段のゲート遅延であり、一方フリップフロップＦＦ１については、２段のゲート遅延である。したがって、これらのクロック信号に同期して動作タイミングを合わせるために、この２段のゲートＧ１１およびＧ１２の遅延を見込んでタイミング設定を行なう必要があり、クロック信号ＣＬＫの動作マージンを大きくする必要があり、クロック信号を高速化するのが困難となる。しかしながら、この並列演算装置においては、各ステージごとに演算操作を行なっており、各ステージのサイクルは、クロック信号により規定される（並列演算装置のクロック信号）。各実行ステージの演算結果および入力は任意のタイミングでメモリセルから読出すことができる。したがって、２ビットカウンタの場合、初段フリップフロップのクリティカルパスは、１段のゲート遅延であり、次段のフリップフロップに対しては２段のゲート遅延である。各フリップフロップに対してクリティカルパスを変更することが可能となる。これにより、フリップフロップ間のタイミング調整を行なう必要がなくなり、正確に演算操作を行なうとともに、高速動作を実現することができる。
【０２４５】
また、ＭＩＭＤ演算を実行可能とすることにより、処理の並列性への依存要因を減少させることができ、この並列演算装置（ＭＴＸ）の適用範囲を広くすることができる。これにより、従来、ホストＣＰＵに担当させていた演算処理も、この並列演算装置（ＭＴＸ）内で閉じることができ、ＣＰＵと並列演算装置（ＭＴＸ）間のデータ転送に要する時間を低減することができ、システム全体の処理能力を向上させることができる。
【０２４６】
また、リコンフィギャラブルに、データの処理を、各エントリ単位で設定することができ、複雑なデータ転送（垂直移動：エントリ間でのデータ移動）をより柔軟に制御して、データ転送を高速化することができる。
【０２４７】
図３６は、従来の半導体並列演算装置（ＭＴＸ）で用いられる垂直移動命令“ｖｃｏｐｙ”（ｍｏｖｅ命令と同じ）と、この発明の実施の形態１に従うエントリ間通信回路（ＲＥＣＭ：リコンフィギャラブルエントリコミュニケータ）を用いたデータ移動時に必要とされるサイクル数を一覧にして示す図である。この図３６に示す表においては、並列演算装置（ＭＴＸ）の方式シミュレータのバージョン０．０３．０１を使用し、２ビット単位での演算を行なう２ビットＡＬＵをモデルとしている。このＲＥＣＭに対しては、方式シミュレータのバージョン０．０３．０１のサイクル数計算を利用し、ライブラリ化している。
【０２４８】
図３６においては、データ移動距離として、１ビット、２ビット、４ビット、８ビット、１６ビット、３２ビット、６４ビット、１２８ビット、２５６ビット、５１２ビットおよび１０２４ビットの移動距離に要するサイクル数を示す。垂直移動命令“ｖｃｏｐｙ”（＝ｍｏｖｅ）を利用する場合、データの移動は、全データエントリに共通に同一方向に設定される。１６ビットデータを、２ビット単位で移動する。データビットの転送には、８サイクルが必要とされ、また、転送データのロードおよびストアなどのデータ移動に要するサイクルが、方式シミュレータにより予め設定されている。
【０２４９】
図３６に示すように、ＲＥＣＭを用いてエントリ通信を行なう場合、通信制御用データレジスタ（ＲＥＣＭレジスタ）へ、通信制御データＥ０−Ｅ３を格納する必要があり、このサイクル数（図３６では３サイクル）、移動サイクル数が長くなることが見られる。データ移動量が基本移動量の場合には、垂直移動命令実行時において２６サイクルであり、同一距離の移動を繰返す場合８サイクル、データ通信に要するサイクル数が長くなる。
【０２５０】
したがって、データ移動に、垂直コピー命令“ｖｃｏｐｙ”を用いた一斉移動のような、すべてのエントリが等距離離れたエントリと通信する場合においては、ＲＥＣＭを用いたエントリ個々にデータ移動を実行する場合には、動作が遅くなる。また、各エントリごとに、データ移動量を設定するための制御データをデータエントリに格納する必要があり、メモリマットにおいて、この通信制御用データ格納領域を確保する必要がある。
【０２５１】
しかしながら、各エントリが、それぞれ異なる距離離れたエントリと通信する場合においては、各エントリ単位で、通信制御を実現することができ、より少ないサイクル数で処理を終了することができる。これは、エントリごとに通信距離（データ移動距離）が異なる場合、従来の方法では、垂直移動命令“ｖｃｏｐｙ”とマスクレジスタ（Ｖレジスタ）のマスクビットとを用いて選択的に移動を行なう必要があり、各データ移動量ごとにデータ移動を繰返し実行する必要があり、処理時間に長時間を要する。しかしながら、ＲＥＣＭレジスタを用いて通信制御を行なう場合、一度の通信でも、各エントリの通信距離を選択することができ、より少ない時間で、データ移動処理を終了することができる。したがって、たとえば図２６に示すようなデータ移動を行なう場合、５種類のデータ移動量が存在する。従って、垂直移動命令ｖｃｏｐｙまたは移動命令ｍｏｖｅを利用する場合、５回データ転送命令を実行する必要がある。しかしながら、本実施の形態１に従えば、各エントリに対して移動量を設定することにより、一度のデータ通信でデータ移動を完了することができ、転送時間を低減することができる。
【０２５２】
また、このデータ移動のための配線は、これまでに用いられてきている並列演算装置の移動命令ｖｃｏｐｙまたはｍｏｖｅを実行するために用いられる配線をそのまま援用することができる。従って、配線面積の増大を伴うことなく、データ移動に要するサイクル数を低減することができる。以下、具体的に、データ移動処理について説明する。
【０２５３】
［ギャザ処理］
ギャザ処理は、８エントリ置きのデータを集め、エントリの最初から順に、集めたエントリデータを並べるデータ移動処理である。通常、画像処理において、境界領域にゆらぎのあるノイズ（アナログ的なノイズ）を導入して、境界領域の階調変化を滑らかにするために行われる。この場合の処理を、６４エントリに対して実行する場合のデータ移動のフローを、図３７に示す。
【０２５４】
図３７においては、メモリセルマットにおいて、エントリとして、２０４８エントリが準備される。エントリＥＲＹ７、ＥＲＹ１５、ＥＲＹ２３、ＥＲＹ３１、ＥＲＹ３９、ＥＲＹ４７、ＥＲＹ５５およびＥＲＹ６３の内容Ａ−Ｈを取り出して、エントリ０から順に並べる。この図３７に示すギャザ処理において、以下の処理手順が実行される。
【０２５５】
ステップ１：
先ず、データ移動制御用のデータ（Ｅ０−Ｅ３）を、データエントリの制御データ格納領域に格納する。ここで、各データエントリに共通にエントリ内のデータ格納領域が、ポインタに従って設定される。
【０２５６】
ステップ２：
データエントリから、データ移動量に応じて、データ移動制御用データＥを、対応のＲＥＣＭレジスタ（移動データレジスタ）に格納する。図３７に示すように、データ移動制御データＥａが複数回連続して用いられる場合、通信データ移動時、最初に１回設定し、繰り返し、エントリ間データ移動を実行する。
【０２５７】
ステップ３：
次いで、このＲＥＣＭレジスタに格納された値Ｅ（Ｅ０−Ｅ３）に従って、各エントリごとに、移動距離および移動方向を設定して、データ移動を行なう。
【０２５８】
図３７において、まず移動制御データ群Ｅａに従って、エントリＥＲＹ１５のデータＢが、エントリＥＲＹ２０４７へ転送される。エントリＥＲＹ７は、１ビット下方向にシフトされる。エントリＥＲＹ２３のデータＣが、エントリＥＲＹ７へ転送される（−１６ビット移動）。残りの、エントリデータＤ−Ｈは、それぞれ−１６ビット移動され、各データＤ−Ｈのエントリ位置が、１６ビット小さい方向にシフトされる（ダウンシフト動作）。
【０２５９】
次いで、各エントリにおいて、再び同じ移動命令を実行し、エントリＥＲＹ１５に格納されたデータは、エントリ２０４７に転送し、エントリＥＲＹ７のデータは、１ビットダウン方向へシフトする。エントリＥＲＹ２３については、−１６ビットシフトを行ない、また、残りのエントリＥＲＹ２３、ＥＲＹ３１、ＥＲＹ３９およびＥＲＹ４７についても同様のシフト動作を行なう。このとき、エントリＥＲＹ２０４７のデータＢが、エントリＥＲＹ３に転送される（４ビットアップシフト）。
【０２６０】
再び、次のサイクルにおいても制御データ群Ｅａに従ってデータ移動が行なわれ、エントリＥＲＹ２からＥＲＹ７に、データＢ、Ｄ、Ａ、Ｃ、ＥおよびＧが格納され、エントリＥＲＹ１５に、データＨが格納される。
【０２６１】
ステップ４：
次いで、ポインタを移動させて、次の移動制御データを対応のＲＥＣＭレジスタに格納する。この移動制御データ群Ｅｂに従って、データ移動を行なう。すなわち、エントリＥＲＹ２０４７のデータに対して、４ビットアップシフト操作を行ない、エントリＥＲＹ４のデータＡについて、４ビットダウンシフト操作を行ない、残りのエントリＥＲＹ２、ＥＲＹ３、ＥＲＹ５−ＥＲＹ７について、１ビットダウンシフト操作を行ない、エントリＥＲＹ１５について４ビットダウンシフト操作を行なう。
【０２６２】
ステップ５：
ポインタを更新して次の移動制御データを対応のＲＥＣＭレジスタに格納する。転送データをＸ／ＸＨレジスタに格納した後、制御データＥｃに従って、データ移動を行なう。転送データビットについて、この移動操作を繰返し実行する。この操作により、エントリＥＲＹ３およびＥＲＹ４において、１ビットアップシフトおよびダウンシフトを行なって、そのデータを格納交換する。エントリＥＲＹ１１のデータは、４ビットシフトにより、エントリＥＲＹ７に格納される。
【０２６３】
ステップ６：
最後の移動制御データ群を、対応のＲＥＣＭレジスタに格納して、移動量を各エントリ毎に設定する。転送データをＸ／ＸＨレジスタに格納して、制御データ群Ｅｄに従ってデータ移動を行なう。この操作においては、制御データ群Ｅｄに従って、エントリＥＲＹ２およびＥＲＹ３とエントリＥＲＹ４およびＥＲＹ５の内容を交換する。これにより、エントリＥＲＹ０からエントリＥＲＹ７に、データＡ−Ｈが順次格納される。
【０２６４】
したがって、このようなギャザ処理についても、個別移動操作を行なうことにより、ギャザ処理を実現することができ、高速の処理を実現することができる。
【０２６５】
なお、図３７に示すデータ移動フローにおいて、移動制御データ群Ｅａに従って、データ移動を行なうエントリおよび行なわないエントリが存在する。データ移動の実行／不実行はマスクビットにより設定することができ、各移動操作時にマスクビットがセット／クリアされれば良い。また、このとき、マスクビットがセットされてエントリが移動操作を実行しても、図３７において斜線ブロックで示すように、後のサイクルで転送されるデータで、不要転送データを書き換えることができ、マスクビットが同一移動制御データ群に対して同一の状態に設定されていても、後のサイクルで転送データで書き換えられる限り、特に問題は生じない。
【０２６６】
図３８は、図３７に示すギャザ処理を、１６ビットデータに対して行なった場合のエントリ数と必要とされるサイクル数および制御ビットの関係を一覧にして示す図である。Ｖフラグは、マスクレジスタ（Ｖレジスタ）に格納されるマスクビットである。制御ビットは、ジグザグコピーモード実行時の転送先／移動量を決定するデータ（Ｅ０−Ｅ３）数を示す。この場合、初期データの格納領域は示していない。この図３８に示すエントリ数と実行サイクル数の関係においても、先のシミュレータバージョン０．０３．０１のサイクル数計算を利用する。
【０２６７】
図３８に示すエントリ数６４の場合が、図３７に示す操作に対応する。制御ビットとして、移動命令は４種類であり、合計１６ビットであり、さらに、データ転送に関係しない部分の領域（エントリ）のデータ転送を停止するため、マスクフラグが利用される。したがって、それぞれ、４ビットのマスクフラグが用いられ、制御ビットとして、各移動時に使用される移動命令よりも、このマスクビットの数だけ増大する。
【０２６８】
図３９は、図３８に示すギャザ処理におけるエントリ数とサイクル数の関係を示す図である。図３９において、横軸にエントリ数を示し、縦軸にサイクル数を示す。図３９に示すように、エントリ数が増大するにつれて、当然、必要とされるサイクル数も増大する。しかしながら、ＲＥＣＭレジスタを用いて、各エントリごとにデータ移動を行なう場合、垂直移動命令ｖｃｏｐｙまたはｍｏｖｅによる、各エントリで同一方向への移動を行なう構成に比べて、サイクルするが低減されているのが見られる。
【０２６９】
図４０は、図３８に示すギャザ処理のエントリ数と制御ビットの占める領域のビット幅を示す。図４０において、横軸にエントリ数を示し、縦軸に、制御データ格納領域のビット幅を示す。図４０に示すように、ＲＥＣＭレジスタを用いて、各エントリ単位でデータ移動量を設定してデータ移動を行なう場合、各エントリごとに移動制御データを格納する必要があり、制御ビットの格納領域のビット幅は、通常の、垂直移動命令ｖｃｏｐｙを利用する場合のマスクビット（Ｖフラグ）を格納する領域のビット幅よりも大幅に増大する。しかしながら、転送データは１６ビットであり、１つのデータエントリのビット幅は、十分に広く（１つのビット線対のメモリセルの数であり、ワード線の数に対応する）、十分に、これらの制御ビットを格納する領域は確保することができる。
【０２７０】
［デインタリーブ処理］
デインタリーブ処理は、エントリの垂直方向に並んだデータ列を、エントリ群の上半分の領域に、偶数エントリのデータを、下半分のエントリ群に奇数エントリのデータを格納するようにデータの移動を行なう処理である。
【０２７１】
図４１は、この図面の実施の形態１に従う並列演算装置（ＭＴＸ）におけるデインタリーブ処理のデータの流れを示す図である。この図４１において、状態ＳＡは、エントリＥＲＹの格納データの初期状態を示し、状態ＳＢは、４エントリの処理終了時の状態を示す。状態ＳＣは、エントリＥＲＹが８個設けられている場合のデインタリーブ処理完了時の状態を示す。
【０２７２】
この図４１に示すように、移動制御データ群Ｅａ−Ｅｃを利用して、順次データ移動を行ない、各エントリ間で偶数エントリおよび奇数エントリの内容を交換することにより、偶数エントリのデータおよび奇数エントリのデータを分類することができる。
【０２７３】
図４２は、通常の、ＳＩＭＤ型移動命令のコピー命令（垂直移動命令）“ｖｃｏｐｙ”に従って移動操作を行なう場合の処理手順を示す図である。この場合においては、各エントリのデータは、同一方向に同一量移動させる必要があるため、偶数エントリのデータ移動と、奇数エントリのデータ移動とに分割して処理を実行する。図４２に示すように、垂直コピー命令ｖｃｏｐｙを用いてデータ移動を行なう場合、元のデータ（初期データ）を、偶数エントリおよび奇数エントリに分けて分類する必要があるため、各エントリＥＲＹ０−ＥＲＹ７において保持する必要がある。したがって、転送データはテンポラリ領域内に保持し、このテンポラリ領域内に保持されたデータを順次転送する。この転送時において、また、偶数エントリデータおよび奇数エントリデータを分類してデータ転送を行なう必要があり、テンポラリ領域としては、したがって、奇数列データ転送用領域および偶数列データ転送領域とを設ける必要があり、転送データの２倍のビット幅がテンポラリ領域として必要とされる。
【０２７４】
図４３は、図４１および図４２に示すデインタリーブ処理における１６ビットデータ処理時のエントリ数とデータ格納領域のビット幅と、転送サイクル数を一覧にして示す図である。この図４３に示すサイクル数も、前述のＲＥＣＭシミュレータのバージョン０．０３．０１を用いて２ビット単位でのデータ転送時の処理を求める。
【０２７５】
エントリ数が４の場合、図４１に示すように、初期状態ＳＡから、状態ＳＢへ移行するだけであり、制御ビットとして移動制御データＥａが用いられるだけである。したがって、ＲＥＣＭを利用する場合、制御ビットとして、この命令Ｅａの４ビットが必要とされる（マスクビットは示していない：データ移動として０ビットシフトが実行されても良い。この場合には、マスクビットは不要である）。
【０２７６】
ＲＥＣＭにおいては、移動制御データのＲＥＣＭレジスタへの設定を行なうサイクルが必要となり、２ビット単位でのデータ転送時においても、Ｘ／ＸＨレジスタへの転送データの格納、データ転送、および転送データなどの転送先での書込のサイクルが必要とされる。たとえばエントリ数が４の場合でも、データ移動に３３サイクルが必要とされる。しかしながら、このエントリ数が４の場合でも、垂直コピー命令ｖｃｏｐｙを利用する場合、偶数列データ転送および奇数列データ転送時それぞれ、転送を禁止するため、マスクフラグを２ビット用いる必要がある。また、各移動は、同一移動量のデータ転送を行なう必要があり、サイクル数がたとえば１７２サイクルと大幅に増加する。
【０２７７】
図４４は、図４３に示すデインタリーブ処理比較表におけるエントリ数とサイクル数との関係をグラフで示す図であり、図４５は、図４３に示す表のエントリ数と制御ビットの幅を示す図である。図４３においては、横軸にエントリ数を示し、縦軸にサイクル数を示す。図４５においては、横軸にエントリ数を示す、縦軸にマスク／制御ビット幅を示す。
【０２７８】
図４４に見られるように、ＲＥＣＭレジスタを用いてデータ移動を行なうことにより、高速でデータの移動を行なうことができる。また、図４５に示すように、データ移動エントリ数が少ない場合には、メモリマットの利用領域を低減することができる。この場合、偶数列エントリのデータおよび奇数列エントリのデータを格納するテンポラリ領域を設ける必要がなく、直接、元のアドレスポインタが示す位置に移動データの書込を行なうことができる。従って、制御ビットの幅がＲＥＣＭを利用する場合には増大するものの、テンポラリ領域が不要であり、データ移動時のメモリマットの使用領域ビット幅は、垂直移動命令実行時と同程度またはそれよりも小さくすることができる。
【０２７９】
［アンチエイリアシング処理］
エイリアスとは、通常、元のデータに含まれていない虚像データを示す。アンチエイリアシング処理は、このエイリアス成分を除去または回避する処理である。画像処理分野においては、このアンチエイリアシング処理は、生成された図形に含まれるジャギー（図形の位置がピクセルに沿って階段状にギザギザになっている状態）を除去することを示す。このアンチエイリアシング処理において、この領域の画素の平均値を求める処理がある。エイリアス処理は、エントリにわたって垂直方向に沿って整列するデータのうち、一定の範囲においてデータを交換する処理である。
【０２８０】
図４６は、エイリアシング処理のデータ配列の交換の一例を示す図である。図４６において、エントリＥＲＹ１０からエントリＥＲＹ２５のデータを垂直方向に並べ替え、エントリＥＲＹ２５からエントリＥＲＹ１０の元の格納データの順に配置する。
【０２８１】
図４７は、このエイリアス処理におけるデータ配列交換時のデータ垂直移動時のデータの流れを模式的に示す図である。この図４７において、まず、１６エントリのうち、上位または下位の８エントリのデータ移動の処理を実行し、次いで、残りの８エントリについてデータ転送を実行する。この場合、データ転送量を、８、４、２、および１と順次低減することにより、データの並び替えを行なうことができる。ただし、実施の形態１において、基本データ転送量は、±１、±４、±１６であるため、８エントリ離れた位置への通信には、４ビットシフト動作を２回実行する必要があり、また、２ビットシフト動作時には、１ビットシフト動作を２回連続して実行する必要がある。このデータ転送操作時、一例として、実線で示す＋シフト命令実行および一点鎖線で示す−シフト操作を、交互に実行する。データ保持とデータ移動のための領域が衝突した場合、正確にデータ転送を行なうことができなくなり、この中間データの確保のために、テンポラリ領域が必要となる。２回転送するため、通常、＋シフト用および−シフト用に２つのテンポラリデータ領域を必要とする。
【０２８２】
また、エントリＥＲＹ１０からＥＲＹ２５についてデータ転送を行ない、残りのエントリについてはデータ移動が行なわれないため、マスクビットを用いて、データ転送をマスクする必要があり、また、＋シフト方向および−シフト方向交互に行なわれる場合においても、マスクをかける必要がある。
【０２８３】
図４８は、図４７に示す３２ビットデータのエイリアス処理実行時のシミュレーション結果を示す図である。シミュレータとして方式バージョン０．０３．０１を利用し、このシミュレータにおいてライブラリ化されたサイクル数計算シミュレータを利用する。垂直移動命令ｖｃｏｐｙを用いて３２ビットデータを移動させる場合、６１３サイクル必要とされ、また、マスクビットパターン格納領域として、８ビットの領域が必要とされ、さらに、テンポラリビット格納のために、２つのデータのビット幅、すなわち、６４ビットが必要となる。一方、ＲＥＣＭレジスタを利用する場合、サイクル数は４４２であり、制御ビットとして、１６ビットが用いられる。すなわち４回の移動命令を実行することが必要となる（移動量が１、４、１６と限定されているため）。
【０２８４】
したがって、この図４８の表から見られるように、ＲＥＣＭレジスタを用いたデータ通信の場合、処理サイクル数が短く、高速の処理を実現することができる。
【０２８５】
また、ＲＥＣＭレジスタを利用する場合、このエントリＥＲＹ０からＥＲＹ２５の内容をすべて移動させることができるため、テンポラリ領域が不要となり、メモリマットのデータ通信に使用する領域幅を低減することができる。
【０２８６】
データ移動通信回路を用いたＲＥＣＭレジスタを設けることにより、以下の効果が得られる。すなわち、一斉移動を行なう垂直コピー命令ｖｃｏｐｙまたはｍｏｖｅを用いた場合、一度に同一距離のエントリ間でのデータ移動のみを行なうことができるだけであり、各エントリ単位で異なる距離をデータ移動させる必要がある場合には、エントリ間の移動を、データ移動量ごとに複数回繰返す必要がある。しかしながら、この発明の実施の形態１に従うＡＬＵ間データ通信回路（ＲＥＣＭレジスタ）を用いることにより、各エントリ単位でプログラマブルにエントリ間のデータ移動距離を設定することができ、また、データ移動を行なうことができる。これにより、高速に、エントリ間のデータ移動を行なうことが可能となる。また、データ移動量によっては、一度のデータ移動命令実行のみで、各エントリで、異なる所望の距離、データを移動させることが可能となる。
【０２８７】
また、このエントリ間のデータ移動のマルチプレクサの選択信号を、単に、並列演算装置（主演算回路）全体の制御（コントローラ２１（図１参照）の制御）に代えて、ＲＥＣＭレジスタ（デコード回路を含む）による制御信号に切換えるだけで、エントリ単位でのデータ転送を制御することができ、新たな配線リソースを追加する必要がない。
【０２８８】
［実施の形態２］
図４９は、この発明の実施の形態２に従うＡＬＵ処理エレメントの構成を概略的に示す図である。この図４９に示すＡＬＵ処理エレメントの構成は、以下の点で、図１０に示す実施の形態１に従うＡＬＵ処理エレメントとその構成が異なる。すなわち、Ｃレジスタ５３、Ｆレジスタ５４、Ｄレジスタ５９およびＸＬレジスタ５８を、この移動制御データＥ０−Ｅ３を格納するレジスタとして利用する。すなわち、ＭＩＭＤ用命令レジスタ（ＲＥＣＭレジスタ）７０に代えて、ＡＬＵ処理エレメント３４に設けられる演算レジスタを利用する。データ移動時においては、算術演算または論理演算は実行されないため、これらのＸＬレジスタ５８、Ｄレジスタ５９、Ｃレジスタ５３、およびＦレジスタ５４は使用されない。このデータ移動操作時において、使用されないレジスタを移動制御データ格納用のレジスタとして利用することにより、専用のＭＩＭＤ命令レジスタ（ＲＥＣＭレジスタ）を設ける必要がなく、このＡＬＵ間接続スイッチ回路の占有面積を低減する。
【０２８９】
この図４９に示すＡＬＵ処理エレメントの他の構成は、図１０に示すＡＬＵ処理エレメントの構成と同じであり、対応する部分には同一参照番号を付し、その詳細説明は省略する。ただし、図４９においては、ＳＩＭＤ型アーキテクチャでの演算時とＭＩＭＤ型アーキテクチャでの演算時とで移動制御の経路を切換えるためにマルチプレクサ（ＭＵＸ）１５０を例示的に示す。このマルチプレクサ１５０は、ＳＩＭＤ命令実行およびＭＩＭＤ命令実行を切換えるモード制御信号Ｓ／Ｍに従って、コントローラ２１からの制御信号と、これらのレジスタからの制御命令ビットＥ０−Ｅ３の一方を選択する。モード制御信号は、移動命令実行時にＭＩＭＤ型移動命令であるかの判定結果に従ってコントローラ２１から生成される（ＭＩＭＤ型移動命令実行時にモード制御信号Ｓ／Ｍがレジスタからの移動制御データを選択する状態に設定される）。
【０２９０】
図４９において、一例として、Ｃレジスタ５３に、制御ビットＥ３が格納され、Ｆレジスタ５４に制御ビットＥ１が格納され、ＸＬレジスタ５８に、Ｅ０が格納され、Ｄレジスタ５９に制御ビットＥ２が格納される。しかしながら、これらのレジスタ５３、５４、５８および５９に格納される制御ビットとしては、他の組合せが用いられてもよい。
【０２９１】
これらのレジスタ５３、５４、５９および５８に移動量データを転送する（ロードする）命令を、先の命令一覧表に示すロード命令を利用することにより、移動量データを、これらのレジスタに格納することができる。
【０２９２】
以上のように、この発明の実施の形態２に従えば、移動データ格納レジスタとして、ＡＬＵ処理ユニットに設けられているレジスタのうちデータ移動操作時に用いられないレジスタを利用しており、ＡＬＵ間移動のための回路の占有面積を低減することができる。また、移動データ格納時、ＳＩＭＤ演算時のレジスタロード命令を利用して移動制御データを格納することができ、データ移動制御のプログラム記述が容易となる。
【０２９３】
［実施の形態３］
図５０は、この発明の実施の形態３に従うＡＬＵ処理エレメントの構成を概略的に示す図である。この図５０に示すＡＬＵ処理エレメントは、以下の点で、図１０に示す実施の形態１に従うＡＬＵ処理エレメントとその構成が異なる。すなわち、ＭＩＭＤ用命令デコーダ７４にＭＩＭＤ命令を与えるレジスタとして、Ｃレジスタ５３およびＸＬレジスタ５８が用いられる。この図５０に示すＡＬＵ処理エレメントの他の構成は、図１０に示すＡＬＵ処理エレメントの構成と同じであり、対応する部分には同一参照番号を付し、その詳細説明は省略する。
【０２９４】
ただし、図５０に示す構成においても、ＡＬＵ間通信回路（ＲＥＣＭ）７１に対して、マルチプレクサ１５０が設けられ、モード制御信号Ｓ／Ｍに従って、データレジスタ（ＲＥＣＭレジスタ）７０からのビットＥ０−Ｅ３と、コントローラ２１からの制御信号の一方を切換えて、ＡＬＵ間通信回路７１の接続経路を設定するマルチプレクサ１５０が設けられる。
【０２９５】
この図５０に示すＡＬＵ処理エレメント３４の構成においては、ＭＩＭＤ命令を格納するための専用のレジスタが不要となり、ＡＬＵ処理エレメントのレイアウト面積を低減することができる。この図５０に示す様に、レジスタ５３および５８をＭＩＭＤ命令レジスタとして利用する場合のＭＩＭＤ演算実行時の命令は、以下のように記述される。
【０２９６】
ＭＴＸ＿ＭＩＭＤ（ａｓ，ｂｓ，ｃｓ，ｂｉｔ＿ｃｏｕｎｔ）
０：ｐｔｒ．ｓｅｔ♯ｃｓ，ｐ１；
１：ｍｅｎ．ｌｄＣ＠ｐ１＋＋；
２：ｍｅｎ．ｌｄＸＬ＠ｐ１；
３：ｐｔｒ．ｓｅｔ♯ａｓ，ｐ２；ｐｔｒ．ｓｅｔ♯ｂｓ，ｐ３；
４：ｆｏｒ（ｉ＝０；ｉ＜ｂｉｔ＿ｃｏｕｎｔ；ｉ＋＋）｛
５：ｍｅｎ．ｌｄＸ＠ｐ２＋＋；
６：ａｌｕ．ｏｐ．ｍｉｍｄ＠ｐ３＋＋；
７：｝
上述の操作記述において、行番号０の命令により、ポインタレジスタｐ１のポインタを、ポインタｃｐの初期値ｃｓとして設定する。
【０２９７】
行番号１の命令により、Ｃレジスタに、ポインタレジスタｐ１のポインタが指定する位置のビットをロードし、ポインタレジスタｐ１のカウント値を１増分する。
【０２９８】
行番号２の命令により、ＸＬレジスタに、ポインタレジスタｐ１が指定するビット位置のデータビットを、ＸＬレジスタにロードする。
【０２９９】
行番号３の命令に従って、ポインタレジスタｐ２のポインタを、アドレスポインタａｐの初期値ａｓとし設定し、また、ポインタレジスタｐ３のポインタが指定する値を、アドレスポインタｂｐの初期値ｂｓとして設定する。
【０３００】
行番号４のｆｏｒ文により、ｉの変化範囲が０から、ビット幅ｂｉｔ＿ｃｏｕｎｔの範囲で設定され、かつ操作ごとに、ｉが増分される。
【０３０１】
行番号５の命令により、ポインタレジスタｐ２のポインタが指定する位置のビットを、Ｘレジスタにロードし、次いでポインタレジスタｐ２のポインタを増分する。
【０３０２】
行番号６の命令により、ポインタレジスタｐ３のポインタが指定する位置のデータビットとＸレジスタとのデータに対し、ＣレジスタおよびＸＬレジスタ５８に格納されたビットに従って、指定されたＭＩＭＤ演算命令ａｌｕ．ｏｐ．ｍｉｍｄを実行し、その実行結果を、再びポインタレジスタｐ３のポインタが指定するビット位置に格納する。
【０３０３】
行番号７により、命令処理の終了が記述される。
したがって、ＭＩＭＤ演算実行時、Ｃレジスタ５３およびＸＬレジスタ５８により、演算命令（制御ビット）Ｍ１およびＭ０を格納した後、演算対象のデータビットをＸレジスタに転送し、ポインタレジスタｐ３のポインタが指定する位置のビットとの間の演算を実行する。この場合、１ビット単位での演算が実行される場合には、Ｘ及びＸＨレジスタが利用されて論理演算処理が実行される。１ビット単位での演算実行時には、行番号５の後にポインタレジスタｐ３のポインタが指定するビット位置のデータをＸＨレジスタへ転送して、演算を実行する。否定演算命令ＮＯＴの実行時には、ＸＬレジスタ及びＸＨレジスタに格納されたビットのうちの予め定められたレジスタのビット値に対して反転操作が実行される。
【０３０４】
このように、通常のＳＩＭＤ型アーキテクチャの命令を利用して、ＭＩＭＤ命令を各ＡＬＵ処理エレメントのレジスタに個々に設定して演算処理を実行することができる。
【０３０５】
以上のように、この発明の実施の形態３に従えば、ＭＩＭＤ命令格納用のレジスタとして、ＡＬＵ処理エレメントの演算データ格納用のレジスタを利用しており、ＭＩＭＤ演算命令レジスタを専用に設ける必要がなくなり、ＡＬＵ処理エレメントの占有面積を低減することができる。
【０３０６】
［実施の形態４］
図５１は、この発明の実施の形態４に従うＡＬＵ処理エレメント３４の構成を概略的に示す図である。この図５１に示すＡＬＵ処理エレメントは、図５０に示すＡＬＵ処理エレメントと、以下の点でその構成が異なる。すなわち、ＡＬＵ間通信回路（ＲＥＣＭ）７１に対する移動制御データビットＥ０−Ｅ３が、Ｃレジスタ５３、Ｆレジスタ５４、ＸＬレジスタ５８およびＤレジスタ５９にそれぞれ格納される。また、ＭＩＭＤ命令ビット０及びＭ１がＸＬレジスタ５８及びＣレジスタ５３に格納される。
【０３０７】
一例として、ＸＬレジスタ５８に命令ビットＭ０および制御データＥ０が格納され、Ｃレジスタ５３に、ＭＩＭＤ演算命令Ｍ１およびデータ移動量制御ビットＥ３が格納される。Ｆレジスタ５４およびＤレジスタ５９に、それぞれ移動量制御ビットＥ１およびＥ２を格納する。データ移動操作と、ＭＩＭＤ演算命令は、同時には実行されない。したがって、このＣレジスタ５３およびＸＬレジスタ５８を、ＭＩＭＤ演算命令およびジグザグコピー動作の制御ビットを格納するために用いても、何らデータビットの衝突は生じない。
【０３０８】
この図５１に示す実施の形態４に従うＡＬＵ処理エレメントの構成は、図４９および図５０に示す構成を組合せたものと等価である。この場合、エントリ単位での移動データ量設定およびエントリ単位でのＭＩＭＤ命令を格納するための専用のレジスタを設ける必要がなく、よりＡＬＵ処理エレメントの占有面積を低減することができる。
【０３０９】
以上のように、この発明の実施の形態４に従えば、ＭＩＭＤ命令およびＲＥＣＭデータそれぞれの制御ビットを格納するレジスタとして、ＡＬＵ処理エレメントに設けられているレジスタを利用している。したがって、ＡＬＵ処理エレメント、新たにレジスタを増加させる必要がなく、ＡＬＵ処理エレメントの増大を抑制することができる。たとえば、エントリＥＲＹが１０２４個設けられる場合、このＡＬＵ処理エレメント当たり６個のレジスタ（ＭＩＭＤ用レジスタ２ビット、およびＲＥＣＭレジスタの４ビット）を共用することにより、６１４４個のレジスタを削減することができ、大幅に、面積増大を抑制することができる。
【０３１０】
なお、各レジスタへのデータ及び移動／命令制御データのロードおよびＭＩＭＤ命令を実行する手順は、先に示した実施の形態１の場合と同様であり、ジグザグコピー命令およびＭＩＭＤ演算命令を１回発行することにより、各エントリ単位で、データ転送および演算をそれぞれ行なうことができる。
【０３１１】
［実施の形態５］
図５２は、この実施の形態１から４において示したＭＩＭＤ用命令デコーダ７４の具体的構成の一例を示す図である。図５２に示す構成においては、ＭＩＭＤ命令ビットＭ０およびＭ１は、ＸＬレジスタ５８およびＣレジスタ５３からそれぞれ生成される。しかしながら、このＭＩＭＤ命令ビットは、実施の形態１において示したように、専用のＭＩＭＤ用レジスタに格納されてもよい。
【０３１２】
図５２において、ＭＩＭＤ用命令デコーダ７４は、命令ビットＭ０およびＭ１をそれぞれ受けるインバータ１６１および１６２と、インバータ１６１および１６２の出力信号を受けて否定演算指定信号φｎｏｔを生成するＡＮＤ回路１６３と、インバータ１６１の出力信号と命令ビットＭ１とを受けて、論理和演算指定信号φｏｒを生成するＡＮＤ回路１６４と、命令ビットＭ０とインバータ１６１の出力信号とを受けて排他的論理和演算指定信号φｘｏｒを生成するＡＮＤ回路１６５と、命令ビットＭ０およびＭ１を受けて、論理積演算指定信号φａｎｄを生成するＡＮＤ回路１６６を含む。命令ビットＭ０およびＭ１の論理値に従って演算指定信号φｍｉｍｄが１つ活性化されて加算器５０において対応の論理演算を実行する内部接続が設定される。
【０３１３】
この図５２に示すＭＩＭＤ用命令デコーダ７４は、インバータおよびＡＮＤ回路（ＮＡＮＤゲートとインバータ）とを用いた組合せ回路で実現される。このＭＩＭＤ用命令デコーダ７４を、組合せ回路で実現することにより、命令デコーダ７４の占有面積を低減することができ、また高速でデコード動作を行なうことができる。
【０３１４】
なお、図５２に示すＭＩＭＤ用命令デコーダ７４の組合せ回路の構成は一例であり、他の論理ゲートの組合せが用いられてもよい。
【０３１５】
［実施の形態６］
図５３は、この発明の実施の形態６に従うＭＩＭＤ用命令デコーダ７４の構成を概略的に示す図である。図５３に示す構成においても、ＭＩＭＤ用命令は、Ｃレジスタ５３およびＸＬレジスタ５８からのビットＭ１およびＭ０により表現される。しかしながら、このＭＩＭＤ命令ビットは、専用のＭＩＭＤ命令レジスタから与えられても良い。
【０３１６】
図５３において、ＭＩＭＤ用命令デコーダ７４は、命令ビットＭ０およびＭ１に従って、ＭＩＭＤ演算命令ａｌｕ．ｏｐ．ｎｏｔ、ａｌｕ．ｏｐ．ｏｒ、ａｌｕ．ｏｐ．ｘｏｒ、およびａｌｕ．ｏｐ．ａｎｄのいずれかを選択して、加算器５０へ与えるマルチプレクサ（ＭＵＸ）１７０で構成される。
【０３１７】
マルチプレクサ１７０へ与えられるＭＩＭＤ演算命令は、それぞれビット展開されてコードの形態で与えられる。制御ビットＭ０およびＭ１に従って、指定された演算命令を表現するコードが選択されて加算器５０へ与えられる。
【０３１８】
図５４は、図５３に示すマルチプレクサ１７０の具体的構成を概略的に示す図である。図５４において、マルチプレクサ１７０は、各々が、ＭＩＭＤ命令ビットＭ０およびＭ１に従って４対１選択を行なうセレクタＳＥＬ１−ＳＥＬｎを含む。
【０３１９】
ＭＩＭＤ演算命令のビットパターンを生成するために、命令パターンメモリＲＯＭが設けられる。この命令パターンメモリＲＯＭは、読出専用メモリであり、セレクタＳＥＬ１−ＳＥＬｎそれぞれに対応して設けられる各々が４ビット幅のメモリ領域ＭＭ１−ＭＭｎを含む。メモリ領域ＭＭ１−ＭＭｎの同じ番号のビット位置に、同じＭＩＭＤ演算命令のコードビットが格納される。したがって、セレクタＳＥＬ１−ＳＥＬｎにより、演算命令ビットＭ０およびＭ１に従って、これらのメモリ領域ＭＭ１−ＭＭｎの同一ビット位置の格納値が選択されて、演算命令をビットパターン（コード）で表現したｎビット幅の制御パターンが選択されて加算器５０へ与えられる。このビットパターンのビット幅ｎは、加算器５０内における内部構成に応じて設定され、加算器５０内において指定された論理演算を実現するための信号伝搬経路の切換に必要なビット数が用いられる。
【０３２０】
この命令パターンメモリＲＯＭは、主演算回路内のすべてのエントリのＡＬＵ処理エレメントに共通に設けられる。命令パターンメモリＲＯＭは、記憶値が製造工程時のマスクにより設定される。したがって、命令パターンメモリＲＯＭのマスク時に、このマスク値を変更することにより、ＭＩＭＤ命令として実行する命令も、容易に変更することができ、実行すべき演算内容を容易に変更することができる。また、セレクタＳＥＬ１−ＳＥＬｎおよびメモリ領域ＭＭ１−ＭＭｎのビット幅を拡張することにより、容易に、ＭＩＭＤ演算命令の種類の拡張にも対応することができる。
【０３２１】
この命令パターンメモリＲＯＭは、マスクＲＯＭでなく、電気的に書換可能な不揮発性メモリで構成されても良い。この場合でも、記憶内容を電気的に書き換えることにより、論理演算命令の変更及び拡張に容易に対応することができる。
【０３２２】
［実施の形態７］
図５５は、この発明の実施の形態７に従うＭＩＭＤ用命令デコーダ７４の構成を概略的に示す図である。図５５において、ＭＩＭＤ用命令デコーダ７４は、ＭＩＭＤ演算命令を、ビットパターンに展開して格納するメモリ１７５を含む。このメモリ１７５は、ＭＩＭＤ演算命令に対応して４アドレスを有する（１アドレスは、ｎビット幅である）。メモリ１７５は演算命令ビットＭ０およびＭ１をアドレスとして、指定されたアドレスの演算命令パターン（命令コード）を読出す。
【０３２３】
メモリ１７５は、ランダムにアクセス可能なメモリであればよく、通常のＳＲＡＭ（スタティック・ランダム・アクセス・メモリ）およびフラッシュメモリ等を利用することができる。なお、図５５には明確には示していないが、メモリ１７５は、当然、命令ビットＭ０およびＭ１をデコードするアドレスデコーダおよびビットパターン（命令コード）を書込／読出を行なう入出力回路は有している。このメモリ１７５は、レジスタファイルで構成されても良い。
【０３２４】
このメモリ１７５の命令セットの変更時、各命令セットのコード（ビットパターン）を、各対応のデータエントリに格納する。この場合、メモリ１７５内で、シリアル／パラレル変換用のレジスタを入力回路前段に設け、メモリ１７５に１ビット単位で命令コードを対応のデータエントリから転送し、各命令セットのｎビット命令コードをビットシリアルに転送された命令コードをｎビットパラレルに対応のアドレス位置に書込む構成が用いられてもよい。
【０３２５】
また、これに代えて、ＭＩＭＤ命令用デコーダに対してＭＩＭＤ命令転送専用のバスを設け、この専用のバスを介して、命令セットの各命令コードを図１に示す内部バス１４を介して転送して、コントローラ２１の制御の下にメモリ１７５に書込む構成が用いられてもよい。また、主演算回路２０においてコントローラ２１がＭＩＭＤ命令コードを生成して各エントリの命令デコーダ用のメモリ１７５に書き込む構成が用いられても良い。
【０３２６】
また、メモリ１７５を１／２ビット幅のＡポートとｎビット幅のＢポートの２ポート構成とし、メモリ１７５への命令コード書込時にはＡポートを介して書込み、命令コード読出時においてはＢポートを介して読出す構成が用いられても良い。
【０３２７】
図５５に示すように、メモリ（ＲＡＭ）１７５でＭＩＭＤ命令用デコーダ７４を実現することにより、以下の効果が得られる。すなわち、メモリ１７５の保持する命令コードを書換えることにより、並列演算装置（ＭＴＸ）が動作中であっても、使用可能なＭＩＭＤ命令の命令セットを変更することができる。
【産業上の利用可能性】
【０３２８】
この発明は、並列演算を実行するＳＩＭＤ型アーキテクチャを有する演算装置（ＭＴＸ）に適用することにより、高速で、並列性の低い演算をも実行することができ、並列演算処理などに限定されず、論理回路のエミュレータ装置としても利用することができる。
【図面の簡単な説明】
【０３２９】
【図１】この発明が適用される演算装置を利用する処理システムの全体構成を概略的に示す図である。
【図２】図１に示す主演算回路の構成を概略的に示す図である。
【図３】図２に示すメモリセルマットの具体的構成を示す図である。
【図４】図３に示すＡＬＵ群に含まれるＡＬＵ処理エレメントの構成を概略的に示す図である。
【図５】図２に示す主演算回路のポインタレジスタを操作する命令を一覧にして示す図である。
【図６】図２に示す主演算回路のＡＬＵ命令を一覧にして示す図である。
【図７】図２に示す主演算回路のＡＬＵ命令を一覧にして示す図である。
【図８】図２に示す主演算回路のエントリ間データ移動命令を一覧にして示す図である。
【図９】図２に示す主演算回路のエントリ間データ移動命令を一覧にして示す図である。
【図１０】この発明の実施の形態１に従うＡＬＵ処理エレメントの構成を概略的に示す図である。
【図１１】図１０に示すＭＩＭＤ用レジスタのビットと指定されるＭＩＭＤ演算命令の対応を一覧にして示す図である。
【図１２】図１１に示すＭＩＭＤ演算命令の論理を一覧にして示す図である。
【図１３】図３に示すメモリマットのポインタの指定領域を概略的に示す図である。
【図１４】ＭＩＭＤ演算命令の構成を示す図である。
【図１５】図１０に示す加算器の内部構成の一例を概略的に示す図である。
【図１６】図３に示すＡＬＵ間相互接続用スイッチ回路図の配線領域を概略的に示す図である。
【図１７】図１６に示す１ビットおよび４ビットシフト配線領域の配線配置を概略的に示す図である。
【図１８】図１６に示す１６ビットシフト配線領域の配線の配置の一例を示す図である。
【図１９】図１６に示す６４ビットおよび２５６ビットシフト配線領域の配線の配置の構成を概略的に示す図である。
【図２０】図１０に示すＡＬＵ間通信回路の構成を対応の配線とともに概略的に示す図である。
【図２１】図２０に示す受信バッファに対する配線の接続の一例を示す図である。
【図２２】２ビットモードのジグザグコピー命令を示す図である。
【図２３】１ビットモードジグザグコピー命令を示す図である。
【図２４】ジグザグコピーモード時のデータの流れを概略的に示す図である。
【図２５】図１０に示すＡＬＵ間通信回路に対する制御ビットとシフト距離およびシフト方向を一覧にして示す図である。
【図２６】ジグザグコピー操作の一例を示す図である。
【図２７】４ビット加算器の構成の一例を示す図である。
【図２８】図２７に示す４ビット加算器を、組合せ回路で展開した場合の構成を示す図である。
【図２９】図２８に示すステージ４におけるデータエントリのデータの配置を示す図である。
【図３０】図２８に示すステージ４における演算対象ビットの移動を示す図である。
【図３１】図２８に示すステージ４における演算命令決定時の命令用ビットの流れを示す図である。
【図３２】図２８に示すステージ４の演算操作結果時のビットの配置を示す図である。
【図３３】２ビットカウンタの一例を示す図である。
【図３４】図３３に示す２ビットカウンタを、論理ゲートとフリップフロップの順序回路で実現した場合の構成を示す図である。
【図３５】図３４に示す２ビットカウンタの１サイクルのデータのビットの流れを示す図である。
【図３６】１６ビットデータの一斉移動動作に要するサイクル数を一覧にして示す図である。
【図３７】この発明の実施の形態１におけるギャザ処理のデータの流れを示す図である。
【図３８】図３７に示すギャザ処理のエントリ数と必要サイクル数および制御格納領域ビット幅を一覧にして示す図である。
【図３９】図３８に示す表のエントリ数とサイクル数をグラフで示す図である。
【図４０】図３８に示す表のエントリ数と制御ビット幅をグラフで示す図である。
【図４１】この発明の実施の形態１における装置におけるデインタリーブ処理時のデータの流れを示す図である。
【図４２】垂直移動命令を利用したデインタリーブ処理時のデータの流れを概略的に示す図である。
【図４３】図４１および図４２に示すデインタリーブ処理時のエントリ数とサイクル数および動作制御用メモリ領域のビット幅を一覧にして示す図である。
【図４４】図４３に示す表のエントリ数とサイクル数を示す図である。
【図４５】図４３に示す表のエントリ数と動作制御用メモリ領域のビット幅を示す図である。
【図４６】アンチエイリアシング処理時のデータの流れを示す図である。
【図４７】図４６に示すアンチエイリアシング処理におけるエイリアス処理時のデータの流れの一例を示す図である。
【図４８】３２ビットデータのエイリアス処理時のサイクル数および動作制御用メモリ領域のビット幅を一覧にして示す図である。
【図４９】この発明の実施の形態２に従うＡＬＵ処理エレメントの構成を概略的に示す図である。
【図５０】この発明の実施の形態３に従うＡＬＵ処理エレメントの構成を概略的に示す図である。
【図５１】この発明の実施の形態４に従うＡＬＵ処理エレメントの構成を概略的に示す図である。
【図５２】この発明の実施の形態５に従うＭＩＭＤ用命令デコーダの構成の一例を示す図である。
【図５３】この発明の実施の形態６に従うＭＩＭＤ用命令デコーダの他の構成を示す図である。
【図５４】図５３に示すマルチプレクサの構成をより詳細に示す図である。
【図５５】この発明の実施の形態７に従うＭＩＭＤ用命令デコーダの構成を概略的に示す図である。
【符号の説明】
【０３３０】
１  並列演算装置、ＦＢ１−ＦＢｎ  基本演算ブロック、２０  主演算回路、２１  コントローラ、２２  レジスタ群、３０  メモリセルマット、３２  ＡＬＵ群、３４  ＡＬＵ処理エレメント、ｒ０−ｒ３  ポインタレジスタ、４４  ＡＬＵ間相互接続用スイッチ回路、３０Ａ，３０Ｂ  メモリマット、５０，５１  加算器、５２  Ｘレジスタ、５３  Ｃレジスタ、５４  Ｆレジスタ、５５  Ｖレジスタ、５６  Ｎレジスタ、５７  ＸＨレジスタ、５８  ＸＬレジスタ、７０  ＲＥＣＭレジスタ、７１  ＡＬＵ間通信回路（ＲＥＣＭ）、７２  ＭＩＭＤ命令用レジスタ、７４  ＭＩＭＤ用命令デコーダ、９０  シフト配線領域、９１  ±１ビットシフト配線領域、９２  ±４ビットシフト配線領域、９３  ±１６ビットシフト配線領域、９４  ±６４ビットシフト配線領域、９５  ±２５６ビットシフト配線領域、９１ａ  ＋１ビットシフト配線領域、９１ｂ  −１ビットシフト配線領域、９２ａ  ＋４ビットシフト配線領域、９２ｂ  −４ビットシフト配線領域、９３ａａ，９３ａｂ  ＋１６ビットシフト配線領域、９３ｂａ，９３ｂｂ  −１６ビットシフト配線領域、９４ａａ，９４ａｂ  ＋６４ビットシフト配線領域、９４ｂａ，９４ｂｂ  −６４ビットシフト配線領域、９５ａａ，９５ａｂ  ＋２５６ビットシフト配線領域、９５ｂａ，９５ｂｂ  −２５６ビットシフト配線領域、１２０  送信バッファ、１２２  マルチプレクサ、１２４  受信バッファ、１１５  シフト配線群、１１６  受信信号線、１５０  マルチプレクサ、１６１，１６２  インバータ、１６３−１６６  ＡＮＤ回路、１７０  マルチプレクサ、ＳＥＬ１−ＳＥＬｎ  セレクタ、ＲＯＭ  命令パターンメモリ、ＭＭ１−ＭＭｎ  ＲＯＭメモリ領域、１７５  メモリ。
【図１】
2008047031.tif 000003
【図２】
2008047031.tif 000004
【図３】
2008047031.tif 000005
【図４】
2008047031.tif 000006
【図５】
2008047031.tif 000007
【図６】
2008047031.tif 000008
【図７】
2008047031.tif 000009
【図８】
2008047031.tif 000010
【図９】
2008047031.tif 000011
【図１０】
2008047031.tif 000012
【図１１】
2008047031.tif 000013
【図１２】
2008047031.tif 000014
【図１３】
2008047031.tif 000015
【図１４】
2008047031.tif 000016
【図１５】
2008047031.tif 000017
【図１６】
2008047031.tif 000018
【図１７】
2008047031.tif 000019
【図１８】
2008047031.tif 000020
【図１９】
2008047031.tif 000021
【図２０】
2008047031.tif 000022
【図２１】
2008047031.tif 000023
【図２２】
2008047031.tif 000024
【図２３】
2008047031.tif 000025
【図２４】
2008047031.tif 000026
【図２５】
2008047031.tif 000027
【図２６】
2008047031.tif 000028
【図２７】
2008047031.tif 000029
【図２８】
2008047031.tif 000030
【図２９】
2008047031.tif 000031
【図３０】
2008047031.tif 000032
【図３１】
2008047031.tif 000033
【図３２】
2008047031.tif 000034
【図３３】
2008047031.tif 000035
【図３４】
2008047031.tif 000036
【図３５】
2008047031.tif 000037
【図３６】
2008047031.tif 000038
【図３７】
2008047031.tif 000039
【図３８】
2008047031.tif 000040
【図３９】
2008047031.tif 000041
【図４０】
2008047031.tif 000042
【図４１】
2008047031.tif 000043
【図４２】
2008047031.tif 000044
【図４３】
2008047031.tif 000045
【図４４】
2008047031.tif 000046
【図４５】
2008047031.tif 000047
【図４６】
2008047031.tif 000048
【図４７】
2008047031.tif 000049
【図４８】
2008047031.tif 000050
【図４９】
2008047031.tif 000051
【図５０】
2008047031.tif 000052
【図５１】
2008047031.tif 000053
【図５２】
2008047031.tif 000054
【図５３】
2008047031.tif 000055
【図５４】
2008047031.tif 000056
【図５５】
2008047031.tif 000057