(57)【特許請求の範囲】
【請求項１】
命令の実行結果が格納される格納部と、
前記命令を実行する複数の演算部であって、前記格納部からオペランドが供給される演算部と、前記格納部を介さずに前記複数の演算部による命令の実行結果を伝達するバイパスからオペランドが供給される演算部と、前記格納部と前記バイパスとの双方からオペランドが供給される演算部と、を含む複数の演算部と、
前記命令のオペランド供給経路を判定すると共に発行可否を判定し、該判定の結果に基づき前記複数の演算部から選択した演算部に命令を発行する制御部と、
を備えるプロセッサ。
【請求項２】
実行される予定の複数の命令が格納される命令バッファを備え、
前記制御部は、前記命令バッファに格納された複数の命令についてオペランド供給経路及び発行可否を判定する、
請求項１記載のプロセッサ。
【請求項３】
前記制御部は、
１サイクル前に発行された命令の前記格納部における格納先アドレスを第１のフラグデータとして保持し、該第１のフラグデータに基づき発行しようとする命令のオペランド供給経路を判定し、
命令が発行されてから実行結果が前記格納部に格納されるまでの間、該命令の前記格納部における格納先アドレスが保持される第２のフラグデータに基づき発行しようとする命令の発行可否を判定する、
請求項１又は２記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オペランドの供給経路を複数備えるプロセッサに関する。
【背景技術】
【０００２】
従来、先行して実行された命令の実行結果をバイパスさせて、後続の命令のオペランドとして演算部に供給する仕組みを備えたプロセッサが知られている。バイパスからオペランドを供給された演算部は、実行結果が格納されるレジスタからオペランドを読み出すことなく命令を実行することができるため、係る仕組みを備えたプロセッサは、処理速度の向上を図ることができる。
【０００３】
これに関連し、レジスタへの書き込み抑制に関する属性情報を保持し、フォワーディング（バイパスによるオペランド供給）が起きたとき、属性情報に応じてフォワーディングされたデータのレジスタ書き込みを抑制するプロセッサが知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２００７／０８３４２１号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
オペランドの供給経路としてバイパスを備えるプロセッサの演算部は、レジスタからのオペランド読み出しと、バイパスからのオペランド読み出しの双方を行うことができるように冗長的に設計されている。しかしながら、このような冗長的な構成は、プロセッサのコストやサイズを増大させてしまう。
【０００６】
一つの側面では、本発明は、プロセッサの性能を維持しつつ、コストやサイズを低減することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一態様は、命令の実行結果が格納される格納部と、前記命令を実行する複数の演算部であって、前記格納部からオペランドが供給される演算部と、前記格納部を介さずに前記複数の演算部による命令の実行結果を伝達するバイパスからオペランドが供給される演算部と、前記格納部と前記バイパスとの双方からオペランドが供給される演算部と、を含む複数の演算部と、前記命令のオペランド供給経路を判定すると共に発行可否を判定し、該判定の結果に基づき前記複数の演算部から選択した演算部に命令を発行する制御部と、を備えるプロセッサである。
【発明の効果】
【０００８】
一実施態様によれば、プロセッサの性能を維持しつつ、コストやサイズを低減することができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の第１実施例に係るプロセッサ１のシステム構成例である。
【図２】セレクタ５１＃１の周辺構成を示す図である。
【図３】セレクタ５１＃２、５２＃２の周辺構成を示す図である。
【図４】第１実施例に係る発行制御回路２４により実行される処理の流れを示すフローチャートの一例である。
【図５】本発明の第２実施例に係るプロセッサ２のシステム構成例である。
【図６】第２実施例に係る発行制御回路２４により実行される処理の流れを示すフローチャートの一例である。
【図７】本発明の第３実施例に係るプロセッサ３のシステム構成例である。
【図８】ベクトル命令シーケンサ３２の構成例である。
【図９】ベクトル命令が実行される様子を模式的に示す図である。
【図１０】命令Ａが、命令Ｂに対して１サイクル遅れで実行される様子を示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００１１】
＜第１実施例＞
以下、図面を参照し、本発明の第１実施例に係るプロセッサ１について説明する。
【００１２】
図１は、本発明の第１実施例に係るプロセッサ１のシステム構成例である。プロセッサ１は、例えば、命令メモリ１０と、デコード回路２０と、供給パス判定回路２２と、発行制御回路２４と、レジスタファイル４０と、演算スロット５０＃０〜５０＃３と、データメモリ６０と、を備える。
【００１３】
図１において、ＩＦは、命令フェッチステージを示し、ＩＤは、命令デコードステージを示し、ＲＲは、レジスタ読み出しステージを示し、ＥＸは、命令実行ステージを示し、ＷＢは、ライトバックステージを示す。プロセッサ１では、図示しないクロック生成手段から供給されるクロック信号に応じて、各ステージの処理が１サイクル毎に実行される。
【００１４】
また、図１は、説明を簡略化するために、オペランドの供給経路を一本として表現しているが、実際には、二本以上のオペランドの供給経路が存在する。
【００１５】
命令フェッチステージＩＦでは、アドレス指定によって命令メモリ１０から命令が読み出される。命令メモリ１０には、プロセッサ１がプログラムに応じた処理を実行するための命令列が格納されている。
【００１６】
命令デコードステージＩＤでは、命令メモリ１０から読み出された命令がデコードされ、いずれかの演算スロットに発行される。デコード回路２０は、命令フェッチステージＩＦにおいて読み出された命令をデコード（復号）し、オペランドのフィールド等を分離する。供給パス判定回路２２は、デコード回路２０がデコードした命令が、レジスタ読み出しと、バイパスのいずれのパス（供給経路）を用いてオペランドを取得するかを判定する。発行制御回路２４は、命令の発行の可否の判断と、発行先の演算スロットの選択を行う。供給パス判定回路２２、及び発行制御回路２４は、直前発行フラグ２６、レジスタのレディフラグ２８を参照して処理を行う。これらの処理の詳細については後述する。
【００１７】
レジスタ読み出しステージＲＲでは、レジスタファイル４０から読み出すことによって、或いはバイパス５７＃０〜５７＃３を介して、演算スロット５０＃０〜５０＃３にソースオペランドが供給される。レジスタファイル４０は、プロセッサ１が命令の実行結果を格納する汎用レジスタ上に構築されるファイルデータである。
【００１８】
演算スロット５０＃０〜５０＃３は、それぞれが命令を実行可能な演算部である。バイパス５７＃０〜５７＃３は、演算スロット５０＃０〜５０＃３による命令の実行結果を、レジスタファイル４０を介さずに伝達するデータ径路である。
【００１９】
〔スロット＃０〕
演算スロット５０＃０は、ＦＦ（Flip Flop）５３＃０、演算器５４＃０、及びＦＦ５６＃０を備える。ＦＦ５３＃０、５６＃０は、１サイクルの間、入力されたデータをラッチする。演算器５４＃０は、加算器、乗算器、ＦＰＧＡ等の演算器である。演算スロット５０＃０には、レジスタファイル４０のみからソースオペランドが供給される。
【００２０】
〔スロット＃１〕
演算スロット５０＃１は、セレクタ５１＃１、ＦＦ５３＃１、演算器５４＃１、及びＦＦ５６＃１を備える。セレクタ５１＃１は、バイパス５７＃０〜５７＃３のいずれかから供給されるソースオペランドをＦＦ５３＃１に出力する。ＦＦ５３＃１、５６＃１は、入力されたデータを１サイクルの間、ラッチする。演算器５４＃１は、加算器、乗算器、ＦＰＧＡ等の演算器である。演算スロット５０＃１には、バイパス５７＃０〜５７＃３のみからソースオペランドが供給される。
【００２１】
図２は、セレクタ５１＃１の周辺構成を示す図である。セレクタ５１＃１は、比較器Ａ〜Ｄと、エンコーダＥとに接続される。比較器Ａ〜Ｄには、ソースオペランドタグＳＴｇと、バイパスタグＢｔｇ＃０〜Ｂｔｇ＃３とが入力される。
【００２２】
ソースオペランドタグＳＴｇは、例えば発行制御回路２４から供給されるデータであり、いずれのバイパスからオペランドを供給されるべきかを示す識別データである。バイパスタグＢｔｇ＃０〜Ｂｔｇ＃３は、バイパス５７＃０〜５７＃３から供給されるバイパスデータに付与される識別データである。比較器Ａは、ソースオペランドタグＳＴｇとバイパスタグＢｔｇ＃０が一致するときにオン信号を出力し、比較器Ｂは、ソースオペランドタグＳＴｇとバイパスタグＢｔｇ＃１が一致するときにオン信号を出力する。比較器Ｃは、ソースオペランドタグＳＴｇとバイパスタグＢｔｇ＃２が一致するときにオン信号を出力し、比較器Ｄは、ソースオペランドタグＳＴｇとバイパスタグＢｔｇ＃３が一致するときにオン信号出力する。
【００２３】
エンコーダＥは、比較器Ａ〜Ｄのうちいずれかがオン信号を出力すると、オン信号を出力した比較器に対応付けられたスロット番号を、セレクタ５１＃１に出力する。比較器Ａにはスロット番号＃０が、比較器Ｂにはスロット番号＃１が、比較器Ｃにはスロット番号＃２が、比較器Ｄにはスロット番号＃３が、それぞれ対応付けられている。
【００２４】
セレクタ５１＃１には、バイパスデータＢＤ＃０〜ＢＤ＃３と、上記スロット番号が入力される。セレクタ５１＃１は、エンコーダＥから入力されたスロット番号をキーとして、バイパスデータＢＤ＃０〜ＢＤ＃３のいずれかを選択し、ソースオペランドとしてＦＦ５３＃１に出力する。バイパスデータＢＤ＃０は、バイパス５７＃０を介して演算スロット５０＃０から入力されたデータであり、バイパスデータＢＤ＃１は、バイパス５７＃１を介して演算スロット５０＃１から入力されたデータである。バイパスデータＢＤ＃２は、バイパス５７＃２を介して演算スロット５０＃２から入力されたデータであり、バイパスデータＢＤ＃３は、バイパス５７＃３を介して演算スロット５０＃３から入力されたデータである。
【００２５】
このような構成により、セレクタ５１＃１は、バイパスされてきたデータの中に、命令に必要なオペランドとタグが一致するものがあれば、当該データをオペランドとして演算器５４＃１に供給する。
【００２６】
〔スロット＃２〕
演算スロット５０＃２は、セレクタ５１＃２、５２＃２、ＦＦ５３＃２、演算器５４＃２、ＬＳ（ロードストアユニット）５５＃２及びＦＦ５６＃２を備える。セレクタ５１＃２は、バイパス５７＃０〜５７＃３のいずれかから入力されるソースオペランドをセレクタ５２＃２に出力する。セレクタ５２＃２は、レジスタファイル４０から供給されるソースオペランドと、セレクタ５１＃２から入力されたソースオペランドとのいずれかをソースオペランドとしてＦＦ５３＃２に出力する。ＦＦ５３＃２、５６＃２は、入力されたデータを１サイクルの間、ラッチする。演算器５４＃２は、加算器、乗算器、ＦＰＧＡ等の演算器である。ＬＳ５５＃２は、データメモリ６０にアクセスしてデータの読み出し及び書き込みを行う。演算スロット５０＃２には、レジスタファイル４０及びバイパス５７＃０〜５７＃３からソースオペランドが供給される。
【００２７】
図３は、セレクタ５１＃２、５２＃２の周辺構成を示す図である。セレクタ５１＃２は、比較器Ａ〜Ｄと、エンコーダＥと、ＯＲ回路Ｆとに接続される。比較器Ａ〜Ｄ、及びエンコーダＥの機能について、図２に示すものと同様であるため、説明を省略する。ＯＲ回路Ｆは、比較器Ａ〜Ｄのいずれかがスロット番号を出力した場合に、その旨を示す信号（例えばバイパスオン信号と称する）をセレクタ５２＃２に出力する。セレクタ５２＃２は、ＯＲ回路Ｆからバイパスオン信号が入力された場合には、セレクタ５１＃２が出力したソースオペランドをＦＦ５３＃２に出力する。一方、セレクタ５２＃２は、ＯＲ回路Ｆからバイパスオン信号が入力されなかった場合には、レジスタファイル４０から供給されたソースオペランドをＦＦ５３＃２に出力する。
【００２８】
セレクタ５１＃２、５２＃２は、バイパスされてきたデータの中に、命令に必要なオペランドとタグが一致するものがあれば、演算器５４＃２等に供給し、無ければレジスタファイル４０から読み出されたデータを演算器５４＃２等に供給する。
【００２９】
〔スロット＃３〕
演算スロット５０＃３は、セレクタ５１＃３、５２＃３、ＦＦ５３＃３、演算器５４＃３、ＬＳ５５＃３、及びＦＦ５６＃３を備える。セレクタ５１＃３は、バイパス５７＃０〜５７＃３のいずれかから入力されるソースオペランドをセレクタ５２＃３に出力する。セレクタ５２＃３は、レジスタファイル４０から供給されるソースオペランドと、セレクタ５１＃３から入力されたソースオペランドとのいずれかをソースオペランドとしてＦＦ５３＃３に出力する。ＦＦ５３＃３、５６＃３は、入力されたデータを１サイクルの間、ラッチする。演算器５４＃３は、加算器、乗算器、ＦＰＧＡ等の演算器である。ＬＳ５５＃３は、データメモリ６０にアクセスしてデータの読み出し及び書き込みを行う。演算スロット５０＃３には、レジスタファイル４０及びバイパス５７＃０〜５７＃３からソースオペランドが供給される。セレクタ５１＃３、５２＃３の周辺構成については、図３に示すものと同様であるため、説明を省略する。
【００３０】
演算実行ステージＥＸでは、命令によって指定された処理が、演算スロット５０＃０〜５０＃３により実行される。
【００３１】
ライトバックステージＷＢでは、演算スロット５０＃０〜５０＃３による実行結果がレジスタファイル４０に書き込まれると共に、バイパス５７＃０〜５７＃３を介して演算スロット５０＃１〜５０＃３に供給される。
【００３２】
〔命令デコードステージＩＤの具体的動作〕
以下、命令デコードステージＩＤの具体的動作について説明する。
【００３３】
直前発行フラグ２６は、例えば専用レジスタに書き込まれるフラグデータであり、１サイクル前に発行された命令のレジスタファイル４０における格納先アドレスが、発行制御回路２４によって格納される。直前発行フラグ２６は、書き込まれてから１サイクルが経過すると消去される。
【００３４】
供給パス判定回路２２は、デコード回路２０がデコードした命令の格納先アドレスと、直前発行フラグ２６に書き込まれたアドレスが一致する場合、当該命令は、バイパス５７＃０〜５７＃３を介してオペランドを供給されるべきと判定する。一方、供給パス判定回路２２は、デコード回路２０がデコードした命令の格納先アドレスと、直前発行フラグ２６に書き込まれたアドレスが一致しない場合、当該命令は、レジスタファイル４０からオペランドを供給されるべきと判定する。
【００３５】
レジスタのレディフラグ２８は、例えば専用レジスタに書き込まれるフラグデータであり、レジスタファイル４０のアドレスに対応したビット数が確保された領域に書き込まれる。レジスタのレディフラグ２８には、発行された命令のレジスタファイル４０における格納先アドレスが、発行制御回路２４によって書き込まれる。また、レジスタのレディフラグ２８に書き込まれた格納先アドレスは、ライトバックステージＷＢで動作する図示しない書き込み回路が、当該格納先アドレスに命令の実行結果を書き込んだときに消去される。
【００３６】
図４は、第１実施例に係る発行制御回路２４により実行される処理の流れを示すフローチャートの一例である。本フローチャートは、例えば１サイクル毎に実行される。
【００３７】
まず、発行制御回路２４は、発行しようとする命令のデータ依存が解消されているか否かを判定する（Ｓ１００）。「データ依存が解消されている」とは、先に実行された命令の実行結果をソースオペランドとして演算を行う場合、先に実行された命令の実行が終了し、実行結果が参照可能な状態となっていることをいう。
【００３８】
発行制御回路２４は、発行しようとする命令がソースオペランドとして読み出すレジスタファイル４０のアドレスが、直前発行フラグ２６とレジスタのレディフラグ２８の双方に書き込まれている場合に、データ依存が解消されていると判定する。この場合、バイパス５７＃０〜５７＃３を介してオペランドが供給可能だからである。
【００３９】
また、発行制御回路２４は、発行しようとする命令がソースオペランドとして読み出すレジスタファイル４０のアドレスが、直前発行フラグ２６とレジスタのレディフラグ２８のいずれにも書き込まれていない場合にも、データ依存が解消されていると判定する。この場合、オペランドが既にレジスタファイル４０に書き込まれているからである。
【００４０】
データ依存が解消されていない場合、発行制御回路２４は、当該サイクルにおいて命令を発行しない（Ｓ１０２）。
【００４１】
データ依存が解消されている場合、発行制御回路２４は、必要な演算リソースを備える演算スロットに空きがあるか否かを判定する（Ｓ１０４）。必要な演算リソースとは、加算器、乗算器、ＦＰＧＡ、ＬＳ等のうち命令の実行に必要なハードウェアをいう。
【００４２】
必要な演算リソースを備える演算スロットに空きが無い場合、発行制御回路２４は、当該サイクルにおいて命令を発行しない（Ｓ１０２）。
【００４３】
必要な演算リソースを備える演算スロットに空きがある場合、発行制御回路２４は、必要なオペランドの供給パスを備える演算スロットに空きがあるか否かを判定する（Ｓ１０６）。必要なオペランドの供給パスを備える演算スロットとは、供給パス判定回路２２がバイパス５７＃０〜５７＃３を介してオペランドを供給されるべきと判定した場合は、演算スロット５０＃１〜５０＃３を指す。また、必要なオペランドの供給パスを備える演算スロットとは、供給パス判定回路２２がレジスタファイル４０からオペランドを供給されるべきと判定した場合は、演算スロット５０＃０、５０＃２、５０＃３を指す。
【００４４】
必要なオペランドの供給パスを備える演算スロットに空きが無い場合、発行制御回路２４は、当該サイクルにおいて命令を発行しない（Ｓ１０２）。
【００４５】
一方、必要なオペランドの供給パスを備える演算スロットに空きがある場合、発行制御回路２４は、必要なオペランドの供給パスを備える演算スロットのうちいずれかを選択して命令を発行する（Ｓ１０８）。
【００４６】
〔まとめ〕
第１実施例のプロセッサ１は、レジスタファイルのみからソースオペランドが供給される演算スロットと、バイパスのみから供給される演算スロットを備えるため、全ての演算スロットが双方の供給パスを備えるものに比して、コストやサイズを低減できる。
【００４７】
また、第１実施例のプロセッサ１は、供給パス判定回路２２及び発行制御回路２４がオペランドの供給パスを判定し、処理に適した演算スロットを選択して命令を発行するため、オペランドの供給パスを削減してもプロセッサ１としての性能を維持することができる。
【００４８】
また、第１実施例のプロセッサ１は、供給パスの削減によって回路面積を小さくすることができるため、同一の設計条件下では、より多くの演算スロットを搭載できることになる。この結果、プロセッサ１としての性能を向上させることができる。
【００４９】
これらより、第１実施例のプロセッサ１は、プロセッサの性能を維持しつつ、コストやサイズを低減することができる。
【００５０】
なお、特許請求の範囲における「格納部」は、例えばレジスタファイル４０に対応し、「制御部」は、例えば供給パス判定回路２２及び発行制御回路２４に対応する。また、特許請求の範囲における「第１のフラグデータ」は、例えば直前発行フラグ２６に対応し、「第２のフラグデータ」は、例えばレジスタのレディフラグ２８に対応する。
【００５１】
＜第２実施例＞
以下、図面を参照し、本発明の第２実施例に係るプロセッサ２について説明する。
【００５２】
図５は、本発明の第２実施例に係るプロセッサ２のシステム構成例である。プロセッサ２は、第１実施例のプロセッサ１が備える構成要素に加え、命令バッファ３０を備える。
【００５３】
命令バッファ３０には、命令メモリ１０から供給される複数の命令が、例えばＦＩＦＯ（First  In,  First  Out）形式で格納される。
【００５４】
第２実施例に係る供給パス判定回路２２及び発行制御回路２４は、例えば命令バッファ３０に格納された複数の命令のうち、実行順が早い二つの命令に関して、供給パスの判定、及び命令発行可否の判断を行う。
【００５５】
図６は、第２実施例に係る発行制御回路２４により実行される処理の流れを示すフローチャートの一例である。本フローチャートは、例えば１サイクル毎に実行される。
【００５６】
まず、発行制御回路２４は、命令バッファ３０に格納された複数の命令のうち実行順が最も早い命令（以下、命令Ａとする）のデータ依存が解消されているか否かを判定する（Ｓ２００）。
【００５７】
発行制御回路２４は、命令Ａがソースオペランドとして読み出すレジスタファイル４０のアドレスが、直前発行フラグ２６とレジスタのレディフラグ２８の双方に書き込まれている場合に、データ依存が解消されていると判定する。また、発行制御回路２４は、命令Ａがソースオペランドとして読み出すレジスタファイル４０のアドレスが、直前発行フラグ２６とレジスタのレディフラグ２８のいずれにも書き込まれていない場合にも、データ依存が解消されていると判定する。
【００５８】
命令Ａについてデータ依存が解消されていない場合、発行制御回路２４は、当該サイクルにおいて命令Ａを発行しない（Ｓ２０２）。
【００５９】
命令Ａについてデータ依存が解消されている場合、発行制御回路２４は、命令Ａを実行するのに必要な演算リソースを備える演算スロットに空きがあるか否かを判定する（Ｓ２０４）。必要な演算リソースとは、加算器、乗算器、ＦＰＧＡ、ＬＳ等のうち命令の実行に必要なハードウェアをいう。
【００６０】
命令Ａを実行するのに必要な演算リソースを備える演算スロットに空きが無い場合、発行制御回路２４は、当該サイクルにおいて命令を発行しない（Ｓ２０２）。
【００６１】
命令Ａを実行するのに必要な演算リソースを備える演算スロットに空きがある場合、発行制御回路２４は、命令Ａを実行するのに必要なオペランドの供給パスを備える演算スロットに空きがあるか否かを判定する（Ｓ２０６）。必要なオペランドの供給パスを備える演算スロットとは、供給パス判定回路２２がバイパス５７＃０〜５７＃３を介してオペランドを供給されるべきと判定した場合は、演算スロット５０＃１〜５０＃３を指す。また、必要なオペランドの供給パスを備える演算スロットとは、供給パス判定回路２２がレジスタファイル４０からオペランドを供給されるべきと判定した場合は、演算スロット５０＃０、５０＃２、５０＃３を指す。
【００６２】
命令Ａを実行するのに必要なオペランドの供給パスを備える演算スロットに空きが無い場合、発行制御回路２４は、当該サイクルにおいて命令を発行しない（Ｓ２０２）。
【００６３】
一方、命令Ａを実行するのに必要なオペランドの供給パスを備える演算スロットに空きがある場合、発行制御回路２４は、必要なオペランドの供給パスを備える演算スロットのうちいずれかを選択して命令Ａを発行する（Ｓ２０８）。そして、発行制御回路２４は、本フローチャートの１ルーチンを終了する。
【００６４】
Ｓ２０２の後、発行制御回路２４は、命令バッファ３０に格納された複数の命令のうち実行順が二番目に早い命令（以下、命令Ｂとする）のデータ依存が解消されているか否かを判定する（Ｓ２１０）。
【００６５】
発行制御回路２４は、命令Ｂがソースオペランドとして読み出すレジスタファイル４０のアドレスが、直前発行フラグ２６とレジスタのレディフラグ２８の双方に書き込まれている場合に、データ依存が解消されていると判定する。また、発行制御回路２４は、命令Ｂがソースオペランドとして読み出すレジスタファイル４０のアドレスが、直前発行フラグ２６とレジスタのレディフラグ２８のいずれにも書き込まれていない場合にも、データ依存が解消されていると判定する。
【００６６】
命令Ｂについてデータ依存が解消されていない場合、発行制御回路２４は、当該サイクルにおいて命令Ｂを発行せず（Ｓ２１２）、本フローチャートの１ルーチンを終了する。
【００６７】
命令Ｂについてデータ依存が解消されている場合、発行制御回路２４は、命令Ｂを実行するのに必要な演算リソースを備える演算スロットに空きがあるか否かを判定する（Ｓ２１４）。必要な演算リソースとは、加算器、乗算器、ＦＰＧＡ、ＬＳ等のうち命令の実行に必要なハードウェアをいう。
【００６８】
命令Ｂを実行するのに必要な演算リソースを備える演算スロットに空きが無い場合、発行制御回路２４は、当該サイクルにおいて命令Ｂを発行せず（Ｓ２１２）、本フローチャートの１ルーチンを終了する。
【００６９】
命令Ｂを実行するのに必要な演算リソースを備える演算スロットに空きがある場合、発行制御回路２４は、命令Ｂを実行するのに必要なオペランドの供給パスを備える演算スロットに空きがあるか否かを判定する（Ｓ２１６）。必要なオペランドの供給パスを備える演算スロットとは、供給パス判定回路２２がバイパス５７＃０〜５７＃３を介してオペランドを供給されるべきと判定した場合は、演算スロット５０＃１〜５０＃３を指す。また、必要なオペランドの供給パスを備える演算スロットとは、供給パス判定回路２２がレジスタファイル４０からオペランドを供給されるべきと判定した場合は、演算スロット５０＃０、５０＃２、５０＃３を指す。
【００７０】
命令Ｂを実行するのに必要なオペランドの供給パスを備える演算スロットに空きが無い場合、発行制御回路２４は、当該サイクルにおいて命令Ｂを発行せず（Ｓ２１２）、本フローチャートの１ルーチンを終了する。
【００７１】
一方、命令Ｂを実行するのに必要なオペランドの供給パスを備える演算スロットに空きがある場合、発行制御回路２４は、必要なオペランドの供給パスを備える演算スロットのうちいずれかを選択して命令Ｂを発行する（Ｓ２１８）。そして、発行制御回路２４は、本フローチャートの１ルーチンを終了する。
【００７２】
係る処理によって、実行順の最も早い命令Ａが、データ依存が解消されていない、演算スロットに空きが無い、必要なオペランドの供給パスを備える演算スロットに空きが無い等の理由で命令発行が不能な場合に、次の命令Ｂを発行することが可能となる。この結果、第２実施例に係るプロセッサ２は、命令発行を行うことができないサイクルが生じる頻度を低下させることができる。従って、第２実施例に係るプロセッサ２は、オペランドの供給パスを削減することによる性能の低下を、更に抑制することができる。
【００７３】
なお、上記フローチャートでは、実行順が早い二つの命令について供給パスの判定、及び命令発行可否の判断を行うものとしたが、プロセッサ２は、実行順が早い三以上の命令について供給パスの判定、及び命令発行可否の判断を行ってもよい。この場合、プロセッサ２は、Ｓ２００〜Ｓ２０８、Ｓ２１０〜Ｓ２１８の如き処理を、処理対象とする命令の数分実行すればよい。
【００７４】
〔まとめ〕
第２実施例のプロセッサ２は、レジスタファイルのみからソースオペランドが供給される演算スロットと、バイパスのみから供給される演算スロットを備えるため、全ての演算スロットが双方の供給パスを備えるものに比して、コストやサイズを低減できる。
【００７５】
また、第２実施例のプロセッサ２は、供給パス判定回路２２及び発行制御回路２４がオペランドの供給パスを判定し、処理に適した演算スロットを選択して命令を発行するため、オペランドの供給パスを削減してもプロセッサ２としての性能を維持することができる。
【００７６】
更に、第２実施例のプロセッサ２は、複数の命令について供給パスの判定、及び命令発行可否の判断を行うため、命令発行を行うことができないサイクルが生じる頻度を低下させることができる。この結果、第２実施例のプロセッサ２は、オペランドの供給パスを削減することによる性能の低下を、更に抑制することができる。
【００７７】
また、第２実施例のプロセッサ２は、供給パスの削減によって回路面積を小さくすることができるため、同一の設計条件下では、より多くの演算スロットを搭載できることになる。この結果、プロセッサ１としての性能を向上させることができる。
【００７８】
これらより、第２実施例のプロセッサ２は、プロセッサの性能を維持しつつ、コストやサイズを低減することができる。
【００７９】
＜第３実施例＞
以下、図面を参照し、本発明の第３実施例に係るプロセッサ３について説明する。
【００８０】
図７は、本発明の第３実施例に係るプロセッサ３のシステム構成例である。プロセッサ３は、第１実施例のプロセッサ１が備える供給パス判定回路２２に代えて、ベクトル命令シーケンサ３２を備える。なお、プロセッサ３は、供給パス判定回路２２や命令バッファ３０を備え、第１実施例や第２実施例のプロセッサの機能を兼ねるものであっても構わない。
【００８１】
ベクトル命令シーケンサ３２は、一命令で複数の演算が指示されるベクトル命令をプロセッサ３に実行させるための構成要素である。図８は、ベクトル命令シーケンサ３２の構成例である。ベクトル命令シーケンサ３２は、オン／オフ状態格納部３２Ａ、ソースレジスタ０の先頭アドレス格納部３２Ｂ、ソースレジスタ１の先頭アドレス格納部３２Ｃ、格納先レジスタの先頭アドレス格納部３２Ｄ、及び命令種別格納部３２Ｅを備える。
【００８２】
オン／オフ状態格納部３２Ａには、ベクトル命令の実行可否（オン／オフ）が格納される。ソースレジスタ０の先頭アドレス格納部３２Ｂには、ソースオペランドの一方が一連のデータとして格納されたレジスタファイル４０の領域の先頭アドレスが格納される。ソースレジスタ１の先頭アドレス格納部３２Ｃには、ソースオペランドの他方が一連のデータとして格納されたレジスタファイル４０の領域の先頭アドレスが格納される。格納先レジスタの先頭アドレス格納部３２Ｄには、命令の実行結果が一連のデータとして格納されるレジスタファイル４０の領域の先頭アドレスが格納される。命令種別格納部３２Ｅには、ベクトル命令の命令種別が格納される。
【００８３】
また、ベクトル命令シーケンサ３２は、ベクトル長格納部３２Ｆ、カウンタ３２Ｇ、加算器３２Ｈ、及び比較器３２Ｉを備える。ベクトル長格納部３２Ｆには、ベクトル命令が指定する命令の数（ベクトル長）が格納される。カウンタ３２Ｇは、ベクトル命令が実行される間、加算器３２Ｈによって、１サイクル毎に１ずつ値がインクリメントされる。カウンタ３２Ｇの値がベクトル長に等しくなると、オン／オフ状態格納部３２Ａに格納された値がオフを示す値に変更され、ベクトル命令の実行が停止する。
【００８４】
カウンタ３２Ｇに格納された値は、加算器３２Ｊ、３２Ｋ、３２Ｌによって、各格納部３２Ｂ、３２Ｃ、３２Ｄに格納されたアドレスに加算される。この結果、１サイクル毎に１ずつインクリメントされたアドレスが、ソース及び格納先として指定され、ベクトル命令が実行されることになる。
【００８５】
図９は、ベクトル命令が実行される様子を模式的に示す図である。図中、命令Ａはｍｏｖｅ［ｒ０−ｒ７］→［ｒ８−ｒ１５］、すなわちレジスタファイル４０のアドレス０〜７に格納された値を、レジスタファイル４０のアドレス８〜１５に書き込むというベクトル命令である。このように、ベクトルプロセッサであるプロセッサ３は、一命令で複数の命令実行を行うことができる。この場合、発行制御回路２４は、まずｍｏｖｅ［ｒ０］→［ｒ８］を発行し、次のサイクルでｍｏｖｅ［ｒ１］→［ｒ９］し、順次命令発行を行って、例えば合計８サイクルでベクトル命令の発行を完了する。なお、図９に示す命令Ｂ、Ｃについては、ベクトル命令であってもよいし、通常の演算命令等であっても構わない。
【００８６】
第３実施例に係る発行制御回路２４は、以下の規則に従って、ベクトル命令を構成する各命令を発行する演算スロットを選択する。
【００８７】
（１）発行制御回路２４は、ベクトル命令の先頭の命令に関しては、レジスタファイル４０及びバイパス５７＃０〜５７＃３からソースオペランドが供給される演算スロット５０＃２又は５０＃３に命令を発行する。この結果、演算スロット５０＃２又は５０＃３は、バイパス５７＃０〜５７＃３からのオペランド供給が可能であればバイパス５７＃０〜５７＃３から、そうでなければレジスタファイル４０からオペランドの供給を受けることになる。
【００８８】
（２）発行制御回路２４は、ベクトル命令の二番目以降の命令に関しては、先頭の命令について実際にオペランドを供給した供給パス（バイパス又はレジスタファイル）をフィードバックさせて命令の発行先を決定する。図８に示すレジスタファイル／バイパス供給結果格納部３２Ｍには、先頭の命令について実際にオペランドを供給した供給パスを識別するための情報が格納される。発行制御回路２４は、先頭の命令がバイパス５７＃０〜５７＃３からオペランド供給を受けて実行された場合、バイパス５７＃０〜５７＃３からソースオペランドが供給される演算スロット５０＃１〜５０＃３のいずれかに二番目以降の命令を発行する。一方、発行制御回路２４は、先頭の命令がレジスタファイル４０からオペランド供給を受けて実行された場合、レジスタファイル４０からソースオペランドが供給される演算スロット５０＃０、５０＃２、５０＃３のいずれかに二番目以降の命令を発行する。
【００８９】
係る規則によって、ベクトル命令（命令Ａとする）が、他のベクトル命令（命令Ｂとする）の実行結果を用いて命令を実行するものである場合、連続的にバイパス５７＃０〜５７＃３からのオペランド供給を受け得ることになる。このような場面は、命令Ａが、命令Ｂに対して１サイクル遅れで命令を実行する場合に生じる。図１０は、命令Ａが、命令Ｂに対して１サイクル遅れで実行される様子を示す図である。このような場面に対して発行制御回路２４が上記説明した規則を適用することにより、命令Ａについては全ての命令においてバイパス５７＃０〜５７＃３からオペランド供給を受けることが可能となり、効率的な処理が実現される。
【００９０】
〔まとめ〕
第３実施例のプロセッサ３は、レジスタファイルのみからソースオペランドが供給される演算スロットと、バイパスのみから供給される演算スロットを備えるため、全ての演算スロットが双方の供給パスを備えるものに比して、コストやサイズを低減できる。
【００９１】
また、第３実施例のプロセッサ３は、ベクトル命令シーケンサ３２や発行制御回路２４が、先頭の命令において採用された供給パスを二番目以降の命令に適用するため、特定の場面において効率的な処理を実現することができる。
【００９２】
これらより、第３実施例のプロセッサ３は、プロセッサの性能を維持しつつ、コストやサイズを低減することができる。
【００９３】
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【００９４】
以上の説明に関し、さらに以下の項を開示する。
（付記１）
命令の実行結果が格納される格納部（４０）と、
前記命令を実行する複数の演算部であって、前記格納部と、前記レジスタを介さずに前記複数の演算部による命令の実行結果を伝達するバイパスとのいずれか一方からオペランドが供給される演算部（５０＃０、５０＃１）と、前記格納部と、前記バイパスとの双方からオペランドが供給される演算部（５０＃２、５０＃３）と、を含む複数の演算部と、
前記命令のオペランド供給経路を判定すると共に発行可否を判定し、該判定の結果に基づき前記複数の演算部から選択した演算部に命令を発行する制御部（２２、２４）と、
を備えるプロセッサ（１）。（１、図１）
（付記２）
実行される予定の複数の命令が格納される命令バッファ（３０）を備え、
前記制御部は、前記命令バッファに格納された複数の命令についてオペランド供給経路及び発行可否を判定する、
付記１記載のプロセッサ（２）。（２、図５）
（付記３）
前記制御部は、
１サイクル前に発行された命令の前記格納部における格納先アドレスを第１のフラグデータ（２６）として保持し、該第１のフラグデータに基づき前記命令のオペランド供給経路を判定し、
命令が発行されてから実行結果が前記格納部に格納されるまでの間、該命令の前記格納部における格納先アドレスが保持される第２のフラグデータ（２８）に基づき前記命令の発行可否を判定する、
付記１又は２記載のプロセッサ。
（付記４）
前記命令は、複数の命令の実行を一命令で指定するベクトル命令であり、
前記制御部は、
前記ベクトル命令における先頭の命令を、前記格納部と前記バイパスとの双方からオペランドが供給される演算部に発行し、
前記ベクトル命令における二番目以降の命令を、前記先頭の命令に供給されたオペランドの経路をフィードバックさせてオペランド供給経路を決定する、
付記１ないし３のいずれか１項記載のプロセッサ（３）。（４、図７）
【符号の説明】
【００９５】
１、２、３  プロセッサ
１０        命令メモリ
２０        デコード回路
２２        供給パス判定回路
２４        発行制御回路
２６        直前発行フラグ
２８        レジスタのレディフラグ
３０        命令バッファ
３２        ベクトル命令シーケンサ
４０        レジスタファイル
５０＃０〜５０＃３  演算スロット
５７＃０〜５７＃３  バイパス
６０        データメモリ
【図１】
0005953853.tif 000002
【図２】
0005953853.tif 000003
【図３】
0005953853.tif 000004
【図４】
0005953853.tif 000005
【図５】
0005953853.tif 000006
【図６】
0005953853.tif 000007
【図７】
0005953853.tif 000008
【図８】
0005953853.tif 000009
【図９】
0005953853.tif 000010
【図１０】
0005953853.tif 000011