(57)【特許請求の範囲】
【請求項１】
ソースプログラムから、回路構成が書き換え可能なプログラマブルデバイスを備えた半導体集積回路によって実行されるオブジェクトプログラムを生成するコンパイラ装置であって、
前記ソースプログラムの実行に必要なＣＰＵのビット幅および個数を見積もる抽出手段と、
前記抽出手段によって見積もられたビット幅および個数、ならびに前記プログラマブルデバイスの使用可能領域に基づいて、前記プログラマブルデバイスに回路構成をされるべきＣＰＵのビット幅および個数を決定し、該回路構成をされるべきＣＰＵによって実行される前記オブジェクトプログラムを生成するコンパイル手段と、
前記コンパイル手段によって決定されたビット幅および個数のＣＰＵを前記プログラマブルデバイスに回路構成するための命令を、前記オブジェクトプログラムに付加する付加手段とを備えた
ことを特徴とするコンパイラ装置。
【請求項２】
請求項１記載のコンパイラ装置において、
前記抽出手段は、
前記ソースプログラム中に記述された命令の実行に要するビット幅の出現回数をカウントし、データの依存関係をも解析して、前記ビット幅および個数を見積もるものである
ことを特徴とするコンパイラ装置。
【請求項３】
請求項２記載のコンパイラ装置において、
前記コンパイル手段は、
前記抽出手段によってカウントされた出現回数が所定値以上であるビット幅ごとに少なくとも１個のＣＰＵを、前記プログラマブルデバイスに回路構成をされるべきＣＰＵとして決定するものである
ことを特徴とするコンパイラ装置。
【請求項４】
請求項１記載のコンパイラ装置において、
前記コンパイル手段は、
前記オブジェクトプログラムの生成時に、前記ソースプログラム中のデータの依存関係を考慮して、前記プログラマブルデバイスに回路構成をされるべきＣＰＵによって並列処理が行われるように最適化を行うものである
ことを特徴とするコンパイラ装置。
【請求項５】
ソースプログラムから、ＣＰＵと回路構成が書き換え可能なプログラマブルデバイスとが混載された半導体集積回路によって実行されるオブジェクトプログラムを生成するコンパイラ装置であって、
前記ソースプログラムの実行に必要なＣＰＵのビット幅および個数を見積もる抽出手段と、
前記抽出手段によって見積もられたビット幅および個数、前記半導体集積回路に備えられたＣＰＵのビット幅および個数、ならびに前記プログラマブルデバイスの使用可能領域に基づいて、前記プログラマブルデバイスに回路構成をされるべきＣＰＵのビット幅および個数を決定し、これら回路構成をされるべきＣＰＵおよび前記半導体集積回路に備えられたＣＰＵによって実行される前記オブジェクトプログラムを生成するコンパイル手段と、
前記コンパイル手段によって決定されたビット幅および個数のＣＰＵを前記プログラマブルデバイスに回路構成するための命令を、前記オブジェクトプログラムに付加する付加手段とを備えた
ことを特徴とするコンパイラ装置。
【請求項６】
請求項５記載のコンパイラ装置において、
前記抽出手段は、
前記ソースプログラム中に記述された命令の実行に要するビット幅の出現回数をカウントし、データの依存関係をも解析して、前記ビット幅および個数を見積もるものである
ことを特徴とするコンパイラ装置。
【請求項７】
請求項６記載のコンパイラ装置において、
前記コンパイル手段は、
前記半導体集積回路に備えられたＣＰＵのビット幅を除いて、前記抽出手段によってカウントされた出現回数が所定値以上であるビット幅ごとに少なくとも１個のＣＰＵを、前記プログラマブルデバイスに回路構成をされるべきＣＰＵとして決定するものである
ことを特徴とするコンパイラ装置。
【請求項８】
請求項５記載のコンパイラ装置において、
前記コンパイル手段は、
前記オブジェクトプログラムの生成時に、前記ソースプログラム中のデータの依存関係を考慮して、前記プログラマブルデバイスに回路構成をされるべきＣＰＵおよび前記半導体集積回路に備えられたＣＰＵによって並列処理が行われるように最適化を行うものである
ことを特徴とするコンパイラ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンパイラ装置に関するものであり、特に、プログラマブルデバイスを備えた半導体集積回路によって実行されるオブジェクトプログラムを生成するコンパイル技術に属する。
【０００２】
【従来の技術】
コンピュータに所望の処理を行わせるには、その処理をプログラムとして記述する必要がある。通常、このプログラムはＣ言語などの高級プログラム言語を用いて記述されるが、ＣＰＵは高級プログラム言語で書かれたソースプログラムを直接、実行することができない。このため、ソースプログラムを、ＣＰＵが実行することのできるオブジェクトプログラムに変換しなければならない。この変換処理（コンパイル）は、コンパイラによって行われる。
【０００３】
コンパイラは、ソースプログラムのコンパイル時に、オブジェクトプログラムを実行するＣＰＵとして、ソースプログラムの実行に必要とされる最大ビット幅のものを選択している。たとえば、図１７に示されたＣ言語のソースプログラムでは、char型、 short型およびlong型の３つのデータ型が使用されており、各データ型の処理に必要なビット幅はそれぞれ８ビット、１６ビットおよび３２ビットである。したがって、コンパイラは、このソースプログラムの実行に必要なＣＰＵとして３２ビットＣＰＵを選択する。
【０００４】
図１８は、図１７のソースプログラムが３２ビットＣＰＵによって実行されることを前提として生成されたオブジェクトプログラムを示す。
【０００５】
１および２行目の“ movbu”は、８ビット変数ａおよびｂの値を３２ビットデータレジスタＤ０およびＤ１にゼロ拡張をして転送するゼロ拡張バイト転送命令である。同様に、６および７行目の“ movhu”は、１６ビット変数ｄおよびｅの値を３２ビットデータレジスタＤ０およびＤ１にゼロ拡張をして転送するゼロ拡張ハーフワード転送命令である。
【０００６】
３、８および１３行目の“ add”、“ sub”および“ mul”は、それぞれ３２ビットデータレジスタＤ０と３２ビットデータレジスタＤ１との加算命令、減算命令および乗算命令である。そして、４、９および１４行目の“ mov”は、ＣＡ、ＦＡおよびＩＡでそれぞれ表されている変数ｃ、ｆおよびｉのアドレスをアドレスレジスタＡ０に転送する命令であり、１１および１２行目の“ mov”は、３２ビット変数ｇおよびｈの値を３２ビットデータレジスタＤ０およびＤ１に転送する命令である。同様に、１５行目の“ mov”は、３２ビットレジスタＤ１の値をアドレスレジスタＡ０で表されるメモリに転送する命令である。
【０００７】
５行目の“ movbu”は、３２ビットデータレジスタＤ１の値の上位ビットを切り捨て、８ビットデータにしてからアドレスレジスタＡ０で表されるメモリに転送するバイト転送命令である。同様に、１０行目の“ movhu”は、３２ビットデータレジスタＤ１の値の上位ビットを切り捨て、１６ビットデータにしてからアドレスレジスタＡ０で表されるメモリに転送するハーフワード転送命令である。
【０００８】
【発明が解決しようとする課題】
ソースプログラムによっては、そのソースプログラムの実行に必要とされる最大ビット幅よりも小さなビット幅で実行される命令が頻繁に出現するようなものがある。このようなソースプログラムにおいて、ＣＰＵは、小さなビット幅で実行できる命令を、最大ビット幅に拡張して実行する。たとえば、図１７のソースプログラム中の“c=a+b;”を実行するのに、図１８のオブジェクトプログラム中の１および２行目のゼロ拡張バイト転送命令で８ビットデータを３２ビットに拡張し、５行目のバイト転送命令で３２ビットデータの上位ビットを切り捨てて８ビットデータにしてからメモリに転送している。同様に、ソースプログラム中の“f=d-e;”を実行するのに、オブジェクトプログラム中の６および７行目のゼロ拡張ハーフワード転送命令で１６ビットデータを３２ビットに拡張し、１０行目のハーフワード転送命令で３２ビットデータの上位ビットを切り捨てて１６ビットデータにしてからメモリに転送している。
【０００９】
このように、最大ビット幅のＣＰＵによってソースプログラム中のすべての命令が実行されるのでは、効率的にＣＰＵを使用することができない。さらに、小さなビット幅の命令を最大ビット幅に拡張することにより、ゼロ拡張されたデータを載せたバスの部分にもクロックが供給される。しかし、このゼロ拡張された部分に供給されるクロックは無駄であり、半導体集積回路の消費電力の増大を招く原因となる。
【００１０】
上記の問題に鑑み、本発明は、ＣＰＵの使用効率を上げるとともに、半導体集積回路の消費電力が低減されるオブジェクトプログラムを生成するコンパイラ装置を実現することを課題とする。
【００１１】
【課題を解決するための手段】
上記課題を解決するために、請求項１の発明が講じた手段は、ソースプログラムから、回路構成が書き換え可能なプログラマブルデバイスを備えた半導体集積回路によって実行されるオブジェクトプログラムを生成するコンパイラ装置であって、前記ソースプログラムの実行に必要なＣＰＵのビット幅および個数を見積もる抽出手段と、前記抽出手段によって見積もられたビット幅および個数、および前記プログラマブルデバイスの使用可能領域に基づいて、前記プログラマブルデバイスに回路構成をされるべきＣＰＵのビット幅および個数を決定し、これら回路構成をされるべきＣＰＵによって実行される前記オブジェクトプログラムを生成するコンパイル手段と、前記コンパイル手段によって決定されたビット幅および個数のＣＰＵの回路を前記プログラマブルデバイスに構成するための命令を、前記オブジェクトプログラムに付加する付加手段とを備えるものとする。
【００１２】
請求項１の発明によると、ソースプログラムの実行に必要なＣＰＵがプログラマブルデバイスに回路構成をされると想定して、これらＣＰＵによって実行されるオブジェクトプログラムが生成される。このように生成されたオブジェクトプログラムにおいて、各命令の実行に必要なビット幅に応じたＣＰＵでその命令が実行され、ＣＰＵの使用効率を上げることができる。
【００１３】
請求項２の発明では、前記請求項１の抽出手段は、前記ソースプログラム中に記述された命令の実行に要するビット幅の出現回数をカウントし、データの依存関係をも解析して、前記ビット幅および個数を見積もるものとする。
【００１４】
請求項３の発明では、前記請求項２のコンパイル手段は、前記抽出手段によってカウントされた出現回数が所定値以上であるビット幅ごとに少なくとも１個のＣＰＵを、前記プログラマブルデバイスに回路構成をされるべきＣＰＵとして決定するものとする。
【００１５】
請求項４の発明では、前記請求項１のコンパイル手段は、前記オブジェクトプログラムの生成時に、前記ソースプログラム中のデータの依存関係を考慮して、前記プログラマブルデバイスに回路構成をされるべきＣＰＵによって並列処理が行われるように最適化を行うものとする。
【００１６】
そして、請求項５の発明が講じた手段は、ソースプログラムから、ＣＰＵと回路構成が書き換え可能なプログラマブルデバイスとが混載された半導体集積回路によって実行されるオブジェクトプログラムを生成するコンパイラ装置であって、前記ソースプログラムの実行に必要なＣＰＵのビット幅および個数を見積もる抽出手段と、前記抽出手段によって見積もられたビット幅および個数、前記半導体集積回路に備えられたＣＰＵのビット幅および個数、および前記プログラマブルデバイスの使用可能領域に基づいて、前記プログラマブルデバイスに回路構成をされるべきＣＰＵのビット幅および個数を決定し、これら回路構成をされるべきＣＰＵおよび前記半導体集積回路に備えられたＣＰＵによって実行される前記オブジェクトプログラムを生成するコンパイル手段と、前記コンパイル手段によって決定されたビット幅および個数のＣＰＵの回路を前記プログラマブルデバイスに構成するための命令を、前記オブジェクトプログラムに付加する付加手段とを備えたものとする。
【００１７】
請求項５の発明によると、ＣＰＵを初めから備えた半導体集積回路においても、ソースプログラムの実行に必要なＣＰＵがプログラマブルデバイスに回路構成をされると想定して、これらＣＰＵによって実行されるオブジェクトプログラムが生成される。このように生成されたオブジェクトプログラムにおいて、各命令の実行に必要なビット幅に応じたＣＰＵでその命令が実行され、ＣＰＵの使用効率を上げることができる。
【００１８】
請求項６の発明では、前記請求項５の抽出手段は、前記ソースプログラム中に記述された命令の実行に要するビット幅の出現回数をカウントし、データの依存関係をも解析して、前記ビット幅および個数を見積もるものとする。
【００１９】
請求項７の発明では、前記請求項６のコンパイル手段は、前記半導体集積回路に備えられたＣＰＵのビット幅を除いて、前記抽出手段によってカウントされた出現回数が所定値以上であるビット幅ごとに少なくとも１個のＣＰＵを、前記プログラマブルデバイスに回路構成をされるべきＣＰＵとして決定するものとする。
【００２０】
請求項８の発明では、前記請求項５のコンパイル手段は、前記オブジェクトプログラムの生成時に、前記ソースプログラム中のデータの依存関係を考慮して、前記プログラマブルデバイスに回路構成をされるべきＣＰＵおよび前記半導体集積回路に備えられたＣＰＵによって並列処理が行われるように最適化を行うものとする。
【００２１】
【発明の実施の形態】
以下、図面を用いて、本発明の実施形態について説明する。
【００２２】
（第１の実施形態）
図１は、本発明の第１の実施形態に係るコンパイラ装置の構成を示す。本実施形態に係るコンパイラ装置は、プログラマブルデバイスを備えた半導体集積回路によって実行されるオブジェクトプログラムを生成するものであり、ソースプログラムの実行に必要なＣＰＵのビット幅および個数を見積もる抽出手段Ｍ１と、プログラマブルデバイスに回路構成をされるべきＣＰＵのビット幅および個数を決定してこれらＣＰＵによって実行されるオブジェクトプログラムを生成するコンパイル手段Ｍ２と、ＣＰＵの回路をプログラマブルデバイスに構成するための命令をオブジェクトプログラムに付加する付加手段Ｍ３とを備えている。以下、本実施形態に係るコンパイラ装置が行うコンパイル処理について、図２のフローチャートを用いて説明する。
【００２３】
本実施形態に係るコンパイラ装置はコンパイルを開始すると、ステップＳ１において、ソースプログラム全体にわたり、ソースプログラム中に記述された命令が実行されるときのビット幅の出現回数をカウントする。このとき、データの依存関係についても解析する。そして、データの依存関係がある命令のビット幅については出現回数を減じて、ソースプログラムの実行に必要なＣＰＵのビット幅およびそのビット幅ごとの個数を見積もる。以上のステップＳ１は、本実施形態に係るコンパイラ装置の抽出手段Ｍ１によって実行される。
【００２４】
次に、ステップＳ２において、抽出手段Ｍ１によってカウントされたビット幅の出現回数と所定値とを比較し、出現回数が所定値以上のビット幅（以下、「必要ビット幅」）を抽出する。ここで、必要ビット幅を抽出するとしたのは、出現回数が少ないビット幅のＣＰＵはプログラマブルデバイスに回路構成をされても無駄が多いため、このようなＣＰＵは回路構成をされないようにするためである。たとえば、あるソースプログラムにおいて、１６ビットおよび８ビットのビット幅の出現回数がそれぞれ１８回および２回であるとき、出現回数が少ない８ビットのＣＰＵは回路構成をされず、１６ビットのＣＰＵのみが回路構成をされるようにする。なお、本実施形態では、ソースプログラム全体に対するビット幅の出現割合と所定の閾値とを比較するものとする。そして、必要ビット幅が１つの場合はステップＳ３に進み、複数の場合はステップＳ４に進む。
【００２５】
ステップＳ３では、必要ビット幅のＣＰＵについて抽出手段Ｍ１によって見積もられた個数が１個である場合、必要ビット幅のＣＰＵが１個だけプログラマブルデバイスに回路構成をされるものとしてステップＳ９に進む。一方、必要ビット幅のＣＰＵの個数が複数個である場合、プログラマブルデバイスの使用可能領域に収まる個数のＣＰＵが回路構成をされるものとしてステップＳ１０に進む。
【００２６】
ステップＳ４では、必要ビット幅に対する必要な個数のＣＰＵがすべて回路構成をされたときの回路面積ＳＣＡを計算し、プログラマブルデバイスの使用可能領域の回路面積ＳＦと比較する。そして、ＳＦ≧ＳＣＡの場合は、必要ビット幅のＣＰＵがすべて回路構成をされるものとしてステップＳ８に進み、ＳＦ＜ＳＣＡの場合はステップＳ５に進む。
【００２７】
ステップＳ５では、必要ビット幅のＣＰＵがその必要ビット幅ごとに１個だけ回路構成をされるものとして、この場合に要する回路面積ＳＣ１を計算する。そして、回路面積ＳＣ１とプログラマブルデバイスの使用可能領域の回路面積ＳＦとの差（ＳＦ−ＳＣ１）と、必要ビット幅のＣＰＵのうち回路構成に要する回路面積が最小であるものの回路面積ＳＳとを比較する。つまり、必要ビット幅ごとに１個のＣＰＵの回路構成をし、なおも残存するプログラマブルデバイスの使用可能領域に別の必要ビット幅のＣＰＵが追加して回路構成をされ得るか否かを判断する。そして、ＳＦ−ＳＣ１≧ＳＳの場合はステップＳ６に進み、ＳＦ−ＳＣ１＜ＳＳの場合は、複数ビット幅のＣＰＵがビット幅ごとに１個、プログラマブルデバイスに回路構成をされるものとしてステップＳ７に進む。
【００２８】
ステップＳ６では、必要ビット幅のＣＰＵがビット幅ごとに１個、回路構成をされ、さらに、なおも残存するプログラマブルデバイスの使用可能領域に別の必要ビット幅のＣＰＵが追加して回路構成をされるように、必要ビット幅のＣＰＵの個数を見積もり直す処理が行われる。この処理については後述する。
【００２９】
ステップＳ７では、複数ビット幅のＣＰＵが、ビット幅ごとに１個、プログラマブルデバイスに回路構成をされると想定して、これらＣＰＵによって実行されるオブジェクトプログラムを生成する。このとき、ソースプログラム中に記述された命令の実行に要するビット幅に応じて、各命令に各ビット幅のＣＰＵを割り当てるようにコンパイルする。
【００３０】
ステップＳ８では、複数ビット幅のＣＰＵが、ビット幅ごとに複数個、プログラマブルデバイスに回路構成をされると想定して、これらＣＰＵによって実行されるオブジェクトプログラムを生成する。このとき、ソースプログラム中に記述された命令の実行に要するビット幅に応じて、各命令に各ビット幅のＣＰＵを割り当てるとともに、各命令が並列に実行されるように最適化を行ってコンパイルする。
【００３１】
ステップＳ９では、単一ビット幅のＣＰＵが１個、プログラマブルデバイスに回路構成をされると想定して、このＣＰＵによって実行されるオブジェクトプログラムを生成する。
【００３２】
ステップＳ１０では、単一ビット幅のＣＰＵが１または複数個、プログラマブルデバイスに回路構成をされると想定して、これらＣＰＵによって実行されるオブジェクトプログラムを生成する。このとき、ソースプログラム中に記述された各命令が並列に実行されるように最適化を行ってコンパイルする。
【００３３】
以上、ステップＳ２からステップＳ１０までの処理は、本実施形態に係るコンパイラ装置のコンパイル手段Ｍ２によって実行される。
【００３４】
最後に、ステップＳ１１では、回路構成をされると想定したＣＰＵの回路をプログラマブルデバイスに構成するための命令をオブジェクトプログラム付加する。まず、コンパイル手段Ｍ２によって生成されたオブジェクトプログラムを解析して、各ビット幅のＣＰＵの使用頻度を調べる。そして、付加する命令において、ビット幅を表す数字が使用頻度の多い順に、先に現れるようにする。また、使用頻度が同一の場合は、ビット幅の大きい順に、先に現れるようにする。そして、コンパイル手段Ｍ２によって生成されたオブジェクトプログラムに、この命令を付加して、すべての処理を終了する。このステップＳ１１は、本実施形態に係るコンパイラ装置の付加手段Ｍ３によって実行される。
【００３５】
次に、ステップＳ６における処理について、図３のフローチャートを用いて説明する。
【００３６】
ステップＳ６１では、プログラマブルデバイスに残存する使用可能領域の回路面積（ＳＦ−ＳＣ１）と、必要ビット幅のＣＰＵのうち回路構成に要する回路面積が最大であるものの回路面積ＳＢとを比較する。つまり、プログラマブルデバイスの残存領域に必要バス幅のＣＰＵのうち、任意のものが追加して回路構成をされ得るか否かを判断する。そして、ＳＦ−ＳＣ１≧ＳＢの場合はステップＳ６２に進み、ＳＦ−ＳＣ１＜ＳＢの場合はステップＳ６４に進む。
【００３７】
ステップＳ６２では、出現回数が最多である必要ビット幅のＣＰＵが追加して回路構成可能であるとして、この必要ビット幅のＣＰＵの個数を１つ増やす。そして、この追加されたＣＰＵが要する回路面積を回路面積ＳＣ１に加えて新たな回路面積ＳＣ１を計算し、ステップＳ６３に進む。
【００３８】
ステップＳ６３では、プログラマブルデバイスに残存する使用可能領域の回路面積（ＳＦ−ＳＣ１）と、必要ビット幅のＣＰＵのうち回路構成に要する回路面積が最小であるものの回路面積ＳＳとを比較する。つまり、なおも残存するプログラマブルデバイスの使用可能領域に別の必要ビット幅のＣＰＵが追加して回路構成可能か否かを判断する。そして、ＳＦ−ＳＣ１≧ＳＳの場合は、なおもＣＰＵが追加可能であるとして、ステップＳ６１に戻ってＣＰＵの個数をさらに見積もり直す。一方、ＳＦ−ＳＣ１＜ＳＳの場合は、これ以上のＣＰＵを追加できないため、このときの選択されているビット幅およびそのビット幅ごとの個数のＣＰＵが、プログラマブルデバイスに回路構成をされるものとしてステップＳ７に進む。
【００３９】
ステップＳ６４では、追加されるＣＰＵとして、プログラマブルデバイスに残存する使用可能領域の回路面積（ＳＦ−ＳＣ１）に収まる回路面積であり、かつ、出現回数が最多のＣＰＵを選択する。そして、このとき選択されているビット幅およびそのビット幅ごとの個数のＣＰＵが、プログラマブルデバイスに回路構成をされるものとしてステップＳ７に進む。
【００４０】
以上、本実施形態に係るコンパイラ装置の処理の流れを説明した。次に、図４に示されたＣ言語プログラムを例に、本実施形態に係るコンパイラ装置のコンパイル処理について具体的に説明する。なお、ソースプログラム中に記述された各命令に対するコンパイル処理については説明を省略し、オブジェクトプログラムの実行に必要なＣＰＵを決定する処理およびこれらＣＰＵの回路を構成するための命令を付加する処理について詳しく述べる。
【００４１】
コンパイラ装置はコンパイルを開始すると、ステップＳ１において、図４のソースプログラム中の“c=a+b;”はすべてchar型データなのでこの命令を実行するのに要するビット幅は８ビット、“f=d-e;”はすべてchar型データなので８ビット、“i=g*h;”はすべて short型データなので１６ビットであるため、８ビットの出現回数を２回、１６ビットの出現回数を１回としてカウントする。さらに、データの依存関係を解析し、図４のソースプログラムにはデータの依存関係がないと判断する。そして、図４のソースプログラムの実行に必要なＣＰＵとして、８ビットが２個、１６ビットが１個であると見積もる。
【００４２】
次に、ステップＳ２に進み、各ビット幅の出現割合をチェックする。ここでは、閾値を１／４とする。８ビットの出現割合は２／３および１６ビットの出現割合は１／３であり、どちらも閾値以上なので、必要ビット幅として８ビットおよび１６ビットの２種類を抽出し、ステップＳ４に進む。
【００４３】
ステップＳ４に進むと、抽出されたビット幅のＣＰＵがすべてプログラマブルデバイスに回路構成可能か否かを判断する。ここで、プログラマブルデバイスの使用可能な領域の回路面積ＳＦを１０、８ビットＣＰＵの回路構成に要する回路面積を２、１６ビットＣＰＵの回路構成に要する回路面積を４とする。すべてのＣＰＵを回路構成するのに要する回路面積ＳＣＡは２×２＋４＝８となり、ＳＦ≧ＳＣＡなので、すべてのＣＰＵの回路を構成するものとしてステップＳ８に進む。
【００４４】
ステップＳ８に進むと、８ビットＣＰＵが２個および１６ビットＣＰＵが１個、プログラマブルデバイスに回路構成されると想定して、これら３個のＣＰＵによって実行されるオブジェクトプログラムを生成し、ステップＳ１１に進む。なお、ここで生成されるのは、図５に示されたオブジェクトプログラムの２行目以降となる。
【００４５】
オブジェクトプログラムは、ソースプログラム中に記述された命令の実行に要するビット幅に応じて、各命令に各ビット幅のＣＰＵを割り当てるように生成される。図５のオブジェクトプログラムの２行目以降に記述された命令の末尾に付された数字は、その命令がその数字のビット幅のＣＰＵによって実行されることを示している。また、図４のソースプログラムに対して、２個の８ビットＣＰＵが回路構成をされるため、この２個のＣＰＵで並列処理が行われるように最適化されたオブジェクトプログラムが生成される。図５のオブジェクトプログラムでは、２行目以降の命令の末尾に付された数字の後に、さらに“ａ”や“ｂ”といった記号を付して、その命令が実行されるべきＣＰＵが指定されている。
【００４６】
そして、ステップＳ１１に進むと、コンパイル手段Ｍ２によって生成されたオブジェクトプログラムを解析して、各ビット幅のＣＰＵの使用頻度を調べる。図５のオブジェクトプログラムでは、どのビット幅のＣＰＵも使用頻度は５回であるので、ビット幅の大きい順に、１６ビット、８ビット、８ビットとして bit命令に現れるようにする。この bit命令は、プログラマブルデバイスにＣＰＵの回路を構成するための命令である。そして、図５のオブジェクトプログラムの１行目に示された“bit 16,8,8”を付加して、処理を終了する。
【００４７】
以上は、データの依存関係がないソースプログラムを例にコンパイル処理の説明をした。次に、データの依存関係があるソースプログラムのコンパイル処理について、図６のＣ言語プログラムを例に説明をする。なお、先ほどと同様に、ソースプログラム中に記述された各命令に対するコンパイル処理については説明を省略し、オブジェクトプログラムの実行に必要なＣＰＵを決定する処理およびこれらＣＰＵの回路を構成するための命令を付加する処理について詳しく述べる。
【００４８】
コンパイラ装置はコンパイルを開始すると、ステップＳ１において、図６のソースプログラム中の“c=a+b;”はすべてchar型データなのでこの命令を実行するのに必要なビット幅は８ビット、“f=c-e;”はすべてchar型データなので８ビット、“i=g*h;”はすべて short型データなので１６ビットであるため、８ビットの出現回数を２回、１６ビットの出現回数を１回としてカウントする。さらに、データの依存関係を解析し、変数ｃについてデータの依存関係があると判断する。したがって、図６のソースプログラムの実行に必要なＣＰＵとして、８ビットが１個、１６ビットが１個であると見積もり、ステップＳ２に進む。なお、ステップＳ２以降、コンパイル手段Ｍ２によって行われる処理は、先ほどの例と同様であるので説明を省略する。なお、コンパイル手段Ｍ２によって図７に示されたオブジェクトプログラムの２行目以降が生成される。
【００４９】
最後に、ステップＳ１１に進み、コンパイル手段Ｍ２によって生成されたオブジェクトプログラムを解析して、各ビット幅のＣＰＵの使用頻度を調べる。図７のオブジェクトプログラムでは、８ビットＣＰＵの使用頻度は９回、１６ビットＣＰＵは５回であるので、使用頻度の多い順に、８ビット、１６ビットとして bit命令に現れるようにする。そして、図７のオブジェクトプログラムの１行目に示された“bit 8,16”を付加して、処理を終了する。
【００５０】
次に、本実施形態に係る半導体集積回路について、図８を用いて説明する。本実施形態に係る半導体集積回路１は、上記の bit命令が付加されたオブジェクトプログラム、たとえば、本実施形態に係るコンパイラ装置によって生成されたオブジェクトプログラムを実行することができる。
【００５１】
本実施形態に係る半導体集積回路１は、ＦＰＧＡ１１と、ＦＰＧＡ１１にさまざまな回路を構成する制御部１２と、ＦＰＧＡ１１に構成されるさまざまな回路の回路構成データを格納している構成データメモリ１３と、半導体集積回路１によって実行される命令を格納する命令メモリ１５と、データメモリ１６とを備えている。なお、本実施形態で用いる回路構成データは、ＦＰＧＡに回路を構成するための一般的なデータと同様のものである。
【００５２】
ＦＰＧＡ１１には、１または複数個（図８では４個）のＣＰＵ１４と、命令メモリ１５からＣＰＵ１４に命令を供給するための共有命令バス１７と、ＣＰＵ１４とデータメモリ１６との間でデータを転送するための共有データバス１８と、共有データバス１８の使用に関してＣＰＵ１４を調停するバス調停回路１９とが回路構成をされている。
【００５３】
制御部１２は、指定されたビット幅および指定された個数のＣＰＵ１４の回路をＦＰＧＡ１１に構成する機能と、共有命令バス１７の回路をＦＰＧＡ１１に構成する機能と、共有データバス１８の回路をＦＰＧＡ１１に構成する機能と、バス調停回路１９の回路をＦＰＧＡ１１に構成する機能とを有する。なお、本実施形態におけるこれら回路の構成は、一般的な回路構成技術によって行うものとする。
【００５４】
構成データメモリ１３は、ＦＰＧＡ１１に回路構成をされる８ビットＣＰＵ、１６ビットＣＰＵ、３２ビットＣＰＵなどのさまざまなビット幅のＣＰＵの回路構成データと、さまざまなビット幅のＣＰＵに接続することのできる共有命令バスの回路構成データおよび共有データバスの回路構成データとを格納している。
【００５５】
ＣＰＵ１４は、データレジスタおよびアドレスレジスタを有し、独立して命令を実行することができる。したがって、これらＣＰＵ１４によって並列処理が行われる。
【００５６】
共有命令バス１７は、すべてのＣＰＵ１４と命令メモリ１５とに接続するように回路構成をされ、命令メモリ１５から命令を受け取り、この命令がどのＣＰＵ１４によって実行されるのかを判別する機能と、各命令をその命令が実行されるＣＰＵに供給する機能とを有する。
【００５７】
共有データバス１８は、すべてのＣＰＵ１４とデータメモリ１６とに接続するように回路構成をされ、ＣＰＵ１４とデータメモリ１６との間のデータ転送命令に関して、ＣＰＵ１４からデータメモリ１６に指定アドレスを供給する機能と、データメモリ１６からＣＰＵ１４にデータを供給する機能とを有する。
【００５８】
共有データバス１８は複数のＣＰＵ１４によって共有されているため、複数のＣＰＵ１４によって同時にアクセスされる可能性がある。しかし、共有データバス１８は、一度に１個のＣＰＵ１４のデータしか扱えないため、ＣＰＵ１４間で共有データバス１８を使用するタイミングを調整しなければならない。この調整を行うのがバス調停回路１９である。
【００５９】
バス調停回路１９は、共有データバス１８の使用状況を判断するためのレジスタを有する。このレジスタは、共有データバス１８がＣＰＵ１４によって使用されている場合は“１”、どのＣＰＵ１４にも使用されていない場合は“０”の値を保持する。ＣＰＵ１４がデータメモリ１６にアクセスするには、まず、バス調停回路１９にバス使用要求信号ＤＴ１を発する。バス調停回路１９はバス使用要求信号ＤＴ１を受けると、レジスタ値を参照して、レジスタ値が“０”の場合は、レジスタ値を“１”にして他のＣＰＵ１４が共有データバス１８を使用できないようにするとともに、バス使用要求信号ＤＴ１を発したＣＰＵ１４にバス使用許可信号ＤＴ２を送る。一方、レジスタ値が“１”の場合は、レジスタ値が“０”になるまで、バス使用要求信号ＤＴ１を発したＣＰＵ１４を待機させる。バス使用許可信号ＤＴ２を受けたＣＰＵ１４は、共有データバス１８を使用してデータメモリ１６にアクセスができるようになる。そして、アクセスが終了すると、バス調停回路１９にバス使用終了信号ＤＴ３を発する。バス調停回路１９はバス使用終了信号ＤＴ３を受けると、レジスタ値を“０”にして他のＣＰＵ１４が共有データバス１８を使用できるようにする。
【００６０】
次に、半導体集積回路１によって図５のオブジェクトプログラムが実行されるときの動作について説明する。なお、オブジェクトプログラム中の個々の命令に対する動作についての説明は省略し、 bit命令に対する動作について説明する。
【００６１】
半導体集積回路１によって図５のオブジェクトプログラムが実行されると、まず、１行目の“bit 16,8,8”が命令メモリ１５から制御部１２に送られる。制御部１２はこの bit命令を受けると、構成データメモリ１３から、１６ビットおよび８ビットのＣＰＵの回路構成データ、および１６ビットおよび８ビットのＣＰＵに接続するための共有命令バスおよび共有データバスの回路構成データを読み込み、ＦＰＧＡ１１にこれらの回路構成をする。
【００６２】
図９は、制御部１２が bit命令を実行した結果、ＦＰＧＡ１１にＣＰＵ１４−Ａ，１４−Ｂ，１４−Ｃ、共有命令バス１７および共有データバス１８の回路が構成されたところを示す。図５のオブジェクトプログラムの bit命令において、回路構成をされるべきＣＰＵのビット幅を示す数値として“１６”が先に指定されているので、１６ビットＣＰＵのＣＰＵ１４−ＡがＦＰＧＡ１１の領域内でメモリにより近い位置に回路構成をされる。共有データバス１８は、ＣＰＵ１４−Ａとは１６ビット、ＣＰＵ１４−ＢおよびＣＰＵ１４−Ｃとは８ビットで接続されるように回路構成をされる。なお、共有データバス１８の下位８ビットはＣＰＵ１４−Ａ，１４−Ｂ，１４−Ｃに、上位８ビットはＣＰＵ１４−Ａのみに接続される。
【００６３】
図５のオブジェクトプログラムの２行目以降に記述された命令は、共有命令バス１７によって、その命令が実行されるべきＣＰＵに供給される。図５のオブジェクトプログラムにおいて、命令の末尾に付された“16”はＣＰＵ１４−Ａ、“8a”はＣＰＵ１４−Ｂ、そして“8b”はＣＰＵ１４−Ｃでそれぞれ実行されることを表す。ＣＰＵ１４−Ａ，１４−Ｂ，１４−Ｃは命令を受けると、それぞれ独立してその命令を実行するが、この実行については説明を省略する。
【００６４】
以上、本実施形態によると、コンパイル時に、ソースプログラム中に記述された命令の実行に要するビット幅に応じてＣＰＵのビット幅を選択し、その選択されたビット幅のＣＰＵによってその命令が実行されるようにすることにより、ＣＰＵを効率的に使用するオブジェクトプログラムを生成することができる。
【００６５】
（第２の実施形態）
図１は、本発明の第２の実施形態に係るコンパイラ装置の構成を示す。本実施形態に係るコンパイラ装置は、ＣＰＵ（以下、「メインＣＰＵ」）とプログラマブルデバイスとが混載された半導体集積回路によって実行されるオブジェクトプログラムを生成するものであり、ソースプログラムの実行に必要なＣＰＵのビット幅および個数を見積もる抽出手段Ｍ１と、プログラマブルデバイスに回路構成をされるべきＣＰＵのビット幅および個数を決定してこれらＣＰＵおよびメインＣＰＵによって実行されるオブジェクトプログラムを生成するコンパイル手段Ｍ２Ａと、プログラマブルデバイスにＣＰＵの回路を構成するための命令をオブジェクトプログラムに付加する付加手段Ｍ３とを備えている。以下、本実施形態に係るコンパイラ装置が行うコンパイル処理について、図１０のフローチャートを用いて説明する。
【００６６】
コンパイル処理が開始されると、まず、抽出手段Ｍ１によってステップＳ１の処理が実行される。このステップＳ１は、第１の実施形態と同様であるので説明を省略する。続くステップＳ２も、第１の実施形態と同様であるので説明を省略する。ここで、ステップＳ２において、出現回数が所定値以上であるとして抽出されたビット幅（以下、「必要ビット幅」）の中には、メインＣＰＵのビット幅と等しいビット幅があるとする。
【００６７】
ステップＳ３Ａでは、必要ビット幅としてメインＣＰＵのビット幅を選択し、このビット幅のＣＰＵについて抽出手段Ｍ１によって見積もられた個数が１個である場合、メインＣＰＵ１個によって実行されるオブジェクトプログラムを生成するためにステップＳ９Ａに進む。一方、メインＣＰＵと同一ビット幅のＣＰＵの個数が複数個である場合、この個数からメインＣＰＵの個数を減じ、さらに、プログラマブルデバイスの使用可能領域に収まる個数のＣＰＵが回路構成をされるものとしてステップＳ１０Ａに進む。
【００６８】
ステップＳ４Ａでは、メインＣＰＵを除く必要ビット幅に対する必要な個数のＣＰＵがすべて回路構成をされたときの回路面積ＳＣＡを計算し、プログラマブルデバイスの使用可能領域の回路面積ＳＦと比較する。そして、ＳＦ≧ＳＣＡの場合は、メインＣＰＵを除く必要ビット幅のＣＰＵがすべて回路構成をされるものとしてステップＳ８Ａに進み、ＳＦ＜ＳＣＡの場合はステップＳ５Ａに進む。
【００６９】
ステップＳ５Ａでは、メインＣＰＵのビット幅を除く必要ビット幅のＣＰＵがその必要ビット幅ごとに１個だけ回路構成をされるものとして、この場合に要する回路面積ＳＣ１を計算する。そして、回路面積ＳＣ１とプログラマブルデバイスの使用可能領域の回路面積ＳＦとの差（ＳＦ−ＳＣ１）と、必要ビット幅のＣＰＵのうち回路構成に要する回路面積が最小であるものの回路面積ＳＳとを比較する。つまり、メインＣＰＵのビット幅を除く必要ビット幅ごとに１個のＣＰＵの回路構成をし、なおも残存するプログラマブルデバイスの使用可能領域に別の必要ビット幅のＣＰＵが追加して回路構成をされ得るか否かを判断する。そして、ＳＦ−ＳＣ１≧ＳＳの場合はステップＳ６に進み、ＳＦ−ＳＣ１＜ＳＳの場合は、メインＣＰＵのビット幅を除く複数ビット幅のＣＰＵがビット幅ごとに１個、プログラマブルデバイスに回路構成をされるものとしてステップＳ７Ａに進む。
【００７０】
ステップＳ６では、メインＣＰＵのビット幅を除く必要ビット幅のＣＰＵがビット幅ごとに１個、回路構成され、さらに、なおも残存するプログラマブルデバイスの使用可能領域に別の必要ビット幅のＣＰＵが追加して回路構成をされるように、必要ビット幅のＣＰＵの個数を見積もり直す処理が行われる。この処理は、第１の実施形態と同様であるので説明を省略する。
【００７１】
ステップＳ７Ａでは、メインＣＰＵのビット幅を除く複数ビット幅のＣＰＵが、ビット幅ごとに１個、プログラマブルデバイスに回路構成をされると想定して、これら回路構成をされるＣＰＵおよびメインＣＰＵによって実行されるオブジェクトプログラムを生成する。このとき、ソースプログラム中に記述された命令の実行に要するビット幅に応じて、各命令に各ビット幅のＣＰＵを割り当てるようにコンパイルする。
【００７２】
ステップＳ８Ａでは、メインＣＰＵを除く複数ビット幅のＣＰＵが、ビット幅ごとに１または複数個、プログラマブルデバイスに回路構成をされると想定して、これら回路構成をされるＣＰＵおよびメインＣＰＵによって実行されるオブジェクトプログラムを生成する。このとき、ソースプログラム中に記述された命令の実行に要するビット幅に応じて、各命令に各ビット幅のＣＰＵを割り当てるようにするとともに、各命令が並列に実行されるように最適化を行ってコンパイルする。さらに、メインＣＰＵと同一のビット幅のＣＰＵが回路構成をされる場合、メインＣＰＵを優先的に使用するように最適化を行う。
【００７３】
ステップＳ９Ａでは、メインＣＰＵ１個によって実行されるオブジェクトプログラムを生成する。
【００７４】
ステップＳ１０Ａでは、メインＣＰＵのビット幅のＣＰＵが複数個、プログラマブルデバイスに回路構成をされると想定して、これら回路構成をされるＣＰＵおよびメインＣＰＵによって実行されるオブジェクトプログラムを生成する。このとき、メインＣＰＵを優先的に使用し、ソースプログラム中に記述された各命令が並列に実行されるように最適化を行ってコンパイルする。
【００７５】
以上、ステップＳ２からステップＳ１０Ａまでの処理は、本実施形態に係るコンパイラ装置のコンパイル手段Ｍ２Ａによって実行される。
【００７６】
最後に、付加手段Ｍ３によってステップＳ１１の処理が実行される。このステップＳ１１は、第１の実施形態と同様であるので説明を省略する。
【００７７】
以上、本実施形態に係るコンパイラ装置の処理の流れを説明した。次に、図１１に示されたＣ言語プログラムを例に、本実施形態に係るコンパイラ装置のコンパイル処理について具体的に説明する。なお、ソースプログラム中に記述された各処理に対するコンパイル処理については説明を省略し、オブジェクトプログラムの実行に必要なＣＰＵを決定する処理およびこれらＣＰＵの回路構成のための命令を付加する処理について詳しく述べる。また、生成されるオブジェクトプログラムを実行する半導体集積回路は、メインＣＰＵとして３２ビットＣＰＵを備えているとする。
【００７８】
コンパイラ装置はコンパイルを開始すると、ステップＳ１において、図１１のソースプログラム中の“c=a+b;”はすべてchar型データなのでこの命令を実行するのに要するビット幅は８ビット、“f=d-e;”はすべて short型なので１６ビット、処理“i=g*h;”はすべてlong型データなので３２ビット、処理“l=j*k;”はすべてchar型データなので８ビットであるため、８ビットの出現回数を２回、１６ビットの出現回数を１回、３２ビットの出現回数を１回としてカウントする。さらに、データの依存関係を解析し、図１１のソースプログラムにはデータの依存関係がないと判断する。そして、図１１のソースプログラムの実行に必要なＣＰＵとして、８ビットが２個、１６ビットが１個、３２ビットが１個であると見積もる。
【００７９】
次に、ステップＳ２に進み、各ビット幅の出現割合をチェックする。ここでは、閾値を１／４とする。８ビットの出現割合は２／４、１６ビットの出現割合は１／４および３２ビットの出現割合は１／４であり、いずれも閾値以上であるので、必要ビット幅として８ビット、１６ビットおよび３２ビットの３種類を抽出し、ステップＳ４Ａに進む。
【００８０】
ステップＳ４Ａに進むと、抽出されたビット幅のＣＰＵからメインＣＰＵを除く、２個の８ビットＣＰＵおよび１個の１６ビットＣＰＵがプログラマブルデバイスに回路構成可能か否かを判断する。ここで、プログラマブルデバイスの使用可能な領域の回路面積ＳＦを１０、８ビットＣＰＵの回路構成に要する回路面積を２、１６ビットＣＰＵの回路構成に要する回路面積を４とする。メインＣＰＵを除くすべてのＣＰＵを回路構成するのに要する回路面積ＳＣＡは２×２＋４＝８となり、ＳＦ≧ＳＣＡなので、メインＣＰＵを除くすべてのＣＰＵの回路を構成するものとしてステップＳ８Ａに進む。
【００８１】
ステップＳ８Ａに進むと、８ビットＣＰＵが２個および１６ビットＣＰＵが１個、プログラマブルデバイスに回路構成されると想定して、これら３個のＣＰＵおよびメインＣＰＵによって実行されるオブジェクトプログラムを生成し、ステップＳＴ１１に進む。なお、ここで生成されるのは、図１２に示されたオブジェクトプログラムの２行目以降となる。
【００８２】
オブジェクトプログラムは、ソースプログラム中に記述された命令の実行に要するビット幅に応じて、各命令に各ビット幅のＣＰＵを割り当てるように生成される。図１２のオブジェクトプログラムの２行目以降に記述された命令の末尾に付された数字は、その命令がその数字のビット幅のＣＰＵによって実行されることを示している。ただし、メインＣＰＵによって実行される命令には数字は付されない。また、図１１のソースプログラムに対して、２個の８ビットＣＰＵが回路構成をされるため、この２個のＣＰＵで並列処理が行われるように最適化されたオブジェクトプログラムが生成される。図１２のオブジェクトプログラムでは、２行目以降の命令の末尾に付された数字の後に、さらに“ａ”や“ｂ”といった記号を付して、その命令が実行されるべきＣＰＵが指定されている。
【００８３】
そして、ステップＳ１１に進むと、コンパイル手段Ｍ２Ａによって生成されたオブジェクトプログラムを解析して、プログラマブルデバイスに回路構成をされるべきＣＰＵの使用頻度を調べる。図１２のオブジェクトプログラムでは、どのビット幅のＣＰＵも使用頻度は５回であるので、ビット幅の大きい順に、１６ビット、８ビット、８ビットとして bit命令に現れるようにする。この bit命令は、プログラマブルデバイスにＣＰＵの回路を構成するための命令である。そして、図１２のオブジェクトプログラムの１行目に示された“bit 16,8,8”を付加して、処理を終了する。
【００８４】
以上は、データの依存関係がないソースプログラムを例にコンパイル処理の説明をした。次に、データの依存関係があるソースプログラムのコンパイル処理について、図１３のＣ言語プログラムを例に説明をする。
【００８５】
コンパイラ装置はコンパイルを開始すると、ステップＳ１において、図１３のソースプログラム中の“c=a+b;”はすべてchar型データなのでこの処理のビット幅は８ビット、“f=d-e;”はすべて short型データなので１６ビット、“i=g*h;”はすべてlong型データなので３２ビット、“l=c*k;”はすべてchar型データなので８ビットであるため、８ビットの出現回数を２回、１６ビットの出現回数を１回、３２ビットの出現回数が１回としてカウントする。さらに、データの依存関係を解析し、変数ｃについてデータの依存関係があると判断する。したがって、必要なＣＰＵとして、８ビットが１個、１６ビットが１個、３２ビットが１個であると見積もり、ステップＳ２に進む。なお、ステップＳ２以降、コンパイル手段Ｍ２Ａによって行われる処理は、先ほどの例と同様であるので説明を省略する。なお、コンパイル手段Ｍ２Ａによって図１４に示されたオブジェクトプログラムの２行目以降が生成される。
【００８６】
最後に、ステップＳ１１に進み、コンパイル手段Ｍ２Ａによって生成されたオブジェクトプログラムを解析して、プログラマブルデバイスに回路構成をされるべきＣＰＵの使用頻度を調べる。図１４のオブジェクトプログラムでは、８ビットＣＰＵの使用頻度は９回、１６ビットＣＰＵは５回であるので、使用頻度の多い順に、８ビット、１６ビットとして bit命令に現れるようにする。そして、図１４のオブジェクトプログラムの１行目に示された“bit 8,16”を付加して、処理を終了する。
【００８７】
次に、本実施形態に係る半導体集積回路について、図１５を用いて説明する。本実施形態に係る半導体集積回路１Ａは、上記の bit命令が付加されたオブジェクトプログラム、たとえば、本実施形態に係るコンパイラ装置によって生成されたオブジェクトプログラムを実行することができる。
【００８８】
本実施形態に係る半導体集積回路１Ａは、メインＣＰＵ１０と、ＦＰＧＡ１１と、ＦＰＧＡ１１にさまざまな回路を構成する制御部１２と、ＦＰＧＡ１１に構成されるさまざまな回路の回路構成データを格納している構成データメモリ１３と、半導体集積回路１Ａによって実行される命令を格納する命令メモリ１５と、データメモリ１６と、ＣＰＵ１０およびＦＰＧＡ１１に回路構成をされたＣＰＵ１４に命令を供給するための共有命令バス１７と、ＣＰＵ１０およびＦＰＧＡ１１に回路構成をされたＣＰＵ１４とデータメモリ１６との間でデータを転送するための共有データバス１８とを備える。
【００８９】
ＦＰＧＡ１１には、１または複数（図１５では４個）のＣＰＵ１４と、共有データバス１８の使用に関してＣＰＵ１０およびＣＰＵ１４を調停するバス調停回路１９と、上記の共有命令バス１７とＣＰＵ１４とを接続するための延長部分と、上記の共有データバス１８とＣＰＵ１４とを接続するための延長部分とが回路構成をされている。
【００９０】
なお、本実施形態に係る半導体集積回路１Ａの各構成要素については、第１の実施形態と同様であるので説明を省略する。
【００９１】
次に、半導体集積回路１Ａによって図１２のオブジェクトプログラムが実行されるときの動作について説明する。ここで、メインＣＰＵ１０は３２ビットＣＰＵであるとする。なお、オブジェクトプログラム中の個々の命令に対する動作ついての説明は省略し、 bit命令に対する動作について説明する。
【００９２】
半導体集積回路１Ａによって図１２のオブジェクトプログラムが実行されると、まず、１行目の“bit 16,8,8”が命令メモリ１５から制御部１２に送られる。制御部１２は bit命令を受けると、構成データメモリ１３から、１６ビットＣＰＵおよび８ビットＣＰＵの回路構成データ、および１６ビットＣＰＵおよび８ビットＣＰＵに接続するための共有命令バスおよび共有データバスの回路構成データを読み込み、ＦＰＧＡ１１にこれらの回路構成をする。このとき、半導体集積回路１Ａが、 bit命令に指定されたビット幅と同一ビット幅のメインＣＰＵを既に備えていたなら、メインＣＰＵの個数だけ減じて、ＣＰＵ１４の回路構成をするようにする。
【００９３】
図１６は、制御部１２が bit命令を実行した結果、ＦＰＧＡ１１にＣＰＵ１４−Ａ，１４−Ｂ，１４−Ｃ、共有命令バス１７の延長部分および共有データバス１８の延長部分の回路が構成されたところを示す。図１２のオブジェクトプログラムの bit命令において、回路構成をされるべきＣＰＵのビット幅を示す数値として“１６”が先に指定されているので、１６ビットＣＰＵのＣＰＵ１４−ＡがＦＰＧＡ１１の領域内でメモリにより近い位置に回路構成をされる。共有データバス１８の延長部分は、ＣＰＵ１４−Ａとは１６ビット、ＣＰＵ１４−ＢおよびＣＰＵ１４−Ｃとは８ビットで接続されるように回路構成をされる。なお、共有データバス１８の下位８ビットはＣＰＵ１０およびＣＰＵ１４−Ａ，１４−Ｂ，１４−Ｃに、下位１６ビットはＣＰＵ１０およびＣＰＵ１４−Ａに、上位１６ビットはＣＰＵ１０のみに接続される。
【００９４】
図１２のオブジェクトプログラムの２行目以降に記述された命令は、共有命令バス１７によって、その命令が実行されるべきＣＰＵに供給される。図１２のオブジェクトプログラムにおいて、命令の末尾に付された“16”はＣＰＵ１４−Ａ、“8a”はＣＰＵ１４−Ｂ、“8b”はＣＰＵ１４−Ｃ、そして何も付されていないものはメインＣＰＵ１０でそれぞれ実行されることを表す。ＣＰＵ１０およびＣＰＵ１４−Ａ，１４−Ｂ，１４−Ｃは命令を受けると、それぞれ独立してその命令を実行するが、各命令の実行については説明を省略する。
【００９５】
以上、本実施形態によると、コンパイル時に、ソースプログラム中に記述された命令の実行に要するビット幅に応じてＣＰＵのビット幅を選択し、その選択されたビット幅のＣＰＵによってその処理が実行されるようにすることにより、ＣＰＵを効率的に使用するオブジェクトプログラムを生成することができる。
【００９６】
また、半導体集積回路１Ａが元来備えているＣＰＵ１０を優先的に使用するようにコンパイルすることにより、半導体集積回路１Ａに備えられたＣＰＵ１０を効率的に使用することができ、高速に処理されるオブジェクトプログラムを作成することができる。
【００９７】
【発明の効果】
以上、本発明によると、ソースプログラムを、これらＣＰＵによって実行されるようにコンパイルすることにより、ＣＰＵの使用効率を上げ、かつ、処理速度が速くなるようなオブジェクトプログラムの生成が可能となる。
【００９８】
なお、本発明に係るコンパイラ装置は、コンパイラプログラムを、たとえば、記録媒体を介して、コンピュータにインストールすることによって、実現することができる。
【図面の簡単な説明】
【図１】本発明のコンパイラ装置の構成図である。
【図２】本発明の第１の実施形態に係るコンパイラ装置のコンパイル処理を示すフローチャートである。
【図３】本発明の第１および第２の実施形態に係るコンパイラ装置のＣＰＵ個数見積もり直し処理のフローチャートである。
【図４】Ｃ言語プログラムの１例である。
【図５】本発明の第１の実施形態に係るコンパイラ装置が図４のＣ言語プログラムをコンパイルして生成したオブジェクトプログラムである。
【図６】Ｃ言語プログラムの１例である。
【図７】本発明の第１の実施形態に係るコンパイラ装置が図６のＣ言語プログラムをコンパイルして生成したオブジェクトプログラムである。
【図８】本発明の第１の実施形態に係る半導体集積回路のブロック図である。
【図９】本発明の第１の実施形態に係る半導体集積回路が図５のオブジェクトプログラムを実行してＣＰＵが回路構成されたところを示した図である。
【図１０】本発明の第２の実施形態に係るコンパイラ装置のコンパイル処理を示すフローチャートである。
【図１１】Ｃ言語プログラムの１例である。
【図１２】本発明の第２の実施形態に係るコンパイラ装置が図１１のＣ言語プログラムをコンパイルして生成したオブジェクトプログラムである。
【図１３】Ｃ言語プログラムの１例である。
【図１４】本発明の第２の実施形態に係るコンパイラ装置が図１３のＣ言語プログラムをコンパイルして生成したオブジェクトプログラムである。
【図１５】本発明の第２の実施形態に係る半導体集積回路のブロック図である。
【図１６】本発明の第２の実施形態に係る半導体集積回路が図１２のオブジェクトプログラムを実行してＣＰＵが回路構成されたところを示した図である。
【図１７】Ｃ言語プログラムの１例である。
【図１８】従来のコンパイラ装置が図１７のＣ言語プログラムをコンパイルして生成したオブジェクトプログラムである。
【符号の説明】
Ｍ１      抽出手段
Ｍ２，Ｍ２Ａ  コンパイル手段
Ｍ３      付加手段
１，１Ａ      半導体集積回路
１０      半導体集積回路に備えられたＣＰＵ（メインＣＰＵ）
１１      プログラマブルデバイス（ＦＰＧＡ）
１２      制御部
１３      構成データメモリ
１４      プログラマブルデバイスに回路構成をされたＣＰＵ
１５      命令メモリ
１６      データメモリ
１７      共有命令バス
１８      共有データバス
１９      バス調停回路
【図１】
0003606836.tif 000002
【図２】
0003606836.tif 000003
【図３】
0003606836.tif 000004
【図４】
0003606836.tif 000005
【図５】
0003606836.tif 000006
【図６】
0003606836.tif 000007
【図７】
0003606836.tif 000008
【図８】
0003606836.tif 000009
【図９】
0003606836.tif 000010
【図１０】
0003606836.tif 000011
【図１１】
0003606836.tif 000012
【図１２】
0003606836.tif 000013
【図１３】
0003606836.tif 000014
【図１４】
0003606836.tif 000015
【図１５】
0003606836.tif 000016
【図１６】
0003606836.tif 000017
【図１７】
0003606836.tif 000018
【図１８】
0003606836.tif 000019