JP4125675B2 - Glitch-free logic system and method insensitive to timing - Google Patents
Glitch-free logic system and method insensitive to timing 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
Description
【0001】
(関連米国出願)
本出願は、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実施形態によってタイミング無関係でかつグリッチなしの設計タイプのフリップフロップのトリガ機構のタイミング図を示す。[0001]
(Related US application)
This application is a continuation-in-part of US patent application Ser. No. 08 / 850,136, filed with the US Patent and Trademark Office (USPTO) on May 2, 1997.
[0002]
(Background of the Invention)
(Field of Invention)
The present invention relates generally to electronic design automation (EDA). More particularly, the present invention relates to a digital logic device that solves retention time and clock glitch problems for various applications, including simulation, hardware acceleration, and protection.
[0003]
(Description of related technology)
In general, electronic design automation (EDA) is a computer configured on various workstations to provide a designer with an automated or semi-automated tool to design and verify a user's custom circuit blueprint. It is a base tool. EDA is commonly used to create, analyze, and edit any electronic blueprint for simulation, emulation, prototyping, execution, or computing purposes. The term EDA can also be used to develop a system that uses a user design subsystem or component (ie, a target system). The end result of EDA is a modified and enhanced design, usually in the form of a separate integrated circuit or printed circuit board, which is an improvement over the original design, but without the spirit of the original design. maintain.
[0004]
The value of software for simulating circuit designs before hardware emulation is recognized in various industries that benefit from using EDA technology. Nevertheless, current software simulation and hardware emulation / acceleration are cumbersome for users because these processes are separate and independent in nature. For example, a user may simulate or debug a circuit design during a portion of that time during one debug / test session and use the results to simulate a hardware model during another time. You may want to accelerate, examine the various registers and combined logic values in the circuit at a selected time, and then return to software simulation. In addition, if internal registers and combinatorial logic values change over time, users can monitor this change even if the hardware model changes during the hardware acceleration / emulation process. Should be.
[0005]
Co-simulation addresses several issues with the nuisance of using two separate and independent processes: pure software simulation and pure hardware emulation / acceleration, and overall Arose from the need to make the system easier to use. However, co-simulation still has a number of flaws: (1) co-system requires manual partitioning, (2) co-simulation uses two loosely coupled engines, (3) co-simulation speed Is as slow as the software simulation speed, and (4) the co-simulation system encounters a race condition.
[0006]
First, partitioning between software and hardware is done manually, which places additional burden on the user instead of automatically. In essence, co-simulation partitions the design (beginning at the behavior level, then RTL, then to the gate level) to the user, and tests the software / hardware model itself with very large functional blocks Require to do. Such constraints require some sophisticated knowledge from the user.
[0007]
Second, the co-simulation system utilizes two loosely coupled and independent engines, which cause internal engine synchronization, tuning and flexibility issues. Co-simulation requires the synchronization of two different verification engines (software simulation and hardware emulation). Even when the software simulator side is coupled to the hardware accelerator side, only external pin output data (pin-out data) is available for inspection and loading. The values in the modeled circuit of the registers and the combinational logic levels are not available for easy inspection and download from one side to the other, limiting the utility of these co-simulator systems. Typically, if the user switches from software simulation to hardware / acceleration and then switches back, the user may have to re-simulate the entire design. Thus, the co-simulation system provides this capability if the user wants to switch between software simulation and hardware / acceleration during a single debug session that examines registers and combinational logic values. do not do.
[0008]
Third, the co-simulation speed is as slow as the simulation speed. Co-simulation requires the synchronization of two different verification engines: software simulation and hardware emulation. Each of these engines has its own control mechanism to drive simulation or emulation. This suggests that synchronization between software and hardware pushes the overall performance to the same low speed as software simulation. The overhead of adjusting the operation of these two engines adds to the slowdown of the co-simulation system.
[0009]
Fourth, the co-simulation system encounters a clock glitch problem due to race conditions between setup, hold time and clock signal. The co-simulator uses a hardware driven clock and can be input to different logic elements at different times due to different wireline lengths. If both of these logic elements should evaluate the data, one logic element evaluates the data in one time period, and the other logic element evaluates the data in a different time period. Increase the uncertainty level.
[0010]
Accordingly, there is a need in the industry for a system or method that solves the problems listed above by currently known simulation systems, hardware emulation devices, hardware acceleration, co-simulation, and protection systems.
[0011]
(Summary of the Invention)
The present invention provides a solution to the above-described problems in the form of a flexible and fast simulation / emulation system, where the system is a reconfigurable computing system (or RCC computing system) and reconfigurable. This is referred to as a “S emulation system”, “S emulator system”, or protection system, which includes various hardware arrays (or RCC hardware arrays).
[0012]
The S emulation system and method of the present invention provides the user with the ability to convert the design of an electronic system into software and hardware displays for simulation. Generally, the S emulation system is a software control emulator or a hardware acceleration simulator, and is the method used in this document. Thus, although pure software simulation is possible, the simulation can also be accelerated by the use of hardware models. Hardware acceleration is enabled by software controls for start, stop, value assertion, and value checking. In-circuit emulation mode is further available to test the user's circuit design in the environment of the target system of the circuit. Again, software control is available.
[0013]
Controls both software and hardware models, allowing users to start, stop, assert values, inspect values, and switch between different modes, providing users with greater execution time A software kernel that provides flexibility is the heart of the system. The kernel controls the various modes by controlling hardware data evaluation via enable inputs to the registers.
[0014]
The S emulation system and method according to the present invention provides four modes of operation. That is, (1) software simulation, (2) simulation through hardware acceleration, (3) in-circuit emulation system (ICE), and (4) post-simulation analysis. At a high level, the present invention is embodied in each of the above four modes or in various combinations of these modes as follows. That is, (1) only software simulation, (2) only simulation through hardware acceleration, (3) only in-circuit emulation (ICE), (4) only post-simulation analysis, (5) software simulation and hardware (6) Software simulation and ICE, (7) Simulation and ICE via hardware acceleration (8) Software simulation, Simulation via hardware acceleration, and ICE, (9) Software Wear simulation and post-simulation analysis, (10) simulation and post-simulation analysis via hardware acceleration, (11) software simulation, hardware Simulation via speed and post simulation analysis, (12) ICE and post simulation analysis, (13) Software simulation, ICE, post simulation analysis, (14) Simulation via hardware acceleration, ICE, post simulation analysis, And (15) Software simulation, simulation via hardware acceleration, ICE, and post-simulation analysis. Other combinations are possible and are within the scope of the present invention.
[0015]
Each mode or combination of modes provides the following characteristics or combinations of these characteristics. (1) switch between manual or automatic modes, (2) use (users can switch between modes, start, stop, assert, value assert, value check, simulation or emulation processes) A single process of cycles, (3) a compilation process that generates a software model and a hardware model, and (4) a software kernel that controls all modes with a main control loop, in one embodiment, initializes the system. , Evaluating an active test bench process / component, evaluating a clock component, detecting a clock edge, updating registers and memory, and communicating a combination component (5) component type analysis to generate a hardware model, (6) in one embodiment, including advancing simulation time and continuing the loop as long as there is an active test bench process Mapping hardware models to reconfigurable boards by clustering, placement, and routing; (7) in one embodiment, software for avoiding race conditions by gate clock logic analysis and gate data logic analysis; Clock Setup, (8) In one embodiment, trigger an enable signal in the hardware model and send a signal from the primary clock to the clock input of the hardware model clock edge register via the gate clock logic to Send the clock signal to the enable input of the hardware model register, send data from the primary clock register to the hardware model register via the gate data logic, and send the clock enable signal to the enable input of the hardware model register. Software clock realization by detecting clock edge in software model that resets clock edge register to be disabled, (9) Write selection data for debug session and post-simulation analysis, (10) Combinational logic regeneration, (11 In one embodiment, the basic building block is a D-type register with asynchronous and synchronous inputs, (12) address pointers at each chip, (13) multiplexed cross-chip address points. Interchain, (14) an array of FPGA chips and their interconnection schemes, (15) a bank of FPGA chips with a bus that tracks the performance of the PCI bus system, (16) an FPGA that allows expansion through a piggyback board Bank, and (17) Time Division Multiplexing (TDM) circuit for optimal pin usage. By various embodiments, the present invention provides other features as described herein, which may not be listed in the above list of features.
[0016]
One embodiment of the present invention is a simulation system. The simulation system operates in a host computer system for simulating circuit behavior. The host computer system includes a central processing unit (CPU), a main memory, and a local bus that couples the CPU to the main memory and enables communication between the CPU and the main memory. This circuit has a structure and a function specified in a hardware language such as HDL. This language makes it possible to describe circuits as component types and connections. The simulation system includes a software model, software control logic, and hardware logic elements.
[0017]
The software model of the circuit is coupled to the local bus. Typically, this model is resident in main memory. Software control logic is coupled to the software model and hardware logic elements to control the operation of the software model and hardware logic elements. The software control logic includes interface logic that enables reception of input data and clock signals from external processes and clock detection logic for detection of active edges of clock signals and generation of trigger signals. Further, the hardware logic element is coupled to the local bus and includes a hardware model of at least a portion of the circuit based on the component type and clock enable logic for evaluating data in the hardware model in response to the trigger signal.
[0018]
Further, the hardware logic elements include an array or a plurality of field programmable devices coupled to each other. Each field programmable device includes a hardware model of at least some circuitry, and thus all field programmable device combinations include the entire hardware model. Furthermore, the plurality of interconnections connect parts of the hardware model to each other. Each interconnect represents a direct connection between any two field programmable devices arranged in the same row or column. The shortest distance between any two field programmable devices is at most two interconnects or “hops”.
[0019]
Another embodiment of the invention is a system and method for simulating a circuit, where the circuit is modeled in software and at least a portion of the circuit is modeled in hardware. Data evaluation occurs in hardware but is controlled by software via a software clock. The data to be evaluated is communicated to the hardware model and stabilized. If the software model detects an active clock edge, the software model sends an enable signal to the hardware model to initiate data evaluation. The hardware model evaluates the data and waits for new incoming data that can be evaluated at the next active clock edge signal detection in the software model.
[0020]
Another embodiment of the present invention includes a software kernel that controls the operation of the software model and the hardware model. The software kernel includes evaluating an active test bench process component, evaluating a clock component, detecting a clock edge, updating registers and memory, communicating a combination component, and simulation Advancing time and continuing the loop as long as there is an active bench process.
[0021]
A further embodiment of the invention is a method of simulating a circuit, the circuit having a structure and function specified in a hardware language (eg, HDL). In addition, the hardware language allows a circuit to be described or transformed into a component. The method includes (1) determining a component type in a hardware language, (2) generating a model of a circuit based on the component type, and (3) providing input data to the model. Simulating the behavior of the circuit using the model. Generalizing the model may include (1) generating a software model of the circuit and (2) generating a hardware model of the circuit based on the component type.
[0022]
In another embodiment, the present invention is a method for simulating a circuit. The steps include (1) generating a software model of the circuit, (2) generating a hardware model of the circuit, and (3) providing the input data to the software model. Using to simulate the behavior of the circuit, (4) selectively switching to the hardware model, (5) providing input data to the hardware model, and (6) simulating in the hardware model. And simulating the behavior of the circuit using a hardware model. The method further includes (1) selectively switching to a software model, and (2) simulating the behavior of the circuit using the software model by providing input data to the software model. In addition. The simulation can also be stopped using a software model.
[0023]
For in-circuit emulation mode, the method includes (1) generating a software model of the circuit, (2) generating a hardware model of at least a portion of the circuit, and (3) a target system. Supplying an input signal from the hardware model to the hardware model, (4) supplying an output signal from the hardware model to the target system, and (5) simulating the behavior of the circuit using the hardware model. Thus, the software model includes steps that allow simulation / emulation to be controlled on a cycle-by-cycle basis.
[0024]
For post-simulation analysis, the method of simulating a circuit includes (1) generating a model of the circuit, and (2) providing input data to the model, and using this model to modify the behavior of the circuit. Simulating and (3) writing selected input data and selected output data as write points from the model. Software models and hardware models can be generated. The method includes (1) selecting a desired time-dependent point in the simulation, (2) selecting a write point at or before the selected time-dependent point, and (3) input data Providing the hardware model; and (4) simulating the behavior of the circuit using the hardware model from the selected write point.
[0025]
A further embodiment of the present invention is a method for generating a model for a simulation system for simulating a circuit. This step includes (1) generating a software model of the circuit, (2) generating a hardware model for at least a part of the circuit based on the component type, and (3) a clock in the hardware model. Generating a generation circuit to trigger data evaluation of the hardware model in response to clock edge detection in the software model.
[0026]
Various embodiments of the present invention solve the above problem with specially designed logic devices that replace standard design flip-flops and latches. One embodiment of the present invention is a timing insensitive glitch-free (TIGF) logic device. The TIGF logic device may take the form of any latch or edge triggered flip-flop. In one embodiment of the invention, a trigger signal is provided to update the TIGF logic device. The trigger signal is supplied during a short trigger period that occurs at an adjacent time from the evaluation period.
[0027]
In the latch configuration, the TIGF latch includes a flip-flop that holds the current state of the TIGF latch until a trigger signal is received. A multiplexer is also provided to receive the new value and the old stored value. The enable signal functions as a selector signal for the multiplexer. Because the trigger signal controls the update of the TIGF signal, the data at the D input to the TIGF latch and the control data at the enable input can arrive in any order without experiencing a hold time excess. Alternatively, since the trigger signal controls the update of the TIGF, the enable signal can glitch without being negatively affected by proper operation of the TIGF latch.
[0028]
In the flip-flop form, the TIGF flip-flop includes a first flip-flop that holds a new input value, a second flip-flop that holds a currently stored value, and a clock edge detector. All three components are controlled by a trigger signal to update the TIGF flip-flop. The multiplexer is further supplied with an edge detector signal that functions as a selector signal. One dedicated first flip-flop stores new input values that effectively block the inputs that change during the evaluation, thus avoiding holding time overruns. With a trigger signal that controls the TIGF flip-flop update, the clock glitch does not affect the hardware model of the user-designed circuit that uses the TIGF flip-flop as an emulated flip-flop.
[0029]
These and other embodiments are fully discussed and shown in the following sections of this specification.
[0030]
The accompanying drawings describe several different aspects and embodiments of the invention below.
[0031]
(Detailed description of preferred embodiments)
Various embodiments of the present invention are described herein through and relating to a system referred to as an “S emulator” or “S emulator” system. Throughout this specification, the terms “S emulation system”, “S emulator system”, “S emulation”, or simply “system” may be used. These terms represent various apparatus and methods according to the present invention for any combination of four modes of operation: (1) software simulation, (2) hardware acceleration simulation, (3) in-circuit Emulation (ICE), and (4) Post-simulation analysis (including individual setup or pre-processing stages). The term “S emulation” may also be used in other cases. This term refers to the novel process described herein.
[0032]
Similarly, terms such as “reconfigurable hardware computing (RCC) array system” or “RCC computing system” refer to a simulation / co-verification that includes a main processor, a software kernel, and a user-designed software model. This part of the application system. Terms such as “reconfigurable hardware hardware array” or “RCC hardware array” in one embodiment include a user-designed hardware model and simulation / co-verification including reconfigurable hardware logic elements. This part of the application system.
[0033]
In this specification, “user” and “circuit design” or “electronic design” of the user are described. A “user” is a person who uses the S emulation system through this interface and can be a circuit designer or test / debugger who has played little or no role in the design process. A “circuit design” or “electronic design” is a custom design system or component that is software or hardware (which can be modeled by an S emulation system for test / debug purposes). In many cases, the “user” also performed “circuit design” and “electronic design”.
[0034]
This specification also uses “wire”, “wireline”, “wire / bus line”, and “bus”. These terms refer to various wires that conduct electrically. Each line can be a single wire between two points or several wires between multiple points. In these terms, “wire” may include one or more conductors, and “bus” may also include one or more conductors.
[0035]
This specification is presented in outline form. First, this document presents a general overview of the S emulation system, including an overview of the four modes of operation and the hardware implementation scheme. Second, this document provides a detailed description of the S emulation system. In some instances, one drawing may provide various embodiments shown in the accompanying figures. In these cases, the same reference numbers are used for the same components / units / processes. The outline of this specification is as follows.
[0036]
I. Overview
A. Simulation / Hardware acceleration mode
B. Emulation in target system mode
C. Post simulation analysis mode
D. Hardware implementation scheme
E. Simulation server
F. Memory simulation
G. Co-verification system
II. System description
III. Simulation / Hardware acceleration mode
IV. Emulation in target system mode
V. Post simulation analysis mode
VI. Hardware implementation scheme
A. Overview
B. Address pointer
C. Gate data (GATED DATA) / clock network analysis
D. FPGA array and control
E. Another embodiment using highly integrated FPGA chip
F. TIGF logic device
VII. Simulation server
VIII. Memory simulation
IX. Co-verification system
X. Example
-----------------------------------
I. Overview
Various embodiments of the present invention have four general modes of operation. (1) Software simulation, (2) Simulation by hardware acceleration, (3) In-circuit emulation (ICE), and (4) Post simulation analysis. Various embodiments include the above modes of systems and methods having at least some of the following functions. (1) A software and hardware model with a single tightly coupled simulation engine, software kernel (which controls the software and hardware every cycle). (2) Automatic component type analysis during the compilation process for software and hardware model generation and partitioning. (3) A function that performs switching (cycle by cycle) between simulation in software simulation mode, hardware acceleration mode, in-circuit emulation mode, and post-simulation analysis mode. (4) Full hardware visibility through software combination component regeneration. (5) Double buffer clock modeling with software clock and gate clock / data logic to avoid race conditions; (6) Re-simulate user's circuit design from any selected point in post-simulation session or A function to perform hardware acceleration. The ultimate goal is a flexible and fast simulator / emulator system and method with full HDL functionality and emulator execution performance.
[0037]
A. Simulation / Hardware acceleration mode
The S emulation system can model custom circuit designs for software and hardware users through automatic component type analysis. The entire user circuit design is modeled in software, while the evaluation components (ie register components, combination components) are modeled in hardware. Hardware modeling is facilitated by component type analysis.
[0038]
The software kernel resident in the main memory of the general-purpose processor system serves as the main program of the S emulator system (which controls the overall operation and execution in various modes and functions). As long as any testbench processor is activated, the kernel evaluates the activated testbench component, evaluates the clock component, and propagates combinational logic data as well as clock edges that update registers and memory. Detect and advance simulation time. This software kernel provides close coupling characteristics between the simulator engine and the hardware engine. For software / hardware boundaries, the S emulation system has multiple I / O address spaces—REG (register), CLK (software clock), S2H (software to hardware) and H2S (hardware to software). )I will provide a.
[0039]
S emulation has the ability to selectively switch between four modes of operation. System user can start simulation, end simulation, assert input value, examine value, test single step per cycle, and switch back and forth between four different modes Can do. For example, the system can simulate a software circuit for a period of time, accelerate the simulation via a hardware model, and return to software simulation mode.
[0040]
In general, S emulation systems provide the user with the ability to “see” all modeled components, regardless of whether the components are modeled in software or hardware. For various reasons, combinational components are not “visible” like registers, and it is therefore difficult to obtain combinational component data. One reason is that FPGAs used in reconfigurable boards to model the hardware part of a user's circuit design typically model combination components as look-up tables (LUTs) instead of actual combination components It is to be. Thus, the S emulation system reads the register value and then regenerates the combination component. This regeneration process is not always performed because some overhead is required to regenerate the combined component. Rather, it only responds to user requests.
[0041]
Since the software kernel resides on the software side, a clock edge detection mechanism is provided to trigger the generation of so-called software clocks that drive the enable inputs to various registers of the hardware model. Since the timing is tightly controlled through the implementation of the double buffer circuit, the soft air clock enable signal enters the register model before data is input to these models. Once the data input to these register models has stabilized, the software clock is synchronized to ensure that all data values are gated with no risk of retention time violations. Gate data.
[0042]
Also, software simulation is fast because the system logs all input values and only selected register values / states, thus overhead is minimized by reducing the number of I / O operations. The user can selectively select the logging frequency.
[0043]
B. Target system mode emulation
The S emulation system can emulate the user's circuit within the target system environment. The target system outputs data to the hardware model for evaluation, and the hardware model also outputs data to the target system. In addition, the software kernel controls the operation of this mode so that the user can start, stop, assert values, examine values, perform a single step, and switch from one mode to another Still have options.
[0044]
C. Post simulation analysis mode
The log provides the user with a history record of the simulation session. Unlike known simulation systems, the S emulation system does not log single values, internal states or value changes during the simulation process. The S emulation system only logs the value and state selected based on the logging frequency (ie log one record every N cycles). During the post-simulation stage, if the user wishes to test various data near point X of the completed simulation session, the user is logged points (eg, logged point Y (near point X) , Placed in front of point X in time))). The user then performs a simulation from the selected logging point Y to his desired point X to obtain the simulation results.
[0045]
A VCD on-demand system is also described. The VCD on-demand system allows the user to view any simulation target range (ie, simulation time) on demand without rerunning the simulation.
[0046]
D. Hardware implementation scheme
The S emulation system implements an array of FPGA chips on a reconfigurable board. Based on the hardware model, the S emulation system partitions, maps, places, and routes each selected portion of the user circuit design onto the FPGA chip. Thus, for example, a 4 × 4 array of 16 chips can model a large circuit spread across these 16 chips. The interconnection scheme allows each chip to access another chip in two “jumps” or links.
[0047]
Each FPGA chip implements an address pointer for each I / O address space (ie, REG, CLK, S2H, H2S). All address pointer combinations associated with a particular address space are chained together. Thus, during data transfer, word data (one word per time for a selected address space of each chip (one chip per time)) allows the desired word data to access that selected address space. Until then, the main FPGA bus and PCI bus are sequentially selected from / to. This sequential selection of word data is accomplished by a propagated word selection signal. This word select signal moves through the address pointer of the chip and then propagates to the address pointer of the next chip, and this operation continues until the last chip or system initializes the address pointer.
[0048]
The reconfigurable hardware board FPGA bus system operates at twice the PCI bus bandwidth but at half the PCI bus speed. Therefore, the FPGA chips are separated into banks so as to utilize a larger bandwidth bus. The throughput of this FPGA bus system can track the throughput of the PCI bus system so that performance is not compromised by reducing the bus speed. Expansion is possible with a piggyback board that extends the bank length.
[0049]
In another embodiment of the invention, a more highly integrated FPGA chip is used. One such highly integrated chip is the Altera 10K130V and 10K250V chips. The use of these chips changes the board design so that only four FPGA chips are used per board instead of less than eight highly integrated FPGA chips (Altera 10K100V).
[0050]
The FPGA array of the simulation system is provided on the motherboard via a specific board interconnect structure. Each chip may have up to eight sets of interconnects, which are adjacent directly adjacent interconnects (ie, N [73: 0], excluding local bus connections). , S [73: 0], W [73: 0], E [73: 0]), and one-hop adjacent interconnects (NH [27: 0], SH [27: 0] , XH [36: 0], XH [72:37]) within a single board and across different boards. Each chip can be directly interconnected to adjacent neighboring chips, or can be interconnected with one-hop to a non-adjacent chip located one above the other, below, left and right . The array is a torus in the X direction (east-west). In the Y direction (north-south), the array is a mesh.
[0051]
Interconnects may connect logical devices and other components within a single board. However, the internal board connector connects the above boards together and across different boards so that signals are transmitted between (1) the PCI bus through the motherboard and the array board and (2) any two array boards. Provided to interconnect.
[0052]
The motherboard connector grounds the board to the motherboard, thus the PCI bus, power supply and ground. For some boards, the motherboard connector is not used to connect directly to the motherboard. In a six board configuration, only the
[0053]
E. Simulation server
In another embodiment of the invention, the simulation server allows multiple users to access the same reconfigurable hardware unit. In some system configurations, multiple workstations across the network or multiple users / processes in a non-network environment have access to the same server-based reconfigurable hardware unit to review / debug the same or different user circuit designs. obtain. This access is achieved through a time-sharing process (a process in which the scheduler determines access priorities for multiple users, swaps jobs, and selectively locks hardware model access between competing scheduled users). The In one scenario, each user may for the first time have access to map his / her different user design to a reconfigurable hardware model, in which case the system will generate this software and hardware model. Compile the design, perform clustering operations, perform place-and-route operations, generate bitstream configuration files, and reconfigure the FPGA chip in a reconfigurable hardware unit This models the hardware part of the user's design. If one user uses a hardware model to accelerate his design and downloads the hardware state to his memory for software simulation, this hardware unit is freed by another user for access Can be done.
[0054]
The server allows multiple users or processes to access a reconfigurable hardware unit for acceleration and hardware state swapping purposes. The simulation server includes a scheduler, one or more device drivers, and a reconfigurable hardware unit. The simulation server scheduler is based on the preemptive round robin algorithm. The server scheduler includes a simulation job queue table, a priority sorter (priority sorter), and a job swapper. The recovery and replay function of the present invention allows non-network multiprocessing and network multiuser environments (in these environments, previous checkpoint state data can be downloaded and the entire simulation state associated with this checkpoint is replay debugging or Can be recovered for step by cycle).
[0055]
F. Memory simulation
The memory simulation or memory mapping aspect of the present invention is for managing various memory blocks of a user-designed configured hardware model (programmed into an array of FPGA chips of a reconfigurable hardware hardware unit). Provide an efficient way to the simulation system. The memory simulation aspect of the present invention is a structure in which many memory blocks associated with a user's design are mapped to the SRAM memory device of the simulation system instead of the logic device used to construct and model the user's design and Provide a scheme. The memory simulation system includes a memory state machine, an evaluation state machine and associated logic for controlling and interfacing (1) to (3) below. An FPGA that includes (1) a main computing system and associated memory system, (2) an SRAM memory device coupled to the FPGA bus of the simulation system, and (3) a configured and programmed user design (during debugging) Logical device. The overall operation of the memory simulation system according to the embodiment of the present invention is as follows. The simulation write / read cycle is divided into three periods (DMA data transfer, evaluation and memory access).
[0056]
The FPGA logic device side of the memory simulation system uses the evaluation state machine, the FPGA bus driver, and each memory to interface with the user-designed user's own memory interface to process the following (1) and (2) Includes a logical interface to block N. (1) Data evaluation between FPGA logic devices, and (2) Write / read memory access between FPGA logic devices and SRAM memory devices. In relation to the FPGA logic device side, the FPGA I / O controller side is the memory state machine, (1) between the main computing system and the SRAM memory device, and (2) between the FPGA logic device and the SRAM memory device. Interfacing DMA, and interface logic to handle write and read operations.
[0057]
G. Co-verification system
One embodiment of the present invention includes co-verification including a reconfigurable computing system (hereinafter “RCC computing system”) and a reconfigurable computing hardware array (hereinafter “RCC hardware array”). System. In some embodiments, the target system and external I / O devices are not necessary because they can be modeled in software. In other embodiments, the target system and external I / O devices are actually connected to the co-verification system to obtain speed and use actual data rather than simulated test bench data. . Thus, the co-verification system uses the RCC computing system and RCC hardware array with the functionality to debug the software and hardware portions of the user's design while using the actual target system and / or I / O device. Can be incorporated.
[0058]
The RCC computing system also includes clock logic (logic for clock edge detection and software clock generation), a test bench process to test the user design, software instead of using actual physical I / O devices. Device model of any I / O device that decides to model in hardware. Of course, the user may decide to use actual and modeled I / O devices in one debug session. A software clock is provided to the external interface to function as an external clock source for the target system and external I / O devices. The use of this software clock provides the synchronization necessary to process the incoming and outgoing data. Since the RCC computing system generated software clock is time based in the debug session, the simulated and hardware accelerated data is synchronized with any data transmitted between the co-verification system and the external interface. Is done.
[0059]
If the target system and external I / O device are coupled to a co-verification system, pin-out data must be provided between the co-verification system and its external interface. Don't be. The co-verification system consists of (1) between the RCC computing system and the RCC hardware array, and (2) between the external interface (coupled to the target system and external I / O device) and the RCC hardware array. Including control logic that provides traffic control. Because the RCC computing system has a model of the entire software design (including the part of the user design modeled in the RCC hardware array), the RCC computing system also passes between the external interface and the RCC hardware array. You must have all the data you want. Control logic ensures that the RCC computing system has access to these data.
[0060]
II. System description
FIG. 1 shows a high level overview of one embodiment of the present invention. The
[0061]
In combination with an in-
[0062]
Control data and some substantial simulation data pass between the
[0063]
A
[0064]
As known to those skilled in the art, after the operating system is loaded into the memory of
[0065]
One embodiment of the present invention is a specific application program for S emulation. During the course of execution of this program, this application program may request a number of services from the operating system. Many of these services include, but are not limited to, reading from a disk file, writing to a disk file, performing data communication, and interfacing with a display / keyboard / mouse.
[0066]
The
[0067]
A user typically creates a specific circuit design for an electronic system and enters a description of the HDL (always structured RTL level) code for his designed system into the
[0068]
[0069]
In one embodiment, communication between the
[0070]
The
[0071]
Two such FPGAs include chips sold by Altera and Xillinx. In some embodiments, the reconfigurable hardware model is reconfigurable through the use of field programmable devices. However, other embodiments of the present invention may be implemented using application specific integrated circuit (ASIC) technology. Furthermore, other embodiments may be in the form of custom integrated circuits.
[0072]
In normal test / debug scenarios, the reconfigurable device is used to perform simulation / emulation of the user's circuit design so that appropriate changes can be made prior to the actual prototype production. However, in some other examples, resimulation and re-emulation, possibly non-functional circuit designs, cannot be changed quickly and cost effectively by the user, but actual ASICs or custom integrated circuits can be used. Often, such ASICs or custom ICs are available in competition already manufactured so that emulation with actual non-reconfigurable chips may be suitable.
[0073]
In accordance with the present invention, the workstation software integrates with the external hardware model to provide the end user with a greater degree of flexibility, control and performance over existing systems. In order to run simulation and emulation, a model of the circuit design and related parameters (eg, input test bench stimuli, overall system output, intermediate results) are determined and provided to the simulation software system. A user may use either a schematic capture tool or a synthesis tool to define the system circuit design. Users typically begin circuit design of electronic systems with a schematic diagram (which is later converted to HDL format using a synthesis tool). The HDL can also be written directly by the user. Exemplary HDL languages include Verilog and VHDL. However, other languages are available. A circuit design expressed in HDL includes many parallel components. Each component is a code sequence that either defines the behavior of the circuit elements or controls the execution of the simulation.
[0074]
The S emulation system analyzes the component to determine the type of the component, and the compiler uses this component type information to build different execution models in software and hardware. The user can then use the S emulation system of the present invention. The designer can verify the accuracy of the circuit through simulation by applying various stimuli, such as input signals and test vector patterns, to the model being simulated. If the circuit does not behave as planned during simulation, the user redefines the circuit by changing the schematic diagram or HDL file of the circuit.
[0075]
The use of this embodiment of the invention is illustrated in the flowchart of FIG. The algorithm begins at
[0076]
Before the simulation runs, the system must run a reset sequence to remove all of the unknown “x” values on the software before the hardware acceleration model can function. One embodiment of the present invention provides a four-state value (“00” is logic low, “01” is logic high, “10” is “z”, and “11” is “x”). Is used to provide a bus signal. As known to those skilled in the art, the software model is “0”, “1”, “x” (bus collision or unknown value) and “z” (no driver or high impedance). Can be processed. In contrast, the reset sequence that changes depending on the specific application code resets all register values to "0" or all "1", so the hardware cannot process the unknown value "x".
[0077]
In
[0078]
As shown in
[0079]
After stopping, the system kernel reads back the state of the hardware register component if the user wishes to examine the combination component value, thereby regenerating the entire software model including the combination component. After restoring the entire software model, the user can examine any signal value in the system. After stopping and testing, the user continues to run in simulation only mode or hardware model acceleration mode. As shown in the flowchart, step 115 branches to a stop / value check routine. A stop / value check routine begins at
[0080]
Similarly, if the determination at
[0081]
Again, the user cannot stop the hardware acceleration mode at any time as indicated by
[0082]
At
[0083]
For post-simulation analysis, the user selects a specific point where the simulation is desired. The user can then perform analysis after S emulation by running a software simulation with input changes to the hardware model to calculate the change in value and the internal state of all hardware components. Note that the hardware accelerator is used to perform a simulation of the data from the selected logging point to analyze the simulation results. This post simulation analysis method can be linked to an arbitrary simulation waveform viewer for post simulation. Further details are described below.
[0084]
At
[0085]
III. Simulation / Hardware acceleration mode
FIG. 3 shows a high level block diagram of software compilation and hardware configuration in the compile time and travel time zones according to one embodiment of the present invention. FIG. 3 shows two sets of information. One set of information distinguishes the operations performed between compile time and simulation / emulation run time, and the other set of information indicates the partition between the software model and the hardware model. For starters, an S emulation system according to one embodiment of the present invention requires user circuit design as
[0086]
Compile time is represented by
[0087]
The
[0088]
In preparation for travel time, the code-format software model is stored in a main memory in which an application program related to the S emulation program according to one embodiment of the present invention is stored. This code is processed by a general purpose processor or
[0089]
As described above, user test bench stimuli, test vector data, and other
[0090]
FIG. 4 shows a flowchart of the compilation process according to one embodiment of the invention. The compilation process is represented as
[0091]
Step 302 performs component type analysis by classifying HDL component components into combination components, register components, clock components, memory components, and test bench components, as shown in
[0092]
In the combination component, this output value is a function of the current input value and does not depend on the history of the input value. Stateless logic components, examples of combinational components include primitive gates (eg, AND, OR, XOR, NOT), selectors, adders, multipliers, shifters and bus drivers.
[0093]
The register component is a single storage component. The state transition of the register is controlled by a clock signal. One form of register that can change state when an edge is detected is edge-triggered. Examples include flip-flops (D type, JK type) and level-sensitive latches.
[0094]
A clock component is a component that delivers periodic signals to a logic device, thereby controlling the behavior of the logic device. Normally, the clock signal controls the updating of the register. The primary clock is generated from a self-timed test-bench process. For example, a typical test bench process for clock generation in Verilog is as follows:
always's begin
Clock = 0;
# 5;
Clock = 1;
# 5;
end;
According to this code, the clock signal is initially a logic “0”. After 5 time units, the clock signal changes to logic “1”. After 5 time units, the clock signal is inverted to logic “0” and returned. Typically, the primary clock signal is generated in software, and a few (ie, 1-10) primary clocks are present in normal user circuit designs. Derived or gated clocks are generated from a combinational logic and register network driven in turn by a primary clock. A large number (ie, over 1,000) derived clocks exist in typical user circuit designs.
[0095]
A memory component is a block storage component with address and control lines for accessing individual data at a particular memory location. Examples include ROM, desynchronized RAM and synchronized RAM.
[0096]
The test bench component is a software process used to control and monitor the simulation process. Therefore, these components are not part of the hardware circuit design under test. The test bench component controls the simulation by generating a clock signal, initializing simulation data, and reading a simulation test vector pattern from disk / memory. The testbench component also checks for value changes, performs value change dumps, checks asserted limits for signal value relationships, writes output test vectors to disk / memory, various waveforms Monitor simulations by interfacing with viewers and debuggers.
[0097]
The S emulation system performs component type analysis as follows. This system tests a binary source design database. Based on the source design database, the system can characterize or classify elements as one of the above component types. Continuous assignment statements are classified as combinational components. The primitive gate is either a combination type of register types or a latch format according to a language definition. The initialization code is treated as the test bench initialization type.
[0098]
The process of driving a net without using a net is always a test bench driver type. The process of reading a net without using a net is always a test bench monitor type. Processes related to delay control or multiple events are always a generic type of test bench.
[0099]
The regular process for single event control and single net drive may be one of the following: (1) if the event control is an edge triggered event, then the process is of the edge triggered type It is a register component. (2) If the net driven in the process is not defined in all possible execution paths, then the net is a latch-type register. (3) If a net driven in the process is defined by all possible execution paths, then the net is a combination component.
[0100]
The constant process for single event control but driving multiple nets can be broken down into several processes that drive each net individually to drive individual component types individually. The decomposed process can then be used to determine the component type.
[0101]
Step 304 generates a software model for all HDL components regardless of component type. With an appropriate user-driven interface, the user can simulate the entire circuit design using a complete software model. The test bench process is used to drive stimulus inputs, test vector patterns, control the entire simulation, and monitor the simulation process.
[0102]
Step 305 performs clock analysis. Clock analysis involves two general steps. (1) clock extraction and sequential mapping, and (2) clock network analysis. The clock extraction and sequential mapping process maps the user register component to the hardware register model of the S emulation system and then extracts the clock signal from the system hardware register component. The clock network analysis step includes determining a primary clock and a derived clock based on the extracted clock signal and separating the gated clock network and the gate data network. A more detailed description is provided in FIG.
[0103]
Step 306 performs a residence selection. The system selects components for the hardware model in relation to the user. That is, it is a general one of the possible hardware components that can be implemented in the hardware model of the user's circuit design, and some hardware components are not modeled in hardware for various reasons. These reasons include component type, hardware resource limitations (ie floating point operations and large multiply operations are present in the software), simulation and communication overhead (ie small bridge logic between test bench processes is soft) Signal that is present in the software and monitored by the test bench process is present in the software) and user preferences. For a variety of reasons, including performance and simulation monitoring, the user can impose certain components in the software that would otherwise be modeled in hardware.
[0104]
Step 307 maps the selected hardware model to the reconfigurable hardware emulation board. In particular,
[0105]
Step 308 inserts a control circuit. These control circuits communicate I / O circuit address pointers and data bus logic to the simulator (described below with reference to FIGS. 11, 12, and 14) for communicating with the DMA engine, and Includes evaluation control logic (described below with reference to FIGS. 19 and 20) to control hardware state transitions and wire multiplexing. As is known to those skilled in the art, a direct memory access (DMA) unit provides an additional data channel between the peripheral device and the main memory, which directly accesses the main memory (ie, without going through the CPU). Read, write). The address pointer in each FPGA chip allows data to be moved between the software model and the hardware model in consideration of bus size limitations. The evaluation control logic is essentially a finite state machine that ensures that the clock enable enters the register to be asserted before the clock and data inputs enter these registers.
[0106]
Step 309 generates a configuration file for mapping the hardware model to the FPGA chip. In essence,
[0107]
Step 310 generates software kernel code. This kernel is a sequence of software code that controls the entire S emulation system. This kernel cannot be generated up to this point because the portion of code requires the hardware component to be updated and evaluated. Only after
[0108]
As described above with reference to FIG. 4, software kernel code is generated in
[0109]
Referring to FIG. 5, the kernel starts at
[0110]
Step 333 evaluates the clock component. These clock components arise from the test bench process. Typically, the user instructs what type of clock signal is generated in the simulation system. In one example (example described above with respect to component type analysis and reproduced there), the clock components designed by the user in the test bench process are as follows:
[0111]
always's begin
Clock = 0;
# 5;
Clock = 1;
# 5;
end;
In this clock component example, the user determines that a logic “0” signal is generated first, and then a logic “1” signal is generated after 5 simulation times. This clock generation process cycles continuously until stopped by the user. This simulation time is advanced by the kernel.
[0112]
[0113]
Note that registers and combinational components are further modeled in hardware so that the kernel controls the emulator portion of the S emulation system. In fact, whenever any active clock edge is detected, the kernel may accelerate the evaluation of the hardware model in
[0114]
Step 337 evaluates the active bench component. Step 338 advances by simulation time. Step 339 provides a boundary for the control loop starting at
[0115]
FIG. 6 illustrates one embodiment of a method for automatic mapping of a hardware model to a reconfigurable board. The netlist file provides input to the hardware implementation process. This netlist describes the logical functions and their interconnections. The hardware model / FPGA implementation process includes three independent tasks (mapping, placement, and routing). This tool is generally referred to as a “placement and routing” tool. The design tool used may be a Viewlogic Viewdraw, a Schematic Capture system, a Xilinx Xact placement and routing software, or an Altera MAX + PLUS II system.
[0116]
The mapping task divides the circuit design into logic blocks, I / O blocks, and other FPGA resources. Although some logic functions such as flip-flops and buffers can be mapped directly to the corresponding FPGA resources, other logic functions such as combinatorial logic must be implemented in the logic block using a mapping algorithm. Typically, the user can select a mapping for optimal density or optimal performance.
[0117]
The placement task includes retrieving logical blocks and I / O blocks from the mapping task, and assigning logical blocks and I / O blocks to physical areas within the FPGA array. Current FPGA tools typically use some combination of three techniques: minimum cut, simulated annealing, and general force-directed relaxation (GFDR). In effect, these techniques determine the optimal placement among other variables based on various cost functions that depend on the total net length of the interconnect or the delay along a set of critical signal paths. The Xilinx XC4000 series FPGA tools use a variation of the GFDR technology for close refinement of the placement following the minimal cut technology placement relative to the initial placement.
[0118]
This routing task includes determining the routing path used to interconnect the various mapped blocks and the placed blocks. One such router (called a maze router) finds the shortest path between two points. Because routing tasks provide direct interconnection between chips, the placement of circuitry with respect to the chips is important.
[0119]
Initially, the hardware model can be described in either the
[0120]
If some or all of the HDL is at the RTL level, the circuit design components exist at a high enough level that the S emulation system can easily model these components using S emulation registers or components. If some or all of the HDL is present at the gate netlist level, circuit design components can be more circuit design specific, making it more difficult to map user circuit design components to S emulation components. Thus, the synthesizer server allows any logic element to be generated based on a standard logic element or a variant of a random logic element. Standard logic elements or random logic element variants may not have any parallelism in these variants or library standard logic elements.
[0121]
If the circuit design is in the form of a gate netlist, the S emulation system first performs a grouping or
[0122]
[0123]
After the cluster is formed in
[0124]
Determining how a cluster is placed on a given chip is based on the placement cost, which is determined by two or more circuits (ie, CKTQ) by a cost function f (P, G, D). = CKT1, CKT2, ..., CKTN) and each position of the array of FPGA chips. Where P is typically pin usage / usability, G is generally gate usage / usability, and D is the connectivity matrix M (shown in FIG. The distance or number of “hops” between gates, as defined by The user's circuit design modeled in the hardware model includes all combinations of the circuit CKTQ. Each cost function is defined such that the calculated value of the calculated placement cost generally tends to be generated. (1) the minimum number of “hops” between any two circuits CKTN-1 and CKTN in the FPGA array, and (2) circuits CKTN-1 and in the FPGA array such that pin usage is minimized, and This is the arrangement of CKTN.
[0125]
In one embodiment, the cost function F (P, G, D) is defined as follows:
[0126]
[Expression 1]
[0127]
This equation can be simplified with the following equation:
[0128]
f (P, G, D) = C0 * P + C1 * G + C2 * D
The first term (ie, C0 * P) generates a first placement cost based on the number of pins used and the number of available pins. The second term (ie, C1 * G) generates a second placement cost based on the number of used gates and the number of available gates. The third term (ie, C2 * D) generates a placement cost value based on the number of hops that exist between the various interconnections in the circuit CKTQ (ie, CKT1, CKT2,..., CKTN). . The total placement cost value is generated by iteratively adding these three placement cost values. Constants C0, C1, and C2 are generated from this cost function for one or more factors that are most important (ie, pin usage, gate usage, or inter-gate hop) during any iterative placement cost calculation. Represents a weighted constant that selectively asymmetrics all placement cost values.
[0129]
If the system chooses different relative values for the weighted constants C0, C1, and C2, the placement cost is calculated repeatedly. Thus, in one embodiment, during the coarse grain placement operation, the system selects a larger value for C0 and C0 and C1. In this iteration, the system is more concerned with optimizing pin usage / availability and gate usage / availability in an array of FPGA chips than optimizing inter-gate hops in the initial placement of the circuit CKTQ. Decide something. In subsequent iterations, the system selects C0 for C2 and a smaller value for C1. In this iteration, the system optimizes inter-gate hops more important than optimizing pin usage / availability and gate usage / availability.
[0130]
During the fine grain placement operation, the system uses the same cost function. In one embodiment, the iterative steps for selecting C0, C1, and C2 are the same as the coarse grain operation. In another embodiment, the fine grain placement operation includes having the system select C0 for C2 and a small value for C1.
[0131]
Here, these variables and expressions are described. When deciding whether to place a given circuit CKTQ in FPGA chip x or FPGA chip y (among other FPGA chips), the cost function is pin usage / availability (P), gate usage / availability Check G and hop D between gates. Based on the cost function variables P, G, and D, the cost function f (P, G, D) generates a placement cost value for placing the circuit CTKQ at a specific location in the FPGA array.
[0132]
Pin usage / availability P also indicates I / O capacity. PusedIs the number of pins used by the circuit CKTQ of each FPGA chip. PavailableIs the number of pins available in the FPGA chip. In one embodiment, PavailableIs 264 (44 pins × 6 interconnects / chip), but in another embodiment, PavailableIs 265 (44 pins × 6 interconnects / chip + 1 extra pin). However, the specific number of available pins depends on the type of FPGA chip used, the total number of interconnects used per chip, and the number of pins used for each interconnect. Therefore, PavailableCan vary considerably. Therefore, to evaluate the first term (ie, C0 * P) of the expression of the cost function F (P, G, D), the ratio P for each FPGA chipused/ PavailableIs calculated. Thus, for a 4 × 4 array of FPGA chips, a ratio P of 16used/ PavailableIs calculated. The higher the number of pins used for a given available number of pins, the higher the ratio is used for the given available number of pins. Of the 16 calculated ratios, the ratio that produces the largest number is selected. The first placement cost value is the selected maximum ratio Pused/ PavailableAnd the weighting constant C0 is calculated from the first term C0 * P. This first term is the calculated ratio Pused/ PavailableAnd, depending on the specific maximum ratio among the ratios calculated for each FPGA chip, the placement cost value will be larger for higher pin usage, assuming all other factors are equal. The system selects the deployment that produces the lowest deployment cost. The smallest maximum ratio P of all the maximum values calculated for the various arrangements, assuming all other factors are equalused/ PavailableThe specific arrangement that produces is generally considered as the optimal arrangement of the FPGA array.
[0133]
Gate usage / availability G is based on the number of gates allowed by each FPGA chip. In one embodiment, the gate G used in each chip based on the position of the circuit CKTQ in the array.usedAs a result, the second arrangement cost (C1 * G) is assigned a value indicating that the arrangement is not feasible. Similarly, if the number of gates used in each chip including the circuit CKTQ is less than a predetermined threshold or a predetermined threshold, this second term (C1 * G) can be implemented as a result. Is assigned to a value indicating that Therefore, if the system wants to place the circuit CKT1 on a particular chip, and that chip does not have enough gates to accommodate the circuit CKT1, then the system cannot implement this particular placement. This can be concluded by the cost function. In general, a large number of G (eg, infinite) means that a high placement cost value indicates that the desired placement of the circuit CKTQ is not feasible and an alternative placement should be determined. Make sure to generate
[0134]
In another embodiment, based on the position of the circuit CKTQ in the array, the ratio Gused/ GavailableIs calculated for each chip. However, GusedIs the number of gates used by the circuit CKTQ in each FPGA chip and GavailableIs the number of gates available in each chip. In one embodiment, the system uses a FLEX 10K100 chip for the FPGA array. The FLEX10K100 chip contains approximately 100,000 gates. Therefore, in this embodiment, GavailableIs equal to 100,000 gates. Thus, for a 4 × 4 array of FPGA chips, a ratio of 16 Gused/ GavailableIs calculated. As more gates are used for a given number of available gates, this ratio becomes larger. Of the 16 calculated ratios, the ratio that produces the largest number is selected. The second placement cost value is the selected maximum ratio Gused/ GavailableIs calculated from the second term C1 * G by multiplying by a weight constant C1. This second term is the calculated ratio Gused/ GavailableAnd because it depends on a specific maximum ratio among the ratios calculated for each FPGA chip, the placement cost value will be higher for higher gate usage even though all other factors are equal. The system selects the circuit placement that produces the lowest placement cost. The smallest maximum ratio G among all the maximum values calculated for various configurationsused/ GavailableThe particular placement that produces is generally considered as the best placement in the FPGA array even though all other factors are equal.
[0135]
In another embodiment, a value is first selected for C1. Ratio Gused/ GavailableIf is greater than “1”, this particular arrangement is not feasible (ie, at least one chip does not have enough gates for this particular arrangement of circuits). As a result, the system changes C1 with a very large number (eg, infinity), so the second term C1 * G is also a very large number and the total deployment cost value f (P, G, D) is also very large. On the other hand, the ratio Gused/ GavailableAs a result, this particular arrangement is feasible (ie, each chip has enough gates to support circuit implementation). As a result, the system does not change C1, so the second term C1 * G is a specific number.
[0136]
The third term C2 * D represents the number of hops between all gates that require interconnection. Furthermore, the number of hops depends on the interconnection matrix. The connectivity matrix provides the basis for determining the circuit path between any two gates that require chip-to-chip interconnects. Not all gates require inter-gate connections. Based on dividing the user's original circuit design and cluster into a given chip, some gates do not require any arbitrary interconnections. This is because one or more logic circuit elements are connected to each one or more inputs and one or more outputs, and the one or more logic circuit elements are arranged on the same chip. However, other gates require interconnection. This is because one or more logic elements are connected to one or more inputs and one or more outputs, and the one or more logic elements are arranged in different chips.
[0137]
To understand “hops”, reference is made to the connectivity matrix shown in tabular form in FIG. 7 and illustrated schematically in FIG. Each interconnection between chips, such as
[0138]
In this interconnection scheme, two “hops” or “jumps” allow data to pass from one chip to another. Thus, data can pass from chip F11 to chip F12 in one hop via
[0139]
Connectivity is indicated by the sum of all hops between gates that require internal chip interconnection. The shortest path between any two chips can be represented by one or two “hops” using the connectivity matrix of FIGS. However, in a given hardware model implementation, the I / O capacity can limit the number of shortest path connections directly between any two gates in the array, so that these signals are longer paths (and therefore Routed through more than 2 hops) to reach the destination. Thus, the number of hops can exceed 2 for some inter-gate connections. In general, if all are equal, a smaller number of hops result in a lower deployment cost.
[0140]
The third term (ie C2 * D) is reproduced as:
[0141]
[Expression 2]
[0142]
The third term is the product of the weighting constant C2 and the addition component (S ...). The summing component is essentially the sum of all hops between each gate i and gate j in the user's circuit design that requires chip-to-chip interconnection. As mentioned above, not all gates necessarily require internal chip interconnection. For those gates i and j that require internal chip interconnection, the number of hops is determined. For all gates i and j, the total number of hops is added together.
[0143]
The distance calculation can also be defined as:
[0144]
[Equation 3]
[0145]
Here, M is a connectivity matrix. One embodiment of a connectivity matrix is shown in FIG. This distance is calculated for each inter-gate connection that requires interconnection. Therefore, the connectivity matrix M is examined for each gate i and gate j comparison. More specifically,
[0146]
[Expression 4]
[0147]
A matrix is set for every chip in the array so that each chip is identifiable numbered. These identification numbers are set at the top of the matrix as column headers. Similarly, these identification numbers are set along the side of the matrix as row headers. The particular entry at the intersection of the row and column in this matrix provides the direct connection data between the chip identified by the row and the chip identified by the column, where an intersection occurs. For any distance calculation between chip i and chip j, matrix Mi, jThe entry in includes either “1” for direct connections or “0” for non-direct connections. The index k indicates the number of hops that need to interconnect any gate in chip i to any gate in chip j that is required for interconnection.
[0148]
First, the connectivity matrix M for K = 1i, jShould be inspected. If the entry is “1”, there is a direct connection of this gate of chip i to the selected gate in chip j. Thus, the index or hop k = 1 is Mi, jWhich results in the distance between these two gates. At this point, another inter-gate connection can be examined. However, if the entry is “0”, there is no direct connection.
[0149]
If there is no direct connection, the next k should be examined. The new k (ie k = 2) is the matrix Mi, jAnd can be calculated by multiplying itself. In other words, M2= M * M (where k = 2).
[0150]
The process of multiplying M and M itself until a particular row and column entry for chip i and chip j continues until the calculated result is “1”, where index k is the number of hops. Selected as. This operation includes performing an AND operation between the AND matrices M, and then performing an OR operation on the result of the AND operation. Matrix mi, lAnd ml, jAND operation between and results in a logic "1" value, so that the connection is selected at chip i and at chip j via any
[0151]
The following examples illustrate these principles. 35 (A) to 35 (D), FIG. 35 (A) shows a user's circuit design shown as
[0152]
With reference to FIG. 35 (B), components of
[0153]
Referring to FIG. 35 (C), one possible configuration and arrangement is an
[0154]
FIG. 35D illustrates an example of another arrangement. Here, the
[0155]
After coarse grain placement, fine tuning of the placement of the flattened clusters further optimizes the placement results. This fine
[0156]
The determination of how much a cluster is divided and how much is placed on a given chip is also based on the placement cost, which is calculated by a cost function f (P, G, D) for the circuit CKTQ. . In one embodiment, the cost function used for the fine grain placement process is the same as the cost function used for the coarse grain placement process. The only difference between the two placement processes is the size of the deployed cluster, not the placement of the process itself. The coarse grain placement process uses larger clusters than the fine grain placement process. In other embodiments, the cost functions for the coarse grain placement process and the fine grain placement process are different from each other as described above with respect to the selection weight constants C0, C1, and C2.
[0157]
When the placement is completed, a chip-to-
[0158]
Once the placement and routing of each FPGA is determined, each FPGA can be configured into an optimized drive circuit, and thus the system generates a “bitstream”
[0159]
At this point, the configured hardware is being prepared for
[0160]
Returning to the TDM circuit, which allows the group of pin outputs to be time-division multiplexed together and only one pin output is actually used, the TDM circuit effectively has at least two inputs (two wires A multiplexer with one output and a register connection configured as a selector signal in the loop. More input and loop registers may be provided if the S emulation system requires more wires to be grouped together. As a selector signal to this TDM circuit, several registers configured in a loop provide the appropriate signal to the multiplexer, and in one period one of the inputs is selected as an output and in another period, Are selected as outputs. Therefore, the TDM circuit manages the use of only one output wire between the chips, and in this example, the hardware model of the circuit implemented on a particular chip uses 44 pins instead of 45 pins. Can be achieved. Thus, the routing task can always be terminated. This is because the pins can be arranged in a time-division multiplexed form in the chip.
[0161]
FIG. 9A shows a schematic diagram of the pinout problem. Since this requires a TDM circuit, FIG. 9B provides a TDM circuit for the transmitting side, and FIG. 9C provides a TDM circuit for the receiving side. These figures show only one specific example where the S emulation system requires one wire instead of two wires between chips. If two or more wires must be connected together in a time multiplexed configuration, one skilled in the art may allow appropriate modifications in view of the following teachings.
[0162]
FIG. 9A shows one embodiment of a TDM circuit where the S emulation system connects two wires in a TDM configuration. Two
[0163]
In this example, the group of
[0164]
FIG. 9B shows one embodiment of a TDM circuit. A modeled circuit (or part thereof) 960 in the
[0165]
The transmitting TDM circuit includes AND
[0166]
The looped register scheme includes
[0167]
One embodiment of the receiving side of the TDM circuit is shown in FIG. 9C. Signals from circuit 960 (FIGS. 9A and 9B) on
[0168]
The TDM circuit includes input registers 974 and 975. The signal on wire /
[0169]
The
[0170]
The address pointer according to one embodiment of the present invention is described in detail below, as briefly described with reference to FIG. For repetition, several address pointers are placed on each FPGA chip in the hardware model. In general, the primary purpose for implementing an address pointer is that the system can communicate with a particular FPGA chip in
[0171]
The FPGA I /
[0172]
Furthermore, the S emulator system has functions that allow the user to start, stop, assert input values, and inspect values at any time during the S emulation process. In order to provide the flexibility of the simulator, the S emulator must also make all components visible to the user, regardless of whether the internal implementation of the components exists in software or hardware. In software, the combined components are modeled and values are calculated during the simulation process. Thus, these values can be clearly “seen” that the user has access at any time during the simulation process.
[0173]
However, the value of the combination of hardware models is not directly “visible”. Although the registers are easily and directly accessible by the software kernel (ie, read / write), the combined components are more difficult to determine. In FPGAs, most combination components are modeled as look-up tables to achieve high gating functions. As a result, lookup table mapping provides efficient hardware modeling, but loses the visibility of most combinatorial logic signals.
[0174]
Despite these problems with the lack of visibility of the combination component, the simulation system can reconfigure or regenerate the combination component for inspection by the user after the hardware acceleration mode. If the user's circuit design has only combinational and register components, the values of all combinational components can be derived from the register component. That is, the combination component is constructed from or includes various configurations of registers according to the specific logic function required by the circuit design. The S emulator has a hardware model with only register and combination components, and as a result, the S emulator reads all register values from the hardware model and then reconfigures or regenerates all combination components. Due to the overhead required to perform this regeneration process, combinational component regeneration is not performed at all times. Rather, it is executed only in response to a user request. In practice, one benefit of using the hardware model is to accelerate the S emulation process. Determining the combination component in each cycle (or even most cycles) further reduces the speed of the simulation. In any event, checking only the register values should be sufficient for most simulation analyses.
[0175]
The process of regenerating the combined component value from the register value assumes that the S emulation system was in hardware acceleration mode or ICE mode. Otherwise, the software simulation already provides the combined component value to the user. The S emulation system maintains the combinational component values and register values that were resident in the software model before the start of hardware acceleration. These values are retained in the software model until further overwriting by the system. Since the software model already has register values and combination component values from the time immediately before the start of the hardware acceleration operation, the combination component regeneration process is responsible for these values in the software model depending on the updated input register values. Including updating some or all.
[0176]
The combined component regeneration process is as follows. First, when requested by the user, the software kernel reads all output values of the hardware register component from the FPGA chip to the REG buffer. This process involves transferring the register values of the FPGA chip to the REG address space via the address pointer chain. Placing register values that were in the hardware model in the REG buffer (at the software / hardware boundary) allows the software model to access the data for further processing.
[0177]
Second, the software kernel compares register values before and after hardware acceleration execution. If the register value before the hardware acceleration execution is the same as the value after the hardware acceleration execution, the value of the combination component is not changed. Instead of resources to regenerate time expansion and combination components, these values can be read from the software model, and this software model is a combination stored in the software model immediately before hardware acceleration execution. Has a component value. On the other hand, if one or more register values are changed, one or more combinational components that depend on the changed register values also change the value. These combined components must also be regenerated by the following third step.
[0178]
Third, for registers that have different values than the pre-acceleration and post-acceleration comparisons, the software kernel schedules the fanout combination component in the event queue. Here, these registers that change value during this acceleration operation detect events. Presumably, these combinational components that depend on these changed register values produce different values. Despite any changes in the values of these combination components, the system ensures that these changed register values are evaluated in the next step.
[0179]
Fourth, the software kernel then executes a standard event simulation algorithm to communicate values that vary from register to all combinational components in the software model. In other words, register values that change between pre-acceleration and post-acceleration time intervals are communicated downstream of all combinational components that depend on these register values. These combinational components must then evaluate these new register values. In accordance with the deployment and propagation principle, the second level combination component placed downstream from the first level combination component that directly depends on the next changed register value has been further changed, if any. Evaluate the data. This process of communicating register values to other component downstreams that may be affected continues to the end of the deployment network. Thus, only those combinational components that are located downstream and affected by the changed registers are updated in the software model. Not all combination components are affected. Thus, if only one register value and only one combination component changed between pre-acceleration and post-acceleration time intervals are affected by this register value change, then only this combination component Re-evaluate the value taking into account the changed register value. Other parts of this modeled circuit are not affected. For this small change, the combined component regeneration process occurs relatively quickly.
[0180]
Finally, when event transmission ends, the system is ready for operation in any mode. Usually the user wants to check the value after a long run. After the combined component regeneration process, the user continues pure software simulation for debugging / testing purposes. However, in other cases, the user wishes to continue hardware acceleration to the next desired point. In yet other cases, the user wishes to proceed further to ICE mode.
[0181]
In short, the combined component playback includes updating the component value of the software model using the register value. If any register value changes, the changed register value is communicated via the register's fanout network as the value is updated. If the register value does not change, then the software model value does not change, so the system does not need to regenerate the combined component. Typically, hardware acceleration occurs during a certain time. As a result, many register values can change, affecting many combinational component values located downstream of the deployment network of those registers that have changed values. In this case, the combined component regeneration process may be relatively slow. In other cases, only a few register values may be changed after hardware acceleration execution. The deployment network for registers with changed register values may be small, so the combinatorial component regeneration process may be relatively fast.
[0182]
IV. Emulation using target system mode
FIG. 10 illustrates an S emulation system architecture according to one embodiment of the present invention. Further, FIG. 10 shows the relationship between the software model, hardware model, emulation interface, and target system when the system operates in in-circuit emulation mode. As described above, the S emulation system includes a general purpose microprocessor and a reconfigurable hardware board interconnected by a high speed bus such as a PCI bus. The S emulation system compiles the user's circuit design and generates emulation hardware configuration data for a reconfigurable board mapping process to a hardware model. The user then simulates the circuit via a general-purpose processor, hardware accelerates the simulation process, emulates the circuit design using the target system via the emulation interface, and then performs post-simulation analysis To do.
[0183]
[0184]
The
[0185]
The hardware model includes
[0186]
Communication between the
[0187]
Double buffering is required for all primary inputs to S2H and CLK space. Because these spaces get several clock cycles and finish the update process. Double buffering avoids disturbing internal hardware model states that can cause race conditions.
[0188]
The S2H and CLK spaces are the primary inputs from the kernel to the hardware model. As described above, the hardware model substantially holds all register components and all combination components of the user's circuit design. In addition, the software clock is modeled in software, provided in the CLK I / O address space, and interfaces with the hardware model. The kernel progress simulation time searches for active test bench components and evaluates clock components. When any clock edge is retrieved by the kernel, the registers and memory are updated and the value is communicated through the combinational component. Thus, if the hardware acceleration mode is selected, any change in value in this space will trigger the hardware model to change the logic state.
[0189]
For in-circuit emulation mode, the
[0190]
The
[0191]
Furthermore, the
[0192]
To perform this task, all clock nodes between the target system and the hardware model are identified. The clock generator in the target system is disabled, the clock port from the target system is disconnected, or else the clock signal from the target system prevents it from reaching the hardware model. Instead, the clock signal originates from a test bench process or other generation form of a software generated clock. As a result, the software kernel can detect active clock edges and trigger data evaluation. Thus, in ICE mode, the S emulation system uses the software clock to control the hardware model instead of the target system clock.
[0193]
In order to simulate the operation of the user's circuit design within the environment of the target system, the primary input (input signal) and output (output signal) signals between the
[0194]
Further, the bus 61 is provided between the
[0195]
Typically, the
[0196]
V. Post-emulation analysis mode
The simulation system of the present invention can support change dump (VCD), which is a simulator function value widely used for post-simulation analysis. In essence, VCD provides a historical record of all hardware model inputs and selected register outputs. Thereafter, during the post-simulation analysis, the various inputs and the resulting output of the simulation process may be reviewed. To support VCD, the system writes all inputs to the hardware model. For output, the system writes all values of the hardware register component with a user-defined logging frequency (eg, 1 / 10,000 records / cycle). The writing frequency determines how often the output value is recorded. For a logging frequency of 1 / 10,000 records / cycle, the output value is recorded once every 10,000 cycles. As the logging frequency increases, more information is recorded for later post-simulation analysis. As the logging frequency decreases, less information is stored for later post-simulation processes. Since the selected write frequency has a non-constant relationship with the S emulation speed, the user should carefully select the logging frequency. Larger logging frequency reduces S emulation speed. This is because the system must consume time and resources to record output data in memory by performing I / O operations to memory before further simulation can be performed.
[0197]
For post-simulation analysis, the user selects a specific point where simulation is desired. When the logging frequency is 1/500 records / cycle, a register value is recorded for every 500 cycles such as
[0198]
The user can then perform a post-S emulation analysis by performing a software simulation using the input log on the hardware model to calculate a dump of all hardware components. Furthermore, the user selects an arbitrary register write point without delay, and starts a value change dump from the log point forward without delay. This value change dump method can be linked to any simulation waveform for post-simulation analysis.
[0199]
VI. Hardware implementation scheme
(A. Overview)
The S emulation system implements an array of FPGA chips on a reconfigurable substrate. Based on the hardware model, the S emulation system divides, maps, places, and routes each selected portion of the user's circuit design to the FPGA chip. Thus, for example, a 16 chip in a 4 × 4 array can model a large circuit that extends across these 16 chips. The interconnect scheme allows each chip to access two “jumps” or another chip in the link.
[0200]
Each FPGA chip implements an address pointer for each of the I / O address spaces (ie, REG, CLK, S2H, H2S). All address pointer combinations associated with a particular address space are chained together. Thus, during data transfer, the word data in each chip is transferred from the main FPGA bus and PCI bus to / from the main FPGA bus and PCI bus until the desired word data is accessed to the selected address space. The word data of the chip is continuously selected one word at a time and one chip at a time for the selected address space of each chip. Continuous selection of word data is achieved by transmitting a word selection signal. The word select signal proceeds with the address pointer in the chip and then propagates to the next chip's address pointer and continues until the last chip, or the system initializes the address pointer.
[0201]
The reconfigurable board FPGA bus system operates at twice the PCI bus bandwidth, but operates at half the PCI bus speed. Therefore, the FPGA chip is separated into banks and uses a larger bandwidth bus. The throughput of this FPGA bus system can track the throughput of the PCI bus system so that performance is not lost by reducing the bus speed. Expansion is possible with larger substrates including more FPGA chips or piggyback substrates that extend the bank length.
[0202]
(B. Address pointer)
FIG. 11 shows an embodiment of the address pointer of the present invention. All I / O operations proceed by DMA streaming. Since the system has only one bus, the system continuously accesses data one word at a time. Thus, one embodiment of the address pointer uses a shift register chain that continuously accesses selected words in these address spaces.
[0203]
Each address pointer has n outputs (W0, W1, W2, ..., Wn) to select a word from n possible words in each FPGA chip corresponding to the same word in the selected address space. -1). Depending on the particular modeled user circuit design, the number of words n varies between circuit designs, and for a given circuit design, n can vary between FPGA chips. In FIG. 11, the
[0204]
When the initialization signal is asserted, the address pointer is initialized. The first flip-
[0205]
The movement signal controls the progress of the pointer for word selection. This movement signal is generated from read, write, and spatial index control signals from the FPGA I / O controller. Since each operation is substantially a read or write, the spatial index signal determines which address pointer is substantially applied to the movement signal. Thus, the system drives only one address pointer associated with the selected I / O address space at a time, and during this time the system applies the move signal only to that address pointer. The generation of the movement signal is further described with respect to FIG. Referring to FIG. 11, when the movement signal is asserted, the movement signal is supplied to the input to AND
[0206]
An address pointer initialization procedure is described. FIG. 12 is a state transition diagram of address pointer initialization for the address pointer of FIG. Initially,
[0207]
A movement signal generator for generating various movement signals for the address pointer will now be described. The spatial index generated by the FPGA I / O controller (
[0208]
One embodiment of the movement signal generator is shown in FIG. Each
[0209]
[0210]
As described above, the spatial index is generated by the FPGA I / O controller. In the code, the movement control is
REG space read pointer: REGR-move = (SPACE-index == # REG) &READ;
REG space write pointer: REGW-move = (SPACE-index == # REG) &WRITE;
S2H space read pointer: S2H-move = (SPACE-index == # S2H) &READ;
H2S space write pointer: H2S-move = (SPACE-index == # H2S) &WRITE;
CLK space write pointer: CLK-move = (SPACE-index == # CLK) &WRITE;
This is an equivalent code for the logic diagram of the mobile signal generator on FIG.
[0211]
As described above, each FPGA chip has the same number of address pointers as the address space at the software / hardware boundary. If the software / hardware boundary has four address spaces (ie, REG, S2H, H2S, and CLK), each FPGA chip has four address pointers corresponding to these four address spaces. Since each FPGA requires these four address pointers, a particular selected word processed in the selected address space can reside on any one or more FPGA chips, or select The data in the designated address space is modeled in each FPGA chip and affects various circuit elements to be realized. To ensure that the selected word is processed with one or more appropriate circuit elements in the appropriate one or more FPGA chips, a given software / hardware boundary address space (ie, Each set of address pointers associated with REG, S2H, H2S, and CLK) is “chained” to each other across several FPGA chips. As described above with reference to FIG. 11, in this “chained” embodiment, an address pointer associated with a particular address space of one FPGA chip is associated with the same address space as the next FPGA chip. Except for being “changed” to a pointer, a specific shifting word selection mechanism or transmission word selection mechanism is still utilized via a movement signal.
[0212]
Implementing four input pins and four output pins to chain address pointers accomplishes the same purpose. However, this realization is too costly for efficient use of resources. That is, four wires are required between the two chips, and four input pins and four output pins are required at each chip. One embodiment of the system of the present invention uses a multiplexed cross-chip address pointer chain. This chain allows the hardware model to use only one wire between chips, only one input pin, and one output pin at each chip (two I / O pins of the chip). . One embodiment of a multiplexed cross-chip address pointer chain is shown in FIG.
[0213]
In the embodiment shown in FIG. 14, the user's circuit design is mapped and divided into three FPGA chips 415-417 on a
[0214]
For the REGR address space, the
[0215]
Each
[0216]
In FIG. 15, this particular FPGA chip has four address pointers 475-478 corresponding to the I / O address space. Address pointer outputs (out and move signals are inputs to
[0217]
Returning to FIG. 14, these multiplexers 418-420 have four sets of inputs and one output. Each set of inputs is (1) an out signal found at the last output Wn-1 wireline (eg,
[0218]
The inputs to the multiplexer 418 are movement signals 436 to 439 and out signals 440 to 443 corresponding to the out signals and movement signals from the
[0219]
In operation, for any given shift of word Wn, only those address pointers or chain address pointers associated with the selected I / O address space at the software / hardware boundary are active. Thus, in FIG. 14, only the address pointers at
[0220]
If the address pointer is in the process of transmitting or shifting the word select signal through the flip-flop, the output chainout signal is not activated (eg not "1"), so the chip's multiplexer is The signal is not yet ready for transmission to the next FPGA chip. If the out signal is asserted active (eg, “1”), the chainout signal indicating that the system is ready to transmit or shift the word select signal to the next FPGA chip is active (eg, “1”). ) Is asserted. Thus, access occurs on one chip at a time. That is, the word selection signal is shifted through the flip-flop of one chip before the word selection shift operation is performed on another chip. In practice, the chain-out signal is only asserted when the word select signal reaches the end of the address pointer in each chip. In the code, the chainout signal is
Chain-out = (REGR-move & REGR-out) | (REGW-move & REGW-out) | (S2H-move & S2H-out) | (H2S-move & H2S-out) |
In short, for each number X of I / O address spaces (ie, REG, H2S, S2H, CLK) in the system, each FPGA has X address pointers (one address pointer for each address space). The size of each address pointer depends on the number of words required to model the user's custom circuit design on each FPGA chip. Assuming n words for a particular FPGA chip (ie, n words for the address pointer), this particular address pointer will have n outputs (ie, W0, W1, W2,..., Wn−1). ). These outputs Wi are further called word select signals. If a particular word Wi is selected, the Wi signal is asserted active (ie, “1”). The word selection signal is shifted or transmitted to the address pointer of the chip until the word selection signal reaches the end of the address pointer of the chip. At this point, this signal triggers the generation of a chain-out signal that initiates transmission of the word select signal Wi via the address pointer of the next chip. Thus, a chain of address pointers associated with a given I / O address space can be implemented across all of the FPGA chips on this reconfigurable hardware board.
[0221]
(C. Gate data / clock network analysis)
Various embodiments of the present invention perform clock analysis according to gate data logic and gate clock logic analysis. Gate clock logic (or clock network) and gate data network decisions are important for logical evaluation of the hardware model during successive implementations and emulation of the software clock. As described with reference to FIG. 4, clock analysis is performed at
[0222]
The S emulation system has a complete model of the software user's circuit design and several parts of the hardware user's circuit design. These hardware parts include clock components (particularly derived clocks). The clock delivery timing issue occurs because of this boundary between software and hardware. Since the complete model is in software, the software can detect clock edges that affect register values. In addition to the register software model, physically these registers are located in the hardware model. The software / hardware boundary includes a software clock to ensure that the hardware register further evaluates its respective input (ie, moving data at the D input to the Q output). The software clock ensures that the registers in the hardware model are evaluated correctly. The software clock does not control the clock input to the hardware register component, but substantially controls the enable input of the hardware register. This software clock avoids race conditions and therefore does not require precise timing control to avoid holding time violations. The clock network and gate data logic analysis process shown in FIG. 16 is directed to a method and hardware register for modeling and implementing a clock so that race conditions are avoided and a flexible software / hardware boundary implementation is provided. A data delivery system is provided.
[0223]
As described above, the primary clock is a clock signal from the test bench process. All of the other clocks such as these clock signals generated from the combination component have been generated or are gate clocks. The primary clock may generate both a gate clock and a gate data signal. For the most part, only a few (eg 1-10) generated clocks or gate clocks are present in the user's circuit design. These generated clocks are implemented as software clocks and can remain in software. If a relatively large number (eg, more than 10) of generated clocks are present in the circuit design, the S emulation system models the clocks in hardware to reduce I / O overhead, and Maintain performance. Gate data is the data or control input of a register other than the clock generated from the primary clock through some combinational logic.
[0224]
The gate data / clock analysis process begins at
[0225]
Step 502 extracts a clock signal from a register component of the hardware model. This step allows the system to determine the primary clock and the generated clock. This step further determines all clock signals required by various components in the circuit design. Information from this step facilitates the software / hardware clock modeling step.
[0226]
Step 503 determines the primary clock and the generated clock. The primary clock originates from the test bench component and is modeled only in software. The generated clock is generated from combinatorial logic, which is then driven by the primary clock. By default, the S emulation system of the present invention keeps the generated clock in software. If the number of generated clocks (eg, less than 10) is small, these generated clocks can be modeled as software clocks. The number of combinational components that generate these generated clocks is small, so no significant I / O overhead is provided by keeping these combinational components resident in software. However, if the number of generated clocks is large (eg, greater than 10), these generated clocks can be modeled in hardware to minimize I / O overhead. Sometimes the user's circuit design uses many generated clock components generated from the primary clock. Thus, the system builds a clock in hardware and keeps the number of software clocks small.
[0227]
[0228]
Step 505 determines a fan-out combination component from the primary clock to the generated clock. In other words, this step tracks the clock signal data path from the primary clock by the combination component. Step 506 determines a fan-in combination component from the generated clock. In other words, this step tracks the clock signal data path from the combination component to the generated clock. Determining fan out sets and fan in sets in the system is done recursively in software. The net N fan-in set is as follows.
[0229]
[Equation 5]
[0230]
The gate clock or data logic network is determined by recursively determining the net N fan-in and fan-out sets and their intersections. The ultimate goal here is to determine the so-called net N fan insets. Typically, net N is a clock input node for determining the gate clock logic from each fan-in. In order to determine the gate data logic from each fan-in, the net N is the clock input node associated with the data input at hand. If the node is on a register, the net N is the clock input to this register for the data input associated with this register. The system finds all components that drive net N. For each component X driven with a net N, the system determines whether component X is a combination component. If each component X is not a combination component, then the net N fan-in set has no combination component and the net N is the primary clock.
[0231]
However, if at least one component X is a combination component, the system determines the net input Y of component X. The system now re-examines further in the circuit design by finding the input node to component X. For each net input Y of each component X, there may be a fan inset W connected to the net Y. This net Y fan-in set W is given to the net N fan-in set, and the component X is given to the set N.
[0232]
The net N fanout set is determined similarly. The net N fanout set is determined as follows.
[0233]
[Formula 6]
[0234]
Again, the gate clock or data logic network is determined by recursively determining the net N fan-in and fan-out sets and their interconnections. The ultimate goal here is to determine the net N so-called fanout sets. Typically, net N is a clock output node for determining the gate clock logic from each fanout. Thus, the set of all logic elements that use net N is determined. To determine the gate data logic from each fanout, the net N is the clock output node associated with the nearby data output. If the node is on a register, the net N is the output of this register relative to the primary clock drive input associated with this register. The system finds all components that use net N. For each component X that uses net N, the system determines whether component X is a combined component. If each component X is not a combination component, then the net N fanout set has no combination component and the net N is the primary clock.
[0235]
However, if at least one component X is a combination component, the system determines the net output Y of component X. Here, the system searches for further transfers from the primary clock in the circuit design by finding the output node from component X. For each net output Y from each component X, the fanout set W may have a logical output set W connected to the net Y. This net Y fanout set W is presented to the net N fanout set, and component X is presented to set N.
[0236]
Step 507 determines the clock network or gate clock logic. A clock network is an interconnection of fan-in and fan-out combination components.
[0237]
Similarly, the same fan-in and fan-out principles can be used to determine the gate data logic. Like the gate clock, the gate data is the data or control input of a register (except the clock) driven by the primary clock by some combinational logic. Gate data logic is the intersection of fan-in of gate data and fan-out from the primary clock. Thus, clock analysis and gate data analysis result in gate clock network / gate clock logic with some combinational logic and gate data logic. As described below, gate clock network and gate data network decisions are important for logic evaluation in the hardware model during successful implementation and emulation of the software clock. The clock / data network analysis ends at
[0238]
FIG. 17 shows basic building blocks of a hardware model according to an embodiment of the present invention. For register components, the S emulation system uses D as the basic block to build edge-triggered (ie flip-flop) and level-sensitive (ie latched) register hardware models using asynchronous load control. Use type flip-flops. This register model building block has the following ports. That is, Q (output state), A_E (asynchronous enable), A_D (asynchronous data), S_E (synchronous enable), S_D (synchronous data) and, of course, System. clk (system clock).
[0239]
The S emulation register model is triggered by the positive edge of the system clock or the positive level of the asynchronous enable (A_E) input. If either of these two positive edges or a positive level trigger event occurs, the register model searches for the asynchronous enable (A_E) input. When the asynchronous enable (A_E) input is enabled, the output Q gets the value of the asynchronous data (A_D); otherwise, when the synchronous enable (S_E) input is enabled, the output Q The value of (S_D) is acquired. On the other hand, if neither the asynchronous enable (A_E) nor the synchronous enable (S_E) input is enabled, the output Q is not evaluated despite the detection of the positive edge of the system clock. Thus, the inputs to these enable ports control the operation of this basic building block register model.
[0240]
The system uses the software clock, which is a specific enable register, to control the enable inputs of these register models. In complex user circuit designs, millions of elements are found in circuit designs, so the S emulation system implements millions of elements in the hardware model. Controlling all of these elements individually is expensive. This is because the overhead of sending millions of control signals to the hardware model takes longer than evaluating these elements in software. However, this complex circuit design requires only a few clocks (1-10) and is sufficient to control system state changes with only registers and combinational components. The hardware model of the S emulation system uses only registers and combinational components. The S emulation system further controls the evaluation of the hardware model by a software clock. In the S emulator system, the hardware model for the registers does not have a clock directly connected to other hardware components. Rather, the software kernel controls the value of all clocks. By controlling a few clock signals, the kernel has all control over the evaluation of the hardware model with a negligible amount of coprocessor processing overhead.
[0241]
Depending on whether the register model is used as a latch or flip-flop, the software clock is input to either the asynchronous enable (A_E) or synchronous enable (S_E) wire. The use of the software clock from the software model to the hardware model is triggered by edge detection of the clock component. When the software kernel detects the edge of the clock component, the software kernel sets the clock edge register via the CLK address space. This clock edge register controls the enable input, not the clock input, for the hardware register model. The global system clock further provides a clock input to the hardware register model. However, the clock edge register provides a software clock signal to the hardware register model via a double buffer interface. As explained below, the double buffer interface from the software clock to the hardware model ensures that all register models are updated synchronously with respect to the global system clock. Thus, the use of a software clock removes the risk of exceeding the hold time.
[0242]
18A and 18B show the building block register model implementation for latches and flip-flops. These register models are software clocked via appropriate enable inputs. Asynchronous ports (A_E, A_D) and synchronous ports (S_E, S_D) are used for either software clock or I / O operations, depending on whether the register model is used as a flip-flop or latch. The FIG. 18A shows an implementation of a register model when used as a latch. The latch is level sensitive. That is, output Q follows input D as long as the clock signal is asserted (eg, “1”). Here, the software clock signal is supplied to the asynchronous enable (A_E) input, and the data input is supplied to the asynchronous data (A_D) input. For I / O operations, the software kernel uses the synchronization enable (S_E) and synchronization data (S_D) inputs to download values to the Q port. This S_E port is used as the REG space address pointer, and S_D is used to access data to / from the local data bus.
[0243]
FIG. 18B shows the realization of the register model when used as a design flip-flop. The design flip-flop uses the following ports to determine the next state logic (data D, set (S), reset (R), and enable E). All of the next state logic of the design flip-flop is broken down into hardware combination components that are fed into the synchronous data (S_D) input. The software clock is input to the synchronization enable (S_E) input. For I / O operations, the software kernel uses asynchronous enable (A_E) and asynchronous data (A_D) inputs to download values to the Q port. The A_E port is used as a REG space write address pointer, and the A_D port is used to access data to / from the local data bus.
[0244]
Here, the software clock will be described. One embodiment of the software clock of the present invention is a clock enable signal to hardware register models, and data at the inputs to these hardware register models is evaluated with and in synchronization with the system clock. This eliminates race conditions and holding time excess. One embodiment of software clock logic includes clock edge detection logic in software. This clock edge detection logic triggers additional logic in hardware in response to clock edge detection. Such enable signal logic generates an enable signal at the enable input to the hardware register model before the data reaches these hardware register models. Gate clock network and gate data network decisions are critical to the successful implementation of logic evaluation in the software clock and hardware model during hardware acceleration mode. As described above, the clock network or gate clock logic is the intersection of the fan-in of the gate clock and the fan-out of the primary clock. Similarly, the gate data logic is also the intersection of the fan-in of the gate data and the fan-out of the primary clock for the data signal. These fan-in and fan-out concepts will be described with reference to FIG.
[0245]
As described above, the primary clock is generated by a software test bench process. The generated clock or gate clock is generated from a network driven by a combinational logic and then a primary clock. By default, the S emulation system of the present invention keeps the generated clock in software. If the number of generated clocks (eg, less than 10) is small, these generated clocks can be modeled as software clocks. The number of combinational components that generate these generated clocks is small, so no significant I / O overhead is provided by modeling these combinational components in software. However, if the number of generated clocks is large (eg, greater than 10), these generated clocks and this combined component can be modeled in hardware to minimize I / O overhead.
[0246]
Eventually, according to one embodiment of the present invention, clock edge detection occurring in software (via input to the primary clock) can be converted to hardware clock detection (input to the clock edge register). Through). Clock edge detection in software triggers an event in hardware, a register in the hardware model receives the clock enable signal before the data signal, and the evaluation of the data signal occurs in synchronization with the system clock, and the hold time Make sure to avoid excess.
[0247]
As mentioned above, the S emulation system has a complete model of the user's circuit design in software and several parts of the user's circuit design in hardware. As specified in the kernel, software can detect clock edges that affect hardware register values. In addition, the software / hardware boundary includes a software clock to ensure that the hardware register evaluates its respective input. The software clock ensures that registers in the hardware model are evaluated synchronously with the system clock and without any hold time exceeded. The software clock does not control the clock input to the hardware register component, but substantially controls the enable input of the hardware register component. The double buffer approach to implementing the software clock avoids race conditions by evaluating the registers in synchronization with the system clock and eliminates the need for precise timing control to avoid holding time excess. Make sure to remove.
[0248]
FIG. 19 illustrates one embodiment of a clock implementation system according to the present invention. Initially, gate clock logic and gate data logic are determined by the S emulator system as described above with respect to FIG. Thus, a distinction is made between gate clock logic and gate data logic. When implementing a double buffer, the drive source and double buffer primary logic should also be distinguished. Thus, the
[0249]
The modularized
[0250]
The
[0251]
Register 518 is a typical D-type register model that is modeled in hardware and is part of the user custom circuit design. This embodiment of the clock implementation scheme of the present invention strictly controls the evaluation. The ultimate goal of this clock setup is to ensure that the clock enable signal on
[0252]
To repeat, the
[0253]
The implementation of the software clock depends primarily on the clock setup shown in FIG. 19 in tune with the timing of the assertion of the ~ EVAL, INPUT-EN, CLK-EN and RESET signals.
[0254]
During the I / O phase, the ~ EVAL signal on
[0255]
~ EVAL is deasserted to disable the
[0256]
The INPUT-EN signal by
[0257]
As described above, the software clock implementation relies primarily on the clock setup shown in FIG. 19 aligned with the timing of asserting the ~ EVAL, INPUT-EN, CLK-EN, and RESET signals. FIG. 20 illustrates four states of a finite state machine that controls the software clock logic of FIG. 19 according to one embodiment of the invention.
[0258]
In
[0259]
In
[0260]
In
[0261]
In
[0262]
(D. FPGA array and control)
The S emulator system first compiles user circuit design data into a hardware model based on various controls including software models and element types. During the hardware compilation process, the system maps, places, and routes as previously described with respect to FIG. 6 for optimally separating, installing, and interconnecting the various elements that make up the user's circuit design. Run the process. Using known programming tools, a bitstream configuration file or a programmer object file (.pof) (or the original binary file (.rbf)) is referenced to reconfigure a hardware board containing many EPGA chips . Each chip includes a part of hardware corresponding to a user's circuit design.
[0263]
In one embodiment, the S emulator system uses an array of 4x4 FPGA chips (16 chips total). Exemplary FPGA chips include FPGA logic devices and the Xilinx XC4000 series family of Altera FLEX 10K devices.
[0264]
The Xilinx XC4000 series of FPGAs including XC4000, XC4000A, XC4000D, XC4000H, XC4000E, XC4000EX, XC4000L, and XC4000XL can be used. Specific FPGAs include Xilinx XC4005H, XC4025, and Xilinx 4028EX. The capacity of the Xilinx XC4028EX FPGA engine is approaching 500,000 gates on a single PCI board. Details of these Xilinx FPGAs can be obtained from their data book (Xilinx, The Programmable Logic Data Book (9/96)). This data book is incorporated herein by reference. For Altera FPGAs, details can be found in these data books (Altera, The 1996 Data Book (June 1996)). This data book is incorporated herein by reference.
[0265]
Simple general details of the XC4025 FPGA are provided. Each array chip consists of a 240-pin Xilinx chip. The Xilinx XC4025 densely packed array board contains about 440,000 configurable gates and can be aggregated on a computer to perform tasks. The Xilinx XC4025 FPGA consists of 1024 configurable logic blocks (CLB). Each CLB may implement 32-bit asynchronous SRAM or a small amount of general Boolean logic and two strobed registers. Around the chip, non-strobe I / O registers are provided. An alternative to XC4025 is XC4005H. A relatively low cost version of an array board with 120,000 structurable gates. The XC4005H device has a
[0266]
The functionality of the Xilinx XC4000 series FPGA can be customized by loading placement data into internal memory cells. The values stored in these memory cells determine the logic function and logic interconnection of the FPGA. These FPGA placement data can be stored in on-chip memory and loaded from external memory. Either the FPGA can read the placement data from the external serial PROM or the external parallel PROM, or the placement data can be written into the FPGA from the external device. These FPGAs can be reprogrammed indefinitely, especially if the hardware is dynamically changed, or if the user wants the hardware to adapt to different applications.
[0267]
Generally speaking, XC4000 series FPGAs have up to 1024 CLBs. Each CLB has a third lookup table (or function generator H) with three inputs, as well as two inputs with four inputs that provide some of the inputs to the two flip-flops or latches. With two look-up tables (or function generators F and G), it has two look-up table levels. The output of these look-up tables can be driven independently of these flip-flops or latches. CLB is an optional Boolean function ((1) any function with four or five variables, (2) any function with four variables, any second function with up to four unrelated variables. , Any third function with up to three unrelated variables, (3) one function with four variables and another function with six variables, (4) any two with four variables The following combinations of functions, (5) some functions with nine variables) may be implemented: Two D-type flip-flops or latches are available for registering CLB inputs or storing the output of look-up tables. These flip-flops can be used independently of the look-up table. DIN can be used as a direct input to either one of these two flip-flops or a latch, and H1 drives the other through an H-function generator.
[0268]
Each of the four input function generators of CLB (ie, F and G) includes dedicated arithmetic logic for rapidly generating carry and borrow signals. This dedicated arithmetic logic can be arranged to implement a 2-bit adder with carry-in and carry-out. These function generators can also be implemented as read / write random access memory (RAM). The four input wire lines are used as address lines for the RAM.
[0269]
The Altera FLEX 10K chip is somewhat similar in concept. These chips are programmable logic devices (PLDs) based on SRAM with multiple 32-bit buses. In particular, each FLEX 10K100 chip has approximately 1,000,000 gates, 12 embedded array blocks (EAB), 624 logical array blocks (LAB), and 8 logical elements (LE) per LAB ( Or 4,992 LE), 5,392 flip-flops or registers, 406 I / O pins, and a total of 503 pins.
[0270]
The Altera FLEX 10K chip includes an embedded array of embedded array blocks (EBA) and a logical array of logical array blocks (LAB). EAB is used to implement various memories (eg, RAM, ROM, FIFO) and complex logic functions (eg, digital signal processor (DSP), microcontroller, multiplier, data conversion function, state machine). Can be. To implement a memory function, EAB provides 2,048 bits. To implement a logic function, EAB provides 100 to 600 gates.
[0271]
LAB can be used to implement intermediate sized logic blocks via LE. Each LAB represents approximately 96 logic gates and includes 8 LEs and local interconnects. The LE includes a look-up table with four inputs, a programmable flip-flop, and a dedicated signal path for carry and cascade functions. Typical logic functions that can be created include counters, address encoders, or small state machines.
[0272]
A more detailed description of Altera FLEX10K can be found in Altera, 1996 DATA BOOK (June 1996), incorporated herein by reference. The data book also includes details of the assistive programming software.
[0273]
FIG. 8 illustrates one embodiment of 4 × 4 FPGA arrays and their interconnections. This embodiment of the S emulator does not use a crossbar or partial crossbar connection to the FPGA chip. The FPGA chip includes chips F11 to F14 in the first row, chips F21 to F24 in the second row, chips F31 to F34 in the third row, and chips F41 to F44 in the fourth row. In one embodiment, each FPGA (eg, chip F23) has the following pins for interface to the FPGA I / O controller of the S emulator system.
[0274]
[Table 1]
[0275]
Thus, in one embodiment, each EPGA chip uses only 41 pins to interface with the S emulator system. These pins are further described with respect to FIG.
[0276]
These FPGA chips are interconnected to each other via non-crossbar interconnects or non-partial crossbar interconnects. Each interconnection between chips, such as
[0277]
Each chip has six interconnects. For example, chip F11 has interconnects 600-605. Chip F33 also has interconnections 606-611. These interconnects run horizontally along the rows and vertically along the columns. Each interconnect provides a direct connection between two chips along a row or a direct connection between two chips along a column. Thus, for example, interconnect 600 directly connects chip F11 and chip F13; interconnect 601 directly connects chip F11 and chip F12; interconnect 602 directly connects chip F11 and chip F14;
[0278]
Similarly, for chip F33 not located at the edge of the array (eg, F11),
[0279]
Since chip F11 is located within one hop from chip F13,
[0280]
This interconnect scheme allows each chip to communicate with up to two “jumps” or any other chip in the array with the interconnect. Thus, chip F11 is connected to chip F33 through one of the following two paths ((1)
[0281]
Although FIG. 8 shows FPGA chips arranged in a 4 × 4 array with horizontal and vertical interconnects, the actual physical implementation on the board goes through low and high banks with extended piggyback boards. ing. Thus, in one embodiment, chips F41-F44 and F21-F24 are in a low bank. Chips F31-F34 and F11-F14 are in a high bank. The piggyback board includes chips F11 to F14 and F21 to F24. Thus, to expand the array, a piggyback board containing many (eg, eight) chips is added to the bank (ie, above the row that currently contains chips F11-F14). In other embodiments, the piggyback board extends the array below the row that currently contains chips F41-F44. Further embodiments allow for expansion to the right side of chips F14, F24, F34 and F44. Still other embodiments allow for expansion to the left of the chips F11, F21, F31 and F41.
[0282]
FIG. 7 shows the concatenation matrix for the 4 × 4 FPGA array of FIG. 8 when displayed as replaced by “1” or “0”. This connectivity matrix is used to generate the installation cost resulting from the hardware mapping, placement, and cost functions used in the routing process for this S emulation system. This cost function has been described above with respect to FIG. As an example, chip F11 is located within one hop from chip F13, so the input of the concatenation matrix for F11-F13 is “1”.
[0283]
FIG. 21 illustrates the interconnect pin-out for a single FPGA chip according to one embodiment of the present invention. Here, each chip has six sets of interconnects, each set including a certain number of pins. In one embodiment, each set has 44 pins. The interconnection of each FPGA chip is oriented horizontally (east-west) and vertically (north-south). The set of west-facing interconnections is displayed as W [43: 0]. The set of east-facing interconnections is displayed as E [43: 0]. The northward set of interconnections is displayed as N [43: 0]. The south-facing set of interconnections is displayed as S [43: 0]. These complete sets of interconnects relate to connections to adjacent chips. That is, these interconnects do not “hop” across any chip. For example, in FIG. 8, chip F33 includes an
[0284]
Returning to FIG. 21, two additional sets of interconnects remain. One set of interconnects relates to non-adjacent interconnects (YH [21: 0] and YH [43:22]) that run vertically. Another set of interconnects relates to non-adjacent interconnects that run horizontally on XH [21: 0] and XH [43:22]. Each set, YH [. . . ] And XH [. . . ] Is divided into two, each half of a set containing 22 pins. With this arrangement, each chip can be manufactured in the same manner. Thus, each chip can be interconnected in one hop to non-adjacent chips located at the top, bottom, left and right. The FPGA chip also shows the pin (s) for the overall signal, the FPGA bus, and the JTAG signal.
[0285]
Next, the FPGA I / O controller will be described. This controller was first briefly introduced as
[0286]
FIG. 22 illustrates one embodiment of an FPGA controller between the FPGA chip PCI bus and the FPGA array along the bank of FPGA chips. The FPGA I /
[0287]
The
[0288]
Between these FPGA chips F11-F14, F21-F24, F31-F34 and F41-F44, and a low bank bus 718 and a
[0289]
If expansion is desired, the FPGA chips can be further installed on the low bank bus 718 and the
[0290]
The
[0291]
The
[0292]
The
[0293]
The FPGA
[0294]
The boundary
[0295]
The
[0296]
In one embodiment, the processing capabilities of the
[0297]
The address pointer according to an embodiment of the present invention is further implemented in each FPGA chip of each software / hardware boundary address space. These address pointers are spanned across several FPGA chips through a multiplexed cross-chip address pointer chain. See the address pointer discussion above with respect to FIGS. 9, 11, 12, 14, and 15. In order to move word select signals across a chain of address pointers and several chips associated with a given address space, a chain-out wire line needs to be provided. These chain-out wire lines are shown as arrows between the chips. One such chain-out wire line for the low bank is a
[0298]
The
[0299]
If some FPGA chips assert this signal using the EVAL_REQ # signal, the evaluation cycle begins again at all points. For example, to evaluate the data, the data is transferred or written from the main memory of the host processor computing station to the FPGA via the PCI bus. When the transfer is complete, the evaluation cycle begins to include address pointer initialization and software clock operations to facilitate the evaluation process. However, for various reasons, certain FPGA chips may need to evaluate the data at all points again. The FPGA chip asserts the EVAL_REQ # signal, and the
[0300]
FIG. 23 shows a more detailed view of the
[0301]
The
[0302]
Transfer completion checking logic (XSFR_DONE) 1000 receives LAST_SHIFT_H733, LAST_SHIFT_L732, and local INTO 708a. The
[0303]
The
[0304]
The
[0305]
The
[0306]
The
[0307]
The
[0308]
Write
[0309]
The SEM_FPGA R /
[0310]
DEMUX logic 1008 is a multiplexer and latch. The multiplexer and latch receive four sets of input signals and output one set of signals on wire /
[0311]
The data buffer between the
[0312]
[0313]
[0314]
The
[0315]
FIG. 24 shows the 4 × 4 FPGA array, its relationship to the FPGA bank, and expansion performance. As in FIG. 8, FIG. 24 shows a similar 4 × 4 array. A
[0316]
Expansion can be achieved on a piggyback board. Assuming in FIG. 24 that the original array of FPGA chips includes F41-F44 and F31-F34, the addition of two further rows of chips F21-F24 and F11-F14 can be achieved in the
[0317]
FIG. 25 illustrates one embodiment of a hardware activation method. Step 800 initiates a power on or warm boot sequence. In
[0318]
(E. Alternative embodiment using higher density FPGA chip)
In one embodiment of the present invention, FPGA logic devices are provided on individual boards. Multiple boards with more FPGAs can be provided if more FPGA logic devices need to follow the user's circuit design than provided with individual boards. The ability to add additional boards into the simulation system is a desirable feature of the present invention. In this embodiment, higher density FPGA chips (eg, Altera 10K130V and 10K250V) are used. The use of these chips changes the board design so that only four FPGA chips are used per board instead of eight lower density FPGA chips (eg, Altera 10K100).
[0319]
There are challenges in connecting these boards to the motherboard of the simulation system. Interconnection and connection schemes need to be compensated for backplane shortages. The FPGA array in the simulation system is provided on the motherboard via a specific interconnect configuration. Interconnects that are directly adjacent to each other (ie, N [73: 0], S [73: 0], W [73: 0], E [73: 0]), and every other adjacent interconnect Arranged by connection (ie NH [27: 0], SH [27: 0], XH [36: 0], XH [72:37]) and local bus connections within a single board and across different boards Each chip may have no more than 8 sets of interconnects. Each chip can be interconnected either directly to adjacent neighboring chips or alternately to chips located at the top, bottom, left, and right that are not adjacent. In the X direction (east-west), the array is torus. In the Y direction (north-south), the array is meshed.
[0320]
An interconnect may link logic devices and other components within a single board. However, providing an inter-board connector to link these boards and interconnects together across different boards, (1) a PCI bus through the motherboard and array board, and (2) between any two array boards Communicate the signal. Each board includes its own FPGA bus FD [63: 0]. The FPGA bus FD [63: 0] allows the FPGA logic device to communicate with the SRAM memory device and the CTRL_FPGA unit (FPGA I / O controller). The FPGA bus FD [63: 0] is not provided across multiple boards. However, FPGA interconnections provide connectivity between FPGA logic devices across multiple boards. However, these interconnections are not related to the FPGA bus. On the other hand, a local bus is provided across all boards.
[0321]
The motherboard connector connects the board to the motherboard and thus to the PCI bus, power supply, and ground. For some boards, the motherboard connector is not used to connect directly to the motherboard. In a six board configuration, only
[0322]
FIG. 56 shows a high level block diagram of an array of FPGA chip configurations according to one embodiment of the present invention. The
[0323]
Since the user's design is modeled and configured with any number of these logical devices in the array, internal FPGA logic device communication is necessary to connect one part of the user's circuit design to another part. . Furthermore, internal configuration information and boundaries are also supported by internal FPGA interconnects. Finally, the necessary simulation system control signals need to be accessible between the simulation system and the FPGA logic device.
[0324]
FIG. 36 shows the hardware architecture of the FPGA logic device used in the present invention. The
[0325]
FIG. 37 illustrates the FPGA interconnect pinout of a single FPGA chip according to one embodiment of the present invention. If each set includes a specific number of pins, each
[0326]
Returning to FIG. 37, four sets of “hopping” interconnections are provided. Two sets of interconnects running in the vertical direction (NH [27: 0] and SH [27: 0]) are non-adjacent interconnects. For example, FPGA2 chip 1570 of FIG. 39 shows
[0327]
Returning to FIG. 37, the vertical hopping interconnects NH [27: 0] and SH [27: 0] each have 28 pins. The horizontal interconnect has 73 pins, XH [36: 0] and XH [72:37]. Horizontal interconnect pins, XH [36: 0] and XH [72:37] are connected to the west side (eg,
[0328]
FIG. 39 shows a layout of six immediately adjacent FPGA arrays and every other adjacent FPGA array on a single motherboard according to an embodiment of the present invention. Using this figure, two possible configurations (6-board system and 2-board system) are shown. The
[0329]
Note that FIG. 39 provides an array diagram of boards and other components, interconnections, and connectors. The actual physical configuration and setup involves placing these boards on the component side of their respective ends on the solder side. About half of the boards are connected directly to the motherboard and the other half are connected to their respective adjacent boards.
[0330]
In the six board embodiment of the present invention, six boards 1551 (board 1), 1552 (board 2), 1553 (board 3), 1554 (board 4), 1555 (board 5), and 1556 (board 6). Are provided on a motherboard (not shown) as part of the
[0331]
In this six board configuration,
[0332]
As described above, the interconnects are directly adjacent interconnects (ie, N [73: 0], S [73: 0], W [73: 0], E [73: 0]), and one Composed of alternate adjacent interconnects (ie, NH [27: 0], SH [27: 0], XH [36: 0], XH [72:37]), within a single board and different Exclude local bus connections across the board. An interconnect alone can combine logical devices and other components within a single board. However, internal board connectors 1581-1590 allow communication between FPGA logic devices across different boards (i.e., board 1-board 6). The FPGA bus is part of the internal board connectors 1581-1590. These connectors 1581-1590 are 600 pin connectors that transmit 520 signals and 80 power / ground connections between two adjacent array boards.
[0333]
In FIG. 39, the various boards are arranged in an asymmetric manner with respect to the internal board connectors 1581-1590. For example, between
[0334]
As a result of this asymmetry, the interconnects connect the internal board connectors in two different ways: one is a symmetric interconnect such as
[0335]
In FIG. 39, an example of a directly adjacent connection within a single board is an
[0336]
Every other interconnect in the exemplary single board is an
[0337]
Some boards, especially those located at the north-south end on the motherboard, also include 10 Ω R-packs to terminate some connections. Accordingly, the
[0338]
These mesh terminals increase the number of north-south direct interconnections. Otherwise, the interconnects at the north and north ends and south ends of the FPGA mesh are all wasted. For example,
[0339]
An internal board connection is further provided.
[0340]
For example, some interconnects such as 1595, 1596, 1597, and 1598 are not coupled together. Because they are not used. However, as described above for
[0341]
A two board embodiment of the present invention is shown in FIG. In the two board embodiment of the present invention, only two boards need to follow the user's design in the simulation system. Like the six board configuration of FIG. 39, the two board configuration of FIG. 44 uses the same two “bookend” boards (
[0342]
The two board configurations include four FPGA logic devices 1577 (FPGA0), 1578 (FPGA1), 1579 (FPGA2), and 1580 (FPGA3) on
[0343]
These boards include a 10Ω R-pack to terminate some connections. With respect to the two board embodiment, both boards are “bookend” boards.
[0344]
The
[0345]
For the four board configuration,
[0346]
For a six board configuration,
[0347]
Additional boards can be provided if desired. However, regardless of the boards added to the system, the book end boards (eg, like
[0348]
As described above, each logical device is coupled to an adjacent adjacent logical device and every other adjacent logical device that is not adjacent. Thus, in FIGS. 39 and 44,
[0349]
FIG. 42 shows a top view (component side) of on-board components and connectors of a single board. In one embodiment of the present invention, only one board is required to model a user's design in a simulation system. In other embodiments, multiple boards (ie, at least two boards) are required. Thus, for example, FIG. 39 shows six boards 1551-1556 coupled together via various 600 pin connectors 1581-1590. At the top and bottom,
[0350]
Returning to FIG. 42, the
[0351]
A light emitting diode (LED) 1821 is also provided to visually show some selective activity. The LED display is as shown in Table A according to one embodiment of the present invention.
[0352]
[Table 2]
[0353]
Various other control chips, such as
[0354]
Connector 1830 connects
[0355]
The connector J1 is for external power and ground connection. Table B below shows external power pins and corresponding details according to one embodiment of the present invention.
[0356]
[Table 3]
[0357]
The connector J2 is for parallel port connection. Connectors J1 and J2 are used for single single board boundary scan testing during operation. Table C below shows the pins and corresponding details of the parallel JTAG port connector J2 according to one embodiment of the present invention.
[0358]
[Table 4]
[0359]
Connectors J3 and J4 are for local bus connections across the board. Connectors J5-J16 are a set with connections for FPGA interconnection. Connectors J17-J28 are connections for the second set of FPGA interconnects. When installed from the component side to the solder side, these connectors provide an effective connection between one component of one board and another component of another board. Tables D and E below provide a complete list and details of connectors J1-J28 according to one embodiment of the present invention.
[0360]
[Table 5]
[0361]
The shaded connector is a through-hole type. Note that in Table D, the numbers in brackets [] represent FPGA logic device numbers 0-3. Thus, S [0] indicates the southward interconnection (ie, S [73: 0] in FIG. 37) and 74 bits of FPGA0.
[0362]
[Table 6]
[0363]
FIG. 43 illustrates the connectors J1 to J28 in FIGS. 41A to 41F and 42. Generally, a clear block is a surface-mounted type, while a gray block is a through-hole type. Further, a block whose outline is a solid line represents a connector placed on the component surface. A block with a dotted outline represents a connector placed on the solder surface. Thus, blank and
[0364]
41A-41F show top views of the boards and their respective connectors. Thus,
[0365]
In one embodiment, these connectors are specified for internal board communication. The related buses and signals are grouped together and supported by these internal board connectors for routing signals between any two boards. In addition, only half of the board is directly coupled to the motherboard. In FIG. 41A,
[0366]
In FIG. 41B,
[0367]
In FIG. 41C,
[0368]
In FIG. 41D,
[0369]
In FIG. 41E,
[0370]
In FIG. 41F,
[0371]
In one embodiment of the present invention, the plurality of boards are coupled to the motherboard and each other in a unique manner. The plurality of boards are bonded together with the component side to the solder side. One of the boards (eg, the first board) is coupled to the motherboard via the motherboard connector, and thus to the PCI bus. Further, the FPGA interconnect bus of the first board is coupled to the FPGA interconnect bus of another board (eg, the second bus) via a set of FPGA interconnect connectors. The FPGA interconnect connector on the first board is on the component side, and the FPGA interconnect connector on the second board is on the solder side. A component side connector on the first board and a solder side connector on the second board, respectively, allow the FPGA interconnect buses to be coupled together.
[0372]
Similarly, the local buses on the two boards are coupled together via a local bus connector. The local bus connector on the first board is on the component side and the local bus connector on the second board is on the solder side. Thus, the local buses can be coupled together by a component side connector on the first board and a solder side connector on the second board, respectively.
[0373]
Additional boards can be added. The third board may add the solder surface of the third board to the component side of the second board. Similar FPGA interconnects and local bus internal board connections are further added. The third board is also coupled to the motherboard via another connector, which simply provides power and ground to the third board, as further described below.
[0374]
The component side to solder side connector in the two board configuration is discussed in FIG. 38A for reference. This figure shows a side view of the connection of an FPGA board on a motherboard according to an embodiment of the present invention. FIG. 38A shows two board configurations, and as the name implies, two boards are used. In FIG. 38A, these two boards 1525 (board 2) and 1526 (board 1) coincide with the two
[0375]
As shown in FIG. 38A, the
[0376]
In one embodiment, connectors 1528A and 1528B are FPGA bus internal board connectors, such as 1590 and 1581 (FIG. 44), for example. These internal board connectors include various FPGA interconnects (eg, N [73: 0], S [73: 0], W [73: 0], E [73: 0], NH [27: 0], SH [27: 0], XH [36: 0], and XH [72:37]) provide internal board connectivity and exclude local bus connections.
[0377]
Further, connectors 1531A and 1531B are local bus internal board connectors. The local bus handles signals between the PCI bus (via the PCI controller) and the FPGA bus (via the FPGA I / O controller (CTRL_FPGA) unit). The local bus also handles configuration and boundary scan test information between the PCI controller and FPGA logic device and the FPGA I / O controller (CTRL_FPGA) unit.
[0378]
That is, the motherboard connector couples one board of a set of boards to the PCI bus and power. One set of connectors couples the FPGA interconnect to the solder side of another board through the component side of one board. Another set of connectors couples the local bus to the solder side of another board via the component side of one board.
[0379]
In another embodiment of the invention, more than two boards are used. In practice, FIG. 38B shows a six board configuration. This configuration is similar to that of FIG. 38A, and the motherboard and all other boards connected directly to the board and the local bus have internal board connectors located from the solder side to the component side. Are joined together.
[0380]
FIG. 38B shows six boards, 1526 (first board), 1525 (second board), 1532 (third board), 1533 (fourth board), 1534 (fifth board), and 1535. (Sixth board). These six boards are coupled to the
[0381]
When placed from the solder side to the component side, various internal board connectors allow communication between PCI bus components, FPGA logic devices, memory devices, and various simulation system control circuits. The first set of
[0382]
Motherboard connectors 1521-1524 are provided on the
[0383]
With respect to boards 1526 (first board), 1532 (third board), and 1534 (fifth board) that are directly coupled to
[0384]
Figures 40A and 40B show array connections between different boards. To facilitate the manufacturing process, a single layout design is used for all boards. As described above, the board connects to other boards via connectors without a backplane. FIG. 40A shows two example boards 1611 (board 2) and 1610 (board 1). The component surface of the
[0385]
Similarly,
[0386]
The routing of signals between nodes installed on different boards using surface mount connectors will now be discussed. In FIG. 40A, (1) Node A and Node B ′ as indicated by
[0387]
A-A 'and B-B' correspond to a symmetric interconnect, such as interconnect 1515 (N, S). N and S interconnects are used through Hall connectors, whereas NH and SH asymmetric interconnects use SMD connectors (see Table D).
[0388]
An actual device that uses a surface mount connector will now be discussed with reference to FIG. 40B, using similar numbers for similar items. In FIG. 40B, a
[0389]
Similarly, in FIG. 40B,
[0390]
(F. Timing unresponsive glitch-free logic device)
One embodiment of the present invention solves both the hold time and clock glitch problems. While configuring a user design into a reconfigurable computing system, standard logic devices (eg, latches, flip-flops) detected in the user's design are emulated logic devices, i.e., non-timing devices, according to one embodiment of the invention. Replaced with reactive glitch free (TIGF) logic device. In one embodiment, the trigger signal captured in the EVAL signal is used to update the value stored in these TIGF logic devices. Waits for various input signals and other signals, communicates through a user-designed hardware model, and after reaching a steady state during the evaluation period, a trigger signal is provided and stored by the TIGF logic device, Or update the latched value. As a result, a new evaluation cycle begins. The trigger period of the evaluation period is periodic in one embodiment.
[0390]
The retention time problem described above is briefly discussed here. For those skilled in the art, a common and widespread problem in logic circuit design is violation of retention time. After the control input changes to latch, capture, or store the value indicated by the data input (s), the logic element data input (s) are held stationary. The retention time is defined as the minimum time required to do this (otherwise the logic element cannot operate properly).
[0392]
An example of a shift register will now be discussed to explain the retention time requirement. FIG. 75A shows an exemplary shift register. This exemplary shift register connects three D-type flip-flops in series. That is, the output of flip-
[0393]
Referring to the timing diagram of FIG. 75B, a hold time condition is illustrated when the system does not violate a hold time request. The retention time varies from one logic element to the next, but is always specified in the specification. The clock input goes from
[0394]
[Table 7]
[0395]
In actual implementation, the clock signal does not reach all the logic elements simultaneously. Rather, the circuit is designed so that the clock signal reaches all the logic elements almost simultaneously or substantially simultaneously. The clock skew (ie, the timing difference between the clock signals reaching each flip-flop) needs to be designed to be much shorter than the hold time requirement. Thus, all logic elements capture the appropriate input value. In the above example shown in FIGS. 75A and 75B, while another flip-flop captures the new input value, a violation of the holding time by the clock signal reaching the flip-flops 2400-2402 at different times results in the old input Occurs in some flip-flops that capture a value, while another flip-flop captures a new input value. As a result, the shift register is not operated properly.
[0396]
In reconfigurable logic device (eg, FPGA) devices of the same shift register design, if the clock is generated directly from the primary input, the circuit allows the low skew network to distribute the clock signal to all logic elements. (E.g., logic elements detect clock edges at substantially the same time). The primary clock is generated from a self-time test-bench process. Mostly, the primary clock signal is generated in software, and only a few (ie, 1-10) primary clocks are found in typical user circuit designs.
[0397]
However, hold time becomes even more problematic when the clock signal is generated from internal logic instead of the primary input. The induced and gated clock is generated from a network of combinatorial logic and registers that are sequentially driven by the primary clock. Many (ie, over 1000) derived clocks are found in typical user circuit designs.
[0398]
Without special care or further control, these clock signals reach each logic element at different times, and the clock skew can be longer than the hold time. This can result in circuit design failure, such as the shift register circuit illustrated in FIGS. 75A and 75B.
[0399]
Using the same shift register circuit illustrated in FIG. 75A, a hold time violation will now be discussed. This time, however, individual flip-flops of the shift register circuit are deployed across multiple reconfigurable logic chips (eg, multiple FPGA chips), as shown in FIG. 76A. The
[0400]
The
[0401]
Referring to the timing diagram of FIG. 76B, the internal clock signal CLK is time t.2Is generated and triggered. Due to wire trace delay, CLK1 is time t3The flip-
[0402]
When this occurs for flip-
[0403]
The clock glitch problem described above will now be described with reference to FIGS. 77A and 77B. In general, when the circuit input changes, the output changes to some random value in a very short time before the output stabilizes to the correct value. If another circuit checks the output at the very wrong time and reads a random value, the result is wrong and debugging can be difficult. This random value that adversely affects another circuit is called a glitch. In a typical logic circuit, one circuit may generate a clock signal for another circuit. If uncompensated timing delays are present in one or both circuits, clock glitches (ie, unplanned occurrences of clock edges) can occur and produce erroneous results. Clock glitches occur because the exact logic elements of the circuit design change values at different times, such as hold time violations.
[0404]
FIG. 77A shows an exemplary logic circuit. In this case, some logic elements generate clock signals for another set of logic elements. That is, the D-type flip-flop 2420, the D-type flip-flop 2425, and the exclusive OR (XOR) gate 2422 generate a clock signal (CLK3) for the D-type flip-flop 2423. Flip-flop 2420 is connected by line 2425 to D1Receive data input at line 24271Output data at. The flip-flop 2420 receives a clock input (CLK1) from the clock logic 2424. CLK refers to the clock signal originally generated from clock logic 2424, and CLK1 refers to the same signal delayed until the time it reaches flip-flop 2420.
[0405]
Flip-flop 2421 is connected by line 2426 to D2Data input at Q2Output data at. The flip-flop 2421 receives the clock input (CLK 2) from the clock logic 2424. As described above, CLK refers to the clock signal originally generated from clock logic 2424, and CLK2 refers to the same signal that is delayed until the time it reaches flip-flop 2421.
[0406]
The output from flip-flop 2420 by line 2427 and the output from flip-flop 2421 by line 2428 are inputs to XOR gate 2422. The XOR gate 2422 outputs data encoded as CLK3 to the clock input of the flip-flop 2423. Flip-flop 2423 is also connected by line 2429 to D3Enter the data at3Output data at.
[0407]
The clock glitch problem that arises for this circuit will now be described with reference to the timing diagram illustrated in FIG. 77B. The CLK signal is time t0Triggered at By this time, this clock signal (ie, CLK1) has reached flip-flop 2420, and this time has already been reached at time t1It is. CLK2 is the time t2Until the flip-flop 2421 is not reached.
[0408]
D1And D2Assume that both inputs to are at logic one. CLK1 is time t1When the flip-flop 2420 is reached at1The output at is at logic 1 (as shown in FIG. 77B). CLK2 is the time t2Arrives at the flip-flop 2421 with a slight delay, and hence the output Q of line 24282Is the time t1To time t2Until then, it remains at
[0409]
Two known solutions to the retention time violation problem are (1) timing adjustment and (2) timing reintegration. Timing adjustment requires the insertion of sufficient delay elements in the correct signal path to extend the holding time of the logic elements as described in US Pat. No. 5,478,830. For example, the input D in the shift register circuit described above2And D3Adding a sufficient delay due to can prevent retention time violations. Therefore, in FIG. 78, a similar shift register circuit has an input D2And D3Are shown with
[0410]
A potential problem with the timing adjustment solution is a strong dependence on the FPGA chip specification. As is well known in the art, a reconfigurable logic chip, such as an FPGA chip, is to implement a logic element using a look-up table. The chip lookup table delay is provided to the specification and the designer using a timing adjustment method that avoids holding time excess depending on this identified time delay. However, this delay is only an evaluation and varies from chip to chip. Another potential problem with timing adjustment methods is that the designer must compensate for wiring delays that exist across the circuit design. This is not an impossible task, but wiring delay evaluation tends to be time consuming and error prone. Furthermore, the timing adjustment method does not solve the clock glitch problem.
[0411]
Another solution is timing resynthesis, a technique introduced by IKOS's VirtualWires technology. The concept of timing recombination strictly controls the timing of clock and pin-out signals through a finite state machine and registers while transforming the user's circuit design into a functionally equivalent design. Timing resynthesis retimes the user's circuit design by introducing a single high speed clock. In addition, the latch, gate clock, and multiple synchronous and multiple asynchronous clocks are converted to a flip-flop based single clock synchronous design. Therefore, timing recombination uses registers at the input pinout and output pinout of each chip to control precise internal chip signal movement so that no internal chip holding time is exceeded. In addition, timing resynthesis uses a finite state machine at each chip, schedules inputs from other chips, schedules outputs to other chips, and schedules internal flip-flop updates based on a reference clock To do.
[0412]
By using the same shift register circuit introduced by the description given above with respect to FIGS. 75A, 75B, 76A, and 76B, FIG. 79 shows an example of a timing resynthesis circuit. The basic three flip-flop shift register design has been converted to a functional equivalent circuit.
[0413]
In addition, the CLK signal is delivered across
[0414]
[0415]
[0416]
With timing resynthesis, a finite state machine 2438-2442, registers 2443-2447 and 2466, and a single global reference clock are used to control signal flow across multiple chips and update internal flip-flops. Thus, at
[0417]
However, timing resynthesis techniques require the user's circuit design to be converted to a much larger functionally equivalent circuit, including the addition of finite state machines and registers. Typically, the additional logic required to implement this technology accounts for up to 20% of the logic available on each chip. Furthermore, this technique is not affected by the clock glitch problem. In order to avoid clock glitches, designers using timing resynthesis techniques must take additional preliminary steps. One conservative design approach is to design the circuit so that the inputs to the logic device utilizing the gate clock are not changed simultaneously. An aggressive approach uses a gate delay to filter glitches so as not to affect the rest of the circuit. However, as noted above, timing resynthesis requires some additional non-trivial measurements to avoid clock glitches.
[0418]
Various embodiments of the present invention that solve both the hold time and clock glitch problems are described. During a user-designed mapping configuration to the RCC computing system software model and the RCC array hardware model, the latch shown in FIG. 18A is free of timing-sensitive glitches (TIGF) according to one embodiment of the invention. ) Emulate using a latch. Similarly, the design flip-flop shown in FIG. 18B is emulated using a TIGF flip-flop according to one embodiment of the present invention. These TIGF logic devices, whether in the form of latches or flip-flops, can also be referred to as emulation logic devices. The update of the TIGF latch and flip-flop is controlled using a global trigger signal.
[0419]
In one embodiment of the present invention, not all of the logic devices found in the user design circuit are replaced with TIGF logic devices. The user design circuit includes a primary clock controlled by a gated clock or generated clock and these parts enabled or clocked by other parts. Retention time exceeded and clock glitches are issued for the latter case where the logic device is controlled by the gate clock or generated clock, so only those specific logic devices controlled by the gate clock or generated clock are Replaced with a TIGF logic device according to the present invention. In other embodiments, all logic devices found in the user design circuit are replaced by TIGF logic devices.
[0420]
Before describing the TIGF latch and flip-flop embodiments of the present invention, the global trigger signal will be described. In general, the global trigger signal keeps the TIGF latch and flip-flop in its state (i.e. maintains the old input value) during the evaluation period and updates its state during the short trigger period (i.e. Used to allow new input values to be stored). In one embodiment, the global trigger signal shown in FIG. 82 is separated from and generated from the EVAL signal described above. In this embodiment, the global trigger signal has a short trigger period next to a long evaluation period. A global trigger signal is generated to track the EVAL signal during the evaluation period and at the end of the EVAL cycle, with a short trigger signal updating the TIGF latch and flip-flop. In another embodiment, the EVAL signal is a global trigger signal, and the EVAL signal is in one logic state (eg, logic 0) during the evaluation period, and during the non-evaluation period or TIGF latch / flip-flop update period. Another logic state (eg logic 1).
[0421]
As described above with respect to the RCC computing system and RCC hardware array, an evaluation period is used to communicate all changes of the primary inputs and flip-flop / latch devices to the entire user design, one simulation cycle at a time. The During this transmission, the RCC system waits until all signals in the system reach a steady state. This evaluation period is calculated after the user design is mapped and placed on the appropriate reconfigurable logic device (eg, FPGA chip) in the RCC array. The evaluation period is therefore design specific. That is, the evaluation period for one user design may be different from the evaluation period for another user design. This evaluation period must be long enough to ensure that all signals in the system are transmitted through the entire system and reach a steady state before the next short trigger period.
[0422]
As shown in FIG. 82, a short trigger period occurs in time adjacent to the evaluation period. In one embodiment, a short trigger period occurs after the evaluation period. Prior to this short trigger period, the input signal is transmitted across the hardware model components of the user design circuit during the evaluation period. A short trigger period characterized by a change in the logic state of the EVAL signal according to one embodiment of the present invention controls all TIGF latches and flip-flops of the user design and communicates from the evaluation period after a stable state is achieved. Can be updated with the new value. This short trigger period may be as short as the period that is globally distributed to the low skew network and allows the reconfigurable logic device to operate properly (ie, as shown in FIG. 82, t0~ T1And t2~ T3Duration). During this short trigger period, the new primary input is sampled at each input stage of the TIGF latch and flip-flop, and the old stored value in the same TIGF latch and flip-flop is the next stage in the user-designed RCC hardware model. Is output. In the following description, the part of the global trigger signal that occurs during a short trigger period is referred to as a TIGF trigger, a TIGF trigger signal, a trigger signal, or simply a trigger.
[0423]
FIG. 80A shows the
[0424]
if (#S), Q ← 1
else if (#R), Q ← 0
else if (en), Q ← D
else Q keeps the old value.
Since this latch is level sensitive and asynchronous, output Q tracks input D as long as the clock input is enabled and the latch enable input is enabled.
[0425]
FIG. 80B illustrates a TIGF latch according to one embodiment of the present invention. Similar to the latch of FIG. 80A, the TIGF latch has a D input, an enable input, a set (S), a reset (R), and an output O. In addition, the TIGF latch has a trigger input. The TIGF latch includes a D-type flip-
[0426]
D-type flip-
[0427]
The operation of this TIGF latch embodiment of the present invention will now be described. In this embodiment of the TIGF latch, the D-type flip-
[0428]
Multiplexer 2472 receives the current state and new input value on
[0429]
This trigger signal is distributed through a low skew global network.***
Furthermore, this TIGF latch solves the clock glitch problem. Note that the clock signal is replaced by an enable signal in the TIGF latch. The enable signal on
[0430]
FIG. 81A shows the flip-
[0431]
if (#S), Q ← 1
else if (#R), Q ← 0
else if (positive edge of CLK), Q ← D
else Q keeps the old value.
Since this latch is edge triggered as long as the flip-flop enable input is enabled, the output Q tracks the input D at the positive edge of the clock signal.
[0432]
FIG. 81B shows a TIGF D-type flip-flop according to an embodiment of the present invention. Similar to the flip-flop of FIG. 81A, the TIGF flip-flop has a D input, a clock input, a set (S), a reset (R), and an output Q. In addition, the TIGF flip-flop has a trigger input. The TIGF flip-flop includes three D-type flip-
[0433]
Flip-
[0434]
Returning to
[0435]
An embodiment of the operation of the TIGF flip-flop of the present invention will now be described. In this embodiment, the TIGF flip-flop is at three different points: a D-type flip-
[0436]
The TIGF flip-flop stores an input value only when an edge of the clock signal is detected. According to one embodiment of the invention, the requested edge is the positive edge of the clock signal. An edge detector 2515 is provided to detect the positive edge of the clock signal. The edge detector 2515 includes a D-type flip-
[0437]
D-type flip-
[0438]
D-type flip-
[0439]
Multiplexer 2493 receives the new input value on
[0440]
To further elaborate, this TIGF flip-flop also provides some insensitivity to the clock glitch. Those skilled in the art will recognize that the clock glitch will affect any circuit that uses this TIGF flip-flop by replacing the flip-flops 2420, 2421, and 2423 shown in FIG. 77A with the TIGF flip-flop embodiment of FIG. 81B. Understand not. Referring to FIGS. 77A and 77B for some time, clock glitches have a negative impact on the circuit of FIG. 77A. Because time t1~ T2On the other hand, flip-flop 2423 is clocked to a new value when it should not be clocked with a new value. The skew nature of the CLK1 and CLK2 signals is determined by the time t1~ T2During this time, the XOR gate 2422 generates a
[0441]
A particular embodiment of a TIGF flip-flop is a D-type flip-flop, but other flip-flops (eg, T, JK, SR) are within the scope of the present invention. Other types of edge-triggered flip-flops can be generated from D-type flip-flops by adding some AND / OR logic before the D input.
[0442]
(VII. Simulation server)
A simulation server according to another embodiment of the present invention is provided so that multiple users can access the same reconfigurable hardware unit to efficiently perform the same or different user designs in a time-sharing manner. Simulate and accelerate. A fast simulation scheduler and state swapping mechanism is used to supply the simulation server with an active simulation process that results in high throughput. This server provides multiple users or multiple processes to access reconfigurable hardware for acceleration and hardware state swapping purposes. Once acceleration is gained or the hardware state is accessed, each user or process can only be simulated in software, thus releasing control of the reconfigurable hardware unit to other users or processes To do.
[0443]
In the simulation server part of this specification, terms such as “job” and “process” are used. As used herein, the terms “job” and “process” are generally used interchangeably. Conventionally, a batch system executes “jobs”, and a time-sharing system stores and executes “processes” or programs. In today's systems, these jobs and processes are similar. Therefore, in this specification, the term “job” is not limited to a batch type system, and “process” is not limited to a time division system. Rather, in an extreme example, a “job” is a “process” if the process can be executed within the time slice or in the time slice or without interruption by any other time-divisioned intervenor. Is equivalent to. In another extreme example, a “job” is a subset of a “process” if multiple time slices are not required to complete the “job”. Thus, if multiple time slices require the “process” to be completed due to the presence of other equal priority users / processes, the “process” is divided into “jobs”. Furthermore, if the process is the only high priority user, or if the “process” is required to complete multiple time slices because the process is short enough to complete within a time slice, “Process” is equivalent to “Job”. Thus, a user can interact with one or more “processes” or programs loaded and executed in a simulation system, each “process” requiring one or more “jobs” to be completed in a time-sharing system. Can do.
[0444]
In one system configuration, multiple users via remote terminals can utilize the same microprocessor workstation in a non-network environment and access the same reconfigurable hardware unit to have the same user circuit design or different user circuits. Review / debug your design. In a non-network environment, the remote terminal is connected to the main computing system to access its processing functions. This non-network configuration allows multiple users to share access to the same user design for parallel debugging purposes. This access is achieved by a time division process. In this process, the scheduler determines priorities for access to multiple users, swaps jobs, and selectively locks hardware unit access between scheduled users. In another example, multiple users may access the same reconfigurable hardware unit via a server for their own different user design for debugging purposes. In this configuration, multiple users or processes share multiple microprocessors at a workstation with an operating system. In another configuration, multiple users or processes in separate microprocessor-based workstations can access the same reconfigurable hardware unit and review / same user circuit design or different user circuit designs over the network. Can be debugged. Similarly, this access is achieved through a time-sharing process in which the scheduler determines access priorities for multiple users, swaps jobs, and hardware units between scheduled users. Lock access selectively. In a network environment, the scheduler pays attention to network requests via UNIX socket system calls. This operating system uses sockets to send commands to the scheduler.
[0445]
As described above, the simulation scheduler uses an interrupted multi-priority round robin algorithm. In other words, a higher priority user or processor is first provided before the user or process completes the job and ends the session. Among equal priority users or processes, an interrupted multi-priority round-robin algorithm is used, with each user or process assigning equal time slices to perform its operations until completion. The time slice is short enough so that multiple users or processes do not have to wait for a long time before being served. In addition, the time slice is long enough for the simulation server's scheduler to perform enough operations to swap in and execute a new user's job before interrupting one user or process. In one embodiment, the default time slice is 5 seconds and is user configurable. In one embodiment, the scheduler makes a specific call to the operating system's built-in scheduler.
[0446]
FIG. 45 illustrates a non-network environment using a multiprocessor workstation according to one embodiment of the invention. FIG. 45 is a modification of FIG. 1 and therefore like reference numerals are used for like components / units. The
[0447]
In one embodiment,
[0448]
The
[0449]
Each microprocessor 1101-1104 allows other microprocessors at
[0450]
In FIG. 45, multiple users may access
[0451]
Sockets and socket system calls are now briefly described. In one embodiment, the UNIX operating system may operate in a time division mode. The UNIX kernel allocates a CPU to a process period (eg, a time slice), interrupts this process at the end of the time slice, and schedules another process for the next time slice. Processes interrupted from previous time slices are rescheduled for execution in subsequent time slices.
[0452]
One scheme that allows and facilitates internal process communication and allows the use of advanced network protocols is sockets. The kernel has three layers that function in terms of a client-server model. These three layers include a socket layer, a protocol layer, and a device layer. The upper or socket layer provides an interface between system calls and lower layers (protocol layer and device layer). Typically, a socket has an endpoint that connects a client process and a server process. This socket endpoint may have different machines. The intermediate layer (protocol layer) provides a protocol module for communication such as TCP and IP. The lower layer (device layer) includes a device driver that controls the network device. An example of a device driver is an Ethernet (registered trademark) driver via an Ethernet (registered trademark) based network.
[0453]
Processes communicate using a client-server model. Here, the server process pays attention to the socket at one end point, and the client process pays attention to the server process through the other socket at the other end point of the bidirectional communication path. The kernel maintains an interconnection between the three layers of each client and server, routing data from the client to the server as needed.
[0454]
A socket contains a number of system calls, including a socket system call that establishes an endpoint for a communication path. Many processes use the socket descriptor sd in many system calls. A combined system call associates a name with a socket descriptor. Some other example system calls include a connection system call that requires the kernel to make a connection to the socket, a close system call that closes the socket, a stop system call that closes the socket connection, and data on the connected socket. Includes send and receive system calls to send.
[0455]
FIG. 46 is a diagram illustrating another embodiment according to the present invention in which multiple workstations share a single simulation system on a time division basis across a network. The plurality of workstations are coupled to the simulation system via the
[0456]
In FIG. 46,
[0457]
In this figure, only three users are shown and can access the simulation system across the network. Of course, other system configurations provide for more than three users or fewer than three users. Each user accesses the system via a
[0458]
As is known to those skilled in the art, the device driver 1119 is coupled between the
[0459]
Again, in an embodiment, the
[0460]
FIG. 47 is a diagram illustrating a high-level structure of a simulation server according to a network embodiment of the present invention. Here, the operating system is not specified, but as is known to those skilled in the art, the operating system is used for file management and resource allocation to serve various users, processes, and devices in a simulation computing environment. Is always present. The
[0461]
The scheduler in the simulation server is based on a preemptive round robin algorithm. In essence, the round-robin scheme allows several users or processes to run continuously and complete periodic execution. Thus, each simulation job (job associated with a workstation in a network environment or user / process in a multi-process non-network environment) is assigned a priority level and a fixed time slice to be executed.
[0462]
In general, higher priority jobs are executed first to complete. In one extreme case, if different users have different priorities, it will first serve the user with the highest priority until the user's job is completed, and the user with the lowest priority. In the end, it plays a role. Here, the priority of each user is different, and the scheduler only plays a role according to the priority, so the time slice is not used. This scenario is similar when there is only one user accessing the simulation system until completion.
[0463]
In the other extreme example, different users have equal priority. Therefore, the concept of a time slice with a first in first out (FIFO) queue is employed. Among jobs of equal priority, each job is executed until either the job is completed or the fixed time slice ends, whichever comes first. If the job is not executed until it completes during a time slice, the simulation image associated with the completed task needs to be saved for later restoration and execution. This job is then positioned at the end of the queue. If a saved simulation image exists for the next job, it is restored and executed in the next time slice.
[0464]
A job with a higher priority may be given priority over a job with a lower priority. That is, jobs with equal priority are executed through time slices and run in a land-robin fashion until completion. Thereafter, jobs with lower priorities are executed in a round-robin fashion. If a job with a higher priority is inserted into the queue while a job with a lower priority is running, the job with the higher priority will be executed and will be executed before the job with a lower priority. have priority. Thus, a job with a higher priority is executed and completed before a job with a lower priority begins to be executed. When a job with a low priority has already started to be executed, a job with a low priority is not executed until a job with a high priority is executed and is completed.
[0465]
In one embodiment, the UNIX operating system provides a basic and basic preemptive round robin scheduling algorithm. The simulation server scheduling algorithm according to one embodiment of the present invention works with the operating system scheduling algorithm. In systems using UNIX, the preemptive nature of the scheduling algorithm provides the operating system with priority over user-defined schedules. In order to enable a time-sharing scheme, the simulation scheduler uses a preemptive multi-priority round robin algorithm on top of the operating system's own scheduling algorithm.
[0466]
The relationship between multiple users and the simulation server according to one embodiment of the present invention follows a client-server model where the multiple users are clients and the simulation server is a server. Communication between the user client and server occurs via socket calls. Referring briefly to FIG. 55,
The client includes a
[0467]
In one embodiment, a typical sequence of events includes multiple clients sending a request to a server via the UNIX socket protocol. For each request, the server notifies that it has received a request as to whether the command was successfully implemented. However, for server queue status requests, the server responds with the current queue status so that it can be displayed appropriately to the user. Table F below lists the relevant socket commands from the client.
[0468]
[Table 8]
[0469]
In each socket call, each command encrypted with an integer may be followed by additional parameters, for example <design> representing the design name. The response from the simulation server is “0” if the command is executed successfully and “1” if the command fails. For command “5” requesting queue status, one embodiment of the command response is ASCII text ending with the characters “\ 0” displayed on the user's screen. With these system socket calls, the appropriate communication protocol signals are sent to and received from the reconfigurable hardware device via the device driver.
[0470]
FIG. 48 is one embodiment of a simulation server architecture according to the present invention. As described above, a single simulation server can serve in a time-sharing manner for user design simulation and hardware promotion for multiple users or multiple processes. Accordingly, users /
[0471]
48, the
[0472]
The
[0473]
The simulation job queue table 1142 holds a list of all outstanding simulation requests being processed in the queue inserted by the scheduler. Table items include number of jobs, number of software simulations, software simulation images, hardware simulation image files, design configuration files, number of priorities, hardware size, software size, cumulative execution time of simulation, and requirements identification Is included. The job queue is implemented using a first-in first-out (FIFO) queue. Thus, when a new job is requested, it is placed at the end of the queue.
[0474]
The
[0475]
The priority level can be set by the system administrator. The simulator server obtains all user information from a UNIX® facility found in a UNIX® user file, typically called “/ etc / passwd”. Adding a new user is consistent with the process of adding a new user into the UNIX system. After defining all users, the simulator server monitor can be used to adjust the user's priority level.
[0476]
The
[0477]
Next, the operation of the simulation server will be described. FIG. 49 is a flowchart of the simulation server in operation. Initially, at
[0478]
If the simulation request originates from one or more request signals from multiple user environment workstations or from multiple processor environment microprocessors, the simulation server, at
[0479]
Thereafter, the simulation server classifies the jobs queued and determines the priority in step 1163. This process is particularly important when a server needs to prioritize between jobs to provide access to reconfigurable hardware devices for multiple jobs. The priority classifier determines which simulation job in the queue is to be executed. In one embodiment, the simulation job priority scheme can be defined by the user to control which simulation process has priority for the current execution in the presence of resource contention (ie, system administrator). Controllable and definable).
[0480]
After the priority classification in step 1163, the server exchanges simulation jobs in
[0481]
In one embodiment, the job exchange mechanism improves the performance of the time division embodiment of the present invention because job exchange only needs to be done for reconfigurable hardware device accesses. Thus, if one user needs software simulation for a certain period of time, the server will exchange other jobs for other users, and the other users will be able to reconfigure hardware for hardware promotion. Access to the wear device. For example, assume that two users,
[0482]
When the job swap process is completed at
[0483]
At
[0484]
FIG. 50 is a flowchart of the job swap process. The job swap function is performed in
[0485]
In
[0486]
In
[0487]
FIG. 51 is a diagram illustrating signals between a device driver and a reconfigurable hardware device.
[0488]
[0489]
[0490]
[0491]
[0492]
Next, a communication handshake protocol according to one embodiment of the present invention will be described with reference to FIGS. FIG. 53 shows a communication handshake signal between the device driver and the reconfigurable hardware device via the handshake logic interface. FIG. 54 shows a state diagram of the communication protocol. FIG. 51 shows a communication handshake signal on
[0493]
In FIG. 53, a
[0494]
For 3-bit SPACE signals, data transfer between the simulation system computing environment and the reconfigurable hardware device via the PCI bus is a specific I / O address space at the software / hardware boundary, ie , REG (register), CLK (software clock), S2H (software to hardware), and H2S (hardware to software). As described above, the simulation system maps the hardware model into four address spaces in the main memory according to different component types and control functions. The REG space is specified for the register component. The CLK space is designated for the software clock. The S2H space is specified for the output of the software test bench component to the hardware model. The H2S space is specified for the output of the hardware model to the software test bench component. These dedicated I / O buffer spaces are mapped to the kernel's main memory space during system initialization.
[0495]
Table G below provides a description of each of the SPACE signals.
[0496]
[Table 9]
[0497]
The read / write signal on
[0498]
The 4-bit COMMAND indicates whether the data transfer operation is a write, a read, a new user-designed setting on a reconfigurable hardware device, or a simulation interrupt . As shown in Table H below, the COMMAND protocol is as follows.
[0499]
[Table 10]
[0500]
Next, the communication handshake protocol will be described with reference to the diagram showing the state on FIG. In
[0501]
If COMMAND = 0000 or COMMAND = 0001, the system reads from or writes to the specified space, as indicated by the SPACE index, at
[0502]
Next, a time sharing function of the simulation server for processing a plurality of jobs having different priority levels will be described. FIG. 52 shows an example. Four jobs (job A, job B, job C, and job D) are incoming jobs in the simulation job queue. However, the priority levels of these four jobs are different. That is, high priority I is assigned to jobs A and B, but low priority II is assigned to jobs C and D. As shown in the time series chart of FIG. 52, the use of time-divisionable reconfigurable hardware devices depends on the priority level of incoming jobs queued. At
[0503]
(VIII. Memory simulation)
The memory simulation or memory mapping aspect of the present invention provides an effective way for the simulation system to manage the various memory blocks associated with the configuration hardware model of the user's design. The configuration hardware model was programmed into an array of FPGAs in a reconfigurable hardware section. By implementing the embodiments of the present invention, the memory simulation scheme does not require any dedicated pins in the FPGA chip to handle memory accesses.
[0504]
As used herein, the term “memory access” refers to a write access or read between an FPGA logic circuit in which a user design is configured and an SRAM memory device that stores all memory blocks associated with the user design. Indicates either access. Thus, the write operation includes data transfer from the FPGA logic device to the SRAM memory device, while the read operation includes data transfer from the SRAM memory device to the FPGA logic device. Refer to FIG. The FPGA logic devices include 1201 (FPGA1), 1202 (FPGA3), 1203 (FPGA0), and 1204 (FPGA2). The SRAM memory includes
[0505]
The term “DMA data transfer” also refers to data transfer between a computing system and a simulation system, in addition to common usage among those skilled in the art. The computing system is shown in FIGS. 1, 45, and 46 as an entire PCI-based system with a memory that supports the simulation system and resides in software and reconfigurable hardware. The selected device drivers, sockets / system calls to / from the operating system are also part of the simulation system that allows proper interfacing with the operating system and the reconfigurable hardware portion. In one embodiment of the present invention, the DMA read transfer includes the transfer of data from the FPGA logical device (and FPGA SRAM memory device for initialization and memory content dump) to the host computing system. DMA write transfers include the transfer of data from the host computing system to the FPGA logical device (and to the FPGA SRAM memory device for initialization and memory content dump).
[0506]
The terms “FPGA data bus”, “FPGA bus”, “FD bus” and variations thereof are high bank buses that couple the FPGA logic device and the SRAM memory device, including the configuration to be debugged and the programmed user design. FD [63:32] and low bank bus FD [31: 0] are shown.
[0507]
The memory simulation system includes a memory state machine, an evaluation state machine, and associated logic for controlling and interfacing with: (1) a main computing system and its associated memory system; (2) An SRAM logic coupled to the FPGA in the simulation system, and (3) an FPGA logic device including configuration in debugging and programmed user design.
[0508]
The FPGA logic device side of the memory simulation system has an evaluation state machine, an FPGA bus driver, and a logic interface for each memory block N for interfacing with the memory interface owned by the user in the user's design to process the following: Includes: (1) data evaluation between FPGA logic devices, and (2) write / read memory access between FPGA logic devices and SRAM memory devices. In conjunction with the FPGA logic device side, the FPGA I / O controller side includes a memory state machine and interface logic to handle the following DMA, write, and read operations: (1) Main computing system and SRAM A memory device, and (2) an FPGA logic device and an SRAM memory device.
[0509]
The operation of the memory simulation system according to one embodiment of the present invention is generally as follows. The simulation write / read cycle is divided into three periods-DMA data transfer, evaluation, and memory access. The DATAXSFR signal indicates the occurrence of a DMA data transfer period. In the DMA data transfer period, the calculation system and the SRAM memory unit transfer data to each other via the FPGA data bus (high bank bus (FD [63:32]) 1212 and low bank bus (FD [31: 0]) 1213. ing.
[0510]
During the evaluation period, the logic circuitry in each FPGA logic device generates the appropriate software clock, input enable, and multiplexer enable signals to the user's design logic for data evaluation. Communication between FPGA logic devices occurs during this period.
[0511]
During the memory access period, the memory simulation system waits for the high and low bank FPGA logic devices to place their respective address and control signals on their respective FPGA data buses. These addresses and control signals are latched in by the CTRL_FPGA unit. If the operation is a write, address, control, and data signals are transferred from the FPGA logic device to the respective SRAM memory device. If the operation is a read, address and control signals are provided to the designated SRAM memory device and data signals are transferred from the SRAM memory device to the respective FPGA logic device. After all desired memory blocks in all FPGA logic devices have been accessed, the memory simulation write / read cycle is complete and the memory simulation system is idle until the start of the next memory simulation write / read cycle.
[0512]
FIG. 56 is a high-level block diagram of a memory simulation configuration according to one embodiment of the present invention. Signals, connections, and buses not related to the memory simulation aspect of the present invention are not shown. The
[0513]
FIG. 56 shows other major functional blocks in the form of logical and memory devices. In one embodiment, the logic device is a programmable logic device (PLD) that is in the form of an FPGA chip, such as an Altera 10K130 or 10K250 chip. Thus, instead of the above embodiment having eight AlteraFLEX10K100 chips in the array, this embodiment uses only four Altera FLEX10K130 chips. The memory device is a synchronous pipelined cache SRAM, such as a Cypress 128Kx32 CY7C1335 or CY7C1336 chip. The logical devices include 1201 (FPGA1), 1202 (FPGA3), 1203 (FPGA0), and 1204 (FPGA2). The SRAM chip includes a low bank memory device 1205 (L_SRAM) and a high bank memory device 1206 (H_SRAM).
[0514]
These logical devices and memory devices are coupled to the
[0515]
Referring briefly to FIG. 61, each simulation write / read cycle includes a DMA data transfer period, an evaluation period, and a memory access period. Various control signal combinations control and indicate whether the simulation system is in one period and the other. DMA data transfer between the host computer system and the
[0516]
Reference is again made to FIG. The
[0517]
As described above with reference to FIGS. 9, 11, 12, 14, and 15, the logic devices 1201-1204 are specifically configured with two sets of SIFTIN / SHIFTOUT lines—
[0518]
With respect to board implementation and FIG. 56, one embodiment of the present invention includes components (eg, logic devices 1201-1204, memory devices 1205-1206, and CTRL_FPGA portion 1200) and buses (eg, FPGA buses 1212-1213 and
[0519]
In this board configuration, the simulation system performs memory mapping between logic devices and memory devices on each board. Memory mapping across different boards is not provided. Thus, the logic devices on
[0520]
The operation of the memory simulation system of one embodiment of the present invention is generally as follows. The simulation write / read cycle is divided into three periods-DMA data transfer, evaluation, and memory access. To indicate the completion of the simulation write / read cycle, the memory simulation system may send and receive the DONE signal on
[0521]
During the evaluation period, the logic circuitry in each FPGA logic device 1201-1120 generates the appropriate software clock, input enable, and multiplexer enable signals to the user design logic for data evaluation. Communication between FPGA logic devices occurs during this period. The
[0522]
During the memory access period, the memory simulation system waits for the high and low bank FPGA logic devices 1201-1120 to place their respective address and control signals on their respective FPGA data buses. These address and control signals are latched in by the
[0523]
FIG. 57 shows a more detailed block diagram of the memory simulation aspect of the present invention, including a more detailed block diagram of each logic device associated with
[0524]
In each logical device 1201-1204, a number of memory blocks are associated with the user's design configured and mapped. Accordingly, the
[0525]
A memory block data /
[0526]
Similar to EVALFSMx, the “x” in FDO_MUXx identifies the specific logical device (FPGA0, FPGA1, FPGA2, FPGA3) with which FDO_MUXx is associated. In this example, “x” is a number from 0 to 3. The output of FDO_MUXx1249 is provided on bus 1282. Bus 1282 is coupled to high bank bus FD [63:32] or low bank bus FD [31: 0], depending on which chip (FPGA0, FPGA1, FPGA2, FPGA3) is associated with FDO_MUXx1249. In FIG. 57, FDO_MUXx is FDO_MUX0 associated with low bank
[0527]
Return to the
[0528]
[0529]
The FPGA data bus multiplexer FDO_MUXx receives SPACE2 data on
[0530]
As an output,
[0531]
The
[0532]
The operation of FPGA logic devices 1201-1204 for the memory simulation system of one embodiment of the present invention is generally as follows. If EVAL is at
[0533]
Thereafter, if the FPGA logic devices 1201-1204 include at least one memory block, the memory simulation system waits for the selected data to be shifted to the selected FPGA logic device and then for the FPGA data bus driver. Output_en and select signal are generated, and the address and control signal of the memory block interface 1253 (mem_block_N) are placed on the FD bus.
[0534]
When the write signal wrx on
[0535]
This process of reading or writing data occurs for each FPGA logic device. After all memory blocks have been processed via SRAM access,
[0536]
On the
[0537]
The
[0538]
The LASTL and LASTH signals are input to AND
[0539]
The
[0540]
If memory access is not desired, MEM_EN on
[0541]
The remaining functional units and their associated control signals and lines are for providing address / control information to the SRAM memory device for writing and reading data. These parts include a memory address / control latch 1243 for the low bank, an
[0542]
The memory address / control latch 1243 for the low bank receives the address and control signals from the FPGA bus FD [31: 0] 1275 matching the
[0543]
Address /
[0544]
[0545]
During the memory access period, the
[0546]
Similar configurations and operations for high banks are provided. The memory address /
[0547]
Address /
[0548]
[0549]
During the memory access period, the
[0550]
As shown in FIG. 57, address and control signals are provided to low bank SRAM memory devices and high bank memory devices via
[0551]
The operation of the
[0552]
FIG. 60 shows a more detailed view of the memory read data double buffer 1251 (FIG. 57). Each memory block N in each FPGA logic device has a double buffer for latching in relevant data that can be input at different times, and then finally buffering out the latched data simultaneously. In FIG. 60, a
[0553]
The first D flip-
[0554]
Another
[0555]
The rd_latx signal for the second double buffer 1392 (eg, rd_lat1) is provided on
[0556]
Here, a state diagram of the
[0557]
In general, a sequence of signals for DMA transfer, evaluation, and memory access is set up. In one embodiment, the sequence is as follows: DATA_XSFR initiates DMA data transfer, if any. LAST signals for both high and low banks are generated upon completion of DMA data transfer and trigger the DONE signal to indicate completion of the DMA data transfer completion period. An XSFR_DONE signal is then generated and then the EVAL cycle begins. At the end of EVAL, memory read / write may begin.
[0558]
Returning to the top of FIG. 58,
[0559]
When the DATAXSFR signal returns to
[0560]
However, in some cases, the simulation system may not want to perform a memory access at that time. Here, the simulation system holds the memory enable signal MEM_EN at 0. This disabled (logic 0) MEM_EN signal keeps the MEMFSM unit in the
[0561]
In FIG. 58, below
[0562]
In
[0563]
In
[0564]
Similarly, if mem_wr_L = 0 indicating a read operation, the MEMFSM proceeds to
[0565]
If LASTL = 1, the MEMFSM proceeds to
[0566]
The same process can be applied to high banks. In
[0567]
In
[0568]
Similarly, if mem_wr_H = 0 indicating a read operation, the MEMFSM proceeds to
[0569]
If LASTH = 1, the MEMFSM proceeds to
[0570]
Alternatively, states 1309 and 1310 are not implemented in another embodiment of the present invention for both high and low banks. Thus, in the low bank, the MEMFSM may go directly to
[0571]
A state diagram of the
[0572]
The
[0573]
[0574]
In
[0575]
In
[0576]
In
[0577]
If the number of memory blocks M (where M is an integer including 0) is zero, EVALFSMx returns to state 1320. In state 1320, EVALFSMx remains idle if EVAL = 0. In most cases, M> 0 and therefore EVALFSMx returns to state 1326A / 1326B. “M” is the number of memory blocks in the FPGA logical device. M is constant from the user design that is mapped and configured in the FPGA logic device. M is not counted to decrease the value. When M> 0, the right part of FIG. 59 (memory access period) can be configured in the FPGA logic device. When M = 0, only the left part (EVAL period) of FIG. 59 can be configured.
[0578]
State 1327 holds EVALFSMx in a standby state as long as SHIFTIN = 0. If SHIFTIN = 1, the previous FPGA logical device has completed its memory access, and the current FPGA logical device is now ready to perform its memory access task. Alternatively, the current FPGA logic device is the first logic device in the bank and the SHIFTIN input line is coupled to Vcc. Nevertheless, receipt of the SHIFTIN = 1 signal indicates that the current FPGA logic device is ready to perform a memory access. In state 1328, the number N of memory blocks is set to N = 1. This number N can be incremented at the occurrence of each loop to achieve memory access to that particular memory block N. Initially, N = 1, and then EVALFSMx may proceed to access the memory for
[0579]
In
[0580]
If wr = 1, EVALFSMx proceeds to
[0581]
However, if wr = 0 in
[0582]
If the current number of memory blocks N is less than or equal to the total number of memory blocks M in the user's design (ie, N ≦ M), EVALFSMx proceeds to
[0583]
However, if the current number of memory blocks N is greater than the total number of memory blocks M in the user's design (ie, N ≧ M), EVALFSMx proceeds to state 1336. In state 1336, EVALFSMx turns on the SHIFTOUT output signal, allowing the next FPGA logic device in the bank to access the SRAM memory device. Thereafter, EVALFSMx proceeds to state 1320. In state 1320, EVALFSMx remains idle until the simulation system requests data evaluation between FPGA logic devices (ie, EVAL = 1).
[0584]
FIG. 61 illustrates a simulation write / read cycle of one embodiment of the present invention. FIG. 61 shows at reference numeral 1366 three periods (DMA data transfer period, evaluation period, and memory access period) in the simulation write / read cycle. Although not shown, it implies that a prior DMA transfer, evaluation, and memory access could have occurred. Furthermore, the timing for data transfer to / from the low bank SRAM is different from that of the high bank SRAM. For simplicity, FIG. 61 shows one example where the access times for the low and high banks are the same. Global clock GCLK 1350 provides a clock signal to all components in the system.
[0585]
A
[0586]
At the end of the DMA transfer period, the DATAXSFR signal transitions from
[0587]
The
[0588]
In traces 1377 to 1386, the following nomenclature is used. ACj_k indicates that the address and control signal are associated with FPGAj and memory block k. Here, j and k are integers including 0. WDj_k indicates write data and memory block k for FPGAj. RDj_k indicates FPGAj and memory block k. Therefore, AC3_1 indicates the address and control signal associated with
[0589]
The next few traces 1377-1387 show how memory access is achieved. Based on the logic level of the wrx signal to EVALFSMx and the resulting mem_wr signal to MEMFSM, either a write or read operation can be performed. If a write operation is desired, the memory model interface (
Therefore, as shown in FIG. 61, this next FPGA logic device (logic device FPGA0 in the low bank) inputs AC0_0 to FD [31: 0] as shown by
[0590]
Note that inputting AC0_0 to the MA [18: 2] / control bus, as shown by
[0591]
On the high bank, FPGA1 inputs AC1_0 to FD [63:32], followed by WD1_0. Thereafter, AC1_1 is input to FD [63:32]. This is indicated by trace 1380. When AC1_1 is input to the FD bus, the control signal indicates a read operation in this example. Thus, as described above, since AC1_1 is on the MA [18: 2] / control bus as indicated by
[0592]
A read operation through the simulation memory block interface with the user's design logic is achieved when EVALFSMx generates the
[0593]
Thereafter, the next memory block for each FPGA logic device is input to the FD bus. AC2_0 is input to the low bank FD bus while AC3_0 is input to the high bank FD bus. If a write operation is desired, WD2_0 is input to the low bank FD bus and WD3_0 is input to the high bank FD bus. AC3_0 is input to the MA [18: 2] / control bus as shown on
[0594]
The
[0595]
Table H below lists and describes the various components on the simulation system board and the corresponding registers / memory, PCI memory addresses, and local addresses.
[0596]
[Table 11]
[0597]
The data format for the configuration file is shown below in Table J according to one embodiment of the present invention. The CPU sends one word over the PCI bus at each time to configure one bit for all onboard FPGAs in parallel.
[0598]
[Table 12]
[0599]
Table K below lists the XSFR_EVAL register. The XSFR_EVAL register is present on all boards. The XSFR_EVAL register is used by the host computing system to program the EVAL period, control DMA reads / writes, and read the status of the EVAL_DONE and XSFR_DONE fields. The host computing system also uses this register to enable memory access. The operation of the simulation system for this register is described below with reference to FIGS.
[0600]
[Table 13]
[0601]
Table L below lists the contents of the CONFIG_JTAG [6: 1] register. The CPU configures the FPGA logical device, and executes a boundary scan test on the FPGA logical device via this register. Each board has one dedicated register.
[0602]
[Table 14]
[0603]
62 and 63 show timing diagrams for another embodiment of the present invention. These two figures show the operation of the simulation system for the XSFR_EVAL register. The XSFR_EVAL register is used by the host computing system to program the EVAL period, control DMA reads / writes, and read the status of the EVAL_DONE and XSFR_DONE fields. The host computing system also uses this register to enable memory access. One of the main differences between the two figures is the status of the WAIT_EVAL field. When the WAIT_EVAL field is set to “0” (in the case of FIG. 62), the DMA read transfer starts after CLK_EN. When the WAIT_EVAL field is set to “1” (in the case of FIG. 63), the DMA read transfer starts after EVAL_DONE.
[0604]
In FIG. 62, both WR_XSFR_EN and RD_XSFR_EN are set to “1”. These two fields enable DMA write / read transfers and are cleared by XSFR_DONE. Since the two fields are set to “1”, the CTRL_FPGA unit automatically performs a DMA write transfer first and then performs a DMA read transfer. However, the WAIT_EVAL field is set to “0” and the DMA read transfer starts after the assertion of CLK_EN (and after the completion of the DMA write operation). Therefore, in FIG. 62, the DMA read operation occurs almost immediately after the completion of the DMA write operation as soon as the CLK_EN signal (software clock) is detected. The DMA read transfer does not wait for the EVAL period to complete.
[0605]
At the start of the timing diagram, the EVAL_REQ_N signal contends when multiple FPGA logic devices compete for attention. As described above, the EVAL_REQ_N (or EVAL_REQ #) signal is used to initiate an evaluation cycle when any of the FPGA logic devices asserts this signal. At the end of the data transfer, an evaluation cycle is initiated that includes software pointer manipulation to facilitate address pointer initialization and evaluation processing.
[0606]
The DONE signal is also generated at the end of the DMA data transfer period and contends when multiple LAST signals (from the shifttin and shiftout signals at the output of each FPGA logic device) are generated and provided to the CTRL_FPGA unit. . If all LAST signals are received and processed, a DONE signal is generated and a DMA data transfer operation can begin. The EVAL_REQ_N signal and the DONE signal use the same wire in a time division manner in the manner described below.
[0607]
The system first automatically initiates a DMA write transfer as indicated by the WR_XSFR signal at
[0608]
At
[0609]
Also, at
[0610]
At time 1413, approximately two clock cycles after time 1412 (at the end of the DMA write operation), the CTRL_FPGA unit sends a write address strobe WPLX ADS_N signal to the PCI controller (eg, PLX PCI9080) to initiate a DMA read transfer. . At approximately 24 clock cycles from time 1413, the PCI controller can begin the DMA read transfer process and a DONE signal is also generated. At time 1414, before the start of the DMA read process by the PCI controller, the RD_XSFR signal is activated to enable the DMA read transfer. Predetermined PLX overhead data is first transmitted and processed. At
[0611]
At
[0612]
At
[0613]
Throughout the DMA period from generation of the WR_XSFR signal at
[0614]
After about 14 clock cycles from
[0615]
While memory access occurs between the FPGA logic device and the SRAM memory device via the FPGA bus FD [63: 0], the CPU in the host computer system runs from
[0616]
The timing diagram of FIG. 63 is somewhat different from that of FIG. This is because in FIG. 63, the WAIT_EVAL field is set to “1”. In other words, the DMA read transfer period starts after the EVAL_DONE signal is activated and almost complete. The DMA read transfer period starts not after the completion of the DMA write operation but after waiting until the EVAL period is almost completed. The EVAL signal is activated during a predetermined period from
[0617]
In FIG. 63, the CTRL_FPGA unit does not generate the write address strobe signal WPLX ADS_N to the PCI controller until the
[0618]
At
[0619]
Thus, in FIG. 63, the RD_XSFR signal is activated after FIG. In FIG. 63, the RD_XSFR signal is activated after the EVAL period is almost completed, thereby delaying the DMA read operation. In FIG. 62, the RD_XSFR signal is activated after the CLK_EN signal is detected after the DMA write transfer is completed.
[0620]
(IX. Co-verification system)
The co-verification system of the present invention may accelerate the design / development cycle by providing the designer with the flexibility of software simulation and the higher speed that results from using hardware models. Both the hardware and software portions of the design can be verified prior to the creation of the ASIC and without restrictions to emulator-based co-verification tools. The debugging function can be improved and the overall debugging time can be significantly reduced.
[0621]
(Conventional co-verification tool using ASIC as test device)
FIG. 64 shows a typical final design embodied as a PCI add-on card, such as video, multimedia, Ethernet, or SCSI card. The
[0622]
Prior to implementing this design as an add-on card shown in FIG. 64, the design is changed to an ASIC configuration for testing. A conventional hardware / software co-verification tool is shown in FIG. In FIG. 65, the user design is embodied in the form of an ASIC, shown as a test device (or “DUT”) 2024. A
[0623]
A
[0624]
The
[0625]
In this target system environment, the
(Conventional co-verification tool using an emulator as a test device)
FIG. 66 shows conventional co-verification using an emulator. Unlike the settings shown in FIG. 64 and described above, the test device is programmed in an
[0626]
The
[0627]
The
[0628]
Finally,
[0629]
As is known to those skilled in the art, the emulation clock operates at a speed much slower than that of the actual target system. Therefore, the filled portion in FIG. 66 is executed at the emulation speed, and the other unfilled portions are executed at the actual target system speed.
[0630]
As described above, the co-verification tool using this emulator has some limitations. When using a logic analyzer or sample-and-hold device to obtain the internal state of the test device, the designer must compile the design so that the relevant signals that are to be examined for debugging purposes are present on the sampling output pins. If the designer wants to debug another part of the design, the designer must make sure that the part has an output signal that can be sampled by a logic analyzer or sample-and-hold device. Alternatively, the designer must recompile the design in
[0631]
(Simulation with reconfigurable computing array)
A high level configuration of the inventive single engine reconfigurable computing (RCC) array system described herein above is shown in FIG. 67 for a brief review. In one embodiment of the present invention, this single engine RCC system is incorporated into a co-verification system.
[0632]
67, the
[0633]
The RCC
[0634]
[0635]
The
[0636]
The
[0637]
(Co-verification system without external I / O)
One embodiment of the present invention is a co-verification system that does not use an actual physical external I / O device and target application. Thus, the co-verification system according to one embodiment of the present invention, along with other functions, can be used to debug the software and hardware portions of the user design without using the actual target system or I / O device. An RCC system may be incorporated. The target system and external I / O devices are modeled in software within the RCC computing system.
[0638]
Referring to FIG. 68, the
[0639]
According to one embodiment of the present invention, the
[0640]
The
[0641]
The
[0642]
To compare the co-verification system of FIG. 68 with a conventional emulator-based co-verification system, FIG. 66 shows that the
[0643]
In the co-verification system of the present invention where no external I / O devices are connected, the target system and other I / O devices are modeled in software, so that the actual physical target system and I / O device is no longer needed. Since the
[0644]
However, as mentioned above, a workstation is still needed for debug session control. In a network configuration, the workstation can be remotely connected to the co-verification system for remote access to debug data. In a non-network configuration, the workstation can be locally connected to the co-verification system. In some embodiments, the workstation may incorporate a co-verification system so that debug data can be accessed locally.
[0645]
(Co-verification system using external I / O)
In FIG. 68, various I / O devices and target applications have been modeled within the
[0646]
One embodiment of the present invention is a co-verification system that can use actual physical external I / O devices and target applications. Thus, the co-verification system may incorporate the RCC system with other functions to debug the software and hardware portions of the user design while using the actual target system and / or I / O device. For testing, the co-verification system may use test bench data from software and stimuli from external interfaces (eg, target systems and external I / O devices). The test bench data can be used to provide test data to the pin outputs of the user design and to provide test data to internal nodes within the user design. The actual I / O signal from the external I / O device (or target system) can be directed only to the user designed pin output. Thus, one major difference between test data from an external interface (eg, target system or external I / O device) and the test bench process in software is that test bench data is applied to pin outputs and internal nodes The actual data from the target system or external I / O device can be used to test the user design with the stimulated stimulus, but the user's via its pin output (or the node in the user design that represents the pin output) It can be given only to the design. The structure of the co-verification system and the configuration for the target system and external I / O device are described below.
[0647]
The co-verification system according to one embodiment of the present invention differs in the structure and function of the elements in the
[0648]
Referring to FIG. 69, a co-verification system configuration according to an embodiment of the present invention includes a target system 2120, a
[0649]
The
[0650]
As described above, the single engine of the co-verification system obtains power and flexibility from the main software kernel in the main memory of the RCC computing system 2141 and operates the
[0651]
The software kernel generates a software clock signal from the RCC hardware array 2190 and a software clock source 2142 provided externally. The clock source 2142 may generate multiple clocks of different frequencies depending on the destination of these software clocks. In general, the software clock ensures that registers in the user-designed hardware model evaluate in synchronization with the system clock without disturbing the hold time. The software model may detect clock edges in software that affect hardware model register values. Therefore, the clock detection mechanism ensures that clock edge detection in the main software model can be interpreted as clock detection in the hardware model. For a more detailed description of the software clock and clock edge detection logic, refer to FIGS. 17-19 and corresponding portions of this specification.
[0652]
According to one embodiment of the invention, the RCC computing system 2141 may further include one or more models of multiple I / O devices. Despite the fact that other actual physical I / O devices can be connected to the co-verification system. For example, the RCC computing system 2141 may include a model of a device (eg, a speaker) and its driver and test bench data in software (shown at 2143), a model of another device (eg, a graphics accelerator) and its driver and test. Bench data may be included in the software (shown at 2144). The user decides which devices (and their respective drivers and test bench data) to model and incorporate into the RCC computing system 2141 and which devices are actually connected to the co-verification system.
[0653]
The co-verification system includes (1) an RCC computing system 2141 and an RCC hardware array 2190, and (2) an external interface (connected to a target system and an external I / O device) and an RCC hardware. Control logic is provided to provide traffic control to and from the wear array 2190. Some data passes between the RCC hardware array 2190 and the RCC computing system 2141. This is because some I / O devices can be modeled within an RCC computing system. Further, the RCC computing system 2141 has a model of the entire design in software that includes the portion of the user design modeled in the RCC hardware array 2190. As a result, the RCC computing system 2141 must also have access to all data passing between the external interface and the RCC hardware array 2190. The control logic ensures that the RCC computing system 2141 has access to these data. The control logic is described in detail below.
[0654]
The RCC hardware array 2190 includes a plurality of array boards. In the particular embodiment shown in FIG. 69, the hardware array 2190 includes boards 2145-2149. Boards 2146-2149 include most of the configured hardware models. Board 2145 (ie, board m1) includes a reconfigurable computing element (eg, FPGA chip) 2153 that can be used by the co-verification system to configure at least a portion of the hardware model, and an external interface (target system and I / O device) and an external I /
[0655]
If a stimulus from an external I / O device is provided to the hardware model, the software model must also have access to this stimulus. This allows the user of the co-verification system to selectively control the next debugging step. The next debugging step may involve examining the designer's design internal state values as a result of this applied stimulus. As described above with respect to the board layout and interconnection scheme, the first and last boards are included in the hardware array 2190. Therefore, board 1 (shown as board 2146) and board 8 (shown as board 2149) are included in a hardware array (excluding board m1) having 8 boards. Except for these boards 2145 to 2149, a board m2 having a chip m2 (not shown in FIG. 69 but shown in FIG. 74) may be further provided. The board m2 is similar to the board m1 except that it does not have an external interface and can be used for expansion if additional boards are required.
[0656]
Describe the contents of these boards. The board 2145 (board m1) includes a PCI controller 2151, an external I /
[0657]
The main traffic controller in the co-verification system between the outside world (target system 2120 and I / O devices) and the RCC computing system 2141 is an external I / O controller 2152 (in FIGS. 69, 71 and 73). Also referred to as “CRTLXM”). The external I /
[0658]
External I /
[0659]
The external I /
[0660]
To access the desired data in
[0661]
The external I /
[0662]
In order to enable scalability, the boards 2146-2149 are substantially identical to each other except for a few interconnect lines between the boards. These interconnect lines are configured so that a portion of one chip (eg, chip 2157 in board 2146) in a user-designed hardware model is another chip (eg, in a hardware model in the same user design). , To allow communication with another part physically provided in the chip 2161) in the
[0663]
[0664]
An
[0665]
On the
[0666]
The software clock present on
[0667]
Therefore, the I / O data passed between the external interface and the co-verification system is synchronized with the software clock. In effect, the software clock controls the operation of the external I / O device and target system each time data passes between the external I / O device and target system and the co-verification system. Synchronization with the operation of the application system (in the RCC computing system and the RCC hardware array). A software clock is used for both data-in and data-out operations. For a data-in operation, when a pointer (described later) latches a software clock from the RCC computing system 2141 to the external interface, the other pointers receive these I / O data from the external interface and the hardware of the RCC hardware array 2190. Latch to a selected internal node in the wear model. These pointers latch these I / O data one by one during this cycle when the software clock is delivered to the external interface. Once all the data is latched, the RCC computing system may generate another software clock and again latch additional data in another software clock cycle if desired. For data-out operations, the RCC computing system delivers a software clock to the external interface, then gating data from the internal nodes of the hardware model in the RCC hardware array 2190 to the external interface, with pointer assistance Receive and control. The pointer also gates the data from the internal node to the external interface one by one. If additional data needs to be delivered to the external interface, the RCC computing system can generate another software clock to activate the selected pointer to gate the data to the external interface. The generation of the software clock is strictly controlled, so that the co-verification system performs data delivery and data evaluation between the co-verification system and any external I / O device connected to the external interface. It is possible to synchronize.
[0668]
Scan control line 2173 is used to allow
[0669]
69, the target system 2120 includes a primary CPU, and the user design is a predetermined controller such as a video controller, a network adapter, a graphics adapter, a mouse, or other support device, a card, or logic. Assume that it is a peripheral device. Accordingly, target system 2120 includes a target application (including an operating system) coupled to
[0670]
Control logic for transmitting data between the external interface (external I / O expander 2139) and the
[0671]
The components in this particular subset of control logic are: external I /
[0672]
(Data in)
Data-in control logic according to one embodiment of the invention is responsible for processing data delivered from either the RCC computing system or an external interface to the RCC hardware array. One particular subset 2150 of data-in control logic (see FIG. 69) is shown in FIG. 70 and includes an external I /
[0673]
In this data-in embodiment of the invention, two types of data cycles are used (global cycles and software-to-hardware (S2H) cycles). The global cycle is used for any data destined for all chips in the RCC hardware array, such as clocks, resets, and certain other S2H data destined for many different nodes in the RCC hardware array. The For these latter “global” S2H data, it is more feasible to transmit these data via a global cycle than continuous S2H data.
[0674]
Software-to-hardware cycles are used to transmit data sequentially from chip to chip on all boards from the test bench process in the RCC computing system to the RCC hardware array. Since user-designed hardware models are distributed across several boards, test bench data must be provided to each chip for data evaluation. Thus, data is delivered sequentially to each internal node in each chip at a rate of one internal node at a time. Sequential delivery allows data specified for a particular internal node to be processed by all chips in the RCC hardware array. This is because the hardware model is distributed among a plurality of chips.
[0675]
For this data evaluation, the translation provides two address spaces (S2H and CLK). As mentioned above, the S2H and CLK spaces are the primary inputs from the kernel to the hardware model. The hardware model holds virtually all register components and combination components of the user's circuit design. In addition, the software clock is modeled in software and provided in the CLK I / O address space to interface with the hardware model. The kernel advances the simulation time, finds the active test bench component, and evaluates the clock component. If any clock edge is detected by the kernel, the registers and memory are updated and the value through the combinational component is propagated. Thus, if the hardware acceleration mode is selected, any change in the values in these spaces will trigger the hardware model and change the logic state.
[0676]
During the data transfer, the DATA_XSFR signal is a logic one. During this time, the local buses 2222-2230 are used by the conversion system to transmit data using the following data cycle. (1) Global data from RCC computing system to RCC hardware array and CLK space, (2) Global data from external interface to RCC hardware array and external buffer, and (3) From RCC computing system to RCC hardware array S2H data (rate of one chip at a time on each board). Thus, the first two data cycles are part of the global cycle and the last data cycle is part of the S2H cycle.
[0677]
In the first part of the data-in-global cycle in which global data is sent from the RCC computing system to the RCC hardware array, the external I /
[0678]
Global data propagates from these local bus lines to
[0679]
These FD bus lines 2236-2240 are coupled to inputs to latches 2208-2213 in
[0680]
The enable input for each of these latches 2208-2213 is coupled to a number of global pointers and software to hardware (S2H) pointers. The enable input to latches 2208-2211 is coupled to the global pointer, and the enable input to latches 2212-2213 is coupled to the S2H pointer. Some examples of global pointers include GLB_PTR0 on
[0681]
These global and S2H pointer signals are generated on output 2254 by data in pointer state machine 2214. The data in pointer state machine 2214 is controlled by DATA_XSFR and F_WR on
[0682]
The outputs 2247-2252 of these latches are coupled to various internal nodes in the user-designed hardware model. Some of these internal nodes correspond to user-designed input pinouts. User designs typically have other internal nodes that are not accessible through pinouts, but these non-pinout internal nodes have other debugging purposes. That is, it provides flexibility to designers who wish to apply stimuli to various internal nodes (whether they are input pinouts or not) in the user design. These internal nodes that correspond to data-in logic and input pinouts are relevant to stimuli applied to a complex hardware model of the user design by an external interface. For example, if the user design is a CRTC 6845 video controller, some pinouts may be as follows:
[0683]
LPSTB-light pen strobe pin
~ RESET-6845 Low level signal to reset the controller
RS-register selection
E-enable
CLK-clock
~ CS-chip selection
Other input pinouts are also available in this video controller. Based on the number of input pinouts that are external interfaces, the number of nodes and thus the number of latches and pointers can be easily determined. One hardware model configured in the RCC hardware array has, for example, 30 separate latches associated with each of GLB_PTR0, GLB_PTR1, GLB_PTR2, GLB_PTR3, S2H_PTR0, and S2H_PTR1 for a total of 180 latches (= 30 × 6). Can have. In other designs, more global pointers such as GLB_PTR4 to GLB_PTR30 may be used as needed. Similarly, more S2H pointers such as S2H_PTR2 to S2H_PTR30 may be used as needed. These pointers and their corresponding latches are based on the hardware model requirements of each user design.
[0684]
Returning to FIGS. Data on the FD bus line is transferred to these internal nodes only when the latch is enabled using the appropriate global pointer or S2H pointer signal. Otherwise, these nodes are not driven by any data on the FD bus. When F_WR is logic “1” in the first half of the CPU_IN = 1 period, GLB_PTR0 is logic “1”, and the data on FD1 is transmitted to the corresponding internal node via
[0685]
Here, the second part of the data in global cycle will be described. Here, global data from the external interface is delivered to the RCC hardware and external buffer. Again, various input pin-out signals from the target system or external I / O device that are directed to the user design must be provided to the hardware and software models. These data can be delivered to the hardware model by using appropriate pointers and latched for transmission to internal nodes. These data are also delivered to the software model by first storing the data in an
[0686]
Here, CPU_IN is logic “0”, and EXT_IN is logic “1”. Therefore, the tristate buffer 2206 in the external I /
[0687]
In the second half of the period when the EXT_IN signal is logic “1”, GLB_PTR3 is logic “1”. This latches the data so that it is latched at the internal node in the hardware model coupled to the data on FD 6 (via
[0688]
As noted above, these data from the target system or some other external I / O device can also be stored in the software model by first storing the data in an
[0689]
Here, the S2H cycle will be described. The S2H cycle is used to deliver test bench data from the RCC calculation system to the RCC hardware array, and then move that data sequentially from one chip to the next for each board. The CPU_IN signal is a logic “1”, while the EXT_IN signal is a logic “0”. This indicates data transfer between the RCC computing system and the RCC hardware array. No external interface is involved. The CPU_IN signal also allows the
[0690]
At the start of the CPU_IN = 1 period, S2H_PTR0 becomes logic “1”. This latches so that the data on FD5 (via local bus 2222,
[0691]
At the end of this data transfer, DATA_XSFR returns to logic “0”. Note that I / O from the external interface is processed as global data and handles during the global cycle. This completes the explanation of the data-in control logic and the data-in cycle.
[0692]
(Data out)
A data out control logic embodiment of the present invention will now be described. The data out control logic of the embodiment of the present invention is responsible for processing data delivered from the RCC hardware array to the RCC computing system and external interface. During the course of processing data in response to a stimulus (external or otherwise), the hardware model generates predetermined output data that may be required by the target application or some I / O devices. These output data can be substantive data, addresses, control information, or other relevant information that another application or device may need for its own processing. These output data to the RCC computing system (which may have models of other external I / O devices in software), target systems, or external I / O devices are provided on various internal nodes. As described above for data-in logic, some of these internal nodes correspond to user-designed output pinouts. User designs typically have other internal nodes that are not available through pinouts, but these non-pinout internal nodes have other debugging purposes. That is, to give flexibility to designers who want to read and analyze stimuli at various internal nodes (whether they are input pinouts or not) in the user design. These internal nodes that correspond to data-in logic and input pinouts are relevant to stimuli applied to a complex hardware model of the user design by an external interface.
[0693]
For example, if the user design is a CRTC 6845 video controller, some pinouts may be as follows:
[0694]
MA0 to MA13 Memory address
D0 to D7 Data bus
DE display enable
CURSOR cursor position
VS vertical sync
HS horizontal sync
Other input pinouts are also available in this video controller. Based on the number of input pinouts that are external interfaces, the number of nodes and hence the number of gate logic and pointers can be easily determined. Thus, output pinouts MA0-MA13 on the video controller provide a memory address for the video RAM. The VS output pinout provides a signal for vertical synchronization and therefore causes vertical retrace on the monitor. Output pinouts D0-D7 form eight terminals that form a bi-directional data bus for accessing internal 6845 registers by the CPU in the target system. These output pinouts correspond to predetermined internal nodes in hardware. Of course, the number and nature of these internal nodes will vary depending on the user design.
[0695]
Data from these output pinout internal nodes must be provided to the RCC calculation system. Because the RCC computing system includes a model of the entire user design in software, and any events that occur in the hardware model must be communicated to the software model so that corresponding changes can be made. In this way, the software model may have information that matches the information in the hardware model. Thus, the RCC computing system has determined that the user or designer has modeled in software rather than connecting the actual device to one of the ports on the external I / O expander. Can have several device models. For example, the user determines that it is easier and more effective to model a monitor or speaker in software rather than plugging an actual monitor or speaker in one of the external I / O expander ports. Can do. Furthermore, data from these internal nodes in the hardware model must be provided to the target system and any other external I / O devices. In order for nodes in these output pinout internal nodes to be delivered to the RCC computation system and target systems and other external I / O devices, the data out control logic of one embodiment of the present invention is provided in the conversion system. Is done.
[0696]
The data out control logic uses a data out cycle that includes the transfer of data from the RCC hardware array to the RCC computing system 2141 and the external interface (external I / O expander 2139). In FIG. 69, each of the boards 2145 to 2149 has control logic for transferring data between the external interface (external I / O expander 2139) and the
[0697]
One particular subset of data-out control logic is shown in FIG. 71 and includes external I /
[0698]
In contrast to the two cycle types of data-in cycles, data-out cycles include only one type of cycle. Data out control logic sequentially delivers data from the RCC hardware model to (1) the RCC computing system, and then (2) the RCC computing system and the external interface (with the target system and external I / O devices). That is, the data out cycle is such that data from the internal nodes of the hardware model in the RCC hardware array is first on the RCC computation system and then second on the RCC computation system and external interfaces on each chip at each board. It needs to be delivered one chip and one board at a time.
[0699]
Similar to data-in logic, pointers are used to select (or gate) data from internal nodes to the RCC computing system and external interface. In one embodiment illustrated in FIGS. 71 and 73, the data out pointer state machine 2319 has five pointers H2S_PTR [4: 0] on the bus 2359 for both hardware-to-software data and hardware-to-external interface data. ] Is generated. Data out pointer state machine 2319 is controlled by the DATA_XSFR and F_RD signals on
[0700]
These H2S pointer signals are provided to the gate logic. A set of inputs 2353 to 2357 to the gate logic is directed to several AND
[0701]
The
[0702]
[0703]
These local bus lines are coupled to a
[0704]
Lines 2321-2324 are provided to allow data on these local bus lines 2330-2333 to be delivered to the external interface.
[0705]
Each output of these
[0706]
Lookup table 2309 is configured to allow input to these
[0707]
In this example, rows 0-3 of lookup table 2309 are programmed to enable the latch corresponding to the output pinout wire for the internal node in chip m1. Similarly, rows 4-6 are programmed to enable latches corresponding to output pinout wires for internal nodes in chip 0_1 (ie,
[0708]
As described above, the data out control logic is configured such that the data in each reconfigurable logic element in each chip in the RCC hardware model is (1) the RCC calculation system, and then (2) the RCC calculation system and (the target system and the external I Sequentially delivered with the external interface (with / O device). The RCC calculation system needs these data. Because the RCC calculation system has a model of several I / O devices in software, and for data that targets one of these modeled I / O devices, the RCC calculation system They need to be monitored so that their internal state is consistent with the state of the hardware model in the RCC hardware array. In this example illustrated in FIGS. 71 and 73, only seven internal nodes may be driven for output to the RCC computing system and external interface. Two of these internal nodes are in chip m1, and the other five internal nodes are in chip 0_1 (ie,
[0709]
During the data transfer, the DATA_XSFR signal is a logic “1”. During this time, local buses 2330-2333 are used by the conversion system to sequentially transfer data from each chip on each board in the RCC hardware array to both the RCC computing system and the external interface. The DATA_XSFR and F_RD signals control the operation of the data out pointer state machine to generate the appropriate pointer signal H2S_PTR [4: 0] to the appropriate gate for the output pinout internal node. The F_RD signal also controls a look-up
[0710]
The internal nodes in chip m1 can be processed first. When F_RD rises to logic “1” at the start of the data transfer cycle, H2S_PTR0 in chip m1 rises to logic “1”. Thereby, the data in these internal nodes in the chip m1 depending on H2S_PTR0 is transferred to the RCC calculation system via the
[0711]
Here, five internal nodes in reconfigurable logic element 2303 (ie, chip 0_1 in
[0712]
When F_RD rises to logic “1”, H2S_PTR0 in
[0713]
When the F_RD signal becomes logic “1” again, H2S_PTR2 becomes logic “1” and the data at the internal node coupled to
[0714]
When the F_RD signal becomes logic “1” again, H2S_PTR3 becomes logic “1” and the data at the internal node coupled to line 2351 is provided on LD1. This data is provided to both the RCC calculation system and the external interface. The tri-state
[0715]
When the F_RD signal becomes logic “1” again, H2S_PTR4 becomes logic “1” and the data at the internal node coupled to
[0716]
This process of transferring the data at the internal node of chip m1 first to the RCC calculation system and then to both the RCC calculation system and the external interface is then continued sequentially for the other chips. First, the internal node of chip m1 was driven. Second, the internal node of chip 0_1 (chip 2303) was driven. Next, if there is an internal node of the chip 1_1, it can be driven. This operation continues until the last node in the last chip on the last board is driven. Therefore, if there is an internal node of the chip 7_8, it can be driven. Finally, if there is an internal node of chip m2, it can be driven.
[0717]
71 shows data out control logic for driving internal nodes in
[0718]
(Board layout)
Here, the board layout of the conversion system according to the embodiment of the present invention will be described with reference to FIG. The board is installed in the RCC hardware array. The board layout is similar to that illustrated in FIGS. 8 and 36-44 and described in the accompanying text.
[0719]
In one embodiment, the RCC hardware array includes six boards. Board m1 is coupled to
[0720]
Board m1 includes chip m1. The interconnect structure between the board m1 and the other boards is such that the chip m1 is coupled to the south interconnect to the
[0721]
(X. Example)
To illustrate the operation of one embodiment of the present invention, a virtual user circuit design may be used. In a structured register transfer level (RTL) HDL code, an example of user circuit design is as follows.
[0722]
[Expression 7]
[0723]
This code is reproduced in FIG. The specific functional details of this circuit design are not necessary to understand the present invention. However, the reader should understand that the user generates this HDL code and designs a circuit for simulation. The circuit represented by this code performs a predetermined function as designed by the user, responds to the input signal, and generates an output.
[0724]
FIG. 27 shows a circuit diagram of the HDL code described with reference to FIG. In most cases, the user can actually generate a schematic of this property before expressing it in HDL form. A number of schematic capture tools allow for the entry of a real circuit diagram, and after processing, these tools generate usable code.
[0725]
As shown in FIG. 28, the simulation system performs component type analysis. The HDL code originally presented in FIG. 26 as representing the user's specific circuit design was analyzed here. The first few lines of code starting with "module register (clock, reset, d, q);" and ending with "endmodule" and further identified by
[0726]
The next few lines of code (reference number 907) represent predetermined wire interconnection information. Wire variables in HDL as known to those skilled in the art are used to represent physical connections between structural entities such as gates. Since HDL is mainly used to model digital circuits, wire variables are necessary variables. Usually, “q” (eg, q1, q2, q3) represents an output wireline and “d” (eg, d1, d2, d3) represents an input wireline.
[0727]
[0728]
[0729]
The next series of code line numbers shows the test bench components.
[0730]
The component type analysis is summarized in the following table.
[0731]
[Table 15]
[0732]
Based on the component type analysis, the system generates a software model for the entire circuit and a hardware model for the registers and combinatorial components. S1 to S3 are register components, and S4 to S7 are combination components. These components are modeled in hardware, allowing the user of the S emulation system to either simulate the entire circuit in software or to simulate in software and selectively speed up in hardware To. In either case, the user dominates the simulation and hardware acceleration modes. In addition, the user can emulate the circuit using the target system while still maintaining software control of starting, stopping, checking values, and asserting input values every cycle.
[0733]
FIG. 29 shows a signal network analysis of the same structured RTL level HDL code. As shown, S8, S9, S10, and S11 are modeled or provided in software. S9 is essentially a test bench process that generates a sigin signal, and S12 is essentially a similar process for a test bench that receives a sigout signal. In this example, S9 generates a random sign to simulate the circuit. However, registers S1-S3 and combinational components S4-S7 are modeled in hardware and software.
[0734]
For a software / hardware boundary, the system uses various residence signals (ie, q1, q2, q3, CLK, sign, signout) that are used to interface the software model with the hardware model. Allocate memory space for
[0735]
[Table 16]
[0736]
FIG. 30 shows the result of software / hardware division for this circuit design example. FIG. 30 is a more feasible example of software / hardware partitioning. Software side 910 is coupled to hardware side 912 via software /
[0737]
Software side 910 contains and is controlled by a software kernel. In general, the kernel is the main control loop that controls the operation of the S emulation system. As long as any test bench process is active, the kernel evaluates the test bench components, evaluates the clock components, detects clock edges, updates registers and memory, transmits combinatorial logic data, and simulates Advance time. The kernel resides on the soft side, but some of the operations or statements are executed in hardware. This is because a hardware model exists for these statements and operations. Thus, the software controls both software and hardware models.
[0738]
The software side 910 includes the entire model of the user's circuit including S1-S12. The software / hardware boundary on the software side includes I / O buffers or address spaces S2H, CLK, H2S, and REG. The driver test bench process S9 is coupled to the S2H address space, the monitor test bench process S12 is coupled to the H2S address space, and the clock generator S8 is coupled to the clock address space. Registers S1-S3 output signals q1-q3 are assigned to the REG space.
[0739]
The hardware model 912 has a model of combination components S4 to S7 and resides on the pure hardware side. On the software / hardware boundary of hardware model 912, sigout, signin, register outputs q1-q3, and
[0740]
In addition to the user's model of custom circuit design, the system generates a software clock and an address pointer. The software clock provides a signal to allow input to registers S1-S3. As noted above, the software clock of the present invention eliminates race conditions and retention time exceeded problems. When a clock edge is detected by the main clock in software, the detection logic activates the corresponding detection logic in hardware. The
[0741]
[0741]
Combination components S4-S7 are also coupled to register components S1-S3, signin, and signout. These signals propagate on / from
[0743]
The complete hardware model before the mapping, placement, and routing steps is shown in FIG. 31 (excluding the address pointer). The system has not yet mapped the model to a specific chip. Registers S1-S3 are provided coupled to the I / O bus and combinational components S4-S6. The signin, sigout, and
[0744]
Once the hardware model is determined, the system then maps, places, and routes the model to one or more chips. Although this particular example may actually be implemented on one AlteraFLEX 10K chip, for purposes of illustration, this example may assume that two chips may be needed to implement this hardware model. FIG. 32 shows the result of one specific hardware model versus chip partition for this example.
[0745]
The complete model shown in FIG. 32 (except for the I / O good clock edge register) involves chip boundaries represented by dotted lines. This result is generated by the compiler of the S emulation system and then the final configuration file is generated. Thus, the hardware model requires at least three wires between the two chips for
[0746]
Analyzing this particular segmentation result shown in FIG. 32, the number of wires between these two chips can be reduced to two by moving the
[0747]
FIG. 34 shows the logical patch operation for the same hypothetical example. Here is the final implementation of the two chips. The system generated a configuration file using the segmentation result of FIG. However, for simplicity, no address pointer is shown. Two
[0748]
These
[0749]
These
[0750]
The foregoing descriptions of preferred embodiments of the present invention have been presented for purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise form disclosed. Many modifications and variations will be apparent to practitioners skilled in this art. The applications described herein may be replaced with other applications without departing from the spirit and scope of the present invention. Accordingly, the invention should be limited only by the scope of the claims.
[Brief description of the drawings]
FIG. 1 shows a high level overview of one embodiment of the present invention including a target system coupled to a workstation, a reconfigurable hardware hardware emulation model, an emulation interface and a PCI bus.
FIG. 2 shows a specific usage flow chart of the present invention.
FIG. 3 shows a high-level schematic diagram of software compilation and hardware configuration for compile time and run time according to one embodiment of the present invention.
FIG. 4 shows a flowchart of a compilation process that includes generating software / hardware model and software kernel code.
FIG. 5 shows a software kernel that controls the entire S emulation system.
FIG. 6 illustrates a method for mapping a hardware model to a reconfigurable hardware board by mapping, placement and routing.
FIG. 7 shows a connectivity matrix for the FPGA array shown in FIG.
FIG. 8 illustrates one embodiment of a 4 × 4 FPGA array and interconnect.
FIG. 9A illustrates one embodiment of a time division multiplexing (TDM) circuit. One embodiment of this time division multiplexing (TDM) circuit allows groups of wires to be coupled together in a time multiplexed manner, so that one pin, rather than multiple pins, is this Can be used on one chip for a group. FIG. 9A shows an overview of the pin output problem.
FIG. 9B illustrates one embodiment of a time division multiplexing (TDM) circuit. One embodiment of this time division multiplexing (TDM) circuit allows groups of wires to be coupled together in a time multiplexed manner, so that one pin, rather than multiple pins, is this Can be used on one chip for a group. FIG. 9B provides a TDM circuit on the transmitting side
FIG. 9C illustrates one embodiment of a time division multiplexing (TDM) circuit. One embodiment of this time division multiplexing (TDM) circuit allows groups of wires to be coupled together in a time multiplexed manner, so that one pin, rather than multiple pins, is this Can be used on one chip for a group. FIG. 9C each shows providing a TDM circuit on the receiving side.
FIG. 10 illustrates an S emulation system architecture according to one embodiment of the present invention.
FIG. 11 shows an embodiment of the address pointer of the present invention.
12 shows a state transition diagram of address pointer initialization of the address pointer of FIG. 11. FIG.
FIG. 13 illustrates one embodiment of a MOVE signal generator that derivatively generates various MOVE signals for the address pointer.
FIG. 14 shows a chain of multiplexed address pointers of each FPGA chip.
FIG. 15 illustrates one embodiment of a cross-chip address chain multiplexed according to one embodiment of the present invention.
FIG. 16 shows a flowchart of clock / data network analysis important for software clock implementation and evaluation of the logical components of the hardware model.
FIG. 17 shows the basic building blocks of a hardware model according to one embodiment of the invention.
FIG. 18A shows a register model implementation with latches and flip-flops.
FIG. 18B shows a register model implementation with latches and flip-flops.
FIG. 19 illustrates one embodiment of clock edge detection logic in accordance with one embodiment of the present invention.
FIG. 20 illustrates a four-state finite state machine that controls the clock edge detection logic of FIG. 19 in accordance with one embodiment of the present invention.
FIG. 21 shows interconnections (JTAG, FPGA bus and global signal designator for each FPGA chip) according to one embodiment of the invention.
FIG. 22A illustrates one embodiment of an FPGA controller between a PCI bus and an FPGA array.
FIG. 22B shows one embodiment of an FPGA controller between the PCI bus and the FPGA array.
FIG. 23A shows a more detailed illustration of the CTRL_FPGA unit and data buffer described in FIG.
FIG. 23B shows a more detailed illustration of the CTRL_FPGA unit and data buffer described in FIG.
FIG. 24 shows the relationship between 4 × 4 FPGA arrays, FPGA banks, and expansion functions.
FIG. 25 illustrates one embodiment of a hardware start method.
FIG. 26 shows HDL code for an example of a user circuit design that is modeled and simulated.
FIG. 27 is a circuit diagram symbolically showing the circuit design of the HDL code of FIG.
FIG. 28 shows component type analysis of the HDL code of FIG.
FIG. 29 shows a signal network analysis of a structured RTL HDL code based on the user's custom circuit design shown in FIG.
FIG. 30 shows the same virtual example software / hardware partition results.
FIG. 31 shows the same virtual example hardware model.
FIG. 32 shows specific hardware model-chip partition results for the same virtual example of a user's custom circuit design.
FIG. 33 shows another hardware model-chip partition result of the same virtual example of a user's custom circuit design.
FIG. 34 shows the same virtual logic patch operation of the user's custom circuit design.
FIGS. 35 (A)-(D) illustrate the “hop” principle and FPGA board connection scheme by two examples.
FIG. 36 shows an outline of an FPGA chip used in the present invention.
FIG. 37 shows FPGA interconnections of the FPGA chip.
FIG. 38A shows a side view of an FPGA cord connection conceptual diagram according to one embodiment of the present invention.
FIG. 38B shows a side view of an FPGA cord connection conceptual diagram according to one embodiment of the present invention.
FIG. 39 illustrates a directly adjacent 1-hop 6-board interconnect layout of an FPGA array according to one embodiment of the present invention.
FIG. 40A shows an FPGA internal board interconnection scheme.
FIG. 40B shows an FPGA internal board interconnection scheme.
FIG. 41A shows a top view of a board interconnect connector.
FIG. 41B shows the top surface of the board interconnect connector.
FIG. 41C shows the top surface of the board interconnect connector.
FIG. 41D shows a top view of the board interconnect connector.
FIG. 41E shows a top view of the board interconnect connector.
FIG. 41F shows a top view of the board interconnect connector.
FIG. 42 shows a typical FPGA board on-board connector and some components.
43 shows a legend for the connectors of FIGS. 41A-F and FIG. 42. FIG.
FIG. 44 illustrates a directly adjacent 1-hop two board interconnect layout of an FPGA array according to another embodiment of the present invention.
FIG. 45 shows a workstation with a multiprocessor according to another embodiment of the invention.
FIG. 46 illustrates an environment according to another embodiment of the invention in which multiple users share a signal single simulation / emulation system based on a time division basis.
FIG. 47 shows a high-level structure of a simulation server according to an embodiment of the present invention.
FIG. 48 shows the architecture of a simulation server according to an embodiment of the present invention.
FIG. 49 shows a flowchart of the simulation server.
FIG. 50 shows a flowchart of a job swapping process.
FIG. 51 shows signals between a device driver and a reconfigurable hardware unit.
FIG. 52 shows a time-sharing function of a simulation server that handles a plurality of jobs having different levels of priority.
FIG. 53 shows a communication handshake signal between a device driver and a reconfigurable hardware unit.
FIG. 54 shows a state diagram of a communication handshake protocol.
FIG. 55 shows an overview of a client-server model of a simulation server according to an embodiment of the present invention.
FIG. 56 shows a high-level block diagram of a simulation system that implements memory mapping according to one embodiment of the invention.
FIG. 57 is a more detailed block diagram of the memory mapping aspect of a simulation system with a memory finite state machine (MEMFSM) support component and an evaluation finite state machine for each FPGA logic device (EVALFSMx). Indicates.
FIG. 58 shows a state diagram of a finite state machine of a MEMFSM unit of a CTRL_FPGA unit according to one embodiment of the invention.
FIG. 59 shows a state diagram of a finite state machine for each FPGA chip according to one embodiment of the invention.
FIG. 60 shows a memory read data double buffer.
FIG. 61 illustrates a simulation write / read cycle according to one embodiment of the invention.
FIG. 62 shows a timing diagram of a simulation data transfer operation when a DMA read operation occurs after the CLK_EN signal.
FIG. 63 shows a timing diagram of a simulation data transfer operation when a DMA read operation occurs near the end of the EVAL period.
FIG. 64 shows an exemplary user design implemented as a PCI add-on card.
FIG. 65 shows an exemplary hardware / software co-verification system that uses an ASIC as the device under test.
FIG. 66 shows an exemplary co-verification system that uses an emulator when the device under test is pre-promoted to the emulator.
FIG. 67 shows a simulation system according to an embodiment of the present invention.
FIG. 68 illustrates a co-verification system that does not use an external I / O device according to one embodiment of the invention, except that the RCC computing system uses various I / O device and target system software. Includes model.
FIG. 69 shows a co-verification system with an actual external I / O device and target system according to another embodiment of the present invention.
FIG. 70 shows a more detailed logic diagram of the data-in portion of the control logic according to one embodiment of the present invention.
FIG. 71 shows a more detailed logic diagram of the data out part of the control logic according to one embodiment of the present invention.
FIG. 72 shows a timing diagram of the data-in part of the control logic.
FIG. 73 shows a timing diagram of the data out part of the control logic.
FIG. 74 shows a board layout for an RCC hardware array according to one embodiment of the invention.
FIG. 75A shows an exemplary shift register circuit used to explain retention time and clock glitch problems.
FIG. 75B shows a timing diagram of the shift register circuit shown in FIG. 75A to illustrate a retention time violation.
FIG. 76A shows the same shift register circuit of FIG. 75A in which a plurality of FPGA chips are arranged.
FIG. 76B shows a timing diagram of the shift register circuit shown in FIG. 76A to illustrate the retention time.
77A shows an exemplary logic circuit used to illustrate the clock glitch problem. FIG.
FIG. 77B shows a timing diagram of the logic circuit of FIG. 77A to illustrate the clock glitch problem.
FIG. 78 illustrates a prior art timing adjustment technique that solves the retention time violation problem.
FIG. 79 shows a prior art timing synthesis technique that solves the retention time violation problem.
80A shows an original latch, according to one embodiment of the present invention. FIG.
FIG. 80B shows a timing independent and glitchless latch, according to one embodiment of the invention.
FIG. 81A shows an originally designed flip-flop, according to one embodiment of the present invention.
FIG. 81B illustrates a timing-independent and glitch-free design type flip-flop, according to one embodiment of the present invention.
FIG. 82 shows a timing diagram of a trigger mechanism for a timing-independent and glitch-free design type flip-flop according to one embodiment of the present invention.
Claims (4)
値を格納する第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の論理回路の該制御入力に該制御信号として提示する、論理装置。A first input having a first input for receiving first data, a second input for receiving second data, a first output, and a control input for receiving a control signal. The first data received at the first input and the second data received at the second input in response to the control signal received at the control input A first logic circuit that selects one of the data and presents the selected data to the first output ;
A second logic circuit for storing a value, the first trigger input; a second logic input coupled to the first output; and a second input of the first logic circuit A logic device comprising: a second logic circuit having a second logic output configured;
The second logic circuit presents the value as the second data to the second input of the first logic circuit via the second logic output of the second logic circuit;
Regardless of the order in which the control signal arrives at the control input or the first data arrives at the first input of the first logic circuit, (1) the second logic A circuit is updated to the first data by replacing the value via the first output of the first logic circuit and the second logic input of the second logic circuit; (2) The second logic circuit receives the first data via the second logic output of the second logic circuit when the trigger signal is received at the trigger input. Presenting the second data to the second input of the logic circuit of
The logical unit is
A fourth input for receiving new data; a second trigger input for receiving the trigger signal; and a third output coupled to the first input of the first logic circuit. A third logic circuit comprising:
An edge detector having a clock input for receiving a clock signal, a third trigger input for receiving the trigger signal, and a fourth output coupled to the control input of the first logic circuit And further comprising
When the trigger signal is applied to the second trigger input at a selected time, the third logic circuit is connected to the third logic circuit via the third output of the third logic circuit. Presenting the new data received at the fourth input of the first logic circuit to the first input of the first logic circuit as the first data;
When the trigger signal is applied to the third trigger input at the selected time, the edge detector is responsive to the clock signal being received at the clock input of the edge detector; A logic device presenting an output signal as the control signal to the control input of the first logic circuit via the fourth output of the edge detector.
該デバッグシステムは、
該ユーザ設計回路のソフトウェアモデルを生成する計算システムと、
該ユーザ設計回路の少なくとも一部のハードウェアモデルを生成する再構成可能なハードウェアシステムであって、該ハードウェアモデルは、該ユーザ設計回路において複数の論理回路を置換する複数のエミュレーション論理デバイスを含む、再構成可能なハードウェアシステムと、
該計算システムに対するスレーブとして機能し、該計算システムと該再構成可能なハードウェアシステムとに結合された制御手段であって、該再構成可能なハードウェアシステムにおける該ハードウェアモデルの動作を制御する制御手段と
を備え、
該複数のエミュレーション論理デバイスのそれぞれは、
第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の論理回路の該制御入力に該制御信号として提示する、デバッグシステム。A debugging system for verifying proper operation of a user-designed circuit, wherein the user design includes a plurality of logic devices and a plurality of circuit paths,
The debug system
A calculation system for generating a software model of the user-designed circuit;
A reconfigurable hardware system that generates a hardware model of at least a portion of the user-designed circuit, the hardware model comprising a plurality of emulation logic devices that replace a plurality of logic circuits in the user-designed circuit Including a reconfigurable hardware system,
Control means functioning as a slave to the computing system and coupled to the computing system and the reconfigurable hardware system for controlling the operation of the hardware model in the reconfigurable hardware system Control means, and
Each of the plurality of emulation logic devices is
A first input having a first input for receiving first data, a second input for receiving second data, a first output, and a control input for receiving a control signal. of I logic der, in response to the control signal received at the control input, the first received at the first input data and the second of the second received at the input A first logic circuit that selects one of the data and presents the selected data to the first output ;
A second logic circuit for storing a value, the first trigger input; a second logic input coupled to the first output; and a second input of the first logic circuit And a second logic circuit having a second logic output configured,
The second logic circuit presents the value as the second data to the second input of the first logic circuit via the second logic output of the second logic circuit;
Regardless of the order in which the control signal arrives at the control input or the first data arrives at the first input of the first logic circuit, (1) the second logic A circuit is updated to the first data by replacing the value via the first output of the first logic circuit and the second logic input of the second logic circuit; (2) The second logic circuit receives the first data via the second logic output of the second logic circuit when the trigger signal is received at the trigger input. Presenting the second data to the second input of the logic circuit of
Each of the plurality of emulation logic devices is
A fourth input for receiving new data; a second trigger input for receiving the trigger signal; and a third output coupled to the first input of the first logic circuit. A third logic circuit comprising:
An edge detector having a clock input for receiving a clock signal, a third trigger input for receiving the trigger signal, and a fourth output coupled to the control input of the first logic circuit And further including
When the trigger signal is applied to the second trigger input at a selected time, the third logic circuit is connected to the third logic circuit via the third output of the third logic circuit. Presenting the new data received at the fourth input of the first logic circuit to the first input of the first logic circuit as the first data;
When the trigger signal is applied to the third trigger input at the selected time, the edge detector is responsive to the clock signal being received at the clock input of the edge detector; A debugging system that presents an output signal as the control signal to the control input of the first logic circuit via the fourth output of the edge detector.
値を格納する第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の論理回路の該制御入力に該制御信号として提示する、論理装置。A first input having a first input for receiving first data, a second input for receiving second data, a first output, and a control input for receiving a control signal. The first data received at the first input and the second data received at the second input in response to the control signal received at the control input A first logic circuit that selects one of the data and presents the selected data to the first output ;
A second logic circuit for storing a value, the first trigger input; a second logic input coupled to the first output; and a second input of the first logic circuit A logic device comprising: a second logic circuit having a second logic output configured;
The second logic circuit presents the value as the second data to the second input of the first logic circuit via the second logic output of the second logic circuit;
The second logic circuit replaces the first value by replacing the first value of the first logic circuit and the second logic input of the second logic circuit. Updated to data, and the second logic circuit passes the first data through the second logic output of the second logic circuit when the trigger signal is received at the trigger input. Presenting the second data to the second input of the first logic circuit as the second data ;
The trigger input is received when the first data reaches a steady state;
The logical unit is
A fourth input for receiving new data; a second trigger input for receiving the trigger signal; and a third output coupled to the first input of the first logic circuit. A third logic circuit comprising:
An edge detector having a clock input for receiving a clock signal, a third trigger input for receiving the trigger signal, and a fourth output coupled to the control input of the first logic circuit And further comprising
When the trigger signal is applied to the second trigger input at a selected time, the third logic circuit is connected to the third logic circuit via the third output of the third logic circuit. Presenting the new data received at the fourth input of the first logic circuit to the first input of the first logic circuit as the first data;
When the trigger signal is applied to the third trigger input at the selected time, the edge detector is responsive to the clock signal being received at the clock input of the edge detector; A logic device presenting an output signal as the control signal to the control input of the first logic circuit via the fourth output of the edge detector.
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 (en) | 2005-01-06 |
JP2005500625A5 JP2005500625A5 (en) | 2005-12-22 |
JP4125675B2 true JP4125675B2 (en) | 2008-07-30 |
Family
ID=21742774
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003521985A Expired - Fee Related JP4125675B2 (en) | 2001-08-14 | 2001-08-14 | Glitch-free logic system and method insensitive to timing |
Country Status (6)
Country | Link |
---|---|
EP (1) | EP1417605A4 (en) |
JP (1) | JP4125675B2 (en) |
KR (1) | KR20040028599A (en) |
CN (1) | CN100578510C (en) |
CA (1) | CA2420022A1 (en) |
IL (2) | IL154480A0 (en) |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4561459B2 (en) | 2004-04-30 | 2010-10-13 | ヤマハ株式会社 | Class D amplifier |
KR101282963B1 (en) * | 2006-05-12 | 2013-07-08 | 삼성전자주식회사 | Emulation system and method thereof |
EP2366154A4 (en) * | 2008-11-19 | 2016-08-10 | Lsi Corp | Interconnects using self-timed time-division multiplexed bus |
US8239590B1 (en) * | 2009-01-31 | 2012-08-07 | Xilinx, Inc. | Method and apparatus for transferring data between two different interfaces |
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 (en) * | 2012-06-19 | 2015-04-01 | 中国电子科技集团公司第二十八研究所 | System simulation test environment building and configuring system and method based on extensive markup language (XML) |
KR101354007B1 (en) * | 2012-12-12 | 2014-01-21 | 국방과학연구소 | Interfacing system synchronizing a time process of a simulation system and a test system based on simulation time and test method for simulation model |
KR101704600B1 (en) | 2014-10-31 | 2017-02-08 | 한국전기연구원 | Glitch removal device for hall-sensor |
US10289579B2 (en) * | 2015-12-10 | 2019-05-14 | Qualcomm Incorporated | Digital aggregation of interrupts from peripheral devices |
EP3399425B1 (en) * | 2017-05-05 | 2020-07-29 | dSPACE digital signal processing and control engineering GmbH | Method for detecting wiring topology |
CN109960593B (en) * | 2017-12-26 | 2023-02-17 | 中国船舶重工集团公司七五〇试验场 | Interlocking type time sequence control simulation method |
CN108537000B (en) * | 2018-03-27 | 2021-07-27 | 东南大学 | Milli-type state machine design method based on molecular calculation |
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 |
CN109683512B (en) * | 2018-12-07 | 2022-04-12 | 四川航天烽火伺服控制技术有限公司 | Adapter card applied to rudder system |
US10454459B1 (en) | 2019-01-14 | 2019-10-22 | Quantum Machines | Quantum controller with multiple pulse modes |
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 |
CN112445743B (en) * | 2019-09-04 | 2024-03-22 | 珠海格力电器股份有限公司 | Burr removing method, device and state machine |
CN111479334B (en) * | 2020-03-20 | 2023-08-11 | 深圳赛安特技术服务有限公司 | Network request retry method and device and terminal equipment |
CN111581149B (en) * | 2020-04-24 | 2022-08-26 | 希翼微电子(嘉兴)有限公司 | Reconfigurable address remapping low-power consumption multifunctional timer |
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 (en) * | 2020-11-03 | 2023-08-04 | 北京百度网讯科技有限公司 | System performance evaluation method, device, equipment and storage medium |
CN112328701B (en) * | 2020-11-27 | 2023-11-10 | 广东睿住智能科技有限公司 | Data synchronization method, terminal device and computer readable storage medium |
CN113158260B (en) * | 2021-03-30 | 2023-03-31 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | Hierarchical protection circuit of SoC chip internal data |
CN112733478B (en) * | 2021-04-01 | 2021-08-03 | 芯华章科技股份有限公司 | Apparatus for formal verification of a design |
CN113297819B (en) * | 2021-06-22 | 2023-07-07 | 海光信息技术股份有限公司 | Timing sequence checking method and device of asynchronous clock, electronic equipment and storage medium |
WO2023281652A1 (en) * | 2021-07-07 | 2023-01-12 | 日本電信電話株式会社 | Reconfigurable circuit device |
US20230153678A1 (en) * | 2021-07-21 | 2023-05-18 | Quantum Machines | System and method for clock synchronization and time transfer between quantum orchestration platform elements |
CN114841103B (en) * | 2022-07-01 | 2022-09-27 | 南昌大学 | Parallel simulation method, system, storage medium and equipment for gate-level circuit |
CN116882336B (en) * | 2023-09-07 | 2023-12-01 | 芯动微电子科技(珠海)有限公司 | Modeling method and device based on high-level language simulation 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 |
US6134516A (en) * | 1997-05-02 | 2000-10-17 | Axis Systems, Inc. | Simulation server system and method |
US6009256A (en) * | 1997-05-02 | 1999-12-28 | Axis Systems, Inc. | Simulation/emulation system and method |
-
2001
- 2001-08-14 CN CN01822790A patent/CN100578510C/en not_active Expired - Fee Related
- 2001-08-14 IL IL15448001A patent/IL154480A0/en active IP Right Grant
- 2001-08-14 EP EP01967980A patent/EP1417605A4/en not_active Withdrawn
- 2001-08-14 JP JP2003521985A patent/JP4125675B2/en not_active Expired - Fee Related
- 2001-08-14 CA CA002420022A patent/CA2420022A1/en not_active Abandoned
- 2001-08-14 KR KR10-2003-7002219A patent/KR20040028599A/en not_active Application Discontinuation
-
2003
- 2003-02-16 IL IL154480A patent/IL154480A/en not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
KR20040028599A (en) | 2004-04-03 |
IL154480A0 (en) | 2003-09-17 |
CN100578510C (en) | 2010-01-06 |
CN1491394A (en) | 2004-04-21 |
IL154480A (en) | 2008-11-26 |
JP2005500625A (en) | 2005-01-06 |
CA2420022A1 (en) | 2003-02-27 |
EP1417605A4 (en) | 2009-07-15 |
EP1417605A1 (en) | 2004-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4125675B2 (en) | Glitch-free logic system and method insensitive to timing | |
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 | |
US7480606B2 (en) | VCD-on-demand system and method | |
US6810442B1 (en) | Memory mapping system and method | |
US9195784B2 (en) | Common shared memory in a verification system | |
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 (en) | Network-based hierarchical emulation system | |
KR100483636B1 (en) | Method and apparatus for design verification using emulation and simulation | |
US7366652B2 (en) | Method of programming a co-verification system | |
JP4102752B2 (en) | VCD-on-demand system and method |
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 |