(57)【特許請求の範囲】
【請求項１】
複数の命令により記述してあるプログラムを記憶するメモリと、
前記プログラムに含まれる分岐命令を実行するときにのみ動作し、前記メモリのバス幅より大きい容量のデータを、前記メモリから読出して予め格納しておく命令キャッシュと、
前記メモリおよび前記命令キャッシュの両方にアクセスし、前記メモリまたは前記命令キャッシュから読出した命令をパイプラインで実行する演算処理部と、
前記メモリから命令を読出すフェッチ処理を停止するための停止信号を生成し、前記メモリに出力するフェッチ処理制御部とを備え、
前記命令キャッシュは、
前記演算処理部で分岐命令を実行するとき、前記メモリにアクセスするアドレスと、予め格納してある命令のアドレスとを比較して一致した場合、当該分岐命令に対する分岐先の命令を格納してあると判定する比較器を含み、
前記フェッチ処理制御部は、
前記比較器が前記命令キャッシュに分岐先の命令を格納してあると判定した場合、前記命令キャッシュに格納してある命令を読出す期間、前記フェッチ処理を停止するための停止信号を生成し、前記メモリに出力する停止処理部であり、
前記比較器は、アドレスが一致した命令に応じて、前記命令キャッシュに格納してある命令を読出すことが可能な回数をヒット量としてカウントし、
前記停止処理部は、前記ヒット量を初期値としてカウンダウンすることで前記メモリへのアクセスを停止する期間を設定するカウンタを含む、データ処理装置。
【請求項２】
前記停止処理部は、分岐先の命令がさらに分岐する場合、前記メモリへのアクセスを停止する処理をキャンセルする、請求項１に記載のデータ処理装置。
【請求項３】
前記命令キャッシュは、前記メモリのバス幅のＮ倍の容量を有し、
前記停止処理部は、前記メモリへアクセスする回数を最大Ｎ−１回停止する、請求項１に記載のデータ処理装置。
【請求項４】
前記演算処理部は、
前記メモリから命令を予め読出して格納しておく命令キューと、
前記命令キューに格納した命令を順次読出して、命令をデコードする命令デコーダと、
前記命令デコーダでデコードした命令を実行する命令実行部と、
前記命令キューからの読出し要求を前記メモリに出力する命令フェッチインターフェース部と、
前記命令デコーダで次にデコードする命令が分岐命令か否かを判定し、当該命令が分岐命令であれば、前記フェッチ処理を停止するための停止信号を生成し、前記命令フェッチインターフェース部に出力するプリデコーダとを含み、
前記フェッチ処理制御部は、前記プリデコーダである、請求項１に記載のデータ処理装置。
【請求項５】
前記プリデコーダは、前記フェッチ処理を停止させた後、判定した分岐命令を前記命令実行部で実行するときに前記フェッチ処理を再開する、請求項４に記載のデータ処理装置。
【請求項６】
前記プリデコーダは、前記命令デコーダで次にデコードする命令と、予め記憶してある停止対象命令とを比較することで、命令が分岐命令か否かを判定する、請求項４に記載のデータ処理装置。
【請求項７】
前記メモリは、命令を読出すときに予め定められたウェイト期間を必要とする、請求項４に記載のデータ処理装置。
【請求項８】
前記プリデコーダは、命令長が各命令により異なる場合、前記命令デコーダで命令をデコードした結果より得られる命令長により、次にデコードする命令を前記命令キューから選択して読出す、請求項６に記載のデータ処理装置。
【請求項９】
前記プリデコーダは、読出した複数の命令のそれぞれについて、分岐命令か否かを並列に判定する複数のサブプリデコーダを有する、請求項８に記載のデータ処理装置。
【請求項１０】
前記プリデコーダは、前記命令デコーダで次にデコードする命令が分岐命令であると判定した場合であっても、前記フェッチ処理を停止するための停止信号を生成しないビット情報を、前記停止対象命令ごとに付加する、請求項６に記載のデータ処理装置。
【請求項１１】
前記命令キャッシュは、
前記演算処理部で分岐命令を実行するとき、前記メモリにアクセスするアドレスと、予め格納してある命令のアドレスとを比較して一致した場合、当該分岐命令に対する分岐先の命令を格納してあると判定する比較器を含み、
前記演算処理部は、
前記メモリから命令を予め読出して格納しておく命令キューと、
前記命令キューに格納した命令を順次読出して、命令をデコードする命令デコーダと、
前記命令デコーダでデコードした命令を実行する命令実行部と、
前記命令キューからの読出し要求を前記メモリおよび前記命令キャッシュに出力する命令フェッチインターフェース部とを含み、
前記フェッチ処理制御部は、
前記比較器が前記命令キャッシュに分岐先の命令を格納してあると判定した場合、前記命令キャッシュに格納してある命令を読出す期間、前記フェッチ処理を停止するための停止信号を生成し、前記メモリに出力する停止処理部と、
前記演算処理部内に設けてあり、前記命令デコーダで次にデコードする命令が分岐命令か否かを判定し、当該命令が分岐命令であれば、前記フェッチ処理を停止するための停止信号を生成し、前記メモリに出力するプリデコーダとを含む、請求項１に記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置に関し、たとえば、複数の命令により記述してあるプログラムを記憶するメモリと、分岐命令を実行するときにのみ動作する命令キャッシュとを備えるデータ処理装置に関する。
【背景技術】
【０００２】
ＣＰＵ（Central  Processing  Unit）などのデータ処理装置では、プログラムを記憶するメモリ以外に、プログラムの命令を一時的に格納する命令キャッシュを設けて、処理の高性能化が図られている。しかし、データ処理装置は、実行する命令が命令キャッシュに含まれていないミスの時にペナルティが発生する。当該ペナルティは、データ処理装置の処理の高性能化を図るためには無視できなかった。そこで、データ処理装置では、メモリおよび命令キャッシュの両方にアクセスを行なうことでペナルティを回避する構成が提案されている。【０００３】
また、命令キャッシュを備えるデータ処理装置の構成が、特許文献１（特開２００８−０５２５１８号公報）および特許文献２（特開２００１−１４２６９８号公報）に開示してある。特許文献１に開示してあるＣＰＵシステムは、ＣＰＵの動作速度がＳＤＲＡＭのバーストリード時の動作速度以下という条件で動作する。コンパレータは、ＣＰＵが分岐命令を処理するときに、命令キャッシュメモリに分岐先の命令が格納されているか否かを判定する。命令キャッシュメモリに分岐先の命令が格納されている場合、当該命令を命令キャッシュメモリから読出す。【０００４】
特許文献２に開示してあるＣＰＵでは、命令用メモリのアクセスと同時にメインメモリのアクセスも行ない、命令用メモリからの命令コードと、メインメモリからの命令コードとをシームレスにフェッチするメモリアクセス方式が採用されている。【０００５】
また、データ処理装置では、メモリから命令を予め読出して格納しておく命令キューに空きがあるとき、実行命令に関係なくメモリから命令キューに命令を読出すフェッチ処理が発生する。このフェッチ処理について、特許文献３（２００６−０４８２５８号公報）、特許文献４（特開平０６−１６１７５０号公報）、特許文献５（特開２０００−３５７０９０号公報）、および特許文献６（特開平０５−０２７９７２号公報）に開示してある。【０００６】
特許文献３に開示してあるデータプロセッサでは、命令のフェッチ制御部と、フェッチ制御部によりフェッチされた命令を保持する命令バッファと、命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部とを含む。そして、フェッチ制御部が、分岐命令の命令アドレスを用いて条件分岐の予測方向とその確度を示す予測情報を取得し、条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチを行なうことが可能であると共に、予測情報に応じて選択的に分岐非予測の命令のフェッチを停止する。【０００７】
特許文献４に開示してあるＣＰＵは、分岐命令に対するプリフェッチタイミングで、タグの状態を検出し、バッファまたは条件コード中のゼロフラグの内容をみて早期に分岐判定を行なう早期分岐条件チェック回路を設けてある。【０００８】
特許文献５に開示してあるＣＰＵは、条件分岐命令によるキャッシュミスの発生時でのメインメモリへのアクセス時間を短縮するために分岐予測機構を内蔵してある。【０００９】
特許文献６に開示してあるＣＰＵは、命令キューとメモリとの間に命令検出部を介在させ、命令キューが読み込んだ命令の中に分岐命令が含まれている場合には、該分岐命令の分岐先アドレスが確定するまでメモリからの命令の読出しを一時停止させる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００８−０５２５１８号公報
【特許文献２】特開２００１−１４２６９８号公報
【特許文献３】特開２００６−０４８２５８号公報
【特許文献４】特開平０６−１６１７５０号公報
【特許文献５】特開２０００−３５７０９０号公報
【特許文献６】特開平０５−０２７９７２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかし、従来のデータ処理装置では、実行する命令が命令キャッシュに含まれていないミスの時にペナルティを回避するために、メモリおよび命令キャッシュの両方にアクセスを行なっている。そのため、従来のデータ処理装置では、命令キャッシュに命令が含まれていてヒットの時もメモリにアクセスするので、メモリおよび命令キャッシュの両方にアクセスする電力を常に消費するという問題があった。【００１２】
また、従来のデータ処理装置では、メモリから命令を予め読出して格納しておく命令キューに空きがあるとき、実行命令に関係なくメモリから命令を読出すフェッチ処理が発生する。そのため、従来のデータ処理装置では、必要のない命令をメモリから読出し、無駄なメモリアクセスにより電力を消費する。特に、分岐命令の直前にフェッチ処理を行なった場合、分岐の結果により実行の必要ない命令をメモリから読出すことで、無駄なメモリアクセスにより電力を消費するという問題があった。【００１３】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１４】
一実施の形態によれば、データ処理装置は、メモリと、命令キャッシュと、演算処理部と、フェッチ処理制御部とを備えている。メモリは、複数の命令により記述してあるプログラムを記憶する。命令キャッシュは、プログラムに含まれる分岐命令を実行するときにのみ動作し、メモリのバス幅より大きい容量のデータを、メモリから読出して予め格納しておく。演算処理部は、メモリおよび命令キャッシュの両方にアクセスし、メモリまたは命令キャッシュから読出した命令をパイプラインで実行する。フェッチ処理制御部は、メモリから命令を読出すフェッチ処理を停止するための停止信号を生成し、メモリに出力する。命令キャッシュは、演算処理部で分岐命令を実行するとき、メモリにアクセスするアドレスと、予め格納してある命令のアドレスとを比較して一致した場合、当該分岐命令に対する分岐先の命令を格納してあると判定する比較器を含み、フェッチ処理制御部は、比較器が命令キャッシュに分岐先の命令を格納してあると判定した場合、命令キャッシュに格納してある命令を読出す期間、フェッチ処理を停止するための停止信号を生成し、メモリに出力する停止処理部であり、比較器は、アドレスが一致した命令に応じて、命令キャッシュに格納してある命令を読出すことが可能な回数をヒット量としてカウントし、停止処理部は、ヒット量を初期値としてカウンダウンすることでメモリへのアクセスを停止する期間を設定するカウンタを含む。
【発明の効果】
【００１５】
前記一実施の形態によれば、データ処理装置は、メモリにアクセスするための電力の消費を低減することができる。特に、データ処理装置は、メモリおよび命令キャッシュの両方にアクセスするときに消費する電力や、分岐の結果により実行の必要ない命令をメモリから読出すためのフェッチ処理に消費する電力の消費を低減することができる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１に係るデータ処理装置の構成を示すブロック図である。
【図２】実施の形態１に係るデータ処理装置の命令キャッシュのさらに詳しい構成を示すブロック図である。
【図３】実施の形態１に係るデータ処理装置の停止処理部のさらに詳しい構成を示すブロック図である。
【図４】実施の形態１に係るデータ処理装置の動作を説明するためのタイミングチャートである。
【図５】実施の形態１に係るデータ処理装置の分岐通知による動作を説明するためのタイミングチャートである。
【図６】実施の形態２に係るデータ処理装置の構成を示すブロック図である。
【図７】実施の形態２に係るデータ処理装置の命令キャッシュのさらに詳しい構成を示すブロック図である。
【図８】実施の形態２に係るデータ処理装置の動作を説明するためのタイミングチャートである。
【図９】実施の形態３に係るデータ処理装置の構成を示すブロック図である。
【図１０】プリデコーダを含まない構成のデータ処理装置におけるプリフェッチ処理のタイミングを説明するためのタイミングチャートである。
【図１１】実施の形態３に係るデータ処理装置の命令キューおよびプリデコーダの構成を示すブロック図である。
【図１２】実施の形態３に係るデータ処理装置におけるプリフェッチ処理のタイミングを説明するためのタイミングチャートである。
【図１３】実施の形態３に係るデータ処理装置におけるプリフェッチ処理の条件分岐命令を実行する場合のタイミングを説明するためのタイミングチャートである。
【図１４】実施の形態４に係るデータ処理装置におけるプリフェッチ処理のタイミングを説明するためのタイミングチャートである。
【図１５】実施の形態５に係るデータ処理装置の命令キューおよびプリデコーダの構成を示すブロック図である。
【図１６】実施の形態５の変形例に係るデータ処理装置の命令キューおよびプリデコーダの構成を示すブロック図である。
【図１７】実施の形態６に係るデータ処理装置のプリデコーダの構成を示すブロック図である。
【図１８】実施の形態６に係るデータ処理装置におけるプリフェッチ処理のタイミングを説明するためのタイミングチャートである。
【図１９】実施の形態７に係るデータ処理装置の構成を示すブロック図である。
【図２０】実施の形態７に係るデータ処理装置の動作を説明するためのタイミングチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明に係る実施の形態について図面を参照して説明する。
（実施の形態１）
図１は、実施の形態１に係るデータ処理装置の構成を示すブロック図である。図１に示すデータ処理装置１００は、ＣＰＵ１、メモリ２、命令キャッシュ３、および停止処理部４を含み、ＣＰＵ１からメモリ２および命令キャッシュ３の両方にアクセスし、メモリ２または命令キャッシュ３から命令を読出す（フェッチ処理）。データ処理装置１００は、メモリ２および命令キャッシュ３の両方にアクセスすることで、キャッシュミスのペナルティを減らしている。
【００１８】
ＣＰＵ１は、メモリ２および命令キャッシュ３から読出した命令をパイプラインで実行することができる。また、ＣＰＵ１は、メモリ２および命令キャッシュ３にアクセスするとき、命令の読出しを行なうリクエストと、読出し先の命令のアドレスをメモリ２および命令キャッシュ３に出力する。さらに、ＣＰＵ１は、読出した命令が分岐命令である場合に、分岐通知を出力する。
【００１９】
メモリ２は、複数の命令により記述してあるプログラムを記憶している。メモリ２は、ＣＰＵ１からのリクエストおよびアドレスに基づいて、当該アドレスに記憶してある命令をＣＰＵ１に出力する。メモリ２からＣＰＵ１に命令を出力するためのバス幅が６４ビットである。
【００２０】
命令キャッシュ３は、プログラムに含まれる分岐命令を実行するときにのみ動作し、メモリ２のバス幅により大きい容量のデータをメモリ２から読出して予め格納してある。具体的に、命令キャッシュ３は、メモリ２のバス幅の２倍にあたる１２８ビットのデータを格納することができる。そして、命令キャッシュ３は、格納してあるデータを６４ビットの前半データと、６４ビットの後半データとに分けて格納してある。なお、前半データと、後半データとに格納される命令は、連続した命令である。
【００２１】
さらに、命令キャッシュ３は、格納してある命令のアドレスを、ＴＡＧ＿ＡＤＤＲ情報として記憶してある。また、命令キャッシュ３は、ＣＰＵ１からリクエストがあった命令のアドレスと、ＴＡＧ＿ＡＤＤＲ情報に記憶してあるアドレスとを比較する比較器３１を含んでいる。
【００２２】
比較器３１は、ＣＰＵ１で分岐命令を実行するとき、メモリ２にアクセスするアドレス（ＣＰＵ１からリクエストがあった命令のアドレス）と、予め格納してある命令のアドレス（ＴＡＧ＿ＡＤＤＲ情報に記憶してあるアドレス）とを比較する。そして、比較器３１は、命令キャッシュ３に格納してある命令の連続性を利用して、ＣＰＵ１からリクエストがあった命令に対する分岐先の命令が命令キャッシュ３に格納してあることを判定する。具体的に、比較器３１は、メモリ２にアクセスするアドレスが前半データに格納してある命令のアドレスと一致した場合、分岐先の命令が後半データに格納してあると判定する。
【００２３】
図２は、実施の形態１に係るデータ処理装置１００の命令キャッシュ３のさらに詳しい構成を示すブロック図である。図２に示す比較器３１は、アドレス比較・ヒット判定部３１１、ヒット量カウンタ３１２を含んでいる。アドレス比較・ヒット判定部３１１は、ＣＰＵ１からのリクエストにより起動され、メモリ２にアクセスするアドレスと、ＴＡＧ＿ＡＤＤＲ情報に記憶してあるアドレスとを比較し、両アドレスが一致した場合（ヒットの時）ヒットの情報を、一致しない場合（ミスの時）ミスの情報を出力する。
【００２４】
ヒット量カウンタ３１２は、メモリ２にアクセスするアドレスが、前半データに格納してある命令のアドレスと一致した場合、ヒット量“２”を出力する。また、ヒット量カウンタ３１２は、メモリ２にアクセスするアドレスが、後半データに格納してある命令のアドレスと一致する場合、ヒット量“１”を出力する。なお、ヒット量は、ＣＰＵ１が命令キャッシュ３に何回アクセスして、データを読出すことができるかを示す値である。具体的に、ヒット量“２”の場合、ＣＰＵ１は、命令キャッシュ３に２回アクセスして、前半データと後半データとを読出すことができる。また、ヒット量“１”の場合、ＣＰＵ１は、命令キャッシュ３に１回アクセスして、後半データのみを読出すことができる。
【００２５】
停止処理部４は、比較器３１が命令キャッシュ３に分岐先の命令を格納してあると判定した場合、命令キャッシュ３に格納してある命令を読出す期間、フェッチ処理を停止するための停止信号を生成し、メモリ２に出力する。
【００２６】
図３は、実施の形態１に係るデータ処理装置１００の停止処理部４のさらに詳しい構成を示すブロック図である。停止処理部４は、残り停止量カウンタ４１を含んでいる。残り停止量カウンタ４１は、ＣＰＵ１からのリクエストにより起動され、命令キャッシュ３からのヒットまたはミスの情報、ヒット量に基づいて残り停止量カウンタ量をセットし、当該残り停止量カウンタ量が“０”になると停止信号を生成し、メモリ２に出力する。
【００２７】
具体的に、残り停止量カウンタ４１は、命令キャッシュ３からのヒットまたはミスの情報、ヒット量から残り停止量カウンタ量の初期値を算出する。たとえば、残り停止量カウンタ４１は、命令キャッシュ３からヒットの情報と、ヒット量“２”とを受取った場合、停止量カウンタ量を“１”にセットし、命令キャッシュ３からヒットの情報と、ヒット量“１”とを受取った場合、停止量カウンタ量を“０”にセットする。初期値をセットした残り停止量カウンタ４１は、ＣＰＵ１からのリクエストがあるたびに停止量カウンタ量を“１”ずつカウントダウンする。なお、残り停止量カウンタ４１は、ＣＰＵ１から分岐信号を受取った場合、停止量カウンタ量がいずれの値であっても、“０”にセットして、停止信号を生成しない。
【００２８】
なお、データ処理装置１００は、メモリ２および命令キャッシュ３の両方にアクセスして読出した命令をセレクタ５でいずれか一方の命令を選択してＣＰＵ１に読出す。たとえば、セレクタ５は、メモリ２および命令キャッシュ３から読出した命令が同じ場合、命令キャッシュ３から読出した命令を選択し、メモリ２および命令キャッシュ３から読出した命令が異なる場合、メモリ２から読出した命令を選択する。
【００２９】
次に、本実施の形態１に係るデータ処理装置１００の動作について説明する。図４は、実施の形態１に係るデータ処理装置１００の動作を説明するためのタイミングチャートである。図４に示すタイミングチャートには、ＣＰＵ１のクロック信号、読出し先アドレス、ヒット情報、ヒット量、停止信号、およびメモリ２へのアクセス信号の波形がそれぞれ示してある。
【００３０】
読出し先の命令のアドレスは、ＣＰＵ１の１つのクロック信号に対して１つのアドレスをＣＰＵ１からメモリ２および命令キャッシュ３に出力される。図４に示す例で、読出し先の命令のアドレスは、アドレスＡ、アドレスＡ＋１、アドレスＡ＋２、アドレスＡ＋３、アドレスＡ＋４、およびアドレスＡ＋５の順で、ＣＰＵ１からメモリ２および命令キャッシュ３に出力される。
【００３１】
まず、命令キャッシュ３は、前半データにアドレスＡ＋１の命令を、後半データにアドレスＡ＋２の命令をそれぞれ格納してある。そして、比較器３１は、読出し先の命令のアドレスとしてアドレスＡ＋１を受取った場合、受取ったアドレスＡ＋１と、ＴＡＧ＿ＡＤＤＲ情報に記憶してあるアドレスとを比較する。比較器３１は、受取ったアドレスＡ＋１が前半データに格納してある命令のアドレスと一致するので、命令の連続性により後半データに格納してある命令のアドレスがアドレスＡ＋２であると判定できる。そのため、比較器３１は、ヒットの情報およびヒット量“２”を停止処理部４に出力する。つまり、図４に示すように、読出し先の命令のアドレスがアドレスＡ＋１のタイミングに、ヒット情報が“Ｈ”レベルとなり、ヒット量“２”となる。
【００３２】
停止処理部４は、後半データにアドレスＡ＋２の命令が格納されているので、アドレスＡ＋２の命令を命令キャッシュ３から読出す期間、メモリ２へのアクセスを停止することができる。そのため、残り停止量カウンタ４１は、比較器３１（命令キャッシュ３）からヒットの情報と、ヒット量“２”とを受取ると、停止量カウンタ量を“１”にセットし、メモリ２へのアクセス１回分の期間、停止信号をメモリ２に出力する。つまり、図４に示すように、読出し先の命令のアドレスがアドレスＡ＋２のタイミングに、停止信号が“Ｈ”レベルとなる。
【００３３】
メモリ２は、図１に示す演算処理部６で、停止信号の反転信号と、ＣＰＵ１からのリクエストの信号とのＡＮＤ演算を行なった信号がメモリ２へのアクセス信号として入力される。つまり、ＣＰＵ１からのリクエストの信号が“Ｈ”レベルで停止信号が“Ｌ”レベルの場合、メモリ２へのアクセス信号は、“Ｈ”レベルであるが、停止信号が“Ｈ”レベルになると“Ｌ”レベルとなる。図４に示すように、読出し先の命令のアドレスがアドレスＡ＋２のタイミングに、停止信号が“Ｈ”レベルとなるので、メモリ２へのアクセス信号は、“Ｌ”レベルとなる。
【００３４】
メモリ２へのアクセス信号が“Ｌ”レベルとなると、ＣＰＵ１からメモリ２へのアクセスが停止し、データ処理装置１００は、ＣＰＵ１からメモリ２へのアクセスが停止している期間、消費電力を削減することができる。
【００３５】
前述したように、命令キャッシュ３は、命令の連続性により、前半データにアドレスＡ＋１の命令を、後半データにアドレスＡ＋２の命令をそれぞれ格納してある。しかし、ＣＰＵ１がアドレスＡ＋１の命令を実行した結果、次に読出す命令のアドレスがアドレスＢとなる場合、ＣＰＵ１からメモリ２へのアクセスを停止することができない。そこで、ＣＰＵ１は、停止処理部４に対して分岐通知を出力して、停止信号が“Ｈ”レベルとなるのをキャンセルする。
【００３６】
図５は、実施の形態１に係るデータ処理装置１００の分岐通知による動作を説明するためのタイミングチャートである。図５に示すタイミングチャートには、ＣＰＵ１のクロック信号、読出し先アドレス、ヒット情報、ヒット量、停止信号、およびメモリ２へのアクセス信号の波形がそれぞれ示してある。
【００３７】
読出し先の命令のアドレスは、ＣＰＵ１の１つのクロック信号に対して１つのアドレスをＣＰＵ１からメモリ２および命令キャッシュ３に出力される。図５に示す例で、読出し先の命令のアドレスは、アドレスＡ、アドレスＡ＋１、アドレスＢ、アドレスＢ＋１、アドレスＢ＋２、およびアドレスＢ＋３の順で、ＣＰＵ１からメモリ２および命令キャッシュ３に出力される。つまり、ＣＰＵ１がアドレスＡ＋１の命令を実行した結果、次に読出す命令のアドレスがアドレスＡ＋２、アドレスＡ＋３、アドレスＡ＋４、およびアドレスＡ＋５の順から、アドレスＢ、アドレスＢ＋１、アドレスＢ＋２、およびアドレスＢ＋３の順に変更されている。
【００３８】
しかし、命令キャッシュ３は、命令の連続性に従い、前半データにアドレスＡ＋１の命令を、後半データにアドレスＡ＋２の命令をそれぞれ格納してある。そして、比較器３１は、読出し先の命令のアドレスとしてアドレスＡ＋１を受取った場合、受取ったアドレスＡ＋１と、ＴＡＧ＿ＡＤＤＲ情報に記憶してあるアドレスとを比較する。比較器３１は、受取ったアドレスＡ＋１が前半データに格納してある命令のアドレスと一致するので、命令の連続性により後半データに格納してある命令のアドレスがアドレスＡ＋２であると判定する。そのため、比較器３１は、ヒットの情報およびヒット量“２”を停止処理部４に出力する。つまり、図５に示すように、読出し先の命令のアドレスがアドレスＡ＋１のタイミングに、ヒット情報が“Ｈ”レベルとなり、ヒット量“２”となる。
【００３９】
停止処理部４は、停止信号をメモリ２に出力する処理を行なうことになる。しかし、アドレスＡ＋１の命令がアドレスＢの命令に分岐すると、次にＣＰＵ１からリクエストがある命令のアドレスがアドレスＡ＋２ではなく、アドレスＢになる。そのため、ＣＰＵ１からメモリ２へのアクセスが停止すると、ＣＰＵ１は、キャッシュミスのペナルティを受けることになる。そこで、ＣＰＵ１は、キャッシュミスを回避するため、命令を実行した結果、次に読出す命令が分岐する場合、分岐通知を停止処理部４に出力して、停止信号をメモリ２に出力する処理をキャンセルする。つまり、図５に示すように、読出し先の命令のアドレスがアドレスＡ＋２のタイミングに、停止信号が“Ｈ”レベルとなるのをキャンセルする。
【００４０】
メモリ２は、図１に示す演算処理部６で、停止信号の反転信号と、ＣＰＵ１からのリクエストの信号とのＡＮＤ演算を行なった信号がメモリ２へのアクセス信号として入力される。そのため、ＣＰＵ１からのリクエストの信号が“Ｈ”レベルで、停止信号が“Ｌ”レベルとなるので、メモリ２へのアクセス信号は、“Ｈ”レベルのまま維持される。
【００４１】
メモリ２へのアクセス信号が“Ｈ”レベルのまま維持されると、ＣＰＵ１からメモリ２へのアクセスが停止せず、データ処理装置１００は、ＣＰＵ１からメモリ２と命令キャッシュ３の両方にアクセスして、キャッシュミスのペナルティを減らすことができる。
【００４２】
以上のように、本実施の形態１に係るデータ処理装置１００は、比較器３１が命令キャッシュ３に分岐先の命令を格納してあると判定した場合、停止処理部４が、命令キャッシュ３に格納してある命令を読出す期間、フェッチ処理を停止するための停止信号を生成し、メモリ２に出力する。そのため、データ処理装置１００は、ＣＰＵ１からメモリ２へのアクセスが停止している期間、消費電力を削減することができる。
【００４３】
なお、データ処理装置１００では、メモリ２をＣＰＵ１と同じ半導体基板上に形成してある場合（ワンチップの半導体装置）について説明したが、メモリ２をＣＰＵ１の外部にある異なる半導体基板上に形成してもよい。ただし、メモリ２をＣＰＵ１の外部にある異なる半導体基板上に形成した場合、データ処理装置１００は、ＣＰＵ１とメモリ２とを接続するためのＣＰＵインターフェースを設ける必要がある。
【００４４】
また、データ処理装置１００は、命令長が固定の場合に限定されるものではなく、命令長が可変の場合であってもよい。
【００４５】
（実施の形態２）
実施の形態１に係るデータ処理装置１００では、メモリ２のバス幅の２倍にあたるデータを格納することができる命令キャッシュ３を含む構成について説明した。しかし、命令キャッシュ３に格納することができるデータの容量は、メモリ２のバス幅の２倍に限定されるものではない。そこで、本実施の形態２に係るデータ処理装置では、実施の形態１に比べて格納することができるデータが大きい命令キャッシュを含む構成について説明する。
【００４６】
図６は、実施の形態２に係るデータ処理装置の構成を示すブロック図である。図６に示すデータ処理装置２００は、ＣＰＵ１、メモリ２、命令キャッシュ３ａ、および停止処理部４を含み、ＣＰＵ１からメモリ２および命令キャッシュ３ａの両方にアクセスし、メモリ２または命令キャッシュ３から命令を読出す（フェッチ処理）。なお、データ処理装置２００は、実施の形態１に係るデータ処理装置１００と同じ構成要素について、同じ符号を付して詳細な説明を繰返さない。
【００４７】
命令キャッシュ３ａは、プログラムに含まれる分岐命令を実行するときにのみ動作し、メモリ２のバス幅により大きい容量のデータをメモリ２から読出して予め格納してある。具体的に、命令キャッシュ３ａは、メモリ２のバス幅の４倍にあたる２５６ビットのデータを格納することができる。そして、命令キャッシュ３ａは、格納してあるデータを６４ビットずつ、Ｄ０データ、Ｄ１データ、Ｄ２データ、およびＤ３データの４つに分けて格納してある。なお、Ｄ０データ〜Ｄ３データに格納してある命令は、連続した命令である。
【００４８】
さらに、命令キャッシュ３ａは、格納してある命令のアドレスを、ＴＡＧ＿ＡＤＤＲ情報として記憶してある。また、命令キャッシュ３ａは、ＣＰＵ１からリクエストがあった命令のアドレスと、ＴＡＧ＿ＡＤＤＲ情報に記憶してあるアドレスとを比較する比較器３１ａを含んでいる。
【００４９】
比較器３１ａは、ＣＰＵ１で分岐命令を実行するとき、メモリ２にアクセスするアドレス（ＣＰＵ１からリクエストがあった命令のアドレス）と、予め格納してある命令のアドレス（ＴＡＧ＿ＡＤＤＲ情報に記憶してあるアドレス）とを比較する。そして、比較器３１ａは、命令キャッシュ３ａに格納してある命令の連続性を利用して、ＣＰＵ１からリクエストがあった命令に対する分岐先の命令が命令キャッシュ３ａに格納してあると判定する。具体的に、比較器３１ａは、メモリ２にアクセスするアドレスがＤ０データに格納してある命令のアドレスと一致した場合、分岐先の命令がＤ１データ〜Ｄ３データに格納してあると判定する。
【００５０】
図７は、実施の形態２に係るデータ処理装置２００の命令キャッシュ３ａのさらに詳しい構成を示すブロック図である。図７に示す比較器３１ａは、アドレス比較・ヒット判定部３１１ａ、ヒット量カウンタ３１２ａを含んでいる。アドレス比較・ヒット判定部３１１ａは、ＣＰＵ１からのリクエストにより起動され、メモリ２にアクセスするアドレスと、ＴＡＧ＿ＡＤＤＲ情報に記憶してあるアドレスとを比較し、両アドレスが一致した場合（ヒットした場合）ヒットの情報を、一致しない場合ミスの情報を出力する。
【００５１】
ヒット量カウンタ３１２ａは、メモリ２にアクセスするアドレスが、Ｄ０データに格納してある命令のアドレスと一致した場合、ヒット量“４”を出力する。ヒット量カウンタ３１２ａは、メモリ２にアクセスするアドレスが、Ｄ１データに格納してある命令のアドレスと一致する場合、ヒット量“３”を出力する。ヒット量“４”を出力する。ヒット量カウンタ３１２ａは、メモリ２にアクセスするアドレスが、Ｄ２データに格納してある命令のアドレスと一致する場合、ヒット量“２”を出力する。ヒット量“４”を出力する。ヒット量カウンタ３１２ａは、メモリ２にアクセスするアドレスが、Ｄ３データに格納してある命令のアドレスと一致する場合、ヒット量“１”を出力する。なお、ヒット量は、ＣＰＵ１が命令キャッシュ３ａに何回アクセスして、データを読出すことができるかを示す値である。具体的に、ヒット量“４”の場合、ＣＰＵ１は、命令キャッシュ３ａに４回アクセスして、Ｄ１データ〜Ｄ３データの命令を読出すことができる。
【００５２】
次に、本実施の形態２に係るデータ処理装置２００の動作について説明する。図８は、実施の形態２に係るデータ処理装置２００の動作を説明するためのタイミングチャートである。図８に示すタイミングチャートには、ＣＰＵ１のクロック信号、読出し先アドレス、ヒット情報、ヒット量、停止信号、およびメモリ２へのアクセス信号の波形がそれぞれ示してある。
【００５３】
読出し先の命令のアドレスは、ＣＰＵ１の１つのクロック信号に対して１つのアドレスをＣＰＵ１からメモリ２および命令キャッシュ３ａに出力される。図８に示す例で、読出し先の命令のアドレスは、アドレスＡ、アドレスＡ＋１、アドレスＡ＋２、アドレスＡ＋３、アドレスＡ＋４、およびアドレスＡ＋５の順で、ＣＰＵ１からメモリ２および命令キャッシュ３ａに出力される。
【００５４】
まず、命令キャッシュ３ａは、Ｄ０データにアドレスＡ＋１の命令を、Ｄ１データにアドレスＡ＋２の命令、Ｄ２データにアドレスＡ＋３の命令を、およびＤ３データにアドレスＡ＋４の命令をそれぞれ格納してある。そして、比較器３１ａは、読出し先の命令のアドレスとしてアドレスＡ＋１を受取った場合、受取ったアドレスＡ＋１と、ＴＡＧ＿ＡＤＤＲ情報に記憶してあるアドレスとを比較する。比較器３１ａは、受取ったアドレスＡ＋１がＤ０データに格納してある命令のアドレスと一致するので、命令の連続性によりＤ１データ〜Ｄ３データに格納してある命令のアドレスがアドレスＡ＋２〜アドレスＡ＋４であると判定できる。そのため、比較器３１ａは、ヒットの情報およびヒット量“４”を停止処理部４に出力する。つまり、図８に示すように、読出し先の命令のアドレスがアドレスＡ＋１のタイミングに、ヒット情報が“Ｈ”レベルとなり、ヒット量“４”となる。
【００５５】
停止処理部４は、Ｄ１データ〜Ｄ３データにアドレスＡ＋２〜アドレスＡ＋４の命令が格納されているので、アドレスＡ＋２〜アドレスＡ＋４の命令を命令キャッシュ３から読出す期間、メモリ２へのアクセスを停止することができる。そのため、残り停止量カウンタ４１は、比較器３１ａ（命令キャッシュ３ａ）からヒットの情報と、ヒット量“４”とを受取ると、停止量カウンタ量を“３”にセットし、メモリ２へのアクセス３回分の期間、停止信号をメモリ２に出力する。つまり、図８に示すように、読出し先の命令のアドレスがアドレスＡ＋２〜アドレスＡ＋４のタイミングに、停止信号が“Ｈ”レベルとなる。
【００５６】
メモリ２は、図１に示す演算処理部６で、停止信号の反転信号と、ＣＰＵ１からのリクエストの信号とのＡＮＤ演算を行なった信号がメモリ２へのアクセス信号として入力される。つまり、ＣＰＵ１からのリクエストの信号が“Ｈ”レベルで停止信号が“Ｌ”レベルの場合、メモリ２へのアクセス信号は、“Ｈ”レベルであるが、停止信号が“Ｈ”レベルになると“Ｌ”レベルとなる。図８に示すように、読出し先の命令のアドレスがアドレスＡ＋２〜アドレスＡ＋４のタイミングに、停止信号が“Ｈ”レベルとなるので、メモリ２へのアクセス信号は、“Ｌ”レベルとなる。
【００５７】
メモリ２へのアクセス信号が“Ｌ”レベルとなると、ＣＰＵ１からメモリ２へのアクセスが停止し、データ処理装置２００は、ＣＰＵ１からメモリ２へのアクセスが停止している期間、消費電力を削減することができる。
【００５８】
以上のように、本実施の形態２に係るデータ処理装置２００は、命令キャッシュ３ａが、メモリ２のバス幅の４倍の容量を有し、停止処理部４が、メモリ２へアクセスする回数を最大３回停止するので、本実施の形態１に比べてメモリ２へのアクセスを停止する期間が長くなり、消費電力をより削減することができる。
【００５９】
なお、命令キャッシュ３ａの容量は、４倍に限定されるものではなく、メモリのバス幅のＮ倍の容量を有し、停止処理部４が、メモリ２へアクセスする回数を最大Ｎ−１回停止するように構成してもよい。
【００６０】
（実施の形態３）
実施の形態１および２に係るデータ処理装置１００，２００では、ＣＰＵ１の外部に設けた停止処理部４（フェッチ処理制御部）を利用してメモリ２へのアクセスを停止する構成について説明した。しかし、ＣＰＵ１は、内部に含まれる命令キューに空きがある場合、メモリ２にアクセスして、当該メモリ２から命令を読出すプリフェッチ処理を行なっている。そこで、本実施の形態３に係るデータ処理装置では、ＣＰＵの内部にフェッチ処理制御部を設けて、メモリ２へのアクセスを停止する構成について説明する。
【００６１】
図９は、本実施の形態３に係るデータ処理装置の構成を示すブロック図である。図９に示すデータ処理装置３００は、ＣＰＵ１、およびＣＰＵインターフェース７を含み、ＣＰＵインターフェース７を介してＣＰＵ１からメモリ２にアクセスし、メモリ２から命令を読出す（プリフェッチ処理）。なお、データ処理装置３００は、実施の形態１に係るデータ処理装置１００と同じ構成要素について、同じ符号を付して詳細な説明を繰返さない。
【００６２】
データ処理装置３００は、メモリ２のアクセスに数ウェイトの待ち期間が必要であっても、命令供給能力が十分であれば、通常時の性能は低下しない。そのため、データ処理装置３００は、分岐命令を実行するときのみ性能劣化を許容すればよい。
【００６３】
ＣＰＵ１は、命令キュー１１、命令デコーダ１２、データパス１３、命令フェッチインターフェース部１４、およびプリデコーダ１５を含んでいる。命令キュー１１は、メモリ２から命令を予め読出して（プリフェッチ処理）格納しておくための記憶部である。命令デコーダ１２は、命令キューに格納した命令を順次読出して、命令をデコードするＣＰＵＣＮＴ部の一部である。データパス１３は、命令デコーダ１２でデコードした命令を実行する命令実行部である。命令フェッチインターフェース部１４は、命令キュー１１からの読出し要求（ＩＦＲＥＱ）をメモリ２に出力する。
【００６４】
プリデコーダ１５は、命令デコーダ１２で次にデコードする命令が分岐命令か否かを判定し、当該命令が分岐命令であれば、プリフェッチ処理を停止するための停止信号を生成し、命令フェッチインターフェース部１４に出力する。つまり、プリデコーダ１５は、フェッチ処理制御部として機能し、メモリ２へのアクセスを停止することができる。
【００６５】
本実施の形態３に係るデータ処理装置３００の動作を説明する前に、プリデコーダ１５を含まない構成のデータ処理装置の動作を説明する。図１０は、プリデコーダ１５を含まない構成のデータ処理装置におけるプリフェッチ処理のタイミングを説明するためのタイミングチャートである。図１０（ａ）は、分岐命令を実行するタイミングにプリフェッチ処理を行なう例で、図１０（ｂ）は、分岐命令を実行する前のタイミングにプリフェッチ処理を行なう例である。
【００６６】
ここで、図１０に示すタイミングチャートでは、分岐命令、分岐先命令、およびプリフェッチ処理のそれぞれのタイミングが図示してある。なお、分岐命令、および分岐先命令には、命令フェッチステージＩＦと、命令デコードステージＤと、および実行ステージＥとを含んでいる。命令フェッチステージＩＦ（Instruction  Fetch）では、命令キューに格納してある命令を命令デコーダに読出す処理が行なわれる。命令デコードステージＤ（Decode）では、命令フェッチステージＩＦから供給された命令のデコード処理が行なわれる。実行ステージＥ（Execute）では、命令デコードステージＤでデコードされた命令の実行が行なわれる。例えば、算術論理演算や分岐判定処理などが行なわれる。
【００６７】
ＣＰＵは、図１０に示すように、分岐命令および分岐先命令の命令フェッチステージＩＦおよび命令デコードステージＤのそれぞれが１クロックで処理され、１ウェイトでメモリにアクセスするプリフェッチ処理を２クロックで処理する。そのため、図１０（ａ）に示すタイミングチャートに示すように、ＣＰＵは、命令フェッチステージＩＦを開始するタイミングで、プリフェッチ処理の実行が開始されれば、実行ステージＥの１クロック目から分岐先命令のプリフェッチ処理を実行することができる。
【００６８】
実行ステージＥの１クロック目から分岐先命令のプリフェッチ処理を実行することができれば、ＣＰＵは、分岐命令の実行ステージＥの３クロック目から分岐先命令の命令フェッチステージＩＦを実行することができる。つまり、ＣＰＵは、分岐先命令の命令フェッチステージＩＦが実行待ちとなる期間（ＩＦ−ｓｔａｌｌ）を１クロックに抑えることができる。
【００６９】
しかし、図１０（ｂ）に示すタイミングチャートに示すように、ＣＰＵは、命令デコードステージＤを開始するタイミングで、プリフェッチ処理の実行が開始されれば、実行ステージＥの１クロック目から分岐先命令のプリフェッチ処理を実行することができない。そのため、ＣＰＵは、実行ステージＥの１クロック目は、別の命令のプリフェッチ処理でメモリにアクセスを行なっているので、分岐先命令のプリフェッチ処理を実行するためにメモリにアクセスすることができない。よって、ＣＰＵは、分岐先命令のプリフェッチ処理は、分岐命令の実行ステージＥの２クロック目から開始されるので、分岐先命令の命令フェッチステージＩＦが実行待ちとなる期間（ＩＦ−ｓｔａｌｌ）を２クロック分必要となる。
【００７０】
また、分岐命令の命令デコードステージＤの前に開始されたプリフェッチ処理は、分岐先命令とは異なる命令をメモリから読出しているので、実行に必要のない命令をメモリから読出しており無駄なプリフェッチ処理である。
【００７１】
そこで、本実施の形態３に係るデータ処理装置３００では、プリデコーダ１５を設け、分岐命令前のクロックに、プリフェッチ処理を停止する機構を導入することで、メモリ２への不要なアクセスを削減し、消費電力を削減している。
【００７２】
図１１は、実施の形態３に係るデータ処理装置３００の命令キュー１１およびプリデコーダ１５の構成を示すブロック図である。プリデコーダ１５は、記憶部１５１、比較部１５２、および演算部１５３を含んでいる。記憶部１５１は、プリフェッチ処理を停止する必要のある分岐命令（停止対象命令）を予め記憶してある。記憶部１５１は、たとえば、分岐命令１から分岐命令ＮまでのＮ個の分岐命令を記憶してある。
【００７３】
比較部１５２は、命令キュー１１から読出した対象命令と、記憶部１５１に予め記憶してある分岐命令（停止対象命令）とを比較する。演算部１５３は、対象命令と、記憶部１５１に記憶してある分岐命令のそれぞれとを比較した結果を演算して停止信号を生成する。演算部１５３で生成した停止信号は、増幅器１５４で予め定められた電圧レベルに増幅され、命令フェッチインターフェース部１４に出力される。
【００７４】
なお、命令キュー１１は、セレクタ１１ａを有し、当該セレクタ１１ａが、選択信号に基づき格納してある命令から次に実行する命令を選択して比較部１５２に出力する。
【００７５】
次に、データ処理装置３００が、プリデコーダ１５を用いてプリフェッチ処理を停止する動作について説明する。図１２は、実施の形態３に係るデータ処理装置３００におけるプリフェッチ処理のタイミングを説明するためのタイミングチャートである。図１２に示すタイミングチャートでは、分岐命令、分岐先命令、およびプリフェッチ処理のそれぞれのタイミングが図示してある。なお、分岐命令、および分岐先命令には、命令フェッチステージＩＦと、命令デコードステージＤと、および実行ステージＥとを含んでいる。
【００７６】
ＣＰＵ１は、図１２に示すように、分岐命令および分岐先命令の命令フェッチステージＩＦおよび命令デコードステージＤのそれぞれが１クロックで処理され、ノーウェイトでメモリ２にアクセスするプリフェッチ処理を１クロックで処理している。そして、ＣＰＵ１は、命令フェッチステージＩＦで、命令キュー１１から命令デコーダ１２に命令を読出すとともに、プリデコーダ１５にも当該命令を出力する。
【００７７】
プリデコーダ１５は、命令フェッチステージＩＦで入力された命令（対象命令）が分岐命令であるか否かを判定（分岐判定）する。プリデコーダ１５は、命令が分岐命令であると判定した場合、命令デコードステージＤにおいて、命令の実行に必要のない命令のプリフェッチ処理を停止する。なお、命令フェッチインターフェース部１４は、停止信号が“１”の場合、メモリ２からの読出し要求（ＩＦＲＥＱ）として“０”を出力する。
【００７８】
なお、プリデコーダ１５は、分岐命令のみでなく条件分岐命令であっても同様に動作することができる。具体的に、図１３は、実施の形態３に係るデータ処理装置３００におけるプリフェッチ処理の条件分岐命令を実行する場合のタイミングを説明するためのタイミングチャートである。ＣＰＵ１は、図１３に示すように、分岐命令および分岐先命令の命令フェッチステージＩＦおよび命令デコードステージＤのそれぞれが１クロックで処理され、ノーウェイトでメモリ２にアクセスするプリフェッチ処理を１クロックで処理している。そして、ＣＰＵ１は、命令フェッチステージＩＦで、命令キュー１１から命令デコーダ１２に命令を読出すとともに、プリデコーダ１５にも当該命令を出力する。
【００７９】
プリデコーダ１５は、命令フェッチステージＩＦで入力された命令（対象命令）が条件分岐命令であるか否かを判定（分岐判定）する。プリデコーダ１５は、命令が条件分岐命令であると判定した場合、命令デコードステージＤにおいて、命令の実行に必要のない命令のプリフェッチ処理を停止する。しかし、ＣＰＵ１は、条件分岐先命令が分岐しない（non-taken）命令である場合、プリフェッチ処理を再開する。
【００８０】
以上のように、本実施の形態３に係るデータ処理装置３００は、プリデコーダ１５が、命令デコーダ１２で次にデコードする命令が分岐命令か否かを判定し、当該命令が分岐命令であれば、フェッチ処理を停止するための停止信号を生成する。そのため、データ処理装置３００は、実行に必要のない命令をメモリ２から読出す無駄なプリフェッチ処理を停止することができる。さらに、データ処理装置３００は、無駄なプリフェッチ処理（メモリ２へのアクセス）を停止することで消費電力をより削減することができる。また、データ処理装置３００では、分岐命令の開始から命令フェッチを開始できるため、プリフェッチ処理によって分岐命令を実行するクロック数が多くなる問題を回避することもできる。
【００８１】
なお、プリデコーダ１５は、命令デコーダ１２で次にデコードする命令が、処理に複数のクロック期間を要する命令（たとえば、除算命令など）であると判定した場合も、当該処理が終わるまでの期間、プリフェッチ処理を停止してもよい。
【００８２】
また、データ処理装置３００では、ＣＰＵ１とメモリ２とを異なる半導体基板上に形成してある場合について説明したが、ＣＰＵ１とメモリ２とを同じ半導体基板上に形成してもよい（ワンチップの半導体装置）。ただし、ＣＰＵ１とメモリ２とを同じ半導体基板上に形成した場合、データ処理装置３００は、ＣＰＵ１とメモリ２とを接続するためのＣＰＵインターフェース７を設けなくてもよい。
【００８３】
（実施の形態４）
実施の形態３に係るデータ処理装置３００では、ノーウェイトでメモリ２にアクセスするプリフェッチ処理の場合について説明した。しかし、データ処理装置は、メモリ２のアクセスにウェイトを設けてプリフェッチ処理を行なってもよい。そこで、本実施の形態４に係るデータ処理装置では、メモリ２のアクセスにウェイトを設けてプリフェッチ処理を行なう場合について説明する。なお、実施の形態４に係るデータ処理装置は、実施の形態３に係るデータ処理装置３００と同じ構成であるため図示を繰返さず、以下、同じ構成要素に同じ符号を付して説明する。
【００８４】
図１４は、実施の形態４に係るデータ処理装置３００におけるプリフェッチ処理のタイミングを説明するためのタイミングチャートである。図１４に示すタイミングチャートでは、分岐命令、分岐先命令、およびプリフェッチ処理のそれぞれのタイミングが図示してある。なお、分岐命令、および分岐先命令には、命令フェッチステージＩＦと、命令デコードステージＤと、および実行ステージＥとを含んでいる。
【００８５】
ＣＰＵ１は、図１４に示すように、分岐命令および分岐先命令の命令フェッチステージＩＦおよび命令デコードステージＤのそれぞれが１クロックで処理され、１ウェイトでメモリ２にアクセスするプリフェッチ処理を２クロックで処理する。そして、プリデコーダ１５は、命令フェッチステージＩＦで入力された命令（対象命令）が分岐命令であるか否かを判定（分岐判定）する。そのため、ＣＰＵ１は、命令デコードステージＤを開始するタイミングで、プリフェッチ処理の実行を開始する予定であっても、プリデコーダ１５が、命令を分岐命令であると判定した場合、プリフェッチ処理を停止する。
【００８６】
そのため、ＣＰＵ１は、実行ステージＥの１クロック目から、分岐先命令のプリフェッチ処理を実行することができ、分岐先命令の命令フェッチステージＩＦが実行待ちとなる期間（ＩＦ−ｓｔａｌｌ）を１クロックに抑えることができる。また、分岐命令の命令デコードステージＤの前に開始される無駄なプリフェッチ処理を停止することで、メモリ２への不要なアクセスを削減し、消費電力を削減することができる。
【００８７】
以上のように、本実施の形態４に係るデータ処理装置３００では、命令を読出すときに予め定められたウェイト期間を必要とするメモリ２であっても、プリデコーダ１５が、無駄なプリフェッチ処理を停止して、実行ステージＥの１クロック目から、プリフェッチ処理を実行することができる。
【００８８】
（実施の形態５）
実施の形態３および４に係るデータ処理装置３００では、命令長が固定の場合について説明した。しかし、データ処理装置は、命令長が可変の場合でもよい。そこで、本実施の形態５に係るデータ処理装置では、命令長が可変の場合について説明する。なお、実施の形態５に係るデータ処理装置は、実施の形態３に係るデータ処理装置３００と同じ構成であるため図示を繰返さず、以下、同じ構成要素に同じ符号を付して説明する。
【００８９】
実施の形態５に係るデータ処理装置３００は、命令長が可変であるため、プリデコーダ１５が、命令キュー１１から命令（対象命令）を読出す構成が異なる。図１５は、実施の形態５に係るデータ処理装置３００の命令キュー１１およびプリデコーダ１５の構成を示すブロック図である。プリデコーダ１５は、図１１に示したプリデコーダ１５と同様に、記憶部１５１、比較部１５２、および演算部１５３を含んでいる。
【００９０】
命令キュー１１は、セレクタ１１ａ、先頭算出部１１ｂ、および命令セレクタ１１ｃを有している。命令キュー１１は、命令長が可変の命令を格納しているので、セレクタ１１ａが選択したラインに複数の命令を含んでいる。そのため、セレクタ１１ａは、ライン選択信号に基づき格納してある複数の命令をライン単位で読出し、命令セレクタ１１ｃに出力する。先頭算出部１１ｂは、命令デコーダ１２が出力する命令の命令長から、次に実行する命令の先頭を算出し、命令セレクタ１１ｃに出力する。命令セレクタ１１ｃは、先頭算出部１１ｂが出力した命令の先頭を示す情報に基づいて、セレクタ１１ａが出力したラインに含まれる複数の命令から、次に実行する命令を選択して比較部１５２に出力する。
【００９１】
比較部１５２は、命令キュー１１から読出した対象命令と、記憶部１５１に予め記憶してある分岐命令（停止対象命令）とを比較する。演算部１５３は、対象命令と、記憶部１５１に記憶してある分岐命令のそれぞれとを比較した結果を演算して停止信号を生成する。演算部１５３で生成した停止信号は、増幅器１５４で予め定められた電圧レベルに増幅され、命令フェッチインターフェース部１４に出力される。
【００９２】
以上のように、本実施の形態５に係るデータ処理装置３００では、命令長が各命令により異なる場合（命令長が可変の場合）、命令デコーダ１２で命令をデコードした結果より得られる命令長により、次にデコードする命令を命令キューから選択して読出すので、命令長が固定の命令の場合と同様の効果を得ることができる。
【００９３】
（変形例）
命令キュー１１は、命令長が可変の命令の場合、命令デコーダ１２で命令をデコードして命令長を得るまでに時間がかかると、プリデコーダ１５が無駄なプリフェッチ処理を停止する処理が行なえない場合が考えられる。そこで、変形例に係るプリデコーダでは、ラインに含まれる複数の命令のすべてについて、記憶部に予め記憶してある分岐命令（停止対象命令）と比較して分岐命令であるか否かを判定している。
【００９４】
図１６は、実施の形態５の変形例に係るデータ処理装置３００の命令キュー１１およびプリデコーダの構成を示すブロック図である。プリデコーダ１５ａは、図１１に示したプリデコーダ１５をサブプリデコーダ１５５として複数設けてある。そのため、複数のサブプリデコーダ１５５は、読出したラインに含まれる複数の命令について分岐命令であるか否かを並列に処理する。具体的に、読出したラインに含まれる命令が、次命令候補１〜次命令候補Ｍの場合、Ｍ個のサブプリデコーダ１５５を用意して、次命令候補１〜次命令候補Ｍの命令について、それぞれ分岐命令であるか否かの処理を並列に行なう。セレクタ１５６は、先頭算出部１１ｂが出力した命令の先頭を示す情報に基づいて、次命令候補１〜次命令候補Ｍの命令のうちから１つの命令を選択し、選択した命令を処理したサブプリデコーダ１５５で生成した停止信号から、命令フェッチインターフェース部１４に出力する停止信号として選択する。
【００９５】
なお、セレクタ１５６で選択した停止信号は、増幅器１５７で予め定められた電圧レベルに増幅され、命令フェッチインターフェース部１４に出力される。また、ラインに含まれる複数の命令は、複数のサブプリデコーダ１５５に供給されるので、増幅器１１ｄで予め定められた電圧レベルに増幅してもよい。
【００９６】
以上のように、本実施の形態５の変形例に係るデータ処理装置３００では、読出した複数の命令のそれぞれについて、分岐命令か否かを並列に判定する複数のサブプリデコーダ１５５を有するので、プリフェッチ処理を停止する処理を安定して行なうことができる。
【００９７】
（実施の形態６）
本実施の形態６に係るデータ処理装置は、プリデコーダ１５の記憶部１５１に予め記憶してある分岐命令（停止対象命令）のすべてを、常に分岐命令として判定してプリフェッチ処理を停止するのではなく、動的に変更することが可能な構成について説明する。
【００９８】
図１７は、実施の形態６に係るデータ処理装置のプリデコーダの構成を示すブロック図である。なお、実施の形態６に係るデータ処理装置は、実施の形態３に係るデータ処理装置３００と同じ構成であるため図示を繰返さず、以下、同じ構成要素に同じ符号を付して説明する。また、プリデコーダ１５ｂにおいて、図１１に示したプリデコーダ１５と同じ構成要素については同じ符号を付して詳細な説明は繰返さない。
【００９９】
プリデコーダ１５ｂは、記憶部１５１ａ、比較部１５２、および演算部１５３を含んでいる。記憶部１５１ａは、プリフェッチ処理を停止する必要のある分岐命令（停止対象命令）を予め記憶してあるとともに、各分岐命令についてプリフェッチ処理を停止する対象にするか否かを決めるバリッドビットＶｂｉｔと、各分岐命令の命令長を示すレングス情報ｌｅｎとを付加して記憶してある。記憶部１５１ｂは、たとえば、分岐命令１から分岐命令ＮまでのＮ個の分岐命令を記憶してある。なお、レングス情報ｌｅｎは、命令長が固定の分岐命令の場合には不要である。
【０１００】
バリッドビットＶｂｉｔを用いることにより、ＣＰＵ１は、条件分岐先命令が分岐しない（non-taken）命令が連続するような場合において、プリフェッチ処理を停止する処理が過剰に働き、命令キュー１１から命令デコーダ１２への命令供給能力が不足して性能が劣化することを回避することができる。
【０１０１】
つまり、ＣＰＵ１は、プリフェッチ処理を停止する処理が不要な分岐命令のバリッドビットＶｂｉｔに“０”を書込んでおくことで、プリフェッチ処理を停止する処理を行なわない。なお、ＣＰＵ１は、バリッドビットＶｂｉｔに“１”が書込んである場合、プリフェッチ処理を停止する処理を行なう。
【０１０２】
図１８は、実施の形態６に係るデータ処理装置３００におけるプリフェッチ処理のタイミングを説明するためのタイミングチャートである。図１８に示すタイミングチャートでは、分岐命令１、通常命令、分岐命令２、分岐先命令、およびプリフェッチ処理のそれぞれのタイミングが図示してある。なお、分岐命令１、通常命令、分岐命令２、および分岐先命令には、命令フェッチステージＩＦと、命令デコードステージＤと、および実行ステージＥとを含んでいる。
【０１０３】
ＣＰＵ１は、図１８に示すように、命令フェッチステージＩＦおよび命令デコードステージＤのそれぞれが１クロックで処理され、ノーウェイトでメモリ２にアクセスするプリフェッチ処理を１クロックで処理する。そして、プリデコーダ１５ｂは、分岐命令１の命令フェッチステージＩＦで入力された命令（対象命令）が分岐命令であるか否かを判定（分岐判定）する。しかし、プリデコーダ１５ｂは、分岐命令１のバリッドビットＶｂｉｔに“０”が書込まれている（ｖ＝０）ので、プリフェッチ処理を停止する停止信号を生成しない。
【０１０４】
その後、ＣＰＵ１は、通常命令、および分岐命令２を実行する。そして、プリデコーダ１５ｂは、分岐命令２の命令フェッチステージＩＦで入力された命令（対象命令）が分岐命令であるか否かを判定（分岐判定）する。プリデコーダ１５ｂは、分岐命令２のバリッドビットＶｂｉｔに“１”が書込まれている（ｖ＝１）ので、プリフェッチ処理を停止する停止信号を生成する。そのため、ＣＰＵ１は、命令デコードステージＤを開始するタイミングで、プリフェッチ処理の実行を開始する予定であっても、プリフェッチ処理を停止する。
【０１０５】
その後、ＣＰＵ１は、実行ステージＥの１クロック目から、分岐先命令のプリフェッチ処理を実行することができ、分岐先命令の命令フェッチステージＩＦが実行待ちとなる期間（ＩＦ−ｓｔａｌｌ）を１クロックに抑えている。分岐命令２の命令デコードステージＤの前に開始される無駄なプリフェッチ処理を停止することで、メモリ２への不要なアクセスを削減し、消費電力を削減することができる。さらに、分岐命令１ではプリフェッチ処理を停止せずに、分岐命令２ではプリフェッチ処理を停止することで、プリフェッチ処理を停止する処理が過剰に働くのを防いでいる。
【０１０６】
以上のように、本実施の形態６の変形例に係るデータ処理装置３００では、分岐命令であると判定した場合であっても、フェッチ処理を停止するための停止信号を生成しないビット情報（バリッドビットＶｂｉｔ）を、停止対象命令ごとに付加している。そのため、本実施の形態６の変形例に係るデータ処理装置３００は、プリフェッチ処理を停止する処理が過剰に働くのを防ぎ、命令供給能力が不足して性能が劣化することを回避することができる。
【０１０７】
（実施の形態７）
実施の形態１に係るデータ処理装置１００では、ＣＰＵ１の外部に設けた停止処理部４（フェッチ処理制御部）を利用してメモリ２へのアクセスを停止する構成について説明した。実施の形態３に係るデータ処理装置３００では、ＣＰＵ１の内部に設けたプリデコーダ１５（フェッチ処理制御部）を利用してメモリ２へのアクセスを停止する構成について説明した。本実施の形態７に係るデータ処理装置では、両者を組合わせたフェッチ処理制御部を設けて、メモリ２へのアクセスを停止する構成について説明する。
【０１０８】
図１９は、本実施の形態７に係るデータ処理装置の構成を示すブロック図である。図１９に示すデータ処理装置４００は、ＣＰＵ１、メモリ２、命令キャッシュ３、および停止処理部４を含み、ＣＰＵ１からメモリ２および命令キャッシュ３の両方にアクセスし、メモリ２または命令キャッシュ３から命令を読出す（フェッチ処理）。また、図１９に示すＣＰＵ１は、命令キュー１１、命令デコーダ１２、データパス１３、命令フェッチインターフェース部１４、およびプリデコーダ１５を含んでいる。
【０１０９】
なお、実施の形態７に係るデータ処理装置４００は、実施の形態１に係るデータ処理装置１００、および実施の形態３に係るデータ処理装置３００と同じ構成要素について、同じ符号を付して詳細な説明を繰返さない。
【０１１０】
次に、本実施の形態７に係るデータ処理装置４００の動作について説明する。図２０は、実施の形態７に係るデータ処理装置４００の動作を説明するためのタイミングチャートである。図７に示すタイミングチャートには、ＣＰＵ１のクロック信号、命令フェッチステージＩＦ、命令デコードステージＤ、実行ステージＥ、読出し先アドレス、分岐判定信号、停止信号、分岐通知、ヒット情報、ヒット量、およびメモリ２へのアクセス信号の波形がそれぞれ示してある。
【０１１１】
ＣＰＵ１は、“ｂｒａ１”、“ｓｕｂ”、“ｂｒａ２”、“ａｄｄ”、および“ｂｒａ３”の順の命令を、命令フェッチステージＩＦ、命令デコードステージＤ、および実行ステージＥの各ステージで順にパイプラインで処理している。たとえば、ＣＰＵ１は、“ｂｒａ１”の命令を命令フェッチステージＩＦで処理した次のクロックで、“ｂｒａ１”の命令を命令デコードステージＤで処理し、さらに次のクロックで、“ｂｒａ１”の命令を実行ステージＥで処理する。
【０１１２】
プリデコーダ１５は、分岐命令である“ｂｒａ１”、“ｂｒａ２”、および“ｂｒａ３”を処理するとき、命令フェッチステージＩＦで分岐判定を行ない分岐命令と判定するので分岐判定信号を“Ｈ”レベルとする。さらに、プリデコーダ１５は、分岐判定信号が“Ｈ”レベルとなると、次のクロックのタイミングで停止信号を“Ｈ”レベルとして、メモリ２に出力する。
【０１１３】
メモリ２は、図１９に示す演算処理部６ａで、停止処理部４およびプリデコーダ１５の停止信号の反転信号と、ＣＰＵ１からのリクエストの信号とのＡＮＤ演算を行なった信号がメモリ２へのアクセス信号として入力される。具体的に、ＣＰＵ１からのリクエストの信号が“Ｈ”レベルでプリデコーダ１５の停止信号が“Ｌ”レベルの場合、メモリ２へのアクセス信号は、“Ｈ”レベルであるが、プリデコーダ１５の停止信号が“Ｈ”レベルになると“Ｌ”レベルとなる。メモリ２へのアクセス信号は、図２０に示すように、プリデコーダ１５の停止信号が“Ｈ”レベルになるタイミングに、“Ｌ”レベル（Ｉ，III）となる。
【０１１４】
また、命令キャッシュ３は、“ｂｒａ１”の命令をメモリ２から読出す前、前半データに“ｂｒａ１”の命令を、後半データに“ｓｕｂ”の命令をそれぞれ格納しておく。そして、比較器３１は、命令フェッチインターフェース部１４から受取ったアドレスが前半データに格納してある“ｂｒａ１”の命令のアドレスと一致する場合、命令の連続性により後半データに格納してある命令が“ｓｕｂ”であると判定する。そのため、比較器３１は、ヒットの情報およびヒット量“２”を停止処理部４に出力する。つまり、図２０に示すように、命令フェッチステージＩＦで“ｓｕｂ”の命令が処理されるタイミングに、ヒット情報が“Ｈ”レベルとなり、ヒット量“２”となる。ヒット情報が“Ｈ”レベルとなり、ヒット量“２”となると、メモリ２へのアクセス信号は、次のクロックのタイミングで“Ｌ”レベル（II）となる。
【０１１５】
以上のように、本実施の形態７に係るデータ処理装置４００では、フェッチ処理制御部として、ＣＰＵ１の外部に設けた停止処理部４と、ＣＰＵ１の内部に設けたプリデコーダ１５とを有している。そのため、本実施の形態７に係るデータ処理装置４００は、命令キャッシュ３に分岐先の命令を格納してあると判定した場合、および次の命令が分岐命令であると判定した場合のうち少なくとも一方の場合、メモリ２へのアクセスを停止することができる。よって、本実施の形態７に係るデータ処理装置４００は、無駄なメモリ２へのアクセスを停止することで消費電力をより削減することができる。
【０１１６】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１１７】
１  ＣＰＵ、２  メモリ、３  命令キャッシュ、４  停止処理部、１１ａ，１５６  セレクタ、６，６ａ  演算処理部、７  ＣＰＵインターフェース、１１  命令キュー、１１ｂ  先頭算出部、１１ｃ  命令セレクタ、１１ｄ，１５４，１５７  増幅器、１２  命令デコーダ、１３  データパス、１４  命令フェッチインターフェース部、１５，１５ａ，１５ｂ  プリデコーダ、３１，３１ａ  比較器、４１  残り停止量カウンタ、１００，２００，３００，４００  データ処理装置、１５１，１５１ａ，１５１ｂ  記憶部、１５２  比較部、１５３  演算部、１５５  サブプリデコーダ、３１１，３１１ａ  ヒット判定部、３１２，３１２ａ  ヒット量カウンタ。
【図１】
0005902208.tif 000002
【図２】
0005902208.tif 000003
【図３】
0005902208.tif 000004
【図４】
0005902208.tif 000005
【図５】
0005902208.tif 000006
【図６】
0005902208.tif 000007
【図７】
0005902208.tif 000008
【図８】
0005902208.tif 000009
【図９】
0005902208.tif 000010
【図１０】
0005902208.tif 000011
【図１１】
0005902208.tif 000012
【図１２】
0005902208.tif 000013
【図１３】
0005902208.tif 000014
【図１４】
0005902208.tif 000015
【図１５】
0005902208.tif 000016
【図１６】
0005902208.tif 000017
【図１７】
0005902208.tif 000018
【図１８】
0005902208.tif 000019
【図１９】
0005902208.tif 000020
【図２０】
0005902208.tif 000021