JP2834292B2 - データ・プロセッサ - Google Patents

データ・プロセッサ

Info

Publication number
JP2834292B2
JP2834292B2 JP2214260A JP21426090A JP2834292B2 JP 2834292 B2 JP2834292 B2 JP 2834292B2 JP 2214260 A JP2214260 A JP 2214260A JP 21426090 A JP21426090 A JP 21426090A JP 2834292 B2 JP2834292 B2 JP 2834292B2
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.)
Expired - Lifetime
Application number
JP2214260A
Other languages
English (en)
Other versions
JPH0496825A (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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2214260A priority Critical patent/JP2834292B2/ja
Priority to US07/727,581 priority patent/US5381531A/en
Priority to EP91111770A priority patent/EP0471191B1/en
Priority to DE69133571T priority patent/DE69133571T2/de
Priority to KR1019910013022A priority patent/KR100254008B1/ko
Publication of JPH0496825A publication Critical patent/JPH0496825A/ja
Priority to KR1019960030542A priority patent/KR100254007B1/ko
Application granted granted Critical
Publication of JP2834292B2 publication Critical patent/JP2834292B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent 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)

Description

【発明の詳細な説明】
【産業上の利用分野】
本発明は、データ・プロセッサに関し、特に二つの命
令を同時に実行することの可能な32ビットRISCマイクロ
プロセッサに関する。
【従来の技術】
命令を高速に実行可能な縮小命令セット・コンピュー
タ(educed nstruction et omputer、以下RISC
と言う)は米国IBM社による1986年8月18日の米国特許
出願第896,156号を優先権主張とした特開昭63−49843号
公報に詳細に説明されている。 複雑命令セット・コンピュータ(omplex nstruct
ion et omputer、以下CISCと言う)はソフトウェア
からハードウェアに移される機能の増加に伴ってマイク
ロプロセッサのハードウェアが複雑になるのに対し、RI
SCコンピュータは処理速度を高速とするため簡単な機能
を実行するようにそのアーキテクチァが構成される。 このRISCコンピュータとして、すべての基本命令を1
マシーン・サイクルで実行するよう基本命令セットをハ
ードウェアで直接実行する基本縮小命令セット・マシー
ン(Primitive nstruction et Computing achine
System、以下PRISMと言う)も公知である。 一方、性能向上の速度が鈍りはじめたCISCからまだ性
能向上の速度が向上するRISCへと、高性能のマイクロプ
ロセッサのアーキテクチュアの主流が大きく変わりつつ
ある。 最近の高性能のRISCマイクロプロセッサでは、命令の
長さが32ビットに固定された固定長命令を採用してお
り、この固定長命令は1マシン・サイクルで実行される
ことができる。 一方、1989年の技術文献「IEEE International Solid
−State Circuits Conference DIGEST OF TECHNICAL PA
PERS」,pp54−55には米国Intel社によって開発されたマ
イクロプロセッサが開示されており、メモリと接続され
る外部バスのデータ幅は64ビットであり、バスのバンド
幅拡張による処理性能が向上されてる。すなわち、64ビ
ットの外部データバスを介してメモリから1サイクルで
2つの32ビット命令がマイクロプロセッサにフェッチさ
れ、この2つの命令が整数演算命令と浮動小数点演算命
令である場合は、この整数演算命令とこの浮動小数点演
算命令とは、整数演算ユニットと浮動小数点演算ユニッ
トとによって同時に並行して実行されることができる。 一方、上記の特開昭63−49843号公報には、同時に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)の状態はコンパイラによ
るコード・スケジューリングで対応すべきこと、RISCプ
ロセッサは基本命令を有し、また複数サイクルを必要と
する命令は非常に僅かなので上記(3)、(4)の状態
は頻繁には発生しないこと、上記(5)の状態に対処す
るためには例外処理ハードウェアを用いること)が開示
されている。
【発明が解決しようとする課題】
しかしながら本発明者等の検討によれば、上記従来技
術では下記の如き問題が生ずると言うことが明らかとさ
れた。 すなわち、上記の技術文献に開示されたアーキテクチ
ャにおいては、整数演算命令は整数演算ユニットを制御
し、浮動小数点演算命令は浮動小数点演算ユニットを制
御するので、ふたつの演算ユニットの間でコンフリクト
が生じないことを利用しているが、整数を扱う数値演算
命令を2つ同時に実行する方式にはこのアーキテクチャ
は適用できないと言う問題がある。 一方、上記の特開昭63−49843号公報に開示された方
式においては、コンパイラによる過度の命令コード・ス
ケジューリング処理を強要しているので、ソフトウェア
作成上の制約が多いと言う問題がある。 さらに、上記の公開特許公報に開示された方式におい
ては、命令コード・スケジューリングをコンパイラで行
うので、複数の命令をシリアル実行する従来のハードウ
ェアのために作成されたプログラムをこの並列実行ハー
ドウェアのために変換する必要が有り、従来のハードウ
ェアとの互換性を保つことができないと言う問題が有
る。 従って、本発明の目的は、数値を扱う数値演算命令を
2つ同時に実行することの可能なデータ・プロセッサを
提供することにある。 本発明の他の目的は、コンパイラに対する命令スケジ
ューリングの負担を軽減できるハードウェアを具備した
データ・プロセッサを提供することにある。 本発明の他の目的は、従来の直列実行ハードウェアと
プログラムの互換性を有する並列実行可能なデータ・プ
ロセッサを提供することにある。
【課題を解決するための手段】 本願において開示される発明のうち、代表的な実施例
によるマイクロプロセッサの概要は下記の通りである。 すなわち、(1)所定のビット幅(32ビット)の命令
長の第1及び第2の命令をメモリからフェッチし、上記
第1及び第2の命令を並行に出力する命令フェッチユニ
ット(640)と、 (2)その入力に上記命令フェッチユニット(640)か
ら出力される上記第1の命令が供給される第1の命令デ
コーダ(644)と、 (3)その入力に上記命令フェッチユニット(645)か
ら出力される上記第2の命令が供給される第2の命令デ
コーダ(645)と、 (4)上記第1の命令デコーダ(644)のデコード結果
によって制御される第1の命令実行ユニット(651)
と、 (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の命令実行ユニット(6
51)と第2の命令実行ユニット(652)とにおける第1
及び第2の命令の並行実行を禁止する。 本発明のその他の目的と特徴は、以下の実施例の説明
から明らかとなろう。 [実施例] 以下、本発明の一実施例を図面に沿って、詳細に説明
する。 データ・プロセッサの概要 第1図は本発明の一実施例であるデータ・プロセッサ
のブロック図である。このデータ・プロセッサは、大き
く分類すると、プロセッサ部610、プログラムメモリ62
0、及び、データメモリ630から構成されている。 プログラムメモリ620は、命令アドレスバス621及び命
令データバス622によって、プロセッサ610と接続されて
いる。 命令アドレスバス621は、32ビット幅で、4G(ギガ)
バイトまでアドレッシング可能である。 命令データバス622は64ビット幅で、1回の転送で2
つの命令が同時にプログラムメモリ620からフェッチさ
れることができる。 データメモリ630は、オペランドアドレスバス631及び
オペランドデータバス632によって、プロセッサ610と接
続されている。 オペランドアドレスバス631は、32ビット幅で、4G
(ギガ)バイトまでアドレッシング可能である。 オペランドデータバス632は、32ビット幅で、1回の
転送で1ワードのデータがデータメモリ630からフェッ
チ又はストアされることができる。 また、プログラムメモリ620およびデータメモリ630
は、それぞれ、例えば命令キャッシュメモリとデータキ
ャッシュメモリであり、メインメモリ(図示せず)の命
令およびデータの一部のコピーを保持するものである。 プロセッサの内部構成 プロセッサ610は、命令のアドレスを計算するプログ
ラムカウンタ643、及び、プリフェッチした命令を保持
するプリフェッチバッファ640、第1命令レジスタ641、
第2命令レジスタ642、第1命令デコーダ644、第2命令
デコーダ645、レジスタファイル650、第1演算器651、
第2演算器652、メモリアドレスレジスタ(MAR)653、
メモリデータレジスタ(MDR)654、並列動作制御ユニッ
ト646から成る。 プリフエッチユニット プリフエッチユニットであるプリフェッチバッファ64
0は、64ビット幅で、プログラムメモリ620から1度にフ
ェッチしてきた2命令を保持することができる。 プリフェッチバッファ640の内容は、第1命令レジス
タ641、及び、第2命令レジスタ642に空きができた時点
で、左側命令は第1命令レジスタ641へ、右側の命令は
第2命令レジスタ642へ転送される。 本実施例ではビッグエンディアンのアドレス付けを採
用しており、プリフェッチバッファ640に保持された2
つの命令の内、左側の命令が若いアドレスの命令であり
先に実行され、その次に右側の命令が実行される。 レジスタファイル レジスタファイル650は32ビット幅のレジスタ、32本R
0,R1,R2,…R31から成り、5ポートの読み出し及び3ポ
ートの書き込みが同時に可能である。 命令デコーダ 1サイクルでプログラムメモリ620から命令フェッチ
バッファ640にフェッチされた第1と第2の命令が、そ
れぞれ第1と第2のデコーダ644,645によってデコード
される。 第1と第2のデコーダ644,645のデコード結果に従っ
て、命令実行ユニット651,652が制御される。 命令実行ユニット 命令実行ユニットの演算器651及び652は、それぞれ32
ビットのA側入力655及び657とB側入力656及び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の命
令の並行実行を禁止する。 並列動作制御ユニット 並列動作制御ユニット646は、第1命令デコーダ641お
よび第2命令デコーダ645のデコード結果、比較器131、
132の出力等の情報を受け、第1命令レジスタ641、第2
命令レジスタ642にセットされている2つの命令が並列
実行できるか否かを判定する。 2つの命令を並列実行できる場合は、第1命令デコー
ダ644および第2命令デコーダ645のデコード結果を有効
として、2つの命令を第1の命令実行ユニット651と第
2の命令実行ユニット652とで実行する。 2つの命令を並列実行できない場合は、第2命令デコ
ーダ645のデコード結果を無効化し、第1命令デコーダ6
44のデコード結果のみを有効として、この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プロセッサのためにコンパイルされたプログ
ラムの分岐命令の直後の命令は、CISCプロセッサの如き
通常のデータ・プロセッサのためにコンパイルされたプ
ログラムの分岐命令の直前の命令に対応している。 一方、上述の如く、RISCプロセッサにおいては、分岐
命令の直後の命令(通常の場合の分岐命令の直前の命
令)を先に実行し、しかる後、分岐命令を実行する。 遅延分岐およびディレイスロットに関しては、Gerry
Kane著による「mips RISC ARCHITECHTURE」第1−9頁
乃至第1−11頁(1988年)に詳しく記載されている。 すなわち、通常のプロセッサは命令フェッチ、命令デ
コード、命令実行の多段のパイプラインによる命令の並
列処理を実行している。 このパイプライン並列処理のため、分岐命令による分
岐先アドレス計算を行っている間に、命令フェッチユニ
ットは分岐命令に続く命令を続々とフェッチする処理を
続行する。 従来のCISCプロセッサでは、分岐を実行する時には、
先行的にフェッチした分岐命令に続く命令を無効化し
て、分岐先命令を新たにフェッチし、命令デコード、命
令実行するものである。従って、CISCプロセッサでは、
その実行に2サイクルを必要とする分岐命令の後に、自
動的に何も作業をしない1サイクル(No Operationのサ
イクル)が挿入されてしまう。 一方、RISCプロセッサでは、分岐を実行する時には、
先行的にフェッチした分岐命令に続く命令(通常の場合
の分岐命令の直前の命令)を無効化しないで、先にこの
命令を実行し、しかる後に分岐命令を実行し、新たに分
岐先命令をフェッチするものである。 この様に、RISCプロセッサでは分岐命令の後に、無効
化されることのない有効な命令をプログラム中で配置す
ることによって、このサイクルを有効に活用することが
できる。このような分岐命令の仕様は遅延分岐と呼ば
れ、分岐命令の後の1サイクルはディレイスロットと呼
ばれている。 ディレイスロットにおける2命令同時実行 従って、RISCプロセッサにおける2つの命令の同時実
行を行う場合の、遅延分岐のディレイスロットの基本的
な扱いについて以下に説明する。 まず、直前の命令が条件分岐命令で、その後に2つの
命令をフェッチした場合には、(1)条件分岐命令の条
件が成立する場合は、ディレイスロットでは第1の命令
だけ実行する。(2)もし条件分岐命令の条件が不成立
の場合は、第2の命令も第1の命令と同時に実行できる
ものであるならば、2つの命令をディレイスロットで実
行する。この遅延分岐の動作については、第6図(f)
の実施例において詳細に説明する。 命令のフォーマット 第2図は本発明の一実施例である第1図のプロセッサ
のための命令のフォーマットを説明する図である。 第2図に示すように、1つの命令は32ビットの固定長
で、左端より6ビット、5ビット、5ビット、16ビット
のフィールドに分割されている。左端の6ビットのフィ
ールド210は命令の種類を示すオペレーションコード(O
Pコード)である。次の5ビットのフィールド220は命令
の実行結果を格納するレジスタを指定するデスティネー
ションフィールドである。次の5ビットのフィールド23
0は命令の入力レジスタの一方を指定する第1ソースフ
ィールドである。右端の16ビットのフィールド240はも
う一方の入力を指定する第2ソースフィールドである。
第2ソースフィールド240は第2図(a)に示すように1
6ビットのイミディエイトデータとして用いられる場合
と、第2図(b)に示すように、右端の5ビット250に
よってレジスタを指定する場合がある。第2ソースフィ
ールドを上記のどちらの使い方にするかは、OPコード21
0の左端のビットで指定され、「0」のとき(a)、
「1」のとき(b)にように使われる。(a)の形式の
命令をイミディエイト命令と呼び、(b)の形式の命令
をレジスタ命令と呼ぶ。 なお、本実施例ではレジスタファイルのレジスタの数
は32本であり、レジスタR0,R1,R2,…R31を指定する場合
には上記のように5ビットを必要とする。 第5図はOPコード210のビット割り当てを示したもの
である。 LUI(ロード・アッパー・イミディエイト)命令510
は、第2ソースフィールド240の16ビットのイミディエ
イトデータの右側に16ビット分の「0」を連結して、32
ビットのイミディエイトにして、デスティネーションフ
ィールド220に示されるレジスタに格納する命令であ
る。 ADDI(アッド・イミディエイト)命令512は、第2ソ
ースフィールド240の16ビットのイミディエイトデータ
の左側に第2ソースフィールド240の最上位ビットと同
じ値を16ビット分、連結して、32ビットのイミディエイ
トに符号拡張した後、第1ソースフィールド230で示さ
れるレジスタの内容と加算して、デイティネーションフ
ィールド220に示されるレジスタに格納する命令であ
る。 SUBI(サブトラクト・イミディエイト)命令514は、
第2ソースフィールド240をADDI命令512と同様に32ビッ
トのイミディエイトに符号拡張した後、第1ソースフィ
ールド230で示されるレジスタの内容から減算して、デ
スティネーションフィールド220に示されるレジスタに
格納する命令である。 ANDI(アンド・イミディエイト)命令516は、第2ソ
ースフィールド240の16ビットのイミディエイトデータ
の左側に16ビット分の「0」を連結して、32ビットのイ
ミディエイトに拡張した後、第1ソースフィールド230
で示されるレジスタの内容との間で各ビットごとの論理
積を求めて、その結果をデスティネーションフィールド
220に示されるレジスタに格納する命令である。 ORI(オア・イミディエイト)命令518、及び、EORI
(イクスクルーシブ・オア・イミディエイト)命令520
は、ANDI命令516と同様に、それぞれ、論理和、排他的
論理和を求める命令である。 SLLI(シフト・レフト・ロジカル・イミディエイト)
命令522は、第1ソースフィールド230で示されるレジス
タの内容を第2ソースフィールド240の16ビットのイミ
ディエイトデータの数だけ左にシフトして、その結果を
デスティネーションフィールド220に示されるレジスタ
に格納する命令である。このとき、右端からシフトイン
される値は「0」である。 SRLI(シフト・ライト・ロジカル・イミディエイト)
命令524は、SLLI命令522とは逆に右にシフトする命令で
ある。このとき、左端からシフトインされる値は「0」
である。 SRAI(シフト・ライト・アリスメッティック・イミデ
ィエイト)命令526は、SRLI命令524と同様に右にシフト
する命令であるが、左端からシフトインされる値は
「0」ではなく、第1ソースフィールド230で示される
レジスタの右端のビットと同じ値である。 LD(ロード)命令530は、第2ソースフィールド240を
ADDI命令512と同様に32ビットのイミディエイトに符号
拡張した後、第1ソースフィールド230で示されるレジ
スタの内容と加算した結果をアドレスとし、そのアドレ
スで示されたデータメモリの内容をデスティネーション
フィールド220に示されるレジスタに格納する命令であ
る。 ST(ストア)命令532は、LD命令530と同様にアドレス
を求め、デスティネーションフィールド220に示される
レジスタの内容を、そのアドレスで示されたデータメモ
リに格納する命令である。 Bcc(ブランチ)命令536は、条件付き分岐命令で、条
件が成立したとき、第2ソースフィールド240の16ビッ
トのイミディエイトデータの左側に第2ソースフィール
ド240の最上位ビットと同じ値を16ビット分、連結し
て、32ビットのイミディエイトに符号拡張した値と、現
在の命令のアドレスを示すPC(プログラム カウンタ)
の値を加算したアドレスへ、プログラムの流れを変える
命令である。なお、このときの分岐条件はデスティネー
ションフィールド220の5ビットによって指定される。 ADD命令552からSRA命令566までは、それぞれADDI命令
512からSRAI命令526において、第2ソースオペランドと
してレジスタの内容を用いる命令である。 JUMP(ジャンプ)命令576は、無条件分岐命令で、第
2ソースフィールド240の示すレジスタの内容を分岐先
アドレスとし、そのアドレスへプログラムの流れを変え
る命令である。 本実施例では、LUI命令510からSRAI命令526、及びADD
命令552からSRA命令566は数値演算命令に分類され、LD
命令530及びST命令532はメモリ操作命令に分類され、ま
たBcc命令536及びJUMP命令576は分岐命令に分類され
る。 2命令並列実行動作 第3図は本発明の特徴である2つの命令を同時に実行
するときの動作を示す図である。 先ず、第3図(a)は分岐命令と数値演算命令を同時
に実行するときの動作を示す図である。分岐命令が64ビ
ット命令データバス622の左側でフェッチされ、ORI命令
が64ビット命令データバス622の右側でフェッチされた
場合である。本実施例によれば以上の2つの命令を同時
に実行することができる。 64ビット命令データバス622の左側でフェッチされた
分岐命令は第1命令レジスタ641にセットされ、同時に6
4ビット命令データバス622の右側でフェッチされたORI
命令は第2命令レジスタ642にセットされる。第1命令
デコーダ644は第1命令レジスタ641のOPコードフィール
ド111を解読して分岐命令であることを検出し、第2命
令デコーダ645は第2命令レジスタ642のOPコードフィー
ルド121を解読し数値演算命令(ORI命令)であることを
検出する。 並列動作制御ユニット646は、第1及び第2命令デコ
ーダ644、645のデコード結果から、フェッチされた分岐
命令と数値演算命令とは並列に実行可能な種類の命令で
あることが判る。 また、分岐命令では実行結果をデスティネーションレ
ジスタにセットしないので、数値演算命令(ORI命令)
のソースレジスタとコンフリクトを生じないことがわか
る。以上の判定によって、並列動作制御ユニット646は
これら2つの命令を同じサイクルで並列に実行を開始す
る。 つまり、分岐命令の動作として、第1命令レジスタ64
1の第2ソースフィールド114の16ビットイミディエイト
データの左側に、このイミディエイトデータの符号16ビ
ート分連結して32ビット長に拡張したものを、プログラ
ムカウンタ643に入力し現在の命令アドレスと加算する
ことによって、分岐先アドレスを求る。一方、デスティ
ネーションフィールド112で示される分岐条件を判定し
て、条件を満たしている場合は、上記の分岐先アドレス
を用いて次回以降の命令フェッチを行なう。 また同時に、ORI命令の動作として、第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によって制御される。 なお、本実施例では、分岐命令の次の命令が分岐命令
と同じサイクルで実行できる場合には、この命令を同時
に実行し、ディレイスロットでは、新たな命令の実行を
開始しないことにしている。また、分岐命令の次の命令
が分岐命令と同じサイクルで実行できない場合には、こ
の命令をディレイスロットで実行することにしている。 従って、本実施例によれば従来のプロセッサと同等の
動作となり、互換性を保証することができる。 他の実施例として、分岐命令の次の命令が分岐命令と
同じサイクルで実行できる場合には、この命令を同時に
実行し、ディレイスロットでは新たな命令の実行を開始
する方式が考えられる。この場合には、ディレイスロッ
トで3つの命令を実行した場合と同等になり、処理性能
をさらに向上させることができる。 また、上記の説明では、分岐命令の直前の命令は分岐
命令ではない場合について説明した。本実施例では分岐
命令は他の分岐命令のデイレイスロットに配置しないよ
うに、コンパイラ等のソフトウェアによって制限されて
いるので、命令実行回路ではこのような場合はないもの
として構成されている。 第3図(b)は数値演算命令とメモリ操作命令を同時
に実行するときの動作を示す図である。ADD命令が64ビ
ット命令データバス622の左側でフェッチされ、LD命令
が右側でフェッチされた場合である。ADD命令でレジス
タファイル650のR1レジスタの内容とR2レジスタの内容
を加算し、R3レジスタに格納し、LD命令でR5レジスタと
イミディエイトデータを加算した値をアドレスとするデ
ータメモリ630の内容をR4レジスタにセットする。本実
施例によれば以上の2つの命令を同時に実行することが
できる。 64ビット命令データバス622の左側でフェッチされたA
DD命令はプリフェッチバッファ640から第1命令レジス
タ641にセットされ、同時に64ビット命令データバス622
の右側でフェッチされたLD命令はプリフェッチバッファ
640から第2命令レジスタ642にセットされる。第1命令
デコーダ644は第1命令レジスタ641のOPコードフィール
ド141を解読して数値演算命令(ADD命令)であることを
検出し、第2命令デコーダ645は第2命令レジスタ642の
OPコードフィールド151を解読してメモリ操作命令(LD
命令)であることを検出する。 並列動作制御ユニット646は、第1及び第2命令デコ
ーダ644、645のデコード結果から上記2つの命令は並列
に実行できる種類の命令であることが判る。 また、比較器131は第1命令レジスタ641のデスティネ
ーションフィールド142と第2命令レジスタ642の第1ソ
ースフィールド153を比較して、一致していないことを
検出する。以上の判定により、並列動作制御ユニット64
6はこれら2つの命令を同じサイクルで並列に実行を開
始する。 つまり、ADD命令の動作として、第1命令レジスタ641
の第1ソースフィールド143に従って、R1レジスタの内
容を読み出し、また、第2ソースフィールド144に従っ
て、R2レジスタの内容を読み出す。これら2つのデータ
の和を演算器651で求め、その結果をデスティネーショ
ンフィールド142で示されるR3レジスタへ格納する。な
お、演算器651は、第1命令レジスタ641のOPコード141
を解読する第1デコーダ644によって制御される。 また同時に、LD命令の動作として、第2命令レジスタ
642の第2ソースフィールド154の16ビットイミディエイ
トデータを32ビット長に符号拡張したものと第2命令レ
ジスタ642の第1ソースフィールド153によって指定され
たR5レジスタとを加算した値を演算器652で求め、この
値をMAR653にセットして、これをアドレスとするデータ
メモリ630の内容をMDR654に読み出し、この読み出しデ
ータを第2命令レジスタ642のデスティネーションフィ
ールド152で示されるレジスタファイル650のR4レジスタ
にセットする。なお、演算器652は、第2命令レジスタ6
42のOPコード151を解読する第2デコーダ645によって制
御される。 次に実行する命令は、プリフェッチバッファ640に保
持されている命令であるので、このプリフェッチバッフ
ァ640の命令を第1命令レジスタ641及び第2命令レジス
タ642へ転送して、以下同様に実行する。 なお、上記の説明では、LD命令の直前の命令はADD命
令で、分岐命令ではない場合について説明した。他の動
作例として直前の命令(左側の命令)がADD命令でなく
分岐命令の場合は、本実施例ではLD命令は分岐命令とは
同時に実行され、分岐命令のデイレイスロットでは新た
にフェッチされた命令の実行を抑止する。 第3図(c)は数値演算命令を2つ同時に実行すると
きの動作を示す図である。ADD命令が64ビット命令デー
タバス622の左側でフェッチされ、OR命令が右側でフェ
ッチされた場合である。ADD命令でR1レジスタの内容とR
2レジスタの内容を加算し、R3レジスタに格納し、OR命
令でR5レジスタとR6レジスタとの論理和を求め、R4レジ
スタに格納する。本実施例によれば以上の2つの命令を
同時に実行することができる。 64ビット命令データバス622の左側でフェッチされたA
DD命令は第1命令レジスタ641にセットされ、同時に64
ビット命令データバス622の右側でフェッチされたOR命
令は第2命令レジスタ642にセットされる。第1命令デ
コーダ644は第1命令レジスタ641のOPコードフィールド
141を解読して数値演算命令(ADD命令)であることを検
出し、第2命令デコーダ645は第2命令レジスタ642のOP
コードフィールド161を解読してメモリ操作命令(OR命
令)であることを検出する。 並列動作制御ユニット646は、上記第1及び第2の命
令デコーダ644、645のデコード結果から、上記2つの命
令が並列に実行できる種類の命令であることが判る。 また、比較器131は第1命令レジスタ641のデスティネ
ーションフィールド142と第2命令レジスタ642の第1ソ
ースフィールド163を比較して、一致していないことを
検出する。また更に、比較器132は第1命令レジスタ641
のデスティネーションフィールド142と第2命令レジス
タ642の第2ソースフィールド164を比較して、一致して
いないことを検出する。以上の判定により、並列動作制
御ユニット646はこれら2つの命令を同じサイクルで並
列に実行を開始する。 つまり、ADD命令の動作として、第1命令レジスタ641
の第1ソースフィールド143に従って、R1レジスタの内
容を読み出し、また、第2ソースフィールド144に従っ
て、R2レジスタの内容を読み出す。これら2つのデータ
の和を演算器651で求め、その結果をデスティネーショ
ンフィールド142で示されるR3レジスタへ格納する。な
お、演算器651は、第1命令レジスタ641のOPコード141
を解読する第1デコーダ644によって制御される。 また同時に、OR命令の動作として、第2命令レジスタ
642の第1ソースフィールド163に従って、R5レジスタの
内容を読み出し、また、第2命令レジスタ642の第2ソ
ースフィールド164に従って、R6レジスタの内容を読み
出す。これら2つのデータの論理和を演算器652で求
め、その結果をデスティネーションフィールド162で示
されるR4レジスタへ格納する。なお、演算器652は、第
2命令レジスタ642のOPコード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クロックサイクルの動作に対応する。パイプライン
のステージはIF(命令フェッチ)、ID(命令デコー
ド)、EX(演算実行)、M(データフェッチ/スト
ア)、W(結果の格納)の5つのステージから成る。 IFステージは、プログラムメモリ620から命令をプリ
フェッチバッファ640へ読み出すステージである。 IDステージは、プリフェッチバッファ640から命令を
命令レジスタ641、642にセットして、命令デコーダ64
4、645で解読すると同時に、レジスタファイル650から
必要なオペランド・データを読み出すステージである。 EXステージは、演算器651、652によってオペランド・
データを処理するステージである。 Mステージは、命令がもしLD命令又はST命令であった
ら、データメモリ630をアクセスするステージである。
また、それ以外の命令ならば、実行結果をレジスタファ
イル650に格納するステージである。 Wステージは、命令がLD命令の時、データメモリ630
から読み出したデータをレジスタファイル650に格納す
るステージである。 以下、第4図(a)のバイプライン処理の各クロック
サイクル毎に説明する。 [1クロックサイクル目] プログラムメモリ620から64ビット分の命令(Aと
B)をフェッチして、プリフェッチバッファ640にセッ
トする。 [2クロックサイクル目] プリフェッチバッファ640に保持している2つの命令
(AとB)をそれぞれ第1命令レジスタ641及び第2命
令レジスタ642にセットし、第1命令デコーダ644及び第
2命令デコーダ645で解読を行う。その結果、命令Aが
分岐命令であり、命令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命令デコーダ644及び第
2命令デコーダ645で解読を行う。その結果、命令Aが
数値演算命令であり、命令BがLD命令であることが分か
るので、次のサイクルでこの2つの命令を同時に実行す
る準備を行う。なおこのとき、レジスタの読み出し及び
イミディエイトデータのデータ拡張が必要な場合にはこ
のサイクルで行う。一方、プログラムメモリ620からは
次の64ビット分の命令(CとD)のフェッチして、プリ
フェッチバッファ640にセットしておく。 [3クロックサイクル目] 第1命令デコーダ644で解読した命令A(数値演算命
令)及び、第2命令デコーダ645で解読した命令B(LD
命令)を実行する。LD命令ではオペランドデータの実効
アドレスの計算を行う。一方、プリフェッチバッファ64
0に保持している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は1サイクル
でアクセスできるものとしている。しかし、データメモ
リ630がキャッシュメモリである場合は、アクセスすべ
きデータがキャッシュメモリ中に存在しない時(キャッ
シュ・ミス)もある。この時は、メインメモリをアクセ
スするためには、通常キャッシュメモリをアクセスする
場合に比べ、余分なサイクル数を必要とする。そこで、
上記の例では、データメモリ630は1サイクルでアクセ
ス可能であるとしているが、キャッシュ・ミスの場合
は、必要なサイクルを上記4クロックサイクル目と5ク
ロックサイクル目との間にダミーの実行サイクル(ウエ
イトサイクル)を挿入するものとする。 以下の説明でも、データメモリ630は1サイクルで基
本的にアクセス可能として説明するが、必要に応じて更
なるダミーサイクルの挿入はあるものとする。 2つの数値演算命令のレジスタ・コンフリクト 第6図(a)は2つの数値演算命令の間でレジスタの
コンフリクトがある場合の動作を示す図である。ADD命
令が64ビット命令データバス622の左側でフェッチさ
れ、OR命令が右側でフェッチされた場合である。ADD命
令でR1レジスタの内容とR2レジスタの内容を加算し、R3
レジスタに格納し、OR命令でR5レジスタとR3レジスタと
の論理和を求め、R4レジスタに格納する。本発明によれ
ば以上の2つの命令のレジスタのコンフリクトを検出で
き、1サイクルでの実行を抑止することができる。 64ビット命令データバス622の左側でフェッチされたA
DD命令は第1命令レジスタ641にセットされ、同時に64
ビット命令データバス622の右側でフェッチされたOR命
令は第2命令レジスタ642にセットされる。第1命令デ
コーダ644は第1命令レジスタ641のOPコードフィールド
311を解読して数値演算命令(ADD命令)であることを検
出し、第2命令デコーダ645は第2命令レジスタ642のOP
コードフィールド316を解読してメモリ操作命令(OP命
令)であることを検出する。 並列動作制御ユニット646は、第1及び第2の命令デ
コード結果より、上記2つの命令は並列に実行できる種
類の命令であることが判る。 一方、比較器131は第1命令レジスタ641のデスティネ
ーションフィールド312と第2命令レジスタ642の第1ソ
ースフィールド319を比較して、一致していないことを
検出する。しかし、比較器132は第1命令レジスタ641の
デスティネーションフィールド312と第2命令レジスタ6
42の第2ソースフィールド318を比較して、一致してい
ることを検出する。したがって、並列動作制御ユニット
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つのデータの論理和を演算器652で求め、
その結果をデスティネーションフィールド317で示され
るR4レジスタへ格納する。なお、演算器652は、第2命
令レジスタ642のOPコード316を解読する第2デコーダ64
5によって制御される。 なお、本実施例によれば、第4図で説明したように、
OR命令のためのレジスタ読み出しは、直前のADD命令の
実行と同時に行われる。そのため、この時、レジスタR3
の内容ADD命令の実行結果を未だ格納していない。 そこで、比較器132によりレジスタ番号が一致した場
合は、レジスタファイル650からの読み出しの代わり
に、演算器651の出力を出力レジスタ659にセットすると
同時に、演算器652の入力レジスタ658にセットするバイ
パス手段を設けることが望ましい。 以上の様に同時にフェッチされた2つの命令の間でレ
ジスタのコンフリクトである場合でも、本実施例によれ
ば、コンフリクトを検出し正常に動作することができ
る。 2つのメモリ操作命令のバス・コンフリクト メモリ操作命令はデータメモリ630のアクセスする命
令であるため、もし2つのメモリ操作命令を並行に実行
したならば、オペランドアドレスバス631上で2つのメ
モリ操作命令のアクセス・アドレスがコンフリクトする
可能性がある。これを解消するためには、2つのメモリ
操作命令をシリアルに実行する必要がある。 第6図(b)は2つの連続したメモリ操作命令をシリ
アルに実行するときの動作を示す図である。LD命令が64
ビット命令データバス622の左側と右側で同時にフェッ
チされた場合である。左側のLD命令でR1レジスタの内容
とイミディエイトデータを加算した値をアドレスとする
データメモリ630の内容をR3レジスタに格納し、右側のL
D命令でR5レジスタとイミディエイトデータを加算した
値をアドレスとするデータメモリ630の内容をR4レジス
タにセットする。本実施例によれば以上の2つの命令を
シリアライズして実行することができる。 64ビット命令データバス622の左側でフェッチされたL
D命令は第1命令レジスタ641にセットされ、同時に64ビ
ット命令データバス622の右側でフェッチされたLD命令
は第2命令レジスタ642にセットされる。第1命令デコ
ーダ644は第1命令レジスタ641のOPコードフィールド32
1を解読してメモリ操作命令(LD命令)であることを検
出し、第2命令デコーダ645は第2命令レジスタ642のOP
コードフィールド326を解読してメモリ操作命令(LD命
令)であることを検出する。 並列動作制御ユニット646は上記第1及び第2の命令
デコーダ644、645のデコード結果より、上記2つの命令
は並列に実行できる種類の命令でないことが判る。 本実施例によれば以上の判定により、並列動作制御ユ
ニット646は同一サイクルでの2命令の実行を抑止す
る。 本実施例では第4図の説明のところで述べたように、
LD命令は1サイクル目にアドレスを計算し、2サイクル
目に実際のメモリアクセスを行い、3サイクル目に結果
をデスティネーションレジスタにセットする。 そこで、上記2つの命令の実行手順をサイクルごとに
以下説明する。 まず第1のサイクルでは、左側のLD命令の動作とし
て、第1命令レジスタ641の第1ソースフィールド323に
従って、R1レジスタの内容を読み出し、また、第2ソー
スフィールド324の16ビットイミディエイトデータを32
ビット長に符号拡張したものとを加算した値を演算器65
1で求め、この値をMAR653にセットする。なお、演算器6
51は、第1命令レジスタ641のOPコード321を解読する第
1デコーダ644によって制御される。 第2のサイクルでは、左側のLD命令の動作として、MA
R653をアドレスとするメモリの内容をMDR654に読み出
す。また、右側のLD命令の動作として、第2命令レジス
タ642の第2ソースフィールド329の16ビットイミディエ
イトデータを32ビット長に符号拡張したものと第2命令
レジスタ642の第1ソースフィールド328によって指定さ
れたR5レジスタとを加算した値を演算器652で求め、こ
の値をMAR653にセットする。なお、演算器652は、第2
命令レジスタ642のOPコード151を解読する第2デコーダ
645によって制御される。 第3のサイクルでは、左側のLD命令の動作として、MD
R654の読み出しデータを第1命令レジスタ641のデステ
ィネーションフィールド322で示されるR3レジスタにセ
ットする。また、右側のLD命令の動作として、MAR653を
アドレスとするデータメモリ630の内容をMDR654に読み
出す。 第4のサイクルでは、右側のLD命令の動作として、MD
R654の読み出しデータを第2命令レジスタ642のデステ
ィネーションフィールド327で示されるレジスタR4にセ
ットする。 以上の様に、メモリ操作命令が2つ同時にフェッチさ
れた場合でも、本実施例によれば、これを検出し、シリ
アライズして正常に動作することができる。 なお上記の例では、左側のLD命令のデスティネーショ
ンレジスタが右側のLD命令のソースレジスタに一致して
いない場合について説明したが、もし一致している場合
は、比較器131によって、これ(レジスタの一致、レジ
スタコンフリクト)を検出できるので、左側のLD命令の
ディレイスロットを考慮して、並列動作制御ユニット64
6は1サイクルのウェイトを右側のLD命令のレジスタ読
み出しを開始する前に挿入する。 しかし、上記のように、1サイクルのウェイトを挿入
しても、右側のLD命令のためのソースレジスタの読み出
しは、左側のLD命令のデータメモリ630のアクセスと同
時に行われるので、未だ左側のLD命令のソースレジスタ
には右側のLD命令の実行結果が格納されていない。そこ
で、第6図(a)と同様に直前の命令がLD命令で比較器
131によりレジスタ番号が一致した場合は、レジスタフ
ァイル650からの読み出しの代わりに、データメモリ630
からの読み出しデータをMDR654にセットするのと同時に
演算器652の入力レジスタ657にセットするバイパス手段
(図示せず)を有するのが望ましい。 メモリ操作命令の結果を使う数値演算命令 第1図の実施例で説明したように、第1図において第
1の命令実行ユニット651は数値演算命令と分岐命令用
に限定し、第2の命令実行ユニット652は数値演算命令
とメモリ操作命令用に限定されているとする。 この機能限定に関する前提に反して、メモリ操作命令
と数値演算命令とが第1命令レジスタ641と第2命令レ
ジスタ642とにセットされたとする。 この2つの命令は、並列に実行されることはできず、
シリアルに実行する必要がある。 第6図(c)はメモリ操作命令の結果を使って数値演
算命令を実行するときの動作を示す図である。LD命令が
64ビット命令データバス622の左側でフェッチされ、OR
命令が64ビット命令データバス622の右側でフェッチさ
れた場合である。LD命令でR1レジスタの内容とイミディ
エイトデータを加算した値をアドレスとするデータメモ
リ630の内容をレジスタR3に格納し、OR命令でレジスタR
5とレジスタR3との論理和を求め、これをレジスタR4に
セットする。本実施例によれば以上の2つの命令をシリ
アライズして実行することができる。 64ビット命令データバス622の左側でフェッチされたL
D命令は第1命令レジスタ641にセットされ、同時に64ビ
ット命令データバス622の右側でフェッチされたOR命令
は第2命令レジスタ642にセットされる。第1命令デコ
ーダ644は第1命令レジスタ641のOPコードフィールド33
1を解読してメモリ操作命令(LD命令)であることを検
出し、第2命令デコーダ645は第2命令レジスタ642のOP
コードフィールド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
命令レジスタ641の第1ソースフィールド333に従って、
R1レジスタの内容を入力レジスタ655へ読み出し、ま
た、第2ソースフィールド334の16ビットイミディエイ
トデータを32ビット長に符号拡張したものを入力レジス
タ656へセットする。 第2のサイクルでは演算器651でメモリアドレス求
め、この値をMAR653にセットする。なお、演算器651
は、第1命令レジスタ641のOPコード331を解読する第1
デコーダ644によって制御される。なお、このサイクル
では新たな命令(ここではOR命令)の実行は開始され
ず、1サイクルのウェイトとなる。 第3のサイクルでは、LD命令の動作として、MAR653を
アドレスとするデータメモリ630の内容をMDR654に読み
出す。 また、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命令の動作として、MDR654の
読み出しデータを第1命令レジスタ641のデスティネー
ションフィールド332で示されるレジスタR3にセットす
る。 また、OR命令の動作として、2つのデータの論理和を
演算器652で求める。尚、演算器652は、第2命令レジス
タ642のOPコード336を解読する第2デコーダ645によっ
て制御される。 第5のサイクルでは、OR命令の結果をデスティネーシ
ョンフィールド337で示されるレジスタR4へ格納する。 以上の様に、メモリ操作命令の結果を使う命令がメモ
リ操作命令と同時にフェッチされた場合でも、本実施例
によれば、これを検出し、シリアライズして正常に動作
することができる。 数値演算命令の結果を使う分岐命令 第1図の実施例で説明したように、第1図において第
1の命令実行ユニット651は数値演算命令と分岐命令用
に限定し、第2の命令実行ユニット652は数値演算命令
とメモリ操作命令用に限定されているとする。 この機能限定に関する前提に反して、数値演算命令と
分岐命令とが第1命令レジスタ641と第2命令レジスタ6
42とにセットされたとする。 この2つの命令は、並列に実行されることはできず、
シリアルに実行する必要がある。 第6図(d)は数値演算命令の結果が、分岐命令の分
岐先アドレスである場合の動作を示す図である。 ADD命令が64ビット命令データバス622の左側でフェッ
チされ、JUMP命令が右側でフェッチされた場合である。 ADD命令でレジスタR1の内容とレジスタR2の内容を加
算し、レジスタR3に格納し、JUMP命令でレジスタR3で示
されるアドレスへ分岐する。 本実施例によれば以上の2つの命令のレジスタのコン
フリクトを検出でき、1サイクルでの並列実行を抑止す
ることができる。 64ビット命令データバス622の左側でフェッチされたA
DD命令は第1命令レジスタ641にセットされ、同時に64
ビット命令データバス622の右側でフェッチされたJUMP
命令は第2命令レジスタ642にセットされる。第1命令
デコーダ644は第1命令レジスタ641のOPコードフィール
ド341を解読して数値演算命令(ADD命令)であることを
検出し、第2命令デコーダ645は第2命令レジスタ642の
OPコードフィールド346を解読して分岐命令(JUMP命
令)であることを検出する。 並列動作制御ユニット646は、上記第1及び第2の命
令デコーダ644、645のデコード結果より、上記2つの命
令は並列に実行できる種類の命令でないことが判る。 また、比較器131は第1命令レジスタ641のデスティネ
ーションフィールド342と第2命令レジスタ642の第1ソ
ースフィールド348を比較して、一致していることを検
出する。従って、並列動作制御ユニット646はこれら2
つの命令を同じサイクルで並列に実行することはできな
いと判断し、これらの命令をシリアルに実行する。 つまり、まず初めに、ADD命令の動作として、第1命
令レジスタ641の第1ソースフィールド343に従って、レ
ジスタR1の内容を読み出し、また、第2ソースフィール
ド344に従って、レジスタR2の内容を読み出す。これら
2つのデータの和を演算器651で求め、その結果をデス
ティネーションフィールド342で示されるレジスタR3へ
格納する。尚、演算器651は、第1命令レジスタ641のOP
コード341を解読する第1デコーダ644によって制御され
る。 次に、JUMP命令の動作について説明する。本実施例で
は通常、分岐命令は第1命令レジスタ641にセットされ
て実行されることになっている。そこで、上記のADD命
令を実行した次のサイクルで、並列動作制御ユニット64
6は第2命令レジスタ642の内容(JUMP命令)を第1命令
レジスタ641に転送して、JUMP命令の実行を開始する。
つまり、第1命令レジスタ641の第1ソースフィールド3
43′(図示せず)に従って、R3レジスタの内容を読み出
し、その結果を分岐先アドレスとして、以降の命令フェ
ッチを行う。 一方、比較器131はADD命令の実行に先立ち第1命令レ
ジスタ641のデスティネーションフィールド342と第2命
令レジスタ642の第1ソースフィールド348を比較して、
一致していることを検出する。従って、第4図に示した
ように、レジスタR3の内容はJUMP命令のためのレジスタ
読み出しを行う時点では、ADD命令の結果は格納されて
いない。 そこで、第6図(a)と同様に、比較器131によりレ
ジスタ番号が一致して、かつ右側の命令を左側の命令レ
ジスタ641へ転送する場合、レジスタファイル650からの
読み出しの代わりに、演算器651の出力を出力レジスタ6
59へセットするのと同時に、演算器651の入力レジスタ6
55へセットするバイパス手段(図示せず)を有する。 以上の様に同時にフェッチされた2つの命令の間でレ
ジスタのコンフリクトがあり、また、分岐命令が通常の
位置でない場合でも、本実施例によれば、コンフリクト
及び命令の位置を検出し正常に動作することができる。 分岐先命令が第2命令レジスタ642にセット 第6図(e)は分岐命令によって64ビット命令バスの
右側の命令に分岐した時の動作を示す図である。OR命令
が64ビット命令データバス622の右側でフェッチされた
場合である。OR命令でR5レジスタとR6レジスタとの論理
和を求め、R4レジスタに格納する。本発明によれば以上
のように、左側の命令を実行してはいけない場合、同じ
サイクルでの2命令実行を抑止することができる。 64ビット命令データバス622の右側でフェッチされたO
R命令は第2命令レジスタ642にセットされる。 並列動作制御ユニット646は、直前の分岐命令で64ビ
ット命令バスの右側に分岐したことを検出すると、第1
命令デコーダ644を抑止し、第1命令レジスタ641にセッ
トされた命令を無視する。第2命令デコーダ645は第2
命令レジスタ642のOPコードフィールド356を解読して数
値演算命令(OR命令)であることを検出する。 並列動作制御ユニット646は、この命令は右側の演算
器652で実行できる命令の種類であることが判るので、
この命令の実行を起動する。 OR命令の動作として、第2命令レジスタ642の第1ソ
ースフィールド358に従って、R5レジスタの内容を読み
出し、また、第2命令レジスタ642の第2ソースフィー
ルド359に従って、R6レジスタの内容を読み出す。これ
ら2つのデータの論理和を演算器652で求め、その結果
をデスティネーションフィールド357で示されるR4レジ
スタへ格納する。なお、演算器652は、第2命令レジス
タ642のOPコード356を解読する第2デコーダ645によっ
て制御される。 以上の様に、分岐命令によって64ビット命令バスの右
側に分岐した場合、左側の命令の実行を抑止することが
できる。 ディレイスロットでの命令実行 第6図(f)は直前に条件付き分岐命令がフェッチさ
れ、その分岐命令の直後の命令がフェッチされた結果、
左側の命令がディレイスロットになっているときの動作
を示す図である。 つまり、本実施例では、分岐命令の分岐条件の成立・
不成立に関係無く左側の命令を無条件に実行する。一
方、右側の命令は、既に説明したように、分岐条件の不
成立の場合に限って実行する。 尚、本実施例では、ADD命令が64ビット命令データバ
ス622の左側でフェッチされ、OR命令が右側でフェッチ
された場合である。ディレイスロットのADD命令でレジ
スタR1の内容とレジスタR2の内容を加算し、レジスタR3
に格納し、条件付き分岐命令の条件が不成立の場合は、
OR命令でレジスタR5とレジスタR6との論理和を求め、レ
ジスタR4に格納する。 従って、本実施例によれば、もし分岐条件が成立して
いたら、右側の命令を抑止し、分岐条件が成立しなかっ
たら以上の2つの命令を同時に実行することができる。 64ビット命令データバス622の左側でフェッチされたA
DD命令は第1命令レジスタ641にセットされ、同時に64
ビット命令データバス622の右側でフェッチされたOR命
令は第2命令レジスタ642にセットされる。第1命令デ
コーダ644は第1命令レジスタ641のOPコードフィールド
361を解読して数値演算命令(ADD命令)であることを検
出し、第2命令デコーダ645は第2命令レジスタ642のOP
コードフィールド366を解読して数値演算命令(OR命
令)であることを検出する。 並列動作制御ユニット646は上記第1及び第2の命令
デコーダ644、645のデコード結果より、上記2つの命令
は並列に実行できる種類の命令であることが判る。 また、比較器131は第1命令レジスタ641のデスティネ
ーションフィールド362と第2命令レジスタ642の第1ソ
ースフィールド368を比較して、一致していないことを
検出する。比較器132は第1命令レジスタ641のデスティ
ネーションフィールド362と第2命令レジスタ642の第2
ソースフィールド369を比較して、一致していないこと
を検出する。 従って、並列動作制御ユニット646は直前の分岐命令の
条件が成立していなかったら、これら2つの命令を同じ
サイクルで並列に実行する。また分岐条件が成立してい
たら第2命令デコーダ644を無効化して、右側の命令の
実行を抑止し、左側の命令のみ実行する。 以上の様に同時にフェッチされた2つの命令の内、一
方が分岐命令のディレイスロットになっている場合で
も、本発明によれば、分岐の成立/不成立によって他方
の命令を無効化でき、正常に動作することができる。 直前のLD命令のフェッチ結果を用いる命令 第6図(g)は直前にLD命令があり、そのフェッチ結
果を利用する場合の動作を示す図である。ADD命令が64
ビット命令データバス622の左側でフェッチされ、OR命
令が右側でフェッチされた場合である。直前のLD命令で
レジスタR1にデータメモリ630からデータをセットし、
次のADD命令でレジスタR1の内容とレジスタR2の内容を
加算し、レジスタR3に格納し、OR命令でレジスタR5とレ
ジスタR1との論理和を求め、レジスタR4に格納する。 本実施例では第4図及び第6図(b)、(c)で説明
したように、レジスタR1の内容はLD命令の実行直後のサ
イクルでは有効でない。そこで、直後の命令がレジスタ
コンフリクトの場合は、1サイクルのウェイトを挿入す
ることができる。 64ビット命令データバス622の左側でフェッチされたA
DD命令は第1命令レジスタ641にセットされ、同時に64
ビット命令データバス622の右側でフェッチされたOR命
令は第2命令レジスタ642にセットされる。第1命令デ
コーダ644は第1命令レジスタ641のOPコードフィールド
371を解読して数値演算命令(ADD命令)であることを検
出し、第2命令デコーダ645は第2命令レジスタ642のOP
コード376を解読して数値演算命令(OR命令)であるこ
とを検出する。これを受けて、並列動作制御ユニット64
6は上記2つの命令は並列に実行できる種類の命令であ
ることが判る。 一方、比較器133は第1命令レジスタ641の第1ソース
フィールド373とディレイドロードレジスタ647を比較し
て、一致していることを検出する。比較器134は第1命
令レジスタ641の第2ソースフィールド374とディレイド
ロードレジスタ647を比較して、一致していないことを
検出する。 比較器136は、第2命令レジスタ642の第1ソースフィ
ールド378とディレイドロードレジスタ647を比較し、一
致していないことを検出し、比較器135は第2命令レジ
スタ642の第2ソースフィールド379とディレイドロード
レジスタ647を比較し、一致していることを検出する。 従って、並列動作制御ユニット646は、第1命令レジ
スタ641のADD命令及び第2命令レジスタ642のOR命令の
起動の前に1サイクルのウェイトを挿入し、その後、2
つの命令を並列に実行する。尚、ディレイドロードレジ
スタ647はLD命令のデスティネーションレジスタの番号
がセットされることになっている。 以上の様に同時にフェッチされた2つの命令が、直前
のLD命令のメモリ読み出しデータを使用する場合でも、
本実施例によれば、レジスタのコンフリクトを考慮し
て、正常に動作することができる。 尚、上記の例では、左右どちらの命令も直前のLD命令
の結果を使用する例を示したが、どちらも使用しない場
合は、並列動作制御ユニット646は通常のように2つの
演算器651、652を並列実行させる。 また、右側の命令だけがLD命令の結果を使用する場
合、先ず左側の命令を実行し、その間にLD命令が完了す
るので、続いて右側の命令を実行することができる。 さらにまた、左側の命令だけがLD命令の結果を使用す
る場合は、並列動作制御ユニット646を簡単にするた
め、第6図(g)と同様に左右両方の命令をウェイトさ
せるように制御する。 例外処理 第7図(a)は2つの数値演算命令を同時に実行中
に、左側の命令で例外が発生した場合の動作を示す図で
ある。 ADD命令が64ビット命令データバス622の左側でフェッ
チされ、OR命令が右側でフェッチされた場合である。AD
D命令でレジスタR1の内容とレジスタR2の内容を加算
し、レジスタR3に格納し、OR命令でレジスタR5とレジス
タR6との論理和を求め、レジスタR4に格納する。上記2
つの命令同時実行において、左側のADD命令で例外が発
生した時、並列動作制御ユニット646は右側のOR命令の
実行結果をレジスタに格納することを抑止し、右側のOR
命令の実行を無効化し、例外発生時の命令の処理状態を
保存する。 64ビット命令データバス622の左側でフェッチされたA
DD命令は第1命令レジスタ641にセットされ、同時に64
ビット命令データバス622の右側でフェッチされたOR命
令は第2命令レジスタ642にセットされる。第1命令デ
コーダ644は第1命令レジスタ641のOPコードフィールド
711を解読して数値演算命令(ADD命令)であることを検
出し、第2命令デコーダ645は第2命令レジスタ642のOP
コードフィールド716を解読し数値演算命令(OR命令)
であることを検出する。 これを受けて、並列動作制御ユニット646は上記2つ
の命令は並列に実行できる種類の命令であることが判
る。 また、比較器131は第1命令レジスタ641のデスティネ
ーションフィールド712と第2命令レジスタ642の第1ソ
ースフィールド718を比較して、一致していないことを
検出する。比較器132は第1命令レジスタ641のデスティ
ネーションフィールド712と第2命令レジスタ642の第2
ソースフィールド719を比較して、一致していないこと
を検出する。従って、並列動作制御ユニット646はこれ
ら2つの命令を同じサイクルで並列に実行することはで
きると判断し、これらの命令を同時に実行することにな
る。 つまり、ADD命令の動作として、第1命令レジスタ641
の第1ソースフィールド713に従って、レジスタR1の内
容を読み出し、また、第2ソースフィールド714に従っ
て、レジスタR2の内容を読み出す。これら2つのデータ
の和を演算器651で求め、その結果をデスティネーショ
ンフィールド712で示されるレジスタR3へ格納する。演
算器651は、第1命令レジスタ641のOPコード711を解読
する第1デコーダ644によって制御される。なお、この
演算に際してオーバーフローが発生したとする。 また、OR命令の動作として、第2命令レジスタ642の
第1ソースフィールド718に従って、レジスタR5の内容
を読み出し、また、第2命令レジスタ642の第2ソース
フィールド719に従って、レジスタR6の内容を読み出
す。これら2つのデータの論理和を演算器652で求め
る。なお、演算器652は、第2命令レジスタ642のOPコー
ド716を解読する第2デコーダ645によって制御される。
並列動作制御ユニット646は、左側の命令(ADD命令)に
おいてオーバーフロー例外が発生したことを検出して、
演算器651の結果をレジスタへ格納することを抑止す
る。 例外が発生した命令のアドレスは以下のように退避さ
れる。 先ず、プログラムメモリ620をアクセスした命令アド
レス621は、プリフェッチ命令アドレスレジスタ701にセ
ットされる。このアドレスはプリフェッチ命令バッファ
640にセットされている命令のアドレスに対応する。次
に、命令がプリフェッチ命令バッファ640から第1命令
レジスタ641及び第2命令レジスタ642に転送されると、
命令のアドレスもプリフェッチ命令アドレスレジスタ70
1から実行命令アドレスレジスタ702にセットされる。こ
こで、実行命令アドレスレジスタ702にセットされてい
るアドレスは第1命令レジスタ641にセットされている
命令のアドレスであり、第2命令レジスタ642にセット
されている命令のアドレスは、実行命令アドレスレジス
タ702の値に4を加算した値である。 従って、上記のように、第1命令レジスタ641の命令
(ADD命令)を実行中に例外が発生したら、並列動作制
御ユニット646は実行命令アドレスレジスタ702の値を例
外命令アドレスレジスタ703にセットする。もし、第2
命令レジスタ642の命令(OR命令)を実行中に例外が発
生したら、並列動作制御ユニット646は実行命令アドレ
スレジスタ702の値に4を加算して、その値を例外命令
アドレスレジスタ703にセットする。 例外が発生すると、本実施例では、例外を発生した命
令のアドレスを退避し、プロセッサは、予め決められた
例外処理ルーチンを実行する。この例外処理ルーチンの
先頭アドレスは、予め決められたものであり、プロセッ
サ内のROM705から読み出した値である。このアドレスを
もとに命令プリフェッチを行なう。 例外処理ルーチンはユーザが作成するものなので、各
ユーザによって色々な処理を行っている。例を1つ挙げ
ると、例えば例外発生アドレス及び例外発生の要因をユ
ーザへ表示する一方、そのプログラムの実行を中止し
て、他のプログラムを実行させるものがある。第7図
(a)の場合では、例外発生アドレスとしてEXPC703の
値を表示し、例外要因として算術オーバーフローであっ
たことを表示する。 以上の様に同時に実行していた2つの命令の一方で例
外が発生しても、本発明によれば、例外発生時の命令ア
ドレス、及び、その処理状態を保存しておくことができ
る。 第7図(b)は2つの命令を同時に実行中に、右側の
命令で例外が発生した場合の動作を示す図である。ADD
命令が64ビット命令データバス622の左側でフェッチさ
れ、LD命令が右側でフェッチされた場合である。ADD命
令でR1レジスタの内容とR2レジスタの内容を加算し、R3
レジスタに格納し、LD命令でR5レジスタと16ビットイミ
ディエイトとの和をアドレスとするメモリの内容をフェ
ッチし、R4レジスタに格納する。本実施例によれば上記
の2つの命令同時実行において、右側のLD命令で例外が
発生した時、並列動作制御ユニット646は左側のADD命令
の処理を完了した後、例外発生時の命令の処理状態を保
存する。 64ビット命令データバス622の左側でフェッチされたA
DD命令は第1命令レジスタ641にセットされ、同時に64
ビット命令データバス622の右側でフェッチされたLD命
令は第2命令レジスタ642にセットされる。第1命令デ
コーダ644は第1命令レジスタ641のOPコードフィールド
721を解読して数値演算命令(ADD命令)であることを検
出し、第2命令デコーダ645は第2命令レジスタ642のOP
コードフィールド726を解読してメモリ操作命令(LD命
令)であることを検出する。 これを受けて並列動作制御ユニット646は上記2つの
命令は並列に実行できる種類の命令であることが判る。 また、比較器131は第1命令レジスタ641のデスティネ
ーションフィールド722と第2命令レジスタ642の第1ソ
ースフィールド728を比較して、一致していないことを
検出する。比較器132は第1命令レジスタ641のデスティ
ネーションフィールド722と第2命令レジスタ642の第2
ソースフィールド729を比較して、一致していないこと
を検出する。従って、並列動作制御ユニット646はこれ
ら2つの命令を同じサイクルで並列に実行することはで
きると判断し、これらの命令を同時に実行することにな
る。 つまり、ADD命令の動作として、第1命令レジスタ641
の第1ソースフィールド723に従って、レジスタR1の内
容を読み出し、また、第2ソースフィールド724に従っ
て、レジスタR2の内容を読み出す。これら2つのデータ
の和を演算器651で求め、その結果をデスティネーショ
ンフィールド722で示されるレジスタR3へ格納する。演
算器651は、第1命令レジスタ641のOPコード721を解読
する第1デコーダ644によって制御される。 また、LD命令の動作として、第2命令レジスタ642の
第1ソースフィールド728に従って、レジスタR5の内容
を読み出し、また、第2命令レジスタ642の第2ソース
フィールド729のイミディエイトデータを32ビットに符
号拡張する。これら2つのデータの論理和を、第2命令
レジスタ642のOPコード726を解読する第2デコーダ645
によって制御される演算器652で求め、これをアドレス
として、データメモリ630をアクセスする。この例では
この時、データメモリ630において何らかのエラー、例
えばバスエラーが発生したとする。 例外が発生した命令のアドレスは以下のように退避さ
れる。 第2命令レジスタ642の命令(LD命令)を実行中に例
外が発生したので、並列動作制御ユニット646は実行命
令アドレスレジスタ702の値に4を加算して、その値を
例外命令アドレスレジスタ703にセットする。尚、ここ
で、実行命令アドレスレジスタ702の値に4を加算する
と述べたが、実際には、実行命令アドレスレジスタ702
の値は8の倍数になっているので、右から3ビット目を
0から1にするだけで良い。つまり、桁上がりが発生す
るような演算をする必要はない。 また、プロセッサは、ROM705から読み出した値をアド
レスとして命令プリフェッチを行ない、予め決められた
例外処理ルーチンを実行する。 例外処理ルーチンの内容は、第7図(a)の場合と同
様に、例えば、例外発生アドレスとしてEXPC703の値を
表示し、例外要因としてデータバスアクセスエラー(例
えば、バスエラー等)であったことを表示する。 以上の様に同様に実行していた2つの命令の一方で例
外が発生しても、本実施例によれば、例外発生時の命令
アドレス、及び、その処理状態を保存しておくことがで
きる。 また、以上のように本実施例では、第1命令レジスタ
641及び第2命令レジスタ642の2つの命令のアドレスを
1つのレジスタ702に保持できるので、第1命令レジス
タ641及び第2命令レジスタ642の2つの命令のアドレス
を別々のレジスタに保持する場合に比べて、レジスタの
節約になる。 以上説明してきた本実施例によれば、各命令のフォー
マットが限定されているため、命令の解読が容易にで
き、命令デコーダを2重に搭載しても、回路規模はそれ
ほど増大することはない。 また、本実施例によれば、イミディエイトデータを操
作する命令のOPコードはレジスタを操作する命令のOPコ
ードと左端の1ビットだけが違うだけなので、演算器の
制御信号などの生成するための命令解読がどちらの命令
でも共通化でき命令デコーダの簡略化が可能である。 また、イミディエイトデータを操作するか否かはOPコ
ードの左端の1ビットだけ判断できるので、イミディエ
イトデータ生成回路の制御信号などの生成するための命
令デコーダの簡略化が可能である。 [発明の効果] 以上述べてきたように本発明によれば、命令の前後の
依存関係を考慮しながら、2つの命令を同時に実行する
命令制御方式を容易に実現できる。 従って、ピーク時には従来方式の2倍の処理性能を持
つデータ処理装置を容易に実現することができる。 また、本発明によれば、データ幅の広いバスを用いて
1サイクルでフェッチした2つの命令を同時に実行でき
るので、パイプラインステージ間の負荷に均一にでき、
ハードウエア回路の有効利用が可能になる。 特に、本発明によれば、並列に命令を実行する命令実
行回路において、各命令実行回路毎に実行する命令の種
類を限定しているので、それぞれの命令実行回路の回路
規模を小さくすることができる。 また、本実施例では、分岐命令の次にある命令が分岐
命令と同時に実行できる場合には、分岐命令と同時に実
行してしまい、ディレイスロットでは他の命令の同時実
行を抑止しているので、従来のプログラムをそのまま実
行しても、悪影響を与えることなく、互換性を維持する
ことができる。
【図面の簡単な説明】
第1図は本発明の一実施例であるデータ・プロセッサの
システム構成を示すブロック図、 第2図は第1図のデータ・プロセッサのための命令フォ
ーマットを示す図、 第3図は第1図のデータ・プロセッサにおいて2つの命
令を同時に実行した時の命令制御方式を示す図、 第4図は第1図のデータ・プロセッサのパイプライン処
理の様子を示す図、 第5図は第1図のデータ・プロセッサの命令コードの割
り付けを示す図、 第6図は第1図のデータ・プロセッサにおいて命令をシ
リアルに実行する時の命令制御方式を示す図、 第7図は第1図のデータ・プロセッサにおいて2つの命
令を同時に実行している時に例外が発生したときの処理
方式を示す図である。 610:プロセッサ、620:プログラムメモリ、630:データメ
モリ、640:プリフェッチバッファ、641、642:命令レジ
スタ、644、645:命令デコーダ、650:レジスタファイ
ル、651、652:演算器、131、132、133、134:レジスタ番
号比較器、701、702、703:命令アドレスレジスタ。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 下東 勝博 東京都国分寺市東恋ケ窪1丁目280番地 株式会社日立製作所中央研究所内 (58)調査した分野(Int.Cl.6,DB名) G06F 9/38

Claims (9)

    (57)【特許請求の範囲】
  1. 【請求項1】分岐命令に続く第1命令および第2命令を
    並列に実行でき、該第1命令はディレイスロット命令で
    あるデータプロセッサであって、 デスティネーションフィールドを含む第1ディレイスロ
    ット命令と、ソースフィールドを含む該第1ディレイス
    ロット命令に続く第2命令とを、メモリからフェッチ
    し、該第1ディレイスロット命令と該第2命令とを並列
    に出力する命令フェッチユニットと、 該命令フェッチユニットから出力された該第1ディレイ
    スロット命令が供給され、該第1ディレイスロット命令
    をデコードし、デコードされた第1結果を出力する第1
    命令デコーダと、 該命令フェッチユニットから出力された該第2命令が供
    給され、該第2命令をデコードし、デコードされた第2
    結果を出力する第2命令デコーダと、 該第1命令デコーダのデコード結果である該第1結果に
    従って制御される第1命令実行ユニットと、 該第2命令デコーダのデコード結果である該第2結果に
    従って制御される第2命令実行ユニットと、 該命令フェッチユニットから出力された該第1ディレイ
    スロット命令のデスティネーションフィールドのデータ
    と該命令フェッチユニットから出力された該第2命令の
    ソースフィールドのデータとを比較し、該命令フェッチ
    ユニットから出力された該第1ディレイスロット命令の
    デスティネーションフィールドのデータと該命令フェッ
    チユニットから出力された該第2命令のソースフィール
    ドのデータとが一致した場合に、出力を発生する比較器
    と、 および、 該第1命令デコーダと、該第2命令デコーダと、該第1
    命令実行ユニットと、該第2命令実行ユニットと、およ
    び、該比較器とに接続され、該分岐命令の成立に応じて
    並列演算禁止信号を発生し、 該分岐命令が成立した場合に、該第2命令実行ユニット
    の該第2命令の実行を禁止するために該第2命令デコー
    ダの該第2命令のデコード結果を無効にし、 該分岐命令が不成立で、また、該比較器からの該出力が
    無い場合に、該並列実行禁止信号が無いことに従って、
    該第1命令実行ユニットでの該第1ディレイスロット命
    令と該第2命令実行ユニットの第2命令とを並列実行す
    るために、該第1命令デコーダの該第1ディレイスロッ
    ト命令のデコード結果と該第2命令デコーダの該第2命
    令のデコード結果とを有効にする並列実行制御ユニット
    とを有することを特徴とするデータプロセッサ。
  2. 【請求項2】複数のレジスタを有し、 ここで、該第1ディレイスロット命令のデスティネーシ
    ョンフィールドのデータによって指示されたレジスタが
    該第2命令のソースフィールドのデータによって指示さ
    れたレジスタと一致したとき、該比較器の出力が、該第
    1および第2命令実行ユニットでの該該第1ディレイス
    ロット命令と該第2命令の並列実行を禁止することを特
    徴とする請求項1記載のデータプロセッサ。
  3. 【請求項3】該第1ディレイスロット命令と該第2命令
    の命令長が固定長であり、該データプロセッサが縮小命
    令セットコンピュータであることを特徴とする請求項1
    記載のデータプロセッサ。
  4. 【請求項4】該第1ディレイスロット命令と該第2命令
    の命令長が固定長であり、該データプロセッサが縮小命
    令セットコンピュータであることを特徴とする請求項2
    記載のデータプロセッサ。
  5. 【請求項5】該メモリは、主記憶およびキャッシュメモ
    リであることを特徴とする請求項1記載のデータプロセ
    ッサ。
  6. 【請求項6】該メモリは、主記憶およびキャッシュメモ
    リであることを特徴とする請求項2記載のデータプロセ
    ッサ。
  7. 【請求項7】該メモリは、主記憶およびキャッシュメモ
    リであることを特徴とする請求項3記載のデータプロセ
    ッサ。
  8. 【請求項8】該メモリは、主記憶およびキャッシュメモ
    リであることを特徴とする請求項4記載のデータプロセ
    ッサ。
  9. 【請求項9】該並列演算実行ユニットは、該分岐命令が
    不成立の場合に、該第2命令実行ユニットでの第2命令
    と該第1命令実行ユニットでの該第1命令とを並列に実
    行するために、該第2命令デコーダの第2命令のデコー
    ド結果を有効とする手段を有することを特徴とする請求
    項1記載のデータプロセッサ。
JP2214260A 1990-08-15 1990-08-15 データ・プロセッサ Expired - Lifetime JP2834292B2 (ja)

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
EP91111770A EP0471191B1 (en) 1990-08-15 1991-07-15 Data processor capable of simultaneous execution of two instructions
DE69133571T DE69133571T2 (de) 1990-08-15 1991-07-15 Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen
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 JPH0496825A (ja) 1992-03-30
JP2834292B2 true 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)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
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 信号処理装置
US8583895B2 (en) * 1996-05-15 2013-11-12 Nytell Software LLC Compressed instruction format for use in a VLIW processor
US5826054A (en) * 1996-05-15 1998-10-20 Philips Electronics North America Corporation Compressed Instruction format for use in a VLIW processor
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
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
EP1062577A2 (en) * 1998-12-08 2000-12-27 Koninklijke Philips Electronics N.V. Method of executing an interpreter program
US6351806B1 (en) 1999-10-06 2002-02-26 Cradle Technologies Risc processor using register codes for expanded instruction set
US7039906B1 (en) 2000-09-29 2006-05-02 International Business Machines Corporation Compiler for enabling multiple signed independent data elements per register
US6834337B1 (en) 2000-09-29 2004-12-21 International Business Machines Corporation System and method for enabling multiple signed independent data elements per register
JP3683248B2 (ja) * 2002-10-22 2005-08-17 富士通株式会社 情報処理装置及び情報処理方法
WO2004097625A2 (en) * 2003-04-29 2004-11-11 Koninklijke Philips Electronics N.V. Zero overhead branching and looping in time-stationary processors
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)

* Cited by examiner, † Cited by third party
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 日本電気株式会社 情報処理装置
DE3751503T2 (de) * 1986-03-26 1996-05-09 Hitachi Ltd Datenprozessor in Pipelinestruktur mit der Fähigkeit mehrere Befehle parallel zu dekodieren und auszuführen.
JPS63131230A (ja) * 1986-11-21 1988-06-03 Hitachi Ltd 情報処理装置
JPH0810430B2 (ja) * 1986-11-28 1996-01-31 株式会社日立製作所 情報処理装置
EP0354740B1 (en) * 1988-08-09 1996-06-19 Matsushita Electric Industrial Co., Ltd. Data processing apparatus for performing parallel decoding and parallel execution of a variable word length instruction
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

Also Published As

Publication number Publication date
EP0471191A2 (en) 1992-02-19
KR100254007B1 (ko) 2000-04-15
EP0471191A3 (en) 1992-11-19
US5381531A (en) 1995-01-10
EP0471191B1 (en) 2007-05-23
JPH0496825A (ja) 1992-03-30
KR920004964A (ko) 1992-03-28
KR100254008B1 (ko) 2000-04-15
DE69133571D1 (de) 2007-07-05
KR970005021A (ko) 1997-01-29
DE69133571T2 (de) 2007-09-06

