(57)【要約】【課題】実行可能な命令を増やした場合でも、高速に演算が可能なプロセッサを提供する。【解決手段】プロセッサ１は、命令に応じて行われる処理の内容に基づいて、実行可能な命令を、Ｍタイプ命令、Ｒタイプ命令、Ｊタイプ命令、Ｂタイプ命令の４つの命令タイプに分類する命令デコーダCTRLを備える。またプロセッサ１は、命令タイプに対応して設けられたパイプラインレジスタ１１〜１４を備えている。命令デコーダCTRLは、命令に含まれる識別コードに基づいて、実行対象の命令の命令タイプを解読する。また命令デコーダCTRLは、命令の命令タイプに基づいて汎用レジスタブロックREGに格納されたデータや命令内のパラメータを対応するパイプラインレジスタに格納する。【選択図】図１
2011170758.tif 000002
【特許請求の範囲】
【請求項１】
命令パイプライン処理の各実行ステージを構成するハードウェアとして、
実行対象の命令を格納する命令メモリと、
前記命令メモリから次に実行する命令のアドレスを格納するプログラムカウンタと、
命令フェッチ処理により前記命令メモリから読み出された前記命令が格納される命令レジスタと、
前記命令レジスタに格納された命令に基づいて、汎用レジスタからの読み込みを行う命令デコーダと、
複数の汎用レジスタからなる汎用レジスタブロックと、
データメモリとそのデータメモリへのアクセス制御を行うメモリアクセスインタフェースと、
算術論理演算処理を行う算術論理演算ユニットと、
ビット演算処理を行うビット演算ユニットと、
各実行ステージ間をつなぐ複数のパイプラインレジスタとを備え、
処理内容に基づいて分類される命令タイプごとに、前記ハードウェアを組み合わせて構成される複数の命令タイプ別実行ステージを有し、
前記命令デコーダは、前記命令タイプに基づいて前記実行ステージへの分岐を行うことを特徴とするプロセッサ。
【請求項２】
前記命令コードは、前記命令タイプに対応した識別コードを有し、
前記命令デコーダは、前記識別コードに基づいて命令タイプを判別することを特徴とする請求項１記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パイプライン処理により高速演算を実現するプロセッサに関する。
【背景技術】
【０００２】
近年、高速化の要求が高いプログラマブルロジックコントローラ（ＰＬＣ）などにおいては、通信処理や周辺処理を行う汎用マイクロプロセッサと、ビット演算処理命令などの命令を処理する専用のプロセッサとを組み合わせることで高速化を実現している。
【０００３】
この種のプロセッサは、ビット演算処理を主とする基本命令と、複数のビットで構成されるデータを扱う応用命令などの各命令をパイプライン実行することで、高速化を実現している（例えば、特許文献１を参照）。特許文献１に記載のＰＬＣでは、専用のハードウェア（プロセッサ）によって、５段パイプライン構造が構成されており、パイプライン処理の各実行ステージでは、次に示す処理が行われる。
第１ステージ：命令メモリから次に実行する命令を取り出す命令フェッチ処理。
第２ステージ：命令デコード処理、及び、汎用レジスタから値を取り出すレジスタフェッチ処理。
第３ステージ：算術論理演算処理、データアドレス計算処理、分岐先計算処理の何れか。
第４ステージ：データメモリへのアクセス処理。
第５ステージ：ビット演算処理、汎用レジスタへの書き込み処理、分岐処理の何れか。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３０００８５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、上述のようなプロセッサにおける命令の処理時間は、パイプライン処理の各実行ステージのうち最も処理時間が長い実行ステージの処理時間によって決定される。高速化を実現するためには、各実行ステージにおける処理時間をパイプライン処理の１クロック分の時間以内で、且つ、各実行ステージの処理時間が等しくなるように設定する必要がある。
【０００６】
しかしながら、上述した従来のプロセッサでは、命令ごとの処理内容によらず共通のハードウェアを用いてパイプライン実行するので、命令デコード処理時には、処理が不要なハードウェアにて処理が行われないよう各種制御が行われる。そのため、プロセッサで実行可能な命令を増やすと、命令デコード処理に必要な時間が長くなり、第２ステージにおける処理時間がパイプライン処理の１クロック分の時間内に収まらない恐れがあった。これにより、例えば図３（ｂ）に示すように、第２ステージにおいて命令デコード処理（図中のID）が終了するまで後段のパイプライン処理が停止して（図中のNOP）、処理速度が低下するという問題があった。
【０００７】
本発明は、上記事由に鑑みて為されたものであり、その目的とするところは、実行可能な命令を増やした場合でも、高速に演算が可能なプロセッサを提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、第１の発明では、命令パイプライン処理の各実行ステージを構成するハードウェアとして、実行対象の命令を格納する命令メモリと、前記命令メモリから次に実行する命令のアドレスを格納するプログラムカウンタと、命令フェッチ処理により前記命令メモリから読み出された前記命令が格納される命令レジスタと、前記命令レジスタに格納された命令に基づいて、汎用レジスタからの読み込みを行う命令デコーダと、複数の汎用レジスタからなる汎用レジスタブロックと、データメモリとそのデータメモリへのアクセス制御を行うメモリアクセスインタフェースと、算術論理演算処理を行う算術論理演算ユニットと、ビット演算処理を行うビット演算ユニットと、各実行ステージ間をつなぐ複数のパイプラインレジスタとを備え、処理内容に基づいて分類される命令タイプごとに、前記ハードウェアを組み合わせて構成される複数の命令タイプ別実行ステージを有し、前記命令デコーダは、前記命令タイプに基づいて前記実行ステージへの分岐を行うことを特徴とする。
【０００９】
第２の発明では、第１の発明において、前記命令コードは、前記命令タイプに対応した識別コードを有し、前記命令デコーダは、前記識別コードに基づいて命令タイプを判別することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、命令デコードにかかる時間を短くすることで、処理可能な命令数を増やした場合でも、高速に処理が可能なプロセッサを提供することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態にかかるプロセッサのハードウェア構造を示す概略ブロック図である。
【図２】同プロセッサの命令セット及び命令構造の一例を示す概略図である。
【図３】（ａ）は同プロセッサにおけるパイプライン構造を示し、（ｂ）は従来のプロセッサにおけるパイプライン構造を示す概略図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態について、図１〜図３に基づいて説明する。本実施の形態にかかるプロセッサ１は、例えば、通信処理や周辺処理を行う汎用マイクロプロセッサとともにＰＬＣを構成し、各種命令をパイプライン実行することで、高速化を実現したプロセッサである。
【００１３】
プロセッサ１が処理する各命令は、命令に応じて行われる処理の内容や、処理時にアクセスするメモリなどのリソースに基づいて、複数の命令タイプに分類される。本実施の形態においては、後述するプロセッサ１の命令デコーダCTRLにより、Ｍタイプ命令、Ｒタイプ命令、Ｊタイプ命令、Ｂタイプ命令の４つの命令タイプに分類している。
【００１４】
各命令の構造は、図２に示すように、識別コードフィールドと、識別コードに続くopコードフィールドと、opコードフィールドに続くパラメータフィールドとで構成されており、命令タイプに応じて識別コードフィールドの値が決定されている。また、opコードは、同一の命令タイプないでは、重複しないような値に設定されており、識別コードとopコードの両方から、一意に命令が導き出せるようになっている。
【００１５】
ここで、Ｍタイプ命令は、主にデータメモリ３（図１を参照）に格納された値へのアクセスを含む命令であり、識別コードは２進で00が設定されている。またＭタイプ命令のパラメータフィールドは、src1フィールド、dst1フィールド、及び、offsetフィールドで構成されている。具体的には、src1フィールドで指定されるレジスタの値と、offsetフィールドの値から実効アドレスを求め、データメモリ３に格納されている値をdst1フィールドで指示された汎用レジスタに読み出すという処理を行う命令（LOAD命令）などである。
【００１６】
Ｒタイプ命令は、主に汎用レジスタ間での演算や、汎用レジスタの値と定数との演算を行う命令であり、識別コードは２進で01が設定されている。またＲタイプ命令のパラメータフィールドは、src1フィールド、src2フィールド、dst1フィールド、及び、functionフィールドとで構成されている。具体的には、src1フィールドで指定される汎用レジスタの値と、src2フィールドで指定される汎用レジスタ値との和を、dst1フィールドで指示された汎用レジスタに書き込むという処理を行う命令（ADD命令）などである。なおfunctionフィールドは、例えば、演算方法の詳細仕様の指定に用いられる。
【００１７】
Ｊタイプ命令は、主に汎用レジスタの値や定数を比較し、比較した結果に応じて分岐処理を行う命令であり、識別コードは２進で10が設定されている。またＪタイプ命令のパラメータフィールドは、src1フィールド、src2フィールド、offsetフィールドとで構成されている。具体的には、src1フィールドで指定される汎用レジスタの値と、src2フィールドで指定される汎用レジスタの値とを比較して、等しければoffsetフィールドの値をプログラムカウンタPCに加算して分岐するという処理を行う命令（BE命令）などである。
【００１８】
Ｂタイプ命令は、主にビット演算を行う命令であり、識別コードは２進で11が設定されており、そのパラメータフィールドは、Bit Processing Instructionフィールドで構成されている。具体的には、特定ビットを1にするというような処理を行う命令（SET命令）などである。
【００１９】
なお、従来のプロセッサにおいては、汎用レジスタに格納された値と既値との演算を行うANDIなどの命令は、レジスタ間で演算を行うANDなどの命令と別に分類されていた。本実施の形態においては、何れの命令においても処理を行うハードウェアは共通化することが可能であるので、共にＲタイプ命令に分類し、各命令を４つの命令タイプに分類している。
【００２０】
このようにして、プロセッサ１は、処理する各命令を４つの命令タイプに分類し、命令に含まれる識別コードに基づいて、どの命令タイプの命令であるかを判断することが可能である。なお、表１は、各命令タイプに含まれる命令の具体例である。
【００２１】
【表１】
2011170758.tif 000003
【００２２】
次に、プロセッサ１におけるパイプライン処理の概要について図３（ａ）を用いて説明を行う。プロセッサ１は、命令タイプによらず共通の処理が行われる第１、第２ステージと、命令タイプごとに処理内容が異なる第３〜第５ステージとで構成される命令実行ステージを、パイプライン実行している。
【００２３】
第１ステージでは、プログラムカウンタPCの値に応じて、命令メモリ２から実行する命令を取り出す命令フェッチ処理（図３（ａ）におけるIF）が行われる。第２ステージでは、命令から命令タイプを判定して、命令タイプに応じた第３ステージへの分岐を行うとともに、汎用レジスタブロックREGから必要な値を取り出して対応するパイプラインレジスタに出力する処理（図３（ａ）におけるID）が行われる。
【００２４】
第３ステージでは、実行対象の命令がＭタイプ命令の場合には、後述するパイプラインレジスタ１１の内容からデータメモリ３にアクセスするアドレスを計算する処理（図３（ａ）におけるM_EX）が行われる。Ｒタイプ命令の場合には、後述するパイプラインレジスタ１２の内容に基づいて、対応するレジスタの値及び既値を算術論理演算する処理（図３（ａ）におけるR_EX）が行われる。Ｊタイプ命令の場合には、後述するパイプラインレジスタ１３の内容に基づいて、対応するレジスタ及び既値を比較判定する処理（図３（ａ）におけるJ_EX）が行われる。Ｂタイプ命令では、後述するパイプラインレジスタ１４の内容に基づいて、データメモリ３から演算対象のデータを読み出す処理（図３（ａ）におけるB_MA）が行われる。
【００２５】
第４ステージでは、実行対象の命令がＭタイプ命令の場合には、第３ステージで計算したアドレスに基づいて、データメモリ３から演算対象のデータを読み出す処理（図３（ａ）におけるM_MA）が行われる。Ｒタイプ命令の場合には、第３ステージにおける演算結果を汎用レジスタブロックREGに格納する処理（図３（ａ）におけるR_WB）が行われる。Ｊタイプ命令の場合には、第３ステージにおける比較結果に基づいて、次に処理を行う命令のアドレス（分岐用アドレス）を命令メモリ２に出力する処理（図３（ａ）におけるJ_WB）が行われる。Ｂタイプ命令の場合には、第３ステージで読み出したデータをビット演算して、汎用レジスタブロックへ書き込む処理（図３（ａ）におけるB_WB）が行われる。
【００２６】
第５ステージでは、実行対象の命令がＭタイプ命令の場合には、第４ステージで読み出したデータを演算し、汎用レジスタブロックへ書き込む処理（図３（ａ）におけるM_WB）が行われる。なお、Ｒタイプ命令、Ｊタイプ命令、Ｂタイプ命令の場合には、第４ステージで処理が完了するので、処理は行われない（図３（ａ）におけるNOP）。
【００２７】
次に、プロセッサ１のハードウェア構成について、図１を用いて説明を行う。
【００２８】
プロセッサ１は、実行対象の命令を格納する命令メモリ２と、プログラムカウンタ制御回路PC-CALからの信号を受けて、次に実行する命令が格納された命令メモリ２のアドレスを計算するプログラムカウンタPCとを備える。また、プロセッサ１は、パイプライン処理の各実行ステージ間を介在するパイプラインレジスタID/M_EX、ID/R_EX、ID/J_EX、ID/B_MA、M_EX/M_MA、R_EX/R_WB、J_EX/J_WB、M_MA/R_WB、B_MA/B_WB（図１における１１〜１９）とを備える。
【００２９】
パイプラインレジスタ１１、１５、１６は、Ｍタイプ命令を処理する際に用いられ、それぞれ、第２ステージと第３ステージ間、第３ステージと第４ステージ間、第４ステージと第５ステージ間を介在するパイプラインレジスタである。またパイプラインレジスタ１２、１７は、Ｒタイプ命令を処理する際に用いられ、それぞれ、第２ステージと第３ステージ間、第３ステージと第４ステージ間を介在するパイプラインレジスタである。またパイプラインレジスタ１３、１８は、Ｊタイプ命令を処理する際に用いられ、それぞれ、第２ステージと第３ステージ間、第３ステージと第４ステージ間を介在するパイプラインレジスタである。またパイプラインレジスタ１４、１９は、Ｂタイプ命令を処理する際に用いられ、それぞれ、第２ステージと第３ステージ間、第３ステージと第４ステージ間を介在するパイプラインレジスタである。
【００３０】
プロセッサ１は、命令メモリ２から取り出された命令が格納される命令レジスタIRを備え、命令レジスタIRは、パイプライン処理における第１ステージと第２ステージとの間を介在するパイプラインレジスタIF/IDを兼用している。プロセッサ１は、プログラムカウンタPCで計算されたアドレスか、上述のJ_WB処理により命令メモリ２に出力された分岐用アドレスの何れかに基づいて、次に実行する命令を命令メモリ２から取り出して、命令レジスタIRに格納する。なお、これらの処理は、パイプライン処理の第１ステージに該当する。
【００３１】
また、プロセッサ１は、複数の汎用レジスタで構成される汎用レジスタブロックREGと、命令レジスタIRに格納された命令の識別コードに基づいて、命令タイプを判別する命令デコーダCTRLとを備える。命令デコーダCTRLは、判別した命令タイプに応じて、汎用レジスタブロックREGにアクセスを行い、命令タイプに対応したパイプラインレジスタ１１〜１４に、汎用レジスタブロックREGから読み込んだ値や命令のパラメータ値を格納する。これらの処理は、パイプライン処理の第２ステージに該当する。
【００３２】
またプロセッサ１は、算術論理演算ユニット（以下、演算ユニットと称す）ALUと、演算対象のデータ及び演算方法を示す制御信号が格納されるアドレス計算レジスタM_EX、及び、算術論理演算レジスタR_EX、J_EXとを備える。演算ユニットALUは、アドレス計算レジスタM_EXの内容に基づいて、データメモリ３にアクセスを行うアドレスを計算し、プロセッサ１が備えるメモリアクセスレジスタM_MAに格納する。また演算ユニットALUは、算術論理演算レジスタR_EX又はJ_EXの内容に基づいて演算を行い、ライトバックレジスタR_WB又はJ_WBに出力する。これらの処理は、パイプライン処理におけるＭタイプ命令、Ｒタイプ命令、Ｊタイプ命令の場合の第３ステージに該当する。なお、アドレス計算レジスタM_EX、算術論理演算レジスタR_EX、J_EX、メモリアクセスレジスタM_MA、及び、ライトバックレジスタR_WB、J_WBは、パイプラインレジスタ１１、１２、１３、１５、１７、１８をそれぞれ兼用している。
【００３３】
プロセッサ１は、データメモリ３と、そのデータメモリ３へのアクセス制御を行うメモリアクセスインタフェース４と、パイプラインレジスタ１４と兼用されるメモリアクセスレジスタB_MAとを備える。メモリアクセスインタフェース４は、メモリアクセスレジスタM_MA、B_MAの内容に基づいて、データメモリ３からデータを読み込み、パイプラインレジスタ１６、１９に格納する。これらの処理は、パイプライン処理におけるＭタイプ命令の場合の第４ステージ、Ｂタイプ命令の場合の第３ステージに該当する。なお、ライトバックレジスタM_WB、ライトバックレジスタB_WBは、パイプラインレジスタ１６は、１９を兼用している。
【００３４】
またプロセッサ１は、ビット演算を行うビット演算ユニットBPUと、ビット演算ユニットBPUの出力に応じて、後ろに続く応用命令の無効化制御を行うビットアキュムレータBITACCとを備える。ビット演算ユニットBPUは、ライトバックレジスタB_WBの内容に基づいてビット演算を行い、その演算結果を汎用レジスタブロックREGへ書き込みを行う。この処理は、パイプライン処理におけるＢタイプ命令の場合の第４ステージに該当する。
【００３５】
またプロセッサ１は、ライトバックレジスタM_WB、R_WBに格納された内容に基づいて、汎用レジスタブロックREGに書き込みを行うとともに、ライトバックレジスタJ_WBに格納された内容に基づいて、命令メモリ２の分岐用アドレスの書き換えを行う。この処理は、パイプライン処理におけるＭタイプ命令の場合の第５ステージ、Ｒタイプ命令及びＪタイプ命令の場合の第４ステージに該当する。
【００３６】
なお、各パイプラインレジスタIF/ID、１１〜１９、及び、プログラムカウンタPCは、例えば、立ち上がりトリガ型のＤフリップフロップで構成することが可能である。
【００３７】
以上に説明したように、命令デコーダCTRLでは命令の識別コードフィールドに設定された値に基づいて処理の分岐を行うことが可能である。この識別コードは、プロセッサ１で処理可能な命令が増えた場合であっても増えず、命令デコーダCTRLは処理可能な命令数が少ない場合とほぼ同じ処理速度で動作することが可能である。これにより、命令デコーダCTRLによる命令デコード処理を主たる処理とする第２ステージの処理時間が、パイプライン処理の１クロック分の時間よりも長くなることを低減することができる。
【００３８】
なお、ハードウェアの構造、命令セット、命令構造、識別コードは、本実施の形態に記載した構成に限定されるものではない。
【符号の説明】
【００３９】
１          プロセッサ
２          命令メモリ
３          データメモリ
４          メモリアクセスインタフェース
１１…１９  パイプラインレジスタ
PC          プログラムカウンタ
PC-CAL      プログラムカウンタ制御回路
IR          命令レジスタ
CTRL        命令デコーダ
REG        汎用レジスタブロック
ALU        算術論理演算ユニット
BPU        ビット演算ユニット
BITACC      ビットアキュムレータ
【図１】
2011170758.tif 000004
【図２】
2011170758.tif 000005
【図３】
2011170758.tif 000006