(57)【要約】【課題】高度なアルゴリズムを容易にほぼ最小規模の回路で実現可能な高位合成マルチプロセッサシステムを提供すること【解決手段】  共有メモリを複数バンクに分割し、各メモリバンク２０９〜２１２に個別のプロセッサ２１７〜２２０を接続する。プロセッサは接続されたメモリバンクから命令コードとオペランドを受け取り、演算を実行した後、演算結果を隣接するプロセッサ要素に送付し、次の命令実行時のアキュムレータの値とする。演算実行するソフトウェアプログラムは固定されており、各プロセッサのうちソフトウェアプログラム中の各命令を処理するプロセッサは一意に特定されるようにし、各プロセッサは、マルチプロセッサシステムで実行可能な全ての命令のうち、自己が処理する命令を実行する機能を実装し、自己が処理しない命令を実行する機能を有さないようにし、未使用命令を削減した回路構成とする。【選択図】        図２
2020027591.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサを有するマルチプロセッサシステムにおいて、
それら各プロセッサには、対応するメモリバンクがそれぞれ割り当てられ、各プロセッサは、前記対応するメモリバンクからのメモリ出力信号線を介して、命令コード及びオペランドを即値として読み込んで、汎用レジスタを介することなくその命令コードに基づく処理を実行するようにし、
演算実行するソフトウェアプログラムは固定されており、前記各プロセッサのうち前記ソフトウェアプログラム中の各命令を処理するプロセッサは一意に特定されるようにし、
前記各プロセッサは、前記マルチプロセッサシステムで実行可能な全ての命令のうち、自己が処理する命令を実行する機能を実装し、自己が処理しない命令を実行する機能を有さないことを特徴とする高位合成マルチプロセッサシステム。
【請求項２】
前記マルチプロセッサシステムは、入力ポート操作命令及びまたは出力ポート操作命令を持ち、外部とのインターフェースとなる入力ポートからの信号入力及びまたは外部とのインターフェースとなる出力ポートへの信号出力を行う機能を備え、
前記各プロセッサのうち前記入力ポート操作命令を処理するプロセッサは、前記入力ポートに接続し、前記入力ポート操作命令を処理しないプロセッサは、前記入力ポートに接続しないように構成し、
前記各プロセッサのうち前記出力ポート操作命令を処理するプロセッサは、前記出力ポートに接続し、前記出力ポート操作命令を処理しないプロセッサは、前記出力ポートに接続しないように構成することを特徴とする請求項１に記載の高位合成マルチプロセッサシステム。
【請求項３】
前記各プロセッサのうちの一つのプロセッサのみが、前記出力ポート操作命令を処理するプロセッサとなり、その前記出力ポート操作命令を処理するプロセッサは、調停機能を介することなく前記出力ポートに接続することを特徴とする請求項２に記載の高位合成マルチプロセッサシステム。
【請求項４】
プログラム実行メモリ上のオペランドを初期化することで前記メモリバンクの初期化を行う初期化機能を備え、
前記初期化機能は、ソフトウェアプログラムにより実現されることを特徴とする請求項１から３のいずれか１項に記載の高位合成マルチプロセッサシステム。
【請求項５】
請求項１から４のいずれか１項に記載の高位合成マルチプロセッサシステムの前記各プロセッサが実行する前記ソフトウェアプログラムを構成する全ての命令について、前記各プロセッサのうちどのプロセッサで実行するかを検出し、前記プロセッサごとに、それぞれ処理する命令或いは処理しない命令を検出する検出機能と、
その検出機能の検出結果に基づき、前記各プロセッサのハードウェア構成を求め、出力する機能を備えたことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高位合成マルチプロセッサシステム等に関し、例えば、マルチプロセッサアーキテクチャ上のソフトウェア記述によるハードウェア設計法および、それを効率的な回路で実現するための高位合成に関する。特に、マルチプロセッサアーキテクチャを利用したＡＳＩＣまたはＳｏＣ設計法に関する。
【背景技術】
【０００２】
ＡＳＩＣやＳｏＣの開発において、従来はハードウェア記述言語による回路設計が広く用いられてきた。しかしハードウェア記述言語ではソフトウェア記述言語と比較すると、アルゴリズムの実装においてしばしば煩雑な順序回路の記述が必要となるため、開発の負荷が大きい。アルゴリズムの実装におけるこの負荷を軽減するため、ソフトウェア記述言語による回路設計を実現する、高位合成と呼ばれる技法が発達してきた。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
高位合成の最も基本的な構成として、ソフトウェアとして記述された処理内容をレジスタ転送レベルの論理に変換し、ハードウェア記述言語に変換した上で論理合成する方式が考えられる。この方式の問題は、ソフトウェアの記述量が増加するとともにハードウェア記述言語の記述量も増加し、その結果生成される回路規模も増大する点にある。
【０００４】
別の構成としてはマイクロプロセッサとソフトウェアの組み合わせが考えられる。この場合、演算器が命令実行ユニットとして共有され、ソフトウェアで選択される命令の組み合わせとして処理を実行するため、回路規模は命令セットにより定まる。
【０００５】
処理に必要な命令数が多く、必要なタイミングでの信号生成が困難となるような場合、マルチプロセッサによる並列処理で処理性能を補う必要がある。ただし、メモリアクセス調停やキャッシュメモリ等、実行タイミングの乱れを生じる機構を避ける必要がある。
【０００６】
並列処理実行のためにマルチプロセッサを利用した場合、命令実行ユニットがプロセッサ要素数分重複するために、再び回路規模の増大が問題となる。命令セットから未使用命令を削減することで回路規模を抑えることが可能となるが、従来の対称型マルチプロセッサ構成では共有メモリ上の命令が任意のプロセッサ要素で実行される可能性があり、その効果は限定的となる。
【０００７】
本発明は、ハードウェアをマルチプロセッサ上の固定したソフトウェアとして記述し、そのソフトウェアを実行するための必要最小限の機能のみを有するマルチプロセッサシステムの回路を出力することで、ハードウェア設計をソフトウェア設計に置き換えて簡易化し、かつ効率的な回路を実現し、上記の諸問題の課題を解決することを目的とする。上述した課題はそれぞれ独立したものとして記載しているものであり、本発明は、必ずしも記載した課題の全てを解決できる必要はなく、少なくとも一つの課題が解決できれば良い。またこの課題を解決するための構成についても単独で分割出願・補正等により権利取得する意思を有する。
【課題を解決するための手段】
【０００８】
（１）上述した課題を解決するために、本発明の高位合成マルチプロセッサシステムは、複数のプロセッサを有するマルチプロセッサシステムにおいて、それら各プロセッサには、対応するメモリバンクがそれぞれ割り当てられ、各プロセッサは、前記対応するメモリバンクからのメモリ出力信号線を介して、命令コード及びオペランドを即値として読み込んで、汎用レジスタを介することなくその命令コードに基づく処理を実行するようにし、演算実行するソフトウェアプログラムは固定されており、前記各プロセッサのうち前記ソフトウェアプログラム中の各命令を処理するプロセッサは一意に特定されるようにし、前記各プロセッサは、前記マルチプロセッサシステムで実行可能な全ての命令のうち、自己が処理する命令を実行する機能を実装し、自己が処理しない命令を実行する機能を有さないように構成した。
【０００９】
本発明によれば、高位合成マルチプロセッサシステムは、複数のプロセッサが与えられたソフトウェアプログラムの各命令を、適宜の順で実行する。よって、同一のソフトウェアプログラムを実行した場合、当該ソフトウェアプログラム中の所定のアドレス・ステップにある命令を実行するプロセッサは、常に同じになる。そして、本発明の高位合成マルチプロセッサシステムが実行するソフトウェアプログラムの内容は固定されているので、個々のプロセッサにおいて、高位合成マルチプロセッサシステムで実行可能な命令の内、未使用命令が特定される。そして、個々のマルチプロセッサを構成する個々のプロセッサは、自己が処理しない命令を実行する機能を備えず、削減を図る。つまり、マルチプロセッサ上のソフトウェアとしてハードウェアを記述し、未使用命令を削減したマルチプロセッサの回路を出力する高位合成により、高度なアルゴリズムを容易にほぼ最小規模の回路で実現可能となる。さらにコンパイラの開発で任意の高級言語での高位合成を可能とする。
【００１０】
回路規模の上限を命令セットとプロセッサ数により容易に見積もることが可能で、ソフトウェア記述量の増加により極端に回路規模が増大せず、最終的にソフトウェアを固定した上でメモリバンク毎に命令のカバレッジ状況に応じて不要回路を削減できることから、性能やリソースの不足による手戻りのないスケーラブルな設計が可能となる。
【００１１】
（２）前記マルチプロセッサシステムは、入力ポート操作命令及びまたは出力ポート操作命令を持ち、外部とのインターフェースとなる入力ポートからの信号入力及びまたは外部とのインターフェースとなる出力ポートへの信号出力を行う機能を備え、前記各プロセッサのうち前記入力ポート操作命令を処理するプロセッサは、前記入力ポートに接続し、前記入力ポート操作命令を処理しないプロセッサは、前記入力ポートに接続しないように構成し、前記各プロセッサのうち前記出力ポート操作命令を処理するプロセッサは、前記出力ポートに接続し、前記出力ポート操作命令を処理しないプロセッサは、前記出力ポートに接続しないように構成するとよい。
【００１２】
このようにすると、本発明の高位合成マルチプロセッサシステムは、入力ポートからの信号入力及びまたは出力ポートへの信号出力ができる。この入出力ポートが高位合成で出力された回路と外部とのインターフェースとなる。そして、入力ポート操作命令を処理しないプロセッサは、入力ポートに接続せず、出力ポート操作命令を処理しないプロセッサは出力ポートに接続しない構成としたので、回路構成等が簡略化されるので良い。
【００１３】
（３）前記各プロセッサのうちの一つのプロセッサのみが、前記出力ポート操作命令を処理するプロセッサとなり、その前記出力ポート操作命令を処理するプロセッサは、調停機能を介することなく前記出力ポートに接続する構成とすると良い。例えば、出力ポート操作命令を処理しないプロセッサは、上述したとおり当該出力ポート操作命令を実行する機能を備えずに機能・回路が削減される。そして、出力ポート操作命令を処理するプロセッサが複数あると、プロセッサ間での調停が必要となるが、上記のように、例えば、例えば１つのプロセッサからのみ行われるようになっていると、他のプロセッサでは出力機能を削除し、出力機能を残したプロセッサは、他のプロセッサとの調停を行うことなく出力できるので処理が簡易かつ高速になり、構成も調停機能が不要なので簡略化されて良い。
【００１４】
（４）プログラム実行メモリ上のオペランドを初期化することで前記メモリバンクの初期化を行う初期化機能を備え、前記初期化機能は、ソフトウェアプログラムにより実現されるようにするとよい。ソフトウェアプログラムから構成される初期化機能を実行することで、例えば電源投入時の初期化シーケンスがソフトウェア化され、回路規模を抑えることができる。
【００１５】
（５）（１）から（４）のいずれか１つに記載の高位合成マルチプロセッサシステムの前記各プロセッサが実行する前記ソフトウェアプログラムを構成する全ての命令について、前記各プロセッサのうちどのプロセッサで実行するかを検出し、前記プロセッサごとに、それぞれ処理する命令或いは処理しない命令を検出する検出機能と、その検出機能の検出結果に基づき、前記各プロセッサのハードウェア構成を求め、出力する機能を備えるシステムとするとよい。このようにすると、ソフトウェアプログラムを実行する複数の各プロセッサについて、未使用命令を削減したマルチプロセッサの回路を出力することができる。
【発明の効果】
【００１６】
本発明は、マルチプロセッサ上のソフトウェアとしてハードウェアを記述し、未使用命令を削減したマルチプロセッサの回路を出力する高位合成により、高度なアルゴリズムを容易にほぼ最小規模の回路で実現可能となる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施形態に係るプロトタイプ用マルチプロセッサシステム１００の構成を示すブロック図である。
【図２】本発明の実施形態に係る高位合成マルチプロセッサシステム２００の構成を示すブロック図である。
【図３】本発明の実施形態に係るメモリ出力データ３００、命令コード３０１及びオペランドＹ３０２のビット構成を示す図である。
【図４】本発明の実施形態に係るアキュムレータＡ４００、キャリーフラグＣ４０１、レジスタＸ４０２、プログラムカウンタＰＣ４０３及びロックカウンタＬＣ４０４のビット構成を示す図である。
【図５】本発明の実施形態に係る高位合成マルチプロセッサシステムにおけるメモリ領域毎のメモリ種別（書き換え可／不可）を示す図である。
【図６】本発明の実施形態に係る命令コードの割り当て例とその実行内容を示す図である。
【図７】本発明の実施形態に係る命令処理回路を示すブロック図である。
【図８】高位合成を行うシステムの一例を示す図である。
【図９】本発明の実施形態に係る命令コード（４ビット）の割り当て例とその実行内容を示す図である。
【図１０】演算ツリーを構成するコード列の例を示す図である。
【図１１】ＬＯＣＫ命令を利用したクリティカルセクションの実装例を示す図である。
【発明を実施するための形態】
【００１８】
以下、本発明の好適な実施形態について図面に基づき、詳細に説明する。なお、本発明は、これに限定されて解釈されるものではなく、本発明の範囲を逸脱しない限りにおいて、当業者の知識に基づいて、種々の変更、修正、改良を加え得るものである。
【００１９】
図１は、本発明に係る高位合成マルチプロセッサシステムの前提となるプロトタイプ用マルチプロセッサシステム１００の構成の一例を示すブロック図である。本発明の実施形態に係るプロトタイプ用マルチプロセッサシステム１００は、４個のプロセッサ１０９〜１１２を有する４プロセッサ構成である。各プロセッサ１０９〜１１２は、それぞれ対応するメモリバンク１０１〜１０４を備える。
【００２０】
各メモリバンク１０１〜１０４は共有メモリ全体のアドレス空間のうち下位２ビットが００、０１、１０、１１となる部分のイメージを保持し、各プロセッサ１０９〜１１２が同時に異なるメモリバンクにアクセスを行う分散共有メモリを構成する。
【００２１】
各プロセッサ１０９〜１１２とメモリバンク１０１〜１０４を一対一に対応しており、個々のプロセッサ１０９〜１１２は対応するメモリバンクにしかアクセスしないように構成している。これにより、各プロセッサ１０９〜１１２は、他のプロセッサの処理を気にすることなく対応するメモリバンクに読み書き可能となる。共有メモリをアドレスの下位ビットに応じて分割して各メモリバンク１０１〜１０４と形成し、各プロセッサ１０９〜１１２に割り当て１命令実行する毎に、次のプロセッサに制御を移す。各プロセッサの実行は、互いに独立で決して邪魔されないように構成する。
【００２２】
各プロセッサ１０９〜１１２は、対応するメモリバンク１０１〜１０４からメモリ出力信号１０５〜１０８を通して命令コード３０１及び１語長のオペランド３０２を同時に受け取り、対応する処理を実行する。図３は、メモリ出力データ３００のビット構成を示す。
【００２３】
プロセッサは、命令コード３０１で選択される命令に従い、オペランドＹ３０２及びアキュムレータＡ４００を入力として演算を実施し、結果をアキュムレータＡ４００、プログラムカウンタＰＣ４０３及びロックカウンタＬＣ４０４に反映する。
【００２４】
命令コード３０１の命令コード長は、例えば４ビット或いは８ビットとすると良く、例えば８ビットとした場合の命令セットの一例を示すと、図６のようになる。実行内容でプログラムカウンタＰＣ４０３に何も代入されていない場合、ＰＣ←ＰＣ＋１としてインクリメントされるものとする。
【００２５】
ニーモニックＰＵＴで表される命令により、メモリ上の任意の番地のオペランドＹ３０２を変更することができる。具体的には、プロセッサは、ＰＵＴ命令実行時のオペランドＹ３０２で指定されるメモリ番地の命令に対するオペランドＹ３０２を、命令実行時のアキュムレータＡ４００の値で置き換える。
【００２６】
ロックカウンタＬＣ４０４の値が０の場合、実行バンクはアンロック状態となり、ＬＯＣＫ命令にて値の設定が可能となる。その後設定した値のサイクル数だけロック状態となり、カウンタ値が１ずつカウントダウンして０となると再びアンロック状態となる。
【００２７】
実行バンクがロック状態でＬＯＣＫ命令を実行した場合、ロックカウンタＬＣ４０４の値は設定されず、同じ番地にジャンプしてスピンロックを実行する。
【００２８】
プロセッサ１０９〜１１２は、命令処理を実行後、スレッド状態をスレッド状態委譲信号１１３〜１１６を通して次のバンクに対応するプロセッサに委譲する。スレッド状態委譲信号１１３〜１１６は、プロセッサ同士を繋ぐ信号線を通して送られる。委譲先のプロセッサは、アキュムレータＡ４００及びプログラムカウンタＰＣ４０３が命令実行結果により更新する。ロックカウンタＬＣ４０４はバンク固有のため、次のバンクに委譲されない。
【００２９】
システム外部との通信は入出力ポートにて行う。システム入力ポート１２１の信号は各プロセッサの入力ポート１１７〜１２０に入力され、入出力ポート操作命令の結果アキュムレータＡ４００に反映される。
【００３０】
各プロセッサの出力ポート１２２〜１２５は入出力ポート操作命令実行時のみオペランド３０２、レジスタ４０２及びストローブ信号が出力され、入出力ポート操作命令実行時以外は０を出力する。
【００３１】
各プロセッサの出力ポート１２２〜１２５は論理和回路１２６により１つの出力ポート信号に纏められ、システム出力ポート１２７に接続される。この機構により、複数のプロセッサが同時に入出力ポート操作命令を実行しない限りにおいて、入出力ポート操作命令時のプロセッサの出力ポート１２２〜１２５と同一の信号がシステム出力ポート１２７に出力される。
【００３２】
図２は、本発明に係る高位合成マルチプロセッサシステム２００の好適な一実施形態を示すブロック図である。図５は、その高位合成マルチプロセッサシステムにおけるメモリ領域毎のメモリ種別（書き換え可／不可）を示す図である。高位合成マルチプロセッサシステム２００は、プロトタイプ用マルチプロセッサシステム１００と同様に、４個のプロセッサ２１７〜２２０を有する４プロセッサ構成である。各プロセッサ２１７〜２２０は、それぞれ対応するメモリバンクであるプログラム実行メモリ２０９〜２１２を備える。
【００３３】
各プロセッサ２１７〜２２０とプログラム実行メモリ２０９〜２１２を一対一に対応しており、個々のプロセッサ２１７〜２２０は対応するメモリバンクであるプログラム実行メモリ２０９〜２１２にしかアクセスしないように構成している。これにより、各プロセッサ２１７〜２２０は、他のプロセッサの処理を気にすることなく対応するプログラム実行メモリに読み書き可能となる。
【００３４】
本実施形態の高位合成マルチプロセッサシステム２００は、確定したメモリ上のソフトウェアが実行可能となる最小限の回路により構成される。図５に示す通り、メモリ上の命令コード３０１は書き換え不可となるため、各プロセッサはバンク毎にこれらの命令のみに限定した回路として出力される。
【００３５】
本実施形態の高位合成マルチプロセッサシステム２００は、一つのプロセッサがメモリ上の全ての命令を順番に実行するのではなく、４個のプロセッサのうちの一つのプロセッサがメモリの所定のアドレスにある一つの命令を実行すると、スレッド状態委譲信号を受けた次のプロセッサが次のアドレスにある一つの命名を実行するというように、各プロセッサがバケツリレーのように順番に実行する。換言すると、プログラムが、各プロセッサを順番に渡り歩きながら、一命令ずつ所定のプロセッサに処理してもらう。但し、プログラム中の各命令を実行するプロセッサは一意に特定されており、所定のアドレス・ステップの命令を実行するプロセッサが変わることはない。よって、各プロセッサにおいて、実行する演算命令は限定される。
【００３６】
図１と図２を比較すると明らかなように、プロトタイプ用マルチプロセッサシステム１００と高位合成マルチプロセッサシステム２００は、ともにプロセッサ１０９〜１１２と、プロセッサ２１７〜２２０を備えた４プロセッサ構成をとり、その部分はブロック図としては同じであるが、各プロセッサの内部構成・機能が異なる。具体的には、プロトタイプ用マルチプロセッサシステム１００に実装されるプロセッサ１０９〜１１２は、例えば図６に示す命令コードを全て実行する機能を備えるプロセッサであり、４つのプロセッサ１０９〜１１２は、同一構成となる。
【００３７】
これに対し、本実施形態の高位合成マルチプロセッサシステム２００に実装されるプロセッサ２１７〜２２０は、実行するプログラムに応じてそれぞれがカスタマイズされたものである。すなわち、上述したように本実施形態の高位合成マルチプロセッサシステム２００は、固定のソフトウェア（プログラム）を実行するものであり、各プロセッサは、例えばバケツリレー方式のように順番に命令を実行する。よって、当該プログラムに記述された同じアドレスの命令を実行するプロセッサは、一意に特定され、別のプロセッサが当該命令を実行することはない。従って、各プロセッサは、プログラム中の実行する命令が特定・限定されるため、自己が実行しない命令を実行する機能を削除した構成にする。例えば、掛け算命令を実行しないプロセッサは、かけ算の機能を削除する。
【００３８】
高位合成マルチプロセッサシステム２００をＡＳＩＣで実現する場合、図５で示すようにプログラム実行メモリ２０９〜２１２のオペランドＹ３０２はＲＡＭで構成されるため、電源投入時に不定となり得る。そのような場合、ＩＰＬＲＯＭ２０１〜２０４を利用してＲＡＭ領域の初期化を行う。
【００３９】
高位合成マルチプロセッサシステム２００をＦＰＧＡで実現し、コンフィギュレーション時にＲＡＭ内容の設定が可能な場合、あるいは他の手段でＲＡＭ領域の初期化が可能な場合は、ＩＰＬＲＯＭ２０１〜２０４及びＩＰＬＲＯＭ信号２０５〜２０８を省略することができる。
【００４０】
ＩＰＬＲＯＭ２０１〜２０４によるプログラム実行メモリ２０９〜２１２の初期化は、共有メモリ空間上にＩＰＬＲＯＭとプログラム実行メモリを配置して、ＩＰＬＲＯＭ上の命令コード実行によりプログラム実行メモリ上のオペランドＹ３０２を初期化することで行う。この構成により電源投入時の初期化シーケンスがソフトウェア化され、回路規模を抑えることができる。初期化処理をソフトウェアで実現できるため、初期化コードのメモリ領域が消費されるのみで、初期化終了後にメモリ領域を作業用として再利用することも可能である。
【００４１】
ＩＰＬＲＯＭ上の初期化シーケンスコードは、アキュムレータＡ４００を設定するＬＯＡＤ命令、プログラム実行メモリ領域のオペランドＹ３０２を設定するＰＵＴ命令、及び初期化シーケンス終了後プログラム実行メモリにジャンプする命令のみで構成可能である。
【００４２】
入出力ポート操作命令のバンク毎のカバレッジ状況により、高位合成結果におけるバス配線も最適化される。図１に示すプロトタイプ用マルチプロセッサシステム１００は、入力ポート１２１の信号が全てのプロセッサ１０９〜１１２の入力ポート１１７〜１２０に接続している。これに対し、例えば高位合成マルチプロセッサシステム２００でバンク０及びバンク３のみで入力ポートを読み取る場合、入力ポート信号２２７は当該バンクのプロセッサ２１７とプロセッサ２２０の入力ポート２２５，２２６にのみ接続し、プロセッサ２１８とプロセッサ２１９には接続しない構成をとる。
【００４３】
同様に、プロトタイプ用マルチプロセッサシステム１００は、全てのプロセッサ１０９〜１１２の出力ポート１２２〜１２５を論理和回路１２６に接続し、論理和回路１２６の出力が出力ポート１２７に接続している。これに対し、例えば高位合成マルチプロセッサシステム２００でバンク１のプロセッサ２１８のみが出力ポートを操作する場合、論理和回路を省略し、プロセッサ２１８の出力ポート２２８を外部出力ポート２２９に直接接続し、他のプロセッサを外部出力ポート２２９に接続しない構成を採る。
【００４４】
出力がどのプロセッサからも行われる構成の場合、プロセッサ間での調停が必要となるが、上記のように、例えば、１つのプロセッサからのみ行われるようになっていると、他のプロセッサでは出力機能を削除し、出力機能を残したプロセッサは、他のプロセッサとの調停もなく出力できるのでよい。
【００４５】
また、上述したようにマルチプロセッサアーキテクチャが実現される高位合成マルチプロセッサシステム２００において、例えば共有メモリはアドレスの下位ビットに応じて複数バンクに分割され、各メモリバンクには個別のプロセッサ要素が接続される。隣接したアドレスに対応するバンクのプロセッサ間で、レジスタ値及びプログラムカウンタ値を含むスレッド状態を移譲するためのバス配線が接続され、全体で環状の接続構造となる。全てのプロセッサ要素は同一サイクル内で同時に命令実行を行い、次のプロセッサ要素に実行結果を移譲する。この機構により、プロセッサ要素と同じ数のスレッドが並列に実行される。
【００４６】
プロセッサ要素は接続されたメモリバンクからプログラムカウンタで指示されるアドレスの命令コードを読出し、付属の演算装置にて命令コードに応じた演算を実行する。演算を実行したプロセッサ要素は接続されたプロセッサ要素に演算結果のレジスタ値及びプログラムカウンタ値を送出し、スレッド状態を委譲する。
【００４７】
制御を伴わない演算等の命令においてはプログラムカウンタ値がインクリメントされるため、接続先のプロセッサでもプログラムカウンタ値の下位ビットとバンク割り当てアドレスの下位ビットが再び一致する。
【００４８】
ジャンプ命令等によりプログラムカウンタ値の下位ビットとバンク割り当てアドレスの下位ビットが一致しなくなった場合、スレッドを休止状態として命令実行せずに以前の状態をそのまま次のプロセッサに委譲する。移譲の結果アドレスの下位ビットが一致した場合、スレッドは命令実行を再開する。
【００４９】
図７は、本発明の実施形態に用いられる命令処理回路の一例を示すブロック図である。係る命令処理回路が、例えばプロトタイプ用マルチプロセッサシステム１００のプロセッサ１０９〜１１２に実装される。そして、以下に説明するように、高位合成マルチプロセッサシステム２００のプロセッサ２１７〜２２０は、適宜の回路要素を省略或いは簡略化する。論理演算命令は、命令コードの下位４ビットの値に応じ、オペランドＹ３０２、レジスタＸ４０２、これらの論理積Ｘ＆Ｙ、及び全ビット反転の組み合わせにより、レジスタＸ４０２の値を更新する。論理演算命令において、キャリーフラグＣ４０１の値は保持される。
【００５０】
ＧＥＴ／ＤＡＴＡ命令においてはオペランドＹ３０２の値をレジスタＸ４０２に代入し、ＬＯＣＫ命令、ＨＡＬＴ命令、ＰＵＴ命令においてはレジスタＸ４０２の値を保持するが、これらの処理も論理演算命令と同一の回路で実施する。命令コード００〜７Ｆの命令においては、論理演算命令と同一の回路によりアキュムレータＡ４００の更新値を計算する。
【００５１】
論理演算命令オペランドＹ選択回路７０１は、命令コードが１６進法表記で下位の桁が０、２、４、６、８、Ａ、Ｃ、Ｅのいずれかである場合にオペランドＹ３０２の値を出力し、それ以外の場合は０を出力する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記で上位の桁が０〜７かつ、下位の桁が０、２、４、６、８、Ａ、Ｃ、Ｅのいずれかであるような命令コードが存在しない場合、論理演算命令オペランドＹ選択回路７０１は、常に０のみを出力する回路に簡略化される。
【００５２】
論理演算命令レジスタＸオペランドＹ論理積選択回路７０２は、命令コードが１６進法表記で下位の桁が２、３、６、７、Ａ、Ｂ、Ｅ、Ｆのいずれかである場合にレジスタＸ４０２とオペランドＹ３０２の論理積の値を出力し、それ以外の場合は０を出力する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記で上位の桁が０〜７かつ、下位の桁が２、３、６、７、Ａ、Ｂ、Ｅ、Ｆのいずれかであるような命令コードが存在しない場合、論理演算命令レジスタＸオペランドＹ論理積選択回路７０２は、常に０のみを出力する回路に簡略化される。
【００５３】
論理演算命令レジスタＸ選択回路７０３は、命令コードが１６進法表記で下位の桁が４、５、６、７、Ｃ、Ｄ、Ｅ、Ｆのいずれかである場合にレジスタＸ４０２の値を出力し、それ以外の場合は０を出力する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記で上位の桁が０〜７かつ、下位の桁が４、５、６、７、Ｃ、Ｄ、Ｅ、Ｆのいずれかであるような命令コードが存在しない場合、論理演算命令レジスタＸ選択回路７０３は、常に０のみを出力する回路に簡略化される。
【００５４】
論理演算命令ビット反転選択回路７０４は、命令コードが１６進法表記で下位の桁が８〜Ｆである場合に−１を出力し、それ以外の場合は０を出力する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記で上位の桁が０〜７かつ、下位の桁が８〜Ｆであるような命令コードが存在しない場合、論理演算命令ビット反転選択回路７０４は、常に０のみを出力する回路に簡略化される。
【００５５】
論理命令排他的論理和出力回路７０５は、論理演算命令オペランドＹ選択回路７０１、論理演算命令レジスタＸオペランドＹ論理積選択回路７０２、論理演算命令レジスタＸ選択回路７０３、論理演算命令ビット反転選択回路７０４の出力の排他的論理和を計算し、キャリーフラグＣ４０１を付加して論理演算命令によるアキュムレータＡ４００の更新値を出力する。
【００５６】
加減算命令選択回路７０６は、命令コードが１６進法表記でＣ０〜ＣＦの場合に加減算命令によるアキュムレータＡ４００の更新値を出力し、それ以外の場合は論理命令排他的論理和出力回路７０５の出力を通過する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記でＣ０〜ＣＦの命令コードが存在しない場合、加減算命令選択回路７０６は、常に論理命令排他的論理和出力回路７０５の出力を通過する回路に簡略化される。
【００５７】
乗算／シフト命令選択回路７０７は、命令コードが１６進法表記でＤ０〜ＤＦの場合に乗算／シフト命令によるアキュムレータＡ４００の更新値を出力し、それ以外の場合は加減算命令選択回路７０６の出力を通過する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記でＤ０〜ＤＦの命令コードが存在しない場合、乗算／シフト命令選択回路７０７は、常に加減算命令選択回路７０６の出力を通過する回路に簡略化される。
【００５８】
高位合成マルチプロセッサシステム２００において、同一バンクのメモリ内に乗算命令の命令コードが存在せず、シフト命令の命令コードが存在する場合、乗算／シフト命令選択回路７０７内の演算処理を、より軽量なバレルシフタによる構成に置き換える。同一バンクのメモリ内に乗算命令とシフト命令の命令コードが共に存在する場合、シフト命令の演算は乗算回路を利用した構成とする。
【００５９】
入出力ポート命令選択回路７０８は、命令コードが１６進法表記でＥ０〜ＦＦの場合に入出力ポート命令によるアキュムレータＡ４００の更新値およびリトライ信号を出力し、それ以外の場合は乗算／シフト命令選択回路７０７の出力を通過し、リトライ信号として０を出力する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記でＥ０〜ＦＦの命令コードが存在しない場合、入出力ポート命令選択回路７０８は、常に乗算／シフト命令選択回路７０７の出力を通過し、リトライ信号として０を出力する回路に簡略化される。
【００６０】
入出力ポート命令選択回路７０８は、命令コードの下位ビットでポートを切り替える構成の場合、ポート毎に選択回路が細分される。高位合成マルチプロセッサシステム２００においては、ポート毎に同一バンク内のメモリで命令コードの存在が判定され、不存在の場合、同様に回路が簡略化される。
【００６１】
ジャンプ命令時アキュムレータ保持選択回路７０９は、命令コードが１６進法表記で８０〜ＢＦの場合にアキュムレータＡ４００の旧値を出力し、それ以外の場合は入出力ポート命令選択回路７０８の出力を通過する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記で８０〜ＢＦの命令コードが存在しない場合、ジャンプ命令時アキュムレータ保持選択回路７０９は、常に入出力ポート命令選択回路７０８の出力を通過する回路に簡略化される。
【００６２】
ジャンプ命令時アキュムレータ保持選択回路７０９の出力は、命令実行後アキュムレータ出力７１０として隣接するバンクのプロセッサ要素に接続される。
【００６３】
プログラムカウンタインクリメント回路７１１は、プログラムカウンタＰＣ４０３に１を加算した値を計算する。
【００６４】
ＬＯＣＫ命令処理回路７１４は、命令コードが１６進法表記で２０〜２Ｆの場合にＬＯＣＫ命令の処理を実行し、ロック取得失敗時にリトライ信号１を出力する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記で２０〜２Ｆの命令コードが存在しない場合、ＬＯＣＫ命令処理回路７１４は、常にリトライ信号０を出力する回路に簡略化される。
【００６５】
ＨＡＬＴ命令処理回路７１５は、命令コードが１６進法表記で３０〜３Ｆの場合にＨＡＬＴ命令の処理を実行し、リトライ信号１を出力する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記で３０〜３Ｆの命令コードが存在しない場合、ＨＡＬＴ命令処理回路７１５は、常にリトライ信号０を出力する回路に簡略化される。
【００６６】
ＰＵＴ命令処理回路７１６は、命令コードが１６進法表記で４０〜７Ｆの場合にＰＵＴ命令の処理を実行し、ライトバック衝突時にリトライ信号１を出力する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記で４０〜７Ｆの命令コードが存在しない場合、ＰＵＴ命令処理回路７１６は、常にリトライ信号０を出力する回路に簡略化される。
【００６７】
リトライ信号論理和回路７１３は、ＬＯＣＫ命令処理回路７１４、ＨＡＬＴ命令処理回路７１５、ＰＵＴ命令処理回路７１６、入出力ポート命令選択回路７０８の出力の論理和を計算し、リトライ信号処理選択回路７１２におけるリトライ信号入力をする。
【００６８】
リトライ信号処理選択回路７１２は、リトライ信号論理和回路７１３出力のリトライ信号が１の場合、プログラムカウンタＰＣ４０３の旧値を出力し、それ以外の場合、プログラムカウンタインクリメント回路７１１の出力を通過する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記で２０〜７ＦもしくはＦ０〜ＦＦの命令コードが存在しない場合、リトライ信号論理和回路７１３を含むリトライ信号処理選択回路７１２は、プログラムカウンタインクリメント回路７１１の出力を通過する回路に簡略化される。
【００６９】
ジャンプ命令処理回路７１７は、命令コードが１６進法表記で８０〜ＢＦの場合にジャンプ条件を判定し、条件成立時はオペランドＹ３０２の値を出力し、それ以外の場合はリトライ信号処理選択回路７１２の出力を通過する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記で８０〜ＢＦの命令コードが存在しない場合、ジャンプ命令処理回路７１７は、リトライ信号処理選択回路７１２の出力を通過する回路に簡略化される。
【００７０】
ＧＥＴ／ＤＡＴＡ命令時ジャンプ先選択回路７１８は、命令コードが１６進法表記で００〜０Ｆの場合にレジスタＸ４０２の値を出力し、それ以外の場合はジャンプ命令処理回路７１７の出力を通過する。高位合成マルチプロセッサシステム２００においては、同一バンクのメモリ内に１６進法表記で００〜０Ｆの命令コードが存在しない場合、ＧＥＴ／ＤＡＴＡ命令時ジャンプ先選択回路７１８は、ジャンプ命令処理回路７１７の出力を通過する回路に簡略化される。
【００７１】
ＧＥＴ／ＤＡＴＡ命令時ジャンプ先選択回路７１８の出力は、命令実行後プログラムカウンタ出力７１９として隣接するバンクのプロセッサ要素に接続される。
【００７２】
上述した高位合成マルチプロセッサシステム２００を構成する個々のプロセッサ２１７〜２２０のハードウェア構成は、例えば、図８に示す処理装置８００により作成する。高位合成マルチプロセッサシステム２００で実行するプログラムを処理装置８００に与える。
【００７３】
処理装置８００は、入力されたプログラムを上から順に、各ステップの記述内容を確認し、都度、以下の処理を実行する。
【００７４】
（１）処理装置８００は、プログラムのステップ番号から、そのステップの命令を実行するプロセッサを特定する。
【００７５】
（２）処理装置８００は、処理対象のステップの命令コードを抽出し、抽出した１６進法表記から、（１）で特定したプロセッサに関連付けられた実行命令リストの所定の実行命令のフラグを立てる。すなわち、処理装置８００は、例えば、プロセッサ毎に、図６，図７に示す実行可能なすべての実行命令の項目と、フラグ項目を関連付けた実行命令リストを記憶保持する。この実行命令のフラグ項目の初期値は、全て０にする。そして、上記の処理を実行し、処理装置は、対応する実行命令のフラグ項目を立てる（１にする）。
【００７６】
例えば、処理対象のステップ番号からプロセッサ２１７〜２２０（バンク０〜３）のどれが実行するかを特定する。例えば、プロセッサ２１７（バンク０）が実行するステップの場合、処理装置８００は、バンク０のプロセッサの関連付けられた実行命令リストにおける所望の実行命令のフラグを立てる。所望の実行命令は、例えば、命令コードが１６進法表記でＤ０〜ＤＦの場合、「乗算／シフト命令」であり、命令コードが１６進法表記でＣ０〜ＣＦの場合、「加減算命令」である。
【００７７】
（３）上記の（１），（２）の処理を繰り返しながら、最終ステップまで来ると、各プロセッサで実行する命令が確定する。処理装置８００は、プロセッサ毎に、「実行する命令」及びまたは「実行しない命令」を特定する情報（ハードウェア構成）を作成し、出力する。このハードウェア構成の出力機能は、例えば、それらの情報を記載したものをプリントアウトしたり表示したりする機能等がある。
【００７８】
上述した実施形態では、プロトタイプ用マルチプロセッサシステム１００並びにそれに基づいて生成される高位合成マルチプロセッサシステム２００が実行する命令は、コード長を８ビットとし、図６に示す内容とした。本発明はこれに限ることはなく、例えば、命令コード長が、４ビットその他のビット数としても良く、４ビットとした場合の命令セットの一例は、図９のようになる。この例示した４ビットの命令セットを用いたマルチプロセッサシステムについて説明すると、以下の通りである。
【００７９】
図４において示されるように、アキュムレータ４００は１語長のレジスタ４０２及びその上位のキャリーフラグ４０１で構成される。論理演算はレジスタ４０２に対してのみ実行され、加減算はキャリーフラグを含めたアキュムレータ全体について実行される。キャリーフラグは特殊命令実行時の結果通知にも利用され、条件ジャンプ命令実行時の条件としても利用される。
【００８０】
演算命令においてはアキュムレータとオペランドの間で２項演算が実行され、演算結果がアキュムレータ信号を通して次のプロセッサに送出され、新たなアキュムレータの値として反映される。
【００８１】
命令コード３０１と同時にオペランド３０２が即値としてプロセッサに読み込まれるため、レジスタファイルアクセスのためのオーバーヘッド無しに即座に命令実行が可能である。即値とレジスタアクセスの区別が不要であるため、必要となる命令コード数は著しく減少し、本形態のように４ビット程度で基本的な命令はカバー可能である（図９参照）。
【００８２】
メモリ上のオペランド３０２を読み込み前に予め書き換えておくことにより、任意のオペランドを汎用レジスタとして使用することが可能となる。この機能は、オペランド３０２で指定されたアドレスのメモリに格納されたオペランド３０２を、レジスタ４０２の値に書き換えるランダムアクセス書き込みを実行するＰＵＴ命令を実装することで実現可能である。この命令により、任意の演算ツリーを構成することが可能となる。図１０は（Ａ−Ｂ）＋（Ｃ−Ｄ）を計算するコード列の例である。
【００８３】
ランダムアクセス書き込みは、同一バンクに対するメモリ読み込みまで遅延しても、スレッド内に於けるメモリ一貫性を損なうことはない。そのため書き込み信号としてバンク０書き込み信号１０５，２１３、バンク１書き込み信号１０６，２１４、バンク２書き込み信号１０７，２１５、バンク３書き込み信号１０８，２１６が、書き込みアドレス、データ及びイネーブル信号を保持する。書き込み信号はプロセッサ内部状態と並行してプロセッサ間を移動し、対象バンク到着時にバンクメモリへのライトバック処理を実行する。
【００８４】
命令及びオペランドのフェッチとライトバックが同一のアドレスに対して実行された場合、ライトバックの際に書き込まれたデータが即座に命令及びオペランドとして読み込まれるものとする。この構成により、命令の直後の番地への書き込みも次のフェッチの際に反映され、問題なく実行される。ＦＰＧＡ内部のデュアルポートメモリを利用する場合、異なるポートからの同一アドレスに対する同時読み書きの結果が不定となるものがあるが、メモリ周辺にバイパス回路を実装することで、この問題を回避することが可能である。
【００８５】
ランダムアクセス書き込み命令実行時、対象バンクの書き込み信号入力が既にイネーブルである場合、書き込み命令の実行を一旦中止し、同一アドレスへのジャンプを実行して書き込み命令の再試行を行う。ジャンプ命令の回転待ちの際にもライトバックが実行されるため、再試行時には全てのライトバックが実行済みで書き込みの衝突が起きることはない。書き込みの再試行は４命令分のペナルティとなるため、コンパイル時に同一バンクへの連続した書き込みを避けることと、直後にライトバックが実行されるバンクへの書き込みを優先して配置することで、この書き込みの再試行を防ぐことができる。
【００８６】
同一アドレスへの書き込みを故意に連続して実行することで、書き込みの衝突による回転待ちが発生し、同一スレッドの全てのライトバックが実行され、他のスレッドに対するメモリ内容が確定する。これをスレッド間通信に於けるメモリバリアとして利用することができる。
【００８７】
ランダムアクセス書き込みの際、アドレスを指定するオペランド３０２の上位４ビットを命令コードの書き込みに利用することが可能である。具体的には、メモリ空間のアドレスが（語長−４）ビット以内で表現可能な場合、ライトバック時にオペランドの上位４ビットの値を命令コードメモリ３０１に同時に書き込みを行う。コンパイル時に書き込み先アドレスの命令コードは既に決定しており、命令コード付きアドレスは実行前に確定するため実行中のオーバーヘッドはない。これはスレッド間通信で命令コードとオペランドをアトミックに同時書き換えする際に有効である。
【００８８】
ランダムアクセス書き込みに於けるライトバックの遅延により、通常は異なるスレッド間でメモリの一貫性が保持されないが、ＬＯＣＫ命令の利用により安全なスレッド間通信を実現することができる。ＬＯＣＫ命令は命令を実行するプロセッサに割り当てられたミューテクスを操作する命令で、プロセッサが既にロック状態にある場合には同一番地へのジャンプを実行することでスピンロックを構成し、ロック成功時にはプロセッサがロック状態に移行し、ＵＮＬＯＣＫ命令実行までロック状態を保持する。プロセッサのロック状態が影響するのはＬＯＣＫ命令に対してのみであり、他の命令実行には影響しない。
【００８９】
ＵＮＬＯＣＫ命令はＬＯＣＫ命令と同じ命令コードであるが、オペランドの値により両者は区別される。ＬＯＣＫ命令のオペランドには０を指定し、命令を実行したプロセッサバンクのミューテクスのロックを実行する。ＵＮＬＯＣＫ命令のオペランドは、下位４ビットでアンロックするプロセッサのバンクを指定する。ＵＮＬＯＣＫ命令は任意のプロセッサバンクで実行が可能であり、同時に実行されたＵＮＬＯＣＫ命令は、パラメータが全て論理和された上でそれぞれのプロセッサバンクにアンロックを通知する。この通知はロック解除信号バスを通して行われる。
【００９０】
ＬＯＣＫ命令によるロックはプロセッサ毎に割り当てられる粒度の粗いミューテクスであり、ある程度長期のロックが想定されるクリティカルセクション等の応用に於いては、状態遷移時のみの短期ロックに利用することが望ましい。ＬＯＣＫ命令をオペランドで指定されるクロック数期間のみの有期のロックに限定することで、ＵＮＬＯＣＫ命令を省略することができる。図１１は、ＬＯＣＫ命令を利用したスピンロックによるクリティカルセクションの構成例である。
【００９１】
新規スレッドの生成はＦＯＲＫ命令により実行される。スレッド生成時、プロセッサ内の起動待ち行列に新規スレッドの起動アドレス及び初期アキュムレータ値を登録するが、待ち行列が満杯の場合スレッド生成は失敗となる。スレッド生成の成否はキャリーフラグにて通知されるため、ソフトウェアによるリトライ及び待ち行列の構成が可能である。この場合、ハードウェア待ち行列の長さを１にすることで回路規模の削減が可能である。
【００９２】
プロセッサが停止状態で起動待ち行列が空でない場合、新規のスレッドが生成される。具体的には、待ち行列先頭の起動アドレス及び初期アキュムレータ値がプロセッサ内のプログラムカウンタ及びアキュムレータに代入され、プロセッサが実行状態に移行する。
【００９３】
電源投入時にプロセッサ数と同数のスレッドを全て起動状態とする構成も考えられる。この構成の場合、クリティカルセクションと同様の機構によりソフトウェアでスレッドプールが実現できるため、ＦＯＲＫ命令を省略することができる。スレッドの動的生成が不要な場合、ＨＡＬＴ命令等により、余剰のスレッドを休眠状態にすることができる。
【００９４】
配列や構造体、スタック等のデータ構造を利用する場合、メモリに対するランダムアクセス読み出しの処理が必要となる。この処理はＧＥＴ命令及びＤＡＴＡ命令により実現できるが、これらの命令の実行内容は同じであり、命令コードも同一のものを使用する。ＧＥＴ命令はレジスタＸで指定された番地へのジャンプ及びオペランドＹのレジスタＸへの代入を行う。レジスタＸで指定された番地にＤＡＴＡ命令がある場合、ＤＡＴＡ命令はＧＥＴ命令と同様にレジスタＸで指定された番地へのジャンプ及びオペランドＹのレジスタＸへの代入を行う。ＤＡＴＡ命令実行時のレジスタＸの値はＧＥＴ命令に於けるオペランドＹの値であるため、全体としてＧＥＴ命令はレジスタＸで指定された番地にあるＤＡＴＡ命令のオペランドＹの値をレジスタＸに代入し、ＧＥＴ命令のオペランドＹで指定される番地にジャンプする命令となる。
【００９５】
データ専用メモリやメモリマップドＩ／Ｏに関しては、読み出し時に命令コードとしてＤＡＴＡ命令を補うことにより利用が可能である。特に、メモリや周辺回路を特定のプロセッサにのみ接続することで、同時アクセス調停の回路を省略することが可能となる。
【００９６】
係る４ビットの命令コードに対応するマルチプロセッサシステムにおいても、高位合成マルチプロセッサシステム２００で実行するプログラムを固定することで、各プロセッサが実行するプログラム中のステップが一意に特定される。従って、プロトタイプ用マルチプロセッサシステム１００のプロセッサは図９等に示す命令の全てを実行する機能を備えるが、高位合成マルチプロセッサシステム２００の各プロセッサは、プロトタイプのプロセッサの機能から、自己が実行しない命令を実行する機能を削除した構成にする。
【００９７】
上述したように、命令コードのビット数にかかわらず、プロトタイプ用マルチプロセッサシステム１００に比べて高位合成マルチプロセッサシステム２００は簡易な構成をとることができる。上述した４ビット構成は、限られた命令であり、例えば掛け算命令などもない。よって、元々命令数が少なく、削減効果が出にくいこともあるが、先に述べた８ビットからなる命令の場合は、命令の数も多く、削減効果が期待できるので、より好ましい。
【００９８】
また、４ビット構成は、限られた命令であり、掛け算命令その他の命令コードを増やすために８ビットにすると、各プロセッサで実行する機能も多くなる。そのため、プロトタイプ用マルチプロセッサシステム１００のように各プロセッサが夫々すべての命令に対応する機能を備えると、回路規模が大きくなる。そして、使われない命令の機能を残すのは、単に回路規模を大きくするだけでデメリットしかない。そこで、プロセッサが「実施する」／「実施しない」の命令を特定し、実行しない命令の実行削除し、必要最小限のコンパクトな回路を実現するとよい。さらに具体的な図示は省略するが、命令レコードに「浮動小数点演算」を備えたものの場合、削減する効果がさらに高まる。
【００９９】
以上、本発明の様々な側面を実施形態並びに変形例を用いて説明してきたが、これらの実施形態や説明は、本発明の範囲を制限する目的でなされたものではなく、本発明の理解に資するために提供されたものであることを付言しておく。本発明の範囲は、明細書に明示的に説明された構成や製法に限定されるものではなく、本明細書に開示される本発明の様々な側面の組み合わせをも、その範囲に含むものである。本発明のうち、特許を受けようとする構成を、添付の特許請求の範囲に特定したが、現在の処は特許請求の範囲に特定されていない構成であっても、本明細書に開示される構成を、将来的に特許請求する可能性があることを、念のために申し述べる。
【符号の説明】
【０１００】
１００  プロトタイプ用マルチプロセッサシステム
１０１〜１０４  メモリ（バンク０〜３）
１０５〜１０８  メモリ入出力信号
１０９〜１１２  プロセッサ（バンク０〜３）
１１３〜１１６  スレッド状態委譲信号
１１７〜１２０  入力ポート（バンク０〜３）
１２１  入力ポート（システム）
１２２〜１２５  出力ポート（バンク０〜３）
１２６  論理和回路
１２７  出力ポート（システム）
２００  高位合成マルチプロセッサシステム
２０１〜２０４  ＩＰＬＲＯＭ（バンク０〜３）
２０５〜２０８  ＩＰＬＲＯＭ信号
２０９〜２１２  メモリ（バンク０〜３）
２１３〜２１６  メモリ入出力信号
２１７〜２２０  プロセッサ（バンク０〜３）
２２１〜２２４  スレッド状態委譲信号
２２５〜２２６  入力ポート（バンク０，３）
２２７  入力ポート（システム）
２２８  出力ポート（バンク１）
２２９  出力ポート（システム）
３００  メモリ出力データ
３０１  命令コード
３０２  オペランドＹ
４００  アキュムレータＡ
４０１  キャリーフラグＣ
４０２  レジスタＸ
４０３  プログラムカウンタＰＣ
４０４  ロックカウンタＬＣ
７００  命令処理回路ブロック
７０１  論理演算命令オペランドＹ選択回路
７０２  論理演算命令レジスタＸオペランドＹ論理積選択回路
７０３  論理演算命令レジスタＸ選択回路
７０４  論理演算命令ビット反転選択回路
７０５  論理演算命令排他的論理和出力回路
７０６  加減算命令選択回路
７０７  乗算／シフト命令選択回路
７０８  入出力ポート命令選択回路
７０９  ジャンプ命令時アキュムレータ保持選択回路
７１０  命令実行後アキュムレータ出力
７１１  プログラムカウンタインクリメント回路
７１２  リトライ信号処理選択回路
７１３  リトライ信号生成論理和回路
７１４  ＬＯＣＫ命令処理回路
７１５  ＨＡＬＴ命令処理回路
７１６  ＰＵＴ命令処理回路
７１７  ジャンプ命令処理回路
７１８  ＧＥＴ／ＤＡＴＡ命令時ジャンプ先選択回路
７１９  命令実行後プログラムカウンタ出力
【図１】
2020027591.tif 000003
【図２】
2020027591.tif 000004
【図３】
2020027591.tif 000005
【図４】
2020027591.tif 000006
【図５】
2020027591.tif 000007
【図６】
2020027591.tif 000008
【図７】
2020027591.tif 000009
【図８】
2020027591.tif 000010
【図９】
2020027591.tif 000011
【図１０】
2020027591.tif 000012
【図１１】
2020027591.tif 000013