JP2014056359A - マイクロコンピュータ及び命令処理方法 - Google Patents
マイクロコンピュータ及び命令処理方法 Download PDFInfo
- Publication number
- JP2014056359A JP2014056359A JP2012199989A JP2012199989A JP2014056359A JP 2014056359 A JP2014056359 A JP 2014056359A JP 2012199989 A JP2012199989 A JP 2012199989A JP 2012199989 A JP2012199989 A JP 2012199989A JP 2014056359 A JP2014056359 A JP 2014056359A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- branch
- queue
- address
- stored
- 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
Links
Images
Landscapes
- Advance Control (AREA)
Abstract
【課題】マイクロコンピュータの回路規模の増大を抑制しながら処理時間を短縮する。
【解決手段】命令メモリ202からフェッチした命令コードを保持する命令キュー102と、パイプラインハザード発生期間において、命令キュー内に分岐命令が有るか否かを検索するキュー制御回路106を備える。マイクロコンピュータは、キュー制御回路によって検索された分岐命令に応じた分岐先命令のアドレスをフェッチアドレスとして命令メモリに指定し、パイプラインハザード期間終了時に実行する。
【選択図】図4
【解決手段】命令メモリ202からフェッチした命令コードを保持する命令キュー102と、パイプラインハザード発生期間において、命令キュー内に分岐命令が有るか否かを検索するキュー制御回路106を備える。マイクロコンピュータは、キュー制御回路によって検索された分岐命令に応じた分岐先命令のアドレスをフェッチアドレスとして命令メモリに指定し、パイプラインハザード期間終了時に実行する。
【選択図】図4
Description
本発明は、マイクロコンピュータ及び命令処理方法に関し、特にメモリから命令コードをフェッチして命令を実行するマイクロコンピュータ及び命令処理方法に関する。
近年、自動車電装やモバイル機器などを代表とする電子機器は、多機能化と高性能化を市場から求められている。このため、これらの電子機器を制御するマイクロコンピュータに対しても高性能化が求められている。一方、必要な性能に対して低コスト要求があるため、特に低価格帯のマイクロコンピュータに対しては、高性能と低コストの両立が求められている。
マイクロコンピュータの性能を低下させる要因の1つとして、分岐命令実行によって発生する分岐ペナルティによる性能低下があげられる。パイプライン処理により命令フェッチ、命令デコード及び実行を行うマイクロコンピュータでは、分岐命令の実行を終了した後に、分岐先命令のフェッチを開始しなければならない。このため、パイプラインに空きスロットが発生するハザード状態が発生して処理性能を低下させることがある。これを分岐ペナルティと言う。一般的にマイクロコンピュータが処理する命令のうち、約20%が分岐命令である。従って、マイクロコンピュータの処理を高速化するには、この分岐ペナルティを回避し分岐命令を高速処理することが必要である。
この分岐ペナルティを回避する方法として、分岐命令の履歴に基づいて分岐先を予測し先行して命令フェッチを行う「分岐予測方法」が一般的に知られている。分岐予測方法では、過去の分岐命令が実行されたアドレスや、分岐先アドレス、分岐を行ったか否かの履歴に応じて分岐予測が行われる。このため、分岐予測方法を利用したマイクロコンピュータでは、アドレスや履歴を保持する回路が必要となり、更に履歴による制御回路が必要となることで回路規模や設計の複雑性が増加してしまう。
従って、性能向上とコスト削減の両立を求められるマイクロコンピュータにおいては、必要最小限の回路で最大限の性能向上を達成する技術が求められている。
パイプライン処理を行うマイクロコンピュータにおける分岐命令処理の高速化を目的とした技術が、例えば特開平8−314720に示されている(特許文献1参照)。
図1は、特許文献1に記載のマイクロコンピュータの分岐制御システム構成図である。特許文献1に記載のマイクロコンピュータは、先取り命令格納用バッファ1、命令デコーダ2、分岐命令検出回路3、先行分岐制御回路4、第1、第2のアドレス計算器5、6、及びアドレスセレクタ7を備える。先取り命令格納用バッファ1は、実行中の命令(0)の次の命令(1)及び次の命令(2)を格納する。命令デコーダ2は、命令(0)の実行と各々並行して、命令(1)を解読する。第1、第2のアドレス計算器5、6は、命令(1)、(2)のアドレス計算を専用に行う。分岐命令検出回路3は、命令(1)、(2)が分岐可能な分岐命令であることを個別に検出する。アドレスセレクタ7は、分岐命令検出回路3の検出結果に基づき第1、第2のアドレス計算器5、6からのアドレス計算結果を選択する。先行分岐制御回路4は、選択されたアドレスに基づき命令(1)、(2)の分岐を起動する。
分岐命令検出回路3が命令(1)を分岐命令として検出した場合、先行分岐制御回路4は、先取り命令アドレス計算器5からのアドレス計算結果を命令(1)の分岐先アドレスとして、この命令(1)の終了を待たずに、命令(1)による分岐起動をかける。先取りされた分岐命令(1)のアドレス計算は、専用のアドレス計算回路(第1のアドレス計算器5)により行われる。このことにより、実行中の命令(0)が、ロード命令やストア命令等、オペランドアドレス計算を必要とする命令であっても、先の命令(0)の実行中に先取りした分岐命令(1)のアドレス計算結果は有効となる。そして、命令(0)の終了を待たずに、このアドレス計算結果(分岐先アドレス)に基づいて分岐され、命令(1)が無効化される。
又、特許文献1に記載のマイクロコンピュータでは、実行中の命令(0)の次の命令(1)と共に、さらに次の命令(2)も先取りして、それぞれ個別に、並行したアドレス計算と上述の分岐命令の判定、及び、分岐命令の起動が行われる。その結果、命令(2)が分岐可能な分岐命令の場合、例えば、命令(0)及び命令(1)が分岐命令でなく、かつ、分岐命令(2)のアドレス計算に用いるベースレジスタの値が確定している(命令(0)、及び、命令(1)で、このベースレジスタを書き換えない)場合には、分岐命令(2)の取り出しに続いて(分岐ハザード無しで)、分岐先命令の取り出しを行う事ができ、分岐命令処理を高速化することができる。
又、複数命令同時発行(スーパースカラ)システムにおける複数命令同時取り込み機構を高速化する技術が、例えば、特開平7−121371に記載されている(特許文献2参照)。
図2は、特許文献2に記載の複数命令同時取り込み機構の構成図である。特許文献2に記載の複数命令同時取り込み機構は、第1及び第2のプリフェッチバッファ11、12、及びマルチプレクサ13を備える。第1のプリフェッチバッファ11は、1対の分岐先命令の一方の分岐先命令(taken)を格納し、第2のプリフェッチバッファ12は、他方の分岐先命令(not taken)を格納する。マルチプレクサ13は、2つのプリフェッチバッファ11、12から出力される一対の分岐先命令、又は命令キャッシュからフェッチされた命令のいずれかを選択して命令選択部14に出力する。第1及び第2のプリフェッチバッファ11、12は、分岐命令によるパイプライン停止時間を利用して両方の分岐先命令を予め取り込んでおく。これにより、分岐命令の結果が決まる時には、分岐先命令のデコードから開始することができ、分岐先命令の実行が早まる。
更に、分岐命令による遅延を防止する技術が例えば特開平8―339299(特許文献3参照)、特開平11−73317(特許文献4参照)、特開平9−282163(特許文献5参照)に記載されている。
特許文献3には、制御の流れを変更(分岐)するまでに予告分岐命令の後に続いて実行されるべき少なくとも1つの命令の数を定義する予告分岐命令に基づいて実行することで分岐命令による遅延を生じさせない技術が記載されている。特許文献3に記載の技術では、分岐先のアドレスと分岐するまでに実行する命令数をもつ命令によって、予め分岐先の命令をフェッチしている。又、指定された命令数実行後にあらかじめフェッチされた分岐先命令が実行される。
特許文献4には、条件分岐の制御を行うプログラム制御方法が記載されている。特許文献4には、条件分岐命令の条件が確定するまでの期間に分岐先命令を先行的にパイプラインに投入することで条件分岐命令による遅延を生じさせない技術が記載されている。分岐条件が確定する期間に分岐先命令をフェッチすることで遅延を生じさせないが、分岐条件確定期間がない無条件分岐には適用できない。このため、無条件分岐時の分岐ペナルティを削減することができない。
特許文献5には、インストラクションフェッチステージでフェッチした分岐命令から分岐先アドレスを取り出し、分岐不成立の場合と分岐成立の場合との両方の制御フローに対応する命令コードを、次のクロックのインストラクションステージでフェッチするダブルインストラクションフェッチ技術が記載されている。ここでは、分岐不成立時、分岐成立時両方に対応する命令コードを同時にフェッチしているため、両方の命令を制御する回路が必要となり極小コストを目的としていない。
特許文献1に記載のマイクロコンピュータでは、分岐命令検出回路3と第1のアドレス計算器5が分岐命令のために専用に持つ必要があり、その回路規模は大きくなってしまう。
特許文献2に記載の複数命令同時取り込み機構では、複数個命令を同時にデコードする複数個のデコーダと、複数の命令が同時実行可能化どうかを決定するスケジュール機構を専用に持つ必要があり、その回路規模は大きくなってしまう。
このように、特許文献1、2の技術を利用した場合、分岐ペナルティを回避するためにチップ面積が増大してしまうため、チップ面積の増大を抑制しながら分岐ペナルティを回避できるマイクロコンピュータが望まれている。
本発明によるマイクロコンピュータは、パイプラインハザード発生期間において、命令キュー内に分岐命令が有るか否かを検索するキュー制御回路を備える。マイクロコンピュータは、キュー制御回路によって検索された分岐命令による分岐先命令を先行フェッチし、パイプラインハザード期間終了後、分岐命令が実行されると先行フェッチ命令を実行する。
本発明によれば、マイクロコンピュータの回路規模の増大を抑制しながら処理時間を短縮することができる。
又、マイクロコンピュータの回路規模の増大を抑制しながら分岐ペナルティを回避することができる。
以下、添付図面を参照しながら本発明の実施の形態を説明する。図面において同一、又は類似の参照符号は、同一、類似、又は等価な構成要素を示している。
(構成)
図3は、実施の形態によるマイクロコンピュータ200の構成の一例を示す図である。図3を参照して、本実施の形態におけるマイクロコンピュータ200は、CPU201(演算装置)、命令メモリ202、周辺IO209、データメモリ211を具備する。命令メモリ202は、CPU201が実行する命令コードを格納するメモリである。CPU201は、命令メモリ202内に格納された命令コードを読み出して実行し、実行結果に基づいて周辺IO209(例示:タイマユニット、シリアル転送ユニット)や、データメモリ211(例示、RAM)に対してリードアクセス又はライトアクセスを行う。
図3は、実施の形態によるマイクロコンピュータ200の構成の一例を示す図である。図3を参照して、本実施の形態におけるマイクロコンピュータ200は、CPU201(演算装置)、命令メモリ202、周辺IO209、データメモリ211を具備する。命令メモリ202は、CPU201が実行する命令コードを格納するメモリである。CPU201は、命令メモリ202内に格納された命令コードを読み出して実行し、実行結果に基づいて周辺IO209(例示:タイマユニット、シリアル転送ユニット)や、データメモリ211(例示、RAM)に対してリードアクセス又はライトアクセスを行う。
CPU201は、命令フェッチ制御回路203、命令デコーダ204、演算実行回路205、パイプライン制御回路206、メモリアクセス制御回路207、実行結果格納回路208、命令実行制御回路210を備える。命令フェッチ制御回路203は、命令メモリ202から命令コードのフェッチの制御を行う。命令デコーダ204は、フェッチされた命令コードをデコードし、デコード結果を命令実行制御回路210に出力する。命令実行制御回路210は、デコード結果に応じた制御信号を出力し、演算実行回路205における命令実行や、メモリアクセス制御回路207におけるアクセス制御を制御する。演算実行回路205は、命令実行制御回路210からの制御信号に応じた演算を実行する。メモリアクセス制御回路207は、命令実行制御回路210からの制御信号に基づいてアクセス先及びアクセス方法を決定し、周辺IO209やデータメモリ211に対するアクセスを制御する。この際、リードアクセスの場合、メモリアクセス制御回路207は、周辺IO209やデータメモリ211からデータを読み出し、実行結果格納回路208に格納する。あるいは、ライトアクセスの場合、実行結果格納回路208に格納されたデータ(演算結果)を周辺IO209に出力、又はデータメモリ211に格納する。実行結果格納回路208は、演算実行回路205の演算結果、又は、周辺IO209やデータメモリ211から読み出したデータを格納する。パイプライン制御回路206は、命令フェッチ制御回路203、命令デコーダ204、演算実行回路205、メモリアクセス制御回路207、実行結果格納回路208の状態に応じてCPU201全体の動作を制御する。
図4は、本発明によるマイクロコンピュータ200における命令フェッチ制御回路203の詳細構成の一例を示す図である。命令フェッチ制御回路203は、命令キュー102、QVフラグレジスタ103、DFフラグレジスタ104、BFフラグレジスタ105、キュー制御回路106、分岐アドレス生成回路109、フェッチポインタ111、インクリメンタ112、セレクタ110、113を備える。分岐アドレス生成回路109、フェッチポインタ111、インクリメンタ112、セレクタ110、113は、フェッチアドレス130を命令メモリ202に指定するフェッチアドレス設定回路を構成する。
命令キュー102は、通常動作時において先入先出し方式により命令メモリ202からの命令コード114を格納するレジスタで、ここでは一例として5段のレジスタ(Que[4:0])で構成される。命令キュー102では、命令メモリ202からの命令コード114がQue[4]に格納され(エンキュー)、命令が処理される毎にQUE[4]→QUE[3]→QUE[2]→QUE[1]→QUE[0]へシフトする。Que[4:0]に格納された命令コードは、命令キュー出力信号115としてキュー制御回路106に出力される(デキュー)。
QVフラグレジスタ103は、命令キュー102の各段(各レジスタ)に有効な(使用可能な)命令コードが格納されているか否かを示すフラグ情報を格納する。ここでは、QVフラグレジスタ103は、命令キュー102における5段のレジスタ(Que[4:0])に対応する5段のフラグレジスタ(QV[4:0])で構成される。例えば、QV[4]にフラグ情報として“1”が格納されている場合、Que[4]に有効な命令コードが格納されていることを示し、QV[4]にフラグ情報として“0”が格納されている場合、Que[4]に有効な命令コードが格納されていないことを示す。QVフラグレジスタ103では、キュー制御回路106からのQVフラグレジスタ制御信号117に応じた値のフラグ情報が格納される。又、QV[4:0]に格納された命令コードは、QVフラグレジスタ出力信号116としてキュー制御回路106に出力される。
DFフラグレジスタ104は、命令キュー102の各段(各レジスタ)に対して分岐命令調査が行われたか否かを示すフラグ情報を格納する。ここでは、DFフラグレジスタ104は、命令キュー102における5段のレジスタ(Que[4:0])に対応する5段のフラグレジスタ(DF[4:0])で構成される。例えば、DF[4]にフラグ情報として“1”が格納されている場合、Que[4]に分岐命令が格納されているか否かの調査(分岐命令調査)が行われたことを示し、DF[4]にフラグ情報として“0”が格納されている場合、Que[4]に対して分岐命令調査が行われていないことを示す。DFフラグレジスタ104では、キュー制御回路106からのDFフラグレジスタ制御信号119に応じた値のフラグ情報が格納される。又、DF[4:0]に格納された命令コードは、DFフラグレジスタ出力信号118としてキュー制御回路106に出力される。
BFフラグレジスタ105は、命令キュー102の各段(各レジスタ)に命令コードとして分岐先命令が格納されているか否かを示すフラグ情報を格納する。ここでは、BFフラグレジスタ105は、命令キュー102における5段のレジスタ(Que[4:0])に対応する5段のフラグレジスタ(BF[4:0])で構成される。例えば、BF[4]にフラグ情報として“1”が格納されている場合、Que[4]に分岐先命令が格納されていることを示し、BF[4]にフラグ情報として“0”が格納されている場合、Que[4]に分岐先命令が格納されていないことを示す。BFフラグレジスタ105では、キュー制御回路106からのBFフラグレジスタ制御信号121に応じた値のフラグ情報が格納される。又、BF[4:0]に格納された命令コードは、BFフラグレジスタ出力信号120としてキュー制御回路106に出力される。
キュー制御回路106には、命令キュー出力信号115、QVフラグレジスタ出力信号116、DFフラグレジスタ出力信号118、BFフラグレジスタ出力信号120、ハザード信号123、分岐命令検出信号124、及び分岐確定信号125が入力される。ここで、ハザード信号123は、パイプラインハザードの発生有無を示し、パイプライン制御回路206から出力される。分岐命令検出信号124は、デコードされた命令コードが分岐命令か否かを示し、命令デコーダ204から出力される。分岐確定信号125は、分岐命令が実行されたか否かを示し、パイプライン制御回路206から出力される。
キュー制御回路106は、命令キュー出力信号115から選択した命令コードを選択後命令キュー出力信号122として命令デコーダ204及び分岐アドレス生成回路109に出力する。この際、QVフラグレジスタ出力信号116、DFフラグレジスタ出力信号118に応じて選択されたレジスタ内の命令コードが選択後命令キュー出力信号122として出力される。
又、キュー制御回路106は、QVフラグレジスタ103、DFフラグレジスタ104、BFフラグレジスタ105のそれぞれのレジスタにフラグ情報を設定するためのQVフラグレジスタ制御信号117、DFフラグレジスタ制御信号119、BFフラグレジスタ制御信号121を出力する。更に、キュー制御回路106は、命令キュー102内における分岐先命令の有無を示す分岐先命令検出信号133を出力する。
命令デコーダ204は、キュー制御回路106から入力される選択後命令キュー出力信号122をデコードし、命令実行要求信号131として命令実行制御回路210に出力する。この際、命令デコーダ204は、デコードした選択後命令キュー出力信号122(命令コード)が分岐命令か否かを判定し、判定結果を示す分岐命令検出信号124をキュー制御回路106、分岐アドレス生成回路109、セレクタ113に出力する。
命令実行制御回路210は、命令実行要求信号131とハザード信号123に応じた命令実行信号132を出力し、演算実行回路205における命令実行や、メモリアクセス制御回路207におけるアクセス制御を制御する。
分岐アドレス生成回路109には、選択後命令キュー出力信号122、分岐命令検出信号124、分岐先命令検出信号133が入力される。分岐アドレス生成回路109は、選択後命令キュー出力信号122に基づいて分岐アドレスを生成し、分岐アドレス信号126としてセレクタ110、113に出力する。
セレクタ110は、分岐アドレス信号126と、インクリメンタ112から出力される更新アドレス信号127の一方を、分岐確定信号125に応じて選択し、更新フェッチアドレス128としてフェッチポインタ111に出力する。詳細には、セレクタ110は、ハイレベル“1”の分岐確定信号125に応じて分岐アドレス信号126を更新フェッチアドレス128として選択し、ローレベル“0”の分岐確定信号125に応じて更新アドレス信号127を更新フェッチアドレス128として選択する。
フェッチポインタ111は、セレクタ110から出力される更新フェッチアドレス128を保持するレジスタである。保持された更新フェッチアドレス128は、インクリメンタ112及びセレクタ113にフェッチポインタ信号129として出力される。又、フェッチポインタ111は、ハイレベル“1”のハザード信号123が入力されている間、更新フェッチアドレス128の取り込みを停止し、レジスタ内のデータ(フェッチポインタ信号129の値)を保持する。これにより、パイプラインハザードが発生している間、フェッチポインタ信号129の値は固定される。
インクリメンタ112は、フェッチポインタ信号129を随時インクリメントし、更新アドレス信号127としてセレクタ110に出力する。
セレクタ113は、分岐命令検出信号124、ハザード信号123及び分岐確定信号125に応じて、分岐アドレス信号126とフェッチポインタ信号129の一方を選択して、フェッチアドレス130として命令メモリ202に出力する。詳細には、セレクタ113は、ハイレベル“1”のハザード信号123が入力されている間、ハイレベル“1”の分岐命令検出信号124に応じて分岐アドレス信号126を選択し、ローレベル“0”の分岐命令検出信号124に応じてフェッチポインタ信号129を選択する。すなわち、セレクタ113は、パイプラインハザードが発生している間、デコードされた命令コードが分岐命令のとき分岐アドレス信号126をフェッチアドレス130として選択し、分岐命令以外のときフェッチポインタ信号129をフェッチアドレス130として選択する。一方、ローレベル“0”のハザード信号123が入力されている間、セレクタ113は、ハイレベル“1”の分岐確定信号125に応じて分岐アドレス信号126を選択し、ローレベル“0”の分岐確定信号125に応じてフェッチポインタ信号129を選択する。すなわち、セレクタ113は、パイプラインハザードが発生していない場合、実行された命令により分岐が確定したとき分岐アドレス信号126をフェッチアドレス130として選択し、分岐が確定しない間、フェッチポインタ信号129をフェッチアドレス130として選択する。
図5は、キュー制御回路106の構成の詳細の一例を示す図である。図5を参照して、キュー制御回路106は、セレクタ61、キュー選択回路62、キュークリア判定回路63、分岐先命令格納判定回路64、分岐先命令検出回路65を備える。セレクタ61は、命令キュー102の各段(各レジスタ)のうち、キュー選択回路62から出力されるキュー選択制御信号140によって指定されたレジスタ内の命令コードを選択して選択後命令キュー出力信号122として出力する。ここでは命令キュー102におけるQue[4:0]のうちキュー選択制御信号140によって指定されたQue内の命令コードが、選択後命令キュー出力信号122として出力される。
キュー選択回路62は、ハザード信号123、QVフラグレジスタ出力信号116及びDFフラグレジスタ出力信号118に応じたキュー選択制御信号140をセレクタ61に出力し、セレクタ61における命令コード選択動作を制御する。又、キュー選択回路62は、ハザード信号123に応じたDFフラグレジスタ制御信号119をDFフラグレジスタ104に出力し、DFフラグレジスタ104へのフラグ情報の格納を制御する。
ここで、キュー選択回路62は、ハザード信号123によってハザード発生期間か否かを確認する。又、キュー選択回路62は、QVフラグレジスタ出力信号116によって命令キュー102の各段(各レジスタ)に有効な命令コードが格納されているか否かを確認する。更に、キュー選択回路62は、DFフラグレジスタ出力信号118によって命令キュー102の各段(各レジスタ)が分岐命令調査済みか否かを確認する。
キュー選択回路62は、ローレベル“0”のハザード信号123に応じて命令キュー102の最下位のレジスタ(ここではQue[0])をセレクタ61に選択させる。これにより、ハザードが発生していない期間、セレクタ61は、命令キュー102の最下位のレジスタ(ここではQue[0])の命令コードを選択後命令キュー出力信号122として出力する。又、キュー選択回路62は、ハザードが未検出の次サイクルにおいて、DFフラグレジスタ104内のフラグ情報をシフトさせるとともに、DFフラグレジスタ104の最上位のレジスタ(ここではDF[4])に“0”を格納する。
一方、キュー選択回路62は、ハイレベル“1”のハザード信号123に応じて、有効な命令コードが格納され、分岐命令調査が未実施のレジスタのうち、最下位側のレジスタ(ここではQue[0]又はQue[0]に最も近いレジスタ)をセレクタ61に選択させる。これにより、パイプラインハザードの発生期間中、セレクタ61は、分岐命令調査が未実施のレジスタにおいて最下位側のレジスタ(ここではQue[0]又はQue[0]に最も近いレジスタ)の命令コードを、選択後命令キュー出力信号122として出力する。又、キュー選択回路62は、パイプラインハザードの発生を確認した時の次サイクルにおいて、DFフラグレジスタ104のシフト動作を停止するとともに、ハザードの発生を確認したときに選択した命令キュー102のレジスタ(Que)に対応するDFフラグレジスタ(DF)に、分岐命令調査済みを示すフラグ情報“1”を格納する。
キュークリア判定回路63は、分岐確定信号125、QVフラグレジスタ出力信号116及びBFフラグレジスタ出力信号120に応じたQVフラグレジスタ制御信号117をQVフラグレジスタ103に出力し、QVフラグレジスタ103へのフラグ情報の格納を制御する。キュークリア判定回路63は、分岐確定信号125によって分岐命令が実行されたか否かを確認する。又、キュークリア判定回路63は、QVフラグレジスタ出力信号116によって命令キュー102の各段(各レジスタ)に有効な命令コードが格納されているか否かを確認する。更に、キュークリア判定回路63は、BFフラグレジスタ出力信号120によって命令キュー102の各段(各レジスタ)に分岐先命令が格納されているか否かを確認する。
キュークリア判定回路63は、分岐命令が実行され、BFフラグレジスタ105の全てのレジスタ(BF[4:0])に“0”が格納されているとき、すなわち、分岐が確定し命令キュー102に分岐先命令が格納されていないとき、次のクロックサイクルにおいてQVフラグレジスタ103内の全てのフラグ情報をリセットする。
一方、キュークリア判定回路63は、分岐命令が実行され、BFフラグレジスタ105のレジスタ(BF[4:0])のいずれかに“1”が格納されているとき、すなわち、分岐が確定し命令キュー102に分岐先命令が格納されているとき、次のクロックサイクルにおいてQVフラグレジスタ103の最下位のレジスタ(QV[0])に“1”を格納し、他のレジスタ(QV[4:1])に“0”を格納する。
分岐先命令格納判定回路64は、ハザード信号123、分岐命令検出信号124、分岐確定信号125に応じたBFフラグレジスタ制御信号121を、BFフラグレジスタ105に出力し、BFフラグレジスタ105へのフラグ情報の格納を制御する。分岐先命令格納判定回路64は、ハザード信号123によってハザード発生期間か否かを確認する。又、分岐先命令格納判定回路64は、分岐命令検出信号124によって、デコードされた命令コードが分岐命令か否かを確認する。更に、分岐先命令格納判定回路64は、分岐確定信号125によって、分岐命令が実行されたか否かを確認する。
分岐先命令格納判定回路64は、パイプラインハザード発生期間中において、デコードデータが分岐命令であることを検出すると、当該検出から所定のサイクル後(例えば2サイクル後)にBFフラグレジスタ105内のフラグ情報をシフトさせるとともにBFフラグレジスタ105の最上位のレジスタ(ここではBF[4])に“1”を格納する。
一方、分岐先命令格納判定回路64は、ハザード発生の未検出期間中において、デコードデータが分岐命令であることを検出すると、当該検出から所定のサイクル後(例えば1サイクル後)にBFフラグレジスタ105内の全てのフラグ情報をリセットする。あるいは、分岐先命令格納判定回路64は、ハザード発生の未検出期間中において、デコードデータが分岐命令であることを検出すると、当該検出から所定のサイクル後(例えば2サイクル後)にBFフラグレジスタ105の最下位のレジスタ(ここではBF[0])に“1”を格納し他のレジスタ(ここではBF[4:1])に“0”を格納してもよい。又、分岐先命令格納判定回路64は、ハザード発生の未検出期間中において、デコードデータが分岐命令ではない場合、BFフラグレジスタ105内のフラグ情報をシフトさせるとともに、BFフラグレジスタ105の最上位のレジスタ(ここではBF[4])に“0”を格納する。
尚、分岐命令の検出からBFフラグレジスタ105の更新までの期間は、フェッチアドレスの出力から命令キュー102に命令コードがフェッチされるまでの期間に相当する(例えば2サイクル)。
更に、分岐先命令格納判定回路64は、ハイレベル“1”の分岐確定信号125が入力された次のクロックサイクルにおいて、BFフラグレジスタ105内のフラグ情報をリセットする。この場合、分岐命令の実行(分岐確定)に先行して格納された分岐先命令が命令キュー102のQue[4]からQue[0]のいずれにも格納されていないことを示すこととなる。あるいは、分岐先命令格納判定回路64は、ハイレベル“1”の分岐確定信号125が入力された次のクロックサイクルにおいて、BFフラグレジスタ105の最下位のレジスタ(BF[0])のみに“1”を格納し、他のレジスタ(BF[4:1])に“0”を格納してもよい。この場合、BFフラグレジスタ105のフラグ情報は、Que[0]〜Que[4]のうちQue[0]のみに分岐先命令が格納されていることを示すこととなる。
分岐先命令検出回路65は、QVフラグレジスタ出力信号116、BFフラグレジスタ出力信号120、及び分岐確定信号125に応じた分岐先命令検出信号133を出力し、分岐アドレス生成回路109から出力される分岐命令アドレスを決定する。分岐先命令検出回路65は、QVフラグレジスタ出力信号116によって命令キュー102の各段(各レジスタ)に有効な命令コードが格納されているか否かを確認する。又、分岐先命令検出回路65は、BFフラグレジスタ出力信号120によって命令キュー102の各段(各レジスタ)に分岐先命令が格納されているか否かを確認する。更に、分岐先命令検出回路65は、分岐確定信号125によって、分岐命令が実行されたか否かを確認する。
分岐先命令検出回路65は、命令キュー102に分岐先命令が格納されている間に分岐命令の実行(分岐確定)を確認すると、選択後命令キュー出力信号122から抽出された分岐アドレスを所定の“n”だけインクリメントした値を分岐アドレス信号126として選択出力するように、分岐アドレス生成回路109を制御する。一方、分岐先命令検出回路65は、命令キュー102に分岐先命令が格納されていない間に分岐命令の実行(分岐確定)を確認すると、選択後命令キュー出力信号122から抽出された分岐アドレスを分岐アドレス信号126として選択出力するように、分岐アドレス生成回路109を制御する。すなわち、分岐命令がパイプラインハザード発生期間中に検出された場合、分岐命令の確定に応じて当該分岐命令に係る分岐先命令の次の分岐先命令のアドレスが、分岐アドレス生成回路109から出力される。又、分岐命令がパイプラインハザード発生期間中に検出されない場合、従来と同様に分岐命令の確定に応じて当該分岐命令に係る分岐先命令のアドレスが、分岐アドレス生成回路109から出力される。
図6は、分岐アドレス生成回路109の構成の一例を示す図である。図6を参照して分岐アドレス生成回路109は、分岐アドレス抽出回路91、インクリメンタ92、セレクタ93を備える。分岐アドレス抽出回路91は、選択後命令キュー出力信号122、すなわち、デコード対象となる命令コードから分岐命令のアドレスを抽出する。インクリメンタ92は、分岐アドレス抽出回路91によって抽出された分岐アドレスを所定の値だけインクリメントし、セレクタ93に出力する。例えば、インクリメンタ92は、一の分岐先命令のアドレスと次の分岐先命令のアドレスの差分“n”だけ分岐アドレスをインクリメントする。セレクタ93は、分岐アドレス抽出回路91によって抽出された分岐アドレスと、インクリメンタ92から入力されるアドレスの一方を選択し、分岐アドレス信号126として出力する。この際、セレクタ93は、分岐先命令検出信号133に応じて分岐アドレス信号126として選択するアドレスを決定する。アドレス選択のアルゴリズムは上述の通りである。
(動作)
次に、図7及び図8を参照して、本実施の形態におけるパイプライン処理の動作の詳細を説明する。図7は、本発明によるマイクロコンピュータ200のパイプライン処理動作の一例を示すタイミングチャートである。
次に、図7及び図8を参照して、本実施の形態におけるパイプライン処理の動作の詳細を説明する。図7は、本発明によるマイクロコンピュータ200のパイプライン処理動作の一例を示すタイミングチャートである。
図7を参照して、本実施の形態におけるマイクロコンピュータ200は、基準クロック150に応じて動作する。ここでは、基準クロック150に応じたクロックサイクルT1〜T11の動作を説明する。
状態160は、本実施例において各命令に対するCPU201の状態(ステージ)を示す。ここで、“IF”(IFステージ)は、命令コードがCPU201にインストラクションフェッチされていることを示す。“ID”(IDステージ)は、CPU201において、命令コードのインストラクションデコードが行われていることを示す。“EX”(EXステージ)は、CPU201において、命令(デコードデータ)が実行されていることを示す。“MEM”(MEMステージ)は、CPU201による周辺IO209やデータメモリ211へのアクセス(メモリに対する読み出し、書き込み)を示す。
クロックサイクルT1:
クロックサイクルT1に至るまでに、命令メモリ202から“命令0”〜“命令4”が順次フェッチされ、命令キュー102のQue[0]に“命令0”が、Que[1]に“命令1”が、Que[2]に“命令2”が、Que[3]に“命令3”が、Que[4]に“命令4”が格納される。
クロックサイクルT1に至るまでに、命令メモリ202から“命令0”〜“命令4”が順次フェッチされ、命令キュー102のQue[0]に“命令0”が、Que[1]に“命令1”が、Que[2]に“命令2”が、Que[3]に“命令3”が、Que[4]に“命令4”が格納される。
クロックサイクルT1では、パイプラインハザードが発生していないため、ハザード信号123はローレベル“0”を示す。又、ハザード信号123がローレベル“0”であるため、キュー選択回路62は、命令キュー102の最下位のレジスタ(ここではQue[0])に格納された命令コード“命令0”を、選択後命令キュー出力信号122としてセレクタ61に出力させる。これにより、Que[0]内の“命令0”が命令デコーダ204によってデコードされる。デコードされた“命令0”は分岐命令ではないため、クロックサイクルT1における分岐命令検出信号124はローレベル“0”を示す。このとき、“命令1”は、“命令0”に引き続いてIDステージへ移行する前のIFステージとなる。又、実行中の命令がないため、分岐は確定しておらず分岐確定信号125もローレベル“0”を示す。
セレクタ113は、ローレベル“0”のハザード信号123に基づき、分岐確定の検出に応じて分岐アドレス信号126をフェッチアドレス130として選択する通常動作モードとなる。クロックサイクルT1では、命令が実行されず分岐未確定のため、フェッチアドレス130としてフェッチポインタ信号129(“命令6”のアドレス)が出力される。又、命令メモリ202から、命令コード114として命令5(分岐命令)が出力されている。
サイクルT1の前のサイクルにおいてハザードが未検出であるため(図示なし)、クロックサイクルT1においてキュー選択回路62は、DFフラグレジスタ104内のフラグ情報をシフトさせるとともにDF[4]に“0”を格納する。これにより、DFフラグレジスタ104(DF[4:0])のフラグ情報は、Que[0]〜Que[4]に対して分岐命令が格納されたか否かの調査が行われていないことを示す“00000”を維持する。
分岐先命令格納判定回路64は、2サイクル前に分岐命令が検出されていないため(図示なし)、BFフラグレジスタ105内のフラグ情報をシフトさせるとともに、BF[4]に“0”を格納する。これにより、BFフラグレジスタ105(BF[4:0])のフラグ情報は、Que[0]〜Que[4]の全てに分岐命令が格納されていないことを示す“00000”を維持する。
又、命令キュー102の5段のレジスタQue[0]〜Que[4]の全てに有効な命令が格納されているため、QV[4:0]には、Que[0]〜Que[4]に有効な命令が格納されていることを示す値“11111”が格納されている。
クロックサイクルT2:
クロックサイクルT1においてデコードされた“命令0”は、クロックサイクルT2において実行される。“命令0”のデコードが完了したため、クロックサイクルT2では、命令キュー102のQue[0]に“命令1”が、Que[1]に“命令2”が、Que[2]に“命令3”が、Que[3]に“命令4”がシフトしてそれぞれ格納され、Que[4]には、命令メモリ202からフェッチされた“命令5(分岐命令)”が格納される。その結果、“命令0”がEXステージになり、“命令1”がIDステージになり、“命令2”がIFステージに移行する。ここで、“命令5”は分岐命令である。
クロックサイクルT1においてデコードされた“命令0”は、クロックサイクルT2において実行される。“命令0”のデコードが完了したため、クロックサイクルT2では、命令キュー102のQue[0]に“命令1”が、Que[1]に“命令2”が、Que[2]に“命令3”が、Que[3]に“命令4”がシフトしてそれぞれ格納され、Que[4]には、命令メモリ202からフェッチされた“命令5(分岐命令)”が格納される。その結果、“命令0”がEXステージになり、“命令1”がIDステージになり、“命令2”がIFステージに移行する。ここで、“命令5”は分岐命令である。
クロックサイクルT1において実行された命令がないため、クロックサイクルT2において、パイプラインハザードは発生していない。このため、クロックサイクルT2では、ハザード信号123はローレベル“0”を示す。又、ハザード信号123がローレベル“0”であるため、キュー選択回路62は、命令キュー102の最下位のレジスタ(ここではQue[0])に格納された命令コード“命令1”を、選択後命令キュー出力信号122としてセレクタ61に出力させる。これにより、Que[0]内の“命令1”が命令デコーダ204によってデコードされる。デコードされた“命令1”は分岐命令ではないため、クロックサイクルT2における分岐命令検出信号124はローレベル“0”を示す。このとき、“命令2”は、“命令1”に引き続いてIDステージへ移行する前のIFステージとなる。更に、クロックサイクルT2において実行中の“命令0”は分岐命令ではないため、分岐は確定せず分岐確定信号125もローレベル“0”を示す。
セレクタ113は、ローレベル“0”のハザード信号123に基づき、分岐確定の検出に応じて分岐アドレス信号126をフェッチアドレス130として選択する通常動作モードとなる。クロックサイクルT2では、実行された“命令0”は分岐命令ではなく分岐未確定のため、フェッチアドレス130としてフェッチポインタ信号129(“命令7”のアドレス)が出力される。又、1サイクル前のフェッチアドレス130に従い、命令メモリ202から、命令コード114として“命令6”が出力されている。
又、サイクルT1においてハザードが未検出であるため、クロックサイクルT2においてキュー選択回路62は、DFフラグレジスタ104内のフラグ情報をシフトさせるとともにDF[4]に“0”を格納する。これにより、DFフラグレジスタ104(DF[4:0])のフラグ情報は、Que[0]〜Que[4]に対して分岐命令が格納されたか否かの調査が行われていないことを示す“00000”を維持する。
分岐先命令格納判定回路64は、2サイクル前に分岐命令が検出されていないため(図示なし)、BFフラグレジスタ105内のフラグ情報をシフトさせるとともに、BF[4]に“0”を格納する。これにより、BFフラグレジスタ105(BF[4:0])のフラグ情報は、Que[0]〜Que[4]の全てに分岐命令が格納されていないことを示す“00000”を維持する。
又、命令キュー102の5段のレジスタQue[0]〜Que[4]の全てに有効な命令が格納されているため、QV[4:0]には、Que[0]〜Que[4]に有効な命令が格納されていることを示す値“11111”を維持する。
すなわち、クロックサイクルT2におけるハザード信号123、分岐命令検出信号124、分岐確定信号125、DF[4:0]、BF[4:0]、QV[4:0]はいずれもクロックサイクルT1から変化しない。
クロックサイクルT3、T4:
クロックサイクルT3、T4では、クロックサイクルT2と同様な動作により、CPU201の状態160の移行及び命令キュー102への命令コードのフェッチが行われる。この際、クロックサイクルT3、T4におけるハザード信号123、分岐命令検出信号124、分岐確定信号125、DF[4:0]、BF[4:0]、QV[4:0]はいずれもクロックサイクルT2から変化しない。
クロックサイクルT3、T4では、クロックサイクルT2と同様な動作により、CPU201の状態160の移行及び命令キュー102への命令コードのフェッチが行われる。この際、クロックサイクルT3、T4におけるハザード信号123、分岐命令検出信号124、分岐確定信号125、DF[4:0]、BF[4:0]、QV[4:0]はいずれもクロックサイクルT2から変化しない。
クロックサイクルT3において“命令1”の実行、及び“命令2”のデコードが完了し、クロックサイクルT4では、“命令2”が実行され、“命令3”がデコードされる。このとき、“命令4”は、“命令3”に引き続いてIDステージへ移行する前のIFステージとなる。“命令2”のデコードが完了したため、クロックサイクルT4では、命令キュー102のQue[0]に“命令3”が、Que[1]に“命令4”が、Que[2]に“命令5(分岐命令)”が、Que[3]に“命令6”がシフトしてそれぞれ格納され、Que[4]には、命令メモリ202からフェッチされた“命令7”が格納される。その結果、クロックサイクルT4では、“命令2”がEXステージになり、“命令3”がIDステージになり、“命令4”がIFステージに移行する。
セレクタ113は、ローレベル“0”のハザード信号123に基づき、分岐確定の検出に応じて分岐アドレス信号126をフェッチアドレス130として選択する通常動作モードとなる。クロックサイクルT4では、実行された“命令2”は分岐命令ではなく分岐未確定のため、フェッチアドレス130としてフェッチポインタ信号129(“命令9”のアドレス)が出力される。又、1サイクル前のフェッチアドレス130に従い、命令メモリ202から、命令コード114として“命令8”が出力されている。
クロックサイクルT5:
クロックサイクルT4において“命令3”のデコードが完了したため、クロックサイクルT5では、命令キュー102のQue[0]に“命令4”が、Que[1]に“命令5(分岐命令)”が、Que[2]に“命令6”が、Que[3]に“命令7”がシフトしてそれぞれ格納され、Que[4]には、命令メモリ202からフェッチした“命令8”が格納される。
クロックサイクルT4において“命令3”のデコードが完了したため、クロックサイクルT5では、命令キュー102のQue[0]に“命令4”が、Que[1]に“命令5(分岐命令)”が、Que[2]に“命令6”が、Que[3]に“命令7”がシフトしてそれぞれ格納され、Que[4]には、命令メモリ202からフェッチした“命令8”が格納される。
クロックサイクルT4において“命令2”の実行、及び“命令3”のデコードが完了する。この時、“命令2”が例えばロード命令のように、周辺IO209やデータメモリ211からデータをロードする命令の場合、状態160はメモリアクセスステージ(MEM)となる。更に、“命令3”が“命令2”によるロードデータを使用する場合、“命令3”の実行(EX)は、“命令2”のMEMの完了を待って行われる。このとき、命令実行制御回路210は命令実行信号132を出力せず“命令3”の実行が保留されるパイプラインハザード状態が発生し、ハザード信号123は、ハイレベル“1”となる。
本実施の形態では、クロックサイクルT5、T6がハザード発生期間となる。この間、キュー制御回路106及び命令デコーダ204によって命令キュー102に分岐命令が格納されているか否かの調査(分岐命令調査)が行われる。この際、命令キュー102において分岐命令調査が実施済みのQueに対応するDFフラグレジスタ104のレジスタには、当該分岐命令調査の次サイクルにおいて“1”が格納される。この際、未調査のレジスタには“0”が格納される。
クロックサイクルT5では、ハザード信号123がハイレベル“1”であるため、キュー選択回路62は、命令キュー102において有効な命令コードが格納され、分岐命令調査が未実施のレジスタのうち、最下位側のレジスタ(ここではQue[0])に格納された命令コード“命令4”をセレクタ61に出力させる。これにより、Que[0]内の“命令4”が命令デコーダ204によってデコードされる。デコードされた“命令4”は分岐命令ではないため、クロックサイクルT5における分岐命令検出信号124はローレベル“0”を示す。更に、クロックサイクルT4において実行中の“命令2”は分岐命令ではないため、分岐は確定せず分岐確定信号125もローレベル“0”を示す。
パイプラインハザードの発生(ハイレベル“1”のハザード信号123)によりフェッチポインタ111は、直前のクロックサイクルT4においてインクリメントされたアドレス(“命令9”のアドレス)を保持する。セレクタ113は、ハイレベル“1”のハザード信号123に基づき、分岐命令の検出に応じて分岐アドレス信号126をフェッチアドレス130として選択するハザードモードとなる。クロックサイクルT5では、デコードされた“命令4”が分岐命令ではないため、フェッチアドレス130としてフェッチポインタ信号129(“命令9”のアドレス)が出力される。
サイクルT5では、直前のクロックサイクルT4においてハザードが未検出であったため、キュー選択回路62は、DFフラグレジスタ104内のフラグ情報をシフトさせるとともにDF[4]に“0”を格納する。これにより、DFフラグレジスタ104(DF[4:0])のフラグ情報は、Que[0]〜Que[4]に対して分岐命令が格納されたか否かの調査が行われていないことを示す“00000”を維持する。
分岐先命令格納判定回路64は、2サイクル前にデコードされた“命令2”が分岐命令ではないため、BFフラグレジスタ105内のフラグ情報をシフトさせるとともに、BF[4]に“0”を格納する。これにより、BFフラグレジスタ105(BF[4:0])のフラグ情報は、Que[0]〜Que[4]の全てに分岐命令が格納されていないことを示す“00000”を維持する。
又、命令キュー102の5段のレジスタQue[0]〜Que[4]の全てに有効な命令が格納されているため、QV[4:0]には、Que[0]〜Que[4]に有効な命令が格納されていることを示す値“11111”を維持する。
クロックサイクルT5では、パイプラインハザードの発生により、本来保留とされる“命令4”のデコードを、分岐命令調査(Que[0]に対する調査)のために利用している。
クロックサイクルT6:
クロックサイクルT6では、引き続き“命令2”のMEMステージであり、パイプラインハザードが発生中であることからEXステージ(ここでは“命令3”の実行)やIDステージ(ここでは“命令4”のでコード)は保留されている。このため、命令キュー102内のデータはシフトせず、Que[0]に“命令4”が、Que[1]に“命令5(分岐命令)”が、Que[2]に“命令6”が、Que[3]に“命令7”が、Que[4]に“命令8”が格納された状態を維持する。
クロックサイクルT6では、引き続き“命令2”のMEMステージであり、パイプラインハザードが発生中であることからEXステージ(ここでは“命令3”の実行)やIDステージ(ここでは“命令4”のでコード)は保留されている。このため、命令キュー102内のデータはシフトせず、Que[0]に“命令4”が、Que[1]に“命令5(分岐命令)”が、Que[2]に“命令6”が、Que[3]に“命令7”が、Que[4]に“命令8”が格納された状態を維持する。
クロックサイクルT6では“命令3”の実行が保留されるパイプラインハザード状態が発生しているため、ハザード信号123は、ハイレベル“1”となる。
キュー選択回路62は、直前のクロックサイクルT5においてパイプラインハザードの発生を検出しているため、DFフラグレジスタ104のシフト動作を停止するとともに、クロックサイクルT5において分岐命令調査を行ったQue[0]に対応するDF[0]に、分岐調査済みを示すフラグ情報“1”を格納する。これにより、DFフラグレジスタ104(DF[4:0])のフラグ情報は、Que[0]のみに対し分岐命令調査が行われたことを示す“00001”となる。
クロックサイクルT6では、ハザード信号123がハイレベル“1”であるため、クロックサイクルT5と同様に命令キュー102に対し分岐命令調査が行われる。ここでは、DF[0]に分岐命令調査済みを示す“1”が格納され、DF[1]に分岐命令未調査を示す“0”が格納されている。このため、キュー選択回路62は、分岐命令未調査のQue[1]に格納された“命令5(分岐命令)”を選択後命令キュー出力信号122として出力するようにセレクタ61を制御する。これにより、Que[1]内の“命令5”が命令デコーダ204によってデコードされる。デコードされた“命令5”は分岐命令であるため、命令デコーダ204はハイレベル“1”の分岐命令検出信号124を出力する。尚、クロックサイクルT6において実行中の“命令2”は分岐命令ではないため、分岐は確定せず分岐確定信号125はローレベル“0”を示す。
パイプラインハザードの発生(ハイレベル“1”のハザード信号123)によりフェッチポインタ111は、直前のクロックサイクルT4においてインクリメントされたアドレス(“命令9”のアドレス)を保持する。セレクタ113は、ハイレベル“1”のハザード信号123(ハザードの発生)及びハイレベル“1”の分岐命令検出信号124(分岐命令の検出)に基づき、分岐アドレス信号126をフェッチアドレス130として選択する。クロックサイクルT6では、デコードされた“命令5”が分岐命令であるため、フェッチアドレス130として、“命令5”から生成された分岐アドレス信号126(“分岐先命令1”のアドレス)が出力される。
分岐先命令格納判定回路64は、2サイクル前にデコードされた“命令3”が分岐命令ではないため、BFフラグレジスタ105内のフラグ情報をシフトさせるとともに、BF[4]に“0”を格納する。これにより、BFフラグレジスタ105(BF[4:0])のフラグ情報は、Que[0]〜Que[4]の全てに分岐命令が格納されていないことを示す“00000”を維持する。
又、命令キュー102の5段のレジスタQue[0]〜Que[4]の全てに有効な命令が格納されているため、QV[4:0]には、Que[0]〜Que[4]に有効な命令が格納されていることを示す値“11111”を維持する。
クロックサイクルT6では、パイプラインハザードの発生により、本来保留とされるIDステージ(ここでは“命令4”のデコード)を、分岐命令調査(Que[1]に対する調査)のために利用している。
クロックサイクルT7:
クロックサイクルT7では、“命令2”のMEMステージが完了しパイプラインハザードが解消して、保留されていた“命令3”がEXステージ、“命令4”がIDステージとなり、“命令5(分岐命令)”がIFステージに移行する。
クロックサイクルT7では、“命令2”のMEMステージが完了しパイプラインハザードが解消して、保留されていた“命令3”がEXステージ、“命令4”がIDステージとなり、“命令5(分岐命令)”がIFステージに移行する。
クロックサイクルT4においてデコードされ、クロックサイクルT5、T6において保留とされていた“命令3”は、クロックサイクルT7において実行される。又、IDステージとして保留とされていた“命令4”のデコードは未完了のため、クロックサイクルT7では、命令キュー102内のデータはシフトせず、Que[0]に“命令4”が、Que[1]に“命令5(分岐命令)”が、Que[2]に“命令6”が、Que[3]に“命令7”が、Que[4]に“命令8”が格納された状態を維持する。すなわち命令キュー102の状態は、T6サイクルで命令3、命令4が保留されていたので、T6サイクルから変化はない。
クロックサイクルT7ではパイプラインハザードは発生していない(解消している)。このため、クロックサイクルT7では、ハザード信号123はローレベル“0”を示す。又、ハザード信号123がローレベル“0”であるため、キュー選択回路62は、命令キュー102の最下位のレジスタ(ここではQue[0])に格納された命令コード“命令4”を、選択後命令キュー出力信号122としてセレクタ61に出力させる。これにより、Que[0]内の“命令4”が命令デコーダ204によってデコードされる。デコードされた“命令4”は分岐命令ではないため、クロックサイクルT7における分岐命令検出信号124はローレベル“0”を示す。このとき、クロックサイクルT7において実行中の“命令3”は分岐命令ではないため、分岐は確定せず分岐確定信号125もローレベル“0”を示す。
キュー選択回路62は、直前のクロックサイクルT6においてパイプラインハザードの発生を検出しているため、DFフラグレジスタ104のシフト動作を停止するとともに、クロックサイクルT6において分岐命令調査を行ったQue[1]に対応するDF[1]に、分岐調査済みを示すフラグ情報“1”を格納する。これにより、DFフラグレジスタ104(DF[4:0])のフラグ情報は、Que[0]及びQue[1]に対し分岐命令調査が行われたことを示す“00011”となる。
セレクタ113は、ローレベル“0”のハザード信号123に基づき、分岐確定の検出に応じて分岐アドレス信号126をフェッチアドレス130として選択する通常動作モードとなる。クロックサイクルT7では、実行された“命令3”は分岐命令ではなく分岐未確定のため、フェッチポインタ111によって保持されていたフェッチポインタ信号129(“命令9”のアドレス)がフェッチアドレス130として出力される。すなわち、クロックサイクルT7におけるフェッチアドレス130として、パイプラインハザード発生により保留されていた“命令9”が格納されているアドレスが出力される。又、1サイクル前のフェッチアドレス130に従い、命令メモリ202から、命令コード114として“分岐先命令1”が出力されている。
分岐先命令格納判定回路64は、2サイクル前に分岐命令が検出されていないため、BFフラグレジスタ105内のフラグ情報をシフトさせるとともに、BF[4]に“0”を格納する。これにより、BFフラグレジスタ105(BF[4:0])のフラグ情報は、Que[0]〜Que[4]の全てに分岐命令が格納されていないことを示す“00000”を維持する。
又、命令キュー102の5段のレジスタQue[0]〜Que[4]の全てに有効な命令が格納されているため、QV[4:0]には、Que[0]〜Que[4]に有効な命令が格納されていることを示す値“11111”を維持する。
クロックサイクルT8:
クロックサイクルT7において“命令3”の実行及び、“命令4”のデコードが完了する。これにより、クロックサイクルT8では、命令キュー102のQue[0]に“命令5(分岐命令)”が、Que[1]に“命令6”が、Que[2]に“命令7”が、Que[3]に“命令8”がシフトしてそれぞれ格納され、Que[4]には、命令メモリ202からフェッチした“分岐先命令1”が格納される。その結果、“命令4”がEXステージになり、“命令5(分岐命令)”がIDステージになり、“命令6”がIFステージに移行する。
クロックサイクルT7において“命令3”の実行及び、“命令4”のデコードが完了する。これにより、クロックサイクルT8では、命令キュー102のQue[0]に“命令5(分岐命令)”が、Que[1]に“命令6”が、Que[2]に“命令7”が、Que[3]に“命令8”がシフトしてそれぞれ格納され、Que[4]には、命令メモリ202からフェッチした“分岐先命令1”が格納される。その結果、“命令4”がEXステージになり、“命令5(分岐命令)”がIDステージになり、“命令6”がIFステージに移行する。
クロックサイクルT8ではパイプラインハザードは発生していない。このため、クロックサイクルT8では、ハザード信号123はローレベル“0”を示す。又、ハザード信号123がローレベル“0”であるため、キュー選択回路62は、命令キュー102の最下位のレジスタ(ここではQue[0])に格納された命令コード“分岐命令”を、選択後命令キュー出力信号122としてセレクタ61に出力させる。これにより、Que[0]内の“分岐命令”が命令デコーダ204によってデコードされる。デコードされた“分岐命令”は分岐命令であるため、クロックサイクルT8における分岐命令検出信号124はハイレベル“1”を示す。このとき、クロックサイクルT8において実行中の“命令4”は分岐命令ではないため、分岐は確定せず分岐確定信号125もローレベル“0”を示す。
分岐アドレス生成回路109は、ハイレベル“1”の分岐命令検出信号124に応じて“命令5”に基づく分岐先命令1が格納されたアドレスを生成する。しかし、“命令5”はEXステージ前であり分岐が確定していない。このためセレクタ113は、分岐アドレス信号126を出力しない。詳細には、セレクタ113は、ローレベル“0”のハザード信号123に基づき、分岐確定の検出に応じて分岐アドレス信号126をフェッチアドレス130として選択する通常動作モードとなる。クロックサイクルT8では、実行された“命令4”は分岐命令ではなく分岐未確定のため、フェッチアドレス130としてフェッチポインタ信号129(“命令10”のアドレス)が出力される。又、1サイクル前のフェッチアドレス130に従い、命令メモリ202から、命令コード114として“命令9”が出力されている。
又、サイクルT7においてハザードが未検出であるため、クロックサイクルT8においてキュー選択回路62は、DFフラグレジスタ104内のフラグ情報をシフトさせるとともにDF[4]に“0”を格納する。これにより、DFフラグレジスタ104(DF[4:0])のフラグ情報は、シフト後の命令キュー102のうちQue[0]に対してのみ分岐命令の格納有無の調査を行ったことを示す“00001”に更新される。
分岐先命令格納判定回路64は、2サイクル前(クロックサイクルT6)に分岐命令が検出されたため、BFフラグレジスタ105内のフラグ情報をシフトさせるとともに、分岐命令の格納を示す“1”をBF[4]に格納する。これにより、BFフラグレジスタ105(BF[4:0])のフラグ情報は、Que[0]〜Que[4]のうちQue[4]のみに分岐先命令が他の命令に先行して格納されていることを示す“10000”となる。
又、命令キュー102の5段のレジスタQue[0]〜Que[4]の全てに有効な命令が格納されているため、QV[4:0]には、Que[0]〜Que[4]に有効な命令が格納されていることを示す値“11111”を維持する。
クロックサイクルT9:
クロックサイクルT8において“命令4”の実行及び、“命令5(分岐命令)”のデコードが完了する。これにより、クロックサイクルT9では、命令キュー102のQue[0]に“命令6”が、Que[1]に“命令7”が、Que[2]に“命令8”が、Que[3]に“分岐先命令1”がシフトしてそれぞれ格納され、Que[4]には、命令メモリ202からフェッチした“命令9”が格納される。その結果、“命令5(分岐命令)”がEXステージに移行する。尚、分岐命令である“命令5”が実行され分岐が確定するため、後続の命令6は実行されず命令6のIDステージは破棄される。
クロックサイクルT8において“命令4”の実行及び、“命令5(分岐命令)”のデコードが完了する。これにより、クロックサイクルT9では、命令キュー102のQue[0]に“命令6”が、Que[1]に“命令7”が、Que[2]に“命令8”が、Que[3]に“分岐先命令1”がシフトしてそれぞれ格納され、Que[4]には、命令メモリ202からフェッチした“命令9”が格納される。その結果、“命令5(分岐命令)”がEXステージに移行する。尚、分岐命令である“命令5”が実行され分岐が確定するため、後続の命令6は実行されず命令6のIDステージは破棄される。
クロックサイクルT9ではパイプラインハザードは発生していない。このため、クロックサイクルT9では、ハザード信号123はローレベル“0”を示す。又、クロックサイクルT9において実行中の“命令5(分岐命令)”は分岐命令であるため、分岐が確定し、ハイレベル“1”の分岐確定信号125が出力されるとともに、IDステージが破棄される。ここでは、“命令6”のデコードが破棄される。
又、サイクルT8においてハザードが未検出であるため、クロックサイクルT9においてキュー選択回路62は、DFフラグレジスタ104内のフラグ情報をシフトさせるとともにDF[4]に“0”を格納する。これにより、DFフラグレジスタ104(DF[4:0])のフラグ情報は、シフト後の命令キュー102におけるQue[0]〜Que[4]のいずれも分岐命令の格納有無の調査が行われていないことを示す“00000”に更新される。
分岐先命令格納判定回路64は、2サイクル前(クロックサイクルT7)に分岐命令が検出されていないため、BFフラグレジスタ105内のフラグ情報をシフトさせるとともに、分岐命令の格納を示す“0”をBF[4]に格納する。これにより、BFフラグレジスタ105(BF[4:0])のフラグ情報は、Que[0]〜Que[4]のうちQue[3]のみに分岐先命令が他の命令に先行して格納されていることを示す“01000”となる。
又、命令キュー102の5段のレジスタQue[0]〜Que[4]の全てに有効な命令が格納されているため、QV[4:0]には、Que[0]〜Que[4]に有効な命令が格納されていることを示す値“11111”を維持する。
分岐が確定すると分岐先命令1は次のサイクルでデコードされるIDステージとなるため、クロックサイクルT9において分岐先命令1はIFステージとなる。
分岐アドレス生成回路109は、ハイレベル“1”の分岐命令検出信号124に応じてクロックサイクルT8においてデコードされた“命令5”に基づくアドレス(“分岐先命令1”が格納されたアドレス)と、これを“n”だけインクリメントしたアドレス(“分岐先命令2”が格納されたアドレス)を生成している。ここで、ハイレベル“1”の分岐確定信号125に応じてキュー制御回路106から出力される分岐先命令検出信号133に基づき、分岐アドレス生成回路109は“n”だけインクリメントしたアドレス(“分岐先命令2”が格納されたアドレス)を分岐アドレス信号126として出力する。
セレクタ113は、ローレベル“0”のハザード信号123に基づき、分岐確定の検出に応じて分岐アドレス信号126をフェッチアドレス130として選択する通常動作モードとなっている。クロックサイクルT9では、実行された“命令5”が分岐命令であるため、フェッチアドレス130として分岐アドレス信号126(ここでは、“分岐先命令2”のアドレス)を出力する。
このように、分岐命令がハザード発生期間中に検出され、他の命令に先行して当該分岐命令に係る分岐先命令1が命令キュー102に格納されている場合、分岐確定時において分岐先命令1の次の命令(分岐先命令2)のアドレスをフェッチアドレスとして指定することができる。
キュー制御回路106は、ハイレベル“1”の分岐確定信号125に応じてBFフラグレジスタ105のBF[4:0]の値を判定して、“1”が格納されたBFに対応するQueを、次のクロックサイクルT10において最下位のQue[0]に移動する。ここではBF[3]に“1”が格納されていることから、キュー制御回路106は、Que[3]に分岐先命令が格納されていると判断して当該分岐先命令をQue[0]に移動する。
クロックサイクルT10:
クロックサイクルT9において“命令6”のIDステージは破棄されたため、次のクロックサイクルT10における“命令6”のEXステージも破棄される。又、クロックサイクルT10では、前サイクルT9におけるハイレベル“1”の分岐確定信号125に応じてQue[3]に格納された“分岐先命令1”がQue[0]に移動し、他のQue内の命令コードは破棄される。これにより“分岐先命令1”がIDステージとなる。
クロックサイクルT9において“命令6”のIDステージは破棄されたため、次のクロックサイクルT10における“命令6”のEXステージも破棄される。又、クロックサイクルT10では、前サイクルT9におけるハイレベル“1”の分岐確定信号125に応じてQue[3]に格納された“分岐先命令1”がQue[0]に移動し、他のQue内の命令コードは破棄される。これにより“分岐先命令1”がIDステージとなる。
クロックサイクルT9において実行された“命令5(分岐命令)”により、クロックサイクルT10において、パイプラインハザードは発生していない。このため、クロックサイクルT10では、ハザード信号123はローレベル“0”を示す。又、ハザード信号123がローレベル“0”であるため、キュー選択回路62は、命令キュー102の最下位のレジスタ(ここではQue[0])に格納された命令コード“分岐先命令1”を、選択後命令キュー出力信号122としてセレクタ61に出力させる。これにより、Que[0]内の“分岐先命令1”が命令デコーダ204によってデコードされる。デコードされた“分岐先命令1”は分岐命令ではないため、クロックサイクルT10における分岐命令検出信号124はローレベル“0”を示す。このとき、クロックサイクルT9において“分岐先命令2”のアドレスがフェッチアドレス130として出力されているため、“分岐先命令2”はクロックサイクルT11においてデコードされる。このため、クロックサイクルT10では、“分岐先命令2”がIFステージとなる。更に、クロックサイクルT10において実行中の命令は破棄されるため、分岐は確定せず分岐確定信号125もローレベル“0”を示す。
セレクタ113は、ローレベル“0”のハザード信号123に基づき、分岐確定の検出に応じて分岐アドレス信号126をフェッチアドレス130として選択する通常動作モードとなる。クロックサイクルT10では分岐未確定のため、フェッチアドレス130としてフェッチポインタ信号129(“分岐先命令3”のアドレス)が出力される。又、1サイクル前のフェッチアドレス130に従い、命令メモリ202から、命令コード114として“分岐先命令2”が出力されている。
又、サイクルT9においてハザードが未検出であるため、クロックサイクルT10においてキュー選択回路62は、DFフラグレジスタ104内のフラグ情報をシフトさせるとともにDF[4]に“0”を格納する。これにより、DFフラグレジスタ104(DF[4:0])のフラグ情報は、Que[0]〜Que[4]に対して分岐命令が格納されたか否かの調査が行われていないことを示す“00000”を維持する。
分岐先命令格納判定回路64は、前のクロックサイクルT9において分岐が確定したため、クロックサイクルT10においてBFフラグレジスタ105内のフラグ情報をリセットし“00000”とする。これにより、分岐命令の実行(分岐確定)に先行して格納された分岐先命令が命令キュー102のQue[4]からQue[0]のいずれにも格納されていないことが示される。
又、キュークリア判定回路63は、前のクロックサイクルT9において分岐が確定し命令キュー102に分岐先命令が格納されているため、クロックサイクルT10においてQVフラグレジスタ103の最下位のレジスタ(QV[0])に“1”を格納し、他のレジスタ(QV[4:1])に“0”を格納する。このため、QV[4:0]は、Que[0]のみに有効な命令が格納されていることを示す値“00001”となる。
クロックサイクルT11:
クロックサイクルT2においてデコードされた“分岐先命令1”は、クロックサイクルT11において実行される。“分岐先命令1”のデコードが完了したため、クロックサイクルT11では、命令キュー102のQue[0]に“分岐先命令2”が格納される。その結果、“分岐先命令1”がEXステージになり、“分岐先命令2”がIDステージになり、“分岐先命令3”がIFステージに移行する。
クロックサイクルT2においてデコードされた“分岐先命令1”は、クロックサイクルT11において実行される。“分岐先命令1”のデコードが完了したため、クロックサイクルT11では、命令キュー102のQue[0]に“分岐先命令2”が格納される。その結果、“分岐先命令1”がEXステージになり、“分岐先命令2”がIDステージになり、“分岐先命令3”がIFステージに移行する。
クロックサイクルT10において実行された命令がないため、クロックサイクルT11において、パイプラインハザードは発生していない。このため、クロックサイクルT11では、ハザード信号123はローレベル“0”を示す。又、ハザード信号123がローレベル“0”であるため、キュー選択回路62は、命令キュー102の最下位のレジスタ(ここではQue[0])に格納された命令コード“分岐先命令2”を、選択後命令キュー出力信号122としてセレクタ61に出力させる。これにより、Que[0]内の“分岐先命令2”が命令デコーダ204によってデコードされる。デコードされた“分岐先命令2”は分岐命令ではないため、クロックサイクルT11における分岐命令検出信号124はローレベル“0”を示す。このとき、クロックサイクルT10において“分岐先命令3”のアドレスがフェッチアドレス130として出力されているため、“分岐先命令3”はクロックサイクルT12においてデコードされる。このため、クロックサイクルT11では、“分岐先命令3”がIFステージとなる。更に、クロックサイクルT11において実行中の“分岐先命令1”は分岐命令ではないため、分岐は確定せず分岐確定信号125もローレベル“0”を示す。
セレクタ113は、ローレベル“0”のハザード信号123に基づき、分岐確定の検出に応じて分岐アドレス信号126をフェッチアドレス130として選択する通常動作モードとなる。クロックサイクルT11では、実行された“分岐先命令1”は分岐命令ではなく分岐未確定のため、フェッチアドレス130としてフェッチポインタ信号129(“分岐先命令4”のアドレス)が出力される。又、1サイクル前のフェッチアドレス130に従い、命令メモリ202から、命令コード114として“分岐先命令3”が出力されている。
又、サイクルT10においてハザードが未検出であるため、クロックサイクルT11においてキュー選択回路62は、DFフラグレジスタ104内のフラグ情報をシフトさせるとともにDF[4]に“0”を格納する。これにより、DFフラグレジスタ104(DF[4:0])のフラグ情報は、Que[0]〜Que[4]に対して分岐命令が格納されたか否かの調査が行われていないことを示す“00000”を維持する。
分岐先命令格納判定回路64は、2サイクル前に分岐命令が検出されていないため、BFフラグレジスタ105内のフラグ情報をシフトさせるとともに、BF[4]に“0”を格納する。これにより、BFフラグレジスタ105(BF[4:0])のフラグ情報は、Que[0]〜Que[4]の全てに分岐命令が格納されていないことを示す“00000”を維持する。
又、命令キュー102の5段のレジスタQue[0]〜Que[4]のうちQue[0]のみ有効な命令が格納されているため、QV[4:0]には、Que[0]のみに有効な命令が格納されていることを示す値“00001”を維持する。
すなわち、クロックサイクルT10におけるハザード信号123、分岐命令検出信号124、分岐確定信号125、DF[4:0]、BF[4:0]、QV[4:0]はいずれもクロックサイクルT10から変化しない。
以上のように、本実施の形態によるマイクロコンピュータ200では、パイプラインハザードが発生している間、IDステージが保留されているために使用されていないデコード機能を、命令キュー102内に分岐命令が格納されているかの調査に使用している。この間に分岐命令が検出された場合、パイプラインハザード解消後、検出された分岐命令に対応する分岐先命令を他の命令に先行して命令キュー102にフェッチする。更に、命令キュー102に分岐先命令が格納された状態において、分岐命令が実行され分岐命令が確定すると、命令キュー102内の分岐先命令の次の分岐先命令のアドレスがフェッチアドレスとなる。これにより、分岐確定後、次のサイクルで分岐先命令が実行されるため、分岐ペナルティが削除される。
尚、パイプラインハザード発生期間中に分岐命令を検出できなかった場合、従来のマイクロコンピュータと同様に分岐命令が実行される。
本実施の形態によるマイクロコンピュータ200では、パイプラインハザード発生期間において利用されていない命令デコーダ204及び分岐アドレス生成回路109を分岐命令の調査や、分岐先命令の先行フェッチに利用している。すなわち、通常動作時に使用している命令デコーダ204に新たな機能を追加することなく分岐命令の有無を調査することができる。又、分岐先命令に基づいて生成された分岐先命令のアドレスから次の分岐先命令のアドレスを生成する機能(ここでは、インクリメンタ92)を分岐アドレス生成回路に追加することで、分岐先命令の次の命令のアドレスを分岐確定後遅滞なくフェッチアドレスとして出力することができる。この機能は小規模の回路(例えばインクリメンタ92)で実現できる。又、本実施の形態によるマイクロコンピュータ200では、1ビットで構成できるフラグレジスタを利用して命令キュー102内における分岐命令の有無や調査有無を把握している。このため、本実施の形態によれば小規模な回路により、分岐命令の先行フェッチを実現し分岐ペナルティを削除することが可能となる。従って、本実施の形態によるマイクロコンピュータ200は、自動車電装やモバイル機器や、その他の汎用市場のなかでも、極小のコストが求められる低価格帯マイクロコンピュータの性能向上において特に有効である。
本実施例では、パイプラインハザード期間がクロックサイクルT5〜T6の2サイクルである例を示したが、パイプラインハザード期間が2サイクル以上に長くなっても動作は同じである。この場合は、命令キュー格納されている分岐命令を検出する期間が長くなるため、分岐命令の先行検出及び分岐先命令の先行フェッチの確率は高まり、分岐ペナルティが排除され易くなる。
図8は、本発明によるマイクロコンピュータのパイプライン処理動作の他の一例を示すタイミングチャートである。図8を参照して、DFフラグレジスタ104の使用方法について説明する。
図8を参照して、クロックサイクルT2からクロックサイクルT4の間、及びクロックサイクルT6からクロックサイクルT7の間、パイプラインハザードが発生しているものとする。
クロックサイクルT2からクロックサイクルT4のハザード発生期間において、Que[0]からQue[4]には、“命令1”から“命令5”が保持される。クロックサイクルT2ではパイプラインハザードの発生により、DFフラグレジスタ104のうち“1”が格納されていない最下位のDF[0]に対応するQue[0]の“命令1”が分岐命令か否かの調査が行われる。これにより、次のクロックサイクルT3においてDF[0]に“1”がセットされる。クロックサイクルT3では、ハザード発生期間中のため、DFフラグレジスタ104のうち“1”が格納されていない最下位のDF[1]に対応するQue[1]の“命令2”が分岐命令か否かの調査が行われる。これにより、次のクロックサイクルT4においてDF[1]に“1”がセットされる。クロックサイクルT4では、ハザード発生期間中により、DFフラグレジスタ104のうち“1”が格納されていない最下位のDF[2]に対応するQue[2]の“命令3”が分岐命令か否かの調査が行われる。これにより、次のクロックサイクルT5においてDF[2]に“1”がセットされる。
クロックサイクルT5では、ハザード期間中に命令1のデコードが保留とされていたため、命令キュー102内のデータはシフトせず、Que[0]〜Que[4]には“命令1”〜“命令5”が保持される。又、ハザード期間中に保留とされていた“命令0”がクロックサイクルT5において実行されることで、次のクロックサイクルT6からクロックサイクルT7の間、パイプラインハザードが発生する。
クロックサイクルT6において命令キュー102内の命令コードはシフトしQue[4]に“命令6”が格納される。クロックサイクルT6からクロックサイクルT7のハザード発生するため期間において、Que[0]からQue[4]には、“命令2”から“命令6”が保持される。又、クロックサイクルT5では、パイプラインハザードは発生していないため、クロックサイクルT6においてDFフラグレジスタ104内のフラグ情報はシフトし、DF[4]に“0”がセットされる。これにより、DF[4:0]に格納されるフラグ情報は“00011”となる。
クロックサイクルT6ではパイプラインハザードの発生により、DFフラグレジスタ104のうち“1”が格納されていない最下位のDF[2]に対応するQue[2]の“命令4”が分岐命令か否かの調査が行われる。これにより、次のクロックサイクルT7においてDF[2]に“1”がセットされる。クロックサイクルT7では、ハザード発生期間中のため、DFフラグレジスタ104のうち“1”が格納されていない最下位のDF[3]に対応するQue[2]の“命令5”が分岐命令か否かの調査が行われる。これにより、次のクロックサイクルT8においてDF[3]に“1”がセットされる。
以上のように、DFフラグレジスタ104を利用することにより、命令キュー102において分岐命令か否かの調査が行われた否かを把握可能となる。このため、パイプラインハザードの発生の際、過去に分岐調査済みの命令コードを再調査することがなくなる。
以上、本発明の実施の形態を詳述してきたが、具体的な構成は上記実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
61 :セレクタ
62 :キュー選択回路
63 :キュークリア判定回路
64 :分岐先命令格納判定回路
65 :分岐先命令検出回路
91 :分岐アドレス抽出回路
92 :インクリメンタ
93 :セレクタ
102 :命令キュー
103 :QVフラグレジスタ
104 :DFフラグレジスタ
105 :BFフラグレジスタ
106 :キュー制御回路
109 :分岐アドレス生成回路
110 :セレクタ
111 :フェッチポインタ
112 :インクリメンタ
113 :セレクタ
114 :命令コード
115 :命令キュー出力信号
116 :QVフラグレジスタ出力信号
117 :QVフラグレジスタ制御信号
118 :DFフラグレジスタ出力信号
119 :DFフラグレジスタ制御信号
120 :BFフラグレジスタ出力信号
121 :BFフラグレジスタ制御信号
122 :選択後命令キュー出力信号
123 :ハザード信号
124 :分岐命令検出信号
125 :分岐確定信号
126 :分岐アドレス信号
127 :更新アドレス信号
128 :更新フェッチアドレス
129 :フェッチポインタ信号
130 :フェッチアドレス
131 :命令実行要求信号
132 :命令実行信号
133 :分岐先命令検出信号
140 :キュー選択制御信号
150 :基準クロック
160 :状態
200 :マイクロコンピュータ
201 :CPU
202 :命令メモリ
203 :命令フェッチ制御回路
204 :命令デコーダ
205 :演算実行回路
206 :パイプライン制御回路
207 :メモリアクセス制御回路
208 :実行結果格納回路
209 :周辺IO
210 :命令実行制御回路
211 :データメモリ
62 :キュー選択回路
63 :キュークリア判定回路
64 :分岐先命令格納判定回路
65 :分岐先命令検出回路
91 :分岐アドレス抽出回路
92 :インクリメンタ
93 :セレクタ
102 :命令キュー
103 :QVフラグレジスタ
104 :DFフラグレジスタ
105 :BFフラグレジスタ
106 :キュー制御回路
109 :分岐アドレス生成回路
110 :セレクタ
111 :フェッチポインタ
112 :インクリメンタ
113 :セレクタ
114 :命令コード
115 :命令キュー出力信号
116 :QVフラグレジスタ出力信号
117 :QVフラグレジスタ制御信号
118 :DFフラグレジスタ出力信号
119 :DFフラグレジスタ制御信号
120 :BFフラグレジスタ出力信号
121 :BFフラグレジスタ制御信号
122 :選択後命令キュー出力信号
123 :ハザード信号
124 :分岐命令検出信号
125 :分岐確定信号
126 :分岐アドレス信号
127 :更新アドレス信号
128 :更新フェッチアドレス
129 :フェッチポインタ信号
130 :フェッチアドレス
131 :命令実行要求信号
132 :命令実行信号
133 :分岐先命令検出信号
140 :キュー選択制御信号
150 :基準クロック
160 :状態
200 :マイクロコンピュータ
201 :CPU
202 :命令メモリ
203 :命令フェッチ制御回路
204 :命令デコーダ
205 :演算実行回路
206 :パイプライン制御回路
207 :メモリアクセス制御回路
208 :実行結果格納回路
209 :周辺IO
210 :命令実行制御回路
211 :データメモリ
Claims (10)
- 命令メモリからフェッチした命令コードを保持する命令キューと、
パイプラインハザード発生期間において、前記命令キューに対する先入先出し方式による命令コードのエンキュー及びデキューを停止し、前記命令キュー内の複数の命令コードを順に命令デコーダに出力するキュー制御回路と、
パイプラインハザード発生期間において、前記命令デコーダによってデコードされた命令コードが分岐命令の場合、前記分岐命令に応じた分岐先命令のアドレスをフェッチアドレスとして前記命令メモリに指定するフェッチアドレス設定回路と
を具備する
マイクロコンピュータ。 - 請求項1に記載のマイクロコンピュータにおいて、
パイプラインハザード発生期間において、前記命令デコーダによってデコードされた命令コードが分岐命令の場合、前記キュー制御回路は、パイプラインハザードの解消後、前記分岐命令に応じた分岐先命令を他の命令に先行して前記命令キューに格納し、パイプラインハザード解消後において前記分岐命令が実行された後、前記分岐先命令を前記命令デコードに出力する
マイクロコンピュータ。 - 請求項1又は2に記載のマイクロコンピュータにおいて、
前記命令キューにおいて分岐命令が格納されているかの調査が行われたか否かを示すフラグ情報を保持するDFフラグレジスタを更に具備し、
パイプラインハザード発生期間中、前記キュー制御回路は、前記DFフラグレジスタのフラグ情報に基づき、前記命令キューにおいて、分岐命令が格納されているかの調査が行われていない命令コードを前記命令デコーダに出力する
マイクロコンピュータ。 - 請求項1から3のいずれか1項に記載のマイクロコンピュータにおいて、
前記分岐先命令が、前記命令キューにおけるどのレジスタに保持されたかを示すフラグ情報を保持するBFフラグレジスタを更に具備し、
前記キュー制御回路は、パイプラインハザード解消後、前記BFフラグレジスタのフラグ情報に基づいて前記命令キュー内における前記分岐先命令を特定する
マイクロコンピュータ。 - 請求項1から4のいずれか1項に記載のマイクロコンピュータにおいて、
パイプラインハザードが発生していない期間、前記命令キューに前記分岐先命令が保持されている場合、前記フェッチアドレス設定回路は、前記分岐命令の実行に応じて前記分岐先命令の次のアドレスをフェッチアドレスとして前記命令メモリに指定する
マイクロコンピュータ。 - 命令キューから先入先出し方式により命令コードを命令デコーダに出力するステップと、
パイプラインハザード発生期間において、前記命令キューに対する先入先出し方式による命令コードのエンキュー及びデキューを停止し、前記命令キュー内の複数の命令コードを順に命令デコーダに出力するステップと、
パイプラインハザード発生期間において、命令デコーダにおいてデコードされた命令コードが分岐命令の場合、前記分岐命令に応じた分岐先命令のアドレスをフェッチアドレスとして指定するステップと
を具備する
命令処理方法。 - 請求項6に記載の命令処理方法において、
パイプラインハザード発生期間において、前記命令デコーダによってデコードされた命令コードが分岐命令の場合、
パイプラインハザードの解消後、前記分岐命令に応じた分岐先命令を他の命令に先行して前記命令キューに格納するステップと、
パイプラインハザード解消後において前記分岐命令が実行された後、前記分岐先命令を前記命令デコードに出力するステップと
を具備する
命令処理方法。 - 請求項6又は7に記載の命令処理方法において、
前記命令キューにおいて分岐命令が格納されているかの調査が行われたか否かを示すフラグ情報をDFフラグレジスタに保持するステップを更に具備し、
前記命令キュー内の複数の命令コードを順に命令デコーダに出力するステップは、
前記DFフラグレジスタのフラグ情報に基づき、前記命令キューにおいて、分岐命令が格納されているかの調査が行われていない命令コードを前記命令デコーダに出力するステップ
を備える
命令処理方法。 - 請求項6から8のいずれか1項に記載の命令処理方法において、
前記分岐先命令が、前記命令キューにおけるどのレジスタに保持されたかを示すフラグ情報をBFフラグレジスタに保持するステップと、
パイプラインハザード解消後、前記BFフラグレジスタのフラグ情報に基づいて前記命令キュー内における前記分岐先命令を特定するステップと
を更に具備する
命令処理方法。 - 請求項6から9のいずれか1項に記載の命令処理方法において、
パイプラインハザードが発生していない期間、前記命令キューに前記分岐先命令が保持されている場合、前記分岐命令の実行に応じて前記分岐先命令の次のアドレスをフェッチアドレスとして前記命令メモリに指定する
命令処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012199989A JP2014056359A (ja) | 2012-09-11 | 2012-09-11 | マイクロコンピュータ及び命令処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012199989A JP2014056359A (ja) | 2012-09-11 | 2012-09-11 | マイクロコンピュータ及び命令処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2014056359A true JP2014056359A (ja) | 2014-03-27 |
Family
ID=50613631
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012199989A Pending JP2014056359A (ja) | 2012-09-11 | 2012-09-11 | マイクロコンピュータ及び命令処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2014056359A (ja) |
-
2012
- 2012-09-11 JP JP2012199989A patent/JP2014056359A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6898699B2 (en) | Return address stack including speculative return address buffer with back pointers | |
US8601239B2 (en) | Extended register addressing using prefix instruction | |
CN106681695B (zh) | 提前取出分支目标缓冲器 | |
US20120204008A1 (en) | Processor with a Hybrid Instruction Queue with Instruction Elaboration Between Sections | |
KR20150079429A (ko) | 캐시 미시들에 대한 프로세서 읽기 후 쓰기 해저드를 다루기 위한 장치 및 그것의 동작 방법 | |
US20210389979A1 (en) | Microprocessor with functional unit having an execution queue with priority scheduling | |
EP1974254B1 (en) | Early conditional selection of an operand | |
CN112540792A (zh) | 指令处理方法及装置 | |
EP1413953A2 (en) | Instruction prefetch method and apparatus for conditional branch instructions | |
US11055101B2 (en) | Processing apparatus and controlling method for processing apparatus | |
JP2008071061A (ja) | 情報処理装置 | |
US11392383B2 (en) | Apparatus and method for prefetching data items | |
US20070043930A1 (en) | Performance of a data processing apparatus | |
JP2014056359A (ja) | マイクロコンピュータ及び命令処理方法 | |
JP5696210B2 (ja) | プロセッサ及びその命令処理方法 | |
JP5093237B2 (ja) | 命令処理装置 | |
JP4728877B2 (ja) | マイクロプロセッサおよびパイプライン制御方法 | |
EP2348399B1 (en) | System and method for processing interrupts in a computing system | |
JP2010015298A (ja) | 情報処理装置及び命令フェッチ制御方法 | |
EP2416250A1 (en) | Prefetch request circuit | |
US11314505B2 (en) | Arithmetic processing device | |
US10884738B2 (en) | Arithmetic processing device and method of controlling arithmetic processing device | |
US20230205535A1 (en) | Optimization of captured loops in a processor for optimizing loop replay performance | |
US7343481B2 (en) | Branch prediction in a data processing system utilizing a cache of previous static predictions | |
JP2002351658A (ja) | 演算処理装置 |