(57)【特許請求の範囲】
【請求項１】
ｎビット及び２ｎビットデータ単位でアクセス可能なサーキュラバッファ領域が確保されたメモリを有し、ｎビットデータ単位に前記メモリにアクセスし、次にアクセスすべきｎビットデータを特定するアドレス更新を行うことを規定した第１のメモリアクセス命令と、２ｎビットデータ単位で前記メモリにアクセスし、次にアクセスすべき２ｎビットデータを特定する前記アドレス更新を行うことを規定した第２のメモリアクセス命令とが少なくとも実行可能なデータ処理装置であって、
前記サーキュラバッファ領域の開始アドレス情報を付与する開始アドレス情報付与手段と、
前記サーキュラバッファの領域の終了アドレス情報を付与する終了アドレス情報付与手段とを備え、前記開始アドレス情報は少なくとも前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを指示し、前記終了アドレス情報は少なくとも前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを指示し、前記開始アドレス情報が指示するアドレスから前記終了アドレス情報が指示するアドレスへの方向がアドレス更新方向として規定され、
前記サーキュラバッファの領域上のアクセス対象のアドレスを規定したアクセスアドレスと前記終了アドレス情報の指示するアドレスとを比較して比較結果情報を出力する比較手段と、
前記第１及び第２のメモリアクセス命令処理時に、前記アドレス更新方向において、前記アクセスアドレスの次に配置されるアドレスを演算して演算アドレスを出力するアドレス演算手段とをさらに備え、前記アドレス演算手段は、前記第１のメモリアクセス命令処理時に、前記アクセスアドレスの次に配置されるｎビットデータを特定するアドレスを前記演算アドレスとし、前記第２のメモリアクセス命令処理時に、前記アクセスアドレスの次に配置される２ｎビットデータを特定するアドレスを前記演算アドレスとし、
前記比較結果情報に基づき、前記開始アドレス情報の指示するアドレスに基づく値あるいは前記演算アドレスを選択して次のアクセス対象となるアドレスを規定した次期アクセスアドレスを決定するアクセスアドレス決定手段をさらに備え、
前記アクセスアドレス決定手段は、
前記第１のメモリアクセス命令の処理時には、前記終了アドレス情報が指示するアドレスと前記アクセスアドレスとの間で、ｎビットデータを特定するアドレス部分が等価であるという第１の条件が成立すると判定すると、前記開始アドレス情報の指示するアドレスに関連し、かつ前記サーキュラーバッファ領域上のｎビットデータを特定可能なｎビットアクセスアドレスを前記次期アクセスアドレスとし、前記第１の条件が不成立であると判定すると、前記演算アドレスを前記次期アクセスアドレスとし、
前記第２のメモリアクセス命令の処理時には、前記終了アドレス情報が指示するアドレスと前記アクセスアドレスとの間で、２ｎビットデータを特定するアドレス部分が等価であるという第２の条件が成立すると判定すると、前記開始アドレス情報の指示するアドレスに関連し、かつ前記サーキュラーバッファ領域上の２ｎビットデータを特定可能な２ｎビットアクセスアドレスを前記次期アクセスアドレスとし、前記第２の条件が不成立であると判定すると、前記演算アドレスを前記次期アクセスアドレスとする、
ことを特徴とするデータ処理装置。
【請求項２】
前記第１及び第２のメモリアクセス命令はそれぞれ前記アドレス更新をアドレスを増加させて行う第１及び第２のインクリメント処理を含み、前記アドレス更新方向はアドレスが増加する方向に規定され、
前記開始アドレス情報付与手段は、前記開始アドレス情報を保持する開始アドレス情報保持手段を含み、
前記終了アドレス情報付与手段は、前記終了アドレス情報を保持する終了アドレス情報保持手段を含む、
請求項１記載のデータ処理装置。
【請求項３】
前記開始アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、前記終了アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、
前記アクセスアドレス決定手段が用いた前記第２の条件は、前記終了アドレス情報が指示するアドレスで特定される前記サーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち、前半のｎビットデータを特定するアドレスに前記アクセスアドレスが一致するという条件を含み、
前記ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含み、
前記２ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含む、
請求項２記載のデータ処理装置。
【請求項４】
前記開始アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、前記終了アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、
前記アクセスアドレス決定手段が用いた前記第１の条件は、前記終了アドレス情報が指示するアドレスで特定される前記サーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち、後半のｎビットデータを特定するアドレスに前記アクセスアドレスが一致するという条件を含み、
前記ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含み、
前記２ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含む、
請求項２記載のデータ処理装置。
【請求項５】
前記第１及び第２のアクセス命令はそれぞれアドレスを減少させて前記アドレス更新を行う第１及び第２のデクリメント処理を含み、前記アドレス更新方向はアドレスが減少する方向に規定され、
前記開始アドレス情報付与手段は、前記開始アドレス情報を保持する開始アドレス情報保持手段を含み、
前記終了アドレス情報付与手段は、前記終了アドレス情報を保持する終了アドレス情報保持手段を含む、
請求項１記載のデータ処理装置。
【請求項６】
前記開始アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、前記終了アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、
前記ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含み、
前記２ｎビットアクセスアドレスは、前記開始アドレス情報が指示するアドレスのうち２ｎビットデータを特定可能なアドレス部分と、２ｎビットデータ単位でアクセス可能にするための固定データとからなるアドレスを含む、
請求項５記載のデータ処理装置。
【請求項７】
前記開始アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、前記終了アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、
前記ｎビットアクセスアドレスは、前記開始アドレス情報の指示するアドレスにより特定した前記サーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち、後半のｎビットデータを特定するアドレスを含み、
前記２ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含む、
請求項５記載のデータ処理装置。
【請求項８】
前記サーキュラーバッファ領域上の下限アドレスを保持する下限アドレス保持手段と、
前記サーキュラーバッファ領域上の上限アドレスを保持する上限アドレス保持手段とをさらに備え、
前記第１及び第２のメモリアクセス命令はそれぞれアドレスを増加させて前記アドレス更新を行う第１及び第２のインクリメント処理を含み、前記第１及び第２のメモリアクセス命令が前記第１及び第２のインクリメント処理を行う命令の場合、前記アドレス更新方向はアドレスが増加する方向に規定され、
前記第１及び第２のアクセス命令はそれぞれアドレスを減少させて前記アドレス更新を行う第１及び第２のデクリメント処理をさらに含み、前記第１及び第２のメモリアクセス命令が前記第１及び第２のデクリメント処理を行う命令の場合、前記アドレス更新方向はアドレスが減少する方向に規定され、
前記開始アドレス情報付与手段は、実行対象の前記第１及び第２のメモリアクセス命令の内容を指示する実行命令情報、前記下限アドレス及び前記上限アドレスを受け、前記実行命令情報が前記第１あるいは第２のインクリメント処理を指示するとき、前記下限アドレスを指示する前記開始アドレス情報を付与し、前記実行命令情報が前記第１あるいは第２のデクリメント処理を指示するとき、前記上限アドレスを指示する前記開始アドレス情報を付与する第１の選択手段を含み、
前記終了アドレス情報付与手段は、前記実行命令情報、前記下限アドレス及び前記上限アドレスを受け、前記実行命令情報が前記第１あるいは第２のインクリメント処理を指示するとき、前記上限アドレスを指示する前記終了アドレス情報を付与し、前記実行命令情報が前記第１あるいは第２のデクリメント処理を指示するとき、前記下限アドレスを指示する前記終了アドレス情報を付与する第２の選択手段を含む、
請求項１記載のデータ処理装置。
【請求項９】
前記下限アドレス及び前記上限アドレスは前記サーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、
前記ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含み、
前記２ｎビットアクセスアドレスは、前記第２のメモリアクセス命令が前記第２のインクリメント処理を行う命令の場合に前記開始アドレス情報が指示するアドレスとなり、前記第２のメモリアクセス命令が前記第２のデクリメント処理を行う命令の場合に、前記開始アドレス情報が指示するアドレスのうち２ｎビットデータを特定可能なアドレス部分と、２ｎビットデータ単位でアクセス可能にするための固定データとからなるアドレスを含む、
請求項８記載のデータ処理装置。
【請求項１０】
前記下限アドレス及び前記上限アドレスは前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、
前記アクセスアドレス決定手段が用いた前記第１の条件は、前記第１のメモリアクセス命令が前記第１のインクリメント処理を行う命令の場合に、前記終了アドレス情報が指示するアドレスで特定される前記サーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち、後半のｎビットデータを特定するアドレスに前記アクセスアドレスが一致するという条件となり、
前記ｎビットアクセスアドレスは、前記第１のメモリアクセス命令が前記第１のインクリメント処理を行う命令の場合に、前記開始アドレス情報が指示するアドレスとなり、前記第１のメモリアクセス命令が前記第１のデクリメント処理を行う命令の場合に、前記開始アドレス情報の指示するアドレスにより特定した前記サーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち後半のアドレスのｎビットデータを特定するアドレスとなり、
前記２ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含む、
請求項８記載のデータ処理装置。
【請求項１１】
前記第１及び第２のメモリアクセス命令は、前記メモリからデータを取り込むロード命令を含む、
請求項１記載のデータ処理装置。
【請求項１２】
前記第１及び第２のメモリアクセス命令は、前記メモリにデータを格納するストア命令を含む、
請求項１記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、高性能なデータ処理装置に関するものであり、特に、サーキュラバッファを効率よくアクセスするためのアドレッシング機能を有するデータ処理装置に関するものである。
【０００２】
【従来の技術】
ディジタル・シグナル・プロセッサ（ＤＳＰ）は、ディジタル信号処理を高速に実現する専用のプロセッサである。ＤＳＰでは、サーキュラバッファを効率よく扱うために、モジュロアドレッシング（巡回アドレッシング）を備えるものが多い。
【０００３】
ＤＳＰでは、一般的に１クロックサイクルに１回以上の積和演算を行うために、２つ以上の独立にアクセス可能なデータメモリ、もしくは、複数のポートを備えたメモリを持つ。ただし、ワードサイズは１６ビット、２４ビット等様々であるが、基本的に１つのメモリについては１ワードアクセスしか行わない。しかし、データメモリを１系統しか持たないプロセッサタイプのデータ処理装置で１クロックサイクルに１回以上の積和演算を実現しようとする場合、２つの以上のデータを１サイクルで取り込む必要がある。さらに、１サンプル毎に逐次処理を行う場合、１つのワードデータのアクセスと２つのワードデータのアクセスとが混在する。このような１ワードアクセスと２ワードアクセスが混在する状況で正しくモジュロアドレッシングを実現したものはなかった。
【０００４】
また、一般的なＤＳＰでは、例えば、ＵＳＰ４，９０８，７４８に開示されたＤＳＰのように、サーキュラーバッファのサイズを指定し、ポインタの更新後のアドレスとサーキュラーバッファのサイズのもとに、更新後のアドレスをモディファイするかどうかを判定している。このように、ポインタの更新後にアドレスの判定を行うと１クロックサイクルに行う処理内容が多くなり、高性能化のための動作周波数向上の妨げとなる。
【０００５】
更新前のアドレスに基づいて、アドレスのモディファイを行うかどうかを判定するＤＳＰも存在する。そのＤＳＰは、サーキュラーバッファ領域の範囲を示す開始アドレス（ｒｂ）と終了アドレス（ｒｅ）とを保持し、ポストインクリメントでアドレスが終了アドレスと一致した場合には、開始アドレス（ｒｂ）をアドレスの更新値として書き戻す。しかし、このようなＤＳＰでは、１インクリメント時にしかモジュロアドレッシング機能が動作しないという問題点があった。
【０００６】
【発明が解決しようとする課題】
ＤＳＰの演算ではモジュロアドレッシングの領域をワードアドレスで設定するため、自動インクリメント、自動デクリメントでは１ワードアクセスしかできなく、モジュロアドレッシングの設定方法も１つしかないという問題点があった。更に、モジュロアドレッシングの領域で２ワードアクセスを行う場合、２ワードアクセスしか行えないという問題点があった。
【０００７】
また、インクリメントとデクリメントとでサーキュラバッファの開始アドレスと終了アドレスとが反対になるため、開始及び終了のアドレス設定を行う手間が生じるという問題点があった。
【０００８】
この発明は、以上のような問題点を解消するためになされたもので、モジュロアドレッシングにおいて異なる２つのデータ単位でアクセス可能なデータ処理装置あるいはインクリメントとデクリメントとで開始アドレスと終了アドレスの設定に手間を要しないデータ処理装置を得ることを目的とする。
【０００９】
【課題を解決するための手段】
この発明にかかる請求項１記載のデータ処理装置は、ｎビット及び２ｎビットデータ単位でアクセス可能なサーキュラバッファ領域が確保されたメモリを有し、ｎビットデータ単位に前記メモリにアクセスし、次にアクセスすべきｎビットデータを特定するアドレス更新を行うことを規定した第１のメモリアクセス命令と、２ｎビットデータ単位で前記メモリにアクセスし、次にアクセスすべき２ｎビットデータを特定する前記アドレス更新を行うことを規定した第２のメモリアクセス命令とが少なくとも実行可能な装置であって、前記サーキュラバッファ領域の開始アドレス情報を付与する開始アドレス情報付与手段と、前記サーキュラバッファの領域の終了アドレス情報を付与する終了アドレス情報付与手段とを備え、前記開始アドレス情報は少なくとも前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを指示し、前記終了アドレス情報は少なくとも前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを指示し、前記開始アドレス情報が指示するアドレスから前記終了アドレス情報が指示するアドレスへの方向がアドレス更新方向として規定され、前記サーキュラバッファの領域上のアクセス対象のアドレスを規定したアクセスアドレスと前記終了アドレス情報の指示するアドレスとを比較して比較結果情報を出力する比較手段と、前記第１及び第２のメモリアクセス命令処理時に、前記アドレス更新方向において、前記アクセスアドレスの次に配置されるアドレスを演算して演算アドレスを出力するアドレス演算手段とをさらに備え、前記アドレス演算手段は、前記第１のメモリアクセス命令処理時に、前記アクセスアドレスの次に配置されるｎビットデータを特定するアドレスを前記演算アドレスとし、前記第２のメモリアクセス命令処理時に、前記アクセスアドレスの次に配置される２ｎビットデータを特定するアドレスを前記演算アドレスとし、前記比較結果情報に基づき、前記開始アドレス情報の指示するアドレスに基づく値あるいは前記演算アドレスを選択して次のアクセス対象となるアドレスを規定した次期アクセスアドレスを決定するアクセスアドレス決定手段をさらに備え、前記アクセスアドレス決定手段は、前記第１のメモリアクセス命令の処理時には、前記終了アドレス情報が指示するアドレスと前記アクセスアドレスとの間で、ｎビットデータを特定するアドレス部分が等価であるという第１の条件が成立すると判定すると、前記開始アドレス情報の指示するアドレスに関連し、かつ前記サーキュラーバッファ領域上のｎビットデータを特定可能なｎビットアクセスアドレスを前記次期アクセスアドレスとし、前記第１の条件が不成立であると判定すると、前記演算アドレスを前記次期アクセスアドレスとし、前記第２のメモリアクセス命令の処理時には、前記終了アドレス情報が指示するアドレスと前記アクセスアドレスとの間で、２ｎビットデータを特定するアドレス部分が等価であるという第２の条件が成立すると判定すると、前記開始アドレス情報の指示するアドレスに関連し、かつ前記サーキュラーバッファ領域上の２ｎビットデータを特定可能な２ｎビットアクセスアドレスを前記次期アクセスアドレスとし、前記第２の条件が不成立であると判定すると、前記演算アドレスを前記次期アクセスアドレスとしている。
【００１０】
また、請求項２記載のデータ処理装置は、前記第１及び第２のメモリアクセス命令はそれぞれ前記アドレス更新をアドレスを増加させて行う第１及び第２のインクリメント処理を含み、前記アドレス更新方向はアドレスが増加する方向に規定され、前記開始アドレス情報付与手段は、前記開始アドレス情報を保持する開始アドレス情報保持手段を含み、前記終了アドレス情報付与手段は、前記終了アドレス情報を保持する終了アドレス情報保持手段を含んだものである。
【００１１】
また、請求項３記載のデータ処理装置は、前記開始アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、前記終了アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、前記ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含み、前記２ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含んだものである。
【００１２】
また、請求項４記載のデータ処理装置は、前記開始アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、前記終了アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、前記アクセスアドレス決定手段が用いた前記第１の条件は、前記終了アドレス情報が指示するアドレスで特定される前記サーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち、後半のｎビットデータを特定するアドレスに前記アクセスアドレスが一致するという条件を含み、前記ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含み、前記２ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含んだものである。
【００１３】
また、請求項５記載のデータ処理装置は、前記第１及び第２のアクセス命令はそれぞれアドレスを減少させて前記アドレス更新を行う第１及び第２のデクリメント処理を含み、前記アドレス更新方向はアドレスが減少する方向に規定され、前記開始アドレス情報付与手段は、前記開始アドレス情報を保持する開始アドレス情報保持手段を含み、前記終了アドレス情報付与手段は、前記終了アドレス情報を保持する終了アドレス情報保持手段を含んだものである。
【００１４】
また、請求項６記載のデータ処理装置は、前記開始アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、前記終了アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、前記ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含み、前記２ｎビットアクセスアドレスは、前記開始アドレス情報が指示するアドレスのうち２ｎビットデータを特定可能なアドレス部分と、２ｎビットデータ単位でアクセス可能にするための固定データとからなるアドレスを含んだものである。
【００１５】
また、請求項７記載のデータ処理装置は、前記開始アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、前記終了アドレス情報が指示するアドレスは前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、前記ｎビットアクセスアドレスは、前記開始アドレス情報の指示するアドレスにより特定した前記サーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち、後半のｎビットデータを特定するアドレスを含み、前記２ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含んだものである。
【００１６】
また、請求項８記載のデータ処理装置は、前記サーキュラーバッファ領域上の下限アドレスを保持する下限アドレス保持手段と、前記サーキュラーバッファ領域上の上限アドレスを保持する上限アドレス保持手段とをさらに備え、前記第１及び第２のメモリアクセス命令はそれぞれアドレスを増加させて前記アドレス更新を行う第１及び第２のインクリメント処理を含み、前記第１及び第２のメモリアクセス命令が前記第１及び第２のインクリメント処理を行う命令の場合、前記アドレス更新方向はアドレスが増加する方向に規定され、前記第１及び第２のアクセス命令はそれぞれアドレスを減少させて前記アドレス更新を行う第１及び第２のデクリメント処理をさらに含み、前記第１及び第２のメモリアクセス命令が前記第１及び第２のデクリメント処理を行う命令の場合、前記アドレス更新方向はアドレスが減少する方向に規定され、前記開始アドレス情報付与手段は、実行対象の前記第１及び第２のメモリアクセス命令の内容を指示する実行命令情報、前記下限アドレス及び前記上限アドレスを受け、前記実行命令情報が前記第１あるいは第２のインクリメント処理を指示するとき、前記下限アドレスを指示する前記開始アドレス情報を付与し、前記実行命令情報が前記第１あるいは第２のデクリメント処理を指示するとき、前記上限アドレスを指示する前記開始アドレス情報を付与する第１の選択手段を含み、前記終了アドレス情報付与手段は、前記実行命令情報、前記下限アドレス及び前記上限アドレスを受け、前記実行命令情報が前記第１あるいは第２のインクリメント処理を指示するとき、前記上限アドレスを指示する前記終了アドレス情報を付与し、前記実行命令情報が前記第１あるいは第２のデクリメント処理を指示するとき、前記下限アドレスを指示する前記終了アドレス情報を付与する第２の選択手段を含んだものである。
【００１７】
また、請求項９記載のデータ処理装置は、前記下限アドレス及び前記上限アドレスは前記サーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、前記ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含み、前記２ｎビットアクセスアドレスは、前記第２のメモリアクセス命令が前記第２のインクリメント処理を行う命令の場合に前記開始アドレス情報が指示するアドレスとなり、前記第２のメモリアクセス命令が前記第２のデクリメント処理を行う命令の場合に、前記開始アドレス情報が指示するアドレスのうち２ｎビットデータを特定可能なアドレス部分と、２ｎビットデータ単位でアクセス可能にするための固定データとからなるアドレスを含んだものである。
【００１８】
また、請求項１０記載のデータ処理装置は、前記下限アドレス及び前記上限アドレスは前記サーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、前記アクセスアドレス決定手段が用いた前記第１の条件は、前記第１のメモリアクセス命令が前記第１のインクリメント処理を行う命令の場合に、前記終了アドレス情報が指示するアドレスで特定される前記サーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち、後半のｎビットデータを特定するアドレスに前記アクセスアドレスが一致するという条件となり、前記ｎビットアクセスアドレスは、前記第１のメモリアクセス命令が前記第１のインクリメント処理を行う命令の場合に、前記開始アドレス情報が指示するアドレスとなり、前記第１のメモリアクセス命令が前記第１のデクリメント処理を行う命令の場合に、前記開始アドレス情報の指示するアドレスにより特定した前記サーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち後半のアドレスのｎビットデータを特定するアドレスとなり、前記２ｎビットアクセスアドレスは前記開始アドレス情報が指示するアドレスを含んだものである。
【００１９】
また、請求項１１記載のデータ処理装置は、前記第１及び第２のメモリアクセス命令は、前記メモリからデータを取り込むロード命令を含んだものである。
【００２０】
また、請求項１２記載のデータ処理装置は、前記第１及び第２のメモリアクセス命令は、前記メモリにデータを格納するストア命令を含んだものである。
【００２４】
【発明の実施の形態】
＜基本構成＞
本発明の実施の形態１であるデータ処理装置について説明する。本実施の形態で用いるデータ処理装置は、１６ビットプロセッサであり、アドレス及びデータのビット長は１６ビットとする。
【００２５】
図１に本データ処理装置のレジスタセットを示す。本データ処理装置は、ビット順、バイト順に関してビッグエンディアンを採用しており、ビット位置はＭＳＢがビット０になる。
【００２６】
１６本のレジスタＲ０〜Ｒ１５はデータやアドレス値を格納する。レジスタＲ０〜Ｒ１４は汎用レジスタであり、レジスタＲ１３はサブルーチンジャンプ時の戻り先アドレスを格納するためのリンク（ＬＩＮＫ）レジスタとして割り当てられている。レジスタＲ１５はスタックポインタＳＰであり、割り込み用のスタックポインタＳＰＩとユーザ用のスタックポインタＳＰＵとが後で説明するプロセッサ・ステータス・ワードＰＳＷによって切り替えられる。以後、スタックポインタＳＰＩとＳＰＵとを総称して、スタックポインタＳＰと呼ぶ。
【００２７】
特別な場合を除き、４ビットのレジスタ指定フィールドでオペランドとなる各レジスタの番号が指定される。本データ処理装置では、例えば、レジスタＲ０とＲ１とのように２つのレジスタをペアにして、処理する命令を備えている。この場合、偶数番号のレジスタを指定し、このレジスタのペアとなるレジスタは、レジスタ番号を１プラスした奇数番号のレジスタが暗黙的に指定される。ＣＲ０〜ＣＲ３、ＣＲ７〜ＣＲ１１は各々１６ビットの制御レジスタである。各制御レジスタも、汎用レジスタと同様、通常レジスタの番号が４ビットで示される。レジスタＣＲ０は、プロセッサ・ステータス・ワード（ＰＳＷ）を格納し、データ処理装置の動作モードを指定するビットや演算結果を示すフラグからなる。
【００２８】
図２はレジスタＣＲ０内のＰＳＷの構成を示す図である。同図に示すように、ＰＳＷのビット番号０はスタックモードを示すＳＭビット４１である。ＳＭビット４１が“０”の場合は割り込みモードであることを示し、レジスタＲ１５としてスタックポインタＳＰＩが用いられる。“１”の場合はユーザーモードであることを示し、レジスタＲ１５としてスタックポインタＳＰＵが用いられる。ＰＳＷのビット番号５は割り込みイネーブルを指定するＩＥビット４２であり、“０”の場合は割り込みをマスク（アサートされても無視）し、“１”の場合は割り込みを受け付ける。本データ処理装置では、ゼロオーバーヘッドのループ処理を実現するためのリピート機能がインプリメントされている。ＰＳＷのビット番号６はリピート状態を示すＲＰビット４３であり、“０”の場合はリピート中でないことを、“１”の場合はリピート中であることを示す。また、本データ処理装置では、サーキュラーバッファをアクセスするためのアドレッシングであるモジュロアドレッシング機能がインプリメントされている。ＰＳＷのビット番号７はモジュロイネーブルを指定するＭＤビット４４であり、“０”の場合はモジュロアドレッシングをディスエーブル状態にし、“１”の場合はモジュロアドレッシングをイネーブル状態にする。ＰＳＷのビット番号８は、アキュムレータのデータフォーマットを指定するＦＸビット４５であり、“０”の場合は乗算結果を整数フォーマットでアキュムレータに格納し、“１”の場合は乗算結果を固定小数点フォーマットとして１ビット右にシフトしてアキュムレータに格納する。ＰＳＷのビット番号９はサチュレーションモードを指定するＳＴビット４６である。“０”の場合はアキュムレータに演算結果を格納する際、演算結果を４０ビットとして書き込む。“１”の場合はアキュムレータに演算結果を格納する際、３２ビットで表現できる値にリミット処理して書き込む。”ｈ’”を１６進表記とすると、演算結果がh'007fffffffより大きい値の場合には、アキュムレータにh'007fffffffを書き込み、演算結果がh'ff80000000より小さい値の場合には、アキュムレータにh'ff80000000を書き込む。ＰＳＷのビット番号１２は実行制御フラグ（Ｆ０フラグ）４７であり、比較命令の比較結果などがこのフラグにセットされる。ＰＳＷのビット番号１３も実行制御フラグ（Ｆ１フラグ）４８であり、比較命令等によりＦ０フラグ４７を更新する際に、更新前のＦ０フラグ４７の値が、Ｆ１フラグにコピーされる。ＰＳＷのビット番号１５はキャリー・フラグ（Ｃフラグ）４９であり、加減算命令実行時のキャリーがこのフラグにセットされる。
【００２９】
図１のレジスタＣＲ２はプログラムカウンタＰＣであり、実行中の命令アドレスを示す。本データ処理装置が処理する命令は、基本的に３２ビット固定長であり、ＰＣ（もしくはＣＲ２）は、３２ビットを１ワードとした命令ワードアドレスを保持する。
【００３０】
レジスタＣＲ１はバックアップ・プロセッサ・ステータス・ワード（ＢＰＳＷ）であり、例外や割り込みが検出された場合の実行中のプロセッサ・ステータス・ワードＰＳＷの値を退避・保持するためのレジスタである。レジスタＣＲ３はバックアップ・プログラム・カウンタ（ＢＰＣ）であり、プログラム・カウンタＰＣの値を待避・保持するためのレジスタである。レジスタＣＲ７〜ＣＲ９は、リピート関連のレジスタであり、リピート中であっても割り込みを受け付けられるように、ユーザーが値を読み書きできるようになっている。レジスタＣＲ７はリピート・カウンタ（ＲＰＴ＿Ｃ）であり、リピート回数を示すカウント値を保持する。レジスタＣＲ８はリピート・スタート・アドレス（ＲＰＴ＿Ｓ）であり、リピートを行うブロックの先頭の命令アドレスを保持する。レジスタＣＲ９はリピート・エンド・アドレス（ＲＰＴ＿Ｅ）であり、リピートを行うブロックの最後の命令のアドレスを保持する。
【００３１】
レジスタＣＲ１０，ＣＲ１１は、モジュロ・アドレッシングを行うための制御レジスタである。レジスタＣＲ１０は、モジュロ・スタート・アドレス（ＭＯＤ＿Ｓ）を、レジスタＣＲ１１は、モジュロ・エンド・アドレス（ＭＯＤ＿Ｅ）を保持する。レジスタＣＲ１０，ＣＲ１１は共に、最初と最終のデータ・ワード（１６ビット）・アドレスを保持する。インクリメントでモジュロアドレッシングを利用する場合には、モジュロ・スタート・アドレスＭＯＤ＿Ｓとして小さい方のアドレスが、モジュロ・エンド・アドレスＭＯＤ＿Ｅとして大きい方のアドレスがセットされ、インクリメントするレジスタ値がモジュロ・エンド・アドレスＭＯＤ＿Ｅと一致した場合、インクリメント結果として、モジュロ・スタート・アドレスＭＯＤ＿Ｓのアドレス値が、レジスタに書き戻される。
【００３２】
図１に４０ビットのアキュムレータＡ０、Ａ１を示す。各アキュムレータＡ０，Ａ１は、積和演算結果の上位１６ビットを保持するＡ０Ｈ、Ａ１Ｈ、積和演算結果の下位１６ビットを保持するＡ０Ｌ、Ａ１Ｌ、積和演算結果の上位からあふれたビットを保持する８ビットのガードビットＡ０Ｇ、Ａ１Ｇからなる。
【００３３】
本データ処理装置は２ウェイのＶＬＩＷ（Very Long Instruction Word）命令セットを処理する。図３は、本データ処理装置の命令フォーマットを示す。基本命令長は３２ビット固定であり、３２ビット境界に整置されている。各３２ビットの命令コードは、命令のフォーマットを示す２ビットのフォーマット指定ビット（ＦＭビット）５１と、１５ビットの左コンテナ５２と右コンテナ５３から構成される。各コンテナ５２、５３はそれぞれ１５ビットからなるショートフォーマットのサブ命令を格納できるほか、２つで１つの３０ビットのロングフォーマットのサブ命令を格納できる。今後、簡単のため、ショートフォーマットのサブ命令をショート命令、ロングフォーマットのサブ命令をロング命令と呼ぶ。
【００３４】
ＦＭビット５１は命令のフォーマット及び２つのショート命令の実行順序を指定する。ＦＭビット５１が“１１”の場合は、コンテナ５２、５３の３０ビットで１つのロング命令を保持することを示し、それ以外の場合は各コンテナ５２、５３がそれぞれショート命令を保持することを示す。さらに、２つのショート命令を保持する場合、ＦＭビット５１で実行順序を指定する。“００”のときは、２つのショート命令を並列に実行することを示す。“０１”のときは、左コンテナ５２に保持されているショート命令を実行した後に、右コンテナ５３に保持されているショート命令を実行することを示す。“１０”のときは、右コンテナ５３に保持されているショート命令を実行した後に、左コンテナ５２に保持されているショート命令を実行することを示す。このように、シーケンシャルに実行する２つのショート命令も含めて１つの３２ビット命令にエンコード出来るようにして、コード効率の向上を図っている。
【００３５】
図４〜図７に典型的な命令のビット割り付けの例を示す。図４は２つのオペランドを持つショート命令のビット割り付けを示す。フィールド６１、６４は、オペレーションコードフィールドである。フィールド６４に、アキュムレータ番号を指定する場合もある。フィールド６２、６３には、オペランドとして参照あるいは更新されるデータの格納位置を、レジスタ番号やアキュムレータ番号で指定する。フィールド６３は、４ビットの小さな即値を指定する場合もある。図５は、ショートフォーマットの分岐命令の割り付けを示しており、オペレーションコードフィールド７１と８ビットの分岐変位フィールド７２からなる。分岐変位は、ＰＣ値と同様、命令ワード（３２ビット）のオフセットで指定される。図６は、１６ビットの変位や即値を持つ３オペランド命令やロード／ストア命令のフォーマットを示しており、オペレーションコードフィールド８１、ショートフォーマットと同様レジスタ番号等を指定するフィールド８２、８３、１６ビットの変位や即値等を指定する拡張データフィールド８４とからなる。図７は、右コンテナ５３側にオペレーションコードを持つロングフォーマットの命令のフォーマットを示しており、２ビットのフィールド９１が“０１”になっている。９３と９６はオペレーションコードフィールドで、９４と９５はレジスタ番号等を指定するフィールドである。９２は予約フィールドであり必要に応じてオペレーションコードやレジスタ番号等の指定に使用される。
【００３６】
上述以外に、ＮＯＰ（ノー・オペレーション）のように、１５ビットすべてがオペレーションコードとなる命令や、１オペランド命令等、特殊な命令のビット割り付けを持つものもある。
【００３７】
本データ処理装置の各サブ命令は、ＲＩＳＣライクな命令セットとなっている。メモリデータのアクセスを行う命令はロード／ストア命令のみであり、演算命令はレジスタ／アキュムレータ中のオペランドや即値オペランドに対して演算を行う。オペランドデータのアドレッシングモードとしては、レジスタ間接モード、ポストインクリメント付きレジスタ間接モード、ポストデクリメント付きレジスタ間接モード、プッシュモード、レジスタ相対間接モードの５種類ある。各々のニーモニックは、”＠Ｒｓｒｃ”、”＠Ｒｓｒｃ＋”、”＠Ｒｓｒｃ−”、”−ＳＰ”、”  （ｄｉｓｐ１６、Ｒｓｒｃ）”で示される。Ｒｓｒｃはベースアドレスを指定するレジスタ番号を、ｄｉｓｐ１６は１６ビットの変位値を示す。オペランドのアドレスはバイトアドレスで指定される。
【００３８】
レジスタ相対間接モード以外のモードは、図４に示す命令フォーマットとなる。フィールド６３でベースレジスタ番号が指定され、フィールド６２でメモリからロードしてきた値を書き込むレジスタの番号もしくはストアする値を保持するレジスタの番号が指定される。レジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなる。ポストインクリメント付きレジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなり、このベースレジスタの値がオペランドのサイズ（バイト数）分ポストインクリメントされて、書き戻される。ポストデクリメント付きレジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなり、このベースレジスタの値がオペランドのサイズ（バイト数）分ポストデクリメントされて、書き戻される。プッシュモードは、ストア命令で、かつ、ベースレジスタがレジスタＲ１５の場合にのみ使用可能であり、スタックポインタ（ＳＰ）値がオペランドのサイズ（バイト数）分プリデクリメントされた値が、オペランドアドレスとなり、デクリメントされた値がＳＰに書き戻される。
【００３９】
レジスタ相対間接モードは図６に示す命令フォーマットとなる。フィールド８３でベースレジスタ番号が指定され、フィールド８２でメモリからロードしてきた値を書き込むレジスタの番号もしくはストアする値を保持するレジスタの番号が指定される。フィールド８４はオペランド格納位置のベースアドレスからの変位値を指定する。レジスタ相対間接モードは、ベースレジスタとして指定されたレジスタの値に１６ビットの変位値を加算した値がオペランドアドレスとなる。
【００４０】
ポストインクリメント付きレジスタ間接モードとポストデクリメント付きレジスタ間接モードでは、ＰＳＷ中のＭＤビット４４を“１”に設定する事により、モジュロアドレッシングモードが使用できる。
【００４１】
ジャンプ命令のジャンプ先アドレス指定には、ジャンプ先アドレスをレジスタ値で指定するレジスタ間接と、ジャンプ命令のＰＣからの分岐変位で指定するＰＣ相対間接とがある。ＰＣ相対間接については、分岐変位を８ビットで指定するショートフォーマットと、分岐変位を１６ビットで指定するロングフォーマットの２種類ある。また、オーバーヘッドなしにループ処理を実現するリピート機能を起動するためのリピート命令も備える。
【００４２】
図８に本データ処理装置１００の機能ブロック構成を示す。データ処理装置１００は、ＭＰＵコア部１０１と、ＭＰＵコア部１０１からの要求により命令データのアクセスを行う命令フェッチ部１０２、内蔵命令メモリ１０３、ＭＰＵコア部１０１からの要求によりオペランドデータのアクセスを行うオペランドアクセス部１０４、内蔵データメモリ１０５、命令フェッチ部１０２とオペランドアクセス部１０４からの要求を調停し、データ処理装置１００の外部メモリのアクセス等を行う外部バスインターフェイス部１０６からなる。
【００４３】
ＭＰＵコア部１０１は、命令キュー１１１、制御部１１２、レジスタファイル１１５、第１演算部１１６、第２演算部１１７、ＰＣ部１１８からなる。
【００４４】
命令キュー１１１は、２エントリの３２ビット命令バッファと有効ビット、及び入出力ポインタ等からなり、ＦＩＦＯ（先入れ先出し）方式で制御される。命令キュー１１１は、命令フェッチ部１０２でフェッチされた命令データを一時保持し、制御部１１２に送る。
【００４５】
制御部１１２は、前述の命令キュー１１１の制御、パイプライン制御、命令の実行、命令フェッチ部１０２やオペランドアクセス部１０４とのインターフェイスなど、ＭＰＵコア部１０１のすべての制御を行う。また、制御部１１２には、命令キュー１１１から送られる命令コードをデコードするための命令デコード部１１９があり、２つのデコーダを含む。第１デコーダ１１３は、第１演算部１１６で実行する命令をデコードし、第２デコーダ１１４は、第２演算部１１７で実行する命令をデコードする。３２ビットの命令のデコードの第１サイクルでは、必ず左コンテナ５２（図３）の命令コードが第１デコーダ１１３で解析され、右コンテナ５３の命令コードが第２デコーダ１１４で解析される。従って、最初に実行する命令はその命令を実行する演算器に対応した位置に置かれなければならない。
【００４６】
ただし、ＦＭビット５１及び左コンテナ５２のビット０とビット１とのデータは両方のデコーダで解析される。また、拡張データの切り出しを行うために、右コンテナ５３のデータが第１デコーダ１１３に送られるが、解析は行われない。２つのショート命令をシーケンシャルに実行する場合、先行して実行される命令のデコード中に後で実行する側の命令が図示していないプリデコーダでデコードされ、どちらのデコーダでデコードすべきかを判定する。後で実行される命令がどちらのデコーダでも処理できる命令の場合は第１デコーダ１１３でデコードする。先行する命令のデコード後、後で実行する命令の命令コードが選択されたデコーダに取り込まれ、解析される。
【００４７】
レジスタファイル１１５は、レジスタＲ０〜Ｒ１５（図１）の値を保持し、第１演算部１１６、第２演算部１１７、ＰＣ部１１８、オペランドアクセス部１０４に複数のバスで結合されている。
【００４８】
図９に、第１演算部１１６の詳細ブロック構成を示す。第１演算部１１６は、レジスタファイル１１５と、各々Ｓ１バス３０１、Ｓ２バス３０２、Ｓ３バス３０３によって結合されており、これら３つのバス３０１〜３０３を介してレジスタファイル１１５からデータを読み出し、演算器等にリードオペランドとなるデータやストアデータを転送する。Ｓ１バス３０１は偶数番号のレジスタにのみに、Ｓ２バス３０２は奇数番号のレジスタにのみに結合されており、Ｓ１バス３０１とＳ２バス３０２でレジスタペアの２ワードを並列に転送することもできる。Ｓ３バス３０３は全レジスタに結合されている。
【００４９】
また、第１演算部１１６は、レジスタファイル１１５と、各々Ｄ１バス３１１、Ｗバス３１４で結合されており、Ｄ１バス３１１を介して演算結果や転送データをレジスタファイル１１５に転送し、Ｗバス３１４でロードしたバイトデータをレジスタファイル１１５に転送する。Ｄ１バス３１１、Ｗバス３１４とも、全レジスタに結合されている。さらに、レジスタファイル１１５はオペランドアクセス部１０４と３２ビットのＯＤバス３２２で結合されており、１ワードのデータもしくはレジスタペアの２ワードを並列に転送することが可能である。ＯＤバス３２２の上位／下位１６ビットは、任意のレジスタファイルに書き込みができるようにレジスタファイル１１５の全レジスタに結合されている。
【００５０】
ＡＡラッチ１５１、ＡＢラッチ１５２は、ＡＬＵ１５３の入力ラッチである。ＡＡラッチ１５１は、Ｓ１バス３０１、Ｓ２バス３０２もしくはＳ３バス３０３を介して読み出されたレジスタ値を取り込む。同ラッチ１５１は、ゼロクリアする機能も備えている。ＡＢラッチ１５２は、Ｓ３バス３０３を介して読み出されたレジスタ値もしくは第１デコーダ１１３でデコードの結果生成された１６ビットの即値を取り込み、また、ゼロクリアする機能も備えている。
【００５１】
ＡＬＵ１５３では、主として転送、比較、算術論理演算、オペランドアドレスの計算／転送、オペランドアドレス値のインクリメント／デクリメント、ジャンプ先アドレスの計算／転送等が行われる。演算結果やアドレスモディファイの結果はセレクタ１５５、Ｄ１バス３１１を介して、レジスタファイル１１５中の命令で指定されたレジスタに書き戻される。例えば、ＡＬＵ１５３がインクリメント（デクリメント）の計算を行う場合、ＡＡラッチ１５１に保持されたベースアドレスとＡＢラッチ１５２に保持された増加（減少）アドレス値とを加算処理を行う。ＡＢラッチ１５２には２ワードアクセスの場合に“４”、１ワードアクセスの場合に“２”が保持される。
【００５２】
また、指定された条件が成立した場合には“１”を不成立の場合には“０”をレジスタに書き込む条件セット命令を実行するために、セレクタ１５５は演算結果の最下位ビットに制御部１１２から出力されたデータを埋め込む機能を備える。この場合、演算結果はゼロが出力されるように制御される。ＡＯラッチ１５４は、オペランドのアドレスを保持するラッチであり、ＡＬＵ１５３でのアドレス計算結果もしくはＡＡラッチ１５１に保持されたベースアドレスの値を選択的に保持し、ＯＡバス３２１を介してオペランドアクセス部１０４に出力する。また、ジャンプ先アドレスやリピートエンドアドレスを計算した場合には、ＡＬＵ１５３の出力が、ＪＡバス３２３を介してＰＣ部１１８に転送される。
【００５３】
モジュロ演算部７００はＭＯＤ＿Ｓ１５６、ＭＯＤ＿Ｅ１５７、比較器１５８、ラッチ１５９からなる。ＭＯＤ＿Ｓ１５６及びＭＯＤ＿Ｅ１５７は、それぞれ図１のＣＲ１０（モジュロ・スタート・アドレス（ＭＯＤ＿Ｓ）を保持）及びＣＲ１１（モジュロ・エンド・アドレス（ＭＯＤ＿Ｅ）を保持）に対応して設けられる制御レジスタである。比較器１５８は、ＭＯＤ＿Ｅ１５７の値とＳ３バス３０３上のベースアドレスの値とを比較する。ＭＯＤ＿Ｓ１５６は、ラッチ１５９を介してセレクタ１５５に結合されている。詳細な動作については、後述する。
【００５４】
ストアデータ（ＳＤ）レジスタ１６０は、１６ビットのレジスタ２本からなり、Ｓ１バス３０１もしくはＳ２バス３０２の一方、もしくは、Ｓ１バス３０１とＳ２バス３０２の両方に出力されたストアデータを一時保持する。ＳＤレジスタ１６０に保持されたデータは、ラッチ１６１を介して整置回路１６２に転送される。整置回路１６２では、オペランドのアドレスに従って、ストアデータが３２ビット境界に整置され、ラッチ１６３、ＯＤバス３２２を介してオペランドアクセス部１０４に出力される。
【００５５】
また、オペランドアクセス部１０４でロードされたバイトデータは、ＯＤバス３２２を介して、１６ビットのロードデータ（ＬＤ）レジスタ１６４に取り込まれる。ＬＤレジスタ１６４の値は、ラッチ１６５を介して、整置回路１６６に転送される。整置回路１６６では、バイト整置及びバイトデータのゼロ／符号拡張を行う。整置、拡張後のデータが、Ｗバス３１４を介してレジスタファイル１１５中の指定されたレジスタに書き込まれる。１ワード（１６ビット）ロード、２ワード（３２ビット）ロードの場合にはＬＤレジスタを介さず、ＯＤバス３２２からレジスタファイル１１５にロードした値が直接書き込まれる。
【００５６】
制御部１１２中のＰＳＷ部１７１は図１のレジスタＣＲ０の値を保持するＰＳＷラッチ１７２や、ＰＳＷ更新回路等からなり、演算結果や命令の実行によりＰＳＷラッチ１７２の値を更新する。ＰＳＷラッチ１７２に値を転送する場合、Ｓ３バス３０３に出力されたデータがＴＰＳＷラッチ１６７を介して、必要なビット（アサインされているビット）のみ転送される。ＰＳＷラッチ１７２の値を読み出す場合には、ＰＳＷ部１７１からＤ１バス３１１に出力され、レジスタファイル１１５に書き込まれる。ＢＰＳＷラッチ１６８は図１のレジスタＣＲ１に相当するレジスタである。例外処理時には、Ｄ１バス３１１に出力されたＰＳＷの値がＢＰＳＷラッチ１６８に書き込まれる。ＢＰＳＷラッチの値をレジスタファイル１１５に転送する場合には、ＢＰＳＷラッチ１６８の値はＳ３バス３０３に読み出され、レジスタファイルなど必要な場所に転送される。アサインされていないビットは強制的にゼロがＳ３バス３０３に出力される。例外からの復帰時には、ＢＰＳＷラッチ１６８の値は、直接ＴＰＳＷラッチ１６７を介して、必要なビット（アサインされているビット）のみＰＳＷラッチ１７２に転送される。
【００５７】
図１０は、ＰＣ部１１８の詳細ブロック図である。命令アドレス（ＩＡ）レジスタ１８１は、次にフェッチする命令のアドレスを保持し、次にフェッチする命令のアドレスを命令フェッチ部１０２に出力する。引き続き後続の命令をフェッチする場合には、ＩＡレジスタ１８１からラッチ１８２を介して転送されたアドレス値がインクリメンタ１８３で１インクリメントされて、ＩＡレジスタ１８１に書き戻される。ジャンプやリピート等によりシーケンスが切り替わる場合には、ＩＡレジスタ１８１はＪＡバス３２３を介して転送されるジャンプ先アドレス、リピートブロック開始アドレスを取り込む。
【００５８】
ＲＰＴ＿Ｓレジスタ１８４、ＲＰＴ＿Ｅレジスタ１８６、ＲＰＴ＿Ｃレジスタ１８８はリピート制御用の制御レジスタであり、それぞれ図１のレジスタＣＲ８、レジスタＣＲ９、レジスタＣＲ７に対応する。ＲＰＴ＿Ｅレジスタ１８６はリピートを行うブロックの最終命令のアドレスを保持する。この最終アドレスは、リピート命令処理時に第１演算部１１６で計算され、ＪＡバス３２３を介してＲＰＴ＿Ｅレジスタ１８６に取り込まれる。比較器１８７は、リピートを行うブロックの最終命令のアドレスを保持するＲＰＴ＿Ｅレジスタ１８６の値と、フェッチアドレスを保持しているＩＡレジスタ１８１の値とを比較する。もし、リピート処理中であり、リピートする回数を保持するＲＰＴ＿Ｃレジスタ１８８の値が“１”でなく、かつ、２つのアドレスが一致した場合、ＲＰＴ＿Ｓレジスタ１８４に保持されているリピートを行うブロックの開始アドレスが、ラッチ１８５、ＪＡバス３２３を介して、ＩＡレジスタ１８１に転送される。リピートの終了アドレスの命令が実行されるたびに、ＲＰＴ＿Ｃレジスタ１８８の値は、ラッチ１８９を介してデクリメンタ１９０で“１”だけデクリメントされる。デクリメントした値が、“０”であった場合には、ＰＳＷ中のＲＰビット４３をクリアし、リピート処理を終了する。ＲＰＴ＿Ｓレジスタ１８４、ＲＰＴ＿Ｅレジスタ１８６、ＲＰＴ＿Ｃラッチ１８８は、Ｄ１バス３１１からの入力ポートとＳ３バス３０３への出力ポートを持ち、必要に応じてリピート時の初期設定や待避復帰が行なわれる。
【００５９】
実行ステージＰＣ（ＥＰＣ）１９４は実行中の命令のＰＣ値を保持し、次命令ＰＣ（ＮＰＣ）１９１は次に実行する命令のＰＣ値を保持する。ＮＰＣ１９１は、実行段階でジャンプが起こった場合、ＪＡバス３２３上のジャンプ先アドレス値を取り込み、リピートで分岐が起こった場合には、ラッチ１８５からリピートを行うブロックの先頭アドレスを取り込む。それ以外の場合には、ラッチ１９２を介して転送されたＮＰＣ１９１の値が、インクリメンタ１９３でインクリメントされ、ＮＰＣ１９１に書き戻される。サブルーチンジャンプ命令の場合には、ラッチ１９２の値が戻り先アドレスとしてＤ１バス３１１に出力され、レジスタファイル１１５中のリンクレジスタとして定義されているレジスタＲ１３に書き戻される。また、次の命令が実行状態に入る場合には、ラッチ１９２の値がＥＰＣ１９４に転送される。実行中の命令のＰＣ値を参照する場合には、ＥＰＣ１９４の値がＳ３バス３０３に出力され、第１演算部１１６に転送される。ＢＰＣ１９６は、図１で示したレジスタセットのレジスタＣＲ３に対応する。例外や割り込み等が検出された場合には、ＥＰＣ１９４の値がラッチ１９５を介してＢＰＣ１９６に転送される。ＢＰＣ１９６は、Ｄ１バス３１１からの入力ポートとＳ３バス３０３への出力ポートを持ち、必要に応じて待避復帰が行なわれる。
【００６０】
図１１に、第２演算部１１７の詳細ブロック図を示す。第２演算部１１７は、レジスタファイル１１５と、各々Ｓ４バス３０４、Ｓ５バス３０５で結合されており、この２つのバス３０４，３０５を介してデータをレジスタファイル１１５から読み出す。Ｓ４バス３０４とＳ５バス３０５でレジスタペアの２ワードを並列に転送することも可能である。また、第２演算部１１７は、レジスタファイル１１５と、Ｄ２バス３１２、Ｄ３バス３１３で結合されており、この２つのバス３１２，３１３を介してデータをレジスタファイル１１５内の各レジスタに書き込むことができる。Ｄ２バス３１２は偶数番号のレジスタのみに、Ｄ３バス３１３は奇数番号のレジスタのみに各々結合されている。Ｄ２バス３１２とＤ３バス３１３でレジスタペアの２ワードを並列に転送することもできる。
【００６１】
アキュムレータ２０８は、図１のアキュームレータＡ０，Ａ１の２本の４０ビットアキュムレータに相当する。
【００６２】
２０１は４０ビットのＡＬＵであり、ビット番号０からビット番号７までの８ビットがアキュムレータのガードビット用加算器、ビット番号８からビット番号２３までの１６ビットが算術論理演算器、ビット番号２４からビット番号３９までの１６ビットがアキュムレータの下位１６ビットを加算するための加算器になっており、４０ビットまでの加減算と、１６ビットの論理演算を行う。
【００６３】
Ａラッチ２０２、Ｂラッチ２０３は、ＡＬＵ２０１の４０ビット入力ラッチである。Ａラッチ２０２は、Ｓ４バス３０４からレジスタ値をビット番号８からビット番号２３の位置に取り込むか、シフタ２０４を介して、アキュムレータ２０８の値をそのままもしくは１６ビット算術右シフトした値を取り込む。シフタ２０５は、アキュムレータ２０８の値を配線２０６（ガードビット８ビット）、Ｓ４バス３０４（上位１６ビット）、Ｓ５バス３０５（下位１６ビット）を介して取り込むか、レジスタの値をＳ５バス３０５のみ、もしくは、Ｓ４バス３０４とＳ５バス３０５の両方を介して１６ビットもしくは３２ビットのデータを右詰めで取り込み、４０ビットに符号拡張する。シフタ２０５は、入力したデータを左３ビットから右２ビットの任意のシフト量で算術シフトし出力する。Ｂラッチ２０３は、Ｓ５バス３０５上のデータをビット番号８からビット番号２３の位置に取り込むか、乗算器の出力、もしくは、シフタ２０５の出力を取り込む。Ａラッチ２０２、Ｂラッチ２０３は、各々ゼロクリアしたり定数の値に設定したりする機能も持つ。
【００６４】
ＡＬＵ２０１の出力は、サチュレーション回路２０９に出力される。サチュレーション回路２０９は、上位１６ビット、もしくは、上位下位あわせた３２ビットにする際に、ガードビットを見て、各々１６ビットもしくは３２ビットで表現できる最大値もしくは最小値にクリッピングする機能を備える。もちろんそのまま出力する機能もある。サチュレーション回路２０９の出力は配線２０７に結合されている。
【００６５】
デスティネーションオペランドがアキュムレータ２０８の場合には、配線２０７の値がアキュムレータ２０８に書き込まれる。デスティネーションオペランドがレジスタの場合は、配線２０７の値が、Ｄ２バス３１２やＤ３バス３１３を介して、レジスタファイル１１５に書き込まれる。１ワード転送の場合にはデスティネーションレジスタの番号が偶数の場合Ｄ２バス３１２に、奇数の場合にはＤ３バス３１３に出力される。２ワード転送の場合には、上位側の１６ビットデータがＤ２バス３１２に、下位側のビットデータがＤ３バス３１３に出力される。また、転送命令、絶対値の計算、最大値設定命令や、最小値設定命令を実行するために、Ａラッチ２０２とＢラッチ２０３の出力が、配線２０７に結合されており、Ａラッチ２０２とＢラッチ２０３の値をアキュムレータ２０８やレジスタファイル１１５に転送することが可能である。
【００６６】
プライオリティエンコーダ２１０は、ラッチＢ２０３の値を取り込み、固定小数点フォーマットの数を正規化するのに必要なシフト量を計算し、レジスタファイル１１５に書き戻すために結果をＤ２バス３１２もしくはＤ３バス３１３に出力する。
【００６７】
Ｘラッチ２１２、Ｙラッチ２１３は乗算器の入力レジスタであり、各々、Ｓ４バス３０４、Ｓ５バス３０５の１６ビットの値を取り込み、１７ビットにゼロ拡張もしくは符号拡張する機能を備える。乗算器２１１は、１７ビットｘ１７ビットの乗算器であり、Ｘラッチ２１２に格納された値とＹラッチ２１３に格納された値との乗算を行う。積和命令や積差命令の場合には、乗算結果はＰラッチ２１４に取り込まれ、Ｂラッチ２０３に送られる。乗算命令でデスティネーションオペランドがアキュムレータ２０８の場合には、乗算結果をアキュムレータ２０８に書き込む。
【００６８】
バレルシフタ２１５は、４０ビットもしくは１６ビットのデータに対して、左右１６ビットまでの算術／論理シフトが可能である。シフトデータは、アキュムレータ２０８の値もしくはＳ４バス３０４を介してレジスタの値がシフトデータ（ＳＤ）ラッチ２１７に取り込まれる。シフト量については、即値もしくはレジスタ値がＳ５バス３０５を介してシフト量（ＳＣ）ラッチ２１６に取り込まれる。バレルシフタ２１５はＳＤラッチ２１７のデータをＳＣラッチ２１６で指定されるシフト量だけ、オペレーションコードで指定されたシフトを行う。シフト結果は、サチュレーション回路２０９に出力され、ＡＬＵでの演算結果と同様、必要に応じてサチュレーションが行われ、配線２０７に出力される。配線２０７に出力された値は、アキュムレータ２０８もしくはＤ２バス３１２、Ｄ３バス３１３を介してレジスタファイル１１５に書き戻される。
【００６９】
即値ラッチ２１８は、第２デコーダ１１４で生成された６ビットの即値を１６ビットに拡張して保持し、Ｓ５バス３０５を介して演算器に転送する。ビット操作命令のビットマスクもここで生成される。
【００７０】
次に本データ処理装置のパイプライン処理について説明する。図１２はパイプライン処理を示す図である。本データ処理装置は、命令データのフェッチを行う命令フェッチ（ＩＦ）ステージ４０１、命令の解析を行う命令デコード（Ｄ）ステージ４０２、演算実行を行う命令実行（Ｅ）ステージ４０３、データメモリのアクセスを行うメモリアクセス（Ｍ）ステージ４０４、メモリからロードしたバイトオペランドをレジスタへ書き込むライトバック（Ｗ）ステージ４０５の５段のパイプライン処理を行う。Ｅステージ４０３での演算結果のレジスタへの書き込みはＥステージ４０３で完了し、ワード（２バイト）、２ワード（４バイト）ロード時のレジスタへの書き込みはＭステージ４０４で完了する。積和／積差演算に関しては、更に乗算と加算の２段のパイプラインで命令の実行を行う。後段の処理を命令実行２（Ｅ２）ステージ４０６と呼ぶ。連続する積和／積差演算を１回／１クロックサイクルのスループットで実行できる。
【００７１】
ＩＦステージ４０１では、主として命令のフェッチ、命令キュー１１１の管理、リピート制御が行われる。命令フェッチ部１０２、内蔵命令メモリ１０３、外部バスインターフェイス部１０６、命令キュー１１１、ＰＣ部１１８のＩＡレジスタ１８１、ラッチ１８２、インクリメンタ１８３、比較器１８７等や制御部１１２のＩＦステージステージ制御、命令フェッチ制御、ＰＣ部１１８制御等を行う部分が、このＩＦステージ４０１の制御で動作する。ＩＦステージ４０１は、Ｅステージ４０３のジャンプで初期化される。
【００７２】
フェッチアドレスは、ＩＡレジスタ１８１で保持される。Ｅステージ４０３でジャンプが起こるとＪＡバス３２３を介してジャンプ先アドレスを取り込み、初期化を行う。シーケンシャルに命令データをフェッチする場合には、インクリメンタ１８３でアドレスをインクリメントする。リピート処理中に、比較器１８７でＩＡレジスタ１８１の値とＲＰＴ＿Ｅ１８６の値が一致していることが検出され、かつ、ＲＰＴ＿Ｃの値が１でなければ、シーケンスの切り替え制御が行われる。この場合、ＲＰＴ＿Ｓ１８４に保持されている値がラッチ１８５、ＪＡバス３２３を介してＩＡレジスタ１８１に転送される。
【００７３】
ＩＡレジスタ１８１の値は命令フェッチ部１０２に送られ、命令フェッチ部１０２が命令データのフェッチを行う。対応する命令データが内蔵命令メモリ１０３にある場合には、内蔵命令メモリ１０３から命令コードを読み出す。この場合、１クロックサイクルで３２ビットの命令のフェッチを完了する。対応する命令データが内蔵命令メモリ１０３にない場合には、外部バスインターフェイス部１０６に命令フェッチ要求を出す。外部バスインターフェイス部１０６は、オペランドアクセス部１０４からの要求とを調停し、命令の取り込みが可能になったら、外部のメモリから命令データを取り込み、命令フェッチ部１０２に送る。外部バスインターフェイス部１０６は、最小２クロックサイクルで外部メモリのアクセスを行うことが可能である。命令フェッチ部１０２は取り込まれた命令を、命令キュー１１１に転送する。命令キュー１１１は２エントリのキューになっており、ＦＩＦＯ制御で取り込まれた命令コードを、命令デコード部１１９に出力する。
【００７４】
Ｄステージ４０２では、命令デコード部１１９でオペレーションコードの解析を行い、第１演算部１１６、第２演算部１１７、ＰＣ部１１８等で命令の実行を行うための制御信号群を生成する。Ｄステージ４０２は、Ｅステージ４０３のジャンプで初期化される。命令キュー１１１から送られてくる命令コードが無効な場合には、アイドルサイクルとなり、有効な命令コードが取り込まれるまで待つ。Ｅステージ４０３が次の処理を開始できない場合には、演算器等に送る制御信号を無効化し、Ｅステージ４０３での先行命令の処理の終了を待つ。例えば、Ｅステージ４０３で実行中の命令がメモリアクセスを行う命令であり、Ｍステージ４０４でのメモリアクセスが終了していない場合にこのような状態になる。
【００７５】
Ｄステージ４０２では、シーケンシャル実行を行う２命令の分割や、２サイクル実行命令のシーケンス制御も行う。さらに、スコアボードレジスタ（図示せず）を用いたロードオペランドの干渉チェックや第２演算部１１７での演算器の干渉チェック等も行い、干渉が検出された場合には、干渉が解消されるまで制御信号の出力を抑止する。図１３は、ロードオペランド干渉の例を示す。ワードもしくは２ワードのロード命令の直後にロードするオペランドを参照する積和演算命令がある場合、レジスタへのロードが完了するまで、積和演算命令の実行開始を抑止する。この場合、メモリアクセスが１クロックサイクルで終了する場合でも、１クロックサイクルストールが起こる。バイトデータをロードする場合には、更にＷステージでレジスタファイルへの書き込みが完了するため、更に１サイクルストール期間が延びる。図１４は、演算ハードウェア干渉の例を示す。積和演算命令の直後に加算器を使用する丸め命令がある場合、先行の積和演算命令の演算が終了するまで丸め命令の実行開始を抑止する。この場合、１クロックサイクルストールが起こる。積和演算命令が連続する場合には、ストールは起こらない。
【００７６】
第１デコーダ１１３は、主として第１演算部１１６のすべて、ＰＣ部１１８のＩＦステージ４０１で制御される部分以外、レジスタファイル１１５のＳ１バス３０１、Ｓ２バス３０２、Ｓ３バス３０３への読み出し制御とＤ１バス３１１からの書き込み制御に関する実行制御信号を生成する。命令に依存するＭステージ４０４やＷステージ４０５での処理に必要な制御信号もここで生成され、パイプラインの処理の流れに付随して転送される。第２デコーダ１１４は、主として第２演算部１１７での実行制御、レジスタファイル１１５のＳ４バス３０４、Ｓ５バス３０５への読み出し制御とＤ２バス３１２、Ｄ３バス３１３からの書き込み制御に関する実行制御信号を生成する。
【００７７】
Ｅステージ４０３では、演算、比較、制御レジスタを含むレジスタ間転送、ロード／ストア命令のオペランドアドレス計算、ジャンプ命令のジャンプ先アドレスの計算、ジャンプ処理、ＥＩＴ（例外、割り込み、トラップの総称）検出と各ＥＩＴのベクタテーブルへのジャンプ等、メモリアクセスと積和／積差演算命令の加算処理を除く命令実行に関するほとんどすべての処理を行う。
【００７８】
割り込みイネーブルの場合の割り込みの検出は、必ず３２ビット命令の切れ目で行われる。３２ビット命令の中にシーケンシャルに実行する２つのショート命令がある場合に、この２つのショート命令間で割り込みを受け付けることはない。
【００７９】
Ｅステージ４０３で処理中の命令がオペランドアクセスを行う命令であり、Ｍステージ４０４でメモリアクセスが完了しない場合には、Ｅステージ４０３での完了は待たされる。ステージ制御は制御部１１２で行われる。
【００８０】
Ｅステージ４０３において、第１演算部１１６では、算術論理演算、比較、転送を行う。モジュロの制御を含むメモリオペランドのアドレスや、分岐先のアドレス計算もこのＡＬＵ１５３で行われる。オペランドとして指定されたレジスタの値が、Ｓ１バス３０１、Ｓ２バス３０２、Ｓ３バス３０３に読み出され、別途取り込まれる即値、変位等の拡張データとともに、ＡＬＵ１５３で演算が行われ、演算結果がＤ１バス３１１を介してレジスタファイル１１５に書き戻される。ロード／ストア命令の場合には、演算結果はＡＯラッチ１５４、ＯＡバス３２１を介して、オペランドアクセス部１０４に送られ、ジャンプ命令の場合には、ジャンプ先アドレスがＪＡバス３２３を介して、ＰＣ部１１８に送られる。ストアデータはＳ１バス３０１、Ｓ２バス３０２を介して、レジスタファイル１１５から読み出され、ＳＤレジスタ１６０、ラッチ１６１で保持され、整置回路１６６で整置が行われる。また、ＰＣ部１１８では、実行中の命令のＰＣ値の管理、次に実行する命令のアドレスの生成が行われる。第１演算部１１６、ＰＣ部１１８に含まれる制御レジスタ（アキュムレータを除く）とレジスタファイル１１５間の転送は、Ｓ３バス３０３、Ｄ１バス３１１を介して行われる。
【００８１】
Ｅステージ４０３において、第２演算部１１７では、算術論理演算、比較、転送、シフト他積和演算の加算以外のすべての演算実行が行われる。オペランドの値が、レジスタファイル１１５や即値レジスタ２１８、アキュムレータ２０８等から、Ｓ４バス３０４、Ｓ５バス３０５やその他の専用経路を介して各演算器に転送され、指定された演算を行い、アキュムレータ２０８やＤ２バス３１２、Ｄ３バス３１３を介してレジスタファイル１１５に書き戻される。
【００８２】
第１演算部１１６及び第２演算部１１７での演算結果によるＰＳＷ１７２中のフラグ値の更新制御も、Ｅステージ４０３で行われる。しかし、演算結果の確定がＥステージ４０３の遅い時期になるため、実際のＰＳＷ１７２の値の更新は、次サイクルで行われる。データ転送によるＰＳＷ１７２の更新は、対応するサイクルで完了する。
【００８３】
第２デコーダ１１４で生成された積和／積差演算の加減算実行のための実行制御信号は、Ｅステージ４０３制御のもとに保持される。メモリアクセス情報、ロードレジスタ情報は、Ｍステージ４０４に送られる。Ｅステージ４０３のステージ制御も制御部１１２で行われる。
【００８４】
Ｍステージ４０４では、第１演算部１１６から送られたアドレスでオペランドのメモリアクセスが行われる。オペランドアクセス部１０４は、オペランドが内蔵データメモリ１０５やチップ内ＩＯ（図示せず）にある場合には、内蔵データメモリ１０５やチップ内ＩＯに対し、１クロックサイクルでメモリのリードもしくはライトを行う。オペランドが内蔵データメモリ１０５やチップ内ＩＯでない場合には、外部バスインターフェイス部１０６にデータアクセス要求を出す。外部バスインターフェイス部１０６は、外部のメモリに対してデータアクセスを行い、ロードの場合には読み出されたデータをオペランドアクセス部１０４に転送する。外部バスインターフェイス部１０６は、最小２クロックサイクルで外部メモリのアクセスを行うことが可能である。ロードの場合には、オペランドアクセス部１０４は読み出されたデータを、ＯＤバス３２２を介して転送する。バイトデータの場合はＬＤレジスタ１６４に、ワードもしくはダブルワードデータの場合にはレジスタファイル１１５に直接書き込む。ストアの場合には、整置されたストアデータの値が、整置回路１６２からＯＤバス３２２を介してオペランドアクセス部１０４に転送され、対象となるメモリへの書き込みが行われる。Ｍステージ４０４のステージ制御も制御部１１２で行われる。
【００８５】
Ｗステージ４０５において、ＬＤレジスタ１６４に保持されたロードオペランド（バイト）は、ラッチ１６５で保持され、整置回路１６６で整置、ゼロ／符号拡張された後に、Ｗバス３１４を介してレジスタファイル１１５へ書き込まれる。
【００８６】
Ｅ２ステージ４０６では、積和／積差演算の加減算処理をＡＬＵ２０１で行い、加減算結果をアキュムレータ２０８に書き戻す。
【００８７】
本データ処理装置は、入力クロックに基づいて同一周波数の非重複２相のクロック信号を生成し、内部制御に使用する。最短の場合、各パイプラインステージは、内部の１クロックサイクルで処理を終了する。ここでは、クロック制御の詳細については、本発明に直接関係ないので説明を省略する。
【００８８】
各サブ命令の処理例について説明する。加減算、論理演算、比較等の演算命令やレジスタ間の転送命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３の３段で処理を終了する。演算やデータ転送をＥステージ４０３で行う。
【００８９】
積和／積差命令は、乗算を行うＥステージ４０３と加減算を行うＥ２ステージの２クロックサイクルで演算実行を行うため、４段の処理となる。
【００９０】
バイトロード命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３、Ｍステージ４０４、Ｗステージ４０５の５段で処理を終了する。ワード／２ワードロードやストア命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３、Ｍステージ４０４の４段で処理を終了する。
【００９１】
非整置アクセスの場合には、オペランドアクセス部１０４でＭステージ４０４の制御のもと２回のアクセスに分割され、メモリアクセスが行われる。
【００９２】
実行に２サイクルかかる命令では、第１、第２命令デコーダ１１３、１１４で、２サイクルかけて処理し、各サイクル毎に各々実行制御信号を出力し、２サイクルかけて演算実行を行う。
【００９３】
ロング命令は、１つの３２ビット命令が１つのロング命令で構成されており、この１つのロング命令の処理で３２ビット命令の実行が完了する。パラレル実行する２つの命令は、２つのショート命令で処理サイクルの大きい方の命令の処理に律速される。例えば、２サイクル実行の命令と１サイクル実行の命令の組み合わせの場合には、２サイクルかかる。シーケンシャル実行の２つのショート命令の場合には、各サブ命令の組み合わせになり、デコード段階で各命令がシーケンシャルにデコードされ、実行される。例えば、Ｅステージ４０３で１サイクルで実行が完了する加算命令が２つの場合には、Ｄステージ４０２、Ｅステージ４０３とも各命令に１サイクル、計２サイクルかけて処理する。Ｅステージ４０３における先行命令の実行と並列して、Ｄステージ４０２で後続命令のデコードが行われる。
【００９４】
＜実施の形態１の特徴部＞
図１５は、実施の形態１のデータ処理装置における特徴部であるモジュロアドレッシング機能を実現する部分の構成を模式的に示す回路図である。図中、制御部１１２では、モジュロ演算に関する部分のみ示している。各ラッチのイネーブル信号等は簡単のため省略している。また、論理図も分かりやすいように極力正論理で示している。１５８は比較器であり、Ｓ３バス３０３で転送されるベースアドレス値とＭＯＤ＿Ｅ１５７に保持されたモジュロ・エンド・アドレスの比較を行う。比較器１５８では、２つのフィールドについて独立して比較結果を制御部１１２に送る。ビット０からビット１３の上位１４ビットが一致した場合に一致信号５１１が“１”になり、不一致の場合には一致信号５１１が“０”になる。ビット１４が一致した場合に一致信号５１２が“１”になり、不一致の場合には一致信号５１２が“０”になる。
【００９５】
ＭＯＤ＿Ｅ１５７は１５ビットのラッチであり、Ｄ１バス３１１からの入力ポートと、Ｓ３バス３０３、比較器１５８への出力ポートを持つ。ＭＯＤ＿Ｅ１５７の値がＳ３バス３０３に出力される場合には、ビット１５に“０”が出力される。モジュロ・スタート・アドレスを保持するＭＯＤ＿Ｓ１５６は、１５ビットのラッチであり、Ｄ１バス３１１からの入力ポートと、Ｓ３バス３０３、１６ビットのラッチ１５９への出力ポートを持つ。ＭＯＤ＿Ｓ１５６の値がＳ３バス３０３に出力される場合には、ビット１５に“０”が出力される。セレクタ１５５は、選択信号５１０に基づいてＡＬＵ１５３の出力とラッチ１５９に保持されたモジュロ・スタート・アドレス値を選択的にＤ１バス３１１に出力する。ラッチ１５９の値を選択する場合、ビット１５には“０”が出力される。また、２ワードアクセスでポストデクリメントの際に“０”、それ以外の場合に“１”になる、ローアクティブのポストデクリメント２ワードアクセス信号５０９が第１デコーダ１１３で生成され、ビット１４についてはこの信号５０９とラッチ１５９のビット１４との論理積がＡＮＤゲート５０３で求められてセレクタ１５５に出力される。すなわち、２ワードアクセスでポストデクリメントの場合には、強制的にビット１４に“０”が出力され、それ以外の場合には、ラッチ１５９のビット１４の値がそのまま出力される。
【００９６】
制御部１１２内では、命令のデコード結果や比較器１５８の比較結果に基づいて、セレクタ１５５の選択信号５１０が生成される。ＰＳＷ部１７１からは、モジュロイネーブルを指定するＭＤビット４４の値が信号線５０６で出力される。第１デコーダ１１３からは命令デコードの結果として、メモリアクセス命令でポスト・インクリメント／デクリメント時に“１”となるポスト更新信号５０７、２ワードアクセス時に“１”となる２ワードアクセス信号５０８が出力される。
【００９７】
ＡＮＤゲート５０１及びＯＲゲート５０２において、これらの情報を基に選択信号５１０が生成される。すなわち、ＯＲゲート５０２は一致信号５１２及び２ワードアクセス信号５０８の論理和演算を行ってその出力をＡＮＤゲート５０１に出力する。ＡＮＤゲート５０１はＯＲゲート５０２の出力、一致信号５１１、ＭＤビット４４の値（信号線５０６上に現れる）及びポスト更新信号５０７の論理積演算を行って、その出力を選択信号５１０として出力する。
【００９８】
したがって、１ワードアクセス時（２ワードアクセス信号５０８が“０”）において、モジュロ・アドレッシングがイネーブル状態（信号線５０６が“１”）で、ポスト・インクリメント／デクリメントを行うロード／ストア命令処理時（ポスト更新信号５０７が“１”）で、Ｓ３バス３０３で転送されるオペランドのアドレスとＭＯＤ＿Ｅ１５７の上位１４ビットが一致し（一致信号５１１が“１”）、かつ、オペランドのアドレスとＭＯＤ＿Ｅ１５７のビット１４とが一致（一致信号５１２が“１”）した場合に、選択信号５１０が“１”になり、上記条件を満たさない場合には、選択信号５１０は“０”になる。
【００９９】
一方、２ワードアクセス時（２ワードアクセス信号５０８が“１”）において、モジュロ・アドレッシングがイネーブル状態で、ポスト・インクリメント／デクリメントを行うロード／ストア命令処理時で、Ｓ３バス３０３で転送されるオペランドのアドレスとＭＯＤ＿Ｅ１５７の上位１４ビットが一致すれば、選択信号５１０が“１”になる。上記条件を満たさない場合には、選択信号５１０は“０”になる。
【０１００】
アドレスレジスタのポスト更新を行うロード／ストア命令実行時に、選択信号が“０”の場合には、ＡＬＵ１５３での加減算結果がポインタの更新値として、Ｄ１バス３１１を介してレジスタファイル１１５に書き戻される。選択信号が“１”の場合には、ラッチ１５９に保持されたモジュロ・スタート・アドレスの値がポインタの更新値として、Ｄ１バス３１１を介してレジスタファイル１１５に書き戻される。この際、２ワードアクセスでポストデクリメントの場合（信号５０９が“０”）には、ＡＮＤゲート５０３により強制的に“０”がセレクタ１５５のビット１４として出力され、それ以外の場合には、ラッチ１５９のビット１４の値がそのまま出力される。また、セレクタ１５５のビット１５には、強制的に“０”が出力される。
【０１０１】
モジュロ・アドレッシングがディスエーブル状態の場合には、選択信号５１０は必ず“０”になり、セレクタ１５５では常にＡＬＵ１５３の出力が選択される。
【０１０２】
次に、いくつかのサーキュラバッファでのロード／ストア命令の実行例におけるアドレスの更新について説明する。ＭＤビット４４は“１”とする。まず、ポストインクリメントでモジュロアドレッシングを使用する場合について説明する。
【０１０３】
本データ処理装置では、サーキュラバッファの境界アクセス時に４バイト境界の非整置アクセスを行った場合の動作は保証していない。２ワードアクセスを行う場合は、必ず４バイト境界に整置された状態でアクセスを行う。
【０１０４】
図１６は、２つの境界が共に４バイト整置されているサーキュラバッファの例を示す説明図である。ｈ’は１６進表記であることを示す。ｈ’１０００番地からｈ’１１ｆｆ番地の２５６ワード（５１２バイト）がサーキュラバッファの領域になっており、ＭＯＤ＿Ｓ１５６にはバッファ領域の先頭ワードアドレスであるｈ’１０００の上位１５ビットを、ＭＯＤ＿Ｅ１５７には最後のワードアドレスであるｈ’１１ｆｅの上位１５ビットがセットされる。
【０１０５】
１ワードアクセスでポストインクリメント処理を行う場合、第１デコーダ１１３から出力されるポスト更新信号５０７は“１”、２ワードアクセス信号５０８は“０”、ポストデクリメント２ワードアクセス信号５０９（ローアクティブ）は“１”になる。ベースアドレスレジスタの値がｈ’１１ｆｅの場合、一致信号５１１、５１２が共に“１”となってＡＮＤゲート５０１の出力である選択信号５１０が“１”となり、その結果、セレクタ１５５はモジュロ・スタート・アドレスの値（ラッチ１５９の出力＋“０”（ビット１５））を選択して、Ｄ１バス３１１を介してベースアドレスレジスタにｈ’１０００を書き戻す。
【０１０６】
一方、それ以外の場合には、一致信号５１１、５１２のいずれかが“０”になるため、セレクタ１５５は、ＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“２”が加算された値を選択してベースアドレスレジスタに書き戻す。例えば、ベースアドレスレジスタの値がｈ’１１ｆｃの場合、ベースアドレスレジスタにはｈ’１１ｆｅが書き戻される。
【０１０７】
２ワードアクセスでポストインクリメント処理を行う場合、第１デコーダ１１３から出力されるポスト更新信号５０７は“１”、２ワードアクセス信号５０８は“１”、ポストデクリメント２ワードアクセス信号５０９（ローアクティブ）は“１”になる。ベースアドレスレジスタの値がｈ’１１ｆｃの場合、一致信号５１１が“１”となるため、一致信号５１２が“０”となっても、選択信号５１０が“１”となり、その結果、セレクタ１５５ではモジュロ・スタート・アドレスの値が選択され、ベースアドレスレジスタには、ｈ’１０００が書き戻される。
【０１０８】
一方、それ以外の場合には、一致信号５１１が“０”になるため、ベースアドレスレジスタの初期値に“４”が加算された値がベースアドレスレジスタに書き戻される。
【０１０９】
このように、１ワードアクセスのポストインクリメント処理と２ワードアクセスのポストインクリメント処理との間で共通のＭＯＤ＿Ｓ１５６及びＭＯＤ＿Ｅ１５７の設定で、実施の形態１のデータ処理装置は、ポストインクリメント処理で１ワードアクセスする場合にも、２ワードアクセスする場合にも正しく動作する。
【０１１０】
図１７は、開始位置は４バイト整置されているが、終了位置が４バイト非整置のサーキュラバッファの例を示す説明図である。同図に示すように、ｈ’１０００番地からｈ’１１ｆｄ番地の２５５ワードがサーキュラバッファの領域になっており、ＭＯＤ＿Ｓ１５６にはバッファ領域の先頭ワードアドレスであるｈ’１０００の上位１５ビットが、ＭＯＤ＿Ｅ１５７には最後のワードアドレスであるｈ’１１ｆｃの上位１５ビットがセットされる。
【０１１１】
図１７で示した構成のサーキュラバッファに対し、ベースアドレスレジスタの値がｈ’１１ｆｃで１ワードアクセスを行う場合、ベースアドレスレジスタには、ｈ’１０００が書き戻される。それ以外の１ワードアクセスの場合には、ベースアドレスレジスタの初期値に“２”が加算された値がベースアドレスレジスタに書き戻される。終了位置が４バイト非整置なので、ベースアドレスレジスタの値がｈ’１１ｆｃで２ワードアクセスを行うことは意味がない。配列の計算などポインタの自動更新機能を活用するために、境界を意識して奇数ワードのサーキュラバッファを使用する場合には有効である。
【０１１２】
図１８は、開始位置は４バイト非整置で、終了位置が４バイト整置されているサーキュラバッファの例を示す説明図である。同図に示すように、ｈ’１００２番地からｈ’１１ｆｆ番地の２５５ワードがサーキュラバッファの領域になっており、ＭＯＤ＿Ｓ１５６にはバッファ領域の先頭ワードアドレスであるｈ’１００２の上位１５ビットが、ＭＯＤ＿Ｅ１５７には最後のワードアドレスであるｈ’１１ｆｅの上位１５ビットがセットされる。
【０１１３】
ベースアドレスレジスタの値がｈ’１１ｆｅで１ワードアクセスを行う場合、ベースアドレスレジスタには、ｈ’１００２が書き戻される。それ以外の１ワードアクセスの場合には、ベースアドレスレジスタの初期値に“２”が加算された値がベースアドレスレジスタに書き戻される。ベースアドレスレジスタの値がｈ’１１ｆｃで２ワードアクセスを行う場合、ベースアドレスレジスタには、ｈ’１００２が書き戻される。それ以外の２ワードアクセスの場合には、ベースアドレスレジスタの初期値に“４”が加算された値がベースアドレスレジスタに書き戻される。この場合も、ポインタの自動更新機能を活用する目的で、境界を意識して奇数ワードのサーキュラバッファを使用する場合には有効である。
【０１１４】
図１９は、開始位置、終了位置共に４バイト整置されていないサーキュラバッファの例を示す説明図である。同図に示すように、ｈ’１００２番地からｈ’１１ｆｄ番地の２５４ワードがサーキュラバッファの領域になっており、ＭＯＤ＿Ｓ１５６にはバッファ領域の先頭ワードアドレスであるｈ’１００２の上位１５ビットが、ＭＯＤ＿Ｅ１５７には最後のワードアドレスであるｈ’１１ｆｃの上位１５ビットがセットされる。
【０１１５】
ベースアドレスレジスタの値がｈ’１１ｆｃで１ワードアクセスを行う場合、ベースアドレスレジスタには、ｈ’１００２が書き戻される。それ以外の場合には、ベースアドレスレジスタの初期値に“２”が加算された値がベースアドレスレジスタに書き戻される。２ワードアクセスを行う場合も、最初のワードと最後のワードは１ワードアクセスする必要がある。この場合も、ポインタの自動更新機能を活用する目的で、境界を意識してサーキュラバッファを使用する場合には有効である。ただし、この場合はサーキュラーバッファのサイズが２ワードの整数倍なので、バッファの境界を整置して使用した方が効率はよい。
【０１１６】
図１６〜図１９のいずれの場合も、１ワードアクセスする場合には、開始／終了位置の境界によらず正しく処理が行われる。また、境界を意識し、モジュロアドレッシングによるアドレスの自動更新機能を使うことを目的とする場合には、すべての場合で有効である。１ワードアクセスと２ワードアクセスとが混在する場合には、サーキュラーバッファの開始／終了位置を４バイト境界に整置するように、バッファ領域をとれば境界を意識せずアクセスすることが可能である。奇数ワードデータの場合も、１ワード分余分に領域を確保すれば、２つの境界を４バイト境界に整置することが可能である。必ず倍精度（３２ビット）のデータを保持する場合、複素数のように２つのワードのペアを保持する場合には、サーキュラーバッファの開始／終了位置を４バイト境界に整置し、必ず２ワードアクセスを行うようにすればよい。
【０１１７】
上述のように、実施の形態１のデータ処理装置は、ポストインクリメント処理によって１ワードアクセスのみならず２ワードアクセスを行う場合に、サーキュラーバッファに効率よくアクセスすることが可能となり、プログラムのコードサイズの削減、処理サイクル数の低減に寄与する。これに伴い、特定のアプリケーションを実行時に消費する電力を抑えることができる。
【０１１８】
また、１ワードアクセスあるいは２ワードアクセス場合も、サーキュラーバッファの最初のワードと最後のワードのアドレスをそれぞれ設定すればよいので、設定が統一されており分かりやすい。
【０１１９】
次に、ポストデクリメント処理を行う場合について説明する。ただし、ポストインクリメントの場合と異なり、オペランドのアクセスサイズとポインタの更新サイズは必ずしも一致しないため、１ワードアクセスと２ワードアクセスが混在する場合には、ポインタ値の補正が必要になる。
【０１２０】
図２０は、２つの境界が共に４バイト整置されているサーキュラバッファの例を示す説明図である。同図に示すように、ｈ’１０００番地からｈ’１１ｆｆ番地の２５６ワード（５１２バイト）がサーキュラバッファの領域になっており、ＭＯＤ＿Ｓ１５６にはバッファ領域の最後のワードアドレスであるｈ’１１ｆｅの上位１５ビットが、ＭＯＤ＿Ｅ１５７には最初のワードアドレスであるｈ’１０００の上位１５ビットがセットされる。
【０１２１】
ポストデクリメント処理で１ワードアクセスを行う場合、第１デコーダ１１３から出力されるポスト更新信号５０７は“１”、２ワードアクセス信号５０８は“０”、ポストデクリメント２ワードアクセス信号５０９（ローアクティブ）は“１”になる。ベースアドレスレジスタの値がｈ’１０００の場合、一致信号５１１、５１２が共に“１”となって選択信号５１０が“１”となり、その結果、セレクタ１５５はモジュロ・スタート・アドレスの値（ラッチ１５９の出力＋“０”（ビット１５））を選択して、Ｄ１バス３１１を介してレジスタファイル１１５内のベースアドレスレジスタにｈ’１１ｆｅを書き戻す。
【０１２２】
それ以外の場合には、一致信号５１１、５１２のいずれかが“０”になるため、セレクタ１５５はＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“２”が減算された値を選択して、ベースアドレスレジスタに書き戻す。例えば、ベースアドレスレジスタの値がｈ’１００２の場合、ベースアドレスレジスタにはｈ’１０００が書き戻される。
【０１２３】
ポストデクリメント処理で２ワードアクセスを行う場合、第１デコーダ１１３から出力されるポスト更新信号５０７は“１”、２ワードアクセス信号５０８は“１”、ポストデクリメント２ワードアクセス信号５０９（ローアクティブ）は“０”になる。ベースアドレスレジスタの値がｈ’１０００の場合、一致信号５１１、５１２が共に“１”となって選択信号５１０が“１”となり、その結果、セレクタ１５５はモジュロ・スタート・アドレスの値（ラッチ１５９の上位１４ビット出力＋“００”（ビット１４，１５））を選択してｈ’１１ｆｃをベースアドレスレジスタに書き戻す。
【０１２４】
セレクタ１５５の出力のビット１４が“０”になるのはローアクティブのポストデクリメント２ワードアクセス信号５０９が“０”のため、ＡＮＤゲート５０３によってラッチ１５９の出力のビット１４が強制的に０にクリアされることによる。
【０１２５】
それ以外の場合には、一致信号５１１が“０”になるため、セレクタ１５５は、ＡＬＵ１５３の出力、すなわちベースアドレスレジスタの初期値に“４”が減算された値を選択してベースアドレスレジスタに書き戻す。
【０１２６】
このように、１ワードアクセスのポストデクリメント処理と２ワードアクセスのポストデクリメント処理との間で共通のＭＯＤ＿Ｓ１５６及びＭＯＤ＿Ｅ１５７の設定で、実施の形態１のデータ処理装置は、ポストデクリメント処理で１ワードアクセスする場合にも、２ワードアクセスする場合にも正しく動作する。
【０１２７】
図２１は、開始位置は４バイト整置されているが、終了位置が４バイト非整置のサーキュラバッファの例を示す。ｈ’１０００番地からｈ’１１ｆｄ番地の２５５ワードがサーキュラバッファの領域になっており、ＭＯＤ＿Ｓ１５６には最後のワードアドレスであるｈ’１１ｆｃの上位１５ビットが、ＭＯＤ＿Ｅ１５７にはバッファ領域の先頭ワードアドレスであるｈ’１０００の上位１５ビットがセットされる。
【０１２８】
ベースアドレスレジスタの値がｈ’１０００で１ワードアクセスのポストデクリメント処理を行う場合、ベースアドレスレジスタには、ｈ’１１ｆｃが書き戻される。それ以外の１ワードアクセスの場合には、ベースアドレスレジスタの初期値に“２”が減算された値がベースアドレスレジスタに書き戻される。
【０１２９】
ベースアドレスレジスタの値がｈ’１０００で２ワードアクセスのポストデクリメント処理を行う場合、ベースアドレスレジスタには、ｈ’１１ｆｃが書き戻される。それ以外の２ワードアクセスの場合には、ベースアドレスレジスタの初期値に“４”が減算された値がベースアドレスレジスタに書き戻される。この場合、境界を意識したアクセスが必要となる。
【０１３０】
図２２は、開始位置は４バイト非整置で、終了位置が４バイト整置されているサーキュラバッファの例を示す。ｈ’１００２番地からｈ’１１ｆｆ番地の２５５ワードがサーキュラバッファの領域になっており、ＭＯＤ＿Ｓ１５６には最後のワードアドレスであるｈ’１１ｆｅの上位１５ビットが、ＭＯＤ＿Ｅ１５７にはバッファ領域の先頭ワードアドレスであるｈ’１００２の上位１５ビットがセットされる。
【０１３１】
ベースアドレスレジスタの値がｈ’１００２で１ワードアクセスのポストデクリメント処理を行う場合、ベースアドレスレジスタには、ｈ’１１ｆｅが書き戻される。それ以外の１ワードアクセスの場合には、ベースアドレスレジスタの初期値に“２”が減算された値がベースアドレスレジスタに書き戻される。
【０１３２】
ベースアドレスレジスタの値がｈ’１０００で２ワードアクセスのポストデクリメント処理を行うことには意味がないので、動作は保証していない。それ以外の２ワードアクセスの場合には、ベースアドレスレジスタの初期値に“４”が減算された値がベースアドレスレジスタに書き戻される。この場合も、境界を意識したアクセスが必要となる。
【０１３３】
図２３は、開始位置、終了位置共に４バイト整置されていないサーキュラバッファの例を示す。ｈ’１００２番地からｈ’１１ｆｄ番地の２５４ワードがサーキュラバッファの領域になっており、ＭＯＤ＿Ｓ１５６にはバッファ領域の最後のワードアドレスであるｈ’１１ｆｃの上位１５ビットが、ＭＯＤ＿Ｅ１５７には先頭ワードアドレスであるｈ’１００２の上位１５ビットがセットされる。
【０１３４】
ベースアドレスレジスタの値がｈ’１００２で１ワードアクセスのポストデクリメント処理を行う場合、ベースアドレスレジスタには、ｈ’１１ｆｃが書き戻される。それ以外の場合には、ベースアドレスレジスタの初期値に“２”が減算された値がベースアドレスレジスタに書き戻される。
【０１３５】
２ワードアクセスのポストデクリメント処理を行う場合も、最初のワードと最後のワードは１ワードアクセスする必要がある。この場合も、ポインタの自動更新機能を活用する目的で、境界を意識して奇数ワードのサーキュラバッファを使用する場合には有効である。ただし、この場合はサーキュラーバッファのサイズが２ワードの整数倍なので、バッファの境界を整置して使用した方が効率はよい。
【０１３６】
図２０〜図２３で示したいずれの場合も、１ワードアクセスのポストデクリメント処理を行う場合には、開始／終了位置の境界によらず正しく処理が行われる。また、境界を意識し、モジュロアドレッシングによるアドレスの自動更新機能を使うことを目的とする場合には、すべての場合で有効である。必ず１ワードアクセスする場合は、開始／終了位置の境界を４バイト整置してなくもよい。
【０１３７】
上述のように、実施の形態１のデータ処理装置は、ポストデクリメント処理によって１ワードのみならず２ワードアクセスを行う場合にも、サーキュラーバッファに効率良くアクセスすることが可能となり、プログラムのコードサイズの削減、処理サイクル数の低減に寄与する。また、いずれの場合も、サーキュラーバッファの最初のワードと最後のワードのアドレスを設定すればよいので、設定が統一されており、分かりやすい。
【０１３８】
また、実施の形態１のデータ処理装置は、ポストインクリメント処理及びポストデクリメント処理時において、アドレスの計算と並列にベースアドレスの初期値に基づく判定処理可能となるため、動作周波数の向上による高速化が容易である。
【０１３９】
ここまで、サーキュラーバッファの様々な境界についての説明を行ったが、奇数ワードの境界の場合には制限が多い。許されるならば奇数ワードの場合は１ワード分無駄なデータ領域を追加し、２つの境界を２ワード整置して使用する方が効率はよい。特に境界を意識したくない場合は、２ワード整置して使用する。
【０１４０】
次に、実施の形態１のデータ処理装置を用いて１サンプル毎に逐次処理を行う２５６タップのＦＩＲ（有限インパルス応答）フィルタの処理例について述べる。ＦＩＲフィルタ処理プログラム例を図２４に示す。図２４において、“｜｜”は２つのショート命令を並列に実行することを示す。ＦＩＲフィルタ処理では、下記の数１に示す計算を行う。数１においてＡ［ｉ］は係数であり、Ｄ［ｉ］はデータであり、ｉの値が小さい程、最新のデータを意味する。２５６回の積和演算となる。データ、係数とも１６ビットの場合について説明する。
【０１４１】
【数１】
0003789583.tif 000002
【０１４２】
図２４のプログラム部分５２１では、データポインタ（Ｄ［０］のアドレス）の整置条件が判定される。４バイト整置されている場合にはプログラム部分５２２が実行され、そうでない場合にはプログラム部分５２３が実行される。プログラム部分５２４は両者の共通の後処理を行う。
【０１４３】
図２５に初期状態での係数及びデータの内蔵データメモリ１０５中の割り当てを示す。係数はｈ’２０００番地〜ｈ’２１ｆｆ番地の２５６ワード（５１２バイト）に係数の配列が配置され、ｈ’２４００番地〜ｈ’２５ｆｆ番地の２５６ワード（５１２バイト）にデータの配列が配置されている。
【０１４４】
このプログラムを実行する前に、レジスタｒ８にはデータのポインタ（Ｄ［０］のアドレス）が、レジスタｒ９には係数の先頭アドレス（Ａ［０］のアドレス）がセットされているものとする。また、ＭＯＤ＿Ｓ１５６にはサーキュラーバッファとして使用するデータアレイ領域の先頭ワードアドレスであるｈ’２４００が、ＭＯＤ＿Ｅ１５７にはデータアレイ領域の最終ワードアドレスであるｈ’２５ｆｅが、ＰＳＷ２１中のＭＤビット４４には“１”がセットされており、モジュロアドレッシングがイネーブル状態になっているものとする。
【０１４５】
プログラム部分５２１において、ｂｔｓｔ命令でレジスタｒ８に格納されているデータポインタのビット１４（ＬＳＢから２ビット目）をテストする。ビット１４が０、すなわち、４バイト整置されている場合には、Ｆ０フラグ４７に“０”がセットされる。ビット１４が“１”、すなわち、４バイト整置されていない場合にはＦ０フラグ４７に“１”がセットされる。ｂｒｆ０ｔ命令では、Ｆ０フラグ４７が“１”（４バイト非整置）の場合ラベルｏｄｄで始まるのプログラム部分５２３が実行され、Ｆ０フラグ４７が“０”（４バイト整置）の場合引き続くラベルｅｖｅｎで始まるプログラム部分５２２が実行される。
【０１４６】
”ｍａｃ  ａ０，ｒｎ，ｒｍ”命令は、レジスタｒｍに保持されている符号付きの１６ビット数とレジスタｒｎに保持されている符号付きの１６ビット数との乗算結果を、アキュムレータａ０に加算し書き戻す。”ｒｅｐｉ  ＃ｃ，ｌａｂｅｌ”命令は、次の命令からｌａｂｅｌのついた命令までを、ｃ回繰り返し実行することを示すブロックリピート命令である。”ｃｌｒａｃ  ａ０”命令は、ａ０をゼロクリアする。
【０１４７】
プログラム部分５２２では、すべてのオペランドが２ワード単位でアクセスされ、所望の積和演算が実行される。積和の結果は、ａ０に保持される。プログラム部分５２３では、Ｄ［０］のアドレスが４バイト境界に乗っていないため、Ｄ［０］とＤ［２５５］のみ１ワード単位でアクセスされ、その他の部分は２ワードアクセスを行う。このようにして、いずれの場合も１クロックサイクルに１回の積和演算が実現される。プログラム部分５２２の最後の”ｂｒａ  ｅｎｄ”命令は、ラベルｅｎｄのついている命令まで無条件に分岐する命令である。プログラム部分５２４の”ｒａｃｈｉ  ｒ０、ａ０，＃０”の命令は、ａ０に保持されている固定少数点フォーマットの数値を１６ビットに丸め、サチュレーションをかけて、レジスタｒ０に転送する命令である。
【０１４８】
図２５の状態では、プログラム部分５２２が実行され、すべてのデータが２ワードアクセスされる。１サンプル後、前回の最も古いデータＤ［２５５］が格納されたいた領域５３１の位置に最新データのＤ［０］が上書きされ、ポインタがｈ’２５ｆｅに更新されて、図２６で示す状態になる。
【０１４９】
図２６で示す状態では、まずプログラム部分５２３の前処理でＤ［０］５３２が１ワードアクセスで読み出される。レジスタｒ８はモジュロ機構が動作し、ｈ’２４００に更新され、その後、領域５３３のＤ［１］から領域５３４のＤ［２５４］まで２ワードアクセスでロードされる。そして、最後の領域５３５のＤ［２５５］は１ワードアクセスでロードされる。
【０１５０】
さらに、次のサンプル入力時には、サーキュラバッファは図２７の状態になる。データポインタは、ｈ’２５ｆｃに更新される。この状態でもプログラム部分５２２が実行され、すべてのデータが２ワードアクセスされる。ｈ’２５ｆｃの状態で２ワードアクセスを行うと、レジスタｒ８はｈ’２４００に更新される。
【０１５１】
このように、１サンプル毎に処理するＦＩＲフィルタ処理では、１ワードアクセスと２ワードアクセスが混在するが、実施の形態１のデータ処理装置によれば、サーキュラバッファの境界を１ワードアクセスする場合にも、２ワードアクセスを行う場合にも正しくポインタの更新がなされる。したがって、ユーザーはサーキュラバッファの境界を意識することなくプログラミングできプログラムのコードサイズも削減でき、プログラム中の条件判定等による処理性能の低下を招くこともなく、実施の形態１のデータ処理を用いて効率よく逐次処理を行うことができる。
【０１５２】
実施の形態１では、１ワードアクセスあるいは２ワードアクセスのポストデクリメント及びポストデクリメント処理でロード／ストア命令を実行可能なデータ処理装置について述べたが、さらに４ワード等より多くのデータを一度に転送するロード／ストア命令をインプリメントする場合にも、本発明の技術を応用して使用可能である。例えば、１ワードアクセス、２ワードアクセス及び４ワードアクセスを実行可能にする場合、３つのレベル（４ワードレベル、２ワードレベル、１ワードレベル）の一致信号を基に判定を行えばよい。
【０１５３】
また、アドレスのビット長は１６ビットになっているが、２４ビットや３２ビット等任意のビット長であってもよい。また、データの基本データ長を１６ビットにしているが、２４ビットＤＳＰのように２４ビットにしたり、汎用プロセッサのように３２ビットにしてもよい。
【０１５４】
また、上述の実施の形態１では、バイトアドレスを管理しているが、一般のＤＳＰのように１６ビットや２４ビット、３２ビットを１ワードとして、ワードアドレスを管理するような場合にも本発明は適用可能である。
【０１５５】
上述の実施の形態１では、２ワードアクセスのポストインクリメント及びポストデクリメント処理時に、一致信号５１１が“１”の場合、ビット１４の一致・不一値を指示する一致信号５１２を参照することなくポインタ値（ベースアドレスレジスタの値）の入れ替えを行っている。すなわち、上述の実施の形態１では、２ワードアクセス時に一致信号５１１が“１”であれば、ＭＯＤ＿Ｅ１５７のアドレス値とポインタ値との間において、２ワードデータを特定するアドレス部分が等価であるとみなしている。
【０１５６】
上記ポインタの入れ替え以外にも、２ワードアクセスのポストインクリメント処理（ポストデクリメント処理）時に、一致信号５１１が“１”でかつビット１４が“０”であるとき（２ワードデータを構成する２つの１ワードデータのうち、前半の１ワードデータを特定するアドレスにポインタ値が一致する）、はじめてポインタ値の入れ替えを行うように構成してもよい。すなわち、２ワードアクセス時に一致信号５１１が“１”でかつビット１４が“０”であれば、ＭＯＤ＿Ｅ１５７のアドレス値とポインタ値との間において、２ワードデータを特定するアドレス部分が等価であるとみなしてもよい。
【０１５７】
上述の実施の形態１ではビット１５の値を無視してアドレスの上位１５ビットのみで判定を行っているが、ビット１５が“０”であることを判定条件に加えてもよい。
【０１５８】
上述の実施の形態１では、ＭＯＤ＿Ｓ１５６、ＭＯＤ＿Ｅ１５７は、物理的に１５ビットしか保持しないようにしているが、１６ビット保持するようにし、ビット１５は無視するような構成にしてもよいし、ビット１５も比較に使用するように構成してもよい。比較に使用する場合には、ＭＯＤ＿Ｓ１５６のビット１５に必ず“０”を設定するようにして、１６ビットすべてを比較するようにすればよい。
【０１５９】
また、ＭＯＤ＿Ｓ１５６、ＭＯＤ＿Ｅ１５７には、ワードアドレスを設定しているが、境界のバイトアドレスを設定するようにしてもよい。ビット１５を無視すれば、上述の実施の形態１の動作と全く同じになる。
【０１６０】
上述の実施の形態１では、ＭＯＤ＿Ｓ１５６、ＭＯＤ＿Ｅ１５７には、アドレスの最上位ビット（ＭＳＢ）までのすべてのアドレス値を保持するようになっているが、アドレスの上位数ビットは保持しないようにし、下位ビットのみで判定を行うようにすれば、複数の領域に形成された複数のサーキュラーバッファに対して、同じ設定で同時にモジュロ機構が動作するようにできる。ただし、比較しない上位ビットについては、更新前の値をそのまま出す等の処理が必要になる。
【０１６１】
上述の実施の形態１では、上位１４ビットとビット１４の２つの比較結果を出力するようにしているが、ワードアドレスがマッチしたことを示す情報と、２ワードアドレスがマッチした情報が含まれていれば、どのような形態で演算結果を出力してもよい。
【０１６２】
上述の実施の形態１では、インクリメント時にもデクリメント時にも動作可能な実施例が示されているが、インクリメント時のみあるいはデクリメント時にのみ動作するようにしてもよい。
【０１６３】
上述の実施の形態１では、一般的なプロセッサの構成を示しているが、ＤＳＰのように、アドレスレジスタとデータレジスタ（アキュムレータ等）を分けるような構成にしてもよい。また、ＤＳＰのように、複数のメモリを独立にアクセスできるような構成にしても、本発明の技術は有効である。
【０１６４】
上述の実施の形態１では、規定された場合以外の動作は保証していないが、上記規定された場合以外の時に例外を検出する等の処理を行ってもよい。例えば、奇数アドレスの場合にはアドレス例外を起こす等の処理を行ってもよい。
【０１６５】
＜実施の形態２．＞
実施の形態１のデータ処理装置では巡回方向に応じて、プログラムでＭＯＤ＿Ｓ１５６とＭＯＤ＿Ｅ１５７とにサーキュラーバッファの境界値をセットする場合について説明した。
【０１６６】
実施の形態２のデータ処理装置ではサーキュラバッファの領域を上限アドレスと下限アドレスをワードアドレスで指定し、ハードウエアで比較アドレスと出力アドレスの選択を行うように構成される。モジュロアドレッシングの制御を行う部分は実施の形態１と異なるが、その他の基本的な仕様および構成は実施の形態１と同じである。
【０１６７】
図２８は、サーキュラバッファのアドレスをワードアドレスでセットするＭＯＤ＿Ｕ６５０とＭＯＤ＿Ｌ６５１を示す。同図に示すように、サーキュラーバッファの境界アドレスを指定する制御レジスタとして、実施の形態１のＭＯＤ＿Ｅ１５７とＭＯＤ＿Ｓ１５６の代わりに、ＭＯＤ＿Ｕ６５０とＭＯＤ＿Ｅ１５７とがインプリメントされている。
【０１６８】
ＭＯＤ＿Ｕ６５０は１５ビットのラッチで、モジュロ演算の対象となる領域の上限アドレスがワードアドレスでセットされる。ＭＯＤ＿Ｌ６５１は１５ビットのラッチで、モジュロ演算の対象となる領域の下限アドレスがワードアドレスでセットされる。但し、下限アドレスは上限アドレスより小さいアドレスである。ＭＯＤ＿Ｕ６５０、ＭＯＤ＿Ｌ６５１に保持されない最下位ビット（ビット１５）は“０”固定であり、書き込み時は無視され、読み出し時は常に“０”となる。
【０１６９】
図２９は、実施の形態２のデータ処理装置の特徴部であるモジュロアドレッシング機能を実現する部分の構成を示す模式的に示す回路図である。制御部６１６は実施の形態１の制御部１１２に相当し、モジュロ演算の制御に関する部分以外はほぼ同じである。モジュロ演算部７０２は実施の形態１のモジュロ演算部７００に相当する。各ラッチのイネーブル信号等は簡単のため省略している。また、論理図も分かりやすいように極力正論理で示している。
【０１７０】
図２９で示す回路以外の回路部分は実施の形態１のデータ処理装置とほぼ同じである。同図において、セレクタ６１４は第１デコーダ６１７で生成されるポストインクリメント信号６１３の制御下で、ＭＯＤ＿Ｕ６５０あるいはＭＯＤ＿Ｌ６５１の値を選択的に比較器１５８に出力する。ポストインクリメント信号６１３はメモリアクセス命令（ロード命令，ストア命令）でポストインクリメント時に“１”、ポストデクリメント時に“０”となる。すなわち、セレクタ６１４は、ポストインクリメント信号６１３が“１”でポストインクリメントを指示する場合に、ＭＯＤ＿Ｕ６５０の値を選択して比較器１５８に出力し、ポストインクリメント信号６１３が“０”でポストデクリメントを指示する場合に、ＭＯＤ＿Ｌ６５１の値を選択して比較器１５８に出力する。
【０１７１】
比較器１５８は、Ｓ３バス３０３で転送されるベースアドレス値とセレクタ６１４から出力されたアドレスとの比較を行う。比較器１５８では、２つのフィールドについて独立して比較結果を制御部６１６に送る。ビット０からビット１３の上位１４ビットが一致した場合に一致信号６１１が“１”になり、不一致の場合には一致信号６１１が“０”になる。ビット１４が一致した場合に一致信号６１２が“１”になり、不一致の場合には一致信号６１２が“０”になる。
【０１７２】
サーキュラバッファの上限アドレスを保持するＭＯＤ＿Ｕ６５０は１５ビットのラッチであり、Ｄ１バス３１１からの入力ポートと、Ｓ３バス３０３、セレクタ６１５、セレクタ６１４への出力ポートを持つ。ＭＯＤ＿Ｕ６５０の値がＳ３バス３０３に出力される場合には、ビット１５として“０”が出力される。
【０１７３】
サーキュラバッファの下限アドレスを保持するＭＯＤ＿Ｌ６５１は、１５ビットのラッチであり、Ｄ１バス３１１からの入力ポートと、Ｓ３バス３０３、セレクタ６１４、セレクタ６１５への出力ポートを持つ。ＭＯＤ＿Ｌ６５１の値がＳ３バス３０３に出力される場合には、ビット１５として“０”が出力される。
【０１７４】
セレクタ６１５は、第１デコーダ６１７で生成されるポストインクリメント信号６１３で制御下でＭＯＤ＿Ｕ６５０あるいはＭＯＤ＿Ｌ６５１の値を選択的にラッチ１５９に出力する。すなわち、セレクタ６１５は、ポストインクリメント信号６１３が“１”でポストインクリメントを指示する場合に、ＭＯＤ＿Ｌ６５１の値を選択してラッチ１５９に出力し、ポストインクリメント信号６１３が“０”でポストデクリメントを指示する場合に、ＭＯＤ＿Ｕ６５０の値を選択してラッチ１５９に出力する。
【０１７５】
セレクタ１５５は、選択信号６１０に基づいてＡＬＵ１５３の出力とラッチ１５９に保持されたアドレス値を選択的にＤ１バス３１１に出力し、ラッチ１５９の値を選択する場合、ビット１５として“０”を出力する。また、２ワードアクセスでポストデクリメントの際に“０”、それ以外の場合に“１”になる、ローアクティブのポストデクリメント２ワードアクセス信号６０９が第１デコーダ６１７で生成され、ビット１４についてはこの信号とラッチ１５９のビット１４とのＡＮＤゲート６０３による論理積が、セレクタ１５５のビット１４に出力される。すなわち、ポストデクリメント２ワードアクセス信号６０９が“０”で２ワードアクセスのポストデクリメントを指示する場合には、強制的にセレクタ１５５のビット１４に“０”が出力され、それ以外の場合には、ラッチ１５９のビット１４の値がそのままセレクタ１５５のビット１４に出力される。
【０１７６】
制御部６１６内では、命令のデコード結果や比較器１５８の比較結果に基づいて、セレクタ１５５の選択信号６１０が生成される。ＰＳＷ部１７１からは、モジュロイネーブルを指定するＭＤビット４４の値が信号線６０６で出力される。第１デコーダ６１７からは命令デコードの結果として、メモリアクセス命令でポスト・インクリメント／デクリメント時に“１”となるポスト更新信号６０７、２ワードアクセス時に“１”となる２ワードアクセス信号６０８が出力される。ＡＮＤゲート６０１及びＯＲゲート６０２において、これらの情報を基に選択信号６１０が生成される。すなわち、ＯＲゲート６０２は一致信号６１２及び２ワードアクセス信号６０８の論理和を出力し、ＡＮＤゲート６０１はＭＤビット４４の値（信号線６０６上）、ポスト更新信号６０７、一致信号６１１及びＯＲゲート６０２の出力値の論理積を選択信号６１０として出力する。
【０１７７】
したがって、１ワードアクセス時（２ワードアクセス信号６０８が“０”）において、モジュロ・アドレッシングがイネーブル状態（信号線６０６が“１”）で、ポスト・インクリメント／デクリメントを行うロード／ストア命令処理時（ポスト更新信号６０７が“１”）で、かつ、Ｓ３バス３０３で転送されるオペランドのアドレスとセレクタ６１４で選択されたアドレスの上位１４ビットとが一致し（一致信号６１１が“１”）した場合に、選択信号６１０が“１”になり、上記条件を満たさない場合には選択信号６１０は“０”になる。
【０１７８】
一方、２ワードアクセス時（２ワードアクセス信号６０８が“１”）において、モジュロ・アドレッシングがイネーブル状態で、ポスト・インクリメント／デクリメントを行うロード／ストア命令処理時で、選択信号６１０が“１”になり、上記条件を満たさない場合には、選択信号６１０は“０”になる。
【０１７９】
アドレスレジスタのポスト更新を行うロード／ストア命令実行時で、選択信号６１０が“０”の場合には、ＡＬＵ１５３での加減算結果がポインタの更新値として、Ｄ１バス３１１を介してレジスタファイル１１５に書き戻される。選択信号６１０が“１”の場合には、ラッチ１５９に保持されたアドレスの値がポインタの更新値として、Ｄ１バス３１１を介してレジスタファイル１１５に書き戻される。この際、２ワードアクセスでポストデクリメントの場合には、ＡＮＤゲート６０３により強制的に“０”がセレクタ１５５のビット１４として出力され、それ以外の場合には、ラッチ１５９のビット１４の値がそのまま出力される。また、セレクタ１５５のビット１５には、強制的に“０”が出力される。
【０１８０】
モジュロ・アドレッシングがディスエーブル状態の場合には、選択信号６１０は必ず“０”になり、セレクタ１５５では常にＡＬＵ１５３の出力が選択される。
【０１８１】
一例として次に、サーキュラバッファ領域をアクセスするロード／ストア命令の実行時におけるアドレスの更新について説明する。このとき、ＭＤビット４４は“１”とする。
【０１８２】
本データ処理装置では、サーキュラバッファの境界アクセス時に４バイト境界の非整置アクセスを行った場合の動作は保証していない。２ワードアクセスを行う場合は、必ず４バイト境界に整置された状態でアクセスを行う。
【０１８３】
図３０は、２つの境界が共に４バイト整置されているサーキュラバッファの例を示す。ｈ’は１６進表記であることを示す。ｈ’１０００番地からｈ’１１ｆｆ番地の２５６ワード（５１２バイト）がサーキュラバッファの領域になっており、ＭＯＤ＿Ｌ６５１にはバッファ領域の下限ワードアドレスであるｈ’１０００を、ＭＯＤ＿Ｕ６５０には上限のワードアドレスであるｈ’１１ｆｅをセットする。
【０１８４】
ポストインクリメント処理を行う場合、１ワードアクセス，２ワードアクセスに関係なく、第１デコーダ６１７から出力されるポストインクリメント信号６１３は“１”になるため、セレクタ６１４はＭＯＤ＿Ｕ６５０の値を選択して比較器１５８の出力し、セレクタ６１５はＭＯＤ＿Ｌ６５１の値を選択してラッチ１５９に出力する。
【０１８５】
ポストインクリメント処理で１ワードアクセスを行う場合、第１デコーダ６１７から出力されるポストインクリメント信号６１３は“１”、ポスト更新信号６０７は“１”、２ワードアクセス信号６０８は“０”、ポストデクリメント２ワードアクセス信号６０９（ローアクティブ）は“１”になる。
【０１８６】
この状態で、ベースアドレスレジスタの値がｈ’１１ｆｅの場合、一致信号６１１、６１２が共に“１”となって選択信号６１０が“１”となり、その結果、セレクタ１５５はラッチ１５９に保持された値（ＭＯＤ＿Ｌ６５１の値）を選択して、Ｄ１バス３１１を介してレジスタファイル１１５のベースアドレスレジスタにｈ’１０００を書き戻す。
【０１８７】
それ以外の場合には、一致信号６１１、６１２のいずれかが“０”になるため、選択信号６１０が“０”となり、セレクタ１５５はＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“２”が加算された値をベースアドレスレジスタに書き戻す。例えば、ベースアドレスレジスタの値がｈ’１１ｆｃの場合、ベースアドレスレジスタにはｈ’１１ｆｅが書き戻される。
【０１８８】
ポストインクリメント処理で２ワードアクセスを行う場合、第１デコーダ６１７から出力されるポストインクリメント信号６１３は“１”、ポスト更新信号６０７は“１”、２ワードアクセス信号６０８は“１”、ポストデクリメント２ワードアクセス信号６０９（ローアクティブ）は“１”になる。
【０１８９】
この状態で、ベースアドレスレジスタの値がｈ’１１ｆｃの場合、一致信号６１１が“１”であり２ワードアクセス信号６０８が“１”であるため、一致信号６１２が“０”となっても、選択信号６１０が“１”となり、その結果、セレクタ１５５はラッチ１５９の出力値（セレクタ６１５の値）を選択してベースアドレスレジスタにｈ’１０００を書き戻す。
【０１９０】
それ以外の場合には、一致信号６１１が“０”になり選択信号６１０が“０”となるため、セレクタ１５５はＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“４”が加算された値をベースアドレスレジスタに書き戻す。
【０１９１】
このように、実施の形態２のデータ処理装置は、サーキュラーバッファの上限ワードアドレス及び下限ワードアドレスをそれぞれＭＯＤ＿Ｕ６５０及びＭＯＤ＿Ｌ６５１で保持する設定で、ポストインクリメント処理で１ワードアクセスする場合にも、ポストインクリメント処理で２ワードアクセスする場合にも正しく動作する。
【０１９２】
ポストデクリメント処理を行う場合、１ワードアクセス，２ワードアクセスに関係なく、第１デコーダ６１７から出力されるポストインクリメント信号６１３は“０”になるため、セレクタ６１４はＭＯＤ＿Ｌ６５１の値を選択して比較器１５８の出力し、セレクタ６１５はＭＯＤ＿Ｕ６５０の値を選択してラッチ１５９に出力する。
【０１９３】
ポストデクリメント処理で１ワードアクセスを行う場合、第１デコーダ６１７から出力されるポストインクリメント信号６１３は“０”、ポスト更新信号６０７は“１”、２ワードアクセス信号６０８は“０”、ポストデクリメント２ワードアクセス信号６０９は“１”になる。
【０１９４】
この状態で、ベースアドレスレジスタの値がｈ’１０００の場合、一致信号６１１、６１２が共に“１”となって選択信号６１０が“１”となり、その結果、セレクタ１５５はラッチ１５９の出力値（ＭＯＤ＿Ｕ６５０の値）を選択して、ベースアドレスレジスタに、ｈ’１１ｆｅを書き戻される。
【０１９５】
それ以外の場合には、一致信号６１１、６１２のいずれかが“０”になり、選択信号６１０が“０”となるため、セレクタ１５５はＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“２”が減算された値をベースアドレスレジスタに書き戻す。例えば、ベースアドレスレジスタの値がｈ’１００２の場合、ベースアドレスレジスタにはｈ’１０００が書き戻される。
【０１９６】
ポストデクリメント処理で２ワードアクセスを行う場合、第１デコーダ６１７から出力されるポストインクリメント信号６１３は“０”、ポスト更新信号６０７は“１”、２ワードアクセス信号６０８は“１”、ポストデクリメント２ワードアクセス信号６０９は“０”になる。
【０１９７】
この状態で、ベースアドレスレジスタの値がｈ’１０００の場合、一致信号６１１、６１２が共に“１”となって選択信号６１０が“１”となり、その結果、セレクタ１５５はラッチ１５９の出力値（ＭＯＤ＿Ｕ６５０の値）を選択する。この際、ローアクティブのポストデクリメント２ワードアクセス信号６０９が“０”のため、ラッチ１５９の出力値のビット１４がＡＮＤゲート６０３によって強制的に“０”に設定される。したがって、セレクタ１５５はベースアドレスレジスタに、ｈ’１１ｆｃを書き戻す。
【０１９８】
それ以外の場合には、一致信号６１１が“０”になり選択信号６１０が“０”となるるため、セレクタ１５５はＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“４”が減算された値をベースアドレスレジスタに書き戻す。
【０１９９】
このように、実施の形態２のデータ処理装置は、ポストインクリメント処理と全く同じ値をＭＯＤ＿Ｕ６５０及びＭＯＤ＿Ｌ６５１に設定しても、ポストデクリメント処理で１ワードアクセスする場合にも、２ワードアクセスする場合にも正しく動作する。
【０２００】
実施の形態２では、２つの境界が共に４バイト整置されているサーキュラバッファについてのみ述べたが、何れか一方が４バイト整置されていないサーキュラバッファの場合も実施の形態１と同様に正しく動作する。
【０２０１】
上述のように、実施の形態２のデータ処理装置は、１ワードのみならず２ワードアクセスを行う場合にも、効率の良いサーキュラーバッファのアクセスが可能となり、プログラムのコードサイズの削減、処理サイクル数の低減に寄与する。
【０２０２】
さらに、実施の形態１と異なり、ポストインクリメント処理，ポストデクリメント処理に関係なく、サーキュラーバッファの領域の上限及び下限のワードアドレスをＭＯＤ＿Ｕ６５０及びＭＯＤ＿Ｌ６５１にそれぞれ設定すれば、ポストインクリメント処理の場合にもポストデクリメント処理の場合にも正しく動作するので、インクリメント処理とデクリメント処理で制御レジスタの設定を変更する必要がなくなるため、その分、プログラムのコードサイズの削減、処理サイクル数の低減が可能となる。
【０２０３】
また、実施の形態２のデータ処理装置は、ポストインクリメント処理及びポストデクリメント処理時において、アドレスの計算と並列にベースアドレスの初期値に基づく判定処理可能となるため、動作周波数の向上による高速化が容易である。
【０２０４】
実施の形態１と同様、実施の形態２のデータ処理装置は様々な場合に、本技術は適用できる。
【０２０５】
上述の実施の形態２では、アドレスのビット長が１６ビットの例を示したが、２４ビットや３２ビット等任意のビット長であってもよい。また、データの基本データ長を１６ビットにしているが、２４ビットにしたり、３２ビットにしてもよい。また、バイトアドレスを管理しているが、１６ビットや２４ビット、３２ビットを１ワードとして、ワードアドレスを管理してもよい。
【０２０６】
実施の形態２では、１ワードアクセスあるいは２ワードアクセスのポストデクリメント及びポストデクリメント処理でロード／ストア命令を実行可能なデータ処理装置について述べたが、さらに４ワード等より多くのデータを一度に転送するロード／ストア命令をインプリメントする場合にも、本発明の技術を応用して使用可能である。例えば、１ワードアクセス、２ワードアクセス及び４ワードアクセスを実行可能にする場合、３つのレベル（４ワードレベル、２ワードレベル、１ワードレベル）の一致信号を基に判定を行えばよい。
【０２０７】
上述の実施の形態２では、実施の形態１と同様、２ワードアクセスのポストインクリメント処理（デクリメント処理）時に一致信号６１１が“１”のときビット１４の値を参照することなくポインタ値の入れ替えを行っているが、２ワードアクセスのポストインクリメント（デクリメント）処理で、一致信号６１１が“１”でかつビット１４が“０”である（２ワードデータを構成する２つの１ワードデータのうち、前半の１ワードデータを特定するアドレスにポインタ値が一致する）とき、はじめてポインタ値の入れ替えを行うように構成してもよい。
【０２０８】
上述の実施の形態２では、ＭＯＤ＿Ｕ６５０、ＭＯＤ＿Ｌ６５１は、物理的に１５ビットしか保持しないようにしているが、１６ビット保持するようにし、ビット１５は無視するような構成にしてもよいし、ビット１５も比較に使用するように構成してもよい。比較に使用する場合には、ＭＯＤ＿Ｕ６５０，ＭＯＤ＿Ｌ６５１のビット１５に必ず“０”を設定するようにして、１６ビットすべてを比較するようにすればよい。
【０２０９】
また、ＭＯＤ＿Ｕ６５０、ＭＯＤ＿Ｌ６５１には、ワードアドレスを設定しているが、境界のバイトアドレスを設定するようにしてもよい。ビット１５を無視すれば、上述の実施の形態２の動作と同じになる。
【０２１０】
上述の実施の形態２では、ＭＯＤ＿Ｕ６５０、ＭＯＤ＿Ｌ６５１には、アドレスの最上位ビット（ＭＳＢ）までのすべてのアドレス値を保持するようになっているが、アドレスの上位数ビットは保持しないようにし、下位ビットのみで判定を行うようにすれば、複数の領域に形成された複数のサーキュラーバッファに対して、同じ設定で同時にモジュロ機構が動作するようにできる。ただし、比較しない上位ビットについては、更新前の値をそのまま出す等の処理が必要になる。
【０２１１】
上述の実施の形態２では、上位１４ビットとビット１４の２つの比較結果を出力するようにしているが、ワードアドレスがマッチしたことを示す情報と、２ワードアドレスがマッチした情報が含まれていれば、どのような形態で演算結果を出力してもよい。
【０２１２】
上述の実施の形態２では、一般的なプロセッサの構成を示しているが、ＤＳＰのように、アドレスレジスタとデータレジスタ（アキュムレータ等）を分けるような構成にしてもよい。また、ＤＳＰのように、複数のメモリを独立にアクセスできるような構成にしても、本発明の技術は有効である。
【０２１３】
上述の実施の形態２では、規定された場合以外の動作は保証していないが、上記規定された場合以外の時に例外を検出する等の処理を行ってもよい。例えば、奇数アドレスの場合にはアドレス例外を起こす等の処理を行ってもよい。
【０２１４】
＜実施の形態３．＞
実施の形態１のデータ処理装置はモジュロ・アドレッシングを利用するとき、ＭＯＤ＿Ｓ１５６にモジュロ・アドレッシング領域の最初のアドレスを、ＭＯＤ＿Ｅ１５７にモジュロ・アドレッシング領域の最後のアドレスを、各々ワードアドレスで指定する。実施の形態３では最初のアドレスと最後のアドレスを２ワードアドレスで指定するデータ処理装置について説明する。実施の形態３のデータ処理装置は、モジュロアドレッシングの制御を行う部分は実施の形態１と異なるが、その他の基本的な仕様および構成は実施の形態１と同じである。
【０２１５】
図３１は、サーキュラバッファの領域を２ワードアドレスでセットするＭＯＤ＿Ｅ８５０とＭＯＤ＿Ｓ８５１を示す。ＭＯＤ＿Ｅ８５０は実施の形態１のＭＯＤ＿Ｅ１５７に相当し、ＭＯＤ＿Ｓ８５１は実施の形態１のＭＯＤ＿Ｓ１５６に相当する。ＭＯＤ＿Ｅ８５０及びＭＯＤ＿Ｓ８５１は１４ビットのラッチである。したがって、実施の形態１のＭＯＤ＿Ｅ８５７及びＭＯＤ＿Ｓ１５６に比べ、保持する情報量を１ビット省略することができる。
【０２１６】
ＭＯＤ＿Ｅ８５０及びＭＯＤ＿Ｓ８５１は、インクリメント処理でモジュロアドレッシングを利用する場合には、ＭＯＤ＿Ｓ８５１に小さい方のアドレスが、ＭＯＤ＿Ｅ８５０には大きい方のアドレスがセットされ、デクリメント処理でモジュロアドレッシングを利用する場合には、ＭＯＤ＿Ｓ８５１には大きい方のアドレスが、ＭＯＤ＿Ｅ８５０には小さい方のアドレスがセットされる。この実施の形態３ではサーキュラーバッファの境界は必ず２ワード整置されていなければならない。
【０２１７】
図３２は、実施の形態３のデータ処理装置における特徴部であるモジュロアドレッシング機能を実現する部分の構成を模式的に示す回路図である。制御部８１６は実施の形態１の制御部１１２に相当し、モジュロ演算の制御に関する部分以外はほぼ同じである。モジュロ演算部７０３は実施の形態１のモジュロ演算部７００に相当する。各ラッチのイネーブル信号等は簡単のため省略している。また、論理図も分かりやすいように正論理で示している。
【０２１８】
図３２以外の部分は実施の形態１とほぼ同じである。比較器８５２は、Ｓ３バス３０３で転送されるベースアドレス値とＭＯＤ＿Ｅ８５０に保持されたモジュロ・エンド・アドレスの比較を行い、比較結果を制御部８１６に送る。比較器８５２はビット０からビット１３の１４ビットが一致した場合に一致信号８１１を“１”にし、不一致の場合には一致信号８１１を“０”にする。
【０２１９】
モジュロ・エンド・アドレスを保持するＭＯＤ＿Ｅ８５０は１４ビットのラッチであり、Ｄ１バス３１１からの入力ポートと、Ｓ３バス３０３、比較器８５２への出力ポートを持つ。ＭＯＤ＿Ｅ８５０の値がＳ３バス３０３に出力される場合には、ビット１４、ビット１５に“０”が出力される。モジュロ・スタート・アドレスを保持するＭＯＤ＿Ｓ８５１は、１４ビットのラッチであり、Ｄ１バス３１１からの入力ポートと、Ｓ３バス３０３、１４ビットのラッチ８５３への出力ポートを持つ。ＭＯＤ＿Ｓ８５１の値がＳ３バス３０３に出力される場合には、ビット１４、ビット１５に“０”が出力される。
【０２２０】
セレクタ１５５は、選択信号８１０に基づいてＡＬＵ１５３の出力とラッチ８５３に保持されたモジュロ・スタート・アドレス値を選択的にＤ１バス３１１に出力する。ラッチ８５３の値を選択する場合、ビット１４としてポストデクリメント１ワードアクセス信号８０９をそのまま出力し、ビット１５として“０”を出力する。ポストデクリメント１ワードアクセス信号８０９は第１デコーダ８１７で生成され、メモリアクセス命令で１ワードアクセスのポストデクリメント処理を行う場合に“１”、それ以外の場合に“０”になる信号である。
【０２２１】
制御部８１６内では、命令のデコード結果や比較器８５２の比較結果に基づいて、セレクタ１５５の選択信号８１０が生成される。ＰＳＷ部１７１からは、モジュロイネーブルを指定するＭＤビット４４の値が信号線８０６を介して出力される。第１デコーダ８１７は、上記命令デコードの結果として、ポストデクリメント１ワードアクセス信号８０９以外に、メモリアクセス命令でポストインクリメント及びポストデクリメント時に“１”となるポスト更新信号８０７、メモリアクセス命令で１ワードアクセスでポストインクリメント処理を実行する場合に“１”、それ以外の場合に“０”になるポストインクリメント１ワードアクセス信号８０８を出力する。
【０２２２】
ＡＮＤゲート８０１、ＯＲゲート８０２、ＡＮＤゲート８０３、ＡＮＤゲート８０４、インバータ８０５及びインバータ８１２において、これらの情報を基に選択信号８１０が生成される。すなわち、ポストインクリメント１ワードアクセス信号８０８がＡＮＤゲート８０４に入力されるとともに、インバータ８０５を介してＡＮＤゲート８０３に入力され、Ｓ３バス３０３上のビット１４の情報がＡＮＤゲート８０４に入力されるとともに、インバータ８１２を介してＡＮＤゲート８０３に入力される。そして、ＯＲゲート８０２は、ＡＮＤゲート８０３及び８０４の出力の論理和をＡＮＤゲート８０１に出力する。ＡＮＤゲート８０１は、ポスト更新信号８０７、信号線８０６上に信号、ＯＲゲート８０２の出力及び一致信号８１１の論理積を選択信号８１０としてセレクタ１５５に出力する。
【０２２３】
したがって、メモリアクセス命令で１ワードアクセスのポストインクリメント処理が行われる（ポストインクリメント１ワードアクセス信号８０８が“１”）場合、オペランドのアドレスのビット１４が“１”／“０”で信号線８１３の“１”／“０”が決定する。一方、メモリアクセス命令で１ワードアクセスのポストインクリメント処理以外の処理が行われる（ポストインクリメント１ワードアクセス信号８０８が“０”）場合、オペランドのアドレスのビット１４の“０”／“１”で信号線８１３の“１”／“０”が決定する。なお、アドレスのビット１４が“１”である場合とは、アドレスのビット０〜ビット１３で特定される２ワードデータを構成する２つの１ワードデータのうち、後半の１ワードデータを特定することを意味する。
【０２２４】
そして、モジュロ・アドレッシングがイネーブル状態（信号線８０６が“１”）、ポスト・インクリメント／デクリメント処理を行うロード／ストア命令処理時（ポスト更新信号８０７が“１”）において、Ｓ３バス３０３で転送されるオペランドのアドレスの上位１４ビットとＭＯＤ＿Ｅ８５０の値が一致（一致信号８１１が“１”）し、かつ、信号線８１３が“１”の場合に、選択信号８１０が“１”になる。上記条件を満たさない場合には、選択信号８１０は“０”になる。
【０２２５】
アドレスレジスタのポスト更新を行うロード／ストア命令実行時に、選択信号が“０”の場合には、ＡＬＵ１５３での加減算結果がポインタの更新値として、Ｄ１バス３１１を介してレジスタファイル１１５に書き戻される。選択信号が“１”の場合には、ラッチ８５３に保持されたモジュロ・スタート・アドレスの値がポインタの更新値として、Ｄ１バス３１１を介してレジスタファイル１１５に書き戻される。
【０２２６】
モジュロ・アドレッシングがディスエーブル状態の場合には、選択信号８１０は必ず“０”になり、セレクタ１５５では常にＡＬＵ１５３の出力が選択される。
【０２２７】
一例として次に、サーキュラバッファ領域をアクセスするロード／ストア命令の実行時におけるアドレスの更新について説明する。ＭＤビット４４は“１”とする。まず、ポストインクリメントでモジュロアドレッシングを使用する場合について説明する。
【０２２８】
本データ処理装置では、サーキュラバッファの境界アクセス時に４バイト境界の非整置アクセスを行った場合の動作は保証していない。２ワードアクセスを行う場合は、必ず４バイト境界に整置された状態でアクセスを行う。
【０２２９】
図３３は、インクリメントでアクセスする際のサーキュラバッファの例を示す説明図である。ｈ’は１６進表記であることを示す。ｈ’１０００番地からｈ’１１ｆｆ番地の２５６ワード（５１２バイト）がサーキュラバッファの領域になっており、ＭＯＤ＿Ｓ８５１にはバッファ領域の開始の２ワードアドレスであるｈ’１０００の上位１４ビットを、ＭＯＤ＿Ｅ８５０には最後の２ワードアドレスであるｈ’１１ｆｃの上位１４ビットをセットする。
【０２３０】
１ワードアクセスでポストインクリメント処理を行う場合、第１デコーダ８１７から出力されるポスト更新信号８０７は“１”、ポストインクリメント１ワードアクセス信号８０８は“１”、ポストデクリメント１ワードアクセス信号８０９は“０”になる。
【０２３１】
したがって、ベースアドレスレジスタの値がｈ’１１ｆｅの場合、一致信号８１１が“１”、ベースアドレスレジスタのビット１４が“１”となるため、選択信号８１０が“１”となり、セレクタ１５５はラッチ８５３に保持されたモジュロ・スタート・アドレスの値を選択し、Ｄ１バス３１１を介してレジスタファイル１１５のベースアドレスレジスタに出力する。このとき、ポストデクリメント１ワードアクセス信号８０９が０となるため、ベースアドレスレジスタには、ｈ’１０００が書き戻される。それ以外の場合には、信号線８１３が“０”となるため、セレクタ１５５は、ＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“２”が加算された値をベースアドレスレジスタに書き戻す。例えば、ベースアドレスレジスタの値がｈ’１１ｆｃの場合、ベースアドレスレジスタにはｈ’１１ｆｅが書き戻される。
【０２３２】
２ワードアクセスでポストインクリメント処理を行う場合、第１デコーダ８１７から出力されるポスト更新信号８０７は“１”、ポストインクリメント１ワードアクセス信号８０８は“０”、ポストデクリメント１ワードアクセス信号８０９は“０”になる。
【０２３３】
したがって、ベースアドレスレジスタの値がｈ’１１ｆｃの場合、一致信号８１１が“１”、ベースアドレスレジスタのビット１４が“０”となるため、選択信号８１０が“１”となり、セレクタ１５５はラッチ８５３に保持されたモジュロ・スタート・アドレスの値を選択する。このとき、ポストデクリメント１ワードアクセス信号８０９が“０”となるため、ベースアドレスレジスタには、ｈ’１０００が書き戻される。それ以外の場合には、一致信号８１１が“０”もしくはベースアドレスレジスタのビット１４が“１”となるため、セレクタ１５５は、ＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“４”が加算された値をベースアドレスレジスタに書き戻す。
【０２３４】
このように、１ワードアクセスのポストインクリメント処理と２ワードアクセスのポストインクリメント処理との間で共通のＭＯＤ＿Ｓ８５１及びＭＯＤ＿Ｅ８５０の設定で、実施の形態３のデータ処理装置は、ポストインクリメント処理で１ワードアクセスする場合にも、２ワードアクセスする場合にも正しく動作する。
【０２３５】
図３４は、ポストデクリメント処理でアクセスする際のサーキュラバッファの例を示す。ｈ’は１６進表記であることを示す。ｈ’１０００番地からｈ’１１ｆｆ番地の２５６ワード（５１２バイト）がサーキュラバッファの領域になっており、ＭＯＤ＿Ｓ８５１にはバッファ領域の開始の２ワードアドレスであるｈ’１１ｆｃの上位１４ビットを、ＭＯＤ＿Ｅ８５０には最後の２ワードアドレスであるｈ’１０００の上位１４ビットをセットする。
【０２３６】
１ワードアクセスのポストデクリメント処理を行う場合、第１デコーダ８１７から出力されるポスト更新信号８０７は“１”、ポストインクリメント１ワードアクセス信号８０８は“０”、ポストデクリメント１ワードアクセス信号８０９は“１”になる。
【０２３７】
したがって、ベースアドレスレジスタの値がｈ’１０００の場合、一致信号８１１が“１”、ベースアドレスレジスタのビット１４が“０”となるため、選択信号８１０が“１”となり、セレクタ１５５はラッチ８５３で保持されたモジュロ・スタート・アドレスの値を選択する。このとき、ポストデクリメント１ワードアクセス信号８０９が“１”となるため、ベースアドレスレジスタには、ｈ’１１ｆｅが書き戻される。それ以外の場合には、一致信号８１１が“０”もしくはベースアドレスレジスタのビット１４が“１”となるため、セレクタ１５５は、ＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“２”が減算された値をベースアドレスレジスタに書き戻す。例えば、ベースアドレスレジスタの値がｈ’１００２の場合、ベースアドレスレジスタにはｈ’１０００が書き戻される。
【０２３８】
２ワードアクセスのポストデクリメント処理を行う場合、第１デコーダ８１７から出力されるポスト更新信号８０７は“１”、ポストインクリメント１ワードアクセス信号８０８は“０”、ポストデクリメント１ワードアクセス信号８０９は“０”になる。ベースアドレスレジスタの値がｈ’１０００の場合、一致信号８１１が“１”、ベースアドレスレジスタのビット１４が“０”となるため、選択信号８１０が“１”となり、セレクタ１５５はラッチ８５３に保持されたモジュロ・スタート・アドレスの値を選択する。このとき、ポストデクリメント１ワードアクセス信号８０９が“０”となるため、ベースアドレスレジスタには、ｈ’１１ｆｃが書き戻される。それ以外の場合には、一致信号８１１が“０”もしくはベースアドレスレジスタのビット１４が“１”となるため、セレクタ１５５は、ＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“４”が減算された値をベースアドレスレジスタに書き戻す。
【０２３９】
このように、１ワードアクセスのポストデクリメント処理と２ワードアクセスのポストデクリメント処理との間で共通のＭＯＤ＿Ｓ８５１及びＭＯＤ＿Ｅ８５０の設定で、実施の形態３のデータ処理装置は、ポストデクリメント処理で１ワードアクセスする場合にも、２ワードアクセスする場合にも正しく動作する。
【０２４０】
上述のように、必ず２ワード単位でサーキュラバッファを構成するという制限は加わるが、実施の形態３のデータ処理装置は、実施の形態１と同様、ポストインクリメント処理あるいはポストデクリメント処理によって１ワードのみならず２ワードアクセスを行う場合にも、効率の良いサーキュラーバッファのアクセスが可能となり、プログラムのコードサイズの削減、処理サイクル数の低減に寄与する。
【０２４１】
また、実施の形態３のデータ処理装置は、ポストインクリメント処理及びポストデクリメント処理時において、アドレスの計算と並列にベースアドレスの初期値に基づく判定処理可能となるため、動作周波数の向上による高速化が容易である。
【０２４２】
実施の形態１と同様、上述の実施の形態３で説明した様々な場合にも、本発明は適用できる。
【０２４３】
上述の実施の形態３では、アドレスのビット長が１６ビットの例を示したが、２４ビットや３２ビット等任意のビット長であってもよい。また、データの基本データ長を１６ビットにしているが、２４ビットにしたり、３２ビットにしてもよい。また、バイトアドレスを管理しているが、１６ビットや２４ビット、３２ビットを１ワードとして、ワードアドレスを管理してもよい。
【０２４４】
上述の実施の形態３では、１ワードアクセスと２ワードアクセスの場合について述べたが、４ワード等より多くのデータを一度に転送するロード／ストア命令をインプリメントする場合にも同じ技術が使用可能である。４ワード転送の場合、ＭＯＤ＿Ｅ８５０、ＭＯＤ＿Ｓ８５１に４ワードアドレスを設定し、ビット１３、１４を別途判定するようにすればよい。
【０２４５】
上述の実施の形態３では、アドレスの上位１５ビットのみで判定を行っているが、ビット１５が“０”であることを判定条件に追加してもよい。
【０２４６】
上述の実施の形態３では、ＭＯＤ＿Ｅ８５０、ＭＯＤ＿Ｓ８５１は、物理的に１４ビットしか保持しないようにしているが、１６ビット保持するようにし、ビット１４及びビット１５は無視するような構成にしてもよいし、比較に使用するように構成してもよい。比較に使用する場合には、ＭＯＤ＿Ｓ８５１のビット１４及びビット１５に必ず“０”を設定するようにして、１６ビットすべてを比較するようにすればよい。
【０２４７】
また、ＭＯＤ＿Ｅ８５０、ＭＯＤ＿Ｓ８５１には、ワードアドレスを設定しているが、境界のバイトアドレスを設定するようにしてもよい。ビット１５を無視すれば、上述の実施の形態３の動作と同じになる。
【０２４８】
上述の実施の形態３では、ＭＯＤ＿Ｅ８５０、ＭＯＤ＿Ｓ８５１には、アドレスの最上位ビット（ＭＳＢ）までのすべてのアドレス値を保持するようになっているが、アドレスの上位数ビットは保持しないようにし、下位ビットのみで判定を行うようにすれば、複数の領域に形成された複数のサーキュラーバッファに対して、同じ設定で同時にモジュロ機構が動作するようにできる。ただし、比較しない上位ビットについては、更新前の値をそのまま出す等の処理が必要になる。
【０２４９】
上述の実施の形態３では、インクリメント時にもデクリメント時にも動作可能な実施例が示されているが、インクリメント時のみあるいはデクリメント時にのみ動作するようにしてもよい。
【０２５０】
上述の実施の形態３では、一般的なプロセッサの構成を示しているが、ＤＳＰのように、アドレスレジスタとデータレジスタ（アキュムレータ等）を分けるような構成にしてもよい。また、ＤＳＰのように、複数のメモリを独立にアクセスできるような構成にしても、本技術は有効である。
【０２５１】
上述の実施の形態３では、規定された場合以外の動作は保証していないが、上記規定された場合以外の時に例外を検出する等の処理を行ってもよい。例えば、奇数アドレスの場合にはアドレス例外を起こす等の処理を行ってもよい。
【０２５２】
＜実施の形態４．＞
実施の形態２のデータ処理装置はモジュロ・アドレッシングを利用するとき、ＭＯＤ＿Ｕ６５０にモジュロ・アドレッシング領域の上限のアドレスを、ＭＯＤ＿Ｌ６５１にモジュロ・アドレッシング領域の下限のアドレスを、各々ワードアドレスで指定する。実施の形態４では上限のアドレスと下限のアドレスを２ワードアドレスで指定するデータ処理装置について説明する。モジュロアドレッシングの制御を行う部分は実施の形態２と異なるが、その他の基本的な仕様および構成は実施の形態２と同じである。
【０２５３】
図３５は、サーキュラバッファのアドレスを２ワードアドレスでセットするＭＯＤ＿Ｕ９５０とＭＯＤ＿Ｌ９５１を示す。ＭＯＤ＿Ｕ９５０は実施の形態２のＭＯＤ＿Ｕ６５０に相当し、ＭＯＤ＿Ｌ９５１は実施の形態２のＭＯＤ＿Ｌ６５１に相当する。ＭＯＤ＿Ｕ９５０は１４ビットのラッチで、モジュロ演算の対象となる領域の上限のアドレスが２ワードアドレスでセットされる。ＭＯＤ＿Ｌ９５１は１４ビットのラッチで、モジュロ演算の対象となる領域の下限のアドレスが２ワードアドレスでセットされる。但し、下限のアドレスは上限のアドレスより小さいアドレスである。したがって、実施の形態４のＭＯＤ＿Ｕ９５０及びＭＯＤ＿Ｌ９５１は、実施の形態２のＭＯＤ＿Ｕ６５０及びＭＯＤ＿Ｌ６５１に比べ、保持する情報量を１ビット省略することができる。
【０２５４】
ＭＯＤ＿Ｕ９５０、ＭＯＤ＿Ｌ９６５１に保持されないビット１４、ビット１５は“０”固定であり、書き込み時は無視され、読み出し時は常に“０”となる。この実施の形態ではサーキュラーバッファの境界は必ず２ワード整置されていなければならない。
【０２５５】
図３６は、実施の形態４のデータ処理装置の特徴部であるモジュロアドレッシング機能を実現する部分の構成模式的に示す回路図である。制御部９１６は実施の形態１の制御部１１２に相当し、モジュロ演算の制御に関する部分以外はほぼ同じである。モジュロ演算部７０４は実施の形態１のモジュロ演算部７００に相当する。各ラッチのイネーブル信号等は簡単のため省略している。また、論理図も分かりやすいように正論理で示している。図３６以外の部分は実施の形態１とほぼ同じである。
【０２５６】
セレクタ９５２は、第１デコーダ９１７で生成されるポストインクリメント信号９１３で制御される。ポストインクリメント信号９１３はメモリアクセス命令でポスト・インクリメント時に“１”、ポストデクリメント時に“０”となる。セレクタ９５２は、ポストインクリメント信号９１３が“１”でポストインクリメントを指示する場合にＭＯＤ＿Ｕ９５０の値を選択して比較器９５４に出力し、ポストインクリメント信号９１３が“０”でポストデクリメントを指示する場合にＭＯＤ＿Ｌ９５１の値を選択して比較器９５４に出力される。
【０２５７】
比較器９５４は、Ｓ３バス３０３で転送されるベースアドレス値とセレクタ９５２から出力されたアドレスとの比較を行い、比較結果である一致信号９１１を制御部９１６に送る。この際、ビット０からビット１３の上位１４ビットが一致した場合に一致信号９１１が“１”になり、不一致の場合には一致信号９１１が“０”になる。
【０２５８】
サーキュラバッファの上限アドレスを保持するＭＯＤ＿Ｕ９５０は１４ビットのラッチであり、Ｄ１バス３１１からの入力ポートと、Ｓ３バス３０３、セレクタ９５２、セレクタ９５３への出力ポートを持つ。ＭＯＤ＿Ｕ９５０の値がＳ３バス３０３に出力される場合には、ビット１４、ビット１５に“０”が出力される。
【０２５９】
サーキュラバッファの下限アドレスを保持するＭＯＤ＿Ｌ９５１は、１４ビットのラッチであり、Ｄ１バス３１１からの入力ポートと、Ｓ３バス３０３、セレクタ９５２、セレクタ９５３への出力ポートを持つ。ＭＯＤ＿Ｌ９５１の値がＳ３バス３０３に出力される場合には、ビット１４、ビット１５に“０”が出力される。
【０２６０】
セレクタ９５３は、第１デコーダ９１７で生成されるポストインクリメント信号９１３で制御される。すなわち、セレクタ９５３はポストインクリメント信号９１３が“１”でポストインクリメント処理を指示する場合にはＭＯＤ＿Ｌ９５１の値を選択してラッチ９５５に出力し、ポストインクリメント信号９１３が“０”でポストデクリメント処理を指示する場合にはＭＯＤ＿Ｕ９５０の値を選択してラッチ９５５に出力する。
【０２６１】
セレクタ１５５は、選択信号９１０に基づいてＡＬＵ１５３の出力とラッチ９５５に保持されたアドレス値を選択的にＤ１バス３１１に出力する。このとき、ラッチ９５５の値を選択する場合、ビット１４としてポストデクリメント１ワードアクセス信号９０９をそのまま出力し、ビット１５として“０”を出力する。ポストデクリメント１ワードアクセス信号９０９は第１デコーダ９１７で生成され、メモリアクセス命令（ロード／ストア命令）が１ワードアクセスのポストデクリメント処理を行う場合に“１”、それ以外の場合に“０”になる。
【０２６２】
制御部９１６内では、命令のデコード結果や比較器９５４の比較結果に基づいて、セレクタ１５５に出力する選択信号９１０が生成される。ＰＳＷ部１７１からは、モジュロイネーブルを指定するＭＤビット４４の値が信号線９０６で出力される。第１デコーダ９１７からは命令デコードの結果として、メモリアクセス命令でポスト・インクリメント／デクリメント時に“１”となるポスト更新信号９０７、メモリアクセス命令で１ワードアクセスでポスト・インクリメントの際に“１”、それ以外の場合に“０”になるポストインクリメント１ワードアクセス信号９０８が出力される。
【０２６３】
ＡＮＤゲート９０１、ＯＲゲート９０２、ＡＮＤゲート９０３、ＡＮＤゲート９０４、インバータ９０５及びインバータ９１２において、これらの情報を基に選択信号９１０が生成される。すなわち、ポストインクリメント１ワードアクセス信号９０８がＡＮＤゲート９０４に入力されるとともに、インバータ９０５を介してＡＮＤゲート９０３に入力され、Ｓ３バス３０３上のビット１４の情報がＡＮＤゲート９０４に入力されるとともに、インバータ８１２を介してＡＮＤゲート９０３に入力される。そして、ＯＲゲート９０２は、ＡＮＤゲート９０３及び９０４の出力の論理和をＡＮＤゲート９０１に出力する。ＡＮＤゲート９０１は、ポスト更新信号９０７、信号線９０６上に信号、ＯＲゲート９０２の出力及び一致信号９１１の論理積を選択信号９１０としてセレクタ１５５に出力する。
【０２６４】
したがって、メモリアクセス命令で１ワードアクセスのポストインクリメント処理が行われる（ポストインクリメント１ワードアクセス信号９０８が“１”）場合、オペランドのアドレスのビット１４が“１”／“０”で信号線９１４の“１”／“０”が決定する。一方、メモリアクセス命令で１ワードアクセスのポストインクリメント処理以外の処理が行われる（ポストインクリメント１ワードアクセス信号９０８が“０”）場合、オペランドのアドレスのビット１４の“０”／“１”で信号線９１４の“１”／“０”が決定する。
【０２６５】
そして、モジュロ・アドレッシングがイネーブル状態（信号線９０６が“１”）、ポスト・インクリメント／デクリメント処理を行うロード／ストア命令処理時（ポスト更新信号９０７が“１”）において、Ｓ３バス３０３で転送されるオペランドのアドレスの上位１４ビットとセレクタ９５２の出力値とが一致（一致信号９１１が“１”）し、かつ、信号線９１４が“１”の場合に、選択信号９１０が“１”になる。上記条件を満たさない場合には、選択信号９１０は“０”になる。
【０２６６】
アドレスレジスタのポスト更新を行うロード／ストア命令実行時に、選択信号９１０が“０”の場合には、ＡＬＵ１５３での加減算結果がポインタの更新値として、Ｄ１バス３１１を介してレジスタファイル１１５に書き戻される。選択信号９１０が“１”の場合には、ラッチ９５５に保持されたアドレスの値がポインタの更新値として、Ｄ１バス３１１を介してレジスタファイル１１５に書き戻される。
【０２６７】
また、モジュロ・アドレッシングがディスエーブル状態の場合には、選択信号９１０は必ず“０”になり、セレクタ１５５では常にＡＬＵ１５３の出力が選択される。
【０２６８】
一例として次に、サーキュラバッファ領域をアクセスするロード／ストア命令の実行時におけるアドレスの更新について説明する。ＭＤビット４４は“１”とする。
【０２６９】
本データ処理装置では、サーキュラバッファの境界アクセス時に４バイト境界の非整置アクセスを行った場合の動作は保証していない。２ワードアクセスを行う場合は、必ず４バイト境界に整置された状態でアクセスを行う。
【０２７０】
図３７は、サーキュラバッファの例を示す説明図である。ｈ’は１６進表記であることを示す。ｈ’１０００番地からｈ’１１ｆｆ番地の２５６ワード（５１２バイト）がサーキュラバッファの領域になっており、ＭＯＤ＿Ｌ９５１にはバッファ領域の下限２ワードアドレスであるｈ’１０００の上位１４ビットを、ＭＯＤ＿Ｕ９５０には上限の２ワードアドレスであるｈ’１１ｆｃの上位１４ビットをセットする。
【０２７１】
ポストインクリメント処理を行う場合、１ワードアクセス，２ワードアクセスに関係なく、第１デコーダ９１７から出力されるポストインクリメント信号９１３は“１”になるため、セレクタ９５２はＭＯＤ＿Ｕ９５０の値を選択して比較器９５４に出力し、セレクタ９５３はＭＯＤ＿Ｌ９５１の値を選択してラッチ９５５に出力する。
【０２７２】
１ワードアクセスのポストインクリメント処理を行う場合、第１デコーダ９１７から出力されるポストインクリメント信号９１３は“１”、ポスト更新信号９０７は“１”、ポストインクリメント１ワードアクセス信号９０８は“１”、ポストデクリメント１ワードアクセス信号９０９は“０”になる。
【０２７３】
この状態で、ベースアドレスレジスタの値がｈ’１１ｆｅの場合、一致信号９１１が“１”、ベースアドレスレジスタのビット１４が“１”となるため、選択信号９１０が“１”となる。その結果、セレクタ１５５はラッチ９５５の値（ＭＯＤ＿Ｌ９５１の値）を選択してベースアドレスレジスタに、ｈ’１０００を書き戻す。それ以外の場合には、アドレス変更信号９１４が“０”となるため、セレクタ１５５は、ＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“２”が加算された値をベースアドレスレジスタに書き戻す。例えば、ベースアドレスレジスタの値がｈ’１１ｆｃの場合、ベースアドレスレジスタにはｈ’１１ｆｅが書き戻される。
【０２７４】
２ワードアクセスのポストインクリメント処理を行う場合、第１デコーダ９１７から出力されるポストインクリメント信号９１３は“１”、ポスト更新信号９０７は“１”、ポストインクリメント１ワードアクセス信号９０８は“０”、ポストデクリメント１ワードアクセス信号９０９は“０”になる。
【０２７５】
この状態で、ベースアドレスレジスタの値がｈ’１１ｆｃの場合、一致信号９１１が“１”、ベースアドレスレジスタのビット１４が“０”となるため、選択信号９１０が“１”となる。その結果、セレクタ１５５はラッチ９５５の値（ＭＯＤ＿Ｌ９５１の値）を選択してベースアドレスレジスタにｈ’１０００を書き戻す。それ以外の場合には、アドレス変更信号９１４が“０”となるため、セレクタ１５５は、ＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“４”が加算された値をベースアドレスレジスタに書き戻す。
【０２７６】
このように、実施の形態４のデータ処理装置は、サーキュラーバッファの上限ワードアドレス及び下限ワードアドレスをそれぞれＭＯＤ＿Ｕ６５０及びＭＯＤ＿Ｌ６５１で保持する設定で、ポストインクリメント処理で１ワードアクセスする場合にも、ポストインクリメント処理で２ワードアクセスする場合にも正しく動作する。
【０２７７】
ポストデクリメント処理を行う場合、１ワードアクセス，２ワードアクセスに関係なく、第１デコーダ９１７から出力されるポストインクリメント信号９１３は“０”になるため、セレクタ９５２はＭＯＤ＿Ｌ９５１の値を選択して比較器９５４に出力し、セレクタ９５３はＭＯＤ＿Ｕ９５０の値を選択してラッチ９５５に出力する。
【０２７８】
ポストデクリメント１ワードアクセスを行う場合、第１デコーダ９１７から出力されるポストインクリメント信号９１３は“０”、ポスト更新信号９０７は“１”、ポストインクリメント１ワードアクセス信号９０８は“０”、ポストデクリメント１ワードアクセス信号９０９は“１”になる。
【０２７９】
この状態で、ベースアドレスレジスタの値がｈ’１０００の場合、一致信号９１１が“１”、ベースアドレスレジスタのビット１４が“０”となるため、選択信号９１０が“１”となる。その結果、セレクタ１５５はラッチ９５５の値（ＭＯＤ＿Ｕ９５０の値）を選択する。このとき、ポストデクリメント１ワードアクセス信号９０９が“１”のため、セレクタ１５５はビット１４の出力として“１”を出力する。したがって、セレクタ１５５はベースアドレスレジスタにｈ’１１ｆｅを書き戻す。それ以外の場合には、アドレス変更信号９１４が“０”となるため、セレクタ１５５は、ＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“２”が減算された値をベースアドレスレジスタに書き戻す。例えば、ベースアドレスレジスタの値がｈ’１００２の場合、ベースアドレスレジスタにはｈ’１０００が書き戻される。
【０２８０】
２ワードアクセスのポストデクリメント処理を行う場合、第１デコーダ９１７から出力されるポストインクリメント信号９１３は“０”、ポスト更新信号９０７は“１”、ポストインクリメント１ワードアクセス信号９０８は“０”、ポストデクリメント１ワードアクセス信号９０９は“０”になる。
【０２８１】
この状態で、ベースアドレスレジスタの値がｈ’１０００の場合、一致信号９１１が“１”、ベースアドレスレジスタのビット１４が“０”となるため、選択信号９１０が“１”となる。その結果、セレクタ１５５はラッチ９５５の値（ＭＯＤ＿Ｕ９５０の値）を選択してベースアドレスレジスタに、ｈ’１１ｆｃを書き戻す。それ以外の場合には、アドレス変更信号９１４が“０”となるため、セレクタ１５５は、ＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“４”が減算された値をベースアドレスレジスタに書き戻す。
【０２８２】
このように、実施の形態４のデータ処理装置は、ポストインクリメント処理と全く同じ値をＭＯＤ＿Ｕ６５０及びＭＯＤ＿Ｌ６５１に設定しても、ポストデクリメント処理で１ワードアクセスする場合にも、２ワードアクセスする場合にも正しく動作する。
【０２８３】
上述のように、必ず２ワード単位でサーキュラバッファを構成するという制限は加わるが、実施の形態４のデータ処理装置は、実施の形態２と同様に１ワードのみならず２ワードアクセスを行う場合にも、効率の良いサーキュラーバッファのアクセスが可能となり、プログラムのコードサイズの削減、処理サイクル数の低減に寄与する。いずれの場合も、ポストインクリメント／ポストデクリメントを意識せずにサーキュラーバッファの上限アドレスと下限アドレスを２ワードアドレスで設定すればよいので、設定が統一されており、分かりやすい。
【０２８４】
また、実施の形態４のデータ処理装置は、ポストインクリメント処理及びポストデクリメント処理時において、アドレスの計算と並列にベースアドレスの初期値に基づく判定処理可能となるため、動作周波数の向上による高速化が容易である。
【０２８５】
実施の形態１と同様、上述の実施の形態４で説明した様々な場合にも、本発明を適用できる。
【０２８６】
上述の実施の形態４では、アドレスのビット長が１６ビットの例を示したが、２４ビットや３２ビット等任意のビット長であってもよい。また、データの基本データ長を１６ビットにしているが、２４ビットにしたり、３２ビットにしてもよい。また、バイトアドレスを管理しているが、１６ビットや２４ビット、３２ビットを１ワードとして、ワードアドレスを管理してもよい。
【０２８７】
上述の実施の形態４では、１ワードアクセスと２ワードアクセスの場合について述べたが、４ワード等より多くのデータを一度に転送するロード／ストア命令をインプリメントする場合にも同じ技術が使用可能である。４ワード転送の場合、ＭＯＤ＿Ｕ９５０、ＭＯＤ＿Ｌ９５１に４ワードアドレスを設定し、ビット１３、１４を別途判定するようにすればよい。
【０２８８】
上述の実施の形態４では、アドレスの上位１５ビットのみで判定を行っているが、ビット１５が“０”であることを判定条件に追加してもよい。
【０２８９】
上述の実施の形態４では、ＭＯＤ＿Ｅ９５０、ＭＯＤ＿Ｓ９５１は、物理的に１４ビットしか保持しないようにしているが、１６ビット保持するようにし、ビット１４及びビット１５は無視するような構成にしてもよいし、比較に使用するように構成してもよい。比較に使用する場合には、ＭＯＤ＿Ｓ９５１のビット１４及びビット１５に必ず“０”を設定するようにして、１６ビットすべてを比較するようにすればよい。
【０２９０】
また、ＭＯＤ＿Ｕ９５０、ＭＯＤ＿Ｌ９５１には、ワードアドレスを設定しているが、境界のバイトアドレスを設定するようにしてもよい。ビット１５を無視すれば、上述の実施の形態４の動作と同じになる。
【０２９１】
上述の実施の形態４では、ＭＯＤ＿Ｕ９５０、ＭＯＤ＿Ｌ９５１には、アドレスの最上位ビット（ＭＳＢ）までのすべてのアドレス値を保持するようになっているが、アドレスの上位数ビットは保持しないようにし、下位ビットのみで判定を行うようにすれば、複数の領域に形成された複数のサーキュラーバッファに対して、同じ設定で同時にモジュロ機構が動作するようにできる。ただし、比較しない上位ビットについては、更新前の値をそのまま出す等の処理が必要になる。
【０２９２】
上述の実施の形態４では、一般的なプロセッサの構成を示しているが、ＤＳＰのように、アドレスレジスタとデータレジスタ（アキュムレータ等）を分けるような構成にしてもよい。また、ＤＳＰのように、複数のメモリを独立にアクセスできるような構成にしても、本技術は有効である。
【０２９３】
上述の実施の形態４では、規定された場合以外の動作は保証していないが、上記規定された場合以外の時に例外を検出する等の処理を行ってもよい。例えば、奇数アドレスの場合にはアドレス例外を起こす等の処理を行ってもよい。
【０２９４】
＜実施の形態５．＞
実施の形態２のデータ処理装置ではモジュロ・アドレッシングを利用するとき、ＭＯＤ＿Ｕ６５０にモジュロ・アドレッシング領域の上限のアドレス、ＭＯＤ＿Ｌ６５１にモジュロ・アドレッシング領域の下限のアドレスをワードアドレスで指定する。実施の形態５のデータ処理装置では上限のアドレスと下限のアドレスを１ワードアドレスで指定する点は実施の形態２と同じであるが、実施の形態２と異なり１ワードアクセスのポストインクリメント処理と１ワードアクセスのポストデクリメントのみを処理対象としている。モジュロアドレッシングの制御を行う部分は実施の形態２と異なるが、その他の基本的な仕様および構成は実施の形態２と同じである。
【０２９５】
図３８は、サーキュラバッファの上限及び下限アドレスを１ワードアドレスでセットするＭＯＤ＿Ｕ１０５０とＭＯＤ＿Ｌ１０５１を示す。ＭＯＤ＿Ｕ１０５０は実施の形態２のＭＯＤ＿Ｕ６５０に相当し、ＭＯＤ＿Ｌ１０５１は実施の形態２のＭＯＤ＿Ｌ６５１に相当する。ＭＯＤ＿Ｕ１０５０は１６ビットのラッチで、モジュロ演算の対象となる領域の上限のアドレスの１ワードアドレスがセットされる。ＭＯＤ＿Ｌ１０５１は１６ビットのラッチで、モジュロ演算の対象となる領域の下限のアドレスの１ワードアドレスがセットされる。但し、下限のアドレスは上限のアドレスより小さいアドレスである。モジュロアドレッシングを機能させる場合、ＭＯＤ＿Ｕ１０５０とＭＯＤ＿Ｌ１０５１のビット１５には、必ず“０”がセットされなければならない。
【０２９６】
図３９は、実施の形態５のデータ処理装置の特徴部であるモジュロアドレッシング機能を実現する部分の構成を示す模式的に示した回路図である。制御部１０１６は実施の形態１の制御部１１２に相当し、モジュロ演算の制御に関する部分以外はほぼ同じである。モジュロ演算部７０５は実施の形態１のモジュロ演算部７００に相当する。各ラッチのイネーブル信号等は簡単のため省略している。また、論理図も分かりやすいように正論理で示している。図３９以外の部分は実施の形態１とほぼ同じである。
【０２９７】
セレクタ１０５２は、第１デコーダ１０１７で生成されるポストインクリメント信号１０１３で制御される。ポストインクリメント信号１０１３はメモリアクセス命令でポスト・インクリメント時に１、ポスト・デクリメント時に“０”となる。したがって、セレクタ１０５２は、ポストインクリメント信号１０１３が“１”でポストインクリメント処理を指示する場合にはＭＯＤ＿Ｕ１０５０の値を選択して比較器１０５４に出力し、ポストインクリメント信号１０１３が“０”でポストデクリメント処理を指示するの場合にはＭＯＤ＿Ｌ１０５１の値を選択して比較器１０５４に出力する。
【０２９８】
比較器１０５４は、Ｓ３バス３０３で転送されるベースアドレス値とセレクタ１０５２から出力されたアドレスとの比較を行い、比較結果を一致信号１０１１として制御部１０１６に送る。この際、ビット０からビット１５が一致した場合に一致信号１０１１が“１”になり、不一致の場合には一致信号１０１１が“０”になる。
【０２９９】
サーキュラバッファの上限アドレスを保持するＭＯＤ＿Ｕ１０５０は１６ビットのラッチであり、Ｄ１バス３１１からの入力ポートと、Ｓ３バス３０３、セレクタ１０５２、セレクタ１０５３への出力ポートを持つ。サーキュラバッファの下限アドレスを保持するＭＯＤ＿Ｌ１０５１は、１６ビットのラッチであり、Ｄ１バス３１１からの入力ポートと、Ｓ３バス３０３、セレクタ１０５２、セレクタ１０５３への出力ポートを持つ。
【０３００】
セレクタ１０５３は、第１デコーダ１０１７で生成されるポストインクリメント信号１０１３で制御される。すなわち、セレクタ１０５３は、ポストインクリメント信号１０１３が“１”でポストインクリメントを指示する場合にはＭＯＤ＿Ｌ１０５１の値が選択してラッチ１０５５に出力し、ポストインクリメント信号１０１３が“０”でポストデクリメントを指示する場合にはＭＯＤ＿Ｕ１０５０の値を選択してラッチ１０５５に出力する。
【０３０１】
セレクタ１０６０は、選択信号１０１０に基づいてＡＬＵ１５３の出力あるいはラッチ１０５５に保持されたアドレス値を選択的にＤ１バス３１１に出力する。制御部１０１６内では、命令のデコード結果や比較器１０５４の比較結果に基づいて、セレクタ１０６０の選択信号１０１０が生成される。ＰＳＷ部１７１からは、モジュロイネーブルを指定するＭＤビット４４の値が信号線１００６で出力される。第１デコーダ１０１７からは命令デコードの結果として、メモリアクセス命令でポスト・インクリメント／デクリメント時に“１”となるポスト更新信号１００７が出力される。
【０３０２】
ＡＮＤゲート１００１において、これらの情報を基に選択信号１０１０が生成される。すなわち、ＡＮＤゲート１００１は、ポスト更新信号１００７、信号線１００６上の信号及び一致信号１０１１の論理積を演算して選択信号１０１０を出力する。
【０３０３】
モジュロ・アドレッシングがイネーブル状態（信号線１００６が“１”）、かつ、ポスト・インクリメント／デクリメントを行うロード／ストア命令処理時（ポスト更新信号１００７が“１”）で、Ｓ３バス３０３で転送されるオペランドのアドレスとセレクタ１０５２で選択されたアドレスが一致し（一致信号１０１１が“１”）した場合に、選択信号１０１０が“１”になる。条件を満たさない場合には、選択信号１０１０は“０”になる。
【０３０４】
アドレスレジスタのポスト更新を行うロード／ストア命令実行時に、選択信号が“０”の場合には、ＡＬＵ１５３での加減算結果がポインタの更新値として、Ｄ１バス３１１を介してレジスタファイル１１５に書き戻される。選択信号が“１”の場合には、ラッチ９５５に保持されたアドレスの値がポインタの更新値として、Ｄ１バス３１１を介してレジスタファイル１１５に書き戻される。モジュロ・アドレッシングがディスエーブル状態の場合には、選択信号１０１０は必ず“０”になり、セレクタ１０６０では常にＡＬＵ１５３の出力が選択される。
【０３０５】
一例として次に、サーキュラバッファ領域をアクセスするロード／ストア命令の実行時におけるアドレスの更新について説明する。ＭＤビット４４は“１”とする。
【０３０６】
実施の形態５のデータ処理装置は、必ず１ワードアクセスでサーキュラーバッファをアクセスする。
【０３０７】
図４０は、サーキュラバッファの例を示す説明図である。実施の形態５のデータ処理装置では、サーキュラーバッファ領域はワード整置されておればよく、２ワード整置条件とは関係なく同じ動作をする。ｈ’は１６進表記であることを示す。ｈ’１０００番地からｈ’１１ｆｆ番地の２５６ワード（５１２バイト）がサーキュラバッファの領域になっており、ＭＯＤ＿Ｌ１０５１にはバッファ領域の下限の１ワードアドレスであるｈ’１０００を、ＭＯＤ＿Ｕ１０５０には上限の１ワードアドレスであるｈ’１１ｆｅをセットする。
【０３０８】
ポストインクリメント処理を行う場合、第１デコーダ１０１７から出力されるポストインクリメント信号１０１３は“１”になるため、セレクタ１０５２はＭＯＤ＿Ｕ１０５０の値を選択して比較器１０５４に出力し、セレクタ１０５３はＭＯＤ＿Ｌ１０５１の値を選択してラッチ１０５５に出力する。
【０３０９】
１ワードアクセスのポストインクリメント処理を行う場合、第１デコーダ１０１７から出力されるポストインクリメント信号１０１３は“１”、ポスト更新信号１００７は“１”になる。
【０３１０】
この状態で、ベースアドレスレジスタの値がｈ’１１ｆｅの場合、一致信号１０１１が“１”となるため、選択信号１０１０が“１”となる。その結果、セレクタ１０６０はラッチ１０５５の値（ＭＯＤ＿Ｌ１０５１の値）を選択してベースアドレスレジスタに、ｈ’１０００を書き戻す。それ以外の場合には、一致信号１０１１が“０”となるため、セレクタ１０６０はＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“２”が加算された値をベースアドレスレジスタに書き戻す。例えば、ベースアドレスレジスタの値がｈ’１１ｆｃの場合、ベースアドレスレジスタにはｈ’１１ｆｅが書き戻される。
【０３１１】
ポストインクリメント処理を行う場合、第１デコーダ１０１７から出力されるポストインクリメント信号１０１３は“０”になるため、セレクタ１０５２はＭＯＤ＿Ｌ１０５１の値を選択して比較器１０５４に出力し、セレクタ１０５３はＭＯＤ＿Ｕ１０５０の値を選択してラッチ１０５５に出力する。
【０３１２】
ポストデクリメント１ワードアクセスを行う場合、第１デコーダ１０１７から出力されるポストインクリメント信号１０１３は“０”、ポスト更新信号１００７は“１”になる。
【０３１３】
この状態で、ベースアドレスレジスタの値がｈ’１０００の場合、一致信号１０１１が“１”となるため、選択信号１０１０が“１”となる。その結果、セレクタ１０６０はラッチ１０５５の値（ＭＯＤ＿Ｕ１０５０の値）を選択してベースアドレスレジスタにｈ’１１ｆｅを書き戻す。それ以外の場合には、一致信号１０１１が“０”となるため、セレクタ１０６０は、ＡＬＵ１５３の出力、すなわち、ベースアドレスレジスタの初期値に“２”が減算された値をベースアドレスレジスタに書き戻す。例えば、ベースアドレスレジスタの値がｈ’１００２の場合、ベースアドレスレジスタにはｈ’１０００が書き戻される。
【０３１４】
このように、同じＭＯＤ＿Ｕ１０５０及びＭＯＤ＿Ｌ１０５１の設定で、実施の形態５のデータ処理装置は、ポストインクリメント１ワードアクセスする場合にも、ポストデクリメント１ワードアクセスする場合にも正しく動作する。
【０３１５】
このように、実施の形態５のデータ処理装置は、ポストインクリメント処理と全く同じ値をＭＯＤ＿Ｕ６５０及びＭＯＤ＿Ｌ６５１に設定しても、ポストデクリメント処理を正しく実行することができる。
【０３１６】
上述のように、１ワードのみにしかモジュロ機構が機能しないと言う制限は加わるが、実施の形態５のデータ処理装置は、実施の形態４と同様に効率の良いサーキュラーバッファのアクセスが可能となり、プログラムのコードサイズの削減、処理サイクル数の低減に寄与する。
【０３１７】
ポストインクリメント／ポストデクリメントを意識せずにサーキュラーバッファの上限アドレスと下限アドレスを１ワードアドレスで設定すればよいので、設定が統一されており、分かりやすい。
【０３１８】
また、実施の形態５のデータ処理装置は、ポストインクリメント処理及びポストデクリメント処理時において、アドレスの計算と並列にベースアドレスの初期値に基づく判定処理可能となるため、動作周波数の向上による高速化が容易である。
【０３１９】
実施の形態１と同様、上述の実施の形態５で説明した様々な場合にも、本発明は適用できる。
【０３２０】
上述の実施の形態５では、アドレスのビット長が１６ビットの例を示したが、２４ビットや３２ビット等任意のビット長であってもよい。また、データの基本データ長を１６ビットにしているが、２４ビットにしたり、３２ビットにしてもよい。また、バイトアドレスを管理しているが、１６ビットや２４ビット、３２ビットを１ワードとして、ワードアドレスを管理してもよい。
【０３２１】
上述の実施の形態５では、１ワードアクセスのみをモジュロアドレッシングの処理対象としているが、２ワードアクセスのみあるいは４ワードアクセスのみ等を他のアクセスサイズを処理対象にしてもよい。例えば、２ワードアクセスのみの場合、ＭＯＤ＿Ｕ１０５０、ＭＯＤ＿Ｌ１０５１に２ワードアドレスを設定し、管理するようにすればよい。
【０３２２】
上述の実施の形態５では、アドレスの１６ビットすべてで比較判定を行う例を示したが、上位１５ビットのみで判定を行うようにしてもよい。
【０３２３】
上述の実施の形態５では、ＭＯＤ＿Ｕ１０５０、ＭＯＤ＿Ｌ１０５１は、物理的に１６ビット持っているが、上位１５ビットのみを保持するようにして、１５ビットの比較を行うようにしてもよい。奇数アドレス時の動作を保証しない場合、どのように動作してもかまわない。
【０３２４】
上述の実施の形態５では、ＭＯＤ＿Ｕ１０５０、ＭＯＤ＿Ｌ１０５１には、アドレスの最上位ビット（ＭＳＢ）までのすべてのアドレス値を保持するようになっているが、アドレスの上位数ビットは保持しないようにし、下位ビットのみで判定を行うようにすれば、複数の領域に形成された複数のサーキュラーバッファに対して、同じ設定で同時にモジュロ機構が動作するようにできる。ただし、比較しない上位ビットについては、更新前の値をそのまま出す等の処理が必要になる。
【０３２５】
上述の実施の形態５では、一般的なプロセッサの構成を示しているが、ＤＳＰのように、アドレスレジスタとデータレジスタ（アキュムレータ等）を分けるような構成にしてもよい。また、ＤＳＰのように、複数のメモリを独立にアクセスできるような構成にしても、本技術は有効である。
【０３２６】
上述の実施の形態５では、規定された場合以外の動作は保証していないが、上記規定された場合以外の時に例外を検出する等の処理を行ってもよい。例えば、奇数アドレスの場合にはアドレス例外を起こす等の処理を行ってもよい。
【０３２７】
【発明の効果】
この発明における請求項１記載のデータ処理装置のアクセスアドレス決定手段は、第１のメモリアクセス命令の処理時には、終了アドレス情報が指示するアドレスとアクセスアドレスとの間で、ｎビットデータを特定するアドレス部分が等価であるという第１の条件が成立すると判定すると、開始アドレス情報の指示するアドレスに関連し、かつサーキュラーバッファ領域上のｎビットデータを特定可能なｎビットアクセスアドレスを次期アクセスアドレスとし、第１の条件が不成立であると判定すると、演算アドレスを次期アクセスアドレスとし、第２のメモリアクセス命令の処理時には、終了アドレス情報が指示するアドレスとアクセスアドレスとの間で、２ｎビットデータを特定するアドレス部分が等価であるという第２の条件が成立すると判定すると、開始アドレス情報の指示するアドレスに関連し、かつサーキュラーバッファ領域上の２ｎビットデータを特定可能な２ｎビットアクセスアドレスを次期アクセスアドレスとし、第２の条件が不成立であると判定すると、演算アドレスを次期アクセスアドレスとしている。
【０３２８】
したがって、ｎビットデータ単位でアクセスする第１のメモリアクセス命令と２ｎビットデータ単位でアクセスする第２のメモリアクセス命令とで共通の開始アドレス情報及び終了アドレス情報を与えるだけで、請求項１記載のデータ処理装置は、第１及び第２のメモリアクセス命令を混在して実行しても、サーキュラーバッファ領域上を効率的にモジュロアドレッシング（巡回アドレッシング）することができる。
【０３２９】
請求項２記載のデータ処理装置において、第１及び第２のメモリアクセス命令はそれぞれアドレス更新をアドレスを増加させて行う第１及び第２のインクリメント処理を含み、アドレス更新方向はアドレスが増加する方向に規定される。
【０３３０】
したがって、開始アドレス情報が指示するアドレスをサーキュラーバッファ領域の下限アドレスとし、終了アドレス情報が指示するアドレスをサーキュラーバッファ領域の上限アドレスとして設定することにより、請求項２記載のデータ処理装置は、サーキュラーバッファ領域上の下限アドレスから上限アドレスにかけて効率的にモジュロアドレッシングすることができる。
【０３３１】
請求項３記載のデータ処理装置において、開始アドレス情報が指示するアドレスはサーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、終了アドレス情報が指示するアドレスはサーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含んでいる。
【０３３２】
サーキュラーバッファ領域上のｎビットデータを特定可能なアドレス中に２ｎビットデータを特定可能なアドレス部分を含むため、アクセスアドレス決定手段は、終了アドレス情報が指示するアドレスとアクセスアドレスとの比較して得られる比較結果情報のみに基づいて、上記第１の条件及び第２の条件それぞれの成立／不成立を判定することができる。
【０３３３】
請求項４記載のデータ処理装置において、開始アドレス情報が指示するアドレスはサーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、終了アドレス情報が指示するアドレスはサーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含むため、開始アドレス情報保持手段及び終了アドレス情報保持手段が保持する情報量を必要最小限に抑えることができる。
【０３３４】
この際、アクセスアドレス決定手段が用いた第１の条件は、終了アドレス情報が指示するアドレスで特定されるサーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち、後半のｎビットデータを特定するアドレスにアクセスアドレスが一致するという条件を含むため、アクセスアドレス決定手段は、正確に第１のメモリアクセス命令の終了アドレス判定を行うことができる。
【０３３５】
請求項５記載のデータ処理装置において、第１及び第２のアクセス命令はそれぞれアドレスを減少させてアドレス更新を行う第１及び第２のデクリメント処理を含み、アドレス更新方向はアドレスが減少する方向に規定される。
【０３３６】
したがって、開始アドレス情報が指示するアドレスをサーキュラーバッファ領域の上限アドレスとし、終了アドレス情報が指示するアドレスをサーキュラーバッファ領域の下限アドレスとして設定することにより、請求項５記載のデータ処理装置は、サーキュラーバッファ領域上の上限アドレスから下限アドレスにかけて効率的にモジュロアドレッシングすることができる。
【０３３７】
請求項６記載のデータ処理装置において、開始アドレス情報が指示するアドレスはサーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含み、終了アドレス情報が指示するアドレスはサーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含んでいる。
【０３３８】
サーキュラーバッファ領域上のｎビットデータを特定可能なアドレス中に２ｎビットデータを特定可能なアドレス部分を含むため、アクセスアドレス決定手段は、終了アドレス情報が指示するアドレスとアクセスアドレスとの比較して得られる比較結果情報のみに基づいて、上記第１の条件及び第２の条件それぞれの成立／不成立を判定することができる。
【０３３９】
この際、２ｎビットアクセスアドレスは、開始アドレス情報が指示するアドレスのうち２ｎビットデータを特定可能なアドレス部分と、２ｎビットデータ単位でアクセス可能にするための固定データとからなるアドレスを含むため、アクセスアドレス決定手段は第２の条件成立時に正確な次期アクセスアドレスとして２ｎビットアクセスアドレスを決定することができる。
【０３４０】
請求項７記載のデータ処理装置において、開始アドレス情報が指示するアドレスはサーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含み、終了アドレス情報が指示するアドレスはサーキュラーバッファ領域上の２ｎビットデータを特定可能なアドレスを含むため、開始アドレス情報保持手段及び終了アドレス情報保持手段が保持する情報量を必要最小限に抑えることができる。
【０３４１】
この際、ｎビットアクセスアドレスは、開始アドレス情報の指示するアドレスにより特定したサーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち、後半のｎビットデータを特定するアドレスを含むため、アクセスアドレス決定手段は第１の条件成立時に正確な次期アクセスアドレスとしてｎビットアクセスアドレスを決定することができる。
【０３４２】
請求項８記載のデータ処理装置において、開始アドレス情報付与手段は、実行命令情報が第１あるいは第２のインクリメント処理を指示するとき、下限アドレスを指示する開始アドレス情報を付与し、実行命令情報が第１あるいは第２のデクリメント処理を指示するとき、上限アドレスを指示する開始アドレス情報を付与する第１の選択手段を含み、終了アドレス情報付与手段は、実行命令情報が第１あるいは第２のインクリメント処理を指示するとき、上限アドレスを指示する終了アドレス情報を付与し、実行命令情報が第１あるいは第２のデクリメント処理を指示するとき、下限アドレスを指示する終了アドレス情報を付与する第２の選択手段を含んでいる。
【０３４３】
したがって、サーキュラーバッファ領域上の下限アドレス及び上限アドレスをそれぞれ下限アドレス保持手段及び上限アドレス保持手段に保持させるだけで、第１及び第２のメモリアクセス命令が第１及び第２のインクリメント処理を実行する命令あっても、第１及び第２のデクリメント処理を実行する命令あっても、第１及び第２の選択手段によって自動的に開始アドレス情報及び終了アドレス情報を正確に付与することができる。
【０３４４】
その結果、第１及び第２のメモリアクセス命令が（第１及び第２の）インクリメント処理を実行する場合と（第１及び第２の）デクリメント処理を実行する場合とで、下限アドレス保持手段及び上限アドレス保持手段に保持させるアドレスを変更する必要がなくなるため、その分、プログラムのコードサイズの削減、処理サイクル数の低減を可能となり、高速動作が可能なデータ処理装置を得ることができる。
【０３４５】
請求項９記載のデータ処理装置において、下限アドレス及び上限アドレスはサーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含んでいる。
【０３４６】
サーキュラーバッファ領域上のｎビットデータを特定可能なアドレス中に２ｎビットデータを特定可能なアドレス部分を含むため、アクセスアドレス決定手段は、終了アドレス情報が指示するアドレスとアクセスアドレスとの比較して得られる比較結果情報のみに基づいて、上記第１の条件及び第２の条件それぞれの成立／不成立を判定することができる。
【０３４７】
この際、２ｎビットアクセスアドレスは、第２のメモリアクセス命令が第２のインクリメント処理を行う命令の場合に、開始アドレス情報が指示するアドレスのうち２ｎビットデータを特定可能なアドレス部分と、２ｎビットデータ単位でアクセス可能にするための固定データとからなるアドレスとなるため、アクセスアドレス決定手段は第２の条件成立時に正確な次期アクセスアドレスとして２ｎビットアクセスアドレスを決定することができる。
【０３４８】
請求項１０記載のデータ処理装置において、下限アドレス及び上限アドレスはサーキュラーバッファ領域上のｎビットデータを特定可能なアドレスを含んでいるため、下限アドレス保持手段及び上限アドレス保持手段が保持する情報量を必要最小限に抑えることができる。
【０３４９】
この際、アクセスアドレス決定手段が用いた第１の条件は、第１のメモリアクセス命令が第１のインクリメント処理を行う命令の場合に、終了アドレス情報が指示するアドレスで特定されるサーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち、後半のｎビットデータを特定するアドレスにアクセスアドレスが一致するという条件となるため、アクセスアドレス決定手段は、正確に第１のメモリアクセス命令の終了アドレス判定を行うことができる。
【０３５０】
加えて、ｎビットアクセスアドレスは、第１のメモリアクセス命令が第１のデクリメント処理を行う命令の場合に、開始アドレス情報の指示するアドレスにより特定したサーキュラーバッファ領域上の２ｎビットデータを構成する２つのｎビットデータのうち、後半のｎビットデータを特定するアドレスを含むため、アクセスアドレス決定手段は第１の条件成立時に正確な次期アクセスアドレスとしてｎビットアクセスアドレスを決定することができる。
【０３５１】
また、請求項１１記載のデータ処理装置において、第１及び第２のメモリアクセス命令は、メモリからデータを取り込むロード命令を含むため、ｎビットデータ単位でアクセスするロード命令と２ｎビット単位でアクセスするロード命令を混在して実行しても、サーキュラーバッファ領域上を効率的にモジュロアドレッシングすることができる。
【０３５２】
また、請求項１２記載のデータ処理装置において、第１及び第２のメモリアクセス命令は、メモリにデータを格納するストア命令を含むため、ｎビットデータ単位でアクセスするストア命令と２ｎビット単位でアクセスするストア命令を混在して実行しても、サーキュラーバッファ領域上を効率的にモジュロアドレッシングすることができる。
【図面の簡単な説明】
【図１】  この発明の実施の形態１のデータ処理装置のレジスタセットを表す説明図である。
【図２】  この発明の実施の形態１のデータ処理装置のプロセッサ・ステータス・ワードの構成を示す説明図である。
【図３】  この発明の実施の形態１のデータ処理装置の命令フォーマットを示す説明図である。
【図４】  この発明の実施の形態１のデータ処理装置のショートフォーマットの２オペランド命令の命令フォーマットを示す説明図である。
【図５】  この発明の実施の形態１のデータ処理装置のショートフォーマットの分岐命令の命令フォーマットを示す説明図である。
【図６】  この発明の実施の形態１のデータ処理装置のロングフォーマットの３オペランド命令やロード／ストア命令の命令フォーマットを示す説明図である。
【図７】  この発明の実施の形態１のデータ処理装置の右コンテナにオペレーションコードをロングフォーマットの持つ命令の命令フォーマットを示す説明図である。
【図８】  この発明の実施の形態１のデータ処理装置の機能構成を示すブロック図である。
【図９】  この発明の実施の形態１のデータ処理装置の第１演算部の詳細を示すブロック図である。
【図１０】  この発明の実施の形態１のデータ処理装置のＰＣ部の詳細を示すブロック図である。
【図１１】  この発明の実施の形態１のデータ処理装置の第２演算部の詳細を示すブロック図である。
【図１２】  この発明の実施の形態１のデータ処理装置のパイプライン処理を示す説明図である。
【図１３】  この発明の実施の形態１のデータ処理装置のロードオペランド干渉を起こす場合のパイプラインの状態を示す説明図である。
【図１４】  この発明の実施の形態１のデータ処理装置の演算ハードウェア干渉を起こす場合のパイプラインの状態を示す説明図である。
【図１５】  この発明の実施の形態１のデータ処理装置のモジュロアドレッシング機能を実現する部分の模式的に示した回路図である。
【図１６】  ２つの境界が共に４バイト整置されているサーキュラバッファの構成を示す説明図である。
【図１７】  開始位置は４バイト整置、終了位置が４バイト非整置のサーキュラバッファの構成を示す説明図である。
【図１８】  開始位置は４バイト非整置、終了位置が４バイト整置のサーキュラバッファの構成を示す説明図である。
【図１９】  開始位置、終了位置共に４バイト非整置のサーキュラバッファの構成を示す説明図である。
【図２０】  ２つの境界が共に４バイト整置されているサーキュラバッファの構成を示す説明図である。
【図２１】  開始位置は４バイト整置、終了位置が４バイト非整置のサーキュラバッファの構成を示す説明図である。
【図２２】  開始位置は４バイト非整置、終了位置が４バイト整置されているサーキュラバッファの構成を示す説明図である。
【図２３】  開始位置、終了位置共に４バイト非整置のサーキュラバッファの構成を示す説明図である。
【図２４】  この発明の実施の形態１のデータ処理装置で実行するＦＩＲフィルタのプログラム例を示す説明図である。
【図２５】  ＦＩＲフィルタ処理の係数及びデータのメモリ中の割り当てを示す説明図である。
【図２６】  ＦＩＲフィルタ処理のデータのメモリ中の割り当てを示す説明図である。
【図２７】  ＦＩＲフィルタ処理のデータのメモリ中の割り当てを示す説明図である。
【図２８】  この発明の実施の形態２のデータ処理装置のモジュロアドレッシングの上限アドレスと下限アドレスを設定するレジスタを示す説明図である。
【図２９】  この発明の実施の形態２のデータ処理装置のモジュロアドレッシング機能を実現する部分の模式的に示す回路図である。
【図３０】  ２つの境界が共に４バイト整置されているサーキュラバッファの構成を示す説明図である。
【図３１】  この発明の実施の形態３のデータ処理装置のモジュロアドレッシングの上限アドレスと下限アドレスとを設定するレジスタの説明図である。
【図３２】  この発明の実施の形態３のデータ処理装置のモジュロアドレッシング機能を実現する部分の模式的に示す回路図である。
【図３３】  ２つの境界が共に４バイト整置されているサーキュラバッファの構成を示す説明図である。
【図３４】  ２つの境界が共に４バイト整置されているサーキュラバッファの構成を示す説明図である。
【図３５】  この発明の実施の形態４のデータ処理装置のモジュロアドレッシングの上限アドレスと下限アドレスを設定するレジスタの説明図である。
【図３６】  この発明の実施の形態４のデータ処理装置のモジュロアドレッシング機能を実現する部分の模式的に示す回路図である。
【図３７】  ２つの境界が共に４バイト整置されているサーキュラバッファの説明図である。
【図３８】  この発明の実施の形態５のデータ処理装置のモジュロアドレッシングの上限アドレスと下限アドレスを設定するレジスタの説明図である。
【図３９】  この発明の実施の形態５のデータ処理装置のモジュロアドレッシング機能を実現する部分の模式的に示す回路図である。
【図４０】  ２つの境界が共に４バイト整置されているサーキュラバッファの説明図である。
【符号の説明】
１１２，６１６，８１６，９１６，１０１６  制御部、１１３  第１デコーダ、１１５  レジスタファイル、１５３  ＡＬＵ、１５５，６１４，６１５，９５２，９５３，１０５２，１０５３  セレクタ、１５６，８５１  ＭＯＤ＿Ｓレジスタ、１５７，８５０  ＭＯＤ＿Ｅレジスタ、１５８，８５２，９５４，１０５４，１０６０  比較器、１５９，８５３，９５５，１０５５  ラッチ、６５０，９５０，１０５０  ＭＯＤ＿Ｕレジスタ、６５１，９５１，１０５１  ＭＯＤ＿Ｌレジスタ。
【図１】
0003789583.tif 000003
【図２】
0003789583.tif 000004
【図３】
0003789583.tif 000005
【図４】
0003789583.tif 000006
【図５】
0003789583.tif 000007
【図６】
0003789583.tif 000008
【図７】
0003789583.tif 000009
【図８】
0003789583.tif 000010
【図９】
0003789583.tif 000011
【図１０】
0003789583.tif 000012
【図１１】
0003789583.tif 000013
【図１２】
0003789583.tif 000014
【図１３】
0003789583.tif 000015
【図１４】
0003789583.tif 000016
【図１５】
0003789583.tif 000017
【図１６】
0003789583.tif 000018
【図１７】
0003789583.tif 000019
【図１８】
0003789583.tif 000020
【図１９】
0003789583.tif 000021
【図２０】
0003789583.tif 000022
【図２１】
0003789583.tif 000023
【図２２】
0003789583.tif 000024
【図２３】
0003789583.tif 000025
【図２４】
0003789583.tif 000026
【図２５】
0003789583.tif 000027
【図２６】
0003789583.tif 000028
【図２７】
0003789583.tif 000029
【図２８】
0003789583.tif 000030
【図２９】
0003789583.tif 000031
【図３０】
0003789583.tif 000032
【図３１】
0003789583.tif 000033
【図３２】
0003789583.tif 000034
【図３３】
0003789583.tif 000035
【図３４】
0003789583.tif 000036
【図３５】
0003789583.tif 000037
【図３６】
0003789583.tif 000038
【図３７】
0003789583.tif 000039
【図３８】
0003789583.tif 000040
【図３９】
0003789583.tif 000041
【図４０】
0003789583.tif 000042