【課題を解決するための手段】
【0012】
本発明によればこの課題は、独立請求項に記載の特徴によって解決される。従属請求項には、本発明の有利な実施形態が記載されている。
【0013】
つまり上述の課題は、以下のように構成された装置によって解決される。すなわち、第1のプログラミング可能なハードウェアデバイスのコンフィギュレーションを阻止する装置であって、この装置には、プログラミング可能なハードウェアデバイスとスイッチ素子とが設けられている。この場合、プログラミング可能なハードウェアデバイスは、プログラミング可能なハードウェアデバイスのロジックをプログラミングするように構成されたコンフィギュレーションインタフェースと、プログラミング可能なハードウェアデバイスのハードウェア周辺装置とデータ交換するように構成されたデータインタフェースと、ロジックをデバッグおよびコンフィギュレーションするように構成されたデバッグインタフェースとを備えている。さらにこの場合、スイッチ素子は、ロジック回路のコンフィギュレーションプロセスが生じたときに、デバッグインタフェースへのアクセスを阻止できるように、デバッグインタフェースと接続され構成されている。さらに1つの別の有利な実施形態によれば、プログラミング可能なハードウェアデバイスは、ロジック回路のコンフィギュレーションプロセスをシグナリングするように構成されたコンフィギュレーション監視インタフェースを備えている。
【0014】
1つの有利な実施形態によれば、本発明による装置は、第2のプログラミング可能なハードウェアデバイスを備えており、この場合、第1のプログラミング可能なハードウェアデバイスが第2のプログラミング可能なハードウェアデバイスと通信するように、データインタフェースが構成されている。本発明による装置の1つの格別有利な実施形態によれば、第1のプログラミング可能なハードウェアデバイスはFPGAであり、第2のプログラミング可能なハードウェアデバイスはFPGAまたはプロセッサである。
【0015】
したがって本発明の重要な点は、コンフィギュレーションプロセスが生じたときにデバッグインタフェースへのアクセスを阻止可能なスイッチ素子が設けられていることであり、ここで有利であるのは、コンフィギュレーションプロセスが生じたときに、デバッグインタフェースへのアクセスが阻止されるように、スイッチ素子を構成することである。つまりこの場合、コンフィギュレーションインタフェースを利用して、プログラミング可能なハードウェアデバイスのロジックをコンフィギュレーションすることができる一方、デバッグインタフェースを利用して、ロジックのデバッグも実施できるけれども、コンフィギュレーションプロセスが生じたときには、デバッグインタフェースへのアクセスを阻止することができる。
【0016】
この目的で有利であるのは、プログラミング可能なハードウェアデバイスを以下のように構成することである。すなわち、コンフィギュレーションインタフェースを介してコンフィギュレーションもしくはプログラミングが行われたときも、デバッグインタフェースを介してプログラミングもしくはコンフィギュレーションが行われたときも、コンフィギュレーションプロセスがシグナリングされるように構成するのである。別の選択肢として、コンフィギュレーションプロセスを、つまりロジックのプログラミングもしくはコンフィギュレーションを、デバッグインタフェースに伝送される制御信号に基づき識別することができ、たとえば制御信号からコンフィギュレーション命令を抽出することによって識別することができる。この目的でたとえば、適切に構成された監視ユニットを設けることができ、この監視ユニットは、コンフィギュレーション命令について制御信号をチェックする。以下では、これら2つのバリエーションすなわちコンフィギュレーション監視ユニットが設けられている構成も設けられていない構成も、同等のものとして説明する。
【0017】
コンフィギュレーションプロセスのシグナリングは、有利には論理状態0または1の出力によって行われ、あるいは立ち上がり縁または立ち下がり縁によって行われる。たとえば、プログラミング可能なハードウェアデバイスが、コンフィギュレーションインタフェースまたはデバッグインタフェースを介してプログラミングされると、つまりコンフィギュレーションプロセスが生じると、コンフィギュレーション監視インタフェースにおいて論理値0が出力され、ハードウェアデバイスのコンフィギュレーションが完了すると、論理値1が出力される。このようなケースであるならば、スイッチ素子を以下のように構成するのが有利である。すなわち、コンフィギュレーション監視インタフェースにおいて信号が論理値0であるならば、または、デバッグインタフェースに対する制御信号においてプログラミング可能なハードウェアデバイスのコンフィギュレーションプロセスが識別されると、デバッグインタフェースへのアクセスがスイッチ素子により阻止可能であるように構成され、有利には阻止されるように構成されるのである。
【0018】
有利には、プログラミング可能なハードウェアデバイスは、第1のプログラミング可能なハードウェアデバイスであり、データインタフェースは、第2のプログラミング可能なハードウェアデバイスと通信するように構成されている。格別有利には、第1のプログラミング可能なハードウェアデバイスはFPGAであり、第2のプログラミング可能なハードウェアデバイスはプロセッサである。FPGAは基本的に、従来技術により公知のフィールド・プログラマブル・ゲート・アレイとして構成することができ、つまりロジック回路をプログラミング可能もしくはコンフィギュレーション可能なディジタル技術の集積回路として構成することができる。FPGAもしくはFPGAのロジック回路は、データインタフェースを介してプロセッサと通信する。プロセッサを、従来技術により公知の任意のプロセッサとすることができる。FPGAは有利には、FPGAのコンフィギュレーションが、一方ではコンフィギュレーションインタフェースを介して、他方ではデバッグインタフェースを介して、実施可能であるように構成されている。ただし、FPGAをコンフィギュレーションするためのコンフィギュレーションユニットが、コンフィギュレーションインタフェースを介してFPGAと接続されるようにするのが好ましい。
【0019】
本発明によれば、プログラミング可能なハードウェアデバイスの許可されない誤ったプログラミングに起因する、プログラミング可能なハードウェアデバイスの誤動作、ならびにプログラミング可能なハードウェアデバイスおよびプログラミング可能なハードウェアデバイスと接続されたハードウェアたとえばプロセッサの意図しない破壊は、プログラミング可能なハードウェアデバイスのロジック回路へのコンフィギュレーションアクセスが、コンフィギュレーションインタフェースを介してのみ可能であって、デバッグインタフェースを介しては不可能であり、または特別な状況においてしか可能でないようにすることにより回避される。ただしこれと並行して、デバッグインタフェースをさらに別の用途にも利用可能であり、特に、プログラミング可能なハードウェアデバイスのロジックのデバッグにも利用することができる。換言すれば、スイッチ素子によりコントロール手段が提供され、これによって、プログラミング可能なハードウェアデバイスのコンフィギュレーションに関して、デバッグインタフェースを介したデータ伝送を制御可能であり、このコントロール手段により、プログラミング可能なハードウェアデバイスに対し不正にプログラミングが行われた場合、デバッグインタフェースへのアクセスを阻止することができ、または事前に設定されたパラメータに基づき、たとえばユーザ固有に許可することができる。
【0020】
さらに別の有利な実施形態によれば、スイッチ素子は、コンフィギュレーション監視インタフェースと以下のように接続され構成されている。すなわち、コンフィギュレーション監視インタフェースを介してコンフィギュレーションプロセスがシグナリングされたときに、デバッグインタフェースへのアクセスを阻止可能であり、有利にはこのアクセスが阻止されるように、接続され構成されている。この実施形態によれば、コンフィギュレーション監視インタフェースを介してコンフィギュレーションプロセスがシグナリングされた場合に、デバッグインタフェースへのアクセスを阻止可能であり、もしくはこのアクセスが阻止される。コンフィギュレーションプロセスを、たとえばコンフィギュレーション監視インタフェースから送出される信号の立ち上がり縁または立ち下がり縁によってシグナリングしてもよいし、あるいは論理値0から論理値1への信号変化またはこれとは逆の変化によってシグナリングしてもよい。好ましいのは、コンフィギュレーションインタフェース自体が、FPGAのロジック回路のコンフィギュレーションの変化が識別されるように構成されていることである。
【0021】
さらに別の有利な実施形態によれば、スイッチ素子は以下のように構成されている。すなわち、プログラミング可能なハードウェアデバイスのロジックにおいてコンフィギュレーションプロセスが生じたとき、またはコンフィギュレーションプロセスが識別されたとき、装置がスイッチオフされ、有利には電流および/または電圧のない状態に移行されるように構成されている。コンフィギュレーションプロセスのシグナリングは、有利にはプログラミング可能なハードウェアデバイスにより生成される信号によって行われ、この信号は、プログラミング可能なハードウェアデバイスのコンフィギュレーションまたはプログラミングの期間中または開始直後に変化し、したがってこの信号により、コンフィギュレーションプロセスの開始、進行中、および/または終了が表される。
【0022】
さらに好ましいのは、コンフィギュレーションプロセスのシグナリングが、もしくはプログラミング可能なハードウェアデバイスをコンフィギュレーションするためのプロセスの開始、実施中、および/または終了を表す相応の信号が、プログラミング可能なハードウェアデバイスのうちコンフィギュレーションできない部分によって供給されることである。つまりこのような構成であれば、プログラミング可能なハードウェアデバイスのロジック回路は、コンフィギュレーションプロセスのシグナリングが送出不可能になるようにコンフィギュレーションすることはできず、したがってコンフィギュレーションプロセスのシグナリングは、コンフィギュレーション監視インタフェースを介して必ず供給されるのである。これに対する代案として、コンフィギュレーションプロセスのシグナリングを、ロジック回路によって行うこともできるし、または外部の回路たとえばプルアップ抵抗またはプルダウン抵抗によって発生させることもできる。
【0023】
さらに別の有利な実施形態によれば、本発明による装置はコンフィギュレーションスイッチ素子を備えており、これはスイッチ素子を制御するように構成されている。このように構成すれば、たとえコンフィギュレーションプロセスがシグナリングされたとしても、コンフィギュレーションスイッチ素子によって、デバッグインタフェースを介したロジック回路のコンフィギュレーションを許可することができ、これはコンフィギュレーションスイッチ素子によるスイッチ素子の相応の制御によって可能となる。つまりこの場合、たとえば予め定められているユーザの介入操作により、本発明による装置を利用することで、デバッグインタフェースを介してFPGAのロジック回路をデバッグ可能であるだけでなく、デバッグインタフェースを介したロジック回路のコンフィギュレーションも可能であり、したがってコンフィギュレーションインタフェースに加えて、デバッグインタフェースを介してもプログラミングが可能である。
【0024】
さらに格別有利には、コンフィギュレーションスイッチ素子が、コンフィギュレーション監視インタフェースと接続されていて、コンフィギュレーションプロセスがシグナリングされると、スイッチ素子を制御してデバッグインタフェースへのアクセスを阻止するように構成されている。つまりコンフィギュレーション監視インタフェースを介してコンフィギュレーションプロセスが識別された場合、デバッグインタフェースへのアクセスを阻止するためのスイッチ素子をダイレクトに制御するのではなく、このスイッチ素子の制御をコンフィギュレーション監視インタフェースを介して行うのである。
【0025】
さらに格別好ましくは、スイッチ素子が、コンフィギュレーションスイッチ素子を介してデバッグインタフェースと接続されていて、コンフィギュレーションプロセスが生じたときに、デバッグインタフェースへのアクセスを選択的に可能または不可能にする。このように構成すれば、たとえコンフィギュレーションプロセスが発生し、その際にデバッグインタフェースへのアクセスをスイッチ素子により阻止可能であるにしても、コンフィギュレーションスイッチ素子によって、デバッグインタフェースへのアクセスを可能にすることができる。
【0026】
さらに好ましいのは、デバッグインタフェースとスイッチ素子との間にコンフィギュレーションスイッチ素子を配置し、このコンフィギュレーションスイッチ素子によって、スイッチ素子とデバッグインタフェースとの接続の許可または阻止を行えるようにすることである。さらにこの場合、コンフィギュレーションスイッチ素子によりデバッグインタフェースへ、所定の信号レベルたとえば論理値0または1を供給することもできる。さらに好ましくは、コンフィギュレーションスイッチ素子は、デバッグインタフェースへのアクセスを予め定められたパラメータに従って制御可能なロジックを備えている。さらに有利にはこのロジックは、プログラミング可能なハードウェアデバイスと、および/または第2のプログラミング可能なハードウェアデバイスと、および/またはプログラミング可能なハードウェアデバイスのための外部のコンフィギュレーションユニットと、通信コネクション可能な状態におかれている。
【0027】
本発明の1つの有利な実施形態によれば、コンフィギュレーションスイッチ素子は、デバッグインタフェースに伝送される制御信号の中からコンフィギュレーションプロセスを抽出するように構成されている。換言すれば、好ましくはコンフィギュレーションスイッチ素子は、デバッグインタフェースに伝送される制御信号を、プログラミング可能なハードウェアデバイスのコンフィギュレーションを実施させることのできるビットシーケンスについて分析するように構成されている。つまりコンフィギュレーションスイッチ素子はデバッグインタフェースを、デバッグインタフェースに送信される制御信号について監視し、プログラミング可能なハードウェアデバイスのコンフィギュレーションプロセスが制御信号によって発生するか否かについて、それらの制御信号を評価する。
【0028】
プログラミング可能なハードウェアデバイスのプログラムを書き換えようとする試みが識別されると、たとえばプログラミング可能なハードウェアデバイスのロジックが消去される前に、もしくはプログラムが書き換えられる前に、コンフィギュレーションプロセスを識別し、デバッグインタフェースへのアクセスを阻止することができる。スイッチ素子によるデバッグインタフェースのアクセスの阻止は、規定可能な期間にわたり実施できるが、あるいはさらに次のイベントが発生するまで、つまり装置のスイッチオフ/スイッチオンが発生するまで、実施することもできる。このようにすることで、プログラミング可能なハードウェアデバイスのコンフィギュレーションをデバッグインタフェースを介して変更しようとして、相次いで行われる複数の不正なアクセスを、阻止することができる。
【0029】
1つの有利な実施形態によれば、コンフィギュレーションスイッチ素子は、コンフィギュレーションプロセスが生じたときに、装置および/またはプログラミング可能なハードウェアデバイスのスイッチオフ/スイッチオン、および/またはスイッチオン状態へのリセットを行うことができるように構成されている。また、不正にプログラミングが書き換えられたとき、つまり望ましくないコンフィギュレーションプロセスが識別されたとき、プログラミング可能なハードウェアデバイスがコンフィギュレーションインタフェースを介して、初期状態または事前に記憶された状態に対応するロジック回路のコンフィギュレーションを再び取得するようにしてもよい。つまりユーザが、デバッグインタフェースを介した不正なアクセスによって、プログラミング可能なハードウェアデバイスのこれまでのコンフィギュレーションを消去してしまったならばただちに、プログラミング可能なハードウェアデバイスをこれまでのコンフィギュレーションによって自動的にプログラミングしなおすことができる。
【0030】
本発明による装置は、コンフィギュレーションインタフェースと接続されたコンフィギュレーションユニットを備えることができる。さらにこの装置を、以下のように構成することもできる。すなわち、プログラミング可能なハードウェアデバイスのリコンフィギュレーションのために、デバッグインタフェースを介した不正なアクセスが識別されたが、デバッグインタフェースへのアクセスは阻止されないように構成してもよい。このようにしてプログラミングが書き換えられたハードウェアデバイスが新たに起動された後、ハードウェアデバイスが規定どおりに動作しているか否かをチェックすることができ、たとえば、プログラミング可能なハードウェアデバイスのインタフェースに、事前に規定された信号が加わっているか否かをチェックすることができる。規定どおりに動作しているのであれば、プログラミングの書き換えを許容することができる。そうでなければ、プログラミング可能なハードウェアデバイスのコンフィギュレーションを消去し、事前に記憶されていたコンフィギュレーションを、コンフィギュレーションインタフェースを介して書き込むことができる。
【0031】
このように構成することの利点は、不適切な不正のコンフィギュレーションを実行させることはできても、本発明による装置によれば、リコンフィギュレーションが問題になるのか、または状況次第では問題にはならないのかを、本発明による装置によって即座に自動的にチェックすることができるので、通常は損傷には至らない、という点にある。リコンフィギュレーションが問題になる場合にはたとえば、プログラミング可能なハードウェアデバイスと、このような場合に損傷を受けるおそれのある他のデバイスとの結線を、損傷が回避される状態に移行させることができる。さらに、許可されていないコンフィギュレーションプロセスが識別された場合に、ユーザまたはメーカに通報して、次のステップについて判断を下せるようにすることもできる。
【0032】
さらに別の有利な実施形態によれば、コンフィギュレーションスイッチ素子が記憶装置を備えており、この記憶装置内には、コンフィギュレーションスイッチ素子を介したアクセスが可能であるのか不可能であるのかを定めた情報が格納されている。この情報は、有利にはライセンスまたはライセンスキーとして構成されており、これによって、プログラミング可能なハードウェアデバイスのコンフィギュレーション変更に対し、ユーザがデバッグインタフェースへのアクセス権を有するか否かが定められる。この場合、既述のように、プログラミング可能なハードウェアデバイスのコンフィギュレーション変更を、デバッグインタフェースにより実行可能であるか否かを、コンフィギュレーションスイッチ素子によって制御することができる。たとえば記憶装置を、ライセンスを格納可能な不揮発性メモリとすることができる。さらにここで考えられるのは、ユーザがライセンスをインターネットからダウンロードして、記憶装置に格納できるようにすることである。
【0033】
きわめて格別に好ましい実施形態によれば、コンフィギュレーションスイッチ素子は、CPLDとして、FPGAとして、プロセッサとして、またはここに挙げたプログラミング可能なハードウェアデバイスの組み合わせとして、構成されている。さらにコンフィギュレーションスイッチ素子を、機械的なジャンパまたは切替装置として、あるいはプルアップ抵抗および/またはプルダウン抵抗といった他の部品として、構成することもできる。
【0034】
1つの有利な実施形態によれば、コンフィギュレーション監視インタフェースは、データインタフェースの一部分として構成されており、プログラミング可能なハードウェアデバイスは、データインタフェースのこの一部分にコンフィギュレーションプロセスをシグナリングするロジックを備えている。たとえば従来技術により知られているFPGAは、別個に実装されたコンフィギュレーション監視インタフェースを必ずしも備えているわけではない。そのようなケースでは、たとえばデータインタフェースの1つのピンを、コンフィギュレーション監視インタフェースの機能のために利用することができる。通常、従来技術により知られているFPAGの場合、プログラミングプロセス中、データインタフェースは、特にデータインタフェースの出力端子は、規定の値をとるようになっており、たとえば論理値1、論理値0、weak-highインピーダンス、weak-lowインピーダンス、またはhighインピーダンスをとるようになっている。ここで挙げた構成によれば、コンフィギュレーションプロセスを識別し、それに応じてコンフィギュレーション監視インタフェースを介してシグナリングを行う目的で、この信号を利用することができる。ここで考えられる1つの実施形態によれば、プログラミング可能なハードウェアデバイスはそのデータインタフェースの出力を、プログラミングプロセス中、weak-high状態に移行させ、この状態に基づき1つの出力端子において、このweak-high状態から論理値1の信号が識別され、コンフィギュレーションプロセスを検出するためにこの信号を利用する。
【0035】
さらに別の有利な実施形態によれば、コンフィギュレーション監視インタフェースは、データインタフェースの一部分として構成されており、プログラミング可能なハードウェアデバイスは、データインタフェースのこの一部分にコンフィギュレーションプロセスの完了をシグナリングするロジックを備えている。ここで考えられる1つの実施形態によれば、このロジックは、予め定められた複数のデータ出力端子から、論理値1および論理値0のタイプから成る信号の所定の組み合わせを出力し、信号のこの組み合わせの出力が、コンフィギュレーションプロセスの完了を識別するために利用される。このようにすることで本発明による装置を、従来技術により知られているプログラミング可能な任意のハードウェアデバイスに実装することもでき、その際、プログラミング可能なハードウェアデバイスに独立した専用のコンフィギュレーション監視インタフェースを設ける必要がない。
【0036】
基本的に、スイッチ素子を任意に構成することができ、特に好ましいのは、スイッチ素子を切替可能なバスドライバとして構成することである。その際にさらに好ましいのは、コンフィギュレーションプロセスのシグナリングを、独立した専用のコンフィギュレーション監視インタフェースを介して出力されるコンフィギュレーション信号によって実現することであり、たとえばAltera Corporation社のFPGAにおけるCONF_DONE信号とINIT_DONE信号とによって実現することである。さらに別の有利な実施形態によれば、デバッグインタフェースは、JTAGインタフェースとして構成されており、有利にはIEEE標準1149.1に準拠したJTAGインタフェースとして構成されている。さらに好ましいのは、データインタフェースをデータバスとして構成することである。
【0037】
この実施形態によれば、過電圧、極性反転など損傷を及ぼす外部の影響からJTAGインタフェースを保護する目的で、バスドライバを介してJTAGインタフェースを接続することができる。好ましくは、バスドライバはOutputEnable入力端子を備えており、この入力端子を介してバスドライバの出力ドライバを、非アクティブ状態にすることができる。本発明の1つの有利な実施形態によれば、ハードウェアデバイスのコンフィギュレーション信号が、バスドライバのOutputEnable入力端子に供給され、それによって、プログラミング可能なハードウェアデバイスのコンフィギュレーションが完了したときにはじめて、ユーザはJTAGインタフェースにアクセスすることができる。この状態においてユーザは、プログラミング可能なハードウェアデバイスを、JTAGインタフェースを介してデバッグすることができる。
【0038】
プログラミング可能なハードウェアデバイスをコンフィギュレーションしようという試みがなされると、コンフィギュレーション信号がアクティブになり、その結果、バスドライバにより接続が分離され、プログラミング可能なハードウェアデバイスがリコンフィギュレーションされて、場合によっては損傷を引き起こすようなコンフィギュレーションになってしまうことが阻止されるようになる。本発明による装置のサプライヤが、そのコンフィギュレーションを作成するための開発フェーズ中、JTAGインタフェースに制約なくアクセスできるようにする目的で、たとえばジャンパまたは0Ω抵抗あるいはコンフィギュレーションスイッチ素子を介して、接続を確立することができる。既述のように、JTAGインタフェースへのアクセスを、CPLD、FPGA、プロセッサ、またはここで挙げたタイプのプログラミング可能なハードウェアデバイスの2つの組み合わせを介してコントロールすることができ、つまりたとえばJTAGインタフェースのOutputEnable信号を制御するために、コントロールすることができる。
【0039】
既に述べた別の構成を利用することで、JTAGインタフェースによってなされるプログラミング可能なハードウェアデバイスのデバッグを、ライセンスとして記憶された情報を用いることによって、対応するライセンスを取得した一部のユーザに対してのみ、ソフトウェア方式で許可することができる。さらにこのような許可を、いかなる保証を受ける権利も手放す代わりに、JTAGインタフェースへの無制限のアクセスを取得したユーザに対してのみ、許可するようにしてもよい。
【0040】
さらに本発明の課題は、プログラミング可能なハードウェアデバイスのコンフィギュレーションを阻止する以下のような方法によって解決される。この場合、プログラミング可能なハードウェアデバイスは、そのロジックをコンフィギュレーションするために構成されたコンフィギュレーションインタフェースと、プログラミング可能なハードウェアデバイスがハードウェア周辺装置とデータ交換するために構成されたデータインタフェースと、ロジックをデバッグおよびコンフィギュレーションするために構成されたデバッグインタフェースと、ロジックのコンフィギュレーションプロセスをシグナリングするために構成されたコンフィギュレーション監視インタフェースとを備えており、この方法には、コンフィギュレーションプロセスがシグナリングされると、デバッグインタフェースへのアクセスを阻止するステップが設けられている。
【0041】
このように構成することによって、デバッグインタフェースへのユーザのアクセスを細かく制御することができる。本発明による方法のそのほかの実施形態については、これまで述べてきた装置の実施形態を類推すれば、当業者に明らかである。
【0042】
次に、図面を参照しながら有利な実施形態に基づき本発明について詳しく説明する。