図面 (/)

技術 プロセッサ

出願人 日本テキサス・インスツルメンツ株式会社
発明者 宮口裕秋山強小沼英俊
出願日 1999年10月8日 (20年4ヶ月経過) 出願番号 1999-288169
公開日 2001年4月20日 (18年9ヶ月経過) 公開番号 2001-109627
状態 特許登録済
技術分野 先行制御 機械語命令の実行 画像処理 並列プロセッサ
主要キーワード NOPコード 所要容量 所要記憶容量 リピートカウンタ エレメント側 ワーキングレジスタ 命令コード部 一般形式
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2001年4月20日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (15)

課題

1つの命令を複数のクロックサイクルにわたって繰り返し実行するシステム処理効率を向上させること。

解決手段

このSVP(Scan-line Video Processor )10のSVPコア12は、データ入力レジスタ(DIR)、SIMD型ディジタル信号処理部18およびデータ出力レジスタDOR)の三層構造からなっている。SIMD型処理部は、1水平走査線上の画素数Nに等しい数のプロセッシングエレメント並列配置する。命令発生部(IG)は、SIMD型並列プロセッサを動作させるため、所要プログラムを保持する。このプログラムには、プロセッシング・エレメントに対する命令(SIMD命令)だけでなく、ジャンプハードウェア割込み関連の命令(IG命令)も含まれ、SIMD命令の繰り返し処理並行して当該IG命令を実行する。

概要

背景

この種のプロセッサとしてたとえばSIMD(Single-Instruction-Multiple-Data)型並列プロセッサが知られている。SIMD型並列プロセッサでは、並列配置された多数(通常、少なくとも100個以上)のプロセッシングエレメントが同一の命令にしたがって並列動作するように構成されている。各プロセッシング・エレメントは1ビットDSP(Digital-Signal-Processor)からなり、1つの演算処理を1クロックサイクル内に1ビット単位で実行する。したがって、たとえば1つの8ビットデータを移動する場合には、1ビットのデータ移動を8クロックサイクルかけて8回繰り返し実行する。また、2つの8ビットデータを加算して9ビットの加算結果最上位ビット桁上げ分)を得るには、1ビットの加算演算を9クロックサイクルかけて9回繰り返し実行することになる。もっとも、多数のプロセッシング・エレメントによる演算処理が同時に行なわれるため、全体としては高い処理性能を実現することが可能である。

概要

1つの命令を複数のクロックサイクルにわたって繰り返し実行するシステム処理効率を向上させること。

このSVP(Scan-line Video Processor )10のSVPコア12は、データ入力レジスタ(DIR)、SIMD型ディジタル信号処理部18およびデータ出力レジスタDOR)の三層構造からなっている。SIMD型処理部は、1水平走査線上の画素数Nに等しい数のプロセッシング・エレメントを並列配置する。命令発生部(IG)は、SIMD型並列プロセッサを動作させるため、所要プログラムを保持する。このプログラムには、プロセッシング・エレメントに対する命令(SIMD命令)だけでなく、ジャンプハードウェア割込み関連の命令(IG命令)も含まれ、SIMD命令の繰り返し処理並行して当該IG命令を実行する。

目的

本発明は、かかる問題点に鑑みてなされたもので、1つの命令を複数のクロックサイクルにわたって繰り返し実行するシステムの処理効率を向上させるプロセッサを提供することを目的とする。

さらに、本発明は、プログラムメモリ所要記憶容量を小さくできるプロセッサを提供することを目的とする。

効果

実績

技術文献被引用数
2件
牽制数
0件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

第1形式命令を1つまたは複数のクロックサイクルにわたって繰り返し実行する第1の命令実行部と、第2形式の命令を前記第1の命令実行部から独立して実行する第2の命令実行部と、第1形式の命令と第2形式の命令とを含むプログラム蓄積するプログラムメモリと、プログラムの実行シーケンスにしたがって前記プログラムメモリより第1形式または第2形式の命令を順次読み出す命令読み出し手段と、第1形式の命令の実行中に前記プログラムメモリより第2形式の命令が読み出されたときは前記第1の命令実行部による当該第1形式の命令の実行と並行して前記第2の命令実行部に当該第2形式の命令を実行させる命令実行制御手段とを有するプロセッサ

請求項2

前記第1の命令実行部が、第1形式の命令の命令コード部で規定される処理を1クロックサイクル内に1ビット単位で実行する処理部と、前記プログラムメモリより読み出された各々の前記第1形式の命令についてその命令の命令コード部をマイクロ命令として前記処理部に与えるマイクロ命令レジスタと、前記プログラムメモリより読み出された各々の前記第1形式の命令についてその命令に係わるデータアドレスを1クロックサイクル毎に初期値から所定の最終値までインクリメントまたはディクリメントしながら前記処理部に逐次与えるアドレスカウンタと、前記プログラムメモリより読み出された各々の前記第1形式の命令について前記命令コード部で規定される処理が前記処理部で繰り返し実行される回数カウントするリピートカウンタとを有する請求項1に記載のプロセッサ。

請求項3

前記プログラムメモリより読み出された第1形式の命令を先入れ先出し方式で蓄積し、読み出した第1形式の命令を第1の命令実行部に与える先入れ先出し型メモリを有する請求項1に記載のプロセッサ。

請求項4

前記第1の命令実行部が、第1形式の命令の命令コード部で規定される処理を1クロックサイクル内に1ビット単位で実行する処理部と、前記先入れ先出し型メモリより読み出された各々の前記第1形式の命令についてその命令の命令コード部をマイクロ命令として前記処理部に与えるマイクロ命令レジスタと、前記先入れ先出し型メモリより読み出された各々の前記第1形式の命令についてその命令に係わるデータアドレスを1クロックサイクル毎に初期値から所定の最終値までインクリメントまたはディクリメントしながら前記処理部に逐次与えるアドレスカウンタと、前記先入れ先出し型メモリより読み出された各々の前記第1形式の命令について前記命令コード部で規定される処理が前記処理部で繰り返し実行される回数をカウントするリピートカウンタとを有する請求項3に記載のプロセッサ。

請求項5

前記先入れ先出し型メモリには第1形式の命令の実行シーケンと同期して実行されるべき所定の第2形式の命令も蓄積され、前記所定の第2形式の命令は前記先入れ先出し型メモリより読み出された時点で前記第2の命令実行部により実行される請求項3または4に記載のプロセッサ。

請求項6

前記プログラムメモリには各命令の一部または全部がコード化されて蓄積され、前記プログラムより読み出された命令をデコードするデコーダが設けられている請求項1〜4のいずれかに記載のプロセッサ。

請求項7

前記処理部が、走査線上の画素に1対1の対応関係割り当てられ、かつ共通の第1形式の命令にしたがって同一の動作を行う複数個プロセッシングエレメントを有し、入力した画像信号走査線単位で処理する請求項1〜5のいずれかに記載のプロセッサ。

技術分野

0001

本発明は、ディジタル信号処理を行うためのプロセッサ係り、特に1つの命令を複数のクロックサイクルにわたって繰り返し実行する機能を備えたプロセッサに関する。

背景技術

0002

この種のプロセッサとしてたとえばSIMD(Single-Instruction-Multiple-Data)型並列プロセッサが知られている。SIMD型並列プロセッサでは、並列配置された多数(通常、少なくとも100個以上)のプロセッシングエレメントが同一の命令にしたがって並列動作するように構成されている。各プロセッシング・エレメントは1ビットDSP(Digital-Signal-Processor)からなり、1つの演算処理を1クロックサイクル内に1ビット単位で実行する。したがって、たとえば1つの8ビットデータを移動する場合には、1ビットのデータ移動を8クロックサイクルかけて8回繰り返し実行する。また、2つの8ビットデータを加算して9ビットの加算結果最上位ビット桁上げ分)を得るには、1ビットの加算演算を9クロックサイクルかけて9回繰り返し実行することになる。もっとも、多数のプロセッシング・エレメントによる演算処理が同時に行なわれるため、全体としては高い処理性能を実現することが可能である。

発明が解決しようとする課題

0003

上記のようなSIMD型並列プロセッサにおいて、全プロセッシング・エレメントに共通の命令を発行する命令発行部には、プロセッシング・エレメントに対する命令(SIMD命令)以外にジャンプサブルーチンコールハードウェア割込み関連の命令も用意されることがある。これらの非SIMD命令はプロセッシング・エレメントとは別の命令実行部で実行される。

0004

従来のSIMD型並列プロセッサでは、プログラム実行シーケンスにおいてSIMD命令か非SIMD命令かの区別なく各命令が順番に1つずつシリアルに実行される仕組みになっている。したがって、プロセッシング・エレメントによるSIMD命令の実行中に命令発行部においてプログラムメモリより非SIMD命令が読み出されたときは、該SIMD命令の実行が終了するまで該非SIMD命令は待機状態に置かれ、該SIMD命令の実行が終了してから上記命令実行部で該非SIMD命令が実行されることになる。そして、非SIMD命令の実行中は、プロセッシング・エレメントに対して命令の不実行を指示するNOP(No-Operation)命令が与えられる。しかし、このように、非SIMD命令が実行される度にプロセッシング・エレメント側の動作が実質的に停止または休止することで、処理性能が制限されている。

0005

本発明は、かかる問題点に鑑みてなされたもので、1つの命令を複数のクロックサイクルにわたって繰り返し実行するシステム処理効率を向上させるプロセッサを提供することを目的とする。

0006

さらに、本発明は、プログラムメモリの所要記憶容量を小さくできるプロセッサを提供することを目的とする。

課題を解決するための手段

0007

上記の目的を達成するために、本発明のプロセッサは、第1形式の命令を1つまたは複数のクロックサイクルにわたって繰り返し実行する第1の命令実行部と、第2形式の命令を前記第1の命令実行部から独立して実行する第2の命令実行部と、前記第1形式の命令と前記第2形式の命令とを含むプログラムを蓄積するプログラムメモリと、プログラムの実行シーケンスにしたがって前記プログラムメモリより第1形式または第2形式の命令を順次読み出す命令読み出し手段と、第1形式の命令の実行中に前記プログラムメモリより第2形式の命令が読み出されたときは前記第1の命令実行部による当該第1形式の命令の実行と並行して前記第2の命令実行部に当該第2形式の命令を実行させる命令実行制御手段とを有する。

0008

本発明のプロセッサにおいては、第1の命令実行部で第1形式の命令の繰り返し実行が行なわれている最中にプログラムメモリより読み出された第2形式の命令については第1命令実行部の処理動作と並行して第2の命令実行部が該第2形式の命令を実行するので、第1命令実行部の稼動率ひいては全体のスループットが向上する。

0009

本発明のプロセッサにおいて、好ましくは、前記第1の命令実行部が、第1形式の命令の命令コード部で規定される処理を1クロックサイクル内に1ビット単位で実行する処理部と、前記プログラムメモリより読み出された各々の前記第1形式の命令についてその命令の命令コード部をマイクロ命令として前記処理部に与えるマイクロ命令レジスタと、前記プログラムメモリより読み出された各々の前記第1形式の命令についてその命令に係わるデータアドレスを1クロックサイクル毎に初期値から所定の最終値までインクリメントまたはディクリメントしながら前記処理部に逐次与えるアドレスカウンタと、前記プログラムメモリより読み出された各々の前記第1形式の命令について前記命令コード部で規定される処理が前記処理部で繰り返し実行される回数カウントするリピートカウンタとを有する。

0010

また、本発明のプロセッサは、好ましくは、前記プログラムメモリより読み出された第1形式の命令を先入れ先出し方式で蓄積し、読み出した第1形式の命令を第1の命令実行部に与える先入れ先出し型メモリを有してよい。

0011

その場合、第2形式の命令であっても、第1形式の命令の実行シーケンと同期して実行されるべきものについては、いったん先入れ先出し型メモリに蓄積し、先入れ先出し型メモリより読み出した時点で第2の命令実行部で実行する構成としてもよい。

0012

また、本発明のプロセッサにおいて、プログラムメモリの所要容量を少なくするために、前記プログラムメモリには各命令の一部または全部がコード化されて蓄積され、前記プログラムより読み出された命令をデコードするデコーダが設けられている構成としてもよい。

発明を実施するための最良の形態

0013

以下、添付図を参照して本発明の実施例を説明する。

0014

図1に、本発明の一実施例によるSIMD型並列プロセッサの構成を示す。このSIMD型並列プロセッサは、画像信号走査線単位で入力、並列演算処理および出力するSVP(Scan-line Video Processor )10として構成されている。

0015

このSVP10は、1チップ上にSVPコア12と命令発生部(IG)14とを搭載している。SVPコア12は、データ入力レジスタ(DIR)16、SIMD型ディジタル信号処理部18およびデータ出力レジスタDOR)20の三層構造からなっている。

0016

DIR16は、外部制御回路からの制御信号<Control>と外部クロック回路からのクロック<SWCK>とIG14からのアドレス<ADDRESS>とにしたがって動作し、たとえば水平走査線3本分までの画像データD0〜DN-1 (たとえば48ビット×864画素)を繰り返し入力する。

0017

SIMD型ディジタル信号処理部18は、1水平走査線上の画素数Nに等しい数(たとえば864個)のプロセッシング・エレメントPE0 〜PEN-1 を並列配置(接続)してなる。これらのプロセッシング・エレメントPE0 ,PE1 ,…PEN-1 は、IG14からのアドレス<ADDRESS>およびマイクロ命令<MICROINSTRUCTION>と外部クロック回路からのクロック<PCLK>とにしたがって並列動作し、各々対応する画素データD0,D1 ,…DN-1 について同一の画像処理演算を1水平走査期間内に実行する。

0018

DOR20は、外部制御回路からの制御信号<Control>と外部クロック回路からのクロック<SRCK>とIG14からのアドレス<ADDRESS>とにしたがって動作し、1水平走査期間毎にプロセッシング・エレメントPE0 〜PEN-1 からの演算処理結果のデータを水平走査線1本分の画像データD0'〜DN-1'(たとえば32ビット×864画素)に揃えて出力する。

0019

DIR16、処理部18およびDOR20にそれぞれ供給されるクロック<SWCK> 、<PCLK>および<SRCK> は互いに非同期であってよい。また、DIR16から処理部18へのデータ転送、および処理部18からDOR20へのデータ転送は、それぞれ水平ブランキング期間内に行われる。

0020

このように、DIR16、処理部18およびDOR20によりそれぞれ1水平走査線分データ入力、並列演算処理およびデータ出力パイプライン方式で非同期かつ並列的に実行され、リアルタイム画像処理が行われる。

0021

IG14は、SVPコア12をSIMD型並列プロセッサとして動作させるため、所要のプログラムを保持するRAMまたはROMからなるプログラムメモリを内蔵しており、外部からのフラグ信号<IGFLAG−A/B>等にしたがって、飛び越し、サブルーチンコール、割り込み等も行えるようになっている。フラグ信号<IGFLAG−A/B>は、たとえば、入力画像信号より抽出された水平同期信号<HSYNC>に同期して与えられる。

0022

ここで、図2につきSVPコア12の内部の作用を概略的に説明する。SVPコア12内の各部の動作は、上記したようにIG14からのアドレス<ADDRESS>およびマイクロ命令<MICROINSTRUCTION>や外部クロック回路からのクロック<PCLK> 等によって制御される。

0023

図2において、DIR16は1ライン分の入力画像データD0〜DN-1 を蓄積できる記憶容量(たとえば48ビット×864ワード)を有し、画素単位ブロック化されている。入力画像データD0 〜DN-1 がDIR16内を転送される途中、各画素データ…,DK-2,DK-1,DK,DK+1,DK+2,…は1個ずつ次々と引き落とされるようにしてDIR16の各ブロック…,K−2,K−1,K,K+1,K+2,…のレジスタ群に取り込まれる。

0024

処理部18の各プロセッシング・エレメントPEK は、各々が所定の容量(たとえば192ビット)を有する一対のレジスタファイルRF0,RF1 と、1個の1ビット演算論理ユニットALU)24と、複数個たとえば4個のワーキング・レジスタ26[M,A,B,C]と、左右隣の複数個(たとえば左右各4個)のプロセッシング・エレメントPEK-4,PEK-3,PEK-2,PEK-1,PEK+1,PEK+2,PEK+3,PEK+4とデータをやりとりするL/R(左右)通信部(LRCOM)28とを有している。

0025

一方のレジスタ・ファイルRF0 はDIR16の対応するブロックのレジスタ群に接続され、他方のレジスタ・ファイルRF1 はDOR20の対応するブロックのレジスタ群に接続されている。レジスタ・ファイルRF0,RF1 の片方または双方から読み出された1ビットのデータは、ワーキング・レジスタ[M,A,B,C]のいずれかに与えられるとともに、L/R通信部28のマルチプレクサ30およびラッチ回路32を介して隣接する左右各4個のプロセッシング・エレメントPEK-4,PEK-3,PEK-2,PEK-1 ,PEK+1,PEK+2,PEK+3,PEK+4へ送られる。

0026

これと同時に、それら隣の各プロセッシング・エレメントPEK-4,PEK-3,PEK-2,PEK-1,PEK+1,PEK+2,PEK+3,PEK+4からのデータも当該プロセッシング・エレメントPEK のL/R通信部28のマルチプレクサ34,36に送られてきて、それらのデータの中のいずれか1つが選択されてワーキング・レジスタ[M,A,B,C]のいずれかに入力される。図2では、左隣のプロセッシング・エレメントPEK-4,PEK-3,PEK-2,PEK-1からのデータのいずれか1つが選択され、ワーキング・レジスタ[A]に入力されたことを示している。

0027

ALU24は、ワーキング・レジスタ[M,A,B,C]より与えられるデータについて1ビット単位の加算演算を実行し、その演算結果(和,桁上げ)を出力する。ALU24の演算結果のうち、和(SM)のビットはレジスタ・ファイルRF0,RF1 のいずれかに書き込まれ、桁上げ(CY)のビットは図示しないマルチプレクサを介してワーキング・レジスタ[C]に与えられる。

0028

DOR20は、1ライン分の出力画像データD0'〜DN-1'を蓄積できる記憶容量(たとえば32ビット×864ワード)を有し、画素単位でブロック化されている。各ブロック毎に処理部18よりDOR20に送られてきた演算処理結果の画素データD0'〜DN-1'は、1水平走査期間をかけて左端の画素データD0'を先頭後続の画素データD1', D2', …が数珠繋ぎに続くように順にDOR20の各ブロックから送出される。

0029

処理部18は、レジスタ・ファイルRF0,RF1 に2ライン分以上の画像データを蓄積することが可能であり、これによってラインメモリの機能も実現可能となっている。また、処理部18は、1水平走査期間中に複数チャンネルの画像データについて時分割的に各個別の処理を実行することも可能である。

0030

図3に、本発明の一実施例におけるIG14の要部の構成を示す。このIG14は、プログラムメモリ40の外に、プログラムカウンタ42、IG命令実行ユニット44、マイクロ命令レジスタ46、アドレスカウンタ48,50、リピートカウンタ52、一致回路54、切換スイッチ56,58、ゲート60,62およびインバータ64を有している。

0031

プログラムメモリ40はROM(Read Only Memory)またはRAM(Random Access Memory)からなり、このSIMD型並列プロセッサの処理動作に必要なプログラムを保持する。このプログラムメモリ40に格納されるプログラムには、処理部18のプロセッシング・エレメントPE0 〜PEN-1 に対する命令(以下、SIMD命令と称する)だけでなく、ジャンプ、サブルーチンコール、ハードウェア割込み関連の命令(以下、IG命令と称する)も含まれている。

0032

本実施例においてプログラムを構成する個々の命令(プログラムデータ)は、たとえば46ビット[0〜45]のデータ長を有する。46ビット[0〜45]のうち、[40,41]の2ビット・データが当該命令の形式つまりSIMD命令なのか、IG命令なのかを表す。

0033

SIMD命令の場合、フィールド[0〜9]、[12〜21]の各10ビット・データが各プロセッシング・エレメントPEKにおけるレジスタ・ファイルRF0,RF1内の初期アドレスをそれぞれ表す。また、フィールド[10〜11、22〜39]の20ビット・データが当該SIMD命令の命令コード部を構成し、これがSVPコア12に対するマイクロ命令<MICROINSTRUCTION>となる。また、フィールド[42〜45]の4ビット・データが、当該SIMD命令のリピート値(繰り返し回数)を表す。

