(57)【要約】   【課題】  メモリ容量を増大させることなく、かつ、迅速に、動的再構成可能ＬＳＩにおける現在のコンフィグレーションを特定する。  【解決手段】  動的再構成可能ＬＳＩのプログラムの実行を設定にしたがって停止させた状態で、主メモリに記憶されたコンフィグレーションデータおよびそのソースデータ、並びに、コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを取得するデバッガ２４は、プロセッサコアによる他律ダイナミックリコンフィグレーションの発生時に、実行バンク（バンク０）に格納されるべきコンフィグレーションの供給元のバンク名を静的変数として主メモリ６０に記憶し、プログラムの実行停止時に、マトリクス３２からバンク由来値を取得して、静的変数とバンク由来値とを比較し、これらが不一致の場合に、自律ダイナミックリコンフィグレーションが発生したと判断する。【選択図】  図４
2006164186.tif 000002
【特許請求の範囲】
【請求項１】
主としてシーケンシャルな処理を実行するプロセッサコア、および、データ処理および演算を担当し、かつ、その２次元アレイ構造の回路構成要素間の接続を変更することで、そのコンフィグレーションを動的に変更可能なマトリクスと、を備えた動的再構成可能ＬＳＩであって、
前記マトリクスが、複数のコンフィグレーションのそれぞれを表わすコンフィグレーションデータを記憶する複数のバンクを有するコンフィグレーションメモリを有し、かつ、前記複数のバンクのうち実行バンクに格納されたコンフィグレーションデータに基づいて回路構成要素間の接続が規定され、かつ、前記プロセッサコアからの指示に従う他律ダイナミックリコンフィグレーションにより、或いは、マトリクス自身による自律ダイナミックリコンフィグレーションにより、各バンクに格納されたコンフィグレーションデータを前記実行バンクにコピーすることにより、そのコンフィグレーションを変更するとともに、  当該コンフィグレーションの変更に伴って、実行バンクにコピーされたコンフィグレーションデータの供給元となったバンクを特定するバンク由来値を記憶するように構成され、
前記プロセッサコアが、主メモリに格納されたコンフィグレーションデータを、前記コンフィグレーションメモリの所望のバンクにロードするロード命令、および、何れかのバンクに格納されたコンフィグレーションを実行バンクにコピーさせて他律ダイナミックリコンフィグレーションを発生させるコンフィグレーション変更命令を実行可能であり、かつ、前記ロード命令およびコンフィグレーション変更命令の実行に伴って、前記主メモリ中、バンクを特定する情報と、コンフィグレーションを特定するコンフィグレーション名と、が関連付けられたバンク情報テーブルを更新するように構成された、動的再構成可能なＬＳＩにおいて、
前記動的再構成可能ＬＳＩのプログラムの実行を設定にしたがって停止させ、その状態において、主メモリに記憶されたコンフィグレーションデータおよびそのソースデータ、並びに、コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを取得するデバッガのデバッグ方法であって、
前記プロセッサコアによる他律ダイナミックリコンフィグレーションの発生時に、実行バンクに格納されるべきコンフィグレーションの供給元のバンク名を静的変数として記憶するステップと、
前記プログラムの実行停止時に、前記マトリクスから前記バンク由来値を取得するステップと、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、自律ダイナミックリコンフィグレーションが発生したと判断するステップと、
前記自律ダイナミックリコンフィグレーションが発生していないと判断された場合に、前記バンク情報テーブルにしたがって、バンク情報テーブルからコンフィグレーションデータを読み出すステップと、
前記自律ダイナミックリコンフィグレーションが発生したと判断した場合に、前記バンク情報テーブル中、前記バンク由来値が示すコンフィグレーションデータを読み出すステップと、
前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップと、を備えたことを特徴とするデバッグ方法。
【請求項２】
さらに、前記プロセッサコアによるロード命令の実行時に、前記マトリクスから前記バンク由来値を取得するステップと、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップと、を備えたことを特徴とする請求項１に記載のデバッグ方法。
【請求項３】
前記静的変数およびバンク情報テーブルを更新するステップが、
静的変数の値としてバンク由来値を記憶するステップと、
バンク情報テーブル中、前記実行バンクに関連付けてバンク由来値を格納するステップと、を有することを特徴とする請求項１または２に記載のデバッグ方法。
【請求項４】
主としてシーケンシャルな処理を実行するプロセッサコア、および、データ処理および演算を担当し、かつ、その２次元アレイ構造の回路構成要素間の接続を変更することで、そのコンフィグレーションを動的に変更可能なマトリクスと、を備えた動的再構成可能ＬＳＩであって、
前記マトリクスが、複数のコンフィグレーションのそれぞれを表わすコンフィグレーションデータを記憶する複数のバンクを有するコンフィグレーションメモリを有し、かつ、前記複数のバンクのうち実行バンクに格納されたコンフィグレーションデータに基づいて回路構成要素間の接続が規定され、かつ、前記プロセッサコアからの指示に従う他律ダイナミックリコンフィグレーションにより、或いは、マトリクス自身による自律ダイナミックリコンフィグレーションにより、各バンクに格納されたコンフィグレーションデータを前記実行バンクにコピーすることにより、そのコンフィグレーションを変更するとともに、  当該コンフィグレーションの変更に伴って、実行バンクにコピーされたコンフィグレーションデータの供給元となったバンクを特定するバンク由来値を記憶するように構成され、
前記プロセッサコアが、主メモリに格納されたコンフィグレーションデータを、前記コンフィグレーションメモリの所望のバンクにロードするロード命令、および、何れかのバンクに格納されたコンフィグレーションを実行バンクにコピーさせて他律ダイナミックリコンフィグレーションを発生させるコンフィグレーション変更命令を実行可能であり、かつ、前記ロード命令およびコンフィグレーション変更命令の実行に伴って、前記主メモリ中、バンクを特定する情報と、コンフィグレーションを特定するコンフィグレーション名と、が関連付けられたバンク情報テーブルを更新するように構成された、動的再構成可能なＬＳＩにおいて、
前記動的再構成可能ＬＳＩのプログラムの実行を設定にしたがって停止させ、その状態において、主メモリに記憶されたコンフィグレーションデータおよびそのソースデータ、並びに、コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを取得するデバッガのデバッグ方法であって、
前記プロセッサコアのロード命令の実行時に、前記ロードするコンフィグレーションデータを特定するパターンを生成し、主メモリ中、前記ロードすべきバンクに関連付けて記憶するステップと、
前記プロセッサコアによる他律ダイナミックリコンフィグレーションの発生時に、実行バンクに格納されるべきコンフィグレーションの供給元のバンク名を静的変数として記憶するステップと、
前記プログラムの実行停止時に、前記コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを読み出すステップと、
前記実行バンクから読み出されたコンフィグレーションメモリを特定するパターンを生成するステップと、
前記生成されたパターンと、前記主メモリ中、それぞれのバンクに関連付けられて記憶されたパターンとを比較し、一致或いは最も類似するパターンに関連付けられたバンクを特定するステップと、
前記バンク情報テーブル中、前記特定されたバンクの情報が示すコンフィグレーションデータを読み出すステップと、を備えたことを特徴とするデバッグ方法。
【請求項５】
さらに、前記特定されたバンクが実行バンクであるか否かを判断するステップと、
前記特定されたバンクが実行バンクである場合に、前記バンク情報テーブル中、前記実行バンクが示すコンフィグレーションデータを読み出すステップと、
前記特定されたバンクが実行バンク以外である場合に、前記バンク情報テーブル中、前記特定されたバンクの情報が示すコンフィグレーションデータを読み出すステップと、
前記バンク情報テーブルを、前記特定されたバンクの情報に整合するように更新するステップと、を備えたことを特徴とする請求項４に記載のデバッグ方法。
【請求項６】
さらに、前記プロセッサコアによるロード命令実行時に、前記マトリクスから前記バンク由来値を取得するステップと、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップと、
前記静的変数とバンク由来値が一致した場合に、前記コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを読み出すステップと、
前記実行バンクから読み出されたコンフィグレーションメモリを特定するパターンを生成するステップと、
前記生成されたパターンと、前記主メモリ中、それぞれのバンクに関連付けられて記憶されたパターンとを比較し、一致或いは最も類似するパターンに関連付けられたバンクを特定するステップと、
前記バンク情報テーブルを、前記特定されたバンクの情報に整合するように更新するステップと、を備えたことを特徴とする請求項４または５に記載のデバッグ方法。
【請求項７】
前記パターンを生成するステップが、前記マトリクス中の回路構成要素のそれぞれを利用しているか否かを示すビット列を含む存在パターンを生成するステップを有することを特徴とする請求項４ないし６の何れか一項に記載のデバッグ方法。
【請求項８】
前記パターンを生成するステップが、前記マトリクス中の回路構成要素のそれぞれを利用しているか否かを示すビット列を符号化した存在パターンを生成するステップを有することを特徴とする請求項４ないし６の何れか一項に記載のデバッグ方法。
【請求項９】
前記パターンを生成するステップが、前記コンフィグレーションデータの少なくとも部分を符号化するステップを有することを特徴とする請求項４ないし６の何れか一項に記載のデバッグ方法。
【請求項１０】
主としてシーケンシャルな処理を実行するプロセッサコア、および、データ処理および演算を担当し、かつ、その２次元アレイ構造の回路構成要素間の接続を変更することで、そのコンフィグレーションを動的に変更可能なマトリクスと、を備えた動的再構成可能ＬＳＩであって、
前記マトリクスが、複数のコンフィグレーションのそれぞれを表わすコンフィグレーションデータを記憶する複数のバンクを有するコンフィグレーションメモリを有し、かつ、前記複数のバンクのうち実行バンクに格納されたコンフィグレーションデータに基づいて回路構成要素間の接続が規定され、かつ、前記プロセッサコアからの指示に従う他律ダイナミックリコンフィグレーションにより、或いは、マトリクス自身による自律ダイナミックリコンフィグレーションにより、各バンクに格納されたコンフィグレーションデータを前記実行バンクにコピーすることにより、そのコンフィグレーションを変更するとともに、  当該コンフィグレーションの変更に伴って、実行バンクにコピーされたコンフィグレーションデータの供給元となったバンクを特定するバンク由来値を記憶するように構成され、
前記プロセッサコアが、主メモリに格納されたコンフィグレーションデータを、前記コンフィグレーションメモリの所望のバンクにロードするロード命令、および、何れかのバンクに格納されたコンフィグレーションを実行バンクにコピーさせて他律ダイナミックリコンフィグレーションを発生させるコンフィグレーション変更命令を実行可能であり、かつ、前記ロード命令およびコンフィグレーション変更命令の実行に伴って、前記主メモリ中、バンクを特定する情報と、コンフィグレーションを特定するコンフィグレーション名と、が関連付けられたバンク情報テーブルを更新するように構成された、動的再構成可能なＬＳＩにおいて、
前記動的再構成可能ＬＳＩのプログラムの実行を設定にしたがって停止させ、その状態において、主メモリに記憶されたコンフィグレーションデータおよびそのソースデータ、並びに、コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを取得するデバッガとして、コンピュータを動作させるために、当該コンピュータにより読み出し可能なデバッグ用プログラムであって、前記コンピュータに、
前記プロセッサコアによる他律ダイナミックリコンフィグレーションの発生時に、実行バンクに格納されるべきコンフィグレーションの供給元のバンク名を静的変数として記憶するステップ、
前記プログラムの実行停止時に、前記マトリクスから前記バンク由来値を取得するステップ、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、自律ダイナミックリコンフィグレーションが発生したと判断するステップ、
前記自律ダイナミックリコンフィグレーションが発生していないと判断された場合に、前記バンク情報テーブルにしたがって、バンク情報テーブルからコンフィグレーションデータを読み出すステップ、
前記自律ダイナミックリコンフィグレーションが発生したと判断した場合に、前記バンク情報テーブル中、前記バンク由来値が示すコンフィグレーションデータを読み出すステップ、並びに、
前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップを実行させることを特徴とするデバッグ用プログラム。
【請求項１１】
さらに、前記コンピュータに、
前記プロセッサコアによるロード命令の実行時に、前記マトリクスから前記バンク由来値を取得するステップ、並びに、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップを実行させることを特徴とする請求項１０に記載のプログラム。
【請求項１２】
前記静的変数およびバンク情報テーブルを更新するステップにおいて、前記コンピュータに、
静的変数の値としてバンク由来値を記憶するステップ、並びに、
バンク情報テーブル中、前記実行バンクに関連付けてバンク由来値を格納するステップを実行させることを特徴とする請求項１０または１１に記載のプログラム。
【請求項１３】
主としてシーケンシャルな処理を実行するプロセッサコア、および、データ処理および演算を担当し、かつ、その２次元アレイ構造の回路構成要素間の接続を変更することで、そのコンフィグレーションを動的に変更可能なマトリクスと、を備えた動的再構成可能ＬＳＩであって、
前記マトリクスが、複数のコンフィグレーションのそれぞれを表わすコンフィグレーションデータを記憶する複数のバンクを有するコンフィグレーションメモリを有し、かつ、前記複数のバンクのうち実行バンクに格納されたコンフィグレーションデータに基づいて回路構成要素間の接続が規定され、かつ、前記プロセッサコアからの指示に従う他律ダイナミックリコンフィグレーションにより、或いは、マトリクス自身による自律ダイナミックリコンフィグレーションにより、各バンクに格納されたコンフィグレーションデータを前記実行バンクにコピーすることにより、そのコンフィグレーションを変更するとともに、  当該コンフィグレーションの変更に伴って、実行バンクにコピーされたコンフィグレーションデータの供給元となったバンクを特定するバンク由来値を記憶するように構成され、
前記プロセッサコアが、主メモリに格納されたコンフィグレーションデータを、前記コンフィグレーションメモリの所望のバンクにロードするロード命令、および、何れかのバンクに格納されたコンフィグレーションを実行バンクにコピーさせて他律ダイナミックリコンフィグレーションを発生させるコンフィグレーション変更命令を実行可能であり、かつ、前記ロード命令およびコンフィグレーション変更命令の実行に伴って、前記主メモリ中、バンクを特定する情報と、コンフィグレーションを特定するコンフィグレーション名と、が関連付けられたバンク情報テーブルを更新するように構成された、動的再構成可能なＬＳＩにおいて、
前記動的再構成可能ＬＳＩのプログラムの実行を設定にしたがって停止させ、その状態において、主メモリに記憶されたコンフィグレーションデータおよびそのソースデータ、並びに、コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを取得するデバッガとして、コンピュータを動作させるために、当該コンピュータにより読み出し可能なデバッグ用プログラムであって、前記コンピュータに、
前記プロセッサコアのロード命令の実行時に、前記ロードするコンフィグレーションデータを特定するパターンを生成し、主メモリ中、前記ロードすべきバンクに関連付けて記憶するステップ、
前記プロセッサコアによる他律ダイナミックリコンフィグレーションの発生時に、実行バンクに格納されるべきコンフィグレーションの供給元のバンク名を静的変数として記憶するステップ、
前記プログラムの実行停止時に、前記コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを読み出すステップ、
前記実行バンクから読み出されたコンフィグレーションメモリを特定するパターンを生成するステップ、
前記生成されたパターンと、前記主メモリ中、それぞれのバンクに関連付けられて記憶されたパターンとを比較し、一致或いは最も類似するパターンに関連付けられたバンクを特定するステップ、並びに、
前記バンク情報テーブル中、前記特定されたバンクの情報が示すコンフィグレーションデータを読み出すステップを実行させることを特徴とするデバッグ用プログラム。
【請求項１４】
さらに、前記コンピュータに、
前記特定されたバンクが実行バンクであるか否かを判断するステップ、
前記特定されたバンクが実行バンクである場合に、前記バンク情報テーブル中、前記実行バンクが示すコンフィグレーションデータを読み出すステップ、
前記特定されたバンクが実行バンク以外である場合に、前記バンク情報テーブル中、前記特定されたバンクの情報が示すコンフィグレーションデータを読み出すステップ、並びに、
前記バンク情報テーブルを、前記特定されたバンクの情報に整合するように更新するステップを、実行させることを特徴とする請求項１３に記載のプログラム。
【請求項１５】
さらに、前記コンピュータに、
前記プロセッサコアによるロード命令実行時に、前記マトリクスから前記バンク由来値を取得するステップ、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップ、
前記静的変数とバンク由来値が一致した場合に、前記コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを読み出すステップと、
前記実行バンクから読み出されたコンフィグレーションメモリを特定するパターンを生成するステップ、
前記生成されたパターンと、前記主メモリ中、それぞれのバンクに関連付けられて記憶されたパターンとを比較し、一致或いは最も類似するパターンに関連付けられたバンクを特定するステップ、並びに、
前記バンク情報テーブルを、前記特定されたバンクの情報に整合するように更新するステップを実行させることを特徴とする請求項１３または１４に記載のプログラム。
【請求項１６】
前記パターンを生成するステップにおいて、前記コンピュータに、
前記マトリクス中の回路構成要素のそれぞれを利用しているか否かを示すビット列を含む存在パターンを生成するステップを実行させることを特徴とする請求項１３ないし１５の何れか一項に記載のプログラム。
【請求項１７】
前記パターンを生成するステップにおいて、前記コンピュータに、
前記マトリクス中の回路構成要素のそれぞれを利用しているか否かを示すビット列を符号化した存在パターンを生成するステップを実行させることを特徴とする請求項１３ないし１５の何れか一項に記載のプログラム。
【請求項１８】
前記パターンを生成するステップにおいて、前記コンピュータに、
前記コンフィグレーションデータの少なくとも部分を符号化するステップを実行させることを特徴とする請求項１３ないし１５の何れか一項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的再構成可能なＬＳＩにおけるデバッグ方法およびデバッグプログラムに関する。
【背景技術】
【０００２】
近年、ＬＳＩを構成する回路の一部をソフトウェアにより再構成できるハードウェアが提供されている。さらに、特許文献１においては、再構成する基本単位を、ゲートレベルからＡＬＵなどのある程度の規模の演算機能を備えた演算ユニットにして、複数種類の演算ユニットをマトリクス状に配置し、再構成に要する時間を短縮することが開示されている。複数の演算ユニットがマトリクス状に配置されたシステムは、それぞれの演算ユニットが並列に処理を実行できるので、膨大な数の並列処理に適したハードウェアリソースを備えたシステムと捉えることが可能である。
【０００３】
現時点において、非特許文献２に記載されたように、本出願人が開発した動的再構成可能なＬＳＩにおいては、主にシーケンシャルな処理を担当するＲＩＳＣプロセッサコア（以下、単に「プロセッサコア」と称する。）と、大規模なデータ処理や演算処理を担当する２次元アレイ構造の「ＤＮＡ(distributed
Network Architecture)マトリクス」とが含まれる。この「ＤＮＡマトリクス」が動的に回路構成を切り換えられる部分に相当する。この動的再構成可能な部分（以下、「マトリクス」と称する。）は、２次元アレイ状に、演算器やメモリなどの回路構成要素が整列した構造をとっている。これらの回路構成要素の接続関係を変更することで、並列演算や演算の組み合わせ（積和演算）を自由に設定することが可能である。
【０００４】
特許文献２に記載された動的再構成可能なＬＳＩでは、上記マトリクスのコンフィグレーションを同時に複数（たとえば４つ）記憶しておき、それを切り替えながら、高速にアプリケーションを実行する。たとえば、図３に示すように、マトリクス内部に記憶可能なコンフィグレーションとして、１つの実行バンクのコンフィグレーション、および、３つのバックグラウンドバンクのコンフィグレーションが存在し、それぞれのデータが、各バンクの記憶領域に、外部メモリ等から転送される。
【０００５】
実際に、マトリクスが動作しているときに、実行バンクにコンフィグレーションのデータを書き込むと、処理内容に影響を与える。そこで、通常は、何れかの・バンクにコンフィグレーションのデータが書き込まれ、必要に応じて、バックグラウンドバンクのコンフィグレーションのデータを、実行バンクに転送する。
【０００６】
コンフィグレーションの切り替えには、プロセッサコア上で実行されるプログラムの制御によって、マトリクスに指示が与えられるもの、および、マトリクス内の内部要因によって自律的に行われるものが存在する。ここで、前者を他律ダイナミックリコンフィグレーション、後者を自律ダイナミックリコンフィグレーションと称する。
【特許文献１】国際公開ＷＯ０３／００７１５５号公報
【非特許文献１】榊原泰徳、佐藤友美著、「ＤＡＰＤＮＡのデバイスアーキテクチャ」、デザインウェーブマガジン（Design Wave Magazine）２００４年８月号、「特集  動的再構成可能デバイス  その素性と実力  第２章」、ＣＱ出版社、２００４年８月、第３０頁〜第３８頁
【発明の開示】
【発明が解決しようとする課題】
【０００７】
設計者は、上記バンクにロードさせて、マトリクスを動作させるための回路情報を作成するが、その際に、回路が所望のように動作しているかを調べ、かつ、不具合な箇所を訂正するデバッグを通常行う。
【０００８】
回路情報の作成は、たとえば、以下の手順により実現される。
（１）設計者は、データの流れに沿って、マトリクス中の論理回路を構成する回路要素（ＰＥ：Processing
element）をエディタ上に配置する。これにより、配置されたＰＥとその間の論理的接続情報とを含む一次ファイルが生成される。
（２）次いで、一次ファイルは、コンパイラにより、実際にマトリクスを構成する特定の位置の回路要素および特定の位置の回路要素間の物理的配線がなされた情報を含む二次ファイルに変換される。この二次ファイルの情報が、バンクにロードされることで、マトリクスは動作することが可能となる。
【０００９】
デバッグを実現するデバッガは、プログラムの実行を一時停止させ、その状態で主メモリからデバッグ情報、つまり、コンフィグレーションのソースデータおよびコンフィグレーションデータを取得し、かつ、マトリクスの実行バンクからコンフィグレーションデータを読み出して、これらを照合するなど必要な処理を実行する。また、デバッガは、マトリクス中のレジスタ値の読み取り、設定や、マトリクスのブレークポイントの設定などを可能にしている。
【００１０】
上述したように、本出願人が考案した動的再構成可能ＬＳＩにおいては、プロセッサコア上を稼動しているプログラムの働きによってコンフィグレーションを変更する他律ダイナミックリコンフィグレーションと、マトリクス自体が、コンフィグレーションを変更する自律ダイナミックリコンフィグレーションとが存在する。
【００１１】
他律ダイナミックリコンフィグレーションに関しては、プロセッサコアがコンフィグレーションの変更を把握しているため、どのバンクにどのコンフィグレーションを格納しているかを把握するテーブル（バンク情報テーブル）を主メモリに保持しておくことにより、プログラムの実行停止時に、実行バンクにどのコンフィグレーションが格納されているかを知ることが可能である。
【００１２】
これに対して、自律ダイナミックリコンフィグレーションは、マトリクス自身がそのコンフィグレーションを変更するため、プロセッサコアが、外部からその発生を知ることができない。このため、主メモリのバンク情報テーブルを参照して、実行バンクに格納されているコンフィグレーションを調べても、実際に実行バンクに格納されたコンフィグレーションと異なる場合があるという問題点があった。
【００１３】
たとえば、プロセッサコアが、コンフィグレーションメモリにロードした全てのコンフィグレーションデータの履歴を記憶しておき、プログラムの実行停止時に、実際に実行バンクに格納されていたコンフィグレーションデータと、履歴に残っている全てのコンフィグレーションデータとのマッチングを実行して、実行バンクに格納されたコンフィグレーションを特定することも考えられる。しかしながら、全てのコンフィグレーショデータの履歴を残すことは、膨大なメモリ容量が必要になり、場合によっては、メモリが破綻する可能性もある。また、マッチングに多大な時間を必要とするという問題点もある。
【００１４】
本発明は、メモリ容量を増大させることなく、かつ、迅速に、動的再構成可能ＬＳＩにおける現在のコンフィグレーションを特定するデバッグ方法およびデバッグ用プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の目的は、主としてシーケンシャルな処理を実行するプロセッサコア、および、データ処理および演算を担当し、かつ、その２次元アレイ構造の回路構成要素間の接続を変更することで、そのコンフィグレーションを動的に変更可能なマトリクスと、を備えた動的再構成可能ＬＳＩであって、
前記マトリクスが、複数のコンフィグレーションのそれぞれを表わすコンフィグレーションデータを記憶する複数のバンクを有するコンフィグレーションメモリを有し、かつ、前記複数のバンクのうち実行バンクに格納されたコンフィグレーションデータに基づいて回路構成要素間の接続が規定され、かつ、前記プロセッサコアからの指示に従う他律ダイナミックリコンフィグレーションにより、或いは、マトリクス自身による自律ダイナミックリコンフィグレーションにより、各バンクに格納されたコンフィグレーションデータを前記実行バンクにコピーすることにより、そのコンフィグレーションを変更するとともに、  当該コンフィグレーションの変更に伴って、実行バンクにコピーされたコンフィグレーションデータの供給元となったバンクを特定するバンク由来値を記憶するように構成され、
前記プロセッサコアが、主メモリに格納されたコンフィグレーションデータを、前記コンフィグレーションメモリの所望のバンクにロードするロード命令、および、何れかのバンクに格納されたコンフィグレーションを実行バンクにコピーさせて他律ダイナミックリコンフィグレーションを発生させるコンフィグレーション変更命令を実行可能であり、かつ、前記ロード命令およびコンフィグレーション変更命令の実行に伴って、前記主メモリ中、バンクを特定する情報と、コンフィグレーションを特定するコンフィグレーション名と、が関連付けられたバンク情報テーブルを更新するように構成された、動的再構成可能なＬＳＩにおいて、
前記動的再構成可能ＬＳＩのプログラムの実行を設定にしたがって停止させ、その状態において、主メモリに記憶されたコンフィグレーションデータおよびそのソースデータ、並びに、コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを取得するデバッガのデバッグ方法であって、
前記プロセッサコアによる他律ダイナミックリコンフィグレーションの発生時に、実行バンクに格納されるべきコンフィグレーションの供給元のバンク名を静的変数として記憶するステップと、
前記プログラムの実行停止時に、前記マトリクスから前記バンク由来値を取得するステップと、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、自律ダイナミックリコンフィグレーションが発生したと判断するステップと、
前記自律ダイナミックリコンフィグレーションが発生していないと判断された場合に、前記バンク情報テーブルにしたがって、バンク情報テーブルからコンフィグレーションデータを読み出すステップと、
前記自律ダイナミックリコンフィグレーションが発生したと判断した場合に、前記バンク情報テーブル中、前記バンク由来値が示すコンフィグレーションデータを読み出すステップと、
前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップと、を備えたことを特徴とするデバッグ方法により達成される（請求項１：第１の手法）。
【００１６】
本発明によれば、他律ダイナミックリコンフィグレーションの際に、どのバンクから実行バンクにコンフィグレーションをコピーしたか、つまり、データの供給元を示す静的変数を、主メモリに記憶しておき、プログラムの停止時に、コンフィグレーションメモリにあるバンク由来値と静的変数とを比較することで、自律ダイナミックリコンフィグレーションの発生を検出する。自律ダイナミックリコンフィグレーションが生じていると判断された場合には、コンフィグレーションメモリ中のメモリ由来値にしたがって、そのバンクのデータを取得することができる。
【００１７】
好ましい実施態様においては、さらに、前記プロセッサコアによるロード命令の実行時に、前記マトリクスから前記バンク由来値を取得するステップと、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップと、を備えている（請求項２：第２の手法）。
【００１８】
この実施態様においては、さらに、コンフィグレーションメモリのバンクにデータをロードする際に、バンク由来値と静的変数とを比較することで、自律ダイナミックリコンフィグレーションの発生を検出している。ここで自律ダイナミックリコンフィグレーションが発生したと判断された場合には、あたかも他律ダイナミックリコンフィグレーションが生じたのと同様に、静的変数およびバンク情報テーブルを更新することで、実行バンクに格納されたコンフィグレーションを適切に把握する。
【００１９】
たとえば、前記静的変数およびバンク情報テーブルを更新するステップは、静的変数の値としてバンク由来値を記憶するステップと、バンク情報テーブル中、前記実行バンクに関連付けてバンク由来値を格納するステップと、を有する（請求項３）。
【００２０】
また、本発明の目的は、主としてシーケンシャルな処理を実行するプロセッサコア、および、データ処理および演算を担当し、かつ、その２次元アレイ構造の回路構成要素間の接続を変更することで、そのコンフィグレーションを動的に変更可能なマトリクスと、を備えた動的再構成可能ＬＳＩであって、
前記マトリクスが、複数のコンフィグレーションのそれぞれを表わすコンフィグレーションデータを記憶する複数のバンクを有するコンフィグレーションメモリを有し、かつ、前記複数のバンクのうち実行バンクに格納されたコンフィグレーションデータに基づいて回路構成要素間の接続が規定され、かつ、前記プロセッサコアからの指示に従う他律ダイナミックリコンフィグレーションにより、或いは、マトリクス自身による自律ダイナミックリコンフィグレーションにより、各バンクに格納されたコンフィグレーションデータを前記実行バンクにコピーすることにより、そのコンフィグレーションを変更するとともに、  当該コンフィグレーションの変更に伴って、実行バンクにコピーされたコンフィグレーションデータの供給元となったバンクを特定するバンク由来値を記憶するように構成され、
前記プロセッサコアが、主メモリに格納されたコンフィグレーションデータを、前記コンフィグレーションメモリの所望のバンクにロードするロード命令、および、何れかのバンクに格納されたコンフィグレーションを実行バンクにコピーさせて他律ダイナミックリコンフィグレーションを発生させるコンフィグレーション変更命令を実行可能であり、かつ、前記ロード命令およびコンフィグレーション変更命令の実行に伴って、前記主メモリ中、バンクを特定する情報と、コンフィグレーションを特定するコンフィグレーション名と、が関連付けられたバンク情報テーブルを更新するように構成された、動的再構成可能なＬＳＩにおいて、
前記動的再構成可能ＬＳＩのプログラムの実行を設定にしたがって停止させ、その状態において、主メモリに記憶されたコンフィグレーションデータおよびそのソースデータ、並びに、コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを取得するデバッガのデバッグ方法であって、
前記プロセッサコアのロード命令の実行時に、前記ロードするコンフィグレーションデータを特定するパターンを生成し、主メモリ中、前記ロードすべきバンクに関連付けて記憶するステップと、
前記プロセッサコアによる他律ダイナミックリコンフィグレーションの発生時に、実行バンクに格納されるべきコンフィグレーションの供給元のバンク名を静的変数として記憶するステップと、
前記プログラムの実行停止時に、前記コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを読み出すステップと、
前記実行バンクから読み出されたコンフィグレーションメモリを特定するパターンを生成するステップと、
前記生成されたパターンと、前記主メモリ中、それぞれのバンクに関連付けられて記憶されたパターンとを比較し、一致或いは最も類似するパターンに関連付けられたバンクを特定するステップと、
前記バンク情報テーブル中、前記特定されたバンクの情報が示すコンフィグレーションデータを読み出すステップと、を備えたことを特徴とするデバッグ方法により達成される（請求項４：第３の手法）。
【００２１】
本発明によれば、主メモリにおいてバンクに関連付けられて記憶されたコンフィグレーションデータのパターンと、実際に実行バンクから読み出されたコンフィグレーションのデータのパターンとを比較して、実行バンクに格納されたコンフィグレーションを判断している。この手法を利用すれば、コンフィグレーションデータのパターンは、バンクの数だけ持てばよく、多大なメモリの容量を必要としない。また、請求項１ないし３にしたがった方法により検出できないダイナミックリコンフィグレーションのパターン（コンフィグレーションデータのロードの後、自律ダイナミックリコンフィグレーションが２回以上発生し、かつ、実行バンクには、当初の供給元と同じバンクを供給元とするコンフィグレーションデータが格納されている場合）でも、本発明を適用することで、正しいコンフィグレーションを特定することが可能となる。
【００２２】
より好ましい実施態様においては、さらに、前記特定されたバンクが実行バンクであるか否かを判断するステップと、
前記特定されたバンクが実行バンクである場合に、前記バンク情報テーブル中、前記実行バンクが示すコンフィグレーションデータを読み出すステップと、
前記特定されたバンクが実行バンク以外である場合に、前記バンク情報テーブル中、前記特定されたバンクの情報が示すコンフィグレーションデータを読み出すステップと、
前記バンク情報テーブルを、前記特定されたバンクの情報に整合するように更新するステップと、を備えている（請求項５）。
【００２３】
また、別の好ましい実施態様においては、さらに、前記プロセッサコアによるロード命令実行時に、前記マトリクスから前記バンク由来値を取得するステップと、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップと、
前記静的変数とバンク由来値が一致した場合に、前記コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを読み出すステップと、
前記実行バンクから読み出されたコンフィグレーションメモリを特定するパターンを生成するステップと、
前記生成されたパターンと、前記主メモリ中、それぞれのバンクに関連付けられて記憶されたパターンとを比較し、一致或いは最も類似するパターンに関連付けられたバンクを特定するステップと、
前記バンク情報テーブルを、前記特定されたバンクの情報に整合するように更新するステップと、を備えている（請求項６：第４の手法）。
【００２４】
本実施の形態によれば、さらに、コンフィグレーションデータのロードの後、自律ダイナミックリコンフィグレーションが２回以上発生し、かつ、実行バンクには、当初の供給元と同じバンクを供給元とするコンフィグレーションデータが格納され、かつ、同じバンクにコンフィグレーションデータがロードされた場合であっても、適切にコンフィグレーションを特定することが可能である。
【００２５】
たとえば、前記パターンを生成するステップは、前記マトリクス中の回路構成要素のそれぞれを利用しているか否かを示すビット列を含む存在パターンを生成する（請求項７）。或いは、前記パターンを生成するステップは、前記マトリクス中の回路構成要素のそれぞれを利用しているか否かを示すビット列を符号化した存在パターンを生成しても良い（請求項８）。後者を採用することで、パターンの比較処理を著しく短縮することができる。
【００２６】
また、前記パターンを生成するステップは、前記コンフィグレーションデータの少なくとも部分を符号化するステップを有していても良い（請求項９）。ここでは、コンフィグレーションデータ全体を符号化しても良いし、コンフィグレーションデータ中、マトリクスにおいて変更されるコンフィグレーションに相当する部分を除外して、残りの部分を符号化しても良い。
【００２７】
また、本発明の目的は、主としてシーケンシャルな処理を実行するプロセッサコア、および、データ処理および演算を担当し、かつ、その２次元アレイ構造の回路構成要素間の接続を変更することで、そのコンフィグレーションを動的に変更可能なマトリクスと、を備えた動的再構成可能ＬＳＩであって、
前記マトリクスが、複数のコンフィグレーションのそれぞれを表わすコンフィグレーションデータを記憶する複数のバンクを有するコンフィグレーションメモリを有し、かつ、前記複数のバンクのうち実行バンクに格納されたコンフィグレーションデータに基づいて回路構成要素間の接続が規定され、かつ、前記プロセッサコアからの指示に従う他律ダイナミックリコンフィグレーションにより、或いは、マトリクス自身による自律ダイナミックリコンフィグレーションにより、各バンクに格納されたコンフィグレーションデータを前記実行バンクにコピーすることにより、そのコンフィグレーションを変更するとともに、  当該コンフィグレーションの変更に伴って、実行バンクにコピーされたコンフィグレーションデータの供給元となったバンクを特定するバンク由来値を記憶するように構成され、
前記プロセッサコアが、主メモリに格納されたコンフィグレーションデータを、前記コンフィグレーションメモリの所望のバンクにロードするロード命令、および、何れかのバンクに格納されたコンフィグレーションを実行バンクにコピーさせて他律ダイナミックリコンフィグレーションを発生させるコンフィグレーション変更命令を実行可能であり、かつ、前記ロード命令およびコンフィグレーション変更命令の実行に伴って、前記主メモリ中、バンクを特定する情報と、コンフィグレーションを特定するコンフィグレーション名と、が関連付けられたバンク情報テーブルを更新するように構成された、動的再構成可能なＬＳＩにおいて、
前記動的再構成可能ＬＳＩのプログラムの実行を設定にしたがって停止させ、その状態において、主メモリに記憶されたコンフィグレーションデータおよびそのソースデータ、並びに、コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを取得するデバッガとして、コンピュータを動作させるために、当該コンピュータにより読み出し可能なデバッグ用プログラムであって、前記コンピュータに、
前記プロセッサコアによる他律ダイナミックリコンフィグレーションの発生時に、実行バンクに格納されるべきコンフィグレーションの供給元のバンク名を静的変数として記憶するステップ、
前記プログラムの実行停止時に、前記マトリクスから前記バンク由来値を取得するステップ、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、自律ダイナミックリコンフィグレーションが発生したと判断するステップ、
前記自律ダイナミックリコンフィグレーションが発生していないと判断された場合に、前記バンク情報テーブルにしたがって、バンク情報テーブルからコンフィグレーションデータを読み出すステップ、
前記自律ダイナミックリコンフィグレーションが発生したと判断した場合に、前記バンク情報テーブル中、前記バンク由来値が示すコンフィグレーションデータを読み出すステップ、並びに、
前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップを実行させることを特徴とするデバッグ用プログラムによっても達成される（請求項１０）。
【００２８】
好ましい実施態様においては、さらに、前記コンピュータに、
前記プロセッサコアによるロード命令の実行時に、前記マトリクスから前記バンク由来値を取得するステップ、並びに、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップを実行させる（請求項１１）。
【００２９】
また、好ましい実施態様においては、前記静的変数およびバンク情報テーブルを更新するステップにおいて、前記コンピュータに、
静的変数の値としてバンク由来値を記憶するステップ、並びに、
バンク情報テーブル中、前記実行バンクに関連付けてバンク由来値を格納するステップを実行させる（請求項１２）。
【００３０】
さらに、本発明の目的は、主としてシーケンシャルな処理を実行するプロセッサコア、および、データ処理および演算を担当し、かつ、その２次元アレイ構造の回路構成要素間の接続を変更することで、そのコンフィグレーションを動的に変更可能なマトリクスと、を備えた動的再構成可能ＬＳＩであって、
前記マトリクスが、複数のコンフィグレーションのそれぞれを表わすコンフィグレーションデータを記憶する複数のバンクを有するコンフィグレーションメモリを有し、かつ、前記複数のバンクのうち実行バンクに格納されたコンフィグレーションデータに基づいて回路構成要素間の接続が規定され、かつ、前記プロセッサコアからの指示に従う他律ダイナミックリコンフィグレーションにより、或いは、マトリクス自身による自律ダイナミックリコンフィグレーションにより、各バンクに格納されたコンフィグレーションデータを前記実行バンクにコピーすることにより、そのコンフィグレーションを変更するとともに、  当該コンフィグレーションの変更に伴って、実行バンクにコピーされたコンフィグレーションデータの供給元となったバンクを特定するバンク由来値を記憶するように構成され、
前記プロセッサコアが、主メモリに格納されたコンフィグレーションデータを、前記コンフィグレーションメモリの所望のバンクにロードするロード命令、および、何れかのバンクに格納されたコンフィグレーションを実行バンクにコピーさせて他律ダイナミックリコンフィグレーションを発生させるコンフィグレーション変更命令を実行可能であり、かつ、前記ロード命令およびコンフィグレーション変更命令の実行に伴って、前記主メモリ中、バンクを特定する情報と、コンフィグレーションを特定するコンフィグレーション名と、が関連付けられたバンク情報テーブルを更新するように構成された、動的再構成可能なＬＳＩにおいて、
前記動的再構成可能ＬＳＩのプログラムの実行を設定にしたがって停止させ、その状態において、主メモリに記憶されたコンフィグレーションデータおよびそのソースデータ、並びに、コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを取得するデバッガとして、コンピュータを動作させるために、当該コンピュータにより読み出し可能なデバッグ用プログラムであって、前記コンピュータに、
前記プロセッサコアのロード命令の実行時に、前記ロードするコンフィグレーションデータを特定するパターンを生成し、主メモリ中、前記ロードすべきバンクに関連付けて記憶するステップ、
前記プロセッサコアによる他律ダイナミックリコンフィグレーションの発生時に、実行バンクに格納されるべきコンフィグレーションの供給元のバンク名を静的変数として記憶するステップ、
前記プログラムの実行停止時に、前記コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを読み出すステップ、
前記実行バンクから読み出されたコンフィグレーションメモリを特定するパターンを生成するステップ、
前記生成されたパターンと、前記主メモリ中、それぞれのバンクに関連付けられて記憶されたパターンとを比較し、一致或いは最も類似するパターンに関連付けられたバンクを特定するステップ、並びに、
前記バンク情報テーブル中、前記特定されたバンクの情報が示すコンフィグレーションデータを読み出すステップを実行させることを特徴とするデバッグ用プログラムによっても達成される。
【００３１】
好ましい実施態様においては、さらに、前記コンピュータに、
前記特定されたバンクが実行バンクであるか否かを判断するステップ、
前記特定されたバンクが実行バンクである場合に、前記バンク情報テーブル中、前記実行バンクが示すコンフィグレーションデータを読み出すステップ、
前記特定されたバンクが実行バンク以外である場合に、前記バンク情報テーブル中、前記特定されたバンクの情報が示すコンフィグレーションデータを読み出すステップ、並びに、
前記バンク情報テーブルを、前記特定されたバンクの情報に整合するように更新するステップを、実行させる（請求項１４）。
【００３２】
別の好ましい実施態様においては、さらに、前記コンピュータに、
前記プロセッサコアによるロード命令実行時に、前記マトリクスから前記バンク由来値を取得するステップ、
前記記憶された静的変数とバンク由来値とを比較し、これらが不一致の場合に、前記静的変数およびバンク情報テーブルを、前記バンク由来値に整合するように更新するステップ、
前記静的変数とバンク由来値が一致した場合に、前記コンフィグレーションメモリの実行バンクに格納されたコンフィグレーションデータを読み出すステップと、
前記実行バンクから読み出されたコンフィグレーションメモリを特定するパターンを生成するステップ、
前記生成されたパターンと、前記主メモリ中、それぞれのバンクに関連付けられて記憶されたパターンとを比較し、一致或いは最も類似するパターンに関連付けられたバンクを特定するステップ、並びに、
前記バンク情報テーブルを、前記特定されたバンクの情報に整合するように更新するステップを実行させる（請求項１５）。
【００３３】
前記パターンを生成するステップにおいて、前記コンピュータに、前記マトリクス中の回路構成要素のそれぞれを利用しているか否かを示すビット列を含む存在パターンを生成するステップを実行させても良い（請求項１６）。或いは、前記パターンを生成するステップにおいて、前記コンピュータに、前記マトリクス中の回路構成要素のそれぞれを利用しているか否かを示すビット列を符号化した存在パターンを生成するステップを実行させても良い（請求項１７）。また、前記パターンを生成するステップにおいて、前記コンピュータに、前記コンフィグレーションデータの少なくとも部分を符号化するステップを実行させても良い（請求項１８）。
【発明の効果】
【００３４】
本発明によれば、メモリ容量を増大させることなく、かつ、迅速に、動的再構成可能ＬＳＩにおける現在のコンフィグレーションを特定するデバッグ方法およびデバッグ用プログラムを提供することが可能となる。
【発明を実施するための最良の形態】
【００３５】
以下、添付図面を参照して、本発明の実施の形態について説明する。図１は、本実施の形態にかかる回路設計システムの概略を示すブロックダイヤグラムである。本実施の形態においては、上記特許文献１および非特許文献２に記載された、プロセッサコアおよびマトリクスからなる、動的再構成可能なＬＳＩを設計するように構成されている。しかしながら、図１においては、基本的に、マトリクスを設計するための構成要素を詳細に示す。
【００３６】
図１に示すように、本実施の形態にかかる回路設計システム１０は、設計者の入力にしたがって、たとえばＣ言語の記述により、プロセッサコアおよびマトリクスのアルゴリズムを生成するアルゴリズム設計部１２と、アルゴリズム設計部１２によるアルゴリズムを、プロセッサコアで処理すべきもの、或いは、マトリクスで処理すべきものを判断し、アルゴリズムを分解するプロファイラ１４と、プロセッサコアで処理すべきアルゴリズムをコンパイルする第１のコンパイラ１６と、前記マトリクスで処理すべきアルゴリズムに相当する、データフローを拡張されたＣ言語で記述されたＤＦＣ（Data Flow C）を受け入れて、これに基づき、後述するコンフィグレーションファイルを生成するＤＦＣコンパイラ１８と、コンフィグレーションファイルに基づいて、マトリクスを構成する回路要素（プロセッシングエレメント：ＰＥ）を二次元アレイ上に配置する第２のコンパイラ２０と、第１のコンパイラおよび第２のコンパイラによりそれぞれ生成された、プロセッサコアのソースコード、および、マトリクスのＰＥの配置配線情報とに基づいて、シミュレート或いはエミュレートを実行するシミュレータ／エミュレータ２２と、シミュレート或いはエミュレートの結果に基づき、マトリクスを、前記コンフィグレーションレベルでデバッグするデバッガ２４と備えている。
【００３７】
設計者は、入力装置（図示せず）を操作して、ＬＳＩにて実現することを求めるアルゴリズムをＣ言語で記述する。このアルゴリズムのＣ記述（図１の符号１０１参照）は、プロファイラ１４に与えられ、プロファイラ１４が、そのアルゴリズム中のどの関数がデータフロー向きか（処理の負荷が重いか）を調べる。データフロー向きの関数に相当する記述（符号１０３参照）は、ＤＦＣコンパイラ１８に入力される。ＤＦＣコンパイラ１８は、マトリクスのためのＣ記述に基づいて、コンフィグレーションファイル（符号１０４参照）を生成する。コンフィグレーションファイルにおいては、アルゴリズムを実現する、演算器（ＡＬＵ、レジスタなど）とその間の接続を含むデータフローが形成される。
【００３８】
また、アルゴリズムからＤＦＣの関数を除いた部分は、第１のコンパイラ１６によりコンパイルされる。その際に、ＤＦＣコンパイラ１８で生成された、ラッパ(wrapper)関数（符号１０５参照）も、第１のコンパイラ１６においてコンパイルされる。
【００３９】
ＤＦＣコンパイラ１８において生成されたコンフィグレーションファイル１０４は、第２のコンパイラ２０に入力される。第２のコンパイラは、コンフィグレーションにしたがって、マトリクスを構成する実際のＰＥ間の配線を決定する。
【００４０】
このようにして生成された、コンパイルされたプロセッサコアのＣ記述、コンフィグレーションのラッパおよびマトリクスを構成するＰＥの配置配線情報がリンクされて、オブジェクトコード１０６が出来上がる。
【００４１】
シミュレータ／エミュレータ２２は、プロセッサコアおよびマトリクスを含むＬＳＩの動作を模擬することができる。シミュレータ／エミュレータ２２は、第１のコンパイラ１６により生成されたオブジェクトコードと、マトリクスを構成するＰＥの配置配線情報とを入力として、ＬＳＩの実行サイクル数、マトリクスやプロセッサコアの動作などを詳細に解析することができる。
【００４２】
デバッガ２４は、マトリクスをコンフィグレーションのレベルでデバッグすることができる。また、図示していないが、デバッガ２４は、プロセッサコアのＣ記述、或いは、アセンブリ言語レベルでのデバッグも可能である。デバッガ２４においては、プロセッサコア、マトリクスの双方に対して、条件付のブレークポイントを設定することができる。
【００４３】
このように構成された回路設計システムにて設計されるＬＳＩについて簡単に説明する。図２は、本実施の形態にかかるＬＳＩの概略を示すブロックダイヤグラムである。図２に示すように、このＬＳＩは、プロセッサコア３０とマトリクス３２を有し、マトリクス内のＰＥ（たとえば、符号３８）の間の接続を変更することにより、動的再構成可能となる。
【００４４】
マトリクス３２は、ＰＥ３８にデータを与えるためのロード・バッファ３４、演算結果を一時的に記憶するストアバッファ３６、複数のＰＥの配置配線情報を記憶するコンフィグレーションメモリ４０、および、ＬＳＩ外部からマトリクス３２に直接与えられる命令などの入出力を制御するダイレクトＩ／Ｏ４２を有する。
【００４５】
プロセッサコア３０は、たとえば、３２ビットＲＩＳＣであり、汎用レジスタ（図示せず）を内蔵し、また、命令キャッシュ４４やデータキャッシュ４４に接続される。また、ＬＳＩは、高速演算に不可欠な広帯域のデータ入出力のため、クロスバ・スイッチ回路の一種であるスイッチ・バス４８と、ＰＳＩインタフェース、ＤＤＲ・ＳＤＲＡＭインタフェース、ＤＭＡコントローラなどを含む各種インタフェース／コントローラ５０とを有する。
【００４６】
ＬＳＩにおいては、プロセッサの外部メモリに記憶されたコンフィグレーションデータ（つまり、本実施の形態にかかる回路設計システムで設計された、マトリクスを構成するＰＥの配置配線情報）は、コンフィグレーションメモリ４０にロードされ、そのコンフィグレーションデータにしたがって、マトリクス３２内のＰＥの接続が変更される（つまり、マトリクスが書き換えられる）。
【００４７】
図３は、コンフィグレーションメモリ４０の構成をより詳細に示すブロックダイヤグラムである。図３に示すように、本実施の形態においては、４種類のコンフィグレーションデータを記憶することができる。図３において、バンク０（ゼロ）は実行バンクであり（符号３００参照）、実行バンク３００に格納されたコンフィグレーションが、マトリクス４０の配置配線情報として利用される。
【００４８】
また、バンク１〜バンク３はバックグラウンドバンクであり（符号３０１〜３０３参照）、マトリクスにおけるコンフィグレーションの切り替え（他律ダイナミックリコンフィグレーション、および、自律ダイナミックリコンフィグレーション）に伴って、選択回路３０４を経て、実行バンクであるバンク０にロードされて、配置配線情報として利用され得る状態となる。
【００４９】
他律ダイナミックリコンフィグレーションの場合には、通常、バンク１〜バンク３に格納されている、ＰＥの配置配線情報（コンフィグレーションデータ）の何れかが、プロセッサコア上を稼動しているプログラムの働きによって、次のカレントコンフィグレーションとなる。ここに、カレントコンフィグレーションとは、その時点で、実行バンク（バンク０）に格納され、マトリクスの配置配線に反映されているコンフィグレーションをいう。
【００５０】
本実施の形態にかかるデバッグは、コンフィグレーションデータとともに、コンフィグレーションのソースデータ（以下、「コンフィグレーションのデバッグ情報」或いは単に「デバッグ情報」と称する。）を、主メモリに配置し、コンフィグレーションデータがバンクにロードされる際に、そのコンフィグレーションのデバッグ情報領域へのポインタを、バンク毎のテーブル（以下、「バンク情報テーブル」と称する。）に格納することにより実現される。このようなデバッグ情報領域を持つことを支援するプロセッサコアのプログラムのライブラリをデバッグ用制御ライブラリと予備、通常動作用制御ライブラリの機能に加えてデバッグ用処理を持つ。デバッグが終了したプログラムは、通常動作用制御ライブラリを使って余分な処理を経ることなく実行することができる。その一方、デバッグ用制御ライブラリを使用すると、状態によって実行を止め、実行途中の状態をモニターし、また、状態を変更するなどデバッグ作業を行いつつ、アプリケーションを動作させることができる。
【００５１】
以下、制御ライブラリについて簡単に説明する。マトリクスのバンクへの読み込みや、コンフィグレーションの切り替えは、プロセッサコアが、Ｉ／Ｏポートを介することで実現される。プロセッサコアが行うこれらの操作は、ライブラリ関数の中に記述される。これらの操作が記述されたライブラリ関数を含むライブラリを制御ライブラリと称する。制御ライブラリに含まれる関数には、たとえば、以下のようなものが含まれる。
【００５２】
マトリクス＿ｌｏａｄ（ｉｎｔ  ｂａｎｋ）：指定のバンクへのコンフィグレーションデータの読み込み
マトリクス＿ｃｈａｎｇｅ（ｉｎｔ  ｂａｎｋ）：プロセッサコアの制御で他律コンフィグレーションを実行し、カレントコンフィグレーション（バンク０）を、指定のバンクのコンフィグレーションに切り換える
デバッグの際には、上述したように、デバッグ用処理を含むデバッグ用制御ライブラリが使用され、通常の動作の際には、デバッグ用処理が取り除かれた通常動作用制御ライブラリが使用される。
【００５３】
図４は、本実施の形態にかかるデバッガ、および、デバッガに関連する部材（主メモリ等）の構成を示すブロックダイヤグラムである。図４に示すように、デバッガ２４は、デバッグ用モニター５２とコンフィグレーション読み込み部５４と、デバッグ用モニター５２に出力すべきコンフィグレーションを決定するコンフィグレーション決定部５６とを有する。
【００５４】
デバッグ用モニター５２は、実行を一時的に停止させた状態のメモリ空間からデバッグのための情報を読み取り、また、マトリクス中のレジスタ値、設定を読み取ることができる。また、設計者は、デバッグ用モニター５２に指示を与えることで、マトリクス中のレジスタの設定やブレークポイントの設定をすることができる。
【００５５】
コンフィグレーション読み込み部５４は、実行を途中で止められたアプリケーションの現在状態を知るために、コンフィグレーションデータを読み込むことができる。本実施の形態においては、コンフィグレーション読み込み部５４は、マトリクス３２のコンフィグレーションメモリ４０に格納されたバンク０のコンフィグレーションデータを読み込み、かつ、主メモリ６０中のバンク情報テーブル６２において、バンク０に対応付けられたコンフィグレーションのコンフィグレーションデータおよびデバッグ情報を、主メモリ６０から読み出して、これらを比較し、正しくコンフィグレーションがロードされているかを調べることが可能である。
【００５６】
本実施の形態においては、プロセッサコア３０は、制御ライブラリ中の関数「マトリクス＿ｌｏａｄ」を利用して、たとえば、主メモリ６０から、所定のコンフィグレーションデータ（たとえば、コンフィグレーション名＝Ａ（符号６２−１参照））を読み出して、コンフィグレーションメモリ４０の所望のバンク（たとえば、バンク１）にロードする。また、この動作に伴って、バンク情報テーブル６６中、バンク１について、コンフィグレーションデータ（コンフィグレーション名＝Ａ）をロードしたことを示すポインタを書き込むことで、バンク情報テーブル６６を更新する。
【００５７】
また、他律ダイナミックリコンフィグレーションが発生した場合には、制御ライブラリ中の関数「マトリクス＿ｃｈａｎｇｅ」を利用して、バンク１〜３のいずれかのバンクに格納されたコンフィグレーションデータを、バンク０にコピーする。この場合にも、バンク０について、バンク情報テーブル６６が更新される。このように、他律ダイナミックリコンフィグレーションにおいては、バンク情報テーブル６６に記載された、各バンクに格納されたコンフィグレーションを示す情報（たとえば、コンフィグレーション名）と、実際の、コンフィグレーションメモリ４０の各バンクに格納されたコンフィグレーションデータとは一致する。
【００５８】
しかしながら、自律ダイナミックリコンフィグレーションにおいては、マトリクス３２において、自律的に、バンク１〜３のうちのコンフィグレーションが、バンク０に読み込まれ、コンフィグレーションの切り替えが実行されてしまうため、割り込みなどの設定をしない限り、いつ、どのコンフィグレーション切り替えが発生したかを、外部から知ることができないという問題点がある。
【００５９】
デバッガ２４において、デバッグ中のアプリケーションが何らかの要因で停止したときに、自律ダイナミックリコンフィグレーションが発生していると、バンク情報テーブルのバンク０に関連付けられた情報（コンフィグレーション名）は意味の無いものになってしまう。
【００６０】
本実施の形態においては、コンフィグレーション読み込み部５４は、コンフィグレーションメモリ４０のバンク０に格納されたコンフィグレーションデータが、バンク１〜３の何れかからロードされたかが書かれている、コンフィグレーションメモリ４０中の特定のフィールドからのデータも読み込むことができるように構成されている。これにより、自律ダイナミックリコンフィグレーションが発生したことを判断し、ロード元が示すバンクに格納されたコンフィグレーション名を有するデバッグ情報を、主メモリ６０から読み出す。このような構成を採用すれば、自律ダイナミックリコンフィグレーションが発生した場合であっても、正しいコンフィグレーションのデバッグ情報を取得することが可能である。
【００６１】
しかしながら、以下の場合には、上述した構成を採用しても、正しいコンフィグレーションのデバッグ情報を取得することができない。
（１）自律ダイナミックリコンフィグレーションが発生した後に、プロセッサコアにより、命令「マトリクス＿ｌｏａｄ」が実行された場合
（２）自律ダイナミックリコンフィグレーションが複数回発生し、カレントコンフィグレーションには、元のバンクのコンフィグレーションデータが戻ったものの、途中で、命令「マトリクス＿ｌｏａｄ」が実行された場合
そこで、以下、これらの問題点を解決するためのデバッガ２４の構成について詳細に説明する。
【００６２】
［第１の手法］
まず、自律ダイナミックリコンフィグレーションが発生した場合のコンフィグレーションメモリの各バンクの状態などについて説明する。図５（ａ）、（ｂ）は、それぞれ、コンフィグレーションを生じるイベント、コンフィグレーションメモリに格納されたコンフィグレーションデータ名、および、バンク情報テーブルの例を示す図である。
【００６３】
図５において、「ｌｏａｄ」、「自律」、「他律」と記載された矢印型のブロック（たとえば、符号５０１参照）は、コンフィグレーションメモリの各バンクの状態を変化させる３つのイベントを並べており、ある時刻には、３つのうち１つのイベントのみが発生可能である。図５において、ハッチングを付した矢印ブロック（たとえば、符号６０２参照）が、その時刻に発生したイベントを示す。図５（ａ）においては、その時刻に他律ダイナミックリコンフィグレーションが発生し、その際にバンク１が対象となったことを示す。
【００６４】
また、バンク０〜バンク３と記載された方形のブロック５１０は、コンフィグレーションメモリのバンクを示す。それぞれのバンクにかかるブロック（たとえば、符号５１１、５１２参照）中のアルファベットは、当該バンクに格納されたコンフィグレーション名を示す。たとえば、バンク０のブロック（符号５１１参照）には、コンフィグレーション名＝Ａのコンフィグレーションデータが格納されている。また、バンク０のブロック５１１において、左側に括弧（）で示されているコンフィグレーション名は、主メモリのバンク情報テーブル（図４の符号４４参照）において、バンク０に格納されているコンフィグレーション名を示す。また、バンク０のブロック５１１において、括弧［］で示されているコンフィグレーション名は、カレントコンフィグレーション、つまり、バンク０のコンフィグレーションが、どのバンク由来のコンフィグレーションであるかを示す値（以下、これを「バンク由来値」とも称する。）である。したがって、括弧［］で示されるバンク名は、本実施の形態にかかるコンフィグレーション読み込み部５４により取得することができる。
【００６５】
図５（ａ）においては、他律ダイナミックリコンフィグレーションが発生し、制御ライブラリの関数「マトリクス＿ｃｈａｎｇｅ」により、バンク１のコンフィグレーションデータ（コンフィグレーション名＝Ａ）が、カレントコンフィグレーション（バンク０）にコピーされる。したがって、バンク０において、バンク由来値＝１となる。また、これに伴って、主メモリのバンク情報テーブルが書き換えられる（符号５２０参照）。
【００６６】
ここで、図５（ｂ）に示すように、マトリクスにおいて自律ダイナミックリコンフィグレーションが発生し、バンク２のコンフィグレーションデータ（コンフィグレーション名＝Ｂ）が、カレントコンフィグレーション（バンク０）にコピーされて、その後、デバッガ２４によりプログラムの実行が停止された場合を考える。自律ダイナミックリコンフィグレーションは、プロセッサコアには認識されないため、バンク情報テーブルは、図５（ｂ）に示すように変更されていない。その一方、実際には、バンク０には、バンク２に由来するコンフィグレーションデータ（コンフィグレーション名＝Ｂ）が格納されている。したがって、図５（ｂ）において、デバッガ２４が、主メモリ中のバンク情報テーブルを参照して、デバッグ情報を取り出すべきコンフィグレーション名（＝Ａ）を特定すると、誤ってしまう。
【００６７】
そこで、本実施の形態においては、第１の手法として、制御ライブラリの関数「マトリクス＿ｃｈａｎｇｅ」において、カレントコンフィグレーションとされたコンフィグレーションデータが格納されたバンク、つまり供給元となったバンクのバンク番号を静的変数に格納し、プログラムの動作停止時に、デバッガ２４のコンフィグレーション決定部５６が、その静的変数から得られるバンク番号と、コンフィグレーション読み込み部５４により取得されるバンク由来値とを比較し、自律ダイナミックリコンフィグレーションの発生を検知する。
【００６８】
より詳細には、図６（ａ）に示すように、シミュレート或いはエミュレートにおいて、他律ダイナミックリコンフィグレーションが発生したときに（ステップ６０１）、上記制御ライブラリの関数「マトリクス＿ｃｈａｎｇｅ」において、カレントコンフィグレーションとされたコンフィグレーションデータが格納されたバンクのバンク番号を静的変数ｐｂに格納する（ステップ６０２）。たとえば、図５（ａ）の例では、他律ダイナミックリコンフィグレーションにより、バンク１のコンフィグレーションデータが、バンク０にコピーされるため、静的変数ｐｂ＝１となる。
【００６９】
デバッガ２４が、ブレークポイントなど設定された条件の下などで、プログラムの実行を停止すると（ステップ６１１）、デバッガ２４のコンフィグレーション読み込み部５４は、コンフィグレーションメモリ４０からバンク由来値を読み出し、コンフィグレーション決定部５６が、静的変数ｐｂと、取得したバンク由来値とを比較する（ステップ６１２）。両者が一致した場合には（ステップ６１３でイエス(Yes)）、デバッグ用モニター５２は、通常の通り、バンク情報テーブルにおいて、バンク０が示すコンフィグレーション名のデバッグ情報を取得して出力する（ステップ６１４）。その一方、両者が一致しなかった場合には（ステップ６１３でノー(No)）、デバッガ２４は、バンク由来値を参照して、当該バンク由来値に対応するバンク番号が示すコンフィグレーション名のデバッグ情報を取得して出力する（ステップ６１５）。
【００７０】
図５（ａ）の状態の後、図５（ｂ）に示す自律ダイナミックリコンフィグレーションが発生して、プログラムの実行が停止した場合には、静的変数ｐｂ＝１である一方、バンク由来値は「２」となる。したがって両者は一致しないため、バンク由来値に相当するバンク２が示すコンフィグレーション名＝Ｂのデバッグ情報が取得される。
【００７１】
その後、以後のプログラムの実行でもデバッグを可能にするために、デバッガ２４は、静的変数ｐｂを更新し（本例では「＋１」）、かつ、バンク情報テーブルのバンク０に関連付けたコンフィグレーション名を、バンク由来値が示すものに更新する（ステップ６１６）。
【００７２】
このような構成により、静的変数と、由来値との一致を判断することで、自律コンフィグレーションの発生を検知することが可能となる。
【００７３】
［第２の手法］
次に、本実施の形態にかかる第２の手法について説明する。たとえば、自律ダイナミックリコンフィグレーションが１回発生した後、制御ライブラリの関数「マトリクス＿ｌｏａｄ」により新たなコンフィグレーションがロードされ、その後、デバッガ２４によりプログラムの実行が停止した場合を考える。
【００７４】
図７（ａ）〜（ｃ）は、上記場合の具体例を示す図である。たとえば、第１の手法を利用して、静的変数ｐｂとバンク由来値との一致により、どのデバッグ情報を選択すべきかを判断することを考える。図７（ａ）において他律ダイナミックリコンフィグレーションが発生し、バンク１のコンフィグレーションデータ（コンフィグレーション名＝Ａ）が、バンク０にコピーされるため、静的変数ｐｂ＝１となる。また、他律ダイナミックリコンフィグレーションであるため、主メモリのバンク情報テーブルも、バンク０に関連付けられてコンフィグレーション名＝Ａが格納される。
【００７５】
次いで、図７（ｂ）に示すように、自律ダイナミックリコンフィグレーションが発生し、バンク２のコンフィグレーションデータ（コンフィグレーション名＝Ｂ）がバンク０にコピーされ、さらに、図７（ｃ）に示すように、制御ライブラリの関数「マトリクス＿ｌｏａｄ」により、バンク２に、新たなコンフィグレーションデータ（コンフィグレーション名＝Ｄ）がロードされたと考える。制御ライブラリの関数「マトリクス＿ｌｏａｄ」の実行に伴って、主メモリ中のバンク情報テーブルにおいて、バンク２に関連付けられてコンフィグレーション名＝Ｄが格納される。
【００７６】
この場合、第１の手法を用いると、ｐｂ＝１である一方、バンク由来値＝２であるため、バンク由来値に基づいて、バンク情報テーブル中、バンク２に関連付けられたコンフィグレーション名を取得すると「Ｄ」となる。しかしながら、図７（ｃ）に示すように、実際にコンフィグレーションメモリのバンク２には、コンフィグレーション名＝Ｂのコンフィグレーションデータが格納されており、第１の手法の結果得られたコンフィグレーション名と一致しない。
【００７７】
そこで、第２の手法においては、図８に示すように、制御ライブラリの関数「マトリクス＿ｌｏａｄ」において（ステップ８０１）、他律ダイナミックリコンフィグレーション時のバンク番号として、静的変数ｐｂを取得するとともに、コンフィグレーション読み込み部５４が、コンフィグレーションメモリ４０からバンク由来値を取得し、コンフィグレーション決定部５６が、静的変数ｐｂとバンク由来値とを比較する（ステップ８０２）。自律ダイナミックリコンフィグレーションが発生していると考えられる場合、つまり、これらが一致しない場合には（ステップ８０３でノー(No)）、コンフィグレーション決定部５６は、バンク情報テーブル中、バンク０に関連付けて、コンフィグレーション読み込み部５４により取得されたバンク由来値を格納する（ステップ８０４）。また、静的変数ｐｂを、バンク由来値に更新する（ステップ８０５）。つまり、あたかも他律ダイナミックリコンフィグレーションが発生して、バンク情報テーブルや静的変数が書き換えられたかのように、これらの状態を整合させる。その後、コンフィグレーションメモリの指定のバンクに、コンフィグレーションデータが格納される（ステップ８０６）。
【００７８】
上記図７に示す例について、第２の手法を適用した場合の静的変数ｐｂやバンク由来値の状態について、図９を参照して説明する。図９（ａ）の状態（他律ダイナミックリコンフィグレーションが発生し、バンク１のコンフィグレーションデータ（コンフィグレーション名＝Ａ）が、バンク０にコピーされた状態）および図９（ｂ）の状態（自律ダイナミックリコンフィグレーションが発生し、バンク２のコンフィグレーションデータ（コンフィグレーション名＝Ｂ）がバンク０にコピーされた状態）は、それぞれ、図７（ａ）、（ｂ）の状態と一致する。
【００７９】
これに対して、制御ライブラリの関数「マトリクス＿ｌｏａｄ」の処理が開始され、静的変数ｐｂと取得されたバンク番号（バンク由来値）とを比較すると、「１≠２」であるため、ステップ８０３でノー(No)と判断される。したがって、バンク情報テーブルのバンク０に関連付けて、「バンク由来値＝２」を格納するとともに、「静的変数ｐｂ＝２」に書き換える。
【００８０】
デバッガ２４によるプログラムの実行停止時には、第１の手法と同様に、図６（ｂ）に示す処理が実行される。図６（ｂ）の処理において、静的変数ｐｂと、コンフィグレーション読み込み部５４により読み込まれるバンク由来値とが一致し、自律ダイナミックリコンフィグレーションが発生していないと判断され（ステップ６１３でノー(No)）、バンク情報テーブルのバンク０に関連付けられたコンフィグレーション名（この場合には「Ｂ」）のデバッグ情報が主メモリから読み出されて出力される。このように、デバッグ用モニター５２に正しい表示をすることができる。
【００８１】
［第３の手法］
次に、本実施の形態にかかる第３の手法について説明する。たとえば、制御ライブラリ「マトリクス＿ｌｏａｄ」により新たなコンフィグレーションデータが、コンフィグレーションメモリのカレントコンフィグレーションにロードされた後、自律ダイナミックリコンフィグレーションが２回以上発生し、最初のバンク番号に戻り、その後にデバッガ２４によりプログラムの実行が停止された場合を考える。
【００８２】
図１０（ａ）〜（ｄ）は、上記場合の具体例を示す図である。たとえば、第１の手法を利用して、静的変数ｐｂとバンク由来値の一致により、どのデバッグ情報を選択すべきかを判断することを考える。この場合に、静的変数とバンク由来値とは一致するため、バンク情報テーブルのバンク０が示すコンフィグレーション名のデバッグ情報が取り出される。ところが、実際には、制御ライブラリ「マトリクス＿ｌｏａｄ」により新たなコンフィグレーションデータ（コンフィグレーション名＝Ｄ）が、バンク中にロードされ、さらに、そのコンフィグレーションデータが、自律ダイナミックリコンフィグレーションにより、バンク０にコピーされているため、本来であれば、コンフィグレーション名＝Ｄのデバッグ情報が表示されなければならない。
【００８３】
そこで、第３の手法においては、制御ライブラリ「マトリクス＿ｌｏａｄ」が実行される際に、コンフィグレーションデータに基づき、コンフィグレーションを識別するマッチングパターンを生成し、これを、主メモリに記憶しておく。デバッガ２４によるプログラムの実行停止の際に、コンフィグレーション決定部５６が、カレントコンフィグレーション（バンク０のコンフィグレーション）からマッチングパターンを生成し、最も近いと判断されたバンクが、カレントコンフィグレーションの供給元であると判断する。
【００８４】
［第３の手法にかかる具体的処理（その１）］
第１の具体的処理においては、コンフィグレーションにしたがったマトリクス中のＰＥの存在パターンを符号化（たとえばＣＲＣ符号化）する。なお、符号化は、ＣＲＣに限定されるものではなく、他の符号化を適用してもよいことは言うまでもない。
【００８５】
図１１（ａ）に示すように、制御ライブラリの関数「マトリクス＿ｌｏａｄ」において（ステップ１１０１）、コンフィグレーションデータを参照して、コンフィグレーションにしたがったＰＥの存在パターンを生成する（ステップ１１０２）。この存在パターンの生成は、コンフィグレーションにおいてそれぞれの物理位置のＰＥを利用しているか否かを「１」或いは「０」のビットで表わすことにより実現される。
【００８６】
たとえば、コンフィグレーションデータは、ＰＥごとに１〜８ワードのデータを有する。したがって、あるＰＥが５ワードのコンフィグレーションを必要とする場合には、３２（ビット＝１ワード）×５＝１６０ビットのデータ量を必要とする。その一方、そのＰＥを使うか否かであれば、１ビットで足り、存在パターンとして必要なデータ容量を著しく削減することができるとともに、後述する比較処理を短時間で実現することもできる。
【００８７】
存在パターンは、主メモリ中、バンク情報テーブルのバンク番号に関連付けられて記憶される（ステップ１１０３）。たとえば、制御ライブラリ関数「マトリクス＿ｌｏａｄ」が、バンク１に、コンフィグレーション名＝Ｄのコンフィグレーションデータをロードするのであれば、コンフィグレーション名＝Ｄのコンフィグレーションデータを構成するＰＥの存在パターンが、主メモリ中、バンク１に関連付けられて記憶される。
【００８８】
また、他律ダイナミックリコンフィグレーションが発生した場合には、制御ライブラリの関数「マトリクス＿ｃｈａｎｇｅ」により、あるバンクのコンフィグレーションデータが、バンク０にコピーされるときにも、当該コピー先のバンク番号と、ＰＥの存在パターンとが関連付けられる。これにより、バンク番号を参照して、主メモリからＰＥの存在パターンを読み出すことができる。
【００８９】
図１１（ｂ）に示すように、プログラムの実行が停止すると、デバッガ２４のコンフィグレーション読み込み部５４は、マトリクス３２中のバンク０のコンフィグレーションを読み込み（ステップ１１１１）、コンフィグレーション決定部５６が、読み込まれたコンフィグレーションを構成するＰＥの存在パターンを生成し、これを符号化する（ステップ１１１２）。次いで、コンフィグレーション決定部５６は、バンク情報テーブルの各バンクに関連付けられて、主メモリ中に記憶されたＰＥの存在パターンのそれぞれと、ステップ１１１２で得られた存在パターンとを比較し、一致するものを見出す（ステップ１１１３）。コンフィグレーション決定部５６は、実際にバンク０に存在したコンフィグレーションデータから得られた存在パターンと一致するような存在パターンが、バンク０と関連付けられたものであるかを判断する（ステップ１１１４）。
【００９０】
ステップ１１１４でノー(No)と判断された場合には、バンク情報テーブルにおいて、上記読み出されたコンフィグレーションの存在パターンと一致する存在パターンに関連付けられたバンク番号に対応するコンフィグレーション名のデバッグ情報を取得して出力するとともに（ステップ１１１５）、当該バンク番号に対応するコンフィグレーション名を、バンク０にコピーするよう、バンク情報テーブルが更新される（ステップ１１１６）。なお、ステップ１１１４でイエス(Yes)と判断された場合には、バンク情報テーブルにおいてバンク０のコンフィグレーション名のデバッグ情報を読み出して出力すればよい（ステップ１１１７）。
【００９１】
このように、第３の手法では、コンフィグレーション読み出し部５４が読み出したコンフィグレーションデータの存在パターンと、主メモリに記憶しておいたバンク０〜バンク３までの存在パターンとを比較し、一致するもの（或いは後述するように最も類似するもの）をバンク０に供給されたコンフィグレーションであると判断して、バンク情報テーブルおよび静的変数を更新する。
【００９２】
［第３の手法にかかる具体的処理（その２）］
第２の具体的処理では、図１１のステップ１１０２、１１０３において、コンフィグレーションを構成するＰＥの存在パターンを、符号化せずにそのまま保存する。同様に、ステップ１１１２においても、コンフィグレーション読み出しにより取得されたコンフィグレーションデータに基づいて、コンフィグレーションを構成するＰＥの存在パターンを生成する。また、存在パターンの比較（ステップ１１１３）において、双方の存在パターンが完全に一致しない場合でも、コンフィグレーション読み出しにより取得されたコンフィグレーションデータに基づく存在パターンに最も類似する存在パターンを選択するように構成される。
【００９３】
第１の具体的処理においては、たとえば、存在パターンのＣＲＣ符号を比較すればよいため、比較処理が極めて高速に実現できる一方、マトリクスにおいてコンフィグレーションデータの書き換えがあったときに対応できないという問題点がある。その一方、第２の具体的処理においては、存在パターンをビットごとに比較するため、比較自体は第１の具体的処理と比較して時間を要するが、上記コンフィグレーションの書き換えに対応できるという利点がある。
【００９４】
図１０（ａ）に示す状態において、主メモリにおいては、バンク０〜３のそれぞれに関連付けられて、存在パターンＡ（コンフィグレーション名＝Ａに関する存在パターン、以下同様）、存在パターンＡ、存在パターンＢおよび存在パターンＣが記憶される（図１２（ａ）参照）。図１０（ｂ）において、制御ライブラリの関数「マトリクス＿ｌｏａｄ」により、コンフィグレーションメモリのバンク１にコンフィグレーション名＝Ｄのコンフィグレーションがロードされると、これに伴って、コンフィグレーション名＝Ｄのコンフィグレーションデータについて存在パターン（存在パターンＤ）が生成される。これは、バンク１と関連付けて主メモリ中に記憶される（図１２（ｂ）参照）。また、バンク情報テーブルも書き換えられる。
【００９５】
図１０（ｃ）、（ｄ）に示す自律ダイナミックリコンフィグレーションは、マトリクスの外部から検出することはできない。第３の手法にしたがって図１１（ｂ）に示す処理を実行することにより、実際にマトリクスのコンフィグレーションメモリのバンク０に格納されているコンフィグレーションデータは、バンク情報テーブルに従うと、バンク１に格納されているとされたもの（コンフィグレーション名＝Ｄ）であると判断される。そこで、図１２（ｃ）に示すようにバンク情報テーブルが更新され、また、静的変数ｐｂも、図１２（ｄ）に示すように更新される。
【００９６】
［第４の手法］
次に、本実施の形態にかかる第４の手法について説明する。第１の手法における問題が生じる状態および第２の手法における問題が生じる状態の複合状態では、第３の手法を用いても、正しいコンフィグレーションデータを特定することができない。たとえば、
（１）制御ライブラリの関数「マトリクス＿ｌｏａｄ」により新たなコンフィグレーションデータが、コンフィグレーションメモリのカレントコンフィグレーションにロードされた後、
（２）自律ダイナミックリコンフィグレーションが２回以上発生し、最初のバンク番号に戻り、
（３）再び、新たなコンフィグレーションデータが、同じバンクに、制御ライブラリの関数「マトリクス＿ｌｏａｄ」を用いてロードされ、
（４）その後、デバッガ２４によりプログラムの実行が停止された場合を考える。
【００９７】
図１３（ａ）〜（ｅ）は、上記場合の具体例を示す図である。図１３（ａ）〜（ｄ）は、それぞれ、図１０（ａ）〜（ｄ）と同様である。この例では、図１３（ｅ）に示すように、さらに、制御ライブラリの関数「マトリクス＿ｌｏａｄ」により、新たなコンフィグレーションデータ（コンフィグレーション名＝Ｅ）が、コンフィグレーションメモリのバンク１に記憶される。
【００９８】
第３の手法を利用して、コンフィグレーション決定部５６において、コンフィグレーション読み出し部５４により読み出されたコンフィグレーションデータの存在パターンと、バンク情報テーブルのバンク番号と関連付けられた存在パターンとを比較することを考える。しかしながら、図１３（ｅ）に示す状態では、バンク１に、コンフィグレーション名＝Ｅのコンフィグレーションデータをロードしているため、主メモリには、コンフィグレーション名＝Ａ、Ｅ、Ｂ、Ｃの存在パターンのみが残され、その結果、適切なコンフィグレーション名を特定することが不可能である。第４の手法では、上述した場合でも適切なコンフィグレーション名を特定し、そのデバッガ情報をデバッグ用モニターが出力することを可能にする。
【００９９】
第４の手法においても、制御ライブラリの関数「マトリクス＿ｌｏａｄ」の実行時に、図１１のステップ１１０２に示すような、ロードするコンフィグレーションのデータを構成するＰＥの存在パターンが生成され、主メモリ中、そのバンク番号と関連付けられて記憶される。さらに、図１４に示すように、制御ライブラリの関数「マトリクス＿ｌｏａｄ」において（ステップ１４０１）、他律ダイナミックリコンフィグレーション時のバンク番号として静的変数ｐｂを取得するとともに、コンフィグレーション読み込み部５４が、コンフィグレーションメモリ４０からバンク由来値を取得し、コンフィグレーション決定部５６が、静的変数ｐｂとバンク由来値とを比較する（ステップ１４０２）。
【０１００】
自律ダイナミックリコンフィグレーションが発生していないと考えられる場合、つまり、これらが一致する場合には（ステップ１４０３でイエス(Yes)）、コンフィグレーション決定部５６は、コンフィグレーション読み込み部５４により取得されたコンフィグレーションデータに基づき存在パターンを生成する（ステップ１４０４）。
【０１０１】
次いで、コンフィグレーション決定部５６は、バンク情報テーブルの各バンクに関連付けられて、主メモリ中に記憶されたＰＥの存在パターンのそれぞれと、ステップ１１１２で得られた存在パターンとを比較し、一致するものを見出す（ステップ１４０５）。さらに、コンフィグレーション決定部５６は、主メモリのバンク情報テーブルにおいて、バンク０のコンフィグレーション名を、一致した存在パターンのコンフィグレーション名に更新するとともに（ステップ１４０６）、バンク情報テーブルにおいて、一致した存在パターンのコンフィグレーション名が格納されていたバンク番号となるように更新する（ステップ１４０７）。
【０１０２】
ステップ１４０３でノー(No)と判断された場合には、第２の手法と同様である。図１４において、ステップ１４０８、１４０９は、図８のステップ８０４、８０５にそれぞれ対応する。
【０１０３】
このような処理の後、コンフィグレーションメモリの指定のバンクに、コンフィグレーションデータがロードされる（ステップ１４１０）。
【０１０４】
図１５（ａ）および（ｂ）は、それぞれ、図１３（ｄ）に示すコンフィグレーションデータのロード前で、かつ、図１４に示す処理（ステップ１４０４〜１４０７）の実行前のバンク情報テーブルおよびコンフィグレーションメモリの状態を示す。また、図１５（ｃ）および（ｄ）は、それぞれ、図１３（ｄ）に示すコンフィグレーションデータのロード前で、かつ、図１４に示す処理の実行後のバンク情報テーブルおよびコンフィグレーションメモリの状態を示す。
【０１０５】
コンフィグレーション読み出しにより読み出されたコンフィグレーションデータのコンフィグレーション名＝Ｄであり、存在パターンの比較により、同じコンフィグレーションデータは、主メモリのバンク情報テーブル中、バンク１に関連付けられていることがわかる。そこで、図１５（ｃ）に示すように、バンク０には、コンフィグレーション名＝Ｄのコンフィグレーションデータが格納されていることを示すように、バンク情報テーブルが更新される。
【０１０６】
図１６（ａ）〜（ｅ）は、第４の手法を適用した場合の、コンフィグレーションメモリの状態を示す図である。図１６（ａ）〜（ｄ）は、それぞれ、図１３（ａ）〜（ｄ）と一致する。図１６（ｅ）においては、図１５（ｃ）に示す状態から、さらに、コンフィグレーションメモリに、コンフィグレーション名Ｅのコンフィグレーションデータがロードされている。このような場合でも、実行停止の後、デバッガ２４は、バンク情報テーブル中、バンク０のコンフィグレーション名Ｄに基づいて、適切なコンフィグレーションのデバッグ情報を読み出して出力することができる。
【０１０７】
［第１の手法〜第４の手法による処理負荷およびこれらの相互関係］
図１７は、従来の手法と、本実施の形態にかかる第１の手法〜第４の手法による処理負荷を示す。図１７において、丸印が、その手法において実行される処理を示す。また、×印は、その手法においては、実行されない処理を示す。
【０１０８】
図１７に示すように、第１の手法においては、他律ダイナミックリコンフィグレーションの発生時（つまり、制御ライブラリの関数「マトリクス＿ｃｈａｎｇｅ」の実行時）に、静的変数ｐｂに、カレントコンフィグレーションとなるコンフィグレーションのバンク番号を記憶するとともに、プログラムの実行停止時に、静的変数と、コンフィグレーションメモリから読み出したバンク由来値の一致を判断する。これにより、自律ダイナミックリコンフィグレーションの発生を検出する。
【０１０９】
第２の手法においては、コンフィグレーションメモリのバンクへのロード時、つまり、制御ライブラリの関数「マトリクス＿ｌｏａｄ」の実行時に、静的変数ｐｂとバンク由来値が一致しない場合には、その時点で、あたかも他律ダイナミックリコンフィグレーションが発生したように、静的変数を更新している。
【０１１０】
その一方、第３の手法においては、第１の手法において、自律ダイナミックリコンフィグレーションが発生していないと判断された場合にも、存在パターンの比較により、自律ダイナミックリコンフィグレーションが複数回発生して最初のバンク番号に戻ってしまった場合にも対応できるようにしている。
【０１１１】
さらに、第４の手法においては、第３の手法に加えて、コンフィグレーションメモリのバンクへのロード時に、第２の手法において一定の処理を行ったように、存在パターンの比較により、静的変数ｐｂの整合を図っている。
【０１１２】
［デバッガにおける選択］
本実施の形態においては、設計者のデバッガに対する要求水準にしたがって、上記第１の手法から第４の手法のいずれかを提供してデバッガ２４が動作できるようなっている。さらに、上述した手法を用いず、従来と同様に、単に、コンフィグレーション読み出し部５４から読み出されたバンク由来値にしたがって、バンク情報テーブル中のコンフィグレーション名を特定し、そのデバッグ情報を取得するように設定することも可能である。
【０１１３】
ここでは、静的な機能選択する実装（静的実装）と、動的に機能選択を許す実装（動的実装）とを考えることができる。静的実装においては、Ｃ言語のマクロに数値をあてはめ、アプリケーションのコンパイル時に定義されるその数値によってライブラリの中で呼ばれる処理を変えられるようにしておけば良い。
【０１１４】
動的実装においては、アプリケーションプログラムのコンパイル時には最低のデバッグレベルで動作するようにしておく。ただし、スタティックまたはグローバルな変数の値によって処理を帰るようなライブラリ関数の構造を構築しておく。そのまま実行すると、その変数の値は変化しないが、デバッガの請求項亭により、変数の値を実行の前に書き換えることができ、目的のデバッグレベルで実行することが可能となる。
【０１１５】
本実施の形態によれば、自律ダイナミックリコンフィグレーション発生後のデバッグを行うことが可能となる。また、デバッガの処理負荷の軽減が必要な場合には、機能の選択により効率的にデバッグを実現することができる。
【０１１６】
また、本実施の形態においては、前回デバッガが停止したとき、制御ライブラリの関数「マトリクス＿ｌｏａｄ」が実行されたとき、或いは、制御ライブラリの関数「マトリクス＿ｃｈａｎｇｅ」が実行されたときのいずれかの１時点の状態と、現時点の状態から得られる状態を比較し、カレントコンフィグレーションのデバッグ情報を取得し、或いは、デバッグ情報の状態を更新する。したがって、自律ダイナミックリコンフィグレーションや「マトリクス＿ｌｏａｄ」が幾度も繰り返されることが想定されるアプリケーションであっても、多くの記憶容量を要することなく、つまり、主メモリ等を破綻させることなく継続したプログラムの実行およびデバッグを実現することが可能となる。
【０１１７】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【０１１８】
たとえば、前記実施の形態の第３の手法および第４の手法において、マッチングパターンとして、コンフィグレーションを構成するＰＥの利用の是非を示すビットからなる存在パターンを利用しているがこれに限定されるものはない。コンフィグレーションデータ全体を使ってこれを符合化（たとえば、ＣＲＣ符号化）しても良い。また、マトリクスにおけるプログラムの実行の際に変更される可能性のあるコンフィグレーションの部分を除き、符号化をしてもよい。
【０１１９】
また、前記実施の形態において、コンフィグレーションメモリのバンクの数は４としたが、この数が限定されるものではないことは言うまでも無い。
【図面の簡単な説明】
【０１２０】
【図１】図１は、本実施の形態にかかる回路設計システムの概略を示すブロックダイヤグラムである。
【図２】図２は、本実施の形態にかかるＬＳＩの概略を示すブロックダイヤグラムである。
【図３】図３は、コンフィグレーションメモリの構成をより詳細に示すブロックダイヤグラムである。
【図４】図４は、本実施の形態にかかるデバッガ、および、デバッガに関連する部材（主メモリ等）の構成を示すブロックダイヤグラムである。
【図５】図５（ａ）、（ｂ）は、それぞれ、コンフィグレーションを生じるイベント、コンフィグレーションメモリに格納されたコンフィグレーション名、および、バンク情報テーブルの例を示す図である。
【図６】図６は、本実施の形態にかかる第１の手法において実行される処理を示すフローチャートである。
【図７】図７（ａ）〜（ｃ）は、それぞれ、イベントにしたがった、コンフィグレーションメモリの状態およびバンク情報テーブルの状態の例を示す図である。
【図８】図８は、本実施の形態にかかる第２の手法において実行される処理を示すフローチャートである。
【図９】図９（ａ）〜（ｃ）は、それぞれ、第２の手法を適用した場合の、コンフィグレーションメモリの状態およびバンク情報テーブルの状態の例を示す図である。
【図１０】図１０（ａ）〜（ｄ）は、それぞれ、イベントにしたがった、コンフィグレーションメモリの状態およびバンク情報テーブルの状態の例を示す図である。
【図１１】図１１は、本実施の形態にかかる第３の手法において実行される処理を示すフローチャートである。
【図１２】図１２（ａ）〜（ｄ）は、それぞれ、第３の手法を適用した場合の、コンフィグレーションメモリの状態およびバンク情報テーブルの状態の例を示す図である。
【図１３】図１３（ａ）〜（ｅ）は、それぞれ、イベントにしたがった、コンフィグレーションメモリの状態およびバンク情報テーブルの状態の例を示す図である。
【図１４】図１４は、本実施の形態にかかる第４の手法において実行される処理を示すフローチャートである。
【図１５】図１５は、図１４に示す処理を具体的に説明する図である。
【図１６】図１６（ａ）〜（ｅ）は、それぞれ、第４の手法を適用した場合の、コンフィグレーションメモリの状態およびバンク情報テーブルの状態の例を示す図である。
【図１７】図１７は、本実施の形態にかかる第１の手法〜第４の手法のそれぞれの相互関係を示す図である。
【符号の説明】
【０１２１】
１２    アルゴリズム設計部
１４    プロファイラ
１６    第１のコンパイラ
１８    ＤＦＣコンパイラ
２０    第２のコンパイラ
２２    シミュレータ／エミュレータ
２４    デバッガ
５２    デバッグ用モニター
５４    コンフィグレーション読み出し部
５６    コンフィグレーション決定部
【図１】
2006164186.tif 000003
【図２】
2006164186.tif 000004
【図３】
2006164186.tif 000005
【図４】
2006164186.tif 000006
【図５】
2006164186.tif 000007
【図６】
2006164186.tif 000008
【図７】
2006164186.tif 000009
【図８】
2006164186.tif 000010
【図９】
2006164186.tif 000011
【図１０】
2006164186.tif 000012
【図１１】
2006164186.tif 000013
【図１２】
2006164186.tif 000014
【図１３】
2006164186.tif 000015
【図１４】
2006164186.tif 000016
【図１５】
2006164186.tif 000017
【図１６】
2006164186.tif 000018
【図１７】
2006164186.tif 000019