(57)【要約】  本発明の実施形態には、集積回路開発用のシステムが含まれる。この開発システムの要素には、ハードウェアオブジェクトとソフトウェアオブジェクトが含まれる。これらのオブジェクトは、ソフトウェア環境においてインスタンス化され、整列され、パラメータが決められ、接続されることにより異なる機能を実現する。ソフトウェアにおいては、その記述により１組のオブジェクトのトポロジと特性、ひいては機能全体が定義される。これらのオブジェクトは１組のプリミティブオブジェクトから階層的に構成されている。予め確立され、カプセル化されたハードウェアオブジェクトとして設定されたプリミティブオブジェクトをモデル化することができるハードウェアを使用すれば、トポロジと特性とが、所望の実行機能を発揮できるハードウェアを定義する。本発明の実施形態を用いれば、回路設計者は、ハードウェアまたはハードウェアデザインについてほとんど知識がなくても、あるいは全く知識がなくても、高レベルなソフトウェア記述だけでハードウェアシステムを設計することができる。【選択図】図２９
2007526539.tif 000002
【特許請求の範囲】
【請求項１】
データセットと、前記格納されたデータセットの有効性を示す信号と、前記格納されたデータセットのグループ内における前のデータセットと次のデータセットに対するメンバシップを示す信号とを格納する複数の第１の記憶素子と、
前記記憶素子内の値を前記次のデータセットに置換できることを示す更新入力信号と、
を備えた、チップ上のハードウェアレジスタ。
【請求項２】
データコピーセットと、前記格納されたデータコピーセットの有効性を示す信号と、前記データコピーセットのグループ内における他のデータセットに対するメンバシップを示す信号とを格納する複数の第２の記憶素子と、
前記入力信号を記憶し、前記更新入力信号から１サイクル分遅れた更新出力信号を生成するように構成された付加的記憶素子と、
第１の信号を生成し、前記更新出力信号がアクティブであるときに、新しいデータコピーセットと、前記グループ内におけるメンバシップを示す新しい信号と、前記新しいデータコピーセットの有効性を示す新しい信号とを前記複数の第２の記憶素子にロードするように構成された１以上の第１の論理素子セットと、
第２の信号を生成し、前記更新入力信号がアクティブであり、前記更新出力信号が非アクティブであるときに、前記複数の第２の記憶素子に現在記憶されている前記データコピーセットを前記第１の記憶素子にロードするように構成された１以上の第２の論理素子セットと、
をさらに備えた、請求項１のハードウェアレジスタ。
【請求項３】
前記複数の第１および第２の記憶素子は、エッジでトリガされるフリップフロップである、請求項１のハードウェアレジスタ。
【請求項４】
前記第１の論理素子セットは、
前記データコピーセットのグループ内における他のデータセットに対するメンバシップを表す信号を否定演算した信号に結合された第１の入力と、
前記更新出力信号に結合された第２の入力と、
出力と、
を有するＯＲ機能である、請求項１のハードウェアレジスタ。
【請求項５】
複数の第２のレジスタの出力に結合された第１の入力と、
前記ハードウェアレジスタの主出力に結合された第２の入力と、
複数の第１のレジスタの入力に結合された出力と、
ＯＲゲートの出力に結合された入力と、
を有する多重化装置をさらに備えた、請求項４のハードウェアレジスタ。
【請求項６】
前記格納されたデータセットのグループ内における他のデータセットに対するメンバシップを示す信号を否定演算した信号に結合された第１の入力と、
前記更新入力信号に結合された第２の入力と、
出力と、
を有するＯＲ機能をさらに備えた、請求項２のハードウェアレジスタ。
【請求項７】
前記出力は前記付加的記憶素子の入力に結合されている、請求項６のハードウェアレジスタ。
【請求項８】
前記出力は前記複数の第１の記憶素子のイネーブル入力に結合されている、請求項６のハードウェアレジスタ。
【請求項９】
データの有効性を示し、グループのメンバであるデータの位置を示すデータを第１および第２の記憶素子セットに並行にロードし、
プロトコルレジスタの出力に接続された受信オブジェクトのデータ受け入れ能力を示す第１のaccept信号を受信し、
前記第１のaccept信号の後に受信され、前記受信オブジェクトのデータ受け入れ能力を示す第２のaccept信号を受信し、
前記第１のaccept信号と前記第２のaccept信号とを比較し、
前記第１のaccept信号と前記第２のaccept信号の双方が非アクティブであるときに、両方の記憶素子セット内のデータを保持し、
前記第１のaccept信号と前記第２のaccept信号の双方がアクティブであるときに、新しいデータを前記第１および第２の記憶素子セットに並行にロードし、
前記第１のaccept信号が非アクティブであり、前記第２のaccept信号がアクティブであるときに、前記第１の記憶素子セットから前記第２の記憶素子セットにデータをロードし、
前記第１のaccept信号がアクティブであり、前記第２のaccept信号が非アクティブであるときに、前記第２の記憶素子セット内のデータセットを保持し、新しいデータセットを第１の記憶素子セットにロードする、プロトコルレジスタの実行方法。
【請求項１０】
現在前記第２の記憶素子セット内に記憶されているデータが無効であることを信号が示しているときに、前記第２の記憶素子セットに常に新しいデータをロードする、請求項９の方法。
【請求項１１】
現在前記第１の記憶素子セット内に記憶されているデータが無効であることを信号が示しているときに、前記第１の記憶素子セットに常に新しいデータをロードする、請求項１０の方法。
【請求項１２】
現在前記第１の記憶素子セット内に記憶されているデータが無効であることを信号が示しているときに、前記第１の記憶素子セットに常に新しいデータをロードする、請求項９の方法。
【請求項１３】
グループ内のdata信号のメンバシップを示すグループインジケータと、前記グループ内のdata信号の相対位置とを含む複数のdata信号と、
前記data信号の有効性を示すvalid信号と、
前記複数のdata信号とvalid信号を新しい複数のdata信号に置換できることを示すaccept信号と、
を備えた、データインタフェイスプロトコル。
【請求項１４】
前記accept信号が非アクティブであり、前記valid信号が非アクティブであるときに、前記data信号とvalid信号をさらに置換できる、請求項１３のデータインタフェイスプロトコル。
【請求項１５】
前記グループインジケータは単一のパケット識別子信号である、請求項１３のデータインタフェイスプロトコル。
【請求項１６】
前記パケット識別子信号は、データセットのグループの最終要素でのみ非アクティブにされる、請求項１５のデータインタフェイスプロトコル。
【請求項１７】
次のデータセットのグループにおける最初の要素は、非アクティブ状態からアクティブ状態に遷移した前記パケット識別子信号により決定できる、請求項１５のデータインタフェイスプロトコル。
【請求項１８】
グループ内のdata信号のメンバシップを示すグループインジケータと前記グループ内のdata信号の相対位置とを含む複数のdata信号と、前記data信号の有効性を示すvalid信号と、前記複数のdata信号と前記valid信号を新しい複数のdata信号に置換できることを示すaccept信号とを格納するレジスタを含む入力インタフェイスを備えた、データパイプライン要素。
【請求項１９】
出力インタフェイスをさらに備えた、請求項１８のデータパイプライン要素。
【請求項２０】
順番に接続された請求項１８の複数のパイプライン要素を備え、伝送中の複数のデータセット値を保持可能なデータパイプラインであって、
伝送中のすべてのデータセットのすべてのvalid信号が非アクティブである場合に前記パイプラインは論理的に空とされ、
伝送中のすべてのデータセットのすべてのvalid信号がアクティブである場合に前記パイプラインは満杯とされ、
前記パイプラインが満杯である場合にのみ前記パイプラインに対する入力インタフェイスaccept信号が非アクティブとなる、データパイプライン。
【請求項２１】
第１のグループ内の第１のdata信号のメンバシップを示すグループインジケータと前記第１のグループ内の第１のdata信号の相対位置とを含む複数の第１のdata信号と、前記第１のdata信号の有効性を示すvalid信号と、前記複数の第１のdata信号と前記valid信号を新しい複数の第１のdata信号に置換できることを示すaccept信号とを格納する第１のレジスタを含む第１の入力インタフェイスと、
第２のグループ内の第２のdata信号のメンバシップを示すグループインジケータと前記第２のグループ内の第２のdata信号の相対位置とを含む複数の第２のdata信号と、前記第２のdata信号の有効性を示すvalid信号と、前記複数の第２のdata信号と前記valid信号を新しい複数の第２のdata信号に置換できることを示すaccept信号とを格納する第２のレジスタを含む第２の入力インタフェイスと、
出力インタフェイスと、
前記入力インタフェイスと前記出力インタフェイスとに結合され、前記第１の入力インタフェイスと前記第２の入力インタフェイスのいずれか、または前記第１および第２の入力インタフェイスの双方から受信した完全なデータグループに対してのみ動作するように構成されたジョイン回路と、
を備えた、ジョイン要素。
【請求項２２】
前記ジョイン回路は、前記第１の入力インタフェイスのデータグループと前記第２の入力インタフェイスのデータグループの２つ１組の組み合わせに対して機能するように構成されている、請求項２１のジョイン要素。
【請求項２３】
前記ジョイン回路は、前記第１の入力インタフェイス上のデータグループから先頭データ要素を受信し、前記第２の第２の入力インタフェイス上のデータグループから先頭データ要素を受信した後に前記組み合わせを始めるように構成されている、請求項２２のジョイン要素。
【請求項２４】
前記ジョイン回路は、第１の入力インタフェイス上のデータグループから最終データ要素を受信し、前記第２の入力インタフェイス上のデータグループから最終データ要素を受信した後にのみ前記組み合わせを完了するように構成されている、請求項２２のジョイン要素。
【請求項２５】
前記ジョイン回路は、前記第１の入力インタフェイス上のデータグループおよび前記第２の入力インタフェイス上のデータグループに対して選択機能を行うように構成されている、請求項２１のジョイン要素。
【請求項２６】
前記ジョイン回路は、先に先頭データ要素を提示した方の入力インタフェイスからデータグループを選択するように構成されている、請求項２５のジョイン要素。
【請求項２７】
前記ジョイン回路は、選択された入力インタフェイス上の最終データ要素を受信した後にのみ新たな選択を行うように構成されている、請求項２５のジョイン要素。
【請求項２８】
前記第１および第２の入力インタフェイスの双方は同時に先頭データ要素を提示し、前記ジョイン回路は前記選択を裁定するように構成されている、請求項２６のジョイン要素。
【請求項２９】
前記ジョイン回路は、最も以前に使用された入力インタフェイスを選択するように構成されている、請求項２８のジョイン要素。
【請求項３０】
前記ジョイン回路は、ランダムに入力インタフェイスを選択するように構成されている、請求項２８のジョイン要素。
【請求項３１】
前記ジョイン回路は、優先順位に基づいて入力インタフェイスを選択するように構成されている、請求項２８のジョイン要素。
【請求項３２】
グループ内のdata信号のメンバシップを示すグループインジケータと前記グループ内のdata信号の相対位置とを含む複数のdata信号と、前記data信号の有効性を示すvalid信号と、前記複数のdata信号と前記valid信号を新しい複数のdata信号に置換できることを示すaccept信号とを格納するレジスタを含む入力インタフェイスと、
前記入力インタフェイスに結合され、前記入力インタフェイスから受信した完全なデータグループに対してのみ動作するように構成されたフォーク回路セットと、
第１の出力インタフェイスと、
第２の出力インタフェイスと、
を備えた、フォーク要素。
【請求項３３】
前記フォーク回路は、前記入力インタフェイス上のデータグループを複製し、該複製されたグループを前記第１の出力インタフェイスおよび前記第２の出力インタフェイスに送信するように構成されている、請求項３２のフォーク要素。
【請求項３４】
前記フォーク回路は、前記入力インタフェイス上のグループの先頭data信号を受信した後に複製を開始するように構成されている、請求項３３のフォーク要素。
【請求項３５】
前記フォーク回路は、前記第１の出力インタフェイス上のグループの最終data信号を送信し、前記第２の出力インタフェイス上のグループの最終data信号を送信した後に複製を終了するように構成されている、請求項３３のフォーク要素。
【請求項３６】
一度に１ワードのデータストリームを受け入れるデータインタフェイスであって、
前記データインタフェイスに結合された前段から、メッセージパケット識別子を含む１以上のデータを同時にデータワードとして受け入れる入力と、
前記受け入れられたデータワードの有効性の表示を受け入れる入力と、
前記データインタフェイスに結合された後段が前記データインタフェイスから転送されたデータワードを受け入れ可能であることの表示を受け入れる入力と、
前記後段がデータワードを受け入れ可能であるか、または前記受け入れられたデータワードが有効ではない場合に、前記データインタフェイスに次のデータワードを前記前段からロードさせるように構成されたロード回路と、
前記メッセージパケット識別子から新しいメッセージパケットの開始を検出するように構成されたパケット検出回路と、
を備えた、データインタフェイス。
【請求項３７】
前記パケット検出回路は、１番目のデータワードのメッセージパケット識別子および２番目のデータワードのメッセージパケット識別子におけるデータ遷移状態を検出するように構成されている、請求項３６のデータインタフェイス。
【請求項３８】
前記パケット検出回路は、非アクティブなメッセージパケット識別子をメッセージパケットにおける最終データワードであると認定するように構成されている、請求項３６のデータインタフェイス。
【請求項３９】
前記パケット検出回路は、メッセージパケットにおける最終ワードに続くアクティブなメッセージパケット識別子を次のメッセージパケットの先頭ワードであると認定するように構成されている、請求項３８のデータインタフェイス。
【請求項４０】
送信オブジェクトに結合され前記送信オブジェクトからの情報に関係なく入力accept信号を生成し、前記送信オブジェクトから１以上のメッセージパケットを受け入れるように構成された入力インタフェイスと、
前記入力インタフェイスに結合され、メッセージパケット内のデータセットを受信した後にのみ状態を変化するように構成されたオブジェクトコアと、
前記コアと受信オブジェクトとの間に結合され、前記受信オブジェクトからの情報に関係なくvalidデータ信号を生成し、１以上のメッセージパケットを前記受信オブジェクトに送信するように構成された出力インタフェイスと、
を備えた、基板上のハードウェアオブジェクト。
【請求項４１】
前記受信オブジェクトに送信された１以上のデータパケットは、前記送信オブジェクトから受け入れられた１以上のメッセージパケットと同一のものである、請求項４０のハードウェアオブジェクト。
【請求項４２】
前記送信オブジェクトからのメッセージパケットの１つは、データと、前記データの有効性を示す信号と、メッセージパケット内のメンバシップと前記メッセージパケット内の相対位置とを示す信号とを含む、請求項４０のハードウェアオブジェクト。
【請求項４３】
前記メッセージパケットは複数のデータセットを含む、請求項４０のハードウェアオブジェクト。
【請求項４４】
前記オブジェクトコアは、前記オブジェクトコアのクロックに同期しないメッセージパケットを受信するように構成されている、請求項４０のハードウェアオブジェクト。
【請求項４５】
前記オブジェクトコアは、受信オブジェクトのクロックに同期しないメッセージパケットを送信するように構成されている、請求項４０のハードウェアオブジェクト。
【請求項４６】
前記オブジェクトコアは、
第１の情報に作用するように構成された第１のコア部と、
前記第１のコア部に結合された内部プロトコルインタフェイスと、
前記内部プロトコルインタフェイスに結合され、第２の情報に作用するように構成された第２のコア部と、
を備えた、請求項４０のハードウェアオブジェクト。
【請求項４７】
前記プロトコルインタフェイスは、前記入力インタフェイスと同一の構造である、請求項４６のハードウェアオブジェクト。
【請求項４８】
前記内部プロトコルインタフェイスは、前記ハードウェアオブジェクトに対する第２の入力インタフェイスとなるように構成可能である、請求項４７のハードウェアオブジェクト。
【請求項４９】
前記プロトコルインタフェイスは、前記出力インタフェイスと同一の構造である、請求項４６のハードウェアオブジェクト。
【請求項５０】
前記内部プロトコルインタフェイスは、前記ハードウェアオブジェクトに対する第２の出力インタフェイスとなるように構成可能である、請求項４９のハードウェアオブジェクト。
【請求項５１】
基板上に形成された第１のハードウェアオブジェクトと、
前記基板上に形成された第２のハードウェアオブジェクトと、
前記第１および第２のハードウェアオブジェクトの間に結合され、メッセージデータを格納する第１のデータレジスタと、有効性信号を格納する第２のデータレジスタと、パケットメンバシップ信号を格納する第３のデータレジスタとを含むプロトコルレジスタと、
を備えた、システム。
【請求項５２】
前記第１のハードウェアオブジェクトは前記プロトコルレジスタを含む、請求項５１のシステム。
【請求項５３】
前記プロトコルレジスタは、前記第１のハードウェアオブジェクトおよび前記第２のハードウェアオブジェクトから分離されている、請求項５１のシステム。
【請求項５４】
前記プロトコルレジスタは、前記プロトコルレジスタがデータを受け入れ可能であることを示すaccept信号を前記第１のハードウェアオブジェクトに通過させる、請求項５１のシステム。
【請求項５５】
前記accept信号は、前記第２のハードウェアオブジェクトによって生成される、請求項５４のシステム。
【請求項５６】
前記accept信号は、前記プロトコルが非アクティブvalid信号を受信した後に前記プロトコルレジスタによって生成される、請求項５４のシステム。
【請求項５７】
非同期メッセージを受信することによって呼び出し可能な方法を有し、設定されたハードウェアオブジェクトにより実行されるソフトウェアオブジェクトにおいて、
前記ハードウェアオブジェクトは、
ソフトウェア方法インタフェイスを実現するプロトコルレジスタと、
前記プロトコルレジスタに結合され、メッセージパケットにおけるデータセットを受信した後にのみ状態を変化するように構成され、前記ソフトウェアオブジェクトのすべての方法を実行するように構成されたオブジェクトコアと、
を備えた、ソフトウェアオブジェクト。
【請求項５８】
それぞれ別個のソフトウェア方法インタフェイスを実現する１以上のプロトコルレジスタをさらに備えた、請求項５７のハードウェアオブジェクト。
【請求項５９】
前記オブジェクトコアは、前記１以上のプロトコルレジスタに結合され、ソフトウェア方法を並行して実行するように構成されている、請求項５８のハードウェアオブジェクト。
【請求項６０】
前記オブジェクトコアは１以上の内部プロトコルレジスタを備えた、請求項５７のハードウェアオブジェクト。
【請求項６１】
１以上の前記内部プロトコルレジスタがソフトウェア方法を実現するように構成されている、請求項６０のハードウェアオブジェクト。
【請求項６２】
複数のソフトウェアオブジェクトが並行して実行可能である、請求項６１のハードウェアオブジェクト。
【請求項６３】
前記ソフトウェアオブジェクトを実現するために連係して実行される１以上のハードウェアオブジェクトをさらに備えた、請求項５７のハードウェアオブジェクト。
【請求項６４】
ソフトウェア方法を実現するように構成された１以上の内部プロトコルレジスタを有する第２のハードウェアオブジェクトをさらに備え、前記第１のハードウェアオブジェクトの全部と前記第２のハードウェアオブジェクトの一部が前記ソフトウェアオブジェクトを実現するために連係して実行される、請求項５７のハードウェアオブジェクト。
【請求項６５】
ソフトウェア方法を実現するように構成された１以上の内部プロトコルレジスタを有する第２のハードウェアオブジェクトをさらに備え、前記第１のハードウェアオブジェクトの一部と前記第２のハードウェアオブジェクトの一部が前記ソフトウェアオブジェクトを実現するために連係して実行される、請求項６１のハードウェアオブジェクト。
【請求項６６】
複数のハードウェアオブジェクトを含むシステム上で機能を実行する方法であって、
１以上の前記ハードウェアオブジェクトに非同期メッセージを送り、ソフトウェアオブジェクト方法を呼び出す、方法。
【請求項６７】
それぞれメッセージパケットに対して動作し、比較的類似した電気的負荷特性を有する複数のハードウェアオブジェクトの記述のライブラリと、
前記ライブラリを参照し、コマンドを受け入れ前記記述の１つのインスタンスを作成するとともに、コマンドを受け入れ２以上の前記作成されたインスタンスをリンクするように構成されたモデラーと、
を備えた、集積回路開発システム
【請求項６８】
前記ライブラリは、ソフトウェアオブジェクトのコレクションをさらに有する、請求項６７の開発システム。
【請求項６９】
前記ソフトウェアオブジェクトのコレクションは、階層の下部に複数のプリミティブオブジェクトを有し、階層的になっており、それぞれのプリミティブオブジェクトは、物理的ハードウェアオブジェクトの１以上の部分と関連づけられている、請求項６８の開発システム。
【請求項７０】
前記ソフトウェアオブジェクトのコレクションの１つは、任意の数の複数のプリミティブオブジェクトを有することが可能であり、前記１つのソフトウェアオブジェクトの関連づけは、前記プリミティブオブジェクトの関連づけをまとめることにより生成される、請求項６９の開発システム。
【請求項７１】
前記作成されたインスタンスのすべてについて出力ファイルを生成するように構成されている出力モジュールをさらに備えた、請求項６７の開発システム。
【請求項７２】
前記出力ファイルはコンパイルなしで実行可能である、請求項７１の開発システム。
【請求項７３】
前記出力ファイルはソフトウェアオブジェクトである、請求項７１の開発システム。
【請求項７４】
前記ライブラリはソフトウェアオブジェクトのコレクションを有し、前記出力ファイルは前記ライブラリに追加可能で、ソフトウェアオブジェクトとして利用可能である、請求項７１の開発システム。
【請求項７５】
物理的にインスタンス化されたハードウェアオブジェクトのコレクションをプログラムする方法であって、
前記インスタンス化されたハードウェアオブジェクトの抽象化コレクションであるソフトウェアオブジェクトであって、それぞれ、
前記ソフトウェアオブジェクトにおいて使用されるハードウェアオブジェクトのリストと、
前記リストされたハードウェアオブジェクトを接続するためのルールのリストと、
前記リストされたハードウェアオブジェクトにロードされる指令ファイルと、
を含むソフトウェアオブジェクトのコレクションを受け入れ、
前記物理的にインスタンス化されたハードウェアオブジェクトのコレクションの記述を受け入れ、
前記物理的にインスタンス化されたハードウェアオブジェクトのそれぞれに前記ハードウェアオブジェクトのリストから識別子を割り当て、
前記識別子を用いて前記指令ファイル内のシンボリック情報を置換して、前記物理的にインスタンス化されたハードウェアオブジェクトのコレクション用の初期化ファイルを作成する、方法。
【請求項７６】
前記初期化ファイルをメモリに格納する、請求項７５のシステム。
【請求項７７】
前記メモリは、前記物理的にインスタンス化されたハードウェアオブジェクトの１つである、請求項７６のシステム。
【請求項７８】
前記メモリは、前記物理的にインスタンス化されたハードウェアオブジェクトから分離されている、請求項７６のシステム。
【請求項７９】
前記物理的にインスタンス化されたハードウェアオブジェクトは、起動指令を含む読み出し専用メモリである、請求項７５のシステム。
【請求項８０】
前記物理的にインスタンス化されたハードウェアオブジェクトは、起動指令をロードするように構成された状態機械となるようにリセットされる、請求項７５のシステム。
【発明の詳細な説明】
【関連出願の参照】
【０００１】
本出願は、２００３年６月１８日に提出された「集積回路開発システム」という表題の米国仮特許出願６０／４７９，７５９に基づく優先権を主張するものであり、当該米国仮特許出願の内容は参照により本出願に組み込まれる。
【技術分野】
【０００２】
本件は、集積回路開発システムに係り、特に、ハードウェアオブジェクト、ハードウェアオブジェクトの間でのメッセージを容易にする通信構造、およびハードウェアオブジェクト上におけるソフトウェア表現およびシステムの実行を可能にするシステムを含む集積回路開発システムに関するものである。
【背景技術】
【０００３】
現在のところ、集積回路（ＩＣ）の設計および開発は、非常に難しくコストのかかるプロセスである。今日におけるＡＳＩＣ（特定用途向け集積回路）の手法やＥＤＡ（電子設計自動化）ツールにおいては厳しい制約があるので、新たな製造技術により特別なゲートが提供されても、設計者はそのすべてを効果的に使用することができないため、設計上のギャップがますます広がりつつある。
【０００４】
すべてを注文設計する場合には、たとえキャッシュメモリのように大きな規則正しい構造を設計する場合であっても、非常にコストがかかってしまう。これは、新たな製造技術においては低レベル詳細部の複雑さが指数関数的に増加するので、使用可能時間内に多くの新しい設計をすることができないからである。現在の構造ではＩＣのスピードに限界があるが、配線を長くし、チップの構成部品間の配線をより多くすることがますます必要となっている。このように配線の量が増えることにより、配線中の欠陥を中心とする新たな製造パラダイムが生じる。
【０００５】
１つのダイあたり１０億個程度というトランジスタ密度に向けて製造技術が進み続けるにつれ、設計コストの急激な上昇、検証の手間の指数関数的増加、現在の設計ツール固有の制限、および以前のものを効果的に再利用できないことにより、将来の開発が非常に高価で少数の者にしか利用できないものになるであろうことが明らかになってきている。
【０００６】
図１Ａおよび図１Ｂは、ＡＳＩＣおよびＦＰＧＡ（フィールドプログラマブルゲートアレイ）を用いてＩＣを作成する工程の例を示す。ここでは機能Ａ，Ｂ，Ｃとして示されているシステムモデルを作ることから設計が始められる。このシステムモデルはどのような方法によって作成してもよく、このようなモデリングシステムには、例えばブロック図、統一モデル言語（ＵＭＬ）モデルまたはデータフローチャートが含まれる。システムモデルが完成すれば、人の手によりソフトウェアが記述されるが、これは時間がかかりチェックが難しいものである。このソフトウェア記述は、例えば、Ｃ、Ｃ＋＋、Java、Matlab、Smalltalk、またはSystem Cにより作成することができる。次に、このソフトウェア記述は、システムの論理ゲートモデルを作成するのに使用できるレジスタ転送レベル（ＲＴＬ）記述に人の手により翻訳される。ＲＴＬは、合成を介して論理ゲートモデルを生成するのに使用できるVerilogやVHDLのようなハードウェア記述言語（ＨＤＬ）の一般用語である。ＲＴＬは、ＡＳＩＣ（図１Ａ）やＦＰＧＡ（図１Ｂ）のいずれに対しても使用される。人の手によりソフトウェア記述からＲＴＬに翻訳することは、時間がかかりチェックが難しいものである。ＡＳＩＣについては、合成により論理ゲートモデルが作成されれば、より多くのソフトウェアが使用され、半自動ハードウェアレイアウトツールにより機能を発揮するようにゲートが配置および配線される。配列された後、作成されたパターンは、製造工程において光学効果を生じるように最適化される。この工程を最適化するためには何度も繰り返すことが必要になり、手動で最適化がなされる場合があることに留意されたい。最後に、マスクセットが作成され、特定の設計済みＡＳＩＣを作るためにこのマスクセットが使用される。
【０００７】
図１Ｂからわかるように、ＦＰＧＡを作成するためにも同様の工程がなされる。論理ゲートモデルを製作するためにＲＴＬ記述と合成が用いられる。目標とする部分に物理的にデザインを確実に適合させるためには、何度か繰り返さなければならない場合がある。マッピングが判明すれば、タイミング条件を確実に満足するためにそのデザインの検査がなされる。最初の段階でタイミング設計条件を満足していない場合には、マッピングとタイミング条件の双方が満足されるようにＲＴＬの構造を変更しなければならない。例えば、タイミングの制約条件が確実に満足されるように同じ論理回路を多重に繰り返す必要があることが多いが、ＲＴＬ記述を変更するだけでこれを行うことができる。最後に、ＦＰＧＡ上の各要素の論理マッピングがＲＯＭにロードされる。ＦＰＧＡ装置の電源が入ると、ＲＯＭからすべてのＦＰＧＡ要素が自動的にロードされ、所望の機能が発揮される。
【０００８】
トランジスタや他のＩＣ構成部品のサイズが小さくなっているため、すべてを注文設計した場合には、現在使用されているよりも多くの設計者が必要となり、これにより複雑さが増大し、現在の技術の状況に比べると、開発するのに必要な時間と資力が指数関数的に増加する。ハードウェアの複雑さを軽減し、ハードウェアにおける間違いを検証することを少なくするために、現在の多くのシステムは、ハードウェアとソフトウェアとを混合して使用している。この新しいパラダイムにおいては、プログラム可能なハードウェア上で実行されるソフトウェアを多くの構成部品に関して使用して、装置の製造後に機能性およびバグを修正できるようにすることに対して、パフォーマンスはトレードオフの関係に立つ。このソフトウェアとハードウェアとを共存させて解決法を得るというコデザインプロセスは、ここ２０年広範囲にわたって研究されてきた課題であるが、ほとんど成功していない。
【０００９】
適当な時間内に広範で複雑な設計を行い、これを検証することを確実に行うためには、ハードウェアとソフトウェアの構成要素を広範囲にわたって再利用することが必要不可欠であるが、これは実現不可能なものとされ、一致団結した小さな設計センター内で、限られた意味においてのみなされていたものである。
【００１０】
本発明の実施形態は、従来技術における他の限定にも向けられている。
【発明を実施するための最良の形態】
【００１１】
本発明の実施形態には、集積回路開発用のシステムが含まれる。この開発システムの要素には、ハードウェアオブジェクトとソフトウェアオブジェクトが含まれる。これらのオブジェクトは、ソフトウェア環境においてインスタンス化され、整列され、パラメータが決められ、接続されることにより異なる機能を実現する。ソフトウェアにおいては、その記述により１組のオブジェクトのトポロジと特性が定義される。これらのオブジェクトは他のオブジェクトと階層的に構成されている。最も低いレベルの階層はプリミティブオブジェクトと呼ばれる。その機能を実現し、ソフトウェアオブジェクトの本質的な特性を維持することができるハードウェアを使用すれば、ソフトウェア記述のトポロジと特性とが、所望の機能を発揮できるハードウェアを定義するために必要なすべてのものとなる。本発明の実施形態を用いれば、回路設計者は、ハードウェアまたはハードウェアデザインについてほとんど知識がなくても、あるいは全く知識がなくても、ソフトウェア記述だけでハードウェアシステムを設計することができる。
【００１２】
通信の基本
基本的に、ＩＣ上に形成されたハードウェアオブジェクトは電気信号を用いて互いに通信を行う。電気信号の状態によりデータが定義される。例えば、作動電圧と基準接地電圧の中間点よりも高い電圧値の電気信号は「１」またはHIGHの値を表していると考えることができ、その中間点よりも低い電圧は「０」またはLOWの値であると考えることができる。信号の完全性を確保するために、基準接地電圧に近い限られた範囲の電圧がLOWの値であるとされる。同様に、作動電圧に近い限られた範囲の電圧がHIGHの値であるとされる。これらの範囲の間の電圧は未定義論理状態とされる。
【００１３】
すべての説明および図面において、HIGHの値は信号がアクティブであることを示しており、LOWの値は非アクティブ値であることを示している。信号がアクティブであることは、HIGHまたはLOWという用語によって決まるものではない。
【００１４】
第１の点から第２の点に同時にデータを伝達することができるパラレルデータバスを介してオブジェクト間で多重信号を送ることができる。特定の時間内に送ることのできるデータ量は、バスのデータ幅とデータの状態が更新される頻度によって決まる。
【００１５】
オブジェクト間でデータを送るタイミングと方法を決定するために、データ伝送プロトコルがよく使用される。典型的には、このプロトコル自身は実際の「データ」伝送の一部ではないが、データの特性を示したり、データの伝送を同期したりする。例えば、受信オブジェクトが、ビジー状態でデータを受信できないことを示すことがある。
【００１６】
図２は、受信オブジェクトがデータを受信可能であることを「accept」信号をアクティブにすることにより示す比較的簡単なデータ転送プロトコルを示すタイミングチャートである。同様に、送信オブジェクトは、そのオブジェクトが送っているデータが有効であるか無効なであるかを示す。無効なデータは、値を有しておらず、使用されることもない。
【００１７】
図２からわかるように、HIGHのaccept信号は、受信オブジェクトがデータを受信できることを示している。HIGHのvalid信号は、データが有効な値を有していることを示している。accept信号およびvalid信号がともにHIGHである場合、送信オブジェクトと受信オブジェクトとの間でデータ転送がなされる。図２にはclock信号が示されている。このクロックは、valid信号、accept信号、およびdata信号をその立ち上がりエッジでトリガする。data信号は、１ビットでもよく、同時に送信される数ビットのデータを含んでいてもよい。共通データバス幅は、８、１６、３２、または６４のように２の累乗になっている。
【００１８】
最初のクロックパルスにおいては、図２に示されたclock信号の立ち上がりエッジによりvalid信号のビットがHIGHにされ、data信号が意味のある値であることが示される。しかし、accept信号はLOWであり、これは、受信オブジェクトがデータを受信する準備が整っていないことを示している。data信号は、accept信号がHIGHにあるクロックエッジ４までDATA1という値を保持する。クロックエッジ３でaccept信号はHIGHにされ、受信オブジェクトが受信可能であることが示される。クロックエッジ４では、DATA1というデータが送信オブジェクトから受信オブジェクトに転送される。矢印はデータの転送を示している。クロックエッジ６，７，９では、valid信号とaccept信号がともにHIGHであるため、転送が行われる。他のすべてのクロックエッジにおいては、valid信号とaccept信号の一方もしくは両方がLOWであるため、転送が行われない。図２のクロックにおいては、説明を簡単にするためにクロックエッジにおける遷移が示されている。図２に示す転送プロトコルは、受信オブジェクトが送信オブジェクトの状態を推測的に知ることなく受信の準備が整ったことを示すプリエンプティブクラスのプロトコルの１つである。
【００１９】
図３は、プロトコルレジスタ５０を示すブロック図である。このレジスタは、入力インタフェイスと出力インタフェイスとの間の１組の記憶素子である。図３のインタフェイスは、図２に詳細を示したものと同一のプロトコルを使用している。入力インタフェイスは、in_accept信号を用いて記憶素子５２および５４が更新可能であることを示す。in_acceptがHIGHであれば、in_dataの値を記憶素子５４に格納し、in_validの値を記憶素子５２に格納する。記憶素子５２および５４は、１つ以上の値（valid, data）を保持していてもよいことに留意されたい。出力インタフェイスは、記憶素子５２の最も古い値をout_validに与え、記憶素子５４の最も古い値をout_dataに与える。out_validとout_dataの値は、out_accept信号がHIGHであるときには、次に古い値（valid, data）に変更され、そうでないときには変更されない。記憶素子５６は、out_accept信号の履歴を含んでおり、in_accept信号の次の値を計算するために使用される。
【００２０】
図４は、記憶素子７２，７４，７６，７８を含む別のプロトコルデータレジスタ７０のブロック図である。記憶素子７２，７４，７６は、図３のプロトコルレジスタ５０の記憶素子５２，５４，５６に対応し、同様に動作する。簡潔にするためにこれらの素子についての説明は省略する。記憶素子７８は、パケット識別子の値の履歴も格納するようにレジスタ７０を拡張するものである。図３のレジスタ５０は、２値（valid, data）の履歴を格納したが、図４のレジスタ７０は、３値（valid,（data, packet_id））の履歴を格納する。それぞれの値において、valid値がHIGHであることは、２値（data, packet_id）が意味のあるものであることを示している。valid値がLOWである場合には、２値（data, packet_id）を使用することができないか、または、未定義の結果が生ずる可能性がある。２値（data, packet_id）において、packet_idの値は、より大きなデータグループまたはデータパケットにおけるdata値の位置を示している。パケットメッセージが、パラレルで同時に転送できるデータよりも多くのデータを含んでいる場合、メッセージがいくつかのデータ「ワード」に分割されることが多い。ここでの「メッセージパケット」および「ワード」という用語は、最も広い意味で解釈されるべきであり、特定の構造、フォーマット、または限定を意味するものではない。したがって、１つのメッセージパケットを転送するためには、多数の組のデータまたはワードを送信しなければならない場合がある。
【００２１】
一実施形態においては、packet_idの値は１ビットであるが、より大きなグループやメッセージパケットにおけるデータメンバシップを示すものであってもよいことはもちろんである。特定の実施形態においては、packet_idのLOW値は、それがメッセージパケットの最終ワードであることを示している。packet_idに関して、他のすべてのワードはHIGH値となっている。これを利用して、現在のワードに先行するワードのLOW値のすぐ後にpacket_idのHIGH値が続いていることを検出することで、メッセージパケットにおける先頭ワードを決定することができる。換言すれば、先行するpacket_idにおけるLOW値に続くpacket_idにおける最初のHIGH値は、メッセージパケットにおける先頭ワードを示している。１ビットのpacket_idを用いた場合には、最初と最後のワードのみを決定することができる。
【００２２】
図５は、組み合わせ論理回路を含むプロトコルレジスタ８０を示している。図５のプロトコルレジスタ８０は、図３のプロトコルレジスタ５０と同様であるが、出力インタフェイスに論理回路８７を含んでいる。図５に示す実施形態においては、論理回路８７は、二入力ＯＲゲートである。論理回路８７は、否定演算されたレジスタ８２からのout_valid信号をout_accept信号に組み合わせて、out_validがLOWであっても、常にプロトコルレジスタ８０が次に古い値（valid, data）に更新する。実際の使用における動作を以下に詳細に示す。
【００２３】
図６Ａ〜図６Ｅは、パイプライン９０に組み込んだ一連のプロトコルレジスタ８０の動作を示すブロック図である。パイプライン９０は、Ｒ１〜Ｒ９で示される９つのレジスタを含んでいる。図６Ａ〜図６Ｅのそれぞれは、異なる時間ｔ１〜ｔ５を示している。パイプライン９０は、隣の受信オブジェクト（図示せず）からのout_accept信号を用いている。上述した隣の受信オブジェクトは、データを受信できないときにout_accept信号をLOWにする。ｔ１〜ｔ５におけるout_accept信号は常にLOWであり、その受信オブジェクトがｔ１〜ｔ５の間は受信していないことを示している。図５からわかるように、記憶場所８６は、in_accept信号を算出し、それを隣のレジスタに返信する。例えば、レジスタＲ１のin_accept信号はレジスタＲ２のin_accept信号などとなる。このように、受信オブジェクトからのout_accept信号はパイプライン９０に連続的に送られる。
【００２４】
図６Ａからわかるように、ｔ１の時点では、パイプライン９０は、有効な３つのワードデータＤ１，Ｄ２，Ｄ３を保持している。また、パイプライン９０は、無効であると考えられる他のデータを保持している。有効データは各レジスタにおいて陰付ボックスで示されており、無効データは陰なしボックスで示されている。上述したように、各サイクルにおいて、パイプライン９０は、隣の受信オブジェクトからのout_accept信号を用いている。また、パイプライン９０は、送信オブジェクト（図示せず）からの他の値（valid, data）を受け入れる。図６Ａのｔ１の時点においては、有効な４番目のワードデータＤ４がパイプライン９０に送られつつある。
【００２５】
したがって、ｔ１の時点では、有効なデータＤ１、Ｄ２、Ｄ３を有する３つのワードがあり、これらすべてはパイプライン９０の別個のプロトコルレジスタＲ２、Ｒ５、Ｒ８に格納されている。途中のout_accept信号がHIGHになるサイクルごとに、値（valid, data）は次のレジスタに進む。サイクルｔ１において、レジスタＲ１に与えられたout_acceptがLOWであったとしても、図５の論理回路８７によりＲ１が更新される。サイクルｔ２およびｔ３において、Ｒ２が無効データを含んでいるので、Ｒ２における途中のout_acceptはHIGHのままである。図５の論理回路８７は、パイプライン９０において無効なデータワードを除去し、パイプライン９０の各レジスタＲ１〜Ｒ９が意味のあるデータを格納している場合にのみ処理を停止するように作用する。
【００２６】
論理回路８７の動作は、すべてのレジスタＲ１〜Ｒ９の間で繰り返され、これにより、Ｄ１、Ｄ２、Ｄ３の間にある無効データのすべてがサイクルｔ５までに除去される。これらの無効データは、Ｒ１に与えられたout_accept信号がLOWに保持されていても除去されており、受信オブジェクトはデータを受け入れていないことを示していることに留意されたい。本発明の実施形態によれば、無駄になるところであったサイクルにおいても、パイプラインのデータ処理を有効に継続させることができる。
【００２７】
図７は、プロトコルレジスタ７０（図４）を図５の論理回路８７と組み合わせたプロトコルレジスタ１００のブロック図である。プロトコルレジスタ１００は、図４を参照して説明したそれぞれの信号を格納するために記憶場所１０２，１０４，１０６，１０８を含んでいる。論理要素１０７は、図５の論理回路８７に対応するＯＲ機能を有している。同一の機能を有するゲートのあらゆる組み合わせにより論理要素１０７を構成できることはもちろんである。
【００２８】
図８は、本発明における単一の履歴を有するプロトコルレジスタ１００の実装を示す模式図である。図８のプロトコルレジスタ１００は、クロックのエッジでトリガされる「Ｄ」型フリップフロップとして示される記憶レジスタを含んでいる。さらに、フリップフロップの中には、イネーブルがHIGHのときに立ち上がりエッジで入力値を出力に転送することだけを許可するイネーブル入力を含むものがある。ここでの説明は、動作を説明するために主同期クロック（図示せず）を用いるが、回路は、後述の例において示すような非同期クロックを用いるようになっていてもよい。
【００２９】
Ｄ型フリップフロップ１３２，１３４，１３８は、１セットの値（valid, data, packet_id）を格納することができる第１のレジスタセットを構成している。このレジスタセットを「サイドレジスタ」１３０という。Ｄ型フリップフロップ１２２，１２４，１２８は、別の値（valid, data, packet_id）を格納することができる第２のレジスタセットを構成している。このレジスタセットを「メインレジスタ」１２０という。マルチプレクサ１４２，１４４，１４８は、（in_accept信号がHIGHの場合には）入力から、あるいはin_accept信号がLOWの場合にはサイドレジスタ１３０から、値（valid, data, packet_id）をメインレジスタ１２０にロードする論理セットを構成している。
【００３０】
上述したように、data値の幅は何ビットであってもよい。
【００３１】
論理機能１２７，１３７は、図５の論理回路８７に対応し、その詳細な機能はここでは説明しない。レジスタ１２６は、（論理機能１２７，１３７の動作を無視して）in_acceptになるサイクルまで遅らせたout_acceptのコピーを作成する。
【００３２】
サイドレジスタ１３０には、in_acceptがHIGHであるときに入力３値がロードされ、そうでない場合には、サイドレジスタはそれまでの３値を保持する。マルチプレクサ１４２，１４４，１４８とin_acceptとout_acceptの組み合わせにより、メインレジスタ１２０の動作が制御される。表１はメインレジスタの動作を示す。
【００３３】
【表１】
2007526539.tif 000003
【００３４】
表１は、プロトコルレジスタ１１０に関して４つの状態、すなわち通常、停止中、停止、開始中があることを示している。通常状態は、レジスタが入力インタフェイスから直接出力インタフェイスに次の３値を転送する通常動作を行っている状態である。停止中状態は、出力インタフェイスのout_accept信号がLOWとなって受信オブジェクトがデータを受信できないことを示し、入力インタフェイスのin_accept信号がまだLOWになっていないときに生じる。停止中状態においては、新しい入力３値を受け入れることができ、これはサイドレジスタ１３０に格納される。停止状態は、入力および出力インタフェイスの双方がデータを転送しておらず、レジスタ１２０および１３０の双方がvalidデータで満杯になっている状態である。開始中状態は、出力インタフェイスが最も古い３値を転送するが、入力インタフェイスが停止している状態である。開始状態においては、サイドレジスタ１３０に保持された２番目に古い３値がメインレジスタ１２０に転送される。図９は、プロトコルレジスタ１１０における状態遷移図であり、状態と各状態を変化させるout_accept信号の遷移を示している。
【００３５】
図１０は、長さ５のパケットを構成する３値（valid, data, packet_id）の考えられる２つの組み合わせを示す図である。それぞれの３値はワードＷ１〜Ｗ５として示されている。レジスタ図は、パケットが有効な３値および無効な３値の双方からなることを示しており、陰付ボックスは有効である場合を示している。validがLOWであるとき、data信号と同様にpacket_id信号は未定義である。packet_id信号は、LOWがパケットの最終ワードを示す１ビット信号である。上述したように、packet_idがLOWからHIGHに遷移することにより、パケットにおける先頭ワードが決定される
【００３６】
図１０のパケット図は、有効ワードのみを示すことによりvalid信号の状態を抽象化している。これは、マルチワードパケットに関して最も便利な図である。
【００３７】
図１１は、２つの等長パケット（この場合においてはそれぞれ長さ５のワード）をワードごとに組み合わせる方法を示している。図１０のパケット図において、動作は極めて簡単である。それぞれのワードは個々に組み合わされ、長さ５の新しいパケットが作成される。サイクルごとの挙動はより複雑であり、図１０のレジスタ図は、各パケットにおけるvalid信号が実際の動作にどのように影響するのかを示している。
【００３８】
図１１では、それぞれＡ１〜Ａ５およびＢ１〜Ｂ５と連続的に示された５ワードの２つのパケットＡおよびＢを用いている。図１１の例においては、この組み合わせにより長さ５の新たなパケットが生じ、それぞれの出力ワードはＡ１＋Ｂ１，Ａ２＋Ｂ２，．．．，Ａ５＋Ｂ５となる。
【００３９】
図１１は、Ｔ１からＴ１０の各サイクルにおける動作を示している。サイクルＴ１では、入力ワードＡ１およびＢ１がともに受け入れられ、合計であるＡ１＋Ｂ１が出力される。サイクルＴ１における出力３値（valid, data, packet_id）は（１，Ａ１＋Ｂ１，１）である。サイクルＴ２においては、Ｂ２が有効でないため加算されない。このため、Ａ２は、Ａ２およびＢ２の双方が存在し加算して出力値（１，Ａ２＋Ｂ２，１）を作成可能になるサイクルＴ５までＢ２を待つ。サイクルＴ２，Ｔ３，Ｔ４においては、有効な出力がないため、出力値は、Ｘを未定義の値として（０，Ｘ，Ｘ）となる。サイクルＴ６において、Ａ３とＢ３が利用可能になり、出力値は（１，Ａ３＋Ｂ３，１）となる。サイクルＴ７においては、Ｂ４が入力側にあるが、Ａ４を待たなければならないので、無効な出力値（０，Ｘ，Ｘ）が生成される。サイクルＴ８においては、Ａ４とＢ４が組み合わされ、出力値（１，Ａ４＋Ｂ４，１）が生成される。サイクルＴ９においては、Ｂ５が入力側にあるが、Ａ５を待たなければならないので、無効な出力値（０，Ｘ，Ｘ）が生成される。サイクルＴ１０では、Ａ５とＢ５が受け入れ可能なので、最終ワード（１，Ａ５＋Ｂ５，０）が生成される。
【００４０】
図１１において、packet_idフィールドは、パケットＡワードのpacket_idフィールドのコピーとする、あるいは、パケットＢワードからコピーすることができる。この例においては、パケットは同じ長さでなければならないので、この状況は対称的である。図１１は、無効なワードを、破棄せずに、入ってくるパケットにおける無効なワードの相対位置により出力パケット内で再配置する方法を示している。パケットを組み合わせるためには、最も長いパケット以上の時間が必要である。
【００４１】
図１２は、従来の方法で設計された先入れ先出し（ＦＩＦＯ）要素１４４を図３のプロトコルレジスタ５０に変える方法を示している。従来のＦＩＦＯ要素１４４は、主クロックを用いて同期させてもよく、あるいは、入力インタフェイスと出力インタフェイスで別個に独立した無関係のクロックを用いて非同期にしてもよい。従来のＦＩＦＯ要素１４４は、入力データをＦＩＦＯに入れるpush信号を用いている。ＦＩＦＯが満杯になると、ＦＩＦＯはfull信号を発する。full信号がHIGHのときにpush信号をアクティブにする挙動については、これらの状況では、入力データを破棄する実装もあれば、push信号を単に無視する実装もあるため、定義されていない。同様に、従来のＦＩＦＯ要素１４４は、ＦＩＦＯからデータを出力するためのpop信号を用いている。ＦＩＦＯが空になったときにempty信号が与えられる。push／fullの問題と同様に、empty信号がHIGHのときにpop信号をアクティブにすることは、これらの状況では、未定義値を出力する実装もあれば、pop信号を無視する実装もあるため、定義されていない。
【００４２】
図１２は、論理機能１４０，１４１，１４２，１４３を加えることにより、ＦＩＦＯ要素１４４を図３のプロトコルレジスタ５０に変える方法を示している。in_data信号とout_data信号は、ちょうどＦＩＦＯ要素１４４の入力および出力データポートに対応する。インバータ１４０により、ＦＩＦＯが空でない場合、すなわちＦＩＦＯ要素１４４にデータが存在する場合にout_validがHIGHとなることが保証される。インバータ１４２により、ＦＩＦＯが満杯でない場合、すなわちＦＩＦＯ要素１４４にまだ利用可能なスペースがある場合にin_acceptがHIGHとなることが保証される。２入力ＡＮＤ論理機能１４１および１４３は、ＦＩＦＯ要素１４４が満杯のときにpush=HIGHとなったり、ＦＩＦＯ要素１４４が空のときにpop=HIGHとなったりするような不当状態を排除することにより、ＦＩＦＯ要素１４４の起こりえる未定義の挙動を防止している。
【００４３】
図１３は、図３のプロトコルレジスタ５０、上述したプロトコルレジスタの他の例、またはこれらの組み合わせを用いてハードウェアオブジェクトを作成する方法を示している。図１３の上の例は、ハードウェアオブジェクト１５０に対して１つの入力ポートと１つのポートがある簡単なパイプラインステージを示している。ハードウェアオブジェクト１５０は、図１０において述べたパケット結合を用いて構築可能なメッセージを使用して、システムの他の部分と通信を行う。メッセージの内容と構造は、図１０のパケット結合により影響を受けない。以下のものに限られるわけではないが、データ、オペランド、結果、コマンド、指令、ルーティング方向、メッセージのステータスフラグ、および内部構造識別子を含めて、メッセージの形態および内容は簡単に構築することができる。
【００４４】
すべてのメッセージは非同期的に取り扱われる。常時メッセージを受信可能な非同期手段である入力ポートに関して、ハードウェアオブジェクト１５０により入力メッセージが処理できない場合の唯一の動作は入力をブロックすることである。これは、メッセージの一部でも使用または処理できない場合に、プロトコルレジスタ１５５がそのin_accept信号をLOWにすることによりなされる。準備ができてからはじめてメッセージを出力可能な非同期手段である出力ポートに関しては、出力メッセージの準備ができていないときの唯一の動作はハードウェアオブジェクト１５０に何も出力させないことである。これは、プロトコルレジスタ１５６がそのout_valid信号をLOWにすることによりなされる。
【００４５】
非同期的なメッセージによりハードウェアオブジェクト１５０の動作を制御することは、ソフトウェアオブジェクトの挙動および特性に直接対応するハードウェアオブジェクトを生成する場合に有効である。プロトコルレジスタ１５５，１５６は、予期しない副作用を生ずる周りの電気回路から電気回路１５１を隔離しているので、ハードウェアオブジェクト１５０内の電気回路１５１は、回路をどのように組み合わせたものであってもよい。また、非同期的なメッセージを使用すれば、いつでもメッセージを受信および出力することができるので、外部との間で生じるタイミングの問題を解消することができる。
【００４６】
ハードウェアオブジェクト１５０の他の実装例が図１３に含まれている。以下では、ハードウェアオブジェクト１５２とハードウェアオブジェクト１５０との関係について述べるが、プロトコルレジスタ１５７および１５８がそれぞれプロトコルレジスタ１５５および１５６に直接対応可能であるに留意することは重要である。また、電気回路１５３を電気回路１５１と同一のものとしてもよい。ハードウェアオブジェクト１５２は、簡単なＦＩＦＯ１５４と付加的なプロトコルレジスタ１５９とを含んでいる。ＦＩＦＯ１５４およびプロトコルレジスタ１５９は、入力メッセージをバッファし、遅らせるように動作する。同期システムにおいては、この遅延により、ハードウェアオブジェクト１５０と比較してハードウェアオブジェクト１５２の動作の待ち時間が変化することとなるが、この遅延はスループットや機能に影響を与えない。非同期システムにおいては、時間と待ち時間に関して厳格な概念がなく、ハードウェアオブジェクト１５２およびハードウェアオブジェクト１５０は同一の挙動をする。
【００４７】
図１３の内部プロトコルレジスタ１５９は、プロトコルレジスタが、ちょうど境界ではなく、ハードウェアオブジェクトの内部に有用な機能を有することを示している。本発明の好ましい実施形態においては、そのようなレジスタを使用することが有益な場合はいつでもプロトコルレジスタが排他的に使用される。
【００４８】
図１４は、プロトコルレジスタの異なる組み合わせを有する簡単なジョイン機能およびフォーク機能を示すものである。
【００４９】
ジョイン機能１６０は、図１０のパケット結合に対応するメッセージ全体に対して処理を行う。図１３の説明において、メッセージの詳細が説明される。最も簡単な形態のジョイン機能１６０は、２つの入力ポート１６１，１６２と１つの出力ポート１６８を有しており、２つの入力ポート１６１，１６２に受信されたメッセージの同期を行う。この同期は、入力ポート１６１および１６２がともにメッセージの先頭ワードを持ったときの出力メッセージにより始まり、入力インタフェイス１６１および１６２がともに同期プロセスを開始したメッセージの最終ワードを受信したときに完了する。
【００５０】
フォーク機能１６３は、図１０のパケット結合に対応するメッセージ全体に対して処理を行う。図１３の説明において、メッセージの詳細が説明される。最も簡単な形態のフォーク機能１６３は、２つの出力ポート１６５，１６６と１つの入力ポート１６４を有しており、入力ポート１６４に受信された入力メッセージを出力ポート１６５と１６６の双方に複製する。この複製プロセスは、入力ポート１６４がメッセージの先頭ワードを持ったときの出力メッセージにより始まり、出力インタフェイス１６５および１６６がともにこのプロセスを開始したメッセージの最終ワードを送信したときに完了する。
【００５１】
図１４では、図３のプロトコルレジスタ５０が黒く塗りつぶされた長方形として示されている。例えば、長方形１６７がプロトコルレジスタを表している。図１４は、同一のフォーク機能およびジョイン機能を生成するすべての等価なトポロジを示しており、基本的にはプロトコルレジスタの配置によって機能が変化することはない。図１３の説明において詳述したように、非同期システムにおいてプロトコルレジスタを挿入することはタイミングおよび機能に影響を与えない。
【００５２】
図１４の異なるトポロジは、プロトコルレジスタの挿入を任意に決めることができることを示している。本発明の好ましい実施形態においては、すべてのプロトコルレジスタにほぼ等しい電気的負荷特性および同様のタイミング特性を持たせるようにレジスタがＩＣ上に置かれる。このルールを強制することにより、すべてのプロトコルレジスタは実質的に同一の動作を行う。図１３に示されるポートとしてプロトコルレジスタを用いてハードウェアオブジェクトを構成する場合には、ハードウェアオブジェクトを実装するためにＩＣ上のどのプロトコルレジスタが選択されたかとは無関係に、ハードウェアオブジェクトの入力ポートおよび出力ポートが同一の機能および電気的性能を有することとなる。これにより、ハードウェアオブジェクトを副作用なく再配置または再インスタンス化することができ、これは、そのインスタンスがいつでもどこでも同一の動作をすると思われているソフトウェアオブジェクトをハードウェアモデル化するための重要な特徴となる。
【００５３】
図１５は、図８のプロトコルレジスタの実装１１０を拡張して非同期クロックclk1，clk2を用いたプロトコルレジスタを形成し、入力インタフェイスおよび出力インタフェイスのそれぞれのために３値（valid, data, packet_id）の繰り返しや消失がないようにする方法を示している。Ｄ型フリップフロップ１７１，１７２，１７３，１７４は同期機能を有し、これにより、シンクロナイザへの移行により準安定入力電圧が形成され、シンクロナイザの動作によりその準安定電圧が（ランダムに）有効なHIGHまたはLOWの電圧に分解される。もとの移行は少なくとも２サイクルにわたって安定を維持するので、シンクロナイザの分解はランダムであってよく、真の論理値は準安定後の次のサイクルに常に正しくサンプルされる。多くのシステムにおいて、２つよりも多くのＤ型フリップフロップ（１７１，１７２または１７３，１７４）をカスケード接続し、準安定出力電圧の可能性を低めてもよく、あるいは、Ｄ型フリップフロップ１７１，１７２，１７３，１７４の代わりに特定のシンクロナイザ要素を用いてもよい。
【００５４】
図１５は、valid信号とaccept信号が明確に同期することを示している。in_data信号とin_packet_id信号は同期的にサンプルされ、図１５の論理回路の動作により、out_valid信号とout_accept信号がHIGHであり、受信プロトコルレジスタ（図示せず）に転送が行われるときにout_data信号とout_packet_id信号が変化しないことが保証される。
【００５５】
図１５のvalid論理とaccept論理によりラッチが形成され、これにより論理的にHIGHである値がシンクロナイザの一方を通過し、他方のシンクロナイザにおいて対応するHIGHの値が受信されるまでこれをLOWにリセットすることはできない。
【００５６】
リセット状態においては、クリティカルノード１７５および１７６はLOWであり、１７７および１７８はHIGHである。これは回路が静止した状態である。この静止状態においては、主出力out_validはLOWでありin_acceptはHIGHである。すなわち、レジスタが空で開始の準備ができた状態である。out_validがLOWであることは、静止状態においてはout_acceptの状態が問題とならないことを意味している。in_validがHIGHとなり３値（valid, data, packet_id）を入力するときにはじめて次の状態になることができる。ノード１７７が次のサイクルでin_acceptとともにLOWとなることが状態レジスタ１７９により保証される。これにより、これ以上の入力データが受け入れられないことが保証される。ノード１７７のLOWの値は、フリップフロップ１７１，１７２を用いて同期され、最終的にはノード１７８がLOWになる。ノード１７６および１７８の双方がLOWになり、out_validがHIGHになる。状態レジスタ１８０は、転送が行われた時刻、すなわちout_validとout_acceptがともにHIGHとなった時刻を記録する。状態レジスタ１８０により、転送後の次のサイクルでノード１７６がHIGHとなることが保証される。ノード１７６をHIGHとすることにより、データの転送が繰り返されないようにout_validを強制的にLOWとする。ノード１７６のHIGHの値は、フリップフロップ１７３，１７４を用いて同期され、最終的にはノード１７５がHIGHとなる。
【００５７】
クリティカルノード１７５および１７６がHIGHで、１７７および１７８はLOWである状態は、転送が完了した休止状態である。この休止状態においては、ノード１７５をHIGHにすることにより、一連の動作を開始し、ノード１７７，１７８，１７６，１７５のすべてが最終的にそれぞれの静止状態であるLOW、LOW、HIGH、HIGHに戻る。このとき、in_validがHIGHになると新たな転送が開始される。
【００５８】
図１６は、マスタクロックから異なるクロック周波数を構成する方法を示すタイミングチャートである。図１６においては、２つの「非同期」周波数in_clkとout_clkが生成されている。これらの周波数は常にmaster_clkよりも低く、マークスペースまたはクロックエッジは必ずしも同一ではない。図１６においては、（シーケンスが繰り返されるとして）master_clkの立ち上がりクロックエッジ１５個に対して、in_clkとout_clkのそれぞれの立ち上がりクロックエッジが４つ存在する。これは、in_clkとout_clkの周波数はともにmaster_clkの周波数の４／１５であることを意味するが、in_clkとout_clkのエッジ位置の差は、これらのクロックが互いに非同期的になっていることを示している。
【００５９】
図１６は、本質的に非同期のクロックをマスタ同期クロックから比較的簡単に、またそれぞれの出力クロックに対して任意の周波数分割比をもって生成できることを示している。図１６においては、in_clkenは、master_clkの降下エッジでサンプルされ、in_clkを生成するためにmaster_clkとともにＡＮＤ機能用マスクとして使用される（master_clkに同期する）イネーブル信号である。同様に、out_clkenは、master_clkの降下エッジでサンプルされ、out_clkを生成するためにmaster_clkとともにＡＮＤ機能用マスクとして使用される（master_clkに同期する）イネーブル信号である。図１６で説明したクロック概念図は、擬似非同期クロックとして知られている。
【００６０】
図１７は、図８のプロトコルレジスタ実装例１１０を拡張して３値（valid, data, packet_id）の繰り返しや消失なく入力および出力インタフェイスのそれぞれに対して擬似非同期IN_CLKおよびOUT_CLKを用いるプロトコルレジスタを作成する方法を示している。擬似非同期IN_CLKおよびOUT_CLKは、図１６で説明したように、MASTER_CLK、in_clken、およびout_clkenから生成される。IN_CLKと示された陰付の領域には図８の論理回路が再現され、プロトコルレジスタ１９６が形成されている。陰付の領域内のすべてのＤ型フリップフロップは、クロックとしてIN_CLKを用いている。MASTER_CLKと示された陰のない領域内の追加の論理回路は、OUT_CLKと示された陰付の領域内に示された出力インタフェイスが正しく形成され、OUT_CLK信号と揃うようにプロトコルが再フォーマットされることを保証する機能を有する。Ｄ型フリップフロップ１９０は、クロックとしてMASTER_CLK信号を用いている。
【００６１】
図１７の陰のない領域内の論理回路は、IN_CLKとOUT_CLKが同じ場合に、in_clkenとout_clkenがずっとHIGHであり最も高い周波数となっても、図８の実装例と同一の動作がなされることを保証するように配置されている。この場合における論理回路の動作は分かりやすい。論理ゲート１９１は常にLOWの値を出力し、Ｄ型フリップフロップ１９０も同様である。したがって、論理ゲート１９２，１９３，１９４はパスモードであり、out_acceptとout_validの状態はプロトコルレジスタ１９６により直接制御される。
【００６２】
図１７においてin_clkenとout_clkenがずっとHIGHではない場合は、陰なし領域のゲートは、out_validと（IN_CLKをクロックとして用いるプロトコルレジスタ１９６に対するout_acceptである）論理ゲート１９３の出力とが正しい状態となるように制御される。すなわち、論理ゲート１９２は、out_validをLOWにすることにより次のin_clkenがまだアクティブになっていないときにout_validを複製する可能性を除去し、論理ゲート１９３は、ゲート１９３の出力をHIGHにすることにより次にin_clkenがアクティブにされるまで「out_accept」を拡張し（逃さない）ことを保証する。
【００６３】
ハードウェアオブジェクト
図１８は、ハードウェアオブジェクトの機能図を示している。上述したように、ハードウェアオブジェクトは、多数のプロトコルレジスタにより区切られた電気回路を含んでいる。プロトコルレジスタは、上述したレジスタと同じものであってもよい。電気回路の論理的な流れはレジスタの存在によって全く影響を受けず、むしろレジスタは長い信号線を区分することによって電気的負荷をバランスさせるために用いられる。それぞれのハードウェアオブジェクトは、完全にカプセル化されており、他のオブジェクトの状態による影響を受けない。ハードウェアオブジェクトは、メッセージまたはメッセージパケットを送信することにより互いに通信を行う。パケットは、指令またはデータ、あるいはその両方を含んでいてもよい。実施形態によっては、メッセージを用いることによってのみハードウェアオブジェクトの内部状態が調べられ変更される。ハードウェアオブジェクトが指令および適切なデータを受信すると、受信ハードウェアオブジェクトはデータを操作して出力を生成することができる。この出力は他のオブジェクトに送信することができる。
【００６４】
一般に、上述した開発システムにおいては、ハードウェアオブジェクトは中規模のものであり、すなわちＡＮＤゲートのような最も簡単な機能ではなく、ハードウェアオブジェクト集合の一般的性質を壊す傾向を有するような過度に複雑な機能でもない。中規模オブジェクトの中には、ＩＯ構造、マイクロプロセッサ、ＲＡＭ、および有限状態機械（ＦＳＭ）が含まれる。オブジェクトの中には、極めて一般的な用途のものもあれば、一定の機能を有するものもある。オブジェクトは継承可能な従属機能を持っていてもよく、例えば積和（ＭＡＣ）オブジェクトは用途によって加算器または乗算器として機能する場合がある。
【００６５】
ハードウェアオブジェクト３００には、典型的には少なくとも１つの入力プロトコルレジスタ３１０と出力プロトコルレジスタ３１０によって「仕切られ」た特殊な中央電気回路３０４の組が含まれる。図１８においては、マルチプルプロトコルレジスタ３１０が存在している。実際には、プロトコルレジスタ３１０の存在および／または配置は回路動作に影響を与えないので、オブジェクトの動作機能または動作能力を失うことなく、プロトコルレジスタを持たないハードウェアオブジェクトを有することも可能である。逆に、ハードウェアオブジェクト３００は、中央電気回路３０４の内部と境界部の双方に多数のレジスタを持っていてもよい。プロトコルレジスタ３１０をどこにでも配置できるので、抵抗型負荷と容量性負荷とをバランスさせる物理的位置を選べば、チップ内に長い信号線が形成されることがない。レジスタの中には最小限のものもあれば、付加的な特徴や性能を有するものもあることからすると、プロトコルレジスタ３１０は互いに多少異なるものであってもよい。典型的には、プロトコルレジスタは、同時に転送することができるデータ信号の数によって区別される。システム例の中には、いくつかの種類の変化型プロトコルレジスタが含まれる。
【００６６】
ハードウェアオブジェクト３００はスタンドアロンであってもよいが、いくつかのハードウェアオブジェクトを連係させることが極めて有益である。図１９は、Ｕ１〜Ｕ９で示される９つのハードウェアオブジェクト３００を示している。ハードウェアオブジェクト３００のうちの２つＵ４，Ｕ７は独立しており、この例では、ハードウェアオブジェクトと連係していない。多重ハードウェアオブジェクト３００を連係させて、好ましくは個々のハードウェアオブジェクトによる能力よりも多くの機能を有する他のハードウェアオブジェクトを作成することができる。図１９に示すように、ハードウェアオブジェクトＵ１，Ｕ２，Ｕ３，Ｕ５は互いに連係され、ハードウェアオブジェクト３２０が作成されている。ハードウェアオブジェクト３２０は、単にその構成要素間で内部的な通信を行う特定のスタンドアロン回路として形成してもよいが、本発明の実施形態によれば、個々のハードウェアオブジェクトは他の構成要素と連係されているという理由だけで一般性を失うものではない。逆に、より小さなハードウェアオブジェクトの集合からより強力なハードウェアオブジェクトを作成できることは、ここでの本発明の概念を用いる場合のもう１つの効果である。
【００６７】
また、図１９は、ハードウェアオブジェクトＵ５，Ｕ６，Ｕ８，Ｕ９を連係させることにより構成される他のハードウェアオブジェクト３３０を示している。機能的な観点からすると、Ｕ５がハードウェアオブジェクト３２０と３３０の双方に属していることは問題ではない。場合によっては、分離可能なハードウェアでハードウェアオブジェクトＵ５を構成し、ハードウェアオブジェクト３２０とハードウェアオブジェクト３３０の構成要素のそれぞれの機能を独立したハードウェアで動作させることから共有機能が生まれる。また、場合によっては、ハードウェアオブジェクト３２０とハードウェアオブジェクト３３０の構成要素の機能が、ハードウェアオブジェクトＵ５内の共有ハードウェア上で実現されることもある。ハードウェアオブジェクト３２０およびハードウェアオブジェクト３３０には、適切な優先度と性能基準によりハードウェアを共有可能とするために時分割機能がなければならない。
【００６８】
図２０Ａ〜図２０Ｃは、それぞれ異なる中央電気回路３０４を有するハードウェアオブジェクト３００の例を示す。図２０Ａは、中央電気回路３０４に乗算機能を含むハードウェアオブジェクト３００を示している。乗算機能は、ハードウェア乗算器によって実現してもよいし、公知の他の方法により実現してもよい。プロトコルレジスタ３１０は、ハードウェアオブジェクト３００と他のオブジェクトとの間の均一なデータインタフェイスを提供する。図２０Ｂは、中央電気回路３０４にメモリと位相器とを含むハードウェアオブジェクト３００を示している。この例においては、メモリと位相器は、プロトコルレジスタ３１０を介さずに直接相互に通信を行う。中央電気回路３０４内の通信は、ハードウェアオブジェクトの境界で使用されるプロトコルレジスタに加えて内部プロトコルレジスタ３１０を用いてもよい。あるいは、中央電気回路３０４内で他の通信形態を用いることもできる。例えば、図２０Ｂに示すように、メモリと位相器は、ダイレクトバスプロトコルを使って直接相互に通信を行ってもよい。さらに、メモリと位相器は、必要に応じて、シリアルラインを介して通信を行うことができる。実装可能なハードウェアオブジェクトおよび開発システムを組み立てる目的からすれば、ハードウェアオブジェクト３００の中央電気回路３０４内の要素が相互にどのような通信を行うのかということは、比較的重要なことではない。また、図２０Ｂのハードウェアオブジェクト３００は、オブジェクト間の通信を容易にするためにプロトコルレジスタ３１０を含んでいる。
【００６９】
図２０Ｃは、中央電気回路３０４に他の要素を有するハードウェアオブジェクト３００の追加例である。この例においては、レジスタファイルと論理演算装置（ＡＬＵ）にメモリと状態機械が付加的に連結されている。この例は、中央電気回路３０４のすべての要素が必ずしも直接相互に通信を行う必要がなく、あらゆる方法またはプロトコルを用いた通信を特定のハードウェアオブジェクト３００自身に統合可能であることを示している。
しかしながら、ほとんどすべての場合において、中央電気回路３０４の「端部」にプロトコルレジスタ３１０を設けることにより、ハードウェアオブジェクトの集約が容易になり、非常に強力かつ複雑なオブジェクトを作成することができる。
【００７０】
図２１は、他のハードウェアオブジェクトと同一の境界によって仕切られている必要のないハードウェアオブジェクトを示している。図２１においては、５つのハードウェアオブジェクトが示されている。ＩＣ基板上に固定された４つのハードウェアオブジェクトは、３４２，３４４，３４６および３４８である。オブジェクト３５０は、オブジェクト３４２，３４４および３４６の要素から構成されている。オブジェクト３５０は、オブジェクト３４２および３４６のすべての要素を含んでいるが、オブジェクト３４４については一部のみを含んでいる。すなわち、オブジェクト３５０は、ハードウェアオブジェクト３４４の中央電気回路３０４のメモリと一方のＡＬＵのみとを用いている。ハードウェアオブジェクト３４４の中央電気回路３０４はそれらを内部的にすでに利用しているので、オブジェクト３５０はプロトコルレジスタ３１０によって区切られていることに留意されたい。この場合において、オブジェクト３５０は、ハードウェアオブジェクト３４４の中央電気回路３０４の内部にあるプロトコルレジスタ３１０を使用することができる。オブジェクト３４４の残ったＡＬＵおよびオブジェクト３４８の全体は、ここでは割り当てられていないが、他のハードウェアオブジェクトを形成するために使用することができる。
【００７１】
オブジェクトは、本発明の好ましい実施形態におけるメッセージパケットを用いて実現することができる非同期メッセージを相互に送信することにより、相互に通信を行う。メッセージパケットは、メッセージの内容または構造を制限するものではなく、メッセージは、データ、指令、アドレス、および／またはメッセージパケット自身の情報を含んでいてもよい。図２２は、それぞれのプロトコルレジスタ３１０の間でメッセージを用いて相互に通信を行う２つのハードウェアオブジェクト３６０，３７０を示している。本発明の実施形態は、特定のメッセージフォーマットに影響を与えるものではなく、あるプロトコルにメッセージを従わせることを要求するものでもない。もちろん、システムは、メッセージの送信側と受信側との間の理解を前提として設計されるので、送信側と受信側がメッセージを正しく解釈することができるように構造を形成しなければならない。
【００７２】
図２２には、１０ワードを含むメッセージ３８０の例も示されている。この例のメッセージ３８０は、宛先アドレスまたは「ROUTE LEFT」のような固定コマンドとなり得るルーティングコマンドから始まる。後述するように、ハードウェアオブジェクトのシステムが再構成可能チップにリンクされ固定されたときに、ＩＣ基板上のそれぞれのハードウェアオブジェクトに一意のアドレスを割り当ててもよい。メッセージは、この一意のアドレスに基づいて、あるいは例えばステアリングコマンドに基づいて指示される。メッセージ３８０は、ルーティング情報の後に、そのメッセージに含まれている情報の種類またはそのメッセージの高水準構造を識別するために使用可能なフラグを含んでいる。プロトコルレジスタ３１０を介して送られたプロトコルに従ったメッセージは、いくつかの異なる種類を表すことができるので、どの種類が使用されているのかを示すためにフラグを用いることができる。フラグは、例えば、データだけを含んでいる、命令を含んでいるなど、メッセージのフォーマットを示していてもよい。さらに、図２２のメッセージ３８０の例は、一連の命令とオペランドおよび受信オブジェクト３７０により使用される様々なフラグを含んでいる。受信オブジェクトが、送信オブジェクトから受け取った命令およびオペランドの一部または全部を他のオブジェクトに単に渡すだけの場合もある。パススルーメッセージは、第１のオブジェクトがメッセージを、第１のオブジェクトに直接接続されていない他のオブジェクトに送信する場合に使用される。
【００７３】
図２３は、多数の基本オブジェクト４０２，４０４，４０６，４０８，４１０を含む「メッセージングフォーク」オブジェクト４００を示している。単一のデータストリームＡがオブジェクト４００に入力され、２つの出力Ａ１およびＡ２が生成される。フォークは、データストリームＡに含まれるあらゆるデータまたはオペランドに作用することができる。フォークプリミティブオブジェクト４０２内において、メッセージストリームＡは２つの構成ストリームＡ１およびＡ２に分割される。最も基本的な形態においては、フォークオブジェクト４０２は、データストリームＡから単にデータを複製し、２つのストリームＡ１およびＡ２を作る。他の実施形態においては、フォークオブジェクト４０２は、入ってくるストリームを要素ストリームに分解する前にストリームに対して操作を行うことができる。例えば、フォークオブジェクト４０２は、データストリームＡ内の数字の混在を許容し、整数のみをストリームＡ１に、浮動小数点をストリームＡ２に分割してもよい。フォークオブジェクト４００の他の実施形態は、ストリームに操作を行うことなく単にそのストリームを分割することができる。例えば、特定の範囲内のアドレス指定されたすべてのメッセージは出力ストリームＡ２に入り、他のすべてのメッセージは出力ストリームＡ１に入るようにできる。このように、多量に入ってくるデータを別々の多数の並列プロセスにより分割することができる。他の種類のフォークは、メッセージパケット内のルーティングコマンドにあたるまでパケットを固定された方向に向け、ルーティングコマンドにあたった時点でそのルーティングコマンドに従うステアリングフォークを含んでいる。２つのデータストリームＡ１およびＡ２のみが生成されるものとして図示しているが、多数のフォークオブジェクトをリンクさせてストリームを何個でも生成することができる。
【００７４】
また、図２３は、オブジェクト４０４および４０６がメッセージストリームＡ２に作用して、非常に複雑なフォーク機能を生成可能なことを示している。同様に、オブジェクト４０８および４１０は、メッセージストリームＡ１に作用してさらなる機能を生成することができる。５つのオブジェクト４０２，４０４，４０６，４０８および４１０により構成されるオブジェクト４００の構造の重要性は、メッセージストリームＡ１およびＡ２が並行に動作することにある。例えば、ストリームの１つが一時的にブロックされている場合、他のストリームは処理を続行する。
【００７５】
図２３は、いずれのストリームの長さを制限するものではない。特に、この例においては、同じ長さの入力メッセージに呼び出されても、出力ストリームＢ１およびＢ２を異なる長さにすることが重要なことである。
【００７６】
図２４は、２つの入力ストリームを受け入れ、それらを単一のストリームに結合する「ジョイン」オブジェクト４２０を示している。図２３において述べたフォークオブジェクトと同様に、ジョインオブジェクト４２０は、所望の機能を実現するために必要なほとんどすべての形態をとることができる。共通のジョイン機能は２つの入力メッセージに同期している。この場合において、出力ストリームが生成され始める前に双方の入力メッセージを提示しなければならず、一度生成され始めると、それぞれの入力メッセージの全体が受信されるまで同期プロセスを終了することができない。他の共通機能は、第１の入力メッセージをコピーして出力に至る「代替ジョイン」機能である。一度入力メッセージが受け入れられると、他の入力における他のメッセージはコピーが完了するまで待機する。一般に、「代替ジョイン」機能は、最も以前に使用されたポリシーに従って公平に裁定するが、入力優先順位を固定し、入力メッセージ内でエンコードされた優先順位に対して作用する他の形態が共通して使用される。ジョイン機能およびそのアナログであるフォーク機能は、並列プロセスの出力間での計算順序を生成するためにその機能を使用することができるので、非同期計算システムにおいては非常に有用である。
【００７７】
図２４は、ハードウェアオブジェクトを組み合わせることにより複雑なジョイン機能を生成することができることを示している。オブジェクト４２２と４２４との間のフィードバック関係４２９および４３０により、入力メッセージストリーム４３１および４３２の非常に複雑な組み合わせが実現される。同様に、オブジェクト４２８は、基本ジョインオブジェクト４２６の出力を後処理し、最終的なジョインオブジェクト４２０を内部基本ジョインオブジェクト４２６よりも極めて複雑なものにするために使用することができる。図２３と同様に、ジョインオブジェクト４２０の本質は、その構成要素が独立して動作することにある。
【００７８】
簡単に組み合わせることができるハードウェアオブジェクトを、独立して動作させ、２１、図２３、および図２４で述べたような非同期メッセージを用いて通信を行うことは、最大のシステムパフォーマンスを保証するには必ずしも十分ではない。さらに、上述した異なるプロトコルレジスタの１つを使用することにより、システム内のすべての構成要素オブジェクトが完全に停止するまで（出力できずに有効データで満杯になったとき）、データを処理し続けることが保証される。
【００７９】
上述したハードウェアオブジェクトは、シリコン内または他の基板に直接形成してもよい。図２５は、ハードウェアオブジェクト４５４および４５５において物理的に形成された多数のインスタンスを有するチップの例４５０を示している。オブジェクトは、プロトコルレジスタ間でリンクされたデータラインによって相互に接続されている。プロトコルレジスタは、上述した他のプロトコルレジスタの特性を有することができる。入力ピンおよび出力ピン４５８は、チップ４５０に対するインタフェイスを提供する。特定の接続プロトコルを実現するようにプログラムされた特殊ハードウェアオブジェクト４５４を含めることにより、ＵＳＢやFirewireなどの標準通信プロトコルをチップ４５０に接続してもよい。
【００８０】
チップ４５０上に形成されたオブジェクト４５４および４５５の特定の組み合わせは、チップ４５０の用途によって異なる。しかしながら、近代技術によれば、非常に多くの物理オブジェクトがサポートされており、適用範囲を広くすることができる。ハードウェアチップ４５０上のハードウェアオブジェクトは、比較的簡単に設定および再設定できるので、チップ４５０を再設定可能標準部、すなわちＲＳＰということができる。ＲＳＰ上で実現される物理的ハードウェアオブジェクトインスタンスの総数は、１００〜１００，０００以上のオーダである。異なる物理的ハードウェアオブジェクトの総数（この例では２つのみ）は、もっと少なく、例えば１０のオーダである。もちろん、ハードウェアオブジェクトの種類または総数は、ここで述べた本発明の概念を逸脱することなく、ＲＳＰ上に実装することができる。
【００８１】
どのハードウェアオブジェクトをベースＲＳＰ上に置くかを選択することにより、特定のＲＳＰを特定の市場向けに最適化することができる。共通の例が、計算ハードウェア用のオンチップメモリ容量とトレードオフの関係に立つ。例えば、加算器、位相器、および乗算器のような多数のコンピュータ物理ハードウェアオブジェクトを有するＲＳＰは、ＤＳＰ（デジタル信号処理）市場においては有用である。また、より多くのオンチップメモリを有することは、大きなデータセットを格納し、ネットワークパケットをバッファすることの方が純数学上の計算よりも重要とされるネットワークルーティング市場においては有用である。
【００８２】
ソフトウェアオブジェクトs
一度ハードウェアオブジェクトが定義されると、本発明の実施形態によれば、相互接続されたハードウェアオブジェクトの記述を開発することによりシステムを構築することができる。最終的に、この記述は、上述したＲＳＰ上にロードされ、非常に一般的なアーキテクチャを使って、完全にプログラムされた非常に具体的なシステムが作られる。一度プログラムされると、ＲＳＰシステムが完成し、動作可能な状態となる。
【００８３】
相互接続されたハードウェアオブジェクトのシステムを作成するために、ハードウェアオブジェクト定義についてのソフトウェア記述がオブジェクトライブラリに格納される。ライブラリの例は図２６に示されている。この図には、ライブラリオブジェクトＡ，Ｂ，Ｃ，Ｄのコレクションが示されている。ライブラリオブジェクトは、プリミティブオブジェクト記述の定義済みコレクションである。上述した唯一のメッセージプロトコルの存在と各ハードウェアオブジェクトのカプセル化により、ハードウェアオブジェクトのソフトウェアオブジェクト記述をハードウェアオブジェクトに予め組み込むことができる。
【００８４】
本発明において具体化されるソフトウェアオブジェクトに必要な特性には、独立実行性、オブジェクト間の非同期メッセージ通信、カプセル化、およびコンテキストに対する無反応性が含まれる。
【００８５】
独立実行性は、ソフトウェアが実行される基本ハードウェアの動作からそのソフトウェアを除去し、ハードウェアの制約なしに、異なる多くのソフトウェアアーキテクチャを効果的に実現可能とする決定的な品質というべきものである。
【００８６】
非同期メッセージにより、ハードウェアデザインにおける従来のタイミング問題からソフトウェア記述を独立させることができるので、非同期メッセージは重要である。さらに、非同期メッセージは、多くのプロセッササイクルによって定義される「リアルタイム」を持つのではなくて、リアルタイムソフトウェアの機能性をソフトウェアにおいて明示的に定義させる。
【００８７】
カプセル化とコンテキストに対する無反応性により、ソフトウェアオブジェクトは、ＩＣ上のハードウェア実装の物理的な位置に関係なく、また特定のＩＣの種類に関係なく、同一の機能および性能を発揮することができる。
・ビルトインカプセル化され、
・コンテキストに対して無反応であり、
・独立して動作し、
・非同期的に通信を行い、
・純粋に再配置可能で、
・どのような寸法にもでき、
・いかようにも複雑にすることができる
ようにハードウェアオブジェクトを構築できれば、オブジェクト指向プラグラミング（ＯＯＰ）をサポートするソフトウェア記述を使うだけで、ハードウェアオブジェクトに承継、多相性、およびモジュール性を比較的簡単に与えることができる。このように、ハードウェアオブジェクトは、ＯＯＰの主役にしっかりと付随するソフトウェア記述を有している。
【００８８】
ハードウェア的観点からのオブジェクトとソフトウェア的観点からのオブジェクトとの間に機能的な差違はない。すべてのハードウェアオブジェクトは、純粋に、オブジェクトライブラリのソフトウェアプリミティブのインスタンシエイションであると考えることができる。すべてのソフトウェアオブジェクトは、純粋に、完全にカプセル化されたハードウェアオブジェクトの記述であると考えることができる。本発明の実施形態においては、ハードウェア的観点およびソフトウェア的観点の間には、完全でかつ立証可能な１対１のマッピングがある。上述した開発システムにおけるハードウェア／ソフトウェア二分法は、プロトコルレジスタと基本ハードウェアオブジェクトのルールと関係に基づく本来のボトムアップ式構造といえる。すべてのソフトウェアの挙動およびハードウェアオブジェクトのすべての具体的なハードウェア情報は、オブジェクト定義の内部に含まれている。これらは、中央に格納され、承継可能なものである。これにより、ハードウェアルールおよび関係を子インスタンスから承継できるため、新しいオブジェクトを作成することができる。
【００８９】
図２６は、相互接続された４つのプリミティブオブジェクトから構成されるオブジェクトＡを示している。これらのうち３つはプリミティブタイプ＃１であり、１つはタイプ＃２である。オブジェクトＡがライブラリに置かれると、オブジェクト自身はさらなるオブジェクトにより使用可能となる。例えば、オブジェクトＡに類似するオブジェクトＢは、他のプリミティブオブジェクトのコレクションとしても示されており、オブジェクトＤは、オブジェクトＡおよびＢのみのコレクションであり、直接にはプリミティブオブジェクトをインスタンス化しない。これらの階層関係は、例えば承継のようなすべてのＯＯＰ特性を保持する。しかしながら、ライブラリに格納されたソフトウェアオブジェクトは、プリミティブオブジェクトに限定される必要はない。これは、オブジェクトＣの定義に示されており、オブジェクトＣは、相互に接続された付加的なプリミティブオブジェクトとともに他のライブラリオブジェクトＢを含んでいる。
【００９０】
また、ソフトウェアオブジェクト階層が図２７に示されており、図２７は、ソフトウェアオブジェクト４６０内に階層的に集められた多数のプリミティブオブジェクトを示している。ソフトウェアオブジェクト４６２は、単純に１つのプリミティブオブジェクトであり、ソフトウェアオブジェクト４６４および４６６はそれぞれ２つと３つのプリミティブオブジェクトから構成されている。新しいレベルの階層と抽象化を定義することにより、ライブラリ用の新しいソフトウェアオブジェクトを作成することができる。具体的なハードウェアルールおよび関係のすべては子から承継されるので、新しいソフトウェアオブジェクト用のハードウェア情報が自動的に生成される。特に、オブジェクトライブラリは、Ｃ＋＋、Java、または他のＯＯＰ言語により開発することができる。
【００９１】
システム開発
完全なシステムのソフトウェアモデルの一例が図２８に示されている。この図は、ハードウェアプリミティブのコレクションと、オブジェクトライブラリのビデオデコーダ部からの予め定義されたソフトウェアオブジェクトとから組み立てられるＭＰＥＧ２デコーダオブジェクト４７０を示している。ビデオデコーダライブラリ４８０は、モーションオブジェクト４７２と圧縮解除オブジェクト４７６とともに、個々のプリミティブオブジェクトＰ１〜Ｐ７を含んでいる。モーションオブジェクト４７２は２つのプリミティブＰ３およびＰ５から作成され、圧縮解除オブジェクト４７４は３つのプリミティブＰ２，Ｐ４，Ｐ６から作成される。Ｐ６プリミティブは、離散コサイン変換の逆関数（ＤＣＴ−１）プリミティブオブジェクトである。プリミティブＰ１およびＰ７は、入力／出力プリミティブオブジェクトである。デコーダ４７０を組み立てることには、外部フレームストア４７６を使用することを含んでいる。実施形態によっては、オフチップメモリを使用して外部フレームストア４７６がもたらされる。デコーダの実装に関してさらなる詳細を以下に述べる。
【００９２】
図２８のソフトウェアモデルは、システムの本来のＯＯＰ記述である。オブジェクトは独立して実行され、コードは単純にオブジェクトインスタンスのコレクションである。システムがそのようなソフトウェアモデルを使用して記述されると、システムは、１つのソフトウェアとして実行可能となり、ハードウェアにモデルを効率的にマップするために必要とされる構造的な情報を持つ。
【００９３】
ソフトウェアおよび最終的にはハードウェアオブジェクトのコレクションであるソフトウェアシステムが生成されると、システムはＲＳＰ４５０（図２５）上にマップされ、ハードウェア製品を作る。動作においては、システム設計者がシステムモデルを設計するとき、基本の物理的ハードウェアオブジェクトの特性から直接生成されたオブジェクトライブラリから直接特性を使用する。したがって、システム設計者が、所望のシステムを記述するとき、その所望のシステムの特性はすでにビルトインされた基本の物理的ハードウェアオブジェクトの特性を有している。この所望のシステムにおける基本の物理的ハードウェアオブジェクトへの直接的な一致により、ＲＳＰ上へのマッピングが比較的単純な割り当てプロセスとなる。
【００９４】
マッピングシステムの一例が図２９に示されており、図２９は、ＭＰＥＧ２デコーダとなるようにプログラムされたシステムチップ４８０を生成するために図２５のＲＳＰ４５０上にマップされた図２８のＭＰＥＧ２デコーダオブジェクト４７０を示している。デコーダオブジェクト４７０のプリミティブオブジェクトＰ１〜Ｐ７のそれぞれは、ＲＳＰ４５０のハードウェアオブジェクト４５４および４５５のうちの１つに割り当てられる。プリミティブオブジェクトＰ１〜Ｐ９となるように構成されるときの基本となる物理的ハードウェアオブジェクト４５４および４５５の特性は、オブジェクトライブラリ４８０（図２８）からデコーダ４７０を開発するために使用される特性と同一である。デコーダ４７０のオブジェクトＰ１と、ＲＳＰ４５０上に「１」と付されたプログラム済み物理的ハードウェアオブジェクト４５４とは、ともに入力オブジェクトであり、システムに対する入力メッセージを受け入れる。同様に、オブジェクトＰ７と、「７」と付されたプログラム済み物理的オブジェクト４５５とは、出力オブジェクトであり、デコードされたビデオを伝送する。
【００９５】
圧縮解除オブジェクト４７４を構成するプリミティブオブジェクトＰ２，Ｐ４，Ｐ６は、ＲＳＰ４５０上にそれぞれ「２」「４」「６」と付された３つの物理的ハードウェアオブジェクトに直接マップされる。圧縮解除オブジェクト４７４の階層特性は、陰付領域４７４で示されるように、ＲＳＰ４５０上に維持される。同様に、モーションオブジェクト４７２を構成するプリミティブオブジェクトＰ３およびＰ５は、「３」および「５」とそれぞれ付された２つの物理的ハードウェアオブジェクトに直接マップされる。モーションオブジェクト４７２の階層特性は、陰付領域４７２に示されるように、ＲＳＰ４５０上に維持される。
【００９６】
この例における図２８のフレームストア４７６は、ソフトウェアモデルにおけるオフチップとしてマークされており、ＲＳＰ４５０上にはマップされずに、「フレームストアへ／フレームストアから」とマークされたインタフェイス信号を生成する。
【００９７】
ＲＳＰ４５０上の物理的ハードウェアオブジェクト４５４および４５５のすべてが、それぞれのシステム実装のために使用されるわけではない。確かに多くの物理的ハードウェアオブジェクトは使用されない。使用されない物理的ハードウェアオブジェクトは電源を切ってもよいし、電力を節約するために非常に低いクロック周波数で動作するようにセットしてもよい。
【００９８】
上述したように、ハードウェアオブジェクトは、ソフトウェアオブジェクト記述、機能、および特性を本質的に含んでいる。さらに、ハードウェアオブジェクトには、特性についての追加の要件がある。すなわち、ハードウェアに所望の機能を発揮させる構成バイナリプログラムと、必要とされる量のハードウェア資源と、ハードウェアがどのように接続されるかを支配する接続ルールである。本発明の一実施形態においては、基本となる物理的ハードウェアオブジェクトの考えられる１つのトポロジについて、たった１つのバージョンのオブジェクトが存在する。他の実施形態においては、多くの異なるトポロジと、（オブジェクトに付けられた構成バイナリを使用して）オブジェクトを生成するようにプログラム可能な基本となる物理的ハードウェアオブジェクトの混合物とが存在する。後者の場合、オブジェクトは異なる具体的形態を有している。
【００９９】
オブジェクトの具体的形態は、ビルトインされたソフトウェアオブジェクトとまさに同一であるが、それぞれの具体的形態は、特定の具体的形態を選ぶユーザによって交換され得る異なる性能と資源利用を生成する異なるハードウェアトポロジと混合物を有している。
【０１００】
図３０は、１つのソフトウェアオブジェクトの具体的形態に付けることができる付加的情報を示している。ソフトウェアオブジェクト４９０が示されているが、これは、あらゆるタイプのオブジェクト記述、例えば図２８のデコーダ４７０となり得るものである。ソフトウェアオブジェクト４９０を開発する際、物理的ハードウェアオブジェクトのトポロジが選ばれ、接続ルールが生成される。接続ルールは、特定の性能目標を満足するのにトポロジが許容する最大および最小遅れを特定し、プリミティブオブジェクトがＲＳＰ４５０のハードウェア上に直接マップされるときに満足されなければならない。上記ハードウェアオブジェクトを参照して述べたように、各ハードウェアオブジェクトに関連づけられるプロトコルレジスタの数には実際上限界がある。したがって、各ハードウェアオブジェクトに対する相互接続のレベルにもこれに対応して限界がある。すなわち、ＲＳＰ４５０上の各ハードウェアオブジェクトが、ソフトウェアオブジェクトにおいて使用される他のハードウェアオブジェクトに直接接続されることは不可能であると考えられる。このため、（例えば、性能要求を満たすために）互いに近接しなければならないオブジェクトが接続可能となり、直接接続される必要のないオブジェクトが接続される必要のないことが保証されるように、接続ルール４９２のリストが使用される。図３０の接続ルール４９２のリストを参照すると、Ａ．ｄとＡ．ｄ（２つのハードウェアオブジェクトのポートを「ｄ」とする）との間のリンクが直接接続されなければならない、すなわち、ちょうど１ホップの接続長を持たなければならないことを示している。他のオブジェクトは、直接相互に接続される必要はなく、それぞれ３接続分または７接続分まで離れていてもよい。実際、直接接続されていないハードウェアオブジェクトが互いに通信する必要が生じると、それらのハードウェアオブジェクトは、アドレス付メッセージやルーティングコマンドを所望のハードウェアオブジェクトに送信する。
【０１０１】
リソースリスト４９４は、ソフトウェアオブジェクトの具体的態様のトポロジを形成するＲＳＰ４５０上の物理的ハードウェアオブジェクトの数と種類を示している。システムの設計の際は、ＲＳＰ４５０上の利用可能なリソースを追跡するデザインルールチェッカーを使用することができ、設計時にシステム設計者が物理的に利用可能なリソース数を超えてしまうことを防止する。
【０１０２】
接続ルール４９２およびリソースリスト４９４は、承継を用いるソフトウェアオブジェクトにおける子プリミティブから簡単に推測することができる。プリミティブオブジェクトだけが定義されたトポロジを持っている。
【０１０３】
バイナリリスト４９６は、物理的ハードウェアオブジェクト内の命令メモリまたは構成レジスタにロードされ、特定の物理的ハードウェアオブジェクトのすべき動作を制御するマイクロコードまたはマイクロ命令のリストである。例えば、ハードウェアオブジェクトが初期化されたときに、最初に読み込まれた命令がハードウェアオブジェクトに対して行う最初の所望の命令となるように、マイクロコードを命令順に格納することができる。
【０１０４】
システムソフトウェアオブジェクトモデルは、ＲＳＰ４５０上のハードウェアオブジェクトと同一構造であるので、設定されたＲＳＰ４５０はシステムモデルにおいてシミュレートされたのと全く同じように動作する。
【０１０５】
実際には、バイナリリスト４９６は、典型的には、ＥＥＰＲＯＭのような何らかのメモリや他の種類のＲＯＭ、あるいはＲＳＰ４５０上またはＲＳＰ４５０外に設けられた他の種類のメモリに格納される。ＲＳＰの電源が入ると、まず、初期化プロセスによりすべてのハードウェアオブジェクトが初期状態に初期化される。リセットにより自動的に初期命令をロードする機能を有するように１つの物理的ハードウェアオブジェクトを構成してもよい。その後、初期命令が実行され、トップレベルのバイナリリスト４９６がＲＳＰ４５０にロードされる。バイナリリストは、上述したメッセージパケットプロトコルを用いて個々のハードウェアオブジェクトに配布することができる。バイナリの最初の部分が個々のオブジェクトにロードされると、オブジェクトは動作を開始でき、最初の入力データを待つ。
【０１０６】
完全にプログラムされたシステムを作成するために使用されるプロセスを説明するためのフローチャートが図３１に示されている。フロー５００は、まず、プロセス５１０において、問題をその構成要素に分割する。次に、プロセス５２０において、ライブラリオブジェクトが設計システムにインポートされる。設計が進むにつれ、判断５３０において、設計者はライブラリ内に正しいソフトウェアオブジェクトが存在するかを決定する。必要なオブジェクトが存在しない場合、例えば、オブジェクトがまだ存在しない、または、新しい性能の具体的形態が必要である場合には、プロセス５３２において、設計者はそれらを生成することができ、ライブラリ内に新たに生成されたオブジェクトを格納する。デザインが完成し、必要なオブジェクトのすべてがライブラリに含められた後、そのデザインがプロセス５４０においてテストされる。プロセス５５１０において、そのデザインがチェックされる。デザインがデザインテストを通過しない場合、例えば接続ルールを満足しない場合には、フロー５００はループバックし、新しいオブジェクトの具体的形態が生成され、デザインがテストされる。デザインが完成すると、プロセス５６０において、上述したように、ＲＳＰ４５０からのハードウェア制約条件のリストが、プログラムされたＲＳＰ上にマップされるデザインの特徴に合わされる。
【０１０７】
本発明の実施形態は、ＲＳＰ４５０上のハードウェアオブジェクトのコレクションが大量の並列処理を非同期的に実行するので、データスループットの高い利用に特に適している。これにより、複雑なアルゴリズムを用いた大量のデータを操作する非常に大きなシステムに対して非常に大きな可能性が生じる。特に適した利用例としては、例えば、ビデオエンコーディング用の動作推定、高精細度ビデオエンコーディング処理、レーザライター用のラスタアルゴリズム、高速無線ネットワーク用のアクセラレータ、高度セキュア暗号化、記憶領域ネットワーク、ＨＤＴＶビデオスケーリング、802.13、802.11g、および他の無線プロトコル用のＦＥＣ、ＳＮＯＲＴ不正侵入検知、ディスプレイレート変化に対する一時的なビデオ補間がある。
【０１０８】
本発明の実施形態の主要な態様は、高性能の集積回路を作り、ソフトウェアのみを用いてそれらを変更することが本来的にできる完全性にある。完全性とは、ソフトウェア記述を使用するだけでソフトウェア−ハードウェアにおけるコデザイン上の問題が解決されることを意味している。
【０１０９】
本発明の実施形態を用いれば、ソフトウェアとハードウェアの観点およびその実装が、１つで同一のものとなる。これにより、開発システムのユーザは、標準的なツールと言語を用いてプログラムを書くことができ、付随する性能上の利益をすべて享受しつつ、ハードウェア内でそれらを直接実行することができる。
【０１１０】
本発明の実施形態のユーザは、ハードウェアについての知識や専門技術を有する必要がない。そのようなユーザは、単にソフトウェアを書き、操作することで、今日、オーダメードのＩＣによってのみ実現される非常に高性能なシステムと同様に複雑なシステムを作ることができる。システムがソフトウェア内で定義されると、既存の物理的ハードウェアオブジェクトのコレクションとともに作られる汎用ＩＣを設定するためにそのソフトウェア定義が使用される。オブジェクトのソフトウェアライブラリと結びつけられた唯一の汎用チップであるＲＳＰの組み合わせにより、ユーザは、簡単には設計することができなかったシステムを、現状のツールを使用して効率良く迅速に設計し、テストすることが可能となる。
【０１１１】
実装例
図３２、図３３、図３４、および図３５は、簡単なオブジェクトを使って比較的複雑なオブジェクトを作る方法の例を示している。このオブジェクト例は、２つのストリームをたたみ込みフィルタされた２つのストリームを生成するものである。時間領域におけるたたみ込みは、周波数領域における乗算と等価であり、無線通信システムにおけるように多重フィルタがカスケード接続される用途において用いられる。設計の目標は、同じ値を同時に多くの構成オブジェクトに送る広範囲接続を介せず、複数のハードウェア乗算器をビジー状態にすることができるように、たたみ込みオブジェクトを生成することである。
【０１１２】
図３２は、たたみ込みプリミティブオブジェクトを示している。（ui、wi、およびyiで示される）３つの入力ポートと（wi+1、ui+1、およびyi+1で示される）３つの出力ポートを構成する６つのプロトコルレジスタがある。ハードウェアオブジェクト内の電気回路は、１つのハードウェア乗算器と１つの加算器である。ハードウェアオブジェクト内の接続は、次の動作を行うように設定されている。
【０１１３】
【数１】
2007526539.tif 000004
【０１１４】
また、図３２は、入力および出力ポートと「ＣＰ」と付されたプリミティブを示すオブジェクトの概略図を示している。
【０１１５】
図３３は、図３２のたたみ込みプリミティブオブジェクト用の擬似コードを示している。ポートは、CHANNEL型のINPORT接続またはOUTPORT接続として宣言されている。ローカル変数ui、wi、およびyiは整数型として宣言されている。この処理における１行目のコードは、チャンネルａとチャンネルｂのジョイン機能である。ジョイン機能は、チャンネルａとｂの双方が有効な入力を持つまで完了しない。チャンネルａで受信した値は変数uiに割り当てられ、チャンネルｂで受信した値は変数wiに割り当てられる。次の２行は、uiとwiを出力チャンネルｄとｅにそれぞれコピーしている。「c→yi」という行は、乗算器ハードウェアの出力を有する他のジョイン機能と等価であり、「join(a→ui,b→wi,cy→i)」を用いることにより１行目に組み込むことができたものである。しかしながら、図３３に示されるように２つに分けることにより、チャンネルｃの入力がまだ生じていなくても乗算器ハードウェアを続けさせることができる。最終行は、値ui*wi+yiがチャンネルｆに出力されることを示している。
【０１１６】
図３４は、この例において使用される他のプリミティブオブジェクトを示している。（uiおよびwiで示される）２つの入力ポートと（wi+1、ui+1、およびyi+1で示される）３つの出力ポートとを構成する（利用可能な６つのうちの）５つのプロトコルレジスタがある。ハードウェアオブジェクト内の電気回路は、唯一のハードウェア乗算器である。ハードウェアオブジェクト内の接続は、次の動作を行うように設定されている。
【０１１７】
【数２】
2007526539.tif 000005
【０１１８】
また、図３４は、入力および出力ポートと「乗算」の略号として「Ｘ」と付されたプリミティブを示すオブジェクトの概略図を示している。
【０１１９】
図３５は、図３２および図３４における２つのプリミティブオブジェクトをトポロジ内で組み合わせ、たたみ込みオブジェクトを生成する方法を示している。すべての接続は、配線を簡単にするポイント−ポイントであり続け、これにより、広範囲の配線の接続ではなく、プリミティブオブジェクトが性能に影響を与えることが可能となることに留意されたい。
【０１２０】
たたみ込みオブジェクトの関数は以下の式によって与えられる。
【０１２１】
【数３】
2007526539.tif 000006
【０１２２】
図３５の例においては、簡単にするため、i>3においては、w(i)とu(i)がゼロであるとしているが、実際のストリーミングシステムにおいては、最初の４つよりも多くの入力値を使用することができる。級数展開すれば、それぞれの出力項は以下の式により与えられる。
【０１２３】
【数４】
2007526539.tif 000007
【０１２４】
図３５のトポロジがこれらの項を正しく生成することを示すために、まず、出力y(0)を調べる。出力y(0)は、プリミティブオブジェクト６００のyi+1出力によって生成され、必要に応じて単にu(0)*w(0)となる。次に、出力y(1)を調べる。出力y(1)は、プリミティブオブジェクト６０１のyi+1出力によって生成され、以下のような関数である。
【０１２５】
【数５】
2007526539.tif 000008
上記式において、上付文字は、出力を生成する特定のオブジェクトを示している。オブジェクト６００とオブジェクト６０２は以下のように動作する。
【０１２６】
【数６】
2007526539.tif 000009
最後の４つの式を組み合わせると以下のようになる。
【０１２７】
【数７】
2007526539.tif 000010
このガウス消去法のプロセスが残りの出力y(2)...y(6)に対して続けられる。
【０１２８】
上述したシステムの実装は、上記開示の内容から作り出すことが容易なものである。例のごとく、実装の詳細はシステム設計者に任されている。特定のハードウェアオブジェクト、プロトコルレジスタ、メッセージのフォーマットなどの個々の選択は、実装の仕様であり、経験的に発見しなければならない場合もある。本発明は、システムの設計および実装において、現在の方法と比較して先駆的なパラダイムシフトを提示するものである。
【０１２９】
これまでハードウェアおよびソフトウェアオブジェクトを含む集積回路開発システムの特定の実施形態について述べてきたが、そのような具体的な言及が本発明の範囲に対する制限と考えられることを意図しているものではなく、本発明の範囲はクレームおよびその均等物によって決定されるべきものである。
【図面の簡単な説明】
【０１３０】
【図１Ａ】図１Ａは、ＡＳＩＣを設計するために使用される典型的なプロセスを示すブロック図である。
【図１Ｂ】図１Ｂは、ＦＰＧＡを設計するために使用される典型的なプロセスを示すブロック図である。
【図２】図２は、データ転送プロトコルを示すタイミングチャートである。
【図３】図３は、データレジスタを抽象的に示すブロック図である。
【図４】図４は、本発明の実施形態に係るプロトコルレジスタを抽象的に示すブロック図である。
【図５】図５は、組み合わせ論理回路を含むプロトコルレジスタブロック図である。
【図６】図６Ａ〜図６Ｅは、一連のプロトコルレジスタにより形成されるデータパイプラインの挙動を示すブロック図である。
【図７】図７は、本発明の他の実施形態に係るプロトコルレジスタのブロック図である。
【図８】図８は、本発明の実施形態に係るプロトコルレジスタの模式図である。
【図９】図９は、図８のプロトコルレジスタの状態遷移図である。
【図１０】図１０は、無効データメンバを示すデータパケットの２つのブロック図を示す。
【図１１】図１１は、２つのデータパケットの組み合わせ方法を示す。
【図１２】図１２は、従来のＦＩＦＯ要素を本発明に組み込む方法を示すブロック図である。
【図１３】図１３は、プロトコルレジスタを用いてハードウェアオブジェクトを構築する方法を示すブロック図である。
【図１４】図１４は、フォーク、ジョイン、およびプロトコルレジスタの等価組み合わせを示す模式図である。
【図１５】図１５は、プロトコルレジスタの非同期実装を示す模式図である。
【図１６】図１６は、擬似非同期クロックの生成を示すタイミングチャートである。
【図１７】図１７は、プロトコルレジスタの擬似非同期実装を示すブロック図である。
【図１８】図１８は、ハードウェアオブジェクトの一例のブロック図である。
【図１９】図１９は、既存のハードウェアオブジェクトからハードウェアオブジェクトを定義する方法を示すブロック図である。
【図２０】図２０Ａ〜図２０Ｃは、異なる種類のハードウェアオブジェクトを示すブロック図である。
【図２１】図２１は、他の種類のハードウェアオブジェクトを示すブロック図である。
【図２２】図２２は、ハードウェアオブジェクトがメッセージを用いて互いに通信を行う方法を示すブロック図である。
【図２３】図２３は、メッセージフォークオブジェクトを示すブロック図である。
【図２４】図２４は、メッセージジョインオブジェクトを示すブロック図である。
【図２５】図２５は、物理的に形成された多数のハードウェアオブジェクトを有する再設定可能チップの例を示す。
【図２６】図２６は、開発システム用の再設定可能チップと連係して用いられるオブジェクトライブラリを示すブロック図である。
【図２７】図２７は、ソフトウェアオブジェクトの階層を示すブロック図である。
【図２８】図２８は、ハードウェアシステムのソフトウェアモデルを示すブロック図である。
【図２９】図２９は、ソフトウェアオブジェクトを再設定可能チップ上にマップする方法を示すブロック図である。
【図３０】図３０は、それぞれのソフトウェアオブジェクトシステムに付けることのできる付加情報を示すブロック図である。
【図３１】図３１は、再設定可能チップ上への実装用ソフトウェアシステムを開発する場合に用いられるプロセスを示すフロー図である。
【図３２】図３２は、本発明の実施形態を用いて作成することができるシステムの一例を示す図である。
【図３３】図３３は、本発明の実施形態を用いて作成することができるシステムの一例を示す図である。
【図３４】図３４は、本発明の実施形態を用いて作成することができるシステムの一例を示す図である。
【図３５】図３５は、本発明の実施形態を用いて作成することができるシステムの一例を示す図である。
【図１Ａ】
2007526539.tif 000011
【図１Ｂ】
2007526539.tif 000012
【図２】
2007526539.tif 000013
【図３】
2007526539.tif 000014
【図４】
2007526539.tif 000015
【図５】
2007526539.tif 000016
【図６】
2007526539.tif 000017
【図７】
2007526539.tif 000018
【図８】
2007526539.tif 000019
【図９】
2007526539.tif 000020
【図１０】
2007526539.tif 000021
【図１１】
2007526539.tif 000022
【図１２】
2007526539.tif 000023
【図１３】
2007526539.tif 000024
【図１４】
2007526539.tif 000025
【図１５】
2007526539.tif 000026
【図１６】
2007526539.tif 000027
【図１７】
2007526539.tif 000028
【図１８】
2007526539.tif 000029
【図１９】
2007526539.tif 000030
【図２０】
2007526539.tif 000031
【図２１】
2007526539.tif 000032
【図２２】
2007526539.tif 000033
【図２３】
2007526539.tif 000034
【図２４】
2007526539.tif 000035
【図２５】
2007526539.tif 000036
【図２６】
2007526539.tif 000037
【図２７】
2007526539.tif 000038
【図２８】
2007526539.tif 000039
【図２９】
2007526539.tif 000040
【図３０】
2007526539.tif 000041
【図３１】
2007526539.tif 000042
【図３２】
2007526539.tif 000043
【図３３】
2007526539.tif 000044
【図３４】
2007526539.tif 000045
【図３５】
2007526539.tif 000046
【手続補正書】
【提出日】平成19年6月15日(2007.6.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データワードを格納する第１のデータレジスタのセットと、
他のデータワードのグループ内における前記データワードのメンバシップを示すグループインジケータを格納する第２のレジスタと、
前記データワードの有効性を示すvalid信号を格納する第３のレジスタと、
前記データワードと前記valid信号を第２のデータワードと第２のvalid信号に置換できることを示すaccept信号を格納する第４のレジスタと、を備えたことを特徴とするハードウェアレジスタ構造。
【請求項２】
さらに、置換データワードを格納する第２のデータレジスタのセットと、
置換グループインジケータを格納する第５のレジスタと、
置換valid信号を格納する第６のレジスタと、を備えた請求項１のハードウェアレジスタ構造。
【請求項３】
否定グループインジケータに接続された第１の入力と、
前記accept信号に接続された第２の入力と、
前記第４のレジスタに接続された出力と、を有するＯＲ機能をさらに備えた請求項１のハードウェアレジスタ構造。
【請求項４】
さらに、前記第１のデータレジスタのセットと前記第２のデータレジスタのセットとの間に接続された第１のマルチプレクサと、
前記第２のレジスタと前記第５のレジスタとの間に接続された第２のマルチプレクサと、
前記第３のレジスタと前記第６のレジスタとの間に接続された第３のマルチプレクサと、を備えた請求項３のハードウェアレジスタ構造。
【請求項５】
データを第１および第２の記憶素子セットに並行にロードするステップであって、前記データが当該データの有効性を示すインジケータと、グループのメンバである当該データの位置を示すインジケータとを含んでいるステップと、
データを受け入れるためにプロトコルレジスタの出力に接続された受信オブジェクトのデータ受け入れ能力を示す第１のaccept信号を受信するステップと、
前記第１のaccept信号の後に受信され、前記受信オブジェクトのデータ受け入れ能力を示す第２のaccept信号を受信するステップと、
前記第１のaccept信号と前記第２のaccept信号とを比較するステップと、
前記第１のaccept信号と前記第２のaccept信号の双方が非アクティブであるときに、両方の記憶素子セット内のデータを保持するステップと、
前記第１のaccept信号と前記第２のaccept信号の双方がアクティブであるときに、新しいデータを前記第１および第２の記憶素子セットに並行にロードするステップと、
前記第１のaccept信号が非アクティブであり、前記第２のaccept信号がアクティブであるときに、前記第１の記憶素子セットから前記第２の記憶素子セットにデータをロードするステップと、
前記第１のaccept信号がアクティブであり、前記第２のaccept信号が非アクティブであるときに、前記第２の記憶素子セット内のデータセットを保持し、新しいデータセットを前記第１の記憶素子セットにロードするステップ、とを含むプロトコルレジスタの実行方法。
【請求項６】
さらに、現在前記第２の記憶素子セット内に記憶されているデータが無効であることを信号が示しているときに、前記第２の記憶素子セットに常に新しいデータをロードするステップを含む請求項５の方法。
【請求項７】
さらに、現在前記第１の記憶素子セット内に記憶されているデータが無効であることを信号が示しているときに、前記第１の記憶素子セットに常に新しいデータをロードするステップを含む請求項６の方法。
【請求項８】
さらに、現在前記第１の記憶素子セット内に記憶されているデータが無効であることを信号が示しているときに、前記第１の記憶素子セットに常に新しいデータをロードするステップを含む請求項５の方法。
【請求項９】
複数の第１のdata信号を格納する第１のデータレジスタのセットと、前記第１のデータレジスタのセットとは分離しており、第１のグループ内の前記第１のdata信号のメンバシップと前記第１のグループ内の前記第１のdata信号の相対位置とを示すグループインジケータを格納する第２のレジスタと、前記第１のデータ信号の有効性を示すvalid信号を格納する第３のレジスタと、前記複数の第１のデータ信号と前記valid信号が新しい複数の第１のdata信号に置換できることを示すaccept信号を格納する第４のレジスタと、を含む第１のインタフェイスと、
複数の第２のdata信号を格納する第２のデータレジスタのセットと、前記第２のデータレジスタのセットとは分離しており、第２のグループ内の前記第２のdata信号のメンバシップと前記第２のグループ内の前記第２のdata信号の相対位置とを示すグループインジケータを格納する第５のレジスタと、前記第２のデータ信号の有効性を示すvalid信号を格納する第６のレジスタと、前記複数の第２のデータ信号と前記valid信号が新しい複数の第２のdata信号に置換できることを示すaccept信号とを格納する第７のレジスタと、を含む第２のインタフェイスと、
出力インタフェイスと、
前記入力インタフェイスと前記出力インタフェイスとに接続され、前記第１の入力インタフェイスと前記第２の入力インタフェイスのいずれか、または前記第１および第２の入力インタフェイスの双方から受信した完全なデータグループに対してのみ動作するように構成されたジョイン回路と、
を備えたジョイン要素。
【請求項１０】
前記ジョイン回路は、前記第１の入力インタフェイスのデータグループと前記第２の入力インタフェイスのデータグループの２つ１組の組み合わせに対して機能するように構成されている請求項９のジョイン要素。
【請求項１１】
前記第１および第２の入力インタフェイスの双方は同時に先頭データ要素を提示し、前記ジョイン回路はその選択を調停するように構成されている請求項９のジョイン要素。
【請求項１２】
前記ジョイン回路は、最も以前に使用された入力インタフェイスを選択するように構成されている請求項１１のジョイン要素。
【請求項１３】
前記ジョイン回路は、優先順位に基づいて入力インタフェイスを選択するように構成されている請求項１１のジョイン要素。
【請求項１４】
複数のdata信号を格納する第１のデータレジスタのセットと、前記第１のデータレジスタのセットとは分離しており、グループ内の前記data信号のメンバシップと前記グループ内の前記data信号の相対位置とを示すグループインジケータを格納する第２のレジスタと、前記データ信号の有効性を示すvalid信号を格納する第３のレジスタと、前記複数のデータ信号と前記valid信号が新しい複数のdata信号に置換できることを示すaccept信号とを格納する第４のレジスタと、を含む入力インタフェイスと、
前記入力インタフェイスに接続され、前記入力インタフェイスから受信した完全なデータグループに対してのみ動作するように構成されたフォーク回路セットと、
第１の出力インタフェイスと、
第２の出力インタフェイスと、
を備えたフォーク要素。
【請求項１５】
前記フォーク回路は、前記入力インタフェイス上のデータグループを複製し、該複製されたグループを前記第１の出力インタフェイスおよび前記第２の出力インタフェイスに送信するように構成されている請求項１４のフォーク要素。
【請求項１６】
前記フォーク回路は、前記入力インタフェイス上のグループの先頭data信号を受信した後に複製を開始するように構成されている請求項１５のフォーク要素。
【請求項１７】
前記フォーク回路は、前記第１の出力インタフェイス上のグループの最終data信号を送信し、前記第２の出力インタフェイス上のグループの最終data信号を送信した後に複製を終了するように構成されている請求項１５のフォーク要素。
【請求項１８】
一度に１ワードのデータストリームを受け入れるデータインタフェイスであって、
前記データインタフェイスに接続された前段から、１以上のデータを同時にデータワードとして受け入れる入力と、
前記データワードと同時に、当該データワードが以前のデータワードと関連付けられているかどうかを示すメッセージパケット識別子を受け入れる入力と、
前記受け入れられたデータワードの有効性の表示を受け入れる入力と、
前記データインタフェイスに接続された後段が前記データインタフェイスから転送されたデータワードを受け入れ可能であることの表示を受け入れる入力と、
前記後段がデータワードを受け入れ可能であるか、または前記受け入れられたデータワードが有効ではない場合に、前記データインタフェイスに次のデータワードを前記前段からロードさせるように構成されたロード回路と、
前記メッセージパケット識別子から新しいメッセージパケットの開始を検出するように構成されたパケット検出回路と、
を備えたデータインタフェイス。
【請求項１９】
前記パケット検出回路は、１番目のデータワードのメッセージパケット識別子および２番目のデータワードのメッセージパケット識別子におけるデータ遷移状態を検出するように構成されている請求項１８のデータインタフェイス。
【請求項２０】
前記パケット検出回路は、非アクティブなメッセージパケット識別子をメッセージパケットにおける最終データワードであると識別するように構成されている請求項１８のデータインタフェイス。
【請求項２１】
前記パケット検出回路は、メッセージパケットにおける最終ワードに続くアクティブなメッセージパケット識別子を次のメッセージパケットの先頭ワードであると識別するように構成されている請求項１８のデータインタフェイス。
【請求項２２】
送信オブジェクトに接続され前記送信オブジェクトからの情報に関係なく入力accept信号を生成し、前記送信オブジェクトから１以上のメッセージパケットを受け入れるように構成された入力インタフェイスと、
前記入力インタフェイスに接続され、メッセージパケット内のデータセットを受信した後にのみ状態を変化するように構成されたオブジェクトコアと、
前記コアと受信オブジェクトとの間に接続され、前記受信オブジェクトからの情報に関係なくvalidデータ信号を生成し、１以上のメッセージパケットを前記受信オブジェクトに送信するように構成された出力インタフェイスと、
を備え、
前記１以上のメッセージパケットは、データと、当該データの有効性を示すインジケータと、メッセージパケットにおけるメンバシップと当該メッセージパケットにおける相対位置を示すインジケータと、を含むことを特徴とする基板上のハードウェアオブジェクト。
【請求項２３】
前記オブジェクトコアは、前記オブジェクトコアのクロックに同期しないメッセージパケットを受信するように構成されている請求項２２のハードウェアオブジェクト。
【請求項２４】
前記オブジェクトコアは、受信オブジェクトのクロックに同期しないメッセージパケットを送信するように構成されている請求項２２のハードウェアオブジェクト。
【請求項２５】
前記オブジェクトコアは、
第１の情報に作用するように構成された第１のコア部と、
前記第１のコア部に接続された内部プロトコルインタフェイスと、
前記内部プロトコルインタフェイスに接続され、第２の情報に作用するように構成された第２のコア部と、
を備えた請求項２２のハードウェアオブジェクト。
【請求項２６】
前記プロトコルインタフェイスは、前記入力インタフェイスと同一の構造である請求項２５のハードウェアオブジェクト。
【請求項２７】
前記プロトコルインタフェイスは、前記出力インタフェイスと同一の構造である請求項２５のハードウェアオブジェクト。
【請求項２８】
マルチプロセッサ集積回路内で第１のドメインにおける第１のプロセッサと第２のドメインにおける第２のプロセッサとの間で通信する方法であって、該方法は、
データメッセージを生成するステップと、
当該データメッセージを一つの出力ポートに１以上のデータワードとして格納するステップであって、前記データメッセージは、当該データの有効性を示す第１の信号と、データワードを現在受け入れるために次の続くステージの能力を示す第２の信号と、前記データメッセージにおける１以上のデータワードのメンバシップを示す第３の信号を伴っているステップと、
前記次の続くステージが前記データワードを現在受け入れることができることを示すポジティブな信号を示す信号を前記出力ポートにおいて受信するステップと、
前記次の続くステージから前記第２の信号として受け取った前記ポジティブな信号を格納するステップと、
前記出力ポートにおいて前記ポジティブな信号を受信した後に、前記第２のプロセッサの入力ポートにタイムインセンティブな物理的な通信チャネルを通じて前記メッセージを送信するステップと、を含む前記通信する方法。
【請求項２９】
ハードウェアオブジェクトの集積回路開発システムであって、
当該集積回路に含まれる複数のハードウェアオブジェクトの複数のソフトウェアオブジェクトの記述のライブラリであって、前記複数のハードウェアオブジェクトの内の少なくとも二つは、他方とは無関係に動作するように構成されており、前記ソフトウェアオブジェクトの記述の内の少なくともいくつかは、より低いレベルのソフトウェアトの記述を含んでいるものと、
プログラムされる前記集積回路を記述した複数のハードウェアリソースの集合のリストと、
特別でないソフトウェアトの複数の識別子を含むとともに、複数の相互接続されたソフトウェアオブジェクトの記述からなるデザインを格納するデザインスペースと、
前記特別でないソフトウェアオブジェクトの複数の識別子を前記複数のハードウェアリソースの集合における個々の特別な複数のハードウェアリソースに関連付けるように構成されたリンク手段と、
前記デザインと前記関連付けられた特別な複数のハードウェアリソースから初期化ファイルを出力するように構成されたモジュールと、を備えたことを特徴とする前記システム。
【請求項３０】
前記ソフトウェアオブジェクトのライブラリは、前記少なくとも二つのハードウェアオブジェクトに対するルールのリストを含み、非同期メッセージを通すことでお互い通信するようになっている請求項２９の開発システム。
【請求項３１】
前記ソフトウェアオブジェクトの記述の内の少なくともいくつかは、より低いレベルのソフトウェアオブジェクトの記述だけからなる請求項２９の開発システム。
【請求項３２】
前記初期化ファイルは、前記複数のハードウェアオブジェクトに対する命令を含んでいる請求項２９の開発システム。
【請求項３３】
物理的にインスタンス化されたハードウェアオブジェクトの集積回路をプログラムする方法であって、
当該集積回路に含まれる複数のハードウェアオブジェクトの複数のソフトウェアオブジェクトの記述のライブラリを受け取るステップであって、前記複数のハードウェアオブジェクトの内の少なくとも二つは、他方とは無関係に動作するように構成されており、前記ソフトウェアオブジェクトの記述の内の少なくともいくつかは、より低いレベルのソフトウェアオブジェクトの記述を含んでいるステップと、
プログラムされる前記集積回路を記述した複数の特別なハードウェアリソースの集合を受け取るステップと、
特別でないソフトウェアオブジェクトの複数の識別子を含むとともに、複数の相互接続されたソフトウェアオブジェクトの記述からなるデザインを受け取るステップと、
前記特別でないソフトウェアオブジェクトの複数の識別子を前記複数のハードウェアリソースの集合における個々の特別な複数のハードウェアリソースに関連付けるステップと、
前記デザインと前記関連付けられた特別な複数のハードウェアリソースからの初期化ファイルを作るステップと、を含むことを特徴とする前記方法。
【請求項３４】
前記物理的にインスタンス化されたハードウェアオブジェクトの内の一方は、起動指令をロードするように構成されている請求項３３記載の方法。
【請求項３５】
前記ソフトウェアオブジェクトの記述のライブラリを受け取るステップは、前記少なくとも二つのハードウェアオブジェクトに対するルールのリストを受け取り、非同期メッセージを通すことでお互い通信するようになっている請求項３３の方法。
【請求項３６】
前記初期化ファイルを作るステップは、前記複数のハードウェアオブジェクトの内の１以上のオブジェクトの動作速度を設定する信号を生成するようになっている請求項３３の方法。
【請求項３７】
前記動作速度がゼロである請求項３６の方法。
【請求項３８】
前記特別でないソフトウェアオブジェクトの複数の識別子を前記複数のハードウェアリソースの集合における個々の特別な複数のハードウェアリソースに関連付けるステップは、前記複数のハードウェアリソースの内の少なくとも一つを同じ機能を有する二つのハードウェアリソースの内の一方に関連付けるようになっている請求項３３の方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【関連出願の参照】
【０００１】
本出願は、２００３年６月１８日に提出された「集積回路開発システム」という表題の米国仮特許出願６０／４７９，７５９に基づく優先権を主張するものであり、当該米国仮特許出願の内容は参照により本出願に組み込まれる。
【技術分野】
【０００２】
本件は、集積回路開発システムに係り、特に、ハードウェアオブジェクト、ハードウェアオブジェクトの間でのメッセージを容易にする通信構造、およびハードウェアオブジェクト上におけるソフトウェア表現およびシステムの実行を可能にするシステムを含む集積回路開発システムに関するものである。
【背景技術】
【０００３】
現在のところ、集積回路（ＩＣ）の設計および開発は、非常に難しくコストのかかるプロセスである。今日におけるＡＳＩＣ（特定用途向け集積回路）の手法やＥＤＡ（電子設計自動化）ツールにおいては厳しい制約があるので、新たな製造技術により特別なゲートが提供されても、設計者はそのすべてを効果的に使用することができないため、設計上のギャップがますます広がりつつある。
【０００４】
すべてを注文設計する場合には、たとえキャッシュメモリのように大きな規則正しい構造を設計する場合であっても、非常にコストがかかってしまう。これは、新たな製造技術においては低レベル詳細部の複雑さが指数関数的に増加するので、使用可能時間内に多くの新しい設計をすることができないからである。現在の構造ではＩＣのスピードに限界があるが、配線を長くし、チップの構成部品間の配線をより多くすることがますます必要となっている。このように配線の量が増えることにより、配線中の欠陥を中心とする新たな製造パラダイムが生じる。
【０００５】
１つのダイあたり１０億個程度というトランジスタ密度に向けて製造技術が進み続けるにつれ、設計コストの急激な上昇、検証の手間の指数関数的増加、現在の設計ツール固有の制限、および以前のものを効果的に再利用できないことにより、将来の開発が非常に高価で少数の者にしか利用できないものになるであろうことが明らかになってきている。
【０００６】
図１Ａおよび図１Ｂは、ＡＳＩＣおよびＦＰＧＡ（フィールドプログラマブルゲートアレイ）を用いてＩＣを作成する工程の例を示す。ここでは機能Ａ，Ｂ，Ｃとして示されているシステムモデルを作ることから設計が始められる。このシステムモデルはどのような方法によって作成してもよく、このようなモデリングシステムには、例えばブロック図、統一モデル言語（ＵＭＬ）モデルまたはデータフローチャートが含まれる。システムモデルが完成すれば、人の手によりソフトウェアが記述されるが、これは時間がかかりチェックが難しいものである。このソフトウェア記述は、例えば、Ｃ、Ｃ＋＋、Java（「Java」は登録商標です）、Matlab、Smalltalk、またはSystem Cにより作成することができる。次に、このソフトウェア記述は、システムの論理ゲートモデルを作成するのに使用できるレジスタ転送レベル（ＲＴＬ）記述に人の手により翻訳される。ＲＴＬは、合成を介して論理ゲートモデルを生成するのに使用できるVerilogやVHDLのようなハードウェア記述言語（ＨＤＬ）の一般用語である。ＲＴＬは、ＡＳＩＣ（図１Ａ）やＦＰＧＡ（図１Ｂ）のいずれに対しても使用される。人の手によりソフトウェア記述からＲＴＬに翻訳することは、時間がかかりチェックが難しいものである。ＡＳＩＣについては、合成により論理ゲートモデルが作成されれば、より多くのソフトウェアが使用され、半自動ハードウェアレイアウトツールにより機能を発揮するようにゲートが配置および配線される。配列された後、作成されたパターンは、製造工程において光学効果を生じるように最適化される。この工程を最適化するためには何度も繰り返すことが必要になり、手動で最適化がなされる場合があることに留意されたい。最後に、マスクセットが作成され、特定の設計済みＡＳＩＣを作るためにこのマスクセットが使用される。
【０００７】
図１Ｂからわかるように、ＦＰＧＡを作成するためにも同様の工程がなされる。論理ゲートモデルを製作するためにＲＴＬ記述と合成が用いられる。目標とする部分に物理的にデザインを確実に適合させるためには、何度か繰り返さなければならない場合がある。マッピングが判明すれば、タイミング条件を確実に満足するためにそのデザインの検査がなされる。最初の段階でタイミング設計条件を満足していない場合には、マッピングとタイミング条件の双方が満足されるようにＲＴＬの構造を変更しなければならない。例えば、タイミングの制約条件が確実に満足されるように同じ論理回路を多重に繰り返す必要があることが多いが、ＲＴＬ記述を変更するだけでこれを行うことができる。最後に、ＦＰＧＡ上の各要素の論理マッピングがＲＯＭにロードされる。ＦＰＧＡ装置の電源が入ると、ＲＯＭからすべてのＦＰＧＡ要素が自動的にロードされ、所望の機能が発揮される。
【０００８】
トランジスタや他のＩＣ構成部品のサイズが小さくなっているため、すべてを注文設計した場合には、現在使用されているよりも多くの設計者が必要となり、これにより複雑さが増大し、現在の技術の状況に比べると、開発するのに必要な時間と資力が指数関数的に増加する。ハードウェアの複雑さを軽減し、ハードウェアにおける間違いを検証することを少なくするために、現在の多くのシステムは、ハードウェアとソフトウェアとを混合して使用している。この新しいパラダイムにおいては、プログラム可能なハードウェア上で実行されるソフトウェアを多くの構成部品に関して使用して、装置の製造後に機能性およびバグを修正できるようにすることに対して、パフォーマンスはトレードオフの関係に立つ。このソフトウェアとハードウェアとを共存させて解決法を得るというコデザインプロセスは、ここ２０年広範囲にわたって研究されてきた課題であるが、ほとんど成功していない。
【０００９】
適当な時間内に広範で複雑な設計を行い、これを検証することを確実に行うためには、ハードウェアとソフトウェアの構成要素を広範囲にわたって再利用することが必要不可欠であるが、これは実現不可能なものとされ、一致団結した小さな設計センター内で、限られた意味においてのみなされていたものである。
【００１０】
本発明の実施形態は、従来技術における他の限定にも向けられている。
【発明を実施するための最良の形態】
【００１１】
本発明の実施形態には、集積回路開発用のシステムが含まれる。この開発システムの要素には、ハードウェアオブジェクトとソフトウェアオブジェクトが含まれる。これらのオブジェクトは、ソフトウェア環境においてインスタンス化され、整列され、パラメータが決められ、接続されることにより異なる機能を実現する。ソフトウェアにおいては、その記述により１組のオブジェクトのトポロジと特性が定義される。これらのオブジェクトは他のオブジェクトと階層的に構成されている。最も低いレベルの階層はプリミティブオブジェクトと呼ばれる。その機能を実現し、ソフトウェアオブジェクトの本質的な特性を維持することができるハードウェアを使用すれば、ソフトウェア記述のトポロジと特性とが、所望の機能を発揮できるハードウェアを定義するために必要なすべてのものとなる。本発明の実施形態を用いれば、回路設計者は、ハードウェアまたはハードウェアデザインについてほとんど知識がなくても、あるいは全く知識がなくても、ソフトウェア記述だけでハードウェアシステムを設計することができる。
【００１２】
通信の基本
基本的に、ＩＣ上に形成されたハードウェアオブジェクトは電気信号を用いて互いに通信を行う。電気信号の状態によりデータが定義される。例えば、作動電圧と基準接地電圧の中間点よりも高い電圧値の電気信号は「１」またはHIGHの値を表していると考えることができ、その中間点よりも低い電圧は「０」またはLOWの値であると考えることができる。信号の完全性を確保するために、基準接地電圧に近い限られた範囲の電圧がLOWの値であるとされる。同様に、作動電圧に近い限られた範囲の電圧がHIGHの値であるとされる。これらの範囲の間の電圧は未定義論理状態とされる。
【００１３】
すべての説明および図面において、HIGHの値は信号がアクティブであることを示しており、LOWの値は非アクティブ値であることを示している。信号がアクティブであることは、HIGHまたはLOWという用語によって決まるものではない。
【００１４】
第１の点から第２の点に同時にデータを伝達することができるパラレルデータバスを介してオブジェクト間で多重信号を送ることができる。特定の時間内に送ることのできるデータ量は、バスのデータ幅とデータの状態が更新される頻度によって決まる。
【００１５】
オブジェクト間でデータを送るタイミングと方法を決定するために、データ伝送プロトコルがよく使用される。典型的には、このプロトコル自身は実際の「データ」伝送の一部ではないが、データの特性を示したり、データの伝送を同期したりする。例えば、受信オブジェクトが、ビジー状態でデータを受信できないことを示すことがある。
【００１６】
図２は、受信オブジェクトがデータを受信可能であることを「accept」信号をアクティブにすることにより示す比較的簡単なデータ転送プロトコルを示すタイミングチャートである。同様に、送信オブジェクトは、そのオブジェクトが送っているデータが有効であるか無効なであるかを示す。無効なデータは、値を有しておらず、使用されることもない。
【００１７】
図２からわかるように、HIGHのaccept信号は、受信オブジェクトがデータを受信できることを示している。HIGHのvalid信号は、データが有効な値を有していることを示している。accept信号およびvalid信号がともにHIGHである場合、送信オブジェクトと受信オブジェクトとの間でデータ転送がなされる。図２にはclock信号が示されている。このクロックは、valid信号、accept信号、およびdata信号をその立ち上がりエッジでトリガする。data信号は、１ビットでもよく、同時に送信される数ビットのデータを含んでいてもよい。共通データバス幅は、８、１６、３２、または６４のように２の累乗になっている。
【００１８】
最初のクロックパルスにおいては、図２に示されたclock信号の立ち上がりエッジによりvalid信号のビットがHIGHにされ、data信号が意味のある値であることが示される。しかし、accept信号はLOWであり、これは、受信オブジェクトがデータを受信する準備が整っていないことを示している。data信号は、accept信号がHIGHにあるクロックエッジ４までDATA1という値を保持する。クロックエッジ３でaccept信号はHIGHにされ、受信オブジェクトが受信可能であることが示される。クロックエッジ４では、DATA1というデータが送信オブジェクトから受信オブジェクトに転送される。矢印はデータの転送を示している。クロックエッジ６，７，９では、valid信号とaccept信号がともにHIGHであるため、転送が行われる。他のすべてのクロックエッジにおいては、valid信号とaccept信号の一方もしくは両方がLOWであるため、転送が行われない。図２のクロックにおいては、説明を簡単にするためにクロックエッジにおける遷移が示されている。図２に示す転送プロトコルは、受信オブジェクトが送信オブジェクトの状態を推測的に知ることなく受信の準備が整ったことを示すプリエンプティブクラスのプロトコルの１つである。
【００１９】
図３は、プロトコルレジスタ５０を示すブロック図である。このレジスタは、入力インタフェイスと出力インタフェイスとの間の１組の記憶素子である。図３のインタフェイスは、図２に詳細を示したものと同一のプロトコルを使用している。入力インタフェイスは、in_accept信号を用いて記憶素子５２および５４が更新可能であることを示す。in_acceptがHIGHであれば、in_dataの値を記憶素子５４に格納し、in_validの値を記憶素子５２に格納する。記憶素子５２および５４は、１つ以上の値（valid, data）を保持していてもよいことに留意されたい。出力インタフェイスは、記憶素子５２の最も古い値をout_validに与え、記憶素子５４の最も古い値をout_dataに与える。out_validとout_dataの値は、out_accept信号がHIGHであるときには、次に古い値（valid, data）に変更され、そうでないときには変更されない。記憶素子５６は、out_accept信号の履歴を含んでおり、in_accept信号の次の値を計算するために使用される。
【００２０】
図４は、記憶素子７２，７４，７６，７８を含む別のプロトコルデータレジスタ７０のブロック図である。記憶素子７２，７４，７６は、図３のプロトコルレジスタ５０の記憶素子５２，５４，５６に対応し、同様に動作する。簡潔にするためにこれらの素子についての説明は省略する。記憶素子７８は、パケット識別子の値の履歴も格納するようにレジスタ７０を拡張するものである。図３のレジスタ５０は、２値（valid, data）の履歴を格納したが、図４のレジスタ７０は、３値（valid,（data, packet_id））の履歴を格納する。それぞれの値において、valid値がHIGHであることは、２値（data, packet_id）が意味のあるものであることを示している。valid値がLOWである場合には、２値（data, packet_id）を使用することができないか、または、未定義の結果が生ずる可能性がある。２値（data, packet_id）において、packet_idの値は、より大きなデータグループまたはデータパケットにおけるdata値の位置を示している。パケットメッセージが、パラレルで同時に転送できるデータよりも多くのデータを含んでいる場合、メッセージがいくつかのデータ「ワード」に分割されることが多い。ここでの「メッセージパケット」および「ワード」という用語は、最も広い意味で解釈されるべきであり、特定の構造、フォーマット、または限定を意味するものではない。したがって、１つのメッセージパケットを転送するためには、多数の組のデータまたはワードを送信しなければならない場合がある。
【００２１】
一実施形態においては、packet_idの値は１ビットであるが、より大きなグループやメッセージパケットにおけるデータメンバシップを示すものであってもよいことはもちろんである。特定の実施形態においては、packet_idのLOW値は、それがメッセージパケットの最終ワードであることを示している。packet_idに関して、他のすべてのワードはHIGH値となっている。これを利用して、現在のワードに先行するワードのLOW値のすぐ後にpacket_idのHIGH値が続いていることを検出することで、メッセージパケットにおける先頭ワードを決定することができる。換言すれば、先行するpacket_idにおけるLOW値に続くpacket_idにおける最初のHIGH値は、メッセージパケットにおける先頭ワードを示している。１ビットのpacket_idを用いた場合には、最初と最後のワードのみを決定することができる。
【００２２】
図５は、組み合わせ論理回路を含むプロトコルレジスタ８０を示している。図５のプロトコルレジスタ８０は、図３のプロトコルレジスタ５０と同様であり、記憶素子８２，８４，８６は、記憶素子５２，５４，５６に対応しているが、出力インタフェイスに論理回路８７を含んでいる。図５に示す実施形態においては、論理回路８７は、二入力ＯＲゲートである。論理回路８７は、否定演算されたレジスタ８２からのout_valid信号をout_accept信号に組み合わせて、out_validがLOWであっても、常にプロトコルレジスタ８０が次に古い値（valid, data）に更新する。実際の使用における動作を以下に詳細に示す。
【００２３】
図６Ａ〜図６Ｅは、パイプライン９０に組み込んだ一連のプロトコルレジスタ８０の動作を示すブロック図である。パイプライン９０は、Ｒ１〜Ｒ９で示される９つのレジスタを含んでいる。図６Ａ〜図６Ｅのそれぞれは、異なる時間ｔ１〜ｔ５を示している。パイプライン９０は、隣の受信オブジェクト（図示せず）からのout_accept信号を用いている。上述した隣の受信オブジェクトは、データを受信できないときにout_accept信号をLOWにする。ｔ１〜ｔ５におけるout_accept信号は常にLOWであり、その受信オブジェクトがｔ１〜ｔ５の間は受信していないことを示している。図５からわかるように、記憶場所８６は、in_accept信号を算出し、それを隣のレジスタに返信する。例えば、レジスタＲ１のin_accept信号はレジスタＲ２のin_accept信号などとなる。このように、受信オブジェクトからのout_accept信号はパイプライン９０に連続的に送られる。
【００２４】
図６Ａからわかるように、ｔ１の時点では、パイプライン９０は、有効な３つのワードデータＤ１，Ｄ２，Ｄ３を保持している。また、パイプライン９０は、無効であると考えられる他のデータを保持している。有効データは各レジスタにおいて陰付ボックスで示されており、無効データは陰なしボックスで示されている。上述したように、各サイクルにおいて、パイプライン９０は、隣の受信オブジェクトからのout_accept信号を用いている。また、パイプライン９０は、送信オブジェクト（図示せず）からの他の値（valid, data）を受け入れる。図６Ａのｔ１の時点においては、有効な４番目のワードデータＤ４がパイプライン９０に送られつつある。
【００２５】
したがって、ｔ１の時点では、有効なデータＤ１、Ｄ２、Ｄ３を有する３つのワードがあり、これらすべてはパイプライン９０の別個のプロトコルレジスタＲ２、Ｒ５、Ｒ８に格納されている。途中のout_accept信号がHIGHになるサイクルごとに、値（valid, data）は次のレジスタに進む。サイクルｔ１において、レジスタＲ１に与えられたout_acceptがLOWであったとしても、図５の論理回路８７によりＲ１が更新される。サイクルｔ２およびｔ３において、Ｒ２が無効データを含んでいるので、Ｒ２における途中のout_acceptはHIGHのままである。図５の論理回路８７は、パイプライン９０において無効なデータワードを除去し、パイプライン９０の各レジスタＲ１〜Ｒ９が意味のあるデータを格納している場合にのみ処理を停止するように作用する。
【００２６】
論理回路８７の動作は、すべてのレジスタＲ１〜Ｒ９の間で繰り返され、これにより、Ｄ１、Ｄ２の間にある無効データのすべてがサイクルｔ４までに除去され、Ｄ１およびＤ３の間にあるすべての無効データがサイクルｔ６（図示せず）までに除去される。これらの無効データは、Ｒ１に与えられたout_accept信号がLOWに保持されていても除去されており、受信オブジェクトはデータを受け入れていないことを示していることに留意されたい。本発明の実施形態によれば、無駄になるところであったサイクルにおいても、パイプラインのデータ処理を有効に継続させることができる。
【００２７】
図７は、プロトコルレジスタ７０（図４）を図５の論理回路８７と組み合わせたプロトコルレジスタ１００のブロック図である。プロトコルレジスタ１００は、図４を参照して説明したそれぞれの信号を格納するために記憶場所１０２，１０４，１０６，１０８を含んでいる。論理要素１０７は、図５の論理回路８７に対応するＯＲ機能を有している。同一の機能を有するゲートのあらゆる組み合わせにより論理要素１０７を構成できることはもちろんである。
【００２８】
図８は、本発明における単一の履歴を有するプロトコルレジスタ１１０の実装を示す模式図である。図８のプロトコルレジスタ１１０は、クロックのエッジでトリガされる「Ｄ」型フリップフロップとして示される記憶レジスタを含んでいる。さらに、フリップフロップの中には、イネーブルがHIGHのときに立ち上がりエッジで入力値を出力に転送することだけを許可するイネーブル入力を含むものがある。ここでの説明は、動作を説明するために主同期クロック（図示せず）を用いるが、回路は、後述の例において示すような非同期クロックを用いるようになっていてもよい。
【００２９】
Ｄ型フリップフロップ１３２，１３４，１３８は、１セットの値（valid, data, packet_id）を格納することができる第１のレジスタセットを構成している。このレジスタセットを「サイドレジスタ」１３０という。Ｄ型フリップフロップ１２２，１２４，１２８は、別の値（valid, data, packet_id）を格納することができる第２のレジスタセットを構成している。このレジスタセットを「メインレジスタ」１２０という。マルチプレクサ１４２，１４４，１４８は、（in_accept信号がHIGHの場合には）入力から、あるいはin_accept信号がLOWの場合にはサイドレジスタ１３０から、値（valid, data, packet_id）をメインレジスタ１２０にロードする論理セットを構成している。
【００３０】
上述したように、data値の幅は何ビットであってもよい。
【００３１】
論理機能１２７，１３７は、図５の論理回路８７に対応し、その詳細な機能はここでは説明しない。レジスタ１２６は、（論理機能１２７，１３７の動作を無視して）in_acceptになるサイクルまで遅らせたout_acceptのコピーを作成する。
【００３２】
サイドレジスタ１３０には、in_acceptがHIGHであるときに入力３値がロードされ、そうでない場合には、サイドレジスタはそれまでの３値を保持する。マルチプレクサ１４２，１４４，１４８とin_acceptとout_acceptの組み合わせにより、メインレジスタ１２０の動作が制御される。表１はメインレジスタの動作を示す。
【００３３】
【表１】
2007526539.tif 000047
【００３４】
表１は、プロトコルレジスタ１１０に関して４つの状態、すなわち通常、停止中、停止、開始中があることを示している。通常状態は、レジスタが入力インタフェイスから直接出力インタフェイスに次の３値を転送する通常動作を行っている状態である。停止中状態は、出力インタフェイスのout_accept信号がLOWとなって受信オブジェクトがデータを受信できないことを示し、入力インタフェイスのin_accept信号がまだLOWになっていないときに生じる。停止中状態においては、新しい入力３値を受け入れることができ、これはサイドレジスタ１３０に格納される。停止状態は、入力および出力インタフェイスの双方がデータを転送しておらず、レジスタ１２０および１３０の双方がvalidデータで満杯になっている状態である。開始中状態は、出力インタフェイスが最も古い３値を転送するが、入力インタフェイスが停止している状態である。開始状態においては、サイドレジスタ１３０に保持された２番目に古い３値がメインレジスタ１２０に転送される。図９は、プロトコルレジスタ１１０における状態遷移図であり、状態と各状態を変化させるout_accept信号の遷移を示している。
【００３５】
図１０は、長さ５のパケットを構成する３値（valid, data, packet_id）の考えられる２つの組み合わせを示す図である。それぞれの３値はワードＷ１〜Ｗ５として示されている。レジスタ図は、パケットが有効な３値および無効な３値の双方からなることを示しており、陰付ボックスは有効である場合を示している。validがLOWであるとき、data信号と同様にpacket_id信号は未定義である。packet_id信号は、LOWがパケットの最終ワードを示す１ビット信号である。上述したように、packet_idがLOWからHIGHに遷移することにより、パケットにおける先頭ワードが決定される
【００３６】
図１０のパケット図は、有効ワードのみを示すことによりvalid信号の状態を抽象化している。これは、マルチワードパケットに関して最も便利な図である。
【００３７】
図１１は、２つの等長パケット（この場合においてはそれぞれ長さ５のワード）をワードごとに組み合わせる方法を示している。図１０のパケット図において、動作は極めて簡単である。それぞれのワードは個々に組み合わされ、長さ５の新しいパケットが作成される。サイクルごとの挙動はより複雑であり、図１１のレジスタ図は、各パケットにおけるvalid信号が実際の動作にどのように影響するのかを示している。
【００３８】
図１１では、それぞれＡ１〜Ａ５およびＢ１〜Ｂ５と連続的に示された５ワードの２つのパケットＡおよびＢを用いている。図１１の例においては、この組み合わせにより長さ５の新たなパケットが生じ、それぞれの出力ワードはＡ１＋Ｂ１，Ａ２＋Ｂ２，．．．，Ａ５＋Ｂ５となる。
【００３９】
図１１は、Ｔ１からＴ１０の各サイクルにおける動作を示している。サイクルＴ１では、入力ワードＡ１およびＢ１がともに受け入れられ、合計であるＡ１＋Ｂ１が出力される。サイクルＴ１における出力３値（valid, data, packet_id）は（１，Ａ１＋Ｂ１，１）である。サイクルＴ２においては、Ｂ２が有効でないため加算されない。このため、Ａ２は、Ａ２およびＢ２の双方が存在し加算して出力値（１，Ａ２＋Ｂ２，１）を作成可能になるサイクルＴ５までＢ２を待つ。サイクルＴ２，Ｔ３，Ｔ４においては、有効な出力がないため、出力値は、Ｘを未定義の値として（０，Ｘ，Ｘ）となる。サイクルＴ６において、Ａ３とＢ３が利用可能になり、出力値は（１，Ａ３＋Ｂ３，１）となる。サイクルＴ７においては、Ｂ４が入力側にあるが、Ａ４を待たなければならないので、無効な出力値（０，Ｘ，Ｘ）が生成される。サイクルＴ８においては、Ａ４とＢ４が組み合わされ、出力値（１，Ａ４＋Ｂ４，１）が生成される。サイクルＴ９においては、Ｂ５が入力側にあるが、Ａ５を待たなければならないので、無効な出力値（０，Ｘ，Ｘ）が生成される。サイクルＴ１０では、Ａ５とＢ５が受け入れ可能なので、最終ワード（１，Ａ５＋Ｂ５，０）が生成される。
【００４０】
図１１において、packet_idフィールドは、パケットＡワードのpacket_idフィールドのコピーとする、あるいは、パケットＢワードからコピーすることができる。この例においては、パケットは同じ長さでなければならないので、この状況は対称的である。図１１は、無効なワードを、破棄せずに、入ってくるパケットにおける無効なワードの相対位置により出力パケット内で再配置する方法を示している。パケットを組み合わせるためには、最も長いパケット以上の時間が必要である。
【００４１】
図１２は、従来の方法で設計された先入れ先出し（ＦＩＦＯ）要素１４７を図３のプロトコルレジスタ５０に変える方法を示している。従来のＦＩＦＯ要素１４７は、主クロックを用いて同期させてもよく、あるいは、入力インタフェイスと出力インタフェイスで別個に独立した無関係のクロックを用いて非同期にしてもよい。従来のＦＩＦＯ要素１４７は、入力データをＦＩＦＯに入れるpush信号を用いている。ＦＩＦＯが満杯になると、ＦＩＦＯはfull信号を発する。full信号がHIGHのときにpush信号をアクティブにする挙動については、これらの状況では、入力データを破棄する実装もあれば、push信号を単に無視する実装もあるため、定義されていない。同様に、従来のＦＩＦＯ要素１４７は、ＦＩＦＯからデータを出力するためのpop信号を用いている。ＦＩＦＯが空になったときにempty信号が与えられる。push／fullの問題と同様に、empty信号がHIGHのときにpop信号をアクティブにすることは、これらの状況では、未定義値を出力する実装もあれば、pop信号を無視する実装もあるため、定義されていない。
【００４２】
図１２は、論理機能１４０，１４１，１４３，１４５を加えることにより、ＦＩＦＯ要素１４７を図３のプロトコルレジスタ５０に変える方法を示している。in_data信号とout_data信号は、ちょうどＦＩＦＯ要素１４７の入力および出力データポートに対応する。インバータ１４０により、ＦＩＦＯが空でない場合、すなわちＦＩＦＯ要素１４７にデータが存在する場合にout_validがHIGHとなることが保証される。インバータ１４５により、ＦＩＦＯが満杯でない場合、すなわちＦＩＦＯ要素１４７にまだ利用可能なスペースがある場合にin_acceptがHIGHとなることが保証される。２入力ＡＮＤ論理機能１４１および１４３は、ＦＩＦＯ要素１４７が満杯のときにpush=HIGHとなったり、ＦＩＦＯ要素１４７が空のときにpop=HIGHとなったりするような不当状態を排除することにより、ＦＩＦＯ要素１４７の起こりえる未定義の挙動を防止している。
【００４３】
図１３は、図３のプロトコルレジスタ５０、上述したプロトコルレジスタの他の例、またはこれらの組み合わせを用いてハードウェアオブジェクトを作成する方法を示している。図１３の上の例は、ハードウェアオブジェクト１５０に対して１つの入力ポートと１つのポートがある簡単なパイプラインステージを示している。ハードウェアオブジェクト１５０は、図１０において述べたパケット結合を用いて構築可能なメッセージを使用して、システムの他の部分と通信を行う。メッセージの内容と構造は、図１０のパケット結合により影響を受けない。以下のものに限られるわけではないが、データ、オペランド、結果、コマンド、指令、ルーティング方向、メッセージのステータスフラグ、および内部構造識別子を含めて、メッセージの形態および内容は簡単に構築することができる。
【００４４】
すべてのメッセージは非同期的に取り扱われる。常時メッセージを受信可能な非同期手段である入力ポートに関して、ハードウェアオブジェクト１５０により入力メッセージが処理できない場合の唯一の動作は入力をブロックすることである。これは、メッセージの一部でも使用または処理できない場合に、プロトコルレジスタ１５５がそのin_accept信号をLOWにすることによりなされる。準備ができてからはじめてメッセージを出力可能な非同期手段である出力ポートに関しては、出力メッセージの準備ができていないときの唯一の動作はハードウェアオブジェクト１５０に何も出力させないことである。これは、プロトコルレジスタ１５６がそのout_valid信号をLOWにすることによりなされる。
【００４５】
非同期的なメッセージによりハードウェアオブジェクト１５０の動作を制御することは、ソフトウェアオブジェクトの挙動および特性に直接対応するハードウェアオブジェクトを生成する場合に有効である。プロトコルレジスタ１５５，１５６は、予期しない副作用を生ずる周りの電気回路から電気回路１５１を隔離しているので、ハードウェアオブジェクト１５０内の電気回路１５１は、回路をどのように組み合わせたものであってもよい。また、非同期的なメッセージを使用すれば、いつでもメッセージを受信および出力することができるので、外部との間で生じるタイミングの問題を解消することができる。
【００４６】
ハードウェアオブジェクト１５０の他の実装例が図１３に含まれている。以下では、ハードウェアオブジェクト１５２とハードウェアオブジェクト１５０との関係について述べるが、プロトコルレジスタ１５７および１５８がそれぞれプロトコルレジスタ１５５および１５６に直接対応可能であるに留意することは重要である。また、電気回路１５３を電気回路１５１と同一のものとしてもよい。ハードウェアオブジェクト１５２は、簡単なＦＩＦＯ１５４と付加的なプロトコルレジスタ１５９とを含んでいる。ＦＩＦＯ１５４およびプロトコルレジスタ１５９は、入力メッセージをバッファし、遅らせるように動作する。同期システムにおいては、この遅延により、ハードウェアオブジェクト１５０と比較してハードウェアオブジェクト１５２の動作の待ち時間が変化することとなるが、この遅延はスループットや機能に影響を与えない。非同期システムにおいては、時間と待ち時間に関して厳格な概念がなく、ハードウェアオブジェクト１５２およびハードウェアオブジェクト１５０は同一の挙動をする。
【００４７】
図１３の内部プロトコルレジスタ１５９は、プロトコルレジスタが、ちょうど境界ではなく、ハードウェアオブジェクトの内部に有用な機能を有することを示している。本発明の好ましい実施形態においては、そのようなレジスタを使用することが有益な場合はいつでもプロトコルレジスタが排他的に使用される。
【００４８】
図１４は、プロトコルレジスタの異なる組み合わせを有する簡単なジョイン機能およびフォーク機能を示すものである。
【００４９】
ジョイン機能１６０は、図１０のパケット結合に対応するメッセージ全体に対して処理を行う。図１３の説明において、メッセージの詳細が説明される。最も簡単な形態のジョイン機能１６０は、２つの入力ポート１６１，１６２と１つの出力ポート１６８を有しており、２つの入力ポート１６１，１６２に受信されたメッセージの同期を行う。この同期は、入力ポート１６１および１６２がともにメッセージの先頭ワードを持ったときの出力メッセージにより始まり、入力インタフェイス１６１および１６２がともに同期プロセスを開始したメッセージの最終ワードを受信したときに完了する。
【００５０】
フォーク機能１６３は、図１０のパケット結合に対応するメッセージ全体に対して処理を行う。図１３の説明において、メッセージの詳細が説明される。最も簡単な形態のフォーク機能１６３は、２つの出力ポート１６５，１６６と１つの入力ポート１６４を有しており、入力ポート１６４に受信された入力メッセージを出力ポート１６５と１６６の双方に複製する。この複製プロセスは、入力ポート１６４がメッセージの先頭ワードを持ったときの出力メッセージにより始まり、出力インタフェイス１６５および１６６がともにこのプロセスを開始したメッセージの最終ワードを送信したときに完了する。
【００５１】
図１４では、図３のプロトコルレジスタ５０が黒く塗りつぶされた長方形として示されている。例えば、長方形１６７がプロトコルレジスタを表している。図１４は、同一のフォーク機能およびジョイン機能を生成するすべての等価なトポロジを示しており、基本的にはプロトコルレジスタの配置によって機能が変化することはない。図１３の説明において詳述したように、非同期システムにおいてプロトコルレジスタを挿入することはタイミングおよび機能に影響を与えない。
【００５２】
図１４の異なるトポロジは、プロトコルレジスタの挿入を任意に決めることができることを示している。本発明の好ましい実施形態においては、すべてのプロトコルレジスタにほぼ等しい電気的負荷特性および同様のタイミング特性を持たせるようにレジスタがＩＣ上に置かれる。このルールを強制することにより、すべてのプロトコルレジスタは実質的に同一の動作を行う。図１３に示されるポートとしてプロトコルレジスタを用いてハードウェアオブジェクトを構成する場合には、ハードウェアオブジェクトを実装するためにＩＣ上のどのプロトコルレジスタが選択されたかとは無関係に、ハードウェアオブジェクトの入力ポートおよび出力ポートが同一の機能および電気的性能を有することとなる。これにより、ハードウェアオブジェクトを副作用なく再配置または再インスタンス化することができ、これは、そのインスタンスがいつでもどこでも同一の動作をすると思われているソフトウェアオブジェクトをハードウェアモデル化するための重要な特徴となる。
【００５３】
図１５は、図８のプロトコルレジスタの実装１１０を拡張して非同期クロックclk1，clk2を用いたプロトコルレジスタを形成し、入力インタフェイスおよび出力インタフェイスのそれぞれのために３値（valid, data, packet_id）の繰り返しや消失がないようにする方法を示している。Ｄ型フリップフロップ１７１，１７２，１７３，１７４は同期機能を有し、これにより、シンクロナイザへの移行により準安定入力電圧が形成され、シンクロナイザの動作によりその準安定電圧が（ランダムに）有効なHIGHまたはLOWの電圧に分解される。もとの移行は少なくとも２サイクルにわたって安定を維持するので、シンクロナイザの分解はランダムであってよく、真の論理値は準安定後の次のサイクルに常に正しくサンプルされる。多くのシステムにおいて、２つよりも多くのＤ型フリップフロップ（１７１，１７２または１７３，１７４）をカスケード接続し、準安定出力電圧の可能性を低めてもよく、あるいは、Ｄ型フリップフロップ１７１，１７２，１７３，１７４の代わりに特定のシンクロナイザ要素を用いてもよい。
【００５４】
図１５は、valid信号とaccept信号が明確に同期することを示している。in_data信号とin_packet_id信号は同期的にサンプルされ、図１５の論理回路の動作により、out_valid信号とout_accept信号がHIGHであり、受信プロトコルレジスタ（図示せず）に転送が行われるときにout_data信号とout_packet_id信号が変化しないことが保証される。
【００５５】
図１５のvalid論理とaccept論理によりラッチが形成され、これにより論理的にHIGHである値がシンクロナイザの一方を通過し、他方のシンクロナイザにおいて対応するHIGHの値が受信されるまでこれをLOWにリセットすることはできない。
【００５６】
リセット状態においては、クリティカルノード１７５および１７６はLOWであり、１７７および１７８はHIGHである。これは回路が静止した状態である。この静止状態においては、主出力out_validはLOWでありin_acceptはHIGHである。すなわち、レジスタが空で開始の準備ができた状態である。out_validがLOWであることは、静止状態においてはout_acceptの状態が問題とならないことを意味している。in_validがHIGHとなり３値（valid, data, packet_id）を入力するときにはじめて次の状態になることができる。ノード１７７が次のサイクルでin_acceptとともにLOWとなることが状態レジスタ１７９により保証される。これにより、これ以上の入力データが受け入れられないことが保証される。ノード１７７のLOWの値は、フリップフロップ１７１，１７２を用いて同期され、最終的にはノード１７８がLOWになる。ノード１７６および１７８の双方がLOWになり、out_validがHIGHになる。状態レジスタ１８０は、転送が行われた時刻、すなわちout_validとout_acceptがともにHIGHとなった時刻を記録する。状態レジスタ１８０により、転送後の次のサイクルでノード１７６がHIGHとなることが保証される。ノード１７６をHIGHとすることにより、データの転送が繰り返されないようにout_validを強制的にLOWとする。ノード１７６のHIGHの値は、フリップフロップ１７３，１７４を用いて同期され、最終的にはノード１７５がHIGHとなる。
【００５７】
クリティカルノード１７５および１７６がHIGHで、１７７および１７８はLOWである状態は、転送が完了した休止状態である。この休止状態においては、ノード１７５をHIGHにすることにより、一連の動作を開始し、ノード１７７，１７８，１７６，１７５のすべてが最終的にそれぞれの静止状態であるLOW、LOW、HIGH、HIGHに戻る。このとき、in_validがHIGHになると新たな転送が開始される。
【００５８】
図１６は、マスタクロックから異なるクロック周波数を構成する方法を示すタイミングチャートである。図１６においては、２つの「非同期」周波数in_clkとout_clkが生成されている。これらの周波数は常にmaster_clkよりも低く、マークスペースまたはクロックエッジは必ずしも同一ではない。図１６においては、（シーケンスが繰り返されるとして）master_clkの立ち上がりクロックエッジ１５個に対して、in_clkとout_clkのそれぞれの立ち上がりクロックエッジが４つ存在する。これは、in_clkとout_clkの周波数はともにmaster_clkの周波数の４／１５であることを意味するが、in_clkとout_clkのエッジ位置の差は、これらのクロックが互いに非同期的になっていることを示している。
【００５９】
図１６は、本質的に非同期のクロックをマスタ同期クロックから比較的簡単に、またそれぞれの出力クロックに対して任意の周波数分割比をもって生成できることを示している。図１６においては、in_clkenは、master_clkの降下エッジでサンプルされ、in_clkを生成するためにmaster_clkとともにＡＮＤ機能用マスクとして使用される（master_clkに同期する）イネーブル信号である。同様に、out_clkenは、master_clkの降下エッジでサンプルされ、out_clkを生成するためにmaster_clkとともにＡＮＤ機能用マスクとして使用される（master_clkに同期する）イネーブル信号である。図１６で説明したクロック概念図は、擬似非同期クロックとして知られている。
【００６０】
図１７は、図８のプロトコルレジスタ実装例１１０を拡張して３値（valid, data, packet_id）の繰り返しや消失なく入力および出力インタフェイスのそれぞれに対して擬似非同期IN_CLKおよびOUT_CLKを用いるプロトコルレジスタを作成する方法を示している。擬似非同期IN_CLKおよびOUT_CLKは、図１６で説明したように、MASTER_CLK、in_clken、およびout_clkenから生成される。IN_CLKと示された領域には図８の論理回路が再現され、プロトコルレジスタ１９６が形成されている。この領域内のすべてのＤ型フリップフロップは、クロックとしてIN_CLKを用いている。MASTER_CLKと示された領域内の追加の論理回路は、OUT_CLKと示された領域内に示された出力インタフェイスが正しく形成され、OUT_CLK信号と揃うようにプロトコルが再フォーマットされることを保証する機能を有する。Ｄ型フリップフロップ１９０は、クロックとしてMASTER_CLK信号を用いている。
【００６１】
図１７のMASTER_CLK領域内の論理回路は、IN_CLKとOUT_CLKが同じ場合に、in_clkenとout_clkenがずっとHIGHであり最も高い周波数となっても、図８の実装例と同一の動作がなされることを保証するように配置されている。この場合における論理回路の動作は分かりやすい。論理ゲート１９１は常にLOWの値を出力し、Ｄ型フリップフロップ１９０も同様である。したがって、論理ゲート１９２，１９３，１９４はパスモードであり、out_acceptとout_validの状態はプロトコルレジスタ１９６により直接制御される。
【００６２】
図１７においてin_clkenとout_clkenがずっとHIGHではない場合は、MASTER_CLK領域のゲートは、out_validと（IN_CLKをクロックとして用いるプロトコルレジスタ１９６に対するout_acceptである）論理ゲート１９３の出力とが正しい状態となるように制御される。すなわち、論理ゲート１９２は、out_validをLOWにすることにより次のin_clkenがまだアクティブになっていないときにout_validを複製する可能性を除去し、論理ゲート１９３は、ゲート１９３の出力をHIGHにすることにより次にin_clkenがアクティブにされるまで「out_accept」を拡張し（逃さない）ことを保証する。
【００６３】
ハードウェアオブジェクト
図１８は、ハードウェアオブジェクトの機能図を示している。上述したように、ハードウェアオブジェクトは、多数のプロトコルレジスタにより区切られた電気回路を含んでいる。プロトコルレジスタは、上述したレジスタと同じものであってもよい。電気回路の論理的な流れはレジスタの存在によって全く影響を受けず、むしろレジスタは長い信号線を区分することによって電気的負荷をバランスさせるために用いられる。それぞれのハードウェアオブジェクトは、完全にカプセル化されており、他のオブジェクトの状態による影響を受けない。ハードウェアオブジェクトは、メッセージまたはメッセージパケットを送信することにより互いに通信を行う。パケットは、指令またはデータ、あるいはその両方を含んでいてもよい。実施形態によっては、メッセージを用いることによってのみハードウェアオブジェクトの内部状態が調べられ変更される。ハードウェアオブジェクトが指令および適切なデータを受信すると、受信ハードウェアオブジェクトはデータを操作して出力を生成することができる。この出力は他のオブジェクトに送信することができる。
【００６４】
一般に、上述した開発システムにおいては、ハードウェアオブジェクトは中規模のものであり、すなわちＡＮＤゲートのような最も簡単な機能ではなく、ハードウェアオブジェクト集合の一般的性質を壊す傾向を有するような過度に複雑な機能でもない。中規模オブジェクトの中には、ＩＯ構造、マイクロプロセッサ、ＲＡＭ、および有限状態機械（ＦＳＭ）が含まれる。オブジェクトの中には、極めて一般的な用途のものもあれば、一定の機能を有するものもある。オブジェクトは継承可能な従属機能を持っていてもよく、例えば積和（ＭＡＣ）オブジェクトは用途によって加算器または乗算器として機能する場合がある。
【００６５】
ハードウェアオブジェクト３００には、典型的には少なくとも１つの入力プロトコルレジスタ３１０と出力プロトコルレジスタ３１０によって「仕切られ」た特殊な中央電気回路３０４の組が含まれる。図１８においては、マルチプルプロトコルレジスタ３１０が存在している。実際には、プロトコルレジスタ３１０の存在および／または配置は回路動作に影響を与えないので、オブジェクトの動作機能または動作能力を失うことなく、プロトコルレジスタを持たないハードウェアオブジェクトを有することも可能である。逆に、ハードウェアオブジェクト３００は、中央電気回路３０４の内部と境界部の双方に多数のレジスタを持っていてもよい。プロトコルレジスタ３１０をどこにでも配置できるので、抵抗型負荷と容量性負荷とをバランスさせる物理的位置を選べば、チップ内に長い信号線が形成されることがない。レジスタの中には最小限のものもあれば、付加的な特徴や性能を有するものもあることからすると、プロトコルレジスタ３１０は互いに多少異なるものであってもよい。典型的には、プロトコルレジスタは、同時に転送することができるデータ信号の数によって区別される。システム例の中には、いくつかの種類の変化型プロトコルレジスタが含まれる。
【００６６】
ハードウェアオブジェクト３００はスタンドアロンであってもよいが、いくつかのハードウェアオブジェクトを連係させることが極めて有益である。図１９は、Ｕ１〜Ｕ９で示される９つのハードウェアオブジェクト３００を示している。ハードウェアオブジェクト３００のうちの２つＵ４，Ｕ７は独立しており、この例では、ハードウェアオブジェクトと連係していない。多重ハードウェアオブジェクト３００を連係させて、好ましくは個々のハードウェアオブジェクトによる能力よりも多くの機能を有する他のハードウェアオブジェクトを作成することができる。図１９に示すように、ハードウェアオブジェクトＵ１，Ｕ２，Ｕ３，Ｕ５は互いに連係され、ハードウェアオブジェクト３２０が作成されている。ハードウェアオブジェクト３２０は、単にその構成要素間で内部的な通信を行う特定のスタンドアロン回路として形成してもよいが、本発明の実施形態によれば、個々のハードウェアオブジェクトは他の構成要素と連係されているという理由だけで一般性を失うものではない。逆に、より小さなハードウェアオブジェクトの集合からより強力なハードウェアオブジェクトを作成できることは、ここでの本発明の概念を用いる場合のもう１つの効果である。
【００６７】
また、図１９は、ハードウェアオブジェクトＵ５，Ｕ６，Ｕ８，Ｕ９を連係させることにより構成される他のハードウェアオブジェクト３３０を示している。機能的な観点からすると、Ｕ５がハードウェアオブジェクト３２０と３３０の双方に属していることは問題ではない。場合によっては、分離可能なハードウェアでハードウェアオブジェクトＵ５を構成し、ハードウェアオブジェクト３２０とハードウェアオブジェクト３３０の構成要素のそれぞれの機能を独立したハードウェアで動作させることから共有機能が生まれる。また、場合によっては、ハードウェアオブジェクト３２０とハードウェアオブジェクト３３０の構成要素の機能が、ハードウェアオブジェクトＵ５内の共有ハードウェア上で実現されることもある。ハードウェアオブジェクト３２０およびハードウェアオブジェクト３３０には、適切な優先度と性能基準によりハードウェアを共有可能とするために時分割機能がなければならない。
【００６８】
図２０Ａ〜図２０Ｃは、それぞれ異なる中央電気回路３０４を有するハードウェアオブジェクト３００の例を示す。図２０Ａは、中央電気回路３０４に乗算機能を含むハードウェアオブジェクト３００を示している。乗算機能は、ハードウェア乗算器によって実現してもよいし、公知の他の方法により実現してもよい。プロトコルレジスタ３１０は、ハードウェアオブジェクト３００と他のオブジェクトとの間の均一なデータインタフェイスを提供する。図２０Ｂは、中央電気回路３０４にメモリと位相器とを含むハードウェアオブジェクト３００を示している。この例においては、メモリと位相器は、プロトコルレジスタ３１０を介さずに直接相互に通信を行う。中央電気回路３０４内の通信は、ハードウェアオブジェクトの境界で使用されるプロトコルレジスタに加えて内部プロトコルレジスタ３１０を用いてもよい。あるいは、中央電気回路３０４内で他の通信形態を用いることもできる。例えば、図２０Ｂに示すように、メモリと位相器は、ダイレクトバスプロトコルを使って直接相互に通信を行ってもよい。さらに、メモリと位相器は、必要に応じて、シリアルラインを介して通信を行うことができる。実装可能なハードウェアオブジェクトおよび開発システムを組み立てる目的からすれば、ハードウェアオブジェクト３００の中央電気回路３０４内の要素が相互にどのような通信を行うのかということは、比較的重要なことではない。また、図２０Ｂのハードウェアオブジェクト３００は、オブジェクト間の通信を容易にするためにプロトコルレジスタ３１０を含んでいる。
【００６９】
図２０Ｃは、中央電気回路３０４に他の要素を有するハードウェアオブジェクト３００の追加例である。この例においては、レジスタファイルと論理演算装置（ＡＬＵ）にメモリと状態機械が付加的に連結されている。この例は、中央電気回路３０４のすべての要素が必ずしも直接相互に通信を行う必要がなく、あらゆる方法またはプロトコルを用いた通信を特定のハードウェアオブジェクト３００自身に統合可能であることを示している。
しかしながら、ほとんどすべての場合において、中央電気回路３０４の「端部」にプロトコルレジスタ３１０を設けることにより、ハードウェアオブジェクトの集約が容易になり、非常に強力かつ複雑なオブジェクトを作成することができる。
【００７０】
図２１は、他のハードウェアオブジェクトと同一の境界によって仕切られている必要のないハードウェアオブジェクトを示している。図２１においては、５つのハードウェアオブジェクトが示されている。ＩＣ基板上に固定された４つのハードウェアオブジェクトは、３４２，３４４，３４６および３４８である。オブジェクト３５０は、オブジェクト３４２，３４４および３４６の要素から構成されている。オブジェクト３５０は、オブジェクト３４２および３４６のすべての要素を含んでいるが、オブジェクト３４４については一部のみを含んでいる。すなわち、オブジェクト３５０は、ハードウェアオブジェクト３４４の中央電気回路３０４のメモリと一方のＡＬＵのみとを用いている。ハードウェアオブジェクト３４４の中央電気回路３０４はそれらを内部的にすでに利用しているので、オブジェクト３５０はプロトコルレジスタ３１０によって区切られていることに留意されたい。この場合において、オブジェクト３５０は、ハードウェアオブジェクト３４４の中央電気回路３０４の内部にあるプロトコルレジスタ３１０を使用することができる。オブジェクト３４４の残ったＡＬＵおよびオブジェクト３４８の全体は、ここでは割り当てられていないが、他のハードウェアオブジェクトを形成するために使用することができる。
【００７１】
オブジェクトは、本発明の好ましい実施形態におけるメッセージパケットを用いて実現することができる非同期メッセージを相互に送信することにより、相互に通信を行う。メッセージパケットは、メッセージの内容または構造を制限するものではなく、メッセージは、データ、指令、アドレス、および／またはメッセージパケット自身の情報を含んでいてもよい。図２２は、それぞれのプロトコルレジスタ３１０の間でメッセージを用いて相互に通信を行う２つのハードウェアオブジェクト３６０，３７０を示している。本発明の実施形態は、特定のメッセージフォーマットに影響を与えるものではなく、あるプロトコルにメッセージを従わせることを要求するものでもない。もちろん、システムは、メッセージの送信側と受信側との間の理解を前提として設計されるので、送信側と受信側がメッセージを正しく解釈することができるように構造を形成しなければならない。
【００７２】
図２２には、１０ワードを含むメッセージ３８０の例も示されている。この例のメッセージ３８０は、宛先アドレスまたは「ROUTE LEFT」のような固定コマンドとなり得るルーティングコマンドから始まる。後述するように、ハードウェアオブジェクトのシステムが再構成可能チップにリンクされ固定されたときに、ＩＣ基板上のそれぞれのハードウェアオブジェクトに一意のアドレスを割り当ててもよい。メッセージは、この一意のアドレスに基づいて、あるいは例えばステアリングコマンドに基づいて指示される。メッセージ３８０は、ルーティング情報の後に、そのメッセージに含まれている情報の種類またはそのメッセージの高水準構造を識別するために使用可能なフラグを含んでいる。プロトコルレジスタ３１０を介して送られたプロトコルに従ったメッセージは、いくつかの異なる種類を表すことができるので、どの種類が使用されているのかを示すためにフラグを用いることができる。フラグは、例えば、データだけを含んでいる、命令を含んでいるなど、メッセージのフォーマットを示していてもよい。さらに、図２２のメッセージ３８０の例は、一連の命令とオペランドおよび受信オブジェクト３７０により使用される様々なフラグを含んでいる。受信オブジェクトが、送信オブジェクトから受け取った命令およびオペランドの一部または全部を他のオブジェクトに単に渡すだけの場合もある。パススルーメッセージは、第１のオブジェクトがメッセージを、第１のオブジェクトに直接接続されていない他のオブジェクトに送信する場合に使用される。
【００７３】
図２３は、多数の基本オブジェクト４０２，４０４，４０６，４０８，４１０を含む「メッセージングフォーク」オブジェクト４００を示している。単一のデータストリームＡがオブジェクト４００に入力され、２つの出力Ａ１およびＡ２が生成される。フォークは、データストリームＡに含まれるあらゆるデータまたはオペランドに作用することができる。フォークプリミティブオブジェクト４０２内において、メッセージストリームＡは２つの構成ストリームＡ１およびＡ２に分割される。最も基本的な形態においては、フォークオブジェクト４０２は、データストリームＡから単にデータを複製し、２つのストリームＡ１およびＡ２を作る。他の実施形態においては、フォークオブジェクト４０２は、入ってくるストリームを要素ストリームに分解する前にストリームに対して操作を行うことができる。例えば、フォークオブジェクト４０２は、データストリームＡ内の数字の混在を許容し、整数のみをストリームＡ１に、浮動小数点をストリームＡ２に分割してもよい。フォークオブジェクト４００の他の実施形態は、ストリームに操作を行うことなく単にそのストリームを分割することができる。例えば、特定の範囲内のアドレス指定されたすべてのメッセージは出力ストリームＡ２に入り、他のすべてのメッセージは出力ストリームＡ１に入るようにできる。このように、多量に入ってくるデータを別々の多数の並列プロセスにより分割することができる。他の種類のフォークは、メッセージパケット内のルーティングコマンドにあたるまでパケットを固定された方向に向け、ルーティングコマンドにあたった時点でそのルーティングコマンドに従うステアリングフォークを含んでいる。２つのデータストリームＡ１およびＡ２のみが生成されるものとして図示しているが、多数のフォークオブジェクトをリンクさせてストリームを何個でも生成することができる。
【００７４】
また、図２３は、オブジェクト４０４および４０６がメッセージストリームＡ２に作用して、非常に複雑なフォーク機能を生成可能なことを示している。同様に、オブジェクト４０８および４１０は、メッセージストリームＡ１に作用してさらなる機能を生成することができる。５つのオブジェクト４０２，４０４，４０６，４０８および４１０により構成されるオブジェクト４００の構造の重要性は、メッセージストリームＡ１およびＡ２が並行に動作することにある。例えば、ストリームの１つが一時的にブロックされている場合、他のストリームは処理を続行する。
【００７５】
図２３は、いずれのストリームの長さを制限するものではない。特に、この例においては、同じ長さの入力メッセージに呼び出されても、出力ストリームＢ１およびＢ２を異なる長さにすることが重要なことである。
【００７６】
図２４は、２つの入力ストリームを受け入れ、それらを単一のストリームに結合する「ジョイン」オブジェクト４２０を示している。図２３において述べたフォークオブジェクトと同様に、ジョインオブジェクト４２０は、所望の機能を実現するために必要なほとんどすべての形態をとることができる。共通のジョイン機能は２つの入力メッセージに同期している。この場合において、出力ストリームが生成され始める前に双方の入力メッセージを提示しなければならず、一度生成され始めると、それぞれの入力メッセージの全体が受信されるまで同期プロセスを終了することができない。他の共通機能は、第１の入力メッセージをコピーして出力に至る「代替ジョイン」機能である。一度入力メッセージが受け入れられると、他の入力における他のメッセージはコピーが完了するまで待機する。一般に、「代替ジョイン」機能は、最も以前に使用されたポリシーに従って公平に調停(arbitrate)するが、入力優先順位を固定し、入力メッセージ内でエンコードされた優先順位に対して作用する他の形態が共通して使用される。ジョイン機能およびそのアナログであるフォーク機能は、並列プロセスの出力間での計算順序を生成するためにその機能を使用することができるので、非同期計算システムにおいては非常に有用である。
【００７７】
図２４は、ハードウェアオブジェクトを組み合わせることにより複雑なジョイン機能を生成することができることを示している。オブジェクト４２２と４２４との間のフィードバック関係４２９および４３０により、入力メッセージストリーム４３１および４３２の非常に複雑な組み合わせが実現される。同様に、オブジェクト４２８は、基本ジョインオブジェクト４２６の出力を後処理し、最終的なジョインオブジェクト４２０を内部基本ジョインオブジェクト４２６よりも極めて複雑なものにするために使用することができる。図２３と同様に、ジョインオブジェクト４２０の本質は、その構成要素が独立して動作することにある。
【００７８】
簡単に組み合わせることができるハードウェアオブジェクトを、独立して動作させ、２１、図２３、および図２４で述べたような非同期メッセージを用いて通信を行うことは、最大のシステムパフォーマンスを保証するには必ずしも十分ではない。さらに、上述した異なるプロトコルレジスタの１つを使用することにより、システム内のすべての構成要素オブジェクトが完全に停止するまで（出力できずに有効データで満杯になったとき）、データを処理し続けることが保証される。
【００７９】
上述したハードウェアオブジェクトは、シリコン内または他の基板に直接形成してもよい。図２５は、ハードウェアオブジェクト４５４および４５５において物理的に形成された多数のインスタンスを有するチップの例４５０を示している。オブジェクトは、プロトコルレジスタ間でリンクされたデータラインによって相互に接続されている。プロトコルレジスタは、上述した他のプロトコルレジスタの特性を有することができる。入力ピンおよび出力ピン４５８は、チップ４５０に対するインタフェイスを提供する。特定の接続プロトコルを実現するようにプログラムされた特殊ハードウェアオブジェクト４５４を含めることにより、ＵＳＢやFirewireなどの標準通信プロトコルをチップ４５０に接続してもよい。
【００８０】
チップ４５０上に形成されたオブジェクト４５４および４５５の特定の組み合わせは、チップ４５０の用途によって異なる。しかしながら、近代技術によれば、非常に多くの物理オブジェクトがサポートされており、適用範囲を広くすることができる。ハードウェアチップ４５０上のハードウェアオブジェクトは、比較的簡単に設定および再設定できるので、チップ４５０を再設定可能標準部、すなわちＲＳＰということができる。ＲＳＰ上で実現される物理的ハードウェアオブジェクトインスタンスの総数は、１００〜１００，０００以上のオーダである。異なる物理的ハードウェアオブジェクトの総数（この例では２つのみ）は、もっと少なく、例えば１０のオーダである。もちろん、ハードウェアオブジェクトの種類または総数は、ここで述べた本発明の概念を逸脱することなく、ＲＳＰ上に実装することができる。
【００８１】
どのハードウェアオブジェクトをベースＲＳＰ上に置くかを選択することにより、特定のＲＳＰを特定の市場向けに最適化することができる。共通の例が、計算ハードウェア用のオンチップメモリ容量とトレードオフの関係に立つ。例えば、加算器、位相器、および乗算器のような多数のコンピュータ物理ハードウェアオブジェクトを有するＲＳＰは、ＤＳＰ（デジタル信号処理）市場においては有用である。また、より多くのオンチップメモリを有することは、大きなデータセットを格納し、ネットワークパケットをバッファすることの方が純数学上の計算よりも重要とされるネットワークルーティング市場においては有用である。
【００８２】
ソフトウェアオブジェクトs
一度ハードウェアオブジェクトが定義されると、本発明の実施形態によれば、相互接続されたハードウェアオブジェクトの記述を開発することによりシステムを構築することができる。最終的に、この記述は、上述したＲＳＰ上にロードされ、非常に一般的なアーキテクチャを使って、完全にプログラムされた非常に具体的なシステムが作られる。一度プログラムされると、ＲＳＰシステムが完成し、動作可能な状態となる。
【００８３】
相互接続されたハードウェアオブジェクトのシステムを作成するために、ハードウェアオブジェクト定義についてのソフトウェア記述がオブジェクトライブラリに格納される。ライブラリの例は図２６に示されている。この図には、ライブラリオブジェクトＡ，Ｂ，Ｃ，Ｄのコレクションが示されている。ライブラリオブジェクトは、プリミティブオブジェクト記述の定義済みコレクションである。上述した唯一のメッセージプロトコルの存在と各ハードウェアオブジェクトのカプセル化により、ハードウェアオブジェクトのソフトウェアオブジェクト記述をハードウェアオブジェクトに予め組み込むことができる。
【００８４】
本発明において具体化されるソフトウェアオブジェクトに必要な特性には、独立実行性、オブジェクト間の非同期メッセージ通信、カプセル化、およびコンテキストに対する無反応性が含まれる。
【００８５】
独立実行性は、ソフトウェアが実行される基本ハードウェアの動作からそのソフトウェアを除去し、ハードウェアの制約なしに、異なる多くのソフトウェアアーキテクチャを効果的に実現可能とする決定的な品質というべきものである。
【００８６】
非同期メッセージにより、ハードウェアデザインにおける従来のタイミング問題からソフトウェア記述を独立させることができるので、非同期メッセージは重要である。さらに、非同期メッセージは、多くのプロセッササイクルによって定義される「リアルタイム」を持つのではなくて、リアルタイムソフトウェアの機能性をソフトウェアにおいて明示的に定義させる。
【００８７】
カプセル化とコンテキストに対する無反応性により、ソフトウェアオブジェクトは、ＩＣ上のハードウェア実装の物理的な位置に関係なく、また特定のＩＣの種類に関係なく、同一の機能および性能を発揮することができる。
・ビルトインカプセル化され、
・コンテキストに対して無反応であり、
・独立して動作し、
・非同期的に通信を行い、
・純粋に再配置可能で、
・どのような寸法にもでき、
・いかようにも複雑にすることができる
ようにハードウェアオブジェクトを構築できれば、オブジェクト指向プラグラミング（ＯＯＰ）をサポートするソフトウェア記述を使うだけで、ハードウェアオブジェクトに承継、多相性、およびモジュール性を比較的簡単に与えることができる。このように、ハードウェアオブジェクトは、ＯＯＰの主役にしっかりと付随するソフトウェア記述を有している。
【００８８】
ハードウェア的観点からのオブジェクトとソフトウェア的観点からのオブジェクトとの間に機能的な差違はない。すべてのハードウェアオブジェクトは、純粋に、オブジェクトライブラリのソフトウェアプリミティブのインスタンシエイションであると考えることができる。すべてのソフトウェアオブジェクトは、純粋に、完全にカプセル化されたハードウェアオブジェクトの記述であると考えることができる。本発明の実施形態においては、ハードウェア的観点およびソフトウェア的観点の間には、完全でかつ立証可能な１対１のマッピングがある。上述した開発システムにおけるハードウェア／ソフトウェア二分法は、プロトコルレジスタと基本ハードウェアオブジェクトのルールと関係に基づく本来のボトムアップ式構造といえる。すべてのソフトウェアの挙動およびハードウェアオブジェクトのすべての具体的なハードウェア情報は、オブジェクト定義の内部に含まれている。これらは、中央に格納され、承継可能なものである。これにより、ハードウェアルールおよび関係を子インスタンスから承継できるため、新しいオブジェクトを作成することができる。
【００８９】
図２６は、相互接続された４つのプリミティブオブジェクトから構成されるオブジェクトＡを示している。これらのうち３つはプリミティブタイプ＃１であり、１つはタイプ＃２である。オブジェクトＡがライブラリに置かれると、オブジェクト自身はさらなるオブジェクトにより使用可能となる。例えば、オブジェクトＡに類似するオブジェクトＢは、他のプリミティブオブジェクトのコレクションとしても示されており、オブジェクトＤは、オブジェクトＡおよびＢのみのコレクションであり、直接にはプリミティブオブジェクトをインスタンス化しない。これらの階層関係は、例えば承継のようなすべてのＯＯＰ特性を保持する。しかしながら、ライブラリに格納されたソフトウェアオブジェクトは、プリミティブオブジェクトに限定される必要はない。これは、オブジェクトＣの定義に示されており、オブジェクトＣは、相互に接続された付加的なプリミティブオブジェクトとともに他のライブラリオブジェクトＢを含んでいる。
【００９０】
また、ソフトウェアオブジェクト階層が図２７に示されており、図２７は、ソフトウェアオブジェクト４６０内に階層的に集められた多数のプリミティブオブジェクトを示している。ソフトウェアオブジェクト４６２は、単純に１つのプリミティブオブジェクトであり、ソフトウェアオブジェクト４６４および４６６はそれぞれ２つと３つのプリミティブオブジェクトから構成されている。新しいレベルの階層と抽象化を定義することにより、ライブラリ用の新しいソフトウェアオブジェクトを作成することができる。具体的なハードウェアルールおよび関係のすべては子から承継されるので、新しいソフトウェアオブジェクト用のハードウェア情報が自動的に生成される。特に、オブジェクトライブラリは、Ｃ＋＋、Java（「Java」は登録商標です）、または他のＯＯＰ言語により開発することができる。
【００９１】
システム開発
完全なシステムのソフトウェアモデルの一例が図２８に示されている。この図は、ハードウェアプリミティブのコレクションと、オブジェクトライブラリのビデオデコーダ部からの予め定義されたソフトウェアオブジェクトとから組み立てられるＭＰＥＧ２デコーダオブジェクト４７０を示している。ビデオデコーダライブラリ４８０は、モーションオブジェクト４７２と圧縮解除オブジェクト４７４とともに、個々のプリミティブオブジェクトＰ１〜Ｐ７を含んでいる。モーションオブジェクト４７２は２つのプリミティブＰ３およびＰ５から作成され、圧縮解除オブジェクト４７４は３つのプリミティブＰ２，Ｐ４，Ｐ６から作成される。Ｐ６プリミティブは、離散コサイン変換の逆関数（ＤＣＴ−１）プリミティブオブジェクトである。プリミティブＰ１およびＰ７は、入力／出力プリミティブオブジェクトである。デコーダ４７０を組み立てることには、外部フレームストア４７６を使用することを含んでいる。実施形態によっては、オフチップメモリを使用して外部フレームストア４７６がもたらされる。デコーダの実装に関してさらなる詳細を以下に述べる。
【００９２】
図２８のソフトウェアモデルは、システムの本来のＯＯＰ記述である。オブジェクトは独立して実行され、コードは単純にオブジェクトインスタンスのコレクションである。システムがそのようなソフトウェアモデルを使用して記述されると、システムは、１つのソフトウェアとして実行可能となり、ハードウェアにモデルを効率的にマップするために必要とされる構造的な情報を持つ。
【００９３】
ソフトウェアおよび最終的にはハードウェアオブジェクトのコレクションであるソフトウェアシステムが生成されると、システムはＲＳＰ４５０（図２５）上にマップされ、ハードウェア製品を作る。動作においては、システム設計者がシステムモデルを設計するとき、基本の物理的ハードウェアオブジェクトの特性から直接生成されたオブジェクトライブラリから直接特性を使用する。したがって、システム設計者が、所望のシステムを記述するとき、その所望のシステムの特性はすでにビルトインされた基本の物理的ハードウェアオブジェクトの特性を有している。この所望のシステムにおける基本の物理的ハードウェアオブジェクトへの直接的な一致により、ＲＳＰ上へのマッピングが比較的単純な割り当てプロセスとなる。
【００９４】
マッピングシステムの一例が図２９に示されており、図２９は、ＭＰＥＧ２デコーダとなるようにプログラムされたシステムチップ４９０を生成するために図２５のＲＳＰ４５０上にマップされた図２８のＭＰＥＧ２デコーダオブジェクト４７０を示している。デコーダオブジェクト４７０のプリミティブオブジェクトＰ１〜Ｐ７のそれぞれは、ＲＳＰ４５０のハードウェアオブジェクト４５４および４５５のうちの１つに割り当てられる。プリミティブオブジェクトＰ１〜Ｐ７となるように構成されるときの基本となる物理的ハードウェアオブジェクト４５４および４５５の特性は、オブジェクトライブラリ４８０（図２８）からデコーダ４７０を開発するために使用される特性と同一である。デコーダ４７０のオブジェクトＰ１と、ＲＳＰ４５０上に「１」と付されたプログラム済み物理的ハードウェアオブジェクト４５５とは、ともに入力オブジェクトであり、システムに対する入力メッセージを受け入れる。同様に、オブジェクトＰ７と、「７」と付されたプログラム済み物理的オブジェクト４５４とは、出力オブジェクトであり、デコードされたビデオを伝送する。
【００９５】
圧縮解除オブジェクト４７４を構成するプリミティブオブジェクトＰ２，Ｐ４，Ｐ６は、ＲＳＰ４５０上にそれぞれ「２」「４」「６」と付された３つの物理的ハードウェアオブジェクトに直接マップされる。圧縮解除オブジェクト４７４の階層特性は、陰付領域４７４で示されるように、ＲＳＰ４５０上に維持される。同様に、モーションオブジェクト４７２を構成するプリミティブオブジェクトＰ３およびＰ５は、「３」および「５」とそれぞれ付された２つの物理的ハードウェアオブジェクトに直接マップされる。モーションオブジェクト４７２の階層特性は、陰付領域４７２に示されるように、ＲＳＰ４５０上に維持される。
【００９６】
この例における図２８のフレームストア４７６は、ソフトウェアモデルにおけるオフチップとしてマークされており、ＲＳＰ４５０上にはマップされずに、「フレームストアへ／フレームストアから」とマークされたインタフェイス信号を生成する。
【００９７】
ＲＳＰ４５０上の物理的ハードウェアオブジェクト４５４および４５５のすべてが、それぞれのシステム実装のために使用されるわけではない。確かに多くの物理的ハードウェアオブジェクトは使用されない。使用されない物理的ハードウェアオブジェクトは電源を切ってもよいし、電力を節約するために非常に低いクロック周波数で動作するようにセットしてもよい。
【００９８】
上述したように、ハードウェアオブジェクトは、ソフトウェアオブジェクト記述、機能、および特性を本質的に含んでいる。さらに、ハードウェアオブジェクトには、特性についての追加の要件がある。すなわち、ハードウェアに所望の機能を発揮させる構成バイナリプログラムと、必要とされる量のハードウェア資源（ハードウェアリソース）と、ハードウェアがどのように接続されるかを支配する接続ルールである。本発明の一実施形態においては、基本となる物理的ハードウェアオブジェクトの考えられる１つのトポロジについて、たった１つのバージョンのオブジェクトが存在する。他の実施形態においては、多くの異なるトポロジと、（オブジェクトに付けられた構成バイナリを使用して）オブジェクトを生成するようにプログラム可能な基本となる物理的ハードウェアオブジェクトの混合物とが存在する。後者の場合、オブジェクトは異なる具体的形態を有している。
【００９９】
オブジェクトの具体的形態は、ビルトインされたソフトウェアオブジェクトとまさに同一であるが、それぞれの具体的形態は、特定の具体的形態を選ぶユーザによって交換され得る異なる性能と資源利用を生成する異なるハードウェアトポロジと混合物を有している。
【０１００】
図３０は、１つのソフトウェアオブジェクトの具体的形態に付けることができる付加的情報を示している。ソフトウェアオブジェクト４９０が示されているが、これは、あらゆるタイプのオブジェクト記述、例えば図２８のデコーダ４７０となり得るものである。ソフトウェアオブジェクト４９０を開発する際、物理的ハードウェアオブジェクトのトポロジが選ばれ、接続ルールが生成される。接続ルールは、特定の性能目標を満足するのにトポロジが許容する最大および最小遅れを特定し、プリミティブオブジェクトがＲＳＰ４５０のハードウェア上に直接マップされるときに満足されなければならない。上記ハードウェアオブジェクトを参照して述べたように、各ハードウェアオブジェクトに関連づけられるプロトコルレジスタの数には実際上限界がある。したがって、各ハードウェアオブジェクトに対する相互接続のレベルにもこれに対応して限界がある。すなわち、ＲＳＰ４５０上の各ハードウェアオブジェクトが、ソフトウェアオブジェクトにおいて使用される他のハードウェアオブジェクトに直接接続されることは不可能であると考えられる。このため、（例えば、性能要求を満たすために）互いに近接しなければならないオブジェクトが接続可能となり、直接接続される必要のないオブジェクトが接続される必要のないことが保証されるように、接続ルール４９２のリストが使用される。図３０の接続ルール４９２のリストを参照すると、Ａ．ｄとＡ．ｄ（２つのハードウェアオブジェクトのポートを「ｄ」とする）との間のリンクが直接接続されなければならない、すなわち、ちょうど１ホップの接続長を持たなければならないことを示している。他のオブジェクトは、直接相互に接続される必要はなく、それぞれ３接続分または７接続分まで離れていてもよい。実際、直接接続されていないハードウェアオブジェクトが互いに通信する必要が生じると、それらのハードウェアオブジェクトは、アドレス付メッセージやルーティングコマンドを所望のハードウェアオブジェクトに送信する。
【０１０１】
リソースリスト４９４は、ソフトウェアオブジェクトの具体的態様のトポロジを形成するＲＳＰ４５０上の物理的ハードウェアオブジェクトの数と種類を示している。システムの設計の際は、ＲＳＰ４５０上の利用可能なリソースを追跡するデザインルールチェッカーを使用することができ、設計時にシステム設計者が物理的に利用可能なリソース数を超えてしまうことを防止する。
【０１０２】
接続ルール４９２およびリソースリスト４９４は、承継を用いるソフトウェアオブジェクトにおける子プリミティブから簡単に推測することができる。プリミティブオブジェクトだけが定義されたトポロジを持っている。
【０１０３】
バイナリリスト４９６は、物理的ハードウェアオブジェクト内の命令メモリまたは構成レジスタにロードされ、特定の物理的ハードウェアオブジェクトのすべき動作を制御するマイクロコードまたはマイクロ命令のリストである。例えば、ハードウェアオブジェクトが初期化されたときに、最初に読み込まれた命令がハードウェアオブジェクトに対して行う最初の所望の命令となるように、マイクロコードを命令順に格納することができる。
【０１０４】
システムソフトウェアオブジェクトモデルは、ＲＳＰ４５０上のハードウェアオブジェクトと同一構造であるので、設定されたＲＳＰ４５０はシステムモデルにおいてシミュレートされたのと全く同じように動作する。
【０１０５】
実際には、バイナリリスト４９６は、典型的には、ＥＥＰＲＯＭのような何らかのメモリや他の種類のＲＯＭ、あるいはＲＳＰ４５０上またはＲＳＰ４５０外に設けられた他の種類のメモリに格納される。ＲＳＰの電源が入ると、まず、初期化プロセスによりすべてのハードウェアオブジェクトが初期状態に初期化される。リセットにより自動的に初期命令をロードする機能を有するように１つの物理的ハードウェアオブジェクトを構成してもよい。その後、初期命令が実行され、トップレベルのバイナリリスト４９６がＲＳＰ４５０にロードされる。バイナリリストは、上述したメッセージパケットプロトコルを用いて個々のハードウェアオブジェクトに配布することができる。バイナリの最初の部分が個々のオブジェクトにロードされると、オブジェクトは動作を開始でき、最初の入力データを待つ。
【０１０６】
完全にプログラムされたシステムを作成するために使用されるプロセスを説明するためのフローチャートが図３１に示されている。フロー５００は、まず、プロセス５１０において、問題をその構成要素に分割する。次に、プロセス５２０において、ライブラリオブジェクトが設計システムにインポートされる。設計が進むにつれ、判断５３０において、設計者はライブラリ内に正しいソフトウェアオブジェクトが存在するかを決定する。必要なオブジェクトが存在しない場合、例えば、オブジェクトがまだ存在しない、または、新しい性能の具体的形態が必要である場合には、プロセス５３２において、設計者はそれらを生成することができ、ライブラリ内に新たに生成されたオブジェクトを格納する。デザインが完成し、必要なオブジェクトのすべてがライブラリに含められた後、そのデザインがプロセス５４０においてテストされる。プロセス５５０において、そのデザインがチェックされる。デザインがデザインテストを通過しない場合、例えば接続ルールを満足しない場合には、フロー５００はループバックし、プロセス５５５において新しいオブジェクトの具体的形態が生成され、デザインがテストされる。デザインが完成すると、プロセス５６０において、上述したように、ＲＳＰ４５０からのハードウェア制約条件のリストが、プログラムされたＲＳＰ上にマップされるデザインの特徴に合わされる。
【０１０７】
本発明の実施形態は、ＲＳＰ４５０上のハードウェアオブジェクトのコレクションが大量の並列処理を非同期的に実行するので、データスループットの高い利用に特に適している。これにより、複雑なアルゴリズムを用いた大量のデータを操作する非常に大きなシステムに対して非常に大きな可能性が生じる。特に適した利用例としては、例えば、ビデオエンコーディング用の動作推定、高精細度ビデオエンコーディング処理、レーザライター用のラスタアルゴリズム、高速無線ネットワーク用のアクセラレータ、高度セキュア暗号化、記憶領域ネットワーク、ＨＤＴＶビデオスケーリング、802.13、802.11g、および他の無線プロトコル用のＦＥＣ、ＳＮＯＲＴ不正侵入検知、ディスプレイレート変化に対する一時的なビデオ補間がある。
【０１０８】
本発明の実施形態の主要な態様は、高性能の集積回路を作り、ソフトウェアのみを用いてそれらを変更することが本来的にできる完全性にある。完全性とは、ソフトウェア記述を使用するだけでソフトウェア−ハードウェアにおけるコデザイン上の問題が解決されることを意味している。
【０１０９】
本発明の実施形態を用いれば、ソフトウェアとハードウェアの観点およびその実装が、１つで同一のものとなる。これにより、開発システムのユーザは、標準的なツールと言語を用いてプログラムを書くことができ、付随する性能上の利益をすべて享受しつつ、ハードウェア内でそれらを直接実行することができる。
【０１１０】
本発明の実施形態のユーザは、ハードウェアについての知識や専門技術を有する必要がない。そのようなユーザは、単にソフトウェアを書き、操作することで、今日、オーダメードのＩＣによってのみ実現される非常に高性能なシステムと同様に複雑なシステムを作ることができる。システムがソフトウェア内で定義されると、既存の物理的ハードウェアオブジェクトのコレクションとともに作られる汎用ＩＣを設定するためにそのソフトウェア定義が使用される。オブジェクトのソフトウェアライブラリと結びつけられた唯一の汎用チップであるＲＳＰの組み合わせにより、ユーザは、簡単には設計することができなかったシステムを、現状のツールを使用して効率良く迅速に設計し、テストすることが可能となる。
【０１１１】
実装例
図３２、図３３、図３４、および図３５は、簡単なオブジェクトを使って比較的複雑なオブジェクトを作る方法の例を示している。このオブジェクト例は、２つのストリームをたたみ込みフィルタされた２つのストリームを生成するものである。時間領域におけるたたみ込みは、周波数領域における乗算と等価であり、無線通信システムにおけるように多重フィルタがカスケード接続される用途において用いられる。設計の目標は、同じ値を同時に多くの構成オブジェクトに送る広範囲接続を介せず、複数のハードウェア乗算器をビジー状態にすることができるように、たたみ込みオブジェクトを生成することである。
【０１１２】
図３２は、たたみ込みプリミティブオブジェクトを示している。（ui、wi、およびyiで示される）３つの入力ポートと（wi+1、ui+1、およびyi+1で示される）３つの出力ポートを構成する６つのプロトコルレジスタがある。ハードウェアオブジェクト内の電気回路は、１つのハードウェア乗算器と１つの加算器である。ハードウェアオブジェクト内の接続は、次の動作を行うように設定されている。
【０１１３】
【数１】
2007526539.tif 000048
【０１１４】
また、図３２は、入力および出力ポートと「ＣＰ」と付されたプリミティブを示すオブジェクトの概略図を示している。
【０１１５】
図３３は、図３２のたたみ込みプリミティブオブジェクト用の擬似コードを示している。ポートは、CHANNEL型のINPORT接続またはOUTPORT接続として宣言されている。ローカル変数ui、wi、およびyiは整数型として宣言されている。この処理における１行目のコードは、チャンネルａとチャンネルｂのジョイン機能である。ジョイン機能は、チャンネルａとｂの双方が有効な入力を持つまで完了しない。チャンネルａで受信した値は変数uiに割り当てられ、チャンネルｂで受信した値は変数wiに割り当てられる。次の２行は、uiとwiを出力チャンネルｄとｅにそれぞれコピーしている。「c→yi」という行は、乗算器ハードウェアの出力を有する他のジョイン機能と等価であり、「join(a→ui,b→wi,cy→i)」を用いることにより１行目に組み込むことができたものである。しかしながら、図３３に示されるように２つに分けることにより、チャンネルｃの入力がまだ生じていなくても乗算器ハードウェアを続けさせることができる。最終行は、値ui*wi+yiがチャンネルｆに出力されることを示している。
【０１１６】
図３４は、この例において使用される他のプリミティブオブジェクトを示している。（uiおよびwiで示される）２つの入力ポートと（wi+1、ui+1、およびyi+1で示される）３つの出力ポートとを構成する（利用可能な６つのうちの）５つのプロトコルレジスタがある。ハードウェアオブジェクト内の電気回路は、唯一のハードウェア乗算器である。ハードウェアオブジェクト内の接続は、次の動作を行うように設定されている。
【０１１７】
【数２】
2007526539.tif 000049
【０１１８】
また、図３４は、入力および出力ポートと「乗算」の略号として「Ｘ」と付されたプリミティブを示すオブジェクトの概略図を示している。
【０１１９】
図３５は、図３２および図３４における２つのプリミティブオブジェクトをトポロジ内で組み合わせ、たたみ込みオブジェクトを生成する方法を示している。すべての接続は、配線を簡単にするポイント−ポイントであり続け、これにより、広範囲の配線の接続ではなく、プリミティブオブジェクトが性能に影響を与えることが可能となることに留意されたい。
【０１２０】
たたみ込みオブジェクトの関数は以下の式によって与えられる。
【０１２１】
【数３】
2007526539.tif 000050
【０１２２】
図３５の例においては、簡単にするため、i>3においては、w(i)とu(i)がゼロであるとしているが、実際のストリーミングシステムにおいては、最初の４つよりも多くの入力値を使用することができる。級数展開すれば、それぞれの出力項は以下の式により与えられる。
【０１２３】
【数４】
2007526539.tif 000051
【０１２４】
図３５のトポロジがこれらの項を正しく生成することを示すために、まず、出力y(0)を調べる。出力y(0)は、プリミティブオブジェクト６００のyi+1出力によって生成され、必要に応じて単にu(0)*w(0)となる。次に、出力y(1)を調べる。出力y(1)は、プリミティブオブジェクト６０１のyi+1出力によって生成され、以下のような関数である。
【０１２５】
【数５】
2007526539.tif 000052
上記式において、上付文字は、出力を生成する特定のオブジェクトを示している。オブジェクト６００とオブジェクト６０２は以下のように動作する。
【０１２６】
【数６】
2007526539.tif 000053
最後の４つの式を組み合わせると以下のようになる。
【０１２７】
【数７】
2007526539.tif 000054
このガウス消去法のプロセスが残りの出力y(2)...y(6)に対して続けられる。
【０１２８】
上述したシステムの実装は、上記開示の内容から作り出すことが容易なものである。例のごとく、実装の詳細はシステム設計者に任されている。特定のハードウェアオブジェクト、プロトコルレジスタ、メッセージのフォーマットなどの個々の選択は、実装の仕様であり、経験的に発見しなければならない場合もある。本発明は、システムの設計および実装において、現在の方法と比較して先駆的なパラダイムシフトを提示するものである。
【０１２９】
これまでハードウェアおよびソフトウェアオブジェクトを含む集積回路開発システムの特定の実施形態について述べてきたが、そのような具体的な言及が本発明の範囲に対する制限と考えられることを意図しているものではなく、本発明の範囲はクレームおよびその均等物によって決定されるべきものである。
【図面の簡単な説明】
【０１３０】
【図１Ａ】図１Ａは、ＡＳＩＣを設計するために使用される典型的なプロセスを示すブロック図である。
【図１Ｂ】図１Ｂは、ＦＰＧＡを設計するために使用される典型的なプロセスを示すブロック図である。
【図２】図２は、データ転送プロトコルを示すタイミングチャートである。
【図３】図３は、プロトコルレジスタを抽象的に示すブロック図である。
【図４】図４は、本発明の実施形態に係るプロトコルレジスタを抽象的に示すブロック図である。
【図５】図５は、組み合わせ論理回路を含むプロトコルレジスタブロック図である。
【図６】図６Ａ〜図６Ｅは、一連のプロトコルレジスタにより形成されるデータパイプラインの挙動を示すブロック図である。
【図７】図７は、本発明の他の実施形態に係るプロトコルレジスタのブロック図である。
【図８】図８は、本発明の実施形態に係るプロトコルレジスタの模式図である。
【図９】図９は、図８のプロトコルレジスタの状態遷移図である。
【図１０】図１０は、無効データメンバを示すデータパケットの２つのブロック図を示す。
【図１１】図１１は、２つのデータパケットの組み合わせ方法を示す。
【図１２】図１２は、従来のＦＩＦＯ要素を本発明に組み込む方法を示すブロック図である。
【図１３】図１３は、プロトコルレジスタを用いてハードウェアオブジェクトを構築する方法を示すブロック図である。
【図１４】図１４は、フォーク、ジョイン、およびプロトコルレジスタの等価組み合わせを示す模式図である。
【図１５】図１５は、プロトコルレジスタの非同期実装を示す模式図である。
【図１６】図１６は、擬似非同期クロックの生成を示すタイミングチャートである。
【図１７】図１７は、プロトコルレジスタの擬似非同期実装を示すブロック図である。
【図１８】図１８は、ハードウェアオブジェクトの一例のブロック図である。
【図１９】図１９は、既存のハードウェアオブジェクトからハードウェアオブジェクトを定義する方法を示すブロック図である。
【図２０】図２０Ａ〜図２０Ｃは、異なる種類のハードウェアオブジェクトを示すブロック図である。
【図２１】図２１は、他の種類のハードウェアオブジェクトを示すブロック図である。
【図２２】図２２は、ハードウェアオブジェクトがメッセージを用いて互いに通信を行う方法を示すブロック図である。
【図２３】図２３は、メッセージフォークオブジェクトを示すブロック図である。
【図２４】図２４は、メッセージジョインオブジェクトを示すブロック図である。
【図２５】図２５は、物理的に形成された多数のハードウェアオブジェクトを有する再設定可能チップの例を示す。
【図２６】図２６は、開発システム用の再設定可能チップと連係して用いられるオブジェクトライブラリを示すブロック図である。
【図２７】図２７は、ソフトウェアオブジェクトの階層を示すブロック図である。
【図２８】図２８は、ハードウェアシステムのソフトウェアモデルを示すブロック図である。
【図２９】図２９は、ソフトウェアオブジェクトを再設定可能チップ上にマップする方法を示すブロック図である。
【図３０】図３０は、それぞれのソフトウェアオブジェクトシステムに付けることのできる付加情報を示すブロック図である。
【図３１】図３１は、再設定可能チップ上への実装用ソフトウェアシステムを開発する場合に用いられるプロセスを示すフロー図である。
【図３２】図３２は、本発明の実施形態を用いて作成することができるシステムの一例を示す図である。
【図３３】図３３は、本発明の実施形態を用いて作成することができるシステムの一例を示す図である。
【図３４】図３４は、本発明の実施形態を用いて作成することができるシステムの一例を示す図である。
【図３５】図３５は、本発明の実施形態を用いて作成することができるシステムの一例を示す図である。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2007526539.tif 000055
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図８
【補正方法】変更
【補正の内容】
【図８】
2007526539.tif 000056
【手続補正５】
【補正対象書類名】図面
【補正対象項目名】図１２
【補正方法】変更
【補正の内容】
【図１２】
2007526539.tif 000057
【手続補正６】
【補正対象書類名】図面
【補正対象項目名】図２９
【補正方法】変更
【補正の内容】
【図２９】
2007526539.tif 000058
【国際調査報告】
2007526539.tif 000059
2007526539.tif 000060
2007526539.tif 000061
2007526539.tif 000062
2007526539.tif 000063
2007526539.tif 000064