(57)【特許請求の範囲】
【請求項１】
プロセッサとメモリの間に配置され、プロセッサからメモリへアクセスする際、先読みを行うプリフェッチ手段と、プリフェッチ結果を格納する記憶手段を備えたメモリ制御装置において、
前記メモリ制御装置は、プロセッサからメモリに対するアクセスの際にプリフェッチを行うか否かを決定するプリフェッチ管理手段を備え、
前記メモリのアドレス空間は複数の管理領域に分割され、
前記プリフェッチ管理手段は、前記各管理領域毎にプリフェッチを制御するためのレジスタを備え、
前記プロセッサから前記メモリに対してアクセスが行われた時、アクセスするアドレスが含まれる管理領域に対応する前記レジスタの値に基づき、当該アクセスにおいてプリフェッチを行うか否かを決定するものであって、
前記プリフェッチ管理手段は、プロセッサからの所定の回数の連続したアクセスが同一のプリフェッチ範囲に対して行われた場合、当該プリフェッチ範囲を含む管理領域に対応する前記レジスタを当該管理領域に対してプリフェッチを行うように設定する手段を備えたことを特徴とするメモリ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理装置に関し、特にメモリからのプリフェッチを行うメモリ制御装置のプリフェッチ制御に関する。
【背景技術】
【０００２】
計算機の分野において、一般的なプログラムでは一度アクセスしたデータを再度利用する傾向が高く、また、一度アクセスされたデータの近傍にあるデータも参照される傾向がある。これらの傾向は、局所参照性と呼ばれている。多くの計算機では、この局所参照性を活用し、メモリアクセスの待ち時間を減らす目的で、キャッシュメモリと呼ばれる高速なメモリをＣＰＵとメモリの間に配置している。このキャッシュメモリには最近アクセスしたメモリの写しを持ち、メモリに対してアクセスする代わりにメモリよりアクセスが高速なキャッシュメモリに対してアクセスすることで、メモリアクセスの待ち時間を減らし、処理性能の向上を図っている。
【０００３】
キャッシュメモリを管理するキャッシュコントローラは、ＣＰＵが処理するデータサイズのｎ倍の単位でキャッシュメモリに記憶されている内容が有効，無効を管理している。このキャッシュメモリを管理する単位をキャッシュラインと呼ぶ。３２ビットアーキテクチャのＣＰＵの場合、このキャッシュラインは４バイトのｎ倍となり、通常１６，３２，６４，１２８バイトといった値となっている。また、キャッシュコントローラが行うメモリからキャッシュメモリへの転送は、管理単位であるキャッシュライン単位で行っている。
【０００４】
一方、メモリには、ＤＲＡＭやシンクロナスＤＲＡＭが使われている。ＤＲＡＭやシンクロナスＤＲＡＭは格子状に記憶素子が構成されており、各記憶素子へは行と列を指定してアクセスを行う。これらのメモリにおいては、同一行内の異なる列に対するアクセス時間は、行を指定してから列を指定するアクセス時間に比べ短い。ＤＲＡＭの場合、この同一行で異なる列の記憶素子を連続してアクセスする方式をページモードアクセスと呼び、シンクロナスＤＲＡＭの場合バーストモードアクセスと呼ぶ。
【０００５】
ＣＰＵが処理を行う上で必要な命令やデータがキャッシュメモリ上に存在しない場合をキャッシュミスと呼ぶ。キャッシュミスが発生すると、キャッシュコントローラは、メモリからキャッシュラインサイズ分のデータを連続的に読み出す。この読み出す動作をキャッシュフィル動作と呼ぶ。メモリコントローラは、ＣＰＵからメモリへのリードアクセスが発生すると、キャッシュミスが生じキャッシュフィル動作が発生したと仮定し、ページモード、又は、バーストモードでメモリからデータを先行して読み出している。読み出したデータは、メモリコントローラ内のバッファに格納する。この動作をプリフェッチと呼ぶ。
【０００６】
このプリフェッチ動作を制御する技術として、日本国特開平１０−５５３０７号公報に記載の技術が挙げられる。日本国特開平１０−５５３０７号公報では、ＣＰＵにおいて、メモリに対する要求が命令に対する要求であるかデータに対する要求であるかを示す制御信号を生成している。この制御信号に従い、メモリからキャッシュメモリにプリフェッチされるデータ量を判断するプリフェッチ論理回路を組み込むことにより、不必要なメモリアクセスを低減し、メモリシステムの効率を向上させている。
【０００７】
また、日本国特開平５−２７１６７３号では、キャッシュメモリに一旦プリフェッチされたデータのリプレースを制御することにより、キャッシュを効率的に使用する技術が開示されている。
【０００８】
【特許文献１】特開平５−２７１６７３号公報
【特許文献２】特開平１０−５５３０７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
日本国特開平１０−５５３０７号公報は、命令に対するメモリアクセス(命令フェッチ)とデータに対するメモリアクセス（データフェッチ）の違いにより、メモリからのプリフェッチされるデータ量を変えることでメモリシステムの効率化を図っている。しかし、日本国特開平１０−５５３０７号公報では、命令に対する要求であるかデータに対する要求であるかを示す制御信号によりプリフェッチを制御しているが、計算機が処理するデータには、配列や行列演算に用いるデータのように連続的にアクセスする可能性が非常に大きく、プリフェッチを行うことが有効なデータと、Ｉ／Ｏや他のＣＰＵとデータを受渡しするためのデータや、処理するデータサイズが小さくプリフェッチを用いると不必要なメモリアクセスが多発するデータなどの、プリフェッチが有効に働かないデータがある。このようにデータと言っても、プリフェッチを行うと性能が向上する場合のデータと、逆にプリフェッチを行うことにより性能が低下する場合があるため、データアクセスであるからという理由だけで、メモリからプリフェッチするデータ量を決めてしまうと、メモリシステムのアクセス効率を向上させることは難しい。
【００１０】
一方、日本国特開平５−２７１６７３号公報では、キャッシュのエントリ単位にプリフェッチの有無並びにリプレースを制御しているが、予めプリフェッチ要のデータに対応したエントリのアドレスを登録しておく必要があり、またプリフェッチの要・不要も細かく指定する必要があり、メモリからプリフェッチされるデータ量を変更することが難しい。
【００１１】
本発明の課題は、データの使われ方に対応してメモリからプリフェッチされるデータ量を変更可能にすることにより、メモリシステムの効率を向上させることである。
【課題を解決するための手段】
【００１２】
メモリのアドレス空間を複数の領域に分割し、更に、分割した領域毎に、メモリコントローラがプリフェッチを行うか否かを決めるモードレジスタをメモリコントローラに設ける。メモリコントローラでは、このモードレジスタに従い、ＣＰＵがアクセスするメモリのアドレスが含まれる領域毎にプリフェッチ機能を動作させ、メモリからデータをアクセスする。
【００１３】
処理を行うプログラムにおいては、プリフェッチを行うことが有効なデータを格納する領域のモードレジスタをプリフェッチ動作モードに設定し、プリフェッチを用いると不必要なアクセスが多発するデータを格納する領域のモードレジスタをプリフェッチ非動作モードに設定する。
【発明の効果】
【００１４】
これにより、連続的にデータを読み出す場合は、プリフェッチ機能を動作させ、先行して連続的にデータを読み出し、単発でアクセスするデータに対しては、プリフェッチを行うことにより生じる不必要なデータ読み出しを生じさせないようにプログラムから制御することが可能になり、メモリアクセス効率が向上する。
【発明を実施するための最良の形態】
【００１５】
本発明の実施の形態を図面を用いて以下に説明する。
【００１６】
図１は、本発明の一実施例で、本発明を適応した計算機やプログラマブル・コントローラに代表される、データ処理装置のメモリ制御に関連する部分の構成を示すブロック図である。ＣＰＵ１は、高速アクセス可能なメモリで構成したキャッシュメモリ２０を備えている。キャッシュメモリ２０には、ＤＲＡＭ７の内容の写しを格納するが、命令とデータの区別はしていないものとする。本実施の形態においては、ＣＰＵ１は３２ビットアーキテクチャであるものとし、アドレスバスＡＤＤＲと４バイト幅のデータバスＤＡＴ，バスの開始を示すバススタート信号ＢＳ＿，アクセス空間を示す信号で通常複数接続した記憶素子を選択するためのチップセレクト信号ＣＳ０＿,ＣＳ１＿,ＣＳ２＿を計３本備え、また、リードデータが無効の間、ＣＰＵ１を停止させる手段として、ウェイト信号ＷＡＩＴ＿の各端子を備えているものとする。なお、信号名の最後の“＿”は、信号がローアクティブであることを示している。
【００１７】
メモリであるＤＲＡＭ７はページモードでアクセス可能なＤＲＡＭであり、行アドレスセレクト信号ＲＡＳ＿と列アドレスセレクト信号ＣＡＳ＿の動作で、アドレスバスＡに出力された行アドレスと列アドレスに対応したリードデータを４バイト幅のデータバスＤに出力する機能を備えている。メモリコントローラ２は、プリフェッチ状態管理部５，メモリシーケンサ４，プリフェッチバッファ６，セレクタ１１で構成されている。
【００１８】
ＣＰＵ１は、処理に必要な命令又はデータがキャッシュメモリ２０に存在しない場合、メモリコントローラ２を介してＤＲＡＭ７からデータを読み出す。この時、バススタート信号ＢＳ＿を１サイクルアサートする。バススタート信号ＢＳ＿のアサートと同時に、処理に必要な命令／データが格納されているアドレスをアドレス信号ＡＤＤＲに出力する。更にこの時、この命令／データが格納されているメモリのアドレス領域を示すチップセレクト信号ＣＳ０＿，ＣＳ１＿，ＣＳ２＿の何れか１信号をアサートするものとする。バススタート信号ＢＳ＿，チップセレクト信号ＣＳ０＿，ＣＳ１＿，ＣＳ２＿は、メモリコントローラ２のプリフェッチ状態管理部５に入力される。プリフェッチ状態管理部５は、チップセレクト信号ＣＳ０＿，ＣＳ１＿，ＣＳ２＿のそれぞれが対応するアドレス領域に対して、ＤＲＡＭ７からデータをプリフェッチするか否かという２つのモードを制御するモードレジスタ８を備えている。即ち、本実施の形態では、プリフェッチを制御する領域の単位は各チップセレクト空間毎ということになる。
【００１９】
プリフェッチ状態管理部５はこのモードレジスタ８の値に従い、メモリシーケンサ４，プリフェッチバッファ６，出力セレクタ１１を制御する。プリフェッチ状態管理部５からは、メモリシーケンサ４への起動信号ＲＥＱ，起動信号ＲＥＱによって要求したメモリアクセスがプリフェッチアクセスであるか否かを示すプリフェッチアクセス信号ＰＲＦが出力される。またＤＲＡＭ７からデータバスＤに有効なデータを出力していることを示すデータバリッド信号ＤＶが入力される。
【００２０】
メモリシーケンサ４は、プリフェッチ状態管理部５からの起動信号ＲＥＱとプリフェッチアクセス信号ＰＲＦに従い、行アドレスセレクト信号ＲＡＳ＿と列アドレスセレクト信号ＣＡＳ＿を制御して、ＤＲＡＭ７からデータを読み出す制御を行う。このメモリシーケンサ４は、行・列アドレス生成部５１を備えている。行・列アドレス生成部５１は、CPU1からのアドレスＡＤＤＲに従い行アドレスと列アドレスを生成し、メモリシーケンサ４が出力する行アドレスセレクト信号ＲＡＳ＿と列アドレスセレクト信号ＣＡＳ＿の制御タイミングと同期してアドレスバスＡに行アドレス・列アドレスを出力する。
【００２１】
プリフェッチ状態管理部５は、プリフェッチバッファ６にデータをセットするプリフェッチバッファデータセット信号ＰＢＳＥＴと、出力セレクタ１１の出力を選択する出力セレクタ選択信号ＯＰＳＥＬにより、プリフェッチバッファ６と出力セレクタ１１を制御している。プリフェッチバッファ６は、１回のプリフェッチで先読みするデータを格納するため、４段のバッファから構成されている。本実施の形態においては、１回のプリフェッチはキャッシュ２０の１エントリに格納されるデータ数であるキャッシュライン分のデータを先読みするものとする。そして１キャッシュラインは、３２ビット（４バイト）データ４個分の１６バイトであるものとする。従って、プリフェッチバッファの各段には、
３２ビットデータ１つが格納されることになる。なおこのキャッシュラインのデータサイズはキャッシュの構成によって変わるものであり、本発明においてプリフェッチするデータサイズが１６バイトに制限されるものではない。
【００２２】
また、プリフェッチ状態管理部５は、プリフェッチバッファデータセット信号PBSET の値に従い、ＤＲＡＭ７がデータバスＤに出力したデータを任意の段のバッファにセットする機能を備えている。具体的には、プリフェッチバッファデータセット信号ＰＢＳＥＴが０のとき、ＤＲＡＭ７が出力するデータを１段目のバッファにセットし、信号ＰＢＳＥＴが１のとき、ＤＲＡＭ７が出力するデータを２段目のバッファにセットし、信号PBSET が２のとき、３段目のバッファにＤＲＡＭ７が出力するデータをセットし、信号ＰＢＳＥＴが３の場合には、ＤＲＡＭ７が出力するデータを４段目のバッファにセットする。また、全てのバッファに格納されているデータは、すべて出力セレクタ１１に出力されている。
【００２３】
出力セレクタ１１は、ＤＲＡＭ７が出力するデータとプリフェッチバッファ６が出力するデータを、出力セレクタ選択信号ＯＰＳＥＬの値に従って選択し、プロセッサデータバスＤＡＴに出力する。具体的には、信号ＯＰＳＥＬが０のとき、プリフェッチバッファ６の１段目をプロセッサデータバスＤＡＴに出力し、信号ＯＰＳＥＬが１の時には２段目のバッファ、信号ＯＰＳＥＬが２の時は３段目のバッファ，信号ＯＰＳＥＬが３のとき、４段目のバッファの値を各々プロセッサデータバスＤＡＴに出力する。
【００２４】
ＣＰＵ１が実行するソフトウェアでは、データが以下の２つに分類されるものとする。１つは、配列や行列演算に用いるデータのように連続的にアクセスする可能性が非常に大きく、プリフェッチを行うことが有効なデータと、もう１つは、Ｉ／Ｏとデータを受渡しするためキャッシュメモリが使用できないデータや、処理するデータのサイズが小さいためプリフェッチを行うと不必要なメモリアクセスが多発するデータである。このような分類は、プログラムを作成する時にプログラム作成者が予め行うものとする。そして、プログラムをコンパイルしリンクする時に、プリフェッチを行うことが有効なデータを格納するＤＲＡＭ７の領域と、プリフェッチを行うと不必要なアクセスが多発するデータを格納するＤＲＡＭ７の領域を異なるチップセレクト空間に配置する。また命令は、プリフェッチを行うことが有効なデータを格納する領域に配置する。
【００２５】
プログラムの初期化ルーチンにおいては、プリフェッチが有効なデータを格納する領域を示すチップセレクタ信号に対応したモードレジスタ８をプリフェッチアクセス可能モードに設定し、プリフェッチが不必要なデータを格納する領域を示すチップセレクタ信号に対応するモードレジスタ８をプリフェッチアクセス禁止モードに設定する。モードレジスタ８の値の設定手段は特に図示されていないが、ハードウェアによって決まるレジスタ空間内の特定のアドレスに対するＣＰＵ１からのアクセスによって行われる。
【００２６】
モードレジスタ８は、チップセレクト空間毎に独立してチップセレクト信号の数だけ独立したレジスタとして、又はレジスタファイルの形で備えてもよいが、本実施の形態においては、チップセレクト空間毎にプリフェッチの可否を識別できればよいので、チップセレクト空間毎に１ビットの状態を記憶できる回路を設けても良いが、以下の説明では、少なくともチップセレクト信号数のビット幅を持った１つのレジスタの１ビット毎にチップセレクト空間を対応させることとして説明を行う。そして、モードレジスタ８の各ビットの値０／１を調べることにより、対応するチップセレクト空間におけるアクセスの際のプリフェッチの可否を判断するものとする。
【００２７】
図２は、プリフェッチ状態管理部５の構成を示したブロック図である。図２を用いてプリフェッチ状態管理部の詳細な機能を説明する。プリフェッチ状態管理部５は、状態管理部５２，バッファ管理部５３，アクセス判定部５６，モードレジスタ８，比較器５４とアドレスバッファ５５から構成される。アクセス判定部５６は、ＣＰＵ１から出力されるチップセレクト信号ＣＳ０＿，ＣＳ１＿，ＣＳ２＿とモードレジスタ８の値を入力とし、プリフェッチ可否判定結果信号ＪＵＧを出力する。プリフェッチ可否判定結果信号ＪＵＧは、チップセレクト信号ＣＳ０＿，ＣＳ１＿，ＣＳ２＿とそれぞれのチップセレクト信号に対応するモードレジスタ８の設定値の論理積をとり、その結果の論理和をとったものである。プリフェッチ可否判定結果信号ＪＵＧは、現在アサートしているチップセレクト信号が示すメモリ領域がプリフェッチ可能に設定しているかプリフェッチ禁止に設定しているかを示し、プリフェッチ可能ならアサート、プリフェッチ禁止ならネゲートとなる信号である。
【００２８】
アドレスバッファ５５は、状態管理部５２からのアドレスバッファセット信号ABSET がアサートされると、ＣＰＵ１のアドレスバスＡＤＤＲの値を保持するバッファである。比較器５４は、アドレスバッファ５５とＣＰＵ１のアドレスバスＡＤＤＲの値を比較し、アドレスバッファ５５の値とＣＰＵ１のアドレスバスＡＤＤＲの値の各々下位４ビットを除く値が一致している場合、比較結果信号ＨＩＴをアサートし、不一致ならネゲートする。ここで、下位４ビットを除いて値を比較するのは、一度にプリフェッチするデータが１６バイトでありアドレスとしては下位４ビットの範囲に相当することから、同じプリフェッチ範囲のアドレスに対してアクセスしているかどうかを判定するために下位４ビットを除いてアドレス比較を行っている。
【００２９】
状態管理部５２は、ＣＰＵ１の出力信号であるバススタート信号ＢＳ＿と、アクセス判定部５６の判定結果であるプリフェッチ可否判定結果信号ＪＵＧ及び、メモリシーケンサ４からのデータバリッド信号ＤＶを入力として内部状態が遷移する状態遷移ブロックである。状態管理部５２からは、その内部状態の遷移に従い、起動信号ＲＥＱとプリフェッチアクセス信号ＰＲＦとアドレスバッファセット信号ＡＢＳＥＴとウェイト信号ＷＡＩＴ＿を出力し、更に、状態管理部５２の内部状態を状態信号ＳＴに出力している。
【００３０】
図４にこの状態管理部５２の状態遷移図を示す。状態１００は、図１のプリフェッチバッファ６に格納しているデータが無効であることを示している状態である。状態１０１はプリフェッチアクセス信号ＰＲＦによりプリフェッチの開始を指示し、一番最初のデータの準備ができるまでのウェイト状態である。同様に状態１０２は、プリフェッチを開始し２つ目のデータをウェイトしている状態である。状態１０３，１０４も同様にそれぞれ３つ目，４つ目のデータをウェイトしている状態である。本実施の形態では１回のプリフェッチで４つのデータを先読みするため、各々のデータの準備ができるまで一旦ウェイトする状態が４つあることになる。状態１０６は、プリフェッチが開始されプリフェッチバッファ６に有効なデータが４つ格納されたことを示す状態である。これに対し、状態１０５は、プリフェッチアクセスを実行せずにＣＰＵが要求しているデータのみをアクセスしていることを示す単発アクセス状態である。従って、起動信号ＲＥＱは状態１０１，１０２，１０３，１０４及び１０５の時にアサートされ、プリフェッチアクセス信号ＰＲＦは、状態１０１，１０２，１０３，１０４の時にアサートされ、メモリシーケンサ４に伝えられる。又、状態１００から状態１０１へ、状態１００から状態１０５へ、状態１０６から状態１０１へ、そして状態１０６から状態１０５へと遷移する時、即ちプリフェッチ開始を指示するか単発アクセスを行う際に、アドレスバッファセット信号ＡＢＳＥＴをアサートし、アドレスバッファ５５にＣＰＵ１のアドレスバスＡＤＤＲの値を保持させる。
【００３１】
これらはプリフェッチの状態に関する内部状態であるが、これらの内部状態とは別に
ＣＰＵからの要求状態を示す内部状態として状態１０７，１０８がある。状態１０７は、ＣＰＵからのアクセス要求が受付可能な状態である。状態１０８はＣＰＵが要求しているデータの準備ができていないため、ＣＰＵをデータ待ちにしていることを示す状態である。ウェイト信号ＷＡＩＴ＿は状態１０７から状態１０８へ遷移する時と状態１０８のときアサートされ、ＣＰＵ１に通知される。
【００３２】
次に、各状態の遷移を説明する。状態管理部５２の初期状態は、まだ一度もＣＰＵ１からのアクセス要求がなく、プリフェッチされたデータもなく、いつでもＣＰＵ１からのアクセス要求を受け付けられる状態にあるため、状態１００及び状態１０７にある。
【００３３】
まず、プリフェッチに関する状態の遷移としては、状態１００から状態１０１へ遷移する遷移条件は、バススタート信号ＢＳ＿がアサートであり、かつプリフェッチ可否判定結果信号ＪＵＧがアサートされることである。即ち、ＣＰＵ１からのアクセス要求が発生し、アクセスで指示されたアドレスを含むチップセレクタ空間に対応したモードレジスタ８の値がプリフェッチを行う状態を示している場合である。これに対し、状態１００から状態１０５へ遷移する遷移条件は、バススタート信号ＢＳ＿がアサートであり、かつプリフェッチ可否判定結果信号ＪＵＧがネゲートの場合である。状態１０１から状態１０２，状態１０２から状態１０３，状態１０３から状態１０４，状態１０４から状態１０６，状態１０５から状態１００へ遷移する条件は、メモリシーケンサ４からのデータバリッド信号ＤＶがアサートである。即ち、各データ要求に対して出力されるメモリからのデータが有効になった場合である。状態１０６から状態１０１へ遷移する遷移条件は、バススタート信号ＢＳ＿がアサート又は状態１０８であり、かつ、比較結果信号ＨＩＴがネゲート、かつ、プリフェッチ可否判定結果信号ＪＵＧがアサートである。即ち、ＣＰＵ１からのアクセスが発生し、アドレスバッファ５５に格納されているこれまで先読みしていたアドレスの範囲と今度のアクセスのアドレスが重ならず、かつ、今度のアクセスがプリフェッチを行う領域に対するアクセスの場合である。一方、状態１０６から状態１０５へ遷移する遷移条件は、バススタート信号ＢＳ＿がアサート又は状態１０８であり、かつ、プリフェッチ可否判定結果信号ＪＵＧがネゲートの場合である。これは、状態１００から状態１０５へ遷移する遷移条件と同じで、ＣＰＵ１からのアクセスが発生し、かつアクセスがプリフェッチを行わない領域に対するものであった場合である。
【００３４】
次に、状態１０７から状態１０８への遷移条件は、１）バススタート信号ＢＳ＿がアサートでプリフェッチ可否判定結果信号ＪＵＧがネゲートであるか、又は、２）比較器５４の比較結果信号ＨＩＴがアサートでプリフェッチ可否判定結果信号ＪＵＧがアサート、かつ状態１０１，１０２，１０３，１０４のいずれかの状態であり、なおかつＣＰＵ１のＡＤＤＲと現在の状態により読み出すデータがプリフェッチバッファ６にセットされていないと判定された場合、のいずれかである。ＣＰＵ１が読み出すデータがプリフェッチバッファ６にセットされているかどうかは、例えば、内部状態が状態１０２であれば、アドレスバッファ５５の示すアドレスに格納されている値がプリフェッチバッファ６に既にセット済であるかどうかにより判別することができる。また、内部状態が状態１０２であれば、アドレスバッファ５５の示すアドレスとアドレスバッファ５５の示すアドレスの次に格納されている値がいずれもプリフェッチバッファ６に既にセット済であるかどうかにより判別することができる。他の状態についても、同様にして判別が可能である。状態１０８から状態１０７への遷移条件は、必要なデータがプリフェッチバッファ６にセットしてあるか、又は、状態１０５でデータバリッド信号ＤＶがアサートである。
【００３５】
バッファ管理部５３は、前述の状態管理部５２の内部状態を示す状態信号ＳＴと、CPU1からのアドレスバスＡＤＤＲの下位４ビットと、比較器５４の比較結果信号ＨＩＴとを入力とし、プリフェッチバッファ６にデータをセットするプリフェッチバッファセット信号ＰＢＳＥＴと出力セレクタ１１の出力選択信号ＯＰＳＥＬを出力する論理ブロックである。信号ＯＰＳＥＬはプリフェッチで先読みする１キャッシュラインのデータ個数に対応して０から３の４つの値を持ち、信号ＨＩＴがネゲートしている場合０を出力する。また、信号ＨＩＴがアサートしている場合、アドレスバスＡＤＤＲの下位４ビットをデコードした結果を出力する。同様に、プリフェッチバッファセット信号ＰＢＳＥＴも、０から３の４つの値を持ち、状態信号ＳＴの値により、状態管理部５２が図４の状態１０２である場合は１、状態管理部５２が図４の状態１０３である場合には２、状態管理部５２が図４の状態１０４である場合は３、そしてそれ以外の状態の場合には０をアサートする。
【００３６】
図５は、メモリシーケンサ４の動作を状態遷移図として示したものである。状態１１０はアイドル状態であり、プリフェッチ状態管理部５からの起動信号ＲＥＱを待っている状態を示す。状態１１１は、行アドレスアクセス状態を示し、ＣＰＵ１からアクセスされたアドレスに対応するＤＲＡＭ７のＲＡＳアドレスをアドレスバスＡに出力し、行アドレスセレクト信号ＲＡＳ＿をアサートする状態である。状態１１２は、１回目の列アドレスアクセス状態を示し、ＣＰＵ１からアクセスされたアドレスに対応するＤＲＡＭ７のＣＡＳアドレスをアドレスバスＡに出力し、列アドレスセレクト信号ＣＡＳ＿をアサートする状態である。状態１１３，１１４，１１５は、それぞれプリフェッチにより先行して行う２回目，３回目，４回目の行アドレスアクセス状態を示している。メモリシーケンサ４の初期状態は状態１１０である。状態１１０から状態１１１への遷移条件は、起動信号ＲＥＱのアサートである。これによりＤＲＡＭ７へのアクセスが開始される。
【００３７】
状態１１１，状態１１２，状態１１３，状態１１４，状態１１５から次の状態に遷移する遷移条件は、ＤＲＡＭ７のアクセス時間で決定され、ＤＲＡＭ７のアクセス時間が経過する毎に次の状態に遷移する。特に状態１１２においては、ＤＲＡＭ７のアクセス時間が経過した時に、プリフェッチアクセス信号ＰＲＦがアサートしていれば状態１１２から状態１１３へ遷移し、ネゲートであれば状態１１２から状態１１０へ遷移する。即ち、
ＤＲＡＭ７からデータを１つアクセスした後、プリフェッチが指示されていれば、引き続き同じＲＡＳアドレスの下で先読み対象となるデータのＣＡＳアドレスを出力して、１キャッシュライン分のデータに対し連続してアクセスすることになる。なお、データバリッド信号ＤＶは、ＣＡＳアドレスが出力されＤＲＡＭ７から読み出されたデータが確定して１データ分のアクセスが完了する状態１１２，１１３，１１４，１１５から次の状態への遷移の際にアサートされる。
【００３８】
図３に図１に示すメモリコントローラ２の動作を示したタイミングチャートを示す。図１のＣＰＵ１及びメモリコントローラ２は、図１には図示されていないクロック信号CLKに同期して動作するものとし、ＣＰＵ１のＣＳ０＿によって選択されるＤＲＡＭチップのアドレス空間に対応する領域（以下、ＣＳ０＿領域と呼ぶ。他も同様である）は、プリフェッチ禁止モード、ＣＳ１＿領域はプリフェッチ可能モードに設定しているものとする。
【００３９】
はじめに、ＣＰＵ１は、ＣＳ０＿領域のアドレスＡＤＤＲ１にアクセスするものとする。この場合、ＢＳ＿，ＣＳ０＿をアサートし、ＡＤＤＲにはアドレスＡＤＤＲ１を出力する。メモリコントローラ２のプリフェッチ状態管理部５は、ＡＤＤＲ１のデータが準備できるまで、即ちデータバスＤＡＴ上でデータが確定するまでＷＡＩＴ＿をアサートする。同時にメモリシーケンサ４にＲＥＱをアサートして、アクセスの発生を通知する。この時、ＣＳ０＿領域は、プリフェッチ禁止モードに設定しているので、プリフェッチアクセス信号ＰＲＦはアサートしない。メモリシーケンサ４は、ＣＰＵ１からアクセスされたアドレスＡＤＤＲ１に対応する行アドレスＲ１をアドレスバスＡに出力し、ＲＡＳ＿をアサートする。次に、ＡＤＤＲ１の列アドレスＣ１をアドレスバスＡに出力し、ＣＡＳ＿をアサートしてＤＲＡＭ７に対するアクセスアドレスを確定する。このメモリコントローラ２の動作によりＤＲＡＭ７はＡＤＤＲ１に対応するデータＤ１をメモリデータバスＤに出力する。そこでメモリシーケンサ４はメモリデータバスＤにデータＤ１が出力されたタイミングで、フェッチ状態管理部６にデータバリッド信号ＤＶをアサートする。
【００４０】
プリフェッチ状態管理部５では、データバリッド信号ＤＶがアサートされたことにより、ウェイト信号ＷＡＩＴ＿をネゲートし、セレクタ１１はＣＰＵ１のプロセッサデータバスＤＡＴに、メモリデータバスＤに出力されているデータＤ１を出力する。
【００４１】
次に、ＣＰＵ１がＣＳ１＿領域のアドレスＡＤＤＲ５にアクセスするものとする。CS1＿領域はプリフェッチ可能モードに設定しているので、プリフェッチ状態管理部５はPRFをアサートする。メモリシーケンサ４は、アドレスＡＤＤＲ５の対応する行アドレスＲ５をアドレスバスＡに出力し、ＲＡＳ＿をアサートする。続いて、ＡＤＤＲ５に対応する列アドレスＣ５を出力しＣＡＳ＿をアサートする。この時ＰＲＦがアサートされているため更に、アドレスバスＡにＣ６，Ｃ７，Ｃ８と連続に出力し、ＣＡＳ＿も各列アドレスの出力に対応してアサート／ネゲートを同様に繰り返す。ここで、列アドレスＣ６は、列アドレスＣ５に１加算した値であり、Ｃ７はＣ６に１加算、Ｃ８はＣ７に１加算したものである。また、行アドレスＲ５と列アドレスＣ５に対応するデータがＤ５であり、行アドレスＲ５と列アドレスＣ６に対応するデータがＤ６であり、行アドレスＲ５と列アドレスＣ７に対応するデータがＤ７であり、行アドレスＲ５と列アドレスＣ８に対応するデータが
Ｄ８である。そして、これらデータＤ５〜Ｄ８が連続してメモリデータバスＤに出力される。
【００４２】
また、ＣＳ１＿領域をプリフェッチ可能モードに設定し、このＣＳ１＿領域に格納する命令やデータが、配列や行列演算に用いるデータのように連続的にアクセスする可能性が非常に大きく、プリフェッチを行うことが有効なデータか命令である場合、次に、ADDR5に続いてＡＤＤＲ６に対するアクセスが生じる可能が高い。このＡＤＤＲ６の行アドレスはＲ５であり、列アドレスはＣ６である。つまり、ＡＤＤＲ６に対応するデータはＤ６であり、仮にＣＰＵ１が次にＡＤＤＲ６にアクセスすると、このデータは既にＤＲＡＭ７から読み出しプリフェッチバッファ６に格納してあるため、ＣＰＵ１にウェイト信号WAIT＿をアサートすることなくプロセッサデータバスにＤ６を出力することが可能になる。さらに、ＣＳ０＿領域に対しては、プリフェッチ動作を行わないため、メモリデータバスＤにＤ１を出力してからＤ５を出力するまでの間、ＤＲＡＭ７はアイドル状態になる。つまり、新たに不要なメモリアクセスが生じないため、ＤＲＡＭ７の効率が向上し、システム全体のデータ処理能力が向上する。
【００４３】
以上の説明においては、チップセレクト信号はＤＲＡＭ７を所定の領域に分割した際に、ＣＰＵ１からのアクセスがこれら分割した領域のどこに対するアクセスなのかを識別する意味で用いてきたが、チップセレクト信号をその本来の意味で用いて、メモリを構成するＤＲＡＭチップ自体を区別するように用いてもよい。この場合、メモリチップ毎にプリフェッチの実行／非実行を制御することになる。これによりメモリ構成に応じたプリフェッチの制御を行うことが可能となる。
【００４４】
図６は、図１で説明したモードレジスタ８の設定を実際にアクセスしたアドレスを元に変更を行う機能を備えた実施の形態である。この実施の形態ではプリフェッチ状態管理部５の内部に、モードレジスタ８の値を変更するアクセス監視部７０を備えている。アクセス監視部７０は、チップセレクト信号ＣＳ０＿，ＣＳ１＿，ＣＳ２＿，バススタート信号ＢＳ＿、そして比較結果信号ＨＩＴを入力とし、出力としてチップセレクト信号ＣＳ０＿，ＣＳ１＿，ＣＳ２＿に対応するモードレジスタ８の値をそれぞれセットする信号であるSet０，Set１，Set２と、同様にリセットする信号であるRset０，Rset１，Rset２のいずれか１つをアサートする。
【００４５】
図７はアクセス監視部７０の内部の概要を示した図である。アクセス監視部７０は、連続アクセス判定論理７１とモードレジスタ選択論理７２で構成される。図８は連続アクセス判定論理７１の動作を説明するための状態遷移図である。連続アクセス判定論理７１の初期状態は、状態９１０である最初にアクセスが行われる１回目の状態である。次にCPU1からのアクセスが開始されると、前回アクセスしたアドレスと今回アクセスするアドレスとが下位４ビットを除いて一致していることを示しているＨＩＴ信号がアサートしていて、なおかつ、前回アクセスしたチップセレクト空間と同一チップセレクト信号がアサートしている場合、即ち最初のアクセスと同じキャッシュラインの範囲で続いてアクセスが行われた場合、状態９１１である連続２回目アクセス状態へ遷移する。この状態は、同一プリフェッチ範囲に対して連続して２回のアクセスが行われた状態である。この状態９１１において、更にＣＰＵ１が同一チップセレクト空間にアクセスし、同様に前回アクセスしたアドレスと今回アクセスするアドレスが下位４ビットを除いて一致していることを示すＨＩＴ信号がアサートしていると、状態９１２である連続３回目アクセス状態に遷移する。この状態は即ち連続３回のアクセスが同じプリフェッチ範囲に対して行われた状態である。また連続３回目アクセス状態に遷移する条件が成立しないＣＰＵ１のアクセスが生じる初期状態である状態９１０に遷移する。状態９１２の連続３回目アクセス状態においても、同様に、ＣＰＵ１が同一チップセレクト空間にアクセスし、更に、ＨＩＴ信号がアサートしていると、状態９１３である連続４回目アクセス状態に遷移し、一方、状態９１３に遷移しないＣＰＵ１のアクセスが生じると状態９１０に遷移する。
【００４６】
状態９１３では、ＣＰＵ１がアクセスを開始すると状態９１０に遷移する。しかし状態９１３から状態９１０へ遷移する時、連続アクセス判定論理７１は、プリフェッチ可能信号ＰＦＯＮをアサートする。また、状態９１１又は状態９１２から状態９１０に遷移する時には、連続アクセス判定論理７１は、プリフェッチ禁止信号ＰＦＯＦＦをアサートする。即ち、１キャッシュライン分のデータをアクセスしたとき、そのアクセスの全てが同一プリフェッチ範囲内に対するアクセスであれば、そのアクセスが行われたチップセレクト空間にはプリフェッチが有効なデータが格納されているものと判断して、連続アクセス判定論理７１はプリフェッチ可能信号ＰＦＯＮをアサートするが、そうでなければ、そのチップセレクト空間にはプリフェッチが無効であると判断して、プリフェッチ禁止信号
ＰＦＯＦＦをアサートする。
【００４７】
モードレジスタ選択論理７２は、前回アクセスしたチップセレクト信号を保持する機能を備え、ＰＦＯＮ信号がアサートすると、保持しているチップセレクト信号に対応するモードレジスタ８のセット信号であるSet０，Set１，Set２ のいずれかをアサートする。またＰＦＯＦＦ信号がアサートすると、保持しているチップセレクト信号に対応するモードレジスタ８のリセット信号であるRset０，Rset１，Rset２のいずれかをアサートする。なお、モードレジスタ８はセットされると、プリフェッチアクセス可能モードを示し、リセットするとプリフェッチアクセス禁止モードを示すものとする。この様に、モードレジスタ８の設定を実際にアクセスしたアドレスの状態に基づいて変更し、各チップセレクト空間に対してプリフェッチ処理の実行の有無を自動的に設定することができる。
【００４８】
以上の実施の形態ではいずれもメモリにＤＲＡＭを用いた場合を説明してきたが、本発明はメモリがＤＲＡＭに限定されるものではなく、ＳＤＲＡＭ，ＰＢＲＡＭ等、一般の半導体メモリに代表される記憶素子に適用することができ、その場合の構成も本実施の形態と同様のものとなる。また、上述の実施の形態においてはアクセスを行うデータは同じ
ＤＲＡＭに連続して格納されているものとして説明してきたが、メモリはインターリーブ構成を採ることも可能である。この場合は、連続するアドレスを構成するメモリチップ同士のプリフェッチの実行／非実行が一致するようにモードレジスタ８を設定することにより実現できる。
【００４９】
前述の実施の形態では、いずれもプリフェッチの可否を識別するためにＣＰＵ１からのチップセレクト信号を用いているが、システムによっては、ＣＰＵがアクセスするアドレスの上位ビットによってチップセレクト信号が決まるため、ＣＰＵ１からプリフェッチ状態管理部５への入力はアドレスバスＡＤＤＲとバススタート信号ＢＳ＿だけでもかまわない。この場合アクセス判定部５６では、アドレスバスＡＤＤＲからのアドレスデータを元にチップセレクタ空間を求める処理が必要となる。これにより、ＣＰＵ１の信号ピンの数を減らすことができる。しかし、アドレスバスＡＤＤＲに出力されるアドレスデータが静定する時間とアドレスデータからチップセレクタ空間を求めるための処理により遅延が発生してしまう。
【００５０】
また、前述の実施の形態では、プリフェッチを制御する領域の単位がチップセレクト空間と一致していたが、例えばプリフェッチ状態管理部５のモードレジスタ８を、各領域の境界を格納するアドレスレジスタとし、プリフェッチ状態管理部５に入力されるＣＰＵ１のアクセスしたアドレスＡＤＤＲの値をモードレジスタ８に格納された領域境界のアドレスと比較することにより、任意サイズの領域毎にプリフェッチを制御することができる。この場合、メモリを２つの領域に分ける場合はモードレジスタ８が１つ、メモリを３つの領域に分ける場合はモードレジスタ８が２つと言うように、モードレジスタ８は分割する領域の数−１個必要になり、またそれだけアドレスＡＤＤＲの値との比較が増えることになるため、アクセス判定部５６における処理が複雑になり、またレジスタ数も増えることから回路規模が大きくなってしまう。
【００５１】
本発明においては、プリフェッチを行うことが有効なデータを格納するメモリ領域と、プリフェッチを行うと不必要なアクセスが多発するデータを格納するメモリ領域を、異なるチップセレクト空間に配置しているが、プリフェッチを行うことが有効なデータと、プリフェッチを行うと不必要なアクセスが多発するデータを分類しない場合、以下のようにプログラムを作成する。
【００５２】
まずプログラムの初期化処理の際に、全てのモードレジスタ８をプリフェッチアクセス可能モードに予め設定しておく。その後、処理対象となるデータがプリフェッチを行うと不必要なアクセスが多発するデータである処理を実行する場合、その処理を行う直前に、該当するデータを格納するアドレスを示すチップセレクト信号に対応するモードレジスタ８をプリフェッチアクセス禁止モードに設定する命令を記述しておく。更に、プリフェッチを行うと不必要なアクセスが多発するデータの処理が終了した時、先にプリフェッチアクセス禁止モードにセットしたモードレジスタ８の値をプリフェッチアクセス可能モードに戻す命令をその処理の終わりに記述しておく。これによりプログラムで明示的にプリフェッチを実行するか否かを記述することができる。
【００５３】
なお、以上の実施の形態においては、メモリコントローラ２はＣＰＵ１と独立して設けられていたが、メモリコントローラ２内のプリフェッチを制御するメモリシーケンサ４，プリフェッチ状態管理部５，プリフェッチバッファ６，セレクタ１１は、キャッシュメモリ２０と主メモリＤＲＡＭ７の間にあればよく、キャッシュメモリ２０とともにＣＰＵ１内に設けてもよい。逆に、キャッシュメモリ２０はＣＰＵに対して外付けで設けても良い。
【００５４】
以上説明したように本発明によって、プログラムやデータを格納する領域を分割し、各領域毎にプリフェッチを行うか否かを制御することが可能になる。よって、データアクセスにおいてもプリフェッチ機能を動作させると有効に動作するデータが格納された領域に対するアクセス場合にはプリフェッチ機能を動作させ、プリフェッチアクセス機能を動作させると不必要なデータをプリフェッチしてしまいメモリアクセス性能を低下させてしまうデータが格納された領域に対するアクセス場合には、プリフェッチ機能を抑止することにより、メモリアクセスの効率を向上することが可能になる。
【産業上の利用可能性】
【００５５】
以上のように、本発明にかかるメモリ制御装置は、データアクセスにおいてプリフェッチ機能を制御することにより、効率の良いメモリシステムとして有用であり、データ処理装置のメモリ制御に用いるのに適している。
【図面の簡単な説明】
【００５６】
【図１】本発明の実施の形態におけるデータ処理装置の構成を示すブロック図である。
【図２】プリフェッチ状態管理部の構成を示すブロック図である。
【図３】本発明の実施の形態における計算機の動作を示すタイミングチャートである。
【図４】状態管理部の状態遷移を示す図である。
【図５】メモリシーケンサの動作を示す状態遷移図である。
【図６】モードレジスタを設定する機能を備えた計算機の構成図である。
【図７】アクセス監視部の構成図である。
【図８】連続アクセス判定論理の状態遷移を示す図である。
【図１】
0003956698.tif 000002
【図２】
0003956698.tif 000003
【図３】
0003956698.tif 000004
【図４】
0003956698.tif 000005
【図５】
0003956698.tif 000006
【図６】
0003956698.tif 000007
【図７】
0003956698.tif 000008
【図８】
0003956698.tif 000009