"変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、前記ライフタイム情報が時間軸上で重ならないm個mは2以上の整数の変数を選択し、前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、前記第1及び第2のレジスタを有する合成回路の回路情報を出力する、動作合成方法。前記第1のレジスタの割り当ては、前記その他の変数を、前記第1のビット幅のビットと、前記第1のビット幅のビット以外のビットとに分割して、前記分割した前記第1のビット幅のビットに、前記第1のレジスタを割り当て、前記第2のレジスタの割り当ては、前記分割した前記第1のビット幅のビット以外のビットに、前記第2のレジスタを割り当てる、請求項1に記載の動作合成方法。前記第1のビット幅は、前記第1の変数の符号情報を示すビットを含めたビット幅として定義されている、請求項1または2に記載の動作合成方法。前記第1のビット幅は、前記動作記述情報に記載された前記第1の変数に対して符号拡張したビット幅として定義されている、請求項1乃至3のいずれか一項に記載の動作合成方法。前記第1のビット幅は、前記第1の変数の演算結果のビット幅に合わせて定義されている、請求項4に記載の動作合成方法。前記その他の変数内の前記第1のビット幅のビットは、前記その他の変数の下位ビットである、請求項1乃至5のいずれか一項に記載の動作合成方法。前記その他の変数内の前記第1のビット幅のビット以外のビットは、前記その他の変数の上位ビットである、請求項1乃至6のいずれか一項に記載の動作合成方法。前記m個の変数から2個の変数を特定し、前記第1の変数は、前記特定した2個の変数のうちビット幅が小さい変数であり、前記その他の変数は、前記特定した2個の変数のうちビット幅が大きい変数である、請求項1乃至7のいずれか一項に記載の動作合成方法。前記第1の変数は、前記m個の変数のうちビット幅が最小の変数である、請求項1乃至8のいずれか一項に記載の動作合成方法。前記第1の変数のデータもしくは前記その他の変数のデータのいずれかを切り替えて、前記第1のレジスタに入力するマルチプレクサを、前記合成回路に割り当てる、請求項1乃至9のいずれか一項に記載の動作合成方法。前記第2のレジスタに供給されるクロックを非活性にするクロックゲーティング回路を、前記合成回路に割り当てる、請求項1乃至10のいずれか一項に記載の動作合成方法。前記mは2である、請求項1乃至11のいずれか一項に記載の動作合成方法。変数の演算動作を含む動作記述情報から、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、前記スケジューリングされたデータフローグラフ情報から、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、前記ライフタイム情報が時間軸上で重ならない、第1のビット幅として定義された第1の変数と、第2の変数とを選択し、前記第1の変数と、前記第2の変数に含まれる前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記第2の変数に含まれる前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、前記第1及び第2のレジスタを有する合成回路の回路情報を出力する、動作合成方法。コンピュータに動作合成処理を実行させる動作合成プログラムであって、前記動作合成処理は、変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、前記ライフタイム情報が時間軸上で重ならないm個mは2以上の整数の変数を選択し、前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、前記第1及び第2のレジスタを有する合成回路の回路情報を出力する、動作合成プログラム。前記第1のレジスタの割り当ては、前記その他の変数を、前記第1のビット幅のビットと、前記第1のビット幅のビット以外のビットとに分割して、前記分割した前記第1のビット幅のビットに、前記第1のレジスタを割り当て、前記第2のレジスタの割り当ては、前記分割した前記第1のビット幅のビット以外のビットに、前記第2のレジスタを割り当てる、請求項14に記載の動作合成プログラム。前記mは2である、請求項14または15に記載の動作合成プログラム。変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成するスケジューリング部と、前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成するライフタイム生成部と、前記ライフタイム情報が時間軸上で重ならないm個mは2以上の整数の変数を選択する変数選択部と、前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当てるレジスタ割り当て部と、前記第1及び第2のレジスタを有する合成回路の回路情報を出力する回路情報出力部と、を備える動作合成装置。前記レジスタ割り当て部は、前記その他の変数を、前記第1のビット幅のビットと、前記第1のビット幅のビット以外のビットとに分割して、前記分割した前記第1のビット幅のビットに、前記第1のレジスタを割り当て、前記分割した前記第1のビット幅のビット以外のビットに、前記第2のレジスタを割り当てる、請求項17に記載の動作合成装置。前記mは2である、請求項17または18に記載の動作合成装置。上記のように、特許文献1や2には、従来の動作合成方法において、アロケーションを行う際に、レジスタを共有化することが記載されている。特に、図31で示したように、従来の動作合成方法では、ビット幅の違う変数に対してもレジスタの共有化が可能となるよう、ビット幅の小さい変数の上位ビットにデータを補って、ビット幅の大きい変数に揃えた上で、レジスタの共有化を行っていた。すなわち、図31aでは、ビット幅の大きな変数b1に合わせて、ビット幅の小さな変数a1の上位ビットを符号拡張し、また、図31bでは、ビット幅の大きな変数a2に合わせて、ビット幅の小さな変数b2の上位ビットを0で埋めて、レジスタを共有化していた。そうすると、この共有化されたレジスタでは、ビット幅の小さな変数から見ると、未使用の無駄なビットが存在することになる。したがって、従来の動作合成方法では、ビット幅の大きい変数に合わせたビット幅でレジスタを共有化するため、ビット幅の小さい変数にとって未使用のビットが発生することから、共有化するレジスタのビットが無駄に大きいという問題があった。本発明に係る動作合成方法は、変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、前記ライフタイム情報が時間軸上で重ならないm個mは2以上の整数の変数を選択し、前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、前記第1及び第2のレジスタを有する合成回路の回路情報を出力するものである。本発明に係る動作合成方法は、変数の演算動作を含む動作記述情報から、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、前記スケジューリングされたデータフローグラフ情報から、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、前記ライフタイム情報が時間軸上で重ならない、第1のビット幅として定義された第1の変数と、第2の変数とを選択し、前記第1の変数と、前記第2の変数に含まれる前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記第2の変数に含まれる前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、前記第1及び第2のレジスタを有する合成回路の回路情報を出力するものである。本発明に係る動作合成プログラムは、コンピュータに動作合成処理を実行させる動作合成プログラムであって、前記動作合成処理は、変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、前記ライフタイム情報が時間軸上で重ならないm個mは2以上の整数の変数を選択し、前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、前記第1及び第2のレジスタを有する合成回路の回路情報を出力するものである。本発明に係る動作合成装置は、変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成するスケジューリング部と、前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成するライフタイム生成部と、前記ライフタイム情報が時間軸上で重ならないm個mは2以上の整数の変数を選択する変数選択部と、前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当てるレジスタ割り当て部と、前記第1及び第2のレジスタを有する合成回路の回路情報を出力する回路情報出力部と、を備えるものである。本発明では、第1のビット幅の第1の変数と、その他の変数第2の変数のうちの第1のビット幅のビットとに、レジスタを割り当てて共有化するため、共有化するレジスタのビット幅を小さくすることができる。本発明によれば、共有化するレジスタのビット幅を小さくすることが可能な動作合成方法、動作合成プログラム及び動作合成装置を提供することができる。本発明の実施の形態1以下、図面を参照して本発明の実施の形態1について説明する。図1は、本発明の実施の形態1に係る動作合成装置が実現されるコンピュータシステムのハードウェア構成を示している。なお、後述する他の実施の形態においても、図1と同様のコンピュータシステムにより動作合成装置が実現される。このコンピュータシステム100は、パーソナルコンピュータやワークステーション等の情報処理装置である。図に示されるように、コンピュータシステム100は、CPU102、メインメモリ103、ハードディスク104等を内蔵した本体部101、本体部101からの指示により画面表示を行う表示装置105、このコンピュータシステムにユーザの指示や文字情報を入力するためのキーボード106、および表示装置の画面上における任意の位置を指定し、その位置に表示されていたアイコン等に応じた指示を入力するマウス107から構成される。なお、CPU102及びメインメモリ103は、プログラムを実行し各部を制御する制御部の一例であり、ハードディスク104は、プログラム等を記憶する記憶部の一例である。制御部と記憶部は、一つの装置でもよいし、複数の装置であってもよい。例えば、複数の制御装置や複数の記憶装置に分散されていてもよい。また、表示装置105は、ユーザに対し種々の出力を行う出力装置の一例であり、キーボード106、マウス107は、ユーザが種々の入力操作を行う入力装置の一例である。ハードディスク104には、本実施形態に係る動作合成装置を実現するための動作合成プログラム108、動作合成処理等に必要なその他の各種データ109が格納される。動作合成プログラム108は、図4,図5に後述する動作合成方法の処理を実行するためのプログラムであり、各種データ109は、図2に後述する各記憶部に記憶されるデータである。コンピュータシステム100が、動作合成プログラム108および各種データ109をメインメモリ103にロードし、CPU102はメインメモリ103にロードされた動作合成プログラム108を実行することで、本実施形態の動作合成方法の各処理が実施されて、動作合成装置図2、図3に後述する機能構成が実現される。なお、コンピュータシステム100の基本動作は、ハードディスク104に格納された基本プログラムであるオペレーティングシステムOSを介して実行される。図2は、本発明の実施の形態1に係る動作合成装置の機能構成を示している。この動作合成装置200は、コンピュータシステム100上で動作合成プログラムが実行されて実現される。図に示されるように、この動作合成装置200は、動作記述情報記憶部201、パーズ処理部202、内部表現情報記憶部203、スケジューリング処理部204、アロケーション処理部205、制御回路用テーブル及びネットリスト生成部206、制御回路用テーブル記憶部207、ネットリスト記憶部208、RTL出力部209、RTL情報記憶部210を備えている。動作記述情報記憶部201は、動作記述言語で記述された動作記述を表すデータである動作記述情報を記憶する。動作記述は、C言語をハードウェア記述のために拡張したSystemC等の動作記述言語により記述される。例えば、動作記述情報は、ユーザによりキーボード106等を介して入力されて、動作記述情報記憶部201に記憶される。パーズ処理部202は、動作記述情報記憶部201に記憶された動作記述情報に基づいて、動作記述情報をパーズ変換して、内部表現であるCDFGを表す内部表現情報を生成する。内部表現情報記憶部203は、パーズ処理部202が生成した内部表現情報を記憶する。また、内部表現情報記憶部203は、内部表現情報に対しスケジューリング処理部204及びアロケーション処理部205が処理した結果である、スケジューリング後のCDFGやアロケーション後のCDFGのデータも記憶される。スケジューリング処理部204は、パーズ処理部202が生成した内部表現情報に基づいて、この内部表現情報に対し各演算が実行される制御ステップをスケジューリングして、スケジューリング後の内部表現情報を生成する。アロケーション処理部205は、スケジューリング処理部204が生成したスケジューリング後の内部表現情報に基づいて、この内部表現情報に対し機能ユニット、記憶ユニット、通信ユニットのアロケーションを行って、アロケーション後の内部表現情報を生成する。また、アロケーション処理部205は、加算器等の機能ユニットをアロケーションする機能ユニットアロケーション部205a、レジスタ等の記憶ユニットをアロケーションする記憶ユニットアロケーション部205b、マルチプレクサ等の通信ユニットをアロケーションする通信ユニットアロケーション部205cを有している。制御回路用テーブル及びネットリスト生成部206は、スケジューリング処理部204及びアロケーション処理部205が生成したスケジューリング及びアロケーション後の内部表現情報に基づいて、この内部表現情報から制御回路の制御対象と制御タイミング等を特定して制御回路用テーブルを生成し、かつ、この内部表現情報からデータパスの各回路素子と接続関係を特定してネットリストを生成する。制御回路用テーブル記憶部207は、制御回路用テーブル及びデータパスのネットリスト生成部206が生成した制御回路用テーブルを記憶する。ネットリスト記憶部208は、御回路用テーブル及びデータパスのネットリスト生成部206が生成したネットリストを記憶する。RTL出力部209は、制御回路用テーブル及びネットリスト生成部206が生成した制御回路用テーブルとデータパスのネットリストとに基づいて、制御回路用テーブルに応じた制御回路とネットリストのデータパスとを合成した合成回路のRTL情報を生成し、生成したRTL情報を出力する。RTL情報記憶部210は、RTL出力部209が出力したRTL情報を記憶する。RLT情報は、VHDL等のハードウェア記述言語HardwareDescriptionLanguageにより記述されたRTLのデータである。図3は、本発明の実施の形態1に係る記憶ユニットアロケーション部の機能構成を示している。この記憶ユニットアロケーション部205bは、図2のアロケーション処理部205に含まれている。図に示されるように、記憶ユニットアロケーション部205bは、ライフタイム計算部221、変数選択部222、ビット幅検出部223、符号拡張部224、変数分割部225、レジスタ割り当て部226を備えている。ライフタイム計算部221は、スケジューリング処理部204がスケジューリングしたスケジューリング後の内部表現情報DCFGに基づいて、各制御ステップで使用される変数を求め、変数ごとにライフタイムを計算する。変数選択部222は、ライフタイム計算部221が計算したライフタイムに基づいて、各変数のライフタイムが時間軸上制御ステップで重なっているかどうか判定し、ライフタイムが重ならない2つの変数を選択する。ビット幅検出部223は、変数選択部222が選択した2つの変数について、ビット幅を検出し、2つのビット幅が異なるかどうか判定する。また、ビット幅検出部223は、符号拡張部224が符号を拡張した変数についても、ビット幅が異なるかどうか判定する。符号拡張部224は、ビット幅検出部223により2つの変数のビット幅が異なると判定された場合、ビット幅が小さい変数を必要最小限に符号を拡張する。変数分割部225は、ビット幅検出部223により2つの変数のビット幅が異なると判定された場合、ビット幅が大きい変数を、ビット幅が小さい変数の幅に合わせて上位ビットと下位ビットにビット分割する。レジスタ割り当て部226は、ビット幅検出部223により2つの変数のビット幅が同じであると判定された場合、この2つの変数に同じレジスタを割り当てる。また、レジスタ割り当て部226は、変数分割部225が分割した下位ビットと、ビット幅の小さい変数とに同じレジスタを割り当て、変数分割部225が分割した残りの上位ビットに、別のレジスタを割り当てる。以下に、本発明の実施の形態1における、記憶ユニットのアロケーション方法を含む動作合成方法の動作について説明する。まず、図4及び図5のフローチャートを用いて動作合成方法の流れを説明した後、図6~図16を用いて動作合成方法の具体例について説明する。図4に示すように、本実施形態の動作合成方法S200では、まず、パーズ処理部202は、入力された動作記述のデータである動作記述情報をパーズして、CDFGのデータである内部表現情報を生成するS201。次いで、スケジューリング処理部204は、S201で生成された内部表現情報に対しスケジューリングを行って、スケジューリング後の内部表現情報を生成するS202。次いで、アロケーション処理部205が、S202で生成されたスケジューリング後の内部表現情報に対しアロケーションを行って、アロケーション後のCDFGが生成されるS203~S205。すなわち、機能ユニットアロケーション部205aは、内部表現情報に対し加算器等の機能ユニットを割り当てS203、記憶ユニットアロケーション部205bは、内部表現情報に対しレジスタ等の記憶ユニットを割り当てS204、通信ユニットアロケーション部205cは、内部表現情報に対しマルチプレクサ等の通信ユニットのアロケーションを行うS205。なお、機能ユニット、記憶ユニット、通信ユニットのアロケーションは、互いに関連しているため、アロケーションの順序は適宜変更される。例えば、記憶ユニットのアロケーションでレジスタを共有化すると、レジスタの構成が変わるため、機能ユニットや通信ユニットの割り当ても変更される。次いで、制御回路用テーブル及びネットリスト生成部206は、S202~S205で生成されたスケジューリング及びアロケーション後の内部表現情報を用いて、制御回路用テーブル及びデータパスのネットリストを生成するS206。次いで、RTL出力部209は、S206で生成された制御回路用テーブル及びデータパスのネットリストを用いて、制御回路とデータパスを合成した合成回路のRTL情報を出力しS207、動作合成処理が終了するRTLを出力するS207。また、図5に示されるように、記憶ユニットのアロケーション処理S204では、まず、ライフタイム計算部221は、スケジューリングされたCDFG内部表現上で状態を横切る各変数についてライフタイムを計算するS301。次いで、変数選択部222は、S301でライフタイムを計算した複数の変数のうち、ライフタイムの重ならない2つの変数に着目するS302。次いで、ビット幅検出部223は、S302で着目した2つの変数のビット幅が異なるかどうか判定するS303。S303において、ビット幅が異なると判定された場合、符号拡張部224は、ビット幅が小さい変数を、必要最小限に符号拡張するS304。さらに、ビット幅検出部223は、S304で符号拡張した2つの変数のビット幅が異なるかどうか判定するS305。なお、後述のように動作記述情報には、各変数のビット幅が予め定義されている。この予め定義されたビット幅を、そのまま利用できる場合はS304の符号拡張は不要であり、S305の判定も不要である。たとえば、ビット幅が小さい変数が入力される演算について、入力と出力とのビット幅が同じである場合は、符号拡張が0である。すなわちビット幅の拡張はない。このような場合であって、かつ、S303で共有される変数のビット幅が違うケースにあっては、S304、S305は不要であり、ビット削減が可能となる。また、予め定義されたビット幅を、そのまま利用できない場合にS304の符号拡張を行って、対象の変数のビット幅を再度定義し、S305の判定が行われる。すなわち、S303では、予め定義された変数のビット幅を比較しており、S305では、符号拡張により定義された変数のビット幅を比較している。S305において、符号拡張後にビット幅が異なると判定された場合、変数分割部225は、ビット幅が大きい変数を、ビット幅が小さい変数の幅に合わせて上位ビットと下位ビットにビット分割するS306。次いで、レジスタ割り当て部226は、ビット幅が小さい変数とビット幅が大きい変数の分割後の下位ビットとを同じレジスタに割り当てるS307。次いで、レジスタ割り当て部226は、ビット幅が大きい変数の分割後の上位ビットを別のレジスタに割り当てるS308。S303またはS305において、2つの変数のビット幅が同じと判定された場合、レジスタ割り当て部226は、着目した2つの変数を同じレジスタに割り当てるS309。S308またはS309のレジスタ割り当ての後、レジスタ割り当て部226は、さらなるレジスタ共有化の余地があるかどうか判定するS310。S310において、レジスタ共有化の余地があると判定した場合、S302以降の処理を繰り返し、さらにレジスタの共有化を行う。また、S310において、レジスタ共有化の余地がないと判定した場合、残った変数があれば全てレジスタに割り当てて、処理を終了するS311。以下、図6~図16の動作合成方法の具体例について、図4及び図5の各ステップに対応付けて説明する。まず、動作合成方法S200の処理が開始されると、図6に示すようにパーズが行われるS201。図6aは動作記述の例を示し、図6bは、図6aの動作記述をパーズして生成されたCDFGを示している。図6aのように、動作記述300は、変数宣言記述部301と演算記述部302を有している。なお、動作記述情報は、動作記述の文字列からなるテキストデータである。変数宣言記述部301では、各行に変数の型、変数のビット幅、変数名の順に記述され、変数の符号情報の有無と、ビット幅が定義されている。なお、変数は、その取りうる値を2進数表現する場合に割り当てるビット数を決める必要がある。本明細書では、このように変数の値を2進数表現するために割り当てるビット数を、ビット幅と称する。したがって、nビット幅n:整数の変数Xは、nビットの2進数表現で現す変数Xの意味である。このように、nビット幅が割り当てられた変数Xのことを、nビット幅として定義された変数Xと称する。この例では、変数x4、y4を4ビットの符号無し整数uint型の変数、変数x8を8ビットの符号無し整数の変数、変数z5を5ビットの符号無し整数の変数、変数z9を9ビットの符号無し整数の変数として宣言定義している。なお、同様に、符号有り整数int型の変数を宣言することも可能であり、その場合に定義するビットには、符号情報を示すビット例えば最上位ビットが含まれている。演算記述部302では、変数宣言記述部301で宣言した変数を四則演算する動作式が記載される。この例では、変数x4と変数y4を加算した結果を変数z5に入力し式302a、変数x8と変数z5を加算した結果を変数z9に入力する式302b動作が記載されている。変数宣言記述部301と演算記述部302により、4ビットの変数と4ビットの変数の加算結果を5ビットの変数に格納し、さらにその5ビットの変数と8ビットの変数の加算結果を9ビットの変数として出力する動作が表される。図6bのように、動作記述300をパーズして生成されるCDFG310は、動作記述に対応して、演算内容と演算に用いる変数とが関係付けて表される。動作記述300の演算記述部302の記述の式には、演算記号としてがあるため、加算加算器を示す記号と各変数とを接続して関連付けられる。この例では、加算1の演算が、式302aに対応しており、4ビットの変数x4と4ビットの変数y4を加算して5ビットの変数z5へ出力することを表している。そして、加算2の演算が、式302bに対応しており、5ビットの変数z5と8ビットの変数x8を加算して9ビットの変数z9へ出力することを表している。なお、ここでは符号無しの変数の例を示しているが、符号ありの変数の場合には、ビット幅を必要最小限だけ増やし、同様にCDFGを生成することができる図7は、このCDFGをデータとして記憶処理するための内部表現情報の一例を示している。この内部表現情報320は、CDFGを構成する変数や演算等のノード要素を表す構造体の集合である。構造体は、各ノードを特定するため、例えば、種類、名称、ビット幅、接続関係等のパラメータを有している。構造体は、種類に応じて、複数通りのものがある。この例では、外部入力変数、加算、中間変数、外部出力変数の4通りの構造体があり、ノード間のつながりは、構造体中に接続先や接続元を指定する領域を設けて表現する。図7の内部表現情報320は、図6のCDFG310の各ノードを表している。構造体321は変数x4、構造体322は変数y4、構造体323は加算1、構造体324は変数z5、構造体325は変数x8、構造体326は加算2、構造体327は変数z9をそれぞれ表している。図6でパーズした後、図8aに示すようにスケジューリングが行われるS202。図8aは、図6のCDFG310に対しスケジューリングを行った後のCDFG311を示している。スケジュール処理では、各演算処理の順序に従って、各演算処理を実行する制御ステップが決定される。図6abから理解できるように、変数x4と変数y4の加算の後に、変数x8と変数z5を加算する必要がある。このため、2つの加算処理を2つのステップで実行することにする。すなわち、図8aのように、2つの加算を別のステップに区切り、ステップ1において、変数x4と変数y4とを加算して変数z5へ出力する加算1の処理を実行し、次のステップ2において、変数z5と変数x8とを加算して変数z9を出力する加算2の処理を実行するようにスケジュールする。図8aでスケジューリングした後、S203~S204のアロケーションが行われ、記憶ユニットのアロケーションでは、図8bに示すようにライフタイムが計算されるS301。図8bは、図8aでスケジュールされたCDFG311の各変数のライフタイムを示すライフタイムテーブル330である。なお、ここでは、ライフタイムを示す図において、主にステップ1及びステップ2を図示し、その前後のステップについては省略しているが、実際にはステップ1及びステップ2を繰り返すことになる。ライフタイムの計算では、CDFGで表される制御ステップと演算及び変数との関係から、変数ごとに、どの制御ステップからどの制御ステップまでの期間、値を保持する必要があるかを計算する。この例では、変数x4は、ステップ1の加算1の入力として使用され、加算1の後は使用されないため、ステップ1より前のステップからステップ1までがライフタイムとなる。変数y4も同様に、変数x4と同じライフタイムとなる。変数x8は、ステップ2の加算2の入力として使用され、加算2の後は使用されないため、ステップ1からステップ2までがライフタイムとなる。変数z5は、ステップ1の加算1により値が確定して、ステップ2の加算2の入力として使用され、加算2の後は使用されないため、ステップ1からステップ2までがライフタイムとなる。変数z9は、最終的な演算結果が保持される変数であり、ここでは、状態に関係なく出力値を常に保持するものとする。したがって、変数z9は、ステップ1より前のステップから、ステップ2より後のステップまで、全期間がライフタイムとなる。図9は、このライフタイムをデータとして記憶処理するためのライフタイム情報の一例を示している。このライフタイム情報は、各変数のライフタイムを表すテーブル構造体340である。テーブル構造体340は、ライフタイムの名称、期間を特定するため、例えば、変数名、始点、終点の欄を有し、さらに、レジスタの割り当てを特定するため割当先の欄を有している。始点がNULLの場合、初期ステップ以前からライフタイムありを表しており、終点がNULLの場合、最終ステップ以後までライフタイムありを表している。割当先がNULLは、割当先レジスタが未決定を表しており、割当先レジスタが決まった場合、割当先の欄にレジスタを記憶する。ライフタイムは、連続する期間毎に記憶され、同じ変数が複数のライフタイムを有する場合には、複数のライフタイムが登録される。図9では、テーブル構造体340は、ライフタイムテーブル331に対応しており、変数x4、y4、x8、z5、z9の各ライフタイムa~fが、テーブル構造体340の各行に登録される。このテーブル構造体340では、aが変数x4の1つ目のライフタイム、bが変数x4の2つ目のライフタイム、cが変数y4のライフタイム、dが変数x8のライフタイム、eが変数z5のライフタイム、fが変数z6のライフタイムをそれぞれ表している。図8bでライフタイムを計算した後、図10aに示すように2つの変数が着目されるS302。図10aは、図8bと同じライフタイムテーブル330である。ライフタイムの始点と終点から、ライフタイムが各制御ステップで重なっているか解析する。図10aでは、まず、変数x4と変数z5でライフタイムが重ならないため、変数x4と変数z5に着目する。図10aで2つの変数x4とz5に着目した後、ビット幅の比較が行われS303、変数x4とz5はビット幅が異なるため、ビット幅が小さい変数x4を必要最小限に符号拡張して5ビットとするS304。この符号拡張では、着目した変数が入力となっている演算に着目し、その演算の出力のビット幅に合わせて符号拡張する。上記のように、演算の入力と出力のビット幅が同じ場合、符号拡張は不要であり、演算の入力と出力のビット幅が異なる場合、出力のビット幅に合わせて符号拡張したビット幅を変数のビット幅として再定義する。例えば、4ビットの変数x4が、出力ビット幅5ビットの加算演算の入力となっている場合、出力のビット幅5ビットに合わせるため、4ビットの変数x4を1ビット符号拡張し、5ビットにする。例えば、5ビットの変数z5が、出力ビット幅9ビットの加算演算の入力となっている場合、出力のビット幅9ビットに合わせるため、5ビットの変数z5を4ビット符号拡張し、9ビットにする。着目した変数と異なる入力側には、一般に任意の値が入る可能性がある。それを考慮し、加算、減算の場合は一方の入力に0が入るケース、乗算の場合は一方の入力に1が入るケースをそれぞれ考えた場合、着目した変数の値が丸々、演算の出力に反映されることになる。このとき、もし、演算の出力のビット幅よりも、着目した変数のビット幅の方が小さいと、足りない上位ビットの値は未確定であり、RTL生成後の接続関係によって不安定な値ゴミが入る可能性があるため、正しい演算結果が得られない。このため、本実施形態では、予め、必要ビット数の符号拡張を行うことで、正確な動作を可能にしている。図10aで、変数x4を符号拡張した後、さらにビット幅の比較が行われS305、拡張した変数x4と変数z5は同じ5ビットであるため、図10bに示すように、着目した2つの変数に同じレジスタを割り当てるS309。図10bは、図10aのライフタイムテーブル330について、変数x4とy4にレジスタr1を割り当てたライフタイムテーブル332である。すなわち、ライフタイムが重ならず、かつ、同じビット幅の変数x4とz5を、ライフタイムテーブル上で連続するように表し、この連続する変数x4とz5に、変数x4及びz5と同じ5ビットのレジスタr1を割り当てる。図10bでレジスタr1を割り当てた後、さらなるレジスタの共有化の余地があるかどうか判定しS310、ライフタイムの重ならない変数があるため、図11aに示すようにさらに2つの変数が着目されるS302。図11aは、図10bと同じライフタイムテーブル332である。図11aでは、変数y4と変数x8でライフタイムが重ならないため、変数y4と変数x8に着目する。図11aで2つの変数y4とx8に着目した後、ビット幅の比較が行われS303、ビット幅が小さい変数x4を必要最小限に符号拡張して5ビットとするS304。さらにビット幅の比較が行われS305、拡張した変数y4は5ビット、変数x8は8ビットであり、ビット幅が異なるため、図11bに示すように、大きいビット幅の変数x8を分割しS306、小さいビット幅の変数y4と分割したx8の下位ビットとに同じレジスタr2を割り当てS307、分割したx8の上位ビットに別のレジスタr3を割り当てるS308。図11bは、図11aのライフタイムテーブル332について、変数y4とx8にレジスタr2、r3を割り当てたライフタイムテーブル333である。すなわち、着目した変数y4とx8は、ライフタイムが重ならず、かつ、ビット幅が異なるため、大きいビット幅の変数x8を、上位3ビットと下位5ビットに分割する。小さいビット幅の変数y4と変数x8の下位5ビットを、ライフタイムテーブル上で連続するように表し、この連続する変数y4と変数x8の下位ビットに、5ビットのレジスタr2を割り当てる。さらに、変数x8の上位ビットにレジスタr3を割り当てる。図11bでレジスタr2、r3を割り当てた後、さらなるレジスタの共有化余地があるかどうか判定するS310。ライフタイムの重ならない変数は無いため、図12aに示すように、残りの変数z9に着目し、図12bに示すように、残りの変数z9に9ビットのレジスタr4を割り当てるS311。図12bのライフタイムテーブル334により、レジスタ記憶ユニットのアロケーションが完了する。このレジスタのアロケーションに合わせて、加算器機能ユニット、マルチプレクサ通信ユニットのアロケーションが行われる。これらのアロケーションが完了すると、図13に示すような、データパスのネットリストが生成されるS206。ライフタイムテーブル334により割り当てられたレジスタr1、r2、r3、r4を加算器A1で接続する。ライフタイムテーブル334の制御ステップに応じて共有のレジスタr1、r2に入力する変数を切り替えるためにマルチプレクサM1、M2を、レジスタr1、r2に接続する。また制御ステップに応じてレジスタr3、r4に入力する変数のタイミングを制御するためマルチプレクサM3、M4を、レジスタr3、r4に接続する。すなわち、図13に示すように、このデータパス400は、変数x4と加算器A1の出力である変数z5のいずれかを切り替えてレジスタr1へ出力するマルチプレクサM1、マルチプレクサM1が選択した変数を保持するレジスタr1、変数y4と変数x8の下位ビットのいずれかを切り替えてレジスタr2へ出力するマルチプレクサM2、マルチプレクサM2が選択した変数を保持するレジスタr2、変数x8の上位ビットをレジスタr3へ出力するマルチプレクサM3、マルチプレクサM3を介した変数x8の上位ビットを保持するレジスタr3、レジスタr1の値と、レジスタr2及びr3の値とを加算する加算器A1、加算器A1の出力をレジスタr4へ出力するマルチプレクサM4、マルチプレクサM4を介した加算器A1の出力を変数z9として保持し出力するレジスタr4を備えている。図13のデータパスのネットリストが生成され、さらに、このデータパスを制御ステップに応じて制御する制御回路用テーブルが生成されるS206。例えば、図12のライフタイムテーブル334から、各制御ステップで使用するレジスタ及び変数が決定するため、これに合わせてマルチプレクサを制御するための制御回路用テーブルを生成する。例えば、制御回路用テーブルには、制御ステップと、そのタイミングで制御されるマルチプレクサとが対応付けられている。そして、図13のデータパスのネットリストと制御回路用テーブルが生成されると、図14に示すような、データパス400と制御回路410を合成した合成回路420のRTLが出力されるS207。制御回路用テーブルに基づいて、制御ステップ1,2に対応する制御信号s1、s2を出力する制御回路410を生成する。そして、この制御信号s1、s2をデータパス400のマルチプレクサに供給するように接続する。さらに、制御回路410及びデータパス400にクロックを供給する。すなわち、図14に示すように、この合成回路420は、データパス400と制御回路410を有している。データパス400の構成は図13と同様である。また、データパス400では、クロックが、レジスタr1、r2、r3、r4にそれぞれ供給される。さらに、制御信号s1、s2が、マルチプレクサM1、M2、M3、M4にそれぞれ供給される。制御回路410は、クロックのタイミングごとに0と1を繰り返す制御信号s2を生成するレジスタr5、制御信号s2を反転した制御信号s1を生成するインバータIN1を備えている。制御信号s1とs2により、ステップ1とステップ2が切り替えられる。例えば、制御信号s1によりステップ1が選択され、制御信号s2によりステップ2が選択される。制御信号s1が1、制御信号s2が0の場合、マルチプレクサM1が変数x4を選択してレジスタr1に保持され、マルチプレクサM2が変数y4を選択してレジスタr2に保持され、加算器A1により変数x4と変数y4が加算されて変数z5が出力される。次に、制御信号s1が0、制御信号s2が1の場合、マルチプレクサM1が変数z5を選択してレジスタr1に保持され、マルチプレクサM2が変数x8の下位5ビットを選択してレジスタr2に保持され、マルチプレクサM3が変数x8の上位3ビットを選択してレジスタr3に保持され、加算器A1により変数z5と変数x8が加算される。さらに、マルチプレクサM4が加算器A1の出力を選択してレジスタr4に保持され、加算器A1の出力結果が変数z9として出力される。図15及び図16は、図14の合成回路420をVerilog-HDLで記述したRTL記述の例である。RTLは、階層構造のモジュール単位に記述されている。例えば、RTL情報記憶部210に、RTL記述のテキストデータが格納される。この例では、まず、最上位階層であるトップのトップモジュール記述501が記述され、次に、トップモジュールの下位である制御回路の制御回路モジュール記述502が記述され、次に、トップモジュールの下位であるデータパスのデータパスモジュール記述503が記述されている。制御回路モジュール記述502は、図14の制御回路410に対応しており、データパスモジュール記述503は、図14のデータパス400に対応している。トップモジュール記述501には、データパスの入出力信号が記述され501a、制御回路の入出力信号が記述されている501b。制御回路モジュール記述502には、レジスタr5と制御信号s2の関係が記述され502a、レジスタr5の反転信号と制御信号s1の関係が記述され502b、クロックとレジスタr5の関係が記述されている502c。データパスモジュール記述503には、変数x4、y4、x8、z9のビット幅が記述され503a、レジスタr1、r2、r3、r4のビット幅が記述され503b、レジスタr1、r2、r3と加算器の関係が記述され503c、クロックとレジスタr1、r2、r3、r4の関係が記述され503d、制御信号s1、s2とレジスタr1、r2、r3、r4の関係が記述されている503e。ここで、本発明の実施の形態1に係る動作合成方法と従来の動作合成方法とを比較するために、図32を用いて、従来の動作合成方法によりレジスタをアロケーションする参考例について説明する。図32aは、図8のライフタイムテーブル330に対し、従来の動作合成方法によりレジスタを割り当てたライフタイムテーブル920を示している。従来の動作合成方法では、ライフタイムの重ならない変数であることのみがレジスタを共有化する条件である。ここでは、変数x4と変数z5とが重ならない2つの変数であり、また、変数y4と変数x8とが重ならない2つの変数である。そうすると、図32aに示すように、ライフタイムの重ならない変数に一つのレジスタを割り当てる。すなわち、変数x4と変数z5に、ビット幅が大きい変数z5に合わせた5ビットのレジスタr1を割り当てる。変数y4と変数x8に、ビット幅が大きい変数x8に合わせた8ビットのレジスタr2を割り当てる。変数z9は、共有化できないため、変数z9に合わせた9ビットのレジスタr3を割り当てる。図32bは、図32aのライフタイムテーブル920から生成されたデータパス930を示している。ライフタイムテーブル920により割り当てられたレジスタr1、r2、r3を加算器A1で接続する。ライフタイムテーブル920の制御ステップに応じて共有のレジスタr1、r2に入力する変数を切り替えるためにマルチプレクサM1、M2を、レジスタr1、r2に接続する。また制御ステップに応じてレジスタr3に入力する変数のタイミングを制御するためマルチプレクサM3を、レジスタr3に接続する。すなわち、図32bに示すように、このデータパス930は、変数x4と加算器A1の出力である変数z5のいずれかを切り替えてレジスタr1へ出力するマルチプレクサM1、マルチプレクサM1が選択した変数を保持するレジスタr1、変数y4と変数x8との入力のいずれかを切り替えてレジスタr2へ出力するマルチプレクサM2、マルチプレクサM2が選択した変数を保持するレジスタr2、レジスタr1の値とレジスタr2の値とを加算する加算器A1、加算器A1の出力をレジスタr3へ出力するマルチプレクサM3、マルチプレクサM3を介した加算器A1の出力を変数z9として保持し出力するレジスタr3を備えている。図32のように、従来の動作合成方法によって生成された回路では、ビット幅の異なる値が共有化された後は、ビット幅の大きな変数に合わせて生成されたレジスタの全ビットをアクセスする回路構造となる。このため、下位ビットのみアクセスして演算を行えばよいタイミングにおいても、意味のない上位ビットのために無駄な電力を消費するという問題があった。例えば、図32の回路では、4ビットの変数x4と4ビットの変数y4との加算結果の変数z5は、5ビットのレジスタr1に格納されるため、加算器の入力の6ビット目以上は、どのような値をとっても、レジスタr1の値が変わることはない。しかしながら、変数y4の値は、8ビットに拡張された上で、8ビットの変数x8と切り替えてアクセスされるため、意味を持たない6ビット目以上のビットに対しても、切り替えが生じ、無駄な電力を消費することになる。また、図32の回路では、4ビットの変数y4の値をレジスタr2に取り込む際、5ビット目以上のビットには明示的に0が代入される記述となる。例えば、この後の処理で、レジスタr2に対してビット単位でクロックゲーティング回路を構成したとしても、変数y4の値をレジスタr2に取り込むタイミングでも6ビット目以上にも代入がなされているため、クロックゲーティングの対象とはできず、電力低減の機会が減ることになる。このように、従来の動作合成方法では、ビット幅の大きい変数に合わせたビット幅でレジスタを共有化するため、ビット幅の小さい変数にとって未使用のビットが発生することから、共有化するレジスタおよびその入力を切り替えるマルチプレクサのビットが無駄に大きいという問題があった。これにより回路面積が大きくなるという問題も生じる。近年、半導体の微細化に伴い、リーク電流によるスタティックな電力消費が無視できなくなってきている。リーク電流は、回路面積が大きいほど大きくなる傾向にあるため、面積が縮小できれば、スタティックな電力消費の削減にもつながる。従来の動作合成方法では、レジスタやマルチプレクサのビットが無駄に大きくなることから、このようなスタティックな電力消費という観点でも、最適化の余地が残るものであった。また、従来の動作合成方法では、4ビットの演算の時でも、8ビットの切り替えが生じ、無駄な電力を消費することになる。すなわち、従来の動作合成方法では、ビット幅の小さい変数の値を格納する場合であっても、未使用の無駄なビットを含む、レジスタの全入力ビットを切り替えるためのマルチプレクサを生成しており、これは、切り替えのために消費されるダイナミックな電力消費を削減するという観点においても、最適化の余地が残るものであった。さらに、従来の動作合成方法では、未使用ビットにも明示的に値を代入しているため、クロックゲーティングの余地がなく、ダイナミック電力を低減することができないという問題があった。これに対し、本実施形態では、上記図12のライフタイムテーブル334のように、ビット幅の異なる変数に対しレジスタ共有化する場合、大きいビット幅の変数を分割して、小さいビット幅の変数に合わせたレジスタを割り当てて共有化し、残りのビットには別のレジスタを割り当てるようにした。これにより、図13のように、変数y4と変数x8との共有化において、ビット幅の小さい変数y4に合わせたビット幅5ビットでレジスタが共有されるため、レジスタの入力を切り替えるマルチプレクサのビット幅も、図32と比べて従来の8ビットよりも小さい5ビットにすることができる。したがって、切り替えるビット数が減る分、マルチプレクサの面積が小さくなり、それに比例してリーク電流も少なく出来るため、スタティックな電力消費を低減することができる。また、マルチプレクサの切り替え時の未使用ビットの切り替えを削減することができ、ダイナミックな消費電力を低減することができる。また、変数x8を分割して残った上位ビットの部分は、共有のレジスタとは別のレジスタr3に割り当てられる。このため、変数y4の値の取り込みタイミングとは無関係にクロックゲーティングができるようになり、ダイナミックな消費電力をより一層低減することが可能となる。本発明の実施の形態2以下、図面を参照して本発明の実施の形態2ついて説明する。図17は、本発明の実施の形態2に係る動作合成装置の機能構成を示している。図17の動作合成装置200は、図2の構成と比べて、RTL出力部のみが異なっている。その他の構成は同様である。すなわち、本実施形態の動作合成装置200は、実施の形態1のRTL出力部209に代えて、クロックゲーティング及びRTL出力部211を有している。クロックゲーティング及びRTL出力部211は、制御回路用テーブル記憶部207に記憶された制御回路用テーブルと、ネットリスト記憶部208に記憶されたデータパスのネットリストとに基づいて、クロックゲーティングを含む合成回路のRTL情報を生成し、出力する。図18は、クロックゲーティング及びRTL出力部211が生成した合成回路420の例である。図18の合成回路420は、図14の構成と比べて、制御回路410は同じ構成であり、データパス400は、マルチプレクサM3、M4に代えて、クロックゲーティングL1、L2を有している。このクロックゲーティングL1,L2は論理和回路で構成され、クロックゲーティングL1,L2は、レジスタr3、r4に供給されるクロックの変動を抑える。クロックゲーティングL1は、クロックと制御信号s2とを論理和演算してレジスタr3のクロック端子へ供給する。クロックゲーティングL2は、クロックと制御信号s1とを論理和演算してレジスタr4のクロック端子へ供給する。図19のタイミングチャートは、図18の合成回路420の動作を示している。制御信号s1、s2は、クロックごとのタイミングで0と1を交互に繰り返し、これに応じてステップ1とステップ2が繰り返される。ステップ1では、レジスタr1に変数x4が保持され、レジスタr2に変数y4が保持され、加算器A1が変数x4と変数y4とを加算し、変数z5を出力する。ステップ2では、レジスタr1に変数z5が保持され、レジスタr2に変数x8の下位ビットが保持され、レジスタr3に変数x8の上位ビットが保持され、加算器A1が変数z5と変数x8の上位ビット及び下位ビットとを加算し、変数z9を出力する。ここで、レジスタr3では、ステップ2においてのみ変数x8を使用するため、ステップ1のタイミングではクロックをゲーティングしてレジスタr3をラッチ動作させず、ステップ2のみクロックを供給してレジスタr2をラッチ動作させる。なお、図14の構成のようにクロックゲーティングしない場合には、レジスタr3は、変数x8と0とをクロック毎に交互に格納する。また、レジスタr4では、ステップ2の次のステップにおいてのみ変数z9の値が確定するため、ステップ2のタイミングではクロックをゲーティングしてレジスタr4をラッチ動作させず、ステップ2の次のステップここではステップ1のみクロックを供給してレジスタr4をラッチ動作させる。図19のように、レジスタr3、r4に供給されるクロックが半分になるため、レジスタr3、r4のダイナミックな消費電力を半分に減らすことができる。このように、本実施形態では、変数を保持するレジスタにクロックゲーティングを行うことで、消費電力を低減することができる。特に、従来、レジスタ共有によりクロックゲーティングが不可能な場合があったが、実施の形態1で説明したように、ビット幅の大きい変数を上位ビットと下位ビットに分割して、別のレジスタに割り当てているため、上位ビットのレジスタをクロックゲーティングができるようになり、消費電力を確実に低減することができる。本発明の実施の形態3以下、図面を参照して本発明の実施の形態3ついて説明する。実施の形態1では、記憶ユニットのアロケーション処理において、ライフタイムの重ならない2つの変数に着目して、レジスタの割り当てを行った。これに対し、本実施形態では、ライフタイムの重ならない2以上の変数に着目して、レジスタを割り当てる。記憶ユニットのアロケーション以外については、実施の形態1,2と同様である。図20は、本発明の実施の形態3に係る記憶ユニットのアロケーション処理S204の流れを示している。図に示されるように、まず、ライフタイム計算部221は、CDFG上で状態を横切る各変数についてライフタイムを計算しS401、変数選択部222は、ライフタイムの重ならない2つ以上の変数及びレジスタに着目するS402。次いで、ビット幅検出部223は、着目した全ての変数のビット幅が同じかどうか判定するS403。S403において、ビット幅が異なると判定された場合、変数選択部222は、着目した変数の中から2つの変数を選ぶS404。2つの変数を選んだ後は、実施の形態1と同様に、図5のS303~S308の処理を行う。すなわち、選択した2つの変数のビット幅が異なるかどうか判定しS303、ビット幅が異なる場合、ビット幅が小さい変数を必要最小限に符号拡張しS304、符号拡張した2つの変数のビット幅が異なるかどうか判定しS305、ビット幅が異なる場合、ビット幅が大きい変数をビット幅が小さい変数の幅に合わせて上位ビットと下位ビットにビット分割しS306、ビット幅が小さい変数とビット幅が大きい変数の下位ビットとを同じレジスタに割り当てS307、ビット幅が大きい変数の上位ビットを別のレジスタに割り当てるS308。S403において、着目した全ての変数のビット幅が同じ場合、S303、S305において、選択した2つの変数のビット幅が同じ場合、着目した全ての変数もしくは選択した2つの変数に、同じレジスタを割り当てるS405。S308またはS405のレジスタ割り当ての後、レジスタ割り当て部226は、割り当てたレジスタと残った変数とを着目対象とする。次いで、レジスタ割り当て部226は、共有化の余地があるかどうか判定するS407。現在着目している複数の変数において、割り当てたレジスタも含めて、共有化する余地があるかどうか判定する。S407において、共有化の余地があると判定された場合、S403以降の処理を繰り返し、さらに2つの変数を選択して共有化を行う。S407において、共有化の余地がないと判定された場合、レジスタ割り当て部226は、さらなるレジスタ共有化の余地があるかどうか判定するS408。S408において、レジスタ共有化の余地があると判定された場合、S402以降の処理を繰り返す。また、S408において、レジスタ共有化の余地がないと判定された場合、レジスタ割り当て部226は、残った変数があれば全てレジスタに割り当てて、処理を終了するS409。このように、本実施形態では、記憶ユニットのアロケーションにあたり、ライフタイムの重ならない2つ以上の変数に着目し、ビット幅が異なる場合は、2つの変数を選択してレジスタの割り当てを行うようにした。これにより、ライフタイムの重ならない変数が2つ以上ある場合でも、実施の形態1と同様にレジスタを共有化することができる。本発明の実施の形態4以下、図面を参照して本発明の実施の形態4ついて説明する。実施の形態3では、記憶ユニットアロケーション処理において、ライフタイムの重ならない2つ以上の変数に着目し、さらに2つの変数を選択してレジスタの割り当てを行った。これに対し、本実施形態では、ライフタイムの重ならない2以上の変数に着目して、その着目した2つ以上の変数に対しレジスタを割り当てる。記憶ユニットのアロケーション以外については、実施の形態1,2と同様である。図21は、本発明の実施の形態4に係る記憶ユニットのアロケーション処理S204の流れを示している。図に示されるように、まず、ライフタイム計算部221は、CDFG上で状態を横切る各変数についてライフタイムを計算しS501、変数選択部222は、ライフタイムの重ならない2つ以上の変数及びレジスタに着目するS502。次いで、ビット幅検出部223は、着目した変数が全て同じビット幅かどうか判定するS503。S503において、全ての変数のビット幅が同じではないと判定された場合、符号拡張部224は、ビット幅が最大の変数以外の変数を、必要最小限に符号拡張するS504。次いで、ビット幅検出部223は、符号拡張後の着目した変数が全て同じビット幅かどうか判定するS505。S505において、全ての変数のビット幅が同じではないと判定された場合、変数分割部225は、ビット幅が最小の変数のビット幅に合わせて、その他の変数を上位ビットと下位ビットにビット分割するS506。次いで、レジスタ割り当て部226は、ビット幅が最小の変数とその他の変数の下位ビットとを同じレジスタに割り当てるS507。次いで、レジスタ割り当て部226は、分割したその他の変数の上位ビットを新たな着目対象とするS508。その後、S505以降を繰り返し、分割した残りの変数に対し、レジスタの割り当てを行う。S503またはS505において、着目した変数が全て同じビット幅である場合、レジスタ割り当て部226は、着目した全ての変数を同じレジスタに割り当てるS509。次いで、レジスタ割り当て部226は、さらなるレジスタ共有化の余地があるかどうか判定するS510。S510において、レジスタ共有化の余地があると判定された場合、S502以降の処理を繰り返す。また、S510において、レジスタ共有化の余地がないと判定された場合、レジスタ割り当て部226は、残った変数があれば全てレジスタに割り当てて、処理を終了するS511。次に、図22~図27を用いて、本発明の実施の形態4に係る動作合成方法の具体例について説明する。まず、動作合成方法S200の処理が開始されると、図22aの動作記述600をパーズして、図22bのCDFGが生成されるS201。この動作記述600では、変数宣言記述部601に変数x4、y4、x8、z5、z9、x16、z17が定義され、演算記述部602に、これらの変数を使用した式602a、式602b、式602cが記述されている。動作記述600をパーズすると、図22bに示すように、加算1の演算が、式602aに対応しており、4ビットの変数x4と4ビットの変数y4を加算して5ビットの変数z5へ出力することを表し、加算2の演算が、式602bに対応しており、5ビットの変数z5と8ビットの変数x8を加算して9ビットの変数z9へ出力することを表し、加算3の演算が、式602cに対応しており、9ビットの変数z9と16ビットの変数x16を加算して17ビットの変数z17へ出力することを表すCDFG610が生成される。次に、図23aに示すように、図22bのCDFGに対し制御ステップに区切ってスケジューリングが行われ、スケジューリングのCDFG611が生成されるS202。この例では、ステップ1において、変数x4と変数y4とを加算して変数z5へ出力する加算1の処理を実行し、次のステップ2において、変数z5と変数x8とを加算して変数z9を出力する加算2の処理を実行し、次のステップ3において、変数z9と変数x16とを加算して変数z17を出力する加算3の処理を実行するようにスケジュールする。次に、図23aのスケジューリング後のCDFG611から、各変数のライフタイムを計算し、図23bに示すライフタイムテーブル620を生成するS501。この例では、変数x4、y4は、ステップ1より前のステップからステップ1までがライフタイムであり、変数x8、z5は、ステップ1からステップ2までがライフタイムであり、変数x16、z9は、ステップ2からステップ3までがライフタイムであり、変数z17は、全期間がライフタイムである。次に、図24aに示すように、変数x4と変数z5と変数z9とでライフタイムが重ならないため、変数x4、変数z5、変数z9に着目するS502。変数x4は4ビットであり、変数z5は5ビットであり、変数z9は9ビットであり、ビット幅が異なるため、ビット幅が最大ではない、変数x4、変数z5の変数を最小限に符号拡張し5ビットと9ビットとするS504。ビット幅最小の変数x4のビット幅5に合わせて、変数z5を上位4ビットと下位5ビットに分割し、変数z9を上位4ビットと下位5ビットに分割するS506。そして、図24bに示されるように、ビット幅最小の変数x4と、変数z5の下位ビット、変数z9の下位ビットに同じレジスタr1を割り当てるS507。さらに、分割した変数z5の上位4ビットと、変数z9の上位4ビットを着目対象としS511、両者はビットが同じであるため、変数z5の上位4ビットと、変数z9の上位4ビットに同じレジスタr2を割り当てるS509。変数x4、変数z5、変数z9にレジスタを割り当てた後、図25aに示すように、変数y4と変数x8と変数x16とでライフタイムが重ならず、レジスタ共有化の余地があるため、変数y4、変数x8、変数x16に着目するS502。変数y4は4ビットであり、変数x8は8ビットであり、変数x16は16ビットであり、ビット幅が異なるため、ビット幅が最大ではない、変数y4、変数x8の変数を最小限に符号拡張し5ビットと9ビットとするS504。そして、ビット幅最小の変数y4のビット幅5に合わせて、変数x8を上位4ビットと下位5ビットに分割し、変数x16を上位11ビットと下位5ビットに分割するS506。図25bのように、ビット幅最小の変数y4と、変数x8の下位ビット、変数x16の下位ビットに同じレジスタr3を割り当てるS507。さらに、分割した変数x8の上位4ビットと、変数x15の上位11ビットを着目対象とするS511。ビット幅の小さい変数x8の4ビットに合わせて、変数x15の上位11ビットを上位7ビットと下位4ビットに分割するS506。図25bのように、ビット幅の小さい変数x8の上位4ビットと、変数x16の下位ビットに同じレジスタr4を割り当てるS507。さらに、残りの変数x16の上位7ビットにレジスタr5を割り当てる。次に、変数z17が残っているが、レジスタ共有化の余地がないため、図26aに示すように変数z17に着目し、図26bに示すように、変数z17にレジスタr6を割り当てS511、処理が終了する。図27は、図26のライフタイムテーブル623から生成されたデータパス700の構成を示している。データパス700では、ライフタイムテーブル623により割り当てられたレジスタr1~r6を加算器A1で接続する。ライフタイムテーブル623の制御ステップに応じて共有のレジスタr1~r4に入力する変数を切り替えるためにマルチプレクサM1~M4を、レジスタr1~r4に接続する。また制御ステップに応じてレジスタr5、r6に入力する変数のタイミングを制御するためマルチプレクサM5、M6を、レジスタr5、r6に接続する。すなわち、このデータパス700は、変数x4と、加算器A1の出力である変数z5と、加算器A1の出力である変数z9の下位ビットのいずれかを切り替えて出力するマルチプレクサM1、マルチプレクサM1が選択した変数を保持するレジスタr1、変数z5の上位ビット4ビットの0と、変数z9の上位ビットのいずれかを切り替えて出力するマルチプレクサM2、マルチプレクサM2が選択した変数を保持するレジスタr2、変数y4と、変数x8の下位ビットと、変数x16の下位ビットのいずれかを切り替えて出力するマルチプレクサM3、マルチプレクサM3が選択した変数を保持するレジスタr3、変数x8の上位ビットと、変数x16の中間ビットのいずれかを切り替えて出力するマルチプレクサM4、マルチプレクサM4が選択した変数を保持するレジスタr4、変数x16の上位ビットをレジスタr5へ出力するマルチプレクサM5、マルチプレクサM5を介した変数x16の上位ビットを保持するレジスタr5、レジスタr1及びr2の値と、レジスタr3、r4及びr5の値とを加算する加算器A1、加算器A1の出力をレジスタr6へ出力するマルチプレクサM6、マルチプレクサM6を介した加算器A1の出力を変数z9として保持するレジスタr6を備えている。このように、本実施形態では、記憶ユニットのアロケーションにあたり、ライフタイムの重ならない2つ以上の変数に着目し、最小のビット幅の変数に合わせて複数の変数を分割してレジスタの割り当てを行うようにした。これにより、ライフタイムの重ならない変数が2つ以上ある場合でも、実施の形態1と同様に共有化するレジスタのビット幅を小さくすることができる。また、実施の形態1と同様に、マルチプレクサの面積が小さくなり、スタティック電力を低減することができる。さらに、切り替え時のダイナミックな消費電力を低減することができる。また、クロックゲーティングできる余地が増え、さらに消費電力を低減することが可能となる。なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。"