説明

マイクロプロセッサ

【課題】未実行の命令と実行済みの命令の両方についてキャッシュヒットが可能なマイクロプロセッサを提供する。
【解決手段】プリフェッチバッファ6は、SDRAM2からプリフェッチした命令を格納する。バッファ制御部16は、書込みアドレスを表わす第1のレジスタ10内のトップホインタ、読出しアドレスを表わす第2のレジスタ12内のリードホインタおよび最も古い有効な命令の格納アドレスを表わす第3のレジスタ14内のボトムホインタに基づいて、分岐先の命令がプリフェッチバッファ6内に存在するか否かを判定し、分岐先の命令が存在するときには、リードホインタの値を分岐先の命令のアドレスを指定するように変更し、分岐先の命令が存在しないときには、トップホインタ、リードホインタ、ボトムホインタの値を初期値にリセットするとともに、分岐先の命令をプリフェッチバッファ6にプリフェッチさせる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マイクロプロセッサに関し、特にキャッシュ機能を有するマイクロプロセッサに関する。
【背景技術】
【0002】
従来から、命令キャッシュを備えたマイクロプロセッサが実用に供せられている。命令キャッシュとは、マイクロプロセッサ内部に設けられた高速な記憶装置であるキャッシュメモリの一種であり、プログラムに含まれる命令を一時的に記憶する領域をいう。このような命令キャッシュを備えることにより、CPUは、高速にアクセスできるキャッシュメモリに使用頻度の高い命令を蓄積しておき、低速なメインメモリへのアクセスを減らすことができるので、CPUによるプログラムの実行が高速化される(たとえば、特許文献1を参照)。
【0003】
CPUに必要な命令が命令キャッシュに存在する場合には、その命令は、メインメモリからではなく、命令キャッシュからCPUに送られる。これをキャッシュヒットという。一方、CPUに必要な命令が命令キャッシュに存在しない場合には、その命令は、メインメモリからCPUに転送される。これをキャッシュミスという。
【特許文献1】特開2001−273137号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
ところで、命令キャッシュには、CPUによって実行された命令のみが格納されるので、キャッシュヒットするのは実行済みの命令についてだけである。したがって、未実行の命令については、常にキャッシュミスするため、低速なメインメモリからCPUに転送しなくてはならず、CPUによるプログラムの実行が遅くなる。
【0005】
それゆえに、本発明の目的は、未実行の命令と実行済みの命令の両方についてキャッシュヒットが可能なマイクロプロセッサを提供することである。
【課題を解決するための手段】
【0006】
上記課題を解決するために、本発明のマイクロプロセッサは、プログラムに含まれる命令を格納するメインメモリと、メインメモリからプリフェッチした命令を格納する循環バッファと、メインメモリから出力される命令の循環バッファへの書込みアドレスを指定する第1のポインタ、循環バッファから出力される命令の読出アドレスを指定する第2のポインタ、および循環バッファに格納されている最も古い有効な命令の格納アドレスを指定する第3のポインタを格納するレジスタと、第2のポインタに基づいて循環バッファから命令を読出して、解読し、実行するCPUコアと、CPUコアで解読した命令が分岐命令の場合に、第1のポインタ、第2のポインタ、および第3のポインタに基づいて、分岐先の命令が循環バッファ内に存在するか否かを判定する制御部とを備え、制御部は、分岐先の命令が循環バッファ内に存在するときには、第2のポインタを分岐先の命令のアドレスを指定するように変更し、分岐先の命令が循環バッファ内に存在しないときには、第1のポインタ、第2のポインタ、および第3のポインタを初期値にリセットするとともに、分岐先の命令を循環バッファにプリフェッチさせる。
【0007】
好ましくは、制御部は、第1のポインタと第2のポインタとの差分値、および第2のポインタで指定されるアドレスに読出される命令を起点とした分岐先の命令のアドレスを表わす相対アドレスに基づいて、分岐先の命令が実行済みの命令として循環バッファ内に存在するか否かを判定し、第2のポインタと第3のポインタとの差分値、および相対アドレスに基づいて、分岐先の命令が未実行の命令として循環バッファ内に存在するか否かを判定し、分岐先の命令が、実行済の命令としてまたは未実行の命令として循環バッファ内に存在するときに、分岐先の命令が循環バッファ内に存在すると判定する。
【0008】
好ましくは、制御部は、第1のポインタと第2のポインタとの差分値が所定値以上の場合には、メインメモリからのプリフェッチを一時停止させる。
【0009】
好ましくは、所定値は、循環バッファに格納可能な命令数の半分の値である。
【発明の効果】
【0010】
本発明のマイクロプロセッサによれば、未実行の命令と実行済みの命令の両方についてキャッシュヒットが可能となる。
【発明を実施するための最良の形態】
【0011】
以下、本発明に係る実施の形態について図面を参照して説明する。
(構成)
図1は、本発明の実施形態のマイクロプロセッサの構成を表わす図である。
【0012】
図1を参照して、このマイクロプロセッサは、SDRAM(Synchronous Dynamic Random Access Memory)2、SDRAMコントローラ4、プリフェッチバッファ6、第1のレジスタ10、第2のレジスタ12、第3のレジスタ14、CPU(Central Processing Unit)コア8、およびバッファ制御部16を備える。
【0013】
バッファ制御部16は、第1の減算器18、第2の減算器22、加算器30、バッファフル判定器20、第1の比較器24、第2の比較器26、第3の比較器28、およびヒット判定器32を備える。
【0014】
SDRAM2は、複数個の命令からなるプログラムを記憶するメインメモリである。
プリフェッチバッファ6は、SDRAM2からプリフェッチ(先読み)された命令を保持する。プリフェッチバッファ6は、2ポート式の循環バッファである。この実施形態では、プリフェッチバッファ6には、32個の命令が格納可能であるものとして説明する。
【0015】
第1のレジスタ10は、トップポインタTOP_Pを記憶する。トップポインタTOP_Pは、SDRAM2から出力される命令のプリフェッチバッファ6への書込みアドレスを指定する。より具体的には、トップポインタTOP_Pの値をプリフェッチバッファ6に格納可能な命令数(32)で割った剰余の値で指定されるプリフェッチバッファ6のアドレスの位置に命令が書込まれる。
【0016】
第2のレジスタ12は、リードポインタRD_Pを記憶する。リードポインタRD_Pは、プリフェッチバッファ6から出力される命令の読出アドレスを指定する。より具体的には、リードポインタRD_Pの値をプリフェッチバッファ6に格納可能な命令数(32)で割った剰余の値で指定されるプリフェッチバッファ6のアドレスの位置から命令が読出される。
【0017】
第3のレジスタ14は、ボトムポインタBOT_Pを記憶する。ボトムポインタBOT_Pは、プリフェッチバッファ6に格納されている最も古い有効な命令の格納アドレスを指定する。より具体的には、プリフェッチバッファ6内の、ボトムポインタBOT_Pをプリフェッチバッファ6に格納可能な命令数(32)で割った剰余の値で指定されるアドレスから、トップポインタTOP_Pより1だけ小さい値をプリフェッチバッファ6に格納可能な命令数(32)で割った剰余の値で指定されるアドレスまでの間に有効な命令が循環的に記憶される。
【0018】
SDRAMコントローラ4は、SDRAM2からプリフェッチバッファ6への命令のプリフェッチを行なう。具体的には、SDRAMコントローラ4は、トップポインタTOP_Pの値をプリフェッチバッファ6に格納可能な命令数(32)で割った剰余の値で指定されるプリフェッチバッファ6のアドレスの位置に命令を書込む。また、SDRAMコントローラ4は、プリフェッチバッファ6へ書込んだ命令の数だけトップポインタTOP_Pをインクリメントする。たとえば、1命令ずつプリフェッチする場合には、トップポインタTOP_Pは、1命令をプリフェッチするごとに、1だけインクリメントされる。
【0019】
SDRAMコントローラ4は、バッファ制御部16から出力される次命令要求信号nextcoderequestがHレベルのときのみ、上述のプリフェッチを行なう。
【0020】
SDRAMコントローラ4は、バッファ制御部16から分岐先の命令の絶対アドレスA_ADD(後述する)と、Hレベルのキャッシュミス信号Missを受けた場合には、SDRAM2内の絶対アドレスA_ADDで指定される命令の読出しを行なう。SDRAMコントローラ4は、それ以外の場合には、SDRAM2内の命令をアドレス順に読出す。
【0021】
CPUコア8は、プリフェッチバッファ6から命令の読出し(フェッチ)を行なう。具体的には、CPUコア8は、リードポインタRD_Pの値をプリフェッチバッファ6に格納可能な命令数(32)で割った剰余の値で指定されるプリフェッチバッファ6のアドレスの位置から命令を読出す。また、CPUコア8は、プリフェッチバッファ6から読出した命令の数だけリードポインタRD_Pをインクリメントする。たとえば、1命令ずつフェッチする場合には、リードポインタRD_Pは、1命令をフェッチするごとに、1だけインクリメントされる。
【0022】
CPUコア8は、プリフェッチバッファ6から読出した命令を解読し、その後命令を実行する。CPUコア8は、解読した命令が分岐命令の場合には、アドレス変更信号PC_ADD_CHGをHレベルに設定するともに、分岐先の命令の絶対アドレスA_ADDを第1の比較器24、第2の比較器26およびSDRAMコントローラ4へ出力し、分岐先の命令の相対アドレスR_ADDをヒット判定器32へ出力する。ここで、分岐命令とは、Break、Jump、Branch、Call、Returnなどの命令をいう。絶対アドレスA_ADDとは、プログラムの先頭の命令を起点とした分岐先の命令のアドレスを表わす。相対アドレスR_ADDとは、リードポインタRD_Pで指定されるアドレスに読出される命令を起点とした分岐先の命令のアドレスを表わす。分岐先の命令のアドレスが、リードポインタRD_Pで指定されるアドレスに読出される命令のアドレスよりも大きければ、相対アドレスR_ADDは、正の値となる。一方、分岐先の命令のアドレスが、リードポインタRD_Pで指定されるアドレスに読出される命令のアドレスよりも小さければ、相対アドレスR_ADDは、負の値となる。CPUコア8は、解読した命令が分岐命令以外の命令の場合には、アドレス変更信号PC_ADD_CHGをLレベルに設定する。
【0023】
第1の減算器18は、トップポインタTOP_PとリードポインタRD_Pとの差D1(=TOP_P−RD_P)を出力する。
【0024】
第2の減算器22は、ボトムポインタBOT_PとリードポインタRD_Pとの差D2(=BOT_P−RD_P)を出力する。
【0025】
加算器30は、相対アドレスR_ADDとリードポインタRD_Pの和S(=R_ADD−RD_P)を出力する。
【0026】
第1の比較器24は、トップポインタTOP_PとリードポインタRD_Pとの差D1と定数値16とを比較し、SDRAMコントローラ4へ次命令要求信号nextcoderequestを出力する。定数値16は、プリフェッチバッファ6に格納可能な命令数(32)の半分の値である。第1の比較器24は、差D1が16未満のときに、次命令要求信号nextcoderequestをHレベルに設定する(次命令を要求する)。これにより、SDRAMコントローラ4は、SDRAM2からプリフェッチバッファ6への命令の読出し処理を続行する。第1の比較器24は、差D1が16以上のときに、次命令要求信号nextcoderequestをLレベルに設定する(次命令を要求しない)。これにより、SDRAMコントローラ4は、SDRAM2からプリフェッチバッファ6への命令の読出し処理を停止する。
【0027】
つまり、トップポインタTOP_PとリードポインタRD_Pの差D1は、プリフェッチバッファ6内の未実行の命令の数を表わす。プリフェッチバッファ6内の未実行の命令の数が16未満の場合には、SDRAM2からプリフェッチバッファ6へ未実行の命令がプリフェッチされ、実行済みの命令が消去される。その結果、プリフェッチバッファ6内において、未実行の命令の数が増加し、実行済みの命令の数が減少する。一方、プリフェッチと同時に、CPUコア8による命令のフェッチによって、プリフェッチバッファ6内において、未実行の命令の数が減少し、実行済みの命令の数が増加する。通常では、プリフェッチの速度はフェッチの速度よりも早いので、トータルで考えると、プリフェッチによる効果が主要となり、プリフェッチバッファ6内において、未実行の命令の数が増加し、実行済の命令の数が減少する。一方、プリフェッチバッファ6内の未実行の命令の数が16以上の場合には、SDRAM2からプリフェッチバッファ6へ未実行の命令がプリフェッチされないので、実行済みの命令が消去されない。その結果、CPUコア8による命令のフェッチによって、プリフェッチバッファ6内において、未実行の命令の数が減少し、実行済みの命令の数が増加する。以上のような処理を繰返すによって、プリフェッチバッファ6内に未実行の命令と実行済みの命令とがほぼ均等に保持されることになり、未実行の命令と実行済みの命令とで、キャッシュのヒット率ができるだけ同等になるようにしている。
【0028】
第2の比較器26は、符号つき比較器である。第2の比較器26は、トップポインタTOP_PとリードポインタRD_Pとの差D1と、相対アドレスR_ADDとを比較する。第2の比較器26は、差D1が相対アドレスR_ADD未満のときには、Hレベルの第1の比較信号COM1をヒット判定器32へ出力する。第2の比較器26は、差D1が相対アドレスR_ADD以上のときには、Lレベルの第1の比較信号COM1をヒット判定器32へ出力する。
【0029】
第3の比較器28は、符号つき比較器である。第3の比較器28は、ボトムポインタBOT_PとリードポインタRD_Pとの差D2と、相対アドレスR_ADDとを比較する。第3の比較器28は、差D2が相対アドレスR_ADD未満のときには、Hレベルの第2の比較信号COM2をヒット判定器32へ出力する。第2の比較器26は、差D2が相対アドレスR_ADD以上のときには、Lレベルの第2の比較信号COM2をヒット判定器32へ出力する。
【0030】
ヒット判定器32は、第1の比較信号COM1、第2の比較信号COM2、およびアドレス変更信号PC_ADD_CHGを受けて、キャッシュヒット信号Hitおよびキャッシュミス信号Missを出力する。ヒット判定器32は、アドレス変更信号PC_ADD_CHGがHレベル、第1の比較信号COM1がLレベル、かつ第2の比較信号COM2がHレベルのときに限り、キャッシュヒット信号HitをHレベル、かつキャッシュミス信号MissをLレベルに設定する。ヒット判定器32は、アドレス変更信号PC_ADD_CHGがHレベルで、かつ、第1の比較信号COM1がHレベルまたは第2の比較信号COM2がLレベルのときには、キャッシュヒット信号HitをLレベル、かつキャッシュミス信号MissをHレベルに設定する。また、ヒット判定器32は、アドレス変更信号PC_ADD_CHGがLレベルのときには、キャッシュヒット信号HitをLレベル、かつキャッシュミス信号MissをLレベルに設定する。
【0031】
ヒット判定器32は、具体的には、第1の論理回路34、第2の論理回路36、および第3の論理回路38によって構成される。
【0032】
第1の論理回路34は、第1の比較信号COM1および第2の比較信号COM2を受ける。第1の論理回路34は、第1の比較信号COM1がHレベルで、かつ第2の比較信号COM2がLレベルのときに限り、Hレベルを出力する。
【0033】
第2の論理回路36は、アドレス変更信号PC_ADD_CHGおよび第1の論理回路34の出力を受ける。第2の論理回路36は、アドレス変更信号PC_ADD_CHGがHレベルで、かつ、第1の論理回路34の出力がHレベル(つまり、第1の比較信号COM1がHレベルで、かつ第2の比較信号COM2がLレベル)のときに限り、Hレベルのキャッシュヒット信号Hitを出力する。
【0034】
第3の論理回路38は、アドレス変更信号PC_ADD_CHGおよび第1の論理回路34の出力を受ける。第3の論理回路38は、アドレス変更信号PC_ADD_CHGがHレベルで、かつ、第1の論理回路34の出力がLレベル(つまり、第1の比較信号COM1がLレベル、または第2の比較信号COM2がHレベル)のときに限り、Hレベルのキャッシュミス信号Missを出力する。
【0035】
キャッシュヒット信号Hitは、第2のレジスタ12に送られる。キャッシュヒット信号HitがHレベルに設定されたときには、第2のレジスタ12内のリードポインタRD_Pは、加算器30から送られる和S(=R_ADD+RD_P)に更新される。
【0036】
一方、キャッシュミス信号Missは、第1のレジスタ10、第2のレジスタ12、第3のレジスタ14およびSDRAMコントローラ4へ送られる。キャッシュミス信号MissがHレベルに設定されたときには、第1のレジスタ10内のトップポインタTOP_P、第2のレジスタ12内のリードポインタRD_P、および第3のレジスタ14内のボトムポインタBOT_Pが初期値0にリセットされ、SDRAMコントローラ4によって、絶対アドレスA_ADDで指定されるSDRAM2内の位置を起点とした命令のプリフェッチが行なわれる。
【0037】
バッファフル判定器20は、プリフェッチバッファ6がフルに達したとき、すなわち、トップポインタTOP_PとボトムポインタBOT_Pの差がプリフェッチバッファ6に格納可能な命令数(32)に達したときには、ボトムポインタBOT_Pをインクリメントする。たとえば、1命令ずつプリフェッチする場合には、ボトムポインタBOT_Pは、新たな1命令を格納するために、1だけインクリメントされる。バッファフル判定器20は、減算器および比較器などの要素を含むが、ここでは構成の詳細な説明は省略する。
【0038】
(動作)
次に、本発明の実施形態のマイクロプロセッサの動作を具体例を用いて説明する。
【0039】
図2は、SDRAM2に格納されているプログラムを表わす図である。
図2を参照して、プログラムは、命令OP0〜OPnで構成されており、命令OPi(0〜n)のアドレスは、iである。
【0040】
図3は、プリフェッチバッファ6に格納されている命令と、トップポインタTOP_P、リードポインタRD_PおよびボトムポインタBOT_Pで指定されるアドレスを表わす図である。
【0041】
図3(a)は、初期状態を表わす。初期状態では、トップポインタTOP_P、リードポインタRD_P、およびボトムポインタBOT_Pの値は0である。
【0042】
図3(b)は、6個の命令OP0〜OP5がプリフェッチバッファ6に書込まれ、2個の命令OP0、OP1がプリフェッチバッファ6から読出された状態を表わす。この状態では、トップポインタTOP_Pが「6」であり、リードポインタRD_Pが「3」であり、ボトムポインタBOT_Pが「0」である。したがって、トップポインタTOP_P(=「6」)を「32」で割った剰余である「6」が次に命令を書込むアドレスとなる。また、リードポインタRD_P(=「3」)を「32」で割った剰余である「3」が次に命令を読出すアドレスとなる。また、ボトムポインタBOT_P(=「0」)を「32」で割った剰余である「0」のアドレスから、トップポインタTOP_P(=「6」)より1だけ小さい値(=「5」)を「32」で割った剰余である「5」のアドレスまでに有効な命令が格納されている。具体的には、命令OP0〜OP5が有効な命令である。
【0043】
図3(c)は、24個の命令OP0〜OP23がプリフェッチバッファ6に書込まれ、9個の命令OP0〜OP7がプリフェッチバッファ6から読出された状態を表わす。この状態では、トップポインタTOP_Pが「24」であり、リードポインタRD_Pが「8」であり、ボトムポインタBOT_Pが「0」である。トップポインタTOP_PとリードポインタRD_Pの差が「16」であるので、次命令要求信号nextcoderequestがLレベルに設定される。これにより、SDRAMコントローラ4は、SDRAM2からプリフェッチバッファ6への命令の読出し処理を停止するので、プリフェッチバッファ6において、未実行の命令の数が減少し、実行済みの命令の数が増加する。その結果、トップポインタTOP_PとリードポインタRD_Pの差が「16」未満となり、次命令要求信号nextcoderequestがHレベルに設定される。これにより、SDRAMコントローラ4は、SDRAM2からプリフェッチバッファ6への命令の読出し処理を再開し、プリフェッチバッファ6において、未実行の命令の数が増加し、実行済の命令の数が減少する。以上のような処理が繰返されることによって、プリフェッチバッファ6内に未実行の命令と実行済みの命令とがほぼ均等に保持される。
【0044】
図3(d)は、プリフェッチバッファ6が最初にフルに達した場合を表わす。32個の命令OP0〜OP31がプリフェッチバッファ6に書込まれている。命令OP31の書込み後には、トップポインタTOP_Pはインクリメントされて「32」となる。バッファフル判定器20は、トップポインタTOP_P(=「32」)とボトムポインタBOT_P(=「0」)の差が「32」のため、プリフェッチバッファ6がフルに達したと判断する。
【0045】
その結果、図3(e)に示すように、ボトムポインタBOT_Pがインクリメントされて、「1」となる。この状態は、ボトムポインタBOT_P(=「1」)を「32」で割った剰余である「1」のアドレスから、トップポインタTOP_P(=「32」)より1だけ小さい値(=「31」)を「32」で割った剰余である「31」のアドレスまで間に有効な命令が記憶されている。具体的には、命令OP1〜OP32が有効な命令である。
【0046】
さらに、図3(f)に示すように、次の命令OP32は、トップポインタTOP_P(=「32」)を「32」で割った剰余の値「0」のアドレスに書込まれる。命令OP32の書込み後には、トップポインタTOP_Pはインクリメントされて「33」となる。バッファフル判定器20は、トップポインタTOP_P(=「33」)とボトムポインタBOT_P(=「1」)の差が「32」のため、プリフェッチバッファ6がフルに達したと判断する。
【0047】
その結果、図3(g)に示すように、ボトムポインタBOT_Pがインクリメントされて「2」となる。この状態は、ボトムポインタBOT_P(=「2」)を「32」で割った剰余である「2」のアドレスから、トップポインタTOP_P(=「33」)より1だけ小さい値(=「32」)を「32」で割った剰余である「0」のアドレスまでの間に有効な命令が循環的に記憶されている。具体的には、命令OP2〜OP32が有効な命令である。
【0048】
図4は、キャッシュヒットする場合とキャッシュミスする場合の例を説明するための図である。
【0049】
図4(a)〜(d)を参照して、プリフェッチバッファ6には、命令OP67〜OP98まで格納されている。トップポインタTOP_Pは「99」であり、リードポインタRD_Pは「83」であり、ボトムポインタBOT_Pは「68」である。
【0050】
この状態では、トップポインタTOP_P(=「99」)を「32」で割った剰余である「3」が次に命令を書込むアドレスとなる。また、リードポインタRD_P(=「83」)を「32」で割った剰余である「19」が次に命令を読出すアドレスとなる。また、ボトムポインタBOT_P(=「68」)を「32」で割った剰余である「4」のアドレスから、トップポインタTOP_P(=「99」)より1だけ小さい値(=「98」)を「32」で割った剰余である「2」のアドレスまでに有効な命令が循環的に格納されている。すなわち、命令OP68〜OP97が有効な命令である。
【0051】
第1の減算器18によって、トップポインタTOP_PからリードポインタRD_Pを減算した値D1が「16」に設定される。また、第2の減算器22によって、リードポインタRD_PからボトムポインタBOT_Pを減算した値D2が「−15」に設定される。
【0052】
図4(a)は、プリフェッチバッファ6に格納されている命令OP96が分岐先の命令の場合を表わす。
【0053】
この場合には、相対アドレスR_ADDは「13」(=96−83)となる。
値D1(=「16」)は、相対アドレスADD(=「13」)以上であるので、第2の比較器26によって、第1の比較信号COM1は「L」レベルに設定される。また、値D2(=「−15」)は、相対アドレスADD(=「13」)未満であるので、第3の比較器28によって、第2の比較信号COM2は「H」レベルに設定される。その結果、ヒット判定器32によって、キャッシュヒット信号Hitが「H」レベルに設定され、キャッシュミス信号Missが「L」レベルに設定される。
【0054】
キャッシュヒット信号Hitが「H」レベルになると、第2のレジスタ12内のリードポインタRD_Pは、加算器30から送られる和S(=「96」)(=R_ADD+RD_P)に更新される。その結果、CPUコア8によって、プリフェッチバッファ6内の命令OP96が読出される。
【0055】
図4(b)は、プリフェッチバッファ6に格納されている命令OP74が分岐先の命令の場合を表わす。
【0056】
この場合には、相対アドレスR_ADDは「−9」(=74−83)となる。
値D1(=「16」)は、相対アドレスADD(=「−9」)以上であるので、第2の比較器26によって、第1の比較信号COM1は「L」レベルに設定される。また、値D2(=「−15」)は、相対アドレスADD(=「−9」)未満であるので、第3の比較器28によって、第2の比較信号COM2は「H」レベルに設定される。その結果、ヒット判定器32によって、キャッシュヒット信号Hitが「H」レベルに設定され、キャッシュミス信号Missが「L」レベルに設定される。
【0057】
キャッシュヒット信号Hitが「H」レベルになると、第2のレジスタ12内のリードポインタRD_Pは、加算器30から送られる和S(=「74」)(=R_ADD+RD_P)に更新される。その結果、CPUコア8によって、プリフェッチバッファ6内の命令OP74が読出される。
【0058】
図4(c)は、プリフェッチバッファ6に格納されていない命令OP104が分岐先の命令の場合を表わす。
【0059】
この場合には、相対アドレスR_ADDは「21」(=104−83)となる。
値D1(=「16」)は、相対アドレスADD(=「21」)未満であるので、第2の比較器26によって、第1の比較信号COM1は「H」レベルに設定される。また、値D2(=「−15」)は、相対アドレスADD(=「21」)未満であるので、第3の比較器28によって、第2の比較信号COM2は「H」レベルに設定される。その結果、ヒット判定器32によって、キャッシュヒット信号Hitが「L」レベルに設定され、キャッシュミス信号Missが「H」レベルに設定される。
【0060】
キャッシュミス信号Missが「H」レベルになると、第1のレジスタ10内のトップポインタTOP_P、第2のレジスタ12内のリードポインタRD_P、および第3のレジスタ14内のボトムポインタBOT_Pが初期値0にリセットされる。また、SDRAMコントローラ4は、SDRAM2から絶対アドレスA_ADD(=「104」)で指定される命令を読出して、プリフェッチバッファ6へ書込む。この場合、プリフェッチバッファ6のトップポインタTOP_P(=「0」)を「32」で割った剰余である「0」のアドレスに命令が書込まれる。
【0061】
図4(d)は、プリフェッチバッファ6に格納されていない命令OP42が分岐先の命令の場合を表わす。
【0062】
この場合には、相対アドレスR_ADDは「−41」(=42−83)となる。
値D1(=「16」)は、相対アドレスADD(=「−41」)以上であるので、第2の比較器26によって、第1の比較信号COM1は「L」レベルに設定される。また、値D2(=「−15」)は、相対アドレスADD(=「−41」)以上であるので、第3の比較器28によって、第2の比較信号COM2は「L」レベルに設定される。その結果、ヒット判定器32によって、キャッシュヒット信号Hitが「L」レベルに設定され、キャッシュミス信号Missが「H」レベルに設定される。
【0063】
キャッシュミス信号Missが「H」レベルになると、第1のレジスタ10内のトップポインタTOP_P、第2のレジスタ12内のリードポインタRD_P、および第3のレジスタ14内のボトムポインタBOT_Pが初期値0にリセットされる。また、SDRAMコントローラ4は、SDRAM2内の絶対アドレスA_ADD(=「42」)で指定される命令を読出して、プリフェッチバッファ6へ書込む。この場合、プリフェッチバッファ6のトップポインタTOP_P(=「0」)を「32」で割った剰余である「0」のアドレスに命令が書込まれる。
【0064】
以上のように、本発明の実施形態のマイクロプロセッサによれば、トップポインタTOP_PおよびリードポインタRD_Pに加えて、ボトムポインタBOT_Pを用いることによって、プリフェッチバッファ6内に未実行の命令と実行済みの命令とを記憶させることができるので、未実行の命令と実行済みの命令の両方についてキャッシュヒットが可能となる。
【0065】
(変形例)
本発明は、上記の実施の形態に限定されるものではなく、たとえば以下のような変形例を含む。
【0066】
(1) ポインタの更新
本発明の実施形態では、ボトムポインタBOT_Pは、SDRAMからプリフェッチバッファへ命令をプリフェッチする前に更新したが、プリフェッチ後に更新することとしてもよい。
【0067】
また、本発明の実施形態では、各ポインタの1回にインクリメントする幅を1としたが、これに限定するものではない。たとえば、N個の命令を連続してプリフェッチする場合には、トップポインタTOP_PおよびボトムポインタBOT_Pの1回にインクリメントする幅をNとすればよい。また、N個の命令を連続してフェッチする場合には、リードポインタRD_Pの1回にインクリメントする幅をNとすればよい。
【0068】
(2) パイプライン処理
本発明の実施形態では、CPUコアによる命令のパイプライン処理は省略して説明したが、CPUコアによってパイプライン処理が行なわれる場合には、たとえばパイプライン処理のフェッチと実行の間のステージ数に応じて、ポインタの値や相対アドレスなどを修正すればよい。
【0069】
(3) キャッシャメモリとの併用
本発明の実施形態では、実行済みの命令および未実行の命令のいずれについても、プリフェッチバッファに対して、ヒットするか否かを判定したが、これに限定するものではない。マイクロプロセッサがプリフェッチバッファとは別に実行済みの命令を格納するキャッシュメモリを備える場合には、実行済みの命令については、そのキャッシュメモリに対してヒットするか否かを調べ、未実行の命令に対しては、プリフェッチバッファに対してヒットするか否かを調べるものとしてもよい。この場合には、図1のマイクロプロセッサの構成要素のうち、ボトムポインタBOT_Pに関連する構成要素は不要となる。
【0070】
あるいは、実行済みの命令については、まずプリフェッチバッファに対してヒットするかどうかを調べ、ヒットしない場合にのみ、さらにキャッシュメモリに対してヒットするかどうかを調べるものとしてもよい。
【0071】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【0072】
【図1】本発明の実施形態のマイクロプロセッサの構成を表わす図である。
【図2】SDRAMに格納されているプログラムを表わす図である。
【図3】プリフェッチバッファに格納されている命令と、トップポインタTOP_P、リードポインタRD_P、ボトムポインタBOT_Pで指定されるアドレスを表わす図である。
【図4】キャッシュがヒットする場合とキャッシュがミスする場合の例を説明するための図である。
【符号の説明】
【0073】
2 SDRAM、4 SDRAMコントローラ、6 プリフェッチバッファ、8 CPUコア、10 第1のレジスタ、12 第2のレジスタ、14 第3のレジスタ、16 バッファ制御部、18 第1の減算器、20 バッファフル判定器、22 第2の減算器、24 第1の比較器、26 第2の比較器、28 第3の比較器、30 加算器、32 ヒット判定器、34,36,38 論理回路。

