(57)【要約】  プロセッサ１の実行ステージにおいて所定桁長の演算を行う演算ユニット１７は、所定桁長の演算を桁方向に分割した各演算をそれぞれ異なるパイプラインステージにおいて実行する複数の部分演算ユニット２０１〜２０４と、各パイプラインステージ間を各々区切る複数のパイプラインレジスタ２１１〜２１３、２２１〜２２７、２３１〜２３７、２４１〜２４６と、を備え、各パイプラインレジスタ２１１〜２１３、２２１〜２２７、２３１〜２３７、２４１〜２４６は、入力トリガに同期して出力値を更新するフリップフロップモードと、入力値をそのまま出力するトランスペアレントモードと、２つの動作モード間で切り替え可能に動作する。
2008142750.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサの実行ステージにおいて所定桁長の演算を行う演算ユニットであって、
前記所定桁長の演算を桁方向に分割した各演算をそれぞれ異なるパイプラインステージにおいて実行する複数の部分演算ユニットと、
各前記パイプラインステージ間を各々区切る複数のパイプラインレジスタと、
を備えることを特徴とする演算ユニット。
【請求項２】
前記パイプラインレジスタは、入力トリガに同期して出力値を更新するフリップフロップモードと、入力値をそのまま出力するトランスペアレントモードと、２つの動作モード間で切り替え可能に動作することを特徴とする請求項１に記載の演算ユニット。
【請求項３】
請求項１に記載の演算ユニットを備え、該演算ユニットにより実行ステージにおける前記所定桁長の演算を行うプロセッサであって、
前記部分演算ユニットの演算桁長は、前記所定桁長の演算をＮ（Ｎは２以上の整数）等分した桁長であり、
前記所定桁長の演算１つに使用する期間の１／Ｎ倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック生成部を備える、
ことを特徴とするプロセッサ。
【請求項４】
請求項２に記載の演算ユニットを備え、該演算ユニットにより実行ステージにおける前記所定桁長の演算を行うプロセッサであって、
前記部分演算ユニットの演算桁長は、前記所定桁長の演算をＮ（Ｎは２以上の整数）等分した桁長であり、
前記所定桁長の演算１つに使用する期間の１／Ｎ倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック制御部と、
前記約数に応じて、各前記パイプラインレジスタの動作モードを前記フリップフロップモード及び前記トランスペアレントモードのいずれかにそれぞれ切り替えるパイプラインレジスタ制御部と、
を備えることを特徴とするプロセッサ。
【請求項５】
前記クロック制御部は、前記フェッチステージでフェッチされた命令に含まれる演算実行数に応じて前記約数を選択することを特徴とする請求項４に記載のプロセッサ。
【請求項６】
複数の演算命令を同時に発行するディスパッチ部を備え、
前記クロック制御部は、前記ディスパッチ部により同時に発行される演算数に応じて前記約数を選択することを特徴とする請求項４に記載のプロセッサ。
【請求項７】
演算ユニットと、該演算ユニットへのオペランド及び該演算ユニットの演算結果を保持するレジスタファイルとを備え、該演算ユニットにより実行ステージにおける所定桁長の演算を行うプロセッサのプロセッサアーキテクチャであって、
前記演算ユニットを、前記所定桁長の演算を桁方向にＮ個（Ｎは２以上の整数）に分割した各演算をそれぞれ異なるパイプラインステージにおいて実行する部分演算ユニットと、各前記パイプラインステージ間を区切るパイプラインレジスタと、により構成し、
前記レジスタファイルは、前記所定桁長の演算１つに使用する期間内にＮ回読み書き可能なアクセスレーテンシを有する記憶素子で構成する、
ことを特徴とするプロセッサアーキテクチャ。
【請求項８】
前記パイプラインレジスタを、入力トリガに同期して出力値を更新するフリップフロップモードと、入力値をそのまま出力するトランスペアレントモードと、２つの動作モード間で切り替え可能に動作する記憶素子で構成することを特徴とする請求項７に記載のプロセッサアーキテクチャ。
【請求項９】
前記部分演算ユニットの演算桁長を、前記所定桁長の演算をＮ等分した桁長とし、
前記所定桁長の演算１つに使用する期間の１／Ｎ倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック制御部を、前記プロセッサに設ける、
ことを特徴とする請求項７に記載のプロセッサアーキテクチャ。
【請求項１０】
前記部分演算ユニットの演算桁長を、前記所定桁長の演算をＮ等分した桁長とし、
前記プロセッサに、
前記所定桁長の演算１つに使用する期間の１／Ｎ倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック制御部と、
前記約数に応じて、各前記パイプラインレジスタの動作モードを前記フリップフロップモード及び前記トランスペアレントモードのいずれかにそれぞれ切り替えるパイプラインレジスタ制御部と、
を設けることを特徴とする請求項７に記載のプロセッサアーキテクチャ。
【請求項１１】
前記クロック制御部は、前記フェッチステージでフェッチされた命令に含まれる演算実行数に応じて、前記約数を選択することを特徴とする請求項１０に記載のプロセッサアーキテクチャ。
【請求項１２】
前記プロセッサに、複数の演算命令を同時に発行するディスパッチ部を設け、
前記クロック制御部は、前記ディスパッチ部により同時に発行される演算数に応じて、前記約数を選択することを特徴とする請求項１０に記載のプロセッサアーキテクチャ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の命令を並列して実行可能なプロセッサの構成技術に関する。
【背景技術】
【０００２】
同時に複数の命令を実行することによって処理能力を向上させたプロセッサとして、ＶＬＩＷ（超長形式機械命令：Very Long Instruction Word）プロセッサや、スーパースカラプロセッサが知られている。
図１は、従来のＶＬＩＷプロセッサの概略構成図である。ＶＬＩＷプロセッサ９００は、命令フェッチステージ（ＩＦ）において命令メモリ９０１からＶＬＩＷ命令をフェッチするフェッチユニット９０２と、命令デコードステージ（ＩＤ）においてＶＬＩＷ命令を複数の算術論理演算命令へデコードするデコーダ９１１〜９１４と、実行ステージ（ＥＸ）においてこれら複数の算術論理演算命令を実行する複数の算術論理演算ユニット（ALU）９２１〜９２４と、書き込みステージ（ＷＢ）において演算結果を記憶するレジスタ９３０とを備えている。【０００３】
図２は、従来のスーパースカラプロセッサの概略構成図である。スーパースカラプロセッサ９４０は、命令フェッチステージと命令デコードステージとの間に命令ディスパッチャ９４１を備えている。命令ディスパッチャ９４１は、演算ユニット９２１〜９２４の使用状況に応じて命令実行数や、演算ユニット９２１〜９２４への命令の割り当てを動的に変更する。【０００４】
なお下記特許文献１には、入出力インターフェースを変更することができる複数の処理ユニットを用いて、独立して動作可能な複数のデータパスを構成するデータ処理装置が開示されている。【０００５】
【特許文献１】特開２００４−１０２９８８号公報
【発明の開示】
【０００６】
上記のＶＬＩＷプロセッサやスーパースカラプロセッサのような、複数の命令を並列に実行するプロセッサには、並列に実行することが起こりえる命令数の最大値と同じ数の算術論理演算ユニットを設ける必要があった。
しかしながら、予め用意された数の算術論理演算ユニットを全て使用する機会は少なく、通常の場合はいくつかの算術論理演算ユニットは使用されないかまたはＮＯＰ命令を実行していた。このため次のような無駄が生じていた。
【０００７】
第１に、レジスタファイルや記憶手段と算術論理演算ユニットとの間を接続するデータパスは、用意された算術論理演算ユニットが全て同じレジスタや同じメモリアドレスへ接続できる接続自由度を有する必要がある。一般にチップ面積は、回路規模よりも配線面積や記憶素子面積によって支配的に決定されため、算術論理演算ユニットの実装数が増加するとデータパスの配線面積は急激に増加する。したがって使用頻度が低い算術論理演算ユニットが実装されていると無駄にチップ面積を増加させることになる。
【０００８】
第２に、使用されていない算術論理演算ユニットも電力を消費する。したがって使用頻度が低い算術論理演算ユニットが実装されていると、無駄な電力消費を発生させることになる。
これらの問題点に鑑み、本発明は、プロセッサにおける配線面積と消費電力とを削減することを目的とする。
【０００９】
上記目的を達成するために、本発明では、プロセッサの実行ステージにおいて行われる算術演算又は論理演算などの演算を桁方向に分割することにより複数の部分的な演算に分ける。そして、これら複数の部分的演算を異なるパイプラインステージにおいて実行するパイプライン処理を行う。
このため本発明の第１形態による演算ユニットは、プロセッサの実行ステージにおいて所定桁長の演算を行う演算ユニットであって、所定桁長の演算を桁方向に分割した各演算をそれぞれ異なるパイプラインステージにおいて実行する複数の部分演算ユニットと、各パイプラインステージ間を各々区切る複数のパイプラインレジスタと、を備える。
【００１０】
演算を分割してパイプライン処理によって実行することにより、単一の演算ユニットで複数の演算を並列して行うことが可能となる。このため従来のプロセッサよりも少ない数の演算ユニットを用いて複数の演算を並列に演算を行うことができ、レジスタファイルや記憶手段と演算ユニットとを結ぶデータパスの配線を低減することができる。
すなわち従来のプロセッサでは、複数の演算ユニットとレジスタファイル等との間にそれぞれ個別に設けられたデータパスが、各演算ユニットが１つの演算を行う周期（以下、「基本周期」と示す）の間ずっと占有されていたところ、本発明によれば、１つの演算ユニットがパイプライン処理により複数の演算を並列に実行するので、これら演算のためにそれぞれ行われるレジスタファイル等へアクセスが異なるタイミングで生じる。つまり、本発明によれば、並列に実行される複数の演算においてそれぞれ行われるレジスタファイル等へアクセスが１つの基本周期の中で時分割多重化されるので、これら複数の演算の間で１つのデータパスを共用することができる。
【００１１】
パイプラインレジスタは、入力トリガに同期して出力値を更新するフリップフロップモードと、入力値をそのまま出力するトランスペアレントモードと、からなる２つの動作モード間で切り替え可能に動作する記憶素子で構成してよい。このようにパイプラインレジスタを構成することにより、演算ユニットが実行するパイプライン処理のパイプライン段数を変更することができるようになる。これによって、演算ユニットが並列して実行する命令数を加減し、必要最低限の実行命令数で処理することにより消費電力を節約することができる。
【００１２】
本発明の第２形態によれば、第１形態の演算ユニットにより実行ステージにおける所定桁長の演算を行うプロセッサが提供される。ここで、部分演算ユニットの演算桁長は、所定桁長の演算をＮ（Ｎは２以上の整数）等分した桁長であり、プロセッサは、所定桁長の演算に使用する期間の１／Ｎ倍の長さの周期を有する動作周波数のＮ倍の動作周波数でパイプラインステージを動作させるクロック生成部を備える。
【００１３】
本発明の第３形態によれば、演算ユニットにより実行ステージにおける所定桁長の演算を行うプロセッサのプロセッサアーキテクチャが提供される。本アーキテクチャでは、演算ユニットを、所定桁長の演算を桁方向に分割した各演算をそれぞれ異なるパイプラインステージにおいて実行する部分演算ユニットと、各パイプラインステージ間を区切るパイプラインレジスタと、により構成し、演算ユニットへのオペランド及び演算ユニットの演算結果を記憶する記憶手段を、所定桁長の演算に使用する期間の１／Ｎ倍の長さの周期を有する動作周波数の整数倍の速度で動作するパイプラインステージがアクセス可能なアクセスレーテンシの記憶素子で構成する。
【００１４】
本発明により、プロセッサにおける配線面積と消費電力とが削減される。したがって、特に、携帯電話用ＬＳＩ等といった省電力であることが要求されるＬＳＩや、低コストの電子部品において、本発明による演算ユニットやプロセッサを好適に利用できる。
【図面の簡単な説明】
【００１５】
【図１】従来のＶＬＩＷプロセッサの概略構成図である。
【図２】従来のスーパースカラプロセッサの概略構成図である。
【図３】従来の演算ユニットの模式図である。
【図４】本発明による演算ユニットの基本構成図である。
【図５】図４に示すパイプラインレジスタの概略構成図である。
【図６】並列数が１のときの演算ユニットの動作のタイムチャートである。
【図７】並列数が２のときの演算ユニットの動作のタイムチャートである。
【図８】並列数が４のときの演算ユニットの動作のタイムチャートである。
【図９】本発明によるプロセッサの基本動作を示す模式図である。
【図１０】本発明によるＶＬＩＷプロセッサの実施例を示す概略構成図である。
【図１１】命令メモリ、プログラムカウンタ制御部、命令バッファ、メインデコーダ、演算部、ＷＲデコーダ及びクロック制御部の間の接続関係を示す図である。
【図１２】メインデコーダ、レジスタユニット、ＬＳデコーダ、データメモリ、アドレス演算器、演算部及びクロック制御部の間の接続関係を示す図である。
【図１３】演算部、ＷＲレコーダ、プログラムカウンタ制御部、データメモリ及びクロック制御部の間の接続関係を示す図である。
【図１４】プログラムカウンタ制御部の概略構成図である。
【図１５】メインデコーダの概略構成図である。
【図１６】本プロセッサにより解読される命令の種類を例示する図である。
【図１７Ａ】シングル命令デコード部によるデコードの説明図（その１）である。
【図１７Ｂ】シングル命令デコード部によるデコードの説明図（その２）である。
【図１８Ａ】並列命令デコード部によるデコードの説明図（その１）である。
【図１８Ｂ】並列命令デコード部によるデコードの説明図（その２）である。
【図１９】レジスタユニットの概略構成図である。
【図２０】演算部の概略構成図である。
【図２１】クロック制御部の概略構成図である。
【図２２】並列数が１から４に変化する際のフェッチ段におけるプロセッサの動作を示すタイムチャートである。
【図２３】並列数が１から４に変化する際のデコード段におけるプロセッサの動作を示すタイムチャートである。
【図２４】並列数が１から４に変化する際の実行段におけるプロセッサの動作を示すタイムチャートである。
【図２５】並列数が１から４に変化する際の信号ＣｋｗとＢｒａｎｃｈＣｎｔｒｌの変化を示すタイムチャートである。
【図２６】図２１に示すクロックインバータ１４０の概略構成図である。
【図２７】図２６に示すクロックインバータ１４０の状態遷移図である。
【図２８】図２１に示すクロックインバータ１４０の内部状態を示すタイムチャートである。
【図２９】図２１に示すクロックインバータ１４１〜１４３の内部状態を示すタイムチャートである。
【図３０】図２１に示すクロックインバータ１４２、１４３の内部状態を示すタイムチャートである。
【図３１】図２１に示すクロックインバータ１５１の概略構成図である。
【図３２】図２１に示すクロックインバータ１５１の状態遷移図である。
【図３３】並列数が１から４に変化する際のクロックインバータ１５１の内部状態を示すタイムチャートである。
【図３４】図２１に示すクロックインバータ１５２の状態遷移図である。
【図３５】並列数が１から４に変化する際のクロックインバータ１５２の内部状態を示すタイムチャートである。
【図３６】図２１に示すクロックインバータ１５３の状態遷移図である。
【図３７】並列数が１から４に変化する際のクロックインバータ１５３及び１５４の内部状態を示すタイムチャートである。
【図３８】図２１に示すクロックインバータ１５４の状態遷移図である。
【図３９】図２１に示すモード切替信号生成部１６１の概略構成図である。
【図４０】図２１に示すモード切替信号生成部１６１の状態遷移図である。
【図４１】並列数が１から４に変化する際のモード切替信号生成部１６１の内部状態を示すタイムチャートである。
【図４２】図２１に示すモード切替信号生成部１６２の状態遷移図である。
【図４３】図２１に示すモード切替信号生成部１６３の状態遷移図である。
【図４４】並列数が１から４に変化する際のモード切替信号生成部１６２及び１６３の内部状態を示すタイムチャートである。
【図４５】並列数が１から２に変化する際のフェッチ段におけるプロセッサの動作を示すタイムチャートである。
【図４６】並列数が１から２に変化する際のデコード段におけるプロセッサの動作を示すタイムチャートである。
【図４７】並列数が１から２に変化する際の実行段におけるプロセッサの動作を示すタイムチャートである。
【図４８】並列数が１から２に変化する際のクロックインバータ１５１の内部状態を示すタイムチャートである。
【図４９】並列数が１から２に変化する際のクロックインバータ１５２の内部状態を示すタイムチャートである。
【図５０】並列数が１から２に変化する際のクロックインバータ１５３及び１５４の内部状態を示すタイムチャートである。
【図５１】並列数が１から２に変化する際のモード切替信号生成部１６１の内部状態を示すタイムチャートである。
【図５２】並列数が１から２に変化する際のモード切替信号生成部１６２及び１６３の内部状態を示すタイムチャートである。
【図５３】並列数が４から１に変化する際のフェッチ段におけるプロセッサの動作を示すタイムチャートである。
【図５４】並列数が４から１に変化する際のデコード段におけるプロセッサの動作を示すタイムチャートである。
【図５５】並列数が４から１に変化する際の実行段におけるプロセッサの動作を示すタイムチャートである。
【図５６】並列数が４から１に変化する際のクロックインバータ１５１の内部状態を示すタイムチャートである。
【図５７】並列数が４から１に変化する際のクロックインバータ１５２の内部状態を示すタイムチャートである。
【図５８】並列数が４から１に変化する際のクロックインバータ１５３及び１５４の内部状態を示すタイムチャートである。
【図５９】並列数が４から１に変化する際のモード切替信号生成部１６１の内部状態を示すタイムチャートである。
【図６０】並列数が４から１に変化する際のモード切替信号生成部１６２及び１６３の内部状態を示すタイムチャートである。
【図６１】並列数が２から４に変化する際のフェッチ段におけるプロセッサの動作を示すタイムチャートである。
【図６２】並列数が２から４に変化する際のデコード段におけるプロセッサの動作を示すタイムチャートである。
【図６３】並列数が２から４に変化する際の実行段におけるプロセッサの動作を示すタイムチャートである。
【図６４】並列数が２から４に変化する際のクロックインバータ１５１の内部状態を示すタイムチャートである。
【図６５】並列数が２から４に変化する際のクロックインバータ１５２の内部状態を示すタイムチャートである。
【図６６】並列数が２から４に変化する際のクロックインバータ１５３及び１５４の内部状態を示すタイムチャートである。
【図６７】並列数が２から４に変化する際のモード切替信号生成部１６１の内部状態を示すタイムチャートである。
【図６８】並列数が２から４に変化する際のモード切替信号生成部１６２及び１６３の内部状態を示すタイムチャートである。
【図６９】本発明によるスーパースカラプロセッサの実施例を示す概略構成図である。
【符号の説明】
【００１６】
２０１〜２０４    部分演算ユニット
２１１〜２１９、２２１〜２２８、２３１〜２３７    パイプラインレジスタ
【発明を実施するための最良の形態】
【００１７】
図３〜図９を参照して、本発明による演算ユニットの基本動作を説明する。図３は、所定桁長であるＭビットの演算を行う従来の演算ユニットの模式図であり、図４は図３に示す演算ユニットと同じ桁長の演算を行う本発明による演算ユニットの基本構成図である。図３に示す演算ユニットは、各々Ｍビットの第１入力データＡ及び第２入力データＢと演算コードとを入力して、これらＭビットのデータＡ及びＢの間において、演算コードによって指定される算術演算又は論理演算を行い、Ｍビットの演算結果Ｓとキャリー等の発生を示すフラグＦを出力する。【００１８】
図４に示す本発明による演算ユニット２００は、各々Ｍビットの第１入力データＡ及び第２入力データＢと演算コードとを入力して、これらＭビットのデータＡ及びＢの間において、演算コードによって指定される算術演算又は論理演算を行い、Ｍビットの演算結果Ｓとキャリー等の発生を示すフラグＦを出力する。
演算ユニット２００は、Ｍビット演算を桁方向に分割した部分的な演算を各々行う第１〜第４の部分演算ユニット２０１〜２０４を備える。図４に示す構成例では、Ｍビット演算を桁方向に４つに分割し、それぞれの部分的な演算を行う４個の部分演算ユニットを設けた。しかし、演算の分割数すなわち部分演算ユニットの数は４でなくともよく、２以上の任意の数であればよい。【００１９】
第１〜第４の部分演算ユニット２０１〜２０４の各々には、それぞれのユニット２０１〜２０４が実行すべき演算の種類を指定する演算コードが入力される。そして、第１の部分演算ユニット２０１は、Ｍビットの入力データＡ及びＢのうちのそれぞれ０ビット目から（Ｍ１−１）ビット目までのＭ１ビットの部分であるＡ１とＢ１とを入力として、演算コードにより指定された演算を行い、Ｍ１ビットの演算結果Ｓ１とキャリーＣ１を出力する。
第２の部分演算ユニット２０２は、入力データＡ及びＢのうちのそれぞれＭ１ビット目から（Ｍ２−１）ビット目までの（Ｍ２−Ｍ１）ビットの部分であるＡ２及びＢ２と、第１の部分演算ユニット２０１からのキャリーＣ１とを入力として、演算コードにより指定された演算を行い、（Ｍ２−Ｍ１）ビットの演算結果Ｓ２とキャリーＣ２を出力する。【００２０】
第３の部分演算ユニット２０３は、入力データＡ及びＢのうちのそれぞれＭ２ビット目から（Ｍ３−１）ビット目までの（Ｍ３−Ｍ２）ビットの部分であるＡ３及びＢ３と、第２の部分演算ユニット２０２からのキャリーＣ２とを入力として、演算コードにより指定された演算を行って、（Ｍ３−Ｍ２）ビットの演算結果Ｓ３とキャリーＣ３を出力する。
第４の部分演算ユニット２０４は、入力データＡ及びＢのうちのそれぞれＭ３ビット目から（Ｍ−１）ビット目までの（Ｍ−Ｍ３）ビットの部分であるＡ４及びＢ４と、第３の部分演算ユニット２０３からのキャリーＣ３とを入力として、演算コードにより指定された演算を行い、（Ｍ−Ｍ３）ビットの演算結果Ｓ４と、キャリー判定やゼロ判定の結果を示すフラグＦを出力する。
なお以下の説明において、複数ビットのデータＤのうちより下位のｍビット目からより上位のｎビット目までの部分のデータを示す場合にＤ［ｎ：ｍ］と表記することがある。【００２１】
各部分演算ユニット２０１〜２０４が１つのＭビット演算のうちの異なる部分的演算を異なるクロックサイクル時間にて実行し、かつ各部分演算ユニット２０１〜２０４が同一クロックサイクル時間において異なるＭビット演算の部分的演算を行うことによって、演算ユニット２００はパイプライン処理によって異なるＭビット演算を並列に実行する。このために演算ユニット２００は、分割された入力データＡ２〜Ａ４及びＢ２〜Ｂ４、演算コード、及び各部分演算ユニット２０１〜２０３の演算結果を保持するためのパイプラインレジスタ２１１〜２１９、２２１〜２２８、２３１〜２３７を備える。そして部分演算ユニット２０１〜２０４は、これらパイプラインレジスタ２１１〜２１９、２２１〜２２８、２３１〜２３７によって区切られた複数のパイプラインステージにて演算を実行する。【００２２】
第１〜第４の部分演算ユニット２０１〜２０４が演算を行うパイプラインステージをそれぞれ第１パイプラインステージ〜第４パイプラインステージと示す。第１パイプラインステージと第２パイプラインステージとの間にはパイプラインレジスタ２１１〜２１９が設けられ、第２パイプラインステージと第３パイプラインステージとの間にはパイプラインレジスタ２２１〜２２８が設けられ、第３パイプラインステージと第４パイプラインステージとの間にはパイプラインレジスタ２３１〜２３７が設けられる。【００２３】
パイプラインレジスタ２１１〜２１９、２２１〜２２８、２３１〜２３７を設けることによって、演算ユニット２００は以下のとおりパイプライン処理を実現する。連続する４つのサイクルＴｉ（ｉ＝０、１、２、３）において演算コードＣＯＭ＃ｉとＭビットの入力値Ａ（ｉ）及びＢ（ｉ）が演算ユニット２００へ入力されるものと仮定する。各パイプラインレジスタは、サイクルＴｉに同期して前段のパイプラインステージの出力値をラッチし記憶値を更新する。【００２４】
サイクルＴ３において、演算コードＣＯＭ＃３、入力値Ａ（３）［（Ｍ１−１）：０］及びＢ（３）［（Ｍ１−１）：０］が、第１の部分演算ユニット２０１に入力される。第１の部分演算ユニット２０１は、Ａ（３）［（Ｍ１−１）：０］とＢ（３）［（Ｍ１−１）：０］とを入力とし、演算コードＣＯＭ＃３により指定される演算を行う。
この間、パイプラインレジスタ２１１は、サイクルＴ２において演算ユニット２００に与えられた演算コードＣＯＭ＃２を保持している。
また、パイプラインレジスタ２１２はＡ（２）［（Ｍ２−１）：Ｍ１］を保持しており、パイプラインレジスタ２１３はＢ（２）［（Ｍ２−１）：Ｍ１］を保持しており、パイプラインレジスタ２１４はＡ（２）［（Ｍ３−１）：Ｍ２］を保持しており、パイプラインレジスタ２１５はＢ（２）［（Ｍ３−１）：Ｍ２］を保持しており、パイプラインレジスタ２１６はＡ（２）［（Ｍ−１）：Ｍ３］を保持しており、パイプラインレジスタ２１７はＢ（２）［（Ｍ−１）：Ｍ３］を保持している。
パイプラインレジスタ２１８は、サイクルＴ２において第１の部分演算ユニット２０１が演算した演算結果Ｓ１（２）を保持しており、パイプラインレジスタ２１９はその演算結果のキャリーＣ１（２）を保持している。第１の部分演算ユニット２０１はサイクルＴ２において、Ａ（２）［（Ｍ１−１）：０］とＢ（２）［（Ｍ１−１）：０］とを入力とし、演算コードＣＯＭ＃２により指定される演算を行っている。【００２５】
またサイクルＴ３では、パイプラインレジスタ２１１に保持されている演算コードＣＯＭ＃２と、パイプラインレジスタ２１２及び２１３に保持されている入力値Ａ（２）［（Ｍ２−１）：Ｍ１］及びＢ（２）［（Ｍ２−１）：Ｍ１］と、サイクルＴ２における第１の部分演算ユニット２０１の演算結果のキャリーＣ１（２）とが、第２の部分演算ユニット２０２に入力される。そして第２の部分演算ユニット２０２は、入力値Ａ（２）［（Ｍ２−１）：Ｍ１］及びＢ（２）［（Ｍ２−１）：Ｍ１］と、キャリーＣ１（２）とを入力とし、演算コードＣＯＭ＃２により指定される演算を行う。【００２６】
この間、パイプラインレジスタ２２１は、サイクルＴ１において演算ユニット２００に与えられた演算コードＣＯＭ＃１を保持している。また、パイプラインレジスタ２２２はＡ（１）［（Ｍ３−１）：Ｍ２］を保持しており、パイプラインレジスタ２２３はＢ（１）［（Ｍ３−１）：Ｍ２］を保持しており、パイプラインレジスタ２２４はＡ（１）［（Ｍ−１）：Ｍ３］を保持しており、パイプラインレジスタ２２５はＢ（１）［（Ｍ−１）：Ｍ３］を保持している。【００２７】
そして、パイプラインレジスタ２２６は、サイクルＴ１において第１の部分演算ユニット２０１が演算した演算結果Ｓ１（１）を保持している。第１の部分演算ユニット２０１はサイクルＴ１において、Ａ（１）［（Ｍ１−１）：０］とＢ（１）［（Ｍ１−１）：０］とを入力とし、演算コードＣＯＭ＃１により指定される演算を行っている。【００２８】
また、パイプラインレジスタ２２７は、第２の部分演算ユニット２０２がサイクルＴ２にて行った演算結果Ｓ２（１）を保持しており、パイプラインレジスタ２２８はそのキャリーＣ２（１）を保持している。第２の部分演算ユニット２０２はサイクルＴ２において、サイクルＴ１における第１の部分演算ユニット２０１の演算結果のキャリーＣ１（１）と、Ａ（１）［（Ｍ２−１）：Ｍ１］及びＢ（１）［（Ｍ２−１）：Ｍ１］とを入力とし、演算コードＣＯＭ＃１により指定される演算を行っている。【００２９】
サイクルＴ３では、パイプラインレジスタ２２１に保持されている演算コードＣＯＭ＃１と、パイプラインレジスタ２２２及び２２３に保持されている入力値Ａ（１）［（Ｍ３−１）：Ｍ２］及びＢ（１）［（Ｍ３−１）：Ｍ２］と、サイクルＴ２における第２の部分演算ユニット２０２の演算結果のキャリーＣ２（１）とが、第３の部分演算ユニット２０３に入力される。そして第３の部分演算ユニット２０３は、入力値Ａ（１）［（Ｍ３−１）：Ｍ２］及びＢ（１）［（Ｍ３−１）：Ｍ２］と、キャリーＣ２（１）とを入力とし、演算コードＣＯＭ＃１により指定される演算を行う。【００３０】
この間、パイプラインレジスタ２３１は、サイクルＴ０において演算ユニット２００に与えられた演算コードＣＯＭ＃０を保持している。また、パイプラインレジスタ２３２はＡ（０）［（Ｍ−１）：Ｍ３］を保持しており、パイプラインレジスタ２３３はＢ（０）［（Ｍ−１）：Ｍ３］を保持している。
そして、パイプラインレジスタ２３４は、サイクルＴ０において第１の部分演算ユニット２０１が演算した演算結果Ｓ１（０）を保持している。第１の部分演算ユニット２０１はサイクルＴ０において、Ａ（０）［（Ｍ１−１）：０］とＢ（０）［（Ｍ１−１）：０］とを入力とし、演算コードＣＯＭ＃０により指定される演算を行っている。【００３１】
パイプラインレジスタ２３５は、サイクルＴ１において第２の部分演算ユニット２０２が演算した演算結果Ｓ２（０）を保持している。第２の部分演算ユニット２０２はサイクルＴ１において、サイクルＴ０における第１の部分演算ユニット２０１の演算結果のキャリーＣ１（０）と、Ａ（０）［（Ｍ２−１）：Ｍ１］及びＢ（０）［（Ｍ２−１）：Ｍ１］とを入力とし、演算コードＣＯＭ＃０により指定される演算を行っている。
パイプラインレジスタ２３６は、サイクルＴ２において第３の部分演算ユニット２０３が演算した演算結果Ｓ３（０）を保持しており、パイプラインレジスタ２３７はそのキャリーＣ３（０）を保持している。第３の部分演算ユニット２０３はサイクルＴ２において、サイクルＴ１における第２の部分演算ユニット２０２の演算結果のキャリーＣ２（０）と、Ａ（０）［（Ｍ３−１）：Ｍ２］及びＢ（０）［（Ｍ３−１）：Ｍ２］とを入力とし、演算コードＣＯＭ＃０により指定される演算を行っている。【００３２】
サイクルＴ３では、パイプラインレジスタ２３１に保持されている演算コードＣＯＭ＃０と、パイプラインレジスタ２３２及び２３３に保持されている入力値Ａ（０）［（Ｍ−１）：Ｍ３］及びＢ（０）［（Ｍ−１）：Ｍ３］と、サイクルＴ２における第３の部分演算ユニット２０３の演算結果のキャリーＣ３（０）とが、第４の部分演算ユニット２０４に入力される。そして第４の部分演算ユニット２０４は、入力値Ａ（０）［（Ｍ−１）：Ｍ３］及びＢ（０）［（Ｍ−１）：Ｍ３］と、キャリーＣ３（０）とを入力とし、演算コードＣＯＭ＃０により指定される演算を行う。そしてその演算結果Ｓ４（０）及びフラグＦを出力する。【００３３】
以上の説明から分かるとおり、演算コードＣＯＭ＃０により指定される１つの演算のうち、０ビット目から（Ｍ１−１）ビット目の部分は第１の部分演算ユニット２０１によりサイクルＴ０において行われ、Ｍ１ビット目から（Ｍ２−１）ビット目の部分は第２の部分演算ユニット２０２によりサイクルＴ１において行われ、Ｍ２ビット目から（Ｍ３−１）ビット目の部分は第３の部分演算ユニット２０３によりサイクルＴ２において行われ、Ｍ３ビット目から（Ｍ−１）ビット目の部分は第４の部分演算ユニット２０４によりサイクルＴ３において行われる。そして、それぞれの演算結果は同時にサイクルＴ３において、パイプラインレジスタ２３４〜２３６及び部分演算ユニット２０４から出力される。【００３４】
またサイクルＴ３において、第１〜第４の部分演算ユニット２０１〜２０４は、それぞれ、サイクルＴ３〜Ｔ０に演算ユニット２００に入力された異なる演算ＣＯＭ＃０〜３を並列して行っており、演算ユニット２００がパイプライン処理を行っていることも分かる。【００３５】
図５は、図４に示すパイプラインレジスタ２１１の概略構成図である。他のパイプラインレジスタ２１２〜２１９、２２１〜２２８及び２３１〜２３７も同様の構成を有している。パイプラインレジスタ２１１は、クロック信号ＣＫに同期して、ｎビット入力データＤｉｎをラッチするフリップフロップ（ＦＦ）２６１と、モード切替信号ＣＫＥＮの値に応じて、フリップフロップ２６１の出力値及び入力データＤｉｎの一方をパイプラインレジスタ２１１の出力として選択するマルチプレクサ（ＭＵＸ）２６２を備える。本構成例では、ＣＫＥＮ＝「Ｈ」のときフリップフロップ２６１の出力値がパイプラインレジスタ２１１の出力として出力され、ＣＫＥＮ＝「Ｌ」のとき入力データがそのまま出力される。
したがって、パイプラインレジスタ２１１は、ＣＫＥＮ＝Ｈのとき入力クロックＣＫに同期して出力値を更新するフリップフロップモードで動作し、ＣＫＥＮ＝Ｌのとき入力値をそのまま出力するトランスペアレントモードで動作する。【００３６】
図４に示す演算ユニット２００では、第１パイプラインステージと第２パイプラインステージとの間のパイプラインレジスタ２１１〜２１９には同じクロック信号φ２０と同じモード切替信号ＣＫＥＮ２０が供給される。また、第２パイプラインステージと第３パイプラインステージとの間のパイプラインレジスタ２２１〜２２８には同じクロック信号φ２１と同じモード切替信号ＣＫＥＮ２１が供給される。第３パイプラインステージと第４パイプラインステージとの間のパイプラインレジスタ２３１〜２３７には同じクロック信号φ２２と同じモード切替信号ＣＫＥＮ２２が供給される。【００３７】
モード切替信号ＣＫＥＮ２０〜ＣＫＥＮ２２の値を変えてパイプラインレジスタの動作モードを変更することによって、演算ユニット２００のパイプライン段数すなわち演算ユニット２００の並列演算実行数を変更することができる。以下、演算ユニット２００が並列に実行する演算の数を「並列数」と示すことがある。
全てのパイプラインレジスタをフリップフロップモードで動作させると、演算ユニット２００のパイプライン段数は４となり、演算ユニット２００は４つの異なる演算を並列に行うことができる。【００３８】
パイプラインレジスタを２１１〜２１９と２３１〜２３７をトランスペアレントモードで動作させ、かつパイプラインレジスタ２２１〜２２８をフリップフロップモードで動作させると、パイプラインレジスタ２１１〜２１９により分けられていた第１及び第２パイプラインステージが１つのパイプラインステージとなり、またパイプラインレジスタ２３１〜２３７により分けられていた第３及び第４パイプラインステージが１つのパイプラインステージとなるので、演算ユニット２００のパイプライン段数は２となる。
全てのパイプラインレジスタをトランスペアレントモードで動作させると、もはや演算ユニット２００はパイプライン処理を行わないので、演算ユニット２００の並列数は１となる。【００３９】
図６は、並列数が１であるときの演算ユニット２００の動作のタイムチャートである。矩形波「×１ＣＬＫ」は演算ユニット２００が１つのＭビット演算を完了するのに使用するサイクルを示す。したがって矩形波×１ＣＬＫの１周期が基本周期となる。
信号「ＣＤ０」は第１部分演算ユニット２０１へ入力される演算コードを示し、信号「ＣＤ１」は第２部分演算ユニット２０２へ入力される演算コードを示し、信号「ＣＤ２」は第３部分演算ユニット２０３へ入力される演算コードを示し、信号「ＣＤ３」は第３部分演算ユニット２０４へ入力される演算コードを示す。【００４０】
また、信号「Ａ」及び「Ｂ」は第１部分演算ユニット２０１及びパイプラインレジスタ２１２〜２１７へ入力される入力データを示す。また、「φ２０」及び「ＣＫＥＮ２０」は、パイプラインレジスタ２１１〜２１９に与えられるクロック信号及びモード切替信号を示し、「φ２１」及び「ＣＫＥＮ２１」は、パイプラインレジスタ２２１〜２２８に与えられるクロック信号及びモード切替信号を示し、「φ２２」及び「ＣＫＥＮ２２」は、パイプラインレジスタ２３１〜２３７に与えられるクロック信号及びモード切替信号を示す。
図示するとおり、モード切替信号ＣＫＥＮ２０〜２２はいずれも「Ｌ」に設定されており、全てのパイプラインレジスタがトランスペアレントモードで動作する。このため全ての部分演算ユニット２０１〜２０４が１つのＭビット演算を分割した各部分演算を同時に実行するので、演算ユニット２００の並列数は１となる。また各クロックφ２０〜φ２２のサイクルは基本周期と同じ長さに設定される。【００４１】
図７は、並列数が２であるときの演算ユニット２００の動作のタイムチャートである。この場合、１つの基本周期の間に２つの演算を並列に実行するために、各クロックφ２０〜φ２２のサイクルを基本周期の１／２の長さに設定して、演算ユニット２００を動作させる。
いま、サイクルＴｉ（ｉ＝１、２、３）の前半において演算ユニット２００に、命令＃ｉａ及び入力Ａａ（ｉ）及びＢａ（ｉ）が与えられ、サイクルＴｉの後半において演算ユニット２００に、命令＃ｉｂ及び入力Ａｂ（ｉ）及びＢｂ（ｉ）が与えられたと仮定する。【００４２】
また、モード切替信号ＣＫＥＮ２１を「Ｈ」に設定し、モード切替信号ＣＫＥＮ２０及び２２は「Ｌ」に設定する。このため、第２部分演算ユニット２０２を含む第２パイプラインステージと第３部分演算ユニット２０３を含む第３パイプラインステージとの間のパイプラインレジスタ２２１〜２２８のみがフリップフロップとして動作する。したがって、第１部分演算ユニット２０１及び第２部分演算ユニット２０２が同じＭビット演算の部分演算を同時に実行し、第３部分演算ユニット２０３及び第４部分演算ユニット２０４は、第１部分演算ユニット２０１が演算したＭビット演算よりも１／２基本周期前に演算ユニット２００に入力されたＭビット演算の部分演算を実行する。このようにして演算ユニット２００は、パイプライン処理により２個の演算を並列に実行する。【００４３】
図８は、並列数が４であるときの演算ユニット２００の動作のタイムチャートである。この場合、１つの基本周期の間に４つの演算を並列に実行するために、各クロックφ２０〜φ２２のサイクルを基本周期の１／４の長さに設定して、演算ユニット２００を動作させる。
いま演算ユニット２００に、サイクルＴｉ（ｉ＝１、２、３）の第１四半期において演算ユニット２００に命令＃ｉａ及び入力Ａａ（ｉ）及びＢａ（ｉ）が、第２四半期において演算ユニット２００に命令＃ｉｂ及び入力Ａｂ（ｉ）及びＢｂ（ｉ）が、第３四半期において演算ユニット２００に命令＃ｉｃ及び入力Ａｃ（ｉ）及びＢｃ（ｉ）が、第４四半期において演算ユニット２００に命令＃ｉｄ及び入力Ａｄ（ｉ）及びＢｄ（ｉ）が与えられたと仮定する。【００４４】
モード切替信号ＣＫＥＮ２０〜２２を「Ｈ」に設定する。このため、全てのパイプラインステージの間に設けられたパイプラインレジスタ２２１〜２２８がフリップフロップとして動作する。したがって第２部分演算ユニット２０２は、第１部分演算ユニット２０１が実行したＭビット演算よりも１／４基本周期分先行するＭビット演算の部分演算を実行し、第３部分演算ユニット２０３は、第２部分演算ユニット２０２が実行したＭビット演算よりも１／４基本周期分先行するＭビット演算の部分演算を実行し、第４部分演算ユニット２０４は、第３部分演算ユニット２０３が実行したＭビット演算よりも１／４基本周期分先行するＭビット演算の部分演算を実行する。このようにして演算ユニット２００は、パイプライン処理により４個の演算を並列に実行する。
上記のように、演算ユニット２００は、Ｍビット演算を１つずつ行う演算ユニットとして動作することができ、また２個又は４個のＭビット演算を並列に行う演算ユニットとして動作することができる。【００４５】
本発明による演算ユニット２００によれば、図９に示すように、実行ステージにおいて、実行期間を１／Ｎ基本周期ずらしながらＮ個の演算を実行するＮ段のパイプライン処理を行うことにより、１つの演算ユニットで複数の演算を並列に実行することができる。このため、ＶＬＩＷプロセッサやスーパースカラプロセッサにおいて、従来よりも少ない数の演算ユニットによって複数の演算を並列に実行することができ、レジスタファイルや記憶手段と演算ユニットとを結ぶデータパスの配線を低減することができる。
また、本発明による演算ユニット２００によれば、必要に応じて、実行ステージにおいて並列に実行する演算数を増減させることが可能となる。必要最低限の実行命令数で処理することにより消費電力を節約することができる。【００４６】
以下、添付する図面を参照して本発明の実施例を説明する。図１０は、本発明によるＶＬＩＷプロセッサの実施例を示す概略構成図である。プロセッサ１は２つの３２ビットのデータ同士の数値演算又は論理演算を行うための演算部１７を有し、この演算部１７は、図４を参照して説明した演算ユニット２００と同様の構成を有する。
またプロセッサ１は、プログラムカウンタ（ＰＣ）を制御するプログラムカウンタ（ＰＣ）制御部１０と、プログラムカウンタが示す命令メモリ５００内のアドレスからフェッチした命令を保持する命令バッファ（ＩｎｓｔＢｕｆｆ）１１と、命令バッファ１１から取り出した命令をデコードして中間コードとオペランドを生成するメインデコーダ１２とを備える。【００４７】
さらにプロセッサ１は、アキュームレータ、汎用レジスタ及びベースレジスタなどの各種レジスタを記憶するレジスタファイル１４と、アドレス演算のためのアドレス演算器１５と、メインデコーダ１２により生成された中間コードから実行コードとオペランド選択信号を取り出すＬＳデコーダ１３と、オペランド選択信号に従って、レジスタファイル１４から読み出したレジスタ値、即値のオペランド及びデータメモリ５０１から読み出したデータのいずれかから、演算部１７への入力値を選択するマルチプレクサ１６を備える。【００４８】
プロセッサ１は、実行コードに含まれるコードに基づいて分岐制御信号及びメモリ書き込み制御信号を生成するＷＲデコーダ１８と、基準クロック信号ＲｅｆＣＬＫに基づいて、プロセッサ１の各部を動作させるクロック信号及び演算部１７のパイプライン段数を変更するモード切替信号を生成するクロック制御部１９を備える。【００４９】
以下、図１１〜図１３を参照して、プロセッサ１内の各要素間の接続関係を説明する。図１１は、命令メモリ５００、プログラムカウンタ制御部１０、命令バッファ１１、メインデコーダ１２、演算部１７、ＷＲデコーダ１８及びクロック制御部１９の間の接続関係を示す図である。
クロック制御部１９は、基準クロック信号ＲｅｆＣＬＫを受信し、基準クロック信号ＲｅｆＣＬＫと同じ周期及び位相を有し命令バッファ１１によるフェッチタイミングを定めるフェッチタイミングクロック信号Ｃｋｆと、基準クロック信号ＲｅｆＣＬＫを１／８周期遅らせたメインクロックＭａｉｎＣＬＫを生成する。
なお、並列数が１である時すなわち演算部１７が複数の３２ビット演算を並列におこなわない時には、演算部１７は、フェッチタイミングクロック信号Ｃｋｆの周期と同じ周期で１つの３２ビット演算を処理する。したがって、フェッチタイミングクロック信号Ｃｋｆと同じ周期のクロック信号である基準クロック信号ＲｅｆＣＬＫ及びメインクロックＭａｉｎＣＬＫの周期を「基本周期ΔＴｂ」と記すことがある。
またクロック制御部１９は、メインクロックＭａｉｎＣＬＫよりも４倍速いクロック信号×４ＣＬＫを生成する。クロック信号×４ＣＬＫの周期はΔＴｂ／４である。【００５０】
プログラムカウンタ制御部１０は、クロック制御部１９からメインクロックＭａｉｎＣＬＫを受信し、内部に記憶するプログラムカウンタの値をメインクロックＭａｉｎＣＬＫに同期して更新し、命令メモリ５００へプログラムカウンタの値ＩｎｓｔＡｄｄｒを出力する。またＷＲデコーダ１８から分岐制御信号（ＢｒａｎｃｈＣｎｔｒｌ）を受信し、演算部１７から行き先アドレスを受信する。
命令バッファ１１は、命令メモリ５００内の、プログラムカウンタ制御部１０に指定されたアドレスＩｎｓｔＡｄｄｒに記憶された命令を読み込み、その命令コード（Ｃｏｄｅ）と命令オペランド（Ｏｐｅｒａｎｄ）をメインデコーダ１２へ出力する。【００５１】
図１２は、メインデコーダ１２、レジスタファイル１４、ＬＳデコーダ１３、データメモリ５０１、アドレス演算器１５、演算部１７及びクロック制御部１９の間の接続関係を示す図である。
メインデコーダ１２は、ＶＬＩＷ命令である命令バッファ１１から受信した命令コード及び命令オペランドをデコードし、演算部１７が実行する演算の種類を指定する実行コードを含む中間コードと各オペランドを出力する。
メインデコーダ１２は、命令バッファ１１から受信したＶＬＩＷ命令をデコードすると、これらの命令に含まれている演算数Ｐ＃を検出する。この演算数Ｐ＃は、実行ステージすなわち演算部１７において並列に実行される演算の数を示す。図４を参照して説明した演算ユニット２００の説明における用語の用法にしたがって、Ｐ＃も「並列数」と呼ぶことがある。【００５２】
メインデコーダ１２の出力端子ＣｏｄｅＳ及びＣｏｄｅＭ、並びにＲ０＃Ｓ、Ｒ０＃Ｍ、Ｒ１＃Ｓ、Ｒ１＃Ｍ、Ｒｉｄｘ＃、ＩｍｍＤ＃及びＩｍｍＡ＃から出力される信号は、以下のとおりである。
出力端子ＣｏｄｅＳ及びＣｏｄｅＭからは、演算部１７が実行する演算の種類を指定する実行コードとディスティネーションレジスタの指定を含む中間コードが出力される。また中間コードはデータメモリ５０１への演算結果の書き込み有無を示すメモリ書き込み制御信号や分岐命令やジャンプ命令に伴う分岐制御信号も含んでいる。
並列数Ｐ＃＝１であったときには、メインデコーダ１２は、デコードによって生成された中間コードを出力端子ＣｏｄｅＳからマルチプレクサ３１へ出力する。また並列数Ｐ＃＞１であったときには複数の中間コードを出力端子ＣｏｄｅＭから順に１つずつマルチプレクサ３１へ出力する。【００５３】
端子Ｒ０＃Ｓ及びＲ０＃Ｍからは第１ソースレジスタを指定するレジスタ番号が出力され、端子Ｒ１＃Ｓ及びＲ１＃Ｍからは第２ソースレジスタを指定するレジスタ番号が出力される。並列数Ｐ＃＝１であったときにはメインデコーダ１２は、出力端子Ｒ０＃Ｓ及びＲ１＃Ｓからそれぞれ第１及び第２ソースレジスタのレジスタ番号をマルチプレクサ３２及び３３へ出力する。
一方で並列数Ｐ＃＞１であったときにはメインデコーダ１２は、複数の第１のレジスタ番号及び第２ソースレジスタのレジスタ番号を、それぞれ出力端子Ｒ０＃Ｍ及びＲ１＃Ｍから順に１つずつマルチプレクサ３２及び３３へ出力する。【００５４】
メインデコーダ１２は、並列数Ｐ＃が１であるかそれより大きいかを示す選択信号Ｓｅｌを生成する。マルチプレクサ３１は選択信号Ｓｅｌに従って、端子ＣｏｄｅＳ及びＣｏｄｅＭのいずれか一方をレジスタ４１へ接続する。選択された端子から出力される中間コードＣｏｄｅＤがレジスタ４１へ保持される。
マルチプレクサ３２は選択信号Ｓｅｌに従って、端子Ｒ０＃Ｓ及びＲ０＃Ｍのいずれか一方をレジスタ４２へ接続する。選択された端子から出力される第１ソースレジスタのレジスタ番号Ｒｓ０がレジスタ４２へ保持される。
マルチプレクサ３３は選択信号Ｓｅｌに従って、端子Ｒ１＃Ｓ及びＲ１＃Ｍのいずれか一方をレジスタ４３へ接続する。選択された端子から出力される第２ソースレジスタのレジスタ番号Ｒｓ１がレジスタ４３へ保持される。【００５５】
端子Ｒｉｄｘ＃からはデータ転送命令用のベースレジスタのレジスタ番号Ｒｉｄｘが出力される。また端子ＩｍｍＤ＃からは演算用の即値オペランドＩＭが出力される。さらに端子ＩｍｍＡ＃からはデータ転送命令用のオフセット値ＩｍｍＡが出力される。
なお、本実施例によるプロセッサ１は、並列命令であるＶＬＩＷ命令内にデータ転送命令及び即値を用いた演算命令を含めることを禁止することとし、命令バッファ１１から読み込んだＶＬＩＷ命令が並列命令である場合には、端子Ｒｉｄｘ＃、ＩｍｍＤ＃及びＩｍｍＡ＃からのデータ出力はない。【００５６】
レジスタ番号Ｒｉｄｘは、レジスタファイル１４の読み出しレジスタ番号指定入力ｐ２Ａとしてレジスタファイル１４に入力され、レジスタ番号Ｒｉｄｘにより指定されたベースレジスタの値が出力ポートｐ２Ｄ０から出力されアドレス演算器１５に受信される。アドレス演算器１５は、受信したベースレジスタの値にオフセット値ＩｍｍＡを加えて得たメモリアドレスを算出する。このメモリアドレスは、レジスタファイル１４の入力ポートｐ２Ｄｉに受信され、かつレジスタ４５に保持される。また即値オペランドＩＭはレジスタ４４に保持される。【００５７】
レジスタ４１〜４５は、レジスタファイル１４やデータメモリ５０１へのアクセスの間、メインデコーダ１２のデコード結果を保持するためのレジスタである。レジスタ４１〜４５は、後述のとおり生成されるデコード結果保持タイミングクロック信号Ｃｋｄに同期して、上述した各信号をラッチして保持内容を更新する。【００５８】
レジスタ４１から出力される中間コードＣｏｄｅＤは、ＬＳデコーダ１３に受信される。ＬＳデコーダ１３は、演算部１７が実行する演算の種類を指定する実行コードＣｏｄｅＥｘｅと、第２オペランドを選択するオペランド選択信号ＯｐｅｒａｎｄＳｅｌを取り出す。実行コードＣｏｄｅＥｘｅはレジスタ５１に保持される。【００５９】
レジスタ４２及び４３から出力される第１及び第２のソースレジスタのレジスタ番号Ｒｓ０及びＲｓ１は、それぞれレジスタファイル１４の読み出しレジスタ番号指定入力ｐ０Ａ及びｐ１Ａとして、レジスタファイル１４に受信される。
レジスタ番号Ｒｓ０により指定されたレジスタの内容ＲＡは、出力ポートｐ０Ｄｏから出力され、演算部１７の第１入力データＡとしてレジスタ５２に保持される。
レジスタ番号Ｒｓ１により指定されたレジスタの内容ＲＢは、出力ポートｐ１Ｄｏから出力され、マルチプレクサ１６に保持される。【００６０】
マルチプレクサ１６にはまた、レジスタ４４から出力される即値オペランドＩＭと、レジスタ４５から出力されるメモリアドレスによりアドレスされたデータメモリ５０１内のデータＭもまた入力される。マルチプレクサ１６はオペランド選択信号ＯｐｅｒａｎｄＳｅｌに従ってこれらのデータＲＢ、ＩＭ及びＭのいずれかを選択して、演算部１７の第２入力データＢとし、レジスタ５３に保持する。【００６１】
レジスタ５１、５２及び５３は、先入れ先出し（ＦＩＦＯ）バッファであり、デコード結果保持タイミングクロック信号Ｃｋｄに同期して、それぞれ実行コードＣｏｄｅＥｘｅ、第１入力データＡ及び第２入力データＢをラッチする。そして命令投入タイミングクロック信号Ｃｋｅに同期して、現在記憶しているデータのうち最先に入力したものを順次取り出す。【００６２】
演算部１７は、２つの入力データＡ及びＢの間で、実行コードＣｏｄｅＥｘｅにて指定される演算を行うと、その演算結果ＳとフラグＦをそれぞれレジスタファイル１４の入力ポートｐ３Ｄｉ及びｐｆＤｉに出力し、また結果Ｓを書き込むディスティネーションレジスタのレジスタ番号Ｒｄを、レジスタファイル１４の書き込みレジスタ番号指定入力ｐ３Ａに出力する。
レジスタファイル１４は、クロック制御部１９から供給されるレジスタ更新クロックφ２３に同期して、書き込みレジスタ番号指定入力ｐ３Ａに指定されたレジスタとフラグレジスタの値を更新する。【００６３】
またデータメモリ５０１は、後述するＷＲデコーダ１８からメモリ書き込み制御信号ＷｒｉｔｅＥｎａｂｌｅ信号を受信する。メモリ書き込み制御信号ＷｒｉｔｅＥｎａｂｌｅ信号が、データメモリ５０１への書き込みを指示することを意味する場合には、データメモリ５０１は、演算部１７による演算結果を記憶する。【００６４】
クロック制御部１９は、メインクロックＭａｉｎＣＬＫ及びクロック信号×４ＣＬＫを生成して、それぞれデータメモリ５０１及びメインデコーダ１２へ供給する。
またクロック制御部１９は、メインデコーダ１２が検出した並列数Ｐ＃を受信する。そして受信された並列数Ｐ＃にしたがって、デコード結果保持タイミングクロック信号Ｃｋｄ、命令投入タイミングクロック信号Ｃｋｅ及びクロックφ２３を生成する。
さらにクロック制御部１９は、図４〜図８を参照して説明した、演算部１７に与えられるクロック信号φ２０〜φ２２及びモード切替信号ＣＫＥＮ２０〜ＣＫＥＮ２２を、並列数Ｐ＃にしたがって生成する。クロック制御部１９の構成、並びに各クロック信号及びモード切替信号の生成動作は後述する。【００６５】
図１３は、演算部１７、ＷＲレコーダ１８、プログラムカウンタ制御部１０、データメモリ５０１及びクロック制御部１９の間の接続関係を示す図である。
演算部１７は、レジスタ５１から入力した実行コードＣｏｄｅＥｘｅをデコードしてその中から取り出したコードＣｏｄｅＷｒｉｔｅと、フラグＦ及び演算結果Ｓを出力する。レジスタ６１、６２及び６３は、クロック制御部１９から供給される実行結果保持タイミングクロックＣｋｗに同期して、コードＣｏｄｅＷｒｉｔｅと、フラグＦ及び演算結果Ｓを出力する。コードＣｏｄｅＷｒｉｔｅは、実行コードＣｏｄｅＥｘｅが分岐命令やジャンプ命令であるか否か、及び実行コードＣｏｄｅＥｘｅが演算結果をデータメモリ５０１へ出力する命令であるか否かを示すコードである。【００６６】
ＷＲレコーダ１８は、レジスタ６１に保持されたコードＣｏｄｅＷｒｉｔｅと、レジスタ６２に保持されたフラグＦの結果に基づいて、分岐制御信号ＢｒａｎｃｈＣｎｔｒｌ及びメモリ書き込み制御信号ＷｒｉｔｅＥｎａｂｌｅを生成する。分岐制御信号ＢｒａｎｃｈＣｎｔｒｌはプログラムカウンタ制御部１０に受信され、メモリ書き込み制御信号ＷｒｉｔｅＥｎａｂｌｅはデータメモリ５０１に受信される。
また、実行コードＣｏｄｅＥｘｅが分岐命令又はジャンプ命令である場合には、演算部１７は、演算結果Ｓとして行き先アドレスＪｍｐＡｄｄｒを出力する。したがってレジスタ６３から出力される演算結果Ｓは、プログラムカウンタ制御部１０に供給される。
レジスタ６３から出力される演算結果Ｓはデータメモリ５０１へも供給される。実行コードＣｏｄｅＥｘｅが演算結果をデータメモリ５０１へ出力する命令である場合には、演算部１７の演算結果Ｓはデータメモリ５０１へ書き込まれる。【００６７】
図１４は、プログラムカウンタ制御部１０の概略構成図である。プログラムカウンタ制御部１０は、プログラムカウンタの値ＩｎｓｔＡｄｄｒを保持するレジスタ１０１と、分岐制御信号ＢｒａｎｃｈＣｎｔｒｌをデコードするデコーダ１０２と、デコーダ１０２のデコード結果に従って、直前に分岐命令が実行されたときにはＪｍｐＡｄｄｒを選択しそうでない場合には定数１を選択するマルチプレクサ１０３と、現在のプログラムカウンタから次のプログラムカウンタを演算する演算器１０４と、を備えている。【００６８】
図１５は、メインデコーダ１２の概略構成図である。メインデコーダ１２は、並列数信号発生部１１１と、レジスタ１１２と、ストール信号生成部１１３と、Ｓｅｌ信号生成部１１４を備える。
並列数信号発生部１１１は、命令バッファ１１から読み込んだ命令コード（Ｃｏｄｅ）及び命令オペランド（Ｏｐｅｒａｎｄ）に含まれる演算命令数を検出し、並列数信号Ｐ＃を生成する。
ストール信号生成部１１３は、メインデコーダ１２が今回のフェッチタイミングで受信した命令の並列数Ｐ＃（０）と、前回のフェッチタイミングで受信した命令の並列数Ｐ＃（−１）とを受信する。ストール信号生成部１１３は、前回受信した命令の並列数が１よりおおきく（Ｐ＃（−１）＞１）、かつ前回受信した命令の並列数と今回受信した命令の並列数が異なるとき（Ｐ＃（−１）≠Ｐ＃（０））であるとき、今回受信した命令に代えてＮＯＰ命令を発行することを要求するストール信号を生成する。ストール信号は、後述するシングル命令デコード部１１５、並列命令デコード部１１６及び命令転送手段１１８に受信される。
Ｓｅｌ信号生成部１１４は、並列数Ｐ＃にしたがって、マルチプレクサ３１〜３３の切替動作を制御する選択信号Ｓｅｌを生成する。【００６９】
またメインデコーダ１２は、シングル命令デコード部１１５と、並列命令デコード部１１６と、命令キュー１１７と、命令転送手段１１８を備える。
シングル命令デコード部１１５は、命令バッファ１１から読み込んだ命令コード（Ｃｏｄｅ）及び命令オペランド（Ｏｐｅｒａｎｄ）に１つの演算命令しか含まれないとき、これらをデコードして１組の中間コードとオペランドを生成する。そして中間コードをＣｏｄｅＳ端子へ出力し、またオペランドを、Ｒ０＃Ｓ端子、Ｒ１＃Ｓ端子、Ｒｉｄｘ＃端子、ＩｍｍＤ＃端子及びＩｍｍＡ＃端子へ出力する。また、シングル命令デコード部１１５は、ストール信号生成部１１３からストール信号を受信している間は、生成した中間コードとオペランドの出力と命令バッファ１１からの命令の読み込みを停止し、ＮＯＰ命令を発行する。【００７０】
並列命令デコード部１１６は、命令コード及び命令オペランドに複数の演算命令が含まれるとき、これらをデコードして、複数組の中間コードとオペランドを生成する。そしてこれら中間コードとオペランドを命令キュー１１７へ出力する。また、並列命令デコード部１１６は、ストール信号生成部１１３からストール信号を受信している間は、命令バッファ１１からの命令の読み込みを停止する。
命令キュー１１７は、並列命令デコード部１１６によりデコードされた複数組の中間コードとオペランドを保持する。そして命令転送手段１１８が生成する命令転送トリガ信号に同期して中間コードとオペランドを順次１組ずつ取り出して、ＣｏｄｅＭ端子、Ｒ０＃Ｍ端子及びＲ１＃Ｍ端子へ出力する。【００７１】
命令転送手段１１８は、クロック信号×４ＣＬＫ及び並列数Ｐ＃（−１）を受信する。並列数Ｐ＃（−１）＝４のとき、命令転送手段１１８はクロック信号×４ＣＬＫを命令転送トリガ信号として命令キュー１１７へ出力する。これによって命令キュー１１７は、基本周期ΔＴｂの１／４の周期でそれぞれの組の中間コード及びオペランドの組を順次出力する。
また、並列数Ｐ＃（−１）＝２のとき、命令転送手段１１８はクロック信号×４ＣＬＫを２分周した信号を命令転送トリガ信号として命令キュー１１７へ出力する。これによって命令キュー１１７は、基本周期ΔＴｂの１／２の周期でそれぞれの組の中間コード及びオペランドを順次出力する。
命令転送手段１１８は、ストール信号生成部１１３からストール信号を受信している間は、命令キュー１１７からの生成した中間コードとオペランド出力を止め、命令キュー１１７からＮＯＰ命令を発行する。【００７２】
図１６〜図１８を参照してメインデコーダ１２によるデコード動作を説明する。図１６は、本プロセッサ１により実行される命令の種類を例示する図である。本プロセッサ１により実行される命令の形式は、例えば命令タイプ１〜命令タイプ６に分類される。
命令タイプ１に属する命令は、２つのソースレジスタの指定Ｒ０及びＲ１と１つのディスティネーションレジスタの指定Ｓ０を伴い、２つのソースレジスタＲ０及びＲ１の値の間の演算結果をディスティネーションレジスタＳ０に書き込む。この形式の命令は例えば「ａｄｄ  ｒ０，ｒ１，ｒ２」であり、レジスタｒ０とｒ１の値の和をレジスタｒ２へ書き込む。【００７３】
命令タイプ２に属する命令は、１つのディスティネーションレジスタの指定Ｓ０を伴い、ディスティネーションレジスタＳ０の値に基づく演算を行ってその結果をディスティネーションレジスタＳ０に書き込む。この形式の命令は例えば「ａｂｓ  ｒ２」であり、レジスタｒ２の値の絶対値をレジスタｒ２へ書き込む。
命令タイプ３に属する命令は、１つのソースレジスタＲ０の指定と１つの即値ＩｍｍＤと１つのディスティネーションレジスタの指定Ｓ０を伴い、ソースレジスタＲ０と即値ＩｍｍＤとの間の演算結果をディスティネーションレジスタＳ０に書き込む。この形式の命令は例えば「ａｄｄ  ｒ０，−１０，ｒ２」であり、レジスタｒ０の値と「−１０」との和をレジスタｒ２へ書き込む。【００７４】
命令タイプ４に属する命令は、ベースレジスタの指定Ｒｉｄｘとオフセット値ＩｍｍＡと１つのレジスタの指定Ｓ０を伴う。この形式の命令は例えばメモリ転送命令「ｌｄ  ＊（ｒ０，１０），ｒ２」であり、ベースレジスタｒ０の値にオフセット値１０を加えた値により示されるアドレスに記憶されるデータメモリ５０１内のデータの内容をレジスタｒ２へ転送する。
命令タイプ５に属する命令は即値ＩｍｍＤを伴う。この形式の命令は例えばアドレス＃１００へジャンプするジャンプ命令「ｊｐ  ＃１００」である。
命令タイプ６に属する命令は、レジスタ即値ＩｍｍＤと１つのレジスタの指定Ｒ０を伴う。この形式の命令は例えば「ｊｐ  ｒ０，＃１００」であり、レジスタｒ０に１００を加えたアドレスへジャンプするジャンプ命令である。【００７５】
図１７Ａ及び図１７Ｂは、シングル命令デコード部１１５によるデコードの説明図である。図１７Ａに示す各命令、「ａｄｄ  ｒ０，ｒ１，ｒ２」（命令１）、「ａｂｓ  ｒ２」（命令２）、「ａｄｄ  ｒ０，−１０，ｒ２」（命令３）、「ｌｄ  ＊（ｒ０，１０），ｒ２」（命令４）、「ｊｐ  ＃１００」（命令５）、「ｊｐ  ｒ０，＃１００」（命令６）は、いずれも並列数１の命令である。
したがってこれらの命令を含む命令コードＣｏｄｅと命令オペランドＯｐｅｒａｎｄは、シングル命令デコード部１１５によってデコードされる。メインデコーダ１２が、上記命令１〜６をそれぞれ含む命令コードＣｏｄｅと命令オペランドＯｐｅｒａｎｄとを図示するフェッチ順序で受信すると、シングル命令デコード部１１５は、これらの命令の各々を１組の中間コード及びオペランドへ変換する。シングル命令デコード部１１５は中間コード及びオペランドのそれぞれを、図１７Ｂの表に示されたＣｏｄｅＳ端子、Ｒ０＃Ｓ端子、Ｒ１＃Ｓ端子、Ｒｉｄｘ＃端子、ＩｍｍＤ＃端子及びＩｍｍＡ＃端子へ出力する。
なお、上述のとおり中間コードは、「ａｄｄ」や「ａｂｓ」のような演算部１７が実行する演算の種類を指定する実行コードとディスティネーションレジスタの指定を含む。従って図１７Ｂに示す表は、ディスティネーションレジスタの指定もＣｏｄｅＳ端子から出力されることを示している。図１８Ｂにおいても同様である。【００７６】
図１８Ａ及び図１８Ｂは、並列命令デコード部１１６によるデコードの説明図である。図１８Ａに示す命令は「ＳＡＡ  ｒ０，ｒ１，ｒ２」は、レジスタｒ０及びｒ１の値の差の絶対値をレジスタｒ２の値に加える命令である。
ここで演算部１７は、命令「ＳＡＡ」を一回の演算により完了する数値論理演算ユニットが実装されておらず、これらを３つの演算、
減算ｒ０−ｒ１の結果をレジスタｒ７へ格納（演算１）、
レジスタｒ７の値の絶対値をｒ７へ格納（演算２）、
レジスタｒ７とレジスタｒ２の値の和をレジスタｒ２へ格納（演算３）
を組み合わせて実行するものとすると、命令「ＳＡＡ」の並列数は３となる。【００７７】
したがってこれらの命令を含む命令コードと命令オペランドは、並列命令デコード部１１６によってデコードされる。メインデコーダ１２が、命令「ＳＡＡ」を命令コードＣｏｄｅと命令オペランドＯｐｅｒａｎｄとを受信すると、シングル命令デコード部１１５は、命令「ＳＡＡ」を必要な３組の中間コード及びオペランドへ変換する。【００７８】
図４に示す演算ユニット２００と同様の構成を有する演算部１７は、並列数が１すなわち単一の演算ユニットとして動作するか、もしくは２個又は４個の演算を並列に演算することができる。したがって、並列数が３である命令「ＳＡＡ」をデコードするときは、並列数信号発生部１１１は並列数信号「Ｐ＃＝４」を生成し、シングル命令デコード部１１５は上記の３組の中間コード及びオペランドと１つのＮＯＰ命令とを命令キュー１１７に出力する。
命令キュー１１７は、基本周期ΔＴｂの１／４の周期を有する命令転送トリガ信号に同期して、これら中間コード、オペランド及びＮＯＰ命令のそれぞれを、図１８Ｂの表に示されたＣｏｄｅＭ端子、Ｒ０＃Ｍ端子及びＲ１＃Ｍ端子へ順次出力する。【００７９】
図１９は、レジスタファイル１４の概略構成図である。レジスタファイル１４は、クロック信号φ２３に同期して３２ビットの入力データをラッチする記憶素子であるレジスタ＃０〜＃７と、これらレジスタ＃０〜＃７のうち読み出しレジスタ番号指定入力ｐ０Ａ〜ｐ２Ａにより指定されるレジスタを選択して、選択されたレジスタの値をそれぞれ出力ポートｐ０Ｄｏ〜ｐ２Ｄｏへ出力するマルチプレクサ１２１〜１２３を備える。
またレジスタファイル１４は、各レジスタ＃０〜＃７への入力値を、それ自身が記憶する値、並びに入力ポートｐ２Ｄｉ及びｐ３Ｄｏに入力されたデータから選択するマルチプレクサ１２５ａ〜１２５ｈと、書き込みレジスタ番号指定入力ｐ２Ａ及びｐ３Ａに従って、各マルチプレクサ１２５ａ〜１２５ｈの切替信号を生成する書き込みレジスタ選択デコーダ１２４を備える。【００８０】
上述のとおり、レジスタファイル１４から並列数Ｐ＃が４である命令のオペランドが読み出されるときには、メインデコーダ１２は基本周期ΔＴｂの１／４の周期で読み出しレジスタ番号を指定する。また、演算部１７が１つの３２ビット演算を処理する期間の上限は、１つのＶＬＩＷ命令がフェッチされる周期すなわち基本周期ΔＴｂに等しい。よって並列数Ｐ＃が４であるときには、メインデコーダ１２は、演算部１７が１つの３２ビット演算を処理するために使用できる期間の１／４の長さの周期で読み出しレジスタ番号を指定する。
同様に並列数Ｐ＃が４である命令の演算結果が書き込まれるときは、後述するように、メ演算部１７は、基本周期ΔＴｂの１／４の長さの周期で演算結果を出力する。
このため、各レジスタ＃０〜＃７には、演算部１７が１つの３２ビット演算を処理するために使用できる期間の１／４の長さの周期で読み書き可能な記憶素子を採用する。【００８１】
図２０は、演算部１７の概略構成図である。演算部１７は図４に示す演算ユニット２００と同様の構成を有する。したがって同じ構成要素は同じ参照番号を使用して示すとともに説明を省略する。
演算部１７に設けられた部分演算ユニット２０１〜２０４の各々は、演算部１７が行う３２ビット演算を４等分した８ビット演算を行う。すなわち部分演算ユニット２０１は、３２ビットの入力データＡ及びＢのうちのそれぞれ０ビット目〜７ビット目の部分であるＡ［７：０］とＢ［７：０］とを入力として、実行コードＣｏｄｅＥｘｅにより指定された演算を行い、８ビットの演算結果Ｓ［７：０］とキャリーＣ１を出力する。
第２の部分演算ユニット２０２は、Ａ及びＢのうちのそれぞれ８ビット目〜１５ビット目まで部分であるＡ［１５：８］及びＢ［１５：８］とキャリーＣ１とを入力として、実行コードＣｏｄｅＥｘｅにより指定された演算を行い、８ビットの演算結果Ｓ［１５：８」とキャリーＣ２を出力する。【００８２】
第３の部分演算ユニット２０３は、Ａ及びＢのうちのそれぞれ１６ビット目〜２３ビット目まで部分であるＡ［２３：１６］及びＢ［２３：１６］とキャリーＣ２とを入力として、実行コードＣｏｄｅＥｘｅにより指定された演算を行い、８ビットの演算結果Ｓ［２３：１６」とキャリーＣ３を出力する。
第４の部分演算ユニット２０４は、Ａ及びＢのうちのそれぞれ１６ビット目〜２３ビット目まで部分であるＡ［３１：２４］及びＢ［３１：２４］とキャリーＣ３とを入力として、実行コードＣｏｄｅＥｘｅにより指定された演算を行い、８ビットの演算結果Ｓ［３１：２４］と、キャリー判定やゼロ判定の結果を示すフラグＦを出力する。【００８３】
そして演算部１７は、これら演算結果Ｓ［７：０］、Ｓ［１５：８］、Ｓ［２３：１６］及びＳ［３１：２４］を組み合わせた３２ビットの演算結果Ｓ［３１：０］と、フラグＦを出力する。
また演算部１７は、実行コードＣｏｄｅＥｘｅをデコードして、ＣｏｄｅＥｘｅに含まれていたコードＣｏｄｅＷｒｉｔｅとディスティネーションレジスタの指定Ｒｄを取得するデコーダ２５２を備える。【００８４】
図２１は、クロック制御部１９の概略構成図である。クロック制御部１９は、基準クロック信号ＲｅｆＣＬＫに同期するＰＬＬ回路１３０と、各クロック信号を生成するクロックインバータ１４０〜１４３及び１５１〜１５４と、モード切替信号ＣＫＥＮ２０〜ＣＫＥＮ２２を生成するモード切替信号生成部１６１〜１６２と、を備える。
ＰＬＬ回路１３０は、位相比較回路１３１と、基準クロック信号ＲｅｆＣＬＫの８倍の速度のクロック信号×８ＣＬＫを生成する逓倍部１３２と、逓倍部１３２の出力クロック信号の速度を１／８に落として基準クロック信号ＲｅｆＣＬＫが有する周期及び位相と同じ周期及び位相を持つクロック信号を生成する分周部１３３と、を備える。分周部１３３の出力信号は、フェッチタイミングクロック信号Ｃｋｆ及びクロック信号Ｃｋ１として使用される。【００８５】
クロックインバータ１４０〜１４３は、入力Ｐ＃（０）及び現在状態に基づいて、入力されるクロック信号×８ＣＬＫの周期、すなわち基本周期ΔＴｂの１／８の周期で現在ステートを更新し、現在ステートに応じた論理値を出力する有限状態機械である。クロックインバータ１４０〜１４３は、基本周期ΔＴｂの１／８の周期で論理値を出力できるので、基本周期ΔＴｂと同じ周期、基本周期ΔＴｂの１／２の周期及び１／４の周期を有するクロックを出力することができる。クロックインバータ１４０〜１４３は、入力Ｐ＃（０）が１、２及び４のとき基本周期ΔＴｂと同じ周期、基本周期ΔＴｂの１／２の周期及び１／４の周期のクロックをそれぞれ出力する。【００８６】
入力Ｐ＃（０）に定数４が入力されるクロックインバータ１４０は、基本周期ΔＴｂの１／４の周期を有するクロック信号×４ＣＬＫを生成する。またクロック信号×４ＣＬＫを反転させてクロック信号Ｃｋ４が生成される。
また入力Ｐ＃（０）に定数１が入力されるクロックインバータ１４１は、基本周期ΔＴｂと同じ周期を有するメインクロックＭａｉｎＣＬＫ及び実行結果保持タイミングクロックＣｋｗを生成する。
クロックインバータ１４２及び１４３によるクロックＣｋｄ及びＣｋｅの生成動作については後述する。【００８７】
またクロック信号φ２０〜φ２３を出力するクロックインバータ１５１〜１５４は、入力Ｐ＃（０）、Ｐ＃（−１）及び現在状態に基づいて、入力されるクロック信号×８ＣＬＫの周期で現在ステートを更新し、現在ステートに応じた論理値を出力する有限状態機械である。クロックインバータ１４０〜１４３と同様に、クロックインバータ１５１〜１５４は、基本周期ΔＴｂと同じ周期、基本周期ΔＴｂの１／２の周期及び１／４の周期を有するクロックを出力することができる。
モード切替信号ＣＫＥＮ２０〜２２を生成するモード切替信号生成部１６１〜１６３もまた、入力Ｐ＃（０）、Ｐ＃（−１）及び現在状態に基づいて、クロック信号×８ＣＬＫの周期で現在ステートを更新し、現在ステートに応じた論理値を出力する有限状態機械である。
これらクロックインバータ１５１〜１５４によるクロック信号φ２０〜φ２３の生成動作及びモード切替信号生成部１６１〜１６３によるモード切替信号ＣＫＥＮ２０〜２２の生成動作については後述する。【００８８】
以下、並列数の変化に伴って演算部１７のパイプライン段を変更するプロセッサ１の動作を説明する。図２２は、並列数が１から４に変化する際のフェッチ段におけるプロセッサ１の動作を示すタイムチャートであり、図２３は、並列数が１から４に変化する際のデコード段におけるプロセッサ１の動作を示すタイムチャートであり、図２４は、並列数が１から４に変化する際の実行段におけるプロセッサ１の動作を示すタイムチャートであり、図２５は、並列数が１から４に変化する際の実行結果保持タイミングクロックＣｋｗと分岐制御信号ＢｒａｎｃｈＣｎｔｒｌの変化を示すタイムチャートである。
なお、本プロセッサ１では、フェッチ段とは命令メモリ５００の読み出しから命令バッファ１１への書き込みまでのステージを示し、デコード段とは命令バッファ１１の読み出しからレジスタ５１〜５３への書き込みまでのステージを示し、実行段とはレジスタ５１〜５３の読み出しからレジスタ６１〜６３への書き込みまでのステージを示す。【００８９】
図２２に示すとおり、基準クロックＲｅｆＣＬＫのサイクルＴ０に命令バッファ（ＩｎｓｔＢｕｆｆ）１１の読み込まれた命令Ｃｏｍ＃３の並列数は１であり、サイクルＴ０に続くサイクルＴ１で読み込んだ命令Ｃｏｍ＃４において並列数が１から４へと変化し、サイクルＴ１〜Ｔ４にて命令バッファ１１の読み込まれた命令Ｃｏｍ＃４〜７の並列数が４であったと仮定する。命令バッファ１１は、サイクルＴ１において並列数Ｐ＃＝４の命令Ｃｏｍ＃４をフェッチする。
図２３に示すように、サイクルＴ１においてメインデコーダ１２の並列数信号生成部１１１は、命令バッファ１１から命令Ｃｏｍ＃４を受信すると、並列数信号の値Ｐ＃を１から４に変更する。並列数信号（Ｐ＃＝４）は、図２１に示すクロック制御部１９のレジスタ１７１へ入力される。【００９０】
なお図２３において、信号Ｓｅｌはメインデコーダ１２から出力される選択信号Ｓｅｌを示し、信号Ｃｋｄはデコード結果保持タイミングクロック信号Ｃｋｄを示し、信号ＣｏｄｅＤはレジスタ４１にラッチされた中間コードＣｏｄｅＤを示し、信号Ｒｓ０及びＲｓ１はレジスタ４２及び４３にラッチされたレジスタ番号Ｒｓ０及びＲｓ１を示し、Ｒｉｄｘはメインデコーダ１２から出力されるレジスタ番号Ｒｉｄｘを示し、ＩｍｍＤ及びＩｍｍＡはメインデコーダ１２から出力される即値ＩｍｍＤ及びＩｍｍＡを示し、ＲＡ及びＲＢはレジスタファイル１４から出力されたレジスタ値ＲＡ及びＲＢを示し、ＩＭはレジスタ４４にラッチされた即値ＩＭを示し、Ｍはデータメモリ５０１から出力されるデータ値Ｍを示す。【００９１】
また、命令バッファ１１にフェッチされた命令Ｃｏｍ＃ｊ（ｊ＝０、１、２…）をデコードして得られた中間コードＣｏｄｅＤ、レジスタ番号Ｒｓ０、Ｒｓ１及びＲｉｄｘ、即値ＩｍｍＤ、ＩｍｍＡ及びＩＭ、レジスタ値ＲＡ及びＲＢ、並びにデータ値Ｍを、それぞれＣｄＤ＃ｊ、Ｒｓ０（ｊ）、Ｒｓ１（ｊ）、Ｒｉｄｘ（ｊ）、ＩｍｍＤ（ｊ）、ＩｍｍＡ（ｊ）及びＩＭ（ｊ）、ＲＡ（ｊ）及びＲＢ（ｊ）並びにＭ（ｊ）と表記する。【００９２】
特に、並列数Ｐ＃が１でない命令Ｃｏｍ＃ｊをデコードすることによって生じた複数の中間コードを＃ｊａ、＃ｊｂ、＃ｊｃ及び＃ｊｄと示し、中間コード＃ｊａのオペレランドのレジスタ番号をｓ０ａ（ｊ）及びｓ１ａ（ｊ）と示し、中間コード＃ｊｂのオペレランドのレジスタ番号をｓ０ｂ（ｊ）及びｓ１ｂ（ｊ）と示し、中間コード＃ｊｃのオペレランドのレジスタ番号をｓ０ｃ（ｊ）及びｓ１ｃ（ｊ）と示し、中間コード＃ｊｄのオペレランドのレジスタ番号をｓ０ｄ（ｊ）及びｓ１ｄ（ｊ）と示す。
レジスタ番号をｓ０ａ（ｊ）及びｓ１ａ（ｊ）のレジスタ値をそれぞれＲＡ（ｊ）ａ及びＲＢ（ｊ）ａと示し、レジスタ番号をｓ０ｂ（ｊ）及びｓ１ｂ（ｊ）のレジスタ値をそれぞれＲＡ（ｊ）ｂ及びＲＢ（ｊ）ｂと示し、レジスタ番号をｓ０ｃ（ｊ）及びｓ１ｃ（ｊ）のレジスタ値をそれぞれＲＡ（ｊ）ｃ及びＲＢ（ｊ）ｃと示し、レジスタ番号をｓ０ｄ（ｊ）及びｓ１ｄ（ｊ）のレジスタ値をそれぞれＲＡ（ｊ）ｄ及びＲＢ（ｊ）ｄと示す。【００９３】
レジスタ１７１は、基準クロック信号ＲｅｆＣＬＫと等しいクロック信号Ｃｋ１に同期して、メインデコーダ１２から出力される並列数信号Ｐ＃をラッチするレジスタであり、レジスタ１７２は、クロック信号Ｃｋ１に同期してレジスタ１７１の出力ＰＱ０をラッチするレジスタであり、レジスタ１７３は、クロック信号Ｃｋ１に同期してレジスタ１７２の出力ＰＱ１をラッチするレジスタである。したがって、レジスタ１７１の出力ＰＱ０は、メインデコーダ１２から出力される並列数信号Ｐ＃よりも基本周期ΔＴｂだけ遅れており、レジスタ１７２の出力ＰＱ１はレジスタ１７１の出力ＰＱ０に対して基本周期ΔＴｂだけ遅れており、レジスタ１７３の出力ＰＱ２ｄはレジスタ１７２の出力ＰＱ１に対して基本周期ΔＴｂだけ遅れている。【００９４】
図２６は図２１に示すクロックインバータ１４０の概略構成図である。上述のとおり、クロックインバータ１４０は、有限状態機械であり、現在ステートＱＳを保持する現在ステート記憶部１８１と、現在ステートＱＳと入力Ｐ＃（０）に基づいて次ステートＳを決定して現在ステート記憶部１８１へ出力するとともに次ステートＳに対応する論理値Ｄを出力する次ステート関数部１８２と、論理値Ｄに基づいて出力値Ｄを出力する出力関数部１８３と、を備えている。現在ステート記憶部１８１と出力関数部１８３とは、クロック信号×８ＣＬＫが入力される入力クロックＣＫにより入力データをラッチするフリップフロップなどの記憶素子を用いて構成される。クロックインバータ１４１〜１４３の構成はクロックインバータ１４０の構成と同様である。【００９５】
図２７は、図２６に示すクロックインバータ１４０の状態遷移図である。次ステート関数部１８２は、入力Ｐ＃（０）が１である間は「０」から「７」までの状態を巡回するように次ステートを決定する。入力Ｐ＃（０）が２である間は、次ステート関数部１８２は、「８」から「１１」までの状態を巡回するように次ステートを決定する。入力Ｐ＃（０）が４である間は、次ステート関数部１８２は次ステートが状態「１２」及び「１３」を交互に持つように次ステートを決定する。
そして、入力Ｐ＃（０）が１以外の値から１へ変化したとき次ステートを「０」に設定し、入力Ｐ＃（０）が２以外の値から２へ変化したとき次ステートＳを「８」に設定し、入力Ｐ＃（０）が４以外の値から４へ変化したとき次ステートＳを「１２」に設定する。【００９６】
次ステート関数部１８２は、出力関数部１８３へ出力する論理値Ｄを、次ステートＳが「０」〜「１３」のいずれの状態であるかに応じて決定する。図２７に示す状態遷移図は、次ステートＳの値が、一点鎖線よりも上に配置された状態のいずれかであるときは、次ステート関数部１８２は論理値Ｄ＝１を出力し、次ステートＳの値が、一点鎖線よりも下に配置された状態のいずれかであるときは、次ステート関数部１８２は論理値Ｄ＝０を出力することを示している。例えば図２７に示す状態遷移図は、次ステートＳの値が「０」〜「３」、「８」、「９」及び「１２」のいずれかであるときには次ステート関数部１８２は論理値Ｄ＝１を出力し、次ステートＳの値が「４」〜「７」、「１０」、「１１」及び「１３」のいずれかであるときには次ステート関数部１８２は論理値Ｄ＝０を出力することを示している。
なお、後述する図３２、図３４、図３６、図３８、図４０、図４２及び図４４に示される状態遷移図についても、次ステートＳとそれに対応する論理値Ｄとの間の関係を、図２７と同様の表記法に従って示す。【００９７】
図２８は、図２１に示すクロックインバータ１４０の内部状態を示すタイムチャートである。クロックインバータ１４０には入力クロックＣＫとして×８ＣＬＫが与えられ、入力Ｐ＃（０）として常に定数「４」が与えられている。したがって現在ステートＱＳ及び次ステートＳの状態は、基本周期ΔＴｂの１／８の周期で「１２」と「１３」との間で変化するため、出力Ｑは、ΔＴｂ／８の周期で出力値が「１」と「０」の間で変化するクロック、すなわちクロック信号×４ＣＬＫとなる。
なお、クロック信号×４ＣＬＫの立ち上がりエッジは基準クロックＲｅｆＣＬＫの立ち上がりエッジから、ΔＴｂ／８だけ遅れている。これは出力関数部１８３を構成するフリップフロップによる遅延である。【００９８】
図２９は、図２１に示すクロックインバータ１４１〜１４３の内部状態を示すタイムチャートである。
クロックインバータ１４１には入力クロックＣＫとして×８ＣＬＫが与えられ、入力Ｐ＃（０）として常に定数「１」が与えられている。したがって現在ステートＱＳ及び次ステートＳの値は、基本周期ΔＴｂの１／８の周期で「０」〜「７」までの値を巡回する。このため出力Ｑは、ΔＴｂ／２の周期で出力値が「１」と「０」の間で変化するクロックとなる。したがってクロックインバータ１４１が出力するメインクロックＭａｉｎＣＬＫと実行結果保持タイミングクロックＣｋｗは、基本周期ΔＴｂと同じ周期のクロックとなる。
またクロック信号×４ＣＬＫと同様に、メインクロックＭａｉｎＣＬＫ及び実行結果保持タイミングクロックＣｋｗも基準クロックＲｅｆＣＬＫの立ち上がりエッジからΔＴｂ／８遅れている。以下、基準クロックＲｅｆＣＬＫのサイクルＴｉ（ｉ＝０、１、２…）よりもΔＴｂ／８遅れたメインクロックＭａｉｎＣＬＫのサイクルをＴｉ’と記す。【００９９】
入力Ｐ＃（０）が「１」である間は、クロックインバータ１４２により生成されるデコード結果保持タイミングクロック信号Ｃｋｄ、及びクロックインバータ１４３により生成される命令投入タイミングクロック信号Ｃｋｅもまた、メインクロックＭａｉｎＣＬＫと同じ信号となる。
このため図２３に示すとおり、クロック信号Ｃｋｄに同期して入力をラッチするレジスタ群４１〜４５は、並列数が１である命令のデコード結果を保持するときメインクロックＭａｉｎＣＬＫのサイクルＴｉ’と同じサイクルでデコード結果を更新する。
図２４に示すとおり、クロック信号Ｃｋｅに同期してデータが取り出されるレジスタ群５１〜５３からは、メインクロックＭａｉｎＣＬＫのサイクルＴｉ’と同じサイクルで実行コードＣｏｄｅＥｘｅと入力値Ａ及びＢが演算部１７へ出力される。【０１００】
図３０は、入力Ｐ＃（０）が「１」から「４」へ変化したときのクロックインバータ１４２、１４３の内部状態を示すタイムチャートである。サイクルＴ２において入力Ｐ＃（０）が「１」から「４」へ変化すると、次ステートＳの状態が「１２」にセットされ、その後現在ステートＱＳ及び次ステートＳの状態は「１２」と「１３」との間で変化する。このため出力Ｑは、入力Ｐ＃（０）が４に変化してからΔＴｂ／８遅れて、ΔＴｂ／４の周期のクロック信号を出力し始める。【０１０１】
図２１に示すとおり、クロックインバータ１４２の入力Ｐ＃（０）には、レジスタ１７１の出力ＰＱ０が入力され、クロックインバータ１４３の入力Ｐ＃（０）には、レジスタ１７２の出力ＰＱ１が入力される。
従って図２３に示すとおり、クロックインバータ１４２から出力されるクロック信号Ｃｋｄは、メインデコーダ１２にて並列数信号Ｐ＃の変化が検出された時刻よりも（１＋１／８）×基本周期ΔＴｂだけ遅れて周期が変化する。本タイムチャートでは、並列数信号Ｐ＃が「１」から「４」へ変化するため、クロック信号Ｃｋｄの周期はΔＴｂからΔＴｂ／４に変化する。このようにクロック信号Ｃｋｄの周期が変化することによって、メインデコーダ１２が並列数信号Ｐ＃が１でない命令をデコードし、これによって命令キュー１１７から中間コード及びオペランドが基本周期ΔＴｂの周期よりも短い周期で出力されたとき、レジスタ群４１〜４３はこれらを順次ラッチする。【０１０２】
また図２３及び２４に示すとおり、クロックインバータ１４３から出力されるクロック信号Ｃｋｅは、クロックインバータ１４２から出力されるクロック信号Ｃｋｄよりも、基本周期ΔＴｂ遅れて周期が変化する。
なお図２４において、信号Ｃｋｅは命令投入タイミングクロック信号Ｃｋｅを示し、信号ＣｏｄｅＥｘｅはレジスタ５１から演算部１７へ出力される実行コードＣｏｄｅＥｘｅを示し、信号Ａ及びＢはレジスタ５２及び５３から演算部１７へ出力される第１及び第２入力データＡ及びＢを示し、信号φ２０〜２２は、クロック制御部１９から演算部１７へ供給されるクロック信号φ２０〜２２を示し、信号ＣＫＥＮ２０〜２２はクロック制御部１９から演算部１７へ供給されるモード切替信号ＣＫＥＮ２０〜２２を示し、信号φ２３はクロック制御部１９からレジスタファイル１４へ与えられるレジスタ更新クロックφ２３を示す。【０１０３】
ＣＤ１〜ＣＤ３は図２０に示した演算部１７のパイプラインレジスタ２１１、２２１及び２３１から部分演算ユニット２０２〜２０４へそれぞれ出力される実行コードを示す。例えばサイクルＴ３’の第４四半期では、部分演算ユニット２０１は実行コード＃４ｄを受信し、部分演算ユニット２０２は実行コード＃４ｃを受信し、部分演算ユニット２０３は実行コード＃４ｂを受信し、部分演算ユニット２０４は実行コード＃４ａを受信する。
信号Ｓ及び信号Ｆは演算部１７から出力される演算結果Ｓ及びフラグＦを示し、信号Ｒｄは演算部１７のデコーダ２５２から出力されるディスティネーションレジスタの指定Ｒｄを示す。【０１０４】
また、命令バッファ１１にフェッチされた命令Ｃｏｍ＃ｊ（ｊ＝０、１、２…）をデコードして得られた実行コードＣｏｄｅＥｘｅをＣｄＥ＃ｊと表記し、命令Ｃｏｍ＃ｊをデコードして得られた演算部１７への第１及び第２入力データＡ及びＢをそれぞれＡ（ｊ）及びＢ（ｊ）と表記する。
特に、並列数Ｐ＃が１でない命令Ｃｏｍ＃ｊをデコードすることによって生じた複数の実行コードを＃ｊａ、＃ｊｂ、＃ｊｃ及び＃ｊｄと表記する。また並列数Ｐ＃が１でない命令Ｃｏｍ＃ｊをデコードすることによって生じた複数の第１入力データＡをＡａ（ｊ）、Ａｂ（ｊ）、Ａｃ（ｊ）及びＡｄ（ｊ）と表記する。さらに並列数Ｐ＃が１でない命令Ｃｏｍ＃ｊをデコードすることによって生じた複数の第２入力データＢをＢａ（ｊ）、Ｂｂ（ｊ）、Ｂｃ（ｊ）及びＢｄ（ｊ）と表記する。【０１０５】
第１及び第２入力データＡａ（ｊ）とＢａ（ｊ）との間の演算結果ＳとフラグＦとをそれぞれＳａ（ｊ）及びＦＬａ（ｊ）と表記し、Ａｂ（ｊ）とＢｂ（ｊ）との間の演算結果ＳとフラグＦとをそれぞれＳｂ（ｊ）及びＦＬｂ（ｊ）と表記し、Ａｃ（ｊ）とＢｃ（ｊ）との間の演算結果ＳとフラグＦとをそれぞれＳｃ（ｊ）及びＦＬｃ（ｊ）と表記し、Ａｄ（ｊ）とＢｄ（ｊ）との間の演算結果ＳとフラグＦとをそれぞれＳｄ（ｊ）及びＦＬｄ（ｊ）と表記する。
さらに並列数Ｐ＃が１でない命令Ｃｏｍ＃ｊをデコードすることによって生じたディスティネーションレジスタの指定をＲｄａ（ｊ）、Ｒｄｂ（ｊ）、Ｒｄｃ（ｊ）及びＲｄｄ（ｊ）と表記する。【０１０６】
図２０に示すように、実行コードを保持するパイプラインレジスタ２１１と入力値Ａ及びＢを保持するパイプラインレジスタ２１２〜２１７とは同じクロックφ２０及びモード切替信号ＣＫＥＮ２０で駆動され、パイプラインレジスタ２２１とパイプラインレジスタ２２２〜２２５とは同じクロックφ２１及びモード切替信号ＣＫＥＮ２１で駆動され、パイプラインレジスタ２３１とパイプラインレジスタ２３２〜２３５とは同じクロックφ２２及びモード切替信号ＣＫＥＮ２２で駆動される。
したがって各部分演算ユニット２０１〜２０４は、ある実行コード＃ｊｘ（ｘ＝ａ、ｂ…）を受信するとき、この実行コード＃ｊｘに伴う第１入力データＡｘ（ｊ）及び第２入力データＢｘ（ｊ）を同時に受信する。【０１０７】
図１２に示すとおりデコード結果保持タイミングクロック信号Ｃｋｄ及び命令投入タイミングクロック信号Ｃｋｅは、プロセッサ１のデコード段と実行段の間に設けられた先入れ先出しバッファであるレジスタ５１〜５３に供給される。クロック信号Ｃｋｄはレジスタ５１〜５３へのデータ書き込みタイミングを定めるクロックとして使用され、クロック信号Ｃｋｅはレジスタ５１〜５３からのデータ読み出しタイミングを定めるクロックとして使用される。【０１０８】
図２３及び２４に示すとおりプロセッサ１のデコード段で処理される命令は、実行段で処理される命令よりも１基本周期ΔＴｂ分遅れている。したがって、あるサイクルＴｊにおいてフェッチした命令Ｃｏｍ＃ｊの並列数Ｐ＃が１でない場合には、実行段が先行するサイクルＴ（ｊ−１）においてフェッチした命令Ｃｏｍ＃（ｊ−１）を処理している途中で、メインデコーダ１２が中間コード＃ｊａ、＃ｊｂ…やレジスタ番号Ｓ０ａ（ｊ）、Ｓ０ｂ（ｊ）…、Ｓ１ａ（ｊ）、Ｓ１ｂ（ｊ）…を出力し始める。
このため先入れ先出しバッファであるレジスタ５１〜５３をデコード段と実行段の間に設け、データ読み出し用クロック信号Ｃｋｅをデータ書き込み用クロック信号Ｃｋｄよりも１基本周期ΔＴｂ分遅らせる。このようなレジスタ５１〜５３を設けることによって、命令Ｃｏｍ＃（ｊ−１）をデコードして得られる実行コードを実行段が処理している間に、次の命令Ｃｏｍ＃ｊをデコードして得られる中間コード＃ｊａ、＃ｊｂ…、及びレジスタ番号Ｓ０ａ（ｊ）、Ｓ０ｂ（ｊ）…、Ｓ１ａ（ｊ）、Ｓ１ｂ（ｊ）…を保持する。【０１０９】
以下、図２４に示すクロック信号φ２０〜φ２３を生成するクロックインバータ１５１〜１５４の動作と、図２４に示すモード切替信号ＣＫＥＮ２０〜φ２２を生成するモード切替信号生成部１６１〜１６３の動作を説明する。図３１は、図２１に示すクロックインバータ１５１の概略構成図である。上述のとおりクロックインバータ１５１は、有限状態機械であり、現在ステートＱＳを保持する現在ステート記憶部１８４と、現在ステートＱＳ、入力Ｐ＃（０）及びＰ＃（−１）に基づいて次ステートＳを決定して現在ステート記憶部１８４へ出力するとともに次ステートＳに対応する論理値Ｄを出力する次ステート関数部１８５と、論理値Ｄに基づいて出力値Ｄを出力する出力関数部１８６と、を備えている。現在ステート記憶部１８４と出力関数部１８６とは、クロック信号×８ＣＬＫが入力される入力クロックＣＫにより入力データをラッチするフリップフロップなどの記憶素子を用いて構成される。クロックインバータ１５２〜１５４の構成はクロックインバータ１５１の構成と同様である。【０１１０】
図２１を参照すると、クロックインバータ１５１の入力Ｐ＃（０）にはレジスタ１７２の出力ＰＱ１が入力される。したがって並列数に変化があったとき、クロック信号φ２０を生成するクロックインバータ１５１の入力Ｐ＃（０）は、命令投入タイミングクロック信号Ｃｋｅを生成するクロックインバータ１４３の入力Ｐ＃（０）と同じタイミングで変化する。また、クロックインバータ１５１の入力Ｐ＃（−１）にはレジスタ１７３の出力ＰＱ２ｄが入力されて、入力Ｐ＃（−１）は入力Ｐ＃（０）よりも１基本周期ΔＴｂ遅れる。【０１１１】
図３２は、図２１に示すクロックインバータ１５１の状態遷移図である。並列数が１である間、すなわちＰ＃（０）＝Ｐ＃（−１）＝１である間は、状態「０」から「７」までを巡回するように次ステートの値Ｓが決定される。
並列数が１から４に変化することによりＰ＃（０）が４へ変化したとき、次ステートＳは参照符号Ｊ１−１によって示した線に沿って状態「１５」へ変化する。そしてＰ＃（０）＝４かつＰ＃（−１）＝１である間、次ステートＳは、交互に状態「１７」及び「１６」になる。
Ｐ＃（０）が４へ変化してから１基本周期ΔＴｂが経過すると、Ｐ＃（−１）が４へ変化する。このとき、次ステートＳは参照符号Ｊ１−２によって示した線に沿って状態「１２」へ変化する。そしてそれ以降、次ステートＳは、交互に状態「１２」及び「１３」になる。
図３３は、並列数が１から４に変化する際のクロックインバータ１５１の内部状態を示すタイムチャートである。並列数が１から４に変化したとき、クロックインバータ１５１の出力φ２０の周期は、命令投入タイミングクロック信号Ｃｋｅの変化よりもΔＴｂ／４遅れて、基本周期ΔＴｂからΔＴｂ／４へ変化する。【０１１２】
図２１を参照すると、クロックインバータ１５２の入力Ｐ＃（０）にはレジスタ１７４の出力ＰＱ２が入力される。ここでレジスタ１７４は、クロック信号Ｃｋ４に同期してレジスタ１７２の出力ＰＱ１をラッチするレジスタであり、レジスタ１７５は、クロック信号Ｃｋ４に同期してレジスタ１７４の出力ＰＱ２をラッチするレジスタであり、レジスタ１７６は、クロック信号Ｃｋ４に同期してレジスタ１７５の出力ＰＱ３をラッチするレジスタであり、レジスタ１７７は、クロック信号Ｃｋ４に同期してレジスタ１７６の出力ＰＱ４をラッチするレジスタである。
したがって、レジスタ１７４の出力ＰＱ２はレジスタ１７２の出力ＰＱ１よりもΔＴｂ／４だけ遅れており、レジスタ１７５の出力ＰＱ３はレジスタ１７４の出力ＰＱ２よりもΔＴｂ／４だけ遅れており、レジスタ１７６の出力ＰＱ４はレジスタ１７５の出力ＰＱ３よりもΔＴｂ／４だけ遅れており、レジスタ１７７の出力ＰＱ５はレジスタ１７６の出力ＰＱ４よりもΔＴｂ／４だけ遅れている。【０１１３】
並列数に変化があったとき、クロック信号φ２１を生成するクロックインバータ１５２の入力Ｐ＃（０）は、クロック信号φ２０を生成するクロックインバータ１５１の入力Ｐ＃（０）よりもΔＴｂ／４だけ遅れたタイミングで変化する。また、クロックインバータ１５２の入力Ｐ＃（−１）にはレジスタ１７５の出力ＰＱ３が入力されて、入力Ｐ＃（−１）は入力Ｐ＃（０）よりもΔＴｂ／４だけ遅れる。【０１１４】
図３４は、図２１に示すクロックインバータ１５２の状態遷移図である。並列数が１である間、すなわちＰ＃（０）＝Ｐ＃（−１）＝１である間は、状態「０」から「７」までを巡回するように次ステートＳが決定される。
Ｐ＃（０）が４へ変化したとき、次ステートＳは参照符号Ｊ１−１によって示した線に沿って状態「１５」へ変化する。そしてＰ＃（０）＝４かつＰ＃（−１）＝１である間、次ステートＳは状態「１７」に維持される。
Ｐ＃（０）が４へ変化してからΔＴｂ／４が経過すると、Ｐ＃（−１）が４へ変化する。このとき、次ステートＳは参照符号Ｊ１−２によって示した線に沿って状態「１２」へ変化する。そしてそれ以降、次ステートＳの値は、交互に状態「１２」及び「１３」になる。
図３５は、並列数が１から４に変化する際のクロックインバータ１５２の内部状態を示すタイムチャートである。並列数が１から４に変化したとき、クロックインバータ１５２の出力φ２１の周期は、クロック信号φ２０の変化よりもΔＴｂ／４遅れて、基本周期ΔＴｂからΔＴｂ／４へ変化する。【０１１５】
図２１を参照すると、クロックインバータ１５３の入力Ｐ＃（０）にはレジスタ１７５の出力ＰＱ３が入力される。このため並列数に変化があったとき、クロック信号φ２２を生成するクロックインバータ１５３の入力Ｐ＃（０）は、クロック信号φ２１を生成するクロックインバータ１５２の入力Ｐ＃（０）よりもΔＴｂ／４だけ遅れたタイミングで変化する。また、クロックインバータ１５３の入力Ｐ＃（−１）にはレジスタ１７６の出力ＰＱ４が入力されて、入力Ｐ＃（−１）は入力Ｐ＃（０）よりもΔＴｂ／４だけ遅れる。【０１１６】
図３６は、図２１に示すクロックインバータ１５３の状態遷移図である。並列数が１から４に変わる際に生じるクロックインバータ１５３の状態遷移は、クロックインバータ１５２に生じる状態遷移と同様である。図３７は、並列数が１から４に変化する際のクロックインバータ１５３及び１５４の内部状態を示すタイムチャートである。並列数が１から４に変化したとき、クロックインバータ１５３の出力φ２２の周期は、クロック信号φ２１の変化よりもΔＴｂ／４遅れて、基本周期ΔＴｂからΔＴｂ／４へ変化する。【０１１７】
図２１を参照すると、クロックインバータ１５４の入力Ｐ＃（０）にはレジスタ１７６の出力ＰＱ４が入力される。このため並列数に変化があったとき、クロック信号φ２３を生成するクロックインバータ１５４の入力Ｐ＃（０）は、クロック信号φ２２を生成するクロックインバータ１５３の入力Ｐ＃（０）よりもΔＴｂ／４だけ遅れたタイミングで変化する。また、クロックインバータ１５４の入力Ｐ＃（−１）にはレジスタ１７７の出力ＰＱ５が入力されて、入力Ｐ＃（−１）は入力Ｐ＃（０）よりもΔＴｂ／４だけ遅れる。【０１１８】
図３８は、図２１に示すクロックインバータ１５４の状態遷移図である。並列数が１から４に変わる際に生じるクロックインバータ１５４の状態遷移は、クロックインバータ１５２に生じる状態遷移と同様である。このため図３７に示すように、並列数が１から４に変化したとき、クロックインバータ１５３の出力φ２３の周期は、クロック信号φ２２の変化よりもΔＴｂ／４遅れて基本周期ΔＴｂからΔＴｂ／４へ変化する。【０１１９】
図３９は、図２１に示すモード切替信号生成部１６１の概略構成図である。モード切替信号生成部１６１は、有限状態機械であり、現在ステートＱＳを保持する現在ステート記憶部１８７と、現在ステートＱＳ、入力Ｐ＃（０）及びＰ＃（−１）に基づいて次ステートＳを決定して現在ステート記憶部１８７へ出力するとともに次ステートＳに対応する論理値Ｄを出力する次ステート関数部１８８と、論理値Ｄに基づいて出力値Ｄを出力する出力関数部１８９と、を備えている。現在ステート記憶部１８７と出力関数部１８９とは、クロック信号×８ＣＬＫが入力される入力クロックＣＫにより入力データをラッチするフリップフロップなどの記憶素子を用いて構成される。モード切替信号生成部１６２及び１６３の構成はモード切替信号生成部１６１の構成と同様である。【０１２０】
図２１を参照すると、モード切替信号生成部１６１の入力Ｐ＃（０）にはレジスタ１７２の出力ＰＱ１が入力される。したがって並列数に変化があったとき、モード切替信号生成部１６１の入力Ｐ＃（０）は、命令投入タイミングクロック信号Ｃｋｅを生成するクロックインバータ１４３の入力Ｐ＃（０）と同じタイミングで変化する。また、モード切替信号生成部１６１の入力Ｐ＃（−１）にはレジスタ１７３の出力ＰＱ２ｄが入力されて、入力Ｐ＃（−１）は入力Ｐ＃（０）よりも１基本周期ΔＴｂ遅れる。【０１２１】
図４０は、図２１に示すモード切替信号生成部１６１の状態遷移図である。並列数が１である間、すなわちＰ＃（０）＝Ｐ＃（−１）＝１である間は、次ステートＳは状態「０」に維持される。Ｐ＃（０）が４へ変化したとき、次ステートＳは状態「４」へ変化し、その後Ｐ＃（−１）が４へ変化するまで状態「５」に維持される。そしてＰ＃（−１）＝４となったとき次ステートＳは状態「２」に変わる。その後Ｐ＃（０）＝４かつＰ＃（−１）＝１である間、次ステートＳは状態「２」に維持される。【０１２２】
図４１は、並列数が１から４に変化する際のモード切替信号生成部１６１の内部状態を示すタイムチャートである。並列数が１であるときモード切替信号生成部１６１の出力ＣＫＥＮ２０は「Ｌ」であり、図２０に示すパイプラインレジスタ２１１〜２１９は入力値をそのまま出力するトランスペアレントモードで動作する。
並列数が１から４に変化すると、モード切替信号ＣＫＥＮ２０の値は、クロック信号φ２０の周期がΔＴｂ／４へ変化するよりもΔＴｂ／８早く「Ｈ」に変化し、パイプラインレジスタ２１１〜２１９はフリップフロップモードで動作し始める。【０１２３】
図２１を参照すると、モード切替信号生成部１６２の入力Ｐ＃（０）にはレジスタ１７４の出力ＰＱ２が入力される。したがって並列数に変化があったとき、モード切替信号生成部１６２の入力Ｐ＃（０）は、モード切替信号ＣＫＥＮ２０を生成するモード切替信号生成部１６１の入力Ｐ＃（０）よりもΔＴｂ／４だけ遅れたタイミングで変化する。また、モード切替信号生成部１６２の入力Ｐ＃（−１）にはレジスタ１７５の出力ＰＱ３が入力されて、入力Ｐ＃（−１）は入力Ｐ＃（０）よりもΔＴｂ／４遅れる。
また、モード切替信号生成部１６３の入力Ｐ＃（０）にはレジスタ１７５の出力ＰＱ３が入力される。したがって並列数に変化があったとき、モード切替信号生成部１６３の入力Ｐ＃（０）は、モード切替信号ＣＫＥＮ２１を生成するモード切替信号生成部１６２の入力Ｐ＃（０）よりもΔＴｂ／４だけ遅れたタイミングで変化する。また、モード切替信号生成部１６３の入力Ｐ＃（−１）にはレジスタ１７６の出力ＰＱ４が入力されて、入力Ｐ＃（−１）は入力Ｐ＃（０）よりもΔＴｂ／４遅れる。【０１２４】
図４２及び図４３は、それぞれ図２１に示すモード切替信号生成部１６２及び１６３の状態遷移図である。並列数が１から４に変わる際に生じるクロックインバータ１６２及び１６３の状態遷移は、クロックインバータ１５２に生じる状態遷移と同様である。このため図４４に示すように、並列数が１であるときモード切替信号生成部１６２及び１６３の出力ＣＫＥＮ２１及びＣＫＥＮ２２は「Ｌ」であり、図２０に示すパイプラインレジスタ２２１〜２２８及び２３１〜２３７はトランスペアレントモードで動作する。
並列数が１から４に変化すると、モード切替信号ＣＫＥＮ２１の値は、クロック信号φ２１の周期がΔＴｂ／４へ変化するよりもΔＴｂ／８早く「Ｈ」に変化し、パイプラインレジスタ２２１〜２２８はフリップフロップモードで動作し始める。またモード切替信号ＣＫＥＮ２２の値は、クロック信号φ２２の周期がΔＴｂ／４へ変化するよりもΔＴｂ／８早く「Ｈ」に変化し、パイプラインレジスタ２３１〜２３７はフリップフロップモードで動作し始める。【０１２５】
並列数が１から４に変化したとき、図２１に示すクロック制御部１９は、上述のとおりクロック信号φ２１〜２３及びモード切替信号ＣＫＥＮ２０〜ＣＫＥＮ２２を変更する。
この結果、図２４に示すとおり、並列数Ｐ＃が４である命令Ｃｏｍ＃４及びＣｏｍ＃５をデコードすることによって生じた複数の実行コード＃４ａ〜＃４ｄ及び＃５ａ〜＃５ｄは、周期ΔＴｂ／４で各部分演算ユニット２０１〜２０４へ順次供給される。【０１２６】
そして、＃４ｂ及びこれに続く実行コードは、部分演算ユニット２０１へ供給されるタイミングよりもΔＴｂ／４遅れて部分演算ユニット２０２へ供給され、部分演算ユニット２０２へ供給されるタイミングよりもΔＴｂ／４遅れて部分演算ユニット２０３へ供給され、部分演算ユニット２０３へ供給されるタイミングよりもΔＴｂ／４遅れて部分演算ユニット２０４へ供給される。
したがって並列数Ｐ＃が４であるとき、演算部１７に供給された１つの３２ビット演算は、桁方向に４つの部分的演算に分割されて、これら部分的演算はそれぞれ部分演算ユニット２０１〜２０４に割り当てられる。そして、部分演算ユニット２０１は割り当てられた部分的演算を部分演算ユニット２０２よりもΔＴｂ／４だけ早く実行し、部分演算ユニット２０２は割り当てられた部分的演算を部分演算ユニット２０３よりもΔＴｂ／４だけ早く実行し、部分演算ユニット２０３は割り当てられた部分的演算を部分演算ユニット２０４よりもΔＴｂ／４だけ早く実行する。
そしてある時点について見ると、部分演算ユニット２０１〜２０４は、４つの異なる３２ビット演算に属する部分的演算を並列に実行する。このような部分演算ユニット２０１〜２０４の動作によって、演算部１７は４つの演算を並列に実行するパイプライン処理を開始する。【０１２７】
以下、並列数１から２へ変化するときのプロセッサ１の動作を説明する。図４５は並列数が１から２に変化する際のフェッチ段におけるプロセッサ１の動作を示すタイムチャートであり、図４６は並列数が１から２に変化する際のデコード段におけるプロセッサ１の動作を示すタイムチャートであり、図４７は、並列数が１から２に変化する際の実行段におけるプロセッサ１の動作を示すタイムチャートである。なお、図４６及び図４７に示す各記号の用法は、図２３及び図２４に示す記号の用法と同じである。【０１２８】
図４５に示すとおり、サイクルＴ０に命令バッファ１１の読み込まれた命令Ｃｏｍ＃３の並列数は１であり、サイクルＴ１で読み込んだ命令Ｃｏｍ＃４において並列数が１から２へと変化し、サイクルＴ１〜Ｔ４にて命令バッファ１１の読み込まれた命令Ｃｏｍ＃４〜７の並列数が２であったと仮定する。【０１２９】
図４５及び図４６に示すように、サイクルＴ１においてメインデコーダ１２の並列数信号生成部１１１は、命令バッファ１１から命令Ｃｏｍ＃４を受信すると、並列数信号の値Ｐ＃を１から２に変更する。このときクロック信号Ｃｋｄは、メインデコーダ１２にて並列数信号Ｐ＃の変化が検出された時刻よりも（１＋１／８）×基本周期ΔＴｂだけ遅れて周期が変化する。またクロック信号Ｃｋｅは、クロック信号Ｃｋｄよりも基本周期ΔＴｂ遅れて周期が変化する。【０１３０】
以下、図４７に示すクロック信号φ２０〜φ２３を生成するクロックインバータ１５１〜１５４の動作と、図４７に示すモード切替信号ＣＫＥＮ２０〜φ２２を生成するモード切替信号生成部１６１〜１６３の動作を説明する。
図３２に示すとおり、図２１に示すクロックインバータ１５１では、並列数が１である間、すなわちＰ＃（０）＝Ｐ＃（−１）＝１である間は、状態「０」から「７」までを巡回するように次ステートが決定される。
並列数が１から２に変化することによりＰ＃（０）が２へ変化したとき、次ステートＳは参照符号Ｊ４−１によって示した線に沿って状態「２６」へ変化する。そしてＰ＃（０）＝２かつＰ＃（−１）＝１である間、状態「２６」から「２９」までを巡回するように次ステートが決定される。
Ｐ＃（０）が２へ変化してから１基本周期ΔＴｂが経過すると、Ｐ＃（−１）が２へ変化する。このとき、次ステートＳは参照符号Ｊ４−２によって示した線に沿って状態「８」へ変化する。そしてそれ以降、状態「８」から「１１」までの値を巡回するように次ステートが決定される。並列数が１から２に変化する際のクロックインバータ１５１の内部状態のタイムチャートを図４８に示す。【０１３１】
図３４に示すとおり、図２１に示すクロックインバータ１５２では、並列数が１である間は、状態「０」から「７」までを巡回するように次ステートＳが決定される。
並列数が１から２に変化することによりＰ＃（０）が２へ変化したとき、次ステートＳは参照符号Ｊ４−１によって示した線に沿って状態「３０」へ変化する。そしてＰ＃（０）＝２かつＰ＃（−１）＝１である間、次ステートＳは状態「３０」に維持さえる。【０１３２】
Ｐ＃（０）が２へ変化してからΔＴｂ／４が経過すると、Ｐ＃（−１）が２へ変化する。このとき、次ステートＳは参照符号Ｊ４−２によって示した線に沿って状態「８」へ変化する。それ以降、状態「８」から「１１」までを巡回するように次ステートＳが決定される。
並列数が１から２に変化する場合のクロックインバータ１５２の内部状態のタイムチャートを図４９に示す。【０１３３】
図３６に示すとおり、図２１に示すクロックインバータ１５３では、並列数が１である間は、状態「０」から「７」までを巡回するように次ステートＳが決定される。
並列数が１から２に変化することによりＰ＃（０）が２へ変化したとき、次ステートＳは参照符号Ｊ４−１によって示した線に沿って状態「３０」へ変化する。そしてＰ＃（０）＝２かつＰ＃（−１）＝１である間次ステートＳは状態「３０」に維持される。【０１３４】
Ｐ＃（０）が２へ変化してからΔＴｂ／４が経過すると、Ｐ＃（−１）が２へ変化する。このとき、次ステートＳは参照符号Ｊ４−２によって示した線に沿って状態「３１」へ変化する。その後次ステートＳは状態「３１」を２回繰り返してから、参照符号Ｊ４−３によって示した線に沿って「８」へ遷移する。そして状態「８」から「１１」までを巡回するように次ステートＳが決定される。
並列数が１から２に変化する場合のクロックインバータ１５３の内部状態のタイムチャートを図５０に示す。【０１３５】
図３８に示すとおり、図２１に示すクロックインバータ１５４では、並列数が１である間は、状態「０」から「７」までを巡回するように次ステートＳが決定される。
Ｐ＃（０）が２へ変化したとき、次ステートＳは参照符号Ｊ４−１によって示した線に沿って状態「３０」へ変化する。そしてＰ＃（０）＝２かつＰ＃（−１）＝１である間次ステートＳは状態「３０」に維持される。【０１３６】
Ｐ＃（０）が２へ変化してからΔＴｂ／４が経過すると、Ｐ＃（−１）が２へ変化する。このとき、次ステートＳは参照符号Ｊ４−２によって示した線に沿って状態「８」へ変化する。そして状態「８」から「１１」までを巡回するように次ステートＳが決定される。
並列数が１から２に変化する場合のクロックインバータ１５４の内部状態のタイムチャートを図５０に示す。【０１３７】
図４０に示すとおり、図２１に示すモード切替信号生成部１６１では、並列数が１である間、すなわちＰ＃（０）＝Ｐ＃（−１）＝１である間は、次ステートＳは状態「０」に維持される。Ｐ＃（０）が２へ変化したとき、次ステートＳは状態「１１」へ変化し、Ｐ＃（−１）が２へ変化するまで状態「１１」に維持される。そしてＰ＃（−１）＝２となったとき次ステートＳは状態「９」に変わる。その後次ステートＳは状態「９」に維持される。並列数が１から２に変化する場合のモード切替信号生成部１６１の内部状態のタイムチャートを図５１に示す。【０１３８】
図４２に示すとおり、図２１に示すモード切替信号生成部１６２では、並列数が１である間は、次ステートＳは状態「０」である。Ｐ＃（０）が２へ変化したとき、次ステートＳは状態「１１」へ変化し、Ｐ＃（−１）が２へ変化するまで状態「１１」に維持される。そしてＰ＃（−１）＝２となったとき次ステートＳは状態「１」へ変わる。その後、次ステートＳは状態「１」に維持される。並列数が１から２に変化する場合のモード切替信号生成部１６２の内部状態のタイムチャートを図５２に示す。【０１３９】
図４３に示すとおり、図２１に示すモード切替信号生成部１６３では、並列数が１である間は、次ステートＳは状態「０」である。Ｐ＃（０）が２へ変化したとき、次ステートＳは状態「１１」へ変化し、Ｐ＃（−１）が２へ変化するまで状態「１１」に維持される。そしてＰ＃（−１）＝２となったとき次ステートＳを値を「９」へ変える。その後次ステートＳは状態「９」に維持される。並列数が１から２に変化する場合のモード切替信号生成部１６３の内部状態のタイムチャートを図５２に示す。【０１４０】
図５１及び図５２に示すとおり並列数が１から２に変化するとき、モード切替信号ＣＫＥＮ２０及びＣＫＥＮ２２の値は「Ｌ」に維持され、図２０に示すパイプラインレジスタ２１１〜２１９及び２３１〜２３７はトランスペアレントモードで動作する。
一方で、モード切替信号ＣＫＥＮ２１は、サイクルＴ３’の中間にて「Ｌ」から「Ｈ」へ変化する。これにより、図２０に示すパイプラインレジスタ２２１〜２２８はサイクルＴ３’の中間にてフリップフロップモードへ変化する。【０１４１】
その結果、図７に示す演算ユニット２００の動作タイムチャートと同様に、演算部１７の第１部分演算ユニット２０１及び第２部分演算ユニット２０２が同じ３２ビット演算の部分演算を同時に実行し、第３部分演算ユニット２０３及び第４部分演算ユニット２０４は、第１部分演算ユニット２０１が演算した３２ビット演算よりも基本周期の１／２の期間（ΔＴｂ／２）前に演算部１７に入力された３２ビット演算の部分演算を実行する。このような部分演算ユニット２０１〜２０４の動作によって、演算部１７は２つの演算を並列に実行するパイプライン処理を開始する。【０１４２】
以下、並列数４から１へ変化するときのプロセッサ１の動作を説明する。図５３は並列数が４から１に変化する際のフェッチ段におけるプロセッサ１の動作を示すタイムチャートであり、図５４は並列数が４から１に変化する際のデコード段におけるプロセッサ１の動作を示すタイムチャートであり、図５５は、並列数が４から１に変化する際の実行段におけるプロセッサ１の動作を示すタイムチャートである。なお、図５４及び図５５に示す各記号の用法は、図２３及び図２４に示す記号の用法と同じである。【０１４３】
図５３に示すとおり、サイクルＴ０に命令バッファ１１の読み込まれた命令Ｃｏｍ＃３の並列数は４であり、サイクルＴ１で読み込んだ命令Ｃｏｍ＃４において並列数が４から１へと変化し、サイクルＴ１〜Ｔ４にて命令バッファ１１の読み込まれた命令Ｃｏｍ＃４〜６の並列数が１であったと仮定する。
図５３及び図５４に示すように、サイクルＴ１においてメインデコーダ１２の並列数信号生成部１１１は、命令バッファ１１から命令Ｃｏｍ＃４を受信すると、並列数信号の値Ｐ＃を４から１に変更する。またストール信号生成部１１３は、図１５を参照して説明するように、前回受信した命令の並列数Ｐ＃が１より大きくかつ前回受信した命令の並列数と今回受信した命令の並列数Ｐ＃とが異なるので、ストール信号を生成する。このため基本周期ΔＴｂの間、シングル命令デコード部１１５はＮＯＰ命令を発行する。
並列数が１以上の命令を実行されている間には、演算部１７内のパイプラインレジスタ２１１〜２１９、２２１〜２２８及び２３１〜２３７に、実行コードＣｏｄｅＥｘｅ、入力データＡ及びＢと、演算結果並びにキャリーが保持されている。したがって、並列数が変わった命令Ｃｏｍ＃４よりも以前の命令に含まれた演算を全て完了した後でなければ、命令Ｃｏｍ＃４の並列数に応じてクロック信号φ２０〜φ２３及びモード切換信号ＣＫＥＮ２０〜２２を変更することができない。このために、既に並列数が１以上の命令が実行されているときに並列数の変更があった場合には、メインデコーダ１２は基本周期ΔＴｂの間ＮＯＰ命令を発行する。【０１４４】
以下、図５５に示すクロック信号φ２０〜φ２３を生成するクロックインバータ１５１〜１５４の動作と、図５５に示すモード切替信号ＣＫＥＮ２０〜φ２２を生成するモード切替信号生成部１６１〜１６３の動作を説明する。
図３２に示すとおり、図２１に示すクロックインバータ１５１では、並列数が４である間、すなわちＰ＃（０）＝Ｐ＃（−１）＝４である間は、次ステートＳは、交互に状態「１２」及び「１３」になる。
並列数が４から１に変化することによりＰ＃（０）が１へ変化したとき、次ステートＳは参照符号Ｊ２−１によって示した線に沿って状態「１８」へ変化する。そしてその後Ｐ＃（−１）が１へ変化するまで、ステートＳは状態「１９」に維持される。
Ｐ＃（０）が１へ変化してから１基本周期ΔＴｂが経過すると、Ｐ＃（−１）が１へ変化する。このとき、次ステートＳは参照符号Ｊ２−２によって示した線に沿って状態「０」へ変化する。そしてそれ以降、状態「０」から「７」までを巡回するように次ステートＳが決定される。並列数が４から１に変化する場合のクロックインバータ１５１の内部状態のタイムチャートを図５６に示す。【０１４５】
図３４に示すとおり、図２１に示すクロックインバータ１５２では、並列数が４である間は、次ステートＳは、交互に状態「１２」及び「１３」になる。
Ｐ＃（０）が１へ変化したとき、次ステートＳは参照符号Ｊ２−１によって示した線に沿って状態「２０」へ変化する。その後Ｐ＃（−１）が１へ変化するまでステートＳは状態「２１」に維持される。
Ｐ＃（０）が１へ変化してからΔＴｂ／４が経過すると、Ｐ＃（−１）が１へ変化する。このとき、次ステートＳは参照符号Ｊ２−２によって示した線に沿って状態「２３」へ遷移する。次ステートＳは状態「２３」を４回繰り返してから、参照符号Ｊ２−３によって示した線に沿って状態「０」へ遷移する。そしてそれ以降、状態「０」から「７」までを巡回するように次ステートＳが決定される。並列数が４から１に変化する場合のクロックインバータ１５２の内部状態のタイムチャートを図５７に示す。【０１４６】
図３６に示すとおり、図２１に示すクロックインバータ１５３では、並列数が４である間は、次ステートＳは、交互に状態「１２」及び「１３」となる。
Ｐ＃（０）が１へ変化したとき、次ステートＳは参照符号Ｊ２−１によって示した線に沿って状態「２０」へ変化する。その後Ｐ＃（−１）が１へ変化するまでステートＳは状態「２１」に維持される。
Ｐ＃（０）が１へ変化してからΔＴｂ／４が経過すると、Ｐ＃（−１）が１へ変化する。このとき、次ステートＳは参照符号Ｊ２−２によって示した線に沿って状態「２３」へ遷移する。次ステートＳは状態「２３」を２回繰り返してから、参照符号Ｊ２−３によって示した線に沿って状態「０」へ遷移する。そしてそれ以降、状態「０」から「７」までを巡回するように次ステートＳが決定される。並列数が４から１に変化する場合のクロックインバータ１５３の内部状態のタイムチャートを図５８に示す。【０１４７】
図３８に示すとおり、図２１に示すクロックインバータ１５４では、並列数が４である間は、次ステートＳの値は交互に状態「１２」及び「１３」になる。
Ｐ＃（０）が１へ変化したとき、次ステートＳは参照符号Ｊ２−１によって示した線に沿って状態「２１」へ変化する。その後Ｐ＃（−１）が１へ変化するまでステートＳは状態「２１」に維持される。
Ｐ＃（０）が１へ変化してからΔＴｂ／４が経過すると、Ｐ＃（−１）が１へ変化する。このとき、次ステートＳは参照符号Ｊ２−２によって示した線に沿って「０」へ遷移する。そしてそれ以降、状態「０」から「７」までを巡回するように次ステートＳが決定される。並列数が４から１に変化する場合のクロックインバータ１５４の内部状態のタイムチャートを図５８に示す。【０１４８】
図４０に示すとおり、図２１に示すモード切替信号生成部１６１では、並列数が４である間、すなわちＰ＃（０）＝Ｐ＃（−１）＝４である間は、次ステートＳは状態「２」である。Ｐ＃（０）が１へ変化すると、次ステートＳの値はＰ＃（−１）が１へ変化するまで状態「３」に維持される。そしてＰ＃（−１）＝１となったとき次ステートＳは状態「０」になる。並列数が４から１に変化する場合のモード切替信号生成部１６１の内部状態のタイムチャートを図５９に示す。【０１４９】
図４２に示すとおり、図２１に示すモード切替信号生成部１６２では、並列数が４である間、次ステートＳは状態「２」である。Ｐ＃（０）が１へ変化すると、次ステートＳはＰ＃（−１）が１へ変化するまで状態「３」に維持される。そしてＰ＃（−１）＝１となったとき次ステートＳの値は「６」へ遷移する。その後、次ステートＳは状態「６」を４回繰り返してから「０」へ遷移する。並列数が４から１に変化する場合のモード切替信号生成部１６２の内部状態のタイムチャートを図６０に示す。【０１５０】
図４３に示すとおり、図２１に示すモード切替信号生成部１６３では、並列数が４である間、次ステートＳは状態「２」である。Ｐ＃（０）が１へ変化すると、次ステートＳはＰ＃（−１）が１へ変化するまで状態「３」に維持される。そしてＰ＃（−１）＝１となったとき次ステートＳの値は「６」へ遷移する。その後、次ステートＳは状態「６」を２回繰り返してから、「０」へ遷移する。並列数が４から１に変化する場合のモード切替信号生成部１６３の内部状態のタイムチャートを図６０に示す。【０１５１】
図５５に示すとおり、並列数が４から１に変化したとき、演算部１７は、ＮＯＰ命令を受信したサイクルＴ３’の間に、並列数Ｐ＃が４である命令Ｃｏｍ＃３に含まれた全ての演算を完了し、続くサイクルＴ４’以降において並列数Ｐ＃が１である命令Ｃｏｍ＃４〜６に含まれる演算を実行する。【０１５２】
以下、並列数２から４へ変化するときのプロセッサ１の動作を説明する。図６１は並列数が２から４に変化する際のフェッチ段におけるプロセッサ１の動作を示すタイムチャートであり、図６２は並列数が２から４に変化する際のデコード段におけるプロセッサ１の動作を示すタイムチャートであり、図６３は、並列数が２から４に変化する際の実行段におけるプロセッサ１の動作を示すタイムチャートである。なお、図６２及び図６３に示す各記号の用法は、図２３及び図２４に示す記号の用法と同じである。【０１５３】
図６１に示すとおり、サイクルＴ０に命令バッファ１１の読み込まれた命令Ｃｏｍ＃３の並列数は２であり、サイクルＴ１で読み込んだ命令Ｃｏｍ＃４において並列数が２から４へと変化し、サイクルＴ１〜Ｔ４にて命令バッファ１１の読み込まれた命令Ｃｏｍ＃４〜６の並列数が４であったと仮定する。
図６１及び図６２に示すように、サイクルＴ１においてメインデコーダ１２の並列数信号生成部１１１は、命令バッファ１１から命令Ｃｏｍ＃４を受信すると、並列数信号の値Ｐ＃を２から４に変更する。またストール信号生成部１１３は、前回受信した命令の並列数Ｐ＃が１より大きく、かつ前回受信した命令の並列数と今回受信した命令の並列数Ｐ＃とが異なるので、ストール信号を生成する。この結果、基本周期ΔＴｂの間、命令キュー１１７はＮＯＰ命令を発行する。【０１５４】
以下、図６３に示すクロック信号φ２０〜φ２３を生成するクロックインバータ１５１〜１５４の動作と、図６３に示すモード切替信号ＣＫＥＮ２０〜φ２２を生成するモード切替信号生成部１６１〜１６３の動作を説明する。
図３２に示すとおり、図２１に示すクロックインバータ１５１では、並列数が２である間、すなわちＰ＃（０）＝Ｐ＃（−１）＝２である間は、状態「８」から「１１」までを巡回するように次ステートＳが決定される。
並列数が２から４に変化することによりＰ＃（０）が４へ変化したとき、次ステートＳは参照符号Ｊ３−１によって示した線に沿って状態「２５」へ変化する。そしてＰ＃（０）＝４かつＰ＃（−１）＝２である間、その後ステートＳは状態「２５」に維持される。【０１５５】
Ｐ＃（０）が４に変化してから１基本周期ΔＴｂが経過すると、Ｐ＃（−１）が４へ変化する。このとき、次ステートＳは参照符号Ｊ３−２によって示した線に沿って状態「３２」へ遷移する。次ステートＳは状態「３２」を２回繰り返してから、参照符号Ｊ３−３によって示した線に沿って状態「１２」へ遷移する。その後、次ステートＳは交互に状態「１２」及び「１３」となる。並列数が２から４に変化する場合のクロックインバータ１５１の内部状態のタイムチャートを図６４に示す。【０１５６】
図３４に示すとおり、図２１に示すクロックインバータ１５２では、並列数が２である間は、状態「８」から「１１」までを巡回するように次ステートＳが決定される。
Ｐ＃（０）が４へ変化したとき、次ステートＳは参照符号Ｊ３−１によって示した線に沿って状態「２５」へ変化する。そしてＰ＃（０）＝４かつＰ＃（−１）＝２である間、その後ステートＳは状態「２５」に維持される。【０１５７】
Ｐ＃（０）が４に変化してからΔＴｂ／４が経過すると、Ｐ＃（−１）が４へ変化する。このとき、次ステートＳは参照符号Ｊ３−２によって示した線に沿って状態「３２」へ遷移する。次ステートＳは状態「３２」を８回繰り返してから、参照符号Ｊ３−３によって示した線に沿って状態「１２」へ遷移する。その後、次ステートＳは交互に状態「１２」及び「１３」となる。並列数が２から４に変化する場合のクロックインバータ１５２の内部状態のタイムチャートを図６５に示す。【０１５８】
図３６及び図３８に示すとおり、図２１に示すクロックインバータ１５３及び１５４では、並列数が２である間は、状態「８」から「１１」までを巡回するように次ステートＳが決定される。
Ｐ＃（０）が４へ変化したとき、次ステートＳは参照符号Ｊ３−１によって示した線に沿って状態「２５」へ変化する。Ｐ＃（０）＝４かつＰ＃（−１）＝２である間ステートＳは状態「２５」に維持される。【０１５９】
Ｐ＃（０）が４に変化してからΔＴｂ／４が経過すると、Ｐ＃（−１）が４へ変化する。このとき、次ステートＳは参照符号Ｊ３−２によって示した線に沿って状態「３２」へ遷移する。次ステートＳは状態「３２」を８回繰り返してから、参照符号Ｊ３−３によって示した線に沿って状態「１２」へ遷移する。その後、次ステートＳは交互に状態「１２」及び「１３」となる。並列数が２から４に変化する場合のクロックインバータ１５３及び１５４の内部状態のタイムチャートを図６６に示す。【０１６０】
図４０に示すとおり、図２１に示すモード切替信号生成部１６１では、並列数が２である間、すなわちＰ＃（０）＝Ｐ＃（−１）＝２である間は、次ステートＳは状態「９」である。Ｐ＃（０）が４へ変化したとき次ステートＳは状態「７」へ変化し、Ｐ＃（−１）＝４となったとき次ステートＳは、一度状態「８」になった後に状態「２」となる。並列数が２から４に変化する場合のモード切替信号生成部１６１の内部状態のタイムチャートを図６７に示す。【０１６１】
図４２に示すとおり、図２１に示すモード切替信号生成部１６２では、並列数が２である間は次ステートＳは状態「１」である。Ｐ＃（０）が４へ変化したとき、次ステートＳは状態「１０」へ変化し、Ｐ＃（−１）＝４となったとき次ステートＳは状態「２」に変化する。並列数が２から４に変化する場合のモード切替信号生成部１６２の内部状態のタイムチャートを図６８に示す。【０１６２】
図４３に示すとおり、図２１に示すモード切替信号生成部１６３では、並列数が２である間は、次ステートＳは状態「９」である。Ｐ＃（０）が４へ変化したとき次ステートＳは状態「７」に変化し、そしてＰ＃（−１）＝４となったとき次ステートＳは、状態「８」を７回繰り返してから、状態「２」へ遷移する。並列数が２から４に変化する場合のモード切替信号生成部１６３の内部状態のタイムチャートを図６８に示す。【０１６３】
図６３に示すとおり、並列数が２から４に変化したとき、演算部１７は、ＮＯＰ命令を受信したサイクルＴ３’の間に、並列数Ｐ＃が２である命令Ｃｏｍ＃３に含まれた全ての演算を完了する。
そしてサイクルＴ４’以降において、演算部１７は、並列数Ｐ＃が４である命令Ｃｏｍ＃４及びＣｏｍ＃５をデコードすることによって生じた複数の実行コード＃４ａ〜＃４ｄ及び＃５ａ〜＃５ｄにより指定される演算を並列に実行する、パイプライン処理を開始する。【０１６４】
図６９は、本発明によるスーパースカラプロセッサの実施例を示す概略構成図である。プロセッサ１は、命令バッファ１１とメインデコーダ３１２との間に、命令バッファ１１にフェッチされた命令のうち複数の命令を同時にメインデコーダ３１２にディスパッチャ２０を備える。
また、図示するとおり本実施例によるプロセッサ１は、図１０を参照して説明した第１実施例によるプロセッサと同様の構成を有しており、同じ構成要素には同じ参照番号を付与して説明を省略する。【０１６５】
ディスパッチャ２０は、メインデコーダ３１２に同時に発行する命令数を動的に変更することができ、同時に発行する命令数をクロック制御部１９へ並列数Ｐ＃として通知する。
ここで、図１５に示すメインデコーダ１２が１つのＶＬＩＷ命令から形成したＮ個の中間コード（Ｎ＝１、２又は４）を出力するときに、Ｎ個の中間コードをΔＴｂ／Ｎ間隔で出力したのと同様に、ディスパッチャ２０から同時に受信したＮ個の命令をデコードして得たＮ個の中間コードをΔＴｂ／Ｎ間隔で出力できるようにメインデコーダ３１２を構成する。かつクロック制御部１９を、図２１に示すクロック制御部と同様に、Ｃｋｄ、Ｃｋｅ、φ２０〜２３等の各クロック信号及びモード切替信号ＣＫＥＮ２０〜ＣＫＥＮ２２を生成するように構成する。【０１６６】
このようにディスパッチャ２０、メインデコーダ３１２及びクロック制御部１９を構成することによって、ＶＬＩＷ命令に含まれる複数の演算が図１０に示すプロセッサ１において並列に実行されたのと同様に、ディスパッチャ２０により同時に発行された複数の命令のそれぞれ含まれる演算は、演算部１７のパイプライン処理によって並列に実行される。【０１６７】
以上、本発明の好適な実施態様について詳述したが、当業者が種々の修正及び変更をなし得ること、並びに、特許請求の範囲は本発明の真の精神および趣旨の範囲内にあるこの様な全ての修正及び変更を包含することは、本発明の範囲に含まれることは当業者に理解されるべきものである。
【産業上の利用可能性】
【０１６８】
本発明は、一般に複数の命令を並列して実行可能なプロセッサに利用可能である。特にＶＬＩＷプロセッサやスーパースカラプロセッサに利用可能である。
【図１】
2008142750.tif 000003
【図２】
2008142750.tif 000004
【図３】
2008142750.tif 000005
【図４】
2008142750.tif 000006
【図５】
2008142750.tif 000007
【図６】
2008142750.tif 000008
【図７】
2008142750.tif 000009
【図８】
2008142750.tif 000010
【図９】
2008142750.tif 000011
【図１０】
2008142750.tif 000012
【図１１】
2008142750.tif 000013
【図１２】
2008142750.tif 000014
【図１３】
2008142750.tif 000015
【図１４】
2008142750.tif 000016
【図１５】
2008142750.tif 000017
【図１６】
2008142750.tif 000018
【図１７Ａ】
2008142750.tif 000019
【図１７Ｂ】
2008142750.tif 000020
【図１８Ａ】
2008142750.tif 000021
【図１８Ｂ】
2008142750.tif 000022
【図１９】
2008142750.tif 000023
【図２０】
2008142750.tif 000024
【図２１】
2008142750.tif 000025
【図２２】
2008142750.tif 000026
【図２３】
2008142750.tif 000027
【図２４】
2008142750.tif 000028
【図２５】
2008142750.tif 000029
【図２６】
2008142750.tif 000030
【図２７】
2008142750.tif 000031
【図２８】
2008142750.tif 000032
【図２９】
2008142750.tif 000033
【図３０】
2008142750.tif 000034
【図３１】
2008142750.tif 000035
【図３２】
2008142750.tif 000036
【図３３】
2008142750.tif 000037
【図３４】
2008142750.tif 000038
【図３５】
2008142750.tif 000039
【図３６】
2008142750.tif 000040
【図３７】
2008142750.tif 000041
【図３８】
2008142750.tif 000042
【図３９】
2008142750.tif 000043
【図４０】
2008142750.tif 000044
【図４１】
2008142750.tif 000045
【図４２】
2008142750.tif 000046
【図４３】
2008142750.tif 000047
【図４４】
2008142750.tif 000048
【図４５】
2008142750.tif 000049
【図４６】
2008142750.tif 000050
【図４７】
2008142750.tif 000051
【図４８】
2008142750.tif 000052
【図４９】
2008142750.tif 000053
【図５０】
2008142750.tif 000054
【図５１】
2008142750.tif 000055
【図５２】
2008142750.tif 000056
【図５３】
2008142750.tif 000057
【図５４】
2008142750.tif 000058
【図５５】
2008142750.tif 000059
【図５６】
2008142750.tif 000060
【図５７】
2008142750.tif 000061
【図５８】
2008142750.tif 000062
【図５９】
2008142750.tif 000063
【図６０】
2008142750.tif 000064
【図６１】
2008142750.tif 000065
【図６２】
2008142750.tif 000066
【図６３】
2008142750.tif 000067
【図６４】
2008142750.tif 000068
【図６５】
2008142750.tif 000069
【図６６】
2008142750.tif 000070
【図６７】
2008142750.tif 000071
【図６８】
2008142750.tif 000072
【図６９】
2008142750.tif 000073
【手続補正書】
【提出日】平成21年8月19日(2009.8.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサの実行ステージにおいて所定桁長の演算を行う演算ユニットであって、
前記所定桁長の演算を桁方向に分割した各演算をそれぞれ異なるパイプラインステージにおいて実行する複数の部分演算ユニットと、
各前記パイプラインステージ間を各々区切る複数のパイプラインレジスタと、
を備えることを特徴とする演算ユニット。
【請求項２】
前記パイプラインレジスタは、入力トリガに同期して出力値を更新するフリップフロップモードと、入力値をそのまま出力するトランスペアレントモードと、２つの動作モード間で切り替え可能に動作することを特徴とする請求項１に記載の演算ユニット。
【請求項３】
請求項１に記載の演算ユニットを備え、該演算ユニットにより実行ステージにおける前記所定桁長の演算を行うプロセッサであって、
前記部分演算ユニットの演算桁長は、前記所定桁長の演算をＮ（Ｎは２以上の整数）等分した桁長であり、
前記所定桁長の演算１つに使用する期間の１／Ｎ倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック生成部を備える、
ことを特徴とするプロセッサ。
【請求項４】
請求項２に記載の演算ユニットを備え、該演算ユニットにより実行ステージにおける前記所定桁長の演算を行うプロセッサであって、
前記部分演算ユニットの演算桁長は、前記所定桁長の演算をＮ（Ｎは２以上の整数）等分した桁長であり、
前記所定桁長の演算１つに使用する期間の１／Ｎ倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック制御部と、
前記約数に応じて、各前記パイプラインレジスタの動作モードを前記フリップフロップモード及び前記トランスペアレントモードのいずれかにそれぞれ切り替えるパイプラインレジスタ制御部と、
を備えることを特徴とするプロセッサ。
【請求項５】
前記クロック制御部は、前記フェッチステージでフェッチされた命令に含まれる演算実行数に応じて前記約数を選択することを特徴とする請求項４に記載のプロセッサ。
【請求項６】
複数の演算命令を同時に発行するディスパッチ部を備え、
前記クロック制御部は、前記ディスパッチ部により同時に発行される演算数に応じて前記約数を選択することを特徴とする請求項４に記載のプロセッサ。
【請求項７】
演算ユニットと、該演算ユニットへのオペランド及び該演算ユニットの演算結果を保持するレジスタファイルとを備え、該演算ユニットにより実行ステージにおける所定桁長の演算を行うプロセッサのプロセッサアーキテクチャであって、
前記演算ユニットを、前記所定桁長の演算を桁方向にＮ個（Ｎは２以上の整数）に分割した各演算をそれぞれ異なるパイプラインステージにおいて実行する部分演算ユニットと、各前記パイプラインステージ間を区切るパイプラインレジスタと、により構成し、
前記レジスタファイルは、前記所定桁長の演算１つに使用する期間内にＮ回読み書き可能なアクセスレーテンシを有する記憶素子で構成する、
ことを特徴とするプロセッサアーキテクチャ。
【請求項８】
前記パイプラインレジスタを、入力トリガに同期して出力値を更新するフリップフロップモードと、入力値をそのまま出力するトランスペアレントモードと、２つの動作モード間で切り替え可能に動作する記憶素子で構成することを特徴とする請求項７に記載のプロセッサアーキテクチャ。
【請求項９】
前記部分演算ユニットの演算桁長を、前記所定桁長の演算をＮ等分した桁長とし、
前記所定桁長の演算１つに使用する期間の１／Ｎ倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック制御部を、前記プロセッサに設ける、
ことを特徴とする請求項７に記載のプロセッサアーキテクチャ。
【請求項１０】
前記部分演算ユニットの演算桁長を、前記所定桁長の演算をＮ等分した桁長とし、
前記プロセッサに、
前記所定桁長の演算１つに使用する期間の１／Ｎ倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させるクロック制御部と、
前記約数に応じて、各前記パイプラインレジスタの動作モードを前記フリップフロップモード及び前記トランスペアレントモードのいずれかにそれぞれ切り替えるパイプラインレジスタ制御部と、
を設けることを特徴とする請求項７に記載のプロセッサアーキテクチャ。
【手続補正書】
【提出日】平成21年11月18日(2009.11.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサの実行ステージにおいて所定桁長の演算を行う演算ユニットであって、
前記所定桁長の演算を桁方向に約数Ｎ（Ｎは２以上の整数）で等分した各演算を、それぞれ異なるパイプラインステージにおいて実行する複数の部分演算ユニットと、
各前記パイプラインステージ間を各々区切る複数のパイプラインレジスタであって、入力トリガに同期して出力値を更新するフリップフロップモードと、入力値をそのまま出力するトランスペアレントモードと、２つの動作モード間で切り替え可能に動作するパイプラインレジスタと、
前記部分演算ユニット及び前記パイプラインレジスタ毎にクロックを供給できるクロックインバータ、並びに前記パイプラインレジスタ毎にモード切替信号を供給するモード切替信号生成部を備えるクロック制御部と、を備え、
前記約数Ｎを動的に変更することにより、前記プロセッサの並列演算実行の数を動的に変更できることを特徴とするプロセッサ。
【請求項２】
前記クロック制御部は、前記プロセッサのフェッチステージでフェッチされた命令に含まれる演算実行数に応じて前記約数Ｎを選択することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
複数の演算命令を同時に発行するディスパッチ部を備え、
前記クロック制御部は、前記ディスパッチ部により同時に発行される演算数に応じて前記約数Ｎを選択することを特徴とする請求項１に記載のプロセッサ。
【請求項４】
請求項１に記載のプロセッサのプロセッサアーキテクチャであって、
前記プロセッサに、前記約数Ｎに応じて各前記パイプラインレジスタの動作モードを前記フリップフロップモード及び前記トランスペアレントモードのいずれかにそれぞれ切り替えるパイプラインレジスタ制御部が設けられ、
前記部分演算ユニットの演算桁長は、前記所定桁長の演算を前記約数Ｎで等分した桁長であり、
前記クロック制御部は、前記所定桁長の演算１つに使用する期間の１／Ｎ倍の長さの周期を有する動作周波数で前記パイプラインステージを動作させることを特徴とするプロセッサアーキテクチャ。
【請求項５】
前記クロック制御部は、前記プロセッサのフェッチステージでフェッチされた命令に含まれる演算実行数に応じて前記約数Ｎを選択することを特徴とする請求項４に記載のプロセッサアーキテクチャ。
【請求項６】
前記プロセッサに、複数の演算命令を同時に発行するディスパッチ部が設けられ、
前記クロック制御部は、前記ディスパッチ部により同時に発行される演算数に応じて前記約数Ｎを選択することを特徴とする請求項４に記載のプロセッサアーキテクチャ。
【国際調査報告】
2008142750.tif 000074
2008142750.tif 000075
2008142750.tif 000076
2008142750.tif 000077