(57)【要約】【課題】汎用のＲＯＭなどの記憶素子やＦＰＧＡを使用したシステムにおけるコンフィグレーションデータの不正なコピーを防止するコピー防止回路装置、コピー防止方法を提供することにある。【解決手段】コピー防止回路装置は、ユーザの手元で回路構成の書き換えが可能なゲートアレイ（ＦＰＧＡ）に記憶装置から回路構成データを読み出して転送し、データ生成回路と、データ切替回路とを具備する。データ生成回路は、擬似回路構成データを生成する。データ切替回路は、データ生成回路から出力される擬似回路構成データと記憶装置から読み出される回路構成データとを切り替えてＦＰＧＡに転送する。ＦＰＧＡに設定される回路が起動されるために必要なＦＰＧＡ内のＳＲＡＭの容量より少ない回路構成データと不足分の擬似回路構成データとをＦＰＧＡに転送することにより、回路が起動できるようになる。したがって、記憶装置に格納する回路構成データは、必要最小限で済み、記憶容量を削減することが可能となる。【選択図】  図１
2006163522.tif 000002
【特許請求の範囲】
【請求項１】
ユーザの手元で回路構成の書き換えが可能なゲートアレイ（ＦＰＧＡ）に記憶装置から回路構成データを読み出して転送するコピー防止回路装置であって、
前記回路構成データの前記ＦＰＧＡへの転送を制御する制御回路と、
擬似回路構成データを生成するデータ生成回路と、
前記記憶装置から読み出される前記回路構成データと前記データ生成回路から出力される前記擬似回路構成データとを切り替えて前記ＦＰＧＡに転送するデータ切替回路と
を具備し、
前記データ切替回路は、前記ＦＰＧＡが必要とするよりも少ない前記回路構成データを前記ＦＰＧＡに転送した後、前記擬似回路構成データを前記ＦＰＧＡに転送する
コピー防止回路装置。
【請求項２】
前記データ生成回路は、予め設定されたデータに基づいて前記擬似回路構成データを生成する
請求項１に記載のコピー防止回路装置。
【請求項３】
前記データ生成回路は、前記記憶装置に格納されるデータに基づいて前記擬似回路構成データを生成する
請求項１に記載のコピー防止回路装置。
【請求項４】
前記擬似回路構成データは、前記回路構成データの少なくとも一部を含む
請求項１から請求項３のいずれかに記載のコピー防止回路装置。
【請求項５】
請求項１から請求項４のいずれかに記載のコピー防止回路装置において、
前記記憶装置は、第１回路構成データと第２回路構成データとを含む回路構成データを格納し、
前記データ切替回路は、前記記憶装置から読み出した前記第１回路構成データに続けて前記擬似回路構成データを前記ＦＰＧＡに転送し、
前記制御回路は、転送された前記第１回路構成データにより前記ＦＰＧＡ内に設定された第１回路から出力される確認信号に応答して、前記第２回路構成データを前記ＦＰＧＡに転送することを許可するか否かを決定し、前記制御回路の結果に応じて、前記データ切替回路は前記記憶装置から読み出した前記第２回路構成データに続けて前記擬似回路構成データを前記ＦＰＧＡに転送する
コピー防止回路装置。
【請求項６】
前記確認信号は、暗号化された情報を含み、
前記確認信号を解読する暗号解読回路と、
解読された前記情報に基づいて前記第１回路構成データの正当性を判定する判定回路と
をさらに具備し、
前記制御回路は、前記判定回路から出力される判定結果が正当性を確認できたことを示すとき、前記第２回路構成データを前記ＦＰＧＡに転送する
請求項５に記載のコピー防止回路。
【請求項７】
請求項５または請求項６に記載のコピー防止回路装置において、
前記回路構成データは、前記第１回路構成データと前記第２回路構成データとの間に第３回路構成データを含み、
前記回路データ生成回路は、前記第３回路構成データに基づいて前記擬似回路構成データを生成する
コピー防止回路装置。
【請求項８】
請求項５から請求項７のいずれかに記載のコピー防止回路装置において、
前記記憶装置に格納される前記回路構成データのうち前記ＦＰＧＡが必要とする量の回路構成データを読み出し、
読み出した前記ＦＰＧＡが必要とする量の回路構成データのうち前記ＦＰＧＡに転送すべき前記第１回路構成データまたは前記第２回路構成データを抽出して前記ＦＰＧＡに転送し、
前記第１回路構成データまたは前記第２回路構成データに続けて前記擬似回路構成データを前記ＦＰＧＡに転送する
請求項５から請求項７のいずれかに記載のコピー防止回路装置。
【請求項９】
ユーザの手元で回路構成の書き換えが可能なゲートアレイ（ＦＰＧＡ）と、
前記ＦＰＧＡの回路構成を定義する複数の回路構成データを格納する記憶装置と、
前記複数の回路構成データを前記ＦＰＧＡに転送するコピー防止回路装置と
を具備し、
前記コピー防止回路装置は、前記回路構成データの前記ＦＰＧＡへの転送を制御する制御回路と、擬似回路構成データを生成するデータ生成回路とを備え、
前記複数の回路構成データの転送を許可するか否かを制御するとともに、前記複数の回路構成データのうちの１つの回路構成データを前記記憶装置から読み出して前記ＦＰＧＡに転送した後、
前記擬似回路構成データを前記ＦＰＧＡに転送する
コピー防止システム。
【請求項１０】
前記複数の回路構成データのうち第１回路構成データは、符号列を有し、
前記コピー防止回路装置は、
前記第１回路構成データと前記擬似回路構成データとを前記ＦＰＧＡに転送した後、前記ＦＰＧＡから前記符号列を受信し、
受信した前記符号列に基づいて前記第１回路構成データの正当性を判定し、
前記正当性が確認できた場合に、前記制御回路は複数の回路構成データのうち第２回路構成データを読み出して前記ＦＰＧＡへの転送を許可する
請求項９に記載のコピー防止システム。
【請求項１１】
前記符号列は、前記ＦＰＧＡから暗号化されて送信される
請求項１０に記載のコピー防止システム。
【請求項１２】
前記記憶装置は、半導体記憶素子で構成される
請求項９から請求項１１のいずれかに記載のコピー防止システム。
【請求項１３】
前記コピー防止回路装置は、半導体ベンダの工場においてプログラム済みのゲートアレイにより構成される
請求項９から請求項１２のいずれかに記載のコピー防止システム。
【請求項１４】
ユーザの手元で回路構成の書き換えが可能なゲートアレイ（ＦＰＧＡ）に転送される回路構成データの不正コピーを防止するコピー防止方法であって、
記憶装置に格納される複数の回路構成データのうちの１つを前記ＦＰＧＡに転送する回路構成データ転送ステップと、
擬似回路構成データを生成するデータ生成ステップと、
前記回路構成データ転送ステップにより前記記憶装置から前記ＦＰＧＡに前記回路構成データが転送された後、前記擬似回路構成データを前記ＦＰＧＡに転送する擬似データ転送ステップと、
前記複数の回路構成データのうち他の回路構成データを前記ＦＰＧＡに転送するか否かを判定する判定ステップと
を具備するコピー防止方法。
【請求項１５】
前記複数の回路構成データは、第１の回路構成データと第２の回路構成データと含み、
前記第１の回路構成データは、符号列を含み、
前記判定ステップは、前記第１の回路構成データにより前記ＦＰＧＡに設定される第１の回路が出力する前記符号列に基づいて前記第１の回路構成データの正当性を確認する認証ステップと、
前記認証ステップにより正当性が確認できたときのみ前記第２の回路構成データを前記ＦＰＧＡに転送する第２の回路構成データ転送ステップと
を備える
請求項１４に記載のコピー防止方法。
【請求項１６】
前記符号列は、前記第１の回路から暗号化されて出力される
請求項１５に記載のコピー防止方法。
【請求項１７】
前記データ生成ステップは、予め設定されたデータに基づいて前記擬似回路構成データを生成する
請求項１４から請求項１６のいずれかに記載のコピー防止方法。
【請求項１８】
前記データ生成ステップは、前記回路構成データの少なくとも一部を含む前記擬似回路構成データを生成する
請求項１４から請求項１７のいずれかに記載のコピー防止方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム可能なゲートアレイの回路情報のコピーを防止する回路装置および回路情報のコピーを防止する方法に関する。
【背景技術】
【０００２】
短期間に装置を開発し、量産する方法として、ユーザの手元で回路構成の書き換えができるゲートアレイ、即ち、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｒｅ  Ａｒｒａｙ）が採用され、その市場が伸びている。ＦＰＧＡはプログラム素子としてＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）セルが設けられている。ＳＲＡＭセルは、電源切断によって保持しているデータが消滅する。したがって、電源投入時の起動毎にＦＰＧＡをプログラミングするコンフィグレーション動作が必要となる。コンフィグレーションに用いられる回路データは、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの記憶素子に格納されていることが多い。ＲＯＭは、ＲＯＭライタを用いて容易にコピーすることができるため、回路構成データが不正にコピーされてしまうことがある。ＦＰＧＡ、ＲＯＭ等の汎用部品は簡単に入手できる。即ち、ＦＰＧＡによって構成される装置は、短期間で開発できる反面、多大のリソースを費やして開発した装置が簡単にコピーされる危険性をはらんでいる。
【０００３】
したがって、このようなＦＰＧＡを使った装置のコピー防止として様々な技術が用いられている。特開２００３−８４８５３号公報に開示されるプログラム可能なゲートアレイのためのコピー防止システムは、ロジック素子（ＣＰＬＤ）、プログラム可能なゲートアレイ素子（ＦＰＧＡ）からなる。ロジック素子（ＣＰＬＤ）は、工場でプログラムされ、初期状態ジェネレータ、第１のシーケンスジェネレータ、暗号化素子を含む。プログラム可能なゲートアレイ素子（ＦＰＧＡ）は、プログラム可能なゲートアレイのプログラムでプログラムされる。ＦＰＧＡは、第２のシーケンスジェネレータ、第３のシーケンスジェネレータ、解読素子、およびシーケンス比較素子を含む。そして、第２のシーケンスジェネレータは、第１のシーケンスジェネレータの複製である。このシステムでは、ＣＰＬＤが初期状態を初期状態ジェネレータ中で生成する。ＣＰＬＤは、第１のシーケンスジェネレータを初期状態で初期化する。ＣＰＬＤは、その初期状態を暗号化素子中で暗号化する。ＣＰＬＤは、暗号化された初期状態をＦＰＧＡへ送信する。ＦＰＧＡは、暗号化された初期状態を解読素子中で解読する。ＦＰＧＡは、第２のシーケンスジェネレータを初期状態で初期化する。ＦＰＧＡは、呼び掛けシーケンスを第３のシーケンスジェネレータを用いて生成する。ＦＰＧＡは、呼び掛けシーケンスを第１のシーケンスジェネレータと第２のシーケンスジェネレータへ送信する。第１のシーケンスジェネレータは、第１の応答シーケンスを初期状態と呼び掛けシーケンスに基づいて生成する。第１のシーケンスジェネレータは、第１の応答シーケンスをシーケンス比較素子へ送信する。第２のシーケンスジェネレータは、第２の応答シーケンスを初期状態と呼び掛けシーケンスに基づいて生成する。第２のシーケンスジェネレータは、第２の応答シーケンスを前記シーケンス比較素子へ送信する。シーケンス比較素子は、第１と第２の応答シーケンスを比較する。シーケンス比較素子は、第１と第２の応答シーケンスが同一であるときにＦＰＧＡプログラムのオペレーションを許可する。このようにして、このプログラム可能なゲートアレイのためのコピー防止システムは、コピーを防止する。
【０００４】
また、特開２００１−３２５１５３号公報に開示される揮発性メモリを備えたフィールドプログラマブルゲートアレイの回路情報保護方法は、フィールドプログラマブルゲートアレイに回路情報を書き込む手段としてフィールドプログラマブルゲートアレイ外部に不揮発性メモリを設ける。この不揮発性メモリに暗号化された回路情報が書き込まれている。電源投入時にこの不揮発性メモリからフィールドプログラマブルゲートアレイに備えた揮発性メモリに回路情報を書き込む。フィールドプログラマブルゲートアレイは、揮発性メモリに回路情報を書き込むときに暗号化データを解読し、回路情報を保護する。
【０００５】
【特許文献１】特開２００３−８４８５３号公報
【特許文献２】特開２００１−３２５１５３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
これらの従来技術において、ＦＰＧＡをコンフィグレーションするためのデータを格納するＲＯＭや、ＦＰＧＡに特殊な機能を持たせることによりコンフィグレーションデータのコピーを防止している。そのため、ユーザにとって使い勝手のよい汎用のＲＯＭやＦＰＧＡを使用することはできない。
【課題を解決するための手段】
【０００７】
本発明の観点によれば、ユーザの手元で回路構成の書き換えが可能なゲートアレイ（ＦＰＧＡ）に記憶装置から回路構成データを読み出して転送するコピー防止回路装置は、回路構成データのＦＰＧＡへの転送を制御する制御回路と、擬似回路構成データを生成するデータ生成回路と、記憶装置から読み出される回路構成データとデータ生成回路から出力される擬似回路構成データとを切り替えてＦＰＧＡに転送するデータ切替回路とを具備し、制御回路は回路構成データのＦＰＧＡへの転送を許可するか否かを制御し、データ切替回路は、ＦＰＧＡが必要とするよりも少ない回路構成データをＦＰＧＡに転送した後、擬似回路構成データをＦＰＧＡに転送する。
【０００８】
すなわち、ＦＰＧＡへの回路構成データの転送を制御することにより、回路構成データをＦＰＧＡ内に転送すべきか否かについての判定を行なう。かくして、コピー防止回路装置を保有するシステムだけが所望の動作を行なう回路構成データをＦＰＧＡに転送することができ、所望の動作を機能させることができる。結果、システムのコピーを防止することができる。また、転送される回路構成データがＦＰＧＡに設定される回路が起動されるために必要なＦＰＧＡ内の回路データ記憶領域であるＳＲＡＭの容量より少なかったとしても、回路構成データに続き不足分の擬似回路構成データをＦＰＧＡに転送することにより、回路が起動できるようになる。したがって、記憶装置に格納する回路構成データは、必要最小限で済み、記憶容量を削減することが可能となる。
【発明の効果】
【０００９】
本発明によれば、汎用のＲＯＭなどの記憶素子やＦＰＧＡを使用したシステムにおけるシステムのコピーを防止するコピー防止回路装置、コピー防止方法を提供することができる。
【００１０】
また、本発明によれば、ユーザ回路データを記憶する記憶装置や記憶素子の容量を削減することができる。したがって、コストの低減が可能となる。
【発明を実施するための最良の形態】
【００１１】
本発明では、まず起動制御回路データが記憶素子からＦＰＧＡに転送される。起動制御回路データがＦＰＧＡに転送された後、不足分のデータはゲートアレイ内で生成されてＦＰＧＡに転送される。これによってＦＰＧＡ内のＳＲＡＭ記憶領域の全域にデータが書き込まれる。ＦＰＧＡの起動制御回路が起動されて、システムの正当性が確認される。次にユーザ回路データがＦＰＧＡに転送される。ユーザ回路データがＦＰＧＡに転送された後、不足分のデータはゲートアレイ内で生成されてＦＰＧＡに転送され、ＦＰＧＡ内のＳＲＡＭ記憶領域の全域にデータが書き込まれる。このように、システムの正当性が確認でき、さらに記憶素子内に不足分データを格納しておく必要がなくなる。
【００１２】
図１から図４を参照して発明を実施するための最良の形態を説明する。図１は、搭載されたプログラム可能なゲートアレイ（ＦＰＧＡ：Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）にプログラムするシステムの構成を示す図である。
【００１３】
ＦＰＧＡプログラムシステムは、ユーザが定義する回路がプログラムされるＦＰＧＡ３０と、ＦＰＧＡ３０に設定する回路データを格納する記録媒体であるＲＯＭ２０と、ＲＯＭ２０から回路データを読み出してＦＰＧＡ３０に書き込むゲートアレイ（ＧＡ）１０とを具備する。
【００１４】
ＦＰＧＡ３０は、プログラム素子としてＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）セルを備える。ＦＰＧＡ３０は、ＳＲＡＭの記憶領域に回路データを保持し、その回路データによって設定される回路機能の動作をする。ＳＲＡＭには、電源投入時等に外部から回路データが書き込まれる。通常そのＳＲＡＭの容量分の回路データを書き込まれなければ、その書き込まれた回路データによって設定される回路の起動がなされない。即ち、ＳＲＡＭに書き込む回路データは、ＳＲＡＭの容量分だけ必要となる。
【００１５】
ＲＯＭ２０にはＦＰＧＡ３０に設定する回路データ（ＦＰＧＡプログラムとも呼称される）が記録されている。ＲＯＭ２０には、図２に示されるように、起動制御回路データ２１とユーザ回路データ２５とが格納される。起動制御回路データ２１は、電源投入後最初にＦＰＧＡ３０に設定される起動制御回路３１の構成情報である。起動制御回路３１が動作して、システムの正当性を確認する。この起動制御回路データ２１は起動キー符号列２２を含む。一方、ユーザ回路データ２５は、ユーザが開発・設計した回路の構成情報である。したがって、そのデータ量、機能は回路毎に様々である。起動制御回路データ２１とユーザ回路データ２５は、各々の有効な回路データのみＲＯＭ２０に格納される。したがって、起動制御回路データ２１、ユーザ回路データ２５単独ではＦＰＧＡ３０のＳＲＡＭの容量を満たすことはできない。
【００１６】
さらに、起動制御回路データ２１とユーザ回路データ２５との間に境界データ２７が格納される。この境界データ２７は必須ではない。また、ＦＰＧＡ３０の回路データとして有効な回路を設定するデータでなくてもよい。このように起動制御回路データ２１とユーザ回路データ２５との間に境界データ２７を配置したり、起動制御回路データ２１とユーザ回路データ２５とを連続的に配置することにより、ＲＯＭ２０の内容を読み出して解析し、ユーザ回路データ２５だけを抽出することは困難になる。
【００１７】
ゲートアレイ１０は、制御回路１２、アドレス生成回路１３、データ生成回路１４、データ切替回路１５、起動キー情報１７、判定回路１８、解読回路１９を備える。
【００１８】
制御回路１２は、ゲートアレイ１０に内蔵される各回路を制御し、ＲＯＭ２０に格納される回路データをＦＰＧＡ３０に転送する回路データ転送を制御する。アドレス生成回路１３は、制御回路１２の指示に応答してＲＯＭ２０のアドレスを生成し、ＲＯＭ２０にアドレスａｄを供給する。データ生成回路１４は、制御回路１２の指示に応答して擬似回路データを生成し、データ切替回路１５に供給する。データ生成回路１４で生成する擬似回路データは、予め設定されたデータを用いてもよし、ＲＯＭ２０から読み出されたデータに基づいて生成してもよい。データ切替回路１５は、制御回路１２の指示に応答して、ＲＯＭ２０から読み出されるデータｄｒとデータ生成回路１４から出力されるデータとから出力すべきデータを選択してＦＰＧＡ３０に出力する。起動キー情報１７は、システムの正当性を確認するための起動キーの情報を保持し、判定回路１８に供給される。解読回路１９は、ＦＰＧＡ３０から出力される起動キー符号列を受信し、暗号化されている起動キー符号列を解読して判定回路１８に供給する。判定回路１８は、起動キー情報１７と解読回路１９から供給される起動キーを比較判定する。判定結果を制御回路１２に出力する。
【００１９】
ここで、システムの正当性が確認される起動キーについて説明する。図７は、システムの正当性を確認するときに送受する起動キー符号列データｋｙに含まれる情報５０の構成を示す。起動キー符号列データｋｙに含まれる情報５０は、起動キー５４、データ長５６を含んでいる。起動キー５４は、予め設定されたデータであり、設計回路毎などに固定的に与えられる。この起動キー５４は、ゲートアレイ１０にも起動キー情報１７に格納され、システム正当性を確認する際に比較の対象となる。データ長５６は、ユーザ回路データ２５のデータ量を示す。
【００２０】
起動キー符号列データに含まれる情報５０のうち少なくとも起動キー５４は暗号化されている。暗号化方式には、秘密鍵暗号方式、公開鍵暗号方式があるが、ここではどちらでもよい。一般的に秘密鍵暗号方式のほうが公開鍵暗号方式に比べて解読処理が軽く、解読する回路は小規模で済むことが多い。より厳密に起動キーを保護する場合は、公開鍵暗号方式にするとよい。
【００２１】
起動キー５４、データ長５６は、暗号化され、或いは暗号化データと共に送受されることにより、外部から観測可能な送受の間においてその情報が漏洩する危険性を少なくすることができる。
【００２２】
また、データ長５６は、ユーザ回路データ２５が生成されたときには判明するものであるから、起動キー符号列２２としてＲＯＭ２０に記録せずに、ゲートアレイ１０に予め組み込んでおくことも可能である。その場合、ゲートアレイ１０とＦＰＧＡ３０間において転送されることはなく、送受信時に観測されて情報が漏洩することはなくなる。
【００２３】
さらに、起動キー符号列２２は、暗号化せずに起動制御回路データ２１に組み込むこともできる。その場合、起動制御回路３１に暗号化回路を組み込み、起動キー符号列３２を暗号化してゲートアレイ１０に転送する。暗号化により送受信時に観測されて情報が漏洩することはなくなる。
【００２４】
このように構成されるコピー防止システムの動作を説明する。まず図４に示されるフローチャートを参照してゲートアレイ１０を中心とした全体の動作を説明する。ここでは、電源投入時における動作として説明するが、システムの初期化が必要な場合は、いつでもこのシーケンスを実行することができる。
【００２５】
ＦＰＧＡ３０は、電源が投入されたことを検出すると、電源投入検出信号を出力し、回路データを受信することが可能となったことを外部に通知する。一方、ゲートアレイ１０は、電源が投入されると、ＦＰＧＡ３０から出力される電源投入検出信号により、ＦＰＧＡ３０が回路データ受信モードになったことを示すまで待機する（ステップＳ４１）。
【００２６】
ＦＰＧＡ３０が電源投入検出信号により、回路データ受信モードになったことを通知すると（ステップＳ４１−ＹＥＳ）、ゲートアレイ１０は、ＦＰＧＡ３０のＳＲＡＭに設定されている回路データの消去をＦＰＧＡ３０に指示する（ステップＳ４２）。電源投入直後は、ＦＰＧＡ３０のＳＲＡＭの内容が全て消去状態であればこのステップは必要ないが、電源投入時以外の初期設定時等においては通常実行される。また、回路データ受信モードになると自動的にＳＲＡＭに格納されている回路情報を消去するようになっているＦＰＧＡの場合には実行しなくてもよい。
【００２７】
ＦＰＧＡ３０のＳＲＡＭの回路情報の消去が完了すると、ゲートアレイ１０は、ＲＯＭ２０から起動制御回路データ２１を読み出し、順次ＦＰＧＡ３０に転送してＳＲＡＭに書き込ませる（ステップＳ４３）。この手順については後述する。
【００２８】
起動制御回路データ２１が、ＦＰＧＡ３０のＳＲＡＭに転送されると、図３（ａ）に示されるように、ＦＰＧＡ３０に起動制御回路３１が設定される。ＦＰＧＡ３０は、この起動制御回路３１を起動する（ステップＳ４５）。
【００２９】
起動制御回路３１は、起動されると、回路に内蔵される起動キー符号列３２をゲートアレイ１０に転送する。ＲＯＭ２０に格納されている起動キー符号列２２が、起動制御回路３１に内蔵される起動キー符号列３２となり、起動制御回路３１がそのまま起動キー符号列３２を出力する。起動キー符号列３２は、ゲートアレイ１０に転送するときに起動制御回路３１により暗号化されるのが好ましい。起動制御回路３１により暗号化されると、ＲＯＭ２０に格納されている起動キー符号列２２と異なる値となるため、より秘匿性が高まる。
【００３０】
起動キー符号列３２は、起動制御回路３１からゲートアレイ１０に起動キー符号列データｋｙとして転送される。起動キー符号列データｋｙに含まれる情報５０は、図７に示されるように、起動キー５４、データ長５６を含んでいる。ゲートアレイ１０に予めデータ長５６が設定されている場合は、これらは転送されなくてもよい。
【００３１】
ゲートアレイ１０は、起動制御回路３１が転送する起動キー符号列データｋｙを受信する（ステップＳ４７）。ゲートアレイ１０は、暗号化された起動キー符号列データｋｙを解読回路１９で解読（復号化）し、起動キーなどの情報を取り出す（ステップＳ４８）。解読された情報は、判定回路１８により起動キー情報１７と比較され、その正当性が確認される（ステップＳ５１）。
【００３２】
判定回路１８が起動キーの情報が正当でないと判断した場合（ステップＳ５１−ＮＧ）、ユーザ回路データの転送は行わずにＦＰＧＡ起動シーケンスを終了する。即ち、ＦＰＧＡ３０にはユーザ回路データ２５が転送されない。つまり、ＦＰＧＡ３０に、所望の動作を実行させるためのユーザ回路データ２５を設定することができない。なお、ＦＰＧＡ３０に格納されている回路情報を消去してもよい。
【００３３】
判定回路１８が起動キーの情報が正当であると判断した場合（ステップＳ５１−ＯＫ）、ゲートアレイ１０はユーザ回路データ２５の転送のシーケンスに入る。ＦＰＧＡ３０のＳＲＡＭには、起動制御回路の回路データが設定されているため、まずＳＲＡＭの回路データを消去する（ステップＳ５２）。
【００３４】
ＳＲＡＭの回路データが消去されると、ゲートアレイ１０はＲＯＭ２０のユーザ回路データ２５をＦＰＧＡ３０に転送する（ステップＳ５３）。ユーザ回路データ２５が全てＦＰＧＡ３０に転送し終わると、ＦＰＧＡ３０には、図３（ｂ）に示されるように、起動制御回路３１に代わってユーザ回路３５が設定されることになる。ゲートアレイ１０は、ＦＰＧＡ３０に設定されたユーザ回路３５を起動し、ＦＰＧＡ３０はユーザが設計した動作を行う。
【００３５】
このように、ゲートアレイ１０がなければユーザ回路データ２５をＦＰＧＡ３０に転送することもできない。したがって、ゲートアレイ１０を保有していなければ、システムを機能させることができない。かくして、システムのコピーを防止することができる。
【００３６】
上記の起動制御回路データ、ユーザ回路データの転送動作について説明する。図５は、起動制御回路データ、ユーザ回路データをＲＯＭ２０から読み出し、ＦＰＧＡ３０に転送するゲートアレイ１０の動作を示すフローチャートである。
【００３７】
制御回路１２は、ＲＯＭ２０の回路データが格納されている先頭アドレスをアドレス生成回路１３に設定する（ステップＳ６１）。起動制御回路データの場合、先頭アドレスは、ユーザ回路データよりもＲＯＭ２０の先頭に近いことが好ましい。
【００３８】
アドレス生成回路１３からＲＯＭ２０のアドレスａｄが出力される。ＲＯＭ２０はそのアドレスａｄで示される位置のデータを出力する。ゲートアレイ１０はその回路データｄｒを入力する（ステップＳ６３）。
【００３９】
データ切替回路１５は、制御回路１２によりＲＯＭ２０から読み出されるデータを選択するように設定されている。ゲートアレイ１０に入力された回路データは、データ切替回路１５を介してＦＰＧＡ３０に転送される。転送された回路データｄｔは、ＦＰＧＡ３０のＳＲＡＭに格納される（ステップＳ６４）。
【００４０】
回路データをＦＰＧＡ３０に転送すると、アドレス生成回路１３は、読み出しアドレスをカウントアップし、次のデータの出力をＲＯＭ２０に指示する（ステップ６５）。
【００４１】
読み出しアドレスが回路データの範囲を越えるまで（ステップＳ６７−ＮＯ）、ステップ６３からステップ６５を繰り返す。ここでは、読み出しアドレスが回路データの最終アドレスであることを検出することにより有効データの末尾を判定している。有効データの末尾の判定は、回路データに特殊なデータ（パターン）を入れて、その特殊なデータを検出して行ってもよい。また、回路データの転送が完了しデータが出力されていないことを検出してもよい。さらに、回路データのデータ量は予め判明しているので、そのデータ量をカウンタ等でモニタして検出してもよい。
【００４２】
読み出しアドレスが回路データの範囲を越えたとき（ステップＳ６７−ＹＥＳ）、制御回路１２は、ＲＯＭ２０から回路データを読み出すことを停止し、データ切替回路１５のデータ選択をデータ生成回路１４側に設定する。
【００４３】
データ生成回路１４は、無意味なデータ（他の回路に影響を及ぼさない、例えば、全て０などのダミーデータ）を生成し、データ切替回路１５を介してＦＰＧＡ３０に転送する。ＦＰＧＡ３０は無意味なデータ（ダミーデータ）をＳＲＡＭに格納する（ステップＳ６８）。無意味なデータ（ダミーデータ）は、予めデータパターンを設定しておいてもよいし、ＲＯＭ２０に設定されるデータを使用してもよい。また、ＲＯＭ２０に格納される任意の回路データを使用してもよい。
【００４４】
ＦＰＧＡ３０のＳＲＡＭの容量分のデータが転送されるまで、データ生成回路１４は無意味なデータ（ダミーデータ）を生成し、ＦＰＧＡ３０に転送する（ステップＳ６９−ＮＯ）。
【００４５】
ＦＰＧＡ３０のＳＲＡＭの全てにデータが格納されると、ＦＰＧＡ３０のコンフィグレーション（書き込み）は終了する（ステップＳ６９）。ＦＰＧＡ３０への回路データ転送の終了は、データ生成回路１４による生成データ量のカウント値、データ切替回路１５による転送数のカウント値などに基づいて判定される。
【００４６】
このように、ゲートアレイ１０はＲＯＭ２０からＦＰＧＡ３０に回路データを転送する。ＲＯＭ２０に格納される回路データのアドレスが異なるだけで、起動制御回路の回路データも、ユーザ回路データも同じ手順で回路データが転送される。データ生成回路１４が、ＲＯＭ２０に格納される回路データで不足するデータを生成するため、ＲＯＭ２０に格納されるデータは、回路構成に有効な回路データのみでよく、ＲＯＭ容量を削減することが可能となる。
【００４７】
次に図６を参照して、このような回路データの転送動作の変形例を説明する。図６は、ＲＯＭ２０に対して出力されるアドレスが、起動制御回路データとユーザ回路データとで同じように出力され、起動制御回路データ、ユーザ回路データをＲＯＭ２０からＦＰＧＡ３０に転送するゲートアレイ１０の動作を示すフローチャートである。
【００４８】
制御回路１２は、ＲＯＭ２０の先頭アドレスをアドレス生成回路１３に設定する（ステップＳ７１）。単独のＲＯＭであれば、通常ＲＯＭ２０の先頭アドレスは、“０”である。このＲＯＭ２０の先頭アドレスは、起動制御回路データの場合もユーザ回路データの場合も、同じアドレスが設定される。
【００４９】
このＲＯＭ２０の先頭アドレスから起動制御回路データ或いは、ユーザ回路データが格納される位置までＲＯＭ２０から読み出されるデータは読み捨てられる。即ち、アドレス生成回路１３から出力されるアドレスに応答してＲＯＭ２０は、回路データｄｒを出力する。ゲートアレイ１０はＲＯＭ２０から出力される回路データを読み出す（ステップＳ７３）。アドレス生成回路１３は、制御回路１２の指示によりアドレスをカウントアップする（ステップＳ７４）。制御回路１２は、このアドレスが有効な回路データの先頭アドレスであるか否かを判定する（ステップＳ７５）。ゲートアレイ１０は、有効な回路データの先頭アドレスになるまで、ステップＳ７３からステップＳ７５まで繰り返す（ステップＳ７５−ＮＯ）。
【００５０】
ＲＯＭ２０に出力されるアドレスが有効な回路データのアドレスになると（ステップＳ７５−ＹＥＳ）、ＲＯＭ２０から読み出される回路データは、ＦＰＧＡ３０に転送されるようになる。即ち、アドレス生成回路１３から出力されるアドレスに応答してＲＯＭ２０は、回路データを出力する。その回路データは、データ切替回路１５を介してＦＰＧＡ３０に転送され、ＳＲＡＭに格納される（ステップＳ７７）。このとき、データ切替回路１５はＲＯＭ２０から読み出されるデータを選択するように制御回路１２により設定されている。次の回路データを読み出すためにアドレス生成回路１３は、制御回路１２の指示によりアドレスをカウントアップする（ステップＳ７８）。ゲートアレイ１０は、アドレスが有効な回路データの範囲を越えるまでステップＳ７７からステップＳ７９を繰り返す（ステップＳ７９−ＮＯ）。
【００５１】
アドレスが有効な回路データの範囲を越えたとき（ステップＳ７９−ＹＥＳ）、ＲＯＭ２０にはＦＰＧＡ３０に転送する有効な回路データは残っていない。したがって、これ以降ゲートアレイ１０は、ＦＰＧＡ３０のＳＲＡＭを満たすように無意味な（他の回路に影響を及ぼさない）データをＦＰＧＡ３０に転送する。一方、ゲートアレイ１０は、ＲＯＭ２０に対してアドレスを供給し、回路データを読み出すように動作する。
【００５２】
即ち、制御回路１２は、ＦＰＧＡ３０に転送するデータをデータ生成回路１４から選択するようにデータ切替回路１５を設定する。データ生成回路１４は、無意味な（他の回路に影響を及ぼさない）データを生成し、データ切替回路１５を介してＦＰＧＡ３０に転送する。ＦＰＧＡ３０は無意味なデータ（ダミーデータ）をＳＲＡＭに格納する（ステップＳ８３）。一方、アドレスはＲＯＭ２０に供給され、ＦＰＧＡ３０にダミーデータが転送されると、アドレス生成回路１３、制御回路１２の指示によりアドレスをカウントアップする（ステップＳ８４）。ＦＰＧＡ３０のＳＲＡＭの容量分のデータが転送されるまで、ステップＳ８３からステップＳ８５まで繰り返す（ステップＳ８５−ＮＯ）。
【００５３】
ＦＰＧＡ３０のＳＲＡＭの全てにデータが格納されると（ステップＳ８５−ＹＥＳ）、ＦＰＧＡ３０のプログラム（書き込み）は終了する。このとき、アドレス生成回路１３は、ＲＯＭ２０の最終アドレスまでアドレスを生成し続けてもよい。
【００５４】
このように、ＲＯＭ２０のアドレスを起動制御回路データとユーザ回路データとの転送において変えずに回路データを転送することが可能となる。また、上記ではＦＰＧＡ３０に転送するダミーデータをデータ生成回路１４で生成したが、ＲＯＭ２０から読み出した回路データ（上記においては、読み捨てをしていたデータ）を使用することも可能である。その場合、ダミーデータも回路データであるため、外部から観測しただけでは有効な回路データと無効な回路データとの見分けはできなくなる。また、回路データを格納する記憶部にパーソナルコンピュータ等を用いた場合、回路データはファイルという形態で管理されるため、データの先頭から末尾までゲートアレイ１０に転送されることが好ましい。
【００５５】
また、本実施の形態では、回路データを格納する記憶装置がＲＯＭであるものとして、アドレス生成回路１３は、設定されたアドレスからデータを受信するごとにカウントアップするように説明した。トリガを与えることにより回路データを出力するような回路や装置の場合は、アドレス生成回路１３は、アドレスを与えるのではなく、トリガとなる信号を与えればよい。
【００５６】
このように、ユーザ回路データを格納するＲＯＭの未使用領域や、ＦＰＧＡのＳＲＡＭに無意味なデータを書き込むためだけに用意されていた領域に、起動制御回路データを格納することが可能となる。そのようにできれば、起動制御回路データが必要になったからといってＲＯＭの容量を変える必要はない。即ち、回路データを格納するＲＯＭに対するコストが押さえられる。
【００５７】
このように、ＦＰＧＡに特別な機能を持たせることなく汎用ＦＰＧＡを使い、さらに、ＲＯＭに特別な機能を持たせることなく汎用ＲＯＭを使用したシステムにおいて、そのコピーを防止することができる。
【図面の簡単な説明】
【００５８】
【図１】本発明の実施の形態に係るＦＰＧＡにプログラムするシステムの構成を示す図である。
【図２】同ＲＯＭに記憶された回路データの格納状態を示す図である。
【図３】同ＦＰＧＡの設定される回路の状態を示す図である。
【図４】同ＦＰＧＡにプログラムする動作を示すフローチャートである。
【図５】同ＲＯＭから読み出し、ＦＰＧＡに転送する動作を示すフローチャートである。
【図６】同ＲＯＭから読み出し、ＦＰＧＡに転送する他の動作を示すフローチャートである。
【図７】同起動キー符号列データに含まれる情報を説明する図である。
【符号の説明】
【００５９】
１０  ゲートアレイ
１２  制御回路
１３  アドレス生成回路
１４  データ生成回路
１５  データ切替回路
１７  起動キー情報
１８  判定回路
１９  解読回路
２０  ＲＯＭ
２１  起動制御回路データ
２２  起動キー符号列
２５  ユーザ回路データ
２７  境界データ
３０  ＦＰＧＡ
３１  起動制御回路
３２  起動キー符号列
３５  ユーザ回路
５０  起動キー符号列データｋｙに含まれる情報
５４  起動キー
５６  データ長
【図１】
2006163522.tif 000003
【図２】
2006163522.tif 000004
【図３】
2006163522.tif 000005
【図４】
2006163522.tif 000006
【図５】
2006163522.tif 000007
【図６】
2006163522.tif 000008
【図７】
2006163522.tif 000009