(57)【要約】【課題】ユーザーが設計した回路をプログラマブルデバイス（ＦＰＧＡ）で構成したときに全てのＦＰＧＡ領域を使用することはまれであり、ほとんどの場合ＦＰＧＡには余剰部分が発生しＦＰＧＡ領域を有効に利用できなかった。【解決手段】半導体集積回路１０の内部に、回路構成が書き換え可能であるＦＰＧＡ１１と、ＣＰＵ１２と、ＦＰＧＡ１１に所望の回路１３を構成する回路構成手段１４と、ＦＰＧＡ１１の中で回路１３で使用しない部分を抽出し、その未使用部分に内部メモリ１５を構成するメモリ構成手段１６と、ＣＰＵ１２が内部メモリ１５に格納されている命令もしくはデータを取得するメモリアクセス手段１７とを備えることで、ＦＰＧＡ１１内の未使用領域に構成情報のないメモリ１５を自動で構成することができ、ＦＰＧＡ領域の有効利用を図ることができる。【選択図】　　　　図１
2004032043.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
回路構成が書き換え可能であるプログラマブルデバイスと、
前記プログラマブルデバイスに所望の回路を構成する回路構成手段と、
前記プログラマブルデバイスの前記所望の回路で使用しない未使用部分に内部メモリを構成するメモリ構成手段と、
前記ＣＰＵから前記内部メモリへのアクセスを可能にするメモリアクセス手段と
を備えた半導体集積回路。
【請求項２】
前記メモリ構成手段は、前記プログラマブルデバイスと前記回路構成手段で構成する所望の回路部分とを比較することによって前記プログラマブルデバイスの未使用部分を抽出する機能を有することを特徴とする請求項１記載の半導体集積回路。
【請求項３】
前記メモリ構成手段は、前記プログラマブルデバイスの回路構成を規定する回路構成データから未使用部分を抽出する機能を有することを特徴とする請求項１記載の半導体集積回路。
【請求項４】
前記プログラマブルデバイス内の構成を、所望の第１の回路と第１の内部メモリが構成された第１の回路構成から、所望の第２の回路と第２の内部メモリが構成された第２の回路構成に書き換える場合に、前記プログラマブルデバイス内の構成が前記第２の回路構成となる前に前記第１の内部メモリに記憶されているデータを他のメモリに転送するメモリ内容退避手段と、
前記第１の回路と第１の内部メモリが前記プログラマブルデバイスに再構成された場合、再構成された前記第１の内部メモリに前記他のメモリから前記メモリ内容退避手段により転送されたデータを転送するメモリ内容復帰手段と
を設けたことを特徴とする請求項１記載の半導体集積回路。
【請求項５】
前記プログラマブルデバイスは、それぞれが異なる前記所望の回路と内部メモリからなる複数の回路構成を保持し、
前記複数の回路構成のうちから動作させる回路構成を一つ選択する構成選択手段と、
前記複数の回路構成のうち第１の回路構成に含まれる内部メモリに記憶されているデータを前記第１の回路構成が前記構成選択手段により選択されてないときに他のメモリに転送するメモリ内容退避手段と、
前記メモリ内容退避手段により転送されたデータを前記第１の回路構成が前記構成選択手段により選択されてないときに前記他のメモリから前記第１の回路構成に含まれる内部メモリに転送するメモリ内容復帰手段と
を設けたことを特徴とする請求項１記載の半導体集積回路。
【請求項６】
前記メモリアクセス手段は、前記ＣＰＵが前記半導体集積回路の外部に接続された外部メモリの特定のアドレスにアクセスしようとした場合に、前記外部メモリではなく、前記プログラマブルデバイス内に構成された内部メモリの前記特定のアドレスに対応するアドレスにアクセスする機能を有することを特徴とする請求項１記載の半導体集積回路。
【請求項７】
ＣＰＵと回路構成が書き換え可能であるプログラマブルデバイスとを備えた半導体集積回路の、前記プログラマブルデバイスに構成されるハードウェアの構成データを生成するハードウェアコンパイラと、前記ＣＰＵで実行されるソフトウェアのプログラムを生成するソフトウェアコンパイラとを備えたコンパイラであって、
前記ハードウェアコンパイラは、前記プログラマブルデバイスの未使用部分を抽出し、前記未使用部分に内部メモリを構成する構成データを含む前記ハードウェアの構成データを生成し、前記ソフトウェアコンパイラは前記内部メモリを使用するプログラムを生成する機能を有したコンパイラ。
【請求項８】
前記ハードウェアコンパイラは、前記ＣＰＵが実行する命令を格納する内部メモリを前記未使用部分に構成する機能を有したことを特徴とする請求項７記載のコンパイラ。
【請求項９】
前記ハードウェアコンパイラは、前記ＣＰＵが実行する命令を格納する内部メモリを前記未使用部分に構成する機能を有し、前記ソフトウェアコンパイラは、前記内部メモリに該当するアドレス空間に実行頻度が高い命令の部分を優先的に配置する機能を有したことを特徴とする請求項７記載のコンパイラ。
【請求項１０】
ソフトウェアのプログラムが内部メモリ空間と外部命令空間に分かれて配置され、前記ソフトウェアコンパイラは、外部命令空間に配置される命令のうち実行頻度が高い命令の部分を前記内部メモリに該当するアドレス空間に配置する機能を有したことを特徴とする請求項９記載のコンパイラ。
【請求項１１】
前記ハードウェアコンパイラは、前記ＣＰＵが使用するデータを格納する内部メモリを前記未使用部分に構成する機能を有したことを特徴とする請求項７記載のコンパイラ。
【請求項１２】
前記ハードウェアコンパイラは、前記ＣＰＵが使用するデータを格納する内部メモリを前記未使用部分に構成する機能を有し、前記ソフトウェアコンパイラは、前記内部メモリに該当するアドレス空間に使用頻度の高いデータを優先的に配置する機能を有したことを特徴とする請求項７記載のコンパイラ。
【請求項１３】
前記半導体集積回路の前記プログラマブルデバイス内の構成を内部メモリを含む第１の回路構成から第２の回路構成に書き換える場合に、前記ソフトウェアコンパイラは前記内部メモリに記憶されているデータを退避させる必要がないように考慮してプログラムを生成する機能を有したことを特徴とする請求項７記載のコンパイラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ　Ｌｏｇｉｃ　Ｄｅｖｉｃｅ）もしくはＦＰＧＡ（Ｆｉｅｌｄ　Ｐｒｏｇｒａｍｍａｂｌｅ　Ｇａｔｅ　Ａｒｒａｙ）と呼ばれるプログラマブルデバイスを混載した半導体集積回路およびコンパイラに関するものである。
【０００２】
【従来の技術】
従来より、ＰＬＤもしくはＦＰＧＡと呼ばれるプログラマブルデバイスが広く知られている（以下、本明細書では、これらのプログラマブルデバイスを代表してＦＰＧＡと記載する）。ＦＰＧＡはユーザーがその回路構成をプログラミングすることが可能であるデバイスであって、ユーザーが設計した回路を即座に構成し、その動作を実現できるメリットがある。特に回路構成を繰り返し再構成できるＦＰＧＡの場合には、その時々に必要な回路構成に柔軟に変更して処理性能が上げられるというメリットもある。
【０００３】
【発明が解決しようとする課題】
しかし、上記従来のＦＰＧＡを搭載した半導体集積回路においては、ユーザーが設計した回路をＦＰＧＡで構成したときに全てのＦＰＧＡ領域を使用することはまれであり、ほとんどの場合ＦＰＧＡには余剰部分が発生しＦＰＧＡ領域の有効な利用ができなかったという問題を有していた。
【０００４】
本発明は、上記従来の問題を鑑み、プログラマブルデバイス領域（ＦＰＧＡ領域）の有効利用を図ることのできる半導体集積回路およびコンパイラを提供することを目的としたものである。
【０００５】
【課題を解決するための手段】
本発明の請求項１記載の半導体集積回路は、ＣＰＵと、回路構成が書き換え可能であるプログラマブルデバイスと、プログラマブルデバイスに所望の回路を構成する回路構成手段と、プログラマブルデバイスの所望の回路で使用しない未使用部分に内部メモリを構成するメモリ構成手段と、ＣＰＵから内部メモリへのアクセスを可能にするメモリアクセス手段とを備えている。
【０００６】
この請求項１の構成によれば、プログラマブルデバイス内の所望の回路で使用しない未使用部分に内部メモリを構成することができ、プログラマブルデバイス領域の有効利用を図ることができる。
【０００７】
また、請求項２記載の半導体集積回路は、請求項１記載の半導体集積回路において、メモリ構成手段は、プログラマブルデバイスと回路構成手段で構成する所望の回路部分とを比較することによってプログラマブルデバイスの未使用部分を抽出する機能を有することを特徴とする。
【０００８】
この請求項２の構成によれば、請求項１の効果に加え、メモリ構成手段によってプログラマブルデバイスの未使用部分を自動抽出することができる。
【０００９】
また、請求項３記載の半導体集積回路は、請求項１記載の半導体集積回路において、メモリ構成手段は、プログラマブルデバイスの回路構成を規定する回路構成データから未使用部分を抽出する機能を有することを特徴とする。
【００１０】
この請求項３の構成によれば、請求項１の効果に加え、半導体集積回路の構成情報を変更する必要がなく従来の回路構成データを使用することができる。
【００１１】
また、請求項４記載の半導体集積回路は、請求項１記載の半導体集積回路において、プログラマブルデバイス内の構成を、所望の第１の回路と第１の内部メモリが構成された第１の回路構成から、所望の第２の回路と第２の内部メモリが構成された第２の回路構成に書き換える場合に、プログラマブルデバイス内の構成が第２の回路構成となる前に第１の内部メモリに記憶されているデータを他のメモリに転送するメモリ内容退避手段と、第１の回路と第１の内部メモリがプログラマブルデバイスに再構成された場合、再構成された第１の内部メモリに他のメモリからメモリ内容退避手段により転送されたデータを転送するメモリ内容復帰手段とを設けたことを特徴とする。
【００１２】
この請求項４の構成によれば、請求項１の効果に加え、プログラマブルデバイス内に構成される内部メモリの内容を失うことなく、プログラマブルデバイス内の回路構成を変更することができる。
【００１３】
また、請求項５記載の半導体集積回路は、請求項１記載の半導体集積回路において、プログラマブルデバイスは、それぞれが異なる所望の回路と内部メモリからなる複数の回路構成を保持し、複数の回路構成のうちから動作させる回路構成を一つ選択する構成選択手段と、複数の回路構成のうち第１の回路構成に含まれる内部メモリに記憶されているデータを第１の回路構成が構成選択手段により選択されてないときに他のメモリに転送するメモリ内容退避手段と、メモリ内容退避手段により転送されたデータを第１の回路構成が構成選択手段により選択されてないときに他のメモリから第１の回路構成に含まれる内部メモリに転送するメモリ内容復帰手段とを設けたことを特徴とする。
【００１４】
この請求項５の構成によれば、請求項１の効果に加え、プログラマブルデバイス内に構成する回路構成を複数にして、その回路構成が選択されていないときに、その選択されていない回路構成の内部メモリのデータを退避及び復帰させることで、ＣＰＵがプログラマブルデバイス内の内部メモリのデータの退避及び復帰を待つことなく処理を続けることができ、半導体集積回路全体の処理を高速化することができる。
【００１５】
また、請求項６記載の半導体集積回路は、請求項１記載の半導体集積回路において、メモリアクセス手段は、ＣＰＵが半導体集積回路の外部に接続された外部メモリの特定のアドレスにアクセスしようとした場合に、外部メモリではなく、プログラマブルデバイス内に構成された内部メモリの特定のアドレスに対応するアドレスにアクセスする機能を有することを特徴とする。
【００１６】
外部メモリにはＣＰＵが実行する命令またはデータが格納されており、ＣＰＵが命令またはデータを読み込むのに外部メモリにアクセスしていたが、請求項６の構成のように、外部メモリのアドレスとプログラマブルデバイス内の内部メモリのアドレスとに対応したメモリアクセス手段を備え、外部メモリにある命令またはデータの一部を内部メモリに格納しておくことで、ＣＰＵが命令またはデータを読み込むのに内部メモリにアクセスし、ＣＰＵのメモリアクセス速度を向上させることができ、処理を高速化できる。
【００１７】
本発明の請求項７記載のコンパイラは、ＣＰＵと回路構成が書き換え可能であるプログラマブルデバイスとを備えた半導体集積回路の、プログラマブルデバイスに構成されるハードウェアの構成データを生成するハードウェアコンパイラと、ＣＰＵで実行されるソフトウェアのプログラムを生成するソフトウェアコンパイラとを備えたコンパイラであって、ハードウェアコンパイラは、プログラマブルデバイスの未使用部分を抽出し、未使用部分に内部メモリを構成する構成データを含むハードウェアの構成データを生成し、ソフトウェアコンパイラは内部メモリを使用するプログラムを生成する機能を有している。
【００１８】
この請求項７の構成によれば、プログラマブルデバイス内に内部メモリを構成するようにコンパイルすることで、プログラマブルデバイス領域の有効利用を図ることができるとともに、半導体集積回路内の内部メモリを構成するに必要なハードウェア量を削減することができる。
【００１９】
また、請求項８記載のコンパイラは、請求項７記載のコンパイラにおいて、ハードウェアコンパイラは、ＣＰＵが実行する命令を格納する内部メモリを未使用部分に構成する機能を有したことを特徴とする。
【００２０】
この請求項８の構成によれば、請求項７と同様の効果が得られ、また、内部メモリにＣＰＵが実行する命令を格納できる。
【００２１】
また、請求項９記載のコンパイラは、請求項７記載のコンパイラにおいて、ハードウェアコンパイラは、ＣＰＵが実行する命令を格納する内部メモリを未使用部分に構成する機能を有し、ソフトウェアコンパイラは、内部メモリに該当するアドレス空間に実行頻度が高い命令の部分を優先的に配置する機能を有したことを特徴とする。
【００２２】
この請求項９の構成によれば、請求項７の効果に加え、内部メモリに実行頻度が高い命令の部分を優先的に配置することで、処理の高速化を行うことができる。
【００２３】
また、請求項１０記載のコンパイラは、請求項９記載のコンパイラにおいて、ソフトウェアのプログラムが内部メモリ空間と外部命令空間に分かれて配置され、ソフトウェアコンパイラは、外部命令空間に配置される命令のうち実行頻度が高い命令の部分を内部メモリに該当するアドレス空間に配置する機能を有したことを特徴とする。
【００２４】
この請求項１０の構成によれば、請求項９と同様の効果が得られる。
【００２５】
また、請求項１１記載のコンパイラは、請求項７記載のコンパイラにおいて、ハードウェアコンパイラは、ＣＰＵが使用するデータを格納する内部メモリを未使用部分に構成する機能を有したことを特徴とする。
【００２６】
この請求項１１の構成によれば、請求項７と同様の効果が得られ、また、内部メモリにＣＰＵが使用するデータを格納できる。
【００２７】
また、請求項１２記載のコンパイラは、請求項７記載のコンパイラにおいて、ハードウェアコンパイラは、ＣＰＵが使用するデータを格納する内部メモリを未使用部分に構成する機能を有し、ソフトウェアコンパイラは、内部メモリに該当するアドレス空間に使用頻度の高いデータを優先的に配置する機能を有したことを特徴とする。
【００２８】
この請求項１２の構成によれば、請求項７の効果に加え、内部メモリに使用頻度が高いデータを優先的に配置することで、処理の高速化を行うことができる。
【００２９】
また、請求項１３記載のコンパイラは、請求項７記載のコンパイラにおいて、半導体集積回路のプログラマブルデバイス内の構成を内部メモリを含む第１の回路構成から第２の回路構成に書き換える場合に、ソフトウェアコンパイラは内部メモリに記憶されているデータを退避させる必要がないように考慮してプログラムを生成する機能を有したことを特徴とする。
【００３０】
この請求項１３の構成によれば、半導体集積回路のプログラマブルデバイス内の構成を第１の構成から第２の構成にする場合に、内部メモリ内のデータの退避が行われないので処理の高速化を行うことができる。
【００３１】
【発明の実施の形態】
図１は、本発明の第１の実施の形態における半導体集積回路のブロック図である。図１に示すように、本第１の実施の形態の半導体集積回路１０の内部には、ＦＰＧＡ１１と、ＣＰＵ１２と、ＦＰＧＡ１１に所望の回路１３を構成する回路構成手段１４と、ＦＰＧＡ１１の中で回路１３を構成するのに使用しない部分に内部メモリ１５を構成するメモリ構成手段１６と、ＣＰＵ１２が内部メモリ１５に格納されている命令もしくはデータを取得するメモリアクセス手段１７と、内部メモリ１５に記憶されているデータを外部メモリ１８に転送するメモリ内容退避手段１９と、外部メモリ１８に退避されたデータを内部メモリ１５に転送するメモリ内容復帰手段２０と、を備えている。
【００３２】
ＦＰＧＡ１１は所望の回路１３を回路構成手段１４により書き込まれ、内部メモリ１５をメモリ構成手段１６により書き込まれる。同時に内部メモリ１５の容量に応じて、命令およびデータが外部メモリ１８から内部メモリ１５へ移される。外部メモリ１８にはＣＰＵ１２が実行する命令やデータが格納されており、内部メモリ１５がＦＰＧＡ１１に構成された時に外部メモリ１８にある命令およびデータの一部を格納する。この内部メモリ１５に格納する命令およびデータは、ＦＰＧＡ１１内に構成されるアドレスデコード部（これについては後述する）の作成したアドレスに対応した外部メモリ１８の中にある命令およびデータである。
【００３３】
ＣＰＵ１２はＦＰＧＡ１１に回路１３を構成したいときに構成要求信号を回路構成手段１４に送る。そして、回路構成手段１４がＦＰＧＡ１１に回路１３を構成し終わると回路構成手段１４から回路構成終了信号を受け取る。ＣＰＵ１２はＦＰＧＡ１１内の回路１３にアクセス可能であるが、ＣＰＵ１２が回路構成手段１４に構成要求信号を出してから回路構成終了信号を受け取るまでの間だけ、回路１３にアクセスすることができない。
【００３４】
図２を用いて回路構成手段１４の機能を説明する。図２は回路構成手段１４の動作を示すフローチャートである。
【００３５】
回路構成手段１４は、ステップＳＴ２１でＦＰＧＡ１１に回路（回路１３Ａとする）を構成する構成要求信号をＣＰＵ１２から受け取ると、ステップＳＴ２２に進んでＦＰＧＡ１１に他の回路（回路１３Ｂとする）が構成されているかどうかを回路履歴情報により判断する。
【００３６】
回路履歴情報は回路構成手段１４内に保持されている情報であり、ＦＰＧＡ１１内に構成した回路の回路構成データに付加されているヘッダー部を保持している。新たな回路がＦＰＧＡ１１内に構成されるとその回路の回路構成データに付加されているヘッダー部が追加され、回路履歴情報の一番上の回路が現在ＦＰＧＡ１１に構成されていることを表している。また、ＦＰＧＡ１１に回路を構成する回路構成データに付加されているヘッダー部にはその回路固有の番号とその回路のＦＰＧＡ１１使用容量が記述されている。さらに、回路履歴情報は新たな回路がＦＰＧＡ１１内に構成されたとき、以前に構成していた回路の内部メモリの内容を退避させたかどうかを表す部分も保持している。さらに内部メモリの内容を退避させた場合には、退避させている場所も保持されている。
【００３７】
図３に回路履歴情報の例を示す。１行目にはＦＰＧＡ１１に現在構成されている回路の情報が保持されており、１番目の“２”が構成している回路が回路１３Ｂであることを、２番目の“０”が内部メモリのデータを退避していないことを表している。次に２行目には現在の回路の前にＦＰＧＡ１１に構成されていた回路の情報が保持されており、１番目の“１”が構成している回路が回路１３Ａであることを、２番目の“１”が内部メモリのデータを退避していることを、３番目の“ｃ０００００００”が内部メモリの内容を退避しているメモリのアドレスを表している。
【００３８】
ステップＳＴ２２で、ＦＰＧＡ１１に回路１３Ｂが構成されていない場合、ステップＳＴ２３に進んで回路１３ＡをＦＰＧＡ１１に構成する回路構成データをコンフィギュレーションメモリ２１から受け取り、その回路構成データを基にＦＰＧＡ１１に回路１３Ａを構成する。さらに、回路１３ＡをＦＰＧＡ１１に構成するのに使用したＦＰＧＡ１１の使用領域データをメモリ構成手段１６に送りステップＳＴ２４に進む。
【００３９】
使用領域データは、構成した回路１３ＡがＦＰＧＡ１１の領域をどれだけ使用しているかとＦＰＧＡ１１の領域のどこを使用しているかを示すデータであり、回路１３Ａの回路構成データのヘッダー部を基に回路構成手段１４によって算出される。例えばＦＰＧＡ１１は３×３のマトリックス状のブロックにわかれており、それぞれのブロックに１〜９の番号が振られているとする。回路構成手段１４は回路１３Ａの回路構成データのヘッダー部からマトリックス状のＦＰＧＡブロックを６ブロック使用していることを抽出し、そのブロックの中で１〜６の６ブロックに回路１３Ａが構成されていることを算出し、そのデータを使用領域データとする。
【００４０】
ステップＳＴ２４では、ＦＰＧＡ１１に回路１３Ａを構成したことを回路履歴情報に追加して、ＣＰＵ１２に回路構成終了信号を送る。
【００４１】
また、ステップＳＴ２２で、ＦＰＧＡ１１に他の回路１３Ｂが構成されている場合、ステップＳＴ２５に進んで回路構成書き換え信号と内部メモリの内容を退避する場所を表すアドレスをメモリ内容退避手段１９に送る。その後、メモリ内容退避手段１９から転送終了信号を受け取ると回路１３ＡをＦＰＧＡ１１に構成する回路構成データをコンフィギュレーションメモリ２１から受け取り、その回路構成データを基にＦＰＧＡ１１に回路１３Ａを構成し、回路１３ＡをＦＰＧＡ１１に構成するのに使用するＦＰＧＡ１１の使用領域データをメモリ構成手段１６に送る。そして、ステップＳＴ２６に進んで、今までＦＰＧＡ１１に回路１３Ａが構成されたことがあるかどうかを回路履歴情報により判断する。今までＦＰＧＡ１１に回路１３Ａが構成されたことがない場合、ステップＳＴ２４に進む一方、今までＦＰＧＡ１１に回路１３Ａが構成されたことがある場合、ステップＳＴ２７に進んで回路１３Ａが内部メモリの内容を退避させているかどうかを回路履歴情報により判断する。内部メモリの内容を退避していない場合、ステップＳＴ２９に進む一方、内部メモリの内容を退避している場合、ステップＳＴ２８に進む。
【００４２】
ステップＳＴ２８では、メモリ内容復帰手段２０にメモリ再構成信号とメモリを退避しているアドレスを送る。そして、メモリ内容復帰手段２０からメモリ再構成終了信号を受け取ると、回路履歴情報にある今までの回路１３Ａの情報を消去して、新たにＦＰＧＡ１１に回路１３Ａを構成したことを回路履歴情報に追加して、ＣＰＵ１２に回路構成終了信号を送る。
【００４３】
ステップＳＴ２９では、回路履歴情報にある今までの回路１３Ａの情報を消去して、新たにＦＰＧＡ１１に回路１３Ａを構成したことを回路履歴情報に追加して、ＣＰＵ１２に回路構成終了信号を送る。
【００４４】
メモリ構成手段１６は、あらかじめ入力されているＦＰＧＡ１１の使用可能領域を表した全体領域データと、回路構成手段１４から所望の回路１３ＡをＦＰＧＡ１１に構成するのに必要なＦＰＧＡ１１の使用領域データを受け取り、全体領域データと使用領域データの差を算出する。そして、その差の部分に内部メモリ１５とその内部メモリ１５にアクセスできるようにアドレスデコード部（図示せず）を構成する。また、ＦＰＧＡ１１に内部メモリ１５を構成したことをメモリ構成信号としてメモリ内容退避手段１９に送り、ＦＰＧＡ１１内にアドレスデコード部を構成したことをアドレスデコード情報としてメモリアクセス手段１７に送る。メモリ構成手段１６では、前述のようにＦＰＧＡ１１の使用可能領域と回路構成手段１４で構成する所望の回路１３の使用領域とを比較してその差を算出することにより、ＦＰＧＡ１１の未使用領域を自動抽出することができる。
【００４５】
メモリアクセス手段１７は、ＣＰＵ１２と内部メモリ１５と外部メモリ１８をそれぞれメモリアクセスに必要な信号で接続しており、メモリ構成手段１６からアドレスデコード情報を受け取るとその該当アドレスに関するデータの読み書きを外部メモリにアクセスするのではなく、内部メモリ１５にアクセスできるようになる。例えば、メモリ構成手段１６からアドレスデコード情報を受け取った後に、ＣＰＵ１２からあるアドレスのリード要求を受けると、ＦＰＧＡ１１に構成されている内部メモリ１５の該当アドレスからデータを受け取り、ＣＰＵ１２に送る。またＣＰＵ１２からあるアドレスへのライト要求を受けると、ＦＰＧＡ１１に構成されている内部メモリ１５の該当アドレスにデータを書き込む。
【００４６】
メモリ内容退避手段１９は、回路構成手段１４から回路構成書き換え信号とメモリ構成手段１６からメモリ構成信号を受け取り、ＦＰＧＡ１１に構成されている内部メモリ１５に記憶されているデータを外部メモリ１８に転送し、転送が終わると転送終了信号を回路構成手段１４に送る。
【００４７】
メモリ内容復帰手段２０は、回路構成手段１４からメモリ再構成信号を受け取り、外部メモリ１８に記憶されているデータをＦＰＧＡ１１に再構成された内部メモリ１５に転送し、転送が終わるとメモリ再構成終了信号を回路構成手段１４に送る。
【００４８】
コンフィギュレーションメモリ２１は、回路構成手段１４がＦＰＧＡ１１に回路を構成するのに必要なデータを格納している。
【００４９】
本第１の実施の形態によると、ＦＰＧＡ１１の未使用領域に構成情報のないメモリ１５を自動で構成することができ、ＦＰＧＡ領域の有効利用を図ることができる。また、ＦＰＧＡ１１内の内部メモリを含む回路構成が書き換わった場合に、内部メモリ内のデータ内容を自動で退避させることができ、さらにその内部メモリがＦＰＧＡ内に再構成された場合、その退避していたデータ内容を再構成された内部メモリに復帰させることができる。また、メモリアクセスを外部メモリ１８から内部メモリ１５に切り替えるメモリアクセス手段１７を用いることでＣＰＵ１２のメモリアクセス速度を向上させることができる。
【００５０】
なお、回路構成手段１４は使用領域データを回路構成データのヘッダー部から算出するとしたが、ＦＰＧＡ１１内の使用されている回路のデータ配列から使用領域データを算出してもよい。そうすることで回路構成データにヘッダー部を付加することなく使用領域データを算出することができる。その場合、回路構成手段１４はＦＰＧＡ１１のデータ配列から使用領域を判断する機能をさらに備えている。
【００５１】
（第２の実施の形態）
図４は、本発明の第２の実施の形態における半導体集積回路のブロック図である。図４に示すように本第２の実施の形態の半導体集積回路８０の内部には、ＦＰＧＡ８１と、ＣＰＵ８２と、ＦＰＧＡ８１に所望の回路８３と内部メモリ８５とその内部メモリ８５にＣＰＵ８２がアクセスするアクセス手段８６を構成する回路構成手段８４と、を備えている。
【００５２】
ＦＰＧＡ８１は、所望の回路８３と内部メモリ８５とアクセス手段８６とを回路構成手段８４により書き込まれる。
【００５３】
ＣＰＵ８２は、実行している処理中にＦＰＧＡ８１に回路８３を構成する命令がある場合、構成要求信号を回路構成手段８４に送る。また、ＣＰＵ８２はＦＰＧＡ８１内の回路８３とアクセス手段８６にアクセス可能である。
【００５４】
回路構成手段８４は、ＣＰＵ８２から構成要求信号を受けると、コンフィギュレーションメモリ８７から回路８３と内部メモリ８５とアクセス手段８６の回路構成データを受け取りＦＰＧＡ８１にそれら回路を構成する。
【００５５】
アクセス手段８６は、回路構成手段８４によりＦＰＧＡ８１内に構成され、ＣＰＵ８２が内部メモリ８５にアクセスできるようなアドレスデコード部の機能を備えている。また、外部メモリ８８とも接続されており、内部メモリ８５とのデータのやりとりができるようになっている。
【００５６】
コンフィギュレーションメモリ８７は、回路構成手段８４がＦＰＧＡ８１に回路を構成するのに必要なデータを格納している。
【００５７】
本発明の第２の実施の形態におけるコンパイラ（図示せず）には、ＦＰＧＡ８１に構成される回路８３と内部メモリ８５とアクセス手段８６の構成データを作成するハードウェアコンパイラと、ＣＰＵ８２で実行されるソフトウェアのプログラムを生成するソフトウェアコンパイラとを備えている。
【００５８】
一般的に、コンピュータプログラムを開発しこれを実行させる場合、所定のプログラム言語を用いてソースプログラムを作成し、これをＣＰＵが直接実行できるオブジェクトプログラムの形に変更した後、コンピュータに実行させる。このソースプログラムからオブジェクトプログラムへの変換処理にコンパイラが用いられ、コンパイラによって変換された命令またはデータを外部のメモリに格納して半導体集積回路を動作させる。
【００５９】
本実施の形態では、ハードウェアコンパイラが作成する、回路８３と内部メモリ８５とアクセス手段８６の構成データは、コンフィギュレーションメモリ８７に格納される。ソフトウェアコンパイラが作成する、ＣＰＵ８２で実行されるソフトウェアのプログラムは、外部メモリ８８に格納される。また、ソフトウェアコンパイラによって、内部メモリ８５の容量に応じて、内部メモリ８５に格納する命令，データを決定する。
【００６０】
ハードウェアコンパイラは、ＦＰＧＡ８１に回路８３を構成する構成データを作成し、その構成データで構成される回路８３がＦＰＧＡ８１をどれだけ使用するかを示した使用領域データＡを算出する。さらに、ＦＰＧＡ使用領域データベースからＦＰＧＡ８１の使用可能領域を示した使用領域データＢを受け取る。そして、ＦＰＧＡ８１の使用領域データと回路８３の使用領域データの差Ｂ−Ａを算出し、その差の部分に内部メモリ８５とその内部メモリ８５にアクセスできるアドレスデコード部を備えているアクセス手段８６とを構成できるように内部メモリ８５の構成データとアクセス手段８６の構成データを作成する。なお、ＦＰＧＡ使用領域データベースとは、あらかじめ入力されているＦＰＧＡの使用可能領域を表した全体領域データが格納されているデータベースであり、ハードウェアコンパイラ自信がデータとして持っている。
【００６１】
図５にソフトウェアコンパイラのフローチャートを示す。ステップＳＴ９１において、ハードウェアコンパイラで作成された回路構成を参照してプログラムをその回路毎の処理に分割する。そしてステップＳＴ９２に進んで、その分割した処理がメモリを使用するかを判断する。その分割した処理がメモリを使用しない場合はステップＳＴ９３に進み、そのまま通常のコンパイルを行う一方、その分割した処理がメモリを使用する場合は、ステップＳＴ９４に進み、分割した処理の中で異なる回路間でのデータ依存を判断する。異なる回路間でのデータ依存が無い場合、ステップＳＴ９５に進み、同じ回路を使用する処理を一緒にし、その回路の未使用部分に構成された内部メモリを使用可能としてコンパイルする一方、異なる回路間でのデータ依存がある場合、ステップＳＴ９６に進み、回路構成の書き換え時以外のときは、その回路の未使用部分に構成された内部メモリを使用可能としてコンパイルし、回路構成を書き換える時には、データ依存があるデータのみを外部メモリに退避させ、次の回路が構成されたときにそのデータを次の回路の未使用部分に構成された内部メモリに復帰させ、その復帰させたデータが必要な時にアクセスできるようにコンパイルする。
【００６２】
例えば、図６のようなプログラムの場合、ハードウェアコンパイラで回路Ａと回路Ｂが構成されたとすると、ステップＳＴ９１により回路Ａを使用する処理Ａ１と、回路Ｂを使用する処理Ｂと、回路Ａを使用する処理Ａ２の３つの分割した処理に分かれる。そして、ステップＳＴ９２で３つの分割した処理がメモリを使用するかを判断する。このプログラムではメモリを使用するのでステップＳＴ９４に進み、３つの処理の中で異なる回路であるＡとＢにデータ依存があるかを判断する。このプログラムではデータ依存はないので、ステップＳＴ９５に進み、同じ回路を使用する処理Ａ１と処理Ａ２を一緒にして処理Ａとし、ハードウェアコンパイラで回路Ａの未使用部分に構成した内部メモリを使用可能としてコンパイルする。
【００６３】
本第２の実施の形態によると、ＦＰＧＡ内に内部メモリを構成するようにコンパイルすることで、半導体集積回路８０内に新たなハードウェア資源を増加させることなくＦＰＧＡ８１の未使用領域に内部メモリ８５を構成することができ、ＦＰＧＡ領域の有効利用を図ることができる。
【００６４】
また、ステップＳＴ９６で、データ依存がある場合にデータの退避及び復帰を行えるようにコンパイルするとしたが、データ依存がある場合、ＦＰＧＡ８１内の内部メモリ８５を使用不可としてコンパイルすることで、データの退避及び復帰を行う時間を節約でき、処理性能の向上を図ることができる。
【００６５】
また、内部メモリのデータを使用する回路が現在ＦＰＧＡに構成されている場合だけＦＰＧＡ内に内部メモリを構成するようにコンパイルすることで、内部メモリ内のデータを退避及び復帰する必要がなくなり、ＦＰＧＡの書き換え時間が短くなる。
【００６６】
なお、ハードウェアコンパイラでＦＰＧＡ８１の未使用部分に回路８３が使用する内部メモリを構成するとしたが、ＣＰＵ１２が実行する命令を格納する内部メモリを構成してもよい。
【００６７】
なお、ハードウェアコンパイラでＦＰＧＡ８１の未使用部分に回路８３が使用する内部メモリを構成するとしたが、ＣＰＵ１２が実行するデータを格納する内部メモリを構成してもよい。
【００６８】
（第３の実施の形態）
図７は、本発明の第３の実施の形態における半導体集積回路のブロック図である。図７に示すように、本第３の実施の形態の半導体集積回路４０の内部には、ＦＰＧＡ４１と、ＣＰＵ４２と、ＦＰＧＡ４１に所望の回路４３Ａと回路４３Ｂを構成する回路構成手段４４と、ＦＰＧＡ４１の中で回路４３Ａを構成するのに使用しない部分に内部メモリ４５Ａを構成し、回路４３Ｂを構成するのに使用しない部分に内部メモリ４５Ｂを構成するメモリ構成手段４６と、ＣＰＵ４２が選択している内部メモリ４５に格納されている命令もしくはデータを取得するメモリアクセス手段４７と、選択されていない内部メモリ４５に記憶されているデータを外部メモリ４８に転送するメモリ内容退避手段４９と、外部メモリ４８に退避されたデータを選択されていない内部メモリ４５に転送するメモリ内容復帰手段５０と、を備えている。
【００６９】
ＦＰＧＡ４１は、回路４３Ａと回路４３Ｂを回路構成手段４４により書き込まれ、内部メモリ４５Ａと内部メモリ４５Ｂをメモリ構成手段４６により書き込まれる。ＣＰＵ４２から送られてくる回路選択信号が“０”なら回路４３Ａと内部メモリ４５Ａが選択され、回路選択信号が“１”なら回路４３Ｂと内部メモリ４５Ｂが選択される。
【００７０】
ＣＰＵ４２は、ＦＰＧＡ４１に回路４３を構成したいときに構成要求信号を回路構成手段４４に送る。そして、回路構成手段４４がＦＰＧＡ４１に回路４３を構成し終わると回路構成手段４４から回路構成終了信号を受け取る。また、ＣＰＵ４２はＦＰＧＡ４１内に構成されている複数の回路のうちのいずれか１つを選択する回路選択信号を処理するプログラムに応じて供給する。
【００７１】
図８を用いて回路構成手段４４の機能を説明する。図８は回路構成手段４４の動作を示すフローチャートである。
【００７２】
回路構成手段４４は、ステップＳＴ５１でＦＰＧＡ４１に回路（例えば回路４３Ｃとする）を構成する構成要求信号をＣＰＵ４２から受け取ると、ステップＳＴ５２に進んでＦＰＧＡ４１に他の回路（例えば回路４３Ａとする）が構成されているかどうかを回路履歴情報により判断する。
【００７３】
回路履歴情報は回路構成手段４４内に保持されている情報であり、ＦＰＧＡ４１内に構成した回路の回路構成データに付加されているヘッダー部を保持している。新たな回路がＦＰＧＡ４１内に構成されるとその回路の回路構成データに付加されているヘッダー部が追加される。また、ＦＰＧＡ４１に回路を構成する回路構成データに付加されているヘッダー部にはその回路固有の番号とその回路のＦＰＧＡ４１使用容量が記述されている。回路履歴情報は、ＦＰＧＡ４１内に構成されているかということと、構成されている回路のどちらが選択されているかということを示す部分も保持している。さらに、新たな回路がＦＰＧＡ４１内に構成されたとき、以前に構成していた回路の内部メモリの内容を退避させたかどうかを表す部分も保持している。さらに内部メモリの内容を退避させた場合には、退避させている場所も保持されている。
【００７４】
図９に回路履歴情報の例を示す。１行目にはＦＰＧＡ４１に現在構成されている回路の情報が保持されており、１番目の“３”が構成している回路が回路４３Ｃであることを、２番目の“０”が現在ＦＰＧＡ４１に構成されているがＣＰＵ４２により選択されていないことを、３番目の“０”が内部メモリを退避していないことを表している。次に２行目にもＦＰＧＡ４１に構成されている回路の情報が保持されており、１番目の“２”が構成している回路が回路４３Ｂであることを、２番目の“１”がＦＰＧＡ４１に現在構成されＣＰＵ４２により選択されていることを、３番目の“０”が内部メモリのデータを退避していないことを表している。次に３行目にはＦＰＧＡ４１に構成されていた回路の情報が保持されており、１番目の“１”が構成していた回路が回路４３Ａであることを、２番目の“２”が現在ＦＰＧＡ４１に構成されていないことを、３番目の“１”が内部メモリのデータを退避していることを、４番目の“ｃ０００００００”が内部メモリの内容を退避しているメモリのアドレスを表している。
【００７５】
ステップＳＴ５２で、ＦＰＧＡ４１に回路４３Ａが構成されていない場合、ステップＳＴ５３に進んで回路４３ＣをＦＰＧＡ４１Ａに構成する回路構成データをコンフィギュレーションメモリ５１から受け取り、その回路構成データを基にＦＰＧＡ４１に回路４３Ｃを構成する。さらに、回路４３ＣをＦＰＧＡ４１に構成するのに使用するＦＰＧＡ４１の使用領域データをメモリ構成手段４６に送りステップＳＴ５４に進む。使用領域データは第１の実施の形態と同じであるのでここでは説明を省略する。
【００７６】
ステップＳＴ５４では、ＦＰＧＡ４１に回路４３Ｃを構成したことを回路履歴情報に追加して、ＣＰＵ４２に回路構成終了信号を送る。また、ステップＳＴ５２でＦＰＧＡ４１に他の回路４３Ａが構成されている場合、ステップＳＴ５５に進んで回路構成書き換え信号と内部メモリの内容を退避する場所を表すアドレスをメモリ内容退避手段４９に送る。その後、メモリ内容退避手段４９から転送終了信号を受け取ると回路４３ＣをＦＰＧＡ４１に構成する回路構成データをコンフィギュレーションメモリ５１から受け取り、その回路構成データを基にＦＰＧＡ４１に回路４３Ｃを構成し、回路４３ＣをＦＰＧＡ４１に構成するのに使用するＦＰＧＡ４１の使用領域データをメモリ構成手段４６に送る。
【００７７】
そして、ステップＳＴ５６に進んで、今までＦＰＧＡ４１に回路４３Ｃが構成されたことがあるかどうかを回路履歴情報により判断する。今までＦＰＧＡ４１に回路４３Ｃが構成されたことがない場合、ステップＳＴ５４に進む一方、今までＦＰＧＡ４１に回路４３Ｃが構成されたことがある場合、ステップＳＴ５７に進んで回路４３Ｃが内部メモリの内容を退避させているかどうかを回路履歴情報により判断する。内部メモリの内容を退避していない場合、ステップＳＴ５９に進む一方、内部メモリの内容を退避している場合、ステップＳＴ５８に進む。
【００７８】
ステップＳＴ５８では、メモリ内容復帰手段４０にメモリ再構成信号とメモリを退避しているアドレスを送る。そして、メモリ内容復帰手段４０からメモリ再構成終了信号を受け取ると、回路履歴情報にある今までの回路４３Ｃの情報を消去して、新たにＦＰＧＡ４１に回路４３Ｃを構成したことを回路履歴情報に追加して、ＣＰＵ４２に回路構成終了信号を送る。
【００７９】
ステップＳＴ５９では、回路履歴情報にある今までの回路４３Ｃの情報を消去して、新たにＦＰＧＡ４１に回路４３Ｃを構成したことを回路履歴情報に追加して、ＣＰＵ４２に回路構成終了信号を送る。
【００８０】
メモリ構成手段４６は、あらかじめ入力されているＦＰＧＡ４１の使用可能領域を表した全体領域データと、回路構成手段４４から所望の回路４３をＦＰＧＡ４１に構成するのに必要なＦＰＧＡ４１の使用領域データを受け取り、全体領域データと使用領域データの差を算出する。そして、その差の部分に内部メモリ４５とその内部メモリ４５にアクセスできるようにアドレスデコード部（図示せず）とを構成する。また、ＦＰＧＡ４１に内部メモリ４５を構成したことをメモリ構成信号としてメモリ内容退避手段４９に送り、ＦＰＧＡ４１内にアドレスデコード部を構成したことをアドレスデコード情報としてメモリアクセス手段４７に送る。
【００８１】
図７では、ＦＰＧＡ４１内に、２つの回路４３Ａと４３Ｂの構成が保持された例を示しているが、この場合、ＦＰＧＡ４１が２つのバンク構成になっていると考えればよい。例えば、ＦＰＧＡ４１内を半分ずつ２つの領域に分け、一方の領域に回路４３Ａと内部メモリ４５Ａを構成し、もう一方の領域に回路４３Ｂと内部メモリ４５Ｂを構成する。
【００８２】
メモリアクセス手段４７は、ＣＰＵ４２と選択されている回路４３の内部メモリ４５と外部メモリ４８をそれぞれメモリアクセスに必要な信号で接続しており、メモリ構成手段４６から選択されている回路のアドレスデコード情報を受け取るとその該当アドレスに関するデータの読み書きを外部メモリにアクセスするのではなく、内部メモリ４５にアクセスできるようになる。例えば、メモリ構成手段４６からアドレスデコード情報を受け取った後に、ＣＰＵ４２からあるアドレスのリード要求を受けると、ＦＰＧＡ４１に構成されている内部メモリ４５の該当アドレスからデータを受け取り、ＣＰＵ４２に送る。またＣＰＵ４２からあるアドレスへのライト要求を受けると、ＦＰＧＡ４１に構成されている内部メモリ４５の該当アドレスにデータを書き込む。
【００８３】
メモリ内容退避手段４９は、回路構成手段４４から回路構成書き換え信号とメモリ構成手段４６からメモリ構成信号を受け取り、ＦＰＧＡ４１に構成されている内部メモリ４５に記憶されているデータを外部メモリ４８に転送し、転送が終わると転送終了信号を回路構成手段４４に送る。
【００８４】
メモリ内容復帰手段５０は、回路構成手段４４からメモリ再構成信号を受け取り、外部メモリ４８に記憶されているデータをＦＰＧＡ４１に再構成された内部メモリ４５に転送し、転送が終わるとメモリ再構成終了信号を回路構成手段４４に送る。
【００８５】
コンフィギュレーションメモリ５１は、回路構成手段４４がＦＰＧＡ４１に回路を構成するのに必要なデータを格納している。
【００８６】
本第３の実施の形態によると、ＦＰＧＡ４１の未使用領域に構成情報のないメモリ４５を自動で構成することができＦＰＧＡ領域の有効利用を図ることができる。また、ＦＰＧＡ内の内部メモリを含む回路構成が書き換わった場合に、内部メモリ内のデータ内容を自動で退避させることができ、さらにその内部メモリがＦＰＧＡ内に再構成された場合、その退避していたデータ内容を再構成された内部メモリに復帰させることができる。また、第１の実施の形態同様、ＣＰＵ４２のメモリアクセスを外部メモリ４８から内部メモリ４５に切り替えるメモリアクセス手段４７を用いることでメモリアクセス速度を向上させることができる。
【００８７】
また、ＦＰＧＡ４１に構成する回路構成データを複数持ち、その回路構成データが選択されていない時にその回路構成データの内部メモリ内のデータ内容を退避及び復帰させることで、メモリ内容の退避及び復帰の時間を待つことなく処理を続けることができ処理性能の向上を図ることができる。
【００８８】
なお、回路構成手段４４は使用領域データを回路構成データのヘッダー部から算出するとしたが、ＦＰＧＡ４１内の使用されている回路のデータ配列から使用領域データを算出してもよい。そうすることで回路構成データにヘッダー部を付加することなく使用領域データを算出することができる。その場合、回路構成手段４４はＦＰＧＡ４１のデータ配列から使用領域を判断する機能をさらに備えている。
【００８９】
（第４の実施の形態）
図１０は、本発明の第４の実施の形態における半導体集積回路のブロック図である。図１０に示すように本第４の実施の形態の半導体集積回路１１０の内部には、ＦＰＧＡ１１１と、ＣＰＵ１１２と、ＦＰＧＡ１１１に所望の回路１１３Ａと内部メモリ１１５Ａとその内部メモリ１１５ＡにＣＰＵ１１２がアクセスするアクセス手段１１６Ａと、所望の回路１１３Ｂと内部メモリ１１５Ｂとその内部メモリ１１５ＢにＣＰＵ１１２がアクセスするアクセス手段１１６Ｂとを構成する回路構成手段１１４と、を備えている。
【００９０】
ＦＰＧＡ１１１は、所望の回路１１３Ａと内部メモリ１１５Ａとアクセス手段１１６Ａと、所望の回路１１３Ｂと内部メモリ１１５Ｂとアクセス手段１１６Ｂとを回路構成手段１１４により書き込まれる。ＣＰＵ１１２から送られてくる回路選択信号が“０”なら回路１１３Ａと内部メモリ１１５Ａとアクセス手段１１６Ａが選択され、回路選択信号が“１”なら回路１１３Ｂと内部メモリ１１５Ｂとアクセス手段１１６Ｂが選択される。
【００９１】
ＣＰＵ１１２は、実行している処理中にＦＰＧＡ１１１に回路１１３を構成する命令がある場合、構成要求信号を回路構成手段１１４に送る。またどちらの回路構成を選択するかを選ぶ回路選択信号をＦＰＧＡ１１１に送る。また、ＣＰＵ１１２はＦＰＧＡ１１１内の回路１１３とアクセス手段１１６にアクセス可能である。
【００９２】
回路構成手段１１４は、ＣＰＵ１１２から構成要求信号を受けると、コンフィギュレーションメモリ１１７から回路１１３と内部メモリ１１５とアクセス手段１１６の回路構成データを受け取りＦＰＧＡ１１１にそれら回路を構成する。
【００９３】
アクセス手段１１６は、回路構成手段１１４によりＦＰＧＡ１１１内に構成され、ＣＰＵ１１２が内部メモリにアクセスできるようなアドレスデコード部の機能を備えている。また、外部メモリ１１８とも接続されており、内部メモリとのデータのやりとりができるようになっている。
【００９４】
コンフィギュレーションメモリ１１７は、回路構成手段１１４がＦＰＧＡ１１１に回路を構成するのに必要なデータを格納している。
【００９５】
本第４の実施の形態のコンパイラ（図示せず）には、ＦＰＧＡ１１１に構成される回路の回路構成データを作成するハードウェアコンパイラと、ＣＰＵ１１２で実行されるソフトウェアのプログラムを生成するソフトウェアコンパイラとを備えている。ハードウェアコンパイラが作成する回路構成データは、コンフィギュレーションメモリ１１７に格納される。ソフトウェアコンパイラが作成する、ＣＰＵ１１２で実行されるソフトウェアのプログラムは、外部メモリ１１８に格納される。また、ソフトウェアコンパイラによって、内部メモリ１１５の容量に応じて、内部メモリ１１５に格納する命令，データを決定する。
【００９６】
ハードウェアコンパイラは、ＦＰＧＡ１１１に回路１１３Ａと回路１１３Ｂを構成する構成データを作成し、その構成データで構成される回路１１３ＡがＦＰＧＡ１１１をどれだけ使用するかを示した使用領域データＡと回路１１３ＢがＦＰＧＡ１１１をどれだけ使用するかを示した使用領域データＡ’を算出する。さらに、ＦＰＧＡ使用領域データベースからＦＰＧＡ１１１の使用可能領域を示した使用領域データＢを受け取る。そして、ＦＰＧＡ１１１の使用領域データの半分と回路１１３Ａの使用領域データの差Ｂ／２−Ａを算出し、その差の部分に内部メモリ１１５Ａとその内部メモリ１１５Ａにアクセスできるアドレスデコード部を備えているアクセス手段１１６Ａとを構成できるように内部メモリ１１５Ａの構成データとアクセス手段１１６Ａの構成データを作成する。また、ＦＰＧＡ１１１の使用領域データの半分と回路１１３Ｂの使用領域データの差Ｂ／２−Ａ’を算出し、その差の部分に内部メモリ１１５Ｂとその内部メモリ１１５Ｂにアクセスできるアドレスデコード部を備えているアクセス手段１１６Ｂとを構成できるように内部メモリ１１５Ｂの構成データとアクセス手段１１６Ｂの構成データを作成する。なお、ＦＰＧＡ使用領域データベースとは、あらかじめ入力されているＦＰＧＡの使用可能領域を表した全体領域データが格納されているデータベースであり、ハードウェアコンパイラ自信がデータとして持っている。
【００９７】
図１１にソフトウェアコンパイラのフローチャートを示す。ステップＳＴ１２１において、ハードウェアコンパイラで作成された回路構成を参照してプログラムをその回路毎の処理に分割する。そしてステップＳＴ１２２に進んで、その分割した処理がメモリを使用するかを判断する。その分割した処理がメモリを使用しない場合はステップＳＴ１２３に進み、そのまま通常のコンパイルを行う一方、その分割した処理がメモリを使用する場合は、ステップＳＴ１２４に進み、分割した処理の中で異なる回路間でのデータ依存を判断する。異なる回路間でのデータ依存が無い場合、ステップＳＴ１２５に進み、同じ回路を使用する処理を一緒にし、その回路の未使用部分に構成された内部メモリを使用可能としてコンパイルする一方、異なる回路間でのデータ依存がある場合、ステップＳＴ１２６に進み、回路構成の書き換え時以外のときは、その回路の未使用部分に構成された内部メモリを使用可能としてコンパイルし、回路構成を書き換える時には、データ依存があるデータのみを外部メモリに退避させ、次の回路が構成されたときにそのデータを次の回路の未使用部分に構成された内部メモリに復帰させ、その復帰させたデータが必要な時にアクセスできるようにコンパイルする。
【００９８】
例えば、図１２のようなプログラムの場合、ハードウェアコンパイラで回路Ａと回路Ｂと回路Ｃが構成されたとすると、ステップＳＴ１２１により回路Ａを使用する処理Ａ１と、回路Ｂを使用する処理Ｂと、回路Ａを使用する処理Ａ２と回路Ｃを使用する処理Ｃの４つの分割した処理に分かれる。そして、ステップＳＴ１２２で４つの分割した処理がメモリを使用するかを判断する。このプログラムではメモリを使用するのでステップＳＴ１２４に進み、４つの処理の中で異なる回路であるＡとＢとＣにデータ依存があるかを判断する。このプログラムではデータ依存はないので、ステップＳＴ１２５に進み、同じ回路を使用する処理Ａ１と処理Ａ２を一緒にして処理Ａとし、ハードウェアコンパイラで回路Ａの未使用部分に構成した内部メモリを使用可能としてコンパイルする。
【００９９】
本第４の実施の形態によると、ＦＰＧＡ内に内部メモリを構成するようにコンパイルすることで、半導体集積回路１１０内に新たなハードウェア資源を増加させることなくＦＰＧＡ１１１の未使用領域に内部メモリ１１５を構成することができ、ＦＰＧＡ領域の有効利用を図ることができる。
【０１００】
また、ステップＳＴ１２６で、データ依存がある場合にデータの退避及び復帰を行えるようにコンパイルするとしたが、データ依存がある場合、ＦＰＧＡ１１１内の内部メモリ１１５を使用不可としてコンパイルすることで、データの退避及び復帰を行う時間を節約でき、処理性能の向上を図ることができる。
【０１０１】
また、内部メモリのデータを使用する回路が現在ＦＰＧＡに構成されている場合だけＦＰＧＡ内に内部メモリを構成するようにコンパイルすることで、内部メモリ内のデータを退避及び復帰する必要がなくなり、ＦＰＧＡの書き換え時間が短くなる。
【０１０２】
なお、ハードウェアコンパイラでＦＰＧＡ１１１の未使用部分に回路１１３が使用する内部メモリを構成するとしたが、ＣＰＵ１１２が実行する命令を格納する内部メモリを構成してもよい。
【０１０３】
なお、ハードウェアコンパイラでＦＰＧＡ１１１の未使用部分に回路１１３が使用する内部メモリを構成するとしたが、ＣＰＵ１１２が実行するデータを格納する内部メモリを構成してもよい。
【０１０４】
（第５の実施の形態）
本発明の第５の実施の形態における半導体集積回路は、第２の実施の形態の図４と同じであるのでここでは説明を省略する。
【０１０５】
本発明の第５の実施の形態のコンパイラ（図示せず）には、ＦＰＧＡ８１に構成される回路８３と内部メモリ８５とアクセス手段８６の構成データを作成するハードウェアコンパイラと、ＣＰＵ８２で実行されるソフトウェアのプログラムを生成するソフトウェアコンパイラとを備えている。ハードウェアコンパイラが作成する、回路８３と内部メモリ８５とアクセス手段８６の構成データは、コンフィギュレーションメモリ８７に格納される。ソフトウェアコンパイラが作成する、ＣＰＵ８２で実行されるソフトウェアのプログラムは、外部メモリ８８に格納される。また、ソフトウェアコンパイラによって、内部メモリ８５の容量に応じて、内部メモリ８５に格納する命令，データを決定する。
【０１０６】
ハードウェアコンパイラは、ＦＰＧＡ８１に回路８３を構成する構成データを作成し、その構成データで構成される回路８３がＦＰＧＡ８１をどれだけ使用するかを示した使用領域データの中で一番使用領域の多い使用領域データＡを算出する。さらに、ＦＰＧＡ使用領域データベースからＦＰＧＡ８１の使用可能領域を示した使用領域データＢを受け取る。そして、ＦＰＧＡ８１の使用領域データと回路８３の使用領域データの差Ｂ−Ａを算出し、その差の部分に内部メモリ８５とその内部メモリ８５にアクセスできるアドレスデコード部を備えているアクセス手段８６とを構成できるように内部メモリ８５の構成データとアクセス手段８６の構成データを作成する。なお、ＦＰＧＡ使用領域データベースとは、あらかじめ入力されているＦＰＧＡの使用可能領域を表した全体領域データが格納されているデータベースであり、ハードウェアコンパイラ自信がデータとして持っている。
【０１０７】
図１３にソフトウェアコンパイラのフローチャートを示す。ステップＳＴ１３１において、ソースプログラムから各命令を抽出し、その命令の使用頻度をカウントして命令使用頻度格納手段に格納する。そして、ハードウェアコンパイラで作成された内部メモリの回路構成を参照して内部メモリの容量ＭＣを算出する。また、命令使用頻度格納手段から使用頻度の一番多い命令を内部メモリに配置したときの内部メモリの使用容量ＭＩ１も算出する。そして、ステップＳＴ１３２に進んで、その両者を比較しＭＣ≧ＭＩ１の場合、ステップＳＴ１３３に進む一方、ＭＣ＜ＭＩ１の場合、ステップＳＴ１３４に進む。
【０１０８】
ステップＳＴ１３３において、使用頻度が一番多い命令を内部メモリに配置するようにする。さらに、内部メモリ容量ＭＣから使用頻度の一番多い命令の内部メモリの使用容量ＭＩ１の差ＭＣ−ＭＩ１を新たな内部メモリ容量ＭＣとし、そして、使用頻度が一番多い命令を命令使用頻度格納手段から削除してステップＳＴ１３２に進む。またステップＳＴ１３４において、内部メモリに配置している命令は内部メモリとして、内部メモリに配置していない命令は外部メモリに配置するようにしてコンパイルする。
【０１０９】
例えば図１４のようなプログラムの場合、ハードウェアコンパイラでａ２＋ｂ２を行う回路Ａとｇ１／２＋ｈ１／２を行う回路Ｂが構成される。ＦＰＧＡ使用可能領域を９、回路ＡのＦＰＧＡ使用領域を４、回路ＢのＦＰＧＡ使用領域を６とすると、一番使用領域の多い回路Ｂの使用領域６を使用して、使用領域データの差９−６＝３を算出する。その３の部分のうち２を内部メモリとし、１をアドレスデコード部に構成する構成データを作成する。
【０１１０】
そして、ステップＳＴ１３１において、命令を抽出すると、ｍｏｖが９回、ａ２＋ｂ２が２回、ｇ１／２＋ｈ１／２が１回となり、命令使用頻度格納手段にｍｏｖ、ａ２＋ｂ２、ｇ１／２＋ｈ１／２の順で格納される。それぞれの命令は内部メモリの領域を１使用するとすると、ＭＩ１が１、ＭＣが２と算出される。ステップＳＴ１３２に進んで、両者を比較するとＭＣ≧ＭＩ１であるので、ステップＳＴ１３３に進む。そしてｍｏｖを内部メモリに配置する。さらに、内部メモリ容量ＭＣから使用頻度の一番多い命令の内部メモリの使用容量ＭＩ１の差２−１＝１を新たなＭＣとし、そして命令使用頻度格納手段からｍｏｖを削除してステップＳＴ１３２に進む。また、ステップＳＴ１３２に進んで、両者を比較するとＭＣ＝ＭＩ１であるので、ステップＳＴ１３３に進む。そして、ａ２＋ｂ２を内部メモリに配置する。さらに、内部メモリ容量ＭＣから使用頻度の一番多い命令の内部メモリの使用容量ＭＩ１の差１−１＝０を新たなＭＣとし、そして命令使用頻度格納手段からａ２＋ｂ２を削除してステップＳＴ１３２に進む。ステップＳＴ１３２に進んで、両者を比較するとＭＣ＜ＭＩ１であるので、ステップＳＴ１３４に進む。そして、ステップＳＴ１３４で、ｍｏｖとａ２＋ｂ２を内部メモリに配置し、ｇ１／２＋ｈ１／２を外部メモリに配置するようにコンパイルする。
【０１１１】
本第５の実施の形態によると、ＦＰＧＡ内に内部メモリを構成するようにコンパイルすることで、半導体集積回路８０内に新たなハードウェア資源を増加させることなくＦＰＧＡ８１の未使用領域に内部メモリ８５を構成することができ、ＦＰＧＡ領域の有効利用を図ることができる。また、ＦＰＧＡ８１内の内部メモリ８５に使用頻度の多い命令を配置することでＣＰＵのメモリアクセス速度を向上し、半導体集積回路の処理を高速化することができる。
【０１１２】
なお、ソフトウェアコンパイラで内部メモリ８５に使用頻度の多い命令を配置するとしたが、使用頻度の多いデータを配置してもよい。
【０１１３】
第５の実施の形態のソフトウェアコンパイラと第２の実施の形態のソフトウェアコンパイラとでは、何を基準にして内部メモリ８５に格納する命令またはデータを選んでいるかが異なる。図１３ではソースプログラム内の命令の使用頻度に応じて選んでいるが、図５ではソースプログラム内の回路毎の処理に応じて選んでいる。図１３の場合が１つの命令（使用される回路はいろいろ）であるのに対し、図５の場合は複数の命令を含んだ回路毎の処理（使用される回路はＦＰＧＡ内の回路）になる。
【０１１４】
【発明の効果】
以上説明したように、本発明の半導体集積回路は、ＣＰＵと、回路構成が書き換え可能であるプログラマブルデバイスと、プログラマブルデバイスに所望の回路を構成する回路構成手段と、プログラマブルデバイスの所望の回路で使用しない未使用部分に内部メモリを構成するメモリ構成手段と、ＣＰＵから内部メモリへのアクセスを可能にするメモリアクセス手段とを備えており、プログラマブルデバイス内の所望の回路で使用しない未使用部分に内部メモリを構成することができ、プログラマブルデバイス領域の有効利用を図ることができる。
【０１１５】
また、本発明のコンパイラは、ＣＰＵと回路構成が書き換え可能であるプログラマブルデバイスとを備えた半導体集積回路の、プログラマブルデバイスに構成されるハードウェアの構成データを生成するハードウェアコンパイラと、ＣＰＵで実行されるソフトウェアのプログラムを生成するソフトウェアコンパイラとを備え、ハードウェアコンパイラは、プログラマブルデバイスの未使用部分を抽出し、未使用部分に内部メモリを構成する構成データを含むハードウェアの構成データを生成し、ソフトウェアコンパイラは内部メモリを使用するプログラムを生成する機能を有するものとしており、プログラマブルデバイス内に内部メモリを構成するようにコンパイルすることで、プログラマブルデバイス領域の有効利用を図ることができるとともに、半導体集積回路内の内部メモリを構成するに必要なハードウェア量を削減することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態における半導体集積回路のブロック図である。
【図２】本発明の第１の実施の形態における回路構成手段のフローチャートである。
【図３】本発明の第１の実施の形態における回路履歴情報の例を示す図である。
【図４】本発明の第２の実施の形態における半導体集積回路のブロック図である。
【図５】本発明の第２の実施の形態におけるソフトウェアコンパイラのフローチャートである。
【図６】本発明の第２の実施の形態におけるソフトウェアコンパイラで使用するプログラム例を示す図である。
【図７】本発明の第３の実施の形態における半導体集積回路のブロック図である。
【図８】本発明の第３の実施の形態における回路構成手段のフローチャートである。
【図９】本発明の第３の実施の形態における回路履歴情報の例を示す図である。
【図１０】本発明の第４の実施の形態における半導体集積回路のブロック図である。
【図１１】本発明の第４の実施の形態におけるソフトウェアコンパイラのフローチャートである。
【図１２】本発明の第４の実施の形態におけるソフトウェアコンパイラで使用するプログラム例を示す図である。
【図１３】本発明の第５の実施の形態におけるソフトウェアコンパイラのフローチャートである。
【図１４】本発明の第５の実施の形態におけるソフトウェアコンパイラで使用するプログラム例を示す図である。
【符号の説明】
１０，４０，８０，１１０　　　　　　　半導体集積回路
１１，４１，８１，１１１　ＦＰＧＡ
１２，４２，８２，１１２　ＣＰＵ
１３，４３Ａ，４３Ｂ，８３，１１３Ａ，１１３Ｂ　所望の回路
１４，４４，８４，１１４　　　　　　　回路構成手段
１５，４５Ａ，４５Ｂ，８５，１１５Ａ，１１５Ｂ　内部メモリ
１６，４６　　　　　　　メモリ構成手段
１７，４７　　　　　　　メモリアクセス手段
１８，４８，８８，１１８　外部メモリ
１９，４９　　　　　　　メモリ内容退避手段
２０，５０　　　　　　　メモリ内容復帰手段
２１，５１，８７，１１７　コンフィギュレーションメモリ
８６，１１６Ａ，１１６Ｂ　　　　　　　アクセス手段
【図１】
2004032043.tif 000003
【図２】
2004032043.tif 000004
【図３】
2004032043.tif 000005
【図４】
2004032043.tif 000006
【図５】
2004032043.tif 000007
【図６】
2004032043.tif 000008
【図７】
2004032043.tif 000009
【図８】
2004032043.tif 000010
【図９】
2004032043.tif 000011
【図１０】
2004032043.tif 000012
【図１１】
2004032043.tif 000013
【図１２】
2004032043.tif 000014
【図１３】
2004032043.tif 000015
【図１４】
2004032043.tif 000016