(57)【特許請求の範囲】
【請求項１】
メモリモジュールを備え、
前記メモリモジュールは、構成可能（コンフィギュラブル）なハードマクロであり、
前記メモリモジュールの第１の部分は、
カスケード型データと直接的なバス型データとの間で選択を行うように結合されたデータ入力マルチプレクサと、
前記データ入力マルチプレクサからの出力を受取って格納するように結合されたメモリと、
前記メモリからの読取データと前記カスケード型データとの間で選択を行うように結合されたレジスタ入力マルチプレクサと、
前記レジスタ入力マルチプレクサからの出力を受取るように結合されたレジスタと、
前記メモリからの前記読取データと前記レジスタからの登録データとの間で選択を行うように結合されたラッチ／レジスタモードマルチプレクサと、
前記カスケード型データと前記ラッチ／レジスタモードマルチプレクサからの出力との間で選択を行って出力データを提供するように結合されたデータ出力マルチプレクサとを備える、装置。
【請求項２】
前記メモリモジュールの第２の部分は、前記メモリモジュールの前記第１の部分のコピーであり、
前記メモリモジュールの前記第１の部分は、前記メモリモジュールの出力バスの第１の部分のためのものであり、
前記メモリモジュールの前記第２の部分は、前記メモリモジュールの出力バスの第２の部分のためのものである、請求項１に記載の装置。
【請求項３】
メモリモジュールを備え、
前記メモリモジュールは、構成可能（コンフィギュラブル）なハードマクロであり、
前記メモリモジュールは、
データイン入力ポート、第１のカスケード入力ポート、カスケード／データイン選択ポート、および書込データ出力ポートを各々が有する複数のデータインマルチプレクサと、
書込データ入力ポート、第１のクロックポート、および読取データ出力ポートを各々が有する複数のメモリブロックと、
第１の読取データ入力ポート、第２のカスケード入力ポート、パイプライン選択ポート、およびレジスタデータ出力ポートを各々が有する複数のパイプラインマルチプレクサと、
レジスタデータ入力ポート、登録データ出力ポート、および第２のクロックポートを各々が有する複数のレジスタと、
第２の読取データ入力ポート、登録データ入力ポート、登録／未登録選択ポート、およびブロック出力ポートを各々が有する複数のデータアウトマルチプレクサと、
第３のカスケード入力ポート、ブロック入力ポート、制御選択ポート、およびデータアウトポートを各々が有する複数の制御マルチプレクサとを備える、装置。
【請求項４】
前記複数のデータインマルチプレクサ、前記複数のパイプラインマルチプレクサ、および前記複数の制御マルチプレクサの各々の第１の部分のための前記第１のカスケード入力ポート、前記第２のカスケード入力ポート、および前記第３のカスケード入力ポートは、第１のカスケード入力ノードに共通して結合され、
前記複数のデータインマルチプレクサ、前記複数のパイプラインマルチプレクサ、および前記複数の制御マルチプレクサの各々の第２の部分のための前記第１のカスケード入力ポート、前記第２のカスケード入力ポート、および前記第３のカスケード入力ポートは、第２のカスケード入力ノードに共通して結合される、請求項３に記載の装置。
【請求項５】
前記複数の制御マルチプレクサの第１のマルチプレクサは、その前記データアウトポートを有し、前記第１のマルチプレクサの前記データアウトポートは、前記メモリモジュールの出力バスの第１の部分であり、
前記複数の制御マルチプレクサの第２のマルチプレクサは、その前記データアウトポートを有し、前記第２のマルチプレクサの前記データアウトポートは、前記メモリモジュールの前記出力バスの第２の部分である、請求項３または４に記載の装置。
【請求項６】
前記複数のデータインマルチプレクサの前記カスケード／データイン選択ポートは、それぞれ第１のコンフィギュレーションメモリセルに結合され、
前記複数のデータアウトマルチプレクサの前記登録／未登録選択ポートは、それぞれ第２のコンフィギュレーションメモリセルに結合される、請求項３から５のいずれか１項に記載の装置。
【請求項７】
第１の構成可能（コンフィギュラブル）なハードマクロとして提供される第１のメモリモジュールと、
第２の構成可能（コンフィギュラブル）なハードマクロとして提供される第２のメモリモジュールとを備え、
前記第１のメモリモジュールは、前記第２のメモリモジュールよりも高いレベルのスタックにあり、
前記第１のメモリモジュールは、互いに分離された第１の上位メモリブロックと第１の下位メモリブロックとを有し、
前記第２のメモリモジュールは、第２の上位メモリブロックと第２の下位メモリブロックとを有し、
前記第１の上位メモリブロックおよび前記第２の上位メモリブロックを含む第１のメモリ列を提供するために、前記第１の上位メモリブロックに関連付けられた前記第１のメモリモジュールの第１のカスケード入力ノードは、前記第２の上位メモリブロックに関連付けられた前記第２のメモリモジュールの第１のデータアウトノードに結合され、
前記第１の下位メモリブロックおよび前記第２の下位メモリブロックを含む第２のメモリ列を提供するために、前記第１の下位メモリブロックに関連付けられた前記第１のメモリモジュールの第２のカスケード入力ノードは、前記第２の下位メモリブロックに関連付けられた前記第２のメモリモジュールの第２のデータアウトノードに結合され、
データイン入力ポート、第１のカスケード入力ポート、カスケード／データイン選択ポート、および書込データ出力ポートを各々が有する第１の複数のデータインマルチプレクサと、
書込データ入力ポート、第１のクロックポート、および読取データ出力ポートを各々が有する第１の複数のメモリブロックと、
第１の読取データ入力ポート、第２のカスケード入力ポート、パイプライン選択ポート、およびレジスタデータ出力ポートを各々が有する第１の複数のパイプラインマルチプレクサと、
レジスタデータ入力ポート、登録データ出力ポート、および第２のクロックポートを各々が有する第１の複数のレジスタと、
第２の読取データ入力ポート、登録データ入力ポート、登録／未登録選択ポート、およびブロック出力ポートを各々が有する第１の複数のデータアウトマルチプレクサと、
第３のカスケード入力ポート、ブロック入力ポート、制御選択ポート、およびデータアウトポートを各々が有する第１の複数の制御マルチプレクサとをさらに備える、装置。
【請求項８】
前記第１のカスケード入力ノードは、前記第１の上位メモリブロックの前記第１のカスケード入力ポート、前記第２のカスケード入力ポート、および前記第３のカスケード入力ポートに結合され、
前記第２のカスケード入力ノードは、前記第１の下位メモリブロックの前記第１のカスケード入力ポート、前記第２のカスケード入力ポート、および前記第３のカスケード入力ポートに結合される、請求項７に記載の装置。
【請求項９】
前記第１の上位メモリブロックのブロック出力ポートは、前記第１のメモリモジュールの出力バスの第１の部分のためのものであり、
前記第１の下位メモリブロックのブロック出力ポートは、前記第１のメモリモジュールの前記出力バスの第２の部分のためのものである、請求項７または請求項８に記載の装置。
【請求項１０】
前記第２の上位メモリブロックのブロック出力ポートは、前記第２のメモリモジュールの出力バスの第１の部分のためのものであり、
前記第２の下位メモリブロックのブロック出力ポートは、前記第２のメモリモジュールの前記出力バスの第２の部分のためのものである、請求項９に記載の装置。
【請求項１１】
前記第１の上位メモリブロックに関連付けられたデータアウトポート、および前記第２の上位メモリブロックに関連付けられたデータアウトポートは、組合わせられてバス出力を提供し、
その組合わせは、前記第１のメモリモジュールの前記出力バスの前記第１の部分と、前記第２のメモリモジュールの前記出力バスの前記第１の部分とからなる、請求項９または請求項１０に記載の装置。
【請求項１２】
前記第１の上位メモリブロックおよび前記第２の上位メモリブロックは、第１の書込アドレスバスおよび第１の読取アドレスバスに結合され、
前記第１の下位メモリブロックおよび前記第２の下位メモリブロックは、第２の書込アドレスバスおよび第２の読取アドレスバスに結合される、請求項７から１１のいずれか１項に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
実施例は、集積回路デバイス（「ＩＣ」）に関する。より特定的には、実施例は、ＩＣのための構成可能（コンフィギュラブル）な混載メモリシステムに関する。
【背景技術】
【０００２】
時間の経過とともに、ＩＣはより「高密度」になってきている。すなわち、より多くのロジック構造が所与のサイズのＩＣに実装されるようになってきている。そのため、電力消費がますます重要な問題になっている。さらに、時間の経過とともに、アプリケーションからの速度の要求が厳しくなってきている。そのため、動作周波数がますます重要な問題になっている。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
したがって、電力消費を減少させ、および／または、より高い性能を有するＩＣを提供することが望ましく、有用である。
【課題を解決するための手段】
【０００４】
１つ以上の装置は、概して、ＩＣのための構成可能な混載メモリシステムに関する。
装置は、概して、メモリモジュールに関する。このメモリモジュールは、構成可能なハードマクロである。このメモリモジュールの一部は、カスケード型データと直接的なバス型データとの間で選択を行うように結合されたデータ入力マルチプレクサを含む。この部分はさらに、上記データ入力マルチプレクサからの出力を受取って格納するように結合されたメモリと、上記メモリからの読取データと上記カスケード型データとの間で選択を行うように結合されたレジスタ入力マルチプレクサとを含む。この部分はさらに、上記レジスタ入力マルチプレクサからの出力を受取るように結合されたレジスタと、上記メモリからの上記読取データと上記レジスタからの登録データとの間で選択を行うように結合されたラッチ／レジスタモードマルチプレクサと、上記カスケード型データと上記ラッチ／レジスタモードマルチプレクサからの出力との間で選択を行って出力データを提供するように結合されたデータ出力マルチプレクサとを含む。
【０００５】
別の装置は、概して、メモリモジュールに関する。このメモリモジュールは、構成可能なハードマクロである。このようなメモリモジュールには、データイン入力ポートと、第１のカスケード入力ポートと、カスケード／データイン選択ポートと、書込データ出力ポートとを各々が有する複数のデータインマルチプレクサが含まれる。複数のメモリブロックは、各々が、書込データ入力ポートと、第１のクロックポートと、読取データ出力ポートとを有する。複数のパイプラインマルチプレクサは、各々が、第１の読取データ入力ポートと、第２のカスケード入力ポートと、パイプライン選択ポートと、レジスタデータ出力ポートとを有する。複数のレジスタは、各々が、レジスタデータ入力ポートと、登録データ出力ポートと、第２のクロックポートとを有する。複数のデータアウトマルチプレクサは、各々が、第２の読取データ入力ポートと、登録データ入力ポートと、登録／未登録選択ポートと、ブロック出力ポートとを有する。複数の制御マルチプレクサは、各々が、第３のカスケード入力ポートと、ブロック入力ポートと、制御選択ポートと、データアウトポートとを有する。
【０００６】
さらに別の装置は、概して、第１および第２のメモリモジュールに関する。このような第１のメモリモジュールは、第１の構成可能なハードマクロとして提供され、このような第２のメモリモジュールは、第２の構成可能なハードマクロとして提供される。上記第１のメモリモジュールは、上記第２のメモリモジュールよりも高いレベルのスタックにある。上記第１のメモリモジュールは、互いに分離された第１の上位メモリブロックと第１の下位メモリブロックとを有する。上記第２のメモリモジュールは、第２の上位メモリブロックと第２の下位メモリブロックとを有する。上記第１の上位メモリブロックおよび上記第２の上位メモリブロックを含む第１のメモリ列を提供するために、上記第１の上位メモリブロックに関連付けられた上記第１のメモリモジュールの第１のカスケード入力ノードは、上記第２の上位メモリブロックに関連付けられた上記第２のメモリモジュールの第１のデータアウトノードに結合される。上記第１の下位メモリブロックおよび上記第２の下位メモリブロックを含む第２のメモリ列を提供するために、上記第１の下位メモリブロックに関連付けられた上記第１のメモリモジュールの第２のカスケード入力ノードは、上記第２の下位メモリブロックに関連付けられた上記第２のメモリモジュールの第２のデータアウトノードに結合される。
【０００７】
添付の図面は、例示的な実施例を示している。しかし、添付の図面は、示されている実施例を限定するように解釈されるべきではなく、単に説明および理解のためのものである。
【図面の簡単な説明】
【０００８】
【図１】列状のフィールド・プログラマブル・ゲート・アレイ（「ＦＰＧＡ」）アーキテクチャの例示的な実施例を示す簡略化されたブロック図である。
【図２】ＩＣチップの例示的なメモリシステムを示すブロック図である。
【図３−１】ランダムアクセスメモリブロック（「ＢＲＡＭ」）モジュールの例示的な上位部分または下位部分を示すブロック／回路図である。
【図３−２】例示的なカスケード制御ブロックを示すブロック図である。
【図４】ＢＲＡＭモジュールの例示的なスタックを示すブロック／回路図である。
【図５】例示的な復号テーブルを示すテーブル図である。
【図６】復号テーブルに従った例示的なスタックを示すブロック／回路図である。
【図７】例示的な４深度のワンホットカスケードモード（「カスケードモード」）を示す信号タイミング図である。
【図８】データアウトカスケードパイプラインモード（「パイプラインカスケードモード」）のために構成された例示的なスタックを示すブロック／回路図である。
【図９】図８の例示的なスタックのための、例示的な４深度のパイプラインカスケードモード（「カスケードモード」）を示す信号タイミング図である。
【図１０】入力側および出力側でプログラム可能なファブリックリソースに結合された例示的な上位部分または下位部分スタックを示すブロック／回路図である。
【図１１】黒い太線で概して示されるデータ経路を有する例示的なシストリックモードまたは先入れ先出しバッファ（「ＦＩＦＯ」）モードを示す図１０のブロック／回路図である。
【図１２−１】黒い太線で概して示されるデータ経路を有する例示的な低電力レジスタモードを示す図１０のブロック／回路図である。
【図１２−２】データ経路がスタックの最下位のＢＲＡＭモジュールのレジスタで起動され、このようなレジスタから上方にカスケード接続されること以外は、図１２−１と同一のブロック／回路図である。
【図１３−１】黒い太線で概して示されるデータ経路を有する例示的なラッチモードを示す図１０のブロック／回路図である。
【図１３−２】データ経路がスタックの最下位のＢＲＡＭモジュールのＢＲＡＭブロックで起動され、このようなＢＲＡＭブロックから上方にカスケード接続されること以外は、図１３−１と同一のブロック／回路図である。
【図１４−１】黒い太線で概して示されるデータ経路１４００を有する例示的な多段レジスタモードを示す図１０のブロック／回路図である。
【図１４−２】データ経路がスタックの最下位のＢＲＡＭモジュールのＢＲＡＭブロックで起動され、このようなＢＲＡＭブロックから上方にカスケード接続されること以外は、図１４−１と同一のブロック／回路図である。
【図１５】黒い太線で概して示されるデータ経路を有する例示的なダブルデータレート／ベクトルメモリモード（「ベクトルモード」）を示す図１０のブロック／回路図である。
【図１６】黒い太線で概して示されるデータ経路を有する別の例示的なベクトルモード、すなわち「荷重ベクトルモード」を示す図１０のブロック／回路図である。
【図１７−１】黒い太線で概して示されるデータ経路を有する別の例示的なベクトルモード、すなわち「シフトベクトルモード」を示す図１０のブロック／回路図である。
【図１７−２】黒い太線で概して示されるデータ経路１７００のためのシフトベクトルモードのための別の構成を示す図１７−１のブロック／回路図である。
【図１８】例示的な二次元アレイシストリックスイッチを示すブロック／回路図である。
【図１９】ＦＩＦＯカスケードモードのための、複数のスタックから形成され得るＦＩＦＯの例示的なチェーン（「チェーン」）を示すブロック図である。
【図２０】ＦＩＦＯカスケードモードのための、複数のスタックから形成され得るＦＩＦＯの別の例示的なチェーンを示すブロック図である。
【発明を実施するための形態】
【０００９】
以下の説明では、具体的な実施例をより完全に説明するために多数の具体的詳細について説明している。しかし、以下に記載されている全ての具体的詳細がなくても１つ以上の実施例を実施できるということは当業者に明らかであろう。他の例では、１つ以上の実施例を曖昧にしないように周知の特徴については詳細に説明しなかった。図解を容易にするために、異なる図の中で同一の数字表示を使用して同一の要素を指しているが、代替的な実施例では、それらの要素は異なっていてもよい。
【００１０】
いくつかの図に例示的に示されている例示的な実施例を説明する前に、さらなる理解のために概略を紹介する。
【００１１】
ＩＣにおいて専用のメモリモジュールを使用することは、これまでは、ルーティングが複雑であることを意味していたかもしれず、性能が損なわれていた。さらに、ＩＣにおいてこのような専用のメモリモジュールを使用することは、これまでは、複数のこのようなメモリモジュールの動作時の粒度または選択度の欠如により全てのこのような複数のメモリモジュールに同時に電力を供給する必要があることを意味していたかもしれない。上記の一般的理解を念頭に置いて、メモリシステムのメモリモジュールのためのさまざまな実施例について以下で大まかに説明する。
【００１２】
これらのメモリモジュールは、メモリアレイに加えて、レジスタおよびマルチプレクサを含み、これらは全て構成可能（コンフィギュラブル）な（またはプログラム可能な）ハードマクロとして提供される。このようなハードマクロは、コンフィギュレーションメモリセルを使用して構成可能である。メモリモジュールのためのハードマクロを提供することによって、ルーティングの複雑さを減少させることができ、性能を向上させることができる。そのような線に沿って、このようなメモリモジュールのスタックを形成するためのプログラム可能なリソースファブリックにおけるルーティングを回避することができる。さらに、いくつかの専用の回路リソースを追加することにより、複数の動作モードを追加することができる。
【００１３】
上記の実施例のうちの１つ以上は特定のタイプのＩＣを使用して例示されるので、このようなＩＣについて以下で詳細に説明する。しかし、専用のメモリモジュールを有するいかなるタイプのＩＣも、本明細書に記載されている実施例のうちの１つ以上から利益を得ることができる。さらに、以下の説明は、スタティック・ランダム・アクセス・メモリ（「ＳＲＡＭ」）セルを有し得る専用のランダム・アクセス・メモリ・ブロック（「ＢＲＡＭ」）に関するものであるが、他のタイプのメモリセルを有する他のタイプのメモリモジュールが使用されてもよい。
【００１４】
プログラマブル・ロジック・デバイス（「ＰＬＤ」）は、特定のロジック機能を実行するようにプログラム可能な周知のタイプの集積回路である。ＰＬＤの１つのタイプであるフィールド・プログラマブル・ゲート・アレイ（「ＦＰＧＡ」）は、典型的には、プログラム可能なタイルのアレイを含んでいる。これらのプログラム可能なタイルは、例えば入力／出力ブロック（「ＩＯＢ」）、コンフィギュラブル・ロジック・ブロック（「ＣＬＢ」）、専用のランダム・アクセス・メモリ・ブロック（「ＢＲＡＭ」）、乗算器、デジタル信号処理ブロック（「ＤＳＰ」）、プロセッサ、クロックマネージャ、遅延ロックループ（「ＤＬＬ」）などを含み得る。本明細書で使用される「含む」および「含んでいる」は、非限定的に含んでいることを意味している。
【００１５】
各々のプログラム可能なタイルは、典型的には、プログラム可能なインターコネクトと、プログラム可能なロジックとを両方とも含んでいる。プログラム可能なインターコネクトは、典型的には、プログラマブル・インターコネクト・ポイント（「ＰＩＰ」）によって相互接続されたさまざまな長さの多数のインターコネクト線を含んでいる。プログラム可能なロジックは、例えばファンクションジェネレータ、レジスタ、演算ロジックなどを含み得るプログラム可能なエレメントを使用して、ユーザ設計のロジックを実装している。
【００１６】
プログラム可能なインターコネクトおよびプログラム可能なロジックは、典型的には、コンフィギュレーションデータのストリームを、プログラム可能なエレメントが如何に構成されるかを規定する内部コンフィギュレーションメモリセルにロードすることによってプログラムされる。コンフィギュレーションデータは、外部デバイスによって、メモリから（例えば外部ＰＲＯＭから）読取られたり、ＦＰＧＡに書込まれたりし得る。そして、個々のメモリセルの集合状態がＦＰＧＡの機能を決定する。
【００１７】
ＰＬＤの別のタイプは、複合プログラマブル・ロジック・デバイス、すなわちＣＰＬＤである。ＣＰＬＤは、インターコネクト・スイッチ・マトリックスによって互いにおよび入力／出力（「Ｉ／Ｏ」）リソースに接続された２つ以上の「ファンクションブロック」を含んでいる。ＣＰＬＤの各ファンクションブロックは、プログラマブル・ロジック・アレイ（「ＰＬＡ」）およびプログラマブル・アレイ・ロジック（「ＰＡＬ」）デバイスで使用されるものと同様の２レベルＡＮＤ／ＯＲ構造を含んでいる。ＣＰＬＤでは、コンフィギュレーションデータは、典型的には、不揮発性メモリにオンチップで格納されている。いくつかのＣＰＬＤでは、コンフィギュレーションデータは、不揮発性メモリにオンチップで格納され、次いで初期のコンフィギュレーション（プログラミング）シーケンスの一部として揮発性メモリにダウンロードされる。
【００１８】
全てのこれらのプログラマブル・ロジック・デバイス（「ＰＬＤ」）では、デバイスの機能性は、その目的でデバイスに提供されるデータビットによって制御される。データビットは、揮発性メモリ（例えばＦＰＧＡおよびいくつかのＣＰＬＤにあるようなスタティックメモリセル）、不揮発性メモリ（例えばいくつかのＣＰＬＤにあるようなフラッシュメモリ）またはその他のタイプのメモリセルに格納され得る。
【００１９】
他のＰＬＤは、デバイス上でさまざまなエレメントをプログラム可能に相互接続する金属層などの処理層を設けることによってプログラムされる。これらのＰＬＤは、マスクプログラマブルデバイスとして知られている。また、ＰＬＤは、他の方法で、例えばヒューズまたはアンチヒューズ技術を使用して、実装されてもよい。「ＰＬＤ」および「プログラマブル・ロジック・デバイス」という用語は、これらの例示的なデバイスを含むがこれらに限定されるものではなく、一部だけがプログラム可能なデバイスも包含する。例えば、ＰＬＤの１つのタイプは、ハードコードされたトランジスタロジックと、当該ハードコードされたトランジスタロジックをプログラム可能に相互接続するプログラム可能なスイッチファブリックとの組合わせを含んでいる。
【００２０】
上記のように、アドバンストＦＰＧＡは、いくつかの異なるタイプのプログラム可能なロジックブロックをアレイに含み得る。例えば、図１は、多数の異なるプログラム可能なタイルを含むＦＰＧＡアーキテクチャ１００を示し、当該ＦＰＧＡアーキテクチャ１００は、マルチギガビット送受信機（「ＭＧＴ」）１０１と、コンフィギュラブル・ロジック・ブロック（「ＣＬＢ」）１０２と、ランダム・アクセス・メモリ・ブロック（「ＢＲＡＭ」）１０３と、入力／出力ブロック（「ＩＯＢ」）１０４と、コンフィギュレーションおよびクロッキングロジック（「ＣＯＮＦＩＧ／ＣＬＯＣＫＳ」）１０５と、デジタル信号処理ブロック（「ＤＳＰ」）１０６と、専用入力／出力ブロック（「Ｉ／Ｏ」）１０７（例えばコンフィギュレーションポートおよびクロックポート）と、デジタルクロックマネージャ、アナログ・デジタル変換器、システムモニタリングロジックなどの他のプログラム可能なロジック１０８とを含んでいる。いくつかのＦＰＧＡは、専用のプロセッサブロック（「ＰＲＯＣ」）１１０も含んでいる。
【００２１】
いくつかのＦＰＧＡでは、各々のプログラム可能なタイルは、プログラム可能なインターコネクト・エレメント（「ＩＮＴ」）１１１を含み、インターコネクト・エレメント１１１は、各々の隣接するタイルにおける対応のインターコネクト・エレメントへの／からの標準的な接続を有する。したがって、プログラム可能なインターコネクト・エレメントは、まとまって、示されているＦＰＧＡのためのプログラム可能なインターコネクト構造を実現する。図１の上部に含まれる例によって示されるように、プログラム可能なインターコネクト・エレメント１１１は、同一のタイル内に、プログラム可能なロジックエレメントへの／からの接続も含んでいる。
【００２２】
例えば、ＣＬＢ１０２は、ユーザのロジックを実装するようにプログラムされ得るコンフィギュラブル・ロジック・エレメント（「ＣＬＥ」）１１２と、単一のプログラム可能なインターコネクト・エレメント（「ＩＮＴ」）１１１とを含み得る。ＢＲＡＭ１０３は、１つ以上のプログラム可能なインターコネクト・エレメントに加えて、ＢＲＡＭロジックエレメント（「ＢＲＬ」）１１３を含み得る。典型的には、タイルに含まれるインターコネクト・エレメントの数は、タイルの高さによって決まる。示されている実施例では、ＢＲＡＭタイルは、５つのＣＬＢと同一の高さを有しているが、他の数（例えば４つ）も使用可能である。ＤＳＰタイル１０６は、適切な数のプログラム可能なインターコネクト・エレメントに加えて、ＤＳＰロジックエレメント（「ＤＳＰＬ」）１１４を含み得る。ＩＯＢ１０４は、例えば、プログラム可能なインターコネクト・エレメント１１１の１つのインスタンスに加えて、入力／出力ロジックエレメント（「ＩＯＬ」）１１５の２つのインスタンスを含み得る。当業者に明らかであるように、例えばＩ／Ｏロジックエレメント１１５に接続される実際のＩ／Ｏパッドは、典型的には、入力／出力ロジックエレメント１１５の領域に限定されない。
【００２３】
示されている実施例では、（図１に示される）ダイの中央付近の水平な領域が、コンフィギュレーション、クロックおよび他の制御ロジックに使用される。この水平な領域または列から延びる垂直な列１０９は、ＦＰＧＡの幅にわたってクロックおよびコンフィギュレーション信号を分配させるために使用される。
【００２４】
図１に示されるアーキテクチャを利用するいくつかのＦＰＧＡは、ＦＰＧＡの大部分を構成する規則的な列状構造を乱すさらなるロジックブロックを含んでいる。さらなるロジックブロックは、プログラム可能なブロックおよび／または専用のロジックであってもよい。例えば、プロセッサブロック１１０は、ＣＬＢおよびＢＲＡＭのいくつかの列にまたがっている。
【００２５】
なお、図１は、単に例示的なＦＰＧＡアーキテクチャを示すことを意図している。例えば、ある行の中のロジックブロックの数、行の相対幅、行の数および順序、行に含まれるロジックブロックのタイプ、ロジックブロックの相対的サイズ、および図１の上部に含まれるインターコネクト／ロジックの実装は、単に例である。例えば、実際のＦＰＧＡでは、ユーザのロジックの効率的な実装を容易にするために、典型的にはＣＬＢが現われるたびにＣＬＢの２つ以上の隣接する行が含まれるが、隣接するＣＬＢ行の数は、ＦＰＧＡの全体サイズによってさまざまである。
【００２６】
図２は、ＩＣチップの例示的なメモリシステム２００を示すブロック図である。この例では、互いに対してカスケード接続された４つのＢＲＡＭモジュール２５０があるが、他の例では、互いに対してカスケード接続された４つのＢＲＡＭモジュール２５０ではなくわずか２つ以上のＢＲＡＭモジュール２５０があってもよい。ＢＲＡＭモジュール２５０は、それぞれ構成可能（コンフィギュラブル）なハードマクロとして提供され得る。すなわち、ＢＲＡＭモジュール２５０は、いくつかの信号状態を設定するためのコンフィギュレーションメモリセルを有するＩＣチップにおける混載回路または専用の回路として提供され得る。したがって、メモリシステム２００は、図１のＦＰＧＡ１００のＢＲＡＭ１０３の列の一部であり得る。このような構成可能なハードマクロの列を提供することによって、より遅いプログラム可能なファブリックリソースをデータが通過するようにする必要なしに、このような列内でのデータの並列カスケーディングを可能にする構成を提供することができる。
【００２７】
各々のＢＲＡＭモジュール２５０は、互いに分離された上位メモリブロック２０１と下位メモリブロック２０２とを有している。この例では、４つのＢＲＡＭモジュール２５０−０〜２５０−３があるので、上位メモリブロック２０１は、それぞれのＢＲＡＭモジュール２５０−０〜２５０−３に対応してメモリブロック２０１−０〜２０１−３と表わされる。同様に、下位メモリブロック２０２は、それぞれのＢＲＡＭモジュール２５０−０〜２５０−３に対応してメモリブロック２０２−０〜２０２−３と表わされる。
【００２８】
ＢＲＡＭモジュール２５０ならびに関連のメモリブロック２０１および２０２は、カスケード接続されたＢＲＡＭモジュールまたはメモリブロックの列における最初のＢＲＡＭモジュールまたはメモリブロックから最後のＢＲＡＭモジュールまたはメモリブロックまで、−０〜−３と表わされる。この例では、ＢＲＡＭモジュール２５０の上位メモリブロック２０１は、カスケード結合されてメモリ列２０３を提供し、下位メモリブロック２０２は、カスケード結合されてメモリ列２０４を提供する。
【００２９】
各々のメモリ列は、別々のデータおよびアドレスバスを有し得る。この例では、メモリ列２０３は、データバス２０６と、アドレスバス２０５とを有している。アドレスバス２０５は、メモリブロック２０１−０〜２０１−３の各書込アドレスポートＡに共通して結合されている。この例では、データバス２０６は、メモリブロック２０１−０〜２０１−３の各データイン・ポートＤに共通して結合されている。別の例では、データバス２０６は、共通して結合される必要はなく、メモリブロック２０１−０〜２０１−３の各データイン・ポートＤは、別々の直接的なデータ入力を受取ってもよい。
【００３０】
同様に、この例では、メモリ列２０４は、データバス２０８と、アドレスバス２０７とを有している。アドレスバス２０７は、メモリブロック２０２−０〜２０２−３の各書込アドレスポートＡに共通して結合されている。この例では、データバス２０８は、メモリブロック２０２−０〜２０２−３の各データイン・ポートＤに共通して結合されている。ここでも、別の例では、データバス２０８は、共通して結合される必要はなく、メモリブロック２０２−０〜２０２−３の各データイン・ポートＤは、別々のデータ入力を受取ってもよい。
【００３１】
メモリ列２０３は、読取アドレスバス２４１を有し、メモリ列２０４は、読取アドレスバス２４２を有している。アドレスバス２４１は、メモリブロック２０１−０〜２０１−３の各読取アドレスポートＡに共通して結合され得る。アドレスバス２４２は、メモリブロック２０２−０〜２０２−３の各読取アドレスポートＡに共通して結合され得る。
【００３２】
ＢＲＡＭモジュール２５０の各メモリブロック２０１および２０２は、それぞれの制御マルチプレクサ２１７に結合され得る。例えば、上位メモリブロック２０１−０は、制御マルチプレクサ２１７のインスタンスに結合され得て、下位メモリブロック２０２−０は、制御マルチプレクサ２１７の別のインスタンスに結合され得る。
【００３３】
各々のメモリブロック２０１および２０２は、制御マルチプレクサ２１７の対応するインスタンスのブロック入力ポートにデータを提供するためのそれぞれのブロック出力ポート２１９を有し得る。各々の制御マルチプレクサ２１７は、下位の最近傍のＢＲＡＭ２５０からデータを受取るためのカスケード入力ポート２１５をさらに含み得る。例えば、ＢＲＡＭ２５０−１は、ブロック出力ポート２１９を介してＢＲＡＭ２５０−１の制御マルチプレクサ２１７にデータを提供し得る上位メモリブロック２０１−１を有し、このような制御マルチプレクサ２１７は、ＢＲＡＭ２５０−１のカスケード入力ノード２１５に結合され得て、このようなカスケード入力ノード２１５は、ＢＲＡＭ２５０−０のメモリブロック２０１−０に結合された制御マルチプレクサ２１７のデータアウトポートからの上位データアウト２１３Ｕと同一のノードである。同様に、例えば、ＢＲＡＭ２５０−１は、ブロック出力ポート２１９を介してＢＲＡＭ２５０−１の制御マルチプレクサ２１７の別のインスタンスにデータを提供し得る下位メモリブロック２０２−１を有し得て、このような制御マルチプレクサ２１７は、ＢＲＡＭ２５０−１のカスケード入力ノード２１５に結合され得て、このようなカスケード入力ノード２１５は、ＢＲＡＭ２５０−０のメモリブロック２０２−０に結合された制御マルチプレクサ２１７のデータアウトポートからの下位データアウト２１３Ｌと同一のノードである。明確にする目的および非限定的な目的で、メモリ列２０３および２０４内の他の下位から上位の最近傍のメモリブロックについては同様の説明は繰返さない。
【００３４】
信号の伝達に関連付けられた単一線が例示的に示されているが、多くのインスタンスでは、このような単一線は、並列のビットバスを表わし、そのため複数の伝達線を表わし得る。例えば、ＢＲＡＭモジュール２５０は、７２ビットのデータ出力幅を有し得るが、このようなデータ出力幅は、各々３６ビットの２つの等しい部分に分割されてもよい。このような部分のうちの１つの部分が、本明細書では「上位」部分と呼ばれ、メモリ列２０３に関連付けられ得て、このような部分のうちの別の部分が、本明細書では「下位」部分と呼ばれ、メモリ列２０４に関連付けられ得る。他のビット幅が使用されてもよいので、上記のビット幅は、明確にする目的、例示の目的および非限定的な目的で使用されている。したがって、例示の目的で、ビット０〜３５が下位部分と呼ばれ、ビット３６〜７１が上位部分と呼ばれる。このような命名と整合性がとれるように、上位メモリブロック２０１に関連付けられた制御マルチプレクサ２１７の出力は、データアウト２１３という参照番号の後に「Ｕ」を付けて、すなわちデータアウト２１３Ｕと表わされる。同様に、下位メモリブロック２０２に関連付けられた制御マルチプレクサ２１７の出力は、データアウト２１３という参照番号の後に「Ｌ」を付けて、すなわちデータアウト２１３Ｌと表わされる。
【００３５】
各々のＢＲＡＭモジュール２５０は同一のパターンを何度も複製して形成され得るので、スタックの最初のＢＲＡＭモジュール２５０−０は、任意にカスケード入力２１１を有し得る。しかし、スタックの最初のＢＲＡＭモジュール２５０に入力されるカスケード型データはなくてもよく、したがって、このようなカスケード入力２１１は、例えば接地または供給電圧に結合されてもよい。同様に、各々のＢＲＡＭモジュール２５０は同一のパターンを何度も複製して形成され得るので、スタックの最後のＢＲＡＭモジュール２５０−ｘは、任意にデータアウト２１３のカスケード出力オフを有し得る。しかし、このようなスタックの別のＢＲＡＭモジュール２５０に出力されるカスケード型データはなくてもよく、したがって、たとえそのためのカスケード出力ノード／トレースがあったとしても、データアウト２１３のこのようなカスケード出力オフは、例えばこのようなスタックの別のＢＲＡＭモジュール２５０に結合されなくてもよい。
【００３６】
図３−１は、ＢＲＡＭモジュール２５０の例示的な上位部分または下位部分を示すブロック／回路図である。図３−２は、例示的なカスケード制御ブロック３７０を示すブロック図である。図４は、ＢＲＡＭモジュール２５０の例示的なスタック４００を示すブロック／回路図である。図２〜図４を同時に参照して、ＢＲＡＭモジュール２５０およびスタック４００についてさらに説明する。
【００３７】
この例では、ＢＲＡＭモジュール２５０の上位部分または下位部分は、ＢＲＡＭブロック３１３と、レジスタ３３５と、マルチプレクサ３０５，３２５，３４５および２１７とを含む。したがって、上位部分および下位部分を有する各々のＢＲＡＭモジュール２５０は、複数のＢＲＡＭブロック３１３と、レジスタ３３５と、２入力マルチプレクサ３０５，３２５，３４５および２１７の組とを含む。別の例では、マルチプレクサ２１７は３入力マルチプレクサであってもよく、この例では、マルチプレクサ３４５は省略されてもよい。しかし、明確にする目的、例示の目的および非限定的な目的で、２入力マルチプレクサ３０５，３２５，３４５および２１７を使用することが想定されるものとする。
【００３８】
マルチプレクサ３０５は、データインマルチプレクサと呼ぶことができ、各々のこのようなマルチプレクサ３０５は、複数のポートを有しており、当該複数のポートは、データイン入力ポート３０１、カスケード入力ポート３０２、カスケード／データイン選択ポート３０３、および書込データ出力ポート３０４と呼ぶことができる。カスケード／データイン選択ポート３０３は、コンフィギュレーションメモリセル３６１に結合され得る。コンフィギュレーションメモリセル３６１は、データインマルチプレクサ３０５がデータイン入力ポート３０１の入力データまたはカスケード入力ポート３０２のカスケード入力データ２１３−（ｘ−１）（ここで、「ｘ」はＢＲＡＭモジュールレベルを指す）の間で選択を行って、このような選択されたデータを書込データ出力ポート３０４を介して出力するようにプログラムされ得る。したがって、コンフィギュレーションメモリセル３６１は、データインマルチプレクサ３０５の出力を制御するために使用可能である。
【００３９】
各々のＢＲＡＭブロック３１３は、書込データ入力ポート３１２と、クロックポート３１１と、読取データ出力ポート３１４とを有し得る。クロックポート３１１に提供されるクロック信号３１１Ｓを使用して、ＢＲＡＭブロック３１３は、同期メモリとして動作し得る。ＢＲＡＭブロック３１３は、明確にする目的および非限定的な目的で概して図示されていない他のポートの中で、書込アドレスポート、書込イネーブルポート、読取イネーブルポートおよび読取アドレスポートなどのさらなるポートを有し得る。そのような線に沿って、ＢＲＡＭブロック３１３は、ＦＰＧＡの公知のＢＲＡＭであり得る。例えば、公知のＢＲＡＭは、４つの９Ｋビットメモリアレイを有していてもよく、各々のこのようなメモリアレイは、１〜１８ビットを選択的に出力し得て、このような出力は、連結されて７２ビット幅のバスを提供し得る。明確にする目的、例示の目的および非限定的な目的で、３６ビット幅の出力がＢＲＡＭブロック３１３から提供され、このようなＢＲＡＭブロック３１３は、このようなメモリアレイのうちの２つに関連付けられることが想定されるものとする。しかし、他の例では、非限定的に他のメモリアレイサイズおよび／またはビット幅サイズを含むＢＲＡＭブロック３１３の他の構成が使用されてもよい。
【００４０】
書込データ入力ポート３１２は、書込データ出力ポート３０４から書込データを受取るように結合され得る。ＢＲＡＭブロック３１３から読取られたデータは、読取データとして読取データ出力ポート３１４から出力され得る。
【００４１】
マルチプレクサ３２５は、パイプラインマルチプレクサと呼ぶことができ、各々のこのようなマルチプレクサ３２５は、複数のポートを有しており、当該複数のポートは、読取データ入力ポート３２１、カスケード入力ポート３２２、パイプライン選択ポート３２３、およびレジスタデータ出力ポート３２４と呼ぶことができる。読取データ入力ポート３２１は、読取データ出力ポート３１４から出力された読取データを受取るように結合され得る。パイプライン選択ポート３２３は、カスケード制御ブロック３７０から出力された「ｓｅｌｘ」信号３２３Ｓを受取るように結合され得て、ここで、「ｓｅｌ」は選択を指し、「ｘ」はここでもＢＲＡＭモジュールレベルを指し、この例では０〜３の整数である。そのような線に沿って、ＢＲＡＭブロック３１３はＢＲＡＭｘと表わされる。「ｓｅｌｘ」信号３２３Ｓに応答して、パイプラインマルチプレクサ３２５は、レジスタデータと呼ぶことができる読取データを出力し得て、またはレジスタデータ出力ポート３２４を介してカスケード入力データ２１３−（ｘ−１）を出力し得る。
【００４２】
各々のレジスタ３３５は、レジスタデータ入力ポート３３１と、登録データ出力ポート３３３と、クロックポート３３２とを有し得る。クロックポート３３２は、レジスタクロック信号３３２Ｓを受取るように結合され得る。レジスタクロック信号３３２Ｓおよびクロック信号３１１Ｓは、異なるクロック信号であってもよく、または同一のクロック信号であってもよい。レジスタデータ入力ポート３３１は、レジスタデータ出力ポート３２４からレジスタデータを受取るようにレジスタデータ出力ポート３２４に結合され得る。レジスタ３３５に格納されたレジスタデータは、登録データ出力ポート３３３を介して、レジスタクロック信号３３２Ｓに応答してクロックアウトされ得る。
【００４３】
マルチプレクサ３４５は、レジスタ／ラッチモードまたはデータアウトマルチプレクサと呼ぶことができ、このようなマルチプレクサ３４５の各々は、複数のポートを有しており、当該複数のポートは、読取データ入力ポート３４１、登録データ入力ポート３４２、登録／未登録選択ポート３４３、およびブロック出力ポート２１９と呼ぶことができる。読取データ入力ポート３４１は、ＢＲＡＭブロック３１３から読取データを受取るように読取データ出力ポート３１４に結合され得る。登録データ入力ポート３４２は、レジスタ３３５からクロックアウトされた登録データを受取るように登録データ出力ポート３３３に結合され得る。
【００４４】
登録／未登録選択ポート３４３は、コンフィギュレーションメモリセル３６２に結合され得る。コンフィギュレーションメモリセル３６２は、データアウトマルチプレクサ３４５が読取データ入力ポート３４１の読取データまたはレジスタデータ入力ポート３４２の登録データの間で選択を行って、このような選択されたデータをブロック出力ポート２１９を介して出力するようにプログラムされ得る。したがって、コンフィギュレーションメモリセル３６２は、データアウトマルチプレクサ３４５の出力を制御するために使用可能である。
【００４５】
この例では、上位または下位メモリブロック２０１は、ＢＲＡＭブロック３１３と、レジスタ３３５と、マルチプレクサ３０５，３２５および３４５とを含んでいる。したがって、データアウトマルチプレクサ３４５からの出力は、ブロックデータ出力と呼ぶことができる。ＢＲＡＭモジュール２５０は、出力バスの上位部分と下位部分とに分割された出力バスを有し得るので、上位メモリブロック２０１Ｕのブロック出力ポート２１９は、このようなＢＲＡＭモジュール２５０のこのような出力バスの上位部分のためのものであり得て、下位メモリブロック２０１Ｌのブロック出力ポート２１９は、このようなＢＲＡＭモジュール２５０のこのような出力バスの下位部分のためのものであり得る。
【００４６】
マルチプレクサ２１７は、制御マルチプレクサと呼ばれ、このようなマルチプレクサ２１７の各々は、複数のポートを有しており、当該複数のポートは、カスケード入力ポート３５２、ブロック入力ポート３５１、制御選択ポート３５３、およびデータアウトポート３５４と呼ぶことができる。ブロック入力ポート３５１は、ブロック出力ポート２１９から出力されたブロックデータを受取るように結合され得る。カスケード入力ポート３５２は、カスケード入力データ２１３−（ｘ−１）を受取るように結合され得る。制御選択ポート３５３は、制御選択信号、すなわち「ｃｎｔｌｘ」信号３５３Ｓを受取るように結合され得て、ここで、「ｃｎｔｌ」は制御を指し、「ｘ」はここでもＢＲＡＭモジュールレベルを指す。「ｃｎｔｌｘ」信号３５３Ｓに応答して、制御マルチプレクサ２１７は、ブロック入力ポート３５１のブロックデータ出力またはカスケード入力ポート３５２のカスケード入力データ２１３−（ｘ−１）の間で選択を行って、このような選択されたデータをデータアウトポート３５４を介して出力し得る。ここでも、この例におけるＮ幅のバスは３６ビットであると想定され、したがって、例えばデータアウトポート３５４は３６ビット幅のバスであろう。
【００４７】
そのような線に沿って、カスケード入力ポート３０２，３３２および３５２は、最近傍の下位ＢＲＡＭモジュールレベルからカスケード入力データ２１３−（ｘ−１）を受取るようにＢＲＡＭモジュールレベルのカスケード入力ノード２１５ｘに共通して結合され得る。ＢＲＡＭモジュール２５０のバスの上位部分または下位部分のためのものであり得るデータアウト２１３は、最近傍の下位ＢＲＡＭモジュールレベルからのカスケード入力データ２１３−（ｘ−１）または現在のＢＲＡＭモジュールレベルのメモリブロック２０１ｘからのブロックデータ出力であり得る。ＢＲＡＭモジュール２５０−０などのＢＲＡＭモジュール２５０のスタック４００の最下位レベルは、例えば接地４０１などの静電圧に結合された上位カスケード入力ノード２１５Ｕおよび下位カスケード入力ノード２１５Ｌを有し得る。
【００４８】
ＢＲＡＭモジュール２５０の上位メモリブロック２０１Ｕのカスケード入力ポート３０２，３３２および３５２は、上位カスケード入力ノード２１５Ｕに結合され得る。このようなＢＲＡＭモジュール２５０の下位メモリブロック２０１Ｌのカスケード入力ポート３０２，３３２および３５２は、下位カスケード入力ノード２１５Ｌに結合され得る。ＢＲＡＭモジュール２５０−３などのＢＲＡＭモジュール２５０のスタック４００の最上位レベルは、このようなスタック４００では後続のＢＲＡＭモジュールレベルがないので、このようなスタック４００の後続のＢＲＡＭモジュールレベルへのカスケード入力に使用されることのない上位データアウト２１３Ｕおよび下位データアウト２１３Ｌを有し得る。現在のまたは上位のＢＲＡＭモジュールレベルのカスケード入力ノード２１５は、最近傍の下位ＢＲＡＭモジュールレベルのデータアウトポート３５４と同一のノードであってもよい。上記のこのようなＢＲＡＭモジュールレベル間結合は、スタック４００の複数のＢＲＡＭモジュールレベル間結合のためのものであってもよい。
【００４９】
４つのレベルのＢＲＡＭモジュール２５０が例示的に示されているが、わずか１つのＢＲＡＭモジュール２５０が一度に使用されてもよい。さらに、スタック４００について４つのレベルのＢＲＡＭモジュール２５０が例示的に示されているが、スタック４００は、２つ以上のレベルのＢＲＡＭモジュール２５０を有していてもよく、そのため、４つのレベルのＢＲＡＭモジュール２５０よりも少ないレベルまたは多いレベルのＢＲＡＭモジュール２５０が使用されてもよい。
【００５０】
上位メモリブロック２０１のブロック出力ポート２１９は、ＢＲＡＭモジュール２５０の出力バスの第１の部分のためのものであり得て、下位メモリブロック２０２のブロック出力ポート２１９は、このようなＢＲＡＭモジュール２５０の出力バスの第２の部分のためのものであり得る。例えば図１のＦＰＧＡ１００などのＩＣ上にスタック４００を設けるために、このような構成が複数のＢＲＡＭモジュール２５０について繰返され得る。したがって、メモリ列２０３または２０４は、ＢＲＡＭモジュール２５０のそれぞれ上位部分および下位部分のスタック４００を設けるために使用され得て、メモリシステム２００内での「垂直な」データバス用の、例えば一連の並列のデータストリームのように、データが、構成可能なハードマクロメモリシステム２００内で下位ＢＲＡＭモジュールレベルから上位ＢＲＡＭモジュールレベルまで並列にカスケード接続され得る。しかし、例えば１つ以上の上位メモリブロック２０１に関連付けられた１つ以上のデータアウトポート３５４からの並列のデータアウト２１３は、複数のデータアウト２１３Ｕのように、プログラム可能なファブリックリソースに複数の並列のデータストリームを並列に提供するために使用され得る。同様に、例えば１つ以上の下位メモリブロック２０２に関連付けられた１つ以上のデータアウトポート３５４からの並列のデータアウト２１３は、複数のデータアウト２１３Ｌのように、プログラム可能なファブリックリソースに複数の並列のデータストリームを提供するために使用され得る。このような構成では、例えばＢＲＡＭモジュール２５０−３の出力バスの上位部分と、例えばＢＲＡＭモジュール２５０−２の出力バスの上位部分との組合わせは、メモリシステム２００からの「水平な」データバスのために、プログラム可能なファブリックリソースに出力バスを提供し得る。
【００５１】
カスケード制御ブロック３７０は、複数の制御信号３７１を受取るように結合され得て、応答して、ｓｅｌｘ信号３２３ＳＵおよび３２３ＳＬならびにｃｎｔｌｘ信号３５３ＳＵおよび３５３ＳＬを提供するように構成され得る。信号３２３ＳＵおよび３５３ＳＵは、ＢＲＡＭモジュール２５０の上位部分に提供され、信号３２３ＳＬおよび３５３ＳＬは、ＢＲＡＭモジュール２５０の下位部分に提供される。制御信号の例としては、ａが挙げられ得るが、これに限定されるものではない。
【００５２】
要約すると、複数のＢＲＡＭは、例えば１から３６ビットまでを構成可能であり得るデータをボトムアップ方向にカスケードするように直列に結合されて、より大きなメモリブロックを効果的に作製し得る。これまでは、従来のＢＲＡＭのこのような直列連結は、プログラム可能なファブリックリソース、すなわちルックアップテーブル（「ＬＵＴ」）を使用して行われていたため、遅く、消費電力が多く、および／または、消費されるプログラム可能なファブリックリソースが多かった。そのような線に沿って、先入れ先出しバッファ（「ＦＩＦＯ」）コンフィギュレーションが使用可能であり、このような構成では、ＢＲＡＭモジュールの列全体が構成可能なハードマクロとして結合され得て、深いＦＩＦＯを提供し、当該ＦＩＦＯは、スタック４００を結合してこのようなＦＩＦＯを提供するプログラム可能なファブリックリソースを使用しなければならないことによって性能が制限されることはない。ロジックおよびルーティングは、ハードマクロメモリシステム２００に対してローカルであるので、このようなＦＩＦＯは、従来のＢＲＡＭの連結を行ってこのような深いＦＩＦＯを提供するためにプログラム可能なファブリックリソースを使用していた場合よりも大幅に高い周波数で動作することができる。さらに、ＢＲＡＭモジュールの半分は、一度に使用されてもよい。例えば、データは、ＢＲＡＭモジュールバスの最上位部分のみから出力されてもよい。同様に、データは、ＢＲＡＭモジュールバスの最下位部分のみから出力されてもよい。さらに、ＢＲＡＭモジュールバスの両方の部分が、同時であるが互いに独立して使用されてもよい。上記の説明は、ボトムアップ方向にデータをカスケードするためのものであったが、他の構成では、データは、トップダウン方向および／またはボトムアップ方向に移動されてもよい。直列カスケーディングのための全ての信号ルーティングおよび制御ロジックは、メモリシステムとして提供されるハードマクロ内に実装され得るので、速度を含むがこれに限定されない性能を向上させることができる。さらに、以下でさらに詳細に説明するように、低電力モードが使用可能であり、またはより特定的には、電力と性能とのバランスをとるようにデータ幅が個々に調整され得る。そのような線に沿って、ＢＲＡＭメモリモジュールの一部が一度に使用されてもよいということが理解されるべきである。データは接続部からプログラム可能なファブリックリソースに個々に提供され得るが、カスケード接続されたＢＲＡＭモジュールにわたる共通の入力が、このようなプログラム可能なファブリックリソースのプログラム可能なインターコネクトを使用して接続されてもよい。さらに、このようなカスケーディングは、エラー修正符号化とともに使用されてもよい。
【００５３】
ＢＲＡＭモジュール２５０は、単独でも組合わせても、複数のモードのうちのいずれかのモードのために構成可能であり得る。一般に、これらのモードは、カスケードモードおよびメモリモードとして分類され得て、このようなモードの変形例について以下でさらに詳細に説明する。
【００５４】
図５は、例示的な復号テーブル５００を示すテーブル図である。図６は、復号テーブル５００に従った例示的なスタック４００を示すブロック／回路図である。スタック４００はＢＲＡＭモジュール２５０の上位部分のためのものであるが、ＢＲＡＭモジュール２５０の下位部分も同様に使用されてもよい。明確にする目的および非限定的な目的で、図６ではＢＲＡＭモジュール２５０は簡略化されている。図１から図６を同時に参照して、復号テーブル５００についてさらに説明する。
【００５５】
復号テーブル５００は、４つのカスケード接続されたＢＲＡＭモジュール２５０のためのイネーブル信号５１０〜５１３（「ＥＮ０〜ＥＮ３」）および選択信号３５３Ｓ０〜３５３Ｓ３（「Ｓ０〜Ｓ３」）を復号するためのものである。列５０１は、現在の動作でデータがどのＢＲＡＭブロック３１３にあるかを示している。イネーブル信号５１０〜５１３についての列は、列５０１のＢＲＡＭブロック３１３の状態を示している。同様に、列３５３Ｓ０〜３５３Ｓ３は、列５０１の対応するＢＲＡＭブロック３１３の選択信号の状態を示している。復号テーブル５００における論理１は、それに関連付けられた信号がアサートされることを示し、復号テーブル５００における論理０は、それに関連付けられた信号がアサートされないことを示している。復号テーブル５００における「Ｘ」は、それに関連付けられた信号が論理０であるか１であるかが問題にならない（「無関係」）ことを示している。
【００５６】
ＢＲＡＭブロック３１３がＦＰＧＡの公知のＢＲＡＭであり得るので、このようなＢＲＡＭブロックは、ＳＲＡＭセルの４つの９キロビット（「Ｋ」）メモリアレイを有し得る。これらのアレイのうちのどれを使用するかを選択するために、２ｔｏ４復号に対してさらなる２つのアドレスビットが提供され得る。このようなＢＲＡＭは、イネーブル信号に加えて他の公知の信号を有している。
【００５７】
一般に、復号テーブル５００は、ＢＲＡＭモジュール２５０の「ワンホット」コンフィギュレーションのためのものである。このモードでは、下位レベルのＢＲＡＭモジュールの出力は、上位レベルのＢＲＡＭモジュールの出力によって多重化され、上位レベルのＢＲＡＭモジュールの出力は、順次、次の上位レベルのＢＲＡＭ出力によって多重化され得る。このタイプの直列カスケーディングは、使用されるルーティング線を少なくすることができ、２つのＢＲＡＭモジュール２５０からメモリ列２０３または２０４における同数のＢＲＡＭモジュール２５０に変更可能である。
【００５８】
本明細書に記載されているように、ＢＲＡＭモジュール２５０は、異なるＢＲＡＭモジュールからのデータアウトを多重化するための複数の方法を提供する。直列カスケーディングでは、コンフィギュレーションメモリセルのうちの１つ以上は、カスケード制御ブロック３７０と、対応するＢＲＡＭブロック３１３から読取られたデータまたは下位レベルのＢＲＡＭモジュールのカスケード出力から得られたデータの間で選択を行うためのマルチプレクサ２１７とに結合され得る。そのような線に沿って、ＢＲＡＭモジュール２５０は、連続データフローモードのために構成され得る。
【００５９】
デフォルトオプションは、復号テーブル５００を参照して例示的に示されるように、メモリブロック２０１にそれぞれ提供されるＢＲＡＭブロックイネーブル信号５１０〜５１３が、カスケード制御ブロック３７０のインバータ６０１に同様に提供されて、データ出力の多重化を実行するために使用されるようにすることを可能にするためのものであり得る。コンフィギュレーションメモリセル６０２は、選択信号Ｓ０〜Ｓ３をそれぞれ提供するように、対応するインバータ６０１からの出力に応答してそれぞれプログラムされ得る。そのような線に沿って、イネーブル信号５１０〜５１３は、対応するカスケードイネーブル信号であると考えることができる。選択信号Ｓ０〜Ｓ３は、対応する制御またはカスケードマルチプレクサ２１７に提供され得る。
【００６０】
複数のＢＲＡＭモジュール２５０がカスケード接続されると、復号テーブル５００に関してＢＲＡＭブロックイネーブル信号５１０〜５１３が１つだけ一度にアクティブになる。すなわち、これは「ワンホット」スキームである。アクティブになった、またはアサートされたＢＲＡＭブロックイネーブル信号は、データが読取られるＢＲＡＭブロック３１３のためのものであり得て、したがって、このようなＢＲＡＭブロック３１３のための、ＢＲＡＭブロックイネーブル信号５１０〜５１３のうちの１つのＢＲＡＭブロックイネーブル信号は、論理１に設定され得る。全ての他のＢＲＡＭブロックイネーブル信号５１０〜５１３は、このとき論理０状態に設定され得る。カスケード制御ブロック３７０は、カスケード多重化を制御するように内部メモリシステム２００を設定するために、このような復号を使用し得る。例えば、ＢＲＡＭブロックイネーブル信号５１０〜５１３が論理０に設定されると、出力データは、対応するＢＲＡＭブロック３１３からではなく、カスケードされた入力から来るであろう。そのような線に沿って、ユーザは、各々のアサートされたＢＲＡＭブロックイネーブル信号に関連付けられた各々のカスケード接続されたＢＲＡＭブロック３１３に、復号されたアドレスを提供し得る。復号テーブル５００は、内部マルチプレクサ制御シグナリングを生成して連続的なＢＲＡＭモジュール２５０の制御マルチプレクサ２１７からの出力を制御するために、異なるＢＲＡＭブロック３１３についてイネーブル信号５１０〜５１３が連続的にアサートされ得ることを示している。
【００６１】
ＢＲＡＭブロックを選択的に活性化するためにワンホットスキームを使用することにより、電力を効率的に使用することができる。なぜなら、有用なデータを有するＢＲＡＭブロック３１３のみが一つずつアクセスされ得るからである。レジスタモードでは、カスケード多重化に使用される選択信号は、１クロックサイクルだけ遅延され得て、すなわち、これは１クロックサイクルのレイテンシである。カスケード制御ブロック３７０に提供される内部カスケードＡ／Ｂ信号および／または外部カスケード選択Ａ／Ｂ信号が、カスケード多重化を制御するためにアサートされ得る。ワンホットカスケードモードの間は、ＢＲＡＭブロック３１３がカスケードデータアウトイネーブル・コンフィギュレーションメモリセルを論理１に設定すると、カスケードチェーンを継続させるために、それに関連付けられたＢＲＡＭカスケード信号が次のＢＲＡＭモジュールレベルのために活性化され得る。しかし、このようなカスケードデータアウトイネーブルＡ／Ｂコンフィギュレーションメモリセルが論理０に設定されると、節電するために、このようなカスケーディングは、このようなワンホットカスケードモードでのスイッチングがディスエーブルされ得る。例えば、カスケードチェーンにおける最上位のＢＲＡＭブロック３１３は、スイッチング電力を節約するために、論理０に設定されたカスケードデータアウトイネーブルＡ／Ｂ信号を使用してディスエーブルされ得る。
【００６２】
図７は、例示的な４深度のワンホットカスケードモード（「カスケードモード」）７００を示す信号タイミング図である。カスケードモード７００は、低周波数動作のためのものであり、二段階バーストモードのためのものである。二段階バーストモードが例示的に示されているが、より長いバーストモードが使用されてもよい。第１のバースト段階７０１は、クロック信号３１１、読取アドレス信号２４１、イネーブル信号５１０〜５１３、およびＢＲＡＭブロック３１３からデータ出力レジスタ３３５にデータを出力するための組合わせられたデータアウト信号７０３の例示的な状態を示している。第２のバースト段階７０２は、クロック信号３１１、読取アドレス信号２４１、イネーブル信号５１０〜５１３およびデータアウト２１３Ｕの例示的な状態を示している。
【００６３】
図８は、パイプラインモード（「パイプラインカスケードモード」）でのデータアウトカスケードのために構成された例示的なスタック４００を示すブロック／回路図である。スタック４００はＢＲＡＭモジュール２５０の上位部分のためのものであるが、ＢＲＡＭモジュール２５０の下位部分が同様に使用されてもよい。明確にする目的および非限定的な目的で、図８ではＢＲＡＭモジュール２５０は簡略化されている。図１〜図８を同時に参照して、パイプラインカスケードモードについてさらに説明する。
【００６４】
パイプライン型カスケードモードは、ユーザが高い動作周波数でカスケードモードを利用することを可能にする。この構成では、カスケードモードで高い動作周波数を得るために、さらなるパイプライン段階として出力レジスタ３３５が使用される。カスケード／パイプラインＡ／Ｂコンフィギュレーションメモリセル３６２およびレジスタ３３５のデータアウトレジスタＡ／Ｂコンフィギュレーションメモリセルは、各々論理１に設定され得る。以前のもしくは下位レベルの最近傍のＢＲＡＭモジュール２５０からのデータ、または、現在のもしくは現在のレベルのＢＲＡＭモジュール２５０からのデータを多重化して、出力データを対応するレジスタ３３５に格納するように、選択信号３２３Ｓが設定され得る。パイプライン型カスケードモードが使用され得て、またはより一般的には、パイプライン型モードが使用されると、ＢＲＡＭモジュール２５０の最後のマルチプレクサ、すなわち制御マルチプレクサ２１７は、それぞれ、現在のレベルのＢＲＡＭモジュール２５０からデータを選択して出力するように設定され得る。パイプライン型カスケードモードの間、データ出力のカスケーディングは、レジスタ３３５内を伝播する。
【００６５】
図９は、図８の例示的なスタック４００のための例示的な４深度のパイプラインカスケードモード（「カスケードモード」）９００を示す信号タイミング図である。カスケードモード９００は、高周波数動作のためのものであり、４つのＢＲＡＭモジュール２５０を使用した、バースト長が４である三段階バーストモードのためのものである。バースト長が４であることが例示的に示されているが、いかなるバースト長も使用されてもよい。カスケードモード９００は、クロック信号３１１、読取アドレス信号２４１、イネーブル信号５１０〜５１３（「ＥＮ０〜３」）の組合わせ、カスケードイネーブル信号３２３Ｓ０〜Ｓ３、およびデータアウト２１３Ｕの例示的な状態を示している。
【００６６】
図１０は、上位部分または下位部分スタック４００の入力側および出力側でプログラム可能なファブリックリソース１０００に結合された、このようなスタック４００の例示的な実施例を示すブロック／回路図である。図２〜図９を同時に参照して、図１０についてさらに説明する。
【００６７】
明確にする目的、例示の目的および非限定的な目的で、スタック４００は、４つのＢＲＡＭモジュール２５０を含んでいる。明確にする目的および非限定的な目的で、スタック４００のＢＲＡＭモジュール２５０は簡略化されている。特に、ポート３０１へのデータイン入力信号は、それらの関連のＢＲＡＭモジュール２５０に対応してデータ入力信号ＤＩ（０）〜ＤＩ（３）と表わされている。同様に、ｓｅｌｘ信号３２３Ｓは、それらの関連のＢＲＡＭモジュール２５０に対応して選択データ入力信号ＳＤＩ（０）〜ＳＤＩ（３）と表わされ、ｃｎｔｌｘ信号３５３Ｓは、それらの関連のＢＲＡＭモジュール２５０に対応して選択データ出力信号ＳＤＯ（０）〜ＳＤＯ（３）と表わされている。この簡略化された構成を使用して、スタック４００のさまざまなモードまたは構成についてさらに説明する。
【００６８】
一般に、ＳＤＯ（ｘ）信号は、上記の例では７２ビットバスであるＢＲＡＭモジュール２５０の出力バスのための出力多重化を制御するための動的な１ビットの選択信号である。このようなＳＤＯ（ｘ）信号は、節電のためのバス多重化、ワイドバスＲＡＭ構成、低電力ワイドＢＲＡＭ使用モード、または静的なＦＩＦＯカスケードに使用可能である。一般に、ＳＤＩ（ｘ）信号は、出力レジスタの入力ソース、すなわち出力カスケードまたはＲＡＭラッチ出力のいずれかを制御するための動的な１ビットの選択信号である。このようなＳＤＩ（ｘ）信号は、出力多重化と連動させた高い動作周波数での多段階の深さのＲＡＭ、または、複数レベルのメモリ深さを有するメモリへの高周波数でのベクトル／バースト非ランダムアクセスに使用可能である。
【００６９】
図１１は、黒い太線で概して示されるデータ経路１１００を有する例示的なシストリックモードまたはＦＩＦＯモードを示す図１０のブロック／回路図である。より特定的には、シストリックモードに関して、パイプライン書込であると考えることができるシストリック書込用のカスケードのためにデータが入力され得る。スタック４００を通るデータ経路１１００は、シストリックモードでの４つのＢＲＡＭモジュール２５０を通るデータの移動を示している。データ経路１１００は、プログラム可能なファブリックリソース１０００からのＤＩ（０）入力から開始し得る。
【００７０】
シストリックモードは、ユーザが下位レベルのＢＲＡＭブロック３１３にデータを書込み、その後、このような下位レベルのＢＲＡＭブロック３１３からデータを読出して、最近傍の上位レベルのＢＲＡＭブロック３１３に書込むことを可能にする。この行程は、このようなデータが全てのカスケード接続されたＢＲＡＭモジュール２５０内を伝播するまで継続し得る。ユーザは、このようなカスケード接続されたＢＲＡＭモジュールのうちのいずれかからデータをランダムに取り出し得る。この構成では、メモリシステム２００のハードマクロタイル内の専用のルーティングを使用して、データのみが下位レベルから上位レベルおよびスタック４００にカスケードされ得る。プログラム可能なファブリックリソース１０００のプログラム可能なインターコネクトからこのようなメモリシステムのハードマクロタイルに他の入力信号が加えられてもよい。下位レベルのＢＲＡＭモジュールからの読取データを上位レベルのＢＲＡＭモジュールのＢＲＡＭブロック３１３に書込むことを可能にするように、下位レベルのＢＲＡＭモジュール２５０から最近傍の上位レベルのＢＲＡＭモジュール２５０までカスケードされたデータ出力は、ＳＤＩ（ｘ）信号などのカスケードデータ入力選択Ａ／Ｂ信号によって制御され得る。
【００７１】
データ経路１１００は、エラー修正コードを含むがこれに限定されないフルスピードカスケードとして実行され得るＦＩＦＯモードのものと同一である。ＦＩＦＯモードについては、以下でさらに詳細に説明する。
【００７２】
図１２−１は、黒い太線で概して示されるデータ経路１２００を有する例示的な低電力レジスタモードを示す図１０のブロック／回路図である。データは、ＢＲＡＭモジュール２５０のうちのいずれかのレジスタ３３５にロードされ得る。レジスタモードでは、ＢＲＡＭモジュール２５０のレジスタ３３５が一度に１つだけ活性化される。すなわち、これはワンホットレジスタカスケードモードである。
【００７３】
最上位のＢＲＡＭモジュール、すなわちＢＲＡＭモジュール２５０−３からプログラム可能なファブリックリソース１０００におけるレジスタ１２０１に延びるレジスタモードのためのデータ経路１２００が例示的に示されているが、レジスタモードは、スタック４００におけるいかなるレジスタ３３５からも起動されてもよい。レジスタモードでは、データがレジスタ３３５にロードされた後、このようなデータは、以下で説明するラッチモードよりも速いこのようなレジスタから繰返しクロックアウトされ得る。この例では、スタックから出力されるデータは、ＤＯ（３）である。
【００７４】
図１２−２は、データ経路１２００がスタック４００の最下位のＢＲＡＭモジュール２５０−０のレジスタ３３５で起動され、このようなレジスタ３３５から上方にカスケード接続されること以外は、図１２−１と同一のブロック／回路図である。したがって、レジスタモードは、一度にスタック４００のいずれか１つのレジスタ３３５から起動され得て、そしてこのようなデータは、最上位のＢＲＡＭモジュール２５０のレベルにカスケード出力されてスタック４００から出力され得て、この例ではこのようなデータはＤＯ（０）であるがデータＤＯ（３）として出力される、ということが理解されるべきである。上位レベルの制御マルチプレクサ２１７のみが使用されるので、このカスケーディングは上位レベルのレジスタを迂回する。
【００７５】
図１３−１は、黒い太線で概して示されるデータ経路１３００を有する例示的なラッチモードを示す図１０のブロック／回路図である。この例では、ＢＲＡＭブロック３１３は、データ経路１３００に沿ってデータを読出し、スタック４００の最上位のＢＲＡＭモジュール２５０−３からＤＯ（３）として出力する。ラッチモードでは、データは、このようなＢＲＡＭモジュール２５０−３のレジスタ３３５に登録されない。したがって、スタック４００のレジスタ３３５が使用されず、ラッチモードがスタック４００の任意のＢＲＡＭブロック３１３から起動され得るので、ラッチモードは、低レイテンシラッチカスケードモードであると考えることができる。
【００７６】
そのような線に沿って、図１３−２は、データ経路１３００がスタック４００の最下位のＢＲＡＭモジュール２５０−０のＢＲＡＭブロック３１３で起動され、このようなＢＲＡＭブロック３１３から上方にカスケード接続されること以外は、図１３−１と同一のブロック／回路図である。したがって、ラッチモードは、一度にスタック４００のいずれか１つのＢＲＡＭブロック３１３から起動され得て、そしてこのようなデータは、最上位のＢＲＡＭモジュール２５０のレベルにカスケード出力されてスタック４００から出力され得て、この例ではこのようなデータはＤＯ（０）であるがデータＤＯ（３）として出力される、ということが理解されるべきである。上位レベルの制御マルチプレクサ２１７のみが使用されるので、このカスケーディングは上位レベルのレジスタおよび上位レベルのＢＲＡＭブロックを迂回する。
【００７７】
図１４−１は、黒い太線で概して示されるデータ経路１４００を有する例示的な多段レジスタモードを示す図１０のブロック／回路図である。このレジスタモードは、これが三段ＲＡＭレジスタモードであること以外は、上記のレジスタモードと同様である。この例は三段ＲＡＭレジスタモードのためのものであるが、いかなる数の二段以上のＲＡＭもこのようなレジスタモードで使用されてもよい。このレジスタモードでは、ＢＲＡＭモジュール２５０−３などのＢＲＡＭモジュールのＢＲＡＭブロック３１３もレジスタ３３５もクロックされる。そのような線に沿って、三段のデータがデータ経路１４００に沿ってＢＲＡＭブロック３１３からレジスタ３３５にクロック出力され、またデータ経路１４００に沿ってスタック４００からデータＤＯ（３）として出力され得る。言い換えれば、ＢＲＡＭブロック３１３のＲＡＭは、三段の深さであり得る。そのような線に沿って、データＤＩ（３）は、プログラム可能なファブリックリソース１０００のレジスタ１４０１にクロック入力されてこのようなＢＲＡＭブロック３１３に入力され得て、そしてデータＤＯ（３）は、スタック４００からクロック出力されてこのようなプログラム可能なファブリックリソース１０００のレジスタ１２０１に入力され得る。最大動作周波数を向上させるために、例えばＢＲＡＭモジュール２５０−０などの１つ以上の下位ＢＲＡＭモジュールが例えばＢＲＡＭモジュール２５０−３のレジスタ３３５などの最上位のＢＲＡＭ出力レジスタを使用している三段パイプラインでは、効果的な三段パイプラインを有するためのアラインメント補償として、他のＢＲＡＭ信号の中でアドレス信号、データ信号およびイネーブル信号を提供するための入力をこのような最上位のＢＲＡＭモジュールのＢＲＡＭ３１３に提供するように、例えばレジスタ１４０１などのファブリックパイプライン段階が結合され得る。明確にする目的でデータ信号ＤＩ（３）のみが例示的に示されているが、プログラム可能なファブリックリソース１０００から提供されるものとして本明細書に記載されている他の信号が存在していてもよい。
【００７８】
そのような線に沿って、図１４−２は、データ経路１４００がスタック４００の最下位のＢＲＡＭモジュール２５０−０のＢＲＡＭブロック３１３で起動され、このようなＢＲＡＭブロック３１３から上方にカスケード接続されること、および、図１４−２では最初のレジスタ１４０１がないこと以外は、図１４−１と同一のブロック／回路図である。したがって、多段レジスタモードは、一度にスタック４００のいずれか１つのＢＲＡＭブロック３１３から起動され得て、そしてこのようなデータは、最上位のＢＲＡＭモジュール２５０のレベルにカスケード出力されてスタック４００から出力され得て、この例ではこのようなデータはＤＯ（０）であるがデータＤＯ（３）として出力される、ということが理解されるべきである。このカスケーディングは、中間の上位レベルレジスタおよび全ての上位レベルＢＲＡＭブロックを迂回する。しかし、図１３−２のようなラッチモードまたは図１２−２のようなレジスタモードとは対照的に、最上位レベルのレジスタ３３５は迂回されない。それどころか、データ経路１４００は、このようなデータを出力するためにＢＲＡＭモジュール２５０−３のレジスタ３３５を使用する。データＤＩ（０）は、ＢＲＡＭブロック３１３にクロック入力され得て、データＤＯ（０）は、スタック４００からクロック出力されてこのようなプログラム可能なファブリックリソース１０００のレジスタ１２０１に入力され得る。上記のように、他の信号がプログラム可能なファブリックリソース１０００からこのような最下位のＢＲＡＭブロック３１３に提供されてもよい。
【００７９】
図１５は、黒い太線で概して示されるデータ経路１５００を有する例示的なダブルデータレート／ベクトルメモリモード（「ベクトルモード」）を示す図１０のブロック／回路図である。データをスタック４００から出力するためにＢＲＡＭモジュール２５０が一度に１つだけアクティブになり、この例では、ＢＲＡＭモジュール２５０−３が例示されている。しかし、いかなるＢＲＡＭモジュール２５０も一度にアクティブになってもよい。一度に１つだけＢＲＡＭモジュールをアクティブにすることによって、電力消費を減少させることができる。
【００８０】
このベクトル出力は任意のＤＯ（ｘ）であり得て、そのため、例えばＤＤＲ３バーストアクセスなどのダブルデータレート（「ＤＤＲ」）バーストアクセスのように見えるかもしれない。ベクトルモードでは、スタック４００における各々のＢＲＡＭブロック３１３は、ランダムにアクセスされ得る。ベクトルモードは、高い動作周波数で実行され得る。各々のＢＲＡＭブロック３１３は順不同に読取られ得るが、ＢＲＡＭブロック３１３がベクトル当たり１つだけ読取られてもよい。しかし、ベクトル出力シフトは、シーケンシャルアクセスであるように見えるかもしれない。さらに、各々のＢＲＡＭブロック３１３読取アドレスは、ランダムであってもよく、他のＢＲＡＭ読取アドレスから独立していてもよい。ベクトルモードでは、ＳＤＩ（ｘ）動的制御信号もＳＤＯ（ｘ）動的制御信号も使用可能である。
【００８１】
図１６は、黒い太線で概して示されるデータ経路１６００を有する別の例示的なベクトルモード、すなわち「荷重ベクトルモード」を示す図１０のブロック／回路図である。荷重ベクトルモードでは、この例ではＢＲＡＭモジュール２５０−０のＢＲＡＭブロック３１３などの使用される最下位のＢＲＡＭブロック３１３からデータをロードしてこのような最下位のＢＲＡＭブロックのレジスタ３３５をロードするために、データ経路１６００の初期部分１６０１が使用される。その後、このようなデータは、介在するレジスタを介してスタック４００の最上位のレジスタ３３５にカスケードされ得る。そのような線に沿って、カスケード接続されたレジスタ３３５からなるパイプラインを満たすための読取データを提供するために、最下位のＢＲＡＭブロック３１３における次のアドレスが読取られ得る。例えばＢＲＡＭモジュール２５０−３などの最上位のＢＲＡＭモジュールのレジスタ３３５から、データＤＯ（０）がＤＯ（３）としてこのようなスタック４００から出力され、例えばプログラム可能なファブリックリソース１０００のレジスタ１２０１に入力され得る。
【００８２】
図１７−１は、黒い太線で概して示されるデータ経路１７００を有する別の例示的なベクトルモード、すなわち「シフトベクトルモード」を示す図１０のブロック／回路図である。データＤＯ（０）が上位レベルのレジスタに登録されると、ユーザは、他のデータをシフトインまたは挿入させたいと思うようになり得る。この例では、カスケード接続されたパイプライン型経路にＤＩ（２）をシフトインするために別の初期経路１７０１が追加されている。そのような線に沿って、ＢＲＡＭモジュール２５０−２のＢＲＡＭブロック３１３は、そこに付加された次のアドレスにおいてデータを読出し得る。その後、このようなデータは、介在するレジスタを介してスタック４００の最上位のレジスタ３３５にカスケードされ得る。そのような線に沿って、カスケード接続されたレジスタ３３５からなるパイプラインにこのようなデータを挿入するための読取データを提供するために、介在するＢＲＡＭブロック３１３における次のアドレスが読取られ得る。例えばＢＲＡＭモジュール２５０−３などの最上位のＢＲＡＭモジュールのレジスタ３３５から、データＤＯ（２）がＤＯ（３）としてこのようなスタック４００から出力され、例えばプログラム可能なファブリックリソース１０００のレジスタ１２０１に入力され得る。
【００８３】
図１７−２は、黒い太線で概して示されるデータ経路１７００のためのシフトベクトルモードのための別の構成を示す図１７−１のブロック／回路図である。この例では、初期経路１７０２によって概して示されるようにデータをシフトインするためにＢＲＡＭモジュール２５０−１のＢＲＡＭブロック３１３が使用される。これは、このようなデータがスタック４００における任意の介在するＢＲＡＭブロック３１３からシフトインされ得ることを示している。
【００８４】
図１８は、例示的な二次元アレイシストリックスイッチ１８００を示すブロック／回路図である。シストリックスイッチ１８００は、共同公衆無線インターフェース（Common Public Radio Interface：ＣＰＲＩ）のためのものであってもよい。シストリックスイッチ１８００は、複数のスタック４００−１〜４００−Ｑ（Ｑは１よりも大きな正の整数）で構成され得る。入口パイプライン１８０１−１〜１８０１−Ｐ（Ｐは１よりも大きな正の整数）および制御パイプライン１８１３−１〜１８１３−Ｑは、プログラム可能なファブリックリソース１０００におけるレジスタで構成され得る。ここでは、制御パイプライン１８１３は、制御ブロック１８０５からスタック４００のＢＲＡＭブロック３１３にそれぞれ制御情報を渡すためのものであり得る。入口パイプライン１８０１は、対応する入口情報をスタック４００のそれぞれのＢＲＡＭブロック３１３に渡すためのものであり得る。３つの入口パイプライン１８０１のみが例示的に詳細に示されているが、３つよりも多い数の入口パイプライン１８０１が形成されてもよい。ここでも、スタック４００の各々は、複数のブロックＲＡＭモジュール２５０で構成され得る。スタック４００は、全てが上位メモリブロック２０１で構成されていてもよく、全てが下位メモリブロック２０２で構成されていてもよく、または上位および下位メモリブロック２０１および／または２０２の組合わせで構成されていてもよい。
【００８５】
各スタック４００の最初のＢＲＡＭモジュールは、使用されない入力を有するマルチプレクサ３２５を有し得る。したがって、このようなマルチプレクサ３２５に提供される選択信号は静的な信号であり得て、同様に、別の静的な信号がこのような未使用のデータ入力に提供され得る。このような最初のＢＲＡＭモジュール２５０−０のＢＲＡＭブロック３１３から出力されたデータは、入力としてこのようなマルチプレクサ３２５に提供され、そこから出力される。
【００８６】
最初のマルチプレクサ３２５以外のマルチプレクサ３２５は、複数のパイプライン１８１３の制御パイプラインに結合され、出力を選択するための制御選択信号を取得し得る。このような他のマルチプレクサ３２５からの出力は、最近傍の下位レベルのＢＲＡＭモジュール２５０からのカスケード型入力データ、または、このようなマルチプレクサ３２５が存在する現在のＢＲＡＭモジュール２５０のレベルのＢＲＡＭブロック３１３からの読取データのいずれかであるように選択され得る。ＢＲＡＭブロック３１３は、パイプラインを制御してそこからアドレスおよび他の情報を受取るように結合され得る。マルチプレクサ３２５からの出力は、垂直パイプラインを形成するようにレジスタ３３５にそれぞれ提供され得る。
【００８７】
したがって、プログラム可能なリソースファブリックで利用可能な動作周波数を大幅に上回って動作周波数を増加させるために、スタック４００を使用して垂直パイプラインがハードマクロとして提供され得る。出口情報は、ハードマクロ出口垂直パイプライン１８０２−１〜１８０２−Ｑから出力され得る。
【００８８】
深さを深くするためにスタック４００または複数のスタック４００を使用するなどしてＦＩＦＯをカスケード接続すると、このようなＦＩＦＯのうちの最初のＦＩＦＯ、すなわち書込インターフェースを有するＦＩＦＯは、「最初」のカスケード順序信号で特定され得る。同様に、このようなＦＩＦＯのうちの最後のＦＩＦＯ、すなわち読取インターフェースを有するＦＩＦＯは、「最後」のカスケード順序信号で特定され得る。チェーンＦＩＦＯにおける全ての中間のＦＩＦＯは、「中間（middle）」または「間（interim）」のカスケード順序で特定され得る。そのような線に沿って、「最初」、「中間」または「最後」は、事実上、各々のＦＩＦＯにおけるマルチプレクサを制御して、通常の書込入力またはカスケード型出力を使用するか（「最初」）、カスケード型入力および出力を使用するか（「中間」）、カスケード型入力および通常の出力を使用するか（「最後」）を判断するためのカスケード順序パラメータである。カスケード順序パラメータは、明確にする目的、例示的な目的および非限定的な目的で使用される。
【００８９】
この理解を念頭に置いて、図１９は、ＦＩＦＯカスケードモードのための、複数のスタック４００から形成され得るＦＩＦＯの例示的なチェーン（「チェーン」）１９００を示すブロック図である。この例では、最後のスタック４００Ｌ、中間のスタック４００Ｍおよび最初のスタック４００Ｆがある。しかし、他のＦＩＦＯチェーン構成では、３つよりも少ないまたは多い数のスタック４００が使用されてもよい。そのような線に沿って、例えば、ＦＰＧＡにおけるＢＲＡＭモジュール２５０の列全体が、単一のＦＩＦＯチェーンを提供するように互いに結合され得る。明確にする目的および非限定的な目的で信号線の単一のインスタンスが例示されているが、いくつかの信号は、複数の信号線を含んでいてもよい。特に、データ入力タイプの信号、データ入力パリティタイプの信号、データ出力タイプの信号、およびデータ出力パリティタイプの信号は、複数の信号線を含み得る。チェーン１９００は、登録もしくは未登録モードで使用されるように構成されてもよく、共通のもしくは独立したクロック領域を使用するように構成されてもよく、読取クロックよりも速い書込クロックを有するように構成されてもよく、および／または、書込クロックよりも速い読取クロックを有するように構成されてもよい。
【００９０】
各々のスタック４００は、書込入力のためのＦＩＦＯ書込入力インターフェース１９２１と、書込出力のためのＦＩＦＯ書込出力インターフェース１９２２と、ＦＩＦＯ直列カスケードインターフェース１９２３と、ＦＩＦＯ直列カスケードインターフェース１９２４と、読取入力のためのＦＩＦＯ読取インターフェース１９２５と、読取出力のためのＦＩＦＯ読取インターフェース１９２６とを含んでいる。各々のスタックまたはＦＩＦＯ４００は、状態または属性設定（「状態」）１９３０を含み得る。最初または中間のカスケード順を有するＦＩＦＯ４００のための状態１９３０は、「first word fall through」（「ＦＷＦＴ」）が「真」に設定された状態で構成され得る。一般に、ＦＷＦＴ  ＦＩＦＯは、空のＦＩＦＯに書込まれたデータが任意の非空表示の前もしくは任意の非空表示と同時に読取ポートに現われるか、または、空のＦＩＦＯであったものから最初のデータを読取るように読取イネーブルがアサートされ得るというものである。ＦＩＦＯ動作に関するさらなる情報については、米国特許第６，８４７，５５８号、第６，８４８，０４２号および第７，５３５，７８９号にさらに詳細に見ることができる。最後のカスケード順を有するＦＩＦＯ４００のための状態１９３０は、ＦＷＦＴが「偽」に設定された状態で構成され得る。状態１９３０が設定されると、ＦＩＦＯ４００の直列カスケードインターフェーシングは、各々のこのようなＦＩＦＯのコントローラロジックによって示されるように自動的に接続され得る。すなわち、このようなＦＩＦＯコントローラロジックは、ＦＩＦＯと全ての書込および読取インターフェース出力との間のハンドシェーキングに対処する。
【００９１】
ユーザは、チェーン１９００における最初のＦＩＦＯ４００に書込クロック信号を提供し、チェーン１９００における最後のＦＩＦＯ４００に読取クロック信号を提供し得る。中間のＦＩＦＯ４００は、内部クロック信号に結び付けられた書込および読取クロック信号を有し得て、このような内部クロック信号は、このような読取および書込クロック信号よりも速い。ＦＩＦＯ４００の読取クロック信号も書込クロック信号も同一のクロック入力ソースに結び付けられる場合、このようなＦＩＦＯ４００は、同期ＦＩＦＯとして構成され得て、レイテンシを減少させることができる。
【００９２】
ＦＩＦＯ書込入力インターフェース１９２１の入力ポートに関して、ＦＩＦＯ４００Ｌおよび４００Ｍの各々の書込クロックポートには、内部クロック１９０１が提供され得る。ＦＩＦＯ４００Ｌ、４００Ｍおよび４００Ｆの各々の書込リセットポートには、書込リセット信号１９０２が提供され得る。ＦＩＦＯ４００Ｆの書込クロックポートには、書込クロック信号１９０４が提供され得る。ＦＩＦＯ４００Ｆのデータインおよびデータインパリティポートには、データインバス１９０５およびデータインパリティバス１９０６がそれぞれ提供され得る。ＦＩＦＯ４００Ｆの書込イネーブルポートには、書込イネーブル信号１９０７が提供され得る。
【００９３】
ＦＩＦＯ書込出力インターフェース１９２２の出力ポートに関して、ＦＩＦＯ４００Ｌ、４００Ｍおよび４００Ｆの各々からＯＲゲート１９１０に書込リセットビジー信号１９３５が送られ得る。したがって、ＯＲゲート１９１０の出力は、チェーン１９００の全てのＦＩＦＯが書込みのためにリセットされたか否かを示す書込リセットビジー信号１９０３であり得る。そのような線に沿って、静的な数のＦＩＦＯ４００では、ＯＲゲート１９１０はハードマクロの一部として提供され得る。しかし、チェーン１９００がどれぐらいの長さであり得るかをユーザが選択できるようにすることによって、ＯＲゲート１９１０は、プログラム可能なファブリックリソース１０００を使用して形成されることができる。書込エラー信号１９０８およびフル信号１９０９は、ＦＩＦＯ４００Ｆの書込エラーポートおよびフルポートからそれぞれ供給され得る。この例では、ＯＲゲート１９１０および１９２０は、アクティブロー構成で使用される。別の例では、アクティブハイ構成でゲート１９１０および１９２０としてＮＯＲゲートが使用されてもよい。
【００９４】
制御信号１９４０は、ＦＩＦＯ４００の間にあってもよい。制御信号１９４０は、次のデータアウト信号と、次のデータアウトパリティ信号と、次のエンプティ信号とを含み得て、これらの信号は、下位のＦＩＦＯ直列カスケードインターフェース１９２３から最近傍の上位のＦＩＦＯ直列カスケードインターフェース１９２４の対応する前のデータイン・ポート、前のデータインパリティポートおよび前のエンプティポートに提供され得る。制御信号１９４０は、上位のＦＩＦＯ直列カスケードインターフェース１９２４から最近傍の下位のＦＩＦＯ直列カスケードインターフェース１９２３の対応する次の読取イネーブルポートに提供され得る前の読取イネーブル信号をさらに含み得る。
【００９５】
ＦＩＦＯ読取入力インターフェース１９２５の入力ポートに関して、ＦＩＦＯ４００Ｌの読取クロックポートおよび読取イネーブルポートには、読取クロック信号１９１１および読取イネーブル信号１９１４がそれぞれ提供され得る。データアウト信号１９１２およびデータアウトパリティ信号１９１３は、ＦＩＦＯ４００Ｌの関連のポートからそれぞれ供給され得る。中間のＦＩＦＯ４００Ｍおよび最初のＦＩＦＯ４００Ｆの各々の読取クロックポートには、内部クロック信号１９１８が提供され得る。
【００９６】
ＦＩＦＯ読取出力インターフェース１９２６の出力ポートに関して、ＦＩＦＯ４００Ｌ、４００Ｍおよび４００Ｆの各々からＯＲゲート１９２０に読取リセットビジー信号１９３６が送られ得る。したがって、ＯＲゲート１９２０の出力は、チェーン１９００の全てのＦＩＦＯが読取りのためにリセットされたか否かを示す読取リセットビジー信号１９１７であり得る。そのような線に沿って、静的な数のＦＩＦＯ４００では、ＯＲゲート１９２０はハードマクロの一部として提供され得る。しかし、チェーン１９００がどれぐらいの長さであり得るかをユーザが選択できるようにすることによって、ＯＲゲート１９２０は、プログラム可能なファブリックリソース１０００を使用して形成されることができる。読取エラー信号１９１５およびエンプティ信号１９１６は、ＦＩＦＯ４００Ｌの読取エラーポートおよびエンプティポートからそれぞれ供給され得る。
【００９７】
したがって、チェーン１９００における最後のＦＩＦＯ４００Ｌは、このようなチェーン１９００における全てのＦＩＦＯ４００が空であるときに、エンプティ信号１９１６を出力し得る。さらに、チェーン１９００における最初のＦＩＦＯ４００Ｆは、このようなチェーン１９００における全てのＦＩＦＯ４００がフルであるときに、フル信号１９０８を出力し得る。さらに、ＦＩＦＯ４００間のルーティングは、完全に、メモリシステム２００によって提供されるハードマクロ内であり得て、これは、プログラム可能なファブリックリソースを使用してＦＩＦＯを連結しなければならない状態を回避する、ということが理解されるべきである。
【００９８】
図２０は、ＦＩＦＯカスケードモードのための、複数のスタック４００から形成され得るＦＩＦＯの別の例示的なチェーン１９００を示すブロック図である。任意の２つの最近傍のＦＩＦＯ４００間の制御状態を相互接続するために、それぞれのＡＮＤゲート２００１がメモリシステム２００のハードマクロの一部として提供され得て、輻輳を減少させ、性能を向上させ、および／または、タイミングを緩和させる。ＡＮＤゲート２００１は、ＦＩＦＯ４００Ｆまたは４００Ｍなどの下位のＦＩＦＯ４００のエンプティポートに結合された入力と、ＦＩＦＯ４００Ｍまたは４００Ｌなどの最近傍の上位のＦＩＦＯ４００のフルポートに結合された別の入力とを有し得る。この例では、フル信号およびエンプティ信号は、アクティブローである。フル信号およびエンプティ信号がアクティブハイである例では、ＡＮＤゲート２００１は、それぞれＮＯＲゲートと置換されてもよい。ＡＮＤゲート２００１の出力は、このような最近傍の上位のＦＩＦＯ４００の書込イネーブルポート、およびこのような下位のＦＩＦＯ４００の読取イネーブルポートに結合され得る。さらに、チェーン１９００の任意の２つの最近傍のＦＩＦＯ４００間のデータを相互接続するために、データパリティルーティングを含むがこれに限定されない専用のデータルーティング２００２がメモリシステム２００のハードマクロの一部として提供され得て、輻輳を減少させ、性能を向上させ、および／または、タイミングを緩和させる。
【００９９】
上記では例示的な実施例について説明しているが、以下の特許請求の範囲およびその等価物によって決定される範囲から逸脱することなく、１つ以上の局面に係る他のおよびさらなる実施例を考案することができる。ステップを列挙する請求項は、当該ステップの順序を暗に示すものではない。商標は、それらのそれぞれの所有者の所有物である。
【図１】
0006364015.tif 000002
【図２】
0006364015.tif 000003
【図３−１】
0006364015.tif 000004
【図３−２】
0006364015.tif 000005
【図４】
0006364015.tif 000006
【図５】
0006364015.tif 000007
【図６】
0006364015.tif 000008
【図７】
0006364015.tif 000009
【図８】
0006364015.tif 000010
【図９】
0006364015.tif 000011
【図１０】
0006364015.tif 000012
【図１１】
0006364015.tif 000013
【図１２−１】
0006364015.tif 000014
【図１２−２】
0006364015.tif 000015
【図１３−１】
0006364015.tif 000016
【図１３−２】
0006364015.tif 000017
【図１４−１】
0006364015.tif 000018
【図１４−２】
0006364015.tif 000019
【図１５】
0006364015.tif 000020
【図１６】
0006364015.tif 000021
【図１７−１】
0006364015.tif 000022
【図１７−２】
0006364015.tif 000023
【図１８】
0006364015.tif 000024
【図１９】
0006364015.tif 000025
【図２０】
0006364015.tif 000026