(57)【特許請求の範囲】
【請求項１】
メモリへのアクセスを行う際のアドレスをカレントポインタレジスタに格納し、
命令が実行されるときのアドレスとして、上記カレントポインタレジスタを実効アドレスとするメモリアドレッシング方法であって、
命令実行後に、実効アドレスの値が、別途設置されたハイポインタレジスタの値以上の場合、実効アドレスの値から、上記カレントポインタレジスタ並びに上記ハイポインタレジスタとは別途に設置されたレングスレジスタの値を減算して算出された値をカレントポインタレジスタに格納するステップと、
命令実行後に、実効アドレスの値が、上記ハイポインタレジスタの値未満の場合、実効アドレスの値に別途設けられたインデクスレジスタの値を加算して算出された値をカレントポインタレジスタに格納するステップと
を有するメモリアドレッシング方法。
【請求項２】
カレントポインタレジスタの値からハイポインタレジスタの値を減算する第１の減算器と、
カレントポインタレジスタの値とインデクスレジスタの値とを加算する第２の加算器と、
カレントポインタレジスタの値からレングスレジスタの値を減算する第３の減算器と、
第１の減算器のキャリー出力をセレクト信号として、第２の加算器の出力値と第３の減算器の出力値との、いずれかを選択する第１のマルチプレクサと
から構成される、
請求項１に記載のメモリアドレッシング方法を行う、アドレスデータ生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリのモジュロアドレッシングを高速に行うための演算器に関する。
【背景技術】
【０００２】
デジタル複写機やファクシミリ装置等の画像処理では、画素数の増加、画像処理の多様化などにより、データの高速処理が求められている。画像処理などにはＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）や、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ−ｓｔｒｅａｍ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ−ｓｔｒｅａｍ）方式のプロセッサが用いられることが多いが、いずれも大量のデータを高速に処理するための工夫を必要とする。
【０００３】
例えば、ＳＩＭＤ方式のプロセッサは、算術論理演算器とレジスタファイルを備えたプロセッサエレメント（以下、ＰＥと言う。）（図１、図２参照）と呼ばれるブロックを複数個装備する。それら複数個のＰＥにより、複数のデータを一度に（同時）処理する。ＰＥにはプロセッサの外部ポートよりデータが順次レジスタファイルに取り込まれ、ＰＥ内で処理された後、レジスタファイルに書き込まれ、外部ポートよりプロセッサ外にデータが出力される。このような処理を例えばデジタル複写機に当てはめてみると、プロセッサの外部からスキャナ（ＣＣＤ）でデータを取り込み、プロセッサ内でデータを加工し、プリンタにデータを送り印刷する、ということになる。
【０００４】
ＳＩＭＤ方式のプロセッサではデータを処理するにあたり、複数のデータをＰＥ内に保持しておく必要があることが想定される。このような場合に、データを一時貯めておけるメモリが各ＰＥに備わり、且つレジスタファイルから該メモリにリード・ライト（読み書き）できるような構成が設定されていれば、効率良くデータの処理を行うことができる。本明細書では、そのようなメモリを「ラインバッファ」と称する。
【０００５】
ところで、このラインバッファを備えるプロセッサでは、ラインバッファとレジスタファイルとのデータの入出力を高速に行えるか否かが、プロセッサのデータ処理能力に大きく関わる。そのようなデータ入出力を高速に行なうためには、ラインバッファに対するアドレッシングが効率良く行なわれなければならない。ところが、アドレッシングを効率良く行うには、通常、アドレス計算を高速に行うための回路が別途必要である。また、レジスタを組み合わせての複雑なアドレッシングを行うという方策も想定され得る。いずれにしても、コストや処理の複雑さにおいて、問題点を含んでいる。
【０００６】
上記以外の方策として、複数のレジスタを用意し、加算器を複数段設け、その上で、オフセットとなるレジスタにモジュロ値を加算すると言ったモジュロアドレッシングを行う、というものも挙げられる。けれども、やはり、加算器を複数段設けることは高速処理に影響する。
【０００７】
ここで、一般的なプロセッサにおいても、モジュロアドレッシングは重要である。近年、画像データや音声データなどの大容量のデータを処理するために、ＤＳＰやＲＩＳＣプロセッサが利用されている。こういったプロセッサの中にもモジュロアドレッシングを含むものは多い。
なお、本願発明に類似する発明の文献として、以下のようなものがある。
【特許文献１】特開２０００−１２２９１９号公報
【特許文献２】特開平１０−２３２８２１号公報
【特許文献３】特開平０８−２９７６０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、プロセッサにおいてモジュロアドレッシングを高速に行うことを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、上記の目的を達成するために為されたものである。本発明に係る請求項１に記載のメモリアドレッシング方法は、
メモリへのアクセスを行う際のアドレスをカレントポインタレジスタに格納し、
命令が実行されるときのアドレスとして、上記カレントポインタレジスタを実効アドレスとするメモリアドレッシング方法であって、
命令実行後に、実効アドレスの値が、別途設置されたハイポインタレジスタの値以上の場合、実効アドレスの値から、上記カレントポインタレジスタ並びに上記ハイポインタレジスタとは別途に設置されたレングスレジスタの値を減算して算出された値をカレントポインタレジスタに格納するステップと、
命令実行後に、実効アドレスの値が、上記ハイポインタレジスタの値未満の場合、実効アドレスの値に別途設けられたインデクスレジスタの値を加算して算出された値をカレントポインタレジスタに格納するステップと
を有するメモリアドレッシング方法である。
【００１０】
本発明に係る第２の形態のメモリアドレッシング方法は、
メモリへのアクセスを行う際のアドレスをカレントポインタレジスタに格納し、
命令が実行されるときのアドレスとして、上記カレントポインタレジスタを実効アドレスとし、
命令実行後に、実効アドレスの値に１を加算した値が、別途設置されたハイポインタレジスタの値と別途設置されたインデクスレジスタの値とを加算した値に一致した場合は、ハイポインタレジスタの値から別途設置されたレングスレジスタの値を減算して算出された値をカレントポインタレジスタに格納し、
一致しなかった場合は実効アドレスに１を加算して算出された値をカレントポインタレジスタに格納する、
メモリアドレッシング方法である。
【００１１】
本発明に係る第３の形態のアドレスデータ生成装置は、
カレントポインタレジスタの値からハイポインタレジスタの値を減算する第１の減算器と、
カレントポインタレジスタの値とインデクスレジスタの値とを加算する第２の加算器と、
カレントポインタレジスタの値からレングスレジスタの値を減算する第３の減算器と、
第１の減算器のキャリー出力をセレクト信号として、第２の加算器の出力値と第３の減算器の出力値との、いずれかを選択する第１のマルチプレクサと
から構成される、
請求項１に記載のメモリアドレッシング方法を行う、アドレスデータ生成装置である。
【００１２】
本発明に係る第４の形態のアドレスデータ生成装置は、
カレントポインタレジスタの値に１を加算する第４の加算器と、
インデクスレジスタの値とハイポインタレジスタの値とを加算する第５の加算器と、
ハイポインタレジスタの値からレングスレジスタの値を減算する第６の減算器と、
第４の加算器の出力値と第５の加算器の出力値とを比較する第１のコンパレータと、
第１のコンパレータからの比較結果信号をセレクト信号として、第４の加算器の出力値と第６の減算器の出力値との、いずれかを選択する第２のマルチプレクサと
から構成される、
上記第２の形態のメモリアドレッシング方法を行う、アドレスデータ生成装置である。
【００１３】
本発明に係る第５の形態のアドレスデータ生成装置は、
−１とハイポインタレジスタとの値のいずれかを選択する第３のマルチプレクサと、
カレントポインタレジスタの値とハイポインタレジスタの値とのいずれかを選択する第４のマルチプレクサと、
カレントポインタレジスタの値から上記第３のマルチプレクサの出力値を減算する第７の減算器と、
インデクスレジスタの値と上記第４のマルチプレクサの値とを加算する第８の加算器と、
上記第４のマルチプレクサの出力値からレングスレジスタの値を減算する第９の減算器と、
第７の減算器の出力値と第８の加算器の出力値とを比較する第２のコンパレータと、
第７の減算器のキャリーと、第２のコンパレータからの比較結果信号とを、セレクト信号として、第７の減算器の出力値と第８の加算器の出力値と第９の減算器の出力値との、いずれかを選択する第５のマルチプレクサと
から構成される、
上記第１の形態又は上記第２の形態のメモリアドレッシング方法を行う、アドレスデータ生成装置である。
【発明の効果】
【００１４】
本発明を利用することで、以下のような効果を奏することが可能である。
【００１５】
本発明に係る請求項１若しくは第２の形態のアドレッシング方法、又は第３の形態若しくは第４の形態のアドレスデータ生成装置を利用することにより、レジスタを最初に設定するだけで、配列領域のデータアクセスを簡易に行うことができる。
【００１６】
従来技術であれば、モジュロアドレッシングにおいては、アドレス計算を行い、更に終端であるかのチェックを行うため、アドレスが決定するまで時間を要する。本発明では、アドレス計算は前命令で完了していることと、演算器（加算器、減算器）を並行して配置しているため、レジスタからの出力は実質１段の演算器（加算器、減算器）を通過するのみであることとから、高速の処理が可能となっている。
【００１７】
本発明に係る第５の形態のアドレスデータ生成装置は、第３の形態のアドレスデータ生成装置と、第４の形態のアドレスデータ生成装置とを、いずれも含む構成を備える。即ち、指定されるアドレッシングにより、２つのマルチプレクサを制御し、演算器（加算器、減算器）の入力を変え、３種類の出力を３対１のマルチプレクサで選択する。このことで、２つのアドレッシングを１つの回路で行っており、回路構成が少なくなっている。
【００１８】
ＳＩＭＤ型マイクロプロセッサでのデータ処理では、配列形式の処理が多用される。ＳＩＭＤ型マイクロプロセッサはＸ方向（即ち、主走査方向）のデータを一度に入力するが、例えばＸ方向のみ平滑化処理をする場合には本発明を利用しなくとも問題は生じ難い。ここで、平滑化処理とは、ある画素データ（注目画素）を中心に、前後左右方向の画素データにマトリクス状の係数をかけあわせ、その和を注目画素データにすること、即ち、注目画素のデジタルデータを周辺のデータでぼかすことである。同様に、Ｙ方向（即ち、副走査方向）に前後のデータを複数のレジスタに設定し演算する場合でも、レジスタの数さえ余っていれば、本発明を利用しなくとも問題は生じ難い。しかし、Ｙ方向に相当多数の画素データが必要になる場合などは、レジスタの数が不足してしまうことは明白である。このとき、本発明、特に、請求項１に係るアドレッシング方法や第３の形態に係るアドレスデータ生成装置を利用することにより、Ｙ方向の相当多数の画素データをＰＥＲＡＭに格納しておき、多数のデータを処理することができる。
【００１９】
第２の形態に係るアドレッシング方法や第４の形態に係るアドレスデータ生成装置を利用する場合にも、複数ＳＩＭＤ間の同一ＰＥの位置にある画素データが、同一ＰＥのＰＥＲＡＭに格納され得ることになるから、非常に広範囲のデータが同一ＰＥにおける処理の対象となり得る。
【発明を実施するための最良の形態】
【００２０】
以下、図面を参照して本発明に係る好適な実施形態について説明する。
【００２１】
図３乃至図５において、本発明に係る第１の実施の形態、第２の実施の形態、及び第３の実施の形態のアドレスデータ生成装置３０、３０’、３０”を示す。いずれも、４つのレジスタと、３つの加算器または減算器とが、基本的に含まれる。それら４つのレジスタは、
（１）メモリ中の指定のエリアにアクセスするためのメモリの先頭アドレスを格納するカレントポインタレジスタ（以下、Ｃレジスタと言う。）３２、
（２）エリアの終了に関連するアドレスを格納するハイポインタレジスタ（以降Ｈレジスタ）３４、
（３）モジュロ値を格納するインデクスレジスタ（以下、Ｉレジスタと言う。）３６、及び、
（４）転送データ数（エリアの大きさ）に関連する値を格納するレングスレジスタ（以下、Ｌレジスタと言う。）３８
である。説明の便宜上、ここでは各レジスタを１６ビットのものに限定しているが、メモリサイズにより増減してもよい。また、レジスタの個数も夫々１個を用意しているが、複数個であればレジスタの組み合わせを複数にすることができる。
【００２２】
≪第１の実施の形態≫
図３は、本発明の第１の実施の形態に係るアドレスデータ生成装置３０の概略の構成を示すブロック図である。該アドレスデータ生成装置３０は、Ｃレジスタ３２の値からＨレジスタ３４の値を減算する第１の減算器４０と、Ｃレジスタ３２の値とＩレジスタ３６の値を加算する第２の加算器４２と、Ｃレジスタ３２の値からＬレジスタ３８の値を減算する第３の減算器４４と、第１の減算器４０のキャリー出力をセレクト信号として、第２の加算器４２の出力値と第３の減算器４４の出力値とのいずれかを選択する第１の２対１マルチプレクサ４６とから構成される。
【００２３】
第１の減算器４０の演算においてキャリーが生じた場合には、
（Ｃレジスタの値）≧（Ｈレジスタの値）
が成立する。このとき第１の２対１マルチプレクサ４６では、Ｃレジスタ３２の値からＬレジスタ３８の値を減算した値、つまり第３の減算器４４の出力値を選択するように、制御される。同演算において、キャリーがなかった場合は、
（Ｃレジスタの値）＜（Ｈレジスタの値）
が成立する。このとき第１の２対１マルチプレクサ４６では、Ｃレジスタ３２の値にＩレジスタ３６の値を加算した値、つまり第２の加算器４２の出力値を選択するように、制御される。
【００２４】
≪第２の実施の形態≫
図４は、本発明の第２の実施の形態に係るアドレスデータ生成装置３０’の概略の構成を示すブロック図である。該アドレスデータ生成装置３０’は、Ｃレジスタ３２の値に“１”を加算する第４の加算器４８と、Ｉレジスタ３６の値とＨレジスタ３４の値とを加算する第５の加算器５０と、Ｈレジスタ３４の値からＬレジスタ３８の値を減算する第６の減算器５２と、第４の加算器４８の出力値と第５の加算器５０の出力値とを比較する第１のコンパレータ５４と、第１のコンパレータ５４からの比較結果信号をセレクト信号として、第４の加算器４８の出力値と第６の減算器５２の出力値とのいずれかを選択する第２の２対１マルチプレクサ５６とから構成される。
【００２５】
第１のコンパレータ５４での比較結果信号は、第４の加算器４８の出力値と第５の加算器５０の出力値とが全ビットで全く同じ場合、つまり、
（Ｃレジスタの値＋１）＝（Ｈレジスタの値＋Ｉレジスタの値）
が成り立つ場合、Ｈレジスタ３４の値からＬレジスタ３８の値を減算した値、即ち第６の減算器５２の出力値を選択し、第４の加算器４８の出力値と第５の加算器５０の出力値とが１ビットでも異なっている場合、つまり、
（Ｃレジスタの値＋１）≠（Ｈレジスタの値＋Ｉレジスタの値）
が成り立つ場合、Ｃレジスタ３２の値に“１”加算した値、即ち第４の加算器４８の出力値を選択するように、第２の２対１マルチプレクサ５６を制御する。
【００２６】
第４の加算器４８においては、代わりに減算器を用いて、“１”を入力するのではなく“−１”を入力するようにしてもよい。
【００２７】
≪第３の実施の形態≫
図５は、本発明の第３の実施の形態に係るアドレスデータ生成装置３０”の概略の構成を示すブロック図である。該アドレスデータ生成装置３０”は、
・“−１”とＨレジスタ３４の値とのいずれかを選択する第３の２対１マルチプレクサ５８と、
・Ｃレジスタ３２の値とＨレジスタ３４の値のいずれかを選択する第４の２対１マルチプレクサ６０と、
・Ｃレジスタ３２の値から第３の２対１マルチプレクサ５８の出力値を減算する第７の減算器６２と、
・Ｉレジスタ３６の値と第４の２対１マルチプレクサ６０の出力値とを加算する第８の加算器６４と、
・第４の２対１マルチプレクサ６０の出力値からＬレジスタ３８の値を減算する第９の減算器６６と、
・第７の減算器６２の出力値と第８の加算器６４の出力値とを比較する第２のコンパレータ６８と、
・第２のコンパレータ６８の比較結果信号をセレクト信号１（Ｓ１）として、更に第７の減算器６２のキャリーをセレクト信号２（Ｓ２）として、第７の減算器６２、第８の加算器６４、若しくは第９の減算器６６の出力値のいずれかを選択する３対１マルチプレクサ７０と
から構成される。
【００２８】
図５において、セレクト信号（セレクト信号１、セレクト信号２）は、直接に３対１マルチプレクサ７０に入力されるように図示しているが、実際にはアドレッシングの種類によって、どちらか一方を有効にするように制御される。例えば、アドレッシングが後で説明する「レジスタ・インダイレクト・ウィズ・モディファイ・アドレッシング」（図６参照）である場合は、セレクト信号１のみを使用するように制御され、アドレッシングが後で説明する「レジスタ・インダイレクト・ウィズ・インクリメント・アドレッシング」（図７参照）である場合は、セレクト信号２のみを使用するように制御される。
【００２９】
更に、第３の２対１マルチプレクサ５８、及び、第４の２対１マルチプレクサ６０に対する選択信号も、上記のアドレッシングによって決定される。
【００３０】
≪第４の実施の形態≫
以下、本発明の第４の実施形態に係るＳＩＭＤ型マイクロプロセッサ２を説明する。該ＳＩＭＤ型マイクロプロセッサ２は、本発明に係るアドレッシングデータ生成装置３０、３０’、３０”を内部に含み、利用する。
【００３１】
図１のように、上記ＳＩＭＤ型マイクロプロセッサ２は、レジスタファイル８と演算アレイ１０とから成るプロセッサエレメント６と呼ばれるブロックを複数持つ。各プロセッサエレメント６は、外部入出力を通してデータをレジスタファイル８に入力・出力する。外部入出力は、例えばデジタル複写機で言えば、スキャナ（ＣＣＤ）からデータを読み取ったり、ＳＩＭＤ型マイクロプロセッサ２で変倍・フィルタなどの画像処理を施した結果のデータをプリンタなどに送ったりすることである。
【００３２】
ＳＩＭＤ型マイクロプロセッサ２は、複数のプロセッサを保有するが、グローバルプロセッサ４と呼ばれるブロックを少なくとも一つ備える。グローバルプロセッサ４は、ＲＡＭ（図示せず。）から読み取られたプログラムコードを処理し、グローバルプロセッサ４自身やプロセッサエレメント６に制御信号を送る。
【００３３】
図２は、ＳＩＭＤ型マイクロプロセッサ２において、プロセッサエレメント６をより詳しく表記したもので、例えば、３２０個のプロセッサエレメント６と１個のグローバルプロセッサ４とから成る。この場合であれは、一度に（同時）処理できるデータ数は、最大３２０個となる。
【００３４】
以降の説明のため、この一度に（同時）処理できる（３２０個の）データ数の単位を、“１ＳＩＭＤ”と称することにする。例えば、あるデジタル複写機などで１ラインのデータを読み出した場合そのデータ数が６４００個あったような場合、このＳＩＭＤ型マイクロプロセッサ２では３２０個のデータを一度に（同時）処理することが可能なため、６４００個のデータであれば２０ＳＩＭＤの処理で１ラインのデータが処理可能となる。
【００３５】
各々のプロセッサエレメント４には、１Ｋｂｙｔｅｓ（キロバイト）のメモリ（以下、ＰＥＲＡＭと言う。）１２と、メモリからデータを入出力しかつ外部入出力からデータの入出力を行うことのできるレジスタ（以下、Ｒレジスタと言う。）１４とが、設置されている。ここでＲレジスタ１４は各ＰＥ６毎に、Ｒ０〜Ｒ３１までの３２本用意されている。
【００３６】
なお、本発明とは関連がないが、７対１マルチプレクサ１６により、各ＰＥ６は左右夫々３つ隣のＰＥ６までの、Ｒレジスタ１４のいずれかとデータを入出力でき、更にそのデータはＰＥ６に含まれるＡＬＵ１８の片側の入力となり得る。
【００３７】
その他図２には、Ａレジスタ２０、Ｆレジスタ２２、Ｍレジスタ２４、Ｔレジスタ２６などが記されているが、いずれも本発明では利用しないため説明を省略する。
【００３８】
図には記していないが、本実施の形態では、例えば、Ｃレジスタ３２として１６ビットのレジスタがＣ０〜Ｃ１５までの１６本、Ｌレジスタ３８として１６ビットのレジスタがＬ０〜Ｌ７の８本、Ｉレジスタ３６として１６ビットのレジスタがＩ０〜Ｉ３の４本、Ｈレジスタ３４として１６ビットのレジスタがＨ０〜Ｈ１５までの１６本、グローバルプロセッサ４内に用意されている。更に、本発明に係る第１の実施の形態、第２の実施の形態、若しくは第３の実施の形態であるアドレスデータ生成装置３０、３０’、３０”も、グローバルプロセッサ４内に設置されている。これらのいずれのレジスタもメモリのサイズによって決定されるため、１６ビットである必要はない。よってメモリのサイズが増えた場合には、レジスタのサイズが増やされてもよい。レジスタの本数も、上記のものに限定されない。
【００３９】
本実施の形態に係るＳＩＭＤ型マイクロプロセッサ２においては、上記のＰＥＲＡＭ１２にアクセスする命令（コマンド）として、例えば、次のような２つのものが想定される。
・「ＳＴＲ」命令：ソース・オペランド（のレジスタ）のデータを、デスティネーション・オペランドに指定するメモリアドレッシングにより決定される（メモリの）アドレスにストアする。
・「ＬＤＲ」命令：ソース・オペランドに指定するメモリアドレッシングにより決定される（メモリの）アドレスに格納されているデータを、デスティネーション・オペランド（のレジスタ）にロードする。
【００４０】
ここで上記のメモリアドレッシング（とその表記）として、次の２つ（（１）、（２））が用意されている。
（１）「レジスタ・インダイレクト・ウィズ・モディファイ・アドレッシング」；（表記）［Ｃ，Ｉ，Ｌ］
（２）「レジスタ・インダイレクト・ウィズ・インクリメント・アドレッシング」；（表記）［Ｃ，Ｉ，Ｌ］＋
【００４１】
上記（１）、（２）の表記において、Ｃ、Ｉ、Ｌは夫々、Ｃレジスタ３２、Ｉレジスタ３６、Ｌレジスタ３８である。上記の表記には、Ｈレジスタ３４が無いが、Ｈレジスタ３４はＣレジスタ３２と同じ番号のレジスタが選択されるようになっている。例えば、“Ｃ０”と表記した場合、自動的に“Ｈ０”が選択される。これは命令コード量の削減のためであるので、上記の表記に限定されるものではない。
【００４２】
上記のＳＴＲ命令、ＬＤＲ命令では、メモリアドレッシングのオペランド以外は、Ｒレジスタ１４が対象として使用される。
【００４３】
メモリアドレッシングの［Ｃ，Ｉ，Ｌ］は、第１の実施の形態（若しくは第３の実施の形態）に係るアドレスデータ生成装置３０（、３０”）を利用する。一方、［Ｃ，Ｉ，Ｌ］＋は、第２の実施の形態（若しくは第３の実施の形態）に係るアドレスデータ生成装置３０’（、３０”）を利用する。
【００４４】
まず、レジスタ・インダイレクト・ウィズ・モディファイ・アドレッシング（［Ｃ，Ｉ，Ｌ］）を利用して連続してアドレッシングする方法の例を、図６のフローチャートにより示す。
【００４５】
現在実行している命令にＰＥＲＡＭ１２へのレジスタ・インダイレクト・ウィズ・モディファイ・アドレッシング（［Ｃ，Ｉ，Ｌ］）がある場合、Ｃレジスタ３２の値をメモリのアドレスとして、命令を実行しメモリのリード（読出し）若しくはライト（書出し）を行う（図６：Ｓ０２）。
【００４６】
次に、Ｃレジスタ３２の値とＨレジスタ３４の値とを比較して（図６：Ｓ０４）、Ｃレジスタ３２の値がＨレジスタ３４の値以上であれば（図６：Ｓ０４でＹＥＳに分岐）、Ｃレジスタ３２の値からＬレジスタ３４の値を減算してＣレジスタ３２に格納する（図６：Ｓ０６）。Ｃレジスタ３２の値がＨレジスタ３４の値未満であれば（図６：Ｓ０４でＮＯに分岐）、Ｃレジスタ３２の値にＩレジスタ３６の値を加算しＣレジスタ３２に格納する（図６：Ｓ０８）。
【００４７】
続く命令において、ＰＥＲＡＭ１２へのこのメモリアドレッシング（［Ｃ，Ｉ，Ｌ］）がある場合、上記のＳ０６又はＳ０８にて更新されたＣレジスタ３２の値をＰＥＲＡＭ１２のメモリのアドレスとして、メモリのリード若しくはライトを行う（図６：Ｓ１０）。
【００４８】
即ち、同じレジスタの組み合わせを用いる限り、Ｃレジスタ３２の値は、Ｈレジスタ３４の値以上にならないとき、Ｉレジスタ３６の値ずつ増えていくことになり、Ｈレジスタ３４の値以上になったとき、そのときのＣレジスタ３２の値からＬレジスタ３８の値を減算した値がＣレジスタ３２の値となる。
【００４９】
続いて、レジスタ・インダイレクト・ウィズ・インクリメント・アドレッシング（［Ｃ，Ｉ，Ｌ］＋）を利用して連続してアドレッシングする方法の例を、図７のフローチャートにより示す。
【００５０】
現在実行している命令にＰＥＲＡＭ１２へのレジスタ・インダイレクト・ウィズ・インクリメント・アドレッシング（［Ｃ，Ｉ，Ｌ］＋）がある場合、Ｃレジスタ３２の値をメモリのアドレスとして、命令を実行しメモリのリード（読出し）若しくはライト（書出し）を行う（図７：Ｓ２２）。
【００５１】
次に、Ｃレジスタ３２の値に“１”を加算した値とＨレジスタ３４の値にＩレジスタ３６の値を加算した値とを比較して（図７：Ｓ２４）、一致すれば（図７：Ｓ２４でＹＥＳに分岐）、Ｈレジスタ３４の値からＬレジスタ３８の値を減算してＣレジスタ３２に格納する（図７：Ｓ２６）。一致しなければ（図７：Ｓ２４でＮＯに分岐）、Ｃレジスタ３２の値に“１”を加算しＣレジスタ３２に格納する（図７：Ｓ２８）。
【００５２】
続く命令において、ＰＥＲＡＭ１２へのこのメモリアドレッシング（［Ｃ，Ｉ，Ｌ］＋）がある場合、上記のＳ２６又はＳ２８にて更新されたＣレジスタ３２の値をＰＥＲＡＭ１２のメモリのアドレスとして、メモリのリードもしくはライトを行う（図７：Ｓ３０）。
【００５３】
即ち、同じレジスタの組み合わせを用いる限り、Ｃレジスタ３２の値は、（Ｈレジスタ３４の値＋Ｉレジスタ３６の値）と一致しないとき、１ずつ増えていくことになり、（Ｈレジスタ３４の値＋Ｉレジスタ３６の値）と一致したとき、そのときのＣレジスタ３２の値からＬレジスタ３８の値を減算した値がＣレジスタ３２の値となる。
【００５４】
≪具体的な利用例について≫
上記の本発明に係るモジュロアドレッシングは、メモリ内のある矩形領域をアクセスするのに適合するアドレッシング方法である。前に説明したように該アドレッシングにおいては、メモリアドレッシングに係る命令を実行する前に、Ｃレジスタ３２には矩形領域の先頭のアドレス、Ｈレジスタ３４にはアクセスする矩形領域の最終アドレスに関連するアドレス、Ｉレジスタ３６にはモジュロ値（矩形領域内で何アドレスおきにアクセスするかの設定値）、Ｌレジスタ３８には矩形領域のデータ数に関連する値を、設定する必要がある。
【００５５】
メモリの矩形領域に配列を割り当てた例を用いて、メモリアドレッシング及びアクセスの例示を、以下に述べる。
【００５６】
図８及び図９には、８×５の配列領域にメモリを置き換えた図を示す。（Ｘ，Ｙ）の２次元座標で配列が表わされる。“Ｘ”は図８及び図９の横方向、“Ｙ”は縦方向に相当する。Ｘについては右方向が正方向であり、Ｙについては下方向が正方向である。配列の１要素はメモリの１つのアドレスに対応する。アドレスは、例えば、１００ｈ番地から順に右方向に１ｈインクリメントし、右端に達すれば、２段目の左端１０８ｈから順に同じようにインクリメントする。このとき配列は、（０，０）から順に右方向にＸ座標が“１”インクリメントし、右端（８，０）に達すれば２段目の左端に進んでＸ座標が“０”に戻りＹ座標が“１”インクリメントし、更に２段目の左端（０，１）から順に同じようにインクリメントする。８×５の配列で表されたメモリ空間であるため、最終アドレスは２７ｈ加算された値、即ち１２７ｈとなる。
【００５７】
なお、本明細書において、例えば、“１００ｈ”における“ｈ”は、１６進表記であることを示す。
【００５８】
この矩形領域をアクセスする順序の代表的なものとして、２つ挙げられる。１つ目は、図８の点線のように、先ずＹ方向に順にアクセスする、というものである。この場合、（０，０）−＞（０，１）−＞（０，２）−＞（０，３）−＞（０，４）−＞（１，０）−＞（１，１）−＞・・・というように、Ｙ方向の最大まで達すれば、Ｘ座標を１加算しＹ座標を０にして、次の列のアクセスを行う。メモリのアドレスでは、１００ｈ−＞１０８ｈ−＞１１０ｈ−＞１１８ｈ−＞１２０ｈ−＞１０１ｈ−＞・・・となる。
【００５９】
２つ目は、図９の点線のように、Ｘ方向に順にアクセスする、というものである。この場合、（０，０）−＞（１，０）−＞（２，０）−＞（３，０）−＞（４，０）−＞（５，０）−＞（６，０）−＞（７，０）−＞（０，１）−＞・・・というように、Ｘ方向の最大まで達すれば、Ｙ座標を１加算しＸ座標を０にして、次の行のアクセスを行う。メモリのアドレスでは、１００ｈ−＞１０１ｈ−＞１０２ｈ−＞・・・とメモリのアドレスの増加方向通りとなる。
【００６０】
ここで、当初にて一度だけ各レジスタを設定し、「レジスタ・インダイレクト・ウィズ・モディファイ・アドレッシング」（［Ｃ，Ｉ，Ｌ］）を命令のオペランドに使用して、繰り返してアクセスに係る命令を実行すれば、図８に示されるメモリ空間の配列において点線で示す順に配列内の全データへのアクセスを為すことができる。本発明に係るレジスタ・インダイレクト・ウィズ・モディファイ・アドレッシングにおいては、１つのアクセス命令の実行後にＣレジスタ３２の値を変更し、その変更されたＣレジスタ３２の値を次のアクセス命令実行時に使用し、更に、２種類のアドレス計算と並行して別の加算器（減算器）でＹ方向の範囲越えのチェックを行い、２種類のアドレス計算の結果の選択をその別の加算器（減算器）の結果に委ねるからである。前に説明したように、このときには、第１の実施の形態（若しくは第３の実施の形態）に係るアドレスデータ生成装置３０（、３０”）を利用する。
【００６１】
図８の場合、当初に各レジスタに設定される値を示すと、
・Ｃレジスタ３２は配列領域の先頭アドレスで１００ｈ、
・Ｉレジスタ３６はＸ方向の分割数で８ｈ、
・Ｈレジスタ３４は先頭列の最終行のアドレスで１２０ｈ、
・Ｌレジスタ３８は「Ｘ方向の分割数×（Ｙ方向の分割数―１）―１」で「１ｆｈ（＝８＊（５−１）−１）」
となる。（０，０）〜（０，３）のアクセス時には、Ｃレジスタ３２はＩレジスタ３６の値８ｈずつ増加していくが、（０，４）のアクセス時（直後）には、Ｃレジスタ３２の値が１２０ｈとなる。この値は、Ｈレジスタ３４の値以上であるため、Ｃレジスタ３２の値１２０ｈからＬレジスタ３８の値１ｆｈを減算した結果１０１ｈをＣレジスタ３２に格納することになる。従って、各レジスタ（Ｃ、Ｉ、Ｈ、Ｌ）について別途の値設定を行うことなく次の列のアクセスを行うことができる。
【００６２】
ところで、Ｌレジスタ３８の値を、「Ｘ方向の分割数×（Ｙ方向の分割数―１）」とすれば、当初のＣレジスタ３２の値に戻すことができる。この場合に他の列をアクセスすることを考慮するならば、例えば、Ｃ０レジスタに最初の列の先頭アドレスを格納し、Ｃ１レジスタに２列目の先頭アドレスを格納する、というように、個別の具体的レジスタを特定の列に固定すれば、アクセス実行可能である。このとき、Ｈレジスタ３４もＣレジスタ３２に合わせて設定する必要があるが、Ｉレジスタ３６、Ｌレジスタ３８は同じものを利用できる。最初の列と最後の列のみ処理したい場合などにも、これらの考え方は利用可能である。
【００６３】
さらに、当初にて一度だけ各レジスタを設定し、「レジスタ・インダイレクト・ウィズ・インクリメント・アドレッシング」（［Ｃ，Ｉ，Ｌ］＋）を命令のオペランドに使用して、繰り返してアクセスに係る命令を実行すれば、図９に示されるメモリ空間の配列において点線で示す順に配列内の全データへのアクセスを為すことができる。本発明に係るレジスタ・インダイレクト・ウィズ・インクリメント・アドレッシングにおいては、１つのアクセス命令の実行後にＣレジスタ３２の値を１インクリメントし、配列内の最後の（アドレスの）データをアクセスした後は、Ｃレジスタ３２の値は配列の先頭のアドレスに戻るからである。前に説明したように、このときには、第２の実施の形態（若しくは第３の実施の形態）に係るアドレスデータ生成装置３０’（、３０”）を利用する。
【００６４】
図９の場合、当初に各レジスタに設定される値を示すと、
・Ｃレジスタ３２は配列領域の先頭アドレスで１００ｈ、
・Ｉレジスタ３６はＸ方向の分割数で８ｈ、
・Ｈレジスタ３４は先頭列の最終行のアドレスで１２０ｈ、
・Ｌレジスタ３８は「Ｘ方向の分割数×（Ｙ方向の分割数―１）」で「２０ｈ（＝８＊（５−１））」となる。（０，０）−＞（１，０）−＞・・・（７，０）−＞（０，１）−＞（１，１）−＞・・・−＞（７，４）とアクセスしていくわけであるが、最終の（７，４）までＣレジスタ３２の値を“１”ずつインクリメントしていく。そして、（Ｈレジスタの値“１２０ｈ”）＋（Ｉレジスタの値“８ｈ”）と、（Ｃレジスタの値“１２７ｈ”）＋（１ｈ）とが、一致したとき、つまり（７，４）の配列に相当するアドレスをアクセスしたときに、Ｃレジスタ３２の値は、（Ｈレジスタの値“１２０ｈ”）―（Ｌレジスタの値“２０ｈ”）＝１００ｈとなる。従って、もしアドレス“１２７ｈ”以降のアドレス空間にも展開される配列領域もアクセスするのであれば、別のＣレジスタ３２を使用し、そのＣレジスタ３２に例えば１２８ｈを設定しておけばよい。
【００６５】
なお、通常のラインバック処理の場合、以下のように２つのアドレッシングを組み合わせて使用することが多い。例えば、図１０のような配列領域があった場合、次の順序でアクセスする。
【００６６】
（０，０）−＞（０，１）−＞（０，２）−＞（０，３）−＞（０，４）までの参照（この場合メモリからのリードを行う）を［Ｃ，Ｉ，Ｌ］のアドレッシングで行う。Ｌレジスタ３８の値が予め“２０ｈ”に設定されており、そのため（０，４）の次は（０，０）のアドレスがＣレジスタ３２に設定される。ところで、（０，０）のアドレスのデータは、ラインバッファとして最も古いラインのデータであり不要とされるべきデータであるため、（０，０）に最新のラインのデータが書き込まれる必要がある。そこで、［Ｃ，Ｉ，Ｌ］＋のアドレッシングを採用し、メモリに最新ラインのデータを書き込まれると、次に、アクセスされるのは自ずと（１，０）となり（この場合メモリからのリードを行う）、それ以降また同じように［Ｃ，Ｉ，Ｌ］を使用する。このような命令を繰り返すことで、図１０の矢印の順のラインバック処理が可能となる。
【図面の簡単な説明】
【００６７】
【図１】本発明の第４の実施の形態に係るＳＩＭＤ型マイクロプロセッサの概略の構成を示すブロック図である。
【図２】本発明の第４の実施の形態に係るＳＩＭＤ型マイクロプロセッサのやや詳細な構成を示すブロック図である。
【図３】本発明の第１の実施の形態に係るアドレスデータ生成装置の概略の構成を示すブロック図である。
【図４】本発明の第２の実施の形態に係るアドレスデータ生成装置の概略の構成を示すブロック図である。
【図５】本発明の第３の実施の形態に係るアドレスデータ生成装置の概略の構成を示すブロック図である。
【図６】本発明に係るレジスタ・インダイレクト・ウィズ・モディファイ・アドレッシング（［Ｃ，Ｉ，Ｌ］）を利用して連続してアドレッシングする方法の例を示すフローチャートである。
【図７】本発明に係るレジスタ・インダイレクト・ウィズ・インクリメント・アドレッシング（［Ｃ，Ｉ，Ｌ］＋）を利用して連続してアドレッシングする方法の例を示すフローチャートである。
【図８】本発明に係るレジスタ・インダイレクト・ウィズ・モディファイ・アドレッシング（［Ｃ，Ｉ，Ｌ］）を利用するデータアクセスの例である。
【図９】本発明に係るレジスタ・インダイレクト・ウィズ・インクリメント・アドレッシング（［Ｃ，Ｉ，Ｌ］＋）を利用するデータアクセスの例である。
【図１０】本発明に係る２つのアドレッシングを利用するラインバック処理を示す。
【符号の説明】
【００６８】
２・・・ＳＩＭＤ型マイクロプロセッサ、４・・・グローバルプロセッサ、６・・・プロセッサエレメント、１２・・・ＰＥＲＡＭ、１４・・・Ｒレジスタ、３０、３０’、３０”・・・アドレスデータ生成装置、３２・・・Ｃレジスタ、３４・・・Ｈレジスタ、３６・・・Ｉレジスタ、３８・・・Ｌレジスタ。
【図１】
0004708387.tif 000002
【図２】
0004708387.tif 000003
【図３】
0004708387.tif 000004
【図４】
0004708387.tif 000005
【図５】
0004708387.tif 000006
【図６】
0004708387.tif 000007
【図７】
0004708387.tif 000008
【図８】
0004708387.tif 000009
【図９】
0004708387.tif 000010
【図１０】
0004708387.tif 000011