JPH117440A - プロセッサ、コンパイラ、積和演算方法及び記録媒体 - Google Patents

プロセッサ、コンパイラ、積和演算方法及び記録媒体

Info

Publication number
JPH117440A
JPH117440A JP9160202A JP16020297A JPH117440A JP H117440 A JPH117440 A JP H117440A JP 9160202 A JP9160202 A JP 9160202A JP 16020297 A JP16020297 A JP 16020297A JP H117440 A JPH117440 A JP H117440A
Authority
JP
Japan
Prior art keywords
instruction
register
data
array
product
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.)
Pending
Application number
JP9160202A
Other languages
English (en)
Inventor
Masato Suzuki
正人 鈴木
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 JP9160202A priority Critical patent/JPH117440A/ja
Publication of JPH117440A publication Critical patent/JPH117440A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 ハードウェアのコストを低く押さえ、かつ、
比較的高速に積和演算の処理を行うプロセッサを提供す
る。 【解決手段】 積和演算を実行する旨の所定の機械命令
を読込み、解読し、命令実行回路によって命令を実行す
るプロセッサにおいて、命令実行回路604は、演算器
21と乗算器28と加算器29とを備え、乗算とデータ
読み出しを並列実行し、累積加算とデータ読み出しを並
列実行する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プロセッサ、コン
パイラ、積和演算方法及び記録媒体に関し、特に積和演
算を行うプロセッサ、積和演算のコードを含む高級言語
プログラムを機械命令プログラムに翻訳するコンパイ
ラ、記憶領域に予め格納された値に対して積和演算を行
うための積和演算方法、及び該高級言語プログラム又は
該機械命令プログラムを記録した記録媒体に関する。
【0002】
【従来の技術】近年の電子技術の発展により、高性能な
プロセッサが普及し、あらゆる分野で用いられている。
特にマルチメディアといった応用分野においては、画像
処理や音声処理の技術がキーとなり、それらの処理には
積和演算が必須である。この画像処理や音声処理は、リ
アルタイムに処理することが要求されるため、積和演算
はできるだけ高速に処理しなければならない。積和演算
とは、2つのデータの並びからデータを1つずつ取り出
して乗算を行い、積を累積加算する演算をいう。
【0003】また、画像処理や音声処理を実現するため
のプログラムは、処理の高度化に伴って大規模化の一途
であり、プログラム開発の生産性向上などの観点から、
高級言語で記述される。そこで、積和演算の処理をする
プログラムを実行するためには、プロセッサ及びコンパ
イラに関する技術が必要とされる。ここで、コンパイラ
とは、高級言語で記述されたプログラムを、プロセッサ
で実行可能な機械命令プログラムに翻訳するものであ
る。
【0004】(第1の従来技術)積和演算の処理を行う
第1の従来技術は、汎用プロセッサ単独で積和演算を行
う技術である。ここで、汎用プロセッサは、積和演算に
対する特別な回路を有していないプロセッサをいう。図
4は、積和演算の処理をするC言語のプログラムを示し
た図である。
【0005】図13は、C言語プログラムを機械命令プ
ログラムに翻訳した結果のプログラムリストである。以
下、図4、図13を用いて第1の従来技術を説明する。
汎用プロセッサで積和演算を行うために、コンパイラ
は、図4に示すC言語プログラムの断片を、図13に示
す機械命令プログラムに変換する。図4において、for
文はループを表し、配列変数x[i]と配列変数y[i]の積を
配列番号iについて累積加算して変数sumを求める。図1
3は、積と和の1回の処理(図4のfor文によるループ
に相当)には、6命令が必要であることを示している。
命令1と命令2はそれぞれ2つの配列変数に対応する記
憶領域からデータを読出す命令、命令3は乗算命令(積
は上位と下位に分けて得られる)、命令4は積の下位を
累積する加算命令、命令5は積の上位を転送する命令、
命令6は積の上位を命令4で得られる桁上げとともに累
積する加算命令である。この図13に示す機械命令プロ
グラムを汎用プロセッサにおいて繰り返し実行すること
により積和演算が実現される。
【0006】(第2の従来技術)また、積和演算の処理
を行う第2の従来技術は、汎用プロセッサに、専用の積
和演算回路を付加して、積和演算を行う技術である。図
14は、上記の専用の積和演算回路の構成を示すブロッ
ク図である。以下、図14を用いて第2の従来技術を説
明する。専用の積和演算回路は、2つのデータを同時に
記憶領域A、B(1203、1207)から読出して乗
算器1209に供給するために、記憶領域をアクセスす
るアドレスを求めるアドレス算出部A、B(1201、
1205)、記憶領域をアクセスする記憶領域アクセス
部A、B(1202、1206)、得られたデータを転
送するデータ転送部A、B(1204、1208)を2
系統備える。さらに、専用の積和演算回路は、2つのデ
ータの積を求める乗算器1209と、積を累積する加算
器1210と、累積された結果を記憶する累積結果レジ
スタ1211を備える。
【0007】従って、第2の従来技術では、汎用プロセ
ッサに付加した専用の積和演算回路が、積和演算の処理
を高速に行う機能をもつ。この技術によると、積和演算
1回の処理は、1命令かつ1サイクルで実現される。
【0008】
【発明が解決しようとする課題】しかしながら、上記の
第1の従来技術では、汎用プロセッサが図13の命令1
から命令6のすべての命令を1サイクルで実行できたと
しても積和1回の処理に6サイクルもかかり、必要な処
理性能が得られないという問題点を有している。まし
て、乗算器を備えない多くの汎用プロセッサでは加算器
による加算を繰り返すことによって積を求めるため、さ
らに多くのサイクル数を必要とすることになる。
【0009】また、第2の従来技術では、専用の積和演
算回路において、記憶領域をアクセスするアドレスを求
める手段、記憶領域をアクセスする手段、得られたデー
タを転送する手段をいずれも2系統必要とする点で、ハ
ードウェアのコストが増大するという問題点を有してい
る。そこで、本発明はかかる点に鑑み、ハードウェアの
コストを低く押さえ、かつ、高速に積和演算の処理を行
うプロセッサを提供することを目的とする。
【0010】
【課題を解決するための手段】上記課題を解決するため
に本発明に係るプロセッサは、記憶領域に置かれた第1
の配列データの配列要素と第2の配列データの配列要素
との積を各配列要素毎に求めて累積加算するプロセッサ
であって、プログラムメモリから命令を読み出す命令読
出し手段と、前記命令読出し手段によって読み出された
所定の第1の拡張命令と第2の拡張命令とを解読する命
令解読手段と、第1〜第4のレジスタと、前記第1及び
第2の配列データの配列要素をそれぞれ前記第1及び第
2のレジスタにロードするデータロード手段と、前記第
1及び第2のレジスタの内容の積を求めて前記第3のレ
ジスタに格納する乗算手段と、前記第3のレジスタの内
容と前記第4のレジスタの内容との和を求め再び前記第
4のレジスタに格納する加算手段と、前記命令解読手段
により前記第1の拡張命令が解読された場合に前記乗算
手段を実行させると並行して前記データロード手段に新
たに前記第1の配列データの配列要素をロードさせる第
1の実行制御手段と、前記命令解読手段により前記第2
の拡張命令が解読された場合に前記データロード手段に
前記第2の配列データの配列要素をロードさせると並行
して前記加算手段を実行させる第2の実行制御手段とか
らなる命令実行手段とを備えることを特徴とする。
【0011】これによって、本発明に係るプロセッサ
は、前記第1のレジスタにデータをロードする前記デー
タロード手段の実行と、前記第2のレジスタにデータを
ロードする前記データロード手段の実行とは、それぞれ
前記第1の実行制御手段と前記第2の実行制御手段によ
って別個に制御され、第1及び第2のレジスタへのデー
タのロードが同時に行われるのではないので、前記デー
タロード手段は、記憶領域をアクセスするアドレスを求
める手段と記憶領域をアクセスする手段とが1系統あれ
ば足りるため、第2の従来技術に示した専用の積和演算
回路を用いた場合と比較してハードウェアコストを低く
押さえることができる。
【0012】また、本発明に係るプロセッサは、前記第
1の実行制御手段が前記データロード手段と前記乗算手
段とを並行させるとともに、前記第2の実行制御手段が
前記データロード手段と前記加算手段とを並行させるの
で、第1の従来技術に示した汎用プロセッサによる場合
と比較して高速に積和演算の処理を行うことができる。
【0013】
【発明の実施の形態】以下、本発明の実施の形態につい
て、図面を用いて詳細に説明する。 (コンパイラ)図1は、コンパイラの構成を示すブロッ
ク図である。コンパイラ102は、ユーザが記述したC
言語プログラム101を翻訳し、機械命令プログラム1
10を出力する。
【0014】コンパイラ102は、C言語プログラム1
01を読込用バッファ104に読み込むファイル読込部
103と、読込用バッファ104に読み込まれたC言語
プログラムの構文や意味を解析して中間コードを生成し
中間コード用バッファ106に書き込む構文解析部10
5と、中間コード用バッファ106に格納された中間コ
ードを入力して機械命令プログラムを生成し出力用バッ
ファ108に書き込む機械命令生成部107と、出力用
バッファ108に格納された機械命令プログラムをファ
イルに出力するファイル出力部109とから構成され
る。
【0015】図2は、構文解析部105の処理フローを
示したフローチャートである。図3は、機械命令生成部
107の処理フローを示したフローチャートである。図
4は、C言語プログラムの一部分を示すプログラムリス
トである。図4において、for文はループを表し、配列
変数x[i]と配列変数y[i]の積を配列番号iについて累積
加算して変数sumを求めることを意図して記述されたも
のである。
【0016】図5は、図4に示すC言語プログラムを入
力として与えた場合に、コンパイラにより生成された機
械命令プログラムを示したリストである。なお、機械命
令プログラムは本来0と1のビット列であるが、意味を
表すために図5ではニモニック表記してある。以下に、
図4のプログラムリストを入力とした場合における上記
構成をもつコンパイラの動作について図1、図2、図
3、図4、図5を用いて説明する。
【0017】ファイル読込部103は、ユーザが記述し
たC言語プログラムを読み込み、読込用バッファ104
に格納する。構文解析部105は、読込用バッファ10
4に格納されたC言語プログラムを取り出し解析を行う
(ステップ202)。図4に示すプログラムの「sum=su
m+x[i]*y[i];」については、「第1の配列変数と第2の
配列変数との積を各配列要素毎に求めて累積加算する」
旨のコードであると検出するため(ステップ203)、
積和演算である旨の中間コードを中間コード用バッファ
106に出力する(ステップ204)。
【0018】機械命令生成部107は、中間コード用バ
ッファ106に格納された中間コードを取り出し(ステ
ップ302)、積和演算である旨の中間コードであると
判断し(ステップ303)、積和演算処理用の機械命令
群(MOV、MULA、MOV、ADDAの繰り返し)を出力用バッフ
ァ108に出力する(ステップ304)。ファイル出力
部109は、出力用バッファ108に格納された機械命
令を、ファイルに出力する。
【0019】このファイルに出力された機械命令プログ
ラムは、図5のリストに示すようになる。以下、図5に
示す命令1から14の意味を説明する。なお、命令14
以降も4つの命令を単位として繰り返されるが、ここで
は記載を省略している。 命令1 : MOV @(A0), D0 アドレスレジスタA0の値が示す番地にある16ビットデ
ータをデータレジスタD0にロードする。
【0020】命令2 : MOV @(A1), D1 アドレスレジスタA1の値が示す番地にある16ビットデ
ータをデータレジスタD1にロードする。 命令3 : MOV @(2,A0), D0 アドレスレジスタA0の値に2バイトの偏位を加えた番地
にある16ビットデータをデータレジスタD0にロードす
る。
【0021】命令4 : MULA D0, D1 データレジスタD0の値とデータレジスタD1の値とを乗じ
た32ビットの積を求める。積はプログラムからは見え
ない所定のレジスタに格納される。 命令5 : MOV @(2,A1), D1 アドレスレジスタA1の値に2バイトの偏位を加えた番地
にある16ビットデータをデータレジスタD1にロードす
る。
【0022】命令6 : ADDA 積和下位桁レジスタACCLと積和上位桁レジスタACCHとを
連結した32ビット長のレジスタの値と、直近のMULA命
令で生成した32ビットの積とを加算し、和を再び積和
下位桁レジスタACCLと積和上位桁レジスタACCHとに格納
する。加算の際に桁上げが生じた場合は、積和桁上げ蓄
積レジスタACCCの内容を1だけ増分する。
【0023】命令7 : MOV @(4,A0), D0 アドレスレジスタA0の値に4バイトの偏位を加えた番地
にある16ビットデータをデータレジスタD0にロードす
る。 命令8 : MULA D0, D1 (命令4と同じ。) 命令9 : MOV @(4,A1), D1 アドレスレジスタA1の値に4バイトの偏位を加えた番地
にある16ビットデータをデータレジスタD1にロードす
る。
【0024】命令10: ADDA (命令6と同じ。) 命令11: MOV @(6,A0), D0 アドレスレジスタA0の値に6バイトの偏位を加えた番地
にある16ビットデータをデータレジスタD0にロードす
る。
【0025】命令12: MULA D0, D1 (命令4と同じ。) 命令13: MOV @(6,A1), D1 アドレスレジスタA1の値に6バイトの偏位を加えた番地
にある16ビットデータをデータレジスタD1にロードす
る。
【0026】命令14: ADDA (命令6と同じ。) 但し、命令1、2、3、5、7、9、11、13の各ロ
ード命令は、いわゆる遅延ロード方式を採っており、直
後の命令でロード結果を使用することはできない。
【0027】上記の動作により、コンパイラ102は、
ユーザが記述したC言語プログラム101中の積和演算
を、ロード命令(MOV)と乗算命令(MULA)とロード命
令(MOV)と累積加算命令(ADDA)とからなる上記順序
の命令列を繰り返してなる機械命令の並びに翻訳し、本
発明に係るプロセッサの積和演算処理速度を最大限に高
めるための機械命令プログラム110を生成する。 (プロセッサ)図6は、プロセッサの概略構成図であ
る。
【0028】プロセッサ601は、機械命令(以下、命
令と略す)をプログラムメモリ607から読出すための
命令読出し回路602と、読出した命令を解読して命令
実行回路604を制御する命令解読回路603と、必要
に応じてデータメモリ608をアクセスして命令を実行
する命令実行回路604とから構成される。プログラム
メモリ607は、機械命令プログラムを格納するプログ
ラムメモリ、データメモリ608は主にオペランドのデ
ータを格納するデータメモリである。また、プログラム
メモリ607に格納されているプログラムの1命令のサ
イズは16ビットである。
【0029】命令バス605は、プログラムメモリ60
7からプロセッサ601へ命令を供給する命令バス、デ
ータバス606は、データメモリ608とプロセッサ6
01との間でのデータの転送を行うデータバスである。
また、命令バス605のバス幅は32ビットである。命
令読出し回路602と命令解読回路603と命令実行回
路604とは、パイプライン処理を行う。
【0030】命令読出し回路602は、4命令分のサイ
ズ(16ビット)の命令バッファを有する。命令読出し
回路602は、プログラムメモリ607から、命令バス
605を介して、同時に連続した2つの命令を読み出
し、命令バッファに格納する。ただし、2命令分の命令
バッファの空きがない場合は、命令解読回路603が命
令を解読し、空きができるのを待つ。
【0031】命令解読回路603は、命令読出し回路6
02で読み出された2命令が、MOVとMULAであれば、命
令バッファから2つの命令を取り出し、MOVとMULAを同
時に実行するように命令実行回路604に指示を与え
る。また、命令解読回路603は、命令読出し回路60
2で読み出された2命令が、MOVとADDAであれば、命令
バッファから2つの命令を取り出し、MOVとADDAを同時
に実行するように命令実行回路604に指示を与える。
【0032】しかし、命令解読回路603は、命令読出
し回路602で読み出された2命令が、「MOVとMULA」
または「MOVとADDA」以外であれば、命令バッファから
1つの命令を取り出して、当該命令を実行するように命
令実行回路604に指示を与える。命令実行回路604
は、演算器と乗算器と加算器とを備え、命令に対応した
演算を実行する回路である。命令実行回路604の詳細
な構成は後述する。
【0033】図7は、命令読出し回路602、命令解読
回路603、及び命令実行回路604の処理タイミング
を示した処理タイミング図である。なお、図7中の命令
の番号は、前述した図5のプログラムリストに対応して
いる。以下に、図6、図7を用いてプロセッサの動作概
要を説明する。まず、プログラムメモリ607から命令
読出し回路602が命令1、命令2を読み出す(サイク
ル1)。命令解読回路603は命令1、命令2を解読し
(サイクル2)、命令1だけを命令実行回路604に実
行させる(サイクル3)。
【0034】まだ2命令分の空きがあるので、命令読出
し回路602は、次の命令3、命令4を読み出す(サイ
クル2)。命令解読回路603は命令2、命令3を解読
し(サイクル3)、命令2だけを命令実行回路604に
実行させる(サイクル4)。空きが1命令分しかないの
で、命令読出し回路602は、命令の読み出しを行わな
い(サイクル3)。命令解読回路603は命令3、命令
4を解読し(サイクル4)、命令3及び命令4を命令実
行回路604に並列実行させる(サイクル5)。
【0035】2命令分の空きができたので命令読出し回
路602は、命令5、命令6を読み出す(サイクル
4)。命令解読回路603は命令5、命令6を解読し
(サイクル5)、命令5及び命令6を命令実行回路60
4に並列実行させる(サイクル6)。命令読出し回路6
02は、命令7、命令8を読み出す(サイクル5)。命
令解読回路603は命令7、命令8を解読し(サイクル
6)、命令7及び命令8を命令実行回路604に並列実
行させる(サイクル7)。
【0036】命令読出し回路602は、命令9、命令1
0を読み出す(サイクル6)。命令解読回路603は命
令9、命令10を解読し(サイクル7)、命令9及び命
令10を命令実行回路604に並列実行させる(サイク
ル8)。命令読出し回路602は、命令11、命令12
を読み出す(サイクル7)。命令解読回路603は命令
11、命令12を解読し(サイクル8)、命令11及び
命令12を命令実行回路604に並列実行させる(サイ
クル9)。
【0037】命令読出し回路602は、命令13、命令
14を読み出す(サイクル8)。命令解読回路603は
命令13、命令14を解読し(サイクル9)、命令13
及び命令14を命令実行回路604に並列実行させる
(サイクル10)。上記のように、MOVとMULAの組と,MO
VとADDAの組は、交互に実行される。このMOVとMULAの組
とMOVとADDAの組とは、それぞれ1つのマシンサイクル
で実行されるのであるが、これについては以下に詳しく
述べる。
【0038】図8は、命令実行回路604の詳細な構成
を示すブロック図である。命令実行回路604は、Aバ
ス(ABUS)14とB1バス(B1BUS)15とB2バス(B2BUS)1
6、アドレスレジスタファイル(ARF)17、データレジ
スタファイル(DRF)18、セレクタ(SAR)19、セレクタ
(SDR)20、AとBとの2つのデータ入力に対して算術論
理演算を行う演算器(ALU)21、演算器21のA入力を選
択するセレクタ(SAA)22、演算器21のB入力を選択す
るセレクタ(SAB)23、演算器21の出力を保持する演
算器出力バッファ(ALOB)24、オペランドアドレスバッ
ファ(OAB)25、ストアバッファ(STB)26、ロードバッ
ファ(LDB)27、AとBとの2つのデータ入力に対して乗
算を行い、入力データ幅の2倍のデータ幅の積の下位部
分のL出力と積の上位に対しては和出力Sと桁上げ出力C
とを出力する乗算器(MPY)28、乗算器28の和出力Sと
桁上げ出力CとをそれぞれA入力及びB入力として桁上げ
伝搬加算する加算器(CPA)29、加算器29のA入力を選
択するセレクタ(SMA)30、加算器29のB入力を選択す
るセレクタ(SMB)31、乗算器28のL出力を保持するラ
ッチ(PRL)32、積の上位部分となる加算器29の出力
を保持するラッチ(PRH1)33、ラッチ33の内容を再び
加算器29に供給するためにタイミングを調整するラッ
チ(PRH2)34、演算器出力バッファ24の内容を選択的
に保持し累積加算された積の下位部分を格納する積和下
位桁レジスタ(ACCL)35、ラッチ33の内容を選択的に
保持し累積加算された積の上位部分を格納する積和上位
桁レジスタ(ACCH)36、演算器出力バッファ24の内容
を選択的に保持し積を累積加算する際の桁上げを蓄る積
和桁上げ蓄積レジスタ(ACCC)37で構成される。
【0039】Aバス(ABUS)14とB1バス(B1BUS)15とB2
バス(B2BUS)16は、演算すべきデータ及び演算結果の
データを転送するためのバスである。アドレスレジスタ
ファイル(ARF)17は、A0からA3の4つのアドレスレジ
スタから構成され、データレジスタファイル(DRF)18
は、D0からD3の4つのデータレジスタから構成される。
【0040】セレクタ(SAR)19は、アドレスレジスタ
ファイル17の入力を選択するセレクタであり、セレク
タ(SDR)20は、データレジスタファイル18の入力を
選択するセレクタである。乗算器28は、部分積を加算
するためにツリー状に結合された複数の桁上げ保存加算
器からなり、ツリーの最終段からは個々のビットの桁上
げ保存加算器の和出力と桁上げ出力とがそのまま出力さ
れている。
【0041】また、演算器21の加算時の桁上げ入力は
加算器29の桁上げ出力が、加算器29の桁上げ入力は
演算器21の桁上げ出力が接続され、演算器21及び加
算器29が連結して動作する。なお、アドレスレジスタ
ファイル17から積和桁上げ蓄積レジスタ37までのす
べてが16ビット幅である。
【0042】また、図8中に付されたT1、T2及びTAの記
号は、レジスタ又はラッチの書込みを行うクロックタイ
ミングを示す。図9は、図5の機械命令プログラムでア
クセスするデータを格納したデータメモリ608の内容
説明図である。x'1000番地にデータx'1111が、x'1002番
地にデータx'2222が、x'1004番地にデータx'3333が、x'
2000番地にデータx'4444が、x'2002番地にデータx'5555
が、x'2004番地にデータx'6666が格納されている。ここ
で、番地はバイト(8ビット)毎に付与され、データは
最下位バイトのアドレスでアクセスされるものとする。
x'は16進数を表す。
【0043】図10から図12は、プロセッサ601に
おける命令実行回路604の動作タイミング図を示すも
のである。図10から図12は、クロックT2、クロック
T1、クロックTA、アドレスレジスタファイルARF17に
おけるアドレスレジスタA0及びアドレスレジスタA1、デ
ータレジスタファイルDRF18におけるデータレジスタD
0及びデータレジスタD1、積和下位桁レジスタACCL3
5、積和上位桁レジスタACCH36、積和桁上げ蓄積レジ
スタACCC37、AバスABUS14、B1バスB1BUS15、B2バ
スB2BUS16、演算器ALU21の出力、乗算器MPY28の
出力、加算器CPA29の出力、オペランドアドレスバッ
ファOAB25、ロードバッファLDB27の値をマシンサイ
クルと呼ばれるタイミング毎に示すものである。
【0044】なお、サイクルt1からサイクルt4までを図
10に、サイクルt5からサイクルt8までを図11に、サ
イクルt9とサイクルt10とを図12に、それぞれクロッ
クT2がHになる前半期間を(2)、クロックT1がHになる
後半期間を(1)を付して示す。ここで、MOV命令について
はオペランドアドレスバッファOAB25がデータバス6
06に出力されるサイクル、MULA命令については乗算器
MPY28が動作するサイクル、ADDA命令については演算
器ALU21と加算器CPA29が動作するサイクルをそれぞ
れ命令実行サイクルと見ると、図10のサイクルt2が図
7のマシンサイクル3に、図10のサイクルt3が図7の
マシンサイクル4(以下同様)に対応する。
【0045】また、アドレスレジスタA0には初期値x'10
00が、アドレスレジスタA1には初期値x'2000が、積和下
位桁レジスタ35、積和上位桁レジスタ36、積和桁上
げ蓄積レジスタ37には初期値x'0000が格納されている
ものとする。以下に、図5に示す機械命令プログラムを
実行する場合の命令実行回路604の動作を、図8、図
9、図10、図11、図12を用いて説明する。 (命令1)命令1は、サイクルt1(1)からサイクルt3(2)
にかけて命令実行回路604で実行される。
【0046】サイクルt1(1)において、アドレスレジス
タA0の値x'1000と偏位が0であることによる値x'0000と
をそれぞれB1バス15及びB2バス16とセレクタ23及
びセレクタ22とを経由して演算器21で加算する。サ
イクルt2(2)で加算の結果の値x'1000を演算器出力バッ
ファ24を経てオペランドアドレスレジスタ25に格納
するとともにデータバス606にアドレスとして出力
し、データメモリ608のx'1000番地からデータを読出
す。
【0047】読出された値x'1111はサイクルt2(1)でロ
ードバッファ27に保持され、サイクルt3(2)でセレク
タ20を経てデータレジスタD0に格納される。 (命令2)命令2は、サイクルt2(1)からサイクルt4(2)
にかけて命令実行回路604で実行される。
【0048】サイクルt2(1)において、アドレスレジス
タA1の値x'2000と偏位が0であることによる値x'0000と
をそれぞれB1バス15及びB2バス16とセレクタ23及
びセレクタ22とを経由して演算器21で加算する。サ
イクルt3(2)で加算の結果の値x'2000を演算器出力バッ
ファ24を経てオペランドアドレスレジスタ25に格納
するとともにデータバス606にアドレスとして出力
し、データメモリ608のx'2000番地からデータを読出
す。
【0049】読出された値x'4444はサイクルt3(1)でロ
ードバッファ27に保持され、サイクルt4(2)でセレク
タ20を経てデータレジスタD1に格納される。 (命令3)命令3は、サイクルt3(1)からサイクルt5(2)
にかけて命令実行回路604で実行される。
【0050】サイクルt3(1)において、アドレスレジス
タA0の値x'1000と偏位の値x'0002とをそれぞれB1バス1
5及びB2バス16とセレクタ23及びセレクタ22とを
経由して演算器21で加算する。サイクルt4(2)で加算
の結果の値x'1002を演算器出力バッファ24を経てオペ
ランドアドレスレジスタ25に格納するとともにデータ
バス606にアドレスとして出力し、データメモリ60
8のx'1002番地からデータを読出す。
【0051】読出された値x'2222はサイクルt4(1)でロ
ードバッファ27に保持され、サイクルt5(2)でセレク
タ20を経てデータレジスタD0に格納される。 (命令4)命令4は、命令3と同時に命令解読回路60
3で解読され、並列に命令実行回路604で実行され
る。厳密には、命令4は、サイクルt4(2)からサイクルt
4(1)にかけて命令実行回路604で実行される。
【0052】サイクルt4(2)において、データレジスタD
0の値x'1111とデータレジスタD1の値x'4444とをそれぞ
れAバス14とB2バス16とを経由して乗算器28で乗
算する。積の下位16ビットである値x'0c84はサイクル
t4(1)でラッチ32に格納される。積の上位16ビット
の和出力と桁上げ出力とはそれぞれセレクタ30とセレ
クタ31とを経由して加算器29で加算され、加算結果
の値x'048dはサイクルt4(1)でラッチ33に格納され
る。 (命令5)命令5は、サイクルt4(1)からサイクルt6(2)
にかけて命令実行回路604で実行される。
【0053】サイクルt4(1)において、アドレスレジス
タA1の値x'2000と偏位の値x'0002とをそれぞれB1バス1
5及びB2バス16とセレクタ23及びセレクタ22とを
経由して演算器21で加算する。サイクルt5(2)で加算
の結果の値x'2002を演算器出力バッファ24を経てオペ
ランドアドレスレジスタ25に格納するとともにデータ
バス606にアドレスとして出力し、データメモリ60
8のx'2002番地からデータを読出す。
【0054】読出された値x'5555はサイクルt5(1)でロ
ードバッファ27に保持され、サイクルt6(2)でセレク
タ20を経てデータレジスタD1に格納される。 (命令6)命令6は、命令5と同時に命令解読回路60
3で解読され、並列に命令実行回路604で実行され
る。厳密には、命令6は、サイクルt5(2)からサイクルt
6(1)にかけて命令実行回路604で実行される。
【0055】サイクルt5(2)において、積和下位桁レジ
スタ35の値x'0000とラッチ32の値x'0c84とをそれぞ
れAバス14及びB2バス16とセレクタ22及びセレク
タ23とを経由して加算器21で加算する。サイクルt5
(1)で、加算結果の値x'0c84を演算器出力バッファ24
を経て再び積和下位桁レジスタ35に格納するととも
に、ラッチ33の値x'048dをラッチ34に転送する。さ
らにサイクルt5(1)において、ラッチ34に保持された
値x'048dと積和上位桁レジスタ36の値x'0000とをそれ
ぞれセレクタ31及びセレクタ30を経由して加算器2
9で加算する。このとき演算器21の最上位ビットから
の桁上げ出力を加算器29の最下位ビットへの桁上げ入
力として加算が行われるが、その桁上げ入力の値は0で
ある。
【0056】サイクルt6(2)で、加算結果の値x'048dを
ラッチ33を経て再び積和上位桁レジスタ36に格納す
る。次にサイクルt6(2)において、セレクタ23によっ
て選択された積和桁上げ蓄積レジスタ37の値x'0000と
セレクタ22が何も選択せずに出力する値x'0000とを、
加算器29の最上位ビットからの桁上げ出力を最下位ビ
ットへの桁上げ入力として演算器21において加算す
る。その桁上げ入力の値は0であり、加算結果の値x'00
00は演算器出力バッファ24を経てサイクルt6(1)で再
び積和桁上げ蓄積レジスタ37に格納される。
【0057】以上のように3回の加算操作により積が累
積加算され、1回目までの積和処理が完了する。 (命令7)命令7は、サイクルt5(1)からサイクルt7(2)
にかけて命令実行回路604で実行される。
【0058】サイクルt5(1)において、アドレスレジス
タA0の値x'1000と偏位の値x'0004とをそれぞれB1バス1
5及びB2バス16とセレクタ23及びセレクタ22とを
経由して演算器21で加算する。サイクルt6(2)で加算
の結果の値x'1004を演算器出力バッファ24を経てオペ
ランドアドレスレジスタ25に格納するとともにデータ
バス606にアドレスとして出力し、データメモリ60
8のx'1004番地からデータを読出す。
【0059】読出された値x'3333はサイクルt6(1)でロ
ードバッファ27に保持され、サイクルt7(2)でセレク
タ20を経てデータレジスタD0に格納される。 (命令8)命令8は、命令7と同時に命令解読回路60
3で解読され、並列に命令実行回路604で実行され
る。厳密には、命令8は、サイクルt6(2)からサイクルt
6(1)にかけて命令実行回路604で実行される。
【0060】サイクルt6(2)において、データレジスタD
0の値x'2222とデータレジスタD1の値x'5555とをそれぞ
れAバス14とB2バス16とを経由して乗算器28で乗
算する。積の下位16ビットである値x'9f4aはサイクル
t6(1)でラッチ32に格納される。積の上位16ビット
の和出力と桁上げ出力とはそれぞれセレクタ30とセレ
クタ31とを経由して加算器29で加算され、加算結果
の値x'0b60はサイクルt6(1)でラッチ33に格納され
る。 (命令9)命令9は、サイクルt6(1)からサイクルt8(2)
にかけて命令実行回路604で実行される。
【0061】サイクルt6(1)において、アドレスレジス
タA1の値x'2000と偏位の値x'0004とをそれぞれB1バス1
5及びB2バス16とセレクタ23及びセレクタ22とを
経由して演算器21で加算する。サイクルt7(2)で加算
の結果の値x'2004を演算器出力バッファ24を経てオペ
ランドアドレスレジスタ25に格納するとともにデータ
バス606にアドレスとして出力し、データメモリ60
8のx'2004番地からデータを読出す。
【0062】読出された値x'6666はサイクルt7(1)でロ
ードバッファ27に保持され、サイクルt8(2)でセレク
タ20を経てデータレジスタD1に格納される。 (命令10)命令10は、命令9と同時に命令解読回路
603で解読され、並列に命令実行回路604で実行さ
れる。厳密には、命令10は、サイクルt7(2)からサイ
クルt8(1)にかけて命令実行回路604で実行される。
【0063】サイクルt7(2)において、積和下位桁レジ
スタ35の値x'0c84とラッチ32の値x'9f4aとをそれぞ
れAバス14及びB2バス16とセレクタ22及びセレク
タ23とを経由して加算器21で加算する。サイクルt7
(1)で、加算結果の値x'abceを演算器出力バッファ24
を経て再び積和下位桁レジスタ35に格納するととも
に、ラッチ33の値x'0b60をラッチ34に転送する。さ
らにサイクルt7(1)において、ラッチ34に保持された
値x'0b60と積和上位桁レジスタ36の値x'048dとをそれ
ぞれセレクタ31及びセレクタ30を経由して加算器2
9で加算する。このとき演算器21の最上位ビットから
の桁上げ出力を加算器29の最下位ビットへの桁上げ入
力として加算が行われるが、その桁上げ入力の値は0で
ある。
【0064】サイクルt8(2)で、加算結果の値x'0fedを
ラッチ33を経て再び積和上位桁レジスタ36に格納す
る。次にサイクルt8(2)において、セレクタ23によっ
て選択された積和桁上げ蓄積レジスタ37の値x'0000と
セレクタ22が何も選択せずに出力する値x'0000とを、
加算器29の最上位ビットからの桁上げ出力を最下位ビ
ットへの桁上げ入力として演算器21において加算す
る。その桁上げ入力の値は0であり、加算結果の値x'00
00は演算器出力バッファ24を経てサイクルt8(1)で再
び積和桁上げ蓄積レジスタ37に格納される。
【0065】以上のように3回の加算操作により積が累
積加算され、2回目までの積和処理が完了する。 (命令11)(説明を省略する。動作は図11の破線部
分に示される。) (命令12)命令12は、命令10と同時に命令解読回
路603で解読され、並列に命令実行回路604で実行
される。厳密には、命令12は、サイクルt8(2)からサ
イクルt8(1)にかけて命令実行回路604で実行され
る。
【0066】サイクルt8(2)において、データレジスタD
0の値x'3333とデータレジスタD1の値x'6666とをそれぞ
れAバス14とB2バス16とを経由して乗算器28で乗
算する。積の下位16ビットである値x'b852はサイクル
t8(1)でラッチ32に格納される。積の上位16ビット
の和出力と桁上げ出力とはそれぞれセレクタ30とセレ
クタ31とを経由して加算器29で加算され、加算結果
の値x'147aはサイクルt8(1)でラッチ33に格納され
る。 (命令13)(説明を省略する。動作は図11の破線部
分に示される。) (命令14)命令14は、命令13と同時に命令解読回
路603で解読され、並列に命令実行回路604で実行
される。厳密には、命令14は、サイクルt9(2)からサ
イクルt10(1)にかけて命令実行回路604で実行され
る。
【0067】サイクルt9(2)において、積和下位桁レジ
スタ35の値x'abceとラッチ32の値x'b852とをそれぞ
れAバス14及びB2バス16とセレクタ22及びセレク
タ23とを経由して加算器21で加算する。サイクルt9
(1)で、加算結果の値x'6420を演算器出力バッファ24
を経て再び積和下位桁レジスタ35に格納するととも
に、ラッチ33の値x'147aをラッチ34に転送する。さ
らにサイクルt9(1)において、ラッチ34に保持された
値x'147aと積和上位桁レジスタ36の値x'0fedとをそれ
ぞれセレクタ31及びセレクタ30を経由して加算器2
9で加算する。このとき演算器21の最上位ビットから
の桁上げ出力を加算器29の最下位ビットへの桁上げ入
力として加算が行われるが、その桁上げ入力の値は1で
ある。
【0068】サイクルt10(2)で、加算結果の値x'2468を
ラッチ33を経て再び積和上位桁レジスタ36に格納す
る。次にサイクルt10(2)において、セレクタ23によっ
て選択された積和桁上げ蓄積レジスタ37の値x'0000と
セレクタ22が何も選択せずに出力する値x'0000とを、
加算器29の最上位ビットからの桁上げ出力を最下位ビ
ットへの桁上げ入力として演算器21において加算す
る。その桁上げ入力の値は0であり、加算結果の値x'00
00は演算器出力バッファ24を経てサイクルt10(1)で再
び積和桁上げ蓄積レジスタ37に格納される。
【0069】以上のように3回の加算操作により積が累
積加算され、3回目までの積和処理が完了する。なお、
図11、図12の破線部分は、命令11、命令13及び
命令14に後続する命令の動作を表す。また、上述の3
回目までの積和処理では、積和上位桁レジスタ36の加
算時に最上位ビットから桁上げが出ることがなかった
が、積算の回数が増えて桁上げが発生するとこれが積和
桁上げ蓄積レジスタ37に蓄積される。
【0070】以上のように、命令実行回路604は、ロ
ード命令(MOV)と乗算命令(MULA)を、演算器21と
乗算器28の並列動作により同時に実行し、ロード命令
(MOV)と累積加算命令(ADDA)を、演算器21と乗算
器28と加算器29の並列動作により同時に実行する。
これにより、2命令を同時に読み込める命令読出し回
路602と、並列に実行すべき命令を検出し命令実行回
路604を制御する命令解読回路603と、命令実行回
路604を備えたプロセッサ601は、積和演算1回分
の処理を2サイクルで行うことができる。
【0071】以上、本発明に係るプロセッサ及びコンパ
イラについて、実施形態に基づいて説明したが、本発明
はこれら実施形態に限られないことは勿論である。即
ち、 (1)実施形態では、C言語プログラムにおける積和1
回の処理を、コンパイラ102がロード命令と乗算命令
とロード命令と累積加算命令とからなる命令列に翻訳
し、プロセッサ601がこの命令列を受け、前のロード
命令と乗算命令とを並列に、後のロード命令と累積加算
命令とを並列にそれぞれ解読実行しているが、ロードと
乗算とを並列に実行する命令とロードと累積加算とを並
列に実行する命令とを定義し、コンパイラ102がC言
語の同じ処理をこれら2つの命令からなる命令列に翻訳
し、プロセッサ601がこの命令列を受け、それぞれを
単独に解読実行するようにしてもよい。 (2)実施形態では、アドレスレジスタファイル17か
ら積和桁上げ蓄積レジスタ37までのすべてを16ビッ
ト幅としたが、すべてが8ビット幅でもよく、すべてが
32ビット幅でもよい。 (3)実施形態では、積和桁上げ蓄積レジスタ37を設
けて積の累積加算時の桁上げを蓄積し、32ビットの積
に対して48ビットの和を保つようにしているが、これ
を削除して和も32ビットのみ保つようにしてもよい。
こうすれば2回の加算操作により1回分の累積加算が達
成される。従って、演算器21と加算器29と再び演算
器21とを動作させている本実施の形態を、演算器21
と加算器29とをそれぞれ1回ずつ動作させるかあるい
は演算器21を2回動作させるように変形できる。特に
後者のようにすると、加算器29の動作が乗算時のみに
限定されるため、セレクタ30とセレクタ31とが不要
になる。 (4)実施形態では、プロセッサ601の命令実行回路
604の内部に乗算器28や加算器29などを備えてい
るが、命令実行回路604は図8の破線で囲んだ部分を
削除し、同部分を拡張演算装置として必要時にだけ命令
実行回路604を拡張する形で設けてもよい。これによ
り、積和演算の不要な応用には拡張演算装置のないハー
ドウェアコストの小さい汎用プロセッサを提供でき、積
和演算の必要な応用には拡張演算装置を付加した形態の
プロセッサを提供できる。なお、積和演算の必要な応用
においても、積和演算に用いるデータへのアクセスは、
演算器21、データバス606、アドレスレジスタファ
イル17の1系統のアクセス手段で実現し、また、拡張
演算装置と命令実行回路604とが並列に動作するた
め、ハードウェアの利用効率が向上し、拡張演算装置の
付加に要するハードウェアコストを最小限に抑えられ
る。
【0072】
【発明の効果】以上の説明から明らかなように、本発明
に係るプロセッサは、記憶領域に置かれた第1の配列デ
ータの配列要素と第2の配列データの配列要素との積を
各配列要素毎に求めて累積加算するプロセッサであっ
て、プログラムメモリから命令を読み出す命令読出し手
段と、前記命令読出し手段によって読み出された所定の
第1の拡張命令と第2の拡張命令とを解読する命令解読
手段と、第1〜第4のレジスタと、前記第1及び第2の
配列データの配列要素をそれぞれ前記第1及び第2のレ
ジスタにロードするデータロード手段と、前記第1及び
第2のレジスタの内容の積を求めて前記第3のレジスタ
に格納する乗算手段と、前記第3のレジスタの内容と前
記第4のレジスタの内容との和を求め再び前記第4のレ
ジスタに格納する加算手段と、前記命令解読手段により
前記第1の拡張命令が解読された場合に前記乗算手段を
実行させると並行して前記データロード手段に新たに前
記第1の配列データの配列要素をロードさせる第1の実
行制御手段と、前記命令解読手段により前記第2の拡張
命令が解読された場合に前記データロード手段に前記第
2の配列データの配列要素をロードさせると並行して前
記加算手段を実行させる第2の実行制御手段とからなる
命令実行手段とを備えることを特徴とする。
【0073】これによって、本発明に係るプロセッサ
は、前記第1のレジスタにデータをロードする前記デー
タロード手段の実行と、前記第2のレジスタにデータを
ロードする前記データロード手段の実行とは、それぞれ
前記第1の実行制御手段と前記第2の実行制御手段によ
って別個に制御され、第1及び第2のレジスタへのデー
タのロードが同時に行われるのではないので、前記デー
タロード手段は、記憶領域をアクセスするアドレスを求
める手段と記憶領域をアクセスする手段とが1系統あれ
ば足りるため、第2の従来技術に示した専用の積和演算
回路を用いた場合と比較してハードウェアコストを低く
押さえることができる。
【0074】また、本発明に係るプロセッサは、前記第
1の実行制御手段が前記データロード手段と前記乗算手
段とを並行させるとともに、前記第2の実行制御手段が
前記データロード手段と前記加算手段とを並行させるの
で、第1の従来技術に示した汎用プロセッサによる場合
と比較して高速に積和演算の処理を行うことができる。
【0075】また、本発明に係るプロセッサにおける前
記命令解読手段は、前記記憶領域から第1の配列データ
の配列要素を前記第1のレジスタにロードする第1のロ
ード命令と、当該第1のロード命令の結果が格納される
前の前記第1のレジスタの内容と前記第2のレジスタの
内容との積を求めて前記第3のレジスタに格納する乗算
命令とが連続して配置された命令を並列して解読し、前
記記憶領域から第2の配列データの配列要素を前記第2
のレジスタにロードする第2のロード命令と、前記第3
のレジスタの内容と前記第4のレジスタの内容との和を
求め再び前記第4のレジスタに格納する累積加算命令と
が連続して配置された命令を並列して解読する並列解読
手段を備えることもできる。
【0076】ここで、前記第1の拡張命令は、前記記憶
領域から第1の配列データの配列要素を前記第1のレジ
スタにロードする第1のロード命令と、当該第1のロー
ド命令の結果が格納される前の前記第1のレジスタの内
容と前記第2のレジスタの内容との積を求めて前記第3
のレジスタに格納する乗算命令とが連続して配置された
命令であり、前記第2の拡張命令は、前記記憶領域から
第2の配列データの配列要素を前記第2のレジスタにロ
ードする第2のロード命令と、前記第3のレジスタの内
容と前記第4のレジスタの内容との和を求め再び前記第
4のレジスタに格納する累積加算命令とが連続して配置
された命令である。
【0077】これによって、積和演算処理のためだけに
前記第1及び第2の拡張命令を別個の命令として定義す
る必要がなく、一般的な命令だけを読み込み解読するこ
とによってプロセッサは高速に積和演算を実行すること
ができる。また、前記乗算命令には前記第3のレジスタ
を指定する情報が暗示的に含まれ、前記累積加算命令に
は前記第3のレジスタ及び第4のレジスタを指定する情
報が暗示的に含まれ、本発明に係るプロセッサの前記第
3のレジスタ及び前記第4のレジスタは、専用のレジス
タとすることもできる。
【0078】これによって、前記乗算手段と前記加算手
段とは専用のレジスタとデータをやりとりするので回路
構成を簡単なものとすることができ、ハードウェアコス
トを低く押さえることができる。また、本発明に係るプ
ロセッサの前記乗算手段は、ツリー接続された複数の桁
上げ保存加算器と、前記ツリーの最終段の和出力と桁上
げ出力とを加算する桁上げ伝搬加算器とからなり、前記
加算手段は、前記和を求めるために前記桁上げ伝搬加算
器を用いることにすることもできる。
【0079】これによって、前記加算手段は、加算のた
めに用いる複数の加算器のうちの1つの代わりとして、
乗算手段を構成する桁上げ伝搬加算器を、乗算手段と共
用することができるので、ハードウェアコストを低く押
さえることができる。また、本発明に係るプロセッサ
は、記憶領域に置かれた第1の配列データの配列要素と
第2の配列データの配列要素との積を各配列要素毎に求
めて累積加算する積和演算を実行するプロセッサであっ
て、同一のクロックパルスを受けて動作しプログラムメ
モリ中の命令に従ってデータを処理する主たるプロセッ
サと従たる拡張演算装置とを備え、前記主たるプロセッ
サは、プログラムメモリから命令を読み出す命令読出し
手段と、前記命令読出し手段によって読み出された命令
の解読を行う命令解読手段と、前記命令解読手段の解読
結果に応じて命令の実行を行う命令実行手段とをからな
り、前記命令実行手段は、命令実行制御手段と加算器を
備え、前記従たる拡張演算装置は、乗算器を備え、前記
主たるプロセッサと前記従たる拡張演算装置とは、前記
命令実行手段からデータを前記乗算器に伝送する第1の
バス及び前記乗算器の乗算結果を前記命令実行手段に伝
送する第2のバスにより接続され、前記命令実行制御手
段は、前記命令解読手段により前記積和演算の命令が解
読された場合に、前記加算器を用いて前記第1の配列デ
ータの配列要素にアクセスするためのアドレス計算と前
記第2の配列データの配列要素にアクセスするためのア
ドレス計算と前記累積加算とを行い、これと並行して前
記従たる拡張演算装置に前記乗算器を用いて前記乗算を
行わせることを特徴とする。
【0080】これによって、前記主たるプロセッサと前
記従たるプロセッサとは、互いに独立して並列処理を行
うことができるので、ハードウェアの利用効率が高ま
り、ハードウェアコストに対する処理能力を高めること
ができる。また、本発明に係るコンパイラは、高級言語
プログラムから第1〜第4のレジスタと乗算器と加算器
を備えるプロセッサを対象とする機械命令プログラムを
生成するコンパイラであって、前記高級言語プログラム
中に第1の配列データの配列要素と第2の配列データの
配列要素との積を各配列要素毎に求めて累積加算する旨
のコードを検出する検出手段と、前記コードが検出され
た場合に、前記第1のレジスタの内容と前記第2のレジ
スタの内容との積を求めて前記第3のレジスタに格納さ
せると並行して記憶領域から新たに前記第1の配列デー
タの配列要素を前記第1のレジスタにロードさせるため
の第1の拡張命令と、記憶領域から前記第2の配列デー
タの配列要素を前記第2のレジスタにロードさせると並
行して前記第3のレジスタの内容と前記第4のレジスタ
の内容との和を求め再び前記第4のレジスタに格納させ
るための第2の拡張命令と、が繰り返された機械命令プ
ログラムを生成する機械命令生成手段とを備えることを
特徴とする。
【0081】また、前記第1の拡張命令は、前記記憶領
域から第1の配列データの配列要素を前記第1のレジス
タにロードする第1のロード命令と、当該第1のロード
命令の結果が格納される前の前記第1のレジスタの内容
と前記第2のレジスタの内容との積を求めて前記第3の
レジスタに格納する乗算命令とが連続して配置された命
令であり、前記第2の拡張命令は、前記記憶領域から第
2の配列データの配列要素を前記第2のレジスタにロー
ドする第2のロード命令と、前記第3のレジスタの内容
と前記第4のレジスタの内容との和を求め再び前記第4
のレジスタに格納する累積加算命令とが連続して配置さ
れた命令であるとすることもできる。
【0082】これによって、前記の第1〜第4のレジス
タと乗算器と加算器を備え、データロードと乗算とを並
行して実行し、データロードと累積加算とを並行して実
行する機能を有するプロセッサに好適な機械命令プログ
ラムが生成される。従って、前記プロセッサが、前記コ
ンパイラによって生成された機械命令プログラムを読み
込み解読し実行することにより、高速な積和演算の処理
が実現される。
【0083】また、前記機械命令生成手段は、前記第1
の拡張命令と前記第2の拡張命令との繰返しの前に、前
記第1の配列データの第1番目の配列要素に対応する記
憶領域から第1の配列要素を前記第1のレジスタにロー
ドする第1の前置ロード命令と、前記第2の配列データ
の第1番目の配列要素に対応する記憶領域から配列要素
を前記第2のレジスタにロードする第2の前置ロード命
令とを、追加して生成することもできる。
【0084】これによって、前記高級言語プログラム中
に第1の配列データの配列要素と第2の配列データの配
列要素との積を各配列要素毎に求めて累積加算する旨の
コードが記述されていた場合に、プロセッサに前記第1
の配列データ及び前記第2の配列データの第1番目の配
列要素についての積和演算処理を実行させるための機械
命令プログラムを生成することができる。
【0085】また、本発明に係るコンパイラが生成する
前記乗算命令には前記第3のレジスタを指定する情報が
暗示的に含まれることにすることもできる。これによっ
て、前記乗算命令の命令コードのサイズを小さいものと
することができる。また、本発明に係るコンパイラが生
成する前記累積加算命令には前記第3のレジスタ及び第
4のレジスタを指定する情報が暗示的に含まれることに
することもできる。
【0086】これによって、前記累積加算命令の命令コ
ードのサイズを小さいものとすることができる。また、
本発明に係る積和演算方法は、第1〜第4のレジスタと
乗算器と加算器を備えるプロセッサを用いて、記憶領域
に置かれた第1の配列データの配列要素と第2の配列デ
ータの配列要素との積を各配列要素毎に求めて累積加算
する積和演算方法であって、前記第1の配列データの配
列要素を前記第1のレジスタにロードする第1のデータ
ロードステップと、当該第1のデータロードステップに
よって前記第1の配列データの配列要素が前記第1のレ
ジスタにロードされる前の前記第1のレジスタの内容と
第2のレジスタの内容との積を求めて前記第3のレジス
タに格納する乗算ステップとを並行し、前記第2の配列
データの配列要素を前記第2のレジスタにロードする第
2のデータロードステップと、前記第3のレジスタの内
容と前記第4のレジスタの内容との和を求め再び前記第
4のレジスタに格納する加算ステップとを並行すること
を繰り返すことを特徴とする。
【0087】これによって、前記プロセッサは、前記デ
ータロードステップ及び前記乗算ステップの並列実行
と、前記データロードステップ及び前記加算ステップの
並列実行ができるので、低コストでかつ高速に積和演算
を実行することができる。また、本発明に係る記録媒体
は、第1〜第4のレジスタと乗算器と加算器とを備える
プロセッサを用いて記憶領域に置かれた第1の配列デー
タの配列要素と第2の配列データの配列要素との積を各
配列要素毎に求めて累積加算する積和演算プログラムを
記載した記録媒体であって、前記積和演算プログラム
は、前記第1の配列データの配列要素を前記第1のレジ
スタにロードする第1のデータロードステップと、当該
第1のデータロードステップによって前記第1の配列デ
ータの配列要素が前記第1のレジスタにロードされる前
の前記第1のレジスタの内容と第2のレジスタの内容と
の積を求めて前記第3のレジスタに格納する乗算ステッ
プとを並行する第1の拡張命令と、前記第2の配列デー
タの配列要素を前記第2のレジスタにロードする第2の
データロードステップと、前記第3のレジスタの内容と
前記第4のレジスタの内容との和を求め再び前記第4の
レジスタの格納する加算ステップとを並行する第2の拡
張命令とが繰り返されていることを特徴とする積和演算
プログラムを記録している。
【0088】これによって、前記プロセッサは、前記デ
ータロードステップ及び前記乗算ステップの並列実行
と、前記データロードステップ及び前記加算ステップの
並列実行ができるので、低コストでかつ高速に積和演算
を実行することができる。上述したように、本発明に係
るプロセッサ、コンパイラ、積和演算方法、及び記録媒
体は、ハードウェアコストを低く押さえ、かつ、高速に
積和演算を処理する技術であるので、積和演算を多用す
るマルチメディア関連の製品開発において非常に有用で
あり、マルチメディア関連産業の進歩発展に多大な貢献
をするものである。
【図面の簡単な説明】
【図1】実施形態に係るコンパイラの構成を示すブロッ
ク図である。
【図2】同実施形態に係る構文解析部の処理フローを示
したフローチャートである。
【図3】同実施形態に係る機械命令生成部の処理フロー
を示したフローチャートである。
【図4】積和演算の処理をするC言語のプログラムを示
した図である。
【図5】図4に示すC言語プログラムを入力として与え
た場合に、同実施形態に係るコンパイラにより生成され
た機械命令プログラムを示したリストである。
【図6】同実施形態に係るプロセッサの概略構成図であ
る。
【図7】同実施形態に係る命令読出し回路、命令解読回
路、及び命令実行回路の処理タイミングを示した処理タ
イミング図である。
【図8】同実施形態に係る命令実行回路の構成を示すブ
ロック図である。
【図9】図5の機械命令プログラムでアクセスするデー
タを格納したデータメモリの内容説明図である。
【図10】図5の機械命令プログラムに対応した命令実
行回路のサイクルt1〜t4における動作タイミング図
である。
【図11】図5の機械命令プログラムに対応した命令実
行回路のサイクルt5〜t8における動作タイミング図
である。
【図12】図5の機械命令プログラムに対応した命令実
行回路のサイクルt9〜t10における動作タイミング
図である。
【図13】従来のコンパイラによりC言語プログラムを
機械命令プログラムに翻訳した結果のプログラムリスト
である。
【図14】汎用プロセッサに付加する従来の専用積和演
算回路の構成を示すブロック図である。
【符号の説明】
14 Aバス(ABUS) 15 B1バス(B1BUS) 16 B2バス(B2BUS) 17 アドレスレジスタファイル(ARF) 18 データレジスタファイル(DRF) 21 演算器(ALU) 24 演算器出力バッファ(ALOB) 25 オペランドアドレスバッファ(OAB) 26 ストアバッファ(STB) 27 ロードバッファ(LDB) 28 乗算器(MPY) 29 加算器(CPA) 32 ラッチ(PRL) 33 ラッチ(PRH1) 34 ラッチ(PRH2) 35 積和下位桁レジスタ(ACCL) 36 積和上位桁レジスタ(ACCH) 37 積和桁上げ蓄積レジスタ(ACCC) 101 C言語プログラム 102 コンパイラ 103 ファイル読込部 104 読込用バッファ 105 構文解析部 106 中間コード用バッファ 107 機械命令生成部 108 出力用バッファ 109 ファイル出力部 110 機械命令プログラム 601 プロセッサ 602 命令読出し回路 603 命令解読回路 604 命令実行回路 605 命令バス 606 データバス 607 プログラムメモリ 608 データメモリ

Claims (12)

    【特許請求の範囲】
  1. 【請求項1】 記憶領域に置かれた第1の配列データの
    配列要素と第2の配列データの配列要素との積を各配列
    要素毎に求めて累積加算するプロセッサであって、 プログラムメモリから命令を読み出す命令読出し手段
    と、 前記命令読出し手段によって読み出された所定の第1の
    拡張命令と第2の拡張命令とを解読する命令解読手段
    と、 第1〜第4のレジスタと、 前記第1及び第2の配列データの配列要素をそれぞれ前
    記第1及び第2のレジスタにロードするデータロード手
    段と、 前記第1及び第2のレジスタの内容の積を求めて前記第
    3のレジスタに格納する乗算手段と、 前記第3のレジスタの内容と前記第4のレジスタの内容
    との和を求め再び前記第4のレジスタに格納する加算手
    段と、 前記命令解読手段により前記第1の拡張命令が解読され
    た場合に前記乗算手段を実行させると並行して前記デー
    タロード手段に新たに前記第1の配列データの配列要素
    をロードさせる第1の実行制御手段と、 前記命令解読手段により前記第2の拡張命令が解読され
    た場合に前記データロード手段に前記第2の配列データ
    の配列要素をロードさせると並行して前記加算手段を実
    行させる第2の実行制御手段とからなる命令実行手段と
    を備えることを特徴とするプロセッサ。
  2. 【請求項2】 前記第1の拡張命令は、前記記憶領域か
    ら第1の配列データの配列要素を前記第1のレジスタに
    ロードする第1のロード命令と、当該第1のロード命令
    の結果が格納される前の前記第1のレジスタの内容と前
    記第2のレジスタの内容との積を求めて前記第3のレジ
    スタに格納する乗算命令とが連続して配置された命令で
    あり、 前記第2の拡張命令は、前記記憶領域から第2の配列デ
    ータの配列要素を前記第2のレジスタにロードする第2
    のロード命令と、前記第3のレジスタの内容と前記第4
    のレジスタの内容との和を求め再び前記第4のレジスタ
    に格納する累積加算命令とが連続して配置された命令で
    あり、 前記命令解読手段は、前記記憶領域から第1の配列デー
    タの配列要素を前記第1のレジスタにロードする第1の
    ロード命令と、当該第1のロード命令の結果が格納され
    る前の前記第1のレジスタの内容と前記第2のレジスタ
    の内容との積を求めて前記第3のレジスタに格納する乗
    算命令とが連続して配置された命令を並列して解読し、
    前記記憶領域から第2の配列データの配列要素を前記第
    2のレジスタにロードする第2のロード命令と、前記第
    3のレジスタの内容と前記第4のレジスタの内容との和
    を求め再び前記第4のレジスタに格納する累積加算命令
    とが連続して配置された命令を並列して解読する並列解
    読手段を備えることを特徴とする請求項1記載のプロセ
    ッサ。
  3. 【請求項3】 前記乗算命令には前記第3のレジスタを
    指定する情報が暗示的に含まれ、 前記累積加算命令には前記第3のレジスタ及び第4のレ
    ジスタを指定する情報が暗示的に含まれ、 前記第3のレジスタ及び前記第4のレジスタは、専用の
    レジスタであることを特徴とする請求項2記載のプロセ
    ッサ。
  4. 【請求項4】 前記乗算手段は、ツリー接続された複数
    の桁上げ保存加算器と、前記ツリーの最終段の和出力と
    桁上げ出力とを加算する桁上げ伝搬加算器とからなり、 前記加算手段は、前記和を求めるために前記桁上げ伝搬
    加算器を用いることを特徴とする請求項3記載のプロセ
    ッサ。
  5. 【請求項5】 記憶領域に置かれた第1の配列データの
    配列要素と第2の配列データの配列要素との積を各配列
    要素毎に求めて累積加算する積和演算を実行するプロセ
    ッサであって、 同一のクロックパルスを受けて動作しプログラムメモリ
    中の命令に従ってデータを処理する主たるプロセッサと
    従たる拡張演算装置とを備え、 前記主たるプロセッサは、プログラムメモリから命令を
    読み出す命令読出し手段と、前記命令読出し手段によっ
    て読み出された命令の解読を行う命令解読手段と、前記
    命令解読手段の解読結果に応じて命令の実行を行う命令
    実行手段とをからなり、 前記命令実行手段は、命令実行制御手段と加算器を備
    え、 前記従たる拡張演算装置は、乗算器を備え、 前記主たるプロセッサと前記従たる拡張演算装置とは、
    前記命令実行手段からデータを前記乗算器に伝送する第
    1のバス及び前記乗算器の乗算結果を前記命令実行手段
    に伝送する第2のバスにより接続され、 前記命令実行制御手段は、前記命令解読手段により前記
    積和演算の命令が解読された場合に、前記加算器を用い
    て前記第1の配列データの配列要素にアクセスするため
    のアドレス計算と前記第2の配列データの配列要素にア
    クセスするためのアドレス計算と前記累積加算とを行
    い、これと並行して前記従たる拡張演算装置に前記乗算
    器を用いて前記乗算を行わせることを特徴とするプロセ
    ッサ。
  6. 【請求項6】 高級言語プログラムから第1〜第4のレ
    ジスタと乗算器と加算器を備えるプロセッサを対象とす
    る機械命令プログラムを生成するコンパイラであって、 前記高級言語プログラム中に第1の配列データの配列要
    素と第2の配列データの配列要素との積を各配列要素毎
    に求めて累積加算する旨のコードを検出する検出手段
    と、 前記コードが検出された場合に、前記第1のレジスタの
    内容と前記第2のレジスタの内容との積を求めて前記第
    3のレジスタに格納させると並行して記憶領域から新た
    に前記第1の配列データの配列要素を前記第1のレジス
    タにロードさせるための第1の拡張命令と、記憶領域か
    ら前記第2の配列データの配列要素を前記第2のレジス
    タにロードさせると並行して前記第3のレジスタの内容
    と前記第4のレジスタの内容との和を求め再び前記第4
    のレジスタに格納させるための第2の拡張命令と、が繰
    り返された機械命令プログラムを生成する機械命令生成
    手段とを備えることを特徴とするコンパイラ。
  7. 【請求項7】 前記第1の拡張命令は、前記記憶領域か
    ら第1の配列データの配列要素を前記第1のレジスタに
    ロードする第1のロード命令と、当該第1のロード命令
    の結果が格納される前の前記第1のレジスタの内容と前
    記第2のレジスタの内容との積を求めて前記第3のレジ
    スタに格納する乗算命令とが連続して配置された命令で
    あり、 前記第2の拡張命令は、前記記憶領域から第2の配列デ
    ータの配列要素を前記第2のレジスタにロードする第2
    のロード命令と、前記第3のレジスタの内容と前記第4
    のレジスタの内容との和を求め再び前記第4のレジスタ
    に格納する累積加算命令とが連続して配置された命令で
    あることを特徴とする請求項6記載のコンパイラ。
  8. 【請求項8】 前記機械命令生成手段は、 前記第1の拡張命令と前記第2の拡張命令との繰返しの
    前に、前記第1の配列データの第1番目の配列要素に対
    応する記憶領域から第1の配列要素を前記第1のレジス
    タにロードする第1の前置ロード命令と、前記第2の配
    列データの第1番目の配列要素に対応する記憶領域から
    配列要素を前記第2のレジスタにロードする第2の前置
    ロード命令とを、追加して生成することを特徴とする請
    求項7記載のコンパイラ。
  9. 【請求項9】 前記乗算命令には前記第3のレジスタを
    指定する情報が暗示的に含まれることを特徴とする請求
    項8記載のコンパイラ。
  10. 【請求項10】 前記累積加算命令には前記第3のレジ
    スタ及び第4のレジスタを指定する情報が暗示的に含ま
    れることを特徴とする請求項9記載のコンパイラ。
  11. 【請求項11】 第1〜第4のレジスタと乗算器と加算
    器を備えるプロセッサを用いて、記憶領域に置かれた第
    1の配列データの配列要素と第2の配列データの配列要
    素との積を各配列要素毎に求めて累積加算する積和演算
    方法であって、 前記第1の配列データの配列要素を前記第1のレジスタ
    にロードする第1のデータロードステップと、 当該第1のデータロードステップによって前記第1の配
    列データの配列要素が前記第1のレジスタにロードされ
    る前の前記第1のレジスタの内容と第2のレジスタの内
    容との積を求めて前記第3のレジスタに格納する乗算ス
    テップとを並行し、 前記第2の配列データの配列要素を前記第2のレジスタ
    にロードする第2のデータロードステップと、 前記第3のレジスタの内容と前記第4のレジスタの内容
    との和を求め再び前記第4のレジスタに格納する加算ス
    テップとを並行することを繰り返すことを特徴とする積
    和演算方法。
  12. 【請求項12】 第1〜第4のレジスタと乗算器と加算
    器とを備えるプロセッサを用いて記憶領域に置かれた第
    1の配列データの配列要素と第2の配列データの配列要
    素との積を各配列要素毎に求めて累積加算する積和演算
    プログラムを記載した記録媒体であって、 前記積和演算プログラムは、 前記第1の配列データの配列要素を前記第1のレジスタ
    にロードする第1のデータロードステップと、 当該第1のデータロードステップによって前記第1の配
    列データの配列要素が前記第1のレジスタにロードされ
    る前の前記第1のレジスタの内容と第2のレジスタの内
    容との積を求めて前記第3のレジスタに格納する乗算ス
    テップとを並行する第1の拡張命令と、 前記第2の配列データの配列要素を前記第2のレジスタ
    にロードする第2のデータロードステップと、 前記第3のレジスタの内容と前記第4のレジスタの内容
    との和を求め再び前記第4のレジスタに格納する加算ス
    テップとを並行する第2の拡張命令とが繰り返されてい
    ることを特徴とする積和演算プログラムを記録した記録
    媒体。
