JPH05313888A - 命令バッファ方式 - Google Patents
命令バッファ方式Info
- Publication number
- JPH05313888A JPH05313888A JP11621792A JP11621792A JPH05313888A JP H05313888 A JPH05313888 A JP H05313888A JP 11621792 A JP11621792 A JP 11621792A JP 11621792 A JP11621792 A JP 11621792A JP H05313888 A JPH05313888 A JP H05313888A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- fetch
- write
- pointer
- bytes
- 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.)
- Withdrawn
Links
Landscapes
- Information Transfer Systems (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
(57)【要約】
【目的】 本発明は命令をその実行に先立ってメモリか
らバッファに順次取り出す命令バッファ方式に関し、回
路構成を簡単にして、LSI化した場合に高集積化が可
能であるとともに、高速に動作する命令バッファ方式を
提供することを目的とする。 【構成】 プログラムを記憶するメモリと、該メモリよ
り命令の実行に先立って命令を取り出して格納する命令
バッファとを備え、この命令バッファは命令長の最小長
を単位とする幅を持つレジスタファイルあるいはRAM
を、メモリから一度に命令をフェッチできる幅になるよ
うに並べて構成し、該レジスタファイルあるいはRAM
をライトポインタおよびリードポインタによって制御す
る。
らバッファに順次取り出す命令バッファ方式に関し、回
路構成を簡単にして、LSI化した場合に高集積化が可
能であるとともに、高速に動作する命令バッファ方式を
提供することを目的とする。 【構成】 プログラムを記憶するメモリと、該メモリよ
り命令の実行に先立って命令を取り出して格納する命令
バッファとを備え、この命令バッファは命令長の最小長
を単位とする幅を持つレジスタファイルあるいはRAM
を、メモリから一度に命令をフェッチできる幅になるよ
うに並べて構成し、該レジスタファイルあるいはRAM
をライトポインタおよびリードポインタによって制御す
る。
Description
【0001】
【産業上の利用分野】本発明はプログラム記憶方式の計
算機に係り、特に命令をその実行に先立ってメモリから
バッファに順次取り出す命令バッファ方式に関する。
算機に係り、特に命令をその実行に先立ってメモリから
バッファに順次取り出す命令バッファ方式に関する。
【0002】
【従来の技術】プログラム記憶方式の計算機において
は、そのプログラムの実行に際して、マシン命令をメモ
リより取り出す、すなわち命令フェッチを行う必要があ
る。 この取り出しは命令の実行の直前において取り出
すことも可能であるが、計算機の性能を上げるために
は、これを前もって取り出して命令バッファと呼ばれる
FIFO(first in first out) 方式のバッファに蓄
え、このバッファから順次命令を取り出して実行する命
令バッファ方式なるものが考案されている。従来では、
この命令バッファはフリップフロップ(以下、FFと記
す)からなるシフトレジスタから構成されていた。
は、そのプログラムの実行に際して、マシン命令をメモ
リより取り出す、すなわち命令フェッチを行う必要があ
る。 この取り出しは命令の実行の直前において取り出
すことも可能であるが、計算機の性能を上げるために
は、これを前もって取り出して命令バッファと呼ばれる
FIFO(first in first out) 方式のバッファに蓄
え、このバッファから順次命令を取り出して実行する命
令バッファ方式なるものが考案されている。従来では、
この命令バッファはフリップフロップ(以下、FFと記
す)からなるシフトレジスタから構成されていた。
【0003】従来例として、2バイトを単位としたシフ
トレジスタ構成の命令バッファを以下に示し、各動作に
ついて説明を加える。図10では、命令長が2バイト単
位で、2,4,及び6バイトという値をとる計算機シス
テムで、命令フェッチを一度に2バイトを単位として最
大8バイトを行うことができ、命令バッファの大きさが
16バイトである命令バッファの例を示す。
トレジスタ構成の命令バッファを以下に示し、各動作に
ついて説明を加える。図10では、命令長が2バイト単
位で、2,4,及び6バイトという値をとる計算機シス
テムで、命令フェッチを一度に2バイトを単位として最
大8バイトを行うことができ、命令バッファの大きさが
16バイトである命令バッファの例を示す。
【0004】図10に於いて、100〜107はそれぞ
れ2バイトの幅を持つレジスタ、110〜117はそれ
ぞれレジスタ100〜107の入力セレクタ、110−
x〜117−xはそれぞれセレクタ110〜117の入
力、200はフェッチ回路、300は分岐先フェッチ回
路、400は有効長制御フラグ群、410は有効長更新
回路、500はシフト量制御回路である。
れ2バイトの幅を持つレジスタ、110〜117はそれ
ぞれレジスタ100〜107の入力セレクタ、110−
x〜117−xはそれぞれセレクタ110〜117の入
力、200はフェッチ回路、300は分岐先フェッチ回
路、400は有効長制御フラグ群、410は有効長更新
回路、500はシフト量制御回路である。
【0005】有効長制御フラグ群400は、シフトレジ
スタの内部において、まだ実行されていない命令を保持
しているレジスタを示すフラグ群のことで、2バイト単
位の各レジスタについてそれぞれ有効フラグを設ける場
合や、先頭からどの位置までが有効であるかを示すポイ
ンタとして構成させる場合などが考えられる。ここで
は、ポインタ方式として、その値によって以下の状態を
示すものとする。
スタの内部において、まだ実行されていない命令を保持
しているレジスタを示すフラグ群のことで、2バイト単
位の各レジスタについてそれぞれ有効フラグを設ける場
合や、先頭からどの位置までが有効であるかを示すポイ
ンタとして構成させる場合などが考えられる。ここで
は、ポインタ方式として、その値によって以下の状態を
示すものとする。
【0006】
【表1】
【0007】表1から分かるように、ポインタ(有効長
制御フラグ400)が0−−−(−はdon't careを表し
ている)なら、レジスタ100〜107の内容は全部無
効である。有効長制御フラグ400が1001なら、レ
ジスタ100の内容だけ有効であり、即ち命令バッファ
の有効長が2バイトである。また、有効長制御フラグ4
00が1010なら、レジスタ100とレジスタ101
の内容は有効であり、ほかのレジスタの内容は無効であ
り、即ち命令バッファの有効長が4バイトである。
制御フラグ400)が0−−−(−はdon't careを表し
ている)なら、レジスタ100〜107の内容は全部無
効である。有効長制御フラグ400が1001なら、レ
ジスタ100の内容だけ有効であり、即ち命令バッファ
の有効長が2バイトである。また、有効長制御フラグ4
00が1010なら、レジスタ100とレジスタ101
の内容は有効であり、ほかのレジスタの内容は無効であ
り、即ち命令バッファの有効長が4バイトである。
【0008】命令フェッチはフェッチ回路200によっ
て行われ、フェッチ量(フェッチされた命令のバイト
数)が信号502によってシフト量制御回路500、及
び有効長更新回路410に送られる。シフト量制御回路
500は、信号502の値、及び有効長フラグ群400
の値によって以下の表2のように入力セレクタ110〜
117を制御する。但し、命令バッファの容量(ここで
は16バイト)を超えるような命令フェッチは発生しな
いものとする。
て行われ、フェッチ量(フェッチされた命令のバイト
数)が信号502によってシフト量制御回路500、及
び有効長更新回路410に送られる。シフト量制御回路
500は、信号502の値、及び有効長フラグ群400
の値によって以下の表2のように入力セレクタ110〜
117を制御する。但し、命令バッファの容量(ここで
は16バイト)を超えるような命令フェッチは発生しな
いものとする。
【0009】
【表2】
【0010】表2から分かるように、ポインタ(有効長
制御フラグ400)が0−−−で、フェッチ量信号50
2が2バイトなら、レジスタ100のセレクタ入力11
0−1を選択し、しかもフェッチ後のポインタの値が0
−−−から1001にセットされる。もしポインタが0
−−−で、かつフェッチ量信号502が4バイトなら、
レジスタ100のセレクタ入力110−1とレジスタ1
01のセレクタ入力111−2を選択し、しかもフェッ
チ後のポインタの値が0−−−から1010にセットさ
れる。もしポインタは1001で、かつフェッチ量信号
502は2バイトなら、レジスタ101のセレクタ入力
111−1を選択し、しかも、フェッチ後のポインタの
値が1001から1010にセットされる。
制御フラグ400)が0−−−で、フェッチ量信号50
2が2バイトなら、レジスタ100のセレクタ入力11
0−1を選択し、しかもフェッチ後のポインタの値が0
−−−から1001にセットされる。もしポインタが0
−−−で、かつフェッチ量信号502が4バイトなら、
レジスタ100のセレクタ入力110−1とレジスタ1
01のセレクタ入力111−2を選択し、しかもフェッ
チ後のポインタの値が0−−−から1010にセットさ
れる。もしポインタは1001で、かつフェッチ量信号
502は2バイトなら、レジスタ101のセレクタ入力
111−1を選択し、しかも、フェッチ後のポインタの
値が1001から1010にセットされる。
【0011】そして、命令が実行される場合には、命令
長に応じて命令バッファを構成するレジスタ100〜1
07から命令を読み出して実行する。実行される命令の
命令長は信号501によってシフト量制御回路500、
及び有効長更新回路410に送られる。同時に他の命令
に対応するレジスタの値が順次にこの実行されている命
令長と同じ単位でシフトされる。
長に応じて命令バッファを構成するレジスタ100〜1
07から命令を読み出して実行する。実行される命令の
命令長は信号501によってシフト量制御回路500、
及び有効長更新回路410に送られる。同時に他の命令
に対応するレジスタの値が順次にこの実行されている命
令長と同じ単位でシフトされる。
【0012】シフト量制御回路500は、信号501の
値によって以下の表3のように、入力セレクタ110〜
117を制御する。表3から分かるように、実行命令の
命令長を示す信号501は2バイトなら、この命令が実
行されてから、レジスタ100のセレクタ入力110−
5、レジスタ101のセレクタ入力111−5、レジス
タ102のセレクタ入力112−5、レジスタ103の
セレクタ入力113−5・・・レジスタ106の入力セ
レクタ116−5を選択し、また、ポインタの値がこの
命令を実行する前のポインタの値から1を減らしてセッ
トされる。即ち、レジスタ101の内容をレジスタ10
0へ移動し、レジスタ102の内容をレジスタ101へ
移動し、ポインタの値がこの命令を実行する前のポイン
タの値から1減らしてセットされる。実行命令の命令長
を示す信号501が4バイトなら、レジスタ102の内
容をレジスタ101へ移動し、レジスタ103の内容レ
ジスタ101へ移動し、レジスタ104の内容をレジス
タ102へ移動し、しかも、ポインタの値がこの命令を
実行する前のポインタの値から2を減らしてセットされ
る。このポインタの減算原理は表4に示されている。例
えば、ポインタが1001なら、減算後のポインタ値が
0000になる。但し、命令バッファ内の有効命令長が
実行されるべき命令の命令長に満たない場合には命令の
実行は開始されないものとする。すなわちこの命令の一
部分だけが命令バッファに記憶されているので、この命
令を実行することができない。従って、この命令を再度
メモリからフェッチしなければならない。
値によって以下の表3のように、入力セレクタ110〜
117を制御する。表3から分かるように、実行命令の
命令長を示す信号501は2バイトなら、この命令が実
行されてから、レジスタ100のセレクタ入力110−
5、レジスタ101のセレクタ入力111−5、レジス
タ102のセレクタ入力112−5、レジスタ103の
セレクタ入力113−5・・・レジスタ106の入力セ
レクタ116−5を選択し、また、ポインタの値がこの
命令を実行する前のポインタの値から1を減らしてセッ
トされる。即ち、レジスタ101の内容をレジスタ10
0へ移動し、レジスタ102の内容をレジスタ101へ
移動し、ポインタの値がこの命令を実行する前のポイン
タの値から1減らしてセットされる。実行命令の命令長
を示す信号501が4バイトなら、レジスタ102の内
容をレジスタ101へ移動し、レジスタ103の内容レ
ジスタ101へ移動し、レジスタ104の内容をレジス
タ102へ移動し、しかも、ポインタの値がこの命令を
実行する前のポインタの値から2を減らしてセットされ
る。このポインタの減算原理は表4に示されている。例
えば、ポインタが1001なら、減算後のポインタ値が
0000になる。但し、命令バッファ内の有効命令長が
実行されるべき命令の命令長に満たない場合には命令の
実行は開始されないものとする。すなわちこの命令の一
部分だけが命令バッファに記憶されているので、この命
令を実行することができない。従って、この命令を再度
メモリからフェッチしなければならない。
【0013】
【表3】
【0014】
【表4】
【0015】実際には命令フェッチと命令の実行開始は
同時に行われる、すなわち、命令を実行しながら、メモ
リから命令を命令バッファへフェッチすることが多く、
実行される命令の命令長とフェッチ量によって表5〜表
8のような制御が行われる。尚、どちらか一方のみが行
われるケースは前述の表2に示した通りである。即ち、
表5〜表8は命令を実行しながら、メモリから命令を命
令バッファへフェッチする場合に実行される命令長と信
号501とフェッチ量502信号によって、ポインタ4
00と各レジスタのセレクタ入力を制御する関係を示し
ている。例えば、ポインタの値が1001であり、実行
命令長信号501は2バイトであり、フェッチ量信号5
02は2バイトである場合には、レジスタ100のセレ
クタ入力110−1を選択し、また、更新後のポインタ
の値は1001となる。
同時に行われる、すなわち、命令を実行しながら、メモ
リから命令を命令バッファへフェッチすることが多く、
実行される命令の命令長とフェッチ量によって表5〜表
8のような制御が行われる。尚、どちらか一方のみが行
われるケースは前述の表2に示した通りである。即ち、
表5〜表8は命令を実行しながら、メモリから命令を命
令バッファへフェッチする場合に実行される命令長と信
号501とフェッチ量502信号によって、ポインタ4
00と各レジスタのセレクタ入力を制御する関係を示し
ている。例えば、ポインタの値が1001であり、実行
命令長信号501は2バイトであり、フェッチ量信号5
02は2バイトである場合には、レジスタ100のセレ
クタ入力110−1を選択し、また、更新後のポインタ
の値は1001となる。
【0016】
【表5】
【0017】
【表6】
【0018】
【表7】
【0019】
【表8】
【0020】次に、分岐先命令のフェッチについて説明
する。分岐命令の実行において、分岐が成立した場合に
は、分岐先命令を命令バッファに取り込む必要がある
が、ここではその分岐先命令は、分岐先フェッチ回路3
00でフェッチされるものとする。
する。分岐命令の実行において、分岐が成立した場合に
は、分岐先命令を命令バッファに取り込む必要がある
が、ここではその分岐先命令は、分岐先フェッチ回路3
00でフェッチされるものとする。
【0021】この分岐先フェッチ回路300はそのフェ
ッチ量を信号503によってシフト量制御回路500、
及び有効長更新回路410に送る。以下の表9には、こ
の分岐先フェッチ量信号530が選択されるセレクタ入
力110−t,111−tと112−tやフェッチ後の
ポインタの値との関係を示している。ここでは、分岐先
命令が命令バッファにある前提とする。分岐先命令を命
令バッファに取り込むのは分岐が成立した場合のみに限
られるため、図示しない分岐判定回路からの分岐判定結
果信号700がシフト量制御回路500及び有効長更新
回路410に送られる。表5から分かるように、分岐先
フェッチ量信号503は2バイトなら、レジスタ100
のセレクタ入力110−tを選択し、フェッチ後のポイ
ンタの値が1001となる。分岐先フェッチ信号503
は4バイトなら、レジスタ100のセレクタ入力110
−tとレジスタ101のセレクタ入力111−tを選択
し、フェッチ後のポインタの値が1010となる。
ッチ量を信号503によってシフト量制御回路500、
及び有効長更新回路410に送る。以下の表9には、こ
の分岐先フェッチ量信号530が選択されるセレクタ入
力110−t,111−tと112−tやフェッチ後の
ポインタの値との関係を示している。ここでは、分岐先
命令が命令バッファにある前提とする。分岐先命令を命
令バッファに取り込むのは分岐が成立した場合のみに限
られるため、図示しない分岐判定回路からの分岐判定結
果信号700がシフト量制御回路500及び有効長更新
回路410に送られる。表5から分かるように、分岐先
フェッチ量信号503は2バイトなら、レジスタ100
のセレクタ入力110−tを選択し、フェッチ後のポイ
ンタの値が1001となる。分岐先フェッチ信号503
は4バイトなら、レジスタ100のセレクタ入力110
−tとレジスタ101のセレクタ入力111−tを選択
し、フェッチ後のポインタの値が1010となる。
【0022】
【表9】
【0023】分岐先命令の構成方法によっては分岐先命
令もフェッチ回路200からフェッチされるケース、即
ち、分岐先命令が命令バッファにないケースもあるが、
その場合、分岐成立によってそれまでの命令バッファ内
の値を無効(つまり、有効長フラグ群400の値を“0
・・・・”)とみなして命令フェッチのケースと同じに
セレクタとポインタを制御すればよい。
令もフェッチ回路200からフェッチされるケース、即
ち、分岐先命令が命令バッファにないケースもあるが、
その場合、分岐成立によってそれまでの命令バッファ内
の値を無効(つまり、有効長フラグ群400の値を“0
・・・・”)とみなして命令フェッチのケースと同じに
セレクタとポインタを制御すればよい。
【0024】
【発明が解決しようとする課題】上記の従来の命令バッ
ファにおいては、次のような問題を有する。 問題(1) バッファの容量は、命令実行速度(命令の実行が開始さ
れる速度)にもよるが、適度に大きいことが望ましい。
しかし、最近のLSIによっても回路規模は小さいこと
が望ましい。すなわち、回路規模と容量のトレードオフ
を決定することが重要である。しかし、上記の従来の命
令バッファはFF(フリップフロップ)からなるので、
動作の速度は速いが、回路の規模が大きくなる。 問題(2) 命令長が固定でない計算機の場合には、バッファ内のシ
フト量も固定でなくなるため、FIFOレジスタの構成
が複雑になる。例えば図10に示すように、このFIF
Oを構成するために、いくつかのセレクタが使われる。
また、FF間に沢山の配線を必要とする。
ファにおいては、次のような問題を有する。 問題(1) バッファの容量は、命令実行速度(命令の実行が開始さ
れる速度)にもよるが、適度に大きいことが望ましい。
しかし、最近のLSIによっても回路規模は小さいこと
が望ましい。すなわち、回路規模と容量のトレードオフ
を決定することが重要である。しかし、上記の従来の命
令バッファはFF(フリップフロップ)からなるので、
動作の速度は速いが、回路の規模が大きくなる。 問題(2) 命令長が固定でない計算機の場合には、バッファ内のシ
フト量も固定でなくなるため、FIFOレジスタの構成
が複雑になる。例えば図10に示すように、このFIF
Oを構成するために、いくつかのセレクタが使われる。
また、FF間に沢山の配線を必要とする。
【0025】本発明は、回路構成を簡単にして、LSI
化した場合に高集積化が可能であるとともに、高速に動
作する命令バッファ方式を提供することを目的とする。
化した場合に高集積化が可能であるとともに、高速に動
作する命令バッファ方式を提供することを目的とする。
【0026】
【課題を解決するための手段及び作用】本発明は上記の
問題点を解決するために、FFに代わり、レジスタファ
イルまたはRAMを使って命令バッファを構成する。こ
のレジスタファイルまたはRAMへ命令を書き込むか又
はレジスタファイルまたはRAMから命令を読み出すた
めに、ライトポインタとリードポインタをセットする。
これらのポインタがあるので、従来のようなFFのシフ
ト動作が不要となる。従って、回路の規模が小さくな
る。また、これらのポインタを利用すれば、分岐命令に
ついての処理も容易にできる。レジスタファイルやRA
MはFFに比べて読み出し速度が遅いので、本発明によ
る命令バッファ方式では、次に実行しようとする命令の
一部または全部をFFで記憶する。
問題点を解決するために、FFに代わり、レジスタファ
イルまたはRAMを使って命令バッファを構成する。こ
のレジスタファイルまたはRAMへ命令を書き込むか又
はレジスタファイルまたはRAMから命令を読み出すた
めに、ライトポインタとリードポインタをセットする。
これらのポインタがあるので、従来のようなFFのシフ
ト動作が不要となる。従って、回路の規模が小さくな
る。また、これらのポインタを利用すれば、分岐命令に
ついての処理も容易にできる。レジスタファイルやRA
MはFFに比べて読み出し速度が遅いので、本発明によ
る命令バッファ方式では、次に実行しようとする命令の
一部または全部をFFで記憶する。
【0027】本発明はレジスタファイルやRAMが、通
常のゲートやFF(Flip-Flop)に比べて高集積であるこ
とを利用するものである。本発明の命令バッファがライ
ト側、リード側の両方を満足させる幅を持つようにレジ
スタファイル(あるいはRAM)を並べて構成される。
ライト側では、命令長の最小長を単位とする幅を持つレ
ジスタファイル(あるいはRAM)を、メモリ装置から
一度にフェッチできる幅になるように並べる。例えば
2,4,6バイト長の命令を持つシステムにおいては、
2バイトを単位とし、一度にフェッチできる幅が8バイ
トであれば、最低4個のレジスタファイル(あるいはR
AM)を並べる。
常のゲートやFF(Flip-Flop)に比べて高集積であるこ
とを利用するものである。本発明の命令バッファがライ
ト側、リード側の両方を満足させる幅を持つようにレジ
スタファイル(あるいはRAM)を並べて構成される。
ライト側では、命令長の最小長を単位とする幅を持つレ
ジスタファイル(あるいはRAM)を、メモリ装置から
一度にフェッチできる幅になるように並べる。例えば
2,4,6バイト長の命令を持つシステムにおいては、
2バイトを単位とし、一度にフェッチできる幅が8バイ
トであれば、最低4個のレジスタファイル(あるいはR
AM)を並べる。
【0028】リード側では、最大命令長の命令が一度に
読み出させる幅を持つようにレジスタファイル(あるい
はRAM)を並べる。例えば2,4,6バイト長の命令
を持つシステムにおいて、2バイトを単位とした場合に
は、最低3個のレジスタファイル(あるいはRAM)を
並べる必要がある。
読み出させる幅を持つようにレジスタファイル(あるい
はRAM)を並べる。例えば2,4,6バイト長の命令
を持つシステムにおいて、2バイトを単位とした場合に
は、最低3個のレジスタファイル(あるいはRAM)を
並べる必要がある。
【0029】各レジスタファイル(あるいはRAM)の
容量は、要求される命令バッファの容量として、使用す
るレジスタファイル(あるいはRAM)の個数と幅で除
した数より大きい(2の累乗算の)ワード数を選ぶ。 (例) 要求される命令バッファ容量 :30バイト 使用するレジスタファイル(RAM)の数:4個 使用するレジスタファイル(RAM)の幅:2バイト 30/4/2=3.75→4ワード ポインタとして、ライト側およびリード側にレジスタを
設けるが、そのビット幅は命令バッファの総容量をレジ
スタファイル(あるいはRAM)の幅で除した値をその
組み合わせで表わし得るビット数とする。 (例) 前記の幅2バイト、ワード数4ワード、個数4で構成さ
れる例の場合、 総容量は、2バイト×4ワード×4コ=32バイト log2(32/2)≦4 よって4ビット幅となる。
容量は、要求される命令バッファの容量として、使用す
るレジスタファイル(あるいはRAM)の個数と幅で除
した数より大きい(2の累乗算の)ワード数を選ぶ。 (例) 要求される命令バッファ容量 :30バイト 使用するレジスタファイル(RAM)の数:4個 使用するレジスタファイル(RAM)の幅:2バイト 30/4/2=3.75→4ワード ポインタとして、ライト側およびリード側にレジスタを
設けるが、そのビット幅は命令バッファの総容量をレジ
スタファイル(あるいはRAM)の幅で除した値をその
組み合わせで表わし得るビット数とする。 (例) 前記の幅2バイト、ワード数4ワード、個数4で構成さ
れる例の場合、 総容量は、2バイト×4ワード×4コ=32バイト log2(32/2)≦4 よって4ビット幅となる。
【0030】ライトポインタは、次の命令フェッチで書
き込みを行う先頭位置を示すものである。メモリ装置か
らの転送指示に従って、そのフェッチ量を使用するレジ
スタファイル(あるいはRAM)の幅で除した数だけ更
新する。
き込みを行う先頭位置を示すものである。メモリ装置か
らの転送指示に従って、そのフェッチ量を使用するレジ
スタファイル(あるいはRAM)の幅で除した数だけ更
新する。
【0031】リードポインタは、次に実行すべき命令の
先頭位置を示すものである。命令実行制御装置からの命
令実行開始指示に従って、実行が開始された命令の長さ
を使用するレジスタファイル(あるいはRAM)の幅で
除した数だけ更新する。
先頭位置を示すものである。命令実行制御装置からの命
令実行開始指示に従って、実行が開始された命令の長さ
を使用するレジスタファイル(あるいはRAM)の幅で
除した数だけ更新する。
【0032】ライトポインタの値からリードポインタの
値を減じたものが、命令バッファ内の有効な命令列の長
さとなるが、これでは、両方のポインタが同じ値を指し
たときに、それが全てが有効であることを示すのか、全
てが無効であることを示すのか、判定できない。
値を減じたものが、命令バッファ内の有効な命令列の長
さとなるが、これでは、両方のポインタが同じ値を指し
たときに、それが全てが有効であることを示すのか、全
てが無効であることを示すのか、判定できない。
【0033】そこで命令バッファ内にフェッチされた有
効な命令が存在することを示す有効フラグを設ける(も
ちろん、命令バッファ内に命令が一杯になったことを示
すフラグを用意してもよい)。
効な命令が存在することを示す有効フラグを設ける(も
ちろん、命令バッファ内に命令が一杯になったことを示
すフラグを用意してもよい)。
【0034】次に、ライトアライン及びリードアライン
について説明する。命令バッファ方式では、フェッチデ
ータは複数のレジスタファイル(あるいはRAM)に分
割して同時にライトする必要がある。フェッチ回路から
送られてくるフェッチデータのバイト位置とライトすべ
きレジスタファイル(あるいRAM)が常に一致するの
は以下の場合のみである。
について説明する。命令バッファ方式では、フェッチデ
ータは複数のレジスタファイル(あるいはRAM)に分
割して同時にライトする必要がある。フェッチ回路から
送られてくるフェッチデータのバイト位置とライトすべ
きレジスタファイル(あるいRAM)が常に一致するの
は以下の場合のみである。
【0035】つまり、フェッチ量が常に一定で、かつ、
その幅がこの命令バッファ方式を構成するレジスタファ
イル(あるいはRAM)の合計の書き込み幅(2バイト
幅のレジスタファイル(あるいはRAMを4個並べた場
合には8バイト)と同じ場合である。
その幅がこの命令バッファ方式を構成するレジスタファ
イル(あるいはRAM)の合計の書き込み幅(2バイト
幅のレジスタファイル(あるいはRAMを4個並べた場
合には8バイト)と同じ場合である。
【0036】この場合以外ではフェッチデータのバイト
位置とライトすべきレジスタファイル(あるいはRA
M)は一致しない。例えば、2バイト幅のレジスタファ
イル(あるいはRAM)をA,B,C,及びDの4個並
べた構成の場合、最初に2バイトのフェッチが行われる
と、この2バイトがAのレジスタファイル(あるいはR
AM)にライトし、続いて4バイトのフェッチが行われ
ると、その最初の2バイトがBのレジスタファイル(あ
るいはRAM)に、後半の2バイトはCのレジスタファ
イル(あるいはRAM)にそれぞれライトする必要があ
る。
位置とライトすべきレジスタファイル(あるいはRA
M)は一致しない。例えば、2バイト幅のレジスタファ
イル(あるいはRAM)をA,B,C,及びDの4個並
べた構成の場合、最初に2バイトのフェッチが行われる
と、この2バイトがAのレジスタファイル(あるいはR
AM)にライトし、続いて4バイトのフェッチが行われ
ると、その最初の2バイトがBのレジスタファイル(あ
るいはRAM)に、後半の2バイトはCのレジスタファ
イル(あるいはRAM)にそれぞれライトする必要があ
る。
【0037】また、続いて4バイトのフェッチが行われ
ると、その最初の2バイトが今度はDのレジスタファイ
ル(あるいはRAM)にまた後半の2バイトはAのレジ
スタファイル(あるいはRAM)にそれぞれライトする
必要がある。
ると、その最初の2バイトが今度はDのレジスタファイ
ル(あるいはRAM)にまた後半の2バイトはAのレジ
スタファイル(あるいはRAM)にそれぞれライトする
必要がある。
【0038】このため、フェッチ回路からのフェッチデ
ータを、そのときのライトポインタの値によって並べ替
える回路すなわちライトアラインを設けることとする。
この命令バッファ方式では、レジスタファイル(あるい
はRAM)からの命令の取り出しはリードポインタの値
によって取り出すべきレジスタファイル(あるいはRA
M)とそれらのアドレスを指示するとともに、取り出さ
れたデータを正しい順番に並び替えて命令制御装置へ送
る必要がある。この並び替えの回路をリードアラインと
呼ぶことにする。
ータを、そのときのライトポインタの値によって並べ替
える回路すなわちライトアラインを設けることとする。
この命令バッファ方式では、レジスタファイル(あるい
はRAM)からの命令の取り出しはリードポインタの値
によって取り出すべきレジスタファイル(あるいはRA
M)とそれらのアドレスを指示するとともに、取り出さ
れたデータを正しい順番に並び替えて命令制御装置へ送
る必要がある。この並び替えの回路をリードアラインと
呼ぶことにする。
【0039】リード側の並び替えが必要な理由は以下の
ような場合で説明できる。2バイト幅のレジスタファイ
ル(あるいはRAM)をA,B,C及びDの4個並べた
構成の場合、最初にAからの2バイト命令を実行したと
すると、次の命令はBから開始されることになり、ここ
で4バイト命令が実行される場合には、その命令の最初
の2バイトはBから、次の2バイトはCから取り出す必
要がある。また、その次に4バイト命令が実行されるな
らば、その最初の2バイトはDから、次の2バイトはA
から取り出す必要がある。
ような場合で説明できる。2バイト幅のレジスタファイ
ル(あるいはRAM)をA,B,C及びDの4個並べた
構成の場合、最初にAからの2バイト命令を実行したと
すると、次の命令はBから開始されることになり、ここ
で4バイト命令が実行される場合には、その命令の最初
の2バイトはBから、次の2バイトはCから取り出す必
要がある。また、その次に4バイト命令が実行されるな
らば、その最初の2バイトはDから、次の2バイトはA
から取り出す必要がある。
【0040】このように実行される命令が取り出される
レジスタファイル(あるいはRAM)は毎回違うことに
なる。従って、リード側にも、並び替えが必要となる。
命令バッファから命令を取り出す場合には、通常デコー
ドサイクルと呼ばれ、このサイクルにおいてアドレス計
算用の汎用レジスタの読み出しや、マイクロ計算機にお
いてはマイクロ命令の読み出しなど、数多くの処理を行
う必要があるサイクルであり、命令バッファからの命令
取り出し速度によって、マシンサイクルを決定すること
にもなりかねない。しかしながら、一般にレジスタファ
イルやRAMはFFに比べて読み出し速度が遅い。従っ
て、単純にFFに代わりにRAMまたはレジスタファイ
ルを使うと、命令を命令バッファから読み出す速度が遅
くになってしまう。本発明では、実行が開始される命令
の一部または全部をレジスタファイル(あるいはRA
M)ではなく、FF(Flip-Flop)に保持する構成とす
る。これはFF((Flip-Flop)の読み出しがレジスタフ
ァイルやRAMに比べて高速であることを利用するもの
である。
レジスタファイル(あるいはRAM)は毎回違うことに
なる。従って、リード側にも、並び替えが必要となる。
命令バッファから命令を取り出す場合には、通常デコー
ドサイクルと呼ばれ、このサイクルにおいてアドレス計
算用の汎用レジスタの読み出しや、マイクロ計算機にお
いてはマイクロ命令の読み出しなど、数多くの処理を行
う必要があるサイクルであり、命令バッファからの命令
取り出し速度によって、マシンサイクルを決定すること
にもなりかねない。しかしながら、一般にレジスタファ
イルやRAMはFFに比べて読み出し速度が遅い。従っ
て、単純にFFに代わりにRAMまたはレジスタファイ
ルを使うと、命令を命令バッファから読み出す速度が遅
くになってしまう。本発明では、実行が開始される命令
の一部または全部をレジスタファイル(あるいはRA
M)ではなく、FF(Flip-Flop)に保持する構成とす
る。これはFF((Flip-Flop)の読み出しがレジスタフ
ァイルやRAMに比べて高速であることを利用するもの
である。
【0041】高速化が必要な部分をFFとし、命令の実
行開始サイクルの直前に命令バッファ内よりその部分を
セットする。また、レジスタファイル(あるいはRA
M)で構成された命令バッファのリード側を上記のFF
化の必要な幅だけ余計にリードできるように構成する。
行開始サイクルの直前に命令バッファ内よりその部分を
セットする。また、レジスタファイル(あるいはRA
M)で構成された命令バッファのリード側を上記のFF
化の必要な幅だけ余計にリードできるように構成する。
【0042】FFの容量は、例えば、命令コードの先頭
の1バイトのみを高速化すればよいケースでは、その1
バイトとなる。命令バッファが空の場合、あるいは分岐
先命令のフェッチの場合には、命令バッファへのフェッ
チ時に、最初の命令の該当する部分のフェッチデータを
FFにセットする。命令バッファに命令が詰まっている
場合には、命令が開始されたときに、その次の命令の該
当する部分を前述のリード側に設けた部分からFFにセ
ットする。
の1バイトのみを高速化すればよいケースでは、その1
バイトとなる。命令バッファが空の場合、あるいは分岐
先命令のフェッチの場合には、命令バッファへのフェッ
チ時に、最初の命令の該当する部分のフェッチデータを
FFにセットする。命令バッファに命令が詰まっている
場合には、命令が開始されたときに、その次の命令の該
当する部分を前述のリード側に設けた部分からFFにセ
ットする。
【0043】命令バッファから読み出し制御を行うため
には、レジスタファイル(あるいはRAM)で構成され
た命令バッファのリード側は、前述の最大命令長によっ
て決定した読み出し幅をこのFFで構成する部分の長さ
に合わせるように拡張される。
には、レジスタファイル(あるいはRAM)で構成され
た命令バッファのリード側は、前述の最大命令長によっ
て決定した読み出し幅をこのFFで構成する部分の長さ
に合わせるように拡張される。
【0044】例えば、前述の例によって1バイト幅のレ
ジスタファイル(あるいはRAM)を3個並べた場合
に、1バイトのFF化が必要なケースではもう1つのレ
ジスタファイル(あるいはRAM)を追加し、また、3
バイトのFF化が必要なケースではもう2つのレジスタ
ファイル(あるいはRAM)を追加する。
ジスタファイル(あるいはRAM)を3個並べた場合
に、1バイトのFF化が必要なケースではもう1つのレ
ジスタファイル(あるいはRAM)を追加し、また、3
バイトのFF化が必要なケースではもう2つのレジスタ
ファイル(あるいはRAM)を追加する。
【0045】また、本発明によって、ライトポインタと
リードポインタを用いることに応じて、新たな分岐先命
令のフェッチの手法を用いた。すなわち、通常の命令先
取りのためのフェッチ手段からのフェッチと分岐先命令
列のフェッチ手段からのフェッチを選択して命令バッフ
ァに格納する手段を設け、ライトポインタ/リードポイ
ンタ/有効フラグを分岐判定動作に加味したものとす
る。例えば、分岐判定サイクルと分岐先命令列のフェッ
チが同じサイクルなどの場合、その分岐判定が成立する
場合には分岐先命令列のフェッチ手段からのフェッチデ
ータを命令バッファに登録するが、その際のライトアド
レスを0番地からにし、リードポインタをそのアドレス
にセットし、ライトポインタはフェッチ量を加算したも
のとすることで、直前まで命令バッファ内に存在してい
た命令列をキャンセルする。
リードポインタを用いることに応じて、新たな分岐先命
令のフェッチの手法を用いた。すなわち、通常の命令先
取りのためのフェッチ手段からのフェッチと分岐先命令
列のフェッチ手段からのフェッチを選択して命令バッフ
ァに格納する手段を設け、ライトポインタ/リードポイ
ンタ/有効フラグを分岐判定動作に加味したものとす
る。例えば、分岐判定サイクルと分岐先命令列のフェッ
チが同じサイクルなどの場合、その分岐判定が成立する
場合には分岐先命令列のフェッチ手段からのフェッチデ
ータを命令バッファに登録するが、その際のライトアド
レスを0番地からにし、リードポインタをそのアドレス
にセットし、ライトポインタはフェッチ量を加算したも
のとすることで、直前まで命令バッファ内に存在してい
た命令列をキャンセルする。
【0046】
【実施例1】 (命令バッファの幅がフェッチ量に等しい幅を持つケー
スの実施例)図1は、命令長の最小単位が2バイト、一
度にフェッチできる幅が8バイト、最大命令長が6バイ
ト、高速化のために命令の先頭の1バイトをFFで構成
する命令バッファの実施例を示す。
スの実施例)図1は、命令長の最小単位が2バイト、一
度にフェッチできる幅が8バイト、最大命令長が6バイ
ト、高速化のために命令の先頭の1バイトをFFで構成
する命令バッファの実施例を示す。
【0047】ライト側の条件としては、2バイト幅のレ
ジスタファイル600,610,620,630(ある
いはRAM:以下これをRFと表記する。)を8バイト
幅になるように4個以上並べる必要がある。
ジスタファイル600,610,620,630(ある
いはRAM:以下これをRFと表記する。)を8バイト
幅になるように4個以上並べる必要がある。
【0048】リード側の条件としては、2バイトを単位
とすると、最大命令長の6バイトと、次の命令のための
1バイトを同時に読み出せるように4個以上のRF60
0,610,620,630を並べる必要がある。
とすると、最大命令長の6バイトと、次の命令のための
1バイトを同時に読み出せるように4個以上のRF60
0,610,620,630を並べる必要がある。
【0049】容量としては、ライト/リード側の条件に
よって、2バイト幅のRFを4個以上並べる必要があ
る。必要以上に並べることもないので個数は4とする。
2バイト幅のRFを4個並べると、このRFはワード数
から以下のような容量を選択できることになる。表10
は本実施例の場合にワード数と総容量の対応関係を示し
ている。例えば、ワード数を4とすると、総容量が32
バイトとなる。
よって、2バイト幅のRFを4個以上並べる必要があ
る。必要以上に並べることもないので個数は4とする。
2バイト幅のRFを4個並べると、このRFはワード数
から以下のような容量を選択できることになる。表10
は本実施例の場合にワード数と総容量の対応関係を示し
ている。例えば、ワード数を4とすると、総容量が32
バイトとなる。
【0050】
【表10】
【0051】図1の構成ではワード、総容量32バイト
を選択する。すなわち、一度にフェッチする幅が8バイ
トであるので、一度にフェッチできる幅は1ワードとな
る。この実施例では命令バッファの総容量は4ワードと
しているので、2バイト幅のRFを四つ並べて構成され
る基本単位を更に四つ横に並べて命令バッファを構成す
る。なお、図1中のRF600,610,620及び6
30の中に示される(0),(1),・・・(f)はR
F内の各ワードにつけられた名前であり、これは丁度
(0),(1),・・・(f)続いて(0),(1),
・・・というように循環レジスタ(すなわちモードは1
6である)を構成していることになる。ポインタ図1に
示すような16個の最小単位(0),(1),・・・
(f)をアドレッシングすることを可能とするためにポ
インタ(ライトポインタ700及びリードポインタ80
0)の幅は4ビットであることになる。
を選択する。すなわち、一度にフェッチする幅が8バイ
トであるので、一度にフェッチできる幅は1ワードとな
る。この実施例では命令バッファの総容量は4ワードと
しているので、2バイト幅のRFを四つ並べて構成され
る基本単位を更に四つ横に並べて命令バッファを構成す
る。なお、図1中のRF600,610,620及び6
30の中に示される(0),(1),・・・(f)はR
F内の各ワードにつけられた名前であり、これは丁度
(0),(1),・・・(f)続いて(0),(1),
・・・というように循環レジスタ(すなわちモードは1
6である)を構成していることになる。ポインタ図1に
示すような16個の最小単位(0),(1),・・・
(f)をアドレッシングすることを可能とするためにポ
インタ(ライトポインタ700及びリードポインタ80
0)の幅は4ビットであることになる。
【0052】ライトポインタ700は、次の命令のフェ
ッチで書き込みを行う先頭位置を示すものである。フェ
ッチ回路200における信号201で示されるフェッチ
量に応じて+1(2バイトフェッチの場合)、+2(4
バイト)、+3(6バイト)、及び+4(8バイト)す
る回路705を設ける。すなわちある命令を書き込んで
から、その書き込んだ命令の長さ(バイト数)をライト
ポインタ700に加える。
ッチで書き込みを行う先頭位置を示すものである。フェ
ッチ回路200における信号201で示されるフェッチ
量に応じて+1(2バイトフェッチの場合)、+2(4
バイト)、+3(6バイト)、及び+4(8バイト)す
る回路705を設ける。すなわちある命令を書き込んで
から、その書き込んだ命令の長さ(バイト数)をライト
ポインタ700に加える。
【0053】ライトアドレス回路701は、このポイン
タの値によってRFのライトアドレス及びライトイネー
ブル信号を制御する。RF600,610,620,及
び630に対するライトアドレスはそれぞれ601,6
11,621,及び631で、またライトイネーブルは
それぞれ602,612,622,及び632で示され
る。
タの値によってRFのライトアドレス及びライトイネー
ブル信号を制御する。RF600,610,620,及
び630に対するライトアドレスはそれぞれ601,6
11,621,及び631で、またライトイネーブルは
それぞれ602,612,622,及び632で示され
る。
【0054】ライトポインタ700とライトアドレス6
01,611,612及び631と、及びライトイネー
ブル602,612,622,及び632の関係を図2
に示す。すなわちアドレス601,611,621,及
び631はそれぞれRF600((0),(4),
(8),(c))、RF610((1),(5),
(9),(d))、RF620((2),(6),
(a),(e))及びRF630((3),(7),
(b),(f))をポイントする局所アドレスである。
これらのアドレス601,611,621及び631の
値はライトポインタ700に対応して計算される。
01,611,612及び631と、及びライトイネー
ブル602,612,622,及び632の関係を図2
に示す。すなわちアドレス601,611,621,及
び631はそれぞれRF600((0),(4),
(8),(c))、RF610((1),(5),
(9),(d))、RF620((2),(6),
(a),(e))及びRF630((3),(7),
(b),(f))をポイントする局所アドレスである。
これらのアドレス601,611,621及び631の
値はライトポインタ700に対応して計算される。
【0055】図2はこの計算関係を示す。例えば、ライ
トポインタ700は0000なら、RF600、RF6
10、RF620及びRF630のアドレス601、6
11、612及び631はそれぞれ0,0,0,0,で
ある。601が0であるということはアドレス601が
RF600のワード(0)を指すことを意味する。61
1が0であるということはアドレス611がRF610
のワード(1)を指すことを意味する。ライトポインタ
700によって、各RFのアドレスが選択されたが、各
RFのライトイネーブル信号によって、各RFへ命令を
書き込むかどうかのを決める。これらのライトイネーブ
ル信号が図2の2番目の表によって決められる。例え
ば、フェッチ量信号201(表2の(2))が00な
ら、かつライトポインタの下位2ビット(表2の
(1))が00なら、RF600、RF610、RF6
20及びRF630のライトイネーブル信号602、6
12、622、632がそれぞれ1、0、0、0とな
る。即ち、RF600だけを選択する。
トポインタ700は0000なら、RF600、RF6
10、RF620及びRF630のアドレス601、6
11、612及び631はそれぞれ0,0,0,0,で
ある。601が0であるということはアドレス601が
RF600のワード(0)を指すことを意味する。61
1が0であるということはアドレス611がRF610
のワード(1)を指すことを意味する。ライトポインタ
700によって、各RFのアドレスが選択されたが、各
RFのライトイネーブル信号によって、各RFへ命令を
書き込むかどうかのを決める。これらのライトイネーブ
ル信号が図2の2番目の表によって決められる。例え
ば、フェッチ量信号201(表2の(2))が00な
ら、かつライトポインタの下位2ビット(表2の
(1))が00なら、RF600、RF610、RF6
20及びRF630のライトイネーブル信号602、6
12、622、632がそれぞれ1、0、0、0とな
る。即ち、RF600だけを選択する。
【0056】リードポインタ800は、次に実行すべき
命令の先頭位置を示すものである。図示しない命令実行
制御部からの指示で命令が実行される場合、その命令の
命令長(通常これは実行される命令の命令コードから判
明するため、この例では命令の取り出しを制御するリー
ドアライン回路1000からの信号1001で示され
る)に応じて、+1(2バイト命令の場合)、+2(4
バイト)、及び+3(6バイト)する回路805を設け
る。すなわちある命令を読み出してから、この読み出し
た命令の長さ(バイト数)をリードポインタ800に加
える。
命令の先頭位置を示すものである。図示しない命令実行
制御部からの指示で命令が実行される場合、その命令の
命令長(通常これは実行される命令の命令コードから判
明するため、この例では命令の取り出しを制御するリー
ドアライン回路1000からの信号1001で示され
る)に応じて、+1(2バイト命令の場合)、+2(4
バイト)、及び+3(6バイト)する回路805を設け
る。すなわちある命令を読み出してから、この読み出し
た命令の長さ(バイト数)をリードポインタ800に加
える。
【0057】リードアドレス回路801は、このポイン
タの値によってRFのリードアドレスを制御する。RF
600,610,620,及び630に対するリードア
ドレスはそれぞれ603、613,623,及び633
で示される。リードアドレス回路801とライトアドレ
ス603,613,623,及び633との関係を図5
に示す。リードアドレス603,613,623,及び
633はそれぞれRF600,RF610,RF620
及びRF630にポイントする局所アドレスである。図
5から分かるように、リードポインタ800が0000
なら、RF600、RF610、RF620及びRF6
30のリードアドレス603、613、623及び63
3がそれぞれ0、0、0、0、である。603が0であ
るということはリードアドレス603がRF600のワ
ード(0)を指すことを意味する。613が0であると
いうことはリードアドレス613がRF610のワード
(1)を指すことを意味するなど。
タの値によってRFのリードアドレスを制御する。RF
600,610,620,及び630に対するリードア
ドレスはそれぞれ603、613,623,及び633
で示される。リードアドレス回路801とライトアドレ
ス603,613,623,及び633との関係を図5
に示す。リードアドレス603,613,623,及び
633はそれぞれRF600,RF610,RF620
及びRF630にポイントする局所アドレスである。図
5から分かるように、リードポインタ800が0000
なら、RF600、RF610、RF620及びRF6
30のリードアドレス603、613、623及び63
3がそれぞれ0、0、0、0、である。603が0であ
るということはリードアドレス603がRF600のワ
ード(0)を指すことを意味する。613が0であると
いうことはリードアドレス613がRF610のワード
(1)を指すことを意味するなど。
【0058】有効フラグ1150は、命令バッファ内に
有効なデータを保持していることを示すフラグであり、
このフラグが0の場合には有効なデータを保持していな
いものとする。
有効なデータを保持していることを示すフラグであり、
このフラグが0の場合には有効なデータを保持していな
いものとする。
【0059】有効フラグ1150は有効フラグ更新回路
1155でその値が決定されるが、有効フラグ更新回路
1155にはフェッチ量信号201、実行命令長信号1
001のほかに、ライトポインタ700、リードポイン
タ800、また分岐命令の分岐成立などによって強制的
に命令バッファの内容を無効化させる信号1159が与
えられている。
1155でその値が決定されるが、有効フラグ更新回路
1155にはフェッチ量信号201、実行命令長信号1
001のほかに、ライトポインタ700、リードポイン
タ800、また分岐命令の分岐成立などによって強制的
に命令バッファの内容を無効化させる信号1159が与
えられている。
【0060】このフラグの更新条件を以下に示す。 (セット条件) 〔(分岐判定でない)+(分岐不成立)〕 & 〔(命令バッファ内に保持されているバイト数)+(ライトされるバイト数) −(実行が開始される命令長)>0〕 +〔分岐成立〕&〔分岐先フェッチが行われる〕 (リセット) 〔(分岐判定でない)+(分岐不成立)〕 & 〔(命令バッファ内に保持されているバイト数)+(ライトされるバイト数) −(実行が開始される命令長)=0〕 +〔分岐成立〕&〔分岐先フェッチが行われない〕 命令バッファ内に保持されているバイト数はライトポイ
ンタ700、リードポインタ800の差、及び有効フラ
グ1150の値から図7のように求めることができる。
ンタ700、リードポインタ800の差、及び有効フラ
グ1150の値から図7のように求めることができる。
【0061】フェッチ回路200から送られてくるフェ
ッチデータ210をRFにライトできるように並び替え
るライトアライン回路900は、RF600,610,
620、及び630のためのライトデータをそれぞれ9
10,911,912、及び913に出力する。
ッチデータ210をRFにライトできるように並び替え
るライトアライン回路900は、RF600,610,
620、及び630のためのライトデータをそれぞれ9
10,911,912、及び913に出力する。
【0062】ライトアライン回路900は、フェッチ量
201,ライトポインタ700の値で制御されるが、フ
ェッチ回路200の構成次第ではフェッチ回路200か
ら送られてくる先頭位置アドレス211も必要となる。
201,ライトポインタ700の値で制御されるが、フ
ェッチ回路200の構成次第ではフェッチ回路200か
ら送られてくる先頭位置アドレス211も必要となる。
【0063】フェッチ回路200からフェッチデータと
しては図4(a) のようにフェッチデータ線210のバイ
ト0には常にフェッチの先頭データが送られてくる場合
には、ライトアライン回路900は図3のライトアライ
ン(A)のように制御すればよい。この場合には、専ら
ライトポインタの下位2ビットのみがその制御に使用さ
れることになる。−一方、フェッチ回路200からフェ
ッチデータがフェッチデータ線210に図4(b) のよう
に送られてくる場合、ライトアライン回路900は図3
のライトアライン(B)のように制御すればよい。即
ち、図3は並び替えためのライトアライン回路900の
動作を示している。次には、この動作をより詳しく説明
する。
しては図4(a) のようにフェッチデータ線210のバイ
ト0には常にフェッチの先頭データが送られてくる場合
には、ライトアライン回路900は図3のライトアライ
ン(A)のように制御すればよい。この場合には、専ら
ライトポインタの下位2ビットのみがその制御に使用さ
れることになる。−一方、フェッチ回路200からフェ
ッチデータがフェッチデータ線210に図4(b) のよう
に送られてくる場合、ライトアライン回路900は図3
のライトアライン(B)のように制御すればよい。即
ち、図3は並び替えためのライトアライン回路900の
動作を示している。次には、この動作をより詳しく説明
する。
【0064】フェッチ回路200からの転送データの先
頭が必ずバイト0にある場合(A)には、フェッチ量信
号201の値(00:2バイト,01:4バイト,1
0:6バイト,11対8バイト)で指定されたバイト数
だけでフェッチ回路200からの転送データをライトア
ライン回路900の出力910,911,912または
913に送出する。また、転送データのバイトと出力9
10,911,912及び913との対応関係は、ライ
トポインタの下位2ビット(図3中の(2))によって
決められる。例えば、図3のライトライン(A)から分
かるように、ライトポインタ700の下位2ビット(図
3の(1))が00で、かつフェッチ量信号201(図
3の(2))が01なら、フェッチされたデータの先頭
2バイト(I01)を910へ出力し、転送されたデー
タの後2バイト(I23)を911へ出力する。また、
ライトポインタ700の下位2ビット(図3の(1))
が01で、かつフェッチ量信号201(図3の(2))
が01なら、転送されたデータの先頭2バイト(I0
1)を911へ出力し、転送されたデータの後2バイト
(I23)を912へ出力する。
頭が必ずバイト0にある場合(A)には、フェッチ量信
号201の値(00:2バイト,01:4バイト,1
0:6バイト,11対8バイト)で指定されたバイト数
だけでフェッチ回路200からの転送データをライトア
ライン回路900の出力910,911,912または
913に送出する。また、転送データのバイトと出力9
10,911,912及び913との対応関係は、ライ
トポインタの下位2ビット(図3中の(2))によって
決められる。例えば、図3のライトライン(A)から分
かるように、ライトポインタ700の下位2ビット(図
3の(1))が00で、かつフェッチ量信号201(図
3の(2))が01なら、フェッチされたデータの先頭
2バイト(I01)を910へ出力し、転送されたデー
タの後2バイト(I23)を911へ出力する。また、
ライトポインタ700の下位2ビット(図3の(1))
が01で、かつフェッチ量信号201(図3の(2))
が01なら、転送されたデータの先頭2バイト(I0
1)を911へ出力し、転送されたデータの後2バイト
(I23)を912へ出力する。
【0065】一方、フェッチ回路200からの転送デー
タの先頭バイトが必ずしもバイト0ではない場合(B)
には図3のライトアライン(B)に示されるように、フ
ェッチ位置信号210の値(00:バイト0が先頭、0
1:バイト2が先頭、10:バイト4が先頭、11:バ
イト6が先頭)に指定された先頭バイトの位置とはライ
トポインタの下位2ビットによって、ライトアライン回
路900が転送されたデータを並び替える。例えば、フ
ェッチ位置信号211(図3の(3))が01なら、図
4(b)に示されるように、先頭バイトがバイト2にあ
る。この場合には、もしライトポインタの下位2ビット
(図3の(1))が00なら、転送されたデータのI2
3号(実は先頭2バイトである)を出力線910へ出力
し、I45を出力線911へ出力し、I67を出力線9
12へ出力し、I01を出力線913へ出力する(この
場合には、並び替える動作が表している)。もしライト
ポインタの下位2ビットが01なら、転送されたデータ
のI23(実は先頭2バイトである)を出力線911へ
出力し、I45を出力線912へ出力し、I67を出力
線913へ出力し、I12を出力線910へ出力する。
即ち、フェッチされたデータの先頭位置信号211とラ
イトポインタの下位2ビットによって、ライトアライン
回路900はフェッチされたデータを並び替える。図4
の(a)は、図3(A)の場合にフェッチ回路200に
あるデータとフェッチ量を示す図であり、図4の(b)
は図3(B)の場合にフェッチ回路200にあるデータ
とデータの先頭位置およびフェッチ量を示す図である。
リードアライン回路1000RF600,610,62
0,及び630から取り出された命令列はこのリードア
ライン回路1000で並び替えられて図示しない命令実
行制御部に送られる。リードアライン回路1000で
は、取り出すべき命令の先頭部分を出力線1010に、
また次の部分を出力線1011に、またその次の部分を
出力線1012にそれぞれ出力する。(出力線101
1,出力線1012を必要とするかは取り出すべき命令
の最大長による。この例では最小単位を2バイトとし、
最大6バイトの命令があることを想定しているため、出
力線1010,出力線1011,出力線1012という
2バイト幅の出力を3組設定している。)リードアライ
ン回路1000での並び替え制御は、リードポインタ8
00の値によって行われる。
タの先頭バイトが必ずしもバイト0ではない場合(B)
には図3のライトアライン(B)に示されるように、フ
ェッチ位置信号210の値(00:バイト0が先頭、0
1:バイト2が先頭、10:バイト4が先頭、11:バ
イト6が先頭)に指定された先頭バイトの位置とはライ
トポインタの下位2ビットによって、ライトアライン回
路900が転送されたデータを並び替える。例えば、フ
ェッチ位置信号211(図3の(3))が01なら、図
4(b)に示されるように、先頭バイトがバイト2にあ
る。この場合には、もしライトポインタの下位2ビット
(図3の(1))が00なら、転送されたデータのI2
3号(実は先頭2バイトである)を出力線910へ出力
し、I45を出力線911へ出力し、I67を出力線9
12へ出力し、I01を出力線913へ出力する(この
場合には、並び替える動作が表している)。もしライト
ポインタの下位2ビットが01なら、転送されたデータ
のI23(実は先頭2バイトである)を出力線911へ
出力し、I45を出力線912へ出力し、I67を出力
線913へ出力し、I12を出力線910へ出力する。
即ち、フェッチされたデータの先頭位置信号211とラ
イトポインタの下位2ビットによって、ライトアライン
回路900はフェッチされたデータを並び替える。図4
の(a)は、図3(A)の場合にフェッチ回路200に
あるデータとフェッチ量を示す図であり、図4の(b)
は図3(B)の場合にフェッチ回路200にあるデータ
とデータの先頭位置およびフェッチ量を示す図である。
リードアライン回路1000RF600,610,62
0,及び630から取り出された命令列はこのリードア
ライン回路1000で並び替えられて図示しない命令実
行制御部に送られる。リードアライン回路1000で
は、取り出すべき命令の先頭部分を出力線1010に、
また次の部分を出力線1011に、またその次の部分を
出力線1012にそれぞれ出力する。(出力線101
1,出力線1012を必要とするかは取り出すべき命令
の最大長による。この例では最小単位を2バイトとし、
最大6バイトの命令があることを想定しているため、出
力線1010,出力線1011,出力線1012という
2バイト幅の出力を3組設定している。)リードアライ
ン回路1000での並び替え制御は、リードポインタ8
00の値によって行われる。
【0066】高速化レジスタ1100を持つ構成におい
ては、実行のために取り出される命令に続く部分を取り
出して高速化レジスタに送る必要があるが、このために
リードアライン回路1000に出力1020を設ける。
ては、実行のために取り出される命令に続く部分を取り
出して高速化レジスタに送る必要があるが、このために
リードアライン回路1000に出力1020を設ける。
【0067】この出力1020は、リードポインタ80
0の値と通常取り出された命令の命令コードから判明す
る命令長によって制御される。これらの制御のようすを
図6に示す。すなわち、リードポインタの下位2ビット
(図6の(1))と命令長信号1001(図6の
(2))によってリードアライン回路の出力1010,
1011,1012及び1020は、命令バッファの出
力RF600,610,RF620,RF630との対
応関係(1対1ではない)を示している。例えば、リー
ドポインタの下位2ビット(図6の(1))が00な
ら、かつ命令長信号1001が01(2バイト)なら、
RF600の出力を1010へ出力し、RF610の出
力を1011へ出力し、RF620の出力を1012へ
出力する。また、RF610の出力を1020へ出力
し、即ち、次に実行すべき命令・先頭2バイトを102
0へ出力して、高速レジスタ1160へ書き込む。リー
ドポインタの下位2ビットが01なら、かつ命令長信号
1001が16(4バイト)なら、RF610の出力を
1010へ出力し、RF620の出力を1011出力
し、RF630の出力を1012へ出力する。またRF
630の出力を1020へ出力する。この場合には、並
び替える動作が表している。
0の値と通常取り出された命令の命令コードから判明す
る命令長によって制御される。これらの制御のようすを
図6に示す。すなわち、リードポインタの下位2ビット
(図6の(1))と命令長信号1001(図6の
(2))によってリードアライン回路の出力1010,
1011,1012及び1020は、命令バッファの出
力RF600,610,RF620,RF630との対
応関係(1対1ではない)を示している。例えば、リー
ドポインタの下位2ビット(図6の(1))が00な
ら、かつ命令長信号1001が01(2バイト)なら、
RF600の出力を1010へ出力し、RF610の出
力を1011へ出力し、RF620の出力を1012へ
出力する。また、RF610の出力を1020へ出力
し、即ち、次に実行すべき命令・先頭2バイトを102
0へ出力して、高速レジスタ1160へ書き込む。リー
ドポインタの下位2ビットが01なら、かつ命令長信号
1001が16(4バイト)なら、RF610の出力を
1010へ出力し、RF620の出力を1011出力
し、RF630の出力を1012へ出力する。またRF
630の出力を1020へ出力する。この場合には、並
び替える動作が表している。
【0068】命令バッファからの命令読み出しを高速化
するため、命令バッファの先頭部分(ここでは前述のよ
うに1バイトとする)をラッチするレジスタである。こ
のレジスタには、ライトアライン回路900の出力91
0(詳細後述)の先頭の1バイトとリードアライン回路
1000の出力1020(1バイト幅)が選択的に入力
される。
するため、命令バッファの先頭部分(ここでは前述のよ
うに1バイトとする)をラッチするレジスタである。こ
のレジスタには、ライトアライン回路900の出力91
0(詳細後述)の先頭の1バイトとリードアライン回路
1000の出力1020(1バイト幅)が選択的に入力
される。
【0069】RAMはレジスタより命令を読み出す速度
が遅いので、命令バッファの先頭部分をレジスタにラッ
チする。このレジスタの内容はリードアライン回路10
00の出力1020またはライトアライン回路900の
出力910の先頭の1バイトである。通常はこのレジス
タの内容をリードアライン回路1000の出力1020
である。分岐命令が分岐成立の場合にはすなわちバッフ
ァ内の命令が無効である場合には、このレジスタの内容
はライトアライン回路900の出力914にセットされ
る。
が遅いので、命令バッファの先頭部分をレジスタにラッ
チする。このレジスタの内容はリードアライン回路10
00の出力1020またはライトアライン回路900の
出力910の先頭の1バイトである。通常はこのレジス
タの内容をリードアライン回路1000の出力1020
である。分岐命令が分岐成立の場合にはすなわちバッフ
ァ内の命令が無効である場合には、このレジスタの内容
はライトアライン回路900の出力914にセットされ
る。
【0070】次に、図1を参照して命令バッファの全体
の動作について説明する。 制御 (初期値) ライトポインタ700=0000 リードポインタ800=0000 有効フラグ1150=0 命令フェッチ フェッチ回路200からのフェッチが行われると、命令
バッファは図示されない信号でこれを知り、RF600
〜630へのライトとライトポインタ700及び有効フ
ラグ1150の更新を行う。
の動作について説明する。 制御 (初期値) ライトポインタ700=0000 リードポインタ800=0000 有効フラグ1150=0 命令フェッチ フェッチ回路200からのフェッチが行われると、命令
バッファは図示されない信号でこれを知り、RF600
〜630へのライトとライトポインタ700及び有効フ
ラグ1150の更新を行う。
【0071】ライトアドレスとライトイネーブルの制御
については図2から分かるように、ライトアドレス回路
701はライトポインタによって、RF600,RF6
10,RF620トRF630のそれぞれのライトアド
レスを決定する。また、このライトアドレス回路701
はライトポインタとフェッチされる命令の命令長によっ
てこれらのRF600,RF610,RF620とRF
630のライトイネーブル信号を制御する。有効フラグ
1150は、フェッチが行われる場合には通常オンとな
る。これは前述の式においてライトされるバイト数が0
以上のとき、実行される命令長はすでに命令バッファ内
に保持されたバイト数以下でしかないためである。
については図2から分かるように、ライトアドレス回路
701はライトポインタによって、RF600,RF6
10,RF620トRF630のそれぞれのライトアド
レスを決定する。また、このライトアドレス回路701
はライトポインタとフェッチされる命令の命令長によっ
てこれらのRF600,RF610,RF620とRF
630のライトイネーブル信号を制御する。有効フラグ
1150は、フェッチが行われる場合には通常オンとな
る。これは前述の式においてライトされるバイト数が0
以上のとき、実行される命令長はすでに命令バッファ内
に保持されたバイト数以下でしかないためである。
【0072】高速化レジスタに、ライトアライン回路9
00の出力である910の最初の1バイトを直接ライト
するのは命令バッファが空の場合、及び実行される命令
の命令長が保持されているバイト数に等しい場合、及び
分岐先命令のフェッチの場合のみである。これは、高速
化レジスタ1100に保持される値が実行される命令の
先頭バイトであることから、通常の命令バッファ内に命
令が保持されている場合には、リードアライン回路10
00の出力1020から実行される命令の続きの部分の
1バイトを得てこれをセットし、命令バッファが空の場
合にはフェッチされた命令バッファに書き込まれるとき
にその先頭部分をこれにセットし、また命令の実行に伴
ってちょうド命令バッファが空になる場合のフェッチで
はこのフェッチデータが次の命令の先頭部分となるため
にこれをセットし、また、分岐が成立した時には今まで
保持されていた非分岐側の命令を破棄し、新たにフェッ
チされた分岐先命令が次に実行されるため、その先頭部
分をセットすることによる。 通常命令の実行 通常命令の長さはその命令コードをみることで判明す
る。例えば命令コードの最初の2ビットの値によって以
下のようにその命令長を知ることができる。
00の出力である910の最初の1バイトを直接ライト
するのは命令バッファが空の場合、及び実行される命令
の命令長が保持されているバイト数に等しい場合、及び
分岐先命令のフェッチの場合のみである。これは、高速
化レジスタ1100に保持される値が実行される命令の
先頭バイトであることから、通常の命令バッファ内に命
令が保持されている場合には、リードアライン回路10
00の出力1020から実行される命令の続きの部分の
1バイトを得てこれをセットし、命令バッファが空の場
合にはフェッチされた命令バッファに書き込まれるとき
にその先頭部分をこれにセットし、また命令の実行に伴
ってちょうド命令バッファが空になる場合のフェッチで
はこのフェッチデータが次の命令の先頭部分となるため
にこれをセットし、また、分岐が成立した時には今まで
保持されていた非分岐側の命令を破棄し、新たにフェッ
チされた分岐先命令が次に実行されるため、その先頭部
分をセットすることによる。 通常命令の実行 通常命令の長さはその命令コードをみることで判明す
る。例えば命令コードの最初の2ビットの値によって以
下のようにその命令長を知ることができる。
【0073】
【表11】
【0074】この命令長が命令バッファ内に保持されて
いるバイト長以下で、かつ、その他の命令開始条件が整
ったとき、図示しない命令実行制御部から命令の取り出
しが指示され、リードポインタ800、有効フラグ11
50、及び高速化レジスタ1100が更新される。リー
ドアドレスの制御は図5に示す。リードアライン回路の
制御は図6に示す。即ち、図5から分かるように、リー
ドアドレス回路801はリードポインタによって各RF
の局所リードアドレスを決定する。また、図6から分か
るように、リードアライン回路1000はリードポイン
タと命令長信号によって、リードアライン回路を制御す
る。 分岐命令の実行 分岐命令の実行で分岐が不成立の場合には通常の命令の
フェッチ及び実行が行われる。分岐命令の実行で分岐が
成立した場合には、次のような制御が行われる。 分岐成功時に分岐先フェッチがあるケース これは分岐判定サイクルで分岐が成立した場合、そのサ
イクルにフェッチ回路200からのフェッチデータが分
岐先のものである構成の場合をいう。 データライトとポインタ操作 フェッチ回路200からはフェッチデータ210、フェ
ッチ量201、及びフェッチ位置211が送られてくる
ことは通常のフェッチのケースと同じとする。ライトイ
ネーブル、ライトポインタ、リードポインタの制御には
複数の方法が考えられるがここでは以下の3つの例を挙
げることにする。 (第1の例)ライト位置をそのときのライトポインタの
値から、通常の場合と同じく図2のように制御し、更新
前のライトポインタの値を新しいリードポインタの値と
する方法。
いるバイト長以下で、かつ、その他の命令開始条件が整
ったとき、図示しない命令実行制御部から命令の取り出
しが指示され、リードポインタ800、有効フラグ11
50、及び高速化レジスタ1100が更新される。リー
ドアドレスの制御は図5に示す。リードアライン回路の
制御は図6に示す。即ち、図5から分かるように、リー
ドアドレス回路801はリードポインタによって各RF
の局所リードアドレスを決定する。また、図6から分か
るように、リードアライン回路1000はリードポイン
タと命令長信号によって、リードアライン回路を制御す
る。 分岐命令の実行 分岐命令の実行で分岐が不成立の場合には通常の命令の
フェッチ及び実行が行われる。分岐命令の実行で分岐が
成立した場合には、次のような制御が行われる。 分岐成功時に分岐先フェッチがあるケース これは分岐判定サイクルで分岐が成立した場合、そのサ
イクルにフェッチ回路200からのフェッチデータが分
岐先のものである構成の場合をいう。 データライトとポインタ操作 フェッチ回路200からはフェッチデータ210、フェ
ッチ量201、及びフェッチ位置211が送られてくる
ことは通常のフェッチのケースと同じとする。ライトイ
ネーブル、ライトポインタ、リードポインタの制御には
複数の方法が考えられるがここでは以下の3つの例を挙
げることにする。 (第1の例)ライト位置をそのときのライトポインタの
値から、通常の場合と同じく図2のように制御し、更新
前のライトポインタの値を新しいリードポインタの値と
する方法。
【0075】この方法はライト位置を通常の方法と同じ
方法で行い、リードポインタをライトした位置にするこ
とによって次に実行すべき命令の先頭をいまライトした
位置とする方法である。 (第2の例)ライトアドレスを0に固定し、ライトアド
レス及びライトイネーブルを図2のライトポインタが0
000のケースて制御し、ライトポインタをフェッチ量
だけ更新し、リードポインタは0000にする方法。
方法で行い、リードポインタをライトした位置にするこ
とによって次に実行すべき命令の先頭をいまライトした
位置とする方法である。 (第2の例)ライトアドレスを0に固定し、ライトアド
レス及びライトイネーブルを図2のライトポインタが0
000のケースて制御し、ライトポインタをフェッチ量
だけ更新し、リードポインタは0000にする方法。
【0076】この方法は分岐成立によってポインタを初
期化したように動作させる方法である。 (第3の例)フェッチ量201,及びフェッチ位置21
1から図8のようにライトアドレス、ライトイネーブル
を制御し、ライトポインタ、リードポインタを更新する
方法。すなわちフェッチ位置211はバイト0ならば、
リードポインタを0にセットし、バイト2ならば1にセ
ットし、バイト4ならば2にセットし、バイト6ならば
3にセットする。また、ライトポインタは((リードポ
インタ)+フェッチ量/2)と等しい値でセットされ
る。例えば、フェッチ位置信号211がバイト2なら、
かつフェッチ量信号201から4バイトなら、リードポ
インタを1にセットし、ライトポインタを(1+4/
2)でセットする。同時に、RF600、RF610、
RF620およびRF630のライトアドレスがそれぞ
れ1、0、0、0にセットされ、RF600、RF61
0、RF620及びRF630のライトイネーブル信号
がそれぞれoff,on,on,off にセットされる。即ち、4バ
イトデータをそれぞれRF610の0位置とRF620
の0位置に書き込む。
期化したように動作させる方法である。 (第3の例)フェッチ量201,及びフェッチ位置21
1から図8のようにライトアドレス、ライトイネーブル
を制御し、ライトポインタ、リードポインタを更新する
方法。すなわちフェッチ位置211はバイト0ならば、
リードポインタを0にセットし、バイト2ならば1にセ
ットし、バイト4ならば2にセットし、バイト6ならば
3にセットする。また、ライトポインタは((リードポ
インタ)+フェッチ量/2)と等しい値でセットされ
る。例えば、フェッチ位置信号211がバイト2なら、
かつフェッチ量信号201から4バイトなら、リードポ
インタを1にセットし、ライトポインタを(1+4/
2)でセットする。同時に、RF600、RF610、
RF620およびRF630のライトアドレスがそれぞ
れ1、0、0、0にセットされ、RF600、RF61
0、RF620及びRF630のライトイネーブル信号
がそれぞれoff,on,on,off にセットされる。即ち、4バ
イトデータをそれぞれRF610の0位置とRF620
の0位置に書き込む。
【0077】フェッチ量=0:00,1:01,2:1
0,3:11である。この方法はフェッチデータを実質
的に並び替えない方法であり、図8に示すように、フェ
ッチ回路200からフェッチされたデータを順序を変わ
らないままにRF600,RF610,RF620及び
RF630に書き込むので、ライトアライン回路900
ではフェッチデータを並び替える必要はない。従ってフ
ェッチ動作が早く終了する。この第三の手法は分岐成立
時のフェッチ動作に時間的余裕がないケースで有効であ
る。従って、次の命令をフェッチするのに要する時間は
厳しい場合に有効である。
0,3:11である。この方法はフェッチデータを実質
的に並び替えない方法であり、図8に示すように、フェ
ッチ回路200からフェッチされたデータを順序を変わ
らないままにRF600,RF610,RF620及び
RF630に書き込むので、ライトアライン回路900
ではフェッチデータを並び替える必要はない。従ってフ
ェッチ動作が早く終了する。この第三の手法は分岐成立
時のフェッチ動作に時間的余裕がないケースで有効であ
る。従って、次の命令をフェッチするのに要する時間は
厳しい場合に有効である。
【0078】
【実施例2】 命令バッファの幅がフェッチ量より広い書き込み幅を持
つケースの実施例 図9は8バイト幅でフェッチできるマシンにおいて、4
ワード 2バイト幅のレジスタファイルを5個並べたこ
とによって書き込み幅が10バイト命令バッファを示し
ている。この命令バッファの容量は20ワードとなっ
た。なお、実施例2中のRF600,610,620,
630及び640の中に示される(0),
(1),....,(19)は図1の場合と同じく、R
F内の各ワードにつけられた名前であり、これはちょう
ど(0),(1),....,(19)つづいて
(0),(1),...というように、環レジスタを構
成していることになる。実施例2は実施例1と異なるの
はRF640を使っている点である。これに伴って、ア
ドレスの生成やライトイネーブルの生成やライトアライ
やリードアラインなどが変る必要がある。図9において
は、図1と同じ部分は同じ番号を使っている。次には、
実施例2の各部分を実施例1の説明より簡単に説明す
る。
つケースの実施例 図9は8バイト幅でフェッチできるマシンにおいて、4
ワード 2バイト幅のレジスタファイルを5個並べたこ
とによって書き込み幅が10バイト命令バッファを示し
ている。この命令バッファの容量は20ワードとなっ
た。なお、実施例2中のRF600,610,620,
630及び640の中に示される(0),
(1),....,(19)は図1の場合と同じく、R
F内の各ワードにつけられた名前であり、これはちょう
ど(0),(1),....,(19)つづいて
(0),(1),...というように、環レジスタを構
成していることになる。実施例2は実施例1と異なるの
はRF640を使っている点である。これに伴って、ア
ドレスの生成やライトイネーブルの生成やライトアライ
やリードアラインなどが変る必要がある。図9において
は、図1と同じ部分は同じ番号を使っている。次には、
実施例2の各部分を実施例1の説明より簡単に説明す
る。
【0079】20ワードをアドレスするために、ポイン
タは5ビット構成となる。また、ここではひとつの例と
して表12に示されるようなポインタとアドレスの関係
を使用することにする。
タは5ビット構成となる。また、ここではひとつの例と
して表12に示されるようなポインタとアドレスの関係
を使用することにする。
【0080】
【表12】
【0081】この表12に示されている関係はポインタ
の上位2ビットは各RF内のアドレスを指し、下位3ビ
ットはRFの位置を示している。本実施例2では、命令
バッファの幅が10バイトであり、フェッチ量の幅が8
バイトので、5つのRF中には、必ず1つのRFが使わ
れない。この点において、本アドレスの生成方法(表1
2)は実施例1のアドレスの生成方法(図2と図5)と
異なる。表12には、( )を付かれたアドレスに対応
するRFがこの使われていないRFである。また、この
( )内の値がデーコードし易い値である。本実施例2
では、リードアドレスとライトアドレスがこの表12に
より生成される。
の上位2ビットは各RF内のアドレスを指し、下位3ビ
ットはRFの位置を示している。本実施例2では、命令
バッファの幅が10バイトであり、フェッチ量の幅が8
バイトので、5つのRF中には、必ず1つのRFが使わ
れない。この点において、本アドレスの生成方法(表1
2)は実施例1のアドレスの生成方法(図2と図5)と
異なる。表12には、( )を付かれたアドレスに対応
するRFがこの使われていないRFである。また、この
( )内の値がデーコードし易い値である。本実施例2
では、リードアドレスとライトアドレスがこの表12に
より生成される。
【0082】ライトポインタ700は次の命令フェッチ
で書き込みを行う先頭位置を示すものである。フェッチ
回路200から示されるフェッチ量(信号201で示さ
れる)に応じて、+1(2バイトフェッチの場合),+
2(4バイト),+3(6バイト),及び+4(8バイ
ト)する回路705を設ける。
で書き込みを行う先頭位置を示すものである。フェッチ
回路200から示されるフェッチ量(信号201で示さ
れる)に応じて、+1(2バイトフェッチの場合),+
2(4バイト),+3(6バイト),及び+4(8バイ
ト)する回路705を設ける。
【0083】ライトアドレス回路801は、このポイン
タの値によってRFのライトアドレス及びライトイネー
ブル信号を制御する。RF600,610,620,6
30,及び640に対するライトアドレスはそれぞれ6
01,611,621,631,及び642で示され
る。ライトイネーブルはそれぞれ102,112,12
2,ライトポインタ800とライトイネーブル602,
612,622,632,及び642の関係は表13に
示す。
タの値によってRFのライトアドレス及びライトイネー
ブル信号を制御する。RF600,610,620,6
30,及び640に対するライトアドレスはそれぞれ6
01,611,621,631,及び642で示され
る。ライトイネーブルはそれぞれ102,112,12
2,ライトポインタ800とライトイネーブル602,
612,622,632,及び642の関係は表13に
示す。
【0084】
【表13】
【0085】リードポインタ800は、次に実行すべき
命令の先頭位置を示すものである。図示しない命令実行
制御部からの指示で命令が実行される場合、その命令の
命令長(通常これは実行される命令の命令コードから判
明する為、この例では命令の取り出しを制御するリード
アライン回路600からの信号601で示される)に応
じて、+1(2バイト命令の場合),+2(4バイ
ト),及び+3(6バイト)する回路805を設ける。
命令の先頭位置を示すものである。図示しない命令実行
制御部からの指示で命令が実行される場合、その命令の
命令長(通常これは実行される命令の命令コードから判
明する為、この例では命令の取り出しを制御するリード
アライン回路600からの信号601で示される)に応
じて、+1(2バイト命令の場合),+2(4バイ
ト),及び+3(6バイト)する回路805を設ける。
【0086】リードアドレス回路801は、このポイン
タの値によってRFのリードアドレスを制御する。RF
600,610,620,及び630に対するリードア
ドレスはそれぞれ603,613,623,633,及
び643で示される。これらの関係はライトポインタの
それと同じであり、表12の関係を使用できる。
タの値によってRFのリードアドレスを制御する。RF
600,610,620,及び630に対するリードア
ドレスはそれぞれ603,613,623,633,及
び643で示される。これらの関係はライトポインタの
それと同じであり、表12の関係を使用できる。
【0087】有効フラグ1150は命令バッファ内に有
効なデータを保持していることを示すフラグであり、こ
のフラグが0の場合には有効なデータを保持していない
ものとする。
効なデータを保持していることを示すフラグであり、こ
のフラグが0の場合には有効なデータを保持していない
ものとする。
【0088】有効フラグ1150は有効フラグ更新回路
1155でその値が決定されるが、有効フラグ更新回路
1155にはフェッチ量信号201,実行命令信号10
01の他に、ライトポインタ700,リードポインタ8
00,また分岐命令の分岐成立などによって強制的に命
令バッファの内容を無効化させる信号159が与えられ
ている。
1155でその値が決定されるが、有効フラグ更新回路
1155にはフェッチ量信号201,実行命令信号10
01の他に、ライトポインタ700,リードポインタ8
00,また分岐命令の分岐成立などによって強制的に命
令バッファの内容を無効化させる信号159が与えられ
ている。
【0089】このフラグの更新条件については実施例1
と同じである。命令バッファ内に保持されているバイト
数はライトポインタ700,リードポインタ800,及
び有効フラグ1150の値からは表14〜表17のよう
に求めることができる。
と同じである。命令バッファ内に保持されているバイト
数はライトポインタ700,リードポインタ800,及
び有効フラグ1150の値からは表14〜表17のよう
に求めることができる。
【0090】
【表14】
【0091】
【表15】
【0092】
【表16】
【0093】
【表17】
【0094】高速化レジスタ1100は命令バッファか
らの命令読み出しを高速化するため、命令バッファの先
頭部分(ここでは前例と同様に1バイトとする)をラッ
チするレジスタである。
らの命令読み出しを高速化するため、命令バッファの先
頭部分(ここでは前例と同様に1バイトとする)をラッ
チするレジスタである。
【0095】このレジスタには、フェッチ回路200の
先頭の1バイト(後述)とリードアライン回路1000
の出力620(1バイト幅)が選択的に入力される。ラ
イトアライン回路900は、フェッチ量201,ライト
ポインタ700の値で制御されるが、フェッチ回路20
0の構成次第では、フェッチ回路200から送られてく
る先頭位置アドレス211も必要となる。
先頭の1バイト(後述)とリードアライン回路1000
の出力620(1バイト幅)が選択的に入力される。ラ
イトアライン回路900は、フェッチ量201,ライト
ポインタ700の値で制御されるが、フェッチ回路20
0の構成次第では、フェッチ回路200から送られてく
る先頭位置アドレス211も必要となる。
【0096】フェッチ回路200からフェッチデータが
4(a)のようにフェッチデータ線210のバイト0に
は常にフェッチの先頭データが送られてくる場合には、
ライトアライン回路900は表18のライトアライン
(A)のように制御すればよい。この場合には専らライ
トポインタの下位3ビットのみがその制御に使用される
ことになる。
4(a)のようにフェッチデータ線210のバイト0に
は常にフェッチの先頭データが送られてくる場合には、
ライトアライン回路900は表18のライトアライン
(A)のように制御すればよい。この場合には専らライ
トポインタの下位3ビットのみがその制御に使用される
ことになる。
【0097】
【表18】
【0098】一方、フェッチ回路200からフェッチデ
ータがフェッチデータ線210に図4(b)のように送
られてくる場合、ライトアライン回路900は表(1
1)のライトアライン(B)のように制御すればよい。
表19のライトアライン(A)制御関係とライトアライ
ン(B)の制御関係は、それぞれ実施例1の図3のライ
トアライン(A)の制御関係とライトアライン(B)の
制御関係とそれぞれ違う。
ータがフェッチデータ線210に図4(b)のように送
られてくる場合、ライトアライン回路900は表(1
1)のライトアライン(B)のように制御すればよい。
表19のライトアライン(A)制御関係とライトアライ
ン(B)の制御関係は、それぞれ実施例1の図3のライ
トアライン(A)の制御関係とライトアライン(B)の
制御関係とそれぞれ違う。
【0099】
【表19】
【0100】高速化レジスタ1100へ送る先頭バイト
1020とは、フェッチデータの先頭の1バイトであ
り、(A)のタイプのアラインでは常にバイト0の値
が、(B)のタイプのアラインではフェッチ位置のバイ
トがそれぞれ送られる。
1020とは、フェッチデータの先頭の1バイトであ
り、(A)のタイプのアラインでは常にバイト0の値
が、(B)のタイプのアラインではフェッチ位置のバイ
トがそれぞれ送られる。
【0101】RF600,610,620,630,及
び640から取り出された命令列はリードアライン回路
1000で並び替えられて図示しない命令実行制御部に
送られる。
び640から取り出された命令列はリードアライン回路
1000で並び替えられて図示しない命令実行制御部に
送られる。
【0102】リードアライン回路1000では、取り出
すべき命令の先頭部分を610に、また次の部分を61
1に、またその次の部分を612にそれぞれ出力する。
出力線611,出力線612などを必要とするかは取り
出すべき命令の最大長による。この例では最小単位を2
バイトとし、最大6バイトの命令があることを想定して
いる為、610,611,612という2バイト幅の出
力を3組設定している。
すべき命令の先頭部分を610に、また次の部分を61
1に、またその次の部分を612にそれぞれ出力する。
出力線611,出力線612などを必要とするかは取り
出すべき命令の最大長による。この例では最小単位を2
バイトとし、最大6バイトの命令があることを想定して
いる為、610,611,612という2バイト幅の出
力を3組設定している。
【0103】リードアライン回路600での並び替え制
御は、リードポインタ800の値によって行われる。高
速化レジスタ1100を持つ構成においては、実行のた
めに取り出される命令に続く部分を取り出して高速化レ
ジスタに送る必要があるが、この為にリードアライン回
路1000に出力1020を設ける。
御は、リードポインタ800の値によって行われる。高
速化レジスタ1100を持つ構成においては、実行のた
めに取り出される命令に続く部分を取り出して高速化レ
ジスタに送る必要があるが、この為にリードアライン回
路1000に出力1020を設ける。
【0104】これらの制御の様子を表20に示す。実施
例2のリードアラインの制御関係を表12に、命令バッ
ファ内の命令保持量を表13に示すが、これらは実施例
1の説明から明らかであるから説明を省略する。
例2のリードアラインの制御関係を表12に、命令バッ
ファ内の命令保持量を表13に示すが、これらは実施例
1の説明から明らかであるから説明を省略する。
【0105】
【表20】
【0106】
【発明の効果】本発明によれば、命令バッファをレジス
タファイルあるいはRAMで構成したので、高集積化が
可能となる。また、本発明では高速化の必要な部分はF
Fで構成したので、高集積化したうえに高速化を図るこ
とができる。
タファイルあるいはRAMで構成したので、高集積化が
可能となる。また、本発明では高速化の必要な部分はF
Fで構成したので、高集積化したうえに高速化を図るこ
とができる。
【0107】さらに、本発明によって命令バッファをレ
ジスタファイルあるいはRAMで構成した場合にも分岐
命令の効率的な処理を図ることができる。
ジスタファイルあるいはRAMで構成した場合にも分岐
命令の効率的な処理を図ることができる。
【図1】本発明の実施例1である。
【図2】ライトアドレス回路701の制御を示してい
る。
る。
【図3】ライトアライン回路900の制御を示してい
る。
る。
【図4】フェッチ量とフェッチ位置によってフェッチ線
210にあるデータの分布状態を示している。
210にあるデータの分布状態を示している。
【図5】リードアドレス回路501の制御を示してい
る。
る。
【図6】リードアライン回路1100の制御を示してい
る。
る。
【図7】ライトポインタとリードポインタの差と命令バ
ッファにあるバイトの数の対応関係を示している。
ッファにあるバイトの数の対応関係を示している。
【図8】分岐成立時にライト側に並び替えがいらないラ
イト,ポインタの制御を示している。
イト,ポインタの制御を示している。
【図9】本発明の実施例2である。
【図10】従来の例である。
200 フェッチ回路 600,610,620,630 レジスタファイ
ル 700 ライトポインタ 701 ライトアドレス回路 800 リードポインタ 801 リードアドレス回路 900 ライトアライン回路 1000 リードアライン回路 1100 高速化レジスタ 1150 有効フラグ 1155 有効フラグ更新回路
ル 700 ライトポインタ 701 ライトアドレス回路 800 リードポインタ 801 リードアドレス回路 900 ライトアライン回路 1000 リードアライン回路 1100 高速化レジスタ 1150 有効フラグ 1155 有効フラグ更新回路
Claims (5)
- 【請求項1】 プログラムを記憶するメモリと、該メモ
リより命令の実行に先立って命令を取り出して格納する
命令バッファとを備え、この命令バッファは命令長の最
小長を単位とする幅を持つレジスタファイルあるいはR
AMを、メモリから一度に命令をフェッチできる幅にな
るように並べて構成し、該レジスタファイルあるいはR
AMをライトポインタおよびリードポインタによって制
御することを特徴とする命令バッファ方式。 - 【請求項2】 前記命令バッファは、実行が開始される
命令の一部または全部を格納するフリップフロップを有
することを特徴とする請求項1記載の命令バッファ方
式。 - 【請求項3】 分岐命令の実行に際して、分岐判定と同
じサイクルまたはそれ以前のサイクルで分岐先命令列の
フェッチを行うパイプライン制御方式にあって、分岐成
立時にポインタ制御によってすでにフェッチされている
非分岐側の命令列を無効化することを特徴とする請求項
1記載の命令バッファ方式。 - 【請求項4】 メモリからのフェッチ量が一定でない、
あるいは命令バッファの幅が一度にフェッチされる幅よ
りも大きい場合に、そのフェッチ量とライトポインタの
値からフェッチデータを並び替えて目的のレジスタファ
イルあるいはRAMにライトすることを特徴とする請求
項1記載の命令バッファ方式。 - 【請求項5】 実行すべき命令をレジスタファイルある
いはRAMから取り出す際にリードポインタの値によっ
て並び替えながら取り出すことを特徴とする請求項1記
載の命令バッファ方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP11621792A JPH05313888A (ja) | 1992-05-08 | 1992-05-08 | 命令バッファ方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP11621792A JPH05313888A (ja) | 1992-05-08 | 1992-05-08 | 命令バッファ方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH05313888A true JPH05313888A (ja) | 1993-11-26 |
Family
ID=14681735
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP11621792A Withdrawn JPH05313888A (ja) | 1992-05-08 | 1992-05-08 | 命令バッファ方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH05313888A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6530013B1 (en) | 1998-12-17 | 2003-03-04 | Fujitsu Limited | Instruction control apparatus for loading plurality of instructions into execution stage |
-
1992
- 1992-05-08 JP JP11621792A patent/JPH05313888A/ja not_active Withdrawn
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6530013B1 (en) | 1998-12-17 | 2003-03-04 | Fujitsu Limited | Instruction control apparatus for loading plurality of instructions into execution stage |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US4524416A (en) | Stack mechanism with the ability to dynamically alter the size of a stack in a data processing system | |
| US3898624A (en) | Data processing system with variable prefetch and replacement algorithms | |
| US5896529A (en) | Branch prediction based on correlation between sets of bunches of branch instructions | |
| US6272596B1 (en) | Data processor | |
| EP0438961A2 (en) | Hardware data string operation controller | |
| US4037213A (en) | Data processor using a four section instruction format for control of multi-operation functions by a single instruction | |
| JPH0814801B2 (ja) | プログラマブルアクセスメモリ | |
| JPH0668736B2 (ja) | 2個のシステムクロックサイクルを利用する書込み動作をもったキャッシュメモリユニットを供与する装置及び方法 | |
| US5459847A (en) | Program counter mechanism having selector for selecting up-to-date instruction prefetch address based upon carry signal of adder which adds instruction size and LSB portion of address register | |
| US4240137A (en) | Computer for directly executing a program including a plurality of structured blocks | |
| US4737908A (en) | Buffer memory control system | |
| JP3132566B2 (ja) | 命令先行制御装置 | |
| JPH0793152A (ja) | マイクロプロセッサ制御装置 | |
| JP2901247B2 (ja) | 掃出し制御方式 | |
| US5349672A (en) | Data processor having logical address memories and purge capabilities | |
| JPS63261430A (ja) | 情報処理方式および装置 | |
| JPS6032220B2 (ja) | 情報処理装置 | |
| JPS62145430A (ja) | デ−タ処理装置 | |
| JPH0660192A (ja) | 図形パターン格納装置 | |
| JPS5935055B2 (ja) | デ−タ処理システム | |
| JP2576589B2 (ja) | 仮想記憶アクセス制御方式 | |
| JP2763450B2 (ja) | パイプライン処理データ処理装置 | |
| JPH0231418B2 (ja) | Deetachushutsushorisochi | |
| JPS6120155A (ja) | メモリアクセス制御装置 | |
| JP2000181709A (ja) | 命令制御装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 19990803 |