(57)【要約】【課題】集積回路（「ＩＣ」）におけるルーティング回路網を提供すること。【解決手段】上記ルーティング回路網は、複数のルーティングラインを含む垂直チャンネルと、複数のルーティングラインを含む水平チャンネルと、複数の選択可能な入力と複数の出力とを含む第１の単一レベル選択回路スイッチアレイとを含み、該第１の単一レベル選択回路スイッチアレイは、該垂直チャンネルおよび該水平チャンネルからの入力を受け取り、かつ、第１の論理領域の複数の論理要素の入力と、該垂直チャンネルおよび該水平チャンネルのうちの少なくとも１つのルーティングワイヤとへの出力を提供するように結合されている。【選択図】図１
2018098514.tif 000002
【特許請求の範囲】
【請求項１】
明細書に記載された発明。
【発明の詳細な説明】
【背景技術】
【０００１】
（背景）
抵抗スイッチング要素（例えば、導電性ブリッジを用いる電解要素）は、プログラム可能な要素を有する集積回路（「ＩＣ」）において一般的に見られる構成ランダムアクセスメモリ（「ＣＲＡＭ」）およびパスゲートトランジスタスイッチの代わりとして提案されている。このようなＩＣの一例は、フィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）である。抵抗スイッチング要素は、必ずしも導電性ブリッジデバイスに限定されず、本明細書に使用される用語「抵抗スイッチ」および「プログラム可能な抵抗スイッチ」は、概して、高インピーダンスモード（ここで、抵抗要素が基本的にＯＦＦ状態のスイッチとして動作する）と、低インピーダンスモード（ここで、抵抗要素が基本的にＯＮ状態のスイッチとして動作する）とを含む少なくとも２つのモードのうちの一方で動作するように構成され得る抵抗要素を指す。
【０００２】
過去のＦＰＧＡルーティング構造において、さまざまなレベルの選択回路（例えば、マルチプレクサーまたは「ｍｕｘ」）は、メインルーティングライン（例えば、論理領域（例えば、倫理アレイブロックまたは「ＬＡＢ」）に広がる水平および垂直のチャンネルのライン）間において信号をルーティングさせるために使用されており、論理要素は、各ＬＡＢの中に入力する。例えば、いくつかの構造において、ＬＡＢ内の第１のレベルのｍｕｘ（時には、ＬＡＢ入力ｍｕｘまたは「ＬＩＭ」と呼ばれる）は、サブセットのルーティングラインから信号を選択するようにプログラムされ得、そしてＬＩＭによって選択されるサブセットのラインは、第２のレベルのｍｕｘ（時には、論理要素入力ｍｕｘまたは「ＬＥＩＭ」と呼ばれる）をプログラムすることによって選択され得る。別個のｍｕｘ（時には、ドライバー入力ｍｕｘまたは「ＤＩＭ」と呼ばれる）は、論理要素から出力を選択し、その出力をルーティングラインドライバーに出力および提供する。いくつかの実装において、ＤＩＭは、ローカルＬＡＢ出力から入力を選択することに加えて、他のルーティングラインから入力も選択し得る。
【０００３】
選択回路（例えば、前述のＬＩＭ、ＬＥＩＭ、ＤＩＭ）のためのプログラム可能なスイッチは、しばしば、パスゲートトランジスタに結合されるＣＲＡＭ要素を用いて実装されており、ＣＲＡＭ要素は、「１」または「０」を保持し、トランジスタがオンかまたはオフであるように制御する。
【０００４】
選択回路をプログラムするためであり、かつ、論理要素をプログラムすることに用いられるＣＲＡＭ要素は、典型的に、ＦＰＧＡのプログラミング領域にわたるプログラマブルアレイを含む。典型的な実装において、アレイは、一度に１列がプログラムされる。プログラミングサイクル中、１列が（アドレスレジスタ内のアドレスデータに基づいて）選択され、データレジスタ要素内にロードされている行のプログラミングデータが、選択された列のＣＲＡＭ要素内に移動される。プログラミング領域内において、ＣＲＡＭ全体の列は、単一のクロックサイクルでプログラムされ、このようなプログラミングは、比較的に低電力を要求する。列は、アドレスレジスタと連携して、単一のドライバーを用いて選択される。
【０００５】
ＣＲＡＭ要素および関連のパスゲートトランジスタのダイコストが与えられると、存在するルーティング構造は、典型的に、そのＬＡＢの論理リソース内のＬＡＢの付近の小さいサブセットのルーティングリソースのみに潜在的な接続を提供する。例えば、いくつかの実装において、ＬＡＢに隣接する水平および垂直のチャンネルの実質的に全てのルーティングラインがそのＬＡＢのＬＩＭ入力に接続されるが、ＬＡＢのＬＩＭスイッチ集団は、可能なＬＩＭ入力−出力接続の約５％のみ提供する。
【発明の概要】
【課題を解決するための手段】
【０００６】
本発明の実施形態は、本明細書において記載される。
【０００７】
（要約）
実証回路は、数百またはさらに数千個の抵抗スイッチを含むように実装されてきたが、プログラム可能な抵抗スイッチの特定の使用を行うフィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）は、要素の数に関して、今まで実装された実証回路に含まれた要素の数より数桁も多い抵抗スイッチアレイを利用し得る。抵抗スイッチアレイに基づくこのようなＦＰＧＡは、これまでに実装されていない。
【０００８】
前のＦＰＧＡに使用された構成ランダムアクセスメモリ（「ＣＲＡＭ」）要素とパストランジスタスイッチとの組み合わせと対照的には、抵抗スイッチは、かなり小さいという利点を提示する。また、それらは、プロセススタックにおいて高に設置され得、効率的にダイの上の追加のエリアを消費しない。それゆえ、ＦＰＧＡ内に密に分布された大量の抵抗スイッチを用いることは効率的である。これは、ルーティングリソースと論理要素との間のかなりより高いパーセンテージの潜在的な接続が、プログラム可能な選択に対して利用可能であることを可能にし得る。一局面において、本発明の実施形態は、単一レベルのプログラム可能な選択回路網を用いて論理領域（例えば、論理アレイブロックまたは「ＬＡＢ」内の論理要素）の内外へのルーティングを提供する。一実施形態において、単一レベルのプログラム可能な選択回路網は、任意の入力が任意の出力に対して選択され得る単一選択アレイを含む。別の実施形態において、単一レベルのプログラム可能な選択回路網は、２つ以上の並列の選択アレイを含む。この実施形態の１つの変更において、１組のルーティングリソースのうちの一部（全部ではない）は、２つ以上の並列の選択アレイの各々に提供される。一実施形態において、論理領域の２つのサイド上のルーティングチャンネルは、単一レベルのプログラム可能な選択回路網への入力を提供し、論理領域の３つのサイド上のルーティングチャンネルは、プログラム可能な選択回路網を介して論理領域からの出力を受け取る。
【０００９】
ＦＰＧＡの抵抗スイッチ（選択回路網に対して使用される抵抗スイッチ、および論理要素に対して使用される抵抗スイッチ）は、プログラミング回路網に結合された抵抗スイッチの大きなアレイの一部分であり得る。大きい抵抗スイッチアレイをプログラムすることは、ＣＲＡＭ要素のアレイをプログラムする場合に存在しない課題を示す。抵抗スイッチは、十分な時間期間に対して電流を抵抗要素に通過させることによってオンである（本明細書において「オンにプログラムされる」または単に「プログラムされる」と呼ばれる）ようにプログラムされる。大きい負荷は、特に、大きな数のスイッチが同じ列内において「オンにプログラムされる」べきである場合、プログラミングに対して使用された列ライン上において生じ得る。このような負荷は、列ラインプログラミングドライバーからより遠い行の抵抗スイッチへの接続に対する電圧落下と共に、列ラインに沿う不均一な電圧を引き起こし得る。これは、結果としてこのようなスイッチをプログラムするために要求されるより長いプログラミング時間を生じ得る。
【００１０】
本発明の一実施形態において、プログラミング回路が提供されることにより、プログラムされるべき列が、ＦＰＧＡのプログラミング領域内の複数の論理領域内のローカル列ドライバーに結合される。１つの変更において、ローカル領域内の各ローカル列プログラミングドライバー（それがローカル列ラインを駆動する）は、供給電圧を提供するローカル領域電力バッファに結合される。
【００１１】
別の実施形態において、行または列プログラミングドライバーは、電流ソースドライバーを含む。例えば、電圧ソースプログラミングドライバーがプログラミング電圧を列ラインに提供するために使用される実施形態において、行ライン上のプログラミングドライバーとして電流ソースドライバーを用いることは、たとえ抵抗スイッチがさらに列ラインの下方にあっても、それらのスイッチを通る均一な電流を維持することを助け得、従って、列ラインからより低い電圧レベルを受け取り得る。
【００１２】
別の実施形態において、方法および関連のコンピュータプログラム製品は、１つ以上のプログラミングベクトルを用いるプログラミングスイッチを提供されることにより、プログラムされるべき全列のスイッチが、必要に応じて、複数のプログラミングサイクルにわたるステップにおいてプログラムされる。一実施形態において、特定の電力制約は、プログラミングベクトルを決定することの一部分として使用される。特定の実施形態において、方法は、どの行がオンにプログラムされるかに依存して変更する制約に対して電力コストを考慮する場合、ベクトルの数を減少させるように適合可能である。
本願明細書は、例えば、以下の項目も提供する。
（項目１）
集積回路（「ＩＣ」）におけるルーティング回路網であって、該ルーティング回路網は、
複数のルーティングラインを含む垂直チャンネルと、
複数のルーティングラインを含む水平チャンネルと、
複数の選択可能な入力と複数の出力とを含む第１の単一レベル選択回路スイッチアレイと
を含み、
該第１の単一レベル選択回路スイッチアレイは、該垂直チャンネルおよび該水平チャンネルからの入力を受け取り、かつ、第１の論理領域の複数の論理要素の入力と、該垂直チャンネルおよび該水平チャンネルのうちの少なくとも１つのルーティングワイヤとへの出力を提供するように結合されている、ルーティング回路網。
（項目２）
上記第１の単一レベル選択回路スイッチアレイは、上記第１の論理領域の上記複数の論理要素の出力からの入力を受け取るようにさらに結合されている、上記項目に記載のルーティング回路網。
（項目３）
上記第１の単一レベル選択回路スイッチアレイは、第２の論理領域の複数の論理要素の出力からの入力を受け取るようにさらに結合されている、上記項目のいずれかに記載のルーティング回路網。
（項目４）
上記単一レベル選択回路スイッチアレイは、抵抗スイッチアレイを含む、上記項目のいずれかに記載のルーティング回路網。
（項目５）
上記単一レベル選択回路スイッチアレイは、抵抗スイッチアレイを含む、上記項目のいずれかに記載のルーティング回路網。
（項目６）
上記抵抗スイッチアレイは、上記複数の出力のうちのいずれかに対して、上記複数の選択可能な入力のうちのいずれかの選択可能な入力を選択するようにプログラム可能である、上記項目のいずれかに記載のルーティング回路網。
（項目７）
上記抵抗スイッチアレイは、上記複数の出力のうちのいずれかに対して、上記複数の選択可能な入力のうちのいずれかの選択可能な入力を選択するようにプログラム可能である、上記項目のいずれかに記載のルーティング回路網。
（項目８）
上記複数の論理領域のうちの上記論理領域に対して、複数の選択可能な入力と複数の出力とを含む第２の単一レベル選択回路スイッチアレイをさらに含み、
上記第１の単一レベル選択回路スイッチアレイは、上記垂直チャンネルの上記複数のルーティングラインの第１の部分と、上記水平チャンネルの上記複数のルーティングラインの第１の部分とからの入力を受け取るように結合されており、
該第２の単一レベル選択回路スイッチアレイは、該垂直チャンネルの該複数のルーティングラインの第２の部分と、該水平チャンネルの該複数のルーティングラインの第２の部分とからの入力を受け取るように結合されている、上記項目のいずれかに記載のルーティング回路網。
（項目９）
上記垂直チャンネルの上記複数のルーティングラインの上記第１の部分は、該垂直チャンネルの該複数のルーティングラインの上記第２の部分にも含まれている一部のルーティングラインを含み、
上記水平チャンネルの上記複数のルーティングラインの上記第１の部分は、該垂直チャンネルの該複数のルーティングラインの該第２の部分にも含まれている一部のルーティングラインを含み、
上記第１の単一レベル選択回路スイッチアレイは、上記第１の論理領域の上記複数の論理要素の第１の部分の入力と、該垂直チャンネルおよび該水平チャンネルのルーティングワイヤの第１の部分とへの出力を提供するように結合されており、
上記第２の単一レベル選択回路スイッチアレイは、該第１の論理領域の該複数の論理要素の第２の部分の入力と、該垂直チャンネルおよび該水平チャンネルのルーティングワイヤの第１の部分とへの出力を提供するように結合されている、上記項目のいずれかに記載のルーティング回路網。
（項目１０）
複数の選択可能な入力と複数の出力とを含む第２の単一レベル選択回路スイッチアレイをさらに含み、
上記第１の単一レベル選択回路スイッチアレイは、上記垂直チャンネルの上記複数のルーティングラインの第１の部分と、上記水平チャンネルの上記複数のルーティングラインの第１の部分とからの入力を受け取るように結合されており、
該第２の単一レベル選択回路スイッチアレイは、該垂直チャンネルの該複数のルーティングラインの第２の部分と、該水平チャンネルの該複数のルーティングラインの第２の部分とからの入力を受け取るように結合されており、
該第２の単一レベル選択回路スイッチアレイは、上記第１の論理領域の上記複数の論理要素と、上記第２の論理領域の上記複数の論理要素とからの入力を受け取るように結合されている、上記項目のいずれかに記載のルーティング回路網。
（項目１１）
上記垂直チャンネルの上記複数のルーティングラインの上記第１の部分は、該垂直チャンネルの該複数のルーティングラインの上記第２の部分にも含まれている一部のルーティングラインを含み、
上記水平チャンネルの上記複数のルーティングラインの上記第１の部分は、該垂直チャンネルの該複数のルーティングラインの該第２の部分にも含まれている一部のルーティングラインを含む、上記項目のいずれかに記載のルーティング回路網。
（項目１２）
上記項目のいずれかに記載のルーティング回路網を含むフィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）。
（項目１３）
上記項目のいずれかに記載のＦＰＧＡを含むデータ処理システム。
（項目１４）
抵抗スイッチのアレイをプログラムするためのプログラミング回路網であって、該抵抗スイッチのアレイのうちの１つの抵抗スイッチは、列ラインおよび行ラインに結合されており、該プログラミング回路網は、
それぞれの列ラインに結合されている複数の列ラインプログラミングドライバーと、
それぞれの行ラインに結合されている複数の行ラインプログラミングドライバーと
を含み、
該複数の列ラインプログラミングドライバーのうちの１つの列ラインプログラミングドライバーと、該複数の行ラインプログラミングドライバーのうちの１つの行ラインプログラミングドライバーとは、オンにプログラムされるべきである抵抗スイッチにわたる電圧差を提供するように動作可能であり、
該列ラインプログラミングドライバーおよび該行ラインプログラミングドライバーのうちの一方は、電流ソースドライバーを含み、該列ラインプログラミングドライバーおよび該行ラインプログラミングドライバーのうちの他方は、電圧ソースドライバーを含む、プログラミング回路網。
（項目１５）
複数の行プログラミングデータレジスタであって、該複数の行プログラミングデータレジスタのうちの１つの行プログラミングデータレジスタは、１つの行プログラミング信号を上記行ラインプログラミングドライバーに提供するために、上記複数の行ラインプログラミングドライバーのうちの１つの行ラインプログラミングドライバーに結合されている、複数の行プログラミングデータレジスタと、
複数の列アドレスレジスタであって、該複数の列アドレスレジスタのうちの１つの列アドレスレジスタは、１つの列選択信号を上記列ラインプログラミングドライバーに提供するために、上記複数の列ラインプログラミングドライバーのうちの１つの列ラインプログラミングドライバーに結合されている、複数の列アドレスレジスタと
をさらに含む、上記項目のいずれかに記載のプログラミング回路網。
（項目１６）
上記電流ソースドライバーは、オンにプログラムされるべきである抵抗スイッチにわたる電圧差をプログラミング電圧レベルに制限するように適合されている、上記項目のいずれかに記載のプログラミング回路網。
（項目１７）
上記列ラインプログラミングドライバーおよび上記行ラインプログラミングドライバーは、該列ラインプログラミングドライバーと該行ラインプログラミングドライバーとの間に電圧差を提供するように適合されており、該電位差は、上記プログラミング電圧レベルより大きい、上記項目のいずれかに記載のプログラミング回路網。
（項目１８）
上記列プログラミングドライバーは、電圧ソースドライバーを含み、
上記行プログラミングドライバーは、電流ソースイネイブルトランジスタに結合された電流ソースドライバーを含み、
上記列プログラミング信号が高である場合、該電流ソースイネイブルトランジスタは、該列プログラミングドライバーに結合された列ライン上において電流をイネイブルするために、オンであるように制御される、上記項目のいずれかに記載のプログラミング回路網。
（項目１９）
上記プログラミング回路網は、
第１のローカル領域電力バッファに結合された第１の複数のローカル列プログラミングドライバーであって、該第１のローカル領域電力バッファは、該第１の複数のローカル列プログラミングドライバーのうちの各ローカル列プログラミングドライバーに供給電圧を提供するように動作可能である、第１の複数のローカル列プログラミングドライバーと、
第２のローカル領域電力バッファに結合された第２の複数のローカル列プログラミングドライバーであって、該第２のローカル領域電力バッファは、該第２の複数のローカル列プログラミングドライバーのうちの各ローカル列プログラミングドライバーに供給電圧を提供するように動作可能である、第２の複数のローカル列プログラミングドライバーと
を含む、上記項目のいずれかに記載のプログラミング回路網。
（項目２０）
上記項目のいずれかに記載のプログラミング回路網を含むフィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）。
（項目２１）
上記項目のいずれかに記載のＦＰＧＡを含むデータ処理システム。
（項目２２）
抵抗スイッチのアレイをプログラムするためのプログラミング回路網であって、該プログラミング回路網は、
第１のローカル領域電力バッファに結合された第１の複数のローカル列プログラミングドライバーであって、該第１のローカル領域電力バッファは、該第１の複数のローカル列ドライバーのうちの各ローカル列プログラミングドライバーに供給電圧を提供するように動作可能であり、該第１の複数のローカル列プログラミングドライバーのうちの１つのローカル列プログラミングドライバーは、複数の抵抗スイッチに結合された列ラインを駆動するように結合されている、第１の複数のローカル列プログラミングドライバーと、
第２のローカル領域電力バッファに結合された第２の複数のローカル列プログラミングドライバーであって、該第２のローカル領域電力バッファは、該第２の複数のローカルプログラミング列ドライバーのうちの各ローカル列ドライバーに供給電圧を提供するように動作可能であり、該第２の複数のローカル列プログラミングドライバーのローカル列プログラミングドライバーは、複数の抵抗スイッチに結合された列ラインを駆動するように結合されている、第２の複数のローカル列プログラミングドライバーと
を含む、プログラミング回路網。
（項目２３）
複数の列アドレスレジスタをさらに含み、該複数の列アドレスレジスタのうちの１つの列アドレスレジスタは、上記第１の複数のローカル列プログラミングドライバーのうちの１つのローカル列プログラミングドライバーと、上記第２の複数のローカル列プログラミングドライバーのうちの１つのローカル列プログラミングドライバーとに結合されている、上記項目のいずれかに記載のプログラミング回路網。
（項目２４）
上記ローカル列プログラミングドライバーは、電圧ソースドライバーを含み、上記プログラミング回路網は、
複数の行プログラミングドライバーをさらに含み、該複数の行プログラミングドライバーのうちの１つの行プログラミングドライバーは、行プログラミングデータ信号に応答して、選択された列の抵抗スイッチをプログラムするように、結合された行ラインに結合されている、上記項目のいずれかに記載のプログラミング回路網。
（項目２５）
上記行プログラミングドライバーは、電圧ソースドライバーを含む、上記項目のいずれかに記載のプログラミング回路網。
（項目２６）
上記電圧ソースドライバーは、グラウンドへの接続を含む、上記項目のいずれかに記載のプログラミング回路網。
（項目２７）
上記行プログラミングドライバーは、電流ソースドライバーを含む、上記項目のいずれかに記載のプログラミング回路網。
（項目２８）
上記項目のいずれかに記載のプログラミング回路網を含むフィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）。
（項目２９）
上記項目のいずれかに記載のＦＰＧＡを含むデータ処理システム。
（項目３０）
抵抗スイッチアレイの電力制約共有領域の中の抵抗スイッチの列をプログラムする方法であって、該方法は、
第１のプログラミングサイクル中、１つ以上の抵抗スイッチをオンにプログラムする電力コストが、プログラミングサイクル中のオンプログラミングスイッチに対する電力制約を超過しない場合、オンにプログラムされるべき該１つ以上の抵抗スイッチをプログラムすることと、
該第１のプログラミングサイクルの後に、任意の抵抗スイッチがオンにプログラムされるように残っている場合（「残りスイッチ」）、１つ以上の後のプログラミングサイクル中に該残りスイッチをプログラムすることと
を含む、方法。
（項目３１）
上記電力制約共有領域は、複数のローカル電力領域を含み、該電力制約は、該電力制約共有領域に対する全部の電力消費についての少なくとも１つの制限と、該複数のローカル電力領域のうちの１つのローカル電力領域内のローカル電力消費についての１つの制限とを含む、上記項目のいずれかに記載の方法。
（項目３２）
特定の抵抗スイッチをオンにプログラムする電力コストは、上記列内の該特定の抵抗スイッチの位置に依存する、上記項目のいずれかに記載の方法。
（項目３３）
上記抵抗スイッチの列をプログラムするためのプログラミングビットの１つ以上のプログラミングベクトルは、
（ｉ）該列の抵抗スイッチをプログラムするためのプログラミングベクトルに未だ加えられていないオンプログラミングビットを識別すること（「残りのオンプログラミングビット」）と、
（ｉｉ）該残りのオンプログラミングビットの第１のオンプログラミングビットをテストして、該第１のオンプログラミングビットを現存のプログラミングベクトルに加えることが、上記電力制約に違反するか否かを決定し、違反しない場合、該第１のオンプログラミングビットを該現存のプログラミングベクトルに加えることと、
（ｉｉｉ）未だテストされていない該残りのオンプログラミングビットのオンプログラミングビットがあるか否かを決定し、ある場合、ステップ（ｉＶ）に進み、ない場合、ステップ（Ｖｉ）に進むことと、
（ｉＶ）該残りのオンプログラミングビットの次のオンプログラミングビットをテストして、該次のオンプログラミングビットを現存のプログラミングベクトルに加えることが、該電力制約に違反するか否かを決定し、違反する場合、ステップ（ｉｉｉ）に進み、違反しない場合、ステップ（Ｖ）に進むことと、
（Ｖ）該次のオンプログラミングビットを該現存のプログラミングベクトルに加えて、ステップ（ｉｉｉ）に進むことと、
（Ｖｉ）ステップ（ｉｉｉ）がない場合、該現存のプログラミングベクトルを出力することと、
（Ｖｉｉ）ステップ（ｉ）において識別された該オンプログラミングビットの全てがプログラミングベクトルに加えられた場合、該抵抗スイッチの列をプログラムするための追加のプログラミングベクトルの生成を停止させ、そうでない場合、ステップ（ｉｉ）に戻ることと
によって決定される上記項目のいずれかに記載の方法。
（項目３４）
一時的でないコンピュータ読み取り可能なストレージ媒体内の実行可能な命令コードを含むコンピュータプログラム製品であって、該実行可能な命令コードは、少なくとも、
集積回路（「ＩＣ」）の抵抗スイッチのアレイ内の抵抗スイッチの列におけるオンにプログラムされるべき抵抗スイッチに対応する行プログラミングデータの列内のプログラムされるべきビットを識別することと、
プログラミングサイクル中に電力制約に違反することなしに、該ＩＣの１つ以上のプログラミングサイクル中に該識別されたビットをプログラムするために、１つ以上のプログラミングベクトルを決定することと
のためのものである、コンピュータプログラム製品。
（項目３５）
上記実行可能な命令コードは、少なくとも、プログラムされるべき特定のビットが、所定の電力制約に違反することなしに、現存のプログラミングベクトルに加えられ得るか否かを決定するように、プログラムされるべき上記識別されたビットのビットバイビットテストのためのものでもある、上記項目のいずれかに記載のコンピュータプログラム製品。（項目３６）
上記抵抗スイッチの列の特定の行内の抵抗スイッチをプログラムする電力コストは、行によって変化し、上記実行可能な命令コードも、少なくとも、最も高い電力コスト行に対応するビットから、最も低い電力コスト行に対応するビットへの順番でプログラムされるべき上記識別されたビットの上記ビットバイビットテストを管理するためのものである、上記項目のいずれかに記載のコンピュータプログラム製品。
（摘要）
さまざまな構造および方法が、プログラム可能な抵抗スイッチのアレイを有する集積回路（「ＩＣ」）上のルーティングおよびプログラミング回路網に関連して開示される。いくつかの実施形態において、ルーティング構造は、論理領域の内外へルーティングする効率的な選択回路を提供するために、密に分布された抵抗スイッチアレイを利用する。他の実施形態において、プログラミング回路網は、プログラムされるべき抵抗スイッチのアレイを通して比較的に一定のプログラミング電流を維持することを助けるように提供される。他の実施形態において、方法は、所与の電力制約に違反することなしに、抵抗スイッチをプログラムすることを提供される。これらの実施形態および他の実施形態は、本明細書においてさらに説明される。
【００１３】
これらの実施形態および他の実施形態は、以下により具体的に記載される。例示の目的のみのために、本発明の特定の実施形態のいくつかの局面は、以下の図面を参照することによって説明される。
【図面の簡単な説明】
【００１４】
【図１】図１は、本発明の実施形態に従う集積回路（「ＩＣ」）の一部分のルーティングおよび論理回路網を例示する。
【図２】図２は、図１の論理アレイブロック（「ＬＡＢ」）のうちの１つのためのルーティング回路網のさらなる詳細を例示する。
【図３】図３は、図２の選択回路スイッチのさらなる詳細を例示する。
【図４】図４は、図２に例示されたルーティング回路網に対する代替的な実施形態を例示する。
【図５】図５は、本発明の実施形態に従う、複数のローカルプログラミング領域にわたって抵抗スイッチをプログラムするためのプログラミング回路網の高レベル図を例示する。
【図６】図６は、本発明の実施形態に従う、抵抗スイッチのグリッドをプログラムするための回路網のさらなる詳細を例示する。
【図７】図７は、抵抗スイッチをプログラムするためのプログラミングベクトルを生成するための方法を例示する。方法は、本発明の実施形態に従う。
【図８】図８は、所与の電力制約を考慮して、図７の方法に適用される抵抗スイッチの列をプログラムするために生成されたサンプルプログラミングベクトルを例示するテーブルである。
【図９】図９は、別の所与の電力制約を考慮して、図７の方法に適用される抵抗スイッチの列をプログラムするために生成されたサンプルプログラミングベクトルを例示し、かつ、抵抗スイッチが存在する行に依存する異なる電力コストを説明する別のテーブルである。
【図１０】図１０は、本発明の実施形態に従う回路網を有するフィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）を含む例示的なデータ処理システムを例示する。
【図１１】図１１は、コンピュータプログラム製品に含まれた命令コードを実行するために使用され得るコンピュータの例を示し、コンピュータプログラム製品は、本発明の実施形態に従う。
【発明を実施するための形態】
【００１５】
（詳細な説明）
以下の説明は、当業者が本発明を行い、使用することを可能に提示され、かつ、特定の用途およびその条件と関連して提供される。例示的な実施形態へのさまざまな変更は、当業者にとって容易に理解され、本明細書に規定される一般的原理は、本発明の精神および範囲から逸脱することなしに、他の実施形態および用途に適用され得る。従って、本発明は、示される実施形態に限定されるように意図されず、むしろ、本明細書において開示される原理および特徴と一致する最も広い範囲を認められるべきである。
【００１６】
図１は、本発明の実施形態に従う集積回路（「ＩＣ」）の一部分１０００のルーティングおよび論理回路網を例示する。ルーティング回路網は、垂直チャンネル１０１−Ｖ０、１０１−Ｖ１および１０１−Ｖ２と、水平チャンネル１０１−Ｈ０とを含む。特定の実施形態において、これらのチャンネルの各々は、チャンネル全体の長さより短い複数のワイヤを含み得、交互にずらされ得る開始ポイントおよび終了ポイントを有する。ＩＣ部分１０００は、ＬＡＢ１０、ＬＡＢ１１およびＬＡＢ１２を含む論理アレイブロック（「ＬＡＢ」）として配列された論理領域も含む（用語「ＬＡＢ」が、概して、論理領域自身（論理要素のグループ）とその論理領域と関連付けられたルーティングインターフェースとを含むことを留意する）。この例において、例示の目的のみのために、各垂直チャンネルは、１００本の個々の垂直ルーティングラインを含み、例示された水平チャンネルは、２００本の水平ラインを含む。各チャンネルの中の垂直および水平ルーティングラインは、複数のＬＡＢに及ぶ。出力ライン１０４−０および１０４−１は、隣接する論理領域の間において信号を局所的に運ぶために示される。例えば、ライン１０４−０は、ＬＡＢ１０からＬＡＢ１１への信号経路を提供し、ライン１０４−１は、ＬＡＢ１１からＬＡＢ１２への信号経路を提供する。
【００１７】
図２は、図１のＬＡＢ１１のためのルーティング回路網のさらなる詳細を例示する。図２に例示されるように、ＬＡＢ１１は、選択回路スイッチアレイ２０１と論理要素２０２とを含む。用語「選択回路」は、入力と出力とを選択的に接続するように適合可能な任意の回路を広く指すことを留意する。時には、用語「マルチプレクサー」または「ｍｕｘ」は、任意の入力を１つ以上の出力にマッピングし得る回路を指すように本明細書において使われる。当分野におけるいくつかの用法の下で、「ｍｕｘ」は、単一出力を有し、かつ、多数の入力の間で選択する選択回路を指すようにより厳密に規定される（「ｄｅｍｕｘ」は、単一の入力を有し、かつ、多数の出力の間で選択する選択回路とする）。その意味において、用語ｍｕｘは、本明細書において若干より広く使われ、時には、クロスバースイッチと呼ばれることを含み（しかしながら、アレイのように構成されない一部のｍｕｘが必ずしも技術的にクロスバースイッチではなく、従って、特定のクロスバースイッチが、本明細書に使われるその用語のように、単に１つのタイプのｍｕｘが考えられ得る）、しかしながら、ｍｕｘは、概して、入力より少ない出力を有し得、その一方で、クロスバースイッチは、同数の入力および出力を有し得る（しかしながら、クロスバースイッチも、入力より少ない出力を有し得る）。本発明の最も広い局面における精神および範囲に関連しないこのような定義の争点を避けるために、用語「ｍｕｘ」がたまに特定の例を説明するために使われるが、より広い用語「選択回路」は、概して、本発明の実施形態を規定するために使われる。
【００１８】
選択回路スイッチアレイ２０１は、１５５個の出力のうちの任意の１つ（またはより多い）に対して３４０個の入力のうちの任意の１つを選択するように構成され得る。例示されるように、スイッチアレイ２０１への入力は、垂直チャンネル１０１−Ｖ１における１００本の垂直ルーティングラインからの１００個の入力と、水平チャンネル１０１−Ｈ０の２００本のルーティングラインからの２００個の入力と、（図１の隣接するＬＡＢ１０からの）２０個の出力１０４−０からの２０個の入力と、論理要素２０２（示されていない個々の論理要素）からの出力を提供する２０本のワイヤ１０３からの２０個の入力とを含む。選択回路スイッチアレイ２０１は、ルーティングワイヤ１０１に対する入力ドライバーに７５個の出力を提供し（この例において、ルーティングワイヤ１０１が、水平チャンネル１０１−Ｈ０におけるいくつかのワイヤと、図１に例示された垂直チャンネル１０１−Ｖ１におけるいくつかのワイヤとを含む）、論理要素２０２の入力に８０個の出力を提供する。特に、水平および垂直チャンネルの各々が論理長４のワイヤを含む場合（すなわち、４つのＬＡＢに及ぶ）、ワイヤの総数（２００本の水平チャンネルワイヤおよび１００本の垂直チャンネルワイヤ、すなわち、３００本の全ワイヤ）の１／４、または７５本のワイヤは、各ＬＡＢ場所において駆動される必要がある。
【００１９】
この特定の実施形態において例示されるように、選択回路スイッチアレイ２０１は、その入力とその出力との間において１つのレベルの信号選択のみが発生するので、「単一レベル」の選択回路であると見なされる。言い換えると、１５５個の出力は、最終選択の前に、最初の入力の中間選択をもたらすために、直列に結合される２つ以上の異なる選択回路を用いることなしに、３４０個の入力から選択される。例えば、反対の例として、選択回路が、直列の２つの選択回路（例えば、３４０個の入力から２２５個の出力を選択した第１の回路と、２２５個の第１の回路出力から１５５個の出力を選択した第２の回路と）の組み合わせによって代替的に実装された場合、そのような組み合わせられた選択回路は、単一レベルの選択回路ではなく、２つのレベルの選択回路と見なされ得る。
【００２０】
図３は、図２の選択回路スイッチアレイ２０１のさらなる詳細を例示する。特に、スイッチアレイ２０１は、３０１０，０から３０１３３９，１５４まで番号付けられた複数の抵抗スイッチ３０１を含む（この例において、全５２，７００個のスイッチがある）。各スイッチ３０１は、（特定のｍｕｘ入力に対する）入力ドライバー３２１を（特定のｍｕｘ出力に対する）出力ドライバー３２２に結合する。入力が特定の出力に対して選択されるか否かは、入力を出力に結合するスイッチ３０１がオン（本明細書において「オンにプログラムされる」または単に「プログラムされる」と呼ばれる）であるようにプログラムされるか否かに依存する。例えば、ＯＵＴ０に対してＩＮ０を選択するために、スイッチ３０１０，０がオンにプログラムされ、ＯＵＴ１に対してＩＮ２を選択するために、スイッチ３０１２，１がオンにプログラムされ、ＯＵＴ１５４に対してＩＮ３３９を選択するために、スイッチ３０１３３９，１５４がオンにプログラムされる。各行および各列のプログラミング回路は、図３において別々に示されていない。
【００２１】
図４は、図２に例示されたＬＡＢの代替的な実施形態であるＬＡＢを例示する。特に、図４は、選択回路スイッチアレイ４０１Ａおよび４０１Ｂを含むＬＡＢ１１’を例示する。例示されるように、スイッチアレイ４０１Ａは、ＬＡＢ１１’の論理要素４０２の２０個の出力からの入力と、隣接するＬＡＢ１０の論理要素出力のうちの２０個からの入力と、Ｈチャンネル１０１−Ｈ０の２００本のワイヤのうちの１２０本からの入力と、Ｖチャンネル１０１−Ｖ１の１００本のワイヤのうちの６０本からの入力とを受け取る。同様に、スイッチアレイ４０１Ｂは、ＬＡＢ１１’の論理要素４０２の２０個の出力からの入力と、隣接するＬＡＢ１０の論理要素出力のうちの２０個からの入力と、Ｈチャンネル１０１−Ｈ０の２００本のワイヤのうちの１２０本からの入力と、Ｖチャンネル１０１−Ｖ１の１００本のワイヤのうちの６０本からの入力とを受け取る。
【００２２】
例示された例において、ＬＡＢ１１’の論理要素４０２からの同じ２０個の論理要素出力は、スイッチアレイ４０１Ａとスイッチアレイ４０１Ｂとの両方に提供される。同様に、隣接するＬＡＢ１０からの同じ２０個の論理要素出力は、スイッチアレイ４０１Ａとスイッチアレイ４０１Ｂとの両方に提供される。重なっているが、同一ではないグループのＨチャンネル１０１−Ｈ０からのラインは、スイッチアレイ４０１Ａおよび４０１Ｂの入力に提供される。特に、この例において、Ｈチャンネルラインは、１０１−Ｈ００から１０１−Ｈ０１９９まで番号付けられたラインを含む。ライン１０１−Ｈ００−１９９が、スイッチアレイ４０１Ａの入力に提供され、ライン１０１−Ｈ０８０−１９９が、スイッチアレイ４０１Ｂの入力に提供される。同様に、重なっているが、同一ではないグループのＶチャンネル１０１−Ｖ１からのラインは、スイッチアレイ４０１Ａおよび４０１Ｂの入力に提供される。特に、この例において、Ｖチャンネルラインは、１０１−Ｖ１０から１０１−Ｖ１９９まで番号付けられたＶチャンネルラインを含む。ライン１０１−Ｖ１０−５９が、スイッチアレイ４０１Ａの入力に提供され、ライン１０１−Ｖ１４０−９９が、スイッチアレイ４０１Ｂの入力に提供される。
【００２３】
スイッチアレイ４０１Ａは、ルーティングワイヤに結合されたドライバーの入力への３７個の出力と、論理要素４０２の入力への４０個の出力とを提供する。スイッチアレイ４０１Ｂは、ルーティングワイヤに結合されたドライバーの入力への３８個の出力と、論理要素４０２の入力への４０個の出力とを提供する。
【００２４】
特定の文脈において、最適な実装を選択するための設計考慮は、図２の実施形態に対して図４の実施形態の利益とコストとを比較することによって例示される。所与のスイッチアレイに対して、スイッチの数は、出力の数によって増加された入力の数と等しい。それゆえ、図４の実施形態は、並列に配列された２つのより小さいスイッチアレイを提供することによって、全体的によりの少ない数のスイッチを可能にする。特に、図４のアレイは、図２の実施形態に要求される数より約３５％少ない数である、全部で（２２０）（７７）＋（２２０）（７８）＝３４，１００個のスイッチを用いて実装され得る。
【００２５】
しかしながら、図４の配列において、各スイッチアレイ（４０１Ａおよび４０１Ｂ）が、異なるセットのリソースへの出力を提供し、ＶチャンネルおよびＨチャンネルのルーティングリソースのうちの一部（ただし、全部ではない）が、両方のスイッチアレイへの入力として提供されるので、選択されることができないいくつかの接続がある。しかしながら、いくつかのリソースは、両方のスイッチアレイに接続されている。特定の例において、前述のように、ＬＡＢ１１’にルーティングされる、２００本のＨチャンネルラインのうちの４０本（ライン１０１−Ｈ０８０−１１９）は、スイッチアレイ４０１Ａとスイッチアレイ４０１Ｂとの両方の入力に提供される。同様に、ＬＡＢ１１’にルーティングされる、１００本のＶチャンネルラインのうちの２０本（ライン１０１−Ｖ１４０−５９）は、スイッチアレイ４０１Ａとスイッチアレイ４０１Ｂとの両方の入力に提供される。多数のルーティング入力（ＶラインおよびＨラインの入力のうちの一部、並びにＬＡＢ１１’およびＬＡＢ１０におけるＬＥ出力からの全ての入力）は、スイッチアレイ４０１Ａとスイッチアレイ４０１Ｂの両方に提供され、これらの２つのスイッチアレイは、合わせて全部で、図２の実施形態のスイッチアレイ２０１の入力の数（全部で３４０個の入力）より多い数の入力（全部で２２０＋２２０＝４４０個の入力）を有する。これは、結果としてプログラムされる必要があるより多い数の列を生じさせ（図３から理解され得るように、より多い全部の入力が、より多い全列の抵抗スイッチを要求し得る）、従って、より多い数の列プログラミングドライバー（列プログラミングドライバーが図５の文脈においてさらに議論される）は、生じるプログラミンググリッドをプログラムする必要がある（ここで、用語「スイッチアレイ」がＩＣの動作モードにおける特定の選択回路の文脈と呼ばれるが、図５〜９の文脈においてより詳細に説明されるように、個々の選択回路スイッチアレイのスイッチが、プログラムされるべきより大きいアレイのスイッチの一部分であることを留意する）。
【００２６】
抵抗スイッチ自身は、ＩＣ上において消費される空間の観点から、極めて低コストである。それゆえ、図２の実施形態は、それが特定のリソースの間に接続オプションの数を増加するので、多くの実装にとって魅力的である。しかしながら、プログラミング抵抗スイッチが、（図５〜９の文脈においてさらに説明されるように）大幅な電力を要求するので、いくつかの実装において、利用できない論理領域に出入りするいくつかのリソース接続を有する消費においてスイッチの全数を限定する利点があり得る。図４の実施形態は、１つの例を提供する。しかしながら、単一のＬＡＢに対して２つ以上の平行のアレイを含む代替的な実施形態は、本発明の精神および範囲から逸脱することなしに、図４に例示された例よりもより大きいかよりも小さい程度のルーティングリソース−ＬＡＢ接続の重なり（または非重なり）を提供し得る。
【００２７】
図５は、本発明の実施形態に従う、複数のローカルプログラミング領域にわたって抵抗スイッチをプログラムするためのプログラミング回路網の高レベル図を例示する。特に、図５は、ローカルＬＡＢ領域１１０および１２０の一部分を例示する。ローカルＬＡＢ領域１１０は、ＬＡＢ０、ＬＡＢ１、ＬＡＢ２、ＬＡＢ３およびＬＡＢ４を含む。同様に、ローカルＬＡＢ領域１２０は、ＬＡＢ５、ＬＡＢ６、ＬＡＢ７、ＬＡＢ８およびＬＡＢ９を含む。例示の簡単さのために、図５は、ローカル領域に及ぶＬＡＢの１つの列のみを例示する。抵抗スイッチ３０１は、複数の列の抵抗スイッチを形成するように配列され、各列の抵抗スイッチは、ローカル領域内において、列ラインドライバー３１１によって駆動される列ライン３１４に結合される。アドレス制御は、ライン３１６上において、追加の回路網を介して、アドレスレジスタＣ０、Ｃ１、Ｃ２、Ｃ３（各々が、プログラムされるべき抵抗スイッチのアレイの列に対応する）、および別々に示されていない他のアドレスレジスタを制御するように提供される。特定の列の抵抗スイッチがプログラムされるべきであるとき、列選択プログラミング信号は、アドレスレジスタから、その特定の列に提供され、プログラミング電圧は、列ラインドライバー３１１によって列ライン３１４上に提供される。プログラミング制御信号は、ライン３１３ａおよび３１３ｂ上に提供される。ライン３１３ａ上の信号は、アドレスレジスタを制御し、ライン３１３ｂ上の信号は、選択された列に対して、プログラミングドライバー３１１によって列ライン３１４上に駆動されたプログラミング電圧をイネイブルする。
【００２８】
プログラミング電圧は、それぞれのライン３１８およびローカル列ドライバー３１１を介してそれぞれの列ライン３１４に送達される。ローカル領域電力バッファ３１２は、ライン３１７にわたって送達された供給電圧のローカルバッファリングまたは調整を提供して、ローカルプログラミング領域１１０および１２０の各ローカル列ドライバー３１１に供給電圧を提供する。例示された態様でプログラミング電圧信号および供給電圧のローカルバッファリングを提供することによって、十分なプログラミング電圧レベルは、プログラミング領域内の抵抗スイッチの全列に沿って全ての抵抗スイッチをプログラムするために維持され得る。
【００２９】
図６は、抵抗スイッチのグリッドをプログラムするための回路網のさらなる詳細を例示する。特に、抵抗スイッチのより大きいグリッドの（図５において示された）４×４部分６００は、以下にさらに説明されるように、例示されるスイッチを含む行および列をプログラムするための行および列のプログラミング回路網と共に示される。
【００３０】
例示されたプログラミング回路網は、各行に対する行ドライバー回路３６０を含む。各行ドライバー回路３６０は、電流ソースドライバー３６１とイネイブルトランジスタ３６２とを含む。行データレジスタＲ０、Ｒ１、Ｒ２、およびＲ３も例示される。プログラミング動作の間、これらのレジスタの各々は、その特定の行のスイッチが「オンにプログラムされる」べきであるか否かを示す「１」かまたは「０」のプログラミングビットでロードされる。例えば、行データレジスタＲ２が「１」でロードされる場合（すなわち、２進法の高電圧信号レベルがいくつであっても）、プログラミングサイクルの間、その信号は、レジスタＲ２が結合されるイネイブル３６２のゲートに適用される。次に、これは、対応する電流ソースドライバー３６１を対応する行ライン３２４上において電流を駆動させる。
【００３１】
プログラミング中、アドレスレジスタ（例えば、Ｃ０、Ｃ１、Ｃ２、Ｃ３）のうちの１つのデータは、プログラミングサイクルの間にプログラムするために選択されるべき列を示す。選択された列に対して、対応する列ライン３１４のドライバー３１１は、選択された列ライン３１４上において（プログラムされるべき列において）高電圧を駆動する。例えば、列アドレスレジスタＣ１の値は、その列が選択されることを示し、高い値は、列Ｃ１の列ライン３１４（例示されるように、ローカル領域１１０のライン３１４およびローカル領域１２０のライン３１４）およびその行の列の抵抗スイッチ上において駆動され、その列の列データレジスタは、プログラミングサイクル（例えば、列レジスタＲ２に対応する列の抵抗スイッチ）がオンにプログラムされることに対して「１」を保持している。特に、選択された列に対するローカル列プログラミングドライバーおよび行プログラミングドライバーは、オンにプログラムされるべき抵抗スイッチに結合され、これらのドライバーは、抵抗スイッチにわたってプログラミング電圧差を維持するように動作する。
【００３２】
例示された実施形態において、列ライン３１４は、特に、多くの抵抗スイッチが単一の列ラインに結合される場合、および、そのスイッチのうちの多くのが同じプログラミングサイクルにおいてオンにプログラムされるように選択される場合、プログラミングの間に大きな負荷を経験し得る。それゆえ、ラインに沿う電圧レベルが変化し得、ローカルプログラミングドライバー３１１からの距離が増大すると、電圧レベルは、列ラインに沿ってポイントにおいて減少する。この理由で、１つの局面において、本発明の実施形態は、列プログラミングドライバー回路３６０の一部分として電流ソース３６１（電圧ソースではない）を使用する。これは、たとえ列ラインに沿って提供される電圧レベルが変化しても、より一定の電流がオンにプログラムされるべきである各抵抗スイッチを通って流れることを維持することを助ける。これは、列ラインに沿う落下を補償するために、ドライバーにおいてより大きい電圧差を提供することを可能にし、その一方で、オンにプログラムされるべきスイッチにわたる電圧差およびそのスイッチを通る電流を適切なレベルに制限する。例えば、一実施形態において、列ドライバーと行ドライバーとの間に提供された電圧差は、プログラミング電圧より大きい。しかしながら、列を駆動する電流ソースは、オンにプログラムされるべきである抵抗スイッチをわたる電圧を適切なプログラミング電圧レベルに制限し、その抵抗スイッチを通る電流を適切なプログラミング電流レベルに制限する。
【００３３】
本実施形態において、電圧ソースプログラミングドライバーは、列ラインを駆動するために提供され、電流ソースプログラミングドライバーは、行ラインを駆動するために提供される。しかしながら、本発明のこの局面に一致する代替的な実施形態において、電流ソースプログラミングドライバーが列ライン上に提供され得、電圧ソースドライバーが行ライン上に提供され得る。さらに、いくつかのこのような代替物において、電圧列プログラミングドライバーは、単に、グラウンドへの接続であり得るか、または列ライン上に「低」電圧値を提供する他の手段であり得る。
【００３４】
さらに、本発明の他の局面に整合するいくつかの実装において、行プログラミングドライバーと列プログラミングドライバーとの両方は、電圧ソースドライバーを含み得、行プログラミングドライバーおよび列プログラミングドライバーのうちの一方が、高電圧ソースを提供し、他方が低電圧ソースを提供する。例えば、プログラミング領域が図５の実施形態に例示されるように、ローカルプログラミング領域に分割される場合、各列ラインは、十分に少数の抵抗スイッチをプログラムするために使用され得、十分に均一なプログラミング電圧が、行プログラミングドライバーまたは列プログラミングドライバーに対する電流ソースを用いることなしにラインの長さに沿って維持され得る。
【００３５】
本発明の実施形態の局面が抵抗スイッチの行および列、並びに論理領域の行および列の文脈で説明される（例えば、「水平」ルーティングが、概して、行の方向にルーティングし、「垂直」ルーティングが、複数の列に及び、そして／または列の方向にルーティングするように方向付けされる）が、行および列の述語は、デバイスの方向付けに対するものであるので、単に９０度でデバイスを回転することによって用語、行および列を互換し得る。さらに、用語「行」および「列」が、一般的に、アイテムの直線配列と関係付けられるが、代替的な実施形態は、本発明の精神および範囲から逸脱することなしに、曲げられ、または部分的に曲げられるか、または時折のジョッグまたはギャップを有するか、またはＩＣの全領域に及ばない行または列の配列を使用し得る。
【００３６】
図７は、本発明の実施形態と一致する方法７００を例示する。抵抗スイッチが、プログラミングを達成するための大きい電力レベルを要求するので、各プログラミングサイクルに対して電力制約を実装することが望ましい場合がある。次に、これは、結果として、いくつの抵抗スイッチが単一のプログラミングサイクルにおいてオンにプログラムされ得るかの制限を生じ得、それゆえ、抵抗スイッチの単一列をプログラムするための複数のサイクルが要求され得る。方法７００は、このようなプログラミングサイクル電力制約が必要であるか、または望ましい場合、抵抗スイッチアレイのプログラミングを達成するためのステップを提供する。
【００３７】
本明細書に使われるように、用語「プログラミングベクトル」は、１つ以上の電力制約が適用される領域（このような領域が「電力制約共有領域」と呼ばれる）内において抵抗スイッチの列をプログラムするプログラミングサイクルの間に用いられる列レジスタ内にロードされるべき１組のプログラミングデータ値を意味する。図５の実施形態を参照して、列は、複数のローカル領域に及び得、従って同じ列内において複数の列ラインに沿う抵抗スイッチを含み得る。図７に例示された方法の文脈、および図８〜９に例示されたサンプルプログラミングベクトルにおいて、簡単な説明のために、プログラミングベクトルは、特定の行のスイッチがオンにプログラムされるべきである場合、「１」を含み、スイッチがオンにプログラムされるべきである場合、「０」を含むと仮定される。プログラミングサイクルに対する電力レベルは、概してオンにプログラムされるべきスイッチの数に依存し、従ってプログラミングベクトルの中の「１」ビットは、特定のプログラミングサイクルの全電力コストに影響を与え得る。フィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）をプログラムするための典型的な従来技術の方法において、構成要素の列（それが、必ずしもではなく、しばしば、静的ランダムアクセスメモリまたは「ＳＲＡＭ」セルとして実装される）は、単一のプログラミングクロックサイクルでプログラムされる（低プログラミングデータが低データレジスタ要素内にロードされたと仮定する）。それとは対照的に、方法７００は、必要な所与の電力制約および複数のベクトルが複数のプログラミングサイクルの中に単一の列のスイッチをプログラムするために使用され得る。
【００３８】
ステップ７０１は、電力制約共有領域の列においてプログラムされるべき１組のビットを決定する。ステップ７０２は、現存のプログラミングベクトルを０ｓに初期化し、方法のこの部分が、０ｓのみを含むように最初に仮定されるプログラミングデータのベクトルで開始することを意味する。方法が進むと、さらに説明されるように、これが電力制約に違反していない場合、プログラミングベクトルの０ｓのうちのいくつかが１ｓに設定される。ステップ７０３は、プログラムされるべきビットの第１の１ビットを選択する（当業者は、時には、本明細書において「１ビット」が、この文脈において便宜のために、単に「ビット」と呼ばれるが、技術的に、他の文脈において、「ビット」が、その値が１かまたは０であるビットと呼ばれることを理解することを留意する）。プログラミング抵抗スイッチの電力コストが行によって変化する場合、プログラムされるべきビット（すなわち、１ビット）（すなわち、プログラムされるべき抵抗スイッチに対応するビット）は、最も高いコストのビットから最も低いコストのビットへの順番でテストされるべきである（これは、図９の文脈および添付のテキストにおいてさらに説明される）。ステップ７０４は、選択されるビットが（結果として対応する抵抗スイッチをオンにプログラムすることをもたらす）事前に決定される電力制約に違反し得ることをプログラムするか否かを決定する。肯定の場合、方法は、プログラムされるべきビットの中にテストするビットがさらにあるか否かを決定するステップ７０６に進む。ステップ７０４の結果が否定の場合、方法は、ステップ７０５に進み、選択されるビットは、プログラミングベクトルに加えられる（すなわち、プログラミングベクトルの中のその行に対する「０」が「１」に変更される）。また、ビットは、プログラムされるべきビットから除去される（プログラムされるべきビットの中の「１」が「１」から「０」へ変更される）。方法は、ステップ７０６へ進み、ステップ７０６は、先に説明されるように、未だテストされていない列の中にプログラムされるべきビットがさらにあるか否かを決定する。
【００３９】
ステップ７０６の結果が肯定の場合、方法は、ステップ７０７に進み、テストへの次の１ビットが選択され（次の最も高いコストのビットをとると、図９の文脈においてさらに説明されるように、電力コストが行によって変化する場合）、方法は、ステップ７０４に戻る。ステップ７０６の結果が否定の場合、方法は、プログラミングベクトルを出力するステップ７０８に進む。ステップ７０９は、プログラムされるべき１ビットがさらにあるか否かを決定する。肯定の場合、方法は、ステップ７０２に戻って追加のプログラミングベクトルを生成することを開始する。否定の場合、方法は、ステップ７１０において終了する。ステップ７１０が到達されると、１つ以上のプログラミングベクトルが生成され、それは、全列をプログラムするために使用され得る。
【００４０】
図８は、特定の電力制約の下で、方法７００を実行することから生じるプログラミングベクトルの例を例示するためのテーブル８００を示す。テーブル８００において例示されるベクトルを生成すことに適用される電力制約は、２つの簡単な線形制約がある。ルール１は、２つ以下のユニット（概念的な説明の目的のための一般的なユニット）の電力コストが、ローカルプログラミング領域（図５の例示の文脈において、それが、ローカルプログラミング領域（領域１１０または領域１２０）のうちの１つ内において単一のローカル列ライン３１４に沿うスイッチを指し得る）内において列のサイクルごとに発生され得ることである。ルール２は、グローバル制約であり、それは、５つ以下のユニットの電力コストが、全電力制約共有領域（図５の文脈において、グローバル列ライン３１７によって供給される領域）内においてサイクルごとに発生され得ることである。図８において例示されたサンプルの文脈において、任意の行の抵抗スイッチをプログラムすることが１ユニットのコストを有すると仮定される。
【００４１】
図８の例は、適用可能な電力制約共有領域内の４つのローカル領域を仮定し、簡潔および説明の容易さのみのために、各ローカル列領域は、１０行のスイッチを含むように仮定される（実際の実装が、単一のローカル領域内のより多くの行のスイッチを含み得、より多く、またはより少ないローカル領域を含み得る）。特に、図８は、第１のローカル領域８０（行Ｒ０−Ｒ９）、第２のローカル領域８１（行Ｒ１０−Ｒ１９）、第３のローカル領域８２（行Ｒ２０−Ｒ２９）、および第４のローカル領域８３（行Ｒ３０−Ｒ３９）を仮定する。
【００４２】
テーブル８００の列８０１は、プログラムするべきサンプルの組のビットを例示する。示されるように、行Ｒ１、Ｒ２、Ｒ４、Ｒ６、Ｒ７、Ｒ１０、Ｒ１４、Ｒ１５、Ｒ１８、Ｒ２２、Ｒ２５、Ｒ２６、Ｒ２７、Ｒ３１、およびＲ３９の抵抗スイッチがオンにプログラムされるべきである。テーブル８００の列８０２において示されるように、方法７００を適用することおよび上記参照された電力制約（ルール１：ローカル領域ごとに２つのユニットという最大コスト、およびルール２：全プログラミング領域に対する合計が５つのユニットという最大コスト）が、初期プログラミングベクトル（「ベクトル１」）を生成する。ベクトル１は、行Ｒ１、Ｒ２、Ｒ１０、Ｒ１４、およびＲ２２のビットをプログラムする。方法７００を適用することにおいて、潜在的にベクトル１に加えるために「プログラムするビット」を評価するために、行Ｒ１およびＲ２のビットは、最初に、ルール１またはルール２に違反しないように、テストおよび発見され得、従ってベクトル１に加えられ得る。しかしながら、行Ｒ４、Ｒ６、およびＲ７のビットがテストされる場合、それらは、ルール１の電力制約に違反し、従ってベクトル１に加えられない。同様に、行Ｒ１０およびＲ１４のビットは、ベクトル１に加えられることができるが、行Ｒ１８およびＲ１９のビットは加えられない。行Ｒ２２のビットは、ベクトル１に加えられることができるが、ルール２の制限が到達され（全部で５ビット）、従って他のテストされるビットのいずれもが、電力制約に合格することもベクトル１に加えられることもできない。
【００４３】
ベクトル１が決定された後に、テーブル８００の列８０３において例示されるように、オンにプログラムされるべき残りのオンプログラミングビットは、行Ｒ４、Ｒ６、Ｒ７、Ｒ１５、Ｒ１８、Ｒ２５、Ｒ２６、Ｒ２７、Ｒ３１、およびＲ３９にある。ルール１およびルール２の制約を適用し続け、かつ、図７の方法を用いることは、行Ｒ４、Ｒ６、Ｒ１５、Ｒ１８、およびＲ２５のビットが第２のベクトル（テーブル８００の列８０４に示される「ベクトル２」）に加えられることを可能にする。ベクトル２が決定された後に、テーブル８００の列８０５において例示されるように、プログラムされるべき残りのオンプログラミングビットは、行Ｒ７、Ｒ２６、Ｒ２７、Ｒ３１、およびＲ３９にある。ルール１およびルール２の制約を適用し続け、かつ、図７の方法を用いることは、行Ｒ７、Ｒ２６、Ｒ２７、Ｒ３１、およびＲ３９のビットが第３のベクトル（テーブル８００の列８０６に示されるベクトル３）に加えられることを可能にする。ベクトル３が決定された後に、テーブル８００の列８０７において例示されるように、プログラムされるべき残りのオンプログラミングビットはもうない。従って、ベクトル１、ベクトル２、およびベクトル３は、３つのプログラミングサイクルにおいて列をプログラムするために使用され得る。
【００４４】
図９は、所与の特定の電力制約の下で方法７００を実行することから生じるプログラミングベクトルの別の例を例示するテーブル９００を示す。簡潔さのために、図９に例示された例は、単一のローカル列領域を示し、唯一の電力制約はローカルであると仮定する。特に、図９の例は、３つのユニットの全電力コストが各プログラミングサイクルに対して発生され得ると仮定する。しかしながら、図８の例が、抵抗スイッチをプログラムする電力コストが各行で同じであると仮定したが、図９の例は、列プログラミングドライバーからより離れた行において電力コストが増大すると仮定し、それが、プログラミングワイヤに沿った電圧降下に近似し得る。コストは、１＋ｉ／１０の形式であると仮定され、ここで「ｉ」が行番号である。
【００４５】
テーブル９００の列９０１は、各行をプログラムするコストを示す。列９０２は、プログラムされるべきビットが行Ｒ１、Ｒ２、Ｒ４、Ｒ５、Ｒ７、およびＲ８にあることを示す。方法７００を適用すると、最初に行Ｒ８がテストされる。最初に最もコストのかかる行をテストすることは、より高価な行を安価な行とより効率的にペアリングする可能性を可能にし、それは、いくつかの場合において、（列をプログラムする必要がある）ベクトル（従ってプログラミングサイクル）の全数が、減少されることを可能にし得る。テーブル９００の列９０３によって示されるように、方法７００を用いて、最もコストのかかる行から最もコストのかからない行へ行をテストすることは、結果としてＲ８およびＲ２がプログラムされるベクトル１を生じさせる。
【００４６】
ベクトル１が生成された後に、テーブル９００の列９０４において示されるように、プログラムされるべき残りのビットは、行Ｒ１、Ｒ４、Ｒ５、およびＲ７にある。電力制約（ベクトルごとに３つのユニットのコスト以下）および方法７００を適用し続けることは、結果として列９０５において示されるように、ベクトル２を生じさせる。ベクトル２は、行Ｒ１およびＲ７をプログラムする。ベクトル２が生成された後に、列９０６において示されるように、プログラムされるべき残りのビットは、行Ｒ４およびＲ５にある。これらのビットのコストが全部で２．９のユニットであるので、これらは、列９０７に示されるように、１つの追加のベクトル（ベクトル３）でプログラムされ得る。列９０８に示されるように、ベクトル３が生成された後に、それ以上のプログラムされるべきオンプログラミングビットもう残っていない。
【００４７】
本明細書に例示されたプログラマブル抵抗スイッチおよび関連のルーティングおよびプログラミング回路網は、任意のＩＣの一部分として実装され得る。ＩＣの具体的な例は、ＦＰＧＡである。ＦＰＧＡ（プログラマブル論理デバイス（（「ＰＬＤ」）、複合ＰＬＤ、プログラマブルアレイ論理、プログラマブル論理アレイ、フィールドＰＬＡ、消去可能なＰＬＤ、電気的に消去可能なＰＬＤ、論理セルアレイ、または他の名称で呼ばれる）カスタムＩＣの柔軟性を有する固定ＩＣの利点を提供する。ＦＰＧＡは、プログラムまたは再プログラムされ得る構成要素（すなわち、プログラム可能な要素）を有する。新しいデータを構成要素内に設置することは、ＦＰＧＡの論理機能および関連のルーティング経路をプログラムまたは再プログラムする。このような構成は、ＩＣ上のプログラム可能な要素に格納されたデータを介して完成され得る。プログラム可能な要素は、動的または静的ＲＡＭ、フリップフロップ、電気的に消去可能でプログラム可能な読み取り専用メモリ（ＥＥＰＲＯＭ）セル、フラッシュ、ヒューズ、アンチヒューズプログラム可能な接続、または他のメモリ要素を含み得る。構成はまた、ＩＣの動作中、ＩＣによって受け取られた１つ以上の外部に生成された信号を介して完成され得る。このような信号によって表されたデータは、ＩＣの動作中、ＩＣに格納される場合もされない場合もある。構成はまた、ＩＣの製造中、マスクプログラミングを介して完成され得る。マスクプログラミングがすでにリストされたフィールドプログラマブルオプションのうちのいくつかに対して不利点を有し得るが、それは、特定の高容量用途において有用であり得る。
【００４８】
図１０は、ＦＰＧＡ１０１０を含む例示的なデータ処理システム１０００を例示する。ＦＰＧＡ１０１０は、本明細書の図１〜６において例示された実施形態の原理に従う抵抗スイッチ１００１と、プログラミングおよびルーティング回路網（図１０において別個に示されていない）を含むプログラム可能な回路網を含む。
【００４９】
データ処理システム１０００は、以下の追加のコンポーネント：プロセッサ１０４０、メモリ１０５０、入力／出力（Ｉ／Ｏ）回路網１０２０、並びに周辺デバイス１０３０および／または他のコンポーネントのうちの１つ以上を含み得る。これらのコンポーネントは、システムバス１０６５によって一緒に結合され、エンドユーザーシステム１０７０内に含まれる回路ボード１０６０上において分布される。このようなシステム１０００のデータ処理システムは、エンドユーザーシステム１０７０のような単一のエンドユーザーシステムを含み得、またはデータ処理システムのような一緒に動作する複数のシステムを含み得る。
【００５０】
システム１０００は、幅広い用途（例えば、コンピュータネットワーキング、データネットワーキング、器具、ビデオ処理、デジタル信号処理、または、システム設計においてプログラマブルまたは再プログラマブル論理を用いる利点が望ましい任意の他の用途）において使用され得る。ＦＰＧＡ１０１０は、さまざまな異なる論理機能を実行するために使用され得る。例えば、ＦＰＧＡ１０１０は、プロセッサ１０４０と協働して動作するプロセッサまたはコントローラとして構成され得る（または、代替的な実施形態において、ＦＰＧＡは、自身で単独のシステムプロセッサとして機能し得る）。ＦＰＧＡ１０１０はまた、システム１０００の共有リソースへのアクセスを仲裁するためのアービターとしても使用され得る。なお別の実施形態において、ＦＰＧＡ１０１０は、プロセッサ１０４０と、システム１０００の他のコンポーネントうちの１つとの間のインターフェースとして構成され得る。システム１０００が例示のみであることを留意されるべきである。
【００５１】
図１１は、本発明の実施形態に従う、コンピュータプログラム製品１１６０に含まれる命令コードを実行するために使用され得るコンピュータシステム１１００の例を示す。コンピュータプログラム製品１１６０は、図７の例示的な方法７００を完成する処理を実行するために、１つ以上のコンピュータ（例えば、コンピュータシステム１１００）に命令し得る電気的に読み取り可能な媒体内の実行可能なコードを含む。電気的に読み取り可能な媒体は、電気的に情報を格納する任意の一時的でない媒体であり得、例えば、ネットワーク接続を介してローカルまたは遠隔にアクセスされ得る。媒体は、複数の地理的に分散された媒体を含み得、その複数の媒体の各々が、異なる場所および／または異なる時間で実行可能なコードの異なるパーツを格納するように構成される。電気的に読み取り可能な媒体内の実行可能な命令コードは、本明細書において説明されたさまざまな例示的タスクを実行するように、例示されたコンピュータシステム１１００に指令する。本明細書に説明されたタスクの実行を指令するための実行可能なコードは、ソフトウェアにおいて典型的に実現され得る。しかしながら、コンピュータまたは他の電子デバイスが、本明細書から逸脱することなしに、識別されたタスクのうちの多数または全部を行うために、ハードウェアにおいて実現されたコードを利用し得ることは、当業者によって認識される。例えば、本明細書のプログラマブル方法を実行するための論理のうちの一部分は、ＦＰＧＡまたはプログラムされるべき他のＩＣ、または比較構成メモリデバイス上の構成コントローラ内においてハードウェアで実現され得る。当業者は、実行可能なコード上の多くの変更が見つけられ得、それが本発明の精神および範囲内において例示的な方法を実装することを理解する。
【００５２】
コンピュータプログラム製品１１６０に含まれたコードまたはコードのコピーは、プロセッサ１１２０による実行のために、メモリ１１１０に格納され得る。コンピュータシステム１１００は、Ｉ／Ｏサブシステム１１３０および周辺デバイス１１４０も含む。Ｉ／Ｏサブシステム１１３０、周辺デバイス１１４０、プロセッサ１１２０、およびメモリ１１１０は、バス１１５０を介して結合される。
【００５３】
当業者は、コンピュータシステムが、単に、本発明の実施形態に従うコンピュータプログラム製品が実装され得るシステムの１つの例を例示することを認識する。しかしながら、代替的な実施形態の１つの例を引用するように、本発明の実施形態に従うコンピュータプログラム製品に含まれる命令の実行は、例えば、分散されたコンピューティングネットワークのコンピュータにわたるように複数のコンピュータにわたって分散され得る。
【００５４】
（追加の実施形態）
集積回路（「ＩＣ」）は、複数の論理領域と信号を論理領域に出入りするルーティングするルーティング手段とを含む。ＩＣは、抵抗スイッチのアレイをプログラムするプログラミング回路網手段を含む。
【００５５】
本発明が例示された実施形態に対して特に説明されたが、さまざまな代替物、変更および適合は、本開示に基づいてなされ得、本発明の範囲内にあるように意図されることが認識される。本発明が、ここで最も実践可能で好ましい実施形態であるように考慮されるものと関連して説明されたが、本発明は、開示された実施形態に限定されるではなく、以下の特許請求の範囲のみによって限定されることが理解されるべきである。
【符号の説明】
【００５６】
１０００  集積回路の一部分
１０１−Ｈ０  水平チャンネル
１０１−Ｖ０、１０１−Ｖ１、１０１−Ｖ２  垂直チャンネル
１０４−０、１０４−１  出力ライン
ＬＡＢ  倫理アレイブロック
【図１】
2018098514.tif 000003
【図２】
2018098514.tif 000004
【図３】
2018098514.tif 000005
【図４】
2018098514.tif 000006
【図５】
2018098514.tif 000007
【図６】
2018098514.tif 000008
【図７】
2018098514.tif 000009
【図８】
2018098514.tif 000010
【図９】
2018098514.tif 000011
【図１０】
2018098514.tif 000012
【図１１】
2018098514.tif 000013