JP3590427B2 - 先行読出機能付命令キャッシュメモリ - Google Patents
先行読出機能付命令キャッシュメモリ Download PDFInfo
- Publication number
- JP3590427B2 JP3590427B2 JP00352995A JP352995A JP3590427B2 JP 3590427 B2 JP3590427 B2 JP 3590427B2 JP 00352995 A JP00352995 A JP 00352995A JP 352995 A JP352995 A JP 352995A JP 3590427 B2 JP3590427 B2 JP 3590427B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- read
- branch
- block
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000006870 function Effects 0.000 title claims description 73
- 230000004044 response Effects 0.000 claims description 20
- 230000003139 buffering effect Effects 0.000 claims description 8
- 239000000872 buffer Substances 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 45
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 description 45
- 238000001514 detection method Methods 0.000 description 38
- 230000000694 effects Effects 0.000 description 7
- 230000015556 catabolic process Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 101100391182 Dictyostelium discoideum forI gene Proteins 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000000034 method Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6028—Prefetching based on hints or prefetch instructions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
【産業上の利用分野】
この発明は、マイクロプロセッサなどの処理装置と主記憶との間に位置し、双方の動作速度の相違をバッファリングするための先行読出機能付命令キャッシュメモリに関し、特に、そのヒット率の向上に関する。
【0002】
【従来の技術】
通常プロセッサでは、記憶階層はいくつかのレベルから構成される。そしてこれらの記憶階層の管理は、隣接する2つのレベル間ごとに行なわれる。
【0003】
図25を参照して、CPU18に近い方の記憶装置200をキャッシュ、遠い方の記憶装置をメモリ22と呼ぶ。この2つのレベルにおいて、記憶管理の対象となるデータの最小単位をブロックと呼ぶ。キャッシュとメモリとの間のデータの授受はブロック単位で行なわれる。
【0004】
CPU18はキャッシュ200に対し、コントロール信号(ロード/ストア)とアドレスとからなるアクセス要求を出力する。キャッシュ200は内部にアクセス要求で指示されるアドレスの内容を保持している場合、速やかにデータをCPU18に出力し、保持しておらずキャッシュに対するアクセスが失敗した場合、メモリ22に対しコントロール信号(ロード/ストア)とアドレスとからなる読出要求を出力し、読出要求で指示されるアドレスのデータをメモリ22から取り込み、CPU18に転送する。
【0005】
キャッシュに対するアクセスが失敗したこと(対象とするデータがキャッシュ200内に見つからないこと)をミスと呼ぶ。ミス率とは、アクセスが失敗する割合をいう。ヒット率はミス率の逆であり、アクセスが成功する割合をいう。ミスペナルティとは、キャッシュ200中のブロックをメモリ22から転送されるブロックで置換える時間と、そのブロックへのアクセス要求を出したCPU18までデータを送る時間とを足し合わせたものをいう。
【0006】
一般に、プロセッサの性能を示すCPU時間は、以下の式で与えられる。
【0007】
CPU時間=実行命令数×(1命令当りのクロック数(CPI)+
1命令当りの平均ミス回数×ミスペナルティ)×クロックサイクル時間
この式より、同じCPUであっても、キャッシュの挙動によってその性能に影響があることが分かる。CPIが小さく、クロック周波数の高いCPUにおいては、キャッシュミスによる性能低下はより深刻なものになる。なぜなら、CPI値が小さければ小さいほど、キャッシュミスの影響の割合が大きくなるからである。
【0008】
また、CPUが異なっても主記憶に使うメモリチップは同種のものであることが多い。したがって主記憶アクセス時間だけを見れば、どんなコンピュータでもほとんど相違がない。ミスペナルティは、ミスの処理に必要な時間をCPUクロック数で表わした値として表現される。主記憶のアクセス速度が同じであっても、CPUのクロック数が高くなればなるほどミスペナルティの値が大きくなる。そのためクロック周波数の高いCPUにおいては、キャッシュミスによる性能低下がより深刻なものとなる。
【0009】
【発明が解決しようとする課題】
以上より、キャッシュミスはプロセッサの性能に大きな影響を及ぼすことがわかる。すなわちミスが発生する確率の大小が、システムの性能に大きな重要性を持つ。
【0010】
キャッシュメモリは、命令(専用)キャッシュとデータ(専用)キャッシュとに分割される場合がある。命令とデータとのためにそれぞれ別個の独立したキャッシュを設けることにより、それぞれ命令とデータとの取扱いに最適な構成をとることができるため、システム全体の性能向上には有利である。特に命令キャッシュメモリにおいては、一連の命令が実行される態様をより深く研究することにより、命令キャッシュメモリの動作をより最適化できる可能性が存在する。
【0011】
この発明は上記問題点を解決するためになされたもので、キャッシュミスの発生する確率の低い命令キャッシュメモリを得ることを目的とする。
【0012】
【課題を解決するための手段】
この発明に係る請求項1記載の先行読出機能付命令キャッシュメモリは、主記憶と処理装置との間にそれぞれの動作速度の相違をバッファリングするために設けられ、前記処理装置から与えられるアクセス要求に応答して、前記主記憶との間でブロック単位で命令情報の授受を行なう命令補助記憶装置と、前記主記憶から読出され、前記命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、前記読出ブロックに続くブロックである次ブロックを前記主記憶から読み出すことが必要か否かを予測する命令解析手段と、前記命令解析手段の予測に応答して、前記次ブロックの読み出しが必要であると予測された場合、前記次ブロックを前記主記憶から読出して、前記命令補助記憶装置に格納させるための次ブロック読出手段とを備え、前記命令解析手段は、前記読出ブロックと前記次ブロックとの領域外に分岐すると予測される命令でないことを検出して、前記次ブロックを読出すことが必要であると予測する予測手段を含んでいる。
【0015】
また、請求項2記載の先行読出機能付命令キャッシュメモリのように、前記命令解析手段は、前記読出ブロック内から分岐すると予測される命令である分岐予測命令を検出する分岐予測命令検出手段と、前記分岐予測命令が、自身のアドレスより大きいアドレスに分岐する前方分岐か否かを判定する前方分岐判定手段と、前記予測手段とを含み、前記予測手段は、前記分岐判定手段が前記分岐予測命令が前方分岐であると判定した場合に、前記次ブロックを読出すことが必要であるとさらに予測するように構成してもよい。
【0016】
この発明に係る請求項3記載の先行読出機能付命令キャッシュメモリは、主記憶と処理装置との間にそれぞれの動作速度の相違をバッファリングするために設けられ、前記処理装置から与えられるアクセス要求に応答して、前記主記憶との間でブロック単位で命令情報の授受を行なう命令補助記憶装置と、前記主記憶から読出され、前記命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、前記読出ブロックに続くブロックである次ブロックを前記主記憶から読み出すことが必要か否かを予測する命令解析手段と、前記命令解析手段の予測に応答して、前記次ブロックの読み出しが必要であると予測された場合、前記次ブロックを前記主記憶から読出して、前記命令補助記憶装置に格納させるための次ブロック読出手段とを備え、特定の命令が予め定められており、前記命令解析手段は、前記読出ブロックに前記特定の命令が存在することを検出して、前記次ブロックを読出すことが必要であると予測する予測手段を備えている。
【0017】
この発明に係る請求項4記載の先行読出機能付命令キャッシュメモリは、主記憶と処理装置との間にそれぞれの動作速度の相違をバッファリングするために設けられ、前記処理装置から与えられるアクセス要求に応答して、前記主記憶との間でブロック単位で命令情報の授受を行なう命令補助記憶装置と、前記主記憶から読出され、前記命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、分岐命令を含む場合に分岐先アドレスを計算し、当該分岐先アドレスの命令を含むブロックである分岐先ブロックを前記主記憶から読み出す必要があるか否かを判定する命令解析手段と、前記命令解析手段の判定に応答して、前記分岐先ブロックの読み出しが必要と判定された場合、前記分岐先ブロックを前記主記憶から読出して、前記命令補助記憶装置に格納させるための分岐先ブロック読出手段とを備え、前記命令解析手段は、前記分岐命令が絶対分岐命令あるいはプログラムカウンタ相対分岐命令である場合に、前記分岐先ブロックを前記主記憶から読み出すことが必要であると判定する判定手段を備えている。
【0025】
この発明に係る請求項5記載の先行読出機能付命令キャッシュメモリは、主記憶と処理装置との間にそれぞれの動作速度の相違をバッファリングするために設けられ、前記処理装置から与えられるアクセス要求に応答して、前記主記憶との間でブロック単位で命令情報の授受を行なう命令補助記憶装置を備え、前記命令補助装置は前記アクセス要求で指示されるブロックの情報を保持していない場合に、そのブロックの情報を前記主記憶から取り込み、前記主記憶から読出され、前記命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、分岐命令を含む場合に分岐先アドレスを計算し、当該分岐先アドレスの命令を含むブロックである分岐先ブロックの読み出しを指示する、前記アクセス要求と等価な疑似アクセス要求を前記補助記憶装置に出力する先行読出制御手段をさらに備え、前記先行読出制御手段は、前記分岐命令が絶対分岐命令あるいはプログラムカウンタ相対分岐命令である場合に、前記分岐先ブロックを前記主記憶から読み出すことが必要であると判定する判定手段を備えている。
【0026】
【作用】
この発明における請求項1記載の先行読出機能付命令キャッシュメモリにおいて、命令解析手段は主記憶から読出され、命令補助記憶装置に転送されるブロックである読出ブロックに含まれる命令を解析して、読出ブロックに続くブロックである次ブロックを主記憶から読出すことが必要か否かが予測する。そして、次ブロック読出手段は、命令解析手段により主記憶からの読み出しが必要であると予測された場合、次ブロックを主記憶から読出し、命令補助記憶装置に転送する。
【0027】
したがって、請求項1記載の先行読出機能付命令キャッシュメモリは、読出ブロックの命令の実行に先立って、必要に応じて次ブロックの転送を行うことにより、次ブロックへのアクセス要求が発生したときにミスが発生しないようにしている。
【0028】
この際、次ブロックを主記憶から読出すことが必要か否かの命令解析手段による予測に基づき次ブロックの読出しが行なわれるので、不要なブロックが読出されてしまう可能性は低い。
【0031】
さらに、請求項1記載の先行読出機能付命令キャッシュメモリの命令解析手段における予測手段は、分岐すると予測される命令である分岐予測命令が存在していた場合でも、それが当該読出ブロックと次ブロックとの領域外に分岐すると予測される命令でない場合には、次ブロックを読出すことが必要であると予測する。
【0032】
すなわち、予測手段は、分岐予測命令であっても、読出ブロックと次ブロック内に分岐する命令であれば、次ブロックがアクセスされる可能性は高いため、次ブロックを読出すことが必要であると予測している。
【0033】
また、請求項2記載の先行読出機能付命令キャッシュメモリでは、分岐予測命令検出手段により、読出ブロックに含まれる分岐予測命令が検出されると、前方分岐判定手段により、検出された分岐予測命令が前方分岐か否かが判定される。そして、予測手段により、検出された分岐予測命令が前方分岐であると判定された場合に、次ブロックを読出すことが必要であると予測される。
【0034】
すなわち、予測手段は、分岐予測命令でも後方分岐の場合には他のブロックに分岐することが多いが、前方分岐では他のブロックに分岐する確率が低いため、次ブロックを読出すことが必要であると予測している。
【0035】
また、請求項3記載の先行読出機能付命令キャッシュメモリの命令解析手段における予測手段は、読出ブロックに特定の命令が存在することを検出して、次ブロックを読出すことが必要であると予測する。
【0037】
この発明における請求項4記載の先行読出機能付命令キャッシュメモリにおいて、命令解析手段は、主記憶から読出され、命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、分岐命令を含む場合に分岐先アドレスを計算し、当該分岐先アドレスの命令を含むブロックである分岐先ブロックを主記憶から読み出す必要があるか否かを判定する。そして、分岐先ブロック読出手段は分岐先ブロックの読み出しが必要と判定された場合、分岐先ブロックを主記憶から読出して、命令補助記憶装置に格納させる。
【0038】
したがって、請求項4記載の先行読出機能付命令キャッシュメモリは、読出ブロックの命令の実行に先立って、必要に応じて分岐先ブロックの転送を行うことにより、分岐先ブロックへのアクセス要求が発生したときにミスが発生しないようにしている。
【0039】
この際、分岐先ブロックを主記憶から読出すことが必要か否かの命令解析手段による判断に基づき分岐先ブロックの読出しが行なわれるので、不要な分岐先ブロックが読出されてしまう可能性は低い。
【0040】
加えて、請求項4記載の先行読出機能付命令キャッシュメモリの命令解析手段の判定手段は、分岐命令が絶対分岐命令あるいはプログラムカウンタ相対分岐命令である場合に、分岐先ブロックを主記憶から読み出すことが必要であると判定する。
【0041】
読出ブロックに絶対分岐命令あるいはプログラムカウンタ相対分岐命令が存在している場合は分岐先ブロックがアクセスされる可能性が高いため、判定手段の上記判定の精度は高い。
【0051】
この発明における請求項5記載の先行読出機能付命令キャッシュメモリの先行読出制御手段は、主記憶から読出され、命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、分岐命令を含む場合に分岐先アドレスを計算し、当該分岐先アドレスの命令を含むブロックである分岐先ブロックの読み出しを指示するアクセス要求と等価な疑似アクセス要求を補助記憶装置に出力する。
【0052】
したがって、先行読出制御手段は、読出ブロックに分岐命令が存在する場合、補助記憶装置に対する分岐先ブロックでのアクセスを行うため、分岐先ブロックが補助記憶装置に存在しないとき、補助記憶装置は主記憶に対する分岐先ブロックの読み出しを要求して、分岐先ブロックを自動的に取り込み、分岐先ブロックが補助記憶装置に存在するとき、分岐先ブロックの読み出し要求を発しないため主記憶には全くアクセスしない。
【0053】
【実施例】
以下、本発明を3つの実施例に基づいて詳細に説明する。なお、本発明は様々な局面を持っており、以下に示す3つの実施例は、それらの曲面をある特定の組合わせで実現したものである。したがってこれ以外の組合わせについても、上述の特許請求の範囲に規定されたものであれば本願に含まれることは言うまでもない。
【0054】
<<第1の実施例>>
第1の実施例は、命令補助記憶装置たる命令キャッシュからの読出要求に応答してメモリから1ブロックの命令情報が読出された場合に、その読出された1ブロック内に分岐予測命令が存在するか否かを検出し、存在していない場合には次のブロックも続けてメモリから読出して命令キャッシュに転送する先行読出機能付命令キャッシュに関する。
【0055】
1ブロック内の命令情報に分岐予測命令が含まれない場合、次のブロックに対するアクセス要求が出される確率は極めて高い。したがって予め次のブロックをメモリから読出して命令キャッシュに転送しておくことにより、次のブロックのアクセス要求が発生したときにミスとなることはなく、ヒット率が上昇する。また、読出された1ブロック内に分岐予測命令が存在する場合には、次のブロックを読出しても無駄となる可能性が高い。そうした場合には次のブロックは読出されないので、キャッシュメモリへの無駄な転送が行なわれずに済む。また、キャッシュメモリ内に既に格納されていた、よりアクセスされる頻度の高いブロックがこの次ブロックの読出により命令キャッシュから消去されることがない。したがってさらにキャッシュミスの確率が低下できる。
【0056】
図1はこの発明の第1の実施例である先行読出機能付命令キャッシュメモリの構成をを示すブロック図である。同図に示すように、メモリ22は記憶階層の下位の部分を構成する記憶装置であり、命令キャッシュ30は上位の部分を構成する記憶装置である。命令キャッシュ30は特に、命令のみを記憶する命令キャッシュであり、CPUによる命令の実行速度と、メモリ22からの読出速度との相違をバッファリングするために設けられたものである。
【0057】
一般的に命令キャッシュ30は、CPUから命令のアクセス要求が与えられる。命令キャッシュ30は要求されたデータが命令キャッシュ30内に存在しない場合、メモリ22に対する読出信号と、読出したいブロック(読出ブロック)を示すアドレスとをメモリ22に向けて転送する。転送の具体的方法は後述する。
【0058】
図1を参照して、本発明の先行読出機能付命令キャッシュ20は、メモリ22と図示されないプロセッサとの間に設けられる。先行読出機能付命令キャッシュ20は、メモリ22からブロック単位で命令を読出して格納しておく命令補助記憶装置たる命令キャッシュ30と、命令キャッシュ30の先行読出を制御する先行読出制御部32とを含む。
【0059】
先行読出制御部32は、メモリ22から読出ブロックのアドレスを格納するアドレスレジスタ44と、アドレスレジスタ44に保持された値を1ブロック分加算するカウンタ46と、与えられる選択信号に応答して、命令キャッシュ30またはカウンタ46の出力を選択してアドレスレジスタ44に与えるためのセレクタ48と、アドレスレジスタ44に格納された値により指定されるアドレスから読出された1ブロックの命令を一旦格納し、命令キャッシュ30に与える命令レジスタ40と、命令レジスタ40に格納された1ブロックの命令内に分岐予測命令が含まれるか否かを判定し、含まれない場合にはセレクタ48、メモリ22、および命令キャッシュ30を制御して次ブロックの命令をメモリ22から命令キャッシュ30に転送させるための命令解析部42とを含む。先行読出制御部32のうち、命令解析部42以外の部分が次ブロック読出手段に相当する。
【0060】
図2は命令レジスタ40及び命令解析部42の内部構成を示すブロック図である。同図に示すように、命令レジスタ40は、n個の命令1〜命令nをそれぞれ格納するn個のレジスタ40−1〜40−nから構成される。
【0061】
命令解析部42は、それぞれレジスタ40−1〜40−nに接続され、各レジスタに分岐予測命令が含まれるか否かを検出するための分岐予測命令検出回路62−1〜62−nと、分岐予測命令検出回路62−1〜62−nの出力と、命令キャッシュ30からの読出信号とに応答して、セレクタ48に対する選択信号とメモリ22に対する読出信号とを出力するための読出信号発生回路60と、読出信号発生回路60の出力に応答して、命令キャッシュ30へのコントロール信号を発生するためのコントロール信号発生回路64とを含む。なお読出信号発生回路60は、分岐予測命令検出回路62−1〜62−nのいずれからも、分岐予測命令が検出されたことを示す信号が与えられない場合に、セレクタ48に対して図1に示すカウンタ46の出力を選択する選択信号を与えるように動作する。
【0062】
図2に示す分岐予測命令検出回路62−1〜62−nはそれぞれ同一の構成を有する。以下「m」は、1からnまでの任意の整数を表わすものとする。
【0063】
図3は分岐予測命令検出回路62−mの内部構成を示す説明図である。同図に示すように、分岐予測命令検出回路62−mは、分岐予測命令を予め格納する分岐予測命令レジスタ70と、命令レジスタ40−mおよび分岐予測命令レジスタ70の双方に接続され、レジスタ40−mに格納されている命令と、分岐予測命令レジスタ70に格納されている分岐予測命令とが一致しているか否かを検出し一致検出信号を読出信号発生回路60に与えるための一致検出回路72とを含む。
【0064】
図4は読出信号発生回路60の内部構成を示す回路図である。同図に示すように、読出信号発生回路60は、分岐予測命令検出回路62−1〜62−nに接続されたn個の入力を有するNANDゲート82と、命令キャッシュ30から与えられる読出信号を一旦ラッチするラッチ回路80と、NANDゲート82の出力とラッチ回路80の出力とに接続された2つの入力を有するANDゲート84と、ANDゲート84の出力と、命令キャッシュ30からの読出信号とが与えられる2つの入力を有するORゲート86とから構成される。なお、ラッチ80はCPU18の動作用のクロックCKをさらに受け、このクロックCKに同期して命令キャッシュ30から得られる読出要求を記憶する。
【0065】
ANDゲート84の出力がセレクタ48に対する選択信号、ORゲート86の出力がメモリ22に対する読出信号となる。
【0066】
以下、図1〜図4で示した第1の実施例の先行読出機能付命令キャッシュの動作を説明する。
【0067】
ここで、CPUから、命令キャッシュ30内に存在しないデータが要求されたものとする。この場合命令キャッシュ30は、命令解析部42に対して読出信号を与える。命令キャッシュ30はまた、セレクタ48に対して当該命令に対するブロックのアドレスを与える。命令解析部42は、命令キャッシュ30から読出信号を受け、セレクタ48を制御して命令キャッシュ30から出力されたアドレスを選択させる。セレクタ48は命令キャッシュ30の出力したアドレスをアドレスレジスタ44に格納させる。
【0068】
メモリ22は、アドレスレジスタ44により示されたブロックを命令レジスタ40に転送する。命令キャッシュ30はさらに、命令解析部40から与えられるコントロール信号に応答して、命令レジスタ40に格納された1ブロック分のデータを格納する。
【0069】
カウンタ46は、アドレスレジスタ44に格納されている値を1ブロック分加算し、再びセレクタ48に与える。
【0070】
命令解析部42は、後述のようにして命令レジスタ40に格納された1ブロック分の命令内に、分岐すると予測される命令である分岐予測命令があるか否かを判定する。分岐予測命令がなかった場合には、命令解析部42はセレクタ48を制御してカウンタ46の出力を選択させる。セレクタ48の出力はアドレスレジスタ44に格納される。命令解析部42はまた、メモリ22に対して読出信号を与える。したがってメモリ22は、アドレスレジスタ44により指定された1ブロック次のブロックを命令レジスタ40に対して転送する。命令解析部42はまた、命令キャッシュ30に対してコントロール信号を与え、命令レジスタ40の内容を格納させる。
【0071】
図2〜図4を参照して、命令解析部42は以下のように動作する。
【0072】
特に図3を参照して、分岐予測命令検出回路62−mの一致検出回路72は、レジスタ40−mに格納されている命令と分岐予測命令レジスタ70に格納されている分岐予測命令とが一致するか否かを判定し、一致する場合には分岐信号を生成し読出信号発生回路60に与える。再び図2を参照して、n個の分岐予測命令検出回路62−1〜61−nの各々においてこの処理が行なわれる。
【0073】
図4を参照して、NANDゲート82は、分岐予測命令検出回路62−1〜62−nから与えられる信号のうちのひとつでも分岐信号である場合には読出信号を出力せず、そうでない場合、読出信号を出力する。
【0074】
ラッチ回路80は、クロックCKに同期して命令キャッシュ30からの検出信号を一旦ラッチし、ANDゲート84に与える。したがって、ANDゲート84は、最初に命令キャッシュ30から読出信号がメモリ22に与えられたのと1クロック遅れてNANDゲート82の出力をセレクタ48およびORゲート86に与える。分岐予測命令検出回路62−1〜62−nからの信号がすべて分岐信号でなければANDゲート84から読出信号が出力され、図1に示されるセレクタ48はカウンタ46の出力を選択することになる。
【0075】
さらにORゲート86は、命令キャッシュ30からの読出信号とANDゲート84の出力との論理和をとり読出信号としてメモリ22に与える。したがってメモリ22は、最初に命令キャッシュ30から指定された読出ブロックの次のブロックを命令レジスタ40に与える。命令キャッシュ30は命令レジスタ40の出力を格納する。
【0076】
図2に示されるコントロール信号発生回路64は、メモリ22に対する読出信号が出力された後、命令レジスタ40に1ブロックのデータが格納されると、命令キャッシュ30に対して命令レジスタ40の出力を格納するコントロール信号を発生して命令キャッシュ30に与えるためのものである。命令レジスタ40を介さず直接メモリ122の出力を格納してもよい。
【0077】
ふたたび図2を参照して、分岐予測命令検出回路62−1〜62−nの少なくとも1つで、対応するレジスタに格納されている命令が分岐予測命令と一致していることが検出された場合、図4に示されるNANDゲート82の出力は読出を指示しない値となる。セレクタ48に対する選択信号はなく、ORゲート86からは次の読出信号が与えられない限り読出信号は出力されない。したがって次のブロックの転送は行なわれない。
【0078】
命令キャッシュにおいては、CPUから要求されるデータは連続性が高い。したがって現在要求されている次のブロックが要求される可能性は高い。本実施例のように予め命令キャッシュに次のブロックを転送しておげば、キャッシュミスが生じる可能性が低減されシステムの性能向上につながる。また本実施例では、命令解析部42の動作により、次のブロックを転送することが必要かどうかが予測され、必要な場合にのみ次ブロックの転送が行なわれる。したがって不要なデータの転送を防止することができる。また命令キャッシュ30が一杯である場合、新たにメモリ22からデータが転送されると、現在格納されているブロックを消去する必要がある。不要なデータの格納のために、現在格納されているブロックであって、しかも必要となる可能性のあるブロックが消去される恐れが小さくなり、さらにキャッシュミスの確率が低下する。
【0079】
<<第2の実施例>>
本発明の第2の実施例について説明する。この第2の実施例では、命令キャッシュから、メモリに対する読出要求があった場合、要求された読出ブロックをメモリから読出して一旦格納する。さらに、格納された読出ブロック内に分岐命令があるかどうかを判定し、分岐命令が存在しない場合には第1の実施例と同様に次のブロックを連続して読出す。分岐命令が存在している場合であっても、その分岐命令が自身のアドレスより大きいアドレスに分岐する前方分岐である場合、およびその分岐命令の分岐先アドレスが当該読出ブロック内または次ブロック内である場合には次ブロックを読出すこととしている。一般に分岐命令が前方分岐の場合には約半分の確率で分岐が生じ、自身のアドレスより小さいアドレスに分岐する後方分岐の場合には多くの場合分岐が生じる。後方分岐の場合、分岐すると予測して分岐予測命令として扱い、前方分岐の場合には分岐しないものとして取扱ってもよい。また分岐命令が存在していたとしても、その分岐先アドレスが読出ブロックまたは次ブロック内であれば次ブロックを予め読出しておくことが有効である。したがってこの第2の実施例により、仮に分岐予測命令が読出されたブロック内に含まれていても、次ブロックを先行読出しておくことが有効であり、キャッシュミスの確率を低下できるという効果がある。
【0080】
図5はこの発明の第2の実施例である先行読出機能付命令キャッシュメモリの構成を示すブロック図である。同図に示すように、第2の実施例の先行読出機能付命令キャッシュ100は、図示されないCPUとメモリ22との間に設けられる。先行読出機能付命令キャッシュ100は、命令キャッシュ104と先行読出制御部102とを含む。
【0081】
命令キャッシュ104はデータを格納するデータアレイ部112と、格納されているデータがどのブロックのデータであるかを示すタグ部114とを含む。
【0082】
先行読出制御部102は、第1の実施例と同様にアドレスレジスタ44とカウンタ46とセレクタ48とを含む。但し、カウンタ46の出力は本実施例の場合タグ部114にも与えられる。先行読出制御部102はまた命令レジスタ40と命令解析部110とを含む。命令解析部110は命令キャッシュ104と命令レジスタ40とセレクタ48とに接続され、命令レジスタ40に格納された読出ブロックに含まれる命令が分岐予測命令か否か、分岐予測命令であったとしてその分岐先が命令レジスタ40に読出された読出ブロック内またはその次ブロック内か否か、また前方分岐か否かを判定する。
【0083】
命令解析部110は、判定結果に従ってセレクタ48、メモリ22、命令キャッシュ104を制御して必要であれば次ブロックをメモリ22から命令キャッシュ104に転送する。
【0084】
命令解析部110には、命令キャッシュ104のタグ部114から、ミス信号116が与えられる。ミス信号116は、本実施例の場合、カウンタ46の出力するアドレスに該当するブロックが命令キャッシュ104内に存在していない場合に生成される信号である。ミス信号はまた、CPUからアクセス要求があったブロックが命令キャッシュ104内に存在していない場合も発生される。
【0085】
図6を参照して、命令解析部110は、命令1〜命令nをそれぞれ格納したレジスタ40−1〜40−nに対応して設けられたn個の次ブロック読出信号発生回路120−1〜120−nと、次ブロック読出信号発生回路120−1〜120−nの出力および命令キャッシュ104からの読出信号に応答して、セレクタ48に対する選択信号およびメモリ22(図5)に与えるべき読出信号を発生する読出信号発生回路60と、読出信号発生回路60の出力と命令キャッシュ104からのミス信号116とが与えられるANDゲート122と、ANDゲート122の出力に応答して命令キャッシュ104に与えるコントロール信号を発生するコントロール信号発生回路64とを含む。ANDゲート122の出力がメモリ22に対する読出信号となる。
【0086】
読出信号発生回路60は、図2および図4に示される第1の実施例のそれと同じである。したがってここではその詳細については繰返さない。
【0087】
図7を参照して、次ブロック読出信号発生回路120−mは、命令mが分岐予測命令か否かを検出するための分岐予測命令検出回路130と、アドレスレジスタ44からのアドレスおよび命令mの内容とに基づいて分岐先アドレスを計算するための分岐先アドレス計算回路132と、アドレスレジスタ44に格納されているアドレスに1ブロック分を加算する加算器134と、アドレスレジスタ44が格納している読出ブロックのアドレスと分岐先アドレス計算回路132により計算されたアドレスのブロックとが一致するか否かを判定するための一致検出回路136と、加算器134の出力するアドレスと分岐先アドレス計算回路132の出力とが一致するか否かを判定するための一致検出回路138と、一致検出回路136および138の出力に2つの入力が接続されたORゲート140と、分岐予測命令検出回路130の出力とORゲート140の出力とに接続された2つの入力を有するANDゲート144と、分岐予測命令検出回路130の出力する分岐信号を反転するためのNOT回路142と、NOT回路142の出力とANDゲート144の出力とに接続された2つの入力を有するORゲート146とから構成される。
【0088】
図8を参照して、分岐予測命令検出回路130は、分岐命令を格納するレジスタ160と、レジスタ40−mから与えられる命令mと分岐命令レジスタ160に格納されている分岐命令とが一致するか否かを判定するための一致検出回路162と、分岐先アドレス計算回路132の出力する分岐先アドレスをアドレスレジスタ44の格納しているアドレスから減算するための減算器164と、一致検出回路162の出力および減算器164の出力にそれぞれ接続された2つの入力を有するANDゲート166とを含む。ANDゲート166の出力を分岐信号と呼ぶ。なお本実施例の場合、たとえば命令の第1ビットと第2ビットとが“1”の場合に分岐命令であると予め決めておき、それに従って命令セットを指定しておくものとする。したがってこの場合一致検出回路162による比較はたとえば第1ビットおよび第2ビットなど、その命令が分岐命令か否かを示すビットのみに対して行なわれる。
【0089】
図5〜図8を参照してこの第2の実施例は以下のように動作する。命令キャッシュ104は、CPUから要求されたデータがデータアレイ112に含まれない場合読出要求信号を命令解析部110に与える。同時にミス信号116も命令解析部110に与える。
【0090】
図6を参照して、読出信号発生回路60は与えられた読出信号に応答して読出信号を生成し、ANDゲート122はこの読出信号をメモリ22に与える。このとき読出信号発生回路60が発生する選択信号は、セレクタ48が命令キャッシュ104からのアドレスを選択するような値となっている。したがって命令キャッシュ104から出力されるアドレスはアドレスレジスタ44に格納される。
【0091】
メモリ22は、命令解析部110から与えられる読出信号に応答し、アドレスレジスタ44で示されるアドレスのデータを1ブロック分、命令レジスタ40に与える。命令解析部110は、図6に示されるコントロール信号発生回路64により命令キャッシュ104に、命令レジスタ40の内容を格納させる。
【0092】
図6に示される次ブロック読出信号発生回路120−1〜120−nは各々以下のように動作する。
【0093】
図7に示される分岐先アドレス計算回路132は、命令mが分岐命令である場合、アドレスレジスタ44に格納されているアドレスに基づき命令mの分岐先アドレスを計算し、分岐先アドレスのデータが格納されている分岐先ブロックのアドレスを生成する。このアドレスは分岐予測命令検出回路130、一致検出回路136および138に与えられる。
【0094】
図8を参照して、一致検出回路162は、レジスタ40−mに格納されている命令mの所定ビットが分岐命令レジスタ160に格納されている分岐命令の所定ビットと一致するか否かを判定し、一致する場合には一致信号をANDゲート66に与える。
【0095】
減算器164は、アドレスレジスタ44に格納されているアドレスから分岐先アドレス計算回路132から与えられる分岐先アドレスを減算し、結果が正の場合に後方分岐であることを示す信号をANDゲート166に与える。ANDゲート166の出力は分岐信号であり、命令mが分岐命令であってかつ後方分岐の場合にのみ出力される。
【0096】
図7を参照して、一致検出回路136および138はそれぞれ、分岐先アドレスが、アドレスレジスタ44に格納されているブロックのアドレスまたはその1ブロック次のアドレスと等しいか否かを判定し、一致している場合にはそれぞれ一致信号をORゲート140に与える。したがってORゲート140の出力は、分岐先アドレスが読出ブロック内か、次ブロック内である場合にHレベルとなる。
【0097】
既に述べたように分岐予測命令検出回路130の出力する分岐信号(図8参照)は、命令mが分岐命令であってかつ後方分岐の場合のみにHレベルとなる。したがってANDゲート144の出力は、命令mが後方分岐命令であってかつ分岐先アドレスが直前に読出ブロックまたはその次のブロックに存在している場合にHレベルとなる。ANDゲート144の出力はORゲート146に与えられる。
【0098】
NOT回路142の出力は、命令mが分岐命令でないか、または分岐命令であっても前方分岐である場合にはHレベルとなる。したがってORゲート46の出力は、命令mが分岐命令であってかつ後方分岐であり、分岐先アドレスが読出ブロックまたはその次のブロック外である場合にのみLレベルとなる。この場合次ブロックの読出は行なわれない。
【0099】
再び図6を参照して、命令が後方分岐命令以外であると予測された場合、読出信号発生回路60は第1の実施例と同様に選択信号を発生してセレクタ48に与え、また読出信号を発生してANDゲート122に与える。次ブロックのアドレスを示す信号はカウンタ46から命令キャッシュ104のタグ部114に与えられる。命令キャッシュ104のタグ部114は、読出ブロックがデータアレイ112に既に格納されているか否かを判定し、存在していない場合にはミス信号116を再びANDゲート122に与える。この場合読出信号がANDゲート122を介してメモリ22に与えられ、さらにコントロール信号がコントロール信号発生回路64により発生されて命令キャッシュ104に与えられる。既に次ブロックが命令キャッシュ内に格納されている場合にはミス信号116は与えられない。したがって読出信号は発生されず、次のブロックの転送も行なわれない。これにより、既に命令キャッシュに格納されているブロックをメモリから転送するという無駄な動作を防ぐことができる。なお、ANDゲート122を設げず、ミス信号に関係なく読出を行なっても、先行読出自体は同様に行なえる。
【0100】
以上のようにこの第2の実施例によれば、命令が分岐予測命令であっても、分岐先がアクセス要求されている読出ブロックまたはその次のブロックである場合には、次のブロックをメモリからキャッシュに転送するための制御信号が生成される。したがって分岐予測命令であっても、分岐先アドレスによってはブロックの先行読出を行なうことができ、キャッシュミスの確率を低下できる。また、命令が分岐命令であって前方分岐の場合にも同様に次ブロックを読出す制御信号が生成される。そのため後方分岐の分岐命令を分岐予測命令として扱うことができ、無駄なブロックの転送を少なくすることが可能になる。
【0101】
<<第3の実施例>>
第3の実施例は、命令として、次のブロックをメモリからキャッシュにロードする命令を予め用意しておく実施例である。本実施例については、命令解析部についてのみそのブロック図を示す。他の部分の構成は第1及び第2の実施例と同様である。予め次ブロックの内容をメモリから読みだすことを指示する次ブロックロード命令を特定しておき、必要に応じて次ブロックロード命令を命令中に挿入しておくことにより、読出されたブロック中に次ブロックロード命令がある場合、次のブロックを命令キャッシュに転送できる。したがって次ブロックロード命令を効果的に命令中に配置することにより、キャッシュミスの低下を防ぐことができる。
【0102】
図9はこの発明の第3の実施例である先行読出機能付命令キャッシュメモリの命令解析部周辺の構成を示すブロック図である。同図に示すように、第3の実施例の先行読出機能付命令キャッシュの命令解析部180は、命令1〜命令nにそれぞれ対応して設けられたn個の分岐予測命令検出回路182−1〜182−nと、分岐予測命令検出回路182−1〜182、nの出力に接続されたn個の入力を有するORゲート184と、ORゲート184の出力に接続され、命令キャッシュをコントロールするコントロール信号を発生するためのコントロール信号発生回路64と、ORゲート184の出力と命令キャッシュからの読出信号とが与えられる2つの入力を有するORゲート186とを含む。ORゲート186の出力はメモリ22に対する読出信号となる。またORゲート184の出力はセレクタ48に対する選択信号である。
【0103】
図10を参照して次ブロックロード命令検出部182−mは、次ブロックロード命令を格納したレジスタ192と、命令mと次ブロックロード命令とが一致するか否かを検出し、一致した場合に次ブロックロード信号を発生するための一致検出回路194とを含む。
【0104】
図9および図10を参照してこの第3の実施例の先行読出機能付命令キャッシュの命令解析部は以下のように動作する。
【0105】
命令キャッシュから読出要求が発生した場合、ORゲート186を介してその読出信号はメモリ22に与えられる。メモリ22から1ブロック分の命令が命令レジスタ40に転送され、さらに命令キャッシュに転送される。
【0106】
図10を参照して、次ブロックロード命令検出部182−1〜182nの各々においては、一致検出回路194が、命令mと次ブロックロード命令とが一致するか否かを判定し、一致する場合に次ブロックロード信号を生成して図9に示すORゲート184に与える。
【0107】
ORゲート184は、次ブロックロード信号が1つでも検出された場合、ORゲート186を介してメモリ22に対する読出信号を与える。同じくORゲート184の出力はセレクタ48に対する選択信号となる。セレクタ48は、第1の実施例および第2の実施例と同様に命令キャッシュから最初に与えられた読出ブロックの次のアドレスのブロックを選択してアドレスレジスタ44(図1参照)に与え、したがって次ブロックが命令キャッシュに転送されることになる。
【0108】
1つも次ブロックロード命令が検出されなかった場合、ORゲート184から読出信号は発生されず、したがって次ブロックの転送は行なわれない。
【0109】
なおコントロール信号発生回路64は、上述した最初のブロックと次ブロックとの命令キャッシュへの格納タイミングを制御するコントロール信号を発生して命令キャッシュに与えるためのものである。
【0110】
以上のようにこの第3の実施例によれば、読出されたブロックに含まれる命令が分岐予測命令であるか否かを判定する必要がなく、高速に次のブロックをメモリからキャッシュに転送する信号を生成することができる。並列動作が可能なマシンの場合、並列に実行できる命令は限られている。そのため多くのサイクルにおいて、使用されていないユニットがマシン内に存在する。そのユニットを利用し、次のブロックをメモリからキャッシュに転送することを指示する命令を実行することができる。このように構成することにより、命令が分岐予測命令であるか否かを判定する必要がなく、高速に次のブロックをメモリからキャッシュに転送する信号を生成することができ、また次ブロックロード命令を予め適切な箇所に配置しておくことにより、キャッシュミスが発生する確率を低くすることができる。
【0111】
<<第4の実施例>>>
図11はこの発明の第4の実施例である先行読み出し機能付命令キャッシュメモリの構成を示すブロック図である。同図において、メモリ22は、記憶階層の下位の部分を構成する記憶装置であり、命令キャッシュ30は、上位の部分を構成する記憶装置で、特に、命令のみを記憶し、CPUによる命令の実行速度と、メモリ22からの読み出し速度との相違をバッファリングするために設けられたものである。
【0112】
命令キャッシュ30は、CPUのアクセス要求で指示されたブロックのデータが命令キャッシュ30内にない場合、コントロール信号として読出要求と、そして読み出したいブロックを示す読出アドレスを読出制御部3に出力する。また、命令キャッシュ30は、CPUのアクセス要求で指示されたブロックのデータが命令キャッシュ30内に存在する場合、読出要求及び読出アドレスを出力することなく、ブロックのデータをCPUが接続されるデータバスに出力する。
【0113】
読出制御部3は、メモリ22から読み出したい命令を含むブロックのアドレスを格納するアドレスレジスタ44と、与えられる選択信号に応答して、命令キャッシュ30または、命令解析部5から与えられる分岐先アドレスの出力を選択してアドレスレジスタ44に与えるセレクタ33と、アドレスレジスタ44に格納された値により指定されるアドレスから読みだされた1ブロックの命令を一旦格納し、命令キャッシュに与える命令レジスタ40と、命令レジスタ40に格納された1ブロックに分岐命令が含まれるか否かを検出し、含まれる場合には、分岐先アドレスを計算し、セレクタ33、メモリ22および命令キャッシュ30を制御して、必要な命令が含まれるブロックをメモリ22から命令キャッシュ30に転送させるための命令解析部5とから構成される。なお、読出制御部3のうち、命令解析部5以外の部分が分岐先ブロック読出手段に相当する。
【0114】
以下に、CPUから、命令キャッシュ内にないデータを要求され、命令キャッシュにおいてメモリからのブロックの読み出しが発生した場合の動作を説明する。
【0115】
1.命令キャッシュ30は、要求された命令の読み出しアドレスをセレクタ33及びアドレス・レジスタ44を経由して、メモリ22に読み出しを所望するアドレスを送信し、また、読出要求を命令解析部5を経由してメモリ22に送信する。
【0116】
2.メモリ22から読みだされた読出ブロックは、命令レジスタ40に記憶された後、命令キャッシュ30に転送される。命令解析部5は、命令レジスタ40に格納されている命令の中から分岐命令の存在の有無を解析し、分岐命令がある場合、命令によって(PC相対命令などの場合)は、アドレスレジスタ44の値を参照して分岐先アドレスを計算する。また、命令解析部5は、分岐先アドレスのブロック(分岐先ブロック)をメモリ22から命令キャッシュ30に転送するか否かの制御信号を命令キャッシュ30に出力し、メモリ22に対し読み出しを制御する読出信号を出力し、セレクタ33には、どのアドレスをアドレスレジスタ44に格納するかを選択するアドレス選択信号を出力する。
【0117】
3.メモリ22は、命令解析部5から与えられた読出信号に従って、アドレスレジスタ44に格納されているアドレスのブロックを命令レジスタ40を介して命令キャッシュ30に転送する。
【0118】
4.以下、命令キャッシュ30から読出要求があるか、命令レジスタ40に格納したブロックに分岐命令が存在しなくなるまで、上記3.〜5.の動作を繰り返す。
【0119】
命令キャッシュにおいては、読出信号により取り込んだ読出ブロックに分岐命令が含まれている場合、分岐先の命令を含む分岐先ブロックがキャッシュ内にない場合が多い。従って、第4の実施例の先行読み出し機能付命令キャッシュメモリのように、あらかじめ分岐先ブロックをメモリから命令キャッシュに転送しておけば、キャッシュ・ミスが生じる可能性が低減され、システムの性能向上につながる。
【0120】
<命令解析部>
図12は命令解析部5の内部構成を示すブロック図である。
【0121】
一般に、分岐命令には、絶対アドレス分岐、PC(プログラムカウンタ)相対分岐、レジスタ間接分岐などが存在する。本発明が対象とする分岐命令は、絶対アドレス分岐及びPC相対分岐である。絶対アドレス分岐の命令コードは、絶対アドレス分岐であることを示すオペコードと分岐先アドレスで構成される。PC相対分岐の命令コードは、PC相対分岐であることを示すオペコードと、分岐命令と分岐先の命令のアドレス差であるオフセットで構成される。
【0122】
命令レジスタ40はn個の命令1〜nをそれぞれ格納するレジスタ40−1〜40−nで相成される。命令解析部5は、それぞれレジスタ40−1〜40−nに接続され、分岐命令が含まれるか否かを検出し、含まれる場合、どの種類の分岐命令であるかと分岐先アドレスまたはオフセットを検出するための分岐命令解析回路220−1〜220−nと、分岐命令解析回路220−1〜220−nの出力に応答して、アドレスレジスタ44の出力と、分岐命令解析回路220−1〜220−nから得られる分岐情報を利用して分岐先アドレスを計算し、分岐先命令読出信号を発生するアドレス生成回路41と、アドレス生成回路41の出力と命令キャッシュ30からの読出要求とに応答して、セレクタ33に対する選択信号とメモリ22に対する読出信号を出力する読出信号発生回路49と、読出信号発生回路49の出力に応答して、命令キャッシュ30への制御信号を発生するためのキャッシュ制御信号発生回路43を含む。図12に示す分岐命令解析回路220−1〜220−nはそれぞれ同一の構成を呈する。以下、mは、1〜nの任意の整数を表すものとする。
【0123】
以下に、これらの動作を説明する。基本的な動作は、命令解析部5において、命令レジスタ40に格納された読出ブロックの内容を解析し、分岐命令があるか否かを判断し、分岐命令がある場合、分岐先アドレスを計算し、その命令を含むブロックをメモリ22から命令キャッシュ30に転送する制御信号を生成する。以下に詳しく説明する。
【0124】
1.分岐命令解析回路220−mは、命令レジスタ40−mに格納されている命令を解析し、分岐命令であるか否かを検出し、分岐命令である場合、その分岐命令が、PC相対分伎、絶対アドレス分岐、それ以外を判定し、分岐命令の種類と、PC相対分岐の場合はオフセットを分岐先情報とし、絶対アドレス分岐の場合は分岐アドレスを分岐先情報として、アドレス生成回路41に転送する。この際、PC相対分岐、絶対アドレス分岐以外の分岐の場合は、分岐先アドレスが計算できないため、分岐命令以外と同様の扱いを行なう。
【0125】
2.アドレス生成回路41は、分岐命令解析回路220−1〜220−nから与えられた分岐先情報とアドレスレジスタ44の出力を利用して、分岐先アドレスを計算する。PC相対分岐の場合は、分岐命令のアドレス+オフセットを、絶対アドレス分岐の場合は、分岐先情報によって得られたアドレスを分岐先アドレスとする。また、分岐命令解析回路220−1〜220−nの出力を利用して、分岐命令(PC分岐、絶対アドレス分岐)が含まれる場合、分岐先の命令を含む分岐先ブロックをメモリ22から読みだすための分岐先命令読出信号を生成する。分岐命令以外の命令のみ場合、分岐先命令読出信号は生成しない。
【0126】
3.読出信号発生回路49は、命令キャッシュ30からの読出要求と、アドレス生成回路41の出力である分岐先命令読出信号とに基づき、メモリ22に対する読出要求を出力する。また、命令キャッシュ30からの読出要求がある場合は、命令キャッシュ30から与えられるアドレスを選択し、分岐先命令読出信号が生成されている場合、アドレス生成回路41の出力である分岐先アドレスの選択を指示する選択信号をセレクタ33に送信する。ただし、命令キャッシュ30からの読出要求はアドレス生成回路41からの分岐先命令読出信号より優先する。
【0127】
4.キャッシュ制御信号発生回路43は、読出信号発生回路49から読出信号を受け取り、命令キャッシュ30を制御する制御信号を命令キャッシュ30に出力する。
【0128】
図13は分岐命令解析回路220の内部構成を示すブロック図であり、図14は解析部51の内部構成を示すブロック図である。
【0129】
以下、分岐命令解析回路220−mの構成を図13を用いて説明する。図13に示すように、分岐命令解析回路220−mは、命令レジスタ40−mに格納されている命令をデコードし、オペコードと分岐先アドレスを計算するための絶対アドレスあるいはオフセットを生成するデコード回路50と、オペコードを受取り、命令が絶対分岐か、PC分岐か、それ以外かを解析する解析部51とからなる。
【0130】
解析部51は、図14に示すように、絶対分岐命令のオペコードを記憶する記憶部52と、PC相対分岐命令のオペコードを記憶する記憶部53と、記憶部52の出力とデコード回路50から出力されるオペコードを入力とする比較回路54と、記憶部53の出力とオペコードとを入力する比較回路55と、比較回路54の出力結果と比較回路55の出力結果を入力とし、比較回路54の出力と比較回路55の出力のどちらかが“1”の場合に“0”を出力するXNORゲート56とからなる。種類を表す信号は、比較回路54、55、XNORゲート56それぞれの出力を合わせて3ビットにし、比較回路54の出力は第1ビット、比較回路55の出力は第2ビット、XNORゲート56の出力は第3ビットとして命令の種類を表す。即ち、信号の値が“1”の場合は、絶対分岐、”2”の場合は、PC相対分岐、”4”の場合は、分岐命令でないことを表す。
【0131】
以下に、これらの動作を説明する。
【0132】
1.デコード回路50は、命令レジスタ40−mの命令をデコードし、オペコードと分岐先アドレスを計算するための絶対アドレスもしくはオフセットを生成する。このデコード回路500は、CPU内のデコード回路から、分岐命令を検出し、絶対アドレスもしくはオフセットを検出する機能のみを取り出して簡単化したもので十分である。
【0133】
2.解析部51では、比較回路54によって、デコード回路50から得られるオペコードと記憶部52に記憶されている絶対分岐命令のオペコードとを比較する。また、比較回路55によって、デコード回路50から得られるオペコードと記憶部53に記憶されている相対分岐命令のオペコードとを比較する。分岐命令が絶対分岐の場合は、比較回路54の出力が“1”となり、PC相対分岐の場合は、比較回路55の出力が“1”となり、それ以外の場合は、XORゲートの出力が“1”となる。これらの信号は、命令の種類を表す信号としてアドレス生成回路41へ送られる。
【0134】
図15はアドレス生成回路41の内部構成を示すブロック図である。同図に示すように、アドレス生成回路41は、アドレスレジスタ44と分岐命令解析回路220−1〜220−nの出力にしたがって、分岐先のアドレスを生成する分岐先アドレス生成回路11−1〜11−nと分岐先アドレス生成回路11−1〜11−nより得られる分岐先アドレスの1つを分岐命令解析回路220−1〜220−nの出力にしたがって選択するセレクタ264、と分岐命令解析回路220−1〜220−nの出力にしたがって読出信号を生成する読出回路265とからなる。分岐先アドレス生成回路11−mは、アドレスレジスタ44の値と、mを加算する加算器261と、加算器261の出力結果とオフセットとを加算する加算器262と、分岐命令解析回路220−mから得られた命令の種類を示す信号にしたがって加算器262の出力結果か絶対アドレスを選択するセレクタ263からなる。
【0135】
以下、アドレス生成回路41の動作を説明する。
【0136】
1.命令レジスタ40−mに格納されている命令が分岐命令である場合、分岐先アドレスは、分岐先アドレス生成回路11−mで計算される。加算器261は、アドレスレジスタ44に格納されている命令レジスタ内にある読出ブロックのアドレスと、命令が格納されているレジスタの番号mを加算する。これは、分岐命令のアドレスを知るためである。加算器262は、加算器261の出力と、分岐命令解析回路220−mより得られたオフセットを加算し、分岐先アドレスを計算する。セレクタ263では、命令がPC分岐の場合加算器262の出力を、絶対アドレス分岐の場合は、分岐命令解析回路220−mの出力である絶対アドレスを選択する。
【0137】
2.セレクタ264は、分岐先アドレス生成回路11−1〜11−nの出力の中から、分岐命令解析回路220−1〜220−nの命令の種類を表す信号にしたがって、分岐先アドレスを選択する。例えば、命令kが分岐命令である場合、40−kの分岐命令の種類を表す信号が“1”または、”2”になる。セレクタ264は、この信号にしたがって、分岐先アドレス生成回路11−kの出力結果を分岐先アドレスとして選択する。
【0138】
3.読み出し回路265は、分岐命令解析回路220−1〜220−nの出力である命令の種類の信号の中に、一つでも分岐命令であることを示す信号があれば、分岐先の命令を読みだす必要があることを示す分岐先読出信号を生成する。
【0139】
図16は読出信号発生回路49の内部構成を示すブロック図である。同図に示すように、読出信号発生回路49は、命令キャッシュ30より与えられる読出要求を一旦ラッチするラッチ80と、アドレス生成回路41から出力される分岐先読出信号とラッチ80の出力とに接続されたANDゲート84と、ANDゲート84の出力と、命令キャッシュ30からの読出要求とが与えられるORゲート86とから構成される。ANDゲート84からの出力が、セレクタ33に対する選択信号、ORゲート86の出力がメモリ22に対する読出信号となる。なお、ラッチ80はCPU18の動作用のクロックCKをさらに受け、このクロックCKに同期して命令キャッシュ30から得られる読出要求を記憶する。
【0140】
以下、読出信号発生回路49の動作を説明する。
【0141】
1.ラッチ80は、命令キャッシュ30からの読出要求を一旦ラッチし、ANDゲート84に与える。従って、ANDゲート84は、最初に命令キャッシュ30から読出要求がメモリ22に与えられたのと1クロック遅れてアドレス生成回路41から得られる分岐先読出信号をセレクタ33およびORゲート86に与える。アドレス生成回路41の分岐先読出信号が真ならば、ANDゲート85から読出信号が出力され、セレクタ33は、分岐先アドレスを選択することになる。
【0142】
2.ORゲート86は、命令キャッシュ30からの読出要求とANDゲート85の出力との論理和を取り、読出信号としてメモリ22に与える。従って、メモリ22は、最初、命令キャッシュ30から読出要求があったブロックを命令レジスタ40にあたえ、命令キャッシュ30は、命令レジスタ40の出力を格納する。次に、命令レジスタ40に格納された命令の中に分岐命令があった場合、メモリ22は、分岐先ブロックを命令レジスタ40に与え、命令キャッシュ30は、命令レジスタ40の出力を格納する。
【0143】
図12に示されたキャッシュ制御信号発生回路43は、命令キャッシュ30からメモリ22に対する読出要求が出力された後、命令レジスタ40に1ブロックのデータが格納されると、命令キャッシュ30に対して命令レジスタ40の出力を格納する制御信号を発生するためのものである。このとき、命令レジスタ40を介さずに直接メモリ22の出力を格納するように構成してもよい。
【0144】
命令キャッシュにおいては、分岐が生じると、分岐先の命令がキャッシュ内に格納されていない可能性が高い。そこで、第4の実施例の先行読出機能付命令キャッシュメモリのように、あらかじめ命令キャッシュに分岐先の命令を転送しておけば、キャッシュミスが生じる可能性が低減され、システムの性能向上につながる効果を奏する。
【0145】
さらに、読出ブロックに存在する分岐命令が分岐する確率が高い絶対分岐命令あるいはPC相対分岐命令のときに、分岐先ブロックを主記憶であるメモリ22から命令キャッシュ30に転送するようにすることにより、効率的に命令キャッシュ30に分岐先ブロックを取り込むことができる。
【0146】
<<第5の実施例>>
分岐先の命令を含む分岐先ブロックが既にキャッシュ内にある場合は、メモリ22からブロックを読みだす必要がない。このように構成することにより分岐先の命令を含むブロックがキャッシュ内にあるかどうかを検知し、既に存在する場合は、読み出しを行なわないように制御できる。
【0147】
図17はこの発明の第5の実施例である先行読み出し機能付命令キャッシュメモリの構成を示すブロック図である。同図に示すように、読出制御部4はセレクタ33からレジスタ44に転送される読出アドレスと命令解析部6からの読出要求とがCPU18からアクセス要求と等価な疑似アクセス要求として命令キャッシュ30に出力される。なお、他の構成は図11で示した第4の実施例の先行読出機能付命令キャッシュメモリと同様である。
【0148】
図18は図17の命令解析部6及びセレクタ33の内部構成を示すブロック図である。
【0149】
上記した機能を実現するために、セレクタ33の出力であるアドレスと命令解析部6内のアドレス生成回路41から出力される分岐先読出信号とを、通常CPU18から与えられる命令キャッシュ30へのアクセス要求と等価な疑似アクセス要求として与える。さらに、アドレス生成回路41から出力される分岐先読出信号は、選択信号としてセレクタ33に与えられるがメモリ22には与えられない。また、読出信号発生回路49が取り除かれる。他の構成は図12で示した第4の実施例の命令解析部5と同じである。
【0150】
第5の実施例の命令解析部6の基本的な動作は、図12と同様である。異なる点を以下に示す。
【0151】
1.アドレス生成回路41で計算された分岐先アドレスは、分岐先読出信号にを受けるセレクタ33で選択され、命令キャッシュ30へ送られる。また、アドレス生成回路41の出力である分岐先読出信号は命令キャッシュ30に送られる。すなわち、アドレス生成回路41から出力される分岐先読出信号及び分岐先アドレスが疑似アクセス要求てして命令キャッシュ30に送られる。
【0152】
疑似アクセス要求により、命令キャッシュ30は、命令キャッシュ30内に分岐先アドレスを含む分岐先ブロックが存在しない場合は、通常のキャッシュミス動作を行い、読出要求を命令解析部6に出力し、読出アドレスをセレクタ33に出力することにより、メモリ22から分岐先ブロックの内容を取り込む。
【0153】
2.一方、命令キャッシュ30に分岐先ブロックが存在する場合に、読出要求及び読出アドレスが出力されないため、分岐先ブロックがメモリ22から取り込まれることはない。
【0154】
このように第5の実施例は、命令解析部6を構成することにより、読出ブロック内に分岐命令が存在し、かつ命令キャッシュ30内に分岐先アドレスを含む分岐先ブロックが存在しない場合に、はじめて分岐先ブロックをメモリ22から命令キャッシュ30に転送している。
【0155】
その結果、既に分岐先ブロックが命令キャッシュ30に存在するにもかかわらずメモリ22〜命令キャッシュ30への分岐先ブロックのメモリアクセスが行なわれないため、効率的なメモリアクセスを行うことができる。
【0156】
<<第6の実施例>>
図19はこの発明の第6の実施例である先行読出機能付命令キャッシュメモリの読出信号発生回路49を示すブロック図である。なお、第6の実施例の全体構成は図11で示した第4の実施例の構成と同様であり、命令解析部5の内部構成は図12で示した第4の実施例と同様である。
【0157】
分岐先ブロックが、現在読み出している読出ブロックと等しい場合もありうる。この場合に、もう一度同じブロックを読みだすことは無駄である。第6の実施例の先行読出機能付命令キャッシュメモリは、この無駄を省く機能を付けたものである。
【0158】
基本的な構成は、図11で示した第1の実施例の先行読出機能付命令キャッシュメモリと同じであるが、図11のアドレス生成回路41の出力である分岐先アドレスと、アドレスレジスタ44の出力を読出信号発生回路49の入力として付加する必要がある。
【0159】
図16で示した第1の実施例の読出信号発生回路49との相違点を図19を用いて説明する。第6の実施例の読出信号発生回路49は、図16の読出信号発生回路49の構成に、アドレスレジスタ44の出力とアドレス生成回路41の出力である分岐先アドレス入力とする比較回路73と、比較回路73の出力の否定とANDゲート85の出力を入力とし、ORゲート86に接続されるANDゲート84を付加した構成である。
【0160】
基本的な動作は、図16の読出信号発生回路49と同様である。異なる点を以下に示す。
【0161】
1.比較回路73は、アドレス生成回路で計算された分岐先アドレスとアドレスレジスタ内のアドレスを比較する。比較回路73の出力は、信号を反転させて、ANDゲート84に与えられる。
【0162】
2.ANDゲート84は、ANDゲート85の出力と比較回路73の出力の反転された信号の論理積を取り、アドレスが等しくなく、かつ、読出ブロック内に分岐命令を含む場合、分岐先の命令を読みだすための読出信号を発生させる。この信号は、セレクタ33への選択信号となる。
【0163】
3.ORゲート86は、ANDゲート84の出力と、ラッチ80の論理和を取り、命令キャッシュ30からの読出信号がある場合と、命令キャッシュからの読出信号があった次のサイクルで、分岐先命令を含む分岐先ブロックを読みだす必要がある場合に、メモリ22に対する読出信号を発生させる。
【0164】
このように第6の実施例は、読出信号発生回路49を構成することにより、第4の実施例の効果に加え、現在読み出している読出ブロックに分岐先の命令が含まれる場合、無駄なメモリアクセスを行なう必要がなくなり、次に続くメモリアクセスに影響することがない。したがって、より効率的に分岐先ブロックを命令キャッシュ30に転送することができる。
【0165】
<<第7の実施例>>
図20はこの発明の第7の実施例である先行読出機能付命令キャッシュメモリの分岐命令解析回路220−mに含まれる解析部51の構成を示すブロック図である。なお、第7の実施例の全体構成は図11で示した第4の実施例の構成と同様であり、命令解析部5の内部構成は図12で示した第4の実施例と同様である。
【0166】
分岐先命令は、必ず分岐する訳ではない。分岐しない場合、分岐先の命令をキャッシュに取り込む必要はない。また、分岐命令が分岐するか否かはある程度予測できる。そこで、分岐命令があると必ず分岐先の命令を含む分岐先ブロックをキャッシュに読み込むのではなく、ある程度予測して、必要と思われる場合にのみ読み込む機能を付加したのが第7の実施例である。
【0167】
基本的な構成は、図14で示した第1の実施例の解析部51と同じである。図14の解析部51との相違点を図20を用いて説明する。第7の実施例の解析部51は、図14の構成に、デコード回路50の出力であるオペコードを入力とし、分岐予測信号を発生する分岐予測回路59と、分岐予測信号と比較回路54の出力を入力とし論理積を出力するANDゲート57と分岐予測信号と比較回路55の出力を入力とし論理積を出力するANDゲート58とを付加したものである。そして、ANDゲート57及び58それぞれの出力がXNORゲート56の入力となる。したがって、種類を表す信号は、ANDゲート57、58、XNORゲート56それぞれの出力を合わせて3ビットにし、ANDゲート57の出力は第1ビット、ANDゲート58の出力は第2ビット、XNORゲート56の出力は第3ビットとして命令の種類を表す。即ち、信号の値が“1”の場合は、絶対分岐、”2”の場合は、PC相対分岐、”4”の場合は、分岐命令でないことを表す。
【0168】
基本的な動作は、図14の解析部51の動作と同様である。異なる点を以下に示す。
【0169】
1.分岐予測回路59は、オペコードを調べ、分岐すると予測できる場合、分岐予測信号を生成する。
【0170】
2.ANDゲート57は、オペコードが絶対分岐と等しいか否かを比較する比較回路54の出力と、分岐予測信号の論理積を取り、オペコードが絶対分岐命令であり、分岐すると予測される場合、分岐先ブロックの読み出しが必要な絶対分岐命令であることを示す信号を発生する。
【0171】
3.ANDゲート58は、オペコードがPC相対分岐と等しいか否かを比較する比較回路55の出力と、分岐予測信号の論理積を取り、オペコードがPC相対分岐であり、分岐すると予測される場合、分岐先ブロックの読み出しが必要なPC相対分岐命令であることを示す信号を発生する。
【0172】
以下、分岐予測回路59の内部構成を図21を用いて説明する。図21においては、分岐予測命令をあらかじめ定めておく。分岐予測回路59は、分岐予測命令を記憶する記憶部281と、記憶部281の出力とオペコードとを入力とする比較回路282とから構成される。
【0173】
以下に、分岐予測回路59の動作を説明する。
【0174】
1.分岐することが予測される分岐命令であることを意味する、分岐予測命令を予め設定しておく。例えば、命令のビット列の第1ビットから第3ビットまでが1の場合は、分岐予測命令であると定める。
【0175】
2.分岐予測命令を格納する記憶部281においては、あらかじめ定められた分岐予測命令を格納しておく。例えば、1.で定めたように命令の第1ビットから第3ビットまでが1の場合に分岐予測命令であるとすると、記憶部281においては第1ビットから第3ビットまでが、1であるデータを記憶しておく。
【0176】
3.比較回路282においてては、オペコードと、記憶部281の値とを比較し、命令が分岐予測命令である場合、分岐予測信号を生成する。例えば、上記したように分岐予測命令を設定した場合、比較回路282においてオペコードの第1ビットと記憶部281の第1ビットを比較、同様に第2ビット、第3ビットを比較し全てが一致していたら分岐予測命令であると判断し、分岐予測信号を生成する。
【0177】
このように、命令として分岐予測命令を作成し、分岐予測回路を図21のように構成することにより、命令が、あらかじめ定められた分岐予測命令であるか否を検出できる。
【0178】
第7の実施例の先行読出機能付命令キャッシュメモリは、以上の機能を付加することにより、分岐命令が分岐しないと予測される場合に、分岐先ブロックをメモリから読みだすことがなく、無駄なメモリアクセスが行なわれず、次に続くメモリアクセスに影響することがない。したがって、より効率的に分岐先ブロックを命令キャッシュ30に転送することができる。
【0179】
<<第8の実施例>>
図22はこの発明の第8の実施例である先行読出機能付命令キャッシュメモリの分岐予測回路59の構成を示すブロック図である。なお、第8の実施例の全体構成は図11で示した第4の実施例の構成と同様であり、命令解析部5の内部構成は図12で示した第4の実施例と同様である。
【0180】
一般に、分岐命令が前方分岐の場合には、約50%の確率で分岐が生じ、後方分岐の場合には、かなり高い確率で分岐が生じる。そのため、後方分岐の場合、分岐すると予測して、分岐予測命令として扱ってもよい。図22は、分岐命令が後方分岐である場合、分岐予測信号を発生するものである。
【0181】
この機能を実現するためには、図20で示した解析部51の構成において、分岐予測回路59に対し、図11のアドレスレジスタ44の出力と、図13のデコード回路50の出力である絶対アドレスまたは、オフセットがをさらに入力される。図22で示す第8の実施例の分岐予測回路59は、図11で示したアドレスレジスタ44の出力と図13で示したデコード回路50の出力とを入力とし、減算結果を図20のANDゲートに接続する減算器283と、図13のデコード回路50の出力を入力とし、比較結果を図20のANDゲート58に接続する比較器284とからなる。
【0182】
以下に、この回路の動作を説明する。
【0183】
1.減算器283は、図11のアドレスレジスタ44の出力である分岐先ブロックのアドレスから、図13のデコード回路50の出力である絶対アドレスを減算して、正の値ならば、後方分岐であるとして分岐予測信号を図20のANDゲート57に出力する。
【0184】
2.比較器284は、図13のデコード回路50の出力であるオフセットが負の値であるかどうかを比較し、負の値ならば、後方分岐であるとして分岐予測信号を図20のANDゲート58に出力する。
【0185】
一般に、分岐命令が前方分岐の場合は約50%の確率で分岐が生じ、後方分岐の場合はかなり高い確率で分岐が生じる。そのため、後方分岐の場合、分岐すると予測し、分岐予測命令として扱う。このように構成することにより、第8の実施例の分岐予測回路59は、第7の実施例の分岐予測回路59のようにあらかじめ分岐予測命令を設定することなく、第7の実施例と同様の効果を得ることができる。
【0186】
<<第9の実施例>>
図23はこの発明の第9の実施例である先行読出機能付命令キャッシュメモリの分岐予測回路59の構成を示すブロック図である。なお、第9の実施例の全体構成は図11で示した第4の実施例の構成と同様であり、命令解析部5の内部構成は図12で示した第4の実施例と同様である。
【0187】
予め、分岐先ブロックを主記憶から読みだす可能性の高い分岐命令に、分岐先ブロックを主記憶から読みだすことを規定する分岐情報ビットを付加しておく。そして、命令解析部5は、分岐命令に分岐情報ビットが立っているか否かを検出し、その結果に基づいて分岐予測信号を出力するが第9の実施例である。
【0188】
この機能を実現するためには、図23で示す第9の実施例の分岐予測回路59は、オペコード中の1ビット(分岐情報ビット)を入力とし、その分岐情報ビットが“1”であるか否かを比較して、その比較結果に基づき分岐予測信号を出力する比較回路285から構成される。
【0189】
したがって、第9の実施例の分岐予測回路59は以下のように動作する。
【0190】
比較器285は、オペコードが“1”であるかどうかを比較し、“1”であれば分岐予測信号を出力し、そうでなければ分岐予測信号を出力しない。
【0191】
このように構成することにより、第9の実施例の分岐予測回路59は、1ビットのオペコードを比較するだけで分岐予測信号を出力することができ、第7及び第8の実施例と同様の効果を得ることができる。
【0192】
<<第10実施例>>
図24はこの発明の第10の実施例である先行読出機能付命令キャッシュメモリにおける分岐命令解析回路220−mと読出信号発生回路49の構成を示すブロック図である。なお、第10の実施例の全体構成は図11で示した第4の実施例の構成と同様であり、命令解析部5の内部構成は図12で示した第4の実施例と同様である。
【0193】
第10の実施例においては、あらかじめ分岐先ブロックを読みだすことを示す先行読み出し命令を、分岐先の命令を含むブロックを読みだす必要がある分岐命令と同じブロック内に挿入しておく。
【0194】
分岐命令解析回路220−mは、図13で示した分岐命令解析回路220の構成に、命令が先行読み出し命令であるか否かを判定する機能を付加したものである。分岐命令解析回路220−mは、図13の構成に加えて、先行読み出し命令のオペコードを記憶する記憶部290と、記憶部290の出力とデコード回路50の出力であるオペコードを入力とし、比較結果を出力とする比較回路291とをさらに備えた構成となる。
【0195】
第10の実施例の読出信号発生回路49は、図16で示した読出信号発生回路49の構成に加えて、分岐命令解析回路220−1〜220−nの比較回路291の出力を入力とするn入力のORゲート292と、図11のアドレス生成回路41の出力である分岐命令読出信号とORゲート93の出力を入力とするANDゲートを付加し、ANDゲート293の出力をANDゲート84の入力に変更したものである。
【0196】
以下に、第10の実施例の動作を説明する。
【0197】
1.分岐命令解析回路220−mの比較回路291は、デコード回路50より得られたオペコードと記憶部290の出力を比較し、命令が先行読み出し命令の場合、先行読み出し命令であることを示す先行読み出し命令信号を発生する。
【0198】
2.読出信号発生回路49のORゲート292は、分岐命令解析回路220−1〜220−nの比較回路291の出力の論理和を取り、ブロック内に先行読み出し命令があるか否かをANDゲート293に与える。
【0199】
3.ANDゲート293は、図11のアドレス生成回路41の出力である分岐命令読出信号とORゲート292の出力の論理積を取って、分岐先ブロックを読み出す必要があることを示す信号を生成しANDゲート85に転送する。
【0200】
以上のように構成することにより、読出ブロック内に先行読み出し命令が存在するときのみ分岐先ブロックを読みだせばよく、無駄なメモリアクセスを行なう必要がなくなり、次に続くメモリアクセスに影響することがない。したがって、より効率的に分岐先ブロックを命令キャッシュ30に転送することができる。
【0201】
すなわち、予めそこから分岐することがわかっているブロックやその確率が高いブロックなど、分岐先ブロックを読出す必要のある、またはその必要性の高いブロックに先行読み出し命令を含ませておけば、好便に分岐先ブロックを読出してアクセスに備えることができる。
【0202】
【発明の効果】
この発明における請求項1記載の先行読出機能付命令キャッシュメモリにおいて、命令解析手段は主記憶から読出され、命令補助記憶装置に転送されるブロックである読出ブロックに含まれる命令を解析して、読出ブロックに続くブロックである次ブロックを主記憶から読出すことが必要か否かが予測する。そして、次ブロック読出手段は、命令解析手段により主記憶からの読み出しが必要であると予測された場合、次ブロックを主記憶から読出し、命令補助記憶装置に転送する。
【0203】
したがって、請求項1記載の先行読出機能付命令キャッシュメモリは、読出ブロックの命令の実行に先立って、必要に応じて次ブロックの転送を行うことにより、次ブロックへのアクセス要求が発生したときにミスが発生しないようにしている。
【0204】
この際、次ブロックを主記憶から読出すことが必要か否かの命令解析手段による予測に基づき次ブロックの読出しが行なわれるので、不要なブロックが読出されてしまう可能性は低い。
【0205】
その結果、キャッシュミスの発生する確率の低い命令キャッシュメモリを得ることができる。
【0209】
さらに、請求項1記載の先行読出機能付命令キャッシュメモリの命令解析手段における予測手段は、分岐すると予測される命令である分岐予測命令が存在していた場合でも、それが当該読出ブロックと次ブロックとの領域外に分岐すると予測される命令でない場合には、次ブロックを読出すことが必要であると予測する。
【0210】
すなわち、予測手段は、分岐予測命令であっても、読出ブロックと次ブロック内に分岐する命令であれば、次ブロックがアクセスされる可能性は高いため、次ブロックを読出すことが必要であると予測している。
【0211】
その結果、キャッシュミスの発生する確率の低い命令キャッシュメモリを得ることができる。
【0212】
また、請求項2記載の先行読出機能付命令キャッシュメモリでは、分岐予測命令検出手段により、読出ブロックに含まれる分岐予測命令が検出されると、前方分岐判定手段により、検出された分岐予測命令が前方分岐か否かが判定される。そして、予測手段により、検出された分岐予測命令が前方分岐であると判定された場合に、次ブロックを読出すことが必要であると予測される。
【0213】
すなわち、予測手段は、分岐予測命令でも後方分岐の場合には他のブロックに分岐することが多いが、前方分岐では他のブロックに分岐する確率が低いため、次ブロックを読出すことが必要であると予測している。
【0214】
その結果、分岐予測命令の種類の応じて予測することにより、キャッシュミスの発生する確率が低く、かつシステム全体の性能を向上させることができる命令キャッシュメモリを得ることができる。
【0215】
また、請求項3記載の先行読出機能付命令キャッシュメモリの命令解析手段における予測手段は、読出ブロックに特定の命令が存在することを検出して、次ブロックを読出すことが必要であると予測する。
【0218】
この発明における請求項4記載の先行読出機能付命令キャッシュメモリにおいて、命令解析手段は、主記憶から読出され、命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、分岐命令を含む場合に分岐先アドレスを計算し、当該分岐先アドレスの命令を含むブロックである分岐先ブロックを主記憶から読み出す必要があるか否かを判定する。そして、分岐先ブロック読出手段は分岐先ブロックの読み出しが必要と判定された場合、分岐先ブロックを主記憶から読出して、命令補助記憶装置に格納させる。
【0219】
したがって、請求項4記載の先行読出機能付命令キャッシュメモリは、読出ブロックの命令の実行に先立って、必要に応じて分岐先ブロックの転送を行うことにより、分岐先ブロックへのアクセス要求が発生したときにミスが発生しないようにしている。
【0220】
この際、分岐先ブロックを主記憶から読出すことが必要か否かの命令解析手段による判断に基づき分岐先ブロックの読出しが行なわれるので、不要な分岐先ブロックが読出されてしまう可能性は低い。
【0221】
その結果、キャッシュミスの発生する確率の低い命令キャッシュメモリを得ることができる。
【0222】
加えて、請求項4記載の先行読出機能付命令キャッシュメモリの命令解析手段の判定手段は、分岐命令が絶対分岐命令あるいはプログラムカウンタ相対分岐命令である場合に、分岐先ブロックを主記憶から読み出すことが必要であると判定する。
【0223】
読出ブロックに絶対分岐命令あるいはプログラムカウンタ相対分岐命令が存在している場合は分岐先ブロックがアクセスされる可能性が高いため、判定手段の上記判定の精度は高い。
【0224】
その結果、効率的に分岐先ブロックを補助記憶装置に取り込みながら、キャッシュミスの発生する確率が低く、かつシステム全体の性能を向上させることができる命令キャッシュメモリを得ることができる。
【0237】
この発明における請求項5記載の先行読出機能付命令キャッシュメモリの先行読出制御手段は、主記憶から読出され、命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、分岐命令を含む場合に分岐先アドレスを計算し、当該分岐先アドレスの命令を含むブロックである分岐先ブロックの読み出しを指示するアクセス要求と等価な疑似アクセス要求を補助記憶装置に出力する。
【0238】
したがって、先行読出制御手段は、読出ブロックに分岐命令が存在する場合、補助記憶装置に対する分岐先ブロックでのアクセスを行うため、分岐先ブロックが補助記憶装置に存在しないとき、補助記憶装置は主記憶に対する分岐先ブロックの読み出しを要求して、分岐先ブロックを自動的に取り込み、分岐先ブロックが補助記憶装置に存在するとき、分岐先ブロックの読み出し要求を発しないため主記憶には全くアクセスしない。
【0239】
その結果、補助記憶装置内にすでに分岐先ブロックが存在する場合には、メモリアクセスが行なわれないため、主記憶から補助記憶装置への分岐先ブロックの転送を効率的に行うとともに、キャッシュミスの発生する確率が低い命令キャッシュメモリを得ることができる。
【図面の簡単な説明】
【図1】この発明の第1の実施例にである先行読出機能付命令キャッシュメモリの構成を示すブロック図である。
【図2】第1の実施例の命令解析部の内部構成を示すブロック図である。
【図3】分岐予測命令検出回路の内部構成を示すブロック図である。
【図4】読出信号発生回路の内部構成を示すブロック図である。
【図5】この発明の第2の実施例である先行読出機能付命令キャッシュメモリの構成を示すブロック図である。
【図6】第2の実施例の命令解析部の内部構成を示すブロック図である。
【図7】次ブロック読出信号発生回路の内部構成を示すブロック図である。
【図8】分岐予測命令検出回路の内部構成を示すブロック図である。
【図9】この発明の第3の実施例である先行読出機能付命令キャッシュメモリの命令解析部の内部構成を示すブロック図である。
【図10】第3の実施例の次ブロックロード命令検出部のブロック図である。
【図11】この発明の第4の実施例である先行読み出し機能付き命令キャッシュの構成を示すブロック図である。
【図12】第4の実施例の命令解析部の内部構成を示すブロック図である。
【図13】第4の実施例の分岐命令解析回路の内部構成を示すブロック図である。
【図14】第4の実施例の解析部の内部構成を示すブロック図である。
【図15】第4の実施例のアドレス生成回路の内部構成を示すブロック図である。
【図16】第4の実施例の読出信号発生回路の内部構成を示すブロック図である。
【図17】この発明の第5の実施例である先行読み出し機能付き命令キャッシュの構成を示すブロック図である。
【図18】第5の実施例の命令解析部の内部構成を示すブロック図である。
【図19】この発明の第6の実施例である先行読出機能付命令キャッシュメモリにおける読出信号発生回路内部構成を示すブロック図である。
【図20】この発明の第7の実施例である先行読出機能付命令キャッシュメモリにおける分岐命令解析回路内の解析部の内部構成を示すブロック図である。
【図21】第7の実施例の解析部の中の分岐予測回路の内部構成を示すブロック図である。
【図22】この発明の第8の実施例である先行読出機能付命令キャッシュメモリにおける分岐命令解析回路内の解析部の中の分岐予測回路の内部構成を示すブロック図である。
【図23】この発明の第9の実施例である先行読出機能付命令キャッシュメモリにおける分岐命令解析回路内の解析部の中の分岐予測回路の内部構成を示すブロック図である。
【図24】この発明の第10の実施例である先行読出機能付命令キャッシュメモリにおける分岐命令解析回路及び読出信号発生回路の内部構成を示すブロック図である。
【図25】記憶装置の階層構造を模式的に示す図である。
【符号の説明】
3,4 読出制御部、5,6,42,110,180 命令解析部、16 カウンタ、20,100 先行読出機能付命令キャッシュメモリ、30,104 命令キャッシュメモリ、32,102,180 先行読出制御部、40 命令レジスタ、41 アドレス生成回路、43 キャッシュ制御信号発生回路、44 アドレスレジスタ、48 セレクタ、49 読出信号発生回路、59 分岐予測回路、64 コントロール信号発生回路、72,136,138,162,194 一致検出回路、62−1〜62−n,130,182−1〜182−n 分岐予測命令検出回路、132 分岐先アドレス計算回路。
Claims (5)
- 主記憶と処理装置との間にそれぞれの動作速度の相違をバッファリングするために設けられ、前記処理装置から与えられるアクセス要求に応答して、前記主記憶との間でブロック単位で命令情報の授受を行なう命令補助記憶装置と、
前記主記憶から読出され、前記命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、前記読出ブロックに続くブロックである次ブロックを前記主記憶から読み出すことが必要か否かを予測する命令解析手段と、
前記命令解析手段の予測に応答して、前記次ブロックの読み出しが必要であると予測された場合、前記次ブロックを前記主記憶から読出して、前記命令補助記憶装置に格納させるための次ブロック読出手段とを備え、
前記命令解析手段は、前記読出ブロックと前記次ブロックとの領域外に分岐すると予測される命令でないことを検出して、前記次ブロックを読出すことが必要であると予測する予測手段を含む、
先行読出機能付命令キャッシュメモリ。 - 前記命令解析手段は、
前記読出ブロック内から分岐すると予測される命令である分岐予測命令を検出する分岐予測命令検出手段と、
前記分岐予測命令が、自身のアドレスより大きいアドレスに分岐する前方分岐か否かを判定する前方分岐判定手段と、
前記予測手段とを含み、
前記予測手段は、前記分岐判定手段が前記分岐予測命令が前方分岐であると判定した場合に、前記次ブロックを読出すことが必要であるとさらに予測する
請求項1記載の先行読出機能付命令キャッシュメモリ。 - 主記憶と処理装置との間にそれぞれの動作速度の相違をバッファリングするために設けられ、前記処理装置から与えられるアクセス要求に応答して、前記主記憶との間でブロック単位で命令情報の授受を行なう命令補助記憶装置と、
前記主記憶から読出され、前記命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、前記読出ブロックに続くブロックである次ブロックを前記主記憶から読み出すことが必要か否かを予測する命令解析手段と、
前記命令解析手段の予測に応答して、前記次ブロックの読み出しが必要であると予測された場合、前記次ブロックを前記主記憶から読出して、前記命令補助記憶装置に格納させるための次ブロック読出手段とを備え、
特定の命令が予め定められており、
前記命令解析手段は、前記読出ブロックに前記特定の命令が存在することを検出して、前記次ブロックを読出すことが必要であると予測する予測手段を含む、
先行読出機能付命令キャッシュメモリ。 - 主記憶と処理装置との間にそれぞれの動作速度の相違をバッファリングするために設けられ、前記処理装置から与えられるアクセス要求に応答して、前記主記憶との間でブロック単位で命令情報の授受を行なう命令補助記憶装置と、
前記主記憶から読出され、前記命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、分岐命令を含む場合に分岐先アドレスを計算し、当該分岐先アドレスの命令を含むブロックである分岐先ブロックを前記主記憶から読み出す必要があるか否かを判定する命令解析手段と、
前記命令解析手段の判定に応答して、前記分岐先ブロックの読み出しが必要と判定された場合、前記分岐先ブロックを前記主記憶から読出して、前記命令補助記憶装置に格納させるための分岐先ブロック読出手段とを備え、
前記命令解析手段は、前記分岐命令が絶対分岐命令あるいはプログラムカウンタ相対分岐命令である場合に、前記分岐先ブロックを前記主記憶から読み出すことが必要であると判定する判定手段を備える、
先行読出機能付命令キャッシュメモリ。 - 主記憶と処理装置との間にそれぞれの動作速度の相違をバッファリングするために設けられ、前記処理装置から与えられるアクセス要求に応答して、前記主記憶との間でブロック単位で命令情報の授受を行なう命令補助記憶装置を備え、前記命令補助装置は前記アクセス要求で指示されるブロックの情報を保持していない場合に、そのブロックの情報を前記主記憶から取り込み、
前記主記憶から読出され、前記命令補助記憶装置に転送される読出ブロックに含まれる命令を解析して、分岐命令を含む場合に分岐先アドレスを計算し、当該分岐先アドレスの命令を含むブロックである分岐先ブロックの読み出しを指示する、前記アクセス要求と等価な疑似アクセス要求を前記補助記憶装置に出力する先行読出制御手段をさらに備え、
前記先行読出制御手段は、前記分岐命令が絶対分岐命令あるいはプログラムカウンタ相対分岐命令である場合に、前記分岐先ブロックを前記主記憶から読み出すことが必要であると判定する判定手段を備える、
先行読出機能付命令キャッシュメモリ。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP00352995A JP3590427B2 (ja) | 1994-08-30 | 1995-01-12 | 先行読出機能付命令キャッシュメモリ |
US08/916,707 US5940857A (en) | 1994-08-30 | 1997-08-25 | Instruction cache memory apparatus with advanced read function that predicts whether to read out a next instruction block including an address register, a counter and a selector |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP6-204918 | 1994-08-30 | ||
JP20491894 | 1994-08-30 | ||
JP00352995A JP3590427B2 (ja) | 1994-08-30 | 1995-01-12 | 先行読出機能付命令キャッシュメモリ |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08123723A JPH08123723A (ja) | 1996-05-17 |
JP3590427B2 true JP3590427B2 (ja) | 2004-11-17 |
Family
ID=26337129
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP00352995A Expired - Fee Related JP3590427B2 (ja) | 1994-08-30 | 1995-01-12 | 先行読出機能付命令キャッシュメモリ |
Country Status (2)
Country | Link |
---|---|
US (1) | US5940857A (ja) |
JP (1) | JP3590427B2 (ja) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08286914A (ja) * | 1995-04-07 | 1996-11-01 | Nec Corp | メモリ制御装置 |
TW373149B (en) * | 1997-07-02 | 1999-11-01 | Matsushita Electric Ind Co Ltd | Program control method |
US6092188A (en) * | 1997-12-23 | 2000-07-18 | Intel Corporation | Processor and instruction set with predict instructions |
US6247107B1 (en) * | 1998-04-06 | 2001-06-12 | Advanced Micro Devices, Inc. | Chipset configured to perform data-directed prefetching |
JP3798563B2 (ja) * | 1999-01-06 | 2006-07-19 | 株式会社東芝 | 命令キャッシュメモリ |
US6725333B1 (en) * | 1999-04-22 | 2004-04-20 | International Business Machines Corporation | System and method for managing cachable entities |
US6738895B1 (en) * | 2000-08-31 | 2004-05-18 | Micron Technology, Inc. | Method and system for substantially registerless processing |
DE10238914A1 (de) * | 2002-08-24 | 2004-03-04 | Robert Bosch Gmbh | Halbleiterspeicher mit einem ersten Tabellenspeicher und einem Zwischenspeicher |
US6871246B2 (en) * | 2003-05-07 | 2005-03-22 | Freescale Semiconductor, Inc. | Prefetch control in a data processing system |
US7406613B2 (en) * | 2004-12-02 | 2008-07-29 | Qualcomm Incorporated | Translation lookaside buffer (TLB) suppression for intra-page program counter relative or absolute address branch instructions |
US20070186049A1 (en) * | 2006-02-03 | 2007-08-09 | International Business Machines Corporation | Self prefetching L2 cache mechanism for instruction lines |
US8060701B2 (en) * | 2006-12-08 | 2011-11-15 | Qualcomm Incorporated | Apparatus and methods for low-complexity instruction prefetch system |
JP2009104614A (ja) * | 2008-11-25 | 2009-05-14 | Renesas Technology Corp | 情報処理装置 |
US11860762B2 (en) | 2019-06-25 | 2024-01-02 | Nec Corporation | Semiconductor device, control flow inspection method, non-transitory computer readable medium, and electronic device |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4714994A (en) * | 1985-04-30 | 1987-12-22 | International Business Machines Corp. | Instruction prefetch buffer control |
US5440704A (en) * | 1986-08-26 | 1995-08-08 | Mitsubishi Denki Kabushiki Kaisha | Data processor having branch predicting function |
US5197136A (en) * | 1987-11-12 | 1993-03-23 | Matsushita Electric Industrial Co., Ltd. | Processing system for branch instruction |
US5230068A (en) * | 1990-02-26 | 1993-07-20 | Nexgen Microsystems | Cache memory system for dynamically altering single cache memory line as either branch target entry or pre-fetch instruction queue based upon instruction sequence |
US5317718A (en) * | 1990-03-27 | 1994-05-31 | Digital Equipment Corporation | Data processing system and method with prefetch buffers |
US5414822A (en) * | 1991-04-05 | 1995-05-09 | Kabushiki Kaisha Toshiba | Method and apparatus for branch prediction using branch prediction table with improved branch prediction effectiveness |
US5442756A (en) * | 1992-07-31 | 1995-08-15 | Intel Corporation | Branch prediction and resolution apparatus for a superscalar computer processor |
JP3254019B2 (ja) * | 1992-11-30 | 2002-02-04 | 富士通株式会社 | データ先読み制御装置 |
GB2285154B (en) * | 1993-12-24 | 1998-04-01 | Advanced Risc Mach Ltd | Branch cache |
US5574871A (en) * | 1994-01-04 | 1996-11-12 | Intel Corporation | Method and apparatus for implementing a set-associative branch target buffer |
-
1995
- 1995-01-12 JP JP00352995A patent/JP3590427B2/ja not_active Expired - Fee Related
-
1997
- 1997-08-25 US US08/916,707 patent/US5940857A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JPH08123723A (ja) | 1996-05-17 |
US5940857A (en) | 1999-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6230260B1 (en) | Circuit arrangement and method of speculative instruction execution utilizing instruction history caching | |
US5941981A (en) | System for using a data history table to select among multiple data prefetch algorithms | |
JP3542021B2 (ja) | セット予測によりセット連想キャッシュの遅延を少なくする方法及び装置 | |
EP0084114B1 (en) | Instruction prefetching data processing apparatus including a conditional branch instruction predictor | |
US6490658B1 (en) | Data prefetch technique using prefetch cache, micro-TLB, and history file | |
US4985825A (en) | System for delaying processing of memory access exceptions until the execution stage of an instruction pipeline of a virtual memory system based digital computer | |
EP0380854B1 (en) | Instruction buffer system for a digital computer | |
US6067616A (en) | Branch prediction device with two levels of branch prediction cache | |
US5553255A (en) | Data processor with programmable levels of speculative instruction fetching and method of operation | |
US6157993A (en) | Prefetching data using profile of cache misses from earlier code executions | |
US5592634A (en) | Zero-cycle multi-state branch cache prediction data processing system and method thereof | |
US20150186293A1 (en) | High-performance cache system and method | |
JP3590427B2 (ja) | 先行読出機能付命令キャッシュメモリ | |
EP0381447A2 (en) | Method and apparatus for controlling the conversion of virtual to physical memory addresses in a digital computer system | |
JPH1074166A (ja) | 多重レベル・ダイナミック・セット予測方法および装置 | |
WO1999023564A1 (en) | Prefetch management in cache memory | |
KR19980063936A (ko) | 소규모의 하드웨어로 높은 적중률의 분기 예측을 하는 정보 처리 장치 | |
US20060224870A1 (en) | Information processing device | |
US5434986A (en) | Interdependency control of pipelined instruction processor using comparing result of two index registers of skip instruction and next sequential instruction | |
US20040225866A1 (en) | Branch prediction in a data processing system | |
US5878252A (en) | Microprocessor configured to generate help instructions for performing data cache fills | |
KR100431975B1 (ko) | 분기에의한중단이없는파이프라인방식의마이크로프로세서를위한다중명령디스패치시스템 | |
US20150193348A1 (en) | High-performance data cache system and method | |
US6877069B2 (en) | History-based carry predictor for data cache address generation | |
US6016532A (en) | Method for handling data cache misses using help instructions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20040513 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040608 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040729 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040817 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040820 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080827 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080827 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090827 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090827 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100827 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110827 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110827 Year of fee payment: 7 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110827 Year of fee payment: 7 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120827 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |