(57)【要約】  一つのプロセッサによりなるマルチプロセッサにおいて、マルチプロセッサごとに独立して処理されるべき命令列を、一サイクル内で位相をずらして順次フェッチするパイプライン処理部を備える。
2009118776.tif 000002
【特許請求の範囲】
【請求項１】
一つのプロセッサによりなるマルチプロセッサにおいて、
マルチプロセッサごとに独立して処理されるべき命令列を、一サイクル内で位相をずらして順次フェッチするパイプライン処理部
を備えることを特徴とするマルチプロセッサ。
【請求項２】
さらに、モード信号が入力され、前記モード信号に基づいて前記パイプライン処理部を一または複数段のパイプラインとして動作させるよう前記パイプライン処理部を制御するパイプライン制御部を備えることを特徴とする請求項１記載のマルチプロセッサ。
【請求項３】
さらに、前記命令列を処理する複数のステージと、
前記各ステージから出力される前記モード信号をラッチする複数のラッチ回路と、
クロック制御部とを備え、
前記クロック制御部は、前記モード信号が入力され、前記モード信号に基づいて、前記各ステージから出力される前記モード信号を前記パイプライン処理部の動作に応じて前記各ラッチ回路でラッチし前記各ステージに順次出力するよう、前記各ラッチ回路を制御することを特徴とする請求項２記載のマルチプロセッサ。
【請求項４】
前記各ステージは前記パイプライン処理部と前記パイプライン制御部とを備え、
前記各ステージの前記パイプライン制御部は前記各ラッチ回路からの前記モード信号に基づいて前記パイプライン処理部を制御することで、前記各ステージは前記パイプラインとして順次動作することを特徴とする請求項３記載マルチプロセッサ。
【請求項５】
前記パイプライン処理部は複数段のラッチ回路群を備え、
前記パイプライン制御部は前記モード信号に基づいて前記複数段のうち所定段の前記ラッチ回路群を動作させることで、前記パイプライン処理部を一または複数段のパイプラインとして動作させることを特徴とする請求項２記載のマルチプロセッサ。
【請求項６】
前記複数のステージの各ステージは、
演算した命令アドレスに基づいて命令メモリから前記命令列を読み出し、読み出した前記命令列の命令コードを出力するフェッチステージと、
前記命令コードが入力され、データメモリに記憶された第１のデータを読み出すためのメモリアドレスを出力するとともに、レジスタに記憶された第２のデータを読み出すためのレジスタ番号を出力するデコードステージと、
前記メモリアドレスと前記レジスタ番号とが入力され、前記メモリアドレスに記憶された第１のデータを前記データメモリから読み出して出力するとともに、前記レジスタ番号に記憶された第２のデータを前記レジスタから読み出して出力するデータリードステージと、
前記第１のデータと前記第２のデータとが入力され、前記命令コードに基づいて前記第１と前記第２のデータを演算して演算結果を出力する演算ステージと、
前記演算結果が入力され、前記演算結果を前記データメモリまたは前記レジスタに書き込むデータライトステージであることを特徴とする請求項３記載のマルチプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサに関する。
【背景技術】
【０００２】
従来から、複数のプロセッサを１チップに集積したマルチプロセッサがある。図２５は従来のマルチプロセッサの構成例を示す図である（例えば、以下の非特許文献１）。このマルチプロセッサは、１チップ上に４つのプロセッサｕｐ＃１〜ｕｐ＃４を備える。【０００３】
１チップに複数のプロセッサｕｐ＃１〜ｕｐ＃４を集積するためにマルチプロセッサは、プロセッサｕｐ＃１〜ｕｐ＃４の個数分の論理回路をチップ上に搭載する必要がある。このため、メモリを共有化する等により、各プロセッサｕｐ＃１〜ｕｐ＃４間での情報の共有化や回路規模増大を防止している。例えば、共有メモリで構成されるマルチプロセッサは、ＵＭＡ（Uniform
Memory Architecture）やＮＵＭＡ（Non-Uniform Memory Architecture）などのモデルが知られている。【０００４】
尚、従来のマルチプロセッサとして、１／４周期づつ順次位相をずらしたクロックにより複数のプロセッサを動作させることでメモリを時分割に使用するようにしたメモリ制御方式が開示される（例えば、以下の特許文献１）。  
【非特許文献１】「対称型マルチプロセッシング技術」、宇野俊夫、エーアイ出版、２００１年８月１３日
【特許文献１】特開昭５６−０９９５５９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、メモリが共有化されても、マルチプロセッサはメモリへのアクセス制約などにより必ずしも理想性能を得ることはできない（図２６参照）。一方で、プロセッサ数を増加させることは回路規模の増大を招く。とくに、携帯電話などの情報機器では省スペース化が要求される。【０００６】
また、マルチプロセッサは、設計段階において求められる最大性能を満たすように搭載プロセッサ数を決定している。図２７は時間とマルチプロセッサ全体の処理能力との関係を示す図である。点線はあるシステムの負荷曲線である。同図に示すように、ある時間帯において４つのプロセッサを必要とする負荷が発生する場合、必要なプロセッサ数は４個となる。しかし、従来のマルチプロセッサは、負荷が小さい時間帯であっても、全プロセッサに電力を供給しているため、全体の電力を増大させている問題がある。とくに、携帯電話などの情報機器は省電力化が要求される。【０００７】
そこで、本発明は上記問題点に鑑みてなされたもので、その目的は省スペース化を実現したマルチプロセッサを提供することにある。【０００８】
また、本発明の他の目的は省電力化を実現したマルチプロセッサを提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明の一実施態様によれば、一つのプロセッサによりなるマルチプロセッサにおいて、マルチプロセッサごとに独立して処理されるべき命令列を、一サイクル内で位相をずらして順次フェッチするパイプライン処理部を備える。
【発明の効果】
【００１０】
本発明によれば、省スペース化を実現したマルチプロセッサを提供できる。また、本発明によれば、省電力化を実現したマルチプロセッサを提供できる。
【図面の簡単な説明】
【００１１】
【図１】図１はマルチプロセッサシステムの構成例を示す図である。
【図２】図２はクロック制御部の構成例を示す図である。
【図３】図３はフェッチステージの構成例を示す図である。
【図４】図４はデコードステージの構成例を示す図である。
【図５】図５はデータリードステージの構成例を示す図である。
【図６】図６は演算ステージの構成例を示す図である。
【図７】図７はデータライトステージの構成例を示す図である。
【図８】図８はマルチプロセッサのタイミングチャートを示す図である。
【図９】図９はマルチプロセッサのタイミングチャートの例を示す図である。
【図１０】図１０はマルチプロセッサのタイミングチャートの例を示す図である。
【図１１】図１１はマルチプロセッサのタイミングチャートを示す図である。
【図１２】図１２はマルチプロセッサのタイミングチャートの例を示す図である。
【図１３】図１３はマルチプロセッサのタイミングチャートの例を示す図である。
【図１４】図１４はマルチプロセッサのタイミングチャートを示す図である。
【図１５】図１５はマルチプロセッサのタイミングチャートの例を示す図である。
【図１６】図１６はマルチプロセッサのタイミングチャートの例を示す図である。
【図１７】図１７はクロックインバータの構成例を示す図である。
【図１８】図１８はクロックインバータの状態遷移と処理の例を示す図である。
【図１９】図１９はクロックインバータのタイミングチャートの例を示す図である。
【図２０】図２０はパイプライン制御部の構成例を示す図である。
【図２１】図２１はパイプライン制御部の状態遷移の例を示す図である。
【図２２】図２２は制御信号出力部からの出力されるクロック及びイネーブルの定義例を示す図である。
【図２３】図２３はパイプライン制御部のタイミングチャートの例を示す図である。
【図２４】図２４はラッチ回路の構成例を示す図である。
【図２５】図２５は従来のマルチプロセッサの構成例を示す図である。
【図２６】図２６はプロセッサ数と全体性能との関係例を示す図である。
【図２７】図２７は負荷曲線の例を示す図である。
【符号の説明】
【００１２】
１：マルチプロセッサシステム          １０：マルチプロセッサ
１００：フェッチステージ              １１０：第１のパイプライン制御部
１１１：次状態決定部                  １１２：状態記憶部
１１３：制御信号出力部
１２０（１２０‐１〜１２０‐１１）〜１２２（１２２‐１〜１２２‐９）：第１段目〜第３段目のラッチ回路群                    
１２６：Ｄ型フリップフロップ          １２７：マルチプレクサ    
１３０〜１３３：加算器（Ａｄｄ）      １４０：レジスタ
１５０：第１のラッチ回路              ２００：デコードステージ
２１０：第２のパイプライン制御部      
２２０（２２０‐１〜２２０‐１９）〜２２２（２２２‐１〜２２２‐１５）：第１段目〜第３段目のラッチ回路群                  
２３０〜２３３：加算器（Ａｄｄ）      ２４０〜２４３：加算器（Ａｄｄ）
２５０：第２のラッチ回路              ３００：データリードステージ
３１０：第３のパイプライン制御部  
３２０（３２０‐１〜３２０‐３）〜３２２（３２２‐１〜３２２‐３）：第１段目〜第３段目のラッチ回路群
３３０〜３３１：マルチプレクサ        ３５０：第３のラッチ回路
４００：演算ステージ                  ４１０：第４のパイプライン制御部
４２０（４２０‐１〜４２１‐１０）〜４２２（４２２‐１〜４２２‐８）：第１段目〜第３段目のラッチ回路群                    
４３０〜４３３：算術論理部（ＡＬＵ）  ５００：データライトステージ
５１０：第５のパイプライン制御部      
５２０（５２０‐１〜５２０‐３）〜５２２（５２２‐１〜５２２‐３）：第１段目〜第３段目のラッチ回路群                      
６００：レジスタ                      ７００：命令ＲＡＭ
８００：データメモリ                  ９００：クロック制御部
９２０〜９６０：第１〜第５のクロックインバータ
９２１：次状態決定部                  ９２２：状態記憶部
９２３：制御信号出力部                ＳＴ：状態
Ｍｄ：モード                          ＣＫａ〜ＣＫｃ：クロック
ＥＮａ〜ＥＮｃ：イネーブル
【発明を実施するための最良の形態】
【００１３】
本発明を実施するための最良の形態について以下説明する。  【００１４】
図１はマルチプロセッサシステム１の構成例を示す図である。マルチプロセッサシステム１は、マルチプロセッサ１０と、命令ＲＡＭ７００と、データメモリ８００、及びクロック制御部９００とを備える。図１において実線で示す構成部分はマルチプロセッサ１０内の構成を示し、点線で示す部分はマルチプロセッサ１０の外側の構成を示す。【００１５】
マルチプロセッサ１０は、フェッチステージ１００と、デコードステージ２００と、データリードステージ３００と、演算ステージ４００と、データライトステージ５００と、第１〜第５のラッチ回路１５０，…，５５０、及びレジスタ６００を備える。本マルチプロセッサ１０は１プロセッサで構成される。【００１６】
フェッチステージ１００は、主に、計算した命令アドレスに基づいて命令ＲＡＭ７００から命令を読み出すとともに、次の命令アドレスを演算する。また、フェッチステージ１００は、命令に「ｊｕｍｐ」命令が含まれる場合、ｊｕｍｐ先のアドレスを計算するためのプログラムカウンタを含む。【００１７】
デコードステージ２００は、主に、データをデータメモリ８００から読み出すためのアドレス（ＭｅｍＡｄ）や、レジスタ６００からデータを読み出すためのデータレジスタ番号（Ｒｓ０＃，Ｒｓ１＃）を計算等し出力する。【００１８】
データリードステージ３００は、主に、デコードステージ２００からのアドレスやデータレジスタ番号に基づいて、データメモリ８００やレジスタ６００からデータ（Ｄａｔａ，Ｒｓ１）を読み出す。【００１９】
演算ステージ４００は、主に、データリードステージ３００からのデータ（Ｒｂ）やレジスタ６００からのデータ（Ｒａ）に基づいて、命令を演算する。【００２０】
データライトステージ５００は、主に、演算ステージ４００で演算した結果（Ｓ）をデータメモリ８００やレジスタ６００に書き込む。【００２１】
フェッチステージ１００からデータライトステージ５００は、カスケード接続され、命令を順次パイプライン処理（複数の命令に対してタイミングをずらして同時並行的に行う処理）により実行する。各ステージ１００，・・・，５００の詳細は後述する。【００２２】
第１〜第５のラッチ回路１５０，・・・，５５０の各々は、各ステージ１００，・・・，５００の前段に設けられ、命令ＲＡＭ７００や各ステージ１００，・・・，４００から出力される命令やアドレス等をラッチする。第１〜第５のラッチ回路１５０，・・・，５５０は、各ステージ１００，・・・，５００に対して同期して命令等を出力するためにある。【００２３】
レジスタ６００は、命令に含まれる変数に対応するデータを記憶するメモリである。また、命令ＲＡＭ７００は命令を記憶するメモリである。データメモリ８００は処理対象のデータを記憶するメモリである。【００２４】
クロック制御部９００は、各ステージ１００，・・・，５００や第１〜第５のラッチ回路１５０，・・・，５５０に対して、クロックＣＫ０〜ＣＫ９を供給する。クロックＣＫ０〜ＣＫ４は第１〜第５のラッチ回路１５０，・・・，５５０に夫々供給され、クロックＣＫ５〜ＣＫ９は各ステージ１００，・・・，５００に夫々供給される。第１〜第５のラッチ回路１５０，・・・，５５０はクロックＣＫ０〜ＣＫ４に夫々同期して動作し、各ステージ１００，・・・，５００はクロックＣＫ５〜ＣＫ９に夫々同期して動作する。【００２５】
尚、クロック制御部９００には各ステージ１００，・・・，５００からクロックＬＫ５〜ＬＫ９が入力される。このクロックＬＫ５〜ＬＫ９は各ステージ１００，・・・，５００内で使用されるクロックを示し、クロック制御部９００は各ステージ１００，・・・，５００がどのようなクロックで動作しているかを確認するために用いる。【００２６】
次に、本マルチプロセッサシステム１の各構成の詳細を説明する。まず、クロック制御部９００の構成（図２）について説明し、次に各ステージ１００，・・・，５００の構成（図３〜図７）について説明する。【００２７】
図２はクロック制御部９００の構成例を示す図である。クロック制御部９００は、ＰＬＬ回路９０１と、第１〜第５のクロックインバータ９２０〜９６０を備える。【００２８】
ＰＬＬ回路９０１は、参照クロック（Ｒｅｆ＿ＣＬＫ）に対して１／８周期（８倍速）のクロック（×８＿ＣＬＫ）を生成し、第１〜第５のクロックインバータ９２０〜９６０に出力するとともに、アンプを介して各ステージ１００，・・・，５００に出力する（ＣＫ５〜ＣＫ９）。各ステージ１００，・・・，５００にはクロックＣＫ５〜ＣＫ９として８倍速のクロック（×８＿ＣＬＫ）が供給される。【００２９】
第１〜第５のクロックインバータ９２０〜９６０は、夫々、８倍速のクロック（×８＿ＣＬＫ）とモードＭｄとが入力され、内部状態に応じてクロックＣＫ０〜ＣＫ４を生成して出力する。クロックインバータ９２０〜９６０の詳細は後述する。【００３０】
尚、各クロックインバータ９２０〜９６０は、フリップフロップ等により構成されて、内部状態が順次遷移するステートマシンとして動作する。きれいな矩形波のクロックを出力させるためである。【００３１】
ここでモードＭｄについて説明する。本実施例において、マルチプロセッサ１０の各ステージ１００，・・・，５００は、４プロセッサモード、又は２プロセッサモード、若しくは１プロセッサモードとして動作する。各ステージ１００，・・・，５００は４段のパイプラインを有し、モードＭｄに応じてある段を動作させることで、マルチプロセッサ１０は４プロセッサモードや２プロセッサーモード、或いは１プロセッサモードとして動作する。モードＭｄは、マルチプロセッサ１０を４プロセッサモードで動作させるか、２プロセッサモードで動作させるか、あるいは１プロセッサモードで動作させるかを示す。【００３２】
尚、このモードＭｄは、第１のラッチ回路１５０とクロック制御部９００の第１のクロックインバータ９２０に入力される。第１のラッチ回路１５０に入力されたモードＭｄは、フェッチステージ１００に出力され、順次、第２のラッチ回路２５０、デコードステージ２００等に出力される。また、第１のクロックインバータ９２０に入力されたモードＭｄも、順次各クロックインバータ９３０〜９６０に出力される。【００３３】
次に、フェッチステージ１００からデータライトステージ５００までの各構成について説明する。図３はフェッチステージ１００、図４はデコードステージ２００、図５はデータリードステージ３００、図６は演算ステージ４００、図７はデータライトステージ５００の各構成例を示す図である。【００３４】
フェッチステージ１００は、図３に示すように、第１のパイプライン制御部（μパイプライン制御手段＿Ｆ）１１０と、第１段目のラッチ回路群１２０‐１〜１２０‐１１（以下、１２０‐１〜１２０‐１１をとくに断らない限り１２０と記す）、第２段目のラッチ回路群１２１‐１〜１２１‐１０（同様に以下、１２１）と、第３段目のラッチ回路群１２２‐１〜１２２‐９（同様に以下、１２２）と、４つの加算器Ａｄｄ１３０〜１３３、及びレジスタ１４０とを備える。【００３５】
フェッチステージ１００は、３段のラッチ回路群１２０〜１２２により４段のパイプライン処理を実現している。そして、各段のラッチ回路群１２０〜１２２は、第１のパイプライン制御部１１０からのクロックＣＫａ〜Ｃｋｃ及びイネーブルＥＮａ〜ＥＮｃに基づいて動作する。【００３６】
例えば、クロックＣＫａ〜ＣＫｃとイネーブルＥＮａ〜ＥＮｃとが全て「Ｈｉｇｈ」のとき、第１〜第３段目のラッチ回路群１２０〜１２２の全てが動作する。このとき、フェッチステージ１００は４プロセッサモードとして動作し、各段のラッチ回路群１２０〜１２２は上流からの命令やアドレス等をラッチして出力する。【００３７】
また、クロックＣＫｂとイネーブルＥＮｂが「Ｈｉｇｈ」でそれ以外が「Ｌｏｗ」のとき、第２段目のラッチ回路群１２１のみが動作し、フェッチステージ１００は２プロセッサモードとして動作する。この場合、第２段目のラッチ回路群１２１は上流からの命令等をラッチし、他の段のラッチ回路群１２０，１２２は上流からの命令等をそのまま下流に出力する。【００３８】
さらに、クロックＣＫａ〜ＣＫｃとイネーブルＥＮａ〜ＥＮｃが全て「Ｌｏｗ」のとき、フェッチステージ１００は１プロセッサモードとして動作し、第１〜第３段目のラッチ回路群１２０〜１２２は上流からの命令等をラッチせずそのまま出力する。【００３９】
第１のパイプライン制御部１１０は、第１のラッチ回路１５０からのモードＭｄと、クロック制御部９００からのクロックＣＫ５とが入力され、内部状態に応じて、どのクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを「Ｈｉｇｈ」や「Ｌｏｗ」にするかを決定し、決定したクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを出力する。第１のパイプライン制御部１１０は、内部にフリップフロップ等を備えたステートマシンとして動作する。クロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃがきれいな矩形波として出力するようにするためである。詳細は後述する。【００４０】
フェッチステージ１００は、「ｊｕｍｐ」命令に対してＪｕｍｐアドレスを演算するプログラムカウンタとして機能する部分（図３の右側）も含まれる。【００４１】
プログラムカウンタとして機能する部分では、各加算器Ａｄｄ１３０〜１３３は、例えば３２ビットアドレスのうち８ビットを各々加算する。フェッチステージ１００が４プロセッサモードとして動作する場合、各段のラッチ回路群１２０〜１２２は３２ビットのうち各８ビットを順次ラッチしつつ、各加算器１３０〜１３３はラッチ等した各８ビットを順次加算する。また、フェッチステージ１００が２プロセッサモードとして動作する場合、第２段目のラッチ回路群１２１は３２ビットアドレスのうち１６ビットを順次ラッチしつつ、各加算器１３０〜１３３はラッチ等した１６ビットアドレスを順次加算する。【００４２】
レジスタ１４０は命令アドレスを記憶する。フェッチステージ１００は、レジスタ１４０に記憶された命令アドレスに基づいて命令ＲＡＭ７００から命令を読み出す。尚、レジスタ１４０は、加算器１３３やラッチ回路群１２２‐６〜１２２‐８の出力を保持する４つの内部レジスタを有し、ラッチ回路１２２‐９からの出力に基づいて選択された内部レジスタから命令アドレスを出力する。【００４３】
また、フェッチステージ１００は、命令ＲＡＭ７００から読み出した命令を命令コードＣｏｄｅに変換して出力する。さらに、フェッチステージ１００は命令中に変数が含まれる場合、この変数をレジスタ６００に記憶するためのレジスタ番号（Ｒｉｄｘ＃）（一般にインデックスレジスタ番号と呼ばれる）を生成し、出力する。【００４４】
次にデコードステージ２００について説明する。デコードステージ２００は、図４に示すように、第２のパイプライン制御部（μパイプライン制御手段＿Ｄ）２１０と、第１段目のラッチ回路群２２０‐１〜２２０‐１９（以下、２２０‐１〜２２０‐１９をとくに断らない限り２２０と記す）と、第２段目のラッチ回路群２２１‐１〜２２１‐１７（同様に以下、２２１）と、第３段目のラッチ回路群２２２‐１〜２２２‐１５（同様に以下、２２２）と、各加算器２３０〜２３３，２４０〜２４３とを備える。【００４５】
デコードステージ２００も、第１〜第３段目のラッチ回路群２２０〜２２２により４段のパイプライン処理を実現する。第１〜第３段目のラッチ回路群２２０〜２２２は、第２のパイプライン制御部２１０から出力されるクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃに基づいて、第２段目のラッチ回路群２２１のみが動作したり（２プロセッサモード）、全ての段のラッチ回路群２２０〜２２２が動作（４プロセッサモード）したり、全ての段のラッチ回路群２２０〜２２２が命令コード等をスルー（１プロセッサモード）する。【００４６】
第２のパイプライン制御部２１０は、モードＭｄとクロック制御部９００からのクロックＣＫ６とが入力され、内部状態に応じて、どのクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを「Ｈｉｇｈ」または「Ｌｏｗ」にするかを決定してクロック等を出力する。第２のパイプライン制御部２１０も第１のパイプライン制御部１１０と同様にステートマシンとして動作する。詳細は後述する。【００４７】
デコードステージ２００では、インデックスレジスタ番号Ｒｉｄｘ＃に記憶された数値Ｒｉｄｘ＿ｉをレジスタ６００から読み出し、この数値Ｒｉｄｘ＿ｉ等からメモリアドレスＭｅｍＡｄや即値Ｉｍｍを演算し、読み出した数値Ｒｉｄｘ＿ｉも演算（更新）し、これらを出力する。【００４８】
例えば、デコードステージ２００は、３２ビットの数値（Ｒｉｄｘ＿ｉ）等に対して各８ビットを各々加算器２３０〜２３３で加算することで即値ＩｍｍまたはメモリアドレスＭｅｍＡｄを得、各８ビットを各々加算器２４０〜２４３で加算することで更新値Ｒｉｄｘ＿ｏを得る。【００４９】
また、デコードステージ２００は、入力された命令コードＣｏｄｅやモードＭｄを出力するとともに、データレジスタ番号Ｒｓ０＃，Ｒｓ１＃を生成して出力する。【００５０】
次にデータリードステージ３００について説明する。データリードステージ３００は、図５に示すように、第３のパイプライン制御部（μパイプライン制御手段＿Ｒ）３１０と、第１段目のラッチ回路群３２０‐１〜３２０‐３（以下、３２０‐１〜３２０‐３をとくに断らない限り３２０を記す）と、第２段目のラッチ回路群３２１‐１〜３２１‐３（同様に以下、３２１）と、第３段目のラッチ回路群３２２‐１〜３２２‐３（同様に以下３２２）と、２つのマルチプレクサ３３０、３３１を備える。【００５１】
データリードステージ３００も第１〜第３段目のラッチ回路群３２０〜３２２により４段のパイプライン処理を実現している。各段のラッチ回路群３２０〜３２２は、第３のパイプライン制御部３１０から出力されるクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃに基づいて動作し、データリードステージ３００は４プロセッサモードや２プロセッサモード、あるいは１プロセッサモードとして動作する。【００５２】
第３のパイプライン制御部３１０は、モードＭｄとクロック制御部９００からのクロックＣＫ７とが入力され、内部状態に応じて、どのクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを「Ｈｉｇｈ」または「Ｌｏｗ」にするかを決定してクロック等を出力する。第３のパイプライン制御部３１０もステートマシンとして動作する。詳細は後述する。【００５３】
データリードステージ３００は、デコードステージ２００からのメモリアドレスＭｅｍＡｄを、読み出しアドレスＡｄｄｒとしてデータメモリ８００に出力してデータＤａｔａを読み出す。また、データリードステージ３００は、デコードステージ２００から入力されたデータレジスタ番号Ｒｓ０＃，Ｒｓ１＃をレジスタ６００に出力し、当該番号に記憶されたデータ（正確にはレジスタ番号Ｒｓ１＃に対応するデータＲｓ１）をレジスタ６００から読み出す。【００５４】
そして、マルチプレクサ３３０，３３１はデータメモリ８００からのデータ（Ｄａｔａ）とレジスタ６００からのデータ（Ｒｓ１）等を多重化して出力する。出力される値（Ｒｂ）は二項演算の一方の値となる。データリードステージ３００は、第１〜第３のラッチ回路群３２０〜３２２は、メモリアドレスＭｅｍＡｄ等をクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃに応じてラッチ回路群３２０〜３２２でラッチ等しながら上述した演算等を行う。【００５５】
さらに、データリードステージ３００は、データメモリ８００に対するアウトプットイネーブル（ＯＥ）を出力する。ＯＥが有効な区間のみデータメモリ８００からデータ（Ｄａｔａ）を出力させることで、データメモリ８００が非同期型ＳＲＡＭの場合に安定してデータを読み出すことができる。【００５６】
次に、演算ステージ４００について説明する。演算ステージ４００は、図６に示すように、第４のパイプライン制御部（μパイプライン制御手段＿Ｅ）４１０と、第１段目のラッチ回路群４２０‐１〜４２０‐１０（４２０‐１〜４２０‐１０をとくに断らない限り、以下４２０と記す）と、第２段目のラッチ回路群４２１‐１〜４２１‐９（同様に以下、４２１）と、第３段目のラッチ回路群４２２‐１〜４２２‐８（同様に以下、４２２）と、４つの算術論理部（ＡＬＵ（Arithmetic
and Logic Unit））４３０〜４３３とを備える。【００５７】
演算ステージ４００においても、３段のラッチ回路群４２０〜４２２により４段のパイプライン処理を実現し、第４のパイプライン制御部４１０からのクロック（ＣＫａ〜Ｃｋｃ）とイネーブル（ＥＮａ〜ＥＮｃ）とに基づいて、４プロセッサモード、２プロセッサモード、あるいは１プロセッサモードとして動作する。【００５８】
第４のパイプライン制御部４１０は、モードＭｄとクロックＣＫ８とが入力され内部状態に応じて、クロックＣＫａ〜ＣＫｃや及びイネーブルＥＮａ〜ＥＮｃを「Ｈｉｇｈ」にするか「Ｌｏｗ」にするかを決定し出力する。第４のパイプライン制御部４１０もステートマシンとして動作する。その詳細は後述する。【００５９】
演算ステージ４００は、データリードステージ３００からの２項演算の一方のデータ（Ｒｂ）と、レジスタ６００から読み出した他方のデータ（Ｒａ：データレジスタ番号Ｒｓ０＃に対応したデータ）とを算術論理部４３０〜４３３で演算する。例えば、各データが３２ビットのとき、演算ステージ４００は８ビットずつ夫々算術論理部４３０〜４３３で演算する。演算ステージ４００は演算した結果（Ｓ）はデータライトステージ５００に出力する。演算ステージ４００は、クロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃに応じて各段のラッチ回路群４２０〜４２２で、演算等された各８ビットをラッチ等しながら、演算結果（Ｓ）を出力する。【００６０】
また、演算ステージ４００は演算結果（Ｓ）をデータメモリ８００に書き込むか、レジスタ６００に書き込むかを示すフラグ（Ｆｌａｇｓ）も出力する。【００６１】
次にデータライトステージ５００について説明する。データライトステージ５００は、図７に示すように、第５のパイプライン制御部（μパイプライン制御手段＿Ｗ）５１０と、第１段目のラッチ回路群５２０‐１〜５２０‐３（以下、とくに断らない限り５２０‐１〜５２０‐３を５２０と記す）と、第２段目のラッチ回路群５２１‐１〜５２１‐３（以下同様に、５２１）と、第３段目のラッチ回路群５２２‐１〜５２２‐３（以下同様に、５２２）とを備える。【００６２】
データライトステージ５００も、第１〜第３段目のラッチ回路群５２０〜５２２により、４段のパイプライン処理を実現し、第５のパイプライン制御部５１０からのクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃに基づいて各段のラッチ回路群５２０〜５２２が動作して、４プロセッサモード、２プロセッサモード、あるいは１プロセッサモードとして動作する。【００６３】
第５のパイプライン制御部５１０は、モードＭｄとクロックＣＫ９とが入力され、内部状態に応じて、クロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜Ｅｎｃを出力する。第５のパイプライン制御部５１０もステートマシンとして動作する。その詳細は後述する。【００６４】
データライトステージ５００は、演算結果（Ｓ）をデータメモリ８００に書き込む場合、演算結果（Ｓ）をデータ（Ｄａｔａ）としてデータメモリ８００に出力するとともに、アドレス（Ａｄｄｒ）とライトイネーブル（ＷＥ）も出力する。また、データライトステージ５００は、演算結果（Ｓ）をレジスタ６００に書き込む場合、演算結果（Ｓ）をデータ（Ｒｄ）としてレジスタ６００に出力するとともにレジスタ番号（Ｒｄ＃）とライトイネーブル（ＲｄＷＥ）も出力する。【００６５】
また、データライトステージ５００は、命令コード（Ｃｏｄｅ）に「ｊｕｍｐ」命令が含まれる場合、当該命令であることを示す「ｊｕｍｐモード」と、演算結果（Ｓ）であるアドレス（ｊｕｍｐアドレス）とをフェッチステージ１００に出力する。フェッチステージ１００のプログラムカウンタ（図３の右側の構成部分）はこのｊｕｍｐアドレスを演算する。【００６６】
次に、本マルチプロセッサシステム１の動作について説明する。理解を容易にするため、最初に全体動作について説明し（図８〜図１６）、次に各部の動作等について説明する（図１７〜図２４）。【００６７】
全体動作について説明する。図８〜図１０は１プロセッサモード（Ｍｄ＝１）から２プロセッサモード（Ｍｄ＝２）、そして１プロセッサモードに変更した場合のタイミングチャートの例を示し、図１１〜図１３は１→４（Ｍｄ＝４）→１の順、図１４〜図１６は２→４→２の順でプロセッサモードを夫々変更した場合のタイミングチャートの例を示す図である。プロセッサ数の変更例は他にもあるが、各パイプライン制御部１１０，・・・，５１０の動作は略同様のため説明を省略する。【００６８】
まず、１→２→１の順でプロセッサモードを変更した場合の動作を説明する。尚、図８〜図１６において縦方向が各ステージ１００，・・・，５００の動作、横方向が時間を示す。【００６９】
図８に示すように、２プロセッサモードに移行すると、フェッチステージ（Ｆ）１００は１プロセッサモードと比較して半分の周期で命令を実行する。【００７０】
すなわち、フェッチステージ１００は、最初の周期で（＃ｎ＋１）番目の命令を第２のラッチ回路群１２１の前段において処理し、２番目の周期で（＃ｎ＋１）番目の命令を第２のラッチ回路群１２１でラッチしつつ読み出し、さらに（＃ｍ）番目の命令を第２のラッチ回路群１２１の前段において処理する。【００７１】
そして、デコードステージ（Ｄ）２００は、３番目の周期で２プロセッサモードに移行し、（＃ｎ＋１）番目の命令に対する処理を行い、４番目の周期で（＃ｎ＋１）番目の命令と（＃ｍ）番目の命令とに対する処理を行う。その後、他のステージ３００〜５００においても、同様に処理を行う。図８に示すように、各命令は各ステージ１００〜５００で順次パイプラインで処理される。【００７２】
図９は、図８と略同様であるが、各パイプライン制御部１１０，・・・，５１０から出力されるクロック（ＣＫａ〜ＣＫｃ）とイネーブル（ＥＮａ〜ＥＮｃ）を含むタイミングチャートの例を示す図である。【００７３】
各ステージ１００，・・・，５００は、クロックＣＫｂとイネーブルＥＮｂとに基づいて第２段目のラッチ回路群１２１，・・・，５２１を動作させて、２プロセッサモードとして動作する。【００７４】
例えば、フェッチステージ（Ｆ）１００は、２プロセッサモード（Ｍｄ＝２）に移行後最初の周期でイネーブルＥＮｂが「Ｈｉｇｈ」となり、２番目の周期でクロックＣＫｂも「Ｈｉｇｈ」となる。クロックＣＫｂが「Ｈｉｇｈ」となる立ち上がりエッジで第２のラッチ回路群１２１は（＃ｎ＋１）番目の命令に含まれる命令コードやアドレスをラッチし、クロックＣＫｂが「Ｈｉｇｈ」となっている間ラッチした命令コード等を出力する。クロックＣＫｂが「Ｌｏｗ」になると、第２のラッチ回路群１２１はとくに動作せず、加算器１３０〜１３３等で処理が行われる。フェッチステージ１００は、２プロセッサモードに移行後、同様の処理を繰り返す。【００７５】
また、デコードステージ（Ｄ）２００も、３番目の周期でフェッチステージ（Ｆ）１００の最初の周期で行った処理と同様の処理を行い、順次これを繰り返す。デコードステージ（Ｄ）２００からデータライトステージ（Ｗ）５００まで、順次各命令をパイプラインで処理する。【００７６】
各ステージ１００，・・・，５００におけるクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｂは、各ステージ１００，・・・，５００内の第１〜第５のパイプライン制御部１１０，・・・，５１０から出力される。そして、第１〜第５のパイプライン制御部１１０，・・・，５１０は、モードＭｄと現在の内部状態に基づいてどのクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを「Ｈｉｇｈ」にするか「Ｌｏｗ」にするかを決定し、次の状態に遷移する。【００７７】
図１０は、各パイプライン制御部１１０，・・・，５１０の状態ＳＴを含むタイミングチャートの例を示す図である。【００７８】
例えば、第１のパイプライン制御部（μパイプライン制御手段＿Ｆ）１１０は、現在の状態ＳＴが「０」、モードＭｄが「２」のとき、全てのクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを「Ｌｏｗ」にする。そして、第１のパイプライン制御部１１０は、次状態を「１」にする。第１のパイプライン制御部１１０は、次の周期（８倍速クロックＣＫ５の周期）で状態ＳＴが「１」に遷移すると、現在の状態ＳＴ「１」とモードＭｄ「２」とから、イネーブルＥＮｂのみを「Ｈｉｇｈ」にしたクロック等を出力する。そして、第１のパイプライン制御部１１０は次状態を再度「１」にする。以後、第１のパイプライン制御部１１０は同様の処理を繰り返して、クロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを出力する。第２〜第５のパイプライン制御部２１０，・・・，５１０も同様の処理を行う。第１〜第５のパイプライン制御部１１０，・・・，５１０の構成と動作については後述する。【００７９】
図１１〜図１３は、１→４→１の順でプロセッサモードを変更した場合のタイミングチャートの例である。図１１に示すように、各ステージ１００，・・・，５００は、４プロセッサモードの場合、１プロセッサモードの１／４の周期（４倍速）で各命令に対する処理を行う。そして、１つ１つの命令に対し１／４の周期で順次パイプラインで処理する。【００８０】
図１２はクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃとを含むタイミングチャートの例である。例えばフェッチステージ（Ｆ）１００は、クロックＣＫａ及びイネーブルＥＮａとを「Ｈｉｇｈ」にすることで第１段目のラッチ回路群１２０を動作させ、クロックＣＫｂ及びイネーブルＥＮｂとを「Ｈｉｇｈ」にすることで第２のラッチ回路群１２１を動作させ、クロックＣＫｃ及びイネーブルＥＮｃとを「Ｈｉｇｈ」にすることで第３のラッチ回路群１２２を動作させる。フェッチステージ１００でも各命令が順次パイプラインで処理され、フェッチステージ１００からデータライトステージ（Ｗ）５００にかけて各命令がパイプラインで処理される。【００８１】
図１３は状態ＳＴを含むタイミングチャートの例である。第１のパイプライン制御部（μパイプライン制御手段＿Ｆ）１１０は、例えば、現在の状態ＳＴが「０」でモードＭｄが「４」のとき、次状態を「８」とし、クロックＥＮａ〜ＥＮｃ及びイネーブルＥＮａ〜ＥＮｃをすべて「Ｌｏｗ」とする信号を出力する。また、第１のパイプライン制御部１１０は、現在の状態ＳＴが「８」でモードＭｄが「４」のとき、次状態を「９」にし、イネーブルＥＮａのみ「Ｈｉｇｈ」の信号を出力する。他のパイプライン制御部２１０，・・・，５１０も同様である。【００８２】
図１４〜図１６は、２→４→２の順でプロセッサモードを変更した場合のタイミングチャートの例である。各ステージ１００，・・・，５００は、図１４及び図１５に示すように、２プロセッサモードの周期と比較して１／２の周期（２倍速）で各命令に対する処理を行う。また、各ステージ１００，・・・，５００は、クロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを順次「Ｈｉｇｈ」にして各段のラッチ回路群１２０，・・・を動作させることで、４プロセッサモードに移行する。【００８３】
図１６は各パイプライン制御部１１０，・・・，５１０の状態ＳＴを含むタイミングチャートの例である。例えば、フェッチステージ１００において２プロセッサモードから４プロセッサモードに移行後は、状態ＳＴは「２」，「Ｌ」，「Ｍ」,・・・と順次遷移し、１プロセッサモードから４プロセッサモードへの移行直後の状態ＳＴ遷移（「０」，「８」，「９」，・・・）と異なる。遷移前の状態ＳＴが両者で異なるからである。しかし、その後状態ＳＴは「Ｄ」，「Ｃ」を繰り返し、フェッチステージ１００は１プロセッサモードから４プロセッサモードに移行した場合と同様の状態ＳＴを遷移する。【００８４】
次に、クロック制御部９００における第１〜第５のクロックインバータ９２０〜９６０の構成と動作（図１７〜図１９）について説明し、次いで第１〜第５のパイプライン制御部１１０，・・・，５１０の構成と動作（図２０〜図２３）、最後に各ステージ１００，・・・，５００の第１〜第３段目のラッチ回路群１２０，・・・の構成と動作（図２４）について説明する。【００８５】
図１７〜図１９は、第１のクロックインバータ９２０の構成と動作の例を示す図である。各クロックインバータ９２０〜９６０は同一構成のため、第１のクロックインバータ９２０の構成について説明する。【００８６】
クロックインバータ９２０は、次状態決定部９２１と、状態記憶部９２２、及び制御信号出力部９２３を備える。次状態決定部９２１は組み合わせ論理回路であり、状態記憶部９２２と制御信号出力部９２３はフリップフロップである。【００８７】
次状態決定部９２１は、モードＭｄとクロックＬＫ、及び状態ＳＴが入力され、次状態Ｓと論理信号Ｄ、及びモードＳＭｄｒを出力する。状態記憶部９２２は、次状態Ｓを記憶し、供給されるクロックＣＫ（８倍速のクロック（×８＿ＣＬＫ））の１周期後に記憶した次状態Ｓを現在の状態ＳＴとして次状態決定部９２１に出力する。制御信号出力部９２３はモードＳＭｄｒと論理信号Ｄとが入力され、クロックＣＫの１周期後、クロックＱとモードＭｄｒを出力する。【００８８】
尚、クロックＱはクロックＣＫ０であり、クロックインバータ９２０が第２〜第５のクロックインバータ９３０〜９６０のときは、クロックＱは夫々クロックＣＫ１〜ＣＫ４である。【００８９】
また、モードＭｄｒは次段の第２のクロックインバータ９３０にモードＭｄとして入力される。他のクロックインバータ９４０〜９６０についても、前段のクロックインバータ９３０〜９５０からモードＭｄｒが入力される。【００９０】
更に、クロックインバータ９２０は、クロックＣＫ（８倍速のクロック（×８＿ＣＬＫ））が入力され、このクロックＣＫに同期して各部９２１〜９２３が動作する。【００９１】
尚、クロックＬＫは上述したように第１のパイプライン制御部１１０からのクロックであり、第１のパイプライン制御部１１０が現在どのモードによるクロックにより動作しているかを示す。次状態決定部９２１はクロックＬＫを確認のために用いる。他のクロックインバータ９３０〜９６０でも各々パイプライン制御部２１０，・・・，５１０からクロックＬＫが入力される。【００９２】
図１８はクロックインバータ９２０の状態遷移の例を示す図である。同図に示すように、クロックインバータ９２０は「０」から「７」までの８つの状態ＳＴを遷移する。同図に示す四角内は各状態においてクロックインバータ９２０が行う処理の内容を示す。【００９３】
クロックインバータ９２０は、入力されるモードＭｄ（またはＭｄｒ）と現在の状態ＳＴ（円内の数字）に基づき、次状態決定部９２１から論理信号ＤとモードＳＭｄｒとを出力する。【００９４】
例えば、クロックインバータ９２０はリセット（Ｒｅｓｅｔ）されると、出力クロックＱとして「０」を出力するとともに、次段のクロックインバータ９３０にモードＳＭｄｒとして「１」を出力し、次状態「０」に遷移する。クロックインバータ９２０が状態「０」に遷移すると、次状態決定部９２１は論理信号Ｄとして「１」を出力するとともにモードＳＭｄｒとして「０」を出力する。そして、クロックインバータ９２０が状態「１」に遷移すると、次状態決定部９２１は入力されたモードＭｄをモードＳＭｄｒとして出力するとともに、モードＭｄｒに応じて論理信号Ｄを出力し、次状態「２」に遷移する。クロックインバータ９２０は以降これを繰り返す。このような状態遷移は予め決められたもので、例えば、次状態決定部９２１のメモリに記憶される。【００９５】
図１９はクロックインバータ９２０のタイミングチャートの例を示す図である。例えば、次状態決定部９２１は、現在の状態ＳＴが「７」でモードＭｄが「２」のとき、モードＳＭｄｒとして「２」、論理信号Ｄとして「０」を出力する（図１８の状態遷移図も参照）。そして、制御信号出力部９２３は、論理信号Ｄ＝「１」を１クロック周期後にクロックＱ（＝クロックＣＫ０）として出力する。これを順次繰り返して、クロックインバータ９２０はクロックＱ(=クロックＣＫ０)を出力する。【００９６】
尚、次段のクロックインバータ９３０は第１のクロックインバータ９２０からのモードＭｄｒと、現在の状態ＳＴに基づいて上述の処理を行う。他のクロックインバータ９４０〜９６０についても同様である。【００９７】
このように各クロックインバータ９２０〜９６０は、第１〜第５のラッチ回路１５０，・・・，５５０にクロックＣＫ０〜ＣＫ４を供給する（図１参照）。第１〜第５のラッチ回路１５０，・・・，５５０は各プロセッサモードに応じたクロックＣＫ０〜ＣＫ４により、上流からの命令等をラッチし出力するため、各ステージ１００，・・・，５００は各プロセッサモードに応じた周期で上流からの命令等を処理できる（図１０，図１３，図１６参照）。【００９８】
次にパイプライン制御部１１０，・・・，５１０の構成と動作について図２０〜図２３を用いて説明する。他のパイプライン制御部２１０，・・・，５１０の構成は同一のため、第１のパイプライン制御部１１０を例にして説明する。【００９９】
図２０は第１のパイプライン制御部１１０の構成例を示す図である。パイプライン制御部１１０は、次状態決定部１１１と、状態記憶部１１２、及び制御信号出力部１１３を備える。次状態決定部１１１は組み合わせ論理回路であり、状態記憶部１１２と制御信号出力部１１３はフリップフロップである。パイプライン制御部１１０はステートマシンとして動作する。【０１００】
次状態決定部１１１は、入力されるモードＭｄと、状態記憶部１１２に記憶された現在の状態ＳＴとが入力され、次状態Ｓと信号Ｄとを出力する。状態記憶部１１２は、次状態Ｓを記憶し、１クロックＣＫ（８倍速のクロック（×８＿ＣＬＫ））周期後、記憶した状態ＳＴを次状態決定部１１１に出力する。また、制御信号出力部１１３は、次状態決定部１１から信号Ｄが入力され、クロックＣＫの１周期後、信号Ｄに応じてクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを出力する。【０１０１】
図２１は第１のパイプライン制御部１１０における状態遷移の例を示す図である。同図の丸数字内は状態を示す。パイプライン制御部１１０は全部で「０」から「６」、及び「８」から「Ｐ」までの２９状態を遷移する。【０１０２】
例えば、同図に示すようにパイプライン制御部１１０は状態が「０」でモードＭｄが「２」（２プロセッサモード）のとき、１クロックＣＫ周期後に次状態「１」に遷移し、３クロック周期連続して状態「１」を繰り返す。そして、パイプライン制御部１１０は、状態「３」を連続して２回繰り返した後、モードＭｄが「２」のとき状態「２」に遷移し、モードＭｄが「２」以外のとき状態「４」に遷移する。パイプライン制御部１１０の状態は、「０」→「１」→「１」→「１」→「２」→「２」→「３」・・・と遷移する。このような状態遷移は予め決められたもので、例えばパイプライン制御部１１０のメモリ内に記憶される。【０１０３】
また、次状態決定部１１は、決定した次状態Ｓに対応する信号Ｄを制御信号出力部１１３に出力する。そして、制御信号出力部１１３は、状態信号Ｄに基づいてクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを生成して出力する。【０１０４】
図２２は、状態ＳＴとクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃとの対応関係を示す図である。制御信号出力部１１３は内部に図２２に示すテーブルを備え、状態信号ＤをラッチしクロックＣＫの１周期後に現在の状態ＳＴに遷移した後、状態ＳＴに対応するクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを出力する。例えば、状態ＳＴが「０」のとき、クロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃがすべて「０（＝Ｌｏｗ）」となる信号を出力し、状態ＳＴが「１」のときイネーブルＥＮｂのみ「１（＝Ｈｉｇｈ）」でそれ以外が「０」の信号を出力する。【０１０５】
図２３は、第１のパイプライン制御部１１０におけるタイミングチャートの例を示す図である。次状態決定部１１１は、状態記憶部１１２からの状態ＳＴが「０」でモードＭｄが「２」のとき、次状態Ｓを「１」にして状態記憶部１１２に出力し（図２１も参照）、次状態Ｓを示す信号Ｄを「１」にして制御信号出力部１１３に出力する。制御信号出力部１１３は「１」をラッチし、図２２に示すテーブルを参照して、イネーブルＥＮｂのみ「１」にしたクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを出力する。第１のパイプライン制御部１１０は順次これを繰り返し、クロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを出力する。他のパイプライン制御部２１０，・・・，５１０も同様の処理を行う。【０１０６】
上述した例は一例であって、例えば、次状態決定部１１１が図２２に示すテーブルを内部に備え、次状態Ｓ（または状態ＳＴ）に応じて６ビットの信号Ｄを出力するようにしてもよい。信号Ｄの各ビットがクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃの各々に対応し、制御信号出力部１１３は信号Ｄに応じてクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを出力する。【０１０７】
以上のようにして、各パイプライン制御部１１０，・・・，５１０はクロックＣＫａ〜ＣＫｃ及びイネーブルＥＮａ〜ＥＮｃを出力し、各ステージ１００，・・・，５００は第１〜第３段目の任意の段におけるラッチ回路群１２０，・・・を動作させる。これにより、マルチプロセッサ１０は４プロセッサモードや２プロセッサモード、或いは１プロセッサモードとして動作し、４つのプロセッサや２つのプロセッサなどで命令に対する処理が行われるように動作する。【０１０８】
最後に、各ステージ１００，・・・，５００内の第１〜第３段目のラッチ回路群１２０，・・・の構成と動作について説明する。【０１０９】
図２４は第１段目のラッチ回路群１２０におけるラッチ回路１２０‐１（以下では説明の容易のため、とくに断らない限り単に「ラッチ回路１２０」と記す）の構成例を示す図である。第１段目のラッチ回路群１２０における他のラッチ回路１２０‐２〜１２０‐１１もラッチ回路１２０と同一構成であり、各ステージ１００，・・・，５００のラッチ回路群１２１，・・・を構成する各ラッチ回路１２１‐１，・・・も同一構成である。【０１１０】
ラッチ回路１２０は、ＡＮＤゲート１２５と、Ｄ型フリップフロップ１２６、及びマルチプレクサ１２７を備える。【０１１１】
クロックＣＫ（第１段目のラッチ回路群１２０，・・・，５２０の場合はクロックＣＫａ）とイネーブルＥＮ（第１段目のラッチ回路群１２０，・・・，５２０の場合はイネーブルＥＮａ）とがともに「１」のとき、ＡＮＤゲート１２５は論理和「１」をＤ型フリップフロップ１２６のクロック端子ＣＫに出力する。Ｄ型フリップフロップ１２６は、クロック端子ＣＫに入力される論理和「１」の立ち上がりエッジで内部状態を更新し、端子Ｄに入力される命令コード等をラッチし、「１」の間ラッチした命令コード等を端子Ｑから出力する。マルチプレクサ１２７は、イネーブルＥＮが「１」のときＤ型フリップフロップ１２６の出力端子Ｑから出力される命令コード等を選択して出力し、イネーブルＥＮが「０」のとき入力された命令コード等を直接出力する。【０１１２】
このように、ラッチ回路１２０は、イネーブルＥＮをマルチプレクサ１２７においてどの入力を選択するかの選択信号として用いているため、イネーブルＥＮが「０」のときでも入力された命令コード等をバイパスして出力させることができる。【０１１３】
ラッチ回路１２０が以上のように動作することができるため、例えば図１０に示すようにクロックＣＫｂとイネーブルＥＮｂが「Ｈｉｇｈ」のとき、各ステージ１００，・・・，５００の第２段目のラッチ回路群１２１，・・・，５２１は上流からの命令コード等をラッチして、２プロセッサモードとして動作する。【０１１４】
以上説明したように、本マルチプロセッサ１０は、第１〜第３段目のラッチ回路群１２０，・・・により各ステージ１００，・・・，５００が４段のパイプライン処理を実現し、各段のラッチ回路群１２０，・・・を動作させることで、４プロセッサや２プロセッサ、あるいは１プロセッサにより動作させることができる。よって、本マルチプロセッサ１０は１つのプロセッサにより構成できるため、例えば４つのプロセッサによりマルチプロセッサを構成する場合と比較して、省スペース化を図ることができる。また、本マルチプロセッサ１０は、１つのプロセッサを動作させればよいため、４つのプロセッサからなるマルチプロセッサの場合と比較して省電力化を実現できる。【０１１５】
上述した例は、１つのプロセッサを４プロセッサや２プロセッサ、あるいは１プロセッサとして動作させるようにした例を説明した。他にも、各ステージ１００，・・・，５００は第２のラッチ回路群１２１，・・・，５２１のみ有することで、２段のパイプライン処理を実現し、２プロセッサまたは１プロセッサとして動作させることもできる。また、各ステージ１００，・・・，５００を第１〜第７のラッチ回路群により８段のパイプライン処理を実現し、８プロセッサ、４プロセッサ、２プロセッサ、１プロセッサとして動作させることもできる。さらに、第１〜第３１のラッチ回路群により３２段のパイプライン処理を実現し、３２プロセッサ、１６プロセッサ、８プロセッサ等として動作させることもできる。【０１１６】
どのような段数まで実現可能かは、マルチプロセッサが処理できる命令等のビット数に基づく。つまり、上述した例では、マルチプロセッサ１０が処理できるビット数は３２ビットで説明しており、４段のパイプライン処理を実現することにより８ビットずつ処理できる。よって、８段のパイプラインにより４ビットずつ処理することも、１６段のパイプラインにより２ビットずつ処理することも、さらに３２段のパイプラインにより１ビットずつ処理することも可能である。【０１１７】
まとめると、本マルチプロセッサ１０において処理可能なビット数が２ｎ（ｎは１以上の自然数）のとき、各ステージ１００，・・・，５００を第１〜第（２ｋ−１）段（ｋは１≦ｋ≦ｎ）のラッチ回路群により第２ｋ段のパイプライン処理を実現でき、１（＝２０）プロセッサ、２（＝２１）プロセッサ、・・・、２ｋプロセッサの各プロセッサ数を有するように動作させることができる。上述した例では、ｎ＝４（３２ビット）で、ｋ＝２（４段のパイプライン）の場合である。【０１１８】
ただし、図８等に示すように、各ステージ１００，・・・，５００が順次各プロセッサモードに移行した後は、各ステージ１００，・・・，５００は全て同じプロセッサモードで動作する。例えば、全てのステージ１００，・・・，５００が２プロセッサモードに移行した後、あるステージ１００，・・・，５００（例えば、デコードステージ２００）のみが他のプロセッサモードに移行することはない。  【０１１９】
また、上述した例は、１つのプロセッサ内に各ステージ１００，・・・，５００を有するマルチプロセッサ１０の例で説明した。かかるプロセッサが複数個設けられたマルチプロセッサ１０でも実施可能である。【０１２０】
さらに、上述した例では、データメモリ８００や命令ＲＡＭ７００、クロック制御部９００はマルチプロセッサ１０の外側に配置されているものとして説明した。例えば、データメモリや命令ＲＡＭ７００、クロック制御部９００のいずれかまたはすべてがマルチプロセッサ１０内に設けられもよい。【０１２１】
さらに、上述した例は、マルチプロセッサ１０を５ステージからなるものとして説明したが、例えば、３ステージ（例えば、デコードステージ２００とデータリードステージ３００、及び演算ステージ４００とデータライトステージ５００とが一つのステージ）や４ステージ（例えば、演算ステージ４００とデータライトステージ５００とが一つのステージ）からなるマルチプロセッサ１０が構成されてもよい。各ステージ１００〜５００の任意の組み合わせで２〜４ステージとしてマルチプロセッサ１０が構成されればよい。
【図１】
2009118776.tif 000003
【図２】
2009118776.tif 000004
【図３】
2009118776.tif 000005
【図４】
2009118776.tif 000006
【図５】
2009118776.tif 000007
【図６】
2009118776.tif 000008
【図７】
2009118776.tif 000009
【図８】
2009118776.tif 000010
【図９】
2009118776.tif 000011
【図１０】
2009118776.tif 000012
【図１１】
2009118776.tif 000013
【図１２】
2009118776.tif 000014
【図１３】
2009118776.tif 000015
【図１４】
2009118776.tif 000016
【図１５】
2009118776.tif 000017
【図１６】
2009118776.tif 000018
【図１７】
2009118776.tif 000019
【図１８】
2009118776.tif 000020
【図１９】
2009118776.tif 000021
【図２０】
2009118776.tif 000022
【図２１】
2009118776.tif 000023
【図２２】
2009118776.tif 000024
【図２３】
2009118776.tif 000025
【図２４】
2009118776.tif 000026
【図２５】
2009118776.tif 000027
【図２６】
2009118776.tif 000028
【図２７】
2009118776.tif 000029
【手続補正書】
【提出日】平成22年8月4日(2010.8.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
一つのプロセッサによりなるマルチプロセッサにおいて、
マルチプロセッサごとに独立して処理されるべき命令列を、一サイクル内で位相をずらして順次フェッチするパイプライン処理部と、
モード信号が入力され、前記モード信号に基づいて前記パイプライン処理部を一または複数段のパイプラインとして動作させるよう前記パイプライン処理部を制御するパイプライン制御部と、
前記命令列を処理する複数のステージと、
前記各ステージから出力される前記モード信号をラッチする複数のラッチ回路と、
クロック制御部とを備え、
前記クロック制御部は、前記モード信号が入力され、前記モード信号に基づいて、前記各ステージから出力される前記モード信号を前記パイプライン処理部の動作に応じて前記各ラッチ回路でラッチし前記各ステージに順次出力するよう、前記各ラッチ回路を制御し、
前記複数のステージは、少なくともフェッチステージを有し、
前記フェッチステージは複数の内部レジスタを有するレジスタを有し、前記一サイクル内で位相をずらして前記複数の内部レジスタに記憶された命令アドレス値を順次読み出し、前記命令アドレス値に応じて命令メモリから順次命令コードを読み出し、読み出した前記命令コードを順次後段のパイプラインに出力することを特徴とするマルチプロセッサ。
【請求項２】
前記各ステージは前記パイプライン処理部と前記パイプライン制御部とを備え、
前記各ステージの前記パイプライン制御部は前記各ラッチ回路からの前記モード信号に基づいて前記パイプライン処理部を制御することで、前記各ステージは前記パイプラインとして順次動作することを特徴とする請求項１記載のマルチプロセッサ。
【請求項３】
前記パイプライン処理部は複数段のラッチ回路群を備え、
前記パイプライン制御部は前記モード信号に基づいて前記複数段のうち所定段の前記ラッチ回路群を動作させることで、前記パイプライン処理部を一または複数段のパイプラインとして動作させることを特徴とする請求項１記載のマルチプロセッサ。
【請求項４】
前記複数のステージの各ステージは、
前記フェッチステージと、
前記命令コードが入力され、データメモリに記憶された第１のデータを読み出すためのメモリアドレスを出力するとともに、レジスタに記憶された第２のデータを読み出すためのレジスタ番号を出力するデコードステージと、
前記メモリアドレスと前記レジスタ番号とが入力され、前記メモリアドレスに記憶された第１のデータを前記データメモリから読み出して出力するとともに、前記レジスタ番号に記憶された第２のデータを前記レジスタから読み出して出力するデータリードステージと、
前記第１のデータと前記第２のデータとが入力され、前記命令コードに基づいて前記第１と前記第２のデータを演算して演算結果を出力する演算ステージと、
前記演算結果が入力され、前記演算結果を前記データメモリまたは前記レジスタに書き込むデータライトステージであることを特徴とする請求項１記載のマルチプロセッサ。
【国際調査報告】
2009118776.tif 000030
2009118776.tif 000031
2009118776.tif 000032
2009118776.tif 000033