(57)【特許請求の範囲】
【請求項１】
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を部分的に構成するための方法であって、前記ＦＰＧＡは、多数のアドレス線および多数のデータ線対により接続された構成可能論理ブロック（ＣＬＢ）の配列を有し、前記方法は、
少なくとも１本のアドレス線でアドレス指定された１つ以上の第１のＣＬＢを再構成するステップと、
同時に、前記アドレス線によりアドレス指定された第２のＣＬＢの再構成を防ぐステップとを含む、方法。
【請求項２】
再構成を防ぐ前記ステップは、第１のＣＬＢに接続された相補のデータ線対に第１のデータ値を、および第２のＣＬＢに接続された相補のデータ線対に第２のデータ値を与えることによって、選択的に第１のＣＬＢを再構成するステップを含む、請求項１に記載の方法。
【請求項３】
前記ＦＰＧＡはさらに複数のマスク線を有し、前記マスク線の各々はデータ線対のうち少なくとも１本により用いられ、前記再構成するステップは、第１のデータ値を受取るべきデータ線対と関連づけられたマスク線に第１の値を与えるステップと、第２のデータ値を受取るべきデータ線対と関連づけられたマスク線に第２の値を与えるステップとを含む、請求項１に記載の方法。
【請求項４】
前記ＦＰＧＡはさらに、前記マスク線の各々と関連づけられたレジスタを含み、前記レジスタは、関連づけられたマスク線に対応する行を構成すべきかどうかを示すマスクビットを記憶する、請求項３に記載の方法。
【請求項５】
前記ＦＰＧＡはさらに、前記少なくとも１本のアドレス線の各々について複数のローカルアドレス線と、アドレス線を対応するローカルアドレス線に接続するためのロジックとを有し、前記再構成するステップは、前記ローカルアドレス線のうち１本以上を選択することによって、第２のＣＬＢにアクセスすることとは独立に第１のＣＬＢにアクセスするステップを含む、請求項１に記載の方法。
【請求項６】
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を部分的に構成するための方法であって、前記ＦＰＧＡは多数の構成可能論理ブロック（ＣＬＢ）と、多数のアドレス線と、多数の相補のデータ線対と、アドレス線の各々について少なくとも１本のローカルアドレス線と、構成データの各ワードについてのワード制御線と、ワード制御線およびアドレス線を対応するローカルアドレス線に接続するためのロジックとを有し、前記方法は、
１本以上のワード制御線および１本以上のアドレス線を選択することで、選択されたワードにアクセスするステップと、
１本以上のワード制御線を選択解除することで、アドレス線によりアドレス指定された選択解除されたワードへのアクセスを防ぐステップとを含む、方法。
【請求項７】
請求項６に記載の前記方法の結果としてプログラムされたフィールドプログラマブルゲートアレイ（ＦＰＧＡ）。
【請求項８】
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）であって、
構成可能論理ブロック（ＣＬＢ）の配列を含み、各ＣＬＢは少なくとも１本のローカルアドレス線および多数のデータ線を有し、前記ＦＰＧＡはさらに、
データ線を介しＣＬＢをプログラムするためにプログラミングデータを受取るためのアドレス指定可能データレジスタを含む、ＦＰＧＡ。
【請求項９】
アドレス指定可能データレジスタに接続されて、データレジスタがより多くのプログラミングデータを受取るために自由であるようプログラミングデータを一時的に保持するための、第２のレジスタをさらに含む、請求項８に記載のＦＰＧＡ。
【発明の詳細な説明】
【０００１】
【技術分野】
この発明は集積回路に関し、特定的には、プログラム可能論理回路またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）に関する。より特定的にこの発明は、ＦＰＧＡの或る区域を、ＦＰＧＡの他の区域に影響を及ぼすことなく部分的に再構成するための技術に関するものである。
【０００２】
【発明の背景】
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、構成可能論理ブロック（ＣＬＢ）の構成を制御するメモリへ、ビットの流れすなわちビットストリームをロードすることにより、特定の機能を行なうように構成されるものである。各ＣＬＢは、構成可能ロジックと、隣接するセルにわたり接続を行ない相互接続線を形成する水平方向および垂直方向の線部（line segment）と、ロジックを線部に選択的に接続するための経路付けまたは切替構造体とを含む。
【０００３】
論理ブロックのうちいくつかまたはすべてを再構成してＦＰＧＡの機能を変えることが望まれることがある。過去において再構成は、完全な新しいビットストリームをＦＰＧＡにロードしてすべてのＣＬＢを再構成し、こうしてＦＰＧＡ全体を再プログラムすることを伴っていた。
【０００４】
ＦＰＧＡのサイズが急速に増大する中、選択されたＦＰＧＡ部分の再構成を可能にしかつ同じＦＰＧＡの他の部分に影響を及ぼさない、部分的再構成技術が考案されてきた。しかし伝統的に部分的再構成は、ＦＰＧＡのアーキテクチャのため、ＣＬＢを制御するためのメモリの列全体を再構成することに限られてきた。
【０００５】
図１は、従来の部分的再構成の限界を例示するためのＦＰＧＡ２０を示す。ＦＰＧＡ２０はタイルの配列を有し、各タイルは構成可能ロジックおよび関係する相互接続を含み、これらを集合的に構成可能論理ブロック（ＣＬＢ）２２と呼ぶ。例示の目的から、図１ではいくつかのＣＬＢおよびいくつかの相互接続線のみを示す。典型的には、ＦＰＧＡ２０は数千の繰返され得るＣＬＢ２２で実現され、各ＣＬＢは多くの水平方向および垂直方向の線部を有する。ヤング（Young）、チョーダリー（Chaudary）およびバウアー（Bauer）による米国特許第５，９１４，６１６号に、このような構造がより詳細に記載されている。
【０００６】
各ＣＬＢ２２は、構成可能ロジックと、隣接するセルにわたり接続を行ない相互接続線を形成する水平方向および垂直方向の線部と、ロジックを線部に選択的に接続するための経路付けまたは切替構造体とを有する。ロジックと、線部間接続との構成は、構成メモリにより制御され、構成はこの構成メモリへロードされて、ロジックおよび相互接続線が所望の機能を行なうことを可能にする。或るＦＰＧＡでは、アドレス線上の構成メモリの区域をアドレス指定してデータ線にデータを与えることによって、構成メモリ内のデータがロードされる。或るＦＰＧＡでは、構成データのフレームはシフトレジスタ内に順次送り込まれて、次に構成メモリセルのアドレス指定された列へ並列にシフトされる。垂直方向のワイヤがアドレス線２４で表わすアドレス線を形成し、これは一般にＦＰＧＡの高さに及ぶ。水平方向のワイヤがデータ線２６で表わす構成データ線を形成し、これは通常ＦＰＧＡの幅に及ぶ。
【０００７】
図１のＦＰＧＡでは、ビットストリームからの構成データはシフトレジスタ２８によりデータ線２６上に置かれる。ビットストリームはデータのフレームを含み、各フレームはシフトレジスタ２８を満たして、対応するアドレス線でアクセスされる１列のメモリセルをプログラムするのに用いられる。たとえば、シフトレジスタ２８は数千ビットからなるフレームを保持し得る。ビットストリームはさらに、対応するデータフレームをシフトレジスタにロードするためのコマンドと、一旦ロードが行なわれればデータフレームに関連した適当なアドレス線を選択するためのコマンドとを含む。
【０００８】
フレーム全体がシフトレジスタ２８内にロードされた後、データビットはシャドーレジスタ３０へ一時的に伝達され得るが、このためシフトレジスタ２８は、現在のデータの書込中に次のデータフレームの受取を始めるために解放されている。アドレス線が選択され、データをシャドーレジスタ３０からデータ線２６経由でＣＬＢの選択されたメモリセルへ伝達する。このプロセスは、ＦＰＧＡ２０上のＣＬＢ２２を完全にプログラムするまですべてのアドレス線２４につき繰返される。
【０００９】
従来の方法を用いると、ＦＰＧＡ２０の部分的再構成は、データビットをシフトレジスタ２８内にシフトして、再プログラムされているＣＬＢ２２のアドレス線２４のみを選択することによって行なわれ得る。残念ながら、アドレス線２４がＣＬＢ２２の列全体に及んでいるため、プログラマーがすべてのブロックを変更したいと望むか否かにかかわらず共通のアドレス線２４で接続されたすべてのＣＬＢが再構成されてしまう。これを図１では部分的再構成領域３２として図示する。
【００１０】
ＦＰＧＡのサイズおよび複雑さが増加し続ける中、共通のアドレス線に接続されたＣＬＢのうちいくつかのみを含む、ＦＰＧＡのより小さな区域を部分的に再構成することが望ましくかつ有利であろう。したがって、ＦＰＧＡの選択可能ＣＬＢの部分的再構成を可能にするようにプロセスまたはアーキテクチャを改良することが必要とされている。
【００１１】
【発明の概要】
この発明は、１本以上のアドレス線に接続された選択可能な構成可能論理ブロック（ＣＬＢ）を、同じアドレス線に接続された他のＣＬＢへの影響なしに部分的再構成することを可能にする、ＦＰＧＡアーキテクチャおよび方法に関する。
【００１２】
一実現例に従うと、メモリセル分割（resolution）での部分的再構成は、ＦＰＧＡ構成メモリのアドレス線およびデータ線に印加される入力電圧を操作することで達成される。選択されたＣＬＢ内のいくつかのメモリセルがプログラムされ、かつ同じアドレス線に接続された同じまたは他のＣＬＢの他のメモリセルがプログラムされないように、入力電圧を制御する。どのデータ線がプログラミング電圧を受取りどのデータ線がプログラミング防止電圧を受取るかを指定するために、マスクレジスタおよび追加のマスク線がＦＰＧＡに追加される。
【００１３】
別の実現例に従うと、ＣＬＢ分割での部分的再構成は、再構成を目的とした個々のＣＬＢの選択を可能にするようにＦＰＧＡを結線接続（hardwiring）することで達成される。この実現例では、ＦＰＧＡにはＣＬＢ制御レジスタと、ＣＬＢ制御レジスタによりアドレス指定される水平方向のＣＬＢ制御線と、既存のアドレス線に追加される付加的なアドレス線組とが設けられる。ＣＬＢ制御線および付加アドレス線は、既存のローカルアドレス線にアクセスして、他のＣＬＢに影響を及ぼすことなく個々のＣＬＢの選択および再構成を可能にするために用いられる。
【００１４】
別の実現例では、部分的再構成は１ワードの分割においてであり、ここでワードは典型的にＣＬＢの１つの次元（dimension）よりも小さい。したがってＦＰＧＡの１ＣＬＢを再構成するには、典型的に１列内でいくつかのワードが取り替えられ、ＣＬＢにより用いられるいくつかの列が、少なくとも取り替えられるいくつかのワードを有する。しかしながら、この発明は１つの特定の分割には限定されない。どの分割もこの発明の原理からの利益を受けることが可能である。
【００１５】
【図面の詳細な説明】
この発明は、ＦＰＧＡのサイズおよび複雑さの急速な増加に関連する問題を克服する、改良されたＦＰＧＡアーキテクチャおよび方法に関する。このアーキテクチャおよび方法は、ＦＰＧＡの構成可能論理ブロック（ＣＬＢ）を構成、再構成または部分的再構成する速度および効率を向上させる。この発明の一局面は、ＣＬＢ分割、またはより細かいメモリセル分割でＣＬＢ再構成を可能にする、改良された部分的再構成技術に関する。このことは、共通のアドレス線でアドレス指定されるＣＬＢまたはメモリセルを互いから独立して再構成できることを意味する。この発明の別の局面は、ＦＰＧＡを構成または再構成するのに用いられるビットストリームのサイズを減少させるための圧縮技術に関する。以下、これらおよびその他の局面を別々に論じる。
【００１６】
改良された部分的再構成
ＣＬＢ分割またはより細かい分割でのＦＰＧＡの汎用再構成を達成するための２つの例示的な手法を説明する。一手法は、共通のアドレス線によりアドレス指定されるメモリセルのうち或るいくつかが選択的にプログラムされかつ他のメモリセルがプログラムされないように、メモリセルに印加される入力信号を制御することである。第２の手法は、再構成を目的としたＣＬＢの個々の選択を可能にするようにＦＰＧＡアーキテクチャを変形することである。以下にこれらの手法を別々に説明する。
【００１７】
技術１  入力で駆動される部分的再構成
図２は、ＦＰＧＡ５０を構成、再構成または部分的再構成するのに用いられ得る構成システム４０を示す。ＦＰＧＡ５０はタイルまたは構成可能論理ブロック（ＣＬＢ）５２の配列を有する。例示の目的からいくつかのＣＬＢのみを示すが、典型的にはＦＰＧＡ当り数千のＣＬＢがある。ＦＰＧＡは、隣接するＣＬＢ５２の垂直方向の線部を接続することによって形成される多数のアドレス線５４を有する。ＦＰＧＡはさらに、隣接するＣＬＢ５２の水平方向の線部を接続することにより形成される多数のデータ線５６を有する。シフトレジスタ５８はＦＰＧＡにわたり垂直方向にまたがってデータをデータ線５６に与え、シャドーレジスタ６０は、ＣＬＢ５２のメモリセル内にプログラムされるデータフレームのための一時的記憶を提供する。上述のＦＰＧＡ５０の設計は従来のものであり、当該技術で周知である。
【００１８】
構成システム４０は、ＦＰＧＡのデータ線５６およびアドレス線５４を選択するための論理を提供するデータ選択ユニット６２およびアドレス選択ユニット６４を含む。データ選択ユニット６２およびアドレス選択ユニット６４は、アドレス線電圧およびデータ値の特定の組合せをＦＰＧＡに与えることで、共通のアドレス線に接続されたメモリセルを選択的にプログラムするように構成される。
【００１９】
他については従来型であるＦＰＧＡ５０は、シフトレジスタ５８およびシャドーレジスタ６０の他に垂直方向に走るマスクレジスタ６６を含むように変形される。マスクレジスタ６６は、どのメモリセルがプログラミングのためのデータ値の特定の組合せを受取り、どのメモリセルがこれを受取らないかを選択し、こうして部分的再構成領域６８が定められる。マスクレジスタ６６は各データ行につき制御情報の１ビットを与える。値の一方はメモリセルがプログラムされることを引き起こし、他方の値はセルがプログラムされることを防ぐ。マスクレジスタ６６の動作は後により詳細に説明するが、その前にメモリセルの簡単な説明と、アドレス線電圧およびデータ値の組合せが、共通のアドレス線に接続されている選択されたメモリセルをどのようにプログラムするかについての説明とを記載する。
【００２０】
図３は、アドレス線Ａによりアドレス指定される２つのインバータ７２および７４を有する標準的な構成可能メモリセル７０を示す。アドレス線Ａが選択されると、トランジスタ７６および７８は活性化してインバータ７２および７４を１対の相補のデータ線Ｄ／Ｄ′（ここでＤ′の表記はＤバーを指す）に結合する。プログラム中、データ線上のデータビットはインバータ７２および７４に書込まれ、読出中には、インバータ７２および７４に記憶されたデータはデータ線上へ伝達される。メモリセル７０は、以下の真理値表１にある従来の値および電圧レベルに従ってプログラムまたは読出される。
【００２１】
【表１】
0004686107.tif 000002
【００２２】
この従来の手法に従うと、１または０の値をデータ線Ｄ上に（逆の値をデータ線Ｄ′上に）置いて電圧Ｖｄｄをアドレス線に印加することにより、共通のアドレス線Ａにより接続されたすべてのメモリセルが同時にプログラムされる。アドレス線に接続されたすべてのメモリセルを読出すには、データ線対を「１」の２進値へハイに駆動してから、これが浮動することを許す。次にアドレス線Ａは、トランジスタ７６および７８をかろうじてオンにするのに十分な電圧Ｖｄｄ−Ｖｔでストローブされる。インバータ７２および７４に蓄積された電荷はゆっくりと漏れ出て、メモリセルに記憶された値に依存して反対方向にデータ線を駆動する。
【００２３】
この伝統的な手法とは対照的に、改良された部分的再構成方法は、メモリセルが再構成されているかどうかにかかわらず同じ電圧でアドレス線を駆動し、値をデータ線に選択的に印加することで、或るメモリセルが再プログラムされるかどうかを制御する。より具体的には、アドレス線Ａはより低い電圧Ｖｄｄ−Ｖｔにより駆動され、ここでＶｄｄは供給電圧（たとえば１．５Ｖ）であり、Ｖｔはトランジスタ７６および７８についてのしきい値電圧（たとえば０．５Ｖ）である。より低い電圧を用いるのは、アドレス線Ａ上の電圧をより高い電圧Ｖｄｄに駆動すると、大きな静電容量を有するデータ線が、再構成されていないメモリセルにある値を破壊してしまうからである。
【００２４】
メモリセル７０が再プログラムされるべき場合、マスクレジスタ６６は第１の２進値（たとえば「０」）を与えて、データをプログラミング処理するためのものとして相補のデータ線対Ｄ／Ｄ′を選択する。次にデータ値対０／１または１／０が相補のデータ線対Ｄ／Ｄ′上に置かれ、これに結び付けられたメモリセルをプログラムする。
【００２５】
メモリセル７０が再プログラムされるべきでない場合、マスクレジスタ６６は第２の２進値（たとえば「１」）を与えて相補のデータ線対Ｄ／Ｄ′を選択し、データ値１／１がデータ線対Ｄ／Ｄ′上に置かれる。値対１／１を与えることはメモリセルを読出すことに近く、これによりデータがセル内にプログラムされることを効果的に防ぐ。部分的構成入力を以下の真理値表２にまとめる。
【００２６】
【表２】
0004686107.tif 000003
【００２７】
図２は、ＦＰＧＡ５０に関する部分的再構成方法を例示する。プログラマーが部分的再構成領域６８内のＣＬＢのみを再構成したいと望んでいると想定する。アドレス選択ユニット６４は、領域６８内のＣＬＢによって用いられるアドレス線のうち１本に電圧レベルＶｄｄ−Ｖｔを印加する。データ選択ユニット６２は「０」のマスク（Ｍ）値と、１／０または０／１の値対（メモリセルに書込むべき値に依存する）とを、プログラムされるべきメモリセルに用いられるデータ線に割当てる。同時にデータ選択ユニット６２は、「１」のマスク値と１／１の値対とを、プログラムされることを意図していないメモリセルに用いられるデータ線に割当てる。なおこの技術では、再構成領域６８は例示を目的として図２に示すただ１つの矩形の範囲ではなく、ＦＰＧＡ全体にわたる多数の領域を占めることもあり得る。
【００２８】
アドレス線およびデータ線についての電圧ならびにメモリセル７０内の要素のサイズは、値対０／１または１／０がメモリセルをフリップさせかつ値対１／１がそうしないように、より精密に制御できる反転またはトリップポイントを確立するよう選択される。「トリップポイント」とは、データ線Ｄ／Ｄ′およびアドレス線Ａの入力によってインバータ７２および７４が一方の２進値を記憶することから他方の２進値を記憶することへと切換わる点である。好適な電圧およびサイズは、製造工程およびその他の回路特性に依存する。
【００２９】
この第１の部分的再構成技術は、ＦＰＧＡアーキテクチャに対して行なわれる変更が、メモリセル要素に対する可能なサイズの変更およびマスクレジスタの追加のみである点で有利である。加えて、アドレス線選択ユニットは単一の電圧でアドレスを駆動するだけでよい。メモリセルレベルでの再構成は、アドレス線およびデータ線に印加される電圧レベルにより管理される。
【００３０】
技術２  変形ＦＰＧＡアーキテクチャ
ＣＬＢ分割での部分的再構成を可能にする別の手法は、個々のＣＬＢがアドレス指定可能となるようＦＰＧＡを変形することである。図４は、ＣＬＢ５２、アドレス線５４′、データ線５６、シフトレジスタ５８、およびシャドーレジスタ６０がある点で従来のＦＰＧＡと類似であるＦＰＧＡ８０を示す。しかし従来のＦＰＧＡとは異なり、ＦＰＧＡ８０にはさらに、シフトレジスタ５８およびシャドーレジスタ６０の他に垂直方向に走るＣＬＢ制御レジスタ８２が設けられる。ＦＰＧＡ８０はさらに、既存のアドレス線５４′に加えてアドレス線８４の付加的な組を含むように変形される。一実現例では、元のアドレス線５４′の各々につき付加的なアドレス線８４があるため、各ＣＬＢにある垂直方向の構成アドレス線の数が２倍になる。さらに図４の実現例では、アドレス線５４′が途切れていてＣＬＢ境界にわたって連続的でなく、こうしてそれぞれのＣＬＢに対しローカルなアドレス線が形成されることが注目される。図２のＦＰＧＡ５０のアドレス線５４と区別するために、ローカルで非連続的なアドレス線を番号５４′で参照する。
【００３１】
ＦＰＧＡ８０はさらに、ＣＬＢ制御レジスタ８２によりアドレス指定される付加的な水平方向のＣＬＢマスク線８６を含む。ＣＬＢ５２につき１本のＣＬＢマスク線８６があることが好ましい。ＣＬＢマスク線８６と付加的なアドレス線８４とが一緒になって既存のローカルアドレス線５４′にアクセスすることで個々のＣＬＢ５２の選択が可能となり、こうして特定のＣＬＢが他のＣＬＢに影響を及ぼすことなく再構成され得る。
【００３２】
図５は、ＦＰＧＡ８０から取った２つの隣接する構成可能論理ブロックＣＬＢiおよびＣＬＢi+1を示す。標準的な相互接続線部に加え、各ＣＬＢには水平方向のＣＬＢマスク線８６と、ローカルアドレス線５４′につき付加的なアドレス線８４とが設けられる。高さ一杯の（full-hight）非ローカルアドレス線８４とＣＬＢマスク線８６との接合部にはＡＮＤゲート８８が位置づけられる。ＡＮＤゲート８８の入力は、非ローカルアドレス線８４およびＣＬＢマスク線８６に接続され、出力はローカルアドレス線５４′に接続される。
【００３３】
指定されたＣＬＢを再構成するためには、指定されたＣＬＢを横切る非ローカルアドレス線８４およびＣＬＢマスク線８６が選択される。ＡＮＤゲート８８は、入力の両方が選択されるとローカルアドレス線５４′を選択する。次に、ＣＬＢへ走るデータ線を用いてメモリセルが再構成される。再構成を意図されていないＣＬＢにより用いられる非ローカルアドレス線８４および／またはＣＬＢマスク線８６は選択解除（deselect）されたまま保たれる。以下の表４で再構成の制御を例示する。
【００３４】
【表３】
0004686107.tif 000004
【００３５】
この第２の部分的再構成技術は、ＣＬＢ分割での再構成が種々のプロセス条件で確実に信頼できる点で有利である。しかしこれらの要素を追加することで、チップの価格およびサイズは増加する。
【００３６】
ビットストリーム圧縮
この発明の別の局面は、ＦＰＧＡの構成または再構成に用いられるビットストリームのサイズを減少させる圧縮技術に関する。先に注目されたように、ＦＰＧＡをプログラムする従来の手法は、ビットフレームをシフトレジスタにシフトすること、およびアドレス線をストローブしてアドレス線でアドレス指定されたメモリセルをプログラムすることを伴う。フレーム当りに数千ものビットがあり、さらに数千のアドレス指定可能な位置があるため、繰り返される再構成プロセス中にシフトレジスタは何百万ものビットを扱うことになり、時間が浪費されるおそれがある。
【００３７】
一般にビットストリーム圧縮技術では、構成データにある互いに最も類似のフレームが識別される。このようなフレームは同一であることも、または１つもしくはいくつかのワードもしくはビットで異なることもある。次に構成データは再編成され、これらのフレームはグループ化される。１つのフレームと次のフレームとで変化しないデータを除去することで、圧縮されたビットストリームが生成される。フレーム全体でなく個々のワードがロード可能となるよう、ＦＰＧＡは従来のシフトレジスタの代わりにアドレス指定可能データレジスタを伴って実現される。
【００３８】
図６は、シフトレジスタ５８の代わりにアドレス指定可能データレジスタ１０２を実現するＦＰＧＡ１００を示す。アドレス指定可能データレジスタ１０２はフレーム内のビットの組へのアクセスを可能にする。たとえばアドレス指定可能データレジスタ１０２は、ビットストリームの各データフレーム（たとえば数千のビット）内にあるＮビットのサブフレーム（たとえば１６ビットまたは３２ビットのワード）へのアドレス指定を可能にする。結果としてＮビットサブフレームは、シフトレジスタの長さにわたりレジスタ１０２の或るアドレス指定可能位置へ順次シフトされる代わりに、この位置に直接書込まれ得るため、従来のシフトレジスタと比較して速度および効率が向上する。
【００３９】
ＦＰＧＡ１００は、図２に関し先に述べたマスクレジスタを伴って実現され得る。このアーキテクチャでは、プログラマーはアドレス指定可能データレジスタ１０２内のアドレス位置に１つ以上のデータワードを書込み、次にマスクレジスタ６６およびデータ値入力を用いて、他のメモリセルに影響を与えることなくＦＰＧＡ内での特定のメモリセルをプログラムできる。
【００４０】
これに代わりＦＰＧＡ１００はさらに、図４および図５に関して先に述べた変形例で実現され得る。このアーキテクチャでは、プログラマーはアドレス指定可能データレジスタ１０２内のアドレス位置に１つ以上のデータワードを書込み、次にＣＬＢ制御レジスタ８２、ＣＬＢマスク線８６、および非ローカルアドレス線８４を用いて、他のＣＬＢに影響を与えることなく特定のＣＬＢをプログラムできる。
【００４１】
図７は、ＦＰＧＡを構成または再構成する速度を向上させるためのビットストリーム圧縮プロセスを実現する構成システム１５０を示す。構成システム１５０は、ＦＰＧＡを構成および／または再構成するのに用いられる圧縮されたビットストリームを生成するプログラミング装置１５２を有する。プログラミング装置１５２はプロセッサ１５４、データメモリ１５６およびプログラムメモリ１５８を有する。プログラミング装置１５２はたとえば汎用コンピュータで実現され得る。
【００４２】
構成データ１６０はデータメモリ１５６で記憶される。構成データ１６０は、ＦＰＧＡの完全な構成のためのデータを含む。構成データ１６０は、ＦＰＧＡを構成するのに必要なデータフレーム、コマンドおよびアドレスを含む限り、圧縮されていないビットストリームとして実施しても、または或る他の形式で実施してもよい。プログラミング装置１５２は構成データ１６０を圧縮ビットストリームに圧縮し、これはデータメモリ１５６でファイル１６２として記憶、プログラム可能読出専用メモリ（ＰＲＯＭ）にプログラミング、またはＦＰＧＡ（ともに番号１６４で参照する）にロードされ得る。圧縮技術は特に、アドレス指定可能データレジスタ１０２を有するＦＰＧＡ１００に好適である。しかし圧縮技術の機構の或るものは、ＦＰＧＡ５０（図２）およびＦＰＧＡ８０（図４）などアドレス指定可能データレジスタを実現しない他の種類のＦＰＧＡと効果的に用いることができる。
【００４３】
プログラムメモリ１５８には圧縮プログラム１７０が記憶され、これはプロセッサ１５４で実行される。圧縮プログラム１７０はフレームアナライザ要素１７２を有し、これは構成データ１６０を評価して、所与のフレームについて構成データ内で最も類似のフレームを識別する。最も類似のフレームは、すべてのワードまたはビットが同じである同一フレームであることも、いくつかのビットまたはワードのみが所与のフレームにあるものと異なっている類似フレームであることもある。フレームアナライザ１７２はさらに、他では同一である２つの次フレーム候補（すなわち現在のフレームと次のフレームとで変化するビット／ワードの数が同じ）間での差別化を、コスト分析に従い行なうことができる。コスト分析は、圧縮されたビットストリームから次に取るとすればどのフレームが結果としてよりコストの少ないプログラムシーケンスをもたらすかを評価する。
【００４４】
圧縮プログラム１７０は、構成データ内のフレームを再編成して類似のフレームをグループ化するためのフレームリオーダラ要素１７４を有し、これにより１フレームと次フレームとで変化するデータビットの数が最小限にされる。フレームリオーダラ１７４は次に、１フレームと次フレームとで変化しない重複ワード／ビットを除去して、（もしあれば）変化するワード／ビットと、このデータでセルをプログラムすることを意図したアドレス線およびデータ線を選択するための対応するコマンドおよびアドレスとのみを残すことによって、圧縮されたビットストリームを生成する。この結果、圧縮されていないデータ１６０よりも小さな圧縮ビットストリームが得られる。
【００４５】
圧縮プログラム１７０をソフトウェアプログラムとして例示しているが、これに代えて、プロセッサ１５４または他の専用の要素の一部としてハードウェアまたはファームウェアで実現してもよい。
【００４６】
図８は、圧縮プログラム１７０で実施される一般的な圧縮プロセスをより詳細に示す。ステップ２００において、構成データ１６０が作成されてデータメモリ１５６に記憶される。構成データは、ＦＰＧＡを完全に構成するのに十分なデータおよびコマンドを含む。ステップ２０２で、圧縮プログラム１７０は分析のために構成データからフレームを選択する。このフレームはデータバッファまたはメモリに記憶される。次に、選択されたフレームについてビットストリーム部分が生成される（ステップ２０４）。このビットストリーム部分はロードコマンドを含み、これにデータフレームが続き、これにストローブコマンドが続くが、これは、データフレームでプログラムされるメモリセルを選択するのに用いられる適当なアドレス線をアサートするためのものである。
【００４７】
ステップ２０６で、フレームアナライザ１７２は構成データ内の他のフレームを選択されたフレームと比較する。一実現例では、フレームアナライザ１７２は各フレーム対をワードごとに比較する。対応する各ワード対につき、アナライザ１７２は２つのワードが一致するかどうかを判断する（ステップ２０６Ａおよび２０６Ｂ）。ワードが一致すればプロセスは次の２つのワードへと継続する。ワードが一致しなければ、比較されているフレーム内のワードはマークされ、または他で識別されて、ワードカウントが増分される（ステップ２０６Ｃ）。このサブプロセスは、一致しないワードのカウントとマークされたワードの一覧とを出力する。
【００４８】
この比較から、フレームアナライザ１７２は選択されたフレームと最も類似のフレームを識別する（ステップ２０８）。最も類似のフレームは同一（すなわちマークされたワードがない）または類似（すなわち１つまたはいくつかのワードがマークされている）であり得る。
【００４９】
選択されたフレームと最も類似のものとして２つの「次フレーム」候補が一緒に現れた場合には、フレームアナライザ１７２はコスト分析を行なって、２つの次フレーム候補のうちどちらがより好都合かを判断できる。この最適化は、高速化および処理のためのクロックサイクルの減少という観点から、どのフレーム順序の処理コストが結果としてより少ないかについての分析に基づく。もし構造体が、新たなアドレスを受取らずにアドレスを増分できる回路を含んでいれば、完全なアドレスを与えるよりもアドレスを次の隣接するアドレスへ増分するほうが低コストである。たとえば２つの次フレーム候補が、選択されたフレームとは異なるワードを２つしか有さないと想定する。さらに、これらフレームのうち第１のフレームにある２つのワードがフレーム内で隣接しており、一方でこれらフレームのうち第２のフレームにある２つのワードは遠く離れていると想定する。フレームアナライザ１７２は第１のフレームがより低コストであると考えるが、これは、フレーム内で離れているワードを書込むよりも、フレーム内の隣接するワードをモディファイしてこれらワードをアドレス指定可能データレジスタに書込むほうが、必要となるビットストリームコマンドが少ないからである。
【００５０】
これに従い、フレームアナライザ１７２は最適化分析を実現するよう構成され得るが、これは以下の規則に従って、他では同一の次フレーム候補を格付けする。
【００５１】
規則１  現在のフレームとは異なるワードが最も少数であるフレームを識別
規則２  マークされたワードの塊（clump）がより少数であるフレームを、マークされたワードが遠く離れているフレームよりも優先して選ぶ
規則３  選択されたフレームに隣接するフレームを、選択されたフレームから遠く離れたフレームよりも優先して選ぶ
フレームリオーダラ１７４は、最も類似のフレームが圧縮ビットストリーム内で逐次続くようにフレームを再編成する。このことは、次フレームが同一であるかどうかに依存して２つのやり方のうち１つで行なわれる（ステップ２１０）。次フレームが同一（すなわちステップ２１０から“ＹＥＳ”の分岐）であれば、フレームリオーダラ１７４は次フレームについてのストローブコマンドおよびアドレスを有するビットストリーム部分を生成するが、冗長なデータフレームを含まない（ステップ２１２）。こうして元の構成データは圧縮されるが、これは次フレームについてのロードコマンドおよびデータフレームがビットストリームから完全に除去されるからである。
【００５２】
次フレームが同一でない（すなわちステップ２１０から“ＮＯ”の分岐）場合、フレームリオーダラ１７４は、次フレームについて、現在のフレームとは異なるビット／ワードと、ビット／ワードをロードするためのロードコマンドと、ストローブコマンドおよびアドレスとのみを含む、ビットストリーム部分を生成する（ステップ２１４）。大量のデータが除去されるため、やはり元の構成データは圧縮される。
【００５３】
残るフレームと次のフレームとの比較についてプロセスは継続する。この反復的な手法の結果として、圧縮されたビットストリームファイル１６２が得られる。
【００５４】
図９は、圧縮プロセスを例示するため、圧縮されていないビットストリーム２５０と圧縮されたビットストリーム２６０の対応する部分とを部分的に示す。圧縮されていないビットストリーム２５０は多数のデータフレーム２５２からなり、これらを、データフレームＤＦi、…、ＤＦi+j、…、ＤＦi+kなど、で表わす。ビットストリームはデータフレーム２５２の各々につき多数のロードコマンド２５４を有し、これらをＬＣi、…、ＬＣi+j、…、ＬＣi+kなどと表わす。各ロードコマンドはＦＰＧＡに対し、対応するデータフレームをアドレス指定可能レジスタにロードするよう指示する。ロードコマンドは典型的に、続くデータフレームの長さを示すサイズ情報を含む。ビットストリーム２５０はさらにデータフレームの各々につきストローブコマンド２５６を有し、これらをＳＣi、…、ＳＣi+j、…、ＳＣi+kなどと表わす。各ストローブコマンドは、対応するデータフレームで特定のメモリセルをプログラムするために選択されるアドレス線を識別する。
【００５５】
圧縮ビットストリーム２６０は図８の圧縮プロセスの結果として作成される。この例では、第１のデータフレームＤＦiが選択されたフレームであり、データフレームＤＦi+kが次の最も類似したフレーム（これは選択されたフレームと偶然同一である）であり、データフレームＤＦi+jが次の最も類似のフレームであると想定する。この場合、同一のデータフレームＤＦi+kおよび対応するロードコマンドＬＣi+kは除去され、こうしてビットストリームが圧縮され、対応するストローブコマンドＳＣi+kは、選択されたデータフレームＤＦiのストローブコマンドＳＣiに続くようにビットストリーム内で再び順序づけられる。こうして、同じデータが逐次のストローブコマンドを介しセルの２つの異なった列をプログラムするのに用いられる。
【００５６】
類似のデータフレームＤＦi+jは、選択されたデータフレームＤＦiに続くようにビットストリームで再編成される。この類似のデータフレームもまたそのサイズにおいて減少し、データフレームＤＦiから類似のデータフレームＤＦi+jにかけて変化するワードと、アドレス指定可能データレジスタについてのワードアドレスとのみを含むようにされる。減少したデータフレームをＷｏｒｄi+jとして図示する。ロードコマンドは、ワードをロードするためのアドレス指定可能レジスタのアドレスを含むロードワードコマンド（ＬＷ）と取り替えられる。多数のワードが変化する場合、ＬＷ−Ｗｏｒｄ−ＳＣシーケンスの多数の組合せがビットストリーム内でつなぎ合わされるが、これはなおもデータフレーム全体よりも小さなサイズである。これらの変化を通じ、圧縮ビットストリーム２６０は圧縮されていないビットストリーム２５０よりも著しく小さくなる。
【００５７】
同一のフレームについての例示の圧縮プロセス
図８に例示したプロセスは、同一のフレームおよび類似のフレームの両方を考慮した一般的な圧縮技術を説明している。図１０は、図８のプロセスの特定の一実現例に従う、同一のフレームを除去するためのビットストリーム圧縮方法を示す。
【００５８】
ステップ３００で、構成データが作成されデータメモリに記憶される。構成データは、ＦＰＧＡを完全に構成するのに十分なデータおよびコマンドを含む。ステップ３０２で、圧縮プログラムは“Frame＿Equal（等しいフレーム）”と呼ぶ整数配列を「−１」などの値へ初期設定する。次に圧縮プログラムは、分析のためにフレームを構成データから選択する（ステップ３０４）。このフレームはデータバッファまたはメモリに記憶される。
【００５９】
ステップ３０６で、圧縮プログラムは選択されたフレームを各々の後続フレームと比較する。後続フレームのいずれかが選択されたフレームと同一（すなわちステップ３０８から“ＹＥＳ”の分岐）であれば、圧縮プログラムはこのフレームについてのFrame＿Equal配列項目を、現在のフレームの番号に等しく設定することで現在のフレームを参照する（ステップ３１０）。加えて圧縮プログラムは、“Frame＿Duplicate（重複フレーム）”として知られる第２のパラメータを真（ＴＲＵＥ）に設定することで、選択されたフレームが構成データのどこか他のところで重複フレームを有することを示す。選択されたフレームの後にあるすべてのフレームが比較されると、プロセスは構成データにある次のフレームを選択するが、これをステップ３１４からの“ＮＯ”分岐およびステップ３０４へ戻る矢印で表わす。
【００６０】
すべてのフレームが重複について評価されると（すなわちステップ３１４から“ＹＥＳ”の分岐）、プログラムは初期フレームカウントを第１のフレーム０に設定し（ステップ３１６）、このフレームについてのプログラミングデータを書込む（ステップ３１８）。ステップ３２０で圧縮プログラムは、フレームについてのFrame＿Duplicateが真であるかどうかを調べることにより、まだ別の重複フレームがあるかどうかを判断する。もしなければ、プログラムは単にこのフレームについてのプログラミングデータを書込む（ステップ３２２）。当業者であれば、フレーム０の場合にはこのステップ３２２を省略できることが理解されるであろうが、なぜならこのフレームについてのプログラミングデータは既にステップ３１８で書込まれているからである。
【００６１】
Frame＿Duplicateが真（すなわちステップ３２０からの“ＹＥＳ”分岐）であれば、プログラムはフレームの残りを評価して重複フレームを探す。このことは、最初の場合でのフレーム０などの現在のフレームと等しい項目があるかどうかについてFrame＿Equal配列を調べることで行なわれる（ステップ３２４）。次にプログラムは、重複フレームを考慮するための多数の書込コマンドを実行する（ステップ３２６）。
【００６２】
判断ステップ３２８で表わすように、プロセスは構成データの全フレームについて継続する。最後のフレームにまだ達していない（すなわちステップ３２８からの“ＮＯ”分岐）場合、フレームカウントは増分され（ステップ３３０）、次のフレームに対応する項目が−１の初期値に等しいか、または第２のフレームを参照する値に等しいかを判断するために、Frame＿Equal配列が調べられる（ステップ３３２）。このステップは、このフレームが既に重複フレームについて考慮されているかどうかを見分ける。Frame＿Equalが−１の初期値に設定されていなければ（すなわちステップ３３２からの“ＮＯ”分岐）、圧縮プログラムはこのフレームについてのプログラミングデータを書込み（ステップ３３４）、このフレームがステップ３２０で他の重複を有しているかどうかについて評価を継続する。逆に、Frame＿Equalが初期値と等しければ（すなわちステップ３３２からの“ＹＥＳ”の分岐）、プロセスは直接ステップ３２０に進む。
【００６３】
類似のデータフレームについては、プロセスは上述のものと同様である。最も類似のデータフレームが識別されると、このデータフレーム（Ｗｏｒｄi+j）についての変化したビットがビットストリームに追加され、最も類似のフレームは選択されたフレームとなる。プロセスを繰返し、すべてのフレームが考慮されるまで、すべての書込まれていないフレームを新たに選択されたフレームと比較する。
【００６４】
構造的な特徴および／または方法上のステップに特有の言語でこの発明を説明したが、前掲の特許請求の範囲で規定したこの発明は、記載された特定の特徴またはステップに限定される必要はないことが理解されるべきである。特定の特徴またはステップはむしろ、請求される発明を実現する好ましい形として開示されたものである。
【図面の簡単な説明】
【図１】  従来のフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を例示する図である。
【図２】  メモリセル分割でＦＰＧＡを部分的に再構成する構成システムを例示する図である。
【図３】  図２のＦＰＧＡの構成可能論理ブロックで採用される構成可能メモリセルを示す回路図である。
【図４】  ＣＬＢ分割で部分的再構成を可能にする変形アーキテクチャを有するＦＰＧＡを例示する図である。
【図５】  図４のＦＰＧＡの隣接する構成可能論理ブロックを例示する図である。
【図６】  アドレス指定可能データレジスタを有するフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を例示する図である。
【図７】  ビットストリーム圧縮プロセスを実現する構成システムを示すブロック図である。
【図８】  図７の構成システムにより実現されるビットストリーム圧縮プロセスを用いてＦＰＧＡを構成するための方法を示す流れ図である。
【図９】  圧縮されていない状態および圧縮された状態でのビットストリームを例示する図である。
【図１０】  ビットストリームを圧縮して同一のフレームを除去するための方法を示す流れ図である。
【図１】
0004686107.tif 000005
【図２】
0004686107.tif 000006
【図３】
0004686107.tif 000007
【図４】
0004686107.tif 000008
【図５】
0004686107.tif 000009
【図６】
0004686107.tif 000010
【図７】
0004686107.tif 000011
【図８】
0004686107.tif 000012
【図９】
0004686107.tif 000013
【図１０】
0004686107.tif 000014