JP2000003279A - Vliwプロセッサ、プログラム生成装置、および記録媒体 - Google Patents

Vliwプロセッサ、プログラム生成装置、および記録媒体

Info

Publication number
JP2000003279A
JP2000003279A JP16787598A JP16787598A JP2000003279A JP 2000003279 A JP2000003279 A JP 2000003279A JP 16787598 A JP16787598 A JP 16787598A JP 16787598 A JP16787598 A JP 16787598A JP 2000003279 A JP2000003279 A JP 2000003279A
Authority
JP
Japan
Prior art keywords
instruction
instructions
unit
word
executed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP16787598A
Other languages
English (en)
Other versions
JP3915019B2 (ja
JP2000003279A5 (ja
Inventor
Shinya Miyaji
信哉 宮地
Nobuo Higaki
信生 檜垣
Tetsuya Tanaka
哲也 田中
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co 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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP16787598A priority Critical patent/JP3915019B2/ja
Publication of JP2000003279A publication Critical patent/JP2000003279A/ja
Publication of JP2000003279A5 publication Critical patent/JP2000003279A5/ja
Application granted granted Critical
Publication of JP3915019B2 publication Critical patent/JP3915019B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)

Abstract

(57)【要約】 【課題】 VLIWプロセッサにおいて一語長が一度に
命令フェッチ幅されない場合であっても効率よく命令実
行できるVLIWプロセッサを提供することを目的とす
る。 【解決手段】 一語長の命令が命令フェッチされない場
合であっても、命令フェッチされた分だけ先に実行す
る。これにより、レジスタ干渉によるパイプラインイン
タロックを解消できる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、命令供給が十分に
行えない環境で使用されても供給されたものから事項す
る事により、性能劣化を抑制するVLIWプロセッサ、
プログラム生成装置および記録媒体に関するものであ
る。
【0002】
【従来の技術】近年のマイクロプロセッサ応用製品の高
機能化および高速化に伴い、高い処理能力を持つマイク
ロプロセッサ(以下、単に「プロセッサ」という。)が
望まれている。このため、最近では、1サイクルに複数
の命令を同時に実行することが行われている。
【0003】命令レベルの並列処理を実現する方法とし
て、ダイナミックスケジューリングによるものとスタテ
ィックスケジューリングによるものがある。
【0004】ダイナミックスケジューリングによるもの
の代表例としてスーパースカラ方式がある。この方式で
は、実行時に命令コードを解読後、ハードウェアにて動
的に命令間の依存関係を解析して並列実行可能か否かを
判定し、適切な組み合わせの命令を並列実行する。スタ
ティックスケジューリングによるものの代表例としてV
LIW(Very Long Instruction
Word)方式がある。この方式は、実行コード生成
時にコンパイラ等により静的に命令間の依存関係を解析
し、命令コードの移動を行って実行効率の良い命令スト
リームを生成する。一般のVLIW方式では、同時実行
可能な複数の命令(ここでは「単位命令」と呼ぶ。)を
一つの固定長命令供給単位(ここでは「一語」と呼
ぶ。)に記述する。この方式を採ると、ハードウェアで
命令間の依存解析を行う必要が無いため、ハードウェア
を単純化できるというメリットがある。
【0005】以下、従来技術におけるVLIWプロセッ
サの動作を図13を用いて説明する。
【0006】図13は、従来技術におけるVLIWプロ
セッサの構成図であり、10はデータ、命令等が格納さ
れているメモリ、20はメモリ10から命令等を取り出
す命令供給発行部、30は命令供給発行部20で取り出
された命令を解読し解読結果を命令実行部へ与える命令
解読部である。命令供給発行部20は、メモリ10から
の命令等の取り出しを制御する命令フェッチ制御部21
とメモリ10から取り出した命令等を格納する命令レジ
スタ22からなる。また、命令解読部30は、命令の発
行を制御する命令発行制御部31とデコーダ32と解読
結果を格納するレジスタ33からなる。このプロセッサ
は、32ビットの単位命令4つから構成される一語を同
時に実行することが可能なVLIWプロセッサで、12
8ビット単位で命令フェッチされる。
【0007】まず、命令供給発行部20内の命令フェッ
チ制御部21は、PC2(プログラムカウンタ)、クロ
ック1に基づいて実行する命令のアドレスをアドレスバ
ス11からメモリ10に与える。これにより、メモリ1
0は指定されたアドレスに対応する命令を128ビット
のデータバスによって、命令レジスタ22内の4つの命
令レジスタに32ビットずつ命令を供給する。命令レジ
スタ22は、クロック1に基づいてメモリ10から供給
されたデータを格納する。これとともに、命令フェッチ
が完了したことを意味する命令フェッチフラグ23を”
1”とする。このとき、4つの命令レジスタ22には、
常に命令が格納される。なお、命令フェッチを開始した
とき(ジャンプ命令や割り込みが生じた場合等)、誤っ
た命令の解読を防止するため命令フェッチフラグ23
は”0”とされ、キャンセル信号34によりデコーダか
らNOP(No Operation)が出力される。
【0008】次に、命令解読部30におけるデコーダ3
2は、命令フェッチフラグ23により命令レジスタ22
に命令が格納されたという情報を得て、命令を解読した
結果を出力する。そして、レジスタ33はクロック1に
よって解読した結果を格納する。
【0009】最後に、レジスタ33に格納された解読結
果は、命令実行部に供給され(図示せず)、命令が実行
されることとなる。
【0010】
【発明が解決しようとする課題】しかしながら、上記従
来のVLIWプロセッサでは、命令フェッチを一語長よ
りも小さい単位で行った場合や命令を可変長とした場
合、命令レジスタに命令が供給されるタイミングに差異
が生じるため性能が劣化してしまうことがあった。
【0011】すなわち、従来のVLIWプロセッサは一
語長と命令フェッチ単位とが一致しているが、VLIW
を組み込みマイコンに適応するとコストの理由から命令
フェッチ幅が一語の幅よりも小さくせざるを得ない場合
がある。
【0012】また、たとえ最大語長と命令フェッチ単位
とが一致していても可変長命令の場合、2回の命令フェ
ッチによって初めて1つの命令を取り込むことができる
場合もある。
【0013】以下、具体的に図面を用いて説明する。 (1)命令フェッチを一語長よりも小さい単位で行った
場合 図14はプログラム例であり、図15は同プログラムを
実行した場合のパイプラインの流れを説明したものであ
る。
【0014】図14では、(10000000)16番地
に、メモリから読み込んだ結果をr0レジスタに格納さ
せる命令”mov (mem)、r0”が、(1000
0004)16番地にはr1レジスタの値を1つ増加させ
る命令”add #1、r1、r1”が、以下同様に
(1000001F)16番地まで命令が配置されてい
る。
【0015】この場合、図15に示すように、タイミン
グt1で(10000000)16番地の32ビット長の
2つの命令が、タイミングt2で(10000008)
16番地の32ビット長の2つの命令が命令フェッチさ
れ、タイミングt3で4つの命令が同時にデコード、t
4で実行される。しかし、(10000000)16番地
の命令”mov (mem)、r0”は、MEMステー
ジでメモリを読み込んだ結果をレジスタr0に書き込む
ものであるのに対して、後続する命令である(1000
000C)16番地の命令”add #1、r0、r0”
はレジスタr0の内容を使用するものであるためWBス
テージでレジスタの書込を行うまで内容を参照出来な
い。このため、レジスタ干渉が発生し、(100000
0C)16番地の命令”add #1、r0、r0”はタ
イミングt6で実行できず、タイミングt7で実行され
ることになる。
【0016】結果として、命令供給不足とレジスタ干渉
の為に、すべての命令を実行するまでに9サイクル必要
となる。 (2)命令を可変長とした場合 図16はプログラム例であり、図17は同プログラムを
実行した場合のパイプラインの流れを説明したものであ
る。
【0017】図16では、(10000000)16番地
に、メモリから読み込んだ結果をr0レジスタに格納さ
せる命令”mov (mem)、r0”が、(1000
0004)16番地にはレジスタr1の値を1つ増加させ
る命令”add #1、r1、r1”が、以下、同様に
(1000001F)16番地まで命令が配置されてい
る。なお、本命令中で、”add #1234567
8、r3、r3”命令は64ビット単位命令であり、他
は32ビット単位命令である。
【0018】この場合、図17に示すように、(100
0000C)16番地の命令は64ビット長の命令である
ため、タイミングt1、t2の2回の命令フェッチによ
って初めて4つの命令が揃い、タイミングt3で4つの
命令が同時にデコードされ、t4で実行される。しか
し、(10000000)16番地の命令”mov (m
em)、r0”は、MEMステージでメモリを読み込ん
だ結果を書き込んだものであるのに対して、後続する
(10000010)16番地の命令”add #1、r
0、r0”はレジスタr0の内容を使用するものである
ため、WBステージでレジスタの書込を行うまで、内容
を参照出来ない。このため、レジスタ干渉が発生し、
(10000010)16番地の命令”add #1、r
0、r0”はタイミングt6で実行できず、タイミング
t7で実行されることになる。
【0019】結果として、命令供給不足とレジスタ干渉
の為に、すべての命令を実行するまでに9サイクル必要
となる。
【0020】このように、上記従来のVLIWプロセッ
サは、なるべくハードウェアを簡略化することにより高
速化を図るものであるため、並列処理できる全ての命令
が揃った段階でこれらの命令を同時に実行するものであ
り、この前提が成り立たない場合には十分な性能を発揮
できないという問題点があった。
【0021】本願発明は、上記従来の課題を解決するも
ので、命令フェッチを一語長よりも小さい単位で行った
場合や命令を可変長とした場合であっても十分な性能を
発揮することができるプロセッサを提供するものであ
る。
【0022】
【課題を解決するための手段】本願発明は、並列実行で
きる全ての命令が命令フェッチされなくても、命令フェ
ッチされた命令から先に実行することを特徴とするVL
IWプロセッサである。
【0023】
【発明の実施の形態】以下、本発明について、図面を用
いて詳細に説明する。
【0024】(第1の実施の形態)本実施の形態は、一
語長よりも小さい単位で命令フェッチをした場合でも、
効率よく命令を実行可能とするプロセッサ等に関するも
のである。すなわち、4つの命令を同時に実行できるV
LIWプロセッサであっても、2つの命令が揃った段階
で、デコード、実行を開始することにより、極力レジス
タ干渉によるパイプラインインタロックを軽減するもの
である。また、先行的に実行した命令がI/Oに関する
命令である場合、より早くデータを得ることができる。 (1)プロセッサ 図1は本発明の第1の実施の形態におけるプロセッサの
ブロック図である。図13に示した従来のVLIWプロ
セッサと比較すると、(a)データバス112が一語長
よりも小さい64ビットである点、(b)4つの命令レ
ジスタのうち左側の2つの命令レジスタに命令が格納さ
れたか、右側の2つの命令レジスタに命令が格納された
かを示す位置情報124を持つ点、(c)NOPを出力
させるためのキャンセル信号134、135がある点で
異なる。
【0025】このプロセッサは、位置情報124により
命令レジスタ122のどこに命令が格納されたかを認識
し、この情報を元にキャンセル信号134、135を生
成しNOPを出力することにより、命令レジスタ122
に命令が格納されたものから順に解読・実行することを
実現している。
【0026】まず、命令供給発行部120内の命令フェ
ッチ制御部121は、PC102、クロック101に基
づいて実行する命令のアドレスをアドレスバス111か
らメモリ110に与える。これにより、メモリ110は
64ビットのデータバス112を介して、命令レジスタ
122内の左側の2つの命令レジスタに32ビットずつ
命令を供給する。命令レジスタ122は、クロック10
1に基づいてメモリ110から供給されたデータを格納
する。これとともに、命令フェッチが完了したことを表
すため命令フェッチフラグ123を”1”、さらに命令
レジスタ122内の左側の2つに命令が格納されたこと
を表すため位置情報124を”0”とする。このとき、
4つの命令レジスタ122のうち、左側の2つめの命令
レジスタには命令が格納されているが、右側の2つの命
令レジスタには命令が格納されていないことになる。な
お、従来と同様に命令フェッチが完了していない場合、
命令フェッチフラグ123は”0”であり、このためキ
ャンセル信号134、135は”0”となり、NOP信
号生成器137はNOPを出力する。
【0027】次に、命令解読部130におけるデコーダ
132は、命令フェッチフラグ123により命令レジス
タ122に命令が格納されたという情報を得て、命令を
解読した結果を出力する。このとき、位置情報124
が”0”であり命令レジスタ122のうち左側の2つの
命令レジスタにしか命令が格納されていないことを表し
ているので、キャンセル信号生成器131はキャンセル
信号134を”1”に、キャンセル信号135を”0”
にする。これにより、デコーダ132におけるNOP生
成器137のうち左側の2つからは命令レジスタ122
に格納された命令の解読結果が出力され、右側の2つか
らはNOPが出力される。そして、レジスタ133はク
ロック101によって解読した結果を格納する。なお、
NOP生成器137は、命令解読器136の出力とキャ
ンセル信号との論理積を演算するAND回路である。す
なわち、キャンセル信号134、135が”0”となっ
ているときは、解読器136の出力に関わらず、NOP
を意味する”0”を出力する。
【0028】最後に、レジスタ133に格納された解読
結果は、命令実行部に供給され(図示せず)、命令が実
行されることとなる。
【0029】なお、次の命令フェッチの際には、フェッ
チされた命令等は命令レジスタ122の右側の2つに格
納され、位置情報124もこれに対応して更新され、そ
してキャンセル信号134は”0”、キャンセル信号1
35は”1”となる。
【0030】次に、図14に示すプログラムを実行した
場合のパイプラインの流れについて、図2を用いて説明
する。
【0031】本プロセッサのパイプラインは、命令供給
発行部120によって命令フェッチを行うステージ(I
Fステージ)、命令解読部130によって命令フェッチ
した命令を解読するステージ(DECステージ)、解読
した命令を演算器を使って実行する実行ステージ(以下
EXステージ)、解読した命令がメモリアクセス命令で
あった場合にメモリアクセスを行うメモリステージ(M
EMステージ)、演算やメモリアクセス結果をレジスタ
に反映させる書込ステージ(以下WBステージ)の5段
パイプラインとなっている。さらに、レジスタ間演算の
様なEXステージで演算した実行結果を書き込んだレジ
スタの値は、WBステージでレジスタで実際の書込を行
わなくともEXステージ、或いはMEMステージから後
続する命令のEXステージへバイパスする事によって、
直後に配置した命令でも参照可能である。
【0032】図14では、(10000000)16番地
に、メモリから読み込んだ結果をr0レジスタに格納さ
せる命令”mov (mem)、r0”が、(1000
0004)16番地にはr1レジスタの値を1つ増加させ
る命令”add #1、r1、r1”が、以下、同様に
(1000001F)16番地まで命令が配置されてい
る。
【0033】この場合、図2に示すように、タイミング
t1で(10000000)16番地の32ビット長の2
つの命令が命令フェッチされ、タイミングt2で2つの
命令が同時にデコード、t3で実行される。そして、タ
イミングt6ではWBステージを終え、レジスタr0の
内容は使用できる状態になっている。
【0034】一方、タイミングt4で(1000001
8)16番地の命令”add #1、r0、r0”の命令
フェッチが行われ、タイミングt6でEXステージに入
る。このとき、レジスタr0は使用できる状態になって
いるため、レジスタ干渉によるパイプラインインタロッ
クは生じない。結果として、すべての命令を実行するま
でに8サイクル必要となる。
【0035】図16に示すパイプラインの流れと図2に
示すパイプラインの流れとを比較すると、(10000
018)16番地の命令”add #1、r0、r0”が
EXステージに入るのはタイミングt6で同一である。
しかし、(10000000)16番地の命令”mov
(mem)、r0”がWBステージを完了するのが、図
16ではタイミングt6であるのに対し、図2ではタイ
ミングt5である点で異なる。これは、図15では64
ビットの命令フェッチが2回行われ、128ビットの命
令フェッチが完了した段階でデコード、実行されている
のに対し、図2では64ビットの命令フェッチが行われ
ると次の64ビットの命令フェッチを待たずにデコー
ド、実行を行っているからである。このため、図16で
はすべての命令を実行するまでに9サイクル必要である
のに対し、図2では8サイクルで実行が完了している。
【0036】なお、本実施の形態では、命令の一語長が
128ビットであるのに対して、データバスが64ビッ
トである場合を例としているがこれに限られるものでは
ない。例えば、命令の一語長は64ビットでも256ビ
ットでも良く、データバスは32ビット、16ビット等
2のべき乗であれば足りる。すなわち、命令の一語長よ
りもデータバスの幅が小さく、一回の命令フェッチで命
令の一語長をフェッチできないケースであれば足りる。
この場合、命令の一語長を何回の命令フェッチでフェッ
チできるかによって、位置情報124、キャンセル信号
134、135の数が変わる。本実施の形態では、2回
の命令フェッチによって命令の一語長をフェッチしてい
るので、位置情報124は1ビット(1ビットで2つの
情報を表すことができる)で、キャンセル信号は2種類
設けている。また、4つの命令を同時に実行するVLI
Wを前提としているがこれに限られない。
【0037】また、本実施の形態では、メモリ110の
みが接続されている場合について説明したが、さらに1
28ビットで命令フェッチされるメモリが接続されてい
る場合であっても良い。例えば、内蔵メモリは速度重視
で128ビットで命令フェッチされるものとし、外部メ
モリはコストの関係で64ビットで命令フェッチされる
ものとし、データバス112を介して同列にメモリを接
続しメモリ領域によっていずれのメモリを使用するかを
切り換えてもよい。この場合、128ビットで命令フェ
ッチされるメモリから読み出された場合はもちろんのこ
と、64ビット単位で命令フェッチされるメモリから読
み出された場合も性能の劣化をなるべく起こさないよう
にできる。 (2)プログラム生成装置 以上、第1の実施の形態のプロセッサについて述べた
が、従来のVLIWプロセッサ用のプログラム生成装置
を本第1の実施の形態のプロセッサに適応しようとする
と、例えば、一語中に、命令”add #1、r0、r
0”が4つ連続した命令を実行する場合、命令供給が十
分で一語中の命令を同時に実行した場合にはr0レジス
タの値が”1”増加するのに対して、命令供給が不十分
で一語中の命令を1単位命令毎に逐次実行した場合には
r0レジスタの値が”4”増加し、命令供給の状態によ
って実行結果が異なってしまうという問題点が発生す
る。
【0038】(第1のプログラム生成装置の構成)図6
は本発明の第1の実施の形態における第1のプログラム
生成装置のブロック図である。
【0039】300は命令列を格納しているメモリ、3
20は一語内の単位命令を同時実行した場合と一語内の
単位命令を逐次実行した場合で実行結果が異なる命令列
を抽出する回避対象コード検出手段、330は問題とな
る命令列を回避する命令列を生成する逐次実行保証コー
ド生成手段、340は逐次実行保証コード生成手段が生
成したプログラムを格納する命令列格納手段である。
【0040】以上の様に構成された本発明の第1の実施
の形態の第1のプログラム生成装置について、以下、そ
の動作を説明する。
【0041】回避対象コード検出手段320はソースコ
ード格納手段300に格納された命令列を入力すると、
その命令列中で、一語内の単位命令を同時実行した場合
と、一語内の単位命令を逐次実行した場合で実行結果が
異なる命令列を回避対象命令列として抽出する。実行結
果が異なる命令列とは、具体的には、一語中の任意の単
位命令が出力する結果を後続する単位命令が参照する場
合の出力命令と参照命令の組み合わせであり、例えば、
一語中に含まれる命令”add r0、r1、r1”と
後続する命令”add r1、r2、r3”の組み合わ
せである。
【0042】図7は回避対象コード検出手段が回避対象
命令列を生成するアルゴリズムを示したものである。
【0043】ステップ401はソースプログラムから1
語を読み出すステップ、ステップ402は読み込んだ1
語を先頭側から1命令単位ずつ読み出すステップ、ステ
ップ403はステップ402で読み込んだ1命令単位中
の出力レジスタ情報を登録するステップ、ステップ40
4は後続する命令単位を先頭側から1命令単位ずつ読み
出すステップ、ステップ405はステップ404で読み
込んだ1命令単位中の参照レジスタを登録するステッ
プ、ステップ406はステップ402で登録した出力レ
ジスタとステップ405で登録した参照レジスタが一致
しているかどうかを判断するステップ、ステップ407
はステップ405で一致していた場合に後続する命令単
位を登録するステップ、ステップ408は後続する命令
単位があるかを判断し存在する場合にはステップ404
以降を実行する判断ステップ、ステップ409は登録さ
れた出力命令と参照命令の組み合わせが存在する場合に
は回避対象コードとして出力するステップ、ステップ4
10は後続する命令単位があるかを判断し存在する場合
にはステップ402以降を実行する判断ステップ、ステ
ップ411は後続する1語があるかを判断し存在する場
合にはステップ401以降を実行する判断ステップであ
る。
【0044】逐次実行保証コード生成手段330は、回
避対象コード検出手段320の出力する回避対象命令列
の情報を用いて、ソースコード格納手段300に格納さ
れた命令列を、同時実行した場合と逐次実行した場合で
動作が同一になる命令列への変換を行う。具体的には、
命令列中で使用されていないレジスタを検索し、問題と
なる命令列中の問題となるレジスタを出力する命令の出
力レジスタを使用されていないレジスタで置き換えると
共に、後続する語で問題となるレジスタを参照する命令
の参照レジスタを置き換えたレジスタに置き換える。例
えば、一語中に命令”add r0、r1、r1”と後
続する命令”add r1、r2、r3”が存在し、後
続する語に命令”add #1、r1、r1”が存在す
る場合(以降、”add r0、r1、r1 & ad
d r1、r2、r3 ; add #1、r1、r
1”と記述する。ここで”&”は同一語に含まれ、逐次
実行の場合には左から右へ実行する事を、”;”は、後
続する語との境界であることを示す)は、命令列中で使
用していないレジスタをr4とすると、問題となる命令
列中の問題となるレジスタr1を出力する命令”add
r0、r1、r1”の出力レジスタを使用されていな
いレジスタで置き換え”add r0、r1、r4”に
すると共に、後続する語で問題となるレジスタを参照す
る命令”add#1、r1、r1”の参照レジスタを置
き換えたレジスタに置き換え”add#1、r4、r
1”にする。変換された命令列は命令列格納手段340
に出力される。
【0045】使用されていないレジスタの検索は、検索
を全く行わずに問題となる命令語の前後にスタックへの
退避復帰処理を装入することによってレジスタを確保す
ることも可能であるし、最適化コンパイラのレジスタ割
付けの要素技術を流用することによって基本ブロック内
部や基本ブロックを越えた検索を行い、使用されていな
いレジスタが存在しない場合には問題となる命令語の前
後にスタックへの退避復帰処理を装入することによって
レジスタを確保するという方法も可能である。
【0046】(命令列生成装置の動作)次に具体的な命
令を解読実行した場合の本命令列生成装置の動作につい
て説明する。
【0047】図8(a)は、ソースコード格納手段30
0に格納された従来のVLIWプロセッサ用のプログラ
ム生成装置が生成した命令列である。
【0048】まず、(10000000)16番地から始
まる一語の処理を行う。回避対象コード検出手段320
はソースコード格納手段300に格納された(1000
0000)16番地から始まる命令列一語分”add #
1、r0、r0& add #1、r1、r1 & a
dd #1、r2、r2 & add#1、r3、r
3”を入力し、その命令列中で、一語を同時実行した場
合と一語内の単位命令を逐次実行した場合で実行結果が
異なる命令列がないかを検査する。この命令列中には問
題となる命令列は存在しないので、回避対象コード検出
手段320は問題となる命令列を出力しない。
【0049】逐次実行保証コード生成手段330は、回
避対象コード検出手段320が回避対象命令列を出力し
ないので、ソースコード格納手段300に格納された
(10000000)16番地から始まる命令列一語分を
そのまま命令列格納手段340へ出力する。
【0050】次に、後続する(10000010)16
地から始まる一語の処理を行う。回避対象コード検出手
段320はソースコード格納手段300に格納された
(10000010)16番地から始まる命令列一語分”
add r0、r1、r0& sub r0、r1、r
1 & add #1、r2、r2 & add#1、
r3、r3”を入力し、その命令列中で、一語を同時実
行した場合と一語内の単位命令を逐次実行した場合で実
行結果が異なる命令列がないかを検査する。この命令列
中には、”add r0、r1、r0 & sub r
0、r1、r1”が該当する命令となる。
【0051】逐次実行保証コード生成手段330は、回
避対象コード検出手段320の出力する回避対象命令
列”add r0、r1、r0 & sub r0、r
1、r1”の情報を用いて、ソースコード格納手段30
0に格納された命令列を、同時実行した場合と逐次実行
した場合で動作が同一になる命令列への変換を行う。後
続する命令列を参照し、使用していないレジスタとして
r4レジスタを使い、回避対象命令列中の命令”add
r0、r1、r0”を命令”add r0、r1、r
4”に変換すると共に、後続するr0を参照する命令を
検索し、命令”add #1、r0、r0を命令add
#1、r4、r0”に変換した後、命令列格納手段3
40に出力する。
【0052】同様にして、(10000020)16番地
から始まる命令列一語を処理する事によって、”add
r1、r2、r1 & sub r1、r2、r2
;add #1、r1、r1”を ”add r1、
r2、r5 & sub r1、r2、r2 ; ad
d #1、r5、r1”に変換する。
【0053】また、(10000030)16番地から始
まる命令列一語を処理し、回避対象コードが存在するが
使用していないレジスタが存在しない場合には、たとえ
ばr6レジスタをスタックへの退避命令”push r
6”により確保し、スタックからの復帰命令”pop
r6”により復元する事により、”add r2、r
3、r2 & sub r2、r3、r3”を”pus
h r6;add r2、r3、r6 & sub r
2、r3、r3;mov r6、r2 & pop r
6”に変換する。
【0054】以上の処理によって、回避対象コード検出
手段320は、図8(b)の様に、斜線部分の命令列を
検出し、逐次実行保証コード生成手段330は、図8
(c)の様に、回避対象コード検出手段320の出力す
る斜線部分の命令列の出力レジスタを変更すると共に、
後続する語に含まれる、濃い斜線部分の出力レジスタを
参照する参照レジスタを変更した命令列や追加したスタ
ックへのアクセス命令やNOP命令の命令列を命令列格
納手段340へ出力する。
【0055】(第2のプログラム生成装置の構成)図9
は本発明の第1の実施の形態における第2のプログラム
生成装置のブロック図である。
【0056】300は命令列を格納しているメモリシス
テム、310はプロセッサの命令フェッチ境界を検出す
る命令フェッチ境界検出手段、320は一語内の単位命
令を同時実行した場合と一語内の単位命令を命令フェッ
チ境界を単位に逐次実行した場合で実行結果が異なる命
令列を抽出する回避対象コード検出手段、330は問題
となる命令列を回避する命令列を生成する逐次実行保証
コード生成手段、340は逐次実行保証コード生成手段
が生成したプログラムを格納する命令列格納手段であ
る。
【0057】以上の様に構成された本発明の第1の実施
の形態における第2のプログラム生成装置について、以
下、その動作を説明する。
【0058】命令フェッチ境界検出手段310はソース
コード格納手段300に格納された命令列を入力する
と、その命令列中で、プロセッサの命令フェッチの境界
がどこに存在するかを検出する。本実施の形態ではプロ
セッサの命令フェッチ幅は64ビットであるので、プロ
セッサの命令フェッチ境界は、(1000000
0)16、(10000008)16、(1000001
0)16番地という様なアドレスの下位が0または8の番
地となる。
【0059】回避対象コード検出手段320はソースコ
ード格納手段300に格納された命令列、および、命令
フェッチ境界検出手段310から出力される命令フェッ
チ境界情報を入力すると、その命令列中で、一語内の単
位命令を同時実行した場合と一語内の単位命令を命令フ
ェッチ境界を単位に逐次実行した場合で実行結果が異な
る命令列を抽出する。実行結果が異なる命令列とは、具
体的には、一語中の任意の単位命令が出力する結果を後
続する単位命令が参照する場合の出力命令と参照命令の
組み合わせのうち、命令フェッチ境界を跨いでいるもの
であり、例えば、一語中に含まれる命令”add r
0、r1、r1”と後続する命令”addr1、r2、
r3”の組み合わせで、命令フェッチ境界を跨いでいる
ものである。
【0060】逐次実行保証コード生成手段330は、回
避対象コード検出手段320の出力する回避対象命令列
の情報を用いて、ソースコード格納手段300に格納さ
れた命令列を、同時実行した場合と逐次実行した場合で
動作が同一になる命令列への変換を行う。具体的には、
命令列中で使用されていないレジスタを検索し、問題と
なる命令列中の問題となるレジスタを出力する命令の出
力レジスタを使用されていないレジスタで置き換えると
共に、後続する語で問題となるレジスタを参照する命令
の参照レジスタを置き換えたレジスタに置き換える。例
えば、一語中に命令”add r0、r1、r1”と後
続する命令”add r1、r2、r3”が存在し、後
続する語に命令”add #1、r1、r1”が存在す
る場合(以降、”add r0、r1、r1 & ad
d r1、r2、r3 ; add #1、r1、r
1”と記述する。ここで”&”は同一語に含まれ、逐次
実行の場合には左から右へ実行する事を、”;”は、次
の語との境界であることを示す)は、命令列中で使用し
ていないレジスタをr4とすると、問題となる命令列中
の問題となるレジスタr1を出力する命令”add r
0、r1、r1”の出力レジスタを使用されていないレ
ジスタで置き換え”add r0、r1、r4”にする
と共に、後続する語で問題となるレジスタを参照する命
令”add #1、r1、r1”の参照レジスタを置き
換えたレジスタに置き換え”add #1、r4、r
1”にする。変換された命令列は命令列格納手段340
に出力される。
【0061】(命令列生成装置の動作)次に具体的な命
令を解読実行した場合の本命令列生成装置の動作につい
て説明する。
【0062】図10(a)は、ソースコード格納手段3
00に格納された従来のVLIWプロセッサ用のプログ
ラム生成装置が生成した命令列である。
【0063】まず、(10000000)16番地から始
まる一語の処理を行う。命令境界検出手段310はソー
スコード格納手段300に格納された(1000000
0)16番地から始まる命令列一語分中の命令境界であ
る、(10000008)16番地を検出する。
【0064】回避対象コード検出手段320はソースコ
ード格納手段300に格納された(10000000)
16番地から始まる命令列一語分”add #1、r0、
r0& add #1、r1、r1 & add #
1、r2、r2 & add#1、r3、r3”を入力
し、その命令列中で、一語を同時実行した場合と、一語
内の命令境界検出手段310の出力する命令フェッチ境
界を単位として単位命令を逐次実行した場合で実行結果
が異なる命令列がないかを検査する。つまり、命令列一
語分”add #1、r0、r0 & add #1、
r1、r1& add #1、r2、r2 & add
#1、r3、r3”を同時実行した場合と、”add
#1、r0、r0 & add #1、r1、r1”
の2つの単位命令と ”add #1、r2、r2 &
add #1、r3、r3”の2つの単位命令を逐次
実行した場合に実行結果が異なる事はないかを検査す
る。この命令列中には問題となる命令列は存在しないの
で、回避対象コード検出手段320は問題となる命令列
を出力しない。
【0065】逐次実行保証コード生成手段は330は、
回避対象コード検出手段320が回避対象命令列を出力
しないので、ソースコード格納手段300に格納された
(10000000)16番地から始まる命令列一語分を
そのまま命令列格納手段340へ出力する。
【0066】次に、後続する(10000010)16
地から始まる一語の処理を行う。命令境界検出手段31
0はソースコード格納手段300に格納された(100
00010)16番地から始まる命令列一語分中の命令境
界である、(10000018)16番地を検出する。
【0067】回避対象コード検出手段320はソースコ
ード格納手段300に格納された(10000010)
16番地から始まる命令列一語分”add r0、r1、
r0& sub r0、r1、r1 & add #
1、r2、r2 & add#1、r3、r3”を入力
し、その命令列中で、一語を同時実行した場合と、一語
内の命令境界検出手段310の出力する命令フェッチ境
界を単位として単位命令を逐次実行した場合で実行結果
が異なる命令列がないかを検査する。つまり、命令列一
語分”add r0、r1、r0 & sub r0、
r1、r1& add #1、r2、r2 & add
#1、r3、r3”を同時実行した場合と、”add
r0、r1、r0 & sub r0、r1、r1”
の2つの単位命令と”add #1、r2、r2 &
add #1、r3、r3”の2つの単位命令を逐次実
行した場合に実行結果が異なる事はないかを検査する。
この命令列中にも問題となる命令列は存在しないので、
回避対象コード検出手段320は問題となる命令列を出
力しない。
【0068】逐次実行保証コード生成手段330は、回
避対象コード検出手段320が回避対象命令列を出力し
ないので、ソースコード格納手段300に格納された
(10000010)16番地から始まる命令列一語分を
そのまま命令列格納手段340へ出力する。
【0069】次に、後続する(10000020)16
地から始まる一語の処理を行う。命令境界検出手段31
0はソースコード格納手段300に格納された(100
00020)16番地から始まる命令列一語分中の命令境
界である、(10000028)16番地を検出する。
【0070】回避対象コード検出手段320はソースコ
ード格納手段300に格納された(10000020)
16番地から始まる命令列一語分”add #1、r0、
r0& add r1、r2、r1 & sub r
1、r2、r2 & add#1、r3、r3”を入力
し、その命令列中で、一語を同時実行した場合と、一語
内の命令境界検出手段210の出力する命令フェッチ境
界を単位として単位命令を逐次実行した場合で実行結果
が異なる命令列がないかを検査する。つまり、命令列一
語分”add #1、r0、r0 & add r1、
r2、r1& sub r1、r2、r2 & add
#1、r3、r3”を同時実行した場合と、”add
#1、r0、r0 & add r1、r2、r1”
の2つの単位命令と”sub r1、r2、r2 &
add #1、r3、r3”の2つの単位命令を逐次実
行した場合に実行結果が異なる事はないかを検査する。
この場合、”add r1、r2、r1 & sub
r1、r2、r2”命令が該当する命令となる。
【0071】逐次実行保証コード生成手段330は、回
避対象コード検出手段320の出力する回避対象命令
列”add r1、r2、r1 & sub r1、r
2、r2”の情報を用いて、ソースコード格納手段30
0に格納された命令列を、同時実行した場合と逐次実行
した場合で動作が同一になる命令列への変換を行う。後
続する命令列を参照し、使用していないレジスタとして
r4レジスタを使い、回避対象命令列中の命令”add
r1、r2、r1”を命令”add r1、r2、r
5”に変換すると共に、後続するr1を参照する命令を
検索し、命令”add #1、r1、r1”を命令”a
dd #1、r5、r1”に変換した後、命令列格納手
段340に出力する。
【0072】以降、(10000030)16番地から始
まる命令列一語は問題が無いのでそのまま命令列格納手
段340に出力する。
【0073】以上の処理によって、命令フェッチ境界検
出手段310は図10(a)の太線で示す命令フェッチ
境界情報を出力し、回避対象コード検出手段320は、
図10(a)の様に、斜線部分の命令列を検出し、逐次
実行保証コード生成手段330は、図10(b)の様
に、回避対象コード検出手段320の出力する斜線部分
の命令列の出力レジスタを変更すると共に、後続する語
に含まれる、出力レジスタを参照する濃い斜線部分の命
令列の参照レジスタを変更し、命令列を命令列格納手段
340へ出力する。
【0074】なお、本実施の形態では、命令フェッチ幅
64ビット、128ビット固定長、最大同時実行4命令
のVLIWプロセッサを想定しているが、これらの値は
特に限定しない。例えば、命令の一語長は64ビットで
も256ビットでも良く、データバスの幅は16ビット
でも32ビットでも良く、すなわち、命令の一語長より
もデータバスの幅が小さいケースが存在すれば足りる。
【0075】また、逐次実行保証コード生成手段は、命
令列中で使用されていないレジスタを検索し、問題とな
る命令列中の問題となるレジスタを出力する命令の出力
レジスタを使用されていないレジスタで置き換えると共
に、後続する語で問題となるレジスタを参照する命令の
参照レジスタを置き換えたレジスタに置き換えるアルゴ
リズムで説明を行ったが、あらかじめ問題となるレジス
タを使用されていないレジスタに転送し、問題となるレ
ジスタを参照する命令の参照レジスタを置き換えたレジ
スタに置き換えるアルゴリズムを行っても構わない。具
体的には、実施例では、”add r0,r1,r0
& sub r0,r1,r1 ; add #1,r
0,r0”の命令列を”mov r0、r4 ; ad
d r0,r1,r0 & add r4,r1,r1
; add #1,r0,r0”としてもよい。
【0076】また、回避対象コード検出手段が出力する
命令列は、出力命令と参照命令の組み合わせであるの
で、2命令とは限らない。参照命令が複数ある場合には
3命令以上の組み合わせになる場合も存在する。
【0077】また、命令列格納手段は、フロッピーディ
スクやテープやハードディスクやメモリなどの記録媒体
でも構わないし、コンパイラやアセンブラオプティマイ
ザ等の最適化プログラムへの入力ファイルであっても構
わない。最適化プログラムで処理を繰り返すことにより
出力ファイルの更なる最適化を図ることが可能となる。
【0078】また、命令フェッチ境界検出手段の認識す
る命令フェッチ幅は、固定である必要はなく、例えば、
それぞれのメモリ領域毎に異なる値を設定しても構わな
い。その場合には、命令フェッチ境界検出手段は、アド
レス情報で命令フェッチ幅を判断する。
【0079】また、命令フェッチ幅情報は、プログラム
生成装置に組み込んでも構わないし、外部から情報を与
えても構わない。具体的には、コンパイラやアセンブラ
やリンカに、定数として組み込んだ形で指定しても構わ
ないし、引き数や環境ファイルの形で指定しても構わな
い。また、指定する命令フェッチ幅は一定でも構わない
し、空間毎に個別に与えても構わない。
【0080】(第2の実施の形態)本実施の形態は、可
変長命令についても効率よく命令を実行できるプロセッ
サ等に関するものである。 (1)プロセッサ 図3は本発明第2の実施の形態におけるVLIWプロセ
ッサのブロック図である。このプロセッサは、32ビッ
トと64ビットの2通りの単位命令を持ち、最大4つの
単位命令から構成される可変長の一語を同時に実行可能
なVLIWプロセッサである。
【0081】基本的な構造は図1のVLIWプロセッサ
と同じであるが、可変長命令を扱うために、(a)命令
供給発行部220において、メモリ110から128バ
イト単位で命令フェッチした命令を命令バッファ225
を用いて命令バッファ中に32ビットを1単位とし最大
8個のレジスタに格納している点、(b)32ビット命
令または64ビット命令を切り換えるためにセレクタ2
29を有している点で異なる。
【0082】このVLIWプロセッサは同時に実行でき
る4つの命令が2回の命令フェッチによって初めて供給
されるものであっても、4つの命令の命令フェッチを待
たずにデコード、実行するものである。なお、同時に実
行できる最大の命令数は4つであるが、命令中に埋め込
まれた同時実行できる命令の境界情報により、4以下の
同時実行できる命令の数を指定できるが、この機構につ
いては図面を省略している。
【0083】以上の様に構成された本発明の第2の実施
の形態のプロセッサについて、以下、その動作を説明す
る。 (命令供給部220)まず、命令供給発行部220内の
命令フェッチ制御部221は、PC202、クロック2
01に基づいて実行する命令のアドレスをアドレスバス
211からメモリ210に与える。これにより、メモリ
210は命令を128ビットのデータバス212を介し
て、命令レジスタ222内の4つの命令レジスタに32
ビットづつ命令を供給する。命令レジスタ222は、ク
ロック201に基づいてメモリ210から供給されたデ
ータを格納する。これとともに、4つの命令レジスタに
命令を格納したことを表すため、格納フラグ223を
(00001111)2とする。なお、命令バッファ2
25は128バイトで命令フェッチされた命令を一旦格
納しておくことにより、命令レジスタ222に最大25
6ビットの命令を格納するためのものである。 (命令解読部230)次に、命令解読部230における
デコーダ232のうち第1命令解読器は一番左端のセレ
クタ229の出力をデコードする。デコードの際には、
命令が32ビット命令である64ビット命令かを認識し
命令長情報241とデコード結果242とを出力する。
具体的には、図4に示すように32ビットを1単位する
先頭に32ビット命令か64ビット命令かを示すフォー
マット情報が割り当てられているので、この情報をその
まま命令長情報241として出力する。なお、セレクタ
229はそれぞれ、命令が32ビット命令であるか64
ビット命令であるかに関係なく常に64ビットのデータ
を出力する。
【0084】デコーダ232のうち第1命令発行器は、
格納フラグ223の値(00001111)2を用いて
命令が供給されているか否かを判断する。具体的には、
命令が32ビット命令であった場合には、使用フラグ更
新部240が(00000000)2を命令長情報24
1に基づいて左から”1”を入れつつ右に1ビットシフ
トし(10000000)2を得る。そして、これと格
納フラグ223の値(00001111)2とについて
それぞれのビット単位で論理積を演算し、(00000
000)2となった場合(すべてのビットが”0”)に
は命令が供給されていると判断し”1”をキャンセル信
号234として出力する。なお、64ビット命令の場
合、使用フラグ更新部240は左から”1”を入れつつ
右に2ビットシフトし((11000000)2を得
て、格納フラグ223の値(00001111)2つい
てそれぞれのビットの論理積を演算し、(000000
00)2を得て命令が供給されていると判断し”1”を
キャンセル信号234として出力する。なお、使用フラ
グ更新部240は、キャンセル信号234が”0”すな
わち命令供給不足であった場合、シフトはしない。
【0085】一番左端の格納フラグシフタ239は、命
令長情報241に基づいて、右から”1”を入れつつ格
納フラグ223を左シフトする。具体的には、第1命令
解読部で32ビット命令を解読した場合は格納フラグ2
23(00001111)2を1ビット左にシフトして
(00011111)2を得てこれを第2命令発行器に
渡す。64ビット命令であった場合は、2ビット左にシ
フトして(00111111)2を得てこれを第2命令
発行器に渡す。例えば、格納フラグ223が(0000
1111)2であるにも関わらず、第1、2命令解読部
でそれぞれ64ビット命令が解読された場合、第3命令
発行器は格納フラグシフタ239から(1111111
1)2を受け取り、命令供給不足と判断する。これとと
もに、第2命令解読器に対応したセレクタ239で選択
すべき命令レジスタ222を切り換える。なお、第1〜
第4命令解読器で使用したビット数は使用フラグ更新部
240で計算され、使用フラグ224として格納され
る。
【0086】そして、NOP生成器237はデコード結
果を出力する。NOP生成器237は図1のNOP生成
器137と同じで、解読器236の出力とキャンセル信
号234との論理積を演算するAND回路である。すな
わち、キャンセル信号234が”0”となっているとき
は、解読器236の出力に関わらず、NOPを意味す
る”0”を出力する。
【0087】次に、図16のプログラムを実行した場合
のパイプラインの流れについて、図5を用いて説明す
る。
【0088】図16では、(10000000)16番地
に、メモリから読み込んだ結果をr0レジスタに格納さ
せる命令”mov (mem)、r0”が、(1000
0004)16番地にはレジスタr1の値を1つ増加させ
る命令”add #1、r1、r1”が、以下、同様に
(1000001F)16番地まで命令が配置されてい
る。なお、本命令中で、”add #1234567
8、r3、r3”命令は64ビット単位命令であり、他
は32ビット単位命令である。
【0089】この場合、図5に示すように、(1000
0010)16番地の命令は64ビット長の命令であるた
め、タイミングt1、t2の2回の命令フェッチによっ
て初めて4つの命令が揃うが、このプロセッサでは図5
に示すように2回目の命令フェッチをまたずに(100
00000)16番地の命令”mov (mem)、r
0”を含む3つの命令をデコード、実行する。そして、
タイミングt6でレジスタr0が使用できる状態にな
る。
【0090】一方、タイミングt3で(1000002
9)16番地の命令”add #1、r0、r0”の命令
フェッチが行われ、タイミングt5でEXステージに入
るが、レジスタr0が使用できる状態にまだなっていな
いためレジスタ干渉によるパイプラインインタロックが
発生する。そして、タイミングt6でレジスタr0は使
用できる状態になっているため、”add #1、r
0、r0”が実行される。結果として、すべての命令を
実行するまでに8サイクル必要となる。
【0091】図17に示すパイプラインの流れと図5に
示すパイプラインの流れとを比較すると、(10000
020)16番地の命令”add #1、r0、r0”が
EXステージに入るのはタイミングt5で同一である。
しかし、(10000000)16番地の命令”mov
(mem)、r0”がWBステージを完了するのが、図
17ではタイミングt7であるのに対し、図5ではタイ
ミングt6である点で異なる。これは、図17では並列
実行する4つの命令全てがそろった段階でデコード、実
行されているのに対し、図5では2回目の命令フェッチ
を待たず(4つ目の命令が命令フェッチされるのを待た
ずに)にデコード、実行を行っているからである。この
ため、図17ではすべての命令を実行するまでに9サイ
クル必要(タイミングt5、t6でパイプラインインタ
ロックが発生)であるのに対し、図5では8サイクルで
実行が完了(タイミングt5でのみパイプラインインタ
ロックが発生)している。
【0092】なお、タイミングt2で、(100000
10)16番地の命令”add #12345678、r
3、r3”命令がフェッチされると同時に、(1000
0020)16番地までの命令もフェッチされるが、”a
dd #12345678、r3、r3”命令が同時に
実行できる命令の境界であるため、この命令のみをタイ
ミングt3で実行する。
【0093】また、本実施の形態では、4つの命令を同
時に実行できるハードウェアを持つVLIWプロセッサ
に対し、常に4つの命令を供給することを前提としてい
るが、同じハードウェアに対して、同時実行できる命令
の境界を示す技術を用いて4つ未満の命令を供給するも
のとしても良い。この場合であっても、同時実行できる
命令の数に満たない場合であっても、1回の命令フェッ
チごとにデコード、実行を行う。 (プログラム生成装置) (第1のプログラム生成装置の構成)図6は本発明の第
2の実施の形態における第1のプログラム生成装置のブ
ロック図である。
【0094】基本的な構造は第1の実施の形態の第1の
プログラム生成装置と同じであるが、単位命令や一語の
ビット幅が可変であることに起因して、回避対象コード
検出手段320、および、逐次実行保証コード生成手段
330が、単位命令中の並列実行境界情報301、およ
び、フォーマット情報302を認識する点が異なる。
【0095】(命令列生成装置の動作)以上の様に構成
された本発明の第2の実施の形態の第1のプログラム生
成装置について、以下、具体的な命令を解読実行した場
合の動作を説明する。
【0096】図11(a)は、ソースコード格納手段3
00に格納された従来のVLIWプロセッサ用のプログ
ラム生成装置が生成した命令列である。
【0097】まず、(10000000)16番地から始
まる一語の処理を行う。回避対象コード検出手段320
はソースコード格納手段300に格納された(1000
0000)16番地から始まる命令列一語分”add #
1、r0、r0& add #1、r1、r1 & a
dd #1、r2、r2 & add#1234567
8、r3、r3”を入力し、その命令列中で、一語を同
時実行した場合と一語内の単位命令を逐次実行した場合
で実行結果が異なる命令列がないかを検査する。この命
令列中には問題となる命令列は存在しないので、回避対
象コード検出手段320は問題となる命令列を出力しな
い。
【0098】逐次実行保証コード生成手段330は、回
避対象コード検出手段320が回避対象命令列を出力し
ないので、ソースコード格納手段300に格納された
(10000000)16番地から始まる命令列一語分を
そのまま命令列格納手段340へ出力する。
【0099】次に、後続する(10000014)16
地から始まる一語の処理を行う。回避対象コード検出手
段320はソースコード格納手段300に格納された
(10000014)16番地から始まる命令列一語分”
add r0、r1、r0& sub #123456
78、r0、r1 & add #1、r2、r2 &
add #1、r3、r3”を入力し、その命令列中
で一語を同時実行した場合と一語内の単位命令を逐次実
行した場合で実行結果が異なる命令列がないかを検査す
る。この命令列中には、”add r0、r1、r0
& sub#12345678、r0、r1”が該当す
る命令となる。
【0100】逐次実行保証コード生成手段330は、回
避対象コード検出手段320の出力する回避対象命令
列”add r0、r1、r0 & sub #123
45678、r0、r1”の情報を用いて、ソースコー
ド格納手段300に格納された命令列を、同時実行した
場合と逐次実行した場合で動作が同一になる命令列への
変換を行う。後続する命令列を参照し、使用していない
レジスタとしてr4レジスタを使い、回避対象命令列中
の命令”add r0、r1、r0”を命令”add
r0、r1、r4”に変換すると共に、後続するr0を
参照する命令を検索し、命令”add #1、r0、r
0”を命令”add #1、r4、r0”に変換した
後、命令列格納手段340に出力する。
【0101】以降、(10000028)16番地から始
まる命令列一語を処理する事によって、”add r
1、r2、r1 & sub #12345678、r
1、r2 ; add #1、r1、r1 を add
r1、r2、r5 & sub #1234567
8、r1、r2 ; add #1、r5、r1”に、
(1000003c)16番地から始まる命令列一語を処
理することによって、”add r2、r3、r2 &
sub #12345678、r2、r3”を”ad
d r2、r3、r6 & sub #1234567
8、r2、r3”に変換する。
【0102】以上の処理によって、回避対象コード検出
手段320は、図11(b)の様に、網かけ部分の命令
列を検出し、逐次実行保証コード生成手段330は、図
11(c)の様に、回避対象コード検出手段320の出
力する網かけ部分の命令列の出力レジスタを変更すると
共に、後続する語に含まれる、出力レジスタを参照する
濃い網かけ部分の命令列の参照レジスタを変更し、命令
列を命令列格納手段340へ出力する。
【0103】(第2のプログラム生成装置の構成)図9
は本発明の第2の実施の形態における第2のプログラム
生成装置のブロック図である。
【0104】基本的な構造は第1の実施の形態の第2の
プログラム生成装置と同じであるが、単位命令や一語の
ビット幅が可変であることに起因して、回避対象コード
検出手段320、および、逐次実行保証コード生成手段
330が、フォーマット情報302を認識する点、及
び、回避対象コード検出手段320において、命令フェ
ッチ境界が単位命令中にあった場合には、命令フェッチ
境界が該当する単位命令の先頭に存在すると見なして評
価する点、及び、命令フェッチ境界検出手段の検出する
命令フェッチ幅が目的とするプロセッサの命令フェッチ
幅である128ビットとなっている点が異なる。
【0105】(命令列生成装置の動作)次に具体的な命
令を解読実行した場合の本命令列生成装置の動作につい
て説明する。
【0106】図12(a)は、ソースコード格納手段3
00に格納された従来のVLIWプロセッサ用のプログ
ラム生成装置が生成した命令列である。
【0107】まず、(10000000)16番地から始
まる一語の処理を行う。命令境界検出手段310はソー
スコード格納手段300に格納された(1000000
0)16番地から始まる命令列一語分中の命令境界であ
る、(10000010)16番地を検出する。
【0108】回避対象コード検出手段320はソースコ
ード格納手段300に格納された(10000000)
16番地から始まる命令列一語分”add #1、r0、
r0& add #1、r1、r1 & add #
1、r2、r2 & add#12345678、r
3、r3”を入力し、その命令列中で、一語を同時実行
した場合と一語内の命令境界検出手段310の出力する
命令フェッチ境界を単位として単位命令を逐次実行した
場合で実行結果が異なる命令列がないかを検査する。こ
の命令列中には問題となる命令列は存在しないので、回
避対象コード検出手段320は問題となる命令列を出力
しない。
【0109】逐次実行保証コード生成手段330は、回
避対象コード検出手段320が回避対象命令列を出力し
ないので、ソースコード格納手段300に格納された
(10000000)16番地から始まる命令列一語分を
そのまま命令列格納手段340へ出力する。
【0110】次に、後続する(10000014)16
地から始まる一語の処理を行う。命令境界検出手段31
0はソースコード格納手段300に格納された(100
00014)16番地から始まる命令列一語分中の命令境
界である、(10000020)16番地を検出する。
【0111】回避対象コード検出手段320はソースコ
ード格納手段300に格納された(10000014)
16番地から始まる命令列一語分”add r0、r1、
r0& sub #12345678、r0、r1 &
add #1、r2、r2 & add #1、r
3、r3”を入力し、その命令列中で、一語を同時実行
した場合と、一語内の命令境界検出手段310の出力す
る命令フェッチ境界を単位として単位命令を逐次実行し
た場合で実行結果が異なる命令列がないかを検査する。
つまり、命令列一語分”add r0、r1、r0 &
sub #12345678、r0、r1 & ad
d #1、r2、r2 & add #1、r3、r
3”を同時実行した場合と、”add r0、r1、r
0 & sub #12345678、r0、r1”の
2つの単位命令と”add #1、r2、r2 & a
dd #1、r3、r3”の2つの単位命令を逐次実行
した場合に実行結果が異なる事はないかを検査する。こ
の命令列中にも問題となる命令列は存在しないので、回
避対象コード検出手段320は問題となる命令列を出力
しない。
【0112】逐次実行保証コード生成手段330は、回
避対象コード検出手段320が回避対象命令列を出力し
ないので、ソースコード格納手段300に格納された
(10000014)16番地から始まる命令列一語分を
そのまま命令列格納手段340へ出力する。
【0113】次に、後続する(10000028)16
地から始まる一語の処理を行う。命令境界検出手段31
0はソースコード格納手段300に格納された(100
00028)16番地から始まる命令列一語分中の命令境
界である、(10000030)16番地を検出する。
【0114】回避対象コード検出手段320はソースコ
ード格納手段300に格納された(10000028)
16番地から始まる命令列一語分”add #1、r0、
r0& add r1、r2、r1 & sub #1
2345678、r1、r2 & add #1、r
3、r3”を入力し、その命令列中で、一語を同時実行
した場合と、一語内の命令境界検出手段310の出力す
る命令フェッチ境界を単位として単位命令を逐次実行し
た場合で実行結果が異なる命令列がないかを検査する。
つまり、命令列一語分”add #1、r0、r0 &
add r1、r2、r1 & sub #1234
5678、r1、r2 & add #1、r3、r
3”を同時実行した場合と、”add #1、r0、r
0 & add r1、r2、r1”の2つの単位命令
と”sub #12345678、r1、r2 & a
dd #1、r3、r3”の2つの単位命令を逐次実行
した場合に実行結果が異なる事はないかを検査する。こ
の場合、”add r1、r2、r1 & sub #
12345678、r1、r2”命令が該当する命令と
なる。
【0115】逐次実行保証コード生成手段330は、回
避対象コード検出手段320の出力する回避対象命令
列”add r1、r2、r1 & sub #123
45678、r1、r2”の情報を用いて、ソースコー
ド格納手段300に格納された命令列を、同時実行した
場合と逐次実行した場合で動作が同一になる命令列への
変換を行う。後続する命令列を参照し、使用していない
レジスタとしてr4レジスタを使い、回避対象命令列中
の命令”add r1、r2、r1”を命令”add
r1、r2、r5”に変換すると共に、後続するr1を
参照する命令を検索し、命令”add #1、r1、r
1”を命令”add #1、r5、r1”に変換した
後、命令列格納手段340に出力する。
【0116】以降、(10000030)16番地から始
まる命令列一語は問題が無いのでそのまま命令列格納手
段340に出力する。
【0117】以上の処理によって、命令フェッチ境界検
出手段310は図12(a)の太線で示す命令フェッチ
境界情報を出力し、回避対象コード検出手段320は、
図12(a)の様に、網かけ部分の命令列を検出し、逐
次実行保証コード生成手段330は、図12(b)の様
に、回避対象コード検出手段320の出力する網かけ部
分の命令列の出力レジスタを変更すると共に、後続する
語に含まれる、出力レジスタを参照する濃い網かけ部分
の命令列の参照レジスタを変更し、命令列を命令列格納
手段340へ出力する。
【0118】なお、本実施の形態では、命令フェッチ幅
128ビット、32ビットと64ビットの可変長、最大
同時実行4命令のVLIWプロセッサを想定している
が、これらの値は特に限定しない。
【0119】また、逐次実行保証コード生成手段は、命
令列中で使用されていないレジスタを検索し、問題とな
る命令列中の問題となるレジスタを出力する命令の出力
レジスタを使用されていないレジスタで置き換えると共
に、後続する語で問題となるレジスタを参照する命令の
参照レジスタを置き換えたレジスタに置き換えるアルゴ
リズムで説明を行ったが、第1の実施例における第2の
プログラム生成装置と同じく、あらかじめ問題となるレ
ジスタを使用されていないレジスタに転送し、問題とな
るレジスタを参照する命令の参照レジスタを置き換えた
レジスタに置き換えるアルゴリズムを行っても構わな
い。
【0120】また、回避対象コード検出手段が出力する
命令列は、出力命令と参照命令の組み合わせであるの
で、2命令とは限らない。参照命令が複数ある場合には
3命令以上の組み合わせになる場合も存在する。
【0121】また、命令列格納手段は、フロッピーディ
スクやテープやハードディスクやメモリなどの記録媒体
でも構わないし、コンパイラやアセンブラオプティマイ
ザ等の最適化プログラムへの入力ファイルであっても構
わない。最適化プログラムで処理を繰り返すことにより
出力ファイルの更なる最適化を図ることが可能となる。
【0122】また、命令フェッチ境界検出手段の認識す
る命令フェッチ幅は、固定である必要はなく、例えば、
それぞれのメモリ領域毎に異なる値を設定しても構わな
い。その場合には、命令フェッチ境界検出手段は、アド
レス情報で命令フェッチ幅を判断する。
【0123】また、命令フェッチ幅情報は、プログラム
生成装置に組み込んでも構わないし、外部から情報を与
えても構わない。具体的には、コンパイラやアセンブラ
やリンカに、定数として組み込んだ形で指定しても構わ
ないし、引き数や環境ファイルの形で指定しても構わな
い。また、指定する命令フェッチ幅は一定でも構わない
し、空間毎に個別に与えても構わない。
【0124】
【発明の効果】以上のように、本願発明によれば、命令
供給が十分に行えない環境で使用されても供給されたも
のから事項する事により、性能劣化を抑制することがで
きる。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態におけるプロセッサ
のブロック構成図
【図2】本発明の第1の実施の形態における第1のプロ
グラム例及びパイプライン図
【図3】本発明の第1、第2の実施の形態における第2
のプログラム例及びパイプライン図
【図4】本発明の第1、第2の実施の形態における第1
のプログラム生成装置のブロック図
【図5】本発明の第1、第2の実施の形態における第1
のプログラム生成装置におけるプログラム図
【図6】本発明の第1、第2の実施の形態における第1
のプログラム生成装置のブロック図
【図7】本発明の第1の実施の形態における第1のプロ
グラム生成装置における回避対象コード検出手段の検出
アルゴリズムを示す図
【図8】本発明の第1の実施の形態における第1のプロ
グラム生成装置のプログラム図
【図9】本発明の第1、第2の実施の形態における第2
のプログラム生成装置のブロック図
【図10】本発明の第1の実施の形態における第2のプ
ログラム生成装置のプログラム図
【図11】本発明の第2の実施の形態における第1のプ
ログラム生成装置のプログラム図
【図12】本発明の第2の実施の形態における第2のプ
ログラム生成装置のプログラム図
【図13】第1の従来例におけるプロセッサのブロック
構成図
【図14】第1のプログラム例を示す図
【図15】従来例における第1のプログラム例のパイプ
ライン図
【図16】第2のプログラム例を示す図
【図17】従来例における第2のプログラム例のパイプ
ライン図
【符号の説明】
101、201 クロック 102、202 PC 110、210 メモリ 111、211 アドレスバス 112、212 データバス 120、220 命令供給発行部 121、221 命令フェッチ制御部 122、222 命令レジスタ 123 命令フェッチフラグ 124 位置情報 130、230 命令解読部 131 キャンセル信号生成部 132、232 デコーダ 133、233 レジスタ 134、135、234 キャンセル信号 136、236 解読器 137、237 NOP信号生成器 223 格納フラグ 224 使用フラグ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 田中 哲也 大阪府門真市大字門真1006番地 松下電器 産業株式会社内 Fターム(参考) 5B013 AA16 DD04

Claims (11)

    【特許請求の範囲】
  1. 【請求項1】 複数の命令を同時に実行するVLIWプ
    ロセッサにおいて、 並列実行できる全ての命令が命令フェッチされなくて
    も、命令フェッチされた命令から先に実行することを特
    徴とするVLIWプロセッサ。
  2. 【請求項2】 複数の固定長命令を同時に実行するVL
    IWプロセッサにおいて、 命令フェッチは同時に実行できる命令の総ビット数より
    も小さい単位で行い、かつ並列実行できる全ての命令が
    命令フェッチされなくても、命令フェッチされた命令か
    ら先に実行することを特徴とするVLIWプロセッサ。
  3. 【請求項3】 複数の固定長命令を同時に実行するVL
    IWプロセッサにおいて、 同時に実行できる命令の総ビット数よりも小さい単位で
    命令フェッチを行い命令レジスタに格納する命令供給発
    行部と、 前記命令レジスタのうちいずれのレジスタに命令が格納
    されたかを示す位置情報と、 前記位置情報に基づいて、命令が格納されていない命令
    レジスタに対応する解読結果としてNOPを出力し、命
    令が格納されている命令レジスタに対応する解読結果は
    そのまま出力するNOP生成部とを有することを特徴と
    するVLIWプロセッサ。
  4. 【請求項4】 複数の可変長命令を同時に実行するVL
    IWプロセッサにおいて、 命令フェッチは同時に実行できる命令の総ビット数より
    も小さい単位で行い、かつ並列実行できる全ての命令が
    命令フェッチされなくても、命令フェッチされた命令か
    ら先に実行することを特徴とするVLIWプロセッサ。
  5. 【請求項5】 複数の固定長命令を同時に実行するVL
    IWプロセッサにおいて、 同時に実行できる命令の総ビット数よりも小さい単位で
    命令フェッチを行い命令レジスタに格納する命令供給発
    行部と、 いずれの命令解読器に命令が供給されているかを判断す
    る命令発行器と、 前記命令発行器に基づいて、命令が格納されていない命
    令レジスタに対応する解読結果としてNOPを出力し、
    命令が格納されている命令レジスタに対応する解読結果
    はそのまま出力するNOP生成部とを有することを特徴
    とするVLIWプロセッサ。
  6. 【請求項6】 複数の命令を同時に実行するVLIWプ
    ロセッサのプログラムを生成するプログラム生成装置に
    おいて、 同時に実行する命令を順次実行しても実行結果が異なら
    ないプログラムを生成するプログラム生成装置。
  7. 【請求項7】 複数の命令を同時に実行するVLIWプ
    ロセッサのプログラムを生成するプログラム生成装置に
    おいて、 同時に実行する命令を命令フェッチ境界を単位に順次実
    行しても実行結果が異ならないプログラムを生成するプ
    ログラム生成装置。
  8. 【請求項8】一語が複数の単位命令からなるVLIWプ
    ロセッサのソースコードを格納するソースコード格納手
    段と、 前記ソースコード格納手段に格納された前記ソースコー
    ド中で一語内の単位命令を同時実行した場合と一語内の
    単位命令を逐次実行した場合で実行結果が異なる問題コ
    ードを検出する回避対象コード検出手段と、 前記回避対象コード検出手段により検出された問題コー
    ドを一語内の単位命令を同時実行した場合と一語内の単
    位命令を逐次実行した場合で実行結果が異ならないコー
    ドに置き換える逐次実行保証コード生成手段と、 前記逐次実行保証コード生成手段が生成した生成コード
    を格納する生成コード格納手段とを備えることを特徴と
    するプログラム生成装置。
  9. 【請求項9】前記ソースコード格納手段に格納されたソ
    ースコード中の命令フェッチ境界を検出し命令フェッチ
    境界情報を出力する命令フェッチ境界検出手段とを備
    え、 前記回避対象コード検出手段は前記ソースコード格納手
    段に格納された前記ソースコードの中で一語内の単位命
    令を同時実行した場合と一語内の単位命令を命令フェッ
    チ境界を単位に逐次実行した場合で実行結果が異なる問
    題コードを検出し、 逐次実行保証コード生成手段は一語内の単位命令を同時
    実行した場合と一語内の単位命令を命令フェッチ境界を
    単位に逐次実行した場合で実行結果が異ならないコード
    に置き換えることを特徴とする請求項8記載のプログラ
    ム生成装置。
  10. 【請求項10】 一語が複数の単位命令からなる命令を
    実行するVLIWプロセッサの命令列であって、前記単
    位命令毎に逐次実行可能な命令列を記録した記録媒体。
  11. 【請求項11】 一語が複数の単位命令からなる命令を
    実行するVLIWプロセッサの命令列であって、プロセ
    ッサの命令フェッチ単位毎に逐次実行可能な命令列を記
    録した記録媒体。
JP16787598A 1998-06-16 1998-06-16 Vliwプロセッサ、プログラム生成装置、および記録媒体 Expired - Fee Related JP3915019B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP16787598A JP3915019B2 (ja) 1998-06-16 1998-06-16 Vliwプロセッサ、プログラム生成装置、および記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP16787598A JP3915019B2 (ja) 1998-06-16 1998-06-16 Vliwプロセッサ、プログラム生成装置、および記録媒体

Publications (3)

Publication Number Publication Date
JP2000003279A true JP2000003279A (ja) 2000-01-07
JP2000003279A5 JP2000003279A5 (ja) 2005-10-20
JP3915019B2 JP3915019B2 (ja) 2007-05-16

Family

ID=15857704

Family Applications (1)

Application Number Title Priority Date Filing Date
JP16787598A Expired - Fee Related JP3915019B2 (ja) 1998-06-16 1998-06-16 Vliwプロセッサ、プログラム生成装置、および記録媒体

Country Status (1)

Country Link
JP (1) JP3915019B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002101562A1 (fr) * 2001-06-12 2002-12-19 Tops Systems Corporation Systeme multiprocesseur et processeur de signaux
JP2003520310A (ja) * 2000-01-21 2003-07-02 イー・アイ・デュポン・ドウ・ヌムール・アンド・カンパニー 耐焔障壁性紙組成物
US7076638B2 (en) 2001-09-20 2006-07-11 Matsushita Electric Industrial Co., Ltd. Processor, compiler and compilation method

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003520310A (ja) * 2000-01-21 2003-07-02 イー・アイ・デュポン・ドウ・ヌムール・アンド・カンパニー 耐焔障壁性紙組成物
WO2002101562A1 (fr) * 2001-06-12 2002-12-19 Tops Systems Corporation Systeme multiprocesseur et processeur de signaux
US7076638B2 (en) 2001-09-20 2006-07-11 Matsushita Electric Industrial Co., Ltd. Processor, compiler and compilation method
US7761692B2 (en) 2001-09-20 2010-07-20 Panasonic Corporation Processor, compiler and compilation method

Also Published As

Publication number Publication date
JP3915019B2 (ja) 2007-05-16

Similar Documents

Publication Publication Date Title
US11340908B2 (en) Reducing data hazards in pipelined processors to provide high processor utilization
US5404552A (en) Pipeline risc processing unit with improved efficiency when handling data dependency
US5764943A (en) Data path circuitry for processor having multiple instruction pipelines
JP5699554B2 (ja) ベクトル処理回路、命令発行制御方法、及びプロセッサシステム
JP4841861B2 (ja) 演算処理装置及びデータ転送処理の実行方法
JP3449186B2 (ja) パイプラインバイパス機能を有するデータ処理装置
JP2002333978A (ja) Vliw型プロセッサ
WO2002008893A1 (en) A microprocessor having an instruction format containing explicit timing information
US6292845B1 (en) Processing unit having independent execution units for parallel execution of instructions of different category with instructions having specific bits indicating instruction size and category respectively
US20070220235A1 (en) Instruction subgraph identification for a configurable accelerator
US6092184A (en) Parallel processing of pipelined instructions having register dependencies
JP3915019B2 (ja) Vliwプロセッサ、プログラム生成装置、および記録媒体
KR100636596B1 (ko) 고에너지 효율 병렬 처리 데이터 패스 구조
JP3182591B2 (ja) マイクロプロセッサ
JPH11242599A (ja) コンピュータプログラム製品
WO2005036384A2 (en) Instruction encoding for vliw processors
JP2933848B2 (ja) データ処理装置
JP4006887B2 (ja) コンパイラ、プロセッサおよび記録媒体
JP2591325B2 (ja) 分岐制御装置
JP3419268B2 (ja) プロセッサ
JP2004287919A (ja) 演算装置及び制御装置及び演算処理装置及び演算方法及び演算プログラム
JP3743155B2 (ja) パイプライン制御型計算機
KR100515039B1 (ko) 조건부 명령어를 고려한 파이프라인 상태 표시 회로
JP2861234B2 (ja) 命令処理装置
JPH05113886A (ja) 計算機

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050616

A621 Written request for application examination

Effective date: 20050616

Free format text: JAPANESE INTERMEDIATE CODE: A621

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20050621

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060414

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060418

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060619

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20060711

A521 Written amendment

Effective date: 20060911

Free format text: JAPANESE INTERMEDIATE CODE: A523

A911 Transfer of reconsideration by examiner before appeal (zenchi)

Effective date: 20060915

Free format text: JAPANESE INTERMEDIATE CODE: A911

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061003

A521 Written amendment

Effective date: 20061204

Free format text: JAPANESE INTERMEDIATE CODE: A523

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

Effective date: 20070109

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070122

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100216

Year of fee payment: 3

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110216

Year of fee payment: 4

FPAY Renewal fee payment (prs date is renewal date of database)

Year of fee payment: 5

Free format text: PAYMENT UNTIL: 20120216

LAPS Cancellation because of no payment of annual fees