JP5734945B2 - スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ - Google Patents

スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ Download PDF

Info

Publication number
JP5734945B2
JP5734945B2 JP2012268455A JP2012268455A JP5734945B2 JP 5734945 B2 JP5734945 B2 JP 5734945B2 JP 2012268455 A JP2012268455 A JP 2012268455A JP 2012268455 A JP2012268455 A JP 2012268455A JP 5734945 B2 JP5734945 B2 JP 5734945B2
Authority
JP
Japan
Prior art keywords
instruction
block
branch
instructions
btac
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
Application number
JP2012268455A
Other languages
English (en)
Other versions
JP2013080497A (ja
Inventor
ロドニー・ウェイン・スミス
ジェームズ・ノリス・ディーフェンダーファー
ブライアン・マイケル・ステムペル
トマス・アンドリュー・サートリウス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2013080497A publication Critical patent/JP2013080497A/ja
Application granted granted Critical
Publication of JP5734945B2 publication Critical patent/JP5734945B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/22Microcontrol or microprogram arrangements
    • G06F9/24Loading of the microprogram
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Description

本発明は、一般にプロセッサ分野に関し、特に、スライドウィンドウ構成を有するブロックベースの分岐ターゲットアドレスキャッシュに関する。
マイクロプロセッサは、幅広い様々なアプリケーションにおいて計算タスクを実行する。プロセッサ性能の向上は、高度なソフトウェアによるより高速な動作及び/又は増加した機能を実現することによって製品改良を進めるための永遠の設計目標である。例えばポータブル電子デバイスのような多くの埋込み型アプリケーションにおいて、電力を節約すること及びチップサイズを低減することも、プロセッサの設計及び実装における重要な目標である。
近年のプロセッサは、各々が複数の実行ステップを有する連続した命令群が実行においてオーバーラップしている、パイプラインされたアーキテクチャを用いる。連続する命令ストリームにおいて命令群の並行処理を用いる能力は、プロセッサ性能を向上するために著しく貢献する。理想的な状態の下、かつ、パイプラインを満たす最初の簡潔な処理に従って1つのサイクル内で各パイプステージを完了するプロセッサ内で、命令はサイクル毎に実行を完了することができる。
このような理想的な状態は、命令間のデータ依存性(データハザード)、例えば分岐のような制御依存性(制御ハザード)、プロセッサリソース割当競合(構成ハザード)、中断、キャッシュミス等を含む様々な要因によって実際には実現しえない。プロセッサ設計の主要目標は、これらのハザードを回避し、パイプラインを「フル」に保つことである。
実世界の全てのプログラムは、条件付きでない分岐命令又は条件付き分岐命令を備えることのできる分岐命令を含む。分岐命令の実際の分岐挙動は、命令がパイプライン内の深くで評価されるまでしばしば知られない。これは、プロセッサが、分岐命令の後に何れの命令をフェッチするかを知らず、分岐命令が評価するまで知らないであろうために、パイプラインの機能を停止する制御ハザードを生成する。近年のプロセッサは、条件付き分岐命令の分岐挙動及び分岐ターゲットアドレスが、パイプライン内の早期において予測され、プロセッサが、分岐予測に基づいて、命令を推測的にフェッチし実行することによってパイプラインをフルに保つ、様々な形式の分岐予測を用いる。もし予測が正しければ、性能は最大化され、電力消費は最小化される。分岐命令が実際に評価される場合、もし分岐が誤予測されれば、推測的にフェッチされた命令はパイプラインからフラッシュされなくてはならず、新たな命令が正しい分岐ターゲットアドレスからフェッチされなくてはならない。誤予測された分岐は、プロセッサ性能及び電力消費に不利な影響を及ぼす。
分岐予測には、条件評価と分岐ターゲットアドレスとの2つの構成要素がある。(条件付き分岐命令のみに関係する)条件評価は二者択一である。すなわち、分岐が選択され、異なるコードシーケンスへ実行をジャンプさせるか、あるいは、選択されず、プロセッサが、条件付き分岐命令に後続する次の連続する命令を実行するかの何れかである。分岐ターゲットアドレス(BTA)は、制御が、選択されたものとして評価された条件付き分岐命令又は条件付きでない分岐命令の何れかに分岐するアドレスである。いくつかの一般的な分岐命令は、命令opコード内にBTAを含むか、あるいはBTAが容易に計算されるオフセットを含む。他の分岐命令の場合、BTAはパイプラインの深くまで計算されないので、予測しなければならない。
BTA予測の1つの周知技術は、分岐ターゲットアドレスキャッシュ(BTAC)を用いる。従来技術で知られるようなBTACは、分岐命令アドレス(BIA)によってインデックスされる完全な連想型キャッシュであり、各データ場所(又はキャッシュ「ライン」)が単一のBTAを含む。分岐命令がパイプライン内で選択されたものとして評価し、自身の実際のBTAが計算されると、BIA及びBTAは(例えばパイプラインステージへの書き戻し中に)BTACへ書き込まれる。新たな命令をフェッチすると、BTACは命令キャッシュ(又はIキャッシュ)と同時にアクセスされる。もし命令アドレスがBTAC内でヒットすれば、プロセッサは、(Iキャッシュからフェッチされた命令の復号前に)命令が分岐命令であることを知り、分岐命令の前の実行の実際のBTAである予測されたBTAが提供される。もし分岐予測回路が、分岐が選択されると予測すれば、予測されたBTAにおいて命令のフェッチが開始する。もし分岐が選択されていないと予測されれば、命令フェッチは連続して継続する。
BTACという用語は、当該技術において、飽和カウンタをBIAに関連付け、条件付き評価予測(すなわち選択されるか選択されないか)のみを提供するキャッシュを示すためにも用いられることを留意されたい。
高性能プロセッサは、1つより多くの命令を同時にIキャッシュからフェッチすることができる。例えば、4つの命令を備えることができるキャッシュライン全体が、それらを連続してパイプラインへ送る命令フェッチバッファへフェッチされうる。本願の譲受人に譲渡され、参照によって本願に組み込まれた特許出願11/089,072号は、各キャッシュライン内に2つ又はそれ以上のBTAを格納し、BTAのうちの何れがBTACヒットにおいて予測されたBTAとして選択されるかを決定するために分岐予測オフセットテーブル(BPOT)をインデックスするBTACを開示する。BPOTは、多くのBTAに同時にアクセスする必要があるであろう、多くの読取ポートを備えたBTACの高価なハードウェア構成を回避する。
本願の譲受人に譲渡され、参照によって本願に組み込まれた特許出願“Block-Based Branch Target Address Cache”は、複数のエントリを格納するBTACであって、各エントリが、ブロック内の1つ又は複数の命令が評価され選択された分岐命令である場合、命令ブロックに関連するブロックベースのBTACを開示する。BTACエントリは、関連するブロック内の何れの命令が選択された分岐命令であるかを示すインディケータと、選択された分岐のBTAとを含む。BTACエントリは、ブロック内の全ての命令に共通のアドレスビットによって(すなわち、ブロック内で命令を選択する下位のアドレスビットを切り捨てることによって)インデックスされる。従って、ブロックサイズ及び相対的なブロック境界線が固定される。
ブロックベースのBTACエントリは、各ブロックがただ1つの選択された分岐命令を含む場合に良好に機能する。ブロック評価で決定として選択された2つ又はそれ以上の分岐命令が、1つの分岐命令のBTAに格納されなければならず、別の分岐命令のBTAに格納されてはならない場合、他の分岐評価が選択されると、性能及び電力の効率低下をもたらす。各BTACエントリに多くのBTAを格納することができる。しかしこれは、命令ブロックがBTACエントリ内のBTA格納場所と同じ数の選択された分岐命令を含まない通常の場合、貴重なシリコンエリアを無駄にする。
本明細書に開示された1つ又は複数の実施形態によると、スライドウィンドウブロックベースのBTACは、各エントリが、評価され選択された少なくとも1つの分岐命令を含む命令のブロックに関連する複数のエントリを備え、ブロック内の第1の命令のアドレスによってインデックスされる。ブロックサイズは固定され(かつ命令フェッチグループのサイズに対応し)ているが、ブロック境界は固定されておらず、命令ブロックはオーバーラップすることができる。従って分岐命令は、BTACエントリによって表示される2つ又はそれ以上の命令ブロックに含まれることができる。いくつかの場合において、これは、スライドウィンドウブロックベースのBTACが、新たなブロックを定め、関連するBTACエントリを生成することによって、全てのBTACエントリのBTA格納容量を増加することによってメモリを浪費することなく、単一の命令ブロック内に属する2つ又はそれ以上の選択された分岐命令のBTAを格納することを可能とする。
1つの実施形態は、プロセッサにおいて分岐命令を予測する方法に関する。評価され選択された少なくとも1つの分岐命令を含む2つ又はそれ以上の命令のブロックに関連するエントリが、分岐ターゲットアドレスキャッシュ(BTAC)内に格納され、BTACエントリは、ブロック内の第1の命令のアドレスに関連するタグを有する。命令をフェッチすると、1つ又は複数のブロック内の命令が条件付き分岐命令であるかを判定するために、BTACがアクセスされる。
別の実施形態はプロセッサに関する。プロセッサは、各エントリが、評価され選択された少なくとも1つの分岐命令を含む2つ又はそれ以上の命令のブロックに関連する複数のエントリを格納する分岐ターゲットアドレスキャッシュ(BTAC)と、ブロック内の第1の命令のアドレスに関連するタグを有するBTACエントリとを含む。プロセッサはまた、命令のグループをフェッチすると、命令アドレスを用いてBTACをインデックスするように動作可能な命令実行パイプラインも含む。
図1は、プロセッサの1つの実施形態の機能ブロック図である。 図2は、分岐ターゲットアドレスキャッシュ及び付随する回路の1つの実施形態の機能ブロック図である。
図1は、プロセッサ10の機能ブロック図を示す。プロセッサ10は、制御論理11に従って、命令実行パイプライン12内で命令を実行する。いくつかの実施形態において、パイプライン12は、複数の並行するパイプラインを備えるスーパースカラ設計であることができる。パイプライン12は、パイプステージ内に構成された様々なレジスタ又はラッチ16と、1つ又は複数の算術論理演算ユニット(ALU)18とを含む。汎用レジスタ(GPR)ファイル20は、メモリ階層の最上層を備えるレジスタを提供する。
パイプライン12は、命令側変換索引バッファ(ITLB)24によって管理されるメモリアドレス変換及び許可を用いて、命令キャッシュ(Iキャッシュ)22から命令をフェッチする。同時に、パイプライン12は、スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ(BTAC)25へ命令アドレスを提供する。もし命令アドレスがBTAC25内でヒットすれば、スライドウィンドウブロックベースのBTAC25は、Iキャッシュ22へ分岐ターゲットアドレス(BTA)を提供し、予測されたBTAからの命令のフェッチを瞬時に開始する。スライドウィンドウブロックベースのBTAC25の構成及び動作は、以下でより完全に説明される。
主要変換索引バッファ(TLB)28によって管理されるメモリアドレス変換及び許可を用いて、データキャッシュ(Dキャッシュ)26からデータがアクセスされる。様々な実施形態において、ITLBはTLBの一部のコピーを備えることができる。あるいは、ITLBとTLBとは統合することができる。同様に、プロセッサ10の様々な実施形態において、Iキャッシュ22とDキャッシュ26とは統合又は統一することができる。メモリインタフェース30の制御下で、Iキャッシュ22及び/又はDキャッシュ26におけるミスは、主要(オフチップ)メモリ32へのアクセスをもたらす。
プロセッサ10は、様々な周辺デバイス36、38へのアクセスを制御する入力/出力(I/O)インタフェース34を含むことができる。当業者は、プロセッサ10の多くの変形例が可能であることを理解するであろう。例えばプロセッサ10は、Iキャッシュ22及びDキャッシュ26の何れか又は両方の第2レベル(L2)キャッシュを含むことができる。加えて、プロセッサ10内に示す機能ブロックのうちの1つ又は複数を、特定の実施形態から除外することができる。
分岐命令はほとんどのコードにおいて共通である。いくつかの推定によれば、5つの命令のうちの1つほどが分岐でありうる。従って、早期の分岐検索、(条件付き分岐命令の)分岐評価予測、及び予測されたBTAからのフェッチ命令が、プロセッサ性能に決定的となりうる。近年のプロセッサは、各キャッシュライン内に複数の命令を格納するIキャッシュ22を含む。命令は、「フェッチグループ」でIキャッシュからフェッチされる。フェッチグループは、キャッシュラインの一部、キャッシュライン全体、又はキャッシュラインより多くを備えることができる。
一例として、この例は単に例示的であり限定はしないが、プロセッサのフェッチグループが、4つの命令のIキャッシュ22ラインサイズと一致すると仮定する。一般に周知のBTACにアクセスし、4つ全ての命令アドレスに対して同時に探索すると、もし1つより多くの命令アドレスがBTAC内でヒットすれば、BTAを選択するために、4つのアドレス比較入力ポートと、4つのBTA出力ポートと、マルチプレクサ及び制御論理とが必要となるであろう。
1つ又は複数の実施形態によると、スライドウィンドウブロックベースのBTAC25は複数のエントリを備える。各エントリは、命令ブロック内で選択された分岐命令に関連する分岐情報を格納する。命令ブロックはフェッチグループに対応し、BTACエントリは、ブロック内の第1の命令のアドレスに関連するタグを含む。タグは、Iキャッシュからフェッチグループをフェッチするためにも用いられる。ある実施形態において、タグは、フェッチグループ内の第1の命令であることができる。本明細書で用いられるように、「命令ブロック」及び「フェッチグループ」という用語は同義である。各BTACエントリは、ブロック内の少なくとも1つの命令が(BTAC25内でのヒットによって示される)評価され選択された分岐命令であることを示し、ブロック内の何れの命令が選択された分岐であるかを示すインディケータと自身のBTAとを含む。
図2は、スライドウィンドウブロックベースのBTAC25、Iキャッシュ22、パイプライン12、及び(例えば制御論理11の一部を備えることができる)分岐予測論理回路15の機能ブロック図を示す。この例において、命令A乃至LはIキャッシュ22内の3つのラインに存在する。説明の明確化のために、この例におけるプロセッサフェッチグループはキャッシュラインであるが、これは本発明の限定ではない。命令及び対応するコードセグメントのブロック200A乃至200Cが、回路図の左側に列挙される。ブロックは順番に符号が付けられているが、ブロックが符号の順番どおりにフェッチされると解釈されるべきではないことが留意される。おそらく、例示的なコードセグメントの分岐性質によって、ブロックがフェッチされる順番は、ブロック200A、ブロック200C、そしてブロック200Bとなるであろう。
図2のスライドウィンドウブロックベースのBTAC25内の各エントリは、3つの要素を備える。すなわち、(Iキャッシュにアクセスするために用いられる命令でもある)関連する命令ブロック内の第1の命令のアドレスを備えるタグフィールドと、ブロック内の何れの命令が選択された分岐であるかを示す分岐インディケータと、最後に評価され選択された時の分岐命令の実際のBTAとである。
図2の例において、命令A、B、C、及びDを備えるIキャッシュ22の第1のライン(又はフェッチグループ)がフェッチされ実行される。これらのうち、命令B及びCは両方とも分岐命令である。命令Bが実行され、評価され選択され、分岐ターゲットアドレスBTAが計算される。BTACエントリは、命令ブロックABCDのために生成される。BTACエントリ(図2に示す第1のエントリ)は、命令Aのアドレスに関連するタグ、ブロック内の第2の命令が選択された分岐(アドレス01)であることを示すインディケータ、及びBTAを有する。別の実施形態において、分岐インディケータは、何れの命令が選択された分岐であるかを示す、例えば0100のような復号されたインディケーションを備えることができる。
この例において、命令Bは、別のセクションのコード(本開示に関係のない詳細)における手順への分岐をもたらす。実行を完了すると、実行されるとターゲットBTAを用いて選択されたものを評価する他のコードが命令Cへ再び分岐する。固定された命令ブロック境界を有する一般に周知のブロックベースのBTACにおいて、命令Cがブロック200Aに固定して関連するであろうために、何れのBTAもBTACエントリ内のBTAと置換するか、あるいは、BTAが保存され、BTAが破棄されなければならない。
しかし、スライドウィンドウブロックベースのBTAC25の流動的な命令ブロック境界を用いると、新たな命令ブロックは、手順から命令Cへ戻るとIキャッシュからフェッチされるフェッチグループに対応して定められる。新たなブロックは、命令C、D、E、及びFを備え、ゆえに命令ブロックABCDと部分的にオーバーラップする。対応するBTACエントリが、スライドウィンドウブロックベースのBTAC25内で生成される。新たなBTACエントリ(図2に示す第2のエントリ)のタグは、(Iキャッシュにアクセスするために用いられる命令でもある)ブロック内の第1の命令、つまり命令Cのアドレスに関連する。分岐インディケータは、ブロック内の第1の命令のアドレスである値00を有し、命令CがブロックCDEF内の選択された分岐命令であることを示す。最終的に、ブロックCDEFに関連するBTACエントリは、分岐命令CのターゲットアドレスであるBTAを含む。このようにして、スライドウィンドウブロックベースのBTAC25は、全てのBTACエントリが2つ又はそれより多くのBTAのための格納スペースを含むことを必要とせず、ブロックABCD内の選択された分岐命令の両方のBTAを格納することができる。
更に、スライドウィンドウブロックベースのBTAC25内の第2のエントリは、分岐命令Cの挙動を、Iキャッシュからのフェッチ前に選択されたコード経路に結合する。つまり、手順から戻る間、コードが命令Cに分岐した場合、分岐命令Cが選択されたものとして評価されたために、その手順から命令Cへの次の戻りは、ほとんど選択したものとして同様に評価するであろう。逆に、命令Cが連続して実行された場合(すなわち、選択されないと評価された分岐命令と介入手順とが実行されなかった場合)、選択されないと評価しうる。
第3のBTACエントリは、命令Iで始まるフェッチグループに対応するI、J、K、及びLを備える命令ブロックに対応する。第3のBTACエントリのタグは、ブロック内の第1の命令のアドレスに関連する。このアドレスは、フェッチグループIJKLのフェッチにおいてIキャッシュがアクセスされるのに用いられるアドレスである。このグループにおいて、命令J及びLが分岐命令である。この例において、命令Jが評価され選択され、分岐インディケータはブロック内の第2の命令をアドレス指定し、命令JのBTAがBTACエントリ内に格納される。
もちろん、図2に示すブロック構成及びBTACエントリは単なる例であり、本発明はこの実施形態に限定されない。特に、フェッチグループはIキャッシュラインの大きさに調整される必要はない。一般に、例えば分岐情報がターゲットへ分岐し、Iキャッシュライン内の何処にでもあることができる場合のように、フェッチグループはIキャッシュライン内の何処からでも始まることができる。対応するスライドウィンドウブロックベースのBTAC25エントリのタグは、フェッチグループ内の第1の命令のアドレスに関連するであろう。従って、同じフェッチグループが再びIキャッシュからフェッチされると、スライドウィンドウブロックベースのBTAC25の同時アクセスは、命令ブロック内の以前評価され選択された分岐命令を示すエントリを取得するであろう。
パイプライン12の復号/フェッチ論理13は、Iキャッシュ22から次の命令フェッチグループをフェッチする命令アドレスを生成するように構成される。動作中、命令アドレスは、スライドウィンドウブロックベースのBTAC25のタグフィールドと同時に比較する。もし命令アドレスがBTAC25内のタグと一致すれば、ブロック内の何れの命令が選択された分岐命令であるかを示すためにヒットインディケーション及び対応する分岐インディケータが復号/フェッチ論理13へ提供される。インディケータは、分岐予測論理15へも提供される。同時に、対応するエントリのBTAがIキャッシュ22へ提供され、BTAからの命令の瞬時の推測的なフェッチを可能とし、分岐が予測され選択される事象においてパイプラインをフルに保つ。
命令は復号論理13において復号される。分岐命令が検出されると(フェッチグループアドレスがスライドウィンドウブロックベースのBTAC25内でヒットするか否かに関わらず)、フェッチグループ情報がパイプライン12内に保存される。この情報は例えば、分岐情報アドレス(BIA)からフェッチグループ内の第1の命令のアドレスへのネガティブオフセットを備えることができる。この情報は、分岐情報が評価され選択される可能性に備えて保存され、自身のBTAが、フェッチグループ内の第1の命令のアドレス、つまりIキャッシュがアクセスされるのに用いられるアドレスをタグとして有する新たなBTACエントリ内に格納されることを可能とする。
パイプライン12の実行ステージの論理14において、条件付き分岐命令が評価される。EXE論理14は更に、選択されるものとして評価される条件付き分岐命令及び条件付きでない分岐命令の両方のBTAを計算し提供する。もし予測された分岐評価が間違っていたり、キャッシュされたBTAが計算されたBTAと一致していなければ、パイプライン12は、推測的命令のパイプラインからのフラッシュ、格納リソース及び計算リソースの再割当等を含みうる、誤予測された分岐の回復を実行しなければならない。
現在の分岐挙動に従って予測論理を更新するために、EXE論理14によって現在の分岐評価が分岐予測論理15へ提供される。分岐予測論理15は、(例えば分岐履歴レジスタ、分岐予測テーブル、飽和カウンタ等のような)自身の予測テーブルを更新し、更にスライドウィンドウブロックベースのBTAC25を更新する。存在するBTACエントリに関して、これは、もし異なる現在のBTAが計算されればキャッシュされたBTAを更新することを備えることができる。あるいは、もし対応するブロック内の異なる分岐命令が選択されたものを評価し、存在するキャッシュされたBTAを更新する決定がなされれば、分岐インディケータとBTAとの両方を更新することを備えることができる。
もし分岐命令が選択されたものを評価し、フェッチグループ情報がスライドウィンドウブロックベースのBTAC25内の何れのタグからもユニークなグループフェッチアドレスを示せば、分岐予測論理15は新たなBTACエントリを生成する。新たなBTACエントリは、分岐命令がフェッチされるフェッチグループの第1の命令から始まる命令ブロックに対応し、従って新たなBTACエントリのタグは第1の命令のアドレスに関連する。このようにして、分岐命令はスライドウィンドウブロックベースのBTAC25内の対応するエントリを有する2つ又はそれより多くの命令ブロックに含まれることができる。この特徴の1つの重要な利点は、第1のブロック内の第1の分岐命令のBTAが第1のBTACエントリ内に格納され、第1のブロック内であるがIキャッシュへの別のアクセスによる第2のフェッチグループの一部でもある第2の分岐命令のBTAが(第2の命令ブロックを定める)第2のBTACエントリ内に格納されることができる点である。従って、スライドウィンドウブロックベースのBTAC25は、全てのBTACエントリ内の多くのBTAにメモリを提供することによって貴重なシリコン領域を浪費することなく、両方のBTAを格納することができる。
本明細書で用いられるように、一般に分岐情報は、条件付き又は条件付きでない分岐命令の何れを称することもできる。本明細書で用いられるように、「選択された分岐」、「選択された分岐命令」、又は「評価され選択された分岐命令」は、連続する命令実行フローを連続しないアドレスに転ずることとして評価された条件付でない分岐命令、又は条件付き分岐命令の何れかを称する(つまり、選択されないものと反対に選択される)。
本発明は、本明細書で特定の機能、局面、及びそれらの実施形態に関して説明されたが、多くの変形例、改良例、及びその他の実施形態が本発明の範囲内で可能であり、従って、全ての変形例、改良例、及び実施形態は本発明の範囲内であると見なされることが明らかになるであろう。従って本実施形態は、全ての局面において例示的であって限定的でないと解釈され、特許請求の範囲の意味及び同等の範囲内でもたらされる全ての変更は、本明細書に包括されることが意図されている。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[C1]
プロセッサ内で分岐命令を予測する方法であって、
分岐ターゲットアドレスキャッシュ(BTAC)内にエントリを格納することであって、前記BTACのエントリは、評価され選択された少なくとも1つの分岐命令を含む2つ又はそれ以上の命令のブロックに関連し、前記BTACのエントリは、前記ブロック内の第1の命令のアドレスに関連するタグを有することと、
命令のグループをフェッチすると、対応するブロック内の命令が選択された分岐命令であるかを判定するために前記BTACにアクセスすることと
を備える方法。
[C2]
C1に記載の方法において、
BTACの各エントリは、前記関連するブロック内の何れの命令が選択された分岐命令かを示すインディケータを含む方法。
[C3]
C1に記載の方法において、
前記関連するブロック内の選択された分岐命令の分岐ターゲットアドレス(BTA)をBTACの各エントリ内に格納することを更に備える方法。
[C4]
C3に記載の方法において、
前記BTACへのアクセス後、前記BTAから命令をフェッチすることを更に備える方法。
[C5]
C1に記載の方法において、
BTACの少なくとも1つのエントリに関して、前記ブロック内の第1の命令は、命令キャッシュライン内の第1の命令である方法。
[C6]
C1に記載の方法において、
BTACの少なくとも1つのエントリに関して、前記ブロック内の第1の命令のアドレスは、分岐命令の前記分岐ターゲットアドレスである方法。
[C7]
C3に記載の方法において、BTACの第1のエントリは、選択された第1及び第2の分岐命令を含む第1の命令ブロックに関連し、前記第1の分岐命令のBTAを格納する方法。
[C8]
C7に記載の方法において、
前記選択された第2の分岐命令を含む第2の命令ブロックに関連するBTACの第2のエントリは、前記第2の分岐命令のBTAを格納する方法。
[C9]
複数のエントリを格納する分岐ターゲットアドレスキャッシュ(BTAC)であって、各エントリは、評価され選択された少なくとも1つの分岐命令を含む2つ又はそれ以上の命令のブロックに関連し、前記BTACのエントリは、前記ブロック内の第1の命令のアドレスに関連するタグを有するBTACと、
命令のグループをフェッチすると、命令アドレスを用いて前記BTACをインデックスするように動作可能な命令実行パイプラインと
を備えるプロセッサ。
[C10]
C9に記載のプロセッサにおいて、
BTACの各エントリは、前記関連するブロック内の何れの命令が選択された分岐命令かを示すインディケータを含むプロセッサ。
[C11]
C9に記載のプロセッサにおいて、
BTACの各エントリは、前記関連するブロック内の選択された分岐命令の分岐ターゲットアドレス(BTA)を含むプロセッサ。

Claims (10)

  1. 命令キャッシュ(Iキャッシュ)内の命令ラインに含まれた分岐命令の分岐先アドレスを予測する方法であって、
    前記Iキャッシュ内の前記命令ラインに格納された命令の第1のブロックの最初の命令からフェッチを開始し前記第1のブロック内に分岐命令があり、該分岐命令が選択されたものとして評価する場合にのみ、分岐ターゲットアドレスキャッシュ(BTAC)内に第1のBTACエントリを格納することであって、前記分岐命令および第2の分岐命令は、前記Iキャッシュ内の前記命令ラインに格納された前記命令の第1のブロック内に位置し、前記第1のBTACエントリの第1のタグフィールドは、前記命令の第1のブロック内の前記最初の命令のフル命令アドレスと、前記分岐命令を識別する第1のインディケータとを備え、前記第1のBTACエントリは、前記分岐命令の分岐ターゲットアドレス(BTA)を格納する、ことと、
    前記第2の分岐命令を有する命令の第2のブロックの最初の命令からフェッチを開始し、前記第2の分岐命令が選択されたものとして評価する場合にのみ、前記BTACに第2のBTACエントリを格納することであって、前記第2の分岐命令を有する前記命令の第2のブロックは、前記命令の第1のブロックとオーバーラップされ、前記Iキャッシュ内の1又は複数のラインに格納され、前記第2のBTACエントリの第2のタグフィールドは、前記命令の第2のブロックの前記最初の命令のフル命令アドレスと、前記第2の分岐命令を識別する第2のインディケータとを備え、前記第2のBTACエントリは、前記第2の分岐命令のBTAを格納する、ことと、
    前記第2の分岐命令の分岐ターゲットアドレスから命令をフェッチすることであって、前記命令の第2のブロックの前記最初の命令のフル命令アドレスにおいて始まる前記命令の第2のブロックのフェッチは、前記第2のBTACエントリに格納された前記BTAを識別する、ことと
    を備える方法。
  2. 命令のブロックをフェッチすると、対応する命令のブロック内の命令が選択された分岐命令であるかどうかを判定するために前記BTACにアクセスすること
    をさらに備える請求項1に記載の方法。
  3. 前記命令の第1のブロックが前記Iキャッシュライン内の任意のフル命令アドレスに格納され、前記命令の第2のブロックが前記Iキャッシュライン内の任意のフル命令アドレスに格納される請求項1に記載の方法。
  4. 前記命令の第2のブロックの前記最初の命令の前記フル命令アドレスにおいて開始する前記命令の第2のブロックを前記Iキャッシュからフェッチすることと、
    前記第2のタグフィールドに対するマッチを判定するために、前記命令の第2のブロックのフル命令アドレスをBTACエントリのタグフィールドと比較することと
    をさらに備える請求項3に記載の方法。
  5. 前記第2のタグフィールドに対する、前記命令の第2のブロックの前記最初の命令のフル命令アドレスのマッチを判定すると、前記命令の第2のブロック内のどの命令が前記第2の選択された分岐命令であるかを判定するために、前記第2のBTACエントリ内のインディケータを使用すること
    をさらに備える請求項1に記載の方法。
  6. 命令キャッシュ(Iキャッシュ)内の命令ラインに含まれた分岐命令の分岐先アドレスを予測する方法であって、
    命令キャッシュ(Iキャッシュ)内のラインに格納された第1および第2の選択された分岐命令を有する2つ又はそれ以上の命令からなる第1のブロックの最初の命令からフェッチを開始し、分岐ターゲットアドレスキャッシュ(BTAC)内に第1のBTACエントリおよび第2のBTACエントリを格納することと、
    ここで、前記第1のBTACエントリは、前記命令キャッシュ(Iキャッシュ)内の前記ラインに格納された前記第1および前記第2の選択された分岐命令を有する2つ又はそれ以上の命令からなる前記第1のブロックに関連付けられ、前記第1のBTACエントリ内に前記第1の選択された分岐命令の分岐ターゲットアドレス(BTA)を格納し、前記第2のBTACエントリは、前記第1のブロックとオーバーラップする、前記第2の選択された分岐命令を含む2つ又はそれ以上の命令からなる第2のブロックに関連付けられ、
    命令の第2のブロックの最初の命令からフェッチを開始し、前記第2のBTACエントリ内に前記第2の選択された分岐命令のBTAを格納することと、
    ここで、各BTACエントリは、Iキャッシュライン内の任意のフル命令アドレスにおいて始まる対応するブロック内の最初の命令のフル命令アドレスを備えるタグフィールドを有する、
    命令のブロックをフェッチすると、対応する命令のブロック内の命令が、選択された分岐命令であるかどうかを判定するために、前記BTACにアクセスすることと
    を備える方法。
  7. 前記第2のBTACエントリに関連付けられたBTAが、存在する第2のBTACエントリに格納されたBTAとは異なると判定することと、
    前記存在する第2のBTACエントリを更新することと
    をさらに備える請求項6に記載の方法。
  8. 前記フェッチされた命令のブロック内の検出された分岐命令が、選択された分岐命令ではないと判定することと、
    前記分岐命令が選択されたものとして評価すると判定すると、前記BTAC内に新たなエントリを格納することと
    をさらに備え、前記BTAC内の新たなエントリは、前記分岐命令が検出された場合に保存された命令ブロック情報に基づく請求項6に記載の方法。
  9. 前記命令ブロック情報は、前記分岐命令アドレスから、前記フェッチされた命令のブロック内の前記最初の命令のアドレスへのネガティブオフセットを備える請求項8に記載の方法。
  10. 前記命令のブロックは、前記Iキャッシュ内の命令のライン内の任意のフル命令アドレスにおいてフェッチされる請求項6に記載の方法。
JP2012268455A 2006-06-05 2012-12-07 スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ Expired - Fee Related JP5734945B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/422,186 2006-06-05
US11/422,186 US7827392B2 (en) 2006-06-05 2006-06-05 Sliding-window, block-based branch target address cache

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2009514477A Division JP5231403B2 (ja) 2006-06-05 2007-05-31 スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ

Publications (2)

Publication Number Publication Date
JP2013080497A JP2013080497A (ja) 2013-05-02
JP5734945B2 true JP5734945B2 (ja) 2015-06-17

Family

ID=38654617

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2009514477A Expired - Fee Related JP5231403B2 (ja) 2006-06-05 2007-05-31 スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ
JP2012268455A Expired - Fee Related JP5734945B2 (ja) 2006-06-05 2012-12-07 スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2009514477A Expired - Fee Related JP5231403B2 (ja) 2006-06-05 2007-05-31 スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ

Country Status (7)

Country Link
US (1) US7827392B2 (ja)
EP (1) EP2024820B1 (ja)
JP (2) JP5231403B2 (ja)
KR (1) KR101016541B1 (ja)
CN (2) CN103019652B (ja)
AT (1) ATE535862T1 (ja)
WO (1) WO2007143508A2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7827392B2 (en) * 2006-06-05 2010-11-02 Qualcomm Incorporated Sliding-window, block-based branch target address cache
US8407187B2 (en) 2010-06-16 2013-03-26 Microsoft Corporation Validating files using a sliding window to access and correlate records in an arbitrarily large dataset
US9201658B2 (en) * 2012-09-24 2015-12-01 Apple Inc. Branch predictor for wide issue, arbitrarily aligned fetch that can cross cache line boundaries
US9639471B2 (en) 2012-11-27 2017-05-02 Nvidia Corporation Prefetching according to attributes of access requests
US9262328B2 (en) * 2012-11-27 2016-02-16 Nvidia Corporation Using cache hit information to manage prefetches
US9563562B2 (en) 2012-11-27 2017-02-07 Nvidia Corporation Page crossing prefetches
GB2501582B (en) 2013-02-11 2014-12-24 Imagination Tech Ltd Speculative load issue
US9489204B2 (en) * 2013-03-15 2016-11-08 Qualcomm Incorporated Method and apparatus for precalculating a direct branch partial target address during a misprediction correction process
US10747540B2 (en) * 2016-11-01 2020-08-18 Oracle International Corporation Hybrid lookahead branch target cache
US20190004805A1 (en) * 2017-06-28 2019-01-03 Qualcomm Incorporated Multi-tagged branch prediction table
US11915004B2 (en) * 2021-12-20 2024-02-27 Arm Limited Control flow prediction

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5265213A (en) * 1990-12-10 1993-11-23 Intel Corporation Pipeline system for executing predicted branch target instruction in a cycle concurrently with the execution of branch instruction
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
US5577217A (en) * 1993-05-14 1996-11-19 Intel Corporation Method and apparatus for a branch target buffer with shared branch pattern tables for associated branch predictions
JPH09500989A (ja) * 1993-05-14 1997-01-28 インテル・コーポレーション 分岐ターゲット・バッファにおける推論履歴
US5574871A (en) * 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
US5530825A (en) * 1994-04-15 1996-06-25 Motorola, Inc. Data processor with branch target address cache and method of operation
JP3494484B2 (ja) * 1994-10-12 2004-02-09 株式会社ルネサステクノロジ 命令処理装置
JP3494736B2 (ja) * 1995-02-27 2004-02-09 株式会社ルネサステクノロジ 分岐先バッファを用いた分岐予測システム
GB9521980D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Branch target buffer
US5864697A (en) * 1996-06-28 1999-01-26 Texas Instruments Incorporated Microprocessor using combined actual and speculative branch history prediction
US5774710A (en) * 1996-09-19 1998-06-30 Advanced Micro Devices, Inc. Cache line branch prediction scheme that shares among sets of a set associative cache
US5918044A (en) * 1996-10-31 1999-06-29 International Business Machines Corporation Apparatus and method for instruction fetching using a multi-port instruction cache directory
JPH10133874A (ja) * 1996-11-01 1998-05-22 Mitsubishi Electric Corp スーパスカラプロセッサ用分岐予測機構
EP0848323B1 (en) * 1996-12-10 2004-02-25 Texas Instruments Incorporated Improvements in the branch prediction within a pipelined microprocessor
US6119222A (en) * 1996-12-23 2000-09-12 Texas Instruments Incorporated Combined branch prediction and cache prefetch in a microprocessor
US6108775A (en) * 1996-12-30 2000-08-22 Texas Instruments Incorporated Dynamically loadable pattern history tables in a multi-task microprocessor
TW357318B (en) * 1997-03-18 1999-05-01 Ind Tech Res Inst Branching forecast and reading device for unspecified command length extra-purity pipeline processor
US6263427B1 (en) * 1998-09-04 2001-07-17 Rise Technology Company Branch prediction mechanism
US6601161B2 (en) * 1998-12-30 2003-07-29 Intel Corporation Method and system for branch target prediction using path information
EP1150213B1 (en) * 2000-04-28 2012-01-25 TELEFONAKTIEBOLAGET LM ERICSSON (publ) Data processing system and method
JP2004505345A (ja) * 2000-07-21 2004-02-19 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 分岐ターゲットバッファを有するデータプロセッサ
US7707397B2 (en) 2001-05-04 2010-04-27 Via Technologies, Inc. Variable group associativity branch target address cache delivering multiple target addresses per cache line
US20020194462A1 (en) * 2001-05-04 2002-12-19 Ip First Llc Apparatus and method for selecting one of multiple target addresses stored in a speculative branch target address cache per instruction cache line
US7162619B2 (en) * 2001-07-03 2007-01-09 Ip-First, Llc Apparatus and method for densely packing a branch instruction predicted by a branch target address cache and associated target instructions into a byte-wide instruction buffer
US6792521B2 (en) * 2001-10-16 2004-09-14 International Business Machines Corporation Behavioral memory mechanism for a data processing system
US6877083B2 (en) * 2001-10-16 2005-04-05 International Business Machines Corporation Address mapping mechanism for behavioral memory enablement within a data processing system
US6675279B2 (en) * 2001-10-16 2004-01-06 International Business Machines Corporation Behavioral memory enabled fetch prediction mechanism within a data processing system
JP3738842B2 (ja) * 2002-06-04 2006-01-25 富士通株式会社 遅延分岐機能を備えた情報処理装置
US7266676B2 (en) * 2003-03-21 2007-09-04 Analog Devices, Inc. Method and apparatus for branch prediction based on branch targets utilizing tag and data arrays
US7174444B2 (en) * 2003-03-31 2007-02-06 Intel Corporation Preventing a read of a next sequential chunk in branch prediction of a subject chunk
US7124287B2 (en) * 2003-05-12 2006-10-17 International Business Machines Corporation Dynamically adaptive associativity of a branch target buffer (BTB)
US20040250054A1 (en) * 2003-06-09 2004-12-09 Stark Jared W. Line prediction using return prediction information
US7096348B2 (en) * 2003-12-15 2006-08-22 Freescale Semiconductor, Inc. Method and apparatus for allocating entries in a branch target buffer
JP2006048132A (ja) * 2004-07-30 2006-02-16 Fujitsu Ltd 分岐予測装置、分岐予測装置の制御方法、情報処理装置
US7328332B2 (en) * 2004-08-30 2008-02-05 Texas Instruments Incorporated Branch prediction and other processor improvements using FIFO for bypassing certain processor pipeline stages
KR100630702B1 (ko) * 2004-10-05 2006-10-02 삼성전자주식회사 명령어 캐쉬와 명령어 변환 참조 버퍼의 제어기, 및 그제어방법
US7447882B2 (en) * 2005-04-20 2008-11-04 Arm Limited Context switching within a data processing system having a branch prediction mechanism
US7827392B2 (en) * 2006-06-05 2010-11-02 Qualcomm Incorporated Sliding-window, block-based branch target address cache
US20080040576A1 (en) * 2006-08-09 2008-02-14 Brian Michael Stempel Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set
US7707396B2 (en) * 2006-11-17 2010-04-27 International Business Machines Corporation Data processing system, processor and method of data processing having improved branch target address cache
US7937573B2 (en) * 2008-02-29 2011-05-03 Freescale Semiconductor, Inc. Metric for selective branch target buffer (BTB) allocation

Also Published As

Publication number Publication date
JP2009540439A (ja) 2009-11-19
US7827392B2 (en) 2010-11-02
CN103019652A (zh) 2013-04-03
US20070283134A1 (en) 2007-12-06
KR20090017687A (ko) 2009-02-18
ATE535862T1 (de) 2011-12-15
EP2024820A2 (en) 2009-02-18
EP2024820B1 (en) 2011-11-30
WO2007143508A2 (en) 2007-12-13
WO2007143508A3 (en) 2008-01-31
CN101460922A (zh) 2009-06-17
CN103019652B (zh) 2015-04-29
KR101016541B1 (ko) 2011-02-24
JP2013080497A (ja) 2013-05-02
CN101460922B (zh) 2013-01-02
JP5231403B2 (ja) 2013-07-10

Similar Documents

Publication Publication Date Title
JP5734945B2 (ja) スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ
JP5558814B2 (ja) プロアクティブ分岐ターゲットアドレスキャッシュ管理のための方法及び装置
KR101059335B1 (ko) 가변 길이 명령 세트 실행 모드들을 가지는 프로세서 내의 bht의 효율적 사용방법
US20060218385A1 (en) Branch target address cache storing two or more branch target addresses per index
US20070266228A1 (en) Block-based branch target address cache
KR20090042303A (ko) 가변 길이 명령 세트의 브랜치 명령의 최종 입도와 캐싱된 브랜치 정보의 관련
US7640422B2 (en) System for reducing number of lookups in a branch target address cache by storing retrieved BTAC addresses into instruction cache

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131015

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20140115

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20140120

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140210

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140422

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20140722

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20140725

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141020

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141111

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150212

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150223

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: 20150317

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150415

R150 Certificate of patent or registration of utility model

Ref document number: 5734945

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees