(57)【要約】  エミュレーションシステムからの追跡データを圧縮するシステムおよび方法。スキャンチェーンは、1つまたは複数のエミュレーションチップ内部の構成可能な論理ブロックから追跡データを受信することができ、スキャンチェーンから受信されたデータを圧縮することができる。デルタ圧縮を使用する場合、スキャンチェーンはデルタ検出機能を実行することもできる。あるいは、スキャンチェーンの出力を使用してデルタ検出を実行することができる。さらに、スキャンチェーンの内部または外部でイベント検出器を実施することができる。追跡データの圧縮には、複数のデータセットを受信する段階と、組み合わされたデータセットの断面に沿って圧縮を実行する段階とを含めることができる。
2007526442.tif 000002
【特許請求の範囲】
【請求項１】
ワークステーションの外部でエミュレーション追跡データを圧縮する段階を含む方法。
【請求項２】
圧縮段階が、デルタ圧縮を使用してエミュレーション追跡データを圧縮する段階を含む、請求項1記載の方法。
【請求項３】
集積回路チップ内の状態を表すエミュレーション追跡データを生成する段階；および
圧縮されたエミュレーション追跡データを集積回路チップのピンに供給する段階とをさらに含み、
圧縮段階が集積回路チップ内で行われる、請求項1記載の方法。
【請求項４】
圧縮されたエミュレーション追跡データを集積回路チップの外部の記憶装置に記憶する段階をさらに含む、請求項3記載の方法。
【請求項５】
エミュレーションシステムにおいて、集積回路チップ内に配置されたスキャンチェーンであって、集積回路チップの複数の構成可能な論理ブロックの状態を表す１組の第1のデータを第1の時間に受信し、複数の構成可能な論理ブロックの状態を表す1組の第2のデータを第2の時間に受信するように構成され、さらに、デルタが第1のデータセットと第2のデータセットの間に起こったかどうかを表す1組の第2のデータを出力するように構成されたスキャンチェーンを含む集積回路チップ。
【請求項６】
集積回路チップが特定用途向け集積回路（ASIC）である、請求項5記載の集積回路チップ。
【請求項７】
集積回路チップが再構成可能な論理を含む、請求項5記載の集積回路チップ。
【請求項８】
スキャンチェーンが、フリップ・フロップの入力に結合された第1の入力と、フリップ・フロップの出力に結合された第2の入力とを有するXORゲートを含む、請求項5記載の集積回路チップ。
【請求項９】
スキャンチェーンが、XORゲートの出力に結合された第1の入力と、フリップ・フロップの入力に結合された第2の入力とを有するマルチプレクサを含む、請求項8記載の集積回路チップ。
【請求項１０】
スキャンチェーンが、クロックを受け取り、さらに、全クロックサイクルよりも少ないクロックサイクルにわたって複数の構成可能な論理ブロックの少なくともいくつかの状態を表すデータを間欠的に出力するように構成されている、請求項5記載の集積回路チップ。
【請求項１１】
集積回路チップのエミュレーション追跡データを圧縮できるように準備する方法において、
集積回路チップのエミュレーション追跡データを受信する段階と、
それぞれの第1のセットの長さがMビットであり、それぞれの第1のセットが、エミュレーション追跡データ内のどこでデルタが起こったかを表す、N個の第1のセットを含む第1のデータを生成する段階；および
それぞれの第2のセットが第1のセットの異なる断面を表す、M個の第2のセットを含む第2のデータを生成する段階とを含む方法。
【請求項１２】
第2のセットを圧縮する段階をさらに含む、請求項11記載の方法。
【請求項１３】
圧縮段階が、それぞれの第2のセットについて、第2のセットが少なくともしきい値数のデルタを表しているかどうかを判定する段階を含む、請求項12記載の方法。
【請求項１４】
圧縮段階が、少なくともしきい値数のデルタを表していない任意の第2のセットに対してのみ実行される、請求項13記載の方法。
【請求項１５】
圧縮段階が、
少なくともいくつかの第2のセットの圧縮データセットを生成する段階であって、少なくとも1つのデルタを表しているが、少なくともしきい値数のデルタは表していない第2のセットに対応する圧縮データセットの部分が第1の所定のフラグを含む段階；および
少なくともしきい値数のデルタを表しているそれぞれの第2のセットに第1の所定のフラグと異なる第2の所定のフラグを追加する段階とを含む、請求項13記載の方法。
【請求項１６】
それぞれの第2のセットについて、第2のセットが0デルタを表しているかどうかを判定し、そうである場合、第1および第2の所定のフラグとは異なる第3の所定のフラグを生成することによって第2のセットを圧縮する段階をさらに含む、請求項15記載の方法。
【請求項１７】
第1のデータを生成する段階が、少なくとも1つの第1のセットに少なくとも1つの定ビットを追加し、それによってそれぞれの第1のセットの長さをMビットにする段階を含む、請求項11記載の方法。
【請求項１８】
少なくともいくつかの第2のセットの圧縮データセットを生成する段階；および
圧縮データセットを時間平均バッファを通じて転送する段階とをさらに含む、請求項11記載の方法。
【請求項１９】
時間平均バッファが、少なくとも3×N×Mビットの深さを有するバッファを含む、請求項18記載の方法。
【請求項２０】
時間平均バッファの出力をメモリに転送する段階をさらに含む、請求項18記載の方法。
【請求項２１】
N > 1である、請求項11記載の方法。
【請求項２２】
M > 1である、請求項11記載の方法。
【請求項２３】
エミュレーションシステムにおいて、
各集積回路チップが、再構成可能な論理を含み、各チップが圧縮エミュレーション追跡データを出力する、複数の集積回路チップ；および
集積回路チップから得た圧縮エミュレーション追跡データを記憶するように構成された記憶装置とを含むエミュレーションシステム。
【請求項２４】
各集積回路チップが特定用途向け集積回路（ASIC）である、請求項23記載のエミュレーションシステム。
【請求項２５】
各集積回路チップが、圧縮エミュレーション追跡データを生成するように構成された圧縮回路と、圧縮エミュレーション追跡データを集積回路チップから所定の最大帯域幅以下で転送するように構成された先入れ先出しバッファとをさらに含む、請求項23記載のエミュレーションシステム。
【請求項２６】
エミュレーションシステムにおいて、
回路設計をエミュレートする手段と、
エミュレーション中に回路設計に関連するエミュレーション追跡データを得る手段；および
エミュレーション追跡データを圧縮する手段とを含むエミュレーションシステム。
【請求項２７】
圧縮エミュレーション追跡データを記憶する手段をさらに含む、請求項26記載のエミュレーションシステム。
【請求項２８】
通信チャネルの一方の側に位置するワークステーションと通信チャネルを介して通信するエミュレーションシステムにおいて、
追跡データを生成するように構成されたエミュレータ；および
エミュレーションリソースに結合され、かつ追跡データを圧縮するように構成された追跡圧縮器とを含み、
エミュレータおよび追跡圧縮器はどちらも通信チャネルの他方の側に位置しているエミュレーションシステム。
【請求項２９】
エミュレータと追跡圧縮器がどちらも、同じ集積回路チップ内に配置される、請求項28記載のエミュレーションシステム。
【請求項３０】
エミュレータが第1の集積回路チップを含み、圧縮器が第2の異なる集積回路チップを含む、請求項28記載のエミュレーションシステム。
【請求項３１】
エミュレーションシステムにおいて、
ハウジングと、
ハウジング内に配置され、追跡データを生成するように構成されたエミュレータ；および
ハウジング内に配置され、エミュレータに結合され、追跡データを圧縮するように構成された追跡圧縮器とを含むエミュレーションシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明の各局面は概して、エミュレーションシステムから得た追跡データを処理する方法および装置に関し、特にこのような追跡データをより管理可能なサイズに圧縮することに関する。
【背景技術】
【０００２】
背景
エミュレーションシステムは通常、各々がデジタル設計の一部をエミュレートする1つまたは複数の集積回路チップを含む。集積回路チップは、フィールド・プログラマブル・ゲート・アレイ（FPGA）などのフィールド・プログラマブル・デバイス（FPD）であってよい。各FPDは、プログラム可能なルーティング・リソース・マトリクスによって相互に接続された1組の再構成可能な論理ブロック（RLB）を含む。代表的なFPGAは、最大で数万個の使用可能なRLBを有する。論理ゲートなどの設計状態要素は、代表的なFPGAが最大で数10万個の設計論理ゲートをエミュレートできるようにRLB上にマップされる。
【０００３】
FPDにおける設計をエミュレートする際、エミュレーションFPD上にマップされる様々な設計状態要素および／または他の設計要素および／または設計信号の状態の追跡データを得ることが望ましい。ユーザ可視性データとも呼ばれるこのような追跡データは、ユーザによって得ることができ、設計をデバッグするのに使用されることが多い。残念なことに、FPDにマップされる状態要素の数が増えるにつれて、追跡データの量も増えていく。たとえば、10万個の状態要素をエミュレートするFPGAは、最大で1クロックサイクル当たり10万ビット、すなわち0.1Mbの追跡データを生成する。この追跡データは、エミュレーションシステムがいくつかの並列したFPGAを組み込む場合にさらに増大する。たとえば、10個の並列したFPGAを有するシステムは、最大で1クロックサイクル当たり1Mbの追跡データを生成する。
【０００４】
エミューレーションを実行するのに通常、数億クロックサイクル以上のような複数のクロックサイクルが必要になることを考えると、対処すべき追跡データの量は大幅に増大する。たとえば、エミュレーションが10億クロックサイクルにわたって実行される場合、エミュレーション中に生成される追跡データの総量は、最大で（10億）×1Mb = 1,000テラビット（Tb）になることもある。したがって、この追跡データをどのように記憶し、転送し、かつ／またはその他の方法で処理すべきかが問題になる。メモリのコストは数年前から削減されているが、それにもかかわらず高額である。大量のメモリはまた、貴重な面積を占有し、追加の電力を必要とする。面積も電力も通常、エミュレーションシステムにおける可用性が限られている。したがって、エミュレーションシステムにおけるメモリの量を制限することが望ましい。
【０００５】
エミュレーションクロックが動作する速度を考慮すると別の問題が生じる。代表的なエミュレーションシステムは1MHz以上でクロックを動作させることができる。たとえば、上記の例におけるクロックが1MHzで動作する場合、生成される追跡データの総帯域幅は最大で毎秒(1Mb)×(1MHz)=1 Tbになることもある。エミュレーションシステムが複数のクロックサイクルにわたって動作するとき、追跡データの帯域幅は、集積回路実装ピン制限、メモリチップサイズ、ネットワーク帯域幅のような、従来の物理的インタフェースの機能を超えることが多い。
【発明の開示】
【０００６】
発明の概要
したがって、無理な追跡データ転送帯域幅要件および／またはデータ記憶要件を必要とせずに有用な量の追跡データを生成することのできるエミュレーションシステムが必要である。したがって、本発明の一局面によれば、エミュレーションシステムから得た追跡データの一部またはすべてを圧縮することができる。本発明の範囲から逸脱せずに任意の適切なデータ圧縮アルゴリズムを使用することができる。このような圧縮は記憶の前に行っても後に行ってもよい。
【０００７】
本発明の他の局面によれば、1つまたは複数のエミュレーションチップの内側の構成可能な論理ブロックから追跡データを受信するようにスキャンチェーンを実施することができ、スキャンチェーンから受信したデータを圧縮することができる。デルタ圧縮を使用する場合、スキャンチェーンはデルタ検出機能を実行することもできる。あるいは、スキャンチェーンの出力を使用してデルタ検出を実行することができる。さらに、スキャンチェーンの内部または外部で1つまたは複数の検出器を実施することができる。
【０００８】
本発明の他の局面によれば、追跡データの圧縮には、複数のデータセットを受信する段階と、組み合わされたデータセットの断面に沿って圧縮を実行する段階とを含めることができる。
【０００９】
本発明のこれらおよびその他の特徴は、例示的な態様についての以下の詳細な説明を検討すると明らかになろう。
【００１０】
本発明の上記の概要と、例示的な態様についての以下の詳細な説明は、特許請求の範囲に関する制限としてではなく一例として含められている添付の図面と一緒に読んだときによりよく理解されよう。
【００１１】
例示的な態様の詳細な説明
例示的なエミュレーション環境
図1を参照すると、エミュレーション・追跡記憶システム100の例示的な態様は、エミュレータ101、データ圧縮器102、および／または記憶装置103を機能として含んでよい。語「エミュレータ」は、本明細書では広義に使用されており、純粋なハードウェアエミュレーションを実行するシステムだけでなくハードウェアエミュレーションとソフトウェアエミュレーションの組合せ、ならびにハードウェア加速および／またはコシミュレーションを実行するシステムも含んでいる。図2に示されているように、エミュレータ101は、エミュレートすべき設計を具体化するように再構成可能な、FPDのような再構成可能な論理（本明細書では「エミュレーションチップ」または「EC」と呼ぶ）を有する1つまたは複数の集積回路チップ201を含んでよい。FPDは、FPGAまたは他の同様の再構成可能な論理デバイスを含んでよい。エミュレータ101は、他の集積回路チップおよび／または他の回路を含んでもよい。エミュレーションチップ201は特定用途向け集積回路（ASIC）であってよい。各エミュレーションチップ201は、切換え回路202を介して選択的に相互接続することができる。切換え回路202は、エミュレーションチップ201の一部であってよく、および／またはエミュレーションチップ201から離れているがエミュレーションチップ201に接続することができる。切換え回路202は、クロスバー、部分クロスバー、マルチプレクサのような、1つまたは複数のスイッチ、ルータなどを含んでよい。一般に、各エミュレーションチップ201は、各論理ブロックが低レベルまたは高レベル論理機能をエミュレートするように再構成できる多数の再構成可能な論理ブロック（RLB）で設計することができる。エミュレーションチップ201と切換え回路202は共に、特定の論理設計をエミュレートする。設計が通常そうであるように十分に大きい場合、その設計を様々なエミュレーションチップ201間に位置させることができる。任意の数のエミュレーションチップ201および切換え回路202を組み合わせて使用して特定の論理構成をエミュレートすることができる。
【００１２】
エミュレータ101で設計を具体化する際、エミュレータ101は、その設計を促進する設計入力に基づいて設計をエミュレートすることができる。設計入力は、複数のクロックサイクルにわたる複数の互いに並列した入力を含んでよい。各クロックサイクルごとの1組の設計入力を設計入力セットと呼ぶこともある。データセットは、ベクトルまたは他の構成として配置された1ビットまたは複数ビットのデータを含んでよい。設計入力セットは、1つまたは複数のエミュレーションチップ201に入力することができる。エミュレーション時には、エミュレータ101は、設計入力セットに応答して、多数の連続的に変化する内部状態と、設計出力セットとも呼ばれる複数の設計出力とを生成することができる。内部状態は、設計内のノードの状態を表すことができる。たとえば、内部状態は、1つまたは複数のRLBの状態と、個々のエミュレーションチップ201の入力および出力の状態とを含んでよい。エミュレーションチップ201の入力および出力はチップの内部に位置していないが、エミュレート中の設計の内部に位置する状態とみなされる。したがって、エミュレーションチップ201の入力および出力は、本明細書では内部状態である。これらの内部状態では、エミュレータ101および／またはエミュレータの1つまたは複数のエミュレーションチップ201によって抽出し出力することができる。本明細書では「追跡データ」とも呼ばれるこのような内部状態データの抽出は、各エミュレーションチップ201内に配置された1つまたは複数のスキャンチェーンを使用することなどにより、追跡回路によって実行することができる。
【００１３】
再び図1を参照すると、データ圧縮器102は、追跡データ、設計入力、および／または設計出力の一部またはすべてを圧縮することができる。任意のデータ圧縮形式を使用してよい。しかし、デルタ圧縮は、特に追跡データにうまく働くことが分かっている。この理由は、一般に、多くの内部状態があるクロックサイクルから次のクロックサイクルまでの間変化しないと考えられることである。設計入力および設計出力にも同じことが言え、特に、設計の、ときどき非活動状態になる部分に当てはまる。たとえば、設計が携帯電話用の論理である場合、電話をかけていないときは（クロックを除く）設計の大部分が非活動状態になる可能性が高い。必ずしもすべての設計がこのような特性を有するとは限らないが、多くの設計がそうであることが分かっている。しかし、本発明は、内部状態、設計入力、または設計出力が何回変化するかにかかわらず任意の設計に使用することができる。  
【００１４】
追跡データ圧縮器102は、エミュレータ101の物理的な一部であっても、物理的に分離されていてもよい。たとえば、追跡データ圧縮器102は、以下に詳しく論じるように、エミュレータ101内の1つまたは複数のエミュレーションチップ201内に一体化することができる。
【００１５】
エミュレータ101が実際の設計をエミュレートしている間に圧縮の一部またはすべてをリアルタイムに実行することができる。したがって、エミュレータ101がエミュレートしている間、追跡データ、設計データ、および／または設計出力の一部またはすべてを記憶装置103に圧縮形式で記憶しておくことができる。これによって、必要な記憶装置103の量が少なくなる。しかし、特に記憶装置103のサイズが重大でない場合、圧縮をリアルタイムに行う必要はない。たとえば、データを非圧縮形式または部分圧縮形式で記憶し、後で、記憶されたデータを圧縮形式で他の装置に伝送できるようにデータ圧縮器102に転送することが望ましい。図3は、追跡データ、設計入力、および／または設計出力が、圧縮器102によって圧縮される前に記憶装置103に送信される他の構成の機能を示している。いくつかの態様では、図2および3の構成は、エミュレータ101を圧縮器102と記憶装置103の両方に直接結合できるように組み合わせることができる。
【００１６】
図14を参照すると、エミュレーションシステム100は、少なくとも1つの通信チャネル1402を介して少なくとも1つのワークステーション1403と通信する少なくとも1つの通信インタフェース1401をさらに含んでよい。ワークステーション1403は、ユーザの設計に基づいて構成符号を生成するアプリケーションソフトウェアを実行することができる。構成符号は、通信チャネル1402上でインタフェース1401に送信され、次いでエミュレータ101に送信される。エミュレータ101は、設計を具体化するように、構成符号に従ってエミュレータ101自体を再構成することができる。エミュレータ101が実行され、それによって設計がエミュレートされると、生追跡データおよび／または圧縮追跡データを記憶装置103に転送することができる。ボックスで指定された要素100は、機能分割線とみなしても、いくつかまたはすべての要素101、102、103、1401を含む物理的ハウジングであってもよい。要素100が物理的ハウジングである場合、通信チャネル1402は、ハウジングから延び、かつハウジングから物理的に分離されたワークステーション1403に接続されたケーブルなどの導電体として具体化することができる。
【００１７】
生追跡データおよび／または圧縮追跡データはさらに、通信チャネル1402を介してインタフェース1401に転送すると共にワークステーション1403に転送することができる。エミュレーションシステム100のいくつかまたはすべての要素を、相互に通信することのできる1つまたは複数の回路板上に配置することができる。したがって、追跡データの圧縮は、ワークステーション1403の外部で行ってよく、エミュレーションの実行中にオンラインで行っても、エミュレーションの実行後にオフラインで行ってもよい。たとえば、エミュレーションシステム100は、各回路板が少なくとも1つのエミュレーションチップ201とエミュレーションチップ201に結合された少なくとも1つの圧縮器102とを含む1つまたは複数の回路板を含んでよい。このような態様では、圧縮器102は、回路板上の集積回路チップであるが、エミュレーションチップ201から分離されたチップであってよい。他の態様では、回路板上のエミュレーションチップ201はそれぞれ、各エミュレーションチップ201内に圧縮器102を含んでよい。言い換えれば、エミュレータ101と圧縮器102は共に、同じ集積回路チップ内に位置することができる。このような態様では、エミュレーションチップ201はASICであってよい。さらに、記憶装置103は、エミュレーションシステム100内（たとえば、エミュレーションチップおよび圧縮器102と同じ回路上）に位置しても、エミュレーションシステム100の外側に位置しかつエミュレーションシステムの物理的な一部であってもよい。あるいは、追跡データの圧縮は、ワークステーション1403の外部で行ってよく、エミュレーションの実行中にオンラインで行っても、エミュレーションの実行後にオフラインで行ってもよい。
【００１８】
図4を参照すると、例示的なエミュレーションシステム100の詳細図が示されている。各エミュレーションチップ201は、前述のように1組または複数組のRLB 401を含んでよい。1組のRLB 401は、RLB 401の内部状態を得るための複数のスキャンチェーンを含んでよい。各スキャンチェーンは、最大で少なくともM個のRLBの内部状態を得るように構成可能な長さのチェーンであってよい（Mは、1であっても1より大きくてもよい）。
【００１９】
スキャンチェーンの出力および／またはエミュレーションチップ201への入力は、スキャンチェーンおよび／またはチップ入力から抽出されたデータをアセンブルしおよび／または符号化して、圧縮に備えて必要な形式にするインタフェース402に結合することができる。たとえば、スキャンチェーンおよび／またはチップ入力は共に、各々の長さがMビットのN個の入力データセットをインタフェース402に直接または間接的に与えることができる（Nは1であっても1より大きくてもよい）。他の例では、エミュレーションチップ201への入力のみが圧縮向けに準備される。いくつかの態様では、各々がN個の入力データセットのうちの異なる1つのデータセットを与えるN個のスキャンチェーンがあってよい。インタフェース402は、それぞれが入力データセットの異なる断面である出力データセットが得られるように入力データセットをリアセンブルすることができる。言い換えれば、以下に詳しく説明するように、圧縮すべき追跡データ出力は、各々の長さがNビットのM個のセットとして構成することができる。
【００２０】
インタフェース402は、さらにスキャンチェーンおよび／またはエミュレーションチップ入力から受信されたデータを符号化することができる。デルタ圧縮を使用する場合、このような符号化は、あるクロックサイクルから次のクロックサイクルまでの追跡データの変化すなわちデルタを検出する段階と、このようなデルタの位置を示すデータを出力する段階とを含んでよい。たとえば、符号化された追跡データは、追跡データの変更を受けた各ビット位置に対応する1に設定されたビットを含んでよい。
【００２１】
インタフェース402は、RLB 401の一部でありかつRLB 401によって具体化することができ、あるいは別個の回路であってもよい。インタフェース402は、デルタ圧縮器403a〜403zのような1つまたは複数の圧縮器に出力データセットを供給することができる。各デルタ圧縮器403a〜403zは、1クロックサイクル当たりNビットの追跡データを受信することができ、データを圧縮することができ、圧縮されたデータを出力することができる。いくつかの態様では、集積回路チップ201を2分の1や象限のような1つまたは複数の部分に論理的に分割することができる。各部分は、1クロックサイクル当たりNビットの追跡データのサブセットを生成することができる。たとえば、集積回路チップ201を各象限に論理的に分割する場合、各象限は1クロックサイクル当たりN/4ビットの追跡データを生成することができる。各象限または他の部分は同じデルタ圧縮器を共有することができる。たとえば、各象限から得たN/4ビットのデータを同じ1つまたは複数のデルタ圧縮器403a〜403zに多重化することができる。
【００２２】
圧縮されたデータは、先入れ先出し（FIFO）バッファおよび／またはランダム・アクセス・メモリ（RAM）を含んでよい時間平均バッファ405によって受信することができる。デルタ圧縮器403a〜403zの出力は可変帯域幅を有すると考えるのが適当である。これは、実現される圧縮の量が一般に、圧縮すべきデータの内容に依存するからである。したがって、時間平均バッファ405は、時間平均バッファ405への入力が可変帯域幅を有するにもかかわらず、時間平均バッファ405が一定の帯域幅または最大帯域幅以下の帯域幅でデータを出力するように構成することができる。時間平均バッファ405からのデータを次に、2倍データ速度（DDR）コントローラなどの記憶装置コントローラ405に読み込むことができる。バッファ405がオーバフローした場合、圧縮を回避することができ、その代わりに、1クロックサイクルまたは複数クロックサイクルにわたって、あるいはバッファ405が回復するまで最初の追跡データのスナップショットを記憶しておくことができる。いずれの場合も、バッファ405からの圧縮データ出力（またはインタフェース402からの未圧縮追跡データ）をエミュレーションチップ201の1本または複数本のピンを通して記憶装置コントローラ406に転送し、次いで記憶装置103上に転送することができる。
【００２３】
1つの時間平均バッファ405（たとえば、時間平均バッファ405a）の例示的な態様が図11に示されている。時間平均バッファ405は、クロスバー1101などの切換え回路を含んでよく、デルタ検出器（たとえば、デルタ検出器403a）からいくつかまたはすべての出力を受信することができる。クロスバー1101は(N+F)×2(N+F)クロスバーであってよい（Fは、後述のフラグのような任意のオーバヘッドビットの長さである）。しかし、他のサイズの切換え回路を使用してよい。時間平均バッファは、各々の長さが少なくともN+Fビットである2つのバッファ1102a、1102bをさらに含んでよい。他の態様では、2つのバッファ1102a、1102bを、長さが2(N+F)ビットの単一のバッファとして組み合わせることができる。本議論は、2つのバッファ1102a、1102bに関するものである。単一の組合せバッファを使用する場合、バッファ1102aについての本議論は、組合せバッファの第1の半分に当てはまり、バッファ1102bについての本議論は組合せバッファの第2の半分に当てはまる。
【００２４】
各バッファ1102a、1102bは、この態様では幅が1ビットである。ただし、各バッファ1102a、1102bが合計で少なくとも(N+F)ビットを記憶するかぎり他の幅を使用してよい。各バッファ1102a、1102bは、複数の少なくとも(N+F)個の入力をさらに有し、合計で、各々がクロスバー1101の対応する異なる出力に結合された少なくとも2(N+F)個の入力を有してよい。したがって、たとえば、クロスバー1101とバッファ1102a、1102bとの間に少なくとも2(N+F)個の並列接続があってよい。
【００２５】
時間平均バッファ405は、マルチプレクサ1103または他の切換え回路と、先入れ先出し（FIFO）バッファなどのバッファ1104と、コントローラ1105とをさらに含んでよい。時間平均バッファ405は、クロスバー1101、バッファ1102a、1102b、マルチプレクサ1103、および／またはバッファ1104の動作および／または構成を制御するコントローラ1105をさらに含んでよい。
【００２６】
動作時には、デルタ圧縮器403からの圧縮データ1107をクロスバー1101によって受信することができる。データ1107はセット間で異なるサイズを有してよい。たとえば、第1のデータセット1107は長さが100ビットであってよく、次のデータセット1107は長さが237ビットであってよい。したがって、データ1107は、データ1107が圧縮されるかどうかおよびデータ1107がどのように圧縮されるかに応じて様々であってよい可変帯域幅を有する。特定の1組のデータ1107のサイズが大きい場合（着信データ1107の長さはN+Fビットを超えないと考えられる）、入力帯域幅に大きなスパイクが生じる。
【００２７】
コントローラ1105は、圧縮データ1107を受信し、圧縮データ1107のサイズを判定することもできる。コントローラ1105は、データ1107のサイズに応じてデータ1107をクロスバー1101のある出力範囲に送るようにクロスバー1101を動的に構成することができる。この他に、またはこの代わりに、出力の範囲は、バッファ1102aおよび／または1102bにどのくらいのデータ（または読み取られていないデータ）がすでに記憶されているかに依存してもよい。「読み取られていないデータ」は、まだバッファ1102aまたは1102bからマルチプレクサ1103および／またはバッファ1104に読み取られていないデータを指す。一般に、コントローラ1105は、一方または両方のバッファ1102a、1102bの、すでに記憶されている読み取られていないデータが終了する点にデータを書き込むように、すなわち、既存のデータ1106の上に新しいデータ1107を積み重ねることによって、クロスバー1101を構成することができる。コントローラ1105は、新しいデータがバッファ1102a、1102bに書き込まれるときに更新されるポインタを使用することによって書き込まれた最後の点を追跡することができる。
【００２８】
たとえば、クロスバー1101が258×516クロスバー（すなわち、258個の入力および516個の出力）であり、かつバッファ1102aおよび1102bがそれぞれ、各ビットがアドレス0〜257を有する258×1ビットであると仮定する。したがって、クロスバー1101とバッファ1102a、1102bとの間に合計で258×2＝516個の並列接続がある。記憶されている読み取られていないデータ1106の長さが150ビットであり、着信データ1107の長さが200ビットであるとさらに仮定する。したがって、記憶されている読み取られていないデータ1106をバッファ1102b内のアドレス0〜149に記憶することができる。新しい着信データ1107は、次のアドレス、すなわち150から始まるバッファ1102に並行して書き込まれるようにコントローラ1105によって制御しクロスバー1101によって切り換えることができる。着信データ1107が合計で200ビットであり、バッファ1102bに残された残りの空間が108ビットだけであるので、バッファ1102bは満杯になり、アドレス0〜149がデータ1106を含み、アドレス150〜257がデータ1107を含む。データ1107の残りの部分は、バッファ1102aのアドレス0〜106に並行して書き込まれることによってバッファ1102aにオーバフローする。
【００２９】
記憶されている読み取られていないデータ上に新しい着信データ1107を積み重ねるこのプロセスを繰り返すことができる。一方のバッファ1102a、1102bが読み取られていないデータで一杯になったことに応じて、コントローラ1105はそのバッファに、そこに記憶されている（たとえば、アドレス0からN+Fに記憶されている）データコンテント全体を並行してマルチプレクサ1103に読み出させることができる。一方のバッファ1102a、1102bからデータが読み出されると、そのバッファ内のデータはその後、読み取られていないデータではなく読み取られたデータとみなすことができる。あるいは、そのバッファ内のデータを消去することができる。バッファ1102aが満杯になると、あらゆるオーバフローがバッファ1102bの1番下（アドレス0）から書き込まれる。したがって、バッファ1102a、1102bは実際上、まずバッファ1102bの1番下から書き込まれ、次いでバッファ1102bの1番上（アドレスN+F）まで書き込まれ、次に、バッファ1102aの1番下から上に書き込まれていき、次いでバッファ1102aの1番上まで書き込まれ、次にバッファ1102bの1番下まで戻る循環バッファを形成する。
【００３０】
コントローラ1105は、バッファ1104に転送されるバッファ1102aからのデータまたはバッファ1102bからのデータを受信するようにマルチプレクサ1103を動的に制御する。データは、バッファ1102a、1102bの一方または他方から、その特定のバッファ1102a、1102bが読み取られていないデータで一杯になったときにのみ読み出されるので、マルチプレクサ1103に読み込まれ、最終的にバッファ1104に読み込まれるデータの帯域幅はより安定した帯域幅である。図示の例では、バッファ1104に読み込まれるデータは常にN+Fビットチャンク状であると考えられる。一般に、バッファ1104に読み込まれるデータは、バッファ1102a、1102bの一方のサイズに等しいチャンク状である。しかし、一方のバッファ1102a、1102bを満杯にするのにかかる時間は様々な着信データセット1107の帯域幅の関数であるので、バッファ1102a、1102bのそれぞれの読取り間の遅延は可変である。したがって、一方のバッファ1102a、1102bが読み取られている間バッファ1104への帯域幅は一定であるが、バッファ1104への経時的な平均帯域幅は可変である。
【００３１】
記憶装置コントローラ405は、着信データ1107および／またはバッファ1104に読み込まれるデータの帯域幅から独立した帯域幅でバッファ1104から読出しを行うことができる。長期間にわたってバッファ1104から読み出されるデータの平均帯域幅は、着信データ1107の平均帯域幅に等しい。しかし、バッファ1104に記憶されているデータは、1読取りサイクル当たりN+Fビットよりも低いレベルでピークに達するより可変性の低い帯域幅で読み出すことができる。いくつかの態様では、バッファ1104に記憶されているデータを所定の一定の帯域幅で読み出すことができる。他の態様では、バッファ1104に記憶されているデータを、着信圧縮データ1107の考えられるピーク帯域幅よりも低い所定の最大帯域幅を超えない帯域幅で読み出すことができる。追跡データをオフラインで圧縮する場合、外部メモリの帯域幅は重大ではない。しかし、この種の圧縮およびバッファ機能は、記憶空間および／またはユーザへの伝送時間を節約することができる。
【００３２】
このような時間平均バッファ405は一般に、デルタ圧縮が使用され、バッファ1104の深さ（すなわち、総記憶容量）が1クロックサイクル当たり追跡データ量の約3倍以上である場合にオーバフローしないことが分かっている。たとえば、デルタ圧縮器に各々の長さが16ビットの256個の追跡セットを入力する場合、時間平均バッファ405の深さは約(3×16×256) = 12,288ビット以上であってよい。時間平均バッファ405がオーバフローした場合、圧縮を回避することができ、その代わりに、1クロックサイクルまたは複数クロックサイクルにわたって、あるいは時間平均バッファ405が回復するまで最初の追跡データのスナップショットを記憶しておくことができる。いずれの場合も、時間平均バッファ405からの圧縮データ出力（またはインタフェース402からの未圧縮追跡データ）をエミュレーションチップ201の1本または複数本のピンを通して2倍データ速度（DDR）コントローラなどの記憶装置コントローラ406に転送し、次いで記憶装置103上に転送することができる。
【００３３】
N+Fおよび2(N+F)は必ずしも2の累乗ではないので、クロスバーのサイズを厳密に(N+F)×2(N+F)に設計するのは非経済的である。同じ理由で、バッファ1102a、1102bのサイズを厳密に(N+F)ビットに設計するのも非経済的である場合がある。同じ理由で、バッファ1104を1クロックサイクル当たり追跡データ量の厳密に3倍に設計するのは非経済的である場合がある。したがって、これらのデバイスのどれかを2の次に高い累乗の容量を有するように設計しても、すべてのデバイスをそのように設計してもよい。たとえば、N+F = 258である場合、バッファ1102a、1102bはそれぞれ、512×1のサイズのバッファであってよい。これは、258の次の2の累乗が512であるからである。コストを削減する他の方法は、これらのデバイスのどれかまたはすべてを最も近い8の倍数に丸める方法である。したがって、たとえば、N+F = 258である場合、バッファ1102a、1102bはそれぞれ、264×1のサイズのバッファであってよい。これは、258の次の8の倍数が264であるからである。この場合のように経済上の理由で余分なリソースを設ける場合、余分なリソースを無視しても、リソースにダミービットを充填してもよい。
【００３４】
図4は、エミュレーションチップ201自体内に配置されるエミュレーションシステム100のある要素を示しているが、本発明の範囲から逸脱せずに1つまたは複数の要素をエミュレーションチップ201の外側に配置してよい。さらに、記憶装置103はエミュレーションチップ201上に配置しても、エミュレーションチップ201外に配置してもよい。
【００３５】
デルタ検出
デルタ圧縮または他の同様の圧縮を使用する場合、ビット間でデータがいつ変更されたかを検出すると有用である。さらに、このような検出を迅速に、場合によっては、エミュレータ101がエミュレートしている間にリアルタイムに行うのが望ましい。図5は、追跡データ（または設計入力および／または設計出力のような検出器に供給される他の任意のデータ）で変化、すなわちデルタが起こったかどうかを検出する例示的なデルタ検出器403を示している。本例では、追跡データのデルタ検出について論じるが、この議論はデルタ検出器403に適用されるあらゆるデータに当てはまる。デルタ検出器403は、エミュレーションチップ内のスキャンチェーンの出力に結合し、スキャンチェーンから追跡データ（および／または他のデータ）を受信することができる。したがって、デルタ検出器403はインタフェース402の一部であってよい。追跡データは、長さMのN個の並列セット（言い換えると、各々の幅がNビットのM個のデータポイントのストリームまたはその他の集合）としてデルタ検出器403に送信することができる。Nは1であっても、1より大きくてもよい。追跡データは、フリップ・フロップ501、レジスタ、バッファおよび／または他の一時記憶要素（あるいはN個の並列一時記憶要素）によって受信することができる。次に追跡データをメモリ502に転送することができる。メモリ502は、デュアル・ポート・メモリであってもシングル・ポート・メモリであってもよく、好ましくは、1ユーザ・クロック・サイクルの追跡セット全体を記憶できるように少なくとも(M×N)ビットを記憶することができる。ただし、メモリ502は任意のサイズであってよい。メモリ502は次いで、記憶されている追跡データを、各追跡セットが、N個の並列した排他的論理和（XOR）論理ゲート503のうちの1つに入力される、N個の追跡セットとして読み出すことができる。
【００３６】
各追跡セットが1つのXOR論理ゲート503に入力されるたびに、時間tにおける対応する追跡セット（たとえば、時間tにおける特定のユーザ・クロック・サイクルに対応する）をメモリ502から読み出し、1ユーザ・クロック・サイクル遅らせて（すなわち、t-1）同じXOR論理ゲート503に入力することができる。言い換えれば、1つの追跡セットをTn(t)（nは設定された数であり、tは時間tにおける特定のサンプル番号である）と示す場合、このセットについての対応する1つのXOR論理ゲートへの入力はTn(t)およびTn(t-1)になる。したがって、対応するXOR論理ゲートの出力は、Tn(t)とTn(t-1)との差である。この差を本明細書では、追跡デルタセットTDn(t)の集合の形をした「追跡デルタデータ」と呼ぶ。対応するXOR論理ゲート503への2つの入力が等しい場合、そのXOR論理ゲート503の出力TDn(t)は0である。2つの入力が等しくない場合、対応するXOR論理ゲート503の出力TDn(t)は1である。もちろん、XOR論理ゲート503の出力を反転させるか、または他の変形態様を使用することによって、追跡データが変更されているときには0を出力し、変更されていないときには1を出力するデルタ検出器を形成することができる。追跡デルタセットデータTDn(t)の特定の内容は、それが、時間的に前のサンプルについての同じ追跡セットTn(t-1)から、対応する着信追跡セットTn(t)が変更されているかどうかを示すかぎり重要ではない。いずれの場合も、実際上、前の追跡データビットから追跡データビットが変更されているかどうかを検出し、それを示す信号を出力するデルタ検出器が形成されている。
【００３７】
複数の並列したXOR論理ゲート503の出力TDn(t)をマルチプレクサ504を使用して多重化し、追跡デルタデータTD(t)の1つまたは複数の時間多重化ビットストリームを形成することができる。マルチプレクサ504の出力をフリップ・フロップ505、レジスタ、バッファ、および／または他の一時記憶要素の入力に供給することができる。マルチプレクサ504の出力としては、バイパス選択信号に従って任意の時間に追跡デルタデータTD(t)または最初の追跡データT(t)を選択することができる。このことは、本明細書で詳しく論じるように生追跡データのスナップショットを生成するように最初の追跡データT(t)またはその一部を間欠的に（たとえば、周期的または非周期的に）出力することが望ましい場合に有用である。
【００３８】
図6を参照すると、他の例示的な態様によれば、デルタ検出器をエミュレーションチップの1つまたは複数のスキャンチェーンに組み込むことができる。スキャンチェーン600は、直列に結合された1つまたは複数のスキャンチェーン部分（本明細書では「モジュール」と呼ぶこともある）を含んでよい。各モジュールは、異なる再構成可能論理ブロックRLBA、RLBBなど、またはその一部の出力を受信することができる。例示的なモジュールAは、1つもしくは複数のバッファBUF 1A、BUF 2A、1つもしくは複数のマルチプレクサMUX 1A、MUX 2A、MUX 3A、1つもしくは複数のフリップ・フロップFF 1A、FF 2A、および／または1つまたは複数のXOR論理ゲートXOR Aを含んでよい。モジュールBも、1つもしくは複数のバッファBUF 1B、1つもしくは複数のマルチプレクサMUX 1B、MUX 2B、MUX 3B、1つもしくは複数のフリップ・フロップFF 1B、FF 2B、および／または1つまたは複数のXOR論理ゲートXOR Bを含んでよい。図6には示されていないが、スキャンチェーン600は、たとえば合計で32個以上のモジュールのような追加的なモジュールを含んでよい。
【００３９】
このパラグラフの議論はモジュールAに関するものであるが、スキャンチェーン600の他のモジュールにも同様に当てはまる。対応するRLBAは、マルチプレクサMUX 1Aによって受信される追跡データを生成することができる。マルチプレクサMUX 1Aが信号SEL 1に従ってどのように構成されるかに応じて、マルチプレクサMUX 1Aは追跡データをフリップ・フロップFF 1Aを通してフリップ・フロップFF 2Aに転送することができる。追跡データを直接XOR論理ゲートXOR Aの第1の入力に転送することができる。フリップ・フロップFF 2Aを通過する追跡データは、1クロックサイクルだけ遅延させ、次いでXOR論理ゲートXOR Aの第2の入力に転送することができる。したがって、図5のデルタ検出器と同様に、XOR論理ゲートXOR Aは、特定のRLBの追跡データが1クロックサイクルの間に変更された場合には1に設定されたバイナリビットを出力し、追跡データが変更されていない場合には0を出力する。マルチプレクサMUX 2Aは、それが信号SEL3に従ってどのように構成されているかに応じて、XOR論理ゲートXOR Aの出力をマルチプレクサMUX 3Aの入力に転送することができる。マルチプレクサMUX 3Aは、それが信号SELAに従ってどのように構成されているかに応じて、XOR論理ゲートXOR Aの出力を次のモジュールBの入力バッファBUF 1Bに転送することができる。
【００４０】
様々なSEL信号は、この例示的な態様では以下のように動作する。SEL1は、マルチプレクサMUX 1A、MUX 1BがそれぞれのRLBからの追跡データまたは前のモジュールからのデータを通過させるかどうかを決定する。SEL2は、フリップ・フロップFF1A、FF1Bがイネーブルされているかどうかを決定する。SEL3は、マルチプレクサMUX 2A、MUX 2Bが、最初の追跡データ、またはXOR論理ゲートXOR A、XOR Bから出力された追跡データを通過させるかどうかを決定する。SEL3は、最初の追跡データをスキャンチェーン600によって全クロックサイクル未満のクロックサイクルで出力するのを可能にするように間欠的に（周期的または非周期的に）選択することができる。たとえば、最初の追跡データをスキャンチェーン600から1000クロックサイクルごとに出力することができる。SELA、SELBは、それぞれのマルチプレクサMUX 3A、MUX 3Bが前のモジュールまたはそれぞれのマルチプレクサ2A、2Bの出力からのデータを通過させるかどうかを決定する。スキャンチェーン600は、同期を維持する1つまたは複数のクロック信号をさらに受信することができ、クロック信号に応答してRLBの状態を読み取り、かつ／またはデータを出力することができる。
【００４１】
前述のように、デルタ検出器を用いて追跡データ、設計入力、および／または設計出力などのデータのデルタを検出することができる。デルタ検出器は、入力データにおいてデルタがどこに位置するかを示す1つまたは複数の信号を出力することができる。このような表示は、デルタが検出された場合に1に設定されたビットを出力し、デルタが検出されない場合に0に設定されたビットを出力する形態をとることができる。あるいは、0に設定されたビットを使用してデルタを示すことができ、1に設定されたビットを使用して、デルタがないことを示すことができる。いずれの場合も、この時点で、検出されたデルタの数を数え、かつ／または検出されたデルタの位置に関連するアドレスを生成することが望ましい。以下に詳しく説明するように、デルタカウントおよびデルタアドレスを使用して圧縮を助けることができる。
【００４２】
図8を参照すると、デルタ検出器403または600の出力からすでに検出されているデルタのアドレスを生成する例示的な1組の「イベント検出器」801（または単一のイベント検出器）が示されている。本明細書の例示的なイベント検出器は、1に設定されたビットを検出するが、この代わりに、イベント検出器を、0に設定されたビットまたは他の任意のイベントを検出するように容易に構成することができる。一般に、イベントは、デルタ検出器によって検出されるデルタに関連するビットまたはビットパターンである。例示のみのために、本明細書では、イベント検出器801が1に設定されたビットを検出すると仮定されている。各イベント検出器801は、それが検出した1に設定されたビットのアドレスを出力する。たとえば、入力セットがN = 256ビットである場合、各イベント検出器801は、各々が8ビットを有する32個のスライスのような入力セットのそれぞれの異なるスライスを受信することができる。したがって、各イベント検出器801は、1に設定された入力セットの対応するスライス内の各ビット位置に対応する3ビット・サブアドレスを生成することができる。したがって、たとえば、入力部分が[00100001]であり、ビット位置が0から7まで連続している場合、この入力部分を受信したイベント検出器801は、[011]（ビット位置3）および[111]（ビット位置7）のサブアドレスを出力することができる。
【００４３】
イベント検出器801によって生成されたサブアドレスをそれぞれ、さらに一定の値だけオフセットして（802）完全なアドレスを生成することができる。たとえば、3ビット・サブアドレスを8ビット入力セットに使用する場合、各サブアドレスに1ビットまたは複数ビットを追加し、アドレスのビットの総数を、すべてのM個のグローバル入力セットからビットを一意に識別するのに十分な数のビットにすることができる。したがって、各オフセット802は異なる一定の1組のビットを追加することができる。たとえば、第1のオフセットは、入力中のサブアドレスが[0 0 1]である場合に、結果として得られる一意のアドレスが[0 0 0 0 0 0 0 1]になるように、受信されたすべてのサブアドレスにビット[0 0 0 0 0]を追加することができる。他のオフセットは、入力中のサブアドレスが[0 1 0]である場合に、結果として得られる一意のアドレスが[0 1 0 0 0 0 1 0]になるように、受信されたすべてのサブアドレスにビット[0 1 0 0 0]を追加することができる。オフセット802によって出力されるアドレスは好ましくは、N個のビット位置を一意に識別するのに十分なビットを有する。たとえば、N = 256である場合、各アドレスは好ましくは、256個の可能なビット位置を考慮して長さが少なくとも8ビットである。完全なアドレスが生成された後、アドレスを必要に応じて1つまたは複数のビットストリームにマージ（たとえば、多重化解除）する（803）ことができる。以下に詳しく説明するように、これらのグローバルアドレスを使用して圧縮を助けることができる。
【００４４】
図12に示されている他の態様によれば、単一のイベント検出器1201を比較的多数のビットに並行して使用することができる。この例では、イベント検出器1201は、256ビットを並行して処理し、図8の803の出力と同じ出力を生成することができる。
【００４５】
イベント検出器801およびイベント検出器1201は様々な方法で構成することができる。たとえば、イベント検出器801、1201は完全なクロスバーとして構成することも、部分クロスバー（たとえば、シストリックイベント検出器）として構成することもできる。イベント検出器801、1201を完全なクロスバーとして構成する場合、完全なクロスバーは複数のマルチプレクサ層を含んでよい。各マルチプレクサは、1に設定された入力セットビットのうちの1つを処理することができ、1に設定されたビットのアドレスを出力することができる。
【００４６】
完全クロスバー構成は、イベントを検出する比較的簡単な手法を実現するが、常に最も効率的な構成とは限らない。この代わりに、シストリック構成、すなわち部分クロスバーを使用することができる。図13を参照すると、イベント検出器1201は、部分クロスバーとして構成することができ、2:1マルチプレクサのような複数のマルチプレクサ1302を含んでよい。レジスタ1301または他のデータ記憶装置は、入力セットVを保持することができる。図示の態様では、セットVは[1 0 0 0]になる。入力セットVのサブアドレスはマルチプレクサ1302のネットワークを通じて転送することができる。さらにマルチプレクサ1302の制御コマンドを生成するコマンドマトリックス1303に入力セットVを転送することができる。マルチプレクサ1302は必要に応じて一連の層M0、M1、M2などとして配置することができる。一般に、(Vの幅) - 1層があってよい。マルチプレクサ1302は、セットVの異なるサブアドレスに関連付けることのできる一連の行として配置することができる。
【００４７】
図示の態様では、最悪ケースパスになる3つのマルチプレクサ層M0〜M2がある。さらに、図示の態様では、サブアドレス[0 0]、[0 1]、および[1 0]はそれぞれ、M0層内の異なるマルチプレクサに結合されている。この例のサブアドレス[1 1]は、マルチプレクサ行には関連付けられていない。たとえば、Vの幅が8ビットである場合、最悪ケースパスはマルチプレクサ1302の7つの層M0〜M6になる。
【００４８】
各マルチプレクサ1302は、受信されたサブアドレスを転送するかまたはサブアドレスを異なる行に切り換えるように構成することができる。図13の太い線のパスは、例示的な本態様でサブアドレス[1 1]がとることのできるパスを示している。パスがこのようになるのは、セットVが、1に設定された単一のビットをサブアドレス[1 1]に含んでいるからである。したがって、1（または検出すべきイベントに応じて0）に設定されたビットのサブアドレスは、図13において、それ以上進めなくなるまで1行ずつ上向きに進んでいく。マルチプレクサ1302は最終的に、太い線のパスで示されているように、1に設定されたビットのサブアドレスを出力することができる。
【００４９】
サブアドレスは、マルチプレクサ1302によって切り換えられた後（この例では、1に設定されたV中のビットに対応するサブアドレス[1 1]）、レジスタ1306または他の記憶装置に記憶することができる。データがマルチプレクサ1302間を進む間、入力セットVを、V中の各ビットを加算する（この場合、和は1に等しい）加算器1304に転送することもできる。加算器1304の結果は、Vが圧縮可能であるかどうかを示すヘッダを算出する論理1305に転送することができる。この判定は、加算器1304の結果がしきい値数よりも小さいかどうかに基づいて行うことができる。本例では、論理1305は[1 0]などのヘッダを生成することができる。ヘッダとレジスタ1306に記憶されているデータとを組み合わせて同じまたは異なるレジスタ1307に格納し、最上位ビットから最下位ビットまでを[1 0 1 1]とすることができる。
【００５０】
以下の表は、Vの幅が8ビットであるより大きな例示的なケースを示している。特に、表1は、最上位ビットV7から最下位ビットV0までがV = [1 1 0 0 0 0 1 0]である例を示しており、マルチプレクサ層M0〜M6を通るデータの流れを示している。表2〜8は、様々なマルチプレクサを動作させるコマンドがどのように生成されるかを示している。たとえば、サブアドレス行000および層M0におけるマルチプレクサは、V0'とV1の論理組合せに基づくコマンドL00を受信することができる（V0' = NOT(V0)）。サブアドレス行001および層M1におけるマルチプレクサは、V0と、コマンドL00と、サブアドレス001および層M0におけるマルチプレクサに対するコマンド（すなわち、L01）との論理組合せに基づくコマンドを受信することができる。この態様では、特定のマルチプレクサに対するコマンドがビットを0に設定させる場合、マルチプレクサは行を変更せずに入力信号を通過させる。コマンドが、ビットを1に設定させる場合、マルチプレクサは入力信号を次のパスに切り換える（図13の場合は上向き）。
【表１】
2007526442.tif 000003
【表２】
2007526442.tif 000004
【表３】
2007526442.tif 000005
【表４】
2007526442.tif 000006
【表５】
2007526442.tif 000007
【表６】
2007526442.tif 000008
【表７】
2007526442.tif 000009
【表８】
2007526442.tif 000010
【００５１】
他の態様では、完全クロスバー手法を使用することができる。以下に、1に設定されたビットを検出する完全クロスバー128:1マルチプレクサイベント検出器に対するコマンド信号を算出する例示的なVERILOGルーチンを示す。これらの例では、mux1台当たり7コマンドビットが使用されている。以下のルーチンでは、data_com_iは着信128ビットワードであり、a、b、c、d、e、f、g、およびhは中間信号である。さらに、cmd[6:0]は、マルチプレクサに印加されるコマンドであり、前の各信号の論理和をとることによって得られる。
2007526442.tif 000011
2007526442.tif 000012
2007526442.tif 000013
【００５２】
より複雑になるのは動作周波数である。200 MHzのようなより高い周波数では、シストリッククロスバー態様または完全クロスバー態様の場合にネットワークをパイプライン化することが望ましい。これによってデルタ検出の順次性が予想されるよりも高くなる。なぜなら、遠端ビットの方が近端ビットよりもネットワークから出るのが遅くなるからである。大きなデルタ検出の場合、完全クロスバーの方がシストリックデルタ検出よりも段階が少なくなり、したがって、完全クロスバー手法の方が、パイプライン処理が困難になり、したがって、順次性が低くなる。パイプライン処理を行う際は、パイプラインをデータが通過する前にスイッチまたはマルチプレクサを構成しておくべきであることに留意されたい。コマンドパイプラインを通過する（コマンドマトリクスまたは他のコントローラからの）コマンド信号の第1の「波」と、データビットの第2の波があってよい。コマンド式の深さは様々であり、タイミングクロージャ問題が起こるが、パイプライン化によって解消または軽減することができる。
【００５３】
数値例
次に、追跡データをどのように圧縮できるかについての具体的な例を論じる。エミュレーションシステムが複数の再構成可能な論理チップを含み、それぞれの再構成可能な論理チップが、各スキャンチェーンが（デルタ検出器が各スキャンチェーンに組み込まれるかそれとも各スキャンチェーンの端部に結合されるかに応じて）追跡セットまたは追跡デルタセットを生成するN = 256個の並列したスキャンチェーンを有すると仮定する。ここでは、デルタ検出器が各スキャンチェーンの端部に結合されており、各スキャンチェーンが各ユーザ・クロック・サイクルごとに1つの追跡セットを生成すると仮定する。本例では、各ユーザ・クロック・サイクルごとの各追跡セットの長さがM=16ビットであると仮定する。したがって、各追跡セットは、1ユーザ・クロック・サイクル当たりM=16個のビット位置を含んでいる。各ビット位置mは、再構成可能な論理チップ内のスキャンチェーンに沿って結合された異なる状態要素に対応する。
【００５４】
上記の仮定を考慮して表9を見ると、1ユーザ・クロック・サイクルt=0中に1つの再構成可能な論理チップ内で生成できる追跡セットの例が示されている。たとえば、図5ではT3とも呼ばれる追跡セットn = 3はデータ[0 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0]を含んでいる。さらに、追跡セットT0はデータ[1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1]を含んでいる。
【表９】
2007526442.tif 000014
【００５５】
表10は、1ユーザ・クロック・サイクルt = 1中に1つの再構成可能な論理チップ内で生成できる追跡セットの例を示している。
【表１０】
2007526442.tif 000015
【００５６】
表11は、本例のデルタ検出器によって生成された追跡デルタセットを表している。表11は、たとえば、追跡デルタセットTD3（表9の追跡セットT3に対応する）がバイナリデータ[0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0]を含むことを示している。追跡デルタセットTD0はバイナリデータ[0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0]を含んでいる。この例では、TD0とTD3はどちらも、対応するT0およびT3よりも実質的に多くの0を含んでいる。一般に、エミュレータから得られる追跡データの場合、デルタ検出では、実質的な割合の追跡デルタセットビットが同じになる（この場合は0）ことが予想される。このことは、追跡デルタセットの圧縮が一般に、追跡セットの圧縮よりもずっと効率的になることを意味する。この例の表11に示されているデルタ検出器の結果は実際上、より効率的な圧縮ができるように準備された二次元データアレイである。
【表１１】
2007526442.tif 000016
【００５７】
追跡デルタデータは様々な方法で圧縮することができる。たとえば、追跡デルタセットを横切って、すなわち、表11の列ごとに圧縮を行うことができる。あるいは、追跡デルタセット内で、すなわち、表11の行ごとに圧縮を行うことができる。追跡デルタセットを横切って圧縮する例示的な一態様では、各データセットが表11の1つのビット位置列に対応する、M個（この例では16個）の圧縮データセットを生成することができる。したがって、M個の追跡デルタセットの各デルタセットの第1のビット位置（m = 0）に対応する第1のデータセットが圧縮され、M個の追跡デルタセットの各デルタセットの第2のビット位置（m = 1）に対応する第2のデータセットが圧縮され、他のデータセットも同様に圧縮される。図9を参照すると分かるように、いくつかまたはすべての圧縮データセットにヘッダなどのフラグを付加して圧縮ステータス、圧縮の種類、データセットの長さ、および／または他の特性を示すことができる。フラグは、任意のサイズまたはフォーマットのフラグであってよい。たとえば、圧縮すべきデルタデータがすべて0である場合、そのデータを第1のフラグ901（単一の0ビットなど）としてのみ表すことができる。第2のフラグ902（たとえば、バイナリ[1 0]など）は、すぐ後のバイト904が、1に設定された特定の圧縮データセット中の総ビット数を示すことを示すことができる。1に設定されたビットに対応する各追跡セットのアドレス905（たとえば、各アドレスは指標nであってよい）が後に続く。第3のフラグ903（たとえば、バイナリ[1 1]など）は、すぐ後のNビット906が圧縮されていないことを示すことができる。
【００５８】
このような圧縮の例示的な結果が図12に示されている。表11のm = 0列中のすべてのビットが0に設定されていると仮定する。このような場合、表12に示されているように、対応する圧縮データセットm = 0は単一の0ビットフラグを含むに過ぎない。他の例として、表11のm = 2列は、データセットn = 1およびn = 3によって生成されるビットを含む、1に設定されたいくつかのビットを含んでいる。nの値は、追跡データセットの識別子（たとえば、アドレス）とみなすことができ、したがって、n = 1追跡デルタデータセットの識別子はバイナリ値1であってよく（バイナリ[0 0 0 0 0 0 0 1]）、n = 3追跡デルタデータセットのアドレス（図9に関連して説明したように生成することができる）は、10進法数3のバイナリ値（バイナリ[0 0 0 0 0 0 1 1]）であってよい。したがって、圧縮データセットm = 2は、圧縮データが後に続くことを示すフラグ902（たとえば、バイナリ[1 0]）と、m = 3列中の1に設定されたビットの数の表示904（この場合、9を仮定すると、バイナリ[0 0 0 0 1 0 0 1]）と、さらに、m = 2ビットが1に設定された追跡デルタセットの9つのアドレス（特に、n = 1、すなわちバイナリ[0 0 0 0 0 0 0 1]およびn = 3、すなわち[0 0 0 0 0 0 1 1]を含む）とを含んでよい。
【表１２】
2007526442.tif 000017
【００５９】
この例では、セットm = 4内のすべてのビットが0に設定されていると仮定する。したがって、最小数のビット（たとえば、1ビット）を使用してこのすべて0状態を表すことができる。この例では、フラグ[0]を使用してすべて0状態が示される。本例のm = 8では、圧縮がそれほど有効でなくなるほどデータが前後に変化した（たとえば、多数のデルタ）と仮定する。したがって、表12では、m = 8のフラグ[1 1]は、後続のNビットが圧縮されていないことを示す。このことは、アドレスを与えても（m = 2など）、実際には、アドレスを与えない場合に未圧縮ビットセットを表すのに必要なデータ量が減らず、場合によっては、このデータ量が増えるような、十分の数の、1に設定されたビットがある場合に望ましい。たとえば、1に設定された特定のデータセットm内のビットのアドレスのそれぞれの長さが8ビットであり、N = 256である場合、1に設定されたビットが32ビットであるデルタデータセットを圧縮するには(8×33)+ 2 = 266ビット必要である。したがって、実際には、この状況では、データセットmを単に未圧縮のままにしておく（または別の種類の圧縮を選択する）のに必要なデータ量は少なくなり、合計で256 + 2 = 258ビット以下である。一般に、(A×B)+ F + G < (または£) N（Aは、各追跡デルタセットアドレスの長さであり、Bはデータセットm内の1に設定されたビットの数であり、Fは圧縮データを表すのに使用されているフラグがあればそのフラグの長さであり、Gはインジケータ904の長さである）である場合にのみデータセットmをこのように圧縮することが好ましい。図10は、表12の圧縮デルタデータをどのように表すかを示す例示的なフォーマットを示している。
【００６０】
エミュレーション追跡データは、上述のように圧縮されたときに著しく圧縮されると予想されることが分かっている。実際、試験結果は、通常の設計から、本発明によって40倍から60倍程度に圧縮できる追跡データが生成されたことを示している。代表的な最悪ケース圧縮でも約3倍になると予想される。
【００６１】
コンパクト化および等化
エミュレーション実行時に、集積回路チップ内のいくつかまたはすべての状態要素を追跡することができる。前述のように、各集積回路チップは複数のスキャンチェーンを含んでよい。各スキャンチェーンは、複数のRLBの各々から追跡データを受信できるように構成することができる。たとえば、チップ内の特定のスキャンチェーンが、チップ内の最大X個のRLBから追跡データを受信器できるように構成されていると仮定する。しかし、スキャンチェーンは、特定の状況でX個のRLBのいくつかのみから追跡データを受信するように構成することができる。したがって、この状況では、X個未満のRLBを追跡し、一方、そのスキャンチェーンの他のRLBを無視することができる。同じチップ上の様々なスキャンチェーンがそれぞれの異なる数のRLBを追跡するように構成されている場合、異なる長さを有する複数の追跡データセットが得られる。しかし、前述のように、複数のセットが同じビット長を有することが望ましい（しかし、そうする必要はない）。各々の長さが等しい複数の追跡セットを横切って圧縮する方が容易である。
【００６２】
長さの等しい複数の追跡セットを得るために、スキャンチェーンを、追跡データを受信するためのあるRLBを選ぶように構成することができる。たとえば、図6の態様では、MUX 1Aおよび／またはMUX 3Aの構成は、RLBAからの追跡データがモジュールAによって受信されるか否かを決定する。MUX 3Aが入力1ではなく入力0を受信するように構成されている場合、モジュールAとRLBAからの追跡データは、実際上無視される。様々なMUXをスキャンチェーンに沿って構成することによって、スキャンチェーンは、あるRLBから追跡データを選択的に受信することができる。
【００６３】
スキャンチェーンのモジュールを無視する結果が図7に示されている。たとえば、集積回路チップの256個のスキャンチェーンの各々の長さが32ビットであると仮定する。すなわち、各スキャンチェーンは、最大で32個のRLBから追跡データを受信できるように構成されている。さらに、少なくともいくつかのスキャンチェーンが実際に追跡データを受信するRLBが32個未満になるように構成されていると仮定する。たとえば、第1のスキャンチェーンをそのRLBのうちの12個のみから追跡データを受信するように構成することができ、第2のスキャンチェーンをそのRLBのうちの16個のみから追跡データを受信するように構成することができ、第3のスキャンチェーンをそのRLBのうちの5個のみから追跡データを受信するように構成することができる。このことは、各円がそれぞれのスキャンチェーンの32個のモジュールのうちの1つを表す円のいくつかの水平行を示す図7の左側に示されている。各円は、それぞれのスキャンチェーンの異なるクロックシリアル出力を表すとみなすこともできる。内部に文字「T」を有する円は追跡データを表し、一方、空白の円は、無視されるスキャンチェーンモジュールに対応するクロックデータを表している（すなわち、追跡データなし）。
【００６４】
図7の右側は、スキャンチェーンの出力をコンパクト化し等化した結果を示している。たとえば、任意のスキャンチェーンからの追跡データビット（その数を本明細書で述べる定数Mとして使用することができる）出力の最大数が16ビットであると仮定する。したがって、各スキャンチェーンが32データビットを出力するにもかかわらず、追跡データビットはこれらのうちの16ビット以下である。残りのビット（すなわち、図7の空白の円）は重要ではなく、無視することができる。各スキャンチェーンからのデータ出力（追跡データであっても、追跡デルタデータであってもよい）は、ガーベッジビットを除去し、追跡データビットのみを残すことによってコンパクト化することができる。次に、必要な定ビットを追加して合計でM（この例では16に等しい）ビットにすることによって、各スキャンチェーンからのデータ出力を等化することができる。文字「C」を含む円として図7に表されている定ビットは、追跡データのシーケンス内の任意の場所に追加してよいが、好ましくは、シーケンスの開始位置または終了位置に追加される。たとえば、12追跡データビット（または追跡デルタデータ）のみを有する第1のスキャンチェーンのコンパクト化された出力には4つの定ビットを追加することができる。16追跡データビット（または追跡デルタデータ）を有する第2のスキャンチェーンのコンパクト化された出力には定ビットを追加する必要はない。5追跡データビット（または追跡デルタデータ）を有する第3のスキャンチェーンのコンパクト化された出力には11個の定ビットを追加する必要がある。この結果、同じビット長Mを有する複数のスキャンチェーン出力セットが得られる。次に、結果として得られたコンパクト化され等化されたセットを前述のように圧縮することができる。
【００６５】
本発明の様々な局面を具体化する、本明細書で説明した例示的なシステムおよび方法は一例として示されているが、もちろん、本発明がこれらの態様に限定されないことが理解されよう。当業者は、特に前記の開示を考慮して修正を施すことができる。たとえば、前述の態様の各要素を単独で利用しても、他の態様の要素と組み合わせて利用してもよい。さらに、本発明は添付の特許請求の範囲を使用して定義されているが、特許請求の範囲は、本発明が本明細書に記載された各要素および段階の任意の組合せを含むものであるという点で例示的なものである。本発明の真の精神および範囲から逸脱せずに修正を施せることも認識し理解されよう。たとえば、データビットは0または1に設定されると論じたが、このような0と1を逆にしてもよい。
【図面の簡単な説明】
【００６６】
【図１】本発明の少なくとも1つの局面による、圧縮追跡データを生成するエミュレーション・追跡記憶システムの例示的な態様の機能ブロック図である。
【図２】本発明の少なくとも1つの局面によるエミュレータの例示的な態様の機能ブロック図である。
【図３】本発明の少なくとも1つの局面による、圧縮追跡データを生成するエミュレーション・追跡記憶システムの例示的な態様の機能ブロック図である。
【図４】エミュレーションチップ内の追加的な細部を示す、図1および2のエミュレーションシステムの機能ブロック図である。
【図５】本発明の少なくとも1つの局面による、スキャンチェーンの出力を受信するデルタ検出器の例示的な態様の回路図である。
【図６】本発明の少なくとも1つの局面による、一体化されたデルタ検出器を有するスキャンチェーンの例示的な態様の一部の回路図である。
【図７】本発明の少なくとも1つの局面による、追跡データのコンパクト化および等化の例示的な態様の図である。
【図８】本発明の少なくとも1つの局面による、イベント検出器の例示的な態様の機能ブロック図である。
【図９】本発明の少なくとも1つの局面による、圧縮の結果として生成できるデータの図である。
【図１０】本発明の少なくとも1つの局面による、圧縮の結果として生成できるデータの図である。
【図１１】本発明の少なくとも1つの局面による時間平均バッファの例示的な態様の機能ブロック図である。
【図１２】本発明の少なくとも1つの局面による、イベント検出器の例示的な態様の機能ブロック図である。
【図１３】本発明の少なくとも1つの局面によるシストリック部分クロスバーイベント検出器の例示的な態様の機能ブロック図である。
【図１４】本発明の少なくとも1つの局面によるエミュレーションシステムおよびワークステーションの例示的な態様の高レベル機能ブロック図である。
【図１】
2007526442.tif 000018
【図２】
2007526442.tif 000019
【図３】
2007526442.tif 000020
【図４】
2007526442.tif 000021
【図５】
2007526442.tif 000022
【図６】
2007526442.tif 000023
【図７】
2007526442.tif 000024
【図８】
2007526442.tif 000025
【図９】
2007526442.tif 000026
【図１０】
2007526442.tif 000027
【図１１】
2007526442.tif 000028
【図１２】
2007526442.tif 000029
【図１３】
2007526442.tif 000030
【図１４】
2007526442.tif 000031
【国際調査報告】
2007526442.tif 000032