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