0034

IG命令の場合、命令形式識別データ[40,41]を除く[0〜39,42〜45]のデータが当該IG命令の命令コードおよびオペランド(データアドレス)を与える。

0035

プログラムカウンタ42は、プログラムの実行シーケンスにおいてクロックサイクル毎にカウンタ値メモリアドレスとしてプログラムメモリ40(より詳細にはメモリ読出回路(図示せず))に与える。

0036

IG命令実行ユニット44は、プログラムメモリ40より読み出されたIG命令を逐一実行する。本実施例におけるIG命令は、上記したようにジャンプ、サブルーチンコール、割込み等であるから、プログラムの実行シーケンスを変えることがある。IG命令実行ユニット44は、1クロックサイクルでIG命令を実行し、そのIG命令で指定されたメモリアドレスをプログラムカウンタ42にセットする。

0037

プログラムメモリ40より読み出された命令形式識別データ[40,41]は、当該命令がSIMD命令であるときは(0,0)である。このとき、アンドゲート60の出力は論理値“0”となり、両切換スイッチ56,58はそれぞれ入力端子aに切り換わる。

0038

マイクロ命令レジスタ46は、プログラムメモリ40より読み出されたSIMD命令の中の命令コード部[10〜11,22〜39]を切換スイッチ56を介して受け取る。該SIMD命令の実行中、マイクロ命令レジスタ46はこの命令コード部をマイクロ命令<MICROINSTRUCTION>としてSVPコア12内の各プロセッシング・エレメントPE0 〜PEN-1に与える。

0039

アドレスカウンタ48は、プログラムメモリ40より読み出されたSIMD命令の中のアドレス[0〜9]を初期値として入力する。該SIMD命令の実行中に、アドレスカウンタ48は、クロック<PCLK>に同期してカウンタ値をインクリメントし、各クロックサイクル毎にカウンタ値をアドレス<ADDRESS>として各プロセッシング・エレメントPEK内の一方のレジスタ・ファイルRF0に与える。

0040

アドレスカウンタ50は、プログラムメモリ40より読み出されたSIMD命令の中のアドレス[12〜21]を初期値として入力する。該SIMD命令の実行中に、アドレスカウンタ50は、クロック<PCLK>に同期してカウンタ値をインクリメントし、各クロックサイクル毎にカウンタ値をアドレス<ADDRESS>として各プロセッシング・エレメントPEK内の他方のレジスタ・ファイルRF1に与える。

0041

リピートカウンタ52は、プログラムメモリ40より読み出されたSIMD命令の中のリピート値[42〜45]を当該SIMD命令の残りリピート値(残り繰り返し回数)の初期値としてスイッチ58を介して受け取る。該SIMD命令の実行中、リピートカウンタ52はクロック<PCLK>に同期してカウンタ値(残りリピート値)をディクリメントする。

0042

一致回路54は、リピートカウンタ52より出力される残りリピート値を入力し、残りリピート値が「1」になったときに論理値“1”を出力する。一致回路54からの一致信号“1”は、オアゲート62を介してプログラムカウンタ42にインクメント・イネーブル信号として与えられる。プログラムカウンタ42は、インクメント・イネーブル信号を受け取ると、直後のクロック<PCLK>に応動してカウンタ値(メモリアドレス)を1つインクリメントする。

0043

一致回路54からの一致信号“1”は、マイクロ命令レジスタ46、両アドレスカウンタ48,50およびリピートカウンタ52に対しては入力イネーブル信号として与えられる。この入力イネーブル信号が与えられると、これらのレジスタ46およびカウンタ48,50,52は次のクロック<PCLK>に応動してプログラムメモリ側からのデータを入力またはラッチする。

0044

プログラムメモリ40より読み出された命令形式識別データ[40,41]は、当該命令がIG命令であるときは(1,0)である。このとき、アンドゲート60の出力は論理値“1”となり、両スイッチ56,58はそれぞれ入力端子bに切り換わる。スイッチ56が入力端子bに切り換わると、命令不実行(動作停止)を指示するNOP(No-Operation)命令のコード<NOP>が切換スイッチ56を介してマイクロ命令レジスタ46に与えられる。切換スイッチ58が入力端子bに切り換わると、命令実行の残り繰り返し回数が1回であることを示す残りリピート値<1>が切換スイッチ58を介してリピートカウンタ52に与えられる。

0045

上記のようにプログラムメモリ40よりIG命令が読み出されアンドゲート60の出力が論理値“1”になると、この論理値“1”の信号はオアゲート62を介してプログラムカウンタ42にインクリメント・イネーブル信号として与えられる。この場合も、プログラムカウンタ42は、直後のクロックでカウンタ値(メモリアドレス)を1つインクリメントする。

0046

IG14において、マイクロ命令レジスタ46、アドレスカウンタ48,50およびリピートカウンタ52は、後述するようにSVPコア12の処理と関連してSIMD命令の実行に係わるものであり、機能的にはSIMD命令実行部に属する。

0047

図4に、本実施例のSVP10におけるプログラム実行処理の手順を示す。図5に、このSVP10で実施可能なプログラムの一例を示す。図6に、このSVP10でプログラム例(図5)を実行する場合の各クロックサイクル毎の各部のステータスまたは動作を示す。図7および図8に、SVP10における移動命令および加算命令処理手順をそれぞれ示す。

0048

以下、このプログラム例(図5)につき本実施例のSVP10の作用を説明する。

0049

プログラムを実行するに先立ち初期化で、プログラムカウンタ(PC)42のカウンタ値を初期値「0」に、リピートカウンタ(RPT CNTR)52のカウンタ値を初期値「1」にそれぞれセットする(ステップA1)。

0050

≪クロックサイクル1≫最初のクロックサイクルにおいて、ステップA2では、プログラムカウンタ(PC)42のカウンタ値で指示されるメモリアドレス「0」にてプログラムメモリ40より命令(inst)が読み出される。

0051

ステップA3では、リピートカウンタ(RPT CNTR)52のカウンタ値が「1」になっている。したがって、ステップA4に入り、命令形式識別データ[40,41]から当該命令(inst)の形式が識別される。

0052

本例のプログラム(図5)の場合、メモリアドレス「0」の命令はSIMD命令に属する移動命令である。この移動命令の内容は、R0[17(H):10(H)]←R1[117(H):110(H)]である。すなわち、各プロセッシング・エレメントPEKにおいてレジスタ・ファイルRF1のアドレス「110(H)」〜「117(H)」から8ビットのデータをレジスタ・ファイルRF0のアドレス「10(H)」〜「17(H)」に転送するというものである。

0053

より詳細には、“RPT=8”は、この命令の繰り返し回数つまりリピート値(RPT)が8(回)であることを指示している。“M=1”は、各プロセッシング・エレメントPEK内のワーキングレジスタ[M]に “1”をセットすることを指示している。“A=R1(110)”は、レジスタ・ファイルRF1のアドレス「110(H)」(初期アドレス)に格納されている1ビットのデータをワーキングレジスタ[A]に与えることを指示している。“B=0”,“C=0”はワーキングレジスタ[B],[C]にそれぞれ“0”,“0”をセットすることを指示している。“R0(10)=SM”は、ALU24より出力される加算結果の和(SM)をレジスタ・ファイルRF0のアドレス「10(H)」(初期アドレス)に格納することを指示している。なお、移動命令の演算処理では、ワーキングレジスタ[A]の内容がそのままALU24の演算結果として出力され、桁上げ(CY)は発生しない。

0054

本実施例のSIMD命令は、上記のように、一般形式として、各プロセッシング・エレメントPEK内のワーキング・レジスタ[M,A,B,C]における入力値または入力元と、ALU24の演算結果の転送先と、命令繰り返し数とを定義する。

0055

さて、ステップA4で当該命令(inst)がSIMD命令であることが判明したので、次にステップA5,A6の処理が行なわれる。この場合、SIMD命令なので、上記したようにアンドゲート60の出力が論理値“0”となり、両スイッチ56,58がそれぞれ入力端子aに切り換わる。また、リピートカウンタ(RPTCNTR)52のカウンタ値が初期値「1」にセットされているため、一致回路54の出力は論理値“1”になっており、この論理値“1”の信号が入力イネーブル信号としてレジスタ46およびカウンタ48,50,52に与えられている。

0056

ステップA5において、IG14内では、この命令(inst)の命令コード部[10〜11,22〜39]がスイッチ56を介してマイクロ命令レジスタ(INSTREG)46にクロック<PCLK>のタイミングでセットされる。また、この命令(inst)のアドレス部[0〜9],[12〜21]がそれぞれアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50にクロック<PCLK>のタイミングでセットされる。また、この命令(inst)のリピート値[42〜45]がリピートカウンタ(RPT CNTR)52にクロック<PCLK>のタイミングでセットされる。今回のリピート値[42〜45]は「8」であるから、一致回路54の出力が論理値“0”に変わる。

0057

SVPコア12内では、特に処理部18では、IG14のマイクロ命令レジスタ(INST REG)46およびアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50よりそれぞれ与えられるマイクロ命令<MICROINSTRUCTION>およびアドレス<ADDRESS>にしたがって1ビット単位の演算処理(図7のステップB2)が実行される。この結果、各プロセッシング・エレメントPEK内でレジスタ・ファイルRF1の初期アドレス「110(H)」に格納されている1ビットのデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF0の初期アドレス「10(H)」に転送される。

0058

次に、ステップA6において、プログラムカウンタ(PC)42が、一致回路54からの論理値“1”のインクリメント・イネーブル信号を受けており、カウンタ値(メモリアドレス)を1つインクリメントする。その結果、本例では、プログラムカウンタ(PC)42のカウンタ値(メモリアドレス)が「0」から「1」に更新される。

0059

上記一連の処理(A2〜A6)は1クロックサイクルの時間内に行なわれる。

0060

≪クロックサイクル2≫次(2番目)のクロックサイクルに入ると、ステップA2で、プログラムカウンタ(PC)42のカウンタ値で指示されるメモリアドレス「1」にてプログラムメモリ40より命令(inst)が読み出される。

0061

次いで、ステップA3では、読み出された命令の形式には関係なく、リピートカウンタ(RPT CNTR)52のカウンタ値が「1」であるか否かが判定される。本例の場合、この時点のリピートカウンタ値は「8」であるから、一致回路54の出力は“0”であり、“1”ではない。これにより、ステップA7,A8の処理が選択される。

0062

ステップA7において、IG14内では、クロック<PCLK>のタイミングで、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50のカウンタ値(アドレス)がそれぞれ1つインクリメントされるとともに、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が1つディクリメントされて「7」になる。このIG14内の処理は、図7ではステップB3の処理に相当する。

0063

SVPコア12の処理部18内では、IG14のマイクロ命令レジスタ(INSTREG)46およびアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50よりそれぞれ与えられるマイクロ命令<MICROINSTRUCTION>およびアドレス<ADDRESS>にしたがって1ビット単位の演算処理(図7のステップB2)が実行される。この結果、各プロセッシング・エレメントPEK内でレジスタ・ファイルRF1の初期アドレスの次のアドレス「111(H)」に格納されている1ビットのデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF0の初期アドレスの次のアドレス「11(H)」に転送される。

0064

次に、ステップA8において、プログラムメモリ40より現在読み出されている命令(inst)がSIMD命令なのかIG命令なのかが、命令形式識別データ[40,41]からインバータ64およびアンドゲート60で判定される。

0065

本例における当該命令(inst)は、IG命令に属するDINT(Disable Interrupt)命令である。これにより、ステップA10に入り、IG命令実行ユニット44がDINT命令を実行する。DINT命令は、ハードウェアインタラプトを無効にするもので、たとえハードウェア・インタラプトが発生した場合でも分岐することなく1つ先のメモリアドレスの命令に進むことを指示する命令である。したがって、このDINT命令の実行によって、プログラムカウンタ42のカウンタ値(メモリアドレス)が1つインクリメントされて、「2」になる。

0066

上記一連の処理(A2〜A4→A7〜A8→A10)は1クロックサイクルの時間内に行なわれる。

0067

≪クロックサイクル3≫3番目のクロックサイクルでも、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が「7」であるから(ステップA3)、ステップA7,A8の処理が選択される。

0068

ステップA7の処理において、IG14内では、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50のカウンタ値(アドレス)がそれぞれ1つインクリメントされるとともに、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が1つディクリメントされて「6」になる。そして、処理部18の各プロセッシング・エレメントPEKでは、レジスタ・ファイルRF1のアドレス「112(H)」に格納されている1ビットのデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF0のアドレス「12(H)」に転送される。

0069

ステップA8の判定処理では、ステップA2でプログラムメモリ40より読み出された命令(inst)がメモリアドレス「2」のJFAZ(Jump on Flag A Zero)命令であるから、IG命令に属するものであることが判明する。つまり、アンドゲート60の出力が“1”である。

0070

したがって、このサイクルでもステップA10に入り、IG命令実行ユニット44がJFAZ命令を実行する。JFAZ命令は、フラグ信号<IGFLAG−A>のレベル検査して、そのレベルが論理値“0”であるときは所定の分岐アドレス(本例では「50」)にメモリアドレスをジャンプさせるものである。本例では、この分岐条件成立しなかったものとする。その場合は、プログラムカウンタ42のカウンタ値を1つ先のメモリアドレス「3」に進める。

0071

≪クロックサイクル4≫4回目のクロックサイクルでは、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が「6」であるから(ステップA3)、やはりステップA7,A8の処理が選択される。

0072

ステップA7の処理において、IG14内では、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50のカウンタ値(アドレス)がそれぞれ1つインクリメントされるとともに、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が1つディクリメントされて「5」になる。各プロセッシング・エレメントPEK内では、レジスタ・ファイルRF1のアドレス「113(H)」に格納されている1ビットのデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF0のアドレス「13(H)」に転送される。

0073

ステップA8の判定処理では、プログラムメモリ40より現在読み出されている命令(inst)がメモリアドレス「3」のJFBZ(Jump on Flag B Zero)命令であるから、IG命令に属するものであることが判明する。

0074

したがって、このサイクルでもステップA10に入り、IG命令実行ユニット44がJFBZ命令を実行する。JFBZ命令は、フラグ信号<IGFLAG−B>のレベルを検査して、そのレベルが論理値“0”であるときは所定の分岐アドレス(本例では「60」)にメモリアドレスをジャンプさせるものである。ここでは、この分岐条件が成立しなかったものとする。したがって、プログラムカウンタ42のカウンタ値を1つ先のメモリアドレス「4」に進める。

0075

≪クロックサイクル5≫5回目のクロックサイクルでは、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が「5」であるから、やはりステップA7,A8の処理が選択される。

0076

ステップA7の処理において、IG14内では、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50のカウンタ値(アドレス)がそれぞれ1つインクリメントされるとともに、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が1つディクリメントされて「4」になる。各プロセッシング・エレメントPEK内では、レジスタ・ファイルRF1の初期アドレスから4番目の位置「114(H)」に格納されている1ビットのデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF0の初期アドレスから4番目の位置「14(H)」に転送される。

0077

ステップA8の判定処理では、ステップA2でプログラムメモリ40より読み出されている命令(メモリアドレス「4」のJMP(Jump)命令)がIG命令に属するものであることが判明する。

0078

ステップA10の処理では、IG命令実行ユニット44がJMP命令を実行し、このJMP命令で指定された分岐先のメモリアドレス(本例では「10」)にプログラムカウンタ42のカウンタ値を更新する。

0079

≪クロックサイクル6≫6番目のクロックサイクルでは、ステップA2で、プログラムメモリ40のメモリアドレス「10」から移動命令(図5)が読み出される。理解されるように、メモリアドレス「10」の移動命令の内容は、R1[27(H):20(H)]←R0[127(H):120(H)]である。すなわち、各プロセッシング・エレメントPEKにおいてレジスタ・ファイルRF0にアドレス「120(H)」を初期アドレスとして格納されている8ビットのデータを1ビットずつ8クロックサイクルかけてレジスタ・ファイルRF1にアドレス「20(H)」を初期アドレスとして転送するというものである。

0080

この場合にも、ステップA3ではリピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が「4」であるから(ステップA3)、ステップA7,A8の処理が選択される。

0081

ステップA7の処理において、IG14内では、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50のカウンタ値(アドレス)がそれぞれ1つインクリメントされるとともに、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が1つディクリメントされて「3」になる。各プロセッシング・エレメントPEK内では、レジスタ・ファイルRF1のアドレス「115(H)」に格納されている1ビットのデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF0のアドレス「15(H)」に転送される。

0082

ステップA8の判定処理では、プログラムメモリ40より読み出されている命令(メモリアドレス「10」の移動命令)がSIMD命令に属するものであることが判明する。

0083

この場合は、ステップA10に入ることなく、このクロックサイクルを終了する。したがって、プログラムカウンタ42のカウンタ値は更新されず、クロックサイクル開始時のメモリアドレス「10」が維持される。

0084

≪クロックサイクル7≫7番目のクロックサイクルでは、前サイクルと同様にプログラムメモリ40のメモリアドレス「10」より移動命令が読み出される(ステップA2)。リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)がまだ「3」であるから、この場合もステップA7,A8の処理が選択される。

0085

ステップA7の処理において、IG14内では、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50のカウンタ値(アドレス)がそれぞれ1つインクリメントされるとともに、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が1つディクリメントされて「2」になる。各プロセッシング・エレメントPEK内では、レジスタ・ファイルRF1のアドレス「116(H)」に格納されている1ビットのデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF0のアドレス「16(H)」に転送される。

0086

ステップA8の判定処理では、プログラムメモリ40より読み出されている命令(メモリアドレス「10」の移動命令)がSIMD命令に属するものであることが判明する。したがって、ステップA10に入ることなく、プログラムカウンタ42のカウンタ値が「10」に維持されたまま、このクロックサイクルを終了する。

0087

≪クロックサイクル8≫8番目のクロックサイクルでも、前サイクルと同様にプログラムメモリ40のメモリアドレス「10」より移動命令が読み出される(ステップA2)。ステップA3ではリピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)がまだ「2」であるから、この場合もステップA7,A8の処理が選択される。

0088

ステップA7においては、IG14のアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50よりそれぞれ与えられるアドレス<ADDRESS>が1つインクリメントされることにより、SVPコア12の各プロセッシング・エレメントPEK内でレジスタ・ファイルRF1のアドレス「117(H)」に格納されている1ビットのデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF0のアドレス「17(H)」に転送される。これで、今回の移動命令が指示していた8ビットのデータ移動処理(R0[17(H):10(H)]←R1[117(H):110(H)])が完了する。一方、IG14のリピートカウンタ52のカウンタ値(残りリピート値)が1つディクリメントされて「1」になる。これにより、一致回路54の出力が論理値“1に変わる。

0089

一致回路54からの論理値“1の出力信号は、オアゲート62を介してプログラムカウンタ42にインクリメント・イネーブル信号として与えられるとともに、マイクロ命令レジスタ46、アドレスカウンタ48,50およびリピートカウンタ52に入力イネーブル信号として与えられる。

0090

≪クロックサイクル9≫9番目のクロックサイクルでも、プログラムメモリ40のメモリアドレス「10」から移動命令が読み出される(ステップA2)。しかし、この時、リピートカウンタ(RPT CNTR)52のカウント値が「1」になっているので、ステップA4に入り、命令形式の識別が行なわれる。この場合、移動命令はSIMD命令であるから、ステップA5の処理に入る。

0091

ステップA5において、IG14内では、メモリアドレス「10」の移動命令(inst)の命令コード部[10〜11,22〜39]が切換スイッチ56を介してマイクロ命令レジスタ(INST REG)46にクロック<PCLK>のタイミングでセットされる。また、この移動命令(inst)のアドレス部[0〜9],[12〜21]がそれぞれアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50にクロック<PCLK>のタイミングでセットされる。また、この移動命令(inst)のリピート値[42〜45]がリピートカウンタ(RPT CNTR)52にクロック<PCLK>のタイミングでセットされる。今回のリピート値[42〜45]は「8」であるから、一致回路54の出力が論理値“0”に変わる。

0092

SVPコア12の処理部18では、IG14のマイクロ命令レジスタ(INST REG)46およびアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50よりそれぞれ与えられるマイクロ命令<MICROINSTRUCTION>およびアドレス<ADDRESS>にしたがって1ビット単位の演算処理(図7のステップB2)が実行される。この結果、各プロセッシング・エレメントPEK内でレジスタ・ファイルRF0の初期アドレス「120(H)」に格納されている1ビットのデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF1の初期アドレス「20(H)」に転送される。

0093

次に、ステップA6において、プログラムカウンタ(PC)42が、アンドゲート60からの論理値“1”のインクリメント・イネーブル信号を受けており、カウンタ値(メモリアドレス)を1つインクリメントする。その結果、本例では、プログラムカウンタ(PC)42のカウンタ値(メモリアドレス)が「10」から「11」に更新される。

0094

≪クロックサイクル10≫10番目のクロックサイクルでは、ステップA2で、プログラムメモリ40のメモリアドレス「11」からJMP命令が読み出される。ステップA3ではリピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が「8」であるから、この場合もステップA7,A8の処理が選択される。

0095

ステップA7の処理において、IG14内では、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50のカウンタ値(アドレス)がそれぞれ1つインクリメントされるとともに、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が1つディクリメントされて「7」になる。各プロセッシング・エレメントPEK内では、レジスタ・ファイルRF0のアドレス「121(H)」に格納されている1ビットのデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF1のアドレス「21(H)」に転送される。

0096

ステップA8では、ステップA2でプログラムメモリ40より読み出されている命令(メモリアドレス「11」のJMP命令)がIG命令に属するものであることが判明する。

0097

次いで、ステップA10では、IG命令実行ユニット44がJMP命令を実行し、このJMP命令で指定された分岐先のメモリアドレス(本例では「5」)にプログラムカウンタ42のカウンタ値を更新する。

0098

≪クロックサイクル11≫11番目のクロックサイクルでは、ステップA2で、プログラムメモリ40のメモリアドレス「5」から加算命令が読み出される。本例のプログラム(図5)では、メモリアドレス「5,6,7」の3行にわたり、R1[28(H):20(H)]←R0[17(H):10(H)]+R1[27(H):20(H)]という内容、つまり各プロセッシング・エレメントPEKにおいてレジスタ・ファイルRF0のアドレス[17(H):10(H)]に格納されている8ビット・データとレジスタ・ファイルRF1のアドレス[27(H):20(H)]に格納されている8ビット・データとを加算し、最上位の桁上げを含む9ビットの加算結果をレジスタ・ファイルRF1のアドレス[28(H):20(H)]に格納するという加算演算を規定している。

0099

このうち、メモリアドレス「5」の加算命令は最下位1ビット分の加算演算を規定している。より詳細には、“RPT=1”は、この加算演算の繰り返し回数が1回であることを指示している。“M=1”は、各プロセッシング・エレメントPEK内のワーキングレジスタ[M]に “1”をセットすることを指示している。“A=R0(10)”は、レジスタ・ファイルRF0のアドレス「10(H)」に格納されている1ビットのデータをワーキングレジスタ[A]に与えることを指示している。“B=R1(20)”は、レジスタ・ファイルRF1のアドレス「20(H)」に格納されている1ビットのデータをワーキングレジスタ[B]に与えることを指示している。“C=0”はワーキングレジスタ[C]に“0”をセットすることを指示している。“R1(20)=SM”は、ALU24より出力される加算結果の和(SM)をレジスタ・ファイルRF1のアドレス「20(H)」に格納することを指示している。

0100

ステップA3では、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が「7」であるから、ステップA7,A8の処理が選択される。

0101

ステップA7の処理において、IG14内では、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50のカウンタ値(アドレス)がそれぞれ1つインクリメントされるとともに、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が1つディクリメントされて「6」になる。各プロセッシング・エレメントPEK内では、レジスタ・ファイルRF0のアドレス「122(H)」に格納されている1ビットのデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF1のアドレス「22(H)」に転送される。

0102

ステップA8の判定処理では、プログラムメモリ40より読み出されている命令(メモリアドレス「5」の加算命令)がSIMD命令に属するものであることが判明する。したがって、ステップA10に入ることなく、プログラムカウンタ42のカウンタ値を「5」に維持したまま、このクロックサイクルを終了する。

0103

≪クロックサイクル12〜15≫12〜15番目の各クロックサイクルでは、ステップA2でプログラムメモリ40のメモリアドレス「5」から上記加算命令が読み出され、ステップA3の判定を経てステップA7,A8の処理が選択される。

0104

ステップA7の処理において、IG14内では、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50のカウンタ値(アドレス)が各サイクル毎にそれぞれ1つインクリメントされるとともに、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が各サイクル毎に1つディクリメントされて「5」,「4」,「3」,「2」と変化する。処理部18の各プロセッシング・エレメントPEK内では、各サイクル毎に1ビットずつレジスタ・ファイルRF0のアドレス「123(H)」〜「126(H)」のデータがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF1のアドレス「23(H)」〜「26(H)」に転送される。

0105

各クロックサイクルでプログラムメモリ40より読み出された命令(メモリアドレス「5」の加算命令)がSIMD命令であるから、ステップA8からステップA10に入ることなく、プログラムカウンタ42のカウンタ値を「5」に維持したまま、各クロックサイクルを終了する。

0106

≪クロックサイクル16≫16番目のクロックサイクルでは、ステップA2で、プログラムメモリ40のメモリアドレス「5」から上記加算命令が読み出される。ステップA3ではリピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が「2」であるから、この場合もステップA7,A8の処理が選択される。

0107

ステップA7においては、IG14のアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50よりそれぞれ与えられるアドレス<ADDRESS>が1つインクリメントされることにより、SVPコア12の各プロセッシング・エレメントPEK内でレジスタ・ファイルRF0のアドレス「127(H)」の1ビット・データがワーキングレジスタ[A]およびALU24を介してレジスタ・ファイルRF1のアドレス「27(H)」に転送される。これで、今回の移動命令が指示していた8ビットのデータ移動処理(R1[27(H):20(H)]←R0[127(H):120(H)])が完了する。一方、IG14のリピートカウンタ52のカウンタ値(残りリピート値)が1つディクリメントされて「1」になる。これにより、一致回路54の出力が論理値“1となる。

0108

一致回路54からの論理値“1の出力信号は、オアゲート62を介してプログラムカウンタ42にインクリメント・イネーブル信号として与えられるとともに、マイクロ命令レジスタ46、アドレスカウンタ48,50およびリピートカウンタ52に入力イネーブル信号として与えられる。

0109

次に、ステップA8からステップA10に入ることなく、プログラムカウンタ42のカウンタ値を「5」に維持したまま、クロックサイクルを終了する。

0110

≪クロックサイクル17≫17番目のクロックサイクルでも、プログラムメモリ40においてメモリアドレス「5」の加算命令が読み出される(ステップA2)。しかし、この時、リピートカウンタ(RPT CNTR)52のカウント値が「1」になっているので、ステップA4に入り、命令形式の識別が行なわれる。この場合、移動命令はSIMD命令であるから、ステップA5の処理に入る。

0111

ステップA5において、IG14内では、メモリアドレス「5」の加算命令(inst)の命令コード部[10〜11,22〜39]が切換スイッチ56を介してマイクロ命令レジスタ(INST REG)46にクロック<PCLK>のタイミングでセットされる。また、この加算命令(inst)のアドレス部[0〜9],[12〜21]がそれぞれアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50にクロック<PCLK>のタイミングでセットされる。また、この加算命令(inst)のリピート値[42〜45]がリピートカウンタ(RPT CNTR)52にクロック<PCLK>のタイミングでセットされる。今回のリピート値[42〜45]は「1」であるから、一致回路54の出力は論理値“1”のままである。

0112

SVPコア12の処理部18では、IG14のマイクロ命令レジスタ(INST REG)46およびアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50よりそれぞれ与えられるマイクロ命令<MICROINSTRUCTION>およびアドレス<ADDRESS>にしたがって1ビット単位の演算処理(図8のステップC1)が実行される。この結果、各プロセッシング・エレメントPEK内でレジスタ・ファイルRF0のアドレス「10(H)」に格納されている1ビットのデータとレジスタ・ファイルRF1のアドレス「20(H)」に格納されている1ビットのデータとがALU24で加算され、その加算結果の和(SM)がレジスタ・ファイルRF1のアドレス「20(H)」に書き込まれる。

0113

次に、ステップA6において、プログラムカウンタ(PC)42が、一致回路54からの論理値“1”のインクリメント・イネーブル信号を受けており、カウンタ値(メモリアドレス)を1つインクリメントする。その結果、本例では、プログラムカウンタ(PC)42のカウンタ値(メモリアドレス)が「5」から「6」に更新される。

0114

≪クロックサイクル18≫18番目のクロックサイクルでは、プログラムメモリ40においてメモリアドレス「6」の加算命令が読み出される(ステップA2)。このメモリアドレス「6」の加算命令は、上記加算演算(R1[28(H):20(H)]←R0[17(H):10(H)]+R1[27(H):20(H)])の中で最下位1ビットを除く上位7ビット分の加算演算(R1[27(H):21(H)]←R0[17(H):11(H)]+R1[27(H):21(H)])を規定している。上記したメモリアドレス「5」の加算命令と相違しているのは、1ビット加算演算の回数つまり命令繰り返し回数(RPT)の値と、ワーキングレジスタ[C]に直前のサイクルでALU24より出力されている桁上げ(CY)をセットする点である。

0115

さて、ステップA3では、リピートカウンタ(RPT CNTR)52のカウント値が「1」になっているので、ステップA4が選択される。ステップA4では、メモリアドレス「6」の加算命令がSIMD命令であるから、ステップA5.A6の処理が選択される。

0116

ステップA5において、IG14内では、メモリアドレス「6」の加算命令(inst)の命令コード部[10〜11,22〜39]が切換スイッチ56を介してマイクロ命令レジスタ(INST REG)46にクロック<PCLK>のタイミングでセットされる。また、この加算命令(inst)のアドレス部[0〜9],[12〜21]がそれぞれアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50にクロック<PCLK>のタイミングでセットされる。また、この加算命令(inst)のリピート値[42〜45]がリピートカウンタ(RPT CNTR)52にクロック<PCLK>のタイミングでセットされる。今回のリピート値[42〜45]は「7」であるから、一致回路54の出力が論理値“0”に変わる。なお、ステップA5におけるIG14内の処理は図8のステップC2に相当する。

0117

処理部18では、IG14のマイクロ命令レジスタ(INST REG)46およびアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50よりそれぞれ与えられるマイクロ命令<MICROINSTRUCTION>およびアドレス<ADDRESS>にしたがって1ビット単位の演算処理(図8のステップC3)が実行される。この結果、各プロセッシング・エレメントPEK内でレジスタ・ファイルRF0のアドレス「11(H)」に格納されている1ビットのデータとレジスタ・ファイルRF1のアドレス「21(H)」に格納されている1ビットのデータとがALU24で加算され、その加算結果の和(SM)がレジスタ・ファイルRF1のアドレス「21(H)」に書き込まれる。

0118

次に、ステップA6において、プログラムカウンタ(PC)42がカウンタ値(メモリアドレス)を1つインクリメントして「7」に更新する。

0119

≪クロックサイクル19〜23≫19〜23番目の各クロックサイクルでは、プログラムメモリ40においてメモリアドレス「7」の加算命令が読み出される(ステップA2)。もっとも、ステップA3ではリピートカウンタ(RPT CNTR)52のカウント値が「6」〜「3」と変化し、まだ「1」にならないため、命令の種類に関係なくステップA7,A8の処理が選択される。

0120

ステップA7の処理において、IG14内では、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50のカウンタ値(アドレス)が各サイクル毎にそれぞれ1つインクリメントされるとともに、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が各サイクル毎に1つディクリメントされて「6」,「5」,「4」,「3」,「2」と逐次変化する。各プロセッシング・エレメントPEK内では、各サイクル毎に1ビットずつレジスタ・ファイルRF0のアドレス「12〜16(H)」のデータとレジスタ・ファイルRF1のアドレス「22〜26(H)」のデータとがALU24で加算され(図8のステップC3)、加算結果の和(SM)がレジスタ・ファイルRF1のアドレス「22〜26(H)」に書き込まれる。

0121

各クロックサイクルでプログラムメモリ40より読み出された命令(メモリアドレス「7」の加算命令)がSIMD命令であるから、ステップA8からステップA10に入ることなく、プログラムカウンタ42のカウンタ値を「7」に維持したまま、各クロックサイクルを終了する。

0122

≪クロックサイクル24≫24番目のクロックサイクルでも、プログラムメモリ40においてメモリアドレス「7」の加算命令が読み出される(ステップA2)。ステップA3では、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が「2」であるから、この場合もステップA7,A8の処理が選択される。

0123

ステップA7においては、IG14のアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50よりそれぞれ与えられるアドレス<ADDRESS>が1つインクリメントされることにより、SVPコア12の各プロセッシング・エレメントPEK内ではレジスタ・ファイルRF0のアドレス「17(H)」に格納されている1ビットのデータとレジスタ・ファイルRF1のアドレス「27(H)」に格納されている1ビットのデータとがALU24で加算され、その加算結果の和(SM)がレジスタ・ファイルRF1のアドレス「27(H)」に書き込まれる。これで、メモリアドレス「6」の加算命令が指示していた上位7ビットの加算演算(R1[27(H):21(H)]←R0[17(H):11(H)]+R1[27(H):21(H)])の処理が完了する。一方、IG14のリピートカウンタ52のカウンタ値(残りリピート値)が1つディクリメントされて「1」になる。これにより、一致回路54の出力が論理値“1となる。

0124

一致回路54からの論理値“1の出力信号は、オアゲート62を介してプログラムカウンタ42にインクリメント・イネーブル信号として与えられるとともに、マイクロ命令レジスタ46、アドレスカウンタ48,50およびリピートカウンタ52に入力イネーブル信号として与えられる。

0125

ステップA8では、ステップA10に入ることなく、プログラムカウンタ42のカウンタ値を「7」に維持したまま、このクロックサイクルを終了する。

0126

≪クロックサイクル25≫25番目のクロックサイクルでも、プログラムメモリ40においてメモリアドレス「7」の加算命令が読み出される(ステップA2)。このメモリアドレス「7」の加算命令は、上記8ビット加算演算(R1[28(H):20(H)]←R0[17(H):10(H)]+R1[27(H):20(H)])の中で最上位ビットの加算結果の桁上げ(CY)を全体の加算演算結果に含めるための演算を規定している。このため、加算演算の繰り返し回数(RPT)を1(回)とし、ワーキングレジスタ[A],[B]にそれぞれ“0”をセットするとともに、ワーキングレジスタ[C]にはALU24より直前に出力された桁上げ“CY”をセットすることを指示している。

0127

さて、ステップA3では、リピートカウンタ(RPT CNTR)52のカウント値が「1」になっているので、ステップA4が選択される。ステップA4では、メモリアドレス「7」の加算命令がSIMD命令であるから、ステップA5.A6の処理が選択される。

0128

ステップA5において、IG14内では、メモリアドレス「7」の加算命令(inst)の命令コード部[10〜11,22〜39]が切換スイッチ56を介してマイクロ命令レジスタ(INST REG)46にクロック<PCLK>のタイミングでセットされる。また、この加算命令(inst)のアドレス部[0〜9],[12〜21]がそれぞれアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50にクロック<PCLK>のタイミングでセットされる。また、この加算命令(inst)のリピート値[42〜45]がリピートカウンタ(RPT CNTR)52にクロック<PCLK>のタイミングでセットされる。今回のリピート値[42〜45]は「1」であるから、一致回路54の出力は論理値“1”のままである。

0129

処理部18では、IG14のマイクロ命令レジスタ(INST REG)46およびアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50よりそれぞれ与えられるマイクロ命令<MICROINSTRUCTION>およびアドレス<ADDRESS>にしたがって1ビット単位の演算処理(図8のステップC6)が実行される。この結果、各プロセッシング・エレメントPEK内でALU24より直前に出力されていた桁上げ(CY)が今回はそのままALU24の演算結果の和(SM)となって、レジスタ・ファイルRF1のアドレス「28(H)」に書き込まれる。これで、メモリアドレス「5,6,7」の加算命令が指示していた8ビット・データ同士の加算演算(R1[28(H):20(H)]←R0[17(H):10(H)]+R1[27(H):20(H)])の全演算処理が終了する。

0130

次に、ステップA6において、プログラムカウンタ(PC)42がカウンタ値(メモリアドレス)を1つインクリメントして「8」に更新する。

0131

≪クロックサイクル26≫次(26番目)のクロックサイクルでは、ステップA2で、プログラムメモリ40のメモリアドレス「8」よりEINT(Enable Interrupt)命令が読み出される。次いで、ステップA3で、リピートカウンタ(RPT CNTR)52のカウント値が「1」になっているので、ステップA4が選択される。ステップA4では、EINT命令がIG命令なので、ステップA9.A10の処理が選択される。すなわち、一致回路54より論理値“1”の入力イネーブル信号がマイクロ命令レジスタ46とリピートカウンタ52に与えられており、かつアンドゲート60からの論理値“1”の出力によってスイッチ56,58がそれぞれ入力端子aに切り換わるという条件が成立することで、ステップA9.A10の処理が行なわれる。

0132

ステップA9において、IG14内では、NOPコード<NOP>および残りリピート値<1>がクロック<PLCK>のタイミングでスイッチ56,58を介してマイクロ命令レジスタ46およびリピートカウンタ52にそれぞれロードされる。SVPコア12の処理部18内では、IG14のマイクロ命令レジスタ(INST REG)46より命令不実行を指示するNOPコード<NOP>を与えられるため、各プロセッシング・エレメントPEKは何の処理も行わず、動作停止状態となる。なお、NOP状態では、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50におけるアドレス<ADDRESS>は何ら意味をもたない。

0133

ステップA10では、IG14内のIG命令実行ユニット44がEINT命令を実行する。EINT命令は、ハードウェア・インタラプトが発生した場合に所定の分岐先へジャンプすることを指示する命令である。ここでは、ハードウェア・インタラプトが発生しなかったものとする。したがって、このEINT命令の実行によって、プログラムカウンタ42のカウンタ値(メモリアドレス)が1つインクリメントされて、「9」になる。

0134

≪クロックサイクル27≫次(27番目)のクロックサイクルにおいて、ステップA2で、プログラムメモリ40のメモリアドレス「9」よりJMP命令が読み出される。ステップA3では、リピートカウンタ(RPT CNTR)52のカウント値が「1」になっているので、ステップA4が選択される。ステップA4では、JMP命令がIG命令なので、ステップA9.A10の処理が選択される。

0135

ステップA9では、上記した26番目のクロックサイクルと同様に<NOP>処理が行なわれる。 ステップA10では、IG命令実行ユニット44がJMP命令を実行し、プログラムカウンタ42のカウンタ値(メモリアドレス)を指定された分岐先「0」に更新する。

0136

この分岐先のメモリアドレス「0」は本例のプログラム(図5)の先頭アドレスであり、しかもこの時点で或るSIMD命令がペンディングになっている(所定回数の繰り返しが済んでいない)わけでもない。したがって、次の28番目のクロックサイクル以降は上記(≪クロックサイクル1〜27≫)と同じ動作が繰り返される。

0137

このように、本実施例のSVP10においては、SVPコア12でSIMD命令の繰り返し処理が行われている最中にプログラムメモリ40よりIG命令が読み出されたときは、当該SIMD命令の繰り返し処理と並行して当該IG命令を実行するようにしたので、スループットを大幅に上げることができる。

0138

たとえば、上記したプログラム例において、≪クロックサイクル1〜8≫の期間中に、SVPコア12の各プロセッシング・エレメントPEKはSIMD命令に属するメモリアドレス「0」の移動命令(R0[17(H):10(H)]←R1[117(H):110(H)])を1クロックサイクル毎に1ビットずつ繰り返し実行する。一方、IG14内では、この期間内の≪クロックサイクル2〜5≫にかけて、プログラムメモリ40より読み出されたDINT命令、JFAZ命令、JFBZ命令およびJMP命令(いずれもIG命令)をIG命令実行ユニット44が逐一実行する。これにより、上記移動命令の処理を全て終了した後、次の≪クロックサイクル9≫でSVPコア12側は上記JMP命令で指示されているメモリアドレス「10」の移動命令(R1[27(H):20(H)]←R0[127(H):120(H)])の処理を開始することができる。

0139

従来のこの種のSVPであれば、SVPコア12側でメモリアドレス「0」の移動命令(R0[17(H):10(H)]←R1[117(H):110(H)])の処理が終了するまで、その次の命令であるDINT命令は待たされる。そして、該移動命令の終了後に、≪クロックサイクル9≫でメモリアドレス「1」の該DINT命令が実行される。次に、上記の例では、≪クロックサイクル10≫でメモリアドレス「2」の上記JFAZ命令が、≪クロックサイクル11≫でメモリアドレス「3」の上記JFBZ命令が、≪クロックサイクル12≫でメモリアドレス「4」の上記JMP命令が順次実行される。このようにIG命令の実行が続く期間≪クロックサイクル9〜12≫中、SVPコア12はNOPコード<NOP>を与えられ、実質的に動作停止状態となる。SVPコア12の処理が再開されるのは≪クロックサイクル13≫以降であり、本実施例と比較して4クロックサイクルの遅れを来すことになる。

0140

図9に、本発明の第2の実施例におけるIG14の要部の構成を示す。この第2の実施例は、上記した第1の実施例のIG14においてプログラムメモリ40とマイクロ命令レジスタ46、アドレスカウンタ48,50およびリピートカウンタ52との間にSIMD命令用バッファメモリとしてFIFO(First-In First-out)メモリ70を設けていることを主たる特徴とする。

0141

FIFOメモリ70は、データ入力端子IN、データ出力端子UT書き込みイネーブル端子WE、読み出しイネーブル端子RE、フル状態端子fullおよび空状態端子emptyを有しており、プログラムメモリ40より読み出された46ビットのプログラムデータ[0〜45]のうち命令形式識別データ[40,41]を除く44ビットのデータ[0〜39,42〜45]を条件的に先入れ先出し方式で所定の深さ(最大蓄積データ数)まで蓄積する。

0142

プログラムメモリ40より読み出されたデータ[0〜39,42〜45]がこのFIFOメモリ70に入力されるための条件は、アンドゲート60,74の出力が共に論理値“0”となり、アンドゲート74の出力端子より論理値“1”の信号が書き込みイネーブル端子WEに与えられることである。

0143

上記したように、アンドゲート60の出力が“1”になるのは、プログラムメモリ40より読み出された当該命令の命令識別データ[40,41]が(0,0)であるとき、つまり当該命令がSIMD命令のときである。

0144

アンドゲート72の出力が“0”になるのは、FIFOメモリ70のフル状態端子fullが論理値“0”のとき、つまりメモリ70がフル(満杯)状態ではないとき、あるいは一致回路54の出力が論理値“1”のとき、つまりリピートカウンタ52の残りリピート値が「1」のときである。後者のの場合は、後述するようにデータ読み出しが可能となり、先頭のデータがデータ出力端子OUTから出力されるため、それと入れ替わりにデータ入力端子INへのデータ入力(書き込み)が可能となる。

0145

FIFOメモリ70から蓄積データの中の先頭データが出力されるための条件は、アンドゲート76の出力端子より論理値“1”の信号が読み出しイネーブル端子REに与えられることである。アンドゲート76の出力が“1”になるのは、空状態端子emptyが論理値“0”になっており、つまりメモリ70が空(から)状態ではなく、かつ一致回路54の出力が論理値“1”のとき、つまりリピートカウンタ52の残りリピート値が「1」のときである。

0146

図10に、この第2の実施例におけるプログラム実行処理の手順を示す。初期化では、プログラムカウンタ(PC)42およびリピートカウンタ(RPTCNTR)52のカウンタ値を初期値「0」,「1」にそれぞれセットすることに加えて、FIFOメモリ70を空状態にする(ステップD1)。

0147

プログラム実行中の各クロックサイクルにおいて、最初にステップD2でプログラムカウンタ42のカウンタ値で指示されるメモリアドレスにてプログラムメモリ40より命令(inst)を読み出す。次いで、ステップD3でリピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)を判定し、それが「1」になっているときは、次のステップD4でFIFOメモリ70が空状態であるか否かで処理が分かれる。

0148

FIFOメモリ70が空状態であるとき、つまり空状態端子emptyが“1”になっているときは、ステップD5の処理が選択される。この場合、スイッチ56,58がそれぞれ端子bに切り換わっているため、マイクロ命令レジスタ46にNOPコード<NOP>がセットされるとともに、リピートカウンタ52には残りリピート値<1>がセットされる。これにより、SVPコア12の処理部18では各プロセッシング・エレメントPEKは何の処理も行わず、動作停止状態となる。

0149

ステップD4でFIFOメモリ70が空状態でないときは、ステップD6の処理が選択される。この場合、空状態端子emptyが“0”で、スイッチ56,58がそれぞれ端子aに切り換わる。また、一致回路52の出力が“1”であるため、アンドゲート76の出力端子より“1”の信号が読み取りイネーブル端子REに与えられる。そして、FIFOメモリ70のデータ出力端子OUTより出力されたデータ[0〜39,42〜45]のうち、SIMD命令コード部[10〜11,22〜39]がスイッチ56を介してマイクロ命令レジスタ46にセットされ、アドレス[0〜9],[12〜21]がアドレスカウンタ48,50にそれぞれセットされ、リピート値[42〜45]がスイッチ58を介してリピートカウンタ52にセットされる。

0150

次に、ステップD8で、プログラムメモリ40より読み出されている当該命令がIG命令なのか、それともSIMD命令なのか判定される。つまり、アンドゲート60の出力の値によって処理手順が分かれる。

0151

アンドゲート60の出力が“1”のとき(IG命令のとき)は、ステップD9でIG命令実行ユニット44が当該命令を実行する。このとき、アンドゲート72の出力は“0”で、FIFOメモリ70はデータ入力を禁止化される。

0152

アンドゲート60の出力が“0”のとき(SIMD命令のとき)は、アンドゲート72の出力は“1”で、FIFOメモリ70は書き込み可能となり、ステップD11で当該SIMD命令の命令形式識別データ[40,41]以外のデータ[0〜39,42〜45]がデータ入力端子INより入力される。

0153

一方、アンドゲート74の出力が“0”であるから、インバータ78の出力ひいてはオアゲート62の出力が“1”となり、この“1”の信号がインクリメントイネーブル信号としてプログラムカウンタ42に与えられ、メモリアドレスが1つインクリメントされる(ステップD12)。

0154

ステップD3でリピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)がまだ「1」になっていないとき、つまりSVPコア12の処理部18でSIMD命令に対する繰り返し実行回数がまだ規定回数に達していないときは、ステップD7の処理が選択される。このステップD7および後続のステップD8,D9は、上記した第1の実施例におけるステップA7,A8,A10と同様の処理内容となる。

0155

すなわち、ステップD7において、IG14内では、クロック<PCLK>のタイミングで、アドレスカウンタ(RF0AD REG)48,(RF0AD REG)50のカウンタ値(アドレス)がそれぞれ1つインクリメントされるとともに、リピートカウンタ(RPT CNTR)52のカウンタ値(残りリピート値)が1つディクリメントされる。SVPコア12の処理部18内では、IG14のマイクロ命令レジスタ(INSTREG)46およびアドレスカウンタ(RF0AD REG)48,(RF0AD REG)50よりそれぞれ与えられるマイクロ命令<MICROINSTRUCTION>およびアドレス<ADDRESS>にしたがって1ビット単位の演算処理が実行される。次に、ステップD8において、ステップD2でプログラムメモリ40より読み出された命令(inst)がSIMD命令なのかIG命令なのかが判定される。IG命令であるときは、次にステップD9でIG命令実行ユニット44により当該IG命令が実行される。

0156

しかし、SIMD命令であるときは、上記第1実施例とは異なり(そのまま当該クロックサイクルを終了するのではなく)、ステップD10に入る。そして、FIFOメモリ70がフル状態でなければ、当該SIMD命令の命令形式識別データ[40,41]以外のデータ[0〜39,42〜45]がFIFOメモリ70に入力され(ステップD11)、プログラムカウンタ42のカウンタ値(メモリアドレス)が1つインクリメントされる(ステップD12)。

0157

このように、この第2の実施例においては、処理部18で或るSIMD命令の繰り返し実行処理が終了する前にプログラムメモリ40より他のSIMD命令が読み出されたときは、FIFOメモリ70のその時の空き容量が許す限り後者のSIMD命令をFIFOメモリ70に格納し、次のメモリアドレスに進むようになっている。したがって、次のメモリアドレスでIG命令がプログラムメモリより読み出されたときは、該IG命令をSIMD命令の繰り返し実行と並行して実行することができるので、スループットを一層向上させることができる。

0158

図11および図12に、この第2の実施例によるSVP10で図5のプログラム例を実行する場合の各クロックサイクル毎の各部のステータスまたは動作を示す。

0159

最初のクロックサイクルでは、ステップD2→D3→D4→D5→D8→D11→D12の処理が行なわれる。特に、ステップD11では、プログラムメモリ40より読み出されたメモリアドレス「0」の移動命令(正確にはこの移動命令の命令コード部およびアドレス)がFIFOメモリ70に格納される。ステップD5で処理部18はNOP命令<NOP>を与えられるため実質的には動作しない。

0160

2番目のクロックサイクルでは、ステップD2→D3→D4→D6→D8→D9の処理が行なわれる。特に、ステップD6では、上記移動命令の命令コード部およびアドレスがFIFOメモリ70より読み出されてマイクロ命令レジスタ46およびアドレスカウンタ48,50にそれぞれセットされ、処理部18の各プロセッシング・エレメントPEKは上記移動命令(1回目)を実行する。ステップD9では、IG命令実行ユニット44がプログラムメモリ40より読み出されているメモリアドレス「1」のDINT命令を実行する。

0161

3〜5番目のクロックサイクルでは、ステップD2→D3→D7→D8→D9の処理が選択され、上記した第1実施例における3〜5番目のクロックサイクルと同様の処理動作が行なわれる。すなわち、処理部18の各プロセッシング・エレメントPEKが上記移動命令を2,3,4回目と順次実行し、同時にIG命令実行ユニット44がプログラムメモリ40より読み出されたメモリアドレス「2」,「3」,「4」のDINT命令、JFAZ命令、JFBZ命令を順次実行する。

0162

6番目のクロックサイクルでは、ステップD2→D3→D7→D8→D10→D11→D12の処理が行なわれる。特に、ステップD11では、プログラムメモリ40より読み出されたメモリアドレス「10」の移動命令がFIFOメモリ70に格納される。そして、ステップD12で、アドレスカウンタ(PC)42のカウンタ値(メモリアドレス)がインクリメントされて「11」になる。

0163

7番目のクロックサイクルでは、ステップD2→D3→D7→D8→D9の処理が行なわれる。ステップD9では、IG命令実行ユニット44がプログラムメモリ40より読み出されたメモリアドレス「11」のJMP命令を実行する。上記した第1の実施例では10番目のクロックサイクルでメモリアドレス「11」のJMP命令が実行されるのに対して、本実施例では7番目のクロックサイクルで同JMP命令が実行される。

0164

8番目のクロックサイクルでは、ステップD2→D3→D7→D8→D10→D11→D12の処理が行なわれる。特に、ステップD11では、プログラムメモリ40より読み出されたメモリアドレス「5」の加算命令がFIFOメモリ70に格納される。

0165

9番目のクロックサイクルでは、ステップD2→D3→D7→D8→D10(終り)の処理が行なわれる。ステップD10では、FIFOメモリ70がフル状態にあるため、プログラムメモリ40より読み出されたメモリアドレス「6」の加算命令はFIFOメモリ70に格納されない。したがって、アドレスカウンタ(PC)42のカウンタ値(メモリアドレス)は「6」のままである。しかし、ステップD7で、メモリアドレス「0」の移動命令に対する処理部18の繰り返し実行処理が終了し、リピートカウンタ(RPT cntr)52のカウンタ値(残りリピート値)が「1」になる。

0166

10番目のクロックサイクルでは、ステップD2→D3→D4→D6→D8→D11→D12の処理が行なわれる。ステップD6では、メモリアドレス「10」の移動命令がFIFOメモリ70より読み出されてマイクロ命令レジスタ46およびアドレスカウンタ48,50にセットされ、処理部18の各プロセッシング・エレメントPEKは上記移動命令(1回目)を実行する。ステップD11では、上記移動命令と入れ替わりに今回プログラムメモリ40より読み出されたメモリアドレス「6」の加算命令がFIFOメモリ70に格納される。

0167

11〜17番目のクロックサイクルでは、ステップD2→D3→D7→D8→D10(終り)の処理が行なわれる。

0168

18番目のクロックサイクルでは、ステップD2→D3→D4→D6→D8→D10→D11→D12の処理が選択される。ステップD6では、メモリアドレス「5」の加算命令がFIFOメモリ70より読み出されてマイクロ命令レジスタ46およびアドレスカウンタ48,50にセットされ、処理部18の各プロセッシング・エレメントPEKは上記加算命令を実行する。ステップD11では、上記メモリアドレス「5」の加算命令と入れ替わりに今回プログラムメモリ40より読み出されたメモリアドレス「7」の加算命令がFIFOメモリ70に格納される。

0169

19番目のクロックサイクルでは、ステップD2→D3→D4→D6→D8→D9の処理が行なわれる。ステップD6では、メモリアドレス「6」の加算命令がFIFOメモリ70より読み出されてマイクロ命令レジスタ46およびアドレスカウンタ48,50にセットされ、処理部18の各プロセッシング・エレメントPEKは上記加算命令を実行する。ステップD9では、IG命令実行ユニット44がプログラムメモリ40より読み出されているメモリアドレス「8」のEINT命令を実行する。

0170

20番目のクロックサイクルでは、ステップD2→D3→D7→D8→D9の処理が行なわれる。ステップD7では、メモリアドレス「6」の加算命令について処理部18の各プロセッシング・エレメントPEKが2回目の加算演算を実行する。ステップD9では、IG命令実行ユニット44がプログラムメモリ40より読み出されているメモリアドレス「9」のJMP命令を実行する。

0171

上記した第1の実施例では26,27番目のクロックサイクルでメモリアドレス「8」,「9」のEINT命令,JMP命令が実行されるのに対して、本実施例では19,20番目のクロックサイクルで同命令が実行される。しかも、IG命令実行ユニット44がこれらのEINT命令,JMP命令を実行する時、第1の実施例では処理部18がNOP命令を受けて一時停止状態となるのに対して、本実施例では処理部18がマイクロ命令レジスタ46およびアドレスカウンタ48,50からのマイクロ命令およびアドレスを受け取ってSIMD命令(メモリアドレス「6」の加算命令)の繰り返し実行を継続する。これにより、処理部18の稼動率が一層向上する。

0172

21番目以降のクロックサイクルにおける動作は、上述した説明と図12から容易に理解できるので、説明を省略する。

0173

なお、非SIMD命令であっても、SIMD命令の実行シーケンスと同期をとった方が好ましい場合もある。たとえば、DINT命令(割込み禁止命令)やEINT命令(割込み許可命令)においてハードウェア・インタラプトの有無を判定するステップまたはタイミングをSIMD命令の実行シーケンスに同期させたい場合もある。その場合は、そのような同期型の非SIMD命令(DINT,EINT)をいったんFIFO70に蓄積し、FIFO70から読み出した時点で該非SIMD命令の検出と実行を行うようにすればよい。このアプリケーションでは、図13に示すように、FIFO70のデータ出力端子OUTより出力されるデータの中から同期型の非SIMD命令(DINT,EINT)を検出してSIMD命令実行ユニット44へ伝える回路79が設けられる。

0174

図14に、本発明においてプログラムメモリ40の所要記憶容量を小さくするための一実施例を示す。プログラムメモリ40には、本SVP10の処理動作に必要なプログラムが蓄積される。上記したように、プログラムを構成する個々の命令(プログラムデータ)は、たとえば46ビット[0〜45]からなり、そのうち[40,41]の2ビット・データが当該命令の形式つまりSIMD命令なのか、IG命令なのかを表す。そして、SIMD命令の場合は、[0〜9]、[12〜21]の各10ビット・データが各プロセッシング・エレメントPEKにおけるレジスタ・ファイルRF0,RF1内の初期アドレスをそれぞれ表し、[10〜11、22〜39]の20ビット・データが当該SIMD命令の命令コード部を構成し、[42〜45]の4ビット・データが当該SIMD命令のリピート値(繰り返し回数)を表す。

0175

命令コード部[10〜11、22〜39]はそのままマイクロ命令としてSVPコア12に与えられるため、20ビットものデータ長を有している。20ビットデータの場合、220 (=1048574)通りのデータ値が可能である。しかし、実際のSVPにおいて命令の種類は通常200以下である。

0176

かかる実情に鑑みて、この実施例では、命令コード部[10〜11、22〜39]をたとえば8ビットのデータ(d0〜d7)にコード化したものをプログラムメモリ40に蓄積し、プログラムメモリ40より出力した8ビットの各コード・データ(d0〜d7)をデコーダ80で20ビットのデータつまり本来の命令コード部[10〜11、22〜39]に展開復号)するようにしている。デコーダ80は、たとえばROMまたはRAMからなるルックアップ・テーブルで実現することができる。プログラムメモリ40においては、各命令の命令コード部が8ビット幅であるから、20ビット幅の場合よりも所要記憶容量が小さくなる。

0177

デコーダ80は、SIMD命令実行部とIG命令実行部とで共用することも可能であり、あるいは別々に設けられてもよい。別々の場合、SIMD命令実行部においては、マイクロ命令レジスタ46の後段にデコーダ80を配置することができる。これにより、マイクロ命令レジスタ46やFIFOメモリ70等のビット幅を小さくすることができる。

0178

図14の例では、プログラムデータ[0〜45]のうち命令コード部[10〜11、22〜39]だけをコード化したが、必要に応じて他のデータ部分(たとえばアドレス部分)をコード化することも可能である。

0179

上記した実施例はSVPに係るものであったが、本発明は他の形式のSIMD型並列プロセッサにも適用可能であり、さらには1つの命令を複数のクロックサイクルにわたって繰り返し実行する機能を備えた任意のプロセッサに適用可能である。

発明の効果

0180

以上説明したように、本発明のプロセッサによれば、1つの命令を複数のクロックサイクルにわたって繰り返し実行する方式において繰り返し実行処理部の稼動率を高め、処理性能を向上させることができる。また、命令をコード化してプログラムメモリに蓄積することで、プログラムメモリの所要記憶容量を小さくすることができる。

図面の簡単な説明

0181

図1本発明の一実施例によるSIMD型並列プロセッサの構成を示すブロック図である。
図2実施例におけるSVPコアの内部の作用を概略的に説明するための図である。
図3第1の実施例における命令発行部(IG)の要部の構成を示すブロック図である。
図4実施例のSVPにおけるプログラム実行処理の手順を示すフローチャートである。
図5実施例のSVPで実施可能なプログラムの例を示すプログラムリストである。
図6実施例のSVPでプログラム例を実行する場合の各クロックサイクル毎のSVP内の各部のステータスまたは動作を示す図である。
図7実施例のSVPにおける移動命令の処理手順を示すフローチャートである。
図8実施例のSVPにおける加算命令の処理手順を示すフローチャートである。
図9第2の実施例における命令発行部(IG)の要部の構成を示すブロック図である。
図10第2の実施例のSVPにおけるプログラム実行処理の手順を示すフローチャートである。
図11第2の実施例のSVPでプログラム例を実行する場合の各クロックサイクル毎のSVP内の各部のステータスまたは動作を示す図である。
図12第2の実施例のSVPでプログラム例を実行する場合の各クロックサイクル毎のSVP内の各部のステータスまたは動作を示す図である。
図13第2の実施例において同期型の非SIMD命令(DINT,EINT)をSIMD命令と同期して実行する変形例の要部の構成を示すブロック図である。
図14本発明においてプログラムメモリの所要記憶容量を小さくするための一実施例を示す図である。

--

0182

10SVP
12 SVPコア
14命令発行部(IG)
18ディジタル信号処理部
40プログラムメモリ
42プログラムカウンタ
44 IG命令実行ユニット
46マイクロ命令レジスタ
48,50アドレスカウンタ
52リピータカウンタ
54一致回路
56,58 スイッチ
70FIFOメモリ
80 デコーダ

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い技術

関連性が強い 技術一覧

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

関連する公募課題一覧

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