(57)【要約】【課題】分岐発生頻度から分岐先を予測する機能を有するＣＰＵでは、分岐を発生させるアドレスへのアクセス回数が多くなければ、分岐先の予測精度が上げられない。また、２系統のパイプライン処理ステージを形成する構成のＣＰＵは、回路規模が大きい。【解決手段】実行処理部２５で分岐が発生したか否かを示す分岐結果信号３５に基づいて、プログラムロード処理部２２が、これから復号するプログラムデータに分岐があるか否かを予測し、分岐があると予測したときは、その分岐先アドレスのプログラムデータを予めプログラム保存領域２１から取得して、これから復号するプログラムデータと共に転送処理部２３へ転送し、分岐が発生しないときの第１の転送データと分岐が発生したときの第２の転送データを復号処理部２４に転送する。復号処理部２４は、分岐が発生したか否かに応じてそれら第１及び第２の転送データの復号データの一方を選択して出力する。【選択図】図１
2007102596.tif 000002
【特許請求の範囲】
【請求項１】
プログラムデータを格納しているプログラム保存領域と、前記プログラム保存領域からプログラムデータをロードするプログラムロード処理部と、前記プログラムロード処理部より転送されたプログラムデータを転送する転送処理部と、前記転送処理部から転送された前記プログラムデータを復号する復号処理部と、前記復号処理部から送られてきた復号データを実行すると共に、前記プログラムデータの実行順序を変更するための処理である分岐が行われたか否かを示す分岐結果信号を生成して前記プログラムロード処理部へ出力する実行処理部と、前記実行処理部より送られてきた実行結果を書き込む実行結果保存処理部とからなり、複数ステージのパイプライン処理を実行する中央処理装置であって、
前記プログラムロード処理部は、
前記プログラム保存領域から読み出した、これから復号する前記プログラムデータを保存する保存手段と、
前記分岐結果信号に基づき、これから復号する前記プログラムデータに前記分岐があるか否かを判断し、前記分岐があると判断したときは、その分岐先アドレスのプログラムデータを予め前記プログラム保存領域から取得して前記保存手段に保存し、その保存した前記プログラムデータを前記転送処理部へ出力すると共に、前記分岐結果信号に基づき、少なくともその出力プログラムデータの前記転送処理部での格納場所を指示する制御信号及び前記復号処理部から出力される復号データの選択指示を行う制御信号を出力する手段とを備え、
前記転送処理部は、
前記プログラムロード処理部から転送されたプログラムデータを、前記格納場所を指示する制御信号に基づき、そのプログラムデータが分岐先アドレスのデータであるか否かに応じて異なる場所に格納する転送データ保存手段と、
前記転送データ保存手段に保存されているプログラムデータのうち、分岐がなかったときに復号されるべき第１のプログラムデータと分岐があったときに復号されるべき第２のプログラムデータとを選択してそれぞれ第１及び第２の転送データとして出力する転送データ選択手段とを備え、
前記復号処理部は、
前記転送処理部から入力された前記第１及び第２の転送データを別々に復号して第１及び第２の復号データを生成して保存する復号・保存手段と、
前記プログラムロード処理部からの前記復号データの選択指示を行う制御信号に従って、前記復号・保存手段からの第１及び第２の復号データの一方を選択して前記実行処理部へ出力する復号データ選択手段と
を備えることを特徴とする中央処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は中央処理装置に係り、特にプログラムの分岐予測手段を備えた中央処理装置に関する。
【背景技術】
【０００２】
年々パーソナルコンピュータ（以下、パソコン）や電子機器に用いられている中央処理装置（以下、ＣＰＵ）への処理の負荷が増大し、処理能力の向上が望まれている。そのため、従来からＣＰＵでは複数ステージのパイプライン処理を実行している（例えば、非特許文献１参照）。パイプライン処理ではＣＰＵはプログラム分岐に係る処理時間を効率良く短縮することが処理能力向上に直結する。
【０００３】
図１５はこの従来のパイプライン処理を実行するＣＰＵの一例のブロック図を示す。同図において、ＣＰＵはプログラムを保存するプログラム保存領域（memory）１と、プログラム保存領域１からプログラムのロードを行うプログラムロード処理部（pre-fetch）２と、プログラムロード処理部２にロードされたプログラムを転送する転送処理部（Fetch stage）３と、転送処理部３から転送されたプログラムを復号する復号処理部（Decode stage）４と、復号処理部４から送られてきた復号データを実行する実行処理部（Execute stage）５と、実行処理部５から送られてきた実行結果を書き込む実行結果保存処理部（Writeback stage）とからなり、複数ステージのパイプライン処理を実行する。
【０００４】
この従来のＣＰＵでは、図１６のタイミングチャートに示すように、最初の実行単位（サイクル）１Ｔでは、プログラムロード処理部２がプログラム保存領域１から読み出したプログラム（命令）を、転送処理部３が復号処理部４へ転送する処理F[0]を行い、次の実行単位２Ｔでは、転送処理部３が２番目のプログラムを復号処理部４へ転送する処理F[1}を行うと同時に、復号処理部４が転送された最初のプログラムを復号して復号データを出力する処理D[0]を行う。
【０００５】
次の実行単位３Ｔでは、復号データが入力された実行処理部５がその復号データを実行する処理E[0]を行うと同時に、転送処理部３が３番目のプログラムを復号処理部４へ転送する処理F[2}を行うと共に、復号処理部４が転送されてきた２番目のプログラムを復号して復号データを出力する処理D[1]を行う。次の実行単位４Ｔでは、実行処理部５で実行された実行結果を実行結果保存処理部６が書き込む処理W[0]を行うと共に、２番目の復号データが入力された実行処理部５がその復号データを実行する処理E[1]を行い、かつ、復号処理部４が転送されてきた３番目のプログラムを復号して復号データを出力する処理D[2]を行う。
【０００６】
このとき、実行結果保存処理部６は、実行処理部５が次に実行すべきプログラムの実行順序を変更させる処理である分岐の発生があるかどうか判断するため、プログラムロード処理部２から転送処理部３へのプログラム転送、及び転送処理部３から復号処理部４へのプログラム転送は行わない。その後、実行結果保存処理部６は、実行処理部５で実行された２番目のプログラムの実行結果を実行単位５Ｔで書き込む処理W[１]を行った後、次の実行単位６Ｔの段階で、実行処理部５で実行された３番目のプログラムの実行結果を書き込む処理W[2]を行うと共に、分岐発生があるかどうかを決定し、その決定結果を示す分岐結果信号７をプログラムロード処理部２へ送出する。
【０００７】
プログラムロード処理部２は、入力された分岐結果信号７が分岐発生無しを示すときは、次の実行単位７Ｔでプログラム保存領域１から４番目のプログラムを読み出してそれを転送処理部３が復号処理部４へ転送させる処理F[3]を行い、入力された分岐結果信号７が分岐発生有りを示すときは、次の実行単位７Ｔでプログラム保存領域１から分岐先の例えば７番目のプログラムを読み出してそれを転送処理部３が復号処理部４へ転送させる処理F[6]を行う。以下、同様の動作が繰り返される。
【０００８】
従って、従来のＣＰＵにおけるプログラムの分岐は、図１５の実行結果保存処理部６にて分岐があることを判断し、プログラムロード処理部２がその結果を用いて分岐先のプログラムをプログラム格納領域１より読み出しを行うことで、分岐処理を行っており、プログラムの分岐は、図１６に示すように分岐判断が行えるまで、遅延スロットを挿入している。このため、図１６の場合、従来のＣＰＵでは、分岐処理が発生する度に、４Ｔ〜６Ｔに示したような３ＣＰＵサイクルの遅延が生じ、プログラムの量が多くなるほど分岐が増え、ＣＰＵ動作に膨大な実行時間のロスが発生することが課題であった。
【０００９】
そこで、従来は上記の分岐処理にかかるオーバーヘッドを軽減するために、分岐発生頻度から分岐先を予測する機能を有することを特徴とするＣＰＵ（例えば、特許文献１参照）や、分岐予測のためにパイプライン処理を複数持つＣＰＵ（例えば、特許文献２参照）などが提案されている。
【００１０】
図１７は上記の特許文献１記載の従来のＣＰＵの一例のブロック図を示す。同図中、図１５と同一構成部分には同一符号を付し、その説明を省略する。図１７に示す従来のＣＰＵでは、プログラムロード処理部８が、分岐命令のアドレスに対応した分岐先のアドレスと、アクセスした回数及び分岐予測結果をテーブルとしてバッファ９へ登録することで、分岐発生パターンから分岐予測の精度を上げるものである。
【００１１】
図１８は上記の特許文献２記載の従来のＣＰＵの一例のブロック図を示す。同図中、図１５と同一構成部分には同一符号を付し、その説明を省略する。図１８に示す従来のＣＰＵは、分岐予測を行わずに遅延スロットを利用するタイプであるが、プログラム保存領域１から取得したデータをパイプラインへ導入する前に、予め分岐判断命令であるか否かをプログラムロード処理部１０で判定し、分岐判断命令無しの非分岐命令はバッファ１１ａに格納し、分岐判断命令有りの分岐命令はバッファ１１ｂに格納し、バッファ１１ａからの非分岐命令は転送処理部３ａ、復号処理部４ａ、実行処理部５ａによりパイプライン処理すると共に、バッファ１１ｂからの分岐命令は転送処理部３ｂ、復号処理部４ｂ、実行処理部５ｂによりパイプライン処理し、最終段の処理を実行結果保存処理部１２で処理するものである。
【００１２】
【非特許文献１】藤広哲也，「ＣＰＵは何をしているのか  シリコンチップに秘められた驚異の世界」，株式会社すばる舎，２００２年９月発行
【特許文献１】特許第２５６７９７８号公報
【特許文献２】特開２００４−１９２０２１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
しかしながら、図１７に示した従来のＣＰＵでは、分岐を発生させるアドレスへのアクセス回数が多くなければ、そのアドレスからの分岐先の予測精度が上げられないという問題があり、また、全ての分岐パターンを登録しておくことが必要であるため、回路規模が予測できず、プログラムの内容に左右され回路が大規模化する可能性があることが課題である。
【００１４】
また、図１８に示した従来のＣＰＵは、最終段の処理ステージ以外の処理ステージが、２系統のパイプライン処理ステージを形成する構成であるため、通常のパイプライン回路規模が単純に２倍近く増大することが課題である。
【００１５】
本発明は以上の点に鑑みなされたもので、より少ない回路規模で、かつ、遅延スロットを利用せずに分岐処理にかかるロスを取り除き得る分岐予測手段を備えた中央処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１６】
上記目的を達成するため、本発明は、プログラムデータを格納しているプログラム保存領域と、プログラム保存領域からプログラムデータをロードするプログラムロード処理部と、プログラムロード処理部より転送されたプログラムデータを転送する転送処理部と、転送処理部から転送されたプログラムデータを復号する復号処理部と、復号処理部から送られてきた復号データを実行すると共に、プログラムデータの実行順序を変更するための処理である分岐が行われたか否かを示す分岐結果信号を生成してプログラムロード処理部へ出力する実行処理部と、実行処理部より送られてきた実行結果を書き込む実行結果保存処理部とからなり、複数ステージのパイプライン処理を実行する中央処理装置であって、
上記のプログラムロード処理部は、プログラム保存領域から読み出した、これから復号するプログラムデータを保存する保存手段と、分岐結果信号に基づき、これから復号するプログラムデータに分岐があるか否かを判断し、分岐があると判断したときは、その分岐先アドレスのプログラムデータを予めプログラム保存領域から取得して保存手段に保存し、保存手段から保存されているプログラムデータを転送処理部へ出力すると共に、分岐結果信号に基づき、少なくともその出力プログラムデータの転送処理部での格納場所を指示する制御信号及び復号処理部から出力される復号データの選択指示を行う制御信号を出力する手段とを備え、
上記の転送処理部は、プログラムロード処理部から転送されたプログラムデータを、格納場所を指示する制御信号に基づき、そのプログラムデータが分岐先アドレスのデータであるか否かに応じて異なる場所に格納する転送データ保存手段と、転送データ保存手段に保存されているプログラムデータのうち、分岐がなかったときに復号されるべき第１のプログラムデータと分岐があったときに復号されるべき第２のプログラムデータとを選択してそれぞれ第１及び第２の転送データとして出力する転送データ選択手段とを備え、
上記の復号処理部は、転送処理部から入力された第１及び第２の転送データを別々に復号して第１及び第２の復号データを生成して保存する復号・保存手段と、プログラムロード処理部からの復号データの選択指示を行う制御信号に従って、復号・保存手段からの第１及び第２の復号データの一方を選択して実行処理部へ出力する復号データ選択手段とを備えることを特徴とする。
【００１７】
この発明では、実行処理部で分岐が発生したか否かを示す分岐結果信号に基づいて、プログラムロード処理部が、これから復号するプログラムデータに分岐があるか否かを判断し、分岐があると判断したときは、その分岐先アドレスのプログラムデータを予めプログラム保存領域から取得して、これから復号するプログラムデータと共に転送処理部へセットして一旦保存した後、分岐が発生しないときの第１の転送データと分岐が発生したときの第２の転送データを復号処理部にセットしてそれぞれ復号させ、分岐が発生したか否かに応じてそれらの復号データの一方を選択するようにしたため、２系統のパイプライン処理系を設けなくても、分岐発生判断から分岐先の処理に遷移するまでに要するサイクル数を０に短縮することができる。
【発明の効果】
【００１８】
本発明によれば、２系統のパイプライン処理系を設けなくても、分岐発生判断から分岐先の処理に遷移するまでに要するサイクル数を０に短縮することができるため、より少ない回路規模で、かつ、遅延スロットを利用せずに分岐処理時間にかかるオーバーヘッドを無くすことができる。
【発明を実施するための最良の形態】
【００１９】
次に、本発明を実施するための最良の形態について図面と共に説明する。先ず、本明細書中に用いられる変数ｈ，ｉ，ｊ，ｋ，ｍ，ｎ，ｐ，ｑの関連について説明する。変数ｈ，ｍ，ｐ，ｑは、それぞれフェッチ（Fetch），デコード１（Decode1），エグゼキュート（Execute），ライトバック（Writeback）ステージにおける、プログラムのアドレスを示す。デコード（Decode）ステージは二つ存在するので、それらを区別してデコード１（Decode1），デコード２（Decode2）とする。ｎは、Ｄｅｃｏｄｅ２ステージにおけるプログラムのアドレスを示す。ｉは、分岐予測先アドレスを示す。ｊは、１Ｔ実行時間前の分岐予測先アドレスｉの次のアドレスを示す。ｋは、１Ｔ実行時間前の分岐予測先アドレスｉが分岐すると予測し、そのｉの予測先アドレスを示す。
【００２０】
図１は本発明になる中央処理装置の一実施の形態のパイプライン処理時のブロック図を示す。同図に示すように、本実施の形態の中央処理装置（ＣＰＵ）は、プログラムを保存するプログラム保存領域（memory）２１と、プログラム保存領域２１からプログラムのロードを行うプログラムロード処理部（pre-fetch）２２と、プログラムロード処理部２２にロードされたプログラムを転送する転送処理部（Fetch stage）２３と、転送処理部２３から転送されたプログラムを復号する復号処理部（Decode stage）２４と、復号処理部２４から送られてきた復号データを実行する実行処理部（Execute stage）２５と、実行処理部２５から送られてきた実行結果を書き込む実行結果保存処理部（Writeback stage）２６とからなり、複数ステージのパイプライン処理を実行する。
【００２１】
この実施の形態では、プログラムロード処理部２２、転送処理部２３、復号処理部２４を、プログラムロード処理部２２からの出力である信号転送データ更新指示信号３１を送信する信号線、転送データ選択信号３２を送信する信号線、復号指示信号３３を送信する信号線、復号データ選択信号３４を送信する信号線を用いて接続し、実行処理部２５からの出力である分岐結果信号３５を送信する信号線をプログラムロード処理部２２へ接続している。
【００２２】
プログラム保存領域２１には、図２（Ａ）に示すように、アドレスに対応した本実施の形態の中央処理装置で用いるプログラムデータが格納されている。プログラムデータの各々は、図２（Ｂ）に示すように、固定ビット幅ｘを持つオペコードと、可変ビット幅を持つオペランドＡ（ビット幅ｙ）及びオペランドＢ（ビット幅ｚ）とからなる。仮に、使用する中央処理装置のプログラムデータビット幅が３２ビットである場合、上記のオペコード、オペランドＡ、オペランドＢのそれぞれのビット幅加算値（ｘ＋ｙ＋ｚ）は最大「３２」である。
【００２３】
中央処理装置のプログラムデータビット幅が３２ビットで、上記オペコードに分岐命令を持った場合のプログラムデータの内部を図２（Ｃ）に示す。同図（Ｃ）に示すように、分岐命令はオペコードと同等の固定のビット幅ｘを持つ。分岐先アドレスを表すビット幅は、オペコードのビット幅との加算値が「３２」を越えない固定幅ｕを持つ。また、図２（Ｃ）では、残りのビット幅ｖ（＝３２−（ｘ＋ｕ））は、Ｎ／Ａ（not available）領域としている。
【００２４】
次に、プログラムロード処理部２２の構成について説明する。図３は図１のプログラムロード処理部２２の一実施の形態のブロック図を示す。プログラムロード処理部２２は、図３に示すように、プログラムデータ保存部２２１及びシーケンス処理部２２２から構成されている。プログラムデータ保存部２２１は、図１のプログラム保存領域２１からプログラムデータ３６を保存した後、図１の転送処理部２３へ転送データ３８として出力する。また、シーケンス処理部２２２は、図１の実行処理部２５から分岐結果信号３５を入力として受け、図１の転送処理部２３へ転送データ更新指示信号３１、転送データ選択信号３２を出力し、復号処理部２４へ復号データ選択信号３４、復号指示信号３３を出力し、プログラム保存領域２１へ読み出し信号３７を出力する。
【００２５】
次に、プログラムロード処理部２２の動作について説明する。図４はプログラムロード処理部２２の概略動作説明用フローチャートを示す。プログラムロード処理部２２は、プログラム保存領域２１からのプログラムデータをプログラムデータ保存部２２１で保存し、そのプログラムデータに基づいてシーケンス処理部２２２が動作を開始すると（ステップＳ１）、その開始時（ＣＰＵ実行単位で１Ｔ：Ｔは単位時間（動作クロック周波数））に、後述する初期処理１を行った後（ステップＳ２）、次のＣＰＵステップに移行したかを判断し（ステップＳ３）、移行していれば初期処理２は終了したかを判定する（ステップＳ４）。
【００２６】
初期処理２がまだ終了していないときには、次のサイクル（２Ｔ）で後述する初期処理２を行い（ステップＳ５）、初期処理２が終了していれば、初期処理３が終了したかを判定する（ステップＳ６）。初期処理３がまだ行われていない時には、その次のサイクル（３Ｔ）で後述する初期処理３を行い（ステップＳ７）、初期処理３も終了していれば、その次のサイクル（３Ｔ）以降、毎サイクル後述する分岐予測を行う（ステップＳ８）。
【００２７】
図５は図４のステップＳ２による初期処理１の詳細動作説明用フローチャー卜を示す。初期処理１では、１Ｔ前に処理される予定の内容が分岐無しの場合に必要なアドレスｈにおけるフェッチステージＦ＿Ｎ［ｈ］に、プログラムの開始アドレス（ここでは仮に０ｘ０とする）（図１３、図１４参照）のデータをセットし（ステップＳ１１）、アドレスｍにおけるデコードステージＤ＿１［ｍ］にｍ＝０をセットし（ステップＳ１２）、アドレスｐにおけるエグゼキュートステージＥ［ｐ］にｐ＝０をセットした後（ステップＳ１３）、転送処理部２３へ転送データ更新指示信号３２と、転送データ選択信号３３を出力し（ステップＳ１４）、処理を終了する（ステップＳ１５）。
【００２８】
図６は図４のステップＳ５による初期処理２についての詳細動作説明用フローチャートを示す。初期処理２では、処理を開始するとＦ＿Ｎ［ｈ］に、開始アドレスの次のアドレス（ここでは仮に０ｘ１とする）をセットし（ステップＳ２１）、Ｄ＿１［ｍ］に、ｍ＝１をセットし（ステップＳ２２）、１Ｔ前に処理される予定の内容が分岐無しの場合に必要なアドレスｉにおけるフェッチステージＦ＿Ｂ［ｉ］に、Ｆ＿Ｎ［０］からの分岐予測値（アドレス）ｙをセット（ｉ＝ｙ）し（ステップＳ２３）、分岐予測値が存在するかどうか判定する（ステップＳ２４）。なお、上記のＦ＿Ｎ［］には、１Ｔ前に処理される予定のアドレスに＋１したアドレスデータが入り、Ｆ＿Ｂ［］には、１Ｔ前に処理される予定のアドレスが分岐した場合の分岐先アドレスデータが入る。
【００２９】
分岐予測値が存在する場合、Ｆ＿Ｂ［ｊ］に、アドレスｉのデータを転送処理部２３へセットした後（ステップＳ２５）、アドレスｎにおけるデコードステージＤ＿２［ｎ］に、アドレスｉをセット（ｎ＝ｉ）する（ステップＳ２６）。分岐予測値が存在しない場合は、ステップＳ２５、Ｓ２６の処理をジャンプし、何もセットしない。続いて、転送処理部２３へ転送データ更新指示信号３２と転送データ選択信号３３を出力すると共に、復号処理部２４へ復号指示信号３３と復号データ選択信号３４を出力して（ステップＳ２７）、初期処理２を終了する（ステップＳ２８）。
【００３０】
図７は図４のステップＳ７による初期処理３についての詳細動作説明用フローチャートを示す。初期処理３は、処理を開始すると１Ｔ前に処理される予定の内容が分岐有りの場合に必要なアドレスｊにおけるフェッチステージＦ＿ＢＮ［ｊ］にアドレスｉをセット（ｊ＝ｉ＋１）し、１Ｔ前に処理される予定の内容が分岐有りの場合に必要なアドレスｋにおけるフェッチステージＦ＿ＢＢ［ｋ］にＦ＿Ｂ［ｉ］からの分岐予測値ｖをセット（ｋ＝ｖ）し、Ｆ＿Ｂ［ｉ］にＦ＿Ｎ［ｈ］からの分岐予測値ｕをセット（ｉ＝ｕ）し（以上ステップＳ３１）、分岐予測のアドレスｊが存在するか判定し（ステップＳ３２）、存在する場合はＦ＿ＢＮ［ｊ］にｊのアドレスデータをセットし（ステップＳ３３）、存在しない場合は分岐予測のアドレスｋが存在するか判定する（ステップＳ３４）。
【００３１】
なお、上記のＦ＿ＢＮ［］には、１Ｔ前に処理される予定のアドレスに＋１したアドレスデータが入り、Ｆ＿ＢＢ［］には、１Ｔ前に処理される予定のアドレスが分岐した場合の分岐先アドレスデータが入る。
【００３２】
分岐予測のアドレスｋが存在する場合はＦ＿ＢＢ［ｋ］にｋのアドレスデータをセットし（ステップＳ３５）、存在しない場合は分岐予測のアドレスｉが存在するか判定し（ステップＳ３６）、分岐予測のアドレスｉが存在する場合はＦ＿Ｂ［ｉ］にｉのアドレスデータをセットし（ステップＳ３７）、分岐予測のアドレスｉが存在しない場合はステップＳ３８に進む。
【００３３】
従って、上記のステップＳ３２〜Ｓ３７では、それぞれ分岐予測のアドレスｊ，ｋ，ｉが存在するかどうか判定し、存在する場合は、そのアドレスデータを転送処理部２３へセットし、存在しない場合は何もセットしない。続いて、Ｆ＿Ｎ［ｈ］にアドレスｈ＋１のデータをセットし、転送処理部２３へ転送データ更新指示信号３２と転送データ選択信号３３を出力すると共に、復号処理部２４へ復号指示信号３３と復号データ選択信号３４を出力する。ステップＳ３８の処理後、初期処理３を終了する（ステップＳ３９）。
【００３４】
図８は図４のステップＳ８における分岐予測処理についての詳細動作説明用フローチャートを示す。プログラムロード処理部２２が、分岐予測の処理を開始すると、図１の実行処理部２５からの分岐結果信号３５を受けて、分岐が発生したかどうかを判断し（ステップＳ４１）、分岐が発生した場合も発生しなかった場合も、次の分岐予測に備えて各ステージに所定のデータを格納する（ステップＳ４２、Ｓ４３）。ここで、所定のデータとは、Ｆ＿Ｎ［］へ直前に処理したアドレス”ｈ”を一つインクリメントしたアドレスに対応したＦ＿Ｎ[h+1]に格納されるデータと、Ｆ＿Ｂ［］へ上記Ｆ＿Ｎ[ｈ]で用いたアドレス”ｈ”が分岐処理を持っている場合、分岐先のアドレス”ｙ”に対応したＦ＿Ｂ［ｙ］に格納されるデータと、Ｆ＿ＢＮ［］へ、直前に処理したＦ＿Ｂ［ｉ］のアドレス”ｉ”を一つインクリメントしたアドレスに対応したＦ＿ＢＮ[i+1]に格納されるデータと、Ｆ＿ＢＢ［］へ、直前に処理したアドレス”ｉ”が分岐処理を持っている場合、分岐先のアドレス”ｋ”に対応したＦ＿ＢＢ[k]に格納されるデータである。
【００３５】
分岐が発生していた場合、実行処理部２５のＥ［ｐ］へ出力される復号データとして復号ステージＤ＿２［ｍ］のデータをセットし、復号ステージＤ＿１［ｍ］にアドレスｊをセット（ｍ＝ｊ）し、Ｄ＿２［ｎ］にアドレスｋをセット（ｎ＝ｋ）し、Ｆ＿Ｎ［ｈ］にアドレスｊ＋１のデータをセットし、Ｆ＿Ｂ［ｉ］にＦ＿ＢＮ［ｊ］からの分岐先アドレスとして予め定めた予測値ａをセット（ｉ＝ａ）し、Ｆ＿ＢＮ［ｊ］にアドレスｋ＋１をセット（ｊ＝ｋ＋１）し、Ｆ＿ＢＢ［ｋ］にＦ＿ＢＢ［ｋ］からの分岐先アドレスとして予め定めた予測値ｂをセット（ｋ＝ｂ）する（以上ステップＳ４２）。
【００３６】
分岐が発生してなかった場合は、実行処理部２５のＥ［ｐ］へ出力される復号データとして復号ステージＤ＿１［ｍ］のデータをセットし、復号ステージＤ＿１［ｍ］にアドレスｈをセット（ｍ＝ｈ）し、Ｄ＿２［ｎ］にアドレスｉをセット（ｎ＝ｉ）し、Ｆ＿ＢＢ［ｋ］にＦ＿Ｂ［ｉ］からの分岐先アドレスとして予め定めた予測値ｂをセット（ｋ＝ｂ）し、Ｆ＿ＢＮ［ｊ］にアドレスｉ＋１をセット（ｊ＝ｉ＋１）し、Ｆ＿Ｂ［ｉ］にＦ＿Ｎ［ｈ］からの分岐先アドレスとして予め定めた予測値ａをセット（ｉ＝ａ）し、Ｆ＿Ｎ［ｈ］にアドレスｈ＋１のデータを転送する（以上ステップＳ４３）。
【００３７】
分岐があった場合はステップＳ４２が、また分岐がなかった場合はステップＳ４３の処理が終わると、それぞれセットした分岐予測のアドレスｊ，ｉ，ｋについて存在するかどうか確認する。プログラムロード処理部２２は、図３のシーケンス処理部２２２において、分岐予測のアドレスが存在すると判断した場合、図２（Ｃ）に示したプログラムデータ中の分岐先アドレスのプログラムデータを取得し、一旦、図３のプログラムデータ保存部２２１へ格納した後、転送処理部２３へ転送する際に、図８のフローチャートに従って、後述する転送処理部２３内の４つある転送データ保存部２３１〜２３４のいずれかにセットして格納する。
【００３８】
一方、分岐予測アドレスが存在しなければ、プログラムデータ取得動作は行わない。このため、分岐予測アドレスが存在した場合に格納する予定であった転送データ保存部２３１〜２３４のいずれかにはプログラムデータは格納されない。
【００３９】
すなわち、シーケンス処理部２２２は、まず分岐予測のアドレスｊが存在するかどうか判定し（ステップＳ４４）、存在する場合はＦ＿ＢＮ［ｊ］にｊのアドレスデータを転送処理部２３へ転送するが（ステップＳ４５）、存在しない場合は分岐予測のアドレスｉが存在するかどうか判定する（ステップＳ４６）。
【００４０】
分岐予測のアドレスｉが存在する場合は、Ｆ＿Ｂ［ｉ］にｉのアドレスデータを転送処理部２３へ転送するが（ステップＳ４７）、存在しない場合は分岐予測のアドレスｋが存在するかどうか判定する（ステップＳ４８）。分岐予測のアドレスｋが存在する場合はＦ＿ＢＢ［ｋ］にｋのアドレスデータを転送処理部２３へ転送するが（ステップＳ４９）、存在しない場合は転送処理部２３へ転送データ更新指示信号３２と転送データ選択信号３３を出力すると共に、復号処理部２４へ復号指示信号３３と復号データ選択信号３４を出力した後（ステップＳ５０）、分岐予測処理を終了する（ステップＳ５１）。
【００４１】
次に、図１の転送処理部２３の構成及び動作について説明する。図９は図１の転送処理部２３の一実施の形態のブロック図を示す。図９において、転送処理部２３はそれぞれプログラムロード処理部２２から転送データ３８と転送データ更新指示信号３１とが入力される４つの転送データ保存部２３１〜２３４と、転送データ保存部２３１〜２３４からの出力転送データを、プログラムロード処理部２２からの転送データ選択信号３２に基づいて選択して２種類の転送データ１、２を並列に出力する転送データ選択部２３５とからなる。転送データ保存部２３１〜２３４は、転送データ更新指示信号３１がアクティブであるときにのみ、入力された転送データを保存する。
【００４２】
次に、この転送処理部２３の動作について、図１０に示す詳細動作説明用フローチャートと共に説明する。転送処理部２３は、処理を開始すると、先ずステップＳ４１にて転送データ更新指示信号３１が発生しているかを判断し（ステップＳ５３）、発生していた場合、その転送データ更新指示信号３１に従って、プログラムロード処理部２２からの転送データ３８を転送データ保存部２３１〜２３４に格納し（ステップＳ５４）、発生していない場合は転送データ保存部２３１〜２３４への転送データ３８の格納は行わない。
【００４３】
続いて、転送データ選択部２３５は転送データ選択信号３２が発生しているかを判断し（ステップＳ５５）、発生していた場合、その転送データ選択信号３２に従って、転送データ保存部２３１〜２３４に保存されている転送データの中から２種類の転送データ３９、４０を選択して並列に出力する。
【００４４】
なお、転送データ保存部２３１、２３２、２３３、２３４は、ステージＦ＿Ｎ［］、Ｆ＿Ｂ［］、Ｆ＿ＢＮ［］、Ｆ＿ＢＢ［］で処理される転送データ３８をそれぞれ保存する。すなわち、転送データ保存部２３１はステージＦ＿Ｎ［ｈ］における１Ｔ前に実行されるアドレスから分岐がない場合の転送データ３８を保存し、転送データ保存部２３２はステージＦ＿Ｂ［ｉ］における１Ｔ前に実行されるアドレスからの分岐予測先の転送データ３８を保存する。また、転送データ保存部２３３は、ステージＦ＿ＢＮ［ｊ］における１Ｔ前の分岐予測アドレス＋１の転送データを保存し、転送データ保存部２３４は、ステージＦ＿ＢＢ［ｋ］における１Ｔ前の分岐予測アドレスからの分岐予測先の転送データ３８を保存する。
【００４５】
分岐が発生していない場合は、転送データ選択部２３５は転送データ選択信号３２に従って、転送データ保存部２３１、２３２に保存されているステージＦ＿Ｎ［］、Ｆ＿Ｂ［］で処理される転送データを選択して並列に出力し、分岐が発生している場合は、転送データ保存部２３３、２３４に保存されているステージＦ＿ＢＮ［］、Ｆ＿ＢＢ［］で処理される転送データを選択して並列に出力する。
【００４６】
次に、図１の復号処理部２４の構成及び動作について説明する。図１１は図１の復号処理部２４の一実施の形態のブロック図を示す。図１１に示すように、復号処理部２４は、復号部２４１及び２４２と、復号データ保存部２４３及び２４４と、復号データ選択部２４５とよりなる。復号部２４１には転送処理部２３から第１の転送データ３９が入力されると共に、プログラムロード処理部２２から復号指示信号３３が供給され、復号部２４２には転送処理部２３から第２の転送データ４０が入力されると共に、プログラムロード処理部２２から復号指示信号３３が供給され、それぞれ復号指示信号３３に従って転送データ３９、４０を復号する。
【００４７】
復号データ保存部２４３、２４４は復号部２４１、２４２から出力された復号データを互いに独立して保存する。復号データ選択部２４５は、プログラムロード処理部２２から供給された復号データ選択信号３４に従って、復号データ保存部２４３及び２４４のうち一方に保存されている復号データを選択して読み出し、実行処理部２５へ復号データ４１として出力する。
【００４８】
次に、復号処理部２４の動作について、図１２に示す詳細動作説明用フローチャートと共に説明する。復号処理部２４は、処理を開始すると、先ず復号指示信号３３が発生しているか（入力されているか）を判断し（ステップＳ６１）、発生している場合、その復号指示信号３３に従って転送処理部２３からの転送データ３９、４０をそれぞれ復号部２４１、２４２にて復号し、得られた復号データを復号データ保存部２４３、２４４へ供給して格納する（ステップＳ６２）。
【００４９】
復号指示信号３３が発生していなかった場合は、復号処理は行わない。続いて、復号データ選択部２４５は、復号データ選択信号４５が発生しているか（入力されているか）を判断し（ステップＳ６３）、発生していた場合、その復号データ選択信号４５に従って復号データ保存部２４３、２４４に保存されている一方の復号データを選択して実行処理部２５へ復号データ４１として出力して（ステップＳ６４）、復号処理を終了する（ステップＳ６５）。復号データ選択部２４５は、復号データ選択信号４５が発生していない（入力されていない）と判定した場合は、復号データの選択動作を行わず復号処理を終了する（ステップＳ６５）。
【００５０】
復号部２４１、復号データ保存部２４３及び復号データ選択部２４５を使用して行われる復号処理が、ステージＤ＿１［］であり、復号部２４２、復号データ保存部２４４及び復号データ選択部２４５を使用して行われる復号処理が、ステージＤ＿２［］である。復号データ選択部２４５は、分岐が発生していない場合は、復号データ保存部２４３に保存されている復号データを選択し（ステージＤ＿１［］による復号データを選択し）、分岐が発生している場合は、復号データ保存部２４４に保存されている復号データを選択し（ステージＤ＿２［］による復号データを選択する。
【００５１】
次に、以上説明した図１の実施の形態の中央処理装置の分岐処理が無い場合の動作について、図１３と共に説明する。図１３において、太枠は転送処理部２３において実際に動作しているステージを示す（後述の図１４も同様）。
【００５２】
まず、最初のサイクル１Ｔ（以下、１Ｔ）では、プログラムロード処理部２２において図４のステップＳ２の初期処理１を実行し、各転送データの保存内容は、Ｆ＿Ｎ［ｈ］では、ｈ＝０（プログラム開始アドレスが０ｘ０とする）となるため、Ｆ＿Ｎ［０］となる。Ｆ＿Ｂ［ｉ］，Ｆ＿ＢＮ［ｊ］，Ｆ＿ＢＢ［ｋ］については、定義されない。すなわち、図９の転送処理部２３内の転送データ保存部２３１にプログラム開始アドレスのプログラムデータが保存されるステージＦ＿Ｎ［０］が実行されるが、転送データ保存部２３２〜２３４にはデータは保存されない。
【００５３】
また、１Ｔにおけるパイプライン処理は、各ステージともに、開始アドレスの処理を行うため、Ｄ＿１［ｍ］，Ｅ［ｐ］，Ｗ［ｑ］それぞれＤ＿１［０］，Ｅ［０］Ｗ［０］と設定される。Ｄ＿２［ｎ］は定義しない。
【００５４】
次のサイクルの２Ｔでは、プログラムロード処理部２２は図４のステップＳ５の初期処理２を実施し、各転送データの保存内容は、Ｆ＿Ｎ［ｈ］では、１Ｔ（前サイクル）での実行アドレスは、開始アドレスだったので、ｈ＋＋とし、分岐がなかったときの実行アドレスとして設定する。Ｆ＿Ｂ［ｉ］では、１ＴでのＦ＿Ｎ［０］の復号処理が行われている最中で、分岐処理に入るかどうかの判断ができないため、アドレス０において分岐処理があると予想して、ＣＰＵで設定しているレジスタから分岐先を抜き出す。その予想した分岐先アドレスをｙとすると、分岐先アドレスｙが存在するかどうか判断し、存在する場合はその分岐先アドレス先のデータをＦ＿Ｂ［ｉ］へセットし、保存する。
【００５５】
すなわち、復号処理部２４は転送処理部２３によるステージＦ＿Ｎ［０］で処理されたデータを復号する（ステージD_1(m＝h)）。一方、これと同時に、転送処理部２３は図９の転送処理部２３内の転送データ保存部２３１にプログラム開始アドレスを１つインクリメントしたアドレスのプログラムデータを保存するステージＦ＿Ｎ［ｈ＝ｈ＋１］を実行すると共に、予想した分岐先アドレスｙのプログラムデータを転送データ保存部２３２に保存するステージＦ＿Ｂ［ｉ＝ｙ］を実行する。
【００５６】
次のサイクル３Ｔでは、復号処理部２４では、アドレスｈ，ｉのデータ、すなわち、転送データ保存部２３１、２３２から転送されたデータをそれぞれ同時に復号し、分岐がある場合とない場合のどちらの選択が行われても良い状態にする（ステージＤ＿１［ｍ＝ｈ］、Ｄ＿２［ｎ＝ｉ］）。また、実行処理部２５では、復号処理部２４から入力された１Ｔで転送処理部２３へ転送された開始アドレスの復号データが実行されている（ステージＥ［ｐ＝ｈ］）。
【００５７】
また、Ｆ＿Ｎ［ｈ］には、２ＴでのＦ＿Ｎ［ｈ］のアドレスを一つ進めた値ｈ＋＋を用いる。Ｆ＿ＢＮ［ｊ］には、２ＴでのＦ＿Ｂ［ｉ＝ｙ］で分岐がなかった場合のアドレスｉ＋＋値を用いる。Ｆ＿ＢＢ［ｋ］には、２ＴにおけるＦ＿Ｂ［ｉ＝ｙ］に分岐があると予想し分岐先ｖを取得しアドレスｋ＝ｖとする。Ｆ＿Ｂ［ｉ］には、２ＴでのＦ＿Ｎ［ｈ］が分岐処理があると予想して、分岐先ｕを抜き出しｉ＝ｕとする。
【００５８】
すなわち、転送処理部２３は図９の転送処理部２３内の転送データ保存部２３１に２ＴでのＦ＿Ｎ［ｈ］のアドレスを一つ進めた値ｈ＋＋のプログラムデータを保存するステージＦ＿Ｎ［ｈ＝ｈ＋１］を実行すると共に、予想した分岐先アドレスｕのプログラムデータを転送データ保存部２３２に保存するステージＦ＿Ｂ［ｉ＝ｕ］を実行し、更に、２ＴでのＦ＿Ｂ［ｉ＝ｙ］で分岐がなかった場合のアドレスｉ＋＋のプログラムデータを転送データ保存部２３３に保存するステージＦ＿ＢＮ［ｊ＝ｉ＋１］を実行すると共に、予想した分岐先アドレスｖのプログラムデータを転送データ保存部２３４に保存するステージＦ＿ＢＢ［ｋ＝ｖ］を実行する。
【００５９】
次のサイクル４Ｔでは、実行結果保存処理部２６が実行処理部２５から送られてきた最初のプログラムデータの復号データの実行結果を書き込む処理を行い（ステージＷ［ｑ＝ｈ］）、実行処理部２５が復号処理部２４から入力された３Ｔでの復号データを実行し（ステージＥ［ｐ＝ｈ］）、復号処理部２４では、アドレスｈ，ｉのデータ、すなわち、転送データ保存部２３１、２３２から転送されたデータをそれぞれ同時に復号し、分岐がある場合とない場合のどちらの選択が行われても良い状態にする（ステージＤ＿１［ｍ＝ｈ］、Ｄ＿２［ｎ＝ｉ］）。更に、転送データ保存部２３１〜２３４にはアドレスｈ＝ｈ＋１，ｉ＝ａ，ｊ＝ｉ＋１，ｋ＝ｂのデータを保存する処理が実行される（ステージF_N[h=h+1]、F_B［i=a］、F_BN［j=i＋１］、F_BB[k=b]）。以下、同様の動作が行われる。
【００６０】
次に、図１の実施の形態の中央処理装置の分岐処理がある場合の動作について、図１４と共に説明する。図１４では、１Ｔ〜３Ｔまでは図１３と同様であるが、４Ｔ以降が異なる。すなわち、４Ｔでは、１Ｔで取得した開始アドレスデータが３Ｔにて実行処理部２５にて実行された結果、分岐が発生したことになっている。
【００６１】
すると、次に実行処理部２５で実行するのは、３Ｔで分岐を予想して復号したＤ＿２［ｎ］のデータが必要になるため、Ｅ［ｐ］にアドレスｎで取得したデータを復号した結果Ｄ＿２［ｎ］を転送する。実行処理部２５では、分岐が発生したことを知らせる、分岐結果信号３５がプログラムロード処理部２２へ出力される。分岐が発生したことを判断したプログラムロード処理部２５の分岐処理では、Ｆ＿Ｎ［ｈ］には、３ＴでのＦ＿ＢＮ［ｊ］のアドレスｊ＋１を用いる。これは分岐先がアドレスｊに決定したからである。Ｆ＿Ｂ［ｉ］では、３ＴにおけるＦ＿Ｂ［ｊ］の実行時に分岐処理があることを予想した分岐先アドレスａを取得しｉ＝ａとする。Ｆ＿ＢＮ［ｊ］では、３ＴにおけるＦ＿ＢＢ［ｋ］に分岐処理がない場合を想定してｋ＋１とする。Ｆ＿ＢＢ［ｋ］では、３ＴにおけるＦ＿ＢＢ［ｋ］に分岐処理があると予想した分岐先アドレスｂを取得し、ｋ＝ｂとする。
【００６２】
分岐が発生した場合は上記の３Ｔ、４Ｔと同様の手順を繰り返す。このように、本実施の形態によれば、常に処理するプログラムの分岐を予想していることから、図１６に示した従来の中央処理装置ではプログラムロード処理部２２での分岐発生判断から分岐先の処理に遷移するまでに要する３サイクルが、図１４から分かるように０サイクルに短縮し、分岐処理を時間的なオーバーヘッドなく行うことができる。
【産業上の利用可能性】
【００６３】
複数のステージとパイプライン構成を用いた全てのＣＰＵに適用できる。
【図面の簡単な説明】
【００６４】
【図１】本発明の中央処理装置の一実施の形態のパイプライン処理時のブロック図である。
【図２】図１中のプログラム保存領域内のプログラムデータの一例の説明図である。
【図３】図１中のプログラムロード処理部の一実施の形態のブロック図である。
【図４】図３のプログラムロード処理部の動作説明用フローチャートである。
【図５】図４の初期処理１の詳細説明用フローチャートである。
【図６】図４の初期処理２の詳細説明用フローチャートである。
【図７】図４の初期処理３の詳細説明用フローチャートである。
【図８】図４の分岐予測の詳細説明用フローチャートである。
【図９】図１中の転送処理部の一実施の形態のブロック図である。
【図１０】図９の転送処理部の動作説明用フローチャートである。
【図１１】図１中の復号処理部の一実施の形態のブロック図である。
【図１２】図１１の復号処理部の動作説明用フローチャートである。
【図１３】本発明の中央処理装置の一実施の形態における分岐処理が無い場合のタイミングチャートである。
【図１４】本発明の中央処理装置の一実施の形態における分岐処理がある場合のタイミングチャートである。
【図１５】従来のパイプライン処理を実行する中央処理装置の一例のブロック図である。
【図１６】従来の中央処理装置の分岐処理がある場合のタイミングチャートである。
【図１７】特許文献１の中央処理装置のパイプライン処理時のブロック図である。
【図１８】特許文献２の中央処理装置のパイプライン処理時のブロック図である。
【符号の説明】
【００６５】
２１  プログラム保存領域
２２  プログラムロード処理部
２３  転送処理部
２４  復号処理部
２５  実行処理部
２６  実行結果保存処理部
３１  転送データ更新指示信号
３２  転送データ選択信号
３３  復号指示信号
３４  復号データ選択信号
３５  分岐結果信号
３６  プログラムデータ
３７  読み出し信号
３８〜４０  転送データ
４１  復号データ
２２１  プログラムデータ保存部
２２２  シーケンス処理部
２３１〜２３４  転送データ保存部
２３５  転送データ選択部
２４１、２４２  復号部
２４３、２４４  復号データ保存部
２４５  復号データ選択部
【図１】
2007102596.tif 000003
【図２】
2007102596.tif 000004
【図３】
2007102596.tif 000005
【図４】
2007102596.tif 000006
【図５】
2007102596.tif 000007
【図６】
2007102596.tif 000008
【図７】
2007102596.tif 000009
【図８】
2007102596.tif 000010
【図９】
2007102596.tif 000011
【図１０】
2007102596.tif 000012
【図１１】
2007102596.tif 000013
【図１２】
2007102596.tif 000014
【図１３】
2007102596.tif 000015
【図１４】
2007102596.tif 000016
【図１５】
2007102596.tif 000017
【図１６】
2007102596.tif 000018
【図１７】
2007102596.tif 000019
【図１８】
2007102596.tif 000020