(57)【要約】  自己同期型の複数の処理ユニットを有するシステムを提供する。複数の処理ユニットの１つの処理ユニットは、複数の入力側の処理ユニットからそれぞれ供給される複数の入力信号を受信するための入力側の信号交換部と、複数の入力信号に基づき、出力信号を生成するための論理部と、出力信号を、少なくとも１つの出力側の処理ユニットに送信するための出力側の信号交換部と、入力側の信号交換部が受信した入力信号により、出力信号の生成に不用となる未受信の入力信号を定める第１の判断機能と、出力側の信号交換部が受信した、出力信号の不用を示す不用通知により、受信不用となる未受信の入力信号を定める第２の判断機能とを備えている。さらに、入力側の信号交換部は、第１の判断機能または第２の判断機能により受信不用と判断された未受信の入力信号を供給する入力側の処理ユニットに宛てて不用通知を送信する。
2007037384.tif 000002
【特許請求の範囲】
【請求項１】
自己同期型の複数の処理ユニットを有するシステムであって、
前記複数の処理ユニットの１つの処理ユニットは、
複数の入力側の処理ユニットからそれぞれ供給される複数の入力信号を受信するための入力側の信号交換部と、
前記複数の入力信号に基づき、出力信号を生成するための論理部と、
前記出力信号を、少なくとも１つの出力側の処理ユニットに送信するための出力側の信号交換部と、
前記入力側の信号交換部が受信した入力信号により、出力信号の生成に不用となる未受信の入力信号を定める第１の判断機能と、
前記出力側の信号交換部が受信した、出力信号の不用を示す不用通知により、受信不用となる未受信の入力信号を定める第２の判断機能とを備えており、さらに、
前記入力側の信号交換部は、前記第１の判断機能または前記第２の判断機能により受信不用と判断された未受信の入力信号を供給する入力側の処理ユニットに宛てて前記不用通知を送信する、システム。
【請求項２】
請求項１において、前記出力側の信号交換部は、出力信号を、複数の出力側の処理ユニットに送信し、
前記第２の判断機能は、前記複数の出力側の処理ユニットの全てから前記不用通知を受信したときに、受信不用となる未受信の入力信号を定める、システム。
【請求項３】
請求項１において、前記処理ユニットは、次のａ１ないしａ４のいずれかの処理により信号の転送を確認するハンドシェイク機能を備えている、システム。
ａ１  入力信号を受信すると、その入力信号の供給元の入力側の処理ユニットに宛てて確認信号を送信する。
ａ２  未受信の入力信号の供給元の、入力側の処理ユニットに宛てて前記不用通知として前記確認信号を送信し、前記確認信号の送信先の、入力側の処理ユニットからダミーの入力信号を受信する。
ａ３  出力信号を送信し、前記出力信号の送信先の、出力側の処理ユニットから前記確認信号を受信する。
ａ４  出力信号が未送信のときに前記確認信号を受信すると前記不用通知として認識し、ダミーの出力信号を送信する。
【請求項４】
請求項１において、前記出力側の信号交換部は、前記論理部により出力信号が生成される都度、その出力信号をパルス信号で送信する、システム。
【請求項５】
請求項１において、前記出力側の信号交換部は、出力信号を、３状態に変位する信号で送信する、システム。
【請求項６】
請求項５において、前記３状態は、中立と、前記中立を含まない２つの状態とを含む、システム。
【請求項７】
請求項１において、前記処理ユニットは、未受信の入力信号により処理できない入力信号を記憶するためのメモリを、さらに備えている、システム。
【請求項８】
請求項１において、前記処理ユニットは、受信した信号のうち、処理できない信号をイベントトークンとして記憶するためのメモリを、さらに備えている、システム。
【請求項９】
請求項１において、前記論理部は、出力信号を生成する論理を変更する機能を備えている、システム。
【請求項１０】
請求項１において、前記入力側の信号交換部は、入力側の処理ユニットを変更する機能を備えており、
前記出力側の信号交換部は、出力側の処理ユニットを変更する機能を備えている、システム。
【請求項１１】
請求項１において、前記複数の処理ユニットの間の信号の交換を可能とする通信システムであって、前記複数の処理ユニットの接続を再構成可能な通信システムを、さらに有するシステム。
【請求項１２】
請求項１において、前記複数の処理ユニットと、前記複数の処理ユニットの間の信号を伝達するためのルーチングマトリクスとを含む集積回路ユニットを有する、システム。
【請求項１３】
請求項１２において、前記ルーチングマトリクスは、前記複数の処理ユニットに含まれる少なくとも一部の処理ユニットの間の接続を変更することにより、前記集積回路ユニット内の回路を再構成する、システム。
【請求項１４】
自己同期型の処理ユニットであって、
複数の入力側の他の処理ユニットからそれぞれ供給される複数の入力信号を受信するための入力側の信号交換部と、
前記複数の入力信号に基づき、出力信号を生成するための論理部と、
前記出力信号を、少なくとも１つの出力側の他の処理ユニットに送信するための出力側の信号交換部と、
前記入力側の信号交換部が受信した入力信号により、出力信号の生成に不用となる未受信の入力信号を定める第１の判断機能と、
前記出力側の信号交換部が受信した、出力信号の不用を示す不用通知により、受信不用となる未受信の入力信号を定める第２の判断機能とを有し、さらに、
前記入力側の信号交換部は、前記第１の判断機能または前記第２の判断機能により受信不用と判断された未受信の入力信号を供給する入力側の他の処理ユニットに宛てて前記不用通知を送信する、処理ユニット。
【請求項１５】
請求項１４において、前記出力側の信号交換部は、出力信号を、複数の出力側の他の処理ユニットに送信し、
前記第２の判断機能は、前記複数の出力側の他の処理ユニットの全てから前記不用通知を受信したときに、受信不用となる未受信の入力信号を定める、処理ユニット。
【請求項１６】
請求項１４において、次のｂ１ないしｂ４のいずれかの処理により信号の転送を確認するハンドシェイク機能を、さらに有する処理ユニット。
ｂ１  入力信号を受信すると、その入力信号の供給元の、入力側の他の処理ユニットに宛てて確認信号を送信する。
ｂ２  未受信の入力信号の供給元の、入力側の他の処理ユニットに宛てて前記不用通知として前記確認信号を送信し、前記確認信号の送信先の、入力側の他の処理ユニットからダミーの入力信号を受信する。
ｂ３  出力信号を送信し、前記出力信号の、送信先の出力側の他の処理ユニットから前記確認信号を受信する。
ｂ４  出力信号が未送信のときに前記確認信号を受信すると前記不用通知として認識し、ダミーの出力信号を送信する。
【請求項１７】
請求項１４において、未受信の入力信号により処理できない入力信号を記憶するためのメモリを、さらに有する、処理ユニット。
【請求項１８】
請求項１４において、受信した信号のうち、処理できない信号をイベントトークンとして記憶するためのメモリを、さらに有する、処理ユニット。
【請求項１９】
自己同期型の処理ユニットであって、
入力側の他の処理ユニットから、入力信号を受信する入力側の信号交換部と、
前記入力信号を、少なくとも１つの出力側の他の処理ユニットに送信する出力側の信号交換部とを有し、
前記入力側の信号交換部は、前記出力側の信号交換部が受信した出力信号の不用通知により、未受信の入力信号を供給する入力側の他の処理ユニットに宛てて不用通知を送信する、処理ユニット。
【請求項２０】
請求項１４に記載の処理ユニットを少なくとも１つ含む複数の処理ユニットと、
さらに、前記複数の処理ユニットの間の信号を伝達するためのルーチングマトリクスと、を有する集積回路ユニット。
【請求項２１】
請求項２０において、前記複数の処理ユニットは、さらに、請求項１９に記載の処理ユニットを少なくとも１つ含む、集積回路ユニット。
【請求項２２】
請求項２０において、前記ルーチングマトリクスは、前記複数の処理ユニットに含まれる少なくとも一部の処理ユニットの間の接続を変更することにより、当該集積回路ユニット内の回路を再構成する、集積回路ユニット。
【請求項２３】
複数の処理ユニットを有し、それぞれの処理ユニットは請求項１９に記載の処理ユニットであり、
さらに、前記複数の処理ユニットの間の信号を伝達するためのルーチングマトリクスを含む、集積回路ユニット。
【請求項２４】
自己同期型の複数の処理ユニットを有するシステムを制御する方法であって、
前記複数の処理ユニットの１つの処理ユニットは、複数の入力側の処理ユニットからそれぞれ供給される複数の入力信号を受信するための入力側の信号交換部と、前記複数の入力信号に基づき、出力信号を生成するための論理部と、前記出力信号を、少なくとも１つの出力側の処理ユニットに送信するための出力側の信号交換部とを有し、
当該方法は、
前記入力側の信号交換部が受信した入力信号により、出力信号の生成に不用となる未受信の入力信号が発生する第１の要因、または、前記出力側の信号交換部が受信した、出力信号の不用を示す不用通知により、受信不用となる未受信の入力信号が発生する第２の要因により、その入力信号を供給する予定の入力側の処理ユニットに宛てて、前記不用通知を送信することを含む方法。
【請求項２５】
請求項２４において、前記論理部により前記出力信号が生成される都度、その出力信号をパルス信号で送信することをさらに含む、方法。
【請求項２６】
請求項２４において、前記複数の処理ユニットの間で信号の転送を確認することを含み、前記信号の転送を確認することは以下を含む、方法。
入力信号を受信すると、その入力信号の供給元の入力側の処理ユニットに宛てて確認信号を送信する、
未受信の入力信号の供給元の、入力側の処理ユニットに宛てて前記不用通知として前記確認信号を送信し、前記確認信号の送信先の、入力側の処理ユニットからダミーの入力信号を受信する、
出力信号を送信し、前記出力信号の送信先の、出力側の処理ユニットから前記確認信号を受信する、
出力信号が未送信のときに前記確認信号を受信すると前記不用通知として認識し、ダミーの出力信号を送信する。
【請求項２７】
自己同期型の処理ユニットが他の自己同期型の処理ユニットとの間で信号の転送を確認することを含む、信号を伝達するための方法であって、
前記自己同期型の処理ユニットは、複数の入力側の他の処理ユニットからそれぞれ供給される複数の入力信号を受信するための入力側の信号交換部と、前記複数の入力信号に基づき、出力信号を生成するための論理部と、前記出力信号を、少なくとも１つの出力側の他の処理ユニットに送信するための出力側の信号交換部とを有し、
前記信号の転送を確認することは、以下を含む、方法。
前記入力側の信号交換部により入力信号を受信すると、その入力信号の供給元の入力側の他の処理ユニットに宛てて確認信号を送信すること、
入力信号により、出力信号の生成に不用となる未受信の入力信号が発生する第１の要因、または、前記出力側の信号交換部が受信した、出力信号の不用を示す不用通知により、受信不用となる未受信の入力信号が発生する第２の要因により、前記未受信の入力信号の供給元の、入力側の他の処理ユニットに宛てて前記不用通知として前記確認信号を送信し、前記確認信号の送信先の入力側の他の処理ユニットからダミーの入力信号を受信すること、
出力信号を送信し、前記出力信号の送信先の、出力側の他の処理ユニットから前記確認信号を受信すること、
出力信号が未送信のときに前記確認信号を受信すると前記不用通知として認識し、ダミーの出力信号を送信すること。
【請求項２８】
請求項２７において、前記論理部により前記出力信号が生成される都度、その出力信号をパルス信号で送信することを含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自己同期型、すなわち、非同期型の処理ユニットを有するシステムに関するものである。
【背景技術】
【０００２】
デジタル回路の設計手法として、システム全体をグローバルクロックで統率する同期式設計手法が広く採用されている。一方、クロックによる統率を縛りととらえ、縛りからの解放によって高性能化や低消費電力化をめざすセルフタイムド（自己同期型）設計手法、すなわち、非同期型の設計手法も検討されている。セルフタイムド設計の利点のひとつは、接続された回路素子同士がハンドシェイクを行ってタイミング調整するので、素子遅延や配線遅延に依存しない設計が可能ということである。また、セルフタイムド設計によれば、同期式設計の幾つかの欠点あるいはディメリットを克服できる。同期式設計のディメリットは、例えば、演算時間がクロック周期を超えてしまったときの誤動作、演算がクロック周期より早く完了したときにクロック境界まで無為に待つことである。【０００３】
非同期式の回路の遅延モデルはいくつか提案されている。米国特許第６，６０６，３５６では、ＤＩ（Delay Insensitive）モデルおよびＱＤＩ（Quasi Delay Insensitive）モデルの性能を改善するモデルとして、遅延が所定の範囲となる回路を仮定したＳＤＩ（Scalable Delay Insensitive）モデルを提案している。米国特許第６，７３２，３３６では、ＱＤＩ回路の２相または４相ハンドシェイクをパルスに置き換える非同期パルスロジック（ＡＰＬ）を採用することにより、ＱＤＩ回路の性能を改善することを提案している。【０００４】
同期式設計に対する非同期設計の利点の１つは、「演算が完了したらクロック境界まで無為に待たずに次に進んでよい」ということである。しかしながら、非同期設計では、クロックを共有しない素子間あるいはユニット間においてデータを転送するために、所定のプロトコル（ハンドシェイク）を採用する。このため、非同期設計の方が演算は早く進行するはずであるが、回路素子同士がハンドシェイクを行うオーバヘッドのせいで、必ずしも同期式設計より高速な結果を得られるとは限らない。
【発明の開示】
【０００５】
本発明の一態様は、自己同期型の複数の処理ユニットを有するシステムである。これら複数の処理ユニットの１つの処理ユニットは、複数の入力側の処理ユニットからそれぞれ供給される複数の入力信号を受信するための入力側の信号交換部と、複数の入力信号に基づき、出力信号を生成するための論理部と、出力信号を、少なくとも１つの出力側の処理ユニットに送信するための出力側の信号交換部とを有する。処理ユニットは、さらに、入力側の信号交換部が受信した入力信号により、出力信号の生成に不用となる未受信の入力信号を定める第１の判断機能と、出力側の信号交換部が受信した、出力信号の不用を示す不用通知により、受信不用となる未受信の入力信号を定める第２の判断機能とを備えている。そして、入力側の信号交換部は、第１の判断機能または第２の判断機能により受信不用と判断された未受信の入力信号を供給する入力側の処理ユニットに宛てて不用通知を送信する。
【０００６】
本発明の他の態様の１つは自己同期型の処理ユニットである。処理ユニットのタイプの１つは、複数の入力側の他の処理ユニットからそれぞれ供給される複数の入力信号を受信するための入力側の信号交換部と、論理部と、少なくとも１つの出力側の他の処理ユニットに出力信号を送信するための出力側の信号交換部と、出力信号の生成に不用となる未受信の入力信号を定める第１の判断機能と、出力信号の不用通知により、受信不用となる未受信の入力信号を定める第２の判断機能とを有する。入力側の信号交換部は、第１の判断機能または第２の判断機能により不用と判断された未受信の入力信号を供給する入力側の他の処理ユニットに宛てて不用通知を送信する。
【０００７】
自己同期型の処理ユニットのタイプの他の１つは、出力信号を生成する論理部を有さないものである。例えば、バッファ（インバータも含む）あるいは分岐として機能するものである。この処理ユニットは、出力側から送信された不用通知を入力側へ転送する。このため、この処理ユニットは、入力側の信号交換部と、出力側の信号交換部とを有し、入力側の信号交換部は、出力側の信号交換部が受信した出力信号の不用通知により、未受信の入力信号を供給する入力側の他の処理ユニットに宛てて不用通知を送信する。
【０００８】
出力側の信号交換部が出力信号を、複数の出力側の処理ユニットに送信する処理ユニットにおいては、全ての出力側の処理ユニットから不用通知を受信したときに出力信号の生成が不用になる。したがって、第２の判断機能は、複数の出力側の処理ユニットの全てから出力信号の不用通知を受信したときに、受信不用となる未受信の入力信号を定める。
【０００９】
本発明の他の態様のさらに１つは、自己同期型の複数の処理ユニットを有するシステムを制御する方法である。この方法は、入力側の信号交換部が受信した入力信号により、出力信号の生成に不用となる未受信の入力信号が発生する第１の要因、または、出力側の信号交換部が受信した、出力信号の不用を示す不用通知により、受信不用となる未受信の入力信号が発生する第２の要因により、その入力信号を供給する予定の入力側の処理ユニットに宛てて、不用通知を送信することを含む。
【００１０】
不用通知の伝播は、データが未入力のときに確認信号（アクノリッジ信号）を送信することにより、処理ユニット間において、データ用の信号を転送するためのハンドシェイクのプロトコルに追加できる。これにより、データ用の信号により不用通知に関するハンドシェイクを行うことができる。そのようなハンドシェイクのプロトコルの１つは以下のようなものであり、以下の処理ｐ１〜ｐ４のいずれかにより入出力側で信号の転送を確認する。
ｐ１．  入力信号を受信すると、その入力信号の供給元の入力側の処理ユニット（他の処理ユニット）に宛てて確認信号を送信する。
ｐ２．  未受信の入力信号の供給元の入力側の処理ユニット（他の処理ユニット）に宛てて不用通知として確認信号を送信し、確認信号の送信先の入力側の処理ユニット（他の処理ユニット）からダミーの入力信号を受信する。
ｐ３．  出力信号を送信し、送信先の出力側の処理ユニット（他の処理ユニット）から確認信号を受信する。
ｐ４．  出力信号が未送信のときに確認信号を受信すると不用通知として認識し、ダミーの出力信号を送信する。
【００１１】
入力側においては、処理ｐ１またはｐ２により信号の転送が確認される。出力側においては、処理ｐ３またはｐ４により信号の転送が確認される。したがって、処理ユニットは、処理ｐ１からｐ４のいずれかにより信号の転送を確認するハンドシェイク機能を備えていることが望ましい。
【００１２】
本発明の他の態様のさらに１つは、自己同期型の処理ユニットが他の自己同期型の処理ユニットとの間で信号の転送を確認することを含む、信号を伝達するための方法である。信号の転送を確認すること（ハンドシェイクすること）は、以下を含む。
【００１３】
入力側の信号交換部により入力信号を受信すると、その入力信号の供給元の入力側の他の処理ユニットに宛てて確認信号を送信すること、
入力信号により、出力信号の生成に不用となる未受信の入力信号が発生する第１の要因、または、出力側の信号交換部が受信した、出力信号の不用を示す不用通知により、受信不用となる未受信の入力信号が発生する第２の要因により、未受信の入力信号の供給元の、入力側の他の処理ユニットに宛てて不用通知として確認信号を送信し、確認信号の送信先の、入力側の他の処理ユニットからダミーの入力信号を受信すること、
出力信号を送信し、出力信号の送信先の、出力側の他の処理ユニットから確認信号を受信すること、および、
出力信号が未送信のときに確認信号を受信すると不用通知として認識し、ダミーの出力信号を送信すること。
【図面の簡単な説明】
【００１４】
【図１】自己同期型のシステムの概要を示す図。
【図２】自己同期型の処理ユニットの概略構成を示す図。
【図３】２線式の自己同期型の素子を示す図。
【図４】図３に示す素子の内部動作を示すフローチャート。
【図５】図２に示す処理ユニットの内部動作の概要を示すフローチャート。
【図６】図２に示す処理ユニットのさらに詳しい内部動作を示すフローチャート。
【図７】自己同期型のＮＯＴゲート素子を示す図。
【図８】図８（ａ）は、同期型の信号分岐を示す図、図８（ｂ）は、自己同期型の信号分岐を示す図。
【図９】自己同期型のバッファ素子を示す図。
【図１０】図９の素子においてハンドシェイクが行なわれるタイミングチャート。
【図１１】図１０と異なる例のタイミングチャート。
【図１２】図１１とさらに異なる例のタイミングチャート。
【図１３】図１２とさらに異なる例のタイミングチャート。
【図１４】自己同期型のフリップフロップの内部動作を示すフローチャート。
【図１５】自己同期型のフリップフロップのさらに詳しい内部動作を示すフローチャート。
【図１６】組合せ論理回路の一例。
【図１７】図１６の組合せ回路を２入力１出力の処理ユニットを複数用いた構成に変更した回路。
【図１８】図１８（ａ）〜図１８（ｈ）は、図１７に示す回路の動作を示す例。
【図１９】図１９（ａ）〜図１９（ｅ）は、図１７に示す回路の動作を示す異なる例。
【図２０】図２０（ａ）〜図２０（ｅ）は、図１７に示す回路の動作をハンドシェイクにより示す例。
【図２１】図２１（ａ）〜図２１（ｄ）は、図２０（ｅ）に続き、図１７に示す回路の動作をハンドシェイクにより示す例。
【図２２】図２２（ａ）〜図２２（ｄ）は、図２１（ｄ）に続き、図１７に示す回路の動作をハンドシェイクにより示す例。
【図２３】順序回路の例。
【図２４】図２３の順序回路を２入力１出力の処理ユニットを複数用いた構成に変更した回路。
【図２５】図２５（ａ）〜図２５（ｄ）は、図２４に示す回路の動作をハンドシェイクにより示す例。
【図２６】図２６（ａ）〜図２６（ｄ）は、図２５（ｄ）に続き、図２４に示す回路の動作をハンドシェイクにより示す例。
【図２７】図２７（ａ）〜図２７（ｄ）は、図２６（ｄ）に続き、図２４に示す回路の動作をハンドシェイクにより示す例。
【図２８】図２８（ａ）〜図２８（ｄ）は、図２７（ｄ）に続き、図２４に示す回路の動作をハンドシェイクにより示す例。
【図２９】図２９（ａ）〜図２９（ｄ）は、図２８（ｄ）に続き、図２４に示す回路の動作をハンドシェイクにより示す例。
【図３０】図３０（ａ）〜図３０（ｄ）は、図２９（ｄ）に続き、図２４に示す回路の動作をハンドシェイクにより示す例。
【図３１】図３１（ａ）〜図３１（ｄ）は、図３０（ｄ）に続き、図２４に示す回路の動作をハンドシェイクにより示す例。
【発明の実施の形態】
【００１５】
本発明の一形態は、自己同期型の複数の処理ユニットを有するシステムであり、複数の入力信号を受信するための入力側の信号交換部と、これら複数の入力信号に基づき、出力信号を生成するための論理部と、出力側の信号交換部とを有する。処理ユニットの論理部に実装された論理が２入力ＡＮＤのときは、一方の入力信号が真であれば、出力信号を決定するために他方の入力信号を待つ必要がある。しかしながら、一方の入力信号が偽であれば、出力信号は偽となり、他方の入力信号は出力信号の生成に不用（ドントケア）な信号となる。したがって、自己同期型の処理ユニットにおいて、異なるタイミングで受信する可能性が高い、他方の入力信号を待つ必要はなく、出力信号を出力できる。
【００１６】
２入力ＯＲなどの他の論理についても同様に、あるタイミングで受信した入力信号により、未受信の入力信号がドントケアとなることはある。セレクタであれば、あるタイミングで受信した入力信号により選択される側が決まると、選択されない側の未受信の入力信号はドントケアとなる。
【００１７】
また、出力信号がドントケアであれば、その出力信号を生成する処理ユニットにおける入力信号もドントケアとなる。したがって、第１の判断機能において、出力信号の生成に受信不用となる未受信の入力信号を定める（第１の要因）。さらに、第２の判断機能において、出力信号の不用通知により、受信不用となる未受信の入力信号を定める（第２の要因）。このシステムにおいては、さらに、第１の判断機能または第２の判断機能により不用と判断された未受信の入力信号を供給する入力側の処理ユニットに宛てて、不用通知を送信する。
【００１８】
ある処理ユニットにおいて、一方の入力信号により出力信号が決定された場合は、その出力信号は、出力側の信号交換部により出力側の他の処理ユニットに送信される。それと共に、第１の判断機能において不用と判断された未受信の入力信号については、その未受信の入力信号を供給する予定の入力側の処理ユニットに対し、入力側の信号交換部により、不用通知が送信される。さらに、その入力側の処理ユニットでは、第２の判断機能により、不用通知は、さらに、未受信の入力側の他の処理ユニットに送信される。したがって、ある処理ユニットから、出力側には出力信号が伝播されるので、信号処理が進み下流側の処理ユニットの待ち状態が解除される。また、未受信の入力側には不用通知が伝播されるので、上流側の処理ユニットの待ち状態を解除でき、信号処理を進められるのでシステムの処理速度を向上できる。
【００１９】
さらに、自己同期式の処理ユニットの出力側の信号交換部は、入力信号に基づき論理部により出力信号が生成される都度、その出力信号をパルス信号で送信することが望ましい。本発明の実施形態の処理ユニットは、論理により、出力信号の値を変える・変えないに関わらず、出力信号が生成される都度、その出力信号をパルス出力する。したがって、処理ユニットは、ユーザークロック１サイクル分の処理につき１回、出力信号を伝送する。これは、同期式ユーザー回路の、「全ての信号線が１クロックサイクルに１回ずつ値の伝送を行う」という性質を反映している。
【００２０】
本発明の実施形態の自己同期型のシステムにおいては、全ての処理ユニット間で１回ずつハンドシェイクが行われる。そして、ハンドシェイクが行われるたびに、同期式ユーザー回路のユーザークロック１サイクル分の処理が進むとみなすことができる。このため、広く普及している同期式設計の考え方で、自己同期式、すなわち非同期の回路設計が可能となる。
【００２１】
出力側の信号交換部は、出力信号を３状態に変位する信号で送信することが望ましい。３状態に変位する信号の一例は、中立と、それを含まない２値（２つの状態）とを示す信号である。出力信号（入力信号）を２線式で送信することも可能である。しかしながら、不用通知を下流に伝播する際に、出力信号を確認信号として利用するためには、２線式の場合、遅延量が異なると、ハンドシェイクの結果が異なる可能性がある。出力信号を、３状態に変位する信号で送信することにより、単線（１線式）で出力信号（入力信号）を交換できるので遅延に伴う問題を未然に解決できる。３状態は、電気信号であれば、例えば、電圧をプラス、ゼロ、マイナスに変換させることで実現できる。光信号であれば、例えば、偏光の状態を３状態に変えることができる。
【００２２】
処理ユニットは、未受信の入力信号あるいは確認信号により処理できない入力信号を記憶するためのメモリを備えていることが望ましい。自己同期型の処理ユニットは、受信した信号、例えば、入力信号あるいは確認信号を、イベントを進めるトークン（イベントトークン）として記憶するためのメモリを備えていることが望ましい。処理ユニットは、処理できない信号を記憶するためのメモリを備えていることにより、受信した信号に関わる処理を進めることが可能となる。
【００２３】
本発明の実施形態の自己同期型のシステムは、グローバルクロックを必要としない。したがって、自己同期型のシステムに含まれる個々の処理ユニットにおける処理時間（レイテンシ）がグローバルクロック周期より短くなければならないという制約も存在しない。このため、処理ユニットの論理部の論理あるいは処理ユニットの接続をフレキシブルに変更することが可能となる。したがって、自己同期型のシステムは、論理部における、出力信号を生成する論理を変更可能な再構成可能なシステムに適している。
【００２４】
再構成可能なシステムの一形態は、入力側の信号交換部は、入力側の処理ユニットを変更する機能を備えており、出力側の信号交換部は、出力側の処理ユニットを変更する機能を備えている処理ユニットを含むシステムである。そのようなシステムの一例は、入力側および出力側の信号交換部が通信あるいはデータ伝送機能を含み、無線あるいは有線により、それぞれに接続される処理ユニットを変更できるものである。再構成可能なシステムの他の一形態は、複数の処理ユニットの間の信号の交換を可能とする通信システムであって、複数の処理ユニットの接続を再構成可能な通信システムを、さらに有するものである。
【００２５】
この自己同期型のシステムは、無線あるいは有線により実現されるコンピュータネットワークで複数のコンピュータが接続された分散型のシステムであっても良い。また、適当な演算機能を備えた複数の素子が１つのチップに収納され、電子あるいは光により接続された集積回路システムであっても良い。集積回路ユニットの一形態は、複数の処理ユニットと、複数の処理ユニットの間の信号を伝達するためのルーチングマトリクスとを含むものである。ルーチングマトリクスの一例は、複数の処理ユニットに含まれる少なくとも一部の処理ユニットの間の接続を変更することにより、集積回路ユニット内の回路を再構成できるものである。
【００２６】
図１は、自己同期型の集積回路装置の一例を示してある。この集積回路装置（集積回路ユニット、デバイスあるいはシステム）１は、ＦＦＴ（高速フーリエ変換）の演算、ＭＰＥＧにより圧縮されたデータのデコードを含む各種計算処理、ＩＰアドレスによるルーティング、パケットにより伝送されるデータの再構成を含むネットワーク処理などの多種多様な目的で使用できるものである。集積回路ユニット１は、それ自体で１つのシステムとして、１または複数の処理を実行するように構成できる。また、複数の集積回路ユニット１を組み合わせることにより１つのシステムを構築することも可能である。さらに、１または複数の集積回路ユニット１を、汎用のＣＰＵあるいは他の専用回路と組み合わせることにより１つのシステムを構築することも可能である。
【００２７】
集積回路ユニット１は、各々の演算論理を変更可能な複数の処理ユニット（Processing Unit（ＰＵ），Processing Element（ＰＥ）またはConfigurable Logic Block（ＣＬＢ）、以降においてはＰＵ）１０と、それら複数の処理ユニット（ＰＵｓ）１０を接続する経路を構成するためのルーチングマトリクス５とを含む。ルーチングマトリクス５は、ＰＵｓ１０の間でデータを伝送するための配線（配線群）６ｗと、配線群６ｗの接続を変更することにより、ルーチングマトリクス５の接続構成を変更可能な接続ユニット（スイッチングユニットまたはセレクタユニット）６ｓとを含む。集積回路ユニット１は、さらに、ＰＵｓ１０およびルーチングマトリクス５のコンフィグレーションデータ７を記憶したコンフィグレーションメモリ２と、そのコンフィグレーションメモリ２からＰＵｓ１０に対し、コンフィグレーションデータ７を供給するためのコンフィグレーションデータ制御ユニット３とを有している。コンフィグレーションメモリ２には、複数セットのコンフィグレーションデータ７が格納される。制御ユニット３は、複数セットのコンフィグレーションデータ７のいずれかを選択し、ＰＵｓ１０および、必要であればルーチングマトリクス５に供給する。ルーチングマトリクス５は、ＰＵｓ１０および接続ユニット６ｓに対してコンフィグレーションデータ７を転送する機能も有する。
【００２８】
ルーチングマトリクス５は、配線６ｗがマトリクスに配列されたものに限定されない。例えば、ＰＵｓ１０がネットワークのノードを構成するように接続するものであっても良い。ルーチングマトリクス５は、複数のＰＵ１０の間の信号の交換を可能とする有線の通信システムでもある。ＰＵｓ１０が分散している場合は、無線による通信システムでＰＵｓ１０を接続することも可能である。有線または無線の通信システムによりＰＵｓ１０の接続を再構成することにより、ＰＵｓ１０により構成される回路を変更できる。
【００２９】
図２は、自己同期型の非同期型の処理ユニット（ＰＵ）１０の概略の機能構成を示している。このＰＵ１０は、入力側の信号交換部である入力インターフェイス１１と、出力Ｙを決定する論理部１２と、出力側の信号交換部である出力インターフェイス１３とを備えている。入力インターフェイス１１は、２つの他の入力側のＰＵｓ１０ａおよび１０ｂからそれぞれ供給される２つの入力信号ＡｄおよびＢｄを受信する。２つの入力信号ＡｄおよびＢｄは、同じタイミングでＰＵｓ１０ａおよび１０ｂから供給されるとは限らない。したがって、入力側の信号交換部である入力インターフェイス１１は、２つの入力信号ＡｄおよびＢｄをそれぞれ受信する。
【００３０】
論理部１２は、入力信号ＡｄおよびＢｄによりそれぞれ与えられる入力Ａおよび入力Ｂに基づき、出力Ｙを決定する。出力インターフェイス１３は、論理部１２の出力Ｙを示す出力信号Ｙｄを出力側の他の処理ユニット（ＰＵ）１０ｙに送信する。さらに、ＰＵ１０は、ＰＵ１０の内部動作を制御する制御ユニット１５を備えている。また、ＰＵ１０は、未受信の信号により処理を進めることができない信号を記憶するキューイング用のメモリ１４を備えている。
【００３１】
制御ユニット１５は、第１の判断機能１８と、第２の判断機能１９とを含む。第１の判断機能１８は、入力インターフェイス１１が受信した入力信号ＡｄまたはＢｄにより、出力信号Ｙｄの生成に不用となる未受信の入力信号を定める。第２の判断機能１９は、出力インターフェイス１３が受信した、出力信号の不用通知により、受信不用となる未受信の入力信号を定める。
【００３２】
さらに、制御ユニット１５は、信号の送受信を確認するためのハンドシェイク機能１７を備えている。ハンドシェイク機能１７は、入力側のＰＵｓ１０ａおよび１０ｂとの間で入力信号ＡｄおよびＢｄの送受信をそれぞれ確認する。また、ハンドシェイク機能１７は、出力側のＰＵ１０ｙとの間で出力信号Ｙｄの送受信を確認する。
【００３３】
このハンドシェイク機能１７は、入力信号Ａｄを受信すると、その入力信号Ａｄの供給元の入力側のＰＵ１０ａに宛てて確認信号（アクノリッジ信号）Ａｋを送信する。この処理により、ＰＵ１０は、ＰＵ１０ａとの間で一回の入力信号の交換（ハンドシェイク）を行う。すなわち、この処理がＰＵ１０とＰＵ１０ａとの間のハンドシェイク（プロトコル）の１つである。
【００３４】
同様に、ハンドシェイク機能１７は、入力信号Ｂｄを受信すると、その入力信号Ｂｄの供給元の入力側のＰＵ１０ｂに宛てて確認信号（アクノリッジ信号）Ｂｋを送信する。この処理がＰＵ１０とＰＵ１０ｂとの間のハンドシェイク（プロトコル）の１つである。また、ハンドシェイク機能１７は、出力信号Ｙｄを送信し、送信先の出力側のＰＵ１０ｙからアクノリッジ信号Ｙｋを受信する。この処理が、ＰＵ１０とＰＵ１０ｙとの間のハンドシェイク（プロトコル）の１つである。
【００３５】
さらに、ハンドシェイク機能１７は、第１の判断機能１８または第２の判断機能１９により不用と判断された未受信の入力信号を供給する入力側の処理ユニットに宛てて不用通知を送信する。ハンドシェイク機能１７は、受信不用と判断された入力側のＰＵ１０ａおよび１０ｂの一方または両方に対して、アクノリッジ信号ＡｋおよびＢｋの一方または両方を不用通知（ドントケア通知）として送信する。さらに、ハンドシェイク機能１７は、入力信号が未受信の状態でアクノリッジ信号を送信した先のＰＵｓ１０ａおよび１０ｂの一方または両方から供給されるダミーの入力信号を受信する。これらの処理が、ＰＵ１０とＰＵ１０ａおよび／または１０ｂとの間のハンドシェイク（プロトコル）の１つである。
【００３６】
また、ハンドシェイク機能１７は、出力側のＰＵ１０ｙからドントケア通知を受け取る。ハンドシェイク機能１７は、出力信号Ｙｄが未送信のときにアクノリッジ信号Ｙｋを受信すると、ドントケア通知として認識する。ハンドシェイク機能１７は、第２の判断機能１９にドントケア通知を伝達すると共に、ダミーの出力信号Ｙｄを送信する。この処理が、ＰＵ１０およびＰＵ１０ｙとの間のハンドシェイク（プロトコル）の１つである。
【００３７】
制御ユニット１５は、ルーチングマトリクス５を介してコンフィグレーションメモリ２から供給されるコンフィグレーションデータ７によりＰＵ１０の処理内容を変更するための再構成機能１６を備えている。再構成機能１６は、コンフィグレーションデータ７に基づき、ＰＵ１０の論理部１２のロジックを変更する。また、再構成機能１６は、入力インターフェイス１１および出力インターフェイス１３に接続される処理ユニットを変更する。これらにより、システム１において複数のＰＵｓ１０により構成されるデータパスが再構成され、データパスの機能が変更される。この例では、入力インターフェイス１１および出力インターフェイス１３は、ルーチングマトリクス５を介して他のＰＵｓと接続されている。ルーチングマトリクス５の接続ユニット６ｓの構成を変えることによっても、システム１において複数のＰＵｓ１０により構成されるデータパスを再構成できる。
【００３８】
図３に、２線式の２入力１出力の自己同期型の素子９０の一例を示している。２入力１出力の論理素子は、入力信号は信号ＡおよびＢの２つ、出力信号は信号Ｙの１つである。１つの信号当たり、論理“０”を伝送するためのデータ線（Ａ０等）と、論理“１”を伝送するためのデータ線（Ａ１等）と、アクノリッジ線（Ａｋ等）が必要である。このため、素子９０には合計９本の信号線が接続されている。
【００３９】
図４は、図３に示した自己同期型の処理素子（ＰＥ）９０の内部動作を示すフローチャートである。まず、ステップ９１において、ＰＥ９０は、入力データ線から論理“０”や論理“１”を示す入力信号Ａ０、Ａ１、Ｂ０またはＢ１が伝送されてくるのを待つ。これらの信号が伝送されてきたら、ＰＥ９０は、ステップ９２において入力信号の供給元を判断する。ステップ９３または９４において、ＰＥ９０は、入力信号に対応するアクノリッジ信号ＡｋまたはＢｋを供給元に返す。ステップ９５において、ＰＥ９０は、出力値を変更する必要があるかどうかを判定する。出力信号Ｙ０またはＹ１を変更する必要があるなら、ＰＥ９０は、ステップ９６において新しい出力値を伝送する。その後、ステップ９７において、ＰＥ９０は、出力信号のアクノリッジＹｋを待つ。
【００４０】
この自己同期型の素子９０において、入力信号と出力信号とは入力側か出力側かの相違だけで同じデータ信号である。これらのデータ信号とアクノリッジ信号とが伝送途中で消失したり増殖したりしないという保証と、適当な遅延モデルに対応した回路設計がなされていれば、この自己同期型素子９０を用いたシステムは正しく動作する。
【００４１】
図２に示した自己同期型の素子（処理ユニットＰＵ）１０は、１線式の２入力１出力の自己同期型の素子（処理ユニット）である。１線式のＰＵ１０は、論理上の信号１本につき、実際の信号線を２本ずつ割り当てる。このため、ＰＵ１０には、合計６本の信号線が接続される。他のＰＵ１０に対する２本ずつの信号線は、それぞれ、データ線５ａと、アクノリッジ用の信号線５ｂである。データ線５ａは、データ信号Ａｄ、ＢｄおよびＹｄとして論理“０”や論理“１”を伝送するため信号線である。アクノリッジ用の信号線５ｂは、アクノリッジ信号Ａｋ、ＢｋおよびＹｋを伝送するための信号線である。
【００４２】
出力インターフェイス１３は、プラス電位の電源線と、マイナス電位の電源線とに接続される。出力インターフェイス１３は、出力信号Ｙｄとして論理「１（真）」を伝送する際にはプラスのパルスを、論理「０（偽）」を伝送する際にはマイナスのパルスを出力する。したがって、データ線５ａは、データ信号Ａｄ、ＢｄおよびＹｄとして、論理「１」を伝送するプラスのパルスと、論理「０」を伝送するマイナスのパルスを伝播する。論理と電位との関係は例示に過ぎず、関係を逆にすることは可能である。
【００４３】
図５に、図２に示した自己同期型のＰＵ１０のデータ出力に関する内部動作をフローチャートで示してある。このフローチャートは、データ出力に関し、２線式の自己同期素子９０との比較のため、ドントケア通知の機能を除いた動作を示している。ステップ２１において、ＰＵ１０は、入力信号ＡｄまたはＢｄが受信されるのを待つ。ステップ２２において、ＰＵ１０は、入力信号Ａｄの受信を確認すると、ステップ２３ａでアクノリッジ信号Ａｋを送信してハンドシェイクする。ステップ２４ａにおいて、ＰＵ１０は、入力信号Ｂｄを待つ。入力信号Ｂｄを受信すると、ステップ２５ａにおいて、ＰＵ１０は、アクノリッジ信号Ｂｋを送信してハンドシェイクする。一方、ステップ２２において、入力信号Ｂｄの受信を確認すると、ＰＵ１０は、ステップ２３ｂでアクノリッジ信号Ｂｋを送信してハンドシェイクする。さらに、ステップ２４ｂにおいて、ＰＵ１０は、入力信号Ａｄを待つ。入力信号Ａｄを受信すると、ステップ２５ｂにおいて、ＰＵ１０は、アクノリッジ信号Ａｋを送信してハンドシェイクする。
【００４４】
入力信号ＡｄおよびＢｄを受信すると、ステップ２６において、ＰＵ１０は、出力信号Ｙｄを送信する。ステップ２７においてアクノリッジ信号Ｙｋを受信してハンドシェイクは完了する。
【００４５】
このように、１線式のＰＵ１０の基本的な動作は、一回の処理で、全ての入出力線で１回ずつ信号を送受信することである。すなわち、ＰＵ１０においては、全ての入出力線で１回ずつ信号伝送することが、ユーザークロックの１サイクルに相当する。このため、２線式の自己同期設計用の素子とは異なり、同期式素子と同等の、「全ての信号線が１クロックサイクルに１回ずつ値の伝送を行う」という性質を持つ。したがって、ＰＵ１０を用いたシステムについては、クロック同期型のシステム設計を適用できる。
【００４６】
クロック同期型のシステム設計を積極的に実現するため、以下では、ＰＵ１０の基本動作は、全入力について１回ずつ信号を受け取ってから出力を１回出すものとし、片方の入力だけどんどん先行することは認めないし、出力値を変化させる必要の有無によらず毎回、出力を伝送する。
【００４７】
本実施形態では、ＰＵ１０を備えたデバイス（システム）１により、クロック同期式のユーザー回路を、グローバルクロックを使わずに実装できる。このため、クロックスキュー調整やクリティカルパス調整の工数を省略できる。さらに、以下に示すハンドシェイク逆流機能により、クロック同期型と互換という特徴を保持しながら、片側の入力だけで、結果的に処理を進めることができる。さらに、キューイング用のメモリ１４を用いることにより、クロック同期型と互換という特徴を保持しながら、処理速度をいっそう改善できる。
【００４８】
図６は、図２に示した２入力１出力の自己同期型のＰＵ１０の内部動作に関するフローチャートである。このフローチャートは、ハンドシェイク逆流機能を含めた内部動作を示す。まず、ステップ３１において、ＰＵ１０は、入力データ線ＡｄおよびＢｄと、出力アクノリッジ線Ｙｋからのパルスを待つ。
【００４９】
図５に示した典型的な例は、入力データ線Ａｄからデータパルスが供給された場合である。ＰＵ１０は、入力信号Ａｄを受信したので、ステップ３５において、入力アクノリッジ線Ａｋからアクノリッジパルスを出す（アクノリッジ信号Ａｋ）。次に、もう一方のデータ線Ｂｄのパルス（入力信号Ｂｄ）を待つ前に、ＰＵ１０は、ステップ３６において、出力信号Ｙｄを決めるために入力信号Ｂｄが不用（ドントケア）か否かを判定する。入力信号Ｂｄが必要なのであれば、ＰＵ１０は、ステップ３９に移る。ステップ３９では、出力信号が決定されないので、ＰＵ１０は、ステップ４６で入力信号Ａｄを保持し、入力信号Ｂｄが受信されるのを待つ。次に、ステップ３１において、入力信号Ｂｄが受信されると、ＰＵ１０は、ステップ３５でアクノリッジ信号Ｂｋを送信する。ステップ３９を介して、ＰＵ１０は、ステップ４１において出力信号Ｙｄを送信する。ＰＵ１０は、ステップ３１に戻ってアクノリッジ信号Ｙｋを待つ。
【００５０】
一方、ステップ３６において、入力Ａの値だけで出力Ｙの値が確定し、入力Ｂの値がドントケアとなることがある。すなわち、ステップ３６において、入力信号Ａｄにより出力信号Ｙｄが確定し、入力信号Ｂｄがドントケアであると、ＰＵ１０は、ステップ３８において、入力信号Ｂｄを待つことなく、アクノリッジ信号Ｂｋを送信する。それと同時に、ステップ４１において、ＰＵ１０は、確定した出力値をパルス信号Ｙｄとして送信する。ステップ３８において送信されるアクノリッジパルスＢｋは、「データパルスＢｄを受け取った」という受領応答メッセージではなく、「入力Ｂはドントケアである」という通知メッセージである。
【００５１】
その後、ステップ３１に戻って、ＰＵ１０は、アクノリッジパルスＹｋと、データパルスＢｄを待つ。このデータパルスＢｄは、入力Ｂの論理値を示すものではなく、「入力Ｂの値はドントケアである」という通知に対する了解応答メッセージであり、プラスのパルス信号でもマイナスのパルス信号でもよい。
【００５２】
ステップ３１において、入力信号Ａｄよりも先に、入力信号Ｂｄが来た場合のＰＵ１０の動作は、上記において、入力信号Ａｄと入力信号Ｂｄが入れ替わっただけのものになる。なお、以降において、入力線ＡおよびＢにより伝播されるパルス信号を入力信号ＡｄおよびＢｄとして説明し、出力線Ｙにより伝播されるパルス信号を出力信号Ｙｄとして説明する。アクノリッジ信号Ａｋ、ＢｋおよびＹｋにおいても同様である。
【００５３】
上述の動作から分かるように、ステップ３１において、出力信号を確認したことを示すハンドシェイク（プロトコル）を目的としないアクノリッジ信号Ｙｋが来る場合がある。その場合のアクノリッジ信号Ｙｋは「出力Ｙの値はドントケアである」という、出力側のＰＵ１０ｙからの通知である。そこで、ステップ５２において、ＰＵ１０は、ドントケア了解応答としてダミーの出力信号Ｙｄを送信する。この出力信号Ｙｄのパルス信号はプラスおよびマイナスのどちらでもよい。
【００５４】
ダミーの出力信号Ｙｄを出すと同時に、ＰＵ１０は、ステップ５７において、未受信の入力信号を供給する予定の入力側のＰＵ１０ａおよび／または１０ｂに対してアクノリッジ信号Ａｋおよび／またはＢｋを送信する。例えば、入力信号Ａｄを受信済みであれば、ＰＵ１０は、ＰＵ１０ｂに対してアクノリッジ信号Ｂｋを送信する。入力信号ＡｄおよびＢｄが未受信であれば、ＰＵ１０は、ＰＵ１０ａおよび１０ｂに対してアクノリッジ信号ＡｋおよびＢｋをそれぞれ送信する。これらのアクノリッジ信号は、信号の送出側の処理ユニットに対して「信号ＡおよびＢの値はドントケアである」と通知するメッセージである。そして、ステップ３１において、ＰＵ１０は、対応するドントケア了解応答のダミーの入力信号ＡｄまたはＢｄ（ＰＵ１０ａおよび１０ｂにおいてはダミーの出力信号）を待つ。
【００５５】
したがって、このＰＵ１０は、信号の送受信を確認するハンドシェイクプロトコルとして以下の４つのタイプを持つ。
タイプ１）  入力信号ＡｄまたはＢｄを受信すると、ＰＵ１０は、それらの入力信号ＡｄまたはＢｄの供給元の入力側のＰＵ１０ａまたは１０ｂに宛ててアクノリッジ信号ＡｋまたはＢｋを送信する。
タイプ２）  ＰＵ１０は、未受信の入力信号ＡｄまたはＢｄの供給元の入力側のＰＵ１０ａまたは１０ｂに宛てて不用通知（ドントケア通知）としてアクノリッジ信号ＡｋまたはＢｋを送信し、ＰＵ１０ａまたは１０ｂからダミーの入力信号ＡｄまたはＢｄを受信する。
タイプ３）  ＰＵ１０は、出力信号Ｙｄを送信し、送信先の出力側のＰＵ１０ｙからアクノリッジ信号Ｙｋを受信する。
タイプ４）  出力信号Ｙｄが未送信のときにアクノリッジ信号Ｙｋを受信すると、ＰＵ１０は、ドントケア通知として認識し、ダミーの出力信号Ｙｄを送信する。
【００５６】
タイプ１およびタイプ３のハンドシェイクは通常のデータパルスの送受信に関するものである。タイプ２およびタイプ４のハンドシェイクは、ドントケア通知をデータパルスとアクノリッジパルスを用いて伝播しようとするためのものである。
【００５７】
入力側のＰＵ１０ｂが正規の入力信号Ｂｄを出すと同時に、ＰＵ１０が「入力Ｂの値はドントケアである」という通知のアクノリッジ信号Ｂｋを出すかもしれない。そのケースでは、送出側のＰＵ１０ｂはアクノリッジ信号Ｂｋを正規の受領応答と勘違いする。受取側のＰＵ１０は入力信号Ｂｄをドントケア了解応答と勘違いする。そうやって互いに勘違いしても、ユーザークロック１サイクル分のハンドシェイクが完了したことに変わりは無く、システム１の動作に何ら支障はない。したがって、この勘違いを防ぐために何らかの対策を講じる必要はない。
【００５８】
図６に示したフローチャートをさらに詳しく説明する。ステップ３１において、ＰＵ１０が受信すべき信号を待つ。ＰＵ１０が受信する信号は、入力信号ＡｄおよびＢｄ、さらに出力信号のアクノリッジ信号Ｙｋである。いずれかの信号を受信すると、ＰＵ１０は、ステップ３２において、その信号により、ある信号の一回分のハンドシェイクが完了したか否かを判断する。ハンドシェイクのタイプは上記の４つである。事前にいずれかの信号が送出されており、その受領確認の信号を受信したのであれば、ユーザークロック１サイクル分のハンドシェイク（タイプ１またはタイプ３）が完了しただけである。したがって、ＰＵ１０は、ステップ３１に戻って次の信号を待つ。
【００５９】
ただし、ステップ３２において、ハンドシェイクが完了した場合、ステップ４３において、キューイング用のメモリ１４に、ハンドシェイクが完了したデータ線に関して送信を待っている信号の有無を確認する。送信を待っている信号があれば、ＰＵ１０は、ステップ４４において、その信号を送出する。例えば、入力信号Ａｄを連続して受信し、１番目および２番目の入力信号Ａｄにより入力信号Ｂｄがドントケアになるとする。この場合、まず、ＰＵ１０は、１番目の入力信号Ａｄに対応する未入力の入力信号Ｂｄに対してドントケア通知用のアクノリッジ信号Ｂｋを出力し、そのハンドシェイクが終了するまで、２番目の入力信号Ａｄにアクノリッジ信号Ａｋを出さずに、状態を保持しても良い。
【００６０】
一方、ＰＵ１０は、２番目の入力信号Ａｄに対してアクノリッジ信号Ａｋを先行して送信しても良い。この場合、ＰＵ１０は、入力側のＰＵ１０ｂに対する２番目のドントケア通知をキューイング用のメモリ１４に格納することが可能である。これにより、ＰＵ１０ａおよびその上流の処理ユニットにおいては処理が進む。この場合、ステップ３２において、ＰＵ１０は、最初のドントケア通知のアクノリッジ信号Ｂｋに対して、入力信号Ｂｄを受信した段階で、ステップ４４において、キューイング用のメモリ１４に格納された次のドントケア通知のアクノリッジ信号Ｂｋを出力することができる。このドントケア通知により、ＰＵ１０ｂおよびその上流側の処理ユニットの処理を進めることができる。
【００６１】
出力信号Ｙｄにおいても同様である。１番目および２番目の入力信号Ａｄに対して入力信号Ｂｄがドントケアであれば、１番目および２番目の入力信号Ａｄにより１番目および２番目の出力信号Ｙｄが決まる。したがって、１番目の出力信号Ｙｄを送信すると共に、２番目の出力信号Ｙｄをキューイング用のメモリ１４に格納する。ステップ３２で、ＰＵ１０は、１番目の出力信号Ｙｄに対するアクノリッジ信号Ｙｋを確認すると、ステップ４４において、次の出力信号Ｙｄを送信できる。
【００６２】
また、以下に示すように、信号を受信しながら、処理を進めることができずアクノリッジ信号を送信せずにイベントトークンの状態で保持している信号がありうる。その場合は、ステップ４８において次の信号の受信を待たずに、保持している信号の処理を開始する。
【００６３】
受信した信号によりハンドシェイクが完了しない場合は、新しいサイクルが開始されたことになる。まず、ステップ３３において、キューイング用のメモリ１４がフル寸前であったり、連続した受信が認められない設定であると、ＰＵ１０は、確認応答を行ってハンドシェイクすることができない。このため、ステップ４９において、ＰＵ１０は、その受信した信号をイベントトークンとしてキューイング用のメモリ１４に格納し、次の信号を待つ。すなわち、メモリ１４は、出力信号を生成するために他の入力信号を要する受信済みの入力信号を格納するとともに、その入力信号も含めて、他のイベントトークンとなる信号を格納する。
【００６４】
ステップ３４において、受信した信号が、入力信号ＡｄまたはＢｄであればデータ入力である。受信した信号が、アクノリッジ信号Ｙｋであれば、それはドントケア通知である。入力信号であれば、ＰＵ１０は、ステップ３５においてアクノリッジ信号ＡｋまたはＢｋを出力する。
【００６５】
ステップ３６において、ＰＵ１０は、受信した入力信号が、他方の入力信号を不用（ドントケア）にするものであるか否かを判断する（第１の要因の判断）。ドントケアの入力信号が発生すると、ＰＵ１０は、ステップ３７において、その未受信の入力信号に対してドントケア通知を送信できるか否か判断する。例えば、上記のように入力信号Ａｄを連続して受信した場合は、ＰＵ１０は、入力側のＰＵ１０ｂに対してアクノリッジである入力信号Ｂｄを受信するまで２番目のドントケア通知となるアクノリッジ信号Ｂｋを出力できない。したがって、ステップ４５において、ＰＵ１０は、入力側のＰＵ１０ｂに対するドントケア通知をキューイング用のメモリ１４に格納し、ステップ４４において送信する。ドントケアとなった入力信号の供給元となる入力側の処理ユニットに対してドントケア通知を送信できる状況であれば、ＰＵ１０は、ステップ３８においてアクノリッジ信号を送信する。
【００６６】
ステップ３９において、ＰＵ１０は、出力信号Ｙｄが決定されるか否かを判断する。受信した入力信号により、未受信の入力信号がいずれもドントケアでなければ、未受信の入力信号が受信されるまで出力信号Ｙｄは決定されない。このため、ステップ４６において、ＰＵ１０は、入力状態をメモリ１４で保存し、次の信号を待つ。なお、未受信である複数の入力信号の一方の入力信号がドントケアとなっても、出力信号Ｙｄが決定されない論理がある。例えば、セレクタである。その場合も、ＰＵ１０は、入力状態をメモリ１４で保存し、次の信号を待つ。
【００６７】
出力信号Ｙｄが決定されるのであれば、ＰＵ１０は、ステップ４０において、出力信号Ｙｄを送信できる状態か否かを確認する。出力できるときは、ステップ４１において、ＰＵ１０は、出力信号Ｙｄを送信する。上述したように、入力信号Ａｄを連続して受信することにより出力信号Ｙｄが連続して決定されたような状態では、ステップ４０において、２番目の出力信号Ｙｄの送信が不可と判断される可能性がある。その場合は、ステップ４７において、ＰＵ１０は、送信ができない出力信号Ｙｄをキューイング用のメモリ１４に格納し、ステップ４４において送信する。
【００６８】
なお、ステップ４１において、出力信号は、ドントケア通知が通知されていない出力側の処理ユニットにのみ送信される。すなわち、ドントケア通知が通知されている出力側の処理ユニットには出力信号は送信されない。それと共に、後述するステップ５４において、キューイング用のメモリに格納されていた、他の出力側の処理ユニットからのドントケア通知は解除される。この機能は、１出力タイプかつ１ファンアウトのＰＵ１０およびそれを用いたシステムにおいては省くことができる機能である。一方、この機能は多出力やマルチファンアウトのＰＵおよびそれらを含むシステムで必要である。例えば、片方の出力側のＰＵからドントケア通知が来てドントケア了解応答を返した後で、入力信号Ａｄが来て出力信号が決まった場合は、他方の出力側のＰＵにのみ、正規の出力信号が送信される。
【００６９】
ＰＵ１０が正規の出力信号Ｙｄを出すと同時に、出力側のＰＵ１０ｙが「出力Ｙの値はドントケアである」という通知のアクノリッジ信号Ｙｋを出すかもしれない。そのケースでは、入力信号のときと同様に、互いにハンドシェイクタイプを勘違いすることになる。しかしながら、システムの動作に何ら支障はない。したがって、この勘違いを防ぐために何らかの対策を講じる必要はない。
【００７０】
上述したように、ステップ３４において、受信した信号が、アクノリッジ信号Ｙｋであれば、それはドントケア通知である（第２の要因の判断）。したがって、ステップ５２において、ＰＵ１０は、アクノリッジ用のダミーの出力信号Ｙｄを出力する。それと同時に、ステップ５７において、ＰＵ１０は、未受信の入力信号の供給元のＰＵ１０ａおよび／または１０ｂに対して、ドントケア通知となるアクノリッジ信号Ａｋおよび／またはＢｋを送信する。ドントケア通知を受信して上流（入力側）に転送する処理により、ドントケア通知を上流に伝播あるいは逆流することができる。
【００７１】
ドントケア通知を逆流するプロセスにおいて、ドントケア通知Ｙｋが連続して到来する可能性がある。図６に示されているステップ５５においては、ＰＵ１０は、ドントケア通知を逆流する入力側の処理ユニット毎に、ドントケア通知を送信できるか否かを判断する。先行するドントケア通知に対するハンドシェイクが完了していない場合は、ステップ５６において、ＰＵ１０は、ドントケア通知をキューイング用のメモリ１４に格納する。その場合、ステップ５７においては、先行するドントケア通知についてハンドシェイクが完了している処理ユニットに対してのみドントケア通知が送信される。
【００７２】
また、図６に示されているステップ５３および５４は、１出力タイプかつ１ファンアウトのＰＵ１０では省くことができる機能である。多出力ないしマルチファンアウトの処理ユニットにおいて、入力信号がドントケアとなるのは、典型的には、全ての出力信号がドントケアになった場合である。したがって、ＰＵ１０が多出力の処理ユニットの場合は、ステップ５３において、上流に対するドントケア通知の送信の可否を判断する。全ての出力側の処理ユニットからドントケア通知が通知されていない場合は、ステップ５４において出力側からのドントケア通知をキューイング用のメモリ１４に格納し、次の信号を待つ。
【００７３】
論理部１２の論理が２入力ＡＮＤであり、入力信号Ａｄが「０（偽）」であれば、他方の入力信号Ｂｄはドントケアとなる。論理部１２の論理が２入力ＯＲであり、入力信号Ａｄが「１（真）」であれば、他方の入力信号Ｂｄはドントケアとなる。これらのケースでは、他方の入力信号がドントケアになると共に、出力信号Ｙｄは決定される。したがって、２入力のＰＵ１０としては、ドントケアの発生の判断と、出力信号の決定の判断とを１つのステップで行うことができる。
【００７４】
これらのＰＵ１０の内部動作のうち、ハンドシェイクに関する制御はハンドシェイク機能１７が行う。また、ステップ３６から３８において、ドントケア通知を発生するための制御は第１の判断機能１８が行う。さらに、ステップ５２から５７におけるドントケア通知を逆流するための制御は第２の判断機能１９が行なう。
【００７５】
２入力１出力のＰＵ１０を複数組み合わせることにより、多入力の論理を実現する処理ユニットを構成することができる。あるいは、処理ユニットとして多入力のものを用意することも可能である。例えば、論理部１２の論理が２ｔｏ１セレクタであり、入力信号としてセレクタ制御信号を含めて３つの信号が入力される処理ユニットを構成できる。このケースでは、セレクタ制御信号が入力信号Ａｄを選択すれば入力信号Ｂｄはドントケアになる。しかしながら、出力信号Ｙｄは入力信号Ａｄを受信するまで決まらない。したがって、ステップ３９を設けておくことが望ましい。
【００７６】
論理部１２の論理が２入力ＸＯＲであれば、両方の入力信号ＡｄおよびＢｄが決まらないと出力信号Ｙｄは決まらない。したがって、一方の入力信号により他方の入力信号はドントケアにならない。このため、ＰＵ１０の内部動作の内、第１の判断機能１８によるステップ３６から３８の処理を省くことが可能であり、ドントケア通知に関しては、ステップ５２以降の逆流させる処理が主となる。
【００７７】
論理部１２がＮＯＴのときは、１入力なのでＰＵ１０の一方の入力のみが利用される。このため、内部処理のフローはさらに単純となる。すなわち、ＰＵ１０の内部動作の内、ステップ３６から３８の処理を省くことが可能である。ドントケア通知に関しては、ステップ５２以降の逆流させる処理だけになる。また、ＮＯＴゲートを自己同期型の素子として実装する場合は、ＰＵ１０を採用して、このフローチャートを律儀に実行する回路を作るまでもない。
【００７８】
図７は、ＮＯＴゲートを自己同期型の素子として実装する異なる例である。この図に示すように、ＮＯＴゲートとしては、プラスパルスをマイナスパルスに、マイナスパルスをプラスパルスに変換する電圧インバータ６２を備えた素子６１を実装するだけでもよい。ただし、電圧反転処理に時間がかかる場合は、図６のフローチャートを律儀に実行するほうが、Ａｋアクノリッジパルスを早めに返すことができる分だけシステム全体の性能にとって有利になる。
【００７９】
自己同期型のシステムにおける信号分岐（マルチファンアウト）は、通常の同期式回路とは異なる。同期式回路の場合、図８（ａ）のように、単純に線を接続するだけで信号を分岐できる。自己同期式の素子においては、図８（ｂ）のように、論理上の信号は物理的にはデータ線とアクノリッジ線のペアであり、単純に線をつなぐだけでは論理上の信号を分岐することはできない。１つの方法は、信号発生源のＰＵ１０にステップ５３〜５４の機能を搭載してマルチファンアウト対応することである。他の方法は、信号分岐用の処理ユニット６３を接続することである。分岐用の処理ユニット６３は論理部６３ｃを持つ。論理部６３ｃの内部動作は、図６に示したフローチャートにおいて、ステップ５２以降の、特に、多出力用として説明した処理を含み、ステップ３６からステップ３９の入力信号によりドントケアの発生を判断する処理を含まないものとなる。
【００８０】
１入力１出力（１ファンアウト）のバッファ回路は、論理上は何の働きも持たない。しかしながら、バッファ回路は、現実の実装においては、同期式回路の信号分岐や長距離信号伝送の補助のために用いられる。自己同期型のシステム１においては、このようなバッファはもっぱら長距離信号伝送の補助のために用いられる。１入力１出力のバッファ用に、２入力１出力のＰＵ１０を割り当てることも可能である。あるいは、図９に示すように、バッファ回路専用の処理ユニット６４を実装することができる。１入力１出力（１ファンアウト）のバッファ用の処理ユニット６４は、論理部６４ｃを持つ。論理部６４ｃの動作は、図６に示したフローチャートにおいて、ステップ３６からステップ３９の入力信号によりドントケアの発生を判断する処理を含まず、ステップ５２以降のドントケア通知を逆流する処理（マルチファンアウト用の処理を含まない）を含む。
【００８１】
バッファ用の処理ユニット６４は、入力信号Ａｄが到着した時点でアクノリッジ信号Ａｋを返し、ドントケア通知（アクノリッジ信号）Ｙｋが到着した時点でドントケア了解応答（出力信号）Ｙｄを返す。これにより、バッファ無しで長距離ハンドシェイクするのに比べて、ハンドシェイクのターンアラウンドタイムを削減でき、システムが高速に動作するようになる。
【００８２】
図６に示した自己同期式の処理ユニットの制御方法は、他の論理を実装する回路、例えば、多入力ＡＮＤゲートやＮＡＮＤゲートやＡＮＤ−ＯＲ複合ゲート等にも適用可能である。したがって、このＰＵ１０は、再構成機能１６により、論理部２の論理をフレキシブルに変更した場合であっても、自己同期式のサービスを提供できる。さらに、ＰＵ１０は、入力インターフェイス１１および出力インターフェイス１３を介して入力側および出力側の処理ユニットの接続を変更でき、システム１としてはルーチングマトリクス５を再構成できる。このため、非同期型のシステム１は、様々な回路あるいはデータパスをフレキシブルに実装しでき、データパスをダイナミックに再構成することにより様々なアプリケーションを実行できる。
【００８３】
多数のＰＵ１０を含むシステム１の一例は、ＰＵ１０の論理を変更することにより、多段の組み合わせ論理回路を実装できるものである。このシステムにおいては、論理回路を評価する際に、入力段から出力段に向かって「データ−＞アクノリッジ」というハンドシェイクが行われていくだけでなく、出力段から入力段に向かって「ドントケア通知→了解応答」というふうにハンドシェイクを逆流させることもできる。このため、従来のセルフタイムド設計実装方式の弱点であったハンドシェイクオーバヘッド問題を低減することができる。
【００８４】
この設計手法は、デバイス製造者に対して、「パルスが伝送途中で消失したり増殖したりしない」という保証だけでなく、「２つのパルスが伝送途中で入れ換わったり合体したりしない」という保証をも要求する。なぜなら、ある処理ユニットが、あるクロックサイクル用にドントケア了解応答用のダミー出力信号Ｙｄのデータパルスを出した後、その信号Ｙｄが出力側のＰＵ１０ｙに届く前に、ＰＵ１０が次のクロックサイクル用の正規の出力信号Ｙｄのデータパルスを出す可能性があるからである。その状況では、出力信号Ｙｄを伝送するデータ線上に２つのパルスが同時に存在することになり、それらのパルスが伝送途中で入れ換わったり合体したりすると、受取側のＰＵ１０ｙは誤動作してしまう。したがって、誤動作を防ぐためには、パルスが伝送途中で入れ換わったり合体したりしないという保証が必要である。しかしながら、「パルスが伝送途中で入れ換わったり合体したりしないことを保証せよ」という要求はきわめて合理的であり、デバイス製造者にとって特に負担になるような制約ではない。このシステム１においては、そのような制約を考慮した回路設計を行うだけで、ハンドシェイク逆流によるオーバヘッド低減を達成できる。
【００８５】
また、上記のＰＵ１０を用いたシステム１では、データ線が１線（１本）で構成できるように、データ線をプラス電源とマイナス電源の２電源仕様として説明している。図３に示した２線式の自己同期素子、すなわち、単一電源のデータ線２本１組という仕様の処理ユニットを用いたシステムでも、「ハンドシェイク逆流機能付き同期式回路実装用セルフタイムド素子」を構築することは可能である。ただし、その場合、デバイス製造者に対して、上記の保証を要求した上さらに、「２本１組のデータ線に相次いで送り出されたパルスは、受信側素子に同じ順序で届く」という保証も要求する。
【００８６】
たとえば、出力信号Ｙｄを、信号線Ｙ０およびＹ１の２本１組の単一電源データ線で伝送する場合を考える。送出側の素子があるクロックサイクル用にドントケア了解応答用のダミーの出力信号としてパルス信号Ｙ０を出した後、それが受取側の素子に届く前に、送出側の素子が次のクロックサイクル用に正規のパルス信号Ｙ１を出す可能性がある。パルス信号Ｙ０を伝送するデータ線より、パルス信号Ｙ１を伝送するデータ線のほうが極端に短くて、後出しのパルス信号Ｙ１の方が先に受取側素子に届いてしまう可能性がある。そのケースでは、受取側の素子はパルス信号Ｙ１をドントケア了解応答用のダミーの出力信号とみなし、続いて届くパルス信号Ｙ０の方を次のクロックサイクル用の正規データパルスとみなす。このため、システムは誤動作する。このような誤動作を防ぐためには、後出しパルスが先に到着することのないよう、信号Ｙ０を伝送するデータ線と、信号Ｙ１を伝送するデータ線の配線長や負荷容量を注意深くそろえて製造する必要がある。
【００８７】
本例のように、データ線が２電源仕様であれば、出力信号Ｙｄは１線で伝送される。このため、上記のような設計あるいは製造上の問題はなく、デバイス製造者に対する要求を緩和できる。デバイスの種類あるいは製造者により、２電源仕様の方が、データ線の配線長や負荷容量を注意深くそろえて製造することよりも種々の負担が大きいケースでは、単一電源データ線２本１組方式を採用すればよい。
【００８８】
さらに、上記のＰＵ１０を採用したシステム１においては、データ線やアクノリッジ線で信号をやりとりするために、パルス（パルス信号）を用いている。これに対し、公知の４フェーズハンドシェイクや２フェーズ（トランジションシグナリング）ハンドシェイクを、ベースのハンドシェイクとして用いて、「ハンドシェイク逆流機能付き同期式回路実装用セルフタイムド素子」を構築することは可能である。ただし、４フェーズハンドシェイクは、２フェーズハンドシェイクやパルス方式と比べてハンドシェイクターンアラウンド時間が長く、性能面で好ましいとはいえない。一方、２フェーズハンドシェイクは、２電源（データ線１本）仕様で実現しようとしたときにやや強引なタイミング保証・タイミング調整が必要になる。したがって、ハンドシェイク逆流機能付きセルフタイムド素子を最小限のタイミング制約でわかりやすく破綻なく説明するには、上述した２電源仕様のパルスハンドシェイク方式が適している。
【００８９】
さらに、ＰＵ１０では、受信した各信号による処理を可能な限り進めるようにしている。その１つの方法は、図６のステップ３３、４８および４９に示したように、連続して信号を受信したときに、その事実をイベントトークンとして記憶するが、確認応答のアクノリッジ信号を送信しないことである。
【００９０】
たとえば、入力側のＰＵ１０ａからの入力信号Ａｄにより出力信号Ｙｄが決まり、入力側のＰＵ１０ｂに対してドントケアを通知するアクノリッジ信号Ｂｋを送信し、出力側のＰＵ１０ｙに対して出力信号Ｙｄを送信すると、ＰＵ１０は、了解応答の出力信号Ｂｄまたはアクノリッジ信号Ｙｋを待つ状態になる。このとき、さらに、入力側のＰＵ１０ａから入力信号Ａｄを受信すると、入力信号Ａｄが来たという事実をイベントトークンとしていったんメモリ１４に記憶する。次に、ＰＵ１０が、所望の入力信号Ｂｄおよびアクノリッジ信号Ｙｋを受信してステップ３２におけるハンドシェイクが完了する。このとき、すでに、次の入力信号Ａｄのイベントトークンが存在するので、ＰＵ１０は、直ちにステップ３４に移る。それと同時にトークンを消す。このイベントトークンは、信号Ａｄ、ＢｄおよびＹｋそれぞれにつき最大１個でよい。データ受領のアクノリッジ信号またはドントケア了解の応答を返さない限り、処理されない信号がさらに繰り返し受信されることはないからである。
【００９１】
ＰＵ１０では、受信した各信号による処理を進める２つの目の方策として、キューイング用のメモリ１４を設けている。ＰＵ１０は、キューイング用メモリ１４を利用できる限り、受信した信号に対して了解応答を送信する。すなわち、ステップ３３においては、例えば、入力信号Ａｄに対する受領アクノリッジ信号Ａｋを返さないことにより、「アクノリッジを返してないから再び入力Ａｄが来ることはあり得ない」のを利用して、他の信号、例えばアクノリッジ信号Ｙｋを待つ。これに対し、入力信号Ａｄを送出したＰＵ１０ａは、受領アクノリッジ信号Ａｋを待っている。したがって、アクノリッジ信号Ｙｋの受信を待たずに、アクノリッジ信号Ａｋを返すことにより、送出側のＰＵ１０ａの処理を進めさせることができる。一方、受信した入力信号Ａｄにより出力されることになる信号は、ステップ４５または４７においてキューイング用のメモリ１４にストアされ、送信待ちになる。
【００９２】
また、ドントケア通知のアクノリッジ信号Ｙｋを続けて受信するような場合を考える。具体的には、最初のアクノリッジ信号Ｙｋに対して、ドントケア了解応答として出力信号Ｙｄが送信され、その後の２番目のドントケア通知のアクノリッジ信号Ｙｋに対しては、入力側のドントケア了解応答待ちになる。これに対し、２番目のアクノリッジ信号Ｙｋに対しても、ドントケア了解応答として出力信号Ｙｄを送信することにより、出力側のＰＵ１０ｙの処理を進めさせることができる。ただし、ステップ５５および５６において、先行するドントケア通知に対して了解応答が得られていない処理ユニットに対するドントケア通知は、キューイング用のメモリ１４に格納され、送信待ちになる。
【００９３】
図１０〜図１３は、図９に示したバッファ回路のＰＵ６４において、入力信号および出力信号が送受信されるタイミングを示している。図１０は、ＰＵ６４が、入力信号Ａｄを４回受信して、その都度、出力信号Ｙｄとして送信するという動作を４回繰り返したタイムチャートである。
【００９４】
図１１において、ＰＵ６４は、最初のデータは図１０と同じ素直なタイミングで処理する。ＰＵ６４が２番目のデータを処理する際は、２番目のアクノリッジ信号Ｙｋより３番目の入力信号Ａｄを先に受け取った。このケースでは、アクノリッジ信号を先行して送信しない設定としている。このため、ステップ４９において、ＰＵ６４はイベントとしてキューイングし、２番目のアクノリッジ信号Ｙｋパルスを待つ。２番目のアクノリッジ信号Ｙｋを受信すると、ステップ３２において、ＰＵ６４はそれを受け取り次第、ステップ４８からステップ３５およびステップ３９に移行し、３番目のアクノリッジ信号Ａｋと３番目の出力信号Ｙｄを送信する。次の３番目のアクノリッジ信号Ｙｋについての動作も同様である。４番目のアクノリッジ信号Ｙｋは、出力信号Ｙｄに続いて受信したので、ＰＵ６４はイベントとしてキューイングせずに素直なタイミングで処理する。
【００９５】
図１２において、ＰＵ６４は最初のデータは図１０と同じ素直なタイミングで処理する。ＰＵ６４が２番目のデータを処理する際は、２番目のアクノリッジ信号Ｙｋより３番目の入力信号Ａｄを先に受け取った。このケースでは、２段階のキューイングとなっており、ＰＵ６４は１番目の信号に係る処理の途上で受信した２番目の信号にはアクノリッジ信号を先行して送信し、３番目の信号はイベントとしてキューイングするように設定されている。このため、ＰＵ６４は、ステップ４７の待ちに入り、次に、２番目のアクノリッジ信号Ｙｋを受け取ったステップ３２からステップ４４に移行し、３番目の出力信号Ｙｄを送信する。次に、ＰＵ６４は、３番目のアクノリッジ信号Ｙｋを受信する前に、上記と同様に４番目の入力信号Ａｄを受信するので、上記と同様に動作する。ＰＵ６４は、４番目のアクノリッジ信号Ｙｋを受信する前に、５番目の入力信号Ａｄを受信し、さらにそれに続いて６番目の入力信号Ａｄを受信する。このため、ＰＵ６４は、５番目の入力信号Ａｄに対しては５番目のアクノリッジ信号Ａｋを送信すると共に、ステップ４７の待ちに入る。ＰＵ６４は、６番目の入力信号Ａｄに対してはアクノリッジ信号Ａｋを送信せずに、ステップ４９の待ちに入る。その後、ＰＵ６４は、４番目のアクノリッジ信号Ｙｋを受信すると、ステップ４４により５番目の出力信号Ｙｄを送信する。それと共に、ＰＵ６４は、ステップ４８からステップ３５に移行して、６番目の入力信号に対するアクノリッジ信号Ａｋを送信する。
【００９６】
その後、ＰＵ６４は、５番目のアクノリッジ信号Ｙｋの前に、７番目の入力信号Ａｄを受信した。このため、ＰＵ６４は、ステップ４９の待ちに入り、５番目のアクノリッジ信号Ｙｋを待って、６番目の出力信号Ｙｄと７番目のアクノリッジ信号Ａｋを送信し、７番目の出力信号Ｙｄは、ステップ４７の待ちに入る。次に、ＰＵ６４は、６番目のアクノリッジ信号Ｙｋを待って、ステップ４４で７番目の出力信号Ｙｄを送信し、７番目のアクノリッジ信号Ｙｋを受信する。このように、ＰＵ６４は、２番目のアクノリッジ信号Ａｋを返した後で、３番目の入力信号Ａｄをすぐに受信した場合でも、論理を破綻させることなく処理することができる。このイベントトークンのキューイング処理は、自己同期型の回路設計手法において、スラックなどと呼ばれている技術を参照できる。
【００９７】
図１３は、ドントケア通知を逆流させる状態を示す図である。この図１３は、図１２と同じキューイングの条件で、出力側のＰＵ１０ｙが先行して動作する。したがって、図１３と図１２は、上下が反転した状態となり、図１２の説明のステップ３５がステップ５２にとなり、ステップ４７がステップ５６となる以外は同様に説明できる。
【００９８】
イベントトークンの処理は重要である。アクノリッジ信号Ａｋや出力信号Ｙｄを出す処理も、微小とはいえ所定の時間がかかり、その微小な期間に入力信号Ａｄやアクノリッジ信号Ｙｋを受信することがあり得るからである。そのときは、それらの信号をイベントトークンとしてメモリ１４にいったん記憶しておき、次のステップにて直ちに処理すべきである。また、入力信号Ａｄとアクノリッジ信号Ｙｋを同時に受信した場合も、片方だけ受信してもう一方を無視することはできない。したがって、直ぐには処理できない一方の信号はイベントトークンとして扱う。この場合、どちらを先に受信しても、残ったイベントトークンを元に次のステップを直ちに処理すれば、同じ結果が得られる。イベントトークンは１入力につき最低１個サポートすれば良い。しかしながら、アクノリッジ信号を返して、２個以上をキューイングすればスラックに対応できてさらに高性能なＰＵ１０およびシステム１を提供できる。
【００９９】
以上は、組み合わせ論理を実装するための自己同期式の処理ユニットである。したがって、フリップフロップを実装するための自己同期式の素子を提供することにより、同期式のユーザー回路を、自己同期式のシステムに実装できる。フリップフロップは、バッファ回路と同様の１入力１出力の処理ユニットにおいて、出力信号Ｙｄを初期値０で送信することからスタートして、出力信号Ｙｄ→アクノリッジ信号Ｙｋのハンドシェイクと、入力信号Ａｄ→アクノリッジ信号Ａｋのハンドシェイクを１回ずつ行う。これにより、アクノリッジ信号Ｙｋにより、ラッチされた入力信号を出力するという同期式ユーザー回路の１クロックサイクルに相当するフリップフロップの動作を実現できる。
【０１００】
図１４は、フリップフロップ（ＦＦ）の基本的な内部動作のフローチャートである。図１５は、逆流ハンドシェイクに対応したフリップフロップ（ＦＦ）の内部動作のフローチャートである。まず、基本動作は、上述したように、ステップ７１において、ＦＦは、出力信号Ｙｄを初期値０で送信することからスタートし、ステップ７２において、入力信号Ａｄまたは出力側のアクノリッジ信号Ｙｋを待つ。ステップ７３において、ＦＦは、出力アクノリッジ信号Ｙｋより先に、入力信号Ａｄを受信すると、ステップ７４において入力アクノリッジ信号Ａｋを送信する。ステップ７５で、ＦＦは、出力アクノリッジ信号Ｙｋを待ち、ステップ７６において出力信号Ｙｄを送信する。一方、入力信号Ａｄより先に出力アクノリッジ信号Ｙｋを受信すると、ＦＦは、ステップ７７において入力信号Ａｄを待つ。ステップ７８において、ＦＦは、出力信号Ｙｄを送信すると共に、入力アクノリッジ信号Ａｋを送信する。
【０１０１】
入力信号ＡｄおよびＡｋの扱いは、図６の基本フローで扱っているタイプ１のハンドシェイクと同じ考え方である。出力信号ＹｄおよびＹｋの扱いは、外部から見れば図６の基本フローにおけるタイプ３のハンドシェイクと同じで、「あるサイクル用のデータＹｄを出力してからそれに対応するアクノリッジＹｋを受ける」という動作である。しかしながら、図１４においては、あたかも「次サイクル用データの受け入れ準備が整ったことを示す送信許可信号（見方を変えれば送信リクエスト信号）Ｙｋを受信し、それに対する応答として次サイクル用のデータ信号Ｙｄを出力する」という新たなタイプのハンドシェイクであるかのように扱っている。そうはいっても、根底に流れる考え方は図６に示したフローと共通である。したがって、図６のフローを実現するＰＵ１０にフリップフロップ機能を盛り込むことが可能である。また、フリップフロップ機能を備えたＰＵ１０を含むシステム１を構築することが可能である。
【０１０２】
図１４の基本フローでは、入力信号Ａｄとして受け取った入力値Ａは、次のクロックサイクル用の出力信号Ｙｄとして出力されることになる。そのため、１クロックサイクルの範囲内でしか考えていない図１４の基本フローでは、入力信号Ａをドントケア扱いすることはなく、ハンドシェイクによるドントケア通知の逆流は生じない。しかしながら、ステップ７７において、あるクロックサイクルの入力信号Ａｄを待っている間に次のクロックサイクル用のドントケア通知パルスであるアクノリッジ信号Ｙｋが来たならば、次のクロックサイクルの出力信号Ｙｄはドントケアということであり、現クロックサイクルの入力信号Ａｄもドントケアということである。
【０１０３】
図１５は、そのケースでハンドシェイクを逆流させる内部動作を示したフローチャートである。ステップ８１において、入力信号Ａｄではなくアクノリッジ信号Ｙｋを受信すると、ＦＦは、ステップ８２で判断し、ステップ８３において、ドントケア了解応答のダミーの出力信号Ｙｄと、ドントケア通知のアクノリッジ信号Ａｋを送信する。さらに、ステップ８４において、ダミーの入力信号Ａｄを受信する。これにより、ハンドシェイクによりドントケア通知の逆流を実現する。この内部動作は、図６に示したＰＵ１０のステップ５２以降のドントケア通知を逆流する動作と同じであり、図１５に示した内部動作も、ＰＵ１０により実現できる。
【０１０４】
自己同期型のフリップフロップにおいても、処理をシーケンシャルに進める入力信号Ａｄあるいはアクノリッジ信号Ｙｋを待っているタイミングで、所望でないアクノリッジ信号Ｙｋあるいは入力信号Ａｄを受信することがある。これらは、ＰＵ１０において、イベントトークン扱いして記憶することが可能である。また、スラックに対応してキューイングメモリ１４に格納することも可能である。フリップフロップは、信号処理の分野でユニットディレイと呼ばれている通り、遅延付きのバッファである。このため、自己同期型のフリップフロップを導入することにより、自己同期型のシステムの遅延耐性を強化できる。
【０１０５】
図１６は、以下の論理式（１）を実現する組合せ論理回路である。図１７は、図１６に示した回路を、２入力ＡＮＤゲートと、２入力ＯＲゲートと、ＮＯＴゲートとで構築し、複数のＰＵ１０を備えたシステム１に実装できる回路に変換したものである。信号分岐については、専用の信号分岐用処理ユニット６３を使うことにし、回路図にも明記している。図１６に示した論理回路は、多入力ゲートや複合ゲートの自己同期型の回路素子により実装することも可能である。
Ｚ＝！Ｘ１＆Ｘ２＆Ｘ３＋Ｘ１＆！Ｘ２＋Ｘ１＆！Ｘ３    ・・・（１）
【０１０６】
図１８（ａ）〜（ｈ）に、比較例として、図１７に示した回路において、ドントケア通知を逆流する機能を用いずに、自己同期式で実行する際のハンドシェイクの進み具合を示している。図示した回路中の配線の１本は、データ線とアクノリッジ線との組であり、データパルス（入力信号および出力信号）と、アクノリッジパルスとが行き来すればハンドシェイクが完了する。なお、以下では、全ての配線と、個々の処理ユニットにおける処理が同じ遅延であると仮定している。
【０１０７】
図１８に示したように、ハンドシェイクによるドントケア通知の逆流機能がない場合、各処理ユニットは、全入力のハンドシェイクが完了してから出力値を確定して出力のハンドシェイクを行う。本図および以下においては、ハンドシェイクが完了した配線を、値が「１」なら太い実線、値が「０」なら太い一点鎖線で示している。図１８（ａ）において入力（Ｘ１、Ｘ２、Ｘ３）にそれぞれ（１、０、１）のデータパルスが発生し、ハンドシェイクが完了したとすると、以降、図１８（ｂ）から図１８（ｈ）まで、単位時間ごとに処理ユニット間のハンドシェイクが１段ずつ消化され、７単位時間後に、出力Ｚとして「１」が出る。
【０１０８】
図１９（ａ）〜（ｅ）に、ハンドシェイクによるドントケア通知の逆流機能を用いた場合の、ハンドシェイクの進み具合を示している。逆流ハンドシェイク（ドントケア通知＆了解）が生じた配線を太い破線で表している。図１９（ｂ）までは図１８と同じ動作となる。図１９（ｃ）では、ＰＵ１０ｃがハンドシェイク逆流機能を使ってドントケア通知を発生している。ＰＵ１０ｃは２入力ＡＮＤであり、その下側入力ＣＢが「０」であることがわかったので、出力信号ＣＹｄは「０」に確定する。したがって、このサイクルで、出力信号ＣＹｄを出力し、さらに、未受信の入力ＣＡをドントケア扱いとし、ハンドシェイクを逆流させている。
【０１０９】
図１９（ｄ）においては、ＰＵ１０ｃの入力側、すなわち上流のＰＵ１０ｄが、出力のドントケア通知を受けて、未受信の入力ＤＡをドントケア扱いとする。このため、ドントケア通知のアクノリッジ信号ＤＡｋが出力される。このとき、その入力側のＰＵ１０ｅが出力ＥＹに正規データパルスを出そうとしていたところだったので、ドントケア通知のアクノリッジ信号と、正規の出力信号が入れ違いになる。すなわち、ＰＵ１０ｄでは、正規の出力信号をドントケア了解応答とみなし、ＰＵ１０ｅでは、ドントケア通知をデータ受領のアクノリッジ信号とみなす。
【０１１０】
図１９（ｅ）では、最終段の２入力ＯＲのＰＵ１０ｆにおいて、上側入力ＦＡにより出力ＦＹが確定する。したがって、下側入力ＦＢの入力側のＰＵ１０ｇに対し、ドントケア通知を送信してハンドシェイクを逆流させようとしている。この場合も、ＰＵ１０ｇは、出力信号を送信しようとしているので、ドントケア通知のアクノリッジ信号と、正規データパルスと入れ違いになり、双方のＰＵ１０ｆおよび１０ｇにおいてハンドシェイクが完了する。
【０１１１】
これらの図からわかるように、図１７の回路を実行するのに、ハンドシェイク逆流機能がなければ、図１８に示すように８単位時間かかる。一方、ハンドシェイク逆流機能があれば、図１９に示すように、図１７の回路の実行は５単位時間で済む。ハンドシェイク逆流が起こるか起こらないかは信号の値に依存する。したがって、ハンドシェイク逆流機能があれば図１７の回路を常に５単位時間で実行できるというわけではない。たとえば、入力（Ｘ１、Ｘ２、Ｘ３）が（１、１、０）の場合は、ハンドシェイク逆流機能があっても８単位時間かかる。しかしながら、自己同期式のシステムにおいては、同期回路設計の考え方と異なり、「ハンドシェイク逆流機能があろうとなかろうと、８単位時間相当のクロック周期を確保しなければならないから、ハンドシェイク逆流機能の効果はない」と判断されることはない。自己同期式のシステムではグローバルクロックはない。このため、固定のクロック周期というものは存在せず、その時々の状況に応じてハンドシェイクが済み次第、ユーザークロック１サイクル相当の処理完了とみなして次に進むことができる。したがって、自己同期型の回路１７においては、ハンドシェイク逆流機能があれば、入力（Ｘ１、Ｘ２、Ｘ３）が（１、０、１）のときは５単位時間でユーザークロック１サイクル分の処理を終えて次に進むことができ、そのケースの出現頻度に応じてシステム性能が向上することになる。
【０１１２】
図２０（ａ）〜図２２（ｄ）（図２０（ａ）〜（ｅ）、図２１（ａ）〜（ｄ）、図２２（ａ）〜（ｄ））は、図１９に示した自己同期式の回路においてハンドシェイクが進行する状況をさらに詳しく示している。これらの図において、右向きの三角マークは、データ線のパルス、すなわち入力信号および出力信号（以降では、入力データパルスおよび出力データパルス）である。黒塗りマークは論理「１」を表す正規パルス、斜線のマークは論理「０」を表す正規パルスである。また、白抜きマークは、ドントケア了解応答のダミーパルスである。左向きの三角マークは、アクノリッジ線のパルスで、すなわちアクノリッジ信号（以降では、入力アクノリッジパルスおよび出力アクノリッジパルス）である。黒塗りマークは論理「１」のデータ受領応答パルス、斜線のマークは論理「０」のデータ受領応答パルスである。また、白抜きマークは、ドントケア通知パルスである。
【０１１３】
これらの図においては、パルスが送出側の処理ユニットを出てから受取側の処理ユニットに到達するまで１単位時間かかり、処理ユニットがパルスを受け取ってアクションを起こすのに１単位時間かかると想定している。さらに、処理ユニットは、複数のパルスを同時に受信したときに、１単位時間で全パルス分のアクションを行えると想定している。また、ハンドシェイク逆流機能について、各処理ユニットは、入力信号のデータパルスと、ドントケア通知の出力側からのアクノリッジ信号とを同時に受け取ったときに、ドントケア処理を優先すると想定している。
【０１１４】
これらの想定に基づいて図２０（ａ）〜図２２（ｄ）を説明する。図２０（ａ）〜図２２（ｄ）は単位時間毎の状態遷移を示している。まず、図２０（ａ）の時刻ｔ１で、入力（Ｘ１、Ｘ２、Ｘ３）に（１、０、１）のデータパルスが発生する。図２０（ｂ）の時刻ｔ２で、それらのパルスが信号分岐の処理ユニットに到着する。図２０（ｃ）の時刻ｔ３で、信号分岐の処理ユニットがアクションを起こし、入力アクノリッジパルスと出力データパルスを発生する。図２０（ｄ）の時刻ｔ４で、信号分岐の処理ユニットの入力アクノリッジパルスが入力信号の発生源に到着する。同時に、信号分岐の処理ユニットの出力データパルスが受取側の処理ユニットに到着する。図２０（ｅ）の時刻ｔ５で、ＰＵ１０ｃは、ドントケア通知パルスを発生し、逆流させる。
【０１１５】
図２１（ａ）の時刻ｔ６で、ＰＵ１０ｄにドントケア通知パルスが到着し、図２１（ｂ）の時刻ｔ７で、ＰＵ１０ｄは、さらに、ドントケア通知パルスを逆流させる。図２１（ｃ）の時刻ｔ８で、ＰＵ１０ｄと１０ｅとの間で、正規の出力データパルスと、ドントケア通知パルスとの間でハンドシェイクが成立し、ドントケア通知の逆流は止まる。図２１（ｄ）の時刻ｔ９で、最終段のＰＵ１０ｆが、出力データパルスを出力すると共に、ドントケア通知パルスを発生し、逆流させる。
【０１１６】
図２２（ａ）の時刻ｔ１０で、ＰＵ１０ｆおよび１０ｇとの間で、正規の出力データパルスと、ドントケア通知パルスとの間でハンドシェイクが成立する。図２２（ｃ）の時刻ｔ１２で、最終段のＰＵ１０ｆと出力信号の受け取り側とのハンドシェイクが終了し、図２２（ｄ）の時刻ｔ１３に、この回路の出力信号が確定する。以上では、全ての配線遅延が同じと想定したが、配線遅延が配線ごとに異なっていても回路は正しく実行されるし、同じ配線の遅延が状況ごとにばらついても回路は正しく実行される。また、説明のため入力（Ｘ１、Ｘ２、Ｘ３）の値を固定しているが、入力のハンドシェイクが終了した時刻ｔ５以降に、新たな値を入力することにより、新たな演算を開始できる。
【０１１７】
図２３は、フリップフロップ付き順序回路の例である。具体的には、図２３は、３ビットカウンターを通常の同期式設計記述で記述したものである。図２４の回路は、図２３のカウンターを、２入力論理素子と、ＮＯＴゲート素子と、信号分岐素子と、フリップフロップＦＦとを含む構成に変換したものである。したがって、図２４の回路は、２入力１出力の自己同期式のＰＵ１０を含むシステム１に実装することができる。図２４の回路図において、配線１本が、データ線とアクノリッジ線のペアを表すことは上記と同様である。
【０１１８】
図２５（ａ）〜図３１（ｄ）（図２５（ａ）〜（ｄ）、図２６（ａ）〜（ｄ）、図２７（ａ）〜（ｄ）、図２８（ａ）〜（ｄ）、図２９（ａ）〜（ｄ）、図３０（ａ）〜（ｄ）、図３１（ａ）〜（ｄ））に、図２４に示した回路を、自己同期で、ハンドシェイク逆流機能を用いて実行した状態を示している。図２５（ａ）〜図３１（ｄ）は、単位時間毎の状態遷移を示している。なお、カウンター回路は１回実行して終わりというものではなく、繰り返し実行する。したがって、データパルス、アクノリッジパルスおよびドントケア通知パルスにより回路の動きを示している。また、フリップフロップを表す四角の中には、そのフリップフロップがユーザークロックの何サイクル目の値を保持しているかを示している。
【０１１９】
図２５（ａ）に示した時刻Ｔ１で３つのフリップフロップから初期値０が出力される。それらが図２５（ｄ）に示した時刻Ｔ４で出力信号を受信する処理ユニットに届く。図２６（ｄ）に示した時刻Ｔ８で、出力Ｚ１のフリップフロップ（カウンターＬＳＢ）のデータ入力にパルスが到着する。図２７（ａ）に示した時刻Ｔ９で、出力Ｚ１のフリップフロップだけユーザークロックサイクル１の処理に進む。
【０１２０】
図２７（ｃ）に示した時刻Ｔ１１で、出力Ｚ２のフリップフロップは、ユーザークロックサイクル１の処理に更新される。図２８（ｃ）に示した時刻Ｔ１５で、出力Ｚ３のフリップフロップ（カウンターＭＳＢ）は、ユーザークロックサイクル１の処理に更新される。その間、出力Ｚ１のフリップフロップの周辺のＮＯＴゲートの処理ユニットにおいて、ユーザークロックサイクル１の処理が進む。このため、図２９（ａ）に示した時刻Ｔ１７で、出力Ｚ１のフリップフロップは、ユーザークロックサイクル２の処理に進む。
【０１２１】
図２９（ｃ）に示した時刻Ｔ１９において、出力Ｚ２のフリップフロップは、ユーザークロックサイクル２の処理に進む。出力Ｚ１のフリップフロップの処理に対して、出力Ｚ２のフリップフロップの処理の遅れは僅かであるが、出力Ｚ３のフリップフロップの処理の遅れは大きい。このため、図３１（ａ）に示した時刻Ｔ２５で、出力Ｚ１のフリップフロップは、先行して、ユーザークロックサイクル３の処理に進む。これに対し、図３１（ｃ）に示した時刻Ｔ２７で、出力Ｚ３のフリップフロップは、ようやくユーザークロックサイクル２の処理に進む。時刻Ｔ２７では、出力Ｚ２のフリップフロップがユーザークロックサイクル３の処理に進む。このため、出力Ｚ３のフリップフロップは、出力Ｚ２のフリップフロップに対して１周遅れ（出力Ｚ１のフリップフロップに対しては１周以上の遅れ）となる。
【０１２２】
このように、非同期のシステム１に実装された３ビットカウンターの回路においては、出力Ｚ１のフリップフロップと、出力Ｚ２のフリップフロップは、出力Ｚ３のフリップフロップに対してどんどん先行して処理が進む。しかしながら、その差は無制限に拡大していくわけではない。これらのフリップフロップの処理の差がある程度まで広がると、出力Ｚ１およびＺ２のフリップフロップに関連する回路と、出力Ｚ３のフリップフロップに関連回路とをつなぐ信号分岐の処理ユニット（図２４におけるＰＵ１０ｈおよび１０ｉ）がアクノリッジパルスを返さなくなる。このため、出力Ｚ１およびＺ２のフリップフロップ関連の回路はそれ以上先行して処理を進むことができなくなる。したがって、それ以降は、出力Ｚ３のフリップフロップが１サイクル分進むたびに信号分岐のＰＵ１０ｈおよび１０ｉが１回ずつアクノリッジパルスを返し、それに応じて、出力Ｚ１およびＺ２のフリップフロップも１サイクル分ずつ処理を進める。処理ユニットのイベントトークンをキューイングするメモリ１４に２つ以上のイベントトークンを記憶することにより、出力Ｚ１およびＺ２のフリップフロップが先行して処理を進める限度を増やすことができる。
【０１２３】
図２５（ａ）〜図３１（ｄ）に示した自己同期式のシステムの動作において、図２６（ｃ）に示した時刻Ｔ７、図２７（ａ）に示した時刻Ｔ９などにおいて、ドントケア通知パルスが発生し、ハンドシェイク逆流機能が有効に活用されていることがわかる。とくに、図２９（ｃ）の時刻Ｔ１９で、２入力ＡＮＤのＰＵ１０ｊが発生したドントケア通知パルスは、図３０（ａ）の時刻Ｔ２１において２入力ＡＮＤのＰＵ１０ｋの入力ドントケア通知パルスとして伝播している。これらの図により、多段論理を実行するためのハンドシェイク処理が、出力段から入力段へと逆流している様子が見て取れる。このハンドシェイク逆流機能により、多段論理全体の実行時間が短縮され、システム性能が向上する。
【０１２４】
図２５（ａ）〜図３１（ｄ）に示したカウンター回路の動作において、３つのフリップフロップが異なるタイミングで動いたのは、各フリップフロップの次値を計算するロジックの複雑度に差があったからというのが主たる要因である。加えて、それぞれのフリップフロップの出力信号を受取側の処理ユニットが、それぞれの出力信号を異なるタイミングでハンドシェイクしているという要因がある。出力信号を受信する処理ユニットを、「３つの信号が揃うまでアクノリッジを返さない」という構成にすることも可能である。そのような構成にすると、３つのフリップフロップの直後の信号分岐の処理ユニットは異なるタイミングでは動作せず、３つのフリップフロップも、上記のように異なるタイミングで処理が進むこともない。
【０１２５】
自己同期型のシステムに対する入力信号についても同様に考えることができる。図２３および図２４に示したカウンター回路の例では、「システム全体に対する入力信号」が存在しない。システム全体に対する入力信号が存在する場合には、それらの入力信号が同期してハンドシェイクされる構成であれば、システム内部のフリップフロップも無制限に異なるタイミングで動作することはなく、動作するタイミングの差は、ある程度に収まる。このような動作を利用し、システム１の入出力信号のハンドシェイクを止めてしまえば、システム１の内部はある程度、すなわち、来なくなった入力信号に依存しない分だけ、あるいは、出せなくなった出力信号により処理が進まなくなるまで進んだあと、ストールする。その後、システム１の入出力信号のハンドシェイクを再開すれば、システム１は続きから処理を再開する。
【０１２６】
このように、同期式回路において、グローバルクロックを止めたり再開したりするのに相当する処理を、グローバルクロックの存在しない自己同期式のシステム１においては、システム１、あるいはシステム１に部分的に構成された回路の入出力信号のハンドシェイクを止めたり再開することにより実現できる。したがって、自己同期式のシステム１において、データフローの処理を一時的に停止して、処理ユニットのロジックを変更したり、処理ユニットの接続を変更することにより、システム１に実装されるデータフローをダイナミックに再構成することが可能となる。
【０１２７】
また、このシステム１において、ＰＵ１０を接続するルーチングマトリクス５を構成するデータ線およびアクノリッジ線は、元々の同期式回路の１サイクルに相当する処理の間に１回だけパルスの伝送を行う。したがって、元々の同期式回路を普通に同期式に実装した場合や、２線式の自己同期設計方式で自己同期回路を実装した場合のように、素子遅延や配線遅延のアンバランスによってスパイクが大量に発生して電力を消費することも抑制できる。
【０１２８】
このように、本発明の一形態は、同期式設計で使われるＡＮＤゲート、ＯＲゲート、ＮＯＴゲート、フリップフロップなどの回路素子をグローバルクロック不要のセルフタイムド方式で実装する。そして、同期式ユーザー回路の信号１本につき、セルフタイムド素子ではデータ線とアクノリッジ線の２本の信号を割り当て、かつ、データ線のほうはプラス電源とマイナス電源の２電源を用いる。データ線においては、プラスのパルス１回で１クロックサイクル分の論理“１”、マイナスのパルス１回で１クロックサイクル分の論理“０”を表す。アクノリッジ線においては、１パルスで１クロックサイクル分のアクノリッジを表す。
【０１２９】
１電源を用いた２線式のセルフタイムド素子は、出力値を変えなければならない時のみ出力信号を伝送する。本発明の一形態の１線式のセルフタイムド素子は、出力値を変える−変えないに関わらず、ユーザークロック１サイクル分の処理につき１回、出力信号を伝送する。これは、同期式ユーザー回路の、「全ての信号線が１クロックサイクルに１回ずつ値の伝送を行う」という性質を反映している。したがって、本発明の一形態のセルフタイムド素子を組み合わせて構築した回路システムにおいては、全てのデータ線／アクノリッジ線で１回ずつハンドシェイクが行われるたびに、同期式ユーザー回路のユーザークロック１サイクル分の処理が進む、とみなせばよい。
【０１３０】
さらに、ハンドシェイクは、通常は、まず信号送出側素子が信号受取側素子に対してデータパルスを出し、データパルスを受け取った受取側素子が送出側素子に対してアクノリッジパルスを返す、という手順をとる。しかしながら、受取側素子が多入力素子の場合、他の入力信号の値によっては注目信号の値がドントケアになるケースがある。そのケースにおいては、先に受取側素子が送出側素子に対してアクノリッジパルス（意味としてはドントケア通知）を出し、それを受け取った送出側素子が任意のデータパルス（意味としてはドントケア了解応答）を返すことにより、ハンドシェイク１回とみなす。
【０１３１】
各素子は、ある入力によって他の入力がドントケアになった場合に他の入力にドントケア通知を出すだけでなく、入力信号が来るよりも先に出力信号のドントケア通知が来た場合にも入力信号にドントケア通知パルスを出す。これにより、多段論理を実行する際に、入力段から出力段に向かって次々と値が確定していく素直なハンドシェイクだけでなく、上述したように、出力段から入力段に向かって次々とドントケアが伝播していく逆流のハンドシェイク（ハンドシェイク逆流機能）が生じる。
【０１３２】
本発明の一形態によれば、グローバルクロックを使わずにクロック同期式回路を実装できるため、従来のクロック同期式実装と比べクロックスキュー調整やクリティカルパス調整の工数を省略できる。さらに、２線式のセルフタイムド設計実装方式と比べると、広く普及している同期式設計の考え方で回路設計できるという効果がある。また、多段組み合わせ論理回路を評価する際に、入力段から出力段に向かって「データ→アクノリッジ」というハンドシェイクが行われていくだけでなく、出力段から入力段に向かって「ドントケア通知→ドントケア了解応答」というハンドシェイクを逆流させることもできる。このため、従来のセルフタイムド設計実装方式の弱点であったハンドシェイクオーバヘッド問題も低減される。さらに、論理上の１クロックサイクル内に各信号線で１回だけ伝送が行われるので、従来のクロック同期式実装やセルフタイムド設計実装のように、素子遅延のバラツキによって大量のスパイクが発生して電力を消費するような事態も抑制できる。
【０１３３】
なお、上記では、自己同期式のＰＵ１０の内部動作をフローチャートの形で示したが、状態遷移図やプロダクションルールなど、他の表記で説明することも可能である。また、汎用的な自己同期式のＰＵ１０を有するシステム１を上記において説明している。これに対し、専用のロジックを備えた自己同期式の処理ユニットあるいは自己同期素子を組み合わせて、ハンドシェイク逆流機能を備えた自己同期式の回路を構成することも可能である。さらに、自己同期式の処理ユニットあるいは素子は、配線により接続されていなくても良く、電気信号あるいは光信号を無線あるいは有線により伝達することにより自己同期式実装を実現できる。また、自己同期式のシステムは配線遅延、素子遅延のアンバランスによる影響を克服できるシステムであり、インターネットなどのコンピュータワークなどで複数のシステムあるいは処理ユニットが接続された、分散型の大規模システムに対しても上記の構成を適用できる。
【図１】
2007037384.tif 000003
【図２】
2007037384.tif 000004
【図３】
2007037384.tif 000005
【図４】
2007037384.tif 000006
【図５】
2007037384.tif 000007
【図６】
2007037384.tif 000008
【図７】
2007037384.tif 000009
【図８】
2007037384.tif 000010
【図９】
2007037384.tif 000011
【図１０】
2007037384.tif 000012
【図１１】
2007037384.tif 000013
【図１２】
2007037384.tif 000014
【図１３】
2007037384.tif 000015
【図１４】
2007037384.tif 000016
【図１５】
2007037384.tif 000017
【図１６】
2007037384.tif 000018
【図１７】
2007037384.tif 000019
【図１８】
2007037384.tif 000020
【図１９】
2007037384.tif 000021
【図２０】
2007037384.tif 000022
【図２１】
2007037384.tif 000023
【図２２】
2007037384.tif 000024
【図２３】
2007037384.tif 000025
【図２４】
2007037384.tif 000026
【図２５】
2007037384.tif 000027
【図２６】
2007037384.tif 000028
【図２７】
2007037384.tif 000029
【図２８】
2007037384.tif 000030
【図２９】
2007037384.tif 000031
【図３０】
2007037384.tif 000032
【図３１】
2007037384.tif 000033
【国際調査報告】
2007037384.tif 000034
2007037384.tif 000035