(57)【特許請求の範囲】
【請求項１】
メモリアクセスを行うためのメモリアクセスパイプラインと、
演算処理を行うための演算パイプラインと、
メモリアクセスパイプライン内に設けられ、メモリアクセスを含む演算命令を解析し、展開する手段とを備え、
メモリアクセスパイプラインおよび演算パイプラインへの命令投入前の段階ではメモリアクセスを含む演算命令の解析・展開を行わず、メモリアクセスパイプラインへ該メモリアクセスを含む演算命令を投入した後に、メモリアクセスパイプライン内にて該メモリアクセスを含む演算命令の解析・展開を行うように構成したことを特徴とする複数のパイプライン処理機構を有するデータ処理装置。
【請求項２】
メモリアクセスパイプライン内における、メモリアクセスを含む演算命令の展開が複数サイクルにわたる場合、メモリアクセスパイプラインへの後続命令の投入を停止することを特徴とする請求項１に記載の複数のパイプライン処理機構を有するデータ処理装置。
【請求項３】
メモリアクセスを含む演算命令によりメモリから読み出されたデータを保持するためのリソースを確保し、該リソース内に保持されたデータを演算パイプラインへ送出する手段を備えたことを特徴とする請求項１または請求項２に記載の複数のパイプライン処理機構を有するデータ処理装置。
【請求項４】
前記リソースを確保できなかった場合に、リソースが空くまで状態を保持したまま、待ち状態になることを特徴とする請求項３に記載の複数のパイプライン処理機構を有するデータ処理装置。
【請求項５】
メモリから読み出されたデータを受け取り、そのデータを参照して演算するメモリデータ参照演算命令を、メモリアクセスパイプライン側から演算パイプライン内の演算ユニットへ送出する手段を備えたことを特徴とする請求項１から請求項４のいずれかに記載の複数のパイプライン処理機構を有するデータ処理装置。
【請求項６】
メモリアクセスパイプラインから送出される前記メモリデータ参照演算命令と、演算パイプラインの先頭部から入力される命令との間の優先順位を判定し、演算対象の命令を決定する手段を備えたことを特徴とする請求項５に記載の複数のパイプライン処理機構を有するデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、互いに独立に動作するメモリアクセスパイプラインと演算パイプラインとを持つデータ処理装置に関し、特に、メモリアクセスを含む演算命令を有するようなＣＩＳＣ型スーパスカラ方式のプロセサ等に関するものである。
【０００２】
【従来技術】
図９は、ＣＩＳＣ型スーパスカラ方式のプロセサの従来の構成例を示す図である。命令は、命令バッファ１０１から命令デコードユニット１０３へ送られ、そこで意味解析処理、リソースのチェックおよび確保処理、命令の展開処理が実行される。複雑な命令（例えば、一回のメモリアクセスでは処理できない大量のデータについて演算操作をおこなうメモリアクセス演算命令等）に関しては、命令展開処理に複数サイクルを要するため、一つの命令が複数サイクルの間、命令デコードユニット１０３に繰り返して滞在することがある。命令バッファ１０２は、複雑な命令用の命令バッファである。
【０００３】
複雑な命令に関しては、最初、命令バッファ１０１に投入された命令が、命令デコードユニット１０３へ送られ、それ以後は、命令デコードユニット１０３→命令バッファ１０２→命令デコードユニット１０３→命令バッファ１０２→命令デコードユニット１０３→  ・・・というように、複数サイクルにわたって命令展開処理が行われることになる。例えば、一回のメモリアクセスでは処理しきれない大量のメモリデータ領域へのアクセスを行う場合には、メモリアクセス可能なデータ長の命令を繰り返して生成するために、上記のサイクルを繰り返し実行する。
【０００４】
メモリアクセス演算命令に関しては、命令デコードユニット１０３で解析処理された後、メモリアクセスパイプライン側のリザベーションステーション（ＲＳ）１０４と、演算パイプライン側のリザベーションステーション（ＲＳ）１０５の両方に命令が送出される。メモリアクセスパイプライン側ではアドレス計算ユニット１０６でメモリアクセスのためのアドレス計算が行われ、メモリアクセスユニット１０７でメモリアクセスが行われる。メモリアクセスユニット１０７で得られたデータは、レジスタファイル１０８へ書き込まれる。
【０００５】
一方、メモリアクセス演算命令から展開された命令であって、命令デコードユニット１０３から演算パイプライン側のリザベーションステーション（ＲＳ）１０５に送られた命令は、そのリザベーションステーション（ＲＳ）１０５において、レジスタファイル１０８にメモリからのデータが書き込まれるのを待つ。レジスタファイル１０８にメモリからのデータが入った後に、リザベーションステーション（ＲＳ）１０５から演算ユニット１０９へ命令が送られる。その後、演算ユニット１０９ではレジスタファイル１０８内のデータについて演算操作を実行する。
【０００６】
図９において、リザベーションステーション（ＲＳ）１０４、アドレス計算ユニット１０６、メモリアクセスユニット１０７がメモリアクセスパイプラインを構成し、リザベーションステーション（ＲＳ）１０５、演算ユニット１０９が演算パイプラインを構成している。
従来のＣＩＳＣ型スーパスカラ方式のプロセサでは、
(1) メモリアクセスを含む演算命令を解析して、メモリアクセス可能なデータ長の命令へ変換する処理と、
(2) メモリアクセスで得たデータを使用して行う演算命令に分解する処理とを、上記したように命令のディスパッチ（ｄｉｓｐａｔｃｈ）前、すなわちリザベーションステーション（ＲＳ）１０４、１０５への命令投入前に行うようにしている。
【０００７】
【発明が解決しようとする課題】
従来の方式では、複雑な命令をディスパッチ前に展開しているため、以下のような問題が生じていた。
(1) 命令の展開を行う部分は、命令の展開をともなわない命令をも含めて、全ての命令が通過する場所である。命令の展開に時間がかかる場合には、その展開を要する命令よりも早期に実行される可能性のある、その他の命令の実行タイミングを遅らせることになる。
(2) ディスパッチの前の時点で命令が展開されるために、「メモリから受け取った命令を参照する命令」（メモリアクセス演算命令）は、メモリアクセスパイプラインと演算パイプラインの双方へ送られる。
演算パイプライン内の実行待ちバッファであるところのリザベーションステーション（ＲＳ）にメモリアクセス演算命令が保持されるため、それらの命令のためにリザベーションステーション（ＲＳ）のエントリが使用される。そのためリザベーションステーション（ＲＳ）のエントリが不足し、後続の「レジスタからデータを参照して実行する演算命令」（レジスタ演算命令）の送付が止まる場合がある。
メモリアクセスには時間がかかるため、データ待ちが生じて、演算パイプラインのリザベーションステーション（ＲＳ）に保持されているメモリアクセス演算命令かそのリザベーションステーション（ＲＳ）に長く留まる可能性が高い。その分だけ、後続のレジスタ演算命令の実行を妨げる可能性が高い。
【０００８】
本発明は、上記問題点を解決し、メモリアクセス演算命令の実行時においても演算パイプラインを効率よく使用できるようにすることを目的とする。
【０００９】
【課題を解決するための手段】
本発明の第１の態様は以下の構成を採る。
複数のパイプライン処理機構を有するデータ処理装置であって、メモリアクセスを行うためのメモリアクセスパイプラインと、演算処理を行うための演算パイプラインと、メモリアクセスパイプライン内に設けられ、メモリアクセスを含む演算命令を解析し、展開する手段とを備え、メモリアクセスパイプラインおよび演算パイプラインへの命令投入前の段階ではメモリアクセスを含む演算命令の解析・展開を行わず、メモリアクセスパイプラインへメモリアクセスを含む演算命令を投入した後に、メモリアクセスパイプライン内にてメモリアクセスを含む演算命令の解析・展開を行う。
【００１０】
本発明の第２の態様は以下の構成を採る。
第１の態様のデータ処理装置において、メモリアクセスパイプライン内における、メモリアクセスを含む演算命令の展開が複数サイクルにわたる場合、メモリアクセスパイプラインへの後続命令の投入を停止する。
本発明の第３の態様は以下の構成を採る。
【００１１】
第１または第２の態様のデータ処理装置において、メモリアクセスを含む演算命令によりメモリから読み出されたデータを保持するためのリソースを確保し、リソース内に保持されたデータを演算パイプラインへ送出する手段を備える。
本発明の第４の態様は以下の構成を採る。
第３の態様のデータ処理装置において、リソースを確保できなかった場合に、リソースが空くまで状態を保持したまま、待ち状態になる。
【００１２】
本発明の第５の態様は以下の構成を採る。
第１の態様から第４の態様のいずれかのデータ処理装置において、メモリから読み出されたデータを受け取り、そのデータを参照して演算するメモリデータ参照演算命令を、メモリアクセスパイプライン側から演算パイプライン内の演算ユニットへ送出する手段を備える。
【００１３】
本発明の第６の態様は以下の構成を採る。
第５の態様のデータ処理装置において、メモリアクセスパイプラインから送出されるメモリデータ参照演算命令と、演算パイプラインの先頭部から入力される命令との間の優先順位を判定し、演算対象の命令を決定する手段を備える。
【００１４】
【発明の実施の形態】
図１は、本発明の１実施例のデータ処理装置の構成図である。本発明の１実施例のデータ処理装置は、命令バッファ１、命令デコードユニット２、命令デコードユニット出力回路３、メモリアクセスパイプライン側のリザベーションステーション（ＲＳ）４、演算パイプライン側のリザベーションステーション（ＲＳ）５、アドレス計算ユニット６、アドレス計算ユニット入力回路７、メモリアクセス待機ユニット８、メモリアクセス待機ユニット入力回路９、メモリアクセスユニット１０、読出データ保持ユニット１１、読出データ保持ユニット出力回路１２、演算ユニット１３、演算ユニット入力回路１４、演算ユニット出力回路１５、レジスタファイル１６により構成される。
【００１５】
リザベーションステーション（ＲＳ）４、アドレス計算ユニット入力回路７、メモリアクセス待機ユニット８、メモリアクセスユニット１０、読出データ保持ユニット１１がメモリアクセスパイプラインの主要部を構成する。また、リザベーションステーション（ＲＳ）５、演算ユニット１３が演算パイプラインの主要部を構成する。
【００１６】
本発明において設けられる主要ユニットである、アドレス計算ユニット６、メモリアクセス待機ユニット８、読出データ保持ユニット１１の機能を説明する。アドレス計算ユニット６は、アクセスするメモリアドレスをレジスタ（ベースレジスタ／インデクスレジスタ）と即値から計算する機能と、命令の意味を解析する機能を持つ。メモリへのアクセスが複数回必要な命令に対しては、命令の展開動作を行う。複数回生じるメモリへのアクセスには、データ読み出しアクセスとデータ書き込みアクセスとが連続する場合が含まれる。これは、データを読み出してきたアドレスに、演算結果を書き込むアクセスがある場合、２つのメモリアクセスが生じることを意味する。
【００１７】
また、ＣＩＳＣ型の命令には、一回のメモリ読み出し要求だけでは賄えない長さのデータを読み出す仕様もある。この場合は、データのアドレスから、メモリアクセスのアライメントを計算し、複数の読み出し命令に展開する。データの書き込みに関しても同様のことがいえる。
さらに、複雑な命令として、２つのデータを読み出し、その読み出した２つのデータ間で演算する場合がある。データアドレスのアライメントとの関係で、初回に読み出せるデータの長さが揃わない場合がある。その場合の考慮もこのアドレス計算ユニット６で行う。その情報は、後述する読出データ保持ユニット１１での命令送り出しの制御に用いる。
【００１８】
命令の展開が複数サイクルにわたる場合には、アドレス計算ユニット６はリザベーションステーション（ＲＳ）４から新たに命令を受け付けず、処理中の命令が複数サイクル滞在するのを認める。
メモリアクセス待機ユニット８は、アドレス計算ユニット６で作成されたメモリアクセス命令が、メモリアクセス可能になるタイミングまで待ち合わせる場所である。メモリアクセスの優先度が命令によって異なる場合は、このメモリアクセス待機ユニット８の機能により、次にメモリアクセスする命令が選択される。
【００１９】
読出データ保持ユニット１１では、メモリから読み出されたデータを保持するバッファリング処理と、そのデータを参照する命令が持つ意味を解析し演算部へその命令を送付する処理が実行される。
図１において、命令実行処理の流れは次のようになる。
命令バッファ１にある命令は、命令デコードユニット２で意味の解析が行われる。レジスタ演算命令は演算パイプライン側のリザベーションステーション（ＲＳ）５に送られ、メモリアクセス演算命令はメモリアクセスパイプライン側のリザベーションステーション（ＲＳ）４に送られる。
【００２０】
演算パイプライン側のリザベーションステーション（ＲＳ）５は、メモリアクセスパイプライン側に送られるメモリアクセス演算命令にかかわらず、データ依存関係の解消された演算命令を実行していく。
メモリアクセスパイプライン側のリザベーションステーション（ＲＳ）４の命令は、アドレス計算ユニット６に送られる。アドレス計算ユニット６では、命令の意味の解析を行うとともに、レジスタ（ベースレジスタ／インデクスレジスタ）と即値からアクセス対象のメモリアドレスを計算する。アドレス計算ユニット６は、データ長とアドレスのアライメント処理、および関連のある命令の関係付け処理を行い、メモリアクセス待機ユニット８に命令を送る。さらに、アドレス計算ユニット６は、メモリアクセス待機ユニット８に命令を送るとともに、読出データ保持ユニット１１内にデータ保持エントリを確保する処理と、読出データ保持ユニット１１において必要な情報を送付する処理を行う。
【００２１】
メモリアクセス待機ユニット８では、優先順位の割り当てられた命令が、メモリアクセスユニット１０に対してメモリアクセスの要求を出す。メモリアクセスユニット１０におけるメモリアクセス処理によってメモリから読み出されたデータは、読出データ保持ユニット１１内のあらかじめ用意されたエントリに送られ、そこに保持される。
【００２２】
読出データ保持ユニット１１の制御により、演算ユニット１３に命令が送られる。また、読出データ保持ユニット１１の制御により、メモリアクセス待機ユニット８に命令がおくられる。また、演算を必要としない命令では、読出データ保持ユニット１１からレジスタファイル１６にデータが書き込まれる。
演算結果をメモリに書き込む命令の場合は、演算ユニット１３からメモリアクセス待機ユニット８に演算結果が送られる。演算結果をレジスタに書き込む命令の場合は、演算ユニット１３からレジスタファイル１６に演算結果が送られる。
【００２３】
次に、図１の各ユニットの内部構成を以下に説明する。
図２は、図１における命令デコードユニット２と命令デコードユニット出力回路３の構成を示す。命令デコードユニット２での意味解析処理として、命令種別の認識処理２０、オペランドデータの解析処理２１、データ依存関係情報の設定処理２２が実行される。命令デコードユニット出力回路３において、メモリアクセスを伴う命令はメモリアクセスパイプライン側のリザベーションステーション（ＲＳ）４へ送られ、その他の演算命令は演算パイプライン側のリザベーションステーション（ＲＳ）５へ送られる。
【００２４】
図３は、メモリアクセスパイプライン側のリザベーションステーション（ＲＳ）４の構成を示す。リザベーションステーション（ＲＳ）４には、複数の命令を保持するバッファエントリが設けられている。依存関係が解消され、送付先ユニットが受付可能である、等の送付条件を満たす命令が選択され、後続のユニットへ送られる。
【００２５】
以下の説明では、アドレス計算ユニット６とアドレス計算ユニット入力回路７を含む部分をユニット１（ＵＮＩＴ１）と称し、メモリアクセス待機ユニット８とメモリアクセス待機ユニット入力回路９を含む部分をユニット２（ＵＮＩＴ２）と称し、読み出しデータユニット１１と読出データ保持ユニット出力回路１２を含む部分をユニット３（ＵＮＩＴ３）と称して説明する。
【００２６】
図４は、ユニット１（アドレス計算ユニット６、アドレス計算ユニット入力回路７）の構成を示す。ユニット１は、命令種別保持部３０、ベースレジスタ保持部３１、インデクスレジスタ保持部３２、ディスプレースメント保持部３３、データ長保持部３４、アドレス計算部３５、アクセス制御情報生成部３６、エントリ制御部３７により構成される。
アクセス制御情報生成部３６では、データ長生成処理、メモリアクセス種別（ｌｏａｄ／ｓｔｏｒｅ）生成処理、アドレスアライメント・メモリアドレス生成処理等を行う。アクセス制御情報生成部３６の詳細動作は、図７のフローチャートにより後述する。エントリ制御部３７では、ユニット２／ユニット３におけるエントリ生成の判定処理、ユニット２／ユニット３におく情報の生成処理、エントリ生成リクエスト送出処理等を行う。エントリ制御部３７の詳細動作は、図８のフローチャートにより後述する。
【００２７】
図５は、ユニット２（メモリアクセス待機ユニット８、メモリアクセス待機ユニット入力回路９）の構成を示す。ユニット２には、データおよび各種制御情報等を保持するための複数のバッファエントリが設けられている。ユニット１からは、データ／アクセス種別／エントリＩＤが入力される。また、ユニット３および演算ユニット１３からもデータが入力される。メモリ内でのデータの移動を行う命令を実行するような場合に、ユニット３からユニット２へデータが入力される。また演算結果をメモリに格納する命令を実行するような場合に、演算ユニット１３からユニット２へデータが入力される。
【００２８】
図６は、ユニット３（読み出しデータ保持ユニット１１、読出データ保持ユニット出力回路１２）の構成を示す。ユニット３には、ユニット２と同様に、データおよび各種制御情報等を保持するための複数のバッファエントリが設けられている。メモリから読み出したデータがバッファエントリに格納される。メモリから読み出したデータをレジスタファイル１６にロードする命令の場合には、バッファエントリのデータはレジスタファイル１６に送られる。メモリから読み出したデータを演算する命令の場合には、バッファエントリのデータは演算ユニット１３に送られる。メモリ内でのデータの移動を行う命令の場合には、バッファエントリのデータはユニット２のバッファに送られる。
【００２９】
図７は、ユニット１のアクセス制御情報生成部３６の詳細動作を示すフローチャートである。
ステップ１（Ｓ１）で命令種別／データ長／アドレス（計算）値が入力される。ステップ２（Ｓ２）で複雑なメモリアクセスを伴う命令か否かが判定される。
複雑なメモリアクセスを伴う命令の場合には、ステップ３（Ｓ３）において、このサイクルで行う処理に必要な情報を生成する。複数サイクルにわたってユニット１に滞る命令に関しては、現サイクルで生成する、(a) メモリアクセス種別、(b) アドレス値、(c) データ長を、命令の種別と、既に滞った回数から生成する。
ステップ４（Ｓ４）でデータ長と命令種別に基づいて、アドレス計算の値はアライメントが必要であるか否かが判定される。アライメントが必要な場合には、ステップ７（Ｓ７）でアライメント処理が行われる。
ステップ５（Ｓ５）でメモリアクセスの種別がｌｏａｄアクセスか否かが判定される。ｌｏａｄアクセスの場合には、ステップ８（Ｓ８）でｌｏａｄアクセス信号生成処理が行われる。
ステップ６（Ｓ６）でメモリアクセスの種別がｓｔｏｒｅアクセスか否かが判定される。ｓｔｏｒｅアクセスの場合には、ステップ９（Ｓ９）でｓｔｏｒｅアクセス信号生成処理が行われる。
ステップ１０（Ｓ１０）でアドレス値およびデータ長が確定する。
ステップ１１（Ｓ１１）で、メモリアクセス種別、データ長、アドレス値、および命令を識別するＩＤがユニット２に送付される。
ステップ１２（Ｓ１２）で、複雑なメモリアクセスであり、次サイクルもユニット１で処理されるか否かが判定される。ステップ１２（Ｓ１２）の判定結果がｙｅｓであれば、ステップ２（Ｓ２）に戻り、次のメモリアクセス処理を繰り返す。ステップ１２（Ｓ１２）の判定結果がｎｏであれば、次の命令をリザベーションステーション（ＲＳ）４から受け付ける。
【００３０】
図８は、ユニット１のエントリ制御部３７の詳細動作を示すフローチャートである。
ステップ２０（Ｓ２０）で、現サイクルで作られたリクエストの属性が入力される。
ステップ２１（Ｓ２１）で、ユニット２にエントリが必要か否かが判定される。ユニット２にエントリが必要な場合、ステップ２２（Ｓ２２）でユニット２にエントリを確保する。エントリを確保できなければこのサイクルでのユニット１の処理を無効にする。ユニット２にエントリを確保した場合、ユニット２のエントリにつける属性を生成する。
ユニット２のエントリにつける属性として次のものがある。
【００３１】
・命令を識別するＩＤ
・メモリアクセス種別
・ユニット３からデータを受け取るか否か（ｙｅｓ／ｎｏ）
・演算部からデータを受け取るか否か（ｙｅｓ／ｎｏ）
ステップ２３で、ユニット３にエントリが必要か否かが判定される。
ユニット３にエントリが必要な場合、ステップ２４（Ｓ２４）でユニット３にエントリを確保する。エントリを確保できなければこのサイクルでのユニット１の処理を無効にする。ユニット３にエントリを確保した場合、ユニット３のエントリにつける属性を生成する。
ユニット３のエントリにつける属性として次のものがある。
【００３２】
・命令を識別するＩＤ
・データの送付先（レジスタファイル／ユニット２／演算ユニット）
・同期をとる命令を識別するＩＤ
ステップ２５（Ｓ２５）で、ユニット２、ユニット３にエントリを生成するとともに、属性付けの信号を送る。
【００３３】
ユニット１では、ユニット２／ユニット３のリソース（エントリ）を確保できなかった場合には、リソースが空くまで状態を保持したまま、待ち状態となる。メモリからの読み出し動作のときは、ユニット２とユニット３の両方のリソースの空きを確認する。メモリへの書き込み動作のときは、ユニット２のリソースの空きを確認する。
【００３４】
演算パイプライン側の演算ユニット入力回路１４は、メモリアクセスパイプライン側のユニット３から送出されるメモリデータ参照演算命令と、演算パイプラインの先頭部から入力される命令との間の優先順位を判定し、演算対象の命令を決定し、演算ユニット１３へ送出する機能を備えている。
【００３５】
【発明の効果】
本発明によれば、メモリアクセス演算命令の展開をメモリアクセスパイプライン内で行うようにしたので、メモリアクセス演算命令の実行中であっても、後続のレジスタ演算命令を演算パイプラインに投入して実行させることが可能になり、プロセサの処理能力を向上させることができる。
【図面の簡単な説明】
【図１】本発明の１実施例のデータ処理装置の構成図である。
【図２】命令デコードユニット２と命令デコードユニット出力回路３の構成を示す図である。
【図３】リザベーションステーション（ＲＳ）４の構成を示す図である。
【図４】ユニット１（アドレス計算ユニット６、アドレス計算ユニット入力回路７）の構成を示す図である。
【図５】ユニット２（メモリアクセス待機ユニット８、メモリアクセス待機ユニット入力回路９）の構成を示す図である。
【図６】ユニット３（読み出しデータ保持ユニット１１、読出データ保持ユニット出力回路１２）の構成を示す図である。
【図７】ユニット１のアクセス制御情報生成部３６の詳細動作を示すフローチャートである。
【図８】ユニット１のエントリ制御部３７の詳細動作を示すフローチャートである。
【図９】ＣＩＳＣ型スーパスカラ方式のプロセサの従来の構成例を示す図である。
【符号の説明】
１              命令バッファ
２              命令デコードユニット
４、５          リザベーションステーション
６              アドレス計算ユニット
８              メモリアクセス待機ユニット
１０            メモリアクセスユニット
１１            読み出しデータ保持ユニット
１３            演算ユニット
１６            レジスタファイル
【図１】
0003721780.tif 000002
【図２】
0003721780.tif 000003
【図３】
0003721780.tif 000004
【図４】
0003721780.tif 000005
【図５】
0003721780.tif 000006
【図６】
0003721780.tif 000007
【図７】
0003721780.tif 000008
【図８】
0003721780.tif 000009
【図９】
0003721780.tif 000010