(57)【特許請求の範囲】
【請求項１】
再構成可能な論理を実装するための集積回路論理要素であって、
集積回路論理要素に信号を入力する入力ラインと、
入力された信号を受信する入力ラインに結合され、第１の出力ラインに第１のデータを出力するルックアップテーブルと、
第１の出力ライン上の第１のデータ及び第１のクロック信号を受信し、選択可能な量だけ遅延された第１のデータである遅延された第１のデータを出力するプログラム可能な遅延回路であって、選択可能な量は、第１のクロック信号に基づいて決定され、プログラム可能な遅延回路は、選択的に能動化されるものと、
プログラム可能な遅延回路に結合され、遅延された第１のデータを受信し、その出力に第２のデータを出力するデータラッチと、
第１のデータ、遅延された第１のデータまたは第２のデータの１つを受信し、それを集積回路論理要素の外に通す出力ラインと
を備えていることを特徴とする集積回路論理要素。
【請求項２】
請求項１に記載の集積回路論理要素であって、プログラム可能な遅延回路は、フリップフロップを含んでいることを特徴とする集積回路論理要素。
【請求項３】
請求項２に記載の集積回路論理要であって、フリップフロップは、エッジトリガされることを特徴とする集積回路論理要素。
【請求項４】
請求項１に記載の集積回路論理要素であって、プログラム可能な遅延回路は、直列に接続された複数のフリップフロップを含んでいることを特徴とする集積回路論理要素。
【請求項５】
請求項４に記載の集積回路論理要素であって、複数のフリップフロップは、エッジトリガされることを特徴とする集積回路論理要素。
【請求項６】
請求項１に記載の集積回路論理要素であって、更に、プログラム可能な遅延回路によって発生された遅延量だけ変化させるために第１のクロック信号の速度を調整するクロック調整器を備えていることを特徴とする集積回路論理要素。
【請求項７】
請求項１に記載の集積回路論理要素であって、更に、ルックアップテーブルに結合された第２のクロック信号を備え、第１のクロック信号は第２のクロック信号より速いことを特徴とする集積回路論理要素。
【請求項８】
請求項１に記載の集積回路論理要素であって、更に、ルックアップテーブル、プログラム可能な遅延回路及びデータラッチに結合され、第１のデータ、遅延された第１のデータ及び第２のデータを受信し、第１のデータ、遅延された第１のデータ及び第２のデータの１つを出力ラインに通す選択回路を備えていることを特徴とする集積回路論理要素。
【請求項９】
請求項１に記載の集積回路論理要素であって、更に、ルックアップテーブル、プログラム可能な遅延回路及びデータラッチに結合され、第１のデータ及び遅延された第１のデータを受信し、第１のデータまたは遅延された第１のデータの１つをデータラッチに通す選択回路を備えていることを特徴とする集積回路論理要素。
【請求項１０】
請求項１に記載の集積回路論理要素であって、更に、複数の入力ラインと、データラッチを制御する信号を通すために入力ラインの１つを選択するマルチプレクサを備えていることを特徴とする集積回路論理要素。
【請求項１１】
請求項１に記載の集積回路論理要素であって、データラッチは、ラッチまたはフリップフロップとして機能することを特徴とする集積回路論理要素。
【請求項１２】
請求項１に記載の集積回路論理要素であって、データラッチは、データラッチの出力を１つの論理状態にセットする第１のピン上のセット信号及びデータラッチの出力を他の論理状態にリセットする第２のピン上のリセット信号を受信し、第１のピンは第２のピンと離れていることを特徴とする集積回路論理要素。
【請求項１３】
請求項１に記載の集積回路論理要素であって、データラッチは、直列に接続されたマスターフリップフロップとスレーブフリップフロップを有していることを特徴とする集積回路論理要素。
【請求項１４】
請求項１に記載の集積回路論理要素であって、更に、入力ラインに結合され、集積回路論理要素が入力を他の集積回路論理要素と分配することを許可する入力分配回路を備えていることを特徴とする集積回路論理要素。
【請求項１５】
請求項１４に記載の集積回路論理要素であって、更に、入力ラインに結合されたランダムアクセスメモリを有し、入力分配回路は、集積回路論理要素がランダムアクセスメモリ内のデータを他の集積回路論理要素と分配することを許可することを特徴とする集積回路論理要素。
【請求項１６】
請求項１４に記載の集積回路論理要素であって、入力分配回路は、データを集積回路論理要素から他の集積回路論理要素に通すラインを含んでいることを特徴とする集積回路論理要素。
【請求項１７】
請求項１５に記載の集積回路論理要素であって、入力分配回路は、データを集積回路論理要素のランダムアクセスメモリから他の集積回路論理要素に通すラインを含んでいることを特徴とする集積回路論理要素。
【請求項１８】
請求項１７に記載の集積回路論理要素であって、入力分配回路は、データを他の集積回路論理要素のランダムアクセスメモリから受信するラインを含んでいることを特徴とする集積回路論理要素。
【請求項１９】
請求項１８に記載の集積回路論理要素であって、入力分配回路は、データを他の集積回路論理要素のランダムアクセスメモリから受信し、データを集積回路論理要素のランダムアクセスメモリに格納することを特徴とする集積回路論理要素。
【請求項２０】
請求項１４に記載の集積回路論理要素であって、入力分配回路は、信号を入力ラインから集積回路論理要素にルーティングするためのマルチプレクサを含んでいることを特徴とする集積回路論理要素。
【請求項２１】
請求項１に記載の集積回路論理要素であって、ルックアップテーブルは、少なくとも５つの入力を受信することを特徴とする集積回路論理要素。
【請求項２２】
請求項１に記載の集積回路論理要素であって、ルックアップテーブルは、６つの入力を受信することを特徴とする集積回路論理要素。
【請求項２３】
再構成可能な論理を実装するための集積回路論理要素であって、
信号を集積回路論理要素に入力する入力ラインと、
入力された信号を受信するための入力ラインと電気的に通信可能なルックアップテーブルを有し、第１のデータを第１の出力ラインに出力するランダムアクセスメモリと、
第１の出力ライン上の第１のデータ及び第１のクロック信号を受信し、選択可能な量だけ遅延された第１のデータである遅延された第１のデータを出力するプログラム可能な遅延回路であって、選択可能な量は、第１のクロック信号に基づいて決定され、プログラム可能な遅延回路は、選択的に能動化されるものと、
ランダムアクセスメモリ内に形成される第２のメモリと、
ランダムアクセスメモリに結合され、第１のデータを受信し、第２のデータをその出力に出力するデータラッチと、
第１のデータまたは第２のデータを受信し、それを集積回路論理要素の外に通す出力ラインと
を備えていることを特徴とする集積回路論理要素。
【請求項２４】
請求項２３に記載の集積回路論理要素であって、第２のメモリは、ランダムアクセスメモリ内のデータを読み出し、データのコピーを第２のメモリ内に格納することを特徴とする集積回路論理要素。
【請求項２５】
請求項２３に記載の集積回路論理要素であって、第２のメモリは、データをランダムアクセスメモリから標本抽出し、標本抽出したデータを第２のメモリに格納することを特徴とする集積回路論理要素。
【請求項２６】
請求項２５に記載の集積回路論理要素であって、第２のメモリは、複数のメモリブロックを含み、各メモリブロックは、ランダムアクセスメモリからの異なる標本抽出データを格納することを特徴とする集積回路論理要素。
【請求項２７】
請求項２３に記載の集積回路論理要素であって、第２のメモリに格納されているデータは、ユーザが読み出し可能であることを特徴とする集積回路論理要素。
【請求項２８】
請求項２６に記載の集積回路論理要素であって、第２のメモリのメモリブロックに格納されている標本抽出データは、ユーザが順に読み出し可能であることを特徴とする集積回路論理要素。
【請求項２９】
請求項２３に記載の集積回路論理要素であって、更に、プログラム可能な遅延回路によって発生される遅延量だけ変化させるために第１のクロック信号の速度を調整するクロック調整器を備えていることを特徴とする集積回路論理要素。
【請求項３０】
請求項２３に記載の集積回路論理要素であって、プログラム可能な遅延回路は、フリップフロップを含んでいることを特徴とする集積回路論理要素。
【請求項３１】
請求項３０に記載の集積回路論理要素であって、フリップフロップは、エッジトリガされることを特徴とする集積回路論理要素。
【請求項３２】
請求項２３に記載の集積回路論理要素であって、プログラム可能な遅延回路は、直列に接続された複数のフリップフロップを含んでいることを特徴とする集積回路論理要素。
【請求項３３】
請求項３２に記載の集積回路論理要素であって、複数のフリップフロップはエッジトリガされることを特徴とする集積回路論理要素。
【請求項３４】
請求項２９に記載の集積回路論理要素であって、更に、ランダムアクセスメモリに結合される第２のクロック信号を備え、第１のクロック信号は第２のクロック信号より速いことを特徴とする集積回路論理要素。
【請求項３５】
請求項２３に記載の集積回路論理要素であって、更に、ランダムアクセスメモリ及びデータラッチに結合され、第１のデータ及び第２のデータを受信し、第１のデータ及び第２のデータの１つを出力ラインに通す選択回路を備えていることを特徴とする集積回路論理要素。
【請求項３６】
請求項２９に記載の集積回路論理要素であって、更に、ランダムアクセスメモリ、遅延回路及びデータラッチに結合され、第１のデータ、遅延された第１のデータ及び第２のデータを受信し、第１のデータ、遅延された第１のデータまたは第２のデータの１つを出力ラインに通す選択回路を備えていることを特徴とする集積回路論理要素。
【請求項３７】
請求項２３に記載の集積回路論理要素であって、データラッチは、ラッチまたはフリップフロップとして機能することを特徴とする集積回路論理要素。
【請求項３８】
請求項２３に記載の集積回路論理要素であって、データラッチは、データラッチの出力を１つの論理状態にセットする、第１のピン上のセット信号と、データラッチの出力を他の論理状態にリセットする、第２のピン上のリセット信号を受信し、第１のピンは第２のピンと離れていることを特徴とする集積回路論理要素。
【請求項３９】
請求項２３に記載の集積回路論理要素であって、更に、入力ラインに結合され、集積回路論理要素が他の集積回路論理要素と入力を分配することを許可する入力分配回路を備えていることを特徴とする集積回路論理要素。
【請求項４０】
請求項３９に記載の集積回路論理要素であって、入力分配回路は、集積回路論理要素が他の集積回路論理要素とランダムアクセスメモリ内のデータを分配することを許可することを特徴とする集積回路論理要素。
【請求項４１】
請求項３９に記載の集積回路論理要素であって、入力分配回路は、データを集積回路論理要素から他の集積回路論理要素に通すラインを含んでいることを特徴とする集積回路論理要素。
【請求項４２】
請求項４０に記載の集積回路論理要素であって、入力分配回路は、データを集積回路論理要素のランダムアクセスメモリから他の集積回路論理要素に通すラインを含んでいることを特徴とする集積回路論理要素。
【請求項４３】
請求項４２に記載の集積回路論理要素であって、入力分配回路は、データを他の集積回路論理要素のランダムアクセスメモリから受信するラインを含んでいることを特徴とする集積回路論理要素。
【請求項４４】
請求項４３に記載の集積回路論理要素であって、入力分配回路は、データを他の集積回路論理要素のランダムアクセスメモリから受信し、データを集積回路論理要素のランダムアクセスメモリに格納することを特徴とする集積回路論理要素。
【請求項４５】
請求項２３に記載の集積回路論理要素であって、更に、入力ラインに結合され、少なくとも５つの入力を受信し、第１のデータを第１の出力ラインに出力するルックアップテーブルを備えていることを特徴とする集積回路論理要素。
【請求項４６】
請求項４５に記載の集積回路論理要素であって、ルックアップテーブルは、６つの入力を受信することを特徴とする集積回路論理要素。
【発明の詳細な説明】
【０００１】
この出願は、参照によって組み込まれている、継続中の、２０００年５月１１日に出願した米国特許出願０９／５６９,６９５号の一部継続出願であり、その優先権を主張している。ライアン＆ライアンの整理番号が２２０／２９０、名称が「最適化エミュレーション及びプロトタイピング構造」である、１９９７年１１月１２日に出願した米国特許出願０８／９６８,４０１号は、その全てを参照によって組み込まれ、本出願の部分を形成している。
【０００２】
【発明の属する分野】
本発明の分野は、一般的にはエミュレーションシステムのための集積回路チップに関し、特に、レースタイム問題(race  time  problem)を除去するホールドタイムアルゴリズム(hold  time  algorithm)を有するエミュレーションシステムのための改良された論理要素に関する。
【０００３】
【従来の技術】
在庫がある構成要素として手に入れることができる（すなわち、商業的に手に入れることができる）一般目的のプログラマブル論理チップ（プログラム可能な論理チップ）は、一般的には、論理エミュレーション、プロトタイピング(prototyping)及びコンピューティング(computing)等の特別の応用のためにカスタム設計されない。一般目的のプログラマブル論理チップの例は、フィールドプログラマブルゲートアレイ(field  programmable  gate  array)（“ＦＰＧＡ”）、プログラマブル論理アレイ(programmable  logic  array)（“ＰＬＡ”）及びプログラマブルアレイ論理(programmable  array  logic)（“ＰＡＬ”）である。
一般目的のプログラマブル論理チップは、ハードウェア論理エミュレーション、プロトタイピング及びコンピューティング等の応用の初期の開発段階では十分に役に立っていた。
しかしながら、これらの応用では、一般目的の論理チップは、いくつかの欠点を有している。多くの一般目的の論理チップは、他の目的より速さと密度（すなわち、どのくらいの論理ゲートが単一のチップに実装可能か）を強調した。大部分の応用に対する費用効果をあげるためには、一般目的のプログラマブル論理構造は、その中に設計を納めることができるために十分なルーティングリソース(routing  resource)を提供し、大部分の有用な論理ゲートを集積回路内で使用可能にする必要がある。
しかしながら、一般目的のプログラマブル論理構造では、ゲートカウント（すなわち、チップを必要とするプログラマブル論理チップの製造者が実装可能なゲートの数）がチップの定格容量の範囲内であっても、常に、与えられた設計またはパーティション（区分）(partition)が実装できない可能性を有している。また、編集処理の速度は、一般目的の論理チップでは、あまり重要ではない。
【０００４】
【発明が解決しようとする課題】
対照的に、論理エミュレーション、プロトタイピングまたはコンピューティングの応用では、優先度が異なる。論理チップは、通常、大きな、複合チップシステム(multi-chip  system)（しばしば、数十または数百の論理チップを有する）の部分である。大きな入力設計ネットリスト(input  design  netlist)は、最小のユーザの介在で、非常に高い成功率で、全てのこれらの論理チップ内に自動的に編集される必要がある。ネットリストは、設計の構成要素（すなわち、論理ゲート）及び構成要素がどのように相互接続されるかを指定する論理設計の記述である。ネットリストの各“ネット”(net)は、構成要素または入力／出力パッド上のピンの間の回路通路を定義する。これらの応用で使用される論理チップが、ほとんどいつも、大部分の論理リソースが完全に自動的な編集処理によって使用できるほど十分に柔軟性と能力を有するルーティングリソースを提供することは、本質的なことである。この編集処理は、迅速に実行されなければならない。編集時間を速くすることにより、ユーザの設計がエミュレータシステムに提供されてから、全ての論理チップがプログラムされ、ユーザの設計を実行する準備ができる（すなわち、ユーザの設計をエミュレートする）までに必要な時間を最小化する。
【０００５】
一般目的の論理チップの目的と、エミュレーション、プロトタイピング及びコンピューティングの応用で使用される論理チップの目的の違いにより、論理エミュレーション、プロトタイピング及びコンピューティングの応用のために特殊化された論理チップが必要である。
【０００６】
さらに、できるだけルーティングの失敗の可能性を減少させなければならないエミュレーションに使用される集積回路の設計及び相互接続の柔軟性によって、エミュレートされるゲートの容量を高度に予測することができ、所定のタイミング問題を解決することができる。非常に大きい設計を多くのプログラマブル論理チップにパーティショニング（区分け）(partitioning)する際の共通の問題は、元のネットリストのタイミングが保持されないということである。元の設計の通常の区分けは、おそらく、最終の単一チップの実装時におけるタイミングを反映する。しかしながら、ネットリストをプログラマブル論理ターゲット(programmable  logic  target)に再構成及び再区分けするソフトウェアは、そのターゲットに対して異なる区分けを課するに違いない。信号通路の遅延は、大きくなるが、一様ではない。これらの遅延の拡大の違いは、設計ネットリストに固有ではないが、タイミング問題（すなわち、スキュー、セットアップ及びホールド妨害）を引き起こす。時には、設計ネットリスト内に存在するタイミング問題は、プログラマブル論理システムへのマッピング(mapping)によって隠れてしまう。これらのタイミング問題は、ユーザまたはエミュレーターにとって不満足である。エミュレーション構造は、加えられたタイミング問題を検出し、これらのタイミング問題を除去するためのハードウェアを有する必要がある。
【０００７】
エミュレーション集積回路は、従来、より複雑なブロックを形成するために一緒に結合され、その後完全なチップを形成するために結合される、所望の論理機能を実行可能な簡単な論理ブロックを有する、多段レベル階層状に構成されている。典型的には、相互接続の量は、階層の最も低いレベルで最も多く、高いレベルでは減少する。結果的に、最も低いレベルの相互接続の設計は、チップの全サイズ及びコストに大きく影響する。
【０００８】
階層の最も低いレベルでの相互接続は、従来、（１）論理要素（例えば、Ｘｉｌｉｎｋ  ４０００シリーズで使用されているＦＰＧＡ）の列と行を相互接続する、部分的に埋められる(partially  populated)マルチプレクサ構造、または、（２）論理要素の小グループ（例えば、Ａｌｔｅｒａ  Ｆｌｅｘ  ８０００で使用されているＦＰＧＡ群）を相互接続する完全クロスバー(full  crossbar)を介して達成されていた。しかしながら、部分的に埋められるマルチプレクサ構造は、制限されたルーティングの柔軟性の悩みがある。１つの論理要素から他の論理要素への多くのローカル接続(local  connection）を必要とする回路設計は、与えられたチップ内の全てにおいてルーティング可能ではなく、あるいは、論理要素間を完全にルーティングするために非常に複雑なソフトウェア及び長い計算時間を必要とする。
【０００９】
階層の最も低いレベルでの完全クロスバー相互接続は、論理要素の小グループ間の完全な相互接続性を保障することによって、部分的に埋められるマルチプレクサ相互接続の問題を回避している。しかしながら、完全クロスバー相互接続構成に対する欠点は、完全クロスバーを実装するために必要なシリコンの量である。必要なシリコンの面積は、相互接続される論理要素の数の２乗に比例する。このように、論理要素の少数の場合にのみ、コストが高くなる前に、完全クロスバーを介して相互接続可能である。１例として、Ａｌｔｅｒａ  Ｆｌｅｘ  ８０００のチップ内の最も低いレベルは、８つの論理要素を有している。このような小さな、低レベルのブロックを使用して大きな集積回路を構築することは、膨大な数のブロックや相互接続信号がチップ内の高いレベルで必要なため、困難である。
【００１０】
論理要素は、エミュレーションシステムのための集積回路チップを構築するために順に使用される論理ブロックの基本的な骨格ブロックであるため、エミュレーションにおいてより高い正確性及び効率性を達成するためには、論理要素内の改良が必要である。レースタイム問題及び動作関連問題は、現在の論理要素を改良する必要性を生じさせる。また、機能のテスト及び調査を提供する必要がある。
従来のシステム及び回路の更なる制限及び欠点は、当業者には、図面を参照して本発明の応用の残りの部分を見直した後に明らかになるであろう。
【００１１】
【課題を解決するための手段】
本発明の種々の異なるアスペクトは、エミュレーションシステムのための改良された回路内に見出すことができる。改良された回路は、ＲＡＭ、ルックアップテーブル、オプションの遅延要素及びフリップフロップ／ラッチを有する論理要素を備えている。フリップフロップ／ラッチは、フリップフロップまたはラッチとして動作し、別々のセット及びリセット信号を有している。遅延要素は、レースタイム問題を軽減するために、論理要素のデータ通路内に選択可能な遅延量を挿入する。論理要素は、ＲＡＭの大きさを増大させるために、入力信号を分配するように結合される。また、改良された回路は、論理要素からの標本抽出データを格納し、デバッグ目的のためにエミュレーションデータを再生するために使用されるシャドウメモリ(shadow  memory)を有している。複数の読出ポートによって、ユーザは、時間多重方法でエミュレーションを行っている間に、改良された回路からデータを読み出すことができる。入力／出力ピンは、複数の信号を一方方向または双方向に搬送するために時間多重化される。また、改良された回路は、レースタイム問題を軽減するために、ホールドタイムアルゴリズムを有している。
【００１２】
第１に、本発明の別のアスペクトは、論理要素のデータ通路内に調整可能な遅延量を挿入する遅延要素を論理要素が含んでいるエミュレーションシステムにおいて使用する集積回路の論理ブロックのための論理要素である。
第２に、本発明の別のアスペクトは、別々のセット及びリセット信号を有するフリップフロップラッチを論理要素が含んでいるエミュレーションシステムにおいて使用する集積回路のための論理要素である。
第３に、本発明の別のアスペクトは、論理要素が６つの入力のルックアップテーブルを含んでいるエミュレーションシステムにおいて使用する集積回路のための論理要素である。
第４に、本発明の別のアスペクトは、論理要素からの標本抽出データを格納し、そのデータをユーザに対する表示のために再生するメモリを有するエミュレーションシステムにおいて使用する集積回路である。
第５に、本発明の別のアスペクトは、各論理要素が、ＲＡＭを有し、より大きなＲＡＭを生成するために結合されるエミュレーションシステムにおいて使用する集積回路のための論理要素である。
第６に、本発明の別のアスペクトは、複数の読出ポートを有し、ユーザが、時間多重方法でエミュレーションを行っている間に、改良された回路からデータを読み出すことができるエミュレーションシステムにおいて使用する集積回路である。
第７に、本発明の別のアスペクトは、複数の信号を一方方向に搬送するために、入力／出力ピンが時間多重化されているエミュレーションシステムにおいて使用する集積回路である。
第８に、本発明の別のアスペクトは、複数の信号を双方向に搬送するために、入力／出力ピンが時間多重化されているエミュレーションシステムにおいて使用する集積回路である。
第９に、本発明の別のアスペクトは、前記した別のアスペクトのいずれかを、個々にまたはいくつかを結合して実行するエミュレーション方法である。
第１０に、本発明の別のアスペクトは、個別またはいくつかを結合する、前記した別のアスペクトのいずれかである。
本発明の他のシステム、方法、特徴及び利点は、以下の図面及び詳細な説明を考査することによって当業者に明らかとなる。全ての追加のシステム、方法、特徴及び利点は、この記述内に含まれ、本発明の範囲内にあり、添付の請求の範囲によって保護されるように意図されている。
本発明は、以下の図面を参照することによってよりよく理解することができる。図面中の構成要素は、本発明の原理を説明するために配置されており、必ずしも、大きさや強調に対するものではない。さらに、異なる図面を通して、同じ参照数字は対応する要素を示している。
【００１３】
【発明の実施の形態】
本発明の現時点での好ましい装置及び方法を説明する。
エミュレーションに最適であるためには、論理チップは、何回でも電気的に再構成可能であり、あらゆるデジタル結合論理ネットワークに応じて構成可能であり、あらゆるデジタルネットワークに自由に接続可能である必要がある。以下の一般的な論議は、図面を参照して一般的な背景を提供する。さらに、プログラマブル論理システム及び相互接続ネットワークの詳細な説明は、本出願の譲受人に譲り受けられている、米国特許第５,０３６,４７３号、米国特許第５,１０９,３５３号、米国特許第５,４４８,４９６号及び米国特許第５,４５２,２３１号に記載されている。米国特許第５,０３６,４７３号、米国特許第５,０３６,３５３号、米国特許第５,４４８,４９６号及び米国特許第５,４５２,２３１号の記載は、全て参照により組み込まれている。
【００１４】
本発明にしたがって構築された集積回路は、結合論理機能（例えば、ＡＮＤゲート、ＯＲゲート）、シーケンシャル論理機能（例えば、フリップフロップ、ラッチ等）及び蓄積機能を提供するようにプログラム可能な内部論理ブロックを含んでいる。各論理ブロックは、論理ブロックを特別な論理ブロックそれぞれの外部の回路に相互接続するために使用される、複数の入力／出力（“Ｉ／Ｏ”）ピンを含んでいる。
また、集積回路は、外部入力／出力（“Ｉ／Ｏ”）パッド及びプログラマブル相互接続を含んでいる。外部Ｉ／Ｏパッドによって、他のチップ及び装置に接続することができる。プログラマブル相互接続は、論理ブロック及び／またはＩ／Ｏパッド間に信号を通す。特に、プログラマブル相互接続は、部分クロスバー相互接続構造を使用する。
【００１５】
３つのレベルの階層を有するプログラマブル論理チップが、図１Ａに示されている。このチップの階層は、後述する。
第１レベルの論理ブロックは、Ｌ０ブロック５２５として表される。Ｌ０ブロック５２５は、それぞれ小さい結合論理機能及び／または少量の蓄積を提供する、多くの論理要素（ＬＥ）５２６を含んでいる。時には、論理要素は、集積回路内の基本構築ブロックであるため、論理ユニット（ＬＵ）として表される。ＬＥ５２６は、Ｘ０相互接続５２７として表される相互接続によって相互接続される。Ｘ０相互接続５２７は、相互接続の次のレベルへの接続を可能にするためのＩ／Ｏピン５２８を有している。
【００１６】
第２レベルの論理ブロックは、Ｌ１ブロック５０５として表されている。Ｌ１ブロック５０５は、Ｘ１相互接続５２１として表される相互接続によって相互接続される多くのＬ０論理ブロック５２５を含んでいる。Ｘ１相互接続５２１は、次のレベルに接続するためのＩ／Ｏピン５２２を有している。
第３レベルの論理ブロックは、Ｌ２ブロック４２５として表されている。Ｌ２ブロック４２５は、多くのＬ１論理ブロック５０５を含んでいる。Ｌ１論理ブロック５０５は、Ｘ２相互接続５１１として表される相互接続によって相互接続される。Ｘ２相互接続５１１は、Ｉ／Ｏピン５１２を有している。
本発明の現時点での好ましい実施の形態では、単一のＬ２論理ブロックは、全てプログラム可能な論理チップを有している。そのＩ／Ｏピン５１２は、チップがまとめられる時に外部のピンまたは導線に接続されるチップＩ／Ｏパッド４３５に接続する。
【００１７】
各レベルでの論理ブロックの論理容量を支持するために、十分なＩ／Ｏピンが必要である。Ｘ０相互接続５２７、Ｘ１相互接続５２１及びＸ２相互接続５１１の各々の好ましい大きさは、相互接続されるＩ／Ｏピンの数の関数である。最適なバランスは、使用されるレベルの総数、各レベルにおける論理ブロックの大きさ、各レベルにおける論理ブロックＩ／Ｏピンの数及び相互接続の最終の大きさの間である。
【００１８】
図１Ａの多段レベル階層状に相互接続されているプログラマブル論理チップ内のＸ０相互接続５２７、Ｘ１相互接続５２１及びＸ２相互接続５１１は、多くの異なる構造の１または複数を使用可能である。例えば、クロスバーベースの構造(crossbar-based  architecture)は、完全にまたは部分的に埋められている単一の簡単なクロスバー、あるいは複数の簡単なクロスバーを有する部分クロスバー相互接続が使用される。
【００１９】
図１Ａのプログラマブル論理チップの１つの可能なフロアプラン(floor  plan)が、図１Ｂに示されている。図９は、図１ＢのＬ２論理ブロック１１００配列の論理構造を示している。
単一のＬ２論理ブロック４２５は、エミュレーション及びプロトタイピングチップとして機能するように構成されている。Ｌ２チップの階層４２５では、複数のＸ２クロスバーが、複数のＬ１論理ブロック５０５間のＸ２部分クロスバー相互接続５１１を形成する。各Ｌ１論理ブロック５０５は、複数のＬ０論理ブロック５２５間にＸ１部分クロスバー相互接続５２１を形成する複数のＸ１クロスバーを含んでいる。各Ｌ０論理ブロック５２５は、複数の論理要素（図示していない）を相互接続するＸ０相互接続を含んでいる。入力／出力パッド４３５は、Ｌ２論理ブロックＩ／Ｏピンに接続される。いくつかのパッドは、第２の制御目的と、電力及びグランド接続のために使用される。
【００２０】
Ｘ２部分クロスバー相互接続１１２０内には、７２のＸ２クロスバー１１１０が存在する。各Ｘ２クロスバーは、それぞれＬ１論理ブロックＩ／Ｏピンに接続される、３２個のローカル端子(local  terminal)を有している。各Ｘ２クロスバーは、それぞれＬ２論理ブロックＩ／Ｏピン１１９０である、１６個の外部端子を有している。Ｌ２論理ブロック１１００は、４３２個のパッド１１９０を含んでいる。そのうちの２８８個のパッドは、Ｌ２論理ブロックＩ／Ｏピン１１９０に接続されるパッドである。残りのパッドは、第２の制御目的、電力及びグランド接続のために使用される。
【００２１】
それぞれ２８８個のＩ／ＯピンとＸ１部分クロスバー相互接続１１５０を含んでいる、８個のＬ１論理ブロック１１３０が存在する。Ｘ１部分クロスバー相互接続１１５０は、１８個のＸ１クロスバー１１４０を有している。各Ｘ１クロスバーは、それぞれＬ０論理ブロックＩ／Ｏピンに接続されている、３２個のローから端子を有している。各Ｘ１クロスバーは、それぞれＬ１論理ブロックＩ／Ｏである、１６個の外部端子を有している。各Ｌ１論理ブロック１１３０は、それぞれ７２個のＩ／ＯピンとＸ０相互接続１１７０を含んでいる、８個のＬ０論理ブロック１１６０を含んでいる。Ｘ０相互接続１１７０は、３６個の論理要素（ＬＥ）１１８０を接続する。各ＬＥ１１８０は、メモリ要素、フリップフロップ／ラッチ及びプログラマブル遅延要素を含んでいる。各Ｌ１論理ブロック１１３０内には、２８８個のＬＥ１１８０が存在する。したがって、Ｌ２論理ブロック１１００内には、２３０４個のＬＥ１１８０が存在する。
このようなプログラマブル論理チップ上のＬ２論理ブロックは、大きさとルーティングの効率によってのみ選択が指示される、多くの他の可能な配置に応じて配列される。
【００２２】
図１Ａの多段レベル階層状に相互接続されたプログラマブル論理チップの特別な実施の形態である図２に示すように、１個のＬ０ブロック５２５に３６個のＬＥ５２６、１個のＬ１ブロック５０５に８個のＬ０ブロック５２５、１個のＬ２ブロックに８個のＬ１ブロック５０５が存在する。１個のＬ１ブロック５０５に１８個のＸ１相互接続ネットワーク５２１、合計１１５２のＩ／０信号を搬送するＬ２ブロック１個に７２個のＸ２ブロック５１１、そして２８８個のＩ／Ｏブロック４３５が存在する。
勿論、本発明は、これらの構成要素の特定の数に限定されるものではない。特別の構成要素の数及び多段レベル階層におけるレベルの数は、任意の適当な数の中から選択可能である。
【００２３】
次に、クロスバー相互接続階層の例を説明する。
簡単なクロスバー４１０の概略ブロック図を図３に示す。クロスバー４１０は、ローカル端子４１１間に接続を確立するようにプログラム可能である。クロスバー４１０が完全に埋められる場合には、任意のローカル端子４１１から１または複数の他のローカル端子４１１への接続がプログラムされる。部分的に埋められる場合には、全ての接続ではないが、いくつかの接続がプログラムされる。部分的に埋められるクロスバーは、ハードウェアに関しては安いコストであるが、相互接続に関しては低い能力であり、また、接続を決定するためにより複雑なソフトウェアまたは追加のソフトウェア手続が必要である。
【００２４】
クロスバー４１０のための外部端子４１２が、図３に示されている。
クロスバー４１０は、外部端子４１２とローカル端子４１１間の接続を確立することができる。外部端子４１２と他の外部端子４１２間の接続は、必ずしも必要ではない。クロスバー４１０が部分クロスバー相互接続において使用される場合には、ローカル端子４１１は相互接続される論理ブロックに接続され、外部端子４１２は高レベル論理ブロックのためのＩ／Ｏピンとして使用される。
本明細書中に言及され、参照によって組み込まれている米国特許及び米国特許出願に記載されている多くの形式のクロスバーが使用可能である。これらのクロスバー４１０の実装形式は、本出願を満足するために使用可能な十分なルーティング性を有している限り、本発明の概念の範囲内である。例えば、クロスバー４１０は、ローカル端子４１１及び外部端子４１２の各々がプログラム可能な双方向送受信機（図示していない）に接続される、クロスポイント式クロスバー(crosspoint-type  crossbar)であってもよい。
更に、任意の相互接続階層における変更も予想される。例えば、チップ上に部分クロスバー相互接続を実装する場合には、相互接続される論理ブロック、クロスバー及び相互接続線が、全て同じ媒体中に存在し、異なるパッケージに分けられないので、システムレベルでの形式とは異なる形式を採用する。
改良された論理要素を使用するエミュレーションシステムは、チップ上に部分クロスバー相互接続を実装するいくつかの方法を含んでいる。部分クロスバー相互接続は、単一レベル部分クロスバー相互接続よりも効率的に多数の論理ブロックを結ぶために、クロスバーの多段レベルを使用して、階層的に用いられる。
【００２５】
各Ｌ１論理ブロック５０５の構成要素は、図４に示されている。
Ｘ１相互接続５２１は、クロスバー４１０（図３に示されている）の例である、ローカル端子９１６及び外部端子９１５を有するＸ１クロスバー５２０と、Ｌ０論理ブロックＩ／Ｏピン９２５を有するローカル端子９１６を接続する導線とにより構成されている。このＸ１相互接続５２１では、Ｘ１クロスバー５２０は、Ｌ０論理ブロック５２５に接続される。これにより、各Ｌ０論理ブロック５２５のＩ／Ｏピン９２５は、各Ｌ０論理ブロック５２５上で同じ分割を使用して、適当なサブセットに分割される。各Ｘ１クロスバー５２０のローカル端子９１６は、各Ｌ１論理ブロック５０５それぞれからのＩ／Ｏピン７２５の同じサブセットに接続される。外部端子９１５は、図２に示されているように、Ｘ２クロスバー５１０に接続されるＬ１論理ブロック５０５のＩ／Ｏピン７２５に接続される。
【００２６】
Ｌ０論理ブロック５２５の数、各Ｌ０論理ブロック上のＩ／Ｏピン９２５の数、Ｘ１クロスバー５２０の数及び各Ｘ１クロスバー５２０上のローカル端子９１６の数にしたがって、各Ｌ０ブロック５２５とＸ１クロスバー５２０対の間の導線の数“ｎ”が決まる。例えば、それぞれに６４個のＩ／Ｏピン９２５を有する８個のＬ０論理ブロックと、それぞれ３２個のローカル端子９１６を有する１６個のＸ１クロスバー５２０が存在する場合、“ｎ”は４である。すなわち、各Ｌ０ブロック５２５とＸ１クロスバー２５０の対の間に４本の導線が存在する。“ｎ”の値が大きいほど、ルーティングが容易となり、ルーティングの成功の可能性が高くなる。
【００２７】
クロスバー４１０の他の実装方法は、集積回路を設計する時に通常実行される、単一のシリコン型上における構成要素の直線配置により適合しており、また、作用上の利点を有しているため、特別な応用のためのプログラマブル論理チップでの使用により適している。このように、例えば、クロスバー４１０は、マルチプレクサ形式のクロスバーとして実装可能である。このクロスバーのマルチプレクサ実装は、クロスバーのプログラミングに比較的に影響されない、有利な伝播遅延を有している。
クロスバーの前記した形式についての詳細は、例えば、ライアン＆ライアンの整理番号が２２０／２９０、発明の名称が「最適化エミュレーション及びプロトタイピング構造」である米国特許出願番号０８／９６８,４０１号に開示されている。
【００２８】
図５は、論理チップ上の関係する物理配列におけるＬ０論理ブロック５２５の基本構成要素を示している。
Ｘ０相互接続５２７は、長さ方向の一方側または両側に沿って配置されている論理要素（ＬＥ）５２６を有している。Ｌ０ブロック５２５のＩ／Ｏピン５２８は、Ｘ０相互接続５２７の端部の一方側または両側に設けられている。Ｘ０相互接続５２７は、完全に埋められる簡単なクロスバーまたは部分的に埋められる簡単なクロスバーまたは双方の組み合わせを含む、多くの異なる形式の１つ内に構築される。
【００２９】
図６は、Ｌ０論理ブロック５２５内のＸ０相互接続５２７の１つの可能な実装を示している。
Ｘ０相互接続５２７は、２つのクロスバー、Ｘ０入力クロスバー６００及びＸ０出力クロスバー７００を有している。これにより、各クロスバーは、その機能に応じて最適化される。このＸ０相互接続５２７の特別な例では、クロスバーの他の形式も考慮されるが、Ｘ０入力クロスバー６００は完全に埋められるクロスバーであり、Ｘ０出力クロスバー７００は部分的に埋められるクロスバーである。
図７は、図６の完全に埋められるＸ０入力クロスバー６００の論理表示を示し、Ｘ０入力クロスバー６００（円６０２で示されている）に接続される各ＬＥの各入力を示している。
同様に、図８は、部分的に埋められるＬ０出力クロスバーの論理表現であり、Ｌ０出力クロスバー（円７０２によって示されている）に接続されるＬＥのいくつかの出力を示している。
図６に戻り、Ｘ０入力クロスバー６００は、ＬＥ出力５６０及びＬ０論理ブロックＩ／Ｏピン５２８から入力を得る。Ｘ０入力クロスバー６００の出力は、各ＬＥ５２６の入力５５０に接続される。Ｘ０出力クロスバー７００は、ＬＥ出力５６０から入力を得る。その出力は、Ｌ０論理ブロックＩ／Ｏピン５２８に接続される。
【００３０】
図１０及び１１は、本発明の実施の形態にしたがって構築された論理要素ＬＥ５２６を示している。図１１は、図１０に示されていない詳細を示しているが、図１３及び１４に関連して後述するオプションの入力分配特徴を示していない。
論理要素５２６は、６４ビットＲＡＭ１００、ＲＡＭ１００内のルックアップテーブル９８、オプションの遅延要素１１６及びプログラマブルフリップフロップ／ラッチ１４０を含んでいる。論理要素５２６には、調査フリップフロップ（プローブフリップフロップ）(probe  flip  flop)１５０及び捕獲アラッチ（キャプチュアラッチ）(capture  latch)１６０が接続されている。
２つのクロック信号、ＣＫ１１４と高速（ＦＡＳＴ）クロック１１２が存在する。６４ビットＲＡＭ１００は、アドレスビット１０２、データ入力１０４、書き込みイネーブル信号１０６及びＣＫクロック１１４を受信する。フリップフロップ／ラッチ１４０は、データ１１８、アクティブハイクロック(active-high  clock)イネーブル信号１４２、クロックＣＫ１１４、ＦＡＳＴクロック１１２、非同期リセット信号１２２及び非同期セット信号１２４を受信する。
論理要素５２６への６つの入力は、データビット出力１１４を出力するルックアップテーブル９８にアドレスビットを供給する。論理要素５２６への入力は、典型的にはデータビットであるが、クロックとしても使用可能である。例えば、論理要素入力信号は、活性化されている時にはいつも、フリップフロップ／ラッチ１４０をクロックするために使用可能である。
【００３１】
図１１は、マルチプレクサ１２２のような入力マルチプレクサと、ＲＥＳＥＴ信号１２２の値を選択するために使用されるプログラミングビット１２４を示している。同様に、入力マルチプレクサ１２６はプログラミングビット１２８によって制御され、入力マルチプレクサ１３０は複数のプログラミングビット１３２によって制御される。
ここで、入力マルチプレクサは、フリップフロップ／ラッチ１４０へのＣＫクロック信号１１４、クロックイネーブル信号１４２、ＳＥＴ信号１２４及びＲＥＳＥＴ信号１２２の状態を制御する。プロセッサは、ＲＡＭあるいはＥＰＲＯＭ内に構成ビット(configuration  bit）を書き込み可能である。
【００３２】
この特別な実施の形態では、ルックアップテーブル９８は、６までの変数を含む結合機能を実行する静的ランダムアクセスメモリ（ＳＲＡＭ）である。フリップフロップ／ラッチ１４０のＣＫクロック信号１１４、クロックイネーブル信号１４２、ＲＥＳＥＴ信号１２２及びＳＥＴ信号１２４を制御するためにルックアップテーブル９８と入力マルチプレクサを組み合わせると、その入力が任意の信号を搬送するために自由に交換可能である論理要素５２６が生じる。例えば、与えられた信号が６つの論理要素入力ラインの１つに伝送されると、与えられた機能を種々の方法で実装することができる、適応性のある論理要素が生成される。論理要素入力が交換されると、それに応じてルックアップテーブル９８の内容が変更され、論理要素は同じ機能を実装することができる。
同様に、入力マルチプレクサ（ＣＫクロック、クロックイネーブル、リセットまたはセット）を制御する論理要素入力が交換されると、マルチプレクサを制御する構成ビットは、交換された入力を反映するように変更される。論理要素５２６への各入力の使用のそのような適応性によって、高レベルのブロック（Ｌ１及びＬ２ブロック等）のより良いルーティング性が生じる。
これらの論理要素５２６を使用することにより、殆どすべての結合またはシーケンシャル論理機能が実装可能である。また、論理要素５２６は、与えられた機能を実行するためにＬ０ルーティングの間自由に交換される。
【００３３】
遅延要素１１６は、ＲＡＭ１００からデータ出力１１４を受信し、ＦＡＳＴクロック１１２によってクロックされる。
フリップフロップ／ラッチ１４０は、論理要素５２６によって実装される機能にしたがって、ラッチまたはフリップフロップとして動作する。フリップフロップは、クロック信号のエッジにより、そのＤ入力ラインのデータをＱ出力ラインに転送する。一方、ラッチは、クロック信号が低レベルに低下するまで、Ｄ入力ラインからのデータをＱ出力ラインに連続的に転送する。
データインマルチプレクサ(data-in  multiplexer)４４３は、遅延要素１１６によって発生される遅延をデータ流内に選択的に挿入する。
フリップフロップ／ラッチ１４０は、データを予めロード可能である。フリップフロップ／ラッチ１４０は、立ち上がりエッジでトリガーされるフリップフロップまたは透明な（透過する）ラッチ(transparent  latch)であり得る。その入力は、ＲＡＭ１００からの出力１１４または遅延要素１１６からの遅延された出力である。データインマルチプレクサ４４３の出力は、フリップフロップ／ラッチ１４０のＤ入力を駆動する。フリップフロップ／ラッチ１４０のＱ出力は、データアウトマルチプレクサ(data-out  multiplexer)４４２を介して論理要素の出力ピン１２０に供給され、同じＬ０論理ブロック内の他の論理要素に進むかＬ０論理ブロックからＸ１クロスバーネットワークに出る。
【００３４】
フリップフロップ／ラッチ１４０は、特別な機能を実装するために論理要素５２６に対して必要とされる時に使用される。例えば、論理要素５２６が、ルックアップテーブル９８によって提供される純粋な結合機能を簡単に実装する場合には、フリップフロップ／ラッチ１４０が必要となる。
フリップフロップ／ラッチ１４０からのＱ出力は、論理要素の出力ピン１２０に進む。このように、論理要素５２６のＱ出力１２０は、直接にＲＡＭ１００からの出力１１４（遅延要素１１６によって加えられた遅延を有しまたは有さないで）またはフリップフロップ／ラッチ１４０からの出力Ｑを選択するようにプログラム可能である。
ＲＡＭメモリ出力１１４を論理要素５２６の構成要素を介して（直接よりも）Ｘ０相互接続ネットワークに送信することにより、メモリ出力をルーティングするために、追加のＸ０ルーティングラインを必要としない。代わりに、ＲＡＭメモリ出力１１４は、Ｘ０相互接続ネットワークを得るために、論理要素５２６の部分を単純に及び有意義に使用する。
同様に、ＲＡＭ１００は、信号を受信するために論理要素の入力ラインのいくつかを使用可能であり、追加のＸ０ルーティングラインは必要でない。さらに。６つの論理要素入力のいくつかのみがメモリ機能によって消費される場合には、残りの論理要素入力は、結合またはシーケンシャル論理機能に対して論理要素５２６によって使用可能である。いくつかの自由な入力ラインを有する論理要素５２６は、大きなメモリまたは異なる構成のメモリとして動作するために、ラッチデータ、ラッチアドレスまたは時間多重の複数のメモリに対して使用される。したがって、回路リソースは、より効果的及び効率的に使用される。
この論理要素設計は、必要な論理要素入力への接続の指示に対して、増加された密度、ルーティングの容易性及び自由度を提供する。この論理要素設計は、さらに、完全クロスバーの代わりに部分的に埋められるクロスバーを用いて容易にルーティングすることができる。
【００３５】
ＣＫクロック信号１１４はフリップフロップ／ラッチ１４０へのクロック信号として作用し、それによって、フリップフロップ／ラッチ１４０は、データをＤ入力ラインからＱ出力ラインに転送する。クロックイネーブル信号１４２は、フリップフロップ／ラッチ１４０がＣＫクロック信号１１４に応答することを許可する。ＲＥＳＥＴ信号１２２は、フリップフロップ／ラッチ１４０をクリアし、Ｑ出力を「０」にリセットする。ＳＥＴ信号１２４は、フリップフロップ／ラッチ１４０のＱ出力を「１」にセットする。
【００３６】
公知のシステムでは、４ビットルックアップテーブルが、最小面積を有するテーブルを生じる。しかしながら、本発明にしたがって構築されるシステムの好ましい実施の形態では、６入力ルックアップテーブル９８を有している。６入力ルックアップテーブル９８は、図１０及び１１の６４ビットＲＡＭ１００の内部に存在する。
ルックアップテーブル９８への入力の数が増加すると、粒状性が増加するが、増大したシリコン面積のコストが増大する。要求される相互接続の数を減少させる粒状性の増大は、システムの容量及び実行速度を改良する。基本的に、粒状性が増大すると、論理要素２５６はより多くのゲートを有し、論理要素５２６内のメモリ１００は大きくなる。例えば、実施の形態では、６入力ルックアップテーブル９８は１６ビットメモリを許可するが、４入力ルックアップテーブルは４ビットメモリしか許可しない。
【００３７】
フリップフロップ／ラッチ１４０は、リセット入力１２２と独立しているセット入力１２４を有している。図１２は、マスターラッチ２００、スレーブラッチ２０２、マスターラッチとスレーブラッチ間の遅延量を決定するスレーブパルサー(slave  pulser)１８０を含む、フリップフロップ１４０の内部回路を示している。マスターラッチ２００とスレーブラッチ２０２の双方が使用される場合には、図１２の回路はフリップフロップとして動作する。スレーブラッチ２０２のみが使用される場合には、回路はラッチとして動作する。
したがって、独立したセット入力とリセット入力を有することによって、必要なゲートの数を減少させる結合論理の数が少なくなり、また、これらのゲートはクロック信号を必要とするので、ホールドタイム状態を改良する。追加の結合論理は、回路の複雑性及びタイミング問題を増加させる。しかしながら、独立したセット入力及びリセット入力を実装するためには、追加のピンが必要である。
【００３８】
図１７は、そのうちの２つが論理要素５２６のフリップフロップ１４０であるラッチ回路を示している。回路１４１は、ユーザがメモリセル３６０の状態を変化することを許可する回路３６２、３６４を有している。言い換えれば、回路３６２、３６４は、メモリセル３６０にラッチ機能を追加する。また、回路１４１は、非同期のセット入力１２２とリセット入力１２４を有している。
【００３９】
高速クロック１１２（図１１のＦＡＳＴクロックまたはＭＵＸＣＬＫ参照）は、その出力が、駆動部（ドライバ）によってゲートされた後、スレーブラッチ２０２をゲートするために進行するスレーブパルサー１８０を駆動する。マスターラッチ２００のゲーティングは、ＬＯＡＤ信号及びクロックＣＫ１１４によって決定される。クロックイネーブル信号１４２は、データ入力Ｄを受信する駆動部を制御する。各マスターラッチ２００及びスレーブラッチ２０２内のセット信号１２４及びリセット信号１２２は、独立しており、分離している。
ホールドタイム妨害は、スレーブラッチ２０２のための新しいクロック信号を形成することにより、それまでの状態のフリップフロップ／ラッチ１４０のクロックＣＫ１１４から出力Ｑ１２０までの時間を延長することによって、データ通路ソースにおける遅延を加算することにより軽減される。
クロックＣＫ１１４は、低レベルの時にマスターラッチ２００を開く。通常、クロックＣＫ１１４は、高レベルの時にスレーブラッチ２０２を開く。しかしながら、ＰＳＤＬＹ［１］が「１」である場合には、スレーブラッチ２０２は、２つのスレーブパルサー出力Ｑ０またはＱ１の１つによって開けられる。Ｑ０は、ＣＫクロック１１４の立ち上がりエッジの後にＦＡＳＴクロック１１２が高レベルになると同時に高レベルとなり、ＦＡＳＴクロック１１２が低レベルになる時に低レベルとなる。これにより、スレーブラッチ２０２を簡単に開く。
効果は、クロックＣＫから出力Ｑ１２０までの時間をＦＡＳＴクロックの１〜２期間延長することである。Ｑ１出力が１サイクル後もパルスを出力するように選択されている場合には、クロックＣＫから出力Ｑ１２０までの時間は、ＦＡＳＴクロックの２〜３期間延長される。
【００４０】
フリップフロップ／ラッチ１４０がラッチとして使用される場合には（ＰＦＦ＝０）、マスターラッチ２００は透明であり、スレーブラッチ２０２はラッチである。ＰＳＤＬＹ［１］が「１」である場合には、ラッチは、クロックＣＫ１１４の持続期間開かない。代わりに、ＣＫクロック１１４の立ち上がりエッジの後、１〜３ＦＡＳＴクロックサイクルからＦＡＳＴクロックの半期間開かれる。
また、論理要素５２６は、図１０及び１１に示されていないが、当該技術分野では周知である、追加の回路が含まれている。例えば、論理要素５２６は、さらに、ルックアップテーブル９８をプログラミングするための論理、構成ビットをプログラミングするための論理、フリップフロップ／ラッチ１４０にデータをロード（負荷）するための論理、及び／または設計をデバッグするための外部ポートを介してフリップフロップ／ラッチ１４０の内容を読み出すための論理を有している。
【００４１】
２つの論理要素５２６が対とされることによって、それらのＲＡＭメモリ（１６×１）は、（１２８×１）ＲＡＭを形成するために結合される。これを達成するために、図１３に示すように、論理要素５２６の各対は、プログラミングビット（「ＰＡＩＲ」が付されている）２２２、入力マルチプレクサ対２１８、２２０及びゲート対２２４、２２６を有している。論理要素５２６は、同一である。
ＳＥＬＥＣＴ信号２２５とＰＡＩＲ信号２２２は、論理要素５２６を制御する。論理要素５２６間の相互接続ネットワークは、論理要素５２６がデータを交換することを許可する（図１３のＡＬＴＩＮ及びＡＬＴＯＵＴ参照）。
アドレスＡＤＤＲ２１０と制御入力は、各論理要素５２６内で別々に分配され、ＲＡＭアドレスのためのＡ［５：０］と、制御入力及びクロック入力のためのＣ［５：０］を形成する。Ｃ［５：０］は、ＷＥ１０６、データ入力Ｄｉｎ１０４、セット１２４、リセット１２２、クロック１１４及びクロックイネーブル１４２入力である。ＰＡＩＲプログラミングビットが「０」である場合には、入力分配は行われない。
Ｘ０入力クロスバーからの偶数側の６つの入力２０６（「Ｘ０ＩＮ.ＬＥＡｎ.［５：０］」が付されている）は、偶数論理要素(even  logic  element)５２６のアドレス入力２１２及び制御入力２１０の双方に直接にルーティングされる。同様に、Ｘ０入力クロスバーからの奇数側の６つの入力２０８（「Ｘ０１Ｎ.ＬＥＡｎ＋１.[５：０]が付されている）は、奇数論理要素(odd  logic  element)５２６のアドレス入力２１６及び制御入力２１４の双方にルーティングされる。このように、論理要素５２６は、入力を分配しない。両論理要素５２６へのＳＥＬＥＣＴ入力２２５は真(true)であり、ＲＡＭの書き込みイネーブルＷＥ１０６及びＲＡＭのＤｏｕｔ出力１１４をイネーブルする。
【００４２】
ＰＡＩＲプログラミングビットが「１」である場合には、入力分配はない。Ｘ０入力クロスバーからの奇数側の６つの入力２０８は、両論理要素５２６のアドレス入力２１２、２１６にルーティングされる。Ｘ０入力クロスバーからの偶数側の６つの入力２０６は、両論理要素５２６の制御入力２１０、２１４にルーティングされる。このように、合計１２の入力が、両論理要素５２６によって分配される
奇数側の６つの入力２０８は、両論理要素５２６内のＲＡＭをアドレスする。偶数側の６つの入力２０６は、データインＤｉｎ１０４、書き込みイネーブル１０６、両論理用要素５２６のためのフリップフロップ制御及び７番目のアドレスビット（偶数側のビット３）を提供する。７番目のアドレスビットが「０」である場合には偶数論理要素５２６のＳＥＬＥＣＴ入力２２５が指示され、７番目のアドレスビットが「１」である場合には奇数論理要素５２６のＳＥＬＥＣＴ入力２２５が指示される。選択された論理要素５２６に対しては、書き込みイネーブル１０６が能動化され、自身のＲＡＭ出力がフリップフロップ１４０の出力として使用される。切断された論理要素５２６に対しては、書き込みイネーブル１０６が抑制され、他の論理要素５２６のＲＡＭ出力が他の論理要素のＡＬＴＯＵＴ出力からそのＡＬＴＩＮ入力で受信され、このＲＡＭ出力がフリップフロップ１４０の出力として使用される。
ここで、論理要素対は、単一の［１２８×１］ＲＡＭとして動作する。勿論、各論理要素内のメモリの大きさが変更される場合には、論理要素対は、異なる大きさのメモリとして動作する。論理要素５２６からの両出力１２０は、使用可能である。対とされた論理要素５２６のＲＡＭ１００は、他の方法で、単一の論理要素の場合と同じ動作をする。
【００４３】
図１４に戻り、各論理要素５２６は、ＳＥＬＥＣＴ２２５及びＰＡＩＲ２２２入力を受信する。ＰＡＩＲが「０」の場合（通常の場合）には、ＰＷＥ１が、［１６×１］ＲＡＭモードに対してＲＡＭアドレス入力４及び５を抑制するように設定する。ＰＡＩＲが「１」である場合には、抑制がブロックされ全ての６つのアドレス入力が使用される。ＳＥＬＥＣＴ信号２２５が「０」である場合には、ＲＡＭ１００への書き込みイネーブル１０６がブロックされ、他の論理要素５２６からのＲＡＭの出力が、ＡＬＴＩＮ通路の使用に代えて選択される。ＳＥＬＥＣＴ信号２２５が「１」である場合には、論理要素は通常に動作する。
【００４４】
図１０及び１１に示されているように、ＬＥは、オプションのクロック遅延要素１１６を有している。ＰＤＤＬＹプログラミングビットが「１」である場合には、遅延要素１１６は、データ通路出力に遅延を加える。遅延要素１１６は、ＦＡＳＴクロック１１２によってクロックされるため、遅延量は正確に制御される。古いシステムは、その遅延が半導体の処理に依存し、そのため、厳密でなく制御できない遅延要素を使用した。実施の形態では、遅延要素１１６は、１／２クロックサイクルと２クロックサイクルの間の遅延を有するように制御可能である。遅延要素１１６の１つの実施の形態は、直接に接続され、ＦＡＳＴクロック１１２によってクロックされる、１対のエッジトリガフリップフロップ(edge-triggered  flip  flop)である。
遅延要素１１６によって、システムは、フリップフロップ／ラッチ１４０を論理要素として扱うことができる。遅延要素１１６によって遅延量を調整することにより、システムは、入力信号がホールドタイム障害を生ずることなくより早く変化できることを許容しながら、フリップフロップ／ラッチ１４０に要求されるホールドタイムを軽減することができる。
【００４５】
１つまたは２つのＦＰＧＡの典型的なユーザは、チップによって保証されたホールドタイムを有する。しかしながら、エミュレーションシステム等の巨大なシステムでは、システム内の全てのクロックを同期化させるために特別の設計を考慮していない場合には、クロックひずみは、ホールドタイムを保証できないほど大きくなる。１／２クロックサイクル遅延から２クロックサイクル遅延範囲が不十分である場合には、遅延要素１１６に供給されるＦＡＳＴクロック１１２は、減少または増加する。
実施の形態では、３２メガヘルツ（ＭＨｚ）または６４ＭＨｚのＦＡＳＴクロック１１２を使用しているが、任意の速度のクロックが考慮される。ＦＡＳＴクロック１１２の期間を変更することによって、必要な多くの遅延が挿入可能である。追加のデータ通路遅延は、論理要素を直列に結合し、通過遅延(pass-through  delay)に対して最後ではないが全てをセットすることによって、プルグラム可能である。
【００４６】
ＦＡＳＴクロック１１２は、遅延要素によって提供される遅延が正確に制御可能となるように遅延要素１１６をクロックするために使用される。また、ＦＡＳＴクロック１１２は、フリップフロップ／ラッチ１４０内のタイミング修正論理２９８（図１５、２１参照）をクロックするために使用される。
図２１に示されているように、フリップフロップ１４０は、２つのラッチ２００及び２０２を有している。ラッチ２００はマスターステージ(master  stage)であり、ラッチ２２０はスレーブステージ(slave  stage)である。論理要素ＬＥ５２６が、フリップフロップベースの設計(flip  flop  based  design)をエミュレートするために使用される場合には、両スレーブが使用される。論理要素ＬＥ５２６が、ラッチベースの設計(latch-based  design)をエミュレートする場合には、スレーブラッチのみが使用される。
タイミング修正論理２９８は、正確な幅の２つの遅延パルスを生成するために、クロック１１４の立ち上がりエッジを使用する。２つのクロックのうちの１つは、スレーブラッチ２０２をクロックするために選択される。フリップフロップベースの設計をエミュレートする時には、スレーブステージをクロックするための遅延パルスを生成する回路２９８を使用することにより、マスターステージ２００のためのクロックとオーバーラップしないことが保証される。そして、回路２９８は、エミュレートされた回路内の後続するフリップフロップへのクロックひずみ(clock  skew)を補償するため、したがって、ホールドタイムを保障するために、データ出力を少し遅延させる。非オーバーラップクロック信号が、図１６に示されている。
【００４７】
タイミング修正回路２９８は、図１５に示されているように、遅延されたスレーブラッチクロックを発生するパルス形成回路である。
非同期エッジ検出回路２７０は、クロック信号１１４を受信し、ＮＡＮＤゲート２７２、２７４、２７６、２７８及び２８０を有している。クロック信号１１の立ち上がりエッジは、ＴＲＩＧ信号の能動高レベル主張(active  high  assertion)を生成する。フリップフロップ３００は、ＦＡＳＴクロック１１２（図１５では「ＦＣＬＫ」が付されている）の立ち上がりエッジによりＴＲＩＧ信号の主張を検出する。フリップフロップ３１０は、ＦＡＳＴクロック１１２の立ち下りエッジによりＴＲＩＧ信号の主張を検出する。
デモルガンの変形ＮＡＮＤゲート３１６は、フリップフロップ３００、３１０の出力を受信し、基本的に、ＦＡＳＴクロック１１２の立ち上がり及び立ち下りエッジに同期化されたＴＲＩＧ信号の新しい変形であるＰＮ信号を生成する。
フリップフロップ３２０と３５０は、ＦＡＳＴクロック１１２の立ち上がりエッジによってクロックされる第１のステージ及びＦＡＳＴクロック１１２の立ち下がりエッジによってクロックされる第２のステージを有する２つのステージシフトレジスタを形成する。ＰＮ信号はこれらの２つのステージを通して伝播するため、ＡＮＤゲート３５６は、ＦＡＳＴクロック１１２の立ち上がり及び立ち下がりエッジの位相差に等しい幅を有する能動高レベルパルス(active  high  pulse)を信号Ｑ０に生成する。信号Ｑ１は、同様の方法で生成されるが、ＦＡＳＴクロック１１２の１サイクルだけ遅延される。このように、Ｑ０とＱ１は、論理要素構成を介して使用するために選択される、遅延されたスレーブラッチ２０２のクロックである。このタイミング修正回路２９８は、図１６のタイミング図を生成する。
【００４８】
また、システムは、図１１で捕獲ラッチと呼ばれているシャドウレジスタ(shadow  register)を有している。
捕獲ラッチ１６０は、図１８により詳しく示されている。ＣＡＰＥＮＢ信号によってゲートされると、捕獲ラッチ１６０は、メモリセル３６１内のＬＥ５２６のＱ出力１２０のコピーを蓄積し、デバッグ目的のために使用される。捕獲アラッチ１６０の特別の実施の形態では、図１８では非同期セット及びリセット入力が存在しないことを除いて、図１７に示されているラッチ回路と同じ回路を使用する。
【００４９】
捕獲ラッチ１６０の他に、システムは、再生ＲＡＭと呼ばれるシャドウＲＡＭを有している。
ＲＡＭ１００は、例えば、［１６×４］（列×行）ＲＡＭである。ＲＡＭ１００は、４つの個別の［１６×１］ＲＡＭとして動作可能である。４つのＲＡＭの１つがエミュレーションデータを格納するために使用される場合には、他の３つの［１６×１］ＲＡＭは、再生ＲＡＭとして動作する。再生ＲＡＭは、ＲＡＭ１００に追加の機能を与えることによって、論理要素５２６の現存するＲＡＭ１００を改良する。
ＲＡＭ１００が、（１）ルックアップテーブル及び（２）メモリとして機能する時、再生ＲＡＭは、蓄積及び格納容量を有する再生機能を可能にする。この特別な実施の形態では、システムがデータをＲＡＭ１００内の［１６×１］メモリに書き込む時、データは、１から３の再生ＲＡＭ（各々［１６×１］の大きさ）内に同時に書き込まれる。
このように、ＲＡＭ１００内のメモリは、合計のメモリの大きさが［４８×１］、それぞれ［１６×１］の再生ＲＡＭを想定すると、再生ＲＡＭ内に３つまでのシャドウコピーを有する。再生ＲＡＭは、システムをデバッグするために使用される道具である論理分析装置の動作を著しく改良する。
ここで、システムは、ＲＡＭメモリの３つまでのコピーを作る。各コピーは、異なる時点におけるメモリの状態を示している。論理分析装置は、システムをデバッグするために、蓄積されたデータを研究することができる。メモリで形成されるコピーの数が多いほど（全て時間的に異なる時点における）、再生がより滑らかになり、診断に有用な情報がより多くなる。
【００５０】
図１９は、シャドウＲＡＭへの同時書き込みを実装するために使用される行デコーダを示している。
データがＲＡＭ１００内の［１６×１］ＲＡＭの１つに書き込まれる時、データは、ＲＡＭ１００内の他の［１６×１］ＲＡＭの３つまでに同時にコピー／書き込み可能である。
図１９の列デコーダ及び行デコーダは、データが格納されるＲＡＭ１００内のメモリセルを選択するために使用される。図１９の行デコーダは、一度に複数の行を選択することができるため、データを複数の他のメモリセルに同時に書き込ませる。行デコーダが３つの行を選択する場合、データは、３つの行と列デコーダによって選択された列との交点に配置されている３つのメモリセル内に書き込まれる。より詳しくは、対の通過トランジスタが、ＲＡＭ１００内の行を選択するためにオンされる。通常の場合には、出力Ｚ（３）が能動化（高レベル）されると、トランジスタ３７０と３７２がオンする。しかしながら、信号ＣＡＰＥＮＢが能動化（高レベル）されている場合には、行デコーダは、データのコピーをシャドウＲＡＭの少なくとも１つに蓄積する。特に、信号ＣＡＰＥＮＢが能動化されている時、ＡＮＤゲート３７１からの信号ＳＨＤＷ１がオンとなり、シャドウＲＡＭ内の行を選択する通過トランジスタ３７４及び３７６がオンする。同様に、通常の場合、出力Ｚ（２）が能動化（高レベル）されている時、トランジスタ３７５及び１７７がオンする。
しかしながら、信号ＣＡＰＥＮＢが能動化（高レベル)されている場合には、ＡＮＤゲート３７３からの信号ＳＨＤＷ０がオンとなり、シャドウＲＡＭ内の行を選択する対の通過トランジスタ３７８及び３８０がオンする。
【００５１】
シャドウＲＡＭ３６２は、蓄積及び修復機能も可能である。蓄積及び修復機能は、始めの時点の代わりに、中間の時点からエミュレーションを開始することを許可する。２つの論理要素が［１２８×１］ＲＡＭを形成するために結合される場合には、論理要素はシャドウメモリを有しないということに注意すべきである。
【００５２】
デバッグ及びデータ分析の目的のために、各論理要素５２６のフリップフロップ／ラッチ１４０の出力からのデータだけでなく、遅延要素１１６からの、ＲＡＭ１００内の結合論理からのデータ出力も読み出す必要がある。このデータを読み出すために、各論理要素５２６は、一般的に図２０に示されている、８つの読出ポートを有している。図２０は、デバッグ目的のために使用される論理分析装置４３０の主要構成要素の論理図を示している。
【００５３】
論理分析装置４３０は、調査フリップフロップ(プローブフリップフロップ)１５０を有している。各調査フリップフロップ１５０は、トレースクロック(trace  clock)の立ち上がりエッジ（図２０のＴＲＥＮＢまたは図２１、２２のＤ２ＴＲＥＮＢ参照）により、論理要素５２６内のデータの標本を捕獲する。
調査フリップフロップ１５０からデータを読み出すために、読出ポート４３６は、各論理要素５２６に接続されている調査フリップフロップ１５０によって分配される。この特別な実施の形態では、確かに、読出ポートの数は、望むように増加または減少するが、８つの読出ポート４３６が存在する。８つの読出ポート４３６は、全てのプローブフリップフロップ４３６が、１６の調査データ流のいずれかへのランダムなアクセス方法で読み出されることを許可する。インクリメントカウンター４３２によってアドレスされる調査シーケンスメモリ４３４は、ＭＵＸＣＬＫ１１０の各サイクルでこれらの読出ポート４３６をアドレスする。
全てのフリップフロップ１４０からデータを読み出すゲートの観点から見た場合にはコストが非常に高くなるため、時分割多重構成が使用される。ＭＵＸＣＬＫ１１０は、エミュレーションチップが合計６４の時間領域を有するように６４に分割される。しかしながら、クロックパルスの立ち上がり及び立ち下がりエッジの双方を使用することによって、２つまでのデータのコピーが実行される。
読み出されたデータは、イベント検出器４３８及びパイプライン遅延ＦＩＦＯ（ファーストイン、ファーストアウト）(pipeline  delay  FIFO)バッファ４４０に送られる。ＦＩＦＯ４４０は、イベント検出器に対して１トレースクロックサイクルだけ調査データ流を遅延させる。また、随意選択可能に、システムの広範なイベント分析に対する時間を許可するために、調査データ流を７トレースクロックサイクルだけ遅延させる。
調査データ流は、Ｌ１ブロック５０５のＸ１相互接続５２１に接続され、結果的にはボードレベル(board-level)の同期グラフィックＲＡＭ（ＳＧＲＡＭ）４５６にルーティングするために、いずれかの入力／出力ピンにルーティングされる。１２個のイベント検出器４３８の各々は、８個のイベント出力全てに対して、１６個までの調査フリップフロップ４３６を監視する。
【００５４】
このように、イベント調査装置(eventable  probe)（調査フリップフロップ１５０）の数は、各調査データ流における調査装置の数に１２を乗算した値である。
この特別な実施の形態では、それぞれ６４個までの調査フリップフロップ４３６を有する、１６の調査データ流が発生される。これらの直列調査データ流は、任意の注文において任意の調査フリップフロップを含み、任意の入力／出力ブロックにルーティングされる。
エミュレーションチップ内の各位置がランダムにアクセス可能であるため、フィールドプログラマブルゲートアレイであるが、エミュレーションチップは、静的ＲＭ（ＳＲＡＭ）として動作する。この構造により、ユーザは、エミュレーションの間十分な標本抽出レートで、任意の回路ノードの完全に相互作用する調査とイベント定義を行うことができる。例えば、ＭＵＸＣＬＫ１１０が３２ＭＨｚの場合には、最大１０２４個の調査フリップフロップ１５０が６４個のＭＵＸＣＬＫクロックサイクル内で読み出すことができ、０．５ＭＨｚの標本抽出レートが達成される。１６ＭＨｚの標本抽出レートでは、３２個の調査フリップフロップは、各読出ポート４３６が１つのＭＵＸＣＬＫクロックサイクルで２回読み出されるため、１つの調査データ流で２回、すなわち、ＭＵＸＣＬＫ１１０が高レベルの時とＭＵＸＣＬＫ１１０が低レベルの時に読み出し可能である。勿論、時間領域の数は、必要に応じて、変更、増加または減少可能である、
【００５５】
図２１は、読出ポート４３６の回路図であり、それらがどのように論理要素５２６の調査フリップフロップ１５０に接続されているかを示している。
第１の読出ポートは、調査フリップフロップ１５０の出力に接続されている。調査フリップフロップ１５０への入力は、マルチプレクサ４４２の出力（バッファとインバータの後）から到来する。マルチプレクサ４４２は、結合論理出力（遅延要素１１６によって遅延されまたは遅延されていない）またはフリップフロップ／ラッチ１４０のスレーブラッチ２０２からの出力である。
タイミング修正回路２９８は、スレーブラッチ２０２をゲートするために使用される２つのオーバーラップしていないクロックパルスを供給する。図１８は、ブロック４４４内の回路を示している。
【００５６】
図２２は、読出ポート８００が論理要素５２６にどのように接続されているかについての実施の形態を示している。
この実施の形態では、８個の読出ポート８００が存在する。各論理要素５２６は、そのＬＥのＱ出力１２０を調査フリップフロップ１５０送る。Ｄ２ＴＲＥＮＢによってクロックされると、調査フリップフロップ１５０は、データをトリステート駆動部（３状態駆動部）(tristate  driver)４４６に出力する。駆動部４４６は、本実施の形態では、論理要素５２６の１行に８ビットのラインが存在するため、実際には並列な８個の駆動部である。
また、論理部分析装置（ＬＡ）内には、１列に８ワードのラインが存在する。論理分析装置からの８ワードのラインは、８個の駆動部４４６の１つを選択して能動化する。駆動部４４６は、読出ポート８００のそれぞれへの情報のビットを通す。このように、与えられた論理要素５２６内の８個の駆動部４４６は、８個の読出ポート８００に８ビットを送る。情報の各ビットは、異なる読出ポート８００に進む。
読出ポートのこの実施の形態では、読出ポート８００は、１４４から１までの間のマルチプレクサ８０２と、ＭＵＸＣＬＫ１１０によってクロックされる３つのＤフリップフロップ８０４を有している。１４４から１までの間のマルチプレクサ８０２は、各駆動部４４６からのビット、合計１４４ビットを受信し、調査シーケンスメモリ入力８０６に基づいて１つのビットを選択する。この選択されたビットは、フリップフロップ８０４の２つに入力される。フリップフロップ８０４は、ビット情報を調査データ８０８の１６ビットとして同時にクロック出力させるように動作する。
【００５７】
図２３に戻って、Ｘ０入力の完全に埋められるクロスバー６００のためのプリデコーダは、結果的に生じるチップの面積を減少させる。結果として、Ｘ０完全クロスバーは、２つのレベルを有している。第１のレベルはプリデコードを行い、第２のレベルはデコードを終了する。
クロスバー入力は、２から４個のデコーダ２５０が論理要素５２６に入力するためのクロスバー出力２５４を選択する４つのグループに分けられる。与えられたクロスバー入力に対して、各入力は、４つの入力グループのための共通ラインへのスイッチを有している。クロスバース出力における２つのプログラミングビットは、全てのグループの４つのスイッチの１つをオンする。各入力グループは、グループの共通ラインから実際のクロスバー出力２５４へのスイッチをオンする１以上のプログラミングビットを有する。
【００５８】
図２に戻り、入力／出力ブロック４３６をより詳細に説明する。
入力／出力ブロック４３６は、例えば、図３２に示すような実施の形態である。ピンの数を減少させるために、各入力／出力ピンは、時間多重化される。このように、各ピンは、４つの信号または所望の数の信号を搬送する。
この実施の形態における各入力／出力ブロック４３６は、４つの入力または出力ライン（Ａ、Ｂ、Ｃ、Ｄ）を有している。クロスバー７０２内の入力／出力ブロックは、信号Ａ、Ｂ、Ｃ及びＤが、信号ＩＯ.ｎ.０、ＩＯ.ｎ.１、ＩＯ.ｎ.２またはＩＯ.ｎ.３のうちの１つに多重化されるのを許可する。入力／出力パッド４３５からの１つの信号は、入力／出力パッド４３５が時間多重化方法で４つまでの別々の信号を搬送するように、信号Ａ、Ｂ、ＣまたはＤの１つに多重化される。
【００５９】
図２４に戻り、入力／出力ブロック４３６の主要構成要素は、入力／出力パッド４３５、入力／出力パッド４３５に接続され、ピンの競合によって生じる過電流から入力／出力パッドを保護しながら、入力／出力パッド４３５への出力信号を通す出力駆動部６２４、相互接続通路として役立つ多重化データ通路６２６、多重化データ通路６２６とＸ２相互接続の間に結合された入力／出力ピンクロスバー６２８及びクロック分割論理回路６３０である。
ＭＵＸＣＬＫ１１０は、各入力／出力ピンの位相を制御する。各ピンは、双方向であってもよいし、そうでなくてもよい。図２５〜３２に関連して以下に説明するように、変更例には、１つの信号、２つの信号または４つの信号を、双方向また一方方向方法で搬送するようにピンを構成することが含まれる。
信号Ａ、Ｂ、Ｃ及びＤは、入力／出力ブロック４３６に対して内部の信号を示している。一方、信号ＩＯ.ｎ.０、ＩＯ.ｎ.１、ＩＯ.ｎ.２及びＩＯ.ｎ.３は、入力／出力ブロック４３６に対して外部の信号を示している。
出力駆動部６２４は、いずれかの出力の短絡を検出する過電流検出器及び電流制限回路を含み、専用の開放コレクタ出力パッド(open  collector  output  pad)上に遮断を生成し、短絡されたピンの電流を安全レベルに制限する。短絡されたピンの位置は、後で、ＪＴＡＧバスを介して判断される。
エラー検出論理は、パッドが駆動されている時にはいつも、入力／出力パッド４３５の状態を監視することによって、非多重化モードで作動する。パッド４３５が、低い状態で駆動されているが、高すぎる状態が維持されている場合、または高い状態で駆動され、１エラークロックサイクルより長い期間継続して低すぎる状態が維持されている場合に、出力駆動部６２４内のエラー検出論理がトリガーされる。
【００６０】
図２５は、直接入力／出力のみに対して構成される（すなわち、時間多重化に対しては構成されていない）入力／出力ブロック４３６を示している。直接入力／出力ブロックの利点は、時分割多重を使用する入力／出力ブロックより速いことである。
出力信号Ａ及びＢは、入力／出力パッド４３５から他の回路に進行する。一方、入力信号Ｃ及びＤは、他の回路から入力／出力パッド４３５に進行する。
プログラミングビットＯＵＴＲＥＧ６４１は、マルチプレクサ６４９が、データを入力／出力パッド４３５から出力信号Ａに通すか、またはフリップフロップ６４０のＱ出力から出力信号Ａに通すかを制御する。例えば、ＯＵＴＲＥＧ６４１が「０」である場合には、マルチプレクサ６４９は、データを入力／出力パッド４３５から出力信号Ａに通す。ＯＵＴＲＥＧ６４１が「１」である場合には、マルチプレクサ６４９は、データをフリップフロップ６４０のＱ出力から出力信号Ａに通す。
同様に、プログラミングビットＯＵＴＲＥＧ６４１は、マルチプレクサ６５０が、データを入力信号Ｃまたはフリップフロップ６４４のＱ出力から出力Ｉ／Ｏパッド駆動部６５２、そして入力／出力パッド４３５に通すか否かを制御する。プログラミングビットＯＵＴＲＥＧ６４１が「１」である場合には、ＩＯ＿ＭＵＸＣＬＫ６３８の立ち上がりエッジによってクロックされるフリップフロップ６４４は、入力信号Ｃからの出力データ通路内に存在し、ＩＯ＿ＭＵＸＣＬＫ６３８の立ち下りエッジによってクロックされるフリップフロップ６４０は、出力信号Ａへの入力データ通路内に存在する。出力信号Ｂは、ＩＯ＿ＭＵＸＣＬＫ６３８の立ち上がりエッジによってクロックされるフリップフロップ６４２を通過する値で駆動される。ＯＲゲート６５３に進行するプログラミングビットＯＵＴ／ＩＮ６４６が「１」である場合には、出力Ｉ／Ｏパッド駆動部６５２は常にオンであり、入力信号Ｃは入力／出力パッド４３５に送られる。ＯＵＴ／ＩＮ６４６が「０」である場合には、入力信号Ｄは、駆動部６５２を制御する。
例えば、入力／出力パッド４３５が信号Ａへの単純入力である場合には、信号Ｄが低レベル、信号ＩＮ／ＴＲＩ６４７が「１」になり、信号Ｄが「０」に下げられて、駆動部６５２がオフする。入力／出力４３５が双方向である場合には、信号ＩＮ／ＴＲＩ６４７は「０」になる。プログラミングビットＤＬＹＩＮによって制御されるとき、マルチプレクサ６４８は、入力／出力パッド４３５とフリップフロップ６４０、６４２の入力の間に選択的に遅延を挿入する。
【００６１】
図２６は、２方向時間多重化に対して構成された入力／出力ブロック４３６の部分を示している。
信号ＩＯ＿ＭＵＸＣＬＫ６３８は、入力／出力ブロック４３６内に存在するＭＵＸＣＬＫ１１０と同じである。信号ＩＯ＿ＭＵＸＳＥＬ６６５は、ＭＵＸＳＥＬと同じである。入力／出力パッド４３５は、２までの入力信号または２までの出力信号を搬送する。２つの入力信号を搬送する場合には、信号は、出力信号Ａ及びＢ上に時間多重化される。２つの出力信号を搬送する場合には、信号は、入力信号Ｃ及びＤから時間多重化される。
ＯＵＴ／ＩＮ６４６が活性化（高レベル）されている場合には、出力駆動部６５２は能動化され、入力／出力パッド４３５は、入力信号ＣまたはＤから導出される信号を搬送するための出力ピンとして動作する。ＯＵＴ／ＩＮ６４６が非活性化（低レベル）である場合には、入力／出力パッド４３５は入力ピンであり、その出力は無能化され、入力標本抽出フリップフロップ６６０、６６２は能動化される。２方向多重ピンとして行動するピンに対しては、入力フリップフロップ６６０、６６２は、常に、ピンを“偶数”信号Ａ及び“奇数”信号Ｂに多重化しながら、クロックのエッジ毎に動作する。言い換えると、入力／出力パッド４３５は、２つの信号を搬送する。２つの信号の一方は信号Ａとして多重化され、他方は信号Ｂとして多重化される。
【００６２】
図２７は、図２６の、２方向に時間多重化された入力／出力ブロックのタイミング図の例を示している。Ｉ−Ｏ及びＩ−Ｅは、それぞれ奇数入力（Ｂ）及び偶数入力（Ａ）に対応している。Ｏ−Ｏ及びＯ−Ｅは、それぞれ奇数出力（Ｄ）及び偶数出力（Ｃ）に対応している。
入力／出力ブロックが、データをその入力ピンＡ及びＢに送る場合、奇数入力信号（図２７では、奇数入力に対する“Ｉ−Ｏ”として示されている）は、信号Ｂとして多重化されている。偶数入力信号（図２７では、偶数入力に対する“Ｉ−Ｅ”として示されている）は、信号Ａとして多重化されている。このパターンは、“Ｂ、Ａ、Ｂ、Ａ・・・”パターンで繰り返される。
同様に、入力／出力パッド４３５は、２つの信号を搬送する。２つの信号の一方は信号Ｃから多重化され、他方は信号Ｄから多重化される。入力／出力ブロックが出力ピンＣ及びＤからのデータを受信すると、奇数出力信号（図２７では、奇数出力に対して“Ｏ−Ｏ”として示されている）は、信号Ｄから入力／出力パッド４３５に多重化される。偶数出力信号（図２７では、偶数出力に対して“Ｏ−Ｅ”として示されている）は、信号Ｃから入力／出力パッド４３５に多重化される。このパターンは、“Ｄ、Ｃ、Ｄ、Ｃ・・・”パターンで繰り返される。
【００６３】
プログラミングビットまたは信号ＯＵＴＲＥＧ６６１は、信号がマルチプレクサ６５０によって通るのを制御する。“偶数”及び“奇数”出力信号Ｃ及びＤは、ＯＵＴＲＥＧ６６１が「１」である場合には、出力フリップフロップ６６４、６６６によって記憶され、そうでない場合には、それらは、直接に入力／出力パッド４３５に多重化される。
ＩＯ＿ＭＵＸＣＬＫ６３８が立ち上がると、偶数出力信号Ａは、フリップフロップ６６４によってＣから標本抽出される。ＩＯ＿ＭＵＸＣＬＫ６３８が立ち上がると直ぐに、先に標本抽出された偶数出力信号Ｃまたは偶数出力信号そのものは、出力ピンＡ上に多重化される。入力ピン上では、ＩＯ＿ＭＵＸＣＬＫ６３８の立ち下りエッジによりフリップフロップ６６０によって標本抽出され、Ａ入力信号となる。入力信号Ａをアップデートするために出力信号Ｃを標本抽出する間に、ＩＯ＿ＭＵＸＣＬＫの１．５サイクルが経過する。ＩＯ＿ＭＵＸＣＬＫ６３８が立ち下がると、奇数出力信号Ｂは、フリップフロップ６６６によって入力信号Ｄから標本抽出される。ＩＯ＿ＭＵＸＣＬＫ６３８が立ち下がるとすぐに、先に標本抽出した奇数出力信号Ｄまたは奇数出力信号Ｄそのものは、出力ピンＢ上に多重化される。入力ピン上では、ＩＯ＿ＭＵＸＣＬＫ６３８の立ち上がりエッジによりフリップフロップ６６２によって標本抽出され、入力信号Ｂとなる。プログラミングビットＤＬＹＩＮによって制御される時、マルチプレクサ６４８は、入力／出力パッド４３５とフリップフロップ６６０、６６２の入力の間に、選択的に遅延が挿入される。
【００６４】
図２８は、４方向双方向時間多重化に対して構成された入力／出力ブロック４３６の部分を示している。図２９は、図２８の回路に対するタイミングを示している。
入力／出力パッド４３５は、４つまでの時間多重化信号を搬送する。この双方向の場合、４つの時間多重化信号は、２つの入力信号と２つの出力信号により構成されている。このように、２つの出力が１つのピン上に送られ、２つの入力が１つのピン上で受信される。
回路は、図２６のＯＵＴ／ＩＮ６４６が、本実施の形態ではＩＯ＿ＭＵＸＴＲＩ信号及びその逆信号である、入力出力ピン６７０及び出力入力ピン６７２に分離していることを除いて、図２６と同様である。ＩＯ＿ＭＵＸＴＲＩ６７０は、システムボード上のグローバル信号であり、すべてのエミュレーションチップに使用可能である。
いくつかのチップは受信器として動作し、他のものは送信器として動作する。逆ＩＯ＿ＭＵＸＴＲＩ信号は、受信チップと送信チップの間のタイミングを整合させるために提供される。ＩＯ＿ＭＵＸＴＲＩ信号６７０及びその逆信号６７２は、４方向時間多重ピンＡ、Ｂ、Ｃ及びＤの入力／出力の駆動を転換する。ＩＯ＿ＭＵＸＴＲＩは、ライン上の駆動方向を変更するために使用される。ＩＯ＿ＭＵＸＴＲＩが高レベルである時には、出力ピン６７２は、信号Ｄ、そして信号Ｃを駆動し、入力ピン６７０は、信号を受信し、それらをそれぞれ信号Ｂ及びＡとして出力するためにフリップフロップ６６０、６６２への入力をイネーブルする。ＩＯ＿ＭＵＸＴＲＩが立ち下がると、入力ピン６７０は、信号Ｄ及びＣを駆動し、出力ピン６７２は、フリップフロップ６６０、６６２が信号を信号Ｂ及びＡとして受信するようにイネーブルする。
結果は、１つの導線上にそれぞれの方向に２つの信号を送ることである。各信号は、ＩＯ＿ＭＵＸＣＬＫの２サイクル毎に更新される。プログラミングビットＤＬＹＩＮによって制御される時、マルチプレクサ６４８は、入力／出力パッド４３５とフリップフロップ６６０、６６２の入力の間に選択的に遅延を挿入する。
【００６５】
図３０は、４方向一方方向出力時間多重化に対して構成された入力／出力ブロック４３６の部分を示している。このモードによって提供される利点は、パーティショニング及び電気信号の完全性に影響する。
双方向４方向多重化を用いると、チップ出力に対するチップ入力の総合割合は、常に、チップへの論理のパーティショニングを拘束する［１：１］である。一方方向４方向多重化を用いると、出力に対する入力のあらゆる総合割合が可能である。双方向４方向多重化では、相互接続線上の信号の方向は、常に、２つの出力駆動部の簡易な競合が可能となるように、ＭＵＸＴＲＩ（またはＩＯ＿ＭＵＸＴＲＩ）によってセットされる。一方方向多重化を用いると、出力競合の可能性はない。Ｘ２クロスバーからの４つの信号は、図３２に示されているように、信号Ａ、Ｂ、Ｃ及びＤへの入力／出力ブロックピンクロスバー７０２を介して駆動される。４から１個のマルチプレクサ６８８、６８９、６９０は、ＩＯ＿ＭＵＸＳＥＬ信号６６５及びＩＯ＿ＭＵＸＴＲＩ信号６７０によって制御され、４つの信号Ａ、Ｂ、Ｃ及びＤを、入力／出力パッド４３５上の４方向時間多重化出力信号として結合する。
【００６６】
図３２は、図２５〜３０の機能を実行するように構成可能な入力／出力ブロック４３６の実施の形態を示している。すなわち、図３２の回路は、２方向または４方向多重化、双方向多重化、一方方向多重化または直接入力／出力を実行するように構成可能である。
入力／出力ブロック４３６は、入力／出力ブロッククロスバー７０２、時間多重Ａ、Ｂ、Ｃ及びＤ信号、時間多重外部ピンＩＯ.ｎ.０、ＩＯ.ｎ.１、ＩＯ.ｎ.２、ＩＯ.ｎ.３及びそれらに関連するフリップフロップ、マルチプレクサ及び信号を組み込む。双方向ＩＯ.ｎ.０〜ＩＯ.ｎ.３駆動部の方向のプログラミングは、Ｘ２ピン駆動部の方向と調和する必要があり、Ｍ０、Ｍ１及びＯＵＴ／ＩＮ信号は、以下のようにピンＡ、Ｂ、Ｃ及びＤの駆動方向を決定する必要がある。
【００６７】
0004800548.tif 000002
【００６８】
上記テーブルでは、[＊]は、ピンがデータを入力／出力ブロックピンクロスバー７０２内に駆動していることを意味し、[−]は、ピンが入力／出力ブロックピンクロスバー７０２からのデータを受信していることを意味している。
ＯＵＴＲＥＧ６６１は、フリップフロップ６８０、６８１、６８２及び６８３と共同する２から１個のマルチプレクサを制御する。例えば、ＯＵＴＲＥＧ６６１が「０」である場合には、信号Ａ、Ｂ、Ｃ、Ｄからのデータは、フリップフロップ６８０、６８１、６８２及び６８３を飛び越し、マルチプレクサ６８４、６８５、６８６及び６８７に直接的に通る。ＯＵＴＲＥＧ６６１が「１」である場合には、信号Ａ、Ｂ、Ｃ、Ｄからのデータは、フリップフロップ６８０、６８１、６８２及び６８３に入力され、そして、マルチプレクサ６８４、６８５、６８６及び６８７に進む。
また、各Ａ、Ｂ、Ｃ及びＤピンは、捕獲ラッチ７２０、7２２、７２４、７２６（図１１に参照番号１６０として示されている）を有している。各捕獲ラッチ１６０は、ＣＡＰＥＮＢ信号が「１」の時にデータを捕獲するように動作する。データは、捕獲ラッチ１６０から読み出され及び捕獲ラッチ１６０に書き込まれる。デコーダ７３０及びそれらの対応するプログラミングビットは、内部Ａ、Ｂ、Ｃ及びＤ信号が外部ＩＯ.ｎ.０、ＩＯ.ｎ.１、ＩＯ.ｎ.２、ＩＯ.ｎ.３ピンにどのように接続されるかを制御する。ＩＮ／ＴＲＩ６４７が「１」である場合には、図２５に示されているように、信号Ｄは「０」に下げられる。
【００６９】
図３１は、図３２の入力／出力ブロックピンクロスバー７０２の詳細を示している。
［４×４］双方向クロスバー７０２は、入力／出力ブロック４３６の４つの内部Ａ、Ｂ、Ｃ及びＤピンとその４つの外部ピンＩＯ.ｎ.０、ＩＯ.ｎ.１、ＩＯ.ｎ.２及びＩＯ.ｎ.３の間に入れられる。クロスバー７０２は、入力／出力外部ピンＩＯ.ｎ.０、ＩＯ.ｎ.１、ＩＯ.ｎ.２及びＩＯ.ｎ.３が入力／出力信号を搬送するために使用されるように機能する。
各外部ピンは、異なるＸ２クロスバーに接続されるため、この設計は、入力／出力ピンの位置が固定される時に、Ｌ１／Ｌ２相互接続のルーティング性を改良する。Ａ、Ｂ、Ｃ及びＤ内部ピンのそれぞれは、各Ａ、Ｂ、ＣまたはＤピンのためのデコーダ７３０と共同する２つの２進エンコードされたプログラミングビットに応じて、ＩＯ.ｎ.０、ＩＯ.ｎ.１、ＩＯ.ｎ.２及びＩＯ.ｎ.外部ピンの１つに接続される。例えば、クロスバー７０２をピンＡに接続するために、ＡＥＮプログラミングビット７０４は、ピンＡと入力／出力ブロックピンクロスバー７０２の間の接続を閉じるようにプログラムされる。ＡＥＮプログラミングビット７０４がオフにプログラムされると、ピンＡは、クロスバー７０２、ＩＯ.ｎ.０、ＩＯ.ｎ.１、ＩＯ.ｎ.２及びＩＯ.ｎ.３外部ピン、したがってＸ２ピンから絶縁される。同様に、ピンＢ、Ｃ及びＤをクロスバー７０２に接続するために、プログラミングビットＢＥＮ７０６、ＣＥＮ７０８及びＤＥＮ７１０をそれぞれ能動化させる。
この特徴は、Ａ、Ｂ、Ｃ及びＤ間の不使用ピンのＩＯ.ｎ.０、ＩＯ.ｎ.１、ＩＯ.ｎ.２及びＩＯ.ｎ.３外部ピンからの切断を容易とし、入力／出力ブロック駆動部とＸ２ピン駆動部間の意図しない対立に対して保護する。
【００７０】
主題発明の実施の形態及び実装を図示及び記載したが、より多くの実施の形態及び実装が主題発明の範囲内に存在することが明らかである。したがって、本発明は、クレーム及びそれらの均等物に照らされることを除いては、限定されない。
【図面の簡単な説明】
【図１Ａ】  本発明にしたがって構築されたエミュレーションチップの一実施の形態における主要構成要素のブロック図である。
【図１Ｂ】  図１Ａのエミュレーションチップの実施の形態のチップフロアプランの１例のブロック図である。
【図２】  図１Ａのエミュレーションチップの実施の形態の部分のブロック図である。
【図３】  簡単なクロスバーのブロック図である。
【図４】  Ｌ１論理ブロックの構成要素のブロック図である。
【図５】  エミュレーションチップの実施の形態の関係する物理的配列におけるＬ０論理ブロックの基本構成要素のブロック図である。
【図６】  Ｌ０論理ブロックにおけるＸ０相互接続ネットワークの実施の形態のブロック図である。
【図７】  図６のＸ０入力クロスバーの完全に埋められるクロスバーの論理表現である。
【図８】  図６のＸ０出力クロスバーの部分的に埋められるクロスバーの論理表現である。
【図９】  図１Ａのエミュレーションチップの実施の形態の論理構造のブロック図である。
【図１０】  本発明にしたがって構築された論理要素の実施の形態の簡略ブロック図である。
【図１１】  本発明にしたがって構築された論理要素の実施の形態の詳細ブロック図である。
【図１２】  図１０及び１１のフリップフロップ／ラッチ１４０の内部の回路の実施の形態の概略図である。
【図１３】  論理要素が入力を分配することを許可する回路を有する論理要素対の実施の形態のブロック図である。
【図１４】  入力を他の論理要素と分配するように構成された論理要素内の回路の実施の形態の概略図である。
【図１５】  ２つのオーバーラップしないクロック信号を発生するタイミング修正回路の実施の形態の概略図である。
【図１６】  図１５の回路のタイミング図である。
【図１７】  本発明にしたがって構築された論理要素のフリップフロップ／ラッチの内部のラッチの実施の形態の回路図である。
【図１８】  本発明にしたがって構築されたキャプチュアラッチ（捕獲ラッチ）の実施の形態の回路図である。
【図１９】  本発明にしたがって構築されたシャドウＲＡＭの実施の形態の回路図である。
【図２０】  論理分析装置の実施の形態の全体の論理図である。
【図２１】  論理分析装置によって使用される読出ポートの実施の形態の回路図である。
【図２２】  読出ポート及び論理要素への読出ポートの接続の実施の形態の回路図である。
【図２３】  Ｘ０入力クロスバーの物理的実装例の回路図である。
【図２４】  入力／出力ブロックの主要構成要素の実施の形態のブロック図である。
【図２５】  直接入力／出力ブロックの実施の形態の回路図である。
【図２６】  ２方向時間多重化のために構成された入力／出力ブロックの実施の形態の回路図である。
【図２７】  図２６の入力／出力ブロックのタイミング図である。
【図２８】  ４方向双方向時間多重化のために構成された入力／出力ブロックの実施の形態の回路図である。
【図２９】  図２８の入力／出力ブロックのタイミング図である。
【図３０】  ４方向一方方向出力時間多重化のために構成された入力／出力ブロックの実施の形態の回路図である。
【図３１】  入力／出力ブロックピンクロスバーの実施の形態の回路図である。
【図３２】  入力／出力ブロックの実施の形態の詳細ブロック図である。
【符号の説明】
９８  ルックアップテーブル
１１６  遅延要素
１４０  フリップフロップ／ラッチ
１５０  調査フリップフロップ（プローブフリップフロップ）
１６０  捕獲フリップフロップ(キャプチュアフリップフロップ)
２００  マスターラッチ
２０２  スレーブラッチ
１８０  スレーブパルサー
４２５  Ｌ２論理ブロック
４３５  Ｉ／Ｏパッド
４３８  イベント検出器
５０５  Ｌ１論理ブロック
５１１  Ｘ２相互接続
５１２、５２８、５２２  Ｉ／Ｏピン
５２１  Ｘ１相互接続
５２５  Ｌ０ブロック
５２６  論理要素
５２７  Ｘ０相互接続
【図１Ａ】
0004800548.tif 000003
【図１Ｂ】
0004800548.tif 000004
【図２】
0004800548.tif 000005
【図３】
0004800548.tif 000006
【図４】
0004800548.tif 000007
【図５】
0004800548.tif 000008
【図６】
0004800548.tif 000009
【図７】
0004800548.tif 000010
【図８】
0004800548.tif 000011
【図９】
0004800548.tif 000012
【図１０】
0004800548.tif 000013
【図１１】
0004800548.tif 000014
【図１２】
0004800548.tif 000015
【図１３】
0004800548.tif 000016
【図１４】
0004800548.tif 000017
【図１５】
0004800548.tif 000018
【図１６】
0004800548.tif 000019
【図１７】
0004800548.tif 000020
【図１８】
0004800548.tif 000021
【図１９】
0004800548.tif 000022
【図２０】
0004800548.tif 000023
【図２１】
0004800548.tif 000024
【図２２】
0004800548.tif 000025
【図２３】
0004800548.tif 000026
【図２４】
0004800548.tif 000027
【図２５】
0004800548.tif 000028
【図２６】
0004800548.tif 000029
【図２７】
0004800548.tif 000030
【図２８】
0004800548.tif 000031
【図２９】
0004800548.tif 000032
【図３０】
0004800548.tif 000033
【図３１】
0004800548.tif 000034
【図３２】
0004800548.tif 000035