(57)【要約】【課題】複数の機械語命令を高速に同時実行するデータ処理装置において、従来よりも動作周波数を向上させ、また、消費電力を抑える。【解決手段】データ処理装置は、複数のソースレジスタ番号とデスティネーションレジスタ番号との組を、該ソースレジスタ番号および該デスティネーションレジスタ番号を指定する機械語命令の実行順序に応じた所定の格納位置に格納するＶＬＩＷ命令キュー１４０と、ＶＬＩＷ命令キュー１４０に格納されている、実行順序が最も早い機械語命令に含まれるソースレジスタの値と、該機械語命令に含まれるデスティネーションレジスタ番号とを取り出して格納する入力待ちレジスタ１７０とを備える。これにより、実行順序が最も早い機械語命令のみを発行することができ、データ処理装置全体の動作周波数を向上させることができる。また、レジスタ番号のみを格納するので、記憶領域のサイズを抑えることができる。【選択図】図１
2008217154.tif 000002
【特許請求の範囲】
【請求項１】
所定の演算に使用する値を格納するソースレジスタの番号を指定するソースオペランドフィールドと、該演算の結果を格納するデスティネーションレジスタの番号を指定するデスティネーションオペランドフィールドとを含む機械語命令を複数同時に解釈実行するデータ処理装置であって、
複数の上記機械語命令に含まれる、ソースオペランドフィールドより指定されるソースレジスタ番号とデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納する第１の命令格納手段と、
第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を、該ソースレジスタ番号を指定するソースオペランドフィールドおよび該デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序に応じた所定の格納位置に格納し、上記ソースレジスタ番号とデスティネーションレジスタ番号との組を格納しない格納位置には空き情報を格納する第２の命令格納手段と、
第２の命令格納手段に格納されている、実行順序が最も早い機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタの値と、該機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号とを格納する第３の命令格納手段と、
第３の命令格納手段から取得したソースレジスタの値を基に所定演算を行い、該演算結果を第３の命令格納手段から取得したデスティネーションレジスタ番号で指定されるレジスタに格納する、複数の命令演算手段とを備え、
第１の命令格納手段から取得したソースレジスタ番号が、第２の命令格納手段に格納済みのデスティネーションレジスタ番号に依存するとき、第２の命令格納手段が、上記ソースレジスタ番号を指定するソースオペランドフィールドを含む機械語命令の実行順序を、上記デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序より遅い順序に決定し、上記決定した実行順序に応じた格納位置であって、上記空き情報が格納されている格納位置に、上記ソースオペランドフィールドにより指定されるソースレジスタ番号と、上記ソースオペランドフィールドを含む機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納することを特徴とするデータ処理装置。
【請求項２】
第２の命令格納手段が、格納するソースレジスタ番号ごとに、該ソースレジスタの値を命令演算手段への投入可否を示す投入可否情報を備え、
第２の命令格納手段に格納された、実行順序が最も早い機械語命令に含まれるソースオペランドにより指定されるソースレジスタ番号の投入可否情報の全てが投入可であるとき、該ソースレジスタの値を取得し、第３の命令格納手段に格納することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
第１の命令格納手段から取得したソースレジスタ番号が、第２の命令格納手段に格納済みのデスティネーションレジスタ番号に依存するとき、第２の命令格納手段が、上記ソースレジスタ番号の投入可否情報を投入不可と設定し、
第２の命令格納手段が、第２の命令格納手段に格納済みの、実行順序が最も早い機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタの値を取得して第３の命令格納手段に格納するとき、該機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号と、上記投入可否情報を投入不可と設定したソースレジスタ番号とを比較し、上記デスティネーションレジスタ番号と上記ソースレジスタ番号とが一致するとき、上記ソースレジスタ番号の投入可否情報を投入可と設定することを特徴とする請求項１に記載のデータ処理装置。
【請求項４】
上記命令演算手段が第３の命令格納手段から取得したデスティネーションレジスタ番号で指定されるレジスタに演算結果を格納したとき、上記デスティネーションレジスタ番号と、第２の命令格納手段に格納済みのソースレジスタ番号とを比較し、上記デスティネーションレジスタ番号と上記ソースレジスタ番号とが一致するとき、上記ソースレジスタ番号の投入可否情報を投入可と設定することを特徴とする請求項１に記載のデータ処理装置。
【請求項５】
第１の命令格納手段から複数のソースレジスタ番号とデスティネーションレジスタ番号との組を取得し、上記ソースレジスタ番号と上記デスティネーションレジスタ番号との間の依存関係を解消する依存関係解消手段をさらに備え、
第２の命令格納手段が、上記依存関係解消手段から、依存関係を解消した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を取得することを特徴とする請求項１に記載のデータ処理装置。
【請求項６】
第２の命令格納手段が、第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を格納するとき、上記依存関係解消手段から取得したソースレジスタ番号とデスティネーションレジスタ番号との間の依存関係を基に、上記複数の組に含まれるソースレジスタ番号を指定するソースオペランドフィールドおよびデスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序を決定し、上記決定した実行順序に応じた格納位置であって、上記空き情報が格納されている格納位置に，上記複数のソースレジスタ番号とデスティネーションレジスタ番号との組を格納する新規命令登録制御手段をさらに備えることを特徴とする請求項５に記載のデータ処理装置。
【請求項７】
上記命令演算手段における演算結果を１サイクルでレジスタに格納できなかったときであっても、第２の命令格納手段に格納される、実行順序が最も早い機械語命令に含まれるソースオペランドにより指定されるソースレジスタ番号の投入可否情報の全てが投入可であって、上記ソースレジスタ番号のいずれもが、上記演算結果を格納できなかったデスティネーションレジスタ番号に依存しないとき、上記ソースレジスタの値と、上記機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号とを、第３の命令格納手段に格納することを特徴とする請求項１に記載のデータ処理装置。
【請求項８】
第２の命令格納手段が第１の命令格納手段から取得したソースレジスタ番号とデスティネーションレジスタ番号との組のうちのソースレジスタ番号が、上記命令演算手段に演算結果を１サイクルで格納できないことが予想されるデスティネーションレジスタ番号に依存するとき、上記ソースレジスタ番号を指定するソースオペランドフィールドおよび上記デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序を、上記演算結果を１サイクルで格納できないことが予想されるデスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序より所定の順番だけ遅い順序に決定し、
上記決定した実行順序に応じた格納位置であって、空き情報が格納されている格納位置に、上記ソースレジスタ番号とデスティネーションレジスタ番号との組を格納することを特徴とする請求項１に記載のデータ処理装置。
【請求項９】
第１の命令格納手段が、１サイクルで実行可能な機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納することを特徴とする請求項１に記載のデータ処理装置。
【請求項１０】
機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を該機械語命令の実行順序に応じて管理し、実行が完了した機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を管理するリオーダバッファをさらに備えることを特徴とする請求項１に記載のデータ処理装置。
【請求項１１】
第１の命令格納手段をさらに複数備え、
第２の命令格納手段が、上記複数の第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を混在した状態で格納することを特徴とする請求項１に記載のデータ処理装置。
【請求項１２】
上記複数の第１の命令格納手段に格納される複数のソースレジスタ番号とデスティネーションレジスタ番号との組が第２の命令格納手段に格納可能な形式でないとき、第２の命令格納手段が、上記複数の第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を第２の命令格納手段に格納可能な形式に変換することを特徴とする請求項１に記載のデータ処理装置。
【請求項１３】
所定の演算に使用する値を格納するソースレジスタの番号を指定するソースオペランドフィールドと、該演算の結果を格納するデスティネーションレジスタの番号を指定するデスティネーションオペランドフィールドとを含む機械語命令を複数同時に解釈実行するデータ処理方法であって、
複数の上記機械語命令に含まれる、ソースオペランドフィールドより指定されるソースレジスタ番号とデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納する第１の命令格納ステップと、
第１の命令格納ステップにて格納した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を取得し、該ソースレジスタ番号を指定するソースオペランドフィールドおよび該デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序に応じた所定の格納位置に格納し、上記ソースレジスタ番号とデスティネーションレジスタ番号との組を格納しない格納位置には空き情報を格納する第２の命令格納ステップと、
第２の命令格納ステップにて格納した、実行順序が最も早い機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタの値と、該機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号とを格納する第３の命令格納ステップと、
第３の命令格納ステップにて格納した、ソースオペランドフィールドにより指定されるソースレジスタの値を取得して所定演算を行い、該演算結果を第３の命令格納ステップにて格納した、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号で指定されるレジスタに格納する、複数の命令演算ステップとを含み、
第２の命令格納ステップにて取得したソースオペランドフィールドにより指定されるソースレジスタ番号が、第２の命令格納ステップにて格納済みのデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号に依存するとき、上記ソースオペランドフィールドを含む機械語命令の実行順序を、上記デスティネーションオペランドフィールドを含む機械語命令の実行順序より遅い順序に決定し、上記決定した実行順序に応じた格納位置であって、上記空き情報が格納されている格納位置に、上記ソースオペランドフィールドにより指定されるソースレジスタ番号と、上記ソースオペランドフィールドを含む機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納することを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の機械語命令を高速に同時実行するためのデータ処理装置、データ処理方法に関するものである。
【背景技術】
【０００２】
近年の携帯端末機器や組み込みシステムでは、ＯＳ（operating system）などの命令レベル並列度を期待できないプログラムと、マルチメディア処理など高い命令レベル並列度を期待できるプログラムとを同時に実行することが一般化している。また、一般的に、ＯＳなどの制御プログラムには業界標準のプロセッサを用いる方が好ましく、一方、マルチメディア処理には並列処理性能の高い低電力プロセッサを用いる方が好ましい。したがって、同時に実行するプログラムは、必ずしも同一命令セットアーキテクチャに基づかないものとなってきている。
【０００３】
複数の命令を同時に実行する処理方式として、スーパスカラ方式が一般的である。図９を参照しながら、一般的なスーパスカラ方式のパイプライン構成について説明する。図９は、パイプラインの各ステージを示すブロック図である。図９に示すように、この例では、７つのステージを経て命令が実行される。
【０００４】
まず、ステージＳ１では、命令フェッチ（IF）を行う。すなわち、図示しない命令キャッシュから命令を取り出す。次にステージＳ２では、命令のデコード処理（HOST-D）を行う。すなわち、フェッチした命令のソースレジスタ番号およびデスティネーションレジスタ番号を取り出す。ここで、ソースレジスタとは、演算する値を格納しているレジスタである。また、デスティネーションレジスタとは演算結果を格納するレジスタである。
【０００５】
次に、ステージＳ３では、命令間の依存関係検査（MAP）を行う。すなわち、命令間のレジスタ依存関係を解消するため、論理レジスタから物理レジスタへのマッピング（レジスタリネーミング）を行う。
【０００６】
次に、ステージＳ４では命令の待ち合わせおよび命令発行（SEL/RD）を行う。次に、ステージＳ５では、ソースレジスタ値を演算器に投入し、演算を実行する。ここでは、演算器として、算術論理演算器（ALU）、シフト演算器（Shift）、アドレス演算器（Addr）、キャッシュ（Cache）の４種類を例に挙げている。なお、上記４種類の演算器に限られるものではない。例えば、さらに別の算術論理演算器を備えてもよい。
【０００７】
次に、ステージＳ６では、演算結果をレジスタに書き込む（WR）。そして最後に、ステージＳ７では、レジスタの更新（RETIRE）を行う。すなわち、命令の実行が完了したとき、マッピングした物理レジスタを解放し、また、論理レジスタを更新する。
（従来技術１）
次に、図１０を参照しながら、スーパスカラ方式により複数命令を同時実行する従来のデータ処理装置（非特許文献１から３参照）について説明する。図１０は、従来のデータ処理装置５００の構成を示すブロック図である。
【０００８】
ここで、データ処理装置５００は、一度に４つの命令を同時実行するものとして説明する。また、データ処理装置５００は、演算ユニットとして、算術論理演算器５８１（ALU）と、シフト演算器５８２（Shift）と、アドレス演算器５８３（Addr）と、キャッシュ５８４（Cache）とをそれぞれ１つずつ備えるものとする。また、上記４種類の演算器はいずれも３オペランド方式、すなわち、２つのソースレジスタにて指定される値を用いて演算を行い、演算結果をデスティネーションレジスタに格納するものとする。なお、４オペランド方式や５オペランド方式の演算については、３オペランド方式の演算に分解して実行すればよい。
【０００９】
図１０を参照しながら、データ処理装置５００が４つの命令を同時実行する処理の流れをステージ毎に説明する。なお、図１０では、命令フェッチ（IF）を行うステージ、命令のデコード処理（HOST-D）を行うステージ、および、レジスタの更新（RETIRE）を行うステージについては、図示を省略している。
【００１０】
まず、図１０に示す各ステージで行う処理概要を以下に示す。Renameステージ５０１では、命令間のレジスタ依存関係を解消する。次に、Readステージ５０２では、依存関係を解消した後の仮のレジスタ値を読み出す。そして、Dispatchステージ５０３では、所定の条件が満たされるまで命令を待機させるためのリザベーションステーション５５１へレジスタ値を登録する。そして最後に、Executeステージ５０４では、リザベーションステーション５５１から各演算器にレジスタ値を投入し、演算を実行する。
【００１１】
次に、図１０に示す各ステージで行う処理の詳細を以下に示す。Renameステージ５０１では、命令間のレジスタ依存関係を解消する。そのために、まず、依存関係検査部５１５が、デコード部５１０がデコードした各命令のソースレジスタ番号およびデスティネーションレジスタ番号の組を入力し、命令間のレジスタ依存関係を解消する処理を行う。そして、依存関係を解消したソースレジスタ番号およびデスティネーションレジスタ番号の組を出力する。この例では、命令毎に、２つのソースレジスタ番号（s）およびデスティネーションレジスタ番号（d）の組５１１、５１２、５１３、５１４を、依存関係検査部５１５に入力している。そして、依存関係検査部５１５は、それぞれに対してレジスタ依存関係を解消した後のソースレジスタ番号（S）およびデスティネーションレジスタ番号（D）の組５１６、５１７、５１８、５１９を出力する。
【００１２】
次に、Readステージ５０２では、一度に８つのレジスタ読み出しを行う。すなわち、上記依存関係を解消した組５１６、５１７、５１８、５１９の２つのソースレジスタ（S）の値５４１〜５４４を、入力待ちレジスタ５３６を経由して読み出す。
【００１３】
次に、Dispatchステージ５０３では、各命令のソースレジスタ番号（S）、上記読み出したソースレジスタ値５４１〜５４４、および、デスティネーションレジスタ番号（D）を、キューであるリザベーションステーション５５１に登録する。ここで、リザベーションステーション５５１は、演算器（算術論理演算器５８１、シフト演算器５８２、アドレス演算器５８３、キャッシュ５８４）ごとに設けられている。また、ここでは、リザベーションステーション５５１のエントリ数は４としている。すなわち、リザベーションステーション５５１は、演算器毎に４つの命令を待機させることができる。なお、エントリ数は４に限定されるものではなく、４より多くてもよいし、４より少なくてもよい。
【００１４】
また、リザベーションステーション５５１に登録されるソースレジスタ番号のそれぞれには、先行命令の演算結果が格納されるパイプラインレジスタ５８５〜５８８からの信号を受け取るフォワーディング５９０が設けられている。フォワーディング５９０は、リザベーションステーション５５１に待機しているソースレジスタ番号と、先行命令の演算結果が格納されるパイプラインレジスタ５８５〜５８８のレジスタ番号とを比較するために用いられる。それらを比較した結果、それらの番号が一致すれば、待機している命令が使用するソースレジスタをデスティネーションレジスタとして使用した先行命令の演算が完了したことを意味する。この場合、例えば、そのソースレジスタの値を演算器に投入可能である旨のフラグ（例えば「1」）を立てる。
【００１５】
そして、Executeステージ５０４では、リザベーションステーション５５１に待機している２つのソースレジスタのいずれにもフラグ「1」が立ったとき、該待機している２つのソースレジスタ値を演算器に投入し、演算を実行する。そのために、リザベーションステーション５５１内の全てのエントリから演算器に対して配線が設けられている。
【００１６】
そして、演算器での演算結果をパイプラインレジスタ５８５〜５８８に書き込むと同時に、フォワーディング５９０を介して、リザベーションステーション５５１に待機している全てのソースレジスタに対して送信する。また同時に、演算結果を入力待ちレジスタ５３６に格納し、Readステージ５０２での読み出し対象とする。
（従来技術２）
次に、図１１を参照しながら、スーパスカラ方式により複数命令を同時実行する、他の従来のデータ処理装置（非特許文献４参照）について説明する。図１１は、他の従来のデータ処理装置５０５の構成を示すブロック図である。
【００１７】
ここで、データ処理装置５０５は、一度に４つの命令を同時実行するものとして説明する。また、データ処理装置５０５は、演算ユニットとして、算術論理演算器５８１（ALU）と、シフト演算器５８２（Shift）と、アドレス演算器５８３（Addr）と、キャッシュ５８４（Cache）とをそれぞれ１つずつ備えるものとする。また、上記４種類の演算器はいずれも３オペランド方式、すなわち、２つのソースレジスタにて指定される値を用いて演算を行い、演算結果をデスティネーションレジスタに格納するものとする。なお、４オペランド方式や５オペランド方式の演算については、３オペランド方式の演算に分解してから実行すればよい。
【００１８】
図１１を参照しながら、データ処理装置５０５が４つの命令を同時実行する処理の流れをステージ毎に説明する。なお、図１１では、命令フェッチ（IF）を行うステージ、命令のデコード処理（HOST-D）を行うステージ、および、レジスタの更新（RETIRE）を行うステージについては、図示を省略している。
【００１９】
まず、図１１に示す各ステージで行う処理概要を以下に示す。Renameステージ５０６では、命令間のレジスタ依存関係を解消して命令ウィンドウに登録する。次に、Select＆Readステージ５０７では、命令ウィンドウから確定した命令を取り出す。そして、最後に、Executeステージ５０８では演算を実行する。
【００２０】
次に、図１１に示す各ステージで行う処理の詳細を以下に示す。Renameステージ５０６では、Renameステージ５０１と同様の処理を行い、命令間のレジスタ依存関係を解消する。この例では、４つの命令毎に、２つのソースレジスタ番号（s）およびデスティネーションレジスタ番号（d）の組５１１、５１２、５１３、５１４を、依存関係検査部５１５に入力している。そして、依存関係検査部５１５は、それぞれに対してレジスタ依存関係を解消した後のソースレジスタ番号（S）およびデスティネーションレジスタ番号（D）の組を命令ウィンドウ５２０に登録する。
【００２１】
命令ウィンドウ５２０は、所定の条件が満たされるまで命令の発行を待つためのキューであり、依存関係を解消した後のソースレジスタ番号（S）およびデスティネーションレジスタ番号（D）の組を登録して待機させる。なお、図１０におけるリザベーションステーション５５１とは異なり、レジスタの値は登録しない。また、ここでは、命令ウィンドウ５２０のエントリ数は４としている。すなわち、命令ウィンドウ５２０は、１６の命令を登録することができる。なお、エントリ数は４に限定されるものではなく、４より多くてもよいし、４より少なくてもよい。
【００２２】
また、命令ウィンドウ５２０に登録される２つのソースレジスタのそれぞれには、先行命令の演算結果が格納されるパイプラインレジスタ５８５〜５８８と、および、次サイクルで演算が実行される命令のデスティネーションレジスタ番号５４５〜５４８を接続するタグアップデート（TagUpdate）５９１が設けられている。
【００２３】
タグアップデート５９１は、まず、命令ウィンドウ５２０に待機している命令のソースレジスタ番号と、先行命令の演算結果が格納されるパイプラインレジスタ５８５〜５８８のレジスタ番号とを比較するために用いられる。それらを比較した結果、それらの番号が一致すれば、待機している命令が使用するソースレジスタをデスティネーションレジスタとして使用した先行命令の演算が完了していることを意味する。この場合、そのソースレジスタの値を演算器に投入可能である旨のフラグ（例えば「1」）を立てる。
【００２４】
さらに、タグアップデート５９１は、命令ウィンドウ５２０に待機している命令のソースレジスタ番号と、次サイクルで演算が実行される命令のデスティネーションレジスタ番号５４５〜５４８とを比較するために用いられる。それらを比較した結果、それらの番号が一致すれば、待機している命令が使用するソースレジスタをデスティネーションレジスタとして使用する命令が次サイクルで実行されることを意味する。この場合、そのソースレジスタの値を演算器に投入可能である旨のフラグ（例えば「1」）を立てる。
【００２５】
そして、Select＆Readステージ５０７では、命令ウィンドウ５２０に待機しているソースレジスタ番号のうち、２つのソースレジスタのいずれにも上記フラグ「1」が立っているものを取り出す。そして、上記取り出したソースレジスタ番号に対応するレジスタ値として、１）入力待ちレジスタ５３６に格納されている先行命令の演算結果、または、２）パイプラインレジスタ５８５〜５８８に格納されている演算結果のうちいずれかを選択し、次サイクルで演算が実行される命令のソースレジスタ値５５１〜５５４とする。
【００２６】
次に、Executeステージ５０８では、入力待ちレジスタ５３６に格納されている値を演算器に投入し、演算を実行する。そして、その演算結果を、パイプラインレジスタ５８５〜５８８に書き込む。そして、次サイクルで、タグアップデート５９１を介して、命令ウィンドウ５２０に待機している全てのソースレジスタ番号に対して送信する。また同時に、演算結果を入力待ちレジスタ５３６に格納し、Select＆Readステージ５０７での読み出し対象とする。
【００２７】
なお、入力待ちレジスタ５３６に格納されている値を基に、命令ウィンドウ５２０からどの命令を取り出すこと、および、バイパス５９２を備えることにより次サイクルを待たずに演算結果が得られることにより、後続命令が先行命令の実行の完了を待つ必要がなくなる。したがって、１サイクルで演算が完了する先行命令と後続命令との間に、レジスタ依存関係が存在するときであっても、先行命令を実行したサイクルの次のサイクルで後続命令を実行することが可能となる。
【非特許文献１】David B. Papworth，"Tuning the Pentium Pro microarchitecture"，IEEE Micro，Vol.16，No.2，p.8-15(1996)
【非特許文献２】L. Gwennap，"Intel's P6 Uses Decoupled Superscalar Design"，Microprocessor Report，Vol.9，Np.2，p.9-15(1995)
【非特許文献３】Glenn Hinton，Dave Sager，Mike Upton，Darrell Boggs，Doug Carmean，Alan Kyker，Patrice Roussel，"The Microarchitecture of the Pentium4 Processor"，Intel Technology Journal，Q1(2001)
【非特許文献４】中島康彦，「ＡＲＭアーキテクチャ向け命令分解型スーパスカラ」，信学技報，電子情報処理学会，２００６年６月，２００６―ＡＲＣ―１６８，ｐ.７７−８２
【発明の開示】
【発明が解決しようとする課題】
【００２８】
上記で説明したように、非特許文献１から４に開示されているデータ処理装置は、複数命令を同時実行することができる。しかしながら、非特許文献１から３に開示されているデータ処理装置では、Executeステージ５０４において、リザベーションステーション５５１から発行可能な命令を選択するための遅延時間が大きい。
【００２９】
すなわち、演算結果をパイプラインレジスタ５８５〜５８８に書き込むと同時に、フォワーディング５９０を介して、演算結果をリザベーションステーション５５１に待機している命令の全てのソースレジスタに対して送信する。そして、リザベーションステーション５５１に待機しているソースレジスタ番号と、先行命令の演算結果が格納されるパイプラインレジスタ５８５〜５８８のレジスタ番号との比較を行い、演算器に投入可能な命令を選択する。
【００３０】
以上のように、１サイクルで実行しなければならない処理が多いため、データ処理装置全体の動作周波数を向上させることができないという問題がある。
【００３１】
また、リザベーションステーション５５１の全てのエントリが、２つのソースレジスタの番号と値、およびデスティネーションレジスタ番号を保持する構成となっている。例えば、ソースレジスタ番号およびデスティネーションレジスタ番号がそれぞれ５ビット長、ソースレジスタ値が３２ビット長とする。リザベーションステーション５５１に待機可能なソースレジスタ番号およびデスティネーションレジスタ番号は合計４８個あり、ソースレジスタ値は合計３２個あるので、リザベーションステーション５５１の記憶領域は、少なくとも１２６４ビット（５ビット×４８個＋３２ビット×３２個）以上必要となる。
【００３２】
さらに、フォワーディング５９０は、リザベーションステーション５５１に待機している命令の全てのソースレジスタ値に対して送信する。すなわち、フォワーディング５９０の信号線は、１０２４本（３２ビット×３２個）必要となる。
【００３３】
以上のように、リザベーションステーション５５１の記憶領域が大きくなるという問題、および、フォワーディング５９０の信号数が多くなるという問題がある。
【００３４】
さらに、リザベーションステーション５５１は、サイクル毎に演算結果をフォワーディング５９０を介して受信する構成となっている。したがって、これにより電力消費が大きくなるという問題がある。
【００３５】
次に、非特許文献４に開示されているデータ処理装置では、リザベーションステーションやフォワーディングが存在しないため、Executeステージ５０８の構成が簡素化されており、Executeステージ５０８における処理負荷が軽減されている。しかし、その代わりに、Select＆Readステージ５０７では、命令ウィンドウ５２０の任意の位置から発行可能な命令を選択すると同時に、該選択した命令におけるレジスタ指定フィールドを用いたレジスタ読み出しを１サイクルで完了させる。このため、Select＆Readステージ５０７での処理の遅延時間が大きく、データ処理装置全体の動作周波数を向上させることができないという問題がある。
【００３６】
以上のように、リザベーションステーションや命令ウィンドウなどの命令発行機構や、フォワーディングによって命令レベル並列度の向上を図る従来のデータ処理装置では、演算器周辺の回路の構成が複雑となり、装置全体の動作周波数を向上させることができない、または、消費電力を抑えることができないという問題があった。
【００３７】
本発明は、上記の問題点に鑑みてなされたものであり、その目的は、従来よりも動作周波数を向上させることが可能であり、また、消費電力を抑えることが可能である、複数の機械語命令を高速に同時実行可能なデータ処理装置、データ処理方法を提供することにある。
【課題を解決するための手段】
【００３８】
上記課題を解決するために、本発明に係るデータ処理装置は、所定の演算に使用する値を格納するソースレジスタの番号を指定するソースオペランドフィールドと、該演算の結果を格納するデスティネーションレジスタの番号を指定するデスティネーションオペランドフィールドとを含む機械語命令を複数同時に解釈実行するデータ処理装置であって、複数の上記機械語命令に含まれる、ソースオペランドフィールドより指定されるソースレジスタ番号とデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納する第１の命令格納手段と、第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を、該ソースレジスタ番号を指定するソースオペランドフィールドおよび該デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序に応じた所定の格納位置に格納し、上記ソースレジスタ番号とデスティネーションレジスタ番号との組を格納しない格納位置には空き情報を格納する第２の命令格納手段と、第２の命令格納手段に格納されている、実行順序が最も早い機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタの値と、該機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号とを格納する第３の命令格納手段と、第３の命令格納手段から取得したソースレジスタの値を基に所定演算を行い、該演算結果を第３の命令格納手段から取得したデスティネーションレジスタ番号で指定されるレジスタに格納する、複数の命令演算手段とを備え、第１の命令格納手段から取得したソースレジスタ番号が、第２の命令格納手段に格納済みのデスティネーションレジスタ番号に依存するとき、第２の命令格納手段が、上記ソースレジスタ番号を指定するソースオペランドフィールドを含む機械語命令の実行順序を、上記デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序より遅い順序に決定し、上記決定した実行順序に応じた格納位置であって、上記空き情報が格納されている格納位置に、上記ソースオペランドフィールドにより指定されるソースレジスタ番号と、上記ソースオペランドフィールドを含む機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納することを特徴としている。
【００３９】
また、本発明に係るデータ処理方法は、所定の演算に使用する値を格納するソースレジスタの番号を指定するソースオペランドフィールドと、該演算の結果を格納するデスティネーションレジスタの番号を指定するデスティネーションオペランドフィールドとを含む機械語命令を複数同時に解釈実行するデータ処理方法であって、複数の上記機械語命令に含まれる、ソースオペランドフィールドより指定されるソースレジスタ番号とデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納する第１の命令格納ステップと、第１の命令格納ステップにて格納した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を取得し、該ソースレジスタ番号を指定するソースオペランドフィールドおよび該デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序に応じた所定の格納位置に格納し、上記ソースレジスタ番号とデスティネーションレジスタ番号との組を格納しない格納位置には空き情報を格納する第２の命令格納ステップと、第２の命令格納ステップにて格納した、実行順序が最も早い機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタの値と、該機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号とを格納する第３の命令格納ステップと、第３の命令格納ステップにて格納した、ソースオペランドフィールドにより指定されるソースレジスタの値を取得して所定演算を行い、該演算結果を第３の命令格納ステップにて格納した、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号で指定されるレジスタに格納する、複数の命令演算ステップとを含み、第２の命令格納ステップにて取得したソースオペランドフィールドにより指定されるソースレジスタ番号が、第２の命令格納ステップにて格納済みのデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号に依存するとき、上記ソースオペランドフィールドを含む機械語命令の実行順序を、上記デスティネーションオペランドフィールドを含む機械語命令の実行順序より遅い順序に決定し、上記決定した実行順序に応じた格納位置であって、上記空き情報が格納されている格納位置に、上記ソースオペランドフィールドにより指定されるソースレジスタ番号と、上記ソースオペランドフィールドを含む機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納することを特徴としている。
【００４０】
上記の構成によれば、第１の命令格納手段から取得したソースレジスタ番号が、第２の命令格納手段に格納済みのデスティネーションレジスタ番号に依存するとき、上記ソースレジスタ番号を指定するソースオペランドフィールドを含む機械語命令の実行順序を、上記デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序より遅い順序に決定する。そして、上記ソースレジスタ番号と、上記ソースレジスタ番号とともに第１の命令格納手段から取得したデスティネーションレジスタ番号との組を実行順序に応じた格納位置に格納する。
【００４１】
さらに、実行順序が最も早い機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタの値を基に所定演算を行い、該機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号で指定されるレジスタに演算結果を格納する。
【００４２】
よって、依存関係がある機械語命令を実行順序に従って取り出せるように、該機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を第２の命令格納手段に格納することができる。そして、実行順序が最も早い機械語命令のみを発行することができる。
【００４３】
したがって、上記データ処理装置は、任意の格納位置から機械語命令を選択して発行する構成ではないため、命令実行処理の遅延時間を抑えることができ、データ処理装置全体の動作周波数を向上させることができるという効果を奏する。
【００４４】
また、レジスタ番号のみを第２の命令格納手段に格納するので、記憶領域のサイズを抑えることができるという効果を奏する。
【００４５】
さらに、本発明に係るデータ処理装置は、上記の構成において、第２の命令格納手段が、格納するソースレジスタ番号ごとに、該ソースレジスタの値を命令演算手段への投入可否を示す投入可否情報を備え、第２の命令格納手段に格納された、実行順序が最も早い機械語命令に含まれるソースオペランドにより指定されるソースレジスタ番号の投入可否情報の全てが投入可であるとき、該ソースレジスタの値を取得し、第３の命令格納手段に格納する構成としてもよい。
【００４６】
上記の構成によれば、さらに、機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタ番号ごとに、該ソースレジスタの値を命令演算手段への投入可否を示す投入可否情報を備える。
【００４７】
よって、機械語命令に含まれる全てのソースオペランドにより指定されるソースレジスタ番号の投入可否情報を確認することにより、該機械語命令が発行可能かどうかを判定することができる。
【００４８】
したがって、実行順序が最も早い機械語命令が、発行可能となったことを判定した上で、命令演算手段へ投入することができるという効果を奏する。
【００４９】
さらに、本発明に係るデータ処理装置は、上記の構成において、第１の命令格納手段から取得したソースレジスタ番号が、第２の命令格納手段に格納済みのデスティネーションレジスタ番号に依存するとき、第２の命令格納手段が、上記ソースレジスタ番号の投入可否情報を投入不可と設定し、第２の命令格納手段が、第２の命令格納手段に格納済みの、実行順序が最も早い機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタの値を取得して第３の命令格納手段に格納するとき、該機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号と、上記投入可否情報を投入不可と設定したソースレジスタ番号とを比較し、上記デスティネーションレジスタ番号と上記ソースレジスタ番号とが一致するとき、上記ソースレジスタ番号の投入可否情報を投入可と設定する構成としてもよい。
【００５０】
上記の構成によれば、さらに、第２の命令格納手段に格納済みの、実行順序が最も早い機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタの値を第３の命令格納手段に格納するとき、該機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号と一致するソースレジスタ番号の投入可否情報を投入可と設定する。
【００５１】
よって、実行順序が最も早い機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタの値を第３の命令格納手段に格納するとき、同時に、該機械語命令に依存する機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタ番号の投入可否情報を投入可と設定することができる。
【００５２】
したがって、先行する機械語命令が次サイクルで実行されることを認識することができ、それにより、該先行する機械語命令に依存する後続の機械語命令を次サイクルで発行することができる。すなわち、先行する機械語命令の実行を待たずに、該先行する機械語命令に依存する後続の機械語命令を発行することができるので、データ処理装置全体の動作周波数を向上させることができるという効果を奏する。
【００５３】
さらに、本発明に係るデータ処理装置は、上記の構成において、上記命令演算手段が第３の命令格納手段から取得したデスティネーションレジスタ番号で指定されるレジスタに演算結果を格納したとき、上記デスティネーションレジスタ番号と、第２の命令格納手段に格納済みのソースレジスタ番号とを比較し、上記デスティネーションレジスタ番号と上記ソースレジスタ番号とが一致するとき、上記ソースレジスタ番号の投入可否情報を投入可と設定する構成としてもよい。
【００５４】
上記の構成によれば、さらに、命令演算手段が機械語命令の演算結果を格納した、該機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号と一致する、第２の命令格納手段に格納済みのソースレジスタ番号の投入可否情報を投入可と設定する。
【００５５】
よって、命令演算手段が機械語命令の演算を完了すると同時に、該機械語命令の演算結果を使用する機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタ番号を第３の命令格納手段に登録することができる。
【００５６】
したがって、先行する機械語命令の実行結果を次サイクルで取得する前に、該先行する機械語命令に依存する後続の機械語命令を発行することができるため、データ処理装置全体の動作周波数を向上させることができるという効果を奏する。
【００５７】
さらに、本発明に係るデータ処理装置は、上記の構成において、第１の命令格納手段から複数のソースレジスタ番号とデスティネーションレジスタ番号との組を取得し、上記ソースレジスタ番号と上記デスティネーションレジスタ番号との間の依存関係を解消する依存関係解消手段をさらに備え、第２の命令格納手段が、上記依存関係解消手段から、依存関係を解消した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を取得する構成としてもよい。
【００５８】
上記の構成によれば、さらに、依存関係解消手段が、複数の機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との依存関係を解消する。
【００５９】
よって、複数の機械語命令間の依存関係を解消することができる。
【００６０】
したがって、複数の機械語命令を同時に実行することができるという効果を奏する。
【００６１】
さらに、本発明に係るデータ処理装置は、上記の構成において、第２の命令格納手段が、第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を格納するとき、上記依存関係解消手段から取得したソースレジスタ番号とデスティネーションレジスタ番号との間の依存関係を基に、上記複数の組に含まれるソースレジスタ番号を指定するソースオペランドフィールドおよびデスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序を決定し、上記決定した実行順序に応じた格納位置であって、上記空き情報が格納されている格納位置に，上記複数のソースレジスタ番号とデスティネーションレジスタ番号との組を格納する新規命令登録制御手段をさらに備える構成としてもよい。
【００６２】
上記の構成によれば、さらに、新規命令登録制御手段が、上記依存関係解消手段から取得したソースレジスタ番号とデスティネーションレジスタ番号との間の依存関係を基に、決定した実行順序に応じた格納位置に、第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を第２の命令格納手段に格納する。
【００６３】
よって、新たに第２の命令格納手段に格納する複数のソースレジスタ番号とデスティネーションレジスタ番号との組の依存関係を考慮して、上記ソースレジスタ番号とデスティネーションレジスタ番号との組を第２の命令格納手段に格納することができる。
【００６４】
したがって、新たに待機させる機械語命令間の依存関係を考慮して機械語命令の適切な実行順序を決定することができるという効果を奏する。
【００６５】
さらに、本発明に係るデータ処理装置は、上記の構成において、上記命令演算手段における演算結果を１サイクルでレジスタに格納できなかったときであっても、第２の命令格納手段に格納される、実行順序が最も早い機械語命令に含まれるソースオペランドにより指定されるソースレジスタ番号の投入可否情報の全てが投入可であって、上記ソースレジスタ番号のいずれもが、上記演算結果を格納できなかったデスティネーションレジスタ番号に依存しないとき、上記ソースレジスタの値と、上記機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号とを、第３の命令格納手段に格納する構成としてもよい。
【００６６】
上記の構成によれば、さらに、演算結果をレジスタに格納できないなどの実行遅延があった先行する機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号と一致しないソースレジスタ番号を指定するソースオペランドを含む、後続の機械語命令に含まれる全てのソースオペランドにより指定されるソースレジスタ番号の投入可否情報が投入可であれば、上記ソースレジスタの値と、上記後続の機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号とを、第３の命令格納手段に格納する。
【００６７】
よって、先行する機械語命令に依存しない後続の機械語命令を、先行する機械語命令の実行遅延に関わらず、発行することができる。
【００６８】
したがって、先行する機械語命令に実行遅延があった場合でも、先行の機械語命令に依存しない後続の機械語命令を引き続き実行することができるという効果を奏する。
【００６９】
さらに、本発明に係るデータ処理装置は、上記の構成において、第２の命令格納手段が第１の命令格納手段から取得したソースレジスタ番号とデスティネーションレジスタ番号との組のうちのソースレジスタ番号が、上記命令演算手段にて演算結果を１サイクルで格納できないことが予想されるデスティネーションレジスタ番号に依存するとき、上記ソースレジスタ番号を指定するソースオペランドフィールドおよび上記デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序を、上記演算結果を１サイクルで格納できないことが予想されるデスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序より所定の順番だけ遅い順序に決定し、上記決定した実行順序に応じた格納位置であって、空き情報が格納されている格納位置に、上記ソースレジスタ番号とデスティネーションレジスタ番号との組を格納する構成としてもよい。
【００７０】
上記の構成によれば、さらに、演算結果をレジスタに格納できないなどの実行遅延があった先行する機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号と一致するソースレジスタ番号を指定するソースオペランドを含む後続の機械語命令の実行順序を、上記先行する機械語命令の実行順序より所定の順番だけ遅い実行順序とする。
【００７１】
よって、実行遅延があった先行する機械語命令に依存する後続の機械語命令の発行を、他の後続命令よりも一定期間遅らせることができる。
【００７２】
したがって、先行する機械語命令に実行遅延があった場合でも、後続の機械語命令の実行を即時に中断させないようにすることができるという効果を奏する。
【００７３】
さらに、本発明に係るデータ処理装置は、上記の構成において、第１の命令格納手段が、１サイクルで実行可能な機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納する構成としてもよい。
【００７４】
上記の構成によれば、さらに、１サイクルで実行可能な機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組が第１の命令格納手段に格納される。
【００７５】
よって、命令演算手段は確実に１サイクルで命令の実行を完了することができる。
【００７６】
したがって、先行する上記機械語命令の実行完了を待たずに該先行する機械語命令に依存する後続の機械語命令を発行することが、確実に実行できるという効果を奏する。
【００７７】
さらに、本発明に係るデータ処理装置は、上記の構成において、機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を該機械語命令の実行順序に応じて管理し、実行が完了した機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を管理するリオーダバッファをさらに備える構成としてもよい。
【００７８】
上記の構成によれば、さらに、リオーダバッファにより、機械語命令の実行順序に応じて管理し、また、実行が完了した機械語命令を管理する。
【００７９】
よって、先行する機械語命令に実行遅延が生じた場合、該先行する機械語命令の演算結果を使用する機械語命令の実行順序を、リオーダバッファを使用して変更することができる。
【００８０】
したがって、機械語命令の実行順序を保証することができるという効果を奏する。
【００８１】
さらに、本発明に係るデータ処理装置は、上記の構成において、第１の命令格納手段をさらに複数備え、第２の命令格納手段が、上記複数の第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を混在した状態で格納する構成としてもよい。
【００８２】
上記の構成によれば、さらに、複数の第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を混在した状態で第２の命令格納手段に格納する。
【００８３】
よって、複数の第１の命令格納手段に、互いに異なる命令流（連続して実行する一連の命令群）を構成する機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組が格納されている場合、それらを混在して第２の命令格納手段に格納することができる。
【００８４】
したがって、互いに異なる複数の命令流を混在して実行することができるという効果を奏する。
【００８５】
さらに、本発明に係るデータ処理装置は、上記の構成において、上記複数の第１の命令格納手段に格納される複数のソースレジスタ番号とデスティネーションレジスタ番号との組が第２の命令格納手段に格納可能な形式でないとき、第２の命令格納手段が、上記複数の第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を第２の命令格納手段に格納可能な形式に変換する構成としてもよい。
【００８６】
上記の構成によれば、さらに、第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を第２の命令格納手段に格納可能な形式に変換する。
【００８７】
よって、複数の第１の命令格納手段に、互いに異なる命令セットに準拠する命令流を構成する機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組が格納されている場合でも、それらを混在して第２の命令格納手段に格納することができる。
【００８８】
したがって、異なる命令セットに準拠する複数の命令流を混在して実行することができるという効果を奏する。
【発明の効果】
【００８９】
以上のように、本発明に係るデータ処理装置は、所定の演算に使用する値を格納するソースレジスタの番号を指定するソースオペランドフィールドと、該演算の結果を格納するデスティネーションレジスタの番号を指定するデスティネーションオペランドフィールドとを含む機械語命令を複数同時に解釈実行するデータ処理装置であって、複数の上記機械語命令に含まれる、ソースオペランドフィールドより指定されるソースレジスタ番号とデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納する第１の命令格納手段と、第１の命令格納手段から取得した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を、該ソースレジスタ番号を指定するソースオペランドフィールドおよび該デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序に応じた所定の格納位置に格納し、上記ソースレジスタ番号とデスティネーションレジスタ番号との組を格納しない格納位置には空き情報を格納する第２の命令格納手段と、第２の命令格納手段に格納されている、実行順序が最も早い機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタの値と、該機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号とを格納する第３の命令格納手段と、第３の命令格納手段から取得したソースレジスタの値を基に所定演算を行い、該演算結果を第３の命令格納手段から取得したデスティネーションレジスタ番号で指定されるレジスタに格納する、複数の命令演算手段とを備え、第１の命令格納手段から取得したソースレジスタ番号が、第２の命令格納手段に格納済みのデスティネーションレジスタ番号に依存するとき、第２の命令格納手段が、上記ソースレジスタ番号を指定するソースオペランドフィールドを含む機械語命令の実行順序を、上記デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序より遅い順序に決定し、上記決定した実行順序に応じた格納位置であって、上記空き情報が格納されている格納位置に、上記ソースオペランドフィールドにより指定されるソースレジスタ番号と、上記ソースオペランドフィールドを含む機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納する。
【００９０】
また、本発明に係るデータ処理方法は、所定の演算に使用する値を格納するソースレジスタの番号を指定するソースオペランドフィールドと、該演算の結果を格納するデスティネーションレジスタの番号を指定するデスティネーションオペランドフィールドとを含む機械語命令を複数同時に解釈実行するデータ処理方法であって、複数の上記機械語命令に含まれる、ソースオペランドフィールドより指定されるソースレジスタ番号とデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納する第１の命令格納ステップと、第１の命令格納ステップにて格納した複数のソースレジスタ番号とデスティネーションレジスタ番号との組を取得し、該ソースレジスタ番号を指定するソースオペランドフィールドおよび該デスティネーションレジスタ番号を指定するデスティネーションオペランドフィールドを含む機械語命令の実行順序に応じた所定の格納位置に格納し、上記ソースレジスタ番号とデスティネーションレジスタ番号との組を格納しない格納位置には空き情報を格納する第２の命令格納ステップと、第２の命令格納ステップにて格納した、実行順序が最も早い機械語命令に含まれるソースオペランドフィールドにより指定されるソースレジスタの値と、該機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号とを格納する第３の命令格納ステップと、第３の命令格納ステップにて格納した、ソースオペランドフィールドにより指定されるソースレジスタの値を取得して所定演算を行い、該演算結果を第３の命令格納ステップにて格納した、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号で指定されるレジスタに格納する、複数の命令演算ステップとを含み、第２の命令格納ステップにて取得したソースオペランドフィールドにより指定されるソースレジスタ番号が、第２の命令格納ステップにて格納済みのデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号に依存するとき、上記ソースオペランドフィールドを含む機械語命令の実行順序を、上記デスティネーションオペランドフィールドを含む機械語命令の実行順序より遅い順序に決定し、上記決定した実行順序に応じた格納位置であって、上記空き情報が格納されている格納位置に、上記ソースオペランドフィールドにより指定されるソースレジスタ番号と、上記ソースオペランドフィールドを含む機械語命令に含まれるデスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を格納する。
【００９１】
よって、依存関係がある機械語命令を実行順序に従って取り出せるように、該機械語命令に含まれるソースオペランドフィールドより指定されるソースレジスタ番号と、デスティネーションオペランドフィールドにより指定されるデスティネーションレジスタ番号との組を第２の命令格納手段に格納することができる。そして、実行順序が最も早い機械語命令のみを発行することができる。
【００９２】
したがって、上記データ処理装置は、任意の格納位置から機械語命令を選択して発行する構成ではないため、命令実行処理の遅延時間を抑えることができ、データ処理装置全体の動作周波数を向上させることができるという効果を奏する。
【００９３】
また、レジスタ番号のみを第２の命令格納手段に格納するので、記憶領域のサイズを抑えることができるという効果を奏する。
【発明を実施するための最良の形態】
【００９４】
実施の形態において、具体例を挙げて説明する場合、実施の形態に係るデータ処理装置は、４つの命令を同時実行する処理が処理する形態について説明する。もちろん、実施の形態に係るデータ処理装置が同時実行する命令の数は４つに限られるものではなく、４つより多くてもよいし、４つより少なくてもよい。
【００９５】
また、実施の形態において、具体例を挙げて説明する場合、実施の形態に係るデータ処理装置は、３オペランド方式の命令、すなわち、２つのソースレジスタにて指定される値を用いて演算を行った結果を１つのデスティネーションレジスタに格納する命令を処理する形態について説明する。
【００９６】
本発明の一実施形態に係るデータ処理装置について図１から図８に基づいて説明すると以下の通りである。
【００９７】
図１を参照しながら、本実施形態に係るデータ処理装置１００について説明する。図１は、本実施形態に係るデータ処理装置１００の構成を示すブロック図である。
【００９８】
データ処理装置１００は、いくつかのステージを経て命令を実行する。すなわち、まず、命令フェッチ（IF）および命令のデコード（HOST-D）を行った後（図示せず）、Rename＆Scheduleステージ１０１で、命令間のレジスタ依存関係を解消した命令をキューに登録する。次に、Dispatch＆Readステージ１０２では、キューから適切な命令を取り出す。そして、Executeステージ１０３では演算を実行する。そして最後に、レジスタの更新（RETIRE）を行う（図示せず）。
【００９９】
次に、データ処理装置１００の構成について説明する。図１に示すように、データ処理装置１００は、デコード部１１０、デコード記憶部１２０、依存関係検査部１３０、ＶＬＩＷ命令キュー１４０、リオーダバッファ１５０、入力待ちレジスタ１７０、演算器１８０、演算結果格納部１９１〜１９４、バイパス１９５、タグアップデート１９６、レジスタ書き込み１９７、キャッシュミス発生管理部１９８、命令登録遅延部１９９を備えて構成される。
【０１００】
デコード部１１０は、各命令のソースレジスタ番号およびデスティネーションレジスタ番号を一般的な手法によりデコード処理する。そして、デコード後の各命令のソースレジスタ番号（s）およびデスティネーションレジスタ番号（d）の組をデコード記憶部１２０に格納する。
【０１０１】
デコード記憶部１２０は、デコード部１１０がデコードした各命令のソースレジスタ番号（s）およびデスティネーションレジスタ番号（d）の組を保持する。すなわち、デコード記憶部１２０は、sとdとの組合せ１２１〜１２４を保持する。なお、後述するように、各命令は１サイクルで完了する単位に分解された状態で、デコード記憶部１２０に格納されていることが望ましい。
【０１０２】
依存関係検査部１３０は、デコード記憶部１２０に保持されているデコード後の各命令のソースレジスタ番号（s）およびデスティネーションレジスタ番号（d）の組を入力とし、一般的な手法により命令間のレジスタ依存関係を解消する。そして、依存関係解消後のソースレジスタ番号（S）およびデスティネーションレジスタ番号（D）の組を、後述するＶＬＩＷ命令キュー１４０に出力する。
【０１０３】
また、依存関係検査部１３０は、依存関係を解消した命令の実行順序を、後述するリオーダバッファ１５０に送信する
ＶＬＩＷ命令キュー１４０は、ＶＬＩＷ（very long instruction window）型のキューである。命令の依存関係解消後のソースレジスタ番号（S）およびデスティネーションレジスタ番号（D）の組を、後述する方法によりキューの適切な位置に登録する。そして、命令が発行可能な状態になるまで待機させる。
【０１０４】
ＶＬＩＷ命令キュー１４０は４つのキューを備えて構成される。そして、４つのキューは、それぞれ各演算器に投入される命令を登録する。すなわち、ＶＬＩＷ命令キュー１４０は、算術論理演算器１８１に投入される命令を登録するキュー１４１、シフト演算器１８２に投入される命令を登録するキュー１４２、アドレス演算器１８３に投入される命令を登録するキュー１４３、キャッシュ１８４に投入される命令を登録するキュー１４４を備えて構成される。ＶＬＩＷ命令キュー１４０の詳細な構成については後述する。
【０１０５】
なお、以下では、キュー１４１に新たに登録される命令を「命令Ａ」、キュー１４２に新たに登録される命令を「命令Ｂ」、キュー１４３に新たに登録される命令を「命令Ｃ」、キュー１４４に新たに登録される命令を「命令Ｄ」と称する。
【０１０６】
リオーダバッファ１５０は、命令の実行順序を保持する。また、どの命令まで実行が完了したかを記憶する。そのために、リオーダバッファ１５０は、依存関係検査部１３０から依存関係が解消された命令のレジスタ番号を受け取り、保持する。また、後述する演算結果格納部１９１〜１９４から演算結果を受け取り、実行が完了した旨をレジスタ番号ごとに管理する。なお、リオーダバッファ１５０は、キャッシュ１４０にてキャッシュミスが起こっても、実行順序が変更された場合であっても、論理的に正しい実行順序を保証するために用いる。
【０１０７】
入力待ちレジスタ１７０は、演算器１８０に投入するソースレジスタ、および、命令の演算結果を格納するレジスタである。そのために、ＶＬＩＷ命令キュー１４０内の後述するエントリ１４１〜１４４のソースレジスタ番号の出力が入力待ちレジスタ１７０に接続されている。そして、演算結果格納部１９１〜１９４の出力は後述するレジスタ書き込み１９７を介して、入力待ちレジスタ１７０に接続されている。
【０１０８】
なお、入力待ちレジスタ１７０を介して、次サイクルで演算が実行される命令のソースレジスタ値１７５〜１７８が出力される。
【０１０９】
演算器１８０は、４つの演算器を備えて構成される。すなわち、演算器１８０は、算術論理演算器１８１（ALU）と、シフト演算器１８２（Shift）と、アドレス演算器１８３（Addr）と、キャッシュ１８４（Cache）とを１つずつ備える。いずれの演算器も、３オペランド方式、すなわち、２つのソースレジスタにて指定される値を用いて演算を行い、演算結果を演算結果格納部１９０に格納する。なお、４オペランド方式や５オペランド方式の演算については、すべて３オペランド方式に分解して実行するものとする。
【０１１０】
なお、データ処理装置１００が備える演算器は、上記４種類の演算器に限られるものではない。例えば、さらに別の算術論理演算器等を備えてもよい。
【０１１１】
演算結果格納部１９１〜１９４は、演算器１８０が演算した結果を格納する。すなわち、演算結果格納部１９１は、算術論理演算器１８１が演算した結果を格納する。また、演算結果格納部１９２は、シフト演算器１８２が演算した結果を格納する。また、演算結果格納部１９３は、アドレス演算器１８３が演算した結果を格納する。また、演算結果格納部１９４は、キャッシュ１８４が演算した結果を格納する。
【０１１２】
バイパス１９５は、演算の結果を直後に実行する演算に使用するため、演算結果格納部１９１〜１９４を、算術論理演算器１８１、シフト演算器１８２、アドレス演算器１８３、キャッシュ１８４に接続する信号線である。
【０１１３】
タグアップデート１９６は、演算結果格納部１９１〜１９４、および、次サイクルで演算が実行される予定の命令のデスティネーションレジスタ番号１７１〜１７４をＶＬＩＷ命令キュー１４０に接続するための信号線である。
【０１１４】
そして、タグアップデート１９６を用いて、まず、ＶＬＩＷ命令キュー１４０に待機しているソースレジスタ番号と、先行命令の演算結果が格納される演算結果格納部１９１〜１９４のデスティネーションレジスタ番号とを比較する。それらを比較した結果、それらの番号が一致すれば、待機している命令が使用するソースレジスタをデスティネーションレジスタとして使用した先行命令の演算が完了したことを意味する。したがって、例えば、そのソースレジスタの値を演算器に発行可能である旨のフラグ（例えば「1」）を設定する。
【０１１５】
さらに、タグアップデート１９６を用いて、ＶＬＩＷ命令キュー１４０に待機している命令のソースレジスタ番号と、次サイクルで演算が実行される予定の命令のデスティネーションレジスタ番号１７１〜１７４とを比較する。それらを比較した結果、それらの番号が一致すれば、待機している命令が使用するソースレジスタをデスティネーションレジスタとして使用する命令が次サイクルで実行される予定であることを意味する。この場合、そのソースレジスタの値を演算器に投入可能である旨のフラグ（例えば「1」）を立てる。
【０１１６】
そして、ＶＬＩＷ命令キュー１４０に待機している命令のうち、２つのソースレジスタのいずれにも上記フラグ「1」が立っている命令を取り出す。そして、上記取り出したソースレジスタ番号に対応するレジスタ値として、１）入力待ちレジスタ１７０に格納されている先行命令の演算結果、または、２）後述するレジスタ書き込み１９７によってバイパスされている、デスティネーションレジスタ１９１〜１９４に格納されている演算結果のうちいずれかを選択し、次サイクルで演算が実行される命令のソースレジスタ値１７５〜１７８とする。なお、上記２）の演算結果が優先的に選択される。
【０１１７】
レジスタ書き込み１９７は、演算結果格納部１９１〜１９４の出力を接続するための信号線である。演算結果格納部１９１〜１９４に格納されている実行結果を入力待ちレジスタ１７０に書きこむため、および、書き込む前のサイクルで演算結果格納部１９１〜１９４に格納されている実行結果をバイパスするために使用する。
【０１１８】
キャッシュミス発生管理部１９８は、キャッシュ１８４にてキャッシュミスを発生させる命令を管理する。そして、キャッシュミスの発生頻度に基づき、キャッシュミスを発生させる可能性が高い命令を予想して、命令登録遅延部１９９に送信する。
【０１１９】
命令登録遅延部１９９は、キャッシュミス発生管理部１９８からキャッシュミスを発生させる可能性が高い命令を受け取る。これにより、該命令の演算結果を使用する命令の依存関係解消後のソースレジスタ番号（S）およびデスティネーションレジスタ番号（D）の組の、ＶＬＩＷ命令キュー１４０への登録を所定期間遅らせる。
【０１２０】
次に、図２を参照しながら、ＶＬＩＷ命令キュー１４０について詳細に説明する。図２は、ＶＬＩＷ命令キュー１４０の構成を示す模式的なブロック図である。
【０１２１】
上述したように、ＶＬＩＷ命令キュー１４０は、キュー１４１、キュー１４２、キュー１４３、キュー１４４を備えて構成される。
【０１２２】
キュー１４１〜１４４はそれぞれ、演算器に投入する予定の４つの命令を登録することができるように、４つのエントリを含んでいる。すなわち、例えば、キュー１４１は、エントリ１４１１〜１４１４を含んでいる。同様に、キュー１４２は、エントリ１４２１〜１４２４を含んでいる。同様に、キュー１４３は、エントリ１４３１〜１４３４を含んでいる。同様に、キュー１４４は、エントリ１４４１〜１４４４を含んでいる。なお、エントリは４つに限定されるものではなく、４つより多くてもよいし、４つより少なくてもよい。
【０１２３】
次に、各エントリは、レジスタ番号を保持するレジスタ保持部を３つ備える。具体的には、各エントリは、ソースレジスタ番号を保持するソースレジスタ保持部を２つ、および、デスティネーションレジスタ番号を保持するデスティネーションレジスタ保持部を１つ備えている。例えば、エントリ１４１１は、ソースレジスタ保持部１５１および１５５と、デスティネーションレジスタ保持部１５９とを備える。同様に、エントリ１４１２は、ソースレジスタ保持部１５２および１５６と、デスティネーションレジスタ保持部１６０とを備える。同様に、エントリ１４１３は、ソースレジスタ保持部１５３および１５７と、デスティネーションレジスタ保持部１６０とを備える。同様に、エントリ１４１４は、ソースレジスタ保持部１５４および１５８と、デスティネーションレジスタ保持部１６２とを備える。
【０１２４】
そして、依存関係検査部１３０から出力される依存関係解消後の命令が、後述する新規命令登録制御部３０１により決定されたエントリに登録される。すなわち、上記命令のソースレジスタ番号（S）およびデスティネーションレジスタ番号（D）が、上記決定されたエントリが備えるソースレジスタ保持部およびデスティネーションレジスタ保持部に登録される。
【０１２５】
そして、各エントリが保持する値は、後述するセレクタを介して、後段のエントリにシフトされる。例えば、エントリ１４１４が保持する命令が発行されてキュー１４１から出ていくと、エントリ１４１３が保持する値はセレクタを介してエントリ１４１４にシフトされ、エントリ１４１２が保持する値はセレクタを介してエントリ１４１３にシフトされ、エントリ１４１１が保持する値はセレクタを介してエントリ１４１２にシフトされる。エントリ１４１４のみが入力待ちレジスタ１７０に接続されており、エントリ１４１１〜１４１３は、入力待ちレジスタ１７０に接続されていない。従来のデータ処理装置５００におけるリザベーションステーション５５１内の全てのエントリから演算器に対して配線が設けられていたことと比較すると、データ処理装置１００内の配線が簡素化される。
【０１２６】
なお、最後段のエントリだけが入力待ちレジスタ１７０に接続されているので、新たに各エントリに登録された命令は、最後段のエントリ１４１４、１４２４、１４３４、１４４４に到達するまでは発行されない。
【０１２７】
次に、エントリ１４１４、１４２４、１４３４、１４４４はそれぞれ、保持している２つのソースレジスタ番号がそれぞれ演算器に発行可能であるかどうかを示すフラグを備える（図示せず）。例えば、演算器に発行可能であるとき、フラグの値を「1」に設定する。最初にエントリ１４１４、１４２４、１４３４、１４４４に登録されたときは、まだ演算器に発行可能ではないため、それぞれのフラグの値は「0」に設定する。そして、後述する所定条件を満たして演算器に発行可能となったとき、それぞれのフラグの値を「1」に設定する。そして、エントリに属する２つのソースレジスタ保持部が有するフラグの値がいずれも「1」となったとき、演算器に発行する。
【０１２８】
次に、上記フラグの値を「1」に設定する条件について説明する。エントリ１４１４、１４２４、１４３４、１４４４のそれぞれには、タグアップデート１９６が接続されており、タグアップデート１９６を介して、先行命令の演算結果が格納される演算結果格納部１９１〜１９４のデスティネーションレジスタ番号が入力される。そして、エントリ１４１４、１４２４、１４３４、１４４４が保持するソースレジスタ番号のいずれかと、演算結果格納部１９１〜１９４のデスティネーションレジスタ番号とを比較した結果、それらが一致すれば、上記ソースレジスタ番号をデスティネーションレジスタ番号として使用した先行命令の演算が完了したことを意味する。この場合、上記ソースレジスタ番号を使用する命令を入力待ちレジスタ１７０に登録してもよい。したがって、上記値が一致したソースレジスタ番号に対応するフラグの値を「1」に設定する。
【０１２９】
さらに、別の条件を満たした場合にも、上記フラグの値を「1」に設定するので、以下で説明する。
【０１３０】
先行命令の実行結果を書き込むデスティネーションレジスタ番号を、該先行命令の直後に実行する後続命令がソースレジスタ番号として使用する場合、該先行命令が１サイクルで実行を完了するのであれば、該先行命令が演算器１８０に投入されると同時に（つまり、該先行命令の実行完了を待たずに）該後続命令を入力待ちレジスタ１７０に登録すると、該後続命令を１サイクル早く発行することができる。
【０１３１】
そこで、エントリ１４１４、１４２４、１４３４、１４４４のそれぞれには、タグアップデート１９６を介して、次サイクルで演算が実行される予定の命令のデスティネーションレジスタ番号１７１〜１７４が入力される。そして、エントリ１４１４、１４２４、１４３４、１４４４が保持するソースレジスタ番号のいずれかと、デスティネーションレジスタ番号１７１〜１７４とを比較した結果、それらが一致すれば、待機している命令が使用するソースレジスタをデスティネーションレジスタとして使用する命令が次サイクルで実行される予定であることを意味する。この場合、上記ソースレジスタ番号を使用する命令を入力待ちレジスタ１７０に登録してもよい。したがって、上記値が一致したソースレジスタ番号に対応するフラグの値を「1」に設定する。
【０１３２】
なお、上記条件を満たすために、次サイクルで演算が実行される予定の命令が確実に次サイクルで実行される必要がある。そこで、各命令は１サイクルで完了する単位に分解された状態で、デコード記憶部１２０に格納されていることが望ましい。また、命令が分解されても、リオーダバッファ１５０にて命令の実行順序を保持するので、命令の実行順序は保たれる。
【０１３３】
次に、図３を参照しながら、キュー１４１について詳細に説明する。図３は、キュー１４１の構成を示す模式的な配線図である。
【０１３４】
図３に示すように、キュー１４１は、図２で示した、ソースレジスタ保持部１５１〜１５８、デスティネーションレジスタ保持部１５９〜１６２、セレクタ２０１〜２１２、デスティネーションレジスタ値送信部２１５〜２１８、ソース・デスティネーション依存関係検査部２３１〜２６２、ソース・デスティネーション依存関係検査集約部２７１〜２７４、後述する新規命令登録制御部３０１を備えて構成される。後述する新規命令登録制御部３０１は、図３では図示せず、図７にて図示している。
【０１３５】
ソースレジスタ保持部１５１〜１５４はそれぞれ、依存関係検査部１３０または前段のソースレジスタ保持部から出力されたソースレジスタ番号１２１１を保持する。ソースレジスタ保持部１５５〜１５８それぞれ、依存関係検査部１３０または前段のレジスタ保持部から出力されたソースレジスタ番号１２１２を保持する。
【０１３６】
次に、デスティネーションレジスタ保持部１５９〜１６２はそれぞれ、依存関係検査部１３０または前段のデスティネーションレジスタ保持部から出力されたデスティネーションレジスタ番号１２１３を保持する。
【０１３７】
セレクタ２０１〜２１２は、新たな命令をレジスタ保持部へ新規登録するか、または、前段のレジスタ保持部に保持されている値を後段のレジスタ保持部へシフトするかを、後述する新規命令登録制御部３０１からの信号に基づき選択する。そのために、セレクタ２０１〜２１２は、依存関係検査部１３０からの出力と、前段のレジスタ保持部からの出力とに接続されている。そして、セレクタ２０１〜２１２の出力は、後段のレジスタ保持部に接続されている。したがって、依存関係検査部１３０からの出力、および、前段のレジスタ保持部からの出力のうちいずれかを選択し、後段のレジスタ保持部に出力する。なお、図２における最前段のセレクタ２０１〜２０３については、その前段にレジスタ保持部が存在しないため、依存関係検査部１３０から出力のみを入力している。
【０１３８】
例えば、セレクタ２０４は、依存関係検査部１３０から出力された新たな命令のソースレジスタ番号と、ソースレジスタ保持部１５１に保持されている先行命令のソースレジスタ番号とが入力される。そして、そのいずれか出力され、ソースレジスタ保持部１５２に入力される。
【０１３９】
次に、レジスタ保持部へ新たに登録される命令と、レジスタ保持部に登録済みの先行命令との間に依存関係が有る場合は、先行命令を実行した後に、新たな命令を実行しなければならない。この場合、レジスタ保持部へ新たに登録される命令は、既に先行命令が登録されているレジスタ保持部よりも前段のレジスタ保持部に登録する必要がある。
【０１４０】
そこで、新たな命令と先行命令とのレジスタ依存関係を検査する。そのために、まず、デスティネーションレジスタ値送信部２１５〜２１８は、既にレジスタ保持部に登録されているデスティネーションレジスタ番号を、後述するソース・デスティネーション依存関係検査部２３１〜２６２のうち、２３１、２３５、２３９、２４３、２４７、２５１、２５５、２５９へ送信する。
【０１４１】
次に、ソース・デスティネーション依存関係検査部２３１〜２６２は、既にレジスタ保持部に登録されている先行命令のデスティネーションレジスタ番号と、新たにレジスタ保持部に登録される命令のソースレジスタ番号との依存関係を検査する。
【０１４２】
そのために、まず、ソース・デスティネーション依存関係検査部２３１、２３５、２３９、２４３、２４７、２５１、２５５、２５９は、依存関係検査部１３０から出力される命令Ａのソースアドレス番号と、デスティネーションレジスタ値送信部２１５〜２１８から送信される、レジスタ保持部に登録済みの先行命令のデスティネーションレジスタ番号とを入力とする。そして、該入力間の依存関係を検査する。
【０１４３】
具体的には、上記ソースレジスタ番号と上記デスティネーションレジスタ番号とが一致すれば、依存関係が有る旨の信号（例えば、値「1」）を出力する。一方、一致しなければ、依存関係が無い旨の信号（例えば、値「0」）を出力する。
【０１４４】
これにより、算術論理演算器１８１に投入される命令Ａと、その先行命令との依存関係を検査している。
【０１４５】
また、ソース・デスティネーション依存関係検査部２３２、２３６、２４０、２４４、２４８、２５２、２５６、２６０には、後述する、キュー１４２に備えられるデスティネーションレジスタ値送信部２１９〜２２２から送信される信号を入力としている。これにより、算術論理演算器１８１に投入される命令Ａと、シフト演算器１８２に投入される先行命令との依存関係を検査している。
【０１４６】
同様に、ソース・デスティネーション依存関係検査部２３３、２３７、２４１、２４５、２４９、２５３、２５７、２６１には、後述する、キュー１４３に備えられるデスティネーションレジスタ値送信部２２３〜２２６から送信される信号を入力としている。これにより、算術論理演算器１８１に投入される命令Ａと、アドレス演算器１８３に投入される先行命令との依存関係を検査している。
【０１４７】
同様に、ソース・デスティネーション依存関係検査部２３４、２３８、２４２、２４６、２５０、２５４、２５８、２６２には、後述する、キュー１４４に備えられるデスティネーションレジスタ値送信部２２７〜２３０から送信される信号を入力としている。これにより、算術論理演算器１８１に投入される命令Ａと、キャッシュ１８４に投入される先行命令との依存関係を検査している。
【０１４８】
次に、ソース・デスティネーション依存関係検査部２３１〜２６２がそれぞれ単独で依存関係の有無を調べた結果のみから、新たな命令をレジスタ保持部に登録してよいかどうかを判断することはできない。すなわち、新たにレジスタ保持部に登録する命令の２つのソースレジスタ番号のうち少なくとも一つが、既にレジスタ保持部に登録されている先行命令のデスティネーションレジスタ番号のいずれか一つと一致すれば、新たにレジスタ保持部に登録する命令と既にレジスタ保持部に登録されている先行命令との間には依存関係が有ることになる。したがって、新たにレジスタ保持部に登録する命令の２つのソースレジスタ番号と、既にレジスタ保持部に登録されている先行命令のデスティネーションレジスタ番号の全てとを比較する必要がある。
【０１４９】
そのために、ソース・デスティネーション依存関係検査集約部２７１〜２７４は、それぞれソース・デスティネーション依存関係検査部２３１〜２３８、２３９〜２４６、２４７〜２５４、２５５〜２６２の出力値を入力とし、それらの論理和を出力する。
【０１５０】
例えば、ソース・デスティネーション依存関係検査集約部２７１を例に挙げて説明する。ソース・デスティネーション依存関係検査部２３１〜２３８の出力値の少なくとも１つが「1」（すなわち、依存関係が有る）のとき、ソース・デスティネーション依存関係検査集約部２７１は値「1」を出力する。一方、ソース・デスティネーション依存関係検査部２３１〜２３８の出力値がすべて「0」（すなわち、依存関係が無い）のとき、ソース・デスティネーション依存関係検査集約部２７１は値「0」を出力する。ソース・デスティネーション依存関係検査集約部２７２〜２７４についても、同様に、値「1」または「0」を出力する。
【０１５１】
そして、ソース・デスティネーション依存関係検査集約部２７１〜２７４の出力値は、後述する新規命令登録制御部３０１に入力される。
【０１５２】
上述したように、レジスタ保持部へ新たに登録される命令と、レジスタ保持部に登録済みの先行命令との間の依存関係は、ソース・デスティネーション依存関係検査集約部２７１〜２７４で検査することができる。しかしながら、さらに、新たに登録される命令の間にも依存関係が有る場合、その依存関係をも考慮し、新たな命令を登録する適切なレジスタ保持部を決定する必要がある。そのために、後述する新規命令登録制御部３０１が、セレクタ２０１〜２１２を適切に制御して、新たな命令を登録する。
【０１５３】
次に、図４〜６を参照しながら、キュー１４２〜１４４について説明する。図４〜６は、キュー１４２〜１４４の構成を示す模式的な配線図である。
【０１５４】
図４〜６に示すように、キュー１４２〜１４４の構成は、図３で示したキュー１４４と同じ部材を備えて構成される。ただし、デスティネーションレジスタ値送信部２１９〜２３０の設置箇所が異なる。
【０１５５】
次に、図７を参照しながら、新規命令登録制御部３０１に対する入出力信号について説明する。図７は、新規命令登録制御部３０１の入出力を示す模式的な配線図である。
【０１５６】
図７に示すように、新規命令登録制御部３０１への入力には、ソース・デスティネーション依存関係検査集約部２７１〜２７４からの信号３１１〜３１４と、ソースレジスタ保持部１５１〜１５８からの信号３１５〜３１９と、依存関係検査部１３０からの信号３２０と、キュー１４２〜１４４に備えられる、新規命令登録制御部３０１と同様の構成を備える新規命令登録制御部（図示せず）からの信号３３０とが含まれる。
【０１５７】
また、新規命令登録制御部３０１の出力には、セレクタ２０１〜２１２への信号３４５〜３４８と、キュー１４２〜１４４に備えられる新規命令登録制御部への信号３５０とが含まれる。
【０１５８】
ソース・デスティネーション依存関係検査集約部２７１〜２７４からの信号３１１〜３１４は、上述したように、それぞれソース・デスティネーション依存関係検査部２３１〜２３８、２３９〜２４６、２４７〜２５４、２５５〜２６２の出力値の論理和である。
【０１５９】
ソースレジスタ保持部１５１〜１５８からの信号３１５〜３１９は、ソースレジスタ保持部１５１〜１５８に空きがあるかどうか、すなわちソースレジスタ保持部１５１〜１５８に値が登録されているかどうかを示す信号である。
【０１６０】
例えば、信号３１５は、ソースレジスタ保持部１５１および１５５のいずれにも空きがあるかどうかを示す。例えば、いずれにも空きがない場合、値を「1」とする。
【０１６１】
信号３２０は、新たに登録する命令の間の依存関係を示す信号であって、依存関係検査部１３０から得られる。具体的には、新たな命令Ｘと新たな命令Ｙとを実行するときに、その命令間に必要な時間間隔である。例えば、命令Ｘを実行してから１サイクル後に命令Ｙを実行してよい場合は、信号３２０の値は「1」となる。また例えば、命令Ｘを実行してから２サイクル後に命令Ｙを実行する必要がある場合は、信号３２０の値は「2」となる。なお、信号３２０は、依存関係検査部１３０が従来から備える機構により算出可能である。図７では、信号３２０を１本の信号線で示しているが、後述するように複数の信号線から構成される。
【０１６２】
信号３３０は、キュー１４２〜１４４に備えられる新規命令登録制御部が出力する。信号３３０は、命令Ｂ、Ｃ、Ｄを、キュー１４２〜１４４におけるエントリのいずれに登録したかを示す信号であり、Ａをキュー１４１のどのエントリに命令Ａを登録するかを判断するときの制約情報として用いる。なお、図７では、信号３３０を１本の信号線で示しているが、後述するように複数の信号線から構成される。
【０１６３】
セレクタ２０１〜２１２への信号３４５〜３４８は、新規命令をどのレジスタ保持部へ登録するかに応じて、各セレクタを制御するための信号である。
【０１６４】
信号３５０は、キュー１４２〜１４４に備えられる新規命令登録制御部への入力となる信号である。命令Ａをどのエントリに登録したかを示す信号であり、命令Ｂ、Ｃ、Ｄをどのエントリに登録するかを判断するときの制約情報として用いる。図７では、信号３５０を１本の信号線で示しているが、後述するように複数の信号線から構成される。
【０１６５】
次に、図８を参照しながら、新規命令登録制御部３０１の構成について詳細に説明する。図８は、新規命令登録制御部３０１の構成を示す模式的な配線図である。図８に示すように、新規命令登録制御部３０１は、登録エントリ決定部４０１〜４０４、制約情報生成部４１０、４２０、４３０を備えて構成される。
【０１６６】
登録エントリ決定部４０１〜４０４は、エントリ１４１１〜１４１４のいずれに新規命令を登録するかを決定し、セレクタ２０１〜２１２を制御する。そのために、ソース・デスティネーション依存関係検査集約部２７１〜２７４からの信号３１１〜３１４と、キュー１４２〜１４４に備えられる新規命令登録制御部が出力する信号３３１〜３４２と、ソースレジスタ保持部１５１〜１５８の空きを示す信号３１５〜３１９とを入力とする。
【０１６７】
ここで、登録エントリ決定部４０１〜４０４へ入力される信号３３１〜３４２は、図７で示した信号３３０を詳細に示したものであり、キュー１４２〜１４４に備えられる新規命令登録制御部が出力する信号である。具体的には、信号３３１の値は、キュー１４２に備えられる新規命令登録制御部がエントリ１４２１に新規命令を登録した場合、「1」となる。また、信号３３２の値は、キュー１４２に備えられる新規命令登録制御部がエントリ１４２２に新規命令を登録した場合、「1」となる。また、信号３３３の値は、キュー１４２に備えられる新規命令登録制御部がエントリ１４２３に新規命令を登録した場合、「1」となる。また、信号３３４の値は、キュー１４２に備えられる新規命令登録制御部がエントリ１４２４に新規命令を登録した場合、「1」となる。
【０１６８】
同様に、信号３３５〜３３８の値は、キュー１４３に備えられる新規命令登録制御部が、それぞれエントリ１４３１〜１４３４に新規命令を登録した場合、「1」となる。同様に、信号３３９〜３４２の値は、キュー１４４に備えられる新規命令登録制御部が、それぞれエントリ１４４１〜１４４４に新規命令を登録した場合、「1」となる。
【０１６９】
次に、登録エントリ決定部４０１を例に挙げて、エントリに登録するか否かを決定する処理について、具体的に説明する。
【０１７０】
登録エントリ決定部４０１には、信号３１１、信号３３１、信号３３５、信号３３９、および、信号３１５が入力される。まず、上述したように、信号３１１の値によって、すでにエントリ１４１１またはエントリ１４２１またはエントリ１４３１またはエントリ１４４１に登録済みの命令との依存関係の有無がわかる。依存関係がある場合、信号３１１の値は「1」である。
【０１７１】
また、上述したように、信号３３１と信号３３５と信号３３９との値によって、新たに登録する他の命令が、エントリ１４２１、エントリ１４３１、エントリ１４４１に登録されたかどうかがわかる。登録された場合、信号３３１、信号３３５、信号３３９の値は「1」である。
【０１７２】
そして、信号３１５の値によって、ソースレジスタ保持部１５１および１５５に空きがあるかどうかがわかる。空きがない場合は、値は「1」である。
【０１７３】
したがって、信号３１１と信号３３１と信号３３５と信号３３９と信号３１５との論理和の値が「1」であれば、登録エントリ決定部４０１は、エントリ１４１１に新たな命令を登録不可であると決定する。一方、信号３１１と信号３３１と信号３３５と信号３３９と信号３１５との論理和の値が「0」であれば、登録エントリ決定部４０１は、エントリ１４１１に新たな命令を登録可能であると決定する。
【０１７４】
登録エントリ決定部４０２〜４０４についても、上記と同様の処理を行う。ただし、前段のエントリに依存関係があれば、それより後段のエントリに命令Ｂ、Ｃ、Ｄを登録してはいけないし、前段に命令Ｂ、Ｃ、Ｄのいずれかが登録済みであれば、それより後段に新たな命令を登録してはいけない。そこで、後段の登録エントリ決定部には、空きを示す信号３１５〜３１９を除き、前段の登録エントリ決定部に入力される信号をすべて入力している。例えば、登録エントリ決定部４０４には、信号３１１〜３１５、信号３３１〜３４２、および、信号３１９を入力している。
【０１７５】
なお、それぞれの登録エントリ決定部４０１〜４０４が、新たな命令の登録可否を決定した結果、２つ以上の登録エントリ決定部が新たな命令を登録可能であると決定する場合がある。ここで、新たな命令がエントリに登録されてから演算部へ発行されるまでの待機期間は短い方が望ましい。したがって、上記の場合は、最も後段の登録エントリ決定部が登録可能であるとした決定を優先し、その他の登録エントリ決定部は登録不可と決定し直す。
【０１７６】
そして、上記決定を基に、登録エントリ決定部４０１〜４０４は、それぞれ、セレクタ２０１〜２１２への信号３４５〜３４８を出力し、各セレクタを制御する。なお、登録可能であるとした決定した登録エントリ決定部は値「1」を出力し、登録不可と決定した登録エントリ決定部は値「0」を出力する。
【０１７７】
次に、制約情報生成部４１０は、登録エントリ決定部４０１〜４０４が決定したエントリに登録される命令Ａと、キュー１４２に登録される命令Ｂとの依存関係を基に、キュー１４２に備えられる新規命令登録制御部に対して制約情報を出力する。
【０１７８】
そのために、制約情報生成部４１０は、エントリ制約情報生成部４１１〜４１４を備えて構成される。エントリ制約情報生成部４１１〜４１４は、登録エントリ決定部４０１〜４０４からの出力信号と、依存関係検査部１３０から送信される、命令Ａと命令Ｂとの間の依存関係を示す信号３２０１〜３２０４とを入力とする。
【０１７９】
ここで、信号３２０１〜３２０４は、図７で示した信号３２０の一部を詳細に示したものである。具体的には、命令Ａを実行してから１サイクル以上後に命令Ｂを実行する必要がある場合は、信号３２０１の値は「1」となり、それ以外の場合は、信号３２０１の値は「0」となる。また、命令Ａを実行してから２サイクルより後に命令Ｂを実行する必要がある場合は、信号３２０２の値は「1」となり、それ以外の場合は、信号３２０２の値は「0」となる。また、命令Ａを実行してから３サイクル以上後に命令Ｂを実行する必要がある場合は、信号３２０３の値は「1」となり、それ以外の場合は、信号３２０３の値は「0」となる。また、命令Ａを実行してから４サイクル以上後に命令Ｂを実行する必要がある場合は、信号３２０４の値は「1」となり、それ以外の場合は、信号３２０４の値は「0」となる。
【０１８０】
同様に、信号３２０５〜３２０８は、命令ＡとＣとを実行するサイクルの差が１〜４であることを示す信号であり、信号３２０９〜３２１２は、命令Ａと命令Ｄとを実行するサイクルの差が１〜４であることを示す信号である。なお、命令間の実行サイクル差が５以上であることを示す信号については、図示を省略している。
【０１８１】
次に、エントリ制約情報生成部４１４を例に挙げて、制約情報を生成する処理について、具体的に説明する。エントリ制約情報生成部４１４は、命令Ｂをエントリ１４２４に登録してよいかどうかという情報を生成する。
【０１８２】
例えば、エントリ１４１４に命令Ａが登録され、かつ、命令Ｂは命令Ａの１サイクル以上後に実行しなければならない制約がある場合、命令Ｂをエントリ１４２４に登録してはいけない。よって、この場合、エントリ制約情報生成部４１４は、命令Ｂをエントリ１４２４に登録してはいけない旨の情報を生成する。一方、上記以外の場合は、命令Ｂをエントリ１４２４に登録してよい。この場合、エントリ制約情報生成部４１４は、命令Ｂをエントリ１４２４に登録してはいけない旨の情報を生成しない。
【０１８３】
そのために、エントリ制約情報生成部４１４には、登録エントリ決定部４０４からの出力信号と、信号３２１とを入力し、それらの論理積を出力している。これにより、登録エントリ決定部４０４からの出力信号の値が「1」（つまり、エントリ１４１４に命令Ａが登録された）であり、信号３２１の値が「1」（つまり、命令Ａを実行してから１サイクル後に命令Ｂを実行してよい）であるとき、エントリ制約情報生成部４１４の出力信号３５０４の値は「1」となる。一方、登録エントリ決定部４０４からの出力信号の値または信号３２１の値のいずれかが「0」であれば、エントリ制約情報生成部４１４の出力信号３５０４の値は「0」となる。
【０１８４】
続いて、エントリ制約情報生成部４１３を例に挙げて、制約情報を生成する処理について、具体的に説明する。エントリ制約情報生成部４１３は、命令Ｂをエントリ１４２３に登録してよいかどうかという情報を生成する。このとき、エントリ制約情報生成部４１３は、命令Ａがエントリ１４１４に登録された場合と、エントリ１４１３に登録された場合との両方について考慮しなければならない。
【０１８５】
例えば、エントリ１４１４に命令Ａが登録され、かつ、命令Ｂは命令Ａの２サイクル以上後に実行しなければならない制約がある場合、命令Ｂをエントリ１４２３に登録してはいけない。この場合、エントリ制約情報生成部４１３は、命令Ｂをエントリ１４２３に登録してはいけない旨の情報を生成する。さらに、エントリ１４１３に命令Ａが登録され、かつ、命令Ｂは命令Ａの１サイクル以上後に実行しなければならない制約がある場合、命令Ｂをエントリ１４２３に登録してはいけない。この場合について、エントリ制約情報生成部４１３は、命令Ｂをエントリ１４２３に登録してはいけない旨の情報を生成する。
【０１８６】
一方、上記以外の場合は、命令Ｂをエントリ１４２３に登録してよい。この場合、エントリ制約情報生成部４１３は、命令Ｂをエントリ１４２３に登録してはいけない旨の情報を生成しない。
【０１８７】
そのために、エントリ制約情報生成部４１３には、登録エントリ決定部４０３および４０４からの出力信号と、信号３２１および３２３とを入力している。そして、登録エントリ決定部４０３からの信号と信号３２１との論理積と、登録エントリ決定部４０４からの信号と信号３２２との論理積との論理和を出力している。
【０１８８】
これにより、登録エントリ決定部４０３からの出力信号の値が「1」（すなわち、エントリ１４１３に命令Ａが登録された）であり、信号３２１の値が「1」（すなわち、命令Ａを実行してから１サイクル後に命令Ｂを実行してよい）であるとき、または、登録エントリ決定部４０４からの出力信号の値が「1」（すなわち、エントリ１４１４に命令Ａが登録された）であり、信号３２２の値が「1」（すなわち、命令Ａを実行してから２サイクル後に命令Ｂを実行してよい）であるとき、エントリ制約情報生成部４１３の出力信号３５０３の値は「1」となる。一方、上記以外の場合は、エントリ制約情報生成部４１３の出力信号３５０３の値は「0」となる。
【０１８９】
エントリ制約情報生成部４１１および４１２についても、同様の構成により、信号３５０１および３５０２を出力する。
【０１９０】
そして、エントリ制約情報生成部４１１〜４１４から出力される信号３５０１〜３５０４は、制約情報として、命令Ｂを登録するキュー１４２に備えられる新規命令登録制御部へ入力される。
【０１９１】
次に、制約情報生成部４２０は、登録エントリ決定部４０１〜４０４が決定したエントリに登録される命令Ａと、キュー１４３に登録される命令Ｃとの依存関係を基に、キュー１４３に備えられる新規命令登録制御部に対して制約情報を出力する。
【０１９２】
そのために、制約情報生成部４２０は、制約情報生成部４１０と同様の構成を備える（図示せず）。そして、登録エントリ決定部４０１〜４０４からの出力信号と、依存関係検査部１３０から送信される、命令Ａと命令Ｃとの間の依存関係を示す信号３２０５〜３２０８とを入力とし、キュー１４３に備えられる新規命令登録制御部に対する制約情報となる信号３５０５〜３５０８を出力する。
【０１９３】
同様に、制約情報生成部４３０は、登録エントリ決定部４０１〜４０４が決定したエントリに登録される命令Ａと、キュー１４４に登録される命令Ｄとの依存関係を基に、キュー１４４に備えられる新規命令登録制御部に対して制約情報を出力する。
【０１９４】
そのために、制約情報生成部４３０は、制約情報生成部４１０と同様の構成を備える（（図示せず）。そして、登録エントリ決定部４０１〜４０４からの出力信号と、依存関係検査部１３０から送信される、命令Ａと命令Ｄとの間の依存関係を示す信号３２０９〜３２１２とを入力とし、キュー１４４に備えられる新規命令登録制御部に対する制約情報となる信号３５０９〜３５１２を出力する。
【０１９５】
以上の構成により、新たな命令をＶＬＩＷ命令キュー１４０に登録するとき、命令間の依存関係を使用して、命令レベル並列実行のスケジューリングを行っている。
【０１９６】
なお、上記において、新規命令登録制御部３０１は、キュー１４２〜１４４に備えられる新規命令登録制御部からの制約情報を入力として、キュー１４２〜１４４に備えられる新規命令登録制御部への制約情報を出力しているが、依存関係検査部１３０によって命令間のレジスタ依存関係を解消しており、命令間の依存関係にはループが生じないことが保証されるため、上記処理は必ず所定時間内に収束することが保証される。
【０１９７】
以上のように、本実施形態に係るデータ処理装置１００は、ＶＬＩＷ命令キュー１４０を備える構成であるため、従来のデータ処理装置５００におけるリザベーションステーション５５１およびフォワーディング５９０が不要である。よって、複雑な構成を備えるリザベーションステーション５５１およびフォワーディング５９０が存在しないので、電力消費を抑えることができる。
【０１９８】
また、Dispatch＆Readステージ１０２では、ＶＬＩＷ命令キュー１４０の任意のエントリから発行可能な命令を選択するのではなく，常に最後段のエントリのみから命令を発行する。よって、Dispatch＆Readステージ１０２では、従来のデータ処理装置５０５におけるSelect＆Readステージ５０７において実装されていた連想検索機構を備える必要がない。したがって、Dispatch＆Readステージ１０２では、従来よりも処理の遅延時間が少なくなるため、本実施形態に係るデータ処理装置１００の動作周波数を向上させることができる。
【０１９９】
なお、ＶＬＩＷ命令キュー１４０の最後段のエントリのみから命令が発行されるが、依存関係検査部１３０にてレジスタリネーミングを行うこと、および、キャッシュミスはキャッシュ１８４において検出されることから、仮にキャッシュミスが検出されても直ちに命令の発行が停止されることはない。すなわち、ＶＬＩＷ命令キュー１４０の最後段のエントリに存在する命令がキャッシュミスしたデータを使用しない場合は、キャッシュミスに関わらず、該命令は発行される。そして、キャッシュミスしたデータを使用する後続命令がＶＬＩＷ命令キュー１４０の最後段のエントリに達した場合、キャッシュミスしたデータがキャッシュされるまで、該後続命令は発行されない。
【０２００】
なお、キャッシュミスの発生を緩和するために、キャッシュミス発生管理部１９８が、キャッシュミスが発生する可能性が高い命令を予想し、命令登録遅延部１９９が、該命令と該命令の演算結果を使用する命令とを実行する間隔を所定間隔だけ開けて、ＶＬＩＷ命令キュー１４０に登録する。これにより、スーパスカラ方式と同程度の命令レベル並列度を達成できる。
【０２０１】
また、上述の実施の形態では、データ処理装置１００はデコード記憶部１２０を１つ備える構成としたが、上述した構成に限定されるものではなく、複数のデコード記憶部を備えてもよい。この場合、複数のデコード記憶部１２０に対応する複数のプログラムカウンタをさらに備えることにより、命令流（すなわち、連続して実行する一連の命令群）が複数存在する場合に、それらを混在して実行することができるので、以下で説明する。
【０２０２】
例えば、データ処理装置１００が、デコード記憶部１２０に加えて、さらに他のデコード記憶部１２０ａを備える構成である場合について、以下で説明する。また、データ処理装置１００が、デコード記憶部１２０に対応するプログラムカウンタをプログラムカウンタＰ１と、デコード記憶部１２０ａに対応するプログラムカウンタをプログラムカウンタＰ２とを備えるものとする。
【０２０３】
この場合、例えば、命令Ａ１と命令Ｂ１と命令Ｃ１とからなる命令流Ｑ１をデコード記憶部１２０に格納し、一方、命令Ａ２と命令Ｂ２と命令Ｃ２とからなる命令流Ｑ２をデコード記憶部１２０ａに格納する。そして、デコード記憶部１２０に格納した命令はプログラムカウンタＰ１に従って、依存関係検査部１３０を介してＶＬＩＷ命令キュー１４０に登録する。同時に、デコード記憶部１２０ａに格納した命令はプログラムカウンタＰ２に従って、依存関係検査部１３０を介してＶＬＩＷ命令キュー１４０に登録する。
【０２０４】
これにより、命令流Ｑ１に含まれる命令Ａ１、命令Ｂ１、命令Ｃ１と、命令流Ｑ２に含まれる命令Ａ２、命令Ｂ２、命令Ｃ２とをＶＬＩＷ命令キュー１４０に混在した状態で登録することができる。したがって、異なる２つの命令流Ｑ１とＱ２とを混在させて、演算器へ発行することができる。
【０２０５】
なお、複数の命令流が、それぞれ異なる機械語命令に準拠した命令により構成される場合、上述のようにＶＬＩＷ命令キュー１４０に混在させることができない。この場合、データ処理装置１００が、異なる機械語命令を所定の機械語命令に変換する構成をさらに備えてもよい。すなわち、ＶＬＩＷ命令キュー１４０に登録可能な所定の機械語命令に変換した上で、ＶＬＩＷ命令キュー１４０に登録する。これにより、異なる機械語命令に準拠した命令により構成される命令流が複数存在した場合であっても、それらを混在して実行することができる。
（付記事項）
なお、実施の形態は上述の他に、以下のようにも表現できる。
【０２０６】
[１]本発明に係るデータ処理装置は、複数の機械語命令を同時に解釈実行するデータ処理装置であって、同時に解釈実行する複数の機械語命令を格納する第１の記憶装置と、時系列に実行される複数の機械語命令と各々の空き状態とを格納する第２の記憶装置と、ソースオペランドおよびデスティネーションオペランドにより指定される複数の
レジスタを格納する第３の記憶装置と、ソースオペランドにより指定されるレジスタの値を用いて演算を行う第４の演算装置を備え、前記第１の記憶装置に格納された複数の命令語に属するソースオペランドフィールドの情報と、前記第２の記憶装置に格納される空き情報と、前記第２の記憶装置に格納されるデスティネーションオペランドの情報を元に、前記第１の記憶装置に格納された複数の機械語命令を実行すべき時刻を決定し、前記第１の記憶装置に格納された複数の機械語命令を、前記第２の記憶装置のうち該時刻に対応する空き位置に格納するものであってもよい。
【０２０７】
[２]さらに、本発明に係るデータ処理装置は、前記第２の記憶装置の各命令の各ソースオペランドごとに、ソースオペランドが使用可能状態にあるか否かを示すREADYビットを備え、前記第２の記憶装置に格納された複数の機械語命令のうち、実行指定時刻が最も早い１組の機械語命令に属する全てのREADYビットが成立している場合に、当該機械語命令に属するソースオペランドフィールドの情報を用いて、前記第３の記憶装置に格納されるソースオペランドを読み出すものであってもよい。
【０２０８】
[３]さらに、本発明に係るデータ処理装置は、前記第１の記憶装置から前記第２の記憶装置に対して命令語を格納する際には、前記第２の記憶装置に格納済みの命令語のデスティネーションオペランドに依存するソースオペランドに対して前記READYビットをリセットし、前記第２の記憶装置に格納された複数の機械語命令のうち、実行指定時刻が最も早い１組の機械語命令に属するソースオペランドフィールドの情報を用いて、前記第３の記憶装置に格納されるソースオペランドを読み出した際には、当該命令が書き込みを行うデスティネーションオペランド情報と、前記第２の記憶装置に格納される機械語命令に属するソースオペランド情報の一致比較を行い、一致した場合には、当該ソースオペランドのREADY ビットをセットするものであってもよい。
【０２０９】
[４]さらに、本発明に係るデータ処理装置は、前記第４の演算装置の演算完了時点において、当該命令が書き込みを行うデスティネーションオペランド情報と、前記第２の記憶装置に格納される機械語命令に属するソースオペランド情報の一致比較を行い、一致した場合には、当該ソースオペランドのREADYビットをセットするものであってもよい。
【０２１０】
[５]さらに、本発明に係るデータ処理装置は、レジスタリネーミングを行うものであってもよい。
【０２１１】
[６]さらに、本発明に係るデータ処理装置は、前記第１の記憶装置に格納された複数の機械語命令を実行すべき時刻を決定し、前記第１の記憶装置に格納された複数の機械語命令を、前記第２の記憶装置のうち該時刻に対応する空き位置に格納することを、レジスタリネーミング情報を用いて補正するものであってもよい。
【０２１２】
[７]さらに、本発明に係るデータ処理装置は、前記第４の演算器において実行遅延が生じる場合でも、前記第２の記憶装置からの命令発行を完了し、実行遅延は前記第４の演算器において滞留させるものであってもよい。
【０２１３】
[８]さらに、本発明に係るデータ処理装置は、前記第４の演算器において実行遅延が生じることが予想される場合には、前記第１の記憶装置から前記第２の記憶装置に対して機械語命令を格納する際に、遅延する機械語命令に依存する後続命令については、指定した実行時刻差を用いて適切な距離を離した指定時刻位置に格納するであってもよい。
【０２１４】
[９]さらに、本発明に係るデータ処理装置は、演算器において機械語命令が毎サイクル実行されるように、本来の機械語命令を単純な機械語命令セットに分解した後に、前記第１の記憶装置に機械語命令をセットするものであってもよい。
【０２１５】
[１０]さらに、本発明に係るデータ処理装置は、前記第２の記憶装置に格納された機械語命令が、論理的に正しい順序により実行されることを保証するリオーダバッファを備えるものであってもよい。
【０２１６】
[１１]さらに、本発明に係るデータ処理装置は、前記第１の記憶装置とプログラムカウンタの組を複数組備え、ただ１つの前記第２の記憶装置に対して、複数のプログラムカウンタにより指定される複数の命令流に属する命令語を同時に格納することにより、複数の命令流を同時に実行するものであってもよい。
【０２１７】
[１２]さらに、本発明に係るデータ処理装置は、互いに異なる機械語命令をただ１つの前記第２の記憶装置に適合する共通の機械語命令に変換する機構を複数個備え、異なる命令セットに準拠する複数の命令流を同時に実行するものであってもよい。
【０２１８】
本発明は上述した実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【産業上の利用可能性】
【０２１９】
本発明は、複数の機械語命令を高速に同時実行するデータ処理装置に好適に利用することができる。
【図面の簡単な説明】
【０２２０】
【図１】本発明の実施の一形態であるデータ処理装置の要部構成を示すブロック図である。
【図２】図１に示したデータ処理装置におけるＶＬＩＷ命令キューの要部構成を示すブロック図である。
【図３】図２に示したＶＬＩＷ命令キューにおけるキューの要部構成を示すブロック図である。
【図４】図３に示したキューの要部構成を示す模式的な配線図である。
【図５】図３に示したキューの要部構成を示す模式的な配線図である。
【図６】図３に示したキューの要部構成を示す模式的な配線図である。
【図７】図３に示したキューにおける新規命令登録制御部の入出力を示す模式的な配線図である。
【図８】図７に示した新規命令登録制御部の要部構成を示す模式的な配線図である。
【図９】一般的なパイプラインの各ステージを示すブロック図である。
【図１０】従来のデータ処理装置の要部構成を示すブロック図である。
【図１１】従来の他のデータ処理装置の要部構成を示すブロック図である。
【符号の説明】
【０２２１】
１００          データ処理装置
１１０          デコード部
１２０          デコード記憶部（第１の命令格納手段）
１３０          依存関係検査部（依存関係検査手段）
１４０          ＶＬＩＷ命令キュー（第２の命令格納手段）
１５０          リオーダバッファ
１７０          入力待ちレジスタ（第３の命令格納手段）
１８０          演算器（命令演算手段）
１９５          バイパス
１９６          タグアップデート
１９８          キャッシュミス発生管理部
１９９          命令登録遅延部
２１５〜２３０  デスティネーションレジスタ値送信部
２３１〜２６２  ソース・デスティネーション依存関係検査部
２７１〜２７４  ソース・デスティネーション依存関係検査集約部
３０１          新規命令登録制御部（新規命令登録制御手段）
４０１〜４０４  登録エントリ決定部
４１０〜４３０  制約情報生成部
４１１〜４１４  エントリ制約情報生成部
【図１】
2008217154.tif 000003
【図２】
2008217154.tif 000004
【図３】
2008217154.tif 000005
【図４】
2008217154.tif 000006
【図５】
2008217154.tif 000007
【図６】
2008217154.tif 000008
【図７】
2008217154.tif 000009
【図８】
2008217154.tif 000010
【図９】
2008217154.tif 000011
【図１０】
2008217154.tif 000012
【図１１】
2008217154.tif 000013