JP9160202A 1997-06-17 1997-06-17 プロセッサ、コンパイラ、積和演算方法及び記録媒体 Pending JPH117440A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP9160202A JPH117440A (ja) 1997-06-17 1997-06-17 プロセッサ、コンパイラ、積和演算方法及び記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP9160202A JPH117440A (ja) 1997-06-17 1997-06-17 プロセッサ、コンパイラ、積和演算方法及び記録媒体

Publications (1)

Publication Number Publication Date
JPH117440A true JPH117440A (ja) 1999-01-12

Family

ID=15710006

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9160202A Pending JPH117440A (ja) 1997-06-17 1997-06-17 プロセッサ、コンパイラ、積和演算方法及び記録媒体

Country Status (1)

Country Link
JP (1) JPH117440A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7821119B2 (en) 1999-06-30 2010-10-26 Renesas Electronics Corporation Semiconductor device

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7821119B2 (en) 1999-06-30 2010-10-26 Renesas Electronics Corporation Semiconductor device
US8115298B2 (en) 1999-06-30 2012-02-14 Renesas Electronics Corporation Semiconductor device
US8637965B2 (en) 1999-06-30 2014-01-28 Renesas Electronics Corporation Semiconductor device and a method of manufacturing the same and a mounting structure of a semiconductor device
US8969138B2 (en) 1999-06-30 2015-03-03 Renesas Electronics Corporation Semiconductor device and a method of manufacturing the same and a mounting structure of a semiconductor device
US9484288B2 (en) 1999-06-30 2016-11-01 Renesas Technology Corporation Semiconductor device and a method of manufacturing the same and a mounting structure of a semiconductor device

