(57)【特許請求の範囲】
【請求項１】
処理装置であって、該処理装置の連続した動作サイクルに対応した単一かつ一連のプログラム命令の制御の下に並列動作するように配列された機能ユニットの１つのグループと１つのメモリ回路を備え、グループ内の少なくとも１つの機能ユニットは、メモリ回路の関連出力からオペランドを受取るための少なくとも１つのデータ入力を有し、そして、グループ内の少なくとも２つの機能ユニットは、メモリ回路の各入力に結果を供給するための各データ出力を有する処理装置において、前記メモリ回路は：
各メモリユニットが、書き込みポートと、メモリ回路の出力のそれぞれ１つを形成する１つの読み出しポートとを備えた複数のメモリユニットと；
機能ユニットの出力と個別のメモリユニットの書き込みポートを接続するスイッチング回路であって、一連のプログラム命令によって制御され、それにより、各機能ユニットからの結果が、各動作サイクルにおける一連のプログラム命令によって選択された１以上のメモリユニットの書き込みポートに伝達可能であるスイッチング回路と；
スイッチング回路に接続された入力を持つ遅延エレメントであって、それにより、機能ユニットの中の１つによって１つの動作サイクルにおいて作られた結果を、そのメモリ回路内で遅延させることが可能であり、そして、その次の動作サイクルにおいてメモリ回路のメモリユニットに書き込み可能である遅延エレメントと；
を備えたことを特徴とする処理装置。
【請求項２】
遅延エレメントが単一場所メモリユニットを有することを特徴とする請求項１記載の処理装置。
【請求項３】
遅延エレメントが、１以上の動作サイクルの一定時間遅延を実行することを特徴とする請求項１記載の処理装置。
【請求項４】
スイッチング回路が、１動作サイクル以上結果を遅延させるために、遅延エレメントの入力をその遅延エレメントの出力に接続させるプログラム命令によって制御可能であることを特徴とする請求項３記載の処理装置。
【請求項５】
遅延エレメントが、複数のアドレス可能なロケーションを持つメモリユニットを備え、複数の結果の同時遅延を可能にすることを特徴とする請求項１記載の処理装置。
【請求項６】
複数の遅延エレメントを備え、１つの単一動作サイクルにおいて作られた複数の結果の同時遅延を可能にすることを特徴とする請求項１記載の処理装置。
【請求項７】
一連のプログラム命令において、少なくとも１動作サイクルのブランチ遅延に関係する条件付きブランチを起こさせる手段と；
ブランチ遅延中に機能ユニットのグループの中の少なくとも１つによって行われるオペレーションを条件付で抑制するための手段と；
を備えたことを特徴とする請求項１記載の処理装置。
【請求項８】
少なくとも１つの機能ユニットに対するオペレーションを条件付きで抑制するための手段が、オペレーションを抑制するか否かを決定するブール保護値を受け取るための、当該機能ユニットへの保護値入力と、スイッチング回路に接続された書き込みポート及び機能ユニットの保護値入力に接続された読み出しポートを持つメモリ回路内の保護値メモリユニットとを有することを特徴とする請求項７記載の処理装置。
【請求項９】
保護値メモリユニットが、所定のブール値を記憶する１以上の書き込み不可能なロケーションを有することを特徴とする請求項８記載の処理装置。
【請求項１０】
少なくとも１つのメモリユニットが、各プログラム命令に含まれる書き込みアドレス値を受け取るための書き込みアドレス入力を有し、更に、異なる書き込みアドレス値に対応する書き込み可能および書き込み不可能なロケーションを備え、非書き込みオペレーションは、プログラム命令内に個別の書き込み可能化値を設けておくことなしに、書き込み不可能ロケーションに対応する書き込みアドレス値によって、所定のプログラム命令内で実施可能であることを特徴とする請求項１記載の処理装置。
【請求項１１】
少なくとも１つのメモリユニットが、スイッチング回路に接続された２以上の書き込みポートを有することを特徴とする請求項１記載の処理装置。
【請求項１２】
機能ユニットのグループ及びメモリ回路がモノリシック集積回路の一部を構成することを特徴とする請求項１記載の処理装置。
【請求項１３】
ＶＬＩＷ処理装置であって、該処理装置の連続した動作サイクルに対応した単一かつ一連のプログラム命令の制御の下に並列動作するように配列された機能ユニットの１つのグループと１つのメモリ回路を備え、グループ内の少なくとも１つの機能ユニットは、メモリ回路の関連出力からオペランドを受取るための少なくとも１つのデータ入力を有し、そして、グループ内の少なくとも２つの機能ユニットは、メモリ回路の各入力に結果を供給するための各データ出力を有するＶＬＩＷ処理装置において、前記メモリ回路は：
各メモリユニットが、書き込みポートと、メモリ回路の出力のそれぞれ１つを形成する１つの読み出しポートとを備えた複数のメモリユニットと；
機能ユニットの出力と個別のメモリユニットの書き込みポートを接続するスイッチング回路であって、一連のプログラム命令によって制御され、それにより、各機能ユニットからの結果が、各動作サイクルにおける一連のプログラム命令によって選択された１以上のメモリユニットの書き込みポートに伝達可能であり、メモリユニットの少なくとも１つが、スイッチング回路に接続された２以上の書き込みポートを有するスイッチング回路と；
を備え、
少なくとも１つのメモリユニットが、各プログラム命令に含まれる書き込みアドレス値を受け取るための書き込みアドレス入力を有し、更に、異なる書き込みアドレス値に対応する書き込み可能および書き込み不可能なロケーションを備え、非書き込みオペレーションは、プログラム命令内に個別の書き込み可能化値を設けておくことなしに、書き込み不可能ロケーションに対応する書き込みアドレス値によって、所定のプログラム命令内で実施可能であることを特徴とするＶＬＩＷ処理装置。
【請求項１４】
更に、一連のプログラム命令において、少なくとも１動作サイクルのブランチ遅延に関係する条件付きブランチを起こさせる手段と；
ブランチ遅延中に機能ユニットのグループの中の少なくとも１つによって行われるオペレーションを条件付で抑制するための手段と；
を備え、
少なくとも１つの機能ユニットに対するオペレーションを条件付きで抑制するための手段が、オペレーションを抑制するか否かを決定するブール保護値を受け取るための、当該機能ユニットへの保護値入力と、スイッチング回路に接続された書き込みポート及び機能ユニットの保護値入力に接続された読み出しポートを持つメモリ回路内の保護値メモリユニットとを有し、
保護値メモリユニットが、所定のブール値を記憶する１以上の書き込み不可能なロケーションを有することを特徴とする請求項１３記載のＶＬＩＷ処理装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、メモリ回路と機能ユニット群とを有し、これらが、連続する装置動作サイクルに対応する単一のプログラム命令列の制御の下に並列に動作するように配置された処理装置に関するものである。このような処理装置は、当該技術分野ではベリー・ロング命令語（ＶＬＩＷ）プロセッサとして知られている。
【０００２】
【従来の技術および発明が解決しようとする課題】
ＴＲＡＣＥプロセッサとして知られている理想的なＶＬＩＷプロセッサおよび実用的なＶＬＩＷプロセッサは、Ｒ．Ｐ．Ｃｏｌｗｅｌｌ等によって、１９８７年１０月５日から８日までのカリフォルニア州パロ・アルトにおけるプログラミング言語およびオペレーティング・システム用のアーキテクチュラル・サポートに関する第２回国際会議（ＡＳＰＬＯＳ  ＩＩ）において１８０頁から１９２頁に発表された「トレース・スケジューリング・コンパイラ用のＶＬＩＷアーキテクチャ」という表題の論文において記載されている。ＶＬＩＷプロセッサにおいては、各プログラム命令はバイナリー語であり、それぞれの機能ユニットを制御する一組のフィールドから構成されており、代表的なものでは１００ビット以上から構成されている。この分野においてスケジューラとして知られている特別なコンパイラは、所望の動作シーケンスにおいて微細なパラレリズムを実行して、各サイクルにおいて可能な限り多くの機能ユニットを利用して、このような非常に長いプログラム命令をコンパイルする。
【０００３】
ＶＬＩＷマシーンにおけるメモリ回路は、レジスタ・ファイルと呼ばれる場合が多いが、機能ユニットが生成した中間結果をバッファするために機能すると共に、これらの結果を次の処理のために、同一あるいは別の機能ユニットに供給する。理想的なＶＬＩＷプロセッサにおいては、このメモリ回路は完全にマルチポート化されたランダム・アクセス・メモリであり、全ての機能ユニットの出力は共通のメモリ・セル群の書き込みポートに結合され、全ての機能ユニットの入力は共通のメモリ・セル群の読み出しポートに結合されている。
【０００４】
しかしながら、Ｃｏｌｗｅｌｌ等によって指摘されているように、理想的なＶＬＩＷプロセッサにおいては、機能ユニット数が妥当な個数であったとしても、レジスタ・ファイルに対する不可能な程多くのレジスタ・ファイルが必要である。このような規制のために、ＴＲＡＣＥプロセッサは、真の意味でのマルチポート・レジスタ・ファイルを、機能ユニットの対の間においてしか使用していない。このため、理想的なＶＬＩＷプロセッサの性能の幾分かは不可避的に失われ、しかも、レジスタ・ファイルはそれら自身の間での連絡のためのポートを含む多数のポートを依然として必要としている。
【０００５】
ＶＬＩＷプロセッサにとってはモノリシック・インテグレーションを採用することが特に望ましく、この場合、その内部のバンド幅は従来のプロセッサに比較して非常に高い。モノリシックＶＬＩＷプロセッサは、Ｓ．Ｂｏｒｋｅｒ等により、１９８８年１１月１４−１８日にフロリダ州のＫｉｓｓｉｍｍｅｅにおけるコンフェレンス・スーパーコンピューティング’８８において発表された「ｉＷａｒｐ：Ａｎ  ｉｎｔｅｇｒａｔｅｄ  Ｓｏｌｕｔｉｏｎ  ｔｏ  Ｈｉｇｈ−Ｓｐｅｅｄ  Ｐｒａｌｌｅｌ  Ｃｏｍｐｕｔｉｎｇ」という表題の論文において述べられている。このｉＷａｒｐコンポーネントは、真のマルチポート化されたレジスタ・ファイルに結合された５個の機能ユニットを含んでいる。それにもかかわらず、真のマルチポート化されたメモリのサイズおよび複雑さが、１０個、１２個あるいはそれ以上の機能ユニットが望まれる大規模ＶＬＩＷプロセッサの構築および集積化の主要な障害となっている。
【０００６】
別の形態のＶＬＩＷプロセッサについては、Ｂ．Ｒ．Ｒａｕ等によって、米国特許第４，２５１，８７４号および同第４，５５３，２０３号、並びに、１９８１年１０月のＶＬＳＩシステム・アンド・コンピューテーションに関するＣＭＵ会議において発表された「並列プロセッサ用の静的にスケジュールされたＶＬＳＩインターコネクト」において述べられている。これらに述べられた装置においては、マルチプル・レジスタが、全ての機能ユニットの入力を全ての機能ユニットの出力に結合しているクロスバー回路における全ての交差点に位置している。どれほど多くの機能ユニットを備えている場合においても、このような多数の独立したレジスタ・ファイルを配置し、これらを制御することは実際上不可能である。
【０００７】
ビデオ信号プロセッサについては、本件出願の元の出願に当たる出願中の米国特許出願第２９０，９７９号の明細書において述べられており、このプロセッサにおいては、（同出願明細書においては「ｓｉｌｏ」と呼ばれている）セパレート形のメモリ・ユニットが（同出願明細書においては「プロセッサ・エレメント」と呼ばれている）各機能ユニットの各入力に配置されている。ｓｉｌｏの入力は、プログラム制御の下で、クロスバー・スイッチング回路によって、プロセッサ・エレメントの結果出力側に結合されている。同様な処理装置用の構成は、本件出願の発明者によって、１９８８年１０月３日−５日のＩＥＥＥ国際会議における「ＣＲＥＡＴＥ−ＬＩＦＥ：高性能ＶＬＳＩ回路用デザイン・システム」に述べられている。
【０００８】
動作を説明すると、このような処理装置のプログラム命令は、次のサイクルにおいて結果を必要としているメモリ・ユニットに対してのみ結果が書き込まれるように、構成されている。別の結果を別のメモリ・ユニットに書き込むことも同時に発生させることが可能であり、この結果、実質的にマルチポート・メモリの全性能を発揮させることができる。しかし、回路領域内にこのように大きな容量を記憶するので、１０個あるいは１５個の機能ユニットを備えた３２ビットＶＬＩＷプロセッサを現存の技術を用いて単一のチップ上に集積化させることになってしまう。
【０００９】
この形式のプロセッサは理想的なＶＬＩＷプロセッサに比べて欠点があり、それは、「衝突」（ｃｏｌｌｏｓｉｏｎｓ）に起因するものである。この衝突においては、同一のメモリ・ユニット（ｓｉｌｏ）に対して同一の動作サイクルにおいて２つの結果の書き込みが要求される。この欠点は、少数個の機能ユニットのみを備えた装置においては極めて些細なものであるが、機能ユニットの個数が増加した場合には、そのようなユニットの性能上、この衝突は極めて大きな問題となる。非常に多くの衝突が発生すると、特に、一つの衝突を解決するための再スケジューリングによって別の一つあるいはそれ以上の衝突を招いてしまうので、処理装置のスケジューリング動作のタスクの困難度が増してしまう。
【００１０】
【課題を解決するための手段】
本発明の課題は上述の処理装置における衝突の問題を解消することにある。
本願の第１の発明により提供されるＶＬＩＷ形の処理装置においては、そのメモリ回路が、複数のセパレート形メモリ・ユニットと、スイッチング回路と、遅延エレメントを備えている。
【００１１】
上記の各メモリ・ユニットは、少なくとも１個の書き込みポートとメモリ回路の各出力を形成する読み出しポートとを備えている。上記のスイッチング回路は、機能ユニットとセパレート形のメモリ・ユニットの書き込みポートの間に結合されている。このスイッチング回路は、一連のプログラム命令によって制御されて、各機能ユニットからの結果を、各動作サイクルにおいてこの一連のプログラム命令によって選択された一つあるいそれ以上のメモリ・ユニットの書き込みポートに対して転送できるようになっている。上記の遅延エレメントは、スイッチング回路に結合された出力を備えており、機能ユニットの一つによって或る動作サイクルにおいて生成された結果を、メモリ回路内において遅延させて、次の動作サイクルにおいてメモリ回路内の或るメモリ・ユニットに書き込みできるようになっている。
【００１２】
メモリ回路内の遅延エレメントを使用することにより、各種の機能ユニット用の動作を再スケジューリングすることなく、衝突を回避することができる。衝突している結果の一つが他方のものよりも先に関連する機能ユニットにより要求される場合が通常であるので、全体としては理想的なＶＬＩＷ性能が保持される。このように遅延を行う結果として新たな衝突が発生した場合には、この衝突もまた、性能を損失させることなく遅延エレメントによって解消できる。
【００１３】
この遅延エレメントをシングル・ロケーション・メモリ・ユニットで構成して、例えば、１動作サイクルの固定期間だけ遅延させるようにしてもよい。スイッチング回路をプログラム命令によって制御して、遅延エレメントの入力をこの遅延エレメントの出力に結合して、得られた結果を１動作サイクルだけ遅延させることができる。
【００１４】
単一の遅延エレメントによって１サイクル（１命令）当たり、２値の衝突（ｔｗｏ−ｖａｌｕｅｄ  ｃｏｌｌｉｓｉｏｎ）のみを回避することができる。したがって、多数の遅延エレメントを配置して、単一の動作サイクルにおいて生成される複数の結果を同時に遅延させることができる。予想される衝突に応じた費用効率となるように遅延エレメントを選択することができる。さらに、スイッチング回路を、各遅延エレメントをメモリ・ユニットのサブセットに対してのみ結合可能にして、遅延エレメント（群）に対する相互結合の為に必要とされる回路面積を減少させるようにすることもできる。
【００１５】
異なった形式の遅延エレメントも使用することができる。例えば、遅延エレメントとして、複数の結果を同時的に遅延させることの可能な複数のアドレス可能位置を有するメモリ・ユニットから構成してもよい。
【００１６】
本願の第２の発明による処理装置においては、メモリ回路における少なくとも一つのメモリ・ユニットは、スイッチング回路に結合される１個以上の書き込みポートを備えている。このような装置においては、「衝突されている」結果が、同一のサイクルにおいて同一のメモリに対して書き込まれる可能性がある。このような装置においては、真のマルチポート・メモリの問題が再び持ち上がるが、それぞれ２つの書き込みポートを備えた８個のセパレート形メモリ・ユニットが占める面積は、１６個の書き込みポートを備えた真のマルチ・メモリの占める面積よりも小さい。衝突を解決するために、遅延エレメントの代わりに、あるいはこれに加えて、更に書き込みポート（群）を配置することもできる。
【００１７】
公知のＶＬＩＷプロセッサにおけるように、本発明による装置においても、同一の機能ユニットを配置してもよい。これらの機能ユニットとしては、整数および／または浮動少数点用の算術論理ユニット群、データ・メモリ・ユニット群、分岐コントロール・ユニット群および、掛け算、シフティング、コミュニケーションなどの特別のユニット群などがある。理想的には、各動作の結果を利用できるまでには１あるいはそれ以上のサイクル数の「待ち時間」が存在するが、各ユニットをパイプライン化して、全てのサイクルにおいて新たな動作を開始できるようにすることである。
【００１８】
【実施例】
図１には一般化したブロック図の形態で処理装置を示してある。この処理装置は、Ｎ個の機能ユニットＦ１、Ｆ２、・・・ＦＮと、イミテーション・マルチポート・メモリ回路１０を有している。各機能ユニットＦｋ（ｋは１からＮまでの数である。）はメモリ回路１０の各データ出力１２から第１および第２のオペランドＦｋＬとＦｋＲを受け取るための入力を有している。各機能ユニットＦｋは、命令レジスタ（図１には示していない）から各動作選択コード（ｏｐｃｏｄｅ）Ｆｋ．ＯＰを受け取るための制御入力１３を有している。各機能ユニットＦｋの出力は、メモリ回路１０の各データ入力１４に対して、結果Ｆｋ．Ｏを供給する。
【００１９】
イミテーション・マルチポート・メモリ１０内には、メモリ回路１０の各データ出力１２に対してセパレート形書き込み／読み出しメモリ・ユニット（ＲＡＭ）１５が配置されている（本例では２つ機能ユニット当たり２つ配置されている）。このようなメモリ・ユニット１５のそれぞれは、各アーギュメントＦｋ．ｘ（ここにｘはＬあるいはＲである。）をデータ出力１２を介して対応する機能ユニットに対して供給するための単一ポートを有している。読み出しアドレス入力は、各読み出しポートに付設されており、命令レジスタから読み出しアドレスＦｋ．ｘ．ＲＡを受け取る。
【００２０】
メモリ回路１０の各データ入力１４は、メモリ回路１０のクロスバー・スイッチング回路１８内においてバス・ライン１６を形成している。このクロスバー・スイッチング回路１８は更に、多数のマルチプレクサ２０を有している。各マルチプレクサは、各メモリ・ユニットの書き込みポートに結合された出力を有している。各マルチプレクサ２０によって、バス・ライン１６（機能ユニットの出力）のいずれも、命令レジスタから受け取る選択信号Ｆｋ．ｘ．ＳＥの制御の下で、対応するメモリ・ユニット１５の書き込みポートに結合することができる。また、命令レジスタは、それぞれの書き込みアドレスＦｋ．ｘ．ＷＡを各メモリ・ユニット１５の書き込みアドレス入力に供給すると共に、対応する書き込みイネーブル信号Ｆｋ．ｘ．ＷＥを供給する。
【００２１】
遅延エレメントはスペシャル・レジスタ２１という形態でメモリ回路１０内に配置されている。スペシャル・レジスタ２１のデータ入力は、命令レジスタ（不図示）から受け取る選択信号ＳＰ．ＳＥの制御の下に、スイッチング回路１８内の別のマルチプレクサ２２を介していずれのバス・ライン１６に対しても結合することができる。信号ＳＰ．Ｏを運ぶスペシャル・レジスタ２１の出力は、クロスバー・スイッチング回路１８内に別のバス・ライン２４を形成している。このバス・ライン２４は、いずれのマルチプレクサ２０によっても、各メモリ・ユニット１５に結合でき、そこに信号ＳＰ．Ｏを供給するすることができる。また、このバス・ライン２４を選択して、選択信号ＳＰ．ＳＥによって、スペシャル・レジスタの入力に結合させることができる。
【００２２】
図１に示す装置は、ベリー・ロング命令語（ＶＬＩＷ）プロセッサの部分を構成している。このプロセッサにおいては、一連のベリー・ロング命令語から構成されるプログラムの制御の下に、全ての機能ユニットが同期して、並列に動作する。機能ユニット群および制御回路内におけるパイプライン処理のために、各機能ユニットＦｋは各動作サイクルにおいて初期動作を開始して、マルチポート・メモリ回路１０からそのオペランドを引出して、得られた結果を同一のサイクルあるいは次のサイクルにおいてメモリ回路１０内に戻すことが可能である。
【００２３】
１動作サイクル当たりの一つの命令語はプログラム・メモリ内に格納されているデータから発生する。命令語の異なったフィールドは、数百ビット長であるが、図１において、．ＳＥ、．ＷＡ、．ＷＥ、．ＲＡおよび．ＯＰが付された各種のアドレスおよび選択信号を形成し、これらがメモリ回路１０を制御して、機能ユニットにより実行される機能を選択する。適切なプログラミング（好ましくは、以下に述べるようにスケジューリング・コンパイラによって自動化することにより）によって、アルゴリズム内においてきめの細かいパラレリズムを実行して、可能な限り多くの機能ユニットが各サイクルにおいて有用な動作を開始するようにすることができる。
【００２４】
理想的なＶＬＩＷプロセッサにおいては、真のマルチポート・メモリによって、いずれかの機能ユニット出力からの結果Ｆｋ．Ｏを自由にメモリ回路内に記憶して、別のいずれかの機能ユニットＦｋにより後にアーギュメントとして使用するために読み出すことができる、ということが達成される。イミテーション・マルチポート・メモリ回路１０によって、ほぼ同一の機能が、将来において結果をオペランドとして使用することを要求する機能ユニットに結合されたメモリ・ユニット内にのみ結果を記憶することによって実現できる。このような将来の要求は、インターミーディエット・コード・グラグメント自体から分かる。
【００２５】
遅延エレメント（ＳＰ）を無視すると、このイミテーション・マルチポート・メモリ１０は、異なった機能ユニットにより生成された同一サイクル内における二つの結果Ｆｋ．ＯおよびＦｋ’．Ｏの双方を同一のメモリ・ユニット（ＲＡＭ）１５に書き込むことができないという制限を有している。スケジューリング・コンパイラによって同一のサイクル内において生成された二つの結果が後のサイクルにおいて同一のメモリ・ユニット１５からの読み出しのために必要とされることが発見される場合には、「２値衝突」（ｔｗｏ−ｖａｌｕｅ  ｃｏｌｌｉｓｉｏｎ）が発生する。勿論、一つのサイクルにおいて３つあるいはそれ以上の結果が生成され、それらが同一の機能ユニット入力によって要求される場合には、より多くの衝突が起こる可能性があるが、このようなことは、一般的には２つ値の衝突に比べて発生頻度が極めて低い。多くの衝突は、例えば、対称な動作の左側と右側のオペランドを交換するなどの最小の中断によって解決できる。しかしながら、一般的に、より実質的な或る程度の再スケジューリングを行う必要がある。衝突の問題と、遅延エレメントを利用したその解決方法を次に述べる。さらなる説明を、図２ないし図４に示すプロセッサを参照して行う。
【００２６】
スペシャル・レジスタ２１（ＳＰ）の形態を取っている遅延エレメントによって、イミテーション・マルチポート・メモリ１０は、或るサイクルにおいて２値衝突が発生した場合においても真のマルチポート・メモリの性能を実現することができる。同一のサイクルｉにおいて機能ユニットＦ１とＦ２によって結果Ｆ１．Ｏ（ｉ）とＦ２．Ｏ（ｉ）が生成され、これらが後のサイクルにおいて、機能ユニットＦ１用の第１のオペランドＦ１．Ｌを形成するために必要とされる場合を想定する。本例では各メモリ・ユニットの読み取りポートはただ一つであるので、これらの結果の一方、例えばＦ１．Ｏ（ｉ）は、常に他方、すなわちＦ２．Ｏ（ｉ）よりも前の時点で必要とされる。スケジューラは直ちに、サイクル（ｉ）の命令語内におけるフィールドＦ１．Ｌ．ＳＥ（ｉ）、Ｆ１．Ｌ．ＷＡ（ｉ）およびＦ１．Ｌ．ＷＥ（ｉ）を用いて、オペランドＦ１．Ｌ用に、メモリ・ユニット１５内の望ましい位置にＦ１．Ｏ（ｉ）を差し向けることができる。これよりも緊急ではない結果Ｆ２．Ｏ（ｉ）は同一の命令語において、フィールドＳＰ．ＳＥ（ｉ）を用いてスペシャル・レジスタ２１に差し向けることができる。レジスタ２１が１サイクル固定長の遅延を行う場合には、遅延された結果Ｆ２．Ｏ（ｉ）が次のサイクルにおいてＳＰ．Ｏ（ｉ＋１）として現れる。次に、（サイクルｉ＋１における）次の命令におけるＦ１．Ｌ．ＳＥ（ｉ＋１）、Ｆ１．Ｌ．ＷＡ（ｉ＋１）およびＦ１．Ｌ．ＷＥ（ｉ＋１）を使用して、遅延させた結果Ｆ２．Ｏ（ｉ）を必要とされる場合にはオペランドＦ１．Ｌ用にメモリ・ユニット内に差し向けることが可能である。
【００２７】
このような処理は、スケジュールにおける動作位置に影響を与えることなく行うことができる。得られた結果を遅延するということは、例えば、第３の結果、例えばサイクルｉ＋１で生成されたＦ１．Ｏ（ｉ＋１）を同一のメモリ・ユニットに書き込む必要が有る場合には、別の衝突を引き起こすおそれがある。このような衝突は性能を損失させることなく解決することができる。この理由は、得られた結果Ｆ２．（ｉ）とＦ１．Ｏ（ｉ＋１）の一方は常に他方よりも早く要求されるからである。いずれの結果をより緊急に必要としているのかに応じて、次のようないずれかの処理が行われる。（ａ）遅延した結果Ｆ２．Ｏ（ｉ）＝ＳＰ．Ｏ（ｉ＋１）を次のサイクルの遅延を行うためにレジスタ２１に戻し、Ｆ１．Ｏ（ｉ＋１）をメモリ・ユニットの書き込む。（ｂ）Ｆ１．Ｏ（ｉ＋１）をスペシャル・レジスタ２１に供給して、これをＳＰ．Ｏ（ｉ＋２）とし、遅延させた結果Ｆ２．Ｏ（ｉ）＝ＳＰ．Ｏ（ｉ＋１）をメモリ・ユニットに書き込む。
【００２８】
遅延エレメントとしての単一のレジタタ２１を使用することにより、単一の２値衝突のみを一度に解消することが可能である。このレジスタ２１と同様な別のレジスタを加えることにより、３値衝突、および／または多重の２値衝突を解消することができる。各レジスタおよびそれに付随するマルチプレクサ２２が必要とする回路面積の増加は極く僅かである。
【００２９】
機能ユニットの構成および個数、それらのオペランドの個数および長さ、対応するメモリ・ユニットにおける位置の数を自由に選択して、装置が応用される対象物に合わせることができる。次に、比較的小規模のＶＬＩＷ装置を、一例として図２乃至図６を参照して説明する。
【００３０】
図２において、イミテーション・マルチポート・メモリ回路３０は、５つの機能ユニットに結合されている。この機能ユニットには、コンスタント・ユニットＣＯ、算術論理ユニットＡＬ、レジスタ・ユニットＲＧ、データ・メモリ・ユニットＤＭおよび分岐ユニットＢＲが含まれている。メモリ回路３０内には、概略的にメモリ・ユニット２６、マルチプレクサ２７および、マルチプレクサ２９が付設されたスペシャル・レジスタＳＰが示されている。
【００３１】
グローバル・コントローラ４１が配置されており、これは、シーケンサＳＥＱと命令発生パイプラインＩＩＰを有している。シーケンサＳＥＱは各サイクルにおいてプログラム・カウンタ・ワードＰＣを発生させる。このワードは命令発生パイプラインＩＩＰに供給される。この命令発生パイプランＩＩＰはオフ・チップとすることができ、実行されるプログラムを形成しているベリー・ロング命令語がエンコードされたプログラム・メモリを有している。或る回数のサイクル遅延の後に、命令発生パイプラインＩＩＰは、オン・チップの命令レジスタ４６に対して、アドレスＰＣにおけるプログラム・メモリ内に記憶されているベリー・ロング命令語ＩＷを供給する。
【００３２】
レジスタ４６内の命令語ＩＷは、デステイネーション・コントロール・フィールドＤＥＣと、個々の機能ユニットＣＯ，ＡＬ，ＲＧ，ＤＭ，ＢＲをそれぞれ制御するための多数のフィールドＣＯＣ，ＡＬＣ，ＲＧＣ，ＤＭＣ，ＢＲＣとを有している。命令語ＩＷのビットの総数は１６２であるが、本例のプロセッサは極めてシンプルなものである。図３には更に詳細に命令語ＩＷのフィールドを示してある。ここには、各フィールドのビット数がそのフィールドの下側に記載されている。
【００３３】
コンスタント・ユニットＣＯはオペランド入力は持たず、１個の３２ビットの結果出力（ＣＯ．Ｏ）がメモリ回路３０の入力に結合されている。コンスタント・ユニットＣＯは実際には、命令語ＩＷ（図３）内の３２ビットフィールドＣＯＣとコンスタント・ユニットＣＯの出力との間の直接結合から成り立っている。コンスタント・ユニットＣＯはこれより、命令語内からの定数値をメモリ・ユニット３０内の他のユニットに供給することが可能である。
【００３４】
算術論理ユニットＡＬは、１ビットのガード値入力（ＡＬ．Ｇ）と、メモリ回路３０内の各メモリ・ユニットに結合された二つ（左および右の）３２ビットアーギュメント入力（ＡＬ．ＬおよびＡＬ．Ｒ）を有している。このユニットＡＬはメモリ回路３０に結合された３２ビットの出力（ＡＬ．Ｏ）を有しており、命令語ＩＷの１６ビット・フィールドＡＬＣによって制御される。
【００３５】
図４には、算術論理ユニットＡＬに付設されたイミテーション・マルチポート・メモリ回路３０の部分を詳細に示してある。図１の全体的な例における場合のように、セパレート形のメモリ・ユニット（ＲＡＭ群）４８、５０、５２にはそれぞれオペランドＡＬ．Ｇ、ＡＬ．Ｌ、ＡＬ．Ｒがそれぞれ付設されている。図１の例と比較すると、図２から図４の装置におけるメモリ・ユニットには、セパレート書き込みイネーブル信号．ＷＥは供給されない。この代わりに、そのメモリ・ユニットに対する書き込みが望まれない場合には、少なくとも一つのノン・イグジステント記憶位置あるいはノン・ライタブル記憶位置をアドレス可能になっている。したがって、．ＷＥビットの値が、結果が特定のメモリ・ユニットの位置に割り当てられる場合のスケジューリングの時点で、既に分かっていると仮定した場合には、これらのビット命令語ＩＷの幅を、．ＷＥビットが存在しない分だけ減少させることができる。ガード・ビットＡＬ．Ｇ用のメモリ・ユニット４８は、ブール値（ビット）を記憶するための８個の１ビット位置を有している。これらには、上記した１つのノン・ライタブル位置が含まれている。メモリ・ユニット用の３ビットの読み出しアドレスは、命令レジスタ４６によって、命令語ＩＷ（図３を参照）のコントロール・フィールド内の３ビット・フィールドＡＬ．Ｇ．ＲＡから供給され、メモリ・ユニットの１ビットの読み出しポート５４は、アドレスされたメモリ位置からユニットＡＬに向けてガード・ビットＡＬ．Ｇを供給する。
【００３６】
マルチプレクサ５６は、多数の１ビット入力を有しており、これらは、各種の機能ユニットの結果出力（ＣＯ．Ｏ、ＡＬ．Ｏなど）に結合されている３２ビットのバス・ラインの最下位ビット（第１のビット）に結合されている。マルチプレクサの別に入力は、別の３２ビットのバス・ライン５８の第１ビットに結合されており、このバス・ラインはスペシャル・レジスタＳＰからの遅延された結果出力を転送する。このレジスタは図１において符号２１が付された遅延エレメントと同一のタイプである。ガード・ビット用の第１のビットを使用することにより、或るプログラミング規約、例えばＣ言語などの規約との互換性が可能になる。他の環境においては、最上位ビット（ｍｓｂ）あるいはその他のビットを使用した方が便利である場合もある。
【００３７】
マルチプレクサ５６は、メモリ・ユニット４８の書き込みポートに結合された１ビットの出力６０を有している。このマルチプレクサ５６は、命令語ＩＷのデスティネーション・コントロール・フィールドＤＥＣにおける３ビットの選択フィールドによって制御される。メモリ・ユニット４８の３ビットの書き込みアドレスはデスティネーション・コントロール・フィールドＤＥＣにおける隣接した３ビットのフィールドＡＬ．Ｇ．ＷＡによって供給される。
【００３８】
同様にして、３２ビット構成のメモリ・ユニト５０（ＡＬ．Ｌ用）と５２（ＡＬ．Ｒ用）は、それぞれ付設された３２ビットのマルチプレクサ６２、６４を有している。それぞれは、１６個の位置を有し、その中には１つのノン・ライタブル位置が含まれている。デスティネーション・コントロール・フィールドＤＥＣは、マルチプレクサ６２、６４を制御するための２つの３ビット構成の選択フィールドＡＬ．Ｌ．ＳＥおよびＡＬ．Ｒ．ＳＥと、メモリ・ユニット５０、５２のそれぞれに対して４ビットの書き込みポートアドレスを供給する２つの４ビット構成のフィールドＡＬ．Ｌ．ＷＡおよびＡＬ．Ｒ．ＷＡを有している。コントロール・フィールドＡＬＣにおける２つの４ビット構成のフィールドＡＬ．Ｌ．ＲＡおよびＡＬ．Ｒ．ＲＡによって、それぞれ、メモリ・ユニット５０（ＡＬ．Ｌ用）および５２（ＡＬ．Ｒ用）の読み出しポート用のアドレスが提供される。
【００３９】
算術論理ユニットＡＬのオペコードＡＬ．ＯＰは、ユニットＡＬ用のコントロール・ビットＡＬＣ内のＳビット構成のフィールドによって提供される。各サイクルにおいて、オペコードＡＬ．ＯＰは、どのような動作（加算、減算、比較、ＡＮＤ、ＯＲ等）をアーギュメントＡＬ．Ｌに行って結果ＡＬ．Ｏを生成するのかを決定する。
【００４０】
図２に戻って、レジスタ・ユニットＲＧによって、頻繁に使用されるそれぞれ３２ビット構成の１６個ののプログラム変数のオン・チップ記憶領域が提供される。このユニットＲＧはガード・ビットＲＧ．Ｇ用のメモリ回路３０内のメモリ・ユニットと、３２ビット構成のデータ入力ＲＧ．Ｉを有している。これらのメモリ・ユニットは、それぞれ、一つのノン・ライタブル位置を含む４個だけの位置を有している。データ出力（ＲＧ．Ｏ）はメモリ回路３０の入力に結合されており、各バス・ライン（ＲＧ．Ｏ、図４も参照のこと）を形成している。デスティネーション・コントロール・フィールドＤＥＣは、付設されたマルチプレクサを制御するための２つの３ビット構成の選択フィールドＲＧ．Ｇ．ＳＥおよびＲＧ．Ｉ．ＳＥと、各メモリ・ユニット内における４つの位置の間を選択するための２つの２ビット構成の書き込みアドレス・フィールドＲＧ．Ｇ．ＷＡおよびＲＧ．Ｉ．ＷＡを有している。
【００４１】
９ビット構成のレジスタ・コントロール・フィールドＲＧＣ内には、２つの２ビット構成の読み出しアドレスＲＧ．Ｇ．ＲＡおよびＲＧ．Ｉ．ＲＡが配置され、これらにより、それぞれのメモリ・ユニットにより読み出される値ＲＧ．ＧおよびＲＧ．Ｉの位置が選択されるようになっている。５ビット構成のオペコード・フィールドＲＧ．ＯＰは、レジスタの読み出しおよび書き込み機能を選択するための１ビットと、ユニットＲＧ内の１６個のレジスタを選択するための４ビットを有している。したがって、レジスタ・ユニットＲＧ内の変数の位置はコンパイラによって固定される。
【００４２】
データ・メモリ・ユニットＤＭは、少なくとも概念的には、より多くの変数記憶位置を有しており、実際上は、当該技術分野において公知の態様でオン・チップ・キャッシュメモリを介して、読み出し／書き込みおよび／またはリードオンリメモリに対するインタフェースを構成する。イミテーション・マルチポート・メモリ回路３０内においては、セパレート・メモリ・ユニットが、ガート・ビットＤＭ．Ｇ、３２ビットのアドレス語ＤＭ．Ａおよび３２ビットのデータ語ＤＭ．Ｉ用に配置されている。これらのメモリ・ユニットは、それぞれ２５６個の位置を有し、その中には、一つのノン・ライタブル位置が含まれている。データ・メモリ・ユニットＤＭはメモリかろ３０の入力に結合された３２ビットのデータ出力（ＤＭ．Ｏ）を有し、それぞれのバス・ライン（ＤＭ．Ｏ、図４も参照のこと）を形成している。デスティネーション・コントロール・フィールドＤＥＣは、メモリ回路３０内のマルチプレクサを制御するための３個の３ビット構成の選択フィールドＤＭ．Ｇ．ＳＥ、ＤＭ．Ａ．ＳＥおよびＤＭ．Ｉ．ＳＥと、各メモリ・ユニット内の２５６個の位置を選択するための３個の８ビット構成の書き込みアドレス・フィールドＤＭ．Ｇ．ＷＡ、ＤＭ．Ａ．ＷＡおよびＤＭ．Ｉ．ＷＡを有している。
【００４３】
２５ビット構成のデータ・メモリ・ユニット・コントロール・フィールドＤＭＣ内においては、３個の８ビット構成の読み出しアドレスＤＭ．Ｇ．ＲＡ、ＤＭ．Ａ．ＲＡおよびＤＭ．Ｉ．ＲＡが配置され、各メモリ・ユニットにより読み出される値ＤＭ．Ｇ、ＤＭ．ＡおよびＤＭ．Ｉを選択するようになっている。１ビット構成のオペコード・フィールドＤＭ．ＯＰは、メモリの読み出し、書き込み機能を選択するための１ビットを有している。アドレス語ＤＭ．Ａによって、データ語ＤＭ．Ｉの書き込みあるいはデータ語ＤＭ．Ｏの読み出し用のアドレスが規定される。これにより、プログラムの走行中において、２３２個の位置をアドレスするのに充分な３２ビットのダイナミックなアドレス計算が可能になる。
【００４４】
分岐ユニットＢＲにより、シーケンサＳＥによって発生した命令アドレスＰＣのシーケンスを修正して、プログラム実行における分岐を行なわせることが可能である。このユニットＢＲは、メモリ回路３０内において、ガード・ビットＢＲ．Ｇおよび３２ビットのデスティネーション・アドレスＢＲ．Ａ用のメモリ・ユニットを有している。これらのメモリ・ユニットは、４つの位置を有し、これらの各位置は、ノン・ライタブル位置を含んでいる。デスティネーション・コントロール・フィールドＤＥＣは、付随のマルチプレクサを制御するための２つの３ビット選択フィールドＢＲ．Ｇ．ＳＥおよびＢＲ．Ａ．ＳＥと、各メモリ・ユニット内の４個の位置を選択するための２つの２ビット構成の書き込みアドレス・フィールドＢＲ．Ｇ．ＷＡおよびＢＲ．Ａ．ＷＡを有している。
【００４５】
４ビット構成の分岐ユニット・コントロール・フィールドＢＲＣ内において、２つの２ビット構成の読み出しアドレスＢＲ．Ｇ．ＲＡおよびＢＲ．Ａ．ＲＡが配置され、各メモリ・ユニットから読み出される値ＢＲ．ＧおよびＢＲ．Ａの位置を選択できるようになっている。分岐ユニットＢＲは、ガード・ビットＢＲ．Ｇおよびデスティネーション・アドレスＢＲ．Ａを単に通過して、シーケンサＳＥＱに至っている。オペコード・フィールドＢＲ．ＯＰは不要である。シーケンサＳＥＱ内において、ガード・ビットＢＲ．Ｇのブール値がテストされる。ＢＲ．ＧがＴＲＵＥである場合には、分岐が発生して、シーケンサＳＥＱは次のＰＣの値をメモリ回路３０から受け取ったデスティネーション・アドレスＢＲ．Ａに等しくなるようにする。ＢＲ．ＡがＦＡＬＳＥである場合には、シーケンサは単に、ＰＣの値をＰＣ＋１にインクリメントして、記憶されているプログラムにおける次の命令をアドレスする。
【００４６】
したがって、論理結果ＡＬ．ＯをＢＲ．Ｇ（第１のビットのＴＲＵＥあるいはＦＡＬＳＥ）用のメモリ・ユニットに差し向けることにより、条件付き分岐を行うことができる。
【００４７】
無条件（必ず行われる、あるいは決して行われない）分岐は、ＢＧ．Ｇとしてコンスタント結果ＣＯ．Ｏをメモリ・ユニットに差し向けることにより、あるいは、そのメモリ・ユニット内のノン・ライタブル位置を永久的にＴＲＵＥあるいはＦＡＬＳＥとなるようにすることによって、達成することができる。本例においては、このようにすることが実際上においては便利である。その理由は、各メモリ・ユニット内の少なくとも一つの位置が、既に上記したようにノン・ライタブルとなっているからである。ガード・ビットＢＲ．ＧをＦＡＬＳＥにすること（分岐が決して発生しない場合）は、或るサイクルにおいて非分岐動作を開始すべき場合にはしばしば必要とされる。
【００４８】
シーケンサＳＥＱはまた、疑似プログラム値ＰＰＣを発生し、この値は、メモリ回路３０の入力に供給され、バス・ライン（ＰＰＣ、図４を参照のこと）を形成する。このＰＰＣを、分岐ユニットを含む別の機能ユニットにより使用して、プログラム・カウンタに関するアドレスを行うようにすることもできる。このためには、読み出しの遅延を、バス・ラインからメモリユニット内に値ＰＰＣを読み出す命令のサイクル数とＰＰＣの値と同一のＰＣを有する命令のサイクル数との差として規定すればよい。
【００４９】
動作を説明する。分岐命令が発生するサイクルｉと、命令語ＩＷ（ｉ＋ｂ）が分岐命令により行われた第１のサイクルｉ＋ｂとの間において、ｂサイクルの分岐遅延が発生する。分岐命令の条件を設定する同一のブール値を、ガード・ビット入力ＡＬ．Ｇ、ＲＧ．ＧおよびＢＲ．Ｇに差し向けて、サイクルを中断させて、条件付きで、次の分岐を含む分岐遅延の間における各種の機能ユニットをスケジュールするための状態変化動作を遮ることができる。分岐の可能性を知ることによって、コンパイラを、起こりえない条件付き分岐命令内において有用な動作にスケジュールすることができ、分岐条件が満される希有な場合における正しい状態を確保する。これらのユニット上においてアンガーデッド動作を最も効率良く開始するために、各ガード・メモリ・ユニットのノン・ライタブル位置を、適切な読み出しアドレス．ＲＡに応答してそれらの読み出しポートからＴＲＵＥを引き出すことができるように構成すればよい。３２ビットのオペラント・メモリ・ユニットのノン・ライタブル位置を、しばしば必要される公知の値、例えば零を引き出すことができるように構成してもよい。
【００５０】
オフ・チップ・メモリ、レジスタ・ユニットＲＧおよびプログラム・カウンタＰＣの内容のみが、本例においては、処理装置におけるプログラマーが可視可能な部分と見なされる。イミテーション・マルチポート・メモリ回路３０は、コンパイラによって、一時的に変数を仲介するために使用される。したがって、コンスタント・ユニットＣＯなどの機能ユニットはガーディングを必要としない。算術論理ユニットＡＬは、それ自体では装置におけるプログラマーが可視できる状態を変更する能力はないが、このユニットＡＬには、非論理的に発生する算術オーバーフロー等の例外を回避するためのガーディングが組み込まれている。
【００５１】
分岐ユニットＢＲの分岐遅延に加えて、スケジューリング用コンパイラは、全ての機能ユニットにおけるいわゆる「待ち時間」を知っていなければならない。機能ユニットにおけるこの待ち時間は、動作が開始するサイクルの数と、その動作による結果（ＡＬ．Ｏ等）が生成されて、デスティネション・コントロール・フィールドＤＥＣによってイミテーション・マルチポート・ユニット３０内の目標とする位置（群）に差し向けられるサイクルの数との差として定義される。上記した分岐遅延は、分岐ユニットＢＲによる待ち時間と、シーケンサＳＥＱおよびオフ・チップ・命令発生パイプラインＩＩＰによる待ち時間との合計であると考えることができる。
【００５２】
次のプログラミング例においては、機能ユニット群の待ち時間は次のように想定される。
【００５３】
ユニットＣＯ・・零サイクル数の待ち時間
ユニットＡＬ・・１サイクル数の待ち時間
ユニットＲＧ・・１サイクル数の待ち時間
ユニットＤＭ・・２サイクル数の待ち時間
ユニットＢＲ・・５サイクル数の待ち時間
【００５４】
以下のリスティング１は、高級言語のソースコードのフラグメントから構成されている。２つのメモリ内のレコードが変数ｐおよびｑによって指定される。このプログラムの目的は、ｑレコード内のフィールド群から２つの対応するｐレコード内のフィールド群までの２つの３２ビット構成の値のコピーを行われることにある。
【００５５】
リステイング １
ｐ＾．ｆｉｅｌｄ１：＝ｑ＾．ｆｉｅｌｄ；
ｐ＾．ｆｉｅｌｄ２：＝ｑ＾．ｆｉｅｌｄ２：
【００５６】
作表１の高水準命令を実現するために用いることのできるデータの１つの可能な構成を図５に示す。プログラム変数用記憶は、０から１５までの番号のついた１６の記憶場所および（チップ外）読出し書込み用メモリの大型バンクＭＥＭを持つ高速レジスタファイルＲＥＧによってプロットされる。ローカルベースアドレスＬＢは、レジスタファイルＲＥＧの場所０に記憶される。アドレスＬＢは、メモリバンクＭＲＭ内の可変値表の開始点をポイントし、このメモリバンクでは、場所ＬＢ＋１２及びＬＢ＋８に２つのレコードポインタｐ及びｑがそれぞれ記憶される。各変数ｐ及びｑは、メモリーバンクＭＥＭの他の場所を占める対応するレコードの開始点に対するポインタである。各レコードの第１のフィールドは、関連ポインタ変数によって定義されるアドレスからのオフセットがゼロとなるように記憶される。各レコードの第２のフィールドは、関連ポインタ変数からのオフセットが４になるように記憶される。従って、値ｑ＾．ｆｌｅｌｄ２は、アドレスがｑ＋４である場所から読出すことができる。
【００５７】
前記図５に示すデータ構成であるものと仮定した場合において、作表１の高水準命令をＶＬＩＷプロセッサで実行するためにコンパイラによって生成されるＴ１とラベルされた中間コードフラグメントを作表２に示す。作表２の各行は、適当な機能ユニットによって実行するためにスケジュールしなければならない１つの単一基本オペレーションＯＰ００１からＯＰ０１４までを定義する。各行の端末の注釈（＊．．．＊）は、最初に、必要な機能ユニットのタイプ（ＡＬ、ＲＧ、ＣＯ等）を示し、次に、当該オペレーションの結果（出力）を示す。オペレーションＯｐ００３（例えば）における参照００１及び００２は、ＯＰ００３のためのオペランドが各々Ｏｐ００１およびＯｐ００２の結果であることを示す。従って、オペレーションＯｐ００３の効果は、オペレーションＯｐ００１とＯｐ００２の結果を加算することであり、オペレーションＯＰ００９の効果は、ＯＰ００４の結果によってアドレスされた場所のオフ・チップデータメモリーへＯｐ００８の結果を書込むことである。この情報を前記図５の記述と組合わせると、作表１によって指定された機能を実現する際における作表２のＯｐ００１からＯｐ０１４までの各オペレーションの目的は説明するまでもないはずである。
【００５８】
0003687982.tif 000002
【００５９】
中間のコードフラグメントＴ１は順次に表示されており、各オペレーションを実施するために少なくとも１つの機能ユニットが適切であるならば、ＶＬＩＷプロセサの特別なコンフィギュレーションに特有のものでないことが理解出来るはずである。コンパイラが、アプリケーションを構成するフラグメントを収集する段階に達すると、特定の装置コンフィギュレーショウにおける特定のサイクルにおいて、フラグメントの各オペレーションを特定の機能ユニットにマップすることはスケジューラのタスクである。スケジューラは、特定のＶＬＩＷプロセッサの構造によって定義される一組の制約条件の下で動作する。これらの制約条件には、主として、ターゲットＶＬＩＷプロセッサにおいて利用可能な機能ユニットの数とタイプが含まれる。別の制約条件には、イミテーションマルチ・ポートメモリの各メモリユニットにおけるロケーションの数が含まれる。これらのロケーションは、スケジューラにより、必要に応じて、動的に割り当てられる。フラグメントＴ１によって呈示されるスケジューリング上の簡単な問題を解決するためには、図２から４までに示すＶＬＩＷ処理装置における各メモリユニット内のロケーションの数は充分であり、メモリユニットの容量上の制限は、当記述においては制約条件として取り扱う必要のないことが理解されるはずである。
【００６０】
他のオペレーションの結果に依存するオペレーションは、これらの他のオペレーション全てのレイテンシーが満了してしまうまで、スケジュールしてはならないので、各オペレーションに対するレイテンシーは重要である。従って、例えば、オペレーションＯｐ００９は、Ｏｐ００４（ＤＭレイテンシーは２）よりも少なくとも２サイクル後に、また、オペレーションＯｐ００８よりも少なくとも２サイクル後に、スケジュールされなければならない。同様に、オペレーションＯｐ０１１は、Ｏｐ０１０（ＣＯレイテンシーはゼロ）と同じサイクルにスケジュールすることができるが、Ｏｐ００４（ＤＭレイテンシーは２）より少なくとも２サイクル後にスケジュールしなければならない。この場合、メモリユニットロケーションの同時書込み及び読取りが可能であるものと仮定する。そのほかの条件として、各タイプのオペレーションに対して、更に１サイクルのレイテンシーが必要とされる場合もある。
【００６１】
３つの異なるスケジュール（Ｉ，ＩＩ、及び、ＩＩＩ）を示す図６において、各スケジュールは、中間コードフラグメントＴ１は、図２、３および４を参照して既に述べた特定のＶＬＩＷプロセッサにマッピングする。各表の各列は、非常に長い１つの命令語ＩＷ、従って１マシンサイクルを表す。サイクル数は、Ｃｙを項目名とする左端欄に示される。その次の５つの欄は、５つの機能ユニット（図２のＣＯ等）に対する５つの制御フィールドＣＯＣ、ＡＬＣ、ＲＧＣ、ＤＭＣ、及び、ＢＲＣを表す。各制御フィールドは、そのそれぞれの機能ユニットに対するオペレーションを開始する。このように、スケジュール１において、サイクル０、フィールドＣＯＣは、コンスタントユニット（図２におけるＣＯ）に対して、Ｏｐ００５の開始を命令し、その結果として、同じサイクル（Ｃｏレイテンシーはゼロ）におけるユニットＣＯの出力に、結果ＣＯ．Ｏ＝８が現れる。同様に、レジスタ読取りオペレーションＯｐ００１を読むレジスタは、フィールドＲＧＣによってサイクル０において開始される。従って、ローカルベースアドレスの値ＬＢは、サイクル１（ＲＧレイテンシーは１）におけるＲＧ．Ｏである。
【００６２】
各命令内の行先制御フィールドＤＥＣの選択フィールドＤＥＣ．−−．−−．ＳＥは、機能ユニット制御フィールドの右部分に表示される。これらのフィールドは、様々なオペレーションＯｐ００１からＯｐ０１４までの結果を、利用可能になった結果として、それぞれのメモリーユニット内に導く。スケジューラは、行先制御フィールドＤＥＣを定義する際に種々の機能ユニットのレイテンシーを適当に処理する。従って、例えば、サイクル０においてフィールドＲＧＣによって開始されるレジスタ読取りオペレーションＯｐ００１の結果ＲＧ．Ｏは、サイクル１内のその次の命令に際してフィールドＤＥＣ．ＡＬ．Ｌ．ＳＥにより、算術および論理ユニットＡＬの左これは、スケジュール１、サイクル１におけるＡＬ．Ｌ欄に指示されます。同様に、メモリ読取りオペレーションＯｐ００７はサイクル２のフィールドＤＭＣによって開始され、他方では、サイクル４（ＤＭレイテンシーは２）において、フィールドＤＥＣ．ＤＭ．Ａ．ＳＥを“ＤＭ”にセットすることにより、当該オペレーションの結果ＤＭ．Ｏが、データメモリユニットＤＭのアドレスメモリユニットに導かれる。
【００６３】
スケジューラは、作表２における次のフラグメント（”ＧＯＴＯ  ＥＸＩＴ”）へのジャンプを実施するために、それ自身のオペレーションＮｗ０１５とＮｗ０１６を加える。ＮｗＯ１５は、ブランチに対するターゲットアドレスを定義するために、サイクル１において、コンスタントユニットＣＯを使用し、当該ブランチは、サイクル１において、選択フィールドＤＥＣ．ＢＲ．Ａ．ＳＥを”ＣＯ”にセットすることによってブランチユニットＢＲのアドレスメモリユニットに向けられる。Ｎｗ０１６は、同じくサイクル１において、ターゲットアドレスに対して無条件（ＢＲ．Ｇ＝１）ブランチを開始するためにブランチ制御フィールドＢＲＣを用いる。５サイクルに相当する長いブランチ遅延により、ターゲットアドレスヘの制御の移動が、フラグメントＴ１が完成した後で、サイクル８までは発生しないことが保証される。換言すれば、有用なオペレーションがブランチ遅延の間に実行されるようにスケジュール可能にするために、スケジュールにおいてブランチオペレーションは前方に置かれている。図６のスケジュールＩにおいては、オペレーションの最大可能数のわずかに約３分の１だけが実際にスケジュールされていることに注意されたい。これは、例にあげたフラグメントのサイズが非常に小さいことが原因であり、そして、当該技術分野でのの熟達者にとっては、更に長いフラグメントをスケジュールする場合には、スケジュールできる有用なオペレーションの割合が更に大きくなることが理解できるはずである。理由は、フラグメントが長くなれば、長いフラグメントに固有の並行性が高くなるからである。
【００６４】
長めのフラグメントに固有の多数の条件付き分岐オペレーションは、ここに記述する実施例においては、ブール値化されたガードビット．Ｇの使用によって克服される、即ち、大部分の条件付ブランチは、ブランチ確立が１に近いか、或いは、ゼロに近くなるようにアレンジすることができるという事実を利用する。例えば、１００回実行しようとするループは、０．９９又は０．０１の確率で起きることを予測可能なブランチに関係する。
【００６５】
図６のスケジュールＩは、行先制御フィールドＤＥＣを完全に無視することにより、真のマルチポートメモリを持つＶＬＩＷマシンによって実行可能なはずである。しかしながら、スケジュールＩは、模倣マルチポートメモリのメモリーユニットへアクセスするための衝突を含み、従って、オペレーションＯｐ００１からＯｐ０１４までを、図２，３、及び、４に示すプロセッサに正当にマッピングしていない。スケジュールＩのサイクル５において、Ｏｐ００４の結果ＤＭ．Ｏは、算術および論理ユニットＡＬの左のオペランドメモリユニット（ＡＬ．Ｌ）に対し、及び、データメモリユニットＤＭのアドレスメモリユニット（ＤＭ．Ａ）に対して予定される。同じサイクル４において、Ｏｐ０１２の結果ＡＬ．Ｏは、同様に、データメモリユニットＤＭのアドレスメモリユニット（ＤＭ．Ａ）に対して予定される。この衝突は、スケジュールＩのサイクル５におけるフィールドＤＥＣ．ＤＭ．Ａ．ＳＥのコードＸＸによってマークされる。
【００６６】
遅延エレメント（特殊レジスタＳＰ）が不在である場合、スケジューラは、その衝突を発見した時点で、プロセッサのハードウェアに対する制約条件が満足されるまで、これらのオペレーションをスケジュールし直すように強制される。当例において、この状況は、図６のスケジュールＩＩへと導く。スケジュールＩＩにおいて，Ｏｐ００４は、サイクル４における開始が１サイクルだけ遅延した。しかし、オペレーションＯｐ００９、Ｏｐ０１１、及び、Ｃｐ０１４はＯｐ００４の結果に依存するので、これらのオペレーションも少なくとも１サイクルだけ遅延しなければならない。これらのオペレーションは、スケジュールＩにおいて、他のオペレーションＯｐ００１２，Ｏｐ００８、Ｏｐ０１３、及び、Ｏｐ０１４によってインタリーブされたので、ハードウェアに関する制約条件のために、同様に、スケジュールし直さなければならない。
【００６７】
スケジュールし直すプロセス、即ち、「バックトラッキング」は、必ず、ハードウェア制約条件を満足させるように完成することができるが、スケジュールし直されたフラグメントＴ１は、８サイクルの代わりに９サイクルを占めることとなる。この事は、アプリケーションプログラムのこの部分が、同じ機能ユニットを持つ理想的なＶＬＩＷマシンの場合よりも１２．５％だけ余計に長い事を意味する。更に、バックトラッキングは、第１の衝突を解決する際に起こる新規な衝突の解決を含む余分の仕事にコンパイラを巻き込むことのなる。コンパイラの仕事が増加する問題は、ほとんど全サイクルごとに衝突が発生する可能性のある大型マシンにおいて特に重大性を増す。一般に、衝突の起きたサイクルに亙って多数の命令がスケジュールされている場合まで、衝突の存在が検出されないことは、明白である。機能ユニットの数が１０以上に達する大型マシンにおいてこれは、数十ないし数百のオペレーションさえスケジュールし直す必要があり、しかも、スケジュールし直し中に、スケジュールし直し回数と同じ件数の新規な衝突が起きる可能性がある。
【００６８】
図６のスケジュールＩＩＩは、図１の一般化されたマシンに関して既に述べたように、特殊レジスタＳＰの形の遅延エレメントを用いてバックトラッキングを行うことなしに、例として呈示れた衝突を解決する方法を示す。行先制御フィールドＤＥＣにおける選択フィールドＤＥＣ．ＳＰ．ＳＥを、スケジュールＩＩＩ内の右に示す。オペレーションＯｐ００１からＯｐ０１４まで、及び、ＮＷ０１５からＮＷ０１６までのスケジューリングは、スケジュールＩ（真のマルチポートメモリ）の場合とほとんど同じであるということが分かるはずである。しかし、スケジュールＩＩＩにおいては、ＤＭ．Ａメモリに対して予定された２つの結果の間のサイクル５における衝突は、Ｏｐ００４の結果ＤＭ．Ｏを特殊レジスタに向けることにより、即ち、フィールドＤＥＣ．ＳＰ．ＳＥを行先制御フィールドＤＥＣにおける「ＤＭ」にセットすることにより解決される。次に、サイクル６におけるＯｐ００９のデータメモリユニットＤＭが読取るために要する時間内に、Ｏｐ００４の遅延された結果をＤＭ．Ａメモリユニットに向けるために、サイクル６において、フィールドＤＥＣ．ＤＭ．Ａ．ＳＥが「ＳＰ」にセットされる。
【００６９】
この段階で、Ｏｐ００４の遅延された結果は、サイクル６において、Ｏｐ０１１の結果と衝突し、両方結果ともＤＭ．Ａメモリユニットに対して予定される。従って、スケジュールＩＩＩにおいて、Ｏｐ０１１のスタートは、サイクル６まで遅延され、他のオペレーションには結果的な影響は及ぼさない。この第２の衝突に対して解決するの代りの方法はＯｐ０１１をサイクル５に残すことになり、一方、サイクル６においてフィールドＤＥＣ．ＳＰ．ＳＥを「ＡＬ」にセットすることによってＯｐ０１１の結果を遅延させる。次に、Ｏｐ０１１の遅延された結果は、サイクル７におけるフィールドＤＥＣ．ＤＭ．Ａ．ＳＥを「ＳＦ」にセットすることによって、Ｏｐ０１４の開始に必要な時間内に、ＤＭ．Ａメモリユニットに向けることができるはずである。
【００７０】
あらゆる所定サイクル内でただ１つの単一２値衝突だけが起きる限り、バックトラッキングを回避しながら、真のマルチポートマシンの性能レベルを維持するには、特殊レジスタＳＰは、常に効果的であるはずである。これは、機能ユニットが各サイクル内にメモリユニットから読出すことができるのは１つの値だけに限られるということ、即ち、衝突結果のうちの１つが、１つの衝突結果の前に、必ず、必要とされるという事実から帰結される。引き数を実施するために、Ｏｐ００４の結果が必要とするよりもさらに急速にＯｐ０１１の結果が求められた場合には、Ｏｐ００４の結果は、２サイクル、又は最終的にこの結果が衝突結果より緊急を要するようになるまで、任意のサイクル数だけ遅延させることができるはずである。全ての場合に、他のオペレーションの結果的なスケジュールし直しの必要性は回避することができる。
【００７１】
図１の一般化されたＶＬＩＷマシンに戻って記述すると、一定の遅延を実現するための１つの単一レジスタでなく、多数のロケーションを持つ特殊ランダムアクセスメモリユニット７０の形の強化遅延エレメントを図７に示す。当実施例用の命令レジスタは、特殊メモリユニット７０に対して読取りポートアドレスＳＰ．ＲＡ、書込みポートアドレスＳＰ．ＷＡ及び関連書込み可能化信号ＳＰ．Ａを定義する追加制御フィールドを供給する。スケジューラは、特殊メモリユニットの種々のロケーションを用いて、対応する数の「重複する」２値衝突を解決できる。これらの重複する衝突は、結果が１サイクル以上遅延することを必要とするために、異なるサイクルにおいて起こるが相互に重なる衝突である。
【００７２】
１つの単一サイクル内で起こるより高位衝突、及び／又は、多重２値衝突の解決を可能にするために、遅延エレメントを更に付加することは簡単である。ＶＬＩＷマシンの設計者は、コスト効果の高いマシンを設計するために、機能ユニットおよびメモリユニットそれぞれのオペランドに対してユニットの数およびタイプを変える事が出来ると同様な方法で、この種エレメントの数を変えることができる。遅延エレメントは、単一遅延レジスタ又はアドレスされたランダムアクセスメモリユニット、或はこれら双方の混合体の形、又は、他の有用な任意の形であっても差し支えない。各遅延は、必要なバスラインによって占められる回路面積を減少させるために、マシンの入力、及び／又は、出力に関して、マシンの機能ユニットの部分集合としての機能を果たすように制限できるはずである。
【００７３】
自動スケジューラが、所定のハードウェアコンフィギュレーションによって定義された制約条件に基づいてプログラムされると、人間のプログラマは、ＶＩＬＷプロセッサ内でのオペレーションの詳細な割り振りに関係する必要がない。この種の詳細は、コンパイルする際にスケジューラによって決定され、自身のいずれかの並列コンピュータにおけるラン−タイムスケジューラによって決定されるのではないので、ＶＬＩＷマシンの設計者は、作動するマシンを作成する必要なしに、該当する制約条件を用いてスケジューラをランさせるだけで、種々のコンフィギュレーションの性能を迅速に比較することができる。
【００７４】
同様に、２値衝突を回避する能力を備えた模倣マルチ・ポートメモリの代替構成を図８に示す。例として、第１の機能ユニットＦ１の左のオペランド入力を参照すると、オペランドＦ１．Ｌ（図１）用のメモリユニット１５は、それぞれのマルチプレクサ８４または８５を介して任意のバスライン１６に接続された接続可能な２つの書込みポート８１および８２を持つメモリユニット８０と交換されている。メモリユニット８０は、それぞれ関連した使用可能化信号．ＷＥを伴った２つの書込みアドレス、Ｆ１．Ｌ１．ＷＡ、及び、Ｆ１．Ｌ２．ＷＡを必要とし、マルチプレクサ８４及び８５は、それぞれの選択信号Ｆ１．Ｌ１．ＳＥ、及び、Ｆ１．Ｌ２．ＳＥを必要とする。これらの信号は、既に述べたように、非常に長い命令語内の追加フィールドによって供給される。
【００７５】
遅延エレメント２１（図  １）、ＳＰ（図  ２）、及び、７０（図  ７）を備えることと比較すると、単一メモリユニット８０に多重書込みポートを備えることは、回路が余分に複雑化するのにひきかえ、Ｆ１．Ｌメモリユニットにおける衝突だけが回避されるという短所を持つ。しかし、特定の１つの機能ユニット、または、機能ユニットの或るタイプに限って衝突が最も頻繁に起きるということがあるかも知れない。このような場合に、当該タイプの機能ユニットをついか装備することがコスト効果的でないならば、図８の実施例が魅力的となる可能性がある。図８の回路は、スイッチング回路に１本のバスライン（２４…図１）を追加しないという長所を持つ。典型的なＶＬＩＷマシンにおいては、バスラインが、回路面積のかなりの部分を占有する傾向がある。マルチポートメモリユニット８０では、その占有面積は同様に増大するが、模倣マルチポートメモリ全体としては、全ての共通機能ユニットとして役立つ真のマルチポートメモリより効率的な状態を維持する。どんなことがあっても、図８における鎖線２４は、あらゆる場合に、メモリユニット８０は、厳密な意味での代替品である代わりに、遅延エレメントの外に多重書込みポートを備えることが可能であることを示す。更に、マルチポート付きメモリユニット８０には１つの書込み不能ロケーションを備えさせることが可能であり、従って、既に述べた図２から４までの実施例の場合のように、２つの書込み可能化信号Ｆ１．Ｌ１．ＷＥ、及び、Ｆ１．Ｌ２．ＷＥの必要性を排除できる。
【００７６】
最終的な結果として、ＶＬＩＷプロセッサの設計者は、模倣マルチポートメモリの性能を改良するために或る技術範囲が利用可能であり、従って、真のマルチポートメモリに更に近付けることができる。設計者は、あらゆる所定のアプリケーションに適した技術または技術の組合わせを選択可能であり、この種技術は、アプリケーションの特性によって変化するはずである。
【００７６】
装備させようとする機能ユニットの数およびタイプの選択も実質的に全く自由である。図２に示す特定の実施例における各ユニットは、特定の機能または機能のグループを遂行するために或る程度専門化されるが、スケジューリングに最大限の融通性を持たせるために、これら機能グループは、更に一般的な多目的タイプの機能ユニットに組み合わせることができる，このタイプのユニットの短所は、完全な逐次制御方式を可能にするには、全てのオペレーションに対してレイテンシーが一定であることが望ましく、従って、速い方のオペレーション（例えば一定の生成のような）を最も遅いオペレーションの速度まで減速しなければならないことである。一方、更に専門化したタイプの機能ユニットは、アプリケーションによっては有用であり、例えば浮動小数点乗算、バレルシフチング、または、入力／出力機能を遂行する。この技術分野における熟達者にとって、従来のマイクロプロセッサに使われるユニットと同じタイプのユニットを、本発明に基づき、処理装置にとり入れることは適切かつ容易である。
【図面の簡単な説明】
【図１】本願の第１の発明による処理装置の全体構成を示すブロック図である。
【図２】本願の第１の発明による処理装置の例を示すブロック図である。
【図３】図２に示す装置におけるベリー・ロング命令後のフィーマットを示す説明図である。
【図４】図２の装置におけるイミテーション・マルチポート・メモリの部分を示すブロック図である。
【図５】例示したプログラムの部分的な動作を示す説明図である。
【図６】図２の装置用に例示したプログラムの一部分のスケジューリングを示す説明図であり、ここには衝突という問題点が含まれている。
【図７】図１の処理装置の修正例を示すブロック図である。
【図８】本願の第２の発明にしたがって構成した、図１の処理装置の別の実施例を示すブロック図である。
【符号の説明】
Ｆ１、Ｆ２、・・・ＦＮ  ・・・機能ユニット
１０・・・イミテーション・メモリ・ユニット
１２・・・データ出力
１３・・・制御入力
１４・・・データ入力
１５・・・メモリ・ユニット
１６、２４・・・バス・ライン
１８・・・スイッチング回路
２０、２２・・・マルチプレクサ
２１・・・レジスタ
【図１】
0003687982.tif 000003
【図２】
0003687982.tif 000004
【図３】
0003687982.tif 000005
【図４】
0003687982.tif 000006
【図５】
0003687982.tif 000007
【図６】
0003687982.tif 000008
【図７】
0003687982.tif 000009
【図８】
0003687982.tif 000010