説明

FPGAのコンフィギュレーション回路

【課題】 FPGAをコンフィギュレーションする際に、コンフィギュレーション専用フラッシュROMを用いていたが、このフラッシュROMの起動時間が長いのでコンフィギュレーションに時間がかかり、FPGAが起動するまでの時間が長くなってしまうという課題を解決する。
【解決手段】 2バイト以上のデータバス幅を有する汎用メモリにコンフィギュレーションデータを書き込み、このメモリの出力を一括してラッチ回路に取り込み、バイト単位でFPGAに出力するようにした。FPGAのコンフィギュレーション準備時間待つだけでコンフィギュレーションを開始することができるので、FPGAの起動時間を短くすることができる。また、複数バイトのデータを一括してラッチ回路に取り込み、このラッチ回路からバイト単位でFPGAにコンフィギュレーションデータを出力するようにしたので、フラッシュROMのようなアクセス時間が長くかつ安価なメモリを使用することができる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、FPGA(Field Programmable Gate Array)をコンフィギュレーションする回路に関し、特に高速でコンフィギュレーションすることができるFPGAのコンフィギュレーション回路に関するものである。
【背景技術】
【0002】
FPGAは、論理構造を決定するデータを内部のメモリに書き込むことにより、所望の論理回路を実現することができる論理ICである。論理構造を決定するデータをコンフィギュレーションデータと言い、このコンフィギュレーションデータをメモリに書き込むことをコンフィギュレーションと言う。FPGAは短期間かつ低コストで所望の論理回路を実現できるので、近年多用されるようになった。
【0003】
FPGAは、通常論理構造を決定するデータを書き込むメモリとしてスタティックRAMを用いる。スタティックRAMは電源が落ちるとデータが消失するために、FPGAの電源を投入する度にコンフィギュレーションを行わなければならない。
【0004】
図5に、従来のコンフィギュレーションを行う構成を示す。図5において、10はコンフィギュレーション専用のフラッシュROMであり、FPGAの論理構造を決定するコンフィギュレーションデータが書き込まれる。11はコンフィギュレーション対象のFPGA、12はクロック発振器である。フラッシュROM10とFPGA11は1対1に接続される。
【0005】
なお、フラッシュROM10のxRESETおよびFPGA11のINIT_Bはオープンドレイン出力であり、電源投入時は共にオンである。また、xRESET、xCEの「x」は、低レベルでアクティブになる信号であることを表している。
【0006】
電源が投入されるとFPGA11は初期化を開始し、コンフィギュレーションの準備ができるとINIT_Bをオフ(オープン)にする。フラッシュROM10は、コンフィギュレーションの準備ができると、xRESETをオフにする。
【0007】
INIT_BとxRESETが両方ともオフになるとこれらの端子は高レベルになり、コンフィギュレーションが開始される。フラッシュROM10はクロック発振器12が出力するクロックに同期してFPGA11のデータ端子D0−D7にコンフィギュレーションデータをアドレス0から順次出力し、FPGA11はこのコンフィギュレーションデータを取り込む。
【0008】
全てのコンフィギュレーションデータを取り込むと、FPGA11はDONEを高レベルにする。フラッシュROM10はDONEが高レベルになると、動作を停止する。このようにしてコンフィギュレーションが完了し、FPGAは動作を開始する。
【発明の開示】
【発明が解決しようとする課題】
【0009】
しかしながら、このようなコンフィギュレーションの構成には次のような課題があった。専用のフラッシュROM10は起動に数十mSの時間を必要とするので、FPGAが起動するまでの時間が長くなってしまうという課題があった。
【0010】
また、フラッシュROM10は1バイト単位でコンフィギュレーションデータを読み出し、FPGA11に転送する。このため、コンフィギュレーションデータの読み出しに時間がかかり、FPGA11が起動するまでの時間が長くなってしまうという課題もあった。
【0011】
従って本発明の目的は、FPGAの起動時間を短くすることができるFPGAのコンフィギュレーション回路を提供することにある。
【課題を解決するための手段】
【0012】
このような課題を解決するために、本発明のうち請求項1記載の発明は、
FPGA(Field Programmable Gate Array)をコンフィギュレーションするFPGAのコンフィギュレーション回路であって、
少なくとも2バイトのデータバス幅を有し、コンフィギュレーションデータが格納されるメモリと、
クロックが入力され、前記メモリのアドレスを発生するカウンタと、
前記メモリに格納されたデータを取り込み、取り込んだデータをバイト単位でFPGAに出力するラッチ回路と、
前記FPGAのコンフィギュレーション、および前記カウンタを制御する制御部と、
を具備したものである。FPGAの起動時間を短縮することができる。
【0013】
請求項2記載の発明は、請求項1記載の発明において、
前記メモリとこのメモリの出力データを取り込むラッチ回路の組を複数組具備し、これらのメモリに異なるコンフィギュレーションデータを格納すると共に、前記ラッチ回路の出力を異なるFPGAに出力するようにしたものである。複数のFPGAを同時にコンフィギュレーションできる。
【0014】
請求項3記載の発明は、請求項1若しくは請求項2記載の発明において、
前記FPGAがコンフィギュレーションを開始する前に、前記メモリに格納されているコンフィギュレーションデータの最初のデータを、前記ラッチ回路に取り込むようにしたものである。ラッチ回路に格納されている不定データに影響されず、確実にコンフィギュレーションできる。
【0015】
請求項4記載の発明は、請求項1乃至請求項3いずれかに記載の発明において、
前記制御部は、
コンフィギュレーションを開始する信号が入力されると前記カウンタを動作させて前記メモリに格納された最初のコンフィギュレーションデータを前記ラッチ回路にラッチさせるステートと、
前記FPGAのコンフィギュレーション準備作業が完了するまで前記カウンタを停止させるステートと、
前記FPGAのコンフィギュレーション準備作業が完了すると、前記カウンタの動作を再開させ、前記メモリに格納されたコンフィギュレーションデータを順次前記FPGAに出力させるステートと、
を具備したものである。ラッチ回路に格納されている不定データに影響されず、確実にコンフィギュレーションできる。
【0016】
請求項5記載の発明は、請求項1乃至請求項4いずれかに記載の発明において、
前記ラッチ回路には前記カウンタの下位出力信号が入力され、当該ラッチ回路は入力された下位出力信号に基づいて取り込んだデータをバイト単位で出力するようにしたものである。構成が簡単になる。
【0017】
請求項6記載の発明は、請求項1乃至請求項5いずれかに記載の発明において、
前記メモリとしてフラッシュROMを用いたものである。安価なメモリを用いることができる。
【発明の効果】
【0018】
以上説明したことから明らかなように、本発明によれば次のような効果がある。
請求項1,2、3、4、5および6の発明によれば、複数バイトのデータバス幅を有するメモリにコンフィギュレーションデータを書き込み、カウンタを用いてアドレスを順次指定して、このアドレスに格納された複数バイトのデータを一括してラッチ回路に取り込み、バイト単位でFPGAに出力するようにした。
【0019】
従来の専用フラッシュROMは起動に数十mSを要したが、この発明によるコンフィギュレーション回路の起動時間は短いので、コンフィギュレーションに要する時間を短くすることができる。そのため、FPGAの起動時間を短縮することができるという効果がある。
【0020】
また、複数バイトのデータを一括してラッチ回路に取り込み、このラッチ回路からバイト単位でFPGAに出力するようにしたので、安価なアクセス時間の長いメモリを使用することができ、コストダウンを図ることができるという効果もある。
【0021】
さらに、コンフィギュレーションを開始する前に、メモリの先頭に格納されたコンフィギュレーションデータをラッチ回路に取り込むことにより、電源投入時にラッチ回路に格納されている不定データの影響を受けず、確実にコンフィギュレーションができるという効果もある。
【発明を実施するための最良の形態】
【0022】
以下図面を用いて本発明の実施例1を詳細に説明する。図1は本発明に係るFPGAのコンフィギュレーション回路の実施例1を示す構成図である。なお、図5と同じ要素には同一符号を付し、説明を省略する。
【実施例1】
【0023】
図1において、20はFPGA11をコンフィギュレーションするコンフィギュレーション回路であり、汎用のフラッシュROM21、カウンタ22、ラッチ回路23、ステートマシンで構成される制御部24、およびFET25で構成される。
【0024】
フラッシュROM21はデータバス幅が16ビットの2Mバイトメモリであり、コンフィギュレーションデータが格納されている。フラッシュROM21のライトイネーブル端子xWEは高レベルに、出力イネーブル端子xOEとチップセレクト端子xCEは低レベルにされる。このため、このフラッシュROM21は読み出し可能となっている。
【0025】
フラッシュROMは電源を切ってもデータが消失しない不揮発性の半導体メモリであるが、比較的安価な反面、バイト単位でデータを書き換えることはできず、ブロック単位で消去してからデータを書き込むメモリである。本実施例はコンフィギュレーションデータを書き込むだけであり、バイト単位で書き換えることはないので、フラッシュROMを用いても、取り扱いが煩雑になることはない。
【0026】
22は21ビットのカウンタであり、そのクロック端子CLKには外部からクロックCCLKが入力される。また、カウント値である出力信号Q1〜Q20は、フラッシュROM21のアドレス端子A0〜A19に入力される。なお、xENはカウンタのイネーブル端子、xCLはカウント値のクリア端子であり、いずれも低レベルでアクティブになる。
【0027】
ラッチ回路23は、ラッチ23aと23b、インバータ23cで構成される。このラッチ回路23は、フラッシュROM21のデータバスD0〜D15に出力されるデータを一括して取り込み、この取り込んだデータをバイト単位でFPGA11のデータ端子D0〜D7に出力する。
【0028】
ラッチ23aの入力端子D0〜D7にはフラッシュROM21の下位側のデータバスD0〜D7が接続される。また、ラッチクロック端子CLKと出力イネーブル端子xOEには、カウンタ22の最下位ビット出力信号Q0が入力される。
【0029】
ラッチ23bの入力端子D0〜D7には、フラッシュROM21の上位側のデータバスD8〜D15が接続される。また、ラッチクロック端子CLKには信号Q0が、出力イネーブル端子xOEには信号Q0をインバータ23cで反転した信号が入力される。
【0030】
ラッチ23a、23bは信号Q0の立ち下がりでフラッシュROM21から入力されたデータをラッチする。また、ラッチ23aは信号Q0が低レベルのときにラッチしたデータを出力し、ラッチ23bは信号Q0が高レベルのときにラッチしたデータを出力する。ラッチ23a、23bは、ラッチしたデータを出力しないときは、その出力をハイインピーダンスにする。
【0031】
制御部24の端子CLKにはクロックCCLKが、端子COにはクロックウエイト信号xCKWTが入力され、カウンタ22に信号xEN、xCLを出力してこのカウンタの動作を制御し、また信号INIT_B0によってFPGA11のコンフィギュレーション開始、停止を制御する。
【0032】
図2に、制御部24の状態遷移図を示す。制御部24はS0〜S3の4つのステート間を遷移するステートマシンである。信号xCKWTが低レベルの間は、ステートS0になる。制御部24は信号xENを高レベル、xCLを低レベルにする。カウンタ22のxEN、xCLにはそれぞれ高レベル、低レベルが入力されるので、カウンタ22は動作を停止し、かつクリアされる。
【0033】
また、制御部24は信号INIT_B0を高レベルにする。FET25はオンになり、FPGA11のINIT_Bは低レベルになる。このため、FPGA11のコンフィギュレーションは抑制される。
【0034】
信号xCKWTが高レベルになると、ステートS1に遷移する。制御部24は信号xENを低レベル、xCLを高レベルにする。これによって、カウンタ22は0からカウントを開始する。なお、信号INIT_B0は高レベルのままとする。FPGA11のコンフィギュレーションは引き続き抑制される。
【0035】
カウンタ22の値が“000001h”になると、ステートS2に移行する。信号xCTWTが高レベルに遷移した直後は、ラッチ回路23には不定データが書き込まれている。信号xCTWTが高レベルになるとすぐにコンフィギュレーションを開始すると、この不定データをFPGA11に書き込んでしまうので、ステートS2でラッチ回路23の内容が更新されるまで待つ。
【0036】
なお、図1では直接Q1−Q20を検出しないで、ステートS1に遷移してからCCLKの2回目の立ち上がりでステートS2に遷移するようにする。カウンタ22はCCLKの立ち上がりでカウントアップするので、このようにしても同じ効果が得られる。
【0037】
ステートS2では、信号xENとxCLを高レベルにしてカウンタ22を停止させ、信号INIT_B0を低レベルにする。
【0038】
FPGA11はコンフィギュレーションの準備作業が終了すると、FPGA11はINIT_Bを高レベルにする。これによって、制御部24はステートS3に遷移する。ステートS3では、制御部24は信号xENを低レベル、xCLを高レベルにする。カウンタ22はカウントを開始する。
【0039】
ステートS3では、フラッシュROM21に格納されたデータが順次読み出される。カウンタ22の出力Q1〜Q20で指定されたアドレスに格納された下位バイトデータはラッチ23aに、上位バイトはラッチ23bにラッチされる。
【0040】
カウンタ22の出力Q0が低レベルのときは、ラッチ23aにラッチされたデータがFPGA11に出力され、Q0が高レベルのときは、ラッチ23bにラッチされたデータがFPGA11に出力される。FPGA11はこれらのデータをコンフィギュレーションデータとして取り込む。
【0041】
コンフィギュレーションが終了すると、FPGA11は信号DONEを高レベルにする。これによって、制御部24はステートS0に遷移する。あるいは、FPGA11は信号INIT_Bを低レベルにする場合もある。このINIT_Bは端子INIT_B1から制御部24に取り込まれる。これによっても、制御部24はステートS0に遷移する。
【0042】
図3に、ステートS0からS3までの各信号の波形図を示す。図3において、(A)はクロックCCLK、(B)はクロックウエイト信号xCKWT、(C)はFPGA11のコンフィギュレーションを制御するINIT_B0、(D)はカウンタイネーブル信号xEN、(E)はカウンタ22のクリア信号xCL、(F)はカウンタ22の最下位出力信号Q0、(G)はフラッシュROM21のアドレス、(H)はフラッシュROM21の出力データ、(I)はラッチ回路23にラッチされるデータ、(J)はFPGA11に出力されるコンフィギュレーションデータ、(K)はステートである。
【0043】
信号xCKWTが低レベルの間はステートS0である。信号xENは高レベル、xCLは低レベルにされるので、カウンタ22はクリア、かつカウントは停止される。このため、フラッシュROM21のアドレスは0になる。また、信号INIT_B0が高レベルにされるので、FPGA11のコンフィギュレーションは抑制される。
【0044】
時刻t1で信号xCKWTが高レベルになると、ステートS1に遷移する。信号xENは低レベル、xCLは高レベルにされるので、カウンタ22は0からカウントを開始する。INIT_B0は高レベルを維持するので、FPGA11のコンフィギュレーションは引き続き抑制される。
【0045】
時刻t2でカウンタ22の出力Q1が“1”になると、フラッシュROM21のアドレスは1になり、ステートS2に遷移する。信号xENは高レベルにされるので、カウンタ22はカウント動作を中止する。また、信号INIT_B0は低レベルにされる。
【0046】
信号Q0の立ち下がりにより、フラッシュROM21のアドレス0に格納されたデータDt0はラッチ回路23にラッチされる。信号Q0は低レベルなので、FPGA11の端子D0〜D7にはデータDt0の下位バイトデータDt0Lが出力される。
【0047】
時刻t3でFPGA11の準備作業が終了すると、ステートS3に遷移する。信号xENは低ベルにされ、カウンタ22はカウントを再開する。また、FPGA11はコンフィギュレーションを開始してデータDt0Lを取り込む。
【0048】
時刻t4で信号Q0が高レベルになる。FPGA11にはデータDt0の上位バイトDt0Hが出力され、FPGA11はこのデータを取り込む。
【0049】
時刻t5で信号Q0は立ち下がり、ラッチ回路23はフラッシュROM21のアドレス1に格納されたデータDt1を取り込む。信号Q0は低レベルなので、FPGA11にはデータDt1の下位バイトDt1Lが出力され、FPGA11はこのデータを取り込む。時刻t6で信号Q0が高レベルになると、FPGA11にはデータDt1の上位バイトDt1Hが出力され、FPGA11はこのデータを取り込む。
【0050】
以後同様にして、ラッチ回路23はフラッシュROM21に格納されたデータを順番にラッチし、FPGA11にこのラッチされたデータを下位バイト、上位バイトの順に出力する。FPGA11はこのデータをコンフィギュレーションデータとして取り込む。
【0051】
このように、ラッチ回路23は2バイト単位でフラッシュROM21からデータを読み込み、下位バイト、上位バイトの順でFPGA11に出力する。このため、フラッシュROM21としてアクセス時間が長い汎用のフラッシュROMを用いることができる。
【0052】
例えば、CCLKとして周期40nSのクロックを用いると、フラッシュROM21としてアクセス時間が70nSの低速メモリを用いることができ、かつ1Mバイトのコンフィギュレーションデータを約40mSで書き込むことができる。
【0053】
また、コンフィギュレーション専用フラッシュROMはコンフィギュレーションが開始されるまでに数十mS必要であり、このためFPGAの起動が遅くなるという課題があった。実施例1によるコンフィギュレーション回路は起動に時間を要しないので、コンフィギュレーション時間を大幅に短縮することができる。
【0054】
図4に、本発明の実施例2の構成を示す。この実施例2は、同時に2つのFPGAをコンフィギュレーションすることができる。なお、図1と同じ要素には同一符号を付し、説明を省略する。
【実施例2】
【0055】
図4において、30はコンフィギュレーション回路であり、フラッシュROM31、32、ラッチ回路33、34、カウンタ22、制御部24、FET25で構成される。なお、40、41はコンフィギュレーション対象のFPGAである。
【0056】
フラッシュROM31、32は実施例1のフラッシュROM21と同様の汎用フラッシュROMであり、ライトイネーブル端子xWEは高レベル、出力イネーブル端子xOEとチップイネーブル端子xCEは低レベルにされる。フラッシュROM31にはFPGA40のコンフィギュレーションデータが、フラッシュROM32にはFPGA41のコンフィギュレーションデータが格納される。
【0057】
ラッチ回路33、34はラッチ23a、23b、およびインバータ23cで構成され、実施例1のラッチ回路23と同じ構成を有している。ラッチ回路33はフラッシュROM31の出力データをラッチして、バイト単位でFPGA40に出力し、ラッチ回路34はフラッシュROM32の出力データをラッチして、バイト単位でFPGA41に出力する。
【0058】
制御部24にはクロックCCLKおよびクロックウエイト信号xCKWTが入力され、カウンタ22を制御する。またその端子DONEはFPGA40、41の信号DONEが入力され、INIT_B1端子はFPGA40、41のINIT_Bに接続される。なお、FPGA40、41の信号INIT_B、DONEはいずれもオープンドレイン出力なので、複数のFPGAの出力を制御部24のINIT_B1、DONEにワイヤードオア接続できる。
【0059】
カウンタ22のクロック端子CLKにはCCLKが入力され、出力Q1〜Q20はフラッシュROM31、32のアドレス端子に入力される。また、出力Q0はラッチ回路33、34に出力される。
【0060】
制御部24とカウンタ22の動作は実施例1と同じである。FPGA40と41の両方共コンフィギュレーションの準備ができると、制御部24のINIT_B1が高レベルになる。これによって、制御部24はステートS3に移行する。
【0061】
また、FPGA40と41の両方共コンフィギュレーションが完了すると、制御部24のDONEが高レベルになる。これによって、制御部24はFPGA40と41のコンフィギュレーションが完了したと判断し、ステートS0に移行する。
【0062】
この実施例2は、1つの制御部24とカウンタ22で2つのフラッシュROM31、32およびラッチ回路33、34を制御し、同時に2つのFPGA40、41をコンフィギュレーションすることができる。このため、コンフィギュレーション時間をさらに短縮することができる。また、制御部24とカウンタ22を共用することができるので、実施例1のコンフィギュレーション回路を2つ用いるよりも構成を簡単にすることができる。
【0063】
実施例2は2つのFPGAを同時にコンフィギュレーションできるコンフィギュレーション回路であったが、3つ以上のFPGAを同時にコンフィギュレーションできるコンフィギュレーション回路に拡張することもできる。この場合、フラッシュROMとラッチ回路の組をコンフィギュレーションするFPGAの数だけ用意し、これらの組を制御部24とカウンタ22で制御し、各ラッチ回路の出力を異なるFPGAに出力するようにすればよい。
【0064】
なお、実施例1、実施例2ではデータバス幅が2バイトのフラッシュROMを用いたが、4バイト幅等さらに広いデータバス幅を有するフラッシュROMを用いてもよい。この場合、ラッチ回路を拡張して、フラッシュROMの出力データを一度にラッチできるようにすればよい。
【0065】
また、コンフィギュレーションデータを格納するメモリとしてフラッシュROMを用いたが、その他のメモリであってもよい。要は、コンフィギュレーションデータを格納でき、データバス幅が2バイト以上のメモリであればよい。但し、フラッシュROMは比較的安価であるので、フラッシュROMを用いるとコストダウンを図ることができる。
【0066】
また、これらの実施例ではカウンタ22の下位信号をラッチ回路23、33、34に入力してバイト単位で出力するようにしたが、これらのラッチ回路にCCLKを入力するようにして、このクロックCCLKを用いてバイト単位で出力するようにしてもよい。但し、カウンタ22の下位出力を用いると、この出力でラッチを直接駆動できるので、構成を簡単にすることができる。
【0067】
さらに、ラッチ回路は実施例1、2の構成に限られることはない。要は、コンフィギュレーションデータを格納したメモリの出力データを一度にラッチし、バイト単位で順番に出力する構成であればよい。
【図面の簡単な説明】
【0068】
【図1】本発明による実施例1の構成図である。
【図2】制御部24の状態遷移図である。
【図3】実施例1の動作を説明するための波形図である。
【図4】本発明による実施例2の構成図である。
【図5】従来のコンフィギュレーションを行う回路の構成図である。
【符号の説明】
【0069】
11、40、41 FPGA
20、30 コンフィギュレーション回路
21、31、32 フラッシュROM
22 カウンタ
23、33、34 ラッチ回路
23a、23b ラッチ
23c インバータ
24 制御部
S0〜S3 ステート

【特許請求の範囲】
【請求項1】
FPGA(Field Programmable Gate Array)をコンフィギュレーションするFPGAのコンフィギュレーション回路であって、
少なくとも2バイトのデータバス幅を有し、コンフィギュレーションデータが格納されるメモリと、
クロックが入力され、前記メモリのアドレスを発生するカウンタと、
前記メモリに格納されたデータを取り込み、取り込んだデータをバイト単位でFPGAに出力するラッチ回路と、
前記FPGAのコンフィギュレーション、および前記カウンタを制御する制御部と、
を具備したことを特徴とするFPGAのコンフィギュレーション回路。
【請求項2】
前記メモリとこのメモリの出力データを取り込むラッチ回路の組を複数組具備し、これらのメモリに異なるコンフィギュレーションデータを格納すると共に、前記ラッチ回路の出力を異なるFPGAに出力するようにしたことを特徴とする請求項1記載のFPGAのコンフィギュレーション回路。
【請求項3】
前記FPGAがコンフィギュレーションを開始する前に、前記メモリに格納されているコンフィギュレーションデータの最初のデータを、前記ラッチ回路に取り込むようにしたことを特徴とする請求項1若しくは請求項2記載のFPGAのコンフィギュレーション回路。
【請求項4】
前記制御部は、
コンフィギュレーションを開始する信号が入力されると前記カウンタを動作させて前記メモリに格納された最初のコンフィギュレーションデータを前記ラッチ回路にラッチさせるステートと、
前記FPGAのコンフィギュレーション準備作業が完了するまで前記カウンタを停止させるステートと、
前記FPGAのコンフィギュレーション準備作業が完了すると、前記カウンタの動作を再開させ、前記メモリに格納されたコンフィギュレーションデータを順次前記FPGAに出力させるステートと、
を具備したことを特徴とする請求項1乃至請求項3いずれかに記載のFPGAのコンフィギュレーション回路。
【請求項5】
前記ラッチ回路には前記カウンタの下位出力信号が入力され、当該ラッチ回路は入力された下位出力信号に基づいて取り込んだデータをバイト単位で出力するようにしたことを特徴とする請求項1乃至請求項4いずれかに記載のFPGAのコンフィギュレーション回路。
【請求項6】
前記メモリはフラッシュROMであることを特徴とする請求項1乃至請求項5いずれかに記載のFPGAのコンフィギュレーション回路。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate