Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
CALCULATION UNIT, PROCESSOR, AND PROCESSOR ARCHITECTURE
Document Type and Number:
WIPO Patent Application WO/2008/142750
Kind Code:
A1
Abstract:
A calculation unit(17)for performing a predetermined digit length calculation in the execution stage of a processor (1) comprises a plurality of partial calculation units (201 to 204) for executing calculations provided by dividing the predetermined digit length calculation in a digit direction in different pipe line stages, respectively and a plurality of pipe line registers (211 to 213), (221 to 227), (231 to 237), and (241 to 246) separating the pipe line stages, respectively. Each of the pipe line registers (211 to 213), (221 to 227), (231 to 237), and (241 to 246) operates switchably between two operation modes, a flip flop mode for being synchronized with an input trigger and updating an output value and a transparent mode for directly outputting an input value.

Inventors:
YOSHIZAWA HIDEKI (JP)
Application Number:
PCT/JP2007/060161
Publication Date:
November 27, 2008
Filing Date:
May 17, 2007
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
FUJITSU LTD (JP)
YOSHIZAWA HIDEKI (JP)
International Classes:
G06F9/38
Domestic Patent References:
WO2005091130A22005-09-29
Foreign References:
JPH04238533A1992-08-26
JPS60123930A1985-07-02
JP2003216416A2003-07-31
JPS54143036A1979-11-07
JP2005011324A2005-01-13
JP2004102988A2004-04-02
US20050251645A12005-11-10
Other References:
See also references of EP 2148272A4
Attorney, Agent or Firm:
AOKI, Atsushi et al. (Toranomon 37 Mori Bldg. 5-1,Toranomon 3-chome, Minato-k, Tokyo 23, JP)
Download PDF:
Claims:
 プロセッサの実行ステージにおいて所定桁長の演算を行う演算ユニットであって、
 前記所定桁長の演算を桁方向に分割した各演算をそれぞれ異なるパイプラインステージにおいて実行する複数の部分演算ユニットと、
 各前記パイプラインステージ間を各々区切る複数のパイプラインレジスタと、
 を備えることを特徴とする演算ユニット。
 前記パイプラインレジスタは、入力トリガに同期して出力値を更新するフリップフロップモードと、入力値をそのまま出力するトランスペアレントモードと、2つの動作モード間で切り替え可能に動作することを特徴とする請求項1に記載の演算ユニット。
 請求項1に記載の演算ユニットを備え、該演算ユニットにより実行ステージにおける前記所定桁長の演算を行うプロセッサであって、
 前記部分演算ユニットの演算桁長は、前記所定桁長の演算をN(Nは2以上の整数)等分した桁長であり、
 前記所定桁長の演算1つに使用する期間の1/N倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック生成部を備える、
 ことを特徴とするプロセッサ。
 請求項2に記載の演算ユニットを備え、該演算ユニットにより実行ステージにおける前記所定桁長の演算を行うプロセッサであって、
 前記部分演算ユニットの演算桁長は、前記所定桁長の演算をN(Nは2以上の整数)等分した桁長であり、
 前記所定桁長の演算1つに使用する期間の1/N倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック制御部と、
 前記約数に応じて、各前記パイプラインレジスタの動作モードを前記フリップフロップモード及び前記トランスペアレントモードのいずれかにそれぞれ切り替えるパイプラインレジスタ制御部と、
 を備えることを特徴とするプロセッサ。
 前記クロック制御部は、前記フェッチステージでフェッチされた命令に含まれる演算実行数に応じて前記約数を選択することを特徴とする請求項4に記載のプロセッサ。
 複数の演算命令を同時に発行するディスパッチ部を備え、
 前記クロック制御部は、前記ディスパッチ部により同時に発行される演算数に応じて前記約数を選択することを特徴とする請求項4に記載のプロセッサ。
 演算ユニットと、該演算ユニットへのオペランド及び該演算ユニットの演算結果を保持するレジスタファイルとを備え、該演算ユニットにより実行ステージにおける所定桁長の演算を行うプロセッサのプロセッサアーキテクチャであって、
 前記演算ユニットを、前記所定桁長の演算を桁方向にN個(Nは2以上の整数)に分割した各演算をそれぞれ異なるパイプラインステージにおいて実行する部分演算ユニットと、各前記パイプラインステージ間を区切るパイプラインレジスタと、により構成し、
 前記レジスタファイルは、前記所定桁長の演算1つに使用する期間内にN回読み書き可能なアクセスレーテンシを有する記憶素子で構成する、
 ことを特徴とするプロセッサアーキテクチャ。
 前記パイプラインレジスタを、入力トリガに同期して出力値を更新するフリップフロップモードと、入力値をそのまま出力するトランスペアレントモードと、2つの動作モード間で切り替え可能に動作する記憶素子で構成することを特徴とする請求項7に記載のプロセッサアーキテクチャ。
 前記部分演算ユニットの演算桁長を、前記所定桁長の演算をN等分した桁長とし、
 前記所定桁長の演算1つに使用する期間の1/N倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック制御部を、前記プロセッサに設ける、
 ことを特徴とする請求項7に記載のプロセッサアーキテクチャ。
 前記部分演算ユニットの演算桁長を、前記所定桁長の演算をN等分した桁長とし、
 前記プロセッサに、
 前記所定桁長の演算1つに使用する期間の1/N倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック制御部と、
 前記約数に応じて、各前記パイプラインレジスタの動作モードを前記フリップフロップモード及び前記トランスペアレントモードのいずれかにそれぞれ切り替えるパイプラインレジスタ制御部と、
 を設けることを特徴とする請求項7に記載のプロセッサアーキテクチャ。
 前記クロック制御部は、前記フェッチステージでフェッチされた命令に含まれる演算実行数に応じて、前記約数を選択することを特徴とする請求項10に記載のプロセッサアーキテクチャ。
 前記プロセッサに、複数の演算命令を同時に発行するディスパッチ部を設け、
 前記クロック制御部は、前記ディスパッチ部により同時に発行される演算数に応じて、前記約数を選択することを特徴とする請求項10に記載のプロセッサアーキテクチャ。
Description:
演算ユニット、プロセッサ及び ロセッサアーキテクチャ

 本発明は、複数の命令を並列して実行可 なプロセッサの構成技術に関する。

 同時に複数の命令を実行することによって 理能力を向上させたプロセッサとして、VLIW (超長形式機械命令:Very Long Instruction Word)プ セッサや、スーパースカラプロセッサが知 れている。
 図1は、従来のVLIWプロセッサの概略構成図 ある。VLIWプロセッサ900は、命令フェッチス ージ(IF)において命令メモリ901からVLIW命令 フェッチするフェッチユニット902と、命令 コードステージ(ID)においてVLIW命令を複数の 算術論理演算命令へデコードするデコーダ911 ~914と、実行ステージ(EX)においてこれら複数 算術論理演算命令を実行する複数の算術論 演算ユニット(ALU)921~924と、書き込みステー (WB)において演算結果を記憶するレジスタ930 とを備えている。

 図2は、従来のスーパースカラプロセッサ の概略構成図である。スーパースカラプロセ ッサ940は、命令フェッチステージと命令デコ ードステージとの間に命令ディスパッチャ941 を備えている。命令ディスパッチャ941は、演 算ユニット921~924の使用状況に応じて命令実 数や、演算ユニット921~924への命令の割り当 を動的に変更する。

 なお下記特許文献1には、入出力インター フェースを変更することができる複数の処理 ユニットを用いて、独立して動作可能な複数 のデータパスを構成するデータ処理装置が開 示されている。

特開2004-102988号公報

 上記のVLIWプロセッサやスーパースカラプロ セッサのような、複数の命令を並列に実行す るプロセッサには、並列に実行することが起 こりえる命令数の最大値と同じ数の算術論理 演算ユニットを設ける必要があった。
 しかしながら、予め用意された数の算術論 演算ユニットを全て使用する機会は少なく 通常の場合はいくつかの算術論理演算ユニ トは使用されないかまたはNOP命令を実行し いた。このため次のような無駄が生じてい 。

 第1に、レジスタファイルや記憶手段と算 術論理演算ユニットとの間を接続するデータ パスは、用意された算術論理演算ユニットが 全て同じレジスタや同じメモリアドレスへ接 続できる接続自由度を有する必要がある。一 般にチップ面積は、回路規模よりも配線面積 や記憶素子面積によって支配的に決定された め、算術論理演算ユニットの実装数が増加す るとデータパスの配線面積は急激に増加する 。したがって使用頻度が低い算術論理演算ユ ニットが実装されていると無駄にチップ面積 を増加させることになる。

 第2に、使用されていない算術論理演算ユニ ットも電力を消費する。したがって使用頻度 が低い算術論理演算ユニットが実装されてい ると、無駄な電力消費を発生させることにな る。
 これらの問題点に鑑み、本発明は、プロセ サにおける配線面積と消費電力とを削減す ことを目的とする。

 上記目的を達成するために、本発明では、 ロセッサの実行ステージにおいて行われる 術演算又は論理演算などの演算を桁方向に 割することにより複数の部分的な演算に分 る。そして、これら複数の部分的演算を異 るパイプラインステージにおいて実行する イプライン処理を行う。
 このため本発明の第1形態による演算ユニッ トは、プロセッサの実行ステージにおいて所 定桁長の演算を行う演算ユニットであって、 所定桁長の演算を桁方向に分割した各演算を それぞれ異なるパイプラインステージにおい て実行する複数の部分演算ユニットと、各パ イプラインステージ間を各々区切る複数のパ イプラインレジスタと、を備える。

 演算を分割してパイプライン処理によって 行することにより、単一の演算ユニットで 数の演算を並列して行うことが可能となる このため従来のプロセッサよりも少ない数 演算ユニットを用いて複数の演算を並列に 算を行うことができ、レジスタファイルや 憶手段と演算ユニットとを結ぶデータパス 配線を低減することができる。
 すなわち従来のプロセッサでは、複数の演 ユニットとレジスタファイル等との間にそ ぞれ個別に設けられたデータパスが、各演 ユニットが1つの演算を行う周期(以下、「 本周期」と示す)の間ずっと占有されていた ころ、本発明によれば、1つの演算ユニット がパイプライン処理により複数の演算を並列 に実行するので、これら演算のためにそれぞ れ行われるレジスタファイル等へアクセスが 異なるタイミングで生じる。つまり、本発明 によれば、並列に実行される複数の演算にお いてそれぞれ行われるレジスタファイル等へ アクセスが1つの基本周期の中で時分割多重 されるので、これら複数の演算の間で1つの ータパスを共用することができる。

 パイプラインレジスタは、入力トリガに 期して出力値を更新するフリップフロップ ードと、入力値をそのまま出力するトラン ペアレントモードと、からなる2つの動作モ ード間で切り替え可能に動作する記憶素子で 構成してよい。このようにパイプラインレジ スタを構成することにより、演算ユニットが 実行するパイプライン処理のパイプライン段 数を変更することができるようになる。これ によって、演算ユニットが並列して実行する 命令数を加減し、必要最低限の実行命令数で 処理することにより消費電力を節約すること ができる。

 本発明の第2形態によれば、第1形態の演 ユニットにより実行ステージにおける所定 長の演算を行うプロセッサが提供される。 こで、部分演算ユニットの演算桁長は、所 桁長の演算をN(Nは2以上の整数)等分した桁長 であり、プロセッサは、所定桁長の演算に使 用する期間の1/N倍の長さの周期を有する動作 周波数のN倍の動作周波数でパイプラインス ージを動作させるクロック生成部を備える

 本発明の第3形態によれば、演算ユニット により実行ステージにおける所定桁長の演算 を行うプロセッサのプロセッサアーキテクチ ャが提供される。本アーキテクチャでは、演 算ユニットを、所定桁長の演算を桁方向に分 割した各演算をそれぞれ異なるパイプライン ステージにおいて実行する部分演算ユニット と、各パイプラインステージ間を区切るパイ プラインレジスタと、により構成し、演算ユ ニットへのオペランド及び演算ユニットの演 算結果を記憶する記憶手段を、所定桁長の演 算に使用する期間の1/N倍の長さの周期を有す る動作周波数の整数倍の速度で動作するパイ プラインステージがアクセス可能なアクセス レーテンシの記憶素子で構成する。

 本発明により、プロセッサにおける配線 積と消費電力とが削減される。したがって 特に、携帯電話用LSI等といった省電力であ ことが要求されるLSIや、低コストの電子部 において、本発明による演算ユニットやプ セッサを好適に利用できる。

従来のVLIWプロセッサの概略構成図であ る。 従来のスーパースカラプロセッサの概 構成図である。 従来の演算ユニットの模式図である。 本発明による演算ユニットの基本構成 である。 図4に示すパイプラインレジスタの概略 構成図である。 並列数が1のときの演算ユニットの動作 のタイムチャートである。 並列数が2のときの演算ユニットの動作 のタイムチャートである。 並列数が4のときの演算ユニットの動作 のタイムチャートである。 本発明によるプロセッサの基本動作を す模式図である。 本発明によるVLIWプロセッサの実施例 示す概略構成図である。 命令メモリ、プログラムカウンタ制御 部、命令バッファ、メインデコーダ、演算部 、WRデコーダ及びクロック制御部の間の接続 係を示す図である。 メインデコーダ、レジスタユニット、 LSデコーダ、データメモリ、アドレス演算器 演算部及びクロック制御部の間の接続関係 示す図である。 演算部、WRレコーダ、プログラムカウ タ制御部、データメモリ及びクロック制御 の間の接続関係を示す図である。 プログラムカウンタ制御部の概略構成 図である。 メインデコーダの概略構成図である。 本プロセッサにより解読される命令の 種類を例示する図である。 シングル命令デコード部によるデコ ドの説明図(その1)である。 シングル命令デコード部によるデコ ドの説明図(その2)である。 並列命令デコード部によるデコード 説明図(その1)である。 並列命令デコード部によるデコード 説明図(その2)である。 レジスタユニットの概略構成図である 。 演算部の概略構成図である。 クロック制御部の概略構成図である。 並列数が1から4に変化する際のフェッ 段におけるプロセッサの動作を示すタイム ャートである。 並列数が1から4に変化する際のデコー 段におけるプロセッサの動作を示すタイム ャートである。 並列数が1から4に変化する際の実行段 おけるプロセッサの動作を示すタイムチャ トである。 並列数が1から4に変化する際の信号Ckw BranchCntrlの変化を示すタイムチャートであ 。 図21に示すクロックインバータ140の概 構成図である。 図26に示すクロックインバータ140の状 遷移図である。 図21に示すクロックインバータ140の内 状態を示すタイムチャートである。 図21に示すクロックインバータ141~143の 内部状態を示すタイムチャートである。 図21に示すクロックインバータ142、143 内部状態を示すタイムチャートである。 図21に示すクロックインバータ151の概 構成図である。 図21に示すクロックインバータ151の状 遷移図である。 並列数が1から4に変化する際のクロッ インバータ151の内部状態を示すタイムチャ トである。 図21に示すクロックインバータ152の状 遷移図である。 並列数が1から4に変化する際のクロッ インバータ152の内部状態を示すタイムチャ トである。 図21に示すクロックインバータ153の状 遷移図である。 並列数が1から4に変化する際のクロッ インバータ153及び154の内部状態を示すタイ チャートである。 図21に示すクロックインバータ154の状 遷移図である。 図21に示すモード切替信号生成部161の 略構成図である。 図21に示すモード切替信号生成部161の 態遷移図である。 並列数が1から4に変化する際のモード 替信号生成部161の内部状態を示すタイムチ ートである。 図21に示すモード切替信号生成部162の 態遷移図である。 図21に示すモード切替信号生成部163の 態遷移図である。 並列数が1から4に変化する際のモード 替信号生成部162及び163の内部状態を示すタ ムチャートである。 並列数が1から2に変化する際のフェッ 段におけるプロセッサの動作を示すタイム ャートである。 並列数が1から2に変化する際のデコー 段におけるプロセッサの動作を示すタイム ャートである。 並列数が1から2に変化する際の実行段 おけるプロセッサの動作を示すタイムチャ トである。 並列数が1から2に変化する際のクロッ インバータ151の内部状態を示すタイムチャ トである。 並列数が1から2に変化する際のクロッ インバータ152の内部状態を示すタイムチャ トである。 並列数が1から2に変化する際のクロッ インバータ153及び154の内部状態を示すタイ チャートである。 並列数が1から2に変化する際のモード 替信号生成部161の内部状態を示すタイムチ ートである。 並列数が1から2に変化する際のモード 替信号生成部162及び163の内部状態を示すタ ムチャートである。 並列数が4から1に変化する際のフェッ 段におけるプロセッサの動作を示すタイム ャートである。 並列数が4から1に変化する際のデコー 段におけるプロセッサの動作を示すタイム ャートである。 並列数が4から1に変化する際の実行段 おけるプロセッサの動作を示すタイムチャ トである。 並列数が4から1に変化する際のクロッ インバータ151の内部状態を示すタイムチャ トである。 並列数が4から1に変化する際のクロッ インバータ152の内部状態を示すタイムチャ トである。 並列数が4から1に変化する際のクロッ インバータ153及び154の内部状態を示すタイ チャートである。 並列数が4から1に変化する際のモード 替信号生成部161の内部状態を示すタイムチ ートである。 並列数が4から1に変化する際のモード 替信号生成部162及び163の内部状態を示すタ ムチャートである。 並列数が2から4に変化する際のフェッ 段におけるプロセッサの動作を示すタイム ャートである。 並列数が2から4に変化する際のデコー 段におけるプロセッサの動作を示すタイム ャートである。 並列数が2から4に変化する際の実行段 おけるプロセッサの動作を示すタイムチャ トである。 並列数が2から4に変化する際のクロッ インバータ151の内部状態を示すタイムチャ トである。 並列数が2から4に変化する際のクロッ インバータ152の内部状態を示すタイムチャ トである。 並列数が2から4に変化する際のクロッ インバータ153及び154の内部状態を示すタイ チャートである。 並列数が2から4に変化する際のモード 替信号生成部161の内部状態を示すタイムチ ートである。 並列数が2から4に変化する際のモード 替信号生成部162及び163の内部状態を示すタ ムチャートである。 本発明によるスーパースカラプロセッ サの実施例を示す概略構成図である。

符号の説明

 201~204  部分演算ユニット
 211~219、221~228、231~237  パイプラインレジス タ

 図3~図9を参照して、本発明による演算ユ ットの基本動作を説明する。図3は、所定桁 長であるMビットの演算を行う従来の演算ユ ットの模式図であり、図4は図3に示す演算ユ ニットと同じ桁長の演算を行う本発明による 演算ユニットの基本構成図である。図3に示 演算ユニットは、各々Mビットの第1入力デー タA及び第2入力データBと演算コードとを入力 して、これらMビットのデータA及びBの間にお いて、演算コードによって指定される算術演 算又は論理演算を行い、Mビットの演算結果S キャリー等の発生を示すフラグFを出力する 。

 図4に示す本発明による演算ユニット200は、 各々Mビットの第1入力データA及び第2入力デ タBと演算コードとを入力して、これらMビッ トのデータA及びBの間において、演算コード よって指定される算術演算又は論理演算を い、Mビットの演算結果Sとキャリー等の発 を示すフラグFを出力する。
 演算ユニット200は、Mビット演算を桁方向に 分割した部分的な演算を各々行う第1~第4の部 分演算ユニット201~204を備える。図4に示す構 例では、Mビット演算を桁方向に4つに分割 、それぞれの部分的な演算を行う4個の部分 算ユニットを設けた。しかし、演算の分割 すなわち部分演算ユニットの数は4でなくと もよく、2以上の任意の数であればよい。

 第1~第4の部分演算ユニット201~204の各々には 、それぞれのユニット201~204が実行すべき演 の種類を指定する演算コードが入力される そして、第1の部分演算ユニット201は、Mビッ トの入力データA及びBのうちのそれぞれ0ビッ ト目から(M1-1)ビット目までのM1ビットの部分 あるA1とB1とを入力として、演算コードによ り指定された演算を行い、M1ビットの演算結 S1とキャリーC1を出力する。
 第2の部分演算ユニット202は、入力データA びBのうちのそれぞれM1ビット目から(M2-1)ビ ト目までの(M2-M1)ビットの部分であるA2及びB2 と、第1の部分演算ユニット201からのキャリ C1とを入力として、演算コードにより指定さ れた演算を行い、(M2-M1)ビットの演算結果S2と キャリーC2を出力する。

 第3の部分演算ユニット203は、入力データA びBのうちのそれぞれM2ビット目から(M3-1)ビ ト目までの(M3-M2)ビットの部分であるA3及びB3 と、第2の部分演算ユニット202からのキャリ C2とを入力として、演算コードにより指定さ れた演算を行って、(M3-M2)ビットの演算結果S3 とキャリーC3を出力する。
 第4の部分演算ユニット204は、入力データA びBのうちのそれぞれM3ビット目から(M-1)ビッ ト目までの(M-M3)ビットの部分であるA4及びB4 、第3の部分演算ユニット203からのキャリーC 3とを入力として、演算コードにより指定さ た演算を行い、(M-M3)ビットの演算結果S4と、 キャリー判定やゼロ判定の結果を示すフラグ Fを出力する。
 なお以下の説明において、複数ビットのデ タDのうちより下位のmビット目からより上 のnビット目までの部分のデータを示す場合 D[n:m]と表記することがある。

 各部分演算ユニット201~204が1つのMビット 算のうちの異なる部分的演算を異なるクロ クサイクル時間にて実行し、かつ各部分演 ユニット201~204が同一クロックサイクル時間 において異なるMビット演算の部分的演算を うことによって、演算ユニット200はパイプ イン処理によって異なるMビット演算を並列 実行する。このために演算ユニット200は、 割された入力データA2~A4及びB2~B4、演算コー ド、及び各部分演算ユニット201~203の演算結 を保持するためのパイプラインレジスタ211~2 19、221~228、231~237を備える。そして部分演算 ニット201~204は、これらパイプラインレジス 211~219、221~228、231~237によって区切られた複 のパイプラインステージにて演算を実行す 。

 第1~第4の部分演算ユニット201~204が演算を 行うパイプラインステージをそれぞれ第1パ プラインステージ~第4パイプラインステージ と示す。第1パイプラインステージと第2パイ ラインステージとの間にはパイプラインレ スタ211~219が設けられ、第2パイプラインス ージと第3パイプラインステージとの間には イプラインレジスタ221~228が設けられ、第3 イプラインステージと第4パイプラインステ ジとの間にはパイプラインレジスタ231~237が 設けられる。

 パイプラインレジスタ211~219、221~228、231~2 37を設けることによって、演算ユニット200は 下のとおりパイプライン処理を実現する。 続する4つのサイクルTi(i=0、1、2、3)におい 演算コードCOM#iとMビットの入力値A(i)及びB(i) が演算ユニット200へ入力されるものと仮定す る。各パイプラインレジスタは、サイクルTi 同期して前段のパイプラインステージの出 値をラッチし記憶値を更新する。

 サイクルT3において、演算コードCOM#3、入力 値A(3)[(M1-1):0]及びB(3)[(M1-1):0]が、第1の部分演 ユニット201に入力される。第1の部分演算ユ ニット201は、A(3)[(M1-1):0]とB(3)[(M1-1):0]とを入 とし、演算コードCOM#3により指定される演算 を行う。
 この間、パイプラインレジスタ211は、サイ ルT2において演算ユニット200に与えられた 算コードCOM#2を保持している。
 また、パイプラインレジスタ212はA(2)[(M2-1):M 1]を保持しており、パイプラインレジスタ213 B(2)[(M2-1):M1]を保持しており、パイプライン ジスタ214はA(2)[(M3-1):M2]を保持しており、パ プラインレジスタ215はB(2)[(M3-1):M2]を保持し おり、パイプラインレジスタ216はA(2)[(M-1):M3 ]を保持しており、パイプラインレジスタ217 B(2)[(M-1):M3]を保持している。
 パイプラインレジスタ218は、サイクルT2に いて第1の部分演算ユニット201が演算した演 結果S1(2)を保持しており、パイプラインレ スタ219はその演算結果のキャリーC1(2)を保持 している。第1の部分演算ユニット201はサイ ルT2において、A(2)[(M1-1):0]とB(2)[(M1-1):0]とを 力とし、演算コードCOM#2により指定される演 算を行っている。

 またサイクルT3では、パイプラインレジ タ211に保持されている演算コードCOM#2と、パ イプラインレジスタ212及び213に保持されてい る入力値A(2)[(M2-1):M1]及びB(2)[(M2-1):M1]と、サイ クルT2における第1の部分演算ユニット201の演 算結果のキャリーC1(2)とが、第2の部分演算ユ ニット202に入力される。そして第2の部分演 ユニット202は、入力値A(2)[(M2-1):M1]及びB(2)[(M2 -1):M1]と、キャリーC1(2)とを入力とし、演算コ ードCOM#2により指定される演算を行う。

 この間、パイプラインレジスタ221は、サ クルT1において演算ユニット200に与えられ 演算コードCOM#1を保持している。また、パイ プラインレジスタ222はA(1)[(M3-1):M2]を保持して おり、パイプラインレジスタ223はB(1)[(M3-1):M2] を保持しており、パイプラインレジスタ224は A(1)[(M-1):M3]を保持しており、パイプラインレ スタ225はB(1)[(M-1):M3]を保持している。

 そして、パイプラインレジスタ226は、サ クルT1において第1の部分演算ユニット201が 算した演算結果S1(1)を保持している。第1の 分演算ユニット201はサイクルT1において、A( 1)[(M1-1):0]とB(1)[(M1-1):0]とを入力とし、演算コ ドCOM#1により指定される演算を行っている

 また、パイプラインレジスタ227は、第2の 部分演算ユニット202がサイクルT2にて行った 算結果S2(1)を保持しており、パイプライン ジスタ228はそのキャリーC2(1)を保持している 。第2の部分演算ユニット202はサイクルT2にお いて、サイクルT1における第1の部分演算ユニ ット201の演算結果のキャリーC1(1)と、A(1)[(M2-1 ):M1]及びB(1)[(M2-1):M1]とを入力とし、演算コー COM#1により指定される演算を行っている。

 サイクルT3では、パイプラインレジスタ22 1に保持されている演算コードCOM#1と、パイプ ラインレジスタ222及び223に保持されている入 力値A(1)[(M3-1):M2]及びB(1)[(M3-1):M2]と、サイクル T2における第2の部分演算ユニット202の演算結 果のキャリーC2(1)とが、第3の部分演算ユニッ ト203に入力される。そして第3の部分演算ユ ット203は、入力値A(1)[(M3-1):M2]及びB(1)[(M3-1):M2 ]と、キャリーC2(1)とを入力とし、演算コード COM#1により指定される演算を行う。

 この間、パイプラインレジスタ231は、サイ ルT0において演算ユニット200に与えられた 算コードCOM#0を保持している。また、パイプ ラインレジスタ232はA(0)[(M-1):M3]を保持してお 、パイプラインレジスタ233はB(0)[(M-1):M3]を 持している。
 そして、パイプラインレジスタ234は、サイ ルT0において第1の部分演算ユニット201が演 した演算結果S1(0)を保持している。第1の部 演算ユニット201はサイクルT0において、A(0)[ (M1-1):0]とB(0)[(M1-1):0]とを入力とし、演算コー COM#0により指定される演算を行っている。

 パイプラインレジスタ235は、サイクルT1に いて第2の部分演算ユニット202が演算した演 結果S2(0)を保持している。第2の部分演算ユ ット202はサイクルT1において、サイクルT0に おける第1の部分演算ユニット201の演算結果 キャリーC1(0)と、A(0)[(M2-1):M1]及びB(0)[(M2-1):M1] とを入力とし、演算コードCOM#0により指定さ る演算を行っている。
 パイプラインレジスタ236は、サイクルT2に いて第3の部分演算ユニット203が演算した演 結果S3(0)を保持しており、パイプラインレ スタ237はそのキャリーC3(0)を保持している。 第3の部分演算ユニット203はサイクルT2におい て、サイクルT1における第2の部分演算ユニッ ト202の演算結果のキャリーC2(0)と、A(0)[(M3-1):M 2]及びB(0)[(M3-1):M2]とを入力とし、演算コードC OM#0により指定される演算を行っている。

 サイクルT3では、パイプラインレジスタ23 1に保持されている演算コードCOM#0と、パイプ ラインレジスタ232及び233に保持されている入 力値A(0)[(M-1):M3]及びB(0)[(M-1):M3]と、サイクルT2 における第3の部分演算ユニット203の演算結 のキャリーC3(0)とが、第4の部分演算ユニッ 204に入力される。そして第4の部分演算ユニ ト204は、入力値A(0)[(M-1):M3]及びB(0)[(M-1):M3]と 、キャリーC3(0)とを入力とし、演算コードCOM# 0により指定される演算を行う。そしてその 算結果S4(0)及びフラグFを出力する。

 以上の説明から分かるとおり、演算コー COM#0により指定される1つの演算のうち、0ビ ット目から(M1-1)ビット目の部分は第1の部分 算ユニット201によりサイクルT0において行わ れ、M1ビット目から(M2-1)ビット目の部分は第2 の部分演算ユニット202によりサイクルT1にお て行われ、M2ビット目から(M3-1)ビット目の 分は第3の部分演算ユニット203によりサイク T2において行われ、M3ビット目から(M-1)ビッ 目の部分は第4の部分演算ユニット204により サイクルT3において行われる。そして、それ れの演算結果は同時にサイクルT3において パイプラインレジスタ234~236及び部分演算ユ ット204から出力される。

 またサイクルT3において、第1~第4の部分 算ユニット201~204は、それぞれ、サイクルT3~T 0に演算ユニット200に入力された異なる演算CO M#0~3を並列して行っており、演算ユニット200 パイプライン処理を行っていることも分か 。

 図5は、図4に示すパイプラインレジスタ211 概略構成図である。他のパイプラインレジ タ212~219、221~228及び231~237も同様の構成を有 ている。パイプラインレジスタ211は、クロ ク信号CKに同期して、nビット入力データDin ラッチするフリップフロップ(FF)261と、モー 切替信号CKENの値に応じて、フリップフロッ プ261の出力値及び入力データDinの一方をパイ プラインレジスタ211の出力として選択するマ ルチプレクサ(MUX)262を備える。本構成例では CKEN=「H」のときフリップフロップ261の出力 がパイプラインレジスタ211の出力として出 され、CKEN=「L」のとき入力データがそのま 出力される。
 したがって、パイプラインレジスタ211は、C KEN=Hのとき入力クロックCKに同期して出力値 更新するフリップフロップモードで動作し CKEN=Lのとき入力値をそのまま出力するトラ スペアレントモードで動作する。

 図4に示す演算ユニット200では、第1パイ ラインステージと第2パイプラインステージ の間のパイプラインレジスタ211~219には同じ クロック信号φ20と同じモード切替信号CKEN20 供給される。また、第2パイプラインステー と第3パイプラインステージとの間のパイプ ラインレジスタ221~228には同じクロック信号φ 21と同じモード切替信号CKEN21が供給される。 3パイプラインステージと第4パイプライン テージとの間のパイプラインレジスタ231~237 は同じクロック信号φ22と同じモード切替信 号CKEN22が供給される。

 モード切替信号CKEN20~CKEN22の値を変えてパイ プラインレジスタの動作モードを変更するこ とによって、演算ユニット200のパイプライン 段数すなわち演算ユニット200の並列演算実行 数を変更することができる。以下、演算ユニ ット200が並列に実行する演算の数を「並列数 」と示すことがある。
 全てのパイプラインレジスタをフリップフ ップモードで動作させると、演算ユニット2 00のパイプライン段数は4となり、演算ユニッ ト200は4つの異なる演算を並列に行うことが きる。

 パイプラインレジスタを211~219と231~237をト ンスペアレントモードで動作させ、かつパ プラインレジスタ221~228をフリップフロップ ードで動作させると、パイプラインレジス 211~219により分けられていた第1及び第2パイ ラインステージが1つのパイプラインステー ジとなり、またパイプラインレジスタ231~237 より分けられていた第3及び第4パイプライン ステージが1つのパイプラインステージとな ので、演算ユニット200のパイプライン段数 2となる。
 全てのパイプラインレジスタをトランスペ レントモードで動作させると、もはや演算 ニット200はパイプライン処理を行わないの 、演算ユニット200の並列数は1となる。

 図6は、並列数が1であるときの演算ユニッ 200の動作のタイムチャートである。矩形波 ×1CLK」は演算ユニット200が1つのMビット演算 を完了するのに使用するサイクルを示す。し たがって矩形波×1CLKの1周期が基本周期とな 。
 信号「CD0」は第1部分演算ユニット201へ入力 される演算コードを示し、信号「CD1」は第2 分演算ユニット202へ入力される演算コード 示し、信号「CD2」は第3部分演算ユニット203 入力される演算コードを示し、信号「CD3」 第3部分演算ユニット204へ入力される演算コ ードを示す。

 また、信号「A」及び「B」は第1部分演算ユ ット201及びパイプラインレジスタ212~217へ入 力される入力データを示す。また、「φ20」 び「CKEN20」は、パイプラインレジスタ211~219 与えられるクロック信号及びモード切替信 を示し、「φ21」及び「CKEN21」は、パイプラ インレジスタ221~228に与えられるクロック信 及びモード切替信号を示し、「φ22」及び「C KEN22」は、パイプラインレジスタ231~237に与え られるクロック信号及びモード切替信号を示 す。
 図示するとおり、モード切替信号CKEN20~22は ずれも「L」に設定されており、全てのパイ プラインレジスタがトランスペアレントモー ドで動作する。このため全ての部分演算ユニ ット201~204が1つのMビット演算を分割した各部 分演算を同時に実行するので、演算ユニット 200の並列数は1となる。また各クロックφ20~φ2 2のサイクルは基本周期と同じ長さに設定さ る。

 図7は、並列数が2であるときの演算ユニッ 200の動作のタイムチャートである。この場 、1つの基本周期の間に2つの演算を並列に実 行するために、各クロックφ20~φ22のサイクル を基本周期の1/2の長さに設定して、演算ユニ ット200を動作させる。
 いま、サイクルTi(i=1、2、3)の前半において 算ユニット200に、命令#ia及び入力Aa(i)及びBa (i)が与えられ、サイクルTiの後半において演 ユニット200に、命令#ib及び入力Ab(i)及びBb(i) が与えられたと仮定する。

 また、モード切替信号CKEN21を「H」に設定 し、モード切替信号CKEN20及び22は「L」に設定 する。このため、第2部分演算ユニット202を む第2パイプラインステージと第3部分演算ユ ニット203を含む第3パイプラインステージと 間のパイプラインレジスタ221~228のみがフリ プフロップとして動作する。したがって、 1部分演算ユニット201及び第2部分演算ユニ ト202が同じMビット演算の部分演算を同時に 行し、第3部分演算ユニット203及び第4部分 算ユニット204は、第1部分演算ユニット201が 算したMビット演算よりも1/2基本周期前に演 算ユニット200に入力されたMビット演算の部 演算を実行する。このようにして演算ユニ ト200は、パイプライン処理により2個の演算 並列に実行する。

 図8は、並列数が4であるときの演算ユニッ 200の動作のタイムチャートである。この場 、1つの基本周期の間に4つの演算を並列に実 行するために、各クロックφ20~φ22のサイクル を基本周期の1/4の長さに設定して、演算ユニ ット200を動作させる。
 いま演算ユニット200に、サイクルTi(i=1、2、 3)の第1四半期において演算ユニット200に命令 #ia及び入力Aa(i)及びBa(i)が、第2四半期におい 演算ユニット200に命令#ib及び入力Ab(i)及びBb (i)が、第3四半期において演算ユニット200に 令#ic及び入力Ac(i)及びBc(i)が、第4四半期にお いて演算ユニット200に命令#id及び入力Ad(i)及 Bd(i)が与えられたと仮定する。

 モード切替信号CKEN20~22を「H」に設定する。 このため、全てのパイプラインステージの間 に設けられたパイプラインレジスタ221~228が リップフロップとして動作する。したがっ 第2部分演算ユニット202は、第1部分演算ユニ ット201が実行したMビット演算よりも1/4基本 期分先行するMビット演算の部分演算を実行 、第3部分演算ユニット203は、第2部分演算 ニット202が実行したMビット演算よりも1/4基 周期分先行するMビット演算の部分演算を実 行し、第4部分演算ユニット204は、第3部分演 ユニット203が実行したMビット演算よりも1/4 基本周期分先行するMビット演算の部分演算 実行する。このようにして演算ユニット200 、パイプライン処理により4個の演算を並列 実行する。
 上記のように、演算ユニット200は、Mビット 演算を1つずつ行う演算ユニットとして動作 ることができ、また2個又は4個のMビット演 を並列に行う演算ユニットとして動作する とができる。

 本発明による演算ユニット200によれば、図9 に示すように、実行ステージにおいて、実行 期間を1/N基本周期ずらしながらN個の演算を 行するN段のパイプライン処理を行うことに り、1つの演算ユニットで複数の演算を並列 に実行することができる。このため、VLIWプ セッサやスーパースカラプロセッサにおい 、従来よりも少ない数の演算ユニットによ て複数の演算を並列に実行することができ レジスタファイルや記憶手段と演算ユニッ とを結ぶデータパスの配線を低減すること できる。
 また、本発明による演算ユニット200によれ 、必要に応じて、実行ステージにおいて並 に実行する演算数を増減させることが可能 なる。必要最低限の実行命令数で処理する とにより消費電力を節約することができる

 以下、添付する図面を参照して本発明の実 例を説明する。図10は、本発明によるVLIWプ セッサの実施例を示す概略構成図である。 ロセッサ1は2つの32ビットのデータ同士の数 値演算又は論理演算を行うための演算部17を し、この演算部17は、図4を参照して説明し 演算ユニット200と同様の構成を有する。
 またプロセッサ1は、プログラムカウンタ(PC )を制御するプログラムカウンタ(PC)制御部10 、プログラムカウンタが示す命令メモリ500 のアドレスからフェッチした命令を保持す 命令バッファ(InstBuff)11と、命令バッファ11か ら取り出した命令をデコードして中間コード とオペランドを生成するメインデコーダ12と 備える。

 さらにプロセッサ1は、アキュームレータ 、汎用レジスタ及びベースレジスタなどの各 種レジスタを記憶するレジスタファイル14と アドレス演算のためのアドレス演算器15と メインデコーダ12により生成された中間コー ドから実行コードとオペランド選択信号を取 り出すLSデコーダ13と、オペランド選択信号 従って、レジスタファイル14から読み出した レジスタ値、即値のオペランド及びデータメ モリ501から読み出したデータのいずれかから 、演算部17への入力値を選択するマルチプレ サ16を備える。

 プロセッサ1は、実行コードに含まれるコ ードに基づいて分岐制御信号及びメモリ書き 込み制御信号を生成するWRデコーダ18と、基 クロック信号RefCLKに基づいて、プロセッサ1 各部を動作させるクロック信号及び演算部1 7のパイプライン段数を変更するモード切替 号を生成するクロック制御部19を備える。

 以下、図11~図13を参照して、プロセッサ1内 各要素間の接続関係を説明する。図11は、 令メモリ500、プログラムカウンタ制御部10、 命令バッファ11、メインデコーダ12、演算部17 、WRデコーダ18及びクロック制御部19の間の接 続関係を示す図である。
 クロック制御部19は、基準クロック信号RefCL Kを受信し、基準クロック信号RefCLKと同じ周 及び位相を有し命令バッファ11によるフェッ チタイミングを定めるフェッチタイミングク ロック信号Ckfと、基準クロック信号RefCLKを1/8 周期遅らせたメインクロックMainCLKを生成す 。
 なお、並列数が1である時すなわち演算部17 複数の32ビット演算を並列におこなわない には、演算部17は、フェッチタイミングクロ ック信号Ckfの周期と同じ周期で1つの32ビット 演算を処理する。したがって、フェッチタイ ミングクロック信号Ckfと同じ周期のクロック 信号である基準クロック信号RefCLK及びメイン クロックMainCLKの周期を「基本周期δTb」と記 ことがある。
 またクロック制御部19は、メインクロックMa inCLKよりも4倍速いクロック信号×4CLKを生成す る。クロック信号×4CLKの周期はδTb/4である。

 プログラムカウンタ制御部10は、クロック 御部19からメインクロックMainCLKを受信し、 部に記憶するプログラムカウンタの値をメ ンクロックMainCLKに同期して更新し、命令メ リ500へプログラムカウンタの値InstAddrを出 する。またWRデコーダ18から分岐制御信号(Bra nchCntrl)を受信し、演算部17から行き先アドレ を受信する。
 命令バッファ11は、命令メモリ500内の、プ グラムカウンタ制御部10に指定されたアドレ スInstAddrに記憶された命令を読み込み、その 令コード(Code)と命令オペランド(Operand)をメ ンデコーダ12へ出力する。

 図12は、メインデコーダ12、レジスタファイ ル14、LSデコーダ13、データメモリ501、アドレ ス演算器15、演算部17及びクロック制御部19の 間の接続関係を示す図である。
 メインデコーダ12は、VLIW命令である命令バ ファ11から受信した命令コード及び命令オ ランドをデコードし、演算部17が実行する演 算の種類を指定する実行コードを含む中間コ ードと各オペランドを出力する。
 メインデコーダ12は、命令バッファ11から受 信したVLIW命令をデコードすると、これらの 令に含まれている演算数P#を検出する。この 演算数P#は、実行ステージすなわち演算部17 おいて並列に実行される演算の数を示す。 4を参照して説明した演算ユニット200の説明 おける用語の用法にしたがって、P#も「並 数」と呼ぶことがある。

 メインデコーダ12の出力端子CodeS及びCodeM、 びにR0#S、R0#M、R1#S、R1#M、Ridx#、ImmD#及びImmA# から出力される信号は、以下のとおりである 。
 出力端子CodeS及びCodeMからは、演算部17が実 する演算の種類を指定する実行コードとデ スティネーションレジスタの指定を含む中 コードが出力される。また中間コードはデ タメモリ501への演算結果の書き込み有無を すメモリ書き込み制御信号や分岐命令やジ ンプ命令に伴う分岐制御信号も含んでいる
 並列数P#=1であったときには、メインデコー ダ12は、デコードによって生成された中間コ ドを出力端子CodeSからマルチプレクサ31へ出 力する。また並列数P#>1であったときには 数の中間コードを出力端子CodeMから順に1つ つマルチプレクサ31へ出力する。

 端子R0#S及びR0#Mからは第1ソースレジスタを 定するレジスタ番号が出力され、端子R1#S及 びR1#Mからは第2ソースレジスタを指定するレ スタ番号が出力される。並列数P#=1であった ときにはメインデコーダ12は、出力端子R0#S及 びR1#Sからそれぞれ第1及び第2ソースレジスタ のレジスタ番号をマルチプレクサ32及び33へ 力する。
 一方で並列数P#>1であったときにはメイン デコーダ12は、複数の第1のレジスタ番号及び 第2ソースレジスタのレジスタ番号を、それ れ出力端子R0#M及びR1#Mから順に1つずつマル プレクサ32及び33へ出力する。

 メインデコーダ12は、並列数P#が1であるか れより大きいかを示す選択信号Selを生成す 。マルチプレクサ31は選択信号Selに従って、 端子CodeS及びCodeMのいずれか一方をレジスタ41 へ接続する。選択された端子から出力される 中間コードCodeDがレジスタ41へ保持される。
 マルチプレクサ32は選択信号Selに従って、 子R0#S及びR0#Mのいずれか一方をレジスタ42へ 続する。選択された端子から出力される第1 ソースレジスタのレジスタ番号Rs0がレジスタ 42へ保持される。
 マルチプレクサ33は選択信号Selに従って、 子R1#S及びR1#Mのいずれか一方をレジスタ43へ 続する。選択された端子から出力される第2 ソースレジスタのレジスタ番号Rs1がレジスタ 43へ保持される。

 端子Ridx#からはデータ転送命令用のベース ジスタのレジスタ番号Ridxが出力される。ま 端子ImmD#からは演算用の即値オペランドIMが 出力される。さらに端子ImmA#からはデータ転 命令用のオフセット値ImmAが出力される。
 なお、本実施例によるプロセッサ1は、並列 命令であるVLIW命令内にデータ転送命令及び 値を用いた演算命令を含めることを禁止す こととし、命令バッファ11から読み込んだVLI W命令が並列命令である場合には、端子Ridx#、 ImmD#及びImmA#からのデータ出力はない。

 レジスタ番号Ridxは、レジスタファイル14 読み出しレジスタ番号指定入力p2Aとしてレ スタファイル14に入力され、レジスタ番号Ri dxにより指定されたベースレジスタの値が出 ポートp2D0から出力されアドレス演算器15に 信される。アドレス演算器15は、受信した ースレジスタの値にオフセット値ImmAを加え 得たメモリアドレスを算出する。このメモ アドレスは、レジスタファイル14の入力ポ トp2Diに受信され、かつレジスタ45に保持さ る。また即値オペランドIMはレジスタ44に保 される。

 レジスタ41~45は、レジスタファイル14やデ ータメモリ501へのアクセスの間、メインデコ ーダ12のデコード結果を保持するためのレジ タである。レジスタ41~45は、後述のとおり 成されるデコード結果保持タイミングクロ ク信号Ckdに同期して、上述した各信号をラ チして保持内容を更新する。

 レジスタ41から出力される中間コードCodeD は、LSデコーダ13に受信される。LSデコーダ13 、演算部17が実行する演算の種類を指定す 実行コードCodeExeと、第2オペランドを選択す るオペランド選択信号OperandSelを取り出す。 行コードCodeExeはレジスタ51に保持される。

 レジスタ42及び43から出力される第1及び第2 ソースレジスタのレジスタ番号Rs0及びRs1は それぞれレジスタファイル14の読み出しレ スタ番号指定入力p0A及びp1Aとして、レジス ファイル14に受信される。
 レジスタ番号Rs0により指定されたレジスタ 内容RAは、出力ポートp0Doから出力され、演 部17の第1入力データAとしてレジスタ52に保 される。
 レジスタ番号Rs1により指定されたレジスタ 内容RBは、出力ポートp1Doから出力され、マ チプレクサ16に保持される。

 マルチプレクサ16にはまた、レジスタ44か ら出力される即値オペランドIMと、レジスタ4 5から出力されるメモリアドレスによりアド スされたデータメモリ501内のデータMもまた 力される。マルチプレクサ16はオペランド 択信号OperandSelに従ってこれらのデータRB、IM 及びMのいずれかを選択して、演算部17の第2 力データBとし、レジスタ53に保持する。

 レジスタ51、52及び53は、先入れ先出し(FIF O)バッファであり、デコード結果保持タイミ グクロック信号Ckdに同期して、それぞれ実 コードCodeExe、第1入力データA及び第2入力デ ータBをラッチする。そして命令投入タイミ グクロック信号Ckeに同期して、現在記憶し いるデータのうち最先に入力したものを順 取り出す。

 演算部17は、2つの入力データA及びBの間で 実行コードCodeExeにて指定される演算を行う 、その演算結果SとフラグFをそれぞれレジ タファイル14の入力ポートp3Di及びpfDiに出力 、また結果Sを書き込むディスティネーショ ンレジスタのレジスタ番号Rdを、レジスタフ イル14の書き込みレジスタ番号指定入力p3A 出力する。
 レジスタファイル14は、クロック制御部19か ら供給されるレジスタ更新クロックφ23に同 して、書き込みレジスタ番号指定入力p3Aに 定されたレジスタとフラグレジスタの値を 新する。

 またデータメモリ501は、後述するWRデコ ダ18からメモリ書き込み制御信号WriteEnable信 を受信する。メモリ書き込み制御信号WriteEn able信号が、データメモリ501への書き込みを 示することを意味する場合には、データメ リ501は、演算部17による演算結果を記憶する 。

 クロック制御部19は、メインクロックMainCLK びクロック信号×4CLKを生成して、それぞれ ータメモリ501及びメインデコーダ12へ供給 る。
 またクロック制御部19は、メインデコーダ12 が検出した並列数P#を受信する。そして受信 れた並列数P#にしたがって、デコード結果 持タイミングクロック信号Ckd、命令投入タ ミングクロック信号Cke及びクロックφ23を生 する。
 さらにクロック制御部19は、図4~図8を参照 て説明した、演算部17に与えられるクロック 信号φ20~φ22及びモード切替信号CKEN20~CKEN22を 並列数P#にしたがって生成する。クロック制 御部19の構成、並びに各クロック信号及びモ ド切替信号の生成動作は後述する。

 図13は、演算部17、WRレコーダ18、プログラ カウンタ制御部10、データメモリ501及びクロ ック制御部19の間の接続関係を示す図である
 演算部17は、レジスタ51から入力した実行コ ードCodeExeをデコードしてその中から取り出 たコードCodeWriteと、フラグF及び演算結果Sを 出力する。レジスタ61、62及び63は、クロック 制御部19から供給される実行結果保持タイミ グクロックCkwに同期して、コードCodeWriteと フラグF及び演算結果Sを出力する。コードCo deWriteは、実行コードCodeExeが分岐命令やジャ プ命令であるか否か、及び実行コードCodeExe が演算結果をデータメモリ501へ出力する命令 であるか否かを示すコードである。

 WRレコーダ18は、レジスタ61に保持されたコ ドCodeWriteと、レジスタ62に保持されたフラ Fの結果に基づいて、分岐制御信号BranchCntrl びメモリ書き込み制御信号WriteEnableを生成す る。分岐制御信号BranchCntrlはプログラムカウ タ制御部10に受信され、メモリ書き込み制 信号WriteEnableはデータメモリ501に受信される 。
 また、実行コードCodeExeが分岐命令又はジャ ンプ命令である場合には、演算部17は、演算 果Sとして行き先アドレスJmpAddrを出力する したがってレジスタ63から出力される演算結 果Sは、プログラムカウンタ制御部10に供給さ れる。
 レジスタ63から出力される演算結果Sはデー メモリ501へも供給される。実行コードCodeExe が演算結果をデータメモリ501へ出力する命令 である場合には、演算部17の演算結果Sはデー タメモリ501へ書き込まれる。

 図14は、プログラムカウンタ制御部10の概 略構成図である。プログラムカウンタ制御部 10は、プログラムカウンタの値InstAddrを保持 るレジスタ101と、分岐制御信号BranchCntrlをデ コードするデコーダ102と、デコーダ102のデコ ード結果に従って、直前に分岐命令が実行さ れたときにはJmpAddrを選択しそうでない場合 は定数1を選択するマルチプレクサ103と、現 のプログラムカウンタから次のプログラム ウンタを演算する演算器104と、を備えてい 。

 図15は、メインデコーダ12の概略構成図であ る。メインデコーダ12は、並列数信号発生部1 11と、レジスタ112と、ストール信号生成部113 、Sel信号生成部114を備える。
 並列数信号発生部111は、命令バッファ11か 読み込んだ命令コード(Code)及び命令オペラ ド(Operand)に含まれる演算命令数を検出し、 列数信号P#を生成する。
 ストール信号生成部113は、メインデコーダ1 2が今回のフェッチタイミングで受信した命 の並列数P#(0)と、前回のフェッチタイミング で受信した命令の並列数P#(-1)とを受信する。 ストール信号生成部113は、前回受信した命令 の並列数が1よりおおきく(P#(-1)>1)、かつ前 受信した命令の並列数と今回受信した命令 並列数が異なるとき(P#(-1)≠P#(0))であるとき 、今回受信した命令に代えてNOP命令を発行す ることを要求するストール信号を生成する。 ストール信号は、後述するシングル命令デコ ード部115、並列命令デコード部116及び命令転 送手段118に受信される。
 Sel信号生成部114は、並列数P#にしたがって マルチプレクサ31~33の切替動作を制御する選 択信号Selを生成する。

 またメインデコーダ12は、シングル命令デ ード部115と、並列命令デコード部116と、命 キュー117と、命令転送手段118を備える。
 シングル命令デコード部115は、命令バッフ 11から読み込んだ命令コード(Code)及び命令 ペランド(Operand)に1つの演算命令しか含まれ いとき、これらをデコードして1組の中間コ ードとオペランドを生成する。そして中間コ ードをCodeS端子へ出力し、またオペランドを R0#S端子、R1#S端子、Ridx#端子、ImmD#端子及びI mmA#端子へ出力する。また、シングル命令デ ード部115は、ストール信号生成部113からス ール信号を受信している間は、生成した中 コードとオペランドの出力と命令バッファ11 からの命令の読み込みを停止し、NOP命令を発 行する。

 並列命令デコード部116は、命令コード及び 令オペランドに複数の演算命令が含まれる き、これらをデコードして、複数組の中間 ードとオペランドを生成する。そしてこれ 中間コードとオペランドを命令キュー117へ 力する。また、並列命令デコード部116は、 トール信号生成部113からストール信号を受 している間は、命令バッファ11からの命令 読み込みを停止する。
 命令キュー117は、並列命令デコード部116に りデコードされた複数組の中間コードとオ ランドを保持する。そして命令転送手段118 生成する命令転送トリガ信号に同期して中 コードとオペランドを順次1組ずつ取り出し て、CodeM端子、R0#M端子及びR1#M端子へ出力す 。

 命令転送手段118は、クロック信号×4CLK及び 列数P#(-1)を受信する。並列数P#(-1)=4のとき 命令転送手段118はクロック信号×4CLKを命令 送トリガ信号として命令キュー117へ出力す 。これによって命令キュー117は、基本周期δ Tbの1/4の周期でそれぞれの組の中間コード及 オペランドの組を順次出力する。
 また、並列数P#(-1)=2のとき、命令転送手段11 8はクロック信号×4CLKを2分周した信号を命令 送トリガ信号として命令キュー117へ出力す 。これによって命令キュー117は、基本周期 Tbの1/2の周期でそれぞれの組の中間コード及 びオペランドを順次出力する。
 命令転送手段118は、ストール信号生成部113 らストール信号を受信している間は、命令 ュー117からの生成した中間コードとオペラ ド出力を止め、命令キュー117からNOP命令を 行する。

 図16~図18を参照してメインデコーダ12による デコード動作を説明する。図16は、本プロセ サ1により実行される命令の種類を例示する 図である。本プロセッサ1により実行される 令の形式は、例えば命令タイプ1~命令タイプ 6に分類される。
 命令タイプ1に属する命令は、2つのソース ジスタの指定R0及びR1と1つのディスティネー ションレジスタの指定S0を伴い、2つのソース レジスタR0及びR1の値の間の演算結果をディ ティネーションレジスタS0に書き込む。この 形式の命令は例えば「add r0,r1,r2」であり、 ジスタr0とr1の値の和をレジスタr2へ書き込 。

 命令タイプ2に属する命令は、1つのディス ィネーションレジスタの指定S0を伴い、ディ スティネーションレジスタS0の値に基づく演 を行ってその結果をディスティネーション ジスタS0に書き込む。この形式の命令は例 ば「abs r2」であり、レジスタr2の値の絶対 をレジスタr2へ書き込む。
 命令タイプ3に属する命令は、1つのソース ジスタR0の指定と1つの即値ImmDと1つのディス ティネーションレジスタの指定S0を伴い、ソ スレジスタR0と即値ImmDとの間の演算結果を ィスティネーションレジスタS0に書き込む この形式の命令は例えば「add r0,-10,r2」であ り、レジスタr0の値と「-10」との和をレジス r2へ書き込む。

 命令タイプ4に属する命令は、ベースレジス タの指定Ridxとオフセット値ImmAと1つのレジス タの指定S0を伴う。この形式の命令は例えば モリ転送命令「ld *(r0,10),r2」であり、ベー レジスタr0の値にオフセット値10を加えた値 により示されるアドレスに記憶されるデータ メモリ501内のデータの内容をレジスタr2へ転 する。
 命令タイプ5に属する命令は即値ImmDを伴う この形式の命令は例えばアドレス#100へジャ プするジャンプ命令「jp #100」である。
 命令タイプ6に属する命令は、レジスタ即値 ImmDと1つのレジスタの指定R0を伴う。この形 の命令は例えば「jp r0,#100」であり、レジス タr0に100を加えたアドレスへジャンプするジ ンプ命令である。

 図17A及び図17Bは、シングル命令デコード部1 15によるデコードの説明図である。図17Aに示 各命令、「add r0,r1,r2」(命令1)、「abs r2」( 令2)、「add r0,-10,r2」(命令3)、「ld *(r0,10),r2 」(命令4)、「jp #100」(命令5)、「jp r0,#100」( 令6)は、いずれも並列数1の命令である。
 したがってこれらの命令を含む命令コードC odeと命令オペランドOperandは、シングル命令 コード部115によってデコードされる。メイ デコーダ12が、上記命令1~6をそれぞれ含む命 令コードCodeと命令オペランドOperandとを図示 るフェッチ順序で受信すると、シングル命 デコード部115は、これらの命令の各々を1組 の中間コード及びオペランドへ変換する。シ ングル命令デコード部115は中間コード及びオ ペランドのそれぞれを、図17Bの表に示された CodeS端子、R0#S端子、R1#S端子、Ridx#端子、ImmD# 子及びImmA#端子へ出力する。
 なお、上述のとおり中間コードは、「add」 「abs」のような演算部17が実行する演算の 類を指定する実行コードとディスティネー ョンレジスタの指定を含む。従って図17Bに す表は、ディスティネーションレジスタの 定もCodeS端子から出力されることを示してい る。図18Bにおいても同様である。

 図18A及び図18Bは、並列命令デコード部116に るデコードの説明図である。図18Aに示す命 は「SAA r0,r1,r2」は、レジスタr0及びr1の値 差の絶対値をレジスタr2の値に加える命令で ある。
 ここで演算部17は、命令「SAA」を一回の演 により完了する数値論理演算ユニットが実 されておらず、これらを3つの演算、
 減算r0-r1の結果をレジスタr7へ格納(演算1)、
 レジスタr7の値の絶対値をr7へ格納(演算2)、
 レジスタr7とレジスタr2の値の和をレジスタ r2へ格納(演算3)
 を組み合わせて実行するものとすると、命 「SAA」の並列数は3となる。

 したがってこれらの命令を含む命令コー と命令オペランドは、並列命令デコード部1 16によってデコードされる。メインデコーダ1 2が、命令「SAA」を命令コードCodeと命令オペ ンドOperandとを受信すると、シングル命令デ コード部115は、命令「SAA」を必要な3組の中 コード及びオペランドへ変換する。

 図4に示す演算ユニット200と同様の構成を有 する演算部17は、並列数が1すなわち単一の演 算ユニットとして動作するか、もしくは2個 は4個の演算を並列に演算することができる したがって、並列数が3である命令「SAA」を デコードするときは、並列数信号発生部111は 並列数信号「P#=4」を生成し、シングル命令 コード部115は上記の3組の中間コード及びオ ランドと1つのNOP命令とを命令キュー117に出 力する。
 命令キュー117は、基本周期δTbの1/4の周期を 有する命令転送トリガ信号に同期して、これ ら中間コード、オペランド及びNOP命令のそれ ぞれを、図18Bの表に示されたCodeM端子、R0#M端 子及びR1#M端子へ順次出力する。

 図19は、レジスタファイル14の概略構成図で ある。レジスタファイル14は、クロック信号 23に同期して32ビットの入力データをラッチ る記憶素子であるレジスタ#0~#7と、これら ジスタ#0~#7のうち読み出しレジスタ番号指定 入力p0A~p2Aにより指定されるレジスタを選択 て、選択されたレジスタの値をそれぞれ出 ポートp0Do~p2Doへ出力するマルチプレクサ121~1 23を備える。
 またレジスタファイル14は、各レジスタ#0~#7 への入力値を、それ自身が記憶する値、並び に入力ポートp2Di及びp3Doに入力されたデータ ら選択するマルチプレクサ125a~125hと、書き みレジスタ番号指定入力p2A及びp3Aに従って 各マルチプレクサ125a~125hの切替信号を生成 る書き込みレジスタ選択デコーダ124を備え 。

 上述のとおり、レジスタファイル14から並 数P#が4である命令のオペランドが読み出さ るときには、メインデコーダ12は基本周期δT bの1/4の周期で読み出しレジスタ番号を指定 る。また、演算部17が1つの32ビット演算を処 理する期間の上限は、1つのVLIW命令がフェッ される周期すなわち基本周期δTbに等しい。 よって並列数P#が4であるときには、メインデ コーダ12は、演算部17が1つの32ビット演算を 理するために使用できる期間の1/4の長さの 期で読み出しレジスタ番号を指定する。
 同様に並列数P#が4である命令の演算結果が き込まれるときは、後述するように、メ演 部17は、基本周期δTbの1/4の長さの周期で演 結果を出力する。
 このため、各レジスタ#0~#7には、演算部17が 1つの32ビット演算を処理するために使用でき る期間の1/4の長さの周期で読み書き可能な記 憶素子を採用する。

 図20は、演算部17の概略構成図である。演算 部17は図4に示す演算ユニット200と同様の構成 を有する。したがって同じ構成要素は同じ参 照番号を使用して示すとともに説明を省略す る。
 演算部17に設けられた部分演算ユニット201~2 04の各々は、演算部17が行う32ビット演算を4 分した8ビット演算を行う。すなわち部分演 ユニット201は、32ビットの入力データA及びB のうちのそれぞれ0ビット目~7ビット目の部分 であるA[7:0]とB[7:0]とを入力として、実行コー ドCodeExeにより指定された演算を行い、8ビッ の演算結果S[7:0]とキャリーC1を出力する。
 第2の部分演算ユニット202は、A及びBのうち それぞれ8ビット目~15ビット目まで部分であ るA[15:8]及びB[15:8]とキャリーC1とを入力とし 、実行コードCodeExeにより指定された演算を い、8ビットの演算結果S[15:8」とキャリーC2 出力する。

 第3の部分演算ユニット203は、A及びBのうち それぞれ16ビット目~23ビット目まで部分で るA[23:16]及びB[23:16]とキャリーC2とを入力と て、実行コードCodeExeにより指定された演算 行い、8ビットの演算結果S[23:16」とキャリ C3を出力する。
 第4の部分演算ユニット204は、A及びBのうち それぞれ16ビット目~23ビット目まで部分で るA[31:24]及びB[31:24]とキャリーC3とを入力と て、実行コードCodeExeにより指定された演算 行い、8ビットの演算結果S[31:24]と、キャリ 判定やゼロ判定の結果を示すフラグFを出力 する。

 そして演算部17は、これら演算結果S[7:0]、S[ 15:8]、S[23:16]及びS[31:24]を組み合わせた32ビッ の演算結果S[31:0]と、フラグFを出力する。
 また演算部17は、実行コードCodeExeをデコー して、CodeExeに含まれていたコードCodeWriteと ディスティネーションレジスタの指定Rdを取 するデコーダ252を備える。

 図21は、クロック制御部19の概略構成図であ る。クロック制御部19は、基準クロック信号R efCLKに同期するPLL回路130と、各クロック信号 生成するクロックインバータ140~143及び151~15 4と、モード切替信号CKEN20~CKEN22を生成するモ ド切替信号生成部161~162と、を備える。
 PLL回路130は、位相比較回路131と、基準クロ ク信号RefCLKの8倍の速度のクロック信号×8CLK を生成する逓倍部132と、逓倍部132の出力クロ ック信号の速度を1/8に落として基準クロック 信号RefCLKが有する周期及び位相と同じ周期及 び位相を持つクロック信号を生成する分周部 133と、を備える。分周部133の出力信号は、フ ェッチタイミングクロック信号Ckf及びクロッ ク信号Ck1として使用される。

 クロックインバータ140~143は、入力P#(0)及 現在状態に基づいて、入力されるクロック 号×8CLKの周期、すなわち基本周期δTbの1/8の 周期で現在ステートを更新し、現在ステート に応じた論理値を出力する有限状態機械であ る。クロックインバータ140~143は、基本周期δ Tbの1/8の周期で論理値を出力できるので、基 周期δTbと同じ周期、基本周期δTbの1/2の周 及び1/4の周期を有するクロックを出力する とができる。クロックインバータ140~143は、 力P#(0)が1、2及び4のとき基本周期δTbと同じ 期、基本周期δTbの1/2の周期及び1/4の周期の クロックをそれぞれ出力する。

 入力P#(0)に定数4が入力されるクロックイン ータ140は、基本周期δTbの1/4の周期を有する クロック信号×4CLKを生成する。またクロック 信号×4CLKを反転させてクロック信号Ck4が生成 される。
 また入力P#(0)に定数1が入力されるクロック ンバータ141は、基本周期δTbと同じ周期を有 するメインクロックMainCLK及び実行結果保持 イミングクロックCkwを生成する。
 クロックインバータ142及び143によるクロッ Ckd及びCkeの生成動作については後述する。

 またクロック信号φ20~φ23を出力するクロッ インバータ151~154は、入力P#(0)、P#(-1)及び現 状態に基づいて、入力されるクロック信号 8CLKの周期で現在ステートを更新し、現在ス ートに応じた論理値を出力する有限状態機 である。クロックインバータ140~143と同様に 、クロックインバータ151~154は、基本周期δTb 同じ周期、基本周期δTbの1/2の周期及び1/4の 周期を有するクロックを出力することができ る。
 モード切替信号CKEN20~22を生成するモード切 信号生成部161~163もまた、入力P#(0)、P#(-1)及 現在状態に基づいて、クロック信号×8CLKの 期で現在ステートを更新し、現在ステート 応じた論理値を出力する有限状態機械であ 。
 これらクロックインバータ151~154によるクロ ック信号φ20~φ23の生成動作及びモード切替信 号生成部161~163によるモード切替信号CKEN20~22 生成動作については後述する。

 以下、並列数の変化に伴って演算部17のパ プライン段を変更するプロセッサ1の動作を 明する。図22は、並列数が1から4に変化する 際のフェッチ段におけるプロセッサ1の動作 示すタイムチャートであり、図23は、並列数 が1から4に変化する際のデコード段における ロセッサ1の動作を示すタイムチャートであ り、図24は、並列数が1から4に変化する際の 行段におけるプロセッサ1の動作を示すタイ チャートであり、図25は、並列数が1から4に 変化する際の実行結果保持タイミングクロッ クCkwと分岐制御信号BranchCntrlの変化を示すタ ムチャートである。
 なお、本プロセッサ1では、フェッチ段とは 命令メモリ500の読み出しから命令バッファ11 の書き込みまでのステージを示し、デコー 段とは命令バッファ11の読み出しからレジ タ51~53への書き込みまでのステージを示し、 実行段とはレジスタ51~53の読み出しからレジ タ61~63への書き込みまでのステージを示す

 図22に示すとおり、基準クロックRefCLKのサ クルT0に命令バッファ(InstBuff)11の読み込まれ た命令Com#3の並列数は1であり、サイクルT0に くサイクルT1で読み込んだ命令Com#4において 並列数が1から4へと変化し、サイクルT1~T4に 命令バッファ11の読み込まれた命令Com#4~7の 列数が4であったと仮定する。命令バッファ1 1は、サイクルT1において並列数P#=4の命令Com#4 をフェッチする。
 図23に示すように、サイクルT1においてメイ ンデコーダ12の並列数信号生成部111は、命令 ッファ11から命令Com#4を受信すると、並列数 信号の値P#を1から4に変更する。並列数信号(P #=4)は、図21に示すクロック制御部19のレジス 171へ入力される。

 なお図23において、信号Selはメインデコ ダ12から出力される選択信号Selを示し、信号 Ckdはデコード結果保持タイミングクロック信 号Ckdを示し、信号CodeDはレジスタ41にラッチ れた中間コードCodeDを示し、信号Rs0及びRs1は レジスタ42及び43にラッチされたレジスタ番 Rs0及びRs1を示し、Ridxはメインデコーダ12か 出力されるレジスタ番号Ridxを示し、ImmD及び ImmAはメインデコーダ12から出力される即値Imm D及びImmAを示し、RA及びRBはレジスタファイル 14から出力されたレジスタ値RA及びRBを示し、 IMはレジスタ44にラッチされた即値IMを示し、 Mはデータメモリ501から出力されるデータ値M 示す。

 また、命令バッファ11にフェッチされた 令Com#j(j=0、1、2…)をデコードして得られた 間コードCodeD、レジスタ番号Rs0、Rs1及びRidx 即値ImmD、ImmA及びIM、レジスタ値RA及びRB、並 びにデータ値Mを、それぞれCdD#j、Rs0(j)、Rs1(j) 、Ridx(j)、ImmD(j)、ImmA(j)及びIM(j)、RA(j)及びRB(j) 並びにM(j)と表記する。

 特に、並列数P#が1でない命令Com#jをデコー することによって生じた複数の中間コード #ja、#jb、#jc及び#jdと示し、中間コード#jaの ペレランドのレジスタ番号をs0a(j)及びs1a(j) 示し、中間コード#jbのオペレランドのレジ タ番号をs0b(j)及びs1b(j)と示し、中間コード#j cのオペレランドのレジスタ番号をs0c(j)及びs1 c(j)と示し、中間コード#jdのオペレランドの ジスタ番号をs0d(j)及びs1d(j)と示す。
 レジスタ番号をs0a(j)及びs1a(j)のレジスタ値 それぞれRA(j)a及びRB(j)aと示し、レジスタ番 をs0b(j)及びs1b(j)のレジスタ値をそれぞれRA(j )b及びRB(j)bと示し、レジスタ番号をs0c(j)及びs 1c(j)のレジスタ値をそれぞれRA(j)c及びRB(j)cと し、レジスタ番号をs0d(j)及びs1d(j)のレジス 値をそれぞれRA(j)d及びRB(j)dと示す。

 レジスタ171は、基準クロック信号RefCLKと しいクロック信号Ck1に同期して、メインデ ーダ12から出力される並列数信号P#をラッチ するレジスタであり、レジスタ172は、クロッ ク信号Ck1に同期してレジスタ171の出力PQ0をラ ッチするレジスタであり、レジスタ173は、ク ロック信号Ck1に同期してレジスタ172の出力PQ1 をラッチするレジスタである。したがって、 レジスタ171の出力PQ0は、メインデコーダ12か 出力される並列数信号P#よりも基本周期δTb け遅れており、レジスタ172の出力PQ1はレジ タ171の出力PQ0に対して基本周期δTbだけ遅れ ており、レジスタ173の出力PQ2dはレジスタ172 出力PQ1に対して基本周期δTbだけ遅れている

 図26は図21に示すクロックインバータ140の 概略構成図である。上述のとおり、クロック インバータ140は、有限状態機械であり、現在 ステートQSを保持する現在ステート記憶部181 、現在ステートQSと入力P#(0)に基づいて次ス テートSを決定して現在ステート記憶部181へ 力するとともに次ステートSに対応する論理 Dを出力する次ステート関数部182と、論理値 Dに基づいて出力値Dを出力する出力関数部183 、を備えている。現在ステート記憶部181と 力関数部183とは、クロック信号×8CLKが入力 れる入力クロックCKにより入力データをラ チするフリップフロップなどの記憶素子を いて構成される。クロックインバータ141~143 構成はクロックインバータ140の構成と同様 ある。

 図27は、図26に示すクロックインバータ140の 状態遷移図である。次ステート関数部182は、 入力P#(0)が1である間は「0」から「7」までの 態を巡回するように次ステートを決定する 入力P#(0)が2である間は、次ステート関数部1 82は、「8」から「11」までの状態を巡回する うに次ステートを決定する。入力P#(0)が4で る間は、次ステート関数部182は次ステート 状態「12」及び「13」を交互に持つように次 ステートを決定する。
 そして、入力P#(0)が1以外の値から1へ変化し たとき次ステートを「0」に設定し、入力P#(0) が2以外の値から2へ変化したとき次ステートS を「8」に設定し、入力P#(0)が4以外の値から4 変化したとき次ステートSを「12」に設定す 。

 次ステート関数部182は、出力関数部183へ出 する論理値Dを、次ステートSが「0」~「13」 いずれの状態であるかに応じて決定する。 27に示す状態遷移図は、次ステートSの値が 一点鎖線よりも上に配置された状態のいず かであるときは、次ステート関数部182は論 値D=1を出力し、次ステートSの値が、一点鎖 線よりも下に配置された状態のいずれかであ るときは、次ステート関数部182は論理値D=0を 出力することを示している。例えば図27に示 状態遷移図は、次ステートSの値が「0」~「3 」、「8」、「9」及び「12」のいずれかであ ときには次ステート関数部182は論理値D=1を 力し、次ステートSの値が「4」~「7」、「10 、「11」及び「13」のいずれかであるときに 次ステート関数部182は論理値D=0を出力する とを示している。
 なお、後述する図32、図34、図36、図38、図40 、図42及び図44に示される状態遷移図につい も、次ステートSとそれに対応する論理値Dと の間の関係を、図27と同様の表記法に従って す。

 図28は、図21に示すクロックインバータ140の 内部状態を示すタイムチャートである。クロ ックインバータ140には入力クロックCKとして 8CLKが与えられ、入力P#(0)として常に定数「4 が与えられている。したがって現在ステー QS及び次ステートSの状態は、基本周期δTbの 1/8の周期で「12」と「13」との間で変化する め、出力Qは、δTb/8の周期で出力値が「1」と 「0」の間で変化するクロック、すなわちク ック信号×4CLKとなる。
 なお、クロック信号×4CLKの立ち上がりエッ は基準クロックRefCLKの立ち上がりエッジか 、δTb/8だけ遅れている。これは出力関数部1 83を構成するフリップフロップによる遅延で る。

 図29は、図21に示すクロックインバータ141~14 3の内部状態を示すタイムチャートである。
 クロックインバータ141には入力クロックCK して×8CLKが与えられ、入力P#(0)として常に定 数「1」が与えられている。したがって現在 テートQS及び次ステートSの値は、基本周期δ Tbの1/8の周期で「0」~「7」までの値を巡回す 。このため出力Qは、δTb/2の周期で出力値が 「1」と「0」の間で変化するクロックとなる したがってクロックインバータ141が出力す メインクロックMainCLKと実行結果保持タイミ ングクロックCkwは、基本周期δTbと同じ周期 クロックとなる。
 またクロック信号×4CLKと同様に、メインク ックMainCLK及び実行結果保持タイミングクロ ックCkwも基準クロックRefCLKの立ち上がりエッ ジからδTb/8遅れている。以下、基準クロック RefCLKのサイクルTi(i=0、1、2…)よりもδTb/8遅れ たメインクロックMainCLKのサイクルをTi’と記 す。

 入力P#(0)が「1」である間は、クロックイン ータ142により生成されるデコード結果保持 イミングクロック信号Ckd、及びクロックイ バータ143により生成される命令投入タイミ グクロック信号Ckeもまた、メインクロックM ainCLKと同じ信号となる。
 このため図23に示すとおり、クロック信号Ck dに同期して入力をラッチするレジスタ群41~45 は、並列数が1である命令のデコード結果を 持するときメインクロックMainCLKのサイクルT i’と同じサイクルでデコード結果を更新す 。
 図24に示すとおり、クロック信号Ckeに同期 てデータが取り出されるレジスタ群51~53から は、メインクロックMainCLKのサイクルTi’と同 じサイクルで実行コードCodeExeと入力値A及びB が演算部17へ出力される。

 図30は、入力P#(0)が「1」から「4」へ変化 たときのクロックインバータ142、143の内部 態を示すタイムチャートである。サイクルT 2において入力P#(0)が「1」から「4」へ変化す と、次ステートSの状態が「12」にセットさ 、その後現在ステートQS及び次ステートSの 態は「12」と「13」との間で変化する。この ため出力Qは、入力P#(0)が4に変化してからδTb/ 8遅れて、δTb/4の周期のクロック信号を出力 始める。

 図21に示すとおり、クロックインバータ142 入力P#(0)には、レジスタ171の出力PQ0が入力さ れ、クロックインバータ143の入力P#(0)には、 ジスタ172の出力PQ1が入力される。
 従って図23に示すとおり、クロックインバ タ142から出力されるクロック信号Ckdは、メ ンデコーダ12にて並列数信号P#の変化が検出 れた時刻よりも(1+1/8)×基本周期δTbだけ遅れ て周期が変化する。本タイムチャートでは、 並列数信号P#が「1」から「4」へ変化するた 、クロック信号Ckdの周期はδTbからδTb/4に変 する。このようにクロック信号Ckdの周期が 化することによって、メインデコーダ12が 列数信号P#が1でない命令をデコードし、こ によって命令キュー117から中間コード及び ペランドが基本周期δTbの周期よりも短い周 で出力されたとき、レジスタ群41~43はこれ を順次ラッチする。

 また図23及び24に示すとおり、クロックイン バータ143から出力されるクロック信号Ckeは、 クロックインバータ142から出力されるクロッ ク信号Ckdよりも、基本周期δTb遅れて周期が 化する。
 なお図24において、信号Ckeは命令投入タイ ングクロック信号Ckeを示し、信号CodeExeはレ スタ51から演算部17へ出力される実行コード CodeExeを示し、信号A及びBはレジスタ52及び53 ら演算部17へ出力される第1及び第2入力デー A及びBを示し、信号φ20~22は、クロック制御 19から演算部17へ供給されるクロック信号φ2 0~22を示し、信号CKEN20~22はクロック制御部19か ら演算部17へ供給されるモード切替信号CKEN20~ 22を示し、信号φ23はクロック制御部19からレ スタファイル14へ与えられるレジスタ更新 ロックφ23を示す。

 CD1~CD3は図20に示した演算部17のパイプライ レジスタ211、221及び231から部分演算ユニッ 202~204へそれぞれ出力される実行コードを示 。例えばサイクルT3’の第4四半期では、部 演算ユニット201は実行コード#4dを受信し、 分演算ユニット202は実行コード#4cを受信し 部分演算ユニット203は実行コード#4bを受信 、部分演算ユニット204は実行コード#4aを受 する。
 信号S及び信号Fは演算部17から出力される演 算結果S及びフラグFを示し、信号Rdは演算部17 のデコーダ252から出力されるディスティネー ションレジスタの指定Rdを示す。

 また、命令バッファ11にフェッチされた命 Com#j(j=0、1、2…)をデコードして得られた実 コードCodeExeをCdE#jと表記し、命令Com#jをデコ ードして得られた演算部17への第1及び第2入 データA及びBをそれぞれA(j)及びB(j)と表記す 。
 特に、並列数P#が1でない命令Com#jをデコー することによって生じた複数の実行コード #ja、#jb、#jc及び#jdと表記する。また並列数P# が1でない命令Com#jをデコードすることによっ て生じた複数の第1入力データAをAa(j)、Ab(j)、 Ac(j)及びAd(j)と表記する。さらに並列数P#が1 ない命令Com#jをデコードすることによって生 じた複数の第2入力データBをBa(j)、Bb(j)、Bc(j) びBd(j)と表記する。

 第1及び第2入力データAa(j)とBa(j)との間の演 結果SとフラグFとをそれぞれSa(j)及びFLa(j)と 表記し、Ab(j)とBb(j)との間の演算結果Sとフラ FとをそれぞれSb(j)及びFLb(j)と表記し、Ac(j) Bc(j)との間の演算結果SとフラグFとをそれぞ Sc(j)及びFLc(j)と表記し、Ad(j)とBd(j)との間の 算結果SとフラグFとをそれぞれSd(j)及びFLd(j) と表記する。
 さらに並列数P#が1でない命令Com#jをデコー することによって生じたディスティネーシ ンレジスタの指定をRda(j)、Rdb(j)、Rdc(j)及びRd d(j)と表記する。

 図20に示すように、実行コードを保持する イプラインレジスタ211と入力値A及びBを保持 するパイプラインレジスタ212~217とは同じク ックφ20及びモード切替信号CKEN20で駆動され パイプラインレジスタ221とパイプラインレ スタ222~225とは同じクロックφ21及びモード 替信号CKEN21で駆動され、パイプラインレジ タ231とパイプラインレジスタ232~235とは同じ ロックφ22及びモード切替信号CKEN22で駆動さ れる。
 したがって各部分演算ユニット201~204は、あ る実行コード#jx(x=a、b…)を受信するとき、こ の実行コード#jxに伴う第1入力データAx(j)及び 第2入力データBx(j)を同時に受信する。

 図12に示すとおりデコード結果保持タイ ングクロック信号Ckd及び命令投入タイミン クロック信号Ckeは、プロセッサ1のデコード と実行段の間に設けられた先入れ先出しバ ファであるレジスタ51~53に供給される。ク ック信号Ckdはレジスタ51~53へのデータ書き込 みタイミングを定めるクロックとして使用さ れ、クロック信号Ckeはレジスタ51~53からのデ タ読み出しタイミングを定めるクロックと て使用される。

 図23及び24に示すとおりプロセッサ1のデコ ド段で処理される命令は、実行段で処理さ る命令よりも1基本周期δTb分遅れている。し たがって、あるサイクルTjにおいてフェッチ た命令Com#jの並列数P#が1でない場合には、 行段が先行するサイクルT(j-1)においてフェ チした命令Com#(j-1)を処理している途中で、 インデコーダ12が中間コード#ja、#jb…やレジ スタ番号S0a(j)、S0b(j)…、S1a(j)、S1b(j)…を出力 し始める。
 このため先入れ先出しバッファであるレジ タ51~53をデコード段と実行段の間に設け、 ータ読み出し用クロック信号Ckeをデータ書 込み用クロック信号Ckdよりも1基本周期δTb分 遅らせる。このようなレジスタ51~53を設ける とによって、命令Com#(j-1)をデコードして得 れる実行コードを実行段が処理している間 、次の命令Com#jをデコードして得られる中 コード#ja、#jb…、及びレジスタ番号S0a(j)、S0 b(j)…、S1a(j)、S1b(j)…を保持する。

 以下、図24に示すクロック信号φ20~φ23を 成するクロックインバータ151~154の動作と、 24に示すモード切替信号CKEN20~φ22を生成する モード切替信号生成部161~163の動作を説明す 。図31は、図21に示すクロックインバータ151 概略構成図である。上述のとおりクロック ンバータ151は、有限状態機械であり、現在 テートQSを保持する現在ステート記憶部184 、現在ステートQS、入力P#(0)及びP#(-1)に基づ て次ステートSを決定して現在ステート記憶 部184へ出力するとともに次ステートSに対応 る論理値Dを出力する次ステート関数部185と 論理値Dに基づいて出力値Dを出力する出力 数部186と、を備えている。現在ステート記 部184と出力関数部186とは、クロック信号×8CL Kが入力される入力クロックCKにより入力デー タをラッチするフリップフロップなどの記憶 素子を用いて構成される。クロックインバー タ152~154の構成はクロックインバータ151の構 と同様である。

 図21を参照すると、クロックインバータ15 1の入力P#(0)にはレジスタ172の出力PQ1が入力さ れる。したがって並列数に変化があったとき 、クロック信号φ20を生成するクロックイン ータ151の入力P#(0)は、命令投入タイミングク ロック信号Ckeを生成するクロックインバータ 143の入力P#(0)と同じタイミングで変化する。 た、クロックインバータ151の入力P#(-1)には ジスタ173の出力PQ2dが入力されて、入力P#(-1) は入力P#(0)よりも1基本周期δTb遅れる。

 図32は、図21に示すクロックインバータ151の 状態遷移図である。並列数が1である間、す わちP#(0)=P#(-1)=1である間は、状態「0」から 7」までを巡回するように次ステートの値Sが 決定される。
 並列数が1から4に変化することによりP#(0)が 4へ変化したとき、次ステートSは参照符号J1-1 によって示した線に沿って状態「15」へ変化 る。そしてP#(0)=4かつP#(-1)=1である間、次ス ートSは、交互に状態「17」及び「16」にな 。
 P#(0)が4へ変化してから1基本周期δTbが経過 ると、P#(-1)が4へ変化する。このとき、次ス ートSは参照符号J1-2によって示した線に沿 て状態「12」へ変化する。そしてそれ以降、 次ステートSは、交互に状態「12」及び「13」 なる。
 図33は、並列数が1から4に変化する際のクロ ックインバータ151の内部状態を示すタイムチ ャートである。並列数が1から4に変化したと 、クロックインバータ151の出力φ20の周期は 、命令投入タイミングクロック信号Ckeの変化 よりもδTb/4遅れて、基本周期δTbからδTb/4へ 化する。

 図21を参照すると、クロックインバータ152 入力P#(0)にはレジスタ174の出力PQ2が入力され る。ここでレジスタ174は、クロック信号Ck4に 同期してレジスタ172の出力PQ1をラッチするレ ジスタであり、レジスタ175は、クロック信号 Ck4に同期してレジスタ174の出力PQ2をラッチす るレジスタであり、レジスタ176は、クロック 信号Ck4に同期してレジスタ175の出力PQ3をラッ チするレジスタであり、レジスタ177は、クロ ック信号Ck4に同期してレジスタ176の出力PQ4を ラッチするレジスタである。
 したがって、レジスタ174の出力PQ2はレジス 172の出力PQ1よりもδTb/4だけ遅れており、レ スタ175の出力PQ3はレジスタ174の出力PQ2より δTb/4だけ遅れており、レジスタ176の出力PQ4 レジスタ175の出力PQ3よりもδTb/4だけ遅れて り、レジスタ177の出力PQ5はレジスタ176の出 PQ4よりもδTb/4だけ遅れている。

 並列数に変化があったとき、クロック信 φ21を生成するクロックインバータ152の入力 P#(0)は、クロック信号φ20を生成するクロック インバータ151の入力P#(0)よりもδTb/4だけ遅れ タイミングで変化する。また、クロックイ バータ152の入力P#(-1)にはレジスタ175の出力P Q3が入力されて、入力P#(-1)は入力P#(0)よりもδ Tb/4だけ遅れる。

 図34は、図21に示すクロックインバータ152の 状態遷移図である。並列数が1である間、す わちP#(0)=P#(-1)=1である間は、状態「0」から 7」までを巡回するように次ステートSが決定 される。
 P#(0)が4へ変化したとき、次ステートSは参照 符号J1-1によって示した線に沿って状態「15」 へ変化する。そしてP#(0)=4かつP#(-1)=1である間 、次ステートSは状態「17」に維持される。
 P#(0)が4へ変化してからδTb/4が経過すると、P #(-1)が4へ変化する。このとき、次ステートS 参照符号J1-2によって示した線に沿って状態 12」へ変化する。そしてそれ以降、次ステ トSの値は、交互に状態「12」及び「13」にな る。
 図35は、並列数が1から4に変化する際のクロ ックインバータ152の内部状態を示すタイムチ ャートである。並列数が1から4に変化したと 、クロックインバータ152の出力φ21の周期は 、クロック信号φ20の変化よりもδTb/4遅れて 基本周期δTbからδTb/4へ変化する。

 図21を参照すると、クロックインバータ15 3の入力P#(0)にはレジスタ175の出力PQ3が入力さ れる。このため並列数に変化があったとき、 クロック信号φ22を生成するクロックインバ タ153の入力P#(0)は、クロック信号φ21を生成 るクロックインバータ152の入力P#(0)よりもδT b/4だけ遅れたタイミングで変化する。また、 クロックインバータ153の入力P#(-1)にはレジス タ176の出力PQ4が入力されて、入力P#(-1)は入力 P#(0)よりもδTb/4だけ遅れる。

 図36は、図21に示すクロックインバータ153 の状態遷移図である。並列数が1から4に変わ 際に生じるクロックインバータ153の状態遷 は、クロックインバータ152に生じる状態遷 と同様である。図37は、並列数が1から4に変 化する際のクロックインバータ153及び154の内 部状態を示すタイムチャートである。並列数 が1から4に変化したとき、クロックインバー 153の出力φ22の周期は、クロック信号φ21の 化よりもδTb/4遅れて、基本周期δTbからδTb/4 変化する。

 図21を参照すると、クロックインバータ15 4の入力P#(0)にはレジスタ176の出力PQ4が入力さ れる。このため並列数に変化があったとき、 クロック信号φ23を生成するクロックインバ タ154の入力P#(0)は、クロック信号φ22を生成 るクロックインバータ153の入力P#(0)よりもδT b/4だけ遅れたタイミングで変化する。また、 クロックインバータ154の入力P#(-1)にはレジス タ177の出力PQ5が入力されて、入力P#(-1)は入力 P#(0)よりもδTb/4だけ遅れる。

 図38は、図21に示すクロックインバータ154 の状態遷移図である。並列数が1から4に変わ 際に生じるクロックインバータ154の状態遷 は、クロックインバータ152に生じる状態遷 と同様である。このため図37に示すように 並列数が1から4に変化したとき、クロックイ ンバータ153の出力φ23の周期は、クロック信 φ22の変化よりもδTb/4遅れて基本周期δTbから δTb/4へ変化する。

 図39は、図21に示すモード切替信号生成部 161の概略構成図である。モード切替信号生成 部161は、有限状態機械であり、現在ステート QSを保持する現在ステート記憶部187と、現在 テートQS、入力P#(0)及びP#(-1)に基づいて次ス テートSを決定して現在ステート記憶部187へ 力するとともに次ステートSに対応する論理 Dを出力する次ステート関数部188と、論理値 Dに基づいて出力値Dを出力する出力関数部189 、を備えている。現在ステート記憶部187と 力関数部189とは、クロック信号×8CLKが入力 れる入力クロックCKにより入力データをラ チするフリップフロップなどの記憶素子を いて構成される。モード切替信号生成部162 び163の構成はモード切替信号生成部161の構 と同様である。

 図21を参照すると、モード切替信号生成 161の入力P#(0)にはレジスタ172の出力PQ1が入力 される。したがって並列数に変化があったと き、モード切替信号生成部161の入力P#(0)は、 令投入タイミングクロック信号Ckeを生成す クロックインバータ143の入力P#(0)と同じタ ミングで変化する。また、モード切替信号 成部161の入力P#(-1)にはレジスタ173の出力PQ2d 入力されて、入力P#(-1)は入力P#(0)よりも1基 周期δTb遅れる。

 図40は、図21に示すモード切替信号生成部 161の状態遷移図である。並列数が1である間 すなわちP#(0)=P#(-1)=1である間は、次ステート Sは状態「0」に維持される。P#(0)が4へ変化し とき、次ステートSは状態「4」へ変化し、 の後P#(-1)が4へ変化するまで状態「5」に維持 される。そしてP#(-1)=4となったとき次ステー Sは状態「2」に変わる。その後P#(0)=4かつP#(- 1)=1である間、次ステートSは状態「2」に維持 される。

 図41は、並列数が1から4に変化する際のモー ド切替信号生成部161の内部状態を示すタイム チャートである。並列数が1であるときモー 切替信号生成部161の出力CKEN20は「L」であり 図20に示すパイプラインレジスタ211~219は入 値をそのまま出力するトランスペアレント ードで動作する。
 並列数が1から4に変化すると、モード切替 号CKEN20の値は、クロック信号φ20の周期がδTb /4へ変化するよりもδTb/8早く「H」に変化し、 パイプラインレジスタ211~219はフリップフロ プモードで動作し始める。

 図21を参照すると、モード切替信号生成部16 2の入力P#(0)にはレジスタ174の出力PQ2が入力さ れる。したがって並列数に変化があったとき 、モード切替信号生成部162の入力P#(0)は、モ ド切替信号CKEN20を生成するモード切替信号 成部161の入力P#(0)よりもδTb/4だけ遅れたタ ミングで変化する。また、モード切替信号 成部162の入力P#(-1)にはレジスタ175の出力PQ3 入力されて、入力P#(-1)は入力P#(0)よりもδTb/4 遅れる。
 また、モード切替信号生成部163の入力P#(0) はレジスタ175の出力PQ3が入力される。した って並列数に変化があったとき、モード切 信号生成部163の入力P#(0)は、モード切替信号 CKEN21を生成するモード切替信号生成部162の入 力P#(0)よりもδTb/4だけ遅れたタイミングで変 する。また、モード切替信号生成部163の入 P#(-1)にはレジスタ176の出力PQ4が入力されて 入力P#(-1)は入力P#(0)よりもδTb/4遅れる。

 図42及び図43は、それぞれ図21に示すモード 替信号生成部162及び163の状態遷移図である 並列数が1から4に変わる際に生じるクロッ インバータ162及び163の状態遷移は、クロッ インバータ152に生じる状態遷移と同様であ 。このため図44に示すように、並列数が1で るときモード切替信号生成部162及び163の出 CKEN21及びCKEN22は「L」であり、図20に示すパ プラインレジスタ221~228及び231~237はトランス ペアレントモードで動作する。
 並列数が1から4に変化すると、モード切替 号CKEN21の値は、クロック信号φ21の周期がδTb /4へ変化するよりもδTb/8早く「H」に変化し、 パイプラインレジスタ221~228はフリップフロ プモードで動作し始める。またモード切替 号CKEN22の値は、クロック信号φ22の周期がδTb /4へ変化するよりもδTb/8早く「H」に変化し、 パイプラインレジスタ231~237はフリップフロ プモードで動作し始める。

 並列数が1から4に変化したとき、図21に示す クロック制御部19は、上述のとおりクロック 号φ21~23及びモード切替信号CKEN20~CKEN22を変 する。
 この結果、図24に示すとおり、並列数P#が4 ある命令Com#4及びCom#5をデコードすることに って生じた複数の実行コード#4a~#4d及び#5a~#5 dは、周期δTb/4で各部分演算ユニット201~204へ 次供給される。

 そして、#4b及びこれに続く実行コードは、 分演算ユニット201へ供給されるタイミング りもδTb/4遅れて部分演算ユニット202へ供給 れ、部分演算ユニット202へ供給されるタイ ングよりもδTb/4遅れて部分演算ユニット203 供給され、部分演算ユニット203へ供給され タイミングよりもδTb/4遅れて部分演算ユニ ト204へ供給される。
 したがって並列数P#が4であるとき、演算部1 7に供給された1つの32ビット演算は、桁方向 4つの部分的演算に分割されて、これら部分 演算はそれぞれ部分演算ユニット201~204に割 り当てられる。そして、部分演算ユニット201 は割り当てられた部分的演算を部分演算ユニ ット202よりもδTb/4だけ早く実行し、部分演算 ユニット202は割り当てられた部分的演算を部 分演算ユニット203よりもδTb/4だけ早く実行し 、部分演算ユニット203は割り当てられた部分 的演算を部分演算ユニット204よりもδTb/4だけ 早く実行する。
 そしてある時点について見ると、部分演算 ニット201~204は、4つの異なる32ビット演算に 属する部分的演算を並列に実行する。このよ うな部分演算ユニット201~204の動作によって 演算部17は4つの演算を並列に実行するパイ ライン処理を開始する。

 以下、並列数1から2へ変化するときのプ セッサ1の動作を説明する。図45は並列数が1 ら2に変化する際のフェッチ段におけるプロ セッサ1の動作を示すタイムチャートであり 図46は並列数が1から2に変化する際のデコー 段におけるプロセッサ1の動作を示すタイム チャートであり、図47は、並列数が1から2に 化する際の実行段におけるプロセッサ1の動 を示すタイムチャートである。なお、図46 び図47に示す各記号の用法は、図23及び図24 示す記号の用法と同じである。

 図45に示すとおり、サイクルT0に命令バッ ファ11の読み込まれた命令Com#3の並列数は1で り、サイクルT1で読み込んだ命令Com#4におい て並列数が1から2へと変化し、サイクルT1~T4 て命令バッファ11の読み込まれた命令Com#4~7 並列数が2であったと仮定する。

 図45及び図46に示すように、サイクルT1に いてメインデコーダ12の並列数信号生成部11 1は、命令バッファ11から命令Com#4を受信する 、並列数信号の値P#を1から2に変更する。こ のときクロック信号Ckdは、メインデコーダ12 て並列数信号P#の変化が検出された時刻よ も(1+1/8)×基本周期δTbだけ遅れて周期が変化 る。またクロック信号Ckeは、クロック信号C kdよりも基本周期δTb遅れて周期が変化する。

 以下、図47に示すクロック信号φ20~φ23を生 するクロックインバータ151~154の動作と、図4 7に示すモード切替信号CKEN20~φ22を生成するモ ード切替信号生成部161~163の動作を説明する
 図32に示すとおり、図21に示すクロックイン バータ151では、並列数が1である間、すなわ P#(0)=P#(-1)=1である間は、状態「0」から「7」 でを巡回するように次ステートが決定され 。
 並列数が1から2に変化することによりP#(0)が 2へ変化したとき、次ステートSは参照符号J4-1 によって示した線に沿って状態「26」へ変化 る。そしてP#(0)=2かつP#(-1)=1である間、状態 26」から「29」までを巡回するように次ステ ートが決定される。
 P#(0)が2へ変化してから1基本周期δTbが経過 ると、P#(-1)が2へ変化する。このとき、次ス ートSは参照符号J4-2によって示した線に沿 て状態「8」へ変化する。そしてそれ以降、 態「8」から「11」までの値を巡回するよう 次ステートが決定される。並列数が1から2 変化する際のクロックインバータ151の内部 態のタイムチャートを図48に示す。

 図34に示すとおり、図21に示すクロックイン バータ152では、並列数が1である間は、状態 0」から「7」までを巡回するように次ステー トSが決定される。
 並列数が1から2に変化することによりP#(0)が 2へ変化したとき、次ステートSは参照符号J4-1 によって示した線に沿って状態「30」へ変化 る。そしてP#(0)=2かつP#(-1)=1である間、次ス ートSは状態「30」に維持さえる。

 P#(0)が2へ変化してからδTb/4が経過すると、P #(-1)が2へ変化する。このとき、次ステートS 参照符号J4-2によって示した線に沿って状態 8」へ変化する。それ以降、状態「8」から 11」までを巡回するように次ステートSが決 される。
 並列数が1から2に変化する場合のクロック ンバータ152の内部状態のタイムチャートを 49に示す。

 図36に示すとおり、図21に示すクロックイン バータ153では、並列数が1である間は、状態 0」から「7」までを巡回するように次ステー トSが決定される。
 並列数が1から2に変化することによりP#(0)が 2へ変化したとき、次ステートSは参照符号J4-1 によって示した線に沿って状態「30」へ変化 る。そしてP#(0)=2かつP#(-1)=1である間次ステ トSは状態「30」に維持される。

 P#(0)が2へ変化してからδTb/4が経過すると、P #(-1)が2へ変化する。このとき、次ステートS 参照符号J4-2によって示した線に沿って状態 31」へ変化する。その後次ステートSは状態 31」を2回繰り返してから、参照符号J4-3によ って示した線に沿って「8」へ遷移する。そ て状態「8」から「11」までを巡回するよう 次ステートSが決定される。
 並列数が1から2に変化する場合のクロック ンバータ153の内部状態のタイムチャートを 50に示す。

 図38に示すとおり、図21に示すクロックイン バータ154では、並列数が1である間は、状態 0」から「7」までを巡回するように次ステー トSが決定される。
 P#(0)が2へ変化したとき、次ステートSは参照 符号J4-1によって示した線に沿って状態「30」 へ変化する。そしてP#(0)=2かつP#(-1)=1である間 次ステートSは状態「30」に維持される。

 P#(0)が2へ変化してからδTb/4が経過すると、P #(-1)が2へ変化する。このとき、次ステートS 参照符号J4-2によって示した線に沿って状態 8」へ変化する。そして状態「8」から「11」 までを巡回するように次ステートSが決定さ る。
 並列数が1から2に変化する場合のクロック ンバータ154の内部状態のタイムチャートを 50に示す。

 図40に示すとおり、図21に示すモード切替 信号生成部161では、並列数が1である間、す わちP#(0)=P#(-1)=1である間は、次ステートSは 態「0」に維持される。P#(0)が2へ変化したと 、次ステートSは状態「11」へ変化し、P#(-1) 2へ変化するまで状態「11」に維持される。 してP#(-1)=2となったとき次ステートSは状態 9」に変わる。その後次ステートSは状態「9 に維持される。並列数が1から2に変化する 合のモード切替信号生成部161の内部状態の イムチャートを図51に示す。

 図42に示すとおり、図21に示すモード切替 信号生成部162では、並列数が1である間は、 ステートSは状態「0」である。P#(0)が2へ変化 したとき、次ステートSは状態「11」へ変化し 、P#(-1)が2へ変化するまで状態「11」に維持さ れる。そしてP#(-1)=2となったとき次ステートS は状態「1」へ変わる。その後、次ステートS 状態「1」に維持される。並列数が1から2に 化する場合のモード切替信号生成部162の内 状態のタイムチャートを図52に示す。

 図43に示すとおり、図21に示すモード切替 信号生成部163では、並列数が1である間は、 ステートSは状態「0」である。P#(0)が2へ変化 したとき、次ステートSは状態「11」へ変化し 、P#(-1)が2へ変化するまで状態「11」に維持さ れる。そしてP#(-1)=2となったとき次ステートS を値を「9」へ変える。その後次ステートSは 態「9」に維持される。並列数が1から2に変 する場合のモード切替信号生成部163の内部 態のタイムチャートを図52に示す。

 図51及び図52に示すとおり並列数が1から2に 化するとき、モード切替信号CKEN20及びCKEN22 値は「L」に維持され、図20に示すパイプラ ンレジスタ211~219及び231~237はトランスペア ントモードで動作する。
 一方で、モード切替信号CKEN21は、サイクルT 3’の中間にて「L」から「H」へ変化する。こ れにより、図20に示すパイプラインレジスタ2 21~228はサイクルT3’の中間にてフリップフロ プモードへ変化する。

 その結果、図7に示す演算ユニット200の動 作タイムチャートと同様に、演算部17の第1部 分演算ユニット201及び第2部分演算ユニット20 2が同じ32ビット演算の部分演算を同時に実行 し、第3部分演算ユニット203及び第4部分演算 ニット204は、第1部分演算ユニット201が演算 した32ビット演算よりも基本周期の1/2の期間( δTb/2)前に演算部17に入力された32ビット演算 部分演算を実行する。このような部分演算 ニット201~204の動作によって、演算部17は2つ の演算を並列に実行するパイプライン処理を 開始する。

 以下、並列数4から1へ変化するときのプ セッサ1の動作を説明する。図53は並列数が4 ら1に変化する際のフェッチ段におけるプロ セッサ1の動作を示すタイムチャートであり 図54は並列数が4から1に変化する際のデコー 段におけるプロセッサ1の動作を示すタイム チャートであり、図55は、並列数が4から1に 化する際の実行段におけるプロセッサ1の動 を示すタイムチャートである。なお、図54 び図55に示す各記号の用法は、図23及び図24 示す記号の用法と同じである。

 図53に示すとおり、サイクルT0に命令バッフ ァ11の読み込まれた命令Com#3の並列数は4であ 、サイクルT1で読み込んだ命令Com#4において 並列数が4から1へと変化し、サイクルT1~T4に 命令バッファ11の読み込まれた命令Com#4~6の 列数が1であったと仮定する。
 図53及び図54に示すように、サイクルT1にお てメインデコーダ12の並列数信号生成部111 、命令バッファ11から命令Com#4を受信すると 並列数信号の値P#を4から1に変更する。また ストール信号生成部113は、図15を参照して説 するように、前回受信した命令の並列数P# 1より大きくかつ前回受信した命令の並列数 今回受信した命令の並列数P#とが異なるの 、ストール信号を生成する。このため基本 期δTbの間、シングル命令デコード部115はNOP 令を発行する。
 並列数が1以上の命令を実行されている間に は、演算部17内のパイプラインレジスタ211~219 、221~228及び231~237に、実行コードCodeExe、入力 データA及びBと、演算結果並びにキャリーが 持されている。したがって、並列数が変わ た命令Com#4よりも以前の命令に含まれた演 を全て完了した後でなければ、命令Com#4の並 列数に応じてクロック信号φ20~φ23及びモード 切換信号CKEN20~22を変更することができない。 このために、既に並列数が1以上の命令が実 されているときに並列数の変更があった場 には、メインデコーダ12は基本周期δTbの間NO P命令を発行する。

 以下、図55に示すクロック信号φ20~φ23を生 するクロックインバータ151~154の動作と、図5 5に示すモード切替信号CKEN20~φ22を生成するモ ード切替信号生成部161~163の動作を説明する
 図32に示すとおり、図21に示すクロックイン バータ151では、並列数が4である間、すなわ P#(0)=P#(-1)=4である間は、次ステートSは、交 に状態「12」及び「13」になる。
 並列数が4から1に変化することによりP#(0)が 1へ変化したとき、次ステートSは参照符号J2-1 によって示した線に沿って状態「18」へ変化 る。そしてその後P#(-1)が1へ変化するまで、 ステートSは状態「19」に維持される。
 P#(0)が1へ変化してから1基本周期δTbが経過 ると、P#(-1)が1へ変化する。このとき、次ス ートSは参照符号J2-2によって示した線に沿 て状態「0」へ変化する。そしてそれ以降、 態「0」から「7」までを巡回するように次 テートSが決定される。並列数が4から1に変 する場合のクロックインバータ151の内部状 のタイムチャートを図56に示す。

 図34に示すとおり、図21に示すクロックイン バータ152では、並列数が4である間は、次ス ートSは、交互に状態「12」及び「13」になる 。
 P#(0)が1へ変化したとき、次ステートSは参照 符号J2-1によって示した線に沿って状態「20」 へ変化する。その後P#(-1)が1へ変化するまで テートSは状態「21」に維持される。
 P#(0)が1へ変化してからδTb/4が経過すると、P #(-1)が1へ変化する。このとき、次ステートS 参照符号J2-2によって示した線に沿って状態 23」へ遷移する。次ステートSは状態「23」 4回繰り返してから、参照符号J2-3によって示 した線に沿って状態「0」へ遷移する。そし それ以降、状態「0」から「7」までを巡回す るように次ステートSが決定される。並列数 4から1に変化する場合のクロックインバータ 152の内部状態のタイムチャートを図57に示す

 図36に示すとおり、図21に示すクロックイン バータ153では、並列数が4である間は、次ス ートSは、交互に状態「12」及び「13」となる 。
 P#(0)が1へ変化したとき、次ステートSは参照 符号J2-1によって示した線に沿って状態「20」 へ変化する。その後P#(-1)が1へ変化するまで テートSは状態「21」に維持される。
 P#(0)が1へ変化してからδTb/4が経過すると、P #(-1)が1へ変化する。このとき、次ステートS 参照符号J2-2によって示した線に沿って状態 23」へ遷移する。次ステートSは状態「23」 2回繰り返してから、参照符号J2-3によって示 した線に沿って状態「0」へ遷移する。そし それ以降、状態「0」から「7」までを巡回す るように次ステートSが決定される。並列数 4から1に変化する場合のクロックインバータ 153の内部状態のタイムチャートを図58に示す

 図38に示すとおり、図21に示すクロックイン バータ154では、並列数が4である間は、次ス ートSの値は交互に状態「12」及び「13」にな る。
 P#(0)が1へ変化したとき、次ステートSは参照 符号J2-1によって示した線に沿って状態「21」 へ変化する。その後P#(-1)が1へ変化するまで テートSは状態「21」に維持される。
 P#(0)が1へ変化してからδTb/4が経過すると、P #(-1)が1へ変化する。このとき、次ステートS 参照符号J2-2によって示した線に沿って「0」 へ遷移する。そしてそれ以降、状態「0」か 「7」までを巡回するように次ステートSが決 定される。並列数が4から1に変化する場合の ロックインバータ154の内部状態のタイムチ ートを図58に示す。

 図40に示すとおり、図21に示すモード切替 信号生成部161では、並列数が4である間、す わちP#(0)=P#(-1)=4である間は、次ステートSは 態「2」である。P#(0)が1へ変化すると、次ス ートSの値はP#(-1)が1へ変化するまで状態「3 に維持される。そしてP#(-1)=1となったとき ステートSは状態「0」になる。並列数が4か 1に変化する場合のモード切替信号生成部161 内部状態のタイムチャートを図59に示す。

 図42に示すとおり、図21に示すモード切替 信号生成部162では、並列数が4である間、次 テートSは状態「2」である。P#(0)が1へ変化す ると、次ステートSはP#(-1)が1へ変化するまで 態「3」に維持される。そしてP#(-1)=1となっ とき次ステートSの値は「6」へ遷移する。 の後、次ステートSは状態「6」を4回繰り返 てから「0」へ遷移する。並列数が4から1に 化する場合のモード切替信号生成部162の内 状態のタイムチャートを図60に示す。

 図43に示すとおり、図21に示すモード切替 信号生成部163では、並列数が4である間、次 テートSは状態「2」である。P#(0)が1へ変化す ると、次ステートSはP#(-1)が1へ変化するまで 態「3」に維持される。そしてP#(-1)=1となっ とき次ステートSの値は「6」へ遷移する。 の後、次ステートSは状態「6」を2回繰り返 てから、「0」へ遷移する。並列数が4から1 変化する場合のモード切替信号生成部163の 部状態のタイムチャートを図60に示す。

 図55に示すとおり、並列数が4から1に変化 したとき、演算部17は、NOP命令を受信したサ クルT3’の間に、並列数P#が4である命令Com#3 に含まれた全ての演算を完了し、続くサイク ルT4’以降において並列数P#が1である命令Com# 4~6に含まれる演算を実行する。

 以下、並列数2から4へ変化するときのプ セッサ1の動作を説明する。図61は並列数が2 ら4に変化する際のフェッチ段におけるプロ セッサ1の動作を示すタイムチャートであり 図62は並列数が2から4に変化する際のデコー 段におけるプロセッサ1の動作を示すタイム チャートであり、図63は、並列数が2から4に 化する際の実行段におけるプロセッサ1の動 を示すタイムチャートである。なお、図62 び図63に示す各記号の用法は、図23及び図24 示す記号の用法と同じである。

 図61に示すとおり、サイクルT0に命令バッフ ァ11の読み込まれた命令Com#3の並列数は2であ 、サイクルT1で読み込んだ命令Com#4において 並列数が2から4へと変化し、サイクルT1~T4に 命令バッファ11の読み込まれた命令Com#4~6の 列数が4であったと仮定する。
 図61及び図62に示すように、サイクルT1にお てメインデコーダ12の並列数信号生成部111 、命令バッファ11から命令Com#4を受信すると 並列数信号の値P#を2から4に変更する。また ストール信号生成部113は、前回受信した命令 の並列数P#が1より大きく、かつ前回受信した 命令の並列数と今回受信した命令の並列数P# が異なるので、ストール信号を生成する。 の結果、基本周期δTbの間、命令キュー117は NOP命令を発行する。

 以下、図63に示すクロック信号φ20~φ23を生 するクロックインバータ151~154の動作と、図6 3に示すモード切替信号CKEN20~φ22を生成するモ ード切替信号生成部161~163の動作を説明する
 図32に示すとおり、図21に示すクロックイン バータ151では、並列数が2である間、すなわ P#(0)=P#(-1)=2である間は、状態「8」から「11」 までを巡回するように次ステートSが決定さ る。
 並列数が2から4に変化することによりP#(0)が 4へ変化したとき、次ステートSは参照符号J3-1 によって示した線に沿って状態「25」へ変化 る。そしてP#(0)=4かつP#(-1)=2である間、その ステートSは状態「25」に維持される。

 P#(0)が4に変化してから1基本周期δTbが経 すると、P#(-1)が4へ変化する。このとき、次 テートSは参照符号J3-2によって示した線に って状態「32」へ遷移する。次ステートSは 態「32」を2回繰り返してから、参照符号J3-3 よって示した線に沿って状態「12」へ遷移 る。その後、次ステートSは交互に状態「12 及び「13」となる。並列数が2から4に変化す 場合のクロックインバータ151の内部状態の イムチャートを図64に示す。

 図34に示すとおり、図21に示すクロックイン バータ152では、並列数が2である間は、状態 8」から「11」までを巡回するように次ステ トSが決定される。
 P#(0)が4へ変化したとき、次ステートSは参照 符号J3-1によって示した線に沿って状態「25」 へ変化する。そしてP#(0)=4かつP#(-1)=2である間 、その後ステートSは状態「25」に維持される 。

 P#(0)が4に変化してからδTb/4が経過すると P#(-1)が4へ変化する。このとき、次ステート Sは参照符号J3-2によって示した線に沿って状 「32」へ遷移する。次ステートSは状態「32 を8回繰り返してから、参照符号J3-3によって 示した線に沿って状態「12」へ遷移する。そ 後、次ステートSは交互に状態「12」及び「1 3」となる。並列数が2から4に変化する場合の クロックインバータ152の内部状態のタイムチ ャートを図65に示す。

 図36及び図38に示すとおり、図21に示すクロ クインバータ153及び154では、並列数が2であ る間は、状態「8」から「11」までを巡回する ように次ステートSが決定される。
 P#(0)が4へ変化したとき、次ステートSは参照 符号J3-1によって示した線に沿って状態「25」 へ変化する。P#(0)=4かつP#(-1)=2である間ステー トSは状態「25」に維持される。

 P#(0)が4に変化してからδTb/4が経過すると P#(-1)が4へ変化する。このとき、次ステート Sは参照符号J3-2によって示した線に沿って状 「32」へ遷移する。次ステートSは状態「32 を8回繰り返してから、参照符号J3-3によって 示した線に沿って状態「12」へ遷移する。そ 後、次ステートSは交互に状態「12」及び「1 3」となる。並列数が2から4に変化する場合の クロックインバータ153及び154の内部状態のタ イムチャートを図66に示す。

 図40に示すとおり、図21に示すモード切替 信号生成部161では、並列数が2である間、す わちP#(0)=P#(-1)=2である間は、次ステートSは 態「9」である。P#(0)が4へ変化したとき次ス ートSは状態「7」へ変化し、P#(-1)=4となった とき次ステートSは、一度状態「8」になった に状態「2」となる。並列数が2から4に変化 る場合のモード切替信号生成部161の内部状 のタイムチャートを図67に示す。

 図42に示すとおり、図21に示すモード切替 信号生成部162では、並列数が2である間は次 テートSは状態「1」である。P#(0)が4へ変化し たとき、次ステートSは状態「10」へ変化し、 P#(-1)=4となったとき次ステートSは状態「2」 変化する。並列数が2から4に変化する場合の モード切替信号生成部162の内部状態のタイム チャートを図68に示す。

 図43に示すとおり、図21に示すモード切替 信号生成部163では、並列数が2である間は、 ステートSは状態「9」である。P#(0)が4へ変化 したとき次ステートSは状態「7」に変化し、 してP#(-1)=4となったとき次ステートSは、状 「8」を7回繰り返してから、状態「2」へ遷 する。並列数が2から4に変化する場合のモ ド切替信号生成部163の内部状態のタイムチ ートを図68に示す。

 図63に示すとおり、並列数が2から4に変化し たとき、演算部17は、NOP命令を受信したサイ ルT3’の間に、並列数P#が2である命令Com#3に 含まれた全ての演算を完了する。
 そしてサイクルT4’以降において、演算部17 は、並列数P#が4である命令Com#4及びCom#5をデ ードすることによって生じた複数の実行コ ド#4a~#4d及び#5a~#5dにより指定される演算を並 列に実行する、パイプライン処理を開始する 。

 図69は、本発明によるスーパースカラプロ ッサの実施例を示す概略構成図である。プ セッサ1は、命令バッファ11とメインデコー 312との間に、命令バッファ11にフェッチされ た命令のうち複数の命令を同時にメインデコ ーダ312にディスパッチャ20を備える。
 また、図示するとおり本実施例によるプロ ッサ1は、図10を参照して説明した第1実施例 によるプロセッサと同様の構成を有しており 、同じ構成要素には同じ参照番号を付与して 説明を省略する。

 ディスパッチャ20は、メインデコーダ312に 時に発行する命令数を動的に変更すること でき、同時に発行する命令数をクロック制 部19へ並列数P#として通知する。
 ここで、図15に示すメインデコーダ12が1つ VLIW命令から形成したN個の中間コード(N=1、2 は4)を出力するときに、N個の中間コードを Tb/N間隔で出力したのと同様に、ディスパッ ャ20から同時に受信したN個の命令をデコー して得たN個の中間コードをδTb/N間隔で出力 できるようにメインデコーダ312を構成する。 かつクロック制御部19を、図21に示すクロッ 制御部と同様に、Ckd、Cke、φ20~23等の各クロ ク信号及びモード切替信号CKEN20~CKEN22を生成 するように構成する。

 このようにディスパッチャ20、メインデ ーダ312及びクロック制御部19を構成すること によって、VLIW命令に含まれる複数の演算が 10に示すプロセッサ1において並列に実行さ たのと同様に、ディスパッチャ20により同時 に発行された複数の命令のそれぞれ含まれる 演算は、演算部17のパイプライン処理によっ 並列に実行される。

 以上、本発明の好適な実施態様について 述したが、当業者が種々の修正及び変更を し得ること、並びに、特許請求の範囲は本 明の真の精神および趣旨の範囲内にあるこ 様な全ての修正及び変更を包含することは 本発明の範囲に含まれることは当業者に理 されるべきものである。

 本発明は、一般に複数の命令を並列して 行可能なプロセッサに利用可能である。特 VLIWプロセッサやスーパースカラプロセッサ に利用可能である。