JP4125675B2 - タイミングに鈍感なグリッチのない論理システムおよび方法 - Google Patents
タイミングに鈍感なグリッチのない論理システムおよび方法 Download PDFInfo
- Publication number
- JP4125675B2 JP4125675B2 JP2003521985A JP2003521985A JP4125675B2 JP 4125675 B2 JP4125675 B2 JP 4125675B2 JP 2003521985 A JP2003521985 A JP 2003521985A JP 2003521985 A JP2003521985 A JP 2003521985A JP 4125675 B2 JP4125675 B2 JP 4125675B2
- Authority
- JP
- Japan
- Prior art keywords
- input
- logic
- data
- logic circuit
- clock
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/04—Generating or distributing clock signals or signals derived directly therefrom
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
- G06F30/3308—Design verification, e.g. functional simulation or model checking using simulation
- G06F30/331—Design verification, e.g. functional simulation or model checking using simulation with hardware acceleration, e.g. by using field programmable gate array [FPGA] or emulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/327—Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Debugging And Monitoring (AREA)
Description
(関連米国出願)
本出願は、1997年5月2日に米国特許商標庁(USPTO)に出願された米国特許出願の第08/850,136号の部分継続出願である。
【0002】
(発明の背景)
(発明の分野)
本発明は概して、電子設計オートメーション(EDA)に関する。より詳細には、本発明は、シミュレーション、ハードウエア加速、および保護(coverification)を含む種々の用途の保持時間およびクロックグリッチ問題を解決するデジタル論理デバイスに関する。
【0003】
(関連技術の説明)
一般に、電子設計自動化(EDA)は、設計者にユーザのカスタム回路設計図を設計しかつ検証するための自動化または半自動化ツールを設計者に提供するために、種々のワークステーションに構成されたコンピュータベースのツールである。EDAは、シミュレーション、エミュレーション、試作、実行、またはコンピューティングの目的のために任意の電子設計図を作成し、解析し、そして編集するために一般に用いられる。EDAの用語はまた、ユーザ設計サブシステムまたはコンポーネントを用いるシステム(すなわち、ターゲットシステム)を開発するために用いられ得る。EDAの最終的な結果は、通常、個別の集積回路またはプリント回路基板の形態において、変更されかつエンハンスされた設計であり、これはオリジナルの設計を超える改良であるが、オリジナルの設計の精神を維持する。
【0004】
ハードウエアエミュレーション前の回路設計のシミュレーションを行うソフトウエアの価値がEDA技術を用いて利益を得る種々の産業にて認識されている。それにも拘らず、現在のソフトウエアシミュレーションおよびハードウエアエミュレーション/アクセラレーションは、これらのプロセスが性質上、分離かつ独立であるためにユーザにとって厄介である。例えば、ユーザは、1デバッグ/テストセッション全てにおいて、その時間の一部の間に回路設計をシミレートするかまたはデバッグし、この結果を用いて別の時間の間にハードウエアモデルを用いるシミュレーションプロセスをアクセラレーションさせ、選択した時間に回路内の種々のレジスタおよび組み合わされた論理値を検査し、そしてその後にソフトウエアのシミュレーションに戻ることを望む可能性がある。さらに、内部レジスタおよび組合せ論理値がシミュレーション時間が過ぎるにつれて変化する場合、ユーザは、ハードウエアクセラレーション/エミュレーションプロセスの間にハードウエアモデルに変化が生じる場合でさえ、この変化をモニタリングすることができるようにすべきである。
【0005】
コ−シミュレーション(co−similation)は、純粋なソフトウエアシミュレーションおよび純粋なハードウエアエミュレーション/アクセラレーションという2つの分離かつ独立のプロセスを用いることの厄介な本質を有するいくつかの問題を取り扱い、そして全体システムをより使い易くする必要性から生じた。しかし、コ−シミュレーションは、なお多数の欠陥を有する:(1)コシステムが手動パーティションを要求とする、(2)コ−シミュレーションが2つの疎結合のエンジンを用いる、(3)コ−シミュレーション速度はソフトウエアシミュレーション速度と同程度に遅い、そして(4)コ−シミュレーションシステムは競合条件(race condition)に出くわす。
【0006】
第1に、ソフトウエアとハードウエアとの間のパーティションは、自動の代わりにさらにユーザに負担を与える手動で行われる。本質的には、コ−シミュレーションがユーザに設計(挙動レベルから始まり、次いでRTL、そして次いでゲートレベルに至る)をパーティションし、非常に大きい機能ブロックにてソフトウエアおよびハードウエア間のモデル自体をテストすることを要求する。このような制約は、ユーザに対してある程度の洗練された知識を要求する。
【0007】
第2に、コ−シミュレーションシステムが2つの疎結合でかつ独立のエンジンを利用し、そしてこれらが内部エンジン同期化、調整および柔軟性の問題を引き起こす。コ−シミュレーションが2つの異なる検証エンジン(ソフトウエアシミュレーションおよびハードウエアエミュレーション)の同期化を要求する。ソフトウエアシミュレータ側がハードウエアクセレータ側に結合される場合でさえ、外部ピン出力データ(pin−out data)だけが検査およびロードに利用可能である。レジスタのモデリングされた回路内の値および組合せ論理レベルは、容易な検査および一方の側から他方の側へのダウンロードに利用不可能であり、これらのコシミュレータシステムのユーティリティを制限する。通常、ユーザがソフトウエアシミュレーションからハードウエア/アクセラレーションにスイッチングし、その後、戻ってスイッチングする場合、ユーザが全体の設計を再度シミュレーションを行わなければならない可能性がある。したがって、ユーザが、レジスタおよび組み合わせ論理値を検査する1回デバッグセッションの間に、ソフトウエアシミュレーションとハードウエア/アクセラレーションとの間でスイッチングすることを望む場合、コ−シミュレーションシステムはこの能力を提供しない。
【0008】
第3に、コ−シミュレーション速度はシミュレーション速度と同じくらいに遅い。コ−シミュレーションは、2つの異なる検証エンジン(verification engine)、すなわち、ソフトウエアシミュレーションとハードウエアエミュレーションの同期化を要求する。これらのエンジンそれぞれは、シミュレーションまたはエミュレーションを駆動するためにそれぞれ固有の制御機構を有する。これは、ソフトウエアとハードウエアとの間の同期化により、ソフトウエアシミュレーションと同じ低い速度に全体の性能を押しやることを示唆する。これら2つのエンジンの動作を調整するオーバーヘッドがコ−シミュレーションシステムの低速化に加わる。
【0009】
第4に、コ−シミュレーションシステムが、セットアップ、保持時間およびクロック信号間の競合条件に起因するクロックグリッチ問題に出会う。コシミュレータは、ハードウエア駆動クロックを用い、そして異なるワイヤライン長に起因する異なる時間に異なる論理素子への入力にされ得る。これらの論理素子が共にそのデータを評価すべきである場合、ある論理素子がある時間期間にデータを評価し、他の論理素子が異なる時間期間にデータを評価するので、このことが評価結果の不確定性レベルを引き上げる。
【0010】
従って、現在公知のシミュレーションシステム、ハードウエアエミュレーションデバイス、ハードウエア加速、コシミュレーション、および保護システムによって上掲した問題を解決するシステムまたは方法に対する必要性が産業に存在する。
【0011】
(発明の要旨)
本発明は、フレキシブルかつ高速シミュレーション/エミュレーションシステムの形態の上述の問題に対する解決策を提供し、本明細書中では、このシステムは、再構成可能な計算システム(またはRCC計算システム)および再構成可能なハードウエアアレイ(またはRCCハードウエアアレイ)を含む、「Sエミュレーションシステム(SEmulation system)」、「Sエミュレータシステム(SEmulator system)」、または、保護システムと称する。
【0012】
本発明のSエミュレーションシステムおよび方法は、シミュレーションのためのソフトウエアおよびハードウエア表示に電子システムの設計を変換する能力をユーザに提供する。一般的に、Sエミュレーションシシステムはソフトウエア制御エミュレータまたはハードウエア加速シミュレータであり、本明書中で使用された方法である。従って、純粋なソフトウエアシミュレーションが可能であるが、シミュレーションはまた、ハードウエアモデルの使用によって加速され得る。ハードウエア加速は、開始、停止、値のアサート、および値の検査のためのソフトウエア制御によって可能になる。回路内エミュレーションシモードは、さらに利用可能になり、回路のターゲットシステムの環境においてユーザの回路設計をテストする。再度、ソフトウエア制御が利用可能である。
【0013】
ソフトウエアモデルおよびハードウエアモデルの両方を制御し、ユーザが開始、停止、値のアサート、値の検査、および種々のモード間のスイッチングを可能にすることによって、ユーザに対してより大きい実行時間の柔軟性を提供するソフトウエアカーネルは、システムの核心である。カーネルは、レジスタに対するイネーブル入力を介してハードウエアのデータ評価を制御することによって種々のモードを制御する。
【0014】
本発明によるSエミュレーションシシステムおよび方法は、4つのモードの動作を提供する。すなわち、(1)ソフトウエアシミュレーション、(2)ハードウエア加速を介したシミュレーション、(3)回路内エミュレーションシ(ICE)、および(4)ポストシミュレーション解析である。ハイレベルには、本発明は、上記4つのモードのそれぞれまたは以下のようなこれらのモードの種々の組み合わせにおいて具現化される。すなわち、(1)ソフトウエアシミュレーションのみ、(2)ハードウエア加速を介したシミュレーションのみ、(3)回路内エミュレーションシ(ICE)のみ、(4)ポストシミュレーション解析のみ、(5)ソフトウエアシミュレーションおよびハードウエア加速を介したシミュレーション、(6)ソフトウエアシミュレーションおよびICE、(7)ハードウエア加速を介したシミュレーションおよびICE(8)ソフトウエアシミュレーション、ハードウエア加速を介したシミュレーション、およびICE、(9)ソフトウエアシミュレーションおよびポストシミュレーション解析、(10)ハードウエア加速を介したシミュレーションおよびポストシミュレーション解析、(11)ソフトウエアシミュレーション、ハードウエア加速を介したシミュレーション、およびポストシミュレーション解析、(12)ICEおよびポストシミュレーション解析、(13)ソフトウエアシミュレーション、ICE、ポストシミュレーション解析、(14)ハードウエア加速を介したシミュレーション、ICE、ポストシミュレーション解析、および(15)ソフトウエアシミュレーション、ハードウエア加速を介したシミュレーション、ICE、およびポストシミュレーション解析である。他の組み合わせが可能であり、本発明の範囲内にある。
【0015】
各モードまたはモードの組み合わせは、以下の特性またはこの特性の組み合わせを提供する。すなわち、(1)手動または自動のモード間でスイッチングする、(2)使用(ユーザは、モード間でスイッチングし得、開始、停止、アサート、値のアサート、値の検査、シミュレーションまたはエミュレーションシプロセスにわたるサイクルの単一処理、(3)ソフトウエアモデルおよびハードウエアモデルを生成するコンパイルプロセス、(4)メイン制御ループを有する全てのモードを制御するソフトウエアカーネルは、一実施形態では、システムを初期化するステップと、アクティブテストベンチプロセス/コンポーネントを評価するステップと、クロックコンポーネントを評価するステップと、クロックエッジを検出するステップと、レジスタおよびメモリを更新するステップと、組み合わせコンポーネントを伝達するステップと、シミュレーション時間を進めるステップと、アクティブテストベンチプロセスが存在する限り、ループを継続するステップとを含む、(5)ハードウエアモデルを生成するためのコンポーネントタイプの解析、(6)一実施形態では、クラスタリング、配置、およびルーティングによって、ハードウエアモデルを再構成可能な基板にマッピングするステップ、(7)一実施形態では、ゲートクロック論理解析およびゲートデータ論理解析によって、競合条件を回避するためのソフトウエアクロックセットアップ、(8)一実施形態では、ハードウエアモデルにおけるイネーブル信号をトリガし、ゲートクロック論理を介して、一次クロックからハードウエアモデルのクロックエッジレジスタのクロック入力に信号を送信し、クロックイネーブル信号をハードウエアモデルのレジスタのイネーブル入力に送信し、ゲートデータ論理を介して、一次クロックレジスタからハードウエアモデルのレジスタにデータを送信し、ハードウエアモデルのレジスタのイネーブル入力にクロックイネーブル信号をディセーブルするクロックエッジレジスタをリセットするソフトウエアモデルにおいてクロックエッジ検出することによるソフトウエアクロック実現、(9)デバッグセッションおよびポストシミュレーション解析のための書き込み選択データ、(10)組み合わせ論理再生成、(11)一実施形態では、基本的な構築ブロックは非同期入力および同期入力を有するDタイプレジスタである、(12)各チップにおけるアドレスポインタ、(13)多重化されたクロスチップアドレスポインタチェーン、(14)FPGAチップおよびその相互接続スキームのアレイ、(15)PCIバスシステムの性能をトラッキングするバスを有するFPGAチップのバンク、(16)ピギーバック基板を介して拡張を可能にするFPGAバンク、および(17)最適ピン使用のための時分割多重化(TDM)回路である。種々の実施形態によって本発明は、本明細書中で説明されたような他の特徴を提供し、これは上述の特徴のリストに列挙され得ない。
【0016】
本発明の一実施形態は、シミュレーションシステムである。シミュレーションシステムは回路の挙動をシミュレートするためのホストコンピュータシステムにおいて動作する。ホストコンピュータシステムは、中央処理ユニット(CPU)、メインメモリ、およびCPUをメインメモリに結合し、CPUとメインメモリとの間の通信を可能にするローカルバスを含む。この回路は、構造およびHDL等のハードウエア言語において特定化された機能を有する。この言語は、コンポーネントタイプおよび接続として回路を記述することを可能にする。このシミュレーションシステムはソフトウエアモデル、ソフトウエア制御論理、およびハードウエア論理素子を含む。
【0017】
回路のソフトウエアモデルはローカルバスに結合される。典型的には、このモデルはメインメモリに常駐している。ソフトウエア制御論理は、ソフトウエアモデルおよびハードウエア論理素子の動作を制御するために、ソフトウエアモデルおよびハードウエア論理素子に結合される。ソフトウエア制御論理は、外部プロセスからの入力データおよびクロック信号の受信を可能にするインターフェイス論理およびクロック信号のアクティブエッジの検出およびトリガ信号の生成のためのクロック検出論理を含む。さらにハードウエア論理素子は、ローカルバスに結合され、コンポーネントタイプに基づく回路の少なくとも一部分のハードウエアモデルおよびトリガ信号に応答してハードウエアモデルにおけるデータを評価するためのクロックイネーブル論理を含む。
【0018】
さらにハードウエア論理素子は、アレイまたは互いに結合された複数のフィールドプログラマブルデバイスを含む。各フィールドプログラム可能なデバイスは、少なくとも一部の回路のハードウエアモデルを含み、従って、全てのフィールドプログラム可能なデバイスの組み合わせは、全ハードウエアモデルを含む。さらに複数の相互接続は、ハードウエアモデルの一部を互いに接続させる。各相互接続は、同一のロウまたはカラムに配置された任意の2つのフィールドプログラム可能なデバイス間の直接接続を表す。任意の2つのフィールドプログラム可能なデバイス間の最も短い距離は、せいぜい2つの相互接続または「ホップ」である。
【0019】
本発明の別の実施形態は、回路をシミュレートするシステムおよび方法であり、回路はソフトウエアにモデル化され、回路の少なくとも一部分はハードウエアにモデル化される。データ評価はハードウエアで発生するが、ソフトウエアクロックを介してソフトウエアで制御される。評価されるべきデータは、ハードウエアモデルに伝達され安定化される。ソフトウエアモデルがアクティブクロックエッジを検出する場合、ソフトウエアモデルは、イネーブル信号をハードウエアモデルに送信し、データ評価を始動させる。ハードウエアモデルはデータを評価し、ソフトウエアモデルにおける次のアクティブクロックエッジ信号検出において評価され得る新しい入来データを待機する。
【0020】
本発明の別の実施形態は、ソフトウエアモデルおよびハードウエアモデルの動作を制御するソフトウエアカーネルを含む。ソフトウエアカーネルは、アクティブテストベンチプロセスコンポーネントを評価するステップと、クロックコンポーネントを評価するステップと、クロックエッジを検出するステップと、レジスタおよびメモリを更新するステップと、組み合わせコンポーネントを伝達するステップと、シミュレーション時間を進めるステップと、アクティブベンチプロセスが存在すする限りループを継続するステップとを含む。
【0021】
本発明のさらなる実施形態は、回路をシミュレートする方法であって、回路は、ハードウエア言語(例えばHDL)において特定された構造および機能を有する。さらにハードウエア言語は、回路をコンポーネントに記載または変形することを可能にする。本方法は、(1)ハードウエア言語においてコンポーネントタイプを決定するステップと、(2)コンポーネントタイプに基づいて回路のモデルを生成するステップと、および(3)入力データをモデルに提供することによって、そのモデルを用いて回路の挙動をシミュレートするステップとを含む。このモデルを一般化するステップは、(1)回路のソフトウエアモデルを生成するステップと、(2)コンポーネントタイプに基づく回路のハードウエアモデルを生成するステップとを含み得る。
【0022】
別の実施形態では、本発明は回路をシミュレートする方法である。そのステップは、(1)回路のソフトウエアモデルを生成するステップと、(2)回路のハードウエアモデルを生成するステップと、(3)ソフトウエアモデルに入力データを提供することによってソフトウエアモデルを用いて回路の挙動をシミュレートするステップと、(4)ハードウエアモデルに選択的にスイッチングするステップと、(5)入力データをハードウエアモデルに提供するステップと、(6)ハードウエアモデルにおいてシミュレーションを加速することによって、ハードウエアモデルを用いて回路の挙動をシミュレートするステップとを含む。さらに本方法は、(1)ソフトウエアモデルに選択的にスイッチングするステップと、(2)入力データをソフトウエアモデルに提供することによってソフトウエアモデルを用いて回路の挙動をシミュレートするステップとをさらに含む。シミュレーションはまた、ソフトウエアモデルを用いて停止され得る。
【0023】
回路内エミュレーションシモードに対して、本方法は、(1)回路のソフトウエアモデルを生成するステップと、(2)回路の少なくとも一部のハードウエアモデルを生成するステップと、(3)ターゲットシステムからハードウエアモデルに入力信号を供給するステップと、(4)ハードウエアモデルからターゲットシステムに出力信号を供給するステップと、(5)ハードウエアモデルを用いて回路の挙動をシミュレートするステップであって、ソフトウエアモデルはシミュレーション/エミュレーションをサイクルごとに制御することを可能にする、ステップとを含む。
【0024】
ポストシミュレーション解析に対して、回路をシミュレートする方法は、(1)回路のモデルを生成するステップと、(2)入力データをそのモデルに提供することによって、このモデルを用いて回路の挙動をシミュレートするステップと、(3)選択された入力データおよび選択出力データをこのモデルからの書き込みポイントとして書き込むステップとを含む。ソフトウエアモデルおよびハードウエアモデルが生成され得る。本方法は、(1)シミュレーションにおける所望された時間依存ポイントを選択するステップと、(2)選択された時間依存ポイントにおいて、またはその前に書き込みポイントを選択するステップと、(3)入力データをハードウエアモデルに提供するステップと、(4)選択された書き込みポイントからハードウエアモデルを用いて回路の挙動をシミュレートするステップとをさらに含み得る。
【0025】
本発明のさらなる実施形態は、回路をシミュレートするためのシミュレーションシステムのためのモデルを生成する方法である。このステップは、(1)回路のソフトウエアモデルを生成するステップと、(2)コンポーネントタイプに基づく回路の少なくとも一部に対してハードウエアモデルを生成するステップと、(3)ハードウエアモデルにおいてクロック生成回路を生成して、ソフトウエアモデルにおけるクロックエッジ検出に応答して、ハードウエアモデルのデータ評価をトリガするステップとを含む。
【0026】
本発明の種々の実施形態は、標準的な設計のフリップフロップおよびラッチを置換する特別に設計された論理デバイスによって上記問題を解決する。本発明の一実施形態は、タイミングに鈍感なグリッチのない(TIGF)論理デバイスである。TIGF論理デバイスは、任意のラッチまたはエッジトリガフリップフロップの形態をとり得る。本発明の一実施形態では、トリガ信号が供給されて、TIGF論理デバイスを更新する。トリガ信号は、評価期間から隣接する時間において発生した短いトリガ期間の間に供給される。
【0027】
ラッチ形態では、TIGFラッチは、トリガ信号が受け取られるまでTIGFラッチの現在の状態を保持するフリップフロップを含む。マルチプレクサはまた、新しい値および古い格納された値を受け取るように設けられる。イネーブル信号は、マルチプレクサに対するセレクタ信号として機能する。トリガ信号がTIGF信号の更新を制御するため、TIGFラッチへのD入力におけるデータおよびイネーブル入力における制御データは、保持時間超過を受けることなく任意の順序で到達し得る。あるいは、トリガ信号は、TIGFの更新を制御するため、イネーブル信号は、TIGFラッチの適切な動作に負の影響を受けることなくグリッチし得る。
【0028】
フリップフロップ形態においてTIGFフリップフロップは、新しい入力値を保持する第1のフリップフロップ、現在格納された値を保持する第2のフリップフロップ、およびクロックエッジ検出器を含む。これら3つのコンポーネント全てがTIGFフリップフロップを更新するためのトリガ信号によって制御される。マルチプレクサは、さらにセレクタ信号として機能するエッジ検出器信号が供給される。1つの専用の第1のフリップフロップは、評価の間に変化する入力を効率的にブロックする新しい入力値を格納するため、保持時間超過が回避される。TIGFフリップフロップ更新を制御するトリガ信号によって、クロックグリッチは、TIGFフリップフロップをエミュレートされたフリップフロップとして使用するユーザ設計回路のハードウエアモデルに影響を与えない。
【0029】
これらの実施形態および他の実施形態は本明細書の以下のセクションで十分に議論され、示される。
【0030】
添付された図面が、本発明のいくつかの異なる局面および実施形態について以下で説明される。
【0031】
(好適な実施形態の詳細な説明)
本明細書において、「Sエミュレータ」または「Sエミュレータ」システムを呼ばれるシステムに関することを介しかつ内部の本発明の種々の実施形態が説明される。本明細書にわたって、用語「Sエミュレーションシステム」、「Sエミュレータシステム」、「Sエミュレーション」、または簡単に「システム」が用いられ得る。これらの用語は、4つの動作モードの任意の組合せのための本発明による種々の装置および方法を表す:すなわち、(1)ソフトウエアシミュレーション、(2)ハードウエアクセラレーションによるシミュレーション、(3)インサーキットエミュレーション(ICE)、および(4)ポストシミュレーション解析(個々のセットアップまたは前処理ステージを含む)である。他の場合にも用語「Sエミュレーション」が用いられ得る。この用語は本明細書中に記載された新規のプロセスをいう。
【0032】
同様に、「再構成可能ハードウエアコンピューティング(RCC)アレイシステム」または「RCCコンピューティングシステム」などの用語は、メインプロセッサ、ソフトウエアカーネルおよびユーザ設計のソフトウエアモデルを含むシミュレーション/コ−ベリフィケーションシステムのこの部分をいう。「再構成可能ハードウエアハードウエアレイ」または「RCCハードウエアレイ」などの用語は、1実施形態において、ユーザ設計のハードウエアモデルを含み、かつ再構成可能ハードウエア論理素子を含むシミュレーション/コ−ベリフィケーションシステムのこの部分をいう。
【0033】
また、本明細書には、「ユーザ」およびユーザの「回路設計」または「電子設計」が記載されている。「ユーザ」は、このインターフェースを介してSエミュレーションシステムを用いる人間であり、そして設計プロセスにてほとんどか、全く役割を果たさなかった回路の設計者またはテスト/デバッガーであり得る。「回路設計」または「電子設計」は、ソフトウエアまたはハードウエア(テスト/デバッグ目的のためにSエミュレーションシステムによってモデリングされ得る)であるカスタム設計システムまたはコンポーネントである。多くの場合、「ユーザ」はまた「回路設計」および「電子設計」を行った。
【0034】
本明細書はまた、「ワイヤ」、「ワイヤライン」、「ワイヤ/バスライン」、および「バス」を用いる。これらの用語は、電気的に伝導する種々の線をいう。各ラインが2つのポイントの間の単一のワイヤまたは複数のポイントの間のいくつかのワイヤであり得る。これらの用語は、「ワイヤ」が1以上の導線を含み得、「バス」はまた1以上の導線を含み得る。
【0035】
本明細書は、アウトラインの形態にて提示される。第1に、本明細書は、4つの動作モードおよびハードウエア実現スキームの概要を含むSエミュレーションシステムの全体的な概要を提示する。第2に、本明細書は、Sエミュレーションシステムの詳細な説明を提供する。いくつかの場合、1つの図面が添付された図に示された種々の実施形態を提供し得る。これらの場合、同一の参照番号が同一のコンポーネント/ユニット/プロセスのために用いられる。本明細書のアウトラインは以下の通りである。
【0036】
I.概要
A.シミュレーション/ハードウエアクセラレーションモード
B.ターゲットシステムモードでのエミュレーション
C.ポストシミュレーション解析モード
D.ハードウエア実現スキーム
E.シミュレーションサーバ
F.メモリシミュレーション
G.コ−ベリフィケーションシステム
II.システムの記述
III.シミュレーション/ハードウエアクセラレーションモード
IV.ターゲットシステムモードによるエミュレーション
V.ポストシミュレーション解析モード
VI.ハードウエア実現スキーム
A.概要
B.アドレスポインタ
C.ゲートデータ(GATED DATA)/クロックネットワーク解析
D.FPGAアレイおよび制御
E.高集積度FPGAチップを用いる別の実施形態
F.TIGF論理デバイス
VII.シミュレーションサーバ
VIII.メモリシミュレーション
IX.コ−ベリフィケーションシステム
X.例
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
I.概要
本発明の種々の実施形態は、4つの一般的な動作モードを有する。(1)ソフトウエアシミュレーション、(2)ハードウエアクセラレーションによるシミュレーション、(3)インサーキットエミュレーション(ICE)、および(4)ポストシミュレーション解析。種々の実施形態は、以下の機能の少なくともいくつかを有する以上のモードのシステムおよび方法を含む。(1)単一の緊密に結合されたシミュレーションエンジン、ソフトウエアカーネル(サイクル毎にソフトウエアおよびハードウエアを制御する)を有するソフトウエアおよびハードウエアモデル。(2)ソフトウエアおよびハードウエアモデル生成およびパーティションのためのコンパイルプロセスの間の自動コンポーネントタイプ解析。(3)ソフトウエアシミュレーションモード、ハードウエアクセラレーションモードによるシミュレーション、インサーキットエミュレーションモードおよびポストシミュレーション解析モード間でスイッチング(サイクル毎)を行う機能。(4)ソフトウエア組み合わせコンポーネント再生成による完全なハードウエア可観性(visibility)。(5)競合条件を避けるためのソフトウエアクロックおよびゲートクロック/データ論理による二重バッファクロックモデリング;(6)ポストシミュレーションセッションの任意の選択されたポイントからユーザの回路設計を再度シミュレーションをするかまたはハードウエアクセラレーションを行う機能。最終的な目的は、完全なHDL機能性およびエミュレータ実行性能を有する柔軟で高速のシミュレータ/エミュレータシステムおよび方法である。
【0037】
A.シミュレーション/ハードウエアクセラレーションモード
Sエミュレーションシステムは、自動コンポーネントタイプ解析を通じて、ソフトウエアおよびハードウエアのユーザのカスタム回路設計をモデリングし得る。全体のユーザ回路設計がソフトウエアにてモデリングされ、一方評価コンポーネント(すなわち、レジスタコンポーネント、組み合わせコンポーネント)がハードウエアにてモデリングされる。ハードウエアモデリングがコンポーネントタイプ解析によって容易にされる。
【0038】
汎用プロセッサシステムのメインメモリに常駐するソフトウエアカーネルは、Sエミュレータシステムのメインプログラム(種々のモードおよび機能での全体動作および実行を制御する)として役目を果たす。任意のテストベンチプロセッサが活性化している限り、カーネルは活性化しているテストベンチコンポーネントを評価し、クロックコンポーネントを評価し、組み合わせ論理データを伝達させると同じようにレジスタおよびメモリを更新するクロックエッジを検出し、そしてシミュレーションタイムを進める。このソフトウエアカーネルがシミュレータエンジンとハードウエアエンジンとの緊密な結合特性を提供する。ソフトウエア/ハードウエア境界について、Sエミュレーションシステムが多数のI/Oアドレス空間−REG(レジスタ)、CLK(ソフトウエアクロック)、S2H(ソフトウエアからハードウエアへ)およびH2S(ハードウエアからソフトウエアへ)を提供する。
【0039】
Sエミュレーションが4つの動作モードの間で選択的にスイッチングする性能を有する。システムのユーザがシミュレーションを開始させ、シミュレーションを終了させ、入力値をアサートし、値を検査し、サイクル毎の単一のステップを試験を行い得、そして4つの異なるモードの間で前後してスイッチングし得る。例えば、本システムが時間期間のソフトウエアの回路をシミュレーションをし、ハードウエアモデルを介してシミュレーションをアクセラレーションし、そしてソフトウエアシミュレーションモードに戻し得る。
【0040】
一般に、Sエミュレーションシステムは、ソフトウエアまたはハードウエアのどちらにてコンポーネントがモデリングされるかに関わらず、ユーザに全てのモデリングされるコンポーネントを「見る(see)」能力を提供する。種々の理由から、組み合わせコンポーネントはレジスタのように「見える(visible)」ものではなく、従って、組み合わせコンポーネントデータを入手することは困難である。1つの理由は、ユーザの回路設計のハードウエア部をモデリングするように再構成可能ボードの中に用いられるFPGAが通常、実際の組み合わせコンポーネントの代わりに、ルックアップテーブル(LUT)として組み合わせコンポーネントをモデリングすることである。したがって、Sエミュレーションシステムがレジスタ値を読み出し、そして次いで、組み合わせコンポーネントを再生成する。いくつかのオーバーヘッドが組み合わせコンポーネントを再生成するために必要とされるので、この再生成プロセスは常に実行されるわけではない。むしろ、ユーザのリクエストに応じるのみである。
【0041】
ソフトウエアカーネルがソフトウエア側に常駐しているので、クロックエッジ検出機構は、ハードウエアモデルの種々のレジスタにイネーブル入力を駆動させるいわゆるソフトウエアクロックの生成をトリガーするために提供される。タイミングが二重バッファ回路の実装を介して厳密に制御されるので、データをこれらのモデルに入力させる前にソフトエアクロックイネーブル信号がレジスタモデルに入る。一旦これらのレジスタモデルへのデータ入力が安定化すると、ソフトウエアクロックは、全てのデータ値が保持時間違反の任意のリスクなしにとともにゲートされる(gated)ことを確実にするように同期的にデータをゲートする。
【0042】
また、ソフトウエアシミュレーションがシステムが全ての入力値および選択されたレジスタ値/状態だけをログするので高速になり、従って、オーバーヘッドがI/O動作の数を減少させることによって最小化される。ユーザがロギング頻度を選択的に選択し得る。
【0043】
B.ターゲットシステムモードのエミュレーション
Sエミュレーションシステムがターゲットシステム環境内にユーザの回路をエミュレートできる。ターゲットシステムが評価のためにデータをハードウエアモデルに出力し、ハードウエアモデルはまたデータをターゲットシステムに出力する。さらに、ソフトウエアカーネルがこのモードの動作を制御するので、ユーザが開始し、停止し、値をアサートし、値を検査し、単一のステップを行い、そしてあるモードから別のモードにスイッチングするオプションをまだ有する。
【0044】
C.ポストシミュレーション解析モード
ログがユーザにシミュレーションセッションの履歴記録を提供する。公知のシミュレーションシステムと異なり、Sエミュレーションシステムがシングルごとの値、内部状態またはシミュレーションプロセスの間の値変化をロギングしない。Sエミュレーションシステムがロギング頻度(すなわち、Nサイクル毎に1記録をログ)に基づいて選択された値および状態をロギングするだけである。ポストシミュレーションステージの間、ユーザは、ちょうど完了したシミュレーションセッションのポイントX近くの種々のデータを試験することを望む場合、ユーザがロギングされたポイント(例えば、ロギングされたポイントY(ポイントX近くにあり、時間的にポイントXの前に配置される))の1つに進む。次いで、ユーザは、シミュレーション結果を入手するために選択されたロギングポイントYから自分の望むポイントXにシミュレーションをする。
【0045】
また、VCDオンデマンドシステムが説明される。VCDオンデマンドシステムは、ユーザが、シミュレーションの再走行なしにオンデマンドで任意のシミュレーションターゲット範囲(すなわち、シミュレーション時間)を眺めることを可能にする。
【0046】
D.ハードウエア実現スキーム
Sエミュレーションシステムは、再構成可能ボード上のFPGAチップのアレイを実現する。ハードウエアモデルに基づいて、Sエミュレーションシステムが、ユーザ回路設計のそれぞれ選択された部分をFPGAチップ上にパーティションし、マッピングし、配置し、そしてルーティングを行う。従って、例えば、16チップの4×4アレイは、これらの16チップにわたって広がられた大きな回路をモデリングし得る。相互接続スキームは、それぞれのチップが別のチップに2「ジャンプ」またはリンク内にアクセスすることを可能にする。
【0047】
各FPGAチップが各I/Oアドレス空間(すなわち、REG、CLK、S2H、H2S)に対してアドレスポインタを実現する。特定のアドレス空間に関連する全てのアドレスポインタの組合せが共に連鎖される。したがって、データ転送の間、ワードデータ(各チップ(ある時間当たりに1チップ)の選択されたアドレス空間に対するある時間当たり1ワード)は、所望のワードデータがその選択されたアドレス空間に対してアクセスされるまでメインFPGAバスおよびPCIバスから/へ(from/to)と逐次的に選択される。この逐次的なワードデータの選択が伝播するワード選択信号によって達成される。このワード選択信号がチップのアドレスポインタを介して移動し、そして次いで、次のチップのアドレスポインタに伝播し、そしてこの動作が最後のチップまたはシステムがアドレスポインタを初期化するまで続く。
【0048】
再構成可能ハードウエアボードのFPGAバスシステムは、PCIバスバンド幅の2倍だがPCIバス速度の半分で動作する。従って、FPGAチップがより大きなバンド幅バスを利用するようにバンクに分離される。このFPGAバスシステムのスループットは、性能がバス速度を低減することによって損なわれないようにPCIバスシステムのスループットをトラッキングし得る。拡張は、バンク長を拡張するピギーバックボード(piggyback board)によって可能である。
【0049】
本発明の別の実施形態において、より集積度の高いFPGAチップが用いられる。1つのこのような集積度の高いチップがAltera10K130Vおよび10K250Vチップである。これらのチップの使用は、8つ未満の集積度の高いFPGAチップ(Altera10K100V)の代わりに、4つのみのFPGAチップがボード毎に用いられるようにボード設計を変更する。
【0050】
シミュレーションシステムのFPGAアレイが特定のボード相互接続構造を介してマザーボード上に提供される。各チップは、相互接続部のセットを8つまで有してもよく、相互接続部は、ローカルバス接続部を除く、隣接した直接的に近接する相互接続部(すなわち、N[73:0]、S[73:0]、W[73:0]、E[73:0])、および1ホップ(one−hop)の隣接相互接続部(NH[27:0]、SH[27:0]、XH[36:0]、XH[72:37])によって単一のボード内および異なるボードにわたって配置される。各チップは、隣接した近接チップに直接的に相互接続され得るか、または上方、下方、左右に配置された1ホップ非隣接チップ(one−hop to a non−adjacent chip)にて相互接続され得る。X方向(東西)においてアレイがトーラスである。Y方向(北南)において、アレイがメッシュである。
【0051】
相互接続部が単一のボード内の論理デバイスおよび他のコンポーネントを接続し得る。しかし、内部ボードコネクタは、上述のボードを接続し、そして(1)マザーボードおよびアレイボードを介するPCIバスと(2)任意の2つのアレイボードとの間に信号が伝送するように異なるボードにわたって共に相互接続するために提供されている。
【0052】
マザーボードコネクタはボードをマザーボード、従ってPCIバス、電源および接地にグラウンドする。いくつかのボードについて、マザーボードコネクタがマザーボードとの直接的に接続するために用いられない。6枚ボード構成において、単なるボード1、3および5だけがマザーボードに直接的に接続されている一方、残りのボード2、4および6がマザーボード接続性について近接ボードに依存している。従って、全ての他のボードが直接的にマザーボードに接続され、これらのボードの相互接続部およびローカルバスがはんだ面に配置された内部ボードコネクタを介して共にコンポーネント面に結合されている。PCI信号がボード(通常、第1のボード)の1つを通ってルーティングされる。電源およびグラウンドがこれらのボードの他のマザーボードコネクタに加えられる。コンポーネント面にハンダ面が配置され、種々の内部ボードコネクタがPCIバスコンポーネント、FPGA論理デバイス、メモリデバイスおよび種々のシミュレーションシステム制御回路間の通信を可能にする。
【0053】
E.シミュレーションサーバ
本発明の別の実施形態において、シミュレーションサーバが同一の再構成可能ハードウエアユニットに複数のユーザがアクセスすることを可能にする。あるシステム構成において、ネットワークにわたる複数のワークステーションまたは非ネットワーク環境の複数のユーザ/プロセスは、同一または異なるユーザ回路設計をレビュー/デバッグするように同一のサーバベースの再構成可能ハードウエアユニットにアクセスし得る。このアクセスが時間共有プロセス(スケジューラが複数のユーザのアクセス優先順位を決定し、ジョブをスワップし、そして競合スケジューリングされたユーザ間のハードウエアモデルアクセスを選択的にロックするプロセス)を介して達成される。あるシナリオでは、各ユーザは、はじめて、彼/彼女と異なるユーザ設計を再構成可能ハードウエアモデルにマッピングするためにアクセスし得、この場合、システムがソフトウエアおよびハードウエアモデルを生成するためにこの設計をコンパイルし、クラスタリング動作を実行し、配置およびルーティング動作(place−and−route operation)を実行し、ビットストリーム構成ファイルを生成し、そして再構成可能ハードウエアユニットにてFPGAチップを再構成し、これによりユーザの設計のハーウエア部分をモデリングする。あるユーザがハードウエアモデルを用いて自分の設計をアクセラレーションさせ、ソフトウエアシミュレーションのために自分のメモリにハードウエアの状態をダウンロードした場合、このハードウエアユニットがアクセスのために別のユーザによって解放され得る。
【0054】
サーバにより、複数のユーザまたはプロセスがアクセラレーションおよびハードウエア状態スワッピング目的のために再構成可能ハードウエアユニットにアクセスできる。シミュレーションサーバは、スケジューラ(scheduler)、1以上のデバイスドライバおよび再構成可能ハードウエアユニットを含む。シミュレーションサーバのスケジューラは、割り込みラウンドロビンアルゴリズム(preemptive round robin algorithm)に基づいている。サーバスケジューラは、シミュレーションジョブキューテーブル、プライオリティソータ(priority sorter)およびジョブスワッパを含む。本発明の回復および再生機能は、非ネットワークマルチプロセッシング環境およびネットワークマルチユーザ環境(これらの環境では、以前のチェックポイント状態データがダウンロードされ得、このチェックポイントに関連する全体のシミュレーション状態が再生デバッギングまたはサイクル毎のステッピングのために回復され得る)を容易にする。
【0055】
F.メモリシミュレーション
本発明のメモリシミュレーションまたはメモリマッピングの局面は、ユーザ設計の構成されたハードウエアモデル(再構成可能ハードウエアハードウエアユニットのFPGAチップのアレイにプログラミングされた)の種々のメモリブロックを管理するために、シミュレーションシステムに効率的な方法を提供する。本発明のメモリシミュレーション局面は、ユーザの設計に関連する多くのメモリブロックが、ユーザの設計を構成してモデリングするために用いられる論理デバイスの代わりにシミュレーションシステムのSRAMメモリデバイスにマッピングされる構造およびスキームを提供する。メモリシミュレーションシステムがメモリ状態機械、評価状態機械および次の(1)〜(3)を制御してインターフェースをとるためのこれらに関連する論理を含む。(1)メインコンピューティングシステムおよびこれに関連するメモリシステム、(2)シミュレーションシステムのFPGAバスに結合されるSRAMメモリデバイス、および(3)構成されてプログラミングされたユーザ設計(デバッグ中)を含むFPGA論理デバイス。本発明の1実施形態によるメモリシミュレーションシステムの動作は全体的に以下の通りである。シミュレーション書き込み/読み出しサイクルが3つの期間(DMAデータ転送、評価およびメモリアクセス)に分割される。
【0056】
メモリシミュレーションシステムのFPGA論理デバイス側は、次の(1)および(2)を処理にするためにユーザ設計のユーザ自身のメモリインターフェースとインターフェースをとるために、評価状態機械、FPGAバスドライバおよび各メモリブロックNに対する論理インターフェースを含む。(1)FPGA論理デバイス間のデータ評価、および(2)FPGA論理デバイスとSRAMメモリデバイスとの間の書き込み/読み出しメモリアクセス。FPGA論理デバイス側との関係において、FPGA I/Oコントローラ側は、メモリ状態機械と、(1)メインコンピューティングシステムとSRAMメモリデバイスとの間、および(2)FPGA論理デバイスとSRAMメモリデバイスとの間のDMA、書き込みおよび読み出し動作を処理するためのインターフェース論理とを含む。
【0057】
G.コ−ベリフィケーションシステム
本発明の1実施形態は、再構成可能なコンピューティングシステム(以下の「RCCコンピューティングシステム」)および再構成可能なコンピューティングハードウエアレイ(以下の「RCCハードウエアレイ」)を含むコ−ベリフィケーションシステムである。いくつかの実施形態において、ターゲットシステムおよび外部I/Oデバイスは、ソフトウエアにおいてモデリングされ得るので必要でない。他の実施形態において、ターゲットシステムおよび外部I/Oデバイスは、シミュレーションされたテストベンチデータではなく、速さを得てかつ実際のデータを用いるためにコ−ベリフィケーションシステムに実際に接続される。したがって、コ−ベリフィケーションシステムは、実際のターゲットシステムおよび/またはI/Oデバイスを用いつつ、ユーザの設計のソフトウエア部分およびハードウエア部分をデバッグする機能性と共にRCCコンピューティングシステムおよびRCCハードウエアレイを組み込むことができる。
【0058】
RCCコンピューティングシステムはまた、クロック論理(クロックエッジ検出およびソフトウエアクロック生成用の論理)、ユーザ設計をテストするテストベンチプロセス、ユーザが実際の物理的なI/Oデバイスを用いるのではなく、ソフトウエアにおいてモデリングすることを決定する任意のI/Oデバイスのデバイスモデルを含む。もちろん、ユーザが1デバッグセッション内に実際のI/OデバイスおよびモデリングされたI/Oデバイスを用いることを決定し得る。ソフトウエアクロックは、ターゲットシステムおよび外部I/Oデバイスの外部クロック源として機能するように外部インターフェースに提供される。このソフトウエアクロックの使用は、入出力するデータを処理するために必要な同期化を提供する。RCCコンピューティングシステム生成ソフトウエアクロックはデバッグセッションにおいて時間ベースであるので、シミュレーションされかつハードウエアクセラレーションされたデータがコ−ベリフィケーションシステムと外部インターフェースとの間で伝達される任意のデータと同期化される。
【0059】
ターゲットシステムおよび外部I/Oデバイスがコ−ベリフィケーションシステムに結合されている場合、ピン出力データ(pin−out data)はコ−ベリフィケーションシステムとその外部インターフェイスとの間で提供されなければならない。コ−ベリフィケーションシステムは、(1)RCCコンピューティングシステムとRCCハードウエアレイとの間、および(2)外部インターフェース(ターゲットシステムおよび外部I/Oデバイスに結合される)とRCCハードウエアレイとの間のトラフィック制御を提供する制御論理を含む。なぜなら、RCCコンピューティングシステムがソフトウエアの設計全体のモデル(RCCハードウエアレイにおいてモデリングされたユーザ設計の部分を含む)を有するので、RCCコンピューティングシステムはまた外部インターフェースとRCCハードウエアレイとの間で通過する全てのデータを有しなければならない。制御論理がRCCコンピューティングシステムがこれらのデータにアクセスを有することを確実にする。
【0060】
II.システムの記述
図1は、本発明の1実施形態の高級レベルの概要(high level overview)を示す。ワークステーション10は、PCIバスシステム50を介して再構成可能ハードウエアモデル20およびエミュレーションインターフェース30に結合される。再構成可能ハードウエア20は、ケーブル61と同様に、PCIバス50を介してエミュレーションインターフェース30に結合される。ターゲットシステム40は、ケーブル60を介してエミュレーションインターフェースに結合される。他の実施形態において、エミュレーションインターフェース30およびターゲットシステム40を含むインサーキットエミュレーションセットアップ70(点線で描かれたボックスで示される)は、ターゲットシステムの環境内のユーザの回路設計のエミュレーションが特定のテスト/デバッグセッションの間に望まれない場合、このセットアップにおいて提供されない。インサーキットエミュレーションセットアップ70なしで、再構成可能ハードウエアモデル20がPCIバス50を介してワークステーション10と通信する。
【0061】
インサーキットエミュレーションセットアップ70と組み合わせて、再構成可能ハードウエア20がターゲットシステムのいくつかの電子サブシステム(electronic subsystem)のユーザの回路設計を真似るかまたは模倣する。ターゲットシステムの環境内の電子サブシステムのユーザの回路設計の正しい動作を確実にするために、ターゲットシステム40とモデリングされた電子サブシステムとの間の入出力信号が評価用の再構成可能ハードウエアモデル20に提供されなければならない。そこで、再構成可能ハードウエアモデル20から入出力するターゲットシステム40の入出力信号がエミュレーション30とPCIバス50を介してケーブル60を介して伝達される。あるいは、ターゲットシステム40の入力/出力信号がエミュレーションインターフェース30とケーブル61とを介して再構成可能ハードウエアモデル20に伝達され得る。
【0062】
制御データおよびいくつか実質的なシミュレーションデータが再構成可能ハードウエアモデル20とワークステーション10との間でPCIバスを介して通過する。実際に、ワークステーション10は、全体的なSエミュレーションシステムの動作を制御し、そして再構成可能ハードウエアモデル20へのアクセス(読み出し/書き込み)を有さなければならないソフトウエアカーネルを走行させる。
【0063】
コンピュータ、キーボード、マウス、モニタおよび適切なバス/ネットワークインターフェース付きのワークステーション10は、ユーザが電子システムの回路設計を記載するデータを入れて、変更することを可能にする。例示的なワークステーションは、Sun MicrosystemsのSPARCまたはULTRA−SPARCワークステーションまたはIntel/Microsoftベースのコンピューティングステーションを含む。当業者に知られているように、ワークステーション10は、CPU11、ローカルバス12、ホスト/PCIブリッジ13、メモリバス14およびメインメモリ15を含む。種々のソフトウエアシミュレーション、ハードウエアクセラレーションによるシミュレーション、インサーキットエミュレーションおよび本発明のポストシミュレーション解析局面がワークステーション10、再構成可能ハードウエアモデル20およびエミュレーション30に提供される。ソフトウエアに具体化されたアルゴリズムは、テスト/デバッグセッションの間にメインメモリ15に格納され、そしてワークステーションのオペレーティングシステムの経由のもとのCPU11を介して実行される。
【0064】
当業者に知られているように、オペレーティングシステムがスタートアップファームウエアによってワークステーション10のメモリにロードされた後、制御が必要なデータ構造をセットアップするために開始するための初期化コードに移り、そしてデバイスドライバをロードし、初期化する。次いで、制御は、コマンドラインインタプリタ(ユーザに走行されるプログラムへのプロンプトが与える)(CLI)移される。次いで、オペレーティングシステムは、プログラムを走行するために必要なメモリ量を決定し、メモリブロックを配置するか、またはメモリのブロックに割り当て、そして直接的にまたはBIOSを介してメモリにアクセスする。メモリローデングプロセスの完了後、アプリケーションプログラムが実行し始める。
【0065】
本発明の1実施形態は、Sエミュレーション用の特定のアプリケーションプログラムである。このプログラムの実行の過程の間、このアプリケーションプログラムがオペレーティングシステムから多数のサービスを要求し得る。これらの多数のサービスは、ディスクファイルから読み出し、ディスクファイルに書き込み、データ通信を実行し、そしてディスプレイ/キーボード/マウスとインターフェースをとることを含むが、これらに限定されない。
【0066】
ワークステーション10は、ユーザが回路設計データを入力し、回路設計データを編集し、結果を入手しながらシミュレーションおよびエミュレーションの進展をモニタリングし、そして本質的にはシミュレーションおよびエミュレーションプロセスを制御することを可能にする適切なユーザインターフェースを有する。図1に示されていないが、ユーザインターフェースは、ユーザアクセス可能メニュ駆動オプション(user−accessible menu−driven option)およびコマンドセット(キーボードおよびマウスで入力可能で、モニタで眺められ得る)を含む。通常、ユーザは、キーボード90付のコンピューティングステーション80を用いる。
【0067】
ユーザは通常、電子システムの特定の回路設計を作成し、自分の設計されたシステムのHDL(常に、構造化されたRTLレベル)コードの記載をワークステーション10に入力する。本発明のSエミュレーションシステムは、ソフトウエアとハードウエアとの間のモデリングをパーティションするために、他の動作の間で、コンポーネントタイプ解析を実行する。Sエミュレーションシステムは、ソフトウエアにおいて、挙動、RTLおよびゲートレベルコードをモデリングする。ハードウエアモデリングのために、このシステムがRTLおよびゲートレベルコードをモデリングし得る;しかし、RTLレベルがハードウエアモデリングの前にゲートレベルに合成されなければならない。ゲートレベルコードは、ハードウエアモデリング用の使用可能ソース設計データベースフォーマット(usable source design database format)の中で直接的に処理され得る。RTLおよびゲートレベルコードを用いて、システムがコンポーネントタイプ解析を自動的に実行し、パーティションステップを完了する。ソフトウエアコンパイル時間の間のパーティション解析に基づいて、システムがハードウエアクセラレーションを介しての高速シミュレーションのために、回路設計のある部分をハードウエアにマッピングする。ユーザはまた、現実環境インサーキットエミュレーションのために、モデリングされた回路設計をターゲットシステムに結合し得る。ソフトウエアシミュレーションおよびハードウエアクセラレーションエンジンがソフトウエアカーネルを介して緊密に結合されるので、次いでユーザが、テスト/デバッグプロセスが完了するまで、ソフトウエアシミュレーションを用いつつ、全体の回路設計のシミュレーションを実行し、マッピングされた回路設計のハードウエアモデルを用いることによってテスト/デバッグプロセスをアクセラレーションし、シミュレーション部分に戻り、ハードウエアクセラレーションに戻り得る。ソフトウエアシミュレーションとハードウエアクセラレーションの間をサイクル毎およびユーザの競合でスイッチングする能力がこの実施形態の価値のある特長の1つである。この機能は、種々のポイントを検査し、その後、回路設計をデバッグするために、ハードウエアクセラレーションモードを用い、次いでソフトウエアシミュレーションを用いつつ、ユーザが特定のポイントまたはサイクルに非常に高速で行くことを可能にすることにより、デバッグプロセスにおいて特に有用である。さらに、Sエミュレーションシステムは、コンポーネントの内部の実現状態がハードウエアまたはソフトウエア内にあるか否かと関係なく、全てのコンポーネントをユーザが見れるようにする。Sエミュレーションシステムは、ユーザがこのような読み出しを要求する場合、ハードウエアモデルからレジスタ値を読み出し、ソフトウエアモデルを用いて組み合わせコンポーネントを再構成することによってこれを達成する。これらと他の特長が本明細書中に後により十分に議論される。
【0068】
ワークステーション10がバスシステム50に結合される。バスシステムは、ワークステーション10、再構成可能ハードウエアモデル20およびエミュレーションインターフェース30等の種々のエージェントが動作上に共に結合されることを可能にする任意の利用可能なバスシステムであり得る。好適には、バスシステムは、実時間またはほぼ実時間(near real−time)をユーザに提供するのに十分に高速である。このようなバスシステムの1つが、周辺コンポーネント相互接続(Peripheral Component Interconnect)(PCI)規格(参考のために本明細書中で援用される)で記述されたバスシステムである。現在、PCI規格の改正版(revision)2.0が33MHzバス速度を提供する。改正版2.1は66MHzバス速度を可能にする(support)。したがって、ワークステーション10、再構成可能ハードウエアモデル20およびエミュレーションインターフェース30がPCI規格と適合し得る。
【0069】
1実施形態において、ワークステーション10と再構成可能ハードウエアモデル20との間の通信がPCIバス上で処理される。他のPCI適合デバイスはこのバスシステムにおいて見出され得得る。以上のデバイスは、ワークステーション10、再構成可能ハードウエアモデル20およびエミュレーションインターフェース30と同一のレベルまたは他のレベルにてPCIバスに結合され得る。PCIバス52等の、異なるレベルでの各PCIバスは、ある場合には、PCI対PCIブリッジ(PCI−to−PCIbridge)51を介して、PCI50等の別のPCIバスレベルに結合される。PCIバス52にて、2つのPCIデバイス53および54が互いに結合され得る。
【0070】
再構成可能ハードウエアモデル20は、ユーザの電子システム設計のハードウエア部分をモデリングするためにプログラム可能なように構成され、再構成され得るフィールドプログラマブルゲートアレイ(FPGA)チップを含む。この実施形態において、ハードウエアモデルが再構成可能である。すなわち、この実施形態では、手近の特定の計算(computation)またはユーザ回路設計に適合させるようにハードウエアを再構成できる。例えば、多くの加算器(adder)または乗算器が必要とされる場合、本システムが多くの加算器および乗算器を含むように構成される。他のコンピューティング素子または関数(function)が必要とされる場合、それらもまたシステム内にモデリングまたは形成され得る。このように、システムは、特定化された計算または論理動作を実行するために最適化され得る。ユーザが再構成可能システムはまた、製造、テストまたは使用中に生じる小さなハードウエアの欠陥(minor hardware defect)を処理できるように柔軟である。1実施形態において、再構成可能ハードウエアモデル20は、種々のユーザ回路設計およびアプリケーションのために計算リソースを提供するために、FPGAチップを構成するコンピューティング素子の2次元アレイを含み、ハードウエア構成プロセスのさらなる詳細が提供される。
【0071】
2つのこのようなFPGAがAlteraおよびXillinxによって販売されているチップを含む。いくつかの実施形態において、再構成可能ハードウエアモデルがフィールドプログラマブルデバイスの使用によって再構成可能になる。しかし、本発明の他の実施形態は、アプリケーション専用集積回路(ASIC)技術を用いて実現され得る。さらに、他の実施形態がカスタム集積回路の形態でもあり得る。
【0072】
通常のテスト/デバッグシナリオにおいて、再構成可能デバイスは、ユーザの回路設計のシミュレーション/エミュレーションを実行するように用いられるので、適切な変更が実際のプロトタイプの製造前に為され得る。しかし、いくつかの他の例では、再シミュレーションおよび再エミュレーションのたぶん非機能な回路設計を素早くかつコスト効果的にユーザが変化させることができないが、実際のASICまたはカスタム集積回路が用いられ得る。もっとも時には、このようなASICまたはカスタムICは、実際の非再構成可能チップによるエミュレーションが好適であり得るように既に製造さ競合ぐに利用可能である。
【0073】
本発明により、ワークステーションのソフトウエアは、外部ハードウエアモデルと一体化して、現存するシステムを超えるより高い程度の柔軟性、制御および性能をエンドユーザに提供する。シミュレーションおよびエミュレーションを走行するために、回路設計のモデルおよび関連パラメータ(例えば、入力テストベンチ刺激(stimulus)、全体システムの出力、中間結果)は、決定され、シミュレーションソフトウエアシステムに提供される。ユーザは、システム回路設計を定義するためにスキマティックキャプチャ(schematic capture)ツールまたは合成ツールのいずれかを用い得る。ユーザは、通常、スキマティック図(後に合成ツールを用いてHDL形式に変換される)で電子システムの回路設計を始める。HDLはまた、ユーザによって直接的に書き込まれ得る。例示的なHDL言語は、VerilogおよびVHDLを含む。しかし、他の言語も利用可能である。HDLで表される回路設計が多くの並列型コンポーネントを含む。各コンポーネントは、回路素子の挙動を定義するか、シミュレーションの実行を制御するかのいずれかであるコードシーケンスである。
【0074】
Sエミュレーションシステムは、上記のコンポーネントのタイプを決定するために上記のコンポーネントを解析し、コンパイラはソフトウエアおよびハードウエアにて異なる実行モデルを構築するようにこのコンポーネントタイプ情報を用いる。その後、ユーザが本発明のSエミュレーションシステムを用い得る。設計者は、シミュレーションを通じて、入力信号およびテストベクトルパターン等の種々の刺激をシミュレーション中のモデルに作用させることによって回路の精度を検証し得る。シミュレーションの間、回路が計画された挙動しなかった場合、ユーザが回路のスキマティック図またはHDLファイルを変更することによって回路を再定義する。
【0075】
本発明のこの実施形態の使用が図2のフローチャートに示される。アルゴリズムが工程100で開始する。システムにHDLファイルをロードした後、システムは、回路設計を適切なハードウエアモデルにコンパイルし、パーティションし、マッピングする。コンパイル、パーティションおよびマッピング工程が以下でより詳細に説明される。
【0076】
シミュレーションが走行する前に、システムは、ハードウエアクセラレーションモデルが機能し得る前にソフトウエア上の未知の「x」値の全てを除去するようにリセットシーケンスを走行させなければならない。本発明の1実施形態は、4状態値(「00」が論理lowであり、「01」が論理highであり、「10」が「z」であり、「11」が「x」である)をバス信号に提供するように2ビット幅データパスを用いる。当業者に知られているように、ソフトウエアモデルが「0」、「1」、「x」(バス衝突かまたは未知の値)および「z」(ドライバがないか、または高いインピーダンスでない)を処理し得る。対照的に、特定の応用コード(appllicable code)に依存して変わるリセットシーケンスがレジスタ値を全て「0」または全て「1」にリセットするので、ハードウエアが未知の値「x」を処理できない。
【0077】
工程105において、ユーザが回路設計のシミュレーションを実行するか否かを決定する。通常、まず、ユーザがソフトウエアシミュレーションについてシステムを開始させる。したがって、工程105の決定が「はい(YES)」である場合、ソフトウエアシミュレーションが工程110で始まる。
【0078】
工程115に示されるように、ユーザは値を検査するためにシミュレーションを停止させることができる。実際、ユーザは、ハードウエアクセラレーションモード、ICEモードおよびポストシミュレーションモードにおいて、工程115から種々のノードに伸びる点線によって示されたテスト/デバッグセッションの間の任意の時間にシミュレーションを停止させることができる。ユーザは、実行工程115を実行することによって工程160に進む。
【0079】
停止後、システムカーネルは、ユーザが組み合わせコンポーネント値を検査することを望む場合、ハードウエアレジスタコンポーネントの状態を読み返し、これにより組み合わせコンポーネントを含むソフトウエアモデル全体を再生成する。ソフトウエアモデル全体を復帰させた後、ユーザがシステムの任意の信号値を検査し得る。停止および検査後、ユーザがシミュレーション専用モードまたはハードウエアモデルアクセラレーションモードの中に走行し続ける。フローチャートに示されるように、工程115が停止/値検査ルーチンに分岐する。停止/値検査ルーチンが工程160にて開始する。工程165にて、ユーザがこのポイントにてシミュレーションを停止し、値を検査するか否かを決定しなければならない。工程165の決定が「はい」である場合、工程170では、現在進行中であり得るシミュレーションを停止し、回路設計の訂正をチェックするために種々の値を検査する。工程175にて、アルゴリズムは、工程115で分岐したポイントに戻る。ここで、ユーザがテスト/デバッグセッションの残りのために値のシミュレーションをしかつ停止/検査し続けるか、またはインサーキットエミュレーション工程に進み得る。
【0080】
同様に、工程105の決定が「いいえ(NO)」である場合、アルゴリズムがハードウエアクセラレーション決定工程120に進む。工程120にて、ユーザがモデリングされた回路設計のハードウエア部分を介してシミュレーションをアクセラレーションすることによってテスト/デバッグプロセスをアクセラレーションするか否かを決定する。工程120の決定が「はい」である場合、ハードウエアモデルアクセラレーションが工程125にて行われる。システムコンパイルプロセスの間、Sエミュレーションシステムがいくつかの部分をハードウエアモデルにマッピングした。ここで、ハードウエアクセラレーションが望まれる場合、システムがレジスタおよび組み合わせコンポーネントをハードウエアモデルに移動させ、入力値および評価値をハードウエアモデルに移動させる。したがって、ハードウエアクセラレーションの間、評価がアクセラレーションされた速度にて長期間ハードウエアモデルの中で行われる。カーネルは、ハードウエアモデルにテストベンチ出力を書き込み、ソフトウエアクロックを更新し、次いで、サイクル毎にハードウエアモデル出力を読み出す。ユーザによって所望される場合、ユーザの回路設計のソフトウエアモデル全体(回路設計全体)からの値は、レジスタ値および組み合わせコンポーネントを出力することにより、レジスタ値で組み合わせコンポーネントを再生成することにより、利用可能となり得る。これらの組み合わせコンポーネントを再生成するためのソフトウエアの介入(intervention)の必要性のために、ソフトウエアモデル全体の値の出力が1サイクル毎に提供されない;むしろ、ユーザがこのような値を望む場合のみにこのような値がユーザに提供される。この明細書は組み合わせコンポーネントの再生成プロセスを以下で説明する。
【0081】
再び、ユーザが工程115によって示されたような任意の時間にハードウエアクセラレーションモードを停止することができない。ユーザが停止することを望む場合、アルゴリズムが工程115および160に進み、停止/値検査ルーチンに分岐する。ここで、工程115内のように、ユーザは、任意の時間に、ハードウエアクセラレーションシミュレーションプロセスを停止し、シミュレーションプロセスから生じる値を検査できるか、またはユーザがハードウエアクセラレーションシミュレーションプロセスを続けることができる。停止/値検査ルートは、シミュレーションを停止するという関連で上述された工程160、165、170および175に分岐する。工程125の後のメインルートに戻ると、ユーザが工程135でハードウエアクセラレーションシミュレーションを続けることを決定し得るか、代わりに純粋のシミュレーション(pure simulation)を実行することを決定し得る。ユーザがさらにシミュレーションを実行することを望む場合、アルゴリズムが工程105に進む。ユーザがさらにシミュレーションを実行することを望まない場合、アルゴリズムが工程140にてポストシミュレーション解析に進む。
【0082】
工程140にて、Sエミュレーションシステムが多数のポストシミュレーション解析特性を提供する。システムがハードウエアモデルに全ての入力をログする。ハードウエアモデル出力について、システムがユーザ定義ロギング頻度(例えば、1/10,000レコード/サイクル)でハードウエアレジスタコンポーネントの全ての値をログする。ロギング頻度は、出力値が何回記録されるかを決定する。1/10,000レコード/サイクルのロギング頻度について、出力値が10,000サイクルに1回記録される。ロギング頻度が高くなればなるほど、後のポストシミュレーション解析のために多数の情報が記録される。選択されたロギング頻度がSエミュレーション速度と因果関係を有するので、ユーザがロギング頻度を注意して選択する。システムはさらなるシミュレーションが実行され得る前にメモリへのI/O動作を実行することによって出力データを記録するために時間およびリソースを費やさなければならないので、より高いロギング頻度はSエミュレーション速度を減少する。
【0083】
ポストシミュレーション解析について、ユーザがシミュレーションが望まれる特定のポイントを選択する。次いで、ユーザは、値の変化および全てのハードウエアコンポーネントの内部状態を計算するためにハードウエアモデルへの入力記録を伴って、ソフトウエアシミュレーションを走行させることによって、Sエミュレーション後に解析を実行できる。ハードウエアクセレータは、シミュレーション結果を解析するために選択されたロギングポイントからデータのシミュレーションを実行するように用いられることに留意する。このポストシミュレーション解析方法がポストシミュレーション用の任意のシミュレーション波形ビューワにリンクできる。以下にさらに詳細な説明される。
【0084】
工程145にて、ユーザは、そのターゲットシステム環境内でシミュレーションをされた回路設計のエミュレーションを実行するように選択できる。工程145の決定が「いいえ」である場合、アルゴリズムが終了し、Sエミュレーションプロセスが工程155にて終了する。ターゲットシステムのエミュレーションが望まれる場合、アルゴリズムが工程150に進む。この工程はエミュレーションインターフェースボードを駆動し、ケーブルおよびチップピンアダプタをターゲットシステムにプラグし、ターゲットシステムからシステムI/Oを入手するためにターゲットシステムを走行させることを含む。ターゲットシステムからのシステムI/Oは、ターゲットシステムと回路設計のエミュレーションとの間の信号を含む。エミュレーションされた回路設計は、ターゲットシステムから入力信号を受信し、この入力信号を処理し、さらなる処理のためにこの入力信号をSエミュレーションシステムに送信し、恐らく処理された信号をターゲットシステムに出力する。逆に、エミュレーションされた回路設計は、出力信号をターゲットシステム(出力信号を処理し、処理された信号を出力してエミュレーションをされた回路設計に戻す)に送信する。このように、回路設計の性能は、本来のターゲットシステム環境にて評価され得る。ターゲットシステムのエミュレーションをした後、ユーザが回路設計を確証するか、非機能局面を示すという結果を存する。このポイントにて、ユーザが工程135にて示されるように再びシミュレーション/エミュレーションを実行し、回路設計を変更するために完全に停止するか、確証された回路設計に基づいて集積回路製造に進み得る。
【0085】
III.シミュレーション/ハードウエアクセラレーションモード
本発明の1実施形態に従ってコンパイル時間帯と走行時間帯におけるソフトウエアコンパイルおよびハードウエア構成の高級レベルブロック図(high level diagram)が図3に示される。図3は、情報の2つのセットを示す。情報の一方のセットは、コンパイル時間とシミュレーション/エミュレーション走行時間との間に実行される動作を区別し、情報の他方のセットは、ソフトウエアモデルとハードウエアモデルとの間のパーティションを示す。手始めに、本発明の1実施形態によるSエミュレーションシステムは、入力データ200としてユーザ回路設計を必要とする。ユーザ回路設計はHDLファイルのある形式で行われる(例えば、Verilog、VHDL)。Sエミュレーションシステムは、HDLファイルを構文解析するので、挙動レベルコード、レジスタ転送レベルコードおよびゲートレベルコードは、Sエミュレーションシステムによって使用可能な形態に帰着され得る。システムがフロントエンド処理工程205に開けてソース設計データベースを生成する。ここにおいて処理されたHDLファイルがSエミュレーションシステムによって使用可能である。構文解析プロセスは、ASCIIデータを内部バイナリデータ構造に変換し、このことは当業者に公知である。本明細書中で援用されるALFRED V.AHO,RAVI SETHI,AND JEFFREY D.ULLMAN,COMPILERS:PRINCIPLES,TECHNIQUES,AND TOOLS(1988)を参照する。
【0086】
コンパイル時間がプロセス225によって表され、走行時間がプロセス/要素230によって表される。プロセス225によって示されるようなコンパイル時間の間に、Sエミュレーションシステムは処理されたHDLファイルをコンポーネントタイプ解析を実行することによってコンパイルする。コンポーネントタイプ解析は、HDLコンポーネントを組み合わせコンポーネント、レジスタコンポーネント、クロックコンポーネント、メモリコンポーネントおよびテストベンチコンポーネントに分類する。本質的に、システムはユーザ回路設計を制御および評価コンポーネントにパーティションする。
【0087】
Sエミュレーションコンパイラ210は、本質的に、シミュレーションの制御コンポーネントをソフトウエアにマッピングし、評価コンポーネントをソフトウエアおよびハードウエアにマッピングする。コンパイラ210がHDLコンポーネント全てのためにソフトウエアモデルを生成する。ソフトウエアモデルがコード215にてキャストされる。さらに、Sエミュレーション210は、HDLファイルのコンポーネントタイプ情報を用い、ライブラリまたはモジュールジェネレータからハードウエア論理ブロック/要素を選択または生成し、所定のHDLコンポーネントのためにハードウエアを生成する。最終的に生じるのは所謂「ビットストリーム(bit stream)」構成ファイル220である。
【0088】
走行時間に備えて、コード形式のソフトウエアモデルは、本発明の1実施形態によるSエミュレーションプログラムに関連したアプリケーションプログラムが格納されるメインメモリに格納される。このコードは汎用プロセッサまたはワークステーション240で処理される。実質的に現時点で、ハードウエアモデル用の構成ファイル220は、ユーザ回路設計を再構成ハードウエアボード250にマッピングするために用いられる。ここで、ハードウエア内でモデリングされてきた回路設計のこれらの部分は、再構成可能ハードウエアボード250のFPGAチップにマッピングされ、パーティションされる。
【0089】
上述したように、ユーザテストベンチ刺激、テストベクトルデータおよび他のテストベンチリソース235は、シミュレーションの目的のために汎用プロセッサまたはワークステーション240に適用される。さらに、ユーザは、ソフトウエア制御によって回路設計のエミュレーションを実行し得る。再構成可能ハードウエアボード250は、ユーザのエミュレーションをされた回路設計を含む。このSエミュレーションシステムはソフトウエアシミュレーションとハードウエアエミュレーションとの間に選択的にユーザがスイッチングできる機能と、シミュレーションまたはエミュレーションプロセスのいずれかを任意の時間にサイクル毎に停止させる機能とを有し、これにより、レジスタか組み合わせコンポーネントのいずれであれ、モデルの全てのコンポーネントからの値を検査する。したがって、Sエミュレーションシステムは、シミュレーションのためにテストベンチ235とプロセッサ/ワークステーション240との間、およびエミュレーションのためにデータバス245とプロセッサ/ワークステーションを経由してテストベンチ235と再構成可能ハードウエアボード250との間でデータを通過させる。ユーザターゲットシステム260が含まれる場合、エミュレーションデータが再構成可能ハードウエアボード250とターゲットシステムとの間にエミュレーションインターフェース255およびデータバス245を介して通過できる。カーネルは、プロセッサ/ワークステーション240のメモリのソフトウエアシミューションモデルの中に存在するので、データは、必要な場合、プロセッサ/ワークステーション240と再構成可能ハードウエア250との間でデータバス235を介して通過する。
【0090】
図4は、本発明の1実施形態によってコンパイルプロセスのフローチャートを示す。コンパイルプロセスが図3のプロセス205および210として表される。図4のコンパイルプロセスは工程300にて開始する。工程301は、フロントエンド情報を処理する。ここで、ゲートレベルHDLコードが生成される。ユーザは、このコードを直接的にハンドライティングするか、コードのゲートレベルHDL表示を生成するために、ある形態のステマティックまたは合成ツールを用いることで、初期の回路設計をHDL形式に変換される。Sエミュレーションシステムは、バイナリフォーマットにHDLファイル(ASCIIフォーマット)を構文解析するので、挙動レベルコード、レベル転送レベル(RTL)コードおよびゲートレベルコードは、Sエミュレーションシステムによって使用可能な内部データ構造形式に帰着され得る。システムは、構文解析されたHDLコードを含むソース設計データベースを生成する。
【0091】
工程302は、タイプリソース303に示されるように、組み合わせコンポーネント、レジスタコンポーネント、クロックコンポーネント、メモリコンポーネントおよびテストベンチコンポーネントにHDLコンポーネントコンポーネントを分類することによってコンポーネントタイプ解析を実行する。Sエミュレーションシステムは、レジスタおよび組み合わせコンポーネント用にハードウエアモデルを生成する(いくつかの例外は以下で述べられる)。テストベンチおよびメモリコンポーネントがソフトウエアにマッピングされる。クロックコンポーネント(例えば、派生されたクロック(derived clock))がハードウエアにモデリングされるものもあり、ソフトウエア/ハードウエア境界(例えば、ソフトウエアクロック)に常駐するものもある。
【0092】
組み合わせコンポーネントは、この出力値が現在の入力値の関数であり、入力値の履歴に依存しない。状態に無関係な(stateless)論理コンポーネントであり、組み合わせコンポーネントの例は、プリミティブゲート(例えば、AND、OR、XOR、NOT)、セレクタ、加算器、乗算器、シフタ(shifter)およびバスドライバを含む。
【0093】
レジスタコンポーネントは、単一の格納コンポーネントである。レジスタの状態遷移はクロック信号によって制御される。エッジが検出される場合に状態を変化させ得るレジスタの1形式はエッジトリガ型である(edge−triggered)。例はフリップフロップ(Dタイプ、JKタイプ)およびレベル検知ラッチ(level−sensitive latch)を含む。
【0094】
クロックコンポーネントは、周期的な信号を論理デバイスに送達し、これにより論理デバイスの挙動を制御するコンポーネントである。通常、クロック信号はレジスタの更新を制御する。一次クロックは、セルフタイミングテストベンチプロセス(self−timed test−bench process)から生成される。例えば、Verilogにおけるクロック生成用の通常のテストベンチプロセスは以下の通りである:
always begin
Clock=0;
#5;
Clock=1;
#5;
end;
このコードによると、クロック信号は最初に論理「0」である。5タイム単位(5time units)後、クロック信号が論理「1」に変化する。5タイム単位後、クロック信号が論理「0」に反転して戻る。通常、一次クロック信号がソフトウエアにて生成され、わずかな(すなわち、1−10)一次クロックは通常のユーザ回路設計に存在する。派生またはゲートされたクロックは、順番に一次クロックによって駆動される組み合わせ論理およびレジスタのネットワークから生成される。多数の(すなわち、1,000以上)派生されたクロックが通常のユーザ回路設計に存在する。
【0095】
メモリコンポーネントは、特定のメモリ位置の個々のデータにアクセスするためのアドレスおよび制御ラインを備えたブロック格納コンポーネントである。例はROM、非同期化RAMおよび同期化RAMを含む。
【0096】
テストベンチコンポーネントは、シミュレーションプロセスを制御し、モニタリングするために用いられるソフトウエアプロセスである。したがって、これらのコンポーネントは、テストの下では、ハードウエア回路設計の一部ではない。テストベンチコンポーネントは、クロック信号を生成し、シミュレーションデータを初期化し、ディスク/メモリからシミュレーションテストベクトルパターンを読み出すことによってシミュレーションを制御する。テストベンチコンポーネントはまた、値の変化をチェックし、値変化ダンプを実行し、信号値関係(signal value relation)のアサートされた制限をチェックし、ディスク/メモリに出力テストベクトルを書き込み、種々の波形ビューワおよびデバッガとインターフェースをとることによってシミュレーションをモニタリングする。
【0097】
Sエミュレーションシステムは、以下のようにコンポーネントタイプ解析を実行する。このシステムは、バイナリソース設計データベースを試験する。ソース設計データベースに基づいて、このシステムが上記のコンポーネントタイプの1つとして要素を特徴づけるか、分類し得る。連続的な割り当てステートメントが組み合わせコンポーネントとして分類される。プリミティブゲートは、言語定義(language definition)によるレジスタタイプの組み合わせタイプまたはラッチ形式のいずれかである。初期化コードがテストベンチの初期化タイプとして扱われる。
【0098】
ネット(net)を用いることなく、ネットを駆動させるプロセスは、常に、テストベンチのドライバタイプである。ネット(net)を用いることなく、ネットを読み出すプロセスは、常に、テストベンチのモニタタイプである。遅延制御または複数のイベントに関連するプロセスは、常に、テストベンチの汎用タイプである。
【0099】
単一イベント制御および単一ネットの駆動に関する常時のプロセスは、以下の内の1つであり得る:(1)イベント制御がエッジトリガされたイベントである場合、したがってプロセスはエッジトリガされたタイプのレジスタコンポーネントである。(2)プロセスにおいて駆動されるネットが全ての可能な実行経路の中で定義されない場合、したがってネットはラッチタイプのレジスタである。(3)プロセスにおいて駆動されるネットが全ての可能な実行経路で定義される場合、したがってネットは組み合わせコンポーネントである。
【0100】
単一イベント制御であるが多数ネットの駆動に関する常時のプロセスは、個々のコンポーネントタイプを個別に駆動させるために個別に各ネットを駆動させるいくつかのプロセスに分解され得る。次いで、分解されたプロセスは、コンポーネントタイプを決定するために用いられ得る。
【0101】
工程304は、コンポーネントタイプに関わらず、すべてのHDLコンポーネントに対してのソフトウエアモデルを生成する。適切なユーザ駆動インターフェースによって、ユーザは、完全なソフトウエアモデルを用いて回路設計全体のシミュレーションをできる。テストベンチプロセスは、刺激入力を駆動させ、ベクトルパターンをテストし、シミュレーション全体を制御し、シミュレーションプロセスをモニタリングするために用いられる。
【0102】
工程305は、クロック解析を実行する。クロック解析が2つの一般的な工程を包含する。(1)クロック抽出および逐次的なマッピング、および(2)クロックネットワーク解析。クロック抽出および逐次的なマッピング工程は、ユーザのレジスタコンポーネントをSエミュレーションシステムのハードウエアレジスタモデルにマッピングし、次いで、システムのハードウエアレジスタコンポーネントからクロック信号を抽出する。クロックネットワーク解析工程は、抽出されたクロック信号に基づいて一次クロックおよび派生されたクロックを決定することおよびゲートされたクロックネットワークおよびゲートデータネットワークを分離することを含む。さらに詳細な説明は図16にて提供される。
【0103】
工程306は常駐(residence)選択を実行する。システムは、ユーザに関連して、ハードウエアモデルのためのコンポーネントを選択する。すなわち、ユーザの回路設計のハードウエアモデルにて実現され得る可能なハードウエアコンポーネントの一般的なものであり、いくつかのハードウエアコンポーネントは種々の理由からハードウエアにてモデリングされない。これらの理由は、コンポーネントタイプ、ハードウエアリソース制限(すなわち、浮動点動作および大規模乗算動作がソフトウエアに存在している)、シミュレーションおよび通信オーバーヘッド(すなわち、テストベンチプロセス間の小さいブリッジ論理がソフトウエアに存在しており、テストベンチプロセスによってモニタリングされる信号がソフトウエアに存在している)およびユーザの嗜好を含む。性能およびシミュレーションモニタリングを含む種々の理由から、ユーザは、さもなければ、ハードウエアにてモデリングされる所定のコンポーネントをソフトウエアに存在するように課すことができる。
【0104】
工程307は、再構成可能ハードウエアエミュレーションボードに選択されたハードウエアモデルをマッピングする。特に、工程307は、ネットリストを取り出してマッピングし、回路設計を特定のFPGAチップにマッピングする。この工程は、論理素子を共にグループ分けまたはクラスタリングを行うことを包含する。次いで、システムは、唯一的なFPGAチップに各グループを割り当てるか、いくつかのグループを単一のFPGAチップに割り当てる。システムはまた、異なるFPGAチップにグループを割り当て得る。一般に、システムは、FPGAチップにグループを割り当てる。さらに詳細な説明が図6に関して下記に提供される。システムは、内部チップ通信オーバーヘッドを最小化するためにハードウエアモデルコンポーネントをFPGAチップのメッシュに配置する。1実施形態において、アレイは、FPGAの4×4アレイ、PCIインターフェースユニットおよびソフトウエアクロック制御ユニットを含む。FPGAのアレイは、このソフトウエアコンパイルプロセスの工程302−306にて以上で決定したようにユーザのハードウエア回路設計の一部を実現する。PCIインターフェースユニットは、再構成可能ハードウエアエミュレーションモデルがPCIバスを介してワークステーションと通信することを可能にする。ソフトウエアクロックは、FPGAのアレイに対する種々のクロック信号の競合条件を避ける。さらに、工程307は、ハードウエアモデル間の通信スケジュールによってFPGAチップにルーティングを行う。
【0105】
ステップ308は制御回路を挿入する。これらの制御回路は、DMAエンジンと通信するための、シミュレータへのI/O回路アドレスポインタおよびデータバス論理(図11、図12、および図14を参照して以下で説明される)、ならびに、ハードウエア状態遷移およびワイヤマルチプレクシングを制御するための評価制御論理(図19および図20を参照して以下に説明される)を含む。当業者に公知のように、ダイレクトメモリアクセス(DMA)ユニットは、周辺機器とメインメモリとの間のさらなるデータチャンネルを提供し、この周辺機器は、CPUを介することなくメインメモリに直接アクセス(すなわち、読み出し、書き込み)し得る。各FPGAチップにおけるアドレスポインタは、バスのサイズ制限を考慮して、ソフトウエアモデルとハードウエアモデルとの間でデータを移動させることを可能にする。評価制御論理は、実質的には、クロックおよびデータ入力がこれらのレジスタに入力する前に、アサートされるべきレジスタにクロックイネーブルが入力することを確実にする有限状態機械である。
【0106】
ステップ309は、ハードウエアモデルをFPGAチップにマッピングするための構成ファイルを生成する。本質的には、ステップ309は、回路設計コンポーネントを各チップにおける特定のセルまたはゲートレベルコンポーネントに割り当てる。ステップ307が、ハードウエアモデル群を特定のFPGAチップにマッピングすることを決定するが、ステップ309は、このマッピング結果を獲得し、各FPGAチップに対する構成ファイルを生成する。
【0107】
ステップ310は、ソフトウエアカーネルコードを生成する。このカーネルは、全体のSエミュレーション(SEmulation)システムを制御するソフトウエアコードのシーケンスである。このカーネルは、コードの部分がハードウエアコンポーネントを更新かつ評価することを要求するため、このポイントまで生成され得ない。ステップ309の後のみ、ハードウエアモデルへの適切なマッピングおよび発生したFPGAチップが生成する。より詳細な議論が図5を参照して以下に提供される。コンパイルは、ステップ311で終了する。
【0108】
図4を参照して上述されたように、ソフトウエアカーネルコードは、ソフトウエアモデルおよびハードウエアモデルが決定された後でステップ310において生成される。このカーネルは、全体のシステムの動作を制御するSエミュレーションシステムにおけるソフトウエアの一部である。このカーネルはソフトウエアシミュレーションの実行およびハードウエアエミュレショーンの実行を制御する。さらに、カーネルはハードウエアモデルの中心に常駐するために、シミュレータはエミュレータと統合される。他の公知のコ−シミュレーションシステムとは対照的に、本発明の一実施形態によるシミュレーションシステムは、外部からエミュレータとインタラクトするシミュレータを要求しない。カーネルの一実施形態は、図5に示される制御ループである。
【0109】
図5を参照すると、カーネルはステップ330で開始する。ステップ331は、初期化コードを評価する。ステップ332で開始し、決定ステップ339によってとぶ(bound)ことによって、制御ループが開始し、システムがアクティブテストベンチプロセスを観察しなくなるまで制御ループが繰り返し循環する。この場合、シミュレーションまたはエミュレーションセッションが完成される。ステップ332は、シミュレーションまたはエミュレーションのためのアクティブテストベンチコンポーネントを評価する。
【0110】
ステップ333は、クロックコンポーネントを評価する。これらのクロックコンポーネントは、テストベンチプロセスから生じる。通常、ユーザは、どのタイプのクロック信号がシミュレーションシステムに生成されるかを命令する。1つの例(コンポーネントタイプ解析に関して上述され、そこで再生された例)では、テストベンチプロセスにおいてユーザによって設計されたクロックコンポーネントは、以下のようになる。
【0111】
always begin
Clock=0;
#5;
Clock=1;
#5;
end;
このクロックコンポーネントの例において、ユーザは、論理「0」信号が最初に生成され、そして次に、5シミュレーション時間の後、論理「1」信号が生成されることを判定する。このクロック生成プロセスは、ユーザによって停止されるまで連続的に循環する。このシミュレーション時間は、カーネルによって進められる。
【0112】
決定ステップ334は、任意のアクティブクロックエッジが検出されるかどうかを問い合わせ、このステップは、ソフトウエアモデルおよび可能なハードウエアモデルにおいていくつかの種類の論理評価を生じさせる(エミュレーションが実行された場合)。アクティブクロックエッジを検出するためにカーネルが使用するクロック信号は、テストベンチプロセスからのクロック信号である。決定ステップ334が「いいえ」と評価する場合、カーネルはステップ337に進む。決定ステップ334が「はい」と評価する場合、その結果、レジスタおよびメモリを更新するステップ335に進み、組み合わせコンポーネントを伝達するステップ336に進む。クロック信号がアサートされた後、ステップ336は、実質的に、組み合わせ論理ネットワークを介して値を伝達するためのある時間を必要とする組み合わせ論理に注意する。一旦、値が組み合わせコンポーネントを介して伝達され、そして安定されると、カーネルはステップ337に進む。
【0113】
レジスタおよび組み合わせコンポーネントがハードウエアにおいてさらにモデル化され、それにより、カーネルは、Sエミュレーションシステムのエミュレータ部分を制御することに留意されたい。実際には、任意のアクティブクロックエッジが検出されたときはいつでも、カーネルは、ステップ334および335においてハードウエアモデルの評価を加速し得る。従って、従来技術とは異なり、本発明の一実施形態によるSエミュレーションシステムは、ソフトウエアカーネルを介して、そしてコンポーネントタイプ(例えば、レジスタ、組み合わせ)に基づいてハードウエアエミュレータを加速し得る。さらに、カーネルは、サイクルごとのソフトウエアモデルおよびハードウエアモデルの実行を制御する。本質的には、エミュレータハードウエアモデルは、シミュレーションカーネルを実行する、汎用プロセッサに対するシミュレーションコプロセッサとして特徴付けられ得る。このコプロッセッサは、シミュレーションタスクをスピードアップする。
【0114】
ステップ337は、アクティブベンチコンポーネントを評価する。ステップ338は、シミュレーション時間だけ進める。ステップ339は、ステップ332で開始する制御ループのための境界(boundary)を提供する。ステップ339は、任意のテストベンチプロセスがアクティブであるかどうかを決定する。任意のテストベンチプロセスがアクティブである場合、シミュレーションおよび/またはエミュレーションがさらに実行され、より多くのデータが評価されるべきである。従って、カーネルは、ステップ332までループして、任意のアクティブテストベンチコンポーネントを評価する。テストベンチプロセスがアクティブでない場合、その時、シミュレーションおよびエミュレーションプロセスが完了される。ステップ340は、シミュレーション/エミュレーションプロセスを終了する。要するに、カーネルは、全Sエミュレーションシステムの動作を制御するメイン制御ループである。任意のテストベンチプロセスがアクティブである限り、カーネルはアクティブテストベンチコンポーネントを評価し、クロックコンポーネントを評価し、レジスタおよびメモリを更新するクロックエッジを検出し、ならびに組み合わせ論理データを伝達し、シミュレーション時間だけ進める。
【0115】
図6は、ハードウエアモデルの再構成可能な基板(board)への自動的マッピングのための方法の一実施形態を示す。ネットリストファイルは、ハードウエア実現プロセスへの入力を提供する。このネットリストは論理機能およびその相互接続を説明する。ハードウエアモデル/FPGA実現プロセスは3つの独立したタスク(マッピング、配置、およびルーティング)を含む。一般的にこのツールは、「配置およびルーティング」ツールと呼ばれる。使用される設計ツールは、Viewlogic Viewdraw、スキマティックキャプチャシステム、Xilinx Xact配置およびルーティングソフトウエア、あるいは、Altera MAX+PLUS IIシステムであり得る。
【0116】
マッピングタスクは回路設計を論理ブロック、I/Oブロック、および他のFPGAリソースに分割する。フリップフロップおよびバッファのようないくつかの論理機能が対応するFPGAリソースに直接にマッピングされ得るが、組み合わせ論理等の他の論理機能は、マッピングアルゴリズムを用いて論理ブロックにおいて実現されなければならない。通常、ユーザは、最適な密度または最適な性能のためにマッピングを選択し得る。
【0117】
配置タスクは、マッピングタスクから論理ブロックおよびI/Oブロックを取り出すことと、および論理ブロックおよびI/OブロックをFPGAアレイ内部の物理領域に割り当てることを含む。現在のFPGAツールは通常、3つの技術(最小カット(mincut)、シミュレートアニーリング、および汎用フォースダイレクティッド緩和(general force−directed relaxation:GFDR))のいくつかの組み合わせを使用する。実質的に、これらの技術は、他の変数間において、相互接続の全ネット長または臨界信号経路のセットに沿う遅延に依存する種々のコスト関数に基づいて最適な配置を決定する。Xilinx XC4000シリーズのFPGAツールは、最初の配置に対する最小カット技術配置の後に続く配置の緻密な改良のためのGFDR技術の改変体を使用する。
【0118】
このルーティングタスクは、種々のマッピングされたブロックおよび配置されたブロックを相互接続するために使用されたルーティング経路を決定することを含む。1つのこのようなルータ(迷路(maze)ルータと呼ばれる)は、2点間の最短の経路を探し出す。ルーティングタスクは、チップ間の直接的な相互接続を提供するため、チップに関する回路の配置は重要である。
【0119】
初めにおいて、ハードウエアモデルは、ゲートネットリスト350またはRTL357のいずれかにおいて説明され得る。RTLレベルコードは、ゲートレベルネットリストにさらに合成され得る。マッピングプロセスの間、合成器サーバ360(Altera MAX+PLUS IIプログラム可能な論理開発ツールシステムおよびソフトウエア等)を使用して、マッピング目的のための出力ファイルを生成し得る。合成器サーバ360は、ユーザの回路設計コンポーネントとライブラリ361において見出された任意の標準的な既存の論理素子(例えば、標準的な加算器または標準的な乗算器)とを一致させ、任意のパラメータ化されかつ頻繁に使用された論理モジュール362(例えば、標準的ではないマルチプレクサまたは標準的ではない加算器)を生成し、そして、ランダム論理素子363(例えば、カスタマイズされた論理機能を実現するルックアップテーブルに基づく論理)を合成する能力を有する。さらに合成器サーバは、冗長論理および使用されていない論理を取り除く。実質的に出力ファイルは、ユーザの回路設計によって必要とされた論理を合成または最適化する。
【0120】
HDLのいくつかまたは全てがRTLレベルである場合、回路設計コンポーネントは、Sエミュレーションシステムが、Sエミュレーションレジスタまたはコンポーネントを用いてこれらのコンポーネントを容易にモデル化し得るような高い十分なレベルにおいて存在する。HDLのいくつかまたは全てがゲートネットリストレベルにおいて存在する場合、回路設計コンポーネントは、より回路設計特有になり得、ユーザ回路設計コンポーネントのSエミュレーションコンポーネントへのマッピングをより困難にする。従って、シンセサイザサーバは、標準的な論理素子またはランダム論理素子の改変体に基づいて任意の論理素子を生成することを可能にする。標準的な論理素子またはランダム論理素子の改変体は、これらの改変体またはライブラリ標準論理素子において任意の並列性(parallel)を有し得ない。
【0121】
回路設計がゲートネットリスト形態である場合、Sエミュレーションシステムは、グループ化またはクラスタリング動作351を最初に実行する。ハードウエアモデル構成は、クラスタリングプロセスに基づく。なぜなら、組み合わせ論理およびレジスタがクロックから分離されるためである。従って、共通の一次クロックまたはゲートクロック信号を共有する論理素子は、この素子を互いにグループ化し、チップ上に共に配置することによってより良好に提供され得る。クラスタリングアルゴリズムは、接続性駆動(connectivity driven)、階層的な抽出、および規則構造抽出に基づく。この記述が構造化されたRTL358において存在する場合、Sエミュレーションシステムは、論理機能分解動作359によって提示されるように、機能をより小さなユニットに分解し得る。任意の段において、論理合成または論理最適化が必要とされる場合、合成器サーバ360は、回路設計を、ユーザの命令の基づくより効率的な表示を変換することに利用可能である。クラスタリング動作351に対して、合成器サーバに対するリンクは、点線矢印364によって示される、構造化されたRTL358について、合成器サーバ360へのリンクは、矢印365によって示される。論理機能分解動作359に対して、合成器サーバ360へのリンクが矢印366によって示される。
【0122】
クラスタリング動作351は、機能およびサイズに基づいて選択された態様で論理コンポーネントを共にグループ化する。このクラスタリングは、小さい回路設計に対して1つのみのクラスタまたは大きな回路設計に対していくつかのクラスタを含み得る。にもかかわらず、以後のステップにおいて、論理素子のクラスタが使用されて、このクラスタを設計されたFPGAチップにマッピングする。すなわち、あるクラスタが特定のチップに照準を定め、別のクラスタは、異なるチップ、または恐らく第1のクラスタと同一のチップに照準を定める。通常、クラスタ内の論理素子は、チップにおけるクラスタと共に存在するが、最適化目的のために、クラスタは1つ以上のチップに分割される必要があり得る。
【0123】
クラスタはクラスタリング動作351において形成された後、システムは配置およびルーティング動作を実行する。最初に、クラスタのFPGAチップへの粗いグレイン配置動作352が実行される。最初に、粗いグレイン利得配置動作352は、論理素子のクラスタを選択されたFPGAチップに配置する。必要ならば、矢印367に示されるように、システムは合成器サーバ360を粗いグレイン配置動作352に対して利用可能にする。粗い利得配置動作の後に、緻密なグレイン配置動作が実行され、最初の配置を精密に調整する。Sエミュレーションシステムは、ピン利用条件、ゲート利用条件、およびゲート間ホップに基づくコスト関数を使用して、粗いグレイン配置動作および緻密なグレイン配置動作の両方に対する最適な配置を決定する。
【0124】
クラスタが所定のチップにどのように配置されるのかを決定することは、配置コストに基づき、この配置コストは、コスト関数f(P,G,D)によって、2つ以上の回路(すなわち、CKTQ=CKT1,CKT2,...,CKTN)およびFPGAチップのアレイの各位置に対して計算される。ここで、Pは、一般的にピンの使用/使用可能性であり、Gは、一般的にゲートの使用/使用可能性であり、Dは、接続性マトリクスM(図8と共に図7に示される)によって規定されるように、ゲート間「ホップ」の距離または数である。ハードウエアモデルにおいてモデル化されたユーザの回路設計は、回路CKTQの全組み合わせを含む。各コスト関数は、計算された配置コストの計算された値が、一般的に生成される傾向にあるように定義される。すなわち、(1)FPGAアレイにおける任意の2つの回路CKTN−1とCKTNとの間の「ホップ」の最小数、および(2)ピン使用が最小化されるようなFPGAアレイにおける回路CKTN−1およびCKTNの配置である。
【0125】
一実施形態では、コスト関数F(P,G,D)は、以下のように定義される。
【0126】
【数1】
【0127】
この式は、以下の式で簡略化され得る。
【0128】
f(P,G,D)=C0*P+C1*G+C2*D
第1の項(すなわち、C0*P)は使用されたピンの数および利用可能なピンの数に基づいて第1の配置コストを生成する。第2の項(すなわち、C1*G)は、使用されたゲートの数および利用可能なゲートの数に基づく第2の配置コストを生成する。第3の項(すなわち、C2*D)は、回路CKTQ(すなわち、CKT1、CKT2、...、CKTN)において、種々の相互接続間に存在するホップの数に基づいて配置コスト値を生成する。全配置コスト値は、反復的にこれら3つの配置コスト値を加算することによって生成される。定数C0、C1、およびC2は、任意の反復配置コスト計算が行われる間、最も重要である1つ以上のファクタ(すなわち、ピン使用、ゲート使用、またはゲート間ホップ)に対するこのコスト関数から生成された全配置コスト値を選択的に非対称にする(skew)重み付き定数を表す。
【0129】
システムが重み付き定数C0、C1、およびC2に対して異なる相対値を選択する場合、配置コストが繰り返して計算される。従って、一実施形態では、粗いグレイン配置動作の間、システムは、C2に対してC0およびC1により大きな値を選択する。この反復では、システムは、FPGAチップのアレイにおいて、ピン使用/利用可能性およびゲート使用/利用可能性の最適化は、回路CKTQの最初の配置においてゲート間ホップを最適化するよりもより重要である事を決定する。以後の反復では、システムは、C2に対するC0およびC1に対する小さい値を選択する。この反復では、システムは、ゲート間ホップを最適化することは、ピン使用/利用可能性およびゲート使用/利用可能性を最適化することよりもより重要である。
【0130】
緻密なグレイン配置動作の間、システムは同じコスト関数を使用する。一実施形態では、C0、C1、およびC2の選択に関する反復すステップは、粗いグレイン動作と同じである。別の実施形態では、緻密なグレイン配置動作は、C2に対するC0およびC1に対する小さい値をシステムに選択させることを含む。
【0131】
ここで、これらの変数および式の説明が行われる。FPGAチップxまたはFPGAチップy(他のFPGAチップの中の)における所定の回路CKTQを配置するかどうかを決定する場合、コスト関数は、ピン使用/利用可能性(P)、ゲート使用/利用可能性G、およびゲート間ホップDを検査する。コスト関数の変数P、G、およびDに基づいて、コスト関数f(P,G,D)は、FPGAアレイの特定の位置に回路CTKQを配置するための配置コスト値を生成する。
【0132】
ピン使用/利用可能性Pはまた、I/O容量を示す。Pusedは、各FPGAチップの回路CKTQによって使用されたピンの数である。Pavailableは、FPGAチップにおける利用可能なピンの数である。一実施形態では、Pavailableは、264(44ピン×6相互接続/チップ)であるが、別の実施形態では、Pavailableは、265(44ピン×6相互接続/チップ+1余分のピン)である。しかし、特定の数の利用可能なピンは、使用されたFPGAチップのタイプ、チップあたり使用された相互接続の全体の数、および各相互接続に対して使用されたピンの数に依存する。従って、Pavailableはかなり変動され得る。そのため、コスト関数F(P,G,D)の式の第1の項(すなわち、C0*P)を評価するために、各FPGAチップに対して比Pused/Pavailableが計算される。従って、FPGAチップの4×4アレイに対して、16の比Pused/Pavailableが計算される。所与の利用可能な数のピンに対してピンの数が多く使用されればされるほど、その比が大きくなる、所与の利用可能な数のピンに対して使用される。16の計算された比のうち、最も大きい数を生成する比が選択される。第1の配置コスト値が、選択された最大の比Pused/Pavailableと重み定数C0とを乗算することによって第1の項C0*Pから計算される。この第1の項は、計算された比Pused/Pavailableおよび各FPGAチップに対して計算された比の中で特定の最大の比に依存するため、配置コスト値は、全ての他のファクタが等しいとして、より高いピン使用に対してより大きくなる。システムは、最も低い配置コストを生成する配置を選択する。全ての他のファクタが等しいとして、種々の配置に対して計算された全ての最大値の中で最も小さい最大比Pused/Pavailableを生成する特定の配置がFPGAアレイの最適な配置として一般的に考慮される。
【0133】
ゲート使用/利用可能性Gは各FPGAチップによって許されるゲートの数に基づく。一実施形態では、アレイ中の回路CKTQの位置に基づいて、各チップにおいて使用されたゲートGusedの数が所定の閾値よりも高い場合、この結果、この第2の配置コスト(C1*G)は、配置が実現可能でないことを示す値を割り当てられる。同様に、回路CKTQを含む各チップにおいて使用されたゲートの数が所定の閾値または所定の閾値よりも小さい場合、この結果、この第2の項(C1*G)は、配置が実現可能であることを示す値に割り当てられる。従って、システムが特定のチップに回路CKT1を配置することを望み、そのチップが回路CKT1に収容させるのに十分なゲートを有しない場合、この結果システムは、この特定の配置が実現不可能であることをコスト関数によって結論し得る。一般的には、Gが大きい数(例えば、無限大)であることは、回路CKTQの所望の配置が実現不可能であり、代替の配置が決定されるべきであることを示す高い配置コスト値を生成することを確実にする。
【0134】
別の実施形態では、アレイにおける回路CKTQの位置に基づいて、比Gused/Gavailableが各チップに対して計算される。ただし、Gusedは、各FPGAチップにおける回路CKTQによって使用されたゲートの数であり、Gavailableは、各チップにおいて利用可能なゲートの数である。一実施形態では、システムは、FPGAアレイに対してFLEX 10K100チップを使用する。FLEX10K100チップは、約100,000ゲートを含む。従って、この実施形態では、Gavailableは、100,000ゲートに等しい。従って、FPGAチップの4×4アレイに対して、16の比Gused/Gavailableが計算される。所与の数の利用可能なゲートに対して使用されるゲートが多くなると、この比がより大きくなる。16の計算された比の中で、最も大きい数を生成する比が選択される。第2の配置コスト値が、選択された最大比Gused/Gavailableと重み定数C1とを乗算することによって、第2の項C1*Gから計算される。この第2項は、計算された比Gused/Gavailableおよび各FPGAチップに対して計算された比の中で特定の最大比に依存するため、配置コスト値は、全ての他のファクタが等しくても、より高いゲート使用に対してより大きくなる。システムは、最も低い配置コストを生成する回路配置を選択する。種々の配置に対して計算された全最大値の中で最も小さい最大比Gused/Gavailableを生成する特定の配置は、一般的に、全ての他のファクタが等しくても、FPGAアレイにおける最適な配置として考慮される。
【0135】
別の実施形態では、最初にC1に対してある値を選択する。比Gused/Gavailableが「1」より大きい場合、この特定の配置は実現不可能である(すなわち、少なくとも1つのチップが、回路のこの特定の配置に対して十分なゲートを有さない)。結果として、システムは、C1を非常に大きい数(例えば、無限大)を用いて変更し、従って、第2項C1*Gは、また非常に大きい数であり、全配置コスト値f(P,G,D)もまた、非常に大きい。他方では、比Gused/Gavailableが「1」以下である場合、この結果、この特定の配置は実現可能である(すなわち、各チップは、回路実現を支援するのに十分なゲートを有する)。結果として、システムはC1を変更せず、従って、第2の項C1*Gは、特定の数となる。
【0136】
第3の項C2*Dは、相互接続を必要とする全ゲートの間のホップの数を表す。さらにホップの数は、相互接続マトリクスに依存する。接続性マトリクスは、チップ間相互接続を必要とする任意の2つのゲート間の回路経路を決定するための基礎を提供する。全てのゲートがゲート間接続を必要とするとは限らない。ユーザの元の回路設計およびクラスタを所定のチップに分割することに基づいて、いくつかのゲートは任意の相互接続を少しも必要としない。なぜなら、1つ以上の論理回路素子が、それぞれの1つ以上の入力かつ1つ以上の出力に接続され、1つ以上の論理回路素子が同一のチップに配置される。しかし、他のゲートは相互接続を必要とする。なぜなら、1つ以上の論理素子が1つ以上の各入力かつ1つ以上の各出力に接続され、1つ以上の論理素子が異なるチップ内に配置される。
【0137】
「ホップ」を理解するために、図7においてテーブル形式で示され、図8において図解的に示される接続性マトリクスを参照する。チップF11とチップF14との間の相互接続602等のチップ間の各相互接続が、44のピンまたは44の配線で表される。他の実施形態では、各相互接続は44よりも多くのピン示す。さらに他の実施形態では、各相互接続は44ピン未満を示す。
【0138】
この相互接続スキームにおいて、2つの「ホップ」または「ジャンプ」によって、データはあるチップから別のチップまで通過し得る。従って、データは、相互接続601を介して、1つのホップにおいてチップF11からチップF12まで通過し得、データは、相互接続600および606、あるいは相互接続603および610を介して2つのホップにおいてチップF11からチップF33まで通過し得る。これらの例示的なホップは、これらのセットのチップ間で最も短い経路のホップである。いくつかの例では、信号は、種々のチップを介して、一方のチップのゲートと他方のチップのゲート間のホップの数が最も短い経路のホップを超えるようにルーティングされ得る。ゲート間ホップの数を決定する際に検査されなければならない回路の経路のみが、相互接続に必要な回路の経路である。
【0139】
接続性が、内部チップ相互接続を必要とするゲート間の全てのホップの合計によって示される。任意の2つのチップ間の最も短い経路は、図7および図8の接続性マトリクスを用いて1または2の「ホップ」によって表され得る。しかし、所定のハードウエアモデル実現では、I/O容量が、アレイにおいて任意の2つのゲート間で直接の最も短い経路接続の数を限定し得、従って、これらの信号は、より長い経路(従って2よりも多いホップ)を通ってルーティングされ、目的箇所まで到達させなければならない。従って、ホップの数は、いくつかのゲート間接続に対して2を超え得る。一般的に、全てが等しいと、より少ない数のホップが、より少ない配置コストで生じる。
【0140】
第3の項(すなわち、C2*D)は、以下の式のように再現される。
【0141】
【数2】
【0142】
第3の項は、重み定数C2と加算コンポーネント(S...)との積である。加算コンポーネントは、実質的に、チップ間相互接続を要するユーザの回路設計における各ゲートiとゲートjとの間の全ホップの合計である。上述のように、全てのゲートが必ずしも内部チップ相互接続を必要とする訳ではない。内部チップ相互接続を必要とするこれらのゲートiおよびゲートjに対して、ホップの数が決定される。全てのゲートiおよびjに対して、ホップの全数が共に加算される。
【0143】
距離計算もまた以下の式のように定義され得る。
【0144】
【数3】
【0145】
ここで、Mは接続性マトリクスである。接続性マトリクスの一実施形態は、図7に示される。この距離は、相互接続を要する各ゲート間接続に対して計算される。従って、各ゲートiおよびゲートjの比較に対して、接続性マトリクスMが検査される。より詳細には、
【0146】
【数4】
【0147】
各チップが識別可能に番号付けされるように、マトリクスがアレイの全てのチップに設定される。これらの識別番号は、カラムのヘッダーとしてマトリクスの頂上に設定される。同様に、これらの識別番号は、ロウのヘッダーとしてマトリクスの側面に沿って設定される。このマトリクスにおけるロウおよびカラムの交点における特定のエントリは、ロウによって識別されたチップとカラムによって識別されたチップとの間の直接的な接続データを提供し、この間で交差が生じる。チップiとチップjとの間の任意の距離計算について、マトリクスMi,jにおけるエントリは、直接接続に対して「1」または直接でない接続に対して「0」のいずれか一方を含む。インデックスkは、相互接続に必要である、チップiにおける任意のゲートをチップjにおける任意のゲートに相互接続する必要があるホップの数を示す。
【0148】
最初に、K=1に対する接続性マトリクスMi,jが検査されるべきである。エントリが「1」である場合、チップiのこのゲートの、チップjにおける選択されたゲートへの直接接続が存在する。従って、インデックスまたはホップk=1は、Mi,jの結果として指定され、これは、これら2つのゲート間の距離を生じる。この点において、別のゲート間接続が検査され得る。しかし、エントリが「0」である場合、直接接続が存在しない。
【0149】
直接接続が存在しない場合、次のkが検査されるべきである。新しいk(すなわち、k=2)は、マトリクスMi,jと自身とを乗算するによって計算され得る。言い換えると、M2=M*M(ここで、k=2)である。
【0150】
チップiおよびチップjに対する特定のロウおよびカラムエントリまで、MとM自身とを乗算するプロセスが、計算された結果が「1」になるまで継続し、この点において、インデックスkは、ホップの数として選択される。この演算は、論理積マトリクスM同士の論理積演算を行うこと、および、次いで、この論理積演算の結果を論理和演算ことを含む。マトリクスmi,lとml,jとの間の論理積演算は、論理「1」値を生じた場合、その結果、接続が、ホップk内において、任意のチップ1を介して、チップiにおいて選択されたゲートとチップjにおいて選択されたゲートとの間に存在する。そうでない場合、接続がこの特定のホップk内に存在せず、さらなる計算が必要である。マトリクスmi,lおよびml,jは、このハードウエアモデリングに対して定義されたように接続性マトリクスMである。相互接続を必要とする任意の所与のゲートiおよびゲートjに対して、マトリクスmi,lにおけるゲートiに対するFPGAチップを含むロウは、ゲートjおよびml,jに対するFPGAチップを含むカラムに論理的に論理積演算される。個々の論理積演算されたコンポーネントが論理和演算され、インデックスまたはホップkに対する生成したMi,j値が、「1」または「0」であるかどうかを決定する。その結果が「1」である場合、その結果接続が存在し、インデックスkがホップの数として指定される。結果が「0」になる場合、従って接続が存在しない。
【0151】
以下の例がこれらの原理を説明する。図35(A)〜図35(D)を参照して、図35(A)は、クラウド1090として示されたユーザの回路設計を示す。この回路設計1090は単純または複雑であり得る。回路設計1090の一部は、ORゲート1091および2つのANDゲート1092および1093を含む。ANDゲート1092および1093の出力は、ORゲート1091の入力に接続される。さらに、これらのゲート1091、1092、および1093は、回路設計1090の他の部分に接続され得る。
【0152】
図35(B)を参照して、3つのゲート1091、1092、および1093を含む部分を含む回路1090のコンポーネントは、FPGAチップ1094、1095、および1096に構成および配置され得る。FPGAチップの特定の例示的なアレイは、示されるように相互接続スキームを有する。すなわち、相互接続1097のセットは、チップ1094とチップ1095とを接続し、相互接続1098の別のセットは、チップ1095とチップ1096とを接続する。直接的な相互接続がチップ1094とチップ1096との間に設けられない。この回路設計1090のコンポーネントをチップに配置する場合、システムは、予め設計された相互接続スキームを使用して、異なるチップにわたって回路経路を接続する。
【0153】
図35(C)を参照して、1つの可能な構成および配置は、チップ1094内に配置されたORゲート1091、チップ1095内に配置されたANDゲート1092、およびチップ1096に配置されたANDゲート1093である。回路1090の他の部分は、教示目的のために示されない。ORゲート1091とANDゲート1092との間の接続は相互接続を必要とする。なぜなら、これらのゲートは、異なるチップに配置され、相互接続1097のセットが使用されるためである。この相互接続に対するホップの数は「1」である。ORゲート1091とANDゲート1093との間の接続もまた、相互接続を必要とし、相互接続1097および1098のセットが使用される。ホップの数は「2」である。この配置の例として全体の数のホップは、「3」であり、この他のゲートからの寄与および図示されない回路1090の残りにおける相互接続を差し引く。
【0154】
図35(D)は、別の配置の例を示す。ここで、ORゲート1091は、チップ1094に配置され、ANDゲート1092および1093は、チップ1095に配置される。再び、回路1090の他の部分は、教示目的のために示されない。ORゲート1091とANDゲート1092との間の接続は、相互接続を要求する。なぜなら、異なるチップ内に配置され、相互接続1097のセットが使用される。この接続に対するホップの数は「1」である。さらに、ORゲート1091とANDゲート1093との間の接続もまた、相互接続を要求し、相互接続1097のセットが使用される。さらにホップの数は「1」である。この配置の例に対して、ホップの全体の数は、「2」であり、他のゲートからの寄与および図示されない回路1090の残りにおける相互接続を差し引く。このようにして、距離Dパラメータのみに基づき、他の全てのファクタが等しいと仮定すると、コスト関数は図35(C)の配置の例よりも、図35(D)の配置の例の方がより低いコスト関数を計算する。しかし、他の全てのファクタが等しくない。恐らく、図35(D)に対するコスト関数はまた、ゲート使用/利用可能性Gに基づく。図35(D)では、図35(C)において同一のチップ内で使用されたゲートよりも、さらに1つ多いのゲートがチップ1095内で使用される。さらに、図35(C)に示された配置の例においてチップ1095に対するピン使用/利用可能性Pは、図35(D)に示される他の配置の例において同じチップに対するピン使用/利用可能性より大きい。
【0155】
粗いグレイン配置の後で、平坦化されたクラスタの配置の緻密な調整が配置結果をさらに最適化する。この緻密なグレイン配置動作353は、粗いグレイン配置動作352によって最初に選択された配置を改良する。ここで、このような構成が最適化を増加させる場合、最初のクラスタは分解され得る。例えば、論理素子XおよびYがクラスタAのもとの一部であり、FPGAチップ1に対して指定されることを仮定する。緻密なグレイン配置動作353によると、論理構成素子XおよびYは、今や別々のクラスタBとして指定され得るか、または別のクラスタCの一部を形成し、FPGAチップ2における配置に対して指定される。ユーザの回路設計を特定のFPGAに接続するFPGAネットリスト354が生成される。
【0156】
クラスタがどれくらい分割されるかおよび所定のチップにどれくらい配置されるかの決定は、また配置コストに基づき、そしてこの配置コストは、回路CKTQに対するコスト関数f(P,G,D)によって計算される。一実施形態では、緻密なグレイン配置プロセスに対して使用されるコスト関数は、粗いグレイン配置プロセスに対して使用されたコスト関数と同一である。2つの配置プロセス間の差のみが、プロセス自身の配置ではなく配置されたクラスタのサイズである。粗いグレイン配置プロセスは、緻密なグレイン配置プロセスよりもより大きいクラスタを使用する。他の実施形態では、粗いグレイン配置プロセスおよび緻密なグレイン配置プロセスに対するコスト関数は、選択重み定数C0、C1、およびC2に関して上述したように互いに異なる。
【0157】
配置が終了すると、チップ間のルーティングタスク355が実行される。異なるチップにおいて配置された回路を接続するルーティングワイヤの数が、回路間ルーティングに対して割り当てられたこれらのFPGAチップにおいて利用可能なピンを超える場合、時分割多重化(TDM)回路が用いられ得る。例えば、各FPGAチップが2つの異なるFPGAチップにおいて配置された回路を接続するために44ピンのみを可能でかつ、特定のモデルの実現は、チップ間に45ワイヤを必要とする場合、特定の時分割多重化回路は、さらに各チップ内に実現され得る。この特定のTDM回路は少なくとも2つのワイヤと共に接続する。TDM回路の1つの実施形態は、図9A、図9B、および図9Cに示され、そしてこれらは以後説明される。従って、ルーティングタスクが常に完成される。なぜなら、このピンはこれらのチップの中から時分割多重化形態に構成され得るためである。
【0158】
一旦、各FPGAの配置およびルーティングが決定されると、各FPGAは、最適化された駆動回路に構成され得、従って、システムは、「ビットストリーム」構成ファイル356を生成する。Alteraの用語では、システムは1以上のプログラマオブジェクトファイル(.pof)を生成する。他の生成されたファイルは、SRAMオブジェクトファイル(.sof)、JEDECファイル(.jed)、16進法の(インテルフォーマット)ファイル(.hex)、およびチューブラ(tublar)テキストファイル(.ttf)を含む。Altera MAX+PLUS IIプログラマーは、Alteraハードウエアプログラム可能なデバイスと共にPOF、SOF、JEDECファイルを使用して、FPGAアレイをプログラムする。あるいは、1以上の生の(raw)バイナリファイル(.rbf)を生成する。CPUは.rbfファイルを受信し、PCIバスを介してFPGAアレイをプログラムする。
【0159】
この点において、構成されたハードウエアは、ハードウエアスタートアップ370のために準備中である。これは再構成可能な基板上のハードウエアモデルの自動構成を終了する。
【0160】
ピン出力のグループが共に時分割多重化され、1つのピン出力のみが実際に使用されることを可能にするTDM回路を戻って、実質的に、TDM回路は、少なくとも2つの入力(2つのワイヤに対して)、1つの出力、およびループ内にセレクタ信号として構成されたレジスタの接続を有するマルチプレクサである。Sエミュレーションシステムが、より多くのワイヤが共にグループ化されることを要求する場合に、より多くの入力およびループレジスタが提供され得る。このTDM回路へのセレクタ信号として、ループ内に構成された数個のレジスタは、適切な信号をマルチプレクサに提供し、1つの期間において、入力の1つが出力として選択され、別の期間では、別の入力が出力として選択される。従って、TDM回路は、チップ間のただ1つの出力ワイヤのみを使用することを管理し、この例では、特定のチップにおいて実現された回路のハードウエアモデルが、45ピンの代わりに、44ピンを用いて達成され得る。従って、ルーティングタスクは、常に終了され得る。なぜなら、ピンがチップの中でも時分割多重化形態に配置され得るためである。
【0161】
図9Aは、ピンアウト問題の概略図を示す。これはTDM回路を要求するため、図9Bは、送信側のためのTDM回路を提供し、図9Cは、受信側のためのTDM回路を提供する。これらの図は、Sエミュレーションシステムがチップ間の2つのワイヤの代わりに1つのワイヤを要求する1つの特定の例のみを示す。2つ以上のワイヤが、時間多重化された構成において共に接続しなければならない場合、当業者は、以下の教示を考慮して適切な改変を可能にし得る。
【0162】
図9Aは、SエミュレーションシステムがTDM構成において2つのワイヤを接続するTDM回路の一実施形態を示す。2つのチップ990および991が設けられる。完全なユーザ回路設計の一部である回路960がチップ991内にモデル化され、配置される。完全なユーザ回路設計の一部である回路973がチップ990内にモデル化され、配置される。相互接続994、相互接続992、および相互接続993の群を含むいくつかの相互接続が回路960と回路973との間に設けられる。この例では、相互接続の数は全部で45である。一実施形態において、各チップはこれらの相互接続に対してせいぜい44ピンのみを提供する場合、本発明の一実施形態は、時間多重化される相互接続のうち少なくとも2つを提供し、これらのチップ990と991との間で1つのみの相互接続を要求する。
【0163】
この例では、相互接続994のグループは、43ピンの使用を継続する。第44番目および最後のピンに対して、本発明の一実施形態によるTDM回路は、時分割多重化された形態と共に相互接続992および993を接続するために使用され得る。
【0164】
図9Bは、TDM回路の一実施形態を示す。FPGAチップ991内のモデル化された回路(またはその一部)960は、ワイヤ966および967上の2つの信号を供給する。回路960に対して、これらのワイヤ966および967が出力する。通常、これらの出力は、チップ990(図9Aおよび図9Cを参照)においてモデル化された回路973に接続される。しかし、これらの2つの出力ワイヤ966および967に対して1つのピンのみの利用可能性は、直接的なピン間接続を除外する。出力966および967が、単一方向に他のチップに伝達されるため、適切な送信および受信器TDM回路はこれらのラインを共に接続するために設けられなければならない。送信側のTDM回路の一実施形態は、図9Bに示される。
【0165】
送信側のTDM回路は、ANDゲート961および962を含み、そのそれぞれの出力970および971は、ORゲート963の入力に接続される。ORゲート963の出力972は、ピンに割り当てられ、別のチップ990に接続されたチップの出力である。ANDゲート961および962への入力966および967の1つのセットは、それぞれ回路モデル960によって提供される。入力968および969の他のセットは、ループ化されたレジスタスキームによって提供され、そのスキームは、時分割多重化セレクタ信号として機能する。
【0166】
ループ化されたレジスタスキームはレジスタ964および965を含む。レジスタ964の出力995は、レジスタ965の入力およびANDゲート961の入力968に提供される。レジスタ965の出力996は、レジスタ964の入力およびANDゲート962の入力969に供給される。各レジスタ964および965は、共通のクロックソースによって制御される。任意の所与の瞬間において、出力995または996の1つのみが論理「1」を供給する。他は論理「0」である。従って、各クロックエッジの後、論理「1」は、出力995と出力996との間でシフトする。次に、これは、ANDゲート961またはANDゲート962のいずれかに「1」を供給し、ワイヤ966またはワイヤ967のいずれかの信号を「選択する」。従って、ワイヤ972上のデータは、ワイヤ966またはワイヤ967のいずれかの回路960から生じる。
【0167】
TDM回路の受信側の一実施形態は、図9Cに示される。チップ991のワイヤ966およびワイヤ967上の回路960(図9Aおよび図9B)からの信号は、図9Cにおける回路973への適切なワイヤ985または986に接続されなければならない。チップ991からの時分割多重信号は、ワイヤ/ピン978から入力する。受信機側TDM回路は、ワイヤ/ピン978上のこれらの信号を回路973への適切なワイヤ985および986に接続し得る。
【0168】
TDM回路は、入力レジスタ974および975を含む。ワイヤ/ピン978上の信号は、ワイヤ979および980それぞれを介してこれらの入力レジスタ974および975に供給される。入力レジスタ974の出力985は、回路973における適切なポートに供給される。同様に、入力レジスタ975の出力986は、回路973内の適切なポートに供給される。これらの入力レジスタ974および975はループされたレジスタ976および977によって制御される。
【0169】
レジスタ976の出力984は、レジスタ977の入力およびレジスタ974のクロック入力981に接続される。レジスタ977の出力983は、レジスタ976の入力およびレジスタ975のクロック入力982に接続される。各レジスタ976および977は、共通のクロックソースによって制御される。任意の瞬間において、イネーブル入力981または982の内の1つのみは論理「1」である。他は論理「0」において存在する。従って、各クロックエッジの後、論理「1」は、イネーブル入力981と出力982との間でシフトする。次に、これは、ワイヤ979またはワイヤ980のいずれかの信号を「選択する」。従って、回路960からのワイヤ978上のデータは、ワイヤ985またはワイヤ986を介して回路973にほぼ接続される。
【0170】
本発明の一実施形態によるアドレスポインタは、図4を参照して簡単に説明されるように、以下に詳細に説明される。繰り返しに対して、いくつかのアドレスポインタは、ハードウエアモデルにおける各FPGAチップに配置される。一般的には、アドレスポインタを実現するための主要な目的は、システムが、32ビットPCIバス328(図10を参照)を介して、ソフトウエアモデル315とハードウエアモデル325における特定のFPGAチップとの間のデータを送達することを可能にすることである。より詳細には、32−ビットPCIバスの帯域幅の制限を考慮して、ソフトウエア/ハードウエア境界およびFPGAのバンク326a〜326dの間の各チップにおいて、アドレスポインタの第一の目的がアドレス空間(すなわち、REG、S2H、H2S、およびCLK)のそれぞれの間のデータ送達を選択的に制御することである。64ビット−PCIバスが実現されても、これらのアドレスポインタがデータ送達の制御をさらに必要とする。従って、ソフトウエアモデルが5つのアドレス空間(すなわち、REG読み出し、REG書き込み、S2H読み出し、H2S書き込み、およびCLK書き込み)を有し、各FPGAチップは、5つのアドレス空間に対応する5つのアドレスポインタを有する。各FPGAは、これらの5つのアドレスポインタを必要とする。なぜなら、選択されたアドレス空間において特定の選択され処理されたワードが、任意の1つ以上のFPGAチップに常駐し得るためである。
【0171】
FPGA I/Oコントローラ381は、SPACEインデックスを用いることによってソフトウエア/ハードウエア境界に対応する特定のアドレス空間(すなわち、REG、S2H、H2S、およびCLK)を選択する。一旦、アドレス空間が選択されると、各FPGAチップにおいて選択されたアドレス空間に対応する特定のアドレスポインタが、その選択されたアドレス空間における同じワードに対応する特定のワードを選択する。ソフトウエア/ハードウエア境界におけるアドレス空間の最大のサイズおよび各FPGAチップにおけるアドレスポインタは、選択されたFPGAチップのメモリ/ワード容量に依存する。例えば、本発明の一実施形態では、FPGAチップのAltera FLEX 10K ファミリを使用する。従って、各アドレス空間に対する推定された最大のサイズは、REG、3000ワード、CLK、1ワード、S2H、10ワード、およびH2S、10ワードである。各FPGAチップは、約100ワード保持することが可能である。
【0172】
さらに、Sエミュレータシステムは、Sエミュレーションプロセスの任意の時間において、ユーザが起動、停止、入力値のアサート、値の検査を可能にする機能を有する。シミュレータの柔軟性を提供するために、さらにSエミュレータは、コンポーネントの内部実現がソフトウエアまたはハードウエアに存在するかどうかにかかわらず、全コンポーネントをユーザに見えるようにしなければならない。ソフトウエアでは、組み合わせのコンポーネントがモデル化され、値がシミュレーションプロセスの間に計算される。従って、これらの値は、シミュレーションプロセスの間に任意の時間において、ユーザがアクセスすることを明確に「見ることができる」。
【0173】
しかし、ハードウエアモデルの組み合わせの値は直接的に「見ることができる」ことはない。レジスタがソフトウエアカーネルによって容易にかつ直接的にアクセス可能(すなわち、読み出し/書き込み)であるが、組み合わせのコンポーネントは、決定することがより困難である。FPGAにおいて、ほとんどの組み合わせコンポーネントは、高いゲート機能を達成するために、ルックアップテーブルとしてモデル化される。結果として、ルックアップテーブルマッピングは、効率的なハードウエアモデリングを提供するが、ほとんどの組み合わせ論理信号の可観性を損失する。
【0174】
組み合わせコンポーネントの可観性の欠如を有するこれらの問題にかかわらず、シミュレーションシステムは、ハードウエア加速モードの後に、ユーザによる検査のために組み合わせコンポーネントを再構成または再生成し得る。ユーザの回路設計が、組み合わせコンポーネントおよびレジスタコンポーネントのみを有する場合、全ての組み合わせコンポーネントの値は、レジスタコンポーネントから導かれ得る。すなわち、組み合わせコンポーネントは、回路設計によって要求された特定の論理機能に従って、種々の構成のレジスタから構築されるか、またはこのレジスタを含む。Sエミュレータは、レジスタコンポーネントおよび組み合わせコンポーネントだけのハードウエアモデルを有し、そして結果としてSエミュレータは、ハードウエアモデルから全てのレジスタ値を読み出し、次いで全ての組み合わせコンポーネントを再構成または再生成する。この再生成プロセスを実行するように要求されたオーバーヘッドのため、組み合わせコンポーネント再生が全ての時間において実行されない。むしろ、ユーザによるリクエストに応じてのみ実行される。実際には、ハードウエアモデルを用いる利益の1つは、Sエミュレーションプロセスを加速することである。各サイクル(またはほとんどのサイクルでさえも)における組み合わせコンポーネントを決定することは、さらにシミュレーションのスピードを低減する。いずれのイベントにおいても、レジスタ値のみの検査は、ほとんどのシミュレーション解析に対して十分であるべきである。
【0175】
レジスタ値から組み合わせコンポーネント値を再生成するプロセスは、Sエミュレーションシステムがハードウエア加速モードまたはICEモードにあったと仮定する。そうでなければ、ソフトウエアシミュレーションは、既に組み合わせコンポーネント値をユーザに提供する。Sエミュレーションシステムは、ハードウエア加速の開始の前に、ソフトウエアモデルにおいて常駐していた組み合わせコンポーネント値およびレジスタ値を維持する。これらの値は、システムによるさらなる上書き動作までにソフトウエアモデルにおいて保持する。ソフトウエアモデルは、ハードウエア加速動作の開始直前の時間からレジスタ値および組み合わせコンポーネント値を既に有するため、組み合わせコンポーネント再生成プロセスは、更新された入力レジスタ値に応じてソフトウエアモデルのこれらの値のいくつかまたは全てを更新することを含む。
【0176】
組み合わせコンポーネント再生成プロセスは以下のようである。第1に、ユーザによってリクエストされた場合、ソフトウエアカーネルは、FPGAチップからREGバッファにハードウエアレジスタコンポーネントの全ての出力値を読み出す。このプロセスは、アドレスポインタのチェインを介してFPGAチップのレジスタ値をREGアドレス空間に転送することを含む。ハードウエアモデルにあったレジスタ値をREGバッファ(ソフトウエア/ハードウエア境界にある)に配置することは、ソフトウエアモデルをさらなる処理のためにデータにアクセスすることを可能にする。
【0177】
第2に、ソフトウエアカーネルは、ハードウエア加速実行の前後にレジスタ値を比較する。ハードウエア加速実行の前のレジスタ値は、ハードウエア加速実行の後の値と同じである場合、組み合わせコンポーネントの値は、変化されない。時間の拡張および組み合わせコンポーネントを再生成するリソースの代わりに、これらの値はソフトウエアモデルから読み出され得、そしてこのソフトウエアモデルは、ハードウエア加速実行の直前からソフトウエアモデルに格納される組み合わせコンポーネント値を有する。他方では、1以上のレジスタ値が変化される場合、変化されたレジスタ値に依存する1以上の組み合わせコンポーネントはまた、値を変化させる。これらの組み合わせコンポーネントもまた、以下の第3のステップによって再生成されなければならない。
【0178】
第3に、前加速および後加速の比較とは異なる値を有するレジスタに対して、ソフトウエアカーネルは、ファンアウト組み合わせコンポーネントをイベントキューにスケジューリングする。ここで、この加速動作の間に値を変化させるこれらのレジスタは、イベントを検出する。恐らく、これらの変化されたレジスタ値に依存するこれらの組み合わせコンポーネントは、異なる値を生成する。これらの組み合わせコンポーネントの値の任意の変化にもかかわらず、このシステムは、次のステップでこれらの変化されたレジスタ値を評価することを確実にする。
【0179】
第4に、次いでソフトウエアカーネルは、標準的なイベントシミュレーションアルゴリズムを実行して、ソフトウエアモデルにおいてレジスタから全ての組み合わせコンポーネントまで変化する値を伝達する。言い換えると、加速前から加速後の時間間隔の間に変化するレジスタ値がこれらのレジスタ値に依存する全ての組み合わせコンポーネントのダウンストリームに伝達される。次いで、これらの組み合わせコンポーネントは、これらの新しいレジスタ値を評価しなければならない。展開および伝達原理に従って、次に変化されたレジスタ値に直接依存する第1のレベルの組み合わせコンポーネントからダウンストリームに配置された他の第2のレベルの組み合わせコンポーネントは、もしあれば、さらに変化されたデータを評価する。レジスタ値を影響を与え得る他のコンポーネントダウンストリームに伝達するこのプロセスは、展開ネットワークの末端まで継続する。従って、ダウンストリームに配置され、そして変化されたレジスタによって影響されるこれらの組み合わせコンポーネントのみがソフトウエアモデルにおいて更新される。全ての組み合わせコンポーネントが影響を受けるわけではない。従って、加速前から加速後の時間間隔の間に変化された1つのみのレジスタ値および1つのみの組み合わせコンポーネントがこのレジスタ値の変化によって影響される場合、次に、この組み合わせコンポーネントのみがこの変化されたレジスタ値を考慮してその値を再評価する。このモデル化された回路の他の部分は影響されない。この小さな変化に対して、組み合わせコンポーネント再生成プロセスが比較的高速で発生する。
【0180】
最後に、イベント伝達が終了する場合、システムは任意のモードの動作の準備中である。通常、ユーザは長い実行の後の値の検査を望む。組み合わせコンポーネント再生成プロセスの後、ユーザはデバッグ/テスト目的にための純粋なソフトウエアシミュレーションを継続する。しかし、他の場合は、ユーザは次の所望のポイントへのハードウエア加速を継続することを望む。さらに他の場合では、ユーザはICEモードにさらに進むことを望む。
【0181】
要するに、組み合わせコンポーネント再生は、レジスタ値を用いてソフトウエアモデルのコンポーネント値を更新することを含む。任意のレジスタ値が変化した場合、変化されたレジスタ値は、値が更新されるとともに、レジスタのファンアウトネットワークを介して伝達される。レジスタ値が変化しない場合、さらにソフトウエアモデルの値は変化せず、従って、システムは組み合わせコンポーネントを再生成する必要がない。通常、ハードウエア加速の実行がある時間の間に発生する。結果として、多くのレジスタ値は変更し得、変化された値を有するこれらのレジスタの展開ネットワークのダウンストリームに配置された多くの組み合わせコンポーネント値に影響を与える。この場合、組み合わせコンポーネント再生成プロセスは比較的遅くてもよい。他の場合では、ハードウエア加速実行の後、わずかのみのレジスタ値を変更し得る。変更されたレジスタ値を有するレジスタに対する展開ネットワークは小さてもよく、従って組み合わせコンポーネント再生成プロセスは比較的高速であり得る。
【0182】
IV.ターゲットシステムモードを用いるエミュレーション
図10は、本発明の一実施形態によるSエミュレーションシステムアーキテクチャを示す。さらに、図10は、システムがインサーキットエミュレーションモードで動作する場合、ソフトウエアモデル、ハードウエアモデル、エミュレーションインターフェイス、およびターゲットシステム間の関係を示す。上述したように、Sエミュレーションシステムは、汎用マイクロプロセッサ、およびPCIバス等の高速バスによって相互接続された再構成可能なハードウエア基板を含む。Sエミュレーションシステムは、ユーザの回路設計をコンパイルし、ハードウエアモデルへの再構成可能なボードマッピングプロセスのためのエミュレーションハードウエア構成データを生成する。次いで、ユーザは、汎用プロセッサを介して回路をシミュレートし、シミュレーションプロセスをハードウエア加速し、エミュレーションインターフェイスを介してターゲットシステムを用いて回路設計をエミュレートし、そしてその後で、ポストシミュレーション解析を実行する。
【0183】
ソフトウエアモデル315およびハードウエアモデル325は、コンパイルプロセスの間に決定される。さらにエミュレーションインターフェイス382およびターゲットシステム387は、インサーキットエミュレーションモードのためのシステムにおいて提供される。ユーザの判断において、エミュレーションインターフェイスおよびターゲットシステムは、初めにシステムに接続される必要がない。
【0184】
ソフトウエアモデル315は、全システムを制御するカーネル316、およびソフトウエア/ハードウエア境界(REG、S2H、H2S、およびCLK)に対する4つのアドレス空間を含む。Sエミュレーションシステムは、異なるコンポーネントタイプおよび制御機能に従って、ハードウエアモデルをメインメモリにおける4つのアドレス空間にマッピングする。REGスペース317は、レジスタコンポーネントに対して指定される。CLK空間320は、ソフトウエアクロックに対して指定される。S2H空間318は、ソフトウエアテストベンチコンポーネントにハードウエアモデルへの出力に対して指定される。H2S空間319は、ハードウエアモデルのソフトウエアテストベンチコンポーネントへの出力に対して指定される。これらの特定用途のI/Oバッファ空間は、システム初期化時間の間にカーネルのメインメモリ空間にマッピングされる。
【0185】
ハードウエアモデルは、FPGAチップのいくつかのバンク326a〜326dおよびFPGA I/Oコントローラ327を含む。各バンク(例えば、326b)は、少なくとも1つのFPGAチップを含む。一実施形態では、各バンクは4つのFPGAチップを含む。FPGAチップの4×4アレイでは、バンク326bおよび326dは、低いバンクであり得、バンク326aおよび326cは、高いバンクであり得る。特定のチップおよびその相互接続に対する特定のハードウエアモデルのユーザ回路設計素子のマッピング、配置、およびルーティングは、図6を参照して説明される。ソフトウエアモデル315とハードウエアモデル325との間の相互接続328は、PCIバスシステムである。さらにハードウエアモデルは、FPGA I/Oコントローラ327を含み、FPGA I/Oコントローラ327は、PCIバスとFPGAチップのバンク326a〜326dとの間のデータトラフィックを制御しつつ、PCIバスのスループットを維持するためのPCIインターフェイス380および制御ユニット381を含む。各FPGAチップは、いくつかのアドレスポインタをさらに含み、各アドレスポインタは、ソフトウエア/ハードウエア境界の各アドレス空間(すなわち、REG、S2H、H2S、およびCLK)に対応し、これらのアドレス空間のそれぞれとFPGAチップのバンク326a〜326dにおける各FPGAチップとの間のデータを接続する。
【0186】
ソフトウエアモデル315とハードウエアモデル325との間の通信は、ハードウエアモデルのDMAエンジンまたはアドレスポインタを介して発生する。あるいは、さらに通信は、ハードウエアモデルのDMAエンジンおよびアドレスポインタの両方を介して発生する。カーネルは、直接マッピングされたI/O制御レジスタを介して評価リクエストと共にDMA転送を開始する。REG空間317、CLK空間320、S2H空間318、およびH2S空間319は、ソフトウエアモデル315とハードウエアモデル325との間のデータ送達のために、I/Oデータパス経路321、322、323、および324それぞれを使用する。
【0187】
二重バッファリングは、S2HおよびCLK空間への全ての一次入力に対して要求される。なぜなら、これらの空間はいくつかのクロックサイクルを獲得し、更新プロセスを終了する。ダブルバッファリングは、競合状態を引き起こし得る内部ハードウエアモデル状態の妨害を回避する。
【0188】
S2HおよびCLK空間は、カーネルからハードウエアモデルまでの一次入力である。上述のように、ハードウエアモデルは、全てのレジスタコンポーネントおよびユーザの回路設計の全ての組み合わせコンポーネントを実質的に保持する。さらに、ソフトウエアクロックは、ソフトウエアにおいてモデル化され、CLK I/Oアドレス空間に設けられ、ハードウエアモデルとインターフェイスをとる。カーネル進行シミュレーション時間は、アクティブテストベンチコンポーネントを検索し、クロックコンポーネントを評価する。任意のクロックエッジがカーネルによって検索される場合、レジスタおよびメモリが更新され、組み合わせコンポーネントを介して値が伝達される。従って、ハードウエア加速モードが選択される場合、この空間内の値の任意の変化がハードウエアモデルをトリガして論理状態を変化させる。
【0189】
インサーキットエミュレーションモードに対してエミュレーションインターフェイス382は、PCIバス328に接続され、エミュレーションインターフェイスは、ハードウエアモデル325およびソフトウエアモデル315と通信し得る。ハードウエア加速シミュレーションモードおよびインサーキットエミュレーションモードの間、カーネル316は、ソフトウエアモデルおよびハードウエアモデルを制御する。さらに、エミュレーションインターフェイス382は、ケーブル390を介してターゲットシステム387に接続される。さらに、エミュレーションインターフェイス382は、インターフェイスポート385、エミュレーションI/O制御386、ターゲット−ハードウエアI/Oバッファ(T2H)384、およびハードウエア−ターゲットI/Oバッファ(H2T)383を含む。
【0190】
ターゲットシステム387は、ターゲットシステム387の一部であるコネクタ389、信号入力/信号出力インターフェイスソケット388、および他のモジュールまたはチップを含む。例えば、ターゲットシステム387は、EGAビデオレコーダであり得、ユーザの回路設計は特定のI/Oコントローラ回路であり得る。EGAビデオコントローラのためのI/Oコントローラのユーザの回路設計は、ソフトウエアモデル315において完全にモデル化され、ハードウエアモデル325で部分的にモデル化される。
【0191】
さらに、ソフトウエアモデル315のカーネル316は、インサーキットエミュレーションモードを制御する。エミュレーションクロックの制御は、ソフトウエアクロック、ゲートクロック論理、およびゲートデータ論理を介してそのソフトウエアの中に依然として存在し、セットアップおよび保持時間の問題がインサーキットエミュレーションモードの間には生じない。従って、ユーザは、開始し、停止し、単一処理(single−step)し、値をアサートし、およびインサーキットエミュレーションプロセスにおける任意の時間において値を検査し得る。
【0192】
この作業を行うために、ターゲットシステムとハードウエアモデルとの間の全てのクロックノードが識別される。ターゲットシステムにおけるクロック発生器がディセーブルされ、ターゲットシステムからのクロックポートが切断され、または、そうでなければターゲットシステムからのクロック信号はハードウエアモデルに到達することを妨げる。その代わりに、クロック信号は、テストベンチプロセスまたはソフトウエア発生クロックの他の発生形態から生じる。その結果、ソフトウエアカーネルは、アクティブクロックエッジを検出して、データ評価をトリガし得る。従って、ICEモードでは、Sエミュレーションシステムは、ソフトウエアクロックを使用して、ターゲットシステムのクロックの代わりにハードウエアモデルを制御する。
【0193】
ターゲットシステムの環境内でユーザの回路設計の動作をシミュレートするために、ターゲットシステム40とモデル化された回路設計との間の一次入力(入信号)および出力(出信号)信号は、評価のためにハードウエアモデル325に供給される。これは、2つのバッファ(ターゲット/ハードウエアバッファ(T2H)384およびハードウエア/ターゲットバッファ(H2T)383)を介して達成される。ターゲットシステム387は、T2Hバッファ384を使用して、入力信号をハードウエアモデル325に適用する。ハードウエアモデル325は、H2Tバッファ383を使用して、出力信号をターゲットシステム387に送達する。データを評価するためにソフトウエアモデル315のテストベンチプロセスに代わりに、このインサーキットエミュレーションモードでは、S2HおよびH2Sバッファの代わりにT2HおよびH2Tバッファを介してI/O信号を送受信する。なぜなら、システムは現在、ターゲットシステム387を使用しているためである。ターゲットシステムはソフトウエアシミュレーションの速度よりも実質的に大きい速度で実行するため、インサーキットエミュレーションモードはまた、より大きい速度で実行する。これらの入力および出力信号の伝達は、PCIバス328上で発生する。
【0194】
さらに、バス61は、エミュレーションインターフェイス382とハードウエアモデル325との間に設けられる。このバスは図1のバス61と類似している。バス61は、エミュレーションインターフェイス382およびハードウエアモデル325がT2Hバッファ384およびH2Tバッファ383を介して通信する。
【0195】
典型的には、ターゲットシステム387は、PCIバスに接続されない。しかし、エミュレーションインターフェイス382がターゲットシステム387の設計に組み込まれる場合、このような接続は実現可能であり得る。この設定では、ケーブル390は存在しない。ターゲットシステム387とハードウエアモデル325との間の信号は、エミュレーションインターフェイスを通過する。
【0196】
V.ポストエミュレーション解析モード
本発明のシミュレーションシステムは、ポストシミュレーション解析に対して広範囲に使用されたシミュレータ機能値である変化ダンプ(VCD)を支援し得る。本質的には、VCDは、ハードウエアモデルの全入力および選択されたレジスタ出力の履歴記録を提供する。その後、ポストシミュレーション解析の間、種々の入力およびシミュレーションプロセスの結果の出力を再検討し得る。VCDを支援するために、システムは全ての入力をハードウエアモデルに書き込む。出力に対して、システムは、ユーザ定義されたロギング頻度(例えば、1/10,000レコード/サイクル)でハードウエアレジスタコンポーネントの全ての値を書き込む。書き込み頻度は、出力値がどれくらいの頻度で記録されるかを決定する。1/10,000レコード/サイクルのロギング頻度に対して、出力値は10,000サイクルごとに1回記録される。ロギング頻度が大きくなると、後のポストシミュレーション解析に対してより多くの情報が記録される。ロギング頻度が小さくなると、後のポストシミュレーションプロセスに対してより少ない情報が格納される。選択された書き込み頻度が、Sエミュレーション速度に対して一定ではない(casual)関係を有するため、ユーザはロギング頻度を注意して選択すべきである。より大きいロギング頻度は、Sエミュレーション速度を低減する。なぜなら、さらなるシミュレーションが実行され得る前に、メモリへのI/O動作を実行することによって出力データをメモリに記録するために、システムは、時間およびリソースを消費しなければならないからである。
【0197】
ポストシミュレーション解析に関して、ユーザは、シミュレーションが望まれる特定のポイントを選択する。ロギング頻度が1/500レコード/サイクルである場合、ポイント0、500、1000、1500等、500サイクルごとについてレジスタ値が記録される。例えば、ユーザがポイント610において結果を望む場合、ユーザは、レジスタ値が記録されるポイント500を選択し、シミュレーションがポイント610に到達するまで、ユーザは、シミュレーションがポイント610に到達するまで時間に合わせて前の方にシミュレートする。この解析ステージの間、解析速度は、シミュレーション速度と同じである。なぜなら、ユーザは、最初にポイント500についてのデータを最初にアクセスし、その次に、ポイント610の前方にシミュレートを行うためである。より高いロギング頻度において、より多くのデータがポストシミュレーション解析のために格納されることに留意されたい。従って、1/300レコード/サイクルのロギング頻度に対して、データは、ポイント0、300、600、900等、300サイクルごとについて記録される。ポイント610において結果を得るために、ユーザは、初めにレジスタ値が記録されるポイント600を選択し、そしてポイント610まで前方にシミュレートする。システムは、ポストシミュレーション解析の間、ロギング頻度が1/500ではなく1/300である場合、所望のポイント610により高速に到達し得ることに留意されたい。しかし、これは必ずしも高速ではない。ロギング頻度と共に特定の解析ポイントは、ポストシミュレーション解析の点がどれくらい高速で到達するかを決定する。例えば、VCDロギング頻度が1/300ではなく1/500である場合、システムは、ポイント523により速く到達し得る。
【0198】
次いで、ユーザがハードウエアモデルに入力ログを用いてソフトウエアシミュレーションを実行することによって、Sエミュレーション後の解析を実行して、全てのハードウエアコンポーネントのダンプを計算し得る。さらにユーザは、任意のレジスタ書き込み点を遅れることなく選択し、そのログポイントから値変化ダンプを遅れることなく前方に向かって開始する。この値変化ダンプ方法は、ポストシミュレーション解析のために任意のシミュレーション波形にリンクし得る。
【0199】
VI.ハードウエア実現スキーム
(A.概要)
Sエミュレーションシステムは、再構成可能な基板上でFPGAチップのアレイを実現する。ハードウエアモデルに基づいて、Sエミュレーションシステムは、FPGAチップにユーザの回路設計の選択された部分のそれぞれを分割し、マッピングし、配置し、そしてルーティングする。従って、例えば、4×4アレイの16のチップは、これらの16のチップにわたって拡がった大きい回路をモデル化し得る。相互接続スキームは、各チップが2つの「ジャンプ」またはリンク内の別のチップにアクセスすることを可能にする。
【0200】
各FPGAチップは、I/Oアドレス空間(すなわち、REG、CLK、S2H、H2S)のそれぞれに対してアドレスポインタを実現する。特定のアドレス空間に関連付けられた全てのアドレスポインタの組み合わせが互いに連鎖される。そのため、データ転送の間、各チップにおけるワードデータは、所望のワードデータがその選択されたアドレス空間に対してアクセスされるまで、メインFPGAバスおよびPCIバスから/メインFPGAバスおよびPCIバスに、各チップのワードデータは、各チップの選択されたアドレス空間に対して一度に1ワードおよび一度に1チップだけ連続的に選択される。ワードデータの連続的な選択は、ワード選択信号を伝達することによって達成される。ワード選択信号は、チップ内のアドレスポインタによって進行し、次いで、次のチップのアドレスポインタに伝達し、最後のチップまでさらに継続するか、または、システムはアドレスポインタを初期化する。
【0201】
再構成可能な基板のFPGAバスシステムは、PCIバス帯域幅を2回動作させるが、PCIバス速度の半分で動作させる。従ってFPGAチップは、バンクに分離され、より大きな帯域幅のバスを利用する。このFPGAバスシステムのスループットは、PCIバスシステムのスループットを追跡し得、そのため性能は、バス速度の低減によって損失されない。バンク長さを拡張するより多くのFPGAチップまたはピギーバック基板を含むより大きな基板によって拡張が可能になる。
【0202】
(B.アドレスポインタ)
図11は、本発明のアドレスポインタの一実施形態を示す。全I/O動作はDMAストリーミングによって進む。システムが1つのみのバスを有するため、システムは、一度に1ワードだけ連続的にデータにアクセスする。従って、アドレスポインタの一実施形態は、これらのアドレス空間の選択されたワードに連続的にアクセスするシフトレジスタチェーンを使用する。アドレスポインタ400は、フリップフロップ401〜405、ANDゲート406、一対の制御信号の接続、初期化407および移動408を含む。
【0203】
各アドレスポインタは、選択されたアドレス空間における同じワードに対応する各FPGAチップにおいてn個の可能なワードからワードを選択するために、n個の出力(W0,W1,W2,...,Wn−1)を有する。モデル化された特定のユーザ回路設計に応じて、ワード数nが回路設計間で変動し、所与の回路設計に対して、nはFPGAチップ間で変動し得る。図11では、アドレスポインタ400は、5ワード(すなわちn=5)のみのアドレスポインタ400である。従って、特定のアドレス空間に対してこの5ワードのアドレスポインタを含むこの特定のFPGAチップが選択すべき5ワードのみを有する。言うまでもなく、アドレスポインタ400は、任意のワード数nを実現し得る。この出力信号Wnは、さらにワード選択信号によって呼び出され得る。このワード選択信号は、このアドレスポインタにおける最後のフリップフロップの出力に到達する場合、次のFPGAチップのアドレスポインタの入力に伝達されるべきOUT信号によって呼び出される。
【0204】
初期化信号がアサートされる場合、アドレスポインタが初期化される。第1のフリップフロップ401が「1」に設定され、他の全てのフリップフロップ402〜405が「0」に設定される。この点において、アドレスポインタの初期化は、任意のワード選択を可能にしない。すなわち、初期化の後、全てのWn出力が「0」のままである。またアドレスポインタ初期化手順が図12を参照して説明される。
【0205】
移動信号はワード選択に対してポインタの進行を制御する。この移動信号はFPGA I/Oコントローラからの読み出し、書き込み、および空間インデックス制御信号から発生する。各動作が実質的に読み出しまたは書き込みであるために、空間インデックス信号は、実質的にどのアドレスポインタが移動信号に適用されるかを決定する。従って、システムは、一度に選択されたI/Oアドレス空間に関連付けられた1つのみのアドレスポインタを駆動し、この時間の間、システムはそのアドレスポインタのみに移動信号を適用する。移動信号の生成は、図13に関してさらに説明される。図11を参照して、移動信号がアサートされる場合、移動信号は、ANDゲート406への入力およびフリップフロップ401〜405のイネーブル入力に供給される。従って、論理「1」は、ワード出力Wi〜Wi+1の各システムクロックサイクルに移動する。すなわち、ポインタは、Wi〜Wi+1まで移動し、特定のワードの各サイクルを選択する。シフティングワード選択信号がその方向を最後のフリップフロップ405の出力(本明細書中では「OUT」としてラベリングされる)413に向ける場合、その後、このOUT信号は、このアドレスポインタが再度初期化されない場合、図14および図15を参照して説明されるように、多重化されたクロスチップアドレスポインタチェーンを介して次のFPGAチップに向ける。
【0206】
アドレスポインタ初期化手順が説明される。図12は、図11のアドレスポインタに対するアドレスポインタ初期化の状態遷移図である。最初に状態460は、アイドル状態である。DATA_XSFRが「1」に設定される場合、システムは状態461に進む。ここでアドレスポインタは初期化される。ここで初期化信号はアサートされる。各アドレスポインタにおける第1のフリップフロップが「1」に設定され、アドレスポインタにおける全ての他のフリップフロップが「0」に設定される。この点において、アドレスポインタの初期化は、いずれのワード選択もイネーブルしない。すなわち、Wn出力の全てが「0」のままである。DATA_XSFRは「1」のままである間、次の状態は待機状態462である。DATA_XSFRが「0」である場合、アドレスポインタ初期化手順が終了し、システムはアイドル状態460に戻る。
【0207】
アドレスポインタに対して種々の移動信号を生成するための移動信号発生器がここで説明される。FPGA I/Oコントローラ(図10におけるアイテム327、図22)によって生成された空間インデックスは、特定のアドレス空間(すなわち、REG読み出し、REG書き込み、S2H読み出し、H2S書き込み、およびCLK書き込み)を選択する。このアドレス空間内において、本発明のシステムはアクセスされるべき特定のワードを連続的に選択する。この連続的なワード選択は、移動信号によって各アドレスポインタにおいて達成される。
【0208】
移動信号発生器の一実施形態が図13に示される。各FPGAチップ450は、種々のソフトウエア/ハードウエア境界アドレス空間(すなわちREG、S2H、H2S、およびCLK)に対応するアドレスポインタを有する。FPGAチップ450においてモデル化され実現されたアドレスポインタおよびユーザの回路設計に加えて、移動信号発生器470は、FPGAチップ450に設けられる。移動信号発生器470は、アドレス空間デコーダ451およびいくつかのANDゲート452〜456を含む。入力信号は、ワイヤ線457上のFPGA読み出し信号(F_RD)、ワイヤ線458上のFPGA書き込み信号(F_WR)、およびアドレス空間信号459である。どのアドレス空間のアドレスポインタが利用可能であるかに依存して、各アドレスポインタに対する出力移動信号は、ワイヤ線464上のREGR移動、ワイヤ線465上のREGW移動、ワイヤ線466上のS2H移動、ワイヤ線467上のH2S移動、およびワイヤ線468上のCLK移動に対応する。これらの出力信号は、ワイヤ線408上の移動信号に対応する(図11)。
【0209】
アドレス空間デコーダ451は、3−ビット入力信号459を受け取る。さらに2ビット入力信号を受け取り得る。この2ビット信号は4つの可能なアドレス空間を提供するが、3ビット入力は、8つの可能なアドレス空間を提供する。一実施形態では、CLKは、「00」に割り当てられ、S2Hは、「01」に割り当てられ、H2Sは、「10」に割り当てられ、およびREGは、「11」に割り当てられる。入力信号459に依存して、アドレス空間デコーダの出力は、REG、H2S、S2H、およびCLKにそれぞれ対応するワイヤ線460〜463の内の1つ上に「1」を出力するが、残っているワイヤ線は、「0」に設定される。従って、任意のこれらの出力ワイヤ線460〜463が「0」である場合、ANDゲート452〜456の対応する出力が「0」である。同様に、任意のこれらの入力ワイヤ線460〜463が「1」である場合、ANDゲート452〜456の対応する出力が「1」である。例えば、アドレス空間信号459が「10」である場合、アドレス空間H2Sが選択される。ワイヤ線461が「1」である一方で、残っているワイヤ線460、462、および463が「0」である。従って、ワイヤ線466が「1」である一方で、残っているワイヤ線464、465、467、および468は「0」である。同様に、ワイヤ線460が「1」であり、REG空間が選択され、読み出し(F_RD)または書き込み(F_WR)動作が選択されるかどうかに依存している場合、ワイヤ線464上のREGR移動信号またはワイヤ線465上のREGW移動信号上のいずれかが「1」になる。
【0210】
上述のように、空間インデックスはFPGA I/Oコントローラによって生成される。コードでは、移動制御は、
REG空間読み出しポインタ:REGR−move=(SPACE−index==#REG)&READ;
REG空間書き込みポインタ:REGW−move=(SPACE−index==#REG)&WRITE;
S2H空間読み出しポインタ:S2H−move=(SPACE−index==#S2H)&READ;
H2S空間書き込みポインタ:H2S−move=(SPACE−index==#H2S)&WRITE;
CLK空間書き込みポインタ:CLK−move=(SPACE−index==#CLK)&WRITE;
これは、図13上の移動信号発生器の論理図に対して等価なコードである。
【0211】
上述のように、各FPGAチップは、ソフトウエア/ハードウエア境界におけるアドレス空間と同じ数のアドレスポインタを有する。ソフトウエア/ハードウエア境界が4つのアドレス空間(すなわち、REG、S2H、H2S、およびCLK)を有する場合、各FPGAチップは、これらの4つのアドレス空間に対応する4つのアドレスポインタを有する。各FPGAは、これらの4つのアドレスポインタを必要とするため、選択されたアドレス空間における処理された特定の選択されたワードは、任意の1つ以上のFPGAチップに常駐し得るか、または、選択されたアドレス空間におけるデータは、各FPGAチップにモデル化され、実現される種々の回路素子に影響を与える。選択されたワードが適切な1つ以上のFPGAチップにおいて1以上の適切な回路素子を用いて処理されることを確実にするために、所与のソフトウエア/ハードウエア境界のアドレス空間(すなわち、REG、S2H、H2S、およびCLK)に関連付けられたアドレスポインタの各セットは、いくつかのFPGAチップにわたって互いに「連鎖される」。図11を参照して上述されたように、この「連鎖」の実施形態では、1つのFPGAチップの特定のアドレス空間と関連付けられたアドレスポインタが次のFPGAチップと同じアドレス空間に関連付けられたアドレスポインタに「変化される」ことを除いて、移動信号を介して特定のシフティングワード選択機構または伝達ワード選択機構がなおも利用される。
【0212】
4つの入力ピンと4つの出力ピンとを実現して、アドレスポインタを連鎖することは、同じ目的を達成することである。しかしこの実現は、リソースの効率的な使用に関してコストがかかりすぎる。すなわち、4つのワイヤが2つのチップ間で必要とされ、4つの入力ピンおよび4つの出力ピンが各チップにおいて必要とされる。本発明のシステムの一実施形態は、多重化されたクロスチップアドレスポインタチェーンを使用する。このチェインは、ハードウエアモデルが各チップ(チップの2つのI/Oピン)においてチップ間の1つのみのワイヤ、1つのみの入力ピン、および1つの出力ピンを使用することを可能にする。多重化されたクロスチップアドレスポインタチェーンの1つの実施形態が図14に示される。
【0213】
図14に示される実施形態では、ユーザの回路設計は、再構成可能なハードウエア基板470において3つのFPGAチップ415〜417にマッピングされ分割されている。このアドレスポインタは、ブロック421〜432のように示される。ワードWnの数(フリップフロップの数)は、どれくらいの数のワードがユーザのカスタム回路設計に対して各チップにおいて実現されるかに応じて変動し得ることを除いて、各アドレスポインタ(例えばアドレスポインタ427)は、図11に示されるアドレポインタと同様な構造および機能を有する。
【0214】
REGRアドレス空間に対して、FPGAチップ415はアドレスポインタ421を有し、FPGAチップ416はアドレスポインタ425を有し、そしてFPGAチップ417はアドレスポインタ429を有する。REGWアドレス空間に対して、FPGAチップ415はアドレスポインタ422を有し、FPGAチップ416はアドレスポインタ426を有し、そしてFPGAチップ417はアドレスポインタ430を有する。S2Hアドレス空間に対して、FPGAチップ415はアドレスポインタ423を有し、FPGAチップ416はアドレスポインタ427を有し、そしてFPGAチップ417はアドレスポインタ431を有する。H2Sアドレス空間に対して、FPGAチップ415はアドレスポインタ424を有し、FPGAチップ416はアドレスポインタ428を有し、そしてFPGAチップ417はアドレスポインタ432を有する。
【0215】
各チップ415〜417は、マルチプレクサ418〜420それぞれを有する。公知のように、これらのマルチプレクサ418〜420がモデル化され、実際の実現はレジスタおよび論理素子の組み合わせであり得ることに留意されたい。例えば、マルチプレクサは、図15に示されるように、ORゲートに供給されるいくつかのANDゲートであり得る。マルチプレクサ487は、4つのANDゲート481〜484および1つのORゲート485を含む。マルチプレクサ487の入力は、チップの各アドレスポインタからのアウト信号および移動信号である。マルチプレクサ487の出力486は、次のFPGAチップへの入力に通過するチェーンカットアウト信号である。
【0216】
図15では、この特定のFPGAチップは、I/Oアドレス空間に対応する4つのアドレスポインタ475〜478を有する。アドレスポインタの出力(アウト信号および移動信号は、マルチプレクサ487への入力である。例えば、アドレスポインタ475は、ワイヤ線479上のアウト信号およびワイヤ線480上の移動信号を有する。これらの信号はANDゲート481への入力である。ANDゲート481の出力はORゲート485への入力である。ORゲート485の出力はこのマルチプレクサ487の出力である。動作において、対応する移動信号および空間インデックスを組み合わせてアドレスポインタ475〜478のそれぞれの出力におけるアウト信号は、マルチプレクサ487に対するセレクタ信号として機能する。すなわち、アウト信号および移動信号の両方(空間インデックス信号に由来する)は、アクティブ(例えば論理「1」)にアサートされ、マルチプレクサからのワード選択信号をチェーンアウトワイヤラインに伝達する必要がある。移動信号が定期的にアサートされ、アドレスポインタにおけるフリップフロップを介してワード選択信号を移動させ、この信号は入力MUXデータ信号として特徴付けられる。
【0217】
図14に戻って、これらのマルチプレクサ418〜420は、4つのセットの入力と1つの出力を有する。入力の各セットは、(1)特定のアドレス空間に関連付けられたアドレスポインタに対する最後の出力Wn−1ワイヤライン(例えば図11に示されたアドレスポインタにおけるワイヤライン413)で見出されるアウト信号、および(2)移動信号を含む。マルチプレクサ418〜420のそれぞれの出力はチェインアウト信号である。各アドレスポインタにおけるフリップフロップを介したワード選択信号Wnは、この信号がアドレスポインタにおける最後のフリップフロップの出力に到達する場合にアウト信号になる。ワイヤライン433〜435上のチェインアウト信号は、同じアドレスポインタに関連付けられたアウト信号および移動信号が両方ともアクティブに(例えば「1」にアサートされる)アサートされた場合のみ「1」になる。
【0218】
マルチプレクサ418に対して、入力は、アドレスポインタ421〜424からのアウト信号および移動信号にそれぞれ対応する移動信号436〜439およびアウト信号440〜443である。マルチプレクサ419に対して、入力は、アドレスポインタ425〜428からのアウト信号および移動信号にそれぞれ対応する移動信号444〜447およびアウト信号452〜455である。マルチプレクサ420に対して、入力は、アドレスポインタ429〜432からのアウト信号および移動信号にそれぞれ対応する移動信号448〜451およびアウト信号456〜459である。
【0219】
動作時に、ワードWnの任意の所与のシフトに対して、ソフトウエア/ハードウエア境界において選択されたI/Oアドレス空間に関連付けられたこれらのアドレスポインタまたはチェーンアドレスポインタのみがアクティブになる。従って、図14では、アドレス空間REGR、REGW、S2H、またはH2Sの内の1つに関連付けられた、チップ415、416、および417におけるアドレスポインタのみが所与のシフトに対してアクティブである。あるいは、フリップフロップを通過するワード選択信号Wnの所与のシフトに対して、選択されたワードはバス帯域幅に関する制限のために連続的にアクセスされる。一実施形態では、バスは32ビットの幅であり、ワードは32ビットであり、そのため、1つのワードのみが一度にアクセスされ、適切なリソースに送達され得る。
【0220】
アドレスポインタがフリップフロップを介してワード選択信号を伝達またはシフトしている途中である場合、出力チェインアウト信号がアクティブにされず(例えば「1」ではない)、従って、このチップのマルチプレクサはワード選択信号を次のFPGAチップに伝達する準備がまだできていない。アウト信号がアクティブ(例えば「1」)にアサートされた場合、システムが次のFPGAチップにワード選択信号を伝達またはシフトする準備ができていることを示すチェインアウト信号は、アクティブ(例えば「1」)にアサートされる。従って、アクセスが一度に1つのチップで発生する。すなわち、ワード選択シフト動作が別のチップに対して実行される前にワード選択信号は、1つのチップのフリップフロップを介してシフトされる。実際には、チェインアウト信号は、ワード選択信号が各チップにおけるアドレスポインタの末端に到達する場合のみアサートされる。コードでは、チェインアウト信号は、
Chain−out=(REGR−move&REGR−out)│(REGW−move&REGW−out)│(S2H−move&S2H−out)│(H2S−move&H2S−out)│
要するに、システム内のI/Oアドレス空間(すなわち、REG、H2S、S2H、CLK)の数Xに対して、各FPGAはXのアドレスポインタ(各アドレス空間に対する1つのアドレスポインタ)を有する。各アドレスポインタのサイズは、各FPGAチップにおけるユーザのカスタム回路設計をモデル化するために必要とするワードの数に依存する。特定のFPGAチップに対してnワード(すなわち、アドレスポインタに対してnワード)を仮定すると、この特定のアドレスポインタは、nの出力(すなわち、W0,W1,W2,...,Wn−1)を有する。これらの出力Wiはさらにワード選択信号と呼ばれる。特定のワードWiが選択される場合、Wi信号がアクティブ(すなわち「1」)にアサートされる。このワード選択信号がこのチップのアドレスポインタの末端に到達するまで、このワード選択信号は、このチップのアドレスポインタにシフトまたは伝達する。この点において、この信号は、次のチップのアドレスポインタを介してワード選択信号Wiの伝達を開始するチェインアウト信号の生成をトリガする。このように、所与のI/Oアドレス空間に関連付けられたアドレスポインタのチェインは、この再構成可能なハードウエア基板のFPGAチップの全てにわたって実現され得る。
【0221】
(C.ゲートデータ/クロックネットワーク解析)
本発明の種々の実施形態がゲートデータ論理およびゲートクロック論理解析に従ってクロック解析を実行する。ゲートクロック論理(またはクロックネットワーク)およびゲートデータネットワーク決定は、ソフトウエアクロックの連続する実現およびエミュレーションの間のハードウエアモデルの論理評価に対して重要である。図4を参照して説明されるように、クロック解析がステップ305で実行される。クロック解析プロセスに関してさらに詳述するように、図16は、本発明の一実施形態によるフローチャートを示す。さらに図16は、ゲートデータ解析を示す。
【0222】
Sエミュレーションシステムは、ソフトウエアのユーザの回路設計の完成したモデルおよびハードウエアのユーザの回路設計のいくつかの部分を有する。これらのハードウエア部は、クロックコンポーネント(特に派生したクロック)を含む。クロック送達タイミング発行は、ソフトウエアとハードウエアとの間のこの境界のために生じる。完全なモデルがソフトウエアにあるため、ソフトウエアはレジスタ値に影響を与えるクロックエッジを検出し得る。レジスタのソフトウエアモデルに加えて、物理的には、これらのレジスタはハードウエアモデルに配置される。ハードウエアレジスタはさらにその各入力(すなわち、D入力におけるデータをQ出力に移動すること)を評価することを確実にするために、ソフトウエア/ハードウエア境界は、ソフトウエアクロックを含む。ソフトウエアクロックは、ハードウエアモデルにおけるレジスタが正確に評価することを確実にする。ソフトウエアクロックは、ハードウエアレジスタコンポーネントへのクロック入力を制御するのではなく、ハードウエアレジスタのイネーブル入力を実質的に制御する。このソフトウエアクロックは、レース条件を回避し、従って、保持時間の超過(violation)を回避するために緻密なタイミング制御が必要とされない。図16に示されたクロックネットワークおよびゲートデータ論理解析プロセスは、レース条件が回避されフレキシブルなソフトウエア/ハードウエア境界実現が提供されるように、クロックをモデル化および実現する方法およびハードウエアレジスタに対するデータ送達システムを提供する。
【0223】
上述したように、一次クロックは、テストベンチプロセスからのクロック信号である。組み合わせコンポーネントから発生するこれらのクロック信号等の他のクロックの全てが発生されたかまたはゲートクロックである。一次クロックは、ゲートクロックおよびゲートデータ信号の両方を発生し得る。ほとんどの部分に対して、少し(例えば1〜10)のみの発生したクロックまたはゲートクロックは、ユーザの回路設計に存在する。これらの発生したクロックは、ソフトウエアクロックとして実現され、ソフトウエア内にとどまり得る。比較的多数(例えば10よりも多い)の発生したクロックが回路設計内に存在する場合、Sエミュレーションシステムは、そのクロックをハードウエアにモデル化して、I/Oオーバーヘッドを低減し、Sエミュレーションシステムの性能を維持する。ゲートデータは、いくつかの組み合わせ論理を介して一次クロックから発生したクロック以外のレジスタのデータまたは制御入力である。
【0224】
ゲートデータ/クロック解析プロセスはステップ500で開始する。ステップ501は、HDLコードから発生された利用可能なソース設計データベースコードを獲得し、ユーザのレジスタ素子をSエミュレーションシステムのレジスタコンポーネントにマッピングする。ユーザレジスタのSエミュレーションシステムへの一対一マッピングは、以後のモデル化プロセスを容易にする。いくつかの場合、このマッピングは、特定の未処理物(primitive)を用いてレジスタ素子を説明するユーザ回路設計を処理するために必要である。従って、RTLレベルコードに対して、Sエミュレーションレジスタは、かなり容易に使用され得るため、RTLレベルコードは、十分に高いレベルにおいて存在し、より低いレベルの実現を変更することを可能にする。ゲートレベルネットリストに対して、Sエミュレーションシステムは、コンポーネントのセルライブラリにアクセスし、特定の回路設計に特有の論理素子に適応するようにこのコンポーネントを修正する。
【0225】
ステップ502は、ハードウエアモデルのレジスタコンポーネントからのクロック信号を抽出する。このステップは、システムが一次クロックおよび発生したクロックを決定することを可能にする。さらにこのステップは、回路設計における種々のコンポーネントによって必要とされる全てのクロック信号を決定する。このステップからの情報は、ソフトウエア/ハードウエアクロックモデル化ステップを容易にする。
【0226】
ステップ503は、一次クロックおよび発生したクロックを決定する。一次クロックはテストベンチコンポーネントから発生し、ソフトウエアのみでモデル化される。発生したクロックは組み合わせ論理から発生され、このクロックは次に一次クロックによって駆動される。デフォルトによって、本発明のSエミュレーションシステムは、発生したクロックをソフトウエア内で保持する。発生したクロックの数(例えば10未満)が小さい場合、これらの発生したクロックはソフトウエアクロックとしてモデル化され得る。これらの発生したクロックを生成する組み合わせコンポーネントの数は小さく、そのため有意なI/Oオーバーヘッドは、これらの組み合わせコンポーネントをソフトウエア内に常駐させ続けることによって与えられない。しかし、発生したクロックの数が大きい(例えば10より大きい)場合、これらの発生したクロックはハードウエアにモデル化され、I/Oオーバーヘッドを最小化し得る。時には、ユーザの回路設計が一次クロックから発生した多くの発生したクロックコンポーネントを使用する。従って、システムは、ハードウエアにおけるクロックを構築し、ソフトウエアクロックの数を小さく保持する。
【0227】
決定ステップ504は、システムが任意の発生したクロックがユーザの回路設計において見出されるかどうかを決定することを要求する。システムが任意の発生したクロックがユーザの回路設計において見出されるかどうかを決定することを要求しない場合、ステップ504は、「いいえ」であると決定し、クロック解析はステップ508で終了する。なぜなら、ユーザの回路設計における全てのクロックが一次クロックであり、これらのクロックが単にソフトウエアでモデル化されただけであるためである。発生したクロックがユーザの回路設計で見出された場合、ステップ504は「はい」であると決定し、アルゴリズムはステップ505まで進む。
【0228】
ステップ505は、一次クロックから発生されたクロックまでのファンアウト(fan−out)組み合わせコンポーネントを決定する。言い換えると、このステップは、組み合わせコンポーネントによって一次クロックからのクロック信号データ経路を追跡する。ステップ506は、発生したクロックからのファンイン(fan−in)組み合わせコンポーネントを決定する。言い換えると、このステップは、組み合わせコンポーネントから発生されたクロックまでのクロック信号データ経路を追跡する。システムにおけるファンアウトセットおよびファンインセットを決定することは、ソフトウエアにおいて再帰的に為される。正味のNのファンインセットは以下のようである。
【0229】
【数5】
【0230】
ゲートクロックまたはデータ論理ネットワークは、正味のNのファンインセットおよびファンアウトセット、ならびにその交点を決定するを再帰的に決定することによって決定される。本明細書における最終的な目標は、いわゆる正味のNのファンインセットを決定することである。典型的には、正味のNは、各ファンインからのゲートクロック論理を決定するためのクロック入力ノードである。各ファンインからゲートデータ論理を決定するために、正味のNは、近くにある(at hand)データ入力に関連付けられたクロック入力ノードである。ノードがレジスタ上にある場合、正味のNは、このレジスタに関連付けられたデータ入力に対するこのレジスタへのクロック入力である。システムは正味のNを駆動する全コンポーネントを見出す。正味のNで駆動する各コンポーネントXに対して、システムは、コンポーネントXが組み合わせコンポーネントであるか否かを決定する。各コンポーネントXが組み合わせコンポーネントではない場合、正味のNのファンインセットは組み合わせコンポーネントを有さず、正味のNは一次クロックである。
【0231】
しかし、少なくとも1つのコンポーネントXが組み合わせコンポーネントである場合、システムはコンポーネントXの正味の入力Yを決定する。ここで、システムは、コンポーネントXへの入力ノードを見出すことによって回路設計においてさらに再検査する。各コンポーネントXの正味の各入力Yに対して、正味のYに接続されるファンインセットWが存在し得る。この正味のYのファンインセットWは、正味のNのファンインセットに与えられ、コンポーネントXは、セットNに与えられる。
【0232】
正味のNのファンアウトセットは同様に決定される。正味のNファンアウトセットは以下のように決定される。
【0233】
【数6】
【0234】
再度、ゲートクロックまたはデータ論理ネットワークが正味のNのファンインセットおよびファンアウトセット、ならびにその相互接続を再帰的に決定することによって決定される。本明細書の最終的な目標は、正味のNのいわゆるファンアウトセットを決定することである。典型的には、正味のNは、各ファンアウトからのゲートクロック論理を決定するためのクロック出力ノードである。従って、正味のNを用いる全ての論理素子のセットが決定される。各ファンアウトからのゲートデータ論理を決定するために、正味のNは、近くにあるデータ出力に関連付けられたクロック出力ノードである。ノードがレジスタ上にある場合、正味のNは、このレジスタに関連付けられた一次クロック駆動入力に対するこのレジスタの出力である。システムは正味のNを用いる全コンポーネントを見出す。正味のNを用いる各コンポーネントXに対して、システムは、コンポーネントXが組み合わせコンポーネントであるか否かを決定する。各コンポーネントXが組み合わせコンポーネントではない場合、正味のNのファンアウトセットは組み合わせコンポーネントを有さず、正味のNは一次クロックである。
【0235】
しかし、少なくとも1つのコンポーネントXが組み合わせコンポーネントである場合、システムはコンポーネントXの正味の出力Yを決定する。ここで、システムは、コンポーネントXからの出力ノードを見出すことによって回路設計における一次クロックからのさらなる転送を検索する。各コンポーネントXからの正味の各出力Yに対して、ファンアウトセットWは、正味のYに接続される論理出力セットWが存在し得る。この正味のYのファンアウトセットWは、正味のNのファンアウトセットに与えられ、コンポーネントXは、セットNに与えられる。
【0236】
ステップ507は、クロックネットワークまたはゲートクロック論理を決定する。クロックネットワークはファンイン組み合わせコンポーネントおよびファンアウト組み合わせコンポーネントの相互接続である。
【0237】
同様に、同じファンインおよびファンアウトの原理が使用されて、ゲートデータ論理を決定し得る。ゲートクロックと同様に、ゲートデータは、いくつかの組み合わせ論理によって一次クロックによって駆動されるレジスタ(クロックを除く)のデータまたは制御入力である。ゲートデータ論理はゲートデータのファンインおよび一次クロックからのファンアウトの交点である。従って、クロック解析およびゲートデータ解析は、いくつかの組み合わせ論理およびゲートデータ論理によってゲートクロックネットワーク/ゲートクロック論理を生じる。以下で説明されるように、ゲートクロックネットワークおよびゲートデータネットワーク決定は、ソフトウエアクロックの成功した実現およびエミュレーションの間のハードウエアモデルにおける論理評価に対して重要である。クロック/データネットワーク解析は、ステップ508で終了する。
【0238】
図17は、本発明の一実施形態によるハードウエアモデルの基本的な構成ブロックを示す。レジスタコンポーネントに対して、Sエミュレーションシステムは、非同期負荷制御を用いて、エッジトリガ(すなわちフリップフロップ)およびレベルに敏感な(すなわちラッチ)レジスタハードウエアモデルを構築するために、基本的なブロックとしてDタイプフリップフロップを使用する。このレジスタモデル構築ブロックは以下のポートを有する。すなわち、Q(出力状態)、A_E(非同期イネーブル)、A_D(非同期データ)、S_E(同期イネーブル)、S_D(同期データ)およびもちろんSystem.clk(システムクロック)である。
【0239】
Sエミュレーションレジスタモデルは、システムクロックの正のエッジまたは非同期イネーブル(A_E)入力の正のレベルによってトリガされる。これらの2つの正のエッジまたは正のレベルのトリガイベントのいずれかが発生する場合、レジスタモデルは非同期イネーブル(A_E)入力を検索する。非同期イネーブル(A_E)入力がイネーブルされると、出力Qは、非同期データ(A_D)の値を取得し、そうでなければ、同期イネーブル(S_E)入力がイネーブルされると、出力Qは、同期データ(S_D)の値を取得する。一方で、非同期イネーブル(A_E)も同期イネーブル(S_E)入力もイネーブルされない場合、出力Qは、システムクロックの正のエッジの検出にもかかわらず、評価されない。このように、これらのイネーブルポートに対する入力がこの基本的な構築ブロックレジスタモデルの動作を制御する。
【0240】
システムは、特定のイネーブルレジスタであるソフトウエアクロックを使用して、これらのレジスタモデルのイネーブル入力を制御する。複雑なユーザ回路設計では、数100万の素子が回路設計において見出され、従ってSエミュレーションシステムは、ハードウエアモデルにおける数100万の素子を実現する。これらの素子の全てを個別に制御することは高価である。なぜなら、ハードウエアモデルに数100万の制御信号を送信することに対するオーバーヘッドがソフトウエア内のこれらの素子を評価するよりもより長い時間がかかるためである。しかし、この複雑な回路設計が数クロックのみ(1〜10)を要求し、レジスタおよび組み合わせコンポーネントのみによってシステムの状態変化を制御するのに十分である。Sエミュレーションシステムのハードウエアモデルは、レジスタおよび組み合わせコンポーネントのみ使用する。Sエミュレーションシステムは、さらにソフトウエアクロックによってハードウエアモデルの評価を制御する。Sエミュレータシステムにおいて、レジスタに対するハードウエアモデルは、他のハードウエアコンポーネントに直接接続されたクロックを有さない。むしろ、ソフトウエアカーネルは全クロックの値を制御する。少しのクロック信号を制御することによって、カーネルは、コプロセッサ処理オーバーヘッドの無視できる量を用いてハードウエアモデルの評価にわたる全ての制御を有する。
【0241】
レジスタモデルがラッチまたはフリップフロップとして用いられるかどうかに依存して、ソフトウエアクロックは、非同期イネーブル(A_E)または同期イネーブル(S_E)ワイヤ線のいずれかに入力される。ソフトウエアモデルからハードウエアモデルへのソフトウエアクロックの用途は、クロックコンポーネントのエッジ検出によってトリガされる。ソフトウエアカーネルがクロックコンポーネントのエッジを検出する場合、ソフトウエアカーネルは、CLKアドレス空間を介してクロックエッジレジスタを設定する。このクロックエッジレジスタはハードウエアレジスタモデルに対して、クロック入力ではなくイネーブル入力を制御する。グローバルシステムクロックは、クロック入力をハードウエアレジスタモデルにさらに供給する。しかし、クロックエッジレジスタはソフトウエアクロック信号を、二重バッファインターフェイスを介してハードウエアレジスタモデルに供給する。以下に説明するように、ソフトウエアクロックからハードウエアモデルまでの二重バッファインターフェイスは、全てのレジスタモデルがグローバルシステムクロックに関して同期的に更新されることを確実にする。従って、ソフトウエアクロックの使用は、保持時間の超過の危険を取り除く。
【0242】
図18Aおよび図18Bは、ラッチおよびフリップフロップに対するビルディングブロックレジスタモデルの実現を示す。これらのレジスタモデルは適切なイネーブル入力を介してソフトウエアクロック制御される。レジスタモデルがフリップフロップまたはラッチとして使用されるかどうかに応じて、非同期ポート(A_E、A_D)および同期ポート(S_E、S_D)は、ソフトウエアクロックまたはI/O動作のいずれかのために使用される。図18Aは、ラッチとして使用される場合のレジスタモデルの実現を示す。ラッチは、レベルに敏感である。すなわち、クロック信号がアサートされた(例えば「1」)限り、出力Qは、入力Dに従う。ここで、ソフトウエアクロック信号は、非同期イネーブル(A_E)入力に供給され、データ入力は、非同期データ(A_D)入力に供給される。I/O動作に対して、ソフトウエアカーネルは、同期イネーブル(S_E)および同期データ(S_D)入力を使用して、値をQポートにダウンロードする。このS_EポートがREG空間アドレスポインタとして使用され、S_Dは、データをローカルデータバスに/ローカルデータバスからアクセスするために使用される。
【0243】
図18Bは、設計フリップフロップとして使用される場合のレジスタモデルの実現を示す。設計フリップフロップは、次の状態論理(データD、セット(S)、リセット(R)、およびイネーブルE)を決定するために以下のポートを使用する。設計フリップフロップの次の状態論理の全ては、同期データ(S_D)入力に供給されるハードウエア組み合わせコンポーネントに分解される。ソフトウエアクロックは、同期イネーブル(S_E)入力へ入力される。I/O動作に対して、ソフトウエアカーネルは、非同期イネーブル(A_E)および非同期データ(A_D)入力を使用して、値をQポートにダウンロードする。A_Eポートは、REG空間書き込みアドレスポインタとして使用され、A_Dポートが使用されて、データをローカルデータバスに/ローカルデータバスからアクセスする。
【0244】
ここで、ソフトウエアクロックが説明される。本発明のソフトウエアクロックの一実施形態は、ハードウエアレジスタモデルへのクロックイネーブル信号であり、これらのハードウエアレジスタモデルへの入力におけるデータがシステムクロックと共におよびシステムクロックと同期して評価される。これはレース条件および保持時間超過を取り除く。ソフトウエアクロック論理の一実施形態では、ソフトウエアにおけるクロックエッジ検出論理を含む。このクロックエッジ検出論理は、クロックエッジ検出に応じてハードウエアにおけるさらなる論理をトリガする。このようなイネーブル信号論理は、データのこれらのハードウエアレジスタモデルへの到達の前に、ハードウエアレジスタモデルへのイネーブル入力にイネーブル信号を生成する。ゲートクロックネットワークおよびゲートデータネットワーク決定は、ハードウエア加速モードの間、ソフトウエアクロックおよびハードウエアモデルにおける論理評価の成功した実現に対して重要である。上述したように、クロックネットワークまたはゲートクロック論理は、ゲートクロックのファンインおよび一次クロックのファンアウトの交点である。同様に、ゲートデータ論理はさらに、ゲートデータのファンインおよびデータ信号に対する一次クロックのファンアウトの交点である。これらのファンインおよびファンアウトの概念は図16を参照して説明される。
【0245】
上述したように、一次クロックは、ソフトウエアのテストベンチプロセスによって生成される。発生したクロックまたはゲートクロックは、組み合わせ論理のネットワークおよび次いで一次クロックによって駆動されたレジスタから生成される。デフォルトによって、本発明のSエミュレーションシステムは、発生したクロックをソフトウエア内で保持する。発生したクロックの数(例えば10未満)が小さい場合、これらの発生したクロックはソフトウエアクロックとしてモデル化され得る。これらの発生したクロックを生成する組み合わせコンポーネントの数が小さく、そのため有意なI/Oオーバーヘッドは、これらの組み合わせコンポーネントをソフトウエア内にモデル化することによって与えられない。しかし、発生したクロックの数が大きい(例えば10より大きい)場合、これらの発生したクロックおよびこの組み合わせコンポーネントはハードウエアにモデル化され、I/Oオーバヘッドを最小化し得る。
【0246】
最終的には、本発明の一実施形態に従って、ソフトウエアにおいて発生する(一次クロックへの入力を介して)クロックエッジ検出が、ハードウエアにおけるクロック検出に変換され得る(クロックエッジレジスタへの入力を介して)。ソフトウエアにおけるクロックエッジ検出は、ハードウエアにおけるイベントをトリガし、ハードウエアモデルにおけるレジスタは、データ信号の前のクロックイネーブル信号を受け取り、データ信号の評価がシステムクロックとの同期において発生し、保持時間超過を回避することを確実にする。
【0247】
上述のように、Sエミュレーションシステムは、ソフトウエアにおけるユーザの回路設計の完全なモデルおよびハードウエアにおけるユーザの回路設計の幾つかの部分を有する。カーネルにおいて特定されたように、ソフトウエアはハードウエアレジスタ値に影響を与えるクロックエッジを検出し得る。さらにハードウエアレジスタがその各入力を評価することを確実にするために、ソフトウエア/ハードウエア境界はソフトウエアクロックを含む。ソフトウエアクロックは、ハードウエアモデルにおけるレジスタがシステムクロックと同期して、そして任意の保持時間超過なしで評価することを確実にする。ソフトウエアクロックは、ハードウエアレジスタコンポーネントへのクロック入力を制御するのではなく、ハードウエアレジスタコンポーネントのイネーブル入力を実質的に制御する。ソフトウエアクロックを実現するための二重バッファアプローチは、レジスタがシステムクロックと同期させて評価することによってレース条件を回避し、保持時間超過を回避するための緻密なタイミング制御のための必要性を取り除くことを確実にする。
【0248】
図19は、本発明に従うクロックインプリメンテーションシステムの一つの実施形態を示す。最初に、図16に関して上述されたように、Sエミュレータシステムによってゲートクロック論理およびゲートデータ論理が判定される。従って、ゲートクロック論理およびゲートデータ論理は区別される。二重バッファをインプリメントする場合、駆動源および二重バッファ一次論理はまた、区別されるべきである。従って、ゲートデータ論理513およびゲートクロック論理514は、ファン−イン(fan−in)およびファン−アウト(fan−out)解析とは区別される。
【0249】
モジュール化一次クロックレジスタ510は、第1のバッファ511および第二のバッファ512を含む。これらは、両方ともDレジスタである。この一次クロックは、ソフトウェアでモジュール化されるが、二重バッファの実現は、ソフトウェアおよびハードウェアの両方でモジュール化される。ソフトウェアにあるプライマルクロックレジスタ510でクロックエッジ検出が起こり、ハードウェアモデルをトリガして、ハードウェアモデルへのソフトウェアクロック信号を発生させる。データおよびアドレスは、ワイヤライン519および520でそれぞれ第1のバッファ511に入る。この第1のバッファ511のワイヤライン521によるQ出力は、第二のバッファ512のD入力に結合される。また、この第1のバッファ511のQ出力は、ワイヤライン522によってゲートクロック論理514へ提供され、最終的にクロックエッジレジスタ515の第1のバッファ516へのクロック入力を駆動する。ワイヤライン523による第二のバッファ512からのQ出力は、ユーザカスタム設計された回路モデルにあるワイヤライン530を介してレジスタ518の入力を最終的に駆動する。一次クロックレジスタ510にある第二のバッファ512へのイネーブル入力は、ワイヤライン533による状態マシンからのINPUT−EN信号である。この状態マシンは、従って、評価サイクルを判定し、かつ、様々な信号を制御する。
【0250】
クロックエッジレジスタ515は、また、第1のバッファ516および第二のバッファ517を含む。クロックエッジレジスタ515は、ハードウェアでインプリメントされる。(一次クロックレジスタ510への入力を介して)ソフトウェアでクロックエッジ検出が起こる場合、このことは、(クロックエッジレジスタ515を介して)ハードウェアにあるハードウェアの同じクロックエッジ検出をトリガし得る。ワイヤライン524による第1のバッファ516へのD入力は、論理「1」に設定される。ワイヤライン525によるクロック信号は、ゲートクロック論理514から導かれ、最終的には、ワイヤライン522による第1のバッファ511の出力において一次クロックレジスタ510から導かれる。ワイヤライン525によるこのクロック信号は、ゲートクロック信号である。第1のバッファ516へのイネーブルワイヤライン526は、I/Oサイクルおよび評価サイクルを制御する状態マシンからの〜EVAL信号である(後に説明される)。第1のバッファ516はまた、ワイヤライン527によるRESET信号を有する。この同じリセット信号は、また、クロックエッジレジスタ515にある第二のバッファ517に提供される。第1のバッファ516のQ出力は、ワイヤライン529によって第二のバッファ517のD入力に供給される。第二のバッファ517は、CLK−EN信号に対するワイヤライン528によるイネーブル入力およびワイヤライン527によるリセット入力を有する。ワイヤライン532による第二のバッファ517のQ出力は、ユーザカスタム設計された回路モデルのレジスタ518のイネーブル入力に提供される。レジスタ518と共にバッファ511、512および517は、システムクロックによってクロックされる。クロックエッジレジスタ515のバッファ516のみが、ゲートクロック論理514からのゲートクロックによってクロックされる。
【0251】
レジスタ518は、ハードウェアでモデル化され、かつ、ユーザカスタム回路設計の一部である典型的なD型のレジスタモデルである。本発明のクロックインプリメンテーションスキームのこの実施形態は、厳密に評価を制御する。このクロックセットアップの最終的な目標は、ワイヤライン532によるクロックイネーブル信号が、ワイヤライン530によるデータ信号の前にレジスタ518に到達することを保証することである。その結果、このレジスタによるデータ信号の評価は、レース(race)状態がなくシステムと同期される。
【0252】
繰り返すために、一次クロックレジスタ510は、ソフトウェアにモデル化されるが、二重バッファインプリメンテーションは、ソフトウェアとハードウェの両方にモデル化される。クロックエッジレジスタ515は、ハードウェアにインプリメントされる。ゲートデータ論理513およびゲートクロック論理514は、モデル化の目的に対してファン−インおよびファン−アウト解析とは区別される。このゲートデータ論理513およびゲートクロック論理514は、また、ソフトウェア(ゲートデータおよびゲートクロックが小さい場合)またはハードウェア(ゲートデータおよびゲートクロックが大きい場合)にモデル化され得る。ゲートクロックネットワークおよびゲートデータネットワークを決定することが、ソフトウェアクロックおよびハードウェアアクセラレーションモード中のハードウェアモデルの論理評価をうまくインプリメントするために重要である。
【0253】
ソフトウェアクロックのインプリメンテーションは、主に、〜EVAL、INPUT−EN、CLK−ENおよびRESET信号のアサーションのタイミングに合わせて、図19で示されるクロックセットアップに依存する。一次クロックレジスタ510は、クロックエッジを検出して、ハードウェアモデルに対するソフトウェアクロックの発生をトリガする。このクロックエッジ検出イベントは、ワイヤライン525によるクロック入力、ゲートクロック論理514、およびワイヤライン522を介してクロックエッジレジスタ515の「アクティベーション」をトリガする。これにより、クロックレジスタ515は、また、同じクロックエッジを検出する。このように、(一次クロックレジスタ510への入力519および520を介して)ソフトウェアで起こるクロック検出は、(クロックエッジレジスタ515への入力525を介して)ハードウェアにおけるクロックエッジ検出に転換され得る。この時点で、一次クロックレジスタ510にある第二のバッファ512へのINPUT−ENワイヤライン533、および、クロックエッジレジスタ515にある第二のバッファ517へのCLK−ENワイヤライン528はアサートされておらず、従って、データは評価されない。次いで、クロックエッジは、データがハードウェアレジスタモデルで評価される前に検出される。この段階で、ワイヤライン519によるデータバスからのデータは、ゲートデータ論理513およびハードウェアモデル化ユーザレジスタ518へ伝搬すらされていないことに留意されたい。確かに、ワイヤライン533のINPUT−EN信号がまだアサートされていないために、このデータは、一次クロックレジスタ510にある第二のバッファ512に到達すらしていない。
【0254】
I/O段階中に、ワイヤライン526の〜EVAL信号は、クロックエッジレジスタ515にある第1のバッファ516をイネーブルするようにアサートされる。〜EVAL信号が、ゲートクロック論理を通って、第1のバッファ516のワイヤライン525のクロック入力に方向付けるため、〜EVAL信号はまた、ゲートクロック論理514を通り、ゲートクロック信号を監視する。従って、四つの状態を評価する状態マシンに関して後に説明されるように、〜EVAL信号は、図19で示されたシステムの一部を通るデータおよびクロック信号を安定化させるために必要である限り保持され得る。
【0255】
信号が安定化した場合、I/Oが完了した場合、そうでなければ、システムがデータを評価する準備が整った場合、〜EVALは、第1のバッファ516をディセーブルするようにディアサートされる。CLK−EN信号は、アサートされて、第二のバッファ517をイネーブルするためにワイヤライン528を介して第二のバッファ517に適用され、そして、ワイヤライン529によって論理値「1」をレジスタ518の入力をイネーブルするために、ワイヤ線532によってQ出力に送る。次に、レジスタ518は、イネーブルされて、ワイヤライン530にある任意のデータは、システムクロックによってレジスタ518内に同期してクロックされる。読み手(reader)が理解し得るように、レジスタ518へのイネーブル信号は、このレジスタ518へのデータ信号の評価よりも速く伝わる。
【0256】
ワイヤライン533によるINPUT−EN信号は、第二のバッファ512に対してアサートされない。また、ワイヤライン527によるRESETエッジレジスタ信号は、クロックエッジレジスタ515のバッファ516および517に対してアサートされて、これらのバッファをリセットし、これらの出力が論理「0」であることを保証する。INPUT−EN信号がバッファ512に対してアサートされているので、ワイヤライン521によるデータは、ここで、ゲートデータ論理513へ、そして、ワイヤライン530によってユーザの回路レジスタ518へ伝搬する。このレジスタ518へのイネーブル入力は、ここで、論理「0」であるので、ワイヤライン530によるデータは、レジスタ518内にクロックされ得ない。しかしながら、以前のデータは、RESET信号がアサートされて、レジスタ518をディセーブルする前に、ワイヤライン532による以前にアサートされたイネーブル信号によってクロックインされている。従って、レジスタ518への入力データ、および、ユーザのハードウェアモデル化回路設計、他のレジスタへの入力は、それぞれのレジスタ入力ポートに対して安定化する。クロックエッジが、実質的にソフトウェアに検出される場合、一次クロックレジスタ510およびハードウェア内のクロックエッジレジスタ515は、レジスタ518へのイネーブル入力をアクティブにする。その結果、レジスタ518の入力を待機するデータおよびそれぞれのレジスタへの入力を待機する他のデータは、同時に、および、システムクロックにより同期してクロックインされる。
【0257】
上記されたように、ソフトウェアクロックインプリメンテーションは、主に、〜EVAL、INPUT−EN、CLK−EN、および、RESET信号をアサートするタイミングに合わせた図19に示されたクロックセットアップに依存する。図20は、本発明の一つの実施形態に従う図19のソフトウェアクロック論理を制御する有限状態マシンの四つの状態を示す。
【0258】
状態540において、システムは、アイドル状態である、または、いくつかのI/O動作が進行中である。EVAL信号は、論理「0」である。システムコントローラによって生成されたEVAL信号は、評価サイクルを判定し、システムの論理を安定化するために、必要なだけ多くのクロックサイクルが続く。通常、EVAL信号の持続期間は、コンパイル中の配置スキームによって判定され、最長ダイレクトワイヤの長さ、および、最長分割多重ワイヤ(すなわち、TDM回路)に基づく。評価中のEVAL信号は、論理「1」である。
【0259】
状態541では,クロックはイネーブルされている。CLK−EN信号は、論理「1」にアサートされて、次いで、ハードウェアレジスタモデルに対するイネーブル信号がアサートされる。ここで、ハードウェアレジスタモデルにおける以前のゲートデータは、保持時間に違反する危険がなく、同期して評価される。
【0260】
状態542において、新しいデータがINPUT−EN信号が論理「1」にアサートされる場合、RESET信号もまた、ハードウェアレジスタモデルからイネーブル信号を取り除くためにアサートされる。しかしながら、ゲートデータ論理ネットワークを通ってハードウェアレジスタモデル内にイネーブルされた新規のデータは、ハードウェアレジスタモデルの意図された宛先へ伝搬し続けるか、または、その宛先に到達するかであり、イネーブル信号が再びアサートされる場合、および、イネーブル信号が再びアサートされるとき、ハードウェアレジスタモデル内にクロックされるのを待機している。
【0261】
状態543において、伝搬する新規のデータは、EVAL信号が論理「1」である間、論理が安定化している。また、多重通信ワイヤは、図9A、図9Bおよび図9Cに関連して、時分割多重(TDM)回路として上述されたように、論理「1」である。EVAL信号が、デアサートされるまたは、論理「0」に設定される場合、システムは、アイドル状態540に戻り、ソフトウェアによるクロックエッジの検出に基づく評価を待機する。
【0262】
(D.FPGAアレイおよび制御)
Sエミュレータシステムは、最初に、ソフトウェアモデルおよび要素の種類を含む様々な制御に基づいたハードウェアモデル内にユーザ回路設計データをコンパイルする。ハードウェアのコンパイルプロセス中に、システムは、ユーザの回路設計を作り上げる様々な要素を最適に区切る、設置する、および、相互接続するための図6に関して以前に説明されたようなマッピング、配置、ルーティングプロセスを実行する。公知のプログラミングツールを用いて、ビットストリームコンフィギュレーションファイルまたはプログラマオブジェクトファイル(.pof)(あるいは、元のバイナリファイル(.rbf))が参照され、多くのEPGAチップを含むハードウェアボードを再構成する。各チップは、ユーザの回路設計に相当するハードウェアの一部を含む。
【0263】
一実施形態において、Sエミュレータシステムは、4×4のFPGAチップのアレイ(計16チップ)を使用する。例示的なFPGAチップは、FPGA論理デバイス、および、Altera FLEX 10K デバイスのXilinx XC4000 シリーズ系統を含む。
【0264】
XC4000、XC4000A、XC4000D、XC4000H、XC4000E、XC4000EX、XC4000L、および、XC4000XLを含むFPGAのXilinx XC4000シリーズが用いられ得る。特定のFPGAは、Xilinx XC4005H、XC4025、および、Xilinx4028EXを含む。Xilinx XC4028EX FPGAエンジンの容量は、単一のPCIボード上で50万ゲートまで近づいている。これらのXilinx FPGAの詳細は、それらのデータブック(Xilinx、The Programmable Logic Data Book (9/96))から得ることができる。このデータブックは、本明細書中で参照として援用される。Altera FPGAの場合、詳細は、これらのデータブック(Altera、The 1996 Data Book (1996年6月))で見つけることができる。このデータブックは、本明細書中で参照として援用される。
【0265】
XC4025FPGAの簡単で一般的な詳細が提供される。各アレイチップは、240ピンのXilinxのチップからなる。Xilinx XC4025で密集されたアレイボードは、約440,000個の構造化可能なゲートを含み、コンピュータで集約してタスクを実行することが可能である。Xilinx XC4025FPGAは、1024個の構造化可能な論理ブロック(CLB)からなる。各CLBは、32ビット非同期SRAM、または、少量の一般的なブール論理、および、ストローブされた二つのレジスタをインプリメントし得る。チップの周囲において、ストローブされていないI/Oレジスタが提供される。XC4025の代替物は、XC4005Hである。120,000個の構造化可能なゲートを有するアレイボードの比較的低いコストのバージョンである。XC4005Hデバイスは、高電力24mAの駆動回路を有するが、標準的なXC4000シリーズでは、入力/出力フリップ/フロップを欠いている。これらのXilinx FPGA、および、他のXilinx FPGAの詳細は、それらの公共で利用可能なデータシートを通して得られ得る。このデータシートは本明細書中で参照として援用される。
【0266】
Xilinx XC4000シリーズFPGAの機能は、配置データを内部メモリセル内にロードすることによってカスタマイズされ得る。これらのメモリセルに格納された値は、FPGAの論理関数および論理相互接続を決定する。これらのFPGAの配置データは、オンチップメモリに格納され得、外部メモリからロードされ得る。FPGAが、外部シリアルPROMまたは外部パラレルPROMからの配置データを読み出し得るか、あるいは、配置データが、外部デバイスからFPGA内に書き込まれ得るかのいずれかである。これらのFPGAは、特にハードウェアが動的に変化される場合、または、ユーザが、ハードウェアが異なるアプリケーションに適応されるように望む場合に、無制限に何回でも再プログラムされ得る。
【0267】
概していうと、XC4000シリーズFPGAは、1024個までのCLBを有する。各CLBは、三つの入力を有する第三のルックアップテーブル(または、関数発生器H)、ならびに、二つのフリップ−フロップまたはラッチへの入力のうちのいくつかを提供する四つの入力を有する二つのルック−アップテーブル(または、関数発生器FおよびG)と共に、二つのルック−アップテーブルのレベルを有する。これらのルック−アップテーブルの出力は、これらのフリップ−フロップまたはラッチと独立して駆動され得る。CLBは、随意のブール関数((1)四つまたは五つの変数を有する任意の関数、(2)四つの変数を有する任意の関数、四つまでの無関係の変数を有する任意の第二の関数、三つまでの無関係の変数を有する任意の第三の関数、(3)四つの変数を有する一つの関数および六つの変数を有する別の関数、(4)四つの変数を有する任意の二つの関数、(5)九つの変数を有するいくつかの関数)の次の組み合わせをインプリメントし得る。二つのD型フリップ−フロップまたはラッチは、CLB入力を登録する、または、ルック−アップテーブルの出力を格納するために利用可能である。これらのフリップ−フロップは、ルック−アップテーブルとは独立して用いられ得る。DINは、これらの二つのフリップ−フロップのうちの一つまたはラッチのいずれかへの直接入力として用いられ得、H1は、H関数発生器を通して他方を駆動する。
【0268】
CLB(すなわち、FおよびG)の四つの入力関数発生器の各々は、繰り上げ信号および借り信号を迅速に発生するための専用演算論理を含む。この専用演算論理は、キャリー−インおよびキャリー−アウトを有する2ビット加算器をインプリメントするように配置され得る。また、これらの関数生成器は、読み出し/書き込みランダムアクセスメモリ(RAM)としてインプリメントされ得る。四つの入力ワイヤラインは、RAMのためのアドレスラインとして用いられる。
【0269】
Altera FLEX 10Kチップは、コンセプトがやや似ている。これらのチップは、複数の32ビットバスを有するSRAMを基礎としたプログラマブル論理デバイス(PLD)である。特に、各FLEX 10K100チップは、約1,000,000個のゲート、12個の埋め込みアレイブロック(EAB)、624個の論理アレイブロック(LAB)、LAB一個につき8個の論理素子(LE)(または、4,992個のLE)、5,392個のフリップ−フロップまたはレジスタ、406個のI/Oピン、および、全体で503個のピンを含む。
【0270】
Altera FLEX 10Kチップは、埋め込みアレイブロック(EBA)の埋め込みアレイ、および、論理アレイブロック(LAB)の論理アレイを含む。EABは、様々なメモリ(例えば、RAM、ROM、FIFO)、および、複素論理関数(例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、乗算器、データ変換関数、状態マシン)をインプリメントするように用いられ得る。メモリ関数をインプリメントするために、EABは、2,048ビットを提供する。論理関数をインプリメントするために、EABは、100から600個のゲートを提供する。
【0271】
LABは、LEを介して、中間の大きさの論理ブロックをインプリメントするように用いられ得る。各LABは、約96個の論理ゲートを表し、8個のLEおよび局所的な相互接続を含む。LEは、4つの入力を有するルック−アップテーブル、プログラマブルフリップ−フロップ、ならびに、桁上げおよびカスケード関数のための専用信号パスを含む。作成され得る典型的な論理関数は、カウンタ、アドレス符号器、または、小さな状態マシンを含む。
【0272】
Altera FLEX10Kのより詳細な説明は、Altera、1996DATA BOOK(1996年6月)に見出され得、本明細書中で参照として援用される。データブックは、また、支援プログラミングソフトウェアの詳細を含む。
【0273】
図8は、4×4FPGAアレイ、および、それらの相互接続の一実施形態を示す。Sエミュレータのこの実施形態は、FPGAチップに対してクロスバーまたは部分的クロスバー接続を用いていない。FPGAチップは、第1行にチップF11〜F14、第二行にチップF21〜F24、第三行にチップF31〜F34、および、第四行にチップF41〜F44を含む。一実施形態において、各FPGA(例えば、チップF23)は、SエミュレータシステムのFPGAI/Oコントローラへのインタフェースに対して以下のピンを有する。
【0274】
【表1】
【0275】
従って、一実施形態において、各EPGAチップは、Sエミュレータシステムとインタフェースするために41個のピンのみを用いる。これらのピンは、図22に関してさらに説明される。
【0276】
これらのFPGAチップは、非クロスバー相互接続または非部分的クロスバー相互接続を介して互いに相互接続される。チップF11とチップF14との間の相互接続602等のチップ間の各相互接続は、44個のピンまたは44本のワイヤラインを表す。他の実施形態において、各相互接続は、44個より多いピンを表す。さらに他の実施形態において、各部接続は、44個未満のピンを表す。
【0277】
各チップは、6つの相互接続を有する。例えば、チップF11は、相互接続600〜605を有する。また、チップF33は、相互接続606〜611を有する。これらの相互接続は、行に沿って水平に、そして、列に沿って垂直に走る。各相互接続は、行に沿った二つのチップ間の直接接続、または、列に沿った二つのチップ間の直接接続を提供する。従って、例えば、相互接続600はチップF11とチップF13とを直接接続する;相互接続601はチップF11とチップF12とを直接接続する;相互接続602はチップF11とチップF14とを直接接続する;相互接続603はチップF11とチップF31とを直接接続する;相互接続604はチップF11とチップF21とを直接接続する;相互接続605はチップF11とチップF41とを直接接続する。
【0278】
同様に、アレイのエッジに位置(例えば、F11)していないチップF33に関して、相互接続606はチップF33とチップF13とを直接接続する;相互接続607はチップF33とチップF23とを直接接続する;相互接続608はチップF33とチップF34とを直接接続する;相互接続609はチップF33とチップF43とを直接接続する;相互接続610はチップF33とチップF31とを直接接続する;相互接続611はチップF33とチップF32とを直接接続する。
【0279】
チップF11がチップF13から1ホップ内に位置しているので、相互接続600は、「1」と表示される。チップF11がチップF12から1ホップ内に位置しているので、相互接続601は、「1」として表示される。同様に、チップF11がチップF14から1ホップ内に位置しているので、相互接続602は、「1」として表示される。同様に、チップF33に関して、全ての相互接続は、「1」として表示される。
【0280】
この相互接続スキームによって、各チップは、2回以内の「ジャンプ」、または、相互接続でアレイにある任意の他のチップと通信することができる。従って、チップF11は、以下の二つの経路((1)相互接続600から相互接続606へ;または(2)相互接続603から相互接続610へ)のいずれかを通ってチップF33に接続される。つまり、この経路は、(1)最初は行に沿って、次に列に沿って、または、(2)最初は列に沿って、次に行に沿って、のいずれかであり得る。
【0281】
図8は、水平および垂直の相互接続で4×4のアレイに配置されたFPGAチップを示すが、ボード上の実際の物理的インプリメンテーションは、拡張ピギーバックボードを有する低および高バンクを通っている。このようにして、一実施形態において、チップF41〜F44、およびF21〜F24は、低バンクにある。チップF31〜F34およびF11〜F14は、高バンクにある。ピギーバックボードは、チップF11〜F14、および、F21〜F24を含む。従って、アレイを拡張するために、多くの(例えば、8個の)チップを含むピギーバックボードが、バンクに(つまり、現在チップF11〜F14を含む行の上に)加えられる。他の実施形態において、ピギーバックボードは、現在チップF41〜F44を含む行の下にアレイを拡張する。さらなる実施形態は、チップF14、F24、F34およびF44の右側へ拡張することを可能にする。さらに他の実施形態は、チップF11、F21、F31およびF41の左側へ拡張することを可能にする。
【0282】
図7は、「1」または「0」に置き換えて表示された場合の図8の4×4のFPGAアレイに対する連結マトリクスを示す。この連結マトリクスは、ハードウェアマッピング、配置、および、このSエミュレーションシステムに対するルーティングプロセスに用いられるコスト関数から生じる設置コストを生成するために用いられる。このコスト関数は、図6に関して上記で説明された。例として、チップF11は、チップF13から1ホップ内に位置し、従って、F11〜F13に関する連結マトリクスの入力は、「1」である。
【0283】
図21は、本発明の一実施形態に従う単一のFPGAチップに対する相互接続ピン−アウトを示す。ここで、各チップは、相互接続の六つのセットを有し、各セットは、特定の数のピンを含む。一実施形態において、各セットは44個のピンを有する。各FPGAチップの相互接続は、水平(東西)、および、垂直(南北)を向く。西向きの相互接続のセットは、W[43:0]として表示される。東向きの相互接続のセットは、E[43:0]として表示される。北向きの相互接続のセットは、N[43:0]として表示される。南向きの相互接続のセットは、S[43:0]として表示される。相互接続のこれらの完全なセットは、隣接するチップへの接続に関する。つまり、これらの相互接続は、任意のチップを越えて「ホップ」しない。例えば、図8において、チップF33は、N[43:0]に対する相互接続607、E[43:0]に対する相互接続608、S[43:0]に対する相互接続609、および、W[43:0]に対する相互接続611を有する。
【0284】
図21に戻ると、二つのさらなる相互接続のセットが残っている。相互接続の一つのセットは、垂直に走る隣接しない相互接続(YH[21:0]およびYH[43:22])に関する。相互接続の他のセットは、XH[21:0]およびXH[43:22]を水平に走る隣接しない相互接続に関する。各セット、YH[...]およびXH[...]は、二つに分けられ、一つのセットの各半分が22個のピンを含む。この配置によって、各チップを同様に製造することが可能である。従って、各チップは、上、下、左および右に位置する隣接しないチップへ1ホップで相互接続可能である。このFPGAチップは、また、全体的な信号、FPGAバス、および、JTAG信号に対するピン(単数または複数)を示す。
【0285】
次に、FPGA I/Oコントローラが説明される。このコントローラは、アイテム327として図10で最初に簡潔に導入された。FPGA I/Oコントローラは、データを管理し、PCIバスとFPGAアレイとの間のトラフィックを制御する。
【0286】
図22は、FPGAチップのバンクに沿った、FPGAチップPCIバスとFPGAアレイとの間のFPGAコントローラの一実施形態を示す。FPGA I/Oコントローラ700は、CTRL_FPGAユニット701、クロックバッファ702、PCIコントローラ703、EEPROM704、FPGAシリアル配置インタフェース705、境界スキャンテストインタフェース706、および、バッファ707を含む。回路を調節する当業者に公知の適切な電力/電圧が提供される。例示的な供給源は、電圧検出器/レギュレータに結合されたVCC、および、様々な環境状態で電圧を実質的に維持するセンス増幅器を含む。各FPGAチップへのVCCは、薄膜ヒューズをそれらの間で素早く動かして供給される。VCC−HIは、全てのFPGA チップへのCONFIG#に、および、LOCAL_BUS708へのLINTI#に提供される。
【0287】
CTRL_FPGAユニット701は、様々な制御、試験を扱い、かつ、様々なユニットおよびバス間の実質的なデータを読み出す/書き込むFPGA I/Oコントローラ700に対する一次コントローラである。CTRL_FPGAユニット701は、FPGAチップの低バンクおよび高バンクに結合される。FPGAチップF41〜F44およびF21〜F24(すなわち、低バンク)は、低FPGAバス718に結合される。これらのFPGAチップF11〜F14、F21〜F24、F31〜F34およびF41〜F44は、参照番号を保ったまま、図8のFPGAチップに一致する。
【0288】
これらのFPGAチップF11〜F14、F21〜F24、F31〜F34およびF41〜F44、および、低バンクバス718および高バンクバス719の間に、適切なローディングをするための厚いフィルムチップレジスタがある。低バンクバス718に結合されたレジスタ713のグループは、例えば、レジスタ716および717を含む。高バンクバス719に結合されたレジスタ712のグループは、例えば、レジスタ714および715を含む。
【0289】
拡張が所望ならば、FPGAチップは、F11およびF12のFPGAチップの右方向にある低バンクバス718および高バンクバス719にさらにインストールされ得る。一実施形態において、ピギーバックボード720と共通点があるピギーバックボードを介して拡張される。従って、FPGAチップのこれらのバンクが、最初に8つのFPGAチップF41〜F44、およびF31〜F34のみを有する場合、ピギーバックボード720を追加することによってさらに拡張が可能になる。ピギーバックボード720は、低バンクにおいてFPGAチップF24〜F21を含み、高バンクにおいてFPGAチップF14〜F11を含む。ピギーバックボード720はまた、追加の低バンクバスおよび高バンクバス、ならびに、厚膜チップレジスタを含む。
【0290】
PCIコントローラ703は、FPGA I/Oコントローラ700と32ビットPCIバス709との間の一次ンタフェースである。PCIバスが64ビットおよび/または66MHzに拡張される場合、本発明の意図および範囲から逸脱することなく、このシステムにおいて適切な調整がなされ得る。これらの調整は、以下に記載される。このシステムにおいて使用され得るPCIコントローラ703の一実施形態は、PLX技術のPCI9080または9060である。PCI9080は、適切なローカルバスインタフェース、制御レジスタ、FIFO、およびPCIへのPCIインタフェースを有する。データブックPLX技術、PCI9080データシート(ver.0.93、1997年2月28日)が、本明細書中に参考として援用される。
【0291】
PCIコントローラ703は、LOCAL_BUS708を介して、CTRL_FPGAユニット701とPCIバス709との間にデータを通す。LOCAL_BUSは、制御信号のための制御バス部分、アドレス信号のためのアドレスバス部分、およびデータ信号を制御のためのデータバス部分を含む。PCIバスが64ビットに拡張される場合、LOCAL_BUS708のデータバス部分もまた、64ビットに拡張され得る。PCIコントローラ703は、EEPROM704に接続される。EEPROM704は、PCIコントローラ703の構成データを含む。例示のEEPROM704は、国産の半導体の93CS46である。
【0292】
PCIバス709は、33MHzのクロック信号をFPGA I/Oコントローラ700に供給する。クロック信号は、同期化の目的のため、および低タイミングスキューのためにワイヤ線710を介してクロックバッファ702に提供される。このクロックバッファ702の出力は、ワイヤ線711を介して全てのFPGAチップに供給され、かつ、ワイヤ線721を介してCTRL_FPGAユニット701に供給された33MHzのグローバルクロック(GL_CLK)信号である。PCIバスが66MHzに拡張される場合、クロックバッファはまた、システムに66MHzを供給する。
【0293】
FPGAシリアル構成インタフェース705は、FPGAチップF11〜F14、F21〜F24、F31〜F34、およびF41〜F44を構成するために構成データを提供する。Alteraデータブック(Altera、1996データブック(1996年6月))は、構成デバイスおよびプロセッサの詳細な情報を提供する。FPGAシリアル構成インタフェース705はまた、LOCAL_BUS708およびパラレルポート721に結合される。さらに、FPGAシリアル構成インタフェース705は、CONF_INTFワイヤ線723を介して、CTRL_FPGAユニット701およびFPGAチップF11〜F14、F21〜F24、F31〜F34、およびF41〜F44に結合される。
【0294】
境界スキャンテストインタフェース706は、ある特有のテストコマンドセットのJTAG装置を提供して、プロセッサの論理ユニットまたはシステムの論理ユニットおよびソフトウェアによる回路部を外部からチェックする。このインタフェース706は、IEEE Std.1149.1−1990規格に準拠する。Alteraデータブック(Altera、1996データブック(1996年6月)およびアプリケーションノート39(AlteraデバイスにおけるJTAG境界スキャンテスト)を参照して、それらは共に、さらなる情報のために本明細書中参考として援用される。境界スキャンテストインタフェース706は、さらに、LOCAL_BUS708およびパラレルポート722に結合される。さらに、境界スキャンテストインタフェース706は、BST_INTFワイヤ線724を介してCTRL_FPGAユニット701およびFPGAチップF11〜F14、F21〜F24、F31〜F34、およびF41〜F44に接続される。
【0295】
CTRL_FPGAユニット701は、バッファ707、低バンク32ビットFD[31:0]のF_BUS725および高バンク32ビットFD[63:32]のF_BUS726と共に、低バンク32ビットバス718を介して、FPGAチップの低(チップF41〜F44およびF21〜F24)バンク、および高バンク32ビットバス719を介して、FPGAチップの高(チップF31〜F34およびF11〜F14)バンクに/からデータをそれぞれ通す。
【0296】
一実施形態では、低バンクバス718および高バンクバス719におけるPCIバス709の処理能力を重複させる。PCIバス709は、33MHzにおいて32ビット幅である。従って、処理能力は、132MBX(=33MHz*4バイト)である。低バンクバス718は、PCIバス周波数の半分(33/2MHz=16.5MHz)である32ビットである。高バンクバス719はまた、PCIバス周波数の半分(33/2=16.5MHz)である32ビット幅である。64ビットの低バンクバスおよび高バンクバスの処理能力はまた、132MBX(=16.5MHz*8バイト)である。従って、低バンクバスおよび高バンクバスの性能は、PCIバスの性能を追跡する。言い換えると、性能制限は、低バンクバスおよび高バンクバスではなく、PCIバス状態にある。
【0297】
本発明の一実施形態によるアドレスポインタは、さらに各ソフトウェア/ハードウェア境界アドレススペースの各FPGAチップにおいて実施される。これらのアドレスポインタは、多重化されたクロスチップアドレスポインタチェーンを通して、いくつかのFPGAチップにわたってつながれる。図9、11、12、14、および15に関する上述のアドレスポインタの考察を参照すること。所与のアドレススペースに関連したアドレスポインタのチェーンおよびいくつかのチップにわたってワード選択信号を移動するために、チェーンアウト(chain−out)ワイヤ線が提供される必要がある。これらのチェーンアウトワイヤ線は、チップ間の矢印として示される。低バンクに対する1つのこのようなチェーンアウトワイヤ線は、チップF23とF22との間のワイヤ線730である。高バンクに対する別のこのようなチェーンアウトワイヤ線は、チップF31とF32との間のワイヤ線731である。低バンクチップF21の端部におけるチェーンアウトワイヤ線732は、LAST_SHIFT_LとしてCTRL_FPGAユニット701に結合される。高バンクチップF11の端部におけるチェーンアウトワイヤ線733は、LAST_SHIFT_HとしてCTRL_FPGAユニット701に結合される。これらの信号LAST_SHIFT_LおよびLAST_SHIFT_Hは、ワード選択信号がFPGAチップを介して伝達されるように、それらの各バンクのためのワード選択信号である。これらの信号LAST_SHIFT_LおよびLAST_SHIFT_Hのどちらかが、CTRL_FPGAユニット701に対して論理「1」を表すと、これは、ワード選択信号がチップのそれぞれのバンクの端部に伝わることを示す。
【0298】
CTRL_FPGAユニット701は、ワイヤ線734の書き込み信号(F_WR)、ワイヤ線735の読み出し信号(F_RD)、ワイヤ線736のDATA_XSFR信号、ワイヤ線737のEVAL信号、およびワイヤ線738のSPACE[2:0]信号をFPGAチップに、およびFPGAチップから提供する。CTRL_FPGAユニット701は、ワイヤ線739のEVAL_REQ#信号を受け取る。書き込み信号(F_WR)、読み出し信号(F_RD)、DATA_XSFR信号、およびSPACE[2:0]信号は、FPGAチップにおけるアドレスポインタと共に機能する。書き込み信号(F_WR)、読み出し信号(F_RD)、およびSPACE[2:0]信号を用いて、SPACEインデックス(SPACE[2:0])によって決定されるように、選択されたアドレススペースと関連するアドレスポインタのMOVE信号を生成する。DATA_XSFR信号を用いて、アドレスポインタを初期化して、逐語的データ転送プロセスを始める。
【0299】
EVAL_REQ#信号を用いて、いくつかのFPGAチップがこの信号をアサートする場合、再び全ての点で評価サイクルを始める。例えば、データを評価するために、データは、PCIバスを介してホストプロセッサの計算ステーションのメインメモリからFPGAに転送されるか、または書き込まれる。転送が終了すると、評価サイクルは、アドレスポインタの初期化およびソフトウェアクロックの動作を含み始めて、評価プロセスを容易にする。しかし、様々な理由のために、特定のFPGAチップは、再び全ての点でデータを評価する必要があり得る。このFPGAチップは、EVAL_REQ#信号をアサートし、CNTF_FPGAチップ701は、再び全ての点で評価サイクルを始める。
【0300】
図23は、図22のCTRL_FPGAユニット701およびバッファ707のより詳細な図を示す。図22に示されるCTRL_FPGAユニット701に関する同様の入力/出力信号およびそれらに対応する参照符号はまた、図23において保持され、使用される。しかし、図22に示されないさらなる信号およびワイヤ/バスライン(例えば、SEM_FPGA出力イネーブル1016、ローカル割り込み出力(Local INTO)708a、ローカル読み出し/書き込み制御信号708b、ローカルアドレスバス708c、ローカル割り込み入力(Local INTI#)708d、およびローカルデータバス708e)が、新しい参照符号と共に記載される。
【0301】
CTRL_FPGAユニット701は、転送完了チェッキング論理(XSFR_DONE Logic)1000、評価制御論理(EVAL Logic)1001、DMA記述子ブロック1002、制御レジスタ1003、評価タイマー論理(EVAL timer)1004、アドレス復号器1005、書き込みフラグシーケンサ論理1006、FPGAチップ読み出し/書き込み制御論理(SEM_FPGA R/W Logic)1007、デマルチプレクサおよびラッチ(DEMUX logic)1008、および図22のバッファ707に対応するラッチ1009〜1012を含む。ワイヤ/バス721によるグローバルクロック信号(CTRL_FPGA_CLK)は、CTRL_FPGAユニット701における全ての論理素子/ブロックに提供される。
【0302】
転送完了チェッキング論理(XSFR_DONE)1000は、LAST_SHIFT_H733、LAST_SHIFT_L732、およびローカルINTO708aを受け取る。XSFR_DONE論理1000は、ワイヤ/バス1013によりEVAL論理1001に転送完了信号(XSFR_DONE)を出力する。LAST_SHIFT_H733およびLAST_SHIFT_L732の受信に基づいて、XSFR_DONE論理1000は、データ転送完了のチェックをして、所望ならば、評価サイクルが始まり得る。
【0303】
EVAL論理1001は、ワイヤ/バス1013の転送完了信号(XSFR_DONE)に加えて、ワイヤ/バス739のEVAL_REQ#信号およびワイヤ/バス1015のWR_XSFR/RD_XSFR信号を受け取る。EVAL論理1001は、2つの出力信号(ワイヤ/バス1014のStart EVALおよびワイヤ/バス736のDATA_XSFR)を生成する。EVAL論理は、FPGAバスとPCIバスとの間のデータ転送がアドレスポインタを初期化し始めるときを示す。それは、データ転送が完了するときXSFR_DONE信号を受け取る。WR_XSFR/RD_XSFR信号は、転送が読み出しか、または書き込みかどうかを示す。一旦、I/Oサイクルが完了すると(または、I/Oサイクルの開始以前)、EVAL論理は、開始EVAL信号tのEVALタイマーとともに評価サイクルを開始し得る。EVALタイマーは、評価サイクルの継続時間に影響して、ソフトウェアクロック機構が完全に動作することを保証する。これは、全てのレジスタおよび組み合わせの構成要素にデータ伝達を安定化する必要がある間は、評価サイクルをアクティブに維持することによってなされる。
【0304】
DMA記述子ブロック1002は、ワイヤ/バス1019のローカルバスアドレス、アドレス復号器1005からのワイヤ/バス1012の書き込みイネーブル信号、およびローカルデータバス708eを介してワイヤ/バス1029のローカルバスデータを受け取る。出力は、ワイヤ/バス1045のDEMUX論理1008に対するワイヤ/バス1046のDMA記述子出力である。DMA記述子ブロック1002は、PCIアドレス、ローカルアドレス、転送カウント、転送方向、および次の記述子ブロックのアドレスを含むホストメモリの情報に対応する記述子ブロック情報を含む。ホストはまた、PCIコントローラの記述子ポインタレジスタにおける一次の記述子ブロックのアドレスを設定する。制御ビットをセットすることによって、転送が開始され得る。PCIは、第1の記述子ブロックをロードし、データ転送を開始する。PCIコントローラは、記述子ブロックをロードし続けて、PCIコントローラがチェーンビットの端部を検出するときまで、転送データは、次の記述子ポインタレジスタにおいて設定される。
【0305】
アドレス復号器1005は、バス708bのローカルR/W制御信号を受け取って送信し、バス708cのローカルアドレス信号を受け取って送信する。アドレス復号器1005は、DMA記述子1002へのワイヤ/バス1020による書き込みイネーブル信号、制御レジスタ1003へのワイヤ/バス1021による書き込みイネーブル信号、ワイヤ/バス738によるFPGAアドレスSPACEインデックス、ワイヤ/バス1027による制御信号、およびDEMUX論理1008によるワイヤ/バス1024による別の制御信号を生成する。
【0306】
制御レジスタ1003は、アドレス復号器1005からのワイヤ/バス1021の書き込みイネーブル信号、およびローカルデータ信号708eを介してワイヤ/バス1030からのデータを受け取る。制御レジスタ1003は、EVAL論理1001へのワイヤ/バス1015のWR_XSFR/RD_XSFR信号、EVALタイマー1004へのワイヤ/バス1041のセットEVALタイム信号、およびFPGAチップへのワイヤ/バス1016のSEM_FPGA出力イネーブル信号を生成する。システムは、各FPGAチップを選択的にオンにする、またはイネーブルするためにSEM_FPGA出力イネーブル信号を用いる。典型的に、システムは、同時に各FPGAチップをイネーブルする。
【0307】
EVALタイマー1004は、ワイヤ/バス1014のスタートEVAL信号、およびワイヤ/バス1041のセットEVALタイムを受け取る。EVALタイマー1004は、ワイヤ/バス737のEVAL信号、ワイヤ/バス1017の評価完了(EVAL_DONE)信号、および書き込みフラグシーケンサ論理1006へのワイヤ/バス1018のスタート書き込みフラグ信号を生成する。一実施形態において、EVALタイマーは6ビット長である。
【0308】
書き込みフラグシーケンサ論理1006は、EVALタイマー1004からワイヤ/バス1018のスタート書き込みフラグ信号を受け取る。書き込みフラグシーケンサ論理1006は、ローカルR/Wのワイヤ/バス708bへのワイヤ/バス1022のローカルR/W制御信号、ローカルアドレスバス708cへのワイヤ/バス1023のローカルアドレス信号、ローカルデータバス708eへのワイヤ/バス1028のローカルデータ信号、およびワイヤ/バス708dのローカルINTI#を生成する。スタート書き込みフラグ信号を受け取ると、書き込みフラグシーケンサ論理は、制御信号のシーケンスを始めて、PCIバスへのメモリ書き込みサイクルを始める。
【0309】
SEM_FPGA R/W制御論理1007は、アドレス復号器1005からワイヤ/バス1027の制御信号、ローカルR/W制御バス708bを介してワイヤ/バス1047のローカルR/W制御信号を受け取る。SEM_FPGA R/W制御論理1007は、ラッチ1009へのワイヤ/バス1035のイネーブル信号、DEMUX論理1008へのワイヤ/バス1025の制御信号、ラッチ1011へのワイヤ/バス1037のイネーブル信号、ラッチ1012へのワイヤ/バス1042のイネーブル信号、ワイヤ/バス734のF_WR信号、およびワイヤ/バス735のF−RD信号を生成する。SEM_FPGA R/W制御論理1007は、FPGAの低バンクバスおよび高バンクバスへ/からの多様な書き込みおよび読み出しデータ転送を制御する。
【0310】
DEMUX論理1008は、マルチプレクサおよびラッチである。マルチプレクサおよびラッチは、入力信号の4つのセット受け取り、ローカルデータバス708eに対してワイヤ/バス1026の1つのセットの信号を出力する。セレクタ信号は、SEM_FPGA R/W制御論理1007からのワイヤ/バス1025の制御信号およびアドレス復号器1005からワイヤ/バス1024の制御信号である。DEMUX論理1008は、ワイヤ/バス1042のEVAL_DONE信号からの信号、ワイヤ/バス1043のXSFR_DONE信号、およびワイヤ/バス1044のEVAL信号の1つのセットを受け取る。この1つのセットの信号を参照符号1048として呼ぶ。任意のある周期において、これら3つの信号、EVAL_DONE、XSFR_DONE、およびEVALのうち1つのみが選択を可能にするためにDEMUX論理1008に提供される。DEMUX論理1008はまた、入力信号の他の3つのセットとして、DMA記述子ブロック1002からのワイヤ/バス1045のDMA記述子出力信号、ラッチ1012からのワイヤ/バス1039のデータ出力、およびラッチ1010からのワイヤ/バス1034の別のデータ出力を受け取る。
【0311】
CTRL_FPGAユニット701と低およびおよび高FPGAバンクバスとの間のデータバッファは、ラッチ1009〜1012を含む。ラッチ1009は、ワイヤ/バス1031およびローカルデータバス708eを介するワイヤ/バス1032のローカルデータバス、SEM_FPGA R/W制御論理1007からのワイヤ/バス1035のイネーブル信号を受け取る。ラッチ1009は、ラッチ1010に対してワイヤ/バス1033によってデータを出力する。
【0312】
ラッチ1010は、ラッチ1009からのワイヤ/バス1033のデータ、SEM_FPGA R/W制御論理1007からのワイヤ/バス1037を介するワイヤ/バス1036のイネーブル信号を受け取る。ラッチ1010は、FPGAの低バンクバスに対してワイヤ/バス725のデータ、およびワイヤ/バス1034を介してDEMUX論理1008を出力する。
【0313】
ラッチ1011は、ローカルデータバス708eからのワイヤ/バス1031のデータ、およびSEM_FPGA R/W制御論理1007からのワイヤ/バス1037のイネーブル信号を受け取る。ラッチ1011は、FPGAの高バンクバスに対してワイヤ/バス726のデータ、およびラッチ1012に対してワイヤ/バス1038のデータを出力する。
【0314】
ラッチ1012は、ラッチ1011からワイヤ/バス1038のデータ、SEM_FPGA R/W制御論理1007からワイヤ/バス1040のイネーブル信号を受け取る。ラッチ1012は、DEMUX1008に対してワイヤ/バス1039により出力する。
【0315】
図24は、4×4FPGAアレイ、FPGAバンクに対するその関係、および拡張性能を示す。図8のように、図24は、同様の4×4アレイを示す。CTRL_FPGAユニット740がさらに示される。低バンクチップ(チップF41〜F44およびF21〜F24)および高バンクチップ(チップF31〜F34およびF11〜F14)は、代替の様態で構成される。従って、下の列から上の列にFPGAチップの列を特徴付ける(低バンク−高バンク−低バンク−高バンク)。データ転送チェーンは、所定の順番に従う。低バンクのデータ転送チェーンは、矢印741によって示される。高バンクのデータ転送チェーンは、矢印742によって示される。JTAG構成チェーンは、矢印743によって示される。矢印743は、F41からF44へ、F34からF31へ、F21からF24へ、およびF14からF11へ16チップの全体のアレイを介して通り、CTRL_FPGAユニット740に戻る。
【0316】
拡張は、ピギーバックボードに達成され得る。FPGAチップのオリジナルアレイが、F41〜F44およびF31〜F34を含むことを図24において想定すると、チップF21〜F24およびF11〜F14の2つのさらなる列の追加がピギーバックボード745に達成され得る。ピギーバックボード745はまた、適したバスを含み、バンクを拡張する。アレイにおいて他の頂上に置かれたさらなるピギーバックボードと共にさらなる拡張が達成され得る。
【0317】
図25は、ハードウェアの起動方法の一実施形態を示す。工程800は、パワーオンまたはウォームブートシーケンスを開始する。工程801において、PCIコントローラは、初期化するためにEEPROMを読み出す。工程802は、初期化シーケンスを考慮してPCIコントローラレジスタを読み出し、PCIコントローラレジスタに書き込む。工程803の境界スキャンは、アレイにおいて全てのFPGAチップをテストする。工程804は、FPGA I/OコントローラのCTRL_FPGAユニットを構成する。工程805は、レジスタを読み出して、CTRL_FPGAユニットにおけるレジスタに書き込む。工程806は、DMAマスター読み出し/書き込みモードのためのPCIコントローラを設定する。その後、データは、転送されて確認される。工程807は、テスト設計と共に全てのFPGAチップを構成し、それの正確さを確認する。工程808において、ハードウェアは、使用するための準備が整っている。この段階では、システムは、全ての工程がハードウェアの動作性を積極的に確認することを想定しており、そうでなければ、システムは、工程808に到達しないことになる。
【0318】
(E.より高密度のFPGAチップを用いる代替の実施形態)
本発明の一実施形態において、FPGA論理デバイスは、個々のボードで提供される。個々のボードで提供されるというよりも、多くのFPGA論理デバイスが、ユーザの回路設計をかたどる必要がある場合、より多くのFPGAと共に複数のボードが提供され得る。シミュレーションシステム中にさらなるボードを追加する能力が、本発明の所望の特徴である。本実施形態において、より高密度のFPGAチップ(例えば、Altera 10K130Vおよび10K250V)が使用される。これらのチップの使用は、8つのより低密度のFPGAチップ(例えば、Altera 10K100)の代わりに、1枚のボードにつき4つのFPGAチップのみが使用されるように、ボードの設計を変更する。
【0319】
シミュレーションシステムのマザーボードに、これらのボードを結合するためには課題がある。相互接続および接続のスキームは、バックプレーン不足のための補正を行う必要がある。シミュレーションシステムにおけるFPGAアレイは、特定の相互接続構成を介してマザーボード上に提供される。相互接続が隣り合う直接隣接した相互接続(すなわち、N[73:0]、S[73:0]、W[73:0]、E[73:0])、および1つ置きに隣接した相互接続(すなわち、NH[27:0]、SH[27:0]、XH[36:0]、XH[72:37])によって配置され、単一のボード内に、および異なるボードにわたってローカルバス接続を除外する場合には、各チップは、8セット以下の相互接続を有し得る。各チップは、隣接した隣り合うチップに直接、または隣接しない上、下、左、および右に位置されたチップに1つ置きで相互接続されることが可能である。X方向(東−西)において、アレイは環状(torus)になる。Y方向(北−南)において、アレイはメッシュ状になる。
【0320】
相互接続は、単一のボード内に論理デバイスおよび他の構成要素を連結し得る。しかし、相互ボードコネクタを提供して、異なるボードにわたってこれらのボードと相互接続とを共に連結して、(1)マザーボードおよびアレイボードを介するPCIバス、ならびに(2)任意の2つのアレイボード間に信号を伝える。各ボードは、それ自体FPGAバスFD[63:0]を含む。FPGAバスFD[63:0]により、FPGA論理デバイスは、SRAMメモリデバイスおよびCTRL_FPGAユニット(FPGA I/Oコントローラ)と互いに通信可能である。FPGAバスFD[63:0]は、複数のボードにわたって提供されない。しかし、FPGA相互接続は、複数のボードにわたってFPGA論理デバイス間に接続性を提供する。しかし、これらの相互接続はFPGAバスに関係しない。一方、ローカルバスは、全てのボードにわたって提供される。
【0321】
マザーボードコネクタは、ボードをマザーボードに、かつ、従って、PCIバス、電源、およびグラウンドに接続する。数個のボードに関して、マザーボードコネクタを、マザーボードに直接接続するためには使用しない。6つのボード構成において、ボード1、3、および5だけが、マザーボードに直接接続され、残りのボード2、4、および6は、マザーボードの接続性のためにそれらの隣接するボードに依存する。従って、全ての他のボードは、マザーボードに直接接続される。これらボードの相互接続およびローカルバスは、はんだ面から部品面に配置された内部ボードコネクタを介して共に結合される。PCI信号は、ボード(典型的に第1のボード)のうちの1つを介してのみルーティングされる。電力およびグランドは、これらのボード用の他のマザーボードに使用される。多様な内部ボードコネクタは、はんだ面から部品面に設置されると、PCIバス構成要素、FPGA論理デバイス、メモリデバイス、および多様なシミュレーションシステム制御回路間を通信可能にする。
【0322】
図56は、本発明の一実施形態によるFPGAチップ構成のアレイの高レベルブロック図を示す。CTRL_FPGAユニット1200は、上述のように、ライン1209を介してバス1210に結合される。一実施形態において、CTRL_FPGAユニット1200は、例えば、Altera10K50チップといった、FPGAチップ形式のプログラム可能な論理デバイス(PLD)である。バス1210により、CTRL_FPGAユニット1200は、(もしあれば)他のシミュレーションアレイボード、および他のチップ(例えば、PCIコントローラ、EEPROM、クロックバッファ)に結合されることが可能になる。図56は、論理デバイスおよびメモリデバイス形式において他の主要な機能性ブロックを示す。一実施形態において、論理デバイスは、例えば、Altera 10K130Vまたは10K250VチップといったFPGAチップ形式のプログラム可能論理デバイス(PLD)である。10K130Vまたは10K250Vはピン互換性を持ち、両方とも599ピンPGAパッケージである。従って、アレイの8つのAltera FLEX 10K100チップで上述された実施形態の代わりに、本実施形態は、AlteraのFLEX 10K130の4つのチップのみを使用する。本発明の一実施形態は、これら4つの論理デバイスおよびこれらの相互接続を含むボードを記載する。
【0323】
ユーザの設計が、アレイにおけるこれらの任意の数の論理デバイスでかたどられ、構成されるので、内部FPGA論理デバイス通信は、ユーザの回路設計の一部を別の部分に接続するために必要である。さらに、内部構成情報および境界はまた、内部FPGA相互接続によってサポートされる。最終的に、必要なシミュレーションシステム制御信号は、シミュレーションシステムとFPGA論理デバイスとの間をアクセス可能になる必要がある。
【0324】
図36は、本発明で使用されるFPGA論理デバイスのハードウェアアーキテクチャを示す。FPGA論理デバイス1500は、102上部I/Oピン、102下部I/Oピン、111左部I/Oピン、および102右部I/Oピンを含む。従って、相互接続の総数は425である。さらに、さらなる45I/OピンはGCLK,FPGAバスFD[31:0](FD[63:32]が高バンク専用になる)、F_RD,F_WD、DATAXSFR、SHIFTIN、SHIFTOUT、SPACE[2:0]、EVAL、EVAL_REQ_N、DEVICE_OE(FPGA論理デバイスの出力ピンをオンにするためのCTRL_FPGAユニットからの信号)、およびDEV_CLRN(シミュレーションを始める前に全ての内部フリップフロップをクリアするためのCTRL_FPGAユニットからの信号)専用になる。従って、任意の2つのFPGA論理デバイス間を渡る任意のデータ信号および制御信号は、これらの相互接続によって伝達される。残りのピンは、電力およびグランド専用になる。
【0325】
図37は、本発明の一実施形態による単一のFPGAチップのFPGA相互接続ピンアウトを示す。各セットが特定の数のピンを含む場合、各チップ1510は、8つ以下のセットの相互接続を有し得る。ボード上のチップのそれぞれの位置に依存する相互接続のセットは、8つよりも少ないチップを有し得る。好適な実施形態において、チップは、全部で7セットの相互接続を有し得るが、使用される相互接続の特定のセットは、チップがボード上のそれぞれの位置に依存して変化し得る。各FPGAチップの相互接続は、水平方向(東−西)および垂直方向(北−南)に向けられる。西方向の相互接続のセットは、W[73:0]として符号が付けられる。東方向の相互接続のセットは、E[73:0]として符号が付けられる。北方向の相互接続のセットは、N[73:0]として符号が付けられる。南方向の相互接続のセットは、S[73:0]として符号が付けられる。相互接続のこれら完全なセットは、隣接したチップに接続するためのものである。すなわち、これら相互接続は、任意のチップを越えて「ホップ」しない。例えば、図39において、チップ1570は、N[73:0]の相互接続1540、W[73:0]の相互接続1542、E[73:0]の相互接続1543、およびS[73:0]の相互接続1545を有する。FPGA2チップでもあるこのFPGAチップ1570が全部で4セットの隣接した相互接続(N[73:0]、S[73:0]、W[73:0]、およびE[73:0])を有する。FPGA0の西方向の相互接続は、環状相互接続を介してワイヤ1539を通ってFPGA3の東方向の相互接続に接続する。従って、ワイヤ1539により、チップ1569(FPGA0)および1572(FPGA3)は、互いに接触されるように包み込まれるために、ボードの西−東端を含むような様態で互いに直接結合されることが可能になる。
【0326】
図37に戻ると、4セットの「ホッピング(hopping)」相互接続が提供される。垂直方向(NH[27:0]およびSH[27:0])に走る2セットの相互接続は、隣接しない相互接続である。例えば、図39のFPGA2チップ1570は、NH相互接続1541およびSH相互接続1546を示す。図37に戻ると、水平方向(XH[36:0]およびXH[72:37])に走る他の2つのセットの相互接続は、隣接しない相互接続である。例えば、図39のFPGA2チップ1570は、XH相互接続1544を示す。
【0327】
図37に戻ると、垂直方向のホッピング相互接続NH[27:0]およびSH[27:0]はそれぞれ28ピンを有する。水平方向の相互接続は、73ピン、XH[36:0]およびXH[72:37]を有する。水平方向の相互接続ピン、XH[36:0]およびXH[72:37]は、西側(例えば、図39におけるFPGA3チップ1576の相互接続1605)および/または東側(例えば、図39におけるFPGA0チップ1573の相互接続1602)で使用され得る。この構成により、各チップは、同様に製造されることが可能になる。従って、各チップは、上部、下部、左部および右部に設置される隣接しないチップに対して1つ置きに相互接続されることが可能である。
【0328】
図39は、本発明の一実施形態による単一のマザーボード上の6つのボードの直接隣接するFPGAアレイ、および1つ置きに隣接したFPGAアレイのレイアウトを示す。この図を用いて、2つの可能な構成(6ボードシステムおよび2ボードシステム)を示す。位置表示1550は、「Y」方向が南北の方向であり、「X」方向が東西の方向であることを示す。X方向では、アレイは環状である。Y方向では、アレイはメッシュ状である。図39において、高レベルにおける、ボード、FPGA論理デバイス、相互接続、およびコネクタのみが示される。マザーボードおよび他のサポートする構成要素(例えば、SRAMメモリデバイス)およびワイヤ線(例えば、FPGAバス)が示されない。
【0329】
図39がボードおよび他の構成要素、相互接続、およびコネクタのアレイ図を提供することに留意されたい。実際の物理的な構成および設定は、これらそれぞれの端部の部品面上のこれらのボードをはんだ面に置くことを含む。ボードの約半分が、マザーボードに直接接続され、残りの半分は、それらのそれぞれ隣接するボードに接続される。
【0330】
本発明の6つのボードの実施形態において、6つのボード1551(ボード1)、1552(ボード2)、1553(ボード3)、1554(ボード4)、1555(ボード5)、および1556(ボード6)が図1の再構成可能なハードウェアユニット20の一部としてマザーボード(図示せず)上に提供される。各ボードは、構成要素およびコネクタのほとんど同等のセットを含む。従って、図示の目的のため、6つ目のボード1556は、FPGA論理デバイス1565〜1568、コネクタ1557〜1560および1581を含む。5つ目のボード1555は、FPGA論理デバイス1569〜1572およびコネクタ1582および1583を含み、4つ目のボード1554は、FPGA論理デバイス1573〜1576およびコネクタ1584および1585を含む。
【0331】
この6つのボード構成において、ボード1 1551およびボード6 1556は、「ブックエンド」ボードとして提供される。「ブックエンド」ボードは、例えば、ボード6 1556上のR−パック端子1557〜1560およびボード1 1551上のR−パック端子1591〜1594といったY−メッシュ端子を含む。中間に配置されたボード(すなわち、ボード1552(ボード2)、1553(ボード3)、1554(ボード4)、および1555(ボード5))もまたアレイを完成するために提供される。
【0332】
上述されるように、相互接続は、直接隣接した相互接続(すなわち、N[73:0]、S[73:0]、W[73:0]、E[73:0])、および1つ置きに隣接した相互接続(すなわち、NH[27:0]、SH[27:0]、XH[36:0]、XH[72:37])によって構成され、単一のボード内に、および異なるボードにわたってローカルバス接続を除外する。相互接続は、単独で、単一のボード内で論理デバイスおよび他の構成要素を結合し得る。しかし、内部ボードコネクタ1581〜1590は、異なるボード(すなわち、ボード1〜ボード6)にわたってFPGA論理デバイス間を通信することを可能にする。FPGAバスは、内部ボードコネクタ1581〜1590の一部である。これらのコネクタ1581〜1590は、520の信号および80の電力/グランド接続を、2つの隣接したアレイボード間に伝達する600ピンコネクタである。
【0333】
図39において、多様なボードは、内部ボードのコネクタ1581〜1590に関して非対称な様態で配置される。例えば、ボード1551と1552との間には、内部ボードコネクタ1589および1590が提供される。相互接続1515は、FPGA論理デバイス1511および1577を共に、およびコネクタ1589および1590に従って接続する。この接続は対称になる。しかし、相互接続1603は、対称にならない。それは、第3のボード1553のFPGA論理デバイス1553をボード1551のFPGA論理デバイス1577に接続する。コネクタ1589および1590によると、このような相互接続は対称にならない。同様に、相互接続1600は、コネクタ1589および1590に対して対称にならない。なぜなら、相互接続1600は、FPGA論理デバイス1577を端子1591に接続するからである。端子1591は、相互接続1601を介してFPGA論理デバイス1577に接続する。他の類似の相互接続は、非対称をさらに示すように存在する。
【0334】
この非対称の結果として、相互接続は、2つの異なる方法(1つは相互接続1515のような対称相互接続、および別の方法は相互接続1603および1600のような非対称相互接続)で内部ボードコネクタを介してルーティングされる。相互接続ルーティングはスキーム、図40Aおよび40Bに示される。
【0335】
図39において、単一のボード内の直接隣接した接続の例は、ボード1555の東−西方向に沿って、論理デバイス1570を論理デバイス1571に結合する相互接続1543である。単一のボード内の直接隣接した別の接続の例は、論理デバイス1573をボード1554の論理デバイス1573に結合する相互接続1607である。2つの異なるボード間の直接隣接した接続の例は、北−南方向に沿って、コネクタ1583および1584を介して、ボード1555の論理デバイス1570をボード1554の論理デバイス1574に結合する相互接続1545である。ここで、2つの内部ボードコネクタ1583および1584を用いて、信号を向こう側へに転送する。
【0336】
例示の単一のボード内の1つ置きの相互接続は、東−西方向に沿って、論理デバイス1570をボード1555の論理デバイス1572に結合する相互接続1544である。例示の2つの異なるボード間の1つ置きの相互接続は、コネクタ1581〜1584を介して、ボード1556の論理デバイス1565をボード1554の論理デバイス1573に結合する。ここで、4つの内部ボードのコネクタ1581〜1584を用いて、信号を向こう側へ転送する。
【0337】
いくつかのボード、特にマザーボード上の北−南端に置かれたボードはまた、10ΩR−パックを備えていくつかの接続を終端させる。従って、6つ目のボード1556は、10ΩR−パックコネクタ1557〜1560を備えて、1つ目のボード1551は、10ΩR−パックコネクタ1591〜1594を備える。6つ目のボード1556は、相互接続1970〜1971のためにR−パックコネクタ1557、相互接続1972および1541のためにR−パックコネクタ1558、相互接続1973および1974のためにR−パックコネクタ1559、ならびに相互接続1975および1976のためにR−パックコネクタ1560を備える。さらに、相互接続1561〜1564は、いずれにも接続されない。これらの北−南相互接続は、東−西環状タイプの相互接続とは違って、メッシュ状タイプの様態で配置される。
【0338】
これらメッシュ状端末は、北−南直接相互接続の数を増やす。さもなければ、FPGAメッシュ状の北および北方向の端部および南方向の端部における相互接続は、全て無駄になる。例えば、FPGA論理デバイス1511および1577は、既に直接相互接続1515の1つのセットを有する。さらなる相互接続はまた、R−パック1591ならびに相互接続1600および1601を介するこれら2つのFPGA論理デバイスが提供される。つまり、R−パックは、相互接続1600および1601を共に接続する。これは、FPGA論理デバイス1511と1577との間の直接接続の数を増やす。
【0339】
内部ボード接続がさらに提供される。ボード1551上の論理デバイス1577、1578、1579、および1580は、相互接続1515、1516、1517、および1518ならびに内部ボードコネクタ1589および1590を介して論理デバイス1511、1512、1513、および1514に結合される。従って、相互接続1515は、ボード1552の論理デバイス1511を、コネクタ1589および1590を介してボード1551の論理デバイス1577に結合する。相互接続1516は、ボード1552の論理デバイス1512を、コネクタ1589および1590を介してボード1551の論理デバイス1578に結合する。相互接続1517は、ボード1552の論理デバイス1513を、コネクタ1589および1590を介してボード1551の論理デバイス1579に結合する。相互接続1518は、ボード1552の論理デバイス1514を、コネクタ1589および1590を介してボード1551の論理デバイス1580に結合する。
【0340】
例えば、1595、1596、1597、および1598といったいくつかの相互接続は、いずれにも結合されない。なぜなら、それらは使用されないからである。しかし、論理デバイス1511および1577に対して上述したように、R−パック1591は、相互接続1600および1601を接続して、北−南相互接続の数を増やす。
【0341】
本発明の2つのボードの実施形態が図44に示される。本発明の2つのボードの実施形態において、2つのボードのみが、シミュレーションシステムにおけるユーザの設計をかたどる必要がある。図39の6つのボード構成のように、図44の2つのボード構成は、「ブックエンド」の同じ2つのボード(ボード1 1551およびボード6 1556)を用いる。これらは、図1の再構成可能なハードウェアユニットの一部としてマザーボード上に提供される。図44において、1つ目のブックエンドボードはボード1であり、2つ目のブックエンドボードはボード6である。ボード6は、図44で用いられて、図39のボード6と同様に示す。すなわち、ボード1およびボード6のようなブックエンドボードは、北−南メッシュ状接続の不可欠な終端を有するべきである。
【0342】
この2つのボード構成は、ボード1 1551上の4つのFPGA論理デバイス1577(FPGA0)、1578(FPGA1)、1579(FPGA2)、および1580(FPGA3)、ならびにボード6 1556上の4つのFPGA論理デバイス1565(FPGA0)、1566(FPGA1)、1567(FPGA2)、および1568(FPGA3)を含む。これら2つのボードは、内部ボードコネクタ1581および1590によって接続される。
【0343】
これらのボードは、いくつかの接続を終端させるために10ΩR−パックを含む。2つのボードの実施形態に関して、ボードは共に、「ブックエンド」ボードである。ボード1551は、抵抗性の終端として10ΩR−パックコネクタ1591、1592、1593、および1594を含む。2つ目のボード1556はまた、10ΩR−パックコネクタ1557〜1560を含む。
【0344】
ボード1551はコネクタ1590を有し、ボード1556は、内部ボード通信のためのコネクタ1581を有する。例えば、相互接続1600、1971、1977、1541、および1540といった、あるボードから別のボードに渡る相互接続は、これらのコネクタ1590および1581を通過する。言い換えると、内部ボードコネクタ1590および1581により、相互接続1600、1971、1977、1541、および1540は、あるボード上のある構成要素および別のボード上の別の構成要素間の接続をうまく行くことを可能にする。内部ボードコネクタ1590および1581は、FPGAバス上の制御データおよび制御信号を伝達する。
【0345】
4つのボード構成に関して、ボード1およびボード6は、ブックエンドボードを提供する。ボード2 1552およびボード3 1553(図39を参照)は、中間のボードである。本発明(図38Aおよび図38Bに関して論じられるように)に従ってマザーボードに接続されると、ボード1およびボード2は一組にされ、ボード3およびボード6は一組にされる。
【0346】
6つのボード構成に関して、ボード1およびボード6は、上述されるようにブックエンドボードを提供する。ボード2 1552、ボード3 1553、ボード4 1554、およびボード5 1555(図39を参照)は、中間のボードである。本発明(図38Aおよび図38Bに関して論じられるように)に従ってマザーボードに接続されると、ボード1およびボード2は一組にされ、ボード3およびボード4は一組にされ、ボード5およびボード6は一組にされる。
【0347】
所望ならば、さらなるボードが提供され得る。しかし、システムに追加されるボードに関係なく、ブックエンドボード(例えば、ボード1およびボード6のように)は、メッシュ状アレイ接続を達成する抵抗性の終端を有するべきである。一実施形態において、最小の構成は、図44の2つのボード構成である。2つのボードの追加によって、さらなるボードが追加され得る。一次の構成がボード1およびボード6を有するならば、4つのボード構成への将来の変更は、上述のように、ボード6をさらに除去することと、ボード1およびボード2を共に一組にすることと、次に、ボード3およびボード6を共に一組にすることを含む。
【0348】
上述されるように、各論理デバイスは、隣接した隣り合う論理デバイス、および隣接しない、1つ置きに隣り合う論理デバイスに結合される。従って、図39および44において、論理デバイス1577は、相互接続1547を介して、隣接する隣り合う論理デバイス1578に結合される。論理デバイス1577はまた、1つ置きの相互接続1548を介して、隣接しない論理デバイス1579に結合される。しかし、論理デバイス1580は、結合を提供する相互接続1549を有する包み込む環状構成のために、論理デバイス1577に隣接するように考慮される。
【0349】
図42は、オンボード構成要素、および単一のボードのコネクタの上面図(構成要素側)を示す。本発明の一実施形態において、シミュレーションシステムにおいてユーザの設計をかたどるために、1つのボードだけが必要である。他の実施形態において、複数のボード(すなわち、少なくとも2つのボード)が必要である。従って、例えば、図39は、多様な600ピンコネクタ1581〜1590を介して共に結合される6つのボード1551〜1556を示す。上部および下部において、ボード1551は、1セットの10ΩR−パックによって終端され、ボード1556は、別の1セットの10ΩR−パックによって終端される。
【0350】
図42に戻ると、ボード1820は、4つのFPGA論理デバイス1822(FPGA0)、1823(FPGA1)、1824(FPGA2)、および1825(FPGA3)を含む。2つのSRAMメモリデバイス1828および1829が、さらに提供される。SRAMメモリデバイス1828および1829を用いて、このボード上の論理デバイスからメモリブロックをマッピングする。つまり、本発明によるメモリシミュレーションは、このボードの論理デバイスからこのボードのSRAMメモリデバイスにメモリブロックをマッピングする。他のボードは、他の論理デバイスおよびメモリデバイスを含み、類似のマッピング動作を達成する。一実施形態において、メモリマッピングはボードに依存する。すなわち、ボード1のメモリマッピングは、他のボードを無視して、ボード1上の論理デバイスおよびメモリデバイスに限定される。他の実施形態において、メモリマッピングは、ボードに依存しない。従って、あまり多数ではないメモリデバイスを用いて、あるボードの論理デバイスから別のボードに置かれたメモリデバイスにメモリブロックをマッピングする。
【0351】
発光ダイオード(LED)1821がまた、いくつかの選択活性を視覚的に示すように提供される。LEDディスプレイは、本発明の一実施形態によって表Aの通りである。
【0352】
【表2】
【0353】
PLX PCIコントローラ1826およびCTRL_FPGAユニット1827といった、多様な他の制御チップが内部FPGAおよびPCI通信を制御する。システムで使用され得るPLX PCIコントローラ1826の一例は、PLX TechnologyのPCI9080または9060である。このPCI9080は、適切なローカルバスインタフェース、制御レジスタ、FIFO、およびPCIバスへのPCIインタフェースである。データブックのPLX Technology、PCI9080 Sheet(ver.0.93、1997年2月28日)は、本明細書中に参考として援用される。CTRL_FPGAユニット1827の一例は、例えば、Altera10K50チップといった、FPGAチップの形式でプログラム可能な論理デバイス(PLD)である。複数のボード構成において、第1のボードだけがPCIコントローラを含むPCIバスに結合される。
【0354】
コネクタ1830は、ボード1820をマザーボード(図示せず)、従って、PCIバス、電力、およびグランドに接続する。いくつかのボードに関して、コネクタ1830は、マザーボードへの直接の接続のために使用されない。従って、2つのボード構成において、第1のボードのみが、マザーボードに直接結合される。6つのボード構成において、ボード1、3、および5だけが、マザーボードに直接接続され、残りのボード2、4、および6が、マザーボードの接続性のためにそれらの隣接したボードに依存する。内部ボードコネクタJ1〜J28がさらに提供される。名前で意味されるように、これらのコネクタJ1〜J28は、異なるボードにわたる接続が可能である。
【0355】
コネクタJ1は、外部電力およびグランド接続用である。以下の表Bは、本発明の一実施形態による、外部電力のピンおよび対応する詳細を示す。
【0356】
【表3】
【0357】
コネクタJ2は、パラレルポート接続用である。コネクタJ1およびJ2は、作業中に単独単一ボード境界スキャンテストのために用いられる。以下の表Cは、本発明の一実施形態によるパラレルJTAGポートコネクタJ2のピンおよび対応する詳細を示す。
【0358】
【表4】
【0359】
コネクタJ3およびJ4は、ボードにわたるローカルバス接続用である。コネクタJ5〜J16は、FPGA相互接続の接続のあるセットである。コネクタJ17〜J28は、第2のセットのFPGA相互接続の接続である。部品面からはんだ面に設置されると、これらのコネクタは、あるボードのある構成要素と別のボードの別の構成要素との間の効果的な接続を提供する。以下の表DおよびEは、本発明の一実施形態によるコネクタJ1〜J28の完成リストおよび詳細を提供する。
【0360】
【表5】
【0361】
影付きコネクタはスルーホールタイプである。表Dにおいて、ブラケット[]の中の数字は、FPGA論理デバイスの番号0〜3を表すことに留意されたい。従って、S[0]は、南方向の相互接続(すなわち、図37のS[73:0])およびFPGA0の74ビットを示す。
【0362】
【表6】
【0363】
図43は、図41A〜図41Fおよび図42におけるコネクタJ1〜J28の説明を示す。一般に、クリアなブロックは、表面取り付けタイプであるのに対し、灰色のブロックがスルーホールタイプである。さらに、輪郭が実線のブロックは、部品面に置かれたコネクタを表す。輪郭が点線のブロックは、はんだ面に置かれたコネクタを表す。従って、空白および輪郭が実線のブロック1840は、2×30のヘッダー、表面取り付け、および部品面に置かれたことを表す。クリアなおよび輪郭が点線のブロック1841は、2×30のレセプタクル、表面取り付け、およびボードのはんだ面に置かれたことを表す。灰色で満たされ、および輪郭が実線のブロック1842は、2×30または2×45のヘッダー、スルーホール、および部品面に置かれたことを表す。灰色および輪郭が点線のブロック1843は、2×45または2×30のレセプタクル、スルーホール、およびはんだ面に置かれたことを表す。一実施形態において、シミュレーションシステムは、表面取りつけおよびスルーホールタイプの両方の2×30または2×45のマイクロストリップコネクタのSamtecのSFMおよびTFMシリーズを使用する。クロスハッチで満たされ、および実線を有するブロック1844は、R−パック、表面取りつけ、およびボードの部品面に取り付けられている。クロスハッチで満たされ、および点線を有するブロック1845は、R−パック、表面取りつけ、およびはんだ面に取り付けられている。SamtecのウェブサイトのカタログからのSamtecの仕様は、本明細書中に参考として援用される。図42に戻ると、コネクタJ3〜J28は、図43の説明として示されるようなタイプである。
【0364】
図41A〜41Fは、各ボードおよびそれらのそれぞれのコネクタの上面図を示す。従って、ボード1660は、マザーボードコネクタ1682と共にコネクタ1661〜1681を含む。図41Bは、ボード5用のコネクタを示す。従って、ボード1690は、マザーボードコネクタ1709と共にコネクタ1691〜1708を含む。図41Cは、ボード4用のコネクタを示す。従って、ボード1715は、マザーボードコネクタ1734と共にコネクタ1716〜1733を含む。図41Dは、ボード3用のコネクタを示す。従って、ボード1740は、マザーボードコネクタ1759と共にコネクタ1741〜1758を含む。図41Eは、ボード2用のコネクタを示す。従って、ボード1765は、マザーボードコネクタ1784と共にコネクタ1766〜1783を含む。図41Fは、ボード1用のコネクタを示す。従って、ボード1790は、マザーボードコネクタ1813と共にコネクタ1791〜1812を含む。図43の説明で示されるように、6つのボードのこれらのコネクタは、(1)表面取り付けまたはスルーホール、(2)部品面またははんだ面、および(3)ヘッダーまたはレセプタクルあるいはR−パック、の組み合わせである。
【0365】
一実施形態において、これらのコネクタは、内部ボード通信用に仕様される。関係するバスおよび信号は、共にグループ化され、任意の2つのボード間のルーティング信号のためのこれらの内部ボードコネクタによってサポートされる。さらに、ボードの半分だけが、マザーボードに直接結合される。図41Aにおいて、ボード6 1660は、1セットのFPGA相互接続に関して指定されたコネクタ1661〜1668、コネクタ1669〜1674、FPGA相互接続の別のセットに関して指定されたコネクタ1669〜1674、1676、および1679、ならびにローカルバスに関して指定されたコネクタ1681を含む。ボード6 1660が、マザーボード(他の終端において図41Fのボード1 1790と共に)の終端においてボードの1つとして設置されるため、コネクタ1675、1677、1678および1680は、正確な北−南方向の相互接続の10ΩR−パック接続に関して指定される。さらに、6つ目のボード1535が、マザーボード1520に直接結合されるのではなく、5つ目のボード1534に結合される場合には、図38Bで示されるように、マザーボードコネクタ1682はボード6 1660用に使用されない。
【0366】
図41Bにおいて、ボード5 1690は、あるセットのFPGA相互接続に関して指定されたコネクタ1691〜1698、別のセットのFPGA相互接続に関して指定されたコネクタ1699〜1706、ならびに別のセットのFPGA相互接続に関して指定されたコネクタ1707および1708を含む。コネクタ1709を用いて、ボード5 1690をマザーボードに結合する。
【0367】
図41Cにおいて、ボード4 1715は、あるセットのFPGA相互接続に関して指定されたコネクタ1716〜1723、別のセットのFPGA相互接続に関して指定されたコネクタ1724〜1731、ならびにローカルバスに関して指定されたコネクタ1732および1733を含む。コネクタ1709を用いることなく、ボード4 1715を直接マザーボードに結合する。この構成はまた、第4のボード1533が、マザーボード1520に直接接続されるわけではないが、第3のボード1532および第5のボード1534に結合される場合には、図38Bに示される。
【0368】
図41Dにおいて、ボード3 1740は、あるセットのFPGA相互接続に関して指定されたコネクタ1741〜1748、別のセットのFPGA相互接続に関して指定されたコネクタ1749および1756、ならびにローカルバスに関して指定されたコネクタ1757および1758を含む。コネクタ1759を用いて、ボード3 1740をマザーボードに結合する。
【0369】
図41Eにおいて、ボード2 1765は、あるセットのFPGA相互接続に関して指定されたコネクタ1766〜1773、ローカルバスに関して指定されたコネクタ1774〜1781、ならびにローカルバスに関して指定されたコネクタ1782および1783を含む。コネクタ1784を用いることなく、ボード2 1765をマザーボードに直接結合する。この構成はまた、第2のボード1525が、マザーボード1520に直接結合されるわけではないが、第3のボード1532および第1のボード1526に結合される場合には、図38Bに示される。
【0370】
図41Fにおいて、ボード1 1790は、あるセットのFPGA相互接続に関して指定されたコネクタ1791〜1798、別のセットのFPGA相互接続に関して指定されたコネクタ1799〜1804、1806および1809、ならびにローカルバスに関して指定されたコネクタ1811および1812を含む。コネクタ1813を用いることなく、ボード1 1790をマザーボードに結合する。ボード1 1790が、マザーボードの端部におけるボードの1つ(図41Aにおいて他の端部におけるボード6 1660と共に)として位置付けされるので、コネクタ1805、1807、1808、および1810は、正確な北−南方向の相互接続の10ΩR−パック接続に関して指定される。
【0371】
本発明の一実施形態において、複数のボードは、独自の様態においてマザーボードおよび互いに結合される。複数のボードは、部品面をはんだ面に共に結合される。ボードの1つ(例えば、第1のボード)は、マザーボードコネクタを介して、マザーボードに結合され、従ってPCIバスに結合される。さらに、第1のボードのFPGA相互接続バスは、一組のFPGA相互接続コネクタを介して他のボード(例えば、第2のバス)のFPGA相互接続バスに結合される。第1のボード上のFPGA相互接続コネクタは、部品面上にあり、第2のボード上のFPGA相互接続コネクタは、はんだ面上にある。第1のボード上の部品面のコネクタおよび第2のボード上のはんだ面のコネクタにより、それぞれ、FPGA相互接続バスは、共に結合されることを可能にする。
【0372】
同様に、2つのボード上のローカルバスは、ローカルバスコネクタを介して共に結合される。第1のボード上のローカルバスコネクタは、部品面上にあり、第2のボード上のローカルバスコネクタは、はんだ面上にある。従って、第1のボード上の部品面のコネクタおよび第2のボード上のはんだ面のコネクタのそれぞれにより、ローカルバスは、共に結合されることを可能にする。
【0373】
さらなるボードが追加され得る。第3のボードは、第2のボードの部品面に第3のボードのはんだ面を追加し得る。類似のFPGA相互接続およびローカルバスの内部ボード接続が、さらに追加される。第3のボードはまた、別のコネクタを介してマザーボードに結合されるが、このコネクタは、以下にさらに記載されるように、単に電力およびグラウンドを第3のボードに提供するだけである。
【0374】
2つのボード構成における部品面からはんだ面へのコネクタは、図38Aに参考として論じられる。この図は、本発明の一実施形態によるマザーボード上のFPGAボードの接続の側面図を示す。図38Aは、2つのボード構成を示し、名称が意味するように、2つのボードが利用される。図38Aにおいてこれら2つのボード1525(ボード2)および1526(ボード1)は、図39において2つのボード1552および1551と一致する。ボード1525および1526の部品面は、参照符号1989によって表示される。ボード1525および1526のはんだ面は、参照符号1988によって表示される。図38Aに示されるように、これら2つのボード1525および1526は、マザーボードコネクタ1523を介してマザーボード1520に結合される。他のマザーボードコネクタ1521、1522、および1524はまた、拡張の目的のために提供され得る。PCIバスとボード1525と1526との間の信号は、マザーボードコネクタ1523を介してルーティングされる。PCI信号は、まず、第1のボード1526を介して2つのボード構造とPCIバスとの間をルーティングされる。従って、PCIバスからの信号は、それらの信号が第2のボード1525に移動する前に、まず、第1のボード1526と接触する。同様に、2つのボード構造からのPCIバスへの信号は、第1のボード1526から送られる。電力はまた、マザーボードコネクタ1523を介して電源(図示せず)からボード1525および1526に印加される。
【0375】
図38Aに示されるように、ボード1526は、いくつかの構成要素およびコネクタを含む。1つのこのような構成要素は、FPGA論理デバイス1530である。コネクタ1528Aおよび1531Aは、さらに提供される。同様に、ボード1525は、いくつかの構成要素およびコネクタを含む。1つのこのような構成要素は、FPGA論理デバイス1529である。コネクタ1528Bおよび1531Bは、さらに提供される。
【0376】
一実施形態において、コネクタ1528Aおよび1528Bは、例えば、1590および1581(図44)といった、FPGAバスの内部ボードコネクタである。これらの内部ボードコネクタは、多様なFPGA相互接続(例えば、N[73:0]、S[73:0]、W[73:0]、E[73:0]、NH[27:0]、SH[27:0]、XH[36:0]、およびXH[72:37])に対して内部ボード接続性を提供し、ローカルバス接続を除外する。
【0377】
さらに、コネクタ1531Aおよび1531Bは、ローカルバスの内部ボードコネクタである。ローカルバスは、(PCIコントローラを介する)PCIバス、と(FPGA I/Oコントローラ(CTRL_FPGA)ユニットを介する)FPGAバス間の信号を扱う。ローカルバスはまた、PCIコントローラおよびFPGA論理デバイスおよびFPGA I/Oコントローラ(CTRL_FPGA)ユニット間の構成および境界スキャンテスト情報を処理する。
【0378】
つまり、マザーボードコネクタは、一組のボードの1つのボードとPCIバスおよび電力とを結合する。1セットのコネクタは、あるボードの部品面を介してFPGA相互接続を他のボードのはんだ面に結合する。コネクタの別のセットは、あるボードの部品面を介してローカルバスを他のボードのはんだ面に結合する。
【0379】
本発明の別の実施形態において、2つより多くのボードが使用される。実際には、図38Bは、6つのボード構成を示す。この構成は、図38Aの構成と類似しており、マザーボード、ならびにこれらボードの相互接続およびローカルバスに直接接続される全ての他のボードは、はんだ面から部品面へ配置される内部ボードコネクタを介して共に結合される。
【0380】
図38Bは、6つのボード、1526(第1のボード)、1525(第2のボード)、1532(第3のボード)、1533(第4のボード)、1534(第5のボード)、および1535(第6のボード)を示す。これら6つのボードは、ボード1526(第1のボード)、1532(第3のボード)、および1534(第5のボード)上のコネクタを介してマザーボード1520に結合される。他のボード1525(第2のボード)、1533(第4のボード)、および1535(第6のボード)は、マザーボード1520に直接結合されず、むしろ、それらは、それらの隣接する各ボードへのそれぞれの接続を介してマザーボードに間接的に結合される。
【0381】
はんだ面から部品面に置かれると、多様な内部ボードコネクタにより、PCIバス構成要素、FPGA論理デバイス、メモリデバイス、および多様なシミュレーションシステム制御回路の間の通信が可能になる。内部ボードコネクタ1990の第1のセットは、図42のコネクタJ5〜J16に対応する。内部ボードコネクタ1991の第2のセットは、図42のコネクタJ17〜J28に対応する。内部ボードコネクタ992の第3のセットは、図42のコネクタJ3およびJ4に対応する。
【0382】
マザーボードコネクタ1521〜1524は、マザーボード1520上に提供され、マザーボード(および、故にPCIバス)を6つのボードに結合する。上述のように、ボード1526(第1のボード)、1532(第3のボード)、および1534(第5のボード)は、それぞれ、コネクタ1523、1522、および1521に直接結合される。他のボード1525(第2のボード)、1533(第4のボード)、および1535(第6のボード)は、マザーボード1520に直接結合されない。1つのPCIコントローラのみが、6つ全てのボードに対して必要とされるため、第1のボード1526だけがPCIコントローラを含む。さらに、第1のボード1526に結合されたマザーボードコネクタ1523は、PCIバスに、およびPCIバスからアクセスを提供する。コネクタ1522および1521は、電力およびグランドにのみ結合される。隣接したマザーボードコネクタ間の中心から中心への間隔は、一実施形態においてほぼ20.32mmである。
【0383】
マザーボードコネクタ1523、1522、および1521にそれぞれ直接結合されるボード1526(第1のボード)、1532(第3のボード)、および1534(第5のボード)に関して、J5〜J16のコネクタは、部品面に設置され、J17〜J28のコネクタは、はんだ面に設置され、J3〜J4のローカルバスコネクタは、部品面に設置される。マザーボードコネクタ1523、1522、および1521に直接結合されない他のボード1525(第2のボード)、1533(第4のボード)、および1535(第6のボード)に関して、J5〜J16のコネクタは、はんだ面に設置され、J17〜J28のコネクタは、部品面に設置され、J3〜J4のローカルバスコネクタは、はんだ面に設置される。終端のボード1526(第1のボード)および1535(第6のボード)に関して、J17〜J28のコネクタの一部は、10ΩR−パック終端である。
【0384】
図40Aおよび図40Bは、異なるボードの間にアレイ接続を示す。製造プロセスを容易にするために、単一のレイアウト設計は、全てのボードに関して使用される。上述の説明のように、ボードは、バックプレーンなしで、コネクタを介して他のボードに接続する。図40Aは、2つの例示のボード1611(ボード2)および1610(ボード1)を示す。ボード1610の部品面は、ボード1611のはんだ面に向かい合っている。ボード1611は、多数のFPGA論理デバイス、他の構成要素、およびワイヤ線を含む。これら論理デバイスの特定のノードおよびボード1611の他の構成要素は、ノードA’(参照符号1612)およびB’(参照符号1614)によって表示される。ノードA’は、PCBトレース1620を介してコネクタパッド1616に結合される。同様に、ノードB’は、PCBトレース1623を介してコネクタパッド1617に接続される。
【0385】
同じように、ボード1610はまた、多数のFPGA論理デバイス、他の構成要素、およびワイヤ線を含む。これら論理デバイスの特定のノードおよびボード1610の他の構成要素は、ノードA(参照符号1613)およびノードB(参照符号1615)によって表示される。ノードAは、PCBトレース1625を介してコネクタパッド1618に結合される。同様に、ノードBは、PCBトレース1622を介してコネクタパッド1619に接続される。
【0386】
表面取り付けコネクタを用いる、異なるボードに設置されたノード間の信号のルーティングはここで論じられる。図40Aにおいて、(1)架空パス1620、1621、および1622によって示されるようなノードAおよびノードB’と、(2)架空パス1623、1624、および1625によって示されるようなノードBおよびノードA’との間に、所望の接続がある。これらの接続は、図39のボード1551と1552との間の非対称の相互接続1600といったパスを目的としている。他の非対称の相互接続は、コネクタ1589および1590の両面にあるNH〜SHの相互接続1977、1979、および1981を含む。
【0387】
A−A’およびB−B’は、相互接続1515(N,S)のような対称の相互接続に一致する。NおよびSの相互接続は、ホールコネクタを介して使用するのに対し、NHおよびSHの非対称相互接続は、SMDコネクタを用いる(表Dを参照)。
【0388】
表面取り付けコネクタを用いる実際の装置は、類似のアイテムに対して類似の番号を用いて、図40Bを参照してここで論じられる。図40Bにおいて、ボード1611は、PCBトレース1620を介して部品面のコネクタパッド1636に結合される部品面のノードA’を示す。部品面のコネクタパッド1636は、導電性パス1651を介してはんだ面のコネクタパッド1639に結合される。はんだ面のコネクタパッド1639は、導電性パス1648を介してボード1610の部品面のコネクタパッド1642に結合される。最後に、部品面のコネクタパッド1642は、PCBトレース1622を介してノードBに結合される。従って、ボード1611上のノードA’は、ボード1610上のノードBに結合される。
【0389】
同様に、図40Bにおいて、ボード1611は、PCBトレース1623を介して部品面のコネクタパッド1638に結合された部品面上のノードB’を示す。部品面のコネクタパッド1638は、導電性パス1650を介してはんだ面のコネクタパッド1637に結合される。はんだ面のコネクタパッド1637は、導電性パス1645を介して部品面上のコネクタパッド1640に結合される。最後に、部品面のコネクタパッド1640は、PCBトレース1625を介してノードAに結合される。従って、ボード1611上のノードB’は、ボード1610上のノードAに結合され得る。これらのボードが同じレイアウトを共有するため、導電性パス1652および1653は、ボード1610に隣接して設置された他のボードのための導電性パス1650および1651と同様の様態で使用され得る。従って、独特の内部ボード接続性スキームは、スイッチング構成要素を用いることなく、表面取り付けを用いて提供され、さらにホールコネクタを介して提供される。
【0390】
(F.タイミング無反応グリッチフリー論理デバイス)
本発明の一実施形態は、保持時間およびクロックグリッチ問題を共に解決する。ユーザ設計を再構成可能な計算システムに構成する間、ユーザの設計で検出された標準の論理デバイス(例えば、ラッチ、フリップフロップ)は、本発明の一実施形態に従って、エミュレーション論理デバイス、すなわちタイミング無反応グリッチフリー(TIGF)論理デバイスと交換される。一実施形態において、EVAL信号に取り込まれたトリガー信号を用いて、これらのTIGF論理デバイスにおいて格納された値を更新する。多様な入力信号および他の信号を待って、ユーザ設計のハードウェアモデルを介して伝達し、評価周期中に定常状態に達した後、トリガー信号が提供され、TIGF論理デバイスによって格納される値、またはラッチされる値を更新する。その結果、新しい評価周期が始まる。この評価周期のトリガー周期は、一実施形態において周期的になる。
【0391】
上述された保持時間問題は、ここで簡単に議論される。当業者にとって、論理回路設計の共通、かつ、広範な問題は、保持時間の違反である。制御入力が、データ入力(単数または複数)によって示された値をラッチするか、捕捉するか、または格納するように変化した後、論理素子のデータ入力(単数または複数)が、定常に保持されるために必要な最小時間として、保持時間は定義される(そうでなければ、論理素子が適切に動作できない)。
【0392】
シフトレジスタの例示は、ここで、保持時間の要求を説明するために論じられる。図75Aに例示のシフトレジスタを示す。この例示のシフトレジスタは、3つのD型フリップフロップを直列に接続する。すなわち、フリップフロップ2400の出力は、フリップフロップ2401の入力に結合される。フリップフロップ2401の出力は、順に、フリップフロップ2402の入力に結合される。全体的な入力信号Sinは、フリップフロップ2400の入力に結合され、全体的な出力信号Soutは、フリップフロップ2402の出力から生成される。全ての3つのフリップフロップは、それらのそれぞれの入力において共通のクロック信号を受け取る。このシフトレジスタの設計は、以下の条件に基づく。(1)クロック信号が、同時に全てのフリップフロップに到達すること、および(2)クロック信号のエッジを検出した後、フリップフロップの入力は、保持時間の保持時間中、変化しないこと。
【0393】
図75Bのタイミング図を参照すると、システムが保持時間要求を違反しない場合の、保持時間条件が図示される。保持時間は、ある論理素子から次の論理素子へと変化するが、常に仕様書において特定される。クロック入力は、論理0から論理1へと、時間t0において変化する。図75Aに示されるように、クロック入力は、各フリップフロップ2400〜2402に提供される。t0におけるこのクロック端から、入力Sinは、保持時間THの期間中、定常になる必要がある。保持時間THは、時間t0から時間t1に続く。同様に、フリップフロップ2401(すなわち、D2)および2402(すなわち、D3)への入力はまた、クロック信号のトリガー端から保持時間の期間中、定常になる必要がある。この要求は、図75Aおよび75Bで満たされるので、入力Sinは、フリップフロップ2400にシフトされ、D2(論理0)における入力は、フリップフロップ2401にシフトされ、ならびにD3(論理1)における入力は、フリップフロップ2402にシフトされる。当業者にとって、クロック端がトリガーされると、フリップフロップ2401(入力D2における論理1)およびフリップフロップ2402(入力D3における論理0)の入力における新規の値は、次のクロックサイクルにおける次のフリップフロップにシフトされるか、または格納され、保持時間の必要条件が満たされることを想定する。次の表は、これら例示の値に対するシフトレジスタの操作の概要を述べる。
【0394】
【表7】
【0395】
実際の実施において、クロック信号は、全ての論理素子に同時には達さない。むしろ、クロック信号が、ほとんど同時に、または実質的に同時に全ての論理素子に達するように、回路は設計される。クロックスキュー(すなわち、各フリップフロップに達するクロック信号間のタイミング差)が保持時間要求よりもずっと短いように設計される必要がある。従って、全ての論理素子は、適切な入力値を捕捉する。図75Aおよび75Bで示される上述の例において、別のフリップフロップが新規の入力値を捕捉する一方で、異なる時間にフリップフロップ2400〜2402に達するクロック信号による保持時間の違反は、結果として古い入力値を捕捉するいくつかのフリップフロップにおいて生じ、一方で、別のフリップフロップが新規の入力値を捕捉する。結果として、シフトレジスタは、適切に操作されない。
【0396】
同じシフトレジスタ設計の再構成可能な論理デバイス(例えば、FPGA)装置において、クロックが一次入力から直接生成された場合、回路は、低スキューのネットワークがクロック信号を全ての論理素子に分配し得るように(例えば、論理素子が実質的に同時にクロックエッジを検出する)設計され得る。一次のクロックは、セルフタイムの試験ベンチ(test−bench)処理から生成される。たいてい、一次のクロック信号は、ソフトウェアにおいて生成され、いくつか(すなわち、1〜10)の一次クロックのみが、典型的なユーザ回路設計において見出される。
【0397】
しかし、クロック信号が一次の入力の代わりに内部論理から生成されると、保持時間は、さらに問題になる。誘導され、ゲートされたクロックは、一次のクロックによって順に駆動される組み合わせ論理およびレジスタのネットワークから生成される。多く(すなわち、1000以上)の誘導されたクロックは、典型的なユーザ回路設計において見出される。
【0398】
特別な注意またはさらなる制御なしで、これらのクロック信号は、異なる時間において各論理素子に達し、クロックスキューは、保持時間よりも長くなり得る。これは、結果として、例えば、図75Aおよび75Bに図示されるシフトレジスタ回路のように、回路設計の失敗になり得る。
【0399】
図75Aで図示される同じシフトレジスタ回路を用いて、ここで、保持時間の違反について論じる。今度は、しかしながら、シフトレジスタ回路の個々のフリップフロップが、図76Aに示されるように、複数の再構成可能な論理チップ(例えば、複数のFPGAチップ)にわたって展開される。第1のFPGAチップ2411は、内在的に導かれたクロック論理2410を含む。クロック論理2410は、そのクロック信号CLKをのいくつかの構成要素であるFPGAチップ2412〜2416に供給する。この例示において、内在的に生成されたクロック信号CLKは、シフトレジスタ回路のフリップフロップ2400〜2402に提供される。チップ2412は、フリップフロップ2400を含み、チップ2415は、フリップフロップ2401を含み、さらにチップ2416は、フリップフロップ2402を含む。保持時間違反の概念を説明するために、2つの他のチップ2413および2414が提供される。
【0400】
チップ2411のクロック論理2410は、一次のクロック入力(すなわち、おそらく別の導かれたクロック信号)を受け取って、内部クロック信号CLKを生成する。この内部クロック信号CLKは、チップ2412に移動し、CLK1として符号付けされる。クロック論理2410からの内部クロック信号CLKはまた、CLK2として、チップ2413および2414を介してチップ2415に移動する。図示されるように、CLK1は、フリップフロップ2400への入力であり、CLK2は、フリップフロップ2401への入力である。CLK1およびCLK2は共に、例えば、CLK1およびCLK2のエッジが、内部クロック信号CLKのエッジから遅延されるようにワイヤトレース遅延を経る。さらに、CLK2は、他の2つのチップ2413および2414を介して移動されるため、CLK2は、さらなる遅延を経る。
【0401】
図76Bのタイミング図を参照すると、内部クロック信号CLKは、時間t2において生成され、トリガーされる。ワイヤトレース遅延のため、CLK1は、時間t3までにチップ2412のフリップフロップ2400に到達しない。ここで、時間t3は時間T1の遅延である。上の表で示されるように、CLK1のクロックエッジの到達以前に、Q1における出力(または入力D2)は、論理0にある。CLK1のエッジがフリップフロップ2400において感知された後に、D1における入力は、必要な保持時間H2(すなわち、時間t4まで)のための定常を維持する必要がある。この時点で、フリップフロップ2400は、入力論理1にシフトするか、または入力論理1を格納する。故に、Q1(D2)における出力は、論理1にある。
【0402】
これが、フリップフロップ2400に対して生じると、クロック信号CLK2は、チップ2415のフリップフロップ2401へのクロック信号の通り道を作る。チップ2413および2414によって生じた遅延T2によって、CLK2は、時間t5においてフリップフロップ2401に到達する。今、D2における入力は論理1にあり、保持時間がこのフリップフロップ2401を満たした後、この論理値1は、出力Q2(またはD3)に現れる。従って、出力Q2は、CLK2の到達前に論理1にあり、出力は,CLK2の到達後に論理1にとどまる。これは、誤った結果である。このシフトレジスタは、論理0にシフトするべきである。フリップフロップ2400が、古い入力値(論理1)に誤ってシフトする場合、フリップフロップ2401は、新しい入力値(論理1)に誤ってシフトされる。この誤った動作は、典型的に、クロックスキュー(またはタイミング遅延)が保持時間よりも長くなったときに生じる。この例示において、T2>T1+H2である。つまり、図76Aに示されるように、いくつかの予防策が取られない場合に、クロック信号があるチップから生成され、異なるチップに常駐する他の論理素子にクロック信号を分配する所で保持時間違反が生じる可能性が高い。
【0403】
ここで、図77Aおよび77Bを参照して、上述されたクロックグリッチ問題を述べる。一般に、回路の入力が変化するとき、出力が正しい値に安定する前に、非常に短時間で、出力は、いくらかのランダム値に変化する。別の回路が、まさに間違った時間に出力を検査し、ランダム値を読み込んだ場合、結果は間違っており、デバックが困難になり得る。別の回路に不利益に影響したこのランダム値は、グリッチと呼ばれる。典型的な論理回路において、ある回路は、別の回路に対してクロック信号を生成し得る。非補償のタイミング遅延が、1つまたは両方の回路に存在する場合、クロックグリッチ(すなわち、クロック端の計画されていない発生)が発生して、誤った結果を生じ得る。保持時間違反のように、回路設計の正確な論理素子が異なった時間において値を変化するために、クロックグリッチが起こる。
【0404】
図77Aは、例示の論理回路を示す。この場合、いくつかの論理素子が論理素子の別のセットに対してクロック信号を生成する。つまり、D型フリップフロップ2420、D型フリップフロップ2425、および排他的OR(XOR)ゲート2422がD型フリップフロップ2423に対してクロック信号(CLK3)を生成する。フリップフロップ2420は、線2425によってD1においてデータ入力を受け取り、線2427によってQ1においてデータを出力する。フリップフロップ2420は、クロック論理2424からクロック入力(CLK1)を受け取る。CLKは、クロック論理2424から本来生成されたクロック信号を参照して、CLK1は、それがフリップフロップ2420に到達するときの時間まで遅延された同じ信号を参照する。
【0405】
フリップフロップ2421は、線2426によってD2においてデータ入力を受け取って、線2428によってQ2においてデータを出力する。フリップフロップ2421は、クロック論理2424からクロック入力(CLK2)を受け取る。上述されたように、CLKは、クロック論理2424から本来生成されたクロック信号を参照して、CLK2は、それがフリップフロップ2421に到達するときの時間まで遅延される同じ信号を参照する。
【0406】
線2427によるフリップフロップ2420からの出力および線2428によるフリップフロップ2421からの出力は、XORゲート2422への入力である。XORゲート2422は、フリップフロップ2423のクロック入力に、CLK3として符号付けされたデータを出力する。フリップフロップ2423はまた、線2429によりD3においてデータを入力し、Q3においてデータを出力する。
【0407】
ここで、この回路に対して生じたクロックグリッチ問題は、図77Bに図示されたタイミング図を参照して述べられる。CLK信号は、時間t0においてトリガーされる。この時までには、このクロック信号(すなわち、CLK1)は、フリップフロップ2420に到達し、この時間は、すでに時間t1である。CLK2は、時間t2までにフリップフロップ2421に到達しない。
【0408】
D1およびD2への入力が共に、論理1にあると想定する。CLK1が、時間t1においてフリップフロップ2420に到達するとき、Q1における出力は、(図77Bに示されるように)論理1にある。CLK2は、時間t2において少し遅れてフリップフロップ2421に到達し、故に、線2428の出力Q2は、時間t1から時間t2までの間、論理0に残る。XORゲート2422は、時間t1と時間t2との間の時間周期中に、たとえ所望の信号が論理0(1XOR1=0)であっても、提示目的のCLK3としての論理1をフリップフロップ2423のクロック入力に生成する。この時間t1と時間t2との間の時間周期中のCLK3の生成が、クロックグリッチである。従って、フリップフロップ2423の入力線2429によりD3において提供されたどんな論理値でも、それが所望であっても、所望でなくとも格納され、ここで、このフリップフロップ2423は、線2429による次の入力のために準備される。正確に所望であるならば、CLK1およびCLK2の時間遅延は、最低限にされ、クロックグリッチは生成されず、または、最低限でも、クロックグリッチは、回路の残りに影響を与えられないほど短い間隔で続く。後者の場合、CLK1およびCLK2の間のクロックスキューが十分に短い場合、XORゲート遅延は、グリッチを十分に透過して、回路の残りに影響を与えない。
【0409】
保持時間違反問題への2つの公知の解決法は、(1)タイミング調整、および(2)タイミングの再統合である。タイミング調整は、米国特許出願第5,47830号に記載されるように、論理素子の保持時間を延長するために正確な信号パスに十分な遅延素子の挿入を必要とする。例えば、上述のシフトレジスタ回路における入力D2およびD3による十分な遅延を追加することにより、保持時間違反を妨げ得る。従って、図78において、同様のシフトレジスタ回路は、入力D2およびD3にそれぞれ追加される遅延素子2430および2431と共に示される。結果として、遅延素子2430は、時間t4が時間t5の後に、T2<T1+H2(図76B)となって生じるように設計され得、その結果、保持時間違反は生じない。
【0410】
タイミング調整の解決策による潜在的な問題は、FPGAチップの仕様書に強く依存していることである。公知の技術であるように、FPGAチップのような再構成可能な論理チップは、ルックアップテーブルを用いて論理素子を実現することである。チップのルックアップテーブルの遅延は、この特定された時間遅延に依存する保持時間超過を回避するタイミング調整方法を用いて仕様書および設計者に提供される。しかし、この遅延は評価だけであり、チップ間で変動する。タイミング調整方法に関する別の潜在的な問題は、設計者が回路設計にわたって存在する配線遅延を補償しなければならないことである。これは不可能なタスクではないが、配線遅延の評価は時間を消費し、誤りを生じる傾向がある。さらにタイミング調整法は、クロックグリッチ問題を解決しない。
【0411】
別の解決策は、IKOSのVirtualWires technologyによって導入された技術であるタイミング再合成である。タイミング再合成の概念は、ユーザの回路設計を機能的に等価な設計に変換しつつ、有限状態機械およびレジスタを介してクロックおよびピンアウト(pin−out)信号のタイミングを厳密に制御する。タイミング再合成は、単一の高速クロックを導入することによってユーザの回路設計を再タイミング調整する(retime)。さらに、ラッチ、ゲートクロック、および多重同期クロックおよび多重非同期クロックをフリップフロップベースの単一クロック同期設計に変換する。従って、タイミング再合成は、各チップの入力ピンアウトおよび出力ピンアウトにおけるレジスタを使用して、緻密な内部チップ信号移動を制御し、その結果内部チップ保持時間超過が発生しない。さらにタイミング再合成は、各チップにおいて有限状態機械を使用し、他のチップからの入力をスケジューリングし、他のチップへの出力をスケジューリングし、そして、基準クロックに基づいて内部フリップフロップの更新をスケジューリングする。
【0412】
図75A、図75B、図76A、および図76Bに関して上述された説明によって導入された同じシフトレジスタ回路を使用することによって、図79は、タイミング再合成回路の一例を示す。基本的な3つのフリップフロップシフトレジスタ設計は、機能的な等価回路に変換されている。チップ2430は、ライン2448を介してレジスタ2443に結合された元の内部クロック発生論理2435を含む。クロック論理2435はCLK信号を発生する。さらに第1の有限状態機械2438は、ライン2449を介してレジスタ2443に結合される。レジスタ2443および第1の有限状態機械2438は、独立設計のグローバル基準クロックによって制御される。
【0413】
さらにCLK信号は、その信号がチップ2434に到達する前に、チップ2432および2433にわたって送達する。チップ2432では、第2の有限状態機械2440は、ライン2462を介してレジスタ2445を制御する。CLK信号は、ライン2461を介してレジスタ2443からレジスタ2445に進む。レジスタ2445はCLK信号を、ライン2463を介して次のチップ2433に出力する。チップ2433は、ライン2464を介してレジスタ2446を制御する第3の有限状態機械2441を含む。レジスタ2446は、CLK信号をチップ2434に出力する。
【0414】
チップ2431は、元のフリップフロップ2436を含む。レジスタ2444は、入力Sinを受け取り、入力Sinを、ライン2452を介してフリップフロップ2436の入力D1に出力する。フリップフロップ2436の出力Q1は、ライン2454を介してレジスタ2466に結合される。第4の有限状態機械2439は、ライン2451を介してレジスタ2444、ライン2455を介してレジスタ2466、およびラッチイネーブルライン2453を介してフリップフロップ2436を制御する。さらに第4の有限状態機械2439は、ライン2450を介してチップ2430から元のクロック信号CLKを受け取る。
【0415】
チップ2434は、ライン2456を介して、そのフリップフロップのD2入力において、チップ2431のレジスタ2466から信号を受け取る元のフリップフロップ2437を含む。フリップフロップ2437のQ2出力は、ライン2457を介してレジスタ2447に結合される。第5の有限状態機械2439は、ライン2459を介してレジスタ2447、およびラッチイネーブルライン2458を介してフリップフロップ2437を制御する。さらに第5の有限状態機械2442は、チップ2432および2433を介してチップ2430から元のクロック信号CLKを受け取る。
【0416】
タイミング再合成によって、有限状態機械2438〜2442、レジスタ2443〜2447および2466、ならびに単一のグローバル基準クロックが使用されて、複数のチップにわたる信号フローを制御し、内部フリップフロップを更新する。従って、チップ2430では、CLK信号の他のチップへの分配は、レジスタ2443を介して第1の有限状態機械2438によってスケジューリングされる。同様に、チップ2431では、第4の有限状態機械2439は、入力Sinを、レジスタ2444を介してフリップフロップ2436に送達すること、およびレジスタ2466を介してQ1出力を送達することをスケジューリングする。さらにフリップフロップ2436のラッチ機能は、第4の有限状態機械2439からのラッチイネーブル信号によって制御される。同じ原理が、他のチップ2432〜2434における論理に対して支援する。内部チップ入力送達スケジュール、内部チップ出力送達スケジュール、および内部フリップフロップ状態更新のこのような密な制御によると、内部チップ保持時間の超過が取り除かれる。
【0417】
しかし、タイミング再合成技術は、有限状態機械およびレジスタの追加を含む、はるかにより大きい機能的に等価な回路にユーザの回路設計を変換することを要求する。典型的には、この技術を実現するために必要なさらなる論理が各チップにおいて利用可能な論理の20%まで占める。さらに、この技術は、クロックグリッチ問題に影響を受けない。クロックグリッチを避けるために、タイミング再合成技術を用いる設計者は、さらなる予備的なステップを獲得しなければならない。1つの保守的な設計アプローチは、ゲートクロックを利用する論理デバイスへの入力が同時に変化されないように回路を設計することである。積極的なアプローチは、回路の残りに影響を与えないようにゲート遅延を使用して、グリッチをフィルタリングする。しかし上述のように、タイミング再合成は、クロックグリッチを避けるためにいくつかのさらなる普通でない(non−trival)測定を必要とする。
【0418】
保持時間およびクロックグリッチ問題の両方を解決する本発明の種々の実施形態が説明される。RCCコンピューティングシステムのソフトウエアモデルおよびRCCアレイのハードウエアモデルへのユーザ設計のマッピング構成の間、図18Aに示されるラッチは、本発明の一実施形態によるタイミングに敏感ではないグリッチのない(TIGF)ラッチを用いてエミュレートする。同様に、図18Bに示された設計フリップフロップは、本発明の一実施形態によるTIGFフリップフロップを用いてエミュレートされる。これらのTIGF論理デバイスは、ラッチまたはフリップフロップの形態であろうとも、エミュレーション論理デバイスとも呼ばれ得る。TIGFラッチおよびフリップフロップの更新はグローバルトリガ信号を用いて制御される。
【0419】
本発明の一実施形態では、ユーザ設計回路において見出される論理デバイスの全てがTIGF論理デバイスと置換されるわけではない。ユーザ設計回路は、ゲートクロックまたは発生したクロックによって制御される一次クロックおよび他の部分によってイネーブルまたはクロックされたこれらの部分を含む。保持時間超過およびクロックグリッチは、論理デバイスがゲートクロックまたは発生したクロックによって制御される後者の場合に対して発行されるため、ゲートクロックまたは発生したクロックによって制御されたこれらの特定の論理デバイスのみが本発明によるTIGF論理デバイスで置換される。他の実施形態では、ユーザ設計回路において見出される全ての論理デバイスはTIGF論理デバイスによって置換される。
【0420】
本発明のTIGFラッチおよびフリップフロップの実施形態を説明する前に、グローバルトリガ信号が説明される。一般的には、グローバルトリガ信号は、評価期間の間にTIGFラッチおよびフリップフロップがその状態(すなわち、古い入力値を維持する)に維持し、短いトリガ期間の間にその状態を更新する(すなわち、新しい入力値を格納する)ことを可能にするように使用される。一実施形態では、図82に示されるグローバルトリガ信号は、上述のEVAL信号から分離し、そしてこの信号から発生される。この実施形態では、グローバルトリガ信号は、長い評価期間の次に短いトリガ期間を有する。グローバルトリガ信号は、評価期間の間およびEVALサイクルの終了時にEVAL信号をトラッキングし、短いトリガ信号がTIGFラッチおよびフリップフロップを更新するように生成される。別の実施形態では、EVAL信号はグローバルトリガ信号であり、EVAL信号は、評価期間の間に1つの論理状態(例えば論理0)であり、評価しない期間またはTIGFラッチ/フリップフロップ更新期間の間に別の論理状態(例えば論理1)である。
【0421】
RCCコンピューティングシステムおよびRCCハードウエアアレイに関して上述されたように、評価期間が一次入力およびフリップフロップ/ラッチデバイスの全ての変化を全体のユーザ設計に、一度に一シミュレーションサイクルで伝達するように使用される。この伝達の間に、RCCシステムは、システム内の全信号に安定状態を達成するまで待機する。この評価期間は、ユーザ設計がRCCアレイの適切な再構成可能な論理デバイス(例えば、FPGAチップ)にマッピングされ配置された後に計算される。従って、評価期間は設計特有である。すなわち、1つのユーザ設計に対する評価期間は、別のユーザ設計に対する評価期間とは異なり得る。この評価期間は、次の短いトリガ期間の前に、システムにおける全ての信号は全体のシステムを介して伝達され、安定状態に到達することを確実にするのに十分長くなければならない。
【0422】
図82に示されるように、短いトリガ期間が評価期間に時間的に(in time)隣接して発生する。一実施形態では、短いトリガ期間が評価期間の後に発生する。この短いトリガ期間の前に、入力信号は、評価期間の間にユーザ設計回路のハードウエアモデル構成部にわたって伝達される。本発明の一実施形態によってEVAL信号の論理状態の変化によって特徴付けられた短いトリガ期間は、ユーザ設計の全てのTIGFラッチおよびフリップフロップを制御し、安定状態が達成された後、評価期間から伝達された新しい値で更新され得る。この短いトリガ期間は、低いスキューネットワークにグローバルに分配され、再構成可能な論理デバイスが適切な動作を可能にする期間と同様に短くてもよい(すなわち、図82に示されるように、t0〜t1およびt2〜t3の持続時間)。この短いトリガ期間の間、新しい一次入力は、TIGFラッチおよびフリップフロップの各入力ステージにおいてサンプリングされ、同じTIGFラッチおよびフリップフロップにおける古い格納された値は、ユーザ設計のRCCハードウエアモデルにおける次のステージに出力される。以下の説明では、短いトリガ期間の間に発生するグローバルトリガ信号の一部は、TIGFトリガ、TIGFトリガ信号、トリガ信号、または単にトリガと呼ばれる。
【0423】
図80Aは、図18Aに元々示されるラッチ2470を示す。ラッチ動作は以下のようである。
【0424】
if(#S),Q←1
else if(#R),Q←0
else if(en),Q←D
else Q keeps the old value.
このラッチはレベルに敏感で非同期であるため、クロック入力がイネーブルされ、ラッチイネーブル入力がイネーブルされる限り、出力Qは入力Dを追跡する。
【0425】
図80Bは、本発明の一実施形態によるTIGFラッチを示す。図80Aのラッチと同様に、TIGFラッチは、D入力、イネーブル入力、セット(S)、リセット(R)、および出力Oを有する。さらに、TIGFラッチはトリガ入力を有する。TIGFラッチは、D型フリップフロップ2471、マルチプレクサ2472、ORゲート2473、ANDゲート2474、および種々の相互接続を含む。
【0426】
D型フリップフロップ2471は、ANDゲート2474の出力からライン2476を介してその入力を受け取る。このD型フリップフロップはまた、そのクロック入力においてライン2477上のトリガ信号によってトリガされる。このトリガ信号は、評価サイクルに依存する厳密なスケジュールに従って、RCCシステムによってグローバルに分配される。D型フリップフロップ2471の出力はライン2478を介してマルチプレクサ2472の入力の内の1つに結合される。マルチプレクサ2472の他の入力は、ライン2475上のTIGFラッチのD入力に結合される。このマルチプレクサはライン2484上のイネーブル信号によって制御される。マルチプレクサ2472の出力は、ライン2479を介してORゲート2473の入力の内の1つに結合される。ORゲート2473の他の入力は、ライン2480上のセット(S)入力に結合される。ORゲート2473の出力は、ライン2481を介してANDゲート2474の入力の内の1つに接続される。ANDゲート2474の他の入力はライン2482のリセット(R)信号に接続される。ANDゲート2474の出力は、上述のようにライン2476を介してD型フリップフロップ2471の入力にフィードバックされる。
【0427】
本発明のこのTIGFラッチの実施形態の動作がここで説明される。TIGFラッチのこの実施形態では、D型フリップフロップ2471は、TIGFラッチの現在の状態(すなわち古い値)を保持する。D型フリップフロップ2471の入力におけるライン2476は、このTIGFラッチに既にラッチされた新しい入力値を表す。ライン2476は新しい値を表す。なぜなら、ライン2475上のTIGFラッチの主入力(D入力)は、マルチプレクサ2472の入力(ライン2484上の適切なイネーブル信号を用いて最終的に表される)からORゲート2473を介して、そして最終的にはANDゲート2474を介して、ライン2483上に最終的に進み、ライン2476上のD型フリップフロップ2471に、TIGFラッチの新しい入力信号をフィードバックするからである。ライン2477上のトリガ信号は、ライン2476上の新しい入力値をD型フリップフロップ2471にクロックすることによってTIGFラッチを更新する。従って、D型フリップフロップ2471のライン2478上の出力は、TIGFラッチの現在の状態(すなわち古い値)を示しつつ、ライン2476上の入力はTIGFラッチによって既にラッチされた新しい入力値を示す。
【0428】
マルチプレクサ2472は、D型フリップフロップ2471から現在の状態およびライン2475上で新しい入力値を受け取る。イネーブルライン2484は、マルチプレクサ2472に対するセレクタ信号として機能する。TIGFラッチは、トリガ信号がライン2477上で供給されるまで更新されないため(すなわち新しい入力値が格納される)、ライン2475上のTIGFラッチのD入力およびライン2484上のイネーブル入力が任意の順序でTIGFラッチに到達し得る。このTIGFラッチ(ユーザ設計のハードウエアモデルにおける他のTIGFラッチ)が、図76Aおよび図76Bに関して上述したように(あるクロック信号が別のクロック信号よりもはるかに遅く到達する)、従来のラッチを使用した回路の保持時間超過を通常引き起こす状況に遭遇する場合、このTIGFラッチは、トリガ信号がライン2477上に供給されるまで適切な古い値を保持することによって適切に機能する。
【0429】
このトリガ信号は、低いスキューグローバルネットワークを介して分配される。***
さらにこのTIGFラッチは、クロックグリッチ問題を解決する。TIGFラッチにおいてクロック信号がイネーブル信号によって置換されることに留意されたい。ライン2484上のイネーブル信号は、評価期間の間にしばしばグリッチし得るが、TIGFラッチは、現在の状態を必ず保持するように継続する。TIGFラッチが更新され得る機構のみがトリガ信号により存在し、この信号が安定状態に達した場合、一実施形態では、このトリガ信号が評価期間の後に供給される。
【0430】
図81Aは、図18Bに元々示されたフリップフロップ2490を示す。このフリップフロップは以下のように動作する。
【0431】
if(#S),Q←1
else if(#R),Q←0
else if(positive edge of CLK),Q←D
else Q keeps the old value.
フリップフロップイネーブル入力がイネーブルされる限り、このラッチがエッジトリガされるため、出力Qは、クロック信号の正のエッジにおいて入力Dを追跡する。
【0432】
図81Bは、本発明の一実施形態によるTIGF Dタイプフリップフロップを示す。図81Aのフリップフロップと同様に、TIGFフリップフロップは、D入力、クロック入力、セット(S)、リセット(R)、および出力Qを有する。さらに、TIGFフリップフロップはトリガ入力を有する。TIGFフリップフロップは、3つのD型フリップフロップ2491、2492、および2496、マルチプレクサ2493、ORゲート2494、2つのANDゲート2495および2497、ならびに種々の相互接続を含む。
【0433】
フリップフロップ2491は、ライン2498上でTIGF D入力、ライン2499上でトリガ入力を受け取り、ライン2500上でQ出力を供給する。さらにこの出力ライン2500は、マルチプレクサ2493への入力として機能する。マルチプレクサ2493への他の出力はフリップフロップ2492のQ出力からライン2503を介して入来する。マルチプレクサ2493の出力はライン2505を介してORゲート2494の入力の内の1つに結合される。ORゲート2492の他の入力は、ライン2506上のセット(S)信号である。ORゲート2494の出力は、ライン2507を介してANDゲート2495の入力の内の1つに結合される。ANDゲート2495の他の入力は、ライン2508上のリセット(R)信号である。ANDゲート2495の出力(これは、全体のTIGF出力Qでもある)は、ライン2501を介してフリップフロップ2492の入力に結合される。さらにフリップフロップ2492は、ライン2502上にトリガ入力を有する。
【0434】
マルチプレクサ2493に戻って、そのセレクタ入力は、ライン2509を介してANDゲート2497の出力に結合される。ANDゲート2497は、ライン2510上のCLK信号からの入力およびライン2512を介してフリップフロップ2496の出力からの他の入力の内の1つを受け取る。さらにフリップフロップ2496は、ライン2511上のCLK信号からの入力およびライン2513上のトリガ入力を受け取る。
【0435】
本発明のTIGFフリップフロップの動作の実施形態がここで説明される。この実施形態では、TIGFフリップフロップは、3つの異なる点(ライン2499を介したD型フリップフロップ2491、ライン2502を介したD型フリップフロップ2492、およびライン2513を介したD型フリップフロップ2496)におけるトリガ信号を受け取る。
【0436】
TIGFフリップフロップは、クロック信号のエッジが検出された場合のみ入力値を格納する。本発明の一実施形態によって、要求されたエッジはクロック信号の正のエッジである。クロック信号の正のエッジを検出するために、エッジ検出器2515が提供されている。エッジ検出器2515は、D型フリップフロップ2496およびANDゲート2497を含む。さらにエッジ検出器2515は、D型フリップフロップ2496のライン2513上のトリガ信号を介して更新される。
【0437】
D型フリップフロップ2491は、トリガ信号がライン2499上に提供されるまで、TIGFフリップフロップの新しい入力値を保持し、ライン2498上のD入力に対する任意の変化に抵抗する。従って、TIGFフリップフロップの各評価期間の前に、新しい値がD型フリップフロップ2491に格納される。従ってTIGFフリップフロップがトリガ信号によって更新されるまで新しい値を予め格納することによって、TIGFフリップフロップは、保持時間超過を回避する。
【0438】
D型フリップフロップ2492は、トリガ信号がライン2502上に供給されるまで、TIGFフリップフロップの現在の値(すなわち古い値)を保持する。この値は、この値が更新された後および次の評価期間の前にエミュレートされたTIGFフリップフロップの状態である。ライン2501上のD型フリップフロップ2492への入力は、新しい値(評価された期間の有意な持続時間に対して、ライン2500上の値と同じである)を保持する。
【0439】
マルチプレクサ2493は、ライン2500上で新しい入力値およびライン2503上でTIGFフリップフロップ2503に現在格納された古い値を受け取る。ライン2504上のセレクタ信号に基づいて、マルチプレクサは、エミュレートされたTIGFフリップフロップの出力として、新しい値(ライン2500)または古い値(ライン2503)のいずれかを出力する。ユーザ設計のハードウエアモデルアプローチの安定状態において伝達された全ての信号の前に、この出力は任意のクロックグリッチによって変化する。従って、ライン2501上の入力は、評価期間の終了によってフリップフロップ2491に格納された新しい値を提示する。トリガ信号はTIGFフリップフロップによって受け取られる場合、フリップフロップ2492は、ライン2501に存在した新しい値を格納し、フリップフロップ2491は、ライン2498上の次の新しい値を格納する。従って、本発明の一実施形態によるTIGFフリップフロップは、クロックグリッチに負の影響を与えない。
【0440】
さらに詳述するために、このTIGFフリップフロップはまた、クロックグリッチに対していくつかの不感領域(immunity)を提供する。当業者は、図77Aに示されるフリップフロップ2420、2421、および2423を図81BのTIGFフリップフロップの実施形態に置き換えることによって、クロックグリッチは、このTIGFフリップフロップを使用する任意の回路に影響を与えないことを理解する。図77Aおよび図77Bをしばらく参照すると、クロックグリッチは、図77Aの回路に負の影響を与える。なぜなら、時間t1〜t2に対して、フリップフロップ2423が新しい値でクロックされるべきではない場合に新しい値にクロックされるためである。CLK1およびCLK2信号のスキューの性質は、時間t1〜t2の間、XORゲート2422に論理1状態を生成させ、次のフリップフロップ2423のクロックラインを駆動させる。本発明の実施形態によるTIGFフリップフロップによって、クロックグリッチは、新しい値のクロッキングに影響を与えない。フリップフロップ2423をTIGFフリップフロップに置換することにより、一旦、信号が評価期間の間、安定状態に達成すると、短いトリガ期間の間のトリガ信号は、TIGFフリップフロップがフリップフロップ2491(図81B)に新しい値を格納することを可能にする。その後、時間t1〜t2からの時間間隔の間に図77Bのクロックグリッチのような任意のクロックグリッチは新しい値にクロックしない。TIGFフリップフロップは、トリガ信号のみを用いて更新し、この回路を伝達するこの信号が安定状態に達成した場合、このトリガ信号は、評価期間の後までTIGFフリップフロップに提示されない。
【0441】
TIGFフリップフロップの特定の実施形態は、Dタイプフリップフロップであるが、他のフリップフロップ(例えば、T、JK、SR)は本発明の範囲内にある。他のタイプのエッジトリガフリップフロップは、D入力の前にいくつかのAND/OR論理を追加することによってD型フリップフロップから発生し得る。
【0442】
(VII.シミュレーションサーバ)
本発明の別の実施形態によるシミュレーションサーバは、複数のユーザが同じ再構成可能なハードウエアユニットにアクセスできるように提供されて、時分割された態様で同じユーザ設計または異なるユーザ設計を効率的にシミュレートおよび加速する。高速シミュレーションスケジューラおよび状態スワッピング機構は、高いスループットを生じるアクティブシミュレーションプロセスによってシミュレーションサーバに供給するように使用される。このサーバは、加速およびハードウエア状態スワッピング目的のために再構成可能なハードウエアにアクセスする複数のユーザまたは複数のプロセスを提供する。一旦、加速が得られるか、またはハードウエア状態にアクセスされ、各ユーザまたはプロセスは、ソフトウエアのみにおいてシミュレートし得、従って、再構成可能なハードウエアユニットの制御を他のユーザまたはプロセスに解放する。
【0443】
本明細書のシミュレーションサーバ部において、「ジョブ」および「プロセス」等の用語が使用される。本明細書において用語「ジョブ」および「プロセス」は、一般的に相互交換可能に使用される。従来では、バッチシステムが「ジョブ」を実行し、時分割システムが「プロセス」またはプロググラムを格納および実行していた。今日のシステムでは、これらのジョブおよびプロセスは類似している。従って、本明細書中、用語「ジョブ」は、バッチ型システムに限定されず、「プロセス」は、時分割システムに限定されない。むしろ、極端な例では、タイムスライスにおいて、または、任意の他の時分割された仲介物(intervenor)による割り込みなしでプロセスがタイムスライスの範囲内で実行され得る場合、「ジョブ」は、「プロセス」と等価である。他の極端な例では、「ジョブ」が終了するために複数のタイムスライスを要求されない場合、「ジョブ」は、「プロセス」のサブセットである。そのため、複数の時間スライスが、「プロセス」が他の等しい優先度のユーザ/プロセスの存在のために完成するように要求する場合、「プロセス」は、「ジョブ」に分割される。さらに、プロセスは、唯一の高い優先度のユーザであるか、またはプロセスが時間スライス内に完成させるのに十分短いため、「プロセス」が、複数の時間スライスが完成するように要求される場合、「プロセス」は「ジョブ」と等価になる。従って、ユーザは、シミュレーションシステムにおいてロードされ実行された1つ以上の「プロセス」またはプログラムとインタラクトし得、各「プロセス」は、1つ以上の「ジョブ」が時分割システムにおいて完成するように要求し得る。
【0444】
1つのシステム構成において、リモート端末を介した複数のユーザは、非ネットワーク環境において同じマイクロプロセッサワークステーションを利用し、同じ再構成可能なハードウエアユニットにアクセスして、同じユーザ回路設計または異なるユーザ回路設計を検討/デバッグする。非ネットワーク環境において、リモート端末はその処理機能にアクセスするためメインコンピューティングシステムに接続される。この非ネットワーク構成は、多数のユーザが、パラレルデバッグ目的のために同じユーザ設計へのアクセスを共有することを可能にする。このアクセスは、時分割プロセスによって達成される。このプロセスにおいて、スケジューラは、複数のユーザへのアクセスの優先度を決定し、ジョブをスワッピングし、そしてスケジューリングされたユーザ間でハードウエアユニットアクセスを選択的にロックする。他の例では、複数のユーザは、デバッグ目的のためにユーザ自身の別の異なるユーザ設計に対するサーバを介して同じ再構成可能なハードウエアユニットにアクセスし得る。この構成では、複数のユーザまたはプロセスは、オペレーティングシステムを有するワークステーションにおける複数のマイクロプロセッサを共有する。別の構成では、分離したマイクロプロセッサベースのワークステーションにおける複数のユーザまたはプロセスは、同一の再構成可能なハードウエアユニットにアクセスし、ネットワークを介して同じユーザ回路設計または異なるユーザ回路設計を検討/デバッグし得る。同様に、このアクセスは、時分割プロセスを介して達成され、このプロセスにおいて、スケジューラは、複数のユーザへのアクセス優先度を決定し、ジョブをスワッピングし、そしてスケジューリングされたユーザ間でハードウエアユニットアクセスを選択的にロックする。ネットワーク環境において、スケジューラは、UNIX(登録商標)ソケットシステム呼び出しを介してネットワークリクエストに注意を払う。このオペレーティングシステムは、コマンドをスケジューラに送信するようにソケットを使用する。
【0445】
上述のように、シミュレーションスケジューラは、割り込み型多重優先度ラウンドロビンアルゴリズムを使用する。言い換えると、ユーザまたはプロセスがジョブを完了し、セッションを終了するまでに、より高い優先度のユーザまたはプロセッサがまず提供される。等しい優先度のユーザまたはプロセスの中でも、割り込み型多重優先度ラウンドロビンアルゴリズムが使用され、各ユーザまたはプロセスは、完成するまでその動作を実行するように等しいタイムスライスを割り当てる。タイムスライスは、複数のユーザまたはプロセスが提供される前に長時間待機する必要のないように十分短い。さらにタイムスライスは、シミュレーションサーバのスケジューラが1ユーザまたはプロセスを割り込む前に十分な動作が実行されて、スワップインし、新しいユーザのジョブを実行するのに十分長い。一実施形態では、デフォルトタイムスライスは5秒であり、ユーザ設定可能である。一実施形態では、スケジューラは、オペレーティングシステムのビルトインスケジューラへの特定の呼び出しを行う。
【0446】
図45は、本発明の一実施形態によるマルチプロセッサワークステーションを用いる非ネットワーク環境を示す。図45は図1の改変体であり、従って、同様の参照符号は同様の構成要素/ユニットのために使用される。ワークスション1100は、ローカルバス1105、ホスト/PCIブリッジ1106、メモリバス1107、およびメインメモリ1108を含む。キャッシュメモリサブシステム(図示せず)がさらに設けられ得る。他のユーザインターフェイスユニット(例えばモニタ、キーボード)がさらに設けられるが、図45に示されない。さらにワークステーション1100は、スケジューラ1117および接続/パス1118を介してローカルバス1105に接続される複数のマイクロプロセッサ1101、1102、1103、および1104を含む。公知のように、オペレーティングシステム1121は、コンピューティング環境において種々のユーザ、プロセッサ、およびデバイスのためにファイルを管理し、リソースを割り当てるための全体のコンピューティング環境のためのユーザ−ハードウエアインターフェイスの基礎を提供する。概念的目的のために、バス1122と共にオペレーティングシステム1121が示される。オペレーティングシステムへの参照は、Abraham SilberschatzおよびJames L.Petersonによる、OPERATING SYSTEM CONCEPTS(1998)およびWilliam Stallings,MODERN OPERATING SYSTEMS(1996)において為され得、これらを本明細書中で参考として援用する。
【0447】
一実施形態では、ワークステーション1100は、UltraSPARC IIプロセッサを使用するSun Microsystems Entrerprise 450システムである。ローカルバスを介するメモリアクセスの代わりに、Sun450システムにより、マルチプロセッサは、クロスバースイッチによってメモリへの専用バスを介してメモリへのアクセスを可能にする。従って、複数のプロセスが各命令を実行する複数のマイクロプロセッサを用いて実行し、そしてローカルバスに向かうことなくメモリにアクセスし得る。Sun UltraSPARCマルチプロセッサ仕様を有するSun450システムが本明細書中で参考として援用される。Sun Ultra60システムは、マイクロプロセッサシステムの別の例であるが、このシステムは2つのプロセッサのみを可能にする。
【0448】
スケジューラ1117は、デバイスドライバ1119および接続/パス1120を介して再構成可能なハードウエアユニット20への時分割アクセスを提供する。スケジューラ1117は、シミュレーションジョブ割り込みおよびシミュレーションセッションをスワップイン/スワップアウトすることによって、ホストコンピューティングシステムのオペレーティングシステムとインタラクトするソフトウエアにおいてほとんど実現され、シミュレーションサーバとインタラクトするハードウエアにおいて部分的に実現される。スケジューラ1117およびデバイス1119は、以下でより詳細に説明される。
【0449】
各マイクロプロセッサ1101〜1104は、ワークステーション1101における他のマイクロプロセッサを独立して処理することを可能にする。本発明の一実施形態では、ワークステーション1100は、UNIX(登録商標)ベースのオペレーティングシステムによって動作するが、他の実施形態では、ワークステーション1100は、Windows(登録商標)ベースのオペレーティングシステムまたはMacintoshベースのオペレーティングシステムによって動作し得る。UNIX(登録商標)ベースのシステムに対して、プログラム、タスク、およびファイルを必要に応じて管理するためのX−WIndow(R)をユーザインターフェイスが備える。UNIX(登録商標)オペレーティングシステムに関する詳細に対して、参照がMaurice J.Bach,THE DESIGN OF THE UNIX(登録商標) OPERATING SYSTEM(1986)によって為される。
【0450】
図45では、複数のユーザがリモート端末を介してワークステーション1100にアクセスし得る。この時点で、各ユーザは特定のCPUを用いてそのプロセスを実行し得る。他の時点では、各ユーザは、リソース制限に応じて異なるCPUを使用する。通常、オペレーティングシステム1121は、このようなアクセスを決定し、実際、オペレーティングシステム自体は、あるCPUから別のCPUにジャンプし、このタスクを達成し得る。時分割プロセスを処理することに対して、スケジューラはネットワークに注意を払い、ソケットシステム呼び出しによってリクエストし、オペレーティングシステム1121へのシステム呼び出しを行い、次に、デバイスドライバ1119による割り込み信号の生成を開始することによって再構成可能なハードウエアユニット20への割り込みを処理する。このような割り込み信号生成は、現在のジョブを停止し、現在割り込まれたジョブに対する状態情報を保存し、ジョブをスワップし、新しいジョブを実行することを含むスケジューリングアルゴリズムにおいて多くのステップの内の1つである。サーバスケジューリングアルゴリズムは、以下に説明される。
【0451】
ソケットおよびソケットシステム呼び出しがここで簡単に説明される。一実施形態において、UNIX(登録商標)オペレーティングシステムは、時分割モードで動作し得る。UNIX(登録商標)カーネルは、CPUをあるプロセス期間(例えばタイムスライス)に割り当て、タイムスライスの終了時に、このプロセスに割り込み、次のタイムスライスに対して別のプロセスをスケジューリングする。以前のタイムスライスから割り込まれたプロセスは、以後のタイムスライスにおける実行に対して再スケジューリングされる。
【0452】
内部プロセス通信を可能、かつ、容易にし、高度なネットワークプロトコルの使用を可能にする1つのスキームは、ソケットである。カーネルはクライアントサーバモデルの点で機能する3つの層を有する。これらの3つの層は、ソケット層、プロトコル層、およびデバイス層を含む。上部層すなわちソケット層は、システム呼び出しと下部層(プロトコル層およびデバイス層)との間のインターフェイスを提供する。典型的には、ソケットはクライアントプロセスとサーバプロセスとを結合するエンドポイントを有する。このソケットのエンドポイントは異なるマシンを有し得る。中間層(プロトコル層)は、TCPおよびIP等の通信のためのプロトコルモジュールを提供する。下部層(デバイス層)は、ネットワークデバイスを制御するデバイスドライバを含む。デバイスドライバの一例は、イーサネット(登録商標)ベースのネットワークを介したイーサネット(登録商標)ドライバである。
【0453】
プロセスは、クライアント−サーバモデルを用いて通信する。ここで、サーバプロセスは、一方のエンドポイントにおいて、ソケットに注意を払い、サーバプロセスに対して、クライアントプロセスは、双方向通信経路の他方のエンドポイントにおいて、他のソケットを介して注意を払う。カーネルは、各クライアントおよびサーバの3層の間で、相互接続を維持し、必要に応じてクライアントからサーバにデータをルーティングする。
【0454】
ソケットは、通信経路のエンドポイントを確立するソケットシステム呼び出しを含むいくつかのシステム呼び出しを含む。多くのプロセスは、ソケット記述子sdを、多くのシステム呼び出しにおいて用いる。結合システム呼び出しは、名前をソケット記述子と関連付ける。いくつかの他の例示的なシステム呼び出しには、カーネルがソケットへの接続を行うことを要求する接続システム呼び出し、ソケットを閉じる閉鎖システム呼び出し、ソケット接続を閉じる停止システム呼び出し、接続されたソケットでデータを送信する送信および受信システム呼び出しが含まれる。
【0455】
図46は、複数のワークステーションが、ネットワークにわたって、時分割ベースで単一のシミュレーションシステムを共有する、本発明による他の実施形態を示す図である。複数のワークステーションは、スケジューラ1117を介してシミュレーションシステムに結合されている。シミュレーションシステムの計算環境において、単一CPU11は、ステーション1110内のローカルバス12に結合されている。また、複数のCPUがこのシステムにおいて提供され得る。当業者にとって公知であるように、オペレーティングシステム1118も提供され、殆ど全てのプロセスおよびアプリケーションは、オペレーティングシステム上にある。概念的な目的のため、バス1122とともにオペレーティングシステム1121が示される。
【0456】
図46において、ワークステーション1110は、図1において、オペレーティングシステム1121を介してローカルバス12に結合されるスケジューラ1117およびスケジューラバス1118とともに示されるコンポーネント/装置を含む。スケジューラ1117は、オペレーティングシステム1121へのソケット呼び出しを作成することによって、ユーザステーション1111、1112、および1113の時分割アクセスを制御する。スケジューラ1117は、多くは、ソフトウェアにおいて、部分的には、ハードウェアにおいて、インプリメントされる。
【0457】
この図には、3つのユーザのみが示され、ネットワークにわたってシミュレーションシステムにアクセスすることができる。当然、他のシステム構成は、3つより多いユーザまたは3つ未満のユーザに備える。各ユーザは、遠隔ステーション1111、1112、または1113を介してシステムにアクセスする。遠隔ユーザステーション1111、1112、および1113は、それぞれ、ネットワーク接続1114、1115および1116を介してスケジューラ1117に結合される。
【0458】
当業者にとって公知であるように、デバイスドライバ1119は、PCIバス50と再構成可能ハードウェア装置20との間に結合される。接続または導電経路1120は、デバイスドライバ1119と再構成可能ハードウェア装置20との間に提供される。本発明のこのネットワークマルチユーザ実施形態において、スケジューラ1117は、デバイスドライバ1119と、ハードウェア技術復元の目的のため、ハードウェアの促進およびシミュレーション用の再構成可能ハードウェア装置20と通信し、制御するように、オペレーティングシステム1121を介してインターフェースで連結する。
【0459】
再度、ある実施形態において、シミュレーションワークステーション1100は、UltraSPARC IIマルチプロセッサを用いる、Sun Microsystems Enterprise 450 systemである。ローカルバスを介するメモリアクセスの代わりに、Sun 450 systemは、マルチプロセッサが、ローカルバスを拘束する代わりに、クロスバースイッチを介して、メモリ専用バスでメモリにアクセスすることを可能にする。
【0460】
図47は、本発明のネットワーク実施形態による、シミュレーションサーバの高レベルな構造を示す図である。ここで、オペレーティングシステムは、明示されていないが、当業者にとって公知であるように、オペレーティングシステムは、シミュレーション計算環境における様々なユーザ、プロセス、およびデバイスの役に立つように、ファイル管理およびリソース割り当てのためには、常に存在する。シミュレーションサーバ1130は、スケジューラ1137、1つ以上のデバイスドライバ1138、および再構成可能ハードウェア装置1139を含む。図45および46においては、単一集積装置として明示されていないが、シミュレーションサーバは、スケジューラ1117、デバイスドライバ1119、および再構成可能ハードウェア装置20を含む。図47に戻ると、シミュレーションサーバ1130は、ネットワーク接続/経路1134、1135、および1136をそれぞれ介して、3つのワークステーション(または、ユーザ)1131、1132、および1133に結合される。上述したように、3つより多いワークステーションまたは3つ未満のワークステーションは、シミュレーションサーバ1130に結合され得る。
【0461】
シミュレーションサーバにおけるスケジューラは、プリエンプティブラウンドロビンアルゴリズムに基づく。本質的には、ラウンドロビン方式は、いくつかのユーザまたはプロセスが、連続的に実行して、周期的実行を完了することを可能にする。従って、各シミュレーションジョブ(ネットワーク環境においてワークステーションに関連するか、またはマルチプロセス非ネットワーク環境においてユーザ/プロセスに関連するジョブ)は、優先度レベルおよび実行される固定のタイムスライスが割り当てられる。
【0462】
概して、より優先度が高いジョブは、完了するために最初に実行される。一方の極端な例では、異なるユーザがそれぞれ異なる優先度を有する場合、まず、最も優先度が高いユーザに対して、このユーザのジョブが完了するまで役目を果たし、最も優先度が低いユーザに対しては、最後に役目を果たす。ここでは、各ユーザの優先度が異なり、スケジューラは、優先度に従って役目を果たすに過ぎないため、タイムスライスが用いられない。このシナリオは、完了するまでシミュレーションシステムにアクセスするユーザが1つしかない場合に類似する。
【0463】
他方の極端な例では、異なるユーザが等しい優先度を有する。従って、先入れ先出し(FIFO)キューを有するタイムスライスの概念が採用される。優先度が等しいジョブの間で、各ジョブは、ジョブが完了するか、または、固定タイムスライスが終わるか、いずれかが先に来るまで実行される。ジョブが、タイムスライスの間、完了するまで実行されない場合、完了したタスクに関連するシミュレーションイメージは、後で復元され、実行されるために保存される必要がある。その後、このジョブは、キューの最後に位置付けられる。次のジョブについて、保存されたシミュレーションイメージが存在する場合には、次のタイムスライスにおいて復元され、実行される。
【0464】
優先度が高いジョブは、優先度がより低いジョブよりも優先され得る。すなわち、優先度が等しいジョブは、タイムスライスを介して実行され、完了するまで、ランドロビン様式で実行される。その後、より優先度が低いジョブが、ラウンドロビン様式で実行される。より優先度が低いジョブが実行されている間に、より優先度が高いジョブがキューに挿入される場合、より優先度が高いジョブが実行され、完了するまで、より優先度が低いジョブよりも優先される。従って、より優先度が高いジョブを実行して、より優先度が低いジョブが実行され始める前に、完了する。優先度が低いジョブが既に実行され始めている場合、優先度が低いジョブは、優先度が高いジョブが実行され、完了するまで、さらに、完了するまで実行されない。
【0465】
一実施形態において、UNIX(登録商標)オペレーティングシステムは、基本的、且つ、基礎的なプリエンプティブラウンドロビンスケジューリングアルゴリズムを提供する。本発明の一実施形態による、シミュレーションサーバのスケジューリングアルゴリズムは、オペレーティングシステムのスケジューリングアルゴリズムと共に機能する。UNIX(登録商標)を用いるシステムにおいて、スケジューリングアルゴリズムのプリエンプティブな性質は、オペレーティングシステムにユーザ定義スケジュールを優先することを提供する。時分割方式を可能にするため、シミュレーションスケジューラは、オペレーティングシステム自体のスケジューリングアルゴリズムの上でプリエンプティブ複数優先度ラウンドロビンアルゴリズムを用いる。
【0466】
本発明の一実施形態による、複数ユーザとシミュレーションサーバとの間の関係は、複数ユーザがクライアントであり、シミュレーションサーバがサーバである場合のクライアント−サーバモデルに従う。ユーザクライアントとサーバとの間の通信は、ソケット呼び出しを介して発生する。簡略的に図55を参照すると、
クライアントは、クライアントプログラム1109、ソケットシステム呼び出しコンポーネント1123、UNIX(登録商標)カーネル1124、およびTCP/IPプロトコルコンポーネント1125を含む。サーバは、TCP/IPプロトコルコンポーネント1126、UNIX(登録商標)カーネル1127、ソケットシステム呼び出しコンポーネント1128、およびシミュレーションサーバ1129を含む。複数クライアントは、シミュレーションジョブが、クライアントアプリケーションプログラムから、UNIX(登録商標)ソケット呼び出しを介して、サーバにおいてシミュレーションされるようにリクエストし得る。
【0467】
一実施形態において、典型的なイベントのシーケンスには、複数クライアントが、UNIX(登録商標)ソケットプロトコルを介してサーバーにリクエストを送信することが含まれる。各リクエストについて、サーバは、コマンドが首尾良く実施されたか否かについてのリクエストを受け取ったことを通知する。しかし、サーバキューステータスのリクエストについては、サーバが、ユーザに適切に表示し得るように、現在のキュー状態で応答する。以下の表Fに、クライアントからの関係するソケット命令を挙げる。
【0468】
【表8】
【0469】
各ソケット呼び出しにおいて、整数で暗号化された各コマンドには、さらなるパラメータ、例えば、設計名を表す<設計>が続き得る。シミュレーションサーバからの応答は、コマンドが首尾良く実行される場合は、「0」であり、コマンドが失敗する場合は、「1」である。キューステータスをリクエストするコマンド「5」について、コマンドの返答のうちの一実施形態は、「\0」というユーザのスクリーンに表示される文字で終了するASCIIテキストである。これらのシステムソケット呼び出しを用いて、適切な通信プロトコル信号が、デバイスドライバを介して、再構成可能なハードウェア装置に送信され、再構成可能なハードウェア装置から受信される。
【0470】
図48は、本発明による、シミュレーションサーバのアーキテクチャの一実施形態である。上述したように、複数ユーザまたは複数プロセスに対して、ユーザの設計のシミュレーションおよびハードウェア促進について、時分割様式で、単一シミュレーションサーバが役目を果たし得る。従って、ユーザ/プロセス1147、1148、および1149は、それぞれ、プロセス間通信経路1150、1151、および1152を介して、シミュレーションサーバ1140に結合される。プロセス間通信経路1150、1151、および1152は、マルチプロセッサ設定および動作と同じワークステーションか、または、複数ワークステーション用のネットワークにあり得る。各シミュレーションセッションは、再構成可能なハードウェア装置を有する通信用のハードウェア状態と共に、ソフトウェアシミュレーション状態を含む。ソフトウェアセッションの間のプロセス間通信は、シミュレータープラグインカードがインストールされる同じワークステーション、または、TCP/IPネットワークを介して接続される別のワークステーションにあるシミュレーションセッションを有する能力を提供する、UNIX(登録商標)ソケット、またはシステム呼び出しを用いて行われる。シミュレーションサーバとの通信は、自動的に開始される。
【0471】
図48において、シミュレーションサーバ1140は、サーバモニタ1141、シミュレーションジョブキューテーブル1142、優先度分類器1143、ジョブスワップ器1144、デバイスドライバ(単数または複数)1145、および再構成可能ハードウェア装置1146を含む。シミュレーションジョブキューテーブル1142、優先度分類器1143、およびジョブスワップ器1144は、図47に示すスケジューラ1137を構成する。
【0472】
サーバモニタ1141は、システムの管理者にユーザインターフェース機能を提供する。ユーザは、キューにおけるシミュレーションジョブ、スケジューリング優先度、使用履歴、およびシミュレーションジョブスワップ効率を表示するようにシステムに命令することによって、シミュレーションサーバのステータスをモニタし得る。他のユティリティ機能には、ジョブ優先度の編集、シミュレーションジョブの削除、およびシミュレーションサーバ状態のリセットが含まれる。
【0473】
シミュレーションジョブキューテーブル1142は、スケジューラによって挿入されるキューにおける処理中の全ての突出したシミュレーションリクエストのリストを保持する。テーブル項目には、ジョブの数、ソフトウェアシミュレーションの数、ソフトウェアシミュレーションイメージ、ハードウェアシミュレーションイメージファイル、設計構成ファイル、優先度の数、ハードウェアサイズ、ソフトウェアサイズ、シミュレーション実行の累積時間、および所要者識別が含まれる。ジョブキューは、先入れ先出し(FIFO)キューを用いて実現される。従って、新しいジョブがリクエストされると、キューの最後に置かれる。
【0474】
優先度分類器1143は、キューにおけるいずれのシミュレーションジョブが実行されるかを決定する。一実施形態において、シミュレーションジョブ優先度方式は、ユーザにより定義可能(すなわち、システム管理者によって制御可能、且つ定義可能)であり、いずれのシミュレーションプロセスが、現在の実行について優先度を有するか制御する。一実施形態において、優先度レベルは、特定のプロセスまたは特定のユーザの重要度に基づいて、固定される。他の実施形態において、優先度レベルは動的であり、シミュレーション中に変更され得る。好適な実施形態において、優先度は、ユーザIDに基づく。典型的には、1人のユーザの優先度が高く、他の全てのユーザの優先度は、低いが等しい。
【0475】
優先度レベルは、システム管理者によって設定可能である。シミュレータサーバは、全てのユーザ情報を、典型的には、「/etc/passwd」と呼ばれる、UNIX(登録商標)ユーザファイルにおいて見出される、UNIX(登録商標)設備から入手する。新たなユーザを追加することは、新たなユーザをUNIX(登録商標)システム内に追加するプロセスと整合する。全てのユーザを定義した後、シミュレータサーバモニタは、ユーザの優先度レベルを調節するために用いられ得る。
【0476】
ジョブスワップ器1144は、一時的に、スケジューラに関してプログラムされた優先度決定に基づいて、あるプロセスまたはあるワークステーションに関連する、あるシミュレーションジョブを、他のプロセスまたはワークステーションに関連する、他のシミュレーションジョブと取り換える。複数のユーザが、同じ設計をシミュレートする場合、ジョブスワップ器は、シミュレーションセッションについて、格納されたシミュレーション状態のみを取り換える。しかし、複数ユーザが複数の設計をシミュレートする場合、ジョブスワップ器が、シミュレーション状態において交換される前に、ハードウェア設定用の設計をロードする。一実施形態において、ジョブ交換は、再構成可能ハードウェア装置アクセスについてのみ行われる必要があるので、ジョブ交換メカニズムは、本発明の時分割実施形態の性能を向上させる。従って、1つのユーザが、ある程度の期間、ソフトウェアシミュレーションを必要とする場合、サーバは、他のユーザの他のジョブを交換して、この他のユーザが、ハードウェア促進用の再構成可能なハードウェア装置にアクセスし得るようにする。ジョブ交換の頻度は、ユーザによる調節およびプログラムが可能である。デバイスドライバは、ジョブを交換する、再構成可能なハードウェア装置と通信する。
【0477】
次に、シミュレーションサーバの動作を説明する。図49は、動作中のシミュレーションサーバのフローチャートである。初期的には、工程1160で、システムはアイドルである。システムが工程1160でアイドルである場合、シミュレーションサーバは、必ずしも、イナクティブであるわけではないし、シミュレーションタスクが実行していないわけでもない。実際には、アイドルとは、下記のうちの1つを意味する。(1)シミュレーションが実行されていない。(2)1つのユーザ/ワークステーションのみが、1つのプロセッサ環境においてアクティブであり、時分割が必要とされない。あるいは、(3)マルチプロセス環境において1つのユーザ/ワークステーションのみがアクティブであるが、1つのプロセスのみが実行されている。従って、上記の状態2および3は、シミュレーションサーバが、1つしか処理するジョブを有さず、従って、ジョブをキューに並べ、優先度を決定し、ジョブをスワップすることが、必要、且つ、本質的でないことを示し、シミュレーションサーバは、他のワークステーションまたはプロセスから、リクエスト(イベント1161)を受け取らないので、アイドルである。
【0478】
シミュレーションリクエストが、複数のユーザ環境のワークステーションから、または複数のプロセッサ環境のマイクロプロセッサからの1つ以上のリクエスト信号に起因して発生する場合、シミュレーションサーバは、工程1162で、入来するシミュレーションジョブ(単数または複数)をキューに並べる。スケジューラは、全ての処理中のシミュレーションリクエストをそのキューに挿入して、全ての処理中のシミュレーションリクエストをリストに挙げるように、シミュレーションジョブキューテーブルを保持する。バッチシミュレーションジョブについて、サーバにおけるスケジューラは、全ての入来シミュレーションリクエストをキューに並べ、人間の介入なしで、タスクを自動的に処理する。
【0479】
その後、シミュレーションサーバは、キューに並べられたジョブを分類して、工程1163において、優先度を決定する。この工程は、複数のジョブについて、再構成可能なハードウェア装置へのアクセスを提供するため、サーバがその間で優先順位を付ける必要がある場合、特に重要である。優先度分類器は、キューにおけるいずれのシミュレーションジョブが実行されるかを決定する。一実施形態において、シミュレーションジョブ優先度方式は、リソース競合が存在する場合、現在の実行について、いずれのシミュレーションプロセスが優先度を有するかを制御するように、ユーザにより定義可能(すなわち、システム管理者によって制御可能、且つ定義可能)である。
【0480】
工程1163における優先度の分類の後、サーバは、必要に応じて、工程1164において、シミュレーションジョブを交換する。この工程は、サーバにおいてスケジューラに関してプログラムされた優先度決定に基づいて、一時的に、あるプロセスまたはあるワークステーションに関連するあるシミュレーションジョブを、他のプロセスまたはワークステーションに関連する他のシミュレーションジョブと置き換える。複数のユーザが、同じ設計をシミュレートする場合、ジョブスワップ器は、シミュレーションセッションについて、格納されたシミュレーション状態のみを取り換える。しかし、複数のユーザが複数の設計をシミュレートする場合、ジョブスワップ器が、まず、シミュレーション状態において交換される前に、ハードウェア設定用の設計をロードする。ここで、デバイスドライバは、ジョブを交換するように、再構成可能なハードウェア装置とも通信する。
【0481】
一実施形態において、ジョブ交換は、再構成可能ハードウェア装置アクセスについてのみ行われる必要があるので、ジョブ交換メカニズムは、本発明の時分割実施形態の性能を向上させる。従って、1つのユーザが、ある程度の期間、ソフトウェアシミュレーションを必要とする場合、サーバは、他のユーザの他のジョブを交換して、この他のユーザが、ハードウェア促進用の再構成可能なハードウェア装置にアクセスし得るようにする。例えば、2つのユーザ、ユーザ1およびユーザ2が、再構成可能なハードウェア装置へのアクセス用のシミュレーションサーバに結合されているとする。あるときには、ユーザ1がシステムにアクセスするので、ユーザ1の設計について、デバッギングが行われ得る。ユーザ1がソフトウェアモードにおいてのみデバッギングする場合、サーバは、ユーザ2がアクセスできるように、再構成可能なハードウェア装置を解除し得る。サーバは、ユーザ2のジョブをスワップし、ユーザ2は、モデルのソフトウェアシミュレーション、または、ハードウェア促進のいずれかを行い得る。ユーザ1およびユーザ2の間の優先度に依存して、ユーザ2は、ある所定の期間の間、再構成可能なハードウェア装置へのアクセスを継続し得るか、または、ユーザ1が促進のため、再構成可能なハードウェア装置を必要とする場合には、サーバは、ユーザ2のジョブを優先させ得るので、ユーザ1のジョブは、再構成可能なハードウェア装置を用いて、ハードウェア促進についてスワップされ得る。所定の時間とは、同じ優先度の複数のリクストに基づいた、シミュレータジョブの優先権のことである。一実施形態において、デフォルトの時間は、5分であるが、この時間は、ユーザによって設定可能である。この5分の設定は、タイムアウトタイマの一形態を表す。本発明のシミュレーションシステムは、現在のシミュレーションジョブには非常に時間がかかり、他の保留中の等しい優先度のジョブが再構成可能なハードウェアモデルへのアクセスを得る必要があるとシステムが決定するので、タイムアウトタイマを用いて、現在のシミュレーションジョブの実行を停止する。
【0482】
工程1164においてジョブスワップ工程が完了する場合、サーバ内のデバイスドライバが、再構成可能なハードウェア装置をロックするので、現在スケジューリングされているユーザまたはプロセスのみが、シミュレートし、ハードウェアモデルを用いることができる。ロックおよびシミュレーション工程は、工程1165において発生する。
【0483】
イベント1166において、現在のシミュレーションセッションでのシミュレーションの完了または一時停止のいずれかが発生するとき、サーバは、優先度分類工程1163に戻って、保留中のシミュレーションジョブの優先度を決定し、必要に応じて、シミュレーションジョブをスワップする。同様に、サーバは、イベント1167において、サーバを優先度分類状態1163に戻すように、現在アクティブであるシミュレーションジョブの実行を優先させる。優先権は、ある特定の状況の下でのみ発生する。このような状態のうちの1つとして、より優先度が高いタスクまたはジョブが保留中である場合がある。他のこのような状態として、システムが計算集中シミュレーションタスクを現在実行している場合がある。この場合、スケジューラは、タイムアウトタイマを用いることによって、現在実行しているジョブを優先させて、優先度が等しいタスクまたはジョブをスケジューリングするようにプログラムされ得る。一実施形態において、タイムアウトタイマは、5分に設定され、現在のジョブが5分実行される場合、システムは、現在のジョブを優先させて、保留中のジョブを、優先度のレベルが同じであっても、スワップする。
【0484】
図50は、ジョブスワッププロセスのフローチャートである。ジョブスワップ機能は、図49の工程1164において行われ、図48のジョブスワップ器1144として、シミュレーションサーバハードウェア内に示される。図50において、シミュレーションジョブが他のシミュレーションジョブとスワップされる必要がある場合、ジョブスワップ器は、工程1180において、再構成可能なハードウェア装置に割り込みを送信する。再構成可能なハードウェア装置が、現在あらゆるジョブを実行していない(すなわち、システムがアイドルであるか、または、ユーザが、任意のハードウェア促進介入のみがないソフトウェアシミュレーションモードで操作している)場合、割り込みは、直ちに、再構成可能なハードウェア装置をジョブスワップに備えて準備する。しかし、再構成可能なハードウェア装置が、現在、ジョブを実行している場合、命令を実行しているか、または、データを処理している最中で、割り込み信号が認識されるが、再構成可能な装置は、現在保留中の命令の実行、および現在のジョブのデータの処理を継続する。現在のシミュレーションジョブが命令の実行またはデータの処理の最中でないときに、再構成可能なハードウェア装置が割り込み信号を受信する場合、割り込み信号は、直ちに、再構成可能なハードウェア装置の動作を実質的に終わらせる。
【0485】
工程1181において、シミュレーションシステムは、現在のシミュレーションイメージ(すなわち、ハードウェアおよびソフトウェア状態)を保存する。このイメージを保存することによって、ユーザは、後で、保存された時点までシミュレーション全体を再実行することなく、シミュレーション実行を復元し得る。
【0486】
工程1182において、シミュレーションシステムは、新たなユーザ設計を用いて、再構成可能なハードウェア装置を設定する。この設定工程は、新たなジョブが、設定済みであり、再構成可能なハードウェア装置にロードされた設計とは異なるユーザ設計と関連し、実行がちょうど割り込まれたところである場合にのみ必要である。設定後、保存されたハードウェアシミュレーションイメージは、工程1183において再ロードされ、保存されたソフトウェアシミュレーションイメージは、工程1184において再ロードされる。新たなシミュレーションジョブが同じ設計と関連する場合、さらなる設定は必要とされない。同じ設計について、シミュレーションシステムは、工程1183におけるその同じ設計の新たなシミュレーションジョブと関連する、所望のハードウェアシミュレーションイメージを、新たなジョブのシミュレーション設計が、ちょうど割り込まれたところのジョブのシミュレーションイメージとは恐らく異なるので、ロードする。設定工程の細部は、この特許明細書中で提供される。その後、関連するソフトウェアシミュレーションイメージは、工程1184において、再ロードされる。ハードウェアおよびソフトウェアシミュレーションイメージの再ロードの後、工程1185において、この新たなジョブについて、シミュレーションが開始し得、以前に割り込まれたジョブは、しばらくは、再構成可能なハードウェア装置へのアクセスがないので、ソフトウェアシミュレーションモードのみで進み得る。
【0487】
図51は、デバイスドライバと再構成可能なハードウェア装置との間の信号を示す図である。デバイスドライバ1171は、スケジューラ1170と再構成可能なハードウェア装置1172との間のインターフェースを提供する。また、デバイスドライバ1171は、図45および46に示すように、計算環境全体(すなわち、単数または複数のワークステーション、PCIバス、PCIデバイス)と、再構成可能なハードウェア装置1172との間のインターフェースを提供するが、図51には、シミュレーションサーバ部分のみを示す。デバイスドライバと再構成可能なハードウェア装置との間の信号には、双方向通信ハンドシェイク信号と、計算環境から、スケジューラを介して再構成可能なハードウェア装置へと送られる一方向設計構成情報と、スワップして用いられるシミュレーション状態情報と、スワップして用いられなくなったシミュレーション状態情報と、デバイスドライバから、再構成可能なハードウェア装置へと送られ、シミュレーションジョブがスワップされ得る割り込み信号とが含まれる。
【0488】
ライン1173は、双方向通信ハンドシェイク信号を搬送する。これらの信号およびハンドシェイクプロトコルは、図53および54を参照しながら、さらに説明される。
【0489】
ライン1174は、計算環境から、スケジューラ1170を介して、再構成可能なハードウェア装置1172へと一方向設計構成情報を搬送する。初期設定情報は、このライン1170上を、モデリングのために、再構成可能なハードウェア装置1172へと送信され得る。さらに、ユーザが異なるユーザ設計をモデリングおよびシミュレーションしている場合、設定情報は、タイムスライスの間、再構成可能なハードウェア装置1172へと送信される必要がある。異なるユーザが同じユーザ設計をモデリングする場合、新たな設計構成が必要ではなく、むしろ、同じ設計に関連する、異なるシミュレーションハードウェア状態が、異なるシミュレーション実行において、再構成可能なハードウェア装置1172へと送信される必要があり得る。
【0490】
ライン1175は、スワップされて用いられるシミュレーション状態情報を、再構成可能なハードウェア装置1172へと搬送する。ライン1176は、スワップされて用いられなくなったシミュレーション状態情報を、再構成可能なハードウェア装置から計算環境(すなわち、通常のメモリ)へと搬送する。スワップされて用いられるシミュレーション状態情報には、再構成可能なハードウェア装置1127を促進するために必要とされる、以前に保存されたハードウェアモデル状態情報、およびハードウェアメモリ状態が含まれる。スワップされて用いられる状態情報は、タイムスライスの開始において送信され、スケジューリングされた現在のユーザが、促進のため、再構成可能なハードウェア装置1172にアクセスし得る。スワップされて用いられなくなったシミュレーション状態情報には、再構成可能なハードウェア装置1172が割り込み信号を受信して、異なるユーザ/プロセスに関連する次のタイムスライスに移る際に、タイムスライスの終わりでメモリに保存される必要があるハードウェアモデルおよびメモリ状態情報が含まれる。状態情報の保存は、現在のユーザ/プロセスが、後で、例えば、この現在のユーザ/プロセスに割り当てられた次のタイムスライスにおいて、この状態を復元することを可能にする。
【0491】
ライン1177は、割り込み信号を、デバイスドライバ1171から、再構成可能なハードウェア装置に送信し、シミュレーションジョブがスワップされ得る。この割り込み信号は、タイムスライスとタイムスライスとの間に送信されて、現在のタイムスライスの現在のシミュレーションジョブがスワップされて用いられなくなり、新たなタイムスライス用の新たなシミュレーションジョブにスワップされる。
【0492】
次に、本発明の一実施形態による通信ハンドシェイクプロトコルは、図53および54を参照しながら説明される。図53に、デバイスドライバと、再構成可能なハードウェア装置との間の、ハンドシェイク論理インターフェースを介する通信ハンドシェイク信号を示す。図54に、通信プロトコルの状態図を示す。図51に、ライン1173上の通信ハンドシェイク信号を示す。図53は、デバイスドライバ1171と再構成可能なハードウェア装置1172との間の通信ハンドシェイク信号の詳細な図である。
【0493】
図53において、ハンドシェイク論理インターフェース1234が、再構成可能なハードウェア装置1172に設けられている。あるいは、ハンドシェイク論理インターフェース1234は、再構成可能なハードウェア装置1172の外部にインストールされ得る。4組の信号が、デバイスドライバ1171と、ハンドシェイク論理インターフェース1234との間に提供される。これらの信号は、ライン1230上の3ビットのSPACE信号であり、ライン1231上の1ビットの読み出し/書き込み信号であり、ライン1232上の4ビットのCOMMAND信号であり、ライン1233上の1ビットのDONE信号である。ハンドシェイク論理インターフェースは、これらの信号を処理して、再構成可能なハードウェア装置を、行われる必要がある様々な操作に適したモードにする論理回路を含む。インターフェースは、CTRL_FPGA装置(または、FPGA I/Oコントローラ)に結合される。
【0494】
3ビットのSPACE信号について、PCIバスを介する、シミュレーションシステムの計算環境と再構成可能なハードウェア装置との間のデータ転送は、ソフトウェア/ハードウェア境界における、ある特定のI/Oアドレススペース、すなわち、REG(レジスタ)、CLK(ソフトウェアクロック)、S2H(ソフトウェアからハードウェア)、およびH2S(ハードウェアからソフトウェア)用に指定される。上述したように、シミュレーションシステムは、ハードウェアモデルを、異なるコンポーネントのタイプおよび制御機能に従って、メインメモリ内の4つのアドレススペースにマッピングする。REGスペースは、レジスタコンポーネント用に指定される。CLKスペースは、ソフトウェアクロック用に指定される。S2Hスペースは、ハードウェアモデルへのソフトウェアテストベンチコンポーネントの出力用に指定される。H2Sスペースは、ソフトウェアテストベンチコンポーネントへのハードウェアモデルの出力用に指定される。これらの専用のI/Oバッファスペースは、システム初期化の間、カーネルのメインメモリスペースにマッピングされる。
【0495】
以下の表Gに、SPACE信号の各々の記述を提供する。
【0496】
【表9】
【0497】
ライン1231上の読み出し/書き込み信号は、データ転送が読み出しであるか、または書き込みであるかを示す。ライン1233上のDONE信号は、DMAデータ転送期間の完了を示す。
【0498】
4ビットのCOMMANDは、データ転送操作が、書き込みであるか、読み出しであるか、再構成可能なハードウェア装置への新たなユーザ設計の設定であるか、または、シミュレーションの割り込みであるかを示す。下記の表Hに示すように、COMMANDプロトコルは、以下の通りである。
【0499】
【表10】
【0500】
次に、図54上の状態を示す図を参照しながら、通信ハンドシェイクプロトコルが説明される。状態1400において、シミュレーションシステムは、デバイスドライバにおいてアイドルである。新たなコマンドが提示されない限り、システムは、経路1401によって示されるように、アイドルであり続ける。新たなコマンドが提示される場合、コマンドプロセッサは、状態1402において、新たなコマンドを処理する。一実施形態において、コマンドプロセッサは、FPGA I/Oコントローラである。
【0501】
COMMAND=0000、または、COMMAND=0001である場合、システムは、工程1403において、SPACEインデックスによって示されるように、指定されたスペースから読み出すか、または指定されたスペースに書き込む。COMMAND=0010である場合、システムは、ユーザ設計を用いて、再構成可能なハードウェア装置においてFPGAを初期的に設定するか、または、状態1404における新たなユーザ設計を用いて、FPGAを設定する。システムは、全てのFPGAのシステムの設定情報に順序を付けて、ハードウェアにモデリングされ得るユーザ設計の一部をモデリングする。しかし、COMMAND=0011である場合、システムは、状態1405において、再構成可能なハードウェア装置に割り込み、新たなシミュレーション状態において新たなユーザ/プロセスにスワップするようにタイムスライスがタイムアウトになるので、シミュレーションシステムに割り込む。これらの状態1403、1404、または1405の完了において、シミュレーションシステムは、DONE状態1406に進んで、DONE信号を生成し、その後、状態1400に戻って、新たなコマンドが提示されるまでアイドルになる。
【0502】
次に、優先度のレベルが異なる複数のジョブを処理する、シミュレーションサーバの時分割機能が記載される。図52に、一例を示す。4つのジョブ(ジョブA、ジョブB、ジョブC、ジョブD)は、シミュレーションジョブキューの入来ジョブである。しかし、これらの4つのジョブの優先度のレベルは異なる。すなわち、ジョブAおよびBには、高い優先度Iが割り当てられているが、ジョブCおよびDには、低い優先度IIが割り当てられる。図52の時系列チャートに示すように、時分割された再構成可能なハードウェア装置の使用は、キューに並べられた入来ジョブの優先度レベルに依存する。時間1190において、シミュレーションは、再構成可能ハードウェア装置へのアクセスを与えられるジョブAで開始する。時間1191において、ジョブAは、ジョブBがジョブAと同じ優先度を有するので、ジョブBに優先され、スケジューラは、2つのジョブに等しい時分割アクセスを提供する。ジョブBは、再構成可能なハードウェア装置へのアクセスを有する。時間1192において、ジョブAは、ジョブBに優先し、ジョブAは、時間1193において完了するまで実行される。時間1193において、ジョブBがとって代わり、時間1194まで、完了するまで実行される。時間1194において、キューにおいて隣接するが、ジョブAおよびBよりも優先度のレベルが低いジョブCは、ここで、実行のための再構成可能なハードウェア装置へのアクセスを有する。時間1195において、時分割アクセスにおいて、ジョブDが、ジョブCと優先度レベルが同じであるので、ジョブCに優先する。ジョブDは、ジョブCによって優先されるアクセスを時間1196まで有する。ジョブCは、時間1197で完了するまで実行される。その後、時間1197において、ジョブDがとって代わり、時間1198まで、完了するまで実行される。
【0503】
(VIII.メモリシミュレーション)
本発明のメモリシミュレーションまたはメモリマッピング局面は、シミュレーションシステムがユーザの設計の構成ハードウェアモデルに関連する種々のメモリブロックを管理するための有効な方法を提供する。その構成ハードウェアモデルは再構成可能なハードウェア部におけるFPGAのアレイ中へプログラミングされた。本発明の実施形態を実施することによって、メモリシミュレーションスキームは、メモリアクセスを処理するためのFPGAチップにおける専用ピンを全く必要としない。
【0504】
本明細書中で使用される用語「メモリアクセス」は、ユーザの設計が構成されるFPGA論理回路とユーザの設計に関連するすべてのメモリブロックを格納するSRAMメモリデバイスとの間の書き込みアクセスまたは読み出しアクセスのいずれかを示す。したがって、書き込み動作はFPGA論理デバイスからSRAMメモリデバイスへのデータ転送を含み、他方読み出し操作はSRAMメモリデバイスからFPGA論理デバイスへのデータ転送を含む。図56を参照する。FPGA論理デバイスは1201(FPGA1)、1202(FPGA3)、1203(FPGA0)、および1204(FPGA2)を含む。SRAMメモリはメモリデバイス1205および1206を含む。
【0505】
また、用語「DMAデータ転送」は、当業者間で共通な使用法に加えて、計算システムとシミュレーションシステムとの間のデータ転送を示す。計算システムは、図1、45、および46においてシミュレーションシステムをサポートするメモリを有するPCI系システム全体として示され、ソフトウェアおよび再構成可能ハードウェア部中に常駐する。選択されたデバイスドライバ、オペレーティングシステムへ/からのソケット/システムコールはまた、オペレーティングシステムおよび再構成可能ハードウェア部と適切なインタフェースを可能にするシミュレーションシステムの一部である。本発明の1実施形態において、DMA読み出し転送は、FPGA論理デバイス(および初期化およびメモリ内容ダンプのためのFPGA SRAMメモリデバイス)からホスト計算システムへのデータの転送を含む。DMA書き込み転送は、ホスト計算システムからFPGA論理デバイス(および初期化およびメモリ内容ダンプのためのFPGA SRAMメモリデバイス)へのデータの転送を含む。
【0506】
用語「FPGAデータバス」、「FPGAバス」、「FDバス」およびそれらの変形は、デバッグされるべき構成およびプログラムされたユーザの設計を含むFPGA論理デバイスとSRAMメモリデバイスとを結合する高バンクバスFD[63:32]および低バンクバスFD[31:0]を示す。
【0507】
メモリシミュレーションシステムは、以下を制御しかつ以下とインタフェースをとるためのメモリ状態マシン、評価状態マシン、およびそれらに関連の論理を含む:(1)主計算システムおよびその関連のメモリシステム、(2)シミュレーションシステムにおけるFPGAに結合されたSRAMメモリ、および(3)デバッグにおける構成およびプログラムされたユーザの設計を含むFPGA論理デバイス。
【0508】
メモリシミュレーションシステムのFPGA論理デバイス側は、以下を処理するためにユーザの設計においてユーザの所有するメモリインタフェースとインタフェースをとるための各メモリブロックNごとに評価状態マシン、FPGAバスドライバ、および論理インタフェースを含む:(1)FPGA論理デバイス間のデータ評価、および(2)FPGA論理デバイスとSRAMメモリデバイスとの間の書き込み/読み出しメモリアクセス。FPGA論理デバイス側と併用して、FPGA I/Oコントローラ側は、以下の間のDMA、書き込み、および読み出し動作を処理するためのメモリ状態マシンおよびインタフェース論理を含む:(1)主計算システムとSRAMメモリデバイス、および(2)FPGA論理デバイスとSRAMメモリデバイス。
【0509】
本発明の1実施形態にしたがうメモリシミュレーションシステムの動作は一般に以下のとおりである。シミュレーション書き込み/読み出しサイクルは3つの期間に分割される−DMAデータ転送、評価、およびメモリアクセス。DATAXSFR信号はDMAデータ転送期間の発生を示す。DMAデータ転送期間では、計算システムおよびSRAMメモリ部がFPGAデータバス(高バンクバス(FD[63:32])1212および低バンクバス(FD[31:0])1213を介して互いにデータを転送している。
【0510】
評価期間中は、各FPGA論理デバイスにおける論理回路はデータ評価のためのユーザの設計論理への適切なソフトウェアクロック、入力イネーブル、およびマルチプレクサイネーブル信号を生成する。FPGA論理デバイス間通信はこの期間中に発生する。
【0511】
メモリアクセス期間中は、メモリシミュレーションシステムは高および低バンクFPGA論理デバイスがそれぞれのアドレスおよび制御信号をそれぞれのFPGAデータバスへ載せるのを待つ。これらのアドレスおよび制御信号はCTRL_FPGA部によってラッチインされる。動作が書き込みであれば、アドレス、制御、およびデータ信号がFPGA論理デバイスからそれぞれのSRAMメモリデバイスへ転送される。動作が読み出しであれば、アドレスおよび制御信号が指定のSRAMメモリデバイスへ提供され、かつデータ信号がSRAMメモリデバイスからそれぞれのFPGA論理デバイスへ転送される。すべてのFPGA論理デバイスにおけるすべての所望のメモリブロックがアクセスされた後で、メモリシミュレーション書き込み/読み出しサイクルが完了し、そしてメモリシミュレーションシステムは次のメモリシミュレーション書き込み/読み出しサイクルの開始までアイドル状態である。
【0512】
図56は、本発明の1実施形態にしたがうメモリシミュレーション構成の高レベルブロック図である。本発明のメモリシミュレーション局面に関連しない信号、接続、およびバスは図示されない。上記のCTRL_FPGA部1200は、バス1210にライン1209を介して結合される。1実施形態において、CTRL_FPGA部1200はAltera10K50チップなどのFPGAチップの形態であるプログラム可能論理デバイス(PLD)である。ローカルバス1210は、CTRL_FPGA部1200が(あれば)他のシミュレーションアレイボードおよび他のチップ(例えば、PCIコントローラ、EEPROM、クロックバッファ)に結合されるのを可能にする。ライン1209は、シミュレーションDMAデータ転送期間の完了を示すDONE信号を伝送する。
【0513】
図56は、論理デバイスおよびメモリデバイスの形態の他の主要な機能ブロックを示す。1実施形態において、論理デバイスはAltera10K130または10K250チップなどのFPGAチップの形態であるプログラム可能論理デバイス(PLD)である。したがって、アレイ中に8つのAlteraFLEX10K100チップを有する上記実施形態の代わりに、この実施形態はAlteraのFLEX10K130のチップ4つだけ使用する。メモリデバイスは、Cypress 128Kx32 CY7C1335またはCY7C1336チップなどの同期パイプライン化キャッシュSRAMである。論理デバイスは、1201(FPGA1)、1202(FPGA3)、1203(FPGA0)、および1204(FPGA2)を含む。SRAMチップは、低バンクメモリデバイス1205(L_SRAM)および高バンクメモリデバイス1206(H_SRAM)を含む。
【0514】
これらの論理デバイスおよびメモリデバイスは、CTRL_FPGA部1200に高バンクバス1212(FD[63:32])および低バンクバス(FD[31:0])を介して結合される。論理デバイス1201(FPGA1)および1202(FPGA3)は、高バンクバス1212にそれぞれバス1223およびバス1225を介して結合され、他方論理デバイス1203(FPGA0)および1204(FPGA2)は、低バンクデータバス1213にそれぞれバス1224およびバス1226を介して結合される。高バンクメモリデバイス1206は高バンクバス1212にバス1220を介して結合され、他方低バンクメモリデバイス1205は低バンクバス1213にバス1219を介して結合される。デュアルバンクバス構造は、シミュレーションシステムが高バンク上のデバイスおよび低バンク上のデバイスに並列に改善されたスループットレートでアクセスすることを可能にする。デュアルバンクデータバス構造は、シミュレーション書き込み/読み出しサイクルが制御され得るように制御およびアクセス信号などの他の信号をサポートする。
【0515】
図61を簡単に参照しておくと、各シミュレーション書き込み/読み出しサイクルは、DMAデータ転送期間、評価期間、およびメモリアクセス期間を含む。種々の制御信号の組み合わせはシミュレーションシステムがある期間中にあって他ではないかどうかを制御しかつ示す。再構成可能ハードウェア部におけるホストコンピュータシステムと論理デバイス1201〜1204との間のDMAデータ転送はPCIバス(例えば、図46のバス50)、ローカルバス1210および1236、ならびにFPGAバス1212(FD[63:32])およびFPGAバス1213(FD[31:0])を介して発生する。メモリデバイス1205および1206は、初期化およびメモリ内容ダンプのためのDMAデータ転送に関与する。再構成可能ハードウェア部における論理デバイス1201〜1204間の評価データ転送は、相互接続(前出)ならびにFPGAバス1212(FD[63:32])およびFPGAバス1213(FD[31:0])を介して発生する。論理デバイス1201〜1204とメモリデバイス1205および1206との間のメモリアクセスは、FPGAバス1212(FD[63:32])およびFPGAバス1213(FD[31:0])を介して発生する。
【0516】
図56を再度参照する。CTRL_FPGA部1200は、多くの制御およびアドレス信号を提供および受信してシミュレーション書き込み/読み出しサイクルを制御する。CTRL_FPGA部1200は、ライン1211上のDATAXSFRおよびEVAL信号を、それぞれライン1221を介して論理デバイス1201および1203へ、それぞれライン1222を介して論理デバイス1202および1204へ提供する。CTRL_FPGA部1200はまた、メモリアドレス信号MA[18:2]を低バンクメモリデバイス1205および高バンクメモリデバイス1206にそれぞれバス1229および1214を介して提供する。これらのメモリデバイスのモードを制御するために、CTRL_FPGA部1200はチップ選択書き込み(および読み出し)信号を低バンクメモリデバイス1205および高バンクメモリデバイス1206にそれぞれライン1216および1215を介して提供する。DMAデータ転送の完了を示すために、メモリシミュレーションシステムはライン1209上のDONE信号をCTRL_FPGA部1200および計算システムに送信および受信し得る。
【0517】
図9、11、12、14、および15を参照して上記したように、論理デバイス1201〜1204は、特に、2セットのSIFTIN/SHIFTOUTライン−ライン1207、1227、および1218、ならびにライン1208、1228、および1217によって図56に表される多重化クロスチップアドレスポインタチェーンによってまとめて接続される。これらのセットはチェーンの開始時にライン1207および1208におけるVccによって初期化される。SHIFTIN信号は、バンクにおける前段のFPGA論理デバイスから送信され、現在のFPGA論理デバイスのためのメモリアクセスを開始する。所定セットのチェーンを介するシフトの完了時に、最後の論理デバイスはLAST信号(すなわち、LASTLまたはLASTH)をCTRL_FPGA部1200へ生成する。高バンクに対して、論理デバイス1202はライン1218上のLASTHシフトアウト信号をCTRL_FPGA部1200へ生成し、かつ低バンクに対して、論理デバイス1204はライン1217上のLASTL信号をCTRL_FPGA部1200へ生成する。
【0518】
ボード実装および図56に関して、本発明の1実施形態は構成要素(例えば、論理デバイス1201〜1204、メモリデバイス1205〜1206、およびCTRL_FPGA部1200)およびバス(例えば、FPGAバス1212〜1213およびローカルバス1210)を1ボード中に内蔵する。この1ボードはマザーボードにマザーボードコネクタを介して結合される。したがって、1ボード中に、4つの論理デバイス(各バンク中に2つ)、2つのメモリデバイス(各バンク中に1つ)、およびバスが提供される。第2ボードは、その補完として論理デバイス(通常4つ)、メモリデバイス(通常2つ)、FPGA I/Oコントローラ(CTRL_FPGA部)およびバスを含み得る。しかし、PCIコントローラは第1のボードのみに設置され得る。ボード間コネクタは、上記のように、ボード間に提供され、すべてのボードにおける論理デバイスがまとめて接続され、そして評価期間中に互いに通信し、かつローカルバスがすべてのボードにわたって提供されるようにする。FPGAバスFD[63:0]は、各ボード中のみに提供され、複数のボードにわたっては提供されない。
【0519】
このボード構成において、シミュレーションシステムは各ボードにおける論理デバイスとメモリデバイスとの間のメモリマッピングを実行する。異なるボードにわたるメモリマッピングは提供されない。したがって、ボード5における論理デバイスはメモリブロックをボード5中のみのメモリデバイスにマッピングし、他のボード上のメモリデバイスにはマッピングしない。しかし、他の実施形態において、シミュレーションシステムは、メモリブロックを1ボード上の論理デバイスから別のボード上のメモリデバイスへマッピングする。
【0520】
本発明の1実施形態のメモリシミュレーションシステムの動作は一般に以下のとおりである。シミュレーション書き込み/読み出しサイクルは3つの期間に分割される−DMAデータ転送、評価、およびメモリアクセス。シミュレーション書き込み/読み出しサイクルの完了を示すために、メモリシミュレーションシステムはライン1209上のDONE信号をCTRL_FPGA部1200および計算システムに対して送信および受信し得る。バス1211上のDATAXSFR信号はDMAデータ転送期間の発生を示す。DMAデータ転送期間において、計算システムおよびFPGA論理デバイス1201〜1204は、FPGAデータバス、高バンクバス(FD[63:32])1212および低バンクバス(FD[31:0])1213を介して互いにデータを転送している。一般に、DMA転送はホスト計算システムとFPGA論理デバイスとの間で発生する。初期化およびメモリ内容ダンプのために、DMA転送はホスト計算システムとSRAMメモリデバイス1205および1206との間で発生する。
【0521】
評価期間中に、各FPGA論理デバイス1201〜1204における論理回路はデータ評価のためにユーザの設計論理への適切なソフトウェアクロック、入力イネーブル、およびマルチプレクサイネーブル信号を生成する。FPGA論理デバイス間通信はこの期間中に発生する。CTRL_FPGA部1200はまた、評価カウンタを開始して評価期間の持続時間を制御する。カウントの数、およびしたがって評価期間の持続時間は、信号の最長の経路を決定することによってシステムにより設定される。経路長は、特定のステップ数と関連する。システムは、ステップ情報を使用し、そして評価サイクルを実行して完了させるのに必要なカウント数を計算する。
【0522】
メモリアクセス期間中は、メモリシミュレーションシステムは高および低バンクFPGA論理デバイス1201〜1204がそれぞれのアドレスおよび制御信号をそれぞれのFPGAデータバスへ載せるのを待つ。これらのアドレスおよび制御信号はCTRL_FPGA部1200によってラッチインされる。動作が書き込みであれば、アドレス、制御、およびデータ信号がFPGA論理デバイス1201〜1204からそれぞれのSRAMメモリデバイス1205および1206へ転送される。動作が読み出しであれば、アドレスおよび制御信号がFPGA論理デバイス1201〜1204からそれぞれのSRAMメモリデバイス1205および1206へ転送され、かつデータ信号はSRAMメモリデバイス1205および1206からそれぞれのFPGA論理デバイス1201〜1204へ転送される。FPGA論理デバイス側では、FDバスドライバがメモリブロックのアドレスおよび制御信号をFPGAデータバス(FDバス)へ載せる。動作が書き込みであれば、書き込みデータがそのメモリブロックのためのFDバスへ載せられる。動作が読み出しであれば、ダブルバッファがSRAMメモリデバイスからのFDバス上のメモリブロックのためのデータをラッチインする。この動作は、各FPGA論理デバイスにおける各メモリブロックに対して一度に1メモリブロックずつ順番に続けられる。FPGA論理デバイスにおけるすべての所望のメモリブロックがアクセスされた後で、メモリシミュレーションシステムは各バンクにおける次のFPGA論理デバイスに進み、そしてそのFPGA論理デバイスにおけるメモリブロックのアクセスを開始する。すべてのFPGA論理デバイス1201〜1204におけるすべての所望のメモリブロックがアクセスされた後で、メモリシミュレーション書き込み/読み出しサイクルが完了し、そしてメモリシミュレーションシステムは次のメモリシミュレーション書き込み/読み出しサイクルの開始までアイドル状態である。
【0523】
図57は、本発明のメモリシミュレーション局面のより詳細なブロック図を示し、CTRL_FPGA1200およびメモリシミュレーションに関連する各論理デバイスのより詳細な構成図を含む。図57は、CTRL_FPGA1200および論理デバイス1203の一部(他の論理デバイス1201、1202、および1204の一部と構造が類似する)を示す。CTRL_FPGA1200は、メモリ有限状態マシン(MEMFSM)1240、ANDゲート1241、評価(EVAL)カウンタ1242、低バンクメモリアドレス/制御ラッチ1243、低バンクアドレス/制御マルチプレクサ1244、アドレスカウンタ1245、高バンクメモリアドレス/制御ラッチ1247、および高バンクアドレス/制御マルチプレクサ1246を含む。図57において示される論理デバイス1203などの各論理デバイスは、評価有限状態マシン(EVALFSMx)1248、データバスマルチプレクサ(FPGA0論理デバイス1203のためのFDO_MUXx)1249を含む。EVALFSMの端に付加された「x」表記は、EVALFSMに関連する特定の論理デバイス(FPGA0、FPGA1、FPGA2、FPGA3)を識別する。この例において、「x」は0〜3の番号である。したがって、EVALFSM0はFPGA0論理デバイス1203に関連する。一般に、各論理デバイスは、ある番号xと関連し、かつN論理デバイスが使用されると、「x」は0〜N−1の番号である。
【0524】
各論理デバイス1201〜1204において、多くのメモリブロックが構成およびマッピングされたユーザの設計に関連する。したがって、ユーザ論理におけるメモリブロックインタフェース1253は、計算システムがFPGA論理デバイスのアレイにおける所望のメモリブロックにアクセスするための手段を提供する。メモリブロックインタフェース1253はまた、バス1295上のメモリ書き込みデータをFPGAデータバスマルチプレクサ(FDO_MUXx)1249へ提供し、かつバス1297上のメモリ読み出しデータをメモリ読み出しデータダブルバッファ1251から読み出す。
【0525】
メモリブロックデータ/論理インタフェース1298は、各FPGA論理デバイス中に提供される。これらのメモリブロックデータ/論理インタフェース1298の各々は、FPGAデータバスマルチプレクサ(FDO_MUXx)1249、評価有限状態マシン(EVALFSMx)1248、およびFPGAバスFD[63:0]に結合される。メモリブロックデータ/論理インタフェース1298は、メモリ読み出しデータバッファ1251、アドレスオフセット部1250、メモリモデル1252、および各メモリブロックN(mem_block_N)1253のためのメモリブロックインタフェースを含む。これらはすべて各メモリブロックNについていずれの所与のFPGA論理デバイス1201〜1204においても繰り返される。したがって、5つのメモリブロックに対して、5セットのメモリブロックデータ/論理インタフェース1298が提供される。すなわち、5セットのメモリ読み出しデータバッファ1251、アドレスオフセット部1250、メモリモデル1252、および各メモリブロックN(mem_block_N)1253のためのメモリブロックインタフェースが提供される。
【0526】
EVALFSMxと同様に、FDO_MUXxにおける「x」は、FDO_MUXxが関連する特定の論理デバイス(FPGA0、FPGA1、FPGA2、FPGA3)を識別する。この例において、「x」は0〜3の番号である。FDO_MUXx1249の出力はバス1282上に提供される。バス1282は、どのチップ(FPGA0、FPGA1、FPGA2、FPGA3)がFDO_MUXx1249に関連するかに依存して、高バンクバスFD[63:32]または低バンクバスFD[31:0]に結合される。図57において、FDO_MUXxは、低バンク論理デバイスFPGA0 1203に関連するFDO_MUX0である。したがって、バス1282上の出力は低バンクバスFD[31:0]に提供される。バス1283の部分は、メモリ読み出しデータダブルバッファ1251への入力のために、読み出しデータを高バンクバスFD[63:32]または低バンクバスFD[31:0]から読み出しバス1283へ転送するために使用される。したがって、書き込みデータはFDO_MUX0 1249を介して各論理デバイス1201〜1204におけるメモリブロックから高バンクバスFD[63:32]または低バンクバスFD[31:0]バスへ出力転送され、かつ読み出しデータはメモリ読み出しデータダブルバッファ1251へ高バンクバスFD[63:32]または低バンクバスFD[31:0]バスから読み出しバス1283を介して入力転送される。メモリ読み出しデータダブルバッファはダブルバッファ機構を提供して第1バッファにおいてデータをラッチし、次いで再度バッファリングして同時にラッチされたデータを出力して歪み(skew)を低減する。このメモリ読み出しデータダブルバッファ1251は以下により詳細に記載される。
【0527】
メモリモデル1252に戻る。メモリモデル1252はユーザメモリタイプをメモリシミュレーションシステムのSRAMタイプに変換する。ユーザの設計におけるメモリタイプは1つのタイプから別のタイプへ変化するので、このメモリブロックインタフェース1253はまたユーザの設計に対してユニークであり得る。例えば、ユーザメモリタイプはDRAM、フラッシュメモリ、またはEEPROMであり得る。しかし、メモリブロックインタフェース1253のすべての変形において、メモリアドレスおよび制御信号(例えば、読み出し、書き込み、チップ選択、mem_clk)が提供される。本発明のメモリシミュレーション局面の1実施形態は、ユーザメモリタイプをメモリシミュレーションシステム中で使用されるSRAMタイプへ変換する。ユーザメモリタイプがSRAMならば、SRAMタイプメモリモデルへの変換は全く簡単である。したがって、メモリアドレスおよび制御信号は、変換を行うメモリモデル1252へバス1296上で提供される。
【0528】
メモリモデル1252は、バス1293上のメモリブロックアドレスおよびバス1292上の制御情報を提供する。アドレスオフセット部1250は、種々のメモリブロックのアドレス情報を受信し、かつバス1293上の元のアドレスからバス1291上の変更されたオフセットアドレスを提供する。オフセットが必要であるのは、互いに重複するメモリブロックのアドレスがあるからである。例えば、1つのメモリブロックは空間0−2Kを使用してその中に常駐し、他方別のメモリブロックは空間0−3Kを使用してその中に常駐する。両方のメモリブロックは空間0−2Kにおいて重複するので、個々のアドレッシングはある種のアドレスオフセット機構がないと困難であり得る。したがって、第1メモリブロックは空間0−2Kを使用してその中に常駐し得、他方第2メモリブロックは約2Kかつ5Kまでの空間を使用してその中に常駐し得る。アドレスオフセット部1250からのオフセットアドレスおよびバス1292上の制御信号は組み合わされ、そしてバス1299上でFPGAバスマルチプレクサ(FDO_MUXx)1249へ提供される。
【0529】
FPGAデータバスマルチプレクサFDO_MUXxは、バス1289上のSPACE2データ、バス1290上のSPACE3データ、バス1299上のアドレス/制御信号、およびバス1295上のメモリ書き込みデータを受信する。上記のように、SPACE2およびSPACE3は特定の空間インデックスである。FPGA I/Oコントローラ(図10における項目327;図22)によって生成されるSPACEインデックスは特定のアドレス空間(すなわち、REG読み出し、REG書き込み、S2H読み出し、H2S書き込み、およびCLK書き込み)を選択する。このアドレス空間内で、本発明のシステムはアクセスすべき特定のワードを逐次選択する。SPACE2は、ハードウェア対ソフトウェアH2SデータのためのDMA読み出し転送に専用のメモリ空間を示す。SPACE3は、REGISTER_READデータのためのDMA読み出し転送に専用のメモリ空間を示す。前出表Gを参照のこと。
【0530】
出力として、FDO_MUXx1249は、バス1282上のデータを低バンクバスまたは高バンクバスのいずれかに提供する。セレクタ信号は、EVALFSMx部1248からのライン1284上の出力イネーブル(output_en)信号およびライン1285上の選択信号である。ライン1284上の出力イネーブル信号は、FDO_MUXx1249の動作を使用可能(または使用不可能)にする。FPGAバスを介するデータアクセスのために、出力イネーブル信号はFDO_MUXxが機能できるように使用可能にされる。ライン1285上の選択信号は、EVALFSMx部1248によって生成され、バス1289上のSPACE2、バス1290上のSPACE3、バス1299上のアドレス/制御信号、およびバス1295上のメモリ書き込みデータから複数の入力を選択する。EVALFSMx部1248による選択信号の生成は、以下にさらに記載される。
【0531】
EVALFSMx部1248は、メモリシミュレーションシステムに関して各論理デバイス1201〜1204の動作の中心にある。EVALFSMx部1248は入力としてライン1279上のSHIFTIN信号、ライン1274上のCTRL_FPGA部1200からのEVAL信号、およびライン1287上の書き込み信号wrxを受信する。EVALFSMx部1248は、ライン1280上のSHIFTOUT信号、メモリ読み出しデータダブルバッファ1251への読み出しラッチ信号rd_latx、FDO_MUXx1249上へのライン1284上の出力イネーブル信号、FDO_MUXx1249へのライン1285上の選択信号、およびライン1281上のユーザ論理への3つの信号(input−en、mux_en、およびclk_en)を出力する。
【0532】
本発明の1実施形態のメモリシミュレーションシステムのためのFPGA論理デバイス1201〜1204の動作は一般に以下のとおりである。EVALが論理1にある場合、FPGA論理デバイス1201〜1204内のデータ評価が発生する。そうでなければ、シミュレーションシステムはDMAデータ転送またはメモリアクセスのいずれかを行う。EVAL=1において、EVALFSMx部1248はclk_en信号、input_en信号、およびmux_en信号を生成してそれぞれユーザ論理が論理デバイスを介するデータ、ラッチ関連データ、および多重信号を評価できるようにする。EVALFSMx部1248は、clk_en信号を生成してユーザの設計論理におけるすべてのクロックエッジレジスタフリップフロップの第2のフリップフロップを使用可能にする(図19参照)。clk_en信号は他にもソフトウェアクロックとして公知である。ユーザメモリタイプが同期である場合、clk_enはまた各メモリブロックにおけるメモリ読み出しデータダブルバッファ1251の第2クロックを使用可能とする。EVALFSMx部1248は、ユーザの設計論理へのinput_en信号を生成してDMA転送によってCPUからユーザ論理へ送信される入力信号をラッチする。input_en信号は、イネーブル入力を主クロックレジスタにおける第2フリップフロップへ提供する(図19参照)。最後に、EVALFSMx部1248は、mux_en信号を生成して各FPGA論理デバイスにおける多重化回路をオンにし、アレイにおける他のFPGA論理デバイスとの通信を開始する。
【0533】
その後、FPGA論理デバイス1201〜1204は少なくとも1つのメモリブロックを含む場合、メモリシミュレーションシステムは、選択されたデータが選択されたFPGA論理デバイスへシフトされるのを待ち、そして次いでFPGAデータバスドライバのためのoutput_enおよび選択信号を生成してメモリブロックインタフェース1253(mem_block_N)のアドレスおよび制御信号をFDバス上に載せる。
【0534】
ライン1287上の書き込み信号wrxが使用可能となると(すなわち、論理1)、選択およびoutput_en信号が使用可能とされ書き込みデータを、どのバンク上でFPGAチップが結合されるかに依存して、低または高バンクバスのいずれか上へ載せる。図57において、論理デバイス1203はFPGA0であり、かつ低バンクバスFD[31:0]に結合される。ライン1287上の書き込み信号wrxが使用不可能とされると(すなわち、論理0)、選択およびoutput_en信号は使用不可能とされ、かつライン1286上の読み出しラッチ信号rd_latxは、どのバンク上でFPGAチップが結合されるかに依存して、低または高バンクバスのいずれかを介して、メモリ読み出しデータダブルバッファ1251にSRAMからの選択されたデータをラッチおよびダブルバッファ化させる。wrx信号は、ユーザの設計論理のメモリインタフェースから得られるメモリ書き込み信号である。実際に、ライン1287上のwrx信号はメモリモデル1252から制御バス1292を介して来る。
【0535】
データの読み出しまたは書き込みのこの処理は、各FPGA論理デバイスに対して発生する。すべてのメモリブロックがSRAMアクセスを介して処理された後で、EVALFSMx部1248はSHIFTOUT信号を生成してチェーンにおける次のFPGA論理デバイスによるSRAMアクセスを可能にする。なお、高および低バンク上のデバイスのためのメモリアクセスは並列に発生する。あるバンクのためのメモリアクセスが他のバンクのためのメモリアクセスの前に完了することもある。これらのアクセスのすべてについて、論理が準備完了しかつデータが利用可能な場合にのみ論理がデータを処理するように適切な待ちサイクルが挿入される。
【0536】
CTRL_FPGA部1200側において、MEMFSM1240は本発明のメモリシミュレーション局面の中心にある。MEMFSM1240は多くの制御信号を送信および受信してメモリシミュレーション書き込み/読み出しサイクルの起動およびサイクルによってサポートされる種々の動作の制御を制御する。MEMFSM1240は、ライン1260上のDATASFR信号をライン1258を介して受信する。この信号はまた、ライン1273上の各論理デバイスへ提供される。DATAXSFRがロー(low)(論理ロー)になると、DMAデータ転送期間は終了し、そして評価およびメモリアクセス期間が開始する。
【0537】
MEMFSM1240はまた、ライン1254上のLASTH信号およびライン1255上のLASTL信号を受信して、選択されたアドレス空間に関連する選択されたワードが計算システムとシミュレーションシステムとの間でPCIバスおよびFPGAバスを介してアクセスされたことを示す。このシフトアウト処理に関連するMOVE信号は、所望のワードがアクセスされ、かつMOVE信号がチェーンの終わりに最終的にLAST信号(すなわち、高バンクに対してLASTHおよび低バンクに対してLASTL)となるまで各論理デバイス(例えば、論理デバイス1201〜1204)を介して伝送される。EVALFSM1248(すなわち、図57はFPGA0論理デバイス1203に対するEVALFSM0を示す)において、対応するLAST信号はライン1280上のSHIFTOUT信号である。特定の論理デバイス1203は図56に示すように低バンクチェーンにおいて最後の論理デバイスではないので(論理デバイス1204が低バンクチェーンにおける最後の論理デバイスである)、EVALFSM0のためのSHIFTOUT信号はLAST信号ではない。EVALFSM1248が図56のEVALFSM2に対応する場合、ライン1280上のSHIFTOUT信号はMEMFSMへのライン1255へ提供されるLASTL信号である。そうでなければ、ライン1280上のSHIFTOUT信号は論理デバイス1204へ提供される(図56参照)。同様に、ライン1279上のSHIFTIN信号は、FPGA0論理デバイス1203(図56参照)のためのVccを表す。
【0538】
LASTLおよびLASTH信号はANDゲート1241へそれぞれライン1256および1257を介して入力される。ANDゲート1241はオープンドレインを提供する。ANDゲート1241の出力はライン1259上のDONE信号を生成する。DONE信号は計算システムおよびMEMFSM1240へ提供される。したがって、LASTLおよびLASTH信号の両方が論理ハイ(high)であってシフトアウトチェーンプロセスの終了を示す場合のみ、ANDゲートは論理ハイを出力する。
【0539】
MEMFSM1240はEVALカウンタ1242に対する開始信号をライン1261上に生成する。名前が示すように、開始信号はEVALカウンタ1242を始動させ、かつDMAデータ転送期間の完了後に送信される。開始信号はDDATAXSFR信号のハイからロー(1から0)への遷移時に生成される。EVALカウンタ1242は、クロックサイクルの所定の数をカウントするプログラム可能カウンタである。EVALカウンタ1242におけるプログラムされたカウントの持続時間は、評価期間の持続期間を決定する。ライン1274上のEVALカウンタ1242の出力は、カウンタがカウント中か否かに依存して、論理レベル1または0のいずれかである。EVALカウンタ1242がカウント中の場合、ライン1274上の出力は論理1であり、これはEVALFSMx1248を介して各FPGA論理デバイス1201〜1204に提供される。EVAL=1の場合、FPGA論理デバイス1201〜1204はFPGA間通信を行って、ユーザの設計におけるデータを評価する。EVALカウンタ1242の出力はまた、ライン1262上をMEMFSMユニット1240へそれ自身のトラッキングの目的でフィードバックされる。プログラムされたカウントの終了時に、EVALカウンタ1242はライン1274および1262上に論理0を生成して評価期間の終了を示す。
【0540】
メモリアクセスが所望されない場合、ライン1272上のMEM_ENは、論理0にアサートされ、かつMEMFSMユニット1240に提供される。この場合、メモリシミュレーションシステムは別のDMAデータ転送期間のあいだ待機する。メモリアクセスが所望される場合、ライン1272上のMEM_EN信号は論理1にアサートされる。実質的には、MEM_EN信号は、オンボードSRAMメモリデバイスがFPGA論理デバイスにアクセスすることを可能にするためのCPUからの制御信号である。ここで、MEMFSMユニット1240は、FPGA論理デバイス1201〜1204がアドレスおよび制御信号をFPGAバスFD[63:32]およびFD[31:0]に入力するのを待機する。
【0541】
残りの機能ユニットならびにそれらの関連制御信号およびラインは、データの書き込みおよび読み出しのためのSRAMメモリデバイスにアドレス/制御情報を提供するためのものである。これらの部分は、低バンクに対するメモリアドレス/制御ラッチ1243、低バンクに対するアドレス制御mux1244、高バンクに対するメモリアドレス/制御ラッチ1247、高バンクに対するアドレス制御マルチプレクサ1246、およびアドレスカウンタ1245を含む。
【0542】
低バンクに対するメモリアドレス/制御ラッチ1243は、バス1213に一致するFPGAバスFD[31:0]1275からのアドレスおよび制御信号、ならびにライン1263上のラッチ信号を受信する。ラッチ1243は、ライン1264上にmem_wr_L信号を生成し、かつFPGAバスFD[31:0]からアドレス制御mux1244へバス1266を介して入力アドレス/制御信号を提供する。このmem_wr信号は、チップ選択書き込み信号と同じである。
【0543】
アドレス/制御マルチプレクサ1244は、入力としてバス1266上のアドレスおよび制御情報ならびにアドレスカウンタ1245からバス1268を介してのアドレス情報を受信する。出力として、アドレス/制御マルチプレクサ1244は、バス1276上でアドレス/制御情報を低バンクSRAMメモリデバイス1205へ送信する。ライン1265上の選択信号は、MEMFSMユニット1240から適切な選択信号を提供する。バス1276上のアドレス/制御情報は、図56におけるバス1229および1216上のMA[18:2]およびチップ選択読み出し/書き込み信号に対応する。
【0544】
アドレスカウンタ1245はSPACE4およびSPACE5からバス1267を介して情報を受信する。SPACE4はDMA書き込み転送情報を含む。SPACE5はDMA読み出し転送情報を含む。これらのDMA転送は計算システム(ワークステーションCPUを介するキャッシュ/メインメモリ)とシミュレーションシステム(SRAMメモリデバイス1205、1206)との間でPCIバスを介して発生する。アドレスカウンタ1245はその出力をアドレス/制御マルチプレクサ1244および1246へのバス1288および1268に提供する。低バンクに対するライン1265上の適切な選択信号を用いて、アドレス/制御マルチプレクサ1244は、バス1276上に、SRAMデバイス1205とFPGA論理デバイス1203、1204との間の書き込み/読み出しメモリアドレスに対するバス1266上のアドレス/制御情報、または、バス1267上のSPACE4またはSPACE5からのDMA書き込み/読み出し転送データのいずれかを入力する。
【0545】
メモリアクセス期間中に、MEMFSMユニット1240は、ライン1263上のラッチ信号をメモリアドレス/制御ラッチ1243に提供してFPGAバスFD[31:0]から入力をフェッチする。MEMFSMユニット1240は、FD[31:0]上のアドレス/制御信号からmem_wr_L制御情報をさらなる制御のために抽出する。ライン1264上のmem_wr_L信号が論理1である場合、書き込み動作が所望され、かつライン1265上の適切な選択信号はMEMFSMユニット1240によってアドレス/制御マルチプレクサ1244に生成され、バス1266上のアドレスおよび制御信号はバス1276上の低バンクSRAMへ送信される。その後、FPGA論理デバイスからSRAMメモリデバイスへの書き込みデータ転送が発生する。ライン1264上のmem_wr_L信号が論理0である場合、読み出し動作が所望されるので、シミュレーションシステムは、SRAMメモリデバイスによってそこに配置されるFPGAバスFD[31:0]上のデータを待機する。データが準備完了するとすぐに、SRAMメモリデバイスからFPGA論理デバイスへの読み出しデータ転送が発生する。
【0546】
高バンクに対する同様の構成および動作が提供される。高バンクに対するメモリアドレス/制御ラッチ1247は、バス1212に一致するFPGAバスFD[63:32]1278からアドレスおよび制御信号、ならびにライン1270上のラッチ信号を受信する。ラッチ1270は、ライン1271上のmem_wr_H信号を生成し、かつ入力アドレス/制御信号をFPGAバスFD[63:32]からアドレス/制御マルチプレクサ1246へバス1239を介して提供する。
【0547】
アドレス/制御マルチプレクサ1246は、入力としてバス1239上のアドレス/制御情報およびバス1268上のアドレスカウンタ1245からアドレス情報を受信する。出力として、アドレス/制御マルチプレクサ1246は、バス1277上でアドレス/制御情報を高バンクSRAMメモリデバイス1206へ送信する。ライン1269上の選択信号は、MEMFSMユニット1240から適切な選択信号を提供する。バス1277上のアドレス/制御情報は、図56におけるバス1214および1215上のMA[18:2]およびチップ選択読み出し/書き込み信号に対応する。
【0548】
アドレスカウンタ1245は、上記のように、SPACE4およびSPACE5からバス1267を介して情報をDMA書き込みおよび読み出し転送のために受信する。アドレスカウンタ1245はその出力をアドレス/制御マルチプレクサ1244および1246へのバス1288および1268に提供する。高バンクに対するライン1269上の適切な選択信号を用いて、アドレス/制御マルチプレクサ1246は、バス1277上に、SRAMデバイス1206とFPGA論理デバイス1201、1202との間の書き込み/読み出しメモリアドレスに対するバス1239上のアドレス/制御情報、または、バス1267上のSPACE4またはSPACE5からのDMA書き込み/読み出し転送データのいずれかを入力する。
【0549】
メモリアクセス期間中に、MEMFSMユニット1240は、ライン1270上のラッチ信号をメモリアドレス/制御ラッチ1247に提供してFPGAバスFD[63:32]からの入力をフェッチする。MEMFSMユニット1240は、mem_wr_H制御情報をFD[63:32]上のアドレス/制御信号をさらなる制御のために抽出する。ライン1271上のmem_wr_H信号が論理1である場合、書き込み動作が所望され、かつライン1269上の適切な選択信号はMEMFSMユニット1240によってアドレス/制御マルチプレクサ1246に生成され、バス1239上のアドレスおよび制御信号はバス1277上の高バンクSRAMへ送信される。その後、FPGA論理デバイスからSRAMメモリデバイスへの書き込みデータ転送が発生する。ライン1271上のmem_wr_H信号が論理0である場合、読み出し動作が所望されるので、シミュレーションシステムは、SRAMメモリデバイスによってそこに配置されるFPGAバスFD[63:32]上のデータを待機する。データが準備完了するとすぐに、SRAMメモリデバイスからFPGA論理デバイスへの読み出しデータ転送が発生する。
【0550】
図57に示すように、アドレスおよび制御信号は低バンクSRAMメモリデバイスおよび高バンクメモリデバイスにそれぞれバス1276および1277を介して提供される。低バンクに対するバス1276は図56におけるバス1229および1216の組み合せに対応する。同様に、高バンクに対するバス1277は図56におけるバス1214および1215の組み合わせに対応する。
【0551】
本発明の1つの実施形態のメモリシミュレーションシステムに対するCTRL_FPGAユニット1200の動作は一般に以下のとおりである。CTRL_FPGAユニット1200における計算システムおよびMEMFSMユニット1240へ提供される、ライン1259上のDONE信号は、シミュレーション書き込み/読み出しサイクルの完了を示す。ライン1260上のDATAXSFR信号は、シミュレーション書き込み/読み出しサイクルのDMAデータ転送期間の発生を示す。FPGAバスFD[31:0]およびFD[63:32]の両方のメモリアドレス/制御信号は、それぞれ高バンクおよび低バンクに対するメモリアドレス/制御ラッチ1243および1247に提供される。いずれのバンクに対しても、MEMFSMユニット1240はラッチ信号(1263または1269)を生成してアドレスおよび制御情報をラッチする。次いで、この情報はSRAMメモリデバイスに提供される。mem_wr信号を使用して、書き込みまたは読み出し動作が所望されるかどうかを決定する。書き込みが所望される場合、データはFPGA論理デバイス1201〜1204からSRAMメモリデバイスへ転送される。読み出しが所望される場合、シミュレーションシステムは、SRAMメモリがリクエストされたデータをPFGAバス上へSRAMメモリとFPGA論理デバイスとの間の転送のために入力するのを待機する。SPACE4およびSPACE5のDMAデータ転送のために、ライン1265、1269上の選択信号は、アドレスカウンタ1245の出力を、メイン計算システムとシミュレーションシステムにおけるSRAMメモリデバイスとの間で転送されるべきデータとして選択し得る。これらのアドレスのすべてについて、適切な待機サイクルは、論理が準備完了でかつデータが利用可能な場合にのみ論理がデータを処理するように挿入される。
【0552】
図60は、メモリ読み出しデータダブルバッファ1251(図57)のより詳細な図を示す。各FPGA論理デバイスにおける各メモリブロックNは、異なる時間に入力され得る関連データをラッチインし、そして次いでこのラッチされたデータを同時に最後にバッファ出力するためのダブルバッファを有する。図60において、メモリブロック0に対するダブルバッファ1391は、2つのD型フリップフロップ1340および1341を含む。第1のDフリップフロップ1340の出力1343は第2のフリップフロップ1341の入力に結合される。第2のDフリップフロップ1341の出力1344はダブルバッファの出力であり、これはユーザの設計論理におけるメモリブロックNインタフェースに提供される。グローバルクロック入力は、ライン1393上で第1のフリップフロップ1340およびライン1394上で第2のフリップフロップ1341に提供される。
【0553】
第1のDフリップフロップ1340はライン1342上でそのデータ入力をSRAMメモリデバイスからバス1283および高バンクに対するFPGAバスFD[63:32]ならびに低バンクに対するFD[31:0]を介して受信する。イネーブル入力は、各FPGA論理デバイスに対するEVALFSMxユニットからrd_latx(例えば、rd_lat0)を受信するライン1345に結合される。したがって、読み出し動作(すなわち、wrx=0)に対して、EVALFSMxユニットはrd_latx信号を生成して、ライン1342上のデータをライン1343にラッチインする。すべてのメモリブロックのすべてのダブルバッファに対する入力データは、異なる時間に入力され得る。ダブルバッファは、データのすべてが最初にラッチされることを確実にする。一旦すべてのデータがDフリップフロップ1340にラッチインされると、clk_en信号(すなわち、ソフトウェアクロック)は、ライン1346上にDフリップフロップ1341へのクロック入力として提供される。clk_en信号がアサートされると、ライン1343上のラッチされたデータがライン1344に対するDフリップフロップ中1341にバッファされる。
【0554】
次のメモリブロック1に対して、ダブルバッファ1391に実質的に等価な別のダブルバッファ1392が提供される。SRAMメモリデバイスからのデータはライン1396上へ入力される。グローバルクロック信号はライン1397上へ入力される。clk_en(ソフトウェアクロック)信号は、ライン1398上でダブルバッファ1392における第2のフリップフロップ(図示せず)に入力される。これらのラインは、メモリブロック0に対する第1のダブルバッファ1391および他のメモリブロックNに対する他のダブルメモリに対して類似信号ラインに結合される。出力されたダブルバッファ化データはライン1399上に提供される。
【0555】
第2のダブルバッファ1392に対するrd_latx信号(例えば、rd_lat1)は、ライン1395上に、他のダブルバッファに対する他のrd_latx信号とは独立に提供される。より多くのダブルバッファが他のメモリブロックNに対して提供される。
【0556】
ここで、MEMFSMユニット1240の状態図を本発明の実施形態にしたがって説明する。図58は、CTRL_FPGAユニットにおけるMEMFSMユニットの有限状態マシンのそのような状態図を示す。図58における状態図は、シミュレーション書き込み/読み出しサイクル内の3つの期間がまた、それらに対応する状態を有して示されるように構成されている。したがって、状態1300〜1301はDMAデータ転送期間に対応する;状態1302〜1304は評価期間に対応する;および状態1305〜1314はメモリアクセス期間に対応する。以下の説明において図57を図58と併せて参照する。
【0557】
一般に、DMA転送、評価、およびメモリアクセスのための信号のシーケンスが設定される。1つの実施形態において、そのシーケンスは以下のとおりである。DATA_XSFRは、もしあればDMAデータ転送を始動する。高バンクおよび低バンクの両方に対するLAST信号は、DMAデータ転送の完了時に生成され、かつDONE信号をトリガしてDMAデータ転送完了期間の完了を示す。次いで、XSFR_DONE信号が生成され、かつ次いでEVALサイクルが開始する。EVALの終結時に、メモリ読み出し/書き込みが開始し得る。
【0558】
図58の上部に戻ると、状態1300は、DATAXSFR信号が論理0の場合はいつもアイドル状態である。このことはその場合にDMAデータ転送が発生しないことを示す。DATAXSFR信号が論理1の場合、MEMFSMユニット1240は状態1301に進む。ここで、計算システムは、計算システム(図1、45、および46におけるメインメモリ)とシミュレーションシステム(図56におけるFPGA論理デバイス1201〜1204またはSRAMメモリデバイス1205、1206)との間のDMAデータ転送を必要とする。適切な待機サイクルが、DMAデータ転送が完了するまで挿入される。DMA転送が完了した場合、DATAXSFR信号が論理0に戻る。
【0559】
DATAXSFR信号が論理0に戻ると、開始信号の生成が状態1302でのMEMFSMユニット1240において起こされる。開始信号はEVALカウンタ1242(プログラム可能カウンタ)を開始する。EVALカウンタが状態1303でカウントをしている限り、EVAL信号は論理1にアサートされ、かつ各FPGA論理デバイスおよびMEMFSMユニット1240においてEVALFSMxを提供する。カウントの最後で、EVALカウンタは論理0のEVAL信号を各FPGA論理デバイスおよびMEMFSMユニット1240におけるEVALFSMxに提示する。MEMFSMユニット1240は、論理0のEVAL信号を受信すると、状態1304でEVAL_DONEフラグをオンにする。EVAL_DONEフラグはMEMFSMによって使用され、評価期間が終了し、かつメモリアクセス期間が、所望ならばここで進行することを示す。CPUは、EVAL_DONEおよびXSFR_DONEを、XSFR_EVALレジスタ(以下の表Kを参照)を読み出すことによってチェックして、DMA転送およびEVALが次のDMA転送を成功裡に完了したことを確認する。
【0560】
しかし、いくつかの場合に、シミュレーションシステムは、その時点でメモリアクセスを実行したくないこともある。ここで、シミュレーションシステムはメモリイネーブル信号MEM_ENを0に保持する。この使用不可にされた(論理0)MEM_EN信号は、MEMFSMユニットをアイドル状態1300に保持する。ここで、MEMFSMユニットは、DMAデータ転送またはFPGA論理デバイスによるデータの評価を待機する。他方、メモリイネーブル信号MEM_ENが論理1であると、シミュレーションシステムはメモリアクセスの実行が所望されることを示す。
【0561】
図58において状態1304より下では、状態図は、平行に進行する2つのセクションに分割される。1つのセクションは低バンクメモリアクセスのための状態1305、1306、1307、1308、および1309を含む。他のセクションは、高バンクメモリアクセスのための状態1311、1312、1313、1314、および1309を含む。
【0562】
状態1305において、シミュレーションは、現在選択されているFPGA論理デバイスがアドレスおよび制御信号をFPGAバスFD[31:0]に入力するために1サイクル待機する。状態1306において、MEMFSMは、メモリアドレス/制御ラッチ1243に対するライン1263上にラッチ信号を生成して、FD[31:0]から入力をフェッチする。この特にフェッチされたアドレスおよび制御信号に対応するデータは、SRAMメモリデバイスから読み出されるか、またはSRAMメモリへ書き込まれるかのいずれかである。シミュレーションシステムが読み込み動作または書き込み動作を必要としているかを判断するために、低バンクに対するメモリ書き込み信号mem_wr_Lがアドレスおよび制御信号から抽出され得る。mem_wr_L=0の場合、読み出し動作がリクエストされる。mem_wr_L=1の場合、書き込み動作がリクエストされる。上記のように、このmem_wr信号はチップ選択書き込み信号と等価である。
【0563】
状態1307において、アドレス/制御マルチプレクサ1244に対する適切な選択信号が生成され、アドレスおよび制御信号を低バンクSRAMへ送信する。MEMFSMユニットは、mem_wr信号およびLASTL信号をチェックする。mem_wr_L=1かつLASTL=0の場合、書き込み動作はリクエストされるが、FPGA論理デバイスのチェーンにおける最後のデータはまだ外へシフトされていない。したがって、シミュレーションシステムは状態1305に戻る。状態1305で、シミュレーションシステムは、FPGA論理デバイスがさらなるアドレスおよび制御信号をFD[31:0]に入力するために1サイクル待機する。この動作は、最後のデータがFPGA論理デバイスの外へシフトされるまで継続する。しかし、mem_wr_L=1かつLASTL=1の場合、最後のデータはFPGA論理デバイスの外へシフトされた。
【0564】
同様に、読み出し動作を示すmem_wr_L=0の場合、MEMFSMは状態1308へ進む。状態1308において、シミュレーションシステムは、SRAMメモリデバイスがデータをFPGAバスFD[31:0]に入力するために1サイクル待機する。LASTL=0の場合、FPGA論理デバイスのチェーンの最後のデータはまだ外へシフトされていない。したがって、シミュレーションシステムは状態1305に戻る。状態1305で、シミュレーションシステムは、FPGA論理デバイスがさらなるアドレスおよび制御信号をFD[31:0]に入力するために1サイクル待機する。この処理は、最後のデータがFPGA論理デバイスの外へシフトされるまで継続する。なお、書き込み動作(mem_wr_L=1)および読み出し動作(mem_wr_L=0)はLASTL=1までインターリーブまたはそうでなければ交番され得る。
【0565】
LASTL=1の場合、MEMFSMは状態1309に進む。状態1309でMEMFSMはDONE=0のあいだ待機する。DONE=1になると、LASTLおよびLASTHの両方が論理1となり、かつ、したがって、シミュレーション書き込み/読み出しサイクルが完了した。次いで、シミュレーションシステムは状態1300に進む。状態1300でシミュレーションシステムはDATAXSFR=0の場合はいつもアイドル状態のままである。
【0566】
同じ処理が高バンクに対して適用可能である。状態1311において、シミュレーションシステムは、現在選択されているFPGA論理デバイスがアドレスおよび制御信号をFPGAバスFD[63:32]に入力するために1サイクル待機する。状態1312において、MEMFSMはラッチ信号をライン1270上にメモリアドレス/制御ラッチ1247に対して生成して、FD[63:32]から入力をフェッチする。この特定のフェッチされたアドレスおよび制御信号に対応するデータは、SRAMメモリデバイスから読み出されるか、またはSRAMメモリデバイスへ書き込まれるかのいずれかであり得る。シミュレーションシステムが読み込み動作または書き込み動作を必要としているかを判断するために、高バンクに対するメモリ書き込み信号mem_wr_Hがアドレスおよび制御信号から抽出され得る。mem_wr_H=0の場合、読み出し動作がリクエストされる。mem_wr_H=1の場合、書き込み動作がリクエストされる。
【0567】
状態1313において、アドレス/制御マルチプレクサ1246に対する適切な選択信号が生成され、アドレスおよび制御信号を高バンクSRAMへ送信する。MEMFSMユニットは、mem_wr信号およびLASTH信号をチェックする。mem_wr_H=1かつLASTH=0の場合、書き込み動作はリクエストされるが、FPGA論理デバイスのチェーンにおける最後のデータはまだ外へシフトされていない。したがって、シミュレーションシステムは状態1311に戻る。状態1311で、シミュレーションシステムは、FPGA論理デバイスがさらなるアドレスおよび制御信号をFD[63:32]に入力するために1サイクル待機する。この動作は、最後のデータがFPGA論理デバイスの外へシフトされるまで継続する。しかし、mem_wr_L=1かつLASTL=1の場合、最後のデータはFPGA論理デバイスの外へシフトされた。
【0568】
同様に、読み出し動作を示すmem_wr_H=0の場合、MEMFSMは状態1314へ進む。状態1314において、シミュレーションシステムは、SRAMメモリデバイスがデータをFPGAバスFD[63:32]に入力するために1サイクル待機する。LASTH=0の場合、FPGA論理デバイスのチェーンの最後のデータはまだ外へシフトされていない。したがって、シミュレーションシステムは状態1311に戻る。状態1311で、シミュレーションシステムは、FPGA論理デバイスがさらなるアドレスおよび制御信号をFD[63:32]に入力するために1サイクル待機する。この処理は、最後のデータがFPGA論理デバイスの外へシフトされるまで継続する。なお、書き込み動作(mem_wr_H=1)および読み出し動作(mem_wr_H=0)はLASTH=1までインターリーブまたはそうでなければ交番され得る。
【0569】
LASTH=1の場合、MEMFSMは状態1309に進む。状態1309でMEMFSMはDONE=0のあいだ待機する。DONE=1になると、LASTLおよびLASTHの両方が論理1となり、かつ、したがって、シミュレーション書き込み/読み出しサイクルが完了した。次いで、シミュレーションシステムは状態1300に進む。状態1300でシミュレーションシステムはDATAXSFR=0の場合はいつもアイドル状態のままである。
【0570】
あるいは、高バンクおよび低バンクの両方に対して、状態1309および1310は本発明の別の実施形態においては実施されない。したがって、低バンクにおいて、MEMFSMは、状態1308(LASTL=0)または1307(MEM_WR_L=1かつLASTL=1)を過ぎた後に状態1300へ直接に進み得る。高バンクにおいて、MEMFSMは、状態1314(LASTH=1)または1313(MEM_WR_H=1かつLASTH=1)を過ぎた後に状態1300へ直接に進み得る。
【0571】
ここでEVALFSMユニット1248の状態図を本発明の一実施形態にしたがって説明する。図59は、各FPGAチップにおけるEVALFSMx有限状態マシンのそのような状態図を示す。図58と同様に、図59における状態図は、シミュレーション書き込み/読み出しサイクル内の2つの期間がまたそれらに対応する状態を有して示されるように構成された。したがって、状態1320〜1326Aは評価期間に対応し、かつ状態1326B〜1336はメモリアクセス期間に対応する。以下の説明において図57を図59と併せて参照する。
【0572】
EVALFSMxユニット1248は、CTRL_FPGAユニット1200からライン1274上でEVAL信号を受信する(図57参照)。EVAL=0の間、FPGA論理デバイスによるデータの評価は発生しない。したがって、状態1320において、EVALFSMxはEVAL=0のあいだアイドル状態である。EVAL=1の場合、EVALFSMxは状態1321へ進む。
【0573】
状態1321、1322、および1323は、FPGA間通信に関する。FPGA間通信では、データがユーザ設計によってFPGA論理デバイスを介して評価される。ここで、EVALFSMxは、信号input_en、mux_en、およびclk_en(図57における項目1281)をユーザの論理に対して生成する。状態1321において、EVALFSMxはclk_en信号を生成する。clk_en信号は、すべてのクロックエッジレジスタフリップフロップの第2のフリップフロップがこのサイクルにおけるユーザの設計論理において使用可能にする(図19参照)。clk_en信号は別にソフトウェアクロックとして公知である。ユーザメモリタイプが同期である場合、clk_enはまた、各メモリブロックにおけるメモリ読み出しデータダブルバッファ1251の第2のクロックを使用可能にする。各メモリブロックのためのSRAMデータ出力は、このサイクルにおいてユーザの設計論理に送信される。
【0574】
状態1322において、EVALFSMxはinput_en信号をユーザの設計論理に対して生成して、DMA転送によるCPUからユーザの論理へ送信される入力信号をラッチする。input_en信号は、イネーブル信号を一次クロックレジスタにおける第2のフリップフロップへ提供する(図19参照)。
【0575】
状態1323において、EVALFSMxはmux_en信号を生成して各FPGA論理デバイスにおける多重化回路をオンにしてアレイにおける他のFPGA論理デバイスとの通信を開始する。上記のように、FPGA間ワイヤラインは、各FPGA論理デバイスチップにおける限られたピンリソースを効率的に使用するように多重化されることが多い。
【0576】
状態1324において、EVALFSMはEVAL=1である限り待機する。EVAL=0の場合、評価期間が完了し、そしてそのため状態1325はEVALFSMxがmux_en信号をオフにすることを必要とする。
【0577】
メモリブロックMの数(ここでMは0を含む整数)がゼロの場合、EVALFSMxは状態1320に戻る。状態1320でEVALFSMxはEVAL=0ならばアイドル状態のままである。たいていの場合、M>0、かつ、したがってEVALFSMxは状態1326A/1326Bに戻る。「M」はFPGA論理デバイスにおけるメモリブロックの数である。Mは、FPGA論理デバイスにおいてマッピングおよび構成されるユーザの設計から一定である。Mは値を下げるようにはカウントされない。M>0の場合、図59の右の部分(メモリアクセス期間)はFPGA論理デバイスにおいて構成され得る。M=0の場合、図59の左部分(EVAL期間)のみが構成され得る。
【0578】
状態1327は、SHIFTIN=0である限りEVALFSMxを待機状態に保持する。SHIFTIN=1の場合、前回のFPGA論理デバイスはそのメモリアクセスを完了し、かつ現在のFPGA論理デバイスがここでそのメモリアクセスタスクを実行する準備が完了している。あるいは、現在のFPGA論理デバイスはバンクにおいて第1の論理デバイスであり、かつSHIFTIN入力ラインはVccに結合される。にもかかわらす、SHIFTIN=1信号の受信は現在のFPGA論理デバイスがメモリアクセスを実行する準備が完了していることを示す。状態1328において、メモリブロック数NはN=1にセットされる。この数Nは、各ループの発生時にインクリメントされてその特定のメモリブロックNに対するメモリアクセスが達成され得る。はじめに、N=1であり、かつそこでEVALFSMxはメモリブロック1に対するメモリにアクセスするように進み得る。
【0579】
状態1329において、EVALFSMxは、FPGAバスドライバFDO_MUXx1249に対してライン1285上に選択信号を生成し、かつライン1284上にoutput_en信号を生成して、Mem_Block_Nインタフェース1253のアドレスおよび制御信号をFPGAバスFD[63:32]またはFD[31:0]に入力する。書き込み動作が要求される場合、wr=1である。そうでなければ、読み出し動作が要求され、そこでwr=0となる。EVALFSMxはその入力の1つとしてライン1287上のwr信号を受信する。このwr信号に基づいて、ライン1285上の適切な選択信号がアサートされ得る。
【0580】
wr=1の場合、EVALFSMxは状態1330に進む。EVALFSMxはFDバスドライバに対する選択およびout_en信号を生成してMem_Block_N1253の書き込みデータをFPGAバスFD[63:32]またはFD[31:0]に入力される。その後、EVALFSMxは、SRAMメモリデバイスが書き込みサイクルを完了するようにさせるために1サイクル待機する。次いで、EVALFSMxは状態1335に進む。状態1335でメモリブロック数Nは1だけインクリメントされる。すなわち、N=N+1である。
【0581】
しかし、状態1329においてwr=0の場合、読み出し動作が要求され、そしてEVALFSMxが状態1332に進む。EVALFSMxは、状態1332で1サイクル待機し、かつ次いで状態1333へ進んで別のサイクルのあいだ待機する。状態1334において、EVALFSMxはrd_latch信号をライン1286上に生成して、メモリブロックNのメモリ読み出しデータダブルバッファ1251がSRAMデータをFDバス上へフェッチするようにさせる。次いで、EVALFSMxは状態1335へ進む。状態1335でメモリブロック数Nは1だけインクリメントされる。すなわち、N=N+1である。したがって、インクリメント状態1335の前にN=1の場合、Nはここで2となり、その結果のメモリアクセスはメモリブロック2に対して適用可能となり得る。
【0582】
現在のメモリブロックNの数がユーザの設計におけるメモリブロックMの総数以下の場合(すなわち、N≦M)、EVALFSMxは状態1329に進む。状態1329でEVALFSMxは、動作が書き込みかまたは読み出しかに依存してFDバスドライバのための特定の選択およびout_en信号を生成する。次いで、この次のメモリブロックNのための書き込みまたは読み出し動作が発生し得る。
【0583】
しかし、現在のメモリブロックNの数がユーザの設計におけるメモリブロックMの総数よりも大きい場合(すなわち、N≧M)、EVALFSMxは状態1336に進む。状態1336でEVALFSMxはSHIFTOUT出力信号をオンにして、バンクにおける次のFPGA論理デバイスがSRAMメモリデバイスにアクセス可能とする。その後、EVALFSMxは状態1320に進む。状態1320でEVALFSMxは、シミュレーションシステムがFPGA論理デバイスの間のデータ評価を要求するまでアイドル状態である(すなわち、EVAL=1)。
【0584】
図61は、本発明の一実施形態のシミュレーション書き込み/読み出しサイクルを示す。図61は、参照番号1366において、シミュレーション書き込み/読み出しサイクルにおける3つの期間(DMAデータ転送期間、評価期間、およびメモリアクセス期間)を示す。図示しないが、先行のDMA転送、評価、およびメモリアクセスが発生し得たことを暗に示す。さらに、低バンクSRAMへ/からのデータ転送に対するタイミングは、高バンクSRAMと異なる。簡単のため、図61は、低バンクおよび高バンクに対するアクセス時間が同一である1つの例を示す。グローバルクロックGCLK1350は、システムにおけるすべての構成要素に対してクロック信号を提供する。
【0585】
DATAXSFR信号1351は、DMAデータ転送期間の発生を示す。トレース1367においてDATAXSFR=1の場合、DMAデータ転送は、メイン計算システムとFPGA論理デバイスまたはSRAMメモリデバイスとの間で発生している。したがって、データはFPGA高バンクバスFD[63:32]1359:およびトレース1369、ならびにFPGA低バンクバスFD[31:0]1358およびトレース1368上に提供される。DONE信号1364は、論理0対1信号(トレース1390)によってメモリアクセス期間の完了を示すか、またはそうでなければ、論理0を用いてシミュレーション書き込み/読み出しサイクルの持続期間(例えば、1370のエッジおよびトレース1390のエッジの組み合わせ)を示す。DMA転送期間の間、DONE信号は論理0である。
【0586】
DMA転送期間の終了時に、DATAXSFR信号は論理1から0へ遷移する。これにより、評価期間の開始がトリガされる。したがって、EVAL1352は、トレース1371によって示されるように論理1である。論理1でのEVAL信号の持続期間は、予め決定され、かつプログラム可能であり得る。この評価期間の間、ユーザの設計論理におけるデータは、トレース1372によって示されるような論理1であるclk_en信号1353、またトレース1373によって示されるような論理1であるinput_en信号1354、およびまたトレース1374によって示されるようなclk_enおよびinput_enよりも長い持続時間のあいだ論理1であるmux_en信号1355を用いて評価される。データは、この特定のFPGA論理デバイス内で評価されている。mux_en信号1355はトレース1374で論理1から0へ遷移し、かつ少なくとも1つのメモリブロックがFPGA論理デバイスにおいて存在する場合、評価期間が終了しかつメモリアクセス期間が開始する。
【0587】
SHIFTIN信号1356はトレース1375で論理1にアサートされる。これは、先行のFPGAがその評価を完了し、かつすべての所望のデータはこの先行のFPGA論理デバイスへ/からアクセスされた。ここで、バンクにおける次のFPGA論理デバイスがメモリアクセスを開始するよう準備完了する。
【0588】
トレース1377〜1386において、次の命名法を使用する。ACj_kはアドレスおよび制御信号がFPGAjおよびメモリブロックkに関連付けられることを示す。ここでjおよびkは0を含む整数である。WDj_kは、FPGAjのための書き込みデータおよびメモリブロックkを示す。RDj_kはFPGAjおよびメモリブロックkを示す。したがって、AC3_1は、FPGA3およびメモリブロック1に関連付けられたアドレスおよび制御信号を示す。低バンクSRAMアクセスおよび高バンクSRAMアクセス1361は、トレース1387として示される。
【0589】
次の数トレース1377〜1387は、どのようにメモリアクセスが達成されるかを示す。EVALFSMxへのwrx信号およびその結果のMEMFSMへのmem_wr信号の論理レベルに基づいて、書き込みまたは読み出し動作のいずれかが実行され得る。書き込み動作が所望の場合、ユーザのメモリブロックNインタフェースを有するメモリモデルインタフェース(図57におけるMem_Block_Nインタフェース1253)はwrxをその制御信号の1つとして提供する。この制御信号wrxは、FDバスドライバおよびEVALFSMxユニットに提供される。wrxが論理1の場合、適切な選択信号およびoutput_en信号は、FDバスドライバに提供され、メモリ書き込みデータをFDバスに入力する。ここでFDバス上にあるこの同じ制御信号は、CTRL_FPGAユニットにおけるメモリアドレス/制御ラッチによってラッチされ得る。メモリアドレス/制御ラッチは、アドレスおよび制御信号をSRAMにMA[18:2]/制御バスを介して送信される。論理1であるwrx制御信号は、FDバスから抽出され、かつ書き込み動作がリクエストされるので、FDバス上のアドレスおよび制御信号に関連付けられたデータはSRAMメモリデバイスへ送信される。
したがって、図61に示されるように、この次のFPGA論理デバイス(低バンクにおける論理デバイスFPGA0)は、トレース1377によって示されるようにAC0_0をFD[31:0]に入力する。シミュレーションシステムは、WD0_0に対して書き込み動作を実行する。次いで、AC0_1は、FD[31:0]に入力される。しかし、読み出し動作がリクエストされた場合、AC0_1をFDバスFD[31:0]に入力した後にいくらかの時間遅延が続き、その後AC0_0に対応するWD0_0の代わりにRD0_0がSRAMメモリデバイスによってFDバスに入力される。
【0590】
なお、トレース1383によって示されるようにAC0_0をMA[18:2]/制御バスに入力することは、アドレス、制御、およびデータをFDバスに入力することよりわずかに遅れる。これは、MEMFSMユニットがアドレス/制御信号をFDバスからラッチインし、mem_wr信号を抽出し、かつ適切な選択信号をアドレス/制御マルチプレクサに対して生成してアドレス/制御信号がMA[18:2]/制御バスに入力され得るようにするのに時間を必要とするからである。さらに、アドレス/制御信号をSRAMメモリデバイスに対してMA[18:2]/制御バスに入力した後で、シミュレーションシステムは、SRAMメモリからの対応のデータがFDバスに入力されるのを待機しなければならない。1つの例は、トレース1384とトレース1381との間の時間オフセットである。ここでRD1_1は、AC1_1がMA[18:2]/制御バスに入力された後で、FDバスに入力される。
【0591】
高バンク上で、FPGA1は、FD[63:32]にAC1_0を入力し、次いでWD1_0が続く。その後、AC1_1がFD[63:32]に入力される。これは、トレース1380によって示される。AC1_1がFDバスに入力される場合、制御信号はこの例において読み出し動作を示す。したがって、上記のように、AC1_1がトレース1384によって示されるようにMA[18:2]/制御バス上にあるので、論理0である適切なwrxおよびmem_wr信号がEVALFSMxおよびMEMFSMユニットへのアドレス/制御信号において存在する。シミュレーションシステムはこれが読み出し動作であることを知っているので、書き込みデータはSRAMメモリへ伝送されない。むしろ、AC1_1に関連付けられた読み出しデータが、ユーザの設計論理によってシミュレーションメモリブロックインタフェースを介する後の読み出しのために、SRAMメモリによってFDバスに入力される。これは高バンク上でトレース1381によって示される。低バンク上において、RD0_1は、トレース1378によって示されるようにFDバスに入力され、続いてAC0_1がMA[18:2]/制御バスに入力される(図示せず)。
【0592】
ユーザの設計論理によるシミュレーションメモリブロックインタフェースを介する読み出し動作は、EVALFSMxがトレース1388によって示されるようにシミュレーションシステムにおけるメモリ読み出しデータダブルバッファに対してrd_lat0信号1362を生成する場合に達成される。このrd_lat0信号は、低バンクFPGA0および高バンクFPGA1の両方に提供される。
【0593】
その後、各FPGA論理デバイスに対する次のメモリブロックがFDバスに入力される。AC2_0は、AC3_0が高バンクFDバスに入力された間、低バンクFDバスに入力される。書き込み動作が所望の場合、WD2_0は低バンクFDバスに入力され、かつWD3_0は高バンクFDバスに入力される。AC3_0は、トレース1385上に示されるようにMA[18:2]/制御バスに入力される。この処理は、書き込みおよび読み出し動作のために次のメモリブロックに対して継続する。なお、低バンクおよび高バンクのための書き込みおよび読み出し動作は異なる時間および速度で発生し、かつ図61は低バンクおよび高バンクに対するタイミングが同じである特定の例を示す。加えて、低および高バンクに対する書き込み動作は一緒に発生し、両方のバンク上での読み出し動作が続く。必ずしもいつもこうなるわけではない。低バンクおよび高バンクが存在することによって、これらのバックに結合されたデバイスの並列動作が可能となる。すなわち、低バンク上の活動は高バンク上の活動から独立である。高バンクが一続きの読み出し動作を並列に実行している間に低バンクが一続きの書き込み動作を実行するような他のシナリオが考えられる。
【0594】
各バンクに対して最後のFPGA論理デバイスにおける最後のデータとなった場合、SHIFTOUT信号1357はトレース1376によって示されるようにアサートされる。読み出し動作に対して、低バンク上のFPGA2および高バンク上のFPGA3に対応するrd_lat1信号1363は、トレース1389によって示されるようにアサートされ、トレース1379上のRD2_1およびトレース1382上のRD3_1を読み出す。最後のFPGAユニットに対する最後のデータがアクセスされたので、シミュレーション書き込み/読み出しサイクルの完了がトレース1390によって示されるようにDONE信号1364によって示される。
【0595】
以下の表Hは、シミュレーションシステムボード上の種々の構成要素、および対応のレジスタ/メモリ、PCIメモリアドレス、およびローカルアドレスをリストおよび記載する。
【0596】
【表11】
【0597】
構成ファイルに対するデータ形式は、本発明の一実施形態にしたがって表Jにおいて以下に示される。CPUは、各時間にPCIバスを介して1ワードを送信して、すべてのオンボードFPGAに対する1ビットを並列に構成する。
【0598】
【表12】
【0599】
以下の表Kは、XSFR_EVALレジスタをリストする。XSFR_EVALレジスタはすべてのボード上に存在する。XSFR_EVALレジスタは、ホスト計算システムによって使用され、EVAL期間をプログラムし、DMA読み出し/書き込みを制御し、かつEVAL_DONEおよびXSFR_DONEフィールドのステータスを読み出す。ホスト計算システムはまた、このレジスタを使用してメモリアクセスを使用可能にする。このレジスタに対するシミュレーションシステムの動作は図62および63を参照して以下に説明される。
【0600】
【表13】
【0601】
以下の表LはCONFIG_JTAG[6:1]レジスタの内容をリストする。CPUはFPGA論理デバイスを構成し、かつこのレジスタを介してFPGA論理デバイスに対して境界スキャンテストを実行する。各ボードは1つの専用レジスタを有する。
【0602】
【表14】
【0603】
図62および63は本発明の別の実施形態のタイミング図を示す。これら2つの図は、XSFR_EVALレジスタに対するシミュレーションシステムの動作を示す。XSFR_EVALレジスタは、ホスト計算システムによって使用され、EVAL期間をプログラムし、DMA読み出し/書き込みを制御し、かつEVAL_DONEおよびXSFR_DONEフィールドのステータスを読み出す。ホスト計算システムはまた、このレジスタを使用して、メモリアクセスを可能にする。2つの図の主な違いの1つは、WAIT_EVALフィールドのステータスである。WAIT_EVALフィールドが「0」に設定された場合(図62の場合)、DMA読み出し転送はCLK_ENの後に開始する。WAIT_EVALフィールドが「1」に設定された場合(図63の場合)、DMA読み出し転送はEVAL_DONEの後に開始する。
【0604】
図62において、WR_XSFR_ENおよびRD_XSFR_ENの両方が「1」に設定される。これら2つのフィールドはDMA書き込み/読み出し転送を使用可能とし、かつXSFR_DONEによってクリアされる。2つのフィールドが「1」に設定されるので、CTRL_FPGAユニットは自動的にDMA書き込み転送をまず実行し、かつ次いでDMA読み出し転送を実行する。しかし、WAIT_EVALフィールドは「0」に設定され、DMA読み出し転送がCLK_ENのアサートの後(かつDMA書き込み動作の完了の後)で開始する。したがって、図62において、DMA読み出し動作は、CLK_EN信号(ソフトウェアクロック)が検出され次第、DMA書き込み動作の完了後ほとんど直ちに発生する。DMA読み出し転送はEVAL期間の完了を待機しない。
【0605】
タイミング図の開始において、複数のFPGA論理デバイスが注意(attention)を得ようと競う際にEVAL_REQ_N信号は競合する。上記のように、EVAL_REQ_N(またはEVAL_REQ#)信号は、FPGA論理デバイスのいずれかがこの信号をアサートした場合に、評価サイクルを開始するように使用される。データ転送の終了時に、アドレスポインタ初期化および評価処理を容易にするためのソフトウェアクロックの操作を含む評価サイクルが開始する。
【0606】
DONE信号はまた、DMAデータ転送期間の終結時に生成され、複数のLAST信号(各FPGA論理デバイスの出力におけるshiftinおよびshiftout信号からのもの)がCTRL_FPGAユニットに対して生成および提供される際に競合する。すべてのLAST信号が受信および処理される場合、DONE信号が生成され、かつDMAデータ転送動作が開始し得る。EVAL_REQ_N信号およびDONE信号は、以下に記載の方法で、時分割式に同じワイヤを使用する。
【0607】
システムは、時間1409におけるWR_XSFR信号によって示されるように自動的にDMA書き込み転送をまず開始する。一実施形態において、WR_XSFR信号の初期部分は、PCIコントローラ、PCI9080または9060に関連する所定のオーバヘッドを含む。その後、ホスト計算システムはDMA書き込み動作をローカルバスLD[31:0]およびFPGAバスFD[63:0]を介して、FPGAバスFD[63:0]に結合されたFPGA論理デバイスに対して実行する。
【0608】
時間1412において、WR_XSFR信号は非アクティブにされ、DMA書き込み動作の完了を示す。EVAL信号は時間1412から1410の間の所定時間のあいだアクティブにされる。EVALTIMEの持続期間がプログラム可能であり、かつ8+Xに初期設定される。ここでXは最長の信号トレースパスから得られる。XSFR_DONE信号はまた、短時間アクティブにされ、このDMA転送動作(現在の動作はDMA書き込み)の完了を示す。
【0609】
また、時間1412において、EVAL_REQ_N信号間の競合は停止するがDONE信号を伝送するワイヤはここでEVAL_REQ_N信号をCTRL_FPGAユニットに送達する。3クロックサイクルの間、EVAL_REQ_N信号は、DONE信号を伝送するワイヤを介して処理される。3クロックサイクルの後、EVAL_REQ_N信号はもはやFPGA論理デバイスによって生成されないが、前回にCTRL_FPGAユニットに送達されたEVAL_REQ_N信号が処理され得る。EVAL_REQ_N信号がもはやゲート化クロックのためのFPGA論理デバイスによって生成されない最大時間はおよそ23クロックサイクルである。この期間よりも長いEVAL_REQ_N信号は無視され得る。
【0610】
時間1413において、時間1412(DMA書き込み動作の終了時)のおよそ2クロックサイクル後、CTRL_FPGAユニットは書き込みアドレスストローブWPLX ADS_N信号をPCIコントローラ(例えば、PLX PCI9080)を送信して、DMA読み出し転送を開始する。時間1413からおよそ24クロックサイクルで、PCIコントローラはDMA読み出し転送処理を開始し得、かつDONE信号がまた生成される。時間1414において、PCIコントローラによってDMA読み出し処理の開始の前に、RD_XSFR信号がアクティブにされ、DMA読み出し転送を使用可能にする。所定のPLXオーバーヘッドデータがまず送信および処理される。時間1415において、このオーバーヘッドデータが処理される間、DMA読み出しデータは、FPGAバスFD[63:0]およびローカルバスLD[31:0]に入力される。時間1413から24クロックサイクルの最後かつDONE信号のアクティブ化およびFPGA論理デバイスからのEVAL_REQ_N信号の生成の時間において、PCIコントローラは、DMA読み出しデータを、そのデータをFPGAバスFD[63:0]およびローカルバスLD[31:0]からホストコンピュータシステムへ伝送することによって処理する。
【0611】
時間1410において、DMA読み出しデータは、EVAL信号が非アクティブ化され、かつEVAL_DONE信号がアクティブ化されてEVALサイクルの完了を示す間、処理され続け得る。FPGA論理デバイス間の競合はまた、EVAL_REQ_N信号を生成する際に開始する。
【0612】
時間1417において、時間1416におけるDMA読み出し期間の完了の直前で、ホストコンピュータシステムは、PLX割り込みレジスタをポーリングしてDMAサイクルの終了が近いかどうかを判断する。PCIコントローラは、DMAデータ転送プロセスを完了するのにどれだけ多くのサイクルが必要であるかを識別する。所定数のサイクルの後、PCIコントローラは特定ビットをその割り込みレジスタに設定する。ホストコンピュータシステムにおけるCPUは、PCIコントローラにおいてこの割り込みレジスタをポーリングする。ビットが設定された場合、CPUはDMA期間がほとんど終了したことを識別する。ホストシステムにおけるCPUは、割り込みレジスタを常時ポーリングするわけではない。なぜなら、そうするとPCIバスが読み出しサイクルで占有される。したがって、本発明の一実施形態において、ホストコンピュータシステムにおけるCPUは、所定数のサイクルを待った後、割り込みレジスタをポーリングするように 短時間の後、RD_XSFRが非活性化されると時間1416においてDMA読み出し期間の終了が起こり、DMA読み出しデータはもはやFPGAバスFD[63:0]上にもローカルバスLD[31:0]上にもない。さらに時間1416においてXSFR_DONE信号が活性化され、DONE信号を発生させるためのLAST信号間の競争が開始される。
【0613】
時間1409におけるWR_XSFR信号の発生から時間1417までのDMA期間を通して、ホストコンピュータシステム内のCPUはシミュレーションハードウェアシステムにアクセスしない。一実施形態において、この期間は(1)PCIコントローラ時間2用のオーバーヘッド期間と(2)WR_XSFRおよびRD_XSFRのワード数と(3)ホストコンピュータシステム(例えばSun ULTRASparc)のPCIオーバーヘッドとの合計である。DMA期間後の最初のアクセスは、CPUがPCIコントローラ内のインタラプトレジスタをポーリングする時間1419に起こる。
【0614】
時間1411、すなわち時間1416から約3クロックサイクル後に、MEM_EN信号が活性化されることによりオンボードSRAMメモリデバイスがイネーブルになり、それにより、FPGA論理デバイスとSRAMメモリデバイスとの間のメモリアクセスが開始し得る。メモリアクセスは時間1419まで続き、一実施形態ではアクセス毎に5クロックサイクルを必要とする。DMA読み出し転送が必要でない場合、メモリアクセスは時間1411ではなく、より早い時間1410に開始し得る。
【0615】
メモリアクセスがFPGA論理デバイスとSRAMメモリデバイスとの間でFPGAバスFD[63:0]を介して起こる一方、ホストコンピュータシステム内のCPUは、時間1418から時間1429までPCIコントローラおよびCTRL_FPGAユニットと、ローカルバスLD[31:0]を介して通信し得る。これは、CPUがPCIコントローラのインタラプトレジスタのポーリングを完了した後に起こる。CPUは、次のデータ転送の準備として様々なレジスタにデータを書き込む。この期間は、4μsecよりも長い。メモリアクセスがこの期間よりも短い場合、FPGAバスFD[63:0]にはコンフリクトが起こらない。時間1429において、XSFR_DONE信号が非活性化される。
【0616】
図63のタイミング図は図62のものとは幾分異なる。なぜなら図63では、WAIT_EVALフィールドが「1」に設定されているからである。換言すると、DMA読み出し転送期間はEVAL_DONE信号が活性化されほとんど完了した後に開始する。DMA読み出し転送期間は、DMA書き込み動作の完了直後ではなく、EVAL期間がほぼ完了するまで待ってから開始される。EVAL信号は時間1412から時間1410という所定期間中、活性化される。時間1410で、EVAL_DONE信号が活性化されることによりEVAL期間の完了が示される。
【0617】
図63において、時間1412にDMA書き込み動作が終了してから時間1420までの間、CTRL_FPGAユニットはPCIコントローラへの書き込みアドレスストローブ信号WPLX ADS_Nを発生しない。時間1420は、EVAL期間の終了よりも約16クロックサイクル前である。XSFR_DONE信号はさらに時間1423まで延長される。時間1423において、XSFR_DONEフィールドが設定され、DMA読み出しプロセスを開始するためにWPLX ADS_N信号が発生し得る。
【0618】
時間1420、すなわちEVAL_DONE信号の活性化より約16クロックサイクル前に、CTRL_FPGAユニットが書き込みアドレスストローブWPLX ADS_N信号をPCIコントローラ(例えば、PLX PCI9080)に送信することにより、DMA読み出し転送を開始する。時間1420から約24クロックサイクル後に、PCIコントローラがDMA読み出し転送プロセスを開始し、DONE信号も発生する。時間1421、すなわちPCIコントローラによるDMA読み出しプロセスの開始前に、RD_XSFR信号が活性化され、それによりDMA読み出し転送がイネーブルになる。いくらかのPLXオーバーヘッドデータがまず送信され処理される。時間1422において、このオーバーヘッドデータが処理されている間に、DMA読み出しデータがFPGAバスFD[63:0]およびローカルバスLD[31:0]上に載る。24クロックサイクルが終わる時間1424に、PCIコントローラが、FPGAバスFD[63:0]およびローカルバスLD[31:0]からホストコンピュータシステムにDMA読み出しデータを伝送することにより処理する。タイミング図の残りの部分は図62と同等である。
【0619】
このように図63では図62よりも後にRD_XSFR信号が活性化される。図63において、RD_XSFR信号はEVAL期間がほぼ完了した後に活性化され、これによりDMA読み出し動作が遅延される。図62において、RD_XSFR信号は、DMA書き込み転送が完了した後にCLK_EN信号が検出されるのを待って活性化される。
【0620】
(IX. コ−ベリフィケーションシステム)
本発明のコ−ベリフィケーションシステムは、ソフトウェアシミュレーションのフレキシビリティと、ハードウェアモデルを用いることから生じるより高い速度とを設計者に提供することにより、設計/開発サイクルを加速し得る。設計のハードウェア部分およびソフトウェア部分は両方とも、ASICの作成に先立ち、かつエミュレータベースのコ−ベリフィケーションツールに対する制限なくベリファイされ得る。デバッグ機能は向上し、デバッグ時間全体が大幅に低減され得る。
【0621】
(テストデバイスとしてASICを用いた従来のコ−ベリフィケーションツール)
図64は、ビデオ、マルチメディア、イーサネット(登録商標)、またはSCSIカードなどのPCIアドオンカードとして具現化された典型的な最終的設計を示す。このカード2000は、他の周辺デバイスとの通信を可能にする直接インターフェースコネクタ2002を含む。コネクタ2002は、バス2001に接続されて、VCR、カメラまたはTVチューナからのビデオ信号、モニタまたはスピーカへのビデオおよびオーディオ出力、ならびに通信またはディスクドライブインターフェースへの信号を伝送する。ユーザ設計に依存して、当業者は他のインターフェースに対する要件を予測し得る。設計の多くの機能はチップ2004内にあり、チップ2004は、バス2003を介してインターフェースコネクタ2002と接続され、バス2007を介してローカルクロック信号を発生する局部発振器2005と接続され、バス2008を介してメモリ2006と接続されている。アドオンカード2000はさらに、PCIコネクタ2009を含み、PCIバス2010と接続されている。
【0622】
この設計を図64に示すアドオンカードとして実施する前に、この設計はテストのためにASIC形態に変更される。従来のハードウェア/ソフトウェアコ−ベリフィケーションツールを図65に示す。図65において、ユーザ設計は、テストデバイス(または「DUT」)2024として示すASICの形態で具現化されている。ASICのインターフェース先として設計された様々なソースからの刺激を得るために、テストデバイス2024はターゲットシステム2020内に配置される。ターゲットシステム2020は、マザーボード上の中央演算システム2021といくつかの周辺デバイスとの組み合わせである。ターゲットシステム2020は中央演算システム2021を含み、中央演算システム2021は、CPUおよびメモリを含む。ターゲットシステム2020は、Microsoft Windows(登録商標)またはSun MicroSystemのSolarisなどのいくつかのオペレーティングシステム下で動作して複数のアプリケーションを実行させる。当業者には公知であるが、Sun MicroSystemのSolarisは、インターネット、イントラネットおよび企業内コンピューティングをサポートする動作環境兼ソフトウェア製品セットである。Solaris動作環境は、業界標準であるUNIX(登録商標)システムVリリース4に基づいており、配信されたネットワーキング環境でクライアント−サーバアプリケーション用に設計され、相対的に小さいワークグループ用の適切なリソースを提供し、電子商取引に必要なWebToneを提供する。
【0623】
テストデバイス2024用のデバイスドライバ2022は、中央演算システム2021に含まれ、オペレーティングシステム(および任意のアプリケーション)とテストデバイス2024との間の通信をイネーブルにする。当業者には公知であるが、デバイスドライバは、コンピュータシステムのハードウェアコンポーネントまたは周辺デバイスを制御する特定のソフトウェアである。デバイスドライバは、デバイスのハードウェアレジスタへのアクセスを担い、しばしば、デバイスによって引き起こされるサービスインタラプトに対するインタラプトハンドラを含む。デバイスドライバはしばしば、オペレーティングシステムカーネルの最低レベルの一部分を形成する。この一部分とは、カーネルが構築されたときにデバイスドライバがリンクされる部分である。いくつかのより最近のシステムは、オペレーティングが実行された後にファイルからインストールされ得るロード可能デバイスドライバを有する。
【0624】
テストデバイス2024および中央演算システム2021は、PCIバス2023に接続されている。ターゲットシステム2020内の他の周辺デバイスは、バス2034を介してターゲットシステムをネットワーク2030に接続するために用いられるイーサネット(登録商標)PCIアドオンカード2025、バス2036および2035を介してSCSIドライブ2027および2031に接続されているSCSI PCIアドオンカード2026、バス2032を介してテストデバイス2024に接続されたVCR2028(テストデバイス2024の設計上必要な場合)、ならびにバス2033を介してテストデバイス2024に接続されたモニタおよび/またはスピーカ2029(テストデバイス2024の設計上必要な場合)を含む。当業者には公知であるが、「SCSI」はSmall Computer Systems Inteface」の略であり、これは、コンピュータと、ハードディスク、フロッピー(登録商標)ディスク、CD−ROM、プリンタ、スキャナを含む多くのインテリジェントデバイスとの間のシステムレベルのインターフェースの、プロセッサに依存しない標準である。
【0625】
このターゲットシステム環境において、テストデバイス2024は、中央演算システム(すなわち、オペレーティングシステム、アプリケーション)から周辺デバイスまでの様々な刺激を用いて検査され得る。時間的に問題がなく設計者が単純に成功か失敗かを知るためのテストを求めている場合、このコ−ベリフィケーションツールはそのニーズを満たすように適切に変更されるべきである。しかしほとんどの場合、設計プロジェクトは予算面および製品としてリリースされるまでのスケジュール面で厳しく制限されている。上述したように、この特定のASICベースのコ−ベリフィケーションツールは満足できるものではない。なぜなら、デバッグ機能が存在しないからである。(設計者は、高度な技術なくしては「失敗」したテストの原因を特定することができず、検出された各バグの「修正手段」の数がプロジェクトの開始時に予測できない。従って、スケジュールおよび予算が予測不能となる。)
(テストデバイスとしてエミュレータを用いた従来のコ−ベリフィケーションツール)
図66は、エミュレータを用いた従来のコ−ベリフィケーションを示す。図64に示し上述した設定とは異なり、テストデバイスは、ターゲットシステム2040といくつかの周辺デバイスとテストワークステーション2052とに接続されたエミュレータ2048内でプログラムされる。エミュレータ2048は、エミュレーションクロック2066とエミュレータ内でプログラムされたテストデバイスとを含む。
【0626】
エミュレータ2048は、PCIバスブリッジ2044とPCIバス2057と制御線2056とを介してターゲットシステム2040に接続されている。ターゲットシステム2040は、マザーボード上の中央演算システム2041といくつかの周辺デバイスとの組み合わせである。ターゲットシステム2040は、中央演算システム2041を含み、中央演算システム2041は、CPUおよびメモリを含む。ターゲットシステム2040は、Microsoft Windows(登録商標)またはSun MicroSystemのSolarisなどのいくつかのオペレーティングシステム下で動作して複数のアプリケーションを実行させる。テストデバイス用のデバイスドライバ2042は、中央演算システム2041に含まれ、オペレーティングシステム(および任意のアプリケーション)とエミュレータ2048内のテストデバイスとの間の通信をイネーブルにする。エミュレータ2048および、この演算環境の一部分である他のデバイスと通信するために、中央演算システム2041はPCIバス2043に接続されている。ターゲットシステム2040内の他の周辺デバイスは、バス2058を介してターゲットシステムをネットワーク2049に接続するために用いられるイーサネット(登録商標)PCIアドオンカード2045、ならびにバス2060および2059を介してSCSIドライブ2047および2050に接続されているSCSI PCIアドオンカード2046を含む。
【0627】
エミュレータ2048はさらにバス2062を介してテストワークステーション2052に接続されている。テストワークステーション2052は、その機能を果たすためにCPUおよびメモリを含む。テストワークステーション2052はさらに、テストケース2061および、モデル化されているが物理的にはエミュレータ2048に接続されていない他のデバイス用のデバイスモデル2068を含み得る。
【0628】
最後にエミュレータ2048は、バス2061を介して、フレームバッファまたはデータストリーム記録/再生システム2051などのいくつかの他の周辺デバイスに接続されている。このフレームバッファまたはデータストリーム記録/再生システム2051はさらに、バス2063を介して通信デバイスまたはチャネル2053に接続され得、バス2064を介してVCR2054に接続され得、バス2065を介してモニタおよび/またはスピーカ2055に接続され得る。
【0629】
当業者には公知であるが、エミュレーションクロックは、実際のターゲットシステムの速度よりもはるかに遅い速度で動作する。従って、図66のなかで塗りつぶされている部分はエミュレーション速度で実行され、他の塗りつぶされていない部分は実際のターゲットシステムの速度で実行される。
【0630】
上述したように、このエミュレータを用いたコ−ベリフィケーションツールにはいくつかの限界がある。論理アナライザまたはサンプルホールドデバイスを用いてテストデバイスの内部状態を得る場合、設計者は、デバッグ目的のために検査したい関連信号がサンプリング用出力ピン上に存在するように設計をコンパイルしなければならない。設計者が設計の別の部分をデバッグしたい場合、設計者は、その部分が論理アナライザまたはサンプルホールドデバイスによってサンプリングされ得る出力信号を有することを確認しなければならない。あるいは設計者は、これらの信号がサンプリング目的の出力ピン上に提供され得るようにエミュレータ2048内の設計をコンパイルしなおさなければならない。このような再コンパイルは数日または数週間かかり得、これは時間が重要である設計/開発スケジュールには長すぎる遅延であり得る。さらに、このコ−ベリフィケーションツールは信号を用いるため、これらの信号をデータに変換するために、または、何らかの信号から信号へのタイミング制御を提供するために、高度な回路が提供されなければならない。さらに、サンプリングすることが望まれる各信号に必要な多くのワイヤ2061および2062を用いる必要性が、デバッグ設定時の負荷および時間を増加させる。
【0631】
(再構成可能演算アレイによるシミュレーション)
本明細書で上述した本発明の単エンジン再構成可能演算(RCC)アレイシステムの高レベル構成を、簡単に再検討するために図67に示す。本発明の一実施形態において、この単エンジンRCCシステムがコ−ベリフィケーションシステムに組み込まれる。
【0632】
図67において、RCCアレイシステム2080は、RCC演算システム2081と、再構成可能演算(RCC)ハードウェアアレイ2084と、これらを接続するPCIバス2089とを含む。重要なことは、RCC演算システム2081がユーザ設計のモデル全体をソフトウェア内に含み、RCCハードウェアアレイ2084がユーザ設計のハードウェアモデルを含むことである。RCC演算システム2081は、CPUと、メモリと、オペレーティングシステムと、単エンジンRCCシステム2080を実行させるために必要なソフトウェアとを含む。RCC演算システム2081内のソフトウェアモデルおよびRCCハードウェアアレイ2084内のハードウェアモデルの漏れのない制御をイネーブルにするために、ソフトウェアクロック2082が設けられる。RCC演算システム2081内にはテストベンチデータ2083がさらに格納されている。
【0633】
RCCハードウェアアレイシステム2084は、PCIインターフェース2085と、RCCハードウェアアレイボードセット2086と、インターフェース用の様々なバスとを含む。RCCハードウェアアレイボードセット2086は、ユーザ設計のうち少なくともハードウェア内でモデル化された部分(すなわちハードウェアモデル2087)とテストベンチデータ用のメモリ2088とを含む。一実施形態では、このハードウェアモデルの様々な部分が、構成時間中に、複数の再構成可能論理要素(例えばFPGAチップ)間に分散される。より多くの再構成可能論理要素またはチップが用いられるにつれて、より多くのボードが必要となり得る。一実施形態では、4つの再構成可能論理要素が単一のボード上に設けられる。他の実施形態では、8つの再構成可能論理要素が単一のボード上に設けられる。4つのチップを有するボード内での再構成可能論理要素の容量および性能は、8つのチップを有するボード内での再構成可能論理要素の容量および性能とは大幅に異なり得る。
【0634】
バス2090は、PCIインターフェース2085からハードウェアモデル2087に、ハードウェアモデル用の様々なクロックを提供する。バス2091は、PCIインターフェース2086とハードウェアモデル2087との間において、コネクタ2093および内部バス2094を介して他のI/Oデータを提供する。バス2092は、PCIインターフェース2085とハードウェアモデル2087との間のPCIバスとして機能する。さらにテストベンチデータがハードウェアモデル2087内のメモリに格納され得る。上述したように、ハードウェアモデル2087は、ユーザ設計のハードウェアモデル以外の他の構成および機能であって、ハードウェアモデルがRCC演算システム2081とインターフェースすることを可能にするために必要な構成および機能を含む。
【0635】
このRCCシステム2080は、単一のワークステーションとして提供されてもよいし、あるいはワークステーションのネットワークに接続されてもよい。後者の場合、各ワークステーションは時間分割ベースでRCCシステム2080へのアクセスを提供される。実際、RCCアレイシステム2080は、シミュレーションスケジューラおよび状態スワッピングメカニズムを有するシミュレーションサーバとして作用する。サーバは、ワークステーションの各ユーザが、より高速な加速およびハードウェア状態スワッピングという目的のためにRCCハードウェアアレイ2084にアクセスすることを可能にする。加速および状態スワッピングの後、各ユーザは、ユーザ設計をソフトウェア内で局所的にシミュレートする一方で、他のワークステーションの他のユーザにRCCハードウェアアレイ2084の制御をリリースすることができる。このネットワークモデルは、以下に述べるコ−ベリフィケーションシステムにも用いられる。
【0636】
RCCアレイシステム2080は、設計全体をシミュレートするパワーとフレキシビリティ、選択されたサイクル中に再構成可能演算アレイ内でハードウェアモデルを介してテストポイントの一部を加速するパワーとフレキシビリティ、および設計者の設計の実質的に任意の部分の内部状態情報を随時取得するパワーとフレキシビリティを、設計者に与える。実際、単エンジン再構成可能演算アレイ(RCC)システムは、概してハードウェア加速型シミュレータと呼ぶことができ、1回のデバッグセッションで以下のタスクを行うために用いられ得る。(1)シミュレーションのみ、(2)ユーザが随時、設計を開始し、停止し、値をアサートし、内部状態の調査を行い得る、ハードウェア加速を用いたシミュレーション、(3)シミュレーション後の分析、および(4)回路内エミュレーション。ソフトウェアモデルおよびハードウェアモデルは両方とも、ソフトウェアクロックを介して単エンジンの厳しい制御下にあるため、再構成可能演算アレイ内のハードウェアモデルはソフトウェアシミュレーションモデルに緊密に接続されている。このことにより、設計者は、価値のある内部状態情報を得るために、サイクル毎にデバッグすること、および複数のサイクルを介してハードウェアモデルを加速および減速することが可能になる。さらに、このシミュレーションシステムは信号ではなくデータを扱うため、信号からデータへの複雑な変換/タイミング回路が不要である。さらに典型的なエミュレーションシステムとは異なり、設計者が異なるノードセットを検査したいと考えた場合に、再構成可能演算アレイ内のハードウェアモデルを再コンパイルする必要はない。さらなる詳細については、上記を参照されたい。
【0637】
(外部I/Oを用いないコ−ベリフィケーションシステム)
本発明の一実施形態は、実際の物理的外部I/Oデバイスおよびターゲットアプリケーションを用いないコ−ベリフィケーションシステムである。従って、本発明の一実施形態によるコ−ベリフィケーションシステムは、ユーザ設計のソフトウェア部分およびハードウェア部分を、実際のターゲットシステムまたはI/Oデバイスを用いることなくデバッグするために、他の機能と共にRCCシステムを組み込み得る。ターゲットシステムおよび外部I/Oデバイスは、RCC演算システム内のソフトウェア内でモデル化される。
【0638】
図68を参照すると、コ−ベリフィケーションシステム2100は、RCC演算システム2101と、RCCハードウェアアレイ2108と、これらを接続するPCIバス2114とを含む。重要なことは、RCC演算システム2101がユーザ設計のモデル全体をソフトウェア内に含み、再構成可能演算アレイ2108がユーザ設計のハードウェアモデルを含むことである。RCC演算システム2101は、CPUと、メモリと、オペレーティングシステムと、単エンジンコ−ベリフィケーションシステム2100を実行させるために必要なソフトウェアとを含む。RCC演算システム2101内のソフトウェアモデルおよび再構成可能演算アレイ2108内のハードウェアモデルの漏れのない制御をイネーブルにするために、ソフトウェアクロック2104が設けられる。RCC演算システム2101内にはテストケース2103がさらに格納されている。
【0639】
本発明の一実施形態によると、RCC演算システム2101はさらに、ターゲットアプリケーション2102、ユーザ設計のハードウェアモデルのドライバ2105、デバイス(例えば、ビデオカード)のモデルとデバイスモデルのソフトウェア内のドライバ(2106で示す)、および別のデバイス(例えば、モニタ)のモデルとこれもまたソフトウェア内にあるデバイスモデルのドライバ(2107で示す)を含む。実質的にRCC演算システム2101は、実際のターゲットシステムおよび他のI/Oデバイスがこの演算環境の一部であることを、ユーザ設計のソフトウェアモデルおよびハードウェアモデルに伝えるために必要なデバイスモデルおよびドライバを、必要な数だけ含む。
【0640】
RCCハードウェアアレイ2108は、PCIインターフェース2109と、RCCハードウェアアレイボードセット2110と、インターフェース用の様々なバスとを含む。RCCハードウェアアレイボードセット2110は、ユーザ設計のうち少なくともハードウェア2112内でモデル化された部分、およびおよびテストベンチデータ用メモリ2113を含む。上述したように、各ボードは、複数の再構成可能論理要素またはチップを含む。
【0641】
バス2115は、PCIインターフェース2109からハードウェアモデル2112にハードウェアモデル用の様々なクロックを提供する。バス2116は、PCIインターフェース2109とハードウェアモデル2112との間において、コネクタ2111および内部バス2118を介して他のI/Oデータを提供する。バス2117は、PCIインターフェース2109とハードウェアモデル2112との間のPCIバスとして機能する。さらにテストベンチデータが、ハードウェアモデル2113内のメモリに格納され得る。上述したように、ハードウェアモデルは、ユーザ設計のハードウェアモデル以外の他の構成および機能であって、ハードウェアモデルがRCC演算システム2101とインターフェースすることを可能にするために必要な構成および機能を含む。
【0642】
図68のコ−ベリフィケーションシステムを従来のエミュレータベースのコ−ベリフィケーションシステムと比較するために、図66は、ターゲットシステム2040、いくつかのI/Oデバイス(例えば、フレームバッファ、またはデータストリーム記録/再生システム2051)およびワークステーション2052に接続されたエミュレータ2048を示す。このエミュレータ構成は、設計者に、多くの問題と設定上の論点を提示する。エミュレータは、エミュレータ内でモデル化されるユーザ設計の内部状態を測定するために、論理アナライザまたはサンプルホールドデバイスを必要とする。論理アナライザおよびサンプルホールドデバイスは信号を必要とするため、信号からデータへの複雑な変換回路が必要である。さらに、信号から信号への複雑なタイミング制御回路が必要である。エミュレータの内部状態を測定するために用いられる各信号に必要な多くのワイヤが、設定中のユーザにさらに負荷を与える。デバッグセッション中、ユーザは、異なるセットの内部論理回路を検査したいと考える毎にエミュレータを再コンパイルして、論理アナライザまたはサンプルホールドデバイスによる測定および記録用の出力として、適切な信号が論理回路から提供されるようにしなければならない。再コンパイルにかかる長い時間は大きすぎる損失である。
【0643】
外部I/Oデバイスが接続されていない本発明のコ−ベリフィケーションシステムでは、ターゲットシステムおよび他のI/Oデバイスがソフトウェア内でモデル化されており、それにより実際の物理的ターゲットシステムおよびI/Oデバイスが不要となっている。RCC演算システム2101はデータを処理するため、信号からデータへの複雑な変換回路も信号から信号へのタイミング制御システムも不要である。ワイヤの数も信号の数と無関係であり、従って設定は比較的単純である。さらに、ユーザ設計のハードウェアモデル内の論理回路の異なる部分をデバッグするのに再コンパイルを必要としない。なぜなら、コ−ベリフィケーションシステムはデータを処理するのであって、信号を処理するのではないからである。RCC演算システムは、ソフトウェア制御クロック(すなわち、ソフトウェアクロックおよびクロックエッジ検出回路)を用いてRCCハードウェアアレイを制御するため、ハードウェアモデルの起動および終了は容易になる。ハードウェアモデルからの読み出しも容易である。なぜなら、ユーザ設計全体のモデルがソフトウェア内にありソフトウェアクロックが同期をイネーブルにするからである。従って、ユーザはソフトウェアシミュレーションのみでデバッグを行い、ハードウェア内の設計の一部または全部を加速し、サイクル毎に様々な所望のテストポイントを行い、ソフトウェアおよびハードウェアモデルの内部状態(すなわち、レジスタおよび組み合わせ論理状態)を調査することができる。例えば、ユーザはいくつかのテストベンチデータで設計をシミュレートし、ハードウェアモデルに内部状態情報をダウンロードし、ハードウェアモデルでの様々なテストベンチデータで設計を加速し、得られたハードウェアモデルの内部状態値をレジスタ/組み合わせ論理再発生により調査し、ハードウェアモデルからソフトウェアモデルに値をロードすることができる。そしてユーザは最終的に、ハードウェアモデル加速型プロセスの結果を用いて、ソフトウェア内にあるユーザ設計の他の部分をシミュレートすることができる。
【0644】
しかし上述したように、デバッグセッション制御のために、ワークステーションがまだ必要である。ネットワーク構成において、ワークステーションは、デバッグデータに遠隔的にアクセスするために、コ−ベリフィケーションシステムに遠隔的に接続され得る。非ネットワーク構成においては、ワークステーションはコ−ベリフィケーションシステムに局所的に接続され得る。いくつかの実施形態では、ワークステーションは、デバッグデータが局所的にアクセスされ得るようにコ−ベリフィケーションシステムを内部に組み込み得る。
【0645】
(外部I/Oを用いたコ−ベリフィケーションシステム)
図68において、様々なI/OデバイスおよびターゲットアプリケーションがRCC演算システム2101内でモデル化された。しかし、あまりに多くのI/OデバイスおよびターゲットアプリケーションがRCC演算システム2101内で実行しすぎると、全体の速度が低下する。RCC演算システム2101内にCPUが1つだけある場合、すべてのデバイスモデルおよびターゲットアプリケーションからの様々なデータを処理するのに、より長い時間が必要である。データのスループットを高めるために、実際のI/Oデバイスおよびターゲットアプリケーションが(これらのI/Oデバイスおよびターゲットアプリケーションのソフトウェアモデルに代えて)物理的にコ−ベリフィケーションシステムに接続され得る。
【0646】
本発明の一実施形態は、実際の物理的外部I/Oデバイスおよびターゲットアプリケーションを用い得るコ−ベリフィケーションシステムである。従って、コ−ベリフィケーションシステムは、実際のターゲットシステムおよび/またはI/Oデバイスを用いながら、ユーザ設計のソフトウェア部分およびハードウェア部分をデバッグするために、他の機能と共にRCCシステムを組み込み得る。テストのために、コ−ベリフィケーションシステムはソフトウェアからのテストベンチデータと外部インターフェース(例えば、ターゲットシステムおよび外部I/Oデバイス)からの刺激を用い得る。テストベンチデータは、ユーザ設計のピン出力にテストデータを提供するためと、ユーザ設計内の内部ノードにテストデータを提供するためとに用いられ得る。外部I/Oデバイス(またはターゲットシステム)からの実際のI/O信号は、ユーザ設計のピン出力のみに向けられ得る。従って、外部インターフェース(例えば、ターゲットシステムまたは外部I/Oデバイス)からのテストデータと、ソフトウェア内のテストベンチプロセスとの間の1つの主要な相違は、テストベンチデータはピン出力および内部ノードに付与される刺激でユーザ設計をテストするために用いられ得るが、ターゲットシステムまたは外部I/Oデバイスからの実際のデータは、そのピン出力(またはピン出力を表すユーザ設計内のノード)を介してユーザ設計のみに付与され得るということである。コ−ベリフィケーションシステムの構造、およびターゲットシステムおよび外部I/Oデバイスに対する構成を以下に述べる。
【0647】
本発明の一実施形態によるコ−ベリフィケーションシステムは、図66のシステム構成に比較すると、波線2070内の要素の構造および機能が異なる。換言すると、図66は波線2070内のエミュレータおよびワークステーションを示すが、本発明の一実施形態は図69に示すコ−ベリフィケーションシステム2140(および関連するワークステーション)を波線2070内のコ−ベリフィケーションシステム2140として含む。
【0648】
図69を参照すると、本発明の一実施形態によるコ−ベリフィケーションシステム構成は、ターゲットシステム2120と、コ−ベリフィケーションシステム2140と、いくつかのオプションのI/Oデバイスと、これらを接続する制御/データバス2131および2132とを含む。ターゲットシステム2120は、中央演算システム2121を含み、中央演算システム2121はCPUおよびメモリを含む。ターゲットシステム2120は、Microsoft Windows(登録商標)またはSun MicroSystemのSolarisなどのいくつかのオペレーティングシステム下で動作して複数のアプリケーション2122およびテストケース2123を実行させる。ユーザ設計のハードウェアモデル用デバイスドライバ2124は、中央演算システム2121内に含まれて、オペレーティングシステム(および任意のアプリケーション)とユーザ設計との間の通信をイネーブルにする。コ−ベリフィケーションシステムおよびこの演算環境の一部である他のデバイスと通信するために、中央演算システム2121はPCIバス2129に接続されている。ターゲットシステム2120内の他の周辺デバイスは、ターゲットシステムをネットワークに接続するために用いられるイーサネット(登録商標)PCIアドオンカード2125、バス2130を介してSCSIドライブ2128に接続されているSCSI PCIアドオンカード2126、およびPCIバスブリッジ2127を含む。
【0649】
コ−ベリフィケーションシステム2140は、RCC演算システム2141、RCCハードウェアアレイ2190、外部I/O拡張部という形態の外部インターフェース2139、およびRCC演算システム2141とRCCハードウェアアレイ2190とを接続するPCIバス2171を含む。RCC演算システム2141は、CPUと、メモリと、オペレーティングシステムと、単エンジンコ−ベリフィケーションシステム2140を実行させるために必要なソフトウェアとを含む。重要なことは、RCC演算システム2141がユーザ設計全体をソフトウェア内に含み、RCCハードウェアアレイ2190がユーザ設計のハードウェアモデルを含むことである。
【0650】
上述したように、コ−ベリフィケーションシステムの単エンジンは、RCC演算システム2141の主要メモリ内にある主要ソフトウェアカーネルから、パワーとフレキシビリティとを取得し、コ−ベリフィケーションシステム2140の動作および実行全体を制御する。テストベンチプロセスがアクティブであり且つ外界からの信号がすべてコ−ベリフィケーションシステムに提示される限り、カーネルはアクティブなテストベンチコンポーネントを評価し、クロックコンポーネントを評価し、クロックエッジを検出してレジスタおよびメモリを更新すると共に組み合わせ論理データを伝搬させ、シミュレーション時間を早める。この主要ソフトウェアカーネルのおかげで、RCC演算システム2141とRCCハードウェアアレイ2190とが緊密に接続されるという特徴が得られる。
【0651】
ソフトウェアカーネルは、RCCハードウェアアレイ2190および外部に提供されたソフトウェアクロックソース2142からソフトウェアクロック信号を生成する。クロックソース2142は、これらのソフトウェアクロックの宛先に依存して、異なる周波数の複数のクロックを生成し得る。概してソフトウェアクロックは、ユーザ設計のハードウェアモデル内のレジスタが、ホールド時間を乱すことなくシステムクロックと同期して評価することを保証する。ソフトウェアモデルは、ハードウェアモデルレジスタ値に影響を与えるソフトウェア内のクロックエッジを検出し得る。従って、クロック検出メカニズムは、主要ソフトウェアモデル内でのクロックエッジ検出がハードウェアモデルでのクロック検出として解釈され得ることを保証する。ソフトウェアクロックおよびクロックエッジ検出論理のより詳細な説明については、図17〜図19および本明細書の対応部分を参照されたい。
【0652】
本発明の一実施形態によると、RCC演算システム2141はさらに、複数のI/Oデバイスの1以上のモデルを含み得る。他の実際の物理的I/Oデバイスがコ−ベリフィケーションシステムに接続され得るという事実にもかかわらずである。例えば、RCC演算システム2141は、デバイス(例えば、スピーカ)のモデルならびにそのドライバおよびテストベンチデータをソフトウェア(2143で示す)に含み得、別のデバイス(例えば、グラフィクスアクセラレータ)のモデルならびにそのドライバおよびテストベンチデータをソフトウェア(2144で示す)に含み得る。ユーザは、いずれのデバイス(ならびに、それぞれのドライバおよびテストベンチデータ)をモデル化しRCC演算システム2141に組み込むか、およびいずれのデバイスを実際にコ−ベリフィケーションシステムに接続するかを決定する。
【0653】
コ−ベリフィケーションシステムは、(1)RCC演算システム2141とRCCハードウェアアレイ2190との間、および(2)外部インターフェース(ターゲットシステムと外部I/Oデバイスとに接続されている)とRCCハードウェアアレイ2190との間、にトラフィック制御を提供する制御論理を含む。いくつかのデータは、RCCハードウェアアレイ2190とRCC演算システム2141との間を通過する。なぜなら、いくつかのI/Oデバイスは、RCC演算システム内でモデル化され得るからである。さらに、RCC演算システム2141は、ユーザ設計のうち、RCCハードウェアアレイ2190内でモデル化された部分を含むソフトウェア内に設計全体のモデルを有する。その結果、RCC演算システム2141はさらに、外部インターフェースとRCCハードウェアアレイ2190との間を通過するすべてのデータに対するアクセスを有していなければならない。制御論理は、RCC演算システム2141がこれらのデータに対するアクセスを有することを保証する。制御論理を以下に詳細に述べる。
【0654】
RCCハードウェアアレイ2190は、複数のアレイボードを含む。図69に示す特定の実施形態において、ハードウェアアレイ2190は、ボード2145〜2149を含む。ボード2146〜2149は、構成されたハードウェアモデルの大部分を含む。ボード2145(すなわち、ボードm1)は、コ−ベリフィケーションシステムがハードウェアモデルの少なくとも一部分を構成するために用い得る再構成可能演算要素(例えば、FPGAチップ)2153と、外部インターフェース(ターゲットシステムおよびI/Oデバイス)およびコ−ベリフィケーションシステム2140の間のトラフィックおよびデータを方向づける外部I/Oコントローラ2152とを含む。ボード2145は、外部I/Oコントローラを介して、RCC演算システム2141が、外界(すなわち、ターゲットシステムおよびI/Oデバイス)とRCCハードウェアアレイ2190との間で伝送されるすべてのデータに対するアクセスを有することを可能にする。このアクセスは重要である。なぜなら、コ−ベリフィケーションシステム内のRCC演算システム2141は、ソフトウェア内にユーザ設計全体のモデルを含み、RCC演算システム2141はさらにRCCハードウェアアレイ2190の機能を制御することができるからである。
【0655】
外部I/Oデバイスからの刺激がハードウェアモデルに提供される場合、ソフトウェアモデルもまた、この刺激に対するアクセスを有していなければならない。これにより、コ−ベリフィケーションシステムのユーザは次のデバッグステップを選択的に制御し得る。次のデバッグステップは、この付与された刺激の結果として設計者の設計の内部状態値を調査することを含み得る。ボードレイアウトおよび相互接続スキームに関して上述したように、最初と最後のボードは、ハードウェアアレイ2190内に含まれる。そのため、ボード1(ボード2146と示す)およびボード8(ボード2149と示す)は8ボードを有するハードウェアアレイ(ボードm1を除く)に含まれる。これらのボード2145〜2149を除くと、チップm2を有するボードm2(図69には示さないが図74に示す)がさらに設けられ得る。このボードm2は、外部インターフェースを有していないという点、および追加のボードが必要な場合に拡張のために用いられ得るという点以外は、ボードm1と同様である。
【0656】
これらのボードの内容を述べる。ボード2145(ボードm1)は、PCIコントローラ2151、外部I/Oコントローラ2152、データチップ(m1)2153、メモリ2154、およびマルチプレクサ2155を含む。一実施形態において、PCIコントローラはPLX9080である。PCIコントローラ2151は、バス2171を介してRCC演算システム2141に接続され、バス2172を介して3状態バッファ2179に接続されている。
【0657】
コ−ベリフィケーションシステム内の、外界(ターゲットシステム2120およびI/Oデバイス)とRCC演算システム2141との間の主要トラフィックコントローラは、外部I/Oコントローラ2152(図69、図71および図73では「CRTLXM」とも呼ぶ)である。外部I/Oコントローラ2152は、RCC演算システム2141、RCCハードウェアアレイ内の他のボード2146〜2149、ターゲットシステム2120、および実際の外部I/Oデバイスに接続されている。もちろん、上述したように、RCC演算システム2141とRCCハードウェアアレイ2190との間の主要トラフィックコントローラは常に、各アレイボード2146〜2149およびPCIコントローラ2151内の個々の内部I/Oコントローラ(例えば、I/Oコントローラ2156および2158)である。一実施形態において、コントローラ2156および2158などの個々の内部I/Oコントローラは、上述し図22(ユニット700)および図56(ユニット1200)などの例示的図面に示したFPGA I/Oコントローラである。
【0658】
外部I/Oコントローラ2152は3状態バッファ2179に接続されることにより、外部I/OコントローラがRCC演算システム2141とインターフェースすることを可能にする。一実施形態において、3状態バッファ2179は、ある例では、RCC演算システム2141からのデータがローカルバス2180に向かって通過することを可能にする一方で、ローカルバスからのデータがRCC演算システム2141に向かって通過することを妨げ、別の例では、データがローカルバス2180からRCC演算システム2141へ通過することを可能にする。
【0659】
外部I/Oコントローラ2152はさらに、データバス2176を介してチップ(m1)2153およびメモリ/外部バッファ2154に接続されている。一実施形態において、チップ(m1)2153は、ユーザ設計のハードウェアモデルの少なくとも一部分(またはユーザ設計が十分小さい場合にはハードウェアモデルの全体)を構成するために用いられ得る、FPGAチップなどの再構成可能演算要素である。外部バッファ2154は、一実施形態ではDRAM DIMMであり、様々な目的のためにチップ2153によって用いられ得る。外部バッファ2154は、局所的に各再構成可能論理要素(例えば、再構成可能論理要素2157)に接続された個々のSRAMメモリデバイスよりも大きいメモリ容量を提供する。この大きいメモリ容量は、RCC演算システムが大容量のデータを格納することを可能にする。大容量のデータとは、テストベンチデータ、マイクロコントローラ用の埋め込みコード(ユーザ設計がマイクロコントローラの場合)、および1メモリデバイス内の大きいルックアップテーブルなどである。外部バッファ2154はさらに、上述したようにハードウェアモデリング用に必要なデータを格納するために用いられ得る。実質的に、この外部バッファ2154は部分的には、上述し例えば図56(SRAM1205および2106)に示した他の高バンクまたは低バンクSRAMメモリデバイスのように機能するが、より大きなメモリを必要とする。外部バッファ2154はさらに、コ−ベリフィケーションシステムによって用いられて、ターゲットシステム2120および外部I/Oデバイスから受け取られたデータを格納する。これにより、これらのデータは、後にRCC演算システム2141によって取り出され得る。チップm1 2153および外部バッファ2154はさらに、本明細書中の「メモリシミュレーション」というセクションに記載するメモリマッピングシステムを含む。
【0660】
外部バッファ2154内の所望のデータにアクセスするために、チップ2153およびRCC演算システム2141の両方が(外部I/Oコントローラ2152を介して)所望のデータのアドレスを送達し得る。チップ2153はアドレスバス2182上にアドレスを提供し、外部I/Oコントローラ2152はアドレスバス2177上にアドレスを提供する。これらのアドレスバス2182および2177は、マルチプレクサ2155への入力であり、マルチプレクサ2155は、外部バッファ2154に接続された出力線2178上に、選択されたアドレスを提供する。マルチプレクサ2155用選択信号は、線2181を介して外部I/Oコントローラ2152によって提供される。
【0661】
外部I/Oコントローラ2152はさらに、バス2180を介して他のボード2146〜2149に接続されている。一実施形態において、バス2180は、上述し図22(ローカルバス708)および図56(ローカルバス1210)など例示的図面に示したローカルバスである。この実施形態において、僅か5つのボード(ボード2145(ボードm1)を含む)が用いられる。ボードの実際の数は、ハードウェア内でモデル化されるユーザ設計の複雑さと大きさによって決定される。普通の複雑さを有するユーザ設計のハードウェアモデルは、より複雑なユーザ設計のハードウェアモデルよりも必要とするボードの数が少ない。
【0662】
スケーラビリティをイネーブルにするために、ボード2146〜2149は、ボード間のいくつかの相互接続線を除いて、実質的に互いに同一である。これらの相互接続線は、ユーザ設計のハードウェアモデルのうち、1チップ(例えば、ボード2146内のチップ2157)内の部分が、同一のユーザ設計内のハードウェアモデルのうち、別のチップ(たとえば、ボード2148内のチップ2161)内に物理的に設けられた別の部分と通信することを可能にする。このコ−ベリフィケーションシステム用の相互接続構造に関して、図74、図8および図36〜図44ならびに本明細書の対応部分を簡単に参照されたい。
【0663】
ボード2148は代表的ボードである。ボード2148は、この4ボードレイアウト(ボード2145(ボードml)を除く)内の第3のボードである。従って、相互接続線用の適切なターミネーションを必要とするエンドボードではない。ボード2148は、内部I/Oコントローラ2158、いくつかの再構成可能論理要素(たとえば、FPGAチップ)2159〜2166、高バンクFDバス2167、低バンクFDバス2168、高バンクメモリ2169、および低バンクメモリ2170を含む。上述したように、一実施形態において、内部I/Oコントローラ2158は、上述し図22(ユニット700)および図56(ユニット1200)などの例示的図面に示したFPGA I/Oコントローラである。同様に、高および低バンクメモリデバイス2169および2170は、上述し例えば図56(SRAM1205および1206)に示したSRAMメモリデバイスである。高および低バンクFDバス2167および2168は、一実施形態においては、上述し図22(FPGAバス718および719)、図56(FDバス1212および1213)、ならびに図57(FDバス1282)などの例示的図面に示したFDバスまたはFPGAバスである。
【0664】
コ−ベリフィケーションシステム2140をターゲットシステム2120および他のI/Oデバイスに接続するために、外部I/O拡張部という形態の外部インターフェース2139が設けられる。ターゲットシステム側では、外部I/O拡張部2139が、二次PCIバス2132および制御線2131を介してPCIブリッジ2127に接続されている。制御線2131はソフトウェアクロックを送達するために用いられる。I/Oデバイス側では、外部I/O拡張部2139が、ピン出力データ用バス2136〜2138およびソフトウェアクロック用制御線2133〜2135を介して様々なI/Oデバイスに接続されている。I/O拡張部2139に接続され得るI/Oデバイスの数は、ユーザによって決定される。いずれにせよ、外部I/O拡張部2139には、多くのI/Oデバイスをコ−ベリフィケーションシステム2140に接続してデバッグセッションを首尾よく実行させるために必要なデータバスおよびソフトウェアクロック制御線が、必要なだけ設けられる。
【0665】
コ−ベリフィケーションシステム2140側では、外部I/O拡張部2139が、データバス2175、ソフトウェアクロック制御線2174、および走査制御線2173を介して外部I/Oコントローラ2152に接続される。外界(ターゲットシステム2120および外部I/Oデバイス)とコ−ベリフィケーションシステム2140との間においてピン出力データを通過させるために、データバス2175が用いられる。RCC演算システム2141から外界へソフトウェアクロックデータを送達するために、ソフトウェアクロック制御線2174が用いられる。
【0666】
制御線2174および2131上に存在するソフトウェアクロックは、RCC演算システム2141内の主要ソフトウェアカーネルによって生成される。RCC演算システム2141は、PCIバス2171、PCIコントローラ2151、バス2171、3状態バッファ2179、ローカルバス2180、外部I/Oコントローラ2152、および制御線2174を介して、ソフトウェアクロックを外部I/O拡張部2139に送達する。外部I/O拡張部2139から、ソフトウェアクロックがターゲットシステム2120への(PCIブリッジ2127を介した)クロック入力として提供され、他の外部I/Oデバイスが制御線2133〜2135を介して提供される。ソフトウェアクロックは、主要クロックソースとして機能するため、ターゲットシステム2120およびI/Oデバイスはより低速で実行する。しかし、ターゲットシステム2120および外部I/Oデバイスに提供されるデータは、RCC演算システム2141内のソフトウェアモデルおよびRCCハードウェアアレイ2190内のハードウェアモデル同様、ソフトウェアクロック速度に同期する。同様に、ターゲットシステム2120および外部I/Oデバイスからのデータは、ソフトウェアクロックに同期してコ−ベリフィケーションシステム2140に送達される。
【0667】
従って、外部インターフェースとコ−ベリフィケーションシステムとの間を通過したI/Oデータは、ソフトウェアクロックに同期する。実質的に、ソフトウェアクロックは、外部I/Oデバイスおよびターゲットシステムとコ−ベリフィケーションシステムとの間にデータが通過する毎に、外部I/Oデバイスおよびターゲットシステムの動作を、コ−ベリフィケーションシステム(RCC演算システムおよびRCCハードウェアアレイ内)の動作に同期させる。データイン動作およびデータアウト動作の両方にソフトウェアクロックが用いられる。データイン動作のためには、ポインタ(後述する)がRCC演算システム2141から外部インターフェースへソフトウェアクロックをラッチすると、他のポインタがこれらのI/Oデータを外部インターフェースから、RCCハードウェアアレイ2190のハードウェアモデル内の選択された内部ノードへラッチする。これらのポインタは、ソフトウェアクロックが外部インターフェースに送達されるこのサイクル中、これらのI/Oデータを1つずつラッチする。すべてのデータがラッチされると、RCC演算システムが別のソフトウェアクロックを生成し得、所望であれば別のソフトウェアクロックサイクルで再びさらなるデータをラッチする。データアウト動作のためには、RCC演算システムが外部インターフェースにソフトウェアクロックを送達し、その後RCCハードウェアアレイ2190内のハードウェアモデルの内部ノードから外部インターフェースへのデータのゲーティングを、ポインタの補助を受けて制御する。ポインタは、内部ノードから外部インターフェースへデータを、ここでも1つずつゲーティングする。さらなるデータが外部インターフェースに送達される必要がある場合、RCC演算システムは別のソフトウェアクロックを生成して、外部インターフェースにデータをゲーティングするために、選択されたポインタを活性化することができる。ソフトウェアクロックの生成は厳密に制御され、従って、コ−ベリフィケーションシステムが、コ−ベリフィケーションシステムと外部インターフェースに接続された任意の外部I/Oデバイスとの間でデータ送達とデータ評価を同期させることを可能とする。
【0668】
スキャン制御ライン2173を使用して、存在し得る任意のデータに対して変換システム2140がデータバス2132、2136、2137、および2138をスキャンすることを可能にする。スキャン信号をサポートする外部I/Oコントローラ2151における論理はポインタ論理である。ここで種々の入力が特定期間のあいだ出力として提供され、その後MOVE信号を介して次の入力に遷移する。この論理は図11に示されるスキームに類似する。実質的に、スキャン信号はマルチプレクサに対する選択信号のように機能する。ただし、スキャン信号がマルチプレクサへの種々の入力を順繰りに選択する場合を除く。したがって、1期間において、スキャン制御ライン2173上のスキャン信号は、ターゲットシステム2120から入力され得るデータに対してデータバス2132をサンプリングする。次の期間において、スキャン制御ライン2173上のスキャン信号は、そこに結合され得る外部I/Oデバイスから入力され得るデータに対してデータバス2136をサンプリングする。次の期間において、データバス2137がサンプリングされるなどであるので、変換システム2140は、ターゲットシステム2120または外部I/Oデバイス由来のすべてのピンアウトデータをこのデバッグセッションの間に受信および処理し得る。変換システム2140によってデータバス2132、2136、2137、および2138をサンプリングすることによって受信されたいずれのデータも外部バッファ2154へ外部I/Oコントローラ2152を介して伝送される。
【0669】
なお、図69に例示される構成は、ターゲットシステム2120が一次CPUを含み、かつユーザ設計がビデオコントローラ、ネットワークアダプタ、グラフィックスアダプタ、マウス、または他のサポートデバイス、カード、または論理などの所定の周辺デバイスであると仮定する。したがって、ターゲットシステム2120は、一次PCIバス2129に結合されたターゲットアプリケーション(オペレーティングシステムを含む)を含み、かつ変換システム2140はユーザ設計を含みかつ二次PCIバス2132に結合される。構成は、ユーザ設計の対象に依存してまったく異なり得る。例えば、ユーザ設計がCPUであるとすると、ターゲットアプリケーションは、ターゲットシステム2120がもはや中央計算システム2121を含まない場合、変換システム2140のRCC計算システム2141において実行される。実際に、バス2132はここで一次PCIバスであり、かつバス2129は二次PCIバスであり得る。実質的に、ユーザ設計が中央計算システム2121をサポートする周辺デバイスの1つである代わりに、ユーザ設計はここで主計算センタであり、かつ他の周辺デバイスはユーザ設計をサポートしている。
【0670】
外部インタフェース(外部I/Oエクスパンダ2139)と変換システム2140との間でデータを伝送するための制御論理が各ボード2145〜2149に含まれる。制御論理の一次部分は外部I/Oコントローラ2152に含まれるが、他の部分は種々の内部I/Oコントローラ(例えば、2156および2158)および再構成可能論理素子(例えば、FPGAチップ2159および2165)に含まれる。例示としては、すべてのボードのすべてのチップの同じ繰り返しの論理構造の代わりにこの制御論理の所定部分を示すだけでよい。図69の点線2150内の変換システム2140の一部は、制御論理の1サブセットを含む。ここで、この制御論理を図70〜73を参照してより詳細に説明する。
【0671】
制御論理のこの特定のサブセットにおける構成要素は、外部I/Oコントローラ2152、トライステートバッファ2179、内部I/Oコントローラ2156(CTRL1)、再構成論理素子2157(ボード1のチップ0を示すチップ0_1)、ならびにこれらの構成要素に結合された種々のバスおよび制御ラインを含む。特に、図70は、データインサイクルに対して使用される制御論理のその部分を示す。ここで外部インタフェース(外部I/Oエクスパンダ2139)およびRCC計算システム2141からのデータがRCCハードウェアアレイ2190に送達される。図72はデータインサイクルのタイミング図である。図71は、データアウトサイクルに対して使用される制御論理のその部分を示す。ここでRCCハードウェアアレイ2190からのデータがRCC計算システム2141および外部インタフェース(外部I/Oエクスパンダ2139)に送達される。図73はデータアウトサイクルのタイミング図である。
【0672】
(データイン)
本発明の1実施形態によるデータイン制御論理は、RCC計算システムまたはRCCハードウェアアレイとの外部インタフェースのいずれかから送達されるデータを処理する役割を担う。データイン制御論理の1つの特定のサブセット2150(図69参照)は、図70に示され、かつ外部I/Oコントローラ2200、トライステートバッファ2202、内部I/Oコントローラ2203、再構成可能論理素子2204、およびその間のデータ伝送を可能にする種々のバスおよび制御ラインを含む。外部バッファ2201もこのデータイン実施形態のために示す。このサブセットはデータイン動作に対して必要な論理を例示する。ここで外部インタフェースおよびRCC計算システムからのデータがRCCハードウェアアレイに送達される。図70のデータイン制御論理および図72のデータインタイミング図をまとめて説明する。
【0673】
本発明のこのデータイン実施形態において2つのタイプのデータサイクル(グローバルサイクルおよびソフトウェア対ハードウェア(S2H)サイクル)が使用される。グローバルサイクルは、クロックなどのRCCハードウェアアレイにおけるすべてのチップに向けられたいずれのデータ、リセット、およびRCCハードウェアアレイにおける多くの異なるノードに向けられた所定の他のS2Hデータに対して使用される。これらの後者の「グローバル」S2Hデータに対して、グローバルサイクルを介してこれらのデータを送信するほうが連続のS2Hデータよりもより実現可能である。
【0674】
ソフトウェア対ハードウェアサイクルを使用して、RCC計算システムにおけるテストベンチプロセスからRCCハードウェアアレイへすべてのボードにおいてチップからチップへ順次データを送信する。ユーザ設計のハードウェアモデルは数ボードにわたって分配されるので、テストベンチデータはデータ評価のために各チップに提供されなければならない。したがって、データは、一度に1内部ノードの割合で、各チップにおける各内部ノードに順次送達される。順次送達することで、特定の内部ノードに対して指定されたデータがRCCハードウェアアレイにおけるすべてのチップによって処理されることが可能となる。なぜなら、ハードウェアモデルが複数のチップの間に分配されているからである。
【0675】
このデータ評価に対して、変換は2つのアドレス空間(S2HおよびCLK)を提供する。上記のように、S2HおよびCLK空間はカーネルからハードウェアモデルへの一次入力である。ハードウェアモデルは、実質的にすべてのレジスタ構成要素およびユーザの回路設計の組み合わせ構成要素を保持する。さらに、ソフトウェアクロックはソフトウェアでモデル化され、かつハードウェアモデルとインタフェースをとるようにCLK I/Oアドレス空間において提供される。カーネルはシミュレーション時間を進め、アクティブなテストベンチ構成要素を探し、かつクロック構成要素を評価する。いずれかのクロックエッジがカーネルによって検出された場合、レジスタおよびメモリが更新され、かつ組み合わせ構成要素を介した値が伝播される。したがって、ハードウェアアクセラレーションモードが選択される場合、これらの空間における値のいずれの変化もハードウェアモデルを始動して論理状態を変化させる。
【0676】
データ転送の間、DATA_XSFR信号は論理1である。この時間の間、ローカルバス2222〜2230は変換システムによって使用され以下のデータサイクルを用いてデータを伝送する。(1)RCC計算システムからRCCハードウェアアレイおよびCLK空間へのグローバルデータ、(2)外部インタフェースからRCCハードウェアアレイおよび外部バッファへのグローバルデータ、および(3)RCC計算システムからRCCハードウェアアレイへのS2Hデータ(各ボードにおいて一度に1チップの割合)。したがって、最初の2つのデータサイクルはグローバルサイクルの一部であり、かつ最後のデータサイクルはS2Hサイクルの一部である。
【0677】
グローバルデータがRCC計算システムからRCCハードウェアアレイへ送信されるデータイングローバルサイクルの第1の部分で、外部I/Oコントローラ2200は、ライン2255上でCPU_IN信号を論理「1」に使用可能にする。ライン2255はトライステートバッファ2202のイネーブル入力に結合される。ライン2255上の論理「1」の場合、トライステートバッファ2202は、ローカルバス2222上のデータがトライステートバッファ2202の他方側のローカルバス2223〜2230を通ることを可能にする。この特定の例において、ローカルバス2223、2224、2225、2226、2227、2228、2229、および2230は、それぞれLD3、LD4(外部I/Oコントローラ2200から)、LD6(外部I/Oコントローラ2200から)、LD1、LD6、LD4、LD5、およびLD7に対応する。
【0678】
グローバルデータはこれらのローカルバスラインから内部I/Oコントローラ2203におけるバスライン2231〜2235へ、そして次いでFDバスライン2236〜2240へ伝播する。この例において、FDバスライン2236、2237、2238、2239、および2240はそれぞれFDバスラインFD1、FD6、FD4、FD5、およびFD7に対応する。
【0679】
これらのFDバスライン2236〜2240は、再構成可能論理素子2204におけるラッチ2208〜2213への入力に結合される。この例において、再構成可能論理素子はチップ0_1(すなわち、ボード1におけるチップ0)に対応する。また、FDバスライン2236はラッチ2208に結合され、FDバスライン2237はラッチ2209および2211に結合され、FDバスライン2238はラッチ2210に結合され、FDバスライン2239はラッチ2212に結合され、かつFDバスライン2240はラッチ2213に結合される。
【0680】
これらのラッチ2208〜2213のそれぞれに対するイネーブル入力は、いくつかのグローバルポインタおよびソフトウェア対ハードウェア(S2H)ポインタに結合される。ラッチ2208〜2211へのイネーブル入力はグローバルポインタに結合され、かつラッチ2212〜2213へのイネーブル入力はS2Hポインタに結合される。いくつかのグローバルポインタの例はライン2241上のGLB_PTR0、ライン2242上のGLB_PTR1、ライン2243上のGLB_PTR2、およびライン2244上のGLB_PTR3を含む。いくつかのS2Hポインタの例は、ライン2245上のS2H_PTR0およびライン2246上のS2H_PTR1を含む。これらのラッチへのイネーブル入力はこれらのポインタに結合されるので、それぞれのラッチは、ユーザ設計のハードウェアモデルにおけるそれらの目的の宛先ノードにデータを適切なポインタ信号なしにはラッチし得ない。
【0681】
これらのグローバルおよびS2Hポインタ信号は、データインポインタ状態マシン2214によって出力2254上に生成される。データインポインタ状態マシン2214は、ライン2253上のDATA_XSFRおよびF_WRによって制御される。内部I/Oコントローラ2203はDATA_XSFRおよびF_WRをライン2253上に生成する。DATA_XSFRは、RCCハードウェアアレイとRCC計算システムまたは外部インタフェースのいずれかとの間のデータ転送が所望の場合はいつでも常に論理「1」である。F_RD信号とは対照的に、F_WR信号は、RCCハードウェアアレイへの書き込みが所望される場合はいつも論理「1」である。F_RD信号を介する読み出しは、RCCハードウェアアレイからRCC計算システムまたは外部インタフェースのいずれかへのデータの送達を必要とする。DATA_XSFRおよびF_WR信号の両方が論理「1」である場合、データインポインタ状態マシンは、適切なプログラムされた順序で適切なグローバルまたはS2Hポインタ信号を生成し得る。
【0682】
これらのラッチの出力2247〜2252は、ユーザ設計のハードウェアモデルにおける種々の内部ノードに結合される。これらの内部ノードのいくつかはユーザ設計の入力ピンアウトに対応する。ユーザ設計は、通常ピンアウトを介してアクセス可能でない他の内部ノードを有するが、これらの非ピンアウト内部ノードには他のデバッグ目的がある。すなわち、ユーザ設計において種々の内部ノード(それらが入力ピンアウトであるかないかにかかわらず)に刺激を印加することを所望する設計者に柔軟性を与えることである。外部インタフェースによってユーザ設計の複雑なハードウェアモデルに印加される刺激に対して、データイン論理および入力ピンアウトに対応するこれらの内部ノードが関係する。例えば、ユーザ設計がCRTC6845ビデオコントローラである場合、いくつかのピンアウトは以下のとおりであり得る。
【0683】
LPSTB−ライトペンストローブピン
〜RESET−6845コントローラをリセットするための低レベル信号
RS−レジスタ選択
E−イネーブル
CLK−クロック
〜CS−チップ選択
他の入力ピンアウトはまた、このビデオコントローラにおいて利用可能である。外部へのインタフェースである入力ピンアウトの数に基づいて、ノードの数およびしたがってラッチおよびポインタの数は容易に決定され得る。RCCハードウェアアレイにおいて構成されるあるハードウェアモデルは、例えば、総数180ラッチ(=30×6)に対してGLB_PTR0、GLB_PTR1、GLB_PTR2、GLB_PTR3、S2H_PTR0、およびS2H_PTR1のそれぞれに関連する30の別個のラッチを有し得る。他の設計において、GLB_PTR4〜GLB_PTR30などのより多くのグローバルポインタが必要に応じて使用され得る。同様に、S2H_PTR2〜S2H_PTR30などのより多くのS2Hポインタが必要に応じて使用され得る。これらのポインタおよびそれらの対応のラッチは、各ユーザ設計のハードウェアモデルの要件に基づく。
【0684】
図70および72に戻る。FDバスライン上のデータは、ラッチが適切なグローバルポインタまたはS2Hポインタ信号を用いて使用可能にされる場合にのみ、これらの内部ノードへ転送される。そうでなければ、これらのノードはFDバス上のいずれのデータによっても駆動されない。F_WRがCPU_IN=1期間の前半において論理「1」である場合、GLB_PTR0は論理「1」であり、FD1上のデータを対応の内部ノードへライン2247を介して伝送する。使用可能とするためのGLB_PTR0に依存する他のラッチが存在する場合、これらのラッチはまたデータをそれらの対応する内部ノードにラッチする。CPU_IN=1期間の後半において、F_WRは再度論理「1」になり、これによりGLB_PTR1を起動して論理「1」に上げる。これにより、FD6上のデータは、ライン2248に結合された内部ノードへ伝送される。また、これにより、ラッチ2205によってライン2216にラッチされるべきライン2223上にソフトウェアクロック信号を送信し、かつGLB_PTR1をイネーブルライン2215上に送信する。このソフトウェアクロックはターゲットシステムおよび他の外部I/Oデバイスへの外部クロック入力へ送達される。GLB_PTR0およびGLB_PTR1はデータイングローバルサイクルの第1の部分のためにのみ使用されるので、CPU_INは論理「0」を返し、そしてこれによりRCC計算システムからRCCハードウェアアレイへのグローバルデータの送達が完了する。
【0685】
ここでデータイングローバルサイクルの第2の部分を説明する。ここで外部インタフェースからのグローバルデータはRCCハードウェアおよび外部バッファへ送達される。やはり、ユーザ設計に向けられた、ターゲットシステムまたは外部I/Oデバイスからの種々の入力ピンアウト信号は、ハードウェアモデルおよびソフトウェアモデルへ提供されなければならない。これらのデータは、適切なポインタを使用することによってハードウェアモデルへ送達され、かつ内部ノードへ伝送されるようにラッチされ得る。これらのデータはまた、RCC計算システムによって後で取り出すための外部バッファ2201にまずそのデータを格納することによってソフトウェアモデルに送達され、ソフトウェアモデルの内部状態を更新する。
【0686】
ここでCPU_INは論理「0」であり、かつEXT_INは論理「1」である。したがって、外部I/Oコントローラ2200におけるトライステートバッファ2206は使用可能とされバスライン2217および2218などのPCIバスライン上にデータを載せる。これらのPCIバスラインはまた、外部バッファ2201における格納のためにFDバスライン2219に結合される。EXT_IN信号が論理「1」である期間の前半において、GLB_PTR2は論理「1」である。これによりデータはFD4上のデータ(バスライン2217、2224、およびローカルバスライン2228(LD4)を介して)ライン2249に結合されたハードウェアモデルにおける内部ノードにラッチされるようにラッチする。
【0687】
EXT_IN信号が論理「1」である期間の後半において、GLB_PTR3は論理「1」である。これによりデータはFD6上のデータ(バスライン2218、2225、およびローカルバスライン2227(LD6)を介して)ライン2250に結合されたハードウェアモデルにおける内部ノードにラッチされるようにラッチする。
【0688】
上記のように、ターゲットシステムまたはいくつかの他の外部I/Oデバイスからのこれらのデータはまた、RCC計算システムによって後で取り出すための外部バッファ2201にまずそのデータを格納することによってソフトウェアモデルに送達され、ソフトウェアモデルの内部状態を更新する。バスライン2217および2218上のデータは、FDバスFD[63:0]2219を介して外部バッファ2201へ提供される。各データが外部バッファ2201において格納される特定メモリアドレスはメモリアドレスカウンタ2207によってバス2220を介して外部バッファ2201へ提供される。そのような格納を可能にするために、WR_EXT_BUF信号が外部バッファ2201へライン2221を介して提供される。外部バッファ2201が一杯になる前に、RCC計算システムは外部バッファ2201の内容を読み出してソフトウェアモデルに対して適切な更新をし得るようにする。RCCハードウェアアレイにおけるハードウェアモデルの種々の内部ノードへ送達されたいずれのデータによってもおそらくハードウェアモデルになんらかの内部状態変化が生じる。RCC計算システムはソフトウェアにおけるユーザ設計全体のモデルを有するので、ハードウェアモデルにおけるこれらの内部状態変化はまた、ソフトウェアモデルにおいて反映されるべきである。これによりデータイングローバルサイクルが終了する。
【0689】
ここでS2Hサイクルを説明する。S2Hサイクルを使用してテストベンチデータをRCC計算システムからRCCハードウェアアレイへ送達し、そして次いでそのデータを各ボードについて順次1つのチップから次のチップへ移動させる。CPU_IN信号は論理「1」となり、他方EXT_IN信号は論理「0」となる。これは、RCC計算システムとRCCハードウェアアレイとの間のデータ転送を示す。外部インタフェースは関与しない。CPU_IN信号はまた、トライステートバッファ2202がデータをローカルバス2222から内部I/Oコントローラ2203へ転送させることを可能にする。
【0690】
CPU_IN=1期間の開始において、S2H_PTR0は論理「1」になる。これは、FD5上の(ローカルバス2222、ローカルバスライン2229、バスライン2234、およびFDバス2239を介する)データがライン2251に結合されるハードウェアモデルにおける内部ノードにラッチされるようにラッチする。CPU_IN=1期間の第2部分において、S2H_PTR1は論理「1」となる。これは、FD7上の(ローカルバス2222、ローカルバスライン2230、バスライン2235、およびFDバス2240を介する)データがライン2252に結合されるハードウェアモデルにおける内部ノードにラッチされるようにラッチする。順次データ評価中に、RCC計算システムからのデータは、まずチップm1に、次いでチップ0_1(すなわち、ボード1上のチップ0)、チップ1_1(すなわち、ボード0上のチップ1)、最後のボードの最後のチップ、チップ7_8(すなわち、ボード8上のチップ7)まで送達される。チップm2が利用可能な場合、データはまた同様にこのチップに転送される。
【0691】
このデータ転送の終了時に、DATA_XSFRは論理「0」に戻る。なお、外部インタフェースからのI/Oは、グローバルサイクル中にグローバルデータおよびハンドルとして処理される。これでデータイン制御論理およびデータインサイクルの説明を終える。
【0692】
(データアウト)
ここで本発明のデータアウト制御論理実施形態を説明する。本発明の実施形態のデータアウト制御論理はRCCハードウェアアレイからRCC計算システムおよび外部インタフェースへ送達されたデータの処理を担う。刺激(外部またはその他)に応答してデータを処理する経過中、ハードウェアモデルは目的のアプリケーションまたはいくつかのI/Oデバイスが必要とし得る所定の出力データを生成する。これらの出力データは、別のアプリケーションまたはデバイスがそれ自身の処理のために必要とし得る実体的な(substantive)データ、アドレス、制御情報、または他の関連情報であり得る。RCC計算システム(ソフトウェアにおいて他の外部I/Oデバイスのモデルを有し得る)、ターゲットシステム、または外部I/Oデバイスへのこれらの出力データは、種々の内部ノード上へ提供される。データイン論理について上記したように、これらの内部ノードのいくつかはユーザ設計の出力ピンアウトに対応する。ユーザ設計は、通常はピンアウトを介しては利用可能でない他の内部ノードを有するが、これらの非ピンアウト内部ノードには他のデバッグ目的がある。すなわち、ユーザ設計において種々の内部ノード(それらが入力ピンアウトであるかないかにかかわらず)に刺激を読み出し、そして分析することを所望する設計者に柔軟性を与えることである。外部インタフェースによってユーザ設計の複雑なハードウェアモデルに印加される刺激に対して、データイン論理および入力ピンアウトに対応するこれらの内部ノードが関係する。
【0693】
例えば、ユーザ設計がCRTC6845ビデオコントローラである場合、いくつかのピンアウトは以下のとおりであり得る。
【0694】
MA0〜MA13 メモリアドレス
D0〜D7 データバス
DE ディスプレイイネーブル
CURSOR カーソル位置
VS 垂直同期
HS 水平同期
他の入力ピンアウトはまたこのビデオコントローラにおいて利用可能である。外部へのインタフェースである入力ピンアウトの数に基づいて、ノードの数およびしたがってゲート論理およびポインタの数は容易に決定され得る。したがって、ビデオコントローラ上の出力ピンアウトMA0〜MA13はビデオRAMのためのメモリアドレスを提供する。VS出力ピンアウトは、垂直同期のための信号を提供し、かつしたがってモニタ上で垂直の再トレース(retrace)を起こす。出力ピンアウトD0〜D7は、ターゲットシステムにおけるCPUによって内部6845レジスタにアクセスするための双方向データバスを形成する8つの端子を形成する。これらの出力ピンアウトは、ハードウェアにおける所定の内部ノードに対応する。当然ながら、これらの内部ノードの数および性質はユーザ設計に依存して変化する。
【0695】
これらの出力ピンアウト内部ノードからのデータはRCC計算システムに提供されなければならない。なぜなら、RCC計算システムはソフトウェアにおけるユーザ設計全体のモデルを含み、かつハードウェアモデルにおいて発生するイベントはいずれも、対応の変化がなされ得るようにソフトウェアモデルに通信されなければならない。このように、ソフトウェアモデルは、ハードウェアモデルにおける情報と整合する情報を有し得る。したがって、RCC計算システムは、ユーザまたは設計者が外部I/Oエクスパンダ(expander)上のポートのうちの1つに実際のデバイスを接続するのではなくソフトウェアにおいてモデル化すると決定したI/Oデバイスのデバイスモデルを有し得る。例えば、ユーザは、外部I/Oエクスパンダポートのうちの1つにおいて実際のモニタまたはスピーカをプラグするのではなくソフトウェアにおいてモニタまたはスピーカをモデル化するほうがより容易でありかつより有効であると決定し得る。さらに、ハードウェアモデルにおけるこれらの内部ノードからのデータはターゲットシステムおよびいずれの他の外部のI/Oデバイスに提供されなければならない。これらの出力ピンアウト内部ノードにおけるノードがRCC計算システムならびにターゲットシステムおよび他の外部I/Oデバイスに送達されるためには、本発明の1実施形態のデータアウト制御論理が変換(convertification)システムにおいて提供される。
【0696】
データアウト制御論理は、RCCハードウェアアレイからRCC計算システム2141および外部インタフェース(外部I/Oエクスパンダ2139)へのデータの転送を含むデータアウトサイクルを使用する。図69において、外部インタフェース(外部I/Oエクスパンダ2139)と変換システム2140との間でデータを転送するための制御論理が各ボード2145〜2149にある。制御論理の主部分は、外部I/Oコントローラ2152にあるが、他の部分は種々のI/Oコントローラ(例えば、2156および2158)および再構成可能論理素子(例えば、FPGAチップ2159および2165)にある。ここでも、例としては、すべてのボードにおけるすべてのチップについての同じ繰り返しの論理構造の代わりにこの制御論理の所定部分を示すだけで十分である。図69の点線2150内の変換システム2140の部分は1サブセットの制御論理を含む。ここでこの制御論理を図71および73を参照してより詳細に説明する。図71は、データアウトサイクルのために使用される制御論理の一部を例示する。図73はデータアウトサイクルのタイミング図である。
【0697】
1つの特定のサブセットのデータアウト制御論理は、図71に示され、かつ外部I/Oコントローラ2300、トライステートバッファ2301、内部I/Oコントローラ2302、再構成可能論理素子2303、ならびにその間でデータ転送を可能にする種々のバスおよび制御ラインを含む。このサブセットは、データアウト動作のために必要な論理を例示する。ここで、外部インタフェースおよびRCC計算システムからのデータはRCCハードウェアアレイに送達される。図71のデータアウト制御論理および図73のデータアウトタイミング図をまとめて説明する。
【0698】
データインサイクルの2つのサイクルタイプとは対照的に、データアウトサイクルは1つだけのタイプのサイクルを含む。データアウト制御論理はRCCハードウェアモデルからのデータが(1)RCC計算システム、および次いで(2)RCC計算システムおよび(ターゲットシステムおよび外部I/Oデバイスとの)外部インタフェースへ順次送達される。すなわち、データアウトサイクルは、RCCハードウェアアレイにおけるハードウェアモデルの内部ノードからのデータが第1にRCC計算システム、そして次いで第2にRCC計算システムおよび各チップにおける外部インタフェースへ、各ボードにおいて一度に1チップかつ一度に1ボードの割合で、送達されることを必要とする。
【0699】
データイン論理と同様に、ポインタを使用して内部ノードからRCC計算システムおよび外部インタフェースへのデータを選択(またはゲーティング)する。図71および73において例示される1実施形態において、データアウトポインタ状態マシン2319は、ハードウェア対ソフトウェアデータおよびハードウェア対外部インタフェースデータの両方のためのバス2359上の5つのポインタH2S_PTR[4:0]を生成する。データアウトポインタ状態マシン2319は、ライン2358上のDATA_XSFRおよびF_RD信号によって制御される。内部I/Oコントローラ2302は、ライン2358上にDATA_XSFRおよびF_RD信号を生成する。DATA_XSFRは、RCCハードウェアアレイとRCC計算システムまたは外部インタフェースのいずれかとの間のデータ転送が所望される場合はいつでも常に論理「1」である。F_WR信号とは対照的に、F_RDは、RCCハードウェアアレイからの読み出しが所望される場合はいつでも論理「1」である。DATA_XSFRおよびF_RD信号の両方が論理「1」であれば、データポインタ状態マシン2319は適切なプログラムされた順序で適切なH2Sポインタ信号を生成し得る。他の実施形態は、ユーザ設計のために必要に応じてより多くのポインタ(またはより少ないポインタ)を使用し得る。
【0700】
これらのH2Sポインタ信号はゲート論理に提供される。ゲート論理への1セットの入力2353〜2357は、いくつかのANDゲート2314〜2318へ向けられる。その他のセットの入力2348〜2352は、ハードウェアモデルの内部ノードに結合される。したがって、ANDゲート2314は内部ノードからの入力2348およびH2S_PTR0からの入力2353を有し、ANDゲート2315は内部ノードからの入力2349およびH2S_PTR1からの入力2354を有し、ANDゲート2316は内部ノードからの入力2350およびH2S_PTR2からの入力2355を有し、ANDゲート2317は内部ノードからの入力2351およびH2S_PTR3からの入力2356を有し、かつANDゲート2318は内部ノードからの入力2352およびH2S_PTR4からの入力2357を有する。適切なH2S_PTRポインタなしには、内部ノードはRCC計算システムまたは外部インタフェースのいずれに対しても駆動されない。
【0701】
これらのANDゲート2314〜2318のそれぞれの出力2343〜2347は、ORゲート2310〜2313に結合される。したがって、ANDゲート出力2343はORゲート2310の入力に結合され、ANDゲート出力2344はORゲート2311の入力に結合され、ANDゲート出力2345はORゲート2311の入力に結合され、ANDゲート出力2346はORゲート2312の入力に結合され、かつANDゲート出力2347はORゲート2313の入力に結合される。なお、ANDゲート2315の出力2344は共有されないORゲートに結合されない。むしろ、出力2344はORゲート2311に結合される。ORゲート2311はまたANDゲート2316の出力2345に結合される。ORゲート2310〜2313へのその他の入力2360〜2366は、他のANDゲート(図示せず)(それ自身はほかの内部ノードおよびH2S_PTRポインタへ結合される)の出力に結合され得る。これらのORゲートおよびそれらの特定の入力の使用は、ユーザ設計および構成されたハードウェアモデルに基づく。したがって、他の設計において、より多くのポインタが使用され得、かつANDゲート2315からの出力2344は、ORゲート2311ではない異なるORゲートに結合される。
【0702】
ORゲート2310〜2313の出力2339〜2342はFDバスラインFD0、FD3、FD1、およびFD4に結合される。ユーザ設計のこの特定の例では、4つの出力ピンアウト信号だけがRCC計算システムおよび外部インタフェースに送達され得る。したがって、FD0はORゲート2310の出力に結合され、FD3はORゲート2311の出力に結合され、FD1はORゲート2312の出力に結合され、かつFD4はORゲート2313の出力に結合さる。これらのFDバスラインは、ローカルバスライン2330〜2333に内部I/Oコントローラ2302における内部ライン2334〜2338を介して結合される。この実施形態において、ローカルバスライン2330はLD0であり、ローカルバスライン2331はLD3であり、ローカルバスライン2332はLD1であり、かつローカルバスライン2333はLD4である。
【0703】
これらのローカルバスライン2330〜2333上のデータがRCC計算システムに送達されることを可能にするために、これらのローカルバスラインはトライステートバッファ2301に結合される。トライステートバッファ2301は、その正常状態において、データがローカルバスライン2330〜2333からローカルバス2320へ転送されることを可能にする。対照的に、データインの間、データは、CPU_IN信号がトライステートバッファ2301に提供される場合にのみ、RCC計算システムからRCCハードウェアアレイへ転送されることが可能とされる。
【0704】
これらのローカルバスライン2330〜2333上のデータが外部インタフェースに送達されることを可能とするために、ライン2321〜2324が提供される。ライン2321はライン2330および外部I/Oコントローラ2300における所定のラッチ(図示せず)に結合され、ライン2323はライン2332および外部I/Oコントローラ2300におけるラッチ2305に結合され、かつライン2324はライン2333および外部I/Oコントローラ2300におけるラッチ2306に結合される。
【0705】
これらのラッチ2305および2306の各出力は、バッファに結合され、そして次いで外部インタフェースに結合される。次いで外部インタフェースはターゲットシステムまたは外部I/Oデバイスの適切な出力ピンアウトに結合される。したがって、ラッチ2305の出力はバッファ2307およびライン2327に結合される。また、ラッチ2306の出力は、バッファ2308およびライン2328に結合される。別のラッチ(図示せず)の別の出力はライン2329に結合され得る。この例において、ライン2327〜2329は、ターゲットシステムまたは所定の外部I/Oデバイスのワイヤ1、ワイヤ4、およびワイヤ3にそれぞれ対応する。最後に、ハードウェアモデルから外部インタフェースへのデータ転送の間に、ユーザ設計のハードウェアモデルは、ライン2350に結合された内部ノードがライン2329上のワイヤ3に対応し、ライン2351に結合された内部ノードがライン2327上のワイヤ1に対応し、かつライン2352に結合された内部ノードがライン2328上のワイヤ4に対応するように構成される。同様に、ワイヤ3はライン2331上のLD3に対応し、ワイヤ1はライン2332上のLD2に対応し、かつワイヤ4はライン2333上のLD4に対応する。
【0706】
ルックアップテーブル2309はこれらのラッチ2305および2306への入力が可能なように構成される。ルックアップテーブル2309はライン2367上のF_RD信号によって制御される。F_RD信号は、ルックアップテーブルアドレスカウンタ2304の動作を起動する。各カウンタの増分ごとに、ポインタはルックアップテーブル2309における特定の行を使用可能にする。その特定の行におけるエントリ(またはビット)が論理「1」であるならば、ルックアップテーブル2309におけるその特定のエントリに結合されたLUT出力ラインがその対応のラッチを使用可能にし、そしてデータを外部インタフェースに転送し、そして最終的にはターゲットシステムまたは所定の外部I/Oデバイスにおける所望の宛先に転送される。例えば、LUT出力ライン2325はラッチ2305へのイネーブル入力に結合され、かつLUT出力ライン2326はラッチ2306へのイネーブル入力に結合される。
【0707】
この例において、ルックアップテーブル2309の行0〜3は、チップm1における内部ノードのための出力ピンアウトワイヤに対応するラッチを使用可能とするようにプログラムされる。同様に、行4〜6は、チップ0_1(すなわち、ボード1におけるチップ0)における内部ノードのための出力ピンアウトワイヤに対応するラッチを使用可能とするようにプログラムされる。行4において、ビット3は論理「1」である。行5において、ビット1は論理「1」である。行6において、ビット4は論理「1」である。すべての他のエントリまたはビット位置は論理「0」である。ルックアップテーブルにおける任意の所定のビット位置に対して、1つのエントリだけが論理「1」である。なぜなら、1つの出力ピンアウトワイヤは複数のI/Oデバイスを駆動できないからである。言い換えると、ハードウェアモデルにおける出力ピンアウト内部ノードはデータを外部インタフェースに結合された1つだけのワイヤにしか提供し得ないからである。
【0708】
上記のように、データアウト制御論理は、RCCハードウェアモデルにおける各チップにおける各再構成可能論理素子におけるデータが(1)RCC計算システム、および次いで(2)RCC計算システムおよび(ターゲットシステムおよび外部I/Oデバイスとの)外部インタフェース共に順次送達される。RCC計算システムはこれらのデータを必要とする。なぜなら、RCC計算システムは、ソフトウェアにおけるいくつかのI/Oデバイスのモデルを有し、かつこれらのモデル化I/Oデバイスのうちの1つを対象とするデータに対して、RCC計算システムは、その内部状態がRCCハードウェアアレイにおけるハードウェアモデルの状態と整合するようにそれらをモニタする必要がある。図71および73において例示されるこの例において、7つの内部ノードだけが、RCC計算システムおよび外部インタフェースへの出力のために駆動され得る。これらの内部ノードのうちの2つはチップm1中にあり、かつその他の5つの内部ノードはチップ0_1(すなわち、ボード1におけるチップ0)中にある。当然ながら、これらおよび他のチップにおける内部ノードが特定のユーザ設計に対して必要であり得るが、図71および73はこれら7つのノードのみを示すのみであり得る。
【0709】
データ転送の間、DATA_XSFR信号は論理「1」である。この時間の間、ローカルバス2330〜2333は変換システムによって使用され、順次RCCハードウェアアレイにおける各ボードにおける各チップからRCC計算システムおよび外部インタフェースの両方へデータを転送する。DATA_XSFRおよびF_RD信号は、出力ピンアウト内部ノードのための適切なゲートへの適切なポインタ信号H2S_PTR[4:0]を生成するためのデータアウトポインタ状態マシンの動作を制御する。F_RD信号はまた、内部ノードデータから外部インタフェースへの送達のためのルックアップテーブルアドレスカウンタ2304を制御する。
【0710】
チップm1における内部ノードがまず処理され得る。データ転送サイクルの開始時にF_RDが論理「1」へ上がると、チップm1におけるH2S_PTR0は論理「1」へ上がる。これにより、H2S_PTR0に依存するチップm1におけるこれらの内部ノードにおけるデータがRCC計算システムにトライステートバッファ2301およびローカルバス2320を介して転送される。ルックアップテーブルアドレスカウンタ2304はカウントして、そしてルックアップテーブル2309の行0をポイントし、チップm1における適切なデータにおいて外部インタフェースにラッチする。F_RD信号は再度論理「1」に上がり、H2S_PTR1によって駆動され得る内部ノードでのデータは、RCC計算システムおよび外部インタフェースに送達される。H2S_PTR1は論理「1」に上がり、そして第2のF_RD信号に応答して、ルックアップテーブルアドレスカウンタ2304はカウントして、そしてルックアップテーブル2309の行1をポイントし、チップm1における適切なデータにおいて外部インタフェースにラッチする。
【0711】
ここで再構成可能論理素子2303(すなわち、ボード1におけるチップ0_1、またはチップ0)における5つの内部ノードが処理され得る。この例において、H2S_PTR0およびH2S_PTR1に関連する2つの内部ノードからのデータはRCC計算システムだけに送達され得る。H2S_PTR2、H2S_PTR3、およびH2S_PTR4に関連する3つの内部ノードからのデータはRCC計算システムおよび外部インタフェースに送達され得る。
【0712】
F_RDが論理「1」に上がると、チップ2303におけるH2S_PTR0は論理「1」になる。これにより、H2S_PTR0に依存するチップ2303におけるこれらの内部ノードにおけるデータはRCC計算システムへトライステートバッファ2301およびローカルバス2320を介して転送される。この例において、ライン2348に結合された内部ノードはライン2353上のH2S_PTR0に依存する。F_RD信号が再度論理「1」になると、H2S_PTR1によって駆動される内部ノードでのデータはRCC計算システムに送達される。ここで、ライン2349に結合された内部ノードが影響を受ける。このデータはライン2331および2322を介してLD3へ転送される。
【0713】
F_RD信号が再度論理「1」になると、H2S_PTR2は論理「1」となり、かつライン2350に結合された内部ノードでのデータはLD3上に提供される。このデータはRCC計算システムおよび外部インタフェースの両方に提供される。トライステートバッファ2301は、データをローカルバス2320に、そして次いでRCC計算システムに転送することを可能にする。外部インタフェースに関して、このデータは、イネーブルH2S_PTR2信号によってライン2331および2322を介してLD3に提供される。F_RD信号に応答して、ルックアップテーブルアドレスカウンタ2304はカウントして、そしてルックアップテーブル2309の行4をポイントし、外部インタフェースでライン2350からライン2329(ワイヤ3)に結合されたこの内部ノードからの適切なデータにおいてラッチする。
【0714】
F_RD信号が再度論理「1」になると、H2S_PTR3は論理「1」となり、かつライン2351に結合された内部ノードでのデータはLD1上に提供される。このデータは、RCC計算システムおよび外部インタフェースの両方に提供される。トライステートバッファ2301は、データをローカルバス2320に、そして次いでRCC計算システムに転送することを可能にする。外部インタフェースに関して、このデータは、イネーブルH2S_PTR3信号によってライン2332および2323を介してLD1に提供される。F_RD信号に応答して、ルックアップテーブルアドレスカウンタ2304はカウントして、そしてルックアップテーブル2309の行5をポイントし、外部インタフェースでライン2351からライン2327(ワイヤ1)に結合されたこの内部ノードからの適切なデータにおいてラッチする。
【0715】
F_RD信号が再度論理「1」になると、H2S_PTR4は論理「1」となり、かつライン2352に結合された内部ノードでのデータはLD4上に提供される。このデータは、RCC計算システムおよび外部インタフェースの両方に提供される。トライステートバッファ2301は、データをローカルバス2320に、そして次いでRCC計算システムに転送することを可能にする。外部インタフェースに関して、このデータは、イネーブルH2S_PTR4信号によってライン2333および2324を介してLD4に提供される。F_RD信号に応答して、ルックアップテーブルアドレスカウンタ2304はカウントして、そしてルックアップテーブル2309の行6をポイントし、外部インタフェースでライン2352からライン2328(ワイヤ4)に結合されたこの内部ノードからの適切なデータにおいてラッチする。
【0716】
チップm1の内部ノードでのデータをまずRCC計算システムに、そして次いでRCC計算システムおよび外部インタフェースの両方に転送するこの処理は順次その他のチップについで継続される。第1に、チップm1の内部ノードが駆動された。第2に、チップ0_1(チップ2303)の内部ノードが駆動された。次に、チップ1_1の内部ノードがあれば駆動され得る。この動作は、最後のボードにおける最後のチップにおける最後のノードが駆動されるまで継続する。したがって、チップ7_8の内部ノードがあれば駆動され得る。最後に、チップm2の内部ノードがあれば駆動され得る。
【0717】
図71はチップ2303のみにおける内部ノードを駆動するためのデータアウト制御論理を示すが、他のチップはまた、RCC計算システムおよび外部インタフェースに駆動される必要のあり得る内部ノードを有する。内部ノードの数にかかわらず、データアウト制御論理はデータを1つのチップにおける内部ノードからRCC計算システムへ転送し得、そして次いで別のサイクルで、同じチップにおける異なるセットの内部ノードをRCC計算システムおよび外部インタフェースの共に対して駆動する。次いで、データアウト制御論理は次のチップに移動し、そしてまずRCC計算システムに対して指定されたデータを転送し、そして次いでRCC計算システムおよび外部インタフェースの両方に対する外部インタフェースに対して指定されたデータを転送する同じ2ステップ動作を行う。データが外部インタフェースを対象とする場合でさえ、RCC計算システムはそのデータを知らなければならない。なぜなら、RCC計算システムは、RCCハードウェアアレイにおけるハードウェアモデルの内部状態情報と整合する内部状態情報を有さなければならないソフトウェアにおけるユーザ設計全体のモデルを有するからである。
【0718】
(ボードレイアウト)
ここで、本発明の1実施形態の変換システムのボードレイアウトを図74を参照して説明する。ボードはRCCハードウェアアレイにおいて設置される。ボードレイアウトは、図8および36〜44に例示され、かつ添付の文に記載されるものと同様である。
【0719】
1実施形態において、RCCハードウェアアレイは6つのボードを含む。ボードm1はボード1に結合され、かつボード2はボード8に結合される。ボード1、ボード2、ボード3、およびボード8の結合および配置は、図8および36〜44を参照して上記された。
【0720】
ボードm1はチップm1を含む。ボードm1とその他のボードとの相互接続構造は、チップm1がボード1のチップ0、チップ2、チップ4、およびチップ6への南相互接続(South interconnect)に結合される。ボードm2とその他のボードとの相互接続構造は、チップm2がボード8のチップ0、チップ2、チップ4、およびチップ6への南相互接続に結合される。
【0721】
(X.例)
本発明の1実施形態の動作を例示するために、仮想ユーザ回路設計が使用され得る。構造化レジスタ転送レベル(RTL)HDLコードにおいて、ユーザ回路設計の例は以下のとおりである。
【0722】
【数7】
【0723】
このコードは図26において再生される。この回路設計の特定の機能の詳細は本発明を理解するために必要でない。しかし、ユーザがこのHDLコードを生成してシミュレーションのための回路を設計することを読者は理解するべきである。このコードによって表される回路はユーザによって設計されるような所定の関数を実行して入力信号に応答し、そして出力を生成する。
【0724】
図27は、図26を参照して説明されたHDLコードの回路図を示す。たいていの場合、ユーザはHDL形態でこの性質を表す前にこの性質の回路図を実際に生成し得る。いくつかの図面(schematic)キャプチャツールによって、実体回路図が入力可能となり、そして処理後、これらのツールは使用可能なコードを生成する。
【0725】
図28に示すように、シミュレーションシステムは構成要素タイプ分析を実行する。ユーザの特定の回路設計を表すとして図26に最初に提示されたHDLコードがここで分析された。「module register(clock,reset,d,q);」で開始し、かつ「endmodule」で終了し、かつさらに参照番号900で特定されるコードの最初の数行がレジスタ定義セクションである。
【0726】
コードの次の数行(参照番号907)は、所定のワイヤ相互接続情報を表す。当業者に公知であるようなHDLにおけるワイヤ変数を使用して、ゲートなどの構造エンティティ(entities)の間の物理的接続を表す。HDLはデジタル回路をモデルするために主に使用されるので、ワイヤ変数は必要な変数である。通常は、「q」(例えば、q1、q2、q3)は出力ワイヤラインを表し、かつ「d」(例えば、d1、d2、d3)は入力ワイヤラインを表す。
【0727】
参照番号908は、テストベンチである「sigin」を示す。レジスタ番号909は、テストベンチ入力である「sigout」を示す。
【0728】
参照番号901はレジスタ構成要素S1、S2、およびS3を示す。参照番号902は組み合わせ構成要素S4、S5、S6、およびS7を示す。なお、組み合わせ構成要素S4〜S7はレジスタ構成要素S1〜S3への入力である出力変数d1、d2、およびd3を有する。参照番号903はクロック構成応訴S8を示す。
【0729】
コードライン番号の次のシリーズはテストベンチ構成要素を示す。参照番号904はテストベンチ構成要素(ドライバ)S9を示す。参照番号905はテストベンチ構成要素(初期化)S10およびS11を示す。参照番号904はテストベンチ構成要素(モニタ)S12を示す。
【0730】
構成要素タイプ分析は以下のテーブルに要約される。
【0731】
【表15】
【0732】
構成要素タイプ分析に基づいて、システムは回路全体のためのソフトウェアモデルならびにレジスタおよび組み合わせ構成要素のためのハードウェアモデルを生成する。S1〜S3はレジスタ構成要素およびS4〜S7は組み合わせ構成要素である。これらの構成要素はハードウェアにおいてモデル化され、Sエミュレーションシステムのユーザがソフトウェアにおける回路全体をシミュレートするか、またはソフトウェアにおいてシミュレートしかつハードウェアにおいて選択的に高速化するかのいずれかを可能にする。いずれの場合も、ユーザはシミュレーションおよびハードウェア高速化モードを支配する。加えて、ユーザは、サイクルごとに開始、停止、値の検査、および入力値のアサートのソフトウェア制御をなおも維持しながらターゲットシステムを用いて回路をエミュレートし得る。
【0733】
図29は、同じ構造化RTLレベルHDLコードの信号ネットワーク分析を示す。図示されるように、S8、S9、S10、およびS11は、ソフトウェアにおいてモデル化または提供される。S9は本質的にsigin信号を生成するテストベンチプロセスであり、かつS12は本質的にsigout信号を受信するテストベンチも似たプロセスである。この例において、S9はランダムなsiginを生成して、回路をシミュレートする。しかし、レジスタS1〜S3および組み合わせ構成要素S4〜S7はハードウェアおよびソフトウェアにおいてモデル化される。
【0734】
ソフトウェア/ハードウェア境界に対して、システムは、ソフトウェアモデルとハードウェアモデルとのインタフェースをとるために使用される種々のレジデンス(residence)信号(すなわち、q1、q2、q3、CLK、sigin、sigout)のためのメモリ空間を割り当てる。
【0735】
【表16】
【0736】
図30は、この回路設計例についてのソフトウェア/ハードウェア分割の結果を示す。図30は、ソフトウェア/ハードウェア分割のより実現可能な例示である。ソフトウェア側910は、ハードウェア側912にソフトウェア/ハードウェア境界911およびPCIバス913を介して結合される。
【0737】
ソフトウェア側910はソフトウェアカーネルを含み、かつこれに制御される。一般に、カーネルは、Sエミュレーションシステムの動作を制御する主制御ループである。任意のテストベンチプロセスがアクティブである限り、カーネルはテストベンチ構成要素を評価し、クロック構成要素を評価し、クロックエッジを検出してレジスタおよびメモリを更新し、組み合わせ論理データを伝送し、かつシミュレーション時間を進める。カーネルはソフト側に常駐するが、動作またはステートメントのいくつかがハードウェアにおいて実行される。なぜなら、ハードウェアモデルがこれらのステートメントおよび動作に対して存在するからである。したがって、ソフトウェアはソフトウェアおよびハードウェアモデルの両方を制御する。
【0738】
ソフトウェア側910は、S1〜S12を含むユーザの回路のモデル全体を含む。ソフトウェア側のソフトウェア/ハードウェア境界部分はI/Oバッファまたはアドレス空間S2H、CLK、H2S、およびREGを含む。なお、ドライバテストベンチプロセスS9はS2Hアドレス空間に結合され、モニタテストベンチプロセスS12はH2Sアドレス空間に結合され、かつクロック生成器S8はクロックアドレス空間に結合される。レジスタS1〜S3出力信号q1〜q3はREG空間に割り当てられる。
【0739】
ハードウェアモデル912は組み合わせ構成要素S4〜S7のモデルを有し、純粋なハードウェア側に常駐する。ハードウェアモデル912のソフトウェア/ハードウェア境界上で、sigout、sigin、レジスタ出力q1〜q3、およびソフトウェアクロック916が実装される。
【0740】
ユーザのカスタム回路設計のモデルに加えて、システムはソフトウェアクロックおよびアドレスポインタを生成する。ソフトウェアクロックはレジスタS1〜S3への入力を可能にするための信号を提供する。上記のように、本発明のソフトウェアクロックは競合(race)条件および保持時間超過問題を除く。クロックエッジがソフトウェアにおいて主クロックによって検出されると、検出論理がハードウェアにおける対応の検出論理を起動する。その後、クロックエッジレジスタ916は、レジスタへの入力に常駐する任意のデータにおいてゲートへのレジスタイネーブル入力へのイネーブル信号を生成する。
【0741】
アドレスポインタ914はまた例および概念を目的として示される。アドレスポインタは実際には各FPGAチップにおいて実装され、かつデータが選択的および順次その宛先に転送されることを可能にする。
【0742】
組み合わせ構成要素S4〜S7はまた、レジスタ構成要素S1〜S3、sigin、およびsigoutに結合される。これらの信号はI/Oバス915上をPCIバス913へ/から伝播する。
【0743】
マッピング、配置、およびルーティングステップの前の、完全なハードウェアモデルが図31に示される(アドレスポインタを除く)。システムはまだモデルを特定チップにマッピングしていない。レジスタS1〜S3はI/Oバスおよび組み合わせ構成要素S4〜S6に結合され提供される。sigin、sigout、およびソフトウェアクロック920はまたモデル化される。
【0744】
一旦ハードウェアモデルが決定された場合、次いでシステムはモデルを1つ以上のチップにマッピング、配置、およびルーティングする。この特定の例は実際に1つのAlteraFLEX 10Kチップ上に実装され得るが、例示を目的としてこの例は2つのチップがこのハードウェアモデルを実装するために必要であり得ることを仮定し得る。図32はこの例についての1つの特定のハードウェアモデル対チップ分割の結果を示す。
【0745】
図32に示される完全なモデル(I/Oおよいクロックエッジレジスタを除く)は、点線で表されたチップ境界を伴う。この結果は、Sエミュレーションシステムのコンパイラによって生成され、その後、最終構成ファイルが生成される。したがって、ハードウェアモデルは、ワイヤライン921、922、および923に対する2つのチップ間に少なくとも3つのワイヤを必要とする。これら2つのチップ(チップ1およびチップ2)の間のピン/ワイヤの数を低減するために、別のモデル対チップ分割が生成されるべきか、または多重化方式が使用されるべきかいずれでもよい。
【0746】
図32において示されるこの特定の分割結果を分析すると、これら2つのチップ間のワイヤの数は、siginワイヤライン923をチップ2からチップ1へ移動することによって2つに低減され得る。実際に、図33にこの分割を例示する。図33における具体的な分割は、ワイヤの数にのみに基づく図32における分割よりも良好な分割のように見えるが、この例は、Sエミュレーションシステムが図32の分割を選択する前にマッピング、配置、およびルーティング操作が実行されると仮定し得る。図32の分割結果は構成ファイルを生成するための基礎として使用され得る。
【0747】
図34は、同じ仮定例についての論理パッチ操作を示す。ここで2つのチップにおける最終的に実現されたものが示される。システムは図32の分割結果を使用して構成ファイルを生成した。しかし、簡単のためアドレスポインタを示さない。2つのFPGAチップ930および940が示される。チップ930は、特に、ユーザの回路設計の分割された部分、TDM部931(受信器側)、ソフトウェアクロック932、およびI/Oバス933を含む。チップ940は、特に、ユーザの回路設計の分割された部分、送信器側のためのTDM部941、ソフトウェアクロック942、およびI/Oバス943を含む。TDM部931および941は図9A、9B、および9Cを参照して説明された。
【0748】
これらのチップ930および940は、ハードウェアモデルをまとめて結合する相互接続ワイヤ944および945を有する。これらの2つの相互接続ワイヤは図8に示す相互接続の一部である。図8を参照すると、1つのそのような相互接続は、チップF32とF33との間に位置する相互接続611である。1つの実施形態において、各相互接続に対してワイヤ/ピンの最大数は44である。図34において、モデル化された回路はチップ930および940の間にワイヤ/ピンを2つだけ必要とする。
【0749】
これらのチップ930および940は、バンクバス950に結合される。2つのチップだけが実装されるので、両方のチップは同じバンク中にあるか、または各チップは異なるバンク中に常駐する。必要に応じて、片方のチップは1つのバンクバスに結合され、かつ他方のチップは別のバンクバスに結合されて、FPGAインタフェースでのスループットがPCIインタフェースでのスループットと同じになることを確実にする。
【0750】
本発明の好適な実施形態の上記記載は例示および記載を目的として提示された。本発明を説明し尽くしたわけではなく、開示の形態に厳密に限定されることを意図しない。多くの修正および改変は、当業者に明らかである。本明細書中に記載の用途は、本発明の精神および範囲を逸脱せずに他の用途に置き換えられ得る。したがって、本発明は請求項の範囲にのみ限定されるべきである。
【図面の簡単な説明】
【図1】 図1は、ワークステーション、再構成可能ハードウエアハードウエアエミュレーションモデル、エミュレーションインターフェースおよびPCIバスに結合されたターゲットシステムを含む本発明の1実施形態の高級レベルの概要を示す。
【図2】 図2は、本発明の特定の使用フローチャートを示す。
【図3】 図3は、本発明の1実施形態によるコンパイル時間および走行時間のソフトウエアのコンパイルおよびハードウエア構成の高級レベル模式図を示す。
【図4】 図4は、ソフトウエア/ハードウエアモデルおよびソフトウエアカーネルコードを生成することを含む、コンパイルプロセスのフローチャートを示す。
【図5】 図5は、Sエミュレーションシステム全体を制御するソフトウエアカーネルを示す。
【図6】 図6は、マッピング、配置およびルーティングにより、ハードウエアモデルを再構成可能ハードウエアボードにマッピングする方法を示す。
【図7】 図7は、図8に示されるFPGAアレイの接続性マトリクスを示す。
【図8】 図8は、4×4FPGAアレイおよび相互接続の1実施形態を示す。
【図9A】 図9Aは、時間分割多重化(TDM)回路の1実施形態を例示する。この時間分割多重化(TDM)回路の1実施形態は、ワイヤのグループが時間多重化の方法にて一緒に結合されることを可能にし、これにより、複数のピンではなく、1つのピンがこのグループのために1つのチップにて用いられ得る。図9Aは、ピン出力問題の概要を示す。
【図9B】 図9Bは、時間分割多重化(TDM)回路の1実施形態を例示する。この時間分割多重化(TDM)回路の1実施形態は、ワイヤのグループが時間多重化の方法にて一緒に結合されることを可能にし、これにより、複数のピンではなく、1つのピンがこのグループのために1つのチップにて用いられ得る。図9Bは、送信側のTDM回路を提供する
【図9C】 図9Cは、時間分割多重化(TDM)回路の1実施形態を例示する。この時間分割多重化(TDM)回路の1実施形態は、ワイヤのグループが時間多重化の方法にて一緒に結合されることを可能にし、これにより、複数のピンではなく、1つのピンがこのグループのために1つのチップにて用いられ得る。図9Cは、受信側のTDM回路を提供することをそれぞれ示す。
【図10】 図10は、本発明の1実施形態によってSエミュレーションシステムアーキテクチャを示す。
【図11】 図11は、本発明のアドレスポインタの1実施形態を示す。
【図12】 図12は、図11のアドレスポインタのアドレスポインタ初期化の状態遷移図を示す。
【図13】 図13は、アドレスポインタの種々のMOVE信号を派生的に生成するMOVE信号ジェネレータの1実施形態を示す。
【図14】 図14は、各FPGAチップの多重化されたアドレスポインタの連鎖(chain)を示す。
【図15】 図15は、本発明の1実施形態によって多重化されたクロスチップアドレス連鎖の1実施形態を示す。
【図16】 図16は、ソフトウエアクロックの実施およびハードウエアモデルの論理コンポーネントの評価に重要なクロック/データネットワーク解析のフローチャートを示す。
【図17】 図17は、本発明の1実施形態によってハードウエアモデルの基本的な構築ブロックを示す。
【図18A】 図18Aは、ラッチおよびフリップフロップを行うレジスタモデル実現を示す。
【図18B】 図18Bは、ラッチおよびフリップフロップを行うレジスタモデル実現を示す。
【図19】 図19は、本発明の1実施形態によってクロックエッジ検出論理の1実施形態を示す。
【図20】 図20は、本発明の1実施形態によって図19のクロックエッジ検出論理を制御する4状態の有限状態機械を示す。
【図21】 図21は、本発明の1実施形態によって相互接続(JTAG、FPGAバスおよび各FPGAチップ用のグローバル信号指定部)を示す。
【図22A】 図22Aは、PCIバスとFPGAアレイとの間のFPGAコントローラの1実施形態を示す。
【図22B】 図22Bは、PCIバスとFPGAアレイとの間のFPGAコントローラの1実施形態を示す。
【図23A】 図23Aは、図22で説明されたCTRL_FPGAユニットおよびデータバッファのより詳細な例示を示す。
【図23B】 図23Bは、図22で説明されたCTRL_FPGAユニットおよびデータバッファのより詳細な例示を示す。
【図24】 図24は、4×4FPGAアレイ、FPGAバンクとの関係、および拡張機能を示す。
【図25】 図25は、ハードウエア開始方法の1実施形態を示す。
【図26】 図26は、モデリングされ、シミュレーションをされるユーザ回路設計の一例についてのHDLコードを示す。
【図27】 図27は、図26のHDLコードの回路設計を象徴的に表す回路図を示す。
【図28】 図28は、図26のHDLコードのコンポーネントタイプ解析を示す。
【図29】 図29は、図26に示されるユーザのカスタム回路設計に基づく構造化されたRTL HDLコードの信号ネットワーク解析を示す。
【図30】 図30は、同一の仮想的な例のソフトウエア/ハードウエアパーティション結果を示す。
【図31】 図31は、同一の仮想的な例のハードウエアモデルを示す。
【図32】 図32は、ユーザのカスタム回路設計の同一の仮想的な例の特定のハードウエアモデル−チップパーティション結果を示す。
【図33】 図33は、ユーザのカスタム回路設計の同一の仮想的な例の別のハードウエアモデル−チップパーティション結果を示す。
【図34】 図34は、ユーザのカスタム回路設計の同一の仮想的な論理パッチ動作を示す。
【図35】 図35(A)〜(D)は、2つの例によって「ホップ」の原理およびFPGAボード接続スキームを示す。
【図36】 図36は、本発明に用いられるFPGAチップの概要を示す。
【図37】 図37は、FPGAチップのFPGA相互接続を示す。
【図38A】 図38Aは、本発明の1実施形態によってFPGAコード接続概念図の側面を示す。
【図38B】 図38Bは、本発明の1実施形態によってFPGAコード接続概念図の側面を示す。
【図39】 図39は、本発明の1実施形態によってFPGAアレイの直接的に隣接する1ホップの6枚ボード相互接続レイアウトを示す。
【図40A】 図40Aは、FPGA内部ボードの相互接続スキームを示す。
【図40B】 図40Bは、FPGA内部ボードの相互接続スキームを示す。
【図41A】 図41Aは、ボード相互接続コネクタの上面を示す。
【図41B】 図41Bは、ボード相互接続コネクタの上面を示す。
【図41C】 図41Cは、ボード相互接続コネクタの上面を示す。
【図41D】 図41Dは、ボード相互接続コネクタの上面を示す。
【図41E】 図41Eは、ボード相互接続コネクタの上面を示す。
【図41F】 図41Fは、ボード相互接続コネクタの上面を示す。
【図42】 図42は、代表的なFPGAボードのオンボードコネクタおよびいくつかのコンポーネントを示す。
【図43】 図43は、図41A〜Fおよび図42のコネクタのレジェンド(legend)を示す。
【図44】 図44は、本発明の別の実施形態によるFPGAアレイの直接的に隣接する1ホップの2枚のボード相互接続レイアウトを示す。
【図45】 図45は、本発明の別の実施形態によるマルチプロセッサを備えたワークステーションを示す。
【図46】 図46は、複数のユーザが時分割基礎に基づく信号シングルシミュレーション/エミュレーションシステムを共有する本発明の別の実施形態による環境を示す。
【図47】 図47は、本発明の1実施形態によるシミュレーションサーバの高級レベル構造を示す。
【図48】 図48は、本発明の1実施形態によるシミュレーションサーバのアーキテクチャを示す。
【図49】 図49は、シミュレーションサーバのフローチャートを示す。
【図50】 図50は、ジョブのスワッピングプロセスのフローチャートを示す。
【図51】 図51は、デバイスドライバと再構成可能ハードウエアユニットとの間の信号を示す。
【図52】 図52は、優先権の異なるレベルを有する複数のジョブを取り扱うシミュレーションサーバの時分割機能を示す。
【図53】 図53は、デバイスドライバと再構成可能ハードウエアユニットとの間で通信ハンドシェイク信号を示す。
【図54】 図54は、通信ハンドシェイクプロトコルの状態図を示す。
【図55】 図55は、本発明の1実施形態によるシミュレーションサーバのクライアント−サーバモデルの概要を示す。
【図56】 図56は、本発明の1実施形態によるメモリマッピングを実施するシミュレーションシステムの高級レベルブロック図を示す。
【図57】 図57は、メモリ有限状態機械(MEMFSM)の支援コンポーネントおよび各FPGA論理デバイス(EVALFSMx)の評価有限状態機械を備えたシミュレーションシステムのメモリマッピングの局面(aspect)のより詳細なブロック図を示す。
【図58】 図58は、本発明の1実施形態によるCTRL_FPGAユニットのMEMFSMユニットの有限状態機械の状態図を示す。
【図59】 図59は、本発明の1実施形態による各FPGAチップの有限状態機械の状態図を示す。
【図60】 図60は、メモリ読み出しデータダブルバッファを示す。
【図61】 図61は、本発明の1実施形態によるシミュレーション書き込み/読み出しサイクルを示す。
【図62】 図62は、CLK_EN信号後にDMA読み出し動作が生じる時のシミュレーションデータ転送動作のタイミング図を示す。
【図63】 図63は、EVAL期間の終了時近くにDMA読み出し動作が生じる時のシミュレーションデータ転送動作のタイミング図を示す。
【図64】 図64は、PCIアドオンカードとして実施される典型的なユーザ設計を示す。
【図65】 図65は、テスト下のデバイスとしてASICを用いる典型的なハードウエア/ソフトウエアコ−ベリフィケーションシステムを示す。
【図66】 図66は、テスト下のデバイスがエミュレータに予めプロミングされる時にエミュレータを用いる典型的なコ−ベリフィケーションシステムを示す。
【図67】 図67は、本発明の1実施形態によるシミュレーションシステムを示す。
【図68】 図68は、本発明の1実施形態による外部I/Oデバイスを用いないコ−ベリフィケーションシステムを示し、ただしRCCコンピューティングシステムが種々のI/Oデバイスおよびターゲットシステムのソフトウエアモデルを含む。
【図69】 図69は、本発明の別の実施形態による実際の外部I/Oデバイスおよびターゲットシステムを備えたコ−ベリフィケーションシステムを示す。
【図70】 図70は、本発明の1実施形態による制御論理のデータイン部のより詳細な論理図を示す。
【図71】 図71は、本発明の1実施形態による制御論理のデータアウト部のより詳細な論理図を示す。
【図72】 図72は、制御論理のデータイン部のタイミング図を示す。
【図73】 図73は、制御論理のデータアウト部のタイミング図を示す。
【図74】 図74は、本発明の1実施形態によるRCCハードウエアレイのボードレイアウトを示す。
【図75A】 図75Aは、保持時間およびクロックグリッチ問題を説明するために用いられる例示的なシフトレジスタ回路を示す。
【図75B】 図75Bは、保持時間違反を例示するために図75Aに示されたシフトレジスタ回路のタイミング図を示す。
【図76A】 図76Aは、複数のFPGAチップを配置した図75Aの同一のシフトレジスタ回路を示す。
【図76B】 図76Bは、保持時間を例示するために図76Aに示されたシフトレジスタ回路のタイミング図を示す。
【図77A】 図77Aは、クロックグリッチ問題を例示するように用いられる例示的な論理回路を示す。
【図77B】 図77Bは、クロックグリッチ問題を例示するための図77Aの論理回路のタイミング図を示す。
【図78】 図78は、保持時間違反問題を解決する従来技術のタイミング調整技術を示す。
【図79】 図79は、保持時間違反問題を解決する従来技術のタイミング合成技術を示す。
【図80A】 本発明の1実施形態により、図80Aは、元来のラッチを示す。
【図80B】 本発明の1実施形態により、図80Bは、タイミング無関係でかつグリッチなしラッチを示す。
【図81A】 本発明の1実施形態により、図81Aは、元来設計フリップフロップを示す。
【図81B】本発明の1実施形態により、図81Bは、タイミング無関係でかつグリッチなしの設計タイプのフリップフロップを示す。
【図82】 図82は、本発明の1実施形態によってタイミング無関係でかつグリッチなしの設計タイプのフリップフロップのトリガ機構のタイミング図を示す。
Claims (4)
- 第1のデータを受信するための第1の入力と、第2のデータを受信するための第2の入力と、第1の出力と、制御信号を受信するための制御入力とを有する第1の論理回路であって、該制御入力において受信された該制御信号に応じて、該第1の入力において受信された該第1のデータおよび該第2の入力において受信された該第2のデータのうちの一方を選択し、該選択されたデータを該第1の出力に提示する第1の論理回路と、
値を格納する第2の論理回路であって、第1のトリガ入力と、該第1の出力に結合された第2の論理入力と、該第1の論理回路の該第2の入力に結合された第2の論理出力とを有する第2の論理回路と
を備えた論理装置であって、
該第2の論理回路は、該第2の論理回路の該第2の論理出力を介して該値を該第1の論理回路の該第2の入力に該第2のデータとして提示し、
該制御信号が該制御入力に到着すること、または、該第1のデータが該第1の論理回路の該第1の入力に到着することの順序にかかわらず、(1)該第2の論理回路は、該第1の論理回路の該第1の出力と該第2の論理回路の該第2の論理入力とを介して、該値を置換することによって該第1のデータに更新され、(2)該第2の論理回路は、トリガ信号が該トリガ入力において受信された場合には、該第2の論理回路の該第2の論理出力を介して該第1のデータを該第1の論理回路の該第2の入力に該第2のデータとして提示し、
該論理装置は、
新しいデータを受信するための第4の入力と、該トリガ信号を受信するための第2のトリガ入力と、該第1の論理回路の該第1の入力に結合された第3の出力とを有する第3の論理回路と、
クロック信号を受信するためのクロック入力と、該トリガ信号を受信するための第3のトリガ入力と、該第1の論理回路の該制御入力に結合された第4の出力とを有するエッジ検出器と
をさらに備え、
選択された時間において該トリガ信号が該第2のトリガ入力に印加されると、該第3の論理回路は、該第3の論理回路の該第3の出力を介して該第3の論理回路の該第4の入力において受信された該新しいデータを該第1の論理回路の該第1の入力に該第1のデータとして提示し、
該選択された時間において該トリガ信号が該第3のトリガ入力に印加されると、該エッジ検出器は、該クロック信号が該エッジ検出器の該クロック入力において受信されたことに応答して、該エッジ検出器の該第4の出力を介して出力信号を該第1の論理回路の該制御入力に該制御信号として提示する、論理装置。 - ユーザ設計回路の適正な動作を検証するデバッグシステムであって、該ユーザ設計は、複数の論理デバイスと複数の回路経路とを含み、
該デバッグシステムは、
該ユーザ設計回路のソフトウェアモデルを生成する計算システムと、
該ユーザ設計回路の少なくとも一部のハードウェアモデルを生成する再構成可能なハードウェアシステムであって、該ハードウェアモデルは、該ユーザ設計回路において複数の論理回路を置換する複数のエミュレーション論理デバイスを含む、再構成可能なハードウェアシステムと、
該計算システムに対するスレーブとして機能し、該計算システムと該再構成可能なハードウェアシステムとに結合された制御手段であって、該再構成可能なハードウェアシステムにおける該ハードウェアモデルの動作を制御する制御手段と
を備え、
該複数のエミュレーション論理デバイスのそれぞれは、
第1のデータを受信するための第1の入力と、第2のデータを受信するための第2の入力と、第1の出力と、制御信号を受信するための制御入力とを有する第1の論理回路であ って、該制御入力において受信された該制御信号に応じて、該第1の入力において受信された該第1のデータおよび該第2の入力において受信された該第2のデータのうちの一方を選択し、該選択されたデータを該第1の出力に提示する第1の論理回路と、
値を格納する第2の論理回路であって、第1のトリガ入力と、該第1の出力に結合された第2の論理入力と、該第1の論理回路の該第2の入力に結合された第2の論理出力とを有する第2の論理回路と
を含み、
該第2の論理回路は、該第2の論理回路の該第2の論理出力を介して該値を該第1の論理回路の該第2の入力に該第2のデータとして提示し、
該制御信号が該制御入力に到達すること、または、該第1のデータが該第1の論理回路の該第1の入力に到着することの順序にかかわらず、(1)該第2の論理回路は、該第1の論理回路の該第1の出力と該第2の論理回路の該第2の論理入力とを介して、該値を置換することによって該第1のデータに更新され、(2)該第2の論理回路は、トリガ信号が該トリガ入力において受信された場合には、該第2の論理回路の該第2の論理出力を介して該第1のデータを該第1の論理回路の該第2の入力に該第2のデータとして提示し、
該複数のエミュレーション論理デバイスのそれぞれは、
新しいデータを受信するための第4の入力と、該トリガ信号を受信するための第2のトリガ入力と、該第1の論理回路の該第1の入力に結合された第3の出力とを有する第3の論理回路と、
クロック信号を受信するためのクロック入力と、該トリガ信号を受信するための第3のトリガ入力と、該第1の論理回路の該制御入力に結合された第4の出力とを有するエッジ検出器と
をさらに含み、
選択された時間において該トリガ信号が該第2のトリガ入力に印加されると、該第3の論理回路は、該第3の論理回路の該第3の出力を介して該第3の論理回路の該第4の入力において受信された該新しいデータを該第1の論理回路の該第1の入力に該第1のデータとして提示し、
該選択された時間において該トリガ信号が該第3のトリガ入力に印加されると、該エッジ検出器は、該クロック信号が該エッジ検出器の該クロック入力において受信されたことに応答して、該エッジ検出器の該第4の出力を介して出力信号を該第1の論理回路の該制御入力に該制御信号として提示する、デバッグシステム。 - 第1のデータを受信するための第1の入力と、第2のデータを受信するための第2の入力と、第1の出力と、制御信号を受信するための制御入力とを有する第1の論理回路であって、該制御入力において受信された該制御信号に応じて、該第1の入力において受信された該第1のデータおよび該第2の入力において受信された該第2のデータのうちの一方を選択し、該選択されたデータを該第1の出力に提示する第1の論理回路と、
値を格納する第2の論理回路であって、第1のトリガ入力と、該第1の出力に結合された第2の論理入力と、該第1の論理回路の該第2の入力に結合された第2の論理出力とを有する第2の論理回路と
を備えた論理装置であって、
該第2の論理回路は、該第2の論理回路の該第2の論理出力を介して該値を該第1の論理回路の該第2の入力に該第2のデータとして提示し、
該第2の論理回路は、該第1の論理回路の該第1の出力と該第2の論理回路の該第2の論理入力とを介して、該値を置換することによって該第1のデータに更新され、該第2の論理回路は、トリガ信号が該トリガ入力において受信された場合には、該第2の論理回路の該第2の論理出力を介して該第1のデータを該第1の論理回路の該第2の入力に該第2のデータとして提示し、
該トリガ入力は、該第1のデータが定常状態に到達した場合に受信され、
該論理装置は、
新しいデータを受信するための第4の入力と、該トリガ信号を受信するための第2のトリガ入力と、該第1の論理回路の該第1の入力に結合された第3の出力とを有する第3の論理回路と、
クロック信号を受信するためのクロック入力と、該トリガ信号を受信するための第3のトリガ入力と、該第1の論理回路の該制御入力に結合された第4の出力とを有するエッジ検出器と
をさらに備え、
選択された時間において該トリガ信号が該第2のトリガ入力に印加されると、該第3の論理回路は、該第3の論理回路の該第3の出力を介して該第3の論理回路の該第4の入力において受信された該新しいデータを該第1の論理回路の該第1の入力に該第1のデータとして提示し、
該選択された時間において該トリガ信号が該第3のトリガ入力に印加されると、該エッジ検出器は、該クロック信号が該エッジ検出器の該クロック入力において受信されたことに応答して、該エッジ検出器の該第4の出力を介して出力信号を該第1の論理回路の該制御入力に該制御信号として提示する、論理装置。 - 前記第1の論理回路は、マルチプレクサを含み、前記第2の論理回路は、D型フリップフロップを含む、請求項3に記載の装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2001/025546 WO2003017148A1 (en) | 1997-05-02 | 2001-08-14 | Timing-insensitive glitch-free logic system and method |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2005500625A JP2005500625A (ja) | 2005-01-06 |
JP2005500625A5 JP2005500625A5 (ja) | 2005-12-22 |
JP4125675B2 true JP4125675B2 (ja) | 2008-07-30 |
Family
ID=21742774
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003521985A Expired - Fee Related JP4125675B2 (ja) | 2001-08-14 | 2001-08-14 | タイミングに鈍感なグリッチのない論理システムおよび方法 |
Country Status (6)
Country | Link |
---|---|
EP (1) | EP1417605A4 (ja) |
JP (1) | JP4125675B2 (ja) |
KR (1) | KR20040028599A (ja) |
CN (1) | CN100578510C (ja) |
CA (1) | CA2420022A1 (ja) |
IL (2) | IL154480A0 (ja) |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4561459B2 (ja) | 2004-04-30 | 2010-10-13 | ヤマハ株式会社 | D級増幅器 |
KR101282963B1 (ko) * | 2006-05-12 | 2013-07-08 | 삼성전자주식회사 | 에뮬레이션 시스템 및 그 방법 |
WO2010059150A1 (en) * | 2008-11-19 | 2010-05-27 | Lsi Corporation | Interconnects using self-timed time-division multiplexed bus |
US8742791B1 (en) * | 2009-01-31 | 2014-06-03 | Xilinx, Inc. | Method and apparatus for preamble detection for a control signal |
US10423740B2 (en) * | 2009-04-29 | 2019-09-24 | Synopsys, Inc. | Logic simulation and/or emulation which follows hardware semantics |
WO2010129909A1 (en) * | 2009-05-07 | 2010-11-11 | Cypress Semiconductor Corporation | Development, programming, and debugging environment |
US8942628B2 (en) * | 2011-11-28 | 2015-01-27 | Qualcomm Incorporated | Reducing power consumption for connection establishment in near field communication systems |
CN102799709B (zh) * | 2012-06-19 | 2015-04-01 | 中国电子科技集团公司第二十八研究所 | 基于xml的系统仿真试验环境构建与配置系统及方法 |
KR101354007B1 (ko) * | 2012-12-12 | 2014-01-21 | 국방과학연구소 | 시뮬레이션 시간을 기반으로 시뮬레이션 시스템과 테스트 시스템의 시간 진행을 동기화하는 시스템 간 연동 구성 및 시뮬레이션 모델 테스트 방법 |
KR101704600B1 (ko) | 2014-10-31 | 2017-02-08 | 한국전기연구원 | 홀센서 글리치 제거 장치 |
US10289579B2 (en) * | 2015-12-10 | 2019-05-14 | Qualcomm Incorporated | Digital aggregation of interrupts from peripheral devices |
EP3399425B1 (de) * | 2017-05-05 | 2020-07-29 | dSPACE digital signal processing and control engineering GmbH | Verfahren zur erkennung einer verdrahtungstopologie |
CN109960593B (zh) * | 2017-12-26 | 2023-02-17 | 中国船舶重工集团公司七五〇试验场 | 一种互锁式时序控制仿真方法 |
CN108537000B (zh) * | 2018-03-27 | 2021-07-27 | 东南大学 | 基于分子计算的米利型状态机设计方法 |
EP3579126A1 (en) * | 2018-06-07 | 2019-12-11 | Kompetenzzentrum - Das virtuelle Fahrzeug Forschungsgesellschaft mbH | Co-simulation method and device |
WO2020069009A1 (en) * | 2018-09-25 | 2020-04-02 | Synopsys, Inc. | Coherent observability and controllability of overlaid clock and data propagation in emulation and prototyping |
US10333503B1 (en) | 2018-11-26 | 2019-06-25 | Quantum Machines | Quantum controller with modular and dynamic pulse generation and routing |
CN109683512B (zh) * | 2018-12-07 | 2022-04-12 | 四川航天烽火伺服控制技术有限公司 | 一种应用于舵系统的转接卡 |
US10454459B1 (en) | 2019-01-14 | 2019-10-22 | Quantum Machines | Quantum controller with multiple pulse modes |
US10505524B1 (en) | 2019-03-06 | 2019-12-10 | Quantum Machines | Synchronization in a quantum controller with modular and dynamic pulse generation and routing |
US11164100B2 (en) | 2019-05-02 | 2021-11-02 | Quantum Machines | Modular and dynamic digital control in a quantum controller |
US10931267B1 (en) | 2019-07-31 | 2021-02-23 | Quantum Machines | Frequency generation in a quantum controller |
US10862465B1 (en) | 2019-09-02 | 2020-12-08 | Quantum Machines | Quantum controller architecture |
US11245390B2 (en) | 2019-09-02 | 2022-02-08 | Quantum Machines | Software-defined pulse orchestration platform |
CN112445743B (zh) * | 2019-09-04 | 2024-03-22 | 珠海格力电器股份有限公司 | 一种去除毛刺的方法、装置及状态机 |
CN111479334B (zh) * | 2020-03-20 | 2023-08-11 | 深圳赛安特技术服务有限公司 | 一种网络请求重试方法、装置及终端设备 |
CN111581149B (zh) * | 2020-04-24 | 2022-08-26 | 希翼微电子(嘉兴)有限公司 | 可重构地址重映射低功耗多功能定时器 |
US11132486B1 (en) * | 2020-05-21 | 2021-09-28 | Taiwan Semiconductor Manufacturing Company, Ltd. | Systems and methods for multi-bit memory with embedded logic |
US11043939B1 (en) | 2020-08-05 | 2021-06-22 | Quantum Machines | Frequency management for quantum control |
CN112269728B (zh) * | 2020-11-03 | 2023-08-04 | 北京百度网讯科技有限公司 | 一种系统性能评估方法、装置、设备以及存储介质 |
CN112328701B (zh) * | 2020-11-27 | 2023-11-10 | 广东睿住智能科技有限公司 | 数据同步方法、终端设备及计算机可读存储介质 |
CN113158260B (zh) * | 2021-03-30 | 2023-03-31 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | SoC芯片内部数据分级防护电路 |
CN112733478B (zh) * | 2021-04-01 | 2021-08-03 | 芯华章科技股份有限公司 | 用于对设计进行形式验证的装置 |
US12132486B2 (en) | 2021-04-08 | 2024-10-29 | Quantum Machines | System and method for pulse generation during quantum operations |
US12242406B2 (en) | 2021-05-10 | 2025-03-04 | Q.M Technologies Ltd. | System and method for processing between a plurality of quantum controllers |
US12165011B2 (en) | 2021-06-19 | 2024-12-10 | Q.M Technologies Ltd. | Error detection mechanism for quantum bits |
CN113297819B (zh) * | 2021-06-22 | 2023-07-07 | 海光信息技术股份有限公司 | 异步时钟的时序检查方法、装置、电子设备、存储介质 |
JPWO2023281652A1 (ja) * | 2021-07-07 | 2023-01-12 | ||
US20230153678A1 (en) * | 2021-07-21 | 2023-05-18 | Quantum Machines | System and method for clock synchronization and time transfer between quantum orchestration platform elements |
US12111352B2 (en) | 2022-01-24 | 2024-10-08 | Quantum Machines | Machine learning for syncing multiple FPGA ports in a quantum system |
CN114841103B (zh) * | 2022-07-01 | 2022-09-27 | 南昌大学 | 门级电路的并行仿真方法、系统、存储介质及设备 |
CN116882336B (zh) * | 2023-09-07 | 2023-12-01 | 芯动微电子科技(珠海)有限公司 | 一种基于高级语言模拟rtl的建模方法与装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5801955A (en) * | 1996-05-31 | 1998-09-01 | Mentor Graphics Corporation | Method and apparatus for removing timing hazards in a circuit design |
US5748911A (en) * | 1996-07-19 | 1998-05-05 | Compaq Computer Corporation | Serial bus system for shadowing registers |
US6009256A (en) * | 1997-05-02 | 1999-12-28 | Axis Systems, Inc. | Simulation/emulation system and method |
US6134516A (en) * | 1997-05-02 | 2000-10-17 | Axis Systems, Inc. | Simulation server system and method |
-
2001
- 2001-08-14 IL IL15448001A patent/IL154480A0/xx active IP Right Grant
- 2001-08-14 EP EP01967980A patent/EP1417605A4/en not_active Withdrawn
- 2001-08-14 CA CA002420022A patent/CA2420022A1/en not_active Abandoned
- 2001-08-14 CN CN01822790A patent/CN100578510C/zh not_active Expired - Fee Related
- 2001-08-14 KR KR10-2003-7002219A patent/KR20040028599A/ko not_active Application Discontinuation
- 2001-08-14 JP JP2003521985A patent/JP4125675B2/ja not_active Expired - Fee Related
-
2003
- 2003-02-16 IL IL154480A patent/IL154480A/en not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
CN100578510C (zh) | 2010-01-06 |
EP1417605A1 (en) | 2004-05-12 |
EP1417605A4 (en) | 2009-07-15 |
IL154480A (en) | 2008-11-26 |
JP2005500625A (ja) | 2005-01-06 |
KR20040028599A (ko) | 2004-04-03 |
IL154480A0 (en) | 2003-09-17 |
CA2420022A1 (en) | 2003-02-27 |
CN1491394A (zh) | 2004-04-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4125675B2 (ja) | タイミングに鈍感なグリッチのない論理システムおよび方法 | |
US6321366B1 (en) | Timing-insensitive glitch-free logic system and method | |
US6389379B1 (en) | Converification system and method | |
US7512728B2 (en) | Inter-chip communication system | |
US6785873B1 (en) | Emulation system with multiple asynchronous clocks | |
US6134516A (en) | Simulation server system and method | |
US6810442B1 (en) | Memory mapping system and method | |
US9195784B2 (en) | Common shared memory in a verification system | |
US7480606B2 (en) | VCD-on-demand system and method | |
US6026230A (en) | Memory simulation system and method | |
US6754763B2 (en) | Multi-board connection system for use in electronic design automation | |
US6651225B1 (en) | Dynamic evaluation logic system and method | |
US6421251B1 (en) | Array board interconnect system and method | |
US6009256A (en) | Simulation/emulation system and method | |
JP4456420B2 (ja) | ネットワークベースの階層エミュレーションシステム | |
KR100483636B1 (ko) | 에뮬레이션및시뮬레이션을이용한설계검증방법및장치 | |
US7366652B2 (en) | Method of programming a co-verification system | |
JP4102752B2 (ja) | Vcd−オン−デマンドのシステムおよび方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070115 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070416 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20070515 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070910 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20071023 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20071023 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20080111 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080229 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080321 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20080416 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080508 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110516 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120516 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130516 Year of fee payment: 5 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |