JP2010066892A - データプロセッサ及びデータ処理システム - Google Patents

データプロセッサ及びデータ処理システム Download PDF

Info

Publication number
JP2010066892A
JP2010066892A JP2008231147A JP2008231147A JP2010066892A JP 2010066892 A JP2010066892 A JP 2010066892A JP 2008231147 A JP2008231147 A JP 2008231147A JP 2008231147 A JP2008231147 A JP 2008231147A JP 2010066892 A JP2010066892 A JP 2010066892A
Authority
JP
Japan
Prior art keywords
instruction
branch
loop
lock
pointer
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.)
Pending
Application number
JP2008231147A
Other languages
English (en)
Inventor
Tetsuya Yamada
哲也 山田
Naoki Kato
直樹 加藤
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.)
Renesas Technology Corp
Original Assignee
Renesas Technology Corp
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 Renesas Technology Corp filed Critical Renesas Technology Corp
Priority to JP2008231147A priority Critical patent/JP2010066892A/ja
Priority to US12/546,672 priority patent/US20100064106A1/en
Publication of JP2010066892A publication Critical patent/JP2010066892A/ja
Pending legal-status Critical Current

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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop 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/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering

Abstract

【課題】ループプログラムを自動判別し、命令バッファに対するサイズ可変のロック制御による低電力化を行うことのできるデータプロセッサを提供する
【解決手段】データプロセッサ(1)の命令バッファ(26)はフェッチされた命令を蓄積するメモリ部(40)を制御するバッファ制御部(44)を有し、バッファ制御部は、フェッチした条件分岐命令の実行履歴が条件成立を示唆するとき、フェッチした条件分岐命令の分岐方向が命令実行順とは逆方向であって、前記条件分岐命令による分岐元から分岐先までの命令アドレスの差分が命令バッファの記憶容量に納まる範囲であるとき、前記条件分岐命令による分岐元から分岐先までの命令列を命令バッファに保持する。保持した命令列の命令実行が繰り返される間は当該命令列の命令を命令バッファから命令デコーダに供給し、当該命令列の命令実行から抜けるとき当該命令列の保持を解除する。
【選択図】図1

Description

本発明は、命令を実行するデータプロセッサ及びデータ処理システムに関し、例えば条件分岐命令によるショート・ループが形成される半導体集積回路化されたマイクロコンピュータの低消費電力に適用して有効な技術に関する。
CPUや複数の周辺モジュールが一つのSoC(System on Chip)上に搭載される場合、CPUは周辺モジュールの処理待ちなどで用いられるスピンループと呼ばれる小さいループプログラムを用いた待ち合わせ処理や、繰り返し処理を行うforループを用いることがある。複数のCPUが搭載されるマルチコアでも同期制御の際、自分の処理が終了したタスクは、他のタスクが全て終了するまで、スピンループを用いたソフトウェアのインプリが行われることがある。このようなスピンループやループ内の命令数が少ないforループ(これらのループを単にショート・ループとも記す)は、ループ処理中にループ内の命令に対し繰り返し命令キャッシュアクセスを行うこととループの分岐処理を行うため、一般に電力消費が大きい。
CPUはキャッシュメモリあるいはROMに保持される命令を、命令フェッチ部に蓄え、デコード部に供給する。命令フェッチ部は、命令キューとそれを制御する命令フェッチ制御部とから構成される。命令フェッチ部の低電力化として命令キューに命令を保持し、キャッシュメモリへの命令アクセスを抑止する命令キューのロックが知られている。
ループプログラムにおける命令キューをロックする場所を定めるために、特許文献1の実施例1に示すように命令キューを制御する命令をプログラムに埋め込む方法がある。命令キュー制御用のレジスタを用意し、制御命令にてレジスタに値を設定することで、命令キューの制御をソフトウェアで指定できる。命令キュー制御を行わないソフトウェアに対し、命令キュー制御命令を追加する必要がある。特許文献1の実施例3には、DSPで用いられるリピート命令とリピート用のレジスタ(スタート、エンド、カウンタ)の例が示されるが、実施例1と同様にプログラム中に命令キュー制御用のリピート命令のコードが埋め込まれる。
命令キュー制御用のコードの追加を加えずに、ハードウェアでループプログラムの箇所を自動判別し、命令キューをロックする手段として、特許文献2に示すように分岐予測の一つであるブランチターゲットキャッシュを使用する方法がある。ブランチターゲットキャッシュとは、分岐命令のアドレスや分岐先のアドレス、過去の分岐の履歴情報を保持し、分岐を予測するための手段である。分岐予測を用いる理由について説明する。命令キューをロックすると、命令キューの使用が制限されるため、命令キューの本来の先読みの効果に影響があるので、ループが行われる可能性を上げたい。ブランチターゲットキャッシュを用いると分岐先のアドレスと、分岐予測によって分岐を行うかどうかがわかるため、ループ箇所並びにループを行うかどうかを判別することができる。そこで、分岐予測と組み合わせて命令キューのロックを行っている。特許文献2では、複数の命令を含む一つ、あるいは二つの一定の命令ラインに、ブランチターゲットキャッシュの情報を用いて分岐命令と分岐先命令が含まれるときに、命令キューをロックする方法が提供される。
日本国再公表WO98−36351号公報 日本国公開特許平8−77000号公報
ループプログラムにおけるCPUの低電力化を行うにあたり、プログラムの改変を伴うかどうかで2つの公知例を挙げた。特許文献1はプログラムの改変を伴うが、特許文献2はプログラムの改変を伴わない。ユーザの利便を考えると、プログラムの改変を行なわない方が既存のソフトウェアが使用できる点で望ましい。本発明者は、プログラムの改変を伴わず、小規模のハードウェア追加でループプログラムを自動判別し、低電力化を行う機構について検討した。特許文献2では、ブランチターゲットキャッシュを用いて、ループプログラムの自動判別を行う。ブランチターゲットキャッシュは、ハイエンドCPUで用いられる分岐予測手段であり、分岐先のアドレスを保持するため、メモリ容量が大きい。
組み込み機器向けマイクロプロセッサでは、面積を削減するために分岐予測手段として分岐の履歴情報のみを保持する分岐履歴テーブルを利用する。一般的に、分岐履歴テーブルは分岐先のアドレスを保持しない点と分岐の種類が限定される点でブランチターゲットキャッシュと異なる。分岐の種類として、分岐命令からの相対アドレスで分岐先アドレスを定めるPC相対アドレスの分岐命令と、レジスタを分岐先アドレスとするレジスタ間接分岐命令がある。ブランチターゲットキャッシュはPC相対アドレス分岐命令とレジスタ間接分岐命令のいずれも対象とする。分岐履歴テーブルは一般にPC相対アドレス分岐命令のみが対象にされ、小面積の分岐予測機構に採用される。
特許文献2では、命令キューロック対象の命令列として、複数の命令を含む一つ、あるいは二つの所定数の命令ラインでの順方向(アドレス増加)と逆方向(アドレス減少)の単一分岐が示される。命令キューロック対象は、命令キューに入る範囲でできるだけ多くの命令が望ましく、ループの中にループがあるなどの多重分岐が存在する場合もあり、それについては特許文献2では考慮されていない。
本発明の目的は、ループプログラムを自動判別し、命令バッファに対するサイズ可変のロック制御による低電力化を行うことのできるデータプロセッサを提供することにある。
本発明の別の目的は、多重分岐に対応して命令バッファのロック制御による低電力化を行うことのできるデータプロセッサを提供することにある。
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
すなわち、データプロセッサの命令バッファは、フェッチされた命令を蓄積するメモリ部の制御を行うバッファ制御部を有し、バッファ制御部は、フェッチした条件分岐命令の実行履歴が条件成立を示唆するとき、フェッチした条件分岐命令の分岐方向が命令実行順とは逆方向であって、前記条件分岐命令による分岐元から分岐先までの命令アドレスの差分がメモリ部の記憶容量に納まる範囲であるとき、前記条件分岐命令による分岐元から分岐先までの命令列をメモリ部に保持する。保持した命令列の命令実行が繰り返される間は当該命令列の命令をメモリ部から命令デコーダに供給し、当該命令列の命令実行から抜けるとき当該命令列の保持を解除する。上記によれば、バッファ制御部は、条件分岐命令によるループプログラムを自動判別でき、メモリ部の記憶容量に納まる範囲で条件分岐命令による分岐元から分岐先までのループの命令を保持して当該ループの処理に利用するから、命令バッファに対するサイズ可変のロック制御を行うことができ、低電力化の実現に資することができる。
前記バッファ制御部に、例えば前記条件分岐命令による分岐元から分岐先までの命令列によって形成されるループの多重数を示す分岐カウンタを採用する。単一ループのときは当該単一ループの分岐先と分岐元アドレスに対応してメモリ部上の当該ループの命令を保持する。多重ループのときは最も大きなループの分岐先と分岐元アドレスに対応して命令バッファ上の当該ループの命令を保持し、分岐カウンタを用いて多重ループを管理する。これにより、多重分岐に対応して命令バッファのロック制御が可能になる。
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
すなわち、本発明によれば、ループプログラムを自動判別し、命令バッファに対するサイズ可変のロック制御による低電力化を行うことができる。
また、本発明によれば、多重分岐に対応して命令バッファのロック制御による低電力化を行うことができる。
1.実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
〔1〕本発明に係るデータプロセッサ(1)は命令をフェッチする命令フェッチ部(20)と、命令フェッチ部によりフェッチされた命令をデコードする命令デコーダ(21)と、命令デコーダによるデコード結果に基づいて命令を実行する実行部(22)とを有する。前記命令フェッチ部は、命令バッファ(26)及び分岐予測部(25)を有する。前記命令バッファは、外部からフェッチされた命令を蓄積するメモリ部 (40)と前記メモリ部を制御するバッファ制御部(44)とを有する。前記バッファ制御部は、フェッチした条件分岐命令の実行履歴が条件成立を示唆するとき、フェッチした条件分岐命令の分岐方向が命令実行順とは逆方向であって、前記条件分岐命令による分岐元から分岐先までの命令アドレスの差分がメモリ部の記憶容量に納まる範囲であるとき、前記条件分岐命令による分岐元から分岐先までの命令列をメモリ部に保持し、保持した命令列の命令実行が繰り返される間は当該命令列の命令をメモリ部から命令デコーダに供給し、当該命令列の命令実行から抜けるとき当該命令列の保持を解除する。
〔2〕項1のデータプロセッサにおいて、前記バッファ制御部は、前記メモリ部に対するFIFO形態のリードポインタ(read_ptr)及びライトポインタ(wrie_ptr)の制御を行うとともに、メモリ部に保持する前記命令列をロックスタートポインタ(lcks_ptr)及びロックエンドポインタ(lcke_ptr)で特定し、保持した命令列の命令実行が繰り返される間はロックスタートポインタ及びロックエンドポインタが指定される範囲でリードポインタを変化させる。
〔3〕項2のデータプロセッサにおいて、前記バッファ制御部は、前記条件分岐命令の命令アドレス(BADR)と、当該条件分岐命令及びそれによる分岐先命令を夫々保有するメモリ部のバッファ内アドレス(QBADR,QTADR)とを登録する分岐管理テーブルを用いてポインタ制御を行う。
〔4〕項3のデータプロセッサにおいて、前記バッファ制御部は、メモリ部にフェッチした命令に条件分岐命令が含まれるとき、当該条件分岐命令の命令列に関する情報を前記分岐管理テーブルに登録する。
〔5〕項1のデータプロセッサにおいて、前記条件分岐命令はPC相対条件分岐命令である。
〔6〕項1のデータプロセッサにおいて、前記命令フェッチ部は条件分岐命令の実行履歴に基づいて分岐予測を行う分岐予測部(25)を有する。前記分岐予測部は前記条件分岐命令の命令アドレスに基づいて分岐予測を行なってその予測結果を出力する。前記バッファ制御部は、前記予測結果に基づいて条件分岐命令の条件成立が示唆されているか否かを判別する。
〔7〕項1のデータプロセッサにおいて、前記バッファ制御部は、分岐方向が逆方向で前記条件分岐命令による分岐元から分岐先までの命令列の繰り返し実行回数を計数する分岐履歴カウンタ(85)を有する。前記分岐履歴カウンタの計数値が所定値を超えることによってショートループの形成が示唆されていると判別する。
〔8〕項2のデータプロセッサにおいて、前記バッファ制御部は、前記条件分岐命令による分岐元から分岐先までの命令列によって形成されるループの多重数を示す分岐カウンタ(86)を有する。バッファ制御部は、単一ループのときは当該単一ループの分岐先と分岐元アドレスに対応して前記ロックスタートポインタとロックエンドポインタの値を決定し、多重ループのときは最も大きなループの分岐先と分岐元アドレスに対応して前記ロックスタートポインタとロックエンドポインタの値を決定する。
〔9〕項8のデータプロセッサにおいて、前記バッファ制御部は、メモリ部上における分岐元に対するリードポインタのアドレス差である第1データ(x)、メモリ部上におけるリードポインタに対する分岐先のアドレス差である第2データ(y)、前記第1データと第2データとの和である第3データ(x+y)をループ毎に取得する。バッファ制御部は、第1データ及び第2データが夫々正の整数値であることによってリードポインタが自ループ内であるかを判別し、前記ループ毎における第1データの大小に基づいて多重ループの分岐元の包含関係を判別し、前記ループ毎における第2データの大小に基づいて多重ループの分岐先の包含関係を判別し、ループ毎の第3データの大小に基づいて多重ループにおけるループの大小関係を判別する。
〔10〕項1のデータプロセッサ(1)は更に命令キャッシュメモリ(11)を更に有し、前記命令フェッチ部は前記命令キャッシュメモリから必要な命令をフェッチする。
〔11〕データ処理システムは項10のデータプロセッサと、前記データプロセッサに接続された外部メモリ(2)とを有する。前記命令キャッシュメモリは前記外部メモリが保有する命令の一部を保有して連想メモリ動作を行なう。
2.実施の形態の詳細
実施の形態について更に詳述する。以下、本発明を実施するための形態を図面に基づいて詳細に説明する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
図2には本発明に係るデータプロセッサの一例が示される。同図に示されるデータプロセッサ(LSI)1は、特に制限されないが、CMOS集積回路製造技術によって単結晶シリコンのような1個の半導体基板に形成され、例えばシステムオンチップ(SoC)の半導体デバイスとして構成される。データプロセッサ1には外部記憶装置としてシンクロナスDRAM(SDRAM)2が接続される。データプロセッサ1は例えばシステムバス(B−BUS)3を共有するCPUコア(CPUCR)4及びメモリコントローラとしてのSDRAMコントローラ5等を備える。SDRAMコントローラ4はCPUコア4の制御に基づいてSDRAM2をアクセスするためのインタフェース制御を行う。
CPUコア4は、システムバス3に対し、バスインタフェースユニット(BIFU)10を介して命令キャッシュ(ICACH)11とデータキャッシュ(DCACH)12が接続される。命令キャッシュ11は命令フェッチバス(F−BUS)13を介して、データキャッシュ12はデータバス(D−BUS)14を介して中央処理装置(CPU)15に接続される。CPU15は、命令フェッチ部(IFTCH)20、命令デコーダ(IDEC)21、実行部(EXEC)22から構成される。命令フェッチ部20は、分岐予測を行う分岐予測部(BE)25、命令キャッシュ11からの命令を保持して命令デコーダ21に与える命令バッファ(IQ)26(以下においては便宜的に命令バッファを命令キューとも称する)、及び命令フェッチを制御する命令フェッチ制御部(FTCHCTL)27から構成される。命令デコーダ21は命令キュー26から出力される命令を解読し、実行部22はその解読結果等に従ってオペランドのアドレス演算、データキャッシュ12に対するオペランドアクセス、オペランドを用いたデータ演算等を行って算命令を実行する。実行部22は特に図示はしないが演算器、汎用レジスタ、及びプログラムカウンタ等を有する。
CPU15は次のように命令を処理する。まず、実行部22のプログラムカウンタの値に従った命令アドレス命令アドレスIADRが命令キュー26に供給される。命令アドレスIADRに対応する命令が命令キュー26内に存在しない場合、命令キュー26から命令キャッシュ11に対し、フェッチリクエストFREQとフェッチアドレスFADRが出力される。命令キャッシュ11上に必要な命令が存在しない場合、命令キャッシュ11はSDRAMコントローラ5を介して必要な命令をSDRAM2からリードする制御を行う。これによってシステムバス3を介してCPUコア15内のバスインタフェースユニット10を経由して、命令キャッシュ11に必要な命令がリードされ、命令キャッシュ11は命令フェッチバス13を介して複数ワードの命令列であるフェッチ命令FINSTを命令キュー26に供給する。命令キュー26は供給された命令列を保持すると共に、命令デコーダ21に命令アドレスIADRに対応する命令(OPC:オペレーションコード)を供給する。命令デコーダ21は供給された命令を解読し、その解読結果に基づいて実行部22は命令で指定された処理、例えば演算やデータのロード・ストアなどの処理を制御する。尚、命令アドレスIADRに対応する命令が命令キュー26内に存在する場合は命令キュー26内の命令が直接命令デコーダ21に供給される。命令アドレスIADRに対応する命令が命令キュー26内に存在しなくても命令キャッシュ11に存在すればSDRAM2のアクセスを行わずに命令キャッシュが保有する命令が命令キュー26から命令デコーダ21に供給される。
次に分岐命令の処理について説明する。分岐命令にはプログラムカウンタ(PC)の値を分岐先アドレスの決定に用いるPC相対分岐命令、汎用レジスタの値を分岐先アドレスの決定に用いるレジスタ相対分岐命令等がある。PC相対分岐の場合には値が一意に決まるPCを用いればよく、レジスタ相対の場合にはその値は一意に決まらず前の命令実行結果等に依存することが多く、分岐先の確定に時間を要しないためにはPC相対分岐を用いることが得策になる。PC相対分岐命令として、例えば、前の命令実行の結果が真値を返すことを分岐条件とする“BT(PC+即値)”、前の命令実行の結果が偽値を返すことを分岐条件とする“BF(PC+即値)”のような条件分岐命令がある。“BRA(PC+即値)”のような無条件分岐命令もある。前記PC相対分岐命令における分岐先アドレスは、当該分岐命令のプログラム位置である命令アドレス(プログラムカウンタPCの値)に命令コードの中に含まれる即値を加算した値によって決定される。
ここで、分岐予測部25による分岐予測の対象は、特に制限されないが、PC相対分岐命令とする。命令キュー26は自らが保持する命令にPC相対分岐命令を含むことをオペコードのプリデコードによって検出すると、当該PC相対分岐命令の命令アドレスである分岐元アドレスBADRを分岐予測部25に出力する。分岐予測部25は分岐予測を行ってその予測結果BEXPを命令キュー26に出力する。命令キュー26は当該PC相対分岐命令、分岐元アドレスBADR、及び分岐予測結果BEXPに基づいてPC相対分岐による分岐先アドレスの計算を行い、その分岐先アドレスを命令キャッシュ11にフェッチアドレスFADRとして出力する。分岐命令として、PC相対分岐命令以外にはレジスタ間接の分岐命令があるが、レジスタ間接分岐命令に関しては、実行部でアドレス計算を行い、命令アドレスIADRとして命令フェッチ部に入力された後、フェッチアドレスFADRを分岐先アドレスとして命令キャッシュに出力する。分岐先アドレスを受取った命令キャッシュ11はフェッチ対象の命令(フェッチ命令)FINSTを分岐先の命令として命令キュー26に供給する。
分岐予測ミスした場合は、命令デコーダ21に正しい命令列を供給する必要がある。その仕組みを説明する。分岐予測ミスの場合、実行部22での命令列の実行が抑止されると同時に、分岐予測ミス信号BMISが実行部22から命令フェッチ部20のフェッチ制御部27に伝えられ、分岐予測部25の履歴情報が更新されると共に、命令キュー26は実行部22から供給される正しい命令アドレスIADRを用いて必要な命令フェッチ処理を実行する。
図3にはショート・ループの例が示される。本明細書において、ショート・ループ(SHRTLP)とは、スピンループやforループなどの命令数の少ない繰り返し命令列としてのループを総称する。少ない命令数とは、端的には命令キュー26に格納可能な命令数の範囲を意味する。図3にはプログラムカウンタ(PC)とアセンブラ表現を記載する。命令1(inst1)から命令8(inst8)は任意の命令でよい。BF命令がPC相対分岐命令である。ここでは、BF命令の分岐先は、
PC(H’00400008)+H’F8(最上位符号)
=H’00400008−H’8=H’00400000(ラベルLOOP)となる。すなわち、BF命令はラベルLOOPに分岐し、実行命令アドレスアドレスが減少する逆方向の分岐とされる。このとき、命令1(inst1)からBF命令までがループを形成する。ループを構成する命令が5命令と少ない。BF命令の非分岐の命令列がinst5からinst8の命令列となる。
図4には分岐予測のための状態遷移が例示される。これは1ビット飽和型カウンタの状態遷移を示す。分岐予測において広く使用される、1ビット飽和型カウンタは、1ビットで表現できる1、0の2つの状態としてtaken、untakenと呼ばれる状態を持つ。分岐結果が成立のときインクリメントし、不成立のときデクリメントする飽和カウンタである。カウンタが1、すなわちtaken状態のとき分岐成立と予測し、カウンタが0、すなわちuntaken状態のとき分岐非成立と予測する。1ビット方式より予測精度が高い方式として2ビット方式がある。これら予測技術には公知の技術を適用することが可能である。
図5には分岐予測部(BE)25の構成が概念的に示される。分岐予測部25は、分岐元アドレスBADRの一部のmビットをインデックスアドレスとして用いて、分岐予測内容が保持される分岐履歴テーブル(BHT)30を参照し、該当する分岐命令の分岐予測結果BEXPを出力する。分岐予測内容は、1:分岐する(taken)、0:分岐しない(untaken)である。分岐元アドレスBADRの一部のmビットで参照される分岐履歴テーブル(BHT)30は、分岐予測ミス信号(BMIS)により、分岐履歴テーブルの内容が反転されて更新される。尚、分岐予測方式には様々な方式があるが、本発明では分岐履歴テーブルを用いる方式であれば他の方式、例えば、分岐命令とグローバルな分岐履歴を参照する2レベル予測方式やGshare予測方式も対応可能である。
図1には命令キュー26の構成が例示される。命令キュー26は命令列を保持する4エントリ×8ラインのメモリ部としての命令キューアレイ40を有し、その8ラインから1ラインの読み出しはライン選択回路41で選択される。命令キューのキューライン選択回路(LSLCT)41から出力される1ライン分の命令又は命令キャッシュ11から供給される1ライン分のフェッチ命令FINSTは命令ライン選択回路(INSTSLCT)42で選択され、それによって選択された命令ラインの中からエントリ選択回路(ESLCT)43が1エントリの命令(OPC)を選択して命令デコーダ21に出力する。
命令キュー26はバッファ制御部としての命令キュー制御部(IQCTL)44を備える。命令キュー制御部44は命令ポインタ制御部(INSTCTL)45と命令キューロック制御部(LKCTL)46を備える。命令ポインタ制御部45は、命令デコーダ21に供給する命令の命令キューアレイ40内からリードする命令位置を示すリードポインタ(read_ptr)、命令キャッシュ11からのフェッチ命令FINSTを命令キューアレイ40内のどのラインにライトするかを示すライトポインタ(write_ptr)を制御する。命令キューロック制御部46は命令キューのロック開始位置ポインタとしてのロックスタートポインタ(lcks_ptr)及びロック終了位置ポインタとしてのロックエンドポインタ(lcke_ptr)を制御すると共に、ロックスタートポインタ(lcks_ptr)及びロックエンドポインタ(lcke_ptr)を命令ポインタ制御部45に与えて命令キューのロック制御を行う。リードポインタ(read_ptr)とライトポインタ(write_ptr)による制御はFIFO(First-In First-Out)を基本とするが、命令キューのロックスタートポインタ(lcks_ptr)とロックエンドポインタ(lcke_ptr)の間のエントリは、予測ミスを生ずるまで順次繰り返しリードポインタ(read_ptr)によりリードポイントされることになる。更に具体的なポインタ制御内容については以下で説明する。
図6には命令キューロック制御部(LKCTL)46の構成が例示される。命令キューロック制御部(LKCTL)46はPC相対分岐管理部(PCRBCTL)50及びロックポインタ制御部(LPCTL)51を有する。PC相対分岐管理部50はPC相対分岐サーチ部(PCRBSRCH)53、分岐情報生成部(BIGEN)52及び分岐管理テーブル(BCTBL)54を備える。PC相対分岐サーチ部53は命令キュー26の命令ライン選択回路42から出力される選択命令ラインISTLを入力し、入力したラインの命令列にPC相対分岐命令が含まれるか否かを探索する。分岐情報生成部(BIGEN)52はそれによって探索されたPC相対分岐命令から分岐情報を生成し、生成した分岐情報を分岐管理テーブル54に登録して管理する。分岐管理テーブル54には、分岐毎の情報として、ロック対象であるか否かを示すロック対象フラグ(LFLG)、分岐元アドレス(BADR)、キュー内分岐元アドレス(QBADR)、キュー内分岐先アドレス(QTADR)、分岐方向(BDR、0:順方向、1:逆方向)、分岐予測値(PRD,0:非分岐の予測であるuntaken、1:分岐の予測であるtaken)の情報が必要に応じて登録される。分岐管理テーブルの情報を元にロックポインタ制御部51は、命令キュー26のロックすべき位置としてロックスタートポインタ(lcks_ptr)、ロックエンドポインタ(lcke_ptr)を管理する。分岐管理テーブル54は、各分岐において命令キューのロック対象になるかをロック対象フラグ(LFLG)が示している。図3の単一分岐の例において、分岐元アドレス(BADR)がH’00400008で、命令キューの上から2本のラインを使用するとき、命令キュー内分岐元アドレスがH‘00100、分岐先アドレスがH’00000とされ、分岐方向がアドレスの逆方向1、分岐予測として1(taken)とすると、当該単一分岐によるループは命令キュー26内に命令が収まるショート・ループであるから、ロック対象フラグ(LFLG)が1となる。図6に示された命令キューアレイ40においてL1はロック対象ショート・ループの先頭命令(図3のinst1)、B1はショート・ループの基点となるPC相対分岐命令(図3のBF)を意味する。図6においてB2からL2への分岐は順方向の分岐でショート・ループではなく、ロック対象でもない。ロックポインタ制御部51は、分岐管理テーブル54からロック対象の分岐情報を得てロック箇所とロックタイミングを定める。
図7には命令キューの制御フローが例示される。命令キュー26に命令アドレスが供給されたとき(71)、命令キュー26に命令がなければ(72)、入力された命令アドレス(IADR)に基づいてフェッチアドレス(FADR)を生成して、命令キャッシュ11をアクセスして1ライン分の命令(FINST)が命令キュー26に供給される(73)。
命令アドレス(IADR)に該当する命令キャッシュ11からの命令ライン(ISTL)内にPC相対分岐命令を含むか否かの判別として分岐サーチが行われる(74)。分岐サーチの結果、分岐命令がなく、また、命令キュー26にループ用命令が保持されていない場合は(77)、命令キュー26の命令ライン選択回路42の後、エントリ選択回路(ESLCT)43で命令OPCが選択され、命令デコーダ21に当該命令OPCが出力される(78)。上記は通常モードの動作となる。
前記分岐サーチ(74)においてPC相対分岐命令がある場合、分岐元アドレス(BADR)を用いて分岐予測部25で分岐予測が行われ(75A)、分岐予測方向(BEXP)を入力すると共に、分岐命令の分岐元アドレス(BADR)、キュー内分岐元アドレス(QBADR)、キュー内分岐先アドレス(QTADR)、分岐方向(BDR)、分岐予測(PRD)を分岐管理テーブル54に保持する。そして分岐予測がtakenで且つ分岐方向が減少アドレス方向(分岐方向逆)であるか否かが判別され(75B)、そうである場合には更に、分岐元アドレスと分岐先アドレスの差分が命令キューアレイ40のサイズより小さいか否かが判別される(76)。小さい場合には、ショート・ループモードに入る。大きければ通常モードの処理77に移行する。
ショート・ループモードでは、信号BMISにより分岐予測ミスが通知されたか(79)、IQロックの設定が行われているか(82)、が夫々判別される。IQロックの設定とは、命令キュー26に対するロックの設定、即ち、前記命令キューのロックスタートポインタ(lcks_ptr)及びロックエンドポインタ(lcke_ptr)の設定が行われているかどうかどうかということである。分岐予測ミスでなく、IQロックの設定が行われていなければ、ロックスタートポインタ(lcks_ptr)及びロックエンドポインタ(lcke_ptr)の設定が行われ、且つ、分岐によるループで必要な命令を命令キャッシュ11から命令キュー26に保持する(83)。そして、必要な命令OPCが命令キュー26で選択されて命令デコーダ21に出力される(78)。ステップ79において分岐予測ミスが通知されたときは、命令キュー16に対するロック解除、即ち、前記命令キューのロックスタートポインタ(lcks_ptr)及びロックエンドポインタ(lcke_ptr)による指定を無効にしてから(84)、そのときの命令アドレスに応ずる命令を命令デコーダ21に出力する(78)。
命令キュー26内での命令フェッチにおいて、リードポインタ(read_ptr)が命令アドレス(IADR)の命令キュー26上の位置を指しており、ショート・ループを繰り返している間は、リードポインタ(read_ptr)が命令キュー26の適切な場所を示し、命令ライン(ISTL)の選択、並びに命令デコーダ21への命令供給が行われる。
ショート・ループモードにおけるステップ83の命令保持動作では命令キュー26に命令を保持する。ステップ83のIQロック設定動作では、分岐管理テーブル54を参照し、キュー内分岐元アドレスQBADRにロックエンドポインタ(lcke_ptr)、キュー内分岐先アドレスQTADRにロックスタートポインタ(lcks_ptr)をセットする。ショート・ループが単一分岐のとき、すなわちロック対象分岐命令が一つしかないときは、ロックエンドポインタ(lcke_ptr)及びロックスタートポインタ(lcks_ptr)は一意に決定する。ライトポインタ(write_ptr)を用いて、ロックスタートポインタ(lcks_ptr)の指すアドレスからロックエンドポインタ(lcke_ptr)の指すアドレスまで順に命令キュー26に命令を保持していく。ライトポインタ(write_ptr)がロックエンドポインタ(lcke_ptr)の値と同じになると、ループ用の命令保持は完了する。ロックエンドポインタ(lcke_ptr)及びロックスタートポインタ(lcks_ptr)によってアドレス範囲が実質的に指定されているとき、命令キャッシュ11に対するアクセスは抑止される。このようにしてIQロックの設定が行われた状態ではループ用命令保持中となる(77)。一旦IQロックが設定された後は、ループ用命令が保持中となり(ステップ77のyes)、分岐予測ミスを生じない(ステップ79のno)範囲で、既に設定されたIQロックの設定内容にしたがって命令キュー26から命令が命令デコーダ21に供給される動作が繰り返され、命令キュー26内のロックエンドポインタ(lcke_ptr)及びロックスタートポインタ(lcks_ptr)で指定された命令列が繰り返し利用され、その間は、当該命令列の命令は命令キャッシュ11からの命令によってリプレースされない。
ショート・ループモードが終了するタイミングは、CPU22の実行部から分岐予測ミス(BMIS)として伝えられる。すなわち、分岐予測がミスのとき(79)はIQロックが解除され、必要な命令が命令キュー26から命令デコーダ21に供給される。
図8には命令キューロック制御部(LKCTL)の別の例が示される。図2の分岐予測部25がない場合の例である。命令キューロック制御部46AのPC相対分岐管理部50Aにてループ分岐のみの履歴をとることで分岐予測の代替を行うようになっている点が上記の例とは相違される。相違点について説明する。PC相対分岐管理部50Aは、例えばPC相対分岐サーチ部53、探索したPC相対分岐命令を管理し分岐情報を生成する分岐情報生成部52、ループ分岐の分岐履歴カウンタ85、及び分岐管理テーブル54から構成される。この命令キューロック制御部46Aは、ショート・ループを見つけた後、分岐履歴カウンタ85で該ショート・ループの分岐の回数が一定数を超えたとき(図8の例ではB’11回のとき)、ロック対象のビットが1にセットされる。分岐履歴カウンタ85の計数動作は、分岐情報生成部にて、ある分岐元アドレスに関して、リードポインタがその分岐元アドレスを指すときに分岐方向が逆方向(1)のとき、回数を計数し、リードポインタが該当する分岐元アドレスを指すときに分岐方向が順方向(0)のとき、計数値が初期化される。
ロック対象のビットが1にセットされたショートループに対して、ロックスタートポインタ(lcks_ptr)とロックエンドポインタ(lcke_ptr)が設定され、命令保持後に命令キューがロックされる(IQロック)。ループから抜けるときは、ロック対象のビットが0となり、分岐方向が順方向であるか、または、命令アドレス(IADR)に対応されるリードポインタ(read_ptr)がロックスタートポインタとロックエンドポインタ間のアドレス範囲外になることによって、命令キューロック(IQロック)が解除される。図6の例では、分岐予測ミス(BMIS)により命令キューロックが解除されるのに対し、図8の例では、分岐方向が順方向であるか、または、リードポインタ(read_ptr)がロックアドレス範囲(lcks_ptr〜lcke_ptr)と異なることによってIQロックが解除される。
図9には二重分岐を含むショート・ループの例を示す。多重分岐はこれらの二重分岐の延長として実現できる。二重分岐を3つのケースに分類する。ケース1は二重ループでループ中に別ループの分岐元と分岐先がある場合を示す。ループLP1の中でループLP2が繰り返される。ケース2はループ中に別ループの分岐先がある場合を示す。ループLP4の中でループLP3を繰り返すことになる。ケース3はループ中に別ループの分岐元がある場合を示す。ループLP5の途中でループLP6に抜ける。以下では図9の3つのケースに対応できるショート・ループロック機構について説明する。
図10には命令キューロック制御部の更に別の例が示される。命令キューロック制御部46Bはロック内分岐カウンタ(BCUNT)86を有する点が図6とは相違される。PC相対分岐管理部は50B、ロックポインタ制御部は51Bとして図示してある。PC相対分岐管理部50Bは、PC相対分岐サーチ部53、探索したPC相対分岐命令を管理し分岐情報を生成する分岐情報生成部52、及び分岐管理テーブル54から構成される。分岐管理テーブル54は、前述と同様に、分岐ごとの情報として分岐元アドレス(BADR)、キュー内分岐元アドレス(QBADR)、キュー内分岐先アドレス(QTADR)、分岐方向(BDR)、分岐予測値(PDR)が記載される。分岐管理テーブル54は、各分岐において命令キューのロック可能かどうかの情報であるロック対象フラグ(LFLG)を有する。ロック内分岐カウンタ86は、リードポインタ(read_ptr)、分岐ミス(BMIS)、PC相対分岐管理部50Bの分岐管理テーブル54の情報を入力し、ロック範囲内の分岐数をカウントする。分岐管理テーブル54の情報と、リードポインタ(read_ptr)、ライトポインタ(write_ptr)、ロック内分岐カウンタ86のカウント情報を元にロックポインタ制御部51Bが、命令キュー26のロックすべき位置としてロックスタートポインタ(lcks_ptr)及びロックエンドポインタ(lcke_ptr)を管理する。
図12、図13、図14には図10の命令キューロック制御部46Bによる多重分岐対応の命令キューロック制御の動作が例示される。各図では図9のケース1、すなわち、ループLP1中に別ループLP2がある場合を一例とする。
図12は命令1〜命令3を実行後に、命令4〜命令7を命令キューに保持してショート・ループモードとなり、命令8〜命令10を一度も実行していない単一分岐ケースである。QLADRは命令キュー26内のローカルアドレス(キュー内アドレス)である。命令7まで命令キュー上にあるため、ライトポインタ(write_ptr)は命令7を指し、図12ではリードポインタ(read_ptr)の指す命令5をオペコードとして命令デコーダ21に供給する。ロック内分岐カウンタ86のカウント値は1である。分岐管理テーブル54には、ループLP2がロック対象として登録されている。ロックポインタ制御部51Bでは、まず、リードポインタ(read_ptr)がループ内であるかどうかの判定を行う。すなわち、x(キュー内分岐元アドレス−read_ptr)=2、y(read_ptr−キュー内分岐先アドレス)=1、x>0かつy>0のため、リードポインタ(read_ptr)がループLP2内であることがわかる。このとき、ロックスタートポインタ(lcks_ptr)は命令4、ロックエンドポインタ(lcke_ptr)は命令7となる。すなわち、ロックポインタ制御部51Bは、ロック内分岐カウンタ86の値が1のとき、x>0、且つy>0の条件を満足するように、リードポインタ(read_ptr)を制御することによって、リードポインタ(read_ptr)を当該ループ内で変化させる事ができる。
図13は命令1〜命令10を命令キュー26に保持した後、命令4〜命令7でショート・ループモードとなる多重分岐ケースである。命令10まで命令キュー26上にあるため、ライトポインタ(wrie_ptr)は命令10を指し、図13ではリードポインタ(read_ptr)の指す命令5がオペコードとして命令デコーダ21に供給されている。ロック内分岐カウンタ86によるカウント値はロックスタートポインタ(lcks_ptr)とロックエンドポインタ(lke_ptr)との間のロック範囲の分岐数である2にされる。分岐管理テーブル54には、二つのループLP1とループLP2がロック対象として登録される。ロックポインタ制御部51Bでは、まず、リードポインタ(read_ptr)がループ内であるかどうかの判定を行う。ループLP2は、x=2>0、y=1>0よりリードポインタ(read_ptr)がループ内、ループLP1は、x=6>0、y=4>0よりリードポインタ(read_ptr)がループ内であることがわかる。どちらのループが大きいかはxとyの合計z(=x+y)の大きさによりわかる。すなわち、ループLP2はz=3、ループLP1はz=10より、どちらのループが大きいかがわかる。ループ間における分岐元と分岐先の夫々の包含関係についてもx、yをループ毎に比較することによってわかる。ここでは、zによりループLP1が大ループであることがわかるので、ループLP1側に合わせてロックスタートポインタ(lcks_ptr)を命令1に、ロックエンドポインタ(lcke_ptr)を命令10に対応させて設定される。
図14は命令1〜命令10を命令キューに保持した後、ループLP2を抜けてショート・ループモードとなる単一分岐ケースである。命令10まで命令キュー26上にあるため、ライトポインタ(write_ptr)は命令10を指し、リードポインタ(read_ptr)の指す命令8がオペコードとして命令デコーダ21に供給されている。分岐管理テーブル54においてループLP2は削除されるため、ループLP1のみがロック対象として登録されている。ロック範囲のループはループLP1のみのため、分岐数は1であり、ロック内分岐カウンタ86の値は1となる。ロックポインタ制御部51Bでは、リードポインタ(read_ptr)がループ内であるかどうかの判定を行う。x=6、y=4、x>0かつy>0のため、リードポインタ(read_ptr)がループLP1内であることがわかる。図14の例では、ロックスタートポインタ(lcks_ptr)は命令1、ロックエンドポインタ(lcke_ptr)は命令10を指す。
図12乃至図14の例から明らかなように、ロックスタートポインタ(lcks_ptr)とロックエンドポインタ(lcke_ptr)の値はロック内分岐カウンタ86の値とリードポインタ(read_ptr)の値に合わせて動的に動く。リードポインタ(read_ptr)が現在どこのループ内にいるかは値x,yから判別され、ループ間における分岐元と分岐先の夫々の包含関係についてもx,yの大小をループ毎に比較することによってわかり、更に多重ループにおけるループの大小は夫々のループの値x+yの大小から判別される。
図11には多重分岐対応の命令キューロック制御動作のフローチャートが示される。図7に対してロック範囲対象アドレスチェック(114,115)、分岐管理テーブル54及びロック内分岐カウンタ86の処理(121〜125)が追加されている点が相違する。図9のケース1〜ケース3のそれぞれに対して図11のフローを説明する。
《ケース1;ループLP1中に別ループLP2がある》
まず、ループLP2が分岐管理テーブルに登録され、ロック後にループから脱する際に分岐ミスが発生するので、分岐管理テーブル54から削除され、ループLP2に関するIQロックが解除(85)されたところ(命令8)から説明する。命令8、命令9、命令10は初めて実行され、通常モードで命令キャッシュ11から命令キュー26に命令がフェッチされ、命令が選択されて命令デコーダ21に供給される。
命令10で分岐予測taken、分岐方向が逆方向と判別され(75B)、かつ分岐元アドレスと分岐先アドレスの差分が命令キューより小さいと判別される(76)ので、多重分岐対応ショート・ループモードに入る。分岐管理テーブル54に登録されていないため(121)、当該命令ループLP1が分岐管理テーブル54に登録され、分岐カウンタが1となる(122)。これによってIQロックの設定処理として、ロックスタートポインタ(lcks_ptr)及びロックエンドポインタ(lcke_ptr)の設定が行われる(82,83)。分岐によるループで必要な命令はすでに命令キュー26に保持されている。命令7で再び分岐予測taken、分岐方向が逆方向(75B)、アドレス差分が命令キューより小さく(76)、多重分岐ショート・ループモードに入る。そしてLP2が分岐管理テーブル54に登録され、分岐カウンタは2となる(122)。ここではIQロックの設定は変更されない(ステップ82のyes)。ロックスタートポインタ(lcks_ptr)及びロックエンドポインタ(lcke_ptr)の設定変更を要しないからである。ループLP2の命令実行に必要な命令は命令キュー26から命令デコーダ21に供給される。ここまでの処理は図13の場合に該当し、ループLP1がロック範囲となる。正確には図13は命令8、命令9、命令10が命令キュー26に保持された後の状態である点が異なるが、分岐管理テーブル54とロックポインタ制御部51Bは同一である。
ループLP2で複数回ループを実行後に命令7の分岐ミスが通知されると(123)、ループLP2は分岐管理テーブル54から削除され、分岐カウンタの値が減じて(124)、値1となる。ここではIQロックの設定は変更されない(ステップ82のyes)。ロックスタートポインタ(lcks_ptr)及びロックエンドポインタ(lcke_ptr)の設定変更を要しないからである。そして、ループの先頭の命令1に分岐すると、ループ1(LP1)用の命令は、IQロックの設定に従って命令キュー26から命令デコーダ21に供給される。ループLP1で複数回ループを実行後に命令10の分岐ミスが通知されると(123)、ループLP1は分岐管理テーブル54から削除され、分岐カウンタ86が減じて値0となり(125)、命令キューロックが解除される(85)。ループLP2を脱する際、分岐管理テーブル54は変更され、分岐カウンタ86の値は減じるが、図14の場合のようにループLP1の部分で命令キュー26がロックされたままであり、この状態でロックが解除されることはない。すなわち、分岐管理テーブル54に登録されている命令ループがあり、分岐カウンタ86の値が0でないときは命令キュー26はロックされ続ける(125)。
《ケース2;ループLP3中に別ループLP4の分岐先がある》
ループLP3のみ実行しているときは単一分岐である。ループLP4中の分岐命令8がループLP3の先頭に分岐しないときは単一分岐として扱ってよく、ループLP3の先頭に分岐するときは二重分岐となる。ループLP3の先頭に分岐する場合は、ループLP4の分岐先がケース1と異なるが、ケース1と同じフローとすればよい。
《ケース3;ループLP5中に別ループLP6の分岐元がある》
ループLP5の実行中、ループLP6の分岐がないときは単一分岐である。ループLP5でショート・ループモードに入って、命令キュー26をロックしているときに、ループLP6の分岐がある場合について説明する。ループLP6の分岐がuntakenのときは、ループLP5は単一分岐のショート・ループとして継続する。ループLP6の分岐がtakenのときは、ロック範囲対象アドレスチェックでアドレス範囲外(114)になるため、分岐管理テーブルをクリアし(115)、命令キューロックが解除され(85)、ループLP6の分岐先に分岐する。ロック範囲アドレスチェックは、ロックポインタ制御でx=分岐元アドレス−read_ptr<0になることで判別できる。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば、3重ループ以上の多重ループにおけるIQロックの制御についても分岐カウンタ86の値などに従って図11乃至図14で説明した内容に準拠して同様に制御を行えばよい。また、命令キューに対して命令フェッチの他に命令プリフェッチ機構を用いて命令プリフェッチを行なってもよい。本発明はSoC形態に限定されず汎用向けなどの各種データプロセッサに広く適用することができる。
図1は命令キューの構成を例示するブロック図である。 図2は本発明に係るデータプロセッサの一例を全体的に示すブロック図である。 図3はショート・ループの例を示す説明図である。 図4は分岐予測の一例を示す状態遷移図である。 図5は分岐予測部の構成を概念的に例示するブロック図である。 図6は命令キューロック制御部(LKCTL)の構成を例示するブロック図である。 図7は命令キューの制御動作を例示するフローチャートである。 図8は命令キューロック制御部(LKCTL)の別の例を示すブロック図である。 図9は二重分岐を含むショート・ループの例を示す説明図である。 図10は命令キューロック制御部の更に別の例を示すブロック図である。 図11は多重分岐対応の命令キューロック制御動作のフローチャートである。 図12は図10の命令キューロック制御部による多重分岐対応の命令キューロック制御の第1の動作を例示する説明図である。 図13は図10の命令キューロック制御部による多重分岐対応の命令キューロック制御の第2の動作を例示する説明図である。 図14は図10の命令キューロック制御部による多重分岐対応の命令キューロック制御の第3の動作を例示する説明図である。
符号の説明
lcks_ptr…ロックスタートポインタ
lcke_ptr…ロックエンドポインタ
inst_ptr…命令位置ポインタ
read_ptr…リードポインタ
write_ptr…ライトポインタ
1…データプロセッサ
2…SDRAM
4…CPUコア
15…CPU
11…命令キャッシュ
20…命令フェッチ部
21…命令デコーダ
22…実行部
25…分岐予測部
26…命令キュー(命令バッファ)
40…命令キューアレイ
44…命令キュー制御部
45…命令ポインタ制御部
46,46A,46B…命令キューロック制御
50,50A,50B…PC相対分岐管理部
51,51B…ロックポインタ制御部
85…分岐履歴カウンタ
86…ロック内分岐カウンタ

