(57)【特許請求の範囲】
【請求項１】
複数のプログラマブルモジュール、プロセッサ、前記複数のプログラマブルモジュールに対する構成情報を有するメモリアレイ、およびメモリモジュールを含む集積回路を再構成するための方法であって、
前記メモリアレイから前記構成情報の部分を読出すステップと、
前記メモリモジュールに前記構成情報の部分を記憶するステップと、
前記プロセッサが、前記メモリモジュールに記憶された構成情報の部分における前記構成情報の少なくとも一部を変更するステップとを含み、
前記構成情報は、前記集積回路の外部インターフェイス回路を通じて、データの通信なしに、前記プロセッサによって調整され、前記方法は、さらに、
変更された前記構成情報を前記メモリアレイに書込むステップを含む、方法。
【請求項２】
前記プロセッサは再構成されていない前記複数のプログラマブルモジュールの少なくとも１つを含む、請求項１に記載の方法。
【請求項３】
前記プロセッサはハードウェアマイクロプロセッサ含む、請求項１に記載の方法。
【請求項４】
前記プログラマブルモジュールは構成可能な論理ブロック（ＣＬＢ）を含む、請求項１に記載の方法。
【請求項５】
前記集積回路はプロセッサを有するフィールドプログラマブルゲートアレイを含む、請求項１に記載の方法。
【請求項６】
プログラマブル装置であって、
複数のフレームを有する構成メモリアレイを含み、前記構成メモリアレイのフレームは前記プログラマブル論理装置の構成を制御するために構成データ値を記憶し、前記プログラマブル装置はさらに、
前記構成メモリアレイから構成データ値の少なくとも１つのフレームを読出し、前記少なくとも１つのフレームの構成データ値のサブセットを変更し、それによって変更された少なくとも１つのフレームに対する構成データ値を作成し、前記変更された構成データ値を前記構成メモリアレイの少なくとも１つのフレームに再び書込むことによって、前記プログラマブル装置の部分的な再構成を実現するように構成されるプロセッサを含み、
前記読出し、変更および書込みは、外部装置に対する入出力インターフェイスを通じて、構成データ値の通信なしに、前記プロセッサによって実行される、プログラマブル装置。
【請求項７】
前記プロセッサと前記構成メモリアレイとの間に結合される内部構成アクセスポート（ＩＣＡＰ）をさらに含み、前記ＩＣＡＰは前記プロセッサの制御下で前記構成メモリアレイから構成データ値の前記少なくとも１つのフレームを検索する、請求項６に記載のプログラマブル装置。
【請求項８】
前記プロセッサおよび前記ＩＣＡＰに結合される第１のメモリをさらに含み、前記第１のメモリは構成データ値の前記少なくとも１つのフレームおよび変更された構成データ値を記憶する、請求項７に記載のプログラマブル装置。
【請求項９】
前記第１のメモリと前記ＩＣＡＰとの間に結合される直接メモリアクセス（ＤＭＡ）エンジンをさらに含む、請求項８に記載のプログラマブル装置。
【請求項１０】
前記ＤＭＡエンジンおよび前記プロセッサに結合されるレジスタをさらに含み、前記プロセッサは前記レジスタを介して前記ＤＭＡエンジンを制御する、請求項９に記載のプログラマブル装置。
【請求項１１】
前記プロセッサに結合されるプロセッサローカルバスと、
前記プロセッサローカルバスと前記ＩＣＡＰとの間に結合される制御論理とをさらに含む、請求項７に記載のプログラマブル装置。
【請求項１２】
前記プロセッサローカルバスに結合されるメモリブロックをさらに含み、前記メモリブロックは構成データ値の前記少なくとも１つのフレームおよび前記変更された構成データ値を記憶する、請求項１１に記載のプログラマブル装置。
【請求項１３】
前記プロセッサローカルバスに結合される通信インターフェイスをさらに含み、前記通信インターフェイスは内部または外部の刺激に対するインターフェイスを提供する、請求項１２に記載のプログラマブル装置。
【請求項１４】
プログラマブル装置であって、
前記プログラマブル装置の構成を規定する構成データ値のフレームを記憶するように構成される構成メモリアレイと、
前記構成メモリアレイから構成データ値の第１のフレームを読出すための手段と、
前記第１のフレームで前記構成データ値のサブセットを変更して、それによって変更された構成データ値を作成するための手段と、
前記構成メモリアレイの前記第１のフレームを前記変更された構成データ値で上書きし、それによって前記プログラマブル装置を部分的に再構成するための手段とを含み、
前記読出し、変更および書込みは、外部装置に対する入出力インターフェイスを通じて、構成データ値の通信なしに実行される、プログラマブル装置。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
この発明は、プログラマブルモジュールを有する集積回路（ＩＣ）の再構成（reconfiguration）に関する。特に、この発明は、プログラマブルモジュールの全体的または部分的な自己再構成に関する。
【背景技術】
【０００２】
背景
動的な再構成および自己再構成は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）の再構成可能性のより高度な形のうちの２つである。動的な再構成は、全体的または部分的に再構成されるアクティブなＦＰＧＡを伴い、一方で、変更されていないそれらアクティブな回路の正しい動作を保証する。自己再構成は動的な再構成可能性の概念を拡張する。それはＦＰＧＡ自身上の特定の回路がＦＰＧＡの他の部分の再構成を制御するために使用されることを仮定する。動的な再構成および自己再構成の両方は、電力が最初に適用されるかまたは装置がリセットされるときにＦＰＧＡを起動するために外部の再構成制御インターフェイスに依存する。
【０００３】
図１は、従来のＦＰＧＡ９０のブロック図であり、これはＦＰＧＡの周辺にある入出力（Ｉ／Ｏ）ブロック１０２Ａ（各々ＩＯと示される）、Ｉ／Ｏブロックが点在するマルチギガビットトランシーバ（ＭＧＴ）１０４Ａ、アレイに配置された構成可能な論理ブロック１０６Ａ（各々ＣＬＢと示される）、ＣＬＢが点在するブロックランダムアクセスメモリ１０８Ａ（各々ＢＲＡＭと示される）、構成論理１１２、構成インターフェイス１１４、オンチッププロセッサ９２（PowerPC（登録商標）と示される）、および内部構成アクセスポート（ＩＣＡＰ）１２０を含む。図１は、比較的少数のＩ／Ｏブロック、ＣＬＢおよびブロックＲＡＭを示すが、例示のためである。ＦＰＧＡは典型的にはより多くのこれらの要素を含むことが理解される。オンチッププロセッサ９２は、IBM PowerPC（登録商標）４０５プロセッサである。ＦＰＧＡ９０は、２つ以上のこれらのプロセッサ（典型的には４つまでのこれらのプロセッサ）を含み得る。
【０００４】
ＦＰＧＡ９０は、プログラマブル相互接続構造および構成メモリアレイなどの他の要素も含むが、これらは図１には示されていない。ＦＰＧＡ９０は、９５１２４  カリフォルニア州、サン・ノゼ、ロジック・ドライブ  ２１００、ザイリンクス・インコーポレイテッドから入手可能な“Virtex-II ProTM Platform FPGA Documentation”（２００２年３月）“Advance Product Specification”、“Rocket I/O Transceiver User Guide”、“PPC 405 User Manual”および“PPC 405 Processor Block Manual”を含む“Virtex-IITM
Pro, Platform FPGA Hadbook”（２００２年１０月１４日）にさらに詳しく説明される。
【０００５】
一般に、ＦＰＧＡ９０は構成データの値のセットに応答して構成され、これらは外部メモリ、たとえば、読出専用メモリ（ＲＯＭ）から構成インターフェイス１１４および構成論理１１２を介してＦＰＧＡ９０の構成メモリアレイ（図示せず）にロードされる。構成インターフェイス１１４は、たとえば、選択マップインターフェイス、ＪＴＡＧインターフェイスまたはマスタシリアルインターフェイスであり得る。構成メモリアレイは、ビットの長方形のアレイとして視覚化することができる。ビットは、アレイの上部から底部へと延在する１ビットの幅のワードであるフレームにグループ分けされる。構成データ値は、構成インターフェイス１１４を介して、外部メモリから一度に１つのフレームずつ構成メモリアレイにロードされる。
【０００６】
図２−１および図２−２は、構成メモリアレイの簡略化した概念図である。構成メモリアレイ１００（および１０１）のビットは、たとえば、ＣＬＢ１０６Ｂ、ＢＲＡＭ１０８Ｂ、ＭＧＴ１０４Ｂ、およびＩ／Ｏ１０２Ｂを構成する。図２−１および図２−２では、図２−１および図２−２の構成メモリアレイの要素（Ｂの接尾辞を備える）が図１のそれらの関連する物理的な構成要素（Ａの接尾辞を備える）と対応するように表示が選ばれている。フレーム１２２は、アレイ１００の上部から底部へと延在する１ビットの幅の列である。フレームは、そこに書込むかまたはそこから読出すことのできる構成メモリアレイの最小の部分である。
【０００７】
プロセッサブロックは、ハードコアプロセッサ、たとえば、ニューヨーク州アーモンクのＩＢＭコーポレイションのPowerPC（登録商標）などの図２−１のプロセッサブロック１１０および図１のプロセッサ９２、またはＣＬＢを有するソフトコアプロセッサ、たとえば、カリフォルニア州、サン・ノゼのザイリンクス・インコーポレイテッドのMicro BlazeTMプロセッサコアなどの図２−２のプロセッサブロック１０９である。
【０００８】
ＦＰＧＡのための自己再構成を提供するために、内部構成アクセスポート（ＩＣＡＰ）１２０が付加された。ＩＣＡＰ１２０は、ＦＰＧＡの内部論理（たとえば、ＣＬＢ１０６ＡおよびＢＲＡＭ１０８Ａ）による構成メモリアレイ１００（および１０１）へのアクセスを与える。言い換えると、構成されたＦＰＧＡの一部分はＦＰＧＡの他の部分を再構成することができる。従来、この自己再構成は、ＢＲＡＭで予め生成された再構成フレームをロードし、カスタマイズされた論理を使用し、これら予め生成された再構成フレームで構成メモリアレイ内の予め目標とされているフレームを上書きすることによって行なわれていた。
【０００９】
図３は、先行技術のＩＣＡＰモジュール１２０を示す。８ビットの幅の入力バス２１０および８ビットの幅の出力バス２１８がある。入力書込信号２１２は、いつＩＣＡＰモジュール１２０からの読出またはそこへの書込があるかを示す（ここで、たとえば、書込＝１および読出＝０）。付加的な入力は、チップイネーブル信号２１４およびクロック信号２１６を含む。ビジー（終了）出力信号２２０は、いつデータをＩＣＡＰモジュール１２０によって受取ることができるかを示す。
【００１０】
図４は、図３のＩＣＡＰモジュール１２０の入力バス２１０に送られるデータパケット３１０の簡略化したフォーマットである。データパケット３１０は、オペレーション（ｏｐ）コード３１６、レジスタアドレス３１８、およびデータ部分３１４に対するワードカウント３２０を有するコマンド部分３１２、およびデータ部分３１４を含む。オペレーションコード３１６は、たとえば、構成メモリアレイ１００から読出すかまたはそこに書込むために構成論理１１２へのコマンドを含む。構成論理１１２にはレジスタがあり、これらはレジスタアドレス３１８によって識別される。詳細は、“Virtex Series Configuration Architecture User Guide”と題される、ザイリンクス・インコーポレイテッドのアプリケーションノート、ＸＡＰＰ１５１、２０００年９月２７日に見られる。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
上述のカスタム論理自己再構成の方法の使用にはいくつかの短所がある。第１に、たとえば、何を再構成するかを予め決定しなければならないなど、この方法には柔軟性が欠けており、すなわち、フレームを予め生成しなければならず、カスタム論理をセットしなければならない。第２に、再構成への変更には多大な時間がかかる。なぜなら、変更された再構成を予めロードしなければならないためである。第３に、フレーム全体を予めロードすることは、フレームの一部分のみを再構成する必要がある場合、非効率的である。第４
に、選択されたリソースの変更、パラメータ表示された回路のその場での生成、部分的なビットストリームをアレイ上の他の場所に移動させるなどのより複雑な動的な再構成の場合、カスタム論理では実現するのが非常に困難である。
【００１２】
したがって、上述の欠点を克服する、ＦＰＧＡの自己再構成を実現するための改善された仕組みを有することが望ましい。
【課題を解決するための手段】
【００１３】
概要
この発明は、構成メモリアレイに記憶される構成情報の読出−変更−書込を実行するためにオンチップ処理を使用する、複数のプログラマブルモジュールを有するＩＣの自己再構成に関する。
【００１４】
この発明の例示的な実施例は、プログラマブルモジュールを有するＩＣを部分的に再構成する方法を提供し、この方法は、（１）構成情報のベースセットをプログラマブルモジュールに対する構成メモリアレイにロードして、それによってＩＣを構成するステップと、（２）構成メモリアレイから構成情報のフレームを読出すステップと、（３）構成情報の少なくとも一部分を変更し、それによって構成情報の変更されたフレームを作成するステップと、（４）構成メモリアレイ内で構成情報の既存のフレームを変更されたフレームで上書きし、それによって部分的にＩＣを再構成するステップとを含む。読出、変更および書込のステップは、ＩＣ上にあるプロセッサの制御下で行なわれる。
【００１５】
この発明の或る実施例は、複数のプログラマブル論理モジュール、プロセッサ、複数のプログラマブル論理モジュールに対する構成情報を有するメモリアレイ、およびメモリモジュールを有する集積回路を再構成するための方法を含む。この方法は、まずメモリアレイから構成情報のセクションを読出すステップを含む。次に、そのセクションはメモリモジュールに記憶される。プロセッサはそのセクションの少なくとも一部を変更する。最後に、構成情報の変更されたセクションがメモリアレイに再び書込まれる。
【００１６】
この発明の別の実施例は、プログラマブル論理装置を再構成するための方法を含み、プログラマブル論理装置は、複数のプログラマブル構成要素、構成メモリアレイ、プロセッサ、および複数のブロックメモリモジュールを含む。この方法は、まず構成メモリアレイからプログラマブル構成要素に対する構成データを読出すステップを含む。次に、構成データはブロックメモリに記憶される。プロセッサは記憶された構成データを部分的に変更する。最後に、部分的に変更された構成データは構成メモリアレイに再び書込まれる。
【００１７】
この発明のさらに別の実施例は、プログラマブル論理構成要素を有する集積回路を含む。ＩＣは、プログラマブル論理構成要素に対する構成情報を記憶する第１のメモリと、第１のメモリへのアクセスを有するアクセスポートと、第１のバスによって第２のメモリに接続されるプロセッサと、アクセスポートおよび第１のバスに接続される制御モジュールとをさらに含み、制御モジュールは第１のバスを介してプロセッサから制御情報を受取り、制御情報は、アクセスポートを介して第１のメモリから第２のメモリに構成情報の一部分を転送するように制御モジュールを構成する。
【００１８】
この発明の別の実施例は、プロセッサ、メモリ、プログラマブル論理装置を構成するための構成メモリアレイ、構成メモリアレイへのアクセスを有するアクセスポート、およびアクセスポートを制御するための制御モジュールを有するプログラマブル論理装置を含む。制御モジュールは、構成メモリアレイからデータを記憶するためにメモリアレイで１つまたは複数のアドレスを決定するように構成されるアドレスモジュールを含み、アドレスモジュールはプロセッサから開始アドレスを受取り、制御モジュールはさらに、プロセッ
サに接続されかつプロセッサに転送サイクルの終了を示すフラグを有する状態レジスタを含む。
【００１９】
この発明の或る局面は、プログラマブル論理装置の構成メモリアレイのビットを再構成するためのグラフィカルユーザインターフェイス（ＧＵＩ）を含む。ＧＵＩは、構成メモリアレイの少なくとも一部分を表示するウインドウ、構成メモリアレイのビットの第１のセットを有するウインドウ内の第１の領域、ユーザが第１の領域をコピーするための制御を選択したときに第１のセットのコピーを記憶するように構成されるメモリ、および構成メモリアレイのビットの第２のセットを有するウインドウ内の第２の領域を含み、前記第２のセットは、ユーザによるコマンドに応答して第１のセットのコピーによって上書きされる。
【００２０】
この発明の別の局面は、プログラマブル論理装置の構成メモリアレイとランダムアクセスメモリ（ＲＡＭ）との間のフレームの転送を制御するためにコンピュータの読出可能な媒体内に記憶されるコンピュータルーチンを有するアプリケーションプログラミングインターフェイスを含み、コンピュータルーチンはプログラマブル論理装置のプロセッサによって実行される。コンピュータルーチンは、構成メモリアレイからＲＡＭにフレームを読出すための第１のルーチンと、ＲＡＭから構成メモリアレイにフレームを書込むための第２のルーチンとを含む。
【００２１】
この発明のさらに別の局面は、プログラマブル論理構成要素を有する集積回路を含む。ＩＣは、プログラマブル論理構成要素に対する構成情報を記憶するための構成メモリアレイと、構成メモリアレイへのアクセスを有するアクセスポートと、第１のバスによってメモリに接続される第１のプロセッサと、第１のバスによって上記メモリに接続される第２のプロセッサと、セマフォーを有するセマフォーモジュールとを含み、第１または第２のプロセッサの１つのプロセッサのみが所定のイベントが起るまでセマフォーを与えられ、ＩＣはさらに、アクセスポートおよび第１のバスに接続される制御モジュールを含み、制御モジュールはセマフォーを与えられた１つのプロセッサから制御情報を受取り、制御情報は、アクセスポートを介して構成メモリアレイからメモリに構成情報の一部分を転送するように制御モジュールを構成する。
【００２２】
この発明のさらに別の例示的な実施例は、プログラマブル論理装置を部分的に再構成する方法を提供し、この方法は、（１）構成データ値のベースセットをプログラマブル論理装置の構成メモリアレイにロードし、それによってプログラマブル論理装置を構成するステップと、（２）構成データ値の第１のフレームを構成メモリアレイから読出すステップと、（３）構成データ値の第１のフレームで構成データの値のサブセットを変更し、それによって構成データ値の第１の変更されたフレームを作成するステップと、（４）構成メモリアレイで構成データ値の第１のフレームを構成データ値の第１の変更されたフレームで上書きし、それによってプログラマブル論理装置を部分的に再構成するステップとを含む。読出、変更および上書きのステップは、プログラマブル論理装置上にあるプロセッサの制御下で行なわれる。
【００２３】
一実施例では、第１の変更されたフレーム内の構成データ値の変更されたサブセットは、プログラマブル論理装置のマルチギガビットトランシーバの構成を制御するために使用される。たとえば、構成データ値の第１の変更されたフレームは、マルチギガビットトランシーバのプリエンファシスおよび／または差動電圧特性を調整するために使用することができる。
【００２４】
第１のフレーム内の構成データ値のサブセットは、プログラマブル論理装置の外部で生成された制御信号に応答して変更することができる。たとえば、制御信号は、シリアルバ
ックプレーン上のプログラマブル論理装置の場所を識別することができる。またはこれに代えて、制御信号は、ユーザがマルチギガビットトランシーバ上で診断テストを行なうことによって提供され得る。
【００２５】
或る特定の実施例では、プロセッサは構成データ値の異なる複数のサブセットを記憶することができ、サブセットの各々は、プログラマブル論理装置の異なる部分的な再構成を表わす。変更されている構成データの値のみを記憶すればよいため、有利である。
【００２６】
別の実施例によると、プログラマブル論理装置は、構成データ値を記憶するための複数のフレームを有する構成メモリアレイ、および構成メモリアレイからフレームを読出し、そのフレームの選択サブセットのみを変更し、それによって変更されたフレームを作成し、変更されたフレームを構成メモリアレイに再び書込むことによってプログラマブル論理装置の部分的な再構成を実行するように構成されるプロセッサを含む。一実施例では、プロセッサは、プロセッサと構成メモリアレイとの間に結合される内部構成アクセスポートを制御し、内部構成アクセスポートは、プロセッサの制御下で構成メモリアレイからフレームを検索する。１つまたは複数のブロックＲＡＭは、データ側オンチップメモリとして使用することができ、これはフレームおよび変更されたフレームを記憶する。プログラマブル論理装置のＣＬＢリソースは、データ側オンチップメモリと内部構成アクセスポートとの間に結合される直接メモリアクセス（ＤＭＡ）エンジンを実現するために使用することができる。ＣＬＢリソースは、ＤＭＡエンジンおよびプロセッサに結合される装置制御レジスタを実現するためにも使用することができ、プロセッサはレジスタを介してＤＭＡエンジンを制御する。
【００２７】
さらに別の実施例では、プログラマブル論理装置は、プロセッサに結合されるプロセッサローカルバス、プロセッサローカルバスと内部構成アクセスポートとの間に結合される制御論理を実現するように構成することができる。ブロックＲＡＭはプロセッサローカルバスに結合することもできる。プロセッサローカルバスに結合される通信インターフェイスは、内部または外部の構成制御刺激を受取ることができる。
【００２８】
この発明は、以下の説明および図面を参照することでさらに十分に理解されるであろう。
【発明を実施するための最良の形態】
【００２９】
詳細な説明
以下の説明では、多くの具体的な詳細を示してこの発明の具体的な実施例をさらに徹底的に説明している。しかしながら、当業者には、この発明は以下に説明される具体的な詳細なしに実現可能であることが明らかであろう。場合によっては、発明をわかりにくくするのを避けるため、既知の特徴は詳細に説明していない。
【００３０】
この発明の説明される実施例によると、プログラマブルモジュールおよび１つまたは複数のオンチッププロセッサを有するＩＣは、効率的な部分的再構成の仕組みを実現するように構成される。再構成は、ＣＬＢ、ＢＲＡＭ、ＩＯおよびＭＧＴなどのプログラマブルモジュールに対する構成情報またはデータを含む構成メモリアレイの１つまたは複数のフレーム上で行なわれる。ここで使用される「フレーム」という言葉は、構成情報の１つまたは複数のビットのセットであり、１ビットの垂直の列に限定されない。
【００３１】
この発明の一部の実施例で使用されるモジュールの一部は、図１、図２−１、図２−２、および図３で与えられるモジュールと類似か同じであり、発明をわかりにくくするのを避けるため同じ表示を与えられる。
【００３２】
図５は、この発明の或る実施例のＩＣの自己再構成のためのシステムの簡略化した概略図である。ＩＣは、プロセッサブロック１１０、ＢＲＡＭ制御モジュール３３２、ＢＲＡＭ１０８、ＩＣＡＰ制御モジュール３３０、ＩＣＡＰモジュール１２０、および構成論理モジュール１１２を含む。プロセッサブロック１１０はＢＲＡＭ制御モジュール３３２に結合され、これはＢＲＡＭ１０８を制御する。プロセッサブロック１１０はＩＣＡＰ制御モジュール３３０にも結合される。ＩＣＡＰ制御モジュール３３０は、データおよび制御信号をＩＣＡＰ１２０に供給し、データおよびビジー信号をＩＣＡＰ１２０から受取る（図３を参照）。この発明の実施例はＩＣＡＰ制御モジュールのさまざまな実現例を示す。
【００３３】
図６は、この発明の或る局面のＩＣＡＰ制御モジュールのＩＣＡＰ制御レジスタの実現例を示す。ＩＣＡＰ制御モジュール３４０は３２ビットのレジスタ３２５を有し、その内容は対応するデータおよびＩＣＡＰ１２０の制御信号と１対１でマッピングする。プロセッサブロック１１０は、バス３３４を介してレジスタ３２５から読出しかつそこに書込む。プロセッサブロック１１０がＣＬＢ１０６Ａを使用して構成されたMicro BlazeTMアーキテクチャを含む場合、Micro BlazeTMレジスタのうちの１つはレジスタ３２５である。
【００３４】
図７は、この発明の好ましい実施例のＩＣの自己再構成のためのシステムの簡略化した概略図である。プロセッサブロック１１０は、バス３３４を介してＢＲＡＭ３３８およびＩＣＡＰ制御モジュール３５０などのメモリモジュールに接続される。ＢＲＡＭ３３８は、１つまたは複数のＢＲＡＭ１０８Ａを含み、ＢＲＡＭ制御を含む。ＩＣＡＰ制御モジュール３５０はＩＣＡＰ１２０に接続される。ＩＣＡＰ１２０は、制御論理１１２を介して制御メモリアレイに接続される。構成メモリアレイは、ＣＬＢなどのＩＣのプログラマブル論理構成要素に対する情報またはデータを含む。ＩＣＡＰ制御モジュール３５０のこの発明の実施例は、図９（モジュール３５２）、図１１（モジュール３８０）、および図１６（モジュール３８２）に示される。ＩＣＡＰ制御モジュール３５０は、データ転送を容易にするためにＢＲＡＭ３３８への別の専用のバス３３６も有するため、システムバス３３４の使用は低減されるかまたは避けることができる。任意で、プロセッサブロック１１０とＢＲＡＭ３３８との間に専用の接続があるか（図７の点線３３３）、またはプロセッサブロック１１０とＩＣＡＰ制御３５０との間に専用の接続（図７の点線３３５）があるか、または両方がある。代替の実施例では、プロセッサブロック１１０とＢＲＡＭ３３８との間、および／またはプロセッサブロック１１０とＩＣＡＰ制御３５０との間の通信は、システムバス３３４ではなく、これら直接のリンク（３３３、３３５）上で直接行なわれる。
【００３５】
図８は、この発明の或る局面のＩＣＡＰを使用するアーキテクチャのブロック図である。図８は図７の変形例を示し、ＩＣＡＰ制御モジュール３５２は図７のＩＣＡＰ制御モジュール３５０の例であり、プロセッサブロック１１０とＢＲＡＭ３３８との間（図７の点線３３３）、およびプロセッサブロック１１０とＩＣＡＰ制御３５０との間（図７の点線３３５）の専用の接続を提供する２つの付加的なバスがある。
【００３６】
ＩＣＡＰ制御モジュール３５２は、直接メモリアクセス（ＤＭＡ）エンジン２０３および装置制御レジスタ（ＤＣＲ）２０４を含む。これら要素２０３〜２０４はＣＬＢによって形成され、これらは構成データ値のベースセットに応答して構成される。以下にさらに詳しく説明されるように、装置制御レジスタ２０４を介してコマンドがＤＭＡエンジン２０３に発行される。
【００３７】
ＩＣＡＰ制御モジュール３５２はＩＣＡＰ１２０に接続される。構成論理１１２はＩＣＡＰ１２０と構成メモリセル、たとえば、構成メモリアレイのＭＧＴ１０４Ｂ、ＣＬＢ１０６Ｂ、ＢＲＡＭ１０８Ｂ、およびＩ／Ｏ１０２Ｂとの間に結合される。ＩＣＡＰ１２０のポート（図３）は、一般的な相互接続グリッドを介してＦＰＧＡ９０のユーザ論理にア
クセス可能である。
【００３８】
１つまたは複数のＢＲＡＭ１０８Ａによって形成されるデータ側オンチップメモリ（ＤＳＯＣＭ）３５４は、図７のＢＲＡＭ３３８の例である。ＤＳＯＣＭ３５４はバス３３６を介してＩＣＡＰ制御３５０（図８のＩＣＡＰ制御３５２）への直接の接続を有し、バス３３４を介してプロセッサブロック１１０にも接続される。ＤＳＯＣＭ３５４は、たとえば、プログラムデータ、構成フレームデータ、および読出および書込動作のためのビットストリームコマンドを記憶する。
【００３９】
命令側オンチップメモリ（ＩＳＯＣＭ）３５６（図７には図示せず）も、１つまたは複数のＢＲＡＭ１０８Ａによって形成され、バス３３４を介してプロセッサブロック１１０に接続される。ＩＳＯＣＭ３５６は、たとえば、プロセッサブロック１１０を動作するのに必要な命令コードを記憶する。代替の実施例では、ＩＳＣＯＭ３５６はＤＳＣＯＭ３５４に併合されるため、ＤＳＣＯＭ３５４およびＩＳＣＯＭ３５６の両方の内容を有するＤＳＯＣＭのみがある。
【００４０】
図９は、装置制御レジスタ２０４の内容のブロック図である。ＤＣＲ２０４は３２ビットのレジスタで、４ビットのポート識別エントリ（ＰＯＲＴ＿ＩＤ）、１ビットの書込イネーブルエントリ（ＷＲ）、１ビットの再読出イネーブルエントリ（ＲＢ）、１ビットの命令終了フラグ（ＤＯＮＥ）、１ビットの再構成終了フラグ（ＣＯＮＦＩＧ＿ＤＯＮＥ）、１１ビットの開始アドレス（ＳＴＡＲＴ＿ＡＤＤＲ）、１１ビットの終了アドレス（ＥＮＤ＿ＡＤＤＲ）および２つの未使用のビット（図示せず）を記憶する。
【００４１】
図１０は、この発明の一実施例による図８のアーキテクチャの動作のフロー図である。初めに、ＦＰＧＡ９０が起動され、当該技術分野で知られる態様で構成データ値のベースセットをロードすることにより標準的な構成が行なわれる（ステップ３６１）。ポート識別値（ＰＯＲＴ＿ＩＤ）が装置制御レジスタ２０４のＰＯＲＴ＿ＩＤフィールドにロードされる。プロセッサ１１０は装置制御レジスタ２０４からＰＯＲＴ＿ＩＤを読出す（ステップ３６２）。装置制御レジスタ２０４から読出されたＰＯＲＴ＿ＩＤ値に応答して、プロセッサ１１０は構成メモリアレイの部分的な再構成を開始する（ステップ３６３）。この部分的な再構成は次のように実現される（サブステップ３７１から３７７）。
【００４２】
まず、プロセッサ１１０は、ＤＳＯＣＭ３５４内の読出ビットストリームヘッダを変更して構成メモリアレイのフレーム（たとえば、Ｆｒａｍｅ＿１）のアドレスを識別する（ステップ３７１）。次に、プロセッサ１１０は、装置制御レジスタ２０４の書込イネーブルエントリ（ＷＲ）を論理「１」の値にセットし、装置制御レジスタ２０４で終了フラグ（ＤＯＮＥ）および再構成終了フラグ（ＣＯＮＦＩＧ＿ＤＯＮＥ）をクリアし、装置制御レジスタ２０４で開始および終了アドレス（ＳＴＡＲＴ＿ＡＤＤＲおよびＥＮＤ＿ＡＤＤＲ）をセットする。開始アドレス（ＳＴＡＲＴ＿ＡＤＤＲ）は、再読出ビットストリームヘッダが始まるＤＳＯＣＭ３５４でアドレスを識別するためにセットされ、終了アドレス（ＥＮＤ＿ＡＤＤＲ）は、読出ビットストリームヘッダが終了するＤＳＯＣＭ３５４でアドレスを識別するためにセットされる。装置制御レジスタ２０４で論理「１」書込イネーブルエントリ（ＷＲ）を検出すると、ＤＭＡエンジン２０３は、ＤＳＯＣＭ３５４に記憶される再読出ビットストリームヘッダをＩＣＡＰ１２０に送る（ステップ３７２）。ＤＭＡエンジン２０３はＤＯＮＥフラグを論理「１」状態にセットする。
【００４３】
ＩＣＡＰ１２０は、受取られた読出ビットストリームヘッダコマンドに応答して構成フレーム読出動作を開始する。結果として、構成データ値を含むフレームは、構成メモリアレイから検索され、ＩＣＡＰ１２０に提供される。
【００４４】
論理「１」ＤＯＮＥフラグに応答して、プロセッサ１１０は、書込イネーブルエントリ（ＷＲ）を低い論理値にリセットし、再読出エントリ（ＲＢ）を論理「１」の値にセットし、命令終了フラグ（ＤＯＮＥ）を論理「０」の値にリセットし、装置制御レジスタ２０４で開始および終了のアドレス（ＳＴＡＲＴ＿ＡＤＤＲおよびＥＮＤ＿ＡＤＤＲ）をセットする。開始アドレスおよび終了アドレス（ＳＴＡＲＴ＿ＡＤＤＲおよびＥＮＤ＿ＡＤＤＲ）は、検索されたフレームが書込まれるべきＤＳＯＣＭ３５４内のブロックを識別する。装置制御レジスタ２０４で論理「１」再読出エントリ（ＲＢ）を検出すると、ＤＭＡエンジン２０３は、ＩＣＡＰ１２０から検索されたフレームをＳＴＡＲＴ＿ＡＤＤＲおよびＥＮＤ＿ＡＤＤＲによって規定されるＤＳＯＣＭ３５４内の場所に送る（ステップ３７３）。ＤＭＡエンジン２０３は、次にＤＯＮＥフラグを論理「１」の値にセットする。
【００４５】
論理「１」ＤＯＮＥフラグを検出すると、プロセッサ１１０は、選択構成ビットを新しい構成ビットで上書きすることによって、ＤＳＯＣＭ３５４に記憶されるこれら構成ビットを変更する。これら新しい構成ビットは、装置制御レジスタ２０４から検索されたＰＯＲＴ＿ＩＤ値に応答してプロセッサ１１０によって選択される（ステップ３７４）。
【００４６】
次に、プロセッサ１１０は、装置制御レジスタ２０４で、ＤＯＮＥフラグを論理「０」の値にリセットし、再読出エントリ（ＲＢ）を論理「０」の値にリセットし、書込イネーブルエントリ（ＷＲ）を論理「１」の値にセットする。プロセッサ１１０は、装置制御レジスタ２０４で開始および終了のアドレス（ＳＴＡＲＴ＿ＡＤＤＲおよびＥＮＤ＿ＡＤＤＲ）もセットする。開始アドレス（ＳＴＡＲＴ＿ＡＤＤＲ）は、書込ビットストリームヘッダが始まるＤＳＯＣＭ３５４でアドレスを識別するためにセットされ、終了アドレス（ＥＮＤ＿ＡＤＤＲ）は、書込ビットストリームヘッダが終了するＤＳＯＣＭ３５４でアドレスを識別するためにセットされる。装置制御レジスタ２０４で論理「１」書込イネーブルエントリ（ＷＲ）を検出すると、ＤＭＡエンジン２０３は、ＤＳＯＣＭ３５４に記憶される書込ビットストリームヘッダをＩＣＡＰ１２０に送り、それによって構成メモリアレイへの書込アクセスを開始する（ステップ３７５）。ＤＭＡエンジン２０３は、次にＤＯＮＥフラグを論理「１」の状態にセットする。
【００４７】
論理「１」ＤＯＮＥフラグを検出すると、プロセッサ１１０は、装置制御レジスタ２０４で、ＤＯＮＥフラグを論理「０」の状態にリセットし、書込イネーブル信号（ＷＲ）を論理「１」の値にセットし、開始および終了のアドレス（START_ADDRおよびEND_ADDR）をセットする。開始アドレス（START_ADDR）は、変更されたフレームが始まるＤＳＯＣＭ３５４でアドレスを識別するためにセットされ、終了アドレス（END_ADDR）は、変更されたフレームが終了するＤＳＯＣＭ３５４でアドレスを識別するためにセットされる。論理「１」書込イネーブルエントリ（ＷＲ）をＤＣＲ２０４で検出すると、ＤＭＡエンジン２０３は、ＤＳＯＣＭ３５４に記憶される変更されたフレームをＩＣＡＰ１２０に送る。応答して、ＩＣＡＰ１２０は構成データ値の変更されたフレームを構成メモリアレイに再び書込み、構成データ値のこの変更されたフレームが構成データ値の以前に検索されたフレームを上書きするようにする（ステップ３７６）。ＤＭＡエンジン２０３は、次にＤＯＮＥフラグを論理「１」の値にセットする。
【００４８】
論理「１」ＤＯＮＥフラグを検出すると、プロセッサ１１０は、ＤＣＲ２０４で、ＤＯＮＥフラグを論理「０」の状態にリセットし、書込イネーブル信号（ＷＲ）を論理「１」の値にセットし、開始および終了のアドレス（START_ADDRおよびEND_ADDR）をセットする。開始アドレス（START_ADDR）は、書込ビットストリーム終端部が始まるＤＳＯＣＭ３５４でアドレスを識別するためにセットされ、終了アドレス（END_ADDR）は、書込ビットストリーム終端部が終了するＤＳＯＣＭ３５４でアドレスを識別するためにセットされる。論理「１」書込イネーブルエントリ（ＷＲ）をＤＣＲ２０４で検出すると、ＤＭＡエンジン２０３は、ＤＳＯＣＭ３５４に記憶される書込ビットストリーム終端部をＩＣＡＰ１２
０に転送し、それによってＩＣＡＰ１２０に構成メモリアレイへの書込アクセスを完了するように指示する（ステップ３７７）。ＤＭＡエンジン２０３は、次にＤＯＮＥフラグを論理「１」の値にセットし、処理はステップ３６３に戻る。サブステップ３７１〜３７７は、変更されるべき構成データ値を記憶する１つまたは複数のフレームのすべてが上述の態様で読出され、変更され、かつ書込まれるまで繰返される。ステップ３６４では、プロセッサ１１０は、装置制御レジスタ２０４で再構成終了フラグ（CONFIG_DONE）を論理「１」の値にセットし、それによって１つまたは複数のフレームが適切に再構成されたことを示す。ＦＰＧＡ９０は、次に通常の動作を開始する（ステップ３６５）。
【００４９】
図１１は、この発明の好ましい実施例のＩＣＡＰ制御モジュールの概略図である。ＩＣＡＰ制御モジュール３８０は、図７のＩＣＡＰ制御モジュール３５０の例である。図７の双方向性データバス３３６は、一方向性データバス４３２Ａおよび４３２Ｂを表わす。ＩＣＡＰ制御モジュール３８０は、データバス４３２Ａおよび４３２Ｂに対する通路の役割を果たし、すなわち、ＩＣＡＰデータバス２１０および２１８は、それぞれバス４３２Ａおよび４３２Ｂを介してＢＲＡＭデータ４４２に直接的に接続される。ＩＣＡＰ制御モジュール３８０は、状態レジスタ４１２、アドレス制御モジュール４２０、および読出／書込レジスタ４１０を含む。読出／書込レジスタ４１０は、プロセッサ１１０によって書込まれる１ビットの幅のレジスタである。読出／書込レジスタ４１０が書込まれると、それは図１４のstart_transfer信号５３４をアサートすることによって読出／書込転送を開始する。読出／書込ビットは、ＩＣＡＰ１２０からの読出では１にセットされ、ＩＣＡＰ１２０への書込では０にセットされる。読出／書込レジスタ４１０は、書込信号２１２をＩＣＡＰ１２０に送るインバータ４１１に接続される（図３）。状態レジスタ４１２は１ビットの幅のレジスタであり、これは論理関数４１４（（cycle_done ５２６）AND（NOT（Busy ２２０）））によって１にセットされると、そのサイクルに対する読出／書込転送が完了したことをプロセッサブロック１１０に示す。プロセッサブロック１１０が状態レジスタ４１２を読出した後、それは０にリセットされる。
【００５０】
アドレス制御モジュール４２０は、ＢＲＡＭオフセットレジスタ４２２、サイクルサイズレジスタ４２４、コンパレータ４２５、サイクルカウンタ４２６、および加算器４２８を含む。アドレス制御モジュール４２０は、ＩＣＡＰ１２０によって読出されかつ書込まれるＢＲＡＭデータ４４２に対するメモリアドレス（ＢＲＡＭアドレス４４２）を生成する。メモリアドレスはバス４３０を介してＢＲＡＭ３３８に送られる。生成は加算器４２８を介して加算することによって行なわれ、開始またはベースのアドレスが、ＢＲＡＭオフセットレジスタ４２２でサイクルカウンタ４２６の現在の整数カウント（すなわち、アレイに対する指標）に与えられる。サイクルカウンタ４２６は、サイクル当たり読出／書込されるべき（バイト−１）の数を有するサイクルサイズレジスタ４２４で与えられた数まで計数する。コンパレータ４２５は、サイクルカウンタ４２６からの現在のcycle_count５１８をサイクルサイズレジスタ４２４からのcycle_size５２０と比較する。ＢＲＡＭオフセットレジスタ４２２およびcycle_sizeレジスタ４２４の両方は、バス３３４を介してプロセッサブロック１１０に書込まれかつそこから読出され得る。
【００５１】
図１２は、この発明の或る局面のサイクルカウンタ４２６に対する制御信号を示す。サイクルカウンタ４２６は、イネーブル信号ＥＮ、クロック信号ＣＬＫ、リセット信号ＲＳＴ、およびサイクルカウント、すなわち、cycle_count５１８を与える出力信号ＯＵＴを含む入力信号を有する。cycle_count５１８は、０で開始する整数指標番号（index number）であり、リセットがあるまでクロックサイクル（ｃｌｋ５１４）ごとに１ずつ増分される。サイクルカウンタ４２６は、（cycle_done AND NOT Busy）５１２がアサートされると、リセットされ（カウントは０に戻される）、cycle_done５２６はコンパレータ４２５からのもので（図１３を参照）、ビジーはＩＣＡＰ１２０からのBusy信号２２０である。イネーブル信号は、図１４の状態マシンがサイクル状態５３２である場合に（CYCLE AN
D NOT Busy）５１２を受取り、ここでＣＹＣＬＥは１であり、ビジーはＩＣＡＰ１２０からのBusy信号２２０である。サイクルカウンタ４２６は、ＩＣＡＰ制御モジュール３８０がサイクル状態５３２であり、かつＩＣＡＰ１２０が利用可能である（すなわちビシーではない）場合に新しいサイクルカウント値を出力する。
【００５２】
図１３は、この発明の或る局面のコンパレータに対する入力および出力の信号を示す。コンパレータ４２５は、第１の入力IN_1としてサイクルサイズレジスタ４２４からサイクルサイズ５２０を受取り、第２の入力In_2としてサイクルカウンタ４２６（図１２）からcycle_count５１８を受取る。コンパレータ４２５は、入力信号、すなわち、サイクルサイズからサイクルカウントを減じたものを比較し、差が０であるときに１を出力し、すなわち、cycle_done５２６は１に等しい。
【００５３】
図１４は、ＩＣＡＰ制御３８０による読出および書込を制御するための有限ステートマシン（ＦＳＭ）を示す。ＦＳＭは、サイクルカウンタ４２６がそのリセット状態であるＩＤＬＥ状態５３０、およびＩＣＡＰ１２０と、アドレス制御モジュール４２０によって与えられるアドレスで開始するＢＲＡＭ３３８との間でデータが転送されるＣＹＣＬＥ状態５３２を含む。このＣＹＣＬＥ状態で転送されるバイトの数は、cycle_size５２０から１を減じたものである。
【００５４】
ＦＳＭは、ＩＤＬＥ状態５３０で開始し、プロセッサブロック１１０による読出／書込レジスタ４１０への書込があるときにアサートされるstart_transfer信号５３４があるときにＣＹＣＬＥ状態５３２に変わる。（cycle_done AND not Busy）信号４１４がアサートされると、すなわち、データの転送が完了すると、ＦＳＭは、ＣＹＣＬＥ状態５３２からＩＤＬＥ状態５３０に戻る。
【００５５】
図１５は、この発明の或る局面のＢＲＡＭ３３８からＩＣＡＰ１２０に構成メモリアレイデータを書込むＩＣＡＰ制御３８０に対するフローチャートである。ステップ５５０では、プロセッサブロック１１０は、ＢＲＡＭオフセットレジスタ４２２にＩＣＡＰ読出命令のＢＲＡＭ３８８内の開始アドレスを送って構成論理１１２をセットアップし、１つまたは複数のフレームに対する構成メモリアレイデータを送る。ステップ５５２では、ＩＣＡＰ制御３８０は、ＢＲＡＭ３３８内の読出命令をＩＣＡＰ１２０に書込む（読出／書込レジスタ４１０はゼロにセットされる）。ステップ５５４では、プロセッサブロック１１０の開始で、すなわち、プロセッサブロック１１０が読出／書込レジスタ４１０を１にセットし、ＩＣＡＰ制御３８０は、バス４３２Ｂを介して１つまたは複数のフレームをＩＣＡＰ出力２１８からＢＲＡＭデータ４４２に転送する。プロセッサブロック１１０はＢＲＡＭデータ４４２内の１つまたは複数のフレームを変更する（ステップ５５６）。ステップ５５８では、プロセッサブロック１１０は、ＩＣＡＰ１２０を介してＩＣＡＰ制御３８０のアドレス制御モジュール４２０に構成論理１１２をセットアップするための書込命令のＢＲＡＭ３３８内での場所を送り、変更された１つまたは複数のフレームを受取る。プロセッサブロック１１０の開始で（読出／書込レジスタ４１０はゼロにセットされる）、ＩＣＡＰ制御３８０はＢＲＡＭ内の書込命令をＩＣＡＰ１２０に書込む（ステップ５６０）。ＩＣＡＰ書込命令が送られた後、ＩＣＡＰ制御３８０は、バス４３２Ａを介してＢＲＡＭデータ４４２から変更された構成データをＩＣＡＰ入力２１０に書込み続ける（ステップ５６２）。
【００５６】
図１５では、ＢＲＡＭ３３８の配置は、ＩＣＡＰ読出命令が記憶されたＢＲＡＭ３３８内の第１の領域があり、続いて構成メモリアレイから読出された１つまたは複数のフレームが記憶されるべき予備の空間があるものだった。ＩＣＡＰ書込命令、続いて構成メモリアレイに再び書込まれるべき１つまたは複数の変更されたフレームのための第２の領域ががあった。さらに、プロセッサブロック１１０が実行するコンピュータプログラムを記憶
するＢＲＡＭ３３８内の第３の領域があった。上述のＢＲＡＭのメモリの配置は例示のためのものに過ぎず、当業者には多くの異なる記憶場所および配置が可能であることが理解されるであろう。
【００５７】
ＩＣＡＰ制御３８０に対する例示的な実現例として、ＢＲＡＭ３３８は、５１２ｘ３２ビットのＲＡＭとしてシステムバス３３４（およびプロセッサブロック１１０）に頼り、かつバス４３０、４３２Ａおよび４３２Ｂを介して、２０４８ｘ８ビットのメモリとしてＩＣＡＰ制御３８０に頼ると仮定する。言い換えると、ＢＲＡＭ３３８はデュアルポートＲＡＭである。すべてのデータ転送が３２ビット（ワード）であるとする。ＢＲＡＭオフセットレジスタ４２２およびサイクルサイズレジスタ４２４は、１１ビットの幅であると仮定する。
【００５８】
この例では、制御情報およびデータの両方をＩＣＡＰ制御３８０およびＢＲＡＭ３３８から読出しかつそこに書込むためにプロセッサブロック１１０によって使用される９個のドライバルーチンがある。この９個のドライバルーチンは次のとおりである。
【００５９】
１．void storageBufferWrite (unsigned int addr, unsigned int data)、これはプロセッサブロック１１０内のレジスタからの３２ビットのデータ値をシステムバス３３４を介してＢＲＡＭ内の特定のアドレスに書込む。アドレスaddrはワードアドレス（４つの連続するバイト）を指す。
【００６０】
２．unsigned int storageBufferRead (unsigned int addr)、これはＢＲＡＭ３３８内の特定のアドレスからの３２ビットのデータ値をシステムバス３３４を介してプロセッサブロック１１０内のレジスタに読出す。
【００６１】
３．void setCycleSizeReg (unsigned int size)、これは１つのサイクルでＢＲＡＭ３３８からＩＣＡＰ１２０に（またはＩＣＡＰ１２０からＢＲＡＭ３３８に）転送されるべきバイトの合計数として、サイクルサイズレジスタ４２４の値をセットする。ＢＲＡＭ３３８がバス３３６（図７）を介して２０４８ｘ８ビットのメモリとしてＩＣＡＰ制御３８０に頼るため、この数は１１バイト（ワードではない）のビットカウントである。
【００６２】
４．unsigned int getStorageBufferSizeReg()、これは１１バイトのビットカウントとしてサイクルサイズレジスタ４２４に現在記憶されている値を得る。
【００６３】
５．extern void setOffsetReg (unsigned int offset)、これはＢＲＡＭオフセットレジスタ４２２の値をＢＲＡＭ３３８とＩＣＡＰ１２０との間で転送されるべきデータの開始アドレス（またはベースアドレスからのオフセット）にセットする。
【００６４】
６．extern unsigned int getOffsetReg()、これはオフセットレジスタ４２２に現在記憶される値を得る。
【００６５】
unsigned int setBaseAddr (unsigned int newBaseAddr)、これは任意でＢＲＡＭのベースアドレスをセットする。
【００６６】
７．extern unsigned int getStatusReg()は、ＢＲＡＭとＩＣＡＰとの間のデータ転送の現在の状態、すなわち、状態レジスタ４１２の内容を得る。代替の実施例では、状態レジスタ４１２を読出すことはレジスタをクリアしない。そうではなく、それは、cycle_done and not busyがアサートされるまでポーリングされ、その後、結果は新しい転送が開始されるまで無視される。
【００６７】
８．extern void setDirectionReg (unsigned int wrb)は、ＢＲＡＭとＩＣＡＰとの間の転送の方向をセットし、転送も開始も行なう。
【００６８】
上述の装置ドライバは、装置（ＩＣＡＰ１２０）からＢＲＡＭ３３８に読出すため、および装置（ＩＣＡＰ１２０）からＢＲＡＭ３３８に書込むためのルーチンを作成するために使用することができる。
【００６９】
【数１】
0004500772.tif 000002
【００７０】
プロセッサブロック１１０は、システムバス３３４を介してＩＣＡＰ制御モジュール３８０およびＢＲＡＭ３３８とインターフェイスし、構成データは、ＩＣＡＰ１２０からＢＲＡＭ３３８に読出され、プロセッサブロック１１０によって変更され、ＢＲＡＭ３３８からＩＣＡＰ１２０に書込まれ、上述の関数のいくつかを実行する。図１５の場合、ステップ５５０および５５２では、deviceWrite()は、ＩＣＡＰ読出命令がＢＲＡＭ３３８から構成論理１１２に書込まれるようにする（図７を参照）。ステップ５５４では、プロセッサは、deviceRead()を実行し、これは、たとえば、構成メモリアレイの情報のフレームがＩＣＡＰ１２０、ＩＣＡＰ制御３５０、およびバス３３６を介して、構成論理１１２からＢＲＡＭ３３８に転送されるようにする。ステップ５５６では、プロセッサブロック１１０はstorageBufferRead()を使用して、ＢＲＡＭからのフレームから選択されたワード
を検索し、そのワードを変更し、storageBufferWrite()が実行されるときにそれをＢＲＡＭ３３８に再び書込む。プロセッサは、フレーム内の一部またはすべてのワードを変更するために上述のプロセスを繰返す。ステップ５５８、５６０および５６２では、deviceWrite()は、ＩＣＡＰ書込命令、これに続く変更されたフレームデータをバス３３６を介してＢＲＡＭ３３８から構成論理１１２に転送する。
【００７１】
図１６は、この発明の代替の実施例のＩＣＡＰ制御モジュールの概略図である。ＩＣＡＰ制御モジュール３８２は、図７のＩＣＡＰ制御モジュール３５０の別の例である。図７の双方向性データバス３３６は、図１６の一方向性データバス６３２Ａおよび６３２Ｂを表わす。ＩＣＡＰ制御モジュール３３０は、データバス４３２Ａおび４３２Ｂに対する通路の役割を果たし、すなわち、ＩＣＡＰデータバス２１０は、バス６３２Ａおよびマルチプレクサ６１４を介してＢＲＡＭ３３８に接続され、ＩＣＡＰデータバス２１８は、バス６３２Ｂを介してＢＲＡＭ３３８に直接接続される。ＩＣＡＰ制御モジュール３８２は、オンチップ周辺バス（ＯＰＢ）コントローラ６１０、パケットレジスタ６１２、アドレス制御モジュール６１６、およびマルチプレクサ６１４を含む。プロセッサブロック１１０はＩＣＡＰデータパケット３１０（図３）をパケットレジスタ６１２に送る。さらに、プロセッサブロック１１０は、ＩＣＡＰ１２０からデータを読出しかつそこにデータを書込むためにＢＲＡＭ３３８内の開始アドレスを送る。ＯＰＢコントローラ６１０は、プロセッサブロック１１０からの情報が正しいレジスタ（パケットレジスタ６１２またはＢＲＡＭアドレスレジスタ６１８）に行くようにする。
【００７２】
アドレス制御モジュール６１６は、ＢＲＡＭアドレスレジスタ６１８、サイクルサイズレジスタ６２０、サイクルカウンタ６２２、および加算器６２４を含む。アドレス制御モジュール６１６は、ＩＣＡＰ１２０によって読出されかつ書込まれているＢＲＡＭデータ６４２に対してメモリアドレス（BRAMアドレス６４０）を生成する。メモリアドレスは、バス６２６を介してＢＲＡＭ３３８に送られる。生成は加算器６２４を介した加算によって行なわれ、開始またはベースのアドレスは、ＢＲＡＭアドレスレジスタ６１８でサイクルカウンタ６２２の現在の整数カウント（すなわち、アレイに対する指標）に与えられる。サイクルカウンタ６２２は、サイクル当り読出／書込まれるべき「バイト−１」の数を有するサイクルサイズレジスタ６２０で与えられる値まで計数する。サイクルサイズレジスタ６２０は、パケットレジスタ６１２に記憶されるＩＣＡＰデータパケット３１０（図３）内のワードカウント３２０から合計カウントを得る。
【００７３】
読出／書込動作を行なうステップの例は、以下のとおりである。
【００７４】
１．ＢＲＡＭアドレスレジスタ６１８をアドレスBRAM_ADDRESS（たとえば、０）にセットアップする。
【００７５】
２．ＩＣＡＰ読出コマンドパケットをパケットレジスタ６１２に書込む（たとえば、ＬＵＴフレームを読出すため）。
【００７６】
３．ＩＣＡＰ制御３８２によって、ＩＣＡＰ読出コマンドパケット「ワード」カウント３２０からのバイトのカウントを決定し、パケットレジスタ６１２の内容をＩＣＡＰポート１２０に書込む。次に、ＩＣＡＰ制御３８２はＩＣＡＰポート１２０からデータのＣＯＵＮＴバイトを読出し、そのバイトをBRAM_ADDRESSで始まるＢＲＡＭデータ６４２に書込む。
【００７７】
４．ＢＲＡＭ３３８内のＬＵＴフレーム上でバス３３４を介してプロセッサブロック１１０によって変更を行なう。ＩＣＡＰ制御３８３は、ここではアイドル状態である。
【００７８】
５．ＢＲＡＭアドレスレジスタ６１８をアドレスBRAM_ADDRESSにセットアップする（たとえば、これは書込および読出のデータの異なるフォーマットを考慮するためにステップ１のBRAM_ADDRESSに１つのパッドフレームを加えたものである）。
【００７９】
６．ＩＣＡＰ書込コマンドパケットを書込んでデータのフレーム（たとえば、ＢＲＡＭに記憶される変更されたＬＵＴフレーム）を書込む。
【００８０】
７．パケットレジスタ６１２の内容をＩＣＡＰポート１２０に書込み、続いて、BRAM_ADDRESSで始まるＢＲＡＭ３３８からのデータのＣＯＵＮＴバイトをＩＣＡＰ１２０に書込む。ＣＯＵＮＴは、ステップ３にあるようにパケットレジスタ６１２の「ワード」カウント３２０から抽出される。
【００８１】
図１７は、この発明の或る局面の階層化アーキテクチャである。階層化アプローチは、１つの層またはレベルにある要素を他のレベルに影響することなく変更できるように使用される。図１７では、レベル０および１はハードウェア依存であり、レベル２、３および４はハードウェア非依存である。プロセッサブロック１１０などのプロセッサでは、ＩＣＡＰコントローラの実施例は、図６、図８、図１１および図１６に与えられている。装置ドライバ７１２の例は、setCycleSizeReg()、getStorageBufferSizeReg()、setOffsetReg()、getOffsetReg()、setBaseAddr()、getStatusReg()、およびsetDirectinReg()を含む。構成インターフェイス１１４を使用してレベル１にある構成メモリアレイにアクセスする外部プロセッサの場合では、ＩＣＡＰ装置ドライバ７２２はエミュレートされる。レベル２はアプリケーションプログラムインターフェイス（ＡＰＩ）７３０を有し、これは以下の表１に与えられるルーチンを有する。
【００８２】
【表１】
0004500772.tif 000003
【００８３】
ＡＰＩ７３０内のルーチンも階層化され、表１に対する層は以下の表２に与えられる。階層化アプローチにより、より高い層に変更を行なうことなく、高速なハードウェアの実現例でより低い層の置換を行なうことができる。
【００８４】
【表２】
0004500772.tif 000004
【００８５】
ツールキット７３２は、移動可能なモジュールを含め、動的なリソースの変更、すなわち、リソースのその場での変更のためにアプリケーション７３４に対してルーチンを提供する。上述の表２のルーチンのように、これらルーチンは、Ｃ、Ｃ＋＋、Ｃ♯、ＶＢ／ＶＢＡ等の高レベルの言語で書かれたアプリケーションプログラムにユーザによって容易に組込むことができる。そのようなレベル３のルーチンの例を以下の表３に与える。
【００８６】
【表３】
0004500772.tif 000005
【００８７】
ここでＬＵＴはルックアプローチテーブルであり、ＦＦはフリップフロップである。setLUT()コマンドは、たとえば、以下のステップを含む。
【００８８】
１．ターゲットのフレームを決定する。
【００８９】
２．ターゲットのフレーム内でＬＵＴビットを見付ける。
【００９０】
３．deviceReadFrame()を使用してＩＣＡＰからターゲットのフレームを読出し、ＢＲＡＭに記憶する。
【００９１】
４．writeStorageBuffer()を使用してＢＲＡＭ内でＬＵＴビットを変更する。
【００９２】
５．deviceWriteFrame()を使用して変更されたＬＵＴビットでＦＰＧＡを再構成する。
【００９３】
ツールキット７３２は、移動可能なモジュールを扱うために２つの関数を提供する。
【００９４】
【数２】
0004500772.tif 000006
【００９５】
setModule()関数は、構成メモリアレイの領域内のビットを１つの場所から別の場所に動かす。setModule()は、含まれるフレーム内の行のすべてについての情報を含む部分的なビットストリーム上で働く。それは、構成データパケット３１０のコマンド部分３１２にあるレジスタアドレス３１８（図４）を変更することによって働く。
【００９６】
図１８は、setModule()関数によって、構成メモリアレイ（図２−１および図２−２）上で古い場所８１２−１から新しい場所８１２−２に動かされているモジュールの例を示す。モジュールは、fromＹ１  ８１４のコーナ点を備えた場所８１２−１にあるＮ個のフレームを有し、Ｎは正の数である。これらＮ個のフレームは、コーナ点toＹ１  ８１６を備えた場所８１２−２に移動される。
【００９７】
copyModule()関数は、構成メモリアレイの任意のサイズの長方形の領域をコピーし、それを別の場所に書込む。コピーされた領域はフレーム内の行のサブセットを含む。これによって、それの上方および／または下方に静的な領域を有する動的な領域の作成が可能になる。copyModule()関数は、リソースの変更関数のように読出／変更／書込の戦略を用いる。この方法は、フレーム内で選択ビットを変更し、かつそれらの現在の構成されている状態で他のビットを残す場合にうまく働く。
【００９８】
図１９は、copyModule()関数によって、構成メモリアレイ（図２−１および図２−２）上で古い場所８２０−１から新しい場所８２０−２にコピーされているモジュールの例を示す。長方形の領域８２０−１は、fromＹ１  ８３０およびfromＹ２  ８３２のＹ座標を有し、これらは元々のＮ個のフレームの場所を示す。Ｘ座標fromＸ１  ８４０およびfromＸ２  ８４２は、元々のＮ個のフレーム内の行の場所である。コピーされた領域８２０−１の基準として使用される上部のコーナの座標は（toＸ１  ８４４，toＹ１  ８３４）である。
【００９９】
他の関数は、ＣＬＢなどの選択されたリソースに対して特定の構成メモリアレイのビットをセットおよび検索することを含み、たとえば以下のようなものがある。
【０１００】
【数３】
0004500772.tif 000007
【０１０１】
setCLBBits()は、setLUT()関数よりも一般化された関数である。setCLBBits()は、setLUT()の代わりにLUTの値をセットするために使用できる。しかしながら、一実施例では、setCLBBits()はsetLUT()ほど効率的ではない。これは、setLUT()がＬＵＴを制御するすべてのビットが１つのフレーム内にあると知っており、setLUT()が１つのフレームを読出し、Ｍ個のビットを変更し（Ｍは所定の整数値である）、その変更されたフレームを再び書
込むことができるからである。一方、setCLBBits()は読出／変更／書込をＭ回行なう。なぜなら、各ビットがあるフレームに対して仮定される所定の場所がないためである。
【０１０２】
上述のＡＰＩおよびツールキット関数により、ＦＰＧＡなどの複数のプログラマブル論理モジュールを含むＩＣの全体的または部分的な再構成に対して高レベルのプログラミング構築物およびグラフィカルユーザインターフェイス（ＧＵＩ）の使用が可能になる。たとえば、図１９では、ＰＣウインドウでのコピーおよびペーストは、領域８２０−１を領域８２０−２にコピーすることができる。Microsoft（登録商標）Visio（登録商標）などのＧＵＩは、領域をＦＰＧＡ内で移動するためのユーザに使いやすいグラフィカル手段を可能にする。
【０１０３】
ソフトコアのMicroblazeTMプロセッサまたはハードコアのPowerPc（登録商標）プロセッサなどのプロセッサがある場合、構成メモリアレイへのインターフェイスはＩＣＡＰ制御モジュールおよびＩＣＡＰ１２０を介する。外部プロセッサがある場合、構成メモリアレイへのアクセスは、選択マップインターフェイスなどの構成インターフェイス１１４を介する。図１７の階層化アーキテクチャにより、ＡＰＩ７３０およびツールキット７３２がハードウェア非依存であることが可能になる。さらに、アプリケーション層７３４は、ＣまたはＣ＋＋などの高レベルの言語で書かれる。
【０１０４】
プログラマブル論理モジュールを有するＩＣでは、２つ以上のプロセッサがあり得る。図１、図２−１、図２−２は、この発明をわかりにくくしないために１つのプロセッサのみを示している。しかしながら、たとえば、カリフォルニア州、サン・ノゼのザイリンクス・インコーポレイテッドのVirtex II ProTMは４つまでのPowerPC（登録商標）を有する。したがって、この発明の実施例は１つのプロセッサに限定されず、１つまたは複数のプロセッサを含む。
【０１０５】
ＩＣ上の共有リソースにアクセスするマルチプロセッサの場合、一度に１つのプロセッサのみが共有リソースにアクセスするように共有リソースへのアクセスを制御するためにセマフォーなどの仲裁機構が必要である。１つのみがあるＩＣＡＰ１２０の具体的な例では、ＩＣＡＰ１２０はマルチプロセッサに対する共有リソースである。この発明の一実施例では、セマフォーはＩＣＡＰへのアクセスを制御するために使用される。
【０１０６】
図２０は、この発明の或る実施例の共有リソースへのアクセスを制御するためにセマフォーを使用するマルチプロセッサシステムのブロック図である。図２０は、図７のものと類似のいくつかのブロックを有し、それらブロックは同じ番号で示される。図２０は、２つのプロセッサ、すなわち、プロセッサブロック９１０および１１０を示し、これらはシステムバス３３４を介してＢＲＡＭ３３８、セマフォーモジュール９２０およびＩＣＡＰ制御３５０に接続される。ＢＲＡＭ３３８およびＩＣＡＰ制御３５０は、マルチプロセッサの共有リソースである。共有リソースにアクセスするためには、たとえば、ＩＣＡＰ制御３５０、プロセッサブロック、たとえば１１０は、セマフォーモジュール９２０から与えられるアクセスを要求する。典型的には、プロセッサ１１０は、アクセスが与えられるまでポーリングする。一旦アクセスが与えられると、すなわち、プロセッサ１１０がセマフォーを有すると、プロセッサブロック１１０はＩＣＡＰ制御３５０にアクセスし、構成メモリアレイから１つまたは複数のフレームを読出し、書込みまたは変更することができる。プロセッサ１１０はセマフォーを解放する責任を負う。所定の時間内にプロセッサブロック１１０によるセマフォーの解放をセマフォーモジュール９２０が受取らない場合に膠着状態を防止するためにウォッチドッグタイマ９３０がある。ウォッチドッグタイマ９３０は、予め定められた値からゼロまでカウントダウンする。ＩＣＡＰ制御３５０へのアクセスで、ウォッチドッグタイマ９３０は予め定められた値にリセットされる。ウォッチドッグタイマ９３０がゼロに達すると、セマフォーは自動的に解放され、プロセッサブロ
ック１１０は、プロセッサブロック１１０がＩＣＡＰ制御３５０へのアクセスを有することができる前にセマフォーモジュール９２０からセマフォーを再び要求しなければならない。
【０１０７】
図２１は、この発明の或る局面の共有リソース、たとえば、ＢＲＡＭ３３８またはＩＣＡＰ制御３５０を使用しようとする２つのプロセッサブロックに対するイベントおよび時間を示す。時間ｔ１のプロセッサブロック１１０は、セマフォーモジュール９２０に要求９４０を送り、セマフォーの許可９４２を受取る。時間ｔ２では、プロセッサブロック１１０は、ＩＣＡＰ制御３５０を介して構成メモリアレイから１つまたは複数のフレームを読出し９４４、フレームの１つまたは複数を変更し９４６、ＩＣＡＰ制御３５０を介してその１つまたは複数の変更されたフレームを構成メモリアレイに再び書込む。プロセッサブロック１１０は、セマフォーモジュール９２０でセマフォーを自由にする９５０。同時に時間ｔ２で、プロセッサブロック９１０は、セマフォーモジュール９２０からＩＣＡＰ制御３５０にアクセスするためにセマフォーを要求する９５２。セマフォーはプロセッサブロック１１０に与えられているため、プロセッサブロック９１０による要求９５２は拒否される９５４。プロセッサブロック９１０は、セマフォーが自由にされるまで９５０セマフォーモジュール９２０をポーリングする（要求９５６、拒否９５８）。時間ｔ３で、プロセッサブロック９１０は、セマフォーに対するその要求９６０に応答してセマフォーモジュール９２０によって許可を与えられる９６２。共有リソースに対する上述の例はＢＲＡＭ３３８およびＩＣＡＰ制御３５０であったが、上述のセマフォーの使用は任意の共有リソースに適用可能である。
【０１０８】
この発明の説明される実施例の一部によると、オンチッププロセッサを有するプログラマブル論理装置は効率的な部分的な再構成の仕組みを実現するように構成される。説明される実施例の一部では、部分的な再構成の仕組みを実現するために、ザイリンクス・インコーポレイテッドから入手可能な従来のVirtex-IITM Pro ＦＰＧＡが使用される。したがって、一部の実施例はＦＰＧＡ１１００（図２２）の使用に関して説明される。この発明の一部の実施例はＦＰＧＡの部分的な再構成に関して説明されるが、この発明の部分的な再構成の仕組みは他のプログラマブル論理装置を使用しても実現可能であることが理解される。
【０１０９】
部分的な再構成の仕組みは、ＦＰＧＡ１１００のマルチギガビットトランシーバ（ＭＧＴ）１１１１〜１１１４の部分的な再構成に関して説明される。しかしながら、ＦＰＧＡ１１００の他の要素は以下に説明する原則に従って部分的に再構成可能であることが理解される。
【０１１０】
説明される実施例では、ＭＧＴ１１１１〜１１１４は、これらトランシーバの動作を最適化するために再構成される。一般に、ＭＧＴ１１１１〜１１１４は秒当たり３．１２５ギガビット（Ｇｂｐｓ）までのレートで別のチップに差分信号を伝送する。これら差分信号を伝送するために使用されるトレースの長さは、ＦＰＧＡおよび受取るチップの物理的な場所に応じて異なり得る。たとえば、ＦＰＧＡ１１００は、シリアルバックプレーンのスロットに差込まれるプリント回路板上にあってもよい。この場合、ＦＰＧＡ１１００と受取るチップとの間のトレースの長さは、そこにＦＰＧＡが挿入されている特定のスロットによって決定される。
【０１１１】
ＭＧＴ１１１１〜１１１４は、伝送される差分信号に異なるレベルのプリエンファシスを提供するように構成することができる。この実施例では、各ＭＧＴ内の２つの構成メモリセルは、信号のプリエンファシスの４つのレベルのうちの１つを選択するために使用される。具体的には、各ＭＧＴ内の２つの「プリエンファシス」構成メモリセルは、１０パーセントのプリエンファシスを差分伝送信号に提供するように「００」の値を有するよう
にセットすることができる。同様に、これら２つのプリエンファシス構成メモリセルは、差分伝送信号に２０パーセント、２５パーセントまたは３３パーセントのプリエンファシスをそれぞれ提供するように「０１」、「１０」または「１１」の値を有するようにセットすることができる。
【０１１２】
ＭＧＴ１１１１〜１１１４は、異なる差動出力電圧を提供するように構成することもできる。この実施例では、各ＭＧＴ内の３つの構成メモリセルは、５つの差動出力電圧のうちの１つを選択するために使用される。具体的には、各ＭＧＴ内の３つの「差動出力電圧」構成メモリセルは、４００ｍＶの差動電圧を有する出力信号を提供するために「００１」の値を有するようにセットすることができる。同様に、これら３つの差動出力電圧構成メモリセルは、それぞれ５００ｍＶ、６００ｍＶ、７００ｍＶまたは８００ｍＶの差動電圧を有する出力信号を提供するために「０１０」、「０１１」、「１００」または「１０１」の値を有するようにセットすることができる。
【０１１３】
説明される実施例の一部では、各ＭＧＴに対するプリエンファシスおよび差動出力電圧の構成メモリセルは、構成メモリアレイの同じフレームにある。したがって、ＭＧＴ１１１１、１１１２、１１１３および１１１４に対するプリエンファシスおよび差動出力電圧の構成メモリセルは、構成メモリアレイの４つの対応するフレーム、Frame_１、Frame_２、Frame_３およびFrame_４にある。
【０１１４】
一般に、この発明の実施例として以下のように動作する。初めに、ＦＰＧＡ１１００は構成データ値のベースセットに応答して構成され、これらは外部メモリによって提供される。ＦＰＧＡ１１００の残りを構成することに加え、構成データ値のこのベースセットは所定のベース構成でＭＧＴ１１１１〜１１１４を構成する。たとえば、ベース構成では、プリエンファシス構成メモリセルは「００」の値でロードされ、差動出力電圧構成メモリセルは「００１」の値でロードされ得る。
【０１１５】
ＦＰＧＡ１１００のピン上で提供される静的な４ビットコードであるポート識別信号（PORT_ID）は、シリアルバックプレーン内でＦＰＧＡの場所を識別する。ポート識別信号は、ＦＰＧＡと受取るチップとの間の伝送チャネルの長さを表わす。ポート識別信号は、ＦＰＧＡ１１００上でプロセッサ１１０３に提供される。プロセッサ１１０３は、プリエンファシスおよび差動出力電圧の構成データ値の異なるセットを記憶するようにプログラムされ、各セットは異なるポート識別信号に対応する。ポート識別信号を受取ると、プロセッサ１１０３は、プリエンファシスおよび差動出力電圧の構成データ値の対応するセットにアクセスする。プロセッサ１１０３は、プリエンファシスおよび差動出力電圧構成データ値をＭＧＴ１１１１〜１１１４の１つに対して含む構成データ値のフレームが構成メモリアレイから読出されるようにする。プロセッサ１１０３は、元々のプリエンファシスおよび差動出力電圧の構成データ値をポート識別信号に関連するプリエンファシスおよび差動電圧の構成データ値のセットで上書きすることによって、構成データ値の検索されたフレームを変更する。次に、プロセッサ１１０３は、構成データ値の変更されたフレームが構成メモリアレイに再び書込まれるようにし、それによって関連するＭＧＴの特性を変更する。上述の読出−変更−書込のプロセスは、ＦＰＧＡ１１００上の他のＭＧＴに対して繰返される。
【０１１６】
この実施例はポート識別番号に応答するＭＧＴの変更を説明するが、ＭＧＴは、特徴付け、システム環境の変更および診断を含む他の理由に対しても調節可能であることが理解される。
【０１１７】
ＭＧＴを部分的に再構成するための読出−変更−書込のプロセスを実現するためにＦＰＧＡ１１００が使用される態様をさらに詳しく説明する。
【０１１８】
図２３は、この発明の一実施例による内部構成アクセスポート（ＩＣＡＰ）制御モジュール１２００のブロック図である。ＩＣＡＰ制御モジュール１２００は、読出−変更−書込の仕組みを使用してＭＧＴ１１１１〜１１１４が再構成されるのを可能にする。ＭＧＴ１１１１〜１１１４の各々は、５つの構成メモリセル１２１１〜１２１４の対応するセットを含み、これはＭＧＴのプリエンファシスおよび差動出力電圧の設定を制御する。
【０１１９】
ＩＣＡＰ制御モジュール１２００はＦＰＧＡ１１００（図２２）のさまざまな要素を使用して構成される。ＩＣＡＰ制御モジュール１２００はプロセッサ１１０３および内部構成アクセスポート１１０４を含む。内部構成アクセスポート１１０４は、すべてのVirtex-IITMおよびVirtex-IITM Pro ＦＰＧＡに見られるハードウェアに組込のモジュールであり、通信インターフェイス１１０２（図２２）に類似のインターフェイスを有する。構成論理１１０１は、ＩＣＡＰ１１０４と構成メモリアレイの構成メモリセル１２１１〜１２１４との間に結合される。内部構成アクセスポート１１０４のポートは、一般的な相互接続を介してＦＰＧＡ１１００のユーザ論理にアクセス可能である。ＩＣＡＰ制御モジュール１２００は、ブロックＲＡＭ１１２１によって形成されるデータ側オンチップメモリ（ＤＳＯＣＭ）１２０１、および２つのブロックＲＡＭ１１２２〜１１２３によって形成される命令側オンチップメモリ（ＩＳＯＣＭ）１２０２も含む。以下にさらに詳しく説明されるように、データ側ＯＣＭ１２０１は、再読出および書込の動作に対してプログラムデータ、構成フレームデータ、およびビットストリームコマンドを記憶するために使用される。命令側ＯＣＭ１２０２は、プロセッサ１１０３を動作するのに必要な命令コードを記憶する。
【０１２０】
ＩＣＡＰ制御モジュール１２００は、直接メモリアクセス（ＤＭＡ）エンジン１２０３および装置制御レジスタ（ＤＣＲ）１２０４も含む。これら要素１２０３〜１２０４は、ＣＬＢによって形成され、これらは構成データ値のベースセットに応答して構成される。以下にさらに詳しく説明されるように、装置制御レジスタ１２０４を介してコマンドがＤＭＡエンジン１２０３に発行される。ＤＭＡエンジン１２０３および装置制御レジスタ１２０４は、ＦＰＧＡ１１００のプログラマブル論理の２パーセント以下を使用する。
【０１２１】
ＩＣＡＰ制御モジュール１２００を実現するために３つのブロックＲＡＭのみが使用されるため、このモジュールはＦＰＧＡ１１００のブロックＲＡＭリソースを過剰に消費しない。さらに、ＩＣＡＰ制御モジュール１２００によって消費されるＣＬＢリソースのみでＤＭＡエンジン１２０３および装置制御レジスタ１２０４を作成するために必要なものを含む。したがって、ＩＣＡＰ制御モジュール１２００はＦＰＧＡ１１００上の最低限のプログラマブル論理リソースを消費する。
【０１２２】
図２４は、装置制御レジスタ１２０４のブロック図である。装置制御レジスタ１２０４は、３２ビットのレジスタであり、４ビットのポート識別エントリ（PORT_ID）、１ビットの書込イネーブルエントリ（ＷＲ）、１ビットの再読出イネーブルエントリ（ＲＢ）、１ビットの命令終了フラグ（ＤＯＮＥ）、１ビットの再構成終了フラグ（CONFIG_DONE）、１１ビットの開始アドレス（START_ADDR）、１１ビットの終了アドレス（END_ADDR）および２つの未使用のビット（図示せず）を記憶する。
【０１２３】
図２５は、この発明の一実施例によるＩＣＡＰ制御モジュール１２００の動作を規定するフロー図である。以下の開示（図２６）を参照することで明らかなように、このフロー図はこの発明の他の実施例にも等しく適用可能である。初めに、ＦＰＧＡ１１００が起動され、当該技術分野で知られる態様で構成データ値のベースセットをロードすることによって標準的な構成が行なわれる（ステップ１４０１）。ＦＰＧＡ１１００のピン上で提供されるポート識別値（PORT_ID）などの内部または外部の刺激が装置制御レジスタ１２０
４のPORT_IDフィールドにロードされる。プロセッサ１３０３は装置制御レジスタ１２０４からPORT_IDを読出す（ステップ１４０２）。装置制御レジスタ１２０４から読出されたPORT_ID値に応答して、プロセッサ１１０３はＭＧＴ１１１１〜１１１４の部分的な再構成を開始する（ステップ１４０３）。この部分的な再構成は次のように実現される。
【０１２４】
まず、プロセッサ１１０３は、データ側ＯＣＭ１２０１内の再読出ビットストリームヘッダを変更してＭＧＴ（たとえば、ＭＧＴ１１１１）のサブセットに対する構成データ値を含む構成メモリアレイのフレーム（たとえば、Frame_１）のアドレスを識別する（ステップ１４１１）。次に、プロセッサ１１０３は、装置制御レジスタ１２０４の書込イネーブルエントリ（ＷＲ）を論理「１」の値にセットし、装置制御レジスタ１２０４で終了フラグ（ＤＯＮＥ）および再構成終了フラグ（CONFIG_DONE）をクリアし、装置制御レジスタ１２０４で開始および終了のアドレス（START_ADDRおよびEND_ADDR）をセットする。開始アドレス（START_ADDR）は、再読出ビットストリームヘッダが始まるデータ側ＯＣＭ１２０１でアドレスを識別するためにセットされ、終了アドレス（END_ADDR）は再読出ビットストリームヘッダが終了するデータ側ＯＣＭ１２０１でアドレスを識別するためにセットされる。装置制御レジスタ１２０４で論理「１」書込イネーブルエントリ（ＷＲ）を検出すると、ＤＭＡエンジン１２０３は、データ側ＯＣＭ１２０１に記憶される再読出ビットストリームヘッダを内部構成アクセスポート１１０４に送る（ステップ１４１２）。ＤＭＡエンジン１２０３は、次にＤＯＮＥフラグを論理「１」の状態にセットする。
【０１２５】
内部構成アクセスポート１１０４は、受取られた再読出ビットストリームヘッダコマンドに応答して構成フレーム再読出動作を開始する。結果として、構成データ値１２１１を含むフレームは、構成メモリアレイから検索され、内部構成アクセスポート１１０４に提供される。
【０１２６】
論理「１」ＤＯＮＥフラグに応答して、プロセッサ１１０３は、装置制御レジスタ１２０４で、書込イネーブルエントリ（ＷＲ）を低い論理値にリセットし、再読出エントリ（ＲＢ）を論理「１」の値にセットし、命令終了フラグ（ＤＯＮＥ）を論理「０」の値にリセットし、開始および終了のアドレス（START_ADDRおよびEND_ADDR）をセットする。開始アドレスおよび終了アドレスは、検索されたフレームが書込まれるべきデータ側ＯＣＭ１２０１でブロックを識別する。装置制御レジスタ１２０４で論理「１」再読出エントリ（ＲＢ）を検出すると、ＤＭＡエンジン１２０３は、内部構成アクセスポート１１０４から検索されたフレームをSTART_ADDRおよびEND_ADDRによって規定されるデータ側ＯＣＭ１２０１内の場所に送る（ステップ１４１３）。ＤＭＡエンジン１２０３は、次にＤＯＮＥフラグを論理「１」の値にセットする。
【０１２７】
論理「１」ＤＯＮＥフラグを検出すると、プロセッサ１１０３は、選択構成ビットを新しい構成ビットで上書きすることによって、データ側ＯＣＭ１２０１に記憶されるこれら構成ビット（たとえば、構成ビットセット１２１１）を変更する。これら新しい構成ビットは、装置制御レジスタ１２０４から検索されたPORT_ID値に応答してプロセッサ１１０３によって選択される。以下にさらに詳しく説明されるように、これら新しい構成ビットは、他の実施例では他の内部または外部の構成制御刺激に応答して選択され得る。これら新しい構成ビットは、関連するＭＧＴ（たとえば、ＭＧＴ１１１１）の新しい属性を規定する。
【０１２８】
次にプロセッサ１１０３は、装置制御レジスタ１２０４で、ＤＯＮＥフラグを論理「０」の値にリセットし、再読出エントリ（ＲＢ）を論理「０」の値にリセットし、書込イネーブルエントリ（ＷＲ）を論理「１」の値にセットする。プロセッサ１１０３は、装置制御レジスタ１２０４で開始および終了のアドレス（START_ADDRおよびEND_ADDR）もセットする。開始アドレス（START_ADDR）は、書込ビットストリームヘッダが始まるデータ側Ｏ
ＣＭ１２０１でアドレスを識別するためにセットされ、終了アドレス（END_ADDR）は書込ビットストリームヘッダが終了するデータ側ＯＣＭ１２０１でアドレスを識別するためにセットされる。装置制御レジスタ１２０４内で論理「１」書込イネーブルエントリ（ＷＲ）を検出すると、ＤＭＡエンジン１２０３は、データ側ＯＣＭ１２０１に記憶される書込ビットストリームヘッダを内部構成アクセスポート１１０４に送り、それによって構成メモリアレイへの書込アクセスを開始する（ステップ１４１５）。ＤＭＡエンジン１２０３は、次にＤＯＮＥフラグを論理「１」の状態にセットする。
【０１２９】
論理「１」ＤＯＮＥフラグを検出すると、プロセッサ１１０３は、装置制御レジスタ１２０４で、ＤＯＮＥフラグを論理「０」の状態にリセットし、書込イネーブル信号（ＷＲ）を論理「１」の値にセットし、開始および終了のアドレス（START_ADDRおよびEND_ADDR）をセットする。開始アドレス（START_ADDR）は、変更されたフレームが始まるデータ側ＯＣＭ１２０１でアドレスを識別するためにセットされ、終了アドレス（END_ADDR）は、変更されたフレームが終了するデータ側ＯＣＭ１２０１でアドレスを識別するためにセットされる。装置制御レジスタ１２０４で論理「１」書込イネーブルエントリ（ＷＲ）を検出すると、ＤＭＡエンジン１２０３は、データ側ＯＣＭ１２０１に記憶される変更されたフレームを内部構成アクセスポート１１０４に送る。応答して、内部構成アクセスポート１１０４は構成データ値の変更されたフレームを構成メモリアレイに再び書込み、この変更された構成データ値のフレームは構成データ値の以前に検索されたフレームを上書きする（ステップ１４１６）。結果として、変更された構成ビットセット１２１１はＭＧＴ１１１１の構成を変更する。ＤＭＡエンジン１２０３は、次にＤＯＮＥフラグを論理「１」の値にセットする。
【０１３０】
論理「１」ＤＯＮＥフラグを検出すると、プロセッサ１１０３は、装置制御レジスタ１２０４で、ＤＯＮＥフラグを論理「０」の状態にリセットし、書込イネーブル信号（ＷＲ）を論理「１」の値にセットし、開始および終了のアドレス（START_ADDRおよびEND_ADDR）をセットする。開始アドレス（START_ADDR）は、書込ビットストリーム終端部が始まるデータ側ＯＣＭ１２０１でアドレスを識別するためにセットされ、終了アドレス（END_ADDR）は、書込ビットストリーム終端部が終了するデータ側ＯＣＭ１２０１でアドレスを識別するためにセットされる。装置制御レジスタ１２０４で論理「１」書込イネーブルエントリ（ＷＲ）を検出すると、ＤＭＡエンジン１２０３は、データ側ＯＣＭ１２０１に記憶される書込ビットストリーム終端部を内部構成アクセスポート１１０４に転送し、それによって内部構成アクセスポート１１０４に構成メモリアレイへの書込アクセスを完了するように指示する（ステップ１４１７）。ＤＭＡエンジン１２０３は、次にＤＯＮＥフラグを論理「１」の値にセットし、処理はステップ１４１１に戻る。ステップ１４１１〜１４１７は、ＭＧＴに対する構成データ値を記憶するすべてのフレームが上述の態様で読出され、変更されかつ書込まれるまで繰返される。上述の例では、構成ビットセット１２１１〜１２１４のすべては、ステップ１４１１〜１４１７を通じた４つのサイクルの後に変更される。このとき、プロセッサ１１０３は出力の結果を書込み、適切なフラグをセットする（ステップ１４０４）。この例では、プロセッサ１１０３は、装置制御レジスタ１２０４で再構成終了フラグ（CONFIG_DONE）を論理「１」の値にセットし、それによってＭＧＴのすべてが適切に再構成されたことを示す。このとき、ＦＰＧＡ１１００は通常の動作を開始する（ステップ１４０５）。
【０１３１】
上述の実施例は、各可能なポート識別値（PORT_ID）に対して５つの構成ビットがデータ側ＯＣＭ１２０１に記憶されることのみを必要とするため、有利である。このことにより、先行技術の仕組みと比較して、部分的な再構成動作のための必要な記憶能力が大きく低減される。さらに、上述の実施例はＦＰＧＡ１１００の論理リソースを過剰に消費せず、既存の内部構成アクセスポート１１０４およびプロセッサ１１０３を使用する。最後に、上述の実施例は、プロセッサ／プログラミングの経験がほとんどないかまたは全くない
ユーザによって容易に実現することができる仕組みを提供する。以下に説明する別の実施例は、プロセッサ／プログラミングの専門知識を有するユーザによって望まれ得る。
【０１３２】
図２６は、この発明の別の実施例によって構成されたＦＰＧＡ１１００のブロック図である。この実施例では、ＦＰＧＡ１１００は、プロセッサ１１０３に結合されるプロセッサローカルバス（ＰＬＢ）１５０１を実現するように構成される。ＰＬＢ１５０１へのアクセスは専用のＰＬＢアービター１５０２によって制御され、これはプロセッサ１１０３に結合される。プロセッサ１１０３を備えたＰＬＢ１５０１およびＰＬＢアービター１５０２の実現は当業者に既知であり、ザイリンクス・インコーポレイテッドから入手可能なVirtex-IITM Pro Platform FPGA Developer's Kitにさらに詳しく説明される。知的財産インターフェイス（ＩＰＩＦ）ブロック１５１１〜１５１４は、さまざまなコントローラをＰＬＢ１５０１に結合できるようにするために使用される。ＩＰＩＦブロック１５１１〜１５１４は、Virtex-IITMPro Platform FPGA Developer's Kitにさらに詳しく説明される。
【０１３３】
ＩＰＩＦブロック１５１１は、同期動的ランダムアクセスメモリ（ＳＤＲＡＭ）コントローラ１５２１をＰＬＢ１５０１に結合するために使用される。ＦＰＧＡ１１００上でＣＬＢを構成することによって実現されるＳＤＲＡＭコントローラ１５２１は、外部ＳＤＲＡＭ１５３１に結合される。以下にさらに詳しく説明されるように、外部ＳＤＲＡＭ１５３１は、ヘッダ、終端部および構成データをブロックＲＡＭ１１２５と同じ態様で記憶するために使用される。
【０１３４】
ＩＰＩＦブロック１５１２は、通信インターフェイス１５２２をＰＬＢ１５０１に結合するために使用される。上述の実施例でＣＬＢによって実現される通信インターフェイス１５２２は、内部または外部の刺激１５３２を受取るように結合される。以下にさらに詳しく説明されるように、内部／外部の刺激１５３２は、ＭＧＴ１１１１〜１１１４が構成されるべき態様を示す情報を提供するために使用される。
【０１３５】
ＩＰＩＦブロック１５１３は、ＩＣＡＰコントローラ１５２３をＰＬＢ１５０１に結合するために使用される。上述の実施例でＣＬＢによって実現されるＩＣＡＰコントローラ１５２３は、ＩＣＡＰ１１０４に結合される。ＩＣＡＰ１１０４は構成論理１１０１に結合され、これは構成メモリアレイに結合される。ＩＰＩＦブロック１５１４は、ビットエラーレートテスタ（ＢＥＲＴ）１５２４をＰＬＢ１５０１に結合するために使用される。ＢＥＲＴ１５２４は、この発明の１つの変形例によるとＭＧＴ１１１３および１１１４に結合される。この実施例では、ＭＧＴ１１１３は、通信チャネル１５３４を介して信号の所定のセットをＭＧＴ１１１４に伝送する。同様に、ＭＧＴ１１１４は、通信チャネル１５３４を介して信号の所定のセットをＭＧＴ１１３に伝送する。
【０１３６】
上述の実施例でＣＬＢによって実現されるブロックＲＡＭコントローラ１５２５は、ブロックＲＡＭ１１２５に結合される。
【０１３７】
図２６のＦＰＧＡ１１００は、次のように動作させることができる。ＦＰＧＡ１１００は、初めに外部メモリ（図示せず）によって提供される構成データ値のベースセットに応答して構成される。この構成は、図２６に示されるＰＬＢ１５０１および関連する論理を実現する。ＦＰＧＡ１１００の残りを構成することに加え、構成データ値のこのベースセットは、所定のベース構成でＭＧＴ１１１１〜１１１４を構成する。
【０１３８】
ＭＧＴ１１１１〜１１１４は、次のように再構成することができる。内部／外部の刺激１５３２は、通信インターフェイス１５２２に再構成命令／値を提供する。一実施例では、内部／外部の刺激１５３２は、図２３に関して上述の態様でＦＰＧＡ１１００のピン上
に提供されるポート識別値（PORT_ID）であり得る。内部／外部の刺激１５３２は、端末プログラム、ネットワーク接続、ホストシェルまたはスイッチなどの外部装置によって実現され得る。またはこれに代えて、内部／外部の刺激１５３２は、プロセッサ制御の連続的なイベント、またはオンチップイベントもしくはテストへの応答に基づく決定および制御などの内部装置によって実現され得る。再構成命令／値を受取る通信インターフェイス１５２２は、たとえば、汎用非同期受信機／送信機（ＵＡＲＴ）であり得る。
【０１３９】
通信インターフェイス１５２２は再構成命令をＩＰＩＦ１５１２に送る。ＰＬＢアービター１５０２の制御の下で、ＩＰＩＦ１５１２は、ＰＬＢ１５０１を介して再構成命令をプロセッサ１１０３に送る。内部／外部の刺激１５３２によって提供される再構成命令に応答して、プロセッサ１０３はＭＧＴ１１１１〜１１１４の部分的な再構成を開始する。この部分的な再構成は次のように実現される。
【０１４０】
まず、プロセッサ１１０３は、外部ＳＤＲＡＭ１５３１またはブロックＲＡＭ１１２５に記憶される再読出ビットストリームヘッダを変更して、ＭＧＴ１１１１〜１１１４の１つ（たとえば、ＭＧＴ１１１１）に対する構成データ値を含む構成メモリアレイ内のフレーム（たとえば、Frame_1）のアドレスを識別する。プロセッサ１１０３は、ＰＬＢ１５０１を介してＳＤＲＡＭ１５３１（またはブロックＲＡＭ１１２５）にアクセスする。プロセッサ１１０３は、次にＳＤＲＡＭ１５３１またはブロックＲＡＭ１１２５に記憶される再読出ビットストリームヘッダが検索されかつ（ＰＬＢ１５０１を介して）内部構成アクセスポート１１０４に送られるようにする。
【０１４１】
内部構成アクセスポート１１０４は、受取られた再読出ビットストリームヘッダコマンドに応答して構成フレーム再読出動作を開始する。結果として、ＭＧＴ１１１１の構成データ値１２１１を含むフレーム（Frame_1）は、構成メモリアレイから検索され、内部構成アクセスポート１１０４に提供される。
【０１４２】
プロセッサ１１０３は、内部構成アクセスポート１１０４から検索されたフレームを（ＰＬＢ１５０１を介して）外部ＳＤＲＡＭ１５３１またはブロックＲＡＭ１１２５に送る。プロセッサ１１０３は、次に外部ＳＤＲＡＭ１５３１またはブロックＲＡＭ１１２５に記憶される選択構成ビット（たとえば、構成ビットセット１２１１）を、これら構成ビットを新しい構成ビットで上書きすることによって変更する。これら新しい構成ビットは、内部／外部の刺激１５３２から受取られた再構成命令に応答して、プロセッサ１１０３によって選択される。これら新しい構成ビットは、関連するＭＧＴ１１１の新しい属性を規定する。
【０１４３】
プロセッサ１１０３は、次に外部ＳＤＲＡＭ１５３１またはブロックＲＡＭ１１２５に記憶される書込ビットストリームヘッダを（ＰＬＢ１５０１を介して）内部構成アクセスポート１１０４に送り、それによって構成メモリアレイへの書込アクセスを開始する。プロセッサ１１０３は、次に外部ＳＤＲＡＭ１５３１またはブロックＲＡＭ１１２５に記憶される変更されたフレームを（再びＰＬＢ１５０１を介して）内部構成アクセスポート１１０４に送る。応答して、内部構成アクセスポート１１０４は、構成データ値の変更されたフレームを構成メモリアレイに再び書込み、この変更された構成データ値のフレームが構成データ値の以前に検索されたフレームを上書きするようにする。結果として、変更された構成ビットセット１２１１はＭＧＴ１１１１の構成を変更する。プロセッサ１１０３は、次に外部１５３１またはブロックＲＡＭ１１２５に記憶される書込ビットストリーム終端部を（ＰＬＢ１５０１を介して）内部構成アクセスポート１１０４に転送し、それによって、内部構成アクセスポート１１０４に構成メモリアレイへの書込アクセスを完了するように指示する。このプロセスは、上述の態様でＭＧＴに対する構成データ値を記憶するフレームのすべてが読出され、変更されかつ書込まれるまで繰返される。ＦＰＧＡ１１
００は、次に通常動作を開始することができる。
【０１４４】
一実施例では、ＢＥＲＴ１５２４は、ＭＧＴ１１１１〜１１１４の特性の適合変更を可能にするために使用することができる。この実施例では、ＭＧＴ１１１１〜１１１４は、上述の態様で所定のベース構成に構成される。プロセッサ１１０３は、（ＰＬＢ１５０１を介して）以下の態様でビットエラーレートテストを作動するようにＢＥＲＴ１５２４に指示する。ＢＥＲＴ１５２４は、通信チャネル１５３４上で所定の差分信号の第１のセットをＭＧＴ１１１３の伝送ポートからＭＧＴ１１１４の受取ポートに伝送する。同様に、ＢＥＲＴ１５２４は、通信チャネル１５３４上で、所定の差分信号の第２のセット（第１のセットと同一であり得る）をＭＧＴ１１１４の伝送ポートからＭＧＴ１１１３の受取ポートに伝送する。ＭＧＴ１１１３および１１１４は、ＢＥＲＴ１５２４に受取られた信号を提供し、これは通信チャネル１５３４のビットエラーレートを決定する。通信チャネル１５３４は、通常動作中にＭＧＴ１１１１〜１１１４によって使用される通信チャネルを表わす。
【０１４５】
ＢＥＲＴ１５２４は、決定されたビットエラーレートをプロセッサ１１０３に報告する。このビットエラーレートが受容できない場合、プロセッサ１１０３は上述の態様でＭＧＴ１１１１〜１１１４を再構成することができ、ビットエラーレートを再テストすることができる。このプロセスは、ＭＧＴ１１１１〜１１１４に対して最適の構成が決定されるまで繰返すことができる。
【０１４６】
上述のもののような適合ループは、図２５の破線１４２０によって示される。この破線１４２０は、ステップ１４０４またはステップ１４０５で部分的な再構成が完了した後、処理がステップ１４０２に戻り得ることを示し、プロセッサ１１０３は（部分的な再構成に応答して変更された）内部／外部の刺激を読出し、応答して別の部分的な再構成を進める。
【０１４７】
この発明の一実施例によると、ＦＰＧＡ１１００は、関連するプロセッサを含むかまたは含まない別のＦＰＧＡの部分的な再構成を制御するために使用することができる。図２７は、別のＦＰＧＡ１６００の部分的な再構成を実現するためにＦＰＧＡ１１００が使用される実施例を示すブロック図である。構成論理１６０１および構成インターフェイス１６０２を含むＦＰＧＡ１６００は、プロセッサを含んでも含まなくてもよい。この実施例では、ＦＰＧＡ１１００は、図２３または図２６に関して上述の態様で構成される。通信チャネル１６５０は、ＦＰＧＡ１１００とＦＰＧＡ１６００との間に設けられる。通信チャネル１６５０は、ＤＭＡエンジン１２０３（図２３）またはＦＰＧＡ１１００のプロセッサローカルバス１５０１（図２６）をＦＰＧＡ１６００の構成インターフェイス１６０２とリンクする。構成インターフェイス１６０２は、ＦＰＧＡ１１００の構成インターフェイス１１０２と実質的に類似である。一実施例では、構成インターフェイス１６０２は、内部構成アクセスポート１１０４と実質的に同一であり、差は内部構成アクセスポート１１０４がユーザ論理を介してアクセスされ、構成インターフェイス１６０２が外部論理を介してアクセスされる点である。
【０１４８】
ＦＰＧＡ１１００は、上述の態様で動作して、ＦＰＧＡ１６００の構成メモリアレイからフレームを読出す（通信チャネル１６５０、構成インターフェイス１６０２および構成論理１６０１を介する）。ＦＰＧＡ１１００は、上述の態様でフレームの選択構成ビットを上書きすることによって、ＦＰＧＡ１６００から検索されたフレームを変更する。なお、フレームはＦＰＧＡ１１００のリソースを使用して変更される。ＦＰＧＡ１１００は、変更されたフレームをＦＰＧＡ１６００に再び書込む（通信チャネル１６５０、構成インターフェイス１６０２および構成論理１６０１を介する）。この実施例は、１つのＦＰＧＡ（たとえば、ＦＰＧＡ１１００）のリソースを１つまたは複数の他のＦＰＧＡ（１６０
０）を部分的に再構成するために使用できるようにするため、有利である。
【産業上の利用可能性】
【０１４９】
上述の機能性は特定のハードウェアおよびソフトウェアの点から一般的に説明されているが、この発明はより広い範囲の利用可能性を有することが認識される。たとえば、ソフトウェアの機能性はさらに組合せてもよいし、または分離してもよい。同様に、ハードウェアの機能性はさらに組合せてもよいし、または分離してもよい。ソフトウェアの機能性は、ハードウェアまたはハードウェアとソフトウェアとの組合せの点から実現可能である。同様に、ハードウェアの機能性は、ソフトウェアまたはハードウェアとソフトウェアとの組合せで実現可能である。
【０１５０】
この発明をいくつかの実施例に関して説明してきたが、この発明は開示される実施例に限定されず、当業者に明らかなさまざまな変形例が可能であることを理解されたい。たとえば、ＦＰＧＡ１１００上に１つのプロセッサのみが示されるが、２つ以上のプロセッサが他の実施例では存在してもよいことが理解される。したがって、この発明は特許請求の範囲によってのみ限定される。
【図面の簡単な説明】
【０１５１】
【図１】従来のＦＰＧＡのブロック図である。
【図２−１】構成メモリアレイの簡略化した概念図である。
【図２−２】構成メモリアレイの簡略化した概念図である。
【図３】先行技術のＩＣＡＰモジュール１２０の図である。
【図４】図３のＩＣＡＰモジュールの入力バスに送られるデータパケットの簡略化したフォーマットの図である。
【図５】この発明の或る実施例のＩＣの自己再構成のためのシステムの簡略化した概略図である。
【図６】この発明の或る局面のＩＣＡＰ制御モジュールのＩＣＡＰ制御レジスタの実現例の図である。
【図７】この発明の好ましい実施例のＩＣの自己再構成のためのシステムの簡略化した概略図である。
【図８】この発明の或る局面のＩＣＡＰを使用するアーキテクチャのブロック図である。
【図９】この発明の一局面による図８のＩＣＡＰ制御モジュールで使用される装置制御レジスタのブロック図である。
【図１０】この発明の一実施例による図８のアーキテクチャの動作のフロー図である。
【図１１】この発明の好ましい実施例のＩＣＡＰ制御モジュールの概略図である。
【図１２】この発明の或る局面のサイクルカウンタに対する制御信号の図である。
【図１３】この発明の或る局面のコンパレータに対する入力および出力の信号の図である。
【図１４】ＩＣＡＰ制御による読出および書込を制御するための有限ステートマシン（ＦＳＭ）の図である。
【図１５】この発明の或る局面の構成メモリアレイデータをＢＲＡＭからＩＣＡＰに書込むＩＣＡＰ制御に対するフローチャートである。
【図１６】この発明の代替の実施例のＩＣＡＰ制御モジュールの概略図である。
【図１７】この発明の或る局面の階層間アーキテクチャの図である。
【図１８】setModule()関数によって構成メモリアレイ上で古い場所から新しい場所に移動されるモジュールの例の図である。
【図１９】copyModule()関数によって構成メモリアレイ上で古い場所から新しい場所にコピーされるモジュールの例の図である。
【図２０】この発明の或る実施例の共有リソースへのアクセスを制御するためにセマフォーを使用するマルチプロセッサシステムのブロック図である。
【図２１】この発明の或る局面の共有リソースを使用しようとする２つのプロセッサに対するイベントおよび時間の図である。
【図２２】従来のＦＰＧＡのブロック図である。
【図２３】この発明の一実施例による内部構成アクセスポート制御モジュールのブロック図である。
【図２４】この発明の一実施例による図２３の内部構成アクセスポート制御モジュールで使用される装置制御レジスタのブロック図である。
【図２５】この発明の一実施例による内部構成アクセスポート制御モジュールの動作を規定するフロー図である。
【図２６】この発明の別の実施例による部分的な再構成を実現するように構成されるＦＰＧＡのブロック図である。
【図２７】別のＦＰＧＡの部分的な再構成を実現するために図２３または図２６のＦＰＧＡが使用される実施例を示すブロック図である。
【図１】
0004500772.tif 000008
【図２−１】
0004500772.tif 000009
【図２−２】
0004500772.tif 000010
【図３】
0004500772.tif 000011
【図４】
0004500772.tif 000012
【図５】
0004500772.tif 000013
【図６】
0004500772.tif 000014
【図７】
0004500772.tif 000015
【図８】
0004500772.tif 000016
【図９】
0004500772.tif 000017
【図１０】
0004500772.tif 000018
【図１１】
0004500772.tif 000019
【図１２】
0004500772.tif 000020
【図１３】
0004500772.tif 000021
【図１４】
0004500772.tif 000022
【図１５】
0004500772.tif 000023
【図１６】
0004500772.tif 000024
【図１７】
0004500772.tif 000025
【図１８】
0004500772.tif 000026
【図１９】
0004500772.tif 000027
【図２０】
0004500772.tif 000028
【図２１】
0004500772.tif 000029
【図２２】
0004500772.tif 000030
【図２３】
0004500772.tif 000031
【図２４】
0004500772.tif 000032
【図２５】
0004500772.tif 000033
【図２６】
0004500772.tif 000034
【図２７】
0004500772.tif 000035