【特許請求の範囲】
【請求項1】
プログラムに含まれる命令を格納するメインメモリと、
前記メインメモリからプリフェッチした命令を格納する循環バッファと、
前記メインメモリから出力される命令の前記循環バッファへの書込みアドレスを指定する第1のポインタ、前記循環バッファから出力される命令の読出アドレスを指定する第2のポインタ、および前記循環バッファに格納されている最も古い有効な命令の格納アドレスを指定する第3のポインタを格納するレジスタと、
前記第2のポインタに基づいて前記循環バッファから命令を読出して、解読し、実行するCPUコアと、
前記CPUコアで解読した命令が分岐命令の場合に、前記第1のポインタ、前記第2のポインタ、および前記第3のポインタに基づいて、分岐先の命令が前記循環バッファ内に存在するか否かを判定する制御部とを備え、
前記制御部は、前記分岐先の命令が前記循環バッファ内に存在するときには、前記第2のポインタを前記分岐先の命令のアドレスを指定するように変更し、前記分岐先の命令が前記循環バッファ内に存在しないときには、前記第1のポインタ、前記第2のポインタ、および前記第3のポインタを初期値にリセットするとともに、前記分岐先の命令を前記循環バッファにプリフェッチさせる、マイクロプロセッサ。
【請求項2】
前記制御部は、前記第1のポインタと前記第2のポインタとの差分値、および前記第2のポインタで指定されるアドレスに読出される命令を起点とした前記分岐先の命令のアドレスを表わす相対アドレスに基づいて、前記分岐先の命令が実行済みの命令として前記循環バッファ内に存在するか否かを判定し、
前記第2のポインタと前記第3のポインタとの差分値、および前記相対アドレスに基づいて、前記分岐先の命令が未実行の命令として前記循環バッファ内に存在するか否かを判定し、
前記分岐先の命令が、実行済の命令としてまたは未実行の命令として前記循環バッファ内に存在するときに、前記分岐先の命令が前記循環バッファ内に存在すると判定する、請求項1記載のマイクロプロセッサ。
【請求項3】
前記制御部は、前記第1のポインタと前記第2のポインタとの差分値が所定値以上の場合には、前記メインメモリからのプリフェッチを一時停止させる、請求項1記載のマイクロプロセッサ。
【請求項4】
前記所定値は、前記循環バッファに格納可能な命令数の半分の値である、請求項3記載のマイクロプロセッサ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2008−299790(P2008−299790A)
【公開日】平成20年12月11日(2008.12.11)
【国際特許分類】
【出願番号】特願2007−148059(P2007−148059)
【出願日】平成19年6月4日(2007.6.4)
【出願人】(000134109)株式会社デジタル (224)
【Fターム(参考)】