(57)【特許請求の範囲】
【請求項１】
メモリ装置からデータ読み出しのためのロードバッファ部と、メモリ装置への書き込みのためのストアバッファ部とを備え、
前記ロードバッファ部は、
一メモリブロック分のデータを格納するための複数語の独立に読み書き可能なレジスタを有するロードデータバッファ部と、
中央処理装置からの前記メモリ装置へのデータ読み出し要求に対して、前記レジスタ内のいずれかに該当データが存在する場合は、これを当該中央処理装置に返送し、
どのレジスタにも該当データが存在しない場合は、前記メモリ装置より、前記読み出し要求のデータのメモリアドレスから連続して同一メモリブロックの最終アドレスまでのデータを読み出して、これらを順次、前記レジスタに格納するロードバッファ制御部とからなり、
前記ストアバッファ部は、
一メモリブロック分のデータとして複数語を格納する先入れ先出しバッファを備えたストアデータバッファ部と、
前記中央処理装置からの前記メモリ装置への書き込み要求に対して、前記先入れ先出しバッファ内に、該当データが存在する場合はこれを更新すると共に、格納位置を最後尾とし、該当データの同一メモリブロックのデータが存在する場合は、該当データを最後尾に格納し、
前記先入れ先出しバッファ内のデータが、該当データのメモリブロックとは異なるメモリブロックであった場合は、当該先入れ先出しバッファに格納されているデータを全て前記メモリ装置に書き込むと共に、前記該当データを当該先入れ先出しバッファの先頭位置に格納するストアバッファ制御部とからなることを特徴とするメモリバッファ装置。
【請求項２】
メモリ装置からデータ読み出しのためのロードバッファ部と、メモリ装置への書き込みのためのストアバッファ部とを備え、
前記ロードバッファ部は、
一メモリブロック分のデータを格納するための複数語の独立に読み書き可能なレジスタを有するロードデータバッファ部と、
中央処理装置からの前記メモリ装置へのデータ読み出し要求に対して、前記レジスタ内のいずれかに該当データが存在する場合は、これを当該中央処理装置に返送し、
どのレジスタにも該当データが存在しない場合は、前記メモリ装置より、前記読み出し要求のデータのメモリアドレスを含む同一メモリブロック全体のデータを読み出して、これらを順次、前記レジスタに格納するロードバッファ制御部とからなり、
前記ストアバッファ部は、
一メモリブロック分のデータとして複数語を格納する先入れ先出しバッファを備えたストアデータバッファ部と、
前記中央処理装置からの前記メモリ装置への書き込み要求に対して、前記先入れ先出しバッファ内に、該当データが存在する場合はこれを更新すると共に、格納位置を最後尾とし、該当データの同一メモリブロックのデータが存在する場合は、該当データを最後尾に格納し、
前記先入れ先出しバッファ内のデータが、該当データのメモリブロックとは異なるメモリブロックであった場合は、当該先入れ先出しバッファに格納されているデータを全て前記メモリ装置に書き込むと共に、前記該当データを当該先入れ先出しバッファの先頭位置に格納するストアバッファ制御部とからなることを特徴とするメモリバッファ装置。
【請求項３】
請求項１または２に記載のメモリバッファ装置において、
中央処理装置からのメモリ装置へのデータ書き込み要求に対して、該当データが、ロードデータバッファ部内のレジスタのいずれかに存在する場合は、このデータを更新するロードバッファ制御部を備えたことを特徴とするメモリバッファ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、計算機におけるメモリ読み出し、およびメモリ書き込みのためのメモリバッファ装置に関する。
【０００２】
【従来の技術】
既存技術による計算機では、メモリ操作は基本的に１語、半語、あるいは１／４  語単位で任意のメモリアドレスに対してデータ読み出し（ロード命令実行）、およびデータ書き込み（ストア命令実行）を行う。このため、小規模の計算機では１語のメモリレジスタを設置し、ロード命令実行ではメモリ装置から読み出したデータをこのレジスタに格納し、ＣＰＵ（中央処理装置）はこれを内部に取り込み、また、ストア命令実行では書き込むべきデータを一旦レジスタに格納し、これをメモリ装置に書き込んでいる。
このため、ロード命令実行では、ＣＰＵの要求毎にメモリアクセス時間が命令実行時間にそのまま反映され、ストア命令実行では、ＣＰＵからレジスタに書き込みデータを格納するまでの時間が命令実行時間に反映される。但し、ストア命令実行直後にロード命令、あるいはストア命令を実行する場合には、前のストア命令実行に伴うメモリ書き込み時間の間、次のメモリ操作は待たされる。
【０００３】
大規模の計算機ではキャッシュメモリを設置し、これを介在させてロード命令実行、およびストア命令実行を行う。これによりＣＰＵはキャッシュメモリとの間で１語単位のデータ授受を行ない、また、メモリ装置はキャッシュメモリとの間で連続するメモリアドレスに配置される複数語のデータ（以下データブロックと称す）授受を行う。これにより、ロード命令で要求されるデータがキャッシュメモリに存在する場合（以下ロードキャッシュヒットと称す）には、キャッシュメモリからの高速なデータ応答により短時間でロード命令が完了し、また、ストア命令では書き込むべきデータを含むデータブロックがキャッシュメモリに存在する場合（以下ストアキャッシュヒットと称す）には、キャッシュメモリへのデータ書き込みのみ実行することでストア命令を完了させることが可能である。
【０００４】
ロード命令実行においてロードキャッシュヒットでない場合（以下ロードキャッシュミスと称す）、あるいはストア命令実行においてストアキャッシュヒットでない場合（以下ストアキャッシュミスと称す）には小規模の計算機と同様にメモリ装置のアクセス時間が命令実行時間、あるいは直後のメモリ操作に反映される。
【０００５】
【発明が解決しようとする課題】
上記のように、従来技術による計算機におけるメモリ操作では、小規模の計算機ではロード命令毎にメモリ装置のアクセス時間が命令実行時間に直接反映され、また、ストア命令実行に伴うメモリ書き込み動作のためにこれに連続するロード命令、あるいはストア命令の実行は待たされてしまうため、メモリ操作命令の実行時間による性能低下の問題が大きい。かつ、１語単位のメモリ操作であるためＤＲＡＭデバイスに用意される高速ページアクセス等の連続語に渡るメモリ操作によるメモリスループットの向上は活かされない。
特に、最近の高動作周波数のＣＰＵではＣＰＵ内部のみで実行される命令実行時間と、メモリ操作命令の実行時間の差が大きくなる傾向で、このことがＣＰＵ動作周波数の向上にもかかわらずプログラム実行性能が延びない原因となっている。
【０００６】
一方、大規模の計算機ではキャッシュメモリを設置することにより上記ＣＰＵ動作とメモリ動作のギャップを埋めているが、キャッシュメモリをＣＰＵと同一のＬＳＩに内蔵することによるチップサイズ、チップコスト、および消費電力の増大、あるいはキャッシュメモリをＣＰＵ−ＬＳＩ外部に設置することによる装置コスト、装置容積、および消費電力の増大が問題となっている。
更に、ＣＰＵ動作周波数の向上に伴い、キャッシュメモリのアクセス時間がこれに追従できず、キャッシュメモリを設置しながらもメモリ操作命令実行のためのクロックサイクル数の増大を招いている。
【０００７】
このような点から、ローコスト化および消費電力の低減化が図れ、かつ、プログラム実行性能を向上させることのできるメモリバッファ装置を実現することが望まれていた。
【０００８】
【課題を解決するための手段】
第１発明のメモリバッファ装置は、前述の課題を解決するために、メモリ装置からデータ読み出しのためのロードバッファ部と、メモリ装置への書き込みのためのストアバッファ部とを備え、ロードバッファ部は、一メモリブロック分のデータを格納するための複数語の独立に読み書き可能なレジスタを有するロードデータバッファ部と、中央処理装置からのメモリ装置へのデータ読み出し要求に対して、レジスタ内のいずれかに該当データが存在する場合は、これを中央処理装置に返送し、どのレジスタにも該当データが存在しない場合は、メモリ装置より、読み出し要求のデータのメモリアドレスから連続して同一メモリブロックの最終アドレスまでのデータを読み出して、これらを順次、レジスタに格納するロードバッファ制御部とからなり、ストアバッファ部は、一メモリブロック分のデータとして複数語を格納する先入れ先出しバッファを備えたストアデータバッファ部と、中央処理装置からのメモリ装置への書き込み要求に対して、先入れ先出しバッファ内に、該当データが存在する場合はこれを更新すると共に、格納位置を最後尾とし、該当データの同一メモリブロックのデータが存在する場合は、該当データを最後尾に格納し、先入れ先出しバッファ内のデータが、該当データのメモリブロックとは異なるメモリブロックであった場合は、先入れ先出しバッファに格納されているデータを全てメモリ装置に書き込むと共に、該当データを先入れ先出しバッファの先頭位置に格納するストアバッファ制御部とからなることを特徴とするものである。
【０００９】
第１発明のメモリバッファ装置がこのように構成されていることにより、ロードバッファ部は、中央処理装置からのメモリ装置へのデータ読み出し要求に対して、レジスタ内のいずれかに該当データが存在する場合は、これを中央処理装置に返送する。一方、どのレジスタにも該当するデータが存在しない場合は、メモリ装置より、読み出し要求のデータのメモリアドレスから連続して同一メモリブロックの最終アドレスまでのデータを読み出して、これらを順次、レジスタに格納する。
また、ストアバッファ部は、中央処理装置からのメモリ装置への書き込み要求に対して、先入れ先出しバッファ内に、該当データが存在する場合はこれを更新すると共に、格納位置を最後尾とする。
書き込み要求のデータの同一メモリブロックのデータが、先入れ先出しバッファ内に存在する場合は、該当データをその最後尾に格納する。
一方、先入れ先出しバッファ内のデータが、該当データのメモリブロックとは異なるメモリブロックであった場合は、先入れ先出しバッファに格納されているデータを全てメモリ装置に書き込むと共に、その該当データを先入れ先出しバッファの先頭位置に格納する。
【００１０】
第２発明のメモリバッファ装置は、前述の課題を解決するために、メモリ装置からデータ読み出しのためのロードバッファ部と、メモリ装置への書き込みのためのストアバッファ部とを備え、ロードバッファ部は、一メモリブロック分のデータを格納するための複数語の独立に読み書き可能なレジスタを有するロードデータバッファ部と、中央処理装置からのメモリ装置へのデータ読み出し要求に対して、レジスタ内のいずれかに該当データが存在する場合は、これを中央処理装置に返送し、どのレジスタにも該当データが存在しない場合は、メモリ装置より、読み出し要求のデータのメモリアドレスを含む同一メモリブロック全体のデータを読み出して、これらを順次、レジスタに格納するロードバッファ制御部とからなり、ストアバッファ部は、一メモリブロック分のデータとして複数語を格納する先入れ先出しバッファを備えたストアデータバッファ部と、中央処理装置からのメモリ装置への書き込み要求に対して、先入れ先出しバッファ内に、該当データが存在する場合はこれを更新すると共に、格納位置を最後尾とし、該当データの同一メモリブロックのデータが存在する場合は、該当データを最後尾に格納し、先入れ先出しバッファ内のデータが、該当データのメモリブロックとは異なるメモリブロックであった場合は、先入れ先出しバッファに格納されているデータを全てメモリ装置に書き込むと共に、該当データを先入れ先出しバッファの先頭位置に格納するストアバッファ制御部とからなることを特徴とするものである。
【００１１】
第２発明のメモリバッファ装置がこのように構成されていることにより、ロードバッファ部は、中央処理装置からのメモリ装置へのデータ読み出し要求に対して、レジスタ内のいずれかに該当データが存在する場合は、これを中央処理装置に返送する。一方、どのレジスタにも該当するデータが存在しない場合は、メモリ装置より、読み出し要求のデータのメモリアドレスを含む同一メモリブロック全体のデータを読み出して、これらを順次、レジスタに格納する。
また、ストアバッファ部の動作は、第１発明と同様である。
【００１２】
第３発明のメモリバッファ装置は、前述の課題を解決するために、第１または第２発明のメモリバッファ装置において、中央処理装置からのメモリ装置へのデータ書き込み要求に対して、該当データが、ロードデータバッファ部内のレジスタのいずれかに存在する場合は、このデータを更新するロードバッファ制御部を備えたことを特徴とするものである。
【００１３】
第３発明がこのように構成されていることにより、中央処理装置からのメモリ装置へのデータ書き込み要求があった場合、該当データが、ロードデータバッファ部内のレジスタのいずれかに存在した場合は、その都度、メモリ装置に書き込まず、ロードデータバッファ部内のデータのみを更新する。
【００１４】
【発明の実施の形態】
以下、本発明の実施の形態を図面を用いて詳細に説明する。
《実施形態１》
［構成］
図１は本発明のメモリバッファ装置の実施形態１および後述する実施形態２を示す構成図である。
図の装置は、メモリバッファ装置を構成するロードバッファ部１００とストアバッファ部２００、および中央処理装置（以下、ＣＰＵという）３００とメモリ装置４００を示している。
【００１５】
ロードバッファ部１００は、主としてＣＰＵ３００からのロード命令（メモリ読み出し命令）実行時に働き、ストアバッファ部２００は、ＣＰＵ３００からのストア命令（メモリ書き込み命令）実行時に働く。
即ち、ロードバッファ部１００は、一メモリブロック分のデータを格納するための複数語の独立に読み書き可能なレジスタを有するロードデータバッファ部１０１と、ＣＰＵ３００からのメモリ読み出し要求に対して、複数のレジスタ内のいずれかに該当データが存在する場合は、これをＣＰＵ３００に返送し、どのレジスタにも該当データが存在しない場合は、メモリ装置４００より、読み出し要求のデータのメモリアドレスから連続して同一メモリブロックの最終アドレスまでのデータを読み出して、これらを順次、レジスタに格納するロードバッファ制御部１０２とからなる。
【００１６】
ロード命令実行時はＣＰＵ３００からロードバッファ部１００に対してリクエスト信号をアサートし（“１”を出力し）、リード／ライト信号をネゲートし（“０”を出力し）、更に所定のメモリアドレスになるようにアドレスを出力する。ロードバッファ部１００ではこれに応えて、アクノレッジ信号をアサートすると共に、ＣＰＵ３００の要求するロードデータをＣＰＵ３００に出力する。ロード命令実行時で、メモリ装置４００からデータ読み出しを行う場合にはロードバッファ部１００からメモリ装置４００に対してメモリリクエストをアサートし、メモリリード／ライト信号をネゲートし、更に所定のメモリアドレスになるようにメモリアドレスを出力する。
メモリ装置４００はこれに応えて、メモリアクノレッジ信号をアサートすると共に、ロードバッファ部１００の要求するリードデータをロードバッファ部１００に出力する。
【００１７】
また、ストアバッファ部２００は、一メモリブロック分のデータとして複数語を格納する先入れ先出しバッファを備えたストアデータバッファ部２０１と、ＣＰＵ３００からメモリ装置４００への書き込み要求に対して、先入れ先出しバッファ内に、該当データが存在する場合はこれを更新すると共に、格納位置を最後尾とし、該当データの同一メモリブロックのデータが存在する場合は、該当データを最後尾に格納し、先入れ先出しバッファ内のデータが、該当データのメモリブロックとは異なるメモリブロックであった場合は、先入れ先出しバッファに格納されているデータを全てメモリ装置４００に書き込むと共に、該当データを先入れ先出しバッファの先頭位置に格納するストアバッファ制御部２０２とを備えている。
【００１８】
ストア命令実行時はＣＰＵ３００からストアバッファ部２００に対してリクエスト信号をアサートし（“１”を出力し）、リード／ライト信号をアサートし（“１”を出力し）、書き込むべきデータ、即ち、ストアデータを出力し、更に所定のメモリアドレスになるようにアドレスを出力する。ストアバッファ部２００ではこれに応えて、アクノレッジ信号をアサートしてＣＰＵ３００に出力する。ストア命令実行時で、メモリにデータ書き込みを行う場合にはストアバッファ部２００からメモリ装置４００に対してメモリリクエストをアサートし、メモリリード／ライト信号をアサートし、書き込むべきデータとなるようにライトデータを出力し、更に所定のメモリアドレスになるようにメモリアドレスを出力する。メモリ装置４００はこれに応えて、メモリアクノレッジ信号をアサートしてロードバッファ部１００に出力する。
【００１９】
図２は、ロードバッファ部１００の構成図である。
ロードバッファ部１００は、上記のように、ロードデータバッファ部１０１と、ロードバッファ制御部１０２とで構成されている。
ロードデータバッファ部１０１は、本実施形態１では、４語のデータレジスタ（ＬＢ０〜３）、ロードバッファ入力セレクタ１０１ａ、およびロードバッファ出力セレクタ１０１ｂとで構成されるが、本発明においてはデータ語数は４語に限定されるものではなく、１語以上任意の語数をとることが可能である。
【００２０】
実施形態１および実施形態２では、ロードデータバッファ部１０１は４語のメモリデータを一時的に格納することが可能で、メモリ装置４００から読み出した１語のデータ、あるいは連続的に読み出した２〜４語のデータを格納する。ＣＰＵ３００からのロード命令実行時に、これらのデータレジスタＬＢ０〜３内に保存されているデータが、ＣＰＵ３００からのアドレスで指定されるメモリアドレスに格納されているデータのコピーを含む場合には、メモリ装置４００からデータ読み出しは行わずに４つのデータレジスタＬＢ０〜３の出力のうち、ＣＰＵ３００で指定されるデータを格納する１つをロードバッファ出力セレクタ１０１ｂにて選択し、ロードデータとしてＣＰＵ３００に出力する。
【００２１】
また、ストア命令実行時において、そのストアデータのメモリアドレスと同一のメモリアドレスからデータを読み出し、データレジスタＬＢ０〜３にそのデータを格納してある場合には、データの一致性を保つために新たなストアデータを該当レジスタにも格納する必要がある。本実施形態では、以下これをストアバイパス動作と記す。ロードバッファ入力セレクタ１０１ａは、通常のメモリ装置４００からの読み出し時のリードデータとストアバイパス動作時のＣＰＵ３００からのストアデータとのいずれかを選択してデータレジスタＬＢ０〜３に出力するものである。
【００２２】
ロードバッファ制御部１０２は、ＣＰＵ３００およびメモリ装置４００に対する制御信号の入出力を行うと共に、ロードデータバッファ部１０１の制御を行う機能を有している。ロードバッファ制御部１０２からロードデータバッファ部１０１には、ストアバイパス信号、ＬＢ０〜３セット、およびロードアドレスオフセット信号が出力される。ストアバイパス信号はロードバッファ入力セレクタ１０１ａへの入力選択信号で“０”のときリードデータを、“１”のときストアデータを選択してＬＢ０〜３に出力する。ＬＢ０〜３セット信号はそれぞれデータレジスタＬＢ０〜３へのデータセット信号であり、この信号の立ち上がりエッジで入力データが新たに格納される。ＣＰＵ３００からのアドレスの下位２ビット（以下、スモールアドレスと記す）はロードバッファ出力セレクタ１０１ｂへの選択信号となり、ＬＢ０〜３の出力のうち１つを選択する。
【００２３】
図３は、ロードバッファ制御部１０２の構成図である。
図４、図５は、それぞれ図３におけるロードデータバッファ有効フラグ部およびＬＢ０〜３セット信号生成部の構成図である。
ロードバッファ制御部１０２は、ＣＰＵ３００、およびメモリ装置４００に対する制御信号の入出力を行うと共に、ロードデータバッファ部１０１の制御を行うもので、メモリアドレス一致検査部１０２ａ、ロードデータバッファ有効フラグ（以下Ｖフラグと記す）部１０２ｂ、ＬＢ０〜３セット信号生成部１０２ｃ、およびシーケンス制御部とから構成される。
【００２４】
即ち、これらの図に示すロードバッファ制御部１０２は、アンド回路１〜２１、オア回路３１〜３５、バッファ４１〜４４、ブロックアドレスバッファ４５、オフセットアドレスバッファ４６、タグレジスタ５１、Ｖ０レジスタ（Ｖ０）〜Ｖ３レジスタ（Ｖ３）、メモリリクエストレジスタ５２、スモールアドレスセレクタ６１、Ｖフラグセレクタ６２、スモールアドレスデコーダ７１、オフセットアドレスデコーダ７２、スモールアドレスデコーダ７３、オフセットアドレスカウンタ８１、比較器９１を備えている。
【００２５】
尚、図３中、Ａ１はアクノレッジ、Ａ２はラージアドレス（ブロックアドレス）、Ａ３はリード／ライト、Ａ４はリクエスト、Ａ５はスモールアドレスを示す。また、Ｂ１はメモリブロックアドレス、Ｂ２はメモリオフセットアドレス、Ｂ３はメモリリクエスト、Ｂ４はメモリリード／ライト、Ｂ５はメモリビジー、Ｂ６はストアバイパス、Ｂ７はメモリアクノレッジ、Ｂ８〜Ｂ１１はＬＢ０セット〜ＬＢ３セットを示している。
【００２６】
メモリアドレス一致検査部１０２ａは、タグレジスタ５１および比較器９１とで構成される。
タグレジスタ５１は、ＣＰＵ３００から入力されるアドレスのうち下位２ビットを除く信号（ラージアドレス）を一時的に格納するレジスタで、ロードデータバッファ部１０１に格納される１〜４語のデータのメモリ装置４００上に配置されているブロックアドレスを保持する。比較器９１は、Ｅｘ−ＮＯＲ回路であり、タグレジスタ５１に格納されるラージアドレス（ブロックアドレス）と、ＣＰＵ３００から入力されるアドレスのうち下位２ビットを除く値を比較し、両者が一致するか否かを検査する。つまり、ロード命令、あるいはストア命令実行時にＣＰＵ３００から入力されるブロックアドレスに配置されるデータの一部あるいは全部（４語）のコピーがロードデータバッファ部１０１に格納されているか否かを検査するものである。以下、上記検査結果が一致する場合をロードデータバッファヒット、そうでない場合をロードデータバッファミスと記す。
【００２７】
Ｖフラグ部１０２ｂは、図４に示すように、Ｖ０〜３レジスタ（Ｖ０〜３）、スモールアドレスセレクタ６１、スモールアドレスデコーダ７１、アンド回路３〜６、およびＶフラグセレクタ６２とで構成される。
Ｖ０〜３レジスタ（Ｖ０〜Ｖ３）は、ロードデータバッファ部１０１のＬＢ０〜３に格納されるメモリデータのコピーのうち、その内容が有効であるか否かをそれぞれ示すためのＶ０〜３フラグを格納する部分で、ロードデータヒット時にＣＰＵ３００から入力されるアドレスの下位２ビット（以下スモールアドレスと記す）で指定されるデータレジスタ、即ち、ＬＢ０〜３のうちのいずれか１つに対して該当するＶフラグが“１”である場合にはそのデータレジスタの内容が有効であることを示すものである。
【００２８】
一方、該当するＶフラグが“０”である場合には、ロードデータヒット時であってもＣＰＵ３００の要求するデータはデータレジスタＬＢ０〜３には格納されておらず、メモリ装置４００にアクセスを行い、データを読み出す必要がある。スモールアドレスセレクタ６１は、Ｖ０〜３レジスタＶ０〜Ｖ３のうち、Ｖフラグをセットすべきレジスタを選択するための２ビットの選択信号を選択するもので、メモリ装置４００から読み出したデータを、データレジスタＬＢ０〜３に格納する時には、オフセットアドレスカウンタ８１（シーケンス制御部）の出力を選択し、また、前記ストアバイパス動作時にはＣＰＵ３００から入力されるスモールアドレスを選択する。スモールアドレスデコーダ７１は、スモールアドレスセレクタ６１の出力をデコードする。アンド回路３〜６は、スモールアドレスデコーダ７１の出力（４出力のうち１つが“１”となる）とシーケンス制御部のオア回路３１の出力（後述）との論理積をそれぞれとるもので、これらの出力はＶ０〜３レジスタＶ０〜Ｖ３のセット入力にそれぞれ接続される。
【００２９】
オア回路３１出力がアサートされた時点でアンド回路３〜６のうちのいずれか１出力が“１”となり、この信号の立ち上がり時に該当するＶ０〜３レジスタＶ０〜Ｖ３のうち１つが“１”にセットされる。Ｖ０〜３レジスタＶ０〜Ｖ３の前記以外の３つはそれ以前の内容を保存する。Ｖ０〜３レジスタＶ０〜Ｖ３のリセット入力はシーケンス制御部のアンド回路９の出力（メモリリクエストレジスタ５２のセット入力：後述）に接続され、このアンド回路９の出力がアサートされた立ち上がり時点でＶ０〜３の内容は全て“０”となる。
Ｖフラグセレクタ６２は、Ｖ０〜３レジスタＶ０〜Ｖ３の４つの出力のうち１つを選択して出力するもので、ＣＰＵ３００から入力されるスモールアドレスを選択信号とする。前記ロードバッファヒット時に、このＶフラグセレクタ６３の出力が“１”の場合にはＣＰＵ３００がロード命令で要求するメモリデータのコピーが該当するロードデータバッファ部１０１に格納されていることを示す。
【００３０】
ＬＢ０〜３セット信号生成部１０２ｃは、図５に示すように、オフセットアドレスデコーダ７２、スモールアドレスデコーダ７３、アンド回路１４〜２１、およびオア回路３２〜３５とで構成され、ロードデータバッファＬＢ０〜３へのデータセット信号を生成するものである。
【００３１】
オフセットアドレスデコーダ７２は、シーケンス制御部のオフセットアドレスカウンタ８１の２ビットの出力をデコードするものである。尚、オフセットアドレスカウンタ８１はメモリ装置４００に対して読み出しを行う時のメモリアドレスの下位２ビットとなるもので、実際にメモリ装置４００からデータを読み出すメモリブロック内の位置（以下、これをメモリオフセットと記す）を示す。
【００３２】
アンド回路１４〜１７は、オフセットアドレスデコーダ７２の出力（４つの出力のうちいずれか１出力が“１”となる）と、シーケンス制御部のアンド回路１１（後述）出力との論理積をそれぞれとるもので、メモリ装置４００から読み出したリードデータをデータレジスタＬＢ０〜３の該当レジスタに格納するためのセット信号を生成する。
【００３３】
スモールアドレスデコーダ７３は、ＣＰＵ３００から入力される２ビットのスモールアドレスをデコードするもので、ストアバイパス動作時のメモリブロック内のデータ書き込み位置（メモリオフセット）に相当するデータレジスタＬＢ０〜３のうちの１つを選択するものである。
【００３４】
アンド回路１８〜２１は、スモールアドレスデコーダ７３の出力（４つの出力のうちいずれか１出力が“１”となる）と、シーケンス制御部のアンド回路１３（後述）出力との論理積をそれぞれとるもので、ストアバイパス動作時にＣＰＵ３００から入力されるストアデータをバイパスしてデータレジスタＬＢ０〜３の該当レジスタに格納するためのセット信号を生成する。
オア回路３２〜３５は、アンド回路１４〜１７、およびアンド回路１８〜２１の出力の論理和をそれぞれとるもので、オア回路３２〜３５の出力がＬＢ０〜３セット信号としてデータレジスタＬＢ０〜３にそれぞれ出力される。
【００３５】
シーケンス制御部は、ＣＰＵ３００およびメモリ装置４００に対する制御信号の入出力、メモリ装置４００に対する読み出し動作制御を行うと共に、ロードデータバッファ部１０１の動作制御を行うもので、図３に示すアンド回路１〜２，７〜１３、メモリリクエストレジスタ５２、バッファ４１〜４４、ブロックアドレスバッファ４５、オフセットアドレスバッファ４６、オア回路３１、オフセットアドレスカウンタ８１で構成される。
【００３６】
シーケンス制御部では、先ず、アンド回路１でＣＰＵ３００からのリクエスト信号と、リード／ライト信号の反転信号との論理積をとり、リードリクエスト信号を生成する。尚、リード／ライト信号は、“０”の場合はリード、“１”の場合はライトを示している。従って、リードリクエスト信号が“１”の時、ＣＰＵ３００からのロード命令実行であることを認識する。
【００３７】
また、アンド回路２ではＣＰＵ３００からのリクエスト信号、リード／ライト信号、およびメモリアドレス一致検査部１０２ａの比較器９１出力（以下、この出力をタグマッチ信号と記す）との論理積をとり、ストアバイパス信号を生成する。ストアバイパス信号がアサートされる場合にはストアバイパス動作を行う。即ち、ライト指示でかつ、ブロックアドレスが一致したため、ストアバイパス動作を行うものである。
【００３８】
アンド回路７は、アドレス一致検査部１０２ａの比較器９１出力と、Ｖフラグ部１０２ｂのＶフラグセレクタ６２出力であるバリッド信号との論理積をとる。アンド回路７の出力が“１”の場合は、ＣＰＵ３００から入力されるアドレスに配置されるメモリ装置４００内のデータのコピーがデータレジスタＬＢ０〜３の該当レジスタに存在することを示す。即ち、ロードデータバッファヒットで、かつ、Ｖフラグが“１”である。
【００３９】
アンド回路８では、アンド回路７の出力と、アンド回路１の出力（リードリクエスト信号）との論理積をとる。アンド回路８の出力が“１”の場合にはメモリ装置４００からのデータ読み出しは行わず、この信号をバッファ４１で駆動アクノレッジ信号としてＣＰＵ３００に出力する。この時、図２のロードバッファ部１００内のロードバッファ出力セレクタ１０１ｂでは、データレジスタＬＢ０〜３のうち、ＣＰＵ３００から入力されるスモールアドレスで指定されるデータレジスタ出力を選択し、ロードデータとしてＣＰＵ３００に出力する。
【００４０】
ここで、アクノレッジ信号とリクエスト信号とはハンドシェイクの関係にある。即ち、ＣＰＵ３００にてリクエスト信号がアサートされ、メモリバッファ装置が動作を行う。これが完了した時点でメモリバッファ装置にてアクノレッジ信号がアサートされる。ＣＰＵ３００ではアクノレッジ信号がアサートされたことによりリクエスト信号をネゲートする。メモリバッファ装置ではリクエスト信号がネゲートされたことによりアクノレッジ信号をネゲートする。ＣＰＵ３００ではアクノレッジ信号がネゲートされている状態において、次のメモリリクエストをアサートする。
このようにメモリリクエスト信号、およびアクノレッジ信号は、ＣＰＵ３００、およびメモリバッファ装置間の１語のデータアクセス毎の動作の同期をとるために使用される。
【００４１】
アンド回路９では、アンド回路７の出力の反転信号と、アンド回路１の出力であるリードリクエスト信号、およびメモリビジィの反転信号との論理積をとる。この出力は、ＣＰＵ３００からのロード命令で読み出す必要のあるデータがロードデータバッファ部１０１に存在せず、かつ、その時点でメモリ装置４００がアクセス可能な状態にあることを示す。
メモリビジィ信号はロードバッファ部１００およびストアバッファ部２００との共通信号である。そして、両者のうちいずれかがメモリ装置４００にアクセス中である時にアサートされるアンド回路９の出力の立ち上がり時点で、メモリリクエストレジスタ５２が“１”にセットされる（以下、“１”にセットされることを単にセットされると記し、“０”にセットされることをリセットされると記す）。つまり、ロードデータバッファミスであるため、ＣＰＵ３００の要求するデータをメモリ装置４００から読み出す必要があり、メモリリクエストレジスタ５２をセットすることでメモリ装置４００に起動をかける。
【００４２】
アンド回路９の出力は、更にタグレジスタ５１のクロック入力、Ｖ０〜３レジスタＶ０〜Ｖ３のリセット入力、およびオフセットアドレスカウンタ８１のロード入力に接続される。タグレジスタ５１は、アンド回路９の出力のアサート時点、即ち、メモリリクエストレジスタ５２のセット時点でＣＰＵ３００から入力されるラージアドレスを新たに格納する。
タグレジスタ５１の出力は、メモリリクエストレジスタ５２の出力であるＭリクエスト信号がアサートされている間ブロックアドレスバッファ４５により駆動され、メモリブロックアドレスとしてメモリ装置４００に出力される。また、Ｖ０〜３レジスタはメモリ装置４００に対する新たなメモリアクセスを開始する時点、即ち、アンド回路９の出力のアサート時点に全てクリアされ、その内容は“０”となる。
【００４３】
オフセットアドレスカウンタ８１は、アンド回路９の出力のアサート時点にＣＰＵ３００から入力される２ビットのスモールアドレスをセットする。オフセットアドレスカウンタ８１の出力は、オフセットアドレスバッファ４６により駆動され、メモリ装置４００にメモリオフセットアドレスとして出力される。また、この信号はオフセットアドレスデコーダ７２に入力され、メモリ装置４００からのリードデータをロードデータバッファ部１０１に格納する時のＬＢ０〜３の選択信号となる。更に、この信号はスモールアドレスセレクタ６１に入力され、メモリ装置４００に対するリードアクセスを行った際のＶフラグをセットする時のＶ０〜３レジスタＶ０〜Ｖ３の選択信号となる。
【００４４】
メモリリクエストレジスタ５２の出力であるＭリクエスト信号は、アンド回路１２において、メモリアクノレッジの反転信号との論理積をとり、バッファ４２により駆動され、メモリリクエスト信号としてメモリ装置４００に出力される。メモリアクノレッジ信号はメモリ装置４００から入力される信号で、この信号がアサートされるとメモリ装置４００での所定の動作が完了したことを示す。また、メモリリクエスト信号はロードバッファ部１００およびストアバッファ部２００との共通信号であり、両者のうちいずれかがメモリ装置４００に対してアクセス要求していることを示す。
【００４５】
メモリリクエスト信号とメモリアクノレッジ信号はハンドシェイクの関係にある。即ち、メモリバッファ装置（ロードバッファ部１００またはストアバッファ部２００）にてメモリリクエスト信号がアサートされ、メモリ装置４００が動作を行う。これが完了した時点でメモリ装置４００にてメモリアクノレッジ信号がアサートされる。メモリバッファ装置ではメモリアクノレッジ信号がアサートされたことにより、メモリリクエスト信号をネゲートする。メモリ装置４００ではメモリリクエスト信号がネゲートされたことにより、メモリアクノレッジ信号をネゲートする。メモリバッファ装置ではメモリアクノレッジ信号がネゲートされている状態において次のメモリリクエストをアサートする。このようにメモリリクエスト信号、およびメモリアクノレッジ信号は、メモリバッファ装置、およびメモリ装置４００の間の１語のデータアクセス毎の動作の同期をとるために使用される。従って、前記２つの信号は毎メモリサイクルにオンオフする。
【００４６】
Ｍリクエストの反転信号はバッファ４３により駆動され、メモリリード／ライト信号としてメモリ装置４００に出力される。メモリリード／ライト信号はＭリクエスト信号が“１”の間“０”となる。また、Ｍリクエスト信号はバッファ４４により駆動され、メモリビジィ信号をアサートする。メモリリード／ライト信号、およびメモリビジィ信号は毎メモリサイクルにオンオフせず、Ｍリクエスト信号がアサートされている間駆動され続ける。これらは、メモリバッファ装置とメモリ装置４００の間のメモリブロック内の連続メモリアクセスを行うために１〜４メモリサイクルの間アサートされる。
【００４７】
Ｍリクエスト信号は、更にアンド回路１１の入力、およびスモールアドレスセレクタ６１の選択入力に接続される。アンド回路１１ではＭリクエスト信号とメモリアクノレッジ信号との論理積がとられる。この出力はリードアクノレッジ信号としてこの信号がアサートされたことによりメモリ装置４００におけるリードアクセス動作が完了したことを示す。スモールアドレスセレクタ６１は、Ｖ０〜３レジスタのうち、いずれか１つを選択して、これをセットするもので、メモリ装置４００に対するリードアクセスの時にはオフセットアドレスカウンタ８１の出力を選択し、ストアバイパスの時にはＣＰＵ３００から入力されるスモールアドレスを選択してスモールアドレスデコーダ７１に出力する。このための選択信号としてＭリクエスト信号が使用される。
【００４８】
アンド回路１１の出力であるリードアクノレッジ信号は、アンド回路１０の入力、オア回路３１の入力、オフセットアドレスカウンタ８１のクロック入力、およびアンド回路１４〜１７の入力に接続される。アンド回路１０ではリードアクノレッジ信号とオフセットアドレスデコーダ７２の出力３（入力信号が“１１”の時アサートされる）との論理積をとる。アンド回路１０の出力はリードダン信号で、この信号のアサートにより、メモリ装置４００からＣＰＵ３００が要求するデータからリードアクセスを始めてそのメモリブロックの最大メモリアドレス、即ち、メモリアドレスの下位２ビットが“１１”まで連続してリードアクセスが完了したことを示す。
【００４９】
リードダン信号はメモリリクエストレジスタ５２のリセット入力に入力され、この信号の立ち上がり時点でメモリリクエストレジスタ５２はリセットされる。そして出力のＭリクエスト信号はネゲートされる。
オア回路３１ではリードアクノレッジ信号とアンド回路１３の出力の論理和がとられる。オア回路３１の出力は、Ｖフラグ部１０２ｂのアンド回路３〜６に入力され、Ｖ０〜３レジスタＶ０〜Ｖ３へのセット入力のアサートされるタイミング信号となる。
【００５０】
アンド回路１１の出力であるリードアクノレッジ信号は、メモリ装置４００に対してリードアクセスを行う場合のＶフラグのセットタイミング信号として使用される。オフセットアドレスカウンタ８１は、メモリ装置４００に出力するオフセットアドレスの生成を行うと共に、連続してメモリアクセスを行う時のサイクル数を計数するために使用する。本実施形態１では、メモリアクセスはロードバッファミスとなったメモリアドレスからそのメモリブロックの最大アドレスまでに配置されるデータを連続してリードアクセスしてロードデータバッファ部１０１に格納するとしている。
【００５１】
アンド回路１３は、ストアバイパス信号とアクノレッジ信号との論理積をとる。この時のアクノレッジ信号はストア命令実行時にストアバッファ部２００で駆動されアサートされる。アンド回路１３の出力は、オア回路３１の入力およびＬＢ０〜３セット信号生成部１０２ｃのアンド回路１８〜２１の入力に接続される。オア回路３１へは、ストアバイパス時のＶフラグのセットタイミング信号として入力される。アンド回路１８〜２１ではストアバイパス時にＣＰＵ３００から入力されるストアデータをバイパスしてロードデータバッファ部１０１に格納するためのＬＢ０〜３セット信号をアサートするタイミング信号となる。
【００５２】
図６は、ストアバッファ部２００の構成図である。
上述したように、ストアバッファ部２００は、ストアデータバッファ部２０１と、ストアバッファ制御部２０２とで構成される。
ストアデータバッファ部２０１はキュー（ＦＩＦＯ：先入れ先出しメモリ）で構成される。本実施形態では４語のデータレジスタ（ＳＢ０〜３）、４つのスモールアドレスレジスタ（各２ビット：ＳＢ０〜３Ａ）、および３つのデータセレクタ（ＳＢ１〜３Ｂ）を直列に接続して、ストアデータとその書き込み先メモリアドレスの下位２ビット、即ち、スモールアドレスとを格納するキューの部分、およびＣＰＵ３００から入力されたスモールアドレスの内容とスモールアドレスレジスタＳＢ０〜３Ａに格納される既にキューに入れられているスモールアドレスの内容との比較を行うマッチャＳＢ０〜３Ｃとで構成されるが、本発明においてはデータ語数は４語に限定されるものではなく、１語以上任意の語数をとることが可能である。
【００５３】
ＣＰＵ３００からのストア命令実行時に入力されるラージアドレス、即ち、メモリアドレスの下位２ビットを除いた値と、前記キューに保存されているデータの書き込み先メモリブロックのアドレス、即ちメモリブロックアドレスが等しい場合には、メモリ装置４００に対してデータ書き込みは行わずにキューの最後尾に新たなストアデータと書き込み先メモリブロック内のオフセットアドレス（以下、単にオフセットアドレスと記す）、即ち、ＣＰＵ３００から入力されるスモールアドレスの内容を書き込む。
【００５４】
この時、既にキューに格納されているデータ、およびオフセットアドレスは１語分キューの先頭方向にシフトされる。メモリブロックアドレス、およびオフセットアドレスの両方がそれぞれＣＰＵ３００から入力されるラージアドレス、およびスモールアドレスに等しい場合、即ち、ストア命令で与えられたメモリアドレスと同一のメモリアドレスへのストアデータが既にキューに格納されている場合には、そのデータは後続するストアデータで上書きされる。即ち、実際にメモリ装置４００には書き込まれずに同一メモリアドレスに対する新たなストアデータがキューに格納される。
【００５５】
ラージアドレスとメモリブロックアドレスの一致検査はストアバッファ制御部２０２にて行われ、スモールアドレスとメモリオフセットアドレスの一致検査はマッチャＳＢ０〜３Ｃにて行われる。マッチャＳＢ０〜３Ｃのうちいずれかで一致が確認された場合には、一致したストアバッファＳＢ（データレジスタＳＢ０〜３、およびスモールアドレスレジスタＳＢ０〜３Ａに対する総称とする）に相当するマッチャＳＢ０〜３Ｃのいずれかがアサートされる。
データセレクタＳＢ０〜３Ｂは、キューに新たなデータを格納する場合には、そのストアバッファＳＢへの入力に対してはＣＰＵ３００から入力されるストアデータ、およびスモールアドレスを選択し、それ以外のストアバッファＳＢに対しては１つ後ろのストアバッファＳＢの出力を選択して出力する。
【００５６】
ストアバッファ制御部２０２は、ＣＰＵ３００、およびメモリ装置４００に対する制御信号の入出力を行うと共に、ストアデータバッファ部２０１の制御を行う。
ストアバッファ制御部２０２からストアデータバッファ部２０１には、ＳＢ０〜３クロック信号、およびＳＢ１〜３セット信号が出力され、ストアデータバッファ部２０１からストアバッファ制御部２０２には、ＳＢ０〜３マッチ信号が出力される。ＳＢ０〜３クロック信号は、データレジスタＳＢ０〜３、およびスモールアドレスレジスタＳＢ０〜３Ａの各レジスタに対するクロック信号である。データレジスタＳＢ０〜３、およびスモールアドレスレジスタＳＢ０〜３Ａは、クロック信号の立ち上がり時点で入力を格納する。ＳＢ１〜３セット信号はデータセレクタＳＢ１〜３Ｂの選択信号で、“１”の時、ＣＰＵ３００から入力されるストアデータ、およびスモールアドレスを選択し、“０”の時、直列に接続される後続のレジスタの出力を選択する。ＳＢ０〜３マッチ信号は、マッチャＳＢ０〜３Ｃの出力信号でマッチャの入力同士が一致した場合には“１”となる。
【００５７】
図７は、ストアバッファ制御部２０２の構成図である。
図８は、図７におけるストアバッファ信号生成部２０２ｂの構成図である。
これらの図において、ストアバッファ制御部２０２は、ＣＰＵ３００、およびメモリ装置４００に対する制御信号の入出力を行うと共に、ストアデータバッファ部２０１の制御を行うもので、メモリアドレス一致検査部２０２ａ、ストアバッファ信号生成部２０２ｂ、およびシーケンス制御部とから構成される。
【００５８】
即ち、これらの図に示すストアバッファ制御部２０２は、アンド回路１〜１８、オア回路３１〜４０、バッファ４１〜４３、ブロックアドレスバッファ４４、タグレジスタ５１、メモリリクエストレジスタ５２、セレクタ６３〜６６、ライトバッファテールデコーダ７４、ライトバッファポインタ８２、比較器９１を備えている。
尚、図７中、Ａ１は、ラージアドレス、Ａ２はアクノレッジ、Ａ３はリクエスト、Ａ４はリード／ライト、Ａ５〜Ａ８はＳＢ０マッチ〜ＳＢ３マッチであり、Ｂ１はメモリブロックアドレス、Ｂ２はメモリリードライト、Ｂ３はメモリビジー、Ｂ４はメモリリクエスト、Ｂ５はメモリアクノレッジ、Ｂ６〜Ｂ８はＳＢ１セット〜ＳＢ３セット、Ｂ９〜Ｂ１２はＳＢ０クロック〜ＳＢ３クロックを示している。
【００５９】
メモリアドレス一致検査部２０２ａは、図３に示すロードバッファ制御部１０２のメモリアドレス一致検査部１０２ａと同一の構成で動作も同様であるため、タグレジスタ５１と比較器９１からなる構成の図示および動作の説明は省略する。
【００６０】
ストアバッファ信号生成部２０２ｂは、ＳＢ０〜３クロック、およびＳＢ１〜３セット信号を生成する回路であり、図８に示すように、ライトバッファテールデコーダ７４、アンド回路１２〜１４、オア回路３５〜４０、セレクタ６３〜６６、およびアンド回路１５〜１８で構成される。
ライトバッファテールデコーダ７４は２−４デコーダであり、シーケンス制御部のライトバッファポインタ８２で計数されるストアバッファＳＢで構成されるライトデータバッファキューの最後尾位置を示す２ビットの入力信号をデコードするもので、４つの出力のうちアサートされた１つに相当するストアバッファＳＢがキューの最後尾となる。
【００６１】
アンド回路１２〜１４は、ＳＢ１〜３セット信号を生成するもので、ライトバッファテールデコーダ７４の１〜３出力（入力が“０１”、“１０”、“１１”の時それぞれアサートされる）と、シーケンス制御部のアンド回路１の出力（後述）との論理積をそれぞれとるものである。ここで、アンド回路１２〜１４の出力のうち“１”の信号がある場合には、図６のデータセレクタＳＢ１〜３Ｂにおいて、ＣＰＵ３００から入力されるストアデータ、およびスモールアドレスが選択され、データレジスタＳＢ１〜３、およびスモールアドレスレジスタＳＢ１〜３Ａの該当レジスタに入力される。
【００６２】
一方、データレジスタＳＢ０、およびスモールアドレスレジスタＳＢ０Ａは、キューの入り口に設置されるため、後続のレジスタは入力に接続されない。従って、データレジスタＳＢ０、およびスモールアドレスレジスタＳＢ０Ａにデータを格納する場合には常にＣＰＵ３００から入力されるストアデータ、およびスモールアドレスが入力となる。
【００６３】
オア回路３５〜３７は、キューに新たなデータを格納する場合、およびキューの内容をシフトアウトしてメモリ装置４００に書き込む場合に、ストアバッファＳＢに出力するＳＢ０〜３クロック信号発生の選択を行う論理をとる部分である。新たなデータをキューに格納する場合にはライトバッファポインタ８２の値の示すレジスタよりも先に接続される、即ち、キューの先頭方向にあるストアバッファＳＢに対してクロック信号を供給する。また、キューの内容をシフトアウトしてメモリ装置４００に書き込みを行う場合についても、外部から新たに書き込むべきデータがＣＰＵ３００から入力されない限りは、既にキューに格納されているデータのみを先頭方向にシフトする。従って、この場合にもライトバッファポインタ８２の値の示すレジスタよりも先に接続される、即ち、キューの先頭方向にあるストアバッファＳＢに対してクロック信号を供給する。オア回路３５〜３７においてこのような論理をとることにより、キューの内容をメモリ装置４００に書き込む際にも無効なデータがキューに格納されることはなくなる。
【００６４】
オア回路３８〜４０では、既にキューに格納されているデータのメモリ装置４００内の書き込みメモリアドレスと同一のメモリアドレスに対するストア命令実行の場合のＳＢ０〜３クロック信号発生の選択を行う。この場合は、キュー内容の上書きを行うため、ストアデータバッファ部２０１から入力されるＳＢ０〜３マッチのうちアサートされる１〜４つの信号に応じてＳＢ０〜３クロック信号が生成される。
【００６５】
即ち、ストアバッファＳＢ０のみアサートされる場合にはＳＢ０クロックのみが生成され、ストアバッファＳＢ１のみ、あるいはストアバッファＳＢ０、ＳＢ１の両方がアサートされる場合には、ＳＢ０クロック、およびＳＢ１クロックが生成され、ストアバッファＳＢ２のみ、ストアバッファＳＢ２、ＳＢ１の両方、あるいはストアバッファＳＢ２、ＳＢ１、およびＳＢ０の３つがアサートされる場合には、ＳＢ０クロック、ＳＢ１クロック、およびＳＢ２クロックの３つが生成され、そして、ストアバッファＳＢ３のみ、ストアバッファＳＢ３、ＳＢ２の両方、ストアバッファＳＢ３、ＳＢ２、ＳＢ１の３つ、あるいはストアバッファＳＢ３、ＳＢ２、ＳＢ１、およびストアバッファＳＢ０の全てがアサートされる場合にはＳＢ０クロック、ＳＢ１クロック、ＳＢ２クロック、およびＳＢ３クロックの全てが生成される。
【００６６】
これにより、新たに書き込むデータがライトバッファテール信号（ライトバッファポインタ８２の出力）により示されるキューの最後尾に格納され、そして元のストアデータは後続のストアデータに上書きされることになる。
セレクタ６３〜６６は、前記２系統のＳＢ０〜３クロック発生選択回路を経て生成される信号の選択回路で、シーケンス制御部のアンド回路３の出力（後述）が“１”の場合、即ち、キューに格納されているストアデータの上書き時には、オア回路３８〜４０の出力、およびＳＢ３マッチ信号が選択され、アンド回路１５〜１８に出力される。一方、アンド回路３の出力が“０”の場合、即ち、キューに新たなストアデータを格納する場合、あるいはキューに格納されているストアデータを順次連続してメモリ装置４００に書き込む場合には、ライトバッファテールデコーダ７４の０出力、およびオア回路３５〜３７出力が選択されて、アンド回路１５〜１８に入力される。アンド回路１５〜１８は、これらセレクタ６３〜６６の出力と、シーケンス制御部のオア回路３４の出力（後述）との論理積をとり、ストアデータバッファ部２０１に出力するためのＳＢ０〜３クロックを生成する。オア回路３４の出力は、ストアバッファＳＢに与えるクロックのアサートタイミングを決定する信号である。
【００６７】
シーケンス制御部は、ＣＰＵ３００、およびメモリ装置４００に対する制御信号の入出力、メモリ装置４００に対する書き込み動作制御を行うと共に、ストアデータバッファ部の動作制御を行う。このシーケンス制御部は、図７に示すアンド回路１〜１１、オア回路３１〜３４、メモリリクエストレジスタ５２、バッファ４１〜４３、ブロックアドレスバッファ４４、ライトバッファポインタ８２で構成される。
【００６８】
シーケンス制御部では、先ず、アンド回路１で、ＣＰＵ３００からのリクエスト信号と、リード／ライト信号との論理積をとり、ライトリクエスト信号を生成する。ライトリクエスト信号が“１”の時、ＣＰＵ３００からのストア命令実行であることを認識する。また、オア回路３１は、ストアデータバッファ部２０１から入力されるＳＢ０〜３マッチ信号全ての論理和をとる。オア回路３１の出力はオフセットアドレスマッチ信号で、ストアデータバッファ部２０１（キュー）に新たにＣＰＵ３００から書き込み要求のあるメモリアドレスの下位２ビット、即ち、スモールアドレスと同一のメモリブロック内アドレス、更に言い替えれば、メモリオフセットアドレスに対するストアデータがキューに既に格納されている時にこの信号がアサートされる。
【００６９】
アンド回路２は、メモリアドレス一致検査部２０２ａの比較器９１出力と、オア回路３１の出力するオフセットアドレスマッチの反転信号との論理積をとる。アンド回路２の出力は、タグマッチ信号が“１”、即ち、タグレジスタ５１に格納されているメモリブロックアドレスの内容とＣＰＵ３００から入力されるラージアドレスの内容は同一であるが、スモールアドレスと前記キューのスモールアドレスレジスタＳＢ０〜３Ａに格納されるメモリオフセットアドレスの内容は一致しないことを意味する。つまり、キューに格納されるストアデータと同一のメモリブロックの新たなブロック内オフセットアドレスに書き込むストア命令が実行された場合である。この場合には、入力されるストアデータ、およびスモールアドレスの内容をキューに格納する。この時の格納先ストアバッファＳＢは、ライトバッファポインタ８２の出力であるライトバッファテール信号により示される。
【００７０】
アンド回路３は、メモリアドレス一致検査部２０２ａの比較器９１の出力と、前記のオフセットアドレスマッチ信号との論理積をとる。アンド回路３の出力は、ＣＰＵ３００から入力されたアドレスとタグレジスタ５１、およびキューに格納されているメモリアドレスが一致する場合にアドレスマッチ信号としてアサートされる。この場合には、既にキューに格納されているストアデータを上書きし、新たにＣＰＵ３００から入力されるストアデータをライトバッファテール信号で指定されるキューの最後尾に格納する。
【００７１】
アンド回路４は、メモリアドレス一致検査部２０２ａの比較器９１の出力の反転信号、アンド回路１の出力であるライトリクエスト信号、およびメモリビジィ信号との論理積をとる。メモリビジィ信号は、ロードバッファ部１００でも説明したように、ロードバッファ部１００、およびストアバッファ部２００との共通信号である。
【００７２】
アンド回路５は、アンド回路１の出力とアンド回路２の出力との論理積をとり、エンキュー信号を出力する。アンド回路６は、アンド回路１の出力とアンド回路３の出力との論理積をとり、オーバライト信号を出力する。アンド回路３の出力は、ストアバッファ信号生成部２０２ｂのセレクタ６３〜６６に対する選択信号として使用される。前記エンキュー信号は、オア回路３４、およびオア回路３２に出力される。前記オーバライト信号はオア回路３４に入力される。オア回路３４は、これら２つの信号とアンド回路１０の出力（後述）との論理和をとるもので、シフトタイミング信号を出力する。
【００７３】
シフトタイミング信号は、ストアバッファ信号生成部２０２ｂのアンド回路１５〜１８に入力され、ＳＢ０〜３クロック信号のアサートタイミングを与える。シフトタイミング信号は、更にアンド回路７に出力される。アンド回路７は、前記のライトリクエスト信号と、シフトタイミング信号との論理積をとり、バッファ４１により駆動され、アクノレッジ信号としてＣＰＵ３００に出力する。アンド回路４の出力は、メモリリクエストレジスタ５２のセット入力（Ｓ入力）、およびオア回路３２に出力される。メモリリクエストレジスタ５２では、セット入力の立ち上がり時点でセットされ、Ｍリクエスト信号をアサートする。Ｍリクエスト信号は、前記ロードバッファ制御部１０２のＭリクエスト信号と同様に、メモリ装置４００に対する書き込みアクセスを行うための起動信号となる。
【００７４】
Ｍリクエスト信号は、ブロックアドレスバッファ４４のイネーブル信号としてタグレジスタ５１の出力を駆動し、メモリラージアドレスをメモリ装置４００に出力し、バッファ４２により駆動され、メモリリード／ライト信号をメモリ装置４００に出力し、アンド回路１１に出力され、メモリ装置４００から入力されるメモリアクノレッジの反転信号との論理積をとり、バッファ４３により駆動され、メモリリクエスト信号としてメモリ装置４００に出力される。
【００７５】
メモリリクエスト信号、およびメモリアクノレッジ信号は、前記ロードバッファ部１００で記したようにハンドシェイク信号である。Ｍリクエスト信号は更にアンド回路１０に出力される。アンド回路１０は、Ｍリクエスト信号とメモリアクノレッジ信号との論理積をとり、ライトアクノレッジ信号を出力する。ライトアクノレッジ信号は、ストアバッファ部２００から出力されたメモリ書き込みアクセス要求のためのリクエスト信号に対する動作が完了したことを示す信号で、この信号の立ち上がり時点で前記メモリ動作が完了したと認識される。
【００７６】
アンド回路１０の出力、即ち、ライトアクノレッジ信号は、オア回路３４、アンド回路８、および、アンド回路９に出力される。オア回路３４は、シフトタイミング信号を生成するもので、ライトアクノレッジ信号がアサートされ、オア回路３４に入力される場合には、メモリ装置４００への書き込みアクセスが完了したことを示すもので、この時、シフトタイミング信号はアサートされ、アンド回路１５〜１８に出力されて、ＳＢ０〜３クロック信号のアサートタイミングを与える。また、シフトタイミング信号はアンド回路７に出力される。
ライトアクノレッジ信号がアサートされることによりシフトタイミング信号がアサートされ、そしてアンド回路７にてライトリクエストとの論理積出力がアサートされた場合は、メモリ装置４００への書き込みを伴うストア命令実行に対するアクノレッジ信号がアサートされ、バッファ４１で駆動され、ＣＰＵ３００に出力される。この場合のアクノレッジ信号は、ストアデータバッファ（キュー）の先頭の１語がメモリ装置４００に書き込み完了した時点でアサートされる。
【００７７】
アンド回路１０の出力、即ち、ライトアクノレッジ信号は、アンド回路８にてライトバッファテールデコーダ７４の３出力、即ち、ラストアクセス信号と論理積がとられ、また、アンド回路９にて前記ラストアクセスの反転信号との論理積がとられる。アンド回路８の出力は、メモリ装置４００へのストアデータバッファ（キュー）に格納されている古い（新たにＣＰＵ３００が書き込み要求しているデータの書き込み先メモリデータブロックとは異なる）メモリデータブロックに対する書き込みの最後のメモリアクセスの完了時にアサートされる。また、アンド回路９の出力は、上記メモリ書き込みの最後以外のメモリアクセスの完了時にアサートされる。アンド回路８の出力はライトダン信号で、メモリリクエストレジスタ５２のリセット入力、およびオア回路３３に出力される。また、アンド回路９の出力はオア回路３２に出力される。
【００７８】
メモリリクエストレジスタ５２は、リセット入力の立ち上がり時点でリセットされる。メモリリクエストレジスタ５２がリセットされることで、Ｍリクエスト信号がネゲートされ、これによりメモリ装置４００に対する１〜４回のメモリ書き込みを終了させると共に、メモリビジィ信号をネゲートする。オア回路３２は前記アンド回路４の出力、即ち、メモリリクエストレジスタ５２へのセット入力となる信号と、アンド回路９の出力との論理和をとるもので、出力はライトバッファポインタ８２へのアップ入力に接続される。また、オア回路３３は、前記アンド回路５の出力、即ち、エンキュー信号と、アンド回路８の出力、即ち、ライトダン信号との論理和をとるもので、出力はライトバッファポインタ８２へのダウン入力に接続される。
【００７９】
ライトバッファポインタ８２は、ストアデータバッファ（キュー）の最後尾を示すための２ビットのライトバッファテール信号を生成するものである。以下にライトバッファポインタ８２による計数動作を示す。ストアデータバッファは先頭位置（出口）から３、２、１、０の順に番号付けされる。したがってキューの構造上の入り口（最後尾とは限らない；最後尾は動作時のキューの入り口）は０である。また、キューの最後尾は通常次にデータを書き込むことのできるＳＢを示している。したがって、ライトバッファポインタはデータの挿入時に更新され（１つ番号が小さくなる）、次のデータ挿入に備え、またデータのメモリ装置４００への書き出し時に更新される（１つ番号が大きくなる）。
【００８０】
［ａ．初期状態、即ち、電源投入直後］
データは何も書き込まれていないので３となる。
［ｂ．タグレジスタの内容と同一のメモリブロックへのストア命令実行時］
（ｂ−１．スモールアドレスがスモールアドレスレジスタＳＢ０〜３Ａのいずれかと同一の場合）：データの上書きを行うので増減なし。
（ｂ−２．スモールアドレスがスモールアドレスレジスタＳＢ０〜３Ａのいずれとも同一でない場合）：データの挿入を行うので１減じられる。
【００８１】
［ｃ．タグレジスタの内容と異なるメモリブロックへのストア命令実行時］
▲１▼先ず、１増加される（キューへのデータ挿入、および元のキュー内容の先頭方向へのシフト、即ち、１語のキュー内容のシフトアウトへのポインタ準備）。
▲２▼メモリ装置４００への書き込みアクセスを行い、メモリアクノレッジがアサートされる毎に１増加される（キュー内容のシフトアウトへのポインタ準備。新たなメモリブロックへの書き込みデータが挿入される）。そして、ポインタの値が３になるまで増加は続く。
▲３▼ポインタの値が３の時のメモリ書き込みアクセス時のメモリアクノレッジ信号のアサート時に１減じられ２となり、メモリ書き込みアクセスは終了する。即ち、以前のメモリブロックへの書き込みデータが全てメモリ装置４００に書き込まれ、新たなメモリブロックへの書き込みデータがキューの先頭まで進み、ポインタの値は次のデータの挿入に備えて２となる（キューの先頭から２番目のＳＢ２を示す）。
【００８２】
上記説明において、ｂ−１の時にはアンド回路５の出力、即ち、エンキュー信号がアサートされ、ｃ−▲１▼の時には、アンド回路４の出力がアサートされ、ｃ−▲２▼の時にはアンド回路９の出力がアサートされ、そしてｃ−▲３▼の時にはアンド回路８の出力、即ち、ライトダン信号がアサートされて、オア回路３２、あるいはオア回路３３を経てライトバッファポインタ８２のアップ入力、あるいはダウン入力に出力され、ライトバッファポインタ８２にて必要な計数動作を行う。
【００８３】
［動作］
図９〜１１は、本実施形態１の動作を示す説明図であり、図９が、ロード時の動作、図１０、１１がストア時の動作を示している。
ロード命令実行時は、ロードバッファ部１００のタグレジスタ５１の内容とＣＰＵ３００から入力されるラージアドレスの内容の一致、あるいは不一致、および上記ラージアドレスの一致の場合のＶフラグの内容（“１”の時有効、“０”の時無効）により動作が異なる。
【００８４】
ストア命令実行時は、ストアバッファ部２００のタグレジスタ５１の内容とＣＰＵ３００から入力されるラージアドレスの内容の一致、あるいは不一致、および、これらとキューに格納されているメモリオフセットアドレスとＣＰＵ３００から入力されるスモールアドレスの内容の一致、あるいは不一致の組み合わせにより動作が異なる。更に、上記ストア命令実行時においてロードバッファ部１００のタグレジスタ５１の内容とＣＰＵ３００から入力されるラージアドレスの内容が一致、あるいは不一致の場合で更に動作が異なる。図９〜１１にはこれらの各々の組み合わせと動作が記されている。
【００８５】
図１２、図１３は、本実施形態１および後述する実施形態２におけるロード命令実行時のタイムチャートである。
図１２はバッファヒットの場合の動作で、この場合はメモリ装置４００に対して読み出しアクセスは行われず、ロードデータバッファ部１０１内の必要なデータが選択されＣＰＵ３００に出力される。図１２において、リクエスト信号とアクノレッジ信号はハンドシェイクの関係にある。また、ラージアドレス、スモールアドレス、およびリード／ライト信号はリクエスト信号がアサートされている間正しい値となっている。ロードデータはアクノレッジ信号の立ち上がり時点で正しい値となっている。
【００８６】
図１３はバッファミスの場合の動作で、この場合はメモリ装置４００に対して読み出しアクセスを行い、ＣＰＵ３００の要求するデータをＣＰＵ３００に出力すると共に、ロードデータバッファ部１０１に格納する。更に、ＣＰＵ３００はメモリ装置４００に読み出しアクセスを行ったメモリアドレス以降、そのメモリブロック（実施形態１、および後述する実施形態２では４語で構成される）の最後のデータまで連続してメモリ装置４００から読み出し、ロードデータバッファ部１０１の該当レジスタに格納する。ＣＰＵ３００に対するアクノレッジ信号のアサートおよびロードデータの出力は、最初のメモリ読み出しアクセスでメモリ装置４００から読み出したデータが入力された時点、即ち、最初のメモリリクエスト信号のアサートに対するメモリアクノレッジ信号のアサート時に確定する。
【００８７】
図１３ではスモールアドレスの内容が“００”の場合、即ち、当該メモリブロックの最初に配置されるデータに対してのロード命令実行時の動作を示す。この場合には、ロードバッファミスとなったメモリブロックの最初に配置されるデータから読み出しアクセスを行い、４語のメモリブロック全部を連続して読み出し、ロードデータバッファ部１０１の該当レジスタに順次格納する。図１３でリクエスト信号とアクノレッジ信号はハンドシェイクの関係にある。また、ラージアドレス、スモールアドレス、およびリード／ライト信号はリクエスト信号がアサートされている間正しい値となっている。更に、メモリブロックアドレス、メモリオフセットアドレス、メモリリード／ライト信号はメモリリクエスト信号がアサートされている間正しい値となっている。そして、メモリリードデータはメモリアクノレッジ信号の立ち上がり時点、およびＬＢ０〜３セット信号の立ち上がり時点で正しい値となっている。また、ロードデータはアクノレッジ信号の立ち上がり時点で正しい値となっている。
【００８８】
図１４、１５は、本実施形態１および後述する実施形態２のストア命令実行時のタイムチャートである。
図１４はバッファヒットの場合で、この場合にはメモリ装置４００に対する書き込みアクセスは行われず、ストアデータバッファ（キュー）に書き込みデータを格納するのみの動作を行う。図１４でリクエスト信号とアクノレッジ信号はハンドシェイクの関係にある。また、ラージアドレス、スモールアドレス、リード／ライト信号、およびストアデータはリクエスト信号がアサートされている間正しい値となっている。
【００８９】
図１５はバッファミスの場合の動作で、この場合はメモリ装置４００に対して連続して書き込みアクセスを行い、既にキューに格納されていた書き込みデータをメモリ装置４００の当該メモリブロックに対して書き込みアクセスを行うと共に、ＣＰＵ３００から入力されるストアデータを新たにキューに格納する。ＣＰＵ３００に対するアクノレッジ信号のアサートは、最初のメモリ書き込みアクセスでキューの先頭にあるデータをメモリ装置４００に書き込み完了した時点、即ち、最初のメモリリクエスト信号のアサートに対するメモリアクノレッジ信号のアサート時に確定する。図１５でリクエスト信号とアクノレッジ信号はハンドシェイクの関係にある。また、ラージアドレス、スモールアドレス、リード／ライト信号、およびストアデータはリクエスト信号がアサートされている間正しい値となっている。更に、メモリブロックアドレス、メモリオフセットアドレス、メモリリード／ライト信号、およびメモリライトデータはメモリリクエスト信号がアサートされている間、およびＳＢ０〜３クロックの立ち上がり時点で正しい値となっている。
【００９０】
［効果］
以上のように、本実施形態１は、複数語のロードデータバッファ部１０１、および複数語のストアデータバッファ部２０１（キュー）、およびこれらの制御部とからメモリバッファ装置を構成しているため、例えば、キャッシュメモリに比べてデータ格納のための別途のメモリ部を必要としない等、小規模の回路でメモリバッファ装置を構成することができる。その結果、ＣＰＵ３００の高動作周波数化に対して十分追従可能な動作速度が確保できると共に、ＣＰＵ３００と本発明のメモリバッファ装置とを含むＬＳＩのチップ面積を、従来技術によるＣＰＵとキャッシュメモリで構成されるＬＳＩに比べ大幅に削減することが可能で、ローコスト化および消費電力の低減化を図ることができる。
【００９１】
また、ロード命令実行時でバッファミスが発生した場合は、メモリ装置４００から複数語のメモリアクセス動作を行うため、ＣＰＵ３００のメモリ装置４００へのアクセス頻度を軽減でき、メモリスループットの向上を図ることができ、従って、プログラム実行性能の向上に寄与することができる。
【００９２】
更に、本実施形態１では、ロード命令実行時でバッファミスが発生した場合に、そのメモリアドレスから連続して同一メモリブロックの最終アドレスまでの読み出しアクセスを行い、ロードバッファ部１００に格納するようにしたので、次のような効果がある。
ミスを起こしたメモリアドレスから先の（メモリアドレスが増加する方向の）データのみを連続アクセスすることにより、例えば、配列演算といった前方参照頻度の高いプログラムの実行に対しては、ブロック全体を常に読みだす場合に比べてメモリアクセスサイクルを低減することができる。即ち、メモリ参照は直前のメモリ参照の対象アドレスから連続して、あるいは数語離れた前方（メモリアドレスの増加する方向）に対して行われる確率が高い場合には、直前のメモリ参照の対象アドレスよりも後方（メモリアドレスの減少する方向）のデータアクセスは稀であり、これらのデータを不必要にメモリ装置４００から読み出すことがないからである。
【００９３】
《実施形態２》
［構成］
本実施形態２において、全体構成は、図１に示した構成および図２に示した構成と図面上は同様である。また、ストアバッファ部については、図６、７、８に示した構成と同様であるため、これらの構成については省略する。
本実施形態が上記実施形態１と異なるのは、ロードバッファ制御部の構成であり、以下のようになっている。
【００９４】
図１６は、実施形態２におけるロードバッファ制御部の構成図である。
即ち、本実施形態では、上記実施形態１のロードバッファ制御部１０２に対し、メモリアクセスカウンタ８３を新たに設置する点が異なる。この点以外の構成については実施形態１と同様であるため、対応する部分に同一符号を付してその説明を省略する。
【００９５】
本実施形態２と上記実施形態１との違いはロード命令実行時にバッファミスとなった場合の動作のみである。このような場合、実施形態１ではミスを発生したメモリアドレスから連続して当該メモリブロックの最終アドレスのデータまでをメモリ装置４００から連続読み出しアクセスしてロードデータバッファ部１０１の該当レジスタに格納する動作を行った。これに対し、実施形態２ではミスを発生したメモリアドレスから連続して当該メモリブロックの最終アドレスのデータ、および当該メモリブロックの先頭アドレスのデータからミスを発生したメモリアドレスの直前のメモリアドレスのデータまで、即ち、１メモリブロック全体のデータをメモリ装置４００から読み出しアクセスして、ロードデータバッファ部１０１の該当レジスタに格納する動作を行う。
【００９６】
このために、図１６に示すようにオフセットアドレスカウンタ８１、およびメモリアクセスカウンタ８３の２つのカウンタを設置する。オフセットアドレスカウンタ８１は、読み出しアクセスを行うメモリブロック内のオフセットアドレスを生成し、また、１メモリブロック分のデータ読み出しアクセスを行うためのアクセスサイクル数を計数する。そして、メモリアクセスカウンタ８３のカウントクロック入力はオフセットアドレスカウンタ８１のカウントクロック入力と同一信号で、図３に示すロードバッファ制御部１０２のリードアクノレッジ信号と同一である。
【００９７】
メモリアクセスカウンタ８３のロード入力はオフセットアドレスカウンタ８１のロード入力と同一信号で、図３に示すロードバッファ制御部１０２のメモリリクエストレジスタ５２へのセット入力と同一である。この時、メモリアクセスカウンタ８３には必ず“００”がロードされる。メモリアクセスカウンタ８３のキャリー出力は、この２ビットのカウンタがオーバフローした時、即ち、４となった時にアサートされる。これにより１メモリブロック分のデータである４語のデータがメモリ装置４００から連続して読み出されたことが認識される。この信号はラストアクセス信号で、アンド回路１０でリードアクノレッジ信号と論理積がとられ、その出力がメモリリクエストレジスタ５２のリセット信号となり、メモリリクエストレジスタ５２をリセットする。尚、ラストアクセス信号は図３に示す実施形態１のロードバッファ制御部１０２と同一の役割である。
このメモリアクセスカウンタ８３を設置することにより、バッファミスの場合には必ずミスを発生したメモリブロック全体、即ち、４語のデータアクセスを連続してメモリ装置４００に対して行う。
【００９８】
図１７〜１９は、本実施形態２の動作を示す説明図であり、図１７がロード時の動作、図１８、１９がストア時の動作を示している。
本実施形態２のメモリバッファ装置の動作は、図９〜１１に示す実施形態１のメモリバッファ装置の動作と比べてロード命令実行時の動作のみ異なる。
実施形態２では、ロードバッファミスの場合に必ずミスとなったメモリアドレスを含むメモリブロック全体（４語）をメモリ装置４００から読み出しアクセスし、ロードデータバッファ部１０１の該当レジスタに格納するため、以降のメモリアクセスにおいて、ロードＶフラグは必ず“１”となる。従って、ロードバッファ部１００のタグレジスタ５１の内容がＣＰＵ３００から入力されるラージアドレスの内容と一致する場合には必ずバッファヒットとなり、この場合にはロードデータバッファ部１０１の該当レジスタからデータをＣＰＵ３００に出力する。
【００９９】
一方、上記タグレジスタ５１の内容とＣＰＵ３００から入力されるラージアドレスの内容が一致しない場合にはバッファミスであるため、ミスとなったメモリアドレスから連続してメモリ装置４００から１メモリブロック分のデータを読み出し、最初に読み出したリードデータをＣＰＵ３００に出力すると共に、１メモリブロック分のデータ（４語）をロードデータバッファ部１０１の該当レジスタに格納する。ストア命令実行時の動作は図９〜１１に示す実施形態１のメモリバッファ装置の動作と同一である。
【０１００】
また、実施形態２におけるロード命令実行時およびストア命令実行時の各信号のタイミングについては、図１２〜図１５で示した状態と同様であるため、その説明は省略する。但し、実施形態２では、スモールアドレスの内容が“００”〜“１１”のいずれの値の場合であってもロードバッファミスとなったメモリブロックの最初に配置されるデータから読み出しアクセスを行い、４語のメモリブロック全部を連続して読み出しロードデータバッファの該当レジスタに順次格納する。
【０１０１】
［効果］
以上のように、実施形態２では、上記実施形態１と同様に、ローコスト化および消費電力の低減化を図ることができるといった効果を奏すると共に、ロード命令実行時でバッファミスが発生した場合に、ミスとなったメモリアドレスを含む１メモリブロック全体のデータの読み出しアクセスを行ってロードバッファ部１００に格納するようにしたので、次のような効果がある。
ミスを起こしたメモリアドレスを含むメモリブロック全体を連続アクセスすることにより、例えば、スタックを用いた演算といった前方参照頻度と後方参照頻度とが同程度に高いプログラムの実行に対しては、ブロック全体を常に読みだすことで全体のバッファミス回数を低減することができる。即ち、メモリ参照は直前のメモリ参照の対象アドレスから連続して、あるいは数語離れた前方（メモリアドレスの増加する方向）、および後方（メモリアドレスの減少する方向）に対して同程度のメモリアクセス確率がある場合には、１度に連続アクセスしてバッファに格納することが可能である最大語数のデータをメモリ装置４００から連続してアクセスすることで、メモリスループットを最大とすることができる。
【０１０２】
【発明の効果】
以上説明したように、第１発明のメモリバッファ装置によれば、複数語のレジスタを有するロードデータバッファ部と、複数語の先入れ先出しバッファを有するストアデータバッファ部、およびこれらの制御部とから構成しているため、例えば、キャッシュメモリに比べてデータ格納のための別途のメモリ部を必要としない等、小規模の回路でメモリバッファ装置を構成することができる。その結果、ＣＰＵの高動作周波数化に対して十分追従可能な動作速度が確保できると共に、ＣＰＵと本発明のメモリバッファ装置とを含むＬＳＩのチップ面積を、従来技術によるＣＰＵとキャッシュメモリで構成されるＬＳＩに比べ大幅に削減することが可能で、ローコスト化および消費電力の低減化を図ることができる。
【０１０３】
また、ロード命令実行時でバッファミスが発生した場合は、メモリ装置から複数語のメモリアクセス動作を行うため、ＣＰＵのメモリ装置へのアクセス頻度を軽減でき、メモリスループットの向上を図ることができ、従って、プログラム実行性能の向上に寄与することができる。
【０１０４】
更に、ロード命令実行時でバッファミスが発生した場合に、そのメモリアドレスから連続して同一メモリブロックの最終アドレスまでの読み出しアクセスを行い、ロードバッファ部に格納するようにしたので、次のような効果がある。
ミスを起こしたメモリアドレスから先の（メモリアドレスが増加する方向の）データのみを連続アクセスすることにより、例えば、配列演算といった前方参照頻度の高いプログラムの実行に対しては、ブロック全体を常に読みだす場合に比べてメモリアクセスサイクルを低減することができる。
【０１０５】
第２発明のメモリバッファ装置によれば、第１発明と同様に、複数語のレジスタを有するロードデータバッファ部と、複数語の先入れ先出しバッファを有するストアデータバッファ部、およびこれらの制御部とから構成しているため、第１発明と同様の効果がある。また、ロード命令実行時でバッファミスが発生した場合に、ミスとなったメモリアドレスを含む１メモリブロック全体のデータの読み出しアクセスを行ってロードバッファ部に格納するようにしたので、次のような効果がある。即ち、ミスを起こしたメモリアドレスを含むメモリブロック全体を連続アクセスすることにより、例えば、スタックを用いた演算といった前方参照頻度と後方参照頻度とが同程度に高いプログラムの実行に対しては、ブロック全体を常に読みだすことで全体のバッファミス回数を低減することができる。
【０１０６】
第３発明のメモリバッファ装置によれば、中央処理装置からのデータ書き込み要求に対して、該当データが、ロードデータバッファ部内のレジスタのいずれかに存在する場合は、このデータを更新するようにしたので、このような場合は、メモリ装置にアクセスする必要がなく、従って、プログラム実行性能を向上させることができる。
【図面の簡単な説明】
【図１】本発明のメモリバッファ装置の実施形態１、２を示す構成図である。
【図２】本発明のメモリバッファ装置のロードバッファ部の構成図である。
【図３】本発明のメモリバッファ装置の実施形態１のロードバッファ制御部の構成図である。
【図４】本発明のメモリバッファ装置の実施形態１におけるロードデータバッファ有効フラグ部の構成図である。
【図５】本発明のメモリバッファ装置の実施形態１におけるＬＢ０〜３セット信号生成部の構成図である。
【図６】本発明のメモリバッファ装置の実施形態１におけるストアバッファ部の構成図である。
【図７】本発明のメモリバッファ装置の実施形態１におけるストアバッファ制御部の構成図である。
【図８】本発明のメモリバッファ装置の実施形態１におけるストアバッファ信号生成部の構成図である。
【図９】本発明のメモリバッファ装置の実施形態１における動作（ロード時）の説明図である。
【図１０】本発明のメモリバッファ装置の実施形態１における動作（ストア時）の説明図（その１）である。
【図１１】本発明のメモリバッファ装置の実施形態１における動作（ストア時）の説明図（その２）である。
【図１２】本発明のメモリバッファ装置におけるロード命令実行時のタイムチャート（バッファヒット）である。
【図１３】本発明のメモリバッファ装置におけるロード命令実行時のタイムチャート（バッファミス）である。
【図１４】本発明のメモリバッファ装置におけるストア命令実行時のタイムチャート（バッファヒット）である。
【図１５】本発明のメモリバッファ装置におけるストア命令実行時のタイムチャート（バッファミス）である。
【図１６】本発明のメモリバッファ装置の実施形態２におけるロードバッファ制御部の構成図である。
【図１７】本発明のメモリバッファ装置の実施形態２における動作（ロード時）の説明図である。
【図１８】本発明のメモリバッファ装置の実施形態２における動作（ストア時）の説明図（その１）である。
【図１９】本発明のメモリバッファ装置の実施形態２における動作（ストア時）の説明図（その２）である。
【符号の説明】
１００  ロードバッファ部
１０１  ロードデータバッファ部
１０２  ロードバッファ制御部
２００  ストアバッファ部
２０１  ストアデータバッファ部
２０２  ストアバッファ制御部
【図１】
0003614946.tif 000002
【図２】
0003614946.tif 000003
【図３】
0003614946.tif 000004
【図４】
0003614946.tif 000005
【図５】
0003614946.tif 000006
【図６】
0003614946.tif 000007
【図７】
0003614946.tif 000008
【図８】
0003614946.tif 000009
【図９】
0003614946.tif 000010
【図１０】
0003614946.tif 000011
【図１１】
0003614946.tif 000012
【図１２】
0003614946.tif 000013
【図１３】
0003614946.tif 000014
【図１４】
0003614946.tif 000015
【図１５】
0003614946.tif 000016
【図１６】
0003614946.tif 000017
【図１７】
0003614946.tif 000018
【図１８】
0003614946.tif 000019
【図１９】
0003614946.tif 000020