Claims (11)

  1. 命令をフェッチする命令フェッチ部と、命令フェッチ部によりフェッチされた命令をデコードする命令デコーダと、命令デコーダによるデコード結果に基づいて命令を実行する実行部とを有するデータプロセッサであって、
    前記命令フェッチ部は、命令バッファと分岐予測部を有し、
    前記命令バッファ部は外部からフェッチされた命令を蓄積するメモリ部と前記メモリ部を制御するバッファ制御部とを有し、
    前記バッファ制御部は、フェッチした条件分岐命令の実行履歴が条件成立を示唆するとき、フェッチした条件分岐命令の分岐方向が命令実行順とは逆方向であって、前記条件分岐命令による分岐元から分岐先までの命令アドレスの差分がメモリ部の記憶容量に納まる範囲であるとき、前記条件分岐命令による分岐元から分岐先までの命令列をメモリ部に保持し、保持した命令列の命令実行が繰り返される間は当該命令列の命令をメモリ部から命令デコーダに供給し、当該命令列の命令実行から抜けるとき当該命令列の保持を解除する、データプロセッサ。
  2. 前記バッファ制御部は、前記メモリ部に対するFIFO形態のリードポインタ及びライトポインタの制御を行うとともに、メモリ部に保持する前記命令列をロックスタートポインタ及びロックエンドポインタで特定し、保持した命令列の命令実行が繰り返される間はロックスタートポインタ及びロックエンドポインタが指定される範囲でリードポインタを変化させる、請求項1記載のデータプロセッサ。
  3. 前記バッファ制御部は、前記条件分岐命令の命令アドレスと、当該条件分岐命令及びそれによる分岐先命令を夫々保有するメモリ部のバッファ内アドレスとを登録する分岐管理テーブルを用いてポインタ制御を行う、請求項2記載のデータプロセッサ。
  4. 前記バッファ制御部は、メモリ部にフェッチした命令に条件分岐命令が含まれるとき、当該条件分岐命令の命令列に関する情報を前記分岐管理テーブルに登録する、請求項3記載のデータプロセッサ。
  5. 前記条件分岐命令はPC相対条件分岐命令である、請求項1乃至4の何れか1項記載のデータプロセッサ。
  6. 前記命令フェッチ部は条件分岐命令の実行履歴に基づいて分岐予測を行う分岐予測部を有し、
    前記分岐予測部は前記条件分岐命令の命令アドレスに基づいて分岐予測を行なってその予測結果を出力し、
    前記バッファ制御部は、前記予測結果に基づいて条件分岐命令の条件成立が示唆されているか否かを判別する、請求項1乃至5の何れか1項記載のデータプロセッサ。
  7. 前記バッファ制御部は、分岐方向が命令アドレス配置に対して逆方向で前記条件分岐命令による分岐元から分岐先までの命令列の繰り返し実行回数を計数する分岐履歴カウンタを有し、前記分岐履歴カウンタの計数値が所定値を超えることによってショートループの形成が示唆されていると判別する、請求項1乃至5の何れか1項記載のデータプロセッサ。
  8. 前記バッファ制御部は、前記条件分岐命令による分岐元から分岐先までの命令列によって形成されるループの多重数を示す分岐カウンタを有し、単一ループのときは当該単一ループの分岐先と分岐元アドレスに対応して前記ロックスタートポインタとロックエンドポインタの値を決定し、多重ループのときは最も大きなループの分岐先と分岐元アドレスに対応して前記ロックスタートポインタとロックエンドポインタの値を決定する、請求項2記載のデータプロセッサ。
  9. 前記バッファ制御部は、メモリ部上における分岐元に対するリードポインタのアドレス差である第1データ、メモリ部上におけるリードポインタに対する分岐先のアドレス差である第2データ、前記第1データと第2データとの和である第3データをループ毎に取得し、第1データ及び第2データが夫々正の整数値であることによってリードポインタが自ループ内であるかを判別し、前記ループ毎における第1データの大小に基づいて多重ループの分岐元の包含関係を判別し、前記ループ毎における第2データの大小に基づいて多重ループの分岐先の包含関係を判別し、ループ毎の第3データの大小に基づいて多重ループにおけるループの大小関係を判別する、請求項8記載のデータプロセッサ。
  10. 命令キャッシュメモリを更に有し、
    前記命令フェッチ部は前記命令キャッシュメモリから必要な命令をフェッチする、請求項1記載のデータプロセッサ。
  11. 請求項10記載のデータプロセッサと、前記データプロセッサに接続された外部メモリとを有し、
    前記命令キャッシュメモリは前記外部メモリが保有する命令の一部を保有して連想メモリ動作を行なう、データ処理システム。
