(57)【特許請求の範囲】
【請求項１】
ＳＩＭＤ（Single-Instruction-Multiple-Data）命令を１つまたは複数のクロックサイクルにわたって繰り返し実行する第１の命令実行部と、
非ＳＩＭＤ命令を前記第１の命令実行部から独立して実行する第２の命令実行部と、
ＳＩＭＤ命令と非ＳＩＭＤ命令とを含むプログラムを蓄積するプログラムメモリと、
プログラムの実行シーケンスにしたがって前記プログラムメモリよりＳＩＭＤ命令または非ＳＩＭＤ命令を順次読み出す命令読み出し手段と、
ＳＩＭＤ命令の実行中に前記プログラムメモリより非ＳＩＭＤ命令が読み出されたときは前記第１の命令実行部による当該ＳＩＭＤ命令の実行と並行して前記第２の命令実行部に当該非ＳＩＭＤ命令を実行させる命令実行制御手段と
を有し、
前記命令読み出し手段が、前記プログラムメモリに対してアドレスを供給するプログラムカウンタを含み、
前記命令実行制御手段が、前記プログラムメモリから読み出された命令中の命令形式識別データを入力してＳＩＭＤ命令または非ＳＩＭＤ命令を示す第１の制御信号を出力する命令識別手段を含み、
前記第２の命令実行部が、前記プログラムメモリから読み出された非ＳＩＭＤ命令と前記第１の制御信号とに応答して当該非ＳＩＭＤ命令を実行し、
前記プログラムカウンタが、前記第１の制御信号に応答してアドレスの値を更新するプロセッサ。
【請求項２】
前記第１の命令実行部が、
ＳＩＭＤ命令の命令コード部で規定される処理を１クロックサイクル内に１ビット単位で実行する処理部と、
前記プログラムメモリより読み出された各々の前記ＳＩＭＤ命令についてその命令の命令コード部をマイクロ命令として前記処理部に与えるマイクロ命令レジスタと、
前記プログラムメモリより読み出された各々の前記ＳＩＭＤ命令についてその命令に係わるデータアドレスを１クロックサイクル毎に初期値から所定の最終値までインクリメントまたはディクリメントしながら前記処理部に逐次与えるアドレスカウンタと、
前記プログラムメモリより読み出された各々の前記ＳＩＭＤ命令について前記命令コード部で規定される処理が前記処理部で繰り返し実行される回数をカウントするリピートカウンタと、
前記リピートカウンタのカウント値が所定の値になると第２の制御信号を出力する一致回路と
を有し、
前記第２の制御信号が、前記マイクロ命令レジスタおよび前記アドレスカウンタにイネーブル信号として供給される請求項１に記載のプロセッサ。
【請求項３】
前記プログラムメモリより読み出されたＳＩＭＤ命令を先入れ先出し方式で蓄積し、読み出したＳＩＭＤ命令を第１の命令実行部に与える先入れ先出し型メモリを有する請求項１に記載のプロセッサ。
【請求項４】
前記第１の命令実行部が、
ＳＩＭＤ命令の命令コード部で規定される処理を１クロックサイクル内に１ビット単位で実行する処理部と、
前記先入れ先出し型メモリより読み出された各々の前記ＳＩＭＤ命令についてその命令の命令コード部をマイクロ命令として前記処理部に与えるマイクロ命令レジスタと、
前記先入れ先出し型メモリより読み出された各々の前記ＳＩＭＤ命令についてその命令に係わるデータアドレスを１クロックサイクル毎に初期値から所定の最終値までインクリメントまたはディクリメントしながら前記処理部に逐次与えるアドレスカウンタと、
前記先入れ先出し型メモリより読み出された各々の前記ＳＩＭＤ命令について前記命令コード部で規定される処理が前記処理部で繰り返し実行される回数をカウントするリピートカウンタと、
前記リピートカウンタのカウント値が所定の値になると第２の制御信号を出力する一致回路と
を有し、
前記第２の制御信号が、前記マイクロ命令レジスタおよび前記アドレスカウンタにイネーブル信号として供給される請求項３に記載のプロセッサ。
【請求項５】
前記先入れ先出し型メモリにはＳＩＭＤ命令の実行シーケンスと同期して実行されるべき所定の非ＳＩＭＤ命令も蓄積され、前記所定の非ＳＩＭＤ命令は前記先入れ先出し型メモリより読み出された時点で前記第２の命令実行部により実行される請求項３または４に記載のプロセッサ。
【請求項６】
前記プログラムメモリには各命令の一部または全部がコード化されて蓄積され、前記プログラムメモリより読み出された命令をデコードするデコーダが設けられている請求項１〜４のいずれかに記載のプロセッサ。
【請求項７】
前記処理部が、走査線上の画素に１対１の対応関係で割り当てられ、かつ共通のＳＩＭＤ命令にしたがって同一の動作を行う複数個のプロセッシング・エレメントを有し、入力した画像信号を走査線単位で処理する請求項１〜５のいずれかに記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ディジタル信号処理を行うためのプロセッサに係り、特に１つの命令を複数のクロックサイクルにわたって繰り返し実行する機能を備えたプロセッサに関する。
【０００２】
【従来の技術】
この種のプロセッサとしてたとえばＳＩＭＤ（Single-Instruction-Multiple-Data）型並列プロセッサが知られている。ＳＩＭＤ型並列プロセッサでは、並列配置された多数（通常、少なくとも１００個以上）のプロセッシング・エレメントが同一の命令にしたがって並列動作するように構成されている。各プロセッシング・エレメントは１ビットＤＳＰ（Digital-Signal-Processor）からなり、１つの演算処理を１クロックサイクル内に１ビット単位で実行する。したがって、たとえば１つの８ビットデータを移動する場合には、１ビットのデータ移動を８クロックサイクルかけて８回繰り返し実行する。また、２つの８ビットデータを加算して９ビットの加算結果（最上位ビットは桁上げ分）を得るには、１ビットの加算演算を９クロックサイクルかけて９回繰り返し実行することになる。もっとも、多数のプロセッシング・エレメントによる演算処理が同時に行なわれるため、全体としては高い処理性能を実現することが可能である。
【０００３】
【発明が解決しようとする課題】
上記のようなＳＩＭＤ型並列プロセッサにおいて、全プロセッシング・エレメントに共通の命令を発行する命令発行部には、プロセッシング・エレメントに対する命令（ＳＩＭＤ命令）以外にジャンプ、サブルーチンコール、ハードウェア割込み関連の命令も用意されることがある。これらの非ＳＩＭＤ命令はプロセッシング・エレメントとは別の命令実行部で実行される。
【０００４】
従来のＳＩＭＤ型並列プロセッサでは、プログラムの実行シーケンスにおいてＳＩＭＤ命令か非ＳＩＭＤ命令かの区別なく各命令が順番に１つずつシリアルに実行される仕組みになっている。したがって、プロセッシング・エレメントによるＳＩＭＤ命令の実行中に命令発行部においてプログラムメモリより非ＳＩＭＤ命令が読み出されたときは、該ＳＩＭＤ命令の実行が終了するまで該非ＳＩＭＤ命令は待機状態に置かれ、該ＳＩＭＤ命令の実行が終了してから上記命令実行部で該非ＳＩＭＤ命令が実行されることになる。そして、非ＳＩＭＤ命令の実行中は、プロセッシング・エレメントに対して命令の不実行を指示するＮＯＰ（No-Operation）命令が与えられる。しかし、このように、非ＳＩＭＤ命令が実行される度にプロセッシング・エレメント側の動作が実質的に停止または休止することで、処理性能が制限されている。
【０００５】
本発明は、かかる問題点に鑑みてなされたもので、１つの命令を複数のクロックサイクルにわたって繰り返し実行するシステムの処理効率を向上させるプロセッサを提供することを目的とする。
【０００６】
さらに、本発明は、プログラムメモリの所要記憶容量を小さくできるプロセッサを提供することを目的とする。
【０００７】
【課題を解決するための手段】
上記の目的を達成するために、本発明のプロセッサは、ＳＩＭＤ（Single-Instruction-Multiple-Data）命令を１つまたは複数のクロックサイクルにわたって繰り返し実行する第１の命令実行部と、非ＳＩＭＤ命令を前記第１の命令実行部から独立して実行する第２の命令実行部と、ＳＩＭＤ命令と非ＳＩＭＤ命令とを含むプログラムを蓄積するプログラムメモリと、プログラムの実行シーケンスにしたがって前記プログラムメモリよりＳＩＭＤ命令または非ＳＩＭＤ命令を順次読み出す命令読み出し手段と、ＳＩＭＤ命令の実行中に前記プログラムメモリより非ＳＩＭＤ命令が読み出されたときは前記第１の命令実行部による当該ＳＩＭＤ命令の実行と並行して前記第２の命令実行部に当該非ＳＩＭＤ命令を実行させる命令実行制御手段とを有し、前記命令読み出し手段が、前記プログラムメモリに対してアドレスを供給するプログラムカウンタを含み、前記命令実行制御手段が、前記プログラムメモリから読み出された命令中の命令形式識別データを入力してＳＩＭＤ命令または非ＳＩＭＤ命令を示す第１の制御信号を出力する命令識別手段を含み、前記第２の命令実行部が、前記プログラムメモリから読み出された非ＳＩＭＤ命令と前記第１の制御信号とに応答して当該非ＳＩＭＤ命令を実行し、前記プログラムカウンタが、前記第１の制御信号に応答してアドレスの値を更新する。
【０００８】
本発明のプロセッサにおいては、プログラムメモリにＳＩＭＤ命令と非ＳＩＭＤ命令とを含むプログラムが蓄積され、プログラムカウンタを含む命令読み出し手段によりＳＩＭＤ命令または非ＳＩＭＤ命令が所定の順序で読み出される。プログラムメモリ内でＳＩＭＤ命令と非ＳＩＭＤ命令は任意の順序で混在して構わない。第１の命令実行部でＳＩＭＤ命令の繰り返し実行が行なわれている最中にプログラムメモリより読み出された非ＳＩＭＤ命令については第１の命令実行部の処理動作と並行して第２の命令実行部が該非ＳＩＭＤ命令を実行するので、第１命令実行部の稼動率ひいては全体のスループットが向上する。本発明のプロセッサにおける命令実行制御手段は、プログラムメモリから読み出された命令中の命令形式識別データを入力してＳＩＭＤ命令または非ＳＩＭＤ命令を示す第１の制御信号を出力する命令識別手段を含んでいる。第２の命令実行部は、プログラムメモリから読み出された非ＳＩＭＤ命令と第１の制御信号とに応答して当該非ＳＩＭＤ命令を実行し、プログラムカウンタは第１の制御信号に応答してアドレスの値を更新する。
【０００９】
本発明のプロセッサにおいて、好ましくは、前記第１の命令実行部が、ＳＩＭＤ命令の命令コード部で規定される処理を１クロックサイクル内に１ビット単位で実行する処理部と、前記プログラムメモリより読み出された各々の前記ＳＩＭＤ命令についてその命令の命令コード部をマイクロ命令として前記処理部に与えるマイクロ命令レジスタと、前記プログラムメモリより読み出された各々の前記ＳＩＭＤ命令についてその命令に係わるデータアドレスを１クロックサイクル毎に初期値から所定の最終値までインクリメントまたはディクリメントしながら前記処理部に逐次与えるアドレスカウンタと、前記プログラムメモリより読み出された各々の前記ＳＩＭＤ命令について前記命令コード部で規定される処理が前記処理部で繰り返し実行される回数をカウントするリピートカウンタと、前記リピートカウンタのカウント値が所定の値になると第２の制御信号を出力する一致回路とを有し、前記第２の制御信号が、前記マイクロ命令レジスタおよび前記アドレスカウンタにイネーブル信号として供給される。
【００１０】
また、本発明のプロセッサは、好ましくは、前記プログラムメモリより読み出されたＳＩＭＤ命令を先入れ先出し方式で蓄積し、読み出したＳＩＭＤ命令を第１の命令実行部に与える先入れ先出し型メモリを有してよい。
【００１１】
その場合、非ＳＩＭＤ命令であっても、ＳＩＭＤ命令の実行シーケンスと同期して実行されるべきものについては、いったん先入れ先出し型メモリに蓄積し、先入れ先出し型メモリより読み出した時点で第２の命令実行部で実行する構成としてもよい。
【００１２】
また、本発明のプロセッサにおいて、プログラムメモリの所要容量を少なくするために、前記プログラムメモリには各命令の一部または全部がコード化されて蓄積され、前記プログラムメモリより読み出された命令をデコードするデコーダが設けられている構成としてもよい。
【００１３】
【発明の実施の形態】
以下、添付図を参照して本発明の実施例を説明する。
【００１４】
図１に、本発明の一実施例によるＳＩＭＤ型並列プロセッサの構成を示す。
このＳＩＭＤ型並列プロセッサは、画像信号を走査線単位で入力、並列演算処理および出力するＳＶＰ（Scan-line Video Processor ）１０として構成されている。
【００１５】
このＳＶＰ１０は、１チップ上にＳＶＰコア１２と命令発生部（ＩＧ）１４とを搭載している。ＳＶＰコア１２は、データ入力レジスタ（ＤＩＲ）１６、ＳＩＭＤ型ディジタル信号処理部１８およびデータ出力レジスタ（ＤＯＲ）２０の三層構造からなっている。
【００１６】
ＤＩＲ１６は、外部制御回路からの制御信号＜Control＞と外部クロック回路からのクロック＜SWCK＞とＩＧ１４からのアドレス＜ADDRESS＞とにしたがって動作し、たとえば水平走査線３本分までの画像データＤ0 〜ＤN-1 （たとえば４８ビット×８６４画素）を繰り返し入力する。
【００１７】
ＳＩＭＤ型ディジタル信号処理部１８は、１水平走査線上の画素数Ｎに等しい数（たとえば８６４個）のプロセッシング・エレメントＰＥ0 〜ＰＥN-1 を並列配置（接続）してなる。これらのプロセッシング・エレメントＰＥ0 ，ＰＥ1 ，…ＰＥN-1 は、ＩＧ１４からのアドレス＜ADDRESS＞およびマイクロ命令＜MICROINSTRUCTION＞と外部クロック回路からのクロック＜PCLK＞とにしたがって並列動作し、各々対応する画素データＤ0 ，Ｄ1 ，…ＤN-1 について同一の画像処理演算を１水平走査期間内に実行する。
【００１８】
ＤＯＲ２０は、外部制御回路からの制御信号＜Control＞と外部クロック回路からのクロック＜SRCK＞とＩＧ１４からのアドレス＜ADDRESS＞とにしたがって動作し、１水平走査期間毎にプロセッシング・エレメントＰＥ0 〜ＰＥN-1 からの演算処理結果のデータを水平走査線１本分の画像データＤ0'〜ＤN-1'（たとえば３２ビット×８６４画素）に揃えて出力する。
【００１９】
ＤＩＲ１６、処理部１８およびＤＯＲ２０にそれぞれ供給されるクロック＜SWCK＞ 、＜PCLK＞および＜SRCK＞ は互いに非同期であってよい。また、ＤＩＲ１６から処理部１８へのデータ転送、および処理部１８からＤＯＲ２０へのデータ転送は、それぞれ水平ブランキング期間内に行われる。
【００２０】
このように、ＤＩＲ１６、処理部１８およびＤＯＲ２０によりそれぞれ１水平走査線分のデータ入力、並列演算処理およびデータ出力がパイプライン方式で非同期かつ並列的に実行され、リアルタイムな画像処理が行われる。
【００２１】
ＩＧ１４は、ＳＶＰコア１２をＳＩＭＤ型並列プロセッサとして動作させるため、所要のプログラムを保持するＲＡＭまたはＲＯＭからなるプログラムメモリを内蔵しており、外部からのフラグ信号＜ＩＧＦＬＡＧ−Ａ／Ｂ＞等にしたがって、飛び越し、サブルーチンコール、割り込み等も行えるようになっている。フラグ信号＜ＩＧＦＬＡＧ−Ａ／Ｂ＞は、たとえば、入力画像信号より抽出された水平同期信号＜HSYNC＞に同期して与えられる。
【００２２】
ここで、図２につきＳＶＰコア１２の内部の作用を概略的に説明する。ＳＶＰコア１２内の各部の動作は、上記したようにＩＧ１４からのアドレス＜ADDRESS＞およびマイクロ命令＜MICROINSTRUCTION＞や外部クロック回路からのクロック＜PCLK＞ 等によって制御される。
【００２３】
図２において、ＤＩＲ１６は１ライン分の入力画像データＤ0 〜ＤN-1 を蓄積できる記憶容量（たとえば４８ビット×８６４ワード）を有し、画素単位でブロック化されている。入力画像データＤ0 〜ＤN-1 がＤＩＲ１６内を転送される途中、各画素データ…，ＤK-2,ＤK-1,ＤK,ＤK+1,ＤK+2,…は１個ずつ次々と引き落とされるようにしてＤＩＲ１６の各ブロック…，Ｋ−２，Ｋ−１，Ｋ，Ｋ＋１，Ｋ＋２，…のレジスタ群に取り込まれる。
【００２４】
処理部１８の各プロセッシング・エレメントＰＥK は、各々が所定の容量（たとえば１９２ビット）を有する一対のレジスタ・ファイルＲＦ0,ＲＦ1 と、１個の１ビット演算論理ユニット（ＡＬＵ）２４と、複数個たとえば４個のワーキング・レジスタ２６［Ｍ，Ａ，Ｂ，Ｃ］と、左右隣の複数個（たとえば左右各４個）のプロセッシング・エレメントＰＥK-4,ＰＥK-3,ＰＥK-2,ＰＥK-1，ＰＥK+1,ＰＥK+2,ＰＥK+3,ＰＥK+4とデータをやりとりするＬ／Ｒ（左右）通信部（ＬＲＣＯＭ）２８とを有している。
【００２５】
一方のレジスタ・ファイルＲＦ0 はＤＩＲ１６の対応するブロックのレジスタ群に接続され、他方のレジスタ・ファイルＲＦ1 はＤＯＲ２０の対応するブロックのレジスタ群に接続されている。レジスタ・ファイルＲＦ0,ＲＦ1 の片方または双方から読み出された１ビットのデータは、ワーキング・レジスタ［Ｍ，Ａ，Ｂ，Ｃ］のいずれかに与えられるとともに、Ｌ／Ｒ通信部２８のマルチプレクサ３０およびラッチ回路３２を介して隣接する左右各４個のプロセッシング・エレメントＰＥK-4,ＰＥK-3,ＰＥK-2,ＰＥK-1 ，ＰＥK+1,ＰＥK+2,ＰＥK+3,ＰＥK+4へ送られる。
【００２６】
これと同時に、それら隣の各プロセッシング・エレメントＰＥK-4,ＰＥK-3,ＰＥK-2,ＰＥK-1，ＰＥK+1,ＰＥK+2,ＰＥK+3,ＰＥK+4からのデータも当該プロセッシング・エレメントＰＥK のＬ／Ｒ通信部２８のマルチプレクサ３４，３６に送られてきて、それらのデータの中のいずれか１つが選択されてワーキング・レジスタ［Ｍ，Ａ，Ｂ，Ｃ］のいずれかに入力される。図２では、左隣のプロセッシング・エレメントＰＥK-4,ＰＥK-3,ＰＥK-2,ＰＥK-1からのデータのいずれか１つが選択され、ワーキング・レジスタ［Ａ］に入力されたことを示している。
【００２７】
ＡＬＵ２４は、ワーキング・レジスタ［Ｍ，Ａ，Ｂ，Ｃ］より与えられるデータについて１ビット単位の加算演算を実行し、その演算結果（和，桁上げ）を出力する。ＡＬＵ２４の演算結果のうち、和（ＳＭ）のビットはレジスタ・ファイルＲＦ0,ＲＦ1 のいずれかに書き込まれ、桁上げ（ＣＹ）のビットは図示しないマルチプレクサを介してワーキング・レジスタ［Ｃ］に与えられる。
【００２８】
ＤＯＲ２０は、１ライン分の出力画像データＤ0'〜ＤN-1'を蓄積できる記憶容量（たとえば３２ビット×８６４ワード）を有し、画素単位でブロック化されている。各ブロック毎に処理部１８よりＤＯＲ２０に送られてきた演算処理結果の画素データＤ0'〜ＤN-1'は、１水平走査期間をかけて左端の画素データＤ0'を先頭に後続の画素データＤ1', Ｄ2', …が数珠繋ぎに続くように順にＤＯＲ２０の各ブロックから送出される。
【００２９】
処理部１８は、レジスタ・ファイルＲＦ0,ＲＦ1 に２ライン分以上の画像データを蓄積することが可能であり、これによってラインメモリの機能も実現可能となっている。また、処理部１８は、１水平走査期間中に複数チャンネルの画像データについて時分割的に各個別の処理を実行することも可能である。
【００３０】
図３に、本発明の一実施例におけるＩＧ１４の要部の構成を示す。
このＩＧ１４は、プログラムメモリ４０の外に、プログラムカウンタ４２、ＩＧ命令実行ユニット４４、マイクロ命令レジスタ４６、アドレスカウンタ４８，５０、リピートカウンタ５２、一致回路５４、切換スイッチ５６，５８、ゲート６０，６２およびインバータ６４を有している。
【００３１】
プログラムメモリ４０はＲＯＭ（Read Only Memory）またはＲＡＭ（Random Access Memory）からなり、このＳＩＭＤ型並列プロセッサの処理動作に必要なプログラムを保持する。このプログラムメモリ４０に格納されるプログラムには、処理部１８のプロセッシング・エレメントＰＥ0 〜ＰＥN-1 に対する命令（以下、ＳＩＭＤ命令と称する）だけでなく、ジャンプ、サブルーチンコール、ハードウェア割込み関連の命令（以下、ＩＧ命令と称する）も含まれている。
【００３２】
本実施例においてプログラムを構成する個々の命令（プログラムデータ）は、たとえば４６ビット［０〜４５］のデータ長を有する。４６ビット［０〜４５］のうち、［４０，４１］の２ビット・データが当該命令の形式つまりＳＩＭＤ命令なのか、ＩＧ命令なのかを表す。
【００３３】
ＳＩＭＤ命令の場合、フィールド［０〜９］、［１２〜２１］の各１０ビット・データが各プロセッシング・エレメントＰＥKにおけるレジスタ・ファイルＲＦ0,ＲＦ1内の初期アドレスをそれぞれ表す。また、フィールド［１０〜１１、２２〜３９］の２０ビット・データが当該ＳＩＭＤ命令の命令コード部を構成し、これがＳＶＰコア１２に対するマイクロ命令＜MICROINSTRUCTION＞となる。また、フィールド［４２〜４５］の４ビット・データが、当該ＳＩＭＤ命令のリピート値（繰り返し回数）を表す。
【００３４】
ＩＧ命令の場合、命令形式識別データ［４０，４１］を除く［０〜３９，４２〜４５］のデータが当該ＩＧ命令の命令コードおよびオペランド（データアドレス）を与える。
【００３５】
プログラムカウンタ４２は、プログラムの実行シーケンスにおいてクロックサイクル毎にカウンタ値をメモリアドレスとしてプログラムメモリ４０（より詳細にはメモリ読出回路（図示せず））に与える。
【００３６】
ＩＧ命令実行ユニット４４は、プログラムメモリ４０より読み出されたＩＧ命令を逐一実行する。本実施例におけるＩＧ命令は、上記したようにジャンプ、サブルーチンコール、割込み等であるから、プログラムの実行シーケンスを変えることがある。ＩＧ命令実行ユニット４４は、１クロックサイクルでＩＧ命令を実行し、そのＩＧ命令で指定されたメモリアドレスをプログラムカウンタ４２にセットする。
【００３７】
プログラムメモリ４０より読み出された命令形式識別データ［４０，４１］は、当該命令がＳＩＭＤ命令であるときは（０，０）である。このとき、アンドゲート６０の出力は論理値“０”となり、両切換スイッチ５６，５８はそれぞれ入力端子ａに切り換わる。
【００３８】
マイクロ命令レジスタ４６は、プログラムメモリ４０より読み出されたＳＩＭＤ命令の中の命令コード部［１０〜１１，２２〜３９］を切換スイッチ５６を介して受け取る。該ＳＩＭＤ命令の実行中、マイクロ命令レジスタ４６はこの命令コード部をマイクロ命令＜MICROINSTRUCTION＞としてＳＶＰコア１２内の各プロセッシング・エレメントＰＥ0 〜ＰＥN-1に与える。
【００３９】
アドレスカウンタ４８は、プログラムメモリ４０より読み出されたＳＩＭＤ命令の中のアドレス［０〜９］を初期値として入力する。該ＳＩＭＤ命令の実行中に、アドレスカウンタ４８は、クロック＜PCLK＞に同期してカウンタ値をインクリメントし、各クロックサイクル毎にカウンタ値をアドレス＜ADDRESS＞として各プロセッシング・エレメントＰＥK内の一方のレジスタ・ファイルＲＦ0に与える。
【００４０】
アドレスカウンタ５０は、プログラムメモリ４０より読み出されたＳＩＭＤ命令の中のアドレス［１２〜２１］を初期値として入力する。該ＳＩＭＤ命令の実行中に、アドレスカウンタ５０は、クロック＜PCLK＞に同期してカウンタ値をインクリメントし、各クロックサイクル毎にカウンタ値をアドレス＜ADDRESS＞として各プロセッシング・エレメントＰＥK内の他方のレジスタ・ファイルＲＦ1に与える。
【００４１】
リピートカウンタ５２は、プログラムメモリ４０より読み出されたＳＩＭＤ命令の中のリピート値［４２〜４５］を当該ＳＩＭＤ命令の残りリピート値（残り繰り返し回数）の初期値としてスイッチ５８を介して受け取る。該ＳＩＭＤ命令の実行中、リピートカウンタ５２はクロック＜PCLK＞に同期してカウンタ値（残りリピート値）をディクリメントする。
【００４２】
一致回路５４は、リピートカウンタ５２より出力される残りリピート値を入力し、残りリピート値が「１」になったときに論理値“１”を出力する。一致回路５４からの一致信号“１”は、オアゲート６２を介してプログラムカウンタ４２にインクメント・イネーブル信号として与えられる。プログラムカウンタ４２は、インクメント・イネーブル信号を受け取ると、直後のクロック＜PCLK＞に応動してカウンタ値（メモリアドレス）を１つインクリメントする。
【００４３】
一致回路５４からの一致信号“１”は、マイクロ命令レジスタ４６、両アドレスカウンタ４８，５０およびリピートカウンタ５２に対しては入力イネーブル信号として与えられる。この入力イネーブル信号が与えられると、これらのレジスタ４６およびカウンタ４８，５０，５２は次のクロック＜PCLK＞に応動してプログラムメモリ側からのデータを入力またはラッチする。
【００４４】
プログラムメモリ４０より読み出された命令形式識別データ［４０，４１］は、当該命令がＩＧ命令であるときは（１，０）である。このとき、アンドゲート６０の出力は論理値“１”となり、両スイッチ５６，５８はそれぞれ入力端子ｂに切り換わる。スイッチ５６が入力端子ｂに切り換わると、命令不実行（動作停止）を指示するＮＯＰ（No-Operation）命令のコード＜ＮＯＰ＞が切換スイッチ５６を介してマイクロ命令レジスタ４６に与えられる。切換スイッチ５８が入力端子ｂに切り換わると、命令実行の残り繰り返し回数が１回であることを示す残りリピート値＜１＞が切換スイッチ５８を介してリピートカウンタ５２に与えられる。
【００４５】
上記のようにプログラムメモリ４０よりＩＧ命令が読み出されアンドゲート６０の出力が論理値“１”になると、この論理値“１”の信号はオアゲート６２を介してプログラムカウンタ４２にインクリメント・イネーブル信号として与えられる。この場合も、プログラムカウンタ４２は、直後のクロックでカウンタ値（メモリアドレス）を１つインクリメントする。
【００４６】
ＩＧ１４において、マイクロ命令レジスタ４６、アドレスカウンタ４８，５０およびリピートカウンタ５２は、後述するようにＳＶＰコア１２の処理と関連してＳＩＭＤ命令の実行に係わるものであり、機能的にはＳＩＭＤ命令実行部に属する。
【００４７】
図４に、本実施例のＳＶＰ１０におけるプログラム実行処理の手順を示す。図５に、このＳＶＰ１０で実施可能なプログラムの一例を示す。図６に、このＳＶＰ１０でプログラム例（図５）を実行する場合の各クロックサイクル毎の各部のステータスまたは動作を示す。図７および図８に、ＳＶＰ１０における移動命令および加算命令の処理手順をそれぞれ示す。
【００４８】
以下、このプログラム例（図５）につき本実施例のＳＶＰ１０の作用を説明する。
【００４９】
プログラムを実行するに先立ち、初期化で、プログラムカウンタ（ＰＣ）４２のカウンタ値を初期値「０」に、リピートカウンタ（RPT CNTR）５２のカウンタ値を初期値「１」にそれぞれセットする（ステップＡ1）。
【００５０】
≪クロックサイクル１≫
最初のクロックサイクルにおいて、ステップＡ2では、プログラムカウンタ（ＰＣ）４２のカウンタ値で指示されるメモリアドレス「０」にてプログラムメモリ４０より命令（inst）が読み出される。
【００５１】
ステップＡ3では、リピートカウンタ（RPT CNTR）５２のカウンタ値が「１」になっている。したがって、ステップＡ4に入り、命令形式識別データ［４０，４１］から当該命令（inst）の形式が識別される。
【００５２】
本例のプログラム（図５）の場合、メモリアドレス「０」の命令はＳＩＭＤ命令に属する移動命令である。この移動命令の内容は、Ｒ0［１７(H)：１０(H)］←Ｒ1［１１７(H)：１１０(H)］である。すなわち、各プロセッシング・エレメントＰＥKにおいてレジスタ・ファイルＲＦ1のアドレス「１１０(H)」〜「１１７(H)」から８ビットのデータをレジスタ・ファイルＲＦ0のアドレス「１０(H)」〜「１７(H)」に転送するというものである。
【００５３】
より詳細には、“ＲＰＴ＝８”は、この命令の繰り返し回数つまりリピート値（ＲＰＴ）が８（回）であることを指示している。“Ｍ＝１”は、各プロセッシング・エレメントＰＥK内のワーキングレジスタ［Ｍ］に “１”をセットすることを指示している。“Ａ＝Ｒ1（110）”は、レジスタ・ファイルＲＦ1のアドレス「１１０(H)」（初期アドレス）に格納されている１ビットのデータをワーキングレジスタ［Ａ］に与えることを指示している。“Ｂ＝０”，“Ｃ＝０”はワーキングレジスタ［Ｂ］，［Ｃ］にそれぞれ“０”，“０”をセットすることを指示している。“Ｒ0（10）＝ＳＭ”は、ＡＬＵ２４より出力される加算結果の和（ＳＭ）をレジスタ・ファイルＲＦ0のアドレス「１０(H)」（初期アドレス）に格納することを指示している。なお、移動命令の演算処理では、ワーキングレジスタ［Ａ］の内容がそのままＡＬＵ２４の演算結果として出力され、桁上げ（ＣＹ）は発生しない。
【００５４】
本実施例のＳＩＭＤ命令は、上記のように、一般形式として、各プロセッシング・エレメントＰＥK内のワーキング・レジスタ［Ｍ，Ａ，Ｂ，Ｃ］における入力値または入力元と、ＡＬＵ２４の演算結果の転送先と、命令繰り返し数とを定義する。
【００５５】
さて、ステップＡ4で当該命令（inst）がＳＩＭＤ命令であることが判明したので、次にステップＡ5，Ａ6の処理が行なわれる。この場合、ＳＩＭＤ命令なので、上記したようにアンドゲート６０の出力が論理値“０”となり、両スイッチ５６，５８がそれぞれ入力端子ａに切り換わる。また、リピートカウンタ（RPT CNTR）５２のカウンタ値が初期値「１」にセットされているため、一致回路５４の出力は論理値“１”になっており、この論理値“１”の信号が入力イネーブル信号としてレジスタ４６およびカウンタ４８，５０，５２に与えられている。
【００５６】
ステップＡ5において、ＩＧ１４内では、この命令（inst）の命令コード部［１０〜１１，２２〜３９］がスイッチ５６を介してマイクロ命令レジスタ（INST REG）４６にクロック＜PCLK>のタイミングでセットされる。また、この命令（inst）のアドレス部［０〜９］，［１２〜２１］がそれぞれアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０にクロック＜PCLK>のタイミングでセットされる。また、この命令（inst）のリピート値［４２〜４５］がリピートカウンタ（RPT CNTR）５２にクロック＜PCLK>のタイミングでセットされる。今回のリピート値［４２〜４５］は「８」であるから、一致回路５４の出力が論理値“０”に変わる。
【００５７】
ＳＶＰコア１２内では、特に処理部１８では、ＩＧ１４のマイクロ命令レジスタ（INST REG）４６およびアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０よりそれぞれ与えられるマイクロ命令＜MICROINSTRUCTION＞およびアドレス＜ADDRESS＞にしたがって１ビット単位の演算処理（図７のステップＢ2）が実行される。この結果、各プロセッシング・エレメントＰＥK内でレジスタ・ファイルＲＦ1の初期アドレス「１１０(H)」に格納されている１ビットのデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ0の初期アドレス「１０(H)」に転送される。
【００５８】
次に、ステップＡ6において、プログラムカウンタ（ＰＣ）４２が、一致回路５４からの論理値“１”のインクリメント・イネーブル信号を受けており、カウンタ値（メモリアドレス）を１つインクリメントする。その結果、本例では、プログラムカウンタ（ＰＣ）４２のカウンタ値（メモリアドレス）が「０」から「１」に更新される。
【００５９】
上記一連の処理（Ａ2〜Ａ6）は１クロックサイクルの時間内に行なわれる。
【００６０】
≪クロックサイクル２≫
次（２番目）のクロックサイクルに入ると、ステップＡ2で、プログラムカウンタ（ＰＣ）４２のカウンタ値で指示されるメモリアドレス「１」にてプログラムメモリ４０より命令（inst）が読み出される。
【００６１】
次いで、ステップＡ3では、読み出された命令の形式には関係なく、リピートカウンタ（RPT CNTR）５２のカウンタ値が「１」であるか否かが判定される。本例の場合、この時点のリピートカウンタ値は「８」であるから、一致回路５４の出力は“０”であり、“１”ではない。これにより、ステップＡ7，Ａ8の処理が選択される。
【００６２】
ステップＡ7において、ＩＧ１４内では、クロック＜PCLK>のタイミングで、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０のカウンタ値（アドレス）がそれぞれ１つインクリメントされるとともに、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が１つディクリメントされて「７」になる。このＩＧ１４内の処理は、図７ではステップＢ3の処理に相当する。
【００６３】
ＳＶＰコア１２の処理部１８内では、ＩＧ１４のマイクロ命令レジスタ（INST REG）４６およびアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０よりそれぞれ与えられるマイクロ命令＜MICROINSTRUCTION＞およびアドレス＜ADDRESS＞にしたがって１ビット単位の演算処理（図７のステップＢ2）が実行される。この結果、各プロセッシング・エレメントＰＥK内でレジスタ・ファイルＲＦ1の初期アドレスの次のアドレス「１１１(H)」に格納されている１ビットのデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ0の初期アドレスの次のアドレス「１１(H)」に転送される。
【００６４】
次に、ステップＡ8において、プログラムメモリ４０より現在読み出されている命令（inst）がＳＩＭＤ命令なのかＩＧ命令なのかが、命令形式識別データ［４０，４１］からインバータ６４およびアンドゲート６０で判定される。
【００６５】
本例における当該命令（inst）は、ＩＧ命令に属するＤＩＮＴ（Disable Interrupt）命令である。これにより、ステップＡ10に入り、ＩＧ命令実行ユニット４４がＤＩＮＴ命令を実行する。ＤＩＮＴ命令は、ハードウェア・インタラプトを無効にするもので、たとえハードウェア・インタラプトが発生した場合でも分岐することなく１つ先のメモリアドレスの命令に進むことを指示する命令である。したがって、このＤＩＮＴ命令の実行によって、プログラムカウンタ４２のカウンタ値（メモリアドレス）が１つインクリメントされて、「２」になる。
【００６６】
上記一連の処理（Ａ2〜Ａ4→Ａ7〜Ａ8→Ａ10）は１クロックサイクルの時間内に行なわれる。
【００６７】
≪クロックサイクル３≫
３番目のクロックサイクルでも、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が「７」であるから（ステップＡ3）、ステップＡ7，Ａ8の処理が選択される。
【００６８】
ステップＡ7の処理において、ＩＧ１４内では、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０のカウンタ値（アドレス）がそれぞれ１つインクリメントされるとともに、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が１つディクリメントされて「６」になる。そして、処理部１８の各プロセッシング・エレメントＰＥKでは、レジスタ・ファイルＲＦ1のアドレス「１１２(H)」に格納されている１ビットのデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ0のアドレス「１２(H)」に転送される。
【００６９】
ステップＡ8の判定処理では、ステップＡ2でプログラムメモリ４０より読み出された命令（inst）がメモリアドレス「２」のＪＦＡＺ（Jump on Flag A Zero）命令であるから、ＩＧ命令に属するものであることが判明する。つまり、アンドゲート６０の出力が“１”である。
【００７０】
したがって、このサイクルでもステップＡ10に入り、ＩＧ命令実行ユニット４４がＪＦＡＺ命令を実行する。ＪＦＡＺ命令は、フラグ信号＜ＩＧＦＬＡＧ−Ａ＞のレベルを検査して、そのレベルが論理値“０”であるときは所定の分岐アドレス（本例では「５０」）にメモリアドレスをジャンプさせるものである。本例では、この分岐条件が成立しなかったものとする。その場合は、プログラムカウンタ４２のカウンタ値を１つ先のメモリアドレス「３」に進める。
【００７１】
≪クロックサイクル４≫
４回目のクロックサイクルでは、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が「６」であるから（ステップＡ3）、やはりステップＡ7，Ａ8の処理が選択される。
【００７２】
ステップＡ7の処理において、ＩＧ１４内では、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０のカウンタ値（アドレス）がそれぞれ１つインクリメントされるとともに、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が１つディクリメントされて「５」になる。各プロセッシング・エレメントＰＥK内では、レジスタ・ファイルＲＦ1のアドレス「１１３(H)」に格納されている１ビットのデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ0のアドレス「１３(H)」に転送される。
【００７３】
ステップＡ8の判定処理では、プログラムメモリ４０より現在読み出されている命令（inst）がメモリアドレス「３」のＪＦＢＺ（Jump on Flag B Zero）命令であるから、ＩＧ命令に属するものであることが判明する。
【００７４】
したがって、このサイクルでもステップＡ10に入り、ＩＧ命令実行ユニット４４がＪＦＢＺ命令を実行する。ＪＦＢＺ命令は、フラグ信号＜ＩＧＦＬＡＧ−Ｂ＞のレベルを検査して、そのレベルが論理値“０”であるときは所定の分岐アドレス（本例では「６０」）にメモリアドレスをジャンプさせるものである。ここでは、この分岐条件が成立しなかったものとする。したがって、プログラムカウンタ４２のカウンタ値を１つ先のメモリアドレス「４」に進める。
【００７５】
≪クロックサイクル５≫
５回目のクロックサイクルでは、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が「５」であるから、やはりステップＡ7，Ａ8の処理が選択される。
【００７６】
ステップＡ7の処理において、ＩＧ１４内では、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０のカウンタ値（アドレス）がそれぞれ１つインクリメントされるとともに、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が１つディクリメントされて「４」になる。各プロセッシング・エレメントＰＥK内では、レジスタ・ファイルＲＦ1の初期アドレスから４番目の位置「１１４(H)」に格納されている１ビットのデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ0の初期アドレスから４番目の位置「１４(H)」に転送される。
【００７７】
ステップＡ8の判定処理では、ステップＡ2でプログラムメモリ４０より読み出されている命令（メモリアドレス「４」のＪＭＰ（Jump）命令）がＩＧ命令に属するものであることが判明する。
【００７８】
ステップＡ10の処理では、ＩＧ命令実行ユニット４４がＪＭＰ命令を実行し、このＪＭＰ命令で指定された分岐先のメモリアドレス（本例では「１０」）にプログラムカウンタ４２のカウンタ値を更新する。
【００７９】
≪クロックサイクル６≫
６番目のクロックサイクルでは、ステップＡ2で、プログラムメモリ４０のメモリアドレス「１０」から移動命令（図５）が読み出される。理解されるように、メモリアドレス「１０」の移動命令の内容は、Ｒ1［２７(H)：２０(H)］←Ｒ0［１２７(H)：１２０(H)］である。すなわち、各プロセッシング・エレメントＰＥKにおいてレジスタ・ファイルＲＦ0にアドレス「１２０(H)」を初期アドレスとして格納されている８ビットのデータを１ビットずつ８クロックサイクルかけてレジスタ・ファイルＲＦ1にアドレス「２０(H)」を初期アドレスとして転送するというものである。
【００８０】
この場合にも、ステップＡ3ではリピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が「４」であるから（ステップＡ3）、ステップＡ7，Ａ8の処理が選択される。
【００８１】
ステップＡ7の処理において、ＩＧ１４内では、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０のカウンタ値（アドレス）がそれぞれ１つインクリメントされるとともに、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が１つディクリメントされて「３」になる。各プロセッシング・エレメントＰＥK内では、レジスタ・ファイルＲＦ1のアドレス「１１５(H)」に格納されている１ビットのデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ0のアドレス「１５(H)」に転送される。
【００８２】
ステップＡ8の判定処理では、プログラムメモリ４０より読み出されている命令（メモリアドレス「１０」の移動命令）がＳＩＭＤ命令に属するものであることが判明する。
【００８３】
この場合は、ステップＡ10に入ることなく、このクロックサイクルを終了する。したがって、プログラムカウンタ４２のカウンタ値は更新されず、クロックサイクル開始時のメモリアドレス「１０」が維持される。
【００８４】
≪クロックサイクル７≫
７番目のクロックサイクルでは、前サイクルと同様にプログラムメモリ４０のメモリアドレス「１０」より移動命令が読み出される（ステップＡ2）。リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）がまだ「３」であるから、この場合もステップＡ7，Ａ8の処理が選択される。
【００８５】
ステップＡ7の処理において、ＩＧ１４内では、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０のカウンタ値（アドレス）がそれぞれ１つインクリメントされるとともに、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が１つディクリメントされて「２」になる。各プロセッシング・エレメントＰＥK内では、レジスタ・ファイルＲＦ1のアドレス「１１６(H)」に格納されている１ビットのデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ0のアドレス「１６(H)」に転送される。
【００８６】
ステップＡ8の判定処理では、プログラムメモリ４０より読み出されている命令（メモリアドレス「１０」の移動命令）がＳＩＭＤ命令に属するものであることが判明する。したがって、ステップＡ10に入ることなく、プログラムカウンタ４２のカウンタ値が「１０」に維持されたまま、このクロックサイクルを終了する。
【００８７】
≪クロックサイクル８≫
８番目のクロックサイクルでも、前サイクルと同様にプログラムメモリ４０のメモリアドレス「１０」より移動命令が読み出される（ステップＡ2）。ステップＡ3ではリピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）がまだ「２」であるから、この場合もステップＡ7，Ａ8の処理が選択される。
【００８８】
ステップＡ7においては、ＩＧ１４のアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０よりそれぞれ与えられるアドレス＜ADDRESS＞が１つインクリメントされることにより、ＳＶＰコア１２の各プロセッシング・エレメントＰＥK内でレジスタ・ファイルＲＦ1のアドレス「１１７(H)」に格納されている１ビットのデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ0のアドレス「１７(H)」に転送される。これで、今回の移動命令が指示していた８ビットのデータ移動処理（Ｒ0［１７(H)：１０(H)］←Ｒ1［１１７(H)：１１０(H)］）が完了する。一方、ＩＧ１４のリピートカウンタ５２のカウンタ値（残りリピート値）が１つディクリメントされて「１」になる。これにより、一致回路５４の出力が論理値“１に変わる。
【００８９】
一致回路５４からの論理値“１の出力信号は、オアゲート６２を介してプログラムカウンタ４２にインクリメント・イネーブル信号として与えられるとともに、マイクロ命令レジスタ４６、アドレスカウンタ４８，５０およびリピートカウンタ５２に入力イネーブル信号として与えられる。
【００９０】
≪クロックサイクル９≫
９番目のクロックサイクルでも、プログラムメモリ４０のメモリアドレス「１０」から移動命令が読み出される（ステップＡ2）。しかし、この時、リピートカウンタ（RPT CNTR）５２のカウント値が「１」になっているので、ステップＡ4に入り、命令形式の識別が行なわれる。この場合、移動命令はＳＩＭＤ命令であるから、ステップＡ5の処理に入る。
【００９１】
ステップＡ5において、ＩＧ１４内では、メモリアドレス「１０」の移動命令（inst）の命令コード部［１０〜１１，２２〜３９］が切換スイッチ５６を介してマイクロ命令レジスタ（INST REG）４６にクロック＜PCLK>のタイミングでセットされる。また、この移動命令（inst）のアドレス部［０〜９］，［１２〜２１］がそれぞれアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０にクロック＜PCLK>のタイミングでセットされる。また、この移動命令（inst）のリピート値［４２〜４５］がリピートカウンタ（RPT CNTR）５２にクロック＜PCLK>のタイミングでセットされる。今回のリピート値［４２〜４５］は「８」であるから、一致回路５４の出力が論理値“０”に変わる。
【００９２】
ＳＶＰコア１２の処理部１８では、ＩＧ１４のマイクロ命令レジスタ（INST REG）４６およびアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０よりそれぞれ与えられるマイクロ命令＜MICROINSTRUCTION＞およびアドレス＜ADDRESS＞にしたがって１ビット単位の演算処理（図７のステップＢ2）が実行される。この結果、各プロセッシング・エレメントＰＥK内でレジスタ・ファイルＲＦ0の初期アドレス「１２０(H)」に格納されている１ビットのデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ1の初期アドレス「２０(H)」に転送される。
【００９３】
次に、ステップＡ6において、プログラムカウンタ（ＰＣ）４２が、アンドゲート６０からの論理値“１”のインクリメント・イネーブル信号を受けており、カウンタ値（メモリアドレス）を１つインクリメントする。その結果、本例では、プログラムカウンタ（ＰＣ）４２のカウンタ値（メモリアドレス）が「１０」から「１１」に更新される。
【００９４】
≪クロックサイクル１０≫
１０番目のクロックサイクルでは、ステップＡ2で、プログラムメモリ４０のメモリアドレス「１１」からＪＭＰ命令が読み出される。ステップＡ3ではリピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が「８」であるから、この場合もステップＡ7，Ａ8の処理が選択される。
【００９５】
ステップＡ7の処理において、ＩＧ１４内では、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０のカウンタ値（アドレス）がそれぞれ１つインクリメントされるとともに、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が１つディクリメントされて「７」になる。各プロセッシング・エレメントＰＥK内では、レジスタ・ファイルＲＦ0のアドレス「１２１(H)」に格納されている１ビットのデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ1のアドレス「２１(H)」に転送される。
【００９６】
ステップＡ8では、ステップＡ2でプログラムメモリ４０より読み出されている命令（メモリアドレス「１１」のＪＭＰ命令）がＩＧ命令に属するものであることが判明する。
【００９７】
次いで、ステップＡ10では、ＩＧ命令実行ユニット４４がＪＭＰ命令を実行し、このＪＭＰ命令で指定された分岐先のメモリアドレス（本例では「５」）にプログラムカウンタ４２のカウンタ値を更新する。
【００９８】
≪クロックサイクル１１≫
１１番目のクロックサイクルでは、ステップＡ2で、プログラムメモリ４０のメモリアドレス「５」から加算命令が読み出される。本例のプログラム（図５）では、メモリアドレス「５，６，７」の３行にわたり、Ｒ1［２８(H)：２０(H)］←Ｒ0［１７(H)：１０(H)］＋Ｒ1［２７(H)：２０(H)］という内容、つまり各プロセッシング・エレメントＰＥKにおいてレジスタ・ファイルＲＦ0のアドレス［１７(H)：１０(H)］に格納されている８ビット・データとレジスタ・ファイルＲＦ1のアドレス［２７(H)：２０(H)］に格納されている８ビット・データとを加算し、最上位の桁上げを含む９ビットの加算結果をレジスタ・ファイルＲＦ1のアドレス［２８(H)：２０(H)］に格納するという加算演算を規定している。
【００９９】
このうち、メモリアドレス「５」の加算命令は最下位１ビット分の加算演算を規定している。より詳細には、“ＲＰＴ＝１”は、この加算演算の繰り返し回数が１回であることを指示している。“Ｍ＝１”は、各プロセッシング・エレメントＰＥK内のワーキングレジスタ［Ｍ］に “１”をセットすることを指示している。“Ａ＝Ｒ0（10）”は、レジスタ・ファイルＲＦ0のアドレス「１０(H)」に格納されている１ビットのデータをワーキングレジスタ［Ａ］に与えることを指示している。“Ｂ＝Ｒ1（20）”は、レジスタ・ファイルＲＦ1のアドレス「２０(H)」に格納されている１ビットのデータをワーキングレジスタ［Ｂ］に与えることを指示している。“Ｃ＝０”はワーキングレジスタ［Ｃ］に“０”をセットすることを指示している。“Ｒ1（20）＝ＳＭ”は、ＡＬＵ２４より出力される加算結果の和（ＳＭ）をレジスタ・ファイルＲＦ1のアドレス「２０(H)」に格納することを指示している。
【０１００】
ステップＡ3では、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が「７」であるから、ステップＡ7，Ａ8の処理が選択される。
【０１０１】
ステップＡ7の処理において、ＩＧ１４内では、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０のカウンタ値（アドレス）がそれぞれ１つインクリメントされるとともに、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が１つディクリメントされて「６」になる。各プロセッシング・エレメントＰＥK内では、レジスタ・ファイルＲＦ0のアドレス「１２２(H)」に格納されている１ビットのデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ1のアドレス「２２(H)」に転送される。
【０１０２】
ステップＡ8の判定処理では、プログラムメモリ４０より読み出されている命令（メモリアドレス「５」の加算命令）がＳＩＭＤ命令に属するものであることが判明する。したがって、ステップＡ10に入ることなく、プログラムカウンタ４２のカウンタ値を「５」に維持したまま、このクロックサイクルを終了する。
【０１０３】
≪クロックサイクル１２〜１５≫
１２〜１５番目の各クロックサイクルでは、ステップＡ2でプログラムメモリ４０のメモリアドレス「５」から上記加算命令が読み出され、ステップＡ3の判定を経てステップＡ7，Ａ8の処理が選択される。
【０１０４】
ステップＡ7の処理において、ＩＧ１４内では、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０のカウンタ値（アドレス）が各サイクル毎にそれぞれ１つインクリメントされるとともに、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が各サイクル毎に１つディクリメントされて「５」，「４」，「３」，「２」と変化する。処理部１８の各プロセッシング・エレメントＰＥK内では、各サイクル毎に１ビットずつレジスタ・ファイルＲＦ0のアドレス「１２３(H)」〜「１２６(H)」のデータがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ1のアドレス「２３(H)」〜「２６(H)」に転送される。
【０１０５】
各クロックサイクルでプログラムメモリ４０より読み出された命令（メモリアドレス「５」の加算命令）がＳＩＭＤ命令であるから、ステップＡ8からステップＡ10に入ることなく、プログラムカウンタ４２のカウンタ値を「５」に維持したまま、各クロックサイクルを終了する。
【０１０６】
≪クロックサイクル１６≫
１６番目のクロックサイクルでは、ステップＡ2で、プログラムメモリ４０のメモリアドレス「５」から上記加算命令が読み出される。ステップＡ3ではリピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が「２」であるから、この場合もステップＡ7，Ａ8の処理が選択される。
【０１０７】
ステップＡ7においては、ＩＧ１４のアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０よりそれぞれ与えられるアドレス＜ADDRESS＞が１つインクリメントされることにより、ＳＶＰコア１２の各プロセッシング・エレメントＰＥK内でレジスタ・ファイルＲＦ0のアドレス「１２７(H)」の１ビット・データがワーキングレジスタ［Ａ］およびＡＬＵ２４を介してレジスタ・ファイルＲＦ1のアドレス「２７(H)」に転送される。これで、今回の移動命令が指示していた８ビットのデータ移動処理（Ｒ1［２７(H)：２０(H)］←Ｒ0［１２７(H)：１２０(H)］）が完了する。一方、ＩＧ１４のリピートカウンタ５２のカウンタ値（残りリピート値）が１つディクリメントされて「１」になる。これにより、一致回路５４の出力が論理値“１となる。
【０１０８】
一致回路５４からの論理値“１の出力信号は、オアゲート６２を介してプログラムカウンタ４２にインクリメント・イネーブル信号として与えられるとともに、マイクロ命令レジスタ４６、アドレスカウンタ４８，５０およびリピートカウンタ５２に入力イネーブル信号として与えられる。
【０１０９】
次に、ステップＡ8からステップＡ10に入ることなく、プログラムカウンタ４２のカウンタ値を「５」に維持したまま、クロックサイクルを終了する。
【０１１０】
≪クロックサイクル１７≫
１７番目のクロックサイクルでも、プログラムメモリ４０においてメモリアドレス「５」の加算命令が読み出される（ステップＡ2）。しかし、この時、リピートカウンタ（RPT CNTR）５２のカウント値が「１」になっているので、ステップＡ4に入り、命令形式の識別が行なわれる。この場合、移動命令はＳＩＭＤ命令であるから、ステップＡ5の処理に入る。
【０１１１】
ステップＡ5において、ＩＧ１４内では、メモリアドレス「５」の加算命令（inst）の命令コード部［１０〜１１，２２〜３９］が切換スイッチ５６を介してマイクロ命令レジスタ（INST REG）４６にクロック＜PCLK>のタイミングでセットされる。また、この加算命令（inst）のアドレス部［０〜９］，［１２〜２１］がそれぞれアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０にクロック＜PCLK>のタイミングでセットされる。また、この加算命令（inst）のリピート値［４２〜４５］がリピートカウンタ（RPT CNTR）５２にクロック＜PCLK>のタイミングでセットされる。今回のリピート値［４２〜４５］は「１」であるから、一致回路５４の出力は論理値“１”のままである。
【０１１２】
ＳＶＰコア１２の処理部１８では、ＩＧ１４のマイクロ命令レジスタ（INST REG）４６およびアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０よりそれぞれ与えられるマイクロ命令＜MICROINSTRUCTION＞およびアドレス＜ADDRESS＞にしたがって１ビット単位の演算処理（図８のステップＣ1）が実行される。この結果、各プロセッシング・エレメントＰＥK内でレジスタ・ファイルＲＦ0のアドレス「１０(H)」に格納されている１ビットのデータとレジスタ・ファイルＲＦ1のアドレス「２０(H)」に格納されている１ビットのデータとがＡＬＵ２４で加算され、その加算結果の和（ＳＭ）がレジスタ・ファイルＲＦ1のアドレス「２０(H)」に書き込まれる。
【０１１３】
次に、ステップＡ6において、プログラムカウンタ（ＰＣ）４２が、一致回路５４からの論理値“１”のインクリメント・イネーブル信号を受けており、カウンタ値（メモリアドレス）を１つインクリメントする。その結果、本例では、プログラムカウンタ（ＰＣ）４２のカウンタ値（メモリアドレス）が「５」から「６」に更新される。
【０１１４】
≪クロックサイクル１８≫
１８番目のクロックサイクルでは、プログラムメモリ４０においてメモリアドレス「６」の加算命令が読み出される（ステップＡ2）。このメモリアドレス「６」の加算命令は、上記加算演算（Ｒ1［２８(H)：２０(H)］←Ｒ0［１７(H)：１０(H)］＋Ｒ1［２７(H)：２０(H)］）の中で最下位１ビットを除く上位７ビット分の加算演算（Ｒ1［２７(H)：２１(H)］←Ｒ0［１７(H)：１１(H)］＋Ｒ1［２７(H)：２１(H)］）を規定している。上記したメモリアドレス「５」の加算命令と相違しているのは、１ビット加算演算の回数つまり命令繰り返し回数（ＲＰＴ）の値と、ワーキングレジスタ［Ｃ］に直前のサイクルでＡＬＵ２４より出力されている桁上げ（ＣＹ）をセットする点である。
【０１１５】
さて、ステップＡ3では、リピートカウンタ（RPT CNTR）５２のカウント値が「１」になっているので、ステップＡ4が選択される。ステップＡ4では、メモリアドレス「６」の加算命令がＳＩＭＤ命令であるから、ステップＡ5．Ａ6の処理が選択される。
【０１１６】
ステップＡ5において、ＩＧ１４内では、メモリアドレス「６」の加算命令（inst）の命令コード部［１０〜１１，２２〜３９］が切換スイッチ５６を介してマイクロ命令レジスタ（INST REG）４６にクロック＜PCLK>のタイミングでセットされる。また、この加算命令（inst）のアドレス部［０〜９］，［１２〜２１］がそれぞれアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０にクロック＜PCLK>のタイミングでセットされる。また、この加算命令（inst）のリピート値［４２〜４５］がリピートカウンタ（RPT CNTR）５２にクロック＜PCLK>のタイミングでセットされる。今回のリピート値［４２〜４５］は「７」であるから、一致回路５４の出力が論理値“０”に変わる。なお、ステップＡ5におけるＩＧ１４内の処理は図８のステップＣ2に相当する。
【０１１７】
処理部１８では、ＩＧ１４のマイクロ命令レジスタ（INST REG）４６およびアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０よりそれぞれ与えられるマイクロ命令＜MICROINSTRUCTION＞およびアドレス＜ADDRESS＞にしたがって１ビット単位の演算処理（図８のステップＣ3）が実行される。この結果、各プロセッシング・エレメントＰＥK内でレジスタ・ファイルＲＦ0のアドレス「１１(H)」に格納されている１ビットのデータとレジスタ・ファイルＲＦ1のアドレス「２１(H)」に格納されている１ビットのデータとがＡＬＵ２４で加算され、その加算結果の和（ＳＭ）がレジスタ・ファイルＲＦ1のアドレス「２１(H)」に書き込まれる。
【０１１８】
次に、ステップＡ6において、プログラムカウンタ（ＰＣ）４２がカウンタ値（メモリアドレス）を１つインクリメントして「７」に更新する。
【０１１９】
≪クロックサイクル１９〜２３≫
１９〜２３番目の各クロックサイクルでは、プログラムメモリ４０においてメモリアドレス「７」の加算命令が読み出される（ステップＡ2）。もっとも、ステップＡ3ではリピートカウンタ（RPT CNTR）５２のカウント値が「６」〜「３」と変化し、まだ「１」にならないため、命令の種類に関係なくステップＡ7，Ａ8の処理が選択される。
【０１２０】
ステップＡ7の処理において、ＩＧ１４内では、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０のカウンタ値（アドレス）が各サイクル毎にそれぞれ１つインクリメントされるとともに、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が各サイクル毎に１つディクリメントされて「６」，「５」，「４」，「３」，「２」と逐次変化する。各プロセッシング・エレメントＰＥK内では、各サイクル毎に１ビットずつレジスタ・ファイルＲＦ0のアドレス「１２〜１６(H)」のデータとレジスタ・ファイルＲＦ1のアドレス「２２〜２６(H)」のデータとがＡＬＵ２４で加算され（図８のステップＣ3）、加算結果の和（ＳＭ）がレジスタ・ファイルＲＦ1のアドレス「２２〜２６(H)」に書き込まれる。
【０１２１】
各クロックサイクルでプログラムメモリ４０より読み出された命令（メモリアドレス「７」の加算命令）がＳＩＭＤ命令であるから、ステップＡ8からステップＡ10に入ることなく、プログラムカウンタ４２のカウンタ値を「７」に維持したまま、各クロックサイクルを終了する。
【０１２２】
≪クロックサイクル２４≫
２４番目のクロックサイクルでも、プログラムメモリ４０においてメモリアドレス「７」の加算命令が読み出される（ステップＡ2）。ステップＡ3では、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が「２」であるから、この場合もステップＡ7，Ａ8の処理が選択される。
【０１２３】
ステップＡ7においては、ＩＧ１４のアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０よりそれぞれ与えられるアドレス＜ADDRESS＞が１つインクリメントされることにより、ＳＶＰコア１２の各プロセッシング・エレメントＰＥK内ではレジスタ・ファイルＲＦ0のアドレス「１７(H)」に格納されている１ビットのデータとレジスタ・ファイルＲＦ1のアドレス「２７(H)」に格納されている１ビットのデータとがＡＬＵ２４で加算され、その加算結果の和（ＳＭ）がレジスタ・ファイルＲＦ1のアドレス「２７(H)」に書き込まれる。これで、メモリアドレス「６」の加算命令が指示していた上位７ビットの加算演算（Ｒ1［２７(H)：２１(H)］←Ｒ0［１７(H)：１１(H)］＋Ｒ1［２７(H)：２１(H)］）の処理が完了する。一方、ＩＧ１４のリピートカウンタ５２のカウンタ値（残りリピート値）が１つディクリメントされて「１」になる。これにより、一致回路５４の出力が論理値“１となる。
【０１２４】
一致回路５４からの論理値“１の出力信号は、オアゲート６２を介してプログラムカウンタ４２にインクリメント・イネーブル信号として与えられるとともに、マイクロ命令レジスタ４６、アドレスカウンタ４８，５０およびリピートカウンタ５２に入力イネーブル信号として与えられる。
【０１２５】
ステップＡ8では、ステップＡ10に入ることなく、プログラムカウンタ４２のカウンタ値を「７」に維持したまま、このクロックサイクルを終了する。
【０１２６】
≪クロックサイクル２５≫
２５番目のクロックサイクルでも、プログラムメモリ４０においてメモリアドレス「７」の加算命令が読み出される（ステップＡ2）。このメモリアドレス「７」の加算命令は、上記８ビット加算演算（Ｒ1［２８(H)：２０(H)］←Ｒ0［１７(H)：１０(H)］＋Ｒ1［２７(H)：２０(H)］）の中で最上位ビットの加算結果の桁上げ（ＣＹ）を全体の加算演算結果に含めるための演算を規定している。このため、加算演算の繰り返し回数（ＲＰＴ）を１（回）とし、ワーキングレジスタ［Ａ］，［Ｂ］にそれぞれ“０”をセットするとともに、ワーキングレジスタ［Ｃ］にはＡＬＵ２４より直前に出力された桁上げ“ＣＹ”をセットすることを指示している。
【０１２７】
さて、ステップＡ3では、リピートカウンタ（RPT CNTR）５２のカウント値が「１」になっているので、ステップＡ4が選択される。ステップＡ4では、メモリアドレス「７」の加算命令がＳＩＭＤ命令であるから、ステップＡ5．Ａ6の処理が選択される。
【０１２８】
ステップＡ5において、ＩＧ１４内では、メモリアドレス「７」の加算命令（inst）の命令コード部［１０〜１１，２２〜３９］が切換スイッチ５６を介してマイクロ命令レジスタ（INST REG）４６にクロック＜PCLK>のタイミングでセットされる。また、この加算命令（inst）のアドレス部［０〜９］，［１２〜２１］がそれぞれアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０にクロック＜PCLK>のタイミングでセットされる。また、この加算命令（inst）のリピート値［４２〜４５］がリピートカウンタ（RPT CNTR）５２にクロック＜PCLK>のタイミングでセットされる。今回のリピート値［４２〜４５］は「１」であるから、一致回路５４の出力は論理値“１”のままである。
【０１２９】
処理部１８では、ＩＧ１４のマイクロ命令レジスタ（INST REG）４６およびアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０よりそれぞれ与えられるマイクロ命令＜MICROINSTRUCTION＞およびアドレス＜ADDRESS＞にしたがって１ビット単位の演算処理（図８のステップＣ6）が実行される。この結果、各プロセッシング・エレメントＰＥK内でＡＬＵ２４より直前に出力されていた桁上げ（ＣＹ）が今回はそのままＡＬＵ２４の演算結果の和（ＳＭ）となって、レジスタ・ファイルＲＦ1のアドレス「２８(H)」に書き込まれる。これで、メモリアドレス「５，６，７」の加算命令が指示していた８ビット・データ同士の加算演算（Ｒ1［２８(H)：２０(H)］←Ｒ0［１７(H)：１０(H)］＋Ｒ1［２７(H)：２０(H)］）の全演算処理が終了する。
【０１３０】
次に、ステップＡ6において、プログラムカウンタ（ＰＣ）４２がカウンタ値（メモリアドレス）を１つインクリメントして「８」に更新する。
【０１３１】
≪クロックサイクル２６≫
次（２６番目）のクロックサイクルでは、ステップＡ2で、プログラムメモリ４０のメモリアドレス「８」よりＥＩＮＴ（Enable Interrupt）命令が読み出される。次いで、ステップＡ3で、リピートカウンタ（RPT CNTR）５２のカウント値が「１」になっているので、ステップＡ4が選択される。ステップＡ4では、ＥＩＮＴ命令がＩＧ命令なので、ステップＡ9．Ａ10の処理が選択される。すなわち、一致回路５４より論理値“１”の入力イネーブル信号がマイクロ命令レジスタ４６とリピートカウンタ５２に与えられており、かつアンドゲート６０からの論理値“１”の出力によってスイッチ５６，５８がそれぞれ入力端子ａに切り換わるという条件が成立することで、ステップＡ9．Ａ10の処理が行なわれる。
【０１３２】
ステップＡ9において、ＩＧ１４内では、ＮＯＰコード＜ＮＯＰ＞および残りリピート値＜１＞がクロック＜PLCK＞のタイミングでスイッチ５６，５８を介してマイクロ命令レジスタ４６およびリピートカウンタ５２にそれぞれロードされる。ＳＶＰコア１２の処理部１８内では、ＩＧ１４のマイクロ命令レジスタ（INST REG）４６より命令不実行を指示するＮＯＰコード＜ＮＯＰ＞を与えられるため、各プロセッシング・エレメントＰＥKは何の処理も行わず、動作停止状態となる。なお、ＮＯＰ状態では、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０におけるアドレス＜ADDRESS＞は何ら意味をもたない。
【０１３３】
ステップＡ10では、ＩＧ１４内のＩＧ命令実行ユニット４４がＥＩＮＴ命令を実行する。ＥＩＮＴ命令は、ハードウェア・インタラプトが発生した場合に所定の分岐先へジャンプすることを指示する命令である。ここでは、ハードウェア・インタラプトが発生しなかったものとする。したがって、このＥＩＮＴ命令の実行によって、プログラムカウンタ４２のカウンタ値（メモリアドレス）が１つインクリメントされて、「９」になる。
【０１３４】
≪クロックサイクル２７≫
次（２７番目）のクロックサイクルにおいて、ステップＡ2で、プログラムメモリ４０のメモリアドレス「９」よりＪＭＰ命令が読み出される。ステップＡ3では、リピートカウンタ（RPT CNTR）５２のカウント値が「１」になっているので、ステップＡ4が選択される。ステップＡ4では、ＪＭＰ命令がＩＧ命令なので、ステップＡ9．Ａ10の処理が選択される。
【０１３５】
ステップＡ9では、上記した２６番目のクロックサイクルと同様に＜ＮＯＰ＞処理が行なわれる。  ステップＡ10では、ＩＧ命令実行ユニット４４がＪＭＰ命令を実行し、プログラムカウンタ４２のカウンタ値（メモリアドレス）を指定された分岐先「０」に更新する。
【０１３６】
この分岐先のメモリアドレス「０」は本例のプログラム（図５）の先頭アドレスであり、しかもこの時点で或るＳＩＭＤ命令がペンディングになっている（所定回数の繰り返しが済んでいない）わけでもない。したがって、次の２８番目のクロックサイクル以降は上記（≪クロックサイクル１〜２７≫）と同じ動作が繰り返される。
【０１３７】
このように、本実施例のＳＶＰ１０においては、ＳＶＰコア１２でＳＩＭＤ命令の繰り返し処理が行われている最中にプログラムメモリ４０よりＩＧ命令が読み出されたときは、当該ＳＩＭＤ命令の繰り返し処理と並行して当該ＩＧ命令を実行するようにしたので、スループットを大幅に上げることができる。
【０１３８】
たとえば、上記したプログラム例において、≪クロックサイクル１〜８≫の期間中に、ＳＶＰコア１２の各プロセッシング・エレメントＰＥKはＳＩＭＤ命令に属するメモリアドレス「０」の移動命令（Ｒ0［１７(H)：１０(H)］←Ｒ1［１１７(H)：１１０(H)］）を１クロックサイクル毎に１ビットずつ繰り返し実行する。一方、ＩＧ１４内では、この期間内の≪クロックサイクル２〜５≫にかけて、プログラムメモリ４０より読み出されたＤＩＮＴ命令、ＪＦＡＺ命令、ＪＦＢＺ命令およびＪＭＰ命令（いずれもＩＧ命令）をＩＧ命令実行ユニット４４が逐一実行する。これにより、上記移動命令の処理を全て終了した後、次の≪クロックサイクル９≫でＳＶＰコア１２側は上記ＪＭＰ命令で指示されているメモリアドレス「１０」の移動命令（Ｒ1［２７(H)：２０(H)］←Ｒ0［１２７(H)：１２０(H)］）の処理を開始することができる。
【０１３９】
従来のこの種のＳＶＰであれば、ＳＶＰコア１２側でメモリアドレス「０」の移動命令（Ｒ0［１７(H)：１０(H)］←Ｒ1［１１７(H)：１１０(H)］）の処理が終了するまで、その次の命令であるＤＩＮＴ命令は待たされる。そして、該移動命令の終了後に、≪クロックサイクル９≫でメモリアドレス「１」の該ＤＩＮＴ命令が実行される。次に、上記の例では、≪クロックサイクル１０≫でメモリアドレス「２」の上記ＪＦＡＺ命令が、≪クロックサイクル１１≫でメモリアドレス「３」の上記ＪＦＢＺ命令が、≪クロックサイクル１２≫でメモリアドレス「４」の上記ＪＭＰ命令が順次実行される。このようにＩＧ命令の実行が続く期間≪クロックサイクル９〜１２≫中、ＳＶＰコア１２はＮＯＰコード＜ＮＯＰ＞を与えられ、実質的に動作停止状態となる。ＳＶＰコア１２の処理が再開されるのは≪クロックサイクル１３≫以降であり、本実施例と比較して４クロックサイクルの遅れを来すことになる。
【０１４０】
図９に、本発明の第２の実施例におけるＩＧ１４の要部の構成を示す。この第２の実施例は、上記した第１の実施例のＩＧ１４においてプログラムメモリ４０とマイクロ命令レジスタ４６、アドレスカウンタ４８，５０およびリピートカウンタ５２との間にＳＩＭＤ命令用バッファメモリとしてＦＩＦＯ（First-In First-out）メモリ７０を設けていることを主たる特徴とする。
【０１４１】
ＦＩＦＯメモリ７０は、データ入力端子ＩＮ、データ出力端子ＯＵＴ、書き込みイネーブル端子ＷＥ、読み出しイネーブル端子ＲＥ、フル状態端子fullおよび空状態端子emptyを有しており、プログラムメモリ４０より読み出された４６ビットのプログラムデータ［０〜４５］のうち命令形式識別データ［４０，４１］を除く４４ビットのデータ［０〜３９，４２〜４５］を条件的に先入れ先出し方式で所定の深さ（最大蓄積データ数）まで蓄積する。
【０１４２】
プログラムメモリ４０より読み出されたデータ［０〜３９，４２〜４５］がこのＦＩＦＯメモリ７０に入力されるための条件は、アンドゲート６０，７４の出力が共に論理値“０”となり、アンドゲート７４の出力端子より論理値“１”の信号が書き込みイネーブル端子ＷＥに与えられることである。
【０１４３】
上記したように、アンドゲート６０の出力が“１”になるのは、プログラムメモリ４０より読み出された当該命令の命令識別データ［４０，４１］が（０，０）であるとき、つまり当該命令がＳＩＭＤ命令のときである。
【０１４４】
アンドゲート７２の出力が“０”になるのは、▲１▼ＦＩＦＯメモリ７０のフル状態端子fullが論理値“０”のとき、つまりメモリ７０がフル（満杯）状態ではないとき、あるいは▲２▼一致回路５４の出力が論理値“１”のとき、つまりリピートカウンタ５２の残りリピート値が「１」のときである。後者の▲２▼の場合は、後述するようにデータ読み出しが可能となり、先頭のデータがデータ出力端子ＯＵＴから出力されるため、それと入れ替わりにデータ入力端子ＩＮへのデータ入力（書き込み）が可能となる。
【０１４５】
ＦＩＦＯメモリ７０から蓄積データの中の先頭データが出力されるための条件は、アンドゲート７６の出力端子より論理値“１”の信号が読み出しイネーブル端子ＲＥに与えられることである。アンドゲート７６の出力が“１”になるのは、空状態端子emptyが論理値“０”になっており、つまりメモリ７０が空（から）状態ではなく、かつ一致回路５４の出力が論理値“１”のとき、つまりリピートカウンタ５２の残りリピート値が「１」のときである。
【０１４６】
図１０に、この第２の実施例におけるプログラム実行処理の手順を示す。
初期化では、プログラムカウンタ（ＰＣ）４２およびリピートカウンタ（RPT CNTR）５２のカウンタ値を初期値「０」，「１」にそれぞれセットすることに加えて、ＦＩＦＯメモリ７０を空状態にする（ステップＤ1）。
【０１４７】
プログラム実行中の各クロックサイクルにおいて、最初にステップＤ2でプログラムカウンタ４２のカウンタ値で指示されるメモリアドレスにてプログラムメモリ４０より命令（inst）を読み出す。次いで、ステップＤ3でリピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）を判定し、それが「１」になっているときは、次のステップＤ4でＦＩＦＯメモリ７０が空状態であるか否かで処理が分かれる。
【０１４８】
ＦＩＦＯメモリ７０が空状態であるとき、つまり空状態端子emptyが“１”になっているときは、ステップＤ5の処理が選択される。この場合、スイッチ５６，５８がそれぞれ端子ｂに切り換わっているため、マイクロ命令レジスタ４６にＮＯＰコード＜ＮＯＰ＞がセットされるとともに、リピートカウンタ５２には残りリピート値＜１＞がセットされる。これにより、ＳＶＰコア１２の処理部１８では各プロセッシング・エレメントＰＥKは何の処理も行わず、動作停止状態となる。
【０１４９】
ステップＤ4でＦＩＦＯメモリ７０が空状態でないときは、ステップＤ6の処理が選択される。この場合、空状態端子emptyが“０”で、スイッチ５６，５８がそれぞれ端子ａに切り換わる。また、一致回路５２の出力が“１”であるため、アンドゲート７６の出力端子より“１”の信号が読み取りイネーブル端子ＲＥに与えられる。そして、ＦＩＦＯメモリ７０のデータ出力端子ＯＵＴより出力されたデータ［０〜３９，４２〜４５］のうち、ＳＩＭＤ命令コード部［１０〜１１，２２〜３９］がスイッチ５６を介してマイクロ命令レジスタ４６にセットされ、アドレス［０〜９］，［１２〜２１］がアドレスカウンタ４８，５０にそれぞれセットされ、リピート値［４２〜４５］がスイッチ５８を介してリピートカウンタ５２にセットされる。
【０１５０】
次に、ステップＤ8で、プログラムメモリ４０より読み出されている当該命令がＩＧ命令なのか、それともＳＩＭＤ命令なのか判定される。つまり、アンドゲート６０の出力の値によって処理手順が分かれる。
【０１５１】
アンドゲート６０の出力が“１”のとき（ＩＧ命令のとき）は、ステップＤ9でＩＧ命令実行ユニット４４が当該命令を実行する。このとき、アンドゲート７２の出力は“０”で、ＦＩＦＯメモリ７０はデータ入力を禁止化される。
【０１５２】
アンドゲート６０の出力が“０”のとき（ＳＩＭＤ命令のとき）は、アンドゲート７２の出力は“１”で、ＦＩＦＯメモリ７０は書き込み可能となり、ステップＤ11で当該ＳＩＭＤ命令の命令形式識別データ［４０，４１］以外のデータ［０〜３９，４２〜４５］がデータ入力端子ＩＮより入力される。
【０１５３】
一方、アンドゲート７４の出力が“０”であるから、インバータ７８の出力ひいてはオアゲート６２の出力が“１”となり、この“１”の信号がインクリメントイネーブル信号としてプログラムカウンタ４２に与えられ、メモリアドレスが１つインクリメントされる（ステップＤ12）。
【０１５４】
ステップＤ3でリピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）がまだ「１」になっていないとき、つまりＳＶＰコア１２の処理部１８でＳＩＭＤ命令に対する繰り返し実行回数がまだ規定回数に達していないときは、ステップＤ7の処理が選択される。このステップＤ7および後続のステップＤ8，Ｄ9は、上記した第１の実施例におけるステップＡ7，Ａ8，Ａ10と同様の処理内容となる。
【０１５５】
すなわち、ステップＤ7において、ＩＧ１４内では、クロック＜PCLK>のタイミングで、アドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０のカウンタ値（アドレス）がそれぞれ１つインクリメントされるとともに、リピートカウンタ（RPT CNTR）５２のカウンタ値（残りリピート値）が１つディクリメントされる。ＳＶＰコア１２の処理部１８内では、ＩＧ１４のマイクロ命令レジスタ（INST REG）４６およびアドレスカウンタ（RF0AD REG）４８，（RF0AD REG）５０よりそれぞれ与えられるマイクロ命令＜MICROINSTRUCTION＞およびアドレス＜ADDRESS＞にしたがって１ビット単位の演算処理が実行される。次に、ステップＤ8において、ステップＤ2でプログラムメモリ４０より読み出された命令（inst）がＳＩＭＤ命令なのかＩＧ命令なのかが判定される。ＩＧ命令であるときは、次にステップＤ9でＩＧ命令実行ユニット４４により当該ＩＧ命令が実行される。
【０１５６】
しかし、ＳＩＭＤ命令であるときは、上記第１実施例とは異なり（そのまま当該クロックサイクルを終了するのではなく）、ステップＤ10に入る。そして、ＦＩＦＯメモリ７０がフル状態でなければ、当該ＳＩＭＤ命令の命令形式識別データ［４０，４１］以外のデータ［０〜３９，４２〜４５］がＦＩＦＯメモリ７０に入力され（ステップＤ11）、プログラムカウンタ４２のカウンタ値（メモリアドレス）が１つインクリメントされる（ステップＤ12）。
【０１５７】
このように、この第２の実施例においては、処理部１８で或るＳＩＭＤ命令の繰り返し実行処理が終了する前にプログラムメモリ４０より他のＳＩＭＤ命令が読み出されたときは、ＦＩＦＯメモリ７０のその時の空き容量が許す限り後者のＳＩＭＤ命令をＦＩＦＯメモリ７０に格納し、次のメモリアドレスに進むようになっている。したがって、次のメモリアドレスでＩＧ命令がプログラムメモリより読み出されたときは、該ＩＧ命令をＳＩＭＤ命令の繰り返し実行と並行して実行することができるので、スループットを一層向上させることができる。
【０１５８】
図１１および図１２に、この第２の実施例によるＳＶＰ１０で図５のプログラム例を実行する場合の各クロックサイクル毎の各部のステータスまたは動作を示す。
【０１５９】
最初のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ4→Ｄ5→Ｄ8→Ｄ11→Ｄ12の処理が行なわれる。特に、ステップＤ11では、プログラムメモリ４０より読み出されたメモリアドレス「０」の移動命令（正確にはこの移動命令の命令コード部およびアドレス）がＦＩＦＯメモリ７０に格納される。ステップＤ5で処理部１８はＮＯＰ命令＜ＮＯＰ＞を与えられるため実質的には動作しない。
【０１６０】
２番目のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ4→Ｄ6→Ｄ8→Ｄ9の処理が行なわれる。特に、ステップＤ6では、上記移動命令の命令コード部およびアドレスがＦＩＦＯメモリ７０より読み出されてマイクロ命令レジスタ４６およびアドレスカウンタ４８，５０にそれぞれセットされ、処理部１８の各プロセッシング・エレメントＰＥKは上記移動命令（１回目）を実行する。ステップＤ9では、ＩＧ命令実行ユニット４４がプログラムメモリ４０より読み出されているメモリアドレス「１」のＤＩＮＴ命令を実行する。
【０１６１】
３〜５番目のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ7→Ｄ8→Ｄ9の処理が選択され、上記した第１実施例における３〜５番目のクロックサイクルと同様の処理動作が行なわれる。すなわち、処理部１８の各プロセッシング・エレメントＰＥKが上記移動命令を２，３，４回目と順次実行し、同時にＩＧ命令実行ユニット４４がプログラムメモリ４０より読み出されたメモリアドレス「２」，「３」，「４」のＤＩＮＴ命令、ＪＦＡＺ命令、ＪＦＢＺ命令を順次実行する。
【０１６２】
６番目のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ7→Ｄ8→Ｄ10→Ｄ11→Ｄ12の処理が行なわれる。特に、ステップＤ11では、プログラムメモリ４０より読み出されたメモリアドレス「１０」の移動命令がＦＩＦＯメモリ７０に格納される。そして、ステップＤ12で、アドレスカウンタ（ＰＣ）４２のカウンタ値（メモリアドレス）がインクリメントされて「１１」になる。
【０１６３】
７番目のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ7→Ｄ8→Ｄ9の処理が行なわれる。ステップＤ9では、ＩＧ命令実行ユニット４４がプログラムメモリ４０より読み出されたメモリアドレス「１１」のＪＭＰ命令を実行する。上記した第１の実施例では１０番目のクロックサイクルでメモリアドレス「１１」のＪＭＰ命令が実行されるのに対して、本実施例では７番目のクロックサイクルで同ＪＭＰ命令が実行される。
【０１６４】
８番目のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ7→Ｄ8→Ｄ10→Ｄ11→Ｄ12の処理が行なわれる。特に、ステップＤ11では、プログラムメモリ４０より読み出されたメモリアドレス「５」の加算命令がＦＩＦＯメモリ７０に格納される。
【０１６５】
９番目のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ7→Ｄ8→Ｄ10（終り）の処理が行なわれる。ステップＤ10では、ＦＩＦＯメモリ７０がフル状態にあるため、プログラムメモリ４０より読み出されたメモリアドレス「６」の加算命令はＦＩＦＯメモリ７０に格納されない。したがって、アドレスカウンタ（ＰＣ）４２のカウンタ値（メモリアドレス）は「６」のままである。しかし、ステップＤ7で、メモリアドレス「０」の移動命令に対する処理部１８の繰り返し実行処理が終了し、リピートカウンタ（RPT cntr）５２のカウンタ値（残りリピート値）が「１」になる。
【０１６６】
１０番目のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ4→Ｄ6→Ｄ8→Ｄ11→Ｄ12の処理が行なわれる。ステップＤ6では、メモリアドレス「１０」の移動命令がＦＩＦＯメモリ７０より読み出されてマイクロ命令レジスタ４６およびアドレスカウンタ４８，５０にセットされ、処理部１８の各プロセッシング・エレメントＰＥKは上記移動命令（１回目）を実行する。ステップＤ11では、上記移動命令と入れ替わりに今回プログラムメモリ４０より読み出されたメモリアドレス「６」の加算命令がＦＩＦＯメモリ７０に格納される。
【０１６７】
１１〜１７番目のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ7→Ｄ8→Ｄ10（終り）の処理が行なわれる。
【０１６８】
１８番目のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ4→Ｄ6→Ｄ8→Ｄ10→Ｄ11→Ｄ12の処理が選択される。ステップＤ6では、メモリアドレス「５」の加算命令がＦＩＦＯメモリ７０より読み出されてマイクロ命令レジスタ４６およびアドレスカウンタ４８，５０にセットされ、処理部１８の各プロセッシング・エレメントＰＥKは上記加算命令を実行する。ステップＤ11では、上記メモリアドレス「５」の加算命令と入れ替わりに今回プログラムメモリ４０より読み出されたメモリアドレス「７」の加算命令がＦＩＦＯメモリ７０に格納される。
【０１６９】
１９番目のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ4→Ｄ6→Ｄ8→Ｄ9の処理が行なわれる。ステップＤ6では、メモリアドレス「６」の加算命令がＦＩＦＯメモリ７０より読み出されてマイクロ命令レジスタ４６およびアドレスカウンタ４８，５０にセットされ、処理部１８の各プロセッシング・エレメントＰＥKは上記加算命令を実行する。ステップＤ9では、ＩＧ命令実行ユニット４４がプログラムメモリ４０より読み出されているメモリアドレス「８」のＥＩＮＴ命令を実行する。
【０１７０】
２０番目のクロックサイクルでは、ステップＤ2→Ｄ3→Ｄ7→Ｄ8→Ｄ9の処理が行なわれる。ステップＤ7では、メモリアドレス「６」の加算命令について処理部１８の各プロセッシング・エレメントＰＥKが２回目の加算演算を実行する。ステップＤ9では、ＩＧ命令実行ユニット４４がプログラムメモリ４０より読み出されているメモリアドレス「９」のＪＭＰ命令を実行する。
【０１７１】
上記した第１の実施例では２６，２７番目のクロックサイクルでメモリアドレス「８」，「９」のＥＩＮＴ命令，ＪＭＰ命令が実行されるのに対して、本実施例では１９，２０番目のクロックサイクルで同命令が実行される。しかも、ＩＧ命令実行ユニット４４がこれらのＥＩＮＴ命令，ＪＭＰ命令を実行する時、第１の実施例では処理部１８がＮＯＰ命令を受けて一時停止状態となるのに対して、本実施例では処理部１８がマイクロ命令レジスタ４６およびアドレスカウンタ４８，５０からのマイクロ命令およびアドレスを受け取ってＳＩＭＤ命令（メモリアドレス「６」の加算命令）の繰り返し実行を継続する。これにより、処理部１８の稼動率が一層向上する。
【０１７２】
２１番目以降のクロックサイクルにおける動作は、上述した説明と図１２から容易に理解できるので、説明を省略する。
【０１７３】
なお、非ＳＩＭＤ命令であっても、ＳＩＭＤ命令の実行シーケンスと同期をとった方が好ましい場合もある。たとえば、ＤＩＮＴ命令（割込み禁止命令）やＥＩＮＴ命令（割込み許可命令）においてハードウェア・インタラプトの有無を判定するステップまたはタイミングをＳＩＭＤ命令の実行シーケンスに同期させたい場合もある。その場合は、そのような同期型の非ＳＩＭＤ命令（ＤＩＮＴ，ＥＩＮＴ）をいったんＦＩＦＯ７０に蓄積し、ＦＩＦＯ７０から読み出した時点で該非ＳＩＭＤ命令の検出と実行を行うようにすればよい。このアプリケーションでは、図１３に示すように、ＦＩＦＯ７０のデータ出力端子ＯＵＴより出力されるデータの中から同期型の非ＳＩＭＤ命令（ＤＩＮＴ，ＥＩＮＴ）を検出してＳＩＭＤ命令実行ユニット４４へ伝える回路７９が設けられる。
【０１７４】
図１４に、本発明においてプログラムメモリ４０の所要記憶容量を小さくするための一実施例を示す。プログラムメモリ４０には、本ＳＶＰ１０の処理動作に必要なプログラムが蓄積される。上記したように、プログラムを構成する個々の命令（プログラムデータ）は、たとえば４６ビット［０〜４５］からなり、そのうち［４０，４１］の２ビット・データが当該命令の形式つまりＳＩＭＤ命令なのか、ＩＧ命令なのかを表す。そして、ＳＩＭＤ命令の場合は、［０〜９］、［１２〜２１］の各１０ビット・データが各プロセッシング・エレメントＰＥKにおけるレジスタ・ファイルＲＦ0,ＲＦ1内の初期アドレスをそれぞれ表し、［１０〜１１、２２〜３９］の２０ビット・データが当該ＳＩＭＤ命令の命令コード部を構成し、［４２〜４５］の４ビット・データが当該ＳＩＭＤ命令のリピート値（繰り返し回数）を表す。
【０１７５】
命令コード部［１０〜１１、２２〜３９］はそのままマイクロ命令としてＳＶＰコア１２に与えられるため、２０ビットものデータ長を有している。２０ビットデータの場合、２20 （＝１０４８５７４）通りのデータ値が可能である。しかし、実際のＳＶＰにおいて命令の種類は通常２００以下である。
【０１７６】
かかる実情に鑑みて、この実施例では、命令コード部［１０〜１１、２２〜３９］をたとえば８ビットのデータ（ｄ0〜ｄ7）にコード化したものをプログラムメモリ４０に蓄積し、プログラムメモリ４０より出力した８ビットの各コード・データ（ｄ0〜ｄ7）をデコーダ８０で２０ビットのデータつまり本来の命令コード部［１０〜１１、２２〜３９］に展開（復号）するようにしている。デコーダ８０は、たとえばＲＯＭまたはＲＡＭからなるルックアップ・テーブルで実現することができる。プログラムメモリ４０においては、各命令の命令コード部が８ビット幅であるから、２０ビット幅の場合よりも所要記憶容量が小さくなる。
【０１７７】
デコーダ８０は、ＳＩＭＤ命令実行部とＩＧ命令実行部とで共用することも可能であり、あるいは別々に設けられてもよい。別々の場合、ＳＩＭＤ命令実行部においては、マイクロ命令レジスタ４６の後段にデコーダ８０を配置することができる。これにより、マイクロ命令レジスタ４６やＦＩＦＯメモリ７０等のビット幅を小さくすることができる。
【０１７８】
図１４の例では、プログラムデータ［０〜４５］のうち命令コード部［１０〜１１、２２〜３９］だけをコード化したが、必要に応じて他のデータ部分（たとえばアドレス部分）をコード化することも可能である。
【０１７９】
上記した実施例はＳＶＰに係るものであったが、本発明は他の形式のＳＩＭＤ型並列プロセッサにも適用可能であり、さらには１つの命令を複数のクロックサイクルにわたって繰り返し実行する機能を備えた任意のプロセッサに適用可能である。
【０１８０】
【発明の効果】
以上説明したように、本発明のプロセッサによれば、１つの命令を複数のクロックサイクルにわたって繰り返し実行する方式において繰り返し実行処理部の稼動率を高め、処理性能を向上させることができる。また、命令をコード化してプログラムメモリに蓄積することで、プログラムメモリの所要記憶容量を小さくすることができる。
【図面の簡単な説明】
【図１】  本発明の一実施例によるＳＩＭＤ型並列プロセッサの構成を示すブロック図である。
【図２】  実施例におけるＳＶＰコアの内部の作用を概略的に説明するための図である。
【図３】  第１の実施例における命令発行部（ＩＧ）の要部の構成を示すブロック図である。
【図４】  実施例のＳＶＰにおけるプログラム実行処理の手順を示すフローチャートである。
【図５】  実施例のＳＶＰで実施可能なプログラムの例を示すプログラムリストである。
【図６】  実施例のＳＶＰでプログラム例を実行する場合の各クロックサイクル毎のＳＶＰ内の各部のステータスまたは動作を示す図である。
【図７】  実施例のＳＶＰにおける移動命令の処理手順を示すフローチャートである。
【図８】  実施例のＳＶＰにおける加算命令の処理手順を示すフローチャートである。
【図９】  第２の実施例における命令発行部（ＩＧ）の要部の構成を示すブロック図である。
【図１０】  第２の実施例のＳＶＰにおけるプログラム実行処理の手順を示すフローチャートである。
【図１１】  第２の実施例のＳＶＰでプログラム例を実行する場合の各クロックサイクル毎のＳＶＰ内の各部のステータスまたは動作を示す図である。
【図１２】  第２の実施例のＳＶＰでプログラム例を実行する場合の各クロックサイクル毎のＳＶＰ内の各部のステータスまたは動作を示す図である。
【図１３】  第２の実施例において同期型の非ＳＩＭＤ命令（ＤＩＮＴ，ＥＩＮＴ）をＳＩＭＤ命令と同期して実行する変形例の要部の構成を示すブロック図である。
【図１４】  本発明においてプログラムメモリの所要記憶容量を小さくするための一実施例を示す図である。
【符号の説明】
１０    ＳＶＰ
１２    ＳＶＰコア
１４    命令発行部（ＩＧ）
１８    ディジタル信号処理部
４０    プログラムメモリ
４２    プログラムカウンタ
４４    ＩＧ命令実行ユニット
４６    マイクロ命令レジスタ
４８，５０    アドレスカウンタ
５２    リピータカウンタ
５４    一致回路
５６，５８    スイッチ
７０    ＦＩＦＯメモリ
８０    デコーダ
【図１】
0004138180.tif 000002
【図２】
0004138180.tif 000003
【図３】
0004138180.tif 000004
【図４】
0004138180.tif 000005
【図５】
0004138180.tif 000006
【図６】
0004138180.tif 000007
【図７】
0004138180.tif 000008
【図８】
0004138180.tif 000009
【図９】
0004138180.tif 000010
【図１０】
0004138180.tif 000011
【図１１】
0004138180.tif 000012
【図１２】
0004138180.tif 000013
【図１３】
0004138180.tif 000014
【図１４】
0004138180.tif 000015