(57)【要約】【課題】中央処理装置によりフェッチされる命令データのフェッチ効率を向上する。【解決手段】各プリフェッチバッファは、分岐アドレスを格納するタグレジスタおよび命令データを格納するデータレジスタを有する。プリフェッチバッファは、通常動作期間に書き換え可能な複数の第１プリフェッチバッファと、通常動作期間に書き換えが禁止される少なくとも１つの第２プリフェッチバッファとで構成される。このため、中央処理装置から分岐アドレスが頻繁に出力される場合にも、第２プリフェッチバッファが書き換えられることを防止できる。この結果、中央処理装置の命令フェッチ効率を向上でき、システム全体のパフォーマンスを向上できる。特に、分岐アドレスが頻繁に発生し、そのうち特定の分岐アドレスが繰り返し発生するシステムで、フェッチ効率を向上できる。【選択図】      図１
2005018553.tif 000002
【特許請求の範囲】
【請求項１】
中央処理装置から受ける内部アドレスが分岐アドレスのときに、その分岐アドレスをアクセスアドレスとして外部メモリに出力するとともに、次の分岐アドレスを受けるまでアクセスサイクル毎にアドレスを１ずつ増加させ、外部メモリに格納される命令データをプリフェッチするための前記アクセスアドレスとして出力するアドレス生成部と、
分岐アドレスを格納するタグレジスタおよびこの分岐アドレスが示す前記外部メモリ内の領域に格納されている命令データを格納するデータレジスタを有する複数のプリフェッチバッファと、
前記内部アドレスが前記タグレジスタに保持されている分岐アドレスと一致するときに、タグヒット信号を活性化する第１アドレス比較部と、
前記タグヒット信号の活性化時に、ヒットした分岐アドレスが格納されている前記タグレジスタに対応する前記データレジスタから読み出される命令データを前記中央処理装置に出力し、前記タグヒット信号の非活性化時に、前記外部メモリから読み出される前記分岐アドレスに対応する命令データを前記中央処理装置に出力するデータ選択部と、
前記中央処理装置が前記内部アドレスを順次出力する通常動作期間に、前記アドレス生成部、前記第１アドレス比較部および前記データ選択部の動作を制御する全体制御部とを備え、
前記プリフェッチバッファは、前記通常動作期間に書き換え可能な複数の第１プリフェッチバッファと、指定された分岐アドレスおよびこの分岐アドレスが示す前記外部メモリ内の領域に格納されている命令データが予め格納され、前記通常動作期間に書き換えが禁止される少なくとも１つの第２プリフェッチバッファとで構成されていることを特徴とするメモリインタフェース回路。
【請求項２】
請求項１記載のメモリインタフェース回路において、
前記プリフェッチバッファのうち前記第１プリフェッチバッファとして使用する数または前記第２プリフェッチバッファとして使用する数を登録するスプリットレジスタを備え、
前記各プリフェッチバッファは、前記通常動作期間前の初期設定期間に、前記スプリットレジスタの値に応じて、前記第１プリフェッチバッファまたは第２プリフェッチバッファに割り当てられることを特徴とするメモリインタフェース回路。
【請求項３】
請求項１記載のメモリインタフェース回路において、
前記全体制御部は、前記通常動作期間前の初期設定期間に、前記中央処理装置に接続されるデータバスを介して分岐アドレスを受け、受けた分岐アドレスを前記第２プリフェッチバッファの前記タグレジスタに格納するとともに、この分岐アドレスが示す前記外部メモリ内の領域に格納されている命令データを前記第２プリフェッチバッファの前記タグレジスタに対応する前記データレジスタに格納することを特徴とするメモリインタフェース回路。
【請求項４】
請求項３記載のメモリインタフェース回路において、
前記中央処理装置からの書き込みによりセットされるスタートレジスタを備え、
前記全体制御部は、前記初期設定期間に、前記データバスを介して受けた分岐アドレスを前記第２プリフェッチバッファの前記タグレジスタに格納した後、前記スタートレジスタのセットに応答して、前記第２プリフェッチバッファの前記タグレジスタに保持されている分岐アドレスを前記アドレス生成部を介して前記外部メモリに出力し、前記外部メモリから読み出される命令データを前記第２プリフェッチバッファの前記タグレジスタに対応するデータレジスタに格納することを特徴とするメモリインタフェース回路。
【請求項５】
請求項１記載のメモリインタフェース回路において、
前記アクセスアドレスに応じて前記外部メモリからプリフェッチされる命令データを一時的に格納するデータバッファと、
前記内部アドレスが前記外部メモリからプリフェッチするための前記アクセスアドレスと一致するときに、プリフェッチヒット信号を出力する第２アドレス比較部とを備え、
前記データ選択部は、前記プリフェッチヒット信号の活性化時に、前記データバッファに保持されている命令データを前記中央処理装置に出力し、前記プリフェッチヒット信号の非活性化時に、前記外部メモリから読み出される前記分岐アドレスに対応する命令データを前記中央処理装置に出力することを特徴とするメモリインタフェース回路。
【請求項６】
請求項１記載のメモリインタフェース回路において、
前記通常動作期間に、前記中央処理装置からの分岐アドレスの出力回数を計数する分岐カウンタを備え、
前記全体制御回路は、前記分岐カウンタのカウンタ値に基づいて、前記通常動作期間に、前記第１プリフェッチバッファのタグレジスタに保持される分岐アドレスの出現頻度が所定比率を超えると判断したときに、この第１プリフェッチバッファを前記第２プリフェッチバッファに変更することを特徴とするメモリインタフェース回路。
【請求項７】
請求項１記載のメモリインタフェース回路において、
前記通常動作期間に、前記中央処理装置からの分岐アドレスの出力回数を計数する分岐カウンタを備え、
前記全体制御回路は、前記分岐カウンタのカウンタ値に基づいて、前記通常動作期間に、前記第２プリフェッチバッファのタグレジスタに保持される分岐アドレスの出現頻度が所定比率以下と判断したときに、この第２プリフェッチバッファを前記第１プリフェッチバッファに変更することを特徴とするメモリインタフェース回路。
【請求項８】
中央処理装置から受ける内部アドレスが分岐アドレスのときに、その分岐アドレスをアクセスアドレスとして外部メモリに出力し、次の分岐アドレスを受けるまでアクセスサイクル毎にアドレスを１ずつ増加させ、外部メモリに格納される命令データをプリフェッチするための前記アクセスアドレスとして出力するアドレス生成部と、
分岐アドレスを格納するタグレジスタおよびこの分岐アドレスが示す前記外部メモリ内の領域に格納されている命令データを格納するデータレジスタを有する複数のプリフェッチバッファと、
前記内部アドレスが前記タグレジスタに保持されている分岐アドレスと一致するときに、タグヒット信号を活性化する第１アドレス比較部と、
前記タグヒット信号の活性化時に、ヒットした分岐アドレスが格納されている前記タグレジスタに対応する前記データレジスタから読み出される命令データを前記中央処理装置に出力し、前記タグヒット信号の非活性化時に、前記外部メモリから読み出される前記分岐アドレスに対応する命令データを前記中央処理装置に出力するデータ選択部と、
前記通常動作期間に、前記中央処理装置からの分岐アドレスの出力回数を計数する分岐カウンタと
前記中央処理装置が前記内部アドレスを順次出力する通常動作期間に、前記アドレス生成部、前記第１アドレス比較部、前記データ選択部および分岐カウンタの動作を制御する全体制御部とを備え、
前記各プリフェッチバッファは、前記通常動作期間に書き換え可能な第１プリフェッチバッファと、指定された分岐アドレスおよびこの分岐アドレスが示す前記外部メモリ内の領域に格納されている命令データが予め格納され、前記通常動作期間に書き換えが禁止される第２プリフェッチバッファとのいずれかに設定され、
前記全体制御回路は、前記分岐カウンタのカウンタ値に基づいて、前記通常動作期間に、前記中央処理装置から出力される前記内部アドレスの中で前記第１プリフェッチバッファのタグレジスタに保持される分岐アドレスの出現頻度が所定比率を超えるときに、この第１プリフェッチバッファを前記第２プリフェッチバッファに変更することを特徴とするメモリインタフェース回路。
【請求項９】
請求項８記載のメモリインタフェース回路において、
前記全体制御回路は、前記分岐カウンタのカウンタ値に基づいて、前記通常動作期間に、前記中央処理装置から出力される前記内部アドレスの中で前記第２プリフェッチバッファのタグレジスタに保持される分岐アドレスの出現頻度が所定比率以下のときに、この第２プリフェッチバッファを前記第１プリフェッチバッファに変更することを特徴とするメモリインタフェース回路。
【請求項１０】
請求項６、請求項７および請求項９のいずれか１項記載のメモリインタフェース回路において、
前記各プリフェッチバッファは、第１または第２プリフェッチバッファとして使用されていることを示す識別フラグをそれぞれ備えていることを特徴とするメモリインタフェース回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサ等の中央処理装置によりメモリからフェッチされる命令データのフェッチ効率を向上するためのプリフェッチバッファを有するメモリインタフェース回路に関する。
【０００２】
【従来の技術】
一般に、命令データのフェッチ効率を向上するため、キャッシュメモリがマイクロプロセッサと主記憶の間に配置される。近時、キャッシュメモリのフェッチ効率をさらに向上するために、様々な手法が提案されている。
例えば、マイクロプロセッサが割り込み要求を受けてから割り込み処理を開始するまでの期間に、割り込みの先頭アドレスおよびそれ以降のアドレスに対応する複数の命令データをキャッシュメモリに転送することで、割り込み処理時にキャッシュヒットさせる手法が提案されている（例えば、特許文献１参照）。
【０００３】
また、割り込み処理から復帰したときのキャッシュヒット効率を向上するために、割り込み専用のキャッシュメモリを通常のキャッシュメモリとは別に設ける手法が提案されている（例えば、特許文献２参照）。
さらに、マイクロプロセッサの割り込み要求回路に関し、割り込み要求源の検索時間を短縮するために、割り込み要求源に対応する先頭アドレスを予めメモリに格納する手法が提案されている（例えば、特許文献３参照）。
【０００４】
一方、キャッシュメモリの代わりに記憶容量の小さいプリフェッチバッファを配置することで、命令のフェッチ効率を下げることなくコストを削減できるメモリインタフェース回路が提案されている。この技術では、プリフェッチバッファには、分岐アドレスのみが格納される。メモリインタフェース回路は、マイクロプロセッサから出力されるアドレスが分岐アドレス以外のとき、前回のアドレスを１だけ増加したアドレスにより命令データをプリフェッチする。このため、連続するアドレスに対応する命令データは、キャッシュヒットに相当する短いアクセス時間で読み出すことができる。さらに、分岐アドレスに対応する命令データがプリフェッチバッファに存在する場合、キャッシュヒットに相当する短いアクセス時間で読み出すことができる。
【０００５】
【特許文献１】
特開２０００−３４７９３１号公報
【特許文献２】
特開平６−２８２５８号公報
【特許文献３】
昭６２−２５９１５８号公報
【０００６】
【発明が解決しようとする課題】
しかしながら、従来のプリフェッチバッファ方式では、分岐アドレスが頻繁に発生する場合、フェッチ効率は低下する。例えば、分岐アドレスが頻繁に発生し、かつ規則的に特定の割り込みが発生するシステムでは、プリフェッチバッファに保持された割り込みの先頭アドレスに対応する命令データは、分岐アドレスの発生によって順次書き換えられてしまう。
なお、割り込みが頻繁に発生するシステムに特許文献１の手法を適用する場合、キャッシュメモリに保持されてるデータは、書き換えられてしまい、フェッチ効率は低下する。また、命令データは割り込み要求が発生した後、割り込み要求が開始されるまでの間にキャッシュメモリに転送する必要がある。このため、このキャッシュメモリは、割り込み要求を受け付けない命令の実行中に割り込み要求が発生した場合のみ効果を有する。割り込み要求を受け付け可能な命令の実行中に割り込み要求が発生した場合、命令データをキャッシュメモリに転送する余裕はない。
【０００７】
割り込みが頻繁に発生するシステムに特許文献２の手法を適用する場合、割り込み専用のキャッシュメモリに保持されてるデータは、書き換えられてしまい、フェッチ効率は低下する。
特許文献３は、割り込みベクタアドレスを短時間で検索する技術に関するものであり、割り込みベクタアドレスが示す記憶領域に保持されている命令データのフェッチ効率は改善できない。換言すれば、割り込みの発生頻繁にかかわらず、フェッチ効率は低い。
【０００８】
本発明の目的は、マイクロプロセッサ等の中央処理装置によりフェッチされる命令データのフェッチ効率を向上することにある。特に、アドレスの分岐が頻繁に発生するシステムにおいて、命令データのフェッチ効率を向上することにある。
【０００９】
【課題を解決するための手段】
請求項１のメモリインタフェース回路では、アドレス生成部は、中央処理装置から受ける内部アドレスが分岐アドレスのときに、その分岐アドレスをアクセスアドレスとして外部メモリに出力する。アドレス生成部は、次の分岐アドレスを受けるまでアクセスサイクル毎にアドレスを１ずつ増加させ、外部メモリに格納される命令データをプリフェッチするためのアクセスアドレスとして出力する。このため、内部アドレスが連続するときに、アドレス生成部が生成するアクセスアドレスにより、外部メモリに記憶されている命令データをプリフェッチできる。したがって、命令データのフェッチ効率を向上できる。また、連続する内部アドレスに対応する命令データは、プリフェッチバッファに保持する必要はない。このため、プリフェッチバッファの個数を最小限にできる。
【００１０】
複数のプリフェッチバッファは、分岐アドレスを格納するタグレジスタおよびこの分岐アドレスが示す外部メモリ内の領域に格納されている命令データを格納するデータレジスタを有する。プリフェッチバッファは、通常動作期間に書き換え可能な複数の第１プリフェッチバッファと、指定された分岐アドレスおよびこの分岐アドレスが示す外部メモリ内の領域に格納されている命令データが予め格納され、通常動作期間に書き換えが禁止される少なくとも１つの第２プリフェッチバッファとで構成される。このため、通常動作期間に、中央処理装置が出力する分岐アドレスとこの分岐アドレスに対応する命令データとにより、第１プリフェッチバッファのみが書き換えられる。全体制御部は、中央処理装置が内部アドレスを順次出力する通常動作期間に、アドレス生成部、第１アドレス比較部およびデータ選択部の動作を制御する。
【００１１】
通常動作期間において、第１アドレス比較部は、中央処理装置から出力される内部アドレスがタグレジスタに保持されている分岐アドレスと一致するときに、タグヒット信号を活性化する。データ選択部は、タグヒット信号の活性化時に、ヒットした分岐アドレスが格納されているタグレジスタに対応するデータレジスタから読み出される命令データを中央処理装置に出力する。すなわち、中央処理装置は、命令データを、外部メモリから待つことなくフェッチできる。データ選択部は、タグヒット信号の非活性化時に、外部メモリから読み出される分岐アドレスに対応する命令データを中央処理装置に出力する。
【００１２】
プリフェッチバッファの所定数は、書き換えが禁止される第２プリフェッチバッファに割り当てられる。このため、中央処理装置から分岐アドレスが頻繁に出力される場合にも、第２プリフェッチバッファに保持される特定の分岐アドレスおよび命令データが書き換えられることを防止できる。この結果、中央処理装置の命令フェッチ効率を向上でき、システム全体のパフォーマンスを向上できる。特に、分岐アドレスが頻繁に発生し、そのうち特定の分岐アドレスが繰り返し発生するシステムで、フェッチ効率を向上できる。
【００１３】
請求項２のメモリインタフェース回路では、プリフェッチバッファのうち第１プリフェッチバッファとして使用する数または第２プリフェッチバッファとして使用する数が、スプリットレジスタに登録される。各プリフェッチバッファは、通常動作期間前の初期設定期間に、スプリットレジスタの値に応じて、第１プリフェッチバッファまたは第２プリフェッチバッファに割り当てられる。システムの特性に応じてスプリットレジスタを設定することで、第２プリフェッチバッファを所望の数に設定できる。換言すれば、そのシステムに最適なメモリインタフェース回路を提供できる。
【００１４】
請求項３のメモリインタフェース回路では、全体制御部は、通常動作期間前の初期設定期間に、中央処理装置に接続されるデータバスを介して分岐アドレスを受け、受けた分岐アドレスを第２プリフェッチバッファのタグレジスタに格納する。全体制御部は、この分岐アドレスが示す外部メモリ内の領域に格納されている命令データを第２プリフェッチバッファのタグレジスタに対応するデータレジスタに格納する。このため、中央処理装置は、第２プリフェッチバッファのデータレジスタに命令データを格納する必要はない。この結果、中央処理装置の初期設定期間のパフォーマンスを向上できる。
【００１５】
請求項４のメモリインタフェース回路では、全体制御部は、初期設定期間に、データバスを介して受けた分岐アドレスを第２プリフェッチバッファのタグレジスタに格納する。この後、全体制御部は、中央処理装置からの書き込みによりセットされるスタートレジスタに応答して、第２プリフェッチバッファのタグレジスタに保持されている分岐アドレスをアドレス生成部を介して外部メモリに出力し、外部メモリから読み出される命令データを第２プリフェッチバッファのタグレジスタに対応するデータレジスタに格納する。専用のスタートレジスタを設けることで、中央処理装置は、全体制御部を容易に制御し、任意のタイミングで第２プリフェッチバッファのデータレジスタに命令データを格納させることができる。
【００１６】
請求項５のメモリインタフェース回路では、データバッファは、アクセスアドレスに応じて外部メモリからプリフェッチされる命令データを一時的に保持する。第２アドレス比較部は、内部アドレスが外部メモリからプリフェッチするためのアクセスアドレスと一致するときに、プリフェッチヒット信号を出力する。データ選択部は、プリフェッチヒット信号の活性化時に、データバッファに保持されている命令データを中央処理装置に出力する。データ選択部は、プリフェッチヒット信号の非活性化時に、外部メモリから読み出される分岐アドレスに対応する命令データを中央処理装置に出力する。データバッファを設けることで、中央処理装置から出力される内部アドレスが連続するときに、外部メモリからプリフェッチした命令データを失うことなく中央処理装置に出力できる。
【００１７】
請求項６のメモリインタフェース回路では、分岐カウンタは、通常動作期間に、中央処理装置からの分岐アドレスの出力回数を計数する。全体制御回路は、分岐カウンタのカウンタ値に基づいて、通常動作期間に、第１プリフェッチバッファのタグレジスタに保持される分岐アドレスの出現頻度が所定比率を超えると判断したときに、この第１プリフェッチバッファを第２プリフェッチバッファに変更する。出現頻度の高い分岐アドレスを保持している第１プリフェッチバッファを、書き換えが禁止される第２プリフェッチバッファに変更することで、実際のシステムの動作状態に合わせて、命令のフェッチ効率を向上できる。
【００１８】
請求項７および請求項９のメモリインタフェース回路では、全体制御回路は、分岐カウンタのカウンタ値に基づいて、通常動作期間に、第２プリフェッチバッファのタグレジスタに保持される分岐アドレスの出現頻度が所定比率以下と判断したときに、この第２プリフェッチバッファを第１プリフェッチバッファに変更する。出現頻度の低い分岐アドレスを保持している第２プリフェッチバッファを、書き換え可能な第１プリフェッチバッファに変更することで、実際のシステムの動作状態に合わせて、命令のフェッチ効率を向上できる。
【００１９】
請求項８のメモリインタフェース回路では、アドレス生成部は、中央処理装置から受ける内部アドレスが分岐アドレスのときに、その分岐アドレスをアクセスアドレスとして外部メモリに出力する。アドレス生成部は、次の分岐アドレスを受けるまでアクセスサイクル毎にアドレスを１ずつ増加させ、外部メモリに格納される命令データをプリフェッチするためのアクセスアドレスとして出力する。このため、内部アドレスが連続するときに、アドレス生成部が生成するアクセスアドレスにより、外部メモリに記憶されている命令データをプリフェッチできる。したがって、命令データのフェッチ効率を向上できる。また、連続する内部アドレスに対応する命令データは、プリフェッチバッファに保持する必要はない。このため、プリフェッチバッファの個数を最小限にできる。
【００２０】
複数のプリフェッチバッファは、分岐アドレスを格納するタグレジスタおよびこの分岐アドレスが示す外部メモリ内の領域に格納されている命令データを格納するデータレジスタを有する。各プリフェッチバッファは、通常動作期間に書き換え可能な第１プリフェッチバッファ、または指定された分岐アドレスおよびこの分岐アドレスが示す外部メモリ内の領域に格納されている命令データが予め格納され、通常動作期間に書き換えが禁止される第２プリフェッチバッファのいずれかに設定される。このため、通常動作期間に、中央処理装置が出力する分岐アドレスとこの分岐アドレスに対応する命令データとにより、第１プリフェッチバッファのみが書き換えられる。
【００２１】
分岐カウンタは、通常動作期間に、中央処理装置からの分岐アドレスの出力回数を計数する。全体制御部は、中央処理装置が内部アドレスを順次出力する通常動作期間に、アドレス生成部、第１アドレス比較部、データ選択部および分岐カウンタの動作を制御する。
通常動作期間において、第１アドレス比較部は、中央処理装置から出力される内部アドレスがタグレジスタに保持されている分岐アドレスと一致するときに、タグヒット信号を活性化する。データ選択部は、タグヒット信号の活性化時に、ヒットした分岐アドレスが格納されているタグレジスタに対応するデータレジスタから読み出される命令データを中央処理装置に出力する。すなわち、中央処理装置は、命令データを、外部メモリから待つことなくフェッチできる。データ選択部は、タグヒット信号の非活性化時に、外部メモリから読み出される分岐アドレスに対応する命令データを中央処理装置に出力する。
【００２２】
全体制御回路は、分岐カウンタのカウンタ値に基づいて、通常動作期間に、中央処理装置から出力される内部アドレスの中で第１プリフェッチバッファのタグレジスタに保持される分岐アドレスの出現頻度が所定比率を超えるときに、この第１プリフェッチバッファを第２プリフェッチバッファに変更する。分岐アドレスの出現頻度が高いときに、対応する第１プリフェッチバッファを書き換えが禁止される第２プリフェッチバッファに変更することで、中央処理装置の命令フェッチ効率を向上でき、システム全体のパフォーマンスを向上できる。特に、分岐アドレスが頻繁に発生し、そのうち特定の分岐アドレスが繰り返し発生するシステムで、フェッチ効率を向上できる。
【００２３】
プリフェッチバッファの所定数を第１または第２プリフェッチバッファに割り当てる初期設定が不要なため、全体制御回路を簡易に構成できる。
請求項１０のメモリインタフェース回路では、各プリフェッチバッファは、第１または第２プリフェッチバッファとして使用されていることを示す識別フラグをそれぞれ有している。全体制御回路は、識別フラグにより、プリフェッチバッファが第１および第２プリフェッチバッファの何れに割り当てられているかを容易に認識できる。この結果、全体制御回路を簡易に構成できる。
【００２４】
【発明の実施の形態】
以下、本発明の実施形態を図面を用いて説明する。図中、太線で示した信号線は、複数本で構成されている。また、太線が接続されているブロックの一部は、複数の回路で構成されている。信号が伝達される信号線には、信号名と同じ符号を使用する。
図１は、本発明のメモリインタフェース回路の第１の実施形態を示している。このメモリインタフェース回路は、シングルチップマイクロコンピュータに搭載されている。
【００２５】
シングルチップマイクロコンピュータは、ＣＰＵコア１００（中央処理装置、マイクロプロセッサ）と内蔵メモリ２００（外部メモリ）との間に、本発明のメモリインタフェース回路３００を接続して構成されている。シングルチップマイクロコンピュータは、例えば、一眼レフカメラ、ディジタルカメラなどのステッピングモータを制御するための制御チップとして使用される。この種の用途では、カメラの操作スイッチを常時モニタし、ステッピングモータを正確に駆動するために、頻繁に割り込み処理をする必要がある。
【００２６】
この実施形態では、ＣＰＵコア１００からの内部アドレスＩＡＤを伝達する命令アドレスバスＩＡＤおよび、命令データを伝達する命令データバスＩＤＴは、それぞれ３２ビットで構成されている。１つの命令データは、１６ビットで構成される。ＣＰＵコア１００は、クロックＣＬＫの２サイクル毎に２つの命令データを一度にフェッチする。このため、ＣＰＵコア１００は、１命令当たり１クロックサイクルを要する。
【００２７】
内蔵メモリ２００のアクセスサイクルは、３クロックサイクルである。このため、内蔵メモリ２００をアクセスする場合、メモリインタフェース回路３００は、ＣＰＵコア１００にウエイト信号ＩＷＡＩＴを出力し、バスサイクルを１クロックサイクル引き延ばす必要がある。なお、クロックＣＬＫがＣＰＵコア１００内で分周される場合、クロックサイクルは、分周クロックのサイクルになる。
【００２８】
メモリインタフェース回路３００は、ステートマシーン１０、アドレス生成部１２、アドレス比較部１４、レジスタ１６、データ選択部１８、データバッファ２０およびプリフェッチバッファ部２２を有している。
プリフェッチバッファ部２２は、８つのプリフェッチバッファＰＦ１−ＰＦ８を有している。各プリフェッチバッファＰＦ１−ＰＦ８は、１ビットで構成されるバリッドフラグＶＬＤ（識別フラグ）、３２ビットで構成されるタグレジスタＴＡＧおよび３２ビットで構成されるデータレジスタＤＡＴＡを有している。プリフェッチバッファＰＦ１−ＰＦ８の所定数は、ＣＰＵコア１００がプログラムカウンタに応じて内部アドレスＩＡＤを順次出力する通常動作期間に書き換え可能な通常プリフェッチバッファ（第１プリフェッチバッファ）として機能し、残りのプリフェッチバッファは、通常動作期間に、書き換えが禁止される割り込みプリフェッチバッファ（第２プリフェッチバッファ）として機能する。
【００２９】
バリッドフラグＶＬＤは、プリフェッチバッファＰＦ１−ＰＦ８が通常プリフェッチバッファまたは割り込みプリフェッチバッファのいずれかで機能させるかを識別するビットである。パワーオンリセット後の初期化期間において、バリッドフラグＶＬＤが”０”にリセットされたプリフェッチバッファは、通常プリフェッチバッファとして機能し、バリッドフラグＶＬＤが”１”にセットされたプリフェッチバッファは、割り込みプリフェッチバッファとして機能する。バリッドフラグＶＬＤを設けることで、ステートマシーン１０は、プリフェッチバッファＰＦ１−８が通常プリフェッチバッファまたは割り込みプリフェッチバッファのいずれに割り当てられているかを容易に認識できる。この結果、ステートマシン１０の回路構成は、簡易になる。
【００３０】
通常プリフェッチバッファのタグレジスタＴＡＧは、内蔵メモリ２００をアクセスするためにＣＰＵコア１００が出力する分岐アドレスを保持する。割り込みプリフェッチバッファのタグレジスタＴＡＧは、初期設定期間にシステム（ユーザ）が設定する割り込みベクタの先頭アドレス（分岐アドレスの一種；以下分岐アドレスまたは割り込みベクタアドレスとも称する）を保持する。
【００３１】
データレジスタＤＡＴＡは、タグレジスタＴＡＧに保持される分岐アドレスまたは割り込みベクタアドレスが示す内蔵メモリ２００の領域に格納されている命令データを保持する。
ステートマシーン１０は、アドレス生成部１２、アドレス比較部１４（第１および第２アドレス比較部）、レジスタ１６、データ選択部１８、データバッファ２０およびプリフェッチバッファ部２２の動作を制御するための制御信号を出力する全体制御部として動作する。
【００３２】
具体的には、ステートマシーン１０は、ＣＰＵコア１００から高レベルの分岐信号ＩＪＭＰを受けたときに、内部アドレスＩＡＤが分岐アドレスであると判断する。ステートマシーン１０は、この分岐アドレスがプリフェッチバッファ部２２に保持されていないことを低レベルのタグヒット信号ＴＨＩＴにより認識し、この分岐アドレスに対応する命令データを内蔵メモリ２００から読み出すために、ウエイト信号ＩＷＡＩＴを１クロックサイクルの期間ＣＰＵコア１００に出力する。
【００３３】
ステートマシーン１０は、低レベルの分岐信号ＩＪＭＰを受け、内部アドレスＩＡＤが分岐アドレスでないと判断したとき、すなわち、内部アドレスＩＡＤがアクセスサイクル毎に順次１ずつ増加されるときに、アドレス生成部１２に内部アドレスＩＡＤに１を加えたアドレス（次アドレス）をメモリアクセス信号ＭＡＤとして出力させるために、高レベルのインクリメント信号ＩＮＣを出力する。
【００３４】
また、ステートマシーン１０は、パワーオンリセット後の初期設定期間に、ＣＰＵコア１００からデータバスＤＢを介して出力される分岐アドレス（タグアドレス）をプリフェッチバッファ部２２に転送する。ステートマシーン１０は、初期設定期間に、ＣＰＵコア１００からデータバスＤＢを介してレジスタ１６に書き込まれる情報に基づいてバリッドフラグＶＬＤを設定する。
【００３５】
アドレス生成部１２は、ステートマシーン１０からのインクリメント信号ＩＮＣが低レベルのとき、ＣＰＵコア１００から受ける内部アドレスＩＡＤが分岐アドレスであると判断し、その分岐アドレスをメモリアクセスアドレスＭＡＤとして内蔵メモリ２００に出力する。
アドレス生成部１２は、インクリメント信号ＩＮＣが高レベルのとき、アクセスサイクル毎にアドレスを１ずつ増加させ、生成したアドレスをメモリアクセスアドレスＭＡＤとして内蔵メモリ２００に出力する。すなわち、分岐アドレスを受けた後、次の分岐アドレスを受けるまでの間、アクセスアドレスＭＡＤはアドレス生成部１２により生成される。
【００３６】
アドレス生成部１２内で生成されたアドレスは、内蔵メモリ２００に格納される命令データをプリフェッチするためのプリフェッチアドレスとして使用される。内部アドレスＩＡＤが連続する期間、アドレス生成部１２がプリフェッチアドレスを生成することで、命令データのプリフェッチが可能になる。プリフェッチバッファ部２２は、連続するアドレスに対応する命令データを保持する必要がなくなるため、その構成を最小限にできる。
【００３７】
アドレス比較部１４は、内部アドレスＩＡＤとタグレジスタＴＡＧに保持されているタグアドレスＴＡＤ（分岐アドレスまたは割り込みベクタアドレス）とが一致するときに、タグヒット信号ＴＨＩＴを高レベルに活性化する。アドレス比較部１４は、アドレス生成部１２が生成するプリフェッチアドレス（メモリアクセスアドレスＭＡＤ）と、ＣＰＵコア１００から出力される内部アドレスＩＡＤとが一致するときに、プリフェッチヒット信号ＰＨＩＴを出力する。このとき、プリフェッチされた命令データが内部データＩＤＴとしてＣＰＵコア１００に出力される。
【００３８】
レジスタ１６は、スプリットレジスタ１６ａおよびスタートレジスタ１６ｂを有している。スプリットレジスタ１６ａは、３ビット（図２に示すＳＰＬＩＴ［２：０］）で構成され、プリフェッチバッファＰＦ１−ＰＦ８のうち割り込みプリフェッチバッファとして使用するバッファを示すスプリット情報を保持する。スプリット情報は、初期設定期間に、ＣＰＵコア１００からデータバスＤＢを介して書き込まれる。そして、初期設定期間に、スプリット情報に基づいて割り込みプリフェッチバッファとして動作するプリフェッチバッファ（ＰＦ１−ＰＦ８の少なくとも一つ）のバリッドフラグＶＬＤに”１”がセットされる。スプリットレジスタ１６ａにより割り込みプリフェッチバッファを所望の数に設定することで、そのシステムに最適なメモリインタフェース回路を提供できる。
【００３９】
スタートレジスタ１６ｂは、１ビットで構成される。スタートレジスタ１６ｂは、初期設定期間に、データバスＤＢを介して受けた割り込みベクタアドレスが割り込みプリフェッチバッファ（ＰＦ１−ＰＦ８の少なくとも一つ）のタグレジスタＴＡＧに格納された後、データバスＤＢを介してＣＰＵコア１００により高レベル（論理”１”）にセットされる。
【００４０】
スタートレジスタ１６ｂのセットに応答して、ステートマシーン１０が動作し、割り込みプリフェッチバッファのタグレジスタＴＡＧに保持されているタグアドレスＴＡＤ（割り込みベクタアドレス）は、アドレス生成部１２を介して内蔵メモリ２００に出力される。そして、内蔵メモリ２００から読み出される命令データは、その割り込みベクタアドレスが保持されているタグレジスタＴＡＧに対応するデータレジスタＤＡＴＡに格納される。このように、スタートレジスタ１６ｂは、割り込みプリフェッチバッファのデータレジスタＤＡＴＡに命令データを書き込むためのトリガとして使用される。
【００４１】
データバッファ２０は、内蔵メモリ２００からプリフェッチされた命令データを一時的に保持する。
データ選択部１８は、タグヒット信号ＴＨＩＴの活性化時に、ヒットした分岐アドレスまたは割り込みベクタアドレスが格納されているタグレジスタＴＡＧに対応するデータレジスタＤＡＴＡから読み出される命令データＨＤＴを、内部データＩＤＴとしてＣＰＵコア１００に出力する。データ選択部１８は、プリフェッチヒット信号ＰＨＩＴの活性化時に、データバッファ２０に保持されている命令データＰＤＴを、内部データＩＤＴとしてＣＰＵコア１００に出力する。また、データ選択部１８は、タグヒット信号ＴＨＩＴおよびプリフェッチヒット信号ＰＨＩＴの非活性化時に、内蔵メモリ２００から直接読み出される分岐アドレスまたは割り込みベクタアドレスに対応する命令データＭＤＴを、内部データＩＤＴとしてＣＰＵコア１００に出力する。
【００４２】
図２は、第１の実施形態における初期設定期間のインタフェース回路３００の動作を示している。
ＣＰＵコア１００は、１番目のクロックＣＬＫの立ち上がりエッジに同期して、スプリットレジスタ１６ａにスプリット情報（例えば、ＳＰＬＩＴ［２：０］＝”０１１”）を書き込む（図２（ａ））。ステートマシーン１０は、スプリットレジスタ１６ａの内容に基づいて、２番目のクロックＣＬＫの立ち上がりエッジに同期して、プリフェッチバッファＰＦ１−ＰＦ３のバリッドフラグＶＬＤを”１”にセットする（図２（ｂ、ｃ、ｄ））。すなわち、スプリットレジスタ１６ａに２進数の”０１１”が書き込まれることで、初期設定期間後に、プリフェッチバッファＰＦ１−ＰＦ３は、割り込みプリフェッチバッファとして機能し、プリフェッチバッファＰＦ４−ＰＦ８は、通常プリフェッチバッファとして機能する。
【００４３】
ＣＰＵコア１００は、３番目のクロックＣＬＫの立ち上がりエッジに同期して、データバスＤＢに１つ目の割り込みベクタアドレスＩＶＣＴＡＤ１を出力する。ステートマシーン１０は、３番目のクロックＣＬＫの立ち下がりエッジに同期して、割り込みベクタアドレスＩＶＣＴＡＤ１をプリフェッチバッファＰＦ１のタグレジスタＴＡＧに書き込む（図２（ｅ））。同様にして、４番目および５番目のクロックＣＬＫに同期して、割り込みベクタアドレスＩＶＣＴＡＤ２−３がプリフェッチバッファＰＦ２、ＰＦ３のタグレジスタＴＡＧにそれぞれ書き込まれる（図２（ｆ、ｇ））。プリフェッチバッファＰＦ４−８のバリッドフラグＶＬＤは、低レベルを保持し、タグレジスタＴＡＧおよびデータレジスタＤＡＴＡには無効なデータが保持されている（図２（ｈ））。
【００４４】
次に、ＣＰＵコア１００は、６番目のクロックＣＬＫの立ち上がりエッジに同期して、スタートレジスタ１６ｂに”１”を書き込む（図２（ｉ））。ステートマシーン１０（図中のＳＭ１０）は、スタートレジスタ１６ｂのセットに応答して、ウエイト信号ＩＷＡＩＴをＣＰＵコア１００に出力する（図２（ｊ））。ＣＰＵコア１００は、ウエイト信号ＩＷＡＩＴを受けている間ウエイト状態になり、内部アドレスＩＡＤの更新を停止する（ＲＥＡＤ状態）。
【００４５】
ステートマシーン１０は、プリフェッチバッファ部２２およびアドレス生成部１２を制御し、８、１０、１２番目のクロックＣＬＫに同期して、プリフェッチバッファＰＦ１−３のタグレジスタＴＡＧに保持された割り込みベクタアドレスＩＶＣＴＡＤ１−３を順次読み出し（ＰＦ１−３）、読み出した割り込みベクタアドレスＩＶＣＴＡＤ１−３をメモリアクセスアドレスＭＡＤとして内蔵メモリ２００に出力する（図２（ｋ、ｌ、ｍ））。
【００４６】
そして、ステートマシーン１０は、内蔵メモリ２００から読み出される割り込みベクタアドレスＩＶＣＴＡＤ１−３が示す領域に格納されている命令データＩＶＣＴＤＴ１−３を、プリフェッチバッファＰＦ１−３のデータレジスタＤＡＴＡにそれぞれ書き込む（図２（ｎ、ｏ、ｐ））。専用のスタートレジスタ１６ｂを設けることで、ＣＰＵコア１００は、所望のタイミングで割り込みプリフェッチバッファへの命令データの格納処理を開始できる。また、スタートレジスタ１６ｂへの書き込みにより、ステートマシン１０が格納処理を自動的に実行するため、ＣＰＵコア１００は、格納処理の間、別の処理を実行できる。
【００４７】
ステートマシーン１０は、プリフェッチバッファＰＦ１−３への命令データＩＶＣＴＤＴ１−３の書き込み後、１４番目のクロックＣＬＫの立ち上がりエッジに同期して、ウエイト信号ＩＷＡＩＴを低レベルに変化させる（図２（ｑ））。ＣＰＵコア１００は、低レベルのウエイト信号ＩＷＡＩＴに応答してスタートレジスタ１６ｂを”０”にリセットする（図２（ｒ））。この後、ＣＰＵコア１００は、１６番目のクロックサイクル以降、通常の命令フェッチを再開する。
【００４８】
図２に示した割り込みプリフェッチバッファへのタグアドレスおよび命令データの書き込みは、パワーオンリセット後の初期設定期間（スタートアップルーチン）で１回実施すればよい。このため、システム全体のパフォーマンスは低下しない。
図３は、第１の実施形態における通常動作期間のインタフェース回路３００の動作を示している。
【００４９】
この例では、図２に示した初期設定動作が予め実行され、プリフェッチバッファＰＦ１−３は、割り込みプリフェッチバッファとして割り当てられている。例えば、プリフェッチバッファＰＦ１は、割り込みベクタアドレスＩＶＣＴＡＤ１および命令データＩＶＣＴＤＴ１を保持しており、そのバリッドフラグＶＬＤは高レベルにセットされている（図３（ａ））。通常プリフェッチバッファとして割り当てられたプリフェッチバッファＰＦ４−８のバリッドフラグＶＬＤは、低レベルにリセットされている（図３（ｂ））。
【００５０】
まず、最初のアクセスサイクル１ｓｔで通常分岐が発生し、ＣＰＵコア１００は、内部アドレスＩＡＤ（ＡＤ１）および分岐信号ＩＪＭＰを出力する（図３（ｃ））。アドレスＡＤ１は、プリフェッチバッファＰＦ１−８のタグレジスタＴＡＧに保持されていないため、タグヒット信号ＴＨＩＴは出力されない（図３（ｄ））。図１に示したステートマシーン１０は、低レベルのプリフェッチヒット信号ＰＨＩＴおよびタグヒット信号ＴＨＩＴを受け、ＣＰＵコア１００にウエイト信号ＩＷＡＩＴを出力する（図３（ｅ））。ＣＰＵコア１００は、ウエイト信号ＩＷＡＩＴを受けている間、そのアクセスサイクルを引き延ばす。
【００５１】
アドレス生成回路１２は、分岐信号ＩＪＭＰに応答してステートマシン１０から出力されるインクリメント信号ＩＮＣを受け、メモリアクセスアドレスＭＡＤ（ＡＤ１）を出力する（図３（ｆ））。内蔵メモリ２００のアドレスＡＤ１に対応する領域から命令データバスＭＤＴに命令データＤＴ１が読み出される（図３（ｇ））。命令データＤＴ１は、データ選択部１８を介して命令データバスＩＤＴに転送され、ＣＰＵコア１００によりフェッチされる。アクセスサイクルは、内蔵メモリ２００から命令データＤＴ１を直接読み出す必要があるため、３クロックサイクルになる。
【００５２】
ステートマシン１０は、空いているプリフェッチバッファＰＦ４のタグレジスタＴＡＧおよびデータレジスタＤＡＴＡにアドレスＡＤ１および命令データＤＴ１を書き込む（図３（ｈ））。空いているプリフェッチバッファＰＦ４に、アドレスＡＤ１および命令データＤＴ１が書き込まれることで、タグレジスタＴＡＧがヒットする確立が上がるため、命令データのフェッチ効率は向上する。この結果、ＣＰＵコア１００のパフォーマンスは向上する。なお、空いているプリフェッチバッファがない場合、ステートマシン１０は、最古に書き込まれたプリフェッチバッファのタグレジスタＴＡＧおよびデータレジスタＤＡＴＡの内容を、アドレスＡＤ１および命令データＤＴ１に書き換える。
【００５３】
２番目のアクセスサイクル２ｎｄにおいて、ＣＰＵコア１００は、アドレスＡＤ１に連続する内部アドレスＩＡＤ（ＡＤ２）を出力する（図３（ｉ））。アドレス生成回路１２は、ＣＰＵコア１００からアドレスＡＤ１を受ける前に、アドレスＡＤ１に応じて生成したアドレスＡＤ２をメモリアクセスアドレスＭＡＤとして内蔵メモリ２００に出力する（図３（ｊ））。アドレス比較部１４は、ＣＰＵコア１００からの内部アドレスＩＡＤ（ＡＤ２）とアドレス生成回路１２が生成したメモリアクセスアドレスＭＡＤ（ＡＤ２）とが一致するため、プリフェッチヒット信号ＰＨＩＴを出力する（図３（ｋ））。
【００５４】
データバッファ２０は、内蔵メモリ２００から読み出される命令データＭＤＴ（ＤＴ２）をプリフェッチする（図３（ｌ））。データ選択回路１８は、プリフェッチヒット信号ＰＨＩＴに応じて、データバッファ２０からの命令データＤＴ２を命令データバスＩＤＴに転送する（図３（ｍ））。アドレスＡＤ２に対応する命令データＤＴ２がデータバッファ２０にプリフェッチされるため、アクセスサイクルは、最短の２クロックサイクルになる。すなわち、命令データのフェッチ効率は向上する。
【００５５】
次のアクセスサイクル３ｒｄでは、メモリインタフェース回路３００は、アクセスサイクル２ｎｄと同様に動作し、２クロックサイクルで命令データＤＴ３をＣＰＵコア１００に出力する（図３（ｎ））。
アクセスサイクル４ｔｈにおいて、ＣＰＵコア１００は、アドレスＡＤ３に連続しないアドレスＡＤ１（分岐アドレス）を内部アドレスＩＡＤとして出力し、同時に分岐信号ＩＪＭＰを出力する（図３（ｏ））。アドレス比較部１４は、プリフェッチバッファ部２２からのタグアドレスＴＡＤ（ＡＤ１）を受け、アドレスＡＤ１がプリフェッチバッファＰＦ４に保持されていることを認識し、タグヒット信号ＴＨＩＴを出力する（図３（ｐ））。
【００５６】
データ選択部１８は、タグヒット信号ＴＨＩＴに応じて、プリフェッチバッファＰＦ４のデータレジスタＤＡＴＡからの命令データＤＴ１を命令データバスＩＤＴに転送する（図３（ｑ））。アドレスＡＤ１に対応する命令データＤＴ１がプリフェッチバッファＰＦ４から読み出されるため、デアクセスサイクルは、最短の２クロックサイクルになる。
【００５７】
この後、アクセスサイクル５ｔｈ、６ｔｈでは、メモリインタフェース回路３００は、アクセスサイクル２ｎｄと同様に動作し、２クロックサイクルで命令データＤＴ２、ＤＴ３をＣＰＵコア１００にそれぞれ出力する（図３（ｒ））。
アクセスサイクル７ｔｈにおいて、ＣＰＵコア１００は、アドレスＡＤ３に連続しないアドレスＡＤ１０（分岐アドレス）を内部アドレスＩＡＤとして出力し、同時に分岐信号ＩＪＭＰを出力する（図３（ｓ））。メモリインタフェース回路３００は、アクセスサイクル１ｓｔと同様に動作し、３クロックサイクルでアドレスＡＤ１０に対応する命令データＤＴ１０をＣＰＵコア１００に出力する（図３（ｔ））。ステートマシン１０は、空いているプリフェッチバッファＰＦ５のタグレジスタＴＡＧおよびデータレジスタＤＡＴＡにアドレスＡＤ１０および命令データＤＴ１０を書き込む（図３（ｕ））。
【００５８】
アクセスサイクル８ｔｈ、９ｔｈは、アクセスサイクル２ｎｄ、３ｒｄと同様に実施され、プリフェッチされた命令データＤＴ１１、ＤＴ１２は、ＣＰＵコア１００に出力される（図３（ｖ））。
アクセスサイクル１０ｔｈにおいて、プリフェッチバッファＰＦ１に設定した割り込みベクタアドレスＩＶＣＴＡＤ１の割り込みが発生する。タグヒットとなるため、メモリインタフェース回路３００は、アクセスサイクル４ｔｈと同様に動作し、２クロックサイクルで命令データＩＶＣＴＤＴ１をＣＰＵコア１００に出力する（図３（ｗ））。
【００５９】
アクセスサイクル１１ｔｈ、１２ｔｈは、アクセスサイクル２ｎｄ、３ｒｄと同様に実施され、アドレス生成回路１２が生成したアドレスＩＶＡ２、ＩＶＡ３に対応してプリフェッチされた命令データＩＶＤ２、ＩＶＤ３がＣＰＵコア１００に出力される（図３（ｘ））。
以上、本実施形態では、プリフェッチバッファＰＦ１−８の所定数は、通常動作期間の前に予め書き換えが禁止される割り込みプリフェッチバッファに割り当てられる。このため、通常動作期間にＣＰＵコア１００から分岐アドレスまたは割り込みベクタアドレスが頻繁に出力される場合にも、割り込みプリフェッチバッファの内容が書き換えられることを防止できる。この結果、ＣＰＵコア１００の命令フェッチ効率を向上でき、システム全体のパフォーマンスを向上できる。特に、分岐アドレスまたは割り込みベクタアドレスが頻繁に発生し、そのうち特定のアドレスが繰り返し発生するシステムで、フェッチ効率を向上できる。
【００６０】
スプリットレジスタ１６ａを設定することで、割り込みプリフェッチバッファを所望の数に設定できる。換言すれば、割り込みプリフェッチバッファの割り当て数を可変にすることで、そのシステムに最適なメモリインタフェース回路を提供できる。
初期設定期間において、ＣＰＵコア１００がスタートレジスタ１６ｂをセットするだけで、割り込みプリフェッチバッファのデータレジスタＤＡＴＡへの命令データの格納は、ステートマシン１０により自動的に実施される。このため、ＣＰＵコア１００の初期設定期間のパフォーマンスを向上できる。
【００６１】
ＣＰＵコア１００が発生する内部アドレスＩＡＤが連続するときに、アドレス生成部１２が生成するメモリアクセスアドレスＭＡＤにより、内蔵メモリ２００に記憶されている命令データをプリフェッチできる。したがって、命令データのフェッチ効率を向上できる。また、連続する内部アドレスＩＡＤに対応する命令データは、プリフェッチバッファ部２２に保持する必要はない。このため、プリフェッチバッファＰＦ１−８の個数を最小限にできる。メモリインタフェース回路３００にデータバッファ２０を形成することで、プリフェッチした命令データは、失われることなくＣＰＵコア１００に出力できる。
【００６２】
バリッドフラグＶＬＤにより、プリフェッチバッファＰＦ１−８が通常プリフェッチバッファおよび割り込みプリフェッチバッファの何れに割り当てられているかを容易に認識できる。この結果、ステートマシン１０の動作を簡素にできる。
図４は、本発明のメモリインタフェース回路の第２の実施形態を示している。第１の実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。
【００６３】
メモリインタフェース回路３００Ａは、第１の実施形態のステートマシーン１０およびプリフェッチバッファ部２２に代えてステートマシン１０Ａおよびプリフェッチバッファ部２２Ａを有している。また、メモリインタフェース回路３００Ａは、新たにアクセス監視部２４を有している。
この実施形態は、プリフェッチバッファ部２２Ａが保持する分岐アドレス（割り込みベクタアドレスを含む）のＣＰＵコア１００からの発生頻度に応じて、プリフェッチバッファＰＦ１−８が割り込みプリフェッチバッファまたは通常プリフェッチバッファに変更されることを特徴としている。発生頻度は、アクセス監視部２４により調べられ、プリフェッチバッファの用途の変更は、ステートマシン１０Ａにより実施される。
【００６４】
プリフェッチバッファ部２２Ａの各プリフェッチバッファＰＦ１−８は、バリッドフラグＶＬＤ、タグレジスタＴＡＧおよびデータレジスタＤＡＴＡに加えて１ビットで構成されるロックフラグＬＯＣＫを有している。ロックフラグＬＯＣＫは、割り込みプリフェッチバッファから通常プリフェッチバッファへの変更を禁止するビットである。
【００６５】
アクセス監視部２４は、分岐信号ＩＪＭＰの発生回数をカウントする分岐カウンタ２４ａ、プリフェッチバッファＰＦ１−８のヒット回数をそれぞれカウントす８つのヒットカウンタ２４ｂを有している。分岐カウンタ２４ａは、例えば、分岐信号ＩＪＭＰが１００回発生する毎にリセットされる。すなわち、分岐カウンタ２４ａのカウンタ値は、”０”〜”１００”が繰り返される。ヒットカウンタ２４ｂは、分岐カウンタ２４ａとともに”０”にリセットされる。
【００６６】
ステートマシン１０Ａは、分岐カウンタ２４ａのカウンタ値が”１００”になったときに、プリフェッチバッファＰＦ１−８にそれぞれ対応するヒットカウンタ２４ｂのカウンタ値を読み込む。そして、ステートマシン１０Ａは、カウンタ値が”１０”を超えるヒットカウンタ２４ｂに対応する通常プリフェッチバッファ（ＰＦ１−８の何れでも可）のロックフラグＬＯＣＫおよびバリッドフラグＶＬＤに”１”をセットし、この通常プリフェッチバッファを割り込みプリフェッチバッファに変更する。また、ステートマシン１０Ａは、カウンタ値が”１０”以下のヒットカウンタ２４ｂに対応する割り込みプリフェッチバッファ（ＰＦ１−８の何れでも可）のロックフラグＬＯＣＫおよびバリッドフラグＶＬＤに”０”をリセットし、この割り込みプリフェッチバッファを通常プリフェッチバッファに変更する。
【００６７】
図５は、第２の実施形態の通常動作期間の動作を示している。基本的な動作は、第１の実施形態（図３）と同じである。このため、第１の実施形態と同じ動作については、詳細な説明を省略する。なお、初期設定期間の動作は、ロックフラグＬＯＣＫが”０”にリセットされることを除き、第１の実施形態（図２）と同じである。
【００６８】
図の左側の波形の始まりにおいて、図４に示したアクセス監視部２４の分岐カウンタ２４ａのカウンタ値ＩＪＣＮＴは”９９”を示している（図５（ａ））。プリフェッチバッファＰＦ１、ＰＦ２に対応するヒットカウンタ２４ｂのカウンタ値ＨＣＮＴは、それぞれ”１５”、”０”を示している（図５（ｂ、ｃ））。
図の左側の波形では、プリフェッチバッファＰＦ１に設定された割り込みベクタアドレスＩＶＣＴＡＤ１の割り込みが発生し、分岐信号ＩＪＭＰが出力される（図５（ｄ））。アクセス監視部２４は、分岐信号ＩＪＭＰに応答して分岐カウンタ２４ａをカウントアップし、カウンタ値ＩＪＣＮＴを”１００”に設定する（図５（ｅ））。プリフェッチバッファＰＦ１が割り込みベクタアドレスＩＶＣＴＡＤ１を保持しているため、アドレス比較部１４は、タグヒット信号ＴＨＩＴを出力する（図５（ｆ））。アクセス監視部２４は、タグヒット信号ＴＨＩＴに応答してプリフェッチバッファＰＦ１に対応するヒットカウンタ２４ｂのカウンタ値ＨＣＮＴをインクリメントする（図５（ｇ））。
【００６９】
アクセス監視部２４は、プリフェッチバッファＰＦ１に対応するヒットカウンタ２４ｂのカウンタ値が”１０”を超えているため、プリフェッチバッファＰＦ１のロックフラグＬＯＣＫを”１”にセットする（図５（ｈ））。すなわち、プリフェッチバッファＰＦ１は、引き続き割り込みプリフェッチバッファとして機能する。
アクセス監視部２４は、プリフェッチバッファＰＦ２に対応するヒットカウンタ２４ｂのカウンタ値が”１０”以下であるため、プリフェッチバッファＰＦ２のバリッドフラグＶＬＤを”０”にリセットする（図５（ｉ）。すなわち、プリフェッチバッファＰＦ２は、割り込みプリフェッチバッファから通常プリフェッチバッファに変更される。
【００７０】
この後、図の中央の波形に示すように、ＣＰＵコア１００は、分岐アドレスＡＤ１０を内部アドレスＩＡＤとして出力し、同時に分岐信号ＩＪＭＰを出力する（図５（ｊ））。アクセス監視部２４は、分岐信号ＩＪＭＰに応答して分岐カウンタ２４ａをカウントアップし、カウンタ値ＩＪＣＮＴを”１”に設定する（図５（ｋ））。分岐アドレスは、プリフェッチバッファＰＦ１−ＰＦ８のいずれにも保持されていないため、ステートマシン１０は、ＣＰＵコア１００にウエイト信号ＩＷＡＩＴを出力し（図５（ｌ））、内蔵メモリ２００から命令データＤＴ１０を読み出す（図５（ｍ））。
【００７１】
プリフェッチバッファＰＦ２は、通常プリフェッチバッファに変更されている。このため、分岐アドレスＡＤ１０および分岐アドレスＡＤ１０に対応する命令データＤＴ１０は、プリフェッチバッファＰＦ２に保持される（図５（ｎ））。
ＣＰＵコア１００のフェッチ動作が続き、図の右側の波形に示すように、分岐カウンタ２４ａのカウンタ値ＩＪＣＮＴは、”９９”までカウントアップされる。ＣＰＵコア１００は、分岐信号ＩＪＭＰとともに、分岐アドレスＡＤ１０を再び出力する（図５（ｏ））。アクセス監視部２４は、分岐信号ＩＪＭＰに応答して分岐カウンタ２４ａをカウントアップし、カウンタ値ＩＪＣＮＴを”１００”に設定する（図５（ｐ））。プリフェッチバッファＰＦ２が分岐アドレスＡＤ１０を保持しているため、アドレス比較部１４は、タグヒット信号ＴＨＩＴを出力する（図５（ｑ））。アクセス監視部２４は、タグヒット信号ＴＨＩＴに応答してプリフェッチバッファＰＦ２に対応するヒットカウンタ２４ｂのカウンタ値ＨＣＮＴをインクリメントする（図５（ｒ））。
【００７２】
アクセス監視部２４は、プリフェッチバッファＰＦ２に対応するヒットカウンタ２４ｂのカウンタ値が”１０”を超えているため、プリフェッチバッファＰＦ２のロックフラグＬＯＣＫおよびバリッドフラグＶＬＤを”１”にセットする（図５（ｓ））。また、アクセス監視部２４は、プリフェッチバッファＰＦ１に対応するヒットカウンタ２４ｂのカウンタ値が”１０”以下であるため、プリフェッチバッファＰＦ１のロックフラグＬＯＣＫおよびバリッドフラグＶＬＤを”０”にリセットする（図５（ｔ））。すなわち、プリフェッチバッファＰＦ２は、通常プリフェッチバッファから割り込みプリフェッチバッファに変更され、プリフェッチバッファＰＦ１は、割り込みプリフェッチバッファから通常プリフェッチバッファに変更される。
【００７３】
この実施形態においても、上述した第１の実施形態と同様の効果を得ることができる。さらに、この実施形態では、出現頻度の高い分岐アドレスまたは割り込みベクタアドレスを保持している通常プリフェッチバッファを、書き換えが禁止される割り込みプリフェッチバッファに変更することで、実際のシステムの動作状態に合わせて、命令のフェッチ効率を向上できる。また、出現頻度の低い分岐アドレスを保持している割り込みプリフェッチバッファを、書き換え可能な通常プリフェッチバッファに変更することで、実際のシステムの動作状態に合わせて、命令のフェッチ効率を向上できる。
【００７４】
図６は、本発明のメモリインタフェース回路の第３の実施形態を示している。第１および第２の実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。
メモリインタフェース回路３００Ｂは、第２の実施形態のステートマシーン１０Ａに代えてステートマシン１０Ｂを有している。また、メモリインタフェース回路３００Ｂは、レジスタ１６を有していない。その他の構成は、第２の実施形態とほほ同じである。
【００７５】
ステートマシン１０Ｂは、第２の実施形態のステートマシン１０Ａから初期設定機能（図４のレジスタ１６）を削除して構成されている。このため、プリフェッチバッファ部２２Ａは、初期設定されない。プリフェッチバッファＰＦ１−８は、パワーオンリセット後において、全て通常プリフェッチバッファに一旦割り当てられる。パワーオンリセット後の通常動作期間では、第２の実施形態（図５）で示したように、プリフェッチバッファＰＦ１−８は、タグヒット回数に応じて、割り込みプリフェッチバッファまたは通常プリフェッチバッファに変更される。
【００７６】
この実施形態においても、上述した第１および第２の実施形態と同様の効果を得ることができる。さらに、この実施形態では、初期設定期間において、プリフェッチバッファＰＦ１−８の所定数を割り込みプリフェッチバッファに割り当てる必要がない。このため、第１の実施形態のレジスタ１６が不要になり、ステートマシン１０Ｂの制御回路を簡易に構成できる。この結果、メモリインタフェース回路３００Ａのレイアウトサイズを小さくできる。
【００７７】
なお、上述した第１の実施形態は、プリフェッチバッファＰＦ１−３に割り込みベクタアドレスＩＶＣＴＡＤ１−３を保持した例について述べた。本発明はかかる実施形態に限定されるものではない。例えば、プリフェッチバッファＰＦ１−３に頻繁に発生する分岐アドレスを保持してもよい。
上述した第２の実施形態では、各プリフェッチバッファＰＦ１−８にロックフラグＬＯＣＫを形成した例について述べた。本発明はかかる実施形態に限定されるものではない。例えば、バリッドフラグＶＬＤにロックフラグＬＯＣＫの機能を持たせてもよい。この場合、図３に示した初期設定動作において、バリッドフラグＶＬＤが”１”にセットされるプリフェッチバッファＰＦ１−３は、通常動作期間の初めからロックされる。
【００７８】
上述した実施形態では、本発明をシングルチップマイクロコンピュータに形成される内蔵メモリ２００をアクセスするためのメモリインタフェース回路に適用した例について述べた。本発明はかかる実施形態に限定されるものではない。例えば、本発明をＣＰＵコアが形成されるチップと別のメモリチップをアクセスするためのメモリインタフェース回路に適用してもよい。このとき、メモリインタフェース回路は、ＣＰＵコアと同じチップに形成れてもよく、ＣＰＵコアと別のチップに形成されてもよい。
【００７９】
以上、本発明について詳細に説明してきたが、上記の実施形態およびその変形例は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
【００８０】
【発明の効果】
請求項１のメモリインタフェース回路では、中央処理装置から分岐アドレスが頻繁に出力される場合にも、第２プリフェッチバッファに保持される分岐アドレスおよび命令データが書き換えられることを防止できる。この結果、中央処理装置の命令フェッチ効率を向上でき、システム全体のパフォーマンスを向上できる。特に、分岐アドレスが頻繁に発生し、そのうち特定の分岐アドレスが繰り返し発生するシステムで、フェッチ効率を向上できる。
【００８１】
請求項２のメモリインタフェース回路では、システムの特性に応じて第２プリフェッチバッファを所望の数に設定できる。換言すれば、そのシステムに最適なメモリインタフェース回路を提供できる。
請求項３のメモリインタフェース回路では、中央処理装置は、第２プリフェッチバッファのデータレジスタに命令データを格納する必要はないため、中央処理装置の初期設定期間のパフォーマンスを向上できる。
【００８２】
請求項４のメモリインタフェース回路では、専用のスタートレジスタを設けることで、中央処理装置は、全体制御部を容易に制御し、任意のタイミングで第２プリフェッチバッファのデータレジスタに命令データを格納させることができる。
請求項５のメモリインタフェース回路では、データバッファを設けることで、中央処理装置から出力される内部アドレスが連続するときに、外部メモリからプリフェッチした命令データを失うことなく中央処理装置に出力できる。
【００８３】
請求項６のメモリインタフェース回路では、出現頻度の高い分岐アドレスを保持している第１プリフェッチバッファを、書き換えが禁止される第２プリフェッチバッファに変更することで、実際のシステムの動作状態に合わせて、命令のフェッチ効率を向上できる。
請求項７および請求項９のメモリインタフェース回路では、出現頻度の低い分岐アドレスを保持している第２プリフェッチバッファを、書き換え可能な第１プリフェッチバッファに変更することで、実際のシステムの動作状態に合わせて、命令のフェッチ効率を向上できる。
【００８４】
請求項８のメモリインタフェース回路では、分岐アドレスの出現頻度が高いときに、対応する第１プリフェッチバッファを書き換えが禁止される第２プリフェッチバッファに変更することで、中央処理装置の命令フェッチ効率を向上でき、システム全体のパフォーマンスを向上できる。特に、分岐アドレスが頻繁に発生し、そのうち特定の分岐アドレスが繰り返し発生するシステムで、フェッチ効率を向上できる。
【００８５】
プリフェッチバッファの所定数を第２プリフェッチバッファに割り当てる初期設定が不要なため、全体制御回路を簡易に構成できる。
請求項１０のメモリインタフェース回路では、識別フラグにより、プリフェッチバッファが第１および第２プリフェッチバッファの何れに割り当てられているかを容易に認識できる。この結果、全体制御回路を簡易に構成できる。
【図面の簡単な説明】
【図１】本発明のメモリインタフェース回路の第１の実施形態を示すブロック図である。
【図２】第１の実施形態の初期化期間の動作を示すタイミング図である。
【図３】第１の実施形態の通常動作期間の動作を示すタイミング図である。
【図４】本発明のメモリインタフェース回路の第２の実施形態を示すブロック図である。
【図５】第２の実施形態の通常動作期間の動作を示すタイミング図である。
【図６】本発明のメモリインタフェース回路の第３の実施形態を示すブロック図である。
【符号の説明】
１０、１０Ａ、１０Ｂ  ステートマシーン
１２  アドレス生成部
１４  アドレス比較部
１６  レジスタ
１６ａ  スプリットレジスタ
１６ｂ  スタートレジスタ
１８  データ選択部
２０  データバッファ
２２、２２Ａ  プリフェッチバッファ部
２４  アクセス監視部
２４ａ  分岐カウンタ
２４ｂ  ヒットカウンタ
１００  ＣＰＵコア
２００  内蔵メモリ
３００、３００Ａ、３００ｂ  メモリインタフェース回路
ＤＡＴＡ  データレジスタ
ＤＢ  データバス
ＨＤＴ    命令データ
ＩＡＤ    内部アドレス
ＩＤＴ    命令データバス
ＩＪＭＰ  分岐信号
ＩＮＣ    インクリメント信号
ＩＶＣＴＡＤ１−３    割り込みベクタアドレス
ＩＶＣＴＤＴ１−３    命令データ
ＩＷＡＩＴ    ウエイト信号
ＭＡＤ    メモリアクセス信号
ＭＤＴ    命令データ
ＰＤＴ    命令データ
ＰＦ１−ＰＦ８    プリフェッチバッファ
ＰＨＩＴ  プリフェッチヒット信号
ＴＡＤ    タグアドレス
ＴＡＧ    タグレジスタ
ＴＨＩＴ  タグヒット信号
ＶＬＤ    バリッドフラグ
【図１】
2005018553.tif 000003
【図２】
2005018553.tif 000004
【図３】
2005018553.tif 000005
【図４】
2005018553.tif 000006
【図５】
2005018553.tif 000007
【図６】
2005018553.tif 000008