Similar Documents

Publication Publication Date Title
JP2834292B2 (ja) データ・プロセッサ
US5233694A (en) Pipelined data processor capable of performing instruction fetch stages of a plurality of instructions simultaneously
JP2816248B2 (ja) データプロセッサ
CN107003837B (zh) 用于推测性编译器优化的轻量级受限事务存储器
EP0465321B1 (en) Ensuring data integrity in multiprocessor or pipelined processor system
JPH0926878A (ja) データ処理装置
JP2507638B2 (ja) デ―タ処理装置
JPH02240733A (ja) 可変長命令アーキテクチャにおける複数の規制詞の復合方法及び装置
JP3543181B2 (ja) データ処理装置
JPH0810428B2 (ja) データ処理装置
KR100682635B1 (ko) 동일한 논리 공간을 점유하는 다중 레지스터 파일을 포함하는 마이크로프로세서
JP5326314B2 (ja) プロセサおよび情報処理装置
JPH07120278B2 (ja) データ処理装置
JPH07120284B2 (ja) データ処理装置
US5768553A (en) Microprocessor using an instruction field to define DSP instructions
EP1499956B1 (en) Method and apparatus for swapping the contents of address registers
JP2556182B2 (ja) デ−タ処理装置
JPH04109338A (ja) プライオリティエンコーダ及びそれを備えたデータ処理装置
JP3147884B2 (ja) 記憶装置及び情報処理装置
JPH04260928A (ja) データ処理装置
JP3102399B2 (ja) データ処理装置及び方法
JPH0573294A (ja) マイクロプロセツサ
JPH0769805B2 (ja) データ処理装置
JPH07219772A (ja) データキャッシュ機構
JPH0769808B2 (ja) データ処理装置

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