JP2008231147A 2008-09-09 2008-09-09 データプロセッサ及びデータ処理システム Pending JP2010066892A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008231147A JP2010066892A (ja) 2008-09-09 2008-09-09 データプロセッサ及びデータ処理システム
US12/546,672 US20100064106A1 (en) 2008-09-09 2009-08-24 Data processor and data processing system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008231147A JP2010066892A (ja) 2008-09-09 2008-09-09 データプロセッサ及びデータ処理システム

Publications (1)

Publication Number Publication Date
JP2010066892A true JP2010066892A (ja) 2010-03-25

Family

ID=41800155

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008231147A Pending JP2010066892A (ja) 2008-09-09 2008-09-09 データプロセッサ及びデータ処理システム

Country Status (2)

Country Link
US (1) US20100064106A1 (ja)
JP (1) JP2010066892A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011161884A1 (ja) * 2010-06-25 2011-12-29 パナソニック株式会社 集積回路、コンピュータシステム、制御方法
JP2012221086A (ja) * 2011-04-06 2012-11-12 Fujitsu Semiconductor Ltd 情報処理装置
JP2013097638A (ja) * 2011-11-02 2013-05-20 Renesas Electronics Corp キャッシュメモリ装置、キャッシュ制御方法、およびマイクロプロセッサシステム
JP2014013565A (ja) * 2012-06-15 2014-01-23 Apple Inc ループバッファ学習
US9471322B2 (en) 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold
US9753733B2 (en) 2012-06-15 2017-09-05 Apple Inc. Methods, apparatus, and processors for packing multiple iterations of loop in a loop buffer

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120079303A1 (en) * 2010-09-24 2012-03-29 Madduri Venkateswara R Method and apparatus for reducing power consumption in a processor by powering down an instruction fetch unit
US20140215185A1 (en) * 2013-01-29 2014-07-31 Atmel Norway Fetching instructions of a loop routine
US11461102B2 (en) * 2021-02-12 2022-10-04 Arm Limited Circuitry and method
CN115017192A (zh) * 2022-05-23 2022-09-06 广东人工智能与先进计算研究院 电压序列数据缓存方法及系统

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5890244A (ja) * 1981-11-24 1983-05-28 Hitachi Ltd デ−タ処理装置
JPH01205228A (ja) * 1988-02-10 1989-08-17 Hitachi Ltd 命令バツフアシステム
JPH0228723A (ja) * 1988-07-18 1990-01-30 Fujitsu Ltd ループ命令実行方式
JPH0256636A (ja) * 1988-08-23 1990-02-26 Toshiba Corp 分岐制御装置
JPH08286913A (ja) * 1995-04-05 1996-11-01 Internatl Business Mach Corp <Ibm> パイプライン・プロセッサにおいて次に完了すべき命令のアドレスを生成する方法および装置
JPH10232830A (ja) * 1996-11-14 1998-09-02 Motorola Inc 分散型タグ・キャッシュメモリシステムおよびそこにデータを格納する方法
JP2000330787A (ja) * 1999-05-03 2000-11-30 Stmicroelectronics Sa 命令ループを実行するコンピュータシステムおよび命令ループ実行方法
JP2006072926A (ja) * 2004-09-06 2006-03-16 Fujitsu Ltd メモリ制御回路およびマイクロプロセッサシステム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623615A (en) * 1994-08-04 1997-04-22 International Business Machines Corporation Circuit and method for reducing prefetch cycles on microprocessors
US6505295B1 (en) * 1997-02-17 2003-01-07 Hitachi, Ltd. Data processor
US20090217017A1 (en) * 2008-02-26 2009-08-27 International Business Machines Corporation Method, system and computer program product for minimizing branch prediction latency

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5890244A (ja) * 1981-11-24 1983-05-28 Hitachi Ltd デ−タ処理装置
JPH01205228A (ja) * 1988-02-10 1989-08-17 Hitachi Ltd 命令バツフアシステム
JPH0228723A (ja) * 1988-07-18 1990-01-30 Fujitsu Ltd ループ命令実行方式
JPH0256636A (ja) * 1988-08-23 1990-02-26 Toshiba Corp 分岐制御装置
JPH08286913A (ja) * 1995-04-05 1996-11-01 Internatl Business Mach Corp <Ibm> パイプライン・プロセッサにおいて次に完了すべき命令のアドレスを生成する方法および装置
JPH10232830A (ja) * 1996-11-14 1998-09-02 Motorola Inc 分散型タグ・キャッシュメモリシステムおよびそこにデータを格納する方法
JP2000330787A (ja) * 1999-05-03 2000-11-30 Stmicroelectronics Sa 命令ループを実行するコンピュータシステムおよび命令ループ実行方法
JP2006072926A (ja) * 2004-09-06 2006-03-16 Fujitsu Ltd メモリ制御回路およびマイクロプロセッサシステム

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011161884A1 (ja) * 2010-06-25 2011-12-29 パナソニック株式会社 集積回路、コンピュータシステム、制御方法
US8918664B2 (en) 2010-06-25 2014-12-23 Panasonic Corporation Integrated circuit, computer system, and control method, including power saving control to reduce power consumed by execution of a loop
JP5853216B2 (ja) * 2010-06-25 2016-02-09 パナソニックIpマネジメント株式会社 集積回路、コンピュータシステム、制御方法
JP2012221086A (ja) * 2011-04-06 2012-11-12 Fujitsu Semiconductor Ltd 情報処理装置
JP2013097638A (ja) * 2011-11-02 2013-05-20 Renesas Electronics Corp キャッシュメモリ装置、キャッシュ制御方法、およびマイクロプロセッサシステム
JP2014013565A (ja) * 2012-06-15 2014-01-23 Apple Inc ループバッファ学習
US9557999B2 (en) 2012-06-15 2017-01-31 Apple Inc. Loop buffer learning
US9753733B2 (en) 2012-06-15 2017-09-05 Apple Inc. Methods, apparatus, and processors for packing multiple iterations of loop in a loop buffer
US9471322B2 (en) 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold

Also Published As

Publication number Publication date
US20100064106A1 (en) 2010-03-11

Similar Documents

Publication Publication Date Title
JP2010066892A (ja) データプロセッサ及びデータ処理システム
US5404552A (en) Pipeline risc processing unit with improved efficiency when handling data dependency
US6205543B1 (en) Efficient handling of a large register file for context switching
JP3881763B2 (ja) データ処理装置
JP5543366B2 (ja) ロックされたオペレーションを実行するためのシステムおよび方法
JP5666473B2 (ja) マルチスレッド式データ処理システム
JP2009053861A (ja) プログラム実行制御装置
WO2009114289A1 (en) System and method of selectively committing a result of an executed instruction
US20040186960A1 (en) Computer processor data prefetch unit
US6735687B1 (en) Multithreaded microprocessor with asymmetrical central processing units
EP1974254B1 (en) Early conditional selection of an operand
US20210326136A1 (en) Entering protected pipeline mode with clearing
JP2009524167A5 (ja)
US7730288B2 (en) Method and apparatus for multiple load instruction execution
US6983359B2 (en) Processor and method for pre-fetching out-of-order instructions
JP2004145454A (ja) 情報処理装置及び情報処理方法
JP4393317B2 (ja) メモリ制御回路
US20080141252A1 (en) Cascaded Delayed Execution Pipeline
US20070294519A1 (en) Localized Control Caching Resulting In Power Efficient Control Logic
US20080065870A1 (en) Information processing apparatus
US5737562A (en) CPU pipeline having queuing stage to facilitate branch instructions
JP2004192021A (ja) マイクロプロセッサ
JP2010061642A (ja) スレッドのスケジューリングテクニック
US7389405B2 (en) Digital signal processor architecture with optimized memory access for code discontinuity
CN112395000B (zh) 一种数据预加载方法和指令处理装置

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20100527

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110902

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130430

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130516

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20130912