IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ たけおかラボ株式会社の特許一覧 ▶ 東京エレクトロン株式会社の特許一覧

特許7506718ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム
<>
  • 特許-ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム 図1
  • 特許-ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム 図2
  • 特許-ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム 図3
  • 特許-ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム 図4
  • 特許-ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム 図5
  • 特許-ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム 図6
  • 特許-ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-18
(45)【発行日】2024-06-26
(54)【発明の名称】ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム
(51)【国際特許分類】
   G06F 9/38 20180101AFI20240619BHJP
   G06F 9/32 20180101ALI20240619BHJP
   G06F 9/455 20180101ALI20240619BHJP
【FI】
G06F9/38 330F
G06F9/32 320E
G06F9/455
【請求項の数】 11
(21)【出願番号】P 2022125913
(22)【出願日】2022-08-05
(65)【公開番号】P2024022371
(43)【公開日】2024-02-16
【審査請求日】2023-11-30
【早期審査対象出願】
(73)【特許権者】
【識別番号】514303444
【氏名又は名称】たけおかラボ株式会社
(73)【特許権者】
【識別番号】000219967
【氏名又は名称】東京エレクトロン株式会社
(74)【代理人】
【識別番号】100135068
【弁理士】
【氏名又は名称】早原 茂樹
(72)【発明者】
【氏名】竹岡 尚三
(72)【発明者】
【氏名】木下 喜夫
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開2007-94813(JP,A)
【文献】特開2000-29696(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 9/32
G06F 9/455
(57)【特許請求の範囲】
【請求項1】
ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるプロセッサであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を有して、連結したパイプライン処理を実行すると共に、
ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
を有することを特徴とするプロセッサ。
【請求項2】
ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるプロセッサであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を有して、連結したパイプライン処理を実行すると共に、
ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
を有し、
ソースコードのジャンプ元コードに、ジャンプ先ラベル、及び、ジャンプ先の先頭機械語命令が記述されており、
テーブルには、ジャンプ先ラベル毎に、ジャンプ先の先頭アドレス及び先頭機械語命令が記述され、
テーブルは、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成される
ことを特徴とするプロセッサ。
【請求項3】
パイプライン制御手段による処理の後、
デコード手段がジャンプ先の先頭機械語命令を制御情報にデコードし、命令フェッチ手段がジャンプ先の2番目機械語命令をフェッチする
ことを特徴とする請求項1に記載のプロセッサ。
【請求項4】
命令フェッチ手段、デコード手段及び実行手段は、クロックに同期して連続する複数の機械語命令を並列に実行するものであり、
当該プロセッサは、第1のクロックによって命令フェッチ手段から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード手段へ入力する第1のバッファを更に有し、
パイプライン制御手段は、当該ジャンプ先の先頭機械語命令を第1のバッファにセットする
ことを特徴とする請求項3に記載のプロセッサ。
【請求項5】
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を連結したパイプライン処理を実行するプロセッサであって、
ジャンプ先毎に、先頭アドレス、2番目機械語命令、及び、先頭機械語命令の制御情報を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の3番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の2番目機械語命令をデコード手段に入力し、当該ジャンプ先の先頭機械語命令の制御情報を実行手段に入力するパイプライン制御手段と
を有することを特徴とするプロセッサ。
【請求項6】
パイプライン制御手段による処理の後、
第1のクロックによって、実行手段がジャンプ先の先頭機械語命令の制御情報を実行すると共に、デコード手段がジャンプ先の2番目機械語命令を制御情報にデコードし、命令フェッチ手段がジャンプ先の3番目機械語命令をフェッチする
ことを特徴とする請求項5に記載のプロセッサ。
【請求項7】
命令フェッチ手段、デコード手段及び実行手段は、クロックに同期して連続する複数の機械語命令を並列に実行するものであり、
当該プロセッサは、
第1のクロックによって命令フェッチ手段から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード手段へ入力する第1のバッファと、
第1のクロックによってデコード手段から出力された制御情報を一時的に記憶した後、第2のクロックによって当該制御情報を実行手段へ入力する第2のバッファと
を更に有し、
パイプライン制御手段は、当該ジャンプ先の2番目機械語命令を第1のバッファにセットし、当該ジャンプ先の先頭機械語命令の制御情報を第2のバッファにセットする
ことを特徴とする請求項6に記載のプロセッサ。
【請求項8】
当該プロセッサは、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるものであり、
テーブルは、ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成される
ことを特徴とする請求項5に記載のプロセッサ。
【請求項9】
当該プロセッサは、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるものであり、
ソースコードのジャンプ元コードに、ジャンプ先ラベル、ジャンプ先の先頭機械語命令、及び、ジャンプ先の2番目機械語命令が記述されており、
テーブルには、ジャンプ先ラベル毎に、ジャンプ先の2番目機械語命令と、ジャンプ先の先頭機械語命令を変換した制御情報とが記述され、
テーブルは、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成される
ことを特徴とする請求項5に記載のプロセッサ。
【請求項10】
プロセッサを機能させるために、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されるプログラムであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
して機能させ、連結したパイプライン処理を実行させると共に、
ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
してプロセッサを機能させることを特徴とするプログラム。
【請求項11】
プロセッサを機能させるために、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されるプログラムであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
して機能させ、連結したパイプライン処理を実行させると共に、
ジャンプ先毎に、先頭アドレス、2番目機械語命令、及び、先頭機械語命令の制御情報を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の3番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の2番目機械語命令をデコード手段に入力し、当該ジャンプ先の先頭機械語命令の制御情報を実行手段に入力するパイプライン制御手段と
してプロセッサを機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、パイプライン処理を実行するプロセッサの技術に関する。特に、RISC(Reduced Instruction Set Computer)アーキテクチャに基づくものに適する。
【背景技術】
【0002】
RISCは、縮小命令セットアーキテクチャとして設計されたものである。特に、命令における総数や種類、フォーマットを少なくし、それぞれの命令の処理やオペランドのアドレッシングを単純化したものである。
また、RISCは、複数段階の処理要素を、パイプライン処理によって高速化している。パイプライン処理とは、前段の処理要素の出力が後段の処理要素の入力となるように、直列に連結したものである。そして、列の処理要素をクロックに応じてシフトさせていき、並行に処理する。また、処理要素間に、バッファを置いて、1クロック毎の同期をとる。
【0003】
図1は、従来技術におけるパイプライン処理を表す説明図である。
【0004】
図1によれば、RISCの4段パイプライン処理としては、以下の処理要素が連結されている。
命令フェッチ部(IF (Instruction Fetch))
:プログラムカウンタにセットされたメモリアドレスから、機械語命令を
フェッチする
デコード部(ID (Instruction Decode/register read))
:命令フェッチ部から出力された機械語命令を、制御情報(命令エンコーディ
ング形式の制御ビット列)にデコードする
実行部(EX (EXecution/address calculation))
:デコード部から出力された制御情報を実行する
書き込み部(WB (Write Back))
:メモリの読み出し及び書き込み・レジスタへの書き込み
命令フェッチ部、デコード部、実行部、書き込み部はそれぞれ、クロック同期して内部情報をシフトさせながら実行される。各処理要素を並列に処理することによって、クロックを無駄にすることがない。
【0005】
従来、CISC(Complex Instruction Set Computer)型プロセッサのデータ構造及びコードを、RISC型プロセッサに適用できるよう変換する技術がある(例えば特許文献1参照)。この技術によれば、メモリ内の一連のアドレスから機械語命令をフェッチし、その機械語命令をデコードする。次に、このとき、フェッチされた機械語命令の中でジャンプ命令を検出した際に、ジャンプ先のターゲットアドレスを含むレジスタのアドレスを抽出する。そして、ジャンプ命令を実行する前に、一連のアドレスでからはなく、レジスタが指すターゲットアドレスから機械語命令をフェッチする。
【0006】
また、複雑な回路構成にすることなく、1サイクルで分岐を実行し、命令のパイプラインを分断させない分岐予測の技術もある(例えば特許文献2参照)。この技術によれば、RISCに適した割り込みルーチンを処理するために、以下の段階を処理する。
(段階1)割り込み発生の2サイクル前にパイプラインに投入された命令のロケーション指示部をセーブする。
(段階2)割り込み発生の1サイクル前に投入された命令のロケーション指示部をセーブする。
(段階3)割り込みルーチンを処理する。
(段階4)割り込みルーチンから復帰する前に、段階1でセーブされたロケーション指示部にある命令をパイプラインに投入する。
(段階5)割り込みルーチンから復帰する前に、段階2でセーブされたロケーション指示部にある命令をパイプラインに投入する。
【先行技術文献】
【特許文献】
【0007】
【文献】特開平6-103067号公報
【文献】特開平9-171463号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
図2は、ジャンプ命令の際に無駄なクロックとして生じるバブルを表す説明図である。
【0009】
図2によれば、命令フェッチ部は、プログラムカウンタにセットされたメインメモリのアドレスから、機械語命令をフェッチする。このとき、プログラムカウンタは、次の機械語命令のメモリアドレスへカウントアップされる。
ここで、命令フェッチ部によってフェッチされた機械語命令が、ジャンプ命令(JAL(Jump And Link)及びJALR(Jump And Link Register))であったとする。
次に、デコード部は、そのジャンプの機械語命令を、制御情報にデコードする。
そして、実行部は、その制御情報を実行する。このとき、実行部は、ジャンプの制御情報を実行することによって、プログラムカウンタを、ジャンプ先の先頭アドレスにセットする。
【0010】
注目すべきは、そのジャンプ命令の制御情報が実行部で実行されるまで、ジャンプ先のアドレスが、プログラムカウンタにセットされることはない、ことにある。即ち、ジャンプ命令の制御情報が実行部で実行された時には、既に、命令フェッチ部及びデコード部は、プログラムカウンタのカウントアップによって処理を進行している。そのために、その命令フェッチ部及びデコード部の処理は無駄なもの(バブル)となる。
即ち、ジャンプ命令の制御情報が実行部で実行された後、ジャンプ先の先頭アドレスが、プログラムカウンタにセットされ、命令フェッチ部は次のクロックで改めて、そのプログラムカウンタに応じた機械語命令をフェッチしなければならない。
これは、パイプライン処理の中で、ジャンプ命令が実行される毎に、パイプライン・バブルを生じることとなり、プロセッサの処理能力を低下させる原因となっていた。
【0011】
そこで、本開示は、ジャンプ命令が実行される場合であってもパイプライン・バブルをできる限り生じないように、パイプライン処理を制御するプロセッサ及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0012】
本開示によれば、
ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるプロセッサであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を連結したパイプライン処理を有すると共に
ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
を有することを特徴とする。
また、本開示のプロセッサにおける他の実施形態によれば、
ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるプロセッサであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を連結したパイプライン処理を有すると共に
ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
を有し、
ソースコードのジャンプ元コードに、ジャンプ先ラベル、及び、ジャンプ先の先頭機械語命令が記述されており、
テーブルには、ジャンプ先ラベル毎に、ジャンプ先の先頭アドレス及び先頭機械語命令が記述され、
テーブルは、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成される
ことを特徴とする。
【0013】
本開示のプロセッサにおける他の実施形態によれば、
パイプライン制御手段の処理の後、
デコード手段がジャンプ先の先頭機械語命令を制御情報にデコードし、命令フェッチ手段がジャンプ先の2番目機械語命令をフェッチする
ことも好ましい。
【0014】
本開示のプロセッサにおける他の実施形態によれば、
命令フェッチ手段、デコード手段及び実行手段は、クロックに同期して連続する複数の機械語命令を並列に実行するものであり、
第1のクロックによって命令フェッチ手段から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード手段へ入力する第1のバッファを更に有し、
パイプライン制御手段は、当該ジャンプ先の先頭機械語命令を第1のバッファにセットする
ことも好ましい。
【0017】
本開示によれば、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を連結したパイプライン処理を実行するプロセッサにおいて、
ジャンプ先毎に、先頭アドレス、2番目機械語命令、及び、先頭機械語命令の制御情報を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の3番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の2番目機械語命令をデコード手段に入力し、当該ジャンプ先の先頭機械語命令の制御情報を実行手段に入力するパイプライン制御手段と
を有することを特徴とする。
【0018】
本開示のプロセッサにおける他の実施形態によれば、
パイプライン制御手段の処理の後、
第1のクロックによって、実行手段がジャンプ先の先頭機械語命令の制御情報を実行すると共に、デコード手段がジャンプ先の2番目機械語命令を制御情報にデコードし、命令フェッチ手段がジャンプ先の3番目機械語命令をフェッチする
ことも好ましい。
【0019】
本開示のプロセッサにおける他の実施形態によれば、
命令フェッチ手段、デコード手段及び実行手段は、クロックに同期して連続する複数の機械語命令を並列に実行するものであり、
第1のクロックによって命令フェッチ手段から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード手段へ入力する第1のバッファと、
第1のクロックによってデコード手段から出力された制御情報を一時的に記憶した後、第2のクロックによって当該制御情報を実行手段へ入力する第2のバッファと
を更に有し、
パイプライン制御手段は、当該ジャンプ先の2番目機械語命令を第1のバッファにセットし、当該ジャンプ先の先頭機械語命令の制御情報を第2のバッファにセットする
ことも好ましい。
【0020】
本開示のプロセッサにおける他の実施形態によれば、
当該プロセッサは、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるものであり、
テーブルは、ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成される
ことも好ましい。
【0021】
本開示のプロセッサにおける他の実施形態によれば、
当該プロセッサは、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるものであり、
ソースコードのジャンプ元コードに、ジャンプ先ラベル、ジャンプ先の先頭機械語命令、及び、ジャンプ先の2番目機械語命令が記述されており、
テーブルには、ジャンプ先ラベル毎に、ジャンプ先の2番目機械語命令と、ジャンプ先の先頭機械語命令を変換した制御情報とが記述され、
テーブルは、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成される
ことも好ましい。
【0022】
本開示によれば、
プロセッサを機能させるために、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されるプログラムであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を連結したパイプライン処理を有すると共に
ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
してプロセッサを機能させることを特徴とする。
【0023】
本開示によれば、
プロセッサを機能させるために、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されるプログラムであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を連結したパイプライン処理を有すると共に、
ジャンプ先毎に、先頭アドレス、2番目機械語命令、及び、先頭機械語命令の制御情報を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の3番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の2番目機械語命令をデコード手段に入力し、当該ジャンプ先の先頭機械語命令の制御情報を実行手段に入力するパイプライン制御手段と
してプロセッサを機能させることを特徴とする。
【発明の効果】
【0024】
本開示のプロセッサ及びプログラムによれば、ジャンプ命令が実行される場合であってもパイプライン・バブルをできる限り生じないように、パイプライン処理を制御することができる。
【図面の簡単な説明】
【0025】
図1】従来技術におけるパイプライン処理を表す説明図である。
図2】ジャンプ命令の際に無駄なクロックとして生じるバブルを表す説明図である。
図3】本開示におけるプロセッサの機能構成図である。
図4】第1の実施形態におけるパイプライン制御部の説明図である。
図5図4におけるテーブルを表す説明図である。
図6】第2の実施形態におけるパイプライン制御部の説明図である。
図7図6におけるテーブルを表す説明図である。
【発明を実施するための形態】
【0026】
以下、本開示の実施の形態について、図面を用いて詳細に説明する。
【0027】
図3は、本開示におけるプロセッサの機能構成図である。
【0028】
図3によれば、一般的なRISCのプロセッサにおける機能構成として、プログラムカウンタ101と、命令フェッチ部11と、デコード部12と、実行部13と、書き込み部14とを有する。これは、一般に、4段パイプラインと称される。
また、本開示の特徴として更に、テーブル102と、パイプライン制御部103とを有する。
【0029】
プロセッサは、PLD(Programmable Logic Device)やFPGA(Field Programmable Gate Array)、LSI(Large Scale Integration)であって、半導体チップの回路設計に基づくハードウェア記述言語によって記述されたものであってもよい。ハードウェア記述言語は、プログラミング言語に似た構文や表記法で、回路に含まれる素子の構成やそれぞれの動作条件、素子間の配線などを記述することができる。回路図を、PLDやFPGA、LSIに書き込むことによって、プロセッサチップを製造することができる。
【0030】
本開示について、以下のように2つの実施形態がある。
<第1の実施形態>:パイプライン制御部103は、命令フェッチ部11が参照するプログラムカウンタと、デコード部12に入力される機械語命令とを制御する。
<第2の実施形態>:パイプライン制御部103は、命令フェッチ部11が参照するプログラムカウンタと、デコード部12に入力される機械語命令と、実行部13に入力される制御情報(命令エンコーディング形式の制御ビット列)とを制御する。
【0031】
<第1の実施形態>
図4は、第1の実施形態におけるパイプライン制御部の説明図である。
【0032】
図4によれば、パイプライン制御部103は、命令フェッチ部11が参照するプログラムカウンタと、デコード部12に入力される機械語命令とを制御する。
【0033】
[テーブル102]
テーブル102は、一般に「ディスパッチテーブル」とも称され、ジャンプ先(又はサブルーチン)の命令を記述したものである。テーブル102は、プロセッサ1のコア部10内に、揮発性又は不揮発性のメモリとして記憶され、小容量且つ高速なアクセスを実現する。
【0034】
図4によれば、ソフトウェア記述言語の第1のソースコードと、その第1のソースコードをコンパイルした一部のジャンプ元・機械語命令及びジャンプ先・機械語命令とが記述されている。
<第1のソースコード>
void type0sub(){printf("000\n"); }
void type1sub(){printf("111\n"); }
void type2sub(){printf("222\n"); }
void (*func_table[])(void)={ type0sub, type1sub, type2sub };
void main()
{int tag;
:
(*func_table[tag])();
}
<ジャンプ元・機械語命令>
ld a1,[a0] ;a0(tag)が指すジャンプ先アドレスをa1にロード
fast_dispatch a1 ;ディスパッチテーブルを参照し、a1が指すアドレスへ
ジャンプ
(プログラムカウンタを、a1が指すアドレスにセット)
<ジャンプ先・機械語命令>
type0sub: ;ジャンプ先のラベル(ジャンプ先の先頭アドレスとなる)
ShiftRight a0,a0,3 ;ジャンプ先の先頭機械語命令
addi a0,a0,2 ;ジャンプ先の2番目機械語命令
【0035】
また、第1のソースコードは、例えば以下の第2のソースコードのように記載されるものであってもよい。
<第2のソースコード>
switch(tag){
case 0: jump type0sub(); break;
case 1: jump type1sub(); break;
case 2: jump type2proc(); break;
}
<ジャンプ元・機械語命令>
ld a1,[a0] ;a0が指すジャンプ先アドレスをa1にロード
jmp a1 ;a1が指すアドレスへジャンプ
(プログラムカウンタを、a1が指すアドレスにセット)
<ジャンプ先・機械語命令>
type0sub: ;ジャンプ先のラベル(ジャンプ先の先頭アドレスとなる)
ShiftRight a0,a0,3 ;ジャンプ先の先頭機械語命令
addi a0,a0,2 ;ジャンプ先の2番目機械語命令
【0036】
テーブル102には、ジャンプ(又はサブルーチン)毎に、<先頭アドレス>及び<2番目機械語命令>が記述される。例えばジャンプ先のラベル毎に、以下のように記述される。
<ジャンプ先> <先頭アドレス> <先頭機械語命令>
type0 type0subアドレス ShiftRight a0,a0,3
type1 type1subアドレス subi a1,a1,22
type2 type2subアドレス ・・・・・
ジャンプ先コードの先頭機械語命令は、確定していることを前提とする。
【0037】
尚、テーブル102には、呼び出し回数が多いジャンプ(及びサブルーチン)ほど、登録しておくことが好ましい。これによって、テーブル102に登録されたジャンプ等が呼び出される毎に、バブルクロックをできる限り生じないようにすることができ、プロセッサとして全体的な高速化に寄与する。
【0038】
[パイプライン制御部103]
パイプライン制御部103は、以下の2つの制御を処理する。
<制御11>実行部13によってジャンプの制御情報が実行された際に、テーブル102を用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットする。
<制御12>当該ジャンプ先の先頭機械語命令をデコード部12に入力する。
そして、パイプライン処理によって、命令フェッチ部11及びデコード部12はそれぞれ、クロック同期してシフトしながら実行される。
【0039】
パイプライン制御部103の処理の後、以下のように処理が進行する。
<処理11>デコード部12が、ジャンプ先の先頭機械語命令を制御情報にデコードする。
<処理12>命令フェッチ部11が、ジャンプ先の2番目機械語命令をフェッチする。
【0040】
また、命令フェッチ部11、デコード部12及び実行部13は、クロックに同期して連続する複数の機械語命令を並列に実行する。
ここで、図4によれば、命令フェッチ部11とデコード部12との間に、第1のバッファが置かれている。第1のバッファは、第1のクロックによって命令フェッチ部11から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード部12へ入力する。前述した制御12では、パイプライン制御部103は、当該ジャンプ先の先頭機械語命令を第1のバッファにセットする。
【0041】
これによって、ジャンプ先コードの先頭機械語命令を、メモリからフェッチすることなく、デコード部12の処理から開始することができる。ジャンプ先アドレスからジャンプ先コードへの遷移で、バブルとなる無駄な1クロックを生じることなく、高速に実行することができる。
【0042】
図5は、図4におけるテーブルを表す説明図である。
【0043】
テーブル102は、ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成される。
本実施形態のプロセッサは、ハードウェア記述言語のソースコードによって記述されている。そのソースコードをコンパイルした後、複数のライブラリと「リンク」することによって、実行形式に変換される。勿論、ハードウェア記述言語で記述されることに限られず、布線論理によって実現することもできる。
【0044】
また、テーブル102は、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成することもできる。
図5によれば、ソースコードのジャンプ元コードに、<ジャンプ先ラベル>及び<ジャンプ先の先頭機械語命令>が記述されている。
<ソースコード>
switch(tag){
case 0: call_and_NextInst_is(type0sub, 'ShiftRight a0,a0,3'); break;
case 1: call type1sub(); break;
case 2: jump type2proc(); break;
}
テーブル102には、ジャンプ先ラベル毎に、<先頭アドレス>及び<ジャンプ先の先頭機械語命令>が記述される。
<ジャンプ先> <先頭アドレス> <先頭機械語命令>
type0 type0subアドレス ShiftRight a0,a0,3
【0045】
<第2の実施形態>
図6は、第2の実施形態におけるパイプライン制御部の説明図である。
【0046】
図6によれば、パイプライン制御部103は、命令フェッチ部11が参照するプログラムカウンタと、デコード部12に入力される機械語命令と、実行部13に入力される制御情報(命令エンコーディング形式の制御ビット列)とを制御する。
【0047】
[テーブル102]
テーブル102には、ジャンプ(又はサブルーチン)先毎に、<先頭アドレス>、<2番目機械語命令>及び<先頭機械語命令の制御情報>が記述される。例えばジャンプ先のラベル毎に、以下のように記述される。
<ジャンプ先> <先頭アドレス> <2番目機械語命令>
<先頭機械語命令の制御情報>
type0 type0subアドレス addi a0,a0,3 00000000
type1 type1subアドレス ・・・・・ ・・・・・
type2 type2subアドレス ・・・・・ ・・・・・
ジャンプ先コードの先頭機械語命令及び2番目機械語命令は、確定していることを前提とする。
【0048】
[パイプライン制御部103]
パイプライン制御部103は、以下の3つの制御を処理する。
<制御21>実行部13によってジャンプの制御情報が実行された際に、テーブル102を用いて、当該ジャンプ先の3番目機械語命令を指すアドレスをプログラムカウンタにセットする。
<制御22>当該ジャンプの2番目機械語命令をデコード部12に入力する。
<制御23>当該ジャンプ先の先頭機械語命令の制御情報を実行部13に入力する。
そして、パイプライン処理によって、命令フェッチ部11、デコード部12及び実行部13は共に、クロックに同期して連続する機械語命令を並列に実行される。
【0049】
パイプライン制御部103の処理の後、以下のように処理が進行する。
<処理21>実行部13がジャンプ先の先頭機械語命令の制御情報を実行する。
<処理22>デコード部12がジャンプ先の2番目機械語命令を制御情報にデコードする。
<処理23>命令フェッチ部11がジャンプ先の3番目機械語命令をフェッチする。
【0050】
図6によれば、テーブル102に記述される<先頭機械語命令の制御情報>は、ジャンプ先の先頭機械語命令のデコード済みのビット列である。そのために、直ぐに実行部13によって処理可能となり、デコードのためのクロックを要しない。
また、<2番目機械語命令>も、直ぐにデコード部12によって処理可能となり、命令フェッチのためのクロックを要しない。
即ち、命令フェッチ部11及びデコード部12について、パイプライン・バブルをできる限り生じないようにすることができる。
【0051】
また、命令フェッチ部11、デコード部12及び実行部13は、クロックに同期して連続する複数の機械語命令を並列に実行される。
ここで、図6によれば、命令フェッチ部11とデコード部12との間に、第1のバッファと、デコード部12と実行部13との間に、第2のバッファとが置かれている。
第1のバッファは、第1のクロックによって命令フェッチ部11から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード部12へ入力する。
第2のバッファは、第1のクロックによってデコード部12から出力された制御情報を一時的に記憶した後、第2のクロックによって当該制御情報を実行部13へ出力する。
前述した制御22では、パイプライン制御部103は、当該ジャンプの2番目機械語命令を第1のバッファにセットする。
前述した制御23では、パイプライン制御部103は、当該ジャンプ先の先頭機械語命令の制御情報を第2のバッファにセットする。
【0052】
これによって、ジャンプ先コードの<先頭機械語命令>と<2番目機械語命令>とを、メモリからフェッチすることなく、デコード部12及び実行部13の処理から開始することができる。ジャンプ先アドレスからジャンプ先コードへの遷移で、バブルとなる無駄な2クロックを生じることなく、高速に実行することができる。
【0053】
図7は、図6におけるテーブルを表す説明図である。
【0054】
テーブル102は、ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成される。
【0055】
また、テーブル102は、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成することもできる。
図7によれば、ソースコードのジャンプ元コードに、<ジャンプ先ラベル>、<ジャンプ先の先頭機械語命令>及び<ジャンプ先の2番目機械語命令>が記述されている。
<ソースコード>
switch(tag){
case 0: call_and_AfterNextInst_is(type0sub, 'ShiftRight a0,a0,3',
'addi a0,a0,2'); break;
case 1: call type1sub(); break;
case 2: jump type2proc(); break;
}
テーブル102には、ジャンプ先ラベル毎に、<先頭アドレス>及び<ジャンプ先の2番目機械語命令>と、<ジャンプ先の先頭機械語命令の制御情報>とが記述される。
<ジャンプ先> <先頭アドレス> <2番目機械語命令>
<先頭機械語命令の制御情報>
type0 type0subアドレス addi a0,a0,3 00000000・・・
制御情報は、機械語命令から、デコード部12の処理アルゴリズムによって予め変換されたものである。
【0056】
第2の実施形態によれば、特にJava(登録商標)仮想マシン(VM:Virtual Machine)のインタプリタやLispマシン、Prologのコンパイル済み機械語コードなどの高速化に適する。即ち、Java仮想マシンの制御情報から、対応する処理ルーチンを高速にディスパッチすることができる。
インタプリタ方式では、機械語命令を逐次処理するために、負荷が大きく、高速処理が困難となる。Java仮想マシン・インタープリタやLispは、データ・オブジェクトに付加されたタグ情報を参照して、機械語ルーチンをディスパッチすることがほとんどである。そのタグ・ディスパッチ部分の機械語命令を、例えばRISCプロセッサの制御情報として直接生成することができる。このような制御情報を、テーブル102に直接的に記述しておくことによって、ジャンプ(又はサブルーチン)の際に生じるパイプライン・バブルを生じることなく、高速化を図ることができる。
【0057】
以上、詳細に説明したように、本開示のプロセッサ及びプログラムによれば、ジャンプ命令が実行される場合であってもパイプライン・バブルをできる限り生じないように、パイプライン処理を制御することができる。
【0058】
前述した本開示の種々の実施形態について、本開示の技術思想及び見地の範囲の種々の変更、修正及び省略は、当業者によれば容易に行うことができる。前述の説明はあくまで例であって、何ら制約しようとするものではない。本開示は、特許請求の範囲及びその均等物として限定するものにのみ制約される。
【符号の説明】
【0059】
1 プロセッサ
10 コア部
101 プログラムカウンタ
102 テーブル
103 パイプライン制御部
11 命令フェッチ部
12 デコード部
13 実行部
14 書き込み部

図1
図2
図3
図4
図5
図6
図7