(57)【要約】【課題】  この発明は、画像データ処理に伴う命令の命令実行サイクルを減らすことを目的とする。【解決手段】  この発明は、プログラムを解読しプロセッサ全体を制御するグローバルプロセッサ２と、複数データを処理するための複数のプロセッサエレメント３ａを備えたプロセッサエレメントブロック３と、を有するＳＩＭＤ型プロセッサにおいて、グローバルプロセッサ２は、対応するＰＥ番号を複数のプロセッサエレメント３ａに転送し、グローバルプロセッサ２のＧ０レジスタからのデータを任意のプロセッサエレメント３ａのＡレジスタ３５ａに転送する。【選択図】  図２
2006351043.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを解読しプロセッサ全体を制御するグローバルプロセッサと、複数のデータを処理するために、レジスタファイルと演算アレイから構成されるプロセッサエレメントを複数備えたプロセッサエレメントブロックと、を有するＳＩＭＤ型プロセッサにおいて、前記グローバルプロセッサは、プロセッサエレメントに対して制御信号を出力し、この制御信号によりプロセッサエレメントに対応するプロセッサエレメント番号を全プロセッサエレメントの演算アレイの入力値に設定することを特徴とするＳＩＭＤ型プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は同一の命令で複数データに対して同じ処理を行うＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ-ｓｔｒｅａｍ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ-
ｓｔｒｅａｍ）方式のプロセッサに関し、特に、画像データの高速処理に適したＳＩＭＤ型プロセッサに関する。
【背景技術】
【０００２】
近年、デジタル複写機やファクリミリ装置等における画像処理では、画素数の増加、画像処理の多様化などにより画質の向上が図られている。この画質の向上に伴い、処理すべき画素データ数の増加やデータの処理方法が複雑化している。こういった画像処理のデータ処理は複数のデータに対して同じ処理をすることが多いため、１命令で１つのデータを処理するＳＩＳＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ-ｓｔｒｅａｍ  Ｓｉｎｇｌｅ  Ｄａｔａ-ｓｔｒｅａｍ）方式のプロセッサより、１命令で複数のデータを処理する、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ-ｓｔｒｅａｍ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ-ｓｔｒｅａｍ）方式のプロセッサが用いられていることが多い。
【０００３】
ＳＩＭＤ型プロセッサは、複数のデータを処理するために算術論理演算器とレジスタファイルを備えたプロセッサエレメント（ＰＥ）と呼ばれるブロックを持ち、複数のデータを一度に処理するためにプロセッサエレメントを複数個備えている。また、ＳＩＭＤ型プロセッサにはプログラムによってプロセッサ全体を制御するために、プログラム解読部、制御部、算術論理演算器、レジスタ、メモリをもったグローバルプロセッサと呼ばれるブロックを１つ備える。
【０００４】
グローバルプロセッサからプロセッサエレメントにデータの転送を行うときには、プロセッサエレメントにシフトレジスタを設け、すべてのプロセッサエレメントのシフトレジスタをチェーン構造に接続し、プロセッサエレメントの片端をグローバルプロセッサに接続し、シフトレジスタをシフトしていくことでデータを転送したり、或いは、グローバルプロセッサからすべてのプロセッサエレメントにバスを設け、直接データを転送するようにしている。
【０００５】
プロセッサエレメントをシフトする場合は、全プロセッサエレメント分のシフトを行う必要がある。また、直接データを書き換える場合は、全プロセッサエレメントを書き換えるか、特定の１つのプロセッサエレメントを制御部から選択信号によって選択し、書き換えることになる。１つのプロセッサエレメントの書き換えなら１命令サイクルですむが、複数プロセッサエレメントなどでは複数命令サイクルが必要となる。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
プロセッサエレメントの演算は通常実行条件フラグによって演算の有無を決定する。実行条件フラグはプロセッサエレメントの演算アレイで行われる演算の結果によりセット／リセットしたり、また、グローバルプロセッサの制御部からの制御信号により直接セット／リセットする。
【０００７】
従来のＳＩＭＤ型プロセッサでは演算の結果によって書き換えるか、全プロセッサエレメントの条件フラグにデータを転送することでセット／リセットしたりしていた。しかし、プロセッサエレメントの演算が特定部分であった場合、例えばある範囲内のプロセッサエレメントを演算対象としたり、ｎ個（ｎ＝１、２、３・・・）おきのプロセッサエレメントを演算対象としたりする場合、実行条件フラグの設定を対象とするプロセッサエレメントに設定するのは困難であった。このため意図的に対象と非対象のプロセッサエレメントで異なるデータを設定し演算させることで条件フラグを立てたり、対象とするプロセッサエレメントの条件フラグに１つずつ設定したりした。
【０００８】
また、画素データ数の増加やデータ処理方法の複雑化に伴い、同時に処理すべきデータ数も増加し、プロセッサエレメントの数の増加となっている。プロセッサエレメントを増加させた場合、論理検証、ＩＣ試験などで使用するテストパターンの量も増加する。１つのプロセッサエレメントに対して行うテストを全プロセッサエレメントに対して行うためには、プロセッサエレメント数のテストパターンが必要となるか、全プロセッサエレメントに対してテスト用の回路を設けたり、テスト結果を出力するポートを設ける必要がある。
【０００９】
この発明は、上記した従来の難点に鑑みなされたものにして、有効な命令と命令を実現する手段を設けることで、命令実行サイクルを減らすことを目的とする。
【課題を解決するための手段】
【００１０】
この発明は、プログラムを解読しプロセッサ全体を制御するグローバルプロセッサと、複数データを処理するための複数のプロセッサエレメントを備えたプロセッサエレメントブロックと、を有するＳＩＭＤ型プロセッサにおいて、前記グローバルプロセッサは、プロセッサエレメント番号を全プロセッサエレメントに設定する命令を設け、命令実行によってプロセッサエレメントに対して制御信号を出力し、制御信号によりプロセッサエレメントに対応するプロセッサエレメント番号を演算アレイの入力データとして用いる手段を設ける。
【００１１】
上記した構成によれば、グローバルプロセッサからの制御信号によってプロセッサエレメント（ＰＥ）番号をプロセッサエレメントのＡレジスタに入力できる。各プロセッサエレメントに格納されたＰＥ番号は、プロセッサエレメントのテストをするときに用いることができる。例えば、ＰＥシフトをテストする場合など有効になる。
【００１２】
上記の構成において、グローバルプロセッサの汎用レジスタから、汎用レジスタのビットサイズを持ったバスを１組設け、全プロセッサエレメントの演算アレイ内のレジスタに接続し、データを転送する手段を設ける。
【００１３】
上記した構成によれば、例えば、グローバルプロセッサのＧ０レジスタからバスでプロセッサエレメントのＡレジスタに接続し、任意のプロセッサエレメントのＡレジスタにＧ０の値を転送することができる。
【００１４】
さらに、前記データ転送手段は、前記プロセッサエレメント番号入力手段からのプロセッサエレメント番号と即値による範囲指定の上限値、下限値との比較を行うコンパレータを設け、特定のプロセッサエレメントのみ制御を行う。
【００１５】
従来であればある範囲だけのデータ転送はその範囲内の実行条件フラグを一つずつセットし、実行条件フラグによって転送の有無を決定していたため、転送数だけのサイクルを必要としたが、上記した構成によれば、ある範囲だけのプロセッサエレメントを指定できるＭＧＡＡ命令を使用することで、１サイクルでの処理が可能である。
【００１６】
また、前記データ転送手段は、前記プロセッサエレメント番号入力手段からのプロセッサエレメント番号と、即値のビットパターンによる範囲指定を行うビット位置指定と、即値のビットパターンによるマスキングを行うビットマスク指定によってプロセッサエレメントを選択する、パターンマッチングブロックを設け、特定のプロセッサエレメントにのみ制御を行う。
【００１７】
上記した構成によれば、１つおき、３つおき等のＮ個おきのプロセッサエレメントの指定を行いデータを転送することができる。
【００１８】
また、前記データ転送手段は、グローバルプロセッサ内の汎用レジスタからの値を、前記コンパレータもしくはパターンマッチングブロックに転送する経路を設け、ポインタ指定により行う。
【００１９】
上記した構成により、グローバルプロセッサ命令での演算の結果を繰り張るプロセッサ内の汎用レジスタに格納し、ダイナミックな指定が可能となる。
【００２０】
前記ポインタ指定で、指定後の汎用レジスタにおけるデータのインクリメントを行うこと特徴とする。
【００２１】
上記した構成によれば、演算後に１加算し次の演算範囲の縮小が可能となる。
【００２２】
また、前記プロセッサエレメントには、演算の結果をレジスタに格納するか否かを制御し、演算の結果もしくはグローバルプロセッサからのからの制御信号によりセット／リセット可能な複数のフラグビットを持ち、セット／リセット前のフラグビットの状態と、新しくセット／リセットする値との倫理演算を行う。ＡＮＤ／ＯＲ論理演算器を設け、演算後の値をフラグビットにセット／リセットを行うことを特徴とする。
【００２３】
前記フラグビット指定は、オペランドの即値指定によって特定のプロセッサエレメントから特定のプロセッサエレメントまでの範囲を指定することにより行われることを特徴とする。
【００２４】
また、前記フラグビット指定は、オペランドの即値指定によって、２進数で表わされたプロセッサエレメント番号にマッチするプロセッサエレメントを指定するビット位置指定と、そのビット位置指定の任意ビットをマスクするビットマスクによるプロセッサエレメント指定により行われることを特徴とする。
【００２５】
前記フラグビット指定は、グローバルプロセッサの汎用レジスタを使用し、ポインタ指定により行われることを特徴とする。
【００２６】
上記した構成によれば、複数のまたがった不規則なエリアの指定を行うとき有効となる。
【発明の効果】
【００２７】
上記した請求項１によれば、図２に示すように、グローバルプロセッサからの制御信号によってＰＥ番号をＡレジスタに入力できる。各プロセッサエレメントに格納されたＰＥ番号は、プロセッサエレメントのテストをするときに用いる。たとえばＰＥシフトをテストする場合など有効になる。従来であれば同じ値をＡレジスタにセットしプロセッサエレメントの全Ａレジスタの値を外部に出力する手段を設けるか、全プロセッサエレメントのＡレジスタに違った値をひとつずつ転送し、それら順番にグローバルプロセッサに転送し、グローバルプロセッサで比較するなどする。前者であれば配線量が莫大となりコストが増大する。後者であれば命令サイクルが値をセットするだけで２５６サイクル必要となる（プロセッサエレメントが２５６個の場合）。この請求項１の発明であればＬＤＰＮの命令で一度に全プロセッサエレメントのＡレジスタに値をセットし、シフトしたのち、レジスタファイルに結果値を格納し、判定用にＬＤＰＮでセットした値をすべてシフト量にしたがって加減算し期待値を設定し、前述の結果値と期待値を比較することによってテストが可能となる。値をセットするためには１サイクルのみでよい。
【００２８】
また、ＬＤＰＮはｎ個おきのプロセッサエレメントの演算指定にも使用できる。たとえば５個おき（ＰＥ０，ＰＥ５，ＰＥ９，．．．）の選択を行いたい場合、従来であればそれぞれのプロセッサエレメント毎に条件フラグの設定を行うために選択したいプロセッサエレメントの数だけの処理を必要とした。この発明では、ＬＤＰＮで全プロセッサエレメントにＰＥ番号を設定し（ＰＥ０，ＰＥ１，ＰＥ２，．．．，ＰＥ２５５のＡレジスタの値を順に指定すると０，１，２，３，．．．２５５となる）、Ａレジスタの値を５で除算し、余りを格納すると（これらの演算はＡＬＵによる減算の繰り返しで最終にＡレジスタに残った値が余りとなる。除算の引き放し法、引き戻し法で可能。）、０，１，２，３，４，０，１，２，３，４，０，１，．．．，０となり、ＰＥ命令でＣＭＰ命令（ＣＭＰ命令はＡレジスタとレジスタファイルのデータを比較し結果をＴレジスタの指定ビットに反映させる。）を使用し、結果をＴレジスタに反映させることで次の演算のプロセッサエレメント選択ができる。従来方法であればプロセッサエレメントの指定数分のサイクルが必要であったが、この発明であればプロセッサエレメントの指定数にかかわらず、ＬＤＰＮで１サイクル、除算で１６サイクル、ＣＭＰ命令で１サイクルで対象とするプロセッサエレメントの選択が完了する。
【００２９】
グローバルプロセッサの汎用レジスタから、汎用レジスタのビットサイズを持ったバスを１組設け、全プロセッサエレメントの演算アレイ内のレジスタに接続し、データを転送する手段を設けることで、図２に示すように、グローバルプロセッサのＧ０からバスですべてのプロセッサエレメントのＡレジスタに接続し、ＭＧＡＡ、ＭＧＡＢ命令を設けることで任意のプロセッサエレメントのＡレジスタにＧ０レジスタの値を転送することができる。
【００３０】
前記データ転送手段として、前記プロセッサエレメント番号入力手段からのプロセッサエレメント番号と即値による範囲指定の上限値、下限値との比較を行うコンパレータを設け、特定のプロセッサエレメントのみ制御を行うように構成すれば、ＭＧＡＡ命令を設け、図５に示すようなコンパレータを各プロセッサエレメントに設け、各プロセッサエレメントの保持しているＰＥ番号と、即値オペランドで指定した値の上限値と下限値の比較をコンパレータで行い、範囲内にあればそのプロセッサエレメントの演算を実行する。演算の実行、非実行はＡＬＵの結果をＡレジスタが更新しないように制御する（ラッチ信号を更新しない）。従来であれば、ある範囲だけのデータ転送はその範囲内の実行条件フラグを一つずつセットし、実行条件フラグによって転送の有無を決定していたため、転送数だけのサイクルを必要としたが、以上によりある範囲だけのプロセッサエレメントを指定できるＭＧＡＡを使用することで、１サイクルでの処理が可能である。
【００３１】
また、前記データ転送手段としては、前記プロセッサエレメント番号入力手段からのプロセッサエレメント番号と、即値のビットパターンによる範囲指定を行うビット位置指定と、即値のビットパターンによるマスキングを行うビットマスク指定によってプロセッサエレメントを選択する、パターンマッチングブロックを設け、特定のプロセッサエレメントにのみ制御を行うように構成すれば、図５に示すような各プロセッサエレメントに装備されたビットマスク指定を行うマスクパターン回路により１つおき、３つおき等のＮ個おきのＰＥ指定を行いデータを転送することができる。
【００３２】
また、前記データ転送手段として、グローバルプロセッサ内の汎用レジスタからの値を、前記コンパレータもしくはパターンマッチングブロックに転送する経路を設け、ポインタ指定により行うように構成すれば、図５に示すようにグローバルプロセッサのＧ２レジスタとＧ３レジスタは全プロセッサエレメントに対してバス接続されており、ＳＣＵからの即値データとセレクトされるためＧ２レジスタとＧ３レジスタによる指定が可能となる。これによりグローバルプロセッサ命令での演算の結果をＧ２、Ｇ３レジスタに格納し、ダイナミックな指定が可能となる。
また、グローバルプロセッサではＡＬＵによってＧ２の減算が可能なため、オペランドにインクリメント演算を設けることで、演算後に１加算し次の演算範囲の縮小が可能となる。
【００３３】
また、前記プロセッサエレメントには、演算の結果をレジスタに格納するか否かを制御し、演算の結果もしくはグローバルプロセッサからのからの制御信号によりセット／リセット可能な複数のフラグビットを持ち、セット／リセット前のフラグビットの状態と、新しくセット／リセットする値との倫理演算を行う。ＡＮＤ／ＯＲ論理演算器を設け、演算後の値をフラグビットにセット／リセットを行うように構成すれば、図４のようにＴレジスタの入力データにＡＮＤ、ＯＲを行う論理演算器を設け、前のＴレジスタの値をフィードバックさせ、新しいデータを論理演算させることでＴレジスタのセット、リセットだけでなく、ＡＮＤ、ＯＲを行うことができる。これによってたとえば複数のまたがった不規則なエリアの指定を行うとき有効となる。ＰＥ１０〜ＰＥ１５、ＰＥ２６〜ＰＥ４０、ＰＥ１００〜ＰＥ１１１といったエリアを指定する場合、前述のＬＤＴ命令、ＳＥＴＴＡ命令などで全プロセッサエレメントの特定フラグとクリアしておき、ＳＥＴＴＡのＯＲ演算（／Ｏを記述）を３回行うことで可能である。従来であれば、対象のプロセッサエレメントに一つずつセットしなければならず、セットするプロセッサエレメント分の命令サイクルが必要となる。
記述は以下のとおりである。
【００３４】
ＬＤＴ  ＃０ ；すべてのプロセッサエレメントのＴレジスタのすべてのＢＩＴに”０”を転送する。
ＳＥＴＴＡ／Ｔ１／Ｏ  ＃１０，＃１５
ＳＥＴＴＡ／Ｔ１／Ｏ  ＃２６，＃４０
ＳＥＴＴＡ／Ｔ１／Ｏ  ＃１００，＃１１１
【発明を実施するための最良の形態】
【００３５】
以下、この発明の実施の形態につき図面を参照して説明する。図１は、この発明の実施の形態にかかるＳＩＭＤ型プロセッサの構成を示すブロック図である。
【００３６】
まず、この発明にかかるＳＩＭＤ型プロセッサの全体構成について、図１に従い説明する。この発明のＳＩＭＤ型プロセッサ１は、図１に示すように、グローバルプロセッサ（ＧＰ）２、本実施形態では２５６組の後述するプロセッサエレメント（ＰＥ）３ａを備えたプロセッサエレメントブロック３、インタフェース４から構成される。インタフェース４はグローバルプロセッサ２の命令に基づき、例えば外部のイメージスキャナなどから演算対象となるデータをプロセッサ内部の入出力用のレジスタフィル３１に与えるとともに、演算処理されたデータをレジスタファイル３１から外部のプリンタなどへ転送するものである。
【００３７】
プロセッサエレメントブロック３は、ＳＩＭＤ型プロセッサの外部に設けられたスキャナなどの入力装置から画像データを入力したり、外部のプリンタなどの出力装置に画像データを出力したり、グローバルプロセッサ２から演算アレイ３６を経由してデータの入出力を行うレジスタファイル３１と、レジスタファイル３１からのデータやグローバルプロセッサ２からのデータを演算処理する演算アレイ３６をそなえる。ＳＩＭＤ方式では、複数のデータを同時に処理するため、プロセッサエレメントブロック３は、複数のプロセッサエレメント３ａ…で構成される。
【００３８】
グローバルプロセッサ２は、プロセッサエレメントブロック３、インタフェース４を制御する。このグローバルプロセッサ２は、各種制御信号を送るＳＩＳＤ方式のプロセッサで構成されている。
【００３９】
グローバルプロセッサ２の構成は図２に示すように、命令を解読し、各種制御信号を発生するシーケンスユニット（以下、ＳＣＵという）２２と、グローバルプロセッサ命令により算術論理演算を行う算術論理演算器（以下、ＡＬＵという。）２３、このプロセッサのプログラム格納用のプログラムＲＡＭ２１と演算データ格納用のデータＲＡＭ２４、図には明記していないが、割り込み制御回路、外部Ｉ／Ｏ制御回路、ＧＰ演算制御回路とを、備える。
【００４０】
さらに、グローバルプロセッサ２は、プログラムのアドレスを保持するプログラムカウンタ（ＰＣ）、演算処理のデータ格納のための汎用レジスタであるＧ０〜Ｇ３レジスタ、レジスタ退避、復帰時に退避先データＲＡＭのアドレスを保持しているスタックポインタ（ＳＰ）、サブルーチンコール時にコール元のアドレスを保持するリンクレジスタ（ＬＳ）、同じくＩＲＱ時とＮＭＩ時の分岐元アドレスを保持するＬＩ、ＬＮレジスタ、プロセッサの状態を保持しているプロセッサステータスレジスタ（Ｐ）が内蔵されている。
【００４１】
前述したＳＣＵ２２には、図示はしていないが、ＧＰ命令を解読し、主にグローバルプロセッサ２内の各ブロックに制御信号を発生するＧＰインストラクションデコーダ（以下、ＧＤＣという）と、プロセッサエレメント（ＰＥ）命令を解読し、主にプロセッサエレメントブロック３内の各ブロックに制御信号を発生するＰＥインストラクションデコーダ（以下、ＰＤＣという）を、備える。すなわち、このプロセッサには、主にグローバルプロセッサ２内での演算処理を受け持つＧＰ命令と、プロセッサエレメントブロック３内もしくはプロセッサエレメント３ａ…間での演算処理を受け持つＰＥ命令に分類される。
【００４２】
また、前述したプロセッサエレメントブロック３の演算アレイ３６は、マルチプレクサ３２、シフト拡張回路３３、算術論理演算器３４（以下、「ＡＬＵ３４」という）、及びＡレジスタ３５ａ、Ｆレジスタ３５ｂを備える。
【００４３】
前述したグローバルプロセッサ２のＳＣＵ２２は、インタフェース４に対してデータ転送のための動作設定用データ及びコマンド等を送る。インタフェース４は、シーケンスユニット２２の動作設定用データ及びコマンドに基づき、プロセッサエレメント３ａのアドレス指定のためのアドレス制御信号、プロセッサエレメント３ａを構成するレジスタ３１ｂにデータのリード／ライトを指示するためのリード／ライト制御信号、クロック信号を与えるためのクロック制御信号を生成する。
【００４４】
ここで、リード／ライト制御信号のうちライト制御信号とは、演算処理されるデータをデータバスより取得して、プロセッサエレメント３ａのレジスタファイル３１に保持させるための信号をいう。一方、リード／ライト制御信号のうちリード制御信号とは、プロセッサエレメント３ａのレジスタファイル３１が保持している演算処理されたデータを、データバスへ与えるようレジスタに指示するための信号をいう。
【００４５】
次に、この実施形態におけるプロセッサエレメントブロック３につき、図３を参照してさらに説明する。
【００４６】
この実施の形態におけるプロセッサエレメントブロック３は、隣り合う２つのプロセッサエレメント３ａに偶数番号、奇数番号を割り付けて１組とすると共に、この１組のプロセッサエレメント３ａには同一のアドレスを割り付けている。
【００４７】
上記したメモリコントローラ５は、グローバルプロセッサ２からのコマンドを受けて、プロセッサエレメントブロック３を構成するプロセッサエレメント３ａのアドレスを指定する信号（以下、「アドレス指定信号」という。）を作成し、インタフェース４からアドレスバス４１ａを介してプロセッサエレメント３ａのレジスタコントローラ３１ａヘ送る。また、インタフェース４は、プロセッサエレメント３ａを構成するレジスタ３１ｂに対して、データのリード／ライトを指示するための信号（以下、「リード／ライト指示信号」という。）を、リード／ライト信号線４５ａ（４５ｂ）を介してプロセッサエレメント３ａのレジスタコントローラ３１ａヘリード／ライト信号を与える。偶数用リード／ライト信号線４５ａは、偶数のプロセッサエレメント３ａにリード／ライト信号を与え、奇数用リード／ライト信号線４５ｂは、奇数のプロセッサエレメント３ａにリード／ライト信号を与える。
【００４８】
また、インタフェース４は、クロック信号線４１ｃを介してプロセッサエレメント３ａのレジスタコントローラ３１ａへクロック信号を与える。
【００４９】
さらに、上述したように、ＳＩＭＤ型プロセッサ１の外部に設けられたイメージスキャナ等で読み取られた画像データは一端図示しないバッファメモリに格納され、インタフェース４は、バッファメモリからデータを、本実施形態では１６ビットのパラレルデータとして取り込む。この１６ビットのデータは、偶数番号が割り付けられたプロセッサエレメント３ａに与えられる８ビットと、奇数番号が割り付けられたプロセッサエレメント３ａに与えられる８ビットとから構成されている。それぞれ８ビットデータは偶数用データバス４６ａ及び奇数用データバス４６ｂに与えられる。この８ビットのパラレルデータについては、データに応じて適宜変更しても問題ない。このデータバス４６ａ，４６ｂは、レジスタ３１ｂに保持されている演算処理されたデータが、ＳＩＭＤ型プロセッサ１の外部に設けられたプリンタなどへバッファメモリを介して送られる時にも使用される。
【００５０】
また、グローバルプロセッサ２の内蔵するレジスタは、プロセッサエレメントブロック３のＡレジスタ３５ａ、Ｆレジスタ３５ｂに接続されており、このレジスタ３５ａ、３５ｂとの間でシーケンスユニット２２の制御によりデータの交換が行われる。
【００５１】
プロセッサエレメントブロック３は、図２及び図３に示すように、レジスタファイル３１、マルチプレクサ３２、シフト・拡張回路３３、ＡＬＵ３４、レジスタ３５ａ、３５ｂ、３５ｃ、を一単位とする複数のプロセッサエレメント３ａを備える。レジスタファイル３１には、１つのプロセッサエレメント３ａ単位に８ビットのレジスタが３２本内蔵されており、本実施形態では２５６個のプロセッサエレメント分の組がアレイ構成になっている。
【００５２】
レジスタの外部からのアクセスは１つの外部ポートで各プロセッサエレメント３ａの１つのレジスタがアクセス可能であり、外部から入力されたアドレスでプロセッサエレメントの番号（０〜２５５）を指定する。したがって、レジスタアクセスの外部ポートは全部で２４組搭載されている。また、外部からアクセスされるデータは上述したように、偶数のプロセッサエレメント３ａと奇数のプロセッサエレメント３ａの１組で１６ビットデータとなっており、１回のアクセスで２つのレジスタを同時にアクセスしている。
【００５３】
本実施形態では、プロセッサエレメント３ａの数を２５６個として説明するが、これに限定されるものでなく適宜変更して使用してもよい。このプロセッサエレメント３ａには、グローバルプロセッサ２のシーケンスユニット２２により、インタフェース４に近い順に０から２５５までのアドレスが割り付けられる。
【００５４】
プロセッサエレメント３ａのレジスタファイル３１は、レジスタコントローラ３１ａ、２種類のレジスタ３１ｂ、３１ｃを備える。本実施形態では、図３に示すように、一単位のプロセッサエレメント３ａ毎に、レジスタコントローラ３１ａとレジスタ３１ｂとを２４組備え、さらにレジスタ３１ｃを８個備えている。
【００５５】
本実施形態では、レジスタ３１ｂ、３１ｃを８ビットのものとして扱うが、これに限定されるものでなく適宜変更して使用してもよい。
【００５６】
レジスタファイル３１の２種類のレジスタ３１ｂ、３１ｃは、内蔵するＲ０、Ｒ１、Ｒ２．．．Ｒ３１と呼ばれているレジスタを上記のように区分したものである。それぞれのレジスタファイル３１は演算アレイ３６に対して１つの読み出しポートと１つの書き込みポートを備えており、８ビットのリード／ライト兼用のバスで演算アレイ３６からアクセスされる。３２本のレジスタの内、２４本はすなわち、レジスタ３１ｂは、プロセッサ外部からアクセス可能であり、外部からクロックとアドレス、リード／ライト制御を入力することで任意のレジスタを読み書きできる。
【００５７】
レジスタコントローラ３１ａは、インタフェース４と、上述したアドレスバス４１ａ、偶数用リード／ライト信号線４５ａ、奇数用リード／ライト信号線４５ｂ、クロック信号線４１ｃを介して接続されている。
【００５８】
インタフェース４は、アドレス制御信号を受けると、アドレス指定信号をアドレスバス４１ａを介してプロセッサエレメントブロック３ヘ送る。これにより、一組のプロセッサエレメント３ａ、即ち２つのプロセッサエレメント３ａが同時にアドレス指定される。レジスタコントローラ３１ａは、送られてきたアドレス指定信号をデコードし、デコードしたアドレスと、自己に割り付けられたアドレスとが一致する場合には、クロック信号４１ｃを介して送られてきたクロック信号に同期して、リード／ライト信号４５ａ或いは４５ｂを介して送られてきたリード／ライト指示信号を得る。具体的には、偶数番号が割り付けられているレジスタコントローラ３１ａは、偶数用リード／ライト信号４５ａを介してインタフェース４から送られてきたリード／ライト指示信号を得る。一方、奇数番号が割り付けられているレジスタコントローラ３１ａは、奇数用リード／ライト信号４５ｂを介してインタフェース４から送られてきたリード／ライト指示信号を得る。このとき一組を構成するプロセッサエレメント３ａのレジスタコントローラ３１ａへ送られるリード／ライト指示信号はそれぞれ異なるものであってもよい。即ち、偶数番号が割り付けられているレジスタコントローラ３１ａへ送られる指示信号がリード指示であるとき、奇数番号が割り付けられているレジスタコントローラ３１ａへ送られる指示信号はライト指示であってもよい。そして、このリード／ライト指示信号はレジスタ３１ｂに与えられる。
【００５９】
レジスタコントローラ３１ａから双方のプロセッサエレメント３ａに対し、ライト指示信号が送られてきた場合には、偶数番号が割り付けられたプロセッサエレメント３ａのレジスタ３１ｂは、演算処理されるデータ（８ビット）を偶数用データバス４６ａより取得して保持する。また、奇数番号が割り付けられたプロセッサエレメント３ａのレジスタ３１ｂは、演算処理されるデータ（８ビット）を奇数用データバス４６ｂより取得して保持する。一方、レジスタコントローラ３１ａから双方のプロセッサエレメント３ａに対し、リード指示信号が送られてきた場合には、偶数番号が割り付けられたプロセッサエレメント３ａのレジスタ３１ｂは、演算処理されたデータ（８ビット）を偶数用データバス４６ａへ送る。また、奇数番号が割り付けられたプロセッサエレメント３ａのレジスタ３１ｂは、演算処理されたデータ（８ビット）を奇数用データバス４６ｂへ送る。
【００６０】
このように、一度のアドレス指定により、偶数番号が割り付けられたプロセッサエレメント３ａにデータ転送できるとともに、奇数番号が割り付けられたプロセッサエレメント３ａにもデータ転送できる。このため、データの転送回数を少なくすることができ、データ転送を高速にできる。
【００６１】
レジスタ３１ｂは、後述するＡＬＵ３４でこれから演算される外部から入力されたデータを保持したり、或いはＡＬＵ３４で演算処理されたデータを外部へ出力するために保持するものであり、いわゆる入力レジスタとしても、或いは出力レジスタとしても機能する。また、演算処理されるデータ、或いは演算されたデータを一時的に保持するといった、後述するレジスタ３１ｃとしての機能も有する。なお、本実施形態では、レジスタ３１ｂは８ビットのデータを保持できるものとして扱うが、データに応じて適宜変更しても問題ない。上述したレジスタコントローラ３１ａからライト指示信号が与えられると、レジスタ３１ｂは演算処理されるデータをデータバス４６ａまたはデータバス４６ｂより取得して保持する。一方、レジスタコントローラ３１ａからリード指示信号が送られてくると、レジスタ３１ｂは保持している演算処理されたデータをデータバス４６ａまたはデータバス４６ｂへ与える。このデータはインタフェース４から図示しないバッファメモリから外部へ出力される。
【００６２】
また、レジスタ３１ｂは、本実施形態においては８ビットデータをパラレルで転送するデータバス３７を介してマルチプレクサ３２に接続されている。ＡＬＵ３４で演算処理されるデータ、或いはＡＬＵ３４で演算処理されたデータは、このデータバス３７を介して、レジスタ３１ｂとの間で転送される。この転送は、グローバルプロセッサ２のＳＣＵ２２からの指示によって、グローバルプロセッサ２に接続されたリード信号線２６ａ、ライト信号線２６ｂを介して行われる。具体的には、グローバルプロセッサ２のシーケンスユニット２２から、リード信号線２６ａを介してリード指示信号が送られてくると、レジスタ３１ｂは保持している演算処理されるデータをデータバスへ置く。このデータはＡＬＵ３４へ送られ演算処理される。一方、グローバルプロセッサ２のＳＣＵ２２から、ライト信号線２６ｂを介してライト指示信号が送られてくると、レジスタ３１ｂはデータバス３７を介して送られてきたＡＬＵ３４で演算処理されたデータを保持する。
【００６３】
レジスタ３１ｃは、レジスタ３１ｂより与えられた演算処理されるデータ、或いは演算されたデータがレジスタ３１ｂに与えられる前に、そのデータを一時的に保持するものである。このレジスタ３１ｃは、上述したレジスタ３１ｂと異なり、インタフェース４を介して、外部との間においてデータ転送はしない。
【００６４】
演算アレイ３６は、マルチプレクサ３２シフト／拡張回路３３、１６ビットＡＬＵ３４及び１６ビットのＡレジスタ３５ａ、Ｆレジスタ３５ｂを備えている。
【００６５】
プロセッサエレメント３ａの命令による演算は、基本的にレジスタファイル３１から読み出されたデータをＡＬＵ３４の片側の入力としてもう片側にはレジスタ３５のＡレジスタの内容を入力として結果をＡレジスタに格納する。したがって、Ａレジスタ３５ａとレジスタファイル３１のＲ０〜Ｒ３１レジスタとの演算が行われることとなる。レジスタファイル３１と演算アレイ３６との接続に（７ｔｏ１）のマルチプレクサ３２を置いており、プロセッサエレメント方向で左に１、２、３つ離れたデータと右に１、２、３つ離れたデータ、中央のデータを演算対象として選択している。また、レジスタファイル３１の８ビットのデータはシフト／拡張回路３３により任意ビットの左シフトしてＡＬＵ３４に入力される。さらに、図２に示すように、８ビットの条件レジスタ（Ｔ）３５ｃにより、プロセッサエレメント３ａごとに演算実行の無効／有効の制御をしており、特定のプロセッサエレメント３ａだけを演算対象として選択できるように構成している。
【００６６】
上記したように、マルチプレクサ３２は、自己のプロセッサエレメント３ａに備えられた上記データバス３７に接続されるとともに、両隣３つのプロセッサエレメント３ａに備えられたデータバス３７にも接続されている。このマルチプレクサ３２は７つのプロセッサエレメント３ａから１つを選択し、その選択したプロセッサエレメント３ａにおけるレジスタ３１ｂ、３１ｃで保持されているデータをＡＬＵ３４へ送る。或いはＡＬＵ３４で演算処理されたデータを、選択したプロセッサエレメント３ａにおけるレジスタ３１ｂ、３１ｃへ送る。これによって、隣のプロセッサエレメント３ａにおけるレジスタ３１ｂ、３１ｃで保持されているデータを利用した演算処理が可能になり、ＳＩＭＤ型プロセッサ１の演算処理能力を高めることができる。
【００６７】
シフト／拡張回路３３は、マルチプレクサ３２から送られてきたデータを所定ビットシフトしてＡＬＵ３４へ送る。或いはＡＬＵ３４から送られてきた演算処理されたデータを所定ビットシフトしてマルチプレクサ３２へ送る。
【００６８】
ＡＬＵ３４は、シフト／拡張回路３３から送られてきたデータと、レジスタ３５に保持されているデータとに基づき算術論理演算を行う。なお、本実施形態では、ＡＬＵ３４は１６ビットのデータに対応できるものとして扱うが、データに応じて適宜変更しても問題ない。演算処理されたデータは、レジスタ３５に保持され、シフト／拡張回路３３へ転送されたり、或いはグローバルプロセッサ２の汎用レジスタ２５へ転送される。
【００６９】
グローバルプロセッサ２からインタフェース４へはＩ／Ｏ用のアドレス、データ、コントロール信号がバスを介して与えられる。グローバルプロセッサ２がインタフェース４のいくつかの動作設定レジスタ（図示せず）へ動作方法等のコマンドを設定している。
【００７０】
次に、この発明にかかるＳＩＭＤ型プロセッサ１の構成につき、図２、図４，図５を参照して説明する。上述したように、プロセッサエレメント３ａの演算は、実行条件フラグによって演算の有無が決定される。従来、実行条件フラグのセット／リセットは全プロセッサエレメントの条件フラグにデータを転送して行われており、同じ演算処理などを繰り返さなければならい。この発明は、命令の実行サイクルを減らすことが可能なように構成するものである。
【００７１】
図２に示すように、この発明では、全プロセッサエレメント３ａ…に対して、グローバルプロセッサ２からの制御信号に基づいて、プロセッサエレメント（ＰＥ）番号（ｉ＝０，１，…、ｎ）が転送される。このＰＥ番号を転送するために、グローバルプロセッサ２は、ＬＤＰＮ（Ｌｏａｄ  ＰＥ  Ｎｕｍｂｅｒ）命令を出す。ＰＥ番号は、各プロセッサエレメント３ａに予め設定された番号に基づいて、例えば、８ビットデータをＧＮＤ、ＶＣＣとの組み合わせにより設定し、ＧＮＤのトランジスタをＬＤＰＮ命令に基づく制御信号よりオン／オフすることにより、ＰＥ番号が各プロセッサエレメント３ａに転送される。
【００７２】
上記したＬＤＰＮ命令は、全プロセッサエレメント３ａ…に対してＰＥ番号を自プロセッサエレメント３ａのＡレジスタ３５ａに設定するものである。ＰＥ０のＡレジスタ３５ａには”０”が、ＰＥ１２７のＡレジスタ３５ａには”１２７”が設定される。このＰＥ番号は２進数で表したデータが与えられるが、前記した例では理解を容易にするために、十進法で表記している。
【００７３】
ＬＤＰＮが実行されると、グローバルプロセッサ２のＳＣＵ２２から制御信号が全プロセッサエレメント３ａに対して出力され、各プロセッサエレメント３ａ…にはＡＬＵ３４の片側にＰＥ番号を設定し、ＰＥ番号はＡＬＵ３４を通ってＡレジスタ３５ａに格納される。
【００７４】
図２に示すように、グローバルプロセッサ２からの与えられる制御信号、すなわちＬＰＤＮ命令によってＰＥ番号が各プロセッサエレメント３ａ…のＡレジスタ３５ａにそれぞれ入力することができる。各プロセッサエレメント３ａ…に格納されたＰＥ番号は、プロセッサエレメントのテストをするときに用いられる。例えば、ＰＥシフトをテストする場合など有効になる。
【００７５】
ＰＥシフトは上記した演算アレイ３６にあるマルチプレクサ３２を使用し、注目するプロセッサエレメント３ａをＰＥｎ（ｎ＝０、１、２、３．．．２５５）とした場合、ＰＥｎの演算アレイ３６に入力するデータをＰＥｎ＋３、ＰＥｎ＋２、ＰＥｎ＋１、ＰＥｎ、ＰＥｎ−１、ＰＥｎ−２、ＰＥｎ−３のいずれかの指定レジスタから選択行うもので、演算アレイ３６の演算結果をＡレジスタ３５ａもしくはＦレジスタ３５ｂからＰＥｎ＋３、ＰＥｎ＋２、ＰＥｎ＋１、ＰＥｎ、ＰＥｎ−１、ＰＥｎ−２、ＰＥｎ−３のレジスタに格納することもできる。
【００７６】
例えば命令では以下のように記述する。
ＡＤＤ  Ｒ１：Ｌ３  ；ＡＤＤは加算命令で、ＰＥｎのＡレジスタの値と、ＰＥｎ−３のＲ１レジスタの値を加算してＰＥｎのＡレジスタに格納する。
ＳＴＡ  ＃１２ｈ、Ｒ１：Ｕ３  ；ＳＴＡはストア命令で、ＰＥｎのＡレジスタの値を、ＰＥｎ＋３のＲ１レジスタに格納する。
【００７７】
上記のＰＥシフトをテストする場合、従来であれば、ＳＩＭＤプロセッサでは全プロセッサエレメントに同じデータしか設定できないため、ＰＥ０、ＰＥ１、ＰＥ２．．．と１ＰＥずつＡレジスタにデータを転送しなければ異なる値を設定することができなかった。ＰＥシフトを行った結果が全プロセッサエレメントで同じ値になればどのＰＥから転送されてきたが判明できない。この発明であれば、ＬＤＰＮ命令によって異なるデータが一度にＡレジスタ３５ａに設定できる。ＬＤＰＮ命令で一度にすべてのプロセッサエレメント３ａ．．．のＡレジスタ３５ａにそれぞれのＰＥ番号の値をセットする。プロセッサエレメントの下位番号から順に、Ａレジスタに０、１、２、３．．．が設定される。ＰＥシフトでレジスタファイル３１のいずれかのレジスタにストアする。例えば２下位にシフトし、Ｒ１にストアした場合、プロセッサエレメントの下位番号から順に、Ｒ０レジスタに２、３、４、５．．．がストアされる。最後にＡレジスタとＲ０レジスタを比較すれば全てのプロセッサエレメントで（Ａレジスタの値）−（Ｒ０レジスタの値）＝２となる。ＰＥシフトがうまく行われていないプロセッサエレメントでは２以外の値となる。
【００７８】
また、ＬＤＰＮ命令は、ｎ個おきのプロセッサエレメント３ａ…の演算指定にも使用できる。例えば、５個おき（ＰＥ０，ＰＥ５，ＰＥ９，…）の選択を行いたい場合には、  ＬＤＰＮ命令で全プロセッサエレメント３ａ…にＰＥ番号を設定する。ＰＥ０，ＰＥ１，ＰＥ２，…ＰＥ２５５のＡレジスタ３５ａの値を順に指定すると、０，１，２，３…２５５となる。Ａレジスタ３５ａの値を５で除算し、余りを格納すると（これらの演算はＡＬＵによる減算の繰り返しで最終にＡレジスタに残った値が余りとなる。除算の引き放し法、引き戻し法で可能。）、０，１，２，３，４，０，１，２，３，４，０，１，…０となり、ＰＥ命令でＣＭＰ命令（ＣＭＰ命令はＡレジスタ３５ａとレジスタファイル３１のデータを比較し、結果をＴレジスタ３５ｃの指定ビットに反映させる。）を使用し、結果をＴレジスタ３５ｃに反映させることで、次の演算のプロセッサエレメント３ａ選択ができる。
【００７９】
このように、この発明であれば、プロセッサエレメント３ａの指定数にかかわらず、ＬＤＰＮ命令で１サイクル、除算で１６サイクル、ＣＭＰ命令で１サイクルで対象とするプロセッサエレメント３ａの選択が完了する。
【００８０】
図２に示すように、グローバルプロセッサ２からプロセッサエレメント３ａへのデータ転送にはＧＡバス２１１が使われる。ＧＡバス２１１はグローバルプロセッサ２のＧ０レジスタに接続されており、Ｇ０レジスタのデータを指定されたプロセッサエレメント３ａのＡレジスタ３５ａにデータが転送される。また、プロセッサエレメント３ａのＡレジスタ３５ａはＡＧバス２１２が接続されており、Ａレジスタ３５ａに格納されたデータがＡＧバス２１２からＧ０レジスタに与えられる。
【００８１】
グローバルプロセッサ２からＡレジスタ３５ａへのデータ転送には、ＭＧＡＡ（Ｍｏｖｅ  Ｇ０  ｔｏ  Ａ  ｂｙ  Ａｒｅａ  Ａｓｓｉｇｎｍｅｎｔ）命令、ＭＧＡＢ（Ｍｏｖｅ  Ｇ０  ｔｏ  Ａ  ｂｙ  Ｂｉｔ  Ａｓｓｉｇｎｍｅｎｔ）命令といった命令が使用される。
【００８２】
ＭＧＡＡ命令はＰＥｉ〜ＰＥｊまでの（ｉ≦ｊ、ｉ，ｊ＝０，１，…，２５５）プロセッサエレメントのＡレジスタ３５ａにＧ０レジスタの値を転送する。指定には即値指定とレジスタ指定があり、例えば、次のように記述する。
【００８３】
（ＭＧＡＡ  ＃１２，＃２３）；ＰＥ１２〜ＰＥ２３までのプロセッサエレメントのＡレジスタ３５ａにＧ０レジスタの値を転送する。
【００８４】
（ＭＧＡＡ  Ｇ２，Ｇ３）；ＰＥ（Ｇ２）〜ＰＥ（Ｇ３）までのプロセッサエレメントのＡレジスタ３５ａにＧ０レジスタの値を転送する。Ｇ２の値が２３でＧ３の値が４５であればＰＥ２３〜ＰＥ４５が対象となる。
【００８５】
（ＭＧＡＡ  Ｇ２＋，Ｇ３）；ＰＥ（Ｇ２）〜ＰＥ（Ｇ３）までのプロセッサエレメントのＡレジスタ３５ａにＧ０レジスタの値を転送する。転送した後、Ｇ２の値を１インクリメントする。
【００８６】
ＭＧＡＢ命令はｎ個おきといったプロセッサエレメント３ａの選択をする場合に使用される。指定には、ＭＧＡＡ命令と同じように即値指定とレジスタ指定がある。即値はわかりやすいようにビット指定で記述している。
【００８７】
ＭＧＡＢ命令の場合は最初のオペランドにプロセッサエレメント３ａのビット指定値を、２番目のオペランドにプロセッサエレメント３ａのマスク値を記述する。
【００８８】
次の式を満たすＰＥ番号が選択される。
（指定したいＰＥの番号）＆  ￣（マスク値）＝（ビット指定値）＆  ￣（マスク値）
【００８９】
例えば、次のように記述する。
（ＭＧＡＢ  ＃００００００００ｂ，＃０００００００１ｂ）
；ＰＥ０、ＰＥ２、ＰＥ４、…ＰＥ２＊ｉ（ｉ＝０，１，２，…１２７）のプロセッサエレメントのＡレジスタ３５ａにＧ０レジスタの値を転送する。
【００９０】
（ＭＧＡＢ  Ｇ２，Ｇ３）；Ｇ２をビット指定値、Ｇ３をマスク値として前述の式を満たす番号のプロセッサエレメントのＡレジスタ３５ａにＧ０レジスタの値を転送する。
【００９１】
（ＭＧＡＢ  Ｇ２＋，Ｇ３）；Ｇ２をビット指定値、Ｇ３をマスク値として前述の式を満たす番号のプロセッサエレメントのＡレジスタにＧ０を転送する。Ｇ２は転送後に１インクリメントされる。
【００９２】
上記したように、グローバルプロセッサ２のＧ０レジスタにＧＡバス２１１によりすべてのプロセッサエレメント３ａのＡレジスタ３５ａを接続することで、ＭＧＡＡ命令、ＭＧＡＢ命令により、任意のプロセッサエレメント３ａのＡレジスタ３５ａにＧ０レジスタの値を転送することができる。
【００９３】
上述のＭＧＡＡ命令、ＭＧＡＢ命令は、図５に示すような各プロセッサエレメント３ａに装備されているコンパレータ３０１、パターンマッチング回路３０２によって、そのプロセッサエレメント３ａが演算対象であるか、否かを判断するためにも用いられる。
【００９４】
グローバルプロセッサ２のＳＣＵ２２からＭＧＡＡ命令、ＭＧＡＢ命令及び制御信号が出力され、即値は即値バス２２１、即値バス２２２に与えられる。即値バス２２１に与えられた即値はセレクタ２０４に与えられる。セレクタ２０３からはＰＥＭＳＫデータ、ＰＥＨデータがプロセッサエレメント３ａに出力される。ＰＥＭＳＫデータはプロセッサエレメント３ａのパターンマッチング回路３０２に、ＰＥＨデータはコンパレータ３０１に与えられる。セレクタ２０４からはＰＥＳＬデータ、ＰＥＬデータがプロセッサエレメント３ａに出力される。ＰＥＳＬデータはプロセッサエレメント３ａのパターンマッチング回路３０２に、ＰＥＬデータはコンパレータ３０１に与えられる。
【００９５】
コンパレータ３０１及びパターンマッチング回路３０２にはＰＥ番号データが与えられる。
【００９６】
各ブロックの条件に適合すれば信号が出力され、グローバルプロセッサ２からの制御信号をもとにセレクタ３０３でそれが範囲指定であるか、マスク指定であるか選択し、信号を出力する。
【００９７】
コンパレータ３０１、パターンマッチング回路３０２に入力されるＰＥ番号データは、各プロセッサエレメント３ａでＶＣＣ、ＧＮＤにつなげることでデータを生成する。例えば、ＰＥ６のプロセッサエレメントであれば、８ビットの信号線を上位ビットからＧＮＤ、ＧＮＤ、ＧＮＤ、ＧＮＤ、ＧＮＤ、ＧＮＤ、ＶＣＣ、ＶＣＣ、ＧＮＤに接続する。接続は各ビットに取り付けられたスイッチで行う。スイッチの制御信号はグローバルプロセッサ２から出力されＯＮになるとＰＥ番号が入力できる。図２に示すように、ＰＥ番号はＡＬＵ３４の片側入力にも接続されている。切り離しは同じ様にグローバルプロセッサ２からの制御信号によって行われる。
【００９８】
上記したＭＧＡＡ命令により、各プロセッサエレメント３ａの保持しているＰＥ番号と、即値オペランドで指定した値の上限値と下限値の比較をコンパレータ３０１で行い、範囲内にあればそのプロセッサエレメント３ａの演算を実行する。演算の実行、非実行はＡＬＵ３４の結果をＡレジスタ３５ａが更新しないように制御する（ラッチ信号を更新しない）。従来であればある範囲だけのデータ転送はその範囲内の実行条件フラグを一つずつセットし、実行条件フラグによって転送の有無を決定していたため、転送数だけのサイクルを必要としたが、ある範囲だけのプロセッサエレメントを指定できるＭＧＡＡ命令を使用することで、１サイクルでの処理が可能である。
【００９９】
また、グローバルプロセッサ２からのプロセッサエレメント３ａへのデータ転送は、図５に示すような各プロセッサエレメント３ａに装備されたビットマスク指定を行うパターンマッチング回路３０２により１つおき、３つおき等のＮ個おきのＰＥの指定を行いデータを転送することができる。
【０１００】
選択されるパターンは次式を満たすＰＥ番号が対象となる。
（指定したいＰＥの番号）＆  ￣（マスク値）＝（ビット指定値）＆  ￣（マスク値）
【０１０１】
例えば、奇数番号のプロセッサエレメントにデータを転送するためプロセッサエレメントの選択をする場合、つまりＰＥ１、ＰＥ３、ＰＥ５、ＰＥ７、．．．のプロセッサエレメントを選択する場合、ビット指定値を０００００００１ｂ、マスク値を１１１１１１１０ｂにすればＰＥ番号の下位１ビットが１であるＰＥ番号はすべて上式が成り立つため選択されたことになる。
【０１０２】
また、ビット指定値を００００１１００ｂ（１０進で１２）、マスク値を００００００１０ｂとした場合、前述の式を満たすプロセッサエレメントはＰＥ１２とＰＥ１４となり、偶数番号のプロセッサエレメント選択に範囲を指定することもできる。
【０１０３】
図５に示すように、グローバルプロセッサ２のＧ２レジスタ２０１とＧ３レジスタ２０２は全プロセッサエレメント３ａに対してバス接続されている。ＳＣＵ２２からの即値データとセレクタ２０３，２０４にてセレクトされるためＧ２レジスタ２０１とＧ３レジスタ２０２による指定が行える。これによりグローバルプロセッサ命令での演算の結果をＧ２、Ｇ３レジスタ２０１、２０２に格納して、ダイナミックな指定が行える。
【０１０４】
また、グローバルプロセッサ２ではＡＬＵ２３によってＧ２レジスタ２０１の値の減算が可能なため、オペランドにインクリメント演算を設けることで、演算後に１加算し次の演算範囲の縮小が行える。
【０１０５】
また、この実施の形態においては、図２に示すように、各プロセッサエレメント３ａには実行条件指定のための条件レジスタ（Ｔレジスタ）３５ｃが装備されている。図４に、この実施の形態におけるプロセッサエレメント３ａに設けられたＴレジスタ３５ｃの構成を示す。
【０１０６】
図４に示すように、プロセッサエレメント３ａは８ビットのＴレジスタ３５ｃを備える、そして、このＴレジスタ３５ｃで１ビットずつで制御されるため、１プロセッサエレメント３ａで８通りの制御パターンを保持できる。全てのプロセッサエレメント３ａ…であれば８×２５６通りのパターンになる。Ｔレジスタ３５ｃの１ビットはプロセッサエレメント３ａごとに演算実行の無効／有効の制御を行い、特定のプロセッサエレメント３ａだけを演算対象として選択できる。Ｔレジスタ３５ｃには、グローバルプロセッサ２からのＰＥ命令で値を変更することが可能である。
【０１０７】
Ｔレジスタ３５ｃは、グローバルプロセッサ２からの制御信号と、Ｔレジスタ３５ｃの特定ビットの値をＡＮＤ／ＯＲ論理演算器３５１で論理演算した結果を特定ビットに格納する構成となっている。格納はグローバルプロセッサ２からの制御信号によって格納先が決定する。すなわち、図４に示すように、この実施形態においては、Ｔレジスタ３５ｃの入力データ側には、ＡＮＤ／ＯＲを行う論理演算器３５１が設けられ、さらにＴレジスタ３５からの出力がセレクタ３５２に与えられ、このセレクタ３５２により、Ｔレジスタ３５ｃの値をフィードバック及び出力が行われている。
【０１０８】
Ｔレジスタ３５ｃの任意のプロセッサエレメント３ａの特定ビットをセット・リセットする命令には、ＳＥＴＴＡ（Ｓｅｔ  Ｔ  ｂｙ  Ａｒｅａ  Ａｓｓｉｇｎｍｅｎｔ）命令、ＳＥＴＴＢ（Ｓｅｔ  Ｔ  ｂｙ  Ｂｉｔ  Ａｓｓｉｇｎｍｅｎｔ）命令がある。また、Ｔレジスタ３５ｃにデータを転送する命令は、ＬＤＴ（Ｌｏａｄ  ｔｏ  Ｔ  ｒｅｇｉｓｔｅｒ）がある。ＬＤＴ命令は、オペランドに即値もしくはレジスタ値で、グローバルプロセッサ２は信号線２１０を介してそれらの値の下位８ビットを全プロセッサエレメント３ａのＴレジスタ３５ｃに転送する。
【０１０９】
ＳＥＴＴＡ命令はオペランドで指定された範囲に該当するプロセッサエレメント３ａに対して演算対象とし、対象となるプロセッサエレメント３ａのＴレジスタ３５ｃの特定ビットに対してセット・リセットを行うものである。指定の方法は前述のＭＧＡＡと同じで、指定された範囲内のＴレジスタ３５ｃの特定ビットの値を”１”にセットする。範囲外のプロセッサエレメント３ａのＴレジスタ３５ｃには”０”がセットされる。さらに、ＳＥＴＴＡ命令は、前命令までのＴレジスタ３５ｃの値との演算が指定できる。例えば、以下のように記述する。
【０１１０】
ＳＥＴＴＡ／Ｔ２／Ａ  ＃１２，＃２３
【０１１１】
上記の命令では、命令につづいて、Ｔレジスタ３５ｃの特定ビットの指定（／Ｔ２で下位から２ビット目を示す。）と、続いて演算の種類（／ＡでＡＮＤ演算を行う。／Ｏ指定であればＯＲ演算を行う。）の指定が記述されている。演算が指定されているため、ＰＥ１２〜ＰＥ２３までのプロセッサエレメント３ａのＴ２ビットの値と”１”のＡＮＤ結果をＴ２に格納する。
【０１１２】
ＳＥＴＴＢ命令は前述のＭＧＡＢ命令と同じオペランドのビット指定とマスク指定によってプロセッサエレメント３ａの選択を行う。また、前述のＳＥＴＴＡ命令で行った／Ａ、／ＯによるＴレジスタの特定ビットの旧値との論理演算も同じようにできる。
【０１１３】
上記したように、Ｔレジスタ３５ｃからの出力はセレクタ３５２により選択され、前のＴレジスタ３５ｃの値をフィードバックさせ、新しいデータを論理演算器３５１にて論理演算させることで、Ｔレジスタ３５ｃのセット、リセットだけでなく、ＡＮＤ／ＯＲ演算ができるように構成されている。これによって、例えば、複数のまたがった不規則なエリアの指定を行うとき有効となる。
【０１１４】
例えば、ＰＥ１０〜ＰＥ１５、ＰＥ２６〜ＰＥ４０、ＰＥ１００〜ＰＥ１１１といったエリアを指定する場合、前述のＬＤＴ命令、ＳＥＴＴＡ命令などで全プロセッサエレメントの特定フラグとクリアしておき、ＳＥＴＴＡのＯＲ演算（／Ｏを記述）を３回行うことで可能である。記述は以下のとおりである。
【０１１５】
（ＬＤＴ  ＃０）；すべてのプロセッサエレメントのＴレジスタのすべてのＢＩＴに”０”を転送する。
【０１１６】
ＳＥＴＴＡ／Ｔ１／Ｏ  ＃１０，＃１５
ＳＥＴＴＡ／Ｔ１／Ｏ  ＃２６，＃４０
ＳＥＴＴＡ／Ｔ１／Ｏ  ＃１００，＃１１１
【０１１７】
上記した図３に示した実施の形態においては、一度のアドレス指定により、ＳＩＭＤプロセッサ１の偶数番号が割り付けられたプロセッサエレメント３ａに外部メモリ６からデータ転送できるとともに、奇数番号が割り付けられたプロセッサエレメント３ａにもデータ転送できるように構成しているが、ＳＩＭＤ型プロセッサ１へ外部からデータを入出力する方法は、この方法に限られるものではない。たとえば、図６に示すように、ＳＩＭＤプロセッサ１のプロセッサエレメント３ａに、奇数、偶数の区別を付けずに、アドレス指定により順次データを転送するように構成したものにおいても、この発明は適用できる。すなわち、図６に示すように、レジスタコントローラ３１ａは、インタフェース４と、アドレスバス４１ａ、リード／ライト信号４５ｃ、クロック信号４１ｃを介して接続されている。このレジスタコントローラ３１ａは、インタフェース４に与えられ、アドレスバス４１ａを介してアドレス指定信号が送られてくると、そのアドレス指定信号をデコードする。そして、デコードしたアドレスと、自己のプロセッサエレメント３ａに割り付けられたアドレスとが一致する場合には、インタフェース４に与えられ、クロック信号４１ｃからのクロック信号に同期して、リード／ライト信号４１ｂを介してリード／ライト指示信号を得る。このリード／ライト指示信号は、レジスタ３１ｂへ与えられる。
【０１１８】
ＳＩＭＤ型プロセッサ１の外部に設けられたイメージスキャナからの画像データを、この実施形態では８ビットのパラレルデータとして、データバス４６ｃに置く。このデータバス４６ｃは、レジスタ３１ｂに保持されている演算処理されたデータが、ＳＩＭＤ型プロセッサ１の外部に設けられたプリンタ等に送る時にも使用される。
【０１１９】
インタフェース４から与えられるアドレス、リード／ライト、クロック、データの信号はレジスタファイル３１の各レジスタに供給される。そして、各プロセッサエレメント３ａ…ごとにアドレスをデコードして各プロセッサエレメント３ａ…を示すアドレスと一致したプロセッサエレメント３ａだけがリード／ライトの動作をおこなう。
【０１２０】
このように構成されるＳＩＭＤ型プロセッサ１は、外部からのデータをプロセッサエレメント３ａに送る場合、プロセッサエレメント３ａに割り付けられたアドレスを指定することにより、１回のクロック信号が入力されるだけで、その指定したプロセッサエレメント３ａにデータが送られる。なお、この例では、偶数、奇数のプロセッサエレメント３ａに同時にデータは送られないので、第１の実施の形態に比べると、データ転送に時間はかかるが、回路構成は簡略化できる。
【０１２１】
上述した実施形態においては、プロセッサエレメント３ａをアドレス指定しているが、プロセッサエレメント３ａの指定をアドレス指定する方式ではなく、ポインタ指定する方式、即ちシリアルアクセスメモリ方式においても、この発明は適用できる。この例につき図７に従い説明する。なお、ここでは上述した第１の実施形態と異なる点について説明することとし、同じ点については説明を省略する。また、上述した第１実施形態と同じ構成部分については、同一の符号を付する。
【０１２２】
まず、グローバルプロセッサ２からインタフェース４へはＩ／Ｏ用のアドレス、データ、コントロール信号がバスを介して与えられる。インタフェース４は、グローバルプロセッサ２のコマンドに基づき、このリセット信号を生成し、リセット信号４７を介してプロセッサエレメントブロック３ヘ送る。これにより、レジスタコントローラ３１ａは、リセットされる。そして、インタフェース４に最も近いレジスタコントローラ３１ａへクロック信号４１ｃを介してクロック信号が送られる。このクロック信号に同期して、レジスタコントローラ３１ａ’は、リード／ライト信号４５ａ或いは４５ｂを介してインタフェース４から送られてきたリード／ライト指示信号を得る。このリード／ライト指示信号は、偶数番号が割り付けられたプロセッサエレメント３ａのレジスタ３１ｂ、及び奇数番号が割り付けられたプロセッサエレメント３ａのレジスタ３１ｂにそれぞれ与えられる。このとき一組を構成するプロセッサエレメント３ａのレジスタコントローラ３１ａ’へ送られるリード／ライト指示信号は、上記第１実施形態の場合と同様それぞれ異なるものであってもよい。
【０１２３】
これにより、上述した第１実施形態の場合と同様、一度のポインタ指定により、偶数番号が割り付けられたプロセッサエレメント３ａにデータ転送できるとともに、奇数番号が割り付けられたプロセッサエレメント３ａにもデータ転送できる。
【０１２４】
また、上記したポインタ指定する方式において、一度のポインタ指定により１つの番号が割り付けられたプロセッサエレメント３ａにデータ転送する方式においても、この発明は適用できる。
【図面の簡単な説明】
【０１２５】
【図１】この発明の実施の形態にかかるＳＩＭＤ型プロセッサの全体構成を示すブロック図である。
【図２】この発明の実施の形態にかかるＳＩＭＤ型プロセッサの要部構成を示すブロック図である。
【図３】この発明の実施の形態にかかるプロセッサの内部構成を示すブロック図である。
【図４】この発明の実施の形態にかかるプロセッサエレメントにおけるＴレジスタの構成を示すブロック図である。
【図５】この発明の実施の形態にかかるＳＩＭＤ型プロセッサの要部構成を示すブロック図である。
【図６】この発明の他の実施の形態にかかるプロセッサの内部構成を示すブロック図である。
【図７】この発明のさらに異なる実施の形態にかかるＳＩＭＤ型プロセッサの内部構成を示すブロック図である。
【符号の説明】
【０１２６】
１    ＳＩＭＤ型プロセッサ
２    グローバルプロセッサ
３    プロセッサエレメントブロック
３ａ  プロセッサエレメント
３１  レジスタファイル
３２  演算アレイ
【図１】
2006351043.tif 000003
【図２】
2006351043.tif 000004
【図３】
2006351043.tif 000005
【図４】
2006351043.tif 000006
【図５】
2006351043.tif 000007
【図６】
2006351043.tif 000008
【図７】
2006351043.tif 000009