Similar Documents

Publication Publication Date Title
CN109240746B (zh) 一种用于执行矩阵乘运算的装置和方法
US8412917B2 (en) Data exchange and communication between execution units in a parallel processor
US8443170B2 (en) Apparatus and method for performing SIMD multiply-accumulate operations
US8595280B2 (en) Apparatus and method for performing multiply-accumulate operations
US7389404B2 (en) Apparatus and method for matrix data processing
JP3750820B2 (ja) パック・データの乗加算演算を実行する装置
US4539635A (en) Pipelined digital processor arranged for conditional operation
US4298936A (en) Array Processor
WO2018192500A1 (zh) 处理装置和处理方法
JPH10187438A (ja) 乗算器の入力に対する遷移を減少させる方法
CN117634569B (zh) 基于risc-v扩展指令的量化神经网络加速处理器
JP2959104B2 (ja) 信号処理プロセッサ
KR101202445B1 (ko) 프로세서
US6505288B1 (en) Matrix operation apparatus and digital signal processor capable of performing matrix operations
CN115576606A (zh) 实现矩阵转置乘的方法、协处理器、服务器及存储介质
Vishnu et al. 32-Bit RISC processor using vedicmultiplier
JPH0683582A (ja) データ演算装置
US5363322A (en) Data processor with an integer multiplication function on a fractional multiplier
US4598358A (en) Pipelined digital signal processor using a common data and control bus
JPH117440A (ja) プロセッサ、コンパイラ、積和演算方法及び記録媒体
US6115805A (en) Non-aligned double word fetch buffer
JP7575841B2 (ja) 迅速かつ広範な結果生成のための隣接simdユニットの再利用
US20250217313A1 (en) Reduce interpolation operations
JP2778478B2 (ja) 相関演算プロセッサ
CA1165455A (en) Pipelined digital signal processor using a common data and control bus