(57)【特許請求の範囲】
【請求項１】
（１）メインメモリ、
（２）第１、第２のメモリバンクと、前記メモリバンクのそれぞれに対応したアドレス入力用およびメモリ内容出力用ポートである第１、第２のメモリポートを有するデータキャッシュ、及び
（３）前記第１、第２のメモリバンクにそれぞれ対応した第１、第２の命令レジスタと、該第１の命令レジスタに格納されたメモリアクセス命令から算出した第１のアドレスを前記データキャッシュの第１のメモリポートに入力し、該第２の命令レジスタに格納されたメモリアクセス命令から算出した第２のアドレスを前記データキャッシュの第２のメモリポートに入力し、前記第１、第２のメモリアドレスの入力の結果前記データキャッシュもしくは前記メインメモリからそれぞれ読み出されたデータを前記第１、第２の命令レジスタに格納されたメモリアクセス命令でそれぞれ指定されるレジスタファイル中のレジスタに格納する手段とを備えたプロセッサ、
を有するデータ処理装置であって、
前記メモリアクセス命令はメモリポート指定用ビットを有し、
前記プロセッサは、読みだされたメモリアクセス命令の上記メモリポート指定用ビットを解読し、解読結果に従って前記第１、第２の命令レジスタに格納する制御手段を有し、
前記データキャッシュは、前記第１、第２のメモリポートに入力されたメモリアドレスをそれぞれ前記第１、第２のメモリバンクのいずれかに入力するかを選択する第１選択手段と、前記第１、第２のメモリバンクから読み出されたデータを、当該メモリバンクへ入力されたアドレスが入力されたメモリポートへそれぞれ出力する第２選択手段を有し、
前記第１、第２のメモリバンクのそれぞれは、データとそのメインメモリ上のアドレスとを対にして記憶する手段と、前記第１選択手段により選択されて入力したアドレスに対応するアドレスが当該メモリバンク内に存在するか否かを判断する判断手段と、前記アドレスが存在するとき当該アドレスに対応するデータをアクセスして前記第２選択手段を介して出力する手段を有し
前記第１選択手段は、第１サイクルで前記第１のメモリポートから入力される前記第１のアドレスを前記第１のメモリバンクへ入力し、前記第２のメモリポートから入力される前記第２のアドレスを前記第２のメモリバンクへ入力し
前記第１のメモリバンク内の判断手段が前記第１のアドレスと対となるデータが存在しないと判断したとき、前記第１サイクルより後のサイクルで前記第２のメモリバンクへ前記第１のアドレスを入力し、
前記第２のメモリバンク内の判断手段が前記第２のアドレスと対となるデータが存在しないと判断したとき、前記第１サイクルより後のサイクルで前記第１のメモリバンクへ前記第２のアドレスを入力することを特徴とするデータ処理装置。
【発明の詳細な説明】
技術分野
本発明は、計算機やデータ処理装置のデータアクセスを高速化するキャッシュメモリに関するものである。特に、メモリアクセス処理を１サイクルに複数個、実行可能なスーパスカラプロセッサもしくは長語長プロセッサ（以下、VLIWプロセッサと記す）などに公的なキャッシュメモリを提供する。
背景技術
計算機やデータ処理装置において、スーパスカラプロセッサやVLIWプロセッサ等を用いる場合、１サイクルに複数個のメモリアクセス処理が発生する。このメモリアクセス処理を１サイクルに複数個、実行するためには、メモリのポートがアクセス処理の数だけ必要である。１サイクルに複数個のメモリアクセス処理を可能とするものとして、２ポートのメモリの従来例が、参考文献（「POWER  and  PowerPC」、1994年、Morgan  Kaufmann出版社発行）の第168頁から170頁に記載されている。
第１の方式は、メモリ自身として、２ポートからアクセスが可能なメモリセルを用いる方法である。１ビットの情報を記憶する１つのメモリセルに対して、２系統のアドレスデコーダ及び２系統のワード線、２系統のデータビット線、２系統のセンスアンプなどを設けることにより、２ポートからアクセスが可能なメモリを実現することが出来る。この第１の方式は、ワード線やデータビット線が２系統必要なことから、同じメモリ容量を実現しようとすると、メモリセルの面積はシングルポートの場合と比べてほぼ２倍必要となる。
第２の方式は、従来のシングルポートメモリを２重化して設けることによって、２ポートのアクセスが可能なメモリを実現する方式である。上記第１の方法の２ポートメモリと比較して、メモリセルも２重化される点が異なる。したがって、メモリにデータを書き込む場合には、両方のメモリの同じアドレスに同じデータを書き込む必要がある。この上記第２の方式は、メモリセルが２重化されているので、メモリ容量の２倍のメモリセルが必要である。逆に言えば、実際のメモリセルの数の1/2しか独立なデータを保持できない。即ち、同じメモリ容量を実現しようとすると、メモリセル用として面積が従来の２倍必要である。
従って、第１の方式と第２の方式を比較すると、メモリセルの面積にはほとんど差がない。また、２つのポートから同一アドレスをアクセスする際には、メモリセルが共通な第１の方式では、片方のアクセスが待たされるのでアクセス時間が必然的に２倍となる。
第３の方式は、メモリをアドレスによって２つのメモリバンクに分割し、異なるメモリバンクに対するアクセスであれば、それら複数のメモリアクセスを同時に処理する方式である。あるアドレスのデータはどちらか一方のメモリバンクにしか存在しないので、上記第２の方式の２ポートメモリと比較して、アドレス入力部及びデータ出力部にそれぞれのメモリポートとメモリバンクの対応を変換するセレクタが必要である。なお、このセレクタの選択指示は、アクセスするアドレスの下位１ビットにより行われる。
上記第３の方式は、メモリセルを２重化していないので、メモリセルの容量が、そのままメモリの容量とすることができ、第２の方式に比べ、同一のメモリセルの数で２倍のメモリ容量を実現することができる。しかし、第３の方式では、アドレスの１ビットでどちらのメモリバンクをアクセスするかを決めるので、メモリのトータルアクセス時間としては、メモリセルのアクセス時間の他に、セレクタでの選択時間が必要となる。従って、第２の方式に比べ、メモリのトータルアクセス時間が長くなる恐れがある。
第４の方式は、１つのシングルポートメモリを時分割で使う方法である。１サイクルを２つに分け、前半の1/2サイクルで第１メモリポートのアクセスを処理し、後半の1/2サイクルで第２メモリポートのアクセスを処理することにより、２ポートのメモリを実現できる。
上記第４の方式は、メモリセルなどが２重化されていないので、上記第３の方式と同様に、メモリセルの容量を、そのままメモリの容量とすることができる。しかし、メモリセルのアクセス時間を1/2に高速化しなければ、１サイクルで２個のメモリアクセス処理を実行することはできない。逆に、メモリセルのアクセス時間を基準にすれば（アクセス時間をそのままにすれば）、全体のサイクル時間を２倍に延ばさなければ、１サイクルで２個のメモリアクセス処理を実行することはできない。
上記述べたように、従来のマルチポートメモリでは、メモリセル面積を変えない場合はメモリの容量がメモリセルの容量の1/2に削減されてしまう、もしくは、メモリのアクセス時間が延びる、あるいは、メモリセルのアクセス時間を基準に考えると全体のサイクル時間が２倍に延びてしまうなどの課題があった。
本発明の目的は、上記マルチポートメモリの課題を解決し、メモリ容量がシングルポートメモリのときのメモリセルの容量と同一で、実質的にメモリのアクセス時間を延ばさず、バンクアクセス衝突も発生させず、また、全体のサイクル時間も延ばさずに、複数のメモリアクセス処理を同時に実行できるマルチポートメモリを提供することにある。
発明の開示
本発明は、複数のメモリバンクに分割したメモリにおいて、前記メモリバンクのそれぞれは、データとそのアドレスを対にして記憶する手段と、当該メモリ外から入力されるアドレスに対応するアドレスが当該メモリバンク内に存在するか否かを判断する判断手段と、前記対応するアドレスが存在するとき、当該アドレスと対になるデータをアクセスし当該メモリバンクの外へ出力する手段を有し、前記メモリは、前記複数のメモリポートから入力される複数のアドレスそれぞれを、前記複数のメモリバンクのいずれのメモリバンクへ入力するかを選択し入力する第１手段と、前記各メモリバンクから読み出されたデータを、当該メモリバンクへ入力されたアドレスが入力された前記メモリポートに対応するデータ出力用のポートへ出力する手段を有するマルチポートメモリによって達成される。
また、上記のマルチポートメモリにおいて、前記第１の手段は、第１サイクルで、前記複数のメモリポートの内の一つである第１のメモリポートから入力される第１のアドレスを前記複数のメモリバンクの内の一つである第１のメモリバンクへ入力し、前記複数のメモリポートの内の一つである第２のメモリポートから入力される第２のアドレスを前記複数のメモリバンクの内の一つである第２のメモリバンクへ入力し、前記第１のメモリバンク内の前記判断手段が前記第１のアドレスと対になるデータが存在しないと判断したとき、前記第１サイクルより後のサイクルで前記第２のメモリバンクへ前記第１のアドレスを入力し、前記第２のメモリバンク内の前記判断手段が前記第２のアドレスと対になるデータが存在しないと判断したとき、前記第１サイクルより後のサイクルで前記第１のメモリバンクへ前記第２のアドレスを入力することによって達成される。
更に、前述のマルチポートメモリにおいて、前記第１の手段は、第１のサイクルで、前記複数のメモリポートの内の一つである第１のメモリポートから入力される第１のアドレスを前記複数のメモリバンクの内の全てのメモリバンクへ入力することによって達成される。
次に、上述のメモリポートメモリをデータメモリとして接続して用いられるデータ処理装置であって、前記データ処理装置の制御をプログラムする命令の内、前記データメモリをアクセスする命令の中に設けられている所定のビット数の情報をデコードする手段と、デコード結果に従って当該命令を実行する手段とを有し、ここで、前記情報は前記複数のメモリポートの内のいずれのメモリポートをアクセスするかを指定する情報であることによって達成される。
上記のマルチポートメモリは、以下の様に動作する。
第１のメモリポートからのアドレスは、第１のサイクルで第１のメモリバンクに入力され、アクセスするデータが第１のメモリバンクの内部に記憶されているかが検索される。もし存在していれば、対応するデータをアクセスして、第１のメモリポート側の処理を終了する。もし、存在していなければ、第２のサイクルにおいて、第２のメモリバンクに当該アドレスが入力され、アクセスするデータが第２のメモリバンクの内部に記憶されているかが検索される。もし存在していれば、対応するデータをアクセスして、第１のメモリポートの処理を終了する。
一方、第２のメモリポートは、第１のサイクルで第１のメモリバンク以外のメモリバンクにアドレスを入力し、アクセスするデータがそのメモリバンクの内部に記憶されているかを検索する。もし存在していれば、対応するデータをアクセスして、第２のメモリポートの処理を終了する。もし、存在していなければ、第２のサイクルにおいて、第２のメモリバンク以外のメモリバンクにアドレスを入力し、アクセスするデータがそのメモリバンクの内部に記憶されているかを検索する。もし存在していれば、対応するデータをアクセスして、第２のメモリポートの処理を終了する。
なお、上記の動作において、第１サイクルにおいては、第一のメモリポートは第一のメモリバンクをアクセスし、第２のメモリポートは第一のメモリバンク以外のメモリバンクをアクセスするので、アクセスが衝突することはなく、どちらの動作も同時に、即ち並列に処理することが出来る。また、第２サイクルにおいては、第１のメモリポートは第２のメモリバンクをアクセスし、第２のメモリポートは第２のメモリバンク以外のメモリバンクをアクセスするので、この場合もアクセスが衝突することはなく、どちらの動作も並列に処理することが出来る。
また、メモリアクセスが１つしかない場合は、第１サイクルで全てのメモリバンクをアクセスすることにより、１サイクルでメモリアクセスを終了することが出来る。つまり、第１のサイクルで全てのメモリバンクに、第１のメモリポートのアドレスを入力し、アクセスするデータがどこかのメモリバンクの内部に記憶されているかを検索する。どこかのメモリバンクに存在していれば、対応するデータをアクセスして、第１のメモリポートの処理を終了する。
さらにまた、上記のマルチポートメモリをデータメモリとして接続しているデータ処理装置において、上記データメモリをアクセスする命令中のビット情報を適切に指定することによって、アクセスすべきデータが記憶されているメモリバンクに第１のサイクルでアクセスすることができ、１サイクルで複数のメモリアクセスを終了することができる。
【図面の簡単な説明】
図１は、本発明の一実施例であるキャッシュメモリ及びその周辺ブロックを示すブロック図である。図２は、図１に示したキャッシュメモリにおいて、２つのメモリアクセスを同時に処理する動作の内、第１サイクル目の動作を示した図である。図３は、図１に示したキャッシュメモリにおいて、２つのメモリアクセスを同時に処理する動作の内、第２サイクル目の動作を示した図である。図４は、図１に示したキャッシュメモリにおいて、１つのメモリアクセスを処理する動作を示した図である。図５は、図１に示したキャッシュメモリが接続されているデータ処理装置の全体を示すブロック図である。図６は、本発明の他の一実施例であるキャッシュメモリ及びその周辺ブロックを示すブロック図である。
発明を実施するための最良の形態
以下、本発明を、実施例をもとに、図を用いて説明する．
図５は本発明の一実施例であるデータ処理装置のブロック構成図である。本実施例のデータ処理装置は、命令を実行するプロセッサ410、命令用のキャッシュメモリである命令キャッシュ420、データ用のキャッシュメモリであるデータキャッシュ430、及び、メインメモリ440から成る。これらは、アドレスバス、データバス等を介して互いに接続されている。命令キャッシュ420はメインメモリ440中のプログラム領域のコピーを保持し、データキャッシュ430はメインメモリ440中のデータ領域のコピーを保持している。
プロセッサ410は、データを格納するレジスタファイル106、命令に従って演算を実行する演算器412、及び、それらを制御する制御回路413なら成る。プロセッサ410は、命令キャッシュ420からプログラムの１つの処理単位である命令を読み出し、その命令の指示に従って制御回路413がプロセッサ内部の回路（レジスタファイル、演算器等）を動作させる。
命令の種類には、レジスタファイル106の中のデータを演算器412などで演算し、その結果をレジスタファイル106に格納する命令のほか、レジスタファイル106の内容をメインメモリ440及びデータキャッシュ430へ書き込む命令、及び、メインメモリ440またはデータキャッシュ430の内容をレジスタファイル106へ書き込む命令がある。
ここで、データキャッシュ430は、２つのメモリポートを持つキャッシュメモリである。アクセスすべきデータが、データキャッシュ430の中に存在していれば、２つのデータアクセスを同時に処理することができる。データキャッシュ430からアクセス結果として読み出されたデータは、データキャッシュとプロセッサを結ぶデータを送る信号線（バス等）を介してプロセッサへ送られる。このデータキャッシュ430の部分の構成を図１に詳細に示す。
図１は、プロセッサ410を構成する命令レジスタ100及び110、レジスタファイル106、アドレス計算器107及び117と、データキャッシュ430（破線で囲まれた部分）の内部ブロックを示す。
命令レジスタ100及び110は、メモリアクセスを行う命令がセットされる。命令レジスタ100及び110にセットされた命令は、それぞれ５つの部分に分割される。５つの部分とは、オペレーションの種類を規定するオペレーションコード部101及び111、及び、データキャッシュへのアクセスポートを指定するために使用する情報であるポート指定ヒント部102及び112、デスティネーションレジスタ指定部103及び113、ベースアドレスレジスタ指定部104及び114、ディスプレースメント指定部105及び115である。この構成を有することにより、プロセッサ410は２つの命令を同時に実行することができる。
今、図１の命令レジスタ100に、メモリのデータをレジスタへ転送する命令であるロード（LD）命令がセットされているものとする。LD命令であることは、オペレーションコード部101を図に示さないデコーダ等により解読することにより判断できる。このLD命令は、レジスタファイル106の中からベースアドレスレジスタ指定部104で指定されたレジスタRb0の内容を読み出し、その値とディスプレースメント指定部105の内容であるディスプレースメントdisp0を加算し、その加算結果をアドレスとしてメモリの内容を読み出し、その読み出した内容をデスティネーションレジスタ指定部103で指定されたレジスタファイル106の中のレジスタRd0に格納する命令である。
また、図１の命令レジスタ110にも同様に、メモリのデータをレジスタへ転送する命令であるロード（LD）命令がセットされている。LD命令であることは、オペレーションコード部111を図に示さないデコーダ等により解読することにより判断できる。この命令も、レジスタファイル106の中からベースアドレスレジスタ指定部114で指定されたレジスタRb1の内容を読み出し、その値とディスプレースメント指定部115の内容であるディスプレースメントdisp1を加算し、その加算結果をアドレスとしてメモリの内容を読み出し、その読み出し内容をデスティネーションレジスタ指定部113で指定されたレジスタファイル106の中のレジスタRd1に格納する命令である。
命令レジスタ100の命令は、データキャッシュ430のメモリポート０をアクセスし、命令レジスタ110の命令は、データキャッシュ430のメモリポート１をアクセスする。従って、プロセッサ410が２つのLD命令を同時に実行するとデータキャッシュへの２つのアクセスが同時に、プロセッサ410とデータキャッシュ430を結ぶ信号線を介して発行されることになる。この信号線は２つの命令による２つのアクセスを同時に送信することができるものとする。
データキャッシュ430は、２つのメモリバンク125及び135、４つのセレクタ108、118、146及び156、更に、これらを制御する制御回路160から成る。セレクタ108は、メモリバンク０（125）への入力アドレスをメモリポート０（メモリバンク０用のポートでメモリバンク０に対するアドレス入力ポートおよびメモリ内容の出力ポート等を総称するものとする）から入力するかメモリポート１（メモリバンク１用のポートでメモリバンク１に対するアドレス入力ポートおよびメモリ内容の出力ポート等を総称するものとする）から入力するかを選択する。セレクタ118は、メモリバンク１（135）への入力アドレスをメモリポート０から入力するかメモリポート１から入力するかを選択する。セレクタ146は、メモリポート０へ出力する読み出しデータをメモリバンク０（125）から出力するのかメモリバンク１（135）から出力するのかを選択する。セレクタ156は、メモリポート１へ出力する読み出しデータをメモリバンク０（125）から出力するのかメモリバンク１（135）から出力するのかを選択する。
メモリバンク０（125）は、２ウエイのセットアソシアティブ方式のキャッシュメモリである。アドレスデコーダ120によって、セレクタ108で選択されたアドレスの下位ビットをデコードし、メモリアレイ121及び122、123、124を読み出す。メモリアレイ121及び122にはそれぞれウェイ０のタグ及びウェイ１のタグ、123にはウェイ０のデータ、124にはウェイ１のデータが記憶されている。メモリアレイ121及び122から読み出されたウェイ０のタグ及びウェイ１のタグは、それぞれ比較器141および142によって、セレクタ108で選択されたアドレスの上位ビットと比較される。比較の結果、一致するアドレスが存在する場合は、この状態をヒットと呼び、一致している方のウェイに対応するデータが、メモリアレイ123及び124から読み出されたウェイ０のデータ及びウェイ１のデータの中から、セレクタ143により選択されて、メモリバンク０（125）の出力データとして出力される。一致するアドレスが存在しない場合は、この状態をミスと呼ぶ。
メモリバンク１（135）も、上記メモリバンク125と同様に、２ウエイのセットアソシアティブ方式のキャッシュメモリである。アドレスデコーダ130によって、セレクタ118で選択されたアドレスの下位ビットをデコードし、メモリアレイ131及び132、133、134を読み出す。メモリアレイ131及び132にはそれぞれウェイ０のタグ及びウェイ１のタグ、133にはウェイ０のデータ、134にはウェイ１のデータが記憶されている。メモリアレイ131及び132から読み出されたウェイ０のタグ及びウェイ１のタグは、それぞれ比較器151および152によって、セレクタ118で選択されたアドレスの上位ビットと比較される。比較の結果、一致するアドレスが存在する場合は、この状態をヒットと呼び、一致している方のウェイに対応するデータが、メモリアレイ133及び134から読み出されたウェイ０のデータ及びウェイ１のデータの中から、セレクタ153により選択されて、メモリバンク１（135）の出力データとして出力される。一致するアドレスが存在しない場合は、この状態をミスと呼ぶ。
それぞれのメモリバンクから出力されたデータは、その読み出しの入力アドレスがメモリポート０からのものである場合はメモリポート０に読み出しデータを出力するように、一方、その読み出しの入力アドレスがメモリポート１からのものである場合はメモリポート１に読み出しデータを出力するように、セレクタ146、156が選択される。そして、セレクタ146から出力された読み出しデータは、命令レジスタ100のデスティネーションレジスタ指定部Rd0（103）によって指定されるレジスタファイル内のレジスタに格納される。また、セレクタ156から出力された読み出しデータは、命令レジスタ110のデスティネーションレジスタ指定部Rd1（113）によって指定されるレジスタファイル内のレジスタに格納される。
なお、上記実施例では、メモリバンク０（125）の出力データを生成するセレクタ143及びメモリバンク１（135）の出力データを生成するセレクタ153と、メモリポート０へ出力するデータを生成するセレクタ146及びメモリポート１へ出力するデータを生成するセレクタ156を、それぞれ別のセレクタとして構成したが、４入力１出力のセレクタを２個用いて、上記４つのセレクタ143、153、146、156と同一の機能を実現するセレクタを構成することもできる。つまり、メモリアレイ123、124、133、134から読み出されたデータを４系統の入力として、その内１系統を出力する４入力１出力のセレクタを２個設け、その一方のセレクタの出力をメモリポート０への出力とし、もう一方のセレクタの出力をメモリポート１への出力とすれば良い。ここで、それぞれの４入力セレクタの選択指示は、独立に行う必要がある。
上記のデータキャッシュ430内の動作は、制御回路160が制御している。ここで、制御回路160がデータキャッシュ内の各構成要素の状態を収集するための信号線等や各構成要素を制御するための信号線は図から省略している。なお、図１に於いて、命令レジスタ100のデスティネーションレジスタ指定部Rd0（103）からレジスタファイル106を指定する図面上の矢印線は、データキャッシュ430内を通過するようになっているが、これは単に図面上の線であり、実際は必ずしもデータキャッシュ430を通過する必要はない。命令レジスタ110のデスティネーションレジスタ指定部Rd1（113）からレジスタファイル106を指定する図面上の矢印線に関しても前述の内容と同様である。
次に、上記データキャッシュ430の動作を図２及び図３、図４を用いて説明する。
図２および図３は、図１で説明した２つのLD命令を同時に処理する動作を説明する図である。図２は第１サイクルでの動作を示したものであり、図３は第２サイクルでの動作を示したものである。なお、ここでのサイクルとは、本データキャッシュ430を動作させるタイミングであり、プロセッサ410を動作させるクロックや図５に示すデータ処理装置全体を駆動させるシステムクロックと一定の関係を有する。例えば、システムクロックの１クロックが１サイクルと対応したり、またはシステムクロックの複数クロックが１サイクルと対応したりする。
第１サイクルでは、図２に示してある様に、メモリバンク０の入力アドレスセレクタ108は、メモリポート０側、つまり命令レジスタ100にセットされているLD命令のアクセスアドレスを選択する。このアドレスによって、２ウエイのセットアソシアティブ方式のキャッシュメモリであるメモリバンク０（125）を検索する。アドレスがヒットしていたら、対応するデータをセレクタ143から出力し、セレクタ146により、このメモリバンク０（125）のデータを、データキャッシュ430のメモリポート０側の読み出しデータとして出力して、このメモリポート０側のアクセスを終了する。アドレスがミスしていたら、第１サイクルの動作はここまでとし、第２サイクルでメモリバンク１（135）をアクセスするよう制御回路160が判断する。
一方、メモリバンク１の入力アドレスセレクタ118は、図２に示してある様に、メモリポート１側、つまり命令レジスタ110にセットされているLD命令のアクセスアドレスを選択する。このアドレスによって、２ウエイのセットアソシアティブ方式のキャッシュメモリであるメモリバンク１（135）を検索する。アドレスがヒットしていたら、対応するデータをセレクタ153から出力し、セレクタ156により、このメモリバンク１（135）のデータを、データキャッシュ430のメモリポート１側の読み出しデータとして出力して、このメモリポート１側のアクセスを終了する。アドレスがミスしていたら、第１サイクルの動作はここまでとし、第２サイクルでメモリバンク０（125）をアクセスするよう制御回路160が判断する。
図３は、メモリポート０のアクセス及びメモリポート１のアクセスの両方が、第１サイクルにおいて、それぞれメモリバンク０（125）及びメモリバンク１（135）でミスした場合の第２サイクル目の動作を示したものである。この第２サイクルは、時間的に第１サイクルの後のサイクルである。
この第２サイクルでは、メモリバンク０の入力アドレスセレクタ108は、メモリポート１側、つまり命令レジスタ110にセットされているLD命令のアクセスアドレスを選択する。このアドレスによって、２ウエイのセットアソシアティブ方式のキャッシュメモリであるメモリバンク０（125）を検索する。アドレスがヒットしていたら、対応するデータをセレクタ143から出力し、セレクタ156により、このメモリバンク０（125）のデータを、データキャッシュ430のメモリポート１側の読み出しデータとして出力して、このメモリポート１側のアクセスを終了する。アドレスがミスしていたら、第２サイクルの動作はここまでとし、第３サイクルでメインメモリ440をアクセスするよう制御回路160が判断する。
同様に、メモリバンク１の入力アドレスセレクタ118は、メモリポート０側、つまり命令レジスタ100にセットされているLD命令のアクセスアドレスを選択する。このアドレスによって、２ウエイのセットアソシアティブ方式のキャッシュメモリであるメモリバンク１（135）を検索する。アドレスがヒットしていたら、対応するデータをセレクタ153から出力し、セレクタ146により、このメモリバンク１（135）のデータを、データキャッシュ430のメモリポート０側の読み出しデータとして出力して、このメモリポート０側のアクセスを終了する。アクセスがミスしていたら、第２サイクルの動作はここまでとし、第３サイクルでメインメモリ440をアクセスするよう制御回路160が判断する。
以上のように、本実施例では、各メモリアクセスは、２ウエイのセットアソシアティブ方式のキャッシュメモリであるメモリバンク０（125）及びメモリバンク１（135）の両方を検索して、ヒット判定を行っている。つまり、データキャッシュ430は、キャッシュ容量が各メモリバンクの容量の和で、かつ４ウエイのセットアソシアティブ方式のキャッシュメモリとして動作していることになる。
２つのメモリアクセス命令を同時に実行する場合は、上記で説明したように、２サイクルで４ウエイのセットアソシアティブ方式のキャッシュメモリとして動作する。ここで、メモリポート０側のアクセスがメモリバンク０（125）でヒットし、メモリポート１側のアクセスがメモリバンク１（135）でヒットすれば、１サイクルで２つのメモリアクセス命令を同時に実行することができる。
したがって、２つのメモリアクセス命令を１サイクルで同時に実行し、終了するためには、メモリバンク０（125）でヒットする可能性が高いLD命令は、メモリポート０側でデータキャッシュ430をアクセスし、メモリバンク１（135）でヒットする可能性が高いLD命令は、メモリポート１側でデータキャッシュ430をアクセスすれば良い。このような制御は、LD命令中のメモリポート指定ヒント部102及び112の情報で可能である。
プロセッサ410の制御回路413において、メインメモリ440または命令キャッシュ420から読み出したメモリアクセス命令、例えばLD命令の中のメモリポート指定ヒント部を解読し、メモリポート０を指定していれば、その命令を命令レジスタ100にセットし、メモリポート１を指定していれば、その命令を命令レジスタ110にセットする。命令レジスタ100にセットされたメモリアクセス命令は、第１のサイクルにおいてメモリバンク０（125）をアクセスし、命令レジスタ110にセットされたメモリアクセス命令は、第１のサイクルにおいてメモリバンク１（135）をアクセスするので、それぞれのメモリバンク125及び135でヒットする可能性が高くなり、これら２つのメモリアクセス命令を１サイクルで終了できる確率が高くなる。
なお、LD命令のメモリポート指定ヒント部102及び112への情報の設定は、上記説明したデータキャッシュを持つプロセッサからなるデータ処理装置用のコンパイラが、プログラムをコンパイルする際に、上記データキャッシュの構造、プログラムのメインメモリへのアクセス順序、データキャッシュの利用予定を踏まえてコンパイルすることにより、LD命令のメモリポート指定ヒント部102及び112へ、演算実行前に事前に設定されているものとする。この設定により、プロセッサでの実行時にメモリポート０側の命令とメモリポート１側の命令のメモリアクセスが同じメモリバンクを同時にアクセスする確率を少なくできる。
以上で説明したように、前述の実施例においては、２つのメモリアクセス命令が同時に実行される場合、２サイクルで４ウエイのセットアソシアティブ方式のキャッシュメモリとして動作する。一方、メモリアクセス命令が１つだけ実行される場合は、キャッシュメモリを１サイクルで４ウエイのセットアソシアティブ方式のキャッシュメモリとして動作することもできる。図４は、この動作を示す。
図４は、命令レジスタ100にセットされたLD命令を実行する場合の図である。メモリバンク０の入力アドレスセレクタ108及びメモリバンク１の入力アドレスセレクタ118は、共にメモリポート０側、つまり命令レジスタ110にセットされているLD命令のアクセスアドレスを選択する。このアドレスによって、２ウエイのセットアソシアティブ方式のキャッシュメモリであるメモリバンク０（125）及びメモリバンク１（135）を同時に検索する。どちらかのメモリバンクでアドレスがヒットしていたら、対応するデータをセレクタ143もしくはセレクタ153から出力し、セレクタ146により、このデータをデータキャッシュ430のメモリポート０側の読み出しデータとして出力して、このメモリポート０側のアクセスを終了する。アドレスが両方のメモリバンクで共にミスしていたら、第１サイクルの動作はここまでとし、第２サイクルでメインメモリ440をアクセスするよう制御回路160が判断する。
以上の様に、メモリアクセス命令が１つだけの場合は、１サイクルで４ウエイのセットアソシアティブ方式のキャッシュメモリとして動作することができる。
以上の説明では、メモリアクセスがメモリバンク０（125）又はメモリバンク１（135）のどちらかでヒットした場合を中心に説明してきた。以下では、メモリアクセスがメモリバンク０（125）及びメモリバンク１（135）のどちらでもミスした場合の動作について説明する。
図３の動作の結果、メモリポート０側、つまり命令レジスタ100にセットされているLD命令のアクセスアドレスが、メモリバンク０（125）及びメモリバンク１（135）の両方ともミスであった場合は、第３サイクル目にメインメモリ440をアクセスする。メインメモリ440から読み出されたデータは、プロセッサ410へ転送され、レジスタファイル106に格納される。このときデータキャッシュ430は、近い将来に再度このデータがアクセスされる可能性があるので、データキャッシュ430の中にも記憶しておく。データキャッシュ430中のメモリバンクの内、どちらに記憶するかは、もともとどちらのメモリポートでアクセスされたかによって制御する。この場合は、メモリポート０側、つまり命令レジスタ100にセットされている命令でアクセスされたので、メモリバンク０（125）に記憶する。メモリバンク０（125）内のどのウエイに記憶するかは、例えば、最も古い時刻にアクセスされたウエイを選んで記憶する。この方式をLRU方式という。
同様に、図３の動作の結果、メモリポート１側、つまり命令レジスタ110にセットされているLD命令のアクセスアドレスが、メモリバンク０（125）及びメモリバンク１（135）の両方ともミスであった場合は、第３サイクル目以降にメインメモリ440をアクセスする。第３サイクル目に直ちにメインメモリ440をアクセスするか、それ以降のサイクルでメインメモリ440をアクセスするかは、メモリポート０側のミスの状態による。つまり、メモリポート０側もミスで、メインメモリ440をアクセスする場合は、第３サイクル目でメモリポート０側の処理を行い、メモリポート１側の処理はその後になる。
メインメモリ440から読み出されたデータは、メモリポート０側からのアクセスの場合と同様に、プロセッサ410へ転送され、レジスタファイル106に格納される。このときデータキャッシュ430は、近い将来に再度このデータがアクセスされる可能性があるので、データキャッシュ430の中にも記憶しておく。データキャッシュ430中のメモリバンクの内、どちらに記憶するかは、もともとどちらのメモリポートでアクセスされたかによって制御する。この場合は、メモリポート１側、つまり命令レジスタ110にセットされている命令でアクセスされたので、メモリバンク１（135）に記憶する。メモリバンク１（135）内のどのウエイに記憶するかは、例えば、LRU方式でウエイを選んで記憶する。
メモリアクセスが１サイクルに１つだけの場合は、図４に示したように、両方のメモリバンク125及び135を同時に検索して、ヒット／ミス判定を行う。両方のメモリバンク125及び135が共にミスの場合は、第２サイクルでメインメモリ440にアクセスする。メインメモリ440から読み出されたデータは、プロセッサ410へ転送され、レジスタファイル106に格納される。このときデータキャッシュ430は、近い将来に再度このデータがアクセスされる可能性があるので、データキャッシュ430の中にも記憶しておく。データキャッシュ430中のメモリバンクの内、どちらに記憶するかは、もともとどちらのメモリポートでアクセスされたかによって制御することができる。図４の場合は、メモリポート０側、つまり命令レジスタ100にセットされている命令でアクセスされたので、メモリバンク０（125）に記憶する。メモリバンク０（125）内のどのウエイに記憶するかは、例えば、LRU方式でウエイを選んで記憶する。
また、別の制御方式として、メモリバンク０（125）内の２つのウエイとメモリバンク１（135）内の２つのウエイを対等に扱い、全体として４ウエイのセットアソシアティブ方式とみなし、４つのウエイの中から１つのウエイを選んで記憶することもできる。この場合は、上記４つのウエイの中から最も古い時刻にアクセスされたウエイを選んで記憶するLRU方式を採用することもできる。
これまで説明してきた図１の構成では、両方のメモリバンク125及び135のどちらもミスする場合、これを検出するために２サイクルを要する。若干のハードウエアを追加することにより、両方のメモリバンク125及び135のどちもミスする場合を、１サイクルで検出することができる。図６に、そのブロック図を示す。
図６において、メモリバンク０（125）は、メモリバンク１（135）のアドレス・タグ・メモリアレイ131および132のコピーを126および127に持ち、アドレス・タグ・メモリアレイ126および127から読み出したタグを、セレクタ108で選択されたアドレスの上位ビットと比較する比較器144及び145が、図１の構成に対して追加されている。これにより、メモリバンク０（125）内のアドレス検索を行っているサイクルと並行して、メモリバンク１（135）のアドレス検索を実行できるので、もし、両方のメモリバンクともミスした場合は、１サイクルで検出することができる。したがって、第２サイクルでは、メモリバンク１（135）をアクセスすること無く、メインメモリ440のアクセスを起動することができ、データキャッシュ430のミス時の処理を高速化することができる。
メモリバンク１（135）側も同様に、メモリバンク０（125）のアドレス・タグ・メモリアレイ121および122のコピーを136および137に持ち、アドレス・タグ・メモリアレイ136および137から読み出したタグを、セレクタ118で選択されたアドレスの上位ビットと比較する比較器154及び155が図１の構成に対して追加されている。これにより、メモリバンク１（135）内のアドレス検索を行っているサイクルと並行して、メモリバンク０（125）のアドレス検索を実行できるので、もし、両方のメモリバンクともミスした場合は、１サイクルで検出することができる。したがって、第２サイクル以降では、メモリバンク０（125）をアクセスすること無く、メインメモリ440のアクセスを起動することができ、データキャッシュ430のミス時の処理を高速化することができる。
以上説明したように本実施例によれば、第１サイクルで両方のメモリバンク125及び135のミス判定ができるので、データキャッシュ430のミス時の処理を高速化することができる効果がある。
なお、上記の実施例では、メモリバンクに数が２で、メモリポートの和が２の場合について説明してきたが。本発明は、これらの数に限定されたものではない。
メモリバンクの数が３以上で、メモリポートの数が３以上の場合も、本発明の範囲である。
例えば、メモリバンクの数が４で、メモリポートの数が４の場合も、本発明の範囲である。この場合、第１のサイクルでは、それぞれ第１のメモリアクセスポートが第１のメモリバンクを、第２のメモリアクセスポートが第２のメモリバンクを、第３のメモリアクセスポートが第３のメモリバンクを、第４のメモリアクセスポートが第４のメモリバンクをアクセスし、第２のサイクル以降では、それぞれそれ以外のメモリバンクをアクセスする。例えば、第２のサイクルでは、それぞれ第１のメモリアクセスポートが第２のメモリバンクを、第２のメモリアクセスポートが第３のメモリバンクを、第３のメモリアクセスポートが第４のメモリバンクを、第４のメモリアクセスポートが第１のメモリバンクをアクセスし、第３のサイクルでは、それぞれ第１のメモリアクセスポートが第３のメモリバンクを、第２のメモリアクセスポートが第４のメモリバンクを、第３のメモリアクセスポートが第１のメモリバンクを、第４のメモリアクセスポートが第２のメモリバンクをアクセスし、第４のサイクルでは、それぞれ第１のメモリアクセスポートが第４のメモリバンクを、第２のメモリアクセスポートが第１のメモリバンクを、第３のメモリアクセスポートが第２のメモリバンクを、第４のメモリアクセスポートが第３のメモリバンクをアクセスする。
また、メモリバンクの数が４で、メモリポートの数が２の場合も、本発明の範囲である。この場合、第１のサイクルでは、それぞれ第１のメモリアクセスポートが第１のメモリバンクおよび第２のメモリバンクを、第２のメモリアクセスポートが第３のメモリバンクおよび第４のメモリバンクをアクセスし、第２のサイクル以降では、それぞれ、それ以外のメモリバンクをアクセスする。例えば、第２のサイクルでは、それぞれ第１のメモリアクセスポートが第３のメモリバンクおよび第４のメモリバンクを、第２のメモリアクセスポートが第１のメモリバンクおよび第２のメモリバンクをアクセスする。
以上説明したように、メモリバンクの数が２以上で、またメモリポートの数が２以上の場合であれば、本発明の範囲である。
以上説明したごとく、本発明によれば以下の効果がある．
先ず、メモリを複数のメモリバンクに分け、並列に動作が可能であるから、複数のメモリアクセスを同時に処理することが出来るマルチポートメモリとしての機能を実現することが出来る。
さらに、第１サイクルでアクセスしたメモリバンクにアクセスすべきアドレスが記憶されていれば、１サイクルで複数のメモリアクセスを並列に処理することが出来る。
その結果、１サイクルでアクセスしたメモリバンクにアクセスすべきアドレスが記憶されていれば、１サイクルで複数のメモリアクセスを並列に処理することが出来るので、マルチポートメモリとしての機能を実現することが出来る。例えば、メモリバンク数を２とする場合、メモリセルのアクセス時間を1/2に短縮することなく、また逆に、全体のサイクル時間を２倍に延ばすことなく、２ポートメモリとしての機能を実現することができる。
さらにまた、メモリバンクの選択において、アドレスを使わずに行っているので、アドレス入力セレクタでの選択が他の処理と並行してでき、この選択時間がクリティカルパスにならない。そのため、メモリのアクセス時間が延びることなく、マルチポートメモリとしての機能を実現することが出来る。
産業上の利用可能性
以上のように、本発明にかかわるマルチポートメモリはメモリのアクセス時間が延びることなくマルチポートメモリを実現でき、スーパスカラプロセッサやVLIWプロセッサなど１サイクルに複数個のメモリアクセス処理を要求するプロセッサを用いたデータ処理装置のメモリ、特にキャッシュメモリとして用いるのに適している。
【図５】
0003593346.tif 000002
【図１】
0003593346.tif 000003
【図２】
0003593346.tif 000004
【図３】
0003593346.tif 000005
【図４】
0003593346.tif 000006
【図６】
0003593346.tif 000007