(57)【要約】開示されたデバイスは、タイミングに鈍感なグリッチのない（ＴＩＧＦ）論理デバイスである。ＴＩＧＦ論理デバイスは、任意のラッチまたはエッジトリガフリップフロップの形態をとり得る。一実施形態では、トリガ信号は、ＴＩＧＦ論理デバイスを更新するように印加される。評価期間から隣接する時間に発生するこのトリガ信号が短いトリガ期間の間に供給される。ラッチ形態では、ＴＩＧＦラッチは、トリガ信号が受信されるまでＴＩＧＦラッチの現在の状態を保持する。さらにマルチプレクサが新しい値および古い格納された値を受信するように設けられる。イネーブル信号はマルチプレクサに対してセレクタ信号として機能する。トリガ信号はＴＩＧＦラッチの更新を制御するために、ＤにおけるデータがＴＩＧＦラッチに入力し、イネーブル入力における制御データが保持時間超過を受けることなく任意の順序で到達し得る。
2005500625.tif 000002
【特許請求の範囲】
【請求項１】
第１の入力、第２の入力、第１の出力、および制御入力を有する第１の論理と、
電流値を格納し、第１のトリガ入力、該第１の出力に結合された第３の入力、および該第１の論理の該第２の入力に結合された第２の出力を有する第２の論理であって、該第２の論理は、トリガ信号が該トリガ入力において受信された場合、該第１の出力における値に関連付けられた値に更新する、第２の論理と
を含む論理装置。
【請求項２】
新しい値を格納し、第４の入力、第２のトリガ入力、および第３の出力を有する第３の論理であって、該第３の出力は、該第１の論理の第１の入力に結合される、第３の論理と、
クロック入力、第３のトリガ入力、および第４の出力を有するエッジ検出器であって、該第４の出力は、前記制御入力に接続され、選択された時間において前記トリガ信号が該第２および該第３のトリガ入力に印加されて、前記論理装置を更新する、エッジ検出器と
をさらに含む、請求項１に記載の論理装置。
【請求項３】
ユーザ設計回路の適切な動作を確認するデバッグシステムであって、該ユーザ設計は論理デバイスおよび回路経路を含み、
該ユーザ設計回路のソフトウエアモデルを生成する計算システムと、
該ユーザ設計回路の少なくとも一部のハードウエアモデルを生成する再構成可能なハードウエアシステムと、
該計算システムにスレーブとして提供され、そして該再構成可能なハードウエアシステムの該ハードウエアモデルの動作を制御するための該計算システムおよび該再構成可能なハードウエアシステムに接続された制御手段と
を含むデバッグシステム。
【請求項４】
前記再構成可能なハードウエアシステムのハードウエアモデルは、前記ユーザ設計回路の論理デバイスを置換するエミュレーション論理デバイスを含む、請求項３に記載のデバッグシステム。
【請求項５】
前記制御手段は、評価期間およびトリガ期間を含み、該評価期間は、種々のデータおよび制御信号が前記ハードウエアモデルを介して伝達することを可能にするのに十分長く、該トリガ期間は、前記エミュレーション論理デバイスを更新するために使用される、請求項４に記載のデバッグシステム。
【請求項６】
前記制御手段は、前記エミュレーション論理デバイスを更新するために、前記トリガ期間の間にトリガ信号を生成し、各エミュレーション論理デバイスは、該トリガ信号を受信するためのトリガ入力を含む、請求項５に記載のデバッグシステム。
【請求項７】
前記エミュレーション論理デバイスは、
第１の入力、第２の入力、第１の出力、および制御入力を有する第１の論理と、
電流値を格納し、第１のトリガ入力、該第１の出力に結合された第３の入力、および該第１の論理の該第２の入力に結合された第２の出力を有する第２の論理であって、該第２の論理は、トリガ信号が該トリガ入力において受信された場合、該第１の出力における値に関連付けられた値に更新する、第２の論理と
をさらに含む、請求項４に記載のデバッグシステム。
【請求項８】
新しい値を格納し、第４の入力、第２のトリガ入力、および第３の出力を有する第３の論理であって、該第３の出力は、前記第１の論理の第１の入力に結合される、第３の論理と、
クロック入力、第３のトリガ入力、および第４の出力を有するエッジ検出器であって、該第４の出力は、前記制御入力に結合され、選択された時間において前記トリガ信号が該第２および該第３のトリガ入力に印加されて、前記論理装置を更新する、エッジ検出器と
をさらに含む、請求項７に記載のデバッグシステム。
【請求項９】
前記ユーザ設計回路における論理デバイスは、一次クロックによって制御された第１の論理デバイスおよびゲートクロックによって制御される第２の論理デバイスを含み、前記再構成可能なハードウエアシステムにおける前記ハードウエアモデルは、該第２の論理デバイスを置換するエミュレーション論理デバイスを含む、請求項３に記載のデバッグシステム。
【請求項１０】
ユーザ設計の適切な動作を確認する方法であって、該ユーザ設計は標準論理デバイスを含み、
ソフトウエアの該ユーザ設計の第１のモデルを生成するステップと、
ハードウエアのユーザ設計の少なくとも一部の第２のモデルを生成するステップであって、エミュレーション論理デバイスは、標準的な論理デバイスに置換される、ステップと、
ソフトウエアの該第１のモデルを用いてハードウエアの該第２のモデルを制御するステップと
を含む方法。
【請求項１１】
前記制御する工程は、
前記信号が安定状態に達することを可能にするように十分な時間の間にハードウエアの前記第２のモデルによって信号を伝達するステップと、
ハードウエアの前記第２のモデルにおける論理デバイスにトリガ信号を生成させて、古い値を新しい値で更新するステップと
をさらに含む、請求項１０に記載の方法。
【請求項１２】
前記制御する工程は、
ソフトウエアの前記第１のモデルおよびハードウエアの第２のモデルのデータ評価をソフトウエア発生クロックと同期させるステップをさらに含む、請求項１０に記載の方法。
【請求項１３】
ソフトウエアの選択されたデバッグテストポイントをシミュレートするステップと、
ハードウエアの選択されたデバッグテストポイントを加速するステップと、
ソフトウエアの前記第１のモデルが全ての送達されたデータへのアクセスを有するように、ソフトウエアの該第１のモデル、ハードウエアの前記第２のモデル、および外部Ｉ／Ｏデバイス間のデータ送達を制御するステップと
をさらに含む、請求項１０に記載の方法。
【請求項１４】
前記データが安定するまで前記ハードウエアモデルにデータを伝達するステップをさらに含む、請求項１０に記載の方法。
【請求項１５】
前記ソフトウエアモデルのクロックエッジを検出するステップと、
該ソフトウエアモデルの該クロックエッジ検出に応答して、およびハードウエアによって生成されたクロック信号と同期して該ハードウエアモデルを用いてデータを評価するステップと
をさらに含む、請求項１４に記載の方法。
【請求項１６】
トリガ信号を前記エミュレーション論理デバイスに発生させて、該エミュレーション論理デバイスを更新するステップをさらに含む、請求項１５に記載の方法。
【発明の詳細な説明】
【０００１】
（関連米国出願）
本出願は、１９９７年５月２日に米国特許商標庁（ＵＳＰＴＯ）に出願された米国特許出願の第０８／８５０，１３６号の部分継続出願である。
【０００２】
（発明の背景）
（発明の分野）
本発明は概して、電子設計オートメーション（ＥＤＡ）に関する。より詳細には、本発明は、シミュレーション、ハードウエア加速、および保護（ｃｏｖｅｒｉｆｉｃａｔｉｏｎ）を含む種々の用途の保持時間およびクロックグリッチ問題を解決するデジタル論理デバイスに関する。
【０００３】
（関連技術の説明）
一般に、電子設計自動化（ＥＤＡ）は、設計者にユーザのカスタム回路設計図を設計しかつ検証するための自動化または半自動化ツールを設計者に提供するために、種々のワークステーションに構成されたコンピュータベースのツールである。ＥＤＡは、シミュレーション、エミュレーション、試作、実行、またはコンピューティングの目的のために任意の電子設計図を作成し、解析し、そして編集するために一般に用いられる。ＥＤＡの用語はまた、ユーザ設計サブシステムまたはコンポーネントを用いるシステム（すなわち、ターゲットシステム）を開発するために用いられ得る。ＥＤＡの最終的な結果は、通常、個別の集積回路またはプリント回路基板の形態において、変更されかつエンハンスされた設計であり、これはオリジナルの設計を超える改良であるが、オリジナルの設計の精神を維持する。
【０００４】
ハードウエアエミュレーション前の回路設計のシミュレーションを行うソフトウエアの価値がＥＤＡ技術を用いて利益を得る種々の産業にて認識されている。それにも拘らず、現在のソフトウエアシミュレーションおよびハードウエアエミュレーション／アクセラレーションは、これらのプロセスが性質上、分離かつ独立であるためにユーザにとって厄介である。例えば、ユーザは、１デバッグ／テストセッション全てにおいて、その時間の一部の間に回路設計をシミレートするかまたはデバッグし、この結果を用いて別の時間の間にハードウエアモデルを用いるシミュレーションプロセスをアクセラレーションさせ、選択した時間に回路内の種々のレジスタおよび組み合わされた論理値を検査し、そしてその後にソフトウエアのシミュレーションに戻ることを望む可能性がある。さらに、内部レジスタおよび組合せ論理値がシミュレーション時間が過ぎるにつれて変化する場合、ユーザは、ハードウエアクセラレーション／エミュレーションプロセスの間にハードウエアモデルに変化が生じる場合でさえ、この変化をモニタリングすることができるようにすべきである。
【０００５】
コ−シミュレーション（ｃｏ−ｓｉｍｉｌａｔｉｏｎ）は、純粋なソフトウエアシミュレーションおよび純粋なハードウエアエミュレーション／アクセラレーションという２つの分離かつ独立のプロセスを用いることの厄介な本質を有するいくつかの問題を取り扱い、そして全体システムをより使い易くする必要性から生じた。しかし、コ−シミュレーションは、なお多数の欠陥を有する：（１）コシステムが手動パーティションを要求とする、（２）コ−シミュレーションが２つの疎結合のエンジンを用いる、（３）コ−シミュレーション速度はソフトウエアシミュレーション速度と同程度に遅い、そして（４）コ−シミュレーションシステムは競合条件（ｒａｃｅ  ｃｏｎｄｉｔｉｏｎ）に出くわす。
【０００６】
第１に、ソフトウエアとハードウエアとの間のパーティションは、自動の代わりにさらにユーザに負担を与える手動で行われる。本質的には、コ−シミュレーションがユーザに設計（挙動レベルから始まり、次いでＲＴＬ、そして次いでゲートレベルに至る）をパーティションし、非常に大きい機能ブロックにてソフトウエアおよびハードウエア間のモデル自体をテストすることを要求する。このような制約は、ユーザに対してある程度の洗練された知識を要求する。
【０００７】
第２に、コ−シミュレーションシステムが２つの疎結合でかつ独立のエンジンを利用し、そしてこれらが内部エンジン同期化、調整および柔軟性の問題を引き起こす。コ−シミュレーションが２つの異なる検証エンジン（ソフトウエアシミュレーションおよびハードウエアエミュレーション）の同期化を要求する。ソフトウエアシミュレータ側がハードウエアクセレータ側に結合される場合でさえ、外部ピン出力データ（ｐｉｎ−ｏｕｔ  ｄａｔａ）だけが検査およびロードに利用可能である。レジスタのモデリングされた回路内の値および組合せ論理レベルは、容易な検査および一方の側から他方の側へのダウンロードに利用不可能であり、これらのコシミュレータシステムのユーティリティを制限する。通常、ユーザがソフトウエアシミュレーションからハードウエア／アクセラレーションにスイッチングし、その後、戻ってスイッチングする場合、ユーザが全体の設計を再度シミュレーションを行わなければならない可能性がある。したがって、ユーザが、レジスタおよび組み合わせ論理値を検査する１回デバッグセッションの間に、ソフトウエアシミュレーションとハードウエア／アクセラレーションとの間でスイッチングすることを望む場合、コ−シミュレーションシステムはこの能力を提供しない。
【０００８】
第３に、コ−シミュレーション速度はシミュレーション速度と同じくらいに遅い。コ−シミュレーションは、２つの異なる検証エンジン（ｖｅｒｉｆｉｃａｔｉｏｎ  ｅｎｇｉｎｅ）、すなわち、ソフトウエアシミュレーションとハードウエアエミュレーションの同期化を要求する。これらのエンジンそれぞれは、シミュレーションまたはエミュレーションを駆動するためにそれぞれ固有の制御機構を有する。これは、ソフトウエアとハードウエアとの間の同期化により、ソフトウエアシミュレーションと同じ低い速度に全体の性能を押しやることを示唆する。これら２つのエンジンの動作を調整するオーバーヘッドがコ−シミュレーションシステムの低速化に加わる。
【０００９】
第４に、コ−シミュレーションシステムが、セットアップ、保持時間およびクロック信号間の競合条件に起因するクロックグリッチ問題に出会う。コシミュレータは、ハードウエア駆動クロックを用い、そして異なるワイヤライン長に起因する異なる時間に異なる論理素子への入力にされ得る。これらの論理素子が共にそのデータを評価すべきである場合、ある論理素子がある時間期間にデータを評価し、他の論理素子が異なる時間期間にデータを評価するので、このことが評価結果の不確定性レベルを引き上げる。
【００１０】
従って、現在公知のシミュレーションシステム、ハードウエアエミュレーションデバイス、ハードウエア加速、コシミュレーション、および保護システムによって上掲した問題を解決するシステムまたは方法に対する必要性が産業に存在する。
【００１１】
（発明の要旨）
本発明は、フレキシブルかつ高速シミュレーション／エミュレーションシステムの形態の上述の問題に対する解決策を提供し、本明細書中では、このシステムは、再構成可能な計算システム（またはＲＣＣ計算システム）および再構成可能なハードウエアアレイ（またはＲＣＣハードウエアアレイ）を含む、「Ｓエミュレーションシステム（ＳＥｍｕｌａｔｉｏｎ  ｓｙｓｔｅｍ）」、「Ｓエミュレータシステム（ＳＥｍｕｌａｔｏｒ  ｓｙｓｔｅｍ）」、または、保護システムと称する。
【００１２】
本発明のＳエミュレーションシステムおよび方法は、シミュレーションのためのソフトウエアおよびハードウエア表示に電子システムの設計を変換する能力をユーザに提供する。一般的に、Ｓエミュレーションシシステムはソフトウエア制御エミュレータまたはハードウエア加速シミュレータであり、本明書中で使用された方法である。従って、純粋なソフトウエアシミュレーションが可能であるが、シミュレーションはまた、ハードウエアモデルの使用によって加速され得る。ハードウエア加速は、開始、停止、値のアサート、および値の検査のためのソフトウエア制御によって可能になる。回路内エミュレーションシモードは、さらに利用可能になり、回路のターゲットシステムの環境においてユーザの回路設計をテストする。再度、ソフトウエア制御が利用可能である。
【００１３】
ソフトウエアモデルおよびハードウエアモデルの両方を制御し、ユーザが開始、停止、値のアサート、値の検査、および種々のモード間のスイッチングを可能にすることによって、ユーザに対してより大きい実行時間の柔軟性を提供するソフトウエアカーネルは、システムの核心である。カーネルは、レジスタに対するイネーブル入力を介してハードウエアのデータ評価を制御することによって種々のモードを制御する。
【００１４】
本発明によるＳエミュレーションシシステムおよび方法は、４つのモードの動作を提供する。すなわち、（１）ソフトウエアシミュレーション、（２）ハードウエア加速を介したシミュレーション、（３）回路内エミュレーションシ（ＩＣＥ）、および（４）ポストシミュレーション解析である。ハイレベルには、本発明は、上記４つのモードのそれぞれまたは以下のようなこれらのモードの種々の組み合わせにおいて具現化される。すなわち、（１）ソフトウエアシミュレーションのみ、（２）ハードウエア加速を介したシミュレーションのみ、（３）回路内エミュレーションシ（ＩＣＥ）のみ、（４）ポストシミュレーション解析のみ、（５）ソフトウエアシミュレーションおよびハードウエア加速を介したシミュレーション、（６）ソフトウエアシミュレーションおよびＩＣＥ、（７）ハードウエア加速を介したシミュレーションおよびＩＣＥ（８）ソフトウエアシミュレーション、ハードウエア加速を介したシミュレーション、およびＩＣＥ、（９）ソフトウエアシミュレーションおよびポストシミュレーション解析、（１０）ハードウエア加速を介したシミュレーションおよびポストシミュレーション解析、（１１）ソフトウエアシミュレーション、ハードウエア加速を介したシミュレーション、およびポストシミュレーション解析、（１２）ＩＣＥおよびポストシミュレーション解析、（１３）ソフトウエアシミュレーション、ＩＣＥ、ポストシミュレーション解析、（１４）ハードウエア加速を介したシミュレーション、ＩＣＥ、ポストシミュレーション解析、および（１５）ソフトウエアシミュレーション、ハードウエア加速を介したシミュレーション、ＩＣＥ、およびポストシミュレーション解析である。他の組み合わせが可能であり、本発明の範囲内にある。
【００１５】
各モードまたはモードの組み合わせは、以下の特性またはこの特性の組み合わせを提供する。すなわち、（１）手動または自動のモード間でスイッチングする、（２）使用（ユーザは、モード間でスイッチングし得、開始、停止、アサート、値のアサート、値の検査、シミュレーションまたはエミュレーションシプロセスにわたるサイクルの単一処理、（３）ソフトウエアモデルおよびハードウエアモデルを生成するコンパイルプロセス、（４）メイン制御ループを有する全てのモードを制御するソフトウエアカーネルは、一実施形態では、システムを初期化するステップと、アクティブテストベンチプロセス／コンポーネントを評価するステップと、クロックコンポーネントを評価するステップと、クロックエッジを検出するステップと、レジスタおよびメモリを更新するステップと、組み合わせコンポーネントを伝達するステップと、シミュレーション時間を進めるステップと、アクティブテストベンチプロセスが存在する限り、ループを継続するステップとを含む、（５）ハードウエアモデルを生成するためのコンポーネントタイプの解析、（６）一実施形態では、クラスタリング、配置、およびルーティングによって、ハードウエアモデルを再構成可能な基板にマッピングするステップ、（７）一実施形態では、ゲートクロック論理解析およびゲートデータ論理解析によって、競合条件を回避するためのソフトウエアクロックセットアップ、（８）一実施形態では、ハードウエアモデルにおけるイネーブル信号をトリガし、ゲートクロック論理を介して、一次クロックからハードウエアモデルのクロックエッジレジスタのクロック入力に信号を送信し、クロックイネーブル信号をハードウエアモデルのレジスタのイネーブル入力に送信し、ゲートデータ論理を介して、一次クロックレジスタからハードウエアモデルのレジスタにデータを送信し、ハードウエアモデルのレジスタのイネーブル入力にクロックイネーブル信号をディセーブルするクロックエッジレジスタをリセットするソフトウエアモデルにおいてクロックエッジ検出することによるソフトウエアクロック実現、（９）デバッグセッションおよびポストシミュレーション解析のための書き込み選択データ、（１０）組み合わせ論理再生成、（１１）一実施形態では、基本的な構築ブロックは非同期入力および同期入力を有するＤタイプレジスタである、（１２）各チップにおけるアドレスポインタ、（１３）多重化されたクロスチップアドレスポインタチェーン、（１４）ＦＰＧＡチップおよびその相互接続スキームのアレイ、（１５）ＰＣＩバスシステムの性能をトラッキングするバスを有するＦＰＧＡチップのバンク、（１６）ピギーバック基板を介して拡張を可能にするＦＰＧＡバンク、および（１７）最適ピン使用のための時分割多重化（ＴＤＭ）回路である。種々の実施形態によって本発明は、本明細書中で説明されたような他の特徴を提供し、これは上述の特徴のリストに列挙され得ない。
【００１６】
本発明の一実施形態は、シミュレーションシステムである。シミュレーションシステムは回路の挙動をシミュレートするためのホストコンピュータシステムにおいて動作する。ホストコンピュータシステムは、中央処理ユニット（ＣＰＵ）、メインメモリ、およびＣＰＵをメインメモリに結合し、ＣＰＵとメインメモリとの間の通信を可能にするローカルバスを含む。この回路は、構造およびＨＤＬ等のハードウエア言語において特定化された機能を有する。この言語は、コンポーネントタイプおよび接続として回路を記述することを可能にする。このシミュレーションシステムはソフトウエアモデル、ソフトウエア制御論理、およびハードウエア論理素子を含む。
【００１７】
回路のソフトウエアモデルはローカルバスに結合される。典型的には、このモデルはメインメモリに常駐している。ソフトウエア制御論理は、ソフトウエアモデルおよびハードウエア論理素子の動作を制御するために、ソフトウエアモデルおよびハードウエア論理素子に結合される。ソフトウエア制御論理は、外部プロセスからの入力データおよびクロック信号の受信を可能にするインターフェイス論理およびクロック信号のアクティブエッジの検出およびトリガ信号の生成のためのクロック検出論理を含む。さらにハードウエア論理素子は、ローカルバスに結合され、コンポーネントタイプに基づく回路の少なくとも一部分のハードウエアモデルおよびトリガ信号に応答してハードウエアモデルにおけるデータを評価するためのクロックイネーブル論理を含む。
【００１８】
さらにハードウエア論理素子は、アレイまたは互いに結合された複数のフィールドプログラマブルデバイスを含む。各フィールドプログラム可能なデバイスは、少なくとも一部の回路のハードウエアモデルを含み、従って、全てのフィールドプログラム可能なデバイスの組み合わせは、全ハードウエアモデルを含む。さらに複数の相互接続は、ハードウエアモデルの一部を互いに接続させる。各相互接続は、同一のロウまたはカラムに配置された任意の２つのフィールドプログラム可能なデバイス間の直接接続を表す。任意の２つのフィールドプログラム可能なデバイス間の最も短い距離は、せいぜい２つの相互接続または「ホップ」である。
【００１９】
本発明の別の実施形態は、回路をシミュレートするシステムおよび方法であり、回路はソフトウエアにモデル化され、回路の少なくとも一部分はハードウエアにモデル化される。データ評価はハードウエアで発生するが、ソフトウエアクロックを介してソフトウエアで制御される。評価されるべきデータは、ハードウエアモデルに伝達され安定化される。ソフトウエアモデルがアクティブクロックエッジを検出する場合、ソフトウエアモデルは、イネーブル信号をハードウエアモデルに送信し、データ評価を始動させる。ハードウエアモデルはデータを評価し、ソフトウエアモデルにおける次のアクティブクロックエッジ信号検出において評価され得る新しい入来データを待機する。
【００２０】
本発明の別の実施形態は、ソフトウエアモデルおよびハードウエアモデルの動作を制御するソフトウエアカーネルを含む。ソフトウエアカーネルは、アクティブテストベンチプロセスコンポーネントを評価するステップと、クロックコンポーネントを評価するステップと、クロックエッジを検出するステップと、レジスタおよびメモリを更新するステップと、組み合わせコンポーネントを伝達するステップと、シミュレーション時間を進めるステップと、アクティブベンチプロセスが存在すする限りループを継続するステップとを含む。
【００２１】
本発明のさらなる実施形態は、回路をシミュレートする方法であって、回路は、ハードウエア言語（例えばＨＤＬ）において特定された構造および機能を有する。さらにハードウエア言語は、回路をコンポーネントに記載または変形することを可能にする。本方法は、（１）ハードウエア言語においてコンポーネントタイプを決定するステップと、（２）コンポーネントタイプに基づいて回路のモデルを生成するステップと、および（３）入力データをモデルに提供することによって、そのモデルを用いて回路の挙動をシミュレートするステップとを含む。このモデルを一般化するステップは、（１）回路のソフトウエアモデルを生成するステップと、（２）コンポーネントタイプに基づく回路のハードウエアモデルを生成するステップとを含み得る。
【００２２】
別の実施形態では、本発明は回路をシミュレートする方法である。そのステップは、（１）回路のソフトウエアモデルを生成するステップと、（２）回路のハードウエアモデルを生成するステップと、（３）ソフトウエアモデルに入力データを提供することによってソフトウエアモデルを用いて回路の挙動をシミュレートするステップと、（４）ハードウエアモデルに選択的にスイッチングするステップと、（５）入力データをハードウエアモデルに提供するステップと、（６）ハードウエアモデルにおいてシミュレーションを加速することによって、ハードウエアモデルを用いて回路の挙動をシミュレートするステップとを含む。さらに本方法は、（１）ソフトウエアモデルに選択的にスイッチングするステップと、（２）入力データをソフトウエアモデルに提供することによってソフトウエアモデルを用いて回路の挙動をシミュレートするステップとをさらに含む。シミュレーションはまた、ソフトウエアモデルを用いて停止され得る。
【００２３】
回路内エミュレーションシモードに対して、本方法は、（１）回路のソフトウエアモデルを生成するステップと、（２）回路の少なくとも一部のハードウエアモデルを生成するステップと、（３）ターゲットシステムからハードウエアモデルに入力信号を供給するステップと、（４）ハードウエアモデルからターゲットシステムに出力信号を供給するステップと、（５）ハードウエアモデルを用いて回路の挙動をシミュレートするステップであって、ソフトウエアモデルはシミュレーション／エミュレーションをサイクルごとに制御することを可能にする、ステップとを含む。
【００２４】
ポストシミュレーション解析に対して、回路をシミュレートする方法は、（１）回路のモデルを生成するステップと、（２）入力データをそのモデルに提供することによって、このモデルを用いて回路の挙動をシミュレートするステップと、（３）選択された入力データおよび選択出力データをこのモデルからの書き込みポイントとして書き込むステップとを含む。ソフトウエアモデルおよびハードウエアモデルが生成され得る。本方法は、（１）シミュレーションにおける所望された時間依存ポイントを選択するステップと、（２）選択された時間依存ポイントにおいて、またはその前に書き込みポイントを選択するステップと、（３）入力データをハードウエアモデルに提供するステップと、（４）選択された書き込みポイントからハードウエアモデルを用いて回路の挙動をシミュレートするステップとをさらに含み得る。
【００２５】
本発明のさらなる実施形態は、回路をシミュレートするためのシミュレーションシステムのためのモデルを生成する方法である。このステップは、（１）回路のソフトウエアモデルを生成するステップと、（２）コンポーネントタイプに基づく回路の少なくとも一部に対してハードウエアモデルを生成するステップと、（３）ハードウエアモデルにおいてクロック生成回路を生成して、ソフトウエアモデルにおけるクロックエッジ検出に応答して、ハードウエアモデルのデータ評価をトリガするステップとを含む。
【００２６】
本発明の種々の実施形態は、標準的な設計のフリップフロップおよびラッチを置換する特別に設計された論理デバイスによって上記問題を解決する。本発明の一実施形態は、タイミングに鈍感なグリッチのない（ＴＩＧＦ）論理デバイスである。ＴＩＧＦ論理デバイスは、任意のラッチまたはエッジトリガフリップフロップの形態をとり得る。本発明の一実施形態では、トリガ信号が供給されて、ＴＩＧＦ論理デバイスを更新する。トリガ信号は、評価期間から隣接する時間において発生した短いトリガ期間の間に供給される。
【００２７】
ラッチ形態では、ＴＩＧＦラッチは、トリガ信号が受け取られるまでＴＩＧＦラッチの現在の状態を保持するフリップフロップを含む。マルチプレクサはまた、新しい値および古い格納された値を受け取るように設けられる。イネーブル信号は、マルチプレクサに対するセレクタ信号として機能する。トリガ信号がＴＩＧＦ信号の更新を制御するため、ＴＩＧＦラッチへのＤ入力におけるデータおよびイネーブル入力における制御データは、保持時間超過を受けることなく任意の順序で到達し得る。あるいは、トリガ信号は、ＴＩＧＦの更新を制御するため、イネーブル信号は、ＴＩＧＦラッチの適切な動作に負の影響を受けることなくグリッチし得る。
【００２８】
フリップフロップ形態においてＴＩＧＦフリップフロップは、新しい入力値を保持する第１のフリップフロップ、現在格納された値を保持する第２のフリップフロップ、およびクロックエッジ検出器を含む。これら３つのコンポーネント全てがＴＩＧＦフリップフロップを更新するためのトリガ信号によって制御される。マルチプレクサは、さらにセレクタ信号として機能するエッジ検出器信号が供給される。１つの専用の第１のフリップフロップは、評価の間に変化する入力を効率的にブロックする新しい入力値を格納するため、保持時間超過が回避される。ＴＩＧＦフリップフロップ更新を制御するトリガ信号によって、クロックグリッチは、ＴＩＧＦフリップフロップをエミュレートされたフリップフロップとして使用するユーザ設計回路のハードウエアモデルに影響を与えない。
【００２９】
これらの実施形態および他の実施形態は本明細書の以下のセクションで十分に議論され、示される。
【００３０】
添付された図面が、本発明のいくつかの異なる局面および実施形態について以下で説明される。
【００３１】
（好適な実施形態の詳細な説明）
本明細書において、「Ｓエミュレータ」または「Ｓエミュレータ」システムを呼ばれるシステムに関することを介しかつ内部の本発明の種々の実施形態が説明される。本明細書にわたって、用語「Ｓエミュレーションシステム」、「Ｓエミュレータシステム」、「Ｓエミュレーション」、または簡単に「システム」が用いられ得る。これらの用語は、４つの動作モードの任意の組合せのための本発明による種々の装置および方法を表す：すなわち、（１）ソフトウエアシミュレーション、（２）ハードウエアクセラレーションによるシミュレーション、（３）インサーキットエミュレーション（ＩＣＥ）、および（４）ポストシミュレーション解析（個々のセットアップまたは前処理ステージを含む）である。他の場合にも用語「Ｓエミュレーション」が用いられ得る。この用語は本明細書中に記載された新規のプロセスをいう。
【００３２】
同様に、「再構成可能ハードウエアコンピューティング（ＲＣＣ）アレイシステム」または「ＲＣＣコンピューティングシステム」などの用語は、メインプロセッサ、ソフトウエアカーネルおよびユーザ設計のソフトウエアモデルを含むシミュレーション／コ−ベリフィケーションシステムのこの部分をいう。「再構成可能ハードウエアハードウエアレイ」または「ＲＣＣハードウエアレイ」などの用語は、１実施形態において、ユーザ設計のハードウエアモデルを含み、かつ再構成可能ハードウエア論理素子を含むシミュレーション／コ−ベリフィケーションシステムのこの部分をいう。
【００３３】
また、本明細書には、「ユーザ」およびユーザの「回路設計」または「電子設計」が記載されている。「ユーザ」は、このインターフェースを介してＳエミュレーションシステムを用いる人間であり、そして設計プロセスにてほとんどか、全く役割を果たさなかった回路の設計者またはテスト／デバッガーであり得る。「回路設計」または「電子設計」は、ソフトウエアまたはハードウエア（テスト／デバッグ目的のためにＳエミュレーションシステムによってモデリングされ得る）であるカスタム設計システムまたはコンポーネントである。多くの場合、「ユーザ」はまた「回路設計」および「電子設計」を行った。
【００３４】
本明細書はまた、「ワイヤ」、「ワイヤライン」、「ワイヤ／バスライン」、および「バス」を用いる。これらの用語は、電気的に伝導する種々の線をいう。各ラインが２つのポイントの間の単一のワイヤまたは複数のポイントの間のいくつかのワイヤであり得る。これらの用語は、「ワイヤ」が１以上の導線を含み得、「バス」はまた１以上の導線を含み得る。
【００３５】
本明細書は、アウトラインの形態にて提示される。第１に、本明細書は、４つの動作モードおよびハードウエア実現スキームの概要を含むＳエミュレーションシステムの全体的な概要を提示する。第２に、本明細書は、Ｓエミュレーションシステムの詳細な説明を提供する。いくつかの場合、１つの図面が添付された図に示された種々の実施形態を提供し得る。これらの場合、同一の参照番号が同一のコンポーネント／ユニット／プロセスのために用いられる。本明細書のアウトラインは以下の通りである。
【００３６】
Ｉ．概要
Ａ．シミュレーション／ハードウエアクセラレーションモード
Ｂ．ターゲットシステムモードでのエミュレーション
Ｃ．ポストシミュレーション解析モード
Ｄ．ハードウエア実現スキーム
Ｅ．シミュレーションサーバ
Ｆ．メモリシミュレーション
Ｇ．コ−ベリフィケーションシステム
ＩＩ．システムの記述
ＩＩＩ．シミュレーション／ハードウエアクセラレーションモード
ＩＶ．ターゲットシステムモードによるエミュレーション
Ｖ．ポストシミュレーション解析モード
ＶＩ．ハードウエア実現スキーム
Ａ．概要
Ｂ．アドレスポインタ
Ｃ．ゲートデータ（ＧＡＴＥＤ  ＤＡＴＡ）／クロックネットワーク解析
Ｄ．ＦＰＧＡアレイおよび制御
Ｅ．高集積度ＦＰＧＡチップを用いる別の実施形態
Ｆ．ＴＩＧＦ論理デバイス
ＶＩＩ．シミュレーションサーバ
ＶＩＩＩ．メモリシミュレーション
ＩＸ．コ−ベリフィケーションシステム
Ｘ．例
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Ｉ．概要
本発明の種々の実施形態は、４つの一般的な動作モードを有する。（１）ソフトウエアシミュレーション、（２）ハードウエアクセラレーションによるシミュレーション、（３）インサーキットエミュレーション（ＩＣＥ）、および（４）ポストシミュレーション解析。種々の実施形態は、以下の機能の少なくともいくつかを有する以上のモードのシステムおよび方法を含む。（１）単一の緊密に結合されたシミュレーションエンジン、ソフトウエアカーネル（サイクル毎にソフトウエアおよびハードウエアを制御する）を有するソフトウエアおよびハードウエアモデル。（２）ソフトウエアおよびハードウエアモデル生成およびパーティションのためのコンパイルプロセスの間の自動コンポーネントタイプ解析。（３）ソフトウエアシミュレーションモード、ハードウエアクセラレーションモードによるシミュレーション、インサーキットエミュレーションモードおよびポストシミュレーション解析モード間でスイッチング（サイクル毎）を行う機能。（４）ソフトウエア組み合わせコンポーネント再生成による完全なハードウエア可観性（ｖｉｓｉｂｉｌｉｔｙ）。（５）競合条件を避けるためのソフトウエアクロックおよびゲートクロック／データ論理による二重バッファクロックモデリング；（６）ポストシミュレーションセッションの任意の選択されたポイントからユーザの回路設計を再度シミュレーションをするかまたはハードウエアクセラレーションを行う機能。最終的な目的は、完全なＨＤＬ機能性およびエミュレータ実行性能を有する柔軟で高速のシミュレータ／エミュレータシステムおよび方法である。
【００３７】
Ａ．シミュレーション／ハードウエアクセラレーションモード
Ｓエミュレーションシステムは、自動コンポーネントタイプ解析を通じて、ソフトウエアおよびハードウエアのユーザのカスタム回路設計をモデリングし得る。全体のユーザ回路設計がソフトウエアにてモデリングされ、一方評価コンポーネント（すなわち、レジスタコンポーネント、組み合わせコンポーネント）がハードウエアにてモデリングされる。ハードウエアモデリングがコンポーネントタイプ解析によって容易にされる。
【００３８】
汎用プロセッサシステムのメインメモリに常駐するソフトウエアカーネルは、Ｓエミュレータシステムのメインプログラム（種々のモードおよび機能での全体動作および実行を制御する）として役目を果たす。任意のテストベンチプロセッサが活性化している限り、カーネルは活性化しているテストベンチコンポーネントを評価し、クロックコンポーネントを評価し、組み合わせ論理データを伝達させると同じようにレジスタおよびメモリを更新するクロックエッジを検出し、そしてシミュレーションタイムを進める。このソフトウエアカーネルがシミュレータエンジンとハードウエアエンジンとの緊密な結合特性を提供する。ソフトウエア／ハードウエア境界について、Ｓエミュレーションシステムが多数のＩ／Ｏアドレス空間−ＲＥＧ（レジスタ）、ＣＬＫ（ソフトウエアクロック）、Ｓ２Ｈ（ソフトウエアからハードウエアへ）およびＨ２Ｓ（ハードウエアからソフトウエアへ）を提供する。
【００３９】
Ｓエミュレーションが４つの動作モードの間で選択的にスイッチングする性能を有する。システムのユーザがシミュレーションを開始させ、シミュレーションを終了させ、入力値をアサートし、値を検査し、サイクル毎の単一のステップを試験を行い得、そして４つの異なるモードの間で前後してスイッチングし得る。例えば、本システムが時間期間のソフトウエアの回路をシミュレーションをし、ハードウエアモデルを介してシミュレーションをアクセラレーションし、そしてソフトウエアシミュレーションモードに戻し得る。
【００４０】
一般に、Ｓエミュレーションシステムは、ソフトウエアまたはハードウエアのどちらにてコンポーネントがモデリングされるかに関わらず、ユーザに全てのモデリングされるコンポーネントを「見る（ｓｅｅ）」能力を提供する。種々の理由から、組み合わせコンポーネントはレジスタのように「見える（ｖｉｓｉｂｌｅ）」ものではなく、従って、組み合わせコンポーネントデータを入手することは困難である。１つの理由は、ユーザの回路設計のハードウエア部をモデリングするように再構成可能ボードの中に用いられるＦＰＧＡが通常、実際の組み合わせコンポーネントの代わりに、ルックアップテーブル（ＬＵＴ）として組み合わせコンポーネントをモデリングすることである。したがって、Ｓエミュレーションシステムがレジスタ値を読み出し、そして次いで、組み合わせコンポーネントを再生成する。いくつかのオーバーヘッドが組み合わせコンポーネントを再生成するために必要とされるので、この再生成プロセスは常に実行されるわけではない。むしろ、ユーザのリクエストに応じるのみである。
【００４１】
ソフトウエアカーネルがソフトウエア側に常駐しているので、クロックエッジ検出機構は、ハードウエアモデルの種々のレジスタにイネーブル入力を駆動させるいわゆるソフトウエアクロックの生成をトリガーするために提供される。タイミングが二重バッファ回路の実装を介して厳密に制御されるので、データをこれらのモデルに入力させる前にソフトエアクロックイネーブル信号がレジスタモデルに入る。一旦これらのレジスタモデルへのデータ入力が安定化すると、ソフトウエアクロックは、全てのデータ値が保持時間違反の任意のリスクなしにとともにゲートされる（ｇａｔｅｄ）ことを確実にするように同期的にデータをゲートする。
【００４２】
また、ソフトウエアシミュレーションがシステムが全ての入力値および選択されたレジスタ値／状態だけをログするので高速になり、従って、オーバーヘッドがＩ／Ｏ動作の数を減少させることによって最小化される。ユーザがロギング頻度を選択的に選択し得る。
【００４３】
Ｂ．ターゲットシステムモードのエミュレーション
Ｓエミュレーションシステムがターゲットシステム環境内にユーザの回路をエミュレートできる。ターゲットシステムが評価のためにデータをハードウエアモデルに出力し、ハードウエアモデルはまたデータをターゲットシステムに出力する。さらに、ソフトウエアカーネルがこのモードの動作を制御するので、ユーザが開始し、停止し、値をアサートし、値を検査し、単一のステップを行い、そしてあるモードから別のモードにスイッチングするオプションをまだ有する。
【００４４】
Ｃ．ポストシミュレーション解析モード
ログがユーザにシミュレーションセッションの履歴記録を提供する。公知のシミュレーションシステムと異なり、Ｓエミュレーションシステムがシングルごとの値、内部状態またはシミュレーションプロセスの間の値変化をロギングしない。Ｓエミュレーションシステムがロギング頻度（すなわち、Ｎサイクル毎に１記録をログ）に基づいて選択された値および状態をロギングするだけである。ポストシミュレーションステージの間、ユーザは、ちょうど完了したシミュレーションセッションのポイントＸ近くの種々のデータを試験することを望む場合、ユーザがロギングされたポイント（例えば、ロギングされたポイントＹ（ポイントＸ近くにあり、時間的にポイントＸの前に配置される））の１つに進む。次いで、ユーザは、シミュレーション結果を入手するために選択されたロギングポイントＹから自分の望むポイントＸにシミュレーションをする。
【００４５】
また、ＶＣＤオンデマンドシステムが説明される。ＶＣＤオンデマンドシステムは、ユーザが、シミュレーションの再走行なしにオンデマンドで任意のシミュレーションターゲット範囲（すなわち、シミュレーション時間）を眺めることを可能にする。
【００４６】
Ｄ．ハードウエア実現スキーム
Ｓエミュレーションシステムは、再構成可能ボード上のＦＰＧＡチップのアレイを実現する。ハードウエアモデルに基づいて、Ｓエミュレーションシステムが、ユーザ回路設計のそれぞれ選択された部分をＦＰＧＡチップ上にパーティションし、マッピングし、配置し、そしてルーティングを行う。従って、例えば、１６チップの４×４アレイは、これらの１６チップにわたって広がられた大きな回路をモデリングし得る。相互接続スキームは、それぞれのチップが別のチップに２「ジャンプ」またはリンク内にアクセスすることを可能にする。
【００４７】
各ＦＰＧＡチップが各Ｉ／Ｏアドレス空間（すなわち、ＲＥＧ、ＣＬＫ、Ｓ２Ｈ、Ｈ２Ｓ）に対してアドレスポインタを実現する。特定のアドレス空間に関連する全てのアドレスポインタの組合せが共に連鎖される。したがって、データ転送の間、ワードデータ（各チップ（ある時間当たりに１チップ）の選択されたアドレス空間に対するある時間当たり１ワード）は、所望のワードデータがその選択されたアドレス空間に対してアクセスされるまでメインＦＰＧＡバスおよびＰＣＩバスから／へ（ｆｒｏｍ／ｔｏ）と逐次的に選択される。この逐次的なワードデータの選択が伝播するワード選択信号によって達成される。このワード選択信号がチップのアドレスポインタを介して移動し、そして次いで、次のチップのアドレスポインタに伝播し、そしてこの動作が最後のチップまたはシステムがアドレスポインタを初期化するまで続く。
【００４８】
再構成可能ハードウエアボードのＦＰＧＡバスシステムは、ＰＣＩバスバンド幅の２倍だがＰＣＩバス速度の半分で動作する。従って、ＦＰＧＡチップがより大きなバンド幅バスを利用するようにバンクに分離される。このＦＰＧＡバスシステムのスループットは、性能がバス速度を低減することによって損なわれないようにＰＣＩバスシステムのスループットをトラッキングし得る。拡張は、バンク長を拡張するピギーバックボード（ｐｉｇｇｙｂａｃｋ  ｂｏａｒｄ）によって可能である。
【００４９】
本発明の別の実施形態において、より集積度の高いＦＰＧＡチップが用いられる。１つのこのような集積度の高いチップがＡｌｔｅｒａ１０Ｋ１３０Ｖおよび１０Ｋ２５０Ｖチップである。これらのチップの使用は、８つ未満の集積度の高いＦＰＧＡチップ（Ａｌｔｅｒａ１０Ｋ１００Ｖ）の代わりに、４つのみのＦＰＧＡチップがボード毎に用いられるようにボード設計を変更する。
【００５０】
シミュレーションシステムのＦＰＧＡアレイが特定のボード相互接続構造を介してマザーボード上に提供される。各チップは、相互接続部のセットを８つまで有してもよく、相互接続部は、ローカルバス接続部を除く、隣接した直接的に近接する相互接続部（すなわち、Ｎ［７３：０］、Ｓ［７３：０］、Ｗ［７３：０］、Ｅ［７３：０］）、および１ホップ（ｏｎｅ−ｈｏｐ）の隣接相互接続部（ＮＨ［２７：０］、ＳＨ［２７：０］、ＸＨ［３６：０］、ＸＨ［７２：３７］）によって単一のボード内および異なるボードにわたって配置される。各チップは、隣接した近接チップに直接的に相互接続され得るか、または上方、下方、左右に配置された１ホップ非隣接チップ（ｏｎｅ−ｈｏｐ  ｔｏ  ａ  ｎｏｎ−ａｄｊａｃｅｎｔ  ｃｈｉｐ）にて相互接続され得る。Ｘ方向（東西）においてアレイがトーラスである。Ｙ方向（北南）において、アレイがメッシュである。
【００５１】
相互接続部が単一のボード内の論理デバイスおよび他のコンポーネントを接続し得る。しかし、内部ボードコネクタは、上述のボードを接続し、そして（１）マザーボードおよびアレイボードを介するＰＣＩバスと（２）任意の２つのアレイボードとの間に信号が伝送するように異なるボードにわたって共に相互接続するために提供されている。
【００５２】
マザーボードコネクタはボードをマザーボード、従ってＰＣＩバス、電源および接地にグラウンドする。いくつかのボードについて、マザーボードコネクタがマザーボードとの直接的に接続するために用いられない。６枚ボード構成において、単なるボード１、３および５だけがマザーボードに直接的に接続されている一方、残りのボード２、４および６がマザーボード接続性について近接ボードに依存している。従って、全ての他のボードが直接的にマザーボードに接続され、これらのボードの相互接続部およびローカルバスがはんだ面に配置された内部ボードコネクタを介して共にコンポーネント面に結合されている。ＰＣＩ信号がボード（通常、第１のボード）の１つを通ってルーティングされる。電源およびグラウンドがこれらのボードの他のマザーボードコネクタに加えられる。コンポーネント面にハンダ面が配置され、種々の内部ボードコネクタがＰＣＩバスコンポーネント、ＦＰＧＡ論理デバイス、メモリデバイスおよび種々のシミュレーションシステム制御回路間の通信を可能にする。
【００５３】
Ｅ．シミュレーションサーバ
本発明の別の実施形態において、シミュレーションサーバが同一の再構成可能ハードウエアユニットに複数のユーザがアクセスすることを可能にする。あるシステム構成において、ネットワークにわたる複数のワークステーションまたは非ネットワーク環境の複数のユーザ／プロセスは、同一または異なるユーザ回路設計をレビュー／デバッグするように同一のサーバベースの再構成可能ハードウエアユニットにアクセスし得る。このアクセスが時間共有プロセス（スケジューラが複数のユーザのアクセス優先順位を決定し、ジョブをスワップし、そして競合スケジューリングされたユーザ間のハードウエアモデルアクセスを選択的にロックするプロセス）を介して達成される。あるシナリオでは、各ユーザは、はじめて、彼／彼女と異なるユーザ設計を再構成可能ハードウエアモデルにマッピングするためにアクセスし得、この場合、システムがソフトウエアおよびハードウエアモデルを生成するためにこの設計をコンパイルし、クラスタリング動作を実行し、配置およびルーティング動作（ｐｌａｃｅ−ａｎｄ−ｒｏｕｔｅ  ｏｐｅｒａｔｉｏｎ）を実行し、ビットストリーム構成ファイルを生成し、そして再構成可能ハードウエアユニットにてＦＰＧＡチップを再構成し、これによりユーザの設計のハーウエア部分をモデリングする。あるユーザがハードウエアモデルを用いて自分の設計をアクセラレーションさせ、ソフトウエアシミュレーションのために自分のメモリにハードウエアの状態をダウンロードした場合、このハードウエアユニットがアクセスのために別のユーザによって解放され得る。
【００５４】
サーバにより、複数のユーザまたはプロセスがアクセラレーションおよびハードウエア状態スワッピング目的のために再構成可能ハードウエアユニットにアクセスできる。シミュレーションサーバは、スケジューラ（ｓｃｈｅｄｕｌｅｒ）、１以上のデバイスドライバおよび再構成可能ハードウエアユニットを含む。シミュレーションサーバのスケジューラは、割り込みラウンドロビンアルゴリズム（ｐｒｅｅｍｐｔｉｖｅ  ｒｏｕｎｄ  ｒｏｂｉｎ  ａｌｇｏｒｉｔｈｍ）に基づいている。サーバスケジューラは、シミュレーションジョブキューテーブル、プライオリティソータ（ｐｒｉｏｒｉｔｙ  ｓｏｒｔｅｒ）およびジョブスワッパを含む。本発明の回復および再生機能は、非ネットワークマルチプロセッシング環境およびネットワークマルチユーザ環境（これらの環境では、以前のチェックポイント状態データがダウンロードされ得、このチェックポイントに関連する全体のシミュレーション状態が再生デバッギングまたはサイクル毎のステッピングのために回復され得る）を容易にする。
【００５５】
Ｆ．メモリシミュレーション
本発明のメモリシミュレーションまたはメモリマッピングの局面は、ユーザ設計の構成されたハードウエアモデル（再構成可能ハードウエアハードウエアユニットのＦＰＧＡチップのアレイにプログラミングされた）の種々のメモリブロックを管理するために、シミュレーションシステムに効率的な方法を提供する。本発明のメモリシミュレーション局面は、ユーザの設計に関連する多くのメモリブロックが、ユーザの設計を構成してモデリングするために用いられる論理デバイスの代わりにシミュレーションシステムのＳＲＡＭメモリデバイスにマッピングされる構造およびスキームを提供する。メモリシミュレーションシステムがメモリ状態機械、評価状態機械および次の（１）〜（３）を制御してインターフェースをとるためのこれらに関連する論理を含む。（１）メインコンピューティングシステムおよびこれに関連するメモリシステム、（２）シミュレーションシステムのＦＰＧＡバスに結合されるＳＲＡＭメモリデバイス、および（３）構成されてプログラミングされたユーザ設計（デバッグ中）を含むＦＰＧＡ論理デバイス。本発明の１実施形態によるメモリシミュレーションシステムの動作は全体的に以下の通りである。シミュレーション書き込み／読み出しサイクルが３つの期間（ＤＭＡデータ転送、評価およびメモリアクセス）に分割される。
【００５６】
メモリシミュレーションシステムのＦＰＧＡ論理デバイス側は、次の（１）および（２）を処理にするためにユーザ設計のユーザ自身のメモリインターフェースとインターフェースをとるために、評価状態機械、ＦＰＧＡバスドライバおよび各メモリブロックＮに対する論理インターフェースを含む。（１）ＦＰＧＡ論理デバイス間のデータ評価、および（２）ＦＰＧＡ論理デバイスとＳＲＡＭメモリデバイスとの間の書き込み／読み出しメモリアクセス。ＦＰＧＡ論理デバイス側との関係において、ＦＰＧＡ  Ｉ／Ｏコントローラ側は、メモリ状態機械と、（１）メインコンピューティングシステムとＳＲＡＭメモリデバイスとの間、および（２）ＦＰＧＡ論理デバイスとＳＲＡＭメモリデバイスとの間のＤＭＡ、書き込みおよび読み出し動作を処理するためのインターフェース論理とを含む。
【００５７】
Ｇ．コ−ベリフィケーションシステム
本発明の１実施形態は、再構成可能なコンピューティングシステム（以下の「ＲＣＣコンピューティングシステム」）および再構成可能なコンピューティングハードウエアレイ（以下の「ＲＣＣハードウエアレイ」）を含むコ−ベリフィケーションシステムである。いくつかの実施形態において、ターゲットシステムおよび外部Ｉ／Ｏデバイスは、ソフトウエアにおいてモデリングされ得るので必要でない。他の実施形態において、ターゲットシステムおよび外部Ｉ／Ｏデバイスは、シミュレーションされたテストベンチデータではなく、速さを得てかつ実際のデータを用いるためにコ−ベリフィケーションシステムに実際に接続される。したがって、コ−ベリフィケーションシステムは、実際のターゲットシステムおよび／またはＩ／Ｏデバイスを用いつつ、ユーザの設計のソフトウエア部分およびハードウエア部分をデバッグする機能性と共にＲＣＣコンピューティングシステムおよびＲＣＣハードウエアレイを組み込むことができる。
【００５８】
ＲＣＣコンピューティングシステムはまた、クロック論理（クロックエッジ検出およびソフトウエアクロック生成用の論理）、ユーザ設計をテストするテストベンチプロセス、ユーザが実際の物理的なＩ／Ｏデバイスを用いるのではなく、ソフトウエアにおいてモデリングすることを決定する任意のＩ／Ｏデバイスのデバイスモデルを含む。もちろん、ユーザが１デバッグセッション内に実際のＩ／ＯデバイスおよびモデリングされたＩ／Ｏデバイスを用いることを決定し得る。ソフトウエアクロックは、ターゲットシステムおよび外部Ｉ／Ｏデバイスの外部クロック源として機能するように外部インターフェースに提供される。このソフトウエアクロックの使用は、入出力するデータを処理するために必要な同期化を提供する。ＲＣＣコンピューティングシステム生成ソフトウエアクロックはデバッグセッションにおいて時間ベースであるので、シミュレーションされかつハードウエアクセラレーションされたデータがコ−ベリフィケーションシステムと外部インターフェースとの間で伝達される任意のデータと同期化される。
【００５９】
ターゲットシステムおよび外部Ｉ／Ｏデバイスがコ−ベリフィケーションシステムに結合されている場合、ピン出力データ（ｐｉｎ−ｏｕｔ  ｄａｔａ）はコ−ベリフィケーションシステムとその外部インターフェイスとの間で提供されなければならない。コ−ベリフィケーションシステムは、（１）ＲＣＣコンピューティングシステムとＲＣＣハードウエアレイとの間、および（２）外部インターフェース（ターゲットシステムおよび外部Ｉ／Ｏデバイスに結合される）とＲＣＣハードウエアレイとの間のトラフィック制御を提供する制御論理を含む。なぜなら、ＲＣＣコンピューティングシステムがソフトウエアの設計全体のモデル（ＲＣＣハードウエアレイにおいてモデリングされたユーザ設計の部分を含む）を有するので、ＲＣＣコンピューティングシステムはまた外部インターフェースとＲＣＣハードウエアレイとの間で通過する全てのデータを有しなければならない。制御論理がＲＣＣコンピューティングシステムがこれらのデータにアクセスを有することを確実にする。
【００６０】
ＩＩ．システムの記述
図１は、本発明の１実施形態の高級レベルの概要（ｈｉｇｈ  ｌｅｖｅｌ  ｏｖｅｒｖｉｅｗ）を示す。ワークステーション１０は、ＰＣＩバスシステム５０を介して再構成可能ハードウエアモデル２０およびエミュレーションインターフェース３０に結合される。再構成可能ハードウエア２０は、ケーブル６１と同様に、ＰＣＩバス５０を介してエミュレーションインターフェース３０に結合される。ターゲットシステム４０は、ケーブル６０を介してエミュレーションインターフェースに結合される。他の実施形態において、エミュレーションインターフェース３０およびターゲットシステム４０を含むインサーキットエミュレーションセットアップ７０（点線で描かれたボックスで示される）は、ターゲットシステムの環境内のユーザの回路設計のエミュレーションが特定のテスト／デバッグセッションの間に望まれない場合、このセットアップにおいて提供されない。インサーキットエミュレーションセットアップ７０なしで、再構成可能ハードウエアモデル２０がＰＣＩバス５０を介してワークステーション１０と通信する。
【００６１】
インサーキットエミュレーションセットアップ７０と組み合わせて、再構成可能ハードウエア２０がターゲットシステムのいくつかの電子サブシステム（ｅｌｅｃｔｒｏｎｉｃ  ｓｕｂｓｙｓｔｅｍ）のユーザの回路設計を真似るかまたは模倣する。ターゲットシステムの環境内の電子サブシステムのユーザの回路設計の正しい動作を確実にするために、ターゲットシステム４０とモデリングされた電子サブシステムとの間の入出力信号が評価用の再構成可能ハードウエアモデル２０に提供されなければならない。そこで、再構成可能ハードウエアモデル２０から入出力するターゲットシステム４０の入出力信号がエミュレーション３０とＰＣＩバス５０を介してケーブル６０を介して伝達される。あるいは、ターゲットシステム４０の入力／出力信号がエミュレーションインターフェース３０とケーブル６１とを介して再構成可能ハードウエアモデル２０に伝達され得る。
【００６２】
制御データおよびいくつか実質的なシミュレーションデータが再構成可能ハードウエアモデル２０とワークステーション１０との間でＰＣＩバスを介して通過する。実際に、ワークステーション１０は、全体的なＳエミュレーションシステムの動作を制御し、そして再構成可能ハードウエアモデル２０へのアクセス（読み出し／書き込み）を有さなければならないソフトウエアカーネルを走行させる。
【００６３】
コンピュータ、キーボード、マウス、モニタおよび適切なバス／ネットワークインターフェース付きのワークステーション１０は、ユーザが電子システムの回路設計を記載するデータを入れて、変更することを可能にする。例示的なワークステーションは、Ｓｕｎ  ＭｉｃｒｏｓｙｓｔｅｍｓのＳＰＡＲＣまたはＵＬＴＲＡ−ＳＰＡＲＣワークステーションまたはＩｎｔｅｌ／Ｍｉｃｒｏｓｏｆｔベースのコンピューティングステーションを含む。当業者に知られているように、ワークステーション１０は、ＣＰＵ１１、ローカルバス１２、ホスト／ＰＣＩブリッジ１３、メモリバス１４およびメインメモリ１５を含む。種々のソフトウエアシミュレーション、ハードウエアクセラレーションによるシミュレーション、インサーキットエミュレーションおよび本発明のポストシミュレーション解析局面がワークステーション１０、再構成可能ハードウエアモデル２０およびエミュレーション３０に提供される。ソフトウエアに具体化されたアルゴリズムは、テスト／デバッグセッションの間にメインメモリ１５に格納され、そしてワークステーションのオペレーティングシステムの経由のもとのＣＰＵ１１を介して実行される。
【００６４】
当業者に知られているように、オペレーティングシステムがスタートアップファームウエアによってワークステーション１０のメモリにロードされた後、制御が必要なデータ構造をセットアップするために開始するための初期化コードに移り、そしてデバイスドライバをロードし、初期化する。次いで、制御は、コマンドラインインタプリタ（ユーザに走行されるプログラムへのプロンプトが与える）（ＣＬＩ）移される。次いで、オペレーティングシステムは、プログラムを走行するために必要なメモリ量を決定し、メモリブロックを配置するか、またはメモリのブロックに割り当て、そして直接的にまたはＢＩＯＳを介してメモリにアクセスする。メモリローデングプロセスの完了後、アプリケーションプログラムが実行し始める。
【００６５】
本発明の１実施形態は、Ｓエミュレーション用の特定のアプリケーションプログラムである。このプログラムの実行の過程の間、このアプリケーションプログラムがオペレーティングシステムから多数のサービスを要求し得る。これらの多数のサービスは、ディスクファイルから読み出し、ディスクファイルに書き込み、データ通信を実行し、そしてディスプレイ／キーボード／マウスとインターフェースをとることを含むが、これらに限定されない。
【００６６】
ワークステーション１０は、ユーザが回路設計データを入力し、回路設計データを編集し、結果を入手しながらシミュレーションおよびエミュレーションの進展をモニタリングし、そして本質的にはシミュレーションおよびエミュレーションプロセスを制御することを可能にする適切なユーザインターフェースを有する。図１に示されていないが、ユーザインターフェースは、ユーザアクセス可能メニュ駆動オプション（ｕｓｅｒ−ａｃｃｅｓｓｉｂｌｅ  ｍｅｎｕ−ｄｒｉｖｅｎ  ｏｐｔｉｏｎ）およびコマンドセット（キーボードおよびマウスで入力可能で、モニタで眺められ得る）を含む。通常、ユーザは、キーボード９０付のコンピューティングステーション８０を用いる。
【００６７】
ユーザは通常、電子システムの特定の回路設計を作成し、自分の設計されたシステムのＨＤＬ（常に、構造化されたＲＴＬレベル）コードの記載をワークステーション１０に入力する。本発明のＳエミュレーションシステムは、ソフトウエアとハードウエアとの間のモデリングをパーティションするために、他の動作の間で、コンポーネントタイプ解析を実行する。Ｓエミュレーションシステムは、ソフトウエアにおいて、挙動、ＲＴＬおよびゲートレベルコードをモデリングする。ハードウエアモデリングのために、このシステムがＲＴＬおよびゲートレベルコードをモデリングし得る；しかし、ＲＴＬレベルがハードウエアモデリングの前にゲートレベルに合成されなければならない。ゲートレベルコードは、ハードウエアモデリング用の使用可能ソース設計データベースフォーマット（ｕｓａｂｌｅ  ｓｏｕｒｃｅ  ｄｅｓｉｇｎ  ｄａｔａｂａｓｅ  ｆｏｒｍａｔ）の中で直接的に処理され得る。ＲＴＬおよびゲートレベルコードを用いて、システムがコンポーネントタイプ解析を自動的に実行し、パーティションステップを完了する。ソフトウエアコンパイル時間の間のパーティション解析に基づいて、システムがハードウエアクセラレーションを介しての高速シミュレーションのために、回路設計のある部分をハードウエアにマッピングする。ユーザはまた、現実環境インサーキットエミュレーションのために、モデリングされた回路設計をターゲットシステムに結合し得る。ソフトウエアシミュレーションおよびハードウエアクセラレーションエンジンがソフトウエアカーネルを介して緊密に結合されるので、次いでユーザが、テスト／デバッグプロセスが完了するまで、ソフトウエアシミュレーションを用いつつ、全体の回路設計のシミュレーションを実行し、マッピングされた回路設計のハードウエアモデルを用いることによってテスト／デバッグプロセスをアクセラレーションし、シミュレーション部分に戻り、ハードウエアクセラレーションに戻り得る。ソフトウエアシミュレーションとハードウエアクセラレーションの間をサイクル毎およびユーザの競合でスイッチングする能力がこの実施形態の価値のある特長の１つである。この機能は、種々のポイントを検査し、その後、回路設計をデバッグするために、ハードウエアクセラレーションモードを用い、次いでソフトウエアシミュレーションを用いつつ、ユーザが特定のポイントまたはサイクルに非常に高速で行くことを可能にすることにより、デバッグプロセスにおいて特に有用である。さらに、Ｓエミュレーションシステムは、コンポーネントの内部の実現状態がハードウエアまたはソフトウエア内にあるか否かと関係なく、全てのコンポーネントをユーザが見れるようにする。Ｓエミュレーションシステムは、ユーザがこのような読み出しを要求する場合、ハードウエアモデルからレジスタ値を読み出し、ソフトウエアモデルを用いて組み合わせコンポーネントを再構成することによってこれを達成する。これらと他の特長が本明細書中に後により十分に議論される。
【００６８】
ワークステーション１０がバスシステム５０に結合される。バスシステムは、ワークステーション１０、再構成可能ハードウエアモデル２０およびエミュレーションインターフェース３０等の種々のエージェントが動作上に共に結合されることを可能にする任意の利用可能なバスシステムであり得る。好適には、バスシステムは、実時間またはほぼ実時間（ｎｅａｒ  ｒｅａｌ−ｔｉｍｅ）をユーザに提供するのに十分に高速である。このようなバスシステムの１つが、周辺コンポーネント相互接続（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）（ＰＣＩ）規格（参考のために本明細書中で援用される）で記述されたバスシステムである。現在、ＰＣＩ規格の改正版（ｒｅｖｉｓｉｏｎ）２．０が３３ＭＨｚバス速度を提供する。改正版２．１は６６ＭＨｚバス速度を可能にする（ｓｕｐｐｏｒｔ）。したがって、ワークステーション１０、再構成可能ハードウエアモデル２０およびエミュレーションインターフェース３０がＰＣＩ規格と適合し得る。
【００６９】
１実施形態において、ワークステーション１０と再構成可能ハードウエアモデル２０との間の通信がＰＣＩバス上で処理される。他のＰＣＩ適合デバイスはこのバスシステムにおいて見出され得得る。以上のデバイスは、ワークステーション１０、再構成可能ハードウエアモデル２０およびエミュレーションインターフェース３０と同一のレベルまたは他のレベルにてＰＣＩバスに結合され得る。ＰＣＩバス５２等の、異なるレベルでの各ＰＣＩバスは、ある場合には、ＰＣＩ対ＰＣＩブリッジ（ＰＣＩ−ｔｏ−ＰＣＩｂｒｉｄｇｅ）５１を介して、ＰＣＩ５０等の別のＰＣＩバスレベルに結合される。ＰＣＩバス５２にて、２つのＰＣＩデバイス５３および５４が互いに結合され得る。
【００７０】
再構成可能ハードウエアモデル２０は、ユーザの電子システム設計のハードウエア部分をモデリングするためにプログラム可能なように構成され、再構成され得るフィールドプログラマブルゲートアレイ（ＦＰＧＡ）チップを含む。この実施形態において、ハードウエアモデルが再構成可能である。すなわち、この実施形態では、手近の特定の計算（ｃｏｍｐｕｔａｔｉｏｎ）またはユーザ回路設計に適合させるようにハードウエアを再構成できる。例えば、多くの加算器（ａｄｄｅｒ）または乗算器が必要とされる場合、本システムが多くの加算器および乗算器を含むように構成される。他のコンピューティング素子または関数（ｆｕｎｃｔｉｏｎ）が必要とされる場合、それらもまたシステム内にモデリングまたは形成され得る。このように、システムは、特定化された計算または論理動作を実行するために最適化され得る。ユーザが再構成可能システムはまた、製造、テストまたは使用中に生じる小さなハードウエアの欠陥（ｍｉｎｏｒ  ｈａｒｄｗａｒｅ  ｄｅｆｅｃｔ）を処理できるように柔軟である。１実施形態において、再構成可能ハードウエアモデル２０は、種々のユーザ回路設計およびアプリケーションのために計算リソースを提供するために、ＦＰＧＡチップを構成するコンピューティング素子の２次元アレイを含み、ハードウエア構成プロセスのさらなる詳細が提供される。
【００７１】
２つのこのようなＦＰＧＡがＡｌｔｅｒａおよびＸｉｌｌｉｎｘによって販売されているチップを含む。いくつかの実施形態において、再構成可能ハードウエアモデルがフィールドプログラマブルデバイスの使用によって再構成可能になる。しかし、本発明の他の実施形態は、アプリケーション専用集積回路（ＡＳＩＣ）技術を用いて実現され得る。さらに、他の実施形態がカスタム集積回路の形態でもあり得る。
【００７２】
通常のテスト／デバッグシナリオにおいて、再構成可能デバイスは、ユーザの回路設計のシミュレーション／エミュレーションを実行するように用いられるので、適切な変更が実際のプロトタイプの製造前に為され得る。しかし、いくつかの他の例では、再シミュレーションおよび再エミュレーションのたぶん非機能な回路設計を素早くかつコスト効果的にユーザが変化させることができないが、実際のＡＳＩＣまたはカスタム集積回路が用いられ得る。もっとも時には、このようなＡＳＩＣまたはカスタムＩＣは、実際の非再構成可能チップによるエミュレーションが好適であり得るように既に製造さ競合ぐに利用可能である。
【００７３】
本発明により、ワークステーションのソフトウエアは、外部ハードウエアモデルと一体化して、現存するシステムを超えるより高い程度の柔軟性、制御および性能をエンドユーザに提供する。シミュレーションおよびエミュレーションを走行するために、回路設計のモデルおよび関連パラメータ（例えば、入力テストベンチ刺激（ｓｔｉｍｕｌｕｓ）、全体システムの出力、中間結果）は、決定され、シミュレーションソフトウエアシステムに提供される。ユーザは、システム回路設計を定義するためにスキマティックキャプチャ（ｓｃｈｅｍａｔｉｃ  ｃａｐｔｕｒｅ）ツールまたは合成ツールのいずれかを用い得る。ユーザは、通常、スキマティック図（後に合成ツールを用いてＨＤＬ形式に変換される）で電子システムの回路設計を始める。ＨＤＬはまた、ユーザによって直接的に書き込まれ得る。例示的なＨＤＬ言語は、ＶｅｒｉｌｏｇおよびＶＨＤＬを含む。しかし、他の言語も利用可能である。ＨＤＬで表される回路設計が多くの並列型コンポーネントを含む。各コンポーネントは、回路素子の挙動を定義するか、シミュレーションの実行を制御するかのいずれかであるコードシーケンスである。
【００７４】
Ｓエミュレーションシステムは、上記のコンポーネントのタイプを決定するために上記のコンポーネントを解析し、コンパイラはソフトウエアおよびハードウエアにて異なる実行モデルを構築するようにこのコンポーネントタイプ情報を用いる。その後、ユーザが本発明のＳエミュレーションシステムを用い得る。設計者は、シミュレーションを通じて、入力信号およびテストベクトルパターン等の種々の刺激をシミュレーション中のモデルに作用させることによって回路の精度を検証し得る。シミュレーションの間、回路が計画された挙動しなかった場合、ユーザが回路のスキマティック図またはＨＤＬファイルを変更することによって回路を再定義する。
【００７５】
本発明のこの実施形態の使用が図２のフローチャートに示される。アルゴリズムが工程１００で開始する。システムにＨＤＬファイルをロードした後、システムは、回路設計を適切なハードウエアモデルにコンパイルし、パーティションし、マッピングする。コンパイル、パーティションおよびマッピング工程が以下でより詳細に説明される。
【００７６】
シミュレーションが走行する前に、システムは、ハードウエアクセラレーションモデルが機能し得る前にソフトウエア上の未知の「ｘ」値の全てを除去するようにリセットシーケンスを走行させなければならない。本発明の１実施形態は、４状態値（「００」が論理ｌｏｗであり、「０１」が論理ｈｉｇｈであり、「１０」が「ｚ」であり、「１１」が「ｘ」である）をバス信号に提供するように２ビット幅データパスを用いる。当業者に知られているように、ソフトウエアモデルが「０」、「１」、「ｘ」（バス衝突かまたは未知の値）および「ｚ」（ドライバがないか、または高いインピーダンスでない）を処理し得る。対照的に、特定の応用コード（ａｐｐｌｌｉｃａｂｌｅ  ｃｏｄｅ）に依存して変わるリセットシーケンスがレジスタ値を全て「０」または全て「１」にリセットするので、ハードウエアが未知の値「ｘ」を処理できない。
【００７７】
工程１０５において、ユーザが回路設計のシミュレーションを実行するか否かを決定する。通常、まず、ユーザがソフトウエアシミュレーションについてシステムを開始させる。したがって、工程１０５の決定が「はい（ＹＥＳ）」である場合、ソフトウエアシミュレーションが工程１１０で始まる。
【００７８】
工程１１５に示されるように、ユーザは値を検査するためにシミュレーションを停止させることができる。実際、ユーザは、ハードウエアクセラレーションモード、ＩＣＥモードおよびポストシミュレーションモードにおいて、工程１１５から種々のノードに伸びる点線によって示されたテスト／デバッグセッションの間の任意の時間にシミュレーションを停止させることができる。ユーザは、実行工程１１５を実行することによって工程１６０に進む。
【００７９】
停止後、システムカーネルは、ユーザが組み合わせコンポーネント値を検査することを望む場合、ハードウエアレジスタコンポーネントの状態を読み返し、これにより組み合わせコンポーネントを含むソフトウエアモデル全体を再生成する。ソフトウエアモデル全体を復帰させた後、ユーザがシステムの任意の信号値を検査し得る。停止および検査後、ユーザがシミュレーション専用モードまたはハードウエアモデルアクセラレーションモードの中に走行し続ける。フローチャートに示されるように、工程１１５が停止／値検査ルーチンに分岐する。停止／値検査ルーチンが工程１６０にて開始する。工程１６５にて、ユーザがこのポイントにてシミュレーションを停止し、値を検査するか否かを決定しなければならない。工程１６５の決定が「はい」である場合、工程１７０では、現在進行中であり得るシミュレーションを停止し、回路設計の訂正をチェックするために種々の値を検査する。工程１７５にて、アルゴリズムは、工程１１５で分岐したポイントに戻る。ここで、ユーザがテスト／デバッグセッションの残りのために値のシミュレーションをしかつ停止／検査し続けるか、またはインサーキットエミュレーション工程に進み得る。
【００８０】
同様に、工程１０５の決定が「いいえ（ＮＯ）」である場合、アルゴリズムがハードウエアクセラレーション決定工程１２０に進む。工程１２０にて、ユーザがモデリングされた回路設計のハードウエア部分を介してシミュレーションをアクセラレーションすることによってテスト／デバッグプロセスをアクセラレーションするか否かを決定する。工程１２０の決定が「はい」である場合、ハードウエアモデルアクセラレーションが工程１２５にて行われる。システムコンパイルプロセスの間、Ｓエミュレーションシステムがいくつかの部分をハードウエアモデルにマッピングした。ここで、ハードウエアクセラレーションが望まれる場合、システムがレジスタおよび組み合わせコンポーネントをハードウエアモデルに移動させ、入力値および評価値をハードウエアモデルに移動させる。したがって、ハードウエアクセラレーションの間、評価がアクセラレーションされた速度にて長期間ハードウエアモデルの中で行われる。カーネルは、ハードウエアモデルにテストベンチ出力を書き込み、ソフトウエアクロックを更新し、次いで、サイクル毎にハードウエアモデル出力を読み出す。ユーザによって所望される場合、ユーザの回路設計のソフトウエアモデル全体（回路設計全体）からの値は、レジスタ値および組み合わせコンポーネントを出力することにより、レジスタ値で組み合わせコンポーネントを再生成することにより、利用可能となり得る。これらの組み合わせコンポーネントを再生成するためのソフトウエアの介入（ｉｎｔｅｒｖｅｎｔｉｏｎ）の必要性のために、ソフトウエアモデル全体の値の出力が１サイクル毎に提供されない；むしろ、ユーザがこのような値を望む場合のみにこのような値がユーザに提供される。この明細書は組み合わせコンポーネントの再生成プロセスを以下で説明する。
【００８１】
再び、ユーザが工程１１５によって示されたような任意の時間にハードウエアクセラレーションモードを停止することができない。ユーザが停止することを望む場合、アルゴリズムが工程１１５および１６０に進み、停止／値検査ルーチンに分岐する。ここで、工程１１５内のように、ユーザは、任意の時間に、ハードウエアクセラレーションシミュレーションプロセスを停止し、シミュレーションプロセスから生じる値を検査できるか、またはユーザがハードウエアクセラレーションシミュレーションプロセスを続けることができる。停止／値検査ルートは、シミュレーションを停止するという関連で上述された工程１６０、１６５、１７０および１７５に分岐する。工程１２５の後のメインルートに戻ると、ユーザが工程１３５でハードウエアクセラレーションシミュレーションを続けることを決定し得るか、代わりに純粋のシミュレーション（ｐｕｒｅ  ｓｉｍｕｌａｔｉｏｎ）を実行することを決定し得る。ユーザがさらにシミュレーションを実行することを望む場合、アルゴリズムが工程１０５に進む。ユーザがさらにシミュレーションを実行することを望まない場合、アルゴリズムが工程１４０にてポストシミュレーション解析に進む。
【００８２】
工程１４０にて、Ｓエミュレーションシステムが多数のポストシミュレーション解析特性を提供する。システムがハードウエアモデルに全ての入力をログする。ハードウエアモデル出力について、システムがユーザ定義ロギング頻度（例えば、１／１０，０００レコード／サイクル）でハードウエアレジスタコンポーネントの全ての値をログする。ロギング頻度は、出力値が何回記録されるかを決定する。１／１０，０００レコード／サイクルのロギング頻度について、出力値が１０，０００サイクルに１回記録される。ロギング頻度が高くなればなるほど、後のポストシミュレーション解析のために多数の情報が記録される。選択されたロギング頻度がＳエミュレーション速度と因果関係を有するので、ユーザがロギング頻度を注意して選択する。システムはさらなるシミュレーションが実行され得る前にメモリへのＩ／Ｏ動作を実行することによって出力データを記録するために時間およびリソースを費やさなければならないので、より高いロギング頻度はＳエミュレーション速度を減少する。
【００８３】
ポストシミュレーション解析について、ユーザがシミュレーションが望まれる特定のポイントを選択する。次いで、ユーザは、値の変化および全てのハードウエアコンポーネントの内部状態を計算するためにハードウエアモデルへの入力記録を伴って、ソフトウエアシミュレーションを走行させることによって、Ｓエミュレーション後に解析を実行できる。ハードウエアクセレータは、シミュレーション結果を解析するために選択されたロギングポイントからデータのシミュレーションを実行するように用いられることに留意する。このポストシミュレーション解析方法がポストシミュレーション用の任意のシミュレーション波形ビューワにリンクできる。以下にさらに詳細な説明される。
【００８４】
工程１４５にて、ユーザは、そのターゲットシステム環境内でシミュレーションをされた回路設計のエミュレーションを実行するように選択できる。工程１４５の決定が「いいえ」である場合、アルゴリズムが終了し、Ｓエミュレーションプロセスが工程１５５にて終了する。ターゲットシステムのエミュレーションが望まれる場合、アルゴリズムが工程１５０に進む。この工程はエミュレーションインターフェースボードを駆動し、ケーブルおよびチップピンアダプタをターゲットシステムにプラグし、ターゲットシステムからシステムＩ／Ｏを入手するためにターゲットシステムを走行させることを含む。ターゲットシステムからのシステムＩ／Ｏは、ターゲットシステムと回路設計のエミュレーションとの間の信号を含む。エミュレーションされた回路設計は、ターゲットシステムから入力信号を受信し、この入力信号を処理し、さらなる処理のためにこの入力信号をＳエミュレーションシステムに送信し、恐らく処理された信号をターゲットシステムに出力する。逆に、エミュレーションされた回路設計は、出力信号をターゲットシステム（出力信号を処理し、処理された信号を出力してエミュレーションをされた回路設計に戻す）に送信する。このように、回路設計の性能は、本来のターゲットシステム環境にて評価され得る。ターゲットシステムのエミュレーションをした後、ユーザが回路設計を確証するか、非機能局面を示すという結果を存する。このポイントにて、ユーザが工程１３５にて示されるように再びシミュレーション／エミュレーションを実行し、回路設計を変更するために完全に停止するか、確証された回路設計に基づいて集積回路製造に進み得る。
【００８５】
ＩＩＩ．シミュレーション／ハードウエアクセラレーションモード
本発明の１実施形態に従ってコンパイル時間帯と走行時間帯におけるソフトウエアコンパイルおよびハードウエア構成の高級レベルブロック図（ｈｉｇｈ  ｌｅｖｅｌ  ｄｉａｇｒａｍ）が図３に示される。図３は、情報の２つのセットを示す。情報の一方のセットは、コンパイル時間とシミュレーション／エミュレーション走行時間との間に実行される動作を区別し、情報の他方のセットは、ソフトウエアモデルとハードウエアモデルとの間のパーティションを示す。手始めに、本発明の１実施形態によるＳエミュレーションシステムは、入力データ２００としてユーザ回路設計を必要とする。ユーザ回路設計はＨＤＬファイルのある形式で行われる（例えば、Ｖｅｒｉｌｏｇ、ＶＨＤＬ）。Ｓエミュレーションシステムは、ＨＤＬファイルを構文解析するので、挙動レベルコード、レジスタ転送レベルコードおよびゲートレベルコードは、Ｓエミュレーションシステムによって使用可能な形態に帰着され得る。システムがフロントエンド処理工程２０５に開けてソース設計データベースを生成する。ここにおいて処理されたＨＤＬファイルがＳエミュレーションシステムによって使用可能である。構文解析プロセスは、ＡＳＣＩＩデータを内部バイナリデータ構造に変換し、このことは当業者に公知である。本明細書中で援用されるＡＬＦＲＥＤ  Ｖ．ＡＨＯ，ＲＡＶＩ  ＳＥＴＨＩ，ＡＮＤ  ＪＥＦＦＲＥＹ  Ｄ．ＵＬＬＭＡＮ，ＣＯＭＰＩＬＥＲＳ：ＰＲＩＮＣＩＰＬＥＳ，ＴＥＣＨＮＩＱＵＥＳ，ＡＮＤ  ＴＯＯＬＳ（１９８８）を参照する。
【００８６】
コンパイル時間がプロセス２２５によって表され、走行時間がプロセス／要素２３０によって表される。プロセス２２５によって示されるようなコンパイル時間の間に、Ｓエミュレーションシステムは処理されたＨＤＬファイルをコンポーネントタイプ解析を実行することによってコンパイルする。コンポーネントタイプ解析は、ＨＤＬコンポーネントを組み合わせコンポーネント、レジスタコンポーネント、クロックコンポーネント、メモリコンポーネントおよびテストベンチコンポーネントに分類する。本質的に、システムはユーザ回路設計を制御および評価コンポーネントにパーティションする。
【００８７】
Ｓエミュレーションコンパイラ２１０は、本質的に、シミュレーションの制御コンポーネントをソフトウエアにマッピングし、評価コンポーネントをソフトウエアおよびハードウエアにマッピングする。コンパイラ２１０がＨＤＬコンポーネント全てのためにソフトウエアモデルを生成する。ソフトウエアモデルがコード２１５にてキャストされる。さらに、Ｓエミュレーション２１０は、ＨＤＬファイルのコンポーネントタイプ情報を用い、ライブラリまたはモジュールジェネレータからハードウエア論理ブロック／要素を選択または生成し、所定のＨＤＬコンポーネントのためにハードウエアを生成する。最終的に生じるのは所謂「ビットストリーム（ｂｉｔ  ｓｔｒｅａｍ）」構成ファイル２２０である。
【００８８】
走行時間に備えて、コード形式のソフトウエアモデルは、本発明の１実施形態によるＳエミュレーションプログラムに関連したアプリケーションプログラムが格納されるメインメモリに格納される。このコードは汎用プロセッサまたはワークステーション２４０で処理される。実質的に現時点で、ハードウエアモデル用の構成ファイル２２０は、ユーザ回路設計を再構成ハードウエアボード２５０にマッピングするために用いられる。ここで、ハードウエア内でモデリングされてきた回路設計のこれらの部分は、再構成可能ハードウエアボード２５０のＦＰＧＡチップにマッピングされ、パーティションされる。
【００８９】
上述したように、ユーザテストベンチ刺激、テストベクトルデータおよび他のテストベンチリソース２３５は、シミュレーションの目的のために汎用プロセッサまたはワークステーション２４０に適用される。さらに、ユーザは、ソフトウエア制御によって回路設計のエミュレーションを実行し得る。再構成可能ハードウエアボード２５０は、ユーザのエミュレーションをされた回路設計を含む。このＳエミュレーションシステムはソフトウエアシミュレーションとハードウエアエミュレーションとの間に選択的にユーザがスイッチングできる機能と、シミュレーションまたはエミュレーションプロセスのいずれかを任意の時間にサイクル毎に停止させる機能とを有し、これにより、レジスタか組み合わせコンポーネントのいずれであれ、モデルの全てのコンポーネントからの値を検査する。したがって、Ｓエミュレーションシステムは、シミュレーションのためにテストベンチ２３５とプロセッサ／ワークステーション２４０との間、およびエミュレーションのためにデータバス２４５とプロセッサ／ワークステーションを経由してテストベンチ２３５と再構成可能ハードウエアボード２５０との間でデータを通過させる。ユーザターゲットシステム２６０が含まれる場合、エミュレーションデータが再構成可能ハードウエアボード２５０とターゲットシステムとの間にエミュレーションインターフェース２５５およびデータバス２４５を介して通過できる。カーネルは、プロセッサ／ワークステーション２４０のメモリのソフトウエアシミューションモデルの中に存在するので、データは、必要な場合、プロセッサ／ワークステーション２４０と再構成可能ハードウエア２５０との間でデータバス２３５を介して通過する。
【００９０】
図４は、本発明の１実施形態によってコンパイルプロセスのフローチャートを示す。コンパイルプロセスが図３のプロセス２０５および２１０として表される。図４のコンパイルプロセスは工程３００にて開始する。工程３０１は、フロントエンド情報を処理する。ここで、ゲートレベルＨＤＬコードが生成される。ユーザは、このコードを直接的にハンドライティングするか、コードのゲートレベルＨＤＬ表示を生成するために、ある形態のステマティックまたは合成ツールを用いることで、初期の回路設計をＨＤＬ形式に変換される。Ｓエミュレーションシステムは、バイナリフォーマットにＨＤＬファイル（ＡＳＣＩＩフォーマット）を構文解析するので、挙動レベルコード、レベル転送レベル（ＲＴＬ）コードおよびゲートレベルコードは、Ｓエミュレーションシステムによって使用可能な内部データ構造形式に帰着され得る。システムは、構文解析されたＨＤＬコードを含むソース設計データベースを生成する。
【００９１】
工程３０２は、タイプリソース３０３に示されるように、組み合わせコンポーネント、レジスタコンポーネント、クロックコンポーネント、メモリコンポーネントおよびテストベンチコンポーネントにＨＤＬコンポーネントコンポーネントを分類することによってコンポーネントタイプ解析を実行する。Ｓエミュレーションシステムは、レジスタおよび組み合わせコンポーネント用にハードウエアモデルを生成する（いくつかの例外は以下で述べられる）。テストベンチおよびメモリコンポーネントがソフトウエアにマッピングされる。クロックコンポーネント（例えば、派生されたクロック（ｄｅｒｉｖｅｄ  ｃｌｏｃｋ））がハードウエアにモデリングされるものもあり、ソフトウエア／ハードウエア境界（例えば、ソフトウエアクロック）に常駐するものもある。
【００９２】
組み合わせコンポーネントは、この出力値が現在の入力値の関数であり、入力値の履歴に依存しない。状態に無関係な（ｓｔａｔｅｌｅｓｓ）論理コンポーネントであり、組み合わせコンポーネントの例は、プリミティブゲート（例えば、ＡＮＤ、ＯＲ、ＸＯＲ、ＮＯＴ）、セレクタ、加算器、乗算器、シフタ（ｓｈｉｆｔｅｒ）およびバスドライバを含む。
【００９３】
レジスタコンポーネントは、単一の格納コンポーネントである。レジスタの状態遷移はクロック信号によって制御される。エッジが検出される場合に状態を変化させ得るレジスタの１形式はエッジトリガ型である（ｅｄｇｅ−ｔｒｉｇｇｅｒｅｄ）。例はフリップフロップ（Ｄタイプ、ＪＫタイプ）およびレベル検知ラッチ（ｌｅｖｅｌ−ｓｅｎｓｉｔｉｖｅ  ｌａｔｃｈ）を含む。
【００９４】
クロックコンポーネントは、周期的な信号を論理デバイスに送達し、これにより論理デバイスの挙動を制御するコンポーネントである。通常、クロック信号はレジスタの更新を制御する。一次クロックは、セルフタイミングテストベンチプロセス（ｓｅｌｆ−ｔｉｍｅｄ  ｔｅｓｔ−ｂｅｎｃｈ  ｐｒｏｃｅｓｓ）から生成される。例えば、Ｖｅｒｉｌｏｇにおけるクロック生成用の通常のテストベンチプロセスは以下の通りである：
ａｌｗａｙｓ  ｂｅｇｉｎ
Ｃｌｏｃｋ＝０；
＃５；
Ｃｌｏｃｋ＝１；
＃５；
ｅｎｄ；
このコードによると、クロック信号は最初に論理「０」である。５タイム単位（５ｔｉｍｅ  ｕｎｉｔｓ）後、クロック信号が論理「１」に変化する。５タイム単位後、クロック信号が論理「０」に反転して戻る。通常、一次クロック信号がソフトウエアにて生成され、わずかな（すなわち、１−１０）一次クロックは通常のユーザ回路設計に存在する。派生またはゲートされたクロックは、順番に一次クロックによって駆動される組み合わせ論理およびレジスタのネットワークから生成される。多数の（すなわち、１，０００以上）派生されたクロックが通常のユーザ回路設計に存在する。
【００９５】
メモリコンポーネントは、特定のメモリ位置の個々のデータにアクセスするためのアドレスおよび制御ラインを備えたブロック格納コンポーネントである。例はＲＯＭ、非同期化ＲＡＭおよび同期化ＲＡＭを含む。
【００９６】
テストベンチコンポーネントは、シミュレーションプロセスを制御し、モニタリングするために用いられるソフトウエアプロセスである。したがって、これらのコンポーネントは、テストの下では、ハードウエア回路設計の一部ではない。テストベンチコンポーネントは、クロック信号を生成し、シミュレーションデータを初期化し、ディスク／メモリからシミュレーションテストベクトルパターンを読み出すことによってシミュレーションを制御する。テストベンチコンポーネントはまた、値の変化をチェックし、値変化ダンプを実行し、信号値関係（ｓｉｇｎａｌ  ｖａｌｕｅ  ｒｅｌａｔｉｏｎ）のアサートされた制限をチェックし、ディスク／メモリに出力テストベクトルを書き込み、種々の波形ビューワおよびデバッガとインターフェースをとることによってシミュレーションをモニタリングする。
【００９７】
Ｓエミュレーションシステムは、以下のようにコンポーネントタイプ解析を実行する。このシステムは、バイナリソース設計データベースを試験する。ソース設計データベースに基づいて、このシステムが上記のコンポーネントタイプの１つとして要素を特徴づけるか、分類し得る。連続的な割り当てステートメントが組み合わせコンポーネントとして分類される。プリミティブゲートは、言語定義（ｌａｎｇｕａｇｅ  ｄｅｆｉｎｉｔｉｏｎ）によるレジスタタイプの組み合わせタイプまたはラッチ形式のいずれかである。初期化コードがテストベンチの初期化タイプとして扱われる。
【００９８】
ネット（ｎｅｔ）を用いることなく、ネットを駆動させるプロセスは、常に、テストベンチのドライバタイプである。ネット（ｎｅｔ）を用いることなく、ネットを読み出すプロセスは、常に、テストベンチのモニタタイプである。遅延制御または複数のイベントに関連するプロセスは、常に、テストベンチの汎用タイプである。
【００９９】
単一イベント制御および単一ネットの駆動に関する常時のプロセスは、以下の内の１つであり得る：（１）イベント制御がエッジトリガされたイベントである場合、したがってプロセスはエッジトリガされたタイプのレジスタコンポーネントである。（２）プロセスにおいて駆動されるネットが全ての可能な実行経路の中で定義されない場合、したがってネットはラッチタイプのレジスタである。（３）プロセスにおいて駆動されるネットが全ての可能な実行経路で定義される場合、したがってネットは組み合わせコンポーネントである。
【０１００】
単一イベント制御であるが多数ネットの駆動に関する常時のプロセスは、個々のコンポーネントタイプを個別に駆動させるために個別に各ネットを駆動させるいくつかのプロセスに分解され得る。次いで、分解されたプロセスは、コンポーネントタイプを決定するために用いられ得る。
【０１０１】
工程３０４は、コンポーネントタイプに関わらず、すべてのＨＤＬコンポーネントに対してのソフトウエアモデルを生成する。適切なユーザ駆動インターフェースによって、ユーザは、完全なソフトウエアモデルを用いて回路設計全体のシミュレーションをできる。テストベンチプロセスは、刺激入力を駆動させ、ベクトルパターンをテストし、シミュレーション全体を制御し、シミュレーションプロセスをモニタリングするために用いられる。
【０１０２】
工程３０５は、クロック解析を実行する。クロック解析が２つの一般的な工程を包含する。（１）クロック抽出および逐次的なマッピング、および（２）クロックネットワーク解析。クロック抽出および逐次的なマッピング工程は、ユーザのレジスタコンポーネントをＳエミュレーションシステムのハードウエアレジスタモデルにマッピングし、次いで、システムのハードウエアレジスタコンポーネントからクロック信号を抽出する。クロックネットワーク解析工程は、抽出されたクロック信号に基づいて一次クロックおよび派生されたクロックを決定することおよびゲートされたクロックネットワークおよびゲートデータネットワークを分離することを含む。さらに詳細な説明は図１６にて提供される。
【０１０３】
工程３０６は常駐（ｒｅｓｉｄｅｎｃｅ）選択を実行する。システムは、ユーザに関連して、ハードウエアモデルのためのコンポーネントを選択する。すなわち、ユーザの回路設計のハードウエアモデルにて実現され得る可能なハードウエアコンポーネントの一般的なものであり、いくつかのハードウエアコンポーネントは種々の理由からハードウエアにてモデリングされない。これらの理由は、コンポーネントタイプ、ハードウエアリソース制限（すなわち、浮動点動作および大規模乗算動作がソフトウエアに存在している）、シミュレーションおよび通信オーバーヘッド（すなわち、テストベンチプロセス間の小さいブリッジ論理がソフトウエアに存在しており、テストベンチプロセスによってモニタリングされる信号がソフトウエアに存在している）およびユーザの嗜好を含む。性能およびシミュレーションモニタリングを含む種々の理由から、ユーザは、さもなければ、ハードウエアにてモデリングされる所定のコンポーネントをソフトウエアに存在するように課すことができる。
【０１０４】
工程３０７は、再構成可能ハードウエアエミュレーションボードに選択されたハードウエアモデルをマッピングする。特に、工程３０７は、ネットリストを取り出してマッピングし、回路設計を特定のＦＰＧＡチップにマッピングする。この工程は、論理素子を共にグループ分けまたはクラスタリングを行うことを包含する。次いで、システムは、唯一的なＦＰＧＡチップに各グループを割り当てるか、いくつかのグループを単一のＦＰＧＡチップに割り当てる。システムはまた、異なるＦＰＧＡチップにグループを割り当て得る。一般に、システムは、ＦＰＧＡチップにグループを割り当てる。さらに詳細な説明が図６に関して下記に提供される。システムは、内部チップ通信オーバーヘッドを最小化するためにハードウエアモデルコンポーネントをＦＰＧＡチップのメッシュに配置する。１実施形態において、アレイは、ＦＰＧＡの４×４アレイ、ＰＣＩインターフェースユニットおよびソフトウエアクロック制御ユニットを含む。ＦＰＧＡのアレイは、このソフトウエアコンパイルプロセスの工程３０２−３０６にて以上で決定したようにユーザのハードウエア回路設計の一部を実現する。ＰＣＩインターフェースユニットは、再構成可能ハードウエアエミュレーションモデルがＰＣＩバスを介してワークステーションと通信することを可能にする。ソフトウエアクロックは、ＦＰＧＡのアレイに対する種々のクロック信号の競合条件を避ける。さらに、工程３０７は、ハードウエアモデル間の通信スケジュールによってＦＰＧＡチップにルーティングを行う。
【０１０５】
ステップ３０８は制御回路を挿入する。これらの制御回路は、ＤＭＡエンジンと通信するための、シミュレータへのＩ／Ｏ回路アドレスポインタおよびデータバス論理（図１１、図１２、および図１４を参照して以下で説明される）、ならびに、ハードウエア状態遷移およびワイヤマルチプレクシングを制御するための評価制御論理（図１９および図２０を参照して以下に説明される）を含む。当業者に公知のように、ダイレクトメモリアクセス（ＤＭＡ）ユニットは、周辺機器とメインメモリとの間のさらなるデータチャンネルを提供し、この周辺機器は、ＣＰＵを介することなくメインメモリに直接アクセス（すなわち、読み出し、書き込み）し得る。各ＦＰＧＡチップにおけるアドレスポインタは、バスのサイズ制限を考慮して、ソフトウエアモデルとハードウエアモデルとの間でデータを移動させることを可能にする。評価制御論理は、実質的には、クロックおよびデータ入力がこれらのレジスタに入力する前に、アサートされるべきレジスタにクロックイネーブルが入力することを確実にする有限状態機械である。
【０１０６】
ステップ３０９は、ハードウエアモデルをＦＰＧＡチップにマッピングするための構成ファイルを生成する。本質的には、ステップ３０９は、回路設計コンポーネントを各チップにおける特定のセルまたはゲートレベルコンポーネントに割り当てる。ステップ３０７が、ハードウエアモデル群を特定のＦＰＧＡチップにマッピングすることを決定するが、ステップ３０９は、このマッピング結果を獲得し、各ＦＰＧＡチップに対する構成ファイルを生成する。
【０１０７】
ステップ３１０は、ソフトウエアカーネルコードを生成する。このカーネルは、全体のＳエミュレーション（ＳＥｍｕｌａｔｉｏｎ）システムを制御するソフトウエアコードのシーケンスである。このカーネルは、コードの部分がハードウエアコンポーネントを更新かつ評価することを要求するため、このポイントまで生成され得ない。ステップ３０９の後のみ、ハードウエアモデルへの適切なマッピングおよび発生したＦＰＧＡチップが生成する。より詳細な議論が図５を参照して以下に提供される。コンパイルは、ステップ３１１で終了する。
【０１０８】
図４を参照して上述されたように、ソフトウエアカーネルコードは、ソフトウエアモデルおよびハードウエアモデルが決定された後でステップ３１０において生成される。このカーネルは、全体のシステムの動作を制御するＳエミュレーションシステムにおけるソフトウエアの一部である。このカーネルはソフトウエアシミュレーションの実行およびハードウエアエミュレショーンの実行を制御する。さらに、カーネルはハードウエアモデルの中心に常駐するために、シミュレータはエミュレータと統合される。他の公知のコ−シミュレーションシステムとは対照的に、本発明の一実施形態によるシミュレーションシステムは、外部からエミュレータとインタラクトするシミュレータを要求しない。カーネルの一実施形態は、図５に示される制御ループである。
【０１０９】
図５を参照すると、カーネルはステップ３３０で開始する。ステップ３３１は、初期化コードを評価する。ステップ３３２で開始し、決定ステップ３３９によってとぶ（ｂｏｕｎｄ）ことによって、制御ループが開始し、システムがアクティブテストベンチプロセスを観察しなくなるまで制御ループが繰り返し循環する。この場合、シミュレーションまたはエミュレーションセッションが完成される。ステップ３３２は、シミュレーションまたはエミュレーションのためのアクティブテストベンチコンポーネントを評価する。
【０１１０】
ステップ３３３は、クロックコンポーネントを評価する。これらのクロックコンポーネントは、テストベンチプロセスから生じる。通常、ユーザは、どのタイプのクロック信号がシミュレーションシステムに生成されるかを命令する。１つの例（コンポーネントタイプ解析に関して上述され、そこで再生された例）では、テストベンチプロセスにおいてユーザによって設計されたクロックコンポーネントは、以下のようになる。
【０１１１】
ａｌｗａｙｓ  ｂｅｇｉｎ
Ｃｌｏｃｋ＝０；
＃５；
Ｃｌｏｃｋ＝１；
＃５；
ｅｎｄ；
このクロックコンポーネントの例において、ユーザは、論理「０」信号が最初に生成され、そして次に、５シミュレーション時間の後、論理「１」信号が生成されることを判定する。このクロック生成プロセスは、ユーザによって停止されるまで連続的に循環する。このシミュレーション時間は、カーネルによって進められる。
【０１１２】
決定ステップ３３４は、任意のアクティブクロックエッジが検出されるかどうかを問い合わせ、このステップは、ソフトウエアモデルおよび可能なハードウエアモデルにおいていくつかの種類の論理評価を生じさせる（エミュレーションが実行された場合）。アクティブクロックエッジを検出するためにカーネルが使用するクロック信号は、テストベンチプロセスからのクロック信号である。決定ステップ３３４が「いいえ」と評価する場合、カーネルはステップ３３７に進む。決定ステップ３３４が「はい」と評価する場合、その結果、レジスタおよびメモリを更新するステップ３３５に進み、組み合わせコンポーネントを伝達するステップ３３６に進む。クロック信号がアサートされた後、ステップ３３６は、実質的に、組み合わせ論理ネットワークを介して値を伝達するためのある時間を必要とする組み合わせ論理に注意する。一旦、値が組み合わせコンポーネントを介して伝達され、そして安定されると、カーネルはステップ３３７に進む。
【０１１３】
レジスタおよび組み合わせコンポーネントがハードウエアにおいてさらにモデル化され、それにより、カーネルは、Ｓエミュレーションシステムのエミュレータ部分を制御することに留意されたい。実際には、任意のアクティブクロックエッジが検出されたときはいつでも、カーネルは、ステップ３３４および３３５においてハードウエアモデルの評価を加速し得る。従って、従来技術とは異なり、本発明の一実施形態によるＳエミュレーションシステムは、ソフトウエアカーネルを介して、そしてコンポーネントタイプ（例えば、レジスタ、組み合わせ）に基づいてハードウエアエミュレータを加速し得る。さらに、カーネルは、サイクルごとのソフトウエアモデルおよびハードウエアモデルの実行を制御する。本質的には、エミュレータハードウエアモデルは、シミュレーションカーネルを実行する、汎用プロセッサに対するシミュレーションコプロセッサとして特徴付けられ得る。このコプロッセッサは、シミュレーションタスクをスピードアップする。
【０１１４】
ステップ３３７は、アクティブベンチコンポーネントを評価する。ステップ３３８は、シミュレーション時間だけ進める。ステップ３３９は、ステップ３３２で開始する制御ループのための境界（ｂｏｕｎｄａｒｙ）を提供する。ステップ３３９は、任意のテストベンチプロセスがアクティブであるかどうかを決定する。任意のテストベンチプロセスがアクティブである場合、シミュレーションおよび／またはエミュレーションがさらに実行され、より多くのデータが評価されるべきである。従って、カーネルは、ステップ３３２までループして、任意のアクティブテストベンチコンポーネントを評価する。テストベンチプロセスがアクティブでない場合、その時、シミュレーションおよびエミュレーションプロセスが完了される。ステップ３４０は、シミュレーション／エミュレーションプロセスを終了する。要するに、カーネルは、全Ｓエミュレーションシステムの動作を制御するメイン制御ループである。任意のテストベンチプロセスがアクティブである限り、カーネルはアクティブテストベンチコンポーネントを評価し、クロックコンポーネントを評価し、レジスタおよびメモリを更新するクロックエッジを検出し、ならびに組み合わせ論理データを伝達し、シミュレーション時間だけ進める。
【０１１５】
図６は、ハードウエアモデルの再構成可能な基板（ｂｏａｒｄ）への自動的マッピングのための方法の一実施形態を示す。ネットリストファイルは、ハードウエア実現プロセスへの入力を提供する。このネットリストは論理機能およびその相互接続を説明する。ハードウエアモデル／ＦＰＧＡ実現プロセスは３つの独立したタスク（マッピング、配置、およびルーティング）を含む。一般的にこのツールは、「配置およびルーティング」ツールと呼ばれる。使用される設計ツールは、Ｖｉｅｗｌｏｇｉｃ  Ｖｉｅｗｄｒａｗ、スキマティックキャプチャシステム、Ｘｉｌｉｎｘ  Ｘａｃｔ配置およびルーティングソフトウエア、あるいは、Ａｌｔｅｒａ  ＭＡＸ＋ＰＬＵＳ  ＩＩシステムであり得る。
【０１１６】
マッピングタスクは回路設計を論理ブロック、Ｉ／Ｏブロック、および他のＦＰＧＡリソースに分割する。フリップフロップおよびバッファのようないくつかの論理機能が対応するＦＰＧＡリソースに直接にマッピングされ得るが、組み合わせ論理等の他の論理機能は、マッピングアルゴリズムを用いて論理ブロックにおいて実現されなければならない。通常、ユーザは、最適な密度または最適な性能のためにマッピングを選択し得る。
【０１１７】
配置タスクは、マッピングタスクから論理ブロックおよびＩ／Ｏブロックを取り出すことと、および論理ブロックおよびＩ／ＯブロックをＦＰＧＡアレイ内部の物理領域に割り当てることを含む。現在のＦＰＧＡツールは通常、３つの技術（最小カット（ｍｉｎｃｕｔ）、シミュレートアニーリング、および汎用フォースダイレクティッド緩和（ｇｅｎｅｒａｌ  ｆｏｒｃｅ−ｄｉｒｅｃｔｅｄ  ｒｅｌａｘａｔｉｏｎ：ＧＦＤＲ））のいくつかの組み合わせを使用する。実質的に、これらの技術は、他の変数間において、相互接続の全ネット長または臨界信号経路のセットに沿う遅延に依存する種々のコスト関数に基づいて最適な配置を決定する。Ｘｉｌｉｎｘ  ＸＣ４０００シリーズのＦＰＧＡツールは、最初の配置に対する最小カット技術配置の後に続く配置の緻密な改良のためのＧＦＤＲ技術の改変体を使用する。
【０１１８】
このルーティングタスクは、種々のマッピングされたブロックおよび配置されたブロックを相互接続するために使用されたルーティング経路を決定することを含む。１つのこのようなルータ（迷路（ｍａｚｅ）ルータと呼ばれる）は、２点間の最短の経路を探し出す。ルーティングタスクは、チップ間の直接的な相互接続を提供するため、チップに関する回路の配置は重要である。
【０１１９】
初めにおいて、ハードウエアモデルは、ゲートネットリスト３５０またはＲＴＬ３５７のいずれかにおいて説明され得る。ＲＴＬレベルコードは、ゲートレベルネットリストにさらに合成され得る。マッピングプロセスの間、合成器サーバ３６０（Ａｌｔｅｒａ  ＭＡＸ＋ＰＬＵＳ  ＩＩプログラム可能な論理開発ツールシステムおよびソフトウエア等）を使用して、マッピング目的のための出力ファイルを生成し得る。合成器サーバ３６０は、ユーザの回路設計コンポーネントとライブラリ３６１において見出された任意の標準的な既存の論理素子（例えば、標準的な加算器または標準的な乗算器）とを一致させ、任意のパラメータ化されかつ頻繁に使用された論理モジュール３６２（例えば、標準的ではないマルチプレクサまたは標準的ではない加算器）を生成し、そして、ランダム論理素子３６３（例えば、カスタマイズされた論理機能を実現するルックアップテーブルに基づく論理）を合成する能力を有する。さらに合成器サーバは、冗長論理および使用されていない論理を取り除く。実質的に出力ファイルは、ユーザの回路設計によって必要とされた論理を合成または最適化する。
【０１２０】
ＨＤＬのいくつかまたは全てがＲＴＬレベルである場合、回路設計コンポーネントは、Ｓエミュレーションシステムが、Ｓエミュレーションレジスタまたはコンポーネントを用いてこれらのコンポーネントを容易にモデル化し得るような高い十分なレベルにおいて存在する。ＨＤＬのいくつかまたは全てがゲートネットリストレベルにおいて存在する場合、回路設計コンポーネントは、より回路設計特有になり得、ユーザ回路設計コンポーネントのＳエミュレーションコンポーネントへのマッピングをより困難にする。従って、シンセサイザサーバは、標準的な論理素子またはランダム論理素子の改変体に基づいて任意の論理素子を生成することを可能にする。標準的な論理素子またはランダム論理素子の改変体は、これらの改変体またはライブラリ標準論理素子において任意の並列性（ｐａｒａｌｌｅｌ）を有し得ない。
【０１２１】
回路設計がゲートネットリスト形態である場合、Ｓエミュレーションシステムは、グループ化またはクラスタリング動作３５１を最初に実行する。ハードウエアモデル構成は、クラスタリングプロセスに基づく。なぜなら、組み合わせ論理およびレジスタがクロックから分離されるためである。従って、共通の一次クロックまたはゲートクロック信号を共有する論理素子は、この素子を互いにグループ化し、チップ上に共に配置することによってより良好に提供され得る。クラスタリングアルゴリズムは、接続性駆動（ｃｏｎｎｅｃｔｉｖｉｔｙ  ｄｒｉｖｅｎ）、階層的な抽出、および規則構造抽出に基づく。この記述が構造化されたＲＴＬ３５８において存在する場合、Ｓエミュレーションシステムは、論理機能分解動作３５９によって提示されるように、機能をより小さなユニットに分解し得る。任意の段において、論理合成または論理最適化が必要とされる場合、合成器サーバ３６０は、回路設計を、ユーザの命令の基づくより効率的な表示を変換することに利用可能である。クラスタリング動作３５１に対して、合成器サーバに対するリンクは、点線矢印３６４によって示される、構造化されたＲＴＬ３５８について、合成器サーバ３６０へのリンクは、矢印３６５によって示される。論理機能分解動作３５９に対して、合成器サーバ３６０へのリンクが矢印３６６によって示される。
【０１２２】
クラスタリング動作３５１は、機能およびサイズに基づいて選択された態様で論理コンポーネントを共にグループ化する。このクラスタリングは、小さい回路設計に対して１つのみのクラスタまたは大きな回路設計に対していくつかのクラスタを含み得る。にもかかわらず、以後のステップにおいて、論理素子のクラスタが使用されて、このクラスタを設計されたＦＰＧＡチップにマッピングする。すなわち、あるクラスタが特定のチップに照準を定め、別のクラスタは、異なるチップ、または恐らく第１のクラスタと同一のチップに照準を定める。通常、クラスタ内の論理素子は、チップにおけるクラスタと共に存在するが、最適化目的のために、クラスタは１つ以上のチップに分割される必要があり得る。
【０１２３】
クラスタはクラスタリング動作３５１において形成された後、システムは配置およびルーティング動作を実行する。最初に、クラスタのＦＰＧＡチップへの粗いグレイン配置動作３５２が実行される。最初に、粗いグレイン利得配置動作３５２は、論理素子のクラスタを選択されたＦＰＧＡチップに配置する。必要ならば、矢印３６７に示されるように、システムは合成器サーバ３６０を粗いグレイン配置動作３５２に対して利用可能にする。粗い利得配置動作の後に、緻密なグレイン配置動作が実行され、最初の配置を精密に調整する。Ｓエミュレーションシステムは、ピン利用条件、ゲート利用条件、およびゲート間ホップに基づくコスト関数を使用して、粗いグレイン配置動作および緻密なグレイン配置動作の両方に対する最適な配置を決定する。
【０１２４】
クラスタが所定のチップにどのように配置されるのかを決定することは、配置コストに基づき、この配置コストは、コスト関数ｆ（Ｐ，Ｇ，Ｄ）によって、２つ以上の回路（すなわち、ＣＫＴＱ＝ＣＫＴ１，ＣＫＴ２，．．．，ＣＫＴＮ）およびＦＰＧＡチップのアレイの各位置に対して計算される。ここで、Ｐは、一般的にピンの使用／使用可能性であり、Ｇは、一般的にゲートの使用／使用可能性であり、Ｄは、接続性マトリクスＭ（図８と共に図７に示される）によって規定されるように、ゲート間「ホップ」の距離または数である。ハードウエアモデルにおいてモデル化されたユーザの回路設計は、回路ＣＫＴＱの全組み合わせを含む。各コスト関数は、計算された配置コストの計算された値が、一般的に生成される傾向にあるように定義される。すなわち、（１）ＦＰＧＡアレイにおける任意の２つの回路ＣＫＴＮ−１とＣＫＴＮとの間の「ホップ」の最小数、および（２）ピン使用が最小化されるようなＦＰＧＡアレイにおける回路ＣＫＴＮ−１およびＣＫＴＮの配置である。
【０１２５】
一実施形態では、コスト関数Ｆ（Ｐ，Ｇ，Ｄ）は、以下のように定義される。
【０１２６】
【数１】
2005500625.tif 000003
【０１２７】
この式は、以下の式で簡略化され得る。
【０１２８】
ｆ（Ｐ，Ｇ，Ｄ）＝Ｃ０＊Ｐ＋Ｃ１＊Ｇ＋Ｃ２＊Ｄ
第１の項（すなわち、Ｃ０＊Ｐ）は使用されたピンの数および利用可能なピンの数に基づいて第１の配置コストを生成する。第２の項（すなわち、Ｃ１＊Ｇ）は、使用されたゲートの数および利用可能なゲートの数に基づく第２の配置コストを生成する。第３の項（すなわち、Ｃ２＊Ｄ）は、回路ＣＫＴＱ（すなわち、ＣＫＴ１、ＣＫＴ２、．．．、ＣＫＴＮ）において、種々の相互接続間に存在するホップの数に基づいて配置コスト値を生成する。全配置コスト値は、反復的にこれら３つの配置コスト値を加算することによって生成される。定数Ｃ０、Ｃ１、およびＣ２は、任意の反復配置コスト計算が行われる間、最も重要である１つ以上のファクタ（すなわち、ピン使用、ゲート使用、またはゲート間ホップ）に対するこのコスト関数から生成された全配置コスト値を選択的に非対称にする（ｓｋｅｗ）重み付き定数を表す。
【０１２９】
システムが重み付き定数Ｃ０、Ｃ１、およびＣ２に対して異なる相対値を選択する場合、配置コストが繰り返して計算される。従って、一実施形態では、粗いグレイン配置動作の間、システムは、Ｃ２に対してＣ０およびＣ１により大きな値を選択する。この反復では、システムは、ＦＰＧＡチップのアレイにおいて、ピン使用／利用可能性およびゲート使用／利用可能性の最適化は、回路ＣＫＴＱの最初の配置においてゲート間ホップを最適化するよりもより重要である事を決定する。以後の反復では、システムは、Ｃ２に対するＣ０およびＣ１に対する小さい値を選択する。この反復では、システムは、ゲート間ホップを最適化することは、ピン使用／利用可能性およびゲート使用／利用可能性を最適化することよりもより重要である。
【０１３０】
緻密なグレイン配置動作の間、システムは同じコスト関数を使用する。一実施形態では、Ｃ０、Ｃ１、およびＣ２の選択に関する反復すステップは、粗いグレイン動作と同じである。別の実施形態では、緻密なグレイン配置動作は、Ｃ２に対するＣ０およびＣ１に対する小さい値をシステムに選択させることを含む。
【０１３１】
ここで、これらの変数および式の説明が行われる。ＦＰＧＡチップｘまたはＦＰＧＡチップｙ（他のＦＰＧＡチップの中の）における所定の回路ＣＫＴＱを配置するかどうかを決定する場合、コスト関数は、ピン使用／利用可能性（Ｐ）、ゲート使用／利用可能性Ｇ、およびゲート間ホップＤを検査する。コスト関数の変数Ｐ、Ｇ、およびＤに基づいて、コスト関数ｆ（Ｐ，Ｇ，Ｄ）は、ＦＰＧＡアレイの特定の位置に回路ＣＴＫＱを配置するための配置コスト値を生成する。
【０１３２】
ピン使用／利用可能性Ｐはまた、Ｉ／Ｏ容量を示す。Ｐｕｓｅｄは、各ＦＰＧＡチップの回路ＣＫＴＱによって使用されたピンの数である。Ｐａｖａｉｌａｂｌｅは、ＦＰＧＡチップにおける利用可能なピンの数である。一実施形態では、Ｐａｖａｉｌａｂｌｅは、２６４（４４ピン×６相互接続／チップ）であるが、別の実施形態では、Ｐａｖａｉｌａｂｌｅは、２６５（４４ピン×６相互接続／チップ＋１余分のピン）である。しかし、特定の数の利用可能なピンは、使用されたＦＰＧＡチップのタイプ、チップあたり使用された相互接続の全体の数、および各相互接続に対して使用されたピンの数に依存する。従って、Ｐａｖａｉｌａｂｌｅはかなり変動され得る。そのため、コスト関数Ｆ（Ｐ，Ｇ，Ｄ）の式の第１の項（すなわち、Ｃ０＊Ｐ）を評価するために、各ＦＰＧＡチップに対して比Ｐｕｓｅｄ／Ｐａｖａｉｌａｂｌｅが計算される。従って、ＦＰＧＡチップの４×４アレイに対して、１６の比Ｐｕｓｅｄ／Ｐａｖａｉｌａｂｌｅが計算される。所与の利用可能な数のピンに対してピンの数が多く使用されればされるほど、その比が大きくなる、所与の利用可能な数のピンに対して使用される。１６の計算された比のうち、最も大きい数を生成する比が選択される。第１の配置コスト値が、選択された最大の比Ｐｕｓｅｄ／Ｐａｖａｉｌａｂｌｅと重み定数Ｃ０とを乗算することによって第１の項Ｃ０＊Ｐから計算される。この第１の項は、計算された比Ｐｕｓｅｄ／Ｐａｖａｉｌａｂｌｅおよび各ＦＰＧＡチップに対して計算された比の中で特定の最大の比に依存するため、配置コスト値は、全ての他のファクタが等しいとして、より高いピン使用に対してより大きくなる。システムは、最も低い配置コストを生成する配置を選択する。全ての他のファクタが等しいとして、種々の配置に対して計算された全ての最大値の中で最も小さい最大比Ｐｕｓｅｄ／Ｐａｖａｉｌａｂｌｅを生成する特定の配置がＦＰＧＡアレイの最適な配置として一般的に考慮される。
【０１３３】
ゲート使用／利用可能性Ｇは各ＦＰＧＡチップによって許されるゲートの数に基づく。一実施形態では、アレイ中の回路ＣＫＴＱの位置に基づいて、各チップにおいて使用されたゲートＧｕｓｅｄの数が所定の閾値よりも高い場合、この結果、この第２の配置コスト（Ｃ１＊Ｇ）は、配置が実現可能でないことを示す値を割り当てられる。同様に、回路ＣＫＴＱを含む各チップにおいて使用されたゲートの数が所定の閾値または所定の閾値よりも小さい場合、この結果、この第２の項（Ｃ１＊Ｇ）は、配置が実現可能であることを示す値に割り当てられる。従って、システムが特定のチップに回路ＣＫＴ１を配置することを望み、そのチップが回路ＣＫＴ１に収容させるのに十分なゲートを有しない場合、この結果システムは、この特定の配置が実現不可能であることをコスト関数によって結論し得る。一般的には、Ｇが大きい数（例えば、無限大）であることは、回路ＣＫＴＱの所望の配置が実現不可能であり、代替の配置が決定されるべきであることを示す高い配置コスト値を生成することを確実にする。
【０１３４】
別の実施形態では、アレイにおける回路ＣＫＴＱの位置に基づいて、比Ｇｕｓｅｄ／Ｇａｖａｉｌａｂｌｅが各チップに対して計算される。ただし、Ｇｕｓｅｄは、各ＦＰＧＡチップにおける回路ＣＫＴＱによって使用されたゲートの数であり、Ｇａｖａｉｌａｂｌｅは、各チップにおいて利用可能なゲートの数である。一実施形態では、システムは、ＦＰＧＡアレイに対してＦＬＥＸ  １０Ｋ１００チップを使用する。ＦＬＥＸ１０Ｋ１００チップは、約１００，０００ゲートを含む。従って、この実施形態では、Ｇａｖａｉｌａｂｌｅは、１００，０００ゲートに等しい。従って、ＦＰＧＡチップの４×４アレイに対して、１６の比Ｇｕｓｅｄ／Ｇａｖａｉｌａｂｌｅが計算される。所与の数の利用可能なゲートに対して使用されるゲートが多くなると、この比がより大きくなる。１６の計算された比の中で、最も大きい数を生成する比が選択される。第２の配置コスト値が、選択された最大比Ｇｕｓｅｄ／Ｇａｖａｉｌａｂｌｅと重み定数Ｃ１とを乗算することによって、第２の項Ｃ１＊Ｇから計算される。この第２項は、計算された比Ｇｕｓｅｄ／Ｇａｖａｉｌａｂｌｅおよび各ＦＰＧＡチップに対して計算された比の中で特定の最大比に依存するため、配置コスト値は、全ての他のファクタが等しくても、より高いゲート使用に対してより大きくなる。システムは、最も低い配置コストを生成する回路配置を選択する。種々の配置に対して計算された全最大値の中で最も小さい最大比Ｇｕｓｅｄ／Ｇａｖａｉｌａｂｌｅを生成する特定の配置は、一般的に、全ての他のファクタが等しくても、ＦＰＧＡアレイにおける最適な配置として考慮される。
【０１３５】
別の実施形態では、最初にＣ１に対してある値を選択する。比Ｇｕｓｅｄ／Ｇａｖａｉｌａｂｌｅが「１」より大きい場合、この特定の配置は実現不可能である（すなわち、少なくとも１つのチップが、回路のこの特定の配置に対して十分なゲートを有さない）。結果として、システムは、Ｃ１を非常に大きい数（例えば、無限大）を用いて変更し、従って、第２項Ｃ１＊Ｇは、また非常に大きい数であり、全配置コスト値ｆ（Ｐ，Ｇ，Ｄ）もまた、非常に大きい。他方では、比Ｇｕｓｅｄ／Ｇａｖａｉｌａｂｌｅが「１」以下である場合、この結果、この特定の配置は実現可能である（すなわち、各チップは、回路実現を支援するのに十分なゲートを有する）。結果として、システムはＣ１を変更せず、従って、第２の項Ｃ１＊Ｇは、特定の数となる。
【０１３６】
第３の項Ｃ２＊Ｄは、相互接続を必要とする全ゲートの間のホップの数を表す。さらにホップの数は、相互接続マトリクスに依存する。接続性マトリクスは、チップ間相互接続を必要とする任意の２つのゲート間の回路経路を決定するための基礎を提供する。全てのゲートがゲート間接続を必要とするとは限らない。ユーザの元の回路設計およびクラスタを所定のチップに分割することに基づいて、いくつかのゲートは任意の相互接続を少しも必要としない。なぜなら、１つ以上の論理回路素子が、それぞれの１つ以上の入力かつ１つ以上の出力に接続され、１つ以上の論理回路素子が同一のチップに配置される。しかし、他のゲートは相互接続を必要とする。なぜなら、１つ以上の論理素子が１つ以上の各入力かつ１つ以上の各出力に接続され、１つ以上の論理素子が異なるチップ内に配置される。
【０１３７】
「ホップ」を理解するために、図７においてテーブル形式で示され、図８において図解的に示される接続性マトリクスを参照する。チップＦ１１とチップＦ１４との間の相互接続６０２等のチップ間の各相互接続が、４４のピンまたは４４の配線で表される。他の実施形態では、各相互接続は４４よりも多くのピン示す。さらに他の実施形態では、各相互接続は４４ピン未満を示す。
【０１３８】
この相互接続スキームにおいて、２つの「ホップ」または「ジャンプ」によって、データはあるチップから別のチップまで通過し得る。従って、データは、相互接続６０１を介して、１つのホップにおいてチップＦ１１からチップＦ１２まで通過し得、データは、相互接続６００および６０６、あるいは相互接続６０３および６１０を介して２つのホップにおいてチップＦ１１からチップＦ３３まで通過し得る。これらの例示的なホップは、これらのセットのチップ間で最も短い経路のホップである。いくつかの例では、信号は、種々のチップを介して、一方のチップのゲートと他方のチップのゲート間のホップの数が最も短い経路のホップを超えるようにルーティングされ得る。ゲート間ホップの数を決定する際に検査されなければならない回路の経路のみが、相互接続に必要な回路の経路である。
【０１３９】
接続性が、内部チップ相互接続を必要とするゲート間の全てのホップの合計によって示される。任意の２つのチップ間の最も短い経路は、図７および図８の接続性マトリクスを用いて１または２の「ホップ」によって表され得る。しかし、所定のハードウエアモデル実現では、Ｉ／Ｏ容量が、アレイにおいて任意の２つのゲート間で直接の最も短い経路接続の数を限定し得、従って、これらの信号は、より長い経路（従って２よりも多いホップ）を通ってルーティングされ、目的箇所まで到達させなければならない。従って、ホップの数は、いくつかのゲート間接続に対して２を超え得る。一般的に、全てが等しいと、より少ない数のホップが、より少ない配置コストで生じる。
【０１４０】
第３の項（すなわち、Ｃ２＊Ｄ）は、以下の式のように再現される。
【０１４１】
【数２】
2005500625.tif 000004
【０１４２】
第３の項は、重み定数Ｃ２と加算コンポーネント（Ｓ．．．）との積である。加算コンポーネントは、実質的に、チップ間相互接続を要するユーザの回路設計における各ゲートｉとゲートｊとの間の全ホップの合計である。上述のように、全てのゲートが必ずしも内部チップ相互接続を必要とする訳ではない。内部チップ相互接続を必要とするこれらのゲートｉおよびゲートｊに対して、ホップの数が決定される。全てのゲートｉおよびｊに対して、ホップの全数が共に加算される。
【０１４３】
距離計算もまた以下の式のように定義され得る。
【０１４４】
【数３】
2005500625.tif 000005
【０１４５】
ここで、Ｍは接続性マトリクスである。接続性マトリクスの一実施形態は、図７に示される。この距離は、相互接続を要する各ゲート間接続に対して計算される。従って、各ゲートｉおよびゲートｊの比較に対して、接続性マトリクスＭが検査される。より詳細には、
【０１４６】
【数４】
2005500625.tif 000006
【０１４７】
各チップが識別可能に番号付けされるように、マトリクスがアレイの全てのチップに設定される。これらの識別番号は、カラムのヘッダーとしてマトリクスの頂上に設定される。同様に、これらの識別番号は、ロウのヘッダーとしてマトリクスの側面に沿って設定される。このマトリクスにおけるロウおよびカラムの交点における特定のエントリは、ロウによって識別されたチップとカラムによって識別されたチップとの間の直接的な接続データを提供し、この間で交差が生じる。チップｉとチップｊとの間の任意の距離計算について、マトリクスＭｉ，ｊにおけるエントリは、直接接続に対して「１」または直接でない接続に対して「０」のいずれか一方を含む。インデックスｋは、相互接続に必要である、チップｉにおける任意のゲートをチップｊにおける任意のゲートに相互接続する必要があるホップの数を示す。
【０１４８】
最初に、Ｋ＝１に対する接続性マトリクスＭｉ，ｊが検査されるべきである。エントリが「１」である場合、チップｉのこのゲートの、チップｊにおける選択されたゲートへの直接接続が存在する。従って、インデックスまたはホップｋ＝１は、Ｍｉ，ｊの結果として指定され、これは、これら２つのゲート間の距離を生じる。この点において、別のゲート間接続が検査され得る。しかし、エントリが「０」である場合、直接接続が存在しない。
【０１４９】
直接接続が存在しない場合、次のｋが検査されるべきである。新しいｋ（すなわち、ｋ＝２）は、マトリクスＭｉ，ｊと自身とを乗算するによって計算され得る。言い換えると、Ｍ２＝Ｍ＊Ｍ（ここで、ｋ＝２）である。
【０１５０】
チップｉおよびチップｊに対する特定のロウおよびカラムエントリまで、ＭとＭ自身とを乗算するプロセスが、計算された結果が「１」になるまで継続し、この点において、インデックスｋは、ホップの数として選択される。この演算は、論理積マトリクスＭ同士の論理積演算を行うこと、および、次いで、この論理積演算の結果を論理和演算ことを含む。マトリクスｍｉ，ｌとｍｌ，ｊとの間の論理積演算は、論理「１」値を生じた場合、その結果、接続が、ホップｋ内において、任意のチップ１を介して、チップｉにおいて選択されたゲートとチップｊにおいて選択されたゲートとの間に存在する。そうでない場合、接続がこの特定のホップｋ内に存在せず、さらなる計算が必要である。マトリクスｍｉ，ｌおよびｍｌ，ｊは、このハードウエアモデリングに対して定義されたように接続性マトリクスＭである。相互接続を必要とする任意の所与のゲートｉおよびゲートｊに対して、マトリクスｍｉ，ｌにおけるゲートｉに対するＦＰＧＡチップを含むロウは、ゲートｊおよびｍｌ，ｊに対するＦＰＧＡチップを含むカラムに論理的に論理積演算される。個々の論理積演算されたコンポーネントが論理和演算され、インデックスまたはホップｋに対する生成したＭｉ，ｊ値が、「１」または「０」であるかどうかを決定する。その結果が「１」である場合、その結果接続が存在し、インデックスｋがホップの数として指定される。結果が「０」になる場合、従って接続が存在しない。
【０１５１】
以下の例がこれらの原理を説明する。図３５（Ａ）〜図３５（Ｄ）を参照して、図３５（Ａ）は、クラウド１０９０として示されたユーザの回路設計を示す。この回路設計１０９０は単純または複雑であり得る。回路設計１０９０の一部は、ＯＲゲート１０９１および２つのＡＮＤゲート１０９２および１０９３を含む。ＡＮＤゲート１０９２および１０９３の出力は、ＯＲゲート１０９１の入力に接続される。さらに、これらのゲート１０９１、１０９２、および１０９３は、回路設計１０９０の他の部分に接続され得る。
【０１５２】
図３５（Ｂ）を参照して、３つのゲート１０９１、１０９２、および１０９３を含む部分を含む回路１０９０のコンポーネントは、ＦＰＧＡチップ１０９４、１０９５、および１０９６に構成および配置され得る。ＦＰＧＡチップの特定の例示的なアレイは、示されるように相互接続スキームを有する。すなわち、相互接続１０９７のセットは、チップ１０９４とチップ１０９５とを接続し、相互接続１０９８の別のセットは、チップ１０９５とチップ１０９６とを接続する。直接的な相互接続がチップ１０９４とチップ１０９６との間に設けられない。この回路設計１０９０のコンポーネントをチップに配置する場合、システムは、予め設計された相互接続スキームを使用して、異なるチップにわたって回路経路を接続する。
【０１５３】
図３５（Ｃ）を参照して、１つの可能な構成および配置は、チップ１０９４内に配置されたＯＲゲート１０９１、チップ１０９５内に配置されたＡＮＤゲート１０９２、およびチップ１０９６に配置されたＡＮＤゲート１０９３である。回路１０９０の他の部分は、教示目的のために示されない。ＯＲゲート１０９１とＡＮＤゲート１０９２との間の接続は相互接続を必要とする。なぜなら、これらのゲートは、異なるチップに配置され、相互接続１０９７のセットが使用されるためである。この相互接続に対するホップの数は「１」である。ＯＲゲート１０９１とＡＮＤゲート１０９３との間の接続もまた、相互接続を必要とし、相互接続１０９７および１０９８のセットが使用される。ホップの数は「２」である。この配置の例として全体の数のホップは、「３」であり、この他のゲートからの寄与および図示されない回路１０９０の残りにおける相互接続を差し引く。
【０１５４】
図３５（Ｄ）は、別の配置の例を示す。ここで、ＯＲゲート１０９１は、チップ１０９４に配置され、ＡＮＤゲート１０９２および１０９３は、チップ１０９５に配置される。再び、回路１０９０の他の部分は、教示目的のために示されない。ＯＲゲート１０９１とＡＮＤゲート１０９２との間の接続は、相互接続を要求する。なぜなら、異なるチップ内に配置され、相互接続１０９７のセットが使用される。この接続に対するホップの数は「１」である。さらに、ＯＲゲート１０９１とＡＮＤゲート１０９３との間の接続もまた、相互接続を要求し、相互接続１０９７のセットが使用される。さらにホップの数は「１」である。この配置の例に対して、ホップの全体の数は、「２」であり、他のゲートからの寄与および図示されない回路１０９０の残りにおける相互接続を差し引く。このようにして、距離Ｄパラメータのみに基づき、他の全てのファクタが等しいと仮定すると、コスト関数は図３５（Ｃ）の配置の例よりも、図３５（Ｄ）の配置の例の方がより低いコスト関数を計算する。しかし、他の全てのファクタが等しくない。恐らく、図３５（Ｄ）に対するコスト関数はまた、ゲート使用／利用可能性Ｇに基づく。図３５（Ｄ）では、図３５（Ｃ）において同一のチップ内で使用されたゲートよりも、さらに１つ多いのゲートがチップ１０９５内で使用される。さらに、図３５（Ｃ）に示された配置の例においてチップ１０９５に対するピン使用／利用可能性Ｐは、図３５（Ｄ）に示される他の配置の例において同じチップに対するピン使用／利用可能性より大きい。
【０１５５】
粗いグレイン配置の後で、平坦化されたクラスタの配置の緻密な調整が配置結果をさらに最適化する。この緻密なグレイン配置動作３５３は、粗いグレイン配置動作３５２によって最初に選択された配置を改良する。ここで、このような構成が最適化を増加させる場合、最初のクラスタは分解され得る。例えば、論理素子ＸおよびＹがクラスタＡのもとの一部であり、ＦＰＧＡチップ１に対して指定されることを仮定する。緻密なグレイン配置動作３５３によると、論理構成素子ＸおよびＹは、今や別々のクラスタＢとして指定され得るか、または別のクラスタＣの一部を形成し、ＦＰＧＡチップ２における配置に対して指定される。ユーザの回路設計を特定のＦＰＧＡに接続するＦＰＧＡネットリスト３５４が生成される。
【０１５６】
クラスタがどれくらい分割されるかおよび所定のチップにどれくらい配置されるかの決定は、また配置コストに基づき、そしてこの配置コストは、回路ＣＫＴＱに対するコスト関数ｆ（Ｐ，Ｇ，Ｄ）によって計算される。一実施形態では、緻密なグレイン配置プロセスに対して使用されるコスト関数は、粗いグレイン配置プロセスに対して使用されたコスト関数と同一である。２つの配置プロセス間の差のみが、プロセス自身の配置ではなく配置されたクラスタのサイズである。粗いグレイン配置プロセスは、緻密なグレイン配置プロセスよりもより大きいクラスタを使用する。他の実施形態では、粗いグレイン配置プロセスおよび緻密なグレイン配置プロセスに対するコスト関数は、選択重み定数Ｃ０、Ｃ１、およびＣ２に関して上述したように互いに異なる。
【０１５７】
配置が終了すると、チップ間のルーティングタスク３５５が実行される。異なるチップにおいて配置された回路を接続するルーティングワイヤの数が、回路間ルーティングに対して割り当てられたこれらのＦＰＧＡチップにおいて利用可能なピンを超える場合、時分割多重化（ＴＤＭ）回路が用いられ得る。例えば、各ＦＰＧＡチップが２つの異なるＦＰＧＡチップにおいて配置された回路を接続するために４４ピンのみを可能でかつ、特定のモデルの実現は、チップ間に４５ワイヤを必要とする場合、特定の時分割多重化回路は、さらに各チップ内に実現され得る。この特定のＴＤＭ回路は少なくとも２つのワイヤと共に接続する。ＴＤＭ回路の１つの実施形態は、図９Ａ、図９Ｂ、および図９Ｃに示され、そしてこれらは以後説明される。従って、ルーティングタスクが常に完成される。なぜなら、このピンはこれらのチップの中から時分割多重化形態に構成され得るためである。
【０１５８】
一旦、各ＦＰＧＡの配置およびルーティングが決定されると、各ＦＰＧＡは、最適化された駆動回路に構成され得、従って、システムは、「ビットストリーム」構成ファイル３５６を生成する。Ａｌｔｅｒａの用語では、システムは１以上のプログラマオブジェクトファイル（．ｐｏｆ）を生成する。他の生成されたファイルは、ＳＲＡＭオブジェクトファイル（．ｓｏｆ）、ＪＥＤＥＣファイル（．ｊｅｄ）、１６進法の（インテルフォーマット）ファイル（．ｈｅｘ）、およびチューブラ（ｔｕｂｌａｒ）テキストファイル（．ｔｔｆ）を含む。Ａｌｔｅｒａ  ＭＡＸ＋ＰＬＵＳ  ＩＩプログラマーは、Ａｌｔｅｒａハードウエアプログラム可能なデバイスと共にＰＯＦ、ＳＯＦ、ＪＥＤＥＣファイルを使用して、ＦＰＧＡアレイをプログラムする。あるいは、１以上の生の（ｒａｗ）バイナリファイル（．ｒｂｆ）を生成する。ＣＰＵは．ｒｂｆファイルを受信し、ＰＣＩバスを介してＦＰＧＡアレイをプログラムする。
【０１５９】
この点において、構成されたハードウエアは、ハードウエアスタートアップ３７０のために準備中である。これは再構成可能な基板上のハードウエアモデルの自動構成を終了する。
【０１６０】
ピン出力のグループが共に時分割多重化され、１つのピン出力のみが実際に使用されることを可能にするＴＤＭ回路を戻って、実質的に、ＴＤＭ回路は、少なくとも２つの入力（２つのワイヤに対して）、１つの出力、およびループ内にセレクタ信号として構成されたレジスタの接続を有するマルチプレクサである。Ｓエミュレーションシステムが、より多くのワイヤが共にグループ化されることを要求する場合に、より多くの入力およびループレジスタが提供され得る。このＴＤＭ回路へのセレクタ信号として、ループ内に構成された数個のレジスタは、適切な信号をマルチプレクサに提供し、１つの期間において、入力の１つが出力として選択され、別の期間では、別の入力が出力として選択される。従って、ＴＤＭ回路は、チップ間のただ１つの出力ワイヤのみを使用することを管理し、この例では、特定のチップにおいて実現された回路のハードウエアモデルが、４５ピンの代わりに、４４ピンを用いて達成され得る。従って、ルーティングタスクは、常に終了され得る。なぜなら、ピンがチップの中でも時分割多重化形態に配置され得るためである。
【０１６１】
図９Ａは、ピンアウト問題の概略図を示す。これはＴＤＭ回路を要求するため、図９Ｂは、送信側のためのＴＤＭ回路を提供し、図９Ｃは、受信側のためのＴＤＭ回路を提供する。これらの図は、Ｓエミュレーションシステムがチップ間の２つのワイヤの代わりに１つのワイヤを要求する１つの特定の例のみを示す。２つ以上のワイヤが、時間多重化された構成において共に接続しなければならない場合、当業者は、以下の教示を考慮して適切な改変を可能にし得る。
【０１６２】
図９Ａは、ＳエミュレーションシステムがＴＤＭ構成において２つのワイヤを接続するＴＤＭ回路の一実施形態を示す。２つのチップ９９０および９９１が設けられる。完全なユーザ回路設計の一部である回路９６０がチップ９９１内にモデル化され、配置される。完全なユーザ回路設計の一部である回路９７３がチップ９９０内にモデル化され、配置される。相互接続９９４、相互接続９９２、および相互接続９９３の群を含むいくつかの相互接続が回路９６０と回路９７３との間に設けられる。この例では、相互接続の数は全部で４５である。一実施形態において、各チップはこれらの相互接続に対してせいぜい４４ピンのみを提供する場合、本発明の一実施形態は、時間多重化される相互接続のうち少なくとも２つを提供し、これらのチップ９９０と９９１との間で１つのみの相互接続を要求する。
【０１６３】
この例では、相互接続９９４のグループは、４３ピンの使用を継続する。第４４番目および最後のピンに対して、本発明の一実施形態によるＴＤＭ回路は、時分割多重化された形態と共に相互接続９９２および９９３を接続するために使用され得る。
【０１６４】
図９Ｂは、ＴＤＭ回路の一実施形態を示す。ＦＰＧＡチップ９９１内のモデル化された回路（またはその一部）９６０は、ワイヤ９６６および９６７上の２つの信号を供給する。回路９６０に対して、これらのワイヤ９６６および９６７が出力する。通常、これらの出力は、チップ９９０（図９Ａおよび図９Ｃを参照）においてモデル化された回路９７３に接続される。しかし、これらの２つの出力ワイヤ９６６および９６７に対して１つのピンのみの利用可能性は、直接的なピン間接続を除外する。出力９６６および９６７が、単一方向に他のチップに伝達されるため、適切な送信および受信器ＴＤＭ回路はこれらのラインを共に接続するために設けられなければならない。送信側のＴＤＭ回路の一実施形態は、図９Ｂに示される。
【０１６５】
送信側のＴＤＭ回路は、ＡＮＤゲート９６１および９６２を含み、そのそれぞれの出力９７０および９７１は、ＯＲゲート９６３の入力に接続される。ＯＲゲート９６３の出力９７２は、ピンに割り当てられ、別のチップ９９０に接続されたチップの出力である。ＡＮＤゲート９６１および９６２への入力９６６および９６７の１つのセットは、それぞれ回路モデル９６０によって提供される。入力９６８および９６９の他のセットは、ループ化されたレジスタスキームによって提供され、そのスキームは、時分割多重化セレクタ信号として機能する。
【０１６６】
ループ化されたレジスタスキームはレジスタ９６４および９６５を含む。レジスタ９６４の出力９９５は、レジスタ９６５の入力およびＡＮＤゲート９６１の入力９６８に提供される。レジスタ９６５の出力９９６は、レジスタ９６４の入力およびＡＮＤゲート９６２の入力９６９に供給される。各レジスタ９６４および９６５は、共通のクロックソースによって制御される。任意の所与の瞬間において、出力９９５または９９６の１つのみが論理「１」を供給する。他は論理「０」である。従って、各クロックエッジの後、論理「１」は、出力９９５と出力９９６との間でシフトする。次に、これは、ＡＮＤゲート９６１またはＡＮＤゲート９６２のいずれかに「１」を供給し、ワイヤ９６６またはワイヤ９６７のいずれかの信号を「選択する」。従って、ワイヤ９７２上のデータは、ワイヤ９６６またはワイヤ９６７のいずれかの回路９６０から生じる。
【０１６７】
ＴＤＭ回路の受信側の一実施形態は、図９Ｃに示される。チップ９９１のワイヤ９６６およびワイヤ９６７上の回路９６０（図９Ａおよび図９Ｂ）からの信号は、図９Ｃにおける回路９７３への適切なワイヤ９８５または９８６に接続されなければならない。チップ９９１からの時分割多重信号は、ワイヤ／ピン９７８から入力する。受信機側ＴＤＭ回路は、ワイヤ／ピン９７８上のこれらの信号を回路９７３への適切なワイヤ９８５および９８６に接続し得る。
【０１６８】
ＴＤＭ回路は、入力レジスタ９７４および９７５を含む。ワイヤ／ピン９７８上の信号は、ワイヤ９７９および９８０それぞれを介してこれらの入力レジスタ９７４および９７５に供給される。入力レジスタ９７４の出力９８５は、回路９７３における適切なポートに供給される。同様に、入力レジスタ９７５の出力９８６は、回路９７３内の適切なポートに供給される。これらの入力レジスタ９７４および９７５はループされたレジスタ９７６および９７７によって制御される。
【０１６９】
レジスタ９７６の出力９８４は、レジスタ９７７の入力およびレジスタ９７４のクロック入力９８１に接続される。レジスタ９７７の出力９８３は、レジスタ９７６の入力およびレジスタ９７５のクロック入力９８２に接続される。各レジスタ９７６および９７７は、共通のクロックソースによって制御される。任意の瞬間において、イネーブル入力９８１または９８２の内の１つのみは論理「１」である。他は論理「０」において存在する。従って、各クロックエッジの後、論理「１」は、イネーブル入力９８１と出力９８２との間でシフトする。次に、これは、ワイヤ９７９またはワイヤ９８０のいずれかの信号を「選択する」。従って、回路９６０からのワイヤ９７８上のデータは、ワイヤ９８５またはワイヤ９８６を介して回路９７３にほぼ接続される。
【０１７０】
本発明の一実施形態によるアドレスポインタは、図４を参照して簡単に説明されるように、以下に詳細に説明される。繰り返しに対して、いくつかのアドレスポインタは、ハードウエアモデルにおける各ＦＰＧＡチップに配置される。一般的には、アドレスポインタを実現するための主要な目的は、システムが、３２ビットＰＣＩバス３２８（図１０を参照）を介して、ソフトウエアモデル３１５とハードウエアモデル３２５における特定のＦＰＧＡチップとの間のデータを送達することを可能にすることである。より詳細には、３２−ビットＰＣＩバスの帯域幅の制限を考慮して、ソフトウエア／ハードウエア境界およびＦＰＧＡのバンク３２６ａ〜３２６ｄの間の各チップにおいて、アドレスポインタの第一の目的がアドレス空間（すなわち、ＲＥＧ、Ｓ２Ｈ、Ｈ２Ｓ、およびＣＬＫ）のそれぞれの間のデータ送達を選択的に制御することである。６４ビット−ＰＣＩバスが実現されても、これらのアドレスポインタがデータ送達の制御をさらに必要とする。従って、ソフトウエアモデルが５つのアドレス空間（すなわち、ＲＥＧ読み出し、ＲＥＧ書き込み、Ｓ２Ｈ読み出し、Ｈ２Ｓ書き込み、およびＣＬＫ書き込み）を有し、各ＦＰＧＡチップは、５つのアドレス空間に対応する５つのアドレスポインタを有する。各ＦＰＧＡは、これらの５つのアドレスポインタを必要とする。なぜなら、選択されたアドレス空間において特定の選択され処理されたワードが、任意の１つ以上のＦＰＧＡチップに常駐し得るためである。
【０１７１】
ＦＰＧＡ  Ｉ／Ｏコントローラ３８１は、ＳＰＡＣＥインデックスを用いることによってソフトウエア／ハードウエア境界に対応する特定のアドレス空間（すなわち、ＲＥＧ、Ｓ２Ｈ、Ｈ２Ｓ、およびＣＬＫ）を選択する。一旦、アドレス空間が選択されると、各ＦＰＧＡチップにおいて選択されたアドレス空間に対応する特定のアドレスポインタが、その選択されたアドレス空間における同じワードに対応する特定のワードを選択する。ソフトウエア／ハードウエア境界におけるアドレス空間の最大のサイズおよび各ＦＰＧＡチップにおけるアドレスポインタは、選択されたＦＰＧＡチップのメモリ／ワード容量に依存する。例えば、本発明の一実施形態では、ＦＰＧＡチップのＡｌｔｅｒａ  ＦＬＥＸ  １０Ｋ  ファミリを使用する。従って、各アドレス空間に対する推定された最大のサイズは、ＲＥＧ、３０００ワード、ＣＬＫ、１ワード、Ｓ２Ｈ、１０ワード、およびＨ２Ｓ、１０ワードである。各ＦＰＧＡチップは、約１００ワード保持することが可能である。
【０１７２】
さらに、Ｓエミュレータシステムは、Ｓエミュレーションプロセスの任意の時間において、ユーザが起動、停止、入力値のアサート、値の検査を可能にする機能を有する。シミュレータの柔軟性を提供するために、さらにＳエミュレータは、コンポーネントの内部実現がソフトウエアまたはハードウエアに存在するかどうかにかかわらず、全コンポーネントをユーザに見えるようにしなければならない。ソフトウエアでは、組み合わせのコンポーネントがモデル化され、値がシミュレーションプロセスの間に計算される。従って、これらの値は、シミュレーションプロセスの間に任意の時間において、ユーザがアクセスすることを明確に「見ることができる」。
【０１７３】
しかし、ハードウエアモデルの組み合わせの値は直接的に「見ることができる」ことはない。レジスタがソフトウエアカーネルによって容易にかつ直接的にアクセス可能（すなわち、読み出し／書き込み）であるが、組み合わせのコンポーネントは、決定することがより困難である。ＦＰＧＡにおいて、ほとんどの組み合わせコンポーネントは、高いゲート機能を達成するために、ルックアップテーブルとしてモデル化される。結果として、ルックアップテーブルマッピングは、効率的なハードウエアモデリングを提供するが、ほとんどの組み合わせ論理信号の可観性を損失する。
【０１７４】
組み合わせコンポーネントの可観性の欠如を有するこれらの問題にかかわらず、シミュレーションシステムは、ハードウエア加速モードの後に、ユーザによる検査のために組み合わせコンポーネントを再構成または再生成し得る。ユーザの回路設計が、組み合わせコンポーネントおよびレジスタコンポーネントのみを有する場合、全ての組み合わせコンポーネントの値は、レジスタコンポーネントから導かれ得る。すなわち、組み合わせコンポーネントは、回路設計によって要求された特定の論理機能に従って、種々の構成のレジスタから構築されるか、またはこのレジスタを含む。Ｓエミュレータは、レジスタコンポーネントおよび組み合わせコンポーネントだけのハードウエアモデルを有し、そして結果としてＳエミュレータは、ハードウエアモデルから全てのレジスタ値を読み出し、次いで全ての組み合わせコンポーネントを再構成または再生成する。この再生成プロセスを実行するように要求されたオーバーヘッドのため、組み合わせコンポーネント再生が全ての時間において実行されない。むしろ、ユーザによるリクエストに応じてのみ実行される。実際には、ハードウエアモデルを用いる利益の１つは、Ｓエミュレーションプロセスを加速することである。各サイクル（またはほとんどのサイクルでさえも）における組み合わせコンポーネントを決定することは、さらにシミュレーションのスピードを低減する。いずれのイベントにおいても、レジスタ値のみの検査は、ほとんどのシミュレーション解析に対して十分であるべきである。
【０１７５】
レジスタ値から組み合わせコンポーネント値を再生成するプロセスは、Ｓエミュレーションシステムがハードウエア加速モードまたはＩＣＥモードにあったと仮定する。そうでなければ、ソフトウエアシミュレーションは、既に組み合わせコンポーネント値をユーザに提供する。Ｓエミュレーションシステムは、ハードウエア加速の開始の前に、ソフトウエアモデルにおいて常駐していた組み合わせコンポーネント値およびレジスタ値を維持する。これらの値は、システムによるさらなる上書き動作までにソフトウエアモデルにおいて保持する。ソフトウエアモデルは、ハードウエア加速動作の開始直前の時間からレジスタ値および組み合わせコンポーネント値を既に有するため、組み合わせコンポーネント再生成プロセスは、更新された入力レジスタ値に応じてソフトウエアモデルのこれらの値のいくつかまたは全てを更新することを含む。
【０１７６】
組み合わせコンポーネント再生成プロセスは以下のようである。第１に、ユーザによってリクエストされた場合、ソフトウエアカーネルは、ＦＰＧＡチップからＲＥＧバッファにハードウエアレジスタコンポーネントの全ての出力値を読み出す。このプロセスは、アドレスポインタのチェインを介してＦＰＧＡチップのレジスタ値をＲＥＧアドレス空間に転送することを含む。ハードウエアモデルにあったレジスタ値をＲＥＧバッファ（ソフトウエア／ハードウエア境界にある）に配置することは、ソフトウエアモデルをさらなる処理のためにデータにアクセスすることを可能にする。
【０１７７】
第２に、ソフトウエアカーネルは、ハードウエア加速実行の前後にレジスタ値を比較する。ハードウエア加速実行の前のレジスタ値は、ハードウエア加速実行の後の値と同じである場合、組み合わせコンポーネントの値は、変化されない。時間の拡張および組み合わせコンポーネントを再生成するリソースの代わりに、これらの値はソフトウエアモデルから読み出され得、そしてこのソフトウエアモデルは、ハードウエア加速実行の直前からソフトウエアモデルに格納される組み合わせコンポーネント値を有する。他方では、１以上のレジスタ値が変化される場合、変化されたレジスタ値に依存する１以上の組み合わせコンポーネントはまた、値を変化させる。これらの組み合わせコンポーネントもまた、以下の第３のステップによって再生成されなければならない。
【０１７８】
第３に、前加速および後加速の比較とは異なる値を有するレジスタに対して、ソフトウエアカーネルは、ファンアウト組み合わせコンポーネントをイベントキューにスケジューリングする。ここで、この加速動作の間に値を変化させるこれらのレジスタは、イベントを検出する。恐らく、これらの変化されたレジスタ値に依存するこれらの組み合わせコンポーネントは、異なる値を生成する。これらの組み合わせコンポーネントの値の任意の変化にもかかわらず、このシステムは、次のステップでこれらの変化されたレジスタ値を評価することを確実にする。
【０１７９】
第４に、次いでソフトウエアカーネルは、標準的なイベントシミュレーションアルゴリズムを実行して、ソフトウエアモデルにおいてレジスタから全ての組み合わせコンポーネントまで変化する値を伝達する。言い換えると、加速前から加速後の時間間隔の間に変化するレジスタ値がこれらのレジスタ値に依存する全ての組み合わせコンポーネントのダウンストリームに伝達される。次いで、これらの組み合わせコンポーネントは、これらの新しいレジスタ値を評価しなければならない。展開および伝達原理に従って、次に変化されたレジスタ値に直接依存する第１のレベルの組み合わせコンポーネントからダウンストリームに配置された他の第２のレベルの組み合わせコンポーネントは、もしあれば、さらに変化されたデータを評価する。レジスタ値を影響を与え得る他のコンポーネントダウンストリームに伝達するこのプロセスは、展開ネットワークの末端まで継続する。従って、ダウンストリームに配置され、そして変化されたレジスタによって影響されるこれらの組み合わせコンポーネントのみがソフトウエアモデルにおいて更新される。全ての組み合わせコンポーネントが影響を受けるわけではない。従って、加速前から加速後の時間間隔の間に変化された１つのみのレジスタ値および１つのみの組み合わせコンポーネントがこのレジスタ値の変化によって影響される場合、次に、この組み合わせコンポーネントのみがこの変化されたレジスタ値を考慮してその値を再評価する。このモデル化された回路の他の部分は影響されない。この小さな変化に対して、組み合わせコンポーネント再生成プロセスが比較的高速で発生する。
【０１８０】
最後に、イベント伝達が終了する場合、システムは任意のモードの動作の準備中である。通常、ユーザは長い実行の後の値の検査を望む。組み合わせコンポーネント再生成プロセスの後、ユーザはデバッグ／テスト目的にための純粋なソフトウエアシミュレーションを継続する。しかし、他の場合は、ユーザは次の所望のポイントへのハードウエア加速を継続することを望む。さらに他の場合では、ユーザはＩＣＥモードにさらに進むことを望む。
【０１８１】
要するに、組み合わせコンポーネント再生は、レジスタ値を用いてソフトウエアモデルのコンポーネント値を更新することを含む。任意のレジスタ値が変化した場合、変化されたレジスタ値は、値が更新されるとともに、レジスタのファンアウトネットワークを介して伝達される。レジスタ値が変化しない場合、さらにソフトウエアモデルの値は変化せず、従って、システムは組み合わせコンポーネントを再生成する必要がない。通常、ハードウエア加速の実行がある時間の間に発生する。結果として、多くのレジスタ値は変更し得、変化された値を有するこれらのレジスタの展開ネットワークのダウンストリームに配置された多くの組み合わせコンポーネント値に影響を与える。この場合、組み合わせコンポーネント再生成プロセスは比較的遅くてもよい。他の場合では、ハードウエア加速実行の後、わずかのみのレジスタ値を変更し得る。変更されたレジスタ値を有するレジスタに対する展開ネットワークは小さてもよく、従って組み合わせコンポーネント再生成プロセスは比較的高速であり得る。
【０１８２】
ＩＶ．ターゲットシステムモードを用いるエミュレーション
図１０は、本発明の一実施形態によるＳエミュレーションシステムアーキテクチャを示す。さらに、図１０は、システムがインサーキットエミュレーションモードで動作する場合、ソフトウエアモデル、ハードウエアモデル、エミュレーションインターフェイス、およびターゲットシステム間の関係を示す。上述したように、Ｓエミュレーションシステムは、汎用マイクロプロセッサ、およびＰＣＩバス等の高速バスによって相互接続された再構成可能なハードウエア基板を含む。Ｓエミュレーションシステムは、ユーザの回路設計をコンパイルし、ハードウエアモデルへの再構成可能なボードマッピングプロセスのためのエミュレーションハードウエア構成データを生成する。次いで、ユーザは、汎用プロセッサを介して回路をシミュレートし、シミュレーションプロセスをハードウエア加速し、エミュレーションインターフェイスを介してターゲットシステムを用いて回路設計をエミュレートし、そしてその後で、ポストシミュレーション解析を実行する。
【０１８３】
ソフトウエアモデル３１５およびハードウエアモデル３２５は、コンパイルプロセスの間に決定される。さらにエミュレーションインターフェイス３８２およびターゲットシステム３８７は、インサーキットエミュレーションモードのためのシステムにおいて提供される。ユーザの判断において、エミュレーションインターフェイスおよびターゲットシステムは、初めにシステムに接続される必要がない。
【０１８４】
ソフトウエアモデル３１５は、全システムを制御するカーネル３１６、およびソフトウエア／ハードウエア境界（ＲＥＧ、Ｓ２Ｈ、Ｈ２Ｓ、およびＣＬＫ）に対する４つのアドレス空間を含む。Ｓエミュレーションシステムは、異なるコンポーネントタイプおよび制御機能に従って、ハードウエアモデルをメインメモリにおける４つのアドレス空間にマッピングする。ＲＥＧスペース３１７は、レジスタコンポーネントに対して指定される。ＣＬＫ空間３２０は、ソフトウエアクロックに対して指定される。Ｓ２Ｈ空間３１８は、ソフトウエアテストベンチコンポーネントにハードウエアモデルへの出力に対して指定される。Ｈ２Ｓ空間３１９は、ハードウエアモデルのソフトウエアテストベンチコンポーネントへの出力に対して指定される。これらの特定用途のＩ／Ｏバッファ空間は、システム初期化時間の間にカーネルのメインメモリ空間にマッピングされる。
【０１８５】
ハードウエアモデルは、ＦＰＧＡチップのいくつかのバンク３２６ａ〜３２６ｄおよびＦＰＧＡ  Ｉ／Ｏコントローラ３２７を含む。各バンク（例えば、３２６ｂ）は、少なくとも１つのＦＰＧＡチップを含む。一実施形態では、各バンクは４つのＦＰＧＡチップを含む。ＦＰＧＡチップの４×４アレイでは、バンク３２６ｂおよび３２６ｄは、低いバンクであり得、バンク３２６ａおよび３２６ｃは、高いバンクであり得る。特定のチップおよびその相互接続に対する特定のハードウエアモデルのユーザ回路設計素子のマッピング、配置、およびルーティングは、図６を参照して説明される。ソフトウエアモデル３１５とハードウエアモデル３２５との間の相互接続３２８は、ＰＣＩバスシステムである。さらにハードウエアモデルは、ＦＰＧＡ  Ｉ／Ｏコントローラ３２７を含み、ＦＰＧＡ  Ｉ／Ｏコントローラ３２７は、ＰＣＩバスとＦＰＧＡチップのバンク３２６ａ〜３２６ｄとの間のデータトラフィックを制御しつつ、ＰＣＩバスのスループットを維持するためのＰＣＩインターフェイス３８０および制御ユニット３８１を含む。各ＦＰＧＡチップは、いくつかのアドレスポインタをさらに含み、各アドレスポインタは、ソフトウエア／ハードウエア境界の各アドレス空間（すなわち、ＲＥＧ、Ｓ２Ｈ、Ｈ２Ｓ、およびＣＬＫ）に対応し、これらのアドレス空間のそれぞれとＦＰＧＡチップのバンク３２６ａ〜３２６ｄにおける各ＦＰＧＡチップとの間のデータを接続する。
【０１８６】
ソフトウエアモデル３１５とハードウエアモデル３２５との間の通信は、ハードウエアモデルのＤＭＡエンジンまたはアドレスポインタを介して発生する。あるいは、さらに通信は、ハードウエアモデルのＤＭＡエンジンおよびアドレスポインタの両方を介して発生する。カーネルは、直接マッピングされたＩ／Ｏ制御レジスタを介して評価リクエストと共にＤＭＡ転送を開始する。ＲＥＧ空間３１７、ＣＬＫ空間３２０、Ｓ２Ｈ空間３１８、およびＨ２Ｓ空間３１９は、ソフトウエアモデル３１５とハードウエアモデル３２５との間のデータ送達のために、Ｉ／Ｏデータパス経路３２１、３２２、３２３、および３２４それぞれを使用する。
【０１８７】
二重バッファリングは、Ｓ２ＨおよびＣＬＫ空間への全ての一次入力に対して要求される。なぜなら、これらの空間はいくつかのクロックサイクルを獲得し、更新プロセスを終了する。ダブルバッファリングは、競合状態を引き起こし得る内部ハードウエアモデル状態の妨害を回避する。
【０１８８】
Ｓ２ＨおよびＣＬＫ空間は、カーネルからハードウエアモデルまでの一次入力である。上述のように、ハードウエアモデルは、全てのレジスタコンポーネントおよびユーザの回路設計の全ての組み合わせコンポーネントを実質的に保持する。さらに、ソフトウエアクロックは、ソフトウエアにおいてモデル化され、ＣＬＫ  Ｉ／Ｏアドレス空間に設けられ、ハードウエアモデルとインターフェイスをとる。カーネル進行シミュレーション時間は、アクティブテストベンチコンポーネントを検索し、クロックコンポーネントを評価する。任意のクロックエッジがカーネルによって検索される場合、レジスタおよびメモリが更新され、組み合わせコンポーネントを介して値が伝達される。従って、ハードウエア加速モードが選択される場合、この空間内の値の任意の変化がハードウエアモデルをトリガして論理状態を変化させる。
【０１８９】
インサーキットエミュレーションモードに対してエミュレーションインターフェイス３８２は、ＰＣＩバス３２８に接続され、エミュレーションインターフェイスは、ハードウエアモデル３２５およびソフトウエアモデル３１５と通信し得る。ハードウエア加速シミュレーションモードおよびインサーキットエミュレーションモードの間、カーネル３１６は、ソフトウエアモデルおよびハードウエアモデルを制御する。さらに、エミュレーションインターフェイス３８２は、ケーブル３９０を介してターゲットシステム３８７に接続される。さらに、エミュレーションインターフェイス３８２は、インターフェイスポート３８５、エミュレーションＩ／Ｏ制御３８６、ターゲット−ハードウエアＩ／Ｏバッファ（Ｔ２Ｈ）３８４、およびハードウエア−ターゲットＩ／Ｏバッファ（Ｈ２Ｔ）３８３を含む。
【０１９０】
ターゲットシステム３８７は、ターゲットシステム３８７の一部であるコネクタ３８９、信号入力／信号出力インターフェイスソケット３８８、および他のモジュールまたはチップを含む。例えば、ターゲットシステム３８７は、ＥＧＡビデオレコーダであり得、ユーザの回路設計は特定のＩ／Ｏコントローラ回路であり得る。ＥＧＡビデオコントローラのためのＩ／Ｏコントローラのユーザの回路設計は、ソフトウエアモデル３１５において完全にモデル化され、ハードウエアモデル３２５で部分的にモデル化される。
【０１９１】
さらに、ソフトウエアモデル３１５のカーネル３１６は、インサーキットエミュレーションモードを制御する。エミュレーションクロックの制御は、ソフトウエアクロック、ゲートクロック論理、およびゲートデータ論理を介してそのソフトウエアの中に依然として存在し、セットアップおよび保持時間の問題がインサーキットエミュレーションモードの間には生じない。従って、ユーザは、開始し、停止し、単一処理（ｓｉｎｇｌｅ−ｓｔｅｐ）し、値をアサートし、およびインサーキットエミュレーションプロセスにおける任意の時間において値を検査し得る。
【０１９２】
この作業を行うために、ターゲットシステムとハードウエアモデルとの間の全てのクロックノードが識別される。ターゲットシステムにおけるクロック発生器がディセーブルされ、ターゲットシステムからのクロックポートが切断され、または、そうでなければターゲットシステムからのクロック信号はハードウエアモデルに到達することを妨げる。その代わりに、クロック信号は、テストベンチプロセスまたはソフトウエア発生クロックの他の発生形態から生じる。その結果、ソフトウエアカーネルは、アクティブクロックエッジを検出して、データ評価をトリガし得る。従って、ＩＣＥモードでは、Ｓエミュレーションシステムは、ソフトウエアクロックを使用して、ターゲットシステムのクロックの代わりにハードウエアモデルを制御する。
【０１９３】
ターゲットシステムの環境内でユーザの回路設計の動作をシミュレートするために、ターゲットシステム４０とモデル化された回路設計との間の一次入力（入信号）および出力（出信号）信号は、評価のためにハードウエアモデル３２５に供給される。これは、２つのバッファ（ターゲット／ハードウエアバッファ（Ｔ２Ｈ）３８４およびハードウエア／ターゲットバッファ（Ｈ２Ｔ）３８３）を介して達成される。ターゲットシステム３８７は、Ｔ２Ｈバッファ３８４を使用して、入力信号をハードウエアモデル３２５に適用する。ハードウエアモデル３２５は、Ｈ２Ｔバッファ３８３を使用して、出力信号をターゲットシステム３８７に送達する。データを評価するためにソフトウエアモデル３１５のテストベンチプロセスに代わりに、このインサーキットエミュレーションモードでは、Ｓ２ＨおよびＨ２Ｓバッファの代わりにＴ２ＨおよびＨ２Ｔバッファを介してＩ／Ｏ信号を送受信する。なぜなら、システムは現在、ターゲットシステム３８７を使用しているためである。ターゲットシステムはソフトウエアシミュレーションの速度よりも実質的に大きい速度で実行するため、インサーキットエミュレーションモードはまた、より大きい速度で実行する。これらの入力および出力信号の伝達は、ＰＣＩバス３２８上で発生する。
【０１９４】
さらに、バス６１は、エミュレーションインターフェイス３８２とハードウエアモデル３２５との間に設けられる。このバスは図１のバス６１と類似している。バス６１は、エミュレーションインターフェイス３８２およびハードウエアモデル３２５がＴ２Ｈバッファ３８４およびＨ２Ｔバッファ３８３を介して通信する。
【０１９５】
典型的には、ターゲットシステム３８７は、ＰＣＩバスに接続されない。しかし、エミュレーションインターフェイス３８２がターゲットシステム３８７の設計に組み込まれる場合、このような接続は実現可能であり得る。この設定では、ケーブル３９０は存在しない。ターゲットシステム３８７とハードウエアモデル３２５との間の信号は、エミュレーションインターフェイスを通過する。
【０１９６】
Ｖ．ポストエミュレーション解析モード
本発明のシミュレーションシステムは、ポストシミュレーション解析に対して広範囲に使用されたシミュレータ機能値である変化ダンプ（ＶＣＤ）を支援し得る。本質的には、ＶＣＤは、ハードウエアモデルの全入力および選択されたレジスタ出力の履歴記録を提供する。その後、ポストシミュレーション解析の間、種々の入力およびシミュレーションプロセスの結果の出力を再検討し得る。ＶＣＤを支援するために、システムは全ての入力をハードウエアモデルに書き込む。出力に対して、システムは、ユーザ定義されたロギング頻度（例えば、１／１０，０００レコード／サイクル）でハードウエアレジスタコンポーネントの全ての値を書き込む。書き込み頻度は、出力値がどれくらいの頻度で記録されるかを決定する。１／１０，０００レコード／サイクルのロギング頻度に対して、出力値は１０，０００サイクルごとに１回記録される。ロギング頻度が大きくなると、後のポストシミュレーション解析に対してより多くの情報が記録される。ロギング頻度が小さくなると、後のポストシミュレーションプロセスに対してより少ない情報が格納される。選択された書き込み頻度が、Ｓエミュレーション速度に対して一定ではない（ｃａｓｕａｌ）関係を有するため、ユーザはロギング頻度を注意して選択すべきである。より大きいロギング頻度は、Ｓエミュレーション速度を低減する。なぜなら、さらなるシミュレーションが実行され得る前に、メモリへのＩ／Ｏ動作を実行することによって出力データをメモリに記録するために、システムは、時間およびリソースを消費しなければならないからである。
【０１９７】
ポストシミュレーション解析に関して、ユーザは、シミュレーションが望まれる特定のポイントを選択する。ロギング頻度が１／５００レコード／サイクルである場合、ポイント０、５００、１０００、１５００等、５００サイクルごとについてレジスタ値が記録される。例えば、ユーザがポイント６１０において結果を望む場合、ユーザは、レジスタ値が記録されるポイント５００を選択し、シミュレーションがポイント６１０に到達するまで、ユーザは、シミュレーションがポイント６１０に到達するまで時間に合わせて前の方にシミュレートする。この解析ステージの間、解析速度は、シミュレーション速度と同じである。なぜなら、ユーザは、最初にポイント５００についてのデータを最初にアクセスし、その次に、ポイント６１０の前方にシミュレートを行うためである。より高いロギング頻度において、より多くのデータがポストシミュレーション解析のために格納されることに留意されたい。従って、１／３００レコード／サイクルのロギング頻度に対して、データは、ポイント０、３００、６００、９００等、３００サイクルごとについて記録される。ポイント６１０において結果を得るために、ユーザは、初めにレジスタ値が記録されるポイント６００を選択し、そしてポイント６１０まで前方にシミュレートする。システムは、ポストシミュレーション解析の間、ロギング頻度が１／５００ではなく１／３００である場合、所望のポイント６１０により高速に到達し得ることに留意されたい。しかし、これは必ずしも高速ではない。ロギング頻度と共に特定の解析ポイントは、ポストシミュレーション解析の点がどれくらい高速で到達するかを決定する。例えば、ＶＣＤロギング頻度が１／３００ではなく１／５００である場合、システムは、ポイント５２３により速く到達し得る。
【０１９８】
次いで、ユーザがハードウエアモデルに入力ログを用いてソフトウエアシミュレーションを実行することによって、Ｓエミュレーション後の解析を実行して、全てのハードウエアコンポーネントのダンプを計算し得る。さらにユーザは、任意のレジスタ書き込み点を遅れることなく選択し、そのログポイントから値変化ダンプを遅れることなく前方に向かって開始する。この値変化ダンプ方法は、ポストシミュレーション解析のために任意のシミュレーション波形にリンクし得る。
【０１９９】
ＶＩ．ハードウエア実現スキーム
（Ａ．概要）
Ｓエミュレーションシステムは、再構成可能な基板上でＦＰＧＡチップのアレイを実現する。ハードウエアモデルに基づいて、Ｓエミュレーションシステムは、ＦＰＧＡチップにユーザの回路設計の選択された部分のそれぞれを分割し、マッピングし、配置し、そしてルーティングする。従って、例えば、４×４アレイの１６のチップは、これらの１６のチップにわたって拡がった大きい回路をモデル化し得る。相互接続スキームは、各チップが２つの「ジャンプ」またはリンク内の別のチップにアクセスすることを可能にする。
【０２００】
各ＦＰＧＡチップは、Ｉ／Ｏアドレス空間（すなわち、ＲＥＧ、ＣＬＫ、Ｓ２Ｈ、Ｈ２Ｓ）のそれぞれに対してアドレスポインタを実現する。特定のアドレス空間に関連付けられた全てのアドレスポインタの組み合わせが互いに連鎖される。そのため、データ転送の間、各チップにおけるワードデータは、所望のワードデータがその選択されたアドレス空間に対してアクセスされるまで、メインＦＰＧＡバスおよびＰＣＩバスから／メインＦＰＧＡバスおよびＰＣＩバスに、各チップのワードデータは、各チップの選択されたアドレス空間に対して一度に１ワードおよび一度に１チップだけ連続的に選択される。ワードデータの連続的な選択は、ワード選択信号を伝達することによって達成される。ワード選択信号は、チップ内のアドレスポインタによって進行し、次いで、次のチップのアドレスポインタに伝達し、最後のチップまでさらに継続するか、または、システムはアドレスポインタを初期化する。
【０２０１】
再構成可能な基板のＦＰＧＡバスシステムは、ＰＣＩバス帯域幅を２回動作させるが、ＰＣＩバス速度の半分で動作させる。従ってＦＰＧＡチップは、バンクに分離され、より大きな帯域幅のバスを利用する。このＦＰＧＡバスシステムのスループットは、ＰＣＩバスシステムのスループットを追跡し得、そのため性能は、バス速度の低減によって損失されない。バンク長さを拡張するより多くのＦＰＧＡチップまたはピギーバック基板を含むより大きな基板によって拡張が可能になる。
【０２０２】
（Ｂ．アドレスポインタ）
図１１は、本発明のアドレスポインタの一実施形態を示す。全Ｉ／Ｏ動作はＤＭＡストリーミングによって進む。システムが１つのみのバスを有するため、システムは、一度に１ワードだけ連続的にデータにアクセスする。従って、アドレスポインタの一実施形態は、これらのアドレス空間の選択されたワードに連続的にアクセスするシフトレジスタチェーンを使用する。アドレスポインタ４００は、フリップフロップ４０１〜４０５、ＡＮＤゲート４０６、一対の制御信号の接続、初期化４０７および移動４０８を含む。
【０２０３】
各アドレスポインタは、選択されたアドレス空間における同じワードに対応する各ＦＰＧＡチップにおいてｎ個の可能なワードからワードを選択するために、ｎ個の出力（Ｗ０，Ｗ１，Ｗ２，．．．，Ｗｎ−１）を有する。モデル化された特定のユーザ回路設計に応じて、ワード数ｎが回路設計間で変動し、所与の回路設計に対して、ｎはＦＰＧＡチップ間で変動し得る。図１１では、アドレスポインタ４００は、５ワード（すなわちｎ＝５）のみのアドレスポインタ４００である。従って、特定のアドレス空間に対してこの５ワードのアドレスポインタを含むこの特定のＦＰＧＡチップが選択すべき５ワードのみを有する。言うまでもなく、アドレスポインタ４００は、任意のワード数ｎを実現し得る。この出力信号Ｗｎは、さらにワード選択信号によって呼び出され得る。このワード選択信号は、このアドレスポインタにおける最後のフリップフロップの出力に到達する場合、次のＦＰＧＡチップのアドレスポインタの入力に伝達されるべきＯＵＴ信号によって呼び出される。
【０２０４】
初期化信号がアサートされる場合、アドレスポインタが初期化される。第１のフリップフロップ４０１が「１」に設定され、他の全てのフリップフロップ４０２〜４０５が「０」に設定される。この点において、アドレスポインタの初期化は、任意のワード選択を可能にしない。すなわち、初期化の後、全てのＷｎ出力が「０」のままである。またアドレスポインタ初期化手順が図１２を参照して説明される。
【０２０５】
移動信号はワード選択に対してポインタの進行を制御する。この移動信号はＦＰＧＡ  Ｉ／Ｏコントローラからの読み出し、書き込み、および空間インデックス制御信号から発生する。各動作が実質的に読み出しまたは書き込みであるために、空間インデックス信号は、実質的にどのアドレスポインタが移動信号に適用されるかを決定する。従って、システムは、一度に選択されたＩ／Ｏアドレス空間に関連付けられた１つのみのアドレスポインタを駆動し、この時間の間、システムはそのアドレスポインタのみに移動信号を適用する。移動信号の生成は、図１３に関してさらに説明される。図１１を参照して、移動信号がアサートされる場合、移動信号は、ＡＮＤゲート４０６への入力およびフリップフロップ４０１〜４０５のイネーブル入力に供給される。従って、論理「１」は、ワード出力Ｗｉ〜Ｗｉ＋１の各システムクロックサイクルに移動する。すなわち、ポインタは、Ｗｉ〜Ｗｉ＋１まで移動し、特定のワードの各サイクルを選択する。シフティングワード選択信号がその方向を最後のフリップフロップ４０５の出力（本明細書中では「ＯＵＴ」としてラベリングされる）４１３に向ける場合、その後、このＯＵＴ信号は、このアドレスポインタが再度初期化されない場合、図１４および図１５を参照して説明されるように、多重化されたクロスチップアドレスポインタチェーンを介して次のＦＰＧＡチップに向ける。
【０２０６】
アドレスポインタ初期化手順が説明される。図１２は、図１１のアドレスポインタに対するアドレスポインタ初期化の状態遷移図である。最初に状態４６０は、アイドル状態である。ＤＡＴＡ＿ＸＳＦＲが「１」に設定される場合、システムは状態４６１に進む。ここでアドレスポインタは初期化される。ここで初期化信号はアサートされる。各アドレスポインタにおける第１のフリップフロップが「１」に設定され、アドレスポインタにおける全ての他のフリップフロップが「０」に設定される。この点において、アドレスポインタの初期化は、いずれのワード選択もイネーブルしない。すなわち、Ｗｎ出力の全てが「０」のままである。ＤＡＴＡ＿ＸＳＦＲは「１」のままである間、次の状態は待機状態４６２である。ＤＡＴＡ＿ＸＳＦＲが「０」である場合、アドレスポインタ初期化手順が終了し、システムはアイドル状態４６０に戻る。
【０２０７】
アドレスポインタに対して種々の移動信号を生成するための移動信号発生器がここで説明される。ＦＰＧＡ  Ｉ／Ｏコントローラ（図１０におけるアイテム３２７、図２２）によって生成された空間インデックスは、特定のアドレス空間（すなわち、ＲＥＧ読み出し、ＲＥＧ書き込み、Ｓ２Ｈ読み出し、Ｈ２Ｓ書き込み、およびＣＬＫ書き込み）を選択する。このアドレス空間内において、本発明のシステムはアクセスされるべき特定のワードを連続的に選択する。この連続的なワード選択は、移動信号によって各アドレスポインタにおいて達成される。
【０２０８】
移動信号発生器の一実施形態が図１３に示される。各ＦＰＧＡチップ４５０は、種々のソフトウエア／ハードウエア境界アドレス空間（すなわちＲＥＧ、Ｓ２Ｈ、Ｈ２Ｓ、およびＣＬＫ）に対応するアドレスポインタを有する。ＦＰＧＡチップ４５０においてモデル化され実現されたアドレスポインタおよびユーザの回路設計に加えて、移動信号発生器４７０は、ＦＰＧＡチップ４５０に設けられる。移動信号発生器４７０は、アドレス空間デコーダ４５１およびいくつかのＡＮＤゲート４５２〜４５６を含む。入力信号は、ワイヤ線４５７上のＦＰＧＡ読み出し信号（Ｆ＿ＲＤ）、ワイヤ線４５８上のＦＰＧＡ書き込み信号（Ｆ＿ＷＲ）、およびアドレス空間信号４５９である。どのアドレス空間のアドレスポインタが利用可能であるかに依存して、各アドレスポインタに対する出力移動信号は、ワイヤ線４６４上のＲＥＧＲ移動、ワイヤ線４６５上のＲＥＧＷ移動、ワイヤ線４６６上のＳ２Ｈ移動、ワイヤ線４６７上のＨ２Ｓ移動、およびワイヤ線４６８上のＣＬＫ移動に対応する。これらの出力信号は、ワイヤ線４０８上の移動信号に対応する（図１１）。
【０２０９】
アドレス空間デコーダ４５１は、３−ビット入力信号４５９を受け取る。さらに２ビット入力信号を受け取り得る。この２ビット信号は４つの可能なアドレス空間を提供するが、３ビット入力は、８つの可能なアドレス空間を提供する。一実施形態では、ＣＬＫは、「００」に割り当てられ、Ｓ２Ｈは、「０１」に割り当てられ、Ｈ２Ｓは、「１０」に割り当てられ、およびＲＥＧは、「１１」に割り当てられる。入力信号４５９に依存して、アドレス空間デコーダの出力は、ＲＥＧ、Ｈ２Ｓ、Ｓ２Ｈ、およびＣＬＫにそれぞれ対応するワイヤ線４６０〜４６３の内の１つ上に「１」を出力するが、残っているワイヤ線は、「０」に設定される。従って、任意のこれらの出力ワイヤ線４６０〜４６３が「０」である場合、ＡＮＤゲート４５２〜４５６の対応する出力が「０」である。同様に、任意のこれらの入力ワイヤ線４６０〜４６３が「１」である場合、ＡＮＤゲート４５２〜４５６の対応する出力が「１」である。例えば、アドレス空間信号４５９が「１０」である場合、アドレス空間Ｈ２Ｓが選択される。ワイヤ線４６１が「１」である一方で、残っているワイヤ線４６０、４６２、および４６３が「０」である。従って、ワイヤ線４６６が「１」である一方で、残っているワイヤ線４６４、４６５、４６７、および４６８は「０」である。同様に、ワイヤ線４６０が「１」であり、ＲＥＧ空間が選択され、読み出し（Ｆ＿ＲＤ）または書き込み（Ｆ＿ＷＲ）動作が選択されるかどうかに依存している場合、ワイヤ線４６４上のＲＥＧＲ移動信号またはワイヤ線４６５上のＲＥＧＷ移動信号上のいずれかが「１」になる。
【０２１０】
上述のように、空間インデックスはＦＰＧＡ  Ｉ／Ｏコントローラによって生成される。コードでは、移動制御は、
ＲＥＧ空間読み出しポインタ：ＲＥＧＲ−ｍｏｖｅ＝（ＳＰＡＣＥ−ｉｎｄｅｘ＝＝＃ＲＥＧ）＆ＲＥＡＤ；
ＲＥＧ空間書き込みポインタ：ＲＥＧＷ−ｍｏｖｅ＝（ＳＰＡＣＥ−ｉｎｄｅｘ＝＝＃ＲＥＧ）＆ＷＲＩＴＥ；
Ｓ２Ｈ空間読み出しポインタ：Ｓ２Ｈ−ｍｏｖｅ＝（ＳＰＡＣＥ−ｉｎｄｅｘ＝＝＃Ｓ２Ｈ）＆ＲＥＡＤ；
Ｈ２Ｓ空間書き込みポインタ：Ｈ２Ｓ−ｍｏｖｅ＝（ＳＰＡＣＥ−ｉｎｄｅｘ＝＝＃Ｈ２Ｓ）＆ＷＲＩＴＥ；
ＣＬＫ空間書き込みポインタ：ＣＬＫ−ｍｏｖｅ＝（ＳＰＡＣＥ−ｉｎｄｅｘ＝＝＃ＣＬＫ）＆ＷＲＩＴＥ；
これは、図１３上の移動信号発生器の論理図に対して等価なコードである。
【０２１１】
上述のように、各ＦＰＧＡチップは、ソフトウエア／ハードウエア境界におけるアドレス空間と同じ数のアドレスポインタを有する。ソフトウエア／ハードウエア境界が４つのアドレス空間（すなわち、ＲＥＧ、Ｓ２Ｈ、Ｈ２Ｓ、およびＣＬＫ）を有する場合、各ＦＰＧＡチップは、これらの４つのアドレス空間に対応する４つのアドレスポインタを有する。各ＦＰＧＡは、これらの４つのアドレスポインタを必要とするため、選択されたアドレス空間における処理された特定の選択されたワードは、任意の１つ以上のＦＰＧＡチップに常駐し得るか、または、選択されたアドレス空間におけるデータは、各ＦＰＧＡチップにモデル化され、実現される種々の回路素子に影響を与える。選択されたワードが適切な１つ以上のＦＰＧＡチップにおいて１以上の適切な回路素子を用いて処理されることを確実にするために、所与のソフトウエア／ハードウエア境界のアドレス空間（すなわち、ＲＥＧ、Ｓ２Ｈ、Ｈ２Ｓ、およびＣＬＫ）に関連付けられたアドレスポインタの各セットは、いくつかのＦＰＧＡチップにわたって互いに「連鎖される」。図１１を参照して上述されたように、この「連鎖」の実施形態では、１つのＦＰＧＡチップの特定のアドレス空間と関連付けられたアドレスポインタが次のＦＰＧＡチップと同じアドレス空間に関連付けられたアドレスポインタに「変化される」ことを除いて、移動信号を介して特定のシフティングワード選択機構または伝達ワード選択機構がなおも利用される。
【０２１２】
４つの入力ピンと４つの出力ピンとを実現して、アドレスポインタを連鎖することは、同じ目的を達成することである。しかしこの実現は、リソースの効率的な使用に関してコストがかかりすぎる。すなわち、４つのワイヤが２つのチップ間で必要とされ、４つの入力ピンおよび４つの出力ピンが各チップにおいて必要とされる。本発明のシステムの一実施形態は、多重化されたクロスチップアドレスポインタチェーンを使用する。このチェインは、ハードウエアモデルが各チップ（チップの２つのＩ／Ｏピン）においてチップ間の１つのみのワイヤ、１つのみの入力ピン、および１つの出力ピンを使用することを可能にする。多重化されたクロスチップアドレスポインタチェーンの１つの実施形態が図１４に示される。
【０２１３】
図１４に示される実施形態では、ユーザの回路設計は、再構成可能なハードウエア基板４７０において３つのＦＰＧＡチップ４１５〜４１７にマッピングされ分割されている。このアドレスポインタは、ブロック４２１〜４３２のように示される。ワードＷｎの数（フリップフロップの数）は、どれくらいの数のワードがユーザのカスタム回路設計に対して各チップにおいて実現されるかに応じて変動し得ることを除いて、各アドレスポインタ（例えばアドレスポインタ４２７）は、図１１に示されるアドレポインタと同様な構造および機能を有する。
【０２１４】
ＲＥＧＲアドレス空間に対して、ＦＰＧＡチップ４１５はアドレスポインタ４２１を有し、ＦＰＧＡチップ４１６はアドレスポインタ４２５を有し、そしてＦＰＧＡチップ４１７はアドレスポインタ４２９を有する。ＲＥＧＷアドレス空間に対して、ＦＰＧＡチップ４１５はアドレスポインタ４２２を有し、ＦＰＧＡチップ４１６はアドレスポインタ４２６を有し、そしてＦＰＧＡチップ４１７はアドレスポインタ４３０を有する。Ｓ２Ｈアドレス空間に対して、ＦＰＧＡチップ４１５はアドレスポインタ４２３を有し、ＦＰＧＡチップ４１６はアドレスポインタ４２７を有し、そしてＦＰＧＡチップ４１７はアドレスポインタ４３１を有する。Ｈ２Ｓアドレス空間に対して、ＦＰＧＡチップ４１５はアドレスポインタ４２４を有し、ＦＰＧＡチップ４１６はアドレスポインタ４２８を有し、そしてＦＰＧＡチップ４１７はアドレスポインタ４３２を有する。
【０２１５】
各チップ４１５〜４１７は、マルチプレクサ４１８〜４２０それぞれを有する。公知のように、これらのマルチプレクサ４１８〜４２０がモデル化され、実際の実現はレジスタおよび論理素子の組み合わせであり得ることに留意されたい。例えば、マルチプレクサは、図１５に示されるように、ＯＲゲートに供給されるいくつかのＡＮＤゲートであり得る。マルチプレクサ４８７は、４つのＡＮＤゲート４８１〜４８４および１つのＯＲゲート４８５を含む。マルチプレクサ４８７の入力は、チップの各アドレスポインタからのアウト信号および移動信号である。マルチプレクサ４８７の出力４８６は、次のＦＰＧＡチップへの入力に通過するチェーンカットアウト信号である。
【０２１６】
図１５では、この特定のＦＰＧＡチップは、Ｉ／Ｏアドレス空間に対応する４つのアドレスポインタ４７５〜４７８を有する。アドレスポインタの出力（アウト信号および移動信号は、マルチプレクサ４８７への入力である。例えば、アドレスポインタ４７５は、ワイヤ線４７９上のアウト信号およびワイヤ線４８０上の移動信号を有する。これらの信号はＡＮＤゲート４８１への入力である。ＡＮＤゲート４８１の出力はＯＲゲート４８５への入力である。ＯＲゲート４８５の出力はこのマルチプレクサ４８７の出力である。動作において、対応する移動信号および空間インデックスを組み合わせてアドレスポインタ４７５〜４７８のそれぞれの出力におけるアウト信号は、マルチプレクサ４８７に対するセレクタ信号として機能する。すなわち、アウト信号および移動信号の両方（空間インデックス信号に由来する）は、アクティブ（例えば論理「１」）にアサートされ、マルチプレクサからのワード選択信号をチェーンアウトワイヤラインに伝達する必要がある。移動信号が定期的にアサートされ、アドレスポインタにおけるフリップフロップを介してワード選択信号を移動させ、この信号は入力ＭＵＸデータ信号として特徴付けられる。
【０２１７】
図１４に戻って、これらのマルチプレクサ４１８〜４２０は、４つのセットの入力と１つの出力を有する。入力の各セットは、（１）特定のアドレス空間に関連付けられたアドレスポインタに対する最後の出力Ｗｎ−１ワイヤライン（例えば図１１に示されたアドレスポインタにおけるワイヤライン４１３）で見出されるアウト信号、および（２）移動信号を含む。マルチプレクサ４１８〜４２０のそれぞれの出力はチェインアウト信号である。各アドレスポインタにおけるフリップフロップを介したワード選択信号Ｗｎは、この信号がアドレスポインタにおける最後のフリップフロップの出力に到達する場合にアウト信号になる。ワイヤライン４３３〜４３５上のチェインアウト信号は、同じアドレスポインタに関連付けられたアウト信号および移動信号が両方ともアクティブに（例えば「１」にアサートされる）アサートされた場合のみ「１」になる。
【０２１８】
マルチプレクサ４１８に対して、入力は、アドレスポインタ４２１〜４２４からのアウト信号および移動信号にそれぞれ対応する移動信号４３６〜４３９およびアウト信号４４０〜４４３である。マルチプレクサ４１９に対して、入力は、アドレスポインタ４２５〜４２８からのアウト信号および移動信号にそれぞれ対応する移動信号４４４〜４４７およびアウト信号４５２〜４５５である。マルチプレクサ４２０に対して、入力は、アドレスポインタ４２９〜４３２からのアウト信号および移動信号にそれぞれ対応する移動信号４４８〜４５１およびアウト信号４５６〜４５９である。
【０２１９】
動作時に、ワードＷｎの任意の所与のシフトに対して、ソフトウエア／ハードウエア境界において選択されたＩ／Ｏアドレス空間に関連付けられたこれらのアドレスポインタまたはチェーンアドレスポインタのみがアクティブになる。従って、図１４では、アドレス空間ＲＥＧＲ、ＲＥＧＷ、Ｓ２Ｈ、またはＨ２Ｓの内の１つに関連付けられた、チップ４１５、４１６、および４１７におけるアドレスポインタのみが所与のシフトに対してアクティブである。あるいは、フリップフロップを通過するワード選択信号Ｗｎの所与のシフトに対して、選択されたワードはバス帯域幅に関する制限のために連続的にアクセスされる。一実施形態では、バスは３２ビットの幅であり、ワードは３２ビットであり、そのため、１つのワードのみが一度にアクセスされ、適切なリソースに送達され得る。
【０２２０】
アドレスポインタがフリップフロップを介してワード選択信号を伝達またはシフトしている途中である場合、出力チェインアウト信号がアクティブにされず（例えば「１」ではない）、従って、このチップのマルチプレクサはワード選択信号を次のＦＰＧＡチップに伝達する準備がまだできていない。アウト信号がアクティブ（例えば「１」）にアサートされた場合、システムが次のＦＰＧＡチップにワード選択信号を伝達またはシフトする準備ができていることを示すチェインアウト信号は、アクティブ（例えば「１」）にアサートされる。従って、アクセスが一度に１つのチップで発生する。すなわち、ワード選択シフト動作が別のチップに対して実行される前にワード選択信号は、１つのチップのフリップフロップを介してシフトされる。実際には、チェインアウト信号は、ワード選択信号が各チップにおけるアドレスポインタの末端に到達する場合のみアサートされる。コードでは、チェインアウト信号は、
Ｃｈａｉｎ−ｏｕｔ＝（ＲＥＧＲ−ｍｏｖｅ＆ＲＥＧＲ−ｏｕｔ）│（ＲＥＧＷ−ｍｏｖｅ＆ＲＥＧＷ−ｏｕｔ）│（Ｓ２Ｈ−ｍｏｖｅ＆Ｓ２Ｈ−ｏｕｔ）│（Ｈ２Ｓ−ｍｏｖｅ＆Ｈ２Ｓ−ｏｕｔ）│
要するに、システム内のＩ／Ｏアドレス空間（すなわち、ＲＥＧ、Ｈ２Ｓ、Ｓ２Ｈ、ＣＬＫ）の数Ｘに対して、各ＦＰＧＡはＸのアドレスポインタ（各アドレス空間に対する１つのアドレスポインタ）を有する。各アドレスポインタのサイズは、各ＦＰＧＡチップにおけるユーザのカスタム回路設計をモデル化するために必要とするワードの数に依存する。特定のＦＰＧＡチップに対してｎワード（すなわち、アドレスポインタに対してｎワード）を仮定すると、この特定のアドレスポインタは、ｎの出力（すなわち、Ｗ０，Ｗ１，Ｗ２，．．．，Ｗｎ−１）を有する。これらの出力Ｗｉはさらにワード選択信号と呼ばれる。特定のワードＷｉが選択される場合、Ｗｉ信号がアクティブ（すなわち「１」）にアサートされる。このワード選択信号がこのチップのアドレスポインタの末端に到達するまで、このワード選択信号は、このチップのアドレスポインタにシフトまたは伝達する。この点において、この信号は、次のチップのアドレスポインタを介してワード選択信号Ｗｉの伝達を開始するチェインアウト信号の生成をトリガする。このように、所与のＩ／Ｏアドレス空間に関連付けられたアドレスポインタのチェインは、この再構成可能なハードウエア基板のＦＰＧＡチップの全てにわたって実現され得る。
【０２２１】
（Ｃ．ゲートデータ／クロックネットワーク解析）
本発明の種々の実施形態がゲートデータ論理およびゲートクロック論理解析に従ってクロック解析を実行する。ゲートクロック論理（またはクロックネットワーク）およびゲートデータネットワーク決定は、ソフトウエアクロックの連続する実現およびエミュレーションの間のハードウエアモデルの論理評価に対して重要である。図４を参照して説明されるように、クロック解析がステップ３０５で実行される。クロック解析プロセスに関してさらに詳述するように、図１６は、本発明の一実施形態によるフローチャートを示す。さらに図１６は、ゲートデータ解析を示す。
【０２２２】
Ｓエミュレーションシステムは、ソフトウエアのユーザの回路設計の完成したモデルおよびハードウエアのユーザの回路設計のいくつかの部分を有する。これらのハードウエア部は、クロックコンポーネント（特に派生したクロック）を含む。クロック送達タイミング発行は、ソフトウエアとハードウエアとの間のこの境界のために生じる。完全なモデルがソフトウエアにあるため、ソフトウエアはレジスタ値に影響を与えるクロックエッジを検出し得る。レジスタのソフトウエアモデルに加えて、物理的には、これらのレジスタはハードウエアモデルに配置される。ハードウエアレジスタはさらにその各入力（すなわち、Ｄ入力におけるデータをＱ出力に移動すること）を評価することを確実にするために、ソフトウエア／ハードウエア境界は、ソフトウエアクロックを含む。ソフトウエアクロックは、ハードウエアモデルにおけるレジスタが正確に評価することを確実にする。ソフトウエアクロックは、ハードウエアレジスタコンポーネントへのクロック入力を制御するのではなく、ハードウエアレジスタのイネーブル入力を実質的に制御する。このソフトウエアクロックは、レース条件を回避し、従って、保持時間の超過（ｖｉｏｌａｔｉｏｎ）を回避するために緻密なタイミング制御が必要とされない。図１６に示されたクロックネットワークおよびゲートデータ論理解析プロセスは、レース条件が回避されフレキシブルなソフトウエア／ハードウエア境界実現が提供されるように、クロックをモデル化および実現する方法およびハードウエアレジスタに対するデータ送達システムを提供する。
【０２２３】
上述したように、一次クロックは、テストベンチプロセスからのクロック信号である。組み合わせコンポーネントから発生するこれらのクロック信号等の他のクロックの全てが発生されたかまたはゲートクロックである。一次クロックは、ゲートクロックおよびゲートデータ信号の両方を発生し得る。ほとんどの部分に対して、少し（例えば１〜１０）のみの発生したクロックまたはゲートクロックは、ユーザの回路設計に存在する。これらの発生したクロックは、ソフトウエアクロックとして実現され、ソフトウエア内にとどまり得る。比較的多数（例えば１０よりも多い）の発生したクロックが回路設計内に存在する場合、Ｓエミュレーションシステムは、そのクロックをハードウエアにモデル化して、Ｉ／Ｏオーバーヘッドを低減し、Ｓエミュレーションシステムの性能を維持する。ゲートデータは、いくつかの組み合わせ論理を介して一次クロックから発生したクロック以外のレジスタのデータまたは制御入力である。
【０２２４】
ゲートデータ／クロック解析プロセスはステップ５００で開始する。ステップ５０１は、ＨＤＬコードから発生された利用可能なソース設計データベースコードを獲得し、ユーザのレジスタ素子をＳエミュレーションシステムのレジスタコンポーネントにマッピングする。ユーザレジスタのＳエミュレーションシステムへの一対一マッピングは、以後のモデル化プロセスを容易にする。いくつかの場合、このマッピングは、特定の未処理物（ｐｒｉｍｉｔｉｖｅ）を用いてレジスタ素子を説明するユーザ回路設計を処理するために必要である。従って、ＲＴＬレベルコードに対して、Ｓエミュレーションレジスタは、かなり容易に使用され得るため、ＲＴＬレベルコードは、十分に高いレベルにおいて存在し、より低いレベルの実現を変更することを可能にする。ゲートレベルネットリストに対して、Ｓエミュレーションシステムは、コンポーネントのセルライブラリにアクセスし、特定の回路設計に特有の論理素子に適応するようにこのコンポーネントを修正する。
【０２２５】
ステップ５０２は、ハードウエアモデルのレジスタコンポーネントからのクロック信号を抽出する。このステップは、システムが一次クロックおよび発生したクロックを決定することを可能にする。さらにこのステップは、回路設計における種々のコンポーネントによって必要とされる全てのクロック信号を決定する。このステップからの情報は、ソフトウエア／ハードウエアクロックモデル化ステップを容易にする。
【０２２６】
ステップ５０３は、一次クロックおよび発生したクロックを決定する。一次クロックはテストベンチコンポーネントから発生し、ソフトウエアのみでモデル化される。発生したクロックは組み合わせ論理から発生され、このクロックは次に一次クロックによって駆動される。デフォルトによって、本発明のＳエミュレーションシステムは、発生したクロックをソフトウエア内で保持する。発生したクロックの数（例えば１０未満）が小さい場合、これらの発生したクロックはソフトウエアクロックとしてモデル化され得る。これらの発生したクロックを生成する組み合わせコンポーネントの数は小さく、そのため有意なＩ／Ｏオーバーヘッドは、これらの組み合わせコンポーネントをソフトウエア内に常駐させ続けることによって与えられない。しかし、発生したクロックの数が大きい（例えば１０より大きい）場合、これらの発生したクロックはハードウエアにモデル化され、Ｉ／Ｏオーバーヘッドを最小化し得る。時には、ユーザの回路設計が一次クロックから発生した多くの発生したクロックコンポーネントを使用する。従って、システムは、ハードウエアにおけるクロックを構築し、ソフトウエアクロックの数を小さく保持する。
【０２２７】
決定ステップ５０４は、システムが任意の発生したクロックがユーザの回路設計において見出されるかどうかを決定することを要求する。システムが任意の発生したクロックがユーザの回路設計において見出されるかどうかを決定することを要求しない場合、ステップ５０４は、「いいえ」であると決定し、クロック解析はステップ５０８で終了する。なぜなら、ユーザの回路設計における全てのクロックが一次クロックであり、これらのクロックが単にソフトウエアでモデル化されただけであるためである。発生したクロックがユーザの回路設計で見出された場合、ステップ５０４は「はい」であると決定し、アルゴリズムはステップ５０５まで進む。
【０２２８】
ステップ５０５は、一次クロックから発生されたクロックまでのファンアウト（ｆａｎ−ｏｕｔ）組み合わせコンポーネントを決定する。言い換えると、このステップは、組み合わせコンポーネントによって一次クロックからのクロック信号データ経路を追跡する。ステップ５０６は、発生したクロックからのファンイン（ｆａｎ−ｉｎ）組み合わせコンポーネントを決定する。言い換えると、このステップは、組み合わせコンポーネントから発生されたクロックまでのクロック信号データ経路を追跡する。システムにおけるファンアウトセットおよびファンインセットを決定することは、ソフトウエアにおいて再帰的に為される。正味のＮのファンインセットは以下のようである。
【０２２９】
【数５】
2005500625.tif 000007
【０２３０】
ゲートクロックまたはデータ論理ネットワークは、正味のＮのファンインセットおよびファンアウトセット、ならびにその交点を決定するを再帰的に決定することによって決定される。本明細書における最終的な目標は、いわゆる正味のＮのファンインセットを決定することである。典型的には、正味のＮは、各ファンインからのゲートクロック論理を決定するためのクロック入力ノードである。各ファンインからゲートデータ論理を決定するために、正味のＮは、近くにある（ａｔ  ｈａｎｄ）データ入力に関連付けられたクロック入力ノードである。ノードがレジスタ上にある場合、正味のＮは、このレジスタに関連付けられたデータ入力に対するこのレジスタへのクロック入力である。システムは正味のＮを駆動する全コンポーネントを見出す。正味のＮで駆動する各コンポーネントＸに対して、システムは、コンポーネントＸが組み合わせコンポーネントであるか否かを決定する。各コンポーネントＸが組み合わせコンポーネントではない場合、正味のＮのファンインセットは組み合わせコンポーネントを有さず、正味のＮは一次クロックである。
【０２３１】
しかし、少なくとも１つのコンポーネントＸが組み合わせコンポーネントである場合、システムはコンポーネントＸの正味の入力Ｙを決定する。ここで、システムは、コンポーネントＸへの入力ノードを見出すことによって回路設計においてさらに再検査する。各コンポーネントＸの正味の各入力Ｙに対して、正味のＹに接続されるファンインセットＷが存在し得る。この正味のＹのファンインセットＷは、正味のＮのファンインセットに与えられ、コンポーネントＸは、セットＮに与えられる。
【０２３２】
正味のＮのファンアウトセットは同様に決定される。正味のＮファンアウトセットは以下のように決定される。
【０２３３】
【数６】
2005500625.tif 000008
【０２３４】
再度、ゲートクロックまたはデータ論理ネットワークが正味のＮのファンインセットおよびファンアウトセット、ならびにその相互接続を再帰的に決定することによって決定される。本明細書の最終的な目標は、正味のＮのいわゆるファンアウトセットを決定することである。典型的には、正味のＮは、各ファンアウトからのゲートクロック論理を決定するためのクロック出力ノードである。従って、正味のＮを用いる全ての論理素子のセットが決定される。各ファンアウトからのゲートデータ論理を決定するために、正味のＮは、近くにあるデータ出力に関連付けられたクロック出力ノードである。ノードがレジスタ上にある場合、正味のＮは、このレジスタに関連付けられた一次クロック駆動入力に対するこのレジスタの出力である。システムは正味のＮを用いる全コンポーネントを見出す。正味のＮを用いる各コンポーネントＸに対して、システムは、コンポーネントＸが組み合わせコンポーネントであるか否かを決定する。各コンポーネントＸが組み合わせコンポーネントではない場合、正味のＮのファンアウトセットは組み合わせコンポーネントを有さず、正味のＮは一次クロックである。
【０２３５】
しかし、少なくとも１つのコンポーネントＸが組み合わせコンポーネントである場合、システムはコンポーネントＸの正味の出力Ｙを決定する。ここで、システムは、コンポーネントＸからの出力ノードを見出すことによって回路設計における一次クロックからのさらなる転送を検索する。各コンポーネントＸからの正味の各出力Ｙに対して、ファンアウトセットＷは、正味のＹに接続される論理出力セットＷが存在し得る。この正味のＹのファンアウトセットＷは、正味のＮのファンアウトセットに与えられ、コンポーネントＸは、セットＮに与えられる。
【０２３６】
ステップ５０７は、クロックネットワークまたはゲートクロック論理を決定する。クロックネットワークはファンイン組み合わせコンポーネントおよびファンアウト組み合わせコンポーネントの相互接続である。
【０２３７】
同様に、同じファンインおよびファンアウトの原理が使用されて、ゲートデータ論理を決定し得る。ゲートクロックと同様に、ゲートデータは、いくつかの組み合わせ論理によって一次クロックによって駆動されるレジスタ（クロックを除く）のデータまたは制御入力である。ゲートデータ論理はゲートデータのファンインおよび一次クロックからのファンアウトの交点である。従って、クロック解析およびゲートデータ解析は、いくつかの組み合わせ論理およびゲートデータ論理によってゲートクロックネットワーク／ゲートクロック論理を生じる。以下で説明されるように、ゲートクロックネットワークおよびゲートデータネットワーク決定は、ソフトウエアクロックの成功した実現およびエミュレーションの間のハードウエアモデルにおける論理評価に対して重要である。クロック／データネットワーク解析は、ステップ５０８で終了する。
【０２３８】
図１７は、本発明の一実施形態によるハードウエアモデルの基本的な構成ブロックを示す。レジスタコンポーネントに対して、Ｓエミュレーションシステムは、非同期負荷制御を用いて、エッジトリガ（すなわちフリップフロップ）およびレベルに敏感な（すなわちラッチ）レジスタハードウエアモデルを構築するために、基本的なブロックとしてＤタイプフリップフロップを使用する。このレジスタモデル構築ブロックは以下のポートを有する。すなわち、Ｑ（出力状態）、Ａ＿Ｅ（非同期イネーブル）、Ａ＿Ｄ（非同期データ）、Ｓ＿Ｅ（同期イネーブル）、Ｓ＿Ｄ（同期データ）およびもちろんＳｙｓｔｅｍ．ｃｌｋ（システムクロック）である。
【０２３９】
Ｓエミュレーションレジスタモデルは、システムクロックの正のエッジまたは非同期イネーブル（Ａ＿Ｅ）入力の正のレベルによってトリガされる。これらの２つの正のエッジまたは正のレベルのトリガイベントのいずれかが発生する場合、レジスタモデルは非同期イネーブル（Ａ＿Ｅ）入力を検索する。非同期イネーブル（Ａ＿Ｅ）入力がイネーブルされると、出力Ｑは、非同期データ（Ａ＿Ｄ）の値を取得し、そうでなければ、同期イネーブル（Ｓ＿Ｅ）入力がイネーブルされると、出力Ｑは、同期データ（Ｓ＿Ｄ）の値を取得する。一方で、非同期イネーブル（Ａ＿Ｅ）も同期イネーブル（Ｓ＿Ｅ）入力もイネーブルされない場合、出力Ｑは、システムクロックの正のエッジの検出にもかかわらず、評価されない。このように、これらのイネーブルポートに対する入力がこの基本的な構築ブロックレジスタモデルの動作を制御する。
【０２４０】
システムは、特定のイネーブルレジスタであるソフトウエアクロックを使用して、これらのレジスタモデルのイネーブル入力を制御する。複雑なユーザ回路設計では、数１００万の素子が回路設計において見出され、従ってＳエミュレーションシステムは、ハードウエアモデルにおける数１００万の素子を実現する。これらの素子の全てを個別に制御することは高価である。なぜなら、ハードウエアモデルに数１００万の制御信号を送信することに対するオーバーヘッドがソフトウエア内のこれらの素子を評価するよりもより長い時間がかかるためである。しかし、この複雑な回路設計が数クロックのみ（１〜１０）を要求し、レジスタおよび組み合わせコンポーネントのみによってシステムの状態変化を制御するのに十分である。Ｓエミュレーションシステムのハードウエアモデルは、レジスタおよび組み合わせコンポーネントのみ使用する。Ｓエミュレーションシステムは、さらにソフトウエアクロックによってハードウエアモデルの評価を制御する。Ｓエミュレータシステムにおいて、レジスタに対するハードウエアモデルは、他のハードウエアコンポーネントに直接接続されたクロックを有さない。むしろ、ソフトウエアカーネルは全クロックの値を制御する。少しのクロック信号を制御することによって、カーネルは、コプロセッサ処理オーバーヘッドの無視できる量を用いてハードウエアモデルの評価にわたる全ての制御を有する。
【０２４１】
レジスタモデルがラッチまたはフリップフロップとして用いられるかどうかに依存して、ソフトウエアクロックは、非同期イネーブル（Ａ＿Ｅ）または同期イネーブル（Ｓ＿Ｅ）ワイヤ線のいずれかに入力される。ソフトウエアモデルからハードウエアモデルへのソフトウエアクロックの用途は、クロックコンポーネントのエッジ検出によってトリガされる。ソフトウエアカーネルがクロックコンポーネントのエッジを検出する場合、ソフトウエアカーネルは、ＣＬＫアドレス空間を介してクロックエッジレジスタを設定する。このクロックエッジレジスタはハードウエアレジスタモデルに対して、クロック入力ではなくイネーブル入力を制御する。グローバルシステムクロックは、クロック入力をハードウエアレジスタモデルにさらに供給する。しかし、クロックエッジレジスタはソフトウエアクロック信号を、二重バッファインターフェイスを介してハードウエアレジスタモデルに供給する。以下に説明するように、ソフトウエアクロックからハードウエアモデルまでの二重バッファインターフェイスは、全てのレジスタモデルがグローバルシステムクロックに関して同期的に更新されることを確実にする。従って、ソフトウエアクロックの使用は、保持時間の超過の危険を取り除く。
【０２４２】
図１８Ａおよび図１８Ｂは、ラッチおよびフリップフロップに対するビルディングブロックレジスタモデルの実現を示す。これらのレジスタモデルは適切なイネーブル入力を介してソフトウエアクロック制御される。レジスタモデルがフリップフロップまたはラッチとして使用されるかどうかに応じて、非同期ポート（Ａ＿Ｅ、Ａ＿Ｄ）および同期ポート（Ｓ＿Ｅ、Ｓ＿Ｄ）は、ソフトウエアクロックまたはＩ／Ｏ動作のいずれかのために使用される。図１８Ａは、ラッチとして使用される場合のレジスタモデルの実現を示す。ラッチは、レベルに敏感である。すなわち、クロック信号がアサートされた（例えば「１」）限り、出力Ｑは、入力Ｄに従う。ここで、ソフトウエアクロック信号は、非同期イネーブル（Ａ＿Ｅ）入力に供給され、データ入力は、非同期データ（Ａ＿Ｄ）入力に供給される。Ｉ／Ｏ動作に対して、ソフトウエアカーネルは、同期イネーブル（Ｓ＿Ｅ）および同期データ（Ｓ＿Ｄ）入力を使用して、値をＱポートにダウンロードする。このＳ＿ＥポートがＲＥＧ空間アドレスポインタとして使用され、Ｓ＿Ｄは、データをローカルデータバスに／ローカルデータバスからアクセスするために使用される。
【０２４３】
図１８Ｂは、設計フリップフロップとして使用される場合のレジスタモデルの実現を示す。設計フリップフロップは、次の状態論理（データＤ、セット（Ｓ）、リセット（Ｒ）、およびイネーブルＥ）を決定するために以下のポートを使用する。設計フリップフロップの次の状態論理の全ては、同期データ（Ｓ＿Ｄ）入力に供給されるハードウエア組み合わせコンポーネントに分解される。ソフトウエアクロックは、同期イネーブル（Ｓ＿Ｅ）入力へ入力される。Ｉ／Ｏ動作に対して、ソフトウエアカーネルは、非同期イネーブル（Ａ＿Ｅ）および非同期データ（Ａ＿Ｄ）入力を使用して、値をＱポートにダウンロードする。Ａ＿Ｅポートは、ＲＥＧ空間書き込みアドレスポインタとして使用され、Ａ＿Ｄポートが使用されて、データをローカルデータバスに／ローカルデータバスからアクセスする。
【０２４４】
ここで、ソフトウエアクロックが説明される。本発明のソフトウエアクロックの一実施形態は、ハードウエアレジスタモデルへのクロックイネーブル信号であり、これらのハードウエアレジスタモデルへの入力におけるデータがシステムクロックと共におよびシステムクロックと同期して評価される。これはレース条件および保持時間超過を取り除く。ソフトウエアクロック論理の一実施形態では、ソフトウエアにおけるクロックエッジ検出論理を含む。このクロックエッジ検出論理は、クロックエッジ検出に応じてハードウエアにおけるさらなる論理をトリガする。このようなイネーブル信号論理は、データのこれらのハードウエアレジスタモデルへの到達の前に、ハードウエアレジスタモデルへのイネーブル入力にイネーブル信号を生成する。ゲートクロックネットワークおよびゲートデータネットワーク決定は、ハードウエア加速モードの間、ソフトウエアクロックおよびハードウエアモデルにおける論理評価の成功した実現に対して重要である。上述したように、クロックネットワークまたはゲートクロック論理は、ゲートクロックのファンインおよび一次クロックのファンアウトの交点である。同様に、ゲートデータ論理はさらに、ゲートデータのファンインおよびデータ信号に対する一次クロックのファンアウトの交点である。これらのファンインおよびファンアウトの概念は図１６を参照して説明される。
【０２４５】
上述したように、一次クロックは、ソフトウエアのテストベンチプロセスによって生成される。発生したクロックまたはゲートクロックは、組み合わせ論理のネットワークおよび次いで一次クロックによって駆動されたレジスタから生成される。デフォルトによって、本発明のＳエミュレーションシステムは、発生したクロックをソフトウエア内で保持する。発生したクロックの数（例えば１０未満）が小さい場合、これらの発生したクロックはソフトウエアクロックとしてモデル化され得る。これらの発生したクロックを生成する組み合わせコンポーネントの数が小さく、そのため有意なＩ／Ｏオーバーヘッドは、これらの組み合わせコンポーネントをソフトウエア内にモデル化することによって与えられない。しかし、発生したクロックの数が大きい（例えば１０より大きい）場合、これらの発生したクロックおよびこの組み合わせコンポーネントはハードウエアにモデル化され、Ｉ／Ｏオーバヘッドを最小化し得る。
【０２４６】
最終的には、本発明の一実施形態に従って、ソフトウエアにおいて発生する（一次クロックへの入力を介して）クロックエッジ検出が、ハードウエアにおけるクロック検出に変換され得る（クロックエッジレジスタへの入力を介して）。ソフトウエアにおけるクロックエッジ検出は、ハードウエアにおけるイベントをトリガし、ハードウエアモデルにおけるレジスタは、データ信号の前のクロックイネーブル信号を受け取り、データ信号の評価がシステムクロックとの同期において発生し、保持時間超過を回避することを確実にする。
【０２４７】
上述のように、Ｓエミュレーションシステムは、ソフトウエアにおけるユーザの回路設計の完全なモデルおよびハードウエアにおけるユーザの回路設計の幾つかの部分を有する。カーネルにおいて特定されたように、ソフトウエアはハードウエアレジスタ値に影響を与えるクロックエッジを検出し得る。さらにハードウエアレジスタがその各入力を評価することを確実にするために、ソフトウエア／ハードウエア境界はソフトウエアクロックを含む。ソフトウエアクロックは、ハードウエアモデルにおけるレジスタがシステムクロックと同期して、そして任意の保持時間超過なしで評価することを確実にする。ソフトウエアクロックは、ハードウエアレジスタコンポーネントへのクロック入力を制御するのではなく、ハードウエアレジスタコンポーネントのイネーブル入力を実質的に制御する。ソフトウエアクロックを実現するための二重バッファアプローチは、レジスタがシステムクロックと同期させて評価することによってレース条件を回避し、保持時間超過を回避するための緻密なタイミング制御のための必要性を取り除くことを確実にする。
【０２４８】
図１９は、本発明に従うクロックインプリメンテーションシステムの一つの実施形態を示す。最初に、図１６に関して上述されたように、Ｓエミュレータシステムによってゲートクロック論理およびゲートデータ論理が判定される。従って、ゲートクロック論理およびゲートデータ論理は区別される。二重バッファをインプリメントする場合、駆動源および二重バッファ一次論理はまた、区別されるべきである。従って、ゲートデータ論理５１３およびゲートクロック論理５１４は、ファン−イン（ｆａｎ−ｉｎ）およびファン−アウト（ｆａｎ−ｏｕｔ）解析とは区別される。
【０２４９】
モジュール化一次クロックレジスタ５１０は、第１のバッファ５１１および第二のバッファ５１２を含む。これらは、両方ともＤレジスタである。この一次クロックは、ソフトウェアでモジュール化されるが、二重バッファの実現は、ソフトウェアおよびハードウェアの両方でモジュール化される。ソフトウェアにあるプライマルクロックレジスタ５１０でクロックエッジ検出が起こり、ハードウェアモデルをトリガして、ハードウェアモデルへのソフトウェアクロック信号を発生させる。データおよびアドレスは、ワイヤライン５１９および５２０でそれぞれ第１のバッファ５１１に入る。この第１のバッファ５１１のワイヤライン５２１によるＱ出力は、第二のバッファ５１２のＤ入力に結合される。また、この第１のバッファ５１１のＱ出力は、ワイヤライン５２２によってゲートクロック論理５１４へ提供され、最終的にクロックエッジレジスタ５１５の第１のバッファ５１６へのクロック入力を駆動する。ワイヤライン５２３による第二のバッファ５１２からのＱ出力は、ユーザカスタム設計された回路モデルにあるワイヤライン５３０を介してレジスタ５１８の入力を最終的に駆動する。一次クロックレジスタ５１０にある第二のバッファ５１２へのイネーブル入力は、ワイヤライン５３３による状態マシンからのＩＮＰＵＴ−ＥＮ信号である。この状態マシンは、従って、評価サイクルを判定し、かつ、様々な信号を制御する。
【０２５０】
クロックエッジレジスタ５１５は、また、第１のバッファ５１６および第二のバッファ５１７を含む。クロックエッジレジスタ５１５は、ハードウェアでインプリメントされる。（一次クロックレジスタ５１０への入力を介して）ソフトウェアでクロックエッジ検出が起こる場合、このことは、（クロックエッジレジスタ５１５を介して）ハードウェアにあるハードウェアの同じクロックエッジ検出をトリガし得る。ワイヤライン５２４による第１のバッファ５１６へのＤ入力は、論理「１」に設定される。ワイヤライン５２５によるクロック信号は、ゲートクロック論理５１４から導かれ、最終的には、ワイヤライン５２２による第１のバッファ５１１の出力において一次クロックレジスタ５１０から導かれる。ワイヤライン５２５によるこのクロック信号は、ゲートクロック信号である。第１のバッファ５１６へのイネーブルワイヤライン５２６は、Ｉ／Ｏサイクルおよび評価サイクルを制御する状態マシンからの〜ＥＶＡＬ信号である（後に説明される）。第１のバッファ５１６はまた、ワイヤライン５２７によるＲＥＳＥＴ信号を有する。この同じリセット信号は、また、クロックエッジレジスタ５１５にある第二のバッファ５１７に提供される。第１のバッファ５１６のＱ出力は、ワイヤライン５２９によって第二のバッファ５１７のＤ入力に供給される。第二のバッファ５１７は、ＣＬＫ−ＥＮ信号に対するワイヤライン５２８によるイネーブル入力およびワイヤライン５２７によるリセット入力を有する。ワイヤライン５３２による第二のバッファ５１７のＱ出力は、ユーザカスタム設計された回路モデルのレジスタ５１８のイネーブル入力に提供される。レジスタ５１８と共にバッファ５１１、５１２および５１７は、システムクロックによってクロックされる。クロックエッジレジスタ５１５のバッファ５１６のみが、ゲートクロック論理５１４からのゲートクロックによってクロックされる。
【０２５１】
レジスタ５１８は、ハードウェアでモデル化され、かつ、ユーザカスタム回路設計の一部である典型的なＤ型のレジスタモデルである。本発明のクロックインプリメンテーションスキームのこの実施形態は、厳密に評価を制御する。このクロックセットアップの最終的な目標は、ワイヤライン５３２によるクロックイネーブル信号が、ワイヤライン５３０によるデータ信号の前にレジスタ５１８に到達することを保証することである。その結果、このレジスタによるデータ信号の評価は、レース（ｒａｃｅ）状態がなくシステムと同期される。
【０２５２】
繰り返すために、一次クロックレジスタ５１０は、ソフトウェアにモデル化されるが、二重バッファインプリメンテーションは、ソフトウェアとハードウェの両方にモデル化される。クロックエッジレジスタ５１５は、ハードウェアにインプリメントされる。ゲートデータ論理５１３およびゲートクロック論理５１４は、モデル化の目的に対してファン−インおよびファン−アウト解析とは区別される。このゲートデータ論理５１３およびゲートクロック論理５１４は、また、ソフトウェア（ゲートデータおよびゲートクロックが小さい場合）またはハードウェア（ゲートデータおよびゲートクロックが大きい場合）にモデル化され得る。ゲートクロックネットワークおよびゲートデータネットワークを決定することが、ソフトウェアクロックおよびハードウェアアクセラレーションモード中のハードウェアモデルの論理評価をうまくインプリメントするために重要である。
【０２５３】
ソフトウェアクロックのインプリメンテーションは、主に、〜ＥＶＡＬ、ＩＮＰＵＴ−ＥＮ、ＣＬＫ−ＥＮおよびＲＥＳＥＴ信号のアサーションのタイミングに合わせて、図１９で示されるクロックセットアップに依存する。一次クロックレジスタ５１０は、クロックエッジを検出して、ハードウェアモデルに対するソフトウェアクロックの発生をトリガする。このクロックエッジ検出イベントは、ワイヤライン５２５によるクロック入力、ゲートクロック論理５１４、およびワイヤライン５２２を介してクロックエッジレジスタ５１５の「アクティベーション」をトリガする。これにより、クロックレジスタ５１５は、また、同じクロックエッジを検出する。このように、（一次クロックレジスタ５１０への入力５１９および５２０を介して）ソフトウェアで起こるクロック検出は、（クロックエッジレジスタ５１５への入力５２５を介して）ハードウェアにおけるクロックエッジ検出に転換され得る。この時点で、一次クロックレジスタ５１０にある第二のバッファ５１２へのＩＮＰＵＴ−ＥＮワイヤライン５３３、および、クロックエッジレジスタ５１５にある第二のバッファ５１７へのＣＬＫ−ＥＮワイヤライン５２８はアサートされておらず、従って、データは評価されない。次いで、クロックエッジは、データがハードウェアレジスタモデルで評価される前に検出される。この段階で、ワイヤライン５１９によるデータバスからのデータは、ゲートデータ論理５１３およびハードウェアモデル化ユーザレジスタ５１８へ伝搬すらされていないことに留意されたい。確かに、ワイヤライン５３３のＩＮＰＵＴ−ＥＮ信号がまだアサートされていないために、このデータは、一次クロックレジスタ５１０にある第二のバッファ５１２に到達すらしていない。
【０２５４】
Ｉ／Ｏ段階中に、ワイヤライン５２６の〜ＥＶＡＬ信号は、クロックエッジレジスタ５１５にある第１のバッファ５１６をイネーブルするようにアサートされる。〜ＥＶＡＬ信号が、ゲートクロック論理を通って、第１のバッファ５１６のワイヤライン５２５のクロック入力に方向付けるため、〜ＥＶＡＬ信号はまた、ゲートクロック論理５１４を通り、ゲートクロック信号を監視する。従って、四つの状態を評価する状態マシンに関して後に説明されるように、〜ＥＶＡＬ信号は、図１９で示されたシステムの一部を通るデータおよびクロック信号を安定化させるために必要である限り保持され得る。
【０２５５】
信号が安定化した場合、Ｉ／Ｏが完了した場合、そうでなければ、システムがデータを評価する準備が整った場合、〜ＥＶＡＬは、第１のバッファ５１６をディセーブルするようにディアサートされる。ＣＬＫ−ＥＮ信号は、アサートされて、第二のバッファ５１７をイネーブルするためにワイヤライン５２８を介して第二のバッファ５１７に適用され、そして、ワイヤライン５２９によって論理値「１」をレジスタ５１８の入力をイネーブルするために、ワイヤ線５３２によってＱ出力に送る。次に、レジスタ５１８は、イネーブルされて、ワイヤライン５３０にある任意のデータは、システムクロックによってレジスタ５１８内に同期してクロックされる。読み手（ｒｅａｄｅｒ）が理解し得るように、レジスタ５１８へのイネーブル信号は、このレジスタ５１８へのデータ信号の評価よりも速く伝わる。
【０２５６】
ワイヤライン５３３によるＩＮＰＵＴ−ＥＮ信号は、第二のバッファ５１２に対してアサートされない。また、ワイヤライン５２７によるＲＥＳＥＴエッジレジスタ信号は、クロックエッジレジスタ５１５のバッファ５１６および５１７に対してアサートされて、これらのバッファをリセットし、これらの出力が論理「０」であることを保証する。ＩＮＰＵＴ−ＥＮ信号がバッファ５１２に対してアサートされているので、ワイヤライン５２１によるデータは、ここで、ゲートデータ論理５１３へ、そして、ワイヤライン５３０によってユーザの回路レジスタ５１８へ伝搬する。このレジスタ５１８へのイネーブル入力は、ここで、論理「０」であるので、ワイヤライン５３０によるデータは、レジスタ５１８内にクロックされ得ない。しかしながら、以前のデータは、ＲＥＳＥＴ信号がアサートされて、レジスタ５１８をディセーブルする前に、ワイヤライン５３２による以前にアサートされたイネーブル信号によってクロックインされている。従って、レジスタ５１８への入力データ、および、ユーザのハードウェアモデル化回路設計、他のレジスタへの入力は、それぞれのレジスタ入力ポートに対して安定化する。クロックエッジが、実質的にソフトウェアに検出される場合、一次クロックレジスタ５１０およびハードウェア内のクロックエッジレジスタ５１５は、レジスタ５１８へのイネーブル入力をアクティブにする。その結果、レジスタ５１８の入力を待機するデータおよびそれぞれのレジスタへの入力を待機する他のデータは、同時に、および、システムクロックにより同期してクロックインされる。
【０２５７】
上記されたように、ソフトウェアクロックインプリメンテーションは、主に、〜ＥＶＡＬ、ＩＮＰＵＴ−ＥＮ、ＣＬＫ−ＥＮ、および、ＲＥＳＥＴ信号をアサートするタイミングに合わせた図１９に示されたクロックセットアップに依存する。図２０は、本発明の一つの実施形態に従う図１９のソフトウェアクロック論理を制御する有限状態マシンの四つの状態を示す。
【０２５８】
状態５４０において、システムは、アイドル状態である、または、いくつかのＩ／Ｏ動作が進行中である。ＥＶＡＬ信号は、論理「０」である。システムコントローラによって生成されたＥＶＡＬ信号は、評価サイクルを判定し、システムの論理を安定化するために、必要なだけ多くのクロックサイクルが続く。通常、ＥＶＡＬ信号の持続期間は、コンパイル中の配置スキームによって判定され、最長ダイレクトワイヤの長さ、および、最長分割多重ワイヤ（すなわち、ＴＤＭ回路）に基づく。評価中のＥＶＡＬ信号は、論理「１」である。
【０２５９】
状態５４１では，クロックはイネーブルされている。ＣＬＫ−ＥＮ信号は、論理「１」にアサートされて、次いで、ハードウェアレジスタモデルに対するイネーブル信号がアサートされる。ここで、ハードウェアレジスタモデルにおける以前のゲートデータは、保持時間に違反する危険がなく、同期して評価される。
【０２６０】
状態５４２において、新しいデータがＩＮＰＵＴ−ＥＮ信号が論理「１」にアサートされる場合、ＲＥＳＥＴ信号もまた、ハードウェアレジスタモデルからイネーブル信号を取り除くためにアサートされる。しかしながら、ゲートデータ論理ネットワークを通ってハードウェアレジスタモデル内にイネーブルされた新規のデータは、ハードウェアレジスタモデルの意図された宛先へ伝搬し続けるか、または、その宛先に到達するかであり、イネーブル信号が再びアサートされる場合、および、イネーブル信号が再びアサートされるとき、ハードウェアレジスタモデル内にクロックされるのを待機している。
【０２６１】
状態５４３において、伝搬する新規のデータは、ＥＶＡＬ信号が論理「１」である間、論理が安定化している。また、多重通信ワイヤは、図９Ａ、図９Ｂおよび図９Ｃに関連して、時分割多重（ＴＤＭ）回路として上述されたように、論理「１」である。ＥＶＡＬ信号が、デアサートされるまたは、論理「０」に設定される場合、システムは、アイドル状態５４０に戻り、ソフトウェアによるクロックエッジの検出に基づく評価を待機する。
【０２６２】
（Ｄ．ＦＰＧＡアレイおよび制御）
Ｓエミュレータシステムは、最初に、ソフトウェアモデルおよび要素の種類を含む様々な制御に基づいたハードウェアモデル内にユーザ回路設計データをコンパイルする。ハードウェアのコンパイルプロセス中に、システムは、ユーザの回路設計を作り上げる様々な要素を最適に区切る、設置する、および、相互接続するための図６に関して以前に説明されたようなマッピング、配置、ルーティングプロセスを実行する。公知のプログラミングツールを用いて、ビットストリームコンフィギュレーションファイルまたはプログラマオブジェクトファイル（．ｐｏｆ）（あるいは、元のバイナリファイル（．ｒｂｆ））が参照され、多くのＥＰＧＡチップを含むハードウェアボードを再構成する。各チップは、ユーザの回路設計に相当するハードウェアの一部を含む。
【０２６３】
一実施形態において、Ｓエミュレータシステムは、４×４のＦＰＧＡチップのアレイ（計１６チップ）を使用する。例示的なＦＰＧＡチップは、ＦＰＧＡ論理デバイス、および、Ａｌｔｅｒａ  ＦＬＥＸ  １０Ｋ  デバイスのＸｉｌｉｎｘ  ＸＣ４０００  シリーズ系統を含む。
【０２６４】
ＸＣ４０００、ＸＣ４０００Ａ、ＸＣ４０００Ｄ、ＸＣ４０００Ｈ、ＸＣ４０００Ｅ、ＸＣ４０００ＥＸ、ＸＣ４０００Ｌ、および、ＸＣ４０００ＸＬを含むＦＰＧＡのＸｉｌｉｎｘ  ＸＣ４０００シリーズが用いられ得る。特定のＦＰＧＡは、Ｘｉｌｉｎｘ  ＸＣ４００５Ｈ、ＸＣ４０２５、および、Ｘｉｌｉｎｘ４０２８ＥＸを含む。Ｘｉｌｉｎｘ  ＸＣ４０２８ＥＸ  ＦＰＧＡエンジンの容量は、単一のＰＣＩボード上で５０万ゲートまで近づいている。これらのＸｉｌｉｎｘ  ＦＰＧＡの詳細は、それらのデータブック（Ｘｉｌｉｎｘ、Ｔｈｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄａｔａ  Ｂｏｏｋ  （９／９６））から得ることができる。このデータブックは、本明細書中で参照として援用される。Ａｌｔｅｒａ  ＦＰＧＡの場合、詳細は、これらのデータブック（Ａｌｔｅｒａ、Ｔｈｅ  １９９６  Ｄａｔａ  Ｂｏｏｋ  （１９９６年６月））で見つけることができる。このデータブックは、本明細書中で参照として援用される。
【０２６５】
ＸＣ４０２５ＦＰＧＡの簡単で一般的な詳細が提供される。各アレイチップは、２４０ピンのＸｉｌｉｎｘのチップからなる。Ｘｉｌｉｎｘ  ＸＣ４０２５で密集されたアレイボードは、約４４０，０００個の構造化可能なゲートを含み、コンピュータで集約してタスクを実行することが可能である。Ｘｉｌｉｎｘ  ＸＣ４０２５ＦＰＧＡは、１０２４個の構造化可能な論理ブロック（ＣＬＢ）からなる。各ＣＬＢは、３２ビット非同期ＳＲＡＭ、または、少量の一般的なブール論理、および、ストローブされた二つのレジスタをインプリメントし得る。チップの周囲において、ストローブされていないＩ／Ｏレジスタが提供される。ＸＣ４０２５の代替物は、ＸＣ４００５Ｈである。１２０，０００個の構造化可能なゲートを有するアレイボードの比較的低いコストのバージョンである。ＸＣ４００５Ｈデバイスは、高電力２４ｍＡの駆動回路を有するが、標準的なＸＣ４０００シリーズでは、入力／出力フリップ／フロップを欠いている。これらのＸｉｌｉｎｘ  ＦＰＧＡ、および、他のＸｉｌｉｎｘ  ＦＰＧＡの詳細は、それらの公共で利用可能なデータシートを通して得られ得る。このデータシートは本明細書中で参照として援用される。
【０２６６】
Ｘｉｌｉｎｘ  ＸＣ４０００シリーズＦＰＧＡの機能は、配置データを内部メモリセル内にロードすることによってカスタマイズされ得る。これらのメモリセルに格納された値は、ＦＰＧＡの論理関数および論理相互接続を決定する。これらのＦＰＧＡの配置データは、オンチップメモリに格納され得、外部メモリからロードされ得る。ＦＰＧＡが、外部シリアルＰＲＯＭまたは外部パラレルＰＲＯＭからの配置データを読み出し得るか、あるいは、配置データが、外部デバイスからＦＰＧＡ内に書き込まれ得るかのいずれかである。これらのＦＰＧＡは、特にハードウェアが動的に変化される場合、または、ユーザが、ハードウェアが異なるアプリケーションに適応されるように望む場合に、無制限に何回でも再プログラムされ得る。
【０２６７】
概していうと、ＸＣ４０００シリーズＦＰＧＡは、１０２４個までのＣＬＢを有する。各ＣＬＢは、三つの入力を有する第三のルックアップテーブル（または、関数発生器Ｈ）、ならびに、二つのフリップ−フロップまたはラッチへの入力のうちのいくつかを提供する四つの入力を有する二つのルック−アップテーブル（または、関数発生器ＦおよびＧ）と共に、二つのルック−アップテーブルのレベルを有する。これらのルック−アップテーブルの出力は、これらのフリップ−フロップまたはラッチと独立して駆動され得る。ＣＬＢは、随意のブール関数（（１）四つまたは五つの変数を有する任意の関数、（２）四つの変数を有する任意の関数、四つまでの無関係の変数を有する任意の第二の関数、三つまでの無関係の変数を有する任意の第三の関数、（３）四つの変数を有する一つの関数および六つの変数を有する別の関数、（４）四つの変数を有する任意の二つの関数、（５）九つの変数を有するいくつかの関数）の次の組み合わせをインプリメントし得る。二つのＤ型フリップ−フロップまたはラッチは、ＣＬＢ入力を登録する、または、ルック−アップテーブルの出力を格納するために利用可能である。これらのフリップ−フロップは、ルック−アップテーブルとは独立して用いられ得る。ＤＩＮは、これらの二つのフリップ−フロップのうちの一つまたはラッチのいずれかへの直接入力として用いられ得、Ｈ１は、Ｈ関数発生器を通して他方を駆動する。
【０２６８】
ＣＬＢ（すなわち、ＦおよびＧ）の四つの入力関数発生器の各々は、繰り上げ信号および借り信号を迅速に発生するための専用演算論理を含む。この専用演算論理は、キャリー−インおよびキャリー−アウトを有する２ビット加算器をインプリメントするように配置され得る。また、これらの関数生成器は、読み出し／書き込みランダムアクセスメモリ（ＲＡＭ）としてインプリメントされ得る。四つの入力ワイヤラインは、ＲＡＭのためのアドレスラインとして用いられる。
【０２６９】
Ａｌｔｅｒａ  ＦＬＥＸ  １０Ｋチップは、コンセプトがやや似ている。これらのチップは、複数の３２ビットバスを有するＳＲＡＭを基礎としたプログラマブル論理デバイス（ＰＬＤ）である。特に、各ＦＬＥＸ  １０Ｋ１００チップは、約１，０００，０００個のゲート、１２個の埋め込みアレイブロック（ＥＡＢ）、６２４個の論理アレイブロック（ＬＡＢ）、ＬＡＢ一個につき８個の論理素子（ＬＥ）（または、４，９９２個のＬＥ）、５，３９２個のフリップ−フロップまたはレジスタ、４０６個のＩ／Ｏピン、および、全体で５０３個のピンを含む。
【０２７０】
Ａｌｔｅｒａ  ＦＬＥＸ  １０Ｋチップは、埋め込みアレイブロック（ＥＢＡ）の埋め込みアレイ、および、論理アレイブロック（ＬＡＢ）の論理アレイを含む。ＥＡＢは、様々なメモリ（例えば、ＲＡＭ、ＲＯＭ、ＦＩＦＯ）、および、複素論理関数（例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、乗算器、データ変換関数、状態マシン）をインプリメントするように用いられ得る。メモリ関数をインプリメントするために、ＥＡＢは、２，０４８ビットを提供する。論理関数をインプリメントするために、ＥＡＢは、１００から６００個のゲートを提供する。
【０２７１】
ＬＡＢは、ＬＥを介して、中間の大きさの論理ブロックをインプリメントするように用いられ得る。各ＬＡＢは、約９６個の論理ゲートを表し、８個のＬＥおよび局所的な相互接続を含む。ＬＥは、４つの入力を有するルック−アップテーブル、プログラマブルフリップ−フロップ、ならびに、桁上げおよびカスケード関数のための専用信号パスを含む。作成され得る典型的な論理関数は、カウンタ、アドレス符号器、または、小さな状態マシンを含む。
【０２７２】
Ａｌｔｅｒａ  ＦＬＥＸ１０Ｋのより詳細な説明は、Ａｌｔｅｒａ、１９９６ＤＡＴＡ  ＢＯＯＫ（１９９６年６月）に見出され得、本明細書中で参照として援用される。データブックは、また、支援プログラミングソフトウェアの詳細を含む。
【０２７３】
図８は、４×４ＦＰＧＡアレイ、および、それらの相互接続の一実施形態を示す。Ｓエミュレータのこの実施形態は、ＦＰＧＡチップに対してクロスバーまたは部分的クロスバー接続を用いていない。ＦＰＧＡチップは、第１行にチップＦ１１〜Ｆ１４、第二行にチップＦ２１〜Ｆ２４、第三行にチップＦ３１〜Ｆ３４、および、第四行にチップＦ４１〜Ｆ４４を含む。一実施形態において、各ＦＰＧＡ（例えば、チップＦ２３）は、ＳエミュレータシステムのＦＰＧＡＩ／Ｏコントローラへのインタフェースに対して以下のピンを有する。
【０２７４】
【表１】
2005500625.tif 000009
【０２７５】
従って、一実施形態において、各ＥＰＧＡチップは、Ｓエミュレータシステムとインタフェースするために４１個のピンのみを用いる。これらのピンは、図２２に関してさらに説明される。
【０２７６】
これらのＦＰＧＡチップは、非クロスバー相互接続または非部分的クロスバー相互接続を介して互いに相互接続される。チップＦ１１とチップＦ１４との間の相互接続６０２等のチップ間の各相互接続は、４４個のピンまたは４４本のワイヤラインを表す。他の実施形態において、各相互接続は、４４個より多いピンを表す。さらに他の実施形態において、各部接続は、４４個未満のピンを表す。
【０２７７】
各チップは、６つの相互接続を有する。例えば、チップＦ１１は、相互接続６００〜６０５を有する。また、チップＦ３３は、相互接続６０６〜６１１を有する。これらの相互接続は、行に沿って水平に、そして、列に沿って垂直に走る。各相互接続は、行に沿った二つのチップ間の直接接続、または、列に沿った二つのチップ間の直接接続を提供する。従って、例えば、相互接続６００はチップＦ１１とチップＦ１３とを直接接続する；相互接続６０１はチップＦ１１とチップＦ１２とを直接接続する；相互接続６０２はチップＦ１１とチップＦ１４とを直接接続する；相互接続６０３はチップＦ１１とチップＦ３１とを直接接続する；相互接続６０４はチップＦ１１とチップＦ２１とを直接接続する；相互接続６０５はチップＦ１１とチップＦ４１とを直接接続する。
【０２７８】
同様に、アレイのエッジに位置（例えば、Ｆ１１）していないチップＦ３３に関して、相互接続６０６はチップＦ３３とチップＦ１３とを直接接続する；相互接続６０７はチップＦ３３とチップＦ２３とを直接接続する；相互接続６０８はチップＦ３３とチップＦ３４とを直接接続する；相互接続６０９はチップＦ３３とチップＦ４３とを直接接続する；相互接続６１０はチップＦ３３とチップＦ３１とを直接接続する；相互接続６１１はチップＦ３３とチップＦ３２とを直接接続する。
【０２７９】
チップＦ１１がチップＦ１３から１ホップ内に位置しているので、相互接続６００は、「１」と表示される。チップＦ１１がチップＦ１２から１ホップ内に位置しているので、相互接続６０１は、「１」として表示される。同様に、チップＦ１１がチップＦ１４から１ホップ内に位置しているので、相互接続６０２は、「１」として表示される。同様に、チップＦ３３に関して、全ての相互接続は、「１」として表示される。
【０２８０】
この相互接続スキームによって、各チップは、２回以内の「ジャンプ」、または、相互接続でアレイにある任意の他のチップと通信することができる。従って、チップＦ１１は、以下の二つの経路（（１）相互接続６００から相互接続６０６へ；または（２）相互接続６０３から相互接続６１０へ）のいずれかを通ってチップＦ３３に接続される。つまり、この経路は、（１）最初は行に沿って、次に列に沿って、または、（２）最初は列に沿って、次に行に沿って、のいずれかであり得る。
【０２８１】
図８は、水平および垂直の相互接続で４×４のアレイに配置されたＦＰＧＡチップを示すが、ボード上の実際の物理的インプリメンテーションは、拡張ピギーバックボードを有する低および高バンクを通っている。このようにして、一実施形態において、チップＦ４１〜Ｆ４４、およびＦ２１〜Ｆ２４は、低バンクにある。チップＦ３１〜Ｆ３４およびＦ１１〜Ｆ１４は、高バンクにある。ピギーバックボードは、チップＦ１１〜Ｆ１４、および、Ｆ２１〜Ｆ２４を含む。従って、アレイを拡張するために、多くの（例えば、８個の）チップを含むピギーバックボードが、バンクに（つまり、現在チップＦ１１〜Ｆ１４を含む行の上に）加えられる。他の実施形態において、ピギーバックボードは、現在チップＦ４１〜Ｆ４４を含む行の下にアレイを拡張する。さらなる実施形態は、チップＦ１４、Ｆ２４、Ｆ３４およびＦ４４の右側へ拡張することを可能にする。さらに他の実施形態は、チップＦ１１、Ｆ２１、Ｆ３１およびＦ４１の左側へ拡張することを可能にする。
【０２８２】
図７は、「１」または「０」に置き換えて表示された場合の図８の４×４のＦＰＧＡアレイに対する連結マトリクスを示す。この連結マトリクスは、ハードウェアマッピング、配置、および、このＳエミュレーションシステムに対するルーティングプロセスに用いられるコスト関数から生じる設置コストを生成するために用いられる。このコスト関数は、図６に関して上記で説明された。例として、チップＦ１１は、チップＦ１３から１ホップ内に位置し、従って、Ｆ１１〜Ｆ１３に関する連結マトリクスの入力は、「１」である。
【０２８３】
図２１は、本発明の一実施形態に従う単一のＦＰＧＡチップに対する相互接続ピン−アウトを示す。ここで、各チップは、相互接続の六つのセットを有し、各セットは、特定の数のピンを含む。一実施形態において、各セットは４４個のピンを有する。各ＦＰＧＡチップの相互接続は、水平（東西）、および、垂直（南北）を向く。西向きの相互接続のセットは、Ｗ［４３：０］として表示される。東向きの相互接続のセットは、Ｅ［４３：０］として表示される。北向きの相互接続のセットは、Ｎ［４３：０］として表示される。南向きの相互接続のセットは、Ｓ［４３：０］として表示される。相互接続のこれらの完全なセットは、隣接するチップへの接続に関する。つまり、これらの相互接続は、任意のチップを越えて「ホップ」しない。例えば、図８において、チップＦ３３は、Ｎ［４３：０］に対する相互接続６０７、Ｅ［４３：０］に対する相互接続６０８、Ｓ［４３：０］に対する相互接続６０９、および、Ｗ［４３：０］に対する相互接続６１１を有する。
【０２８４】
図２１に戻ると、二つのさらなる相互接続のセットが残っている。相互接続の一つのセットは、垂直に走る隣接しない相互接続（ＹＨ［２１：０］およびＹＨ［４３：２２］）に関する。相互接続の他のセットは、ＸＨ［２１：０］およびＸＨ［４３：２２］を水平に走る隣接しない相互接続に関する。各セット、ＹＨ［．．．］およびＸＨ［．．．］は、二つに分けられ、一つのセットの各半分が２２個のピンを含む。この配置によって、各チップを同様に製造することが可能である。従って、各チップは、上、下、左および右に位置する隣接しないチップへ１ホップで相互接続可能である。このＦＰＧＡチップは、また、全体的な信号、ＦＰＧＡバス、および、ＪＴＡＧ信号に対するピン（単数または複数）を示す。
【０２８５】
次に、ＦＰＧＡ  Ｉ／Ｏコントローラが説明される。このコントローラは、アイテム３２７として図１０で最初に簡潔に導入された。ＦＰＧＡ  Ｉ／Ｏコントローラは、データを管理し、ＰＣＩバスとＦＰＧＡアレイとの間のトラフィックを制御する。
【０２８６】
図２２は、ＦＰＧＡチップのバンクに沿った、ＦＰＧＡチップＰＣＩバスとＦＰＧＡアレイとの間のＦＰＧＡコントローラの一実施形態を示す。ＦＰＧＡ  Ｉ／Ｏコントローラ７００は、ＣＴＲＬ＿ＦＰＧＡユニット７０１、クロックバッファ７０２、ＰＣＩコントローラ７０３、ＥＥＰＲＯＭ７０４、ＦＰＧＡシリアル配置インタフェース７０５、境界スキャンテストインタフェース７０６、および、バッファ７０７を含む。回路を調節する当業者に公知の適切な電力／電圧が提供される。例示的な供給源は、電圧検出器／レギュレータに結合されたＶＣＣ、および、様々な環境状態で電圧を実質的に維持するセンス増幅器を含む。各ＦＰＧＡチップへのＶＣＣは、薄膜ヒューズをそれらの間で素早く動かして供給される。ＶＣＣ−ＨＩは、全てのＦＰＧＡ  チップへのＣＯＮＦＩＧ＃に、および、ＬＯＣＡＬ＿ＢＵＳ７０８へのＬＩＮＴＩ＃に提供される。
【０２８７】
ＣＴＲＬ＿ＦＰＧＡユニット７０１は、様々な制御、試験を扱い、かつ、様々なユニットおよびバス間の実質的なデータを読み出す／書き込むＦＰＧＡ  Ｉ／Ｏコントローラ７００に対する一次コントローラである。ＣＴＲＬ＿ＦＰＧＡユニット７０１は、ＦＰＧＡチップの低バンクおよび高バンクに結合される。ＦＰＧＡチップＦ４１〜Ｆ４４およびＦ２１〜Ｆ２４（すなわち、低バンク）は、低ＦＰＧＡバス７１８に結合される。これらのＦＰＧＡチップＦ１１〜Ｆ１４、Ｆ２１〜Ｆ２４、Ｆ３１〜Ｆ３４およびＦ４１〜Ｆ４４は、参照番号を保ったまま、図８のＦＰＧＡチップに一致する。
【０２８８】
これらのＦＰＧＡチップＦ１１〜Ｆ１４、Ｆ２１〜Ｆ２４、Ｆ３１〜Ｆ３４およびＦ４１〜Ｆ４４、および、低バンクバス７１８および高バンクバス７１９の間に、適切なローディングをするための厚いフィルムチップレジスタがある。低バンクバス７１８に結合されたレジスタ７１３のグループは、例えば、レジスタ７１６および７１７を含む。高バンクバス７１９に結合されたレジスタ７１２のグループは、例えば、レジスタ７１４および７１５を含む。
【０２８９】
拡張が所望ならば、ＦＰＧＡチップは、Ｆ１１およびＦ１２のＦＰＧＡチップの右方向にある低バンクバス７１８および高バンクバス７１９にさらにインストールされ得る。一実施形態において、ピギーバックボード７２０と共通点があるピギーバックボードを介して拡張される。従って、ＦＰＧＡチップのこれらのバンクが、最初に８つのＦＰＧＡチップＦ４１〜Ｆ４４、およびＦ３１〜Ｆ３４のみを有する場合、ピギーバックボード７２０を追加することによってさらに拡張が可能になる。ピギーバックボード７２０は、低バンクにおいてＦＰＧＡチップＦ２４〜Ｆ２１を含み、高バンクにおいてＦＰＧＡチップＦ１４〜Ｆ１１を含む。ピギーバックボード７２０はまた、追加の低バンクバスおよび高バンクバス、ならびに、厚膜チップレジスタを含む。
【０２９０】
ＰＣＩコントローラ７０３は、ＦＰＧＡ  Ｉ／Ｏコントローラ７００と３２ビットＰＣＩバス７０９との間の一次ンタフェースである。ＰＣＩバスが６４ビットおよび／または６６ＭＨｚに拡張される場合、本発明の意図および範囲から逸脱することなく、このシステムにおいて適切な調整がなされ得る。これらの調整は、以下に記載される。このシステムにおいて使用され得るＰＣＩコントローラ７０３の一実施形態は、ＰＬＸ技術のＰＣＩ９０８０または９０６０である。ＰＣＩ９０８０は、適切なローカルバスインタフェース、制御レジスタ、ＦＩＦＯ、およびＰＣＩへのＰＣＩインタフェースを有する。データブックＰＬＸ技術、ＰＣＩ９０８０データシート（ｖｅｒ．０．９３、１９９７年２月２８日）が、本明細書中に参考として援用される。
【０２９１】
ＰＣＩコントローラ７０３は、ＬＯＣＡＬ＿ＢＵＳ７０８を介して、ＣＴＲＬ＿ＦＰＧＡユニット７０１とＰＣＩバス７０９との間にデータを通す。ＬＯＣＡＬ＿ＢＵＳは、制御信号のための制御バス部分、アドレス信号のためのアドレスバス部分、およびデータ信号を制御のためのデータバス部分を含む。ＰＣＩバスが６４ビットに拡張される場合、ＬＯＣＡＬ＿ＢＵＳ７０８のデータバス部分もまた、６４ビットに拡張され得る。ＰＣＩコントローラ７０３は、ＥＥＰＲＯＭ７０４に接続される。ＥＥＰＲＯＭ７０４は、ＰＣＩコントローラ７０３の構成データを含む。例示のＥＥＰＲＯＭ７０４は、国産の半導体の９３ＣＳ４６である。
【０２９２】
ＰＣＩバス７０９は、３３ＭＨｚのクロック信号をＦＰＧＡ  Ｉ／Ｏコントローラ７００に供給する。クロック信号は、同期化の目的のため、および低タイミングスキューのためにワイヤ線７１０を介してクロックバッファ７０２に提供される。このクロックバッファ７０２の出力は、ワイヤ線７１１を介して全てのＦＰＧＡチップに供給され、かつ、ワイヤ線７２１を介してＣＴＲＬ＿ＦＰＧＡユニット７０１に供給された３３ＭＨｚのグローバルクロック（ＧＬ＿ＣＬＫ）信号である。ＰＣＩバスが６６ＭＨｚに拡張される場合、クロックバッファはまた、システムに６６ＭＨｚを供給する。
【０２９３】
ＦＰＧＡシリアル構成インタフェース７０５は、ＦＰＧＡチップＦ１１〜Ｆ１４、Ｆ２１〜Ｆ２４、Ｆ３１〜Ｆ３４、およびＦ４１〜Ｆ４４を構成するために構成データを提供する。Ａｌｔｅｒａデータブック（Ａｌｔｅｒａ、１９９６データブック（１９９６年６月））は、構成デバイスおよびプロセッサの詳細な情報を提供する。ＦＰＧＡシリアル構成インタフェース７０５はまた、ＬＯＣＡＬ＿ＢＵＳ７０８およびパラレルポート７２１に結合される。さらに、ＦＰＧＡシリアル構成インタフェース７０５は、ＣＯＮＦ＿ＩＮＴＦワイヤ線７２３を介して、ＣＴＲＬ＿ＦＰＧＡユニット７０１およびＦＰＧＡチップＦ１１〜Ｆ１４、Ｆ２１〜Ｆ２４、Ｆ３１〜Ｆ３４、およびＦ４１〜Ｆ４４に結合される。
【０２９４】
境界スキャンテストインタフェース７０６は、ある特有のテストコマンドセットのＪＴＡＧ装置を提供して、プロセッサの論理ユニットまたはシステムの論理ユニットおよびソフトウェアによる回路部を外部からチェックする。このインタフェース７０６は、ＩＥＥＥ  Ｓｔｄ．１１４９．１−１９９０規格に準拠する。Ａｌｔｅｒａデータブック（Ａｌｔｅｒａ、１９９６データブック（１９９６年６月）およびアプリケーションノート３９（ＡｌｔｅｒａデバイスにおけるＪＴＡＧ境界スキャンテスト）を参照して、それらは共に、さらなる情報のために本明細書中参考として援用される。境界スキャンテストインタフェース７０６は、さらに、ＬＯＣＡＬ＿ＢＵＳ７０８およびパラレルポート７２２に結合される。さらに、境界スキャンテストインタフェース７０６は、ＢＳＴ＿ＩＮＴＦワイヤ線７２４を介してＣＴＲＬ＿ＦＰＧＡユニット７０１およびＦＰＧＡチップＦ１１〜Ｆ１４、Ｆ２１〜Ｆ２４、Ｆ３１〜Ｆ３４、およびＦ４１〜Ｆ４４に接続される。
【０２９５】
ＣＴＲＬ＿ＦＰＧＡユニット７０１は、バッファ７０７、低バンク３２ビットＦＤ［３１：０］のＦ＿ＢＵＳ７２５および高バンク３２ビットＦＤ［６３：３２］のＦ＿ＢＵＳ７２６と共に、低バンク３２ビットバス７１８を介して、ＦＰＧＡチップの低（チップＦ４１〜Ｆ４４およびＦ２１〜Ｆ２４）バンク、および高バンク３２ビットバス７１９を介して、ＦＰＧＡチップの高（チップＦ３１〜Ｆ３４およびＦ１１〜Ｆ１４）バンクに／からデータをそれぞれ通す。
【０２９６】
一実施形態では、低バンクバス７１８および高バンクバス７１９におけるＰＣＩバス７０９の処理能力を重複させる。ＰＣＩバス７０９は、３３ＭＨｚにおいて３２ビット幅である。従って、処理能力は、１３２ＭＢＸ（＝３３ＭＨｚ＊４バイト）である。低バンクバス７１８は、ＰＣＩバス周波数の半分（３３／２ＭＨｚ＝１６．５ＭＨｚ）である３２ビットである。高バンクバス７１９はまた、ＰＣＩバス周波数の半分（３３／２＝１６．５ＭＨｚ）である３２ビット幅である。６４ビットの低バンクバスおよび高バンクバスの処理能力はまた、１３２ＭＢＸ（＝１６．５ＭＨｚ＊８バイト）である。従って、低バンクバスおよび高バンクバスの性能は、ＰＣＩバスの性能を追跡する。言い換えると、性能制限は、低バンクバスおよび高バンクバスではなく、ＰＣＩバス状態にある。
【０２９７】
本発明の一実施形態によるアドレスポインタは、さらに各ソフトウェア／ハードウェア境界アドレススペースの各ＦＰＧＡチップにおいて実施される。これらのアドレスポインタは、多重化されたクロスチップアドレスポインタチェーンを通して、いくつかのＦＰＧＡチップにわたってつながれる。図９、１１、１２、１４、および１５に関する上述のアドレスポインタの考察を参照すること。所与のアドレススペースに関連したアドレスポインタのチェーンおよびいくつかのチップにわたってワード選択信号を移動するために、チェーンアウト（ｃｈａｉｎ−ｏｕｔ）ワイヤ線が提供される必要がある。これらのチェーンアウトワイヤ線は、チップ間の矢印として示される。低バンクに対する１つのこのようなチェーンアウトワイヤ線は、チップＦ２３とＦ２２との間のワイヤ線７３０である。高バンクに対する別のこのようなチェーンアウトワイヤ線は、チップＦ３１とＦ３２との間のワイヤ線７３１である。低バンクチップＦ２１の端部におけるチェーンアウトワイヤ線７３２は、ＬＡＳＴ＿ＳＨＩＦＴ＿ＬとしてＣＴＲＬ＿ＦＰＧＡユニット７０１に結合される。高バンクチップＦ１１の端部におけるチェーンアウトワイヤ線７３３は、ＬＡＳＴ＿ＳＨＩＦＴ＿ＨとしてＣＴＲＬ＿ＦＰＧＡユニット７０１に結合される。これらの信号ＬＡＳＴ＿ＳＨＩＦＴ＿ＬおよびＬＡＳＴ＿ＳＨＩＦＴ＿Ｈは、ワード選択信号がＦＰＧＡチップを介して伝達されるように、それらの各バンクのためのワード選択信号である。これらの信号ＬＡＳＴ＿ＳＨＩＦＴ＿ＬおよびＬＡＳＴ＿ＳＨＩＦＴ＿Ｈのどちらかが、ＣＴＲＬ＿ＦＰＧＡユニット７０１に対して論理「１」を表すと、これは、ワード選択信号がチップのそれぞれのバンクの端部に伝わることを示す。
【０２９８】
ＣＴＲＬ＿ＦＰＧＡユニット７０１は、ワイヤ線７３４の書き込み信号（Ｆ＿ＷＲ）、ワイヤ線７３５の読み出し信号（Ｆ＿ＲＤ）、ワイヤ線７３６のＤＡＴＡ＿ＸＳＦＲ信号、ワイヤ線７３７のＥＶＡＬ信号、およびワイヤ線７３８のＳＰＡＣＥ［２：０］信号をＦＰＧＡチップに、およびＦＰＧＡチップから提供する。ＣＴＲＬ＿ＦＰＧＡユニット７０１は、ワイヤ線７３９のＥＶＡＬ＿ＲＥＱ＃信号を受け取る。書き込み信号（Ｆ＿ＷＲ）、読み出し信号（Ｆ＿ＲＤ）、ＤＡＴＡ＿ＸＳＦＲ信号、およびＳＰＡＣＥ［２：０］信号は、ＦＰＧＡチップにおけるアドレスポインタと共に機能する。書き込み信号（Ｆ＿ＷＲ）、読み出し信号（Ｆ＿ＲＤ）、およびＳＰＡＣＥ［２：０］信号を用いて、ＳＰＡＣＥインデックス（ＳＰＡＣＥ［２：０］）によって決定されるように、選択されたアドレススペースと関連するアドレスポインタのＭＯＶＥ信号を生成する。ＤＡＴＡ＿ＸＳＦＲ信号を用いて、アドレスポインタを初期化して、逐語的データ転送プロセスを始める。
【０２９９】
ＥＶＡＬ＿ＲＥＱ＃信号を用いて、いくつかのＦＰＧＡチップがこの信号をアサートする場合、再び全ての点で評価サイクルを始める。例えば、データを評価するために、データは、ＰＣＩバスを介してホストプロセッサの計算ステーションのメインメモリからＦＰＧＡに転送されるか、または書き込まれる。転送が終了すると、評価サイクルは、アドレスポインタの初期化およびソフトウェアクロックの動作を含み始めて、評価プロセスを容易にする。しかし、様々な理由のために、特定のＦＰＧＡチップは、再び全ての点でデータを評価する必要があり得る。このＦＰＧＡチップは、ＥＶＡＬ＿ＲＥＱ＃信号をアサートし、ＣＮＴＦ＿ＦＰＧＡチップ７０１は、再び全ての点で評価サイクルを始める。
【０３００】
図２３は、図２２のＣＴＲＬ＿ＦＰＧＡユニット７０１およびバッファ７０７のより詳細な図を示す。図２２に示されるＣＴＲＬ＿ＦＰＧＡユニット７０１に関する同様の入力／出力信号およびそれらに対応する参照符号はまた、図２３において保持され、使用される。しかし、図２２に示されないさらなる信号およびワイヤ／バスライン（例えば、ＳＥＭ＿ＦＰＧＡ出力イネーブル１０１６、ローカル割り込み出力（Ｌｏｃａｌ  ＩＮＴＯ）７０８ａ、ローカル読み出し／書き込み制御信号７０８ｂ、ローカルアドレスバス７０８ｃ、ローカル割り込み入力（Ｌｏｃａｌ  ＩＮＴＩ＃）７０８ｄ、およびローカルデータバス７０８ｅ）が、新しい参照符号と共に記載される。
【０３０１】
ＣＴＲＬ＿ＦＰＧＡユニット７０１は、転送完了チェッキング論理（ＸＳＦＲ＿ＤＯＮＥ  Ｌｏｇｉｃ）１０００、評価制御論理（ＥＶＡＬ  Ｌｏｇｉｃ）１００１、ＤＭＡ記述子ブロック１００２、制御レジスタ１００３、評価タイマー論理（ＥＶＡＬ  ｔｉｍｅｒ）１００４、アドレス復号器１００５、書き込みフラグシーケンサ論理１００６、ＦＰＧＡチップ読み出し／書き込み制御論理（ＳＥＭ＿ＦＰＧＡ  Ｒ／Ｗ  Ｌｏｇｉｃ）１００７、デマルチプレクサおよびラッチ（ＤＥＭＵＸ  ｌｏｇｉｃ）１００８、および図２２のバッファ７０７に対応するラッチ１００９〜１０１２を含む。ワイヤ／バス７２１によるグローバルクロック信号（ＣＴＲＬ＿ＦＰＧＡ＿ＣＬＫ）は、ＣＴＲＬ＿ＦＰＧＡユニット７０１における全ての論理素子／ブロックに提供される。
【０３０２】
転送完了チェッキング論理（ＸＳＦＲ＿ＤＯＮＥ）１０００は、ＬＡＳＴ＿ＳＨＩＦＴ＿Ｈ７３３、ＬＡＳＴ＿ＳＨＩＦＴ＿Ｌ７３２、およびローカルＩＮＴＯ７０８ａを受け取る。ＸＳＦＲ＿ＤＯＮＥ論理１０００は、ワイヤ／バス１０１３によりＥＶＡＬ論理１００１に転送完了信号（ＸＳＦＲ＿ＤＯＮＥ）を出力する。ＬＡＳＴ＿ＳＨＩＦＴ＿Ｈ７３３およびＬＡＳＴ＿ＳＨＩＦＴ＿Ｌ７３２の受信に基づいて、ＸＳＦＲ＿ＤＯＮＥ論理１０００は、データ転送完了のチェックをして、所望ならば、評価サイクルが始まり得る。
【０３０３】
ＥＶＡＬ論理１００１は、ワイヤ／バス１０１３の転送完了信号（ＸＳＦＲ＿ＤＯＮＥ）に加えて、ワイヤ／バス７３９のＥＶＡＬ＿ＲＥＱ＃信号およびワイヤ／バス１０１５のＷＲ＿ＸＳＦＲ／ＲＤ＿ＸＳＦＲ信号を受け取る。ＥＶＡＬ論理１００１は、２つの出力信号（ワイヤ／バス１０１４のＳｔａｒｔ  ＥＶＡＬおよびワイヤ／バス７３６のＤＡＴＡ＿ＸＳＦＲ）を生成する。ＥＶＡＬ論理は、ＦＰＧＡバスとＰＣＩバスとの間のデータ転送がアドレスポインタを初期化し始めるときを示す。それは、データ転送が完了するときＸＳＦＲ＿ＤＯＮＥ信号を受け取る。ＷＲ＿ＸＳＦＲ／ＲＤ＿ＸＳＦＲ信号は、転送が読み出しか、または書き込みかどうかを示す。一旦、Ｉ／Ｏサイクルが完了すると（または、Ｉ／Ｏサイクルの開始以前）、ＥＶＡＬ論理は、開始ＥＶＡＬ信号ｔのＥＶＡＬタイマーとともに評価サイクルを開始し得る。ＥＶＡＬタイマーは、評価サイクルの継続時間に影響して、ソフトウェアクロック機構が完全に動作することを保証する。これは、全てのレジスタおよび組み合わせの構成要素にデータ伝達を安定化する必要がある間は、評価サイクルをアクティブに維持することによってなされる。
【０３０４】
ＤＭＡ記述子ブロック１００２は、ワイヤ／バス１０１９のローカルバスアドレス、アドレス復号器１００５からのワイヤ／バス１０１２の書き込みイネーブル信号、およびローカルデータバス７０８ｅを介してワイヤ／バス１０２９のローカルバスデータを受け取る。出力は、ワイヤ／バス１０４５のＤＥＭＵＸ論理１００８に対するワイヤ／バス１０４６のＤＭＡ記述子出力である。ＤＭＡ記述子ブロック１００２は、ＰＣＩアドレス、ローカルアドレス、転送カウント、転送方向、および次の記述子ブロックのアドレスを含むホストメモリの情報に対応する記述子ブロック情報を含む。ホストはまた、ＰＣＩコントローラの記述子ポインタレジスタにおける一次の記述子ブロックのアドレスを設定する。制御ビットをセットすることによって、転送が開始され得る。ＰＣＩは、第１の記述子ブロックをロードし、データ転送を開始する。ＰＣＩコントローラは、記述子ブロックをロードし続けて、ＰＣＩコントローラがチェーンビットの端部を検出するときまで、転送データは、次の記述子ポインタレジスタにおいて設定される。
【０３０５】
アドレス復号器１００５は、バス７０８ｂのローカルＲ／Ｗ制御信号を受け取って送信し、バス７０８ｃのローカルアドレス信号を受け取って送信する。アドレス復号器１００５は、ＤＭＡ記述子１００２へのワイヤ／バス１０２０による書き込みイネーブル信号、制御レジスタ１００３へのワイヤ／バス１０２１による書き込みイネーブル信号、ワイヤ／バス７３８によるＦＰＧＡアドレスＳＰＡＣＥインデックス、ワイヤ／バス１０２７による制御信号、およびＤＥＭＵＸ論理１００８によるワイヤ／バス１０２４による別の制御信号を生成する。
【０３０６】
制御レジスタ１００３は、アドレス復号器１００５からのワイヤ／バス１０２１の書き込みイネーブル信号、およびローカルデータ信号７０８ｅを介してワイヤ／バス１０３０からのデータを受け取る。制御レジスタ１００３は、ＥＶＡＬ論理１００１へのワイヤ／バス１０１５のＷＲ＿ＸＳＦＲ／ＲＤ＿ＸＳＦＲ信号、ＥＶＡＬタイマー１００４へのワイヤ／バス１０４１のセットＥＶＡＬタイム信号、およびＦＰＧＡチップへのワイヤ／バス１０１６のＳＥＭ＿ＦＰＧＡ出力イネーブル信号を生成する。システムは、各ＦＰＧＡチップを選択的にオンにする、またはイネーブルするためにＳＥＭ＿ＦＰＧＡ出力イネーブル信号を用いる。典型的に、システムは、同時に各ＦＰＧＡチップをイネーブルする。
【０３０７】
ＥＶＡＬタイマー１００４は、ワイヤ／バス１０１４のスタートＥＶＡＬ信号、およびワイヤ／バス１０４１のセットＥＶＡＬタイムを受け取る。ＥＶＡＬタイマー１００４は、ワイヤ／バス７３７のＥＶＡＬ信号、ワイヤ／バス１０１７の評価完了（ＥＶＡＬ＿ＤＯＮＥ）信号、および書き込みフラグシーケンサ論理１００６へのワイヤ／バス１０１８のスタート書き込みフラグ信号を生成する。一実施形態において、ＥＶＡＬタイマーは６ビット長である。
【０３０８】
書き込みフラグシーケンサ論理１００６は、ＥＶＡＬタイマー１００４からワイヤ／バス１０１８のスタート書き込みフラグ信号を受け取る。書き込みフラグシーケンサ論理１００６は、ローカルＲ／Ｗのワイヤ／バス７０８ｂへのワイヤ／バス１０２２のローカルＲ／Ｗ制御信号、ローカルアドレスバス７０８ｃへのワイヤ／バス１０２３のローカルアドレス信号、ローカルデータバス７０８ｅへのワイヤ／バス１０２８のローカルデータ信号、およびワイヤ／バス７０８ｄのローカルＩＮＴＩ＃を生成する。スタート書き込みフラグ信号を受け取ると、書き込みフラグシーケンサ論理は、制御信号のシーケンスを始めて、ＰＣＩバスへのメモリ書き込みサイクルを始める。
【０３０９】
ＳＥＭ＿ＦＰＧＡ  Ｒ／Ｗ制御論理１００７は、アドレス復号器１００５からワイヤ／バス１０２７の制御信号、ローカルＲ／Ｗ制御バス７０８ｂを介してワイヤ／バス１０４７のローカルＲ／Ｗ制御信号を受け取る。ＳＥＭ＿ＦＰＧＡ  Ｒ／Ｗ制御論理１００７は、ラッチ１００９へのワイヤ／バス１０３５のイネーブル信号、ＤＥＭＵＸ論理１００８へのワイヤ／バス１０２５の制御信号、ラッチ１０１１へのワイヤ／バス１０３７のイネーブル信号、ラッチ１０１２へのワイヤ／バス１０４２のイネーブル信号、ワイヤ／バス７３４のＦ＿ＷＲ信号、およびワイヤ／バス７３５のＦ−ＲＤ信号を生成する。ＳＥＭ＿ＦＰＧＡ  Ｒ／Ｗ制御論理１００７は、ＦＰＧＡの低バンクバスおよび高バンクバスへ／からの多様な書き込みおよび読み出しデータ転送を制御する。
【０３１０】
ＤＥＭＵＸ論理１００８は、マルチプレクサおよびラッチである。マルチプレクサおよびラッチは、入力信号の４つのセット受け取り、ローカルデータバス７０８ｅに対してワイヤ／バス１０２６の１つのセットの信号を出力する。セレクタ信号は、ＳＥＭ＿ＦＰＧＡ  Ｒ／Ｗ制御論理１００７からのワイヤ／バス１０２５の制御信号およびアドレス復号器１００５からワイヤ／バス１０２４の制御信号である。ＤＥＭＵＸ論理１００８は、ワイヤ／バス１０４２のＥＶＡＬ＿ＤＯＮＥ信号からの信号、ワイヤ／バス１０４３のＸＳＦＲ＿ＤＯＮＥ信号、およびワイヤ／バス１０４４のＥＶＡＬ信号の１つのセットを受け取る。この１つのセットの信号を参照符号１０４８として呼ぶ。任意のある周期において、これら３つの信号、ＥＶＡＬ＿ＤＯＮＥ、ＸＳＦＲ＿ＤＯＮＥ、およびＥＶＡＬのうち１つのみが選択を可能にするためにＤＥＭＵＸ論理１００８に提供される。ＤＥＭＵＸ論理１００８はまた、入力信号の他の３つのセットとして、ＤＭＡ記述子ブロック１００２からのワイヤ／バス１０４５のＤＭＡ記述子出力信号、ラッチ１０１２からのワイヤ／バス１０３９のデータ出力、およびラッチ１０１０からのワイヤ／バス１０３４の別のデータ出力を受け取る。
【０３１１】
ＣＴＲＬ＿ＦＰＧＡユニット７０１と低およびおよび高ＦＰＧＡバンクバスとの間のデータバッファは、ラッチ１００９〜１０１２を含む。ラッチ１００９は、ワイヤ／バス１０３１およびローカルデータバス７０８ｅを介するワイヤ／バス１０３２のローカルデータバス、ＳＥＭ＿ＦＰＧＡ  Ｒ／Ｗ制御論理１００７からのワイヤ／バス１０３５のイネーブル信号を受け取る。ラッチ１００９は、ラッチ１０１０に対してワイヤ／バス１０３３によってデータを出力する。
【０３１２】
ラッチ１０１０は、ラッチ１００９からのワイヤ／バス１０３３のデータ、ＳＥＭ＿ＦＰＧＡ  Ｒ／Ｗ制御論理１００７からのワイヤ／バス１０３７を介するワイヤ／バス１０３６のイネーブル信号を受け取る。ラッチ１０１０は、ＦＰＧＡの低バンクバスに対してワイヤ／バス７２５のデータ、およびワイヤ／バス１０３４を介してＤＥＭＵＸ論理１００８を出力する。
【０３１３】
ラッチ１０１１は、ローカルデータバス７０８ｅからのワイヤ／バス１０３１のデータ、およびＳＥＭ＿ＦＰＧＡ  Ｒ／Ｗ制御論理１００７からのワイヤ／バス１０３７のイネーブル信号を受け取る。ラッチ１０１１は、ＦＰＧＡの高バンクバスに対してワイヤ／バス７２６のデータ、およびラッチ１０１２に対してワイヤ／バス１０３８のデータを出力する。
【０３１４】
ラッチ１０１２は、ラッチ１０１１からワイヤ／バス１０３８のデータ、ＳＥＭ＿ＦＰＧＡ  Ｒ／Ｗ制御論理１００７からワイヤ／バス１０４０のイネーブル信号を受け取る。ラッチ１０１２は、ＤＥＭＵＸ１００８に対してワイヤ／バス１０３９により出力する。
【０３１５】
図２４は、４×４ＦＰＧＡアレイ、ＦＰＧＡバンクに対するその関係、および拡張性能を示す。図８のように、図２４は、同様の４×４アレイを示す。ＣＴＲＬ＿ＦＰＧＡユニット７４０がさらに示される。低バンクチップ（チップＦ４１〜Ｆ４４およびＦ２１〜Ｆ２４）および高バンクチップ（チップＦ３１〜Ｆ３４およびＦ１１〜Ｆ１４）は、代替の様態で構成される。従って、下の列から上の列にＦＰＧＡチップの列を特徴付ける（低バンク−高バンク−低バンク−高バンク）。データ転送チェーンは、所定の順番に従う。低バンクのデータ転送チェーンは、矢印７４１によって示される。高バンクのデータ転送チェーンは、矢印７４２によって示される。ＪＴＡＧ構成チェーンは、矢印７４３によって示される。矢印７４３は、Ｆ４１からＦ４４へ、Ｆ３４からＦ３１へ、Ｆ２１からＦ２４へ、およびＦ１４からＦ１１へ１６チップの全体のアレイを介して通り、ＣＴＲＬ＿ＦＰＧＡユニット７４０に戻る。
【０３１６】
拡張は、ピギーバックボードに達成され得る。ＦＰＧＡチップのオリジナルアレイが、Ｆ４１〜Ｆ４４およびＦ３１〜Ｆ３４を含むことを図２４において想定すると、チップＦ２１〜Ｆ２４およびＦ１１〜Ｆ１４の２つのさらなる列の追加がピギーバックボード７４５に達成され得る。ピギーバックボード７４５はまた、適したバスを含み、バンクを拡張する。アレイにおいて他の頂上に置かれたさらなるピギーバックボードと共にさらなる拡張が達成され得る。
【０３１７】
図２５は、ハードウェアの起動方法の一実施形態を示す。工程８００は、パワーオンまたはウォームブートシーケンスを開始する。工程８０１において、ＰＣＩコントローラは、初期化するためにＥＥＰＲＯＭを読み出す。工程８０２は、初期化シーケンスを考慮してＰＣＩコントローラレジスタを読み出し、ＰＣＩコントローラレジスタに書き込む。工程８０３の境界スキャンは、アレイにおいて全てのＦＰＧＡチップをテストする。工程８０４は、ＦＰＧＡ  Ｉ／ＯコントローラのＣＴＲＬ＿ＦＰＧＡユニットを構成する。工程８０５は、レジスタを読み出して、ＣＴＲＬ＿ＦＰＧＡユニットにおけるレジスタに書き込む。工程８０６は、ＤＭＡマスター読み出し／書き込みモードのためのＰＣＩコントローラを設定する。その後、データは、転送されて確認される。工程８０７は、テスト設計と共に全てのＦＰＧＡチップを構成し、それの正確さを確認する。工程８０８において、ハードウェアは、使用するための準備が整っている。この段階では、システムは、全ての工程がハードウェアの動作性を積極的に確認することを想定しており、そうでなければ、システムは、工程８０８に到達しないことになる。
【０３１８】
（Ｅ．より高密度のＦＰＧＡチップを用いる代替の実施形態）
本発明の一実施形態において、ＦＰＧＡ論理デバイスは、個々のボードで提供される。個々のボードで提供されるというよりも、多くのＦＰＧＡ論理デバイスが、ユーザの回路設計をかたどる必要がある場合、より多くのＦＰＧＡと共に複数のボードが提供され得る。シミュレーションシステム中にさらなるボードを追加する能力が、本発明の所望の特徴である。本実施形態において、より高密度のＦＰＧＡチップ（例えば、Ａｌｔｅｒａ  １０Ｋ１３０Ｖおよび１０Ｋ２５０Ｖ）が使用される。これらのチップの使用は、８つのより低密度のＦＰＧＡチップ（例えば、Ａｌｔｅｒａ  １０Ｋ１００）の代わりに、１枚のボードにつき４つのＦＰＧＡチップのみが使用されるように、ボードの設計を変更する。
【０３１９】
シミュレーションシステムのマザーボードに、これらのボードを結合するためには課題がある。相互接続および接続のスキームは、バックプレーン不足のための補正を行う必要がある。シミュレーションシステムにおけるＦＰＧＡアレイは、特定の相互接続構成を介してマザーボード上に提供される。相互接続が隣り合う直接隣接した相互接続（すなわち、Ｎ［７３：０］、Ｓ［７３：０］、Ｗ［７３：０］、Ｅ［７３：０］）、および１つ置きに隣接した相互接続（すなわち、ＮＨ［２７：０］、ＳＨ［２７：０］、ＸＨ［３６：０］、ＸＨ［７２：３７］）によって配置され、単一のボード内に、および異なるボードにわたってローカルバス接続を除外する場合には、各チップは、８セット以下の相互接続を有し得る。各チップは、隣接した隣り合うチップに直接、または隣接しない上、下、左、および右に位置されたチップに１つ置きで相互接続されることが可能である。Ｘ方向（東−西）において、アレイは環状（ｔｏｒｕｓ）になる。Ｙ方向（北−南）において、アレイはメッシュ状になる。
【０３２０】
相互接続は、単一のボード内に論理デバイスおよび他の構成要素を連結し得る。しかし、相互ボードコネクタを提供して、異なるボードにわたってこれらのボードと相互接続とを共に連結して、（１）マザーボードおよびアレイボードを介するＰＣＩバス、ならびに（２）任意の２つのアレイボード間に信号を伝える。各ボードは、それ自体ＦＰＧＡバスＦＤ［６３：０］を含む。ＦＰＧＡバスＦＤ［６３：０］により、ＦＰＧＡ論理デバイスは、ＳＲＡＭメモリデバイスおよびＣＴＲＬ＿ＦＰＧＡユニット（ＦＰＧＡ  Ｉ／Ｏコントローラ）と互いに通信可能である。ＦＰＧＡバスＦＤ［６３：０］は、複数のボードにわたって提供されない。しかし、ＦＰＧＡ相互接続は、複数のボードにわたってＦＰＧＡ論理デバイス間に接続性を提供する。しかし、これらの相互接続はＦＰＧＡバスに関係しない。一方、ローカルバスは、全てのボードにわたって提供される。
【０３２１】
マザーボードコネクタは、ボードをマザーボードに、かつ、従って、ＰＣＩバス、電源、およびグラウンドに接続する。数個のボードに関して、マザーボードコネクタを、マザーボードに直接接続するためには使用しない。６つのボード構成において、ボード１、３、および５だけが、マザーボードに直接接続され、残りのボード２、４、および６は、マザーボードの接続性のためにそれらの隣接するボードに依存する。従って、全ての他のボードは、マザーボードに直接接続される。これらボードの相互接続およびローカルバスは、はんだ面から部品面に配置された内部ボードコネクタを介して共に結合される。ＰＣＩ信号は、ボード（典型的に第１のボード）のうちの１つを介してのみルーティングされる。電力およびグランドは、これらのボード用の他のマザーボードに使用される。多様な内部ボードコネクタは、はんだ面から部品面に設置されると、ＰＣＩバス構成要素、ＦＰＧＡ論理デバイス、メモリデバイス、および多様なシミュレーションシステム制御回路間を通信可能にする。
【０３２２】
図５６は、本発明の一実施形態によるＦＰＧＡチップ構成のアレイの高レベルブロック図を示す。ＣＴＲＬ＿ＦＰＧＡユニット１２００は、上述のように、ライン１２０９を介してバス１２１０に結合される。一実施形態において、ＣＴＲＬ＿ＦＰＧＡユニット１２００は、例えば、Ａｌｔｅｒａ１０Ｋ５０チップといった、ＦＰＧＡチップ形式のプログラム可能な論理デバイス（ＰＬＤ）である。バス１２１０により、ＣＴＲＬ＿ＦＰＧＡユニット１２００は、（もしあれば）他のシミュレーションアレイボード、および他のチップ（例えば、ＰＣＩコントローラ、ＥＥＰＲＯＭ、クロックバッファ）に結合されることが可能になる。図５６は、論理デバイスおよびメモリデバイス形式において他の主要な機能性ブロックを示す。一実施形態において、論理デバイスは、例えば、Ａｌｔｅｒａ  １０Ｋ１３０Ｖまたは１０Ｋ２５０ＶチップといったＦＰＧＡチップ形式のプログラム可能論理デバイス（ＰＬＤ）である。１０Ｋ１３０Ｖまたは１０Ｋ２５０Ｖはピン互換性を持ち、両方とも５９９ピンＰＧＡパッケージである。従って、アレイの８つのＡｌｔｅｒａ  ＦＬＥＸ  １０Ｋ１００チップで上述された実施形態の代わりに、本実施形態は、ＡｌｔｅｒａのＦＬＥＸ  １０Ｋ１３０の４つのチップのみを使用する。本発明の一実施形態は、これら４つの論理デバイスおよびこれらの相互接続を含むボードを記載する。
【０３２３】
ユーザの設計が、アレイにおけるこれらの任意の数の論理デバイスでかたどられ、構成されるので、内部ＦＰＧＡ論理デバイス通信は、ユーザの回路設計の一部を別の部分に接続するために必要である。さらに、内部構成情報および境界はまた、内部ＦＰＧＡ相互接続によってサポートされる。最終的に、必要なシミュレーションシステム制御信号は、シミュレーションシステムとＦＰＧＡ論理デバイスとの間をアクセス可能になる必要がある。
【０３２４】
図３６は、本発明で使用されるＦＰＧＡ論理デバイスのハードウェアアーキテクチャを示す。ＦＰＧＡ論理デバイス１５００は、１０２上部Ｉ／Ｏピン、１０２下部Ｉ／Ｏピン、１１１左部Ｉ／Ｏピン、および１０２右部Ｉ／Ｏピンを含む。従って、相互接続の総数は４２５である。さらに、さらなる４５Ｉ／ＯピンはＧＣＬＫ，ＦＰＧＡバスＦＤ［３１：０］（ＦＤ［６３：３２］が高バンク専用になる）、Ｆ＿ＲＤ，Ｆ＿ＷＤ、ＤＡＴＡＸＳＦＲ、ＳＨＩＦＴＩＮ、ＳＨＩＦＴＯＵＴ、ＳＰＡＣＥ［２：０］、ＥＶＡＬ、ＥＶＡＬ＿ＲＥＱ＿Ｎ、ＤＥＶＩＣＥ＿ＯＥ（ＦＰＧＡ論理デバイスの出力ピンをオンにするためのＣＴＲＬ＿ＦＰＧＡユニットからの信号）、およびＤＥＶ＿ＣＬＲＮ（シミュレーションを始める前に全ての内部フリップフロップをクリアするためのＣＴＲＬ＿ＦＰＧＡユニットからの信号）専用になる。従って、任意の２つのＦＰＧＡ論理デバイス間を渡る任意のデータ信号および制御信号は、これらの相互接続によって伝達される。残りのピンは、電力およびグランド専用になる。
【０３２５】
図３７は、本発明の一実施形態による単一のＦＰＧＡチップのＦＰＧＡ相互接続ピンアウトを示す。各セットが特定の数のピンを含む場合、各チップ１５１０は、８つ以下のセットの相互接続を有し得る。ボード上のチップのそれぞれの位置に依存する相互接続のセットは、８つよりも少ないチップを有し得る。好適な実施形態において、チップは、全部で７セットの相互接続を有し得るが、使用される相互接続の特定のセットは、チップがボード上のそれぞれの位置に依存して変化し得る。各ＦＰＧＡチップの相互接続は、水平方向（東−西）および垂直方向（北−南）に向けられる。西方向の相互接続のセットは、Ｗ［７３：０］として符号が付けられる。東方向の相互接続のセットは、Ｅ［７３：０］として符号が付けられる。北方向の相互接続のセットは、Ｎ［７３：０］として符号が付けられる。南方向の相互接続のセットは、Ｓ［７３：０］として符号が付けられる。相互接続のこれら完全なセットは、隣接したチップに接続するためのものである。すなわち、これら相互接続は、任意のチップを越えて「ホップ」しない。例えば、図３９において、チップ１５７０は、Ｎ［７３：０］の相互接続１５４０、Ｗ［７３：０］の相互接続１５４２、Ｅ［７３：０］の相互接続１５４３、およびＳ［７３：０］の相互接続１５４５を有する。ＦＰＧＡ２チップでもあるこのＦＰＧＡチップ１５７０が全部で４セットの隣接した相互接続（Ｎ［７３：０］、Ｓ［７３：０］、Ｗ［７３：０］、およびＥ［７３：０］）を有する。ＦＰＧＡ０の西方向の相互接続は、環状相互接続を介してワイヤ１５３９を通ってＦＰＧＡ３の東方向の相互接続に接続する。従って、ワイヤ１５３９により、チップ１５６９（ＦＰＧＡ０）および１５７２（ＦＰＧＡ３）は、互いに接触されるように包み込まれるために、ボードの西−東端を含むような様態で互いに直接結合されることが可能になる。
【０３２６】
図３７に戻ると、４セットの「ホッピング（ｈｏｐｐｉｎｇ）」相互接続が提供される。垂直方向（ＮＨ［２７：０］およびＳＨ［２７：０］）に走る２セットの相互接続は、隣接しない相互接続である。例えば、図３９のＦＰＧＡ２チップ１５７０は、ＮＨ相互接続１５４１およびＳＨ相互接続１５４６を示す。図３７に戻ると、水平方向（ＸＨ［３６：０］およびＸＨ［７２：３７］）に走る他の２つのセットの相互接続は、隣接しない相互接続である。例えば、図３９のＦＰＧＡ２チップ１５７０は、ＸＨ相互接続１５４４を示す。
【０３２７】
図３７に戻ると、垂直方向のホッピング相互接続ＮＨ［２７：０］およびＳＨ［２７：０］はそれぞれ２８ピンを有する。水平方向の相互接続は、７３ピン、ＸＨ［３６：０］およびＸＨ［７２：３７］を有する。水平方向の相互接続ピン、ＸＨ［３６：０］およびＸＨ［７２：３７］は、西側（例えば、図３９におけるＦＰＧＡ３チップ１５７６の相互接続１６０５）および／または東側（例えば、図３９におけるＦＰＧＡ０チップ１５７３の相互接続１６０２）で使用され得る。この構成により、各チップは、同様に製造されることが可能になる。従って、各チップは、上部、下部、左部および右部に設置される隣接しないチップに対して１つ置きに相互接続されることが可能である。
【０３２８】
図３９は、本発明の一実施形態による単一のマザーボード上の６つのボードの直接隣接するＦＰＧＡアレイ、および１つ置きに隣接したＦＰＧＡアレイのレイアウトを示す。この図を用いて、２つの可能な構成（６ボードシステムおよび２ボードシステム）を示す。位置表示１５５０は、「Ｙ」方向が南北の方向であり、「Ｘ」方向が東西の方向であることを示す。Ｘ方向では、アレイは環状である。Ｙ方向では、アレイはメッシュ状である。図３９において、高レベルにおける、ボード、ＦＰＧＡ論理デバイス、相互接続、およびコネクタのみが示される。マザーボードおよび他のサポートする構成要素（例えば、ＳＲＡＭメモリデバイス）およびワイヤ線（例えば、ＦＰＧＡバス）が示されない。
【０３２９】
図３９がボードおよび他の構成要素、相互接続、およびコネクタのアレイ図を提供することに留意されたい。実際の物理的な構成および設定は、これらそれぞれの端部の部品面上のこれらのボードをはんだ面に置くことを含む。ボードの約半分が、マザーボードに直接接続され、残りの半分は、それらのそれぞれ隣接するボードに接続される。
【０３３０】
本発明の６つのボードの実施形態において、６つのボード１５５１（ボード１）、１５５２（ボード２）、１５５３（ボード３）、１５５４（ボード４）、１５５５（ボード５）、および１５５６（ボード６）が図１の再構成可能なハードウェアユニット２０の一部としてマザーボード（図示せず）上に提供される。各ボードは、構成要素およびコネクタのほとんど同等のセットを含む。従って、図示の目的のため、６つ目のボード１５５６は、ＦＰＧＡ論理デバイス１５６５〜１５６８、コネクタ１５５７〜１５６０および１５８１を含む。５つ目のボード１５５５は、ＦＰＧＡ論理デバイス１５６９〜１５７２およびコネクタ１５８２および１５８３を含み、４つ目のボード１５５４は、ＦＰＧＡ論理デバイス１５７３〜１５７６およびコネクタ１５８４および１５８５を含む。
【０３３１】
この６つのボード構成において、ボード１  １５５１およびボード６  １５５６は、「ブックエンド」ボードとして提供される。「ブックエンド」ボードは、例えば、ボード６  １５５６上のＲ−パック端子１５５７〜１５６０およびボード１  １５５１上のＲ−パック端子１５９１〜１５９４といったＹ−メッシュ端子を含む。中間に配置されたボード（すなわち、ボード１５５２（ボード２）、１５５３（ボード３）、１５５４（ボード４）、および１５５５（ボード５））もまたアレイを完成するために提供される。
【０３３２】
上述されるように、相互接続は、直接隣接した相互接続（すなわち、Ｎ［７３：０］、Ｓ［７３：０］、Ｗ［７３：０］、Ｅ［７３：０］）、および１つ置きに隣接した相互接続（すなわち、ＮＨ［２７：０］、ＳＨ［２７：０］、ＸＨ［３６：０］、ＸＨ［７２：３７］）によって構成され、単一のボード内に、および異なるボードにわたってローカルバス接続を除外する。相互接続は、単独で、単一のボード内で論理デバイスおよび他の構成要素を結合し得る。しかし、内部ボードコネクタ１５８１〜１５９０は、異なるボード（すなわち、ボード１〜ボード６）にわたってＦＰＧＡ論理デバイス間を通信することを可能にする。ＦＰＧＡバスは、内部ボードコネクタ１５８１〜１５９０の一部である。これらのコネクタ１５８１〜１５９０は、５２０の信号および８０の電力／グランド接続を、２つの隣接したアレイボード間に伝達する６００ピンコネクタである。
【０３３３】
図３９において、多様なボードは、内部ボードのコネクタ１５８１〜１５９０に関して非対称な様態で配置される。例えば、ボード１５５１と１５５２との間には、内部ボードコネクタ１５８９および１５９０が提供される。相互接続１５１５は、ＦＰＧＡ論理デバイス１５１１および１５７７を共に、およびコネクタ１５８９および１５９０に従って接続する。この接続は対称になる。しかし、相互接続１６０３は、対称にならない。それは、第３のボード１５５３のＦＰＧＡ論理デバイス１５５３をボード１５５１のＦＰＧＡ論理デバイス１５７７に接続する。コネクタ１５８９および１５９０によると、このような相互接続は対称にならない。同様に、相互接続１６００は、コネクタ１５８９および１５９０に対して対称にならない。なぜなら、相互接続１６００は、ＦＰＧＡ論理デバイス１５７７を端子１５９１に接続するからである。端子１５９１は、相互接続１６０１を介してＦＰＧＡ論理デバイス１５７７に接続する。他の類似の相互接続は、非対称をさらに示すように存在する。
【０３３４】
この非対称の結果として、相互接続は、２つの異なる方法（１つは相互接続１５１５のような対称相互接続、および別の方法は相互接続１６０３および１６００のような非対称相互接続）で内部ボードコネクタを介してルーティングされる。相互接続ルーティングはスキーム、図４０Ａおよび４０Ｂに示される。
【０３３５】
図３９において、単一のボード内の直接隣接した接続の例は、ボード１５５５の東−西方向に沿って、論理デバイス１５７０を論理デバイス１５７１に結合する相互接続１５４３である。単一のボード内の直接隣接した別の接続の例は、論理デバイス１５７３をボード１５５４の論理デバイス１５７３に結合する相互接続１６０７である。２つの異なるボード間の直接隣接した接続の例は、北−南方向に沿って、コネクタ１５８３および１５８４を介して、ボード１５５５の論理デバイス１５７０をボード１５５４の論理デバイス１５７４に結合する相互接続１５４５である。ここで、２つの内部ボードコネクタ１５８３および１５８４を用いて、信号を向こう側へに転送する。
【０３３６】
例示の単一のボード内の１つ置きの相互接続は、東−西方向に沿って、論理デバイス１５７０をボード１５５５の論理デバイス１５７２に結合する相互接続１５４４である。例示の２つの異なるボード間の１つ置きの相互接続は、コネクタ１５８１〜１５８４を介して、ボード１５５６の論理デバイス１５６５をボード１５５４の論理デバイス１５７３に結合する。ここで、４つの内部ボードのコネクタ１５８１〜１５８４を用いて、信号を向こう側へ転送する。
【０３３７】
いくつかのボード、特にマザーボード上の北−南端に置かれたボードはまた、１０ΩＲ−パックを備えていくつかの接続を終端させる。従って、６つ目のボード１５５６は、１０ΩＲ−パックコネクタ１５５７〜１５６０を備えて、１つ目のボード１５５１は、１０ΩＲ−パックコネクタ１５９１〜１５９４を備える。６つ目のボード１５５６は、相互接続１９７０〜１９７１のためにＲ−パックコネクタ１５５７、相互接続１９７２および１５４１のためにＲ−パックコネクタ１５５８、相互接続１９７３および１９７４のためにＲ−パックコネクタ１５５９、ならびに相互接続１９７５および１９７６のためにＲ−パックコネクタ１５６０を備える。さらに、相互接続１５６１〜１５６４は、いずれにも接続されない。これらの北−南相互接続は、東−西環状タイプの相互接続とは違って、メッシュ状タイプの様態で配置される。
【０３３８】
これらメッシュ状端末は、北−南直接相互接続の数を増やす。さもなければ、ＦＰＧＡメッシュ状の北および北方向の端部および南方向の端部における相互接続は、全て無駄になる。例えば、ＦＰＧＡ論理デバイス１５１１および１５７７は、既に直接相互接続１５１５の１つのセットを有する。さらなる相互接続はまた、Ｒ−パック１５９１ならびに相互接続１６００および１６０１を介するこれら２つのＦＰＧＡ論理デバイスが提供される。つまり、Ｒ−パックは、相互接続１６００および１６０１を共に接続する。これは、ＦＰＧＡ論理デバイス１５１１と１５７７との間の直接接続の数を増やす。
【０３３９】
内部ボード接続がさらに提供される。ボード１５５１上の論理デバイス１５７７、１５７８、１５７９、および１５８０は、相互接続１５１５、１５１６、１５１７、および１５１８ならびに内部ボードコネクタ１５８９および１５９０を介して論理デバイス１５１１、１５１２、１５１３、および１５１４に結合される。従って、相互接続１５１５は、ボード１５５２の論理デバイス１５１１を、コネクタ１５８９および１５９０を介してボード１５５１の論理デバイス１５７７に結合する。相互接続１５１６は、ボード１５５２の論理デバイス１５１２を、コネクタ１５８９および１５９０を介してボード１５５１の論理デバイス１５７８に結合する。相互接続１５１７は、ボード１５５２の論理デバイス１５１３を、コネクタ１５８９および１５９０を介してボード１５５１の論理デバイス１５７９に結合する。相互接続１５１８は、ボード１５５２の論理デバイス１５１４を、コネクタ１５８９および１５９０を介してボード１５５１の論理デバイス１５８０に結合する。
【０３４０】
例えば、１５９５、１５９６、１５９７、および１５９８といったいくつかの相互接続は、いずれにも結合されない。なぜなら、それらは使用されないからである。しかし、論理デバイス１５１１および１５７７に対して上述したように、Ｒ−パック１５９１は、相互接続１６００および１６０１を接続して、北−南相互接続の数を増やす。
【０３４１】
本発明の２つのボードの実施形態が図４４に示される。本発明の２つのボードの実施形態において、２つのボードのみが、シミュレーションシステムにおけるユーザの設計をかたどる必要がある。図３９の６つのボード構成のように、図４４の２つのボード構成は、「ブックエンド」の同じ２つのボード（ボード１  １５５１およびボード６  １５５６）を用いる。これらは、図１の再構成可能なハードウェアユニットの一部としてマザーボード上に提供される。図４４において、１つ目のブックエンドボードはボード１であり、２つ目のブックエンドボードはボード６である。ボード６は、図４４で用いられて、図３９のボード６と同様に示す。すなわち、ボード１およびボード６のようなブックエンドボードは、北−南メッシュ状接続の不可欠な終端を有するべきである。
【０３４２】
この２つのボード構成は、ボード１  １５５１上の４つのＦＰＧＡ論理デバイス１５７７（ＦＰＧＡ０）、１５７８（ＦＰＧＡ１）、１５７９（ＦＰＧＡ２）、および１５８０（ＦＰＧＡ３）、ならびにボード６  １５５６上の４つのＦＰＧＡ論理デバイス１５６５（ＦＰＧＡ０）、１５６６（ＦＰＧＡ１）、１５６７（ＦＰＧＡ２）、および１５６８（ＦＰＧＡ３）を含む。これら２つのボードは、内部ボードコネクタ１５８１および１５９０によって接続される。
【０３４３】
これらのボードは、いくつかの接続を終端させるために１０ΩＲ−パックを含む。２つのボードの実施形態に関して、ボードは共に、「ブックエンド」ボードである。ボード１５５１は、抵抗性の終端として１０ΩＲ−パックコネクタ１５９１、１５９２、１５９３、および１５９４を含む。２つ目のボード１５５６はまた、１０ΩＲ−パックコネクタ１５５７〜１５６０を含む。
【０３４４】
ボード１５５１はコネクタ１５９０を有し、ボード１５５６は、内部ボード通信のためのコネクタ１５８１を有する。例えば、相互接続１６００、１９７１、１９７７、１５４１、および１５４０といった、あるボードから別のボードに渡る相互接続は、これらのコネクタ１５９０および１５８１を通過する。言い換えると、内部ボードコネクタ１５９０および１５８１により、相互接続１６００、１９７１、１９７７、１５４１、および１５４０は、あるボード上のある構成要素および別のボード上の別の構成要素間の接続をうまく行くことを可能にする。内部ボードコネクタ１５９０および１５８１は、ＦＰＧＡバス上の制御データおよび制御信号を伝達する。
【０３４５】
４つのボード構成に関して、ボード１およびボード６は、ブックエンドボードを提供する。ボード２  １５５２およびボード３  １５５３（図３９を参照）は、中間のボードである。本発明（図３８Ａおよび図３８Ｂに関して論じられるように）に従ってマザーボードに接続されると、ボード１およびボード２は一組にされ、ボード３およびボード６は一組にされる。
【０３４６】
６つのボード構成に関して、ボード１およびボード６は、上述されるようにブックエンドボードを提供する。ボード２  １５５２、ボード３  １５５３、ボード４  １５５４、およびボード５  １５５５（図３９を参照）は、中間のボードである。本発明（図３８Ａおよび図３８Ｂに関して論じられるように）に従ってマザーボードに接続されると、ボード１およびボード２は一組にされ、ボード３およびボード４は一組にされ、ボード５およびボード６は一組にされる。
【０３４７】
所望ならば、さらなるボードが提供され得る。しかし、システムに追加されるボードに関係なく、ブックエンドボード（例えば、ボード１およびボード６のように）は、メッシュ状アレイ接続を達成する抵抗性の終端を有するべきである。一実施形態において、最小の構成は、図４４の２つのボード構成である。２つのボードの追加によって、さらなるボードが追加され得る。一次の構成がボード１およびボード６を有するならば、４つのボード構成への将来の変更は、上述のように、ボード６をさらに除去することと、ボード１およびボード２を共に一組にすることと、次に、ボード３およびボード６を共に一組にすることを含む。
【０３４８】
上述されるように、各論理デバイスは、隣接した隣り合う論理デバイス、および隣接しない、１つ置きに隣り合う論理デバイスに結合される。従って、図３９および４４において、論理デバイス１５７７は、相互接続１５４７を介して、隣接する隣り合う論理デバイス１５７８に結合される。論理デバイス１５７７はまた、１つ置きの相互接続１５４８を介して、隣接しない論理デバイス１５７９に結合される。しかし、論理デバイス１５８０は、結合を提供する相互接続１５４９を有する包み込む環状構成のために、論理デバイス１５７７に隣接するように考慮される。
【０３４９】
図４２は、オンボード構成要素、および単一のボードのコネクタの上面図（構成要素側）を示す。本発明の一実施形態において、シミュレーションシステムにおいてユーザの設計をかたどるために、１つのボードだけが必要である。他の実施形態において、複数のボード（すなわち、少なくとも２つのボード）が必要である。従って、例えば、図３９は、多様な６００ピンコネクタ１５８１〜１５９０を介して共に結合される６つのボード１５５１〜１５５６を示す。上部および下部において、ボード１５５１は、１セットの１０ΩＲ−パックによって終端され、ボード１５５６は、別の１セットの１０ΩＲ−パックによって終端される。
【０３５０】
図４２に戻ると、ボード１８２０は、４つのＦＰＧＡ論理デバイス１８２２（ＦＰＧＡ０）、１８２３（ＦＰＧＡ１）、１８２４（ＦＰＧＡ２）、および１８２５（ＦＰＧＡ３）を含む。２つのＳＲＡＭメモリデバイス１８２８および１８２９が、さらに提供される。ＳＲＡＭメモリデバイス１８２８および１８２９を用いて、このボード上の論理デバイスからメモリブロックをマッピングする。つまり、本発明によるメモリシミュレーションは、このボードの論理デバイスからこのボードのＳＲＡＭメモリデバイスにメモリブロックをマッピングする。他のボードは、他の論理デバイスおよびメモリデバイスを含み、類似のマッピング動作を達成する。一実施形態において、メモリマッピングはボードに依存する。すなわち、ボード１のメモリマッピングは、他のボードを無視して、ボード１上の論理デバイスおよびメモリデバイスに限定される。他の実施形態において、メモリマッピングは、ボードに依存しない。従って、あまり多数ではないメモリデバイスを用いて、あるボードの論理デバイスから別のボードに置かれたメモリデバイスにメモリブロックをマッピングする。
【０３５１】
発光ダイオード（ＬＥＤ）１８２１がまた、いくつかの選択活性を視覚的に示すように提供される。ＬＥＤディスプレイは、本発明の一実施形態によって表Ａの通りである。
【０３５２】
【表２】
2005500625.tif 000010
【０３５３】
ＰＬＸ  ＰＣＩコントローラ１８２６およびＣＴＲＬ＿ＦＰＧＡユニット１８２７といった、多様な他の制御チップが内部ＦＰＧＡおよびＰＣＩ通信を制御する。システムで使用され得るＰＬＸ  ＰＣＩコントローラ１８２６の一例は、ＰＬＸ  ＴｅｃｈｎｏｌｏｇｙのＰＣＩ９０８０または９０６０である。このＰＣＩ９０８０は、適切なローカルバスインタフェース、制御レジスタ、ＦＩＦＯ、およびＰＣＩバスへのＰＣＩインタフェースである。データブックのＰＬＸ  Ｔｅｃｈｎｏｌｏｇｙ、ＰＣＩ９０８０  Ｓｈｅｅｔ（ｖｅｒ．０．９３、１９９７年２月２８日）は、本明細書中に参考として援用される。ＣＴＲＬ＿ＦＰＧＡユニット１８２７の一例は、例えば、Ａｌｔｅｒａ１０Ｋ５０チップといった、ＦＰＧＡチップの形式でプログラム可能な論理デバイス（ＰＬＤ）である。複数のボード構成において、第１のボードだけがＰＣＩコントローラを含むＰＣＩバスに結合される。
【０３５４】
コネクタ１８３０は、ボード１８２０をマザーボード（図示せず）、従って、ＰＣＩバス、電力、およびグランドに接続する。いくつかのボードに関して、コネクタ１８３０は、マザーボードへの直接の接続のために使用されない。従って、２つのボード構成において、第１のボードのみが、マザーボードに直接結合される。６つのボード構成において、ボード１、３、および５だけが、マザーボードに直接接続され、残りのボード２、４、および６が、マザーボードの接続性のためにそれらの隣接したボードに依存する。内部ボードコネクタＪ１〜Ｊ２８がさらに提供される。名前で意味されるように、これらのコネクタＪ１〜Ｊ２８は、異なるボードにわたる接続が可能である。
【０３５５】
コネクタＪ１は、外部電力およびグランド接続用である。以下の表Ｂは、本発明の一実施形態による、外部電力のピンおよび対応する詳細を示す。
【０３５６】
【表３】
2005500625.tif 000011
【０３５７】
コネクタＪ２は、パラレルポート接続用である。コネクタＪ１およびＪ２は、作業中に単独単一ボード境界スキャンテストのために用いられる。以下の表Ｃは、本発明の一実施形態によるパラレルＪＴＡＧポートコネクタＪ２のピンおよび対応する詳細を示す。
【０３５８】
【表４】
2005500625.tif 000012
【０３５９】
コネクタＪ３およびＪ４は、ボードにわたるローカルバス接続用である。コネクタＪ５〜Ｊ１６は、ＦＰＧＡ相互接続の接続のあるセットである。コネクタＪ１７〜Ｊ２８は、第２のセットのＦＰＧＡ相互接続の接続である。部品面からはんだ面に設置されると、これらのコネクタは、あるボードのある構成要素と別のボードの別の構成要素との間の効果的な接続を提供する。以下の表ＤおよびＥは、本発明の一実施形態によるコネクタＪ１〜Ｊ２８の完成リストおよび詳細を提供する。
【０３６０】
【表５】
2005500625.tif 000013
【０３６１】
影付きコネクタはスルーホールタイプである。表Ｄにおいて、ブラケット［］の中の数字は、ＦＰＧＡ論理デバイスの番号０〜３を表すことに留意されたい。従って、Ｓ［０］は、南方向の相互接続（すなわち、図３７のＳ［７３：０］）およびＦＰＧＡ０の７４ビットを示す。
【０３６２】
【表６】
2005500625.tif 000014
【０３６３】
図４３は、図４１Ａ〜図４１Ｆおよび図４２におけるコネクタＪ１〜Ｊ２８の説明を示す。一般に、クリアなブロックは、表面取り付けタイプであるのに対し、灰色のブロックがスルーホールタイプである。さらに、輪郭が実線のブロックは、部品面に置かれたコネクタを表す。輪郭が点線のブロックは、はんだ面に置かれたコネクタを表す。従って、空白および輪郭が実線のブロック１８４０は、２×３０のヘッダー、表面取り付け、および部品面に置かれたことを表す。クリアなおよび輪郭が点線のブロック１８４１は、２×３０のレセプタクル、表面取り付け、およびボードのはんだ面に置かれたことを表す。灰色で満たされ、および輪郭が実線のブロック１８４２は、２×３０または２×４５のヘッダー、スルーホール、および部品面に置かれたことを表す。灰色および輪郭が点線のブロック１８４３は、２×４５または２×３０のレセプタクル、スルーホール、およびはんだ面に置かれたことを表す。一実施形態において、シミュレーションシステムは、表面取りつけおよびスルーホールタイプの両方の２×３０または２×４５のマイクロストリップコネクタのＳａｍｔｅｃのＳＦＭおよびＴＦＭシリーズを使用する。クロスハッチで満たされ、および実線を有するブロック１８４４は、Ｒ−パック、表面取りつけ、およびボードの部品面に取り付けられている。クロスハッチで満たされ、および点線を有するブロック１８４５は、Ｒ−パック、表面取りつけ、およびはんだ面に取り付けられている。ＳａｍｔｅｃのウェブサイトのカタログからのＳａｍｔｅｃの仕様は、本明細書中に参考として援用される。図４２に戻ると、コネクタＪ３〜Ｊ２８は、図４３の説明として示されるようなタイプである。
【０３６４】
図４１Ａ〜４１Ｆは、各ボードおよびそれらのそれぞれのコネクタの上面図を示す。従って、ボード１６６０は、マザーボードコネクタ１６８２と共にコネクタ１６６１〜１６８１を含む。図４１Ｂは、ボード５用のコネクタを示す。従って、ボード１６９０は、マザーボードコネクタ１７０９と共にコネクタ１６９１〜１７０８を含む。図４１Ｃは、ボード４用のコネクタを示す。従って、ボード１７１５は、マザーボードコネクタ１７３４と共にコネクタ１７１６〜１７３３を含む。図４１Ｄは、ボード３用のコネクタを示す。従って、ボード１７４０は、マザーボードコネクタ１７５９と共にコネクタ１７４１〜１７５８を含む。図４１Ｅは、ボード２用のコネクタを示す。従って、ボード１７６５は、マザーボードコネクタ１７８４と共にコネクタ１７６６〜１７８３を含む。図４１Ｆは、ボード１用のコネクタを示す。従って、ボード１７９０は、マザーボードコネクタ１８１３と共にコネクタ１７９１〜１８１２を含む。図４３の説明で示されるように、６つのボードのこれらのコネクタは、（１）表面取り付けまたはスルーホール、（２）部品面またははんだ面、および（３）ヘッダーまたはレセプタクルあるいはＲ−パック、の組み合わせである。
【０３６５】
一実施形態において、これらのコネクタは、内部ボード通信用に仕様される。関係するバスおよび信号は、共にグループ化され、任意の２つのボード間のルーティング信号のためのこれらの内部ボードコネクタによってサポートされる。さらに、ボードの半分だけが、マザーボードに直接結合される。図４１Ａにおいて、ボード６  １６６０は、１セットのＦＰＧＡ相互接続に関して指定されたコネクタ１６６１〜１６６８、コネクタ１６６９〜１６７４、ＦＰＧＡ相互接続の別のセットに関して指定されたコネクタ１６６９〜１６７４、１６７６、および１６７９、ならびにローカルバスに関して指定されたコネクタ１６８１を含む。ボード６  １６６０が、マザーボード（他の終端において図４１Ｆのボード１  １７９０と共に）の終端においてボードの１つとして設置されるため、コネクタ１６７５、１６７７、１６７８および１６８０は、正確な北−南方向の相互接続の１０ΩＲ−パック接続に関して指定される。さらに、６つ目のボード１５３５が、マザーボード１５２０に直接結合されるのではなく、５つ目のボード１５３４に結合される場合には、図３８Ｂで示されるように、マザーボードコネクタ１６８２はボード６  １６６０用に使用されない。
【０３６６】
図４１Ｂにおいて、ボード５  １６９０は、あるセットのＦＰＧＡ相互接続に関して指定されたコネクタ１６９１〜１６９８、別のセットのＦＰＧＡ相互接続に関して指定されたコネクタ１６９９〜１７０６、ならびに別のセットのＦＰＧＡ相互接続に関して指定されたコネクタ１７０７および１７０８を含む。コネクタ１７０９を用いて、ボード５  １６９０をマザーボードに結合する。
【０３６７】
図４１Ｃにおいて、ボード４  １７１５は、あるセットのＦＰＧＡ相互接続に関して指定されたコネクタ１７１６〜１７２３、別のセットのＦＰＧＡ相互接続に関して指定されたコネクタ１７２４〜１７３１、ならびにローカルバスに関して指定されたコネクタ１７３２および１７３３を含む。コネクタ１７０９を用いることなく、ボード４  １７１５を直接マザーボードに結合する。この構成はまた、第４のボード１５３３が、マザーボード１５２０に直接接続されるわけではないが、第３のボード１５３２および第５のボード１５３４に結合される場合には、図３８Ｂに示される。
【０３６８】
図４１Ｄにおいて、ボード３  １７４０は、あるセットのＦＰＧＡ相互接続に関して指定されたコネクタ１７４１〜１７４８、別のセットのＦＰＧＡ相互接続に関して指定されたコネクタ１７４９および１７５６、ならびにローカルバスに関して指定されたコネクタ１７５７および１７５８を含む。コネクタ１７５９を用いて、ボード３  １７４０をマザーボードに結合する。
【０３６９】
図４１Ｅにおいて、ボード２  １７６５は、あるセットのＦＰＧＡ相互接続に関して指定されたコネクタ１７６６〜１７７３、ローカルバスに関して指定されたコネクタ１７７４〜１７８１、ならびにローカルバスに関して指定されたコネクタ１７８２および１７８３を含む。コネクタ１７８４を用いることなく、ボード２  １７６５をマザーボードに直接結合する。この構成はまた、第２のボード１５２５が、マザーボード１５２０に直接結合されるわけではないが、第３のボード１５３２および第１のボード１５２６に結合される場合には、図３８Ｂに示される。
【０３７０】
図４１Ｆにおいて、ボード１  １７９０は、あるセットのＦＰＧＡ相互接続に関して指定されたコネクタ１７９１〜１７９８、別のセットのＦＰＧＡ相互接続に関して指定されたコネクタ１７９９〜１８０４、１８０６および１８０９、ならびにローカルバスに関して指定されたコネクタ１８１１および１８１２を含む。コネクタ１８１３を用いることなく、ボード１  １７９０をマザーボードに結合する。ボード１  １７９０が、マザーボードの端部におけるボードの１つ（図４１Ａにおいて他の端部におけるボード６  １６６０と共に）として位置付けされるので、コネクタ１８０５、１８０７、１８０８、および１８１０は、正確な北−南方向の相互接続の１０ΩＲ−パック接続に関して指定される。
【０３７１】
本発明の一実施形態において、複数のボードは、独自の様態においてマザーボードおよび互いに結合される。複数のボードは、部品面をはんだ面に共に結合される。ボードの１つ（例えば、第１のボード）は、マザーボードコネクタを介して、マザーボードに結合され、従ってＰＣＩバスに結合される。さらに、第１のボードのＦＰＧＡ相互接続バスは、一組のＦＰＧＡ相互接続コネクタを介して他のボード（例えば、第２のバス）のＦＰＧＡ相互接続バスに結合される。第１のボード上のＦＰＧＡ相互接続コネクタは、部品面上にあり、第２のボード上のＦＰＧＡ相互接続コネクタは、はんだ面上にある。第１のボード上の部品面のコネクタおよび第２のボード上のはんだ面のコネクタにより、それぞれ、ＦＰＧＡ相互接続バスは、共に結合されることを可能にする。
【０３７２】
同様に、２つのボード上のローカルバスは、ローカルバスコネクタを介して共に結合される。第１のボード上のローカルバスコネクタは、部品面上にあり、第２のボード上のローカルバスコネクタは、はんだ面上にある。従って、第１のボード上の部品面のコネクタおよび第２のボード上のはんだ面のコネクタのそれぞれにより、ローカルバスは、共に結合されることを可能にする。
【０３７３】
さらなるボードが追加され得る。第３のボードは、第２のボードの部品面に第３のボードのはんだ面を追加し得る。類似のＦＰＧＡ相互接続およびローカルバスの内部ボード接続が、さらに追加される。第３のボードはまた、別のコネクタを介してマザーボードに結合されるが、このコネクタは、以下にさらに記載されるように、単に電力およびグラウンドを第３のボードに提供するだけである。
【０３７４】
２つのボード構成における部品面からはんだ面へのコネクタは、図３８Ａに参考として論じられる。この図は、本発明の一実施形態によるマザーボード上のＦＰＧＡボードの接続の側面図を示す。図３８Ａは、２つのボード構成を示し、名称が意味するように、２つのボードが利用される。図３８Ａにおいてこれら２つのボード１５２５（ボード２）および１５２６（ボード１）は、図３９において２つのボード１５５２および１５５１と一致する。ボード１５２５および１５２６の部品面は、参照符号１９８９によって表示される。ボード１５２５および１５２６のはんだ面は、参照符号１９８８によって表示される。図３８Ａに示されるように、これら２つのボード１５２５および１５２６は、マザーボードコネクタ１５２３を介してマザーボード１５２０に結合される。他のマザーボードコネクタ１５２１、１５２２、および１５２４はまた、拡張の目的のために提供され得る。ＰＣＩバスとボード１５２５と１５２６との間の信号は、マザーボードコネクタ１５２３を介してルーティングされる。ＰＣＩ信号は、まず、第１のボード１５２６を介して２つのボード構造とＰＣＩバスとの間をルーティングされる。従って、ＰＣＩバスからの信号は、それらの信号が第２のボード１５２５に移動する前に、まず、第１のボード１５２６と接触する。同様に、２つのボード構造からのＰＣＩバスへの信号は、第１のボード１５２６から送られる。電力はまた、マザーボードコネクタ１５２３を介して電源（図示せず）からボード１５２５および１５２６に印加される。
【０３７５】
図３８Ａに示されるように、ボード１５２６は、いくつかの構成要素およびコネクタを含む。１つのこのような構成要素は、ＦＰＧＡ論理デバイス１５３０である。コネクタ１５２８Ａおよび１５３１Ａは、さらに提供される。同様に、ボード１５２５は、いくつかの構成要素およびコネクタを含む。１つのこのような構成要素は、ＦＰＧＡ論理デバイス１５２９である。コネクタ１５２８Ｂおよび１５３１Ｂは、さらに提供される。
【０３７６】
一実施形態において、コネクタ１５２８Ａおよび１５２８Ｂは、例えば、１５９０および１５８１（図４４）といった、ＦＰＧＡバスの内部ボードコネクタである。これらの内部ボードコネクタは、多様なＦＰＧＡ相互接続（例えば、Ｎ［７３：０］、Ｓ［７３：０］、Ｗ［７３：０］、Ｅ［７３：０］、ＮＨ［２７：０］、ＳＨ［２７：０］、ＸＨ［３６：０］、およびＸＨ［７２：３７］）に対して内部ボード接続性を提供し、ローカルバス接続を除外する。
【０３７７】
さらに、コネクタ１５３１Ａおよび１５３１Ｂは、ローカルバスの内部ボードコネクタである。ローカルバスは、（ＰＣＩコントローラを介する）ＰＣＩバス、と（ＦＰＧＡ  Ｉ／Ｏコントローラ（ＣＴＲＬ＿ＦＰＧＡ）ユニットを介する）ＦＰＧＡバス間の信号を扱う。ローカルバスはまた、ＰＣＩコントローラおよびＦＰＧＡ論理デバイスおよびＦＰＧＡ  Ｉ／Ｏコントローラ（ＣＴＲＬ＿ＦＰＧＡ）ユニット間の構成および境界スキャンテスト情報を処理する。
【０３７８】
つまり、マザーボードコネクタは、一組のボードの１つのボードとＰＣＩバスおよび電力とを結合する。１セットのコネクタは、あるボードの部品面を介してＦＰＧＡ相互接続を他のボードのはんだ面に結合する。コネクタの別のセットは、あるボードの部品面を介してローカルバスを他のボードのはんだ面に結合する。
【０３７９】
本発明の別の実施形態において、２つより多くのボードが使用される。実際には、図３８Ｂは、６つのボード構成を示す。この構成は、図３８Ａの構成と類似しており、マザーボード、ならびにこれらボードの相互接続およびローカルバスに直接接続される全ての他のボードは、はんだ面から部品面へ配置される内部ボードコネクタを介して共に結合される。
【０３８０】
図３８Ｂは、６つのボード、１５２６（第１のボード）、１５２５（第２のボード）、１５３２（第３のボード）、１５３３（第４のボード）、１５３４（第５のボード）、および１５３５（第６のボード）を示す。これら６つのボードは、ボード１５２６（第１のボード）、１５３２（第３のボード）、および１５３４（第５のボード）上のコネクタを介してマザーボード１５２０に結合される。他のボード１５２５（第２のボード）、１５３３（第４のボード）、および１５３５（第６のボード）は、マザーボード１５２０に直接結合されず、むしろ、それらは、それらの隣接する各ボードへのそれぞれの接続を介してマザーボードに間接的に結合される。
【０３８１】
はんだ面から部品面に置かれると、多様な内部ボードコネクタにより、ＰＣＩバス構成要素、ＦＰＧＡ論理デバイス、メモリデバイス、および多様なシミュレーションシステム制御回路の間の通信が可能になる。内部ボードコネクタ１９９０の第１のセットは、図４２のコネクタＪ５〜Ｊ１６に対応する。内部ボードコネクタ１９９１の第２のセットは、図４２のコネクタＪ１７〜Ｊ２８に対応する。内部ボードコネクタ９９２の第３のセットは、図４２のコネクタＪ３およびＪ４に対応する。
【０３８２】
マザーボードコネクタ１５２１〜１５２４は、マザーボード１５２０上に提供され、マザーボード（および、故にＰＣＩバス）を６つのボードに結合する。上述のように、ボード１５２６（第１のボード）、１５３２（第３のボード）、および１５３４（第５のボード）は、それぞれ、コネクタ１５２３、１５２２、および１５２１に直接結合される。他のボード１５２５（第２のボード）、１５３３（第４のボード）、および１５３５（第６のボード）は、マザーボード１５２０に直接結合されない。１つのＰＣＩコントローラのみが、６つ全てのボードに対して必要とされるため、第１のボード１５２６だけがＰＣＩコントローラを含む。さらに、第１のボード１５２６に結合されたマザーボードコネクタ１５２３は、ＰＣＩバスに、およびＰＣＩバスからアクセスを提供する。コネクタ１５２２および１５２１は、電力およびグランドにのみ結合される。隣接したマザーボードコネクタ間の中心から中心への間隔は、一実施形態においてほぼ２０．３２ｍｍである。
【０３８３】
マザーボードコネクタ１５２３、１５２２、および１５２１にそれぞれ直接結合されるボード１５２６（第１のボード）、１５３２（第３のボード）、および１５３４（第５のボード）に関して、Ｊ５〜Ｊ１６のコネクタは、部品面に設置され、Ｊ１７〜Ｊ２８のコネクタは、はんだ面に設置され、Ｊ３〜Ｊ４のローカルバスコネクタは、部品面に設置される。マザーボードコネクタ１５２３、１５２２、および１５２１に直接結合されない他のボード１５２５（第２のボード）、１５３３（第４のボード）、および１５３５（第６のボード）に関して、Ｊ５〜Ｊ１６のコネクタは、はんだ面に設置され、Ｊ１７〜Ｊ２８のコネクタは、部品面に設置され、Ｊ３〜Ｊ４のローカルバスコネクタは、はんだ面に設置される。終端のボード１５２６（第１のボード）および１５３５（第６のボード）に関して、Ｊ１７〜Ｊ２８のコネクタの一部は、１０ΩＲ−パック終端である。
【０３８４】
図４０Ａおよび図４０Ｂは、異なるボードの間にアレイ接続を示す。製造プロセスを容易にするために、単一のレイアウト設計は、全てのボードに関して使用される。上述の説明のように、ボードは、バックプレーンなしで、コネクタを介して他のボードに接続する。図４０Ａは、２つの例示のボード１６１１（ボード２）および１６１０（ボード１）を示す。ボード１６１０の部品面は、ボード１６１１のはんだ面に向かい合っている。ボード１６１１は、多数のＦＰＧＡ論理デバイス、他の構成要素、およびワイヤ線を含む。これら論理デバイスの特定のノードおよびボード１６１１の他の構成要素は、ノードＡ’（参照符号１６１２）およびＢ’（参照符号１６１４）によって表示される。ノードＡ’は、ＰＣＢトレース１６２０を介してコネクタパッド１６１６に結合される。同様に、ノードＢ’は、ＰＣＢトレース１６２３を介してコネクタパッド１６１７に接続される。
【０３８５】
同じように、ボード１６１０はまた、多数のＦＰＧＡ論理デバイス、他の構成要素、およびワイヤ線を含む。これら論理デバイスの特定のノードおよびボード１６１０の他の構成要素は、ノードＡ（参照符号１６１３）およびノードＢ（参照符号１６１５）によって表示される。ノードＡは、ＰＣＢトレース１６２５を介してコネクタパッド１６１８に結合される。同様に、ノードＢは、ＰＣＢトレース１６２２を介してコネクタパッド１６１９に接続される。
【０３８６】
表面取り付けコネクタを用いる、異なるボードに設置されたノード間の信号のルーティングはここで論じられる。図４０Ａにおいて、（１）架空パス１６２０、１６２１、および１６２２によって示されるようなノードＡおよびノードＢ’と、（２）架空パス１６２３、１６２４、および１６２５によって示されるようなノードＢおよびノードＡ’との間に、所望の接続がある。これらの接続は、図３９のボード１５５１と１５５２との間の非対称の相互接続１６００といったパスを目的としている。他の非対称の相互接続は、コネクタ１５８９および１５９０の両面にあるＮＨ〜ＳＨの相互接続１９７７、１９７９、および１９８１を含む。
【０３８７】
Ａ−Ａ’およびＢ−Ｂ’は、相互接続１５１５（Ｎ，Ｓ）のような対称の相互接続に一致する。ＮおよびＳの相互接続は、ホールコネクタを介して使用するのに対し、ＮＨおよびＳＨの非対称相互接続は、ＳＭＤコネクタを用いる（表Ｄを参照）。
【０３８８】
表面取り付けコネクタを用いる実際の装置は、類似のアイテムに対して類似の番号を用いて、図４０Ｂを参照してここで論じられる。図４０Ｂにおいて、ボード１６１１は、ＰＣＢトレース１６２０を介して部品面のコネクタパッド１６３６に結合される部品面のノードＡ’を示す。部品面のコネクタパッド１６３６は、導電性パス１６５１を介してはんだ面のコネクタパッド１６３９に結合される。はんだ面のコネクタパッド１６３９は、導電性パス１６４８を介してボード１６１０の部品面のコネクタパッド１６４２に結合される。最後に、部品面のコネクタパッド１６４２は、ＰＣＢトレース１６２２を介してノードＢに結合される。従って、ボード１６１１上のノードＡ’は、ボード１６１０上のノードＢに結合される。
【０３８９】
同様に、図４０Ｂにおいて、ボード１６１１は、ＰＣＢトレース１６２３を介して部品面のコネクタパッド１６３８に結合された部品面上のノードＢ’を示す。部品面のコネクタパッド１６３８は、導電性パス１６５０を介してはんだ面のコネクタパッド１６３７に結合される。はんだ面のコネクタパッド１６３７は、導電性パス１６４５を介して部品面上のコネクタパッド１６４０に結合される。最後に、部品面のコネクタパッド１６４０は、ＰＣＢトレース１６２５を介してノードＡに結合される。従って、ボード１６１１上のノードＢ’は、ボード１６１０上のノードＡに結合され得る。これらのボードが同じレイアウトを共有するため、導電性パス１６５２および１６５３は、ボード１６１０に隣接して設置された他のボードのための導電性パス１６５０および１６５１と同様の様態で使用され得る。従って、独特の内部ボード接続性スキームは、スイッチング構成要素を用いることなく、表面取り付けを用いて提供され、さらにホールコネクタを介して提供される。
【０３９０】
（Ｆ．タイミング無反応グリッチフリー論理デバイス）
本発明の一実施形態は、保持時間およびクロックグリッチ問題を共に解決する。ユーザ設計を再構成可能な計算システムに構成する間、ユーザの設計で検出された標準の論理デバイス（例えば、ラッチ、フリップフロップ）は、本発明の一実施形態に従って、エミュレーション論理デバイス、すなわちタイミング無反応グリッチフリー（ＴＩＧＦ）論理デバイスと交換される。一実施形態において、ＥＶＡＬ信号に取り込まれたトリガー信号を用いて、これらのＴＩＧＦ論理デバイスにおいて格納された値を更新する。多様な入力信号および他の信号を待って、ユーザ設計のハードウェアモデルを介して伝達し、評価周期中に定常状態に達した後、トリガー信号が提供され、ＴＩＧＦ論理デバイスによって格納される値、またはラッチされる値を更新する。その結果、新しい評価周期が始まる。この評価周期のトリガー周期は、一実施形態において周期的になる。
【０３９１】
上述された保持時間問題は、ここで簡単に議論される。当業者にとって、論理回路設計の共通、かつ、広範な問題は、保持時間の違反である。制御入力が、データ入力（単数または複数）によって示された値をラッチするか、捕捉するか、または格納するように変化した後、論理素子のデータ入力（単数または複数）が、定常に保持されるために必要な最小時間として、保持時間は定義される（そうでなければ、論理素子が適切に動作できない）。
【０３９２】
シフトレジスタの例示は、ここで、保持時間の要求を説明するために論じられる。図７５Ａに例示のシフトレジスタを示す。この例示のシフトレジスタは、３つのＤ型フリップフロップを直列に接続する。すなわち、フリップフロップ２４００の出力は、フリップフロップ２４０１の入力に結合される。フリップフロップ２４０１の出力は、順に、フリップフロップ２４０２の入力に結合される。全体的な入力信号Ｓｉｎは、フリップフロップ２４００の入力に結合され、全体的な出力信号Ｓｏｕｔは、フリップフロップ２４０２の出力から生成される。全ての３つのフリップフロップは、それらのそれぞれの入力において共通のクロック信号を受け取る。このシフトレジスタの設計は、以下の条件に基づく。（１）クロック信号が、同時に全てのフリップフロップに到達すること、および（２）クロック信号のエッジを検出した後、フリップフロップの入力は、保持時間の保持時間中、変化しないこと。
【０３９３】
図７５Ｂのタイミング図を参照すると、システムが保持時間要求を違反しない場合の、保持時間条件が図示される。保持時間は、ある論理素子から次の論理素子へと変化するが、常に仕様書において特定される。クロック入力は、論理０から論理１へと、時間ｔ０において変化する。図７５Ａに示されるように、クロック入力は、各フリップフロップ２４００〜２４０２に提供される。ｔ０におけるこのクロック端から、入力Ｓｉｎは、保持時間ＴＨの期間中、定常になる必要がある。保持時間ＴＨは、時間ｔ０から時間ｔ１に続く。同様に、フリップフロップ２４０１（すなわち、Ｄ２）および２４０２（すなわち、Ｄ３）への入力はまた、クロック信号のトリガー端から保持時間の期間中、定常になる必要がある。この要求は、図７５Ａおよび７５Ｂで満たされるので、入力Ｓｉｎは、フリップフロップ２４００にシフトされ、Ｄ２（論理０）における入力は、フリップフロップ２４０１にシフトされ、ならびにＤ３（論理１）における入力は、フリップフロップ２４０２にシフトされる。当業者にとって、クロック端がトリガーされると、フリップフロップ２４０１（入力Ｄ２における論理１）およびフリップフロップ２４０２（入力Ｄ３における論理０）の入力における新規の値は、次のクロックサイクルにおける次のフリップフロップにシフトされるか、または格納され、保持時間の必要条件が満たされることを想定する。次の表は、これら例示の値に対するシフトレジスタの操作の概要を述べる。
【０３９４】
【表７】
2005500625.tif 000015
【０３９５】
実際の実施において、クロック信号は、全ての論理素子に同時には達さない。むしろ、クロック信号が、ほとんど同時に、または実質的に同時に全ての論理素子に達するように、回路は設計される。クロックスキュー（すなわち、各フリップフロップに達するクロック信号間のタイミング差）が保持時間要求よりもずっと短いように設計される必要がある。従って、全ての論理素子は、適切な入力値を捕捉する。図７５Ａおよび７５Ｂで示される上述の例において、別のフリップフロップが新規の入力値を捕捉する一方で、異なる時間にフリップフロップ２４００〜２４０２に達するクロック信号による保持時間の違反は、結果として古い入力値を捕捉するいくつかのフリップフロップにおいて生じ、一方で、別のフリップフロップが新規の入力値を捕捉する。結果として、シフトレジスタは、適切に操作されない。
【０３９６】
同じシフトレジスタ設計の再構成可能な論理デバイス（例えば、ＦＰＧＡ）装置において、クロックが一次入力から直接生成された場合、回路は、低スキューのネットワークがクロック信号を全ての論理素子に分配し得るように（例えば、論理素子が実質的に同時にクロックエッジを検出する）設計され得る。一次のクロックは、セルフタイムの試験ベンチ（ｔｅｓｔ−ｂｅｎｃｈ）処理から生成される。たいてい、一次のクロック信号は、ソフトウェアにおいて生成され、いくつか（すなわち、１〜１０）の一次クロックのみが、典型的なユーザ回路設計において見出される。
【０３９７】
しかし、クロック信号が一次の入力の代わりに内部論理から生成されると、保持時間は、さらに問題になる。誘導され、ゲートされたクロックは、一次のクロックによって順に駆動される組み合わせ論理およびレジスタのネットワークから生成される。多く（すなわち、１０００以上）の誘導されたクロックは、典型的なユーザ回路設計において見出される。
【０３９８】
特別な注意またはさらなる制御なしで、これらのクロック信号は、異なる時間において各論理素子に達し、クロックスキューは、保持時間よりも長くなり得る。これは、結果として、例えば、図７５Ａおよび７５Ｂに図示されるシフトレジスタ回路のように、回路設計の失敗になり得る。
【０３９９】
図７５Ａで図示される同じシフトレジスタ回路を用いて、ここで、保持時間の違反について論じる。今度は、しかしながら、シフトレジスタ回路の個々のフリップフロップが、図７６Ａに示されるように、複数の再構成可能な論理チップ（例えば、複数のＦＰＧＡチップ）にわたって展開される。第１のＦＰＧＡチップ２４１１は、内在的に導かれたクロック論理２４１０を含む。クロック論理２４１０は、そのクロック信号ＣＬＫをのいくつかの構成要素であるＦＰＧＡチップ２４１２〜２４１６に供給する。この例示において、内在的に生成されたクロック信号ＣＬＫは、シフトレジスタ回路のフリップフロップ２４００〜２４０２に提供される。チップ２４１２は、フリップフロップ２４００を含み、チップ２４１５は、フリップフロップ２４０１を含み、さらにチップ２４１６は、フリップフロップ２４０２を含む。保持時間違反の概念を説明するために、２つの他のチップ２４１３および２４１４が提供される。
【０４００】
チップ２４１１のクロック論理２４１０は、一次のクロック入力（すなわち、おそらく別の導かれたクロック信号）を受け取って、内部クロック信号ＣＬＫを生成する。この内部クロック信号ＣＬＫは、チップ２４１２に移動し、ＣＬＫ１として符号付けされる。クロック論理２４１０からの内部クロック信号ＣＬＫはまた、ＣＬＫ２として、チップ２４１３および２４１４を介してチップ２４１５に移動する。図示されるように、ＣＬＫ１は、フリップフロップ２４００への入力であり、ＣＬＫ２は、フリップフロップ２４０１への入力である。ＣＬＫ１およびＣＬＫ２は共に、例えば、ＣＬＫ１およびＣＬＫ２のエッジが、内部クロック信号ＣＬＫのエッジから遅延されるようにワイヤトレース遅延を経る。さらに、ＣＬＫ２は、他の２つのチップ２４１３および２４１４を介して移動されるため、ＣＬＫ２は、さらなる遅延を経る。
【０４０１】
図７６Ｂのタイミング図を参照すると、内部クロック信号ＣＬＫは、時間ｔ２において生成され、トリガーされる。ワイヤトレース遅延のため、ＣＬＫ１は、時間ｔ３までにチップ２４１２のフリップフロップ２４００に到達しない。ここで、時間ｔ３は時間Ｔ１の遅延である。上の表で示されるように、ＣＬＫ１のクロックエッジの到達以前に、Ｑ１における出力（または入力Ｄ２）は、論理０にある。ＣＬＫ１のエッジがフリップフロップ２４００において感知された後に、Ｄ１における入力は、必要な保持時間Ｈ２（すなわち、時間ｔ４まで）のための定常を維持する必要がある。この時点で、フリップフロップ２４００は、入力論理１にシフトするか、または入力論理１を格納する。故に、Ｑ１（Ｄ２）における出力は、論理１にある。
【０４０２】
これが、フリップフロップ２４００に対して生じると、クロック信号ＣＬＫ２は、チップ２４１５のフリップフロップ２４０１へのクロック信号の通り道を作る。チップ２４１３および２４１４によって生じた遅延Ｔ２によって、ＣＬＫ２は、時間ｔ５においてフリップフロップ２４０１に到達する。今、Ｄ２における入力は論理１にあり、保持時間がこのフリップフロップ２４０１を満たした後、この論理値１は、出力Ｑ２（またはＤ３）に現れる。従って、出力Ｑ２は、ＣＬＫ２の到達前に論理１にあり、出力は，ＣＬＫ２の到達後に論理１にとどまる。これは、誤った結果である。このシフトレジスタは、論理０にシフトするべきである。フリップフロップ２４００が、古い入力値（論理１）に誤ってシフトする場合、フリップフロップ２４０１は、新しい入力値（論理１）に誤ってシフトされる。この誤った動作は、典型的に、クロックスキュー（またはタイミング遅延）が保持時間よりも長くなったときに生じる。この例示において、Ｔ２＞Ｔ１＋Ｈ２である。つまり、図７６Ａに示されるように、いくつかの予防策が取られない場合に、クロック信号があるチップから生成され、異なるチップに常駐する他の論理素子にクロック信号を分配する所で保持時間違反が生じる可能性が高い。
【０４０３】
ここで、図７７Ａおよび７７Ｂを参照して、上述されたクロックグリッチ問題を述べる。一般に、回路の入力が変化するとき、出力が正しい値に安定する前に、非常に短時間で、出力は、いくらかのランダム値に変化する。別の回路が、まさに間違った時間に出力を検査し、ランダム値を読み込んだ場合、結果は間違っており、デバックが困難になり得る。別の回路に不利益に影響したこのランダム値は、グリッチと呼ばれる。典型的な論理回路において、ある回路は、別の回路に対してクロック信号を生成し得る。非補償のタイミング遅延が、１つまたは両方の回路に存在する場合、クロックグリッチ（すなわち、クロック端の計画されていない発生）が発生して、誤った結果を生じ得る。保持時間違反のように、回路設計の正確な論理素子が異なった時間において値を変化するために、クロックグリッチが起こる。
【０４０４】
図７７Ａは、例示の論理回路を示す。この場合、いくつかの論理素子が論理素子の別のセットに対してクロック信号を生成する。つまり、Ｄ型フリップフロップ２４２０、Ｄ型フリップフロップ２４２５、および排他的ＯＲ（ＸＯＲ）ゲート２４２２がＤ型フリップフロップ２４２３に対してクロック信号（ＣＬＫ３）を生成する。フリップフロップ２４２０は、線２４２５によってＤ１においてデータ入力を受け取り、線２４２７によってＱ１においてデータを出力する。フリップフロップ２４２０は、クロック論理２４２４からクロック入力（ＣＬＫ１）を受け取る。ＣＬＫは、クロック論理２４２４から本来生成されたクロック信号を参照して、ＣＬＫ１は、それがフリップフロップ２４２０に到達するときの時間まで遅延された同じ信号を参照する。
【０４０５】
フリップフロップ２４２１は、線２４２６によってＤ２においてデータ入力を受け取って、線２４２８によってＱ２においてデータを出力する。フリップフロップ２４２１は、クロック論理２４２４からクロック入力（ＣＬＫ２）を受け取る。上述されたように、ＣＬＫは、クロック論理２４２４から本来生成されたクロック信号を参照して、ＣＬＫ２は、それがフリップフロップ２４２１に到達するときの時間まで遅延される同じ信号を参照する。
【０４０６】
線２４２７によるフリップフロップ２４２０からの出力および線２４２８によるフリップフロップ２４２１からの出力は、ＸＯＲゲート２４２２への入力である。ＸＯＲゲート２４２２は、フリップフロップ２４２３のクロック入力に、ＣＬＫ３として符号付けされたデータを出力する。フリップフロップ２４２３はまた、線２４２９によりＤ３においてデータを入力し、Ｑ３においてデータを出力する。
【０４０７】
ここで、この回路に対して生じたクロックグリッチ問題は、図７７Ｂに図示されたタイミング図を参照して述べられる。ＣＬＫ信号は、時間ｔ０においてトリガーされる。この時までには、このクロック信号（すなわち、ＣＬＫ１）は、フリップフロップ２４２０に到達し、この時間は、すでに時間ｔ１である。ＣＬＫ２は、時間ｔ２までにフリップフロップ２４２１に到達しない。
【０４０８】
Ｄ１およびＤ２への入力が共に、論理１にあると想定する。ＣＬＫ１が、時間ｔ１においてフリップフロップ２４２０に到達するとき、Ｑ１における出力は、（図７７Ｂに示されるように）論理１にある。ＣＬＫ２は、時間ｔ２において少し遅れてフリップフロップ２４２１に到達し、故に、線２４２８の出力Ｑ２は、時間ｔ１から時間ｔ２までの間、論理０に残る。ＸＯＲゲート２４２２は、時間ｔ１と時間ｔ２との間の時間周期中に、たとえ所望の信号が論理０（１ＸＯＲ１＝０）であっても、提示目的のＣＬＫ３としての論理１をフリップフロップ２４２３のクロック入力に生成する。この時間ｔ１と時間ｔ２との間の時間周期中のＣＬＫ３の生成が、クロックグリッチである。従って、フリップフロップ２４２３の入力線２４２９によりＤ３において提供されたどんな論理値でも、それが所望であっても、所望でなくとも格納され、ここで、このフリップフロップ２４２３は、線２４２９による次の入力のために準備される。正確に所望であるならば、ＣＬＫ１およびＣＬＫ２の時間遅延は、最低限にされ、クロックグリッチは生成されず、または、最低限でも、クロックグリッチは、回路の残りに影響を与えられないほど短い間隔で続く。後者の場合、ＣＬＫ１およびＣＬＫ２の間のクロックスキューが十分に短い場合、ＸＯＲゲート遅延は、グリッチを十分に透過して、回路の残りに影響を与えない。
【０４０９】
保持時間違反問題への２つの公知の解決法は、（１）タイミング調整、および（２）タイミングの再統合である。タイミング調整は、米国特許出願第５，４７８３０号に記載されるように、論理素子の保持時間を延長するために正確な信号パスに十分な遅延素子の挿入を必要とする。例えば、上述のシフトレジスタ回路における入力Ｄ２およびＤ３による十分な遅延を追加することにより、保持時間違反を妨げ得る。従って、図７８において、同様のシフトレジスタ回路は、入力Ｄ２およびＤ３にそれぞれ追加される遅延素子２４３０および２４３１と共に示される。結果として、遅延素子２４３０は、時間ｔ４が時間ｔ５の後に、Ｔ２＜Ｔ１＋Ｈ２（図７６Ｂ）となって生じるように設計され得、その結果、保持時間違反は生じない。
【０４１０】
タイミング調整の解決策による潜在的な問題は、ＦＰＧＡチップの仕様書に強く依存していることである。公知の技術であるように、ＦＰＧＡチップのような再構成可能な論理チップは、ルックアップテーブルを用いて論理素子を実現することである。チップのルックアップテーブルの遅延は、この特定された時間遅延に依存する保持時間超過を回避するタイミング調整方法を用いて仕様書および設計者に提供される。しかし、この遅延は評価だけであり、チップ間で変動する。タイミング調整方法に関する別の潜在的な問題は、設計者が回路設計にわたって存在する配線遅延を補償しなければならないことである。これは不可能なタスクではないが、配線遅延の評価は時間を消費し、誤りを生じる傾向がある。さらにタイミング調整法は、クロックグリッチ問題を解決しない。
【０４１１】
別の解決策は、ＩＫＯＳのＶｉｒｔｕａｌＷｉｒｅｓ  ｔｅｃｈｎｏｌｏｇｙによって導入された技術であるタイミング再合成である。タイミング再合成の概念は、ユーザの回路設計を機能的に等価な設計に変換しつつ、有限状態機械およびレジスタを介してクロックおよびピンアウト（ｐｉｎ−ｏｕｔ）信号のタイミングを厳密に制御する。タイミング再合成は、単一の高速クロックを導入することによってユーザの回路設計を再タイミング調整する（ｒｅｔｉｍｅ）。さらに、ラッチ、ゲートクロック、および多重同期クロックおよび多重非同期クロックをフリップフロップベースの単一クロック同期設計に変換する。従って、タイミング再合成は、各チップの入力ピンアウトおよび出力ピンアウトにおけるレジスタを使用して、緻密な内部チップ信号移動を制御し、その結果内部チップ保持時間超過が発生しない。さらにタイミング再合成は、各チップにおいて有限状態機械を使用し、他のチップからの入力をスケジューリングし、他のチップへの出力をスケジューリングし、そして、基準クロックに基づいて内部フリップフロップの更新をスケジューリングする。
【０４１２】
図７５Ａ、図７５Ｂ、図７６Ａ、および図７６Ｂに関して上述された説明によって導入された同じシフトレジスタ回路を使用することによって、図７９は、タイミング再合成回路の一例を示す。基本的な３つのフリップフロップシフトレジスタ設計は、機能的な等価回路に変換されている。チップ２４３０は、ライン２４４８を介してレジスタ２４４３に結合された元の内部クロック発生論理２４３５を含む。クロック論理２４３５はＣＬＫ信号を発生する。さらに第１の有限状態機械２４３８は、ライン２４４９を介してレジスタ２４４３に結合される。レジスタ２４４３および第１の有限状態機械２４３８は、独立設計のグローバル基準クロックによって制御される。
【０４１３】
さらにＣＬＫ信号は、その信号がチップ２４３４に到達する前に、チップ２４３２および２４３３にわたって送達する。チップ２４３２では、第２の有限状態機械２４４０は、ライン２４６２を介してレジスタ２４４５を制御する。ＣＬＫ信号は、ライン２４６１を介してレジスタ２４４３からレジスタ２４４５に進む。レジスタ２４４５はＣＬＫ信号を、ライン２４６３を介して次のチップ２４３３に出力する。チップ２４３３は、ライン２４６４を介してレジスタ２４４６を制御する第３の有限状態機械２４４１を含む。レジスタ２４４６は、ＣＬＫ信号をチップ２４３４に出力する。
【０４１４】
チップ２４３１は、元のフリップフロップ２４３６を含む。レジスタ２４４４は、入力Ｓｉｎを受け取り、入力Ｓｉｎを、ライン２４５２を介してフリップフロップ２４３６の入力Ｄ１に出力する。フリップフロップ２４３６の出力Ｑ１は、ライン２４５４を介してレジスタ２４６６に結合される。第４の有限状態機械２４３９は、ライン２４５１を介してレジスタ２４４４、ライン２４５５を介してレジスタ２４６６、およびラッチイネーブルライン２４５３を介してフリップフロップ２４３６を制御する。さらに第４の有限状態機械２４３９は、ライン２４５０を介してチップ２４３０から元のクロック信号ＣＬＫを受け取る。
【０４１５】
チップ２４３４は、ライン２４５６を介して、そのフリップフロップのＤ２入力において、チップ２４３１のレジスタ２４６６から信号を受け取る元のフリップフロップ２４３７を含む。フリップフロップ２４３７のＱ２出力は、ライン２４５７を介してレジスタ２４４７に結合される。第５の有限状態機械２４３９は、ライン２４５９を介してレジスタ２４４７、およびラッチイネーブルライン２４５８を介してフリップフロップ２４３７を制御する。さらに第５の有限状態機械２４４２は、チップ２４３２および２４３３を介してチップ２４３０から元のクロック信号ＣＬＫを受け取る。
【０４１６】
タイミング再合成によって、有限状態機械２４３８〜２４４２、レジスタ２４４３〜２４４７および２４６６、ならびに単一のグローバル基準クロックが使用されて、複数のチップにわたる信号フローを制御し、内部フリップフロップを更新する。従って、チップ２４３０では、ＣＬＫ信号の他のチップへの分配は、レジスタ２４４３を介して第１の有限状態機械２４３８によってスケジューリングされる。同様に、チップ２４３１では、第４の有限状態機械２４３９は、入力Ｓｉｎを、レジスタ２４４４を介してフリップフロップ２４３６に送達すること、およびレジスタ２４６６を介してＱ１出力を送達することをスケジューリングする。さらにフリップフロップ２４３６のラッチ機能は、第４の有限状態機械２４３９からのラッチイネーブル信号によって制御される。同じ原理が、他のチップ２４３２〜２４３４における論理に対して支援する。内部チップ入力送達スケジュール、内部チップ出力送達スケジュール、および内部フリップフロップ状態更新のこのような密な制御によると、内部チップ保持時間の超過が取り除かれる。
【０４１７】
しかし、タイミング再合成技術は、有限状態機械およびレジスタの追加を含む、はるかにより大きい機能的に等価な回路にユーザの回路設計を変換することを要求する。典型的には、この技術を実現するために必要なさらなる論理が各チップにおいて利用可能な論理の２０％まで占める。さらに、この技術は、クロックグリッチ問題に影響を受けない。クロックグリッチを避けるために、タイミング再合成技術を用いる設計者は、さらなる予備的なステップを獲得しなければならない。１つの保守的な設計アプローチは、ゲートクロックを利用する論理デバイスへの入力が同時に変化されないように回路を設計することである。積極的なアプローチは、回路の残りに影響を与えないようにゲート遅延を使用して、グリッチをフィルタリングする。しかし上述のように、タイミング再合成は、クロックグリッチを避けるためにいくつかのさらなる普通でない（ｎｏｎ−ｔｒｉｖａｌ）測定を必要とする。
【０４１８】
保持時間およびクロックグリッチ問題の両方を解決する本発明の種々の実施形態が説明される。ＲＣＣコンピューティングシステムのソフトウエアモデルおよびＲＣＣアレイのハードウエアモデルへのユーザ設計のマッピング構成の間、図１８Ａに示されるラッチは、本発明の一実施形態によるタイミングに敏感ではないグリッチのない（ＴＩＧＦ）ラッチを用いてエミュレートする。同様に、図１８Ｂに示された設計フリップフロップは、本発明の一実施形態によるＴＩＧＦフリップフロップを用いてエミュレートされる。これらのＴＩＧＦ論理デバイスは、ラッチまたはフリップフロップの形態であろうとも、エミュレーション論理デバイスとも呼ばれ得る。ＴＩＧＦラッチおよびフリップフロップの更新はグローバルトリガ信号を用いて制御される。
【０４１９】
本発明の一実施形態では、ユーザ設計回路において見出される論理デバイスの全てがＴＩＧＦ論理デバイスと置換されるわけではない。ユーザ設計回路は、ゲートクロックまたは発生したクロックによって制御される一次クロックおよび他の部分によってイネーブルまたはクロックされたこれらの部分を含む。保持時間超過およびクロックグリッチは、論理デバイスがゲートクロックまたは発生したクロックによって制御される後者の場合に対して発行されるため、ゲートクロックまたは発生したクロックによって制御されたこれらの特定の論理デバイスのみが本発明によるＴＩＧＦ論理デバイスで置換される。他の実施形態では、ユーザ設計回路において見出される全ての論理デバイスはＴＩＧＦ論理デバイスによって置換される。
【０４２０】
本発明のＴＩＧＦラッチおよびフリップフロップの実施形態を説明する前に、グローバルトリガ信号が説明される。一般的には、グローバルトリガ信号は、評価期間の間にＴＩＧＦラッチおよびフリップフロップがその状態（すなわち、古い入力値を維持する）に維持し、短いトリガ期間の間にその状態を更新する（すなわち、新しい入力値を格納する）ことを可能にするように使用される。一実施形態では、図８２に示されるグローバルトリガ信号は、上述のＥＶＡＬ信号から分離し、そしてこの信号から発生される。この実施形態では、グローバルトリガ信号は、長い評価期間の次に短いトリガ期間を有する。グローバルトリガ信号は、評価期間の間およびＥＶＡＬサイクルの終了時にＥＶＡＬ信号をトラッキングし、短いトリガ信号がＴＩＧＦラッチおよびフリップフロップを更新するように生成される。別の実施形態では、ＥＶＡＬ信号はグローバルトリガ信号であり、ＥＶＡＬ信号は、評価期間の間に１つの論理状態（例えば論理０）であり、評価しない期間またはＴＩＧＦラッチ／フリップフロップ更新期間の間に別の論理状態（例えば論理１）である。
【０４２１】
ＲＣＣコンピューティングシステムおよびＲＣＣハードウエアアレイに関して上述されたように、評価期間が一次入力およびフリップフロップ／ラッチデバイスの全ての変化を全体のユーザ設計に、一度に一シミュレーションサイクルで伝達するように使用される。この伝達の間に、ＲＣＣシステムは、システム内の全信号に安定状態を達成するまで待機する。この評価期間は、ユーザ設計がＲＣＣアレイの適切な再構成可能な論理デバイス（例えば、ＦＰＧＡチップ）にマッピングされ配置された後に計算される。従って、評価期間は設計特有である。すなわち、１つのユーザ設計に対する評価期間は、別のユーザ設計に対する評価期間とは異なり得る。この評価期間は、次の短いトリガ期間の前に、システムにおける全ての信号は全体のシステムを介して伝達され、安定状態に到達することを確実にするのに十分長くなければならない。
【０４２２】
図８２に示されるように、短いトリガ期間が評価期間に時間的に（ｉｎ  ｔｉｍｅ）隣接して発生する。一実施形態では、短いトリガ期間が評価期間の後に発生する。この短いトリガ期間の前に、入力信号は、評価期間の間にユーザ設計回路のハードウエアモデル構成部にわたって伝達される。本発明の一実施形態によってＥＶＡＬ信号の論理状態の変化によって特徴付けられた短いトリガ期間は、ユーザ設計の全てのＴＩＧＦラッチおよびフリップフロップを制御し、安定状態が達成された後、評価期間から伝達された新しい値で更新され得る。この短いトリガ期間は、低いスキューネットワークにグローバルに分配され、再構成可能な論理デバイスが適切な動作を可能にする期間と同様に短くてもよい（すなわち、図８２に示されるように、ｔ０〜ｔ１およびｔ２〜ｔ３の持続時間）。この短いトリガ期間の間、新しい一次入力は、ＴＩＧＦラッチおよびフリップフロップの各入力ステージにおいてサンプリングされ、同じＴＩＧＦラッチおよびフリップフロップにおける古い格納された値は、ユーザ設計のＲＣＣハードウエアモデルにおける次のステージに出力される。以下の説明では、短いトリガ期間の間に発生するグローバルトリガ信号の一部は、ＴＩＧＦトリガ、ＴＩＧＦトリガ信号、トリガ信号、または単にトリガと呼ばれる。
【０４２３】
図８０Ａは、図１８Ａに元々示されるラッチ２４７０を示す。ラッチ動作は以下のようである。
【０４２４】
ｉｆ（＃Ｓ），Ｑ←１
ｅｌｓｅ  ｉｆ（＃Ｒ），Ｑ←０
ｅｌｓｅ  ｉｆ（ｅｎ），Ｑ←Ｄ
ｅｌｓｅ  Ｑ  ｋｅｅｐｓ  ｔｈｅ  ｏｌｄ  ｖａｌｕｅ．
このラッチはレベルに敏感で非同期であるため、クロック入力がイネーブルされ、ラッチイネーブル入力がイネーブルされる限り、出力Ｑは入力Ｄを追跡する。
【０４２５】
図８０Ｂは、本発明の一実施形態によるＴＩＧＦラッチを示す。図８０Ａのラッチと同様に、ＴＩＧＦラッチは、Ｄ入力、イネーブル入力、セット（Ｓ）、リセット（Ｒ）、および出力Ｏを有する。さらに、ＴＩＧＦラッチはトリガ入力を有する。ＴＩＧＦラッチは、Ｄ型フリップフロップ２４７１、マルチプレクサ２４７２、ＯＲゲート２４７３、ＡＮＤゲート２４７４、および種々の相互接続を含む。
【０４２６】
Ｄ型フリップフロップ２４７１は、ＡＮＤゲート２４７４の出力からライン２４７６を介してその入力を受け取る。このＤ型フリップフロップはまた、そのクロック入力においてライン２４７７上のトリガ信号によってトリガされる。このトリガ信号は、評価サイクルに依存する厳密なスケジュールに従って、ＲＣＣシステムによってグローバルに分配される。Ｄ型フリップフロップ２４７１の出力はライン２４７８を介してマルチプレクサ２４７２の入力の内の１つに結合される。マルチプレクサ２４７２の他の入力は、ライン２４７５上のＴＩＧＦラッチのＤ入力に結合される。このマルチプレクサはライン２４８４上のイネーブル信号によって制御される。マルチプレクサ２４７２の出力は、ライン２４７９を介してＯＲゲート２４７３の入力の内の１つに結合される。ＯＲゲート２４７３の他の入力は、ライン２４８０上のセット（Ｓ）入力に結合される。ＯＲゲート２４７３の出力は、ライン２４８１を介してＡＮＤゲート２４７４の入力の内の１つに接続される。ＡＮＤゲート２４７４の他の入力はライン２４８２のリセット（Ｒ）信号に接続される。ＡＮＤゲート２４７４の出力は、上述のようにライン２４７６を介してＤ型フリップフロップ２４７１の入力にフィードバックされる。
【０４２７】
本発明のこのＴＩＧＦラッチの実施形態の動作がここで説明される。ＴＩＧＦラッチのこの実施形態では、Ｄ型フリップフロップ２４７１は、ＴＩＧＦラッチの現在の状態（すなわち古い値）を保持する。Ｄ型フリップフロップ２４７１の入力におけるライン２４７６は、このＴＩＧＦラッチに既にラッチされた新しい入力値を表す。ライン２４７６は新しい値を表す。なぜなら、ライン２４７５上のＴＩＧＦラッチの主入力（Ｄ入力）は、マルチプレクサ２４７２の入力（ライン２４８４上の適切なイネーブル信号を用いて最終的に表される）からＯＲゲート２４７３を介して、そして最終的にはＡＮＤゲート２４７４を介して、ライン２４８３上に最終的に進み、ライン２４７６上のＤ型フリップフロップ２４７１に、ＴＩＧＦラッチの新しい入力信号をフィードバックするからである。ライン２４７７上のトリガ信号は、ライン２４７６上の新しい入力値をＤ型フリップフロップ２４７１にクロックすることによってＴＩＧＦラッチを更新する。従って、Ｄ型フリップフロップ２４７１のライン２４７８上の出力は、ＴＩＧＦラッチの現在の状態（すなわち古い値）を示しつつ、ライン２４７６上の入力はＴＩＧＦラッチによって既にラッチされた新しい入力値を示す。
【０４２８】
マルチプレクサ２４７２は、Ｄ型フリップフロップ２４７１から現在の状態およびライン２４７５上で新しい入力値を受け取る。イネーブルライン２４８４は、マルチプレクサ２４７２に対するセレクタ信号として機能する。ＴＩＧＦラッチは、トリガ信号がライン２４７７上で供給されるまで更新されないため（すなわち新しい入力値が格納される）、ライン２４７５上のＴＩＧＦラッチのＤ入力およびライン２４８４上のイネーブル入力が任意の順序でＴＩＧＦラッチに到達し得る。このＴＩＧＦラッチ（ユーザ設計のハードウエアモデルにおける他のＴＩＧＦラッチ）が、図７６Ａおよび図７６Ｂに関して上述したように（あるクロック信号が別のクロック信号よりもはるかに遅く到達する）、従来のラッチを使用した回路の保持時間超過を通常引き起こす状況に遭遇する場合、このＴＩＧＦラッチは、トリガ信号がライン２４７７上に供給されるまで適切な古い値を保持することによって適切に機能する。
【０４２９】
このトリガ信号は、低いスキューグローバルネットワークを介して分配される。＊＊＊
さらにこのＴＩＧＦラッチは、クロックグリッチ問題を解決する。ＴＩＧＦラッチにおいてクロック信号がイネーブル信号によって置換されることに留意されたい。ライン２４８４上のイネーブル信号は、評価期間の間にしばしばグリッチし得るが、ＴＩＧＦラッチは、現在の状態を必ず保持するように継続する。ＴＩＧＦラッチが更新され得る機構のみがトリガ信号により存在し、この信号が安定状態に達した場合、一実施形態では、このトリガ信号が評価期間の後に供給される。
【０４３０】
図８１Ａは、図１８Ｂに元々示されたフリップフロップ２４９０を示す。このフリップフロップは以下のように動作する。
【０４３１】
ｉｆ（＃Ｓ），Ｑ←１
ｅｌｓｅ  ｉｆ（＃Ｒ），Ｑ←０
ｅｌｓｅ  ｉｆ（ｐｏｓｉｔｉｖｅ  ｅｄｇｅ  ｏｆ  ＣＬＫ），Ｑ←Ｄ
ｅｌｓｅ  Ｑ  ｋｅｅｐｓ  ｔｈｅ  ｏｌｄ  ｖａｌｕｅ．
フリップフロップイネーブル入力がイネーブルされる限り、このラッチがエッジトリガされるため、出力Ｑは、クロック信号の正のエッジにおいて入力Ｄを追跡する。
【０４３２】
図８１Ｂは、本発明の一実施形態によるＴＩＧＦ  Ｄタイプフリップフロップを示す。図８１Ａのフリップフロップと同様に、ＴＩＧＦフリップフロップは、Ｄ入力、クロック入力、セット（Ｓ）、リセット（Ｒ）、および出力Ｑを有する。さらに、ＴＩＧＦフリップフロップはトリガ入力を有する。ＴＩＧＦフリップフロップは、３つのＤ型フリップフロップ２４９１、２４９２、および２４９６、マルチプレクサ２４９３、ＯＲゲート２４９４、２つのＡＮＤゲート２４９５および２４９７、ならびに種々の相互接続を含む。
【０４３３】
フリップフロップ２４９１は、ライン２４９８上でＴＩＧＦ  Ｄ入力、ライン２４９９上でトリガ入力を受け取り、ライン２５００上でＱ出力を供給する。さらにこの出力ライン２５００は、マルチプレクサ２４９３への入力として機能する。マルチプレクサ２４９３への他の出力はフリップフロップ２４９２のＱ出力からライン２５０３を介して入来する。マルチプレクサ２４９３の出力はライン２５０５を介してＯＲゲート２４９４の入力の内の１つに結合される。ＯＲゲート２４９２の他の入力は、ライン２５０６上のセット（Ｓ）信号である。ＯＲゲート２４９４の出力は、ライン２５０７を介してＡＮＤゲート２４９５の入力の内の１つに結合される。ＡＮＤゲート２４９５の他の入力は、ライン２５０８上のリセット（Ｒ）信号である。ＡＮＤゲート２４９５の出力（これは、全体のＴＩＧＦ出力Ｑでもある）は、ライン２５０１を介してフリップフロップ２４９２の入力に結合される。さらにフリップフロップ２４９２は、ライン２５０２上にトリガ入力を有する。
【０４３４】
マルチプレクサ２４９３に戻って、そのセレクタ入力は、ライン２５０９を介してＡＮＤゲート２４９７の出力に結合される。ＡＮＤゲート２４９７は、ライン２５１０上のＣＬＫ信号からの入力およびライン２５１２を介してフリップフロップ２４９６の出力からの他の入力の内の１つを受け取る。さらにフリップフロップ２４９６は、ライン２５１１上のＣＬＫ信号からの入力およびライン２５１３上のトリガ入力を受け取る。
【０４３５】
本発明のＴＩＧＦフリップフロップの動作の実施形態がここで説明される。この実施形態では、ＴＩＧＦフリップフロップは、３つの異なる点（ライン２４９９を介したＤ型フリップフロップ２４９１、ライン２５０２を介したＤ型フリップフロップ２４９２、およびライン２５１３を介したＤ型フリップフロップ２４９６）におけるトリガ信号を受け取る。
【０４３６】
ＴＩＧＦフリップフロップは、クロック信号のエッジが検出された場合のみ入力値を格納する。本発明の一実施形態によって、要求されたエッジはクロック信号の正のエッジである。クロック信号の正のエッジを検出するために、エッジ検出器２５１５が提供されている。エッジ検出器２５１５は、Ｄ型フリップフロップ２４９６およびＡＮＤゲート２４９７を含む。さらにエッジ検出器２５１５は、Ｄ型フリップフロップ２４９６のライン２５１３上のトリガ信号を介して更新される。
【０４３７】
Ｄ型フリップフロップ２４９１は、トリガ信号がライン２４９９上に提供されるまで、ＴＩＧＦフリップフロップの新しい入力値を保持し、ライン２４９８上のＤ入力に対する任意の変化に抵抗する。従って、ＴＩＧＦフリップフロップの各評価期間の前に、新しい値がＤ型フリップフロップ２４９１に格納される。従ってＴＩＧＦフリップフロップがトリガ信号によって更新されるまで新しい値を予め格納することによって、ＴＩＧＦフリップフロップは、保持時間超過を回避する。
【０４３８】
Ｄ型フリップフロップ２４９２は、トリガ信号がライン２５０２上に供給されるまで、ＴＩＧＦフリップフロップの現在の値（すなわち古い値）を保持する。この値は、この値が更新された後および次の評価期間の前にエミュレートされたＴＩＧＦフリップフロップの状態である。ライン２５０１上のＤ型フリップフロップ２４９２への入力は、新しい値（評価された期間の有意な持続時間に対して、ライン２５００上の値と同じである）を保持する。
【０４３９】
マルチプレクサ２４９３は、ライン２５００上で新しい入力値およびライン２５０３上でＴＩＧＦフリップフロップ２５０３に現在格納された古い値を受け取る。ライン２５０４上のセレクタ信号に基づいて、マルチプレクサは、エミュレートされたＴＩＧＦフリップフロップの出力として、新しい値（ライン２５００）または古い値（ライン２５０３）のいずれかを出力する。ユーザ設計のハードウエアモデルアプローチの安定状態において伝達された全ての信号の前に、この出力は任意のクロックグリッチによって変化する。従って、ライン２５０１上の入力は、評価期間の終了によってフリップフロップ２４９１に格納された新しい値を提示する。トリガ信号はＴＩＧＦフリップフロップによって受け取られる場合、フリップフロップ２４９２は、ライン２５０１に存在した新しい値を格納し、フリップフロップ２４９１は、ライン２４９８上の次の新しい値を格納する。従って、本発明の一実施形態によるＴＩＧＦフリップフロップは、クロックグリッチに負の影響を与えない。
【０４４０】
さらに詳述するために、このＴＩＧＦフリップフロップはまた、クロックグリッチに対していくつかの不感領域（ｉｍｍｕｎｉｔｙ）を提供する。当業者は、図７７Ａに示されるフリップフロップ２４２０、２４２１、および２４２３を図８１ＢのＴＩＧＦフリップフロップの実施形態に置き換えることによって、クロックグリッチは、このＴＩＧＦフリップフロップを使用する任意の回路に影響を与えないことを理解する。図７７Ａおよび図７７Ｂをしばらく参照すると、クロックグリッチは、図７７Ａの回路に負の影響を与える。なぜなら、時間ｔ１〜ｔ２に対して、フリップフロップ２４２３が新しい値でクロックされるべきではない場合に新しい値にクロックされるためである。ＣＬＫ１およびＣＬＫ２信号のスキューの性質は、時間ｔ１〜ｔ２の間、ＸＯＲゲート２４２２に論理１状態を生成させ、次のフリップフロップ２４２３のクロックラインを駆動させる。本発明の実施形態によるＴＩＧＦフリップフロップによって、クロックグリッチは、新しい値のクロッキングに影響を与えない。フリップフロップ２４２３をＴＩＧＦフリップフロップに置換することにより、一旦、信号が評価期間の間、安定状態に達成すると、短いトリガ期間の間のトリガ信号は、ＴＩＧＦフリップフロップがフリップフロップ２４９１（図８１Ｂ）に新しい値を格納することを可能にする。その後、時間ｔ１〜ｔ２からの時間間隔の間に図７７Ｂのクロックグリッチのような任意のクロックグリッチは新しい値にクロックしない。ＴＩＧＦフリップフロップは、トリガ信号のみを用いて更新し、この回路を伝達するこの信号が安定状態に達成した場合、このトリガ信号は、評価期間の後までＴＩＧＦフリップフロップに提示されない。
【０４４１】
ＴＩＧＦフリップフロップの特定の実施形態は、Ｄタイプフリップフロップであるが、他のフリップフロップ（例えば、Ｔ、ＪＫ、ＳＲ）は本発明の範囲内にある。他のタイプのエッジトリガフリップフロップは、Ｄ入力の前にいくつかのＡＮＤ／ＯＲ論理を追加することによってＤ型フリップフロップから発生し得る。
【０４４２】
（ＶＩＩ．シミュレーションサーバ）
本発明の別の実施形態によるシミュレーションサーバは、複数のユーザが同じ再構成可能なハードウエアユニットにアクセスできるように提供されて、時分割された態様で同じユーザ設計または異なるユーザ設計を効率的にシミュレートおよび加速する。高速シミュレーションスケジューラおよび状態スワッピング機構は、高いスループットを生じるアクティブシミュレーションプロセスによってシミュレーションサーバに供給するように使用される。このサーバは、加速およびハードウエア状態スワッピング目的のために再構成可能なハードウエアにアクセスする複数のユーザまたは複数のプロセスを提供する。一旦、加速が得られるか、またはハードウエア状態にアクセスされ、各ユーザまたはプロセスは、ソフトウエアのみにおいてシミュレートし得、従って、再構成可能なハードウエアユニットの制御を他のユーザまたはプロセスに解放する。
【０４４３】
本明細書のシミュレーションサーバ部において、「ジョブ」および「プロセス」等の用語が使用される。本明細書において用語「ジョブ」および「プロセス」は、一般的に相互交換可能に使用される。従来では、バッチシステムが「ジョブ」を実行し、時分割システムが「プロセス」またはプロググラムを格納および実行していた。今日のシステムでは、これらのジョブおよびプロセスは類似している。従って、本明細書中、用語「ジョブ」は、バッチ型システムに限定されず、「プロセス」は、時分割システムに限定されない。むしろ、極端な例では、タイムスライスにおいて、または、任意の他の時分割された仲介物（ｉｎｔｅｒｖｅｎｏｒ）による割り込みなしでプロセスがタイムスライスの範囲内で実行され得る場合、「ジョブ」は、「プロセス」と等価である。他の極端な例では、「ジョブ」が終了するために複数のタイムスライスを要求されない場合、「ジョブ」は、「プロセス」のサブセットである。そのため、複数の時間スライスが、「プロセス」が他の等しい優先度のユーザ／プロセスの存在のために完成するように要求する場合、「プロセス」は、「ジョブ」に分割される。さらに、プロセスは、唯一の高い優先度のユーザであるか、またはプロセスが時間スライス内に完成させるのに十分短いため、「プロセス」が、複数の時間スライスが完成するように要求される場合、「プロセス」は「ジョブ」と等価になる。従って、ユーザは、シミュレーションシステムにおいてロードされ実行された１つ以上の「プロセス」またはプログラムとインタラクトし得、各「プロセス」は、１つ以上の「ジョブ」が時分割システムにおいて完成するように要求し得る。
【０４４４】
１つのシステム構成において、リモート端末を介した複数のユーザは、非ネットワーク環境において同じマイクロプロセッサワークステーションを利用し、同じ再構成可能なハードウエアユニットにアクセスして、同じユーザ回路設計または異なるユーザ回路設計を検討／デバッグする。非ネットワーク環境において、リモート端末はその処理機能にアクセスするためメインコンピューティングシステムに接続される。この非ネットワーク構成は、多数のユーザが、パラレルデバッグ目的のために同じユーザ設計へのアクセスを共有することを可能にする。このアクセスは、時分割プロセスによって達成される。このプロセスにおいて、スケジューラは、複数のユーザへのアクセスの優先度を決定し、ジョブをスワッピングし、そしてスケジューリングされたユーザ間でハードウエアユニットアクセスを選択的にロックする。他の例では、複数のユーザは、デバッグ目的のためにユーザ自身の別の異なるユーザ設計に対するサーバを介して同じ再構成可能なハードウエアユニットにアクセスし得る。この構成では、複数のユーザまたはプロセスは、オペレーティングシステムを有するワークステーションにおける複数のマイクロプロセッサを共有する。別の構成では、分離したマイクロプロセッサベースのワークステーションにおける複数のユーザまたはプロセスは、同一の再構成可能なハードウエアユニットにアクセスし、ネットワークを介して同じユーザ回路設計または異なるユーザ回路設計を検討／デバッグし得る。同様に、このアクセスは、時分割プロセスを介して達成され、このプロセスにおいて、スケジューラは、複数のユーザへのアクセス優先度を決定し、ジョブをスワッピングし、そしてスケジューリングされたユーザ間でハードウエアユニットアクセスを選択的にロックする。ネットワーク環境において、スケジューラは、ＵＮＩＸ（登録商標）ソケットシステム呼び出しを介してネットワークリクエストに注意を払う。このオペレーティングシステムは、コマンドをスケジューラに送信するようにソケットを使用する。
【０４４５】
上述のように、シミュレーションスケジューラは、割り込み型多重優先度ラウンドロビンアルゴリズムを使用する。言い換えると、ユーザまたはプロセスがジョブを完了し、セッションを終了するまでに、より高い優先度のユーザまたはプロセッサがまず提供される。等しい優先度のユーザまたはプロセスの中でも、割り込み型多重優先度ラウンドロビンアルゴリズムが使用され、各ユーザまたはプロセスは、完成するまでその動作を実行するように等しいタイムスライスを割り当てる。タイムスライスは、複数のユーザまたはプロセスが提供される前に長時間待機する必要のないように十分短い。さらにタイムスライスは、シミュレーションサーバのスケジューラが１ユーザまたはプロセスを割り込む前に十分な動作が実行されて、スワップインし、新しいユーザのジョブを実行するのに十分長い。一実施形態では、デフォルトタイムスライスは５秒であり、ユーザ設定可能である。一実施形態では、スケジューラは、オペレーティングシステムのビルトインスケジューラへの特定の呼び出しを行う。
【０４４６】
図４５は、本発明の一実施形態によるマルチプロセッサワークステーションを用いる非ネットワーク環境を示す。図４５は図１の改変体であり、従って、同様の参照符号は同様の構成要素／ユニットのために使用される。ワークスション１１００は、ローカルバス１１０５、ホスト／ＰＣＩブリッジ１１０６、メモリバス１１０７、およびメインメモリ１１０８を含む。キャッシュメモリサブシステム（図示せず）がさらに設けられ得る。他のユーザインターフェイスユニット（例えばモニタ、キーボード）がさらに設けられるが、図４５に示されない。さらにワークステーション１１００は、スケジューラ１１１７および接続／パス１１１８を介してローカルバス１１０５に接続される複数のマイクロプロセッサ１１０１、１１０２、１１０３、および１１０４を含む。公知のように、オペレーティングシステム１１２１は、コンピューティング環境において種々のユーザ、プロセッサ、およびデバイスのためにファイルを管理し、リソースを割り当てるための全体のコンピューティング環境のためのユーザ−ハードウエアインターフェイスの基礎を提供する。概念的目的のために、バス１１２２と共にオペレーティングシステム１１２１が示される。オペレーティングシステムへの参照は、Ａｂｒａｈａｍ  ＳｉｌｂｅｒｓｃｈａｔｚおよびＪａｍｅｓ  Ｌ．Ｐｅｔｅｒｓｏｎによる、ＯＰＥＲＡＴＩＮＧ  ＳＹＳＴＥＭ  ＣＯＮＣＥＰＴＳ（１９９８）およびＷｉｌｌｉａｍ  Ｓｔａｌｌｉｎｇｓ，ＭＯＤＥＲＮ  ＯＰＥＲＡＴＩＮＧ  ＳＹＳＴＥＭＳ（１９９６）において為され得、これらを本明細書中で参考として援用する。
【０４４７】
一実施形態では、ワークステーション１１００は、ＵｌｔｒａＳＰＡＲＣ  ＩＩプロセッサを使用するＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ  Ｅｎｔｒｅｒｐｒｉｓｅ  ４５０システムである。ローカルバスを介するメモリアクセスの代わりに、Ｓｕｎ４５０システムにより、マルチプロセッサは、クロスバースイッチによってメモリへの専用バスを介してメモリへのアクセスを可能にする。従って、複数のプロセスが各命令を実行する複数のマイクロプロセッサを用いて実行し、そしてローカルバスに向かうことなくメモリにアクセスし得る。Ｓｕｎ  ＵｌｔｒａＳＰＡＲＣマルチプロセッサ仕様を有するＳｕｎ４５０システムが本明細書中で参考として援用される。Ｓｕｎ  Ｕｌｔｒａ６０システムは、マイクロプロセッサシステムの別の例であるが、このシステムは２つのプロセッサのみを可能にする。
【０４４８】
スケジューラ１１１７は、デバイスドライバ１１１９および接続／パス１１２０を介して再構成可能なハードウエアユニット２０への時分割アクセスを提供する。スケジューラ１１１７は、シミュレーションジョブ割り込みおよびシミュレーションセッションをスワップイン／スワップアウトすることによって、ホストコンピューティングシステムのオペレーティングシステムとインタラクトするソフトウエアにおいてほとんど実現され、シミュレーションサーバとインタラクトするハードウエアにおいて部分的に実現される。スケジューラ１１１７およびデバイス１１１９は、以下でより詳細に説明される。
【０４４９】
各マイクロプロセッサ１１０１〜１１０４は、ワークステーション１１０１における他のマイクロプロセッサを独立して処理することを可能にする。本発明の一実施形態では、ワークステーション１１００は、ＵＮＩＸ（登録商標）ベースのオペレーティングシステムによって動作するが、他の実施形態では、ワークステーション１１００は、Ｗｉｎｄｏｗｓ（登録商標）ベースのオペレーティングシステムまたはＭａｃｉｎｔｏｓｈベースのオペレーティングシステムによって動作し得る。ＵＮＩＸ（登録商標）ベースのシステムに対して、プログラム、タスク、およびファイルを必要に応じて管理するためのＸ−ＷＩｎｄｏｗ（Ｒ）をユーザインターフェイスが備える。ＵＮＩＸ（登録商標）オペレーティングシステムに関する詳細に対して、参照がＭａｕｒｉｃｅ  Ｊ．Ｂａｃｈ，ＴＨＥ  ＤＥＳＩＧＮ  ＯＦ  ＴＨＥ  ＵＮＩＸ（登録商標）  ＯＰＥＲＡＴＩＮＧ  ＳＹＳＴＥＭ（１９８６）によって為される。
【０４５０】
図４５では、複数のユーザがリモート端末を介してワークステーション１１００にアクセスし得る。この時点で、各ユーザは特定のＣＰＵを用いてそのプロセスを実行し得る。他の時点では、各ユーザは、リソース制限に応じて異なるＣＰＵを使用する。通常、オペレーティングシステム１１２１は、このようなアクセスを決定し、実際、オペレーティングシステム自体は、あるＣＰＵから別のＣＰＵにジャンプし、このタスクを達成し得る。時分割プロセスを処理することに対して、スケジューラはネットワークに注意を払い、ソケットシステム呼び出しによってリクエストし、オペレーティングシステム１１２１へのシステム呼び出しを行い、次に、デバイスドライバ１１１９による割り込み信号の生成を開始することによって再構成可能なハードウエアユニット２０への割り込みを処理する。このような割り込み信号生成は、現在のジョブを停止し、現在割り込まれたジョブに対する状態情報を保存し、ジョブをスワップし、新しいジョブを実行することを含むスケジューリングアルゴリズムにおいて多くのステップの内の１つである。サーバスケジューリングアルゴリズムは、以下に説明される。
【０４５１】
ソケットおよびソケットシステム呼び出しがここで簡単に説明される。一実施形態において、ＵＮＩＸ（登録商標）オペレーティングシステムは、時分割モードで動作し得る。ＵＮＩＸ（登録商標）カーネルは、ＣＰＵをあるプロセス期間（例えばタイムスライス）に割り当て、タイムスライスの終了時に、このプロセスに割り込み、次のタイムスライスに対して別のプロセスをスケジューリングする。以前のタイムスライスから割り込まれたプロセスは、以後のタイムスライスにおける実行に対して再スケジューリングされる。
【０４５２】
内部プロセス通信を可能、かつ、容易にし、高度なネットワークプロトコルの使用を可能にする１つのスキームは、ソケットである。カーネルはクライアントサーバモデルの点で機能する３つの層を有する。これらの３つの層は、ソケット層、プロトコル層、およびデバイス層を含む。上部層すなわちソケット層は、システム呼び出しと下部層（プロトコル層およびデバイス層）との間のインターフェイスを提供する。典型的には、ソケットはクライアントプロセスとサーバプロセスとを結合するエンドポイントを有する。このソケットのエンドポイントは異なるマシンを有し得る。中間層（プロトコル層）は、ＴＣＰおよびＩＰ等の通信のためのプロトコルモジュールを提供する。下部層（デバイス層）は、ネットワークデバイスを制御するデバイスドライバを含む。デバイスドライバの一例は、イーサネット（登録商標）ベースのネットワークを介したイーサネット（登録商標）ドライバである。
【０４５３】
プロセスは、クライアント−サーバモデルを用いて通信する。ここで、サーバプロセスは、一方のエンドポイントにおいて、ソケットに注意を払い、サーバプロセスに対して、クライアントプロセスは、双方向通信経路の他方のエンドポイントにおいて、他のソケットを介して注意を払う。カーネルは、各クライアントおよびサーバの３層の間で、相互接続を維持し、必要に応じてクライアントからサーバにデータをルーティングする。
【０４５４】
ソケットは、通信経路のエンドポイントを確立するソケットシステム呼び出しを含むいくつかのシステム呼び出しを含む。多くのプロセスは、ソケット記述子ｓｄを、多くのシステム呼び出しにおいて用いる。結合システム呼び出しは、名前をソケット記述子と関連付ける。いくつかの他の例示的なシステム呼び出しには、カーネルがソケットへの接続を行うことを要求する接続システム呼び出し、ソケットを閉じる閉鎖システム呼び出し、ソケット接続を閉じる停止システム呼び出し、接続されたソケットでデータを送信する送信および受信システム呼び出しが含まれる。
【０４５５】
図４６は、複数のワークステーションが、ネットワークにわたって、時分割ベースで単一のシミュレーションシステムを共有する、本発明による他の実施形態を示す図である。複数のワークステーションは、スケジューラ１１１７を介してシミュレーションシステムに結合されている。シミュレーションシステムの計算環境において、単一ＣＰＵ１１は、ステーション１１１０内のローカルバス１２に結合されている。また、複数のＣＰＵがこのシステムにおいて提供され得る。当業者にとって公知であるように、オペレーティングシステム１１１８も提供され、殆ど全てのプロセスおよびアプリケーションは、オペレーティングシステム上にある。概念的な目的のため、バス１１２２とともにオペレーティングシステム１１２１が示される。
【０４５６】
図４６において、ワークステーション１１１０は、図１において、オペレーティングシステム１１２１を介してローカルバス１２に結合されるスケジューラ１１１７およびスケジューラバス１１１８とともに示されるコンポーネント／装置を含む。スケジューラ１１１７は、オペレーティングシステム１１２１へのソケット呼び出しを作成することによって、ユーザステーション１１１１、１１１２、および１１１３の時分割アクセスを制御する。スケジューラ１１１７は、多くは、ソフトウェアにおいて、部分的には、ハードウェアにおいて、インプリメントされる。
【０４５７】
この図には、３つのユーザのみが示され、ネットワークにわたってシミュレーションシステムにアクセスすることができる。当然、他のシステム構成は、３つより多いユーザまたは３つ未満のユーザに備える。各ユーザは、遠隔ステーション１１１１、１１１２、または１１１３を介してシステムにアクセスする。遠隔ユーザステーション１１１１、１１１２、および１１１３は、それぞれ、ネットワーク接続１１１４、１１１５および１１１６を介してスケジューラ１１１７に結合される。
【０４５８】
当業者にとって公知であるように、デバイスドライバ１１１９は、ＰＣＩバス５０と再構成可能ハードウェア装置２０との間に結合される。接続または導電経路１１２０は、デバイスドライバ１１１９と再構成可能ハードウェア装置２０との間に提供される。本発明のこのネットワークマルチユーザ実施形態において、スケジューラ１１１７は、デバイスドライバ１１１９と、ハードウェア技術復元の目的のため、ハードウェアの促進およびシミュレーション用の再構成可能ハードウェア装置２０と通信し、制御するように、オペレーティングシステム１１２１を介してインターフェースで連結する。
【０４５９】
再度、ある実施形態において、シミュレーションワークステーション１１００は、ＵｌｔｒａＳＰＡＲＣ  ＩＩマルチプロセッサを用いる、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ  Ｅｎｔｅｒｐｒｉｓｅ  ４５０  ｓｙｓｔｅｍである。ローカルバスを介するメモリアクセスの代わりに、Ｓｕｎ  ４５０  ｓｙｓｔｅｍは、マルチプロセッサが、ローカルバスを拘束する代わりに、クロスバースイッチを介して、メモリ専用バスでメモリにアクセスすることを可能にする。
【０４６０】
図４７は、本発明のネットワーク実施形態による、シミュレーションサーバの高レベルな構造を示す図である。ここで、オペレーティングシステムは、明示されていないが、当業者にとって公知であるように、オペレーティングシステムは、シミュレーション計算環境における様々なユーザ、プロセス、およびデバイスの役に立つように、ファイル管理およびリソース割り当てのためには、常に存在する。シミュレーションサーバ１１３０は、スケジューラ１１３７、１つ以上のデバイスドライバ１１３８、および再構成可能ハードウェア装置１１３９を含む。図４５および４６においては、単一集積装置として明示されていないが、シミュレーションサーバは、スケジューラ１１１７、デバイスドライバ１１１９、および再構成可能ハードウェア装置２０を含む。図４７に戻ると、シミュレーションサーバ１１３０は、ネットワーク接続／経路１１３４、１１３５、および１１３６をそれぞれ介して、３つのワークステーション（または、ユーザ）１１３１、１１３２、および１１３３に結合される。上述したように、３つより多いワークステーションまたは３つ未満のワークステーションは、シミュレーションサーバ１１３０に結合され得る。
【０４６１】
シミュレーションサーバにおけるスケジューラは、プリエンプティブラウンドロビンアルゴリズムに基づく。本質的には、ラウンドロビン方式は、いくつかのユーザまたはプロセスが、連続的に実行して、周期的実行を完了することを可能にする。従って、各シミュレーションジョブ（ネットワーク環境においてワークステーションに関連するか、またはマルチプロセス非ネットワーク環境においてユーザ／プロセスに関連するジョブ）は、優先度レベルおよび実行される固定のタイムスライスが割り当てられる。
【０４６２】
概して、より優先度が高いジョブは、完了するために最初に実行される。一方の極端な例では、異なるユーザがそれぞれ異なる優先度を有する場合、まず、最も優先度が高いユーザに対して、このユーザのジョブが完了するまで役目を果たし、最も優先度が低いユーザに対しては、最後に役目を果たす。ここでは、各ユーザの優先度が異なり、スケジューラは、優先度に従って役目を果たすに過ぎないため、タイムスライスが用いられない。このシナリオは、完了するまでシミュレーションシステムにアクセスするユーザが１つしかない場合に類似する。
【０４６３】
他方の極端な例では、異なるユーザが等しい優先度を有する。従って、先入れ先出し（ＦＩＦＯ）キューを有するタイムスライスの概念が採用される。優先度が等しいジョブの間で、各ジョブは、ジョブが完了するか、または、固定タイムスライスが終わるか、いずれかが先に来るまで実行される。ジョブが、タイムスライスの間、完了するまで実行されない場合、完了したタスクに関連するシミュレーションイメージは、後で復元され、実行されるために保存される必要がある。その後、このジョブは、キューの最後に位置付けられる。次のジョブについて、保存されたシミュレーションイメージが存在する場合には、次のタイムスライスにおいて復元され、実行される。
【０４６４】
優先度が高いジョブは、優先度がより低いジョブよりも優先され得る。すなわち、優先度が等しいジョブは、タイムスライスを介して実行され、完了するまで、ランドロビン様式で実行される。その後、より優先度が低いジョブが、ラウンドロビン様式で実行される。より優先度が低いジョブが実行されている間に、より優先度が高いジョブがキューに挿入される場合、より優先度が高いジョブが実行され、完了するまで、より優先度が低いジョブよりも優先される。従って、より優先度が高いジョブを実行して、より優先度が低いジョブが実行され始める前に、完了する。優先度が低いジョブが既に実行され始めている場合、優先度が低いジョブは、優先度が高いジョブが実行され、完了するまで、さらに、完了するまで実行されない。
【０４６５】
一実施形態において、ＵＮＩＸ（登録商標）オペレーティングシステムは、基本的、且つ、基礎的なプリエンプティブラウンドロビンスケジューリングアルゴリズムを提供する。本発明の一実施形態による、シミュレーションサーバのスケジューリングアルゴリズムは、オペレーティングシステムのスケジューリングアルゴリズムと共に機能する。ＵＮＩＸ（登録商標）を用いるシステムにおいて、スケジューリングアルゴリズムのプリエンプティブな性質は、オペレーティングシステムにユーザ定義スケジュールを優先することを提供する。時分割方式を可能にするため、シミュレーションスケジューラは、オペレーティングシステム自体のスケジューリングアルゴリズムの上でプリエンプティブ複数優先度ラウンドロビンアルゴリズムを用いる。
【０４６６】
本発明の一実施形態による、複数ユーザとシミュレーションサーバとの間の関係は、複数ユーザがクライアントであり、シミュレーションサーバがサーバである場合のクライアント−サーバモデルに従う。ユーザクライアントとサーバとの間の通信は、ソケット呼び出しを介して発生する。簡略的に図５５を参照すると、クライアントは、クライアントプログラム１１０９、ソケットシステム呼び出しコンポーネント１１２３、ＵＮＩＸ（登録商標）カーネル１１２４、およびＴＣＰ／ＩＰプロトコルコンポーネント１１２５を含む。サーバは、ＴＣＰ／ＩＰプロトコルコンポーネント１１２６、ＵＮＩＸ（登録商標）カーネル１１２７、ソケットシステム呼び出しコンポーネント１１２８、およびシミュレーションサーバ１１２９を含む。複数クライアントは、シミュレーションジョブが、クライアントアプリケーションプログラムから、ＵＮＩＸ（登録商標）ソケット呼び出しを介して、サーバにおいてシミュレーションされるようにリクエストし得る。
【０４６７】
一実施形態において、典型的なイベントのシーケンスには、複数クライアントが、ＵＮＩＸ（登録商標）ソケットプロトコルを介してサーバーにリクエストを送信することが含まれる。各リクエストについて、サーバは、コマンドが首尾良く実施されたか否かについてのリクエストを受け取ったことを通知する。しかし、サーバキューステータスのリクエストについては、サーバが、ユーザに適切に表示し得るように、現在のキュー状態で応答する。以下の表Ｆに、クライアントからの関係するソケット命令を挙げる。
【０４６８】
【表８】
2005500625.tif 000016
【０４６９】
各ソケット呼び出しにおいて、整数で暗号化された各コマンドには、さらなるパラメータ、例えば、設計名を表す＜設計＞が続き得る。シミュレーションサーバからの応答は、コマンドが首尾良く実行される場合は、「０」であり、コマンドが失敗する場合は、「１」である。キューステータスをリクエストするコマンド「５」について、コマンドの返答のうちの一実施形態は、「＼０」というユーザのスクリーンに表示される文字で終了するＡＳＣＩＩテキストである。これらのシステムソケット呼び出しを用いて、適切な通信プロトコル信号が、デバイスドライバを介して、再構成可能なハードウェア装置に送信され、再構成可能なハードウェア装置から受信される。
【０４７０】
図４８は、本発明による、シミュレーションサーバのアーキテクチャの一実施形態である。上述したように、複数ユーザまたは複数プロセスに対して、ユーザの設計のシミュレーションおよびハードウェア促進について、時分割様式で、単一シミュレーションサーバが役目を果たし得る。従って、ユーザ／プロセス１１４７、１１４８、および１１４９は、それぞれ、プロセス間通信経路１１５０、１１５１、および１１５２を介して、シミュレーションサーバ１１４０に結合される。プロセス間通信経路１１５０、１１５１、および１１５２は、マルチプロセッサ設定および動作と同じワークステーションか、または、複数ワークステーション用のネットワークにあり得る。各シミュレーションセッションは、再構成可能なハードウェア装置を有する通信用のハードウェア状態と共に、ソフトウェアシミュレーション状態を含む。ソフトウェアセッションの間のプロセス間通信は、シミュレータープラグインカードがインストールされる同じワークステーション、または、ＴＣＰ／ＩＰネットワークを介して接続される別のワークステーションにあるシミュレーションセッションを有する能力を提供する、ＵＮＩＸ（登録商標）ソケット、またはシステム呼び出しを用いて行われる。シミュレーションサーバとの通信は、自動的に開始される。
【０４７１】
図４８において、シミュレーションサーバ１１４０は、サーバモニタ１１４１、シミュレーションジョブキューテーブル１１４２、優先度分類器１１４３、ジョブスワップ器１１４４、デバイスドライバ（単数または複数）１１４５、および再構成可能ハードウェア装置１１４６を含む。シミュレーションジョブキューテーブル１１４２、優先度分類器１１４３、およびジョブスワップ器１１４４は、図４７に示すスケジューラ１１３７を構成する。
【０４７２】
サーバモニタ１１４１は、システムの管理者にユーザインターフェース機能を提供する。ユーザは、キューにおけるシミュレーションジョブ、スケジューリング優先度、使用履歴、およびシミュレーションジョブスワップ効率を表示するようにシステムに命令することによって、シミュレーションサーバのステータスをモニタし得る。他のユティリティ機能には、ジョブ優先度の編集、シミュレーションジョブの削除、およびシミュレーションサーバ状態のリセットが含まれる。
【０４７３】
シミュレーションジョブキューテーブル１１４２は、スケジューラによって挿入されるキューにおける処理中の全ての突出したシミュレーションリクエストのリストを保持する。テーブル項目には、ジョブの数、ソフトウェアシミュレーションの数、ソフトウェアシミュレーションイメージ、ハードウェアシミュレーションイメージファイル、設計構成ファイル、優先度の数、ハードウェアサイズ、ソフトウェアサイズ、シミュレーション実行の累積時間、および所要者識別が含まれる。ジョブキューは、先入れ先出し（ＦＩＦＯ）キューを用いて実現される。従って、新しいジョブがリクエストされると、キューの最後に置かれる。
【０４７４】
優先度分類器１１４３は、キューにおけるいずれのシミュレーションジョブが実行されるかを決定する。一実施形態において、シミュレーションジョブ優先度方式は、ユーザにより定義可能（すなわち、システム管理者によって制御可能、且つ定義可能）であり、いずれのシミュレーションプロセスが、現在の実行について優先度を有するか制御する。一実施形態において、優先度レベルは、特定のプロセスまたは特定のユーザの重要度に基づいて、固定される。他の実施形態において、優先度レベルは動的であり、シミュレーション中に変更され得る。好適な実施形態において、優先度は、ユーザＩＤに基づく。典型的には、１人のユーザの優先度が高く、他の全てのユーザの優先度は、低いが等しい。
【０４７５】
優先度レベルは、システム管理者によって設定可能である。シミュレータサーバは、全てのユーザ情報を、典型的には、「／ｅｔｃ／ｐａｓｓｗｄ」と呼ばれる、ＵＮＩＸ（登録商標）ユーザファイルにおいて見出される、ＵＮＩＸ（登録商標）設備から入手する。新たなユーザを追加することは、新たなユーザをＵＮＩＸ（登録商標）システム内に追加するプロセスと整合する。全てのユーザを定義した後、シミュレータサーバモニタは、ユーザの優先度レベルを調節するために用いられ得る。
【０４７６】
ジョブスワップ器１１４４は、一時的に、スケジューラに関してプログラムされた優先度決定に基づいて、あるプロセスまたはあるワークステーションに関連する、あるシミュレーションジョブを、他のプロセスまたはワークステーションに関連する、他のシミュレーションジョブと取り換える。複数のユーザが、同じ設計をシミュレートする場合、ジョブスワップ器は、シミュレーションセッションについて、格納されたシミュレーション状態のみを取り換える。しかし、複数ユーザが複数の設計をシミュレートする場合、ジョブスワップ器が、シミュレーション状態において交換される前に、ハードウェア設定用の設計をロードする。一実施形態において、ジョブ交換は、再構成可能ハードウェア装置アクセスについてのみ行われる必要があるので、ジョブ交換メカニズムは、本発明の時分割実施形態の性能を向上させる。従って、１つのユーザが、ある程度の期間、ソフトウェアシミュレーションを必要とする場合、サーバは、他のユーザの他のジョブを交換して、この他のユーザが、ハードウェア促進用の再構成可能なハードウェア装置にアクセスし得るようにする。ジョブ交換の頻度は、ユーザによる調節およびプログラムが可能である。デバイスドライバは、ジョブを交換する、再構成可能なハードウェア装置と通信する。
【０４７７】
次に、シミュレーションサーバの動作を説明する。図４９は、動作中のシミュレーションサーバのフローチャートである。初期的には、工程１１６０で、システムはアイドルである。システムが工程１１６０でアイドルである場合、シミュレーションサーバは、必ずしも、イナクティブであるわけではないし、シミュレーションタスクが実行していないわけでもない。実際には、アイドルとは、下記のうちの１つを意味する。（１）シミュレーションが実行されていない。（２）１つのユーザ／ワークステーションのみが、１つのプロセッサ環境においてアクティブであり、時分割が必要とされない。あるいは、（３）マルチプロセス環境において１つのユーザ／ワークステーションのみがアクティブであるが、１つのプロセスのみが実行されている。従って、上記の状態２および３は、シミュレーションサーバが、１つしか処理するジョブを有さず、従って、ジョブをキューに並べ、優先度を決定し、ジョブをスワップすることが、必要、且つ、本質的でないことを示し、シミュレーションサーバは、他のワークステーションまたはプロセスから、リクエスト（イベント１１６１）を受け取らないので、アイドルである。
【０４７８】
シミュレーションリクエストが、複数のユーザ環境のワークステーションから、または複数のプロセッサ環境のマイクロプロセッサからの１つ以上のリクエスト信号に起因して発生する場合、シミュレーションサーバは、工程１１６２で、入来するシミュレーションジョブ（単数または複数）をキューに並べる。スケジューラは、全ての処理中のシミュレーションリクエストをそのキューに挿入して、全ての処理中のシミュレーションリクエストをリストに挙げるように、シミュレーションジョブキューテーブルを保持する。バッチシミュレーションジョブについて、サーバにおけるスケジューラは、全ての入来シミュレーションリクエストをキューに並べ、人間の介入なしで、タスクを自動的に処理する。
【０４７９】
その後、シミュレーションサーバは、キューに並べられたジョブを分類して、工程１１６３において、優先度を決定する。この工程は、複数のジョブについて、再構成可能なハードウェア装置へのアクセスを提供するため、サーバがその間で優先順位を付ける必要がある場合、特に重要である。優先度分類器は、キューにおけるいずれのシミュレーションジョブが実行されるかを決定する。一実施形態において、シミュレーションジョブ優先度方式は、リソース競合が存在する場合、現在の実行について、いずれのシミュレーションプロセスが優先度を有するかを制御するように、ユーザにより定義可能（すなわち、システム管理者によって制御可能、且つ定義可能）である。
【０４８０】
工程１１６３における優先度の分類の後、サーバは、必要に応じて、工程１１６４において、シミュレーションジョブを交換する。この工程は、サーバにおいてスケジューラに関してプログラムされた優先度決定に基づいて、一時的に、あるプロセスまたはあるワークステーションに関連するあるシミュレーションジョブを、他のプロセスまたはワークステーションに関連する他のシミュレーションジョブと置き換える。複数のユーザが、同じ設計をシミュレートする場合、ジョブスワップ器は、シミュレーションセッションについて、格納されたシミュレーション状態のみを取り換える。しかし、複数のユーザが複数の設計をシミュレートする場合、ジョブスワップ器が、まず、シミュレーション状態において交換される前に、ハードウェア設定用の設計をロードする。ここで、デバイスドライバは、ジョブを交換するように、再構成可能なハードウェア装置とも通信する。
【０４８１】
一実施形態において、ジョブ交換は、再構成可能ハードウェア装置アクセスについてのみ行われる必要があるので、ジョブ交換メカニズムは、本発明の時分割実施形態の性能を向上させる。従って、１つのユーザが、ある程度の期間、ソフトウェアシミュレーションを必要とする場合、サーバは、他のユーザの他のジョブを交換して、この他のユーザが、ハードウェア促進用の再構成可能なハードウェア装置にアクセスし得るようにする。例えば、２つのユーザ、ユーザ１およびユーザ２が、再構成可能なハードウェア装置へのアクセス用のシミュレーションサーバに結合されているとする。あるときには、ユーザ１がシステムにアクセスするので、ユーザ１の設計について、デバッギングが行われ得る。ユーザ１がソフトウェアモードにおいてのみデバッギングする場合、サーバは、ユーザ２がアクセスできるように、再構成可能なハードウェア装置を解除し得る。サーバは、ユーザ２のジョブをスワップし、ユーザ２は、モデルのソフトウェアシミュレーション、または、ハードウェア促進のいずれかを行い得る。ユーザ１およびユーザ２の間の優先度に依存して、ユーザ２は、ある所定の期間の間、再構成可能なハードウェア装置へのアクセスを継続し得るか、または、ユーザ１が促進のため、再構成可能なハードウェア装置を必要とする場合には、サーバは、ユーザ２のジョブを優先させ得るので、ユーザ１のジョブは、再構成可能なハードウェア装置を用いて、ハードウェア促進についてスワップされ得る。所定の時間とは、同じ優先度の複数のリクストに基づいた、シミュレータジョブの優先権のことである。一実施形態において、デフォルトの時間は、５分であるが、この時間は、ユーザによって設定可能である。この５分の設定は、タイムアウトタイマの一形態を表す。本発明のシミュレーションシステムは、現在のシミュレーションジョブには非常に時間がかかり、他の保留中の等しい優先度のジョブが再構成可能なハードウェアモデルへのアクセスを得る必要があるとシステムが決定するので、タイムアウトタイマを用いて、現在のシミュレーションジョブの実行を停止する。
【０４８２】
工程１１６４においてジョブスワップ工程が完了する場合、サーバ内のデバイスドライバが、再構成可能なハードウェア装置をロックするので、現在スケジューリングされているユーザまたはプロセスのみが、シミュレートし、ハードウェアモデルを用いることができる。ロックおよびシミュレーション工程は、工程１１６５において発生する。
【０４８３】
イベント１１６６において、現在のシミュレーションセッションでのシミュレーションの完了または一時停止のいずれかが発生するとき、サーバは、優先度分類工程１１６３に戻って、保留中のシミュレーションジョブの優先度を決定し、必要に応じて、シミュレーションジョブをスワップする。同様に、サーバは、イベント１１６７において、サーバを優先度分類状態１１６３に戻すように、現在アクティブであるシミュレーションジョブの実行を優先させる。優先権は、ある特定の状況の下でのみ発生する。このような状態のうちの１つとして、より優先度が高いタスクまたはジョブが保留中である場合がある。他のこのような状態として、システムが計算集中シミュレーションタスクを現在実行している場合がある。この場合、スケジューラは、タイムアウトタイマを用いることによって、現在実行しているジョブを優先させて、優先度が等しいタスクまたはジョブをスケジューリングするようにプログラムされ得る。一実施形態において、タイムアウトタイマは、５分に設定され、現在のジョブが５分実行される場合、システムは、現在のジョブを優先させて、保留中のジョブを、優先度のレベルが同じであっても、スワップする。
【０４８４】
図５０は、ジョブスワッププロセスのフローチャートである。ジョブスワップ機能は、図４９の工程１１６４において行われ、図４８のジョブスワップ器１１４４として、シミュレーションサーバハードウェア内に示される。図５０において、シミュレーションジョブが他のシミュレーションジョブとスワップされる必要がある場合、ジョブスワップ器は、工程１１８０において、再構成可能なハードウェア装置に割り込みを送信する。再構成可能なハードウェア装置が、現在あらゆるジョブを実行していない（すなわち、システムがアイドルであるか、または、ユーザが、任意のハードウェア促進介入のみがないソフトウェアシミュレーションモードで操作している）場合、割り込みは、直ちに、再構成可能なハードウェア装置をジョブスワップに備えて準備する。しかし、再構成可能なハードウェア装置が、現在、ジョブを実行している場合、命令を実行しているか、または、データを処理している最中で、割り込み信号が認識されるが、再構成可能な装置は、現在保留中の命令の実行、および現在のジョブのデータの処理を継続する。現在のシミュレーションジョブが命令の実行またはデータの処理の最中でないときに、再構成可能なハードウェア装置が割り込み信号を受信する場合、割り込み信号は、直ちに、再構成可能なハードウェア装置の動作を実質的に終わらせる。
【０４８５】
工程１１８１において、シミュレーションシステムは、現在のシミュレーションイメージ（すなわち、ハードウェアおよびソフトウェア状態）を保存する。このイメージを保存することによって、ユーザは、後で、保存された時点までシミュレーション全体を再実行することなく、シミュレーション実行を復元し得る。
【０４８６】
工程１１８２において、シミュレーションシステムは、新たなユーザ設計を用いて、再構成可能なハードウェア装置を設定する。この設定工程は、新たなジョブが、設定済みであり、再構成可能なハードウェア装置にロードされた設計とは異なるユーザ設計と関連し、実行がちょうど割り込まれたところである場合にのみ必要である。設定後、保存されたハードウェアシミュレーションイメージは、工程１１８３において再ロードされ、保存されたソフトウェアシミュレーションイメージは、工程１１８４において再ロードされる。新たなシミュレーションジョブが同じ設計と関連する場合、さらなる設定は必要とされない。同じ設計について、シミュレーションシステムは、工程１１８３におけるその同じ設計の新たなシミュレーションジョブと関連する、所望のハードウェアシミュレーションイメージを、新たなジョブのシミュレーション設計が、ちょうど割り込まれたところのジョブのシミュレーションイメージとは恐らく異なるので、ロードする。設定工程の細部は、この特許明細書中で提供される。その後、関連するソフトウェアシミュレーションイメージは、工程１１８４において、再ロードされる。ハードウェアおよびソフトウェアシミュレーションイメージの再ロードの後、工程１１８５において、この新たなジョブについて、シミュレーションが開始し得、以前に割り込まれたジョブは、しばらくは、再構成可能なハードウェア装置へのアクセスがないので、ソフトウェアシミュレーションモードのみで進み得る。
【０４８７】
図５１は、デバイスドライバと再構成可能なハードウェア装置との間の信号を示す図である。デバイスドライバ１１７１は、スケジューラ１１７０と再構成可能なハードウェア装置１１７２との間のインターフェースを提供する。また、デバイスドライバ１１７１は、図４５および４６に示すように、計算環境全体（すなわち、単数または複数のワークステーション、ＰＣＩバス、ＰＣＩデバイス）と、再構成可能なハードウェア装置１１７２との間のインターフェースを提供するが、図５１には、シミュレーションサーバ部分のみを示す。デバイスドライバと再構成可能なハードウェア装置との間の信号には、双方向通信ハンドシェイク信号と、計算環境から、スケジューラを介して再構成可能なハードウェア装置へと送られる一方向設計構成情報と、スワップして用いられるシミュレーション状態情報と、スワップして用いられなくなったシミュレーション状態情報と、デバイスドライバから、再構成可能なハードウェア装置へと送られ、シミュレーションジョブがスワップされ得る割り込み信号とが含まれる。
【０４８８】
ライン１１７３は、双方向通信ハンドシェイク信号を搬送する。これらの信号およびハンドシェイクプロトコルは、図５３および５４を参照しながら、さらに説明される。
【０４８９】
ライン１１７４は、計算環境から、スケジューラ１１７０を介して、再構成可能なハードウェア装置１１７２へと一方向設計構成情報を搬送する。初期設定情報は、このライン１１７０上を、モデリングのために、再構成可能なハードウェア装置１１７２へと送信され得る。さらに、ユーザが異なるユーザ設計をモデリングおよびシミュレーションしている場合、設定情報は、タイムスライスの間、再構成可能なハードウェア装置１１７２へと送信される必要がある。異なるユーザが同じユーザ設計をモデリングする場合、新たな設計構成が必要ではなく、むしろ、同じ設計に関連する、異なるシミュレーションハードウェア状態が、異なるシミュレーション実行において、再構成可能なハードウェア装置１１７２へと送信される必要があり得る。
【０４９０】
ライン１１７５は、スワップされて用いられるシミュレーション状態情報を、再構成可能なハードウェア装置１１７２へと搬送する。ライン１１７６は、スワップされて用いられなくなったシミュレーション状態情報を、再構成可能なハードウェア装置から計算環境（すなわち、通常のメモリ）へと搬送する。スワップされて用いられるシミュレーション状態情報には、再構成可能なハードウェア装置１１２７を促進するために必要とされる、以前に保存されたハードウェアモデル状態情報、およびハードウェアメモリ状態が含まれる。スワップされて用いられる状態情報は、タイムスライスの開始において送信され、スケジューリングされた現在のユーザが、促進のため、再構成可能なハードウェア装置１１７２にアクセスし得る。スワップされて用いられなくなったシミュレーション状態情報には、再構成可能なハードウェア装置１１７２が割り込み信号を受信して、異なるユーザ／プロセスに関連する次のタイムスライスに移る際に、タイムスライスの終わりでメモリに保存される必要があるハードウェアモデルおよびメモリ状態情報が含まれる。状態情報の保存は、現在のユーザ／プロセスが、後で、例えば、この現在のユーザ／プロセスに割り当てられた次のタイムスライスにおいて、この状態を復元することを可能にする。
【０４９１】
ライン１１７７は、割り込み信号を、デバイスドライバ１１７１から、再構成可能なハードウェア装置に送信し、シミュレーションジョブがスワップされ得る。この割り込み信号は、タイムスライスとタイムスライスとの間に送信されて、現在のタイムスライスの現在のシミュレーションジョブがスワップされて用いられなくなり、新たなタイムスライス用の新たなシミュレーションジョブにスワップされる。
【０４９２】
次に、本発明の一実施形態による通信ハンドシェイクプロトコルは、図５３および５４を参照しながら説明される。図５３に、デバイスドライバと、再構成可能なハードウェア装置との間の、ハンドシェイク論理インターフェースを介する通信ハンドシェイク信号を示す。図５４に、通信プロトコルの状態図を示す。図５１に、ライン１１７３上の通信ハンドシェイク信号を示す。図５３は、デバイスドライバ１１７１と再構成可能なハードウェア装置１１７２との間の通信ハンドシェイク信号の詳細な図である。
【０４９３】
図５３において、ハンドシェイク論理インターフェース１２３４が、再構成可能なハードウェア装置１１７２に設けられている。あるいは、ハンドシェイク論理インターフェース１２３４は、再構成可能なハードウェア装置１１７２の外部にインストールされ得る。４組の信号が、デバイスドライバ１１７１と、ハンドシェイク論理インターフェース１２３４との間に提供される。これらの信号は、ライン１２３０上の３ビットのＳＰＡＣＥ信号であり、ライン１２３１上の１ビットの読み出し／書き込み信号であり、ライン１２３２上の４ビットのＣＯＭＭＡＮＤ信号であり、ライン１２３３上の１ビットのＤＯＮＥ信号である。ハンドシェイク論理インターフェースは、これらの信号を処理して、再構成可能なハードウェア装置を、行われる必要がある様々な操作に適したモードにする論理回路を含む。インターフェースは、ＣＴＲＬ＿ＦＰＧＡ装置（または、ＦＰＧＡ  Ｉ／Ｏコントローラ）に結合される。
【０４９４】
３ビットのＳＰＡＣＥ信号について、ＰＣＩバスを介する、シミュレーションシステムの計算環境と再構成可能なハードウェア装置との間のデータ転送は、ソフトウェア／ハードウェア境界における、ある特定のＩ／Ｏアドレススペース、すなわち、ＲＥＧ（レジスタ）、ＣＬＫ（ソフトウェアクロック）、Ｓ２Ｈ（ソフトウェアからハードウェア）、およびＨ２Ｓ（ハードウェアからソフトウェア）用に指定される。上述したように、シミュレーションシステムは、ハードウェアモデルを、異なるコンポーネントのタイプおよび制御機能に従って、メインメモリ内の４つのアドレススペースにマッピングする。ＲＥＧスペースは、レジスタコンポーネント用に指定される。ＣＬＫスペースは、ソフトウェアクロック用に指定される。Ｓ２Ｈスペースは、ハードウェアモデルへのソフトウェアテストベンチコンポーネントの出力用に指定される。Ｈ２Ｓスペースは、ソフトウェアテストベンチコンポーネントへのハードウェアモデルの出力用に指定される。これらの専用のＩ／Ｏバッファスペースは、システム初期化の間、カーネルのメインメモリスペースにマッピングされる。
【０４９５】
以下の表Ｇに、ＳＰＡＣＥ信号の各々の記述を提供する。
【０４９６】
【表９】
2005500625.tif 000017
【０４９７】
ライン１２３１上の読み出し／書き込み信号は、データ転送が読み出しであるか、または書き込みであるかを示す。ライン１２３３上のＤＯＮＥ信号は、ＤＭＡデータ転送期間の完了を示す。
【０４９８】
４ビットのＣＯＭＭＡＮＤは、データ転送操作が、書き込みであるか、読み出しであるか、再構成可能なハードウェア装置への新たなユーザ設計の設定であるか、または、シミュレーションの割り込みであるかを示す。下記の表Ｈに示すように、ＣＯＭＭＡＮＤプロトコルは、以下の通りである。
【０４９９】
【表１０】
2005500625.tif 000018
【０５００】
次に、図５４上の状態を示す図を参照しながら、通信ハンドシェイクプロトコルが説明される。状態１４００において、シミュレーションシステムは、デバイスドライバにおいてアイドルである。新たなコマンドが提示されない限り、システムは、経路１４０１によって示されるように、アイドルであり続ける。新たなコマンドが提示される場合、コマンドプロセッサは、状態１４０２において、新たなコマンドを処理する。一実施形態において、コマンドプロセッサは、ＦＰＧＡ  Ｉ／Ｏコントローラである。
【０５０１】
ＣＯＭＭＡＮＤ＝００００、または、ＣＯＭＭＡＮＤ＝０００１である場合、システムは、工程１４０３において、ＳＰＡＣＥインデックスによって示されるように、指定されたスペースから読み出すか、または指定されたスペースに書き込む。ＣＯＭＭＡＮＤ＝００１０である場合、システムは、ユーザ設計を用いて、再構成可能なハードウェア装置においてＦＰＧＡを初期的に設定するか、または、状態１４０４における新たなユーザ設計を用いて、ＦＰＧＡを設定する。システムは、全てのＦＰＧＡのシステムの設定情報に順序を付けて、ハードウェアにモデリングされ得るユーザ設計の一部をモデリングする。しかし、ＣＯＭＭＡＮＤ＝００１１である場合、システムは、状態１４０５において、再構成可能なハードウェア装置に割り込み、新たなシミュレーション状態において新たなユーザ／プロセスにスワップするようにタイムスライスがタイムアウトになるので、シミュレーションシステムに割り込む。これらの状態１４０３、１４０４、または１４０５の完了において、シミュレーションシステムは、ＤＯＮＥ状態１４０６に進んで、ＤＯＮＥ信号を生成し、その後、状態１４００に戻って、新たなコマンドが提示されるまでアイドルになる。
【０５０２】
次に、優先度のレベルが異なる複数のジョブを処理する、シミュレーションサーバの時分割機能が記載される。図５２に、一例を示す。４つのジョブ（ジョブＡ、ジョブＢ、ジョブＣ、ジョブＤ）は、シミュレーションジョブキューの入来ジョブである。しかし、これらの４つのジョブの優先度のレベルは異なる。すなわち、ジョブＡおよびＢには、高い優先度Ｉが割り当てられているが、ジョブＣおよびＤには、低い優先度ＩＩが割り当てられる。図５２の時系列チャートに示すように、時分割された再構成可能なハードウェア装置の使用は、キューに並べられた入来ジョブの優先度レベルに依存する。時間１１９０において、シミュレーションは、再構成可能ハードウェア装置へのアクセスを与えられるジョブＡで開始する。時間１１９１において、ジョブＡは、ジョブＢがジョブＡと同じ優先度を有するので、ジョブＢに優先され、スケジューラは、２つのジョブに等しい時分割アクセスを提供する。ジョブＢは、再構成可能なハードウェア装置へのアクセスを有する。時間１１９２において、ジョブＡは、ジョブＢに優先し、ジョブＡは、時間１１９３において完了するまで実行される。時間１１９３において、ジョブＢがとって代わり、時間１１９４まで、完了するまで実行される。時間１１９４において、キューにおいて隣接するが、ジョブＡおよびＢよりも優先度のレベルが低いジョブＣは、ここで、実行のための再構成可能なハードウェア装置へのアクセスを有する。時間１１９５において、時分割アクセスにおいて、ジョブＤが、ジョブＣと優先度レベルが同じであるので、ジョブＣに優先する。ジョブＤは、ジョブＣによって優先されるアクセスを時間１１９６まで有する。ジョブＣは、時間１１９７で完了するまで実行される。その後、時間１１９７において、ジョブＤがとって代わり、時間１１９８まで、完了するまで実行される。
【０５０３】
（ＶＩＩＩ．メモリシミュレーション）
本発明のメモリシミュレーションまたはメモリマッピング局面は、シミュレーションシステムがユーザの設計の構成ハードウェアモデルに関連する種々のメモリブロックを管理するための有効な方法を提供する。その構成ハードウェアモデルは再構成可能なハードウェア部におけるＦＰＧＡのアレイ中へプログラミングされた。本発明の実施形態を実施することによって、メモリシミュレーションスキームは、メモリアクセスを処理するためのＦＰＧＡチップにおける専用ピンを全く必要としない。
【０５０４】
本明細書中で使用される用語「メモリアクセス」は、ユーザの設計が構成されるＦＰＧＡ論理回路とユーザの設計に関連するすべてのメモリブロックを格納するＳＲＡＭメモリデバイスとの間の書き込みアクセスまたは読み出しアクセスのいずれかを示す。したがって、書き込み動作はＦＰＧＡ論理デバイスからＳＲＡＭメモリデバイスへのデータ転送を含み、他方読み出し操作はＳＲＡＭメモリデバイスからＦＰＧＡ論理デバイスへのデータ転送を含む。図５６を参照する。ＦＰＧＡ論理デバイスは１２０１（ＦＰＧＡ１）、１２０２（ＦＰＧＡ３）、１２０３（ＦＰＧＡ０）、および１２０４（ＦＰＧＡ２）を含む。ＳＲＡＭメモリはメモリデバイス１２０５および１２０６を含む。
【０５０５】
また、用語「ＤＭＡデータ転送」は、当業者間で共通な使用法に加えて、計算システムとシミュレーションシステムとの間のデータ転送を示す。計算システムは、図１、４５、および４６においてシミュレーションシステムをサポートするメモリを有するＰＣＩ系システム全体として示され、ソフトウェアおよび再構成可能ハードウェア部中に常駐する。選択されたデバイスドライバ、オペレーティングシステムへ／からのソケット／システムコールはまた、オペレーティングシステムおよび再構成可能ハードウェア部と適切なインタフェースを可能にするシミュレーションシステムの一部である。本発明の１実施形態において、ＤＭＡ読み出し転送は、ＦＰＧＡ論理デバイス（および初期化およびメモリ内容ダンプのためのＦＰＧＡ  ＳＲＡＭメモリデバイス）からホスト計算システムへのデータの転送を含む。ＤＭＡ書き込み転送は、ホスト計算システムからＦＰＧＡ論理デバイス（および初期化およびメモリ内容ダンプのためのＦＰＧＡ  ＳＲＡＭメモリデバイス）へのデータの転送を含む。
【０５０６】
用語「ＦＰＧＡデータバス」、「ＦＰＧＡバス」、「ＦＤバス」およびそれらの変形は、デバッグされるべき構成およびプログラムされたユーザの設計を含むＦＰＧＡ論理デバイスとＳＲＡＭメモリデバイスとを結合する高バンクバスＦＤ［６３：３２］および低バンクバスＦＤ［３１：０］を示す。
【０５０７】
メモリシミュレーションシステムは、以下を制御しかつ以下とインタフェースをとるためのメモリ状態マシン、評価状態マシン、およびそれらに関連の論理を含む：（１）主計算システムおよびその関連のメモリシステム、（２）シミュレーションシステムにおけるＦＰＧＡに結合されたＳＲＡＭメモリ、および（３）デバッグにおける構成およびプログラムされたユーザの設計を含むＦＰＧＡ論理デバイス。
【０５０８】
メモリシミュレーションシステムのＦＰＧＡ論理デバイス側は、以下を処理するためにユーザの設計においてユーザの所有するメモリインタフェースとインタフェースをとるための各メモリブロックＮごとに評価状態マシン、ＦＰＧＡバスドライバ、および論理インタフェースを含む：（１）ＦＰＧＡ論理デバイス間のデータ評価、および（２）ＦＰＧＡ論理デバイスとＳＲＡＭメモリデバイスとの間の書き込み／読み出しメモリアクセス。ＦＰＧＡ論理デバイス側と併用して、ＦＰＧＡ  Ｉ／Ｏコントローラ側は、以下の間のＤＭＡ、書き込み、および読み出し動作を処理するためのメモリ状態マシンおよびインタフェース論理を含む：（１）主計算システムとＳＲＡＭメモリデバイス、および（２）ＦＰＧＡ論理デバイスとＳＲＡＭメモリデバイス。
【０５０９】
本発明の１実施形態にしたがうメモリシミュレーションシステムの動作は一般に以下のとおりである。シミュレーション書き込み／読み出しサイクルは３つの期間に分割される−ＤＭＡデータ転送、評価、およびメモリアクセス。ＤＡＴＡＸＳＦＲ信号はＤＭＡデータ転送期間の発生を示す。ＤＭＡデータ転送期間では、計算システムおよびＳＲＡＭメモリ部がＦＰＧＡデータバス（高バンクバス（ＦＤ［６３：３２］）１２１２および低バンクバス（ＦＤ［３１：０］）１２１３を介して互いにデータを転送している。
【０５１０】
評価期間中は、各ＦＰＧＡ論理デバイスにおける論理回路はデータ評価のためのユーザの設計論理への適切なソフトウェアクロック、入力イネーブル、およびマルチプレクサイネーブル信号を生成する。ＦＰＧＡ論理デバイス間通信はこの期間中に発生する。
【０５１１】
メモリアクセス期間中は、メモリシミュレーションシステムは高および低バンクＦＰＧＡ論理デバイスがそれぞれのアドレスおよび制御信号をそれぞれのＦＰＧＡデータバスへ載せるのを待つ。これらのアドレスおよび制御信号はＣＴＲＬ＿ＦＰＧＡ部によってラッチインされる。動作が書き込みであれば、アドレス、制御、およびデータ信号がＦＰＧＡ論理デバイスからそれぞれのＳＲＡＭメモリデバイスへ転送される。動作が読み出しであれば、アドレスおよび制御信号が指定のＳＲＡＭメモリデバイスへ提供され、かつデータ信号がＳＲＡＭメモリデバイスからそれぞれのＦＰＧＡ論理デバイスへ転送される。すべてのＦＰＧＡ論理デバイスにおけるすべての所望のメモリブロックがアクセスされた後で、メモリシミュレーション書き込み／読み出しサイクルが完了し、そしてメモリシミュレーションシステムは次のメモリシミュレーション書き込み／読み出しサイクルの開始までアイドル状態である。
【０５１２】
図５６は、本発明の１実施形態にしたがうメモリシミュレーション構成の高レベルブロック図である。本発明のメモリシミュレーション局面に関連しない信号、接続、およびバスは図示されない。上記のＣＴＲＬ＿ＦＰＧＡ部１２００は、バス１２１０にライン１２０９を介して結合される。１実施形態において、ＣＴＲＬ＿ＦＰＧＡ部１２００はＡｌｔｅｒａ１０Ｋ５０チップなどのＦＰＧＡチップの形態であるプログラム可能論理デバイス（ＰＬＤ）である。ローカルバス１２１０は、ＣＴＲＬ＿ＦＰＧＡ部１２００が（あれば）他のシミュレーションアレイボードおよび他のチップ（例えば、ＰＣＩコントローラ、ＥＥＰＲＯＭ、クロックバッファ）に結合されるのを可能にする。ライン１２０９は、シミュレーションＤＭＡデータ転送期間の完了を示すＤＯＮＥ信号を伝送する。
【０５１３】
図５６は、論理デバイスおよびメモリデバイスの形態の他の主要な機能ブロックを示す。１実施形態において、論理デバイスはＡｌｔｅｒａ１０Ｋ１３０または１０Ｋ２５０チップなどのＦＰＧＡチップの形態であるプログラム可能論理デバイス（ＰＬＤ）である。したがって、アレイ中に８つのＡｌｔｅｒａＦＬＥＸ１０Ｋ１００チップを有する上記実施形態の代わりに、この実施形態はＡｌｔｅｒａのＦＬＥＸ１０Ｋ１３０のチップ４つだけ使用する。メモリデバイスは、Ｃｙｐｒｅｓｓ  １２８Ｋｘ３２  ＣＹ７Ｃ１３３５またはＣＹ７Ｃ１３３６チップなどの同期パイプライン化キャッシュＳＲＡＭである。論理デバイスは、１２０１（ＦＰＧＡ１）、１２０２（ＦＰＧＡ３）、１２０３（ＦＰＧＡ０）、および１２０４（ＦＰＧＡ２）を含む。ＳＲＡＭチップは、低バンクメモリデバイス１２０５（Ｌ＿ＳＲＡＭ）および高バンクメモリデバイス１２０６（Ｈ＿ＳＲＡＭ）を含む。
【０５１４】
これらの論理デバイスおよびメモリデバイスは、ＣＴＲＬ＿ＦＰＧＡ部１２００に高バンクバス１２１２（ＦＤ［６３：３２］）および低バンクバス（ＦＤ［３１：０］）を介して結合される。論理デバイス１２０１（ＦＰＧＡ１）および１２０２（ＦＰＧＡ３）は、高バンクバス１２１２にそれぞれバス１２２３およびバス１２２５を介して結合され、他方論理デバイス１２０３（ＦＰＧＡ０）および１２０４（ＦＰＧＡ２）は、低バンクデータバス１２１３にそれぞれバス１２２４およびバス１２２６を介して結合される。高バンクメモリデバイス１２０６は高バンクバス１２１２にバス１２２０を介して結合され、他方低バンクメモリデバイス１２０５は低バンクバス１２１３にバス１２１９を介して結合される。デュアルバンクバス構造は、シミュレーションシステムが高バンク上のデバイスおよび低バンク上のデバイスに並列に改善されたスループットレートでアクセスすることを可能にする。デュアルバンクデータバス構造は、シミュレーション書き込み／読み出しサイクルが制御され得るように制御およびアクセス信号などの他の信号をサポートする。
【０５１５】
図６１を簡単に参照しておくと、各シミュレーション書き込み／読み出しサイクルは、ＤＭＡデータ転送期間、評価期間、およびメモリアクセス期間を含む。種々の制御信号の組み合わせはシミュレーションシステムがある期間中にあって他ではないかどうかを制御しかつ示す。再構成可能ハードウェア部におけるホストコンピュータシステムと論理デバイス１２０１〜１２０４との間のＤＭＡデータ転送はＰＣＩバス（例えば、図４６のバス５０）、ローカルバス１２１０および１２３６、ならびにＦＰＧＡバス１２１２（ＦＤ［６３：３２］）およびＦＰＧＡバス１２１３（ＦＤ［３１：０］）を介して発生する。メモリデバイス１２０５および１２０６は、初期化およびメモリ内容ダンプのためのＤＭＡデータ転送に関与する。再構成可能ハードウェア部における論理デバイス１２０１〜１２０４間の評価データ転送は、相互接続（前出）ならびにＦＰＧＡバス１２１２（ＦＤ［６３：３２］）およびＦＰＧＡバス１２１３（ＦＤ［３１：０］）を介して発生する。論理デバイス１２０１〜１２０４とメモリデバイス１２０５および１２０６との間のメモリアクセスは、ＦＰＧＡバス１２１２（ＦＤ［６３：３２］）およびＦＰＧＡバス１２１３（ＦＤ［３１：０］）を介して発生する。
【０５１６】
図５６を再度参照する。ＣＴＲＬ＿ＦＰＧＡ部１２００は、多くの制御およびアドレス信号を提供および受信してシミュレーション書き込み／読み出しサイクルを制御する。ＣＴＲＬ＿ＦＰＧＡ部１２００は、ライン１２１１上のＤＡＴＡＸＳＦＲおよびＥＶＡＬ信号を、それぞれライン１２２１を介して論理デバイス１２０１および１２０３へ、それぞれライン１２２２を介して論理デバイス１２０２および１２０４へ提供する。ＣＴＲＬ＿ＦＰＧＡ部１２００はまた、メモリアドレス信号ＭＡ［１８：２］を低バンクメモリデバイス１２０５および高バンクメモリデバイス１２０６にそれぞれバス１２２９および１２１４を介して提供する。これらのメモリデバイスのモードを制御するために、ＣＴＲＬ＿ＦＰＧＡ部１２００はチップ選択書き込み（および読み出し）信号を低バンクメモリデバイス１２０５および高バンクメモリデバイス１２０６にそれぞれライン１２１６および１２１５を介して提供する。ＤＭＡデータ転送の完了を示すために、メモリシミュレーションシステムはライン１２０９上のＤＯＮＥ信号をＣＴＲＬ＿ＦＰＧＡ部１２００および計算システムに送信および受信し得る。
【０５１７】
図９、１１、１２、１４、および１５を参照して上記したように、論理デバイス１２０１〜１２０４は、特に、２セットのＳＩＦＴＩＮ／ＳＨＩＦＴＯＵＴライン−ライン１２０７、１２２７、および１２１８、ならびにライン１２０８、１２２８、および１２１７によって図５６に表される多重化クロスチップアドレスポインタチェーンによってまとめて接続される。これらのセットはチェーンの開始時にライン１２０７および１２０８におけるＶｃｃによって初期化される。ＳＨＩＦＴＩＮ信号は、バンクにおける前段のＦＰＧＡ論理デバイスから送信され、現在のＦＰＧＡ論理デバイスのためのメモリアクセスを開始する。所定セットのチェーンを介するシフトの完了時に、最後の論理デバイスはＬＡＳＴ信号（すなわち、ＬＡＳＴＬまたはＬＡＳＴＨ）をＣＴＲＬ＿ＦＰＧＡ部１２００へ生成する。高バンクに対して、論理デバイス１２０２はライン１２１８上のＬＡＳＴＨシフトアウト信号をＣＴＲＬ＿ＦＰＧＡ部１２００へ生成し、かつ低バンクに対して、論理デバイス１２０４はライン１２１７上のＬＡＳＴＬ信号をＣＴＲＬ＿ＦＰＧＡ部１２００へ生成する。
【０５１８】
ボード実装および図５６に関して、本発明の１実施形態は構成要素（例えば、論理デバイス１２０１〜１２０４、メモリデバイス１２０５〜１２０６、およびＣＴＲＬ＿ＦＰＧＡ部１２００）およびバス（例えば、ＦＰＧＡバス１２１２〜１２１３およびローカルバス１２１０）を１ボード中に内蔵する。この１ボードはマザーボードにマザーボードコネクタを介して結合される。したがって、１ボード中に、４つの論理デバイス（各バンク中に２つ）、２つのメモリデバイス（各バンク中に１つ）、およびバスが提供される。第２ボードは、その補完として論理デバイス（通常４つ）、メモリデバイス（通常２つ）、ＦＰＧＡ  Ｉ／Ｏコントローラ（ＣＴＲＬ＿ＦＰＧＡ部）およびバスを含み得る。しかし、ＰＣＩコントローラは第１のボードのみに設置され得る。ボード間コネクタは、上記のように、ボード間に提供され、すべてのボードにおける論理デバイスがまとめて接続され、そして評価期間中に互いに通信し、かつローカルバスがすべてのボードにわたって提供されるようにする。ＦＰＧＡバスＦＤ［６３：０］は、各ボード中のみに提供され、複数のボードにわたっては提供されない。
【０５１９】
このボード構成において、シミュレーションシステムは各ボードにおける論理デバイスとメモリデバイスとの間のメモリマッピングを実行する。異なるボードにわたるメモリマッピングは提供されない。したがって、ボード５における論理デバイスはメモリブロックをボード５中のみのメモリデバイスにマッピングし、他のボード上のメモリデバイスにはマッピングしない。しかし、他の実施形態において、シミュレーションシステムは、メモリブロックを１ボード上の論理デバイスから別のボード上のメモリデバイスへマッピングする。
【０５２０】
本発明の１実施形態のメモリシミュレーションシステムの動作は一般に以下のとおりである。シミュレーション書き込み／読み出しサイクルは３つの期間に分割される−ＤＭＡデータ転送、評価、およびメモリアクセス。シミュレーション書き込み／読み出しサイクルの完了を示すために、メモリシミュレーションシステムはライン１２０９上のＤＯＮＥ信号をＣＴＲＬ＿ＦＰＧＡ部１２００および計算システムに対して送信および受信し得る。バス１２１１上のＤＡＴＡＸＳＦＲ信号はＤＭＡデータ転送期間の発生を示す。ＤＭＡデータ転送期間において、計算システムおよびＦＰＧＡ論理デバイス１２０１〜１２０４は、ＦＰＧＡデータバス、高バンクバス（ＦＤ［６３：３２］）１２１２および低バンクバス（ＦＤ［３１：０］）１２１３を介して互いにデータを転送している。一般に、ＤＭＡ転送はホスト計算システムとＦＰＧＡ論理デバイスとの間で発生する。初期化およびメモリ内容ダンプのために、ＤＭＡ転送はホスト計算システムとＳＲＡＭメモリデバイス１２０５および１２０６との間で発生する。
【０５２１】
評価期間中に、各ＦＰＧＡ論理デバイス１２０１〜１２０４における論理回路はデータ評価のためにユーザの設計論理への適切なソフトウェアクロック、入力イネーブル、およびマルチプレクサイネーブル信号を生成する。ＦＰＧＡ論理デバイス間通信はこの期間中に発生する。ＣＴＲＬ＿ＦＰＧＡ部１２００はまた、評価カウンタを開始して評価期間の持続時間を制御する。カウントの数、およびしたがって評価期間の持続時間は、信号の最長の経路を決定することによってシステムにより設定される。経路長は、特定のステップ数と関連する。システムは、ステップ情報を使用し、そして評価サイクルを実行して完了させるのに必要なカウント数を計算する。
【０５２２】
メモリアクセス期間中は、メモリシミュレーションシステムは高および低バンクＦＰＧＡ論理デバイス１２０１〜１２０４がそれぞれのアドレスおよび制御信号をそれぞれのＦＰＧＡデータバスへ載せるのを待つ。これらのアドレスおよび制御信号はＣＴＲＬ＿ＦＰＧＡ部１２００によってラッチインされる。動作が書き込みであれば、アドレス、制御、およびデータ信号がＦＰＧＡ論理デバイス１２０１〜１２０４からそれぞれのＳＲＡＭメモリデバイス１２０５および１２０６へ転送される。動作が読み出しであれば、アドレスおよび制御信号がＦＰＧＡ論理デバイス１２０１〜１２０４からそれぞれのＳＲＡＭメモリデバイス１２０５および１２０６へ転送され、かつデータ信号はＳＲＡＭメモリデバイス１２０５および１２０６からそれぞれのＦＰＧＡ論理デバイス１２０１〜１２０４へ転送される。ＦＰＧＡ論理デバイス側では、ＦＤバスドライバがメモリブロックのアドレスおよび制御信号をＦＰＧＡデータバス（ＦＤバス）へ載せる。動作が書き込みであれば、書き込みデータがそのメモリブロックのためのＦＤバスへ載せられる。動作が読み出しであれば、ダブルバッファがＳＲＡＭメモリデバイスからのＦＤバス上のメモリブロックのためのデータをラッチインする。この動作は、各ＦＰＧＡ論理デバイスにおける各メモリブロックに対して一度に１メモリブロックずつ順番に続けられる。ＦＰＧＡ論理デバイスにおけるすべての所望のメモリブロックがアクセスされた後で、メモリシミュレーションシステムは各バンクにおける次のＦＰＧＡ論理デバイスに進み、そしてそのＦＰＧＡ論理デバイスにおけるメモリブロックのアクセスを開始する。すべてのＦＰＧＡ論理デバイス１２０１〜１２０４におけるすべての所望のメモリブロックがアクセスされた後で、メモリシミュレーション書き込み／読み出しサイクルが完了し、そしてメモリシミュレーションシステムは次のメモリシミュレーション書き込み／読み出しサイクルの開始までアイドル状態である。
【０５２３】
図５７は、本発明のメモリシミュレーション局面のより詳細なブロック図を示し、ＣＴＲＬ＿ＦＰＧＡ１２００およびメモリシミュレーションに関連する各論理デバイスのより詳細な構成図を含む。図５７は、ＣＴＲＬ＿ＦＰＧＡ１２００および論理デバイス１２０３の一部（他の論理デバイス１２０１、１２０２、および１２０４の一部と構造が類似する）を示す。ＣＴＲＬ＿ＦＰＧＡ１２００は、メモリ有限状態マシン（ＭＥＭＦＳＭ）１２４０、ＡＮＤゲート１２４１、評価（ＥＶＡＬ）カウンタ１２４２、低バンクメモリアドレス／制御ラッチ１２４３、低バンクアドレス／制御マルチプレクサ１２４４、アドレスカウンタ１２４５、高バンクメモリアドレス／制御ラッチ１２４７、および高バンクアドレス／制御マルチプレクサ１２４６を含む。図５７において示される論理デバイス１２０３などの各論理デバイスは、評価有限状態マシン（ＥＶＡＬＦＳＭｘ）１２４８、データバスマルチプレクサ（ＦＰＧＡ０論理デバイス１２０３のためのＦＤＯ＿ＭＵＸｘ）１２４９を含む。ＥＶＡＬＦＳＭの端に付加された「ｘ」表記は、ＥＶＡＬＦＳＭに関連する特定の論理デバイス（ＦＰＧＡ０、ＦＰＧＡ１、ＦＰＧＡ２、ＦＰＧＡ３）を識別する。この例において、「ｘ」は０〜３の番号である。したがって、ＥＶＡＬＦＳＭ０はＦＰＧＡ０論理デバイス１２０３に関連する。一般に、各論理デバイスは、ある番号ｘと関連し、かつＮ論理デバイスが使用されると、「ｘ」は０〜Ｎ−１の番号である。
【０５２４】
各論理デバイス１２０１〜１２０４において、多くのメモリブロックが構成およびマッピングされたユーザの設計に関連する。したがって、ユーザ論理におけるメモリブロックインタフェース１２５３は、計算システムがＦＰＧＡ論理デバイスのアレイにおける所望のメモリブロックにアクセスするための手段を提供する。メモリブロックインタフェース１２５３はまた、バス１２９５上のメモリ書き込みデータをＦＰＧＡデータバスマルチプレクサ（ＦＤＯ＿ＭＵＸｘ）１２４９へ提供し、かつバス１２９７上のメモリ読み出しデータをメモリ読み出しデータダブルバッファ１２５１から読み出す。
【０５２５】
メモリブロックデータ／論理インタフェース１２９８は、各ＦＰＧＡ論理デバイス中に提供される。これらのメモリブロックデータ／論理インタフェース１２９８の各々は、ＦＰＧＡデータバスマルチプレクサ（ＦＤＯ＿ＭＵＸｘ）１２４９、評価有限状態マシン（ＥＶＡＬＦＳＭｘ）１２４８、およびＦＰＧＡバスＦＤ［６３：０］に結合される。メモリブロックデータ／論理インタフェース１２９８は、メモリ読み出しデータバッファ１２５１、アドレスオフセット部１２５０、メモリモデル１２５２、および各メモリブロックＮ（ｍｅｍ＿ｂｌｏｃｋ＿Ｎ）１２５３のためのメモリブロックインタフェースを含む。これらはすべて各メモリブロックＮについていずれの所与のＦＰＧＡ論理デバイス１２０１〜１２０４においても繰り返される。したがって、５つのメモリブロックに対して、５セットのメモリブロックデータ／論理インタフェース１２９８が提供される。すなわち、５セットのメモリ読み出しデータバッファ１２５１、アドレスオフセット部１２５０、メモリモデル１２５２、および各メモリブロックＮ（ｍｅｍ＿ｂｌｏｃｋ＿Ｎ）１２５３のためのメモリブロックインタフェースが提供される。
【０５２６】
ＥＶＡＬＦＳＭｘと同様に、ＦＤＯ＿ＭＵＸｘにおける「ｘ」は、ＦＤＯ＿ＭＵＸｘが関連する特定の論理デバイス（ＦＰＧＡ０、ＦＰＧＡ１、ＦＰＧＡ２、ＦＰＧＡ３）を識別する。この例において、「ｘ」は０〜３の番号である。ＦＤＯ＿ＭＵＸｘ１２４９の出力はバス１２８２上に提供される。バス１２８２は、どのチップ（ＦＰＧＡ０、ＦＰＧＡ１、ＦＰＧＡ２、ＦＰＧＡ３）がＦＤＯ＿ＭＵＸｘ１２４９に関連するかに依存して、高バンクバスＦＤ［６３：３２］または低バンクバスＦＤ［３１：０］に結合される。図５７において、ＦＤＯ＿ＭＵＸｘは、低バンク論理デバイスＦＰＧＡ０  １２０３に関連するＦＤＯ＿ＭＵＸ０である。したがって、バス１２８２上の出力は低バンクバスＦＤ［３１：０］に提供される。バス１２８３の部分は、メモリ読み出しデータダブルバッファ１２５１への入力のために、読み出しデータを高バンクバスＦＤ［６３：３２］または低バンクバスＦＤ［３１：０］から読み出しバス１２８３へ転送するために使用される。したがって、書き込みデータはＦＤＯ＿ＭＵＸ０  １２４９を介して各論理デバイス１２０１〜１２０４におけるメモリブロックから高バンクバスＦＤ［６３：３２］または低バンクバスＦＤ［３１：０］バスへ出力転送され、かつ読み出しデータはメモリ読み出しデータダブルバッファ１２５１へ高バンクバスＦＤ［６３：３２］または低バンクバスＦＤ［３１：０］バスから読み出しバス１２８３を介して入力転送される。メモリ読み出しデータダブルバッファはダブルバッファ機構を提供して第１バッファにおいてデータをラッチし、次いで再度バッファリングして同時にラッチされたデータを出力して歪み（ｓｋｅｗ）を低減する。このメモリ読み出しデータダブルバッファ１２５１は以下により詳細に記載される。
【０５２７】
メモリモデル１２５２に戻る。メモリモデル１２５２はユーザメモリタイプをメモリシミュレーションシステムのＳＲＡＭタイプに変換する。ユーザの設計におけるメモリタイプは１つのタイプから別のタイプへ変化するので、このメモリブロックインタフェース１２５３はまたユーザの設計に対してユニークであり得る。例えば、ユーザメモリタイプはＤＲＡＭ、フラッシュメモリ、またはＥＥＰＲＯＭであり得る。しかし、メモリブロックインタフェース１２５３のすべての変形において、メモリアドレスおよび制御信号（例えば、読み出し、書き込み、チップ選択、ｍｅｍ＿ｃｌｋ）が提供される。本発明のメモリシミュレーション局面の１実施形態は、ユーザメモリタイプをメモリシミュレーションシステム中で使用されるＳＲＡＭタイプへ変換する。ユーザメモリタイプがＳＲＡＭならば、ＳＲＡＭタイプメモリモデルへの変換は全く簡単である。したがって、メモリアドレスおよび制御信号は、変換を行うメモリモデル１２５２へバス１２９６上で提供される。
【０５２８】
メモリモデル１２５２は、バス１２９３上のメモリブロックアドレスおよびバス１２９２上の制御情報を提供する。アドレスオフセット部１２５０は、種々のメモリブロックのアドレス情報を受信し、かつバス１２９３上の元のアドレスからバス１２９１上の変更されたオフセットアドレスを提供する。オフセットが必要であるのは、互いに重複するメモリブロックのアドレスがあるからである。例えば、１つのメモリブロックは空間０−２Ｋを使用してその中に常駐し、他方別のメモリブロックは空間０−３Ｋを使用してその中に常駐する。両方のメモリブロックは空間０−２Ｋにおいて重複するので、個々のアドレッシングはある種のアドレスオフセット機構がないと困難であり得る。したがって、第１メモリブロックは空間０−２Ｋを使用してその中に常駐し得、他方第２メモリブロックは約２Ｋかつ５Ｋまでの空間を使用してその中に常駐し得る。アドレスオフセット部１２５０からのオフセットアドレスおよびバス１２９２上の制御信号は組み合わされ、そしてバス１２９９上でＦＰＧＡバスマルチプレクサ（ＦＤＯ＿ＭＵＸｘ）１２４９へ提供される。
【０５２９】
ＦＰＧＡデータバスマルチプレクサＦＤＯ＿ＭＵＸｘは、バス１２８９上のＳＰＡＣＥ２データ、バス１２９０上のＳＰＡＣＥ３データ、バス１２９９上のアドレス／制御信号、およびバス１２９５上のメモリ書き込みデータを受信する。上記のように、ＳＰＡＣＥ２およびＳＰＡＣＥ３は特定の空間インデックスである。ＦＰＧＡ  Ｉ／Ｏコントローラ（図１０における項目３２７；図２２）によって生成されるＳＰＡＣＥインデックスは特定のアドレス空間（すなわち、ＲＥＧ読み出し、ＲＥＧ書き込み、Ｓ２Ｈ読み出し、Ｈ２Ｓ書き込み、およびＣＬＫ書き込み）を選択する。このアドレス空間内で、本発明のシステムはアクセスすべき特定のワードを逐次選択する。ＳＰＡＣＥ２は、ハードウェア対ソフトウェアＨ２ＳデータのためのＤＭＡ読み出し転送に専用のメモリ空間を示す。ＳＰＡＣＥ３は、ＲＥＧＩＳＴＥＲ＿ＲＥＡＤデータのためのＤＭＡ読み出し転送に専用のメモリ空間を示す。前出表Ｇを参照のこと。
【０５３０】
出力として、ＦＤＯ＿ＭＵＸｘ１２４９は、バス１２８２上のデータを低バンクバスまたは高バンクバスのいずれかに提供する。セレクタ信号は、ＥＶＡＬＦＳＭｘ部１２４８からのライン１２８４上の出力イネーブル（ｏｕｔｐｕｔ＿ｅｎ）信号およびライン１２８５上の選択信号である。ライン１２８４上の出力イネーブル信号は、ＦＤＯ＿ＭＵＸｘ１２４９の動作を使用可能（または使用不可能）にする。ＦＰＧＡバスを介するデータアクセスのために、出力イネーブル信号はＦＤＯ＿ＭＵＸｘが機能できるように使用可能にされる。ライン１２８５上の選択信号は、ＥＶＡＬＦＳＭｘ部１２４８によって生成され、バス１２８９上のＳＰＡＣＥ２、バス１２９０上のＳＰＡＣＥ３、バス１２９９上のアドレス／制御信号、およびバス１２９５上のメモリ書き込みデータから複数の入力を選択する。ＥＶＡＬＦＳＭｘ部１２４８による選択信号の生成は、以下にさらに記載される。
【０５３１】
ＥＶＡＬＦＳＭｘ部１２４８は、メモリシミュレーションシステムに関して各論理デバイス１２０１〜１２０４の動作の中心にある。ＥＶＡＬＦＳＭｘ部１２４８は入力としてライン１２７９上のＳＨＩＦＴＩＮ信号、ライン１２７４上のＣＴＲＬ＿ＦＰＧＡ部１２００からのＥＶＡＬ信号、およびライン１２８７上の書き込み信号ｗｒｘを受信する。ＥＶＡＬＦＳＭｘ部１２４８は、ライン１２８０上のＳＨＩＦＴＯＵＴ信号、メモリ読み出しデータダブルバッファ１２５１への読み出しラッチ信号ｒｄ＿ｌａｔｘ、ＦＤＯ＿ＭＵＸｘ１２４９上へのライン１２８４上の出力イネーブル信号、ＦＤＯ＿ＭＵＸｘ１２４９へのライン１２８５上の選択信号、およびライン１２８１上のユーザ論理への３つの信号（ｉｎｐｕｔ−ｅｎ、ｍｕｘ＿ｅｎ、およびｃｌｋ＿ｅｎ）を出力する。
【０５３２】
本発明の１実施形態のメモリシミュレーションシステムのためのＦＰＧＡ論理デバイス１２０１〜１２０４の動作は一般に以下のとおりである。ＥＶＡＬが論理１にある場合、ＦＰＧＡ論理デバイス１２０１〜１２０４内のデータ評価が発生する。そうでなければ、シミュレーションシステムはＤＭＡデータ転送またはメモリアクセスのいずれかを行う。ＥＶＡＬ＝１において、ＥＶＡＬＦＳＭｘ部１２４８はｃｌｋ＿ｅｎ信号、ｉｎｐｕｔ＿ｅｎ信号、およびｍｕｘ＿ｅｎ信号を生成してそれぞれユーザ論理が論理デバイスを介するデータ、ラッチ関連データ、および多重信号を評価できるようにする。ＥＶＡＬＦＳＭｘ部１２４８は、ｃｌｋ＿ｅｎ信号を生成してユーザの設計論理におけるすべてのクロックエッジレジスタフリップフロップの第２のフリップフロップを使用可能にする（図１９参照）。ｃｌｋ＿ｅｎ信号は他にもソフトウェアクロックとして公知である。ユーザメモリタイプが同期である場合、ｃｌｋ＿ｅｎはまた各メモリブロックにおけるメモリ読み出しデータダブルバッファ１２５１の第２クロックを使用可能とする。ＥＶＡＬＦＳＭｘ部１２４８は、ユーザの設計論理へのｉｎｐｕｔ＿ｅｎ信号を生成してＤＭＡ転送によってＣＰＵからユーザ論理へ送信される入力信号をラッチする。ｉｎｐｕｔ＿ｅｎ信号は、イネーブル入力を主クロックレジスタにおける第２フリップフロップへ提供する（図１９参照）。最後に、ＥＶＡＬＦＳＭｘ部１２４８は、ｍｕｘ＿ｅｎ信号を生成して各ＦＰＧＡ論理デバイスにおける多重化回路をオンにし、アレイにおける他のＦＰＧＡ論理デバイスとの通信を開始する。
【０５３３】
その後、ＦＰＧＡ論理デバイス１２０１〜１２０４は少なくとも１つのメモリブロックを含む場合、メモリシミュレーションシステムは、選択されたデータが選択されたＦＰＧＡ論理デバイスへシフトされるのを待ち、そして次いでＦＰＧＡデータバスドライバのためのｏｕｔｐｕｔ＿ｅｎおよび選択信号を生成してメモリブロックインタフェース１２５３（ｍｅｍ＿ｂｌｏｃｋ＿Ｎ）のアドレスおよび制御信号をＦＤバス上に載せる。
【０５３４】
ライン１２８７上の書き込み信号ｗｒｘが使用可能となると（すなわち、論理１）、選択およびｏｕｔｐｕｔ＿ｅｎ信号が使用可能とされ書き込みデータを、どのバンク上でＦＰＧＡチップが結合されるかに依存して、低または高バンクバスのいずれか上へ載せる。図５７において、論理デバイス１２０３はＦＰＧＡ０であり、かつ低バンクバスＦＤ［３１：０］に結合される。ライン１２８７上の書き込み信号ｗｒｘが使用不可能とされると（すなわち、論理０）、選択およびｏｕｔｐｕｔ＿ｅｎ信号は使用不可能とされ、かつライン１２８６上の読み出しラッチ信号ｒｄ＿ｌａｔｘは、どのバンク上でＦＰＧＡチップが結合されるかに依存して、低または高バンクバスのいずれかを介して、メモリ読み出しデータダブルバッファ１２５１にＳＲＡＭからの選択されたデータをラッチおよびダブルバッファ化させる。ｗｒｘ信号は、ユーザの設計論理のメモリインタフェースから得られるメモリ書き込み信号である。実際に、ライン１２８７上のｗｒｘ信号はメモリモデル１２５２から制御バス１２９２を介して来る。
【０５３５】
データの読み出しまたは書き込みのこの処理は、各ＦＰＧＡ論理デバイスに対して発生する。すべてのメモリブロックがＳＲＡＭアクセスを介して処理された後で、ＥＶＡＬＦＳＭｘ部１２４８はＳＨＩＦＴＯＵＴ信号を生成してチェーンにおける次のＦＰＧＡ論理デバイスによるＳＲＡＭアクセスを可能にする。なお、高および低バンク上のデバイスのためのメモリアクセスは並列に発生する。あるバンクのためのメモリアクセスが他のバンクのためのメモリアクセスの前に完了することもある。これらのアクセスのすべてについて、論理が準備完了しかつデータが利用可能な場合にのみ論理がデータを処理するように適切な待ちサイクルが挿入される。
【０５３６】
ＣＴＲＬ＿ＦＰＧＡ部１２００側において、ＭＥＭＦＳＭ１２４０は本発明のメモリシミュレーション局面の中心にある。ＭＥＭＦＳＭ１２４０は多くの制御信号を送信および受信してメモリシミュレーション書き込み／読み出しサイクルの起動およびサイクルによってサポートされる種々の動作の制御を制御する。ＭＥＭＦＳＭ１２４０は、ライン１２６０上のＤＡＴＡＳＦＲ信号をライン１２５８を介して受信する。この信号はまた、ライン１２７３上の各論理デバイスへ提供される。ＤＡＴＡＸＳＦＲがロー（ｌｏｗ）（論理ロー）になると、ＤＭＡデータ転送期間は終了し、そして評価およびメモリアクセス期間が開始する。
【０５３７】
ＭＥＭＦＳＭ１２４０はまた、ライン１２５４上のＬＡＳＴＨ信号およびライン１２５５上のＬＡＳＴＬ信号を受信して、選択されたアドレス空間に関連する選択されたワードが計算システムとシミュレーションシステムとの間でＰＣＩバスおよびＦＰＧＡバスを介してアクセスされたことを示す。このシフトアウト処理に関連するＭＯＶＥ信号は、所望のワードがアクセスされ、かつＭＯＶＥ信号がチェーンの終わりに最終的にＬＡＳＴ信号（すなわち、高バンクに対してＬＡＳＴＨおよび低バンクに対してＬＡＳＴＬ）となるまで各論理デバイス（例えば、論理デバイス１２０１〜１２０４）を介して伝送される。ＥＶＡＬＦＳＭ１２４８（すなわち、図５７はＦＰＧＡ０論理デバイス１２０３に対するＥＶＡＬＦＳＭ０を示す）において、対応するＬＡＳＴ信号はライン１２８０上のＳＨＩＦＴＯＵＴ信号である。特定の論理デバイス１２０３は図５６に示すように低バンクチェーンにおいて最後の論理デバイスではないので（論理デバイス１２０４が低バンクチェーンにおける最後の論理デバイスである）、ＥＶＡＬＦＳＭ０のためのＳＨＩＦＴＯＵＴ信号はＬＡＳＴ信号ではない。ＥＶＡＬＦＳＭ１２４８が図５６のＥＶＡＬＦＳＭ２に対応する場合、ライン１２８０上のＳＨＩＦＴＯＵＴ信号はＭＥＭＦＳＭへのライン１２５５へ提供されるＬＡＳＴＬ信号である。そうでなければ、ライン１２８０上のＳＨＩＦＴＯＵＴ信号は論理デバイス１２０４へ提供される（図５６参照）。同様に、ライン１２７９上のＳＨＩＦＴＩＮ信号は、ＦＰＧＡ０論理デバイス１２０３（図５６参照）のためのＶｃｃを表す。
【０５３８】
ＬＡＳＴＬおよびＬＡＳＴＨ信号はＡＮＤゲート１２４１へそれぞれライン１２５６および１２５７を介して入力される。ＡＮＤゲート１２４１はオープンドレインを提供する。ＡＮＤゲート１２４１の出力はライン１２５９上のＤＯＮＥ信号を生成する。ＤＯＮＥ信号は計算システムおよびＭＥＭＦＳＭ１２４０へ提供される。したがって、ＬＡＳＴＬおよびＬＡＳＴＨ信号の両方が論理ハイ（ｈｉｇｈ）であってシフトアウトチェーンプロセスの終了を示す場合のみ、ＡＮＤゲートは論理ハイを出力する。
【０５３９】
ＭＥＭＦＳＭ１２４０はＥＶＡＬカウンタ１２４２に対する開始信号をライン１２６１上に生成する。名前が示すように、開始信号はＥＶＡＬカウンタ１２４２を始動させ、かつＤＭＡデータ転送期間の完了後に送信される。開始信号はＤＤＡＴＡＸＳＦＲ信号のハイからロー（１から０）への遷移時に生成される。ＥＶＡＬカウンタ１２４２は、クロックサイクルの所定の数をカウントするプログラム可能カウンタである。ＥＶＡＬカウンタ１２４２におけるプログラムされたカウントの持続時間は、評価期間の持続期間を決定する。ライン１２７４上のＥＶＡＬカウンタ１２４２の出力は、カウンタがカウント中か否かに依存して、論理レベル１または０のいずれかである。ＥＶＡＬカウンタ１２４２がカウント中の場合、ライン１２７４上の出力は論理１であり、これはＥＶＡＬＦＳＭｘ１２４８を介して各ＦＰＧＡ論理デバイス１２０１〜１２０４に提供される。ＥＶＡＬ＝１の場合、ＦＰＧＡ論理デバイス１２０１〜１２０４はＦＰＧＡ間通信を行って、ユーザの設計におけるデータを評価する。ＥＶＡＬカウンタ１２４２の出力はまた、ライン１２６２上をＭＥＭＦＳＭユニット１２４０へそれ自身のトラッキングの目的でフィードバックされる。プログラムされたカウントの終了時に、ＥＶＡＬカウンタ１２４２はライン１２７４および１２６２上に論理０を生成して評価期間の終了を示す。
【０５４０】
メモリアクセスが所望されない場合、ライン１２７２上のＭＥＭ＿ＥＮは、論理０にアサートされ、かつＭＥＭＦＳＭユニット１２４０に提供される。この場合、メモリシミュレーションシステムは別のＤＭＡデータ転送期間のあいだ待機する。メモリアクセスが所望される場合、ライン１２７２上のＭＥＭ＿ＥＮ信号は論理１にアサートされる。実質的には、ＭＥＭ＿ＥＮ信号は、オンボードＳＲＡＭメモリデバイスがＦＰＧＡ論理デバイスにアクセスすることを可能にするためのＣＰＵからの制御信号である。ここで、ＭＥＭＦＳＭユニット１２４０は、ＦＰＧＡ論理デバイス１２０１〜１２０４がアドレスおよび制御信号をＦＰＧＡバスＦＤ［６３：３２］およびＦＤ［３１：０］に入力するのを待機する。
【０５４１】
残りの機能ユニットならびにそれらの関連制御信号およびラインは、データの書き込みおよび読み出しのためのＳＲＡＭメモリデバイスにアドレス／制御情報を提供するためのものである。これらの部分は、低バンクに対するメモリアドレス／制御ラッチ１２４３、低バンクに対するアドレス制御ｍｕｘ１２４４、高バンクに対するメモリアドレス／制御ラッチ１２４７、高バンクに対するアドレス制御マルチプレクサ１２４６、およびアドレスカウンタ１２４５を含む。
【０５４２】
低バンクに対するメモリアドレス／制御ラッチ１２４３は、バス１２１３に一致するＦＰＧＡバスＦＤ［３１：０］１２７５からのアドレスおよび制御信号、ならびにライン１２６３上のラッチ信号を受信する。ラッチ１２４３は、ライン１２６４上にｍｅｍ＿ｗｒ＿Ｌ信号を生成し、かつＦＰＧＡバスＦＤ［３１：０］からアドレス制御ｍｕｘ１２４４へバス１２６６を介して入力アドレス／制御信号を提供する。このｍｅｍ＿ｗｒ信号は、チップ選択書き込み信号と同じである。
【０５４３】
アドレス／制御マルチプレクサ１２４４は、入力としてバス１２６６上のアドレスおよび制御情報ならびにアドレスカウンタ１２４５からバス１２６８を介してのアドレス情報を受信する。出力として、アドレス／制御マルチプレクサ１２４４は、バス１２７６上でアドレス／制御情報を低バンクＳＲＡＭメモリデバイス１２０５へ送信する。ライン１２６５上の選択信号は、ＭＥＭＦＳＭユニット１２４０から適切な選択信号を提供する。バス１２７６上のアドレス／制御情報は、図５６におけるバス１２２９および１２１６上のＭＡ［１８：２］およびチップ選択読み出し／書き込み信号に対応する。
【０５４４】
アドレスカウンタ１２４５はＳＰＡＣＥ４およびＳＰＡＣＥ５からバス１２６７を介して情報を受信する。ＳＰＡＣＥ４はＤＭＡ書き込み転送情報を含む。ＳＰＡＣＥ５はＤＭＡ読み出し転送情報を含む。これらのＤＭＡ転送は計算システム（ワークステーションＣＰＵを介するキャッシュ／メインメモリ）とシミュレーションシステム（ＳＲＡＭメモリデバイス１２０５、１２０６）との間でＰＣＩバスを介して発生する。アドレスカウンタ１２４５はその出力をアドレス／制御マルチプレクサ１２４４および１２４６へのバス１２８８および１２６８に提供する。低バンクに対するライン１２６５上の適切な選択信号を用いて、アドレス／制御マルチプレクサ１２４４は、バス１２７６上に、ＳＲＡＭデバイス１２０５とＦＰＧＡ論理デバイス１２０３、１２０４との間の書き込み／読み出しメモリアドレスに対するバス１２６６上のアドレス／制御情報、または、バス１２６７上のＳＰＡＣＥ４またはＳＰＡＣＥ５からのＤＭＡ書き込み／読み出し転送データのいずれかを入力する。
【０５４５】
メモリアクセス期間中に、ＭＥＭＦＳＭユニット１２４０は、ライン１２６３上のラッチ信号をメモリアドレス／制御ラッチ１２４３に提供してＦＰＧＡバスＦＤ［３１：０］から入力をフェッチする。ＭＥＭＦＳＭユニット１２４０は、ＦＤ［３１：０］上のアドレス／制御信号からｍｅｍ＿ｗｒ＿Ｌ制御情報をさらなる制御のために抽出する。ライン１２６４上のｍｅｍ＿ｗｒ＿Ｌ信号が論理１である場合、書き込み動作が所望され、かつライン１２６５上の適切な選択信号はＭＥＭＦＳＭユニット１２４０によってアドレス／制御マルチプレクサ１２４４に生成され、バス１２６６上のアドレスおよび制御信号はバス１２７６上の低バンクＳＲＡＭへ送信される。その後、ＦＰＧＡ論理デバイスからＳＲＡＭメモリデバイスへの書き込みデータ転送が発生する。ライン１２６４上のｍｅｍ＿ｗｒ＿Ｌ信号が論理０である場合、読み出し動作が所望されるので、シミュレーションシステムは、ＳＲＡＭメモリデバイスによってそこに配置されるＦＰＧＡバスＦＤ［３１：０］上のデータを待機する。データが準備完了するとすぐに、ＳＲＡＭメモリデバイスからＦＰＧＡ論理デバイスへの読み出しデータ転送が発生する。
【０５４６】
高バンクに対する同様の構成および動作が提供される。高バンクに対するメモリアドレス／制御ラッチ１２４７は、バス１２１２に一致するＦＰＧＡバスＦＤ［６３：３２］１２７８からアドレスおよび制御信号、ならびにライン１２７０上のラッチ信号を受信する。ラッチ１２７０は、ライン１２７１上のｍｅｍ＿ｗｒ＿Ｈ信号を生成し、かつ入力アドレス／制御信号をＦＰＧＡバスＦＤ［６３：３２］からアドレス／制御マルチプレクサ１２４６へバス１２３９を介して提供する。
【０５４７】
アドレス／制御マルチプレクサ１２４６は、入力としてバス１２３９上のアドレス／制御情報およびバス１２６８上のアドレスカウンタ１２４５からアドレス情報を受信する。出力として、アドレス／制御マルチプレクサ１２４６は、バス１２７７上でアドレス／制御情報を高バンクＳＲＡＭメモリデバイス１２０６へ送信する。ライン１２６９上の選択信号は、ＭＥＭＦＳＭユニット１２４０から適切な選択信号を提供する。バス１２７７上のアドレス／制御情報は、図５６におけるバス１２１４および１２１５上のＭＡ［１８：２］およびチップ選択読み出し／書き込み信号に対応する。
【０５４８】
アドレスカウンタ１２４５は、上記のように、ＳＰＡＣＥ４およびＳＰＡＣＥ５からバス１２６７を介して情報をＤＭＡ書き込みおよび読み出し転送のために受信する。アドレスカウンタ１２４５はその出力をアドレス／制御マルチプレクサ１２４４および１２４６へのバス１２８８および１２６８に提供する。高バンクに対するライン１２６９上の適切な選択信号を用いて、アドレス／制御マルチプレクサ１２４６は、バス１２７７上に、ＳＲＡＭデバイス１２０６とＦＰＧＡ論理デバイス１２０１、１２０２との間の書き込み／読み出しメモリアドレスに対するバス１２３９上のアドレス／制御情報、または、バス１２６７上のＳＰＡＣＥ４またはＳＰＡＣＥ５からのＤＭＡ書き込み／読み出し転送データのいずれかを入力する。
【０５４９】
メモリアクセス期間中に、ＭＥＭＦＳＭユニット１２４０は、ライン１２７０上のラッチ信号をメモリアドレス／制御ラッチ１２４７に提供してＦＰＧＡバスＦＤ［６３：３２］からの入力をフェッチする。ＭＥＭＦＳＭユニット１２４０は、ｍｅｍ＿ｗｒ＿Ｈ制御情報をＦＤ［６３：３２］上のアドレス／制御信号をさらなる制御のために抽出する。ライン１２７１上のｍｅｍ＿ｗｒ＿Ｈ信号が論理１である場合、書き込み動作が所望され、かつライン１２６９上の適切な選択信号はＭＥＭＦＳＭユニット１２４０によってアドレス／制御マルチプレクサ１２４６に生成され、バス１２３９上のアドレスおよび制御信号はバス１２７７上の高バンクＳＲＡＭへ送信される。その後、ＦＰＧＡ論理デバイスからＳＲＡＭメモリデバイスへの書き込みデータ転送が発生する。ライン１２７１上のｍｅｍ＿ｗｒ＿Ｈ信号が論理０である場合、読み出し動作が所望されるので、シミュレーションシステムは、ＳＲＡＭメモリデバイスによってそこに配置されるＦＰＧＡバスＦＤ［６３：３２］上のデータを待機する。データが準備完了するとすぐに、ＳＲＡＭメモリデバイスからＦＰＧＡ論理デバイスへの読み出しデータ転送が発生する。
【０５５０】
図５７に示すように、アドレスおよび制御信号は低バンクＳＲＡＭメモリデバイスおよび高バンクメモリデバイスにそれぞれバス１２７６および１２７７を介して提供される。低バンクに対するバス１２７６は図５６におけるバス１２２９および１２１６の組み合せに対応する。同様に、高バンクに対するバス１２７７は図５６におけるバス１２１４および１２１５の組み合わせに対応する。
【０５５１】
本発明の１つの実施形態のメモリシミュレーションシステムに対するＣＴＲＬ＿ＦＰＧＡユニット１２００の動作は一般に以下のとおりである。ＣＴＲＬ＿ＦＰＧＡユニット１２００における計算システムおよびＭＥＭＦＳＭユニット１２４０へ提供される、ライン１２５９上のＤＯＮＥ信号は、シミュレーション書き込み／読み出しサイクルの完了を示す。ライン１２６０上のＤＡＴＡＸＳＦＲ信号は、シミュレーション書き込み／読み出しサイクルのＤＭＡデータ転送期間の発生を示す。ＦＰＧＡバスＦＤ［３１：０］およびＦＤ［６３：３２］の両方のメモリアドレス／制御信号は、それぞれ高バンクおよび低バンクに対するメモリアドレス／制御ラッチ１２４３および１２４７に提供される。いずれのバンクに対しても、ＭＥＭＦＳＭユニット１２４０はラッチ信号（１２６３または１２６９）を生成してアドレスおよび制御情報をラッチする。次いで、この情報はＳＲＡＭメモリデバイスに提供される。ｍｅｍ＿ｗｒ信号を使用して、書き込みまたは読み出し動作が所望されるかどうかを決定する。書き込みが所望される場合、データはＦＰＧＡ論理デバイス１２０１〜１２０４からＳＲＡＭメモリデバイスへ転送される。読み出しが所望される場合、シミュレーションシステムは、ＳＲＡＭメモリがリクエストされたデータをＰＦＧＡバス上へＳＲＡＭメモリとＦＰＧＡ論理デバイスとの間の転送のために入力するのを待機する。ＳＰＡＣＥ４およびＳＰＡＣＥ５のＤＭＡデータ転送のために、ライン１２６５、１２６９上の選択信号は、アドレスカウンタ１２４５の出力を、メイン計算システムとシミュレーションシステムにおけるＳＲＡＭメモリデバイスとの間で転送されるべきデータとして選択し得る。これらのアドレスのすべてについて、適切な待機サイクルは、論理が準備完了でかつデータが利用可能な場合にのみ論理がデータを処理するように挿入される。
【０５５２】
図６０は、メモリ読み出しデータダブルバッファ１２５１（図５７）のより詳細な図を示す。各ＦＰＧＡ論理デバイスにおける各メモリブロックＮは、異なる時間に入力され得る関連データをラッチインし、そして次いでこのラッチされたデータを同時に最後にバッファ出力するためのダブルバッファを有する。図６０において、メモリブロック０に対するダブルバッファ１３９１は、２つのＤ型フリップフロップ１３４０および１３４１を含む。第１のＤフリップフロップ１３４０の出力１３４３は第２のフリップフロップ１３４１の入力に結合される。第２のＤフリップフロップ１３４１の出力１３４４はダブルバッファの出力であり、これはユーザの設計論理におけるメモリブロックＮインタフェースに提供される。グローバルクロック入力は、ライン１３９３上で第１のフリップフロップ１３４０およびライン１３９４上で第２のフリップフロップ１３４１に提供される。
【０５５３】
第１のＤフリップフロップ１３４０はライン１３４２上でそのデータ入力をＳＲＡＭメモリデバイスからバス１２８３および高バンクに対するＦＰＧＡバスＦＤ［６３：３２］ならびに低バンクに対するＦＤ［３１：０］を介して受信する。イネーブル入力は、各ＦＰＧＡ論理デバイスに対するＥＶＡＬＦＳＭｘユニットからｒｄ＿ｌａｔｘ（例えば、ｒｄ＿ｌａｔ０）を受信するライン１３４５に結合される。したがって、読み出し動作（すなわち、ｗｒｘ＝０）に対して、ＥＶＡＬＦＳＭｘユニットはｒｄ＿ｌａｔｘ信号を生成して、ライン１３４２上のデータをライン１３４３にラッチインする。すべてのメモリブロックのすべてのダブルバッファに対する入力データは、異なる時間に入力され得る。ダブルバッファは、データのすべてが最初にラッチされることを確実にする。一旦すべてのデータがＤフリップフロップ１３４０にラッチインされると、ｃｌｋ＿ｅｎ信号（すなわち、ソフトウェアクロック）は、ライン１３４６上にＤフリップフロップ１３４１へのクロック入力として提供される。ｃｌｋ＿ｅｎ信号がアサートされると、ライン１３４３上のラッチされたデータがライン１３４４に対するＤフリップフロップ中１３４１にバッファされる。
【０５５４】
次のメモリブロック１に対して、ダブルバッファ１３９１に実質的に等価な別のダブルバッファ１３９２が提供される。ＳＲＡＭメモリデバイスからのデータはライン１３９６上へ入力される。グローバルクロック信号はライン１３９７上へ入力される。ｃｌｋ＿ｅｎ（ソフトウェアクロック）信号は、ライン１３９８上でダブルバッファ１３９２における第２のフリップフロップ（図示せず）に入力される。これらのラインは、メモリブロック０に対する第１のダブルバッファ１３９１および他のメモリブロックＮに対する他のダブルメモリに対して類似信号ラインに結合される。出力されたダブルバッファ化データはライン１３９９上に提供される。
【０５５５】
第２のダブルバッファ１３９２に対するｒｄ＿ｌａｔｘ信号（例えば、ｒｄ＿ｌａｔ１）は、ライン１３９５上に、他のダブルバッファに対する他のｒｄ＿ｌａｔｘ信号とは独立に提供される。より多くのダブルバッファが他のメモリブロックＮに対して提供される。
【０５５６】
ここで、ＭＥＭＦＳＭユニット１２４０の状態図を本発明の実施形態にしたがって説明する。図５８は、ＣＴＲＬ＿ＦＰＧＡユニットにおけるＭＥＭＦＳＭユニットの有限状態マシンのそのような状態図を示す。図５８における状態図は、シミュレーション書き込み／読み出しサイクル内の３つの期間がまた、それらに対応する状態を有して示されるように構成されている。したがって、状態１３００〜１３０１はＤＭＡデータ転送期間に対応する；状態１３０２〜１３０４は評価期間に対応する；および状態１３０５〜１３１４はメモリアクセス期間に対応する。以下の説明において図５７を図５８と併せて参照する。
【０５５７】
一般に、ＤＭＡ転送、評価、およびメモリアクセスのための信号のシーケンスが設定される。１つの実施形態において、そのシーケンスは以下のとおりである。ＤＡＴＡ＿ＸＳＦＲは、もしあればＤＭＡデータ転送を始動する。高バンクおよび低バンクの両方に対するＬＡＳＴ信号は、ＤＭＡデータ転送の完了時に生成され、かつＤＯＮＥ信号をトリガしてＤＭＡデータ転送完了期間の完了を示す。次いで、ＸＳＦＲ＿ＤＯＮＥ信号が生成され、かつ次いでＥＶＡＬサイクルが開始する。ＥＶＡＬの終結時に、メモリ読み出し／書き込みが開始し得る。
【０５５８】
図５８の上部に戻ると、状態１３００は、ＤＡＴＡＸＳＦＲ信号が論理０の場合はいつもアイドル状態である。このことはその場合にＤＭＡデータ転送が発生しないことを示す。ＤＡＴＡＸＳＦＲ信号が論理１の場合、ＭＥＭＦＳＭユニット１２４０は状態１３０１に進む。ここで、計算システムは、計算システム（図１、４５、および４６におけるメインメモリ）とシミュレーションシステム（図５６におけるＦＰＧＡ論理デバイス１２０１〜１２０４またはＳＲＡＭメモリデバイス１２０５、１２０６）との間のＤＭＡデータ転送を必要とする。適切な待機サイクルが、ＤＭＡデータ転送が完了するまで挿入される。ＤＭＡ転送が完了した場合、ＤＡＴＡＸＳＦＲ信号が論理０に戻る。
【０５５９】
ＤＡＴＡＸＳＦＲ信号が論理０に戻ると、開始信号の生成が状態１３０２でのＭＥＭＦＳＭユニット１２４０において起こされる。開始信号はＥＶＡＬカウンタ１２４２（プログラム可能カウンタ）を開始する。ＥＶＡＬカウンタが状態１３０３でカウントをしている限り、ＥＶＡＬ信号は論理１にアサートされ、かつ各ＦＰＧＡ論理デバイスおよびＭＥＭＦＳＭユニット１２４０においてＥＶＡＬＦＳＭｘを提供する。カウントの最後で、ＥＶＡＬカウンタは論理０のＥＶＡＬ信号を各ＦＰＧＡ論理デバイスおよびＭＥＭＦＳＭユニット１２４０におけるＥＶＡＬＦＳＭｘに提示する。ＭＥＭＦＳＭユニット１２４０は、論理０のＥＶＡＬ信号を受信すると、状態１３０４でＥＶＡＬ＿ＤＯＮＥフラグをオンにする。ＥＶＡＬ＿ＤＯＮＥフラグはＭＥＭＦＳＭによって使用され、評価期間が終了し、かつメモリアクセス期間が、所望ならばここで進行することを示す。ＣＰＵは、ＥＶＡＬ＿ＤＯＮＥおよびＸＳＦＲ＿ＤＯＮＥを、ＸＳＦＲ＿ＥＶＡＬレジスタ（以下の表Ｋを参照）を読み出すことによってチェックして、ＤＭＡ転送およびＥＶＡＬが次のＤＭＡ転送を成功裡に完了したことを確認する。
【０５６０】
しかし、いくつかの場合に、シミュレーションシステムは、その時点でメモリアクセスを実行したくないこともある。ここで、シミュレーションシステムはメモリイネーブル信号ＭＥＭ＿ＥＮを０に保持する。この使用不可にされた（論理０）ＭＥＭ＿ＥＮ信号は、ＭＥＭＦＳＭユニットをアイドル状態１３００に保持する。ここで、ＭＥＭＦＳＭユニットは、ＤＭＡデータ転送またはＦＰＧＡ論理デバイスによるデータの評価を待機する。他方、メモリイネーブル信号ＭＥＭ＿ＥＮが論理１であると、シミュレーションシステムはメモリアクセスの実行が所望されることを示す。
【０５６１】
図５８において状態１３０４より下では、状態図は、平行に進行する２つのセクションに分割される。１つのセクションは低バンクメモリアクセスのための状態１３０５、１３０６、１３０７、１３０８、および１３０９を含む。他のセクションは、高バンクメモリアクセスのための状態１３１１、１３１２、１３１３、１３１４、および１３０９を含む。
【０５６２】
状態１３０５において、シミュレーションは、現在選択されているＦＰＧＡ論理デバイスがアドレスおよび制御信号をＦＰＧＡバスＦＤ［３１：０］に入力するために１サイクル待機する。状態１３０６において、ＭＥＭＦＳＭは、メモリアドレス／制御ラッチ１２４３に対するライン１２６３上にラッチ信号を生成して、ＦＤ［３１：０］から入力をフェッチする。この特にフェッチされたアドレスおよび制御信号に対応するデータは、ＳＲＡＭメモリデバイスから読み出されるか、またはＳＲＡＭメモリへ書き込まれるかのいずれかである。シミュレーションシステムが読み込み動作または書き込み動作を必要としているかを判断するために、低バンクに対するメモリ書き込み信号ｍｅｍ＿ｗｒ＿Ｌがアドレスおよび制御信号から抽出され得る。ｍｅｍ＿ｗｒ＿Ｌ＝０の場合、読み出し動作がリクエストされる。ｍｅｍ＿ｗｒ＿Ｌ＝１の場合、書き込み動作がリクエストされる。上記のように、このｍｅｍ＿ｗｒ信号はチップ選択書き込み信号と等価である。
【０５６３】
状態１３０７において、アドレス／制御マルチプレクサ１２４４に対する適切な選択信号が生成され、アドレスおよび制御信号を低バンクＳＲＡＭへ送信する。ＭＥＭＦＳＭユニットは、ｍｅｍ＿ｗｒ信号およびＬＡＳＴＬ信号をチェックする。ｍｅｍ＿ｗｒ＿Ｌ＝１かつＬＡＳＴＬ＝０の場合、書き込み動作はリクエストされるが、ＦＰＧＡ論理デバイスのチェーンにおける最後のデータはまだ外へシフトされていない。したがって、シミュレーションシステムは状態１３０５に戻る。状態１３０５で、シミュレーションシステムは、ＦＰＧＡ論理デバイスがさらなるアドレスおよび制御信号をＦＤ［３１：０］に入力するために１サイクル待機する。この動作は、最後のデータがＦＰＧＡ論理デバイスの外へシフトされるまで継続する。しかし、ｍｅｍ＿ｗｒ＿Ｌ＝１かつＬＡＳＴＬ＝１の場合、最後のデータはＦＰＧＡ論理デバイスの外へシフトされた。
【０５６４】
同様に、読み出し動作を示すｍｅｍ＿ｗｒ＿Ｌ＝０の場合、ＭＥＭＦＳＭは状態１３０８へ進む。状態１３０８において、シミュレーションシステムは、ＳＲＡＭメモリデバイスがデータをＦＰＧＡバスＦＤ［３１：０］に入力するために１サイクル待機する。ＬＡＳＴＬ＝０の場合、ＦＰＧＡ論理デバイスのチェーンの最後のデータはまだ外へシフトされていない。したがって、シミュレーションシステムは状態１３０５に戻る。状態１３０５で、シミュレーションシステムは、ＦＰＧＡ論理デバイスがさらなるアドレスおよび制御信号をＦＤ［３１：０］に入力するために１サイクル待機する。この処理は、最後のデータがＦＰＧＡ論理デバイスの外へシフトされるまで継続する。なお、書き込み動作（ｍｅｍ＿ｗｒ＿Ｌ＝１）および読み出し動作（ｍｅｍ＿ｗｒ＿Ｌ＝０）はＬＡＳＴＬ＝１までインターリーブまたはそうでなければ交番され得る。
【０５６５】
ＬＡＳＴＬ＝１の場合、ＭＥＭＦＳＭは状態１３０９に進む。状態１３０９でＭＥＭＦＳＭはＤＯＮＥ＝０のあいだ待機する。ＤＯＮＥ＝１になると、ＬＡＳＴＬおよびＬＡＳＴＨの両方が論理１となり、かつ、したがって、シミュレーション書き込み／読み出しサイクルが完了した。次いで、シミュレーションシステムは状態１３００に進む。状態１３００でシミュレーションシステムはＤＡＴＡＸＳＦＲ＝０の場合はいつもアイドル状態のままである。
【０５６６】
同じ処理が高バンクに対して適用可能である。状態１３１１において、シミュレーションシステムは、現在選択されているＦＰＧＡ論理デバイスがアドレスおよび制御信号をＦＰＧＡバスＦＤ［６３：３２］に入力するために１サイクル待機する。状態１３１２において、ＭＥＭＦＳＭはラッチ信号をライン１２７０上にメモリアドレス／制御ラッチ１２４７に対して生成して、ＦＤ［６３：３２］から入力をフェッチする。この特定のフェッチされたアドレスおよび制御信号に対応するデータは、ＳＲＡＭメモリデバイスから読み出されるか、またはＳＲＡＭメモリデバイスへ書き込まれるかのいずれかであり得る。シミュレーションシステムが読み込み動作または書き込み動作を必要としているかを判断するために、高バンクに対するメモリ書き込み信号ｍｅｍ＿ｗｒ＿Ｈがアドレスおよび制御信号から抽出され得る。ｍｅｍ＿ｗｒ＿Ｈ＝０の場合、読み出し動作がリクエストされる。ｍｅｍ＿ｗｒ＿Ｈ＝１の場合、書き込み動作がリクエストされる。
【０５６７】
状態１３１３において、アドレス／制御マルチプレクサ１２４６に対する適切な選択信号が生成され、アドレスおよび制御信号を高バンクＳＲＡＭへ送信する。ＭＥＭＦＳＭユニットは、ｍｅｍ＿ｗｒ信号およびＬＡＳＴＨ信号をチェックする。ｍｅｍ＿ｗｒ＿Ｈ＝１かつＬＡＳＴＨ＝０の場合、書き込み動作はリクエストされるが、ＦＰＧＡ論理デバイスのチェーンにおける最後のデータはまだ外へシフトされていない。したがって、シミュレーションシステムは状態１３１１に戻る。状態１３１１で、シミュレーションシステムは、ＦＰＧＡ論理デバイスがさらなるアドレスおよび制御信号をＦＤ［６３：３２］に入力するために１サイクル待機する。この動作は、最後のデータがＦＰＧＡ論理デバイスの外へシフトされるまで継続する。しかし、ｍｅｍ＿ｗｒ＿Ｌ＝１かつＬＡＳＴＬ＝１の場合、最後のデータはＦＰＧＡ論理デバイスの外へシフトされた。
【０５６８】
同様に、読み出し動作を示すｍｅｍ＿ｗｒ＿Ｈ＝０の場合、ＭＥＭＦＳＭは状態１３１４へ進む。状態１３１４において、シミュレーションシステムは、ＳＲＡＭメモリデバイスがデータをＦＰＧＡバスＦＤ［６３：３２］に入力するために１サイクル待機する。ＬＡＳＴＨ＝０の場合、ＦＰＧＡ論理デバイスのチェーンの最後のデータはまだ外へシフトされていない。したがって、シミュレーションシステムは状態１３１１に戻る。状態１３１１で、シミュレーションシステムは、ＦＰＧＡ論理デバイスがさらなるアドレスおよび制御信号をＦＤ［６３：３２］に入力するために１サイクル待機する。この処理は、最後のデータがＦＰＧＡ論理デバイスの外へシフトされるまで継続する。なお、書き込み動作（ｍｅｍ＿ｗｒ＿Ｈ＝１）および読み出し動作（ｍｅｍ＿ｗｒ＿Ｈ＝０）はＬＡＳＴＨ＝１までインターリーブまたはそうでなければ交番され得る。
【０５６９】
ＬＡＳＴＨ＝１の場合、ＭＥＭＦＳＭは状態１３０９に進む。状態１３０９でＭＥＭＦＳＭはＤＯＮＥ＝０のあいだ待機する。ＤＯＮＥ＝１になると、ＬＡＳＴＬおよびＬＡＳＴＨの両方が論理１となり、かつ、したがって、シミュレーション書き込み／読み出しサイクルが完了した。次いで、シミュレーションシステムは状態１３００に進む。状態１３００でシミュレーションシステムはＤＡＴＡＸＳＦＲ＝０の場合はいつもアイドル状態のままである。
【０５７０】
あるいは、高バンクおよび低バンクの両方に対して、状態１３０９および１３１０は本発明の別の実施形態においては実施されない。したがって、低バンクにおいて、ＭＥＭＦＳＭは、状態１３０８（ＬＡＳＴＬ＝０）または１３０７（ＭＥＭ＿ＷＲ＿Ｌ＝１かつＬＡＳＴＬ＝１）を過ぎた後に状態１３００へ直接に進み得る。高バンクにおいて、ＭＥＭＦＳＭは、状態１３１４（ＬＡＳＴＨ＝１）または１３１３（ＭＥＭ＿ＷＲ＿Ｈ＝１かつＬＡＳＴＨ＝１）を過ぎた後に状態１３００へ直接に進み得る。
【０５７１】
ここでＥＶＡＬＦＳＭユニット１２４８の状態図を本発明の一実施形態にしたがって説明する。図５９は、各ＦＰＧＡチップにおけるＥＶＡＬＦＳＭｘ有限状態マシンのそのような状態図を示す。図５８と同様に、図５９における状態図は、シミュレーション書き込み／読み出しサイクル内の２つの期間がまたそれらに対応する状態を有して示されるように構成された。したがって、状態１３２０〜１３２６Ａは評価期間に対応し、かつ状態１３２６Ｂ〜１３３６はメモリアクセス期間に対応する。以下の説明において図５７を図５９と併せて参照する。
【０５７２】
ＥＶＡＬＦＳＭｘユニット１２４８は、ＣＴＲＬ＿ＦＰＧＡユニット１２００からライン１２７４上でＥＶＡＬ信号を受信する（図５７参照）。ＥＶＡＬ＝０の間、ＦＰＧＡ論理デバイスによるデータの評価は発生しない。したがって、状態１３２０において、ＥＶＡＬＦＳＭｘはＥＶＡＬ＝０のあいだアイドル状態である。ＥＶＡＬ＝１の場合、ＥＶＡＬＦＳＭｘは状態１３２１へ進む。
【０５７３】
状態１３２１、１３２２、および１３２３は、ＦＰＧＡ間通信に関する。ＦＰＧＡ間通信では、データがユーザ設計によってＦＰＧＡ論理デバイスを介して評価される。ここで、ＥＶＡＬＦＳＭｘは、信号ｉｎｐｕｔ＿ｅｎ、ｍｕｘ＿ｅｎ、およびｃｌｋ＿ｅｎ（図５７における項目１２８１）をユーザの論理に対して生成する。状態１３２１において、ＥＶＡＬＦＳＭｘはｃｌｋ＿ｅｎ信号を生成する。ｃｌｋ＿ｅｎ信号は、すべてのクロックエッジレジスタフリップフロップの第２のフリップフロップがこのサイクルにおけるユーザの設計論理において使用可能にする（図１９参照）。ｃｌｋ＿ｅｎ信号は別にソフトウェアクロックとして公知である。ユーザメモリタイプが同期である場合、ｃｌｋ＿ｅｎはまた、各メモリブロックにおけるメモリ読み出しデータダブルバッファ１２５１の第２のクロックを使用可能にする。各メモリブロックのためのＳＲＡＭデータ出力は、このサイクルにおいてユーザの設計論理に送信される。
【０５７４】
状態１３２２において、ＥＶＡＬＦＳＭｘはｉｎｐｕｔ＿ｅｎ信号をユーザの設計論理に対して生成して、ＤＭＡ転送によるＣＰＵからユーザの論理へ送信される入力信号をラッチする。ｉｎｐｕｔ＿ｅｎ信号は、イネーブル信号を一次クロックレジスタにおける第２のフリップフロップへ提供する（図１９参照）。
【０５７５】
状態１３２３において、ＥＶＡＬＦＳＭｘはｍｕｘ＿ｅｎ信号を生成して各ＦＰＧＡ論理デバイスにおける多重化回路をオンにしてアレイにおける他のＦＰＧＡ論理デバイスとの通信を開始する。上記のように、ＦＰＧＡ間ワイヤラインは、各ＦＰＧＡ論理デバイスチップにおける限られたピンリソースを効率的に使用するように多重化されることが多い。
【０５７６】
状態１３２４において、ＥＶＡＬＦＳＭはＥＶＡＬ＝１である限り待機する。ＥＶＡＬ＝０の場合、評価期間が完了し、そしてそのため状態１３２５はＥＶＡＬＦＳＭｘがｍｕｘ＿ｅｎ信号をオフにすることを必要とする。
【０５７７】
メモリブロックＭの数（ここでＭは０を含む整数）がゼロの場合、ＥＶＡＬＦＳＭｘは状態１３２０に戻る。状態１３２０でＥＶＡＬＦＳＭｘはＥＶＡＬ＝０ならばアイドル状態のままである。たいていの場合、Ｍ＞０、かつ、したがってＥＶＡＬＦＳＭｘは状態１３２６Ａ／１３２６Ｂに戻る。「Ｍ」はＦＰＧＡ論理デバイスにおけるメモリブロックの数である。Ｍは、ＦＰＧＡ論理デバイスにおいてマッピングおよび構成されるユーザの設計から一定である。Ｍは値を下げるようにはカウントされない。Ｍ＞０の場合、図５９の右の部分（メモリアクセス期間）はＦＰＧＡ論理デバイスにおいて構成され得る。Ｍ＝０の場合、図５９の左部分（ＥＶＡＬ期間）のみが構成され得る。
【０５７８】
状態１３２７は、ＳＨＩＦＴＩＮ＝０である限りＥＶＡＬＦＳＭｘを待機状態に保持する。ＳＨＩＦＴＩＮ＝１の場合、前回のＦＰＧＡ論理デバイスはそのメモリアクセスを完了し、かつ現在のＦＰＧＡ論理デバイスがここでそのメモリアクセスタスクを実行する準備が完了している。あるいは、現在のＦＰＧＡ論理デバイスはバンクにおいて第１の論理デバイスであり、かつＳＨＩＦＴＩＮ入力ラインはＶｃｃに結合される。にもかかわらす、ＳＨＩＦＴＩＮ＝１信号の受信は現在のＦＰＧＡ論理デバイスがメモリアクセスを実行する準備が完了していることを示す。状態１３２８において、メモリブロック数ＮはＮ＝１にセットされる。この数Ｎは、各ループの発生時にインクリメントされてその特定のメモリブロックＮに対するメモリアクセスが達成され得る。はじめに、Ｎ＝１であり、かつそこでＥＶＡＬＦＳＭｘはメモリブロック１に対するメモリにアクセスするように進み得る。
【０５７９】
状態１３２９において、ＥＶＡＬＦＳＭｘは、ＦＰＧＡバスドライバＦＤＯ＿ＭＵＸｘ１２４９に対してライン１２８５上に選択信号を生成し、かつライン１２８４上にｏｕｔｐｕｔ＿ｅｎ信号を生成して、Ｍｅｍ＿Ｂｌｏｃｋ＿Ｎインタフェース１２５３のアドレスおよび制御信号をＦＰＧＡバスＦＤ［６３：３２］またはＦＤ［３１：０］に入力する。書き込み動作が要求される場合、ｗｒ＝１である。そうでなければ、読み出し動作が要求され、そこでｗｒ＝０となる。ＥＶＡＬＦＳＭｘはその入力の１つとしてライン１２８７上のｗｒ信号を受信する。このｗｒ信号に基づいて、ライン１２８５上の適切な選択信号がアサートされ得る。
【０５８０】
ｗｒ＝１の場合、ＥＶＡＬＦＳＭｘは状態１３３０に進む。ＥＶＡＬＦＳＭｘはＦＤバスドライバに対する選択およびｏｕｔ＿ｅｎ信号を生成してＭｅｍ＿Ｂｌｏｃｋ＿Ｎ１２５３の書き込みデータをＦＰＧＡバスＦＤ［６３：３２］またはＦＤ［３１：０］に入力される。その後、ＥＶＡＬＦＳＭｘは、ＳＲＡＭメモリデバイスが書き込みサイクルを完了するようにさせるために１サイクル待機する。次いで、ＥＶＡＬＦＳＭｘは状態１３３５に進む。状態１３３５でメモリブロック数Ｎは１だけインクリメントされる。すなわち、Ｎ＝Ｎ＋１である。
【０５８１】
しかし、状態１３２９においてｗｒ＝０の場合、読み出し動作が要求され、そしてＥＶＡＬＦＳＭｘが状態１３３２に進む。ＥＶＡＬＦＳＭｘは、状態１３３２で１サイクル待機し、かつ次いで状態１３３３へ進んで別のサイクルのあいだ待機する。状態１３３４において、ＥＶＡＬＦＳＭｘはｒｄ＿ｌａｔｃｈ信号をライン１２８６上に生成して、メモリブロックＮのメモリ読み出しデータダブルバッファ１２５１がＳＲＡＭデータをＦＤバス上へフェッチするようにさせる。次いで、ＥＶＡＬＦＳＭｘは状態１３３５へ進む。状態１３３５でメモリブロック数Ｎは１だけインクリメントされる。すなわち、Ｎ＝Ｎ＋１である。したがって、インクリメント状態１３３５の前にＮ＝１の場合、Ｎはここで２となり、その結果のメモリアクセスはメモリブロック２に対して適用可能となり得る。
【０５８２】
現在のメモリブロックＮの数がユーザの設計におけるメモリブロックＭの総数以下の場合（すなわち、Ｎ≦Ｍ）、ＥＶＡＬＦＳＭｘは状態１３２９に進む。状態１３２９でＥＶＡＬＦＳＭｘは、動作が書き込みかまたは読み出しかに依存してＦＤバスドライバのための特定の選択およびｏｕｔ＿ｅｎ信号を生成する。次いで、この次のメモリブロックＮのための書き込みまたは読み出し動作が発生し得る。
【０５８３】
しかし、現在のメモリブロックＮの数がユーザの設計におけるメモリブロックＭの総数よりも大きい場合（すなわち、Ｎ≧Ｍ）、ＥＶＡＬＦＳＭｘは状態１３３６に進む。状態１３３６でＥＶＡＬＦＳＭｘはＳＨＩＦＴＯＵＴ出力信号をオンにして、バンクにおける次のＦＰＧＡ論理デバイスがＳＲＡＭメモリデバイスにアクセス可能とする。その後、ＥＶＡＬＦＳＭｘは状態１３２０に進む。状態１３２０でＥＶＡＬＦＳＭｘは、シミュレーションシステムがＦＰＧＡ論理デバイスの間のデータ評価を要求するまでアイドル状態である（すなわち、ＥＶＡＬ＝１）。
【０５８４】
図６１は、本発明の一実施形態のシミュレーション書き込み／読み出しサイクルを示す。図６１は、参照番号１３６６において、シミュレーション書き込み／読み出しサイクルにおける３つの期間（ＤＭＡデータ転送期間、評価期間、およびメモリアクセス期間）を示す。図示しないが、先行のＤＭＡ転送、評価、およびメモリアクセスが発生し得たことを暗に示す。さらに、低バンクＳＲＡＭへ／からのデータ転送に対するタイミングは、高バンクＳＲＡＭと異なる。簡単のため、図６１は、低バンクおよび高バンクに対するアクセス時間が同一である１つの例を示す。グローバルクロックＧＣＬＫ１３５０は、システムにおけるすべての構成要素に対してクロック信号を提供する。
【０５８５】
ＤＡＴＡＸＳＦＲ信号１３５１は、ＤＭＡデータ転送期間の発生を示す。トレース１３６７においてＤＡＴＡＸＳＦＲ＝１の場合、ＤＭＡデータ転送は、メイン計算システムとＦＰＧＡ論理デバイスまたはＳＲＡＭメモリデバイスとの間で発生している。したがって、データはＦＰＧＡ高バンクバスＦＤ［６３：３２］１３５９：およびトレース１３６９、ならびにＦＰＧＡ低バンクバスＦＤ［３１：０］１３５８およびトレース１３６８上に提供される。ＤＯＮＥ信号１３６４は、論理０対１信号（トレース１３９０）によってメモリアクセス期間の完了を示すか、またはそうでなければ、論理０を用いてシミュレーション書き込み／読み出しサイクルの持続期間（例えば、１３７０のエッジおよびトレース１３９０のエッジの組み合わせ）を示す。ＤＭＡ転送期間の間、ＤＯＮＥ信号は論理０である。
【０５８６】
ＤＭＡ転送期間の終了時に、ＤＡＴＡＸＳＦＲ信号は論理１から０へ遷移する。これにより、評価期間の開始がトリガされる。したがって、ＥＶＡＬ１３５２は、トレース１３７１によって示されるように論理１である。論理１でのＥＶＡＬ信号の持続期間は、予め決定され、かつプログラム可能であり得る。この評価期間の間、ユーザの設計論理におけるデータは、トレース１３７２によって示されるような論理１であるｃｌｋ＿ｅｎ信号１３５３、またトレース１３７３によって示されるような論理１であるｉｎｐｕｔ＿ｅｎ信号１３５４、およびまたトレース１３７４によって示されるようなｃｌｋ＿ｅｎおよびｉｎｐｕｔ＿ｅｎよりも長い持続時間のあいだ論理１であるｍｕｘ＿ｅｎ信号１３５５を用いて評価される。データは、この特定のＦＰＧＡ論理デバイス内で評価されている。ｍｕｘ＿ｅｎ信号１３５５はトレース１３７４で論理１から０へ遷移し、かつ少なくとも１つのメモリブロックがＦＰＧＡ論理デバイスにおいて存在する場合、評価期間が終了しかつメモリアクセス期間が開始する。
【０５８７】
ＳＨＩＦＴＩＮ信号１３５６はトレース１３７５で論理１にアサートされる。これは、先行のＦＰＧＡがその評価を完了し、かつすべての所望のデータはこの先行のＦＰＧＡ論理デバイスへ／からアクセスされた。ここで、バンクにおける次のＦＰＧＡ論理デバイスがメモリアクセスを開始するよう準備完了する。
【０５８８】
トレース１３７７〜１３８６において、次の命名法を使用する。ＡＣｊ＿ｋはアドレスおよび制御信号がＦＰＧＡｊおよびメモリブロックｋに関連付けられることを示す。ここでｊおよびｋは０を含む整数である。ＷＤｊ＿ｋは、ＦＰＧＡｊのための書き込みデータおよびメモリブロックｋを示す。ＲＤｊ＿ｋはＦＰＧＡｊおよびメモリブロックｋを示す。したがって、ＡＣ３＿１は、ＦＰＧＡ３およびメモリブロック１に関連付けられたアドレスおよび制御信号を示す。低バンクＳＲＡＭアクセスおよび高バンクＳＲＡＭアクセス１３６１は、トレース１３８７として示される。
【０５８９】
次の数トレース１３７７〜１３８７は、どのようにメモリアクセスが達成されるかを示す。ＥＶＡＬＦＳＭｘへのｗｒｘ信号およびその結果のＭＥＭＦＳＭへのｍｅｍ＿ｗｒ信号の論理レベルに基づいて、書き込みまたは読み出し動作のいずれかが実行され得る。書き込み動作が所望の場合、ユーザのメモリブロックＮインタフェースを有するメモリモデルインタフェース（図５７におけるＭｅｍ＿Ｂｌｏｃｋ＿Ｎインタフェース１２５３）はｗｒｘをその制御信号の１つとして提供する。この制御信号ｗｒｘは、ＦＤバスドライバおよびＥＶＡＬＦＳＭｘユニットに提供される。ｗｒｘが論理１の場合、適切な選択信号およびｏｕｔｐｕｔ＿ｅｎ信号は、ＦＤバスドライバに提供され、メモリ書き込みデータをＦＤバスに入力する。ここでＦＤバス上にあるこの同じ制御信号は、ＣＴＲＬ＿ＦＰＧＡユニットにおけるメモリアドレス／制御ラッチによってラッチされ得る。メモリアドレス／制御ラッチは、アドレスおよび制御信号をＳＲＡＭにＭＡ［１８：２］／制御バスを介して送信される。論理１であるｗｒｘ制御信号は、ＦＤバスから抽出され、かつ書き込み動作がリクエストされるので、ＦＤバス上のアドレスおよび制御信号に関連付けられたデータはＳＲＡＭメモリデバイスへ送信される。
したがって、図６１に示されるように、この次のＦＰＧＡ論理デバイス（低バンクにおける論理デバイスＦＰＧＡ０）は、トレース１３７７によって示されるようにＡＣ０＿０をＦＤ［３１：０］に入力する。シミュレーションシステムは、ＷＤ０＿０に対して書き込み動作を実行する。次いで、ＡＣ０＿１は、ＦＤ［３１：０］に入力される。しかし、読み出し動作がリクエストされた場合、ＡＣ０＿１をＦＤバスＦＤ［３１：０］に入力した後にいくらかの時間遅延が続き、その後ＡＣ０＿０に対応するＷＤ０＿０の代わりにＲＤ０＿０がＳＲＡＭメモリデバイスによってＦＤバスに入力される。
【０５９０】
なお、トレース１３８３によって示されるようにＡＣ０＿０をＭＡ［１８：２］／制御バスに入力することは、アドレス、制御、およびデータをＦＤバスに入力することよりわずかに遅れる。これは、ＭＥＭＦＳＭユニットがアドレス／制御信号をＦＤバスからラッチインし、ｍｅｍ＿ｗｒ信号を抽出し、かつ適切な選択信号をアドレス／制御マルチプレクサに対して生成してアドレス／制御信号がＭＡ［１８：２］／制御バスに入力され得るようにするのに時間を必要とするからである。さらに、アドレス／制御信号をＳＲＡＭメモリデバイスに対してＭＡ［１８：２］／制御バスに入力した後で、シミュレーションシステムは、ＳＲＡＭメモリからの対応のデータがＦＤバスに入力されるのを待機しなければならない。１つの例は、トレース１３８４とトレース１３８１との間の時間オフセットである。ここでＲＤ１＿１は、ＡＣ１＿１がＭＡ［１８：２］／制御バスに入力された後で、ＦＤバスに入力される。
【０５９１】
高バンク上で、ＦＰＧＡ１は、ＦＤ［６３：３２］にＡＣ１＿０を入力し、次いでＷＤ１＿０が続く。その後、ＡＣ１＿１がＦＤ［６３：３２］に入力される。これは、トレース１３８０によって示される。ＡＣ１＿１がＦＤバスに入力される場合、制御信号はこの例において読み出し動作を示す。したがって、上記のように、ＡＣ１＿１がトレース１３８４によって示されるようにＭＡ［１８：２］／制御バス上にあるので、論理０である適切なｗｒｘおよびｍｅｍ＿ｗｒ信号がＥＶＡＬＦＳＭｘおよびＭＥＭＦＳＭユニットへのアドレス／制御信号において存在する。シミュレーションシステムはこれが読み出し動作であることを知っているので、書き込みデータはＳＲＡＭメモリへ伝送されない。むしろ、ＡＣ１＿１に関連付けられた読み出しデータが、ユーザの設計論理によってシミュレーションメモリブロックインタフェースを介する後の読み出しのために、ＳＲＡＭメモリによってＦＤバスに入力される。これは高バンク上でトレース１３８１によって示される。低バンク上において、ＲＤ０＿１は、トレース１３７８によって示されるようにＦＤバスに入力され、続いてＡＣ０＿１がＭＡ［１８：２］／制御バスに入力される（図示せず）。
【０５９２】
ユーザの設計論理によるシミュレーションメモリブロックインタフェースを介する読み出し動作は、ＥＶＡＬＦＳＭｘがトレース１３８８によって示されるようにシミュレーションシステムにおけるメモリ読み出しデータダブルバッファに対してｒｄ＿ｌａｔ０信号１３６２を生成する場合に達成される。このｒｄ＿ｌａｔ０信号は、低バンクＦＰＧＡ０および高バンクＦＰＧＡ１の両方に提供される。
【０５９３】
その後、各ＦＰＧＡ論理デバイスに対する次のメモリブロックがＦＤバスに入力される。ＡＣ２＿０は、ＡＣ３＿０が高バンクＦＤバスに入力された間、低バンクＦＤバスに入力される。書き込み動作が所望の場合、ＷＤ２＿０は低バンクＦＤバスに入力され、かつＷＤ３＿０は高バンクＦＤバスに入力される。ＡＣ３＿０は、トレース１３８５上に示されるようにＭＡ［１８：２］／制御バスに入力される。この処理は、書き込みおよび読み出し動作のために次のメモリブロックに対して継続する。なお、低バンクおよび高バンクのための書き込みおよび読み出し動作は異なる時間および速度で発生し、かつ図６１は低バンクおよび高バンクに対するタイミングが同じである特定の例を示す。加えて、低および高バンクに対する書き込み動作は一緒に発生し、両方のバンク上での読み出し動作が続く。必ずしもいつもこうなるわけではない。低バンクおよび高バンクが存在することによって、これらのバックに結合されたデバイスの並列動作が可能となる。すなわち、低バンク上の活動は高バンク上の活動から独立である。高バンクが一続きの読み出し動作を並列に実行している間に低バンクが一続きの書き込み動作を実行するような他のシナリオが考えられる。
【０５９４】
各バンクに対して最後のＦＰＧＡ論理デバイスにおける最後のデータとなった場合、ＳＨＩＦＴＯＵＴ信号１３５７はトレース１３７６によって示されるようにアサートされる。読み出し動作に対して、低バンク上のＦＰＧＡ２および高バンク上のＦＰＧＡ３に対応するｒｄ＿ｌａｔ１信号１３６３は、トレース１３８９によって示されるようにアサートされ、トレース１３７９上のＲＤ２＿１およびトレース１３８２上のＲＤ３＿１を読み出す。最後のＦＰＧＡユニットに対する最後のデータがアクセスされたので、シミュレーション書き込み／読み出しサイクルの完了がトレース１３９０によって示されるようにＤＯＮＥ信号１３６４によって示される。
【０５９５】
以下の表Ｈは、シミュレーションシステムボード上の種々の構成要素、および対応のレジスタ／メモリ、ＰＣＩメモリアドレス、およびローカルアドレスをリストおよび記載する。
【０５９６】
【表１１】
2005500625.tif 000019
【０５９７】
構成ファイルに対するデータ形式は、本発明の一実施形態にしたがって表Ｊにおいて以下に示される。ＣＰＵは、各時間にＰＣＩバスを介して１ワードを送信して、すべてのオンボードＦＰＧＡに対する１ビットを並列に構成する。
【０５９８】
【表１２】
2005500625.tif 000020
【０５９９】
以下の表Ｋは、ＸＳＦＲ＿ＥＶＡＬレジスタをリストする。ＸＳＦＲ＿ＥＶＡＬレジスタはすべてのボード上に存在する。ＸＳＦＲ＿ＥＶＡＬレジスタは、ホスト計算システムによって使用され、ＥＶＡＬ期間をプログラムし、ＤＭＡ読み出し／書き込みを制御し、かつＥＶＡＬ＿ＤＯＮＥおよびＸＳＦＲ＿ＤＯＮＥフィールドのステータスを読み出す。ホスト計算システムはまた、このレジスタを使用してメモリアクセスを使用可能にする。このレジスタに対するシミュレーションシステムの動作は図６２および６３を参照して以下に説明される。
【０６００】
【表１３】
2005500625.tif 000021
【０６０１】
以下の表ＬはＣＯＮＦＩＧ＿ＪＴＡＧ［６：１］レジスタの内容をリストする。ＣＰＵはＦＰＧＡ論理デバイスを構成し、かつこのレジスタを介してＦＰＧＡ論理デバイスに対して境界スキャンテストを実行する。各ボードは１つの専用レジスタを有する。
【０６０２】
【表１４】
2005500625.tif 000022
【０６０３】
図６２および６３は本発明の別の実施形態のタイミング図を示す。これら２つの図は、ＸＳＦＲ＿ＥＶＡＬレジスタに対するシミュレーションシステムの動作を示す。ＸＳＦＲ＿ＥＶＡＬレジスタは、ホスト計算システムによって使用され、ＥＶＡＬ期間をプログラムし、ＤＭＡ読み出し／書き込みを制御し、かつＥＶＡＬ＿ＤＯＮＥおよびＸＳＦＲ＿ＤＯＮＥフィールドのステータスを読み出す。ホスト計算システムはまた、このレジスタを使用して、メモリアクセスを可能にする。２つの図の主な違いの１つは、ＷＡＩＴ＿ＥＶＡＬフィールドのステータスである。ＷＡＩＴ＿ＥＶＡＬフィールドが「０」に設定された場合（図６２の場合）、ＤＭＡ読み出し転送はＣＬＫ＿ＥＮの後に開始する。ＷＡＩＴ＿ＥＶＡＬフィールドが「１」に設定された場合（図６３の場合）、ＤＭＡ読み出し転送はＥＶＡＬ＿ＤＯＮＥの後に開始する。
【０６０４】
図６２において、ＷＲ＿ＸＳＦＲ＿ＥＮおよびＲＤ＿ＸＳＦＲ＿ＥＮの両方が「１」に設定される。これら２つのフィールドはＤＭＡ書き込み／読み出し転送を使用可能とし、かつＸＳＦＲ＿ＤＯＮＥによってクリアされる。２つのフィールドが「１」に設定されるので、ＣＴＲＬ＿ＦＰＧＡユニットは自動的にＤＭＡ書き込み転送をまず実行し、かつ次いでＤＭＡ読み出し転送を実行する。しかし、ＷＡＩＴ＿ＥＶＡＬフィールドは「０」に設定され、ＤＭＡ読み出し転送がＣＬＫ＿ＥＮのアサートの後（かつＤＭＡ書き込み動作の完了の後）で開始する。したがって、図６２において、ＤＭＡ読み出し動作は、ＣＬＫ＿ＥＮ信号（ソフトウェアクロック）が検出され次第、ＤＭＡ書き込み動作の完了後ほとんど直ちに発生する。ＤＭＡ読み出し転送はＥＶＡＬ期間の完了を待機しない。
【０６０５】
タイミング図の開始において、複数のＦＰＧＡ論理デバイスが注意（ａｔｔｅｎｔｉｏｎ）を得ようと競う際にＥＶＡＬ＿ＲＥＱ＿Ｎ信号は競合する。上記のように、ＥＶＡＬ＿ＲＥＱ＿Ｎ（またはＥＶＡＬ＿ＲＥＱ＃）信号は、ＦＰＧＡ論理デバイスのいずれかがこの信号をアサートした場合に、評価サイクルを開始するように使用される。データ転送の終了時に、アドレスポインタ初期化および評価処理を容易にするためのソフトウェアクロックの操作を含む評価サイクルが開始する。
【０６０６】
ＤＯＮＥ信号はまた、ＤＭＡデータ転送期間の終結時に生成され、複数のＬＡＳＴ信号（各ＦＰＧＡ論理デバイスの出力におけるｓｈｉｆｔｉｎおよびｓｈｉｆｔｏｕｔ信号からのもの）がＣＴＲＬ＿ＦＰＧＡユニットに対して生成および提供される際に競合する。すべてのＬＡＳＴ信号が受信および処理される場合、ＤＯＮＥ信号が生成され、かつＤＭＡデータ転送動作が開始し得る。ＥＶＡＬ＿ＲＥＱ＿Ｎ信号およびＤＯＮＥ信号は、以下に記載の方法で、時分割式に同じワイヤを使用する。
【０６０７】
システムは、時間１４０９におけるＷＲ＿ＸＳＦＲ信号によって示されるように自動的にＤＭＡ書き込み転送をまず開始する。一実施形態において、ＷＲ＿ＸＳＦＲ信号の初期部分は、ＰＣＩコントローラ、ＰＣＩ９０８０または９０６０に関連する所定のオーバヘッドを含む。その後、ホスト計算システムはＤＭＡ書き込み動作をローカルバスＬＤ［３１：０］およびＦＰＧＡバスＦＤ［６３：０］を介して、ＦＰＧＡバスＦＤ［６３：０］に結合されたＦＰＧＡ論理デバイスに対して実行する。
【０６０８】
時間１４１２において、ＷＲ＿ＸＳＦＲ信号は非アクティブにされ、ＤＭＡ書き込み動作の完了を示す。ＥＶＡＬ信号は時間１４１２から１４１０の間の所定時間のあいだアクティブにされる。ＥＶＡＬＴＩＭＥの持続期間がプログラム可能であり、かつ８＋Ｘに初期設定される。ここでＸは最長の信号トレースパスから得られる。ＸＳＦＲ＿ＤＯＮＥ信号はまた、短時間アクティブにされ、このＤＭＡ転送動作（現在の動作はＤＭＡ書き込み）の完了を示す。
【０６０９】
また、時間１４１２において、ＥＶＡＬ＿ＲＥＱ＿Ｎ信号間の競合は停止するがＤＯＮＥ信号を伝送するワイヤはここでＥＶＡＬ＿ＲＥＱ＿Ｎ信号をＣＴＲＬ＿ＦＰＧＡユニットに送達する。３クロックサイクルの間、ＥＶＡＬ＿ＲＥＱ＿Ｎ信号は、ＤＯＮＥ信号を伝送するワイヤを介して処理される。３クロックサイクルの後、ＥＶＡＬ＿ＲＥＱ＿Ｎ信号はもはやＦＰＧＡ論理デバイスによって生成されないが、前回にＣＴＲＬ＿ＦＰＧＡユニットに送達されたＥＶＡＬ＿ＲＥＱ＿Ｎ信号が処理され得る。ＥＶＡＬ＿ＲＥＱ＿Ｎ信号がもはやゲート化クロックのためのＦＰＧＡ論理デバイスによって生成されない最大時間はおよそ２３クロックサイクルである。この期間よりも長いＥＶＡＬ＿ＲＥＱ＿Ｎ信号は無視され得る。
【０６１０】
時間１４１３において、時間１４１２（ＤＭＡ書き込み動作の終了時）のおよそ２クロックサイクル後、ＣＴＲＬ＿ＦＰＧＡユニットは書き込みアドレスストローブＷＰＬＸ  ＡＤＳ＿Ｎ信号をＰＣＩコントローラ（例えば、ＰＬＸ  ＰＣＩ９０８０）を送信して、ＤＭＡ読み出し転送を開始する。時間１４１３からおよそ２４クロックサイクルで、ＰＣＩコントローラはＤＭＡ読み出し転送処理を開始し得、かつＤＯＮＥ信号がまた生成される。時間１４１４において、ＰＣＩコントローラによってＤＭＡ読み出し処理の開始の前に、ＲＤ＿ＸＳＦＲ信号がアクティブにされ、ＤＭＡ読み出し転送を使用可能にする。所定のＰＬＸオーバーヘッドデータがまず送信および処理される。時間１４１５において、このオーバーヘッドデータが処理される間、ＤＭＡ読み出しデータは、ＦＰＧＡバスＦＤ［６３：０］およびローカルバスＬＤ［３１：０］に入力される。時間１４１３から２４クロックサイクルの最後かつＤＯＮＥ信号のアクティブ化およびＦＰＧＡ論理デバイスからのＥＶＡＬ＿ＲＥＱ＿Ｎ信号の生成の時間において、ＰＣＩコントローラは、ＤＭＡ読み出しデータを、そのデータをＦＰＧＡバスＦＤ［６３：０］およびローカルバスＬＤ［３１：０］からホストコンピュータシステムへ伝送することによって処理する。
【０６１１】
時間１４１０において、ＤＭＡ読み出しデータは、ＥＶＡＬ信号が非アクティブ化され、かつＥＶＡＬ＿ＤＯＮＥ信号がアクティブ化されてＥＶＡＬサイクルの完了を示す間、処理され続け得る。ＦＰＧＡ論理デバイス間の競合はまた、ＥＶＡＬ＿ＲＥＱ＿Ｎ信号を生成する際に開始する。
【０６１２】
時間１４１７において、時間１４１６におけるＤＭＡ読み出し期間の完了の直前で、ホストコンピュータシステムは、ＰＬＸ割り込みレジスタをポーリングしてＤＭＡサイクルの終了が近いかどうかを判断する。ＰＣＩコントローラは、ＤＭＡデータ転送プロセスを完了するのにどれだけ多くのサイクルが必要であるかを識別する。所定数のサイクルの後、ＰＣＩコントローラは特定ビットをその割り込みレジスタに設定する。ホストコンピュータシステムにおけるＣＰＵは、ＰＣＩコントローラにおいてこの割り込みレジスタをポーリングする。ビットが設定された場合、ＣＰＵはＤＭＡ期間がほとんど終了したことを識別する。ホストシステムにおけるＣＰＵは、割り込みレジスタを常時ポーリングするわけではない。なぜなら、そうするとＰＣＩバスが読み出しサイクルで占有される。したがって、本発明の一実施形態において、ホストコンピュータシステムにおけるＣＰＵは、所定数のサイクルを待った後、割り込みレジスタをポーリングするように  短時間の後、ＲＤ＿ＸＳＦＲが非活性化されると時間１４１６においてＤＭＡ読み出し期間の終了が起こり、ＤＭＡ読み出しデータはもはやＦＰＧＡバスＦＤ［６３：０］上にもローカルバスＬＤ［３１：０］上にもない。さらに時間１４１６においてＸＳＦＲ＿ＤＯＮＥ信号が活性化され、ＤＯＮＥ信号を発生させるためのＬＡＳＴ信号間の競争が開始される。
【０６１３】
時間１４０９におけるＷＲ＿ＸＳＦＲ信号の発生から時間１４１７までのＤＭＡ期間を通して、ホストコンピュータシステム内のＣＰＵはシミュレーションハードウェアシステムにアクセスしない。一実施形態において、この期間は（１）ＰＣＩコントローラ時間２用のオーバーヘッド期間と（２）ＷＲ＿ＸＳＦＲおよびＲＤ＿ＸＳＦＲのワード数と（３）ホストコンピュータシステム（例えばＳｕｎ  ＵＬＴＲＡＳｐａｒｃ）のＰＣＩオーバーヘッドとの合計である。ＤＭＡ期間後の最初のアクセスは、ＣＰＵがＰＣＩコントローラ内のインタラプトレジスタをポーリングする時間１４１９に起こる。
【０６１４】
時間１４１１、すなわち時間１４１６から約３クロックサイクル後に、ＭＥＭ＿ＥＮ信号が活性化されることによりオンボードＳＲＡＭメモリデバイスがイネーブルになり、それにより、ＦＰＧＡ論理デバイスとＳＲＡＭメモリデバイスとの間のメモリアクセスが開始し得る。メモリアクセスは時間１４１９まで続き、一実施形態ではアクセス毎に５クロックサイクルを必要とする。ＤＭＡ読み出し転送が必要でない場合、メモリアクセスは時間１４１１ではなく、より早い時間１４１０に開始し得る。
【０６１５】
メモリアクセスがＦＰＧＡ論理デバイスとＳＲＡＭメモリデバイスとの間でＦＰＧＡバスＦＤ［６３：０］を介して起こる一方、ホストコンピュータシステム内のＣＰＵは、時間１４１８から時間１４２９までＰＣＩコントローラおよびＣＴＲＬ＿ＦＰＧＡユニットと、ローカルバスＬＤ［３１：０］を介して通信し得る。これは、ＣＰＵがＰＣＩコントローラのインタラプトレジスタのポーリングを完了した後に起こる。ＣＰＵは、次のデータ転送の準備として様々なレジスタにデータを書き込む。この期間は、４μｓｅｃよりも長い。メモリアクセスがこの期間よりも短い場合、ＦＰＧＡバスＦＤ［６３：０］にはコンフリクトが起こらない。時間１４２９において、ＸＳＦＲ＿ＤＯＮＥ信号が非活性化される。
【０６１６】
図６３のタイミング図は図６２のものとは幾分異なる。なぜなら図６３では、ＷＡＩＴ＿ＥＶＡＬフィールドが「１」に設定されているからである。換言すると、ＤＭＡ読み出し転送期間はＥＶＡＬ＿ＤＯＮＥ信号が活性化されほとんど完了した後に開始する。ＤＭＡ読み出し転送期間は、ＤＭＡ書き込み動作の完了直後ではなく、ＥＶＡＬ期間がほぼ完了するまで待ってから開始される。ＥＶＡＬ信号は時間１４１２から時間１４１０という所定期間中、活性化される。時間１４１０で、ＥＶＡＬ＿ＤＯＮＥ信号が活性化されることによりＥＶＡＬ期間の完了が示される。
【０６１７】
図６３において、時間１４１２にＤＭＡ書き込み動作が終了してから時間１４２０までの間、ＣＴＲＬ＿ＦＰＧＡユニットはＰＣＩコントローラへの書き込みアドレスストローブ信号ＷＰＬＸ  ＡＤＳ＿Ｎを発生しない。時間１４２０は、ＥＶＡＬ期間の終了よりも約１６クロックサイクル前である。ＸＳＦＲ＿ＤＯＮＥ信号はさらに時間１４２３まで延長される。時間１４２３において、ＸＳＦＲ＿ＤＯＮＥフィールドが設定され、ＤＭＡ読み出しプロセスを開始するためにＷＰＬＸ  ＡＤＳ＿Ｎ信号が発生し得る。
【０６１８】
時間１４２０、すなわちＥＶＡＬ＿ＤＯＮＥ信号の活性化より約１６クロックサイクル前に、ＣＴＲＬ＿ＦＰＧＡユニットが書き込みアドレスストローブＷＰＬＸ  ＡＤＳ＿Ｎ信号をＰＣＩコントローラ（例えば、ＰＬＸ  ＰＣＩ９０８０）に送信することにより、ＤＭＡ読み出し転送を開始する。時間１４２０から約２４クロックサイクル後に、ＰＣＩコントローラがＤＭＡ読み出し転送プロセスを開始し、ＤＯＮＥ信号も発生する。時間１４２１、すなわちＰＣＩコントローラによるＤＭＡ読み出しプロセスの開始前に、ＲＤ＿ＸＳＦＲ信号が活性化され、それによりＤＭＡ読み出し転送がイネーブルになる。いくらかのＰＬＸオーバーヘッドデータがまず送信され処理される。時間１４２２において、このオーバーヘッドデータが処理されている間に、ＤＭＡ読み出しデータがＦＰＧＡバスＦＤ［６３：０］およびローカルバスＬＤ［３１：０］上に載る。２４クロックサイクルが終わる時間１４２４に、ＰＣＩコントローラが、ＦＰＧＡバスＦＤ［６３：０］およびローカルバスＬＤ［３１：０］からホストコンピュータシステムにＤＭＡ読み出しデータを伝送することにより処理する。タイミング図の残りの部分は図６２と同等である。
【０６１９】
このように図６３では図６２よりも後にＲＤ＿ＸＳＦＲ信号が活性化される。図６３において、ＲＤ＿ＸＳＦＲ信号はＥＶＡＬ期間がほぼ完了した後に活性化され、これによりＤＭＡ読み出し動作が遅延される。図６２において、ＲＤ＿ＸＳＦＲ信号は、ＤＭＡ書き込み転送が完了した後にＣＬＫ＿ＥＮ信号が検出されるのを待って活性化される。
【０６２０】
（ＩＸ．  コ−ベリフィケーションシステム）
本発明のコ−ベリフィケーションシステムは、ソフトウェアシミュレーションのフレキシビリティと、ハードウェアモデルを用いることから生じるより高い速度とを設計者に提供することにより、設計／開発サイクルを加速し得る。設計のハードウェア部分およびソフトウェア部分は両方とも、ＡＳＩＣの作成に先立ち、かつエミュレータベースのコ−ベリフィケーションツールに対する制限なくベリファイされ得る。デバッグ機能は向上し、デバッグ時間全体が大幅に低減され得る。
【０６２１】
（テストデバイスとしてＡＳＩＣを用いた従来のコ−ベリフィケーションツール）
図６４は、ビデオ、マルチメディア、イーサネット（登録商標）、またはＳＣＳＩカードなどのＰＣＩアドオンカードとして具現化された典型的な最終的設計を示す。このカード２０００は、他の周辺デバイスとの通信を可能にする直接インターフェースコネクタ２００２を含む。コネクタ２００２は、バス２００１に接続されて、ＶＣＲ、カメラまたはＴＶチューナからのビデオ信号、モニタまたはスピーカへのビデオおよびオーディオ出力、ならびに通信またはディスクドライブインターフェースへの信号を伝送する。ユーザ設計に依存して、当業者は他のインターフェースに対する要件を予測し得る。設計の多くの機能はチップ２００４内にあり、チップ２００４は、バス２００３を介してインターフェースコネクタ２００２と接続され、バス２００７を介してローカルクロック信号を発生する局部発振器２００５と接続され、バス２００８を介してメモリ２００６と接続されている。アドオンカード２０００はさらに、ＰＣＩコネクタ２００９を含み、ＰＣＩバス２０１０と接続されている。
【０６２２】
この設計を図６４に示すアドオンカードとして実施する前に、この設計はテストのためにＡＳＩＣ形態に変更される。従来のハードウェア／ソフトウェアコ−ベリフィケーションツールを図６５に示す。図６５において、ユーザ設計は、テストデバイス（または「ＤＵＴ」）２０２４として示すＡＳＩＣの形態で具現化されている。ＡＳＩＣのインターフェース先として設計された様々なソースからの刺激を得るために、テストデバイス２０２４はターゲットシステム２０２０内に配置される。ターゲットシステム２０２０は、マザーボード上の中央演算システム２０２１といくつかの周辺デバイスとの組み合わせである。ターゲットシステム２０２０は中央演算システム２０２１を含み、中央演算システム２０２１は、ＣＰＵおよびメモリを含む。ターゲットシステム２０２０は、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）またはＳｕｎ  ＭｉｃｒｏＳｙｓｔｅｍのＳｏｌａｒｉｓなどのいくつかのオペレーティングシステム下で動作して複数のアプリケーションを実行させる。当業者には公知であるが、Ｓｕｎ  ＭｉｃｒｏＳｙｓｔｅｍのＳｏｌａｒｉｓは、インターネット、イントラネットおよび企業内コンピューティングをサポートする動作環境兼ソフトウェア製品セットである。Ｓｏｌａｒｉｓ動作環境は、業界標準であるＵＮＩＸ（登録商標）システムＶリリース４に基づいており、配信されたネットワーキング環境でクライアント−サーバアプリケーション用に設計され、相対的に小さいワークグループ用の適切なリソースを提供し、電子商取引に必要なＷｅｂＴｏｎｅを提供する。
【０６２３】
テストデバイス２０２４用のデバイスドライバ２０２２は、中央演算システム２０２１に含まれ、オペレーティングシステム（および任意のアプリケーション）とテストデバイス２０２４との間の通信をイネーブルにする。当業者には公知であるが、デバイスドライバは、コンピュータシステムのハードウェアコンポーネントまたは周辺デバイスを制御する特定のソフトウェアである。デバイスドライバは、デバイスのハードウェアレジスタへのアクセスを担い、しばしば、デバイスによって引き起こされるサービスインタラプトに対するインタラプトハンドラを含む。デバイスドライバはしばしば、オペレーティングシステムカーネルの最低レベルの一部分を形成する。この一部分とは、カーネルが構築されたときにデバイスドライバがリンクされる部分である。いくつかのより最近のシステムは、オペレーティングが実行された後にファイルからインストールされ得るロード可能デバイスドライバを有する。
【０６２４】
テストデバイス２０２４および中央演算システム２０２１は、ＰＣＩバス２０２３に接続されている。ターゲットシステム２０２０内の他の周辺デバイスは、バス２０３４を介してターゲットシステムをネットワーク２０３０に接続するために用いられるイーサネット（登録商標）ＰＣＩアドオンカード２０２５、バス２０３６および２０３５を介してＳＣＳＩドライブ２０２７および２０３１に接続されているＳＣＳＩ  ＰＣＩアドオンカード２０２６、バス２０３２を介してテストデバイス２０２４に接続されたＶＣＲ２０２８（テストデバイス２０２４の設計上必要な場合）、ならびにバス２０３３を介してテストデバイス２０２４に接続されたモニタおよび／またはスピーカ２０２９（テストデバイス２０２４の設計上必要な場合）を含む。当業者には公知であるが、「ＳＣＳＩ」はＳｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｆａｃｅ」の略であり、これは、コンピュータと、ハードディスク、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、プリンタ、スキャナを含む多くのインテリジェントデバイスとの間のシステムレベルのインターフェースの、プロセッサに依存しない標準である。
【０６２５】
このターゲットシステム環境において、テストデバイス２０２４は、中央演算システム（すなわち、オペレーティングシステム、アプリケーション）から周辺デバイスまでの様々な刺激を用いて検査され得る。時間的に問題がなく設計者が単純に成功か失敗かを知るためのテストを求めている場合、このコ−ベリフィケーションツールはそのニーズを満たすように適切に変更されるべきである。しかしほとんどの場合、設計プロジェクトは予算面および製品としてリリースされるまでのスケジュール面で厳しく制限されている。上述したように、この特定のＡＳＩＣベースのコ−ベリフィケーションツールは満足できるものではない。なぜなら、デバッグ機能が存在しないからである。（設計者は、高度な技術なくしては「失敗」したテストの原因を特定することができず、検出された各バグの「修正手段」の数がプロジェクトの開始時に予測できない。従って、スケジュールおよび予算が予測不能となる。）
（テストデバイスとしてエミュレータを用いた従来のコ−ベリフィケーションツール）
図６６は、エミュレータを用いた従来のコ−ベリフィケーションを示す。図６４に示し上述した設定とは異なり、テストデバイスは、ターゲットシステム２０４０といくつかの周辺デバイスとテストワークステーション２０５２とに接続されたエミュレータ２０４８内でプログラムされる。エミュレータ２０４８は、エミュレーションクロック２０６６とエミュレータ内でプログラムされたテストデバイスとを含む。
【０６２６】
エミュレータ２０４８は、ＰＣＩバスブリッジ２０４４とＰＣＩバス２０５７と制御線２０５６とを介してターゲットシステム２０４０に接続されている。ターゲットシステム２０４０は、マザーボード上の中央演算システム２０４１といくつかの周辺デバイスとの組み合わせである。ターゲットシステム２０４０は、中央演算システム２０４１を含み、中央演算システム２０４１は、ＣＰＵおよびメモリを含む。ターゲットシステム２０４０は、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）またはＳｕｎ  ＭｉｃｒｏＳｙｓｔｅｍのＳｏｌａｒｉｓなどのいくつかのオペレーティングシステム下で動作して複数のアプリケーションを実行させる。テストデバイス用のデバイスドライバ２０４２は、中央演算システム２０４１に含まれ、オペレーティングシステム（および任意のアプリケーション）とエミュレータ２０４８内のテストデバイスとの間の通信をイネーブルにする。エミュレータ２０４８および、この演算環境の一部分である他のデバイスと通信するために、中央演算システム２０４１はＰＣＩバス２０４３に接続されている。ターゲットシステム２０４０内の他の周辺デバイスは、バス２０５８を介してターゲットシステムをネットワーク２０４９に接続するために用いられるイーサネット（登録商標）ＰＣＩアドオンカード２０４５、ならびにバス２０６０および２０５９を介してＳＣＳＩドライブ２０４７および２０５０に接続されているＳＣＳＩ  ＰＣＩアドオンカード２０４６を含む。
【０６２７】
エミュレータ２０４８はさらにバス２０６２を介してテストワークステーション２０５２に接続されている。テストワークステーション２０５２は、その機能を果たすためにＣＰＵおよびメモリを含む。テストワークステーション２０５２はさらに、テストケース２０６１および、モデル化されているが物理的にはエミュレータ２０４８に接続されていない他のデバイス用のデバイスモデル２０６８を含み得る。
【０６２８】
最後にエミュレータ２０４８は、バス２０６１を介して、フレームバッファまたはデータストリーム記録／再生システム２０５１などのいくつかの他の周辺デバイスに接続されている。このフレームバッファまたはデータストリーム記録／再生システム２０５１はさらに、バス２０６３を介して通信デバイスまたはチャネル２０５３に接続され得、バス２０６４を介してＶＣＲ２０５４に接続され得、バス２０６５を介してモニタおよび／またはスピーカ２０５５に接続され得る。
【０６２９】
当業者には公知であるが、エミュレーションクロックは、実際のターゲットシステムの速度よりもはるかに遅い速度で動作する。従って、図６６のなかで塗りつぶされている部分はエミュレーション速度で実行され、他の塗りつぶされていない部分は実際のターゲットシステムの速度で実行される。
【０６３０】
上述したように、このエミュレータを用いたコ−ベリフィケーションツールにはいくつかの限界がある。論理アナライザまたはサンプルホールドデバイスを用いてテストデバイスの内部状態を得る場合、設計者は、デバッグ目的のために検査したい関連信号がサンプリング用出力ピン上に存在するように設計をコンパイルしなければならない。設計者が設計の別の部分をデバッグしたい場合、設計者は、その部分が論理アナライザまたはサンプルホールドデバイスによってサンプリングされ得る出力信号を有することを確認しなければならない。あるいは設計者は、これらの信号がサンプリング目的の出力ピン上に提供され得るようにエミュレータ２０４８内の設計をコンパイルしなおさなければならない。このような再コンパイルは数日または数週間かかり得、これは時間が重要である設計／開発スケジュールには長すぎる遅延であり得る。さらに、このコ−ベリフィケーションツールは信号を用いるため、これらの信号をデータに変換するために、または、何らかの信号から信号へのタイミング制御を提供するために、高度な回路が提供されなければならない。さらに、サンプリングすることが望まれる各信号に必要な多くのワイヤ２０６１および２０６２を用いる必要性が、デバッグ設定時の負荷および時間を増加させる。
【０６３１】
（再構成可能演算アレイによるシミュレーション）
本明細書で上述した本発明の単エンジン再構成可能演算（ＲＣＣ）アレイシステムの高レベル構成を、簡単に再検討するために図６７に示す。本発明の一実施形態において、この単エンジンＲＣＣシステムがコ−ベリフィケーションシステムに組み込まれる。
【０６３２】
図６７において、ＲＣＣアレイシステム２０８０は、ＲＣＣ演算システム２０８１と、再構成可能演算（ＲＣＣ）ハードウェアアレイ２０８４と、これらを接続するＰＣＩバス２０８９とを含む。重要なことは、ＲＣＣ演算システム２０８１がユーザ設計のモデル全体をソフトウェア内に含み、ＲＣＣハードウェアアレイ２０８４がユーザ設計のハードウェアモデルを含むことである。ＲＣＣ演算システム２０８１は、ＣＰＵと、メモリと、オペレーティングシステムと、単エンジンＲＣＣシステム２０８０を実行させるために必要なソフトウェアとを含む。ＲＣＣ演算システム２０８１内のソフトウェアモデルおよびＲＣＣハードウェアアレイ２０８４内のハードウェアモデルの漏れのない制御をイネーブルにするために、ソフトウェアクロック２０８２が設けられる。ＲＣＣ演算システム２０８１内にはテストベンチデータ２０８３がさらに格納されている。
【０６３３】
ＲＣＣハードウェアアレイシステム２０８４は、ＰＣＩインターフェース２０８５と、ＲＣＣハードウェアアレイボードセット２０８６と、インターフェース用の様々なバスとを含む。ＲＣＣハードウェアアレイボードセット２０８６は、ユーザ設計のうち少なくともハードウェア内でモデル化された部分（すなわちハードウェアモデル２０８７）とテストベンチデータ用のメモリ２０８８とを含む。一実施形態では、このハードウェアモデルの様々な部分が、構成時間中に、複数の再構成可能論理要素（例えばＦＰＧＡチップ）間に分散される。より多くの再構成可能論理要素またはチップが用いられるにつれて、より多くのボードが必要となり得る。一実施形態では、４つの再構成可能論理要素が単一のボード上に設けられる。他の実施形態では、８つの再構成可能論理要素が単一のボード上に設けられる。４つのチップを有するボード内での再構成可能論理要素の容量および性能は、８つのチップを有するボード内での再構成可能論理要素の容量および性能とは大幅に異なり得る。
【０６３４】
バス２０９０は、ＰＣＩインターフェース２０８５からハードウェアモデル２０８７に、ハードウェアモデル用の様々なクロックを提供する。バス２０９１は、ＰＣＩインターフェース２０８６とハードウェアモデル２０８７との間において、コネクタ２０９３および内部バス２０９４を介して他のＩ／Ｏデータを提供する。バス２０９２は、ＰＣＩインターフェース２０８５とハードウェアモデル２０８７との間のＰＣＩバスとして機能する。さらにテストベンチデータがハードウェアモデル２０８７内のメモリに格納され得る。上述したように、ハードウェアモデル２０８７は、ユーザ設計のハードウェアモデル以外の他の構成および機能であって、ハードウェアモデルがＲＣＣ演算システム２０８１とインターフェースすることを可能にするために必要な構成および機能を含む。
【０６３５】
このＲＣＣシステム２０８０は、単一のワークステーションとして提供されてもよいし、あるいはワークステーションのネットワークに接続されてもよい。後者の場合、各ワークステーションは時間分割ベースでＲＣＣシステム２０８０へのアクセスを提供される。実際、ＲＣＣアレイシステム２０８０は、シミュレーションスケジューラおよび状態スワッピングメカニズムを有するシミュレーションサーバとして作用する。サーバは、ワークステーションの各ユーザが、より高速な加速およびハードウェア状態スワッピングという目的のためにＲＣＣハードウェアアレイ２０８４にアクセスすることを可能にする。加速および状態スワッピングの後、各ユーザは、ユーザ設計をソフトウェア内で局所的にシミュレートする一方で、他のワークステーションの他のユーザにＲＣＣハードウェアアレイ２０８４の制御をリリースすることができる。このネットワークモデルは、以下に述べるコ−ベリフィケーションシステムにも用いられる。
【０６３６】
ＲＣＣアレイシステム２０８０は、設計全体をシミュレートするパワーとフレキシビリティ、選択されたサイクル中に再構成可能演算アレイ内でハードウェアモデルを介してテストポイントの一部を加速するパワーとフレキシビリティ、および設計者の設計の実質的に任意の部分の内部状態情報を随時取得するパワーとフレキシビリティを、設計者に与える。実際、単エンジン再構成可能演算アレイ（ＲＣＣ）システムは、概してハードウェア加速型シミュレータと呼ぶことができ、１回のデバッグセッションで以下のタスクを行うために用いられ得る。（１）シミュレーションのみ、（２）ユーザが随時、設計を開始し、停止し、値をアサートし、内部状態の調査を行い得る、ハードウェア加速を用いたシミュレーション、（３）シミュレーション後の分析、および（４）回路内エミュレーション。ソフトウェアモデルおよびハードウェアモデルは両方とも、ソフトウェアクロックを介して単エンジンの厳しい制御下にあるため、再構成可能演算アレイ内のハードウェアモデルはソフトウェアシミュレーションモデルに緊密に接続されている。このことにより、設計者は、価値のある内部状態情報を得るために、サイクル毎にデバッグすること、および複数のサイクルを介してハードウェアモデルを加速および減速することが可能になる。さらに、このシミュレーションシステムは信号ではなくデータを扱うため、信号からデータへの複雑な変換／タイミング回路が不要である。さらに典型的なエミュレーションシステムとは異なり、設計者が異なるノードセットを検査したいと考えた場合に、再構成可能演算アレイ内のハードウェアモデルを再コンパイルする必要はない。さらなる詳細については、上記を参照されたい。
【０６３７】
（外部Ｉ／Ｏを用いないコ−ベリフィケーションシステム）
本発明の一実施形態は、実際の物理的外部Ｉ／Ｏデバイスおよびターゲットアプリケーションを用いないコ−ベリフィケーションシステムである。従って、本発明の一実施形態によるコ−ベリフィケーションシステムは、ユーザ設計のソフトウェア部分およびハードウェア部分を、実際のターゲットシステムまたはＩ／Ｏデバイスを用いることなくデバッグするために、他の機能と共にＲＣＣシステムを組み込み得る。ターゲットシステムおよび外部Ｉ／Ｏデバイスは、ＲＣＣ演算システム内のソフトウェア内でモデル化される。
【０６３８】
図６８を参照すると、コ−ベリフィケーションシステム２１００は、ＲＣＣ演算システム２１０１と、ＲＣＣハードウェアアレイ２１０８と、これらを接続するＰＣＩバス２１１４とを含む。重要なことは、ＲＣＣ演算システム２１０１がユーザ設計のモデル全体をソフトウェア内に含み、再構成可能演算アレイ２１０８がユーザ設計のハードウェアモデルを含むことである。ＲＣＣ演算システム２１０１は、ＣＰＵと、メモリと、オペレーティングシステムと、単エンジンコ−ベリフィケーションシステム２１００を実行させるために必要なソフトウェアとを含む。ＲＣＣ演算システム２１０１内のソフトウェアモデルおよび再構成可能演算アレイ２１０８内のハードウェアモデルの漏れのない制御をイネーブルにするために、ソフトウェアクロック２１０４が設けられる。ＲＣＣ演算システム２１０１内にはテストケース２１０３がさらに格納されている。
【０６３９】
本発明の一実施形態によると、ＲＣＣ演算システム２１０１はさらに、ターゲットアプリケーション２１０２、ユーザ設計のハードウェアモデルのドライバ２１０５、デバイス（例えば、ビデオカード）のモデルとデバイスモデルのソフトウェア内のドライバ（２１０６で示す）、および別のデバイス（例えば、モニタ）のモデルとこれもまたソフトウェア内にあるデバイスモデルのドライバ（２１０７で示す）を含む。実質的にＲＣＣ演算システム２１０１は、実際のターゲットシステムおよび他のＩ／Ｏデバイスがこの演算環境の一部であることを、ユーザ設計のソフトウェアモデルおよびハードウェアモデルに伝えるために必要なデバイスモデルおよびドライバを、必要な数だけ含む。
【０６４０】
ＲＣＣハードウェアアレイ２１０８は、ＰＣＩインターフェース２１０９と、ＲＣＣハードウェアアレイボードセット２１１０と、インターフェース用の様々なバスとを含む。ＲＣＣハードウェアアレイボードセット２１１０は、ユーザ設計のうち少なくともハードウェア２１１２内でモデル化された部分、およびおよびテストベンチデータ用メモリ２１１３を含む。上述したように、各ボードは、複数の再構成可能論理要素またはチップを含む。
【０６４１】
バス２１１５は、ＰＣＩインターフェース２１０９からハードウェアモデル２１１２にハードウェアモデル用の様々なクロックを提供する。バス２１１６は、ＰＣＩインターフェース２１０９とハードウェアモデル２１１２との間において、コネクタ２１１１および内部バス２１１８を介して他のＩ／Ｏデータを提供する。バス２１１７は、ＰＣＩインターフェース２１０９とハードウェアモデル２１１２との間のＰＣＩバスとして機能する。さらにテストベンチデータが、ハードウェアモデル２１１３内のメモリに格納され得る。上述したように、ハードウェアモデルは、ユーザ設計のハードウェアモデル以外の他の構成および機能であって、ハードウェアモデルがＲＣＣ演算システム２１０１とインターフェースすることを可能にするために必要な構成および機能を含む。
【０６４２】
図６８のコ−ベリフィケーションシステムを従来のエミュレータベースのコ−ベリフィケーションシステムと比較するために、図６６は、ターゲットシステム２０４０、いくつかのＩ／Ｏデバイス（例えば、フレームバッファ、またはデータストリーム記録／再生システム２０５１）およびワークステーション２０５２に接続されたエミュレータ２０４８を示す。このエミュレータ構成は、設計者に、多くの問題と設定上の論点を提示する。エミュレータは、エミュレータ内でモデル化されるユーザ設計の内部状態を測定するために、論理アナライザまたはサンプルホールドデバイスを必要とする。論理アナライザおよびサンプルホールドデバイスは信号を必要とするため、信号からデータへの複雑な変換回路が必要である。さらに、信号から信号への複雑なタイミング制御回路が必要である。エミュレータの内部状態を測定するために用いられる各信号に必要な多くのワイヤが、設定中のユーザにさらに負荷を与える。デバッグセッション中、ユーザは、異なるセットの内部論理回路を検査したいと考える毎にエミュレータを再コンパイルして、論理アナライザまたはサンプルホールドデバイスによる測定および記録用の出力として、適切な信号が論理回路から提供されるようにしなければならない。再コンパイルにかかる長い時間は大きすぎる損失である。
【０６４３】
外部Ｉ／Ｏデバイスが接続されていない本発明のコ−ベリフィケーションシステムでは、ターゲットシステムおよび他のＩ／Ｏデバイスがソフトウェア内でモデル化されており、それにより実際の物理的ターゲットシステムおよびＩ／Ｏデバイスが不要となっている。ＲＣＣ演算システム２１０１はデータを処理するため、信号からデータへの複雑な変換回路も信号から信号へのタイミング制御システムも不要である。ワイヤの数も信号の数と無関係であり、従って設定は比較的単純である。さらに、ユーザ設計のハードウェアモデル内の論理回路の異なる部分をデバッグするのに再コンパイルを必要としない。なぜなら、コ−ベリフィケーションシステムはデータを処理するのであって、信号を処理するのではないからである。ＲＣＣ演算システムは、ソフトウェア制御クロック（すなわち、ソフトウェアクロックおよびクロックエッジ検出回路）を用いてＲＣＣハードウェアアレイを制御するため、ハードウェアモデルの起動および終了は容易になる。ハードウェアモデルからの読み出しも容易である。なぜなら、ユーザ設計全体のモデルがソフトウェア内にありソフトウェアクロックが同期をイネーブルにするからである。従って、ユーザはソフトウェアシミュレーションのみでデバッグを行い、ハードウェア内の設計の一部または全部を加速し、サイクル毎に様々な所望のテストポイントを行い、ソフトウェアおよびハードウェアモデルの内部状態（すなわち、レジスタおよび組み合わせ論理状態）を調査することができる。例えば、ユーザはいくつかのテストベンチデータで設計をシミュレートし、ハードウェアモデルに内部状態情報をダウンロードし、ハードウェアモデルでの様々なテストベンチデータで設計を加速し、得られたハードウェアモデルの内部状態値をレジスタ／組み合わせ論理再発生により調査し、ハードウェアモデルからソフトウェアモデルに値をロードすることができる。そしてユーザは最終的に、ハードウェアモデル加速型プロセスの結果を用いて、ソフトウェア内にあるユーザ設計の他の部分をシミュレートすることができる。
【０６４４】
しかし上述したように、デバッグセッション制御のために、ワークステーションがまだ必要である。ネットワーク構成において、ワークステーションは、デバッグデータに遠隔的にアクセスするために、コ−ベリフィケーションシステムに遠隔的に接続され得る。非ネットワーク構成においては、ワークステーションはコ−ベリフィケーションシステムに局所的に接続され得る。いくつかの実施形態では、ワークステーションは、デバッグデータが局所的にアクセスされ得るようにコ−ベリフィケーションシステムを内部に組み込み得る。
【０６４５】
（外部Ｉ／Ｏを用いたコ−ベリフィケーションシステム）
図６８において、様々なＩ／ＯデバイスおよびターゲットアプリケーションがＲＣＣ演算システム２１０１内でモデル化された。しかし、あまりに多くのＩ／ＯデバイスおよびターゲットアプリケーションがＲＣＣ演算システム２１０１内で実行しすぎると、全体の速度が低下する。ＲＣＣ演算システム２１０１内にＣＰＵが１つだけある場合、すべてのデバイスモデルおよびターゲットアプリケーションからの様々なデータを処理するのに、より長い時間が必要である。データのスループットを高めるために、実際のＩ／Ｏデバイスおよびターゲットアプリケーションが（これらのＩ／Ｏデバイスおよびターゲットアプリケーションのソフトウェアモデルに代えて）物理的にコ−ベリフィケーションシステムに接続され得る。
【０６４６】
本発明の一実施形態は、実際の物理的外部Ｉ／Ｏデバイスおよびターゲットアプリケーションを用い得るコ−ベリフィケーションシステムである。従って、コ−ベリフィケーションシステムは、実際のターゲットシステムおよび／またはＩ／Ｏデバイスを用いながら、ユーザ設計のソフトウェア部分およびハードウェア部分をデバッグするために、他の機能と共にＲＣＣシステムを組み込み得る。テストのために、コ−ベリフィケーションシステムはソフトウェアからのテストベンチデータと外部インターフェース（例えば、ターゲットシステムおよび外部Ｉ／Ｏデバイス）からの刺激を用い得る。テストベンチデータは、ユーザ設計のピン出力にテストデータを提供するためと、ユーザ設計内の内部ノードにテストデータを提供するためとに用いられ得る。外部Ｉ／Ｏデバイス（またはターゲットシステム）からの実際のＩ／Ｏ信号は、ユーザ設計のピン出力のみに向けられ得る。従って、外部インターフェース（例えば、ターゲットシステムまたは外部Ｉ／Ｏデバイス）からのテストデータと、ソフトウェア内のテストベンチプロセスとの間の１つの主要な相違は、テストベンチデータはピン出力および内部ノードに付与される刺激でユーザ設計をテストするために用いられ得るが、ターゲットシステムまたは外部Ｉ／Ｏデバイスからの実際のデータは、そのピン出力（またはピン出力を表すユーザ設計内のノード）を介してユーザ設計のみに付与され得るということである。コ−ベリフィケーションシステムの構造、およびターゲットシステムおよび外部Ｉ／Ｏデバイスに対する構成を以下に述べる。
【０６４７】
本発明の一実施形態によるコ−ベリフィケーションシステムは、図６６のシステム構成に比較すると、波線２０７０内の要素の構造および機能が異なる。換言すると、図６６は波線２０７０内のエミュレータおよびワークステーションを示すが、本発明の一実施形態は図６９に示すコ−ベリフィケーションシステム２１４０（および関連するワークステーション）を波線２０７０内のコ−ベリフィケーションシステム２１４０として含む。
【０６４８】
図６９を参照すると、本発明の一実施形態によるコ−ベリフィケーションシステム構成は、ターゲットシステム２１２０と、コ−ベリフィケーションシステム２１４０と、いくつかのオプションのＩ／Ｏデバイスと、これらを接続する制御／データバス２１３１および２１３２とを含む。ターゲットシステム２１２０は、中央演算システム２１２１を含み、中央演算システム２１２１はＣＰＵおよびメモリを含む。ターゲットシステム２１２０は、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）またはＳｕｎ  ＭｉｃｒｏＳｙｓｔｅｍのＳｏｌａｒｉｓなどのいくつかのオペレーティングシステム下で動作して複数のアプリケーション２１２２およびテストケース２１２３を実行させる。ユーザ設計のハードウェアモデル用デバイスドライバ２１２４は、中央演算システム２１２１内に含まれて、オペレーティングシステム（および任意のアプリケーション）とユーザ設計との間の通信をイネーブルにする。コ−ベリフィケーションシステムおよびこの演算環境の一部である他のデバイスと通信するために、中央演算システム２１２１はＰＣＩバス２１２９に接続されている。ターゲットシステム２１２０内の他の周辺デバイスは、ターゲットシステムをネットワークに接続するために用いられるイーサネット（登録商標）ＰＣＩアドオンカード２１２５、バス２１３０を介してＳＣＳＩドライブ２１２８に接続されているＳＣＳＩ  ＰＣＩアドオンカード２１２６、およびＰＣＩバスブリッジ２１２７を含む。
【０６４９】
コ−ベリフィケーションシステム２１４０は、ＲＣＣ演算システム２１４１、ＲＣＣハードウェアアレイ２１９０、外部Ｉ／Ｏ拡張部という形態の外部インターフェース２１３９、およびＲＣＣ演算システム２１４１とＲＣＣハードウェアアレイ２１９０とを接続するＰＣＩバス２１７１を含む。ＲＣＣ演算システム２１４１は、ＣＰＵと、メモリと、オペレーティングシステムと、単エンジンコ−ベリフィケーションシステム２１４０を実行させるために必要なソフトウェアとを含む。重要なことは、ＲＣＣ演算システム２１４１がユーザ設計全体をソフトウェア内に含み、ＲＣＣハードウェアアレイ２１９０がユーザ設計のハードウェアモデルを含むことである。
【０６５０】
上述したように、コ−ベリフィケーションシステムの単エンジンは、ＲＣＣ演算システム２１４１の主要メモリ内にある主要ソフトウェアカーネルから、パワーとフレキシビリティとを取得し、コ−ベリフィケーションシステム２１４０の動作および実行全体を制御する。テストベンチプロセスがアクティブであり且つ外界からの信号がすべてコ−ベリフィケーションシステムに提示される限り、カーネルはアクティブなテストベンチコンポーネントを評価し、クロックコンポーネントを評価し、クロックエッジを検出してレジスタおよびメモリを更新すると共に組み合わせ論理データを伝搬させ、シミュレーション時間を早める。この主要ソフトウェアカーネルのおかげで、ＲＣＣ演算システム２１４１とＲＣＣハードウェアアレイ２１９０とが緊密に接続されるという特徴が得られる。
【０６５１】
ソフトウェアカーネルは、ＲＣＣハードウェアアレイ２１９０および外部に提供されたソフトウェアクロックソース２１４２からソフトウェアクロック信号を生成する。クロックソース２１４２は、これらのソフトウェアクロックの宛先に依存して、異なる周波数の複数のクロックを生成し得る。概してソフトウェアクロックは、ユーザ設計のハードウェアモデル内のレジスタが、ホールド時間を乱すことなくシステムクロックと同期して評価することを保証する。ソフトウェアモデルは、ハードウェアモデルレジスタ値に影響を与えるソフトウェア内のクロックエッジを検出し得る。従って、クロック検出メカニズムは、主要ソフトウェアモデル内でのクロックエッジ検出がハードウェアモデルでのクロック検出として解釈され得ることを保証する。ソフトウェアクロックおよびクロックエッジ検出論理のより詳細な説明については、図１７〜図１９および本明細書の対応部分を参照されたい。
【０６５２】
本発明の一実施形態によると、ＲＣＣ演算システム２１４１はさらに、複数のＩ／Ｏデバイスの１以上のモデルを含み得る。他の実際の物理的Ｉ／Ｏデバイスがコ−ベリフィケーションシステムに接続され得るという事実にもかかわらずである。例えば、ＲＣＣ演算システム２１４１は、デバイス（例えば、スピーカ）のモデルならびにそのドライバおよびテストベンチデータをソフトウェア（２１４３で示す）に含み得、別のデバイス（例えば、グラフィクスアクセラレータ）のモデルならびにそのドライバおよびテストベンチデータをソフトウェア（２１４４で示す）に含み得る。ユーザは、いずれのデバイス（ならびに、それぞれのドライバおよびテストベンチデータ）をモデル化しＲＣＣ演算システム２１４１に組み込むか、およびいずれのデバイスを実際にコ−ベリフィケーションシステムに接続するかを決定する。
【０６５３】
コ−ベリフィケーションシステムは、（１）ＲＣＣ演算システム２１４１とＲＣＣハードウェアアレイ２１９０との間、および（２）外部インターフェース（ターゲットシステムと外部Ｉ／Ｏデバイスとに接続されている）とＲＣＣハードウェアアレイ２１９０との間、にトラフィック制御を提供する制御論理を含む。いくつかのデータは、ＲＣＣハードウェアアレイ２１９０とＲＣＣ演算システム２１４１との間を通過する。なぜなら、いくつかのＩ／Ｏデバイスは、ＲＣＣ演算システム内でモデル化され得るからである。さらに、ＲＣＣ演算システム２１４１は、ユーザ設計のうち、ＲＣＣハードウェアアレイ２１９０内でモデル化された部分を含むソフトウェア内に設計全体のモデルを有する。その結果、ＲＣＣ演算システム２１４１はさらに、外部インターフェースとＲＣＣハードウェアアレイ２１９０との間を通過するすべてのデータに対するアクセスを有していなければならない。制御論理は、ＲＣＣ演算システム２１４１がこれらのデータに対するアクセスを有することを保証する。制御論理を以下に詳細に述べる。
【０６５４】
ＲＣＣハードウェアアレイ２１９０は、複数のアレイボードを含む。図６９に示す特定の実施形態において、ハードウェアアレイ２１９０は、ボード２１４５〜２１４９を含む。ボード２１４６〜２１４９は、構成されたハードウェアモデルの大部分を含む。ボード２１４５（すなわち、ボードｍ１）は、コ−ベリフィケーションシステムがハードウェアモデルの少なくとも一部分を構成するために用い得る再構成可能演算要素（例えば、ＦＰＧＡチップ）２１５３と、外部インターフェース（ターゲットシステムおよびＩ／Ｏデバイス）およびコ−ベリフィケーションシステム２１４０の間のトラフィックおよびデータを方向づける外部Ｉ／Ｏコントローラ２１５２とを含む。ボード２１４５は、外部Ｉ／Ｏコントローラを介して、ＲＣＣ演算システム２１４１が、外界（すなわち、ターゲットシステムおよびＩ／Ｏデバイス）とＲＣＣハードウェアアレイ２１９０との間で伝送されるすべてのデータに対するアクセスを有することを可能にする。このアクセスは重要である。なぜなら、コ−ベリフィケーションシステム内のＲＣＣ演算システム２１４１は、ソフトウェア内にユーザ設計全体のモデルを含み、ＲＣＣ演算システム２１４１はさらにＲＣＣハードウェアアレイ２１９０の機能を制御することができるからである。
【０６５５】
外部Ｉ／Ｏデバイスからの刺激がハードウェアモデルに提供される場合、ソフトウェアモデルもまた、この刺激に対するアクセスを有していなければならない。これにより、コ−ベリフィケーションシステムのユーザは次のデバッグステップを選択的に制御し得る。次のデバッグステップは、この付与された刺激の結果として設計者の設計の内部状態値を調査することを含み得る。ボードレイアウトおよび相互接続スキームに関して上述したように、最初と最後のボードは、ハードウェアアレイ２１９０内に含まれる。そのため、ボード１（ボード２１４６と示す）およびボード８（ボード２１４９と示す）は８ボードを有するハードウェアアレイ（ボードｍ１を除く）に含まれる。これらのボード２１４５〜２１４９を除くと、チップｍ２を有するボードｍ２（図６９には示さないが図７４に示す）がさらに設けられ得る。このボードｍ２は、外部インターフェースを有していないという点、および追加のボードが必要な場合に拡張のために用いられ得るという点以外は、ボードｍ１と同様である。
【０６５６】
これらのボードの内容を述べる。ボード２１４５（ボードｍ１）は、ＰＣＩコントローラ２１５１、外部Ｉ／Ｏコントローラ２１５２、データチップ（ｍ１）２１５３、メモリ２１５４、およびマルチプレクサ２１５５を含む。一実施形態において、ＰＣＩコントローラはＰＬＸ９０８０である。ＰＣＩコントローラ２１５１は、バス２１７１を介してＲＣＣ演算システム２１４１に接続され、バス２１７２を介して３状態バッファ２１７９に接続されている。
【０６５７】
コ−ベリフィケーションシステム内の、外界（ターゲットシステム２１２０およびＩ／Ｏデバイス）とＲＣＣ演算システム２１４１との間の主要トラフィックコントローラは、外部Ｉ／Ｏコントローラ２１５２（図６９、図７１および図７３では「ＣＲＴＬＸＭ」とも呼ぶ）である。外部Ｉ／Ｏコントローラ２１５２は、ＲＣＣ演算システム２１４１、ＲＣＣハードウェアアレイ内の他のボード２１４６〜２１４９、ターゲットシステム２１２０、および実際の外部Ｉ／Ｏデバイスに接続されている。もちろん、上述したように、ＲＣＣ演算システム２１４１とＲＣＣハードウェアアレイ２１９０との間の主要トラフィックコントローラは常に、各アレイボード２１４６〜２１４９およびＰＣＩコントローラ２１５１内の個々の内部Ｉ／Ｏコントローラ（例えば、Ｉ／Ｏコントローラ２１５６および２１５８）である。一実施形態において、コントローラ２１５６および２１５８などの個々の内部Ｉ／Ｏコントローラは、上述し図２２（ユニット７００）および図５６（ユニット１２００）などの例示的図面に示したＦＰＧＡ  Ｉ／Ｏコントローラである。
【０６５８】
外部Ｉ／Ｏコントローラ２１５２は３状態バッファ２１７９に接続されることにより、外部Ｉ／ＯコントローラがＲＣＣ演算システム２１４１とインターフェースすることを可能にする。一実施形態において、３状態バッファ２１７９は、ある例では、ＲＣＣ演算システム２１４１からのデータがローカルバス２１８０に向かって通過することを可能にする一方で、ローカルバスからのデータがＲＣＣ演算システム２１４１に向かって通過することを妨げ、別の例では、データがローカルバス２１８０からＲＣＣ演算システム２１４１へ通過することを可能にする。
【０６５９】
外部Ｉ／Ｏコントローラ２１５２はさらに、データバス２１７６を介してチップ（ｍ１）２１５３およびメモリ／外部バッファ２１５４に接続されている。一実施形態において、チップ（ｍ１）２１５３は、ユーザ設計のハードウェアモデルの少なくとも一部分（またはユーザ設計が十分小さい場合にはハードウェアモデルの全体）を構成するために用いられ得る、ＦＰＧＡチップなどの再構成可能演算要素である。外部バッファ２１５４は、一実施形態ではＤＲＡＭ  ＤＩＭＭであり、様々な目的のためにチップ２１５３によって用いられ得る。外部バッファ２１５４は、局所的に各再構成可能論理要素（例えば、再構成可能論理要素２１５７）に接続された個々のＳＲＡＭメモリデバイスよりも大きいメモリ容量を提供する。この大きいメモリ容量は、ＲＣＣ演算システムが大容量のデータを格納することを可能にする。大容量のデータとは、テストベンチデータ、マイクロコントローラ用の埋め込みコード（ユーザ設計がマイクロコントローラの場合）、および１メモリデバイス内の大きいルックアップテーブルなどである。外部バッファ２１５４はさらに、上述したようにハードウェアモデリング用に必要なデータを格納するために用いられ得る。実質的に、この外部バッファ２１５４は部分的には、上述し例えば図５６（ＳＲＡＭ１２０５および２１０６）に示した他の高バンクまたは低バンクＳＲＡＭメモリデバイスのように機能するが、より大きなメモリを必要とする。外部バッファ２１５４はさらに、コ−ベリフィケーションシステムによって用いられて、ターゲットシステム２１２０および外部Ｉ／Ｏデバイスから受け取られたデータを格納する。これにより、これらのデータは、後にＲＣＣ演算システム２１４１によって取り出され得る。チップｍ１  ２１５３および外部バッファ２１５４はさらに、本明細書中の「メモリシミュレーション」というセクションに記載するメモリマッピングシステムを含む。
【０６６０】
外部バッファ２１５４内の所望のデータにアクセスするために、チップ２１５３およびＲＣＣ演算システム２１４１の両方が（外部Ｉ／Ｏコントローラ２１５２を介して）所望のデータのアドレスを送達し得る。チップ２１５３はアドレスバス２１８２上にアドレスを提供し、外部Ｉ／Ｏコントローラ２１５２はアドレスバス２１７７上にアドレスを提供する。これらのアドレスバス２１８２および２１７７は、マルチプレクサ２１５５への入力であり、マルチプレクサ２１５５は、外部バッファ２１５４に接続された出力線２１７８上に、選択されたアドレスを提供する。マルチプレクサ２１５５用選択信号は、線２１８１を介して外部Ｉ／Ｏコントローラ２１５２によって提供される。
【０６６１】
外部Ｉ／Ｏコントローラ２１５２はさらに、バス２１８０を介して他のボード２１４６〜２１４９に接続されている。一実施形態において、バス２１８０は、上述し図２２（ローカルバス７０８）および図５６（ローカルバス１２１０）など例示的図面に示したローカルバスである。この実施形態において、僅か５つのボード（ボード２１４５（ボードｍ１）を含む）が用いられる。ボードの実際の数は、ハードウェア内でモデル化されるユーザ設計の複雑さと大きさによって決定される。普通の複雑さを有するユーザ設計のハードウェアモデルは、より複雑なユーザ設計のハードウェアモデルよりも必要とするボードの数が少ない。
【０６６２】
スケーラビリティをイネーブルにするために、ボード２１４６〜２１４９は、ボード間のいくつかの相互接続線を除いて、実質的に互いに同一である。これらの相互接続線は、ユーザ設計のハードウェアモデルのうち、１チップ（例えば、ボード２１４６内のチップ２１５７）内の部分が、同一のユーザ設計内のハードウェアモデルのうち、別のチップ（たとえば、ボード２１４８内のチップ２１６１）内に物理的に設けられた別の部分と通信することを可能にする。このコ−ベリフィケーションシステム用の相互接続構造に関して、図７４、図８および図３６〜図４４ならびに本明細書の対応部分を簡単に参照されたい。
【０６６３】
ボード２１４８は代表的ボードである。ボード２１４８は、この４ボードレイアウト（ボード２１４５（ボードｍｌ）を除く）内の第３のボードである。従って、相互接続線用の適切なターミネーションを必要とするエンドボードではない。ボード２１４８は、内部Ｉ／Ｏコントローラ２１５８、いくつかの再構成可能論理要素（たとえば、ＦＰＧＡチップ）２１５９〜２１６６、高バンクＦＤバス２１６７、低バンクＦＤバス２１６８、高バンクメモリ２１６９、および低バンクメモリ２１７０を含む。上述したように、一実施形態において、内部Ｉ／Ｏコントローラ２１５８は、上述し図２２（ユニット７００）および図５６（ユニット１２００）などの例示的図面に示したＦＰＧＡ  Ｉ／Ｏコントローラである。同様に、高および低バンクメモリデバイス２１６９および２１７０は、上述し例えば図５６（ＳＲＡＭ１２０５および１２０６）に示したＳＲＡＭメモリデバイスである。高および低バンクＦＤバス２１６７および２１６８は、一実施形態においては、上述し図２２（ＦＰＧＡバス７１８および７１９）、図５６（ＦＤバス１２１２および１２１３）、ならびに図５７（ＦＤバス１２８２）などの例示的図面に示したＦＤバスまたはＦＰＧＡバスである。
【０６６４】
コ−ベリフィケーションシステム２１４０をターゲットシステム２１２０および他のＩ／Ｏデバイスに接続するために、外部Ｉ／Ｏ拡張部という形態の外部インターフェース２１３９が設けられる。ターゲットシステム側では、外部Ｉ／Ｏ拡張部２１３９が、二次ＰＣＩバス２１３２および制御線２１３１を介してＰＣＩブリッジ２１２７に接続されている。制御線２１３１はソフトウェアクロックを送達するために用いられる。Ｉ／Ｏデバイス側では、外部Ｉ／Ｏ拡張部２１３９が、ピン出力データ用バス２１３６〜２１３８およびソフトウェアクロック用制御線２１３３〜２１３５を介して様々なＩ／Ｏデバイスに接続されている。Ｉ／Ｏ拡張部２１３９に接続され得るＩ／Ｏデバイスの数は、ユーザによって決定される。いずれにせよ、外部Ｉ／Ｏ拡張部２１３９には、多くのＩ／Ｏデバイスをコ−ベリフィケーションシステム２１４０に接続してデバッグセッションを首尾よく実行させるために必要なデータバスおよびソフトウェアクロック制御線が、必要なだけ設けられる。
【０６６５】
コ−ベリフィケーションシステム２１４０側では、外部Ｉ／Ｏ拡張部２１３９が、データバス２１７５、ソフトウェアクロック制御線２１７４、および走査制御線２１７３を介して外部Ｉ／Ｏコントローラ２１５２に接続される。外界（ターゲットシステム２１２０および外部Ｉ／Ｏデバイス）とコ−ベリフィケーションシステム２１４０との間においてピン出力データを通過させるために、データバス２１７５が用いられる。ＲＣＣ演算システム２１４１から外界へソフトウェアクロックデータを送達するために、ソフトウェアクロック制御線２１７４が用いられる。
【０６６６】
制御線２１７４および２１３１上に存在するソフトウェアクロックは、ＲＣＣ演算システム２１４１内の主要ソフトウェアカーネルによって生成される。ＲＣＣ演算システム２１４１は、ＰＣＩバス２１７１、ＰＣＩコントローラ２１５１、バス２１７１、３状態バッファ２１７９、ローカルバス２１８０、外部Ｉ／Ｏコントローラ２１５２、および制御線２１７４を介して、ソフトウェアクロックを外部Ｉ／Ｏ拡張部２１３９に送達する。外部Ｉ／Ｏ拡張部２１３９から、ソフトウェアクロックがターゲットシステム２１２０への（ＰＣＩブリッジ２１２７を介した）クロック入力として提供され、他の外部Ｉ／Ｏデバイスが制御線２１３３〜２１３５を介して提供される。ソフトウェアクロックは、主要クロックソースとして機能するため、ターゲットシステム２１２０およびＩ／Ｏデバイスはより低速で実行する。しかし、ターゲットシステム２１２０および外部Ｉ／Ｏデバイスに提供されるデータは、ＲＣＣ演算システム２１４１内のソフトウェアモデルおよびＲＣＣハードウェアアレイ２１９０内のハードウェアモデル同様、ソフトウェアクロック速度に同期する。同様に、ターゲットシステム２１２０および外部Ｉ／Ｏデバイスからのデータは、ソフトウェアクロックに同期してコ−ベリフィケーションシステム２１４０に送達される。
【０６６７】
従って、外部インターフェースとコ−ベリフィケーションシステムとの間を通過したＩ／Ｏデータは、ソフトウェアクロックに同期する。実質的に、ソフトウェアクロックは、外部Ｉ／Ｏデバイスおよびターゲットシステムとコ−ベリフィケーションシステムとの間にデータが通過する毎に、外部Ｉ／Ｏデバイスおよびターゲットシステムの動作を、コ−ベリフィケーションシステム（ＲＣＣ演算システムおよびＲＣＣハードウェアアレイ内）の動作に同期させる。データイン動作およびデータアウト動作の両方にソフトウェアクロックが用いられる。データイン動作のためには、ポインタ（後述する）がＲＣＣ演算システム２１４１から外部インターフェースへソフトウェアクロックをラッチすると、他のポインタがこれらのＩ／Ｏデータを外部インターフェースから、ＲＣＣハードウェアアレイ２１９０のハードウェアモデル内の選択された内部ノードへラッチする。これらのポインタは、ソフトウェアクロックが外部インターフェースに送達されるこのサイクル中、これらのＩ／Ｏデータを１つずつラッチする。すべてのデータがラッチされると、ＲＣＣ演算システムが別のソフトウェアクロックを生成し得、所望であれば別のソフトウェアクロックサイクルで再びさらなるデータをラッチする。データアウト動作のためには、ＲＣＣ演算システムが外部インターフェースにソフトウェアクロックを送達し、その後ＲＣＣハードウェアアレイ２１９０内のハードウェアモデルの内部ノードから外部インターフェースへのデータのゲーティングを、ポインタの補助を受けて制御する。ポインタは、内部ノードから外部インターフェースへデータを、ここでも１つずつゲーティングする。さらなるデータが外部インターフェースに送達される必要がある場合、ＲＣＣ演算システムは別のソフトウェアクロックを生成して、外部インターフェースにデータをゲーティングするために、選択されたポインタを活性化することができる。ソフトウェアクロックの生成は厳密に制御され、従って、コ−ベリフィケーションシステムが、コ−ベリフィケーションシステムと外部インターフェースに接続された任意の外部Ｉ／Ｏデバイスとの間でデータ送達とデータ評価を同期させることを可能とする。
【０６６８】
スキャン制御ライン２１７３を使用して、存在し得る任意のデータに対して変換システム２１４０がデータバス２１３２、２１３６、２１３７、および２１３８をスキャンすることを可能にする。スキャン信号をサポートする外部Ｉ／Ｏコントローラ２１５１における論理はポインタ論理である。ここで種々の入力が特定期間のあいだ出力として提供され、その後ＭＯＶＥ信号を介して次の入力に遷移する。この論理は図１１に示されるスキームに類似する。実質的に、スキャン信号はマルチプレクサに対する選択信号のように機能する。ただし、スキャン信号がマルチプレクサへの種々の入力を順繰りに選択する場合を除く。したがって、１期間において、スキャン制御ライン２１７３上のスキャン信号は、ターゲットシステム２１２０から入力され得るデータに対してデータバス２１３２をサンプリングする。次の期間において、スキャン制御ライン２１７３上のスキャン信号は、そこに結合され得る外部Ｉ／Ｏデバイスから入力され得るデータに対してデータバス２１３６をサンプリングする。次の期間において、データバス２１３７がサンプリングされるなどであるので、変換システム２１４０は、ターゲットシステム２１２０または外部Ｉ／Ｏデバイス由来のすべてのピンアウトデータをこのデバッグセッションの間に受信および処理し得る。変換システム２１４０によってデータバス２１３２、２１３６、２１３７、および２１３８をサンプリングすることによって受信されたいずれのデータも外部バッファ２１５４へ外部Ｉ／Ｏコントローラ２１５２を介して伝送される。
【０６６９】
なお、図６９に例示される構成は、ターゲットシステム２１２０が一次ＣＰＵを含み、かつユーザ設計がビデオコントローラ、ネットワークアダプタ、グラフィックスアダプタ、マウス、または他のサポートデバイス、カード、または論理などの所定の周辺デバイスであると仮定する。したがって、ターゲットシステム２１２０は、一次ＰＣＩバス２１２９に結合されたターゲットアプリケーション（オペレーティングシステムを含む）を含み、かつ変換システム２１４０はユーザ設計を含みかつ二次ＰＣＩバス２１３２に結合される。構成は、ユーザ設計の対象に依存してまったく異なり得る。例えば、ユーザ設計がＣＰＵであるとすると、ターゲットアプリケーションは、ターゲットシステム２１２０がもはや中央計算システム２１２１を含まない場合、変換システム２１４０のＲＣＣ計算システム２１４１において実行される。実際に、バス２１３２はここで一次ＰＣＩバスであり、かつバス２１２９は二次ＰＣＩバスであり得る。実質的に、ユーザ設計が中央計算システム２１２１をサポートする周辺デバイスの１つである代わりに、ユーザ設計はここで主計算センタであり、かつ他の周辺デバイスはユーザ設計をサポートしている。
【０６７０】
外部インタフェース（外部Ｉ／Ｏエクスパンダ２１３９）と変換システム２１４０との間でデータを伝送するための制御論理が各ボード２１４５〜２１４９に含まれる。制御論理の一次部分は外部Ｉ／Ｏコントローラ２１５２に含まれるが、他の部分は種々の内部Ｉ／Ｏコントローラ（例えば、２１５６および２１５８）および再構成可能論理素子（例えば、ＦＰＧＡチップ２１５９および２１６５）に含まれる。例示としては、すべてのボードのすべてのチップの同じ繰り返しの論理構造の代わりにこの制御論理の所定部分を示すだけでよい。図６９の点線２１５０内の変換システム２１４０の一部は、制御論理の１サブセットを含む。ここで、この制御論理を図７０〜７３を参照してより詳細に説明する。
【０６７１】
制御論理のこの特定のサブセットにおける構成要素は、外部Ｉ／Ｏコントローラ２１５２、トライステートバッファ２１７９、内部Ｉ／Ｏコントローラ２１５６（ＣＴＲＬ１）、再構成論理素子２１５７（ボード１のチップ０を示すチップ０＿１）、ならびにこれらの構成要素に結合された種々のバスおよび制御ラインを含む。特に、図７０は、データインサイクルに対して使用される制御論理のその部分を示す。ここで外部インタフェース（外部Ｉ／Ｏエクスパンダ２１３９）およびＲＣＣ計算システム２１４１からのデータがＲＣＣハードウェアアレイ２１９０に送達される。図７２はデータインサイクルのタイミング図である。図７１は、データアウトサイクルに対して使用される制御論理のその部分を示す。ここでＲＣＣハードウェアアレイ２１９０からのデータがＲＣＣ計算システム２１４１および外部インタフェース（外部Ｉ／Ｏエクスパンダ２１３９）に送達される。図７３はデータアウトサイクルのタイミング図である。
【０６７２】
（データイン）
本発明の１実施形態によるデータイン制御論理は、ＲＣＣ計算システムまたはＲＣＣハードウェアアレイとの外部インタフェースのいずれかから送達されるデータを処理する役割を担う。データイン制御論理の１つの特定のサブセット２１５０（図６９参照）は、図７０に示され、かつ外部Ｉ／Ｏコントローラ２２００、トライステートバッファ２２０２、内部Ｉ／Ｏコントローラ２２０３、再構成可能論理素子２２０４、およびその間のデータ伝送を可能にする種々のバスおよび制御ラインを含む。外部バッファ２２０１もこのデータイン実施形態のために示す。このサブセットはデータイン動作に対して必要な論理を例示する。ここで外部インタフェースおよびＲＣＣ計算システムからのデータがＲＣＣハードウェアアレイに送達される。図７０のデータイン制御論理および図７２のデータインタイミング図をまとめて説明する。
【０６７３】
本発明のこのデータイン実施形態において２つのタイプのデータサイクル（グローバルサイクルおよびソフトウェア対ハードウェア（Ｓ２Ｈ）サイクル）が使用される。グローバルサイクルは、クロックなどのＲＣＣハードウェアアレイにおけるすべてのチップに向けられたいずれのデータ、リセット、およびＲＣＣハードウェアアレイにおける多くの異なるノードに向けられた所定の他のＳ２Ｈデータに対して使用される。これらの後者の「グローバル」Ｓ２Ｈデータに対して、グローバルサイクルを介してこれらのデータを送信するほうが連続のＳ２Ｈデータよりもより実現可能である。
【０６７４】
ソフトウェア対ハードウェアサイクルを使用して、ＲＣＣ計算システムにおけるテストベンチプロセスからＲＣＣハードウェアアレイへすべてのボードにおいてチップからチップへ順次データを送信する。ユーザ設計のハードウェアモデルは数ボードにわたって分配されるので、テストベンチデータはデータ評価のために各チップに提供されなければならない。したがって、データは、一度に１内部ノードの割合で、各チップにおける各内部ノードに順次送達される。順次送達することで、特定の内部ノードに対して指定されたデータがＲＣＣハードウェアアレイにおけるすべてのチップによって処理されることが可能となる。なぜなら、ハードウェアモデルが複数のチップの間に分配されているからである。
【０６７５】
このデータ評価に対して、変換は２つのアドレス空間（Ｓ２ＨおよびＣＬＫ）を提供する。上記のように、Ｓ２ＨおよびＣＬＫ空間はカーネルからハードウェアモデルへの一次入力である。ハードウェアモデルは、実質的にすべてのレジスタ構成要素およびユーザの回路設計の組み合わせ構成要素を保持する。さらに、ソフトウェアクロックはソフトウェアでモデル化され、かつハードウェアモデルとインタフェースをとるようにＣＬＫ  Ｉ／Ｏアドレス空間において提供される。カーネルはシミュレーション時間を進め、アクティブなテストベンチ構成要素を探し、かつクロック構成要素を評価する。いずれかのクロックエッジがカーネルによって検出された場合、レジスタおよびメモリが更新され、かつ組み合わせ構成要素を介した値が伝播される。したがって、ハードウェアアクセラレーションモードが選択される場合、これらの空間における値のいずれの変化もハードウェアモデルを始動して論理状態を変化させる。
【０６７６】
データ転送の間、ＤＡＴＡ＿ＸＳＦＲ信号は論理１である。この時間の間、ローカルバス２２２２〜２２３０は変換システムによって使用され以下のデータサイクルを用いてデータを伝送する。（１）ＲＣＣ計算システムからＲＣＣハードウェアアレイおよびＣＬＫ空間へのグローバルデータ、（２）外部インタフェースからＲＣＣハードウェアアレイおよび外部バッファへのグローバルデータ、および（３）ＲＣＣ計算システムからＲＣＣハードウェアアレイへのＳ２Ｈデータ（各ボードにおいて一度に１チップの割合）。したがって、最初の２つのデータサイクルはグローバルサイクルの一部であり、かつ最後のデータサイクルはＳ２Ｈサイクルの一部である。
【０６７７】
グローバルデータがＲＣＣ計算システムからＲＣＣハードウェアアレイへ送信されるデータイングローバルサイクルの第１の部分で、外部Ｉ／Ｏコントローラ２２００は、ライン２２５５上でＣＰＵ＿ＩＮ信号を論理「１」に使用可能にする。ライン２２５５はトライステートバッファ２２０２のイネーブル入力に結合される。ライン２２５５上の論理「１」の場合、トライステートバッファ２２０２は、ローカルバス２２２２上のデータがトライステートバッファ２２０２の他方側のローカルバス２２２３〜２２３０を通ることを可能にする。この特定の例において、ローカルバス２２２３、２２２４、２２２５、２２２６、２２２７、２２２８、２２２９、および２２３０は、それぞれＬＤ３、ＬＤ４（外部Ｉ／Ｏコントローラ２２００から）、ＬＤ６（外部Ｉ／Ｏコントローラ２２００から）、ＬＤ１、ＬＤ６、ＬＤ４、ＬＤ５、およびＬＤ７に対応する。
【０６７８】
グローバルデータはこれらのローカルバスラインから内部Ｉ／Ｏコントローラ２２０３におけるバスライン２２３１〜２２３５へ、そして次いでＦＤバスライン２２３６〜２２４０へ伝播する。この例において、ＦＤバスライン２２３６、２２３７、２２３８、２２３９、および２２４０はそれぞれＦＤバスラインＦＤ１、ＦＤ６、ＦＤ４、ＦＤ５、およびＦＤ７に対応する。
【０６７９】
これらのＦＤバスライン２２３６〜２２４０は、再構成可能論理素子２２０４におけるラッチ２２０８〜２２１３への入力に結合される。この例において、再構成可能論理素子はチップ０＿１（すなわち、ボード１におけるチップ０）に対応する。また、ＦＤバスライン２２３６はラッチ２２０８に結合され、ＦＤバスライン２２３７はラッチ２２０９および２２１１に結合され、ＦＤバスライン２２３８はラッチ２２１０に結合され、ＦＤバスライン２２３９はラッチ２２１２に結合され、かつＦＤバスライン２２４０はラッチ２２１３に結合される。
【０６８０】
これらのラッチ２２０８〜２２１３のそれぞれに対するイネーブル入力は、いくつかのグローバルポインタおよびソフトウェア対ハードウェア（Ｓ２Ｈ）ポインタに結合される。ラッチ２２０８〜２２１１へのイネーブル入力はグローバルポインタに結合され、かつラッチ２２１２〜２２１３へのイネーブル入力はＳ２Ｈポインタに結合される。いくつかのグローバルポインタの例はライン２２４１上のＧＬＢ＿ＰＴＲ０、ライン２２４２上のＧＬＢ＿ＰＴＲ１、ライン２２４３上のＧＬＢ＿ＰＴＲ２、およびライン２２４４上のＧＬＢ＿ＰＴＲ３を含む。いくつかのＳ２Ｈポインタの例は、ライン２２４５上のＳ２Ｈ＿ＰＴＲ０およびライン２２４６上のＳ２Ｈ＿ＰＴＲ１を含む。これらのラッチへのイネーブル入力はこれらのポインタに結合されるので、それぞれのラッチは、ユーザ設計のハードウェアモデルにおけるそれらの目的の宛先ノードにデータを適切なポインタ信号なしにはラッチし得ない。
【０６８１】
これらのグローバルおよびＳ２Ｈポインタ信号は、データインポインタ状態マシン２２１４によって出力２２５４上に生成される。データインポインタ状態マシン２２１４は、ライン２２５３上のＤＡＴＡ＿ＸＳＦＲおよびＦ＿ＷＲによって制御される。内部Ｉ／Ｏコントローラ２２０３はＤＡＴＡ＿ＸＳＦＲおよびＦ＿ＷＲをライン２２５３上に生成する。ＤＡＴＡ＿ＸＳＦＲは、ＲＣＣハードウェアアレイとＲＣＣ計算システムまたは外部インタフェースのいずれかとの間のデータ転送が所望の場合はいつでも常に論理「１」である。Ｆ＿ＲＤ信号とは対照的に、Ｆ＿ＷＲ信号は、ＲＣＣハードウェアアレイへの書き込みが所望される場合はいつも論理「１」である。Ｆ＿ＲＤ信号を介する読み出しは、ＲＣＣハードウェアアレイからＲＣＣ計算システムまたは外部インタフェースのいずれかへのデータの送達を必要とする。ＤＡＴＡ＿ＸＳＦＲおよびＦ＿ＷＲ信号の両方が論理「１」である場合、データインポインタ状態マシンは、適切なプログラムされた順序で適切なグローバルまたはＳ２Ｈポインタ信号を生成し得る。
【０６８２】
これらのラッチの出力２２４７〜２２５２は、ユーザ設計のハードウェアモデルにおける種々の内部ノードに結合される。これらの内部ノードのいくつかはユーザ設計の入力ピンアウトに対応する。ユーザ設計は、通常ピンアウトを介してアクセス可能でない他の内部ノードを有するが、これらの非ピンアウト内部ノードには他のデバッグ目的がある。すなわち、ユーザ設計において種々の内部ノード（それらが入力ピンアウトであるかないかにかかわらず）に刺激を印加することを所望する設計者に柔軟性を与えることである。外部インタフェースによってユーザ設計の複雑なハードウェアモデルに印加される刺激に対して、データイン論理および入力ピンアウトに対応するこれらの内部ノードが関係する。例えば、ユーザ設計がＣＲＴＣ６８４５ビデオコントローラである場合、いくつかのピンアウトは以下のとおりであり得る。
【０６８３】
ＬＰＳＴＢ−ライトペンストローブピン
〜ＲＥＳＥＴ−６８４５コントローラをリセットするための低レベル信号
ＲＳ−レジスタ選択
Ｅ−イネーブル
ＣＬＫ−クロック
〜ＣＳ−チップ選択
他の入力ピンアウトはまた、このビデオコントローラにおいて利用可能である。外部へのインタフェースである入力ピンアウトの数に基づいて、ノードの数およびしたがってラッチおよびポインタの数は容易に決定され得る。ＲＣＣハードウェアアレイにおいて構成されるあるハードウェアモデルは、例えば、総数１８０ラッチ（＝３０×６）に対してＧＬＢ＿ＰＴＲ０、ＧＬＢ＿ＰＴＲ１、ＧＬＢ＿ＰＴＲ２、ＧＬＢ＿ＰＴＲ３、Ｓ２Ｈ＿ＰＴＲ０、およびＳ２Ｈ＿ＰＴＲ１のそれぞれに関連する３０の別個のラッチを有し得る。他の設計において、ＧＬＢ＿ＰＴＲ４〜ＧＬＢ＿ＰＴＲ３０などのより多くのグローバルポインタが必要に応じて使用され得る。同様に、Ｓ２Ｈ＿ＰＴＲ２〜Ｓ２Ｈ＿ＰＴＲ３０などのより多くのＳ２Ｈポインタが必要に応じて使用され得る。これらのポインタおよびそれらの対応のラッチは、各ユーザ設計のハードウェアモデルの要件に基づく。
【０６８４】
図７０および７２に戻る。ＦＤバスライン上のデータは、ラッチが適切なグローバルポインタまたはＳ２Ｈポインタ信号を用いて使用可能にされる場合にのみ、これらの内部ノードへ転送される。そうでなければ、これらのノードはＦＤバス上のいずれのデータによっても駆動されない。Ｆ＿ＷＲがＣＰＵ＿ＩＮ＝１期間の前半において論理「１」である場合、ＧＬＢ＿ＰＴＲ０は論理「１」であり、ＦＤ１上のデータを対応の内部ノードへライン２２４７を介して伝送する。使用可能とするためのＧＬＢ＿ＰＴＲ０に依存する他のラッチが存在する場合、これらのラッチはまたデータをそれらの対応する内部ノードにラッチする。ＣＰＵ＿ＩＮ＝１期間の後半において、Ｆ＿ＷＲは再度論理「１」になり、これによりＧＬＢ＿ＰＴＲ１を起動して論理「１」に上げる。これにより、ＦＤ６上のデータは、ライン２２４８に結合された内部ノードへ伝送される。また、これにより、ラッチ２２０５によってライン２２１６にラッチされるべきライン２２２３上にソフトウェアクロック信号を送信し、かつＧＬＢ＿ＰＴＲ１をイネーブルライン２２１５上に送信する。このソフトウェアクロックはターゲットシステムおよび他の外部Ｉ／Ｏデバイスへの外部クロック入力へ送達される。ＧＬＢ＿ＰＴＲ０およびＧＬＢ＿ＰＴＲ１はデータイングローバルサイクルの第１の部分のためにのみ使用されるので、ＣＰＵ＿ＩＮは論理「０」を返し、そしてこれによりＲＣＣ計算システムからＲＣＣハードウェアアレイへのグローバルデータの送達が完了する。
【０６８５】
ここでデータイングローバルサイクルの第２の部分を説明する。ここで外部インタフェースからのグローバルデータはＲＣＣハードウェアおよび外部バッファへ送達される。やはり、ユーザ設計に向けられた、ターゲットシステムまたは外部Ｉ／Ｏデバイスからの種々の入力ピンアウト信号は、ハードウェアモデルおよびソフトウェアモデルへ提供されなければならない。これらのデータは、適切なポインタを使用することによってハードウェアモデルへ送達され、かつ内部ノードへ伝送されるようにラッチされ得る。これらのデータはまた、ＲＣＣ計算システムによって後で取り出すための外部バッファ２２０１にまずそのデータを格納することによってソフトウェアモデルに送達され、ソフトウェアモデルの内部状態を更新する。
【０６８６】
ここでＣＰＵ＿ＩＮは論理「０」であり、かつＥＸＴ＿ＩＮは論理「１」である。したがって、外部Ｉ／Ｏコントローラ２２００におけるトライステートバッファ２２０６は使用可能とされバスライン２２１７および２２１８などのＰＣＩバスライン上にデータを載せる。これらのＰＣＩバスラインはまた、外部バッファ２２０１における格納のためにＦＤバスライン２２１９に結合される。ＥＸＴ＿ＩＮ信号が論理「１」である期間の前半において、ＧＬＢ＿ＰＴＲ２は論理「１」である。これによりデータはＦＤ４上のデータ（バスライン２２１７、２２２４、およびローカルバスライン２２２８（ＬＤ４）を介して）ライン２２４９に結合されたハードウェアモデルにおける内部ノードにラッチされるようにラッチする。
【０６８７】
ＥＸＴ＿ＩＮ信号が論理「１」である期間の後半において、ＧＬＢ＿ＰＴＲ３は論理「１」である。これによりデータはＦＤ６上のデータ（バスライン２２１８、２２２５、およびローカルバスライン２２２７（ＬＤ６）を介して）ライン２２５０に結合されたハードウェアモデルにおける内部ノードにラッチされるようにラッチする。
【０６８８】
上記のように、ターゲットシステムまたはいくつかの他の外部Ｉ／Ｏデバイスからのこれらのデータはまた、ＲＣＣ計算システムによって後で取り出すための外部バッファ２２０１にまずそのデータを格納することによってソフトウェアモデルに送達され、ソフトウェアモデルの内部状態を更新する。バスライン２２１７および２２１８上のデータは、ＦＤバスＦＤ［６３：０］２２１９を介して外部バッファ２２０１へ提供される。各データが外部バッファ２２０１において格納される特定メモリアドレスはメモリアドレスカウンタ２２０７によってバス２２２０を介して外部バッファ２２０１へ提供される。そのような格納を可能にするために、ＷＲ＿ＥＸＴ＿ＢＵＦ信号が外部バッファ２２０１へライン２２２１を介して提供される。外部バッファ２２０１が一杯になる前に、ＲＣＣ計算システムは外部バッファ２２０１の内容を読み出してソフトウェアモデルに対して適切な更新をし得るようにする。ＲＣＣハードウェアアレイにおけるハードウェアモデルの種々の内部ノードへ送達されたいずれのデータによってもおそらくハードウェアモデルになんらかの内部状態変化が生じる。ＲＣＣ計算システムはソフトウェアにおけるユーザ設計全体のモデルを有するので、ハードウェアモデルにおけるこれらの内部状態変化はまた、ソフトウェアモデルにおいて反映されるべきである。これによりデータイングローバルサイクルが終了する。
【０６８９】
ここでＳ２Ｈサイクルを説明する。Ｓ２Ｈサイクルを使用してテストベンチデータをＲＣＣ計算システムからＲＣＣハードウェアアレイへ送達し、そして次いでそのデータを各ボードについて順次１つのチップから次のチップへ移動させる。ＣＰＵ＿ＩＮ信号は論理「１」となり、他方ＥＸＴ＿ＩＮ信号は論理「０」となる。これは、ＲＣＣ計算システムとＲＣＣハードウェアアレイとの間のデータ転送を示す。外部インタフェースは関与しない。ＣＰＵ＿ＩＮ信号はまた、トライステートバッファ２２０２がデータをローカルバス２２２２から内部Ｉ／Ｏコントローラ２２０３へ転送させることを可能にする。
【０６９０】
ＣＰＵ＿ＩＮ＝１期間の開始において、Ｓ２Ｈ＿ＰＴＲ０は論理「１」になる。これは、ＦＤ５上の（ローカルバス２２２２、ローカルバスライン２２２９、バスライン２２３４、およびＦＤバス２２３９を介する）データがライン２２５１に結合されるハードウェアモデルにおける内部ノードにラッチされるようにラッチする。ＣＰＵ＿ＩＮ＝１期間の第２部分において、Ｓ２Ｈ＿ＰＴＲ１は論理「１」となる。これは、ＦＤ７上の（ローカルバス２２２２、ローカルバスライン２２３０、バスライン２２３５、およびＦＤバス２２４０を介する）データがライン２２５２に結合されるハードウェアモデルにおける内部ノードにラッチされるようにラッチする。順次データ評価中に、ＲＣＣ計算システムからのデータは、まずチップｍ１に、次いでチップ０＿１（すなわち、ボード１上のチップ０）、チップ１＿１（すなわち、ボード０上のチップ１）、最後のボードの最後のチップ、チップ７＿８（すなわち、ボード８上のチップ７）まで送達される。チップｍ２が利用可能な場合、データはまた同様にこのチップに転送される。
【０６９１】
このデータ転送の終了時に、ＤＡＴＡ＿ＸＳＦＲは論理「０」に戻る。なお、外部インタフェースからのＩ／Ｏは、グローバルサイクル中にグローバルデータおよびハンドルとして処理される。これでデータイン制御論理およびデータインサイクルの説明を終える。
【０６９２】
（データアウト）
ここで本発明のデータアウト制御論理実施形態を説明する。本発明の実施形態のデータアウト制御論理はＲＣＣハードウェアアレイからＲＣＣ計算システムおよび外部インタフェースへ送達されたデータの処理を担う。刺激（外部またはその他）に応答してデータを処理する経過中、ハードウェアモデルは目的のアプリケーションまたはいくつかのＩ／Ｏデバイスが必要とし得る所定の出力データを生成する。これらの出力データは、別のアプリケーションまたはデバイスがそれ自身の処理のために必要とし得る実体的な（ｓｕｂｓｔａｎｔｉｖｅ）データ、アドレス、制御情報、または他の関連情報であり得る。ＲＣＣ計算システム（ソフトウェアにおいて他の外部Ｉ／Ｏデバイスのモデルを有し得る）、ターゲットシステム、または外部Ｉ／Ｏデバイスへのこれらの出力データは、種々の内部ノード上へ提供される。データイン論理について上記したように、これらの内部ノードのいくつかはユーザ設計の出力ピンアウトに対応する。ユーザ設計は、通常はピンアウトを介しては利用可能でない他の内部ノードを有するが、これらの非ピンアウト内部ノードには他のデバッグ目的がある。すなわち、ユーザ設計において種々の内部ノード（それらが入力ピンアウトであるかないかにかかわらず）に刺激を読み出し、そして分析することを所望する設計者に柔軟性を与えることである。外部インタフェースによってユーザ設計の複雑なハードウェアモデルに印加される刺激に対して、データイン論理および入力ピンアウトに対応するこれらの内部ノードが関係する。
【０６９３】
例えば、ユーザ設計がＣＲＴＣ６８４５ビデオコントローラである場合、いくつかのピンアウトは以下のとおりであり得る。
【０６９４】
ＭＡ０〜ＭＡ１３  メモリアドレス
Ｄ０〜Ｄ７  データバス
ＤＥ  ディスプレイイネーブル
ＣＵＲＳＯＲ  カーソル位置
ＶＳ  垂直同期
ＨＳ  水平同期
他の入力ピンアウトはまたこのビデオコントローラにおいて利用可能である。外部へのインタフェースである入力ピンアウトの数に基づいて、ノードの数およびしたがってゲート論理およびポインタの数は容易に決定され得る。したがって、ビデオコントローラ上の出力ピンアウトＭＡ０〜ＭＡ１３はビデオＲＡＭのためのメモリアドレスを提供する。ＶＳ出力ピンアウトは、垂直同期のための信号を提供し、かつしたがってモニタ上で垂直の再トレース（ｒｅｔｒａｃｅ）を起こす。出力ピンアウトＤ０〜Ｄ７は、ターゲットシステムにおけるＣＰＵによって内部６８４５レジスタにアクセスするための双方向データバスを形成する８つの端子を形成する。これらの出力ピンアウトは、ハードウェアにおける所定の内部ノードに対応する。当然ながら、これらの内部ノードの数および性質はユーザ設計に依存して変化する。
【０６９５】
これらの出力ピンアウト内部ノードからのデータはＲＣＣ計算システムに提供されなければならない。なぜなら、ＲＣＣ計算システムはソフトウェアにおけるユーザ設計全体のモデルを含み、かつハードウェアモデルにおいて発生するイベントはいずれも、対応の変化がなされ得るようにソフトウェアモデルに通信されなければならない。このように、ソフトウェアモデルは、ハードウェアモデルにおける情報と整合する情報を有し得る。したがって、ＲＣＣ計算システムは、ユーザまたは設計者が外部Ｉ／Ｏエクスパンダ（ｅｘｐａｎｄｅｒ）上のポートのうちの１つに実際のデバイスを接続するのではなくソフトウェアにおいてモデル化すると決定したＩ／Ｏデバイスのデバイスモデルを有し得る。例えば、ユーザは、外部Ｉ／Ｏエクスパンダポートのうちの１つにおいて実際のモニタまたはスピーカをプラグするのではなくソフトウェアにおいてモニタまたはスピーカをモデル化するほうがより容易でありかつより有効であると決定し得る。さらに、ハードウェアモデルにおけるこれらの内部ノードからのデータはターゲットシステムおよびいずれの他の外部のＩ／Ｏデバイスに提供されなければならない。これらの出力ピンアウト内部ノードにおけるノードがＲＣＣ計算システムならびにターゲットシステムおよび他の外部Ｉ／Ｏデバイスに送達されるためには、本発明の１実施形態のデータアウト制御論理が変換（ｃｏｎｖｅｒｔｉｆｉｃａｔｉｏｎ）システムにおいて提供される。
【０６９６】
データアウト制御論理は、ＲＣＣハードウェアアレイからＲＣＣ計算システム２１４１および外部インタフェース（外部Ｉ／Ｏエクスパンダ２１３９）へのデータの転送を含むデータアウトサイクルを使用する。図６９において、外部インタフェース（外部Ｉ／Ｏエクスパンダ２１３９）と変換システム２１４０との間でデータを転送するための制御論理が各ボード２１４５〜２１４９にある。制御論理の主部分は、外部Ｉ／Ｏコントローラ２１５２にあるが、他の部分は種々のＩ／Ｏコントローラ（例えば、２１５６および２１５８）および再構成可能論理素子（例えば、ＦＰＧＡチップ２１５９および２１６５）にある。ここでも、例としては、すべてのボードにおけるすべてのチップについての同じ繰り返しの論理構造の代わりにこの制御論理の所定部分を示すだけで十分である。図６９の点線２１５０内の変換システム２１４０の部分は１サブセットの制御論理を含む。ここでこの制御論理を図７１および７３を参照してより詳細に説明する。図７１は、データアウトサイクルのために使用される制御論理の一部を例示する。図７３はデータアウトサイクルのタイミング図である。
【０６９７】
１つの特定のサブセットのデータアウト制御論理は、図７１に示され、かつ外部Ｉ／Ｏコントローラ２３００、トライステートバッファ２３０１、内部Ｉ／Ｏコントローラ２３０２、再構成可能論理素子２３０３、ならびにその間でデータ転送を可能にする種々のバスおよび制御ラインを含む。このサブセットは、データアウト動作のために必要な論理を例示する。ここで、外部インタフェースおよびＲＣＣ計算システムからのデータはＲＣＣハードウェアアレイに送達される。図７１のデータアウト制御論理および図７３のデータアウトタイミング図をまとめて説明する。
【０６９８】
データインサイクルの２つのサイクルタイプとは対照的に、データアウトサイクルは１つだけのタイプのサイクルを含む。データアウト制御論理はＲＣＣハードウェアモデルからのデータが（１）ＲＣＣ計算システム、および次いで（２）ＲＣＣ計算システムおよび（ターゲットシステムおよび外部Ｉ／Ｏデバイスとの）外部インタフェースへ順次送達される。すなわち、データアウトサイクルは、ＲＣＣハードウェアアレイにおけるハードウェアモデルの内部ノードからのデータが第１にＲＣＣ計算システム、そして次いで第２にＲＣＣ計算システムおよび各チップにおける外部インタフェースへ、各ボードにおいて一度に１チップかつ一度に１ボードの割合で、送達されることを必要とする。
【０６９９】
データイン論理と同様に、ポインタを使用して内部ノードからＲＣＣ計算システムおよび外部インタフェースへのデータを選択（またはゲーティング）する。図７１および７３において例示される１実施形態において、データアウトポインタ状態マシン２３１９は、ハードウェア対ソフトウェアデータおよびハードウェア対外部インタフェースデータの両方のためのバス２３５９上の５つのポインタＨ２Ｓ＿ＰＴＲ［４：０］を生成する。データアウトポインタ状態マシン２３１９は、ライン２３５８上のＤＡＴＡ＿ＸＳＦＲおよびＦ＿ＲＤ信号によって制御される。内部Ｉ／Ｏコントローラ２３０２は、ライン２３５８上にＤＡＴＡ＿ＸＳＦＲおよびＦ＿ＲＤ信号を生成する。ＤＡＴＡ＿ＸＳＦＲは、ＲＣＣハードウェアアレイとＲＣＣ計算システムまたは外部インタフェースのいずれかとの間のデータ転送が所望される場合はいつでも常に論理「１」である。Ｆ＿ＷＲ信号とは対照的に、Ｆ＿ＲＤは、ＲＣＣハードウェアアレイからの読み出しが所望される場合はいつでも論理「１」である。ＤＡＴＡ＿ＸＳＦＲおよびＦ＿ＲＤ信号の両方が論理「１」であれば、データポインタ状態マシン２３１９は適切なプログラムされた順序で適切なＨ２Ｓポインタ信号を生成し得る。他の実施形態は、ユーザ設計のために必要に応じてより多くのポインタ（またはより少ないポインタ）を使用し得る。
【０７００】
これらのＨ２Ｓポインタ信号はゲート論理に提供される。ゲート論理への１セットの入力２３５３〜２３５７は、いくつかのＡＮＤゲート２３１４〜２３１８へ向けられる。その他のセットの入力２３４８〜２３５２は、ハードウェアモデルの内部ノードに結合される。したがって、ＡＮＤゲート２３１４は内部ノードからの入力２３４８およびＨ２Ｓ＿ＰＴＲ０からの入力２３５３を有し、ＡＮＤゲート２３１５は内部ノードからの入力２３４９およびＨ２Ｓ＿ＰＴＲ１からの入力２３５４を有し、ＡＮＤゲート２３１６は内部ノードからの入力２３５０およびＨ２Ｓ＿ＰＴＲ２からの入力２３５５を有し、ＡＮＤゲート２３１７は内部ノードからの入力２３５１およびＨ２Ｓ＿ＰＴＲ３からの入力２３５６を有し、かつＡＮＤゲート２３１８は内部ノードからの入力２３５２およびＨ２Ｓ＿ＰＴＲ４からの入力２３５７を有する。適切なＨ２Ｓ＿ＰＴＲポインタなしには、内部ノードはＲＣＣ計算システムまたは外部インタフェースのいずれに対しても駆動されない。
【０７０１】
これらのＡＮＤゲート２３１４〜２３１８のそれぞれの出力２３４３〜２３４７は、ＯＲゲート２３１０〜２３１３に結合される。したがって、ＡＮＤゲート出力２３４３はＯＲゲート２３１０の入力に結合され、ＡＮＤゲート出力２３４４はＯＲゲート２３１１の入力に結合され、ＡＮＤゲート出力２３４５はＯＲゲート２３１１の入力に結合され、ＡＮＤゲート出力２３４６はＯＲゲート２３１２の入力に結合され、かつＡＮＤゲート出力２３４７はＯＲゲート２３１３の入力に結合される。なお、ＡＮＤゲート２３１５の出力２３４４は共有されないＯＲゲートに結合されない。むしろ、出力２３４４はＯＲゲート２３１１に結合される。ＯＲゲート２３１１はまたＡＮＤゲート２３１６の出力２３４５に結合される。ＯＲゲート２３１０〜２３１３へのその他の入力２３６０〜２３６６は、他のＡＮＤゲート（図示せず）（それ自身はほかの内部ノードおよびＨ２Ｓ＿ＰＴＲポインタへ結合される）の出力に結合され得る。これらのＯＲゲートおよびそれらの特定の入力の使用は、ユーザ設計および構成されたハードウェアモデルに基づく。したがって、他の設計において、より多くのポインタが使用され得、かつＡＮＤゲート２３１５からの出力２３４４は、ＯＲゲート２３１１ではない異なるＯＲゲートに結合される。
【０７０２】
ＯＲゲート２３１０〜２３１３の出力２３３９〜２３４２はＦＤバスラインＦＤ０、ＦＤ３、ＦＤ１、およびＦＤ４に結合される。ユーザ設計のこの特定の例では、４つの出力ピンアウト信号だけがＲＣＣ計算システムおよび外部インタフェースに送達され得る。したがって、ＦＤ０はＯＲゲート２３１０の出力に結合され、ＦＤ３はＯＲゲート２３１１の出力に結合され、ＦＤ１はＯＲゲート２３１２の出力に結合され、かつＦＤ４はＯＲゲート２３１３の出力に結合さる。これらのＦＤバスラインは、ローカルバスライン２３３０〜２３３３に内部Ｉ／Ｏコントローラ２３０２における内部ライン２３３４〜２３３８を介して結合される。この実施形態において、ローカルバスライン２３３０はＬＤ０であり、ローカルバスライン２３３１はＬＤ３であり、ローカルバスライン２３３２はＬＤ１であり、かつローカルバスライン２３３３はＬＤ４である。
【０７０３】
これらのローカルバスライン２３３０〜２３３３上のデータがＲＣＣ計算システムに送達されることを可能にするために、これらのローカルバスラインはトライステートバッファ２３０１に結合される。トライステートバッファ２３０１は、その正常状態において、データがローカルバスライン２３３０〜２３３３からローカルバス２３２０へ転送されることを可能にする。対照的に、データインの間、データは、ＣＰＵ＿ＩＮ信号がトライステートバッファ２３０１に提供される場合にのみ、ＲＣＣ計算システムからＲＣＣハードウェアアレイへ転送されることが可能とされる。
【０７０４】
これらのローカルバスライン２３３０〜２３３３上のデータが外部インタフェースに送達されることを可能とするために、ライン２３２１〜２３２４が提供される。ライン２３２１はライン２３３０および外部Ｉ／Ｏコントローラ２３００における所定のラッチ（図示せず）に結合され、ライン２３２３はライン２３３２および外部Ｉ／Ｏコントローラ２３００におけるラッチ２３０５に結合され、かつライン２３２４はライン２３３３および外部Ｉ／Ｏコントローラ２３００におけるラッチ２３０６に結合される。
【０７０５】
これらのラッチ２３０５および２３０６の各出力は、バッファに結合され、そして次いで外部インタフェースに結合される。次いで外部インタフェースはターゲットシステムまたは外部Ｉ／Ｏデバイスの適切な出力ピンアウトに結合される。したがって、ラッチ２３０５の出力はバッファ２３０７およびライン２３２７に結合される。また、ラッチ２３０６の出力は、バッファ２３０８およびライン２３２８に結合される。別のラッチ（図示せず）の別の出力はライン２３２９に結合され得る。この例において、ライン２３２７〜２３２９は、ターゲットシステムまたは所定の外部Ｉ／Ｏデバイスのワイヤ１、ワイヤ４、およびワイヤ３にそれぞれ対応する。最後に、ハードウェアモデルから外部インタフェースへのデータ転送の間に、ユーザ設計のハードウェアモデルは、ライン２３５０に結合された内部ノードがライン２３２９上のワイヤ３に対応し、ライン２３５１に結合された内部ノードがライン２３２７上のワイヤ１に対応し、かつライン２３５２に結合された内部ノードがライン２３２８上のワイヤ４に対応するように構成される。同様に、ワイヤ３はライン２３３１上のＬＤ３に対応し、ワイヤ１はライン２３３２上のＬＤ２に対応し、かつワイヤ４はライン２３３３上のＬＤ４に対応する。
【０７０６】
ルックアップテーブル２３０９はこれらのラッチ２３０５および２３０６への入力が可能なように構成される。ルックアップテーブル２３０９はライン２３６７上のＦ＿ＲＤ信号によって制御される。Ｆ＿ＲＤ信号は、ルックアップテーブルアドレスカウンタ２３０４の動作を起動する。各カウンタの増分ごとに、ポインタはルックアップテーブル２３０９における特定の行を使用可能にする。その特定の行におけるエントリ（またはビット）が論理「１」であるならば、ルックアップテーブル２３０９におけるその特定のエントリに結合されたＬＵＴ出力ラインがその対応のラッチを使用可能にし、そしてデータを外部インタフェースに転送し、そして最終的にはターゲットシステムまたは所定の外部Ｉ／Ｏデバイスにおける所望の宛先に転送される。例えば、ＬＵＴ出力ライン２３２５はラッチ２３０５へのイネーブル入力に結合され、かつＬＵＴ出力ライン２３２６はラッチ２３０６へのイネーブル入力に結合される。
【０７０７】
この例において、ルックアップテーブル２３０９の行０〜３は、チップｍ１における内部ノードのための出力ピンアウトワイヤに対応するラッチを使用可能とするようにプログラムされる。同様に、行４〜６は、チップ０＿１（すなわち、ボード１におけるチップ０）における内部ノードのための出力ピンアウトワイヤに対応するラッチを使用可能とするようにプログラムされる。行４において、ビット３は論理「１」である。行５において、ビット１は論理「１」である。行６において、ビット４は論理「１」である。すべての他のエントリまたはビット位置は論理「０」である。ルックアップテーブルにおける任意の所定のビット位置に対して、１つのエントリだけが論理「１」である。なぜなら、１つの出力ピンアウトワイヤは複数のＩ／Ｏデバイスを駆動できないからである。言い換えると、ハードウェアモデルにおける出力ピンアウト内部ノードはデータを外部インタフェースに結合された１つだけのワイヤにしか提供し得ないからである。
【０７０８】
上記のように、データアウト制御論理は、ＲＣＣハードウェアモデルにおける各チップにおける各再構成可能論理素子におけるデータが（１）ＲＣＣ計算システム、および次いで（２）ＲＣＣ計算システムおよび（ターゲットシステムおよび外部Ｉ／Ｏデバイスとの）外部インタフェース共に順次送達される。ＲＣＣ計算システムはこれらのデータを必要とする。なぜなら、ＲＣＣ計算システムは、ソフトウェアにおけるいくつかのＩ／Ｏデバイスのモデルを有し、かつこれらのモデル化Ｉ／Ｏデバイスのうちの１つを対象とするデータに対して、ＲＣＣ計算システムは、その内部状態がＲＣＣハードウェアアレイにおけるハードウェアモデルの状態と整合するようにそれらをモニタする必要がある。図７１および７３において例示されるこの例において、７つの内部ノードだけが、ＲＣＣ計算システムおよび外部インタフェースへの出力のために駆動され得る。これらの内部ノードのうちの２つはチップｍ１中にあり、かつその他の５つの内部ノードはチップ０＿１（すなわち、ボード１におけるチップ０）中にある。当然ながら、これらおよび他のチップにおける内部ノードが特定のユーザ設計に対して必要であり得るが、図７１および７３はこれら７つのノードのみを示すのみであり得る。
【０７０９】
データ転送の間、ＤＡＴＡ＿ＸＳＦＲ信号は論理「１」である。この時間の間、ローカルバス２３３０〜２３３３は変換システムによって使用され、順次ＲＣＣハードウェアアレイにおける各ボードにおける各チップからＲＣＣ計算システムおよび外部インタフェースの両方へデータを転送する。ＤＡＴＡ＿ＸＳＦＲおよびＦ＿ＲＤ信号は、出力ピンアウト内部ノードのための適切なゲートへの適切なポインタ信号Ｈ２Ｓ＿ＰＴＲ［４：０］を生成するためのデータアウトポインタ状態マシンの動作を制御する。Ｆ＿ＲＤ信号はまた、内部ノードデータから外部インタフェースへの送達のためのルックアップテーブルアドレスカウンタ２３０４を制御する。
【０７１０】
チップｍ１における内部ノードがまず処理され得る。データ転送サイクルの開始時にＦ＿ＲＤが論理「１」へ上がると、チップｍ１におけるＨ２Ｓ＿ＰＴＲ０は論理「１」へ上がる。これにより、Ｈ２Ｓ＿ＰＴＲ０に依存するチップｍ１におけるこれらの内部ノードにおけるデータがＲＣＣ計算システムにトライステートバッファ２３０１およびローカルバス２３２０を介して転送される。ルックアップテーブルアドレスカウンタ２３０４はカウントして、そしてルックアップテーブル２３０９の行０をポイントし、チップｍ１における適切なデータにおいて外部インタフェースにラッチする。Ｆ＿ＲＤ信号は再度論理「１」に上がり、Ｈ２Ｓ＿ＰＴＲ１によって駆動され得る内部ノードでのデータは、ＲＣＣ計算システムおよび外部インタフェースに送達される。Ｈ２Ｓ＿ＰＴＲ１は論理「１」に上がり、そして第２のＦ＿ＲＤ信号に応答して、ルックアップテーブルアドレスカウンタ２３０４はカウントして、そしてルックアップテーブル２３０９の行１をポイントし、チップｍ１における適切なデータにおいて外部インタフェースにラッチする。
【０７１１】
ここで再構成可能論理素子２３０３（すなわち、ボード１におけるチップ０＿１、またはチップ０）における５つの内部ノードが処理され得る。この例において、Ｈ２Ｓ＿ＰＴＲ０およびＨ２Ｓ＿ＰＴＲ１に関連する２つの内部ノードからのデータはＲＣＣ計算システムだけに送達され得る。Ｈ２Ｓ＿ＰＴＲ２、Ｈ２Ｓ＿ＰＴＲ３、およびＨ２Ｓ＿ＰＴＲ４に関連する３つの内部ノードからのデータはＲＣＣ計算システムおよび外部インタフェースに送達され得る。
【０７１２】
Ｆ＿ＲＤが論理「１」に上がると、チップ２３０３におけるＨ２Ｓ＿ＰＴＲ０は論理「１」になる。これにより、Ｈ２Ｓ＿ＰＴＲ０に依存するチップ２３０３におけるこれらの内部ノードにおけるデータはＲＣＣ計算システムへトライステートバッファ２３０１およびローカルバス２３２０を介して転送される。この例において、ライン２３４８に結合された内部ノードはライン２３５３上のＨ２Ｓ＿ＰＴＲ０に依存する。Ｆ＿ＲＤ信号が再度論理「１」になると、Ｈ２Ｓ＿ＰＴＲ１によって駆動される内部ノードでのデータはＲＣＣ計算システムに送達される。ここで、ライン２３４９に結合された内部ノードが影響を受ける。このデータはライン２３３１および２３２２を介してＬＤ３へ転送される。
【０７１３】
Ｆ＿ＲＤ信号が再度論理「１」になると、Ｈ２Ｓ＿ＰＴＲ２は論理「１」となり、かつライン２３５０に結合された内部ノードでのデータはＬＤ３上に提供される。このデータはＲＣＣ計算システムおよび外部インタフェースの両方に提供される。トライステートバッファ２３０１は、データをローカルバス２３２０に、そして次いでＲＣＣ計算システムに転送することを可能にする。外部インタフェースに関して、このデータは、イネーブルＨ２Ｓ＿ＰＴＲ２信号によってライン２３３１および２３２２を介してＬＤ３に提供される。Ｆ＿ＲＤ信号に応答して、ルックアップテーブルアドレスカウンタ２３０４はカウントして、そしてルックアップテーブル２３０９の行４をポイントし、外部インタフェースでライン２３５０からライン２３２９（ワイヤ３）に結合されたこの内部ノードからの適切なデータにおいてラッチする。
【０７１４】
Ｆ＿ＲＤ信号が再度論理「１」になると、Ｈ２Ｓ＿ＰＴＲ３は論理「１」となり、かつライン２３５１に結合された内部ノードでのデータはＬＤ１上に提供される。このデータは、ＲＣＣ計算システムおよび外部インタフェースの両方に提供される。トライステートバッファ２３０１は、データをローカルバス２３２０に、そして次いでＲＣＣ計算システムに転送することを可能にする。外部インタフェースに関して、このデータは、イネーブルＨ２Ｓ＿ＰＴＲ３信号によってライン２３３２および２３２３を介してＬＤ１に提供される。Ｆ＿ＲＤ信号に応答して、ルックアップテーブルアドレスカウンタ２３０４はカウントして、そしてルックアップテーブル２３０９の行５をポイントし、外部インタフェースでライン２３５１からライン２３２７（ワイヤ１）に結合されたこの内部ノードからの適切なデータにおいてラッチする。
【０７１５】
Ｆ＿ＲＤ信号が再度論理「１」になると、Ｈ２Ｓ＿ＰＴＲ４は論理「１」となり、かつライン２３５２に結合された内部ノードでのデータはＬＤ４上に提供される。このデータは、ＲＣＣ計算システムおよび外部インタフェースの両方に提供される。トライステートバッファ２３０１は、データをローカルバス２３２０に、そして次いでＲＣＣ計算システムに転送することを可能にする。外部インタフェースに関して、このデータは、イネーブルＨ２Ｓ＿ＰＴＲ４信号によってライン２３３３および２３２４を介してＬＤ４に提供される。Ｆ＿ＲＤ信号に応答して、ルックアップテーブルアドレスカウンタ２３０４はカウントして、そしてルックアップテーブル２３０９の行６をポイントし、外部インタフェースでライン２３５２からライン２３２８（ワイヤ４）に結合されたこの内部ノードからの適切なデータにおいてラッチする。
【０７１６】
チップｍ１の内部ノードでのデータをまずＲＣＣ計算システムに、そして次いでＲＣＣ計算システムおよび外部インタフェースの両方に転送するこの処理は順次その他のチップについで継続される。第１に、チップｍ１の内部ノードが駆動された。第２に、チップ０＿１（チップ２３０３）の内部ノードが駆動された。次に、チップ１＿１の内部ノードがあれば駆動され得る。この動作は、最後のボードにおける最後のチップにおける最後のノードが駆動されるまで継続する。したがって、チップ７＿８の内部ノードがあれば駆動され得る。最後に、チップｍ２の内部ノードがあれば駆動され得る。
【０７１７】
図７１はチップ２３０３のみにおける内部ノードを駆動するためのデータアウト制御論理を示すが、他のチップはまた、ＲＣＣ計算システムおよび外部インタフェースに駆動される必要のあり得る内部ノードを有する。内部ノードの数にかかわらず、データアウト制御論理はデータを１つのチップにおける内部ノードからＲＣＣ計算システムへ転送し得、そして次いで別のサイクルで、同じチップにおける異なるセットの内部ノードをＲＣＣ計算システムおよび外部インタフェースの共に対して駆動する。次いで、データアウト制御論理は次のチップに移動し、そしてまずＲＣＣ計算システムに対して指定されたデータを転送し、そして次いでＲＣＣ計算システムおよび外部インタフェースの両方に対する外部インタフェースに対して指定されたデータを転送する同じ２ステップ動作を行う。データが外部インタフェースを対象とする場合でさえ、ＲＣＣ計算システムはそのデータを知らなければならない。なぜなら、ＲＣＣ計算システムは、ＲＣＣハードウェアアレイにおけるハードウェアモデルの内部状態情報と整合する内部状態情報を有さなければならないソフトウェアにおけるユーザ設計全体のモデルを有するからである。
【０７１８】
（ボードレイアウト）
ここで、本発明の１実施形態の変換システムのボードレイアウトを図７４を参照して説明する。ボードはＲＣＣハードウェアアレイにおいて設置される。ボードレイアウトは、図８および３６〜４４に例示され、かつ添付の文に記載されるものと同様である。
【０７１９】
１実施形態において、ＲＣＣハードウェアアレイは６つのボードを含む。ボードｍ１はボード１に結合され、かつボード２はボード８に結合される。ボード１、ボード２、ボード３、およびボード８の結合および配置は、図８および３６〜４４を参照して上記された。
【０７２０】
ボードｍ１はチップｍ１を含む。ボードｍ１とその他のボードとの相互接続構造は、チップｍ１がボード１のチップ０、チップ２、チップ４、およびチップ６への南相互接続（Ｓｏｕｔｈ  ｉｎｔｅｒｃｏｎｎｅｃｔ）に結合される。ボードｍ２とその他のボードとの相互接続構造は、チップｍ２がボード８のチップ０、チップ２、チップ４、およびチップ６への南相互接続に結合される。
【０７２１】
（Ｘ．例）
本発明の１実施形態の動作を例示するために、仮想ユーザ回路設計が使用され得る。構造化レジスタ転送レベル（ＲＴＬ）ＨＤＬコードにおいて、ユーザ回路設計の例は以下のとおりである。
【０７２２】
【数７】
2005500625.tif 000023
2005500625.tif 000024
【０７２３】
このコードは図２６において再生される。この回路設計の特定の機能の詳細は本発明を理解するために必要でない。しかし、ユーザがこのＨＤＬコードを生成してシミュレーションのための回路を設計することを読者は理解するべきである。このコードによって表される回路はユーザによって設計されるような所定の関数を実行して入力信号に応答し、そして出力を生成する。
【０７２４】
図２７は、図２６を参照して説明されたＨＤＬコードの回路図を示す。たいていの場合、ユーザはＨＤＬ形態でこの性質を表す前にこの性質の回路図を実際に生成し得る。いくつかの図面（ｓｃｈｅｍａｔｉｃ）キャプチャツールによって、実体回路図が入力可能となり、そして処理後、これらのツールは使用可能なコードを生成する。
【０７２５】
図２８に示すように、シミュレーションシステムは構成要素タイプ分析を実行する。ユーザの特定の回路設計を表すとして図２６に最初に提示されたＨＤＬコードがここで分析された。「ｍｏｄｕｌｅ  ｒｅｇｉｓｔｅｒ（ｃｌｏｃｋ，ｒｅｓｅｔ，ｄ，ｑ）；」で開始し、かつ「ｅｎｄｍｏｄｕｌｅ」で終了し、かつさらに参照番号９００で特定されるコードの最初の数行がレジスタ定義セクションである。
【０７２６】
コードの次の数行（参照番号９０７）は、所定のワイヤ相互接続情報を表す。当業者に公知であるようなＨＤＬにおけるワイヤ変数を使用して、ゲートなどの構造エンティティ（ｅｎｔｉｔｉｅｓ）の間の物理的接続を表す。ＨＤＬはデジタル回路をモデルするために主に使用されるので、ワイヤ変数は必要な変数である。通常は、「ｑ」（例えば、ｑ１、ｑ２、ｑ３）は出力ワイヤラインを表し、かつ「ｄ」（例えば、ｄ１、ｄ２、ｄ３）は入力ワイヤラインを表す。
【０７２７】
参照番号９０８は、テストベンチである「ｓｉｇｉｎ」を示す。レジスタ番号９０９は、テストベンチ入力である「ｓｉｇｏｕｔ」を示す。
【０７２８】
参照番号９０１はレジスタ構成要素Ｓ１、Ｓ２、およびＳ３を示す。参照番号９０２は組み合わせ構成要素Ｓ４、Ｓ５、Ｓ６、およびＳ７を示す。なお、組み合わせ構成要素Ｓ４〜Ｓ７はレジスタ構成要素Ｓ１〜Ｓ３への入力である出力変数ｄ１、ｄ２、およびｄ３を有する。参照番号９０３はクロック構成応訴Ｓ８を示す。
【０７２９】
コードライン番号の次のシリーズはテストベンチ構成要素を示す。参照番号９０４はテストベンチ構成要素（ドライバ）Ｓ９を示す。参照番号９０５はテストベンチ構成要素（初期化）Ｓ１０およびＳ１１を示す。参照番号９０４はテストベンチ構成要素（モニタ）Ｓ１２を示す。
【０７３０】
構成要素タイプ分析は以下のテーブルに要約される。
【０７３１】
【表１５】
2005500625.tif 000025
【０７３２】
構成要素タイプ分析に基づいて、システムは回路全体のためのソフトウェアモデルならびにレジスタおよび組み合わせ構成要素のためのハードウェアモデルを生成する。Ｓ１〜Ｓ３はレジスタ構成要素およびＳ４〜Ｓ７は組み合わせ構成要素である。これらの構成要素はハードウェアにおいてモデル化され、Ｓエミュレーションシステムのユーザがソフトウェアにおける回路全体をシミュレートするか、またはソフトウェアにおいてシミュレートしかつハードウェアにおいて選択的に高速化するかのいずれかを可能にする。いずれの場合も、ユーザはシミュレーションおよびハードウェア高速化モードを支配する。加えて、ユーザは、サイクルごとに開始、停止、値の検査、および入力値のアサートのソフトウェア制御をなおも維持しながらターゲットシステムを用いて回路をエミュレートし得る。
【０７３３】
図２９は、同じ構造化ＲＴＬレベルＨＤＬコードの信号ネットワーク分析を示す。図示されるように、Ｓ８、Ｓ９、Ｓ１０、およびＳ１１は、ソフトウェアにおいてモデル化または提供される。Ｓ９は本質的にｓｉｇｉｎ信号を生成するテストベンチプロセスであり、かつＳ１２は本質的にｓｉｇｏｕｔ信号を受信するテストベンチも似たプロセスである。この例において、Ｓ９はランダムなｓｉｇｉｎを生成して、回路をシミュレートする。しかし、レジスタＳ１〜Ｓ３および組み合わせ構成要素Ｓ４〜Ｓ７はハードウェアおよびソフトウェアにおいてモデル化される。
【０７３４】
ソフトウェア／ハードウェア境界に対して、システムは、ソフトウェアモデルとハードウェアモデルとのインタフェースをとるために使用される種々のレジデンス（ｒｅｓｉｄｅｎｃｅ）信号（すなわち、ｑ１、ｑ２、ｑ３、ＣＬＫ、ｓｉｇｉｎ、ｓｉｇｏｕｔ）のためのメモリ空間を割り当てる。
【０７３５】
【表１６】
2005500625.tif 000026
【０７３６】
図３０は、この回路設計例についてのソフトウェア／ハードウェア分割の結果を示す。図３０は、ソフトウェア／ハードウェア分割のより実現可能な例示である。ソフトウェア側９１０は、ハードウェア側９１２にソフトウェア／ハードウェア境界９１１およびＰＣＩバス９１３を介して結合される。
【０７３７】
ソフトウェア側９１０はソフトウェアカーネルを含み、かつこれに制御される。一般に、カーネルは、Ｓエミュレーションシステムの動作を制御する主制御ループである。任意のテストベンチプロセスがアクティブである限り、カーネルはテストベンチ構成要素を評価し、クロック構成要素を評価し、クロックエッジを検出してレジスタおよびメモリを更新し、組み合わせ論理データを伝送し、かつシミュレーション時間を進める。カーネルはソフト側に常駐するが、動作またはステートメントのいくつかがハードウェアにおいて実行される。なぜなら、ハードウェアモデルがこれらのステートメントおよび動作に対して存在するからである。したがって、ソフトウェアはソフトウェアおよびハードウェアモデルの両方を制御する。
【０７３８】
ソフトウェア側９１０は、Ｓ１〜Ｓ１２を含むユーザの回路のモデル全体を含む。ソフトウェア側のソフトウェア／ハードウェア境界部分はＩ／Ｏバッファまたはアドレス空間Ｓ２Ｈ、ＣＬＫ、Ｈ２Ｓ、およびＲＥＧを含む。なお、ドライバテストベンチプロセスＳ９はＳ２Ｈアドレス空間に結合され、モニタテストベンチプロセスＳ１２はＨ２Ｓアドレス空間に結合され、かつクロック生成器Ｓ８はクロックアドレス空間に結合される。レジスタＳ１〜Ｓ３出力信号ｑ１〜ｑ３はＲＥＧ空間に割り当てられる。
【０７３９】
ハードウェアモデル９１２は組み合わせ構成要素Ｓ４〜Ｓ７のモデルを有し、純粋なハードウェア側に常駐する。ハードウェアモデル９１２のソフトウェア／ハードウェア境界上で、ｓｉｇｏｕｔ、ｓｉｇｉｎ、レジスタ出力ｑ１〜ｑ３、およびソフトウェアクロック９１６が実装される。
【０７４０】
ユーザのカスタム回路設計のモデルに加えて、システムはソフトウェアクロックおよびアドレスポインタを生成する。ソフトウェアクロックはレジスタＳ１〜Ｓ３への入力を可能にするための信号を提供する。上記のように、本発明のソフトウェアクロックは競合（ｒａｃｅ）条件および保持時間超過問題を除く。クロックエッジがソフトウェアにおいて主クロックによって検出されると、検出論理がハードウェアにおける対応の検出論理を起動する。その後、クロックエッジレジスタ９１６は、レジスタへの入力に常駐する任意のデータにおいてゲートへのレジスタイネーブル入力へのイネーブル信号を生成する。
【０７４１】
アドレスポインタ９１４はまた例および概念を目的として示される。アドレスポインタは実際には各ＦＰＧＡチップにおいて実装され、かつデータが選択的および順次その宛先に転送されることを可能にする。
【０７４２】
組み合わせ構成要素Ｓ４〜Ｓ７はまた、レジスタ構成要素Ｓ１〜Ｓ３、ｓｉｇｉｎ、およびｓｉｇｏｕｔに結合される。これらの信号はＩ／Ｏバス９１５上をＰＣＩバス９１３へ／から伝播する。
【０７４３】
マッピング、配置、およびルーティングステップの前の、完全なハードウェアモデルが図３１に示される（アドレスポインタを除く）。システムはまだモデルを特定チップにマッピングしていない。レジスタＳ１〜Ｓ３はＩ／Ｏバスおよび組み合わせ構成要素Ｓ４〜Ｓ６に結合され提供される。ｓｉｇｉｎ、ｓｉｇｏｕｔ、およびソフトウェアクロック９２０はまたモデル化される。
【０７４４】
一旦ハードウェアモデルが決定された場合、次いでシステムはモデルを１つ以上のチップにマッピング、配置、およびルーティングする。この特定の例は実際に１つのＡｌｔｅｒａＦＬＥＸ  １０Ｋチップ上に実装され得るが、例示を目的としてこの例は２つのチップがこのハードウェアモデルを実装するために必要であり得ることを仮定し得る。図３２はこの例についての１つの特定のハードウェアモデル対チップ分割の結果を示す。
【０７４５】
図３２に示される完全なモデル（Ｉ／Ｏおよいクロックエッジレジスタを除く）は、点線で表されたチップ境界を伴う。この結果は、Ｓエミュレーションシステムのコンパイラによって生成され、その後、最終構成ファイルが生成される。したがって、ハードウェアモデルは、ワイヤライン９２１、９２２、および９２３に対する２つのチップ間に少なくとも３つのワイヤを必要とする。これら２つのチップ（チップ１およびチップ２）の間のピン／ワイヤの数を低減するために、別のモデル対チップ分割が生成されるべきか、または多重化方式が使用されるべきかいずれでもよい。
【０７４６】
図３２において示されるこの特定の分割結果を分析すると、これら２つのチップ間のワイヤの数は、ｓｉｇｉｎワイヤライン９２３をチップ２からチップ１へ移動することによって２つに低減され得る。実際に、図３３にこの分割を例示する。図３３における具体的な分割は、ワイヤの数にのみに基づく図３２における分割よりも良好な分割のように見えるが、この例は、Ｓエミュレーションシステムが図３２の分割を選択する前にマッピング、配置、およびルーティング操作が実行されると仮定し得る。図３２の分割結果は構成ファイルを生成するための基礎として使用され得る。
【０７４７】
図３４は、同じ仮定例についての論理パッチ操作を示す。ここで２つのチップにおける最終的に実現されたものが示される。システムは図３２の分割結果を使用して構成ファイルを生成した。しかし、簡単のためアドレスポインタを示さない。２つのＦＰＧＡチップ９３０および９４０が示される。チップ９３０は、特に、ユーザの回路設計の分割された部分、ＴＤＭ部９３１（受信器側）、ソフトウェアクロック９３２、およびＩ／Ｏバス９３３を含む。チップ９４０は、特に、ユーザの回路設計の分割された部分、送信器側のためのＴＤＭ部９４１、ソフトウェアクロック９４２、およびＩ／Ｏバス９４３を含む。ＴＤＭ部９３１および９４１は図９Ａ、９Ｂ、および９Ｃを参照して説明された。
【０７４８】
これらのチップ９３０および９４０は、ハードウェアモデルをまとめて結合する相互接続ワイヤ９４４および９４５を有する。これらの２つの相互接続ワイヤは図８に示す相互接続の一部である。図８を参照すると、１つのそのような相互接続は、チップＦ３２とＦ３３との間に位置する相互接続６１１である。１つの実施形態において、各相互接続に対してワイヤ／ピンの最大数は４４である。図３４において、モデル化された回路はチップ９３０および９４０の間にワイヤ／ピンを２つだけ必要とする。
【０７４９】
これらのチップ９３０および９４０は、バンクバス９５０に結合される。２つのチップだけが実装されるので、両方のチップは同じバンク中にあるか、または各チップは異なるバンク中に常駐する。必要に応じて、片方のチップは１つのバンクバスに結合され、かつ他方のチップは別のバンクバスに結合されて、ＦＰＧＡインタフェースでのスループットがＰＣＩインタフェースでのスループットと同じになることを確実にする。
【０７５０】
本発明の好適な実施形態の上記記載は例示および記載を目的として提示された。本発明を説明し尽くしたわけではなく、開示の形態に厳密に限定されることを意図しない。多くの修正および改変は、当業者に明らかである。本明細書中に記載の用途は、本発明の精神および範囲を逸脱せずに他の用途に置き換えられ得る。したがって、本発明は請求項の範囲にのみ限定されるべきである。
【図面の簡単な説明】
【図１】
図１は、ワークステーション、再構成可能ハードウエアハードウエアエミュレーションモデル、エミュレーションインターフェースおよびＰＣＩバスに結合されたターゲットシステムを含む本発明の１実施形態の高級レベルの概要を示す。
【図２】
図２は、本発明の特定の使用フローチャートを示す。
【図３】
図３は、本発明の１実施形態によるコンパイル時間および走行時間のソフトウエアのコンパイルおよびハードウエア構成の高級レベル模式図を示す。
【図４】
図４は、ソフトウエア／ハードウエアモデルおよびソフトウエアカーネルコードを生成することを含む、コンパイルプロセスのフローチャートを示す。
【図５】
図５は、Ｓエミュレーションシステム全体を制御するソフトウエアカーネルを示す。
【図６】
図６は、マッピング、配置およびルーティングにより、ハードウエアモデルを再構成可能ハードウエアボードにマッピングする方法を示す。
【図７】
図７は、図８に示されるＦＰＧＡアレイの接続性マトリクスを示す。
【図８】
図８は、４×４ＦＰＧＡアレイおよび相互接続の１実施形態を示す。
【図９Ａ】
図９Ａは、時間分割多重化（ＴＤＭ）回路の１実施形態を例示する。この時間分割多重化（ＴＤＭ）回路の１実施形態は、ワイヤのグループが時間多重化の方法にて一緒に結合されることを可能にし、これにより、複数のピンではなく、１つのピンがこのグループのために１つのチップにて用いられ得る。図９Ａは、ピン出力問題の概要を示す。
【図９Ｂ】
図９Ｂは、時間分割多重化（ＴＤＭ）回路の１実施形態を例示する。この時間分割多重化（ＴＤＭ）回路の１実施形態は、ワイヤのグループが時間多重化の方法にて一緒に結合されることを可能にし、これにより、複数のピンではなく、１つのピンがこのグループのために１つのチップにて用いられ得る。図９Ｂは、送信側のＴＤＭ回路を提供する
【図９Ｃ】
図９Ｃは、時間分割多重化（ＴＤＭ）回路の１実施形態を例示する。この時間分割多重化（ＴＤＭ）回路の１実施形態は、ワイヤのグループが時間多重化の方法にて一緒に結合されることを可能にし、これにより、複数のピンではなく、１つのピンがこのグループのために１つのチップにて用いられ得る。図９Ｃは、受信側のＴＤＭ回路を提供することをそれぞれ示す。
【図１０】
図１０は、本発明の１実施形態によってＳエミュレーションシステムアーキテクチャを示す。
【図１１】
図１１は、本発明のアドレスポインタの１実施形態を示す。
【図１２】
図１２は、図１１のアドレスポインタのアドレスポインタ初期化の状態遷移図を示す。
【図１３】
図１３は、アドレスポインタの種々のＭＯＶＥ信号を派生的に生成するＭＯＶＥ信号ジェネレータの１実施形態を示す。
【図１４】
図１４は、各ＦＰＧＡチップの多重化されたアドレスポインタの連鎖（ｃｈａｉｎ）を示す。
【図１５】
図１５は、本発明の１実施形態によって多重化されたクロスチップアドレス連鎖の１実施形態を示す。
【図１６】
図１６は、ソフトウエアクロックの実施およびハードウエアモデルの論理コンポーネントの評価に重要なクロック／データネットワーク解析のフローチャートを示す。
【図１７】
図１７は、本発明の１実施形態によってハードウエアモデルの基本的な構築ブロックを示す。
【図１８Ａ】
図１８Ａは、ラッチおよびフリップフロップを行うレジスタモデル実現を示す。
【図１８Ｂ】
図１８Ｂは、ラッチおよびフリップフロップを行うレジスタモデル実現を示す。
【図１９】
図１９は、本発明の１実施形態によってクロックエッジ検出論理の１実施形態を示す。
【図２０】
図２０は、本発明の１実施形態によって図１９のクロックエッジ検出論理を制御する４状態の有限状態機械を示す。
【図２１】
図２１は、本発明の１実施形態によって相互接続（ＪＴＡＧ、ＦＰＧＡバスおよび各ＦＰＧＡチップ用のグローバル信号指定部）を示す。
【図２２Ａ】
図２２Ａは、ＰＣＩバスとＦＰＧＡアレイとの間のＦＰＧＡコントローラの１実施形態を示す。
【図２２Ｂ】
図２２Ｂは、ＰＣＩバスとＦＰＧＡアレイとの間のＦＰＧＡコントローラの１実施形態を示す。
【図２３Ａ】
図２３Ａは、図２２で説明されたＣＴＲＬ＿ＦＰＧＡユニットおよびデータバッファのより詳細な例示を示す。
【図２３Ｂ】
図２３Ｂは、図２２で説明されたＣＴＲＬ＿ＦＰＧＡユニットおよびデータバッファのより詳細な例示を示す。
【図２４】
図２４は、４×４ＦＰＧＡアレイ、ＦＰＧＡバンクとの関係、および拡張機能を示す。
【図２５】
図２５は、ハードウエア開始方法の１実施形態を示す。
【図２６】
図２６は、モデリングされ、シミュレーションをされるユーザ回路設計の一例についてのＨＤＬコードを示す。
【図２７】
図２７は、図２６のＨＤＬコードの回路設計を象徴的に表す回路図を示す。
【図２８】
図２８は、図２６のＨＤＬコードのコンポーネントタイプ解析を示す。
【図２９】
図２９は、図２６に示されるユーザのカスタム回路設計に基づく構造化されたＲＴＬ  ＨＤＬコードの信号ネットワーク解析を示す。
【図３０】
図３０は、同一の仮想的な例のソフトウエア／ハードウエアパーティション結果を示す。
【図３１】
図３１は、同一の仮想的な例のハードウエアモデルを示す。
【図３２】
図３２は、ユーザのカスタム回路設計の同一の仮想的な例の特定のハードウエアモデル−チップパーティション結果を示す。
【図３３】
図３３は、ユーザのカスタム回路設計の同一の仮想的な例の別のハードウエアモデル−チップパーティション結果を示す。
【図３４】
図３４は、ユーザのカスタム回路設計の同一の仮想的な論理パッチ動作を示す。
【図３５】
図３５（Ａ）〜（Ｄ）は、２つの例によって「ホップ」の原理およびＦＰＧＡボード接続スキームを示す。
【図３６】
図３６は、本発明に用いられるＦＰＧＡチップの概要を示す。
【図３７】
図３７は、ＦＰＧＡチップのＦＰＧＡ相互接続を示す。
【図３８Ａ】
図３８Ａは、本発明の１実施形態によってＦＰＧＡコード接続概念図の側面を示す。
【図３８Ｂ】
図３８Ｂは、本発明の１実施形態によってＦＰＧＡコード接続概念図の側面を示す。
【図３９】
図３９は、本発明の１実施形態によってＦＰＧＡアレイの直接的に隣接する１ホップの６枚ボード相互接続レイアウトを示す。
【図４０Ａ】
図４０Ａは、ＦＰＧＡ内部ボードの相互接続スキームを示す。
【図４０Ｂ】
図４０Ｂは、ＦＰＧＡ内部ボードの相互接続スキームを示す。
【図４１Ａ】
図４１Ａは、ボード相互接続コネクタの上面を示す。
【図４１Ｂ】
図４１Ｂは、ボード相互接続コネクタの上面を示す。
【図４１Ｃ】
図４１Ｃは、ボード相互接続コネクタの上面を示す。
【図４１Ｄ】
図４１Ｄは、ボード相互接続コネクタの上面を示す。
【図４１Ｅ】
図４１Ｅは、ボード相互接続コネクタの上面を示す。
【図４１Ｆ】
図４１Ｆは、ボード相互接続コネクタの上面を示す。
【図４２】
図４２は、代表的なＦＰＧＡボードのオンボードコネクタおよびいくつかのコンポーネントを示す。
【図４３】
図４３は、図４１Ａ〜Ｆおよび図４２のコネクタのレジェンド（ｌｅｇｅｎｄ）を示す。
【図４４】
図４４は、本発明の別の実施形態によるＦＰＧＡアレイの直接的に隣接する１ホップの２枚のボード相互接続レイアウトを示す。
【図４５】
図４５は、本発明の別の実施形態によるマルチプロセッサを備えたワークステーションを示す。
【図４６】
図４６は、複数のユーザが時分割基礎に基づく信号シングルシミュレーション／エミュレーションシステムを共有する本発明の別の実施形態による環境を示す。
【図４７】
図４７は、本発明の１実施形態によるシミュレーションサーバの高級レベル構造を示す。
【図４８】
図４８は、本発明の１実施形態によるシミュレーションサーバのアーキテクチャを示す。
【図４９】
図４９は、シミュレーションサーバのフローチャートを示す。
【図５０】
図５０は、ジョブのスワッピングプロセスのフローチャートを示す。
【図５１】
図５１は、デバイスドライバと再構成可能ハードウエアユニットとの間の信号を示す。
【図５２】
図５２は、優先権の異なるレベルを有する複数のジョブを取り扱うシミュレーションサーバの時分割機能を示す。
【図５３】
図５３は、デバイスドライバと再構成可能ハードウエアユニットとの間で通信ハンドシェイク信号を示す。
【図５４】
図５４は、通信ハンドシェイクプロトコルの状態図を示す。
【図５５】
図５５は、本発明の１実施形態によるシミュレーションサーバのクライアント−サーバモデルの概要を示す。
【図５６】
図５６は、本発明の１実施形態によるメモリマッピングを実施するシミュレーションシステムの高級レベルブロック図を示す。
【図５７】
図５７は、メモリ有限状態機械（ＭＥＭＦＳＭ）の支援コンポーネントおよび各ＦＰＧＡ論理デバイス（ＥＶＡＬＦＳＭｘ）の評価有限状態機械を備えたシミュレーションシステムのメモリマッピングの局面（ａｓｐｅｃｔ）のより詳細なブロック図を示す。
【図５８】
図５８は、本発明の１実施形態によるＣＴＲＬ＿ＦＰＧＡユニットのＭＥＭＦＳＭユニットの有限状態機械の状態図を示す。
【図５９】
図５９は、本発明の１実施形態による各ＦＰＧＡチップの有限状態機械の状態図を示す。
【図６０】
図６０は、メモリ読み出しデータダブルバッファを示す。
【図６１】
図６１は、本発明の１実施形態によるシミュレーション書き込み／読み出しサイクルを示す。
【図６２】
図６２は、ＣＬＫ＿ＥＮ信号後にＤＭＡ読み出し動作が生じる時のシミュレーションデータ転送動作のタイミング図を示す。
【図６３】
図６３は、ＥＶＡＬ期間の終了時近くにＤＭＡ読み出し動作が生じる時のシミュレーションデータ転送動作のタイミング図を示す。
【図６４】
図６４は、ＰＣＩアドオンカードとして実施される典型的なユーザ設計を示す。
【図６５】
図６５は、テスト下のデバイスとしてＡＳＩＣを用いる典型的なハードウエア／ソフトウエアコ−ベリフィケーションシステムを示す。
【図６６】
図６６は、テスト下のデバイスがエミュレータに予めプロミングされる時にエミュレータを用いる典型的なコ−ベリフィケーションシステムを示す。
【図６７】
図６７は、本発明の１実施形態によるシミュレーションシステムを示す。
【図６８】
図６８は、本発明の１実施形態による外部Ｉ／Ｏデバイスを用いないコ−ベリフィケーションシステムを示し、ただしＲＣＣコンピューティングシステムが種々のＩ／Ｏデバイスおよびターゲットシステムのソフトウエアモデルを含む。
【図６９】
図６９は、本発明の別の実施形態による実際の外部Ｉ／Ｏデバイスおよびターゲットシステムを備えたコ−ベリフィケーションシステムを示す。
【図７０】
図７０は、本発明の１実施形態による制御論理のデータイン部のより詳細な論理図を示す。
【図７１】
図７１は、本発明の１実施形態による制御論理のデータアウト部のより詳細な論理図を示す。
【図７２】
図７２は、制御論理のデータイン部のタイミング図を示す。
【図７３】
図７３は、制御論理のデータアウト部のタイミング図を示す。
【図７４】
図７４は、本発明の１実施形態によるＲＣＣハードウエアレイのボードレイアウトを示す。
【図７５Ａ】
図７５Ａは、保持時間およびクロックグリッチ問題を説明するために用いられる例示的なシフトレジスタ回路を示す。
【図７５Ｂ】
図７５Ｂは、保持時間違反を例示するために図７５Ａに示されたシフトレジスタ回路のタイミング図を示す。
【図７６Ａ】
図７６Ａは、複数のＦＰＧＡチップを配置した図７５Ａの同一のシフトレジスタ回路を示す。
【図７６Ｂ】
図７６Ｂは、保持時間を例示するために図７６Ａに示されたシフトレジスタ回路のタイミング図を示す。
【図７７Ａ】
図７７Ａは、クロックグリッチ問題を例示するように用いられる例示的な論理回路を示す。
【図７７Ｂ】
図７７Ｂは、クロックグリッチ問題を例示するための図７７Ａの論理回路のタイミング図を示す。
【図７８】
図７８は、保持時間違反問題を解決する従来技術のタイミング調整技術を示す。
【図７９】
図７９は、保持時間違反問題を解決する従来技術のタイミング合成技術を示す。
【図８０Ａ】
本発明の１実施形態により、図８０Ａは、元来のラッチを示す。
【図８０Ｂ】
本発明の１実施形態により、図８０Ｂは、タイミング無関係でかつグリッチなしラッチを示す。
【図８１Ａ】
本発明の１実施形態により、図８１Ａは、元来設計フリップフロップを示す。
【図８１Ｂ】
本発明の１実施形態により、図８１Ｂは、タイミング無関係でかつグリッチなしの設計タイプのフリップフロップを示す。
【図８２】
図８２は、本発明の１実施形態によってタイミング無関係でかつグリッチなしの設計タイプのフリップフロップのトリガ機構のタイミング図を示す。
【図１】
2005500625.tif 000027
【図２】
2005500625.tif 000028
【図３】
2005500625.tif 000029
【図４】
2005500625.tif 000030
【図５】
2005500625.tif 000031
【図６】
2005500625.tif 000032
【図８】
2005500625.tif 000033
【図９Ａ】
2005500625.tif 000034
【図９Ｂ】
2005500625.tif 000035
【図９Ｃ】
2005500625.tif 000036
【図１０】
2005500625.tif 000037
【図１１】
2005500625.tif 000038
【図１２】
2005500625.tif 000039
【図１３】
2005500625.tif 000040
【図１４】
2005500625.tif 000041
【図１５】
2005500625.tif 000042
【図１６】
2005500625.tif 000043
【図１７】
2005500625.tif 000044
【図１８Ａ】
2005500625.tif 000045
【図１８Ｂ】
2005500625.tif 000046
【図１９】
2005500625.tif 000047
【図２０】
2005500625.tif 000048
【図２１】
2005500625.tif 000049
【図２２Ａ】
2005500625.tif 000050
【図２２Ｂ】
2005500625.tif 000051
【図２３Ａ】
2005500625.tif 000052
【図２３Ｂ】
2005500625.tif 000053
【図２４】
2005500625.tif 000054
【図２５】
2005500625.tif 000055
【図２７】
2005500625.tif 000056
【図２８】
2005500625.tif 000057
【図２９】
2005500625.tif 000058
【図３０】
2005500625.tif 000059
【図３１】
2005500625.tif 000060
【図３２】
2005500625.tif 000061
【図３３】
2005500625.tif 000062
【図３４】
2005500625.tif 000063
【図３６】
2005500625.tif 000064
【図３７】
2005500625.tif 000065
【図３８Ａ】
2005500625.tif 000066
【図３８Ｂ】
2005500625.tif 000067
【図３９】
2005500625.tif 000068
【図４０Ａ】
2005500625.tif 000069
【図４０Ｂ】
2005500625.tif 000070
【図４１Ａ】
2005500625.tif 000071
【図４１Ｂ】
2005500625.tif 000072
【図４１Ｃ】
2005500625.tif 000073
【図４１Ｄ】
2005500625.tif 000074
【図４１Ｅ】
2005500625.tif 000075
【図４１Ｆ】
2005500625.tif 000076
【図４３】
2005500625.tif 000077
【図４４】
2005500625.tif 000078
【図４５】
2005500625.tif 000079
【図４６】
2005500625.tif 000080
【図４７】
2005500625.tif 000081
【図４８】
2005500625.tif 000082
【図４９】
2005500625.tif 000083
【図５０】
2005500625.tif 000084
【図５１】
2005500625.tif 000085
【図５２】
2005500625.tif 000086
【図５３】
2005500625.tif 000087
【図５４】
2005500625.tif 000088
【図５５】
2005500625.tif 000089
【図５６】
2005500625.tif 000090
【図５７】
2005500625.tif 000091
【図５８】
2005500625.tif 000092
【図５９】
2005500625.tif 000093
【図６０】
2005500625.tif 000094
【図６１】
2005500625.tif 000095
【図６２】
2005500625.tif 000096
【図６３】
2005500625.tif 000097
【図６４】
2005500625.tif 000098
【図６５】
2005500625.tif 000099
【図６６】
2005500625.tif 000100
【図６７】
2005500625.tif 000101
【図６８】
2005500625.tif 000102
【図６９】
2005500625.tif 000103
【図７０】
2005500625.tif 000104
【図７１】
2005500625.tif 000105
【図７２】
2005500625.tif 000106
【図７３】
2005500625.tif 000107
【図７４】
2005500625.tif 000108
【図７５Ａ】
2005500625.tif 000109
【図７５Ｂ】
2005500625.tif 000110
【図７６Ａ】
2005500625.tif 000111
【図７６Ｂ】
2005500625.tif 000112
【図７７Ａ】
2005500625.tif 000113
【図７７Ｂ】
2005500625.tif 000114
【図７８】
2005500625.tif 000115
【図７９】
2005500625.tif 000116
【図８０Ａ】
2005500625.tif 000117
【図８０Ｂ】
2005500625.tif 000118
【図８１Ａ】
2005500625.tif 000119
【図８１Ｂ】
2005500625.tif 000120
【図８２】
2005500625.tif 000121
【国際公開パンフレット】
2005500625.tif 000122
2005500625.tif 000123
2005500625.tif 000124
2005500625.tif 000125
2005500625.tif 000126
2005500625.tif 000127
2005500625.tif 000128
2005500625.tif 000129
2005500625.tif 000130
2005500625.tif 000131
2005500625.tif 000132
2005500625.tif 000133
2005500625.tif 000134
2005500625.tif 000135
2005500625.tif 000136
2005500625.tif 000137
2005500625.tif 000138
2005500625.tif 000139
2005500625.tif 000140
2005500625.tif 000141
2005500625.tif 000142
2005500625.tif 000143
2005500625.tif 000144
2005500625.tif 000145
2005500625.tif 000146
2005500625.tif 000147
2005500625.tif 000148
2005500625.tif 000149
2005500625.tif 000150
2005500625.tif 000151
2005500625.tif 000152
2005500625.tif 000153
2005500625.tif 000154
2005500625.tif 000155
2005500625.tif 000156
2005500625.tif 000157
2005500625.tif 000158
2005500625.tif 000159
2005500625.tif 000160
2005500625.tif 000161
2005500625.tif 000162
2005500625.tif 000163
2005500625.tif 000164
2005500625.tif 000165
2005500625.tif 000166
2005500625.tif 000167
2005500625.tif 000168
2005500625.tif 000169
2005500625.tif 000170
2005500625.tif 000171
2005500625.tif 000172
2005500625.tif 000173
2005500625.tif 000174
2005500625.tif 000175
2005500625.tif 000176
2005500625.tif 000177
2005500625.tif 000178
2005500625.tif 000179
2005500625.tif 000180
2005500625.tif 000181
2005500625.tif 000182
2005500625.tif 000183
2005500625.tif 000184
2005500625.tif 000185
2005500625.tif 000186
2005500625.tif 000187
2005500625.tif 000188
2005500625.tif 000189
2005500625.tif 000190
2005500625.tif 000191
2005500625.tif 000192
2005500625.tif 000193
2005500625.tif 000194
2005500625.tif 000195
2005500625.tif 000196
2005500625.tif 000197
2005500625.tif 000198
2005500625.tif 000199
2005500625.tif 000200
2005500625.tif 000201
2005500625.tif 000202
2005500625.tif 000203
2005500625.tif 000204
2005500625.tif 000205
2005500625.tif 000206
2005500625.tif 000207
2005500625.tif 000208
2005500625.tif 000209
2005500625.tif 000210
2005500625.tif 000211
2005500625.tif 000212
2005500625.tif 000213
2005500625.tif 000214
2005500625.tif 000215
2005500625.tif 000216
2005500625.tif 000217
2005500625.tif 000218
2005500625.tif 000219
2005500625.tif 000220
2005500625.tif 000221
2005500625.tif 000222
2005500625.tif 000223
2005500625.tif 000224
2005500625.tif 000225
2005500625.tif 000226
2005500625.tif 000227
2005500625.tif 000228
2005500625.tif 000229
2005500625.tif 000230
2005500625.tif 000231
2005500625.tif 000232
2005500625.tif 000233
2005500625.tif 000234
2005500625.tif 000235
2005500625.tif 000236
2005500625.tif 000237
2005500625.tif 000238
2005500625.tif 000239
2005500625.tif 000240
2005500625.tif 000241
2005500625.tif 000242
2005500625.tif 000243
2005500625.tif 000244
2005500625.tif 000245
2005500625.tif 000246
2005500625.tif 000247
2005500625.tif 000248
2005500625.tif 000249
2005500625.tif 000250
2005500625.tif 000251
2005500625.tif 000252
2005500625.tif 000253
2005500625.tif 000254
2005500625.tif 000255
2005500625.tif 000256
2005500625.tif 000257
2005500625.tif 000258
2005500625.tif 000259
2005500625.tif 000260
2005500625.tif 000261
2005500625.tif 000262
2005500625.tif 000263
2005500625.tif 000264
2005500625.tif 000265
2005500625.tif 000266
2005500625.tif 000267
2005500625.tif 000268
2005500625.tif 000269
2005500625.tif 000270
2005500625.tif 000271
2005500625.tif 000272
2005500625.tif 000273
2005500625.tif 000274
2005500625.tif 000275
2005500625.tif 000276
2005500625.tif 000277
2005500625.tif 000278
2005500625.tif 000279
2005500625.tif 000280
2005500625.tif 000281
2005500625.tif 000282
2005500625.tif 000283
2005500625.tif 000284
2005500625.tif 000285
2005500625.tif 000286
2005500625.tif 000287
2005500625.tif 000288
2005500625.tif 000289
2005500625.tif 000290
2005500625.tif 000291
2005500625.tif 000292
2005500625.tif 000293
2005500625.tif 000294
2005500625.tif 000295
2005500625.tif 000296
2005500625.tif 000297
2005500625.tif 000298
2005500625.tif 000299
2005500625.tif 000300
2005500625.tif 000301
2005500625.tif 000302
2005500625.tif 000303
2005500625.tif 000304
2005500625.tif 000305
2005500625.tif 000306
2005500625.tif 000307
2005500625.tif 000308
2005500625.tif 000309
2005500625.tif 000310
2005500625.tif 000311
2005500625.tif 000312
2005500625.tif 000313
2005500625.tif 000314
2005500625.tif 000315
2005500625.tif 000316
2005500625.tif 000317
2005500625.tif 000318
2005500625.tif 000319
2005500625.tif 000320
2005500625.tif 000321
2005500625.tif 000322
2005500625.tif 000323
2005500625.tif 000324
2005500625.tif 000325
2005500625.tif 000326
2005500625.tif 000327
2005500625.tif 000328
2005500625.tif 000329
2005500625.tif 000330
2005500625.tif 000331
2005500625.tif 000332
2005500625.tif 000333
2005500625.tif 000334
2005500625.tif 000335
2005500625.tif 000336
2005500625.tif 000337
2005500625.tif 000338
2005500625.tif 000339
2005500625.tif 000340
2005500625.tif 000341
2005500625.tif 000342
2005500625.tif 000343
2005500625.tif 000344
2005500625.tif 000345
2005500625.tif 000346
2005500625.tif 000347
2005500625.tif 000348
2005500625.tif 000349
2005500625.tif 000350
2005500625.tif 000351
2005500625.tif 000352
2005500625.tif 000353
【国際調査報告】
2005500625.tif 000354