(57)【要約】【課題】高集積プログラマブル・デバイスにおいて、デバイスの状態を管理することなく、プログラムの時間を短縮する。【解決手段】プログラムしようとするデバイスのインターコネクトとプログラム・データの差分を取り、異なるインターコネクトのみプログラムする。デバイスにインターコネクト状態を読み出す機能を付けると、集積度やセキュリティで問題になるため、デバイスのインターコネクトの状態は、外部のデータベースに蓄積する。デバイスのインターコネクトの状態とデータベースのデータを関連付けるため、デバイスにＰＲＯＧＲＡＭ＿ＩＤレジスタを内蔵する。【選択図】図３
2010114772.tif 000002
【特許請求の範囲】
【請求項１】
差分プログラマブル・デバイスとして機能する半導体装置であって、
複数のインターコネクトと、
前記複数のインターコネクトの各々の接続／切断を管理し、ホスト側からの「ＰＲＯＧＲＡＭ＿ＩＤ（識別情報）」の問い合わせに対して応答し、前記応答の結果、前記ホスト側で判断されたデバイスの状態に基づいて、前記ホスト側から、前記デバイスの状態を示す「ＰＲＯＧＲＡＭ＿ＤＡＴＡ（プログラム・データ）」の差分を示す書込みＤＡＴＡを取得し、前記取得された書込みＤＡＴＡの値に応じて、前記各インターコネクトに対し、「ＣＯＮＮＥＣＴ（結線）」／「ＤＩＳＣＯＮＮＥＣＴ（非結線）」／「ＮＯ＿ＯＰＥＲＡＴＩＯＮ（何もしない）」のいずれかの動作を行い、前記ホスト側から、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ（プログラム・データ）」と対応付けられてデータベースに登録されている「ＰＲＯＧＲＡＭ＿ＩＤ」を取得し、前記取得された「ＰＲＯＧＲＡＭ＿ＩＤ」をＰＲＯＧＲＡＭ＿ＩＤレジスタに格納して保持するプログラム回路と
を具備する
半導体装置。
【請求項２】
請求項１に記載の半導体装置であって、
前記プログラム回路は、前記ＰＲＯＧＲＡＭ＿ＩＤレジスタに「ＰＲＯＧＲＡＭ＿ＩＤ」が保持されていない場合、前記応答として、「ＰＲＯＧＲＡＭ＿ＩＤ」の初期値を前記ホスト側に通知し、前記ホスト側から、前記各インターコネクトが全て「ＤＩＳＣＯＮＮＥＣＴ（非結線）」であるものとして、「０＝ＤＩＳＣＯＮＮＥＣＴ」が「ｘ＝ＮＯ＿ＯＰＥＲＡＴＩＯＮ」に置換された書込みＤＡＴＡを取得する
半導体装置。
【請求項３】
請求項１又は２に記載の半導体装置であって、
前記プログラム回路は、前記ＰＲＯＧＲＡＭ＿ＩＤレジスタに「ＰＲＯＧＲＡＭ＿ＩＤ」が保持されている場合、前記応答として、前記ＰＲＯＧＲＡＭ＿ＩＤレジスタに保持されている「ＰＲＯＧＲＡＭ＿ＩＤ」を前記ホスト側に通知し、前記ホスト側から、前記通知された「ＰＲＯＧＲＡＭ＿ＩＤ」をキーにして前記データベースから読み出された「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」に基づいて生成された書込みＤＡＴＡを取得する
半導体装置。
【請求項４】
請求項３に記載の半導体装置であって、
前記プログラム回路は、前記ホスト側から、前記生成された「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」と前記データベースから読み出された「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」とで同じデータが「ｘ＝ＮＯ＿ＯＰＥＲＡＴＩＯＮ」に置換された書込みＤＡＴＡを取得する
半導体装置。
【請求項５】
請求項１乃至４のいずれか一項に記載の半導体装置であって、
前記プログラム回路は、前記ホスト側で、前記ＰＲＯＧＲＡＭ＿ＩＤレジスタに保持されている「ＰＲＯＧＲＡＭ＿ＩＤ」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を前記データベースから読み出すことができなかった場合、前記ホスト側から、値が全て「０＝ＤＩＳＣＯＮＮＥＣＴ」である書込みＤＡＴＡ、及び「ＰＲＯＧＲＡＭ＿ＩＤ」の初期値を取得し、前記取得された書込みＤＡＴＡの値に応じて、前記各インターコネクトに対し、「ＤＩＳＣＯＮＮＥＣＴ」の動作を行い、前記ＰＲＯＧＲＡＭ＿ＩＤレジスタに、前記取得された「ＰＲＯＧＲＡＭ＿ＩＤ」の初期値を書き込み、前記デバイスの状態を初期状態にする
半導体装置。
【請求項６】
差分プログラマブル・デバイスとして機能する半導体装置に対する差分プログラム実施方法であって、
ホスト側で、デバイスの状態を示す「ＰＲＯＧＲＡＭ＿ＤＡＴＡ（プログラム・データ）」と「ＰＲＯＧＲＡＭ＿ＩＤ（識別情報）」を生成するステップと、
前記ホスト側で、前記生成された「ＰＲＯＧＲＡＭ＿ＩＤ」をキーにして、前記生成された「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」をデータベースに登録するステップと、
前記ホスト側で、前記デバイス内のＰＲＯＧＲＡＭ＿ＩＤレジスタから「ＰＲＯＧＲＡＭ＿ＩＤ」を読み出すステップと、
前記ホスト側で、前記読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に基づいて、前記デバイスの状態を判断するステップと、
前記ホスト側で、前記デバイスの状態に基づいて、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」の差分を示す書込みＤＡＴＡを生成するステップと、
前記ホスト側で、前記書込みＤＡＴＡを前記デバイス側に転送するステップと、
前記デバイス側で、前記書込みＤＡＴＡの値に応じて、前記デバイスの複数のインターコネクトの各々に対し、「ＣＯＮＮＥＣＴ（結線）」／「ＤＩＳＣＯＮＮＥＣＴ（非結線）」／「ＮＯ＿ＯＰＥＲＡＴＩＯＮ（何もしない）」のいずれかの動作を行うステップと、
前記ホスト側で、前記デバイス側への前記書込みＤＡＴＡの転送が完了したら、前記生成された「ＰＲＯＧＲＡＭ＿ＩＤ」を前記デバイス側に転送するステップと、
前記デバイス側で、前記ＰＲＯＧＲＡＭ＿ＩＤレジスタに、前記転送された「ＰＲＯＧＲＡＭ＿ＩＤ」を書き込むステップと
を含む
差分プログラム実施方法。
【請求項７】
請求項６に記載の差分プログラム実施方法であって、
前記ホスト側で、前記読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に基づいて前記デバイスの状態を判断する際に、「ＰＲＯＧＲＡＭ＿ＩＤ」の初期値を受け取った場合、前記デバイスが初期状態であり、前記各インターコネクトが「ＤＩＳＣＯＮＮＥＣＴ（非結線）」であると判断するステップと、
前記ホスト側で、前記書込みＤＡＴＡを生成する際に、前記デバイスが初期状態であると判断されている場合、前記各インターコネクトの状態を示す「ＤＥＶＩＣＥ＿ＤＡＴＡ」の値は全て「０＝ＤＩＳＣＯＮＮＥＣＴ」とみなし、前記書込みＤＡＴＡの値の「０＝ＤＩＳＣＯＮＮＥＣＴ」を「ｘ＝ＮＯ＿ＯＰＥＲＡＴＩＯＮ」に置換するステップと
を更に含む
差分プログラム実施方法。
【請求項８】
請求項６又は７に記載の差分プログラム実施方法であって、
前記ホスト側で、前記読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に基づいて前記デバイスの状態を判断する際に、前記デバイスは初期状態ではないと判断した場合、前記読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を前記データベースから読み出すステップと、
前記ホスト側で、前記データベースから取得した「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を、現在の「ＤＥＶＩＣＥ＿ＤＡＴＡ」とみなし、前記データベースから取得した「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」に基づいて、前記書込みＤＡＴＡを生成するステップと
を更に含む
差分プログラム実施方法。
【請求項９】
請求項８に記載の差分プログラム実施方法であって、
前記ホスト側で、前記書込みＤＡＴＡを生成する際に、前記生成された「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」と前記データベースから取得した「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」とで同じデータを、「ｘ＝ＮＯ＿ＯＰＥＲＡＴＩＯＮ」に置換するステップ
を更に含む
差分プログラム実施方法。
【請求項１０】
請求項６乃至９のいずれか一項に記載の差分プログラム実施方法であって、
前記ホスト側で、前記読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に基づいて前記デバイスの状態を判断する際に、前記読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を前記データベースから読み出すことができなかった場合、全て「０＝ＤＩＳＣＯＮＮＥＣＴ」である書込みＤＡＴＡ、及び「ＰＲＯＧＲＡＭ＿ＩＤ」の初期値を前記デバイス側に転送するステップと、
前記デバイス側で、前記転送された書込みＤＡＴＡの値に応じて、前記各インターコネクトに対し、「ＤＩＳＣＯＮＮＥＣＴ」の動作を行い、前記ＰＲＯＧＲＡＭ＿ＩＤレジスタに、前記転送された「ＰＲＯＧＲＡＭ＿ＩＤ」の初期値を書き込み、前記デバイスの状態を初期状態にするステップと
を更に含む
差分プログラム実施方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置に関し、特に差分プログラマブル・デバイスとして機能する半導体装置に関する。
【背景技術】
【０００２】
図１は、一般的なＣＰＬＤ（Ｃｏｍｐｌｅｘ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）の構造の例である。
【０００３】
一般的なＣＰＬＤでは、インターコネクト（ＶＩＡ）を接続／切断することで、デバイスのプログラムを行う。インターコネクトは、不揮発である。また、再プログラムの際は、デバイスを初期化し、再書き込みを行う。この場合、１回目と２回目以降で、プログラム時間の差はほとんどない。
【０００４】
関連する技術として、特表２００１−５０４９５８号公報（特許文献１）にロジックデバイスのアレイを構成するための方法及びシステムが開示されている。
この関連技術では、「常にホストでデバイスの状態を管理・把握している」という前提の下で、ロジック回路の配置及び経路付けによって設計データベースを生成する。この設計データベースは、配置及び経路付け動作によって作り出されたロジックセルの構成を修正するためにアクセスされる。この修正に基づいて、修正されたロジックセルを実現するビット列のみを含む部分構成ビットストリームが作り出される。部分構成ビットストリームは、ゲートアレイにダウンロードされる。これによって、ゲートアレイの部分構成を実現する。代替的な実施例では、この関連技術に従ったシステムは、アプリケーションプログラムがプログラマブルゲートアレイを含むシステム中で実行してオンザフライのアレイを再構成することを可能にするソフトウェアユーティリティを含む。このユーティリティは実時間中に検出された外部状況に応答して設計を修正するルーチンを含む。このアプローチにより、１組の予め定められた代替する設計を提供する必要がなくなり、アプリケーションはそれ自身で判断を下すことができるようになる。
【０００５】
図２は、従来の差分プログラムの手法における処理手順に関する例である。この場合、デバイスの状態が既知であることが前提である。
【０００６】
この差分プログラムの手法では、初期設計を入力する（ステップＰ１）。次に、入力された初期設計に基づいて、ロジック回路の配置及び経路付けを実行し（ステップＰ２）、実行結果に基づいて、第１の設計データベースを生成し（ステップＰ３）、第１の構成ビットストリームを生成する（ステップＰ４）。このとき、構成された第１の構成ビットストリームを、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）にダウンロード（ステップＰ５ａ）、若しくは、保存する（ステップＰ５ｂ）。初期設計を修正した場合（ステップＰ６）、修正された初期設計に基づいて、ロジック回路の配置及び経路付けを実行し（ステップＰ７）、実行結果に基づいて、第２の設計データベースを生成し（ステップＰ８）、第２の構成ビットストリームを生成する（ステップＰ９）。そして、第１の構成ビットストリームと第２の構成ビットストリームとの相違（差分）として部分ビットストリームを生成する（ステップＰ１０）。このとき、部分ビットストリームを、ＦＰＧＡにダウンロードするようにしても良い（ステップＰ１１）。部分ビットストリームをＦＰＧＡにダウンロードするか否かは、任意である。他に初期設計を修正する場合、上記の修正処理を繰り返す（ステップＰ１２）。
【０００７】
しかし、高集積のプログラマブル・デバイスでは、インターコネクトの数が多くなり、プログラム時間が長くなる。プログラム時間の長さの目安としてｍｓｅｃ（ミリ秒）オーダーで測定すると好適である。特に一つのインターコネクトのプログラムに時間が掛かる場合、この問題が顕在化する。
【０００８】
図２の差分プログラムの手法は、デバイスの状態が既知でない場合や、複数の状態のデバイスが混在している場合には使えない。
【０００９】
【特許文献１】特表２００１−５０４９５８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明の目的は、プログラムしようとするデバイスのインターコネクトとプログラム・データの差分を取り、異なるインターコネクトのみプログラムする半導体装置を提供することである。
【課題を解決するための手段】
【００１１】
本発明の半導体装置は、差分プログラマブル・デバイスとして機能する半導体装置であって、複数のインターコネクト（ＶＩＡ）と、プログラム回路とを具備する。プログラム回路は、複数のインターコネクトの各々の接続／切断を管理し、ホスト側からの「ＰＲＯＧＲＡＭ＿ＩＤ（識別情報）」の問い合わせに対して応答し、応答の結果、ホスト側で判断されたデバイスの状態に基づいて、ホスト側から、デバイスの状態を示す「ＰＲＯＧＲＡＭ＿ＤＡＴＡ（プログラム・データ）」の差分を示す書込みＤＡＴＡを取得する。このとき、プログラム回路は、取得された書込みＤＡＴＡの値に応じて、複数のインターコネクトの各々に対し、「ＣＯＮＮＥＣＴ（結線）」／「ＤＩＳＣＯＮＮＥＣＴ（非結線）」／「ＮＯ＿ＯＰＥＲＡＴＩＯＮ（何もしない）」のいずれかの動作を行う。その後、プログラム回路は、ホスト側から、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ（プログラム・データ）」と対応付けられてデータベースに登録されている「ＰＲＯＧＲＡＭ＿ＩＤ」を取得し、取得された「ＰＲＯＧＲＡＭ＿ＩＤ」をＰＲＯＧＲＡＭ＿ＩＤレジスタに格納して保持する。
【００１２】
本発明の差分プログラム実施方法は、差分プログラマブル・デバイスとして機能する半導体装置に対する差分プログラム実施方法であって、以下の手順で処理を行う。まず、ホスト側で、デバイスの状態を示す「ＰＲＯＧＲＡＭ＿ＤＡＴＡ（プログラム・データ）」と「ＰＲＯＧＲＡＭ＿ＩＤ（識別情報）」を生成する。次に、ホスト側で、生成された「ＰＲＯＧＲＡＭ＿ＩＤ」をキーにして、生成された「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」をデータベースに登録する。次に、ホスト側で、デバイス内のＰＲＯＧＲＡＭ＿ＩＤレジスタから「ＰＲＯＧＲＡＭ＿ＩＤ」を読み出す。次に、ホスト側で、読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に基づいて、デバイスの状態を判断する。次に、ホスト側で、デバイスの状態に基づいて、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」の差分を示す書込みＤＡＴＡを生成する。次に、ホスト側で、書込みＤＡＴＡをデバイス側に転送する。次に、デバイス側で、書込みＤＡＴＡの値に応じて、デバイスの複数のインターコネクトの各々に対し、「ＣＯＮＮＥＣＴ（結線）」／「ＤＩＳＣＯＮＮＥＣＴ（非結線）」／「ＮＯ＿ＯＰＥＲＡＴＩＯＮ（何もしない）」のいずれかの動作を行う。次に、ホスト側で、デバイス側への書込みＤＡＴＡの転送が完了したら、生成された「ＰＲＯＧＲＡＭ＿ＩＤ」をデバイス側に転送する。次に、デバイス側で、デバイス内のＰＲＯＧＲＡＭ＿ＩＤレジスタに、転送された「ＰＲＯＧＲＡＭ＿ＩＤ」を書き込む。
【発明の効果】
【００１３】
デバイスの状態を管理することなく、プログラムの時間を短縮できる。
【発明を実施するための最良の形態】
【００１４】
以下に、本発明の実施形態について添付図面を参照して説明する。
図３に、プログラマブル・ロジック・デバイス（ＰＬＤ：Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）の構成の具体例を示す。
本発明に係るシステムは、デバイス１０と、ホスト２０と、データベース３０を含む。
【００１５】
デバイス１０は、プログラマブル・ロジック・デバイス（ＰＬＤ）である。ここでは、デバイス１０は、差分プログラマブル・デバイスとして機能する半導体装置とする。
【００１６】
デバイス１０は、インターコネクト（ＶＩＡ）１１と、プログラム回路１２と、第１論理回路（ＲＯＷ）１３と、第２論理回路（ＣＯＬＵＭＮ）１４を備える。
【００１７】
インターコネクト１１は、不揮発である。インターコネクト１１は、接続／切断の時間が長い。ここでは、接続／切断の時間の目安として、１ｍｓｅｃ以上を想定している。また、インターコネクト数の目安として、１Ｍ（百万）個以上を想定している。
【００１８】
プログラム回路１２は、第１論理回路１３や第２論理回路１４を介して、インターコネクト１１を接続／切断する。プログラム回路１２は、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１を持つ。ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１は、「ＰＲＯＧＲＡＭ＿ＩＤ（識別情報）」を保持する。「ＰＲＯＧＲＡＭ＿ＩＤ」は、プログラムの実行回数により異なる識別情報である。例えば、「ＰＲＯＧＲＡＭ＿ＩＤ」は、1回目に実行した場合と、２回目に実行した場合とで異なる。なお、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１は、外部から読み出し可能である。プログラム回路１２の例として、制御回路（Ｃｏｎｔｒｏｌｌｅｒ）等が考えられる。
【００１９】
第１論理回路１３は、インターコネクト１１の集合により形成される行列の行方向に信号を供給する。ここでは、第１論理回路１３は、プログラム回路１２により制御される。第１論理回路１３の例として、ワード線駆動回路等が考えられる。
【００２０】
第２論理回路１４は、インターコネクト１１の集合により形成される行列の列方向に信号を供給する。ここでは、第２論理回路１４は、プログラム回路１２により制御される。第２論理回路１４の例として、ビット線駆動回路等が考えられる。
【００２１】
ホスト２０は、デバイス１０のプログラムを行う。また、ホスト２０は、プログラムを実行する毎に、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ（プログラム・データ）」と「ＰＲＯＧＲＡＭ＿ＩＤ（識別情報）」を生成する。「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」は、インターコネクト１１の状態を直接的又は間接的に示すデータである。なお、ホスト２０は、直接、インターコネクト１１の状態を読み出せなくても良い。ホスト２０は、直前にプログラムを実行した際に、「ＰＲＯＧＲＡＭ＿ＩＤ」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を生成し、「ＰＲＯＧＲＡＭ＿ＩＤ」をＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１に記憶し、次にプログラムを実行した際に、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１から「ＰＲＯＧＲＡＭ＿ＩＤ」を読み出し、「ＰＲＯＧＲＡＭ＿ＩＤ」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」に基づいて、インターコネクト１１の状態を判断する。ホスト２０の例として、ＰＣ（パソコン）、シンクライアント端末／サーバ、ワークステーション、メインフレーム、スーパーコンピュータ等のコンピュータを想定している。
【００２２】
データベース３０は、ホスト２０から受け取ったデータを格納し、格納されたデータをホスト２０に提供する。ここでは、データベース３０は、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」と「ＰＲＯＧＲＡＭ＿ＩＤ」を対応付けて格納する。なお、データベース３０は、複数のホスト２０により共有されていても良い。また、データベース３０は、ＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  ＤａｔａＢａｓｅ）でも良い。データベース３０の例として、メモリ等の半導体記憶装置、ハードディスク等の外部記憶装置（ストレージ）、又は、記憶媒体（メディア）等が考えられる。また、データベース３０は、ホスト２０とネットワークを介して接続された外部のストレージサーバや、ホスト２０の周辺機器でも良い。
【００２３】
但し、実際には、これらの例に限定されない。
【００２４】
図４を参照して、１回目のプログラム工程の流れについて説明する。
この例では、デバイス１０において、インターコネクト１１は、全てＤＩＳＣＯＮＮＥＣＴ（非結線）である。また、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１は、「１６ｂｉｔ」で、初期状態は「００００」とする。すなわち、「ＰＲＯＧＲＡＭ＿ＩＤ」の初期値は「００００」である。なお、「ＰＲＯＧＲＡＭ＿ＩＤ」の値のとり得る範囲は、「００００」〜「ＦＦＦＦ」である。
【００２５】
（１）ステップＳ１０１
ホスト２０は、図５に示すように、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」と「ＰＲＯＧＲＡＭ＿ＩＤ」を生成する。「ＰＲＯＧＲＡＭ＿ＩＤ」は、ユニーク（一意的）であるものとする。この例では、「ＰＲＯＧＲＡＭ＿ＩＤ＝Ｅ６Ａ８」とする。
【００２６】
（２）ステップＳ１０２
ホスト２０は、「ＰＲＯＧＲＡＭ＿ＩＤ」をキーにして、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」をデータベース３０に登録する。
【００２７】
（３）ステップＳ１０３
ホスト２０は、図６に示すように、デバイス１０内のＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１から「ＰＲＯＧＲＡＭ＿ＩＤ」を読み出す。すなわち、ホスト２０は、デバイス１０に対し、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１に保持されている「ＰＲＯＧＲＡＭ＿ＩＤ」を問い合わせる。ここでは、初期状態なので、デバイス１０は、ホスト２０に対し、「ＰＲＯＧＲＡＭ＿ＩＤ」の初期値「００００」を返す。
【００２８】
（４）ステップＳ１０４
ホスト２０は、「ＰＲＯＧＲＡＭ＿ＩＤ」に基づいて、デバイス１０の状態、すなわち、デバイス１０の全てのインターコネクト１１の接続状態を判断する。ここでは、ホスト２０は、「ＰＲＯＧＲＡＭ＿ＩＤ」の初期値「００００」を受け取ると、デバイス１０が初期状態、すなわち、デバイス１０のインターコネクト１１が全て「ＤＩＳＣＯＮＮＥＣＴ（非結線）」であると判断する。
【００２９】
（５）ステップＳ１０５
ホスト２０は、図７に示すように、デバイス１０の状態に基づいて、書込みＤＡＴＡ（書込みデータ）を生成する。このとき、ホスト２０は、デバイス１０の状態を初期状態と認識（判断）しているため、現在のデバイス１０の各インターコネクト１１の状態を示す「ＤＥＶＩＣＥ＿ＤＡＴＡ」の値は全て０（「０＝ＤＩＳＣＯＮＮＥＣＴ」）とみなし、書込みＤＡＴＡを生成する。この場合、書込みＤＡＴＡは、全て０で表される。ここでは、ホスト２０は、前回プログラムを実行した際に生成された「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を、「ＤＥＶＩＣＥ＿ＤＡＴＡ」とみなす。ホスト２０は、デバイス１０が初期状態の場合、直前に生成された「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」が存在しないため、「ＤＥＶＩＣＥ＿ＤＡＴＡ」の値は全て０とみなす。このとき、ホスト２０は、事前に、「ＰＲＯＧＲＡＭ＿ＩＤ＝００００」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を全て０として、データベース３０に登録していても良い。なお、「０＝ＤＩＳＣＯＮＮＥＣＴ」の書き込み動作は不要なため、ホスト２０は、書込みＤＡＴＡの値の「０＝ＤＩＳＣＯＮＮＥＣＴ」を「ｘ＝ＮＯ＿ＯＰＥＲＡＴＩＯＮ」に置換する。すなわち、書込みＤＡＴＡは、全てｘで表される。ここでは、書込みＤＡＴＡは、現在の「ＤＥＶＩＣＥ＿ＤＡＴＡ」から変更されるデータ（「ＰＲＯＧＲＡＭ＿ＤＡＴＡ（プログラム・データ）」の差分）を示す。書込みＤＡＴＡにおいて、現在の「ＤＥＶＩＣＥ＿ＤＡＴＡ」から変更されないデータは、全て「ｘ＝ＮＯ＿ＯＰＥＲＡＴＩＯＮ」となる。例えば、現在の「ＤＥＶＩＣＥ＿ＤＡＴＡ」が「００００」の際に、「ＤＥＶＩＣＥ＿ＤＡＴＡ」を「０００１」に変更したい場合、書込みＤＡＴＡは、「ｘｘｘ１」となる。
（６）ステップＳ１０６
ホスト２０は、書込みＤＡＴＡをデバイス１０に転送する。
【００３０】
（７）ステップＳ１０７
デバイス１０のプログラム回路１２は、書込みＤＡＴＡの値に応じて、各インターコネクト１１に対し、「ＣＯＮＮＥＣＴ（結線）」／「ＤＩＳＣＯＮＮＥＣＴ（非結線）」／「ＮＯ＿ＯＰＥＲＡＴＩＯＮ（何もしない）」のいずれかの動作を行う。なお、ホスト２０は、「ｘ＝ＮＯ＿ＯＰＥＲＡＴＩＯＮ」の場合、何もせずスキップする。
【００３１】
（８）ステップＳ１０８
ホスト２０は、デバイス１０への書込みが完了したら、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１に「ＰＲＯＧＲＡＭ＿ＩＤ」を書き込む。ここでは、ホスト２０は、デバイス１０への書込みＤＡＴＡの転送が完了したら、デバイス１０のプログラム回路１２に、「ＰＲＯＧＲＡＭ＿ＩＤ」の値として、「Ｅ６Ａ８」を転送する。プログラム回路１２は、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１に、ホスト２０から転送された「ＰＲＯＧＲＡＭ＿ＩＤ」の値である「Ｅ６Ａ８」を書き込む。
【００３２】
図８を参照して、２回目以降のプログラム工程の流れについて説明する。
【００３３】
（１）ステップＳ２０１
ホスト２０は、図９に示すように、新しい「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を生成し、ユニークな「ＰＲＯＧＲＡＭ＿ＩＤ」を生成する。この例では、「ＰＲＯＧＲＡＭ＿ＩＤ＝Ｆ７Ｃ９」とする。
【００３４】
（２）ステップＳ２０２
ホスト２０は、「ＰＲＯＧＲＡＭ＿ＩＤ」をキーに、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」をデータベース３０に登録する。
【００３５】
（３）ステップＳ２０３
ホスト２０は、図１０に示すように、デバイス１０内のＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１から「ＰＲＯＧＲＡＭ＿ＩＤ」を読み出す。すなわち、ホスト２０は、デバイス１０に対し、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１に保持されている「ＰＲＯＧＲＡＭ＿ＩＤ」を問い合わせる。ここでは、デバイス１０は、ホスト２０に対し、１回目に書き込んだ「Ｅ６Ａ８」を返す。
【００３６】
（４）ステップＳ２０４
ホスト２０は、デバイス１０内のＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１から読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に基づいて、デバイス１０の状態を判断する。ここでは、ホスト２０は、「デバイス１０は初期状態ではない」と判断し、読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」をデータベース３０から読み出す。ここでは、ホスト２０は、データベース３０から「Ｅ６Ａ８」の「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を取得する。なお、「Ｅ６Ａ８」の「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」は、「ＰＲＯＧＲＡＭ＿ＩＤ＝Ｅ６Ａ８」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を示す。
【００３７】
（５）ステップＳ２０５
ホスト２０は、図１１に示すように、データベース３０から取得した「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」（Ｅ６Ａ８）を、現在の「ＤＥＶＩＣＥ＿ＤＡＴＡ」とみなし、書込みＤＡＴＡを生成する。その際、ホスト２０は、書込みＤＡＴＡの値のうち、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」（Ｆ７Ｃ９）と「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」（Ｅ６Ａ８）で同じデータ（変更の無いデータ）を、「ｘ＝ＮＯ＿ＯＰＥＲＡＴＩＯＮ」に置換する。なお、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」（Ｅ６Ａ８）は、「ＰＲＯＧＲＡＭ＿ＩＤ＝Ｅ６Ａ８」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を示す。「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」（Ｆ７Ｃ９）は、「ＰＲＯＧＲＡＭ＿ＩＤ＝Ｆ７Ｃ９」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を示す。
【００３８】
（６）ステップＳ２０６
書込みＤＡＴＡをデバイス１０に転送する。
【００３９】
（７）ステップＳ２０７
デバイス１０のプログラム回路１２は、書込みＤＡＴＡの値に応じて、各インターコネクト１１に対し、「ＣＯＮＮＥＣＴ」／「ＤＩＳＣＯＮＮＥＣＴ」／「ＮＯ＿ＯＰＥＲＡＴＩＯＮ」のいずれかの動作を行う。このとき、ホスト２０は、「ｘ＝ＮＯ＿ＯＰＥＲＡＴＩＯＮ」の場合、何もせずスキップする。
【００４０】
（８）ステップＳ２０８
ホスト２０は、書込みが完了したら、デバイス１０のＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１に、「ＰＲＯＧＲＡＭ＿ＩＤ」を書き込む。ここでは、ホスト２０は、デバイス１０のプログラム回路１２に、「ＰＲＯＧＲＡＭ＿ＩＤ」の値として、「Ｆ７Ｃ９」を転送する。プログラム回路１２は、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１に、ホスト２０から転送された「ＰＲＯＧＲＡＭ＿ＩＤ」の値である「Ｆ７Ｃ９」を書き込む。
【００４１】
上記のプログラム工程において、ホスト２０は、デバイス１０内のＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１から「ＰＲＯＧＲＡＭ＿ＩＤ」を読み出した際に、読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」をデータベース３０から読み出すことができなかった場合、「ＤＥＶＩＣＥ＿ＤＡＴＡ」の値を一旦全て０にして、１回目のプログラム工程として処理を進めるようにしても良い。すなわち、ホスト２０は、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」が未検出の場合、デバイス１０を初期化して、１回目のプログラム工程を実施するようにしても良い。
【００４２】
例えば、ホスト２０は、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」が未検出の場合、書込みＤＡＴＡを全て「０＝ＤＩＳＣＯＮＮＥＣＴ」としてデバイス１０に転送し、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１に「ＰＲＯＧＲＡＭ＿ＩＤ＝００００」を書き込んだ後、１回目のプログラム工程として処理を進める。デバイス１０のプログラム回路１２は、書込みＤＡＴＡの値に応じて、各インターコネクト１１に対し、「ＤＩＳＣＯＮＮＥＣＴ」の動作を行い、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１に、ホスト２０から通知された「ＰＲＯＧＲＡＭ＿ＩＤ＝００００」を書き込む。このとき、ホスト２０は、ユーザーに、「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」が未検出である旨の通知を行うと好適である。
【００４３】
これにより、ホスト２０は、デバイス１０内のＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１に、データベース３０に登録されていない「ＰＲＯＧＲＡＭ＿ＩＤ」が書き込まれていても、無視して１回目のプログラム工程として処理を行うことができるようになる。
【００４４】
このとき、ホスト２０は、正常に検索した結果、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１から読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を、データベース３０から発見できなかった場合のみ、デバイス１０を初期化し、１回目のプログラム工程として処理を進めるようにしても良い。また、ホスト２０は、通信障害その他の理由により正常に検索できなかった結果、ＰＲＯＧＲＡＭ＿ＩＤレジスタ１２１から読み出された「ＰＲＯＧＲＡＭ＿ＩＤ」に対応する「ＰＲＯＧＲＡＭ＿ＤＡＴＡ」を、データベース３０から発見できなかった場合、正常に検索できなかった理由を示すエラーメッセージを出力して処理を終了するようにしても良い。但し、実際には、これらの例に限定されない。
【００４５】
なお、一つのインターコネクト１１の接続／切断に要する時間が１ｍｓｅｃで、インターコネクト数が１Ｍ（百万）個あった場合、平均的なプログラマブル・デバイス１０のプログラム時間は、下記のように見積もることが出来る。
【００４６】
本発明を用いた場合
【表１】
2010114772.tif 000003
【００４７】
本発明を用いなかった場合
【表２】
2010114772.tif 000004
【００４８】
本発明では、デバイス１０のプログラム時に差分を取り、変化のある部分のみプログラムを行う。本発明では、２回目以降のプログラム・データ（ＰＲＯＧＲＡＭ＿ＤＡＴＡ）は、その前のデータと差が少ないことから、２回目以降の書込み時間の短縮が見込める。
【００４９】
また、本発明では、差分データ生成の基となるデバイス１０の状態は自動管理されるため、ユーザーがデバイス１０の状態を把握しておく必要は無い。
【００５０】
以上のように、本発明は、高集積プログラマブル・デバイスの技術におけるプログラム時間の問題に対する解決策に関する。
【００５１】
本発明の差分プログラマブル・デバイスでは、プログラムしようとするデバイスのインターコネクト（ＶＩＡ）とプログラム・データ（ＰＲＯＧＲＡＭ＿ＤＡＴＡ）の差分を取り、異なるインターコネクトのみプログラムする。
【００５２】
本発明の差分プログラマブル・デバイスでは、差分データの生成はホストで自動的に行うため、デバイスに差分プログラムの機構を内蔵する必要がない。デバイスのインターコネクトの状態は、外部のデータベースに蓄積する。その理由は、デバイスにインターコネクト状態を読み出す機能を付けると、集積度やセキュリティで問題になるためである。デバイスにインターコネクトの状態を読み出す機構を内蔵する必要が無いため、ＰＬＤデバイスに応用した場合はセキュリティや集積度の点で有利である。
【００５３】
本発明の差分プログラマブル・デバイスでは、デバイスのインターコネクトの状態とデータベースのデータを関連付けるため、デバイスにＰＲＯＧＲＡＭ＿ＩＤレジスタを内蔵することもある。ハード的にはＰＲＯＧＲＡＭ＿ＩＤレジスタを追加するだけで、多種多様なプログラマブル・デバイスに応用できる。また、データベースを使用することで、デバイスの状態を自動で管理できる。
【００５４】
本発明の差分プログラマブル・デバイスでは、上記のように、例え、デバイスにインターコネクトの状態を読み出す仕組みが実装されていなくても、デバイスに埋め込んだＰＲＯＧＲＡＭ＿ＩＤと、データベースに蓄積したプログラム・データ（ＰＲＯＧＲＡＭ＿ＤＡＴＡ）から、デバイスの状態（主にインターコネクトの状態）を知ることができる。
【００５５】
更に、上記の特徴を組み合わせることで、デバイスの状態を管理することなく、プログラムの時間を短縮できる。具体的には、本発明の差分プログラマブル・デバイスでは、２回目以降のプログラム時間を大幅に短縮できる。特に、プロトタイピング、ＥＣＯ、バージョンアップ等で有効であると考えられる。また、動的プログラマブル・デバイスでも高い効果が見込める。
【００５６】
以上、本発明の実施形態を詳述してきたが、実際には上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【図面の簡単な説明】
【００５７】
【図１】図１は、一般的なＣＰＬＤ（Ｃｏｍｐｌｅｘ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）の構造の例を示す図である。
【図２】図２は、従来の差分プログラムの手法における処理手順を示す図である。
【図３】図３は、本発明のプログラマブル・ロジック・デバイス（ＰＬＤ）の構成例を示す図である。
【図４】図４は、１回目のプログラム工程の流れを示すフローチャートである。
【図５】図５は、１回目のプログラム工程におけるプログラム・データのデータベース登録の例を示すイメージ図である。
【図６】図６は、１回目のプログラム工程におけるＰＲＯＧＲＡＭ＿ＩＤの読み出しの例を示すイメージ図である。
【図７】図７は、１回目のプログラム工程における書込みＤＡＴＡの転送の例を示すイメージ図である。
【図８】図８は、２回目以降のプログラム工程の流れを示すフローチャートである。
【図９】図９は、２回目以降のプログラム工程におけるプログラム・データのデータベース登録の例を示すイメージ図である。
【図１０】図１０は、２回目以降のプログラム工程におけるＰＲＯＧＲＡＭ＿ＩＤの読み出しの例を示すイメージ図である。
【図１１】図１１は、２回目以降のプログラム工程における書込みＤＡＴＡの転送の例を示すイメージ図である。
【符号の説明】
【００５８】
１０…  デバイス
１１…  インターコネクト（ＶＩＡ）
１２…  プログラム回路
１２１…  ＰＲＯＧＲＡＭ＿ＩＤレジスタ
１３…  第１論理回路（ＲＯＷ）
１４…  第２論理回路（ＣＯＬＵＭＮ）
２０…  ホスト
３０…  データベース
【図１】
2010114772.tif 000005
【図２】
2010114772.tif 000006
【図３】
2010114772.tif 000007
【図４】
2010114772.tif 000008
【図５】
2010114772.tif 000009
【図６】
2010114772.tif 000010
【図７】
2010114772.tif 000011
【図８】
2010114772.tif 000012
【図９】
2010114772.tif 000013
【図１０】
2010114772.tif 000014
【図１１】
2010114772.tif 000015