(57)【要約】【課題】  拡張命令によって複数のプロセッサを並列動作させることができる並列プロセッサの命令メモリの利用効率の向上を図る。【解決手段】  分岐命令で動作モードと命令長を指定するようにして、この動作モード情報と命令長情報に基づき命令フェッチ・命令データ供給ユニット５００を制御することで、コアプロセッサ２００の動作時において、動作させないコプロセッサ＃１（３００）および又は＃２（４００）に無操作（ＮＯＰ）命令を命令メモリ１００に埋め込むことを不要とするとともに、プロセッサ１の並列動作モード時にも、並列動作させないコプロセッサ＃１（３００）および又は＃２（４００）に対するＮＯＰ命令の命令メモリ１００への埋め込みを不要とし、更に拡張命令で処理に必要な範囲のコプロセッサ＃１（３００）および又は＃２（４００）の並列動作を指定可能な命令長の命令を選択出来るようにすることで命令メモリ１００の利用効率を向上させる。【選択図】  図１
2007156557.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも第１および第２のプロセッサで構成され、各プロセッサで実行される命令を同一サイクルにおいて並列にパイプライン処理する並列プロセッサであって、
前記第１のプロセッサに設けられる第１の命令実行部および命令フェッチ供給部と、
前記第２のプロセッサに設けられる第２の命令実行部と、
前記第１の命令実行部およびまたは前記第２の命令実行部で実行される命令を記憶する命令メモリとを備え、
前記命令フェッチ供給部は、
前記命令メモリから前記命令を読み出すためのアドレスを指定するカウンタ手段と、
前記命令メモリから読み出した前記命令を保持する命令バッファ手段と、
前記命令メモリの読出し動作に応じて前記第１の命令実行部および前記第２の命令実行部を動作させる第１の動作モードと、前記第２の命令実行部を動作させる第２の動作モードの制御情報を出力する動作モード制御手段と、
所定ビット長のＮＯＰ命令を生成するＮＯＰ命令生成手段と、
前記動作モード制御手段からの前記動作モードの制御情報に基づいて、前記第１の動作モードの場合は、前記第１の命令実行部に前記命令バッファ手段からの前記命令の一部と前記ＮＯＰ命令生成手段からの前記ＮＯＰ命令とからなる命令を供給するとともに、前記第２の命令実行部に前記命令の残りの一部と前記ＮＯＰ命令生成手段からの前記ＮＯＰ命令とからなる命令を供給し、前記第２の動作モードの場合は、前記命令バッファ手段からの前記命令の一部又は全部を前記第２の命令実行部に供給する命令供給手段と
を具備することを特徴とする並列プロセッサ。
【請求項２】
前記命令フェッチ供給部は、
分岐命令により前記動作モード制御手段の前記制御情報を設定し、前記分岐命令により規定される分岐先アドレスの一部に含まれる命令長を指定する情報に従って前記第１および第２の動作モードにおける前記命令の命令長を切り替えることを特徴とする請求項１に記載の並列プロセッサ。
【請求項３】
前記命令フェッチ供給部は、
分岐先の命令の命令長を指定する分岐命令により前記動作モード制御手段の前記制御情報を設定し、前記分岐命令により指定される命令長を指定する情報に従って前記第１および第２の動作モードにおける前記命令の命令長を切り替えることを特徴とする請求項１に記載の並列プロセッサ。
【請求項４】
少なくとも第１、第２および第３のプロセッサで構成され、各プロセッサで実行される命令を同一サイクルにおいて並列にパイプライン処理する並列プロセッサであって、
前記第１のプロセッサに設けられる第１の命令実行部および命令フェッチ供給部と、
前記第２のプロセッサに設けられる第２の命令実行部と、
前記第３のプロセッサに設けられる第３の命令実行部と、
前記第１の命令実行部、前記第２の命令実行部およびまたは前記第３の命令実行部で実行される命令を記憶する命令メモリとを備え、
前記命令フェッチ供給部は、
前記命令メモリから前記命令を読み出すためのアドレスを指定するカウンタ手段と、
前記命令メモリから読み出した前記命令を保持する命令バッファ手段と、
前記命令メモリの読出し動作に応じて前記第１の命令実行部および前記第２の命令実行部およびまたは前記第３の命令実行部を動作させる第１の動作モードと、前記第２の命令実行部および第３の命令実行部を動作させる第２の動作モードの制御情報を出力する動作モード制御手段と、
所定ビット長のＮＯＰ命令を生成するＮＯＰ命令生成手段と、
前記動作モード制御手段からの前記動作モードの制御情報に基づいて、前記第１の動作モードの場合は、前記第１の命令実行部に前記命令バッファ手段からの前記命令の一部を供給するとともに、前記第２およびまたは前記第３の命令実行部に前記命令の残りの一部と前記ＮＯＰ命令生成手段からの前記ＮＯＰ命令とからなる命令を供給し、前記第２の動作モードの場合は、前記命令バッファ手段からの前記命令の一部を前記第２の命令処理部に供給し前記命令の残りを前記第３の命令実行部に供給する命令供給手段と
を具備することを特徴とする並列プロセッサ。
【請求項５】
少なくとも第１および第２のプロセッサによって構成され、各プロセッサで実行される命令を同一サイクルにおいて並列にパイプライン処理する並列プロセッサであって、
前記第１のプロセッサに設けられた第１の命令実行部および命令フェッチ供給部と、
前記第２のプロセッサに設けられた第２の命令実行部と、
前記第１の命令実行部およびまたは前記第２の命令実行部で実行される命令を記憶する命令メモリとを備え、
前記命令フェッチ供給部は、
前記命令メモリから前記命令を読み出すためのアドレスを指定するカウンタ手段と、
前記命令メモリから読み出した前記命令を保持する命令バッファ手段と、
前記命令メモリの読出し動作に応じて前記第１の命令実行部および前記第２の命令実行部を動作させる第１の動作モードと、前記第２の命令実行部を動作させる第２の動作モードの動作モード制御情報と、前記第１および第２の命令実行部に前記命令を供給する方法を規定するパターン制御情報とを出力する制御手段と、
所定ビット数のＮＯＰ命令を生成するＮＯＰ命令生成手段と、
前記制御手段からの前記動作モード制御情報および前記パターン制御情報に基づいて、前記第１の動作モードの場合は、前記第１の命令実行部に前記命令バッファ手段からの前記命令の一部と前記ＮＯＰ命令生成手段からの前記ＮＯＰ命令とからなる命令を供給するとともに、前記第２の命令実行部に前記命令の残りの一部と前記ＮＯＰ命令生成手段からの前記ＮＯＰ命令とからなる命令を供給し、前記第２の動作モードの場合は、前記命令バッファ手段からの前記命令の一部又は全部を前記第２の命令実行部に供給する命令供給手段と
を具備することを特徴とする並列プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、拡張命令によって複数のプロセッサを並列動作させる並列プロセッサに関する。特に、単一のプロセッサ動作による処理モードと複数のプロセッサの並列動作による処理モードにおける命令について、命令メモリの利用効率を向上させるための技術に関する。
【背景技術】
【０００２】
近年では、電子機器にプロセッサを組み込んで高性能化が図られているが、このような電子機器に求められる処理能力が年々高くなってきることから、組み込みプロセッサ自身の処理能力も、年々高いものが求められるようになってきている。このため、最近の組み込みプロセッサには、命令レベルの並列度（ＩＬＰ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｌｅｖｅｌ  Ｐａｒａｌｌｅｌｉｓｍ）を向上させるスーパースカラ・アーキテクチャや、超長命令語（ＶＬＩＷ：Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）アーキテクチャなどの手法を採用しているものがある。
【０００３】
一方、組み込みプロセッサが実装される機器側では、機器のコストを低減させることと、機器の電力消費を低減させることが求められている。このため、組み込みプロセッサにスーパースカラ・アーキテクチャを採用した場合、命令の依存関係を命令実行時にチェックする機構と、動的に実行順序を制御する機構などが必要となって、回路が複雑化してチップサイズが大きくなってコストアップとなり、また消費電力が高くなる課題がある。また、組み込みプロセッサにＶＬＩＷアーキテクチャを採用した場合、同時並列に実行する命令がない時には該当する命令スロットに対して、データ処理などを行わせない無操作（ＮＯＰ：Ｎｏ  ＯＰｅｒａｔｉｏｎ）命令を配置する必要がある為、命令メモリの利用効率が低下する課題があった。
【０００４】
これに対して、命令区切り情報を設けて、命令を可変長として命令メモリの利用効率向上を図ったＶＬＩＷアーキテクチャのプロセッサ技術が知られている（例えば、特許文献１参照。）。
【０００５】
更に、ＶＬＩＷアーキテクチャのプロセッサに動作モードを設けて、単一のプロセッサが動作するモードでは命令処理を行わない他のプロセッサに対するＮＯＰ命令を命令メモリに配置不要として、命令メモリの利用効率向上を図る技術が知られている（例えば、特許文献２参照。）。
【特許文献１】特開２００１−１００９９７号公報  （第３−４頁、図３）
【特許文献２】特許第３６１６５５６号公報  （第４−１１頁、図３）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、前記特許文献１に開示される各命令に命令区切り情報を付加する方法では、処理命令以外の情報が命令メモリに配置されるため命令メモリの利用効率が低下する問題がある。また、前記特許文献２に開示される並列プロセッサは、単一プロセッサが動作するモードでは、他のプロセッサに対するＮＯＰ命令を不要として命令利用効率向上を図ることができる。しかし、処理用途に適した複数種類のプロセッサを内蔵して、それらのプロセッサを適宜並列動作させて消費電力の低下と処理性能の向上を実現するようにした並列プロセッサでは、多ビットの拡張命令で並列動作を指示する場合に、動作させないプロセッサに対するＮＯＰ命令が必要となり、命令メモリの利用効率が低下する課題があった。
【０００７】
本発明は、上記課題を解決するためになされたもので、動作モードを設けてＶＬＩＷ動作モード時の拡張命令の命令長を可変として、命令メモリの利用効率の高い並列プロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明の並列プロセッサは、少なくとも第１および第２のプロセッサで構成され、各プロセッサで実行される命令を同一サイクルにおいて並列にパイプライン処理する並列プロセッサであって、前記第１のプロセッサに設けられる第１の命令実行部および命令フェッチ供給部と、前記第２のプロセッサに設けられる第２の命令実行部と、前記第１の命令実行部およびまたは前記第２の命令実行部で実行される命令を記憶する命令メモリとを備え、前記命令フェッチ供給部は、前記命令メモリから前記命令を読み出すためのアドレスを指定するカウンタ手段と、前記命令メモリから読み出した前記命令を保持する命令バッファ手段と、前記命令メモリの読出し動作に応じて前記第１の命令実行部および前記第２の命令実行部を動作させる第１の動作モードと、前記第２の命令実行部を動作させる第２の動作モードの制御情報を出力する動作モード制御手段と、所定ビット長のＮＯＰ命令を生成するＮＯＰ命令生成手段と、前記動作モード制御手段からの前記動作モードの制御情報に基づいて、前記第１の動作モードの場合は、前記第１の命令実行部に前記命令バッファ手段からの前記命令の一部と前記ＮＯＰ命令生成手段からの前記ＮＯＰ命令とからなる命令を供給するとともに、前記第２の命令実行部に前記命令の残りの一部と前記ＮＯＰ命令生成手段からの前記ＮＯＰ命令とからなる命令を供給し、前記第２の動作モードの場合は、前記命令バッファ手段からの前記命令の一部又は全部を前記第２の命令実行部に供給する命令供給手段とを具備することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、拡張命令によって複数のプロセッサを並列動作させる並列プロセッサにおいて、動作させないプロセッサに供給する無操作（ＮＯＰ）命令を命令メモリに埋め込むことを不要とするとともに、並列動作時の拡張命令の命令長を可変とすることで高い処理性能が必要な関数の処理では複数のプロセッサを並列動作させることができ、また他の関数では、必要に応じた数のプロセッサを並列動作させるような命令長の命令を選択してプログラムを記述したことで、命令メモリの利用効率の高い並列プロセッサを提供することができる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施例を説明する。
【実施例１】
【００１１】
本発明の第１の実施例を、図１乃至図６を参照して説明する。
【００１２】
図１は、第１の実施例に係る並列プロセッサを内蔵したプロセッサのブロック図である。図２は、並列プロセッサを動作させる「拡張命令」の命令フォーマットを示す図である。図３は、「拡張命令」を含む命令列を示す図である。図４は、命令メモリ上の「拡張命令」の配置状況を示す図である。図５は、パイプラインプロセッサのステージ構成を示す図である。図６は命令フェッチ・命令供給ユニットの構成を示すブロック図である。
【００１３】
図１に示すプロセッサ１は、命令メモリ１００を内蔵し、例えばコアプロセッサ２００とコプロセッサ＃１（３００）とコプロセッサ＃２（４００）とから構成される並列プロセッサである。そして、コアプロセッサ２００が単独で動作するコア動作モードと、コアプロセッサ２００とコプロセッサ＃１（３００）およびまたはコプロセッサ＃２（４００）が連携して、１つのＶＬＩＷプロセッサとして動作するＶＬＩＷ（並列）動作モードを有する。
【００１４】
命令メモリ１００は、コアプロセッサ２００がデコードし実行する「基本命令」と、コアプロセッサ２００とコプロセッサ＃１（３００）およびまたはコプロセッサ＃２（４００）がデコードし実行する「拡張命令」から構成される（オブジェクト）プログラムを記憶する。プログラムは、図示しないがプロセッサ１に接続された外部記憶装置から命令メモリ１００に適宜ロードされる。
【００１５】
コアプロセッサ２００は、命令メモリ１００へ次に実行する命令のメモリアドレスを出力して命令を読込み（フェッチ）、読込んだ命令をコアプロセッサ２００とコプロセッサ＃１（３００）およびまたはコプロセッサ＃２（４００）に供給する命令フェッチ・命令データ供給ユニット５００と、命令フェッチ・命令データ供給ユニット５００の動作制御情報を記憶する制御情報記憶部６００と、読込んだ命令をデコード実行するデコード実行部７００とからなるパイプライン構成のプロセッサである。
【００１６】
命令フェッチ・命令データ供給ユニット５００は、次に実行する命令のメモリアドレスを生成または選択して命令メモリ１００に出力して命令を読込む。この時、制御情報記憶部６００からの制御情報がコア動作モードであれば命令メモリ１００から読込む命令は「基本命令」であり、コアプロセッサ２００のデコード実行部７００に「基本命令」を供給する。
【００１７】
また、制御情報記憶部６００からの制御情報が並列動作モードであれば、命令メモリ１００から読込む前記制御情報で指定されるサイズ（長さ）の命令は「拡張命令」であり、その「拡張命令」のコプロセッサ用の命令フィールド（コプロ）の内容に基づく命令をコプロセッサ＃１（３００）のデコード実行部７１０およびまたはコプロセッサ＃２（４００）のデコード実行部７２０に供給する。同時に、当該「拡張命令」にコアプロセッサ２００用の命令フィールド（コア）が含まれれば、その命令フィールドの内容に基づく命令をコアプロセッサ２００のデコード実行部７００に供給する。
【００１８】
制御情報記憶部６００には、デコード実行部７００で実行された命令によって設定されるプロセッサ１の動作モードや、コアプロセッサ２００やコプロセッサ＃１（３００）およびまたは＃２（４００）で実行される拡張命令の命令長の制御情報が記憶され、プロセッサ１の命令読出し動作において命令フェッチ・命令データ供給ユニット５００に制御情報を出力する。なお、電源投入やリセット信号などで制御情報記憶部６００の記憶内容は初期化されて、基本命令を読込み実行するコア動作モードの制御情報を出力するが、割込み信号などに基づく割込み処理で記憶内容が初期化される場合は、制御情報記憶部６００の記憶内容が図示していない特定の記憶部に保存されて、割込み処理からの復帰が可能なように構成されている。
【００１９】
デコード実行部７００は、命令フェッチ・命令データ供給ユニット５００から供給される命令をデコードし実行する。この命令には、一般的な組込みプロセッサが有する命令が含まれていて、デコード実行部７００は、プロセッサ１内に設けられているデータポートやデータメモリとの間の読出しや書込みやデータ演算処理などを行う。それ以外に、プロセッサ１のプログラム処理順序や処理状態を制御する各種レジスタやフラグなどの記憶部との間の読出しや書込み等を行う。
【００２０】
コプロセッサ＃１（３００）のデコード実行部７１０とコプロセッサ＃２（４００）のデコード実行部７２０は、コアプロセッサ２００の命令フェッチ・命令データ供給ユニット５００から供給される命令をデコードし実行する。このような構成とすることで、プロセッサ１は、プロセッサ１が実装される機器の用途に適した特定のデータ処理を実行する（例えば、データ処理を高速、高精度、低消費電力で実現するような回路を有するコプロセッサを用いて）プロセッサを実現する。
【００２１】
なお、図示しないが、コプロセッサ＃１（３００）およびまたは＃２（４００）は、コアプロセッサ２００へ割込みなどの信号を出力する他に、コアプロセッサ２００からコプロセッサ＃１（３００）およびまたは＃２（４００）内のレジスタなどへのデータ入出力が可能なバスで接続されている。また、以下の説明では各コプロセッサは３２ビット長の命令を読込み動作するものとする。
【００２２】
図２に示す命令メモリ１００に記憶される「拡張命令」の命令フォーマットは、命令長が異なるタイプと、命令フィールド構成が異なるタイプとが存在する。例えば、命令Ｆ１ａ（８００）と命令Ｆ２ａ（８１０）は、命令長が３２ビットの拡張命令フォーマットである。また、命令Ｆ１ｂ（８２０）と命令Ｆ２ｂ（８３０）は、命令長が６４ビットの拡張命令フォーマットである。
【００２３】
さらに、命令Ｆ１ａ（８００）と命令Ｆ１ｂ（８２０）の拡張命令フォーマットは、「コア」命令フィールドと「コプロ」命令フィールドによって構成されていて、この内の「コア」命令フィールドにコアプロセッサ２００がデコード実行する命令がセットされる。これにより、コアプロセッサ２００とコプロセッサ＃１（３００）およびまたは＃２（４００）とで同時並列にデータ処理などを行わせることができる。
【００２４】
これに対し、命令Ｆ２ａ（８１０）と命令Ｆ２ｂ（８３０）の拡張命令フォーマットは、「コプロ」命令フィールドのみで構成されていて、そのフィールドにコプロセッサ＃１（３００）のデコード実行部７１０およびまたはコプロセッサ＃２（４００）のデコード実行部７２０でデコードし実行される命令がセットされる。
【００２５】
次に、図６に示す命令フェッチ・命令データ供給ユニット５００の詳細な構成について説明する。命令フェッチ・命令データ供給ユニット５００は、プログラムカウンタ５１０、メモリ要求制御ユニット５２０、命令バッファ５３０、命令データ供給ユニット５４０、ＮＯＰ命令生成回路５５０、命令長・動作モード制御回路５６０、加算回路５７０、選択回路５８０等から構成されている。
【００２６】
プログラムカウンタ５１０は、プロセッサ１が次に読出す命令のアドレスを記憶していて命令メモリ１００と加算回路５７０に読出しアドレスを出力する。メモリ要求制御ユニット５２０は、プロセッサ１の命令フェッチ動作において、命令メモリ１００へ命令フェッチ要求を出力する。なお、プロセッサ１では命令フェッチ動作において、制御ユニットや信号の図示を省略するが命令バッファ５３０が命令メモリ１００から読出された命令を入力し、プログラムカウンタ５１０が選択回路５８０の出力を次の読み出すアドレスとして入力するように制御される。命令バッファ５３０は、命令メモリ１００から読込んだ命令を保持し命令データ供給ユニット５４０に出力する。ＮＯＰ命令生成回路５５０は、生成したＮＯＰ命令を命令データ供給ユニット５４０に出力する。
【００２７】
命令データ供給ユニット５４０は、命令バッファ５３０から入力した命令およびまたはＮＯＰ命令生成回路５５０からのＮＯＰ命令をコアプロセッサ２００、コプロセッサ＃１（３００）およびまたは＃２（４００）に出力する。命令長・動作モード制御回路５６０は、制御情報記憶部６００からの指令に基づいて命令データ供給ユニット５４０の命令長および動作モードを制御し、また、命令長情報は加算回路５７０にも出力する。加算回路５７０は、命令長・動作モード制御回路５６０からの命令長情報を受けてプログラムカウンタ５１０のアドレス値に所定値を加算して次の読出しアドレスを生成して選択回路５８０に出力する。選択回路５８０は、加算回路５７０からのアドレスとデコード実行部７００から出力される分岐先アドレスが入力され、デコード実行部７００から出力される分岐成立情報に基づいて次の読出しアドレスを１つ選択してプログラムカウンタ５１０に出力する。
【００２８】
次に、図３乃至図６を参照しながら、命令メモリ１００から読み出した命令を各プロセッサに供給する命令フェッチ・命令データ供給ユニット５００の動作の詳細を説明する。
【００２９】
図３に示すプログラムシーケンスを構成するプログラムは、「基本命令」または「拡張命令」を用いて記述され、プロセッサ１のコアプロセッサ２００とコプロセッサ＃１（３００）およびまたは＃２（４００）で実行処理される。
【００３０】
なお、このプログラムの「基本命令２」は、命令で指定するレジスタの内容が分岐先アドレスであり、動作モードをコア動作モードから並列動作モードに変更するサブルーチン分岐命令（ＪＳＲＶ）である。また、分岐先アドレスとなるレジスタの内容の中で分岐先アドレス指定に使用されない最下位ビットを用いて、分岐先アドレスの「拡張命令」の命令長を指定する。即ち、分岐命令の分岐先アドレス中の最下位ビットが「１」の場合、分岐先アドレスの「拡張命令」は６４ビット長（図２の命令Ｆ１ｂまたはＦ２ｂ）のタイプであり、また前記最下位ビットが「０」の場合、分岐先アドレスの「拡張命令」は３２ビット長（図２の命令Ｆ１ａまたはＦ２ａ）のタイプである。
【００３１】
更に、このプログラム例では「基本命令２」の分岐先アドレス中の最下位ビットが「１」となるように「基本命令１」より前の命令で設定しているので、分岐先アドレスの「拡張命令１」以降の命令の命令長は６４ビットのタイプとなる。
【００３２】
ここで、分岐命令の分岐先アドレス中の最下位ビットを用いて分岐先の「拡張命令」の命令語長を指定してもプログラム実行で混乱がない理由は、命令メモリ１００が８ビット（バイト）単位でアドレスが付与され、最短の命令長の基本命令が１６ビットのプロセッサでは、一般的に、命令がロードされるアドレスは偶数番地となるように制限するからで、分岐先アドレスの最下位ビットはアドレス指定で使用されないためである。
【００３３】
図４に示す命令メモリ１００上の命令の配置の状況は、図３で示したプログラムシーケンスを機械語に変換して、命令メモリ１００にロードした時の様子を示す。
【００３４】
次に、「基本命令１」を命令メモリ１００から読込む時の動作から説明する。プロセッサ１は、例えば図５（Ａ）に示す５段のパイプライン構成のプロセッサであるとし、さらに説明を簡単にするため、「基本命令１」の読込み時にデコード実行部７００で実行されている命令と図３に示される「基本命令２」以外の「基本命令」および「拡張命令」は、分岐動作を伴う命令でなく、また、以下の動作説明の期間に割込みなども発生しないものとする。
【００３５】
図５（Ａ）の第１のサイクルで、命令フェッチ・命令データ供給ユニット５００のプログラムカウンタ５１０にアドレス値「０ｘ１００」（０ｘは１６進表示であることを示す）がセットされ、このプログラムカウンタ５１０のアドレス値が命令メモリ１００に出力され、続いてメモリ要求制御ユニット５２０から命令メモリ１００へ読出し信号がフェッチ要求として出力される。
【００３６】
これにより命令メモリ１００は、０ｘ１００番地の内容を命令バッファ５３０に出力し、命令バッファ５３０は「基本命令１」を読込む。
【００３７】
次に、命令データ供給ユニット５４０は、この時制御情報記憶部６００から出力される動作モード情報がコア動作モードであるため、命令バッファ５３０に読込まれた「基本命令１」を、コアプロセッサ２００のデコーダ実行部７００に供給するとともに、ＮＯＰ命令生成回路５５０で生成されたＮＯＰ命令（無操作命令）をコプロセッサ＃１（３００）のデコード実行部７１０およびコプロセッサ＃２（４００）のデコード実行部７２０に供給する。
【００３８】
命令長・動作モード制御回路５６０は、「基本命令１」を読込む時、動作モードがコア動作モードで、かつ「基本命令１」の命令長が１６ビット（２バイト）であるため、加算回路５７０へ「２」を加える命令長情報を出力する。そして、加算回路５７０でプログラムカウンタ５１０のアドレス値に「２」を加えたアドレス値「０ｘ１０２」が生成される。このアドレス値は、デコード実行部７００で実行されている命令が分岐命令でないので選択回路５８０を介してプログラムカウンタ５１０に入力され、命令バッファ５３０への「基本命令１」の読込み動作とともにプログラムカウンタ５１０に書込まれ、次に読込む命令のメモリアドレスとして命令メモリ１００に出力される。
【００３９】
次に、図５（Ａ）の第２サイクルで、第１サイクルと同様に、命令メモリ１００の「０ｘ１０２」番地から命令バッファ５３０に読込まれた「基本命令２」は命令フェッチ・命令データ供給ユニット５００から、コアプロセッサ２００のデコーダ実行部７００に供給されるとともに、ＮＯＰ命令生成回路５５０で生成されたＮＯＰ命令をコプロセッサ＃１（３００）のデコード実行部７１０およびコプロセッサ＃２（４００）のデコード実行部７２０に供給される。また同様に加算回路５７０で生成されたアドレス値「０ｘ１０４」は、デコード実行部７００でデコードされ実行されている「基本命令１」が分岐命令でないので選択回路５８０を介してプログラムカウンタ５１０にセットされ、そのアドレス値が命令メモリ１００に出力される。
【００４０】
次に、図５（Ａ）の第３サイクルで、命令メモリ１００の「０ｘ１０４」番地から命令バッファ５３０に読込まれた「基本命令３」は命令フェッチ・命令データ供給ユニット５００から、コアプロセッサ２００のデコーダ実行部７００に供給されるとともに、ＮＯＰ命令生成回路５５０で生成されたＮＯＰ命令をコプロセッサ＃１（３００）のデコード実行部７１０およびコプロセッサ＃２（４００）のデコード実行部７２０に供給される。同時に、デコード実行部７００は第２サイクルで読込まれた「基本命令２」（ＪＳＲＶ）を、デコード（命令解釈）し実行する。
【００４１】
この「基本命令２」（ＪＳＲＶ）は、条件分岐命令でなく分岐が成立する分岐命令であるので、デコード実行部７００は、基本命令２が指定するレジスタ（通常コアプロセッサ２００の汎用レジスタ）に記憶された値（ここでは「０ｘ４０９」とする）を分岐先アドレスとし、分岐成立であることを分岐成立情報として命令フェッチ・命令データ供給ユニット５００に出力する。この時選択回路５８０は、分岐先アドレスとしてレジスタの値「０ｘ４０９」の最下位ビットを「０」としたアドレス値「０ｘ４０８」が入力され、選択回路５８０の選択制御入力には分岐成立が入力される。これにより選択回路５８０は、次の読出しアドレスとして分岐先アドレス「０ｘ４０８」をプログラムカウンタ５１０に出力する。分岐先アドレス「０ｘ４０８」は、命令バッファ５３０への「基本命令３」の読込み動作とともにプログラムカウンタ５１０に書込まれ、次に読込む命令のメモリアドレスとして命令メモリ１００に出力される。また、制御情報記憶部６００の動作モードの制御情報はコア動作モードから並列動作モードに変更されるとともに、制御情報記憶部６００の命令長制御情報にはレジスタに記憶された分岐先アドレスの最下位ビットの値（ここでは「１」）が書込まれる。
【００４２】
分岐が成立する分岐命令が実行されたので、第３サイクルで命令メモリ１００から読込まれデコード実行部７００に供給された「基本命令３」のパイプライン動作は、キャンセル（破棄）される。また、このサブルーチン分岐命令は、サブルーチンからの復帰の動作が正常に行えるよう、サブルーチン命令の実行において一般的に知られた動作であるプログラムカウンタ５１０のアドレス値などの保存動作を行う他に、サブルーチン分岐命令実行時の動作モードと命令長の情報の保存動作も行なう。サブルーチンからの復帰動作は復帰命令(ＲＥＴ)で行ない、この復帰命令は、プログラムカウンタ５１０に保存したアドレス値を設定するなどの一般的に知られた復帰動作の他に、制御情報記憶部６００に保存した動作モードと命令長の情報を設定する。このようにすることで、復帰動作後に実行するサブルーチン分岐命令の直後の命令は、サブルーチン分岐命令実行時の動作モード、命令長で実行される。
【００４３】
次に、第４サイクルで、命令フェッチ・命令データ供給ユニット５００は、第３サイクルで設定された命令長６４ビットの並列動作モードで動作して、命令メモリ１００の「０ｘ４０８」番地からの「拡張命令１」を命令バッファ５３０に読込む。この読込んだ「拡張命令１」の命令フォーマットは図２のＦ１ｂタイプであるので、命令データ供給ユニット５４０は、１６ビット長の「コア」フィールドに基づく命令を、コアプロセッサ２００のデコード実行部７００に供給するとともに、４８ビット長の「コプロ」フィールドに基づく命令を、コプロセッサ＃１（３００）のデコード実行部７１０およびコプロセッサ＃２（４００）のデコード実行部７２０に供給する。
【００４４】
ここで、前記命令データ供給ユニット５４０は、制御情報記憶部６００からの命令長と動作モードの制御情報に基づき、命令バッファ５３０から読込んだ命令を命令供給制御に必要な範囲でデコード（解釈）し、読込んだ命令の命令フィールドとＮＯＰ命令生成回路５５０の出力とを組み合わせて命令データを生成する機能があり、デコード回路および選択（セレクタ）回路から構成されている。
【００４５】
前記「拡張命令１」は、コプロセッサ＃１（３００）とコプロセッサ＃２（４００）にそれぞれ個別に命令を指定するタイプの命令のため、命令データ供給ユニット５４０は、「コプロ」フィールドの上位２４ビットにＮＯＰ命令生成回路５５０からの８ビットのＮＯＰ命令（全て「０」）を付加して、３２ビット長の命令データを生成してコプロセッサ＃１（３００）に供給する。同様に、「コプロ」フィールドの下位２４ビットに８ビットのＮＯＰ命令を付加して３２ビット長の命令データを生成してコプロセッサ＃２（４００）に供給する。
【００４６】
次に、第４サイクルで「拡張命令１」を読込む時、制御情報記憶部６００には次の動作モードが並列動作モードで命令長が６４ビット（８バイト）であることが記憶されている。これを受けて命令長・動作モード制御回路５６０は、加算回路５７０に「８」を加算する命令長情報を出力する。これにより、加算回路５７０は、プログラムカウンタ５１０からのアドレス値に「８」を加えたアドレス値「０ｘ４１０」を生成し、選択回路５８０を介してプログラムカウンタ５１０にセットする。そして、命令バッファ５３０への「拡張命令１」の読込み動作とともに、プログラムカウンタ５１０から次に読込む命令のメモリアドレスとして命令メモリ１００に出力される。
【００４７】
次に、第５サイクルで第４サイクルと同様に、命令フェッチ・命令データ供給ユニット５００が動作して命令メモリ１００の「０ｘ４１０」番地から「拡張命令２」が命令バッファ５３０に読込まれる。読込んだ「拡張命令２」の命令フォーマットが、図２のＦ２ｂタイプであるので、命令データ供給ユニット５４０は、ＮＯＰ命令生成回路５５０からの１６ビット長のＮＯＰ命令をコアプロセッサ２００のデコード実行部７００に供給するとともに、６４ビット長の「コプロ」フィールドに基づく２つの命令をそれぞれコプロセッサ＃１（３００）、＃２（４００）のデコード実行部７１０、７２０に供給する。
【００４８】
即ち「拡張命令２」は、コプロセッサ＃１（３００）とコプロセッサ＃２（４００）にそれぞれ個別に命令を指定するタイプの命令のため、命令データ供給ユニット５４０は、６４ビットの「コプロ」フィールドの上位３２ビットを命令データとしてコプロセッサ＃１（３００）に供給し、その下位３２ビットを命令データとしてコプロセッサ＃２（４００）に供給する。
【００４９】
次に、第５サイクルの「拡張命令２」を読込む時、制御情報記憶部６００には動作モードが並列動作モードで命令長が８バイトであることが記憶されている。これを受けて命令長・動作モード制御回路５６０は、加算回路５７０に「８」を加える命令長情報を出力する。これにより加算回路５７０は、プログラムカウンタ５１０のアドレス値に「８」を加えたアドレス値「０ｘ４１８」を生成し選択回路５８０を介してプログラムカウンタ５１０にセットする。そして、命令バッファ５３０への「拡張命令２」の読込み動作とともに、プログラムカウンタ５１０から次に読込む命令のメモリアドレスが命令メモリ１００に出力される。
【００５０】
次に、第６サイクルで第４サイクルと同様に、命令フェッチ命令・データ供給ユニット５００が動作して、命令メモリ１００の「０ｘ４１８」番地から「拡張命令３」が命令バッファ５３０に読込まれる。読込んだ「拡張命令３」の命令フォーマットが、図２のＦ１ｂタイプであるので、命令データ供給ユニット５４０は、１６ビット長の「コア」フィールドに基づく命令を、コアプロセッサ２００のデコード実行部７００に供給するとともに、４８ビット長の「コプロ」フィールドに基づく命令を、コプロセッサの＃１（３００）、＃２（４００）のデコード実行部７１０、７２０に供給する。
【００５１】
前記「拡張命令３」は、「拡張命令１」と同様に、コプロセッサ＃１（３００）とコプロセッサ＃２（４００）にそれぞれ個別に命令を指定するタイプの命令のため、命令データ供給ユニット５４０は、「コプロ」フィールドの上位２４ビットにＮＯＰ命令生成回路５５０からの８ビットのＮＯＰ命令パターンを付加して、３２ビット長の命令データを生成してコプロセッサ＃１（３００）に供給する。同様に、「コプロ」フィールドの下位２４ビットに８ビットのＮＯＰ命令パターンを付加して、３２ビット長の命令データを生成してコプロセッサ＃２（４００）に供給する。
【００５２】
上述では、並列動作モード時の各プロセッサへの命令供給状況を６４ビット長の「拡張命令」を用いた例で説明したが、プロセッサ１は、「基本命令２」の分岐命令ＪＳＲＶの分岐アドレスの最下位ビットを「０」として、３２ビット長の「拡張命令」を用いて並列動作プログラムを作成することができる。
【００５３】
３２ビット長の「拡張命令」が読込まれる時、命令フェッチ・命令データ供給ユニット５００は、図２に示すＦ１ａタイプまたはＦ２ａタイプから「コプロ」フィールドが１６ビット長または３２ビット長であると判断する。したがって、命令フェッチ・命令データ供給ユニット５００は、１６ビット長の時はＮＯＰ命令生成回路５５０からの１６ビットのＮＯＰ命令パターンを付加し、３２ビット長の時はその３２ビットの命令をコプロセッサの一方（例えば、コプロセッサ＃１（３００））に供給し、他方のコプロセッサ（例えば、コプロセッサ＃２（４００））にＮＯＰ命令生成回路５５０からの３２ビットのＮＯＰ命令を供給するように動作する。
【００５４】
上述の説明では、プロセッサ１の動作モードを変更する命令としてサブルーチン分岐命令を用いている。これは、以下のようなプログラムシーケンス列において、動作モード変更を分岐命令でない命令１で行わせると問題が生じるからである。
【００５５】
：        ：
命令１  基本命令
命令２  基本命令
命令３  拡張命令
命令４  拡張命令
：        ：
上記プログラムシーケンス例で、例えば５段のパイプライン構成のプロセッサでは、上述の説明と同様に第１サイクルで読込まれた「命令１」の基本命令が第２サイクルでデコードされ実行されて動作モード制御レジスタ書込まれるが、命令の読込み動作モードが切り替わるのは第３サイクルからとなる。第２サイクルで読込まれる「命令２」は、基本命令として読込まれ、続く第３サイクルにおいて「命令３」が拡張命令として読込まれて、第４サイクルに「命令３」がコプロセッサを含めてデコードされ並列動作が行われる。
【００５６】
しかしながら、パイプライン構成のプロセッサでは性能向上のため、パイプラインステージ数を増加させることが行われる。例えば、メモリアクセスに時間を要するシステムで用いられるプロセッサでは、パイプラインステージ構成を図５（Ａ）の５段構成から図５（Ｂ）に示すような７段構成としてサイクルタイムを短くして性能向上が図られる。
【００５７】
低速のメモリを用いるために、プロセッサのパイプライン構成を７段構成に変更すると、５段構成のパイプラインプロセッサとは異なり、第１サイクルで読込まれた動作モード変更命令の「命令１」がデコードされ実行されるのは第３サイクルであり、動作モードが変更されるのは、第４サイクルからとなる。このため、第３サイクルで読込まれる「命令３」は、拡張命令ではなく基本命令として読込まれることになり、オブジェクトレベルでの互換性が失われる問題が生じる。
【００５８】
上述した第１の実施例のように、動作モード変更をサブルーチン分岐命令で行わせるようにすることで、並列動作制御プログラム部分を関数のように記述することができて、プログラム記述の見通しが良くなるだけでなく、オブジェクトレベルでの互換性を維持することができる。
【００５９】
更にまた、以上のように命令が供給されて並列プロセッサが動作するため、並列プロセッサで無操作のプロセッサに対応したＮＯＰ命令を命令メモリに配置する必要がなく、さらに、複数のコプロセッサを同時並列に動作させて、高い処理性能が要求されるプログラムと一方のコプロセッサを動作させることで処理性能が達成できるプログラムが混在する時に、適切な命令長の拡張命令を選択してプログラムを記述できるので、命令メモリの利用効率の高い並列プロセッサを提供できる。
【００６０】
なお、上記説明では、分岐命令の分岐先アドレス中の最下位ビットで、分岐先の「拡張命令」の命令長を指定するとしたが、命令長を指定する分岐命令（例えば、３２ビット長の場合はＪＳＲＶ３２、６４ビット長の場合はＪＳＲＶ６４）を定義して、分岐先の「拡張命令」の命令長を指定するようにしてもよい。
【００６１】
更になお、上記説明では、６４ビット長の拡張命令のコプロフィールドを２つのコプロセッサに供給する時、「コプロ」フィールドを均等に分割して、不足部分はＮＯＰ命令パターンを付加してそれぞれ３２ビット長の命令を供給するとしたが、コプロセッサ＃１（３００）とコプロセッサ＃２（４００）の処理機能や命令指定内容などに応じて「コプロ」フィールドを異なる長さに分割して必要な長さの各コプロセッサ用の命令を生成して供給するようにしてもよい。また、３２ビット長の拡張命令の場合、一方のコプロセッサに動作指定命令を供給するとしたが、「コプロ」フィールドを分割して、２つのコプロセッサにそれぞれ命令として供給してもよく、更にまた２つのコプロセッサに個別の命令を供給するとしたが、２つのコプロセッサに同じ内容の命令を供給するようにしてもよい。
【実施例２】
【００６２】
次に、本発明の第２の実施例に係る並列プロセッサを、図７乃至図９を参照して説明する。図７は、第２の実施例に係るプロセッサ２のブロック図である。図８は、その命令フェッチ・命令供給ユニット５０１の構成を示すブロック図である。図９は、制御情報記憶部６０１に設定される命令供給パターン情報の構成を示す図である。
【００６３】
図８に示す第２の実施例に係る命令フェッチ・命令供給ユニット５０１においては、上記第１の実施例に係るプロセッサ１の命令フェッチ・命令データ供給ユニット５００と同一部分には同一符号を付し、詳細な説明を省略する。
【００６４】
この第２の実施例のプロセッサ２と命令フェッチ・命令データ供給ユニット５０１が、第１の実施例のプロセッサ１と命令フェッチ・命令データ供給ユニット５００と異なる点は、制御情報記憶部６０１に命令供給パターン情報を記憶しておき、制御情報記憶部６０１から命令フェッチ・命令データ供給ユニット５００に命令長、動作モード情報に加えて命令供給パターン情報が出力される構成としている点である。即ち、命令長・動作モード・命令供給パターン制御回路５６１から命令データ供給ユニット５４１に命令長、動作モード情報に加えて命令供給パターン情報が入力される。
【００６５】
このプロセッサ２では、並列動作モードとなる以前の命令で、制御情報記憶部６０１に命令供給パターン情報を設定する。命令供給パターン情報は、図９に示すようにコプロセッサ毎に２ビット長フィールドから構成される。並列動作モード時、命令データ供給ユニット５４１は、拡張命令の「コプロ」フィールドの値を命令供給パターンに従って命令として構成して、コプロセッサ＃１（３００）のデコード実行部７１０、およびコプロセッサ＃２（４００）のデコード実行部７２０に供給する。
【００６６】
例えば、各コプロセッサに対応した命令供給パターンが「００」である時は、ＮＯＰ命令生成回路５５０で生成されたＮＯＰ命令がそれぞれのコプロセッサのデコード実行部に供給される。また、各コプロセッサに対応した命令供給パターンが「０１」である時は、拡張命令の「コプロ」フィールドの分割された後半のパターンと不足のビット数のＮＯＰ命令パターンから構成される命令が各コプロセッサのデコード実行部に供給される。また、各コプロセッサに対応した命令供給パターンが「１０」である時は、拡張命令の「コプロ」フィールドの分割された前半のパターンと不足のビット数のＮＯＰ命令パターンから構成される命令が各コプロセッサのデコード実行部に供給される。また、各コプロセッサに対応した命令供給パターンが「１１」である時は、拡張命令の「コプロ」フィールド全体と不足のビット数のＮＯＰ命令パターンから構成される命令が各コプロセッサのデコード実行部に供給されるように命令データ供給ユニット５４１が制御される。
【００６７】
このように、コプロセッサ＃１（３００）およびコプロセッサ＃２（４００）への命令供給を柔軟に制御できるため、拡張命令は、内蔵したコプロセッサの個数分のコプロフィールドを設ける必要がなくなり、更にどちらか一方のコプロセッサを動作させて並列動作させるような場合は、コプロフィールドをそれぞれのコプロセッサ用の命令として使用することができて、命令メモリの利用効率の高い並列プロセッサを提供できる。
【００６８】
本発明は、上記実施例に限定されるものではなく、発明の要旨を逸脱しない範囲で、種々、変形して実施できることは勿論である。
【００６９】
例えば、無操作のプロセッサにＮＯＰ命令生成して供給するのではなく、命令実行を停止させる信号を供給するようにしてもよい。このようにすれば、命令メモリの利用効率が高いだけでなく、コプロセッサへの命令供給回路およびデコード回路などの動作を停止させることができて、低消費電力のプロセッサを提供できる。
【図面の簡単な説明】
【００７０】
【図１】本発明によるプロセッサの第１の実施例の構成を示すブロック図。
【図２】第１の実施例の拡張命令のフォーマットを示す図。
【図３】第１の実施例の拡張命令を含む命令列を示す図。
【図４】第１の実施例の命令メモリ上の命令の配置を示す図。
【図５】第１の実施例のパイプラインプロセッサのステージ構成を示す図。
【図６】本発明による第１の実施例の命令フェッチ・命令データ供給ユニットの構成を示すブロック図。
【図７】本発明によるプロセッサの第２の実施例の構成を示すブロック図。
【図８】本発明による第２の実施例の命令フェッチ・命令データ供給ユニットの構成を示すブロック図。
【図９】第２の実施例の制御情報記憶部６０１に設定される命令供給パターン情報の構成を示す図。
【符号の説明】
【００７１】
１、２  並列プロセッサ
１００  命令メモリ
２００  コアプロセッサ
３００  コプロセッサ＃１
４００  コプロセッサ＃２
５００、５０１  命令フェッチ・命令データ供給ユニット
５１０  プログラムカウンタ
５２０  メモリ要求制御ユニット
５３０  命令バッファ
５４０、５４１  命令データ供給ユニット
５５０  ＮＯＰ命令生成回路
５６０  命令長・動作モード制御回路
５６１  命令長・動作モード・命令供給パターン制御回路
５７０  加算回路
５８０  選択回路
６００、６０１  制御情報記憶部
７００、７１０、７２０  デコード実行部
【図１】
2007156557.tif 000003
【図２】
2007156557.tif 000004
【図３】
2007156557.tif 000005
【図４】
2007156557.tif 000006
【図５】
2007156557.tif 000007
【図６】
2007156557.tif 000008
【図７】
2007156557.tif 000009
【図８】
2007156557.tif 000010
【図９】
2007156557.tif 000011