JP3737573B2 - Vliwプロセッサ - Google Patents

Vliwプロセッサ Download PDF

Info

Publication number
JP3737573B2
JP3737573B2 JP23769496A JP23769496A JP3737573B2 JP 3737573 B2 JP3737573 B2 JP 3737573B2 JP 23769496 A JP23769496 A JP 23769496A JP 23769496 A JP23769496 A JP 23769496A JP 3737573 B2 JP3737573 B2 JP 3737573B2
Authority
JP
Japan
Prior art keywords
instruction
register
field
register file
source
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.)
Expired - Fee Related
Application number
JP23769496A
Other languages
English (en)
Other versions
JPH1083302A (ja
Inventor
隆二 境
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP23769496A priority Critical patent/JP3737573B2/ja
Publication of JPH1083302A publication Critical patent/JPH1083302A/ja
Application granted granted Critical
Publication of JP3737573B2 publication Critical patent/JP3737573B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache

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)
  • Executing Machine-Instructions (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、複数の命令フィールドを有する長命令語(Very Long Instruction Word:VLIW)を実行するVLIWプロセッサに関する。
【0002】
【従来の技術】
従来より、プロセッサの性能を向上させるために、プロセッサの動作周波数を速くするための試みが行われてきたが、回路の集積度、消費電力、素子のスピードなどから、物理的限界に近づいてきている。そこで今日では、より高速な処理を実現するために、スーパースカラや、長命令語(VLIW)といった複数の命令を同時(並列)に実行するアーキテクチャを採用しているプロセッサが開発され、広く利用されるようになっている。
【0003】
さて、長命令語を実行するプロセッサ(VLIWプロセッサ)では、その長命令語中の各命令(単位命令)で使用可能なレジスタ数を2n とした場合、その命令(命令フィールド)中で1つのレジスタ(デスティネーションレジスタまたはソースレジスタ)を指定するにはnビットのレジスタ指定部を必要とする。このため、例えば3つのオペランドを扱う命令の例では、図16(a)に示すように、nビットのレジスタ指定部を3オペランド分必要とし、1命令全体ではレジスタ指定のために必要なビット数は3nビットとなる。
【0004】
もし、メモリアクセス回数を少なくして高速処理を実現するために、扱えるレジスタ数を2倍の2n+1 個にしようとすると、各命令中のレジスタ指定部(ここでは3つのレジスタ指定部OP1〜OP3)のビット数を、図16(a)に示すnビットから、図16(b)に示すようにn+1ビットに増やす必要があり、3オペランドの例では、1命令全体で3ビット増やさなければならない。
【0005】
一方、上記の長命令語を実行するプロセッサ(VLIWプロセッサ)で、より高い性能を実現しようとすると、同時実行可能命令(単位命令)数を増やして、並列度を上げる必要がある。並列度を上げるには、長命令語長を伸ばして命令フィールド数を増やせばよい。しかし、長命令語中の命令フィールド数(命令数)を増やすと、一度に(1サイクルで)読み出さなければならないレジスタ数(レジスタファイルのポート数)も増大し、またパイプライン処理に必要なバイパス回路(例えば、演算結果をパイプラインの書き込みステージを経ずに演算器側に導くためのバイパス回路)の規模も大きくなる。このため、ハードウェアの複雑度が増大し、動作周波数を速くするのを妨げる要因となる。
【0006】
図17は、このような例を、4命令並列に実行可能なVLIWプロセッサのパイプライン構成について示す。ここでは、並列実行可能な命令数4に一致する数の2入力1出力の演算器221-0〜221-3と、その演算器221-0〜221-3の演算結果を一時保持するバッファ222-0〜222-3からなるラッチ回路222と、このバッファ222-0〜222-3の出力を演算器221-0〜221-3の左側入力(L入力)または右側入力(R入力)に選択的にバイパスするためのバイパス回路223と、並列実行可能な命令数4に一致する数の入力ポート並びにその2倍の数の出力ポートを持つレジスタファイル224とが設けられる。
【0007】
バイパス回路223は、演算器221-0〜221-3の左側入力に対応して設けられたマルチプレクサ(MPX)223L0 〜223L3 と、演算器221-0〜221-3の右側入力に対応して設けられたマルチプレクサ223R0 〜223R3 とから構成される。マルチプレクサ223L0 〜223L3 ,223R0 〜223R3 は、レジスタファイル224のそれぞれ異なる出力ポートと1対1で対応しており、対応する出力ポートからの出力及びバッファ222-0〜222-3の出力の1つを選択して演算器221-0〜221-3の対応する入力側に出力する。
【0008】
このように、並列実行可能な命令数が4の場合、バイパス回路を構成するマルチプレクサの数は2×4、各マルチプレクサの入力数は4+1=5となる。したがって、バイパス回路内の全マルチプレクサの総入力数、即ちバイパス回路の入力ポート数は5×2×4=40となる。
【0009】
一般に、従来のVLIWプロセッサでは、実行すべき長命令語の命令フィールド数、即ち同時実行命令数(並列度)がNの場合、3つのオペランドを扱う命令形式の例では、レジスタファイルのポート数は入力ポートがN、出力ポートが2Nとなり、バイパス回路のポート数は入力ポートが(N+1)×2N(バイパス回路を構成する2N個のマルチプレクサの入力数はN+1)、出力ポートが2Nとなる。
【0010】
【発明が解決しようとする課題】
上記したように、従来のVLIWプロセッサでは、扱えるレジスタ数を増やそうとすると、命令(単位命令)中のレジスタ指定部のビット数を増やさなければならず、長命令語(VLIW)長を伸ばさなければならないという問題があった。
【0011】
また従来のVLIWプロセッサでは、高並列度にすると、一度に読み出さなければならないレジスタ数が増加してレジスタファイルのポート数の増加を招き、更にパイプライン処理に必要なバイパス回路の規模が大きくなってハードウェアの複雑度が増大するという問題があった。
【0012】
本発明は上記事情を考慮してなされたものでその目的は、扱えるレジスタ数が長命令語(VLIW)長を伸ばすことなく増やすことができ、しかもハードウェア構成の複雑化を招かないで済む高性能なVLIWプロセッサを提供することにある。
【0013】
【課題を解決するための手段】
本発明は、複数の命令フィールドを有する長命令語(VLIW)を実行するVLIWプロセッサにおいて、複数のレジスタファイルと、長命令語中の各命令フィールドのフィールド番号の第1の所定部分をもとに、その命令フィールドの命令で参照するソースオペランドの読み出しが可能なレジスタファイルを割り当てると共に、上記各命令フィールドのフィールド番号の上記第1の所定部分とは少なくとも一部が異なる第2の所定部分をもとに、その命令フィールドの命令の実行結果の書き込みが可能なレジスタファイルを割り当てる割り当て手段とを備えたことを特徴とする。また、書き込みが可能なレジスタファイルの割り当てを例にとると、上記第1の所定部分と、各命令フィールドのデスティネーションレジスタ指定部の一部(上位ビット)との連結情報によりレジスタファイルの割り当てを行うことも可能である。更に、上記第1の所定部分と第2の所定部分の一部を重複させることも可能である。
【0014】
上記複数のレジスタファイル内の各レジスタには、それぞれ固有のレジスタ番号が付けられている。そこで、この固有のレジスタ番号を持つレジスタの指定のためには、長命令語中の各命令フィールドのソースレジスタ指定部の示すレジスタ番号を、その命令フィールドのフィールド番号の上記第1の所定部分により修飾し、上記各命令フィールドのデスティネーションレジスタ指定部の示すレジスタ番号を、その命令フィールドのフィールド番号の前記第1の所定部分とは異なる第2の所定部分により修飾するとよい。また、このレジスタ番号の修飾には、命令フィールドのソースレジスタ指定部の示すレジスタ番号の上位に、その命令フィールドのフィールド番号の第1の所定部分を付加し、各命令フィールドのデスティネーションレジスタ指定部の示すレジスタ番号の上位に、その命令フィールドのフィールド番号の第2の所定部分を付加する方法を適用するとよい。
【0015】
上記構成のVLIWプロセッサにおいては、長命令語の各命令フィールド(の命令)のフィールド番号により、その命令フィールドの命令で参照するソースオペランドの読み出しが可能なレジスタファイルと、その命令フィールドの命令の実行結果の書き込みが可能なレジスタファイルとが決められるため、各命令フィールドのレジスタ指定部(ソースレジスタ指定部、デスティネーションレジスタ指定部)では、そのレジスタファイル内のレジスタ位置(相対位置、相対レジスタ番号)を指定するだけでよく、長命令語全体で扱えるレジスタ数を増やしても、命令フィールドのレジスタ指定部の構成ビット数を増やさなくても済む。また、レジスタファイルの決定に、フィールド番号だけでなく、レジスタ指定部の一部(上位ビット)を用いる場合には、命令フィールドのレジスタ指定部の構成ビット数を増やす必要があるが、フィールド番号を利用しない場合に比べれば、増加するビット数は少なくて済む。
【0016】
しかも上記構成のVLIWプロセッサにおいては、長命令語の各命令フィールド毎に、ソース指定とデスティネーション指定のそれぞれについて、対象となるレジスタファイルを制限しているため、従来に比べてレジスタファイルの入力ポート数及び出力ポート数を減らすことが可能となる。同様の理由で、バイパス回路についても、入力ポート数及び出力ポート数を減らすことが可能となる。これにより、並列度を上げても(長命令語中の命令フィールド数を増やしても)ハードウェアの複雑度が著しく増大するのを防ぐことができる。
【0017】
更に、上記構成のVLIWプロセッサにおいては、長命令語の各命令フィールド毎に使用可能なレジスタファイルを制限していながら、ソース指定では、各命令フィールドのフィールド番号の第1の所定部分を用いたレジスタ修飾が、デスティネーション指定では、この第1の所定部分とは異なる第2の所定部分を用いたレジスタ修飾が適用されることから、ある命令フィールドの命令の演算結果を他の命令フィールドの命令でも参照できる。
【0018】
このようなVLIWプロセッサで実行可能なプログラム(オブジェクトプログラム)、即ち長命令語中の各命令フィールドのフィールド番号によるレジスタ番号の修飾により、各命令フィールド毎に(ソース指定とデスティネーション指定のそれぞれについて)使用可能なレジスタファイルを制限することを可能とする命令語形式に従ったオブジェクトプログラムを生成するには、以下に述べる命令スケジュールとレジスタアロケーション(レジスタ割り当て)を行うコンパイル機能を用意すればよい。
【0019】
例えば、トップダウン方式で命令スケジュールを行う場合には、スケジュールの対象を命令Iであるとすると、当該命令Iが参照するソースオペランドを定義した命令(が既に配置されている命令フィールド)のフィールド番号を調べて、そのフィールド番号とソースオペランドがマッチしているか否か(3オペランドを扱う命令の例では、2つのソースオペランドを定義した2つの命令のフィールド番号で決まるデスティネーション先としてのレジスタファイルが一致しているか否か)を判断し、マッチしていれば、命令Iを、当該レジスタファイル内レジスタがソース指定可能な命令フィールドに配置し、マッチしていなければ、マッチするように、ソースオペランドをレジスタファイル間でコピーするコピー命令を生成して、そのコピー命令を、そのソース先とデスティネーション先で決まる命令フィールドに配置し、しかる後に、コピー命令のコピー先(デスティネーション先)レジスタファイルをソースレジスタファイルとして指定可能な命令フィールドに、命令Iを配置する。
【0020】
また、ボトムアップ方式で命令スケジュールを行う場合には、スケジュールの対象を命令Iであるとすると、当該命令Iが定義する仮想レジスタ(変数)を使用する全ての命令(が既に配置されている命令フィールド)のフィールド番号を調べ、上記仮想レジスタを使用する命令のフィールド番号で決まるソース指定可能なレジスタファイルが、その命令数に無関係に1つだけである(この状態を、仮想レジスタとフィールド番号がマッチしていると呼ぶ)か否かを判断し、仮想レジスタとフィールド番号がマッチしているならば、aを使う命令のフィールド番号で決まる命令フィールドに命令Iを配置し、マッチしていなければ、aを使う全ての命令のフィールド番号で決まるレジスタファイルにaが存在するように、aを目的のレジスタファイルにコピーするコピー命令を生成して、そのコピー命令を、そのソース先とデスティネーション先で決まる命令フィールドに配置し、しかる後に、コピー命令のコピー元レジスタファイルがデスティネーション指定可能な命令フィールドに、命令Iを配置する。
【0021】
以上の命令スケジュール処理を、トップダウン方式の場合であれば始端命令から順に終端命令まで行い、ボトムアップ方式であれば終端命令から始端命令まで行うと、スケジュールされた各命令をスキャンして、各変数(仮想レジスタ)が参照或いは定義される命令のフィールド番号から、全ての変数をレジスタファイル別にクラス分けし、各クラスの各変数について、クラス別に、そのクラスに対応するレジスタファイル内の物理レジスタを割り当てるレジスタアロケーション処理を行えばよい。
【0022】
【発明の実施の形態】
以下、本発明の実施の形態につき図面を参照して説明する。
[第1の実施形態]
図1は本発明の第1の実施形態に係るVLIWプロセッサの概略構成を示すブロック図である。
【0023】
図1に示すVLIWプロセッサは、例えば3オペランド命令形式の4つの命令フィールド#0〜#3を持つ4並列の長命令語(4並列VLIW)を実行する演算プロセッサであり、命令フェッチ機構101、命令デコード機構102、パイプラインレジスタ(PR)103〜105、演算器106-0〜106-3、レジスタファイル107-0,107-1、デコード(D)ステージのバイパス回路108-0,108-1、実行(E)ステージのバイパス回路109-0,109-1、及びラッチ回路110,111を備えている。
【0024】
命令フェッチ機構101は、(図示せぬ命令キャッシュ等から)パイプラインで長命令語をフェッチする(読み出す)Iステージ(命令フェッチステージ)を司る。
【0025】
命令デコード機構102は、命令フェッチ機構101によりフェッチされた長命令語の命令フィールド#0〜#3に配置されている各命令(単位命令)をパイプラインで解読するDステージ(命令デコードステージ)を司る。本実施形態では、3オペランドの命令形式の命令、即ち3つのレジスタ指定部(デスティネーションレジスタ指定部、第1及び第2ソースレジスタ指定部)を持つ命令(例えば演算命令)が用いられる。したがって、命令デコード機構102により演算命令がデコードされた場合、そのデコード結果には、演算結果の格納先を示すディスティネーションレジスタ番号(OP1)、及び演算に使用するソースオペランドが格納されているレジスタを指定する2つのソースレジスタ番号(第1及び第2ソースレジスタ番号OP2,OP3)が含まれる。
【0026】
パイプラインレジスタ103は、命令フェッチ機構101によりフェッチされた長命令語をDステージの期間保持しておくのに用いられ、パイプラインレジスタ104は、命令デコード機構102のデコード結果をDステージに後続するEステージ(命令実行ステージ)の期間保持しておくのに用いられ、パイプラインレジスタ105は、パイプラインレジスタ103の出力をEステージに後続するWステージ(書き込みステージ)の期間保持しておくのに用いられる。
【0027】
演算器106-0〜106-3は、長命令語中の命令フィールド#0〜#3の命令の指示する演算の実行(Eステージ)を司る。
レジスタファイル107-0(#0),107-1(#1)は、VLIWプロセッサでの演算結果を記憶するための、それぞれ2n 個のレジスタから構成される。レジスタファイル107-0内の2n 個のレジスタには、それぞれ0〜2n −1のレジスタ番号が割り当てられ、レジスタファイル107-1内の2n 個のレジスタには、それぞれ2n 〜2×2n −1のレジスタ番号、即ち2n 〜2n+1 −1のレジスタ番号が割り当てられている。ここで、レジスタ番号のビット数はn+1ビットであり、最上位ビットにより該当するレジスタが存在するレジスタファイルが指定され(“0”の場合はレジスタファイル107-0、“1”の場合はレジスタファイル107-1)、残りのnビット(下位nビット)により、そのレジスタファイル内のレジスタ位置が指定される。
【0028】
一方、図1のVLIWプロセッサで適用される長命令語中の各命令の3つのレジスタ指定部のビット長はnビットである。この場合、レジスタ指定部だけでは、レジスタファイル107-0,107-1により提供される合計2n+1 個のレジスタを指定することはできない。
【0029】
そこで本実施形態では、以下に述べるように、長命令語の各命令フィールド#0〜#3毎(で且つソース指定とデスティネーション指定の別毎)に使用可能なレジスタをレジスタファイル107-0または107-1の一方に制限し、その命令フィールドの命令中のnビットの各レジスタ指定部により、その制限されたレジスタファイル内のレジスタ位置(n+1ビットのレジスタ番号の最上位ビットを除くnビット)が示される構成とすることにより、レジスタ指定部のビット長がnビットでありながら、長命令語全体で2n+1 個のレジスタを指定できるようにしている。
【0030】
まず本実施形態では、命令フィールド#0,#1(フィールド番号0,1)の命令の指示する演算に用いるソースオペランドの参照先には、レジスタファイル107-0が固定的に割り当てられ、命令フィールド#2,#3(フィールド番号2,3)の命令の指示する演算に用いるソースオペランドの参照先には、レジスタファイル107-1が固定的に割り当てられる。
【0031】
また、命令フィールド#0,#2(フィールド番号0,2)の命令の指示する演算の実行結果、即ち演算器106-0〜106-3のうちの演算器106-0,106-2の演算結果の書き込み先には、レジスタファイル107-0が固定的に割り当てられ、命令フィールド#1,#3(フィールド番号1,3)の命令の指示する演算の実行結果、即ち演算器106-0〜106-3のうちの演算器106-1,106-3の演算結果の書き込み先には、レジスタファイル107-1が固定的に割り当てられる。
【0032】
以上の割り当ては、演算器106-0,106-2の出力をレジスタファイル107-0の入力ポートに、演算器106-1,106-3の出力をレジスタファイル107-0の入力ポートに、それぞれ(ラッチ回路111を介して)接続すると共に、レジスタファイル107-0の出力ポートを(バイパス回路108-0、ラッチ回路110、バイパス回路109-0を介して)演算器106-0,106-1の入力側に、レジスタファイル107-1の出力ポートを(バイパス回路108-1、ラッチ回路110、バイパス回路109-1を介して)演算器106-2,106-3の入力側に、それぞれ接続することで実現される。また演算器106-0,106-2の出力はバイパス回路108-0,109-0にも接続され、演算器106-1,106-3の出力はバイパス回路108-1,109-1にも接続される。
【0033】
以上の構成により本実施形態では、長命令語中の各命令のnビットのレジスタ指定部により、レジスタファイル内のレジスタ位置、即ちn+1ビットのレジスタ番号の最上位ビットを除くnビットが指定され、そのレジスタ位置のレジスタが存在するレジスタファイルの情報(レジスタファイル107-0または107-1のいずれに存在するかの情報)、即ちn+1ビットのレジスタ番号の最上位ビットは、命令位置(命令フィールド番号)により決定されることになる。
【0034】
これは、各命令フィールドの3つのレジスタ指定部(デスティネーションレジスタ指定部、第1及び第2ソースレジスタ指定部)で指定されるnビットのレジスタ番号(OP1,OP2,OP3)を命令位置(命令フィールド番号)により修飾して、n+1ビットのレジスタ番号として指定することと等価である。
【0035】
ここでは、長命令語の命令フィールド#0〜#3のフィールド番号0(“00”)〜3(“11”)を2ビット“B0 B1 ”で表すと、ビットB0 をソースレジスタ番号の修飾(レジスタファイル指定)に、ビットB1 をデスティネーションレジスタ番号の修飾(レジスタファイル指定)に用いていることになる。この場合、ソースレジスタとしては、ビットB0 が“0”の命令フィールド#0,#1ではレジスタファイル107-0内のレジスタが、ビットB0 が“1”の命令フィールド#2,#3ではレジスタファイル107-1内のレジスタが指定される。一方、デスティネーションレジスタとしては、ビットB1 が“0”の命令フィールド#0,#2ではレジスタファイル107-0内のレジスタが、ビットB1 が“1”の命令フィールド#1,#3ではレジスタファイル107-1内のレジスタが指定される。
【0036】
レジスタファイル107-0は、並列実行可能な命令数4の半分である2つの入力ポートと、入力ポート数の2倍の4つの出力ポート(P00,P01,P02,P03)とを持つ。レジスタファイル107-1もまた、並列実行可能な命令数4の半分である2つの入力ポートと、入力ポート数の2倍の4つの出力ポート(P10,P11,P12,P13)とを持つ。
【0037】
バイパス回路108-0はDステージに対応するもので、演算器106-0,106-1での演算(命令フィールド#0,#1の命令の指示する演算)に用いられる4つのソースオペランドとして、基本的には命令フィールド#0,#1の命令中の各ソースレジスタ指定部の示すレジスタファイル107-0内のレジスタから読み出されるデータを選択する。但し、ソースレジスタが演算器106-0または106-2の演算結果の格納先レジスタ(デスティネーションレジスタ)に一致するものについては、バイパス回路108-0は、そのレジスタのデータではなくて、その演算結果、即ち2サイクル前の命令の演算結果を選択するDステージバイパスを行う。
【0038】
バイパス回路108-1もバイパス回路108-0と同様にDステージに対応するもので、演算器106-2,106-3での演算(命令フィールド#2,#3の命令の指示する演算)に用いられる4つのソースオペランドとして、基本的には命令フィールド#2,#3の命令中の各ソースレジスタ指定部の示すレジスタファイル107-1内のレジスタから読み出されるデータを選択する。但し、ソースレジスタが演算器106-1または106-3の演算結果の格納先レジスタ(デスティネーションレジスタ)に一致するものについては、バイパス回路108-1は、そのレジスタのデータではなくて、その演算結果、即ち2サイクル前の命令の演算結果を選択するDステージバイパスを行う。
【0039】
バイパス回路109-0はEステージに対応するもので、演算器106-0,106-1での演算(命令フィールド#0,#1の命令の指示する演算)に用いられる4つのソースオペランドとして、基本的にはバイパス回路108-0からラッチ回路110を介して導かれるデータを選択する。但し、命令フィールド#0,#1の命令中の各ソースレジスタ指定部の示すソースレジスタのうち、演算器106-0または106-2の演算結果の格納先レジスタ(デスティネーションレジスタ)に一致するものについては、バイパス回路109-0は、そのレジスタのデータ(バイパス回路108-0からラッチ回路110を介して導かれるデータ)ではなくて、その演算結果、即ち1サイクル前(直前)の命令の演算結果を選択するEステージバイパスを行う。
【0040】
バイパス回路109-1もバイパス回路109-0と同様にEステージに対応するもので、演算器106-2,106-3での演算(命令フィールド#2,#3の命令の指示する演算)に用いられる4つのソースオペランドとして、基本的にはバイパス回路108-1からラッチ回路110を介して導かれるデータを選択する。但し、命令フィールド#2,#3の命令中の各ソースレジスタ指定部の示すソースレジスタのうち、演算器106-1または106-3の演算結果の格納先レジスタ(デスティネーションレジスタ)に一致するものについては、バイパス回路109-1は、そのレジスタのデータ(バイパス回路108-1からラッチ回路110を介して導かれるデータ)ではなくて、その演算結果(1サイクル前の命令の演算結果)を選択するEステージバイパスを行う。
【0041】
ラッチ回路110は、バイパス回路108-0,108-1によって選択されたソースオペランドをEステージの期間保持しておくのに用いられ、ラッチ回路111は、バイパス回路109-0,109-1によって選択されたソースオペランドをWステージの期間保持しておくのに用いられる。
【0042】
図2は、バイパス回路109-0,109-1の内部構成を、その周辺の構成と共に示す。
バイパス回路109-0は、演算器106-0,106-1の左側入力に対応して設けられたマルチプレクサ(MPX)119L0 ,119L1 と、演算器106-0,106-1の右側入力に対応して設けられたマルチプレクサ(MPX)119R0 ,119R1 とから構成される。
【0043】
マルチプレクサ119L0 ,119R0 ,119L1 ,119R1 は、レジスタファイル107-0の出力ポートP00,P01,P02,P03と1対1で対応しており、対応する出力ポートから読み出されて(図1中のバイパス回路108-0、ラッチ回路110を介して)導かれるデータ及び(ラッチ回路111を介して導かれる)演算器106-0,106-2の演算結果の1つを選択して演算器106-0,106-1の対応する入力側に出力する。
【0044】
バイパス回路109-1は、演算器106-2,106-3の左側入力に対応して設けられたマルチプレクサ(MPX)119L2 ,119L3 と、演算器106-2,106-3の右側入力に対応して設けられたマルチプレクサ(MPX)119R2 ,119R3 とから構成される。
【0045】
マルチプレクサ119L2 ,119R2 ,119L3 ,119R3 は、レジスタファイル107-1の出力ポートP10,P11,P12,P13と1対1で対応しており、対応する出力ポートから読み出されて(図1中のバイパス回路108-1、ラッチ回路110を介して)導かれるデータ及び(ラッチ回路111を介して導かれる)演算器106-1,106-3の演算結果の1つを選択して演算器106-2,106-3の対応する入力側に出力する。
【0046】
ラッチ回路111は、演算器106-0〜106-3の演算結果をWステージの期間保持しておくバッファ111-0〜111-3から構成される。バッファ111-0,111-2の保持データはレジスタファイル107-0への書き込みに用いられ、バッファ111-1,111-3の保持データはレジスタファイル107-1への書き込みに用いられる。
【0047】
なお、図2では、バイパス回路108-0,108-1及びラッチ回路110が省略されているが、そのハードウェア構成は、バイパス回路109-0,109-1及びラッチ回路111と同様である。
【0048】
次に、図1及び図2の構成における動作を説明する。
図1のVLIWプロセッサで適用されるパイプラインは、(1)命令フェッチが行われるIステージ、(2)命令デコードとデコード結果に基づくレジスタ読み出し(ソースオペランド読み出し)が行われるDステージ、(3)命令実行(演算)が行われるEステージ、(4)演算結果のレジスタへの書き込みが行われるWステージ、の4ステージで構成されるものとする。なお、命令デコード及びレジスタ読み出しや、レジスタ書き込みに2ステージを必要とする、5ステージや6ステージで構成されるパイプラインもある。
【0049】
まず、Iステージでは、命令フェッチ機構101により命令キャッシュ等から長命令語(VLIW)がフェッチされる。この命令フェッチ機構101によりフェッチされた長命令語はパイプラインレジスタ103に保持され、命令デコード機構102によるDステージでの命令デコードに供される。
【0050】
このDステージでは、命令デコード機構102によりデコードされた命令フィールド#i(i=0〜3)の命令が例えば演算命令の場合には、その命令のフィールド番号(2ビット)を“B0 B1 ”とすると、その上位側ビットB0 の値で決まるレジスタファイル(B0 =0であればレジスタファイル107-0、B0 =1であればレジスタファイル107-1)を対象に、その命令の第1及び第2ソースレジスタ指定部で指定される(当該レジスタファイル内の)レジスタからのデータ(ソースオペランド)読み出しが行われる。
【0051】
したがって、フィールド番号“B0 B1 ”中のB0 が“0”、即ちフィールド番号が0(“00”),1(“01”)の命令フィールド#0,#1の命令についてはレジスタファイル107-0を対象に、B0 が“1”、即ちフィールド番号が2(“10”),3(“11”)の命令フィールド#2,#3の命令についてはレジスタファイル107-1を対象に、それぞれその命令フィールドの第1及び第2ソースレジスタ指定部で指定される(当該レジスタファイル内の)レジスタからのソースオペランド読み出しが行われる。
【0052】
このことは、各命令フィールド#0〜#3の第1及び第2ソースレジスタ指定部の示すnビットのレジスタ番号(OP2,OP3)の上位に、その命令フィールド#0〜#3のフィールド番号“B0 B1 ”中のビットB0 を付加するレジスタ番号修飾が行われ、そのB0 が付加されたn+1ビットのソースレジスタ番号(第1及び第2ソースレジスタ番号)によりソースレジスタが指定されて、そのソースレジスタからのデータ読み出しが行われることと等価である。ここで、n+1ビットのソースレジスタ番号の最上位ビット、即ちビットB0 は“0”でレジスタファイル107-0を、“1”でレジスタファイル107-1を指定し、当該最上位ビットを除くnビット、即ちソースレジスタ指定部の示すnビットは、そのレジスタファイル内のソースレジスタ位置を示す。
【0053】
なお、本実施形態では、第1ソースレジスタ指定部により、演算器の左側入力用のソースオペランドのレジスタ指定が、第2ソースレジスタ指定部により、演算器の右側入力用のソースオペランドのレジスタ指定が行われるものとする。
【0054】
以上の命令フィールドのフィールド番号によるソースレジスタ番号の修飾について、主としてフィールド番号が1(“01”)の命令フィールド#1を例に、後述するデスティネーションレジスタ番号の修飾と共に図3に示す。このレジスタ番号修飾により、命令中のソースレジスタ指定部がnビット長であっても、長命令語全体で2n+1 個のレジスタを扱うことができる。
【0055】
さて、命令フィールド#0,#1の命令の第1ソースレジスタ指定部で指定された(レジスタファイル107-0内の)レジスタからの読み出しデータは、演算器106-0,106-1の左側入力に対応するレジスタファイル107-0の出力ポートP00,P02から、第2ソースレジスタ指定部で指定された(レジスタファイル107-0内の)レジスタからの読み出しデータは、演算器106-0,106-1の右側入力に対応するレジスタファイル107-0の出力ポートP01,P03から、それぞれ出力されてバイパス回路108-0の対応する入力ポートに導かれる。
【0056】
同様に、命令フィールド#2,#3の命令の第1ソースレジスタ指定部で指定された(レジスタファイル107-1内の)レジスタからの読み出しデータは、演算器106-2,106-3の左側入力に対応するレジスタファイル107-1の出力ポートP10,P12から、第2ソースレジスタ指定部で指定された(レジスタファイル107-1内の)レジスタからの読み出しデータは、演算器106-2,106-3の右側入力に対応するレジスタファイル107-1の出力ポートP11,P13から、それぞれ出力されてバイパス回路108-1の対応する入力ポートに導かれる。
【0057】
バイパス回路108-0には、命令デコード機構102によりデコードされた現在Dステージにある長命令語中のデコード結果のうちの命令フィールド#0,#1の第1及び第2ソースレジスタ指定部のデコード結果、即ち第1及び第2ソースレジスタ番号(の下位n−1ビット)と、パイプラインレジスタ105に保持されている現在Wステージにある長命令語中のデコード結果のうちの命令フィールド#0,#2のデスティネーションレジスタ指定部のデコード結果、即ちデスティネーションレジスタ番号(の下位n−1ビット)とが導かれる。
【0058】
一方、バイパス回路108-1には、命令デコード機構102によりデコードされた現在Dステージにある長命令語中のデコード結果のうちの命令フィールド#2,#3の第1及び第2ソースレジスタ指定部のデコード結果、即ち第1及び第2ソースレジスタ番号(の下位n−1ビット)と、パイプラインレジスタ105に保持されている現在Wステージにある長命令語中のデコード結果のうちの命令フィールド#1,#3のデスティネーションレジスタ指定部のデコード結果、即ちデスティネーションレジスタ番号(の下位n−1ビット)とが導かれる。
【0059】
バイパス回路108-0は、Dステージにある命令の命令フィールド#0,#1で指定される第1及び第2ソースレジスタ番号(の下位n−1ビット)を、Wステージにある命令(Dステージにある命令より2サイクル前の命令)の命令フィールド#0,#2で指定されるデスティネーションレジスタ番号(の下位n−1ビット)とそれぞれ比較する。
【0060】
そしてバイパス回路108-0は、デスティネーションレジスタ番号に一致していないソースレジスタ番号の指定するソースオペランドとして、レジスタファイル107-0内の当該ソースレジスタ番号の指定するレジスタからの読み出しデータを選択する。
【0061】
またバイパス回路108-0は、デスティネーションレジスタ番号に一致しているソースレジスタ番号の指定するソースオペランドとして、(ラッチ回路111を介して導かれる)当該デスティネーションレジスタ番号の指定するレジスタへの書き込みに用いられる演算器(演算器106-0または106-2)の演算結果を選択するDステージバイパスを行う。もし、このDステージバイパスが行われないならば、2サイクル前の長命令語(の命令フィールド#0または#2)の指定により実行された演算器106-0または106-2の演算結果がレジスタファイル107-0内のデスティネーションレジスタ番号の指定するレジスタに書き込まれるまでは、現在Dステージにある命令の長命令語(の命令フィールド#0または#1)で指定される当該レジスタからのデータ読み出しを待たなければならず、パイプラインの流れが乱れる。
【0062】
一方、バイパス回路108-1は、Dステージにある命令の命令フィールド#2,#3で指定される第1及び第2ソースレジスタ番号(の下位n−1ビット)を、Wステージにある長命令語(Dステージにある長命令語より2サイクル前の長命令語)の命令フィールド#1,#3で指定されるデスティネーションレジスタ番号(の下位n−1ビット)とそれぞれ比較する。
【0063】
そしてバイパス回路108-1は、デスティネーションレジスタ番号に一致していないソースレジスタ番号の指定するソースオペランドとして、レジスタファイル107-1内の当該ソースレジスタ番号の指定するレジスタからの読み出しデータを選択する。
【0064】
またバイパス回路108-1は、デスティネーションレジスタ番号に一致しているソースレジスタ番号の指定するソースオペランドとして、(ラッチ回路111を介して導かれる)当該デスティネーションレジスタ番号の指定するレジスタへの書き込みに用いられる演算器(演算器106-1または106-3)の演算結果を選択するDステージバイパスを行う。
【0065】
バイパス回路108-0により選択された、Dステージにある長命令語の命令フィールド#0,#1の指定する4つのソースオペランド、及びバイパス回路108-1により選択された、Dステージにある長命令語の命令フィールド#2,#3の指定する4つのソースオペランドは、ラッチ回路110に保持されて、Eステージの期間、対応するバイパス回路109-0,109-1に導かれる。
【0066】
このとき、当該長命令語に対する命令デコード機構102でのデコード結果がパイプラインレジスタ104に移される。同時に、このパイプラインレジスタ104に保持されていた、1サイクル前の長命令語のデコード結果はパイプラインレジスタ105に移される。
【0067】
バイパス回路109-0には、パイプラインレジスタ104に保持されている現在Eステージにある長命令語中のデコード結果のうちの命令フィールド#0,#1の第1及び第2ソースレジスタ指定部のデコード結果、即ち第1及び第2ソースレジスタ番号と、パイプラインレジスタ105に保持されている現在Wステージにある長命令語中のデコード結果のうちの命令フィールド#0,#2のデスティネーションレジスタ指定部のデコード結果、即ちデスティネーションレジスタ番号とが導かれる。
【0068】
一方、バイパス回路109-1には、パイプラインレジスタ104に保持されている現在Eステージにある長命令語中のデコード結果のうちの命令フィールド#2,#3の第1及び第2ソースレジスタ指定部のデコード結果、即ち第1及び第2ソースレジスタ番号(の下位n−1ビット)と、パイプラインレジスタ105に保持されている現在Wステージにある長命令語中のデコード結果のうちの命令フィールド#1,#3のデスティネーションレジスタ指定部のデコード結果、即ちデスティネーションレジスタ番号(の下位n−1ビット)とが導かれる。
【0069】
バイパス回路109-0は、Eステージにある命令の命令フィールド#0,#1で指定される第1及び第2ソースレジスタ番号(の下位n−1ビット)を、Wステージにある命令(Eステージにある命令の直前の命令)の命令フィールド#0,#2で指定されるデスティネーションレジスタ番号(の下位n−1ビット)とそれぞれ比較する。
【0070】
そしてバイパス回路109-0は、デスティネーションレジスタ番号に一致していないソースレジスタ番号の指定するソースオペランドとして、バイパス回路108-0により選択されてラッチ回路110を介して導かれる該当するソースオペランドを選択する。
【0071】
またバイパス回路109-0は、デスティネーションレジスタ番号に一致しているソースレジスタ番号の指定するソースオペランドとして、(ラッチ回路111を介して導かれる)当該デスティネーションレジスタ番号の指定するレジスタへの書き込みに用いられる演算器(演算器106-0または106-2)の演算結果を選択するEステージバイパスを行う。
【0072】
一方、バイパス回路109-1は、Eステージにある命令の命令フィールド#2,#3で指定される第1及び第2ソースレジスタ番号(の下位n−1ビット)を、Wステージにある命令(Eステージにある命令の直前の命令)の命令フィールド#1,#3で指定されるデスティネーションレジスタ番号(の下位n−1ビット)とそれぞれ比較する。
【0073】
そしてバイパス回路109-1は、デスティネーションレジスタ番号に一致していないソースレジスタ番号の指定するソースオペランドとして、バイパス回路108-1により選択されてラッチ回路110を介して導かれる該当するソースオペランドを選択する。
【0074】
またバイパス回路109-1は、デスティネーションレジスタ番号に一致しているソースレジスタ番号の指定するソースオペランドとして、(ラッチ回路111を介して導かれる)当該デスティネーションレジスタ番号の指定するレジスタへの書き込みに用いられる演算器(演算器106-1または106-3)の演算結果を選択するEステージバイパスを行う。
【0075】
以上のバイパス回路109-0,109-1の選択動作の詳細を説明する。
まず、バイパス回路109-0内のマルチプレクサ119L0 ,119L1 は、Eステージにある命令の命令フィールド#0,#1で指定される第1ソースレジスタ番号(の下位n−1ビット)が、Wステージにある命令の命令フィールド#0及び#2で指定されるデスティネーションレジスタ番号(の下位n−1ビット)のいずれにも一致していない場合には、バイパス回路108-0により演算器106-0,106-1の左側入力用として選択されてラッチ回路110を介して導かれるソースオペランドを選択する。
【0076】
またマルチプレクサ119L0 ,119L1 は、Eステージにある命令の命令フィールド#0,#1で指定される第1ソースレジスタ番号(の下位n−1ビット)が、Wステージにある命令の命令フィールド#0で指定されるデスティネーションレジスタ番号(の下位n−1ビット)に一致している場合には、ラッチ回路111内のバッファ111-0を介して導かれる演算器106-0の演算結果を選択し、Wステージにある命令の命令フィールド#2で指定されるデスティネーションレジスタ番号(の下位n−1ビット)に一致している場合には、ラッチ回路111内のバッファ111-2を介して導かれる演算器106-2の演算結果を選択する。
【0077】
マルチプレクサ119L0 ,119L1 により選択されたデータ(ソースオペランド)は演算器106-0,106-1の左側入力(L入力)に供給される。
次に、バイパス回路109-0内のマルチプレクサ119R0 ,119R1 は、Eステージにある命令の命令フィールド#0,#1で指定される第2ソースレジスタ番号(の下位n−1ビット)が、Wステージにある命令の命令フィールド#0及び#2で指定されるデスティネーションレジスタ番号(の下位n−1ビット)のいずれにも一致していない場合には、バイパス回路108-0により演算器106-0,106-1の右側入力用として選択されてラッチ回路110を介して導かれるソースオペランドを選択する。
【0078】
またマルチプレクサ119R0 ,119R1 は、Eステージにある命令の命令フィールド#0,#1で指定される第2ソースレジスタ番号(の下位n−1ビット)が、Wステージにある命令の命令フィールド#0で指定されるデスティネーションレジスタ番号(の下位n−1ビット)に一致している場合には、ラッチ回路111内のバッファ111-0を介して導かれる演算器106-0の演算結果を選択し、Wステージにある命令の命令フィールド#2で指定されるデスティネーションレジスタ番号(の下位n−1ビット)に一致している場合には、ラッチ回路111内のバッファ111-2を介して導かれる演算器106-2の演算結果を選択する。
【0079】
マルチプレクサ119R0 ,119R1 により選択されたデータ(ソースオペランド)は演算器106-0,106-1の右側入力(R入力)に供給される。
一方、バイパス回路109-1内のマルチプレクサ119L2 ,119L3 は、Eステージにある命令の命令フィールド#2,#3で指定される第1ソースレジスタ番号(の下位n−1ビット)が、Wステージにある命令の命令フィールド#1及び#3で指定されるデスティネーションレジスタ番号(の下位n−1ビット)のいずれにも一致していない場合には、バイパス回路108-1により演算器106-2,106-3の左側入力用として選択されてラッチ回路110を介して導かれるソースオペランドを選択する。
【0080】
またマルチプレクサ119L2 ,119L3 は、Eステージにある命令の命令フィールド#2,#3で指定される第1ソースレジスタ番号(の下位n−1ビット)が、Wステージにある命令の命令フィールド#1で指定されるデスティネーションレジスタ番号(の下位n−1ビット)に一致している場合には、ラッチ回路111内のバッファ111-1を介して導かれる演算器106-1の演算結果を選択し、Wステージにある命令の命令フィールド#3で指定されるデスティネーションレジスタ番号(の下位n−1ビット)に一致している場合には、ラッチ回路111内のバッファ111-3を介して導かれる演算器106-3の演算結果を選択する。
【0081】
マルチプレクサ119L2 ,119L3 により選択されたデータ(ソースオペランド)は演算器106-2,106-3の左側入力(L入力)に供給される。
次に、バイパス回路109-1内のマルチプレクサ119R2 ,119R3 は、Eステージにある命令の命令フィールド#2,#3で指定される第2ソースレジスタ番号(の下位n−1ビット)が、Wステージにある命令の命令フィールド#1及び#3で指定されるデスティネーションレジスタ番号(の下位n−1ビット)のいずれにも一致していない場合には、バイパス回路108-1により演算器106-2,106-3の右側入力用として選択されてラッチ回路110を介して導かれるソースオペランドを選択する。
【0082】
またマルチプレクサ119R2 ,119R3 は、Eステージにある命令の命令フィールド#2,#3で指定される第2ソースレジスタ番号(の下位n−1ビット)が、Wステージにある命令の命令フィールド#1で指定されるデスティネーションレジスタ番号(の下位n−1ビット)に一致している場合には、ラッチ回路111内のバッファ111-1を介して導かれる演算器106-1の演算結果を選択し、Wステージにある命令の命令フィールド#3で指定されるデスティネーションレジスタ番号(の下位n−1ビット)に一致している場合には、ラッチ回路111内のバッファ111-3を介して導かれる演算器106-3の演算結果を選択する。
【0083】
マルチプレクサ119R2 ,119R3 により選択されたデータ(ソースオペランド)は、演算器106-2,106-3の右側入力(R入力)に供給される。
演算器106-0,106-1は、バイパス回路109-0から供給されるソースオペランド間のデータの演算を行い、演算器106-2,106-3は、バイパス回路109-1から供給されるソースオペランド間のデータの演算を行う。演算器106-0〜106-3の演算結果はラッチ回路111(内のバッファ111-0〜111-3)に保持される。
【0084】
このとき、演算器106-0〜106-3での演算を指定した長命令語のデコード結果(現在Eステージにある長命令語のデコード結果)がパイプラインレジスタ104からパイプラインレジスタ105に移され、同時に当該長命令語の直後の長命令語に対する命令デコード機構102でのデコード結果(現在Dステージにある長命令語のデコード結果)がパイプラインレジスタ104に移される。
【0085】
ラッチ回路111(内のバッファ111-0〜111-3)に保持された演算器106-0〜106-3の演算結果のうち、演算器106-0,106-2の演算結果(命令フィールド#0,#2の命令の演算結果)はレジスタファイル107-0の各入力ポートに、演算器106-1,106-3の演算結果(命令フィールド#1,#3の命令の演算結果)はレジスタファイル107-1の各入力ポートに、それぞれ導かれる。
【0086】
レジスタファイル107-0に導かれた演算器106-0,106-2の演算結果は、当該レジスタファイル107-0内のレジスタのうち、パイプラインレジスタ105に保持されている現在Wステージにある長命令語中のデコード結果に含まれている対応する命令フィールド#0,#2のデスティネーションレジスタ指定部の指定するレジスタに書き込まれる。
【0087】
また、レジスタファイル107-1に導かれた演算器106-1,106-3の演算結果は、当該レジスタファイル107-1内のレジスタのうち、パイプラインレジスタ105に保持されている現在Wステージにある長命令語中のデコード結果に含まれている対応する命令フィールド#1,#3のデスティネーションレジスタ指定部の指定するレジスタに書き込まれる。
【0088】
このように、ラッチ回路111(内のバッファ111-0〜111-3)に保持された演算器106-0〜106-3の演算結果は、パイプラインレジスタ105に保持されている現在Wステージにある長命令語中のデコード結果のうちの命令フィールド#0〜#3のデスティネーションレジスタ指定部と、その命令フィールド#0〜#3のフィールド番号“B0 B1 ”の下位側ビットB1 とで決まるn+1ビットのデスティネーションレジスタ番号の示すレジスタに書き込まれる。
【0089】
即ち本実施形態では、図3に示すように、命令フィールド#0〜#3のデスティネーションレジスタ指定部の示すnビットのレジスタ番号(OP1)の上位に、その命令フィールド#0〜#3のフィールド番号“B0 B1 ”のビットB1 が付加されるレジスタ番号修飾が行われ、そのビットB1 が付加されたn+1ビットのデスティネーションレジスタ番号により、(レジスタ番号0〜2n+1 −1の)2n+1 個のデスティネーションレジスタのいずれかが指定され、そのデスティネーションレジスタへの演算器106-0〜106-3の演算結果の書き込みが行われる。ここで、n+1ビットのデスティネーションレジスタ番号の最上位ビット、即ちビットB1 は“0”でレジスタファイル107-0を、“1”でレジスタファイル107-1を指定し、当該最上位ビットを除く下位nビット、即ちデスティネーションレジスタ指定部の示すnビット(OP1)は、そのレジスタファイル内のデスティネーションレジスタ位置を示す。
【0090】
したがって、ビットB1 が“0”の命令フィールド、即ちフィールド番号が0(“00”),2(“10”)の命令フィールド#0,#2の命令に対しては、レジスタファイル107-0を対象に、当該命令のデスティネーションレジスタ指定部で指定されたレジスタへの、当該命令の演算結果(演算器106-0,106-2の演算結果)の書き込みが行われる。また、ビットB1 が“1”の命令フィールド、即ちフィールド番号が1(“01”),3(“11”)の命令フィールド#1,#3の命令に対しては、レジスタファイル107-1を対象に、当該命令のデスティネーションレジスタ指定部で指定されたレジスタへの、当該命令の演算結果(演算器106-1,106-3の演算結果)の書き込みが行われる。
【0091】
以上に述べたように本実施形態においては、2n 個のレジスタからなる2つのレジスタファイル107-0,107-1を設け、4並列の長命令語中の各命令フィールド#0〜#3のフィールド番号によるレジスタ番号の修飾を行い、各命令フィールド毎に(ソース指定とデスティネーション指定のそれぞれについて)使用可能なレジスタをレジスタファイル107-0または107-1の一方に制限することにより、レジスタ指定部のビット長を(従来と同じ)nビットとしながらも(即ち長命令語長を伸ばさないにも拘らず)、長命令語全体として、使用可能なレジスタ数を従来の2n 個から、その2倍の2n+1 個とすることができる。
【0092】
また本実施形態においては、レジスタファイル107-0,107-1の入出力ポート数を、レジスタ数が従来と同じ2n 個でありながら、入力ポート数2、出力ポート数4と、従来の半分にすることができる。
【0093】
以上に述べたレジスタファイル107-0,107-1と長命令語の各命令フィールド#0〜#3(のフィールド番号“00”〜“11”)との間の関係、具体的には命令フィールド#0〜#3と当該命令フィールド#0〜#3の命令が参照するレジスタファイル(ソース側レジスタファイル)との関係、及び命令フィールド#0〜#3と当該命令フィールド#0〜#の命令の指定する演算結果の書き込み先レジスタファイル(デスティネーション側レジスタファイル)との関係を図4に示す。なお、図4ではレジスタファイル107-0と107-1がいずれも2つ示されているが、参照時と結果書き込み時の関係を表すためであり、物理的には図1及び図2に示したように1つだけ存在する。
【0094】
この他、本実施形態においては、各命令フィールド毎に使用可能なレジスタを制限したことから、バイパス回路108-0,108-1の1演算器当たりの入力ポート数(マルチプレクサの入力数)を、従来の5から3に減らすことができ、ハードウェア構成の簡略化が図れる。
【0095】
なお、以上に述べた実施形態では、図2からも明らかなように、演算器106-0,106-1での演算(4並列の長命令語の命令フィールド#0,#1の命令の指定する演算)で使用可能なソースレジスタはレジスタファイル107-0のレジスタに、演算器106-2,106-3での演算(命令フィールド#2,#3の命令の指定する演算)で使用可能なソースレジスタはレジスタファイル107-1にそれぞれ制限され、演算器106-0,106-2の演算結果(命令フィールド#0,#2の命令の指定する演算の演算結果)の書き込み先として使用可能なデスティネーションレジスタはレジスタファイル107-0のレジスタに、演算器106-1,106-3の演算結果(命令フィールド#1,#3の命令の指定する演算の演算結果)の書き込み先として使用可能なデスティネーションレジスタはレジスタファイル107-1のレジスタにそれぞれ制限されている場合について説明したが、これに限るものではない。
【0096】
そこで、各命令フィールド毎に(ソース指定とデスティネーション指定のそれぞれについて)使用可能なレジスタの制限が、以上の実施形態とは異なる第2の実施形態について図面を参照して説明する。
[第2の実施形態]
図5は本発明の第2の実施形態に係るVLIWプロセッサの概略構成を図2と同様の形式で示すブロック図であり、図2と同一部分には同一符号を付してある。
【0097】
図5において、バイパス回路209-0は、演算器106-0,106-1の左側入力に対応して設けられたマルチプレクサ(MPX)219L0 ,219L1 と、演算器106-0,106-1の右側入力に対応して設けられたマルチプレクサ(MPX)219R0 ,219R1 とから構成される。
【0098】
バイパス回路209-0内のマルチプレクサ219L0 ,219L1 ,219R1 は、レジスタファイル107-0の出力ポートP00,P02,P03と1対1で対応しており、対応する出力ポートから読み出されるデータ及び(ラッチ回路111を介して導かれる)演算器106-0,106-2の演算結果の1つを選択して演算器106-0,106-1の対応する入力側に出力する。
【0099】
一方、バイパス回路209-0内のマルチプレクサ219R0 はレジスタファイル107-1の出力ポートP13と1対1で対応しており、当該出力ポートP13から読み出されるデータ及び(ラッチ回路111を介して導かれる)演算器106-1,106-3の演算結果の1つを選択して演算器106-0の右側入力に出力する。
【0100】
バイパス回路209-1は、演算器106-2,106-3の左側入力に対応して設けられたマルチプレクサ(MPX)229L2 ,229L3 と、演算器106-2,106-3の右側入力に対応して設けられたマルチプレクサ(MPX)229R2 ,229R3 とから構成される。
【0101】
バイパス回路209-1内のマルチプレクサ229L2 ,229R2 ,229L3 は、レジスタファイル107-1の出力ポートP10,P11,P12と1対1で対応しており、対応する出力ポートから読み出されるデータ及び(ラッチ回路111を介して導かれる)演算器106-1,106-3の演算結果の1つを選択して演算器106-2,106-3の対応する入力側に出力する。
【0102】
一方、バイパス回路209-1内のマルチプレクサ229R3 はレジスタファイル107-0の出力ポートP01と1対1で対応しており、当該出力ポートP01から読み出されるデータ及び(ラッチ回路111を介して導かれる)演算器106-0,106-2の演算結果の1つを選択して演算器106-3の右側入力に出力する。
【0103】
この図5の構成が、図2の構成と異なる点は、図5中で演算器106-0,106-3の右側入力に対応するマルチプレクサ219R0 ,219R3 の各入力が、図2中で演算器106-0,106-3の右側入力に対応するマルチプレクサ119R0 ,119R3 の各入力と逆になっていることである。
【0104】
この図5の構成では、命令フィールド#0〜#3を持つ4並列の長命令語(4並列VLIW)のフィールド番号を“B0 B1 ”とすると、デスティネーションレジスタ番号は、図6に示すように、命令フィールド#0〜#3の命令のデスティネーションレジスタ指定部の示すレジスタ番号(OP1)の上位にビットB1 が付加されたものとなる。また、第1ソースレジスタ番号は、図6に示すように、命令フィールド#0〜#3の命令の第1ソースレジスタ指定部の示すレジスタ番号(OP2)の上位にビットB0 が付加されたものとなる。ここまでは、前記第1の実施形態と同様である。
【0105】
次に第2ソースレジスタ番号は、図6に示すように、命令フィールドのフィールド番号によって異なり、フィールド番号が“00”(=0),“11”(=3)の命令フィールド#0,#3の命令では、その命令の第2ソースレジスタ指定部の示すレジスタ番号(OP3)の上位にビットB0 のレベル反転ビットが付加されたものとなり、フィールド番号が“01”(=1),“10”(=2)の命令フィールド#1,#2の命令では、その命令の第2ソースレジスタ指定部の示すレジスタ番号(OP3)の上位にビットB0 が付加されたものとなる。
【0106】
この場合、本実施形態におけるレジスタファイル107-0,107-1と長命令語の各命令フィールド#0〜#3(のフィールド番号“00”〜“11”)との間の関係、具体的には命令フィールド#0〜#3と当該命令フィールド#0〜#3の命令が参照するレジスタファイル(ソース側レジスタファイル)との関係、及び命令フィールド#0〜#3と当該命令フィールド#0〜#の命令の指定する演算結果の格納先レジスタファイル(デスティネーション側レジスタファイル)との関係は図7のようになる。
【0107】
このように、4並列の長命令語の命令フィールド#0〜#3(のフィールド番号“00”〜“11”)の命令で指定された演算の演算結果の書き込み先として、命令フィールド#0,#2についてはレジスタファイル107-0(内のレジスタ)に、命令フィールド#1,#3についてはレジスタファイル107-1(内のレジスタ)に制限すると共に、命令フィールド#0〜#3の命令の参照先を、命令フィールド#0,#3については2つのレジスタファイル107-0,107-1(内のレジスタ)に、命令フィールド#1についてはレジスタファイル107-0(内のレジスタ)に、命令フィールド#2についてはレジスタファイル107-1(内のレジスタ)に制限することでも、レジスタ指定部のビット長を(従来と同じ)nビットとしながらも(即ち長命令語長を伸ばさないにも拘らず)、長命令語全体として、使用可能なレジスタ数を従来の2n 個から、その2倍の2n+1 個とすることができる。
【0108】
なお、以上に述べた第1及び第2の実施形態では、長命令語の命令フィールド#0〜#3のフィールド番号“B0 B1 ”の上位側ビットB0 をソースレジスタ番号修飾に、下位側ビットB1 をデスティネーションレジスタ番号修飾に用いる場合について説明したが、これに限るものではなく、B0 をデスティネーションレジスタ番号修飾に、B1 をソースレジスタ番号修飾に用いるようにしても構わない。この場合、命令フィールド#0〜#3とレジスタファイル107-0,107-1との関係は、ソース指定とデスティネーション指定とで、以上の実施形態の逆になり、VLIWプロセッサの構成(例えば第1の実施形態では図2の構成、第2の実施形態では図5の構成)もそれに適合するように変更する必要がある。
【0109】
また、以上に述べた第1及び第2の実施形態では、本発明を、命令フィールド#0〜#3を持つ4並列の長命令語を実行するVLIWプロセッサに適用した場合について説明したが、本発明は、例えば命令フィールド#0〜#7(フィールド番号“000”〜“111”)を持つ8並列の長命令語を実行するVLIWプロセッサ、更には命令フィールド#0〜#15(フィールド番号“0000”〜“1111”)を持つ16並列の長命令語を実行するVLIWプロセッサ等にも適用可能である。そこでまず、本発明を8並列の長命令語を実行するVLIWプロセッサに適用した第3の実施形態につき説明する。
[第3の実施形態]
図8は、本発明を8並列の長命令語を実行するVLIWプロセッサに適用した第3の実施形態におけるレジスタファイルと長命令語の各命令フィールドとの間の関係を示す。
【0110】
図8において、4つのレジスタファイル207-0(#0)〜207-3(#3)は、図1中のレジスタファイル107-0,107-1と同様に2n 個のレジスタから構成される。レジスタファイル207-0内の2n 個のレジスタには0〜2n −1のレジスタ番号が、レジスタファイル207-1内の2n 個のレジスタには2n 〜2×2n −1のレジスタ番号、即ち2n 〜2n+1 −1のレジスタ番号が、レジスタファイル207-2内の2n 個のレジスタには2n+1 〜3×2n −1のレジスタ番号が、そしてレジスタファイル207-3内の2n 個のレジスタには3×2n 〜4×2n −1のレジスタ番号、即ち3×2n 〜2n+2 −1のレジスタ番号が、それぞれ割り当てられている。
【0111】
本実施形態においては、8並列の長命令語の各命令フィールド#0〜#7の命令は3オペランド形式の命令(演算命令の場合)であり、デスティネーションレジスタ指定部(OP1)のビット長は(前記第1及び第2の実施形態の場合より1ビット多い)n+1ビット、第1及び第2ソースレジスタ指定部(OP2,OP3)のビット長は(前記第1及び第2の実施形態の場合と同じ)nビットである。デスティネーションレジスタ指定部(OP1)の最上位ビット(B)の値は、命令フィールド(のフィールド番号)によって予め定められており、フィールド#0〜#3(フィールド番号“000”〜“011”)では“0”、フィールド#4〜#7(フィールド番号“100”〜“111”)では“1”である。
【0112】
ここで、各命令フィールド#i(i=0〜7)の命令(演算命令)の演算結果の書き込み先のレジスタファイルは、その命令フィールド#iのフィールド番号(3ビット)を“B0 B1 B2 ”とすると、そのフィールド番号中の最下位ビットB2 と、その命令フィールド中のn+1ビットのデスティネーションレジスタ指定部(OP1)の最上位ビット(B)からなる2ビット“B2 B”により決定される。
【0113】
また、決定されたレジスタファイル内の書き込み先レジスタは、デスティネーションレジスタ指定部(OP1)の最上位ビットを除くnビットにより指定される。即ち命令フィールド#iの命令(演算命令)の演算結果の書き込み先レジスタは、図9に示すように、その命令のデスティネーションレジスタ指定部で指定されるn+1ビットのレジスタ番号(OP1)の上位に、その命令フィールドのフィールド番号の最下位ビットB2 が付加されたn+2ビットのデスティネーションレジスタ番号により指定される。
【0114】
一方、命令フィールド#iの命令(演算命令)の参照先のレジスタファイルは、そのフィールド番号中の上位側の2ビット“B0 B1 ”により決定される。また、決定されたレジスタファイル内の参照先レジスタは、その命令フィールド#i中のnビットの第1及び第2ソースレジスタ指定部(OP2,OP3)により指定される。
【0115】
即ち命令フィールド#iの命令(演算命令)の演算で参照する2つのソースレジスタは、図9に示すように、その命令の第1及び第2ソースレジスタ指定部で指定されるnビットのレジスタ番号(OP2,OP3)の上位に、その命令フィールドのフィールド番号の上位側2ビット“B0 B1 ”が付加されたn+2ビットのソースレジスタ番号(第1及び第2ソースレジスタ番号)により指定される。
【0116】
本実施例において、上記n+2ビットのレジスタ番号の上位2ビットは、“00”でレジスタファイル207-0を、“01”でレジスタファイル207-1を、“10”でレジスタファイル207-2を、“11”でレジスタファイル207-3を指定し、当該上位2ビットを除くnビットは、そのレジスタファイル内のレジスタ位置を示す。
【0117】
したがって、図8に示すように、フィールド番号“B0 B1 B2 ”中の上位側2ビット“B0 B1 ”が“00”、即ちフィールド番号が0(“000”),1(“001”)の命令フィールド#0,#1の命令についてはレジスタファイル207-0を対象に、“B0 B1 ”が“01”、即ちフィールド番号が2(“010”),3(“011”)の命令フィールド#2,#3の命令についてはレジスタファイル207-1を対象に、“B0 B1 ”が“10”、即ちフィールド番号が4(“100”),5(“101”)の命令フィールド#4,#5の命令についてはレジスタファイル207-2を対象に、そして“B0 B1 ”が“11”、即ちフィールド番号が6(“110”),7(“111”)の命令フィールド#6,#7の命令についてはレジスタファイル207-3を対象に、それぞれその命令フィールドの第1及び第2ソースレジスタ指定部で指定される(当該レジスタファイル内の)レジスタからのソースオペランド読み出しが行われる。
【0118】
また、フィールド番号“B0 B1 B2 ”中の最下位ビットB2 が“0”でデスティネーションレジスタ指定部の最上位ビットBが“0”の命令フィールド、即ちフィールド番号が0(“000”),2(“010”)の命令フィールド#0,#2の命令についてはレジスタファイル207-0を対象に、ビットB2 が“0”でビットBが“1”の命令フィールド、即ちフィールド番号が4(“100”),6(“110”)の命令フィールド#4,#6の命令についてはレジスタファイル207-1を対象に、ビットB2 が“1”でビットBが“0”の命令フィールド、即ちフィールド番号が1(“001”),3(“011”)の命令フィールド#1,#3の命令についてはレジスタファイル207-2を対象に、そしてビットB2 が“1”でビットBが“1”の命令フィールド、即ちフィールド番号が5(“101”),7(“111”)の命令フィールド#5,#7の命令についてはレジスタファイル207-3を対象に、当該命令のデスティネーションレジスタ指定部で指定されたレジスタへの、当該命令の演算結果の書き込みが行われる。
【0119】
以上に述べたように本実施形態においては、2n 個のレジスタからなる4つのレジスタファイル207-0〜207-3を設け、8並列の長命令語中の各命令フィールド#0〜#7のフィールド番号によるレジスタ番号の修飾を行い、各命令フィールド毎に(ソース指定とデスティネーション指定のそれぞれについて)使用可能なレジスタをレジスタファイル207-0〜206-3のいずれかに制限することにより、デスティネーションレジスタ指定部のビット長をn+1ビット、第1及び第2ソースレジスタ指定部のビット長をnビットとしながらも、長命令語全体として、使用可能なレジスタ数を2n+2 個とすることができる。
【0120】
しかも本実施形態においては、レジスタファイル207-0〜207-3の入出力ポート数を、レジスタ数が従来と同じ2n 個でありながら、入力ポート数2、出力ポート数4とすることができる(8並列の長命令語の場合、従来は入力ポート数8、出力ポート数16)。
【0121】
また、図8では省略されているが、レジスタファイル207-0〜207-3にそれぞれ対応して設けられることになる、図1中のバイパス回路108-i,109-i(i=0,1)に相当するバイパス回路の1演算器の1入力当たりの入力ポート数(マルチプレクサの入力数)を3とすることができる(8並列の長命令語の場合、従来は9)。
【0122】
なお、前記実施形態(第3の実施形態)では、長命令語の命令フィールド#0〜#7のフィールド番号“B0 B1 B2 ”の上位側の2ビット“B0 B1 ”をソースレジスタ番号修飾に、下位側の1ビットB2 を(デスティネーション指定部の最上位ビットBと合わせて)デスティネーションレジスタ番号修飾に用いる場合について説明したが、これに限るものではない。例えば、B1 をソースレジスタ番号修飾とデスティネーションレジスタ番号修飾の一部のビットとして共通に用い、“B0 B1 ”を(前記実施形態と同様に)ソースレジスタ番号修飾に用いると共に、“B1 B2 ”をデスティネーション番号修飾に用いるようにしても構わない。この場合、デスティネーションレジスタ指定部のビット長は、前記実施形態と異なってnビットで済む。
【0123】
このようなレジスタ番号修飾では、命令フィールド#0〜#7と、その命令フィールド#0〜#7(のデスティネーションレジスタ指定部)でデスティネーション先として指定可能なレジスタファイルとの対応関係は前記実施形態と異なり、命令フィールド#0,#4がレジスタファイル207-0(#0)に、命令フィールド#1,#5がレジスタファイル207-1(#1)に、命令フィールド#2,#6がレジスタファイル207-2(#2)に、そして命令フィールド#3,#7がレジスタファイル207-3(#3)に、それぞれ対応付けられる。
【0124】
次に本発明を16並列の長命令語を実行するVLIWプロセッサに適用した第4の実施形態につき説明する。
[第4の実施形態]
図10は、本発明を16並列の長命令語を実行するVLIWプロセッサに適用した第4の実施形態におけるレジスタファイルと長命令語の各命令フィールドとの間の関係を示す。
【0125】
図10に示すように、本実施形態においても、前記第3の実施形態と同様に、それぞれ2n 個のレジスタからなる4つのレジスタファイル207-0(#0)〜207-3(#3)が用いられる。
【0126】
本実施形態において、16並列の長命令語の各命令フィールド#0〜#15の命令は3オペランド形式の命令(演算命令の場合)であり、デスティネーションレジスタ指定部(OP1)、並びに第1及び第2ソースレジスタ指定部(OP2,OP3)のビット長は、いずれもnビットである。ここで、デスティネーションレジスタ指定部(OP1)が、前記第3の実施形態で適用された8並列の長命令語の各命令フィールド#0〜#7のデスティネーションレジスタ部のビット数より1ビット少ないことに注意されたい。
【0127】
本実施形態においては、各命令フィールド#i(i=0〜15)の命令(演算命令)の演算結果の書き込み先のレジスタファイルは、その命令フィールド#iのフィールド番号(4ビット)を“B0 B1 B2 B3 ”とすると、そのフィールド番号中の下位側の2ビット“B2 B3 ”により決定される。また、決定されたレジスタファイル内の書き込み先レジスタは、デスティネーションレジスタ指定部(OP1)のnビットにより指定される。即ち命令フィールド#iの命令(演算命令)の演算結果の書き込み先レジスタは、図11に示すように、その命令のデスティネーションレジスタ指定部で指定されるnビットのレジスタ番号(OP1)の上位に、その命令フィールドのフィールド番号の下位側の2ビット“B2 B3 ”が付加されたn+2ビットのデスティネーションレジスタ番号により指定される。
【0128】
一方、命令フィールド#iの命令(演算命令)の参照先のレジスタファイルは、そのフィールド番号中の上位側の2ビット“B0 B1 ”により決定される。また、決定されたレジスタファイル内の参照先レジスタは、その命令フィールド#i中のnビットの第1及び第2ソースレジスタ指定部(OP2,OP3)により指定される。即ち命令フィールド#iの命令(演算命令)の演算で参照する2つのソースレジスタは、図11に示すように、その命令の第1及び第2ソースレジスタ指定部で指定されるnビットのレジスタ番号(OP2,OP3)の上位に、その命令フィールドのフィールド番号の上位側2ビット“B0 B1 ”が付加されたn+2ビットのソースレジスタ番号(第1及び第2ソースレジスタ番号)により指定される。
【0129】
本実施例において、上記n+2ビットのレジスタ番号の上位2ビットは、“00”でレジスタファイル207-0を、“01”でレジスタファイル207-1を、“10”でレジスタファイル207-2を、“11”でレジスタファイル207-3を指定し、当該上位2ビットを除くnビットは、そのレジスタファイル内のレジスタ位置を示す。
【0130】
したがって、図10に示すように、フィールド番号“B0 B1 B2 B3 ”中の上位側2ビット“B0 B1 ”が“00”、即ちフィールド番号が0(“0000”),1(“0001”),2(“0010”),3(“0011”)の命令フィールド#0,#1,#2,#3の命令についてはレジスタファイル207-0を対象に、“B0 B1 ”が“01”、即ちフィールド番号が4(“0100”),5(“0101”),6(“0110”),7(“0111”)の命令フィールド#4,#5,#6,#7の命令についてはレジスタファイル207-1を対象に、“B0 B1 ”が“10”、即ちフィールド番号が8(“1000”),9(“1001”),10(“1010”),11(“1011”)の命令フィールド#8,#9,#10,#11の命令についてはレジスタファイル207-2を対象に、そして“B0 B1 ”が“11”、即ちフィールド番号が12(“1100”),13(“1101”),14(“1110”),15(“1111”)の命令フィールド#12,#13,#14,#15の命令についてはレジスタファイル207-3を対象に、それぞれその命令フィールドの第1及び第2ソースレジスタ指定部で指定される(当該レジスタファイル内の)レジスタからのソースオペランド読み出しが行われる。
【0131】
また、フィールド番号“B0 B1 B2 B3 ”中の下位側2ビット“B2 B3 ”が“00”、即ちフィールド番号が0(“0000”),4(“0100”),8(“1000”),12(“1100”)の命令フィールド#0,#4,#8,#12の命令についてはレジスタファイル207-0を対象に、“B2 B3 ”が“01”、即ちフィールド番号が1(“0001”),5(“0101”),9(“1001”),13(“1101”)の命令フィールド#1,#5,#9,#13の命令についてはレジスタファイル207-1を対象に、フィールド番号が2(“0010”),6(“0110”),10(“1010”),14(“1110”)の命令フィールド#2,#6,#10,#14の命令についてはレジスタファイル207-2を対象に、そして“B2 B3 ”が“11”、即ちフィールド番号が3(“0011”),7(“0111”),11(“1011”),15(“1111”)の命令フィールド#3,#7,#11,#15の命令についてはレジスタファイル207-3を対象に、当該命令のデスティネーションレジスタ指定部で指定されたレジスタへの、当該命令の演算結果の書き込みが行われる。
【0132】
以上に述べたように本実施形態においては、2n 個のレジスタからなる4つのレジスタファイル207-0〜207-3を設け、16並列の長命令語中の各命令フィールド#0〜#15のフィールド番号によるレジスタ番号の修飾を行い、各命令フィールド毎に(ソース指定とデスティネーション指定のそれぞれについて)使用可能なレジスタをレジスタファイル207-0〜206-3のいずれかに制限することにより、デスティネーションレジスタ指定部、並びに第1及び第2ソースレジスタ指定部のビット長をそれぞれnビットとしながらも、長命令語全体として、使用可能なレジスタ数を2n+2 個とすることができる。
【0133】
しかも本実施形態においては、レジスタファイル207-0〜207-3の入出力ポート数を、レジスタ数が従来と同じ2n 個でありながら、入力ポート数2、出力ポート数4と従来より大幅に削減できる(16並列の長命令語の場合、従来は入力ポート数16、出力ポート数32)。
【0134】
また、図10では省略されているが、レジスタファイル207-0〜207-3にそれぞれ対応して設けられることになる、図1中のバイパス回路108-i,109-i(i=0,1)に相当するバイパス回路の1演算器の1入力当たりの入力ポート数(マルチプレクサの入力数)を5とすることができる(16並列の長命令語の場合、従来は17)。
【0135】
なお、前記第3及び第4の実施形態では、ソースレジスタの修飾方法が第1ソースレジスタと第2ソースレジスタとで同じ場合について説明したが、前記第2の実施形態と同様に、第1ソースレジスタと第2ソースレジスタとで異なる修飾方法を適用しても構わない。
【0136】
また、前記第1乃至第4の実施形態では、長命令語の各命令フィールドのフィールド番号毎に(ソース指定とデスティネーション指定のそれぞれについて)アクセス可能なレジスタファイルが制限されており、したがって各命令フィールドからアクセス可能(ソース指定及びデスティネーション指定可能)なレジスタも、その命令フィールド(のフィールド番号)によって制限されていたが、予め定められたレジスタ番号のレジスタ(例えばレジスタ番号が0〜7までの8個のレジスタ)については、全ての命令フィールドから共通にアクセス可能としても(即ちフィールド番号によるレジスタ修飾の対象外としても)よく、前記実施形態に限定されない種々の変形が可能である。
【0137】
次に、以上に述べた第1乃至第4の実施形態で適用した命令語形式、即ち長命令語中の各命令フィールドのフィールド番号によるレジスタ番号の修飾により、各命令フィールド毎に(ソース指定とデスティネーション指定のそれぞれについて)使用可能なレジスタファイルを制限することを可能とする命令語形式に従ったオブジェクトを生成するためのコンパイラ(並列最適化コンパイラ)について説明する。
【0138】
図12は本コンパイラの一実施形態を示すブロック構成図である。
同図において、並列最適化コンパイラ310は、字句解析・構文解析部311、スカラ最適化部312、命令スケジュール部313、レジスタアロケーション部314及びコード出力部315の各機能要素から構成される。
【0139】
並列最適化コンパイラ310は、ソースファイル320に格納されている原始プログラムを対象に字句解析・構文解析部311により周知の字句解析及び構文解析を行ってプログラムエラーを検出すると共に第1の内部形式のプログラム(中間コード)に変える。
【0140】
次に並列最適化コンパイラ310は、字句解析・構文解析部311により生成された中間コードを対象にスカラ最適化部312により周知の最適化を行い、冗長な処理を含まないような実行時間がより少なくて済む第2の内部形式のプログラムを生成する。このプログラムは、シリアルな命令列からなる。
【0141】
ここまでの並列最適化コンパイラ310での処理は、通常のコンパイラ処理と同様であり、VLIWとは無関係である。
次に並列最適化コンパイラ310は、スカラ最適化部312により生成された第2の内部形式のプログラムの各命令をスケジュールする命令スケジューリングを命令スケジュール部313により行う。この命令スケジュール部313による例えば前記第1の実施形態で適用した命令語形式(図3参照)を前提とする命令スケジューリングについて、“a←b+c”の演算を指定する命令Iをトップダウン方式でスケジュールする場合を例に、図13のフローチャートを参照して説明する。
【0142】
まず、命令スケジュール部313は、スケジュールの対象となる命令Iのソースオペランド(b,c)を定義した命令(が既に配置されている命令フィールド位置)のフィールド番号を調べる(ステップS1)。
【0143】
次に命令スケジュール部313は、調べたフィールド番号とソースオペランド(b,c)とがマッチしているか否か、即ちソースオペランドbを定義した命令のフィールド番号で決まる(デスティネーション先としての)レジスタファイルと、ソースオペランドcを定義した命令のフィールド番号で決まるデスティネーション先としてのレジスタファイルとが一致しているか否かを判断する(ステップS2)。
【0144】
もし上記レジスタファイルが一致している場合には、命令スケジュール部313は、命令Iを、当該レジスタファイル内レジスタがソース指定可能な命令フィールドに配置する(ステップS3)。
【0145】
これにより、ソースオペランドbを定義した命令とソースオペランドcを定義した命令のフィールド番号がいずれも0または2であるならば、そのフィールド番号で決まるデスティネーション先としてのレジスタファイルは、いずれもレジスタファイル107-0(#0)であることから、命令Iは命令フィールド#0または#1(の空きフィールド)に配置される。同様に、ソースオペランドbを定義した命令とソースオペランドcを定義した命令のフィールド番号がいずれも1または3であるならば、そのフィールド番号で決まるデスティネーション先としてのレジスタファイルは、いずれもレジスタファイル107-1(#1)であることから、命令Iは命令フィールド#2または#3(の空きフィールド)に配置される。
【0146】
これに対して上記レジスタファイルが不一致の場合には、命令スケジュール部313は、ソースオペランドb,cのうちの一方を、そのソースオペランドが存在するレジスタファイルから他方のソースオペランドが存在するレジスタファイルにコピーする命令(MOVE命令)を生成し、そのコピー命令を、そのソース先とデスティネーション先で決まる命令フィールドに配置する(ステップS4)。
【0147】
これにより、例えばソースオペランドbがレジスタファイル107-0(#0)に、ソースオペランドcがレジスタファイル107-1(#1)に存在し、このソースオペランドcをレジスタファイル107-0(#0)に変数dとしてコピーする場合であれば、ソース先がレジスタファイル107-1(#1)、デスティネーション先がレジスタファイル107-0(#0)であることから、そのためのコピー命令(d←c)は、命令フィールド#2に配置される。
【0148】
命令スケジュール部313はコピー命令を生成して配置すると(ステップS4)、命令Iに相当する“a←b+d”の命令I′を、コピー命令のコピー先(デスティネーション先)レジスタファイルをソースレジスタファイルとして使用可能な命令フィールド(ここでは#0または#1)に配置する(ステップS5)。
【0149】
次に、命令スケジュール部313による前記第1の実施形態で適用した命令語形式(図3参照)を前提とする命令スケジューリングについて、レジスタ(変数)aを定義する命令Iをボトムアップ方式でスケジュールする場合を例に、図14のフローチャートを参照して説明する。
【0150】
まず、命令スケジュール部313は、スケジュールの対象となる命令Iが定義するレジスタ(仮想レジスタ、変数)aを(ソースとして)使う命令(が既に配置されている命令フィールド位置)のフィールド番号を調べる(ステップS11)。
【0151】
次に命令スケジュール部313は、調べたフィールド番号と命令Iが定義する仮想レジスタ(デスティネーション先)aとがマッチしているか否か、具体的には、調べたフィールド番号から、仮想レジスタ(デスティネーション先)aがレジスタファイル107-0(#0)または107-1(#1)のいずれになければならないか、或いはその両方になければならないかを判断する(ステップS12)。
【0152】
この判断の条件は、aを使う全ての命令が、命令フィールド#0または#1と、命令フィールド#2または#3のいずれか一方だけにあるか、或いは両方にあるか、即ちaを使う命令のフィールド番号で決まるソース指定可能なレジスタファイルが、その命令数に無関係に1つだけである(この状態を、デスティネーションレジスタaとフィールド番号がマッチしていると呼ぶ)か否かである。
【0153】
もし、aを使う全ての命令が命令フィールド#0または#1だけにある場合(デスティネーションレジスタaとフィールド番号がマッチしている場合)には、aはレジスタファイル107-0(#0)になければならず、命令フィールド#2または#3だけにある場合には、aはレジスタファイル107-1(#1)になければならない。aを使う命令が1つの場合には、その命令は、命令フィールド#0または#1と、命令フィールド#2または#3のいずれか一方にしか存在しない。
【0154】
一方、aを使う命令が複数で、しかもその複数の命令が命令フィールド#0または#1側と、命令フィールド#2または#3側に分散配置されている場合(デスティネーションレジスタaとフィールド番号がマッチしていない場合)には、aはレジスタファイル107-0(#0)及び107-1(#1)の両方になければならない。
【0155】
命令スケジュール部313は、命令Iが定義する変数(仮想レジスタ)aがレジスタファイル107-0(#0)になければならないと判断した場合には、その命令Iを命令フィールド#0または#2に配置し、レジスタファイル107-1(#1)になければならないと判断した場合には、その命令Iを命令フィールド#1または#3に配置する(ステップS13)。
【0156】
これに対し、命令Iが定義する変数(仮想レジスタ)aがレジスタファイル107-0(#0)及び107-1(#1)の両方になければならないと判断した場合には、aをレジスタファイル107-0(#0)からレジスタファイル107-1(#1)、またはレジスタファイル107-1(#1)からレジスタファイル107-0(#0)に変数xとしてコピーする命令(x←a)を生成し、そのコピー命令を命令フィールド#1または#2に配置する(ステップS14)。
【0157】
ここでは、命令Iを命令フィールド#0または#2に配置しようとするならば、aをレジスタファイル107-0(#0)からレジスタファイル107-1(#1)にコピーする命令が命令フィールド#1に配置され、命令Iを命令フィールド#1または#3に配置しようとするならば、aをレジスタファイル107-1(#1)からレジスタファイル107-0(#0)にコピーする命令が命令フィールド#2に配置される。
【0158】
命令スケジュール部313はコピー命令を生成して配置すると(ステップS14)、命令フィールド#1にコピー命令を配置した場合であれば、命令Iを命令フィールド#0または#2に配置し、命令フィールド#2にコピー命令を配置した場合であれば、命令Iを命令フィールド#1または#3に配置する(ステップS15)。
【0159】
このとき命令スケジュール部313は、命令フィールド#1にコピー命令を配置した場合であれば、既に配置済みのaを使う命令のうち、命令フィールド#2,#3にある命令のaをxに変更し、命令フィールド#2にコピー命令を配置した場合であれば、既に配置済みのaを使う命令のうち、命令フィールド#0,#1にある命令のaをxに変更する。
【0160】
並列最適化コンパイラ310は、以上のスケジュール処理を、スカラ最適化部312により生成された第2の内部形式のプログラムの各命令について、始端命令から順に終端命令まで(トップダウン方式の場合)、或いは終端命令から順に始端まで(ボトムアップ方式の場合)命令スケジュール部313により実行すると、そのスケジュール済みの各命令中の変数に対する物理レジスタ割り当て(レジスタアロケーション)をレジスタアロケーション部314により行う。このレジスタアロケーション部314によるレジスタアロケーションについて、図15のフローチャートを参照して説明する。
【0161】
レジスタアロケーション部314は、命令スケジュール部313によりスケジュールされた各命令をスキャンして、各変数(仮想レジスタ)が参照或いは定義される命令のフィールド番号から、全ての変数をレジスタファイル別にクラス分けする(ステップS21)。ここでは、レジスタファイル107-0(#0)に存在すべき変数と、レジスタファイル107-1(#1)に存在すべき変数の2つのクラスに分けられる。
【0162】
次にレジスタアロケーション部314は、各クラスの各変数について、クラス別に、そのクラスに対応するレジスタファイル内の物理レジスタの割り当てを行う(ステップS22)。
【0163】
並列最適化コンパイラ310はレジスタアロケーション部314によるレジスタアロケーションを終了すると、このレジスタアロケーションが施された内部形式の各命令から計算機(ここではVLIWプロセッサ)で実行可能なコード(オブジェクトコード)をコード出力部315により生成し、オブジェクトファイル330として出力する。
【0164】
【発明の効果】
以上詳述したように本発明によれば、複数のレジスタファイルを設け、長命令語(VLIW)中の各命令フィールドのフィールド番号によるレジスタ番号の修飾を行い、各命令フィールド毎に(ソース指定とデスティネーション指定のそれぞれについて)使用可能なレジスタをいずれかのレジスタファイルに制限する構成とすることにより、長命令語全体で扱えるレジスタ数を長命令語長を伸ばすことなく増やすことができ、しかもハードウェア構成の複雑化を招かないで済む。
【図面の簡単な説明】
【図1】本発明の第1の実施形態に係るVLIWプロセッサの概略構成を示すブロック図。
【図2】図1中のバイパス回路109-0,109-1の内部構成を、その周辺の構成と共に示すブロック図。
【図3】上記第1の実施形態における命令フィールドのフィールド番号によるレジスタ番号の修飾について、主としてフィールド番号が1(“01”)の命令フィールド#1を例に説明するための図。
【図4】上記第1の実施形態におけるレジスタファイル107-0,107-1と長命令語の各命令フィールド#0〜#3(のフィールド番号“00”〜“11”)との間の関係を示す図。
【図5】本発明の第2の実施形態に係るVLIWプロセッサの概略構成を図2と同様の形式で示すブロック図。
【図6】上記第2の実施形態における命令フィールドのフィールド番号によるレジスタ番号の修飾を説明するための図。
【図7】上記第2の実施形態におけるレジスタファイル107-0,107-1と長命令語の各命令フィールド#0〜#3(のフィールド番号“00”〜“11”)との間の関係を示す図。
【図8】本発明を8並列の長命令語を実行するVLIWプロセッサに適用した第3の実施形態におけるレジスタファイルと長命令語の各命令フィールドとの間の関係を示す図。
【図9】上記第3の実施形態における命令フィールドのフィールド番号によるレジスタ番号の修飾を説明するための図。
【図10】本発明を16並列の長命令語を実行するVLIWプロセッサに適用した第4の実施形態におけるレジスタファイルと長命令語の各命令フィールドとの間の関係を示す図。
【図11】上記第4の実施形態における命令フィールドのフィールド番号によるレジスタ番号の修飾を説明するための図。
【図12】上記第1乃至第4の実施形態で適用した命令語形式に従ったオブジェクトを生成するためのコンパイラの一実施形態を示すブロック構成図。
【図13】図12中のコンパイラにおける命令スケジュール処理をトップダウン方式でスケジュールする場合について説明するためのフローチャート。
【図14】図12中のコンパイラにおける命令スケジュール処理をボトムアップ方式でスケジュールする場合について説明するためのフローチャート。
【図15】図12中のコンパイラにおけるレジスタアロケーション処理を説明するためのフローチャート。
【図16】従来のVLIWプロセッサにおける、長命令語の各命令フィールドの命令で使用可能なレジスタ数と、その命令中ののレジスタ指定部のビット数との関係を、レジスタ数が2n 個の場合と、その2倍の2n+1 個の場合とについて示す図。
【図17】従来のVLIWプロセッサの概略構成を示すブロック図。
【符号の説明】
101…命令フェッチ機構、
102…命令デコード機構、
106-0〜106-3…演算器、
107-0,107-1,207-0〜207-3…レジスタファイル、
108-0,108-1,109-0,109-1,209-0,209-1…バイパス回路、
110,111…ラッチ回路、
119L0 〜119L3 ,119R0 〜119R3 ,219L0 〜219L3 ,219R0 〜219R3 …マルチプレクサ(MPX)

Claims (5)

  1. 複数の命令フィールドを有する長命令語(Very Long Instruction Word:VLIW)を実行するVLIWプロセッサにおいて、
    複数のレジスタファイルと、
    この複数のレジスタファイルの中から、長命令語中の各命令フィールドのフィールド番号の第1の所定部分をもとに、その命令フィールドの命令で参照するソースオペランドの読み出しが可能なレジスタファイルを割り当てると共に、前記各命令フィールドのフィールド番号の前記第1の所定部分とは少なくとも一部が異なる第2の所定部分をもとに、その命令フィールドの命令の実行結果の書き込みが可能なレジスタファイルを割り当てる割り当て手段とを具備することを特徴とするVLIWプロセッサ。
  2. 複数の命令フィールドを有する長命令語(Very Long Instruction Word:VLIW)を実行するVLIWプロセッサにおいて、
    それぞれ固有のレジスタ番号のレジスタの群からなる複数のレジスタファイルと、
    長命令語中の各命令フィールドのソースレジスタ指定部の示すレジスタ番号を、その命令フィールドのフィールド番号の第1の所定部分により修飾し、前記各命令フィールドのデスティネーションレジスタ指定部の示すレジスタ番号を、その命令フィールドのフィールド番号の前記第1の所定部分とは少なくとも一部が異なる第2の所定部分により修飾することで、前記複数のレジスタファイルの中から、前記各命令フィールド毎に、その命令フィールドの命令で参照するソースオペランドの読み出しが可能なレジスタファイルを割り当てると共に、その命令フィールドの命令の実行結果の書き込みが可能なレジスタファイルを割り当てる割り当て手段とを具備することを特徴とするVLIWプロセッサ。
  3. 前記割り当て手段は、前記各命令フィールドのソースレジスタ指定部の示すレジスタ番号の上位に、その命令フィールドのフィールド番号の前記第1の所定部分を付加し、前記各命令フィールドのデスティネーションレジスタ指定部の示すレジスタ番号の上位に、その命令フィールドのフィールド番号の前記第2の所定部分を付加するレジスタ番号修飾を行うことを特徴とする請求項2記載のVLIWプロセッサ。
  4. 複数の命令フィールドを有する長命令語(Very Long Instruction Word:VLIW)を実行するVLIWプロセッサにおいて、
    長命令語の各命令フィールドにそれぞれ対応して設けられ、対応する命令フィールドの命令の指定する演算を実行する演算器と、
    長命令語の各命令フィールドのフィールド番号に対応付けられた複数のレジスタファイルと、
    この複数のレジスタファイルの中から、長命令語中の各命令フィールドのフィールド番号の第1の所定部分をもとに、その命令フィールドの命令で参照するソースオペランドの読み出しが可能なレジスタファイルを割り当てると共に、前記各命令フィールドのフィールド番号の前記第1の所定部分とは少なくとも一部が異なる第2の所定部分をもとに、その命令フィールドの命令の実行結果の書き込みが可能なレジスタファイルを割り当てる割り当て手段とを具備し、
    前記割り当て手段は、実行すべき長命令語中の各命令フィールドの命令をデコードするデコード手段であって、ソースオペランドを使用する命令の場合には、その命令フィールドのフィールド番号の前記第1の所定部分をもとに決定される前記レジスタファイルからその命令フィールドに対応する前記演算器で用いるソースオペランドの読み出しを行うデコード手段と、前記各演算器にそれぞれ対応して設けられ、対応する演算器の演算結果を、その演算器に対応する命令フィールドのフィールド番号の前記第2の所定部分をもとに決定されるレジスタファイルへの書き込み用に一時保持する複数のバッファ手段とを含むことを特徴とするVLIWプロセッサ。
  5. 前記割り当て手段は、前記各レジスタファイルにそれぞれ対応して設けられた複数の第1のバイパス回路と、この各第1のバイパスパス回路にそれぞれ対応して設けられた複数の第2のバイパス回路とを更に含んでおり、前記第1のバイパス回路は、当該バイパス回路に対応する前記レジスタファイルから読み出されるソースオペランドを用いる前記各演算器にそれぞれ対応して設けられる複数の第1のマルチプレクサであって、そのソースオペランド及び当該バイパス回路に対応する前記レジスタファイルへの書き込みに用いられる前記各バッファ手段の保持データのうちの1つをソースオペランドとして選択する複数の第1のマルチプレクサから構成され、
    前記第2のバイパス回路は、当該バイパス回路に対応する前記第1のバイパス回路内の前記各第1のマルチプレクサにそれぞれ対応して設けられる複数の第2のマルチプレクサであって、その第1のマルチプレクサにより選択されたソースオペランド及びその第1のバイパス回路に対応する前記レジスタファイルへの書き込みに用いられる前記各バッファ手段の保持データのうちの1つをソースオペランドとして選択して対応する前記演算器に出力する複数の第2のマルチプレクサから構成されていることを特徴とする請求項4記載のVLIWプロセッサ。
JP23769496A 1996-09-09 1996-09-09 Vliwプロセッサ Expired - Fee Related JP3737573B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP23769496A JP3737573B2 (ja) 1996-09-09 1996-09-09 Vliwプロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP23769496A JP3737573B2 (ja) 1996-09-09 1996-09-09 Vliwプロセッサ

Publications (2)

Publication Number Publication Date
JPH1083302A JPH1083302A (ja) 1998-03-31
JP3737573B2 true JP3737573B2 (ja) 2006-01-18

Family

ID=17019134

Family Applications (1)

Application Number Title Priority Date Filing Date
JP23769496A Expired - Fee Related JP3737573B2 (ja) 1996-09-09 1996-09-09 Vliwプロセッサ

Country Status (1)

Country Link
JP (1) JP3737573B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623845A (en) * 1993-07-01 1997-04-29 Bethlehem Steel Corporation Method for producing flanged structural products directly from slabs
US6701424B1 (en) * 2000-04-07 2004-03-02 Nintendo Co., Ltd. Method and apparatus for efficient loading and storing of vectors
JP4283131B2 (ja) 2004-02-12 2009-06-24 パナソニック株式会社 プロセッサ及びコンパイル方法
JP6422381B2 (ja) * 2015-03-18 2018-11-14 ルネサスエレクトロニクス株式会社 プロセッサ、プログラムコード変換装置及びソフトウェア

Also Published As

Publication number Publication date
JPH1083302A (ja) 1998-03-31

Similar Documents

Publication Publication Date Title
US6490673B1 (en) Processor, compiling apparatus, and compile program recorded on a recording medium
US5958048A (en) Architectural support for software pipelining of nested loops
US5710902A (en) Instruction dependency chain indentifier
JP3797471B2 (ja) マルチスレッドvliwプロセッサにおける分割可能なパケットを識別するための方法および装置
US5303356A (en) System for issuing instructions for parallel execution subsequent to branch into a group of member instructions with compoundability in dictation tag
US5504932A (en) System for executing scalar instructions in parallel based on control bits appended by compounding decoder
EP0996057B1 (en) Data processor with an instruction unit having a cache and a ROM
US5465377A (en) Compounding preprocessor for cache for identifying multiple instructions which may be executed in parallel
KR100284789B1 (ko) N-지로 분기를 갖는 슈퍼스칼라 또는 초장 명령어 워드컴퓨터에서 다음 명령어를 선택하는 방법 및 장치
JP3547139B2 (ja) プロセッサ
US5819064A (en) Hardware extraction technique for programmable reduced instruction set computers
US7493475B2 (en) Instruction vector-mode processing in multi-lane processor by multiplex switch replicating instruction in one lane to select others along with updated operand address
KR100346515B1 (ko) 수퍼파이프라인된수퍼스칼라프로세서를위한임시파이프라인레지스터파일
EP1267256A2 (en) Conditional execution of instructions with multiple destinations
JPH05143332A (ja) 命令スケジユーラを備えたコンピユータ・システム及び入力命令シーケンスを再スケジユールする方法
CN1973260A (zh) 用于不对称双重路径处理的设备和方法
JPH04229326A (ja) スカラ命令の並列実行を得る方法およびシステム
JP2002024011A (ja) プロセッサにおける命令の叙述された実行
JPH1165844A (ja) パイプラインバイパス機能を有するデータ処理装置
US6324639B1 (en) Instruction converting apparatus using parallel execution code
EP0982655A2 (en) Data processing unit and method for executing instructions of variable lengths
US6609191B1 (en) Method and apparatus for speculative microinstruction pairing
JP3737573B2 (ja) Vliwプロセッサ
KR20040111559A (ko) 주소 레지스터의 내용을 스와핑하기 위한 방법 및 장치
EP0545927B1 (en) System for preparing instructions for instruction parallel processor and system with mechanism for branching in the middle of a compound instruction

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20051017

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20051025

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20051027

LAPS Cancellation because of no payment of annual fees