JP2007034731A - パイプラインプロセッサ - Google Patents
パイプラインプロセッサ Download PDFInfo
- Publication number
- JP2007034731A JP2007034731A JP2005217789A JP2005217789A JP2007034731A JP 2007034731 A JP2007034731 A JP 2007034731A JP 2005217789 A JP2005217789 A JP 2005217789A JP 2005217789 A JP2005217789 A JP 2005217789A JP 2007034731 A JP2007034731 A JP 2007034731A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- execution
- core
- extension
- stage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims description 52
- 238000012545 processing Methods 0.000 claims description 41
- 230000008569 process Effects 0.000 claims description 23
- 238000013461 design Methods 0.000 description 28
- 230000006870 function Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 14
- 238000012986 modification Methods 0.000 description 12
- 230000004048 modification Effects 0.000 description 12
- 238000012795 verification Methods 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 238000007781 pre-processing Methods 0.000 description 4
- 230000015572 biosynthetic process Effects 0.000 description 3
- 238000003786 synthesis reaction Methods 0.000 description 3
- 230000000052 comparative effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
【課題】 複雑度を増大させることなく、信頼性を向上可能なパイプラインプロセッサを提供する。
【解決手段】 フェッチされた命令をデコードして、命令実行サイクル数が固定であるコア命令及びユーザにより定義された拡張命令のいずれかを選択的に発行する命令デコードユニット401aと、発行されたコア命令を実行するコア命令実行ユニット40と、発行された拡張命令を実行する拡張命令実行ユニット402aと、コア命令実行ユニット40及び拡張命令実行ユニット402aのそれぞれの命令実行結果を一時的に記憶して、コア命令及び拡張命令の発行された順に命令実行結果を並べ替えて出力するリオーダバッファ406aとを備える。
【選択図】 図1
【解決手段】 フェッチされた命令をデコードして、命令実行サイクル数が固定であるコア命令及びユーザにより定義された拡張命令のいずれかを選択的に発行する命令デコードユニット401aと、発行されたコア命令を実行するコア命令実行ユニット40と、発行された拡張命令を実行する拡張命令実行ユニット402aと、コア命令実行ユニット40及び拡張命令実行ユニット402aのそれぞれの命令実行結果を一時的に記憶して、コア命令及び拡張命令の発行された順に命令実行結果を並べ替えて出力するリオーダバッファ406aとを備える。
【選択図】 図1
Description
本発明はパイプラインプロセッサに関し、特に命令拡張可能なパイプラインプロセッサに関する。
プロセッサのアーキテクチャとして、縮小命令セットコンピュータ(RISC)及び複合命令セットコンピュータ(CISC)が知られている。RISCプロセッサは、命令の単純化により、1つの命令に対する処理が完了する前に、次の命令の処理を開始する「パイプライン処理」を実現する。一般的なパイプライン処理においては、命令フェッチステージ(以下において「Fステージ」という。)、命令デコードステージ(以下において「Dステージ」という。)、命令実行ステージ(以下において「Eステージ」という。)、メモリステージ(以下において「Mステージ」という。)、及びライトバックステージ(以下において「Wステージ」という。)の各ステージが独立して動作する。
パイプラインプロセッサが命令を実行する際、命令とプロセッサのアーキテクチャとに起因するハザードを解決する必要がある。典型的なパイプラインプロセッサにおけるハザードとしては、データハザードと構造ハザードの2がある。制御ハザードという用語も存在するが、広義にはデータハザードに含まれる。「データハザード」とは、命令の実行に必要な情報をレジスタから読み出すサイクルと、実行結果のデータをレジスタに書き込むサイクルが異なることで発生するハザードである。「構造ハザード」には、パイプラインプロセッサの構造によって様々な種類が存在するが、基本的には回路リソースの不足に起因したハザードである。
パイプラインプロセッサは、レジスタ情報の読み出しをDステージで行い、レジスタへの書き込みをWステージで行う。ここで、レジスタ0番に処理結果を格納する命令A及びレジスタ0番を使用する命令Bを仮定する。命令AがEステージに存在するとき、次の命令BはDステージに存在する。命令AがWステージに到達していない場合、命令Bはレジスタ0番を読み出しても、命令Aの結果を得ることができない。このようなハザードを、リード・アフター・ライト・ハザード(以下において「RAWハザード」という。)という。これに対して、あるレジスタに対して最初の命令が書き込みを行った後に、次の命令が更に上書きするようなハザードをライト・アフター・ライト・ハザード(以下において「WAWハザード」という。)という。
構造ハザードは、読み出しポートが1つしか存在しないメモリ装置に対して、2つの読み出し要求が同時に行われた場合等に発生する。この場合、メモリが同時に1つの要求しか処理できないために、いずれか片方を待たせる必要がある。同時に2つの読み出し要求を処理可能なメモリを使用することで解決可能であるが、回路規模の増大を招き、動作速度の低下を生じさせる要因となる。
データハザードを解決するために、後続の命令実行を停止させる「ストール」又は「インターロック」が知られている。他の解決方法としては、先行する命令がWステージに到達する前に、後続の命令にデータを送出するための回路を設ける方法がある。この送出のことをデータの「バイパス」又は「フォワーディング」という。パイプラインプロセッサのデータハザードは、一般的には、ストール及びデータのバイパスを組み合わせることで解決される。
効率の良い命令実行のためには、パイプライン構造に最適なストール及びバイパスの制御が必要となるが、こうした制御はパイプライン構造に大きく依存する。例えば、(1)命令実行のための複数のパイプラインが存在し、(2)各パイプラインが異なる実行ステージ数をもっていて、(3)ある命令では実行ステージ数が演算データに依存して変化する複雑なプロセッサにおいて、命令を効率よく実行するためのストール及びバイパス制御は非常に複雑になる。
一方、ユーザが任意の命令を拡張する方法として、プロセッサコアに対し、ユーザが定義した命令(以下において「拡張命令」という。)を実行する装置(以下において「拡張命令実行ユニット」という。)を接続する手法が知られている。
古典的パイプラインプロセッサにおいて、拡張命令の実行ステージ数がプロセッサコアの実行パイプラインよりも長い場合において、例外がパイプラインの後方のステージで発生する場合には、例外が発生するか否かが確定するまで、拡張命令の後続の命令は、プロセッサの状態を変更しないように命令の発行を停止する。したがって、命令の実行効率が落ちる問題がある。
拡張命令実行ユニットを備えるパイプラインプロセッサにおけるハザード検出手法としては、「スコアボーディング」を使用したストール制御が利用される。スコアボーディング装置は、各パイプラインの各ステージに存在する命令についての情報を記憶する装置と、命令セットやパイプライン構造に依存したハザード検出装置から構成される。スコアボーディング装置は、回路規模は小さいが複雑度が高い傾向がある。また、拡張命令実行ユニットを備えないパイプラインプロセッサにおいて、リオーダバッファを用いる手法が知られている(例えば、特許文献1参照。)。
しかしながら、命令拡張可能なプロセッサにおいて、プロセッサ自体の複雑度と、定義した命令の複雑度が増大すると、スコアボーディング装置が複雑化する。また、スコアボーディング装置を備えるパイプラインプロセッサに、拡張命令を追加する場合、追加した拡張命令を実行するパイプラインの構造は、ユーザの定義によって変化する。したがって、命令を効率よく実行するためには、スコアボーディング装置の設計変更が必要となり、開発期間が増大する。命令を効率よく実行する必要がない場合には、スコアボーディング装置の設計変更を不要とすることもできるが、命令の実行効率が悪くなる。近年、拡張命令実行ユニットを備えるパイプラインプロセッサの高速化が進んでおり、複雑度の高いスコアボーディング装置を実装することなく、信頼性を向上可能な手法の確立が望まれている。
従来、拡張命令実行ユニットを備えないパイプラインプロセッサにおいて、命令の実行効率を良くする手法として、リオーダバッファを使用する手法が知られている(例えば、特許文献1参照。)。
しかしながら、従来のリオーダバッファの使用目的は、スーパスカラプロセッサにおける命令の同時発行やアウト・オブ・オーダの命令発行や完了を目的としたものであった。
特開平10−143365号公報
本発明は、複雑度を増大させることなく、信頼性を向上可能なパイプラインプロセッサを提供する。
本発明の一態様によれば、フェッチされた命令をデコードして、コア命令及びユーザにより定義された拡張命令のいずれかを選択的に発行する命令デコードユニットと、発行されたコア命令を実行するコア命令実行ユニットと、発行された拡張命令を実行する拡張命令実行ユニットと、コア命令実行ユニット及び拡張命令実行ユニットのそれぞれの命令実行結果を一時的に記憶して、コア命令及び拡張命令の発行された順に命令実行結果を並べ替えて出力するリオーダバッファとを備えるパイプラインプロセッサが提供される。
本発明の他の態様によれば、フェッチされた命令をデコードして、命令を発行する命令デコードユニットと、発行された命令を実行する命令実行ユニットと、命令実行ユニットの命令実行結果を一時的に記憶して、命令の発行された順に命令実行結果を並べ替えて出力するリオーダバッファと、命令実行ユニットによる命令の実行に要するクロックサイクルをカウントして、カウント結果が一定値を超えた場合にタイムアウト処理を発生させるタイムアウト処理装置とを備えるパイプラインプロセッサが提供される。
本発明によれば、複雑度を増大させることなく、信頼性を向上可能なパイプラインプロセッサを提供できる。
次に、図面を参照して、本発明の第1及び第2実施形態を説明する。以下の第1及び第2実施形態における図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
(第1実施形態)
本発明の第1実施形態に係るパイプラインプロセッサは、図1に示すように、プロセッサコア4a及び拡張命令実行ユニット402aを備える。プロセッサコア4aは外部バス450に接続され、外部バス450には外部メモリ41が接続されている。プロセッサコア4aは、命令フェッチユニット400、命令デコードユニット401a、コア命令実行ユニット40、レジスタファイル408a、リオーダバッファ406a、リオーダバッファコントローラ407a、命令キャッシュ410、データキャッシュ412、バスインタフェース(以下において「バスI/F」と略記する。)411、及びバイパスネットワーク409aを備える。命令デコードユニット401aは、命令フェッチユニット400によりフェッチされた命令をデコードして、コア命令及びユーザにより定義された拡張命令のいずれかを選択的に発行する。コア命令実行ユニット40は発行されたコア命令を実行する。拡張命令実行ユニット402aは発行された拡張命令を実行する。リオーダバッファ406aは、コア命令実行ユニット40及び拡張命令実行ユニット402aのそれぞれの命令実行結果を一時的に記憶して、コア命令及び拡張命令の発行された順に命令実行結果を並べ替えて出力する。尚、コア命令実行ユニット40及び拡張命令実行ユニット402aは、命令実行ユニット1aを構成する。
本発明の第1実施形態に係るパイプラインプロセッサは、図1に示すように、プロセッサコア4a及び拡張命令実行ユニット402aを備える。プロセッサコア4aは外部バス450に接続され、外部バス450には外部メモリ41が接続されている。プロセッサコア4aは、命令フェッチユニット400、命令デコードユニット401a、コア命令実行ユニット40、レジスタファイル408a、リオーダバッファ406a、リオーダバッファコントローラ407a、命令キャッシュ410、データキャッシュ412、バスインタフェース(以下において「バスI/F」と略記する。)411、及びバイパスネットワーク409aを備える。命令デコードユニット401aは、命令フェッチユニット400によりフェッチされた命令をデコードして、コア命令及びユーザにより定義された拡張命令のいずれかを選択的に発行する。コア命令実行ユニット40は発行されたコア命令を実行する。拡張命令実行ユニット402aは発行された拡張命令を実行する。リオーダバッファ406aは、コア命令実行ユニット40及び拡張命令実行ユニット402aのそれぞれの命令実行結果を一時的に記憶して、コア命令及び拡張命令の発行された順に命令実行結果を並べ替えて出力する。尚、コア命令実行ユニット40及び拡張命令実行ユニット402aは、命令実行ユニット1aを構成する。
「コア命令」とは、プロセッサコア4aに予め用意されている各種の命令を意味し、例えば浮動小数点演算命令、整数演算命令、分岐命令、及びロード・ストア命令等を意味する。コア命令の命令実行サイクル数は基本的には固定値である。拡張命令実行ユニット402aとしては、例えばデジタル・シグナル・プロセッサ(DSP)又はコプロセッサ等、或いはこれらの組み合わせが使用できる。以下においては、拡張命令実行ユニット402aとしてDSPを使用する一例を説明する。この場合、演算データに応じて実行サイクルが変化するDSP命令が拡張命令として使用される。DSP命令の命令実行サイクル数は可変値である。
外部メモリ41は、ランダム・アクセス・メモリ(RAM)413及びリード・オンリー・メモリ(ROM)414を備える。ROMは、パイプラインプロセッサにおいて実行される各命令を格納するプログラム記憶装置等として機能する。これに対してRAMは、パイプラインプロセッサにおいて実行される各命令を格納するプログラム記憶装置として機能すると共に、パイプラインプロセッサにおける命令実行処理中に利用されるデータ等を一時的に格納し、或いは作業領域として利用される一時的なデータメモリ等として機能する。
バスI/F411は、コア命令実行ユニット40からデータキャッシュ412を介して送信されるデータ転送要求と、命令フェッチユニット400から命令キャッシュ410を介して送信される命令転送要求とを調停する。この結果、バスI/F411は、外部バス450に要求を送信し、外部メモリ41とデータの送受信を行う。
また、バスI/F411は、外部メモリ41から読み出されたデータ又は命令を受信して、受信したデータをデータキャッシュ412に送信する。バスI/F411は、外部メモリ41から読み出された命令を受信して、受信した命令を命令キャッシュ410に送信する。
命令キャッシュ410は、バスI/F411に命令転送要求を送り、バスI/F411から転送された命令を受け取る。データキャッシュ412は、バスI/F411にデータ転送要求を送り、バスI/F411から転送されたデータを受け取る。
命令フェッチユニット400は、コア命令実行ユニット40及び拡張命令実行ユニット402aの実行対象となる命令を取得するためのバス要求を、命令キャッシュ410を介してバスI/F411に送信する。また、命令フェッチユニット400は、バスI/F411からデータを受け取ると、受け取ったデータを実行すべき命令として命令デコードユニット401aに送信する。
命令デコードユニット401aは、命令フェッチユニット400からの命令がコア命令である場合、コア命令をデコードして、コア命令実行ユニット40を制御する制御信号を出力する。命令フェッチユニット400からの命令が拡張命令(DSP命令)である場合には、拡張命令(DSP命令)のデコードは、拡張命令実行ユニット(DSP)402aの内部に設けられたデコーダ(図示省略)により行われる。
レジスタファイル408aは、複数のレジスタから構成され、パイプラインプロセッサの状態及び演算結果等を記憶する。レジスタファイル408aを構成する複数のレジスタにおいて、プログラムの実行のために使用されるレジスタを汎用レジスタという。レジスタファイル408aは、第1読み出し制御ポートR0及び第2読み出し制御ポートR1と、読み出し結果を出力する第1読み出しポートRD0及び第2読み出しポートRD1と、ライトバックされた命令実行結果が入力されるライトバック用ポートWとを有する。 レジスタファイル408aの第1読み出し制御ポートR0及び第2読み出し制御ポートR1には、命令デコードユニット401aから、命令の実行に必要な汎用レジスタの番号を読み出す要求が入力される。
バイパスネットワーク409aには、レジスタファイル408aの第1読み出しポートRD0と第2読み出しポートRD1からの読み出しデータと、リオーダバッファ406aの第1読み出しポートRD0及び第2読み出しポートRD1からの読み出しデータと、命令デコードユニット401aからデータ配線464aを介して伝達される命令の即値データと、拡張命令実行ユニット402aからデータ配線463を介して伝達される拡張命令のデコード結果とが入力される。この結果、命令の実行に必要なデータがバイパス又は選択されて拡張命令実行ユニット(DSP)402a及びコア命令実行ユニット40に出力される。
リオーダバッファコントローラ407aは、リオーダバッファ406aの制御を行う。リオーダバッファ406aは、命令実行結果が格納される複数の記憶装置(以下においてリオーダバッファ406a内の各記憶装置を「エントリ」という。)を備える。複数のエントリには、4つの書き込みポート(第1書き込みポートW0〜第4書き込みポートW3)を介して、拡張命令(DSP命令)又はコア命令の実行結果が書き込まれる。尚、同時にy個の書き込みが可能なリオーダバッファを、y個の書き込みポートを有するリオーダバッファという(y;2以上の整数)。リオーダバッファ406aに対する命令実行結果の書き込みを「コンプリーション」という。
更に、リオーダバッファ406aは、2つの読み出し制御ポート(第1読み出し制御ポートR0及び第2読み出し制御ポートR1)と、2つの読み出しポート(第1読み出しポートRD0及び第2読み出しポートRD1)とを具備する。
命令デコードユニット401aは、命令を発行する際、リオーダバッファコントローラ407aに対してリオーダバッファ406aのエントリ確保要求を送信する。この結果、リオーダバッファ406aの空きエントリが確保される。リオーダバッファコントローラ407aは、確保されたエントリの番号をタグ番号として、リオーダバッファ406aに通知する。この結果、発行された各命令には1つのタグ番号が割り当てられた状態となり、命令実行結果は、対応するタグ番号のエントリに書き込まれる。
リオーダバッファコントローラ407aは、コンプリーションされた命令実行結果の先入れ先出し(FIFO)制御を行うことで、発行された命令の順番に従って命令実行結果を出力する。したがって、リオーダバッファ406aは、命令デコードユニット401aからの要求でエントリを確保した順番に基づき、命令実行結果をレジスタファイル408aにデータ配線460を介して出力する。この動作を「コミット操作」と呼ぶ。
リオーダバッファ406aに空きエントリがない場合は、命令を発行することができないので、リオーダバッファコントローラ407aは、命令デコードユニット401aに対し、データ配線456を介してストール要求を出力する。命令デコードユニット401aは、リオーダバッファコントローラ407aからストール要求を受け取ると、パイプラインのDステージをストールさせて、命令の発行を停止する。
リオーダバッファ406aは、エントリの命令実行結果の書き込みがまだ行われていない場合には、書き込みが完了するまでコミット操作を行わない。また、リオーダバッファ406aは、コミット操作が行われたエントリを空きエントリとすることで、次のエントリ確保に使用可能な状態とする。
更に、コア命令実行ユニット40は、浮動小数点数演算装置(以下において「FPU」と略記する。)403、整数演算命令・分岐命令実行ユニット(以下において「IBU」と略記する。)404、及びロード命令・ストア命令実行ユニット(以下において「LSU」と略記する。)405を備える。
IBU404は、図2(c)及び(d)に示すように、整数演算命令及び分岐命令を実行する。FPU403は、図2(e)及び(f)に示すように、浮動小数点演算命令を実行する。LSU405は、図2(g)及び(h)に示すように、ロード命令及びストア命令を実行する。
コア命令及び拡張命令(DSP命令)に対する処理は、図2(a)に示すFステージ、図2(b)に示すDステージ、及び図2(j)に示すWステージの3つのステージを有する点で共通する。
コア命令に対するDステージは、図2(b)に示すように、命令デコードユニット401aにより実行される。拡張命令(DSP命令)に対するDステージは、主に、拡張命令実行ユニット(DSP)402aにより実行される。
詳細には、命令デコードユニット401aは、コア命令をデコードして、コア命令がタイムアウト処理の対象となる命令であるか否か、レジスタファイル408aに対するライトバックを必要とする命令であるか否か、及び例外を発生する可能性があるか否かの情報を生成する。生成された情報は、データ配線461aを介してリオーダバッファ406aに伝達される。
これに対して、拡張命令実行ユニット(DSP)402aは、拡張命令(DSP命令)をデコードして、拡張命令(DSP命令)がレジスタファイル408aに対するライトバックを必要とする命令であるか否か、及び例外を発生する可能性があるか否かの情報を生成する。生成された情報は、データ配線462を介してリオーダバッファ406aに伝達される。
また、拡張命令実行ユニット(DSP)402a、FPU403、IBU404、及びLSU405のそれぞれは、命令の実行が終わると、実行結果をリオーダバッファ406aに書き込む。
具体的には、LSU405の命令実行結果は、図1に示すように、データ配線459を介してリオーダバッファ406aの第1書き込みポートW0に伝達される。LSU405の命令実行結果には、実行結果のデータ、実行結果のデータが有効であることを意味する信号、例外の発生を意味する信号、及び命令のタグ番号が含まれる。
また、IBU404の命令実行結果は、データ配線458を介してリオーダバッファ406aの第2書き込みポートW1に伝達される。IBU404の命令実行結果には、実行結果のデータ、実行結果のデータが有効であることを意味する信号、例外の発生を意味する信号、及び命令のタグ番号が含まれる。
FPU403の命令実行結果は、データ配線457を介してリオーダバッファ406aの第3書き込みポートW2に伝達される。FPU403の命令実行結果には、実行結果のデータ、実行結果のデータが有効であることを意味する信号、例外の発生を意味する信号、及び命令のタグ番号が含まれる。
ここで「例外」は、例えば除算演算において、ゼロによって除算を行う場合等に発生する。この場合、除算命令の実行が中止され、例外処理のプログラムが実行される。ゼロ除算の問題を解決して、本来のプログラムの処理を再開するために、除算命令を再開する場合、除算命令の後続の命令が既に実行されていると、後続の命令を2回実行することになり、本来のプログラムの実行を正確に再開できなくなる。
したがって、リオーダバッファ406aは、コンプリーション時において、例外の発生を意味する信号がアクティブであった場合、例外の発生した命令の実行結果が格納されるエントリを破棄する。即ち、破棄されたエントリに格納されている実行結果は、コミット操作が行われない。
また、命令実行結果が破棄されると、破棄された命令実行結果より後に保持された命令実行結果も破棄される。これによって、例外が発生した命令の後続の命令をすべて破棄し、プロセッサの状態が、例外が発生した命令の後続の命令により変化しない「正確な例外」の処理が可能となる。
更に、リオーダバッファ406aは、図2(j)に示すように、Wステージにおいて、命令実行結果をレジスタファイル408aに転送する。Eステージに要するクロックサイクルは、コア命令においては例えば2サイクル固定であるが、拡張命令(DSP命令)においてはnサイクルである(n;2以上の整数)。即ち、拡張命令(DSP命令)の種類に応じてX1ステージからXnステージの範囲で実行ステージ数が変化する。
次に、図3に示すタイムチャートを参照して、図1に示すパイプラインプロセッサにおける整数演算命令処理時の動作の概要について説明する。図3に示すタイムチャートは、図3(b)〜(f)の各整数演算命令を実行した場合に、図3(a)に示すクロックの各サイクルCk(k;0以上の整数)における各ステージのタイミングを示している。但し、各整数演算命令の実行時においてハザードが発生していないものとする。尚、各整数演算命令は、Fステージ、Dステージ、第1整数演算命令実行ステージ(以下において「E1ステージ」という。)、第2整数演算命令実行ステージ(以下において「E2ステージ」という。)、及びWステージにより処理される。
図3(b)のサイクルC0において、整数演算命令1に対するFステージが実行される。Fステージにおいて、図1に示す命令フェッチユニット400は、命令キャッシュ410から整数演算命令1をフェッチする。フェッチされた整数演算命令1は、命令デコードユニット401aに転送される。
図3(b)のサイクルC1において、整数演算命令1に対するDステージが実行される。同時に、図3(c)に示す整数演算命令2に対するFステージが実行される。
Dステージにおいて、命令デコードユニット401aは、フェッチされた整数演算命令1の解釈を行い、IBU404を制御するための制御信号を生成し、必要に応じてレジスタファイル408aの内部の汎用レジスタからデータを読み出す。命令デコードユニット401aが生成する制御信号と、レジスタファイル408aから読み出されたデータは、IBU404に転送される。尚、命令デコードユニット401aは、図3のサイクルC1〜サイクルC5に示すように、1サイクルに1つの命令を発行する。
図3(b)のサイクルC2において、整数演算命令1に対するE1ステージが実行される。更に、整数演算命令2に対するDステージが実行され、整数演算命令3に対するFステージが実行される。
図3(b)のサイクルC3において、整数演算命令1に対するE2ステージが実行される。同時に、整数演算命令2に対するE1ステージが実行され、整数演算命令3に対するDステージが実行され、整数演算命令4に対するFステージが実行される。整数演算命令1に対するE2ステージにより得られた実行結果は、リオーダバッファ406aに一時的に保持される。
図3(b)のサイクルC4において、整数演算命令1に対するWステージが実行される。更に、整数演算命令2に対するE2ステージが実行され、整数演算命令3に対するE1ステージが実行され、整数演算命令4に対するDステージが実行され、整数演算命令5に対するFステージが実行される。整数演算命令1に対するWステージにおいて、リオーダバッファ406aは、整数演算命令1の実行結果を、レジスタファイル408aに書き込む。
このように、Fステージ、Dステージ、E1ステージ、E2ステージ、及びWステージの各ステージを独立して行うことにより、1つの整数演算命令に対する各ステージが完了する前に、次の整数演算命令の処理が並行して行われる。したがって、図1に示すパイプラインプロセッサは、ハザードが発生しない限り、1サイクルに1命令のスループットで整数演算命令を実行可能である。尚、FPU403を使用した浮動小数点数演算命令処理も整数演算命令処理と同様にして動作する。
次に、図4に示すタイムチャートを参照して、図1に示すパイプラインプロセッサにおけるロード命令処理時の動作の概要について説明する。但し、上述した整数演算命令処理時と同様の動作については重複する説明を省略する。各ロード命令は、Fステージ、Dステージ、第1ロード命令実行ステージ(以下において「M1ステージ」という。)、第2ロード命令実行ステージ(以下において「M2ステージ」という。)、及びWステージにより処理される。
図4(b)のサイクルC0において、ロード命令1に対するFステージが実行される。
図4(b)のサイクルC1において、ロード命令1に対するDステージが実行される。Dステージにおいて、命令デコードユニット401aは、フェッチされたロード命令1の解釈を行い、LSU405を制御するための制御信号を生成する。命令デコードユニット401aが生成する制御信号はLSU405に供給される。
図4(b)のサイクルC2及びC3において、ロード命令1に対するM1及びM2ステージが実行される。M1及びM2ステージにおいて、LSU405は、制御信号に応じて、外部メモリ41から読み出されたデータを受け取る。
図4(b)のサイクルC4において、ロード命令1に対するWステージが実行される。Wステージにおいて、リオーダバッファ406aは、E1及びE2ステージで得られたデータを、レジスタファイル408aに書き込む。
図4(c)〜(f)に示すロード命令2〜5についてもロード命令1と同様に処理される。このように、Fステージ、Dステージ、M1ステージ、M2ステージ、及びWステージの各ステージを独立して行うことにより、1つのロード命令に対する各ステージが完了する前に、次のロード命令の処理が並行して行われる。
上述したように、図1に示すパイプラインプロセッサは、演算に必要なデータのレジスタファイル408aからの読み出しをDステージで行い、レジスタファイル408aへの実行結果の書き込みをWステージで行う。ここで比較例として、図1に示すリオーダバッファ406aを備えない場合の動作例を説明する。
図5(b)及び(d)に示すように、Fステージ、Dステージ、Eステージ、Mステージ、及びWステージの各ステージにより処理される(コア)命令1及び2を仮定する。更に図5(c)に示すように、Fステージ、Dステージ、X1ステージ、X2ステージ、X3ステージ、X4ステージ、及びWステージの各ステージにより処理される拡張命令(DSP命令)を仮定する。
図5(c)に示す拡張命令(DSP命令)の実行サイクルが4サイクルであるため、命令発行の順番と、命令実行が終了する順番が入れ替わっている。命令発行の順番と、命令実行が終了する順番が入れ替わる状態を「アウト・オブ・オーダー」という。アウト・オブ・オーダーにより、WAWハザードが発生する。よって、図5(c)に示す拡張命令(DSP命令)の実行サイクル数が可変であるために、図5(d)に示す命令2との間にWAWハザードが発生する。
図1に示すリオーダバッファ406aを備えない場合、WAWハザードを解決するため、図5(d)においてはパイプラインのストールが行われている。尚、図5(d)における記号“ds”は、Dステージがストールしている状態を示している。
一方、図1に示すリオーダバッファ406aを備えることにより、アウト・オブ・オーダーとなった実行結果をイン・オーダーに入れ替えることができる。即ち、リオーダバッファ406aを使用することで、実行サイクル数が異なる命令を複数実行しても、データのWAWハザードを解決可能となる。
次に、図6に示すタイムチャートを参照して、図1に示すパイプラインプロセッサにおける整数演算命令、ロード命令、及び拡張命令(DSP命令)処理時の動作の概要について説明する。但し、上述した整数演算命令処理時及びロード命令処理時と同様の動作については、重複する説明を省略する。また、WAWハザード以外は発生していないものとする。図6に示すタイムチャートにおいて、記号“RB”は、命令実行結果がリオーダバッファ406aに格納されている状態を示している。
図6(c)に示す拡張命令(DSP命令)は、X1ステージ〜X5ステージの実行ステージにより処理される。図6(c)に示す拡張命令(DSP命令)の実行ステージがサイクルC8で完了する前に、図6(e)に示すロード命令の実行ステージがサイクルC7で完了している。
図6(c)に示す拡張命令(DSP命令)及び図6(e)に示すロード命令の実行結果はリオーダバッファ406aに書き込まれる。リオーダバッファコントローラ407aは、図6(c)に示す拡張命令(DSP命令)に対するWステージが完了するまで、図6(e)に示すロード命令の実行結果をリオーダバッファ406aに保持させる。この結果、図6(e)に示すロード命令に対するWステージは、サイクルC10で実行される。このように、図6においては、図5と比較して、図6(e)に示すロード命令がストールしていない。したがって、拡張命令(DSP命令)の実行結果を参照しない後続の命令をストールさせずに実行可能となる。
また、図6(e)に示すロード命令がリオーダバッファ406aに保持されているサイクルC7において、図6(f)に示す整数演算命令3の実行ステージが完了している。図6(f)に示す整数演算命令3の実行結果はリオーダバッファ406aに書き込まれる。リオーダバッファコントローラ407aは、図6(e)に示すロード命令に対するWステージが完了するまで、図6(f)に示す整数演算命令3の実行結果をリオーダバッファ406aに保持させる。この結果、図6(f)に示す整数演算命令3に対するWステージは、サイクルC11で実行される。
次に、図7を用いて、拡張命令(DSP命令)の命令フォーマット例について説明する。図7に示す例においては、5つのビットフィールドが定義されている。拡張命令(DSP命令)は、4ビットのメジャー・オペコード、4ビットのレジスタ番号Rm、4ビットのレジスタ番号Rn、4ビットのマイナー・オペコード、及び16ビットの即値の合計32ビットを有する。
即値には、ビット番号0〜15が割り当てられている。ユーザが拡張命令(DSP命令)を使用して任意の拡張命令(DSP命令)を定義する場合、即値が使用される。例えば即値の上位4ビット(ビット番号12〜15)を拡張命令(DSP命令)の識別に使用することで16個の拡張命令(DSP命令)を定義可能である。
マイナー・オペコードには、ビット番号16〜19が割り当てられている。拡張命令(DSP命令)のマイナー・オペコードは“0011”である。各レジスタ番号Rm及びRnは、演算に使用するレジスタの番号であり、図1に示すレジスタファイル408a内の6つの汎用レジスタのうちの1つを示す。
レジスタ番号Rn及びレジスタ番号Rmには、ビット番号20〜23及びビット番号24〜27がそれぞれ割り当てられている。メジャー・オペコードには、ビット番号28〜31が割り当てられている。拡張命令(DSP命令)のメジャー・オペコードは“1111”である。
尚、表1においてビット幅の表記[A:B]は、ビットBからビットAまでのビット幅を有することを意味し、例えば信号“medpDRobIndex”のビット幅[2:0]は、ビット0からビット2までの3ビット幅を有していることを示している。表1において「方向」(I/O)とは、記号“I”が拡張命令実行ユニット402aからプロセッサコア4aに対して伝達されるデータ(信号)を意味し、記号“O”がプロセッサコア4aから拡張命令実行ユニット402aに対して伝達されるデータ(信号)を意味している。
例えば、ユーザが図7に示す即値の上位4ビットを使用して16個の命令を定義した場合、拡張命令実行ユニット(DSP)402aにおいて即値の上位4ビットをデコードすることで、拡張命令の識別が行われる。
拡張命令実行ユニット(DSP)402aは、拡張命令の識別結果に応じて、表1に示す信号“dpmeDOpUse”を生成する。信号“dpmeDOpUse”は、レジスタ番号Rm及びRnを、拡張命令が使用するか否かを示す2ビットの信号である。レジスタ番号Rm又はRnを使用する場合には、該当するビットが1になり、使用しない場合は該当するビットが0になる。例えば、信号“dpmeDOpUse”が2進数表記で“11”の場合はレジスタ番号Rm及びRnを両方使用する命令であることを意味する。信号“dpmeDOpUse”が2進数表記で“00”の場合は、レジスタ番号Rm及びRnのいずれも使用しないことを意味する。
拡張命令実行ユニット(DSP)402aの命令実行結果は、データ配線455を介してリオーダバッファ406aの第4書き込みポートW3に伝達される。拡張命令実行ユニット(DSP)402aの命令実行結果には、表1に示すように、実行結果のデータである“dpmePResultData”、データが有効であることを意味する信号である“dpmePValid”、例外の発生を意味する信号である“dpmePExcept”、及び命令のタグ番号である“dpmePRobIndex”が含まれる。
更に、リオーダバッファ406aは図8に示すように、例えば8つのエントリ(第1エントリE1〜第8エントリE8)を備える。但し、エントリ数は8つに限定されず、パイプラインの段数等に応じて適宜エントリ数を変更しても良い。
各エントリは、1ビットのRフラグ、1ビットのCフラグ、1ビットのTフラグ、1ビットのWフラグ、1ビットのEフラグ、5ビットのRFNフィールド、32ビットのWDATAフィールド、及び32ビットのPCフィールドを含む。
一例として、第1エントリE1の「Rフラグ」は、第1エントリE1が使用中であるか否かを示すフラグである。よって、Rフラグが論理値“1”の場合、第1エントリE1は使用中であり、論理値“0”の場合、第1エントリE1は使用中でないこととなる。
また、第1エントリE1の「Vフラグ」は、第1エントリE1に割り当てられた命令の実行結果が書き込まれたか否かを意味する。Vフラグが論理値“1”の場合は第1エントリE1に割り当てられた命令の実行結果が書き込まれたことを示し、論理値“0”の場合は第1エントリE1に割り当てられた命令の実行結果が書き込まれていないことを示す。
第1エントリE1の「Tフラグ」は、第1エントリE1に割り当てられた命令がタイムアウト処理の対象であるかを意味する。Tフラグが論理値“1”の場合は第1エントリE1に割り当てられた命令がタイムアウトの対象であることを示し、論理値“0”の場合は第1エントリE1に割り当てられた命令がタイムアウトの対象でないことを示す。尚、タイムアウト処理の詳細については後述する。
第1エントリE1の「Wフラグ」は、第1エントリE1に割り当てられた命令が、レジスタファイル408aに対するライトバックを必要とするか否かを意味する。Wフラグが論理値“1”の場合は第1エントリE1に割り当てられた命令がライトバックを必要とすることを示し、論理値“0”の場合は第1エントリE1に割り当てられた命令がライトバックを必要としないことを示す。
第1エントリE1の「Eフラグ」は、第1エントリE1に割り当てられた命令が例外を発生する可能性があるか否かを意味する。Eフラグが論理値“1”の場合は第1エントリE1に割り当てられた命令が例外を発生する可能性があることを示し、論理値“0”の場合は第1エントリE1に割り当てられた命令が例外を発生する可能性がないことを示す。
第1エントリE1の「RFNフィールド」は、第1エントリE1に割り当てられた命令によって更新されるレジスタファイル408aのレジスタ番号を示すフィールドである。第1エントリE1の「WDATAフィールド」は、第1エントリE1に割り当てられた命令の実行結果が格納されるフィールドである。第1エントリE1の「PCフィールド」は、第1エントリE1に割り当てられた命令のプログラムカウンタ値が格納されるフィールドである。第2エントリE2〜第8エントリE8は、第1エントリE1と同様に構成される。
更に、リオーダバッファコントローラ407aは、主にコミット操作に使用される第1カウンタ602、及びタグ番号を生成する第2カウンタ603を備える。第1カウンタ602及び第2カウンタ603のそれぞれは、例えば3ビットのビット長を有する。即ち、第1カウンタ602及び第2カウンタ603は8パターンの値を表現可能であり、10進数表記で値“7”に値“1”を加算すると値“0”になる。
命令デコードユニット401aは、命令発行を行うと、その次のサイクルで第2カウンタ603の値を1つ増加させる。第2カウンタ603のカウント値がタグ番号として使用され、タグ番号は、図1に示すデータ配線451を介してリオーダバッファ406aに伝達される。第1カウンタ602のカウント値により、第1エントリE1〜第8エントリE8のいずれかが指定される。同様に、第2カウンタ603のカウント値により、第1エントリE1〜第8エントリE8のいずれかが指定される。
命令デコードユニット401aによって命令が発行されると、第2カウンタ603で指定されるエントリのRフラグが論理値“1”に設定される。また、発行された命令により更新されるレジスタファイル408aのレジスタ番号が、第2カウンタ603で指定されるエントリのRFNフィールドに設定される。
更に、発行された命令がライトバックを必要とする命令である場合、第2カウンタ603で指定されるエントリのWフラグに論理値“1”が設定される。これに対して、発行された命令がライトバックを必要とする命令でない場合、第2カウンタ603で指定されるエントリのWフラグに論理値“0”が設定される。
発行された命令が例外を発生する可能性を有する命令である場合には、第2カウンタ603で指定されるエントリのEフラグに論理値“1”が設定される。発行された命令が例外を発生する可能性を有する命令でない場合には、第2カウンタ603で指定されるエントリのEフラグに論理値“0”が設定される。
一例として、発行された命令が拡張命令(DSP命令)である場合には、第2カウンタ603で指定されるエントリのTフラグに論理値“1”が設定される。発行された命令がコア命令である場合には、コア命令の種類に応じて、Tフラグに設定される値は異なる。
また、リオーダバッファ406aは、例外の発生を伴わないコンプリーションが発生すると、第2カウンタ603で指定されるエントリのWDATAフィールドに実行結果を書き込む。また、Vフラグに論理値“1”が設定される。
リオーダバッファ406aは、第1カウンタ602で指定されるエントリのRフラグが論理値“1”、且つVフラグが論理値“1”のとき、WDATAフィールドのデータをRFNフィールドで示されるレジスタ番号に書き込む要求を、レジスタファイル408aに対して出力する。この操作が、上述したコミット操作である。
リオーダバッファ406aはコミット操作を行った次のサイクルで、そのエントリのRフラグ、Vフラグ、及びTフラグに論理値“0”を設定する。例外が発生した場合は、第1カウンタ602の値から降順に、第2カウンタ603のカウント値で終わるエントリを走査し、そのRフラグを論理値“0”に設定する。この後、第2カウンタ603の値を第1カウンタ602に設定する。この結果、例外が発生した命令以降の命令の実行結果を破棄し、正確な例外処理を行うことが可能となる。
次に、図8に示すタイムアウト処理装置604について説明する。拡張命令(DSP命令)については、機能の定義と実装はユーザに任せられている。拡張命令(DSP命令)を実行しても、プロセッサコア4aに実行結果が送信されなかった場合、後続の命令がその実行結果を参照する命令であった場合には、プロセッサは実行結果が伝達されるまで停止する。このような状況を「ハングアップ」という。
プログラムや回路のバグに起因してハングアップが生じるシステムは、信頼性が低い。特に、拡張命令の機能定義とそれを実行する拡張命令実行ユニット402aにプロセッサの信頼性が依存することになり、システム全体の保証が難しくなる。
また、プログラムの開発や回路の開発段階において、バグによってハングアップが生じると、リセット以外にプロセッサの命令実行を再開させる手段がないために、デバッグに要する時間が増大する。更に、ハングアップ時の状況を、デバッガを用いて調べることができなくなるために、バグの解析に時間がかかる。
そこで、図8に示すタイムアウト処理装置604は、一定の時間、命令の実行が停止した場合に、命令の実行結果を破棄することで、プロセッサの命令実行を再開する。即ち、タイムアウト処理装置604は、命令の実行サイクル数をカウントして、設定したサイクル数以内で命令が完了しない場合は、タイムアウト処理を発生させる。タイムアウト処理としては、例えば例外処理又は割込み処理が使用できる。タイムアウト処理として割込みを使用する例については後述する。
拡張命令実行ユニット(DSP)402aで実行される拡張命令(DSP命令)は、 拡張命令実行ユニット(DSP)402aからコンプリーション要求が送られてこないと、その命令の実行は完了しない。したがって、コンプリーション要求が送られてこないと、リオーダバッファ406aのエントリが一杯になった時点で、命令の発行ができなくなる。これはプロセッサの停止を意味する。
そこで、タイムアウト処理装置604は、第1カウンタ602で指定されるエントリを監視し、一定のサイクル期間、コンプリーションが発生しないと、例外を発生させる。例外を発生させる処理について以下に説明する。
タイムアウト処理装置604は、第1カウンタ602のカウント値で指定されるエントリのTフラグ及びRフラグが論理値“1”、且つVフラグが論理値“0”の場合に、クロックサイクル数のカウントを開始する。Vフラグの値が1になると、カウントを停止する。
一例として、クロックサイクル数のカウント結果が4096サイクルを超えると、タイムアウト処理装置604は、第1カウンタ602が指定するエントリの命令を例外が発生したものとして処理する。
尚、タイムアウト処理を発生させる基準となるクロックサイクル数は、前述の4096サイクルに限定されない。例えば、8192クロックサイクルや16384サイクル等を取りえる。クロックサイクル数の変更は、後述するメタ回路記述を使用することで実現可能である。また、タイムアウト処理を発生させる基準となるクロックサイクル数として、レジスタファイル408aの特定のレジスタに設定した値を使用することで、ユーザがプログラムで設定した値を使用することも実現可能である。
このように、本発明の第1実施形態によれば、リオーダバッファ406aを使用することにより、スコアボーディング手法を用いることなく、実行サイクル数や例外発生に関して自由度の高い命令拡張を可能とし、任意の実行サイクルを有する拡張命令(DSP命令)を含む命令群を効率よく実行可能なパイプラインプロセッサを提供できる。よって、パイプラインプロセッサの複雑度が緩和されるため、高速動作に対応可能となり、信頼性の高いパイプラインプロセッサを構成できる。また、タイムアウト処理装置604がタイムアウト処理を発生可能であるので、パイプラインプロセッサの信頼性を更に高めることが可能となる。
(第1実施形態の変形例)
本発明の第1実施形態の変形例として、図9に示すように、図1に示すパイプラインプロセッサを設計するプロセッサ設計方法を説明する。図9に示す各処理は、図10に示すようなプロセッサ設計装置により実現される。図10に示すプロセッサ設計装置は、処理装置101、記憶装置102、入力装置103、及び出力装置104等を備える。
本発明の第1実施形態の変形例として、図9に示すように、図1に示すパイプラインプロセッサを設計するプロセッサ設計方法を説明する。図9に示す各処理は、図10に示すようなプロセッサ設計装置により実現される。図10に示すプロセッサ設計装置は、処理装置101、記憶装置102、入力装置103、及び出力装置104等を備える。
記憶装置102には、設計対象となるプロセッサの構成条件及び機能条件等を記述した回路記述である「コンフィギュレーション情報」と、コンフィギュレーション情報に応じて回路記述が追加又は削除される「メタ回路記述」とが格納されている。
コンフィギュレーション情報及びメタ回路記述に基づいて、設計対象プロセッサの回路記述が生成される。このような手法で設計されたプロセッサを「コンフィギュラブル・プロセッサ」という。コンフィギュラブル・プロセッサは、コンフィギュレーション情報に従って、回路記述を自動的に追加又は削除するプロセッサ設計装置によって設計される。
メタ回路記述を使用することで、ユーザの要望に従って回路記述を追加又は削除することが可能であるが、機能検証のコストが増加する。例えば、コンフィギュレーション情報として8つのパラメータが存在し、その個々のパラメータが1又は0の値をとる場合、2の8乗、即ち256パターンの異なる回路を設計可能である。このとき、機能検証が自動化されていたと仮定しても、256倍の計算時間を要する。
計算時間を削減するには、パラメータ数の削減及びパラメータ間の依存関係の限定による、検証空間の削減が必要となる。回路構成及び動作が簡潔であるほど、検証空間の削減が可能となる。上述したスコアボーディング装置においては、回路構成及び動作が複雑であるため、機能検証に要する時間を削減するために、スコアボーディング装置の機能を限定するなどの限定が行われることが多い。
これに対して、図1に示すパイプラインプロセッサは、スコアボーディング装置よりも回路構成及び動作が簡潔なリオーダバッファ406aを使用しているため、機能検証に要する時間を十分に確保可能である。
メタ回路記述は、図11に示すように、ハードウエア記述言語(HDL)、例えばVerilog−HDL等を基盤として、他の言語が埋め込まれている。埋め込まれている他の言語を「メタ制御言語」という。メタ制御言語は、行頭が記号“%”で始まる。図11に示す例においては、記述“%if OP_USE_DSP”及び記述“%endif”がメタ制御言語に相当する。コンフィギュレーション情報は、図12に示すように、メタ制御言語で記述されている。
図10に示す処理装置101は、前処理部1011及び論理合成部1012の各機能を実行する。前処理部1011は、記憶装置102からメタ回路記述及びコンフィギュレーション情報を読み出し、メタ制御言語を実行して、設計対象プロセッサの回路記述を作成する。論理合成部1012は、設計対象プロセッサの回路記述を論理合成して、設計対象プロセッサのネットリストを作成する。
次に、図9に示すフローチャートを参照して、第1実施形態の変形例に係るプロセッサ設計方法を説明する。一例として、メタ回路記述とコンフィギュレーション情報から、拡張命令(DSP命令)を使用しない場合に、図1に示す命令デコードユニット401aの拡張命令(DSP命令)に対する一部のデコード機能を自動的に追加又は削除する手順を説明する。この場合、図11に示すようなメタ回路記述が用意される。
尚、図11に示す記述D1はHDLにおける関数定義である。記述D2は、16進数表記で“0010”が入力された場合に2進数表記で“0001”にデコードすることを示している。記述D2に続く2つの行も記述D2と同様の記述である。記述D3は、コンフィギュレーション情報により追加又は削除される記述である。
記述D4は、default 項と呼ばれる記述である。default項は、case文においてdefault項以外に列挙された入力信号のいずれにも一致しない場合に、選択される。例えば図11において、入力が“4321”であった場合に、default 項が選択され、デコード結果として“0000”が得られる。
また、コンフィギュレーション情報における変数“%if OP_USE_DSP”が“true”に設定されている場合、拡張命令(DSP命令)を使用することを意味している。コンフィギュレーション情報における変数“%if OP_USE_DSP”が“false”に設定されている場合、拡張命令(DSP命令)を使用しないことを意味している。
ステップS01において、図10に示す前処理部1011は、メタ回路記述格納領域1021に格納されたメタ回路記述と、コンフィギュレーション情報格納領域に格納されたコンフィギュレーション情報とを取得する。
ステップS02において、前処理部1011は、メタ制御言語を実行して、設計対象プロセッサの回路記述を作成する。具体的には、ステップS01で取得されたコンフィギュレーション情報における変数“%if OP_USE_DSP”が、図12に示すように“true”の場合には、図11に示すメタ回路記述中のif構文の条件節“%if OP_USE_DSP”から“%endif”までの記述、即ち記述D3を含めた回路記述を作成する。この結果、図13に示す回路記述が作成され、プロセッサ記述格納領域1023に格納される。
一方、ステップS01で取得されたコンフィギュレーション情報における変数“%if OP_USE_DSP”が、図14に示すように“false”の場合には、図11に示すメタ回路記述中のif構文の条件節“%if OP_USE_DSP”から“%endif”までの記述、即ち記述D3を除去した回路記述を作成する。この結果、図15に示す回路記述が作成され、プロセッサ記述格納領域1023に格納される。
ステップS03において、図10に示す論理合成部1012は、プロセッサ記述格納領域1023に格納された回路記述を論理合成して、設計対象プロセッサのネットリストを作成する。作成されたネットリストは、ネットリスト格納領域1024に格納される。
更に、図11に示すメタ回路記述に代えて図16に示すメタ回路記述を使用すれば、図1に示す拡張命令実行ユニット(DSP)402aを使用しない場合に、リオーダバッファ406aの書き込みポートW3等を自動的に追加又は削除できる。
図16に示す記述D5は、リオーダバッファ406aの入出力信号を列挙したものであり、記述D5中の記述D51は、リオーダバッファ406aのポートW3に対応する回路記述である。
図16に示す記述D6は、図1に示す拡張命令実行ユニット(DSP)402a、FPU403、IBU404、及びLSU405の各実行結果からいずれかを選択するセレクタを定義している。記述D6中の記述D61は、拡張命令実行ユニット(DSP)402aの実行結果に対応する回路記述である。
このように、第1実施形態の変形例に係るプロセッサ設計方法によれば、コンフィギュレーション情報に従って回路記述を自動的に作成することで、最適な回路記述を容易に得ることができる。したがって、スコアボーディング手法を用いることなく、実行サイクル数や例外発生に関して自由度の高い命令拡張を可能とし、任意の実行サイクルを有する拡張命令(DSP命令)を含む命令群を効率よく実行可能なパイプラインプロセッサを、容易に設計可能となる。
(第2実施形態)
本発明の第2実施形態に係るパイプラインプロセッサは、図17に示すように、命令デコードユニット401bが、コア命令をデコードするコア命令デコーダ4011及び拡張命令の一部をデコードする拡張命令デコーダ4011の各機能を実行する点が図1と異なる。即ち、命令デコードユニット401bは、図1に示した命令デコードユニット401aに、リオーダバッファ406a及びバイパスネットワーク409aの制御に必要な拡張命令(DSP命令)のデコード機能の一部を追加したものである。
本発明の第2実施形態に係るパイプラインプロセッサは、図17に示すように、命令デコードユニット401bが、コア命令をデコードするコア命令デコーダ4011及び拡張命令の一部をデコードする拡張命令デコーダ4011の各機能を実行する点が図1と異なる。即ち、命令デコードユニット401bは、図1に示した命令デコードユニット401aに、リオーダバッファ406a及びバイパスネットワーク409aの制御に必要な拡張命令(DSP命令)のデコード機能の一部を追加したものである。
一般的に、命令デコーダはプロセッサの最高動作周波数を決定するクリティカルパスになりやすい。図1に示した拡張命令実行ユニット402aが拡張命令(DSP命令)のデコードを行う構成の場合、配線遅延に起因して最高動作周波数が低下(悪化)する。
図1においては、拡張命令実行ユニット402aが拡張命令(DSP命令)のデコードを行っていた。このため、拡張命令実行ユニット402aとプロセッサコア4aとの間に、拡張命令がオペランドを使用するか否かを示す信号“dpmeDOpUse”を伝達するためのデータ配線463が設けられていた。
また、図1においては、拡張命令実行ユニット402aとプロセッサコア4aとの間に、拡張命令(DSP命令)に戻り値が存在するか否か、即ち(DSP命令)がライトバックを必要とするか否かを示す信号“dpmeDReExPossibility”を伝達するためのデータ配線462が設けられていた。
図1及び表1に示したように、拡張命令実行ユニット402aが信号“dpmeDOpUse”及び信号“dpmeDReExPossibility”を1サイクル以内に生成する場合、チップ上において、拡張命令実行ユニット402a、命令デコードユニット401a、及びリオーダバッファ406aが離間して配置されると、データ配線462及びデータ配線463がクリティカルパスになる可能性が高くなる。
一方、図17においては、命令デコードユニット401bが拡張命令(DSP命令)の一部をデコードして信号“dpmeDOpUse”及び信号“dpmeDReExPossibility”を生成する。したがって、図17及び表2に示すように、図1及び表1に示したデータ配線463及びデータ配線462を不要としている。
命令デコードユニット401bが生成した信号“dpmeDOpUse”は、図17に示すデータ配線464bを介してバイパスネットワーク409bに伝達される。命令デコードユニット401bが生成した信号“dpmeDReExPossibility”は、図17に示すデータ配線461bを介してリオーダバッファ406bに伝達される。
また、第1実施形態では、タイムアウト処理として例外を発生させる方法を採用しているが、第2実施形態では、タイムアウト処理として割込みを使用する。このため、図17に示すレジスタファイル408bは、タイムアウト処理が発生したことを示すタイムアウト用レジスタ4081を備える。
第1実施形態同様に図8に示すタイムアウト処理装置604及びリオーダバッファ406bは、タイムアウト検出後、すべてのエントリのRフラグが0になると、タイムアウト用レジスタ4081に論理値“1”を書き込む。更に、データ配線470を介して、命令デコードユニット401bに対して割込み要求を行う。
次に、リオーダバッファ406bの割込み処理の手順を説明する。リオーダバッファ406bはタイムアウトが発生すると、その命令のエントリのVフラグに論理値“1”を設定して、その命令を完了させる。タイムアウトした命令の実行結果は、不正な値となる。したがって、そのエントリのWDATAフィールドは不正な値となるが、そのエントリのWフラグが論理値“1”ならば、レジスタファイル408bへのライトバック処理を行う。また、命令デコードユニット401bは、リオーダバッファ406bからの割込み要求に応じて、タイムアウトが発生した命令と異なる命令に対して割込みを行う。
このように、本発明の第2実施形態によれば、命令デコードユニット401bが拡張命令(DSP命令)の一部をデコードすることにより、クリティカルパスの問題を解決できる。したがって、図1に示すパイプラインプロセッサと比較して、より高速な動作に対応可能となる。また、タイムアウト処理として割込みを発生させることにより、パイプラインプロセッサの信頼性を更に高めることが可能となる。
(第2実施形態の変形例)
本発明の第2実施形態の変形例として、図17に示すパイプラインプロセッサを設計するプロセッサ設計方法を説明する。プロセッサ設計方法の処理手順は図9と同様であるが、図18に示すようなコンフィギュレーション情報及び図19に示すようなメタ回路記述が使用される。
本発明の第2実施形態の変形例として、図17に示すパイプラインプロセッサを設計するプロセッサ設計方法を説明する。プロセッサ設計方法の処理手順は図9と同様であるが、図18に示すようなコンフィギュレーション情報及び図19に示すようなメタ回路記述が使用される。
図18に示すコンフィギュレーション情報及び図19に示すメタ回路記述を使用することにより、ユーザの命令定義から、適切な回路記述を生成することができる。図18に示すコンフィギュレーション情報は、拡張命令の仕様に従って次の(1)〜(5)の情報を記述したものである。(1)拡張命令の命令コード。(2)オペランドRmを使用する命令であるか否か。(3)オペランドRnを使用する命令であるか否か。(4)ライトバックを行う命令であるか否か。(5)例外を発生する可能性があるか否か。
図18に示す例においては、拡張命令である“ADD”命令、“SDIV”命令、及び“SYNC”命令を定義した場合の例である。“ADD”命令は加算命令を意味し、“SDIV”命令はシフト除算命令を意味し、“SYNC”命令は同期命令を意味している。図18に示すコンフィギュレーション情報及び図19に示すメタ回路記述により、図20に示す回路記述が生成される。
(その他の実施形態)
上記のように、本発明は第1及び第2実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。
上記のように、本発明は第1及び第2実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。
上述した実施形態においては、拡張命令実行ユニット402a及び402bとしてDSPを使用し、拡張命令としてDSP命令を使用する一例を説明した。しかしながら、拡張命令実行ユニット402a及び402bとして例えばコプロセッサを使用し、拡張命令としてコプロセッサ命令を使用しても良い。
上述した実施形態に係るパイプラインプロセッサをリコンフィギュラブル・プロセッサとして構成しても良い。「リコンフィギュラブル・プロセッサ」とは、フィールド・プログラマブル・ゲート・アレイ(FPGA)に代表されるような手法を用いることで、プロセッサの機能を動的に変更可能なプロセッサを意味する。リコンフィギュラブル・プロセッサを設計するためには、上述した実施形態に係るプロセッサ設計方法と同様の手順が採用できる。
このように本発明は、ここでは記載していない様々な実施形態等を包含するということを理解すべきである。したがって、本発明はこの開示から妥当な特許請求の範囲の発明特定事項によってのみ限定されるものである。
1a,1b…命令実行ユニット
4a,4b…プロセッサコア
40…コア命令実行ユニット
401a,401b…命令デコードユニット
402a,402b…拡張命令実行ユニット
406a,406b…リオーダバッファ
407a,407b…リオーダバッファコントローラ
4a,4b…プロセッサコア
40…コア命令実行ユニット
401a,401b…命令デコードユニット
402a,402b…拡張命令実行ユニット
406a,406b…リオーダバッファ
407a,407b…リオーダバッファコントローラ
Claims (5)
- フェッチされた命令をデコードして、コア命令及びユーザにより定義された拡張命令のいずれかを選択的に発行する命令デコードユニットと、
発行された前記コア命令を実行するコア命令実行ユニットと、
発行された前記拡張命令を実行する拡張命令実行ユニットと、
前記コア命令実行ユニット及び前記拡張命令実行ユニットのそれぞれの命令実行結果を一時的に記憶して、前記コア命令及び前記拡張命令の発行された順に前記命令実行結果を並べ替えて出力するリオーダバッファ
とを備えることを特徴とするパイプラインプロセッサ。 - 前記命令デコードユニットは、前記フェッチされた命令が前記コア命令である場合に前記コア命令をデコードし、前記フェッチされた命令が前記拡張命令である場合に前記拡張命令の一部をデコードすることを特徴とする請求項1に記載のパイプラインプロセッサ。
- 前記リオーダバッファは、前記命令実行結果に例外の発生を通知する信号が含まれる場合、前記例外の発生した命令の実行結果及び前記例外の発生した命令以後に発行された命令の実行結果を出力せずに破棄することを特徴とする請求項1又は2に記載のパイプラインプロセッサ。
- フェッチされた命令をデコードして、命令を発行する命令デコードユニットと、
発行された前記命令を実行する命令実行ユニットと、
前記命令実行ユニットの命令実行結果を一時的に記憶して、前記命令の発行された順に前記命令実行結果を並べ替えて出力するリオーダバッファと、
前記命令実行ユニットによる前記命令の実行に要するクロックサイクルをカウントして、カウント結果が一定値を超えた場合にタイムアウト処理を発生させるタイムアウト処理装置
とを備えることを特徴とするパイプラインプロセッサ。 - 前記リオーダバッファは、前記タイムアウト処理が発生した場合、前記タイムアウト処理の対象となった命令の実行が完了したと判定し、
前記命令デコードユニットは、前記タイムアウト処理の対象となった命令に対し、前記タイムアウト処理の対象となった命令と異なる命令に割込みを行うことを特徴とする請求項4に記載のパイプラインプロセッサ。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005217789A JP2007034731A (ja) | 2005-07-27 | 2005-07-27 | パイプラインプロセッサ |
US11/492,937 US20070028077A1 (en) | 2005-07-27 | 2006-07-26 | Pipeline processor, and method for automatically designing a pipeline processor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005217789A JP2007034731A (ja) | 2005-07-27 | 2005-07-27 | パイプラインプロセッサ |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007034731A true JP2007034731A (ja) | 2007-02-08 |
Family
ID=37695725
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005217789A Pending JP2007034731A (ja) | 2005-07-27 | 2005-07-27 | パイプラインプロセッサ |
Country Status (2)
Country | Link |
---|---|
US (1) | US20070028077A1 (ja) |
JP (1) | JP2007034731A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109791478A (zh) * | 2016-09-30 | 2019-05-21 | 国际商业机器公司 | 十进制移位和除法指令 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110307688A1 (en) * | 2010-06-10 | 2011-12-15 | Carnegie Mellon University | Synthesis system for pipelined digital circuits |
US8683261B2 (en) * | 2011-07-20 | 2014-03-25 | International Business Machines Corporation | Out of order millicode control operation |
US9971603B2 (en) * | 2011-12-29 | 2018-05-15 | Intel Corporation | Causing an interrupt based on event count |
US9977676B2 (en) | 2013-11-15 | 2018-05-22 | Qualcomm Incorporated | Vector processing engines (VPEs) employing reordering circuitry in data flow paths between execution units and vector data memory to provide in-flight reordering of output vector data stored to vector data memory, and related vector processor systems and methods |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3426331A (en) * | 1966-12-12 | 1969-02-04 | Honeywell Inc | Apparatus for monitoring the processing time of program instructions |
JPH04241636A (ja) * | 1991-01-14 | 1992-08-28 | Nec Corp | 時間監視回路 |
JP2000215062A (ja) * | 1999-01-25 | 2000-08-04 | Hitachi Ltd | 命令制御方法 |
JP2003515214A (ja) * | 1999-11-16 | 2003-04-22 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | 計算を狭いオペランドで実施するための方法と装置 |
JP2004171573A (ja) * | 2002-11-19 | 2004-06-17 | Stmicroelectronics Inc | 新規な分割命令トランズアクションモデルを使用して構築したコプロセッサ拡張アーキテクチャ |
JP2004199630A (ja) * | 2001-12-27 | 2004-07-15 | Pacific Design Kk | データ処理装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5659721A (en) * | 1995-02-14 | 1997-08-19 | Hal Computer Systems, Inc. | Processor structure and method for checkpointing instructions to maintain precise state |
US5752035A (en) * | 1995-04-05 | 1998-05-12 | Xilinx, Inc. | Method for compiling and executing programs for reprogrammable instruction set accelerator |
US5752259A (en) * | 1996-03-26 | 1998-05-12 | Advanced Micro Devices, Inc. | Instruction cache configured to provide instructions to a microprocessor having a clock cycle time less than a cache access time of said instruction cache |
US7343476B2 (en) * | 2005-02-10 | 2008-03-11 | International Business Machines Corporation | Intelligent SMT thread hang detect taking into account shared resource contention/blocking |
-
2005
- 2005-07-27 JP JP2005217789A patent/JP2007034731A/ja active Pending
-
2006
- 2006-07-26 US US11/492,937 patent/US20070028077A1/en not_active Abandoned
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3426331A (en) * | 1966-12-12 | 1969-02-04 | Honeywell Inc | Apparatus for monitoring the processing time of program instructions |
JPH04241636A (ja) * | 1991-01-14 | 1992-08-28 | Nec Corp | 時間監視回路 |
JP2000215062A (ja) * | 1999-01-25 | 2000-08-04 | Hitachi Ltd | 命令制御方法 |
JP2003515214A (ja) * | 1999-11-16 | 2003-04-22 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | 計算を狭いオペランドで実施するための方法と装置 |
JP2004199630A (ja) * | 2001-12-27 | 2004-07-15 | Pacific Design Kk | データ処理装置 |
JP2004171573A (ja) * | 2002-11-19 | 2004-06-17 | Stmicroelectronics Inc | 新規な分割命令トランズアクションモデルを使用して構築したコプロセッサ拡張アーキテクチャ |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109791478A (zh) * | 2016-09-30 | 2019-05-21 | 国际商业机器公司 | 十进制移位和除法指令 |
Also Published As
Publication number | Publication date |
---|---|
US20070028077A1 (en) | 2007-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI709863B (zh) | 用於轉換記憶體與複數個向量暫存器之間的複數個資料結構的設備及方法 | |
US11275590B2 (en) | Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory | |
US7418578B2 (en) | Simultaneously assigning corresponding entry in multiple queues of multi-stage entries for storing condition attributes for validating simultaneously executed conditional execution instruction groups | |
KR101148495B1 (ko) | 파이프라인 프로세서에서 조건 명령 실행을 촉진시키기 위해 로컬 조건 코드 레지스터를 이용하기 위한 방법 및 장치 | |
US7600096B2 (en) | Coprocessor extension architecture built using a novel split-instruction transaction model | |
JP5209933B2 (ja) | データ処理装置 | |
GB2503438A (en) | Method and system for pipelining out of order instructions by combining short latency instructions to match long latency instructions | |
WO2009003160A1 (en) | A method and system for expanding a conditional instruction into a unconditional instruction and a select instruction | |
JP2006313422A (ja) | 演算処理装置及びデータ転送処理の実行方法 | |
JP2008090848A (ja) | データ処理システム内のレジスタリネーミング | |
KR20070054096A (ko) | 저장 명령 수행 방식을 동적으로 선택하기 위한 시스템 및방법 | |
US20190079775A1 (en) | Data processing | |
JP2007034731A (ja) | パイプラインプロセッサ | |
WO2014190699A1 (zh) | 一种cpu指令处理方法和处理器 | |
US20070204139A1 (en) | Compact linked-list-based multi-threaded instruction graduation buffer | |
US7634641B2 (en) | Method and apparatus for using multiple threads to spectulatively execute instructions | |
US7340590B1 (en) | Handling register dependencies between instructions specifying different width registers | |
US20040199749A1 (en) | Method and apparatus to limit register file read ports in an out-of-order, multi-stranded processor | |
US7707389B2 (en) | Multi-ISA instruction fetch unit for a processor, and applications thereof | |
US7257698B2 (en) | Instruction buffer and method of controlling the instruction buffer where buffer entries are issued in a predetermined order | |
US9213547B2 (en) | Processor and method for processing instructions using at least one processing pipeline | |
KR20230077251A (ko) | 벡터 연산을 위한 데이터 처리 방법 및 장치 | |
US20140365751A1 (en) | Operand generation in at least one processing pipeline | |
JP2008217154A (ja) | データ処理装置、データ処理方法 | |
JP2001051845A (ja) | アウトオブオーダー実行方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080625 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20110113 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110125 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20110712 |