JPH0496825A - データ・プロセッサ - Google Patents
データ・プロセッサInfo
- Publication number
- JPH0496825A JPH0496825A JP2214260A JP21426090A JPH0496825A JP H0496825 A JPH0496825 A JP H0496825A JP 2214260 A JP2214260 A JP 2214260A JP 21426090 A JP21426090 A JP 21426090A JP H0496825 A JPH0496825 A JP H0496825A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- register
- instructions
- data
- decoder
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
め要約のデータは記録されません。
Description
を同時に実行することの可能な32ビツトRISCマイ
クロプロセツサに関する。 [従来の技術] 命令を高速に実行可能な縮小命令セット・コンピュータ
(Reduced In5truction Set
Computer。 以下RISCと言う)は米国IBM社による1986年
8月18日の米国特許出願第896.156号を優先権
主張とした特開昭63−49843号公報に詳細に説明
されている。 複雑命令セット・コンピュータ(ComplexIns
truction Set Computer、以下C
l5Cと言う)はソフトウェアからハードウェアに移さ
れる機能の増加に伴ってマイクロプロセッサのハードウ
ェアが複雑になるのに対し、RISCコンピュータは処
理速度を高速とするため簡単な機能を実行するようにそ
のアーキテクチアが構成される。 このRISCコンピュータとして、すへての基本命令を
1マシーン・サイクルで実行するよう基本命令セットを
ハードウェアで直接実行する基本縮小命令セット櫂マシ
ーン(PrimitiveInstruction S
et Computing Machine Syst
em 。 以下PRISMと言う)も公知である。 一方、性能向上の速度が鈍りはじめたCl5Cからまだ
性能向上の速度が向上するRISCへと、高性能のマイ
クロプロセッサのアーキテクチュアの主流が大きく変わ
りつつある。 最近の高性能のRISCマイクロプロセッサでは、命令
の長さが32ビツトに固定された固定長命令を採用して
おり、この固定長命令は1マシン・サイクルで実行され
ることができる。 一方、1989年の技術文献r■EEE Intern
atianalSolid−3tate C1rcui
ts Conference DTGEST 0FTE
C)INTCAL PAPER5J、PP54−55に
は米国Inte1社によって開発されたマイクロプロセ
ッサが開示されており、メモリと接続される外部バスの
データ幅は64ビツトであり、バスのバンド幅拡張によ
る処理性能が向上されてる。すなわち、64ピノ1への
外部データバスを介してメモリから1サイクルで2つの
32ピント命令がマイクロプロセッサにフェッチされ、
この2つの命令が整数演算命令と浮動小数点演算命令で
ある場合は、この・整数演算命令とこの浮動小数点演算
命令とは、整数演算ユニットと浮動小数点演算ユニット
とによって同時に並行して実行されることができる。 一方、上記の特開昭63−19843号公報には、同時
に2つの命令を実行する機能を有するRISCプロセッ
サが開示されている。このプロセッサは、第1と第2の
実行ユニットと、第1と第2の命令デコード・ユニット
と、メモリから命令をフェッチして第1と第2の命令デ
コード・ユニットに命令を供給する命令バッファと、レ
ジスタ・ファイル等を具備し、第1と第2の実行ユニツ
)−はレジスタ・ファイルの出力を同時に受は取って並
行して処理を行うことができる。 さらに、上記の特開昭63−49843号公報には、2
つの並列命令を同時に実行することが不可能である特別
な状況((1)2つの並列命令のうち第2の命令が、第
1の命令の結果を必要とする場合、(2)2つの並列命
令が同じ命令に部類に属する場合、(3)並列命令の一
方が他方よりも多くのサイクルを必要とする場合、(4
)並列命令の一方が両方の実行ユニットを必要とする場
合、(5)2つの並列命令のディスティネーション・レ
ジスタが同じ場合に、一方の命令を取り消すことによっ
て、2つの命令が順序をはずれて実行されないようにす
る必要が有る場合)が開示されるとともに、この特別な
状況の対応策(上記(1)、(2)の状態はコンパイラ
によるコード・スケジューリングで対応すべきこと、R
ISCプロセッサは基本命令を有し、また複数サイクル
を必要とする命令は非常に僅かなので上記(3)、(4
)の状態は頻繁には発生しないこと、上記(5)の状態
に対処するためには例外処理ハードウェアを用いること
)が開示されている。 [発明が解決しようとする課題] しかしながら本発明者等の検討によれば、上記従来技術
では下記の如き問題が生ずると言うことが明らかとされ
た。 すなわち、上記の技術文献に開示されたアーキテクチャ
においては、整数演算命令は整数演算ユニットを制御し
、浮動小数点演算命令は浮動小数点演算ユニットを制御
するので、ふたつの演算ユニットの間でコンフリクトが
生じないことを利用しているが、整数を扱う数値演算命
令を2つ同時に実行する方式にはこのアーキテクチャは
適用できないと言う問題がある。 一方、上記の特開昭63−49843号公報に開示され
た方式においては、コンパイラによる過度の命令コード
・スケジューリング処理を強要しているので、ソフトウ
ェア作成上の制約が多いと言う間厘がある。 さらに、上記の公開特許公報に開示された方式において
は、命令コード・スケジューリングをコンパイラで行う
ので、複数の命令をシリアル実行する従来のハードウェ
アのために作成されたプログラムをこの並列実行ハード
ウェアのために変換する必要が有り、従来のハードウェ
アとの互換性を保つことができないと言う問題が有る。 従って、本発明の目的は、数値を扱う数値演算命令を2
つ同時に実行することの可能なデータ・プロセッサを提
供することにある。 本発明の他の目的は、コンパイラに対する命令スケジュ
ーリングの負担を軽減できるハードウェアを具備したデ
ータ・プロセッサを提供することにある。 本発明の他の目的は、従来の直列実行ハードウェアとプ
ログラムの互換性を有する並列実行可能なデータ・プロ
セッサを提供することにある。 1課題を解決するための手段】 本願において開示される発明のうち、代表的な実施例に
よるマイクロプロセッサの概要は下記の通りである。 すなわち、(1)所定のビット’@(32ビツト)の命
令長の第1及び第2の命令をメモリからフェッチし、上
記第1及び第2の命令を並行に出力する命令フェッチユ
ニット(640)と、 (2)その入力に上記命令フェッチユニット(640)
から出力される上記第1の命令が供給される第1の命令
デコーダ(644)と。 (3)その入力に上記命令フェッチユニット(645)
から出力される−上記第2の命令が供給される第2の命
令デコーダ(645)と、 (4)上記第1の命令デコーダ(644)のデコー1へ
結果によって制御される第1の命令実行ユニット(65
1)と、 (5)上記第2の命令デコーダ(645)のデコード結
果によって制御される第2の命令実行ユニット(652
)と。 (6)上記命令フェッチユニット(640)から出力さ
れる上記第1の命令のデスティネーションフィールドの
情報と上記命令フェッチユニット(640)から出力さ
れる上記第2の命令のソースフィールドの情報とを比較
する比較器(131゜132)とを具備してなり。 上記命令フェッチユニット(640)から出力される上
記第1の命令のデスティネーションフィールドの情報と
上記命令フェッチユニット(640)から出力される上
記第2の命令のソースフイールドの情報とが一致する際
、上記比較器(131゜132)の出力は上記第1の命
令実行ユニット(651)と上記第2の命令実行ユニッ
ト(652)とにおける上記第1及び第2の命令の並行
実行を禁止する。 [作用] 1サイクルでメモリ(620)から第1と第2の命令が
命令フェッチユニット(640)によってフェッチされ
、このフェッチされた第1と第2の命令は第1と第2の
デコーダ(644,645)によってデコードされる。 第1と第2のデコーダ(644,645)のデコード結
果に従って、命令実行ユニット(651゜652)が制
御される。 命令フェッチユニット(640)から呂カされる第1の
命令のデスティネーションフィールドの情報と命令フェ
ッチユニット(640)がら出力される第2の命令のソ
ースフィールドの情報とが一致しない際は、第1及び第
2の命令を並行して実行することができる。従って、比
較器(131゜132)の出力は第1の命令実行ユニッ
ト(651)と第2の命令実行ユニット(652)とに
おける第1及び第2の命令の並行実行を許可する。 一方、命令フェッチユニット(640)から出力される
第1の命令のデスティネーションフィールドの情報と命
令フェッチユニット(640)から出力される第2の命
令のソースフィールドの情報とが一致する際は、第1及
び第2の命令を並行しで実行することがでない。従って
、比較器(131゜132)の出力は第1の命令実行ユ
ニット(651)と第2の命令実行ユニット(652)
とにおける第1及び第2の命令の並行実行を禁止する。 本発明のその他の目的と特徴は、以下の実施例の説明か
ら明らかとなろう。 [実施例] 以下、本発明の一実施例を図面に冶って、詳細に説明す
る。 データ・プロセッサの 要 第1図は本発明の一実施例であるデータ・プロセッサの
ブロック図である。このデータ・プロセッサは、大きく
分類すると、プロセッサ部610、プログラムメモリ6
20、及び、データメモリ630から構成されている。 プログラムメモリ620は、命令アドレスバス621及
び命令データバス622によって、プロセッサ610と
接続されている。 命令アドレスバス621は、32ビット幅で、4G(ギ
ガ)バイトまでアドレッシング可能である。 命令データバス622は64ビット幅で、1回の転送で
2つの命令が同時にプログラムメモリ620かC〕フェ
ッチされることができる。 データメモリ630は、オペランドアドレスバス631
及びオペランドデータバス632によって、プロセッサ
610と接続されている。 オペランドアドレスバス631は、332ビット幅で、
4G(ギガ)バイトまでアドレッシング可能である。 オペランドデータバス632は、32ビット幅で、1回
の転送で1ワードのデータがデータメモリ630からフ
ェッチ又はストアされることができる。 また、プログラムメモリ620およびデータメモリ63
0は、それぞ才し、例えば命令キャッシュメモリとデー
タキャッシュメモリであり、メインメモリ(図示せず)
の命令およびデータの一部のコピーを保持するものであ
る。 プロセッサの内部4戒 プロセッサ610は、命令のアドレスを計算するプログ
ラムカウンタ643.及び、ブリフェッチした命令を保
持するブリフエソチハッファ640、第1命令レジスタ
641、第2命令レジスタ642、第1命令デコーダ6
44、第2命令デコーダ645、レジスタファイル65
o、第1演算器651、第2?′iI算器652、メモ
リアドレスレジスタ(MAR)653、メモリデータレ
ジスタ(MDR)654.、並列動作制御ユニット64
6から成る。 ブリフェッチユニツlへ ブリフェッチユニツ]・であるブリフェッチバッファ6
40は、64ビツト幅で、プログラムメモリ620から
1度にフェッチしてきた2命令を保持することができる
。 ブリフェッチバッファ640の内容は、第1命令レジス
タ641、及び、第2命令レジスタ642に空きができ
た時点で、左側命令は第1命令レジスタ641へ、右側
の命令は第2命令レジスタ642へ転送される。 本実施例ではビッグエンデイアンのアドレス付けを採用
しており、ブリフェッチバッファ640に保持された2
つの命令の内、左側の命令が若いアドレスの命令であり
先に実行され、その次に右側の命令が実行される。 レジスタファイル レジスタファイル650は32ビツト幅のレジスタ、8
2本RO,R1,R2,・・R31から成り、5ポート
の読み出し及び3ポートの書き込みが同時に可能である
6 命令デコーダ 1サイクルでプログラムメモリ620から命令フェッチ
バッファ640にフェッチされた第1と第2の命令が、
それぞれ第1と第2のデコーダ644.645によって
デコードされる。 第1と第2のデコーダ644,645のデコード結果に
従って、命令実行ユニット651゜652が制御される
。 全土3オドし玉LΣ 命令実行ユニットの演算器651及び652は、それぞ
れ32ビツトのA側人力655及び657とB側入力6
56及び658を持ち、2人力の数値演算(算術論理演
算)を行なうALU、及び、B側入力656及び658
をA側人力655及び657の桁だけシフトするバレル
シフタSFから構成されている。 ル絞塁 命令ブリフェッチバッファ640から出力される第1の
命令のデスティネーションフィールドの情報と命令ブリ
フェッチバッファ640から出力される第2の命令のソ
ースフィールドの情報とが一致しない際は、第1及び第
2の命令を並行して実行することができる。従って、こ
の際、第1の命令のデスティネーションフィールドの情
報と第2の命令のソースフィールドの情報とに応答して
。 比較器131,132の出力は第1の命令実行ユニット
651と第2の命令実行ユニット652とにおける第1
及び第2の命令の並行実行を許可する。 一方、命令フェッチユニット640から出力される第1
の命令のデスティネーションフィールドの情報と命令フ
ェッチユニット640から出力される第2の命令のソー
スフィールドの情報とが一致する際は、第1及び第2の
命令を並行して実行することができない。従って、この
際、第1の命令のデスティネーションフィールドの情報
と第2の命令のソースフィールドの情報とに応答して。 比較器131,132の出力は第1の命令実行ユニット
651と第2の命令実行ユニット652とにおける第1
及び第2の命令の並行実行を禁止する。 11 動 制′ユニット 並列動作制御ユニット646は、第1命令デコーダ64
1および第2命令デコーダ645のデコード結果、比較
器131.132の出力等の情報を受け、第1命令レジ
スタ641、第2命令レジスタ642にセットされてい
る2つの命令が並列実行できるか否かを判定する。 2つの命令を並列実行できる場合は、第1命令デコーダ
644および第2命令デコーダ645のデコード結果を
有効として、2つの命令を第1の命令実行ユニット65
1と第2の命令実行ユニット652とで実行する。 2つの命令を並列実行できない場合は、第2命令デコー
ダ645のデコード結果を無効化し、第1命令デコーダ
644のデコード結果のみを有効として、この2つの命
令をシリアルに実行する。 命令ブリフェッチバッファ640によって同時にフェッ
チされた2つの命令のうち、(1)第1の命令が数値演
算命令で第2の命令も数値演算命令である場合、及び、
(2)第1の命令が分岐命令で第2の命令が数値演算命
令である場合、(3)第1の命令が数値演算命令で第2
の命令がメモリ操作命令である場合、(4)第1の命令
が分岐命令で第2の命令がメモリ操作命令である場合に
は。 この2つの命令は原則的に同時に実行できる。 しかしながら、(5)第1の命令が分岐命令で第2の命
令も分岐命令である場合、及び、(6)第1の命令がメ
モリ操作命令で第2の命令もメモリ操作命令である場合
には、上述のハードウェアにより、2つの命令の同時実
行を抑止できる。 また、(7)第1の命令のデスティネーションレジスタ
が第2の命令のソースレジスタになった場合も、上述の
ハードウェアにより2つの命令の同時実行を抑止できる
ので、命令間のデータ依存関係を維持することができる
。 一般に、データ・プロセッサの命令実行頻度は、分岐命
令が20〜30%、メモリ操作命令も20〜30%、残
りが数値演算命令である。また、分岐命令やメモリ操作
命令はそれぞれを2つ連続して実行することは稀である
。 従って、第1図の実施例の2つの命令の同時実行を可能
としたデータ・プロセッサにおいて、第1の命令実行ユ
ニット651を数値演算命令と分岐命令用に限定し、第
2の命令実行ユニット652を数値演算命令とメモリ操
作命令用に限定しても、性能上はほとんど問題がない。 さらに、上記のように命令実行ユニットの機能を限定し
ているので、実現する回路規模も少なくて済む。 岐とデイレイスロット 分岐命令において、遅延分岐の手法が使われることがよ
くある。この手法では、分岐命令の次の1サイクルをデ
イレイスロットと呼び、RISCプロセッサのためにコ
ンパイルされたプログラムの分岐命令の直後の命令をこ
のサイクルに実行する。この分岐命令の直後の命令の実
行の後、実際の分岐を行なう。 このRISCプロセッサのためにコンパイルされたプロ
グラムの分岐命令の直後の命令は、Cl5Cプロセツサ
の如き通常のデータ・プロセッサのためにコンパイルさ
れたプログラムの分岐命令の直前の命令に対応している
。 一方、」二連の如<、RISCプロセッサにおいては、
分岐命令の直後の命令(通常の場合の分岐命令の直前の
命令)を先に実行し、しかる後、分岐命令を実行する。 遅延分岐およびデイレイスロットに関しては、Gerr
y Kane著によるrmj、ps RISCARCH
ITEC)ITLIREJ第1−9頁乃至第1−11頁
(1988年)に詳しく記載されている。 すなわち、通常のプロセッサは命令フェッチ、命令デコ
ード、命令実行の多段のパイプラインによる命令の並列
処理を実行している。 このパイプライン並列処理のため、分岐命令による分岐
先アドレス計算を行っている間に、命令フェッチユニッ
トは分岐命令に続く命令を続々とフェッチする処理を続
行する。 従来のCl5Cプロセツサでは1分岐を実行する時には
、先行的にフェッチした分岐命令に続く命令を無効化し
て1分岐先命令を新たにフェッチし、命令デコード、命
令実行するものである。従って、Cl5Cプロセツサで
は、その実行に2サイクルを必要とする分岐命令の後に
、自動的に何も作業をしない1サイクル(〜o 0pe
rationのサイクル)が挿入さ九でしまう。 一方、RISCプロセッサでは、分岐を実行する時には
、先行的にフェッチした分岐命令に続く命令(通常の場
合の分岐命令の直前の命令)を無効化しないで、先にこ
の命令を実行し、しかる後に分岐命令を実行し、新たに
分岐先命令をフェッチするものである。 この様に、RISCプロセッサでは分岐命令の後に、無
効化されることのない有効な命令をプログラム中で配置
することによって、このサイクルを有効に活用すること
ができる。このような分岐命令の仕様は遅延分岐と呼ば
れ、分岐命令の後の1サイクルはデイレイスロットと呼
ばれている。 チーイレイスロットにおける2命令同時〜従って、RI
SCプロセッサにおける2つの命令の同時実行を行う場
合の、遅延分岐のデイレイスロットの基本的な扱いにつ
いて以下に説明する。 まず、直前の命令が条件分岐命令で、その後に2つの命
令をフェッチした場合には、(1)条件分岐命令の条件
が成立する場合は、デイレイスロットでは第1の命令だ
け実行する。(2)もし条件分岐命令の条件が不成立の
場合は、第2の命令も第1の命令と同時に実行できるも
のであるならば、2つの命令をデイレイスロットで実行
する。 この遅延分岐の動作については、第6図(f)の実施例
において詳細に説明する。 命令のフォーマット 第2図は本発明の一実施例である第1図のプロセッサの
ための命令のフォーマットを説明する図である。 第2図に示すように、1つの命令は32ビツトの固定長
で、左端より6ビツト、5ビツト、5ビツト、16ビツ
トのフィールドに分割されている。 左端の6ビツトのフィール1〜210は命令の種類を示
すオペレーションコート(○Pコード)である。次の5
ビツトのフィールl; 220は命令の実行結果を格納
するレジスタを指定するデスティネーションフィールド
である。次の5ビツトのフィールド230は命令の入力
レジスタの一方を指定する第1ソースフイールドである
。右端の16ビツトのフィールド240はもう一方の入
力を指定する第2ソースフイールドである。第2ソース
フイールド240は第2図(a)に示すように16ビツ
トのイミディエイトデータとして用いられる場合と、第
2図(b)に示すように、右端の5ビツト250によっ
てレジスタを指定する場合がある。第2ソースフイール
ドを上記のどちらの使い方にするかは、OPコード21
0の左端のビットで指定され、「O」のとき(a)、「
1」のとき(b)のように使われる。(a)の形式の命
令をイミディエイト命令と呼び、(b)の形式の命令を
レジスタ命令と呼ぶ。 なお、本実施例ではレジスタファイルのレジスタの数は
32本であり、レジスタRO,R1゜R2,・・・R3
1を指定する場合には上記のように5ビツトを必要とす
る。 第5図は○Pコード210のビット割り当てを示したも
のである。 ■7I:■(ロー1へ・アッパー・イミデイエイト)命
令510は、第2ソースフイールド240の16ビツト
のイミディエイトデータの右側に16ビツト分の「0」
を連結して、32ビツトのイミディエイ)へにして、デ
スティネーションフィール1’ 220に示されるレジ
スタに格納する命令である。 ADDI(アット・イミディエイト)命令5]2は、第
2ソースフイールド240の16ビントのイミディエイ
トデータの左側に第2ソースフイールF 240の最上
位ビットと同じ値を16ビツト分、連結して、32ビツ
トのイミデイエイトに符号拡張した後、第1ソースフイ
ールド230で示さ才りるレジスタの内容と加算して、
デスティネーションフィールド220に示されるレジス
タに格納する命令である。 5UBI(サブトラクト・イミディエイト)命令514
は、第2ソースフイールド240をADDI命令512
と同様に32ビツトのイミディエイトLこ符号拡張した
後、第1ソースフィール1; 230で示されるレジス
タの内容から減算して、デスティネーンヨンフイールト
220に示されるレジスタに格納する命令である。 ANDI (アンド・イミデイエイト)命令516は
、第2ソースフイールド240の16ビツトのイミディ
エイトデータの左側に16ビツト分の「0」を連結して
、32ビツトのイミデイエイトに拡張した後、第1ソー
スフイールド230で示されるレジスタの内容との間で
各ビットごとの論理積を求めて、その結果をデスティネ
ーションフィールド220に示されるレジスタに格納す
る命令である。 ○RI(オア・イミデイエイト)命令518、及び、E
ORT (イクスクルーシブ・オア・イミディエイト)
命令520は、ANDI命令516と同様に、それぞれ
、論理和、排他的論理和を求める命令である。 5LLI (シフト・レフト・ロジカル・イミディエイ
ト)命令522は、第1ソースフイールド230で示さ
れるレジスタの内容を第2ソースフイールド240の1
6ビツトのイミデイエイトデータの数だけ左にシフトし
て、その結果をデスティネーションフィールド220に
示されるレジスタに格納する命令である。このとき、右
端からシフトインされる値はrQJである。 5RLI (シフト・ライト・ロジカル・イミディエイ
ト)命令524は、5LLI命令522とは逆に右にシ
フトする命令である。このとき、左端からシフトインさ
れる値は「O」である。 5RAI (シフト・ライト・アリスメツテイツク・
イミディエイト)命令526は、5RLI命令524と
同様に右にシフトする命令であるが、左端からシフトイ
ンされる値は「0」ではなく、第1ソースフイールド2
30で示されるレジスタの右端のビットと同し値である
。 LD(ロード)命令530は、第2ソースフイールド2
40をADDI命令512と同様に32ビツトのイミデ
ィエイトに符号拡張した後、第1ソースフイールド23
0で示されるレジスタの内容と加算した結果をアドレス
とし、そのアドレスで示されたデータメモリの内容をデ
スティネーションフィールド220に示されるレジスタ
に格納する命令である。 ST(ストア)命令532は、LD命令530と同様に
アドレスを求め、デスティネーションフィールド220
に示されるレジスタの内容を、そのアドレスで示された
データメモリに格納する命令である。 Bee (ブランチ)命令536は、条件付き分岐命令
で、条件が成立したとき、第2ソースフイールド240
の16ビツトのイミデイエイトデータの左側に第2ソー
スフイールド240の最」−位ビットと同じ値を16ビ
ツト分、連結して、32ビツトのイミデイエイトに符号
拡張した値と、現在の命令のアドレスを示すPC(プロ
グラム カウンタ)の値を加算したアドレスへ、プログ
ラムの流れを変える命令である。なお、このときの分岐
条件はデスティネーションフィールド220の5ビツト
によって指定される。 ADD命令552からSRA命令566まては、それぞ
れA D D T命令5】2からSRΔ■命令526に
おいて、第2ソースオペランドとしてレジスタの内容を
用いる命令である。 JUMP(ジャンプ)命令576は、無条件分岐命令で
、第2ソースフイールド240の示すレジスタの内容を
分岐先ア1〜レスとし、そのアドレスへプログラムの流
れを変える命令である。 本実施例では、LUI命令510から5RAI命令52
6.及びADD命令552からSRA命令566は数値
演算命令に分類され、LD命令530及びST命令53
2はメモリ操作命令に分類され、またBcc命令536
及びJ U M P命令576は分岐命令に分類される
。 一4命玲J口引大竹(詐 第3図は本発明の特徴である2つの命令を同時に実行す
るときの動作を示す図である。 先ず、第3図(a)は分岐命令と数値演算命令を同時に
実行するときの動作を示す図である。分岐命令が64ビ
ツト命令データバス622の左側でフェッチされ、○R
I命令が64ビツト命令デタバス622の右側でフェッ
チされた場合である。本実施例によ才
の命令を同時に実行することができる。 6・1ピツ1〜命令データバス622の左側でフェッチ
された分岐命令は第1命令レジスタ641にセ/1、さ
れ、同時に64ビツト命令データバス622の右側でフ
ェッチされたORI命令は第2命令レジスタ642にセ
ットさ才りる。第1命令デコーダ644は第1命令レジ
スタ641のOPココ−−フィールド111を解読して
分岐命令であることを検出し、第2命令デコーダ645
は第2命令レジスタ642の○Pコードフィールド12
1を解読し数値演算命令(ORI命令)であることを検
出する。 並列動作制御ユニット646は、第1及び第2命令デコ
ーダ644,645のデコード結果から、フェッチされ
た分岐命令と数値演算命令とは並列に実行可能な種類の
命令であることが判る。 また、分岐命令では実行結果をデスティネーションレジ
スタにセットしないので、数値演算命令(OR工命令)
のソースレジスタとコンフリクトを生じないことがわか
る6以上の判定によって、並列動作制御ユニット646
はこれら2つの命令を同じサイクルで並列に実行を開始
する。 つまり、分岐命令の動作として、第1命令レジスタ64
1の第2ソースフイールド114の16ビツトイミデイ
エイトデータの左側に、このイミディエイトデータの符
号を16ビツト分連結して32ビツト長に拡張したもの
を、プログラムカウンタ643に入力し現在の命令アド
レスと加算することによって、分岐先アドレスを求る。 一方、デスティネーションフィールド112で示される
分岐条件を判定して、条件を満たしている場合は。 上記の分岐先アドレスを用いて次回以降の命令フェッチ
を行なう。 また同時に、○RI命令の動作として、第2命令レジス
タ642の第1ソースフイールド123に従って、レジ
スタファイル650中のR3レジスタの内容を読み出し
、また、第2ソースフイールド124の16ビツトイミ
デイエイトを32ビツト長に拡張する。これら2つのデ
ータの論理和を演算器652で求め、その結果をデステ
ィネーションフィールド122で示されるレジスタファ
イル650中のR3レジスタへ格納する。なお、演算器
652は、第2命令レジスタ642のOPコード121
を解読する第2デコーダ645によって制御される。ま
た、第2ソースフイールド124のイミディエイトの拡
張も第2デコーダ645によって制御される。 なお、本実施例では、分岐命令の次の命令が分岐命令と
同じサイクルで実行できる場合には、この命令を同時に
実行し、デイレイスロットでは、新たな命令の実行を開
始しないことにしている。 また。分岐命令の次の命令が分岐命令と同じサイクルで
実行できない場合には、この命令をデイレイスロットで
実行することにしている。 従って、本実施例によれば従来のプロセッサと同等の動
作となり、互換性を保証することができる。 他の実施例として、分岐命令の次の命令が分岐命令と回
しサイクルで実行できる場合には、この命イ5を同時に
実行し、デイレイスロットでは新たな命令の実行を開始
する方式が考えられる。この場合には、ディレイスロノ
1−で3つの命令を実行した場合と同等になり、処理性
能をさらに向」−させることができる。 また、lr、記の説明では、分岐命令の直前の命令は分
岐命令ではない場合について説明した。本実施例では分
岐命令は他の分岐命令のデイレイスロットに配置しない
ように、コンパイラ等のソフトウェアによって制限され
ているので、命令実行回路ではこのような場合はないも
のとして構成されている。 第3図(b)は数値演算命令とメモリ操作命令を同時に
実行するときの動作を示す図である。 ADD命令が64ビツト命令データバス622の左側で
フェッチされ、L D命令が右側でフェッチされた場合
である。ADD命令でレジスタファイル650のR1レ
ジスタの内容とR2レジスタの内容を加算し、R3レジ
スタに格納し、LD命令でR5レジスタとイミディエイ
1〜データを加算した値をアドレスとするデータメモリ
630の内容を■又4レジスタにセットする。本実施例
によれば以」二の2つの命令を同時に実行することがで
きる。 64ピント命令データバス622の左側でフェッチされ
たADD命令はブリフェッチバッファ640から第1命
令レジスタ641にセットされ、同時に64ピント命令
データバス622の右側でフェッチされたLD命令はブ
リフェッチバッファ64、0から第2命令レジスタ64
2にセットされる。第1命令デコーダ644は第1命令
レジスタ641のOPコートフィールド141を解読し
て数値演算命令(ADD命令)であることを検出し、第
2命令デコーダ645は第2命令レジスタ642のOP
コートフィールド151を解読してメモリ操作命令(L
D命令)であることを検出する。 並列動作制御ユニット646は、第1及び第2命令デコ
ーダ644,645のデコード結果から上記2つの命令
は並列に実行できる種類の命令であることが判る。 また、比較器131は第1命令レジスタ641のデステ
ィネーションフィールド142と第2命令レジスタ64
2の第1ソースフイールド153を比較して、一致して
いないことを検出する。以上の判定により、並列動作制
御ユニット646はこれら2つの命令を同じサイクルで
並列に実行を開始する。 つまり、ADD命令の動作として、第1命令レジスタ6
41の第1ソースフイールド143に従って、R1レジ
スタの内容を読み出し、また、第2ソースフイールド1
44に従って、R2レジスタの内容を読み出す。これら
2つのデータの和を演算器651で求め、その結果をデ
スティネーションフィールド142で示されるR3レジ
スタへ格納する。なお、演算器651は、第1命令レジ
スタ641の○Pコード141を解読する第1デコーダ
644によって制御される。 また同時に、LD命令の動作として、第2命令レジスタ
642の第2ソースフイールド154の16ビツトイミ
デイエイトデータを32ビツト長に符号拡張したものと
第2命令レジスタ642の第1ソースフイールド153
によって指定されたR5レジスタとを加算した値を演算
器652で求め、この値をM A R653にセットし
て、これをアドレスとするデータメモリ630の内容を
M D R654に読み出し、この読み出しデータを第
2命令レジスタ642のデスティネーションフィールド
152で示されるレジスタファイル650のR4レジス
タにセットする。なお、演算器652は、第2命令レジ
スタ642のopコート151を解読する第2デコーダ
6・15によって制御される。 次に実行する命令は、ブリフェッチバッファ640に保
持されでいる命令であるので、このプリフェッチバッフ
ァ640の命令を第1命令レジスタ641及び第2命令
レジスタ642へ転送して、以下同様に実行する。 なお、上記の説明では、LD命令の直曲の命令はADD
命令で、分岐命令ではない場合について説明した。他の
動作例として直前の命令(左側の命令)がAI)D命令
でなく分岐命令の場合は、本実施例ではLD命令は分岐
命令とは同時に実行され、分岐命令のデイレイスロット
では新たにフェッチされた命令の実行を抑止する。 第3図(c)は数値演算命令を2つ同時に実行するとき
の動作を示す図である。ADD命令が64ピント命令デ
ータバス622の左側でフェッチされ、OR命令が右側
でフェッチされた場合である。ハDD命令でR1レジス
タの内容とR2レジスタの内容を加算し、R3レジスタ
に格納し、OR命令でR5レジスタとR6レジスタとの
論理和を求め、R4レジスタに格納する。本実施例によ
れば以上の2つの命令を同時に実行することができる。 64ビツト命令データバス622の左側でフェッチされ
たADD命令は第1命令レジスタ641にセットされ、
同時に64ビツト命令データバス622の右側でフェッ
チされたOR命令は第2命令レジスタ642にセットさ
れる。第1命令デコダ6・14は第1命令レジスタ6・
11のOPコートフィールド141を解読して数値演算
命令(ADD命令)であることを検出し、第2命令デコ
ーダ645は第2命令レジスタ6・12のOPコトフィ
ールド161を解、涜してメモリ操作命令(OR命令)
であることを検出する。 並列動作制御ユニット6・16は、上記第1及び第2の
命令デコーダ644,645のテコ−1〜結果から、上
記2つの命令が並列に実行できる種類の命令であること
が判る。 また、比較器131は第1命令レジスタ6・11のデス
ティネーションフィールド142と第2命令レジスタ6
42の第1ソースフイールド] (i 3を比較して、
一致していないことを検出する。また更に、比較器13
2は第1命令レジスタ641のデスティネーションフィ
ールド142と第2命令レジスタ642の第2ソースフ
イールド」64を比較して、−Mしていないことを検出
する。以上の判定により、並列動作制御ユニツ1−64
6はこれら2つの命令を同じサイクルで並列に実行を開
始する。 つまり、ADD命令の動作として、第1命令レジスタ6
41の第1ソースフイールド143に従って、R1レジ
スタの内容を読み出し、また、第2ソースフイールド1
44に従って、R2レジスタの内容を読み出す。これら
2つのデータの和を演算器651で求め、その結果をデ
スティネーションフィールド142で示されるR3レジ
スタへ格納する。なお、演算器651は、第1命令レジ
スタ641のOPコード141を解読する第1デコーダ
644によって制御される。 また同時に、OR命令の動作として、第2命令レジスタ
642の第1ソースフイールド163に従って、R5レ
ジスタの内容を読み出し、また、第2命令レジスタ64
2の第2ソースフイールド164に従って、R6レジス
タの内容を読み出す。 これら2つのデータの論理和を演算器652で求め、そ
の結果をデスティネーションフィールド162で示され
るR4レジスタへ格納する。なお、演算器652は、第
2命令レジスタ642の○Pコート161を解読する第
2デコーダ645によって制御される。 パイプライン処理 第4図は本実施例のプロセッサにおけるパイプライン処
理にについて示した図である。命令AからFが第4図(
C)に示すようにプログラムメモリ620に格納されて
いたとする。 第4図(c)では、同時にフェッチされる2つの命令を
横に並べて示しており、上方にある命令が若いアドレス
の命令であり、下方の命令が大きいアドレスの命令であ
る。従って、プログラムは上の命令からしたの命令への
順に実行される。 第4図(a)は本実施例のプロセッサにおいて本発明の
特徴である2つの命令を同時に実行するときのパイプラ
イン処理について示した図である。 命令AからFが第4図(C)に示すようにプログラムメ
モリ620に格納されていたとする。ここで、命令Aが
命令Xへ分岐する分岐命令Bccであり、命令Bが数値
演算命令であるとする。第4図(a)の1つの箱は各パ
イプラインステージの1クロツクサイクルの動作に対応
する。パイプラインのステージはIP(命令フェッチ)
、ID(命令テコート)、EX(演算実行)、M(デー
タフェッチ/ストア)、W(結果の格納)の5つのステ
ージから成る。 1Fステージは、プログラムメモリ620から命令をブ
リフェッチバッファ640へ読み吊すステージである。 IDステージは、ブリフェッチバッファ640から命令
を命令レジスタ641,642にセットして、命令デコ
ーダ644.645で解読すると同時に、レジスタファ
イル650から必要なオペランド・データを読み出すス
テージである。 EXステージは、演算器651.652によってオペラ
ンド・データを処理するステージである。 Mステージは、命令がもしLD命令又はST命令であっ
たら、データメモリ630をアクセスするステージであ
る。また、それ以外の命令ならば、実行結果をレジスタ
ファイル650に格納するステージである。 Wステージは、命令がLD命令の時、データメモリ63
0から読み出したデータをレジスタファイル650に格
納するステージである。 以下、第4図(a)のパイプライン処理の各クロックサ
イクル毎に説明する。 [1クロックサイクル目] プロゲラ11メモリ620から64ビット分の命令(A
とB)をフェッチして、ブリフェッチバッファ640に
セットする。 [2クロックサイクル目] ブリフェッチバッファ640に保持している2つの命令
(AとB)をそれぞれ第1命令レジスタ641及び第2
命令レジスタ642にセットし、第1命令デコーダ64
4及び第2命令デコーダ645で解読を行う。その結果
、命令へが分岐命令であり、命令Bが数値演算命令であ
ることが分かるので、次のサイクルでこの2つの命令を
同時に実行する準備を行う。なおこのとき、レジスタの
読み出し及びイミディエイトデータのデータ拡張が必要
な場合にはこのサイクルで行う。また、分岐先アドレス
の計算もこのサイクルで行う。 方、プログラムメモリ620からは次の64ビット分の
命令(CとD)をフェッチして、ブリフェッチバッファ
640にセットしておく。 [3クロックサイクル目] 第1命令デコーダ644で解読した命令A(分岐命令)
及び、第2命令デコーダ645で解読した命令B(数値
演算命令)を実行する。分岐条件が成立していたら、ブ
リフェッチバッファ640をクリアして、前のサイクル
で求めた分岐先アドレスを用いて、命令フェッチをやり
なおす。つまり、プログラムメモリ620から次の64
ビット分の命令(XとY)をフェッチして、ブリフェッ
チバッファ640にセットする。 [4クロックサイクル目コ 命令Bの実行結果をレジスタに格納するとともに、ブリ
フェッチバッファ640に保持している2つの命令(X
とY)をそれぞれ第1命令レジスタ641及び第2命令
レジスタ642にセットし、第1命令デコーダ644及
び第2命令デコーダ645で解読を行う。なおこのとき
、レジスタの読み出し及びイミディエイトデータのデー
タ拡張が必要な場合にはこのサイクルで行う。 [5クロックサイクル目コ 第1命令デコーダ644及び第2命令デコーダ642で
解読した2つの命令(XとY)を実行する。 以下同様に動作する。 第4図(b)は本実施例のプロセッサにおいて本発明の
特徴である2つの命令を同時に実行するときのパイプラ
イン処理にについて示した図である。命令AからFが第
4図(c)に示すようにプログラムメモリ620に格納
されていたとする。 ここで、命令Aが数値演算命令であり、命令BがLD命
令であるとする。以下、各クロックサイクル毎に説明す
る。 [1クロックサイクル目コ プログラムメモリ620から64ビット分の命令(Aと
B)をフェッチして、ブリフェッチバッファ640にセ
ントする。 [2クロックサイクル目] ブリフェッチバッファ640に保持している2つの命令
(AとB)をそれぞれ第1命令レジスタ641及び第2
命令レジスタ642にセットし、第1命令デコーダ64
4及び第2命令デコーダ645で解読を行う。その結果
、命令へが数値演算命令であり、命令BがLD命令であ
ることが分かるので、次のサイクルでこの2つの命令を
同時に実行する準備を行う。なおこのとき、レジスタの
読み出し及びイミディエイトデータのデータ拡張が必要
な場合にはこのサイクルで行う。一方、プログラムメモ
リ620からは次の64ビット分の命令(CとD)をフ
ェッチして、ブリフェッチバッファ640にセットして
おく。 [3クロックサイクル目] 第1命令デコーダ644で解Mした命令A(数値演算命
令)及び、第2命令デコーダ645で解読した命令B(
LD命令)を実行する。LD命令ではオペランドデータ
の実効アドレスの計算を行う。 一方、ブリフェッチバッファ640に保持している2つ
の命令(CとD)をそれぞれ第1命令レジスタ641及
び第2命令レジスタ642にセットし、第1命令デコー
ダ644及び第2命令デコーダ645で解読を行う。な
おこのとき、レジスタの読み出し及びイミディエイトデ
ータのデータ拡張が必要な場合にはこのサイクルで行う
。 [4クロックサイクル目コ 命令Aの実行結果をレジスタに格納するとともに」−記
のLD命令のオペランドの実効アドレスをもとにデータ
メモリ630をアクセスする。一方、第1命令デコーダ
644及び第2命令デコーダ642で解読した2つの命
令(CとD又はXとY)を実行する。 [5クロックサイクル目] LD命令のフェッチデータをレジスタに格納する。 以下同様に動作する。 尚、上記の説明では、データメモリ630はlサイクル
でアクセスできるものとしている。しかし、データメモ
リ630がキャッシュメモリである場合は、アクセスす
べきデータがキャッシュメモリ中に存在しない時(キャ
ッシュ・ミス)もある。 この時は、メインメモリをアクセスするためには、通常
キャッシュメモリをアクセスする場合に比べ、余分なサ
イクル数を必要とする。そこで、上記の例では、データ
メモリ630は1サイクルでアクセス可能であるとして
いるが、キャッシュ・ミスの場合は、必要なサイクルを
上記4クロックサイクル目と5クロックサイクル目との
間にダミーの実行サイクル(ウェイトサイクル)を挿入
するものとする。 以下の説明でも、データメモリ630は1サイクルで基
本的にアクセス可能として説明するが、必要に応じて更
なるダミーサイクルの挿入はあるものとする。 2つの数値演算命令のレジスタ・コンフリクト第6図(
a)は2つ数値演算命令の間でレジスタのコンフリクト
がある場合の動作を示す図である。ADD命令が64ビ
ツト命令データバス622の左側でフェッチされ、OR
命令が右側でフェッチされた場合である。ADD命令で
R1レジスタの内容とR2レジスタの内容を加算し、R
3レジスタに格納し、OR命令でR5レジスタとR3レ
ジスタとの論理和を求め、R4レジスタに格納する。本
発明によれば以上の2つの命令のレジスタのコンフリク
トを検出でき、1サイクルでの実行を抑止することがで
きる。 64ビツト命令データバス622の左側でフェッチされ
たADD命令は第1命令レジスタ641にセットされ、
同時に64ビツト命令データバス622の右側でフェッ
チされたOR命令は第2命令レジスタ642にセットさ
れる。第1命令デコーダ644は第1命令レジスタ64
1の○Pコードフィールド311を解読して数値演算命
令(ADD命令)であることを検出し、第2命令デコー
ダ645は第2命令レジスタ642のOPコードフィー
ルド316を解読してメモリ操作命令(OR命令)であ
ることを検出する。 並列動作制御ユニット646は、第1及び第2の命令デ
コード結果より、上記2つの命令は並列に実行できる種
類の命令であることが判る。 一方、比較器131は第1命令レジスタ641のデステ
ィネーションフィールド312と第2命令レジスタ64
2の第1ソースフイールド319を比較して、一致して
いないことを検出する。しかし、比較器132は第1命
令レジスタ641のデスティネーションフィールド31
2と第2命令レジスタ642の第2ソースフイールド3
18を比較して、−Mしていることを検出する。したが
って、並列動作制御ユニット646は比較器132の検
出出力からこれら2つの命令を同しサイクルで並列に実
行することはできないと判断し、これらの命令をシリア
ルに実行することになる。 つまりまず初めに、ADD命令の動作として、第1命令
レジスタ641の第1ソースフイールド313に従って
、R1レジスタの内容を読み出し、また、第2ソースフ
イールド314に従って、R2レジスタの内容を読み出
す。これら2つのデータの和を演算器651で求め、そ
の結果をデスティネーションフィールド312で示され
るR3レジスタへ格納する。なお、演算器651は、第
1命令レジスタ641のOPコート311を解読する第
1デコーダ644によって制御される。 本実施例では、全ての数値演算命令は1サイクルで実行
を完了する基本的な命令である。 従って、次の命令は1サイクル後に無条件に起動するこ
とができる。 次に、OR命令の動作として、第2命令レジスタ642
の第1ソースフイールド319に従って、R5レジスタ
の内容を読み出し、また、第2命令レジスタ642の第
2ソースフイールド318に従って、R3レジスタの内
容を読み出す。これら2つのデータの論理和を演算器6
52で求め、その結果をデスティネーションフィールド
317で示されるR4レジスタへ格納する。なお、演算
器652は、第2命令レジスタ642の○Pコート31
6を解読する第2デコーダ645によって制御される。 なお、本実施例によれば、第4図で説明したように、O
R命令のためのレジスタ読み出しは、直前のADD命令
の実行と同時に行われる。そのため、この時、レジスタ
R3の内容はADD命令の実行結果を未だ格納していな
い。 そこで、比較器132によりレジスタ番号が一致した場
合は、レジスタファイル650からの読み呂しの代わり
に、演算器651の出力を呂カレジスタ659にセット
すると同時に、演算器652の入力レジスタ658にセ
ットするバイパス手段を設けることが望ましい。 以上の様に同時にフェッチされた2つの命令の間でレジ
スタのコンフリクトがある場合でも、本実施例によれば
、コンフリクトを検出し正常に動作することができる。 2つのメモリ操作命令のバス・コンフリクトメモリ操作
命令はデータメモリ630をアクセスする命令であるた
め、もし2つのメモリ操作命令を並行に実行したならば
、オペランドアドレスバス631上で2つのメモリ操作
命令のアクセス・アドレスがコンフリクトする可能性が
ある。これを解消するためには、2つのメモリ操作命令
をシリアルに実行する必要がある。 第6図(b)は2つの連続したメモリ操作命令をシリア
ルに実行するときの動作を示す図である。 L D命令が64ビツト命令データバス622の左側と
右側で同時にフェッチされた場合である。左側のLD命
令でR1レジスタの内容とイミディエイトデータを加算
した値をアドレスとするデータメモリ630の内容をR
3レジスタに格納し、右側のLD命令でR5レジスタと
イミディエイトデータを加算した値をアドレスとするデ
ータメモリ630の内容をR4レジスタにセットする。 本実施例によれば以上の2つの命令をシリアライズして
実行することができる。 64ビツト命令データバス622の左側でフェッチされ
たLD命令は第1命令レジスタ641にセットされ、同
時に64ビット命令髪−タバス622の右側でフェッチ
されたLD命令は第2命令レジスタ642にセットされ
る。第1命令デコーダ644は第1命令レジスタ641
の○Pコードフィールド321を解読してメモリ操作命
令(LD命令)であることを検出し、第2命令デコーダ
645は第2命令レジスタ642のopコートフィール
ド326を解読してメモリ操作命令(LD命令)である
ことを検出する。 並列動作制御ユニット646は上記第1及び第2の命令
デコーダ644,645のデコード結果より、上記2つ
の命令は並列に実行できる種類の命令でないことが判る
。 本実施例によれば以上の判定により、並列動作制御ユニ
ット646は同一サイクルでの2命令の実行を抑止する
。 本実施例では第4図の説明のところで述へたように、L
D命令は1サイクル目にアドレスを計算し、2サイクル
ロに実際のメモリアクセスを行い、3サイクル目に結果
をデスティネーションレジスタにセットする。 そこで、上記2つの命令の実行手順をサイクルごとに以
下説明する。 まず第1のサイクルでは、左側のLD命令の動作として
、第1命令レジスタ641の第1ソースフイールド32
3に従って、R1レジスタの内容を読み出し、また、第
2ソースフイールド324の16ビツトイミデイエイト
データを32ビツト長に符号拡張したものとを加算した
値を演算器651で求め、この値をMAR653にセッ
トする。なお、演算器651は、第1命令レジスタ64
1の○Pコード321を解読する第1デコーダ644に
よって制御される。 第2のサイクルでは、左側のLD命令の動作として、M
AR653をアドレスとするメモリの内容をMDR65
4に読み出す。また、右側のLD命令の動作として、第
2命令レジスタ642の第2ソースフイールド329の
16ビツトイミデイエイトデータを32ビツト長に符号
拡張したものと第2命令レジスタ642の第1ソースフ
イールド328によって指定されたR5レジスタとを加
算した値を演算器652で求め、この値をMAR653
にセットする。なお、演算器652は、第2命令レジス
タ642の○Pコード151を解読する第2デコーダ6
45によって制御される。 第3のサイクルでは、左側のLD命令の動作として、M
DR654の読み出しデータを第1命令レジスタ641
のデスティネーションフィールド322で示されるR3
レジスタにセットする。また、右側のLD命令の動作と
して、MAR653をアドレスとするデータメモリ63
0の内容をMDR654に読み出す。 第4のサイクルでは、右側のLD命令の動作として、M
DR654の読み出しデータを第2命令レジスタ642
のデスティネーションフィールド327で示されるレジ
スタR4にセットする。 以上の様に、メモリ操作命令が2つ同時にフェッチされ
た場合でも、本実施例によれば、これを検出し、シリア
ライズして正常に動作することができる。 なお上記の例では、左側のLD命令のデスティネション
レジスタが右側のLD命令のソースレジスタに一致して
いない場合について説明したが、もし一致している場合
は、比較器131によって、これ(レジスタの一致、レ
ジスタコンフリクト)を検出できるので、左側のLD命
令のデイレイスロットを考慮して、並列動作制御ユニッ
ト646は1サイクルのウェイトを右側のLD命令のレ
ジスタ読み出しを開始する前に挿入する。 しかし、上記のように、1サイクルのウェイトを挿入し
ても、右側のLD命令のためのソースレジスタの読み出
しは、左側のLD命令のデータメモリ630のアクセス
と同時に行われるので、未だ左側のLD命令のソースレ
ジスタには右側のLD命令の実行結果が格納されていな
い。そこで、第6図(a)と同様に直前の命令がLD命
令で比較器131によりレジスタ番号が一致した場合は
、レジスタファイル650からの読み出しの代わりに、
データメモリ630からの読み出しデータをMDR6,
54にセットするのと同時に演算器652の入力レジス
タ657にセットするバイパス手段(図示せず)を有す
るのが望ましい。 メモリ操作命令の結果を う数値演算命令第1図の実施
例で説明したように、第1図において第1の命令実行ユ
ニット65]は数値演算命令と分岐命令用に限定し、第
2の命令実行ユニット652は数値演算命令とメモリ操
作命令用に限定されているとする。 この機能限定に関する前提に反して、メモリ操作命令と
数値演算命令とが第1命令レジスタ641と第2命令レ
ジスタ642とにセットされたとする。 この2つの命令は、並列に実行されることはできず、シ
リアルに実行する必要がある。 第6図(c)はメモリ操作命令の結果を使って数値演算
命令を実行するときの動作を示す図である。L D命令
が64ビツト命令データバス622の左側でフェッチさ
れ、OR命令が64ビツト命令データバス622の右側
でフェッチされた場合である。LD命令でR1レジスタ
の内容とイミディエイトデータを加算した値をアドレス
とするデータメモリ630の内容をレジスタR3に格納
し、OR命令でレジスタR5とレジスタR3との論理和
を求め、これをレジスタR4にセットする。本実施例に
よれば以」二の2つの命令をシリアライズして実行する
ことができる。 64ビツト命令テータバス622の左側でフェッチされ
た1、 D命令は第1命令レジスタに41にセントされ
、同時に64ビツト命令データバス622の右側でフェ
ッチされた(’J R命令は第2命令レジスタ642に
セットされる。第1命令デコーダ644は第1命令レジ
スタ641の○Pコードフィールド331を解読してメ
モリ操作命令(LD命令)であることを検出し、第2命
令デコーダ645は第2命令レジスタ642のOPコー
トフィールl” 336を解読して数値演算命令(OR
命令)であることを検出する。 並列動作制御ユニット646は、上記第1及び第2の命
令デコーダ644,645のデコード結果より、上記2
つの命令は並列に実行できる種類の命令ではないことが
判る。 また更に、比較器131は第1命令レジスタ641のデ
スティ不一ションフィールト332と第2命令レジスタ
642の第1ソースフィールド338を比較して、一致
していないことを検出する。比較器132は第1命令レ
ジスタ641のデスティネーションフィールド332と
第2命令レジスタ642の第2ソースフイールド339
を比較して、一致していることを検出する。本実施例で
は第4図の説明のところで述べたようしこ、LD命令の
結果は次々サイクルで有効となる。従って、LD命令の
結果を次の命令で使おうとすると、並列動作制御ユニッ
ト646は次の命令のレジスタ読み出しの前に1サイク
ルのウェイトを挿入して、次の命令を起動する。 本実施例によれば以上の判定により並列動作制御ユニッ
ト646は、同一サイクルでの2命令の実行を抑止する
。 上記2つの命令の実行手順をサイクルごとに以下説明す
る。 まず第1のサイクルでは、LD命令の動作として、第1
命令レジスタ64]の第1ソースフイールド333に従
って、R1レジスタの内容を入力レジスタ655へ読み
出し、また、第2ソースフイールド334の16ビツト
イミデイエイトデータを32ビツト長に符号拡張したも
のを入力レジスタ656ヘセツトする。 第2のサイクルでは演算器651でメモリアドレス求め
、この値をMAR653にセットする。 なお、演算器651は、第1命令レジスタ641のOP
コード331を解読する第1デコーダ644によって制
御される。なお、このサイクルでは新たな命令(ここで
はOR命令)の実行は開始されず、1サイクルのウェイ
トとなる。 第3のサイクルでは、LD命令の動作として、MAR6
53をアドレスとするデータメモリ630の内容をMD
R654に読み出す。 また、OR命令の動作として、第2命令レジスタ642
の第1ソースフイールド338に従って、R5レジスタ
の内容を入力レジスタ657へ読み出し、また、第2命
令レジスタ642の第2ソースフイールド339に従っ
て、R3レジスタの内容を入力レジスタ658へ読み出
す。尚、R3レジスタの正しい内容は、次のサイクルに
てLD命令が更新することになっている。そこで、第6
図(a)の実施例と同様に直前の命令がLD命令で比較
器132によりレジスタ番号が一致した場合は、レジス
タファイル650からの読み出しの代わりに、データメ
モリ630からの読み出しデータをMDR654に書き
込むのと同時に演算器652のB個入力レジスタ658
ヘバイパスする機能を有する。 第4のサイクルでは、LD命令の動作として、M D
R654の読み出しデータを第1命令レジスタ641の
デスティネーションフィールド332で示されるレジス
タR3にセットする。 また、OR命令の動作として、2つのデータの論理和を
演算器652で求める。尚、演算器652は、第2命令
レジスタ642のopコード336を解読する第2デコ
ーダ645によって制御される。 第5のサイクルでは、OR命令の結果をデスティネーシ
ョンフィールド337で示されるレジスタR4へ格納す
る。 以りの様に、メモリ操作命令の結果を使う命令がメモリ
操作命令と同時にフェッチされた場合でも1本実施例に
よれば、これを検出し、シリアライズして正常に動作す
ることができる。 数値演 令の結果を う 岐命令 第1図の実施例で説明したように、第1図において第1
の命令実行ユニット651は数値演算命令と分岐命令用
に限定し、第2の命令実行ユニット652は数値演算命
令とメモリ操作命令用に限定されているとする。 この機能限定に関する前提に反して、数値演算命令と分
岐命令とが第1命令レジスタ6・11と第2命令レジス
タ642とにセソhされたとする。 この2つの命令は、並列に実行されることはできず、シ
リアルに実行する必要がある。 第6図(d)は数値演算命令の結果が、分岐命令の分岐
先アドレスである場合の動作を示す図である。 ADD命令が64ビツト命令データバス622の左側で
フェッチされ、、JUMP命令が右側でフエッチされた
場合である。 ADD命令でレジスタR1の内容とレジスタR2の内容
を加算し、レジスタR3に格納し、JUMP命令でレジ
スタR3で示されるアドレスへ分岐する。 本実施例によれば以上の2つの命令のレジスタのコンフ
リクトを検出でき、1サイクルでの並列実行を抑止する
ことができる。 64ビツト命令データバス622の左側でフェッチされ
たADD命令は第1命令レジスタ641にセットされ、
同時に64ビツト命令データバス622の右側でフェッ
チされたJUMP命令は第2命令レジスタ642にセッ
トされる。第1命令デコーダ644は第1命令レジスタ
641の○Pコードフィールド341を解読して数値演
算命令(ADD命令)であることを検出し、第2命令デ
コーダ645は第2命令レジスタ642のOPコートフ
ィールド346を解読して分岐命令(JUMP命令)で
あることを検出する。 並列動作制御ユニット646は、上記第1及び第2の命
令デコーダ644,645のデコード結果より、上記2
つの命令は並列に実行できる種類の命令でないことが判
る。 また、比較器131は第1命令レジスタ641のデステ
ィネーションフィールド342と第2命令レジスタ64
2の第1ソースフイールド348を比較して、一致して
いることを検出する。従って、並列動作制御ユニット6
46はこれら2つの命令を同じサイクルで並列に実行す
ることはできないと判断し、これらの命令をシリアルに
実行する。 つまり、まず初めに、ADD命令の動作として、第1命
令レジスタ641の第1ソースフイールド343に従っ
て、レジスタR1の内容を読み出し、また、第2ソース
フイールド344に従って、レジスタR2の内容を読み
出す。これら2つのデータの和を演算器651で求め、
その結果をデスティネーションフィールド342で示さ
れるレジスタR3へ格納する。尚、演算器651は、第
1命令レジスタ641の○Pコート34]を解読する第
1デコーダ644によって制御される。 次に、JUMP命令の動作について説明する。 本実施例では通常、分岐命令は第1命令レジスタ641
にセットされて実行されることになっている。そこで、
上記のADD命令を実行した吹のサイクルで、並列動作
制御ユニット646は第2命令レジスタ642の内容(
JUMP命令)を第1命令レジスタ641に転送して、
JUMP命令の実行を開始する。つまり、第1命令レジ
スタ641の第1ソースフイールド343’(図示せず
)に従って、R3レジスタの内容を読み出し、その結果
を分岐先アドレスとして、以降の命令フェッチを行う。 一方、比較器131はADD命令の実行に先立ち第1命
令レジスタ641のデステイ不一ションフィールト34
2と第2命令レジスタ642の第1ソースフイールド3
48を比較して、−aしていることを検出する。従って
、第4図に示したように、レジスタR3の内容はJUM
P命令のためのレジスタ読み出しを行う時点では、AD
D命令の結果は格納されていない。 そこで、第6図(a)と同様に、比較器131によりレ
ジスタ番号が一致して、かつ右側の命令を左側の命令レ
ジスタ641へ転送する場合、レジスタファイル650
からの読み出しの代オ)りに、演算器651の出力を出
力レジスタ659へセットするのと同時に、演算器65
1の入力レジスタ655ヘセツトするバイパス手段(図
示せず)を有する。 以上の様に同時にフェッチされた2つの命令の間でレジ
スタのコンフリクトがあり、また1分岐命令が通常の位
置でない場合でも、本実施例によれば、コンフリクト及
び命令の位置を検出し正常に動作することができる。 令が第2命ムレジスタロ42にセンl−第6図(e)は
分岐命令によって64ピント命令バスの右側の命令に分
岐した時の動作を示す図である。OR命令が64ピント
命令データバス622の右側でフェッチされた場合であ
る。OR命令でR5レジスタとR6レジスタとの論理和
を求め、R4レジスタに格納する。本発明によれば以上
のように、左側の命令を実行してはいけない場合、同じ
サイクルでの2命令実行を抑止することができる。 64ビツト命令データバス622の右側でフェッチされ
たOR命令は第2命令レジスタ642にセットされる。 並列動作制御ユニット646は、直前の分岐命令で64
ビツト命令バスの右側に分岐したことを検出すると、第
1命令デコーダ644を抑止し、第1命令レジスタ64
1にセットされた命令を無視する。第2命令デコーダ6
45は第2命令レジスタ642のOPコートフィールド
356を解読して数値演算命令(OR命令)であること
を検出する。 並列動作制御ユニット646は、この命令は右側の演算
器652で実行できる命令の種類であることが判るので
、この命令の実行を起動する。 OR命令の動作として、第2命令レジスタ642の第1
ソースフイールド358に従って、R5レジスタの内容
を読み出し、また、第2命令レジスタ642の第2ソー
スフイールド359に従って、R6レジスタの内容を読
み呂す。これら2つのデータの論理和を演算器652で
求め、その結果をデスティネーションフィールド357
で示されるR4レジスタへ格納する。なお、演算器65
2は、第2命令レジスタ642の○Pコート356を解
読する第2デコーダ645によって制御される。 以上の様に、分岐命令によって64ビツト命令バスの右
側に分岐した場合、左側の命令の実行を抑止することが
できる。 デイレイスロットでの命4 行 第6図(f)は直前に条件付き分岐命令がフェッチされ
、その分岐命令の直後の命令がフェッチされた結果、左
側の命令がデイレイスロットになっているときの動作を
示す図である。 つまり、本実施例では1分岐命令の分岐条件の成立・不
成立に関係無く左側の命令を無条件に実行する。一方、
右側の命令は、既に説明したように1分岐条件の不成立
の場合に限って実行する。 尚、本実施例では、ADD命令が64ビツト命令データ
バス622の左側でフェッチされ、OR命令が右側でフ
ェッチされた場合である。デイレイスロットのADD命
令でレジスタR1の内容とレジスタR2の内容を加算し
、レジスタR3に格納し、条件付き分岐命令の条件が不
成立の場合は、OR命令でレジスタR5とレジスタR6
との論理和を求め、レジスタR4Lこ格納する。 従って、本実施例によれば、もし分岐条件が成立してい
たら、右側の命令を抑止し、分岐条件が成立しなかった
ら以上の2つの命令を同時に実行することができる。 64ビツト命令データバス622の左側でフェッチされ
たADD命令は第1命令レジスタ641にセットされ、
同時に64ビツト命令データバス622の右側でフェッ
チされたOR命令は第2命令レジスタ642にセットさ
れる。第1命令デコーダ644は第1命令レジスタ64
1のopコードフィールド361を解読して数値演算命
令(ADD命令)であることを検出し、第2命令デコー
ダ645は第2命令レジスタ642の○Pコードフィー
ルド366を解読して数値演算命令(OR命令)である
ことを検出する。 並列動作制御ユニット646は上記第1及び第2の命令
デコーダ644.645のデコード結果より、上記2つ
の命令は並列に実行できる種類の命令であることが判る
。 また、比較器131は第1命令レジスタ641のデステ
ィネーションフィールド362と第2命令レジスタ64
2の第1ソースフイールド368を比較して、−敵して
いないことを検出する。比較器132は第1命令レジス
タ641のデステイ不一ションフィールト362と第2
命令レジスタ642の第2ソースフイールド369を比
較して、−eしでいないことを検出する。 従って、並列動作制御ユニット646は直前の分岐命令
の条件が成立していなかったら、これら2つの命令を同
しサイクルで並列に実行する。また分岐条件が成立して
いたら第2命令デコーダ644を無効化して、右側の命
令の実行を抑止し、左側の命令のみ実行する6 以上の様に同時にフェッチされた2つの命令の内、一方
が分岐命令のデイレイスロットになっている場合でも、
本発明によれば、分岐の成立/不成立によって他方の命
令を無効化でき、正常に動作することができる。 直前のLD命令のフェッチ結果を いる命令第6図(g
)は直前にLD命令があり、そのフェッチ結果を利用す
る場合の動作を示す図である。 ADD命令が64ビツト命令データバス622の左側で
フェッチされ、OR命令が右側でフェッチされた場合で
ある。直前のLD命令でレジスタR1にデータメモリ6
30からデータをセットし、次のADD命令でレジスタ
R1の内容とレジスタR2の内容を加算し、レジスタR
3に格納し50R命令でレジスタR5とレジスタR1と
の論理和を求め、レジスタR4に格納する。 本実施例では第4図及び第6図(b)、(c)で説明し
たように、レジスタR1の内容はLD命令の実行直後の
サイクルでは有効でない。そこで、直後の命令がレジス
タコンフリクトの場合は、1サイクルのウェイトを挿入
することができる。 64ビツト命令データバス622の左側でフェッチされ
たADD命令は第1命令レジスタ641にセットされ、
同時に64ビツト命令データバス622の右側でフェッ
チされたOR命令は第2命令レジスタ642にセットさ
れる。第1命令デコーダ644は第1命令レジスタ64
1のopコートフィールド371を解読して数値演算命
令(ADD命令)であることを検出し、第2命令デコー
ダ645は第2命令レジスタ642の○Pコード376
を解読して数値演算命令(OR命令)であることを検出
する。これを受けて、並列動作制御ユニット646は上
記2つの命令は並列に実行できる種類の命令であること
が判る。 一方、比較器133は第1命令レジスタ641の第1ソ
ースフイールド373とデイレイトロードレジスタ64
7を比較して、一致していることを検出する。比較器1
34は第1命令レジスタ641の第2ソースフイールド
374とデイレイトロートレジスタ647を比較して、
一致していないことを検出する。 比較器136は、第2命令レジスタ642の第1ソース
フイールド378とデイレイトロードレジスタ647を
比較し、−1していないことを検出し、比較器135は
第2命令レジスタ642の第2ソースフイールド379
とデイレイトロートレジスタ647を比較し、一致して
いることを検出する。 従って、並列動作制御ユニット646は、第1命令レジ
スタ64]のADD命令及び第2命令レジスタ642の
OR命令の起動の前に1サイクルのウェイトを挿入し、
その後、2つの命令を並列に実行する。尚、デイレイド
ロー1−レジスタ647はLD命令のデスティネーショ
ンレジスタの番号がセットされることになっている。 以上の様に同時にフェッチされた2つの命令が、直前の
LD命令のメモリ読み出しデータを使用する場合でも、
本実施例によれば、レジスタのコンフリクトを考慮して
、正常に動作することができる。 尚、上記の例では、左右どちらの命令も直前のLD命令
の結果を使用する例を示したが、どちらも使用しない場
合は、並列動作制御ユニソ1.646は通常のように2
つの演算器651.652を並列実行させる。 また、右側の命令だけがLD命令の結果を使用する場合
、先ず左側の命令を実行し、その間にLD命令が完了す
るので、続いて右側の命令を実行することができる。 さらにまた、左側の命令だけがLD命令の結果を使用す
る場合は、並列動作制御ユニット646を簡単1こする
ため、第6図(g)と同様に左右両方の命令をウェイト
させるように制御する。 孤五匁1 第7図(a)は2つ数値演算命令を同時に実行中に、左
側の命令で例外が発生した場合の動作を示す図である。 ADD命令が64ビット命令データバス622の左側で
フェッチされ、OR命令が右側でフェッチされた場合で
ある。ADD命令でレジスタR1の内容とレジスタR2
の内容を加算し、レジスタR3に格納し、OR命令でレ
ジスタR5とレジスタR6との論理和を求め、レジスタ
R4に格納する。上記2つの命令同時実行において、左
側のADD命令で例外が発生した時、並列動作制御ユニ
ット646は右側のOR命令の実行結果をレジスタに格
納することを抑止し、右側のOR命令の実行を無効化し
、例外発生時の命令の処理状態を保存する。 64ビツト命令データバス622の左側でフェッチされ
たADD命令は第1命令レジスタ641にセットされ、
同時に64ビツト命令データバス622の右側でフェッ
チされたOR命令は第2命令レジスタ642にセットさ
れる。第1命令デコーダ644は第1命令レジスタ64
1のOPコードフィールド711を解読して数値演算命
令(A D D命令)であることを検出し、第2命令デ
コーダ645は第2命令レジスタ642の○Pコードフ
ィールド716を解読し数値演算命令(OR命令)であ
ることを検出する。 これを受けて、並列動作制御ユニット646は上記2つ
の命令は並列に実行できる種類の命令であることが判る
。 また、比較器131は第1命令レジスタ641のデステ
ィネーションフィールド712と第2命令レジスタ64
2の第1ソースフイールド718を比較して、一致して
いないことを検出する。比較器132は第1命令レジス
タ641のデスティネーションフィールド712と第2
命令レジスタ642の第2ソースフイールド719を比
較して、−Hしていないことを検出する。従って、並列
動作制御ユニット646はこれら2つの命令を同しサイ
クルで並列に実行することはできると判断し、これらの
命令を同時に実行することになる。 つまり、ADD命令の動作として、第1命令レジスタ6
41の第1ソースフイールド713に従って、レジスタ
R1の内容を読み出し、また、第2ソースフイールド7
14に従って、レジスタR2の内容を読み出す。これら
2つのデータの和を演算@651で求め、その結果をデ
スティネーションフィールド712で示されるレジスタ
R3へ格納する。演算器651は、第1命令レジスタ6
41の○Pコート7】1を解読する第1デコーダ6・1
4によって制御される。なお、この演算に際してオーバ
ーフローが発生したとする。 また、OR命令の動作として、第2命令レジスタ642
の第1ソースフイールド718に従って、レジスタR5
の内容を読み出し、また、第2命令レジスタ642の第
2ソースフイールド719に従って、レジスタR6の内
容を読み出す。これら2つのデータの論理和を演算器6
52で求める。 なお、演算器652は、第2命令レジスタ642のOP
コード716を解読する第2デコーダ645によって制
御される。並列動作制御ユニット646は、左側の命令
(ΔDD命令)においてオーバーフロー例外が発生した
ことを検出して、演算器651の結果をレジスタへ格納
することを抑止する。 例外が発生した命令のアドレスは以下のように退避され
る。 先ず、プログラムメモリ620をアクセスした命令アド
レス621は、ブリフェッチ命令71〜レスレジスタ7
01にセットされる。このアl〜レスはブリフェッチ命
令バッファ640にセットされている命令のアドレスに
対応する。次に、命令がブリフェッチ命令バッファ64
0から第1命令レジスタ641及び第2命令レジスタ6
42に転送されると、命令のアドレスもブリフェッチ命
令アドレスレジスタ701から実行命令アドレスレジス
タ702にセソ1〜される。ここで、実行命令アドレス
レジスタ702にセットされているアトレ又は第1命令
レジスタ641にセットされている命令のアドレスであ
り、第2命令レジスタ642にセットされている命令の
アドレスは、実行命令アl〜レスレジスタ702の値に
4を加算した値である。 従って、上記のように、第1命令レジスタ641の命令
(ADD命令)を実行中に例外が発生したら、並列動作
制御ユニット646は実行命令アドレスレジスタ702
の値を例外命令アドレスレジスタ703にセットする。 もし、第2命令レジスタ642の命令(OR命令)を実
行中に例外が発生したら、並列動作制御ユニット646
は実行命令アドレスレジスタ702の値に4を加算して
、その値を例外命令アドレスレジスタ703にセットす
る。 例外が発生すると、本実施例では、例外を発生した命令
のアドレスを退避し、プロセッサは、予め決められた例
外処理ルーチンを実行する。この例外処理ルーチンの先
頭アドレスは、予め決められたものであり、プロセッサ
内のROM705から読み出した値である。このアドレ
スをもとに命令ブリフェッチを行なう。 例外処理ルーチンはユーザが作成するものなので、各ユ
ーザによって色々な処理を行っている。 例を1つ挙げると、例えば例外発生アドレス及び例外発
生の要因をユーザへ表示する一方、そのプログラムの実
行を中止して、他のプログラムを実行させるものがある
。第7図(a)の場合では、例外発生アドレスとしてE
XPC703の値を表示し、例外要因として算術オーバ
ーフローであったことを表示する。 以上の様に同時に実行していた2つの命令の一方で例外
が発生しても、本発明によれば、例外発生時の命令アド
レス、及び、その処理状態を保存しておくことができる
。 第7図(b)は2つの命令を同時に実行中に、右側の命
令で例外が発生した場合の動作を示す図である。ADD
命令が64ビツト命令データバス622の左側でフェッ
チされ、LD命令が右側でフェッチされた場合である。 ADD命令でR1レジスタの内容とR2レジスタの内容
を加算し、R3レジスタに格納し、LD命令でR5レジ
スタと16ビツトイミデイエイトとの和をアドレスとす
るメモリの内容をフェッチし、R4レジスタに格納する
。本実施例によれば上記の2つの命令同時実行において
、右側のLD命令で例外が発生した時、並列動作制御ユ
ニット646は左側のADD命令の処理を完了した後、
例外発生時の命令の処理状態を保存する。 64ビツト命令データバス622の左側でフェッチされ
たA、 D D命令は第1命令レジスタ641にセラ)
−され、同時に64ビツト命令データバス622の右側
でフェッチされたLD命令は第2命令レジスタ642に
セントされる。第1命令デコ−1’644は第1命令レ
ジスタ641の○Pコードフィールド721を解読して
数値演算命令(ADD命令)であることを検出し、第2
命令デコーダ645は第2命令レジスタ642のOPコ
ートフィールド726を解読してメモリ操作命令(LD
命令)であることを検出する。 これを受けて並列動作制御ユニット646は上記2つの
命令は並列に実行できる種類の命令であることが判る。 また、比較器131は第1命令レジスタ641のデステ
ィネーションフィールド722と第2命令レジスタ64
2の第1ソースフイールド728を比較して、一致して
いないことを検出する。比較器132は第1命令レジス
タ641のデスティネーションフィールド722と第2
命令レジスタ642の第2ソースフイールド729を比
較して、−Mしていないことを検出する。従って、並列
動作制御ユニット646はこれら2つの命令を同しサイ
クルで並列に実行することはできると判断し、これらの
命令を同時に実行することになる。 つまり、ADD命令の動作として、第1命令レジスタ6
41の第1ソースフイールド723に従って、レジスタ
R1の内容を読み出し、また、第2ソースフイールド7
24に従って、レジスタR2の内容を読み出す。これら
2つのデータの和を演算器651で求め、その結果をデ
スティネーションフィールド722で示されるレジスタ
R3へ格納する。演算器651は、第1命令レジスタ6
41の○Pコート721を解読する第1デコーダ644
によって制御される。 また、LD命令の動作として、第2命令レジスタ642
の第1ソースフイールド728に従って、レジスタR5
の内容を読み出し、また、第2命令レジスタ642の第
2ソースフイールド729のイミディエイトデータを3
2ビツトに符号拡張する。これら2つのデータの論理和
を、第2命令レジスタ642の○Pコード726を解読
する第2デコーダ645によって制御される演算器65
2で求め、これをアドレスとして、データメモリ630
をアクセスする。この例ではこの時、データメモリ63
0において何らかのエラー、例えばバスエラーが発生し
たとする。 例外が発生した命令のアドレスは以下のように退避され
る。 第2命令レジスタ642の命令(LD命令)を実行中に
例外が発生したので、並列動作制御ユニット646は実
行命令アドレスレジスタ702の値に4を加算して、そ
の値を例外命令アドレスレジスタ703にセットする。 尚、ここで、実行命令アドレスレジスタ702の値に4
を加算すると述べたが、実際には、実行命令アドレスレ
ジスタ702の値は8の倍数になっているので、右から
3ビツト目をOから1にするだけで良い。つまり、桁上
がりが発生するような演算をする必要はない。 また、プロセッサは、ROM705から読み出した値を
アドレスとして命令ブリフェッチを行ない、予め決めら
れた例外処理ルーチンを実行する。 例外処理ルーチンの内容は、第7図(a)の場合と同様
に、例えば、例外発生アドレスとしてEXPC703の
値を表示し、例外要因としてデータバスアクセスエラー
(例えば、バスエラー等)であったことを表示する。 以上の様に同時に実行していた2つの命令の一方で例外
が発生しても、本実施例によれば、例外発生時の命令ア
ドレス、及び、その処理状態を保存しておくことができ
る。 また、以上のように本実施例では、第1命令レジスタ6
41及び第2命令レジスタ642の2つの命令のアドレ
スを1つのレジスタ702に保持できるので、第1命令
レジスタ641及び第2命令レジスタ642の2つの命
令のアドレスを別々のレジスタに保持する場合に比べて
、レジスタの節約になる。 以上説明してきた本実施例によれば、各命令のフォーマ
ットが限定されているため、命令の解読が容易にでき、
命令デコーダを2重に搭載しても、回路規模はそれほど
増大することはない。 また、本実施例によれば、イミディエイトデータを操作
する命令の○Pコードはレジスタを操作する命令の○P
コードと左端の1ビツトだけが違うだけなので、演算器
の制御信号などの生成するための命令解読がどちらの命
令でも共通化でき命令デコーダの簡略化が可能である。 また、イミディエイトデータを操作するか否かはOPコ
ートの左端の1ビツトだけ判断できるので5イミデイ工
イトデータ生成回路の制御信号などの生成するための命
令デコーダの簡略化が可能である。 [発明の効果] 以上述へてきたように本発明によれば、命令の前後の依
存関係を考慮しながら、2つの命令を同時に実行する命
令制御方式を容易に実現できる。 従って、ピーク時には従来方式の2倍の処理性能を持つ
データ処理装置を容易に実現することができる。 また、本発明によれば、データ幅の広いバスを用いて1
サイクルでフェッチした2つの命令を同時に実行できる
ので、パイプラインステージ間の負荷を均一にでき、ハ
ードウェア回路の有効利用が可能になる。 特に1本発明によれば、並列に命令を実行する命令実行
回路において、各命令実行回路毎に実行する命令の種類
を限定しているので、それぞれの命令実行回路の回路規
模を小さくすることができる。 また1本実施例では、分岐命令の次にある命令が分岐命
令と同時に実行できる場合には、分岐命令と同時に実行
してしまい、デイレイスロットでは他の命令の同時実行
を抑止しているので、従来のプログラムをそのまま実行
しても、悪影響を与えることはなく、互換性を維持する
ことができる。
システム構成を示すブロック図、第2図は第1図のデー
タ・プロセッサのための命令フォーマットを示す図、 第3図は第1図のデータ・プロセッサにおいて2つの命
令を同時に実行した時の命令制御方式を示す図、 第4図は第1図のデータ・プロセッサのパイプライン処
理の様子を示す図、 第5図は第1図のデータ・プロセッサの命令コードの割
り付けを示す図。 第6図は第1図のデータ・プロセッサにおいて命令をシ
リアルに実行する時の命令制御方式を示す図、 第7図は第1図のデータ・プロセッサにおいて2つの命
令を同時に実行している時に例外が発生したときの処理
方式を示す図である。 610:プロセッサ、620ニブログラムメモリ、63
0:データメモリ、640ニブリフエツチバツフア、6
41.642:命令レジスタ、644.645:命令デ
コーダ、650ニレジスタフアイル、651.652:
演算器、131.132.133.134:レジスタ番
号比較器、701.702.7o3:命令アドレスレジ
スタ。 第1図 第2図(a) 第2図(b) 第3図(a) 第3図(c) 第4図(a) 第4図(b) 第3図(b) 第4図(c) 第5図 第6図(lo) 第6図(a) 第6図(C) 第6図(d) 第6図(f) 第6図(e) 第6図(g) 第7図(a) 第7図(b)
Claims (1)
- 【特許請求の範囲】 1、(1)所定のビット幅の命令長の第1及び第2の命
令をメモリからフェッチし、上記第1及び第2の命令を
並行に出力する命令フェッチユニットと、 (2)その入力に上記命令フェッチユニットから出力さ
れる上記第1の命令が供給される第1の命令デコーダと
、 (3)その入力に上記命令フェッチユニットから出力さ
れる上記第2の命令が供給される第2の命令デコーダと
、 (4)上記第1の命令デコーダのデコード結果によって
制御される第1の命令実行ユニットと、(5)上記第2
の命令デコーダのデコード結果によって制御される第2
の命令実行ユニットと、(6)上記命令フェッチユニッ
トから出力される上記第1の命令のデスティネーシヨン
フィールドの情報と上記命令フェッチユニットから出力
される上記第2の命令のソースフィールドの情報とを比
較する比較器とを具備してなり、上記命令フェッチユニ
ットから出力される上記第1の命令のデスティネーシヨ
ンフィールドの情報と上記命令フェッチユニットから出
力される上記第2の命令のソースフィールドの情報とが
一致する際、上記比較器の出力は上記第1の命令実行ユ
ニットと上記第2の命令実行ユニットとにおける上記第
1及び第2の命令の並行実行を禁止することを特徴とす
るデータ・プロセッサ。 2、複数のレジスタからなるレジスタファイルをさらに
具備してなり、 上記第1の命令の上記デスティネーションフィールド情
報によって指定されるレジスタファイル中のレジスタと
上記第2の命令のソースフィールドの情報によって指定
されるレジスタファイル中のレジスタとが一致する際に
、上記比較器の出力は上記第1の命令実行ユニットと上
記第2の命令実行ユニットとにおける上記第1及び第2
の命令の並行実行を禁止することを特徴とする請求項1
記載のデータ・プロセッサ。 3、上記第1の命令デコーダと上記第2の命令デコーダ
の上記デコード結果と上記比較器の上記出力とに応答し
て上記第1の命令実行ユニットと上記第2の命令実行ユ
ニットとにおける上記第1及び第2の命令の並行実行を
禁止する並列動作制御ユニットをさらに具備することを
特徴とする請求項1乃至2のいずれか記載のデータ・プ
ロセッサ。 4、上記第1及び第2の命令の上記所定のビット幅の命
令長は固定長であり、縮小命令セット・コンピュータと
して構成されたことを特徴とする請求項1乃至3のいず
れか記載のデータ・プロセッサ。 5、上記メモリはメインメモリもしくはキャッシュメモ
リの少なくともいずれかにより構成されてなることを特
徴とする請求項1乃至4のいずれか記載のデータ・プロ
セッサ。
Priority Applications (6)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2214260A JP2834292B2 (ja) | 1990-08-15 | 1990-08-15 | データ・プロセッサ |
| US07/727,581 US5381531A (en) | 1990-08-15 | 1991-07-09 | Data processor for selective simultaneous execution of a delay slot instruction and a second subsequent instruction the pair following a conditional branch instruction |
| DE69133571T DE69133571T2 (de) | 1990-08-15 | 1991-07-15 | Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen |
| EP91111770A EP0471191B1 (en) | 1990-08-15 | 1991-07-15 | Data processor capable of simultaneous execution of two instructions |
| KR1019910013022A KR100254008B1 (ko) | 1990-08-15 | 1991-07-29 | 2개의 명령을 동시에 실행할 수 있는 데이타 프로세서 |
| KR1019960030542A KR100254007B1 (ko) | 1990-08-15 | 1996-07-26 | 2개의 명령을 동시에 실행할 수 있는 데이타프로세서 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2214260A JP2834292B2 (ja) | 1990-08-15 | 1990-08-15 | データ・プロセッサ |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH0496825A true JPH0496825A (ja) | 1992-03-30 |
| JP2834292B2 JP2834292B2 (ja) | 1998-12-09 |
Family
ID=16652806
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2214260A Expired - Lifetime JP2834292B2 (ja) | 1990-08-15 | 1990-08-15 | データ・プロセッサ |
Country Status (5)
| Country | Link |
|---|---|
| US (1) | US5381531A (ja) |
| EP (1) | EP0471191B1 (ja) |
| JP (1) | JP2834292B2 (ja) |
| KR (2) | KR100254008B1 (ja) |
| DE (1) | DE69133571T2 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2006525583A (ja) * | 2003-04-29 | 2006-11-09 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 時間−静止型プロセッサにおけるゼロ−オーバヘッドのブランチング及びルーピング |
Families Citing this family (22)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5787303A (en) * | 1991-10-31 | 1998-07-28 | Kabushiki Kaisha Toshiba | Digital computer system capable of processing a plurality of instructions in parallel based on a VLIW architecture |
| JP3182591B2 (ja) * | 1993-01-20 | 2001-07-03 | 株式会社日立製作所 | マイクロプロセッサ |
| JP3207591B2 (ja) * | 1993-03-19 | 2001-09-10 | 株式会社日立製作所 | キャッシュメモリを有する計算機の改良 |
| CA2123442A1 (en) * | 1993-09-20 | 1995-03-21 | David S. Ray | Multiple execution unit dispatch with instruction dependency |
| JPH07200289A (ja) * | 1993-12-28 | 1995-08-04 | Fujitsu Ltd | 情報処理装置 |
| JPH07281893A (ja) * | 1994-04-15 | 1995-10-27 | Internatl Business Mach Corp <Ibm> | 処理システム及び演算方法 |
| US5928357A (en) * | 1994-09-15 | 1999-07-27 | Intel Corporation | Circuitry and method for performing branching without pipeline delay |
| US5931941A (en) * | 1995-04-28 | 1999-08-03 | Lsi Logic Corporation | Interface for a modularized computational unit to a CPU |
| JPH0991136A (ja) * | 1995-09-25 | 1997-04-04 | Toshiba Corp | 信号処理装置 |
| US5796997A (en) * | 1996-05-15 | 1998-08-18 | Hewlett-Packard Company | Fast nullify system and method for transforming a nullify function into a select function |
| US5826054A (en) * | 1996-05-15 | 1998-10-20 | Philips Electronics North America Corporation | Compressed Instruction format for use in a VLIW processor |
| US8583895B2 (en) * | 1996-05-15 | 2013-11-12 | Nytell Software LLC | Compressed instruction format for use in a VLIW processor |
| JP3431397B2 (ja) * | 1996-05-23 | 2003-07-28 | 東芝マイクロエレクトロニクス株式会社 | 命令キュー |
| US5878242A (en) * | 1997-04-21 | 1999-03-02 | International Business Machines Corporation | Method and system for forwarding instructions in a processor with increased forwarding probability |
| KR20010040742A (ko) * | 1998-12-08 | 2001-05-15 | 롤페스 요하네스 게라투스 알베르투스 | 인터프리터 프로그램을 실행하는 방법 |
| US6351806B1 (en) | 1999-10-06 | 2002-02-26 | Cradle Technologies | Risc processor using register codes for expanded instruction set |
| US6834337B1 (en) | 2000-09-29 | 2004-12-21 | International Business Machines Corporation | System and method for enabling multiple signed independent data elements per register |
| US7039906B1 (en) | 2000-09-29 | 2006-05-02 | International Business Machines Corporation | Compiler for enabling multiple signed independent data elements per register |
| JP3683248B2 (ja) * | 2002-10-22 | 2005-08-17 | 富士通株式会社 | 情報処理装置及び情報処理方法 |
| US9672037B2 (en) * | 2013-01-23 | 2017-06-06 | Apple Inc. | Arithmetic branch fusion |
| KR102262151B1 (ko) | 2019-03-19 | 2021-06-07 | 배성주 | 밥알의 건조 및 갈변현상을 방지하는 수분 조절장치가 구비된 전기밥솥 |
| KR20200111412A (ko) | 2019-03-19 | 2020-09-29 | 배성주 | 밥알의 건조 및 갈변현상을 방지하는 수분 조절장치가 구비된 전기밥솥 |
Family Cites Families (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US3718912A (en) * | 1970-12-22 | 1973-02-27 | Ibm | Instruction execution unit |
| US4755966A (en) * | 1985-06-28 | 1988-07-05 | Hewlett-Packard Company | Bidirectional branch prediction and optimization |
| JPH06100968B2 (ja) * | 1986-03-25 | 1994-12-12 | 日本電気株式会社 | 情報処理装置 |
| EP0239081B1 (en) * | 1986-03-26 | 1995-09-06 | Hitachi, Ltd. | Pipelined data processor capable of decoding and executing plural instructions in parallel |
| JPS63131230A (ja) * | 1986-11-21 | 1988-06-03 | Hitachi Ltd | 情報処理装置 |
| JPH0810430B2 (ja) * | 1986-11-28 | 1996-01-31 | 株式会社日立製作所 | 情報処理装置 |
| DE68926701T2 (de) * | 1988-08-09 | 1997-02-20 | Matsushita Electric Ind Co Ltd | Datenverarbeitungsgerät zur parallelen Dekodierung und parallelen Ausführung von Befehlen mit variabler Wortlänge |
| JP2810068B2 (ja) * | 1988-11-11 | 1998-10-15 | 株式会社日立製作所 | プロセッサシステム、コンピュータシステム及び命令処理方法 |
| US5072364A (en) * | 1989-05-24 | 1991-12-10 | Tandem Computers Incorporated | Method and apparatus for recovering from an incorrect branch prediction in a processor that executes a family of instructions in parallel |
| JP2816248B2 (ja) * | 1989-11-08 | 1998-10-27 | 株式会社日立製作所 | データプロセッサ |
| US5150470A (en) * | 1989-12-20 | 1992-09-22 | International Business Machines Corporation | Data processing system with instruction queue having tags indicating outstanding data status |
| US5185868A (en) * | 1990-01-16 | 1993-02-09 | Advanced Micro Devices, Inc. | Apparatus having hierarchically arranged decoders concurrently decoding instructions and shifting instructions not ready for execution to vacant decoders higher in the hierarchy |
-
1990
- 1990-08-15 JP JP2214260A patent/JP2834292B2/ja not_active Expired - Lifetime
-
1991
- 1991-07-09 US US07/727,581 patent/US5381531A/en not_active Expired - Lifetime
- 1991-07-15 EP EP91111770A patent/EP0471191B1/en not_active Expired - Lifetime
- 1991-07-15 DE DE69133571T patent/DE69133571T2/de not_active Expired - Lifetime
- 1991-07-29 KR KR1019910013022A patent/KR100254008B1/ko not_active Expired - Fee Related
-
1996
- 1996-07-26 KR KR1019960030542A patent/KR100254007B1/ko not_active Expired - Fee Related
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2006525583A (ja) * | 2003-04-29 | 2006-11-09 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 時間−静止型プロセッサにおけるゼロ−オーバヘッドのブランチング及びルーピング |
Also Published As
| Publication number | Publication date |
|---|---|
| DE69133571D1 (de) | 2007-07-05 |
| DE69133571T2 (de) | 2007-09-06 |
| EP0471191A2 (en) | 1992-02-19 |
| KR100254007B1 (ko) | 2000-04-15 |
| KR970005021A (ko) | 1997-01-29 |
| US5381531A (en) | 1995-01-10 |
| EP0471191A3 (en) | 1992-11-19 |
| KR920004964A (ko) | 1992-03-28 |
| JP2834292B2 (ja) | 1998-12-09 |
| EP0471191B1 (en) | 2007-05-23 |
| KR100254008B1 (ko) | 2000-04-15 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH0496825A (ja) | データ・プロセッサ | |
| US6560697B2 (en) | Data processor having repeat instruction processing using executed instruction number counter | |
| US5269007A (en) | RISC system capable of simultaneously executing data interlocked shift and arithmetic/logic instructions in one clock cycle by bypassing register | |
| US7487338B2 (en) | Data processor for modifying and executing operation of instruction code according to the indication of other instruction code | |
| US20010021970A1 (en) | Data processor | |
| JPH0926878A (ja) | データ処理装置 | |
| JP3543181B2 (ja) | データ処理装置 | |
| US20010013095A1 (en) | Microprocessor having delayed instructions | |
| US5924114A (en) | Circular buffer with two different step sizes | |
| US6405303B1 (en) | Massively parallel decoding and execution of variable-length instructions | |
| JPH0673105B2 (ja) | 命令パイプライン方式のマイクロプロセッサ | |
| US6055628A (en) | Microprocessor with a nestable delayed branch instruction without branch related pipeline interlocks | |
| US7546442B1 (en) | Fixed length memory to memory arithmetic and architecture for direct memory access using fixed length instructions | |
| JP4502532B2 (ja) | データ処理装置 | |
| JP2002229779A (ja) | 情報処理装置 | |
| US6209080B1 (en) | Constant reconstruction processor that supports reductions in code size and processing time | |
| US8583897B2 (en) | Register file with circuitry for setting register entries to a predetermined value | |
| US20040255102A1 (en) | Data processing apparatus and method for transferring data values between a register file and a memory | |
| CN117008975A (zh) | 一种指令融合分割方法、处理器核和处理器 | |
| US5649229A (en) | Pipeline data processor with arithmetic/logic unit capable of performing different kinds of calculations in a pipeline stage | |
| JP2877468B2 (ja) | 電子計算機 | |
| US12217054B2 (en) | Method of storing register data elements to interleave with data elements of a different register, a processor thereof, and a system thereof | |
| JP3102399B2 (ja) | データ処理装置及び方法 | |
| JP3147884B2 (ja) | 記憶装置及び情報処理装置 | |
| US6289439B1 (en) | Method, device and microprocessor for performing an XOR clear without executing an XOR instruction |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20071002 Year of fee payment: 9 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081002 Year of fee payment: 10 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081002 Year of fee payment: 10 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091002 Year of fee payment: 11 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091002 Year of fee payment: 11 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101002 Year of fee payment: 12 |
|
| EXPY | Cancellation because of completion of term |