説明

動作合成方法、動作合成プログラム及び動作合成装置

【課題】動作合成により共有化するレジスタのビット幅を小さくすることが可能な動作合成方法、動作合成プログラム及び動作合成装置を提供する。
【解決手段】動作合成方法は、動作記述情報に基づいてスケジューリングしたCDFGを生成し、スケジューリングされたCDFGに基づいてライフタイムを変数毎に生成し(S301)、ライフタイム情報が時間軸上で重ならないm個の変数を選択し(S302)、第1のビット幅の第1の変数と、その他の変数内の第1のビット幅のビットとに、第1のレジスタを割り当て(S307)、その他の変数内の第1のビット幅のビット以外のビットに、第2のレジスタを割り当て(S308)、第1及び第2のレジスタを有する合成回路の回路情報を出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、動作合成方法、動作合成プログラム及び動作合成装置に関し、特に、変数の演算動作が記述された動作記述を動作合成する動作合成方法、動作合成プログラム及び動作合成装置に関する。
【背景技術】
【0002】
近年、LSIの大規模化が進んでおり、より効率の良い設計方法や設計ツールが望まれている。そこで、LSIの機能設計において、動作レベルの記述である動作記述を動作合成し、レジスタ転送レベルの記述であるRTL記述を生成する手法が知られている。動作合成では、C言語と同様の言語により回路素子を意識せずに動作のみを記述するため、回路設計を容易にし、設計期間を短縮することができる。
【0003】
従来の動作合成方法として、非特許文献1に記載の方法が知られている。図28は、非特許文献1に記載された従来の動作合成方法を示している。
【0004】
図に示されるように、従来の動作合成方法900では、回路の動作を記述した動作記述が入力され(901)、HDLコンパイラが、この動作記述を解析し(902)、内部表現に変換される(903)。この内部表現としては,動作記述に現れたデータの流れ(データフロー)と各演算の実行順序の制御の流れ(コントロールフロー)を表した,コントロールデータフローグラフ(CDFG : Control Data Flow Graph)が用いられる。
【0005】
生成された内部表現に対して、スケジューリングが行われる(904)。スケジューリングでは、動作記述中の各演算やデータ転送を実行する具体的な制御ステップを決定する。また、スケジューリングされた内部表現に対しアロケーションが行われる(905)。アロケーションでは所望の動作を実現する回路構成を決定する。
【0006】
スケジューリングとアロケーションが終了すると,レジスタ,機能ユニット,マルチプレクサ等を回路要素としたデータパスのネットリストと(908),各クロックで実行する動作を制御する信号と順次実行させるための状態遷移の情報を示す制御回路用テーブル(907)が生成される(906)。
【0007】
図29は、非特許文献1に記載された従来の動作合成方法におけるアロケーション処理の例を示している。
【0008】
従来の動作合成方法では、動作記述に基づいてCDFGが生成され、スケジューリングが行われると、図29(a)のようなスケジューリング後のCDFGが生成される。そうすると、従来の動作合成方法では、アロケーションにより、変数a,b,c,d,eにレジスタが割り当てられ、加算o1、o2に加算器が割り当てられる。
【0009】
一般的に、アロケーションでは、回路面積を減らす目的で、複数の変数を同じレジスタに割り当てて使用する「レジスタの共有化」が行われている。図29(b)(c)は、レジスタを共有化してアロケーションを行った例である。
【0010】
図29(a)の例では、変数a及び変数bと加算器は同時に使用され、変数d及び変数cと加算器は同時に使用されるが、その他の組み合わせは同時に使用されない。このため、図29(b)では、変数a、d、eでレジスタr1を共有し、変数bにレジスタr2、変数cにレジスタr3を割り当て、共有した加算器の入力の値を選択するためにマルチプレクサを割り当てている。
【0011】
また、図29(c)では、変数a、eでレジスタr1を共有し、変数b、dでレジスタr2を共有し、変数cにレジスタr3を割り当て、共有したレジスタと加算器の入力の値を選択するために2つのマルチプレクサを割り当てている。
【0012】
図30は、非特許文献1に記載された従来の動作合成方法におけるレジスタの共有化の例を示している。図30(a)は、図29(a)と同様にスケジューリング後のCDFGである。
【0013】
スケジューリング後のCDFGが生成されると、従来の動作合成方法では、図30(b)のように各変数のライフタイムを計算する。ライフタイムとは、変数に値が書き込まれてから使用されるまでの期間であり、変数に値を保持する必要がある期間である。
【0014】
図30(b)の例では、変数aはステップ1より前からステップ2まで、変数bはステップ1より前からステップ1まで、変数cはステップ1からステップ2まで、変数dはステップ2からその後までが、それぞれライフタイムである。ライフタイムが重ならない変数は同じレジスタに割り当てて共有化することが可能である。
【0015】
従来の動作合成方法では、図30(c)のように、変数a,b,c,dをそのライフタイムの開始時刻順にソートし,最初の変数を1番目のレジスタに割り当てる。以下、変数を順に調べながら、ライフタイムが重ならない限りそのレジスタに変数を割り当てていく。割り当てられる変数がなくなると新しいレジスタを用意し,すべての変数が割り当てられるまで繰り返す。図30(c)の例では、まず、変数aと変数dとでライフタイムが重ならないため、レジスタr1を割り当てて共有化し、変数bと変数cとでライフタイムが重ならないため、レジスタr2を割り当てて共有化している。
【0016】
また、レジスタの共有に関する従来の動作合成方法として、特許文献1が知られている。図31は、特許文献1に記載された従来の動作合成方法におけるレジスタの共有化の例を示している。
【0017】
図31は、変数a1の値をレジスタc1に転送し、変数b1の値をレジスタc2に転送する場合に、c1とc2とを一つのレジスタ(5ビット)で共有化する例である。
【0018】
図31(a)では、2ビットのsignedの変数a1、及び4ビットのsignedの変数b1を共通のレジスタ(5ビット)に転送する場合、転送先のレジスタのビット数に対して不足するビット数を変数a1及びb1にそれぞれ付与し、マルチプレクサ(MUX)によってレジスタに転送する変数を切り替えている。ここで、変数a1及びb1はそれぞれ0ビット目が符号ビットであるため、不足するビットには符号ビットと同じデータを挿入している。
【0019】
図31(b)では、4ビットのunsignedの変数a2、及び2ビットのunsignedの変数b2を共通のレジスタ(5ビット)に転送する場合、signedの変数の場合と同様に、転送先のレジスタのビット数に対して不足するビット数を変数a2及びb2にそれぞれ付与し、マルチプレクサ(MUX)によってレジスタに転送する変数を切り替えている。ここで、変数a2及びb2はそれぞれ符号ビットを持たないため、不足するビットにはデータ"0"を挿入している。
【0020】
なお、従来の動作合成方法に関連する技術として特許文献2も知られている。しかし、特許文献2は、動作合成の結果を検証する検証方法の技術であり、動作合成方法の具体的な内容については記載されていない。
【先行技術文献】
【非特許文献】
【0021】
【非特許文献1】松永裕介、"高位レベル合成"、インターネット<URL:http://www.c.csce.kyushu-u.ac.jp/~matsunaga/lecture/lsicad/pdf/Lecture06.pdf>
【特許文献】
【0022】
【特許文献1】特許第2861994号公報
【特許文献2】特開2011−34517号公報
【発明の概要】
【発明が解決しようとする課題】
【0023】
上記のように、特許文献1や2には、従来の動作合成方法において、アロケーションを行う際に、レジスタを共有化することが記載されている。
【0024】
特に、図31で示したように、従来の動作合成方法では、ビット幅の違う変数に対してもレジスタの共有化が可能となるよう、ビット幅の小さい変数の上位ビットにデータを補って、ビット幅の大きい変数に揃えた上で、レジスタの共有化を行っていた。すなわち、図31(a)では、ビット幅の大きな変数b1に合わせて、ビット幅の小さな変数a1の上位ビットを符号拡張し、また、図31(b)では、ビット幅の大きな変数a2に合わせて、ビット幅の小さな変数b2の上位ビットを"0"で埋めて、レジスタを共有化していた。
【0025】
そうすると、この共有化されたレジスタでは、ビット幅の小さな変数から見ると、未使用の無駄なビットが存在することになる。
【0026】
したがって、従来の動作合成方法では、ビット幅の大きい変数に合わせたビット幅でレジスタを共有化するため、ビット幅の小さい変数にとって未使用のビットが発生することから、共有化するレジスタのビットが無駄に大きいという問題があった。
【課題を解決するための手段】
【0027】
本発明に係る動作合成方法は、変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、前記ライフタイム情報が時間軸上で重ならないm個(mは2以上の整数)の変数を選択し、前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、前記第1及び第2のレジスタを有する合成回路の回路情報を出力するものである。
【0028】
本発明に係る動作合成方法は、変数の演算動作を含む動作記述情報から、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、前記スケジューリングされたデータフローグラフ情報から、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、前記ライフタイム情報が時間軸上で重ならない、第1のビット幅として定義された第1の変数と、第2の変数とを選択し、前記第1の変数と、前記第2の変数に含まれる前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記第2の変数に含まれる前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、前記第1及び第2のレジスタを有する合成回路の回路情報を出力するものである。
【0029】
本発明に係る動作合成プログラムは、コンピュータに動作合成処理を実行させる動作合成プログラムであって、前記動作合成処理は、変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、前記ライフタイム情報が時間軸上で重ならないm個(mは2以上の整数)の変数を選択し、前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、前記第1及び第2のレジスタを有する合成回路の回路情報を出力するものである。
【0030】
本発明に係る動作合成装置は、変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成するスケジューリング部と、前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成するライフタイム生成部と、前記ライフタイム情報が時間軸上で重ならないm個(mは2以上の整数)の変数を選択する変数選択部と、前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当てるレジスタ割り当て部と、前記第1及び第2のレジスタを有する合成回路の回路情報を出力する回路情報出力部と、を備えるものである。
【0031】
本発明では、第1のビット幅の第1の変数と、その他の変数(第2の変数)のうちの第1のビット幅のビットとに、レジスタを割り当てて共有化するため、共有化するレジスタのビット幅を小さくすることができる。
【発明の効果】
【0032】
本発明によれば、共有化するレジスタのビット幅を小さくすることが可能な動作合成方法、動作合成プログラム及び動作合成装置を提供することができる。
【図面の簡単な説明】
【0033】
【図1】本発明の実施の形態1に係る動作合成装置を実現するためのコンピュータシステムのハードウェア構成を示す構成図である。
【図2】本発明の実施の形態1に係る動作合成装置の機能構成を示すブロック図である。
【図3】本発明の実施の形態1に係る記憶ユニットアロケーション部の機能構成を示すブロック図である。
【図4】本発明の実施の形態1に係る動作合成方法の流れを示すフローチャートである。
【図5】本発明の実施の形態1に係る記憶ユニットのアロケーション方法の流れを示すフローチャートである。
【図6】本発明の実施の形態1に係る動作合成方法を説明するための具体例を示す図である。
【図7】本発明の実施の形態1に係る動作合成方法で使用されるデータ構造の具体例を示す図である。
【図8】本発明の実施の形態1に係る動作合成方法を説明するための具体例を示す図である。
【図9】本発明の実施の形態1に係る動作合成方法で使用されるデータ構造の具体例を示す図である。
【図10】本発明の実施の形態1に係る動作合成方法を説明するための具体例を示す図である。
【図11】本発明の実施の形態1に係る動作合成方法を説明するための具体例を示す図である。
【図12】本発明の実施の形態1に係る動作合成方法を説明するための具体例を示す図である。
【図13】本発明の実施の形態1に係る動作合成方法により生成されるデータパスの回路構成を示す回路図である。
【図14】本発明の実施の形態1に係る動作合成方法により生成される合成回路の回路構成を示す回路図である。
【図15】本発明の実施の形態1に係る動作合成方法により生成されるRTLの記述例を示す図である。
【図16】本発明の実施の形態1に係る動作合成方法により生成されるRTLの記述例を示す図である。
【図17】本発明の実施の形態2に係る動作合成装置の機能構成を示すブロック図である。
【図18】本発明の実施の形態2に係る動作合成方法により生成される合成回路の回路構成を示す回路図である。
【図19】本発明の実施の形態2に係る動作合成方法により生成される合成回路の動作を示すタイミングチャートである。
【図20】本発明の実施の形態3に係る記憶ユニットのアロケーション方法の流れを示すフローチャートである。
【図21】本発明の実施の形態4に係る記憶ユニットのアロケーション方法の流れを示すフローチャートである。
【図22】本発明の実施の形態4に係る動作合成方法を説明するための具体例を示す図である。
【図23】本発明の実施の形態4に係る動作合成方法を説明するための具体例を示す図である。
【図24】本発明の実施の形態4に係る動作合成方法を説明するための具体例を示す図である。
【図25】本発明の実施の形態4に係る動作合成方法を説明するための具体例を示す図である。
【図26】本発明の実施の形態4に係る動作合成方法を説明するための具体例を示す図である。
【図27】本発明の実施の形態4に係る動作合成方法により生成されるデータパスの回路構成を示す回路図である。
【図28】従来の動作合成方法を示す図である。
【図29】従来の動作合成方法を示す図である。
【図30】従来の動作合成方法を示す図である。
【図31】従来の動作合成方法を示す図である。
【図32】本発明と比較するための参考例を示す図である。
【発明を実施するための形態】
【0034】
(本発明の実施の形態1)
以下、図面を参照して本発明の実施の形態1について説明する。
【0035】
図1は、本発明の実施の形態1に係る動作合成装置が実現されるコンピュータシステムのハードウェア構成を示している。なお、後述する他の実施の形態においても、図1と同様のコンピュータシステムにより動作合成装置が実現される。
【0036】
このコンピュータシステム100は、パーソナルコンピュータやワークステーション等の情報処理装置である。図に示されるように、コンピュータシステム100は、CPU102、メインメモリ103、ハードディスク104等を内蔵した本体部101、本体部101からの指示により画面表示を行う表示装置105、このコンピュータシステムにユーザの指示や文字情報を入力するためのキーボード106、および表示装置の画面上における任意の位置を指定し、その位置に表示されていたアイコン等に応じた指示を入力するマウス107から構成される。
【0037】
なお、CPU102及びメインメモリ103は、プログラムを実行し各部を制御する制御部の一例であり、ハードディスク104は、プログラム等を記憶する記憶部の一例である。制御部と記憶部は、一つの装置でもよいし、複数の装置であってもよい。例えば、複数の制御装置や複数の記憶装置に分散されていてもよい。また、表示装置105は、ユーザに対し種々の出力を行う出力装置の一例であり、キーボード106、マウス107は、ユーザが種々の入力操作を行う入力装置の一例である。
【0038】
ハードディスク104には、本実施形態に係る動作合成装置を実現するための動作合成プログラム108、動作合成処理等に必要なその他の各種データ109が格納される。動作合成プログラム108は、図4,図5に後述する動作合成方法の処理を実行するためのプログラムであり、各種データ109は、図2に後述する各記憶部に記憶されるデータである。
【0039】
コンピュータシステム100が、動作合成プログラム108および各種データ109をメインメモリ103にロードし、CPU102はメインメモリ103にロードされた動作合成プログラム108を実行することで、本実施形態の動作合成方法の各処理が実施されて、動作合成装置(図2、図3に後述する機能構成)が実現される。なお、コンピュータシステム100の基本動作は、ハードディスク104に格納された基本プログラムであるオペレーティングシステム(OS)を介して実行される。
【0040】
図2は、本発明の実施の形態1に係る動作合成装置の機能構成を示している。この動作合成装置200は、コンピュータシステム100上で動作合成プログラムが実行されて実現される。
【0041】
図に示されるように、この動作合成装置200は、動作記述情報記憶部201、パーズ処理部202、内部表現情報記憶部203、スケジューリング処理部204、アロケーション処理部205、制御回路用テーブル及びネットリスト生成部206、制御回路用テーブル記憶部207、ネットリスト記憶部208、RTL出力部209、RTL情報記憶部210を備えている。
【0042】
動作記述情報記憶部201は、動作記述言語で記述された動作記述を表すデータである動作記述情報を記憶する。動作記述は、C言語をハードウェア記述のために拡張したSystemC等の動作記述言語により記述される。例えば、動作記述情報は、ユーザによりキーボード106等を介して入力されて、動作記述情報記憶部201に記憶される。
【0043】
パーズ処理部202は、動作記述情報記憶部201に記憶された動作記述情報に基づいて、動作記述情報をパーズ(変換)して、内部表現であるCDFGを表す内部表現情報を生成する。
【0044】
内部表現情報記憶部203は、パーズ処理部202が生成した内部表現情報を記憶する。また、内部表現情報記憶部203は、内部表現情報に対しスケジューリング処理部204及びアロケーション処理部205が処理した結果である、スケジューリング後のCDFGやアロケーション後のCDFGのデータも記憶される。
【0045】
スケジューリング処理部204は、パーズ処理部202が生成した内部表現情報に基づいて、この内部表現情報に対し各演算が実行される制御ステップをスケジューリングして、スケジューリング後の内部表現情報を生成する。
【0046】
アロケーション処理部205は、スケジューリング処理部204が生成したスケジューリング後の内部表現情報に基づいて、この内部表現情報に対し機能ユニット、記憶ユニット、通信ユニットのアロケーションを行って、アロケーション後の内部表現情報を生成する。
【0047】
また、アロケーション処理部205は、加算器等の機能ユニットをアロケーションする機能ユニットアロケーション部205a、レジスタ等の記憶ユニットをアロケーションする記憶ユニットアロケーション部205b、マルチプレクサ等の通信ユニットをアロケーションする通信ユニットアロケーション部205cを有している。
【0048】
制御回路用テーブル及びネットリスト生成部206は、スケジューリング処理部204及びアロケーション処理部205が生成したスケジューリング及びアロケーション後の内部表現情報に基づいて、この内部表現情報から制御回路の制御対象と制御タイミング等を特定して制御回路用テーブルを生成し、かつ、この内部表現情報からデータパスの各回路素子と接続関係を特定してネットリストを生成する。
【0049】
制御回路用テーブル記憶部207は、制御回路用テーブル及びデータパスのネットリスト生成部206が生成した制御回路用テーブルを記憶する。ネットリスト記憶部208は、御回路用テーブル及びデータパスのネットリスト生成部206が生成したネットリストを記憶する。
【0050】
RTL出力部209は、制御回路用テーブル及びネットリスト生成部206が生成した制御回路用テーブルとデータパスのネットリストとに基づいて、制御回路用テーブルに応じた制御回路とネットリストのデータパスとを合成した合成回路のRTL情報を生成し、生成したRTL情報を出力する。
【0051】
RTL情報記憶部210は、RTL出力部209が出力したRTL情報を記憶する。RLT情報は、VHDL(Very High Speed Integrated Circuits Hardware Description Language)等のハードウェア記述言語(Hardware Description Language)により記述されたRTLのデータである。
【0052】
図3は、本発明の実施の形態1に係る記憶ユニットアロケーション部の機能構成を示している。この記憶ユニットアロケーション部205bは、図2のアロケーション処理部205に含まれている。
【0053】
図に示されるように、記憶ユニットアロケーション部205bは、ライフタイム計算部221、変数選択部222、ビット幅検出部223、符号拡張部224、変数分割部225、レジスタ割り当て部226を備えている。
【0054】
ライフタイム計算部221は、スケジューリング処理部204がスケジューリングしたスケジューリング後の内部表現情報(DCFG)に基づいて、各制御ステップで使用される変数を求め、変数ごとにライフタイムを計算する。
【0055】
変数選択部222は、ライフタイム計算部221が計算したライフタイムに基づいて、各変数のライフタイムが時間軸上(制御ステップ)で重なっているかどうか判定し、ライフタイムが重ならない2つの変数を選択する。
【0056】
ビット幅検出部223は、変数選択部222が選択した2つの変数について、ビット幅を検出し、2つのビット幅が異なるかどうか判定する。また、ビット幅検出部223は、符号拡張部224が符号を拡張した変数についても、ビット幅が異なるかどうか判定する。
【0057】
符号拡張部224は、ビット幅検出部223により2つの変数のビット幅が異なると判定された場合、ビット幅が小さい変数を必要最小限に符号を拡張する。
【0058】
変数分割部225は、ビット幅検出部223により2つの変数のビット幅が異なると判定された場合、ビット幅が大きい変数を、ビット幅が小さい変数の幅に合わせて上位ビットと下位ビットにビット分割する。
【0059】
レジスタ割り当て部226は、ビット幅検出部223により2つの変数のビット幅が同じであると判定された場合、この2つの変数に同じレジスタを割り当てる。また、レジスタ割り当て部226は、変数分割部225が分割した下位ビットと、ビット幅の小さい変数とに同じレジスタを割り当て、変数分割部225が分割した残りの上位ビットに、別のレジスタを割り当てる。
【0060】
以下に、本発明の実施の形態1における、記憶ユニットのアロケーション方法を含む動作合成方法の動作について説明する。まず、図4及び図5のフローチャートを用いて動作合成方法の流れを説明した後、図6〜図16を用いて動作合成方法の具体例について説明する。
【0061】
図4に示すように、本実施形態の動作合成方法S200では、まず、パーズ処理部202は、入力された動作記述のデータである動作記述情報をパーズして、CDFGのデータである内部表現情報を生成する(S201)。
【0062】
次いで、スケジューリング処理部204は、S201で生成された内部表現情報に対しスケジューリングを行って、スケジューリング後の内部表現情報を生成する(S202)。
【0063】
次いで、アロケーション処理部205が、S202で生成されたスケジューリング後の内部表現情報に対しアロケーションを行って、アロケーション後のCDFGが生成される(S203〜S205)。すなわち、機能ユニットアロケーション部205aは、内部表現情報に対し加算器等の機能ユニットを割り当て(S203)、記憶ユニットアロケーション部205bは、内部表現情報に対しレジスタ等の記憶ユニットを割り当て(S204)、通信ユニットアロケーション部205cは、内部表現情報に対しマルチプレクサ等の通信ユニットのアロケーションを行う(S205)。
【0064】
なお、機能ユニット、記憶ユニット、通信ユニットのアロケーションは、互いに関連しているため、アロケーションの順序は適宜変更される。例えば、記憶ユニットのアロケーションでレジスタを共有化すると、レジスタの構成が変わるため、機能ユニットや通信ユニットの割り当ても変更される。
【0065】
次いで、制御回路用テーブル及びネットリスト生成部206は、S202〜S205で生成されたスケジューリング及びアロケーション後の内部表現情報を用いて、制御回路用テーブル及びデータパスのネットリストを生成する(S206)。
【0066】
次いで、RTL出力部209は、S206で生成された制御回路用テーブル及びデータパスのネットリストを用いて、制御回路とデータパスを合成した合成回路のRTL情報を出力し(S207)、動作合成処理が終了するRTLを出力する(S207)。
【0067】
また、図5に示されるように、記憶ユニットのアロケーション処理(S204)では、まず、ライフタイム計算部221は、スケジューリングされたCDFG(内部表現)上で状態を横切る各変数についてライフタイムを計算する(S301)。次いで、変数選択部222は、S301でライフタイムを計算した複数の変数のうち、ライフタイムの重ならない2つの変数に着目する(S302)。次いで、ビット幅検出部223は、S302で着目した2つの変数のビット幅が異なるかどうか判定する(S303)。
【0068】
S303において、ビット幅が異なると判定された場合、符号拡張部224は、ビット幅が小さい変数を、必要最小限に符号拡張する(S304)。さらに、ビット幅検出部223は、S304で符号拡張した2つの変数のビット幅が異なるかどうか判定する(S305)。
【0069】
なお、後述のように動作記述情報には、各変数のビット幅が予め定義されている。この予め定義されたビット幅を、そのまま利用できる場合はS304の符号拡張は不要であり、S305の判定も不要である。たとえば、ビット幅が小さい変数が入力される演算について、入力と出力とのビット幅が同じである場合は、符号拡張が0である。すなわちビット幅の拡張はない。このような場合であって、かつ、S303で共有される変数のビット幅が違うケースにあっては、S304、S305は不要であり、ビット削減が可能となる。また、予め定義されたビット幅を、そのまま利用できない場合にS304の符号拡張を行って、対象の変数のビット幅を再度定義し、S305の判定が行われる。すなわち、S303では、予め定義された変数のビット幅を比較しており、S305では、符号拡張により定義された変数のビット幅を比較している。
【0070】
S305において、符号拡張後にビット幅が異なると判定された場合、変数分割部225は、ビット幅が大きい変数を、ビット幅が小さい変数の幅に合わせて上位ビットと下位ビットにビット分割する(S306)。
【0071】
次いで、レジスタ割り当て部226は、ビット幅が小さい変数とビット幅が大きい変数の分割後の下位ビットとを同じレジスタに割り当てる(S307)。次いで、レジスタ割り当て部226は、ビット幅が大きい変数の分割後の上位ビットを別のレジスタに割り当てる(S308)。
【0072】
S303またはS305において、2つの変数のビット幅が同じと判定された場合、レジスタ割り当て部226は、着目した2つの変数を同じレジスタに割り当てる(S309)。
【0073】
S308またはS309のレジスタ割り当ての後、レジスタ割り当て部226は、さらなるレジスタ共有化の余地があるかどうか判定する(S310)。S310において、レジスタ共有化の余地があると判定した場合、S302以降の処理を繰り返し、さらにレジスタの共有化を行う。また、S310において、レジスタ共有化の余地がないと判定した場合、残った変数があれば全てレジスタに割り当てて、処理を終了する(S311)。
【0074】
以下、図6〜図16の動作合成方法の具体例について、図4及び図5の各ステップに対応付けて説明する。
【0075】
まず、動作合成方法S200の処理が開始されると、図6に示すようにパーズが行われる(S201)。図6(a)は動作記述の例を示し、図6(b)は、図6(a)の動作記述をパーズして生成されたCDFGを示している。
【0076】
図6(a)のように、動作記述300は、変数宣言記述部301と演算記述部302を有している。なお、動作記述情報は、動作記述の文字列からなるテキストデータである。
【0077】
変数宣言記述部301では、各行に変数の型、変数のビット幅、変数名の順に記述され、変数の符号情報の有無と、ビット幅が定義されている。なお、変数は、その取りうる値を2進数表現する場合に割り当てるビット数を決める必要がある。本明細書では、このように変数の値を2進数表現するために割り当てるビット数を、ビット幅と称する。したがって、nビット幅(n:整数)の変数Xは、nビットの2進数表現で現す変数Xの意味である。このように、nビット幅が割り当てられた変数Xのことを、nビット幅として定義された変数Xと称する。
【0078】
この例では、変数x4、y4を4ビットの符号無し整数(uint型)の変数、変数x8を8ビットの符号無し整数の変数、変数z5を5ビットの符号無し整数の変数、変数z9を9ビットの符号無し整数の変数として宣言(定義)している。なお、同様に、符号有り整数(int型)の変数を宣言することも可能であり、その場合に定義するビットには、符号情報を示すビット(例えば最上位ビット)が含まれている。
【0079】
演算記述部302では、変数宣言記述部301で宣言した変数を四則演算する動作(式)が記載される。この例では、変数x4と変数y4を加算した結果を変数z5に入力し(式302a)、変数x8と変数z5を加算した結果を変数z9に入力する(式302b)動作が記載されている。
【0080】
変数宣言記述部301と演算記述部302により、4ビットの変数と4ビットの変数の加算結果を5ビットの変数に格納し、さらにその5ビットの変数と8ビットの変数の加算結果を9ビットの変数として出力する動作が表される。
【0081】
図6(b)のように、動作記述300をパーズして生成されるCDFG310は、動作記述に対応して、演算内容と演算に用いる変数とが関係付けて表される。動作記述300の演算記述部302の記述の式には、演算記号として「+」があるため、加算(加算器)を示す記号と各変数とを接続して関連付けられる。
【0082】
この例では、加算1の演算が、式302aに対応しており、4ビットの変数x4と4ビットの変数y4を加算して5ビットの変数z5へ出力することを表している。そして、加算2の演算が、式302bに対応しており、5ビットの変数z5と8ビットの変数x8を加算して9ビットの変数z9へ出力することを表している。なお、ここでは符号無しの変数の例を示しているが、符号ありの変数の場合には、ビット幅を必要最小限だけ増やし、同様にCDFGを生成することができる
【0083】
図7は、このCDFGをデータとして記憶・処理するための内部表現情報の一例を示している。この内部表現情報320は、CDFGを構成する変数や演算等のノード(要素)を表す構造体の集合である。構造体は、各ノードを特定するため、例えば、「種類」、「名称」、「ビット幅」、「接続関係」等のパラメータを有している。構造体は、「種類」に応じて、複数通りのものがある。この例では、「外部入力変数」、「加算」、「中間変数」、「外部出力変数」の4通りの構造体があり、ノード間のつながりは、構造体中に「接続先」や「接続元」を指定する領域を設けて表現する。
【0084】
図7の内部表現情報320は、図6のCDFG310の各ノードを表している。構造体321は変数x4、構造体322は変数y4、構造体323は加算1、構造体324は変数z5、構造体325は変数x8、構造体326は加算2、構造体327は変数z9をそれぞれ表している。
【0085】
図6でパーズした後、図8(a)に示すようにスケジューリングが行われる(S202)。図8(a)は、図6のCDFG310に対しスケジューリングを行った後のCDFG311を示している。
【0086】
スケジュール処理では、各演算処理の順序に従って、各演算処理を実行する制御ステップが決定される。図6(a)(b)から理解できるように、変数x4と変数y4の加算の後に、変数x8と変数z5を加算する必要がある。このため、2つの加算処理を2つのステップで実行することにする。
【0087】
すなわち、図8(a)のように、2つの加算を別のステップに区切り、ステップ1において、変数x4と変数y4とを加算して変数z5へ出力する加算1の処理を実行し、次のステップ2において、変数z5と変数x8とを加算して変数z9を出力する加算2の処理を実行するようにスケジュールする。
【0088】
図8(a)でスケジューリングした後、S203〜S204のアロケーションが行われ、記憶ユニットのアロケーションでは、図8(b)に示すようにライフタイムが計算される(S301)。図8(b)は、図8(a)でスケジュールされたCDFG311の各変数のライフタイムを示すライフタイムテーブル330である。なお、ここでは、ライフタイムを示す図において、主にステップ1及びステップ2を図示し、その前後のステップについては省略しているが、実際にはステップ1及びステップ2を繰り返すことになる。
【0089】
ライフタイムの計算では、CDFGで表される制御ステップと演算及び変数との関係から、変数ごとに、どの制御ステップからどの制御ステップまでの期間、値を保持する必要があるかを計算する。
【0090】
この例では、変数x4は、ステップ1の加算1の入力として使用され、加算1の後は使用されないため、ステップ1より前のステップからステップ1までがライフタイムとなる。変数y4も同様に、変数x4と同じライフタイムとなる。
【0091】
変数x8は、ステップ2の加算2の入力として使用され、加算2の後は使用されないため、ステップ1からステップ2までがライフタイムとなる。変数z5は、ステップ1の加算1により値が確定して、ステップ2の加算2の入力として使用され、加算2の後は使用されないため、ステップ1からステップ2までがライフタイムとなる。
【0092】
変数z9は、最終的な演算結果が保持される変数であり、ここでは、状態に関係なく出力値を常に保持するものとする。したがって、変数z9は、ステップ1より前のステップから、ステップ2より後のステップまで、全期間がライフタイムとなる。
【0093】
図9は、このライフタイムをデータとして記憶・処理するためのライフタイム情報の一例を示している。このライフタイム情報は、各変数のライフタイムを表すテーブル構造体340である。テーブル構造体340は、ライフタイムの名称、期間を特定するため、例えば、「変数名」、「始点」、「終点」の欄を有し、さらに、レジスタの割り当てを特定するため「割当先」の欄を有している。
【0094】
「始点」がNULLの場合、「初期ステップ(step1)以前からライフタイムあり」を表しており、「終点」がNULLの場合、「最終ステップ(step2)以後までライフタイムあり」を表している。「割当先」がNULLは、割当先レジスタが未決定を表しており、割当先レジスタが決まった場合、「割当先」の欄にレジスタを記憶する。
【0095】
ライフタイムは、連続する期間毎に記憶され、同じ変数が複数のライフタイムを有する場合には、複数のライフタイムが登録される。
【0096】
図9では、テーブル構造体340は、ライフタイムテーブル331に対応しており、変数x4、y4、x8、z5、z9の各ライフタイム(a)〜(f)が、テーブル構造体340の各行に登録される。
【0097】
このテーブル構造体340では、(a)が変数x4の1つ目のライフタイム、(b)が変数x4の2つ目のライフタイム、(c)が変数y4のライフタイム、(d)が変数x8のライフタイム、(e)が変数z5のライフタイム、(f)が変数z6のライフタイムをそれぞれ表している。
【0098】
図8(b)でライフタイムを計算した後、図10(a)に示すように2つの変数が着目される(S302)。図10(a)は、図8(b)と同じライフタイムテーブル330である。
【0099】
ライフタイムの始点と終点から、ライフタイムが各制御ステップで重なっているか解析する。図10(a)では、まず、変数x4と変数z5でライフタイムが重ならないため、変数x4と変数z5に着目する。
【0100】
図10(a)で2つの変数x4とz5に着目した後、ビット幅の比較が行われ(S303)、変数x4とz5はビット幅が異なるため、ビット幅が小さい変数x4を必要最小限に符号拡張して5ビットとする(S304)。
【0101】
この符号拡張では、着目した変数が入力となっている演算に着目し、その演算の出力のビット幅に合わせて符号拡張する。上記のように、演算の入力と出力のビット幅が同じ場合、符号拡張は不要であり、演算の入力と出力のビット幅が異なる場合、出力のビット幅に合わせて符号拡張したビット幅を変数のビット幅として再定義する。
【0102】
例えば、4ビットの変数x4が、出力ビット幅5ビットの加算演算の入力となっている場合、出力のビット幅5ビットに合わせるため、4ビットの変数x4を1ビット符号拡張し、5ビットにする。例えば、5ビットの変数z5が、出力ビット幅9ビットの加算演算の入力となっている場合、出力のビット幅9ビットに合わせるため、5ビットの変数z5を4ビット符号拡張し、9ビットにする。
【0103】
着目した変数と異なる入力側には、一般に任意の値が入る可能性がある。それを考慮し、加算、減算の場合は一方の入力に0が入るケース、乗算の場合は一方の入力に1が入るケースをそれぞれ考えた場合、着目した変数の値が丸々、演算の出力に反映されることになる。
【0104】
このとき、もし、演算の出力のビット幅よりも、着目した変数のビット幅の方が小さいと、足りない上位ビットの値は未確定であり、RTL生成後の接続関係によって不安定な値(ゴミ)が入る可能性があるため、正しい演算結果が得られない。このため、本実施形態では、予め、必要ビット数の符号拡張を行うことで、正確な動作を可能にしている。
【0105】
図10(a)で、変数x4を符号拡張した後、さらにビット幅の比較が行われ(S305)、拡張した変数x4と変数z5は同じ5ビットであるため、図10(b)に示すように、着目した2つの変数に同じレジスタを割り当てる(S309)。図10(b)は、図10(a)のライフタイムテーブル330について、変数x4とy4にレジスタr1を割り当てたライフタイムテーブル332である。
【0106】
すなわち、ライフタイムが重ならず、かつ、同じビット幅の変数x4とz5を、ライフタイムテーブル上で連続するように表し、この連続する変数x4とz5に、変数x4及びz5と同じ5ビットのレジスタr1を割り当てる。
【0107】
図10(b)でレジスタr1を割り当てた後、さらなるレジスタの共有化の余地があるかどうか判定し(S310)、ライフタイムの重ならない変数があるため、図11(a)に示すようにさらに2つの変数が着目される(S302)。図11(a)は、図10(b)と同じライフタイムテーブル332である。図11(a)では、変数y4と変数x8でライフタイムが重ならないため、変数y4と変数x8に着目する。
【0108】
図11(a)で2つの変数y4とx8に着目した後、ビット幅の比較が行われ(S303)、ビット幅が小さい変数x4を必要最小限に符号拡張して5ビットとする(S304)。さらにビット幅の比較が行われ(S305)、拡張した変数y4は5ビット、変数x8は8ビットであり、ビット幅が異なるため、図11(b)に示すように、大きいビット幅の変数x8を分割し(S306)、小さいビット幅の変数y4と分割したx8の下位ビットとに同じレジスタr2を割り当て(S307)、分割したx8の上位ビットに別のレジスタr3を割り当てる(S308)。図11(b)は、図11(a)のライフタイムテーブル332について、変数y4とx8にレジスタr2、r3を割り当てたライフタイムテーブル333である。
【0109】
すなわち、着目した変数y4とx8は、ライフタイムが重ならず、かつ、ビット幅が異なるため、大きいビット幅の変数x8を、上位3ビットと下位5ビットに分割する。小さいビット幅の変数y4と変数x8の下位5ビットを、ライフタイムテーブル上で連続するように表し、この連続する変数y4と変数x8の下位ビットに、5ビットのレジスタr2を割り当てる。さらに、変数x8の上位ビットにレジスタr3を割り当てる。
【0110】
図11(b)でレジスタr2、r3を割り当てた後、さらなるレジスタの共有化余地があるかどうか判定する(S310)。ライフタイムの重ならない変数は無いため、図12(a)に示すように、残りの変数z9に着目し、図12(b)に示すように、残りの変数z9に9ビットのレジスタr4を割り当てる(S311)。
【0111】
図12(b)のライフタイムテーブル334により、レジスタ(記憶ユニット)のアロケーションが完了する。このレジスタのアロケーションに合わせて、加算器(機能ユニット)、マルチプレクサ(通信ユニット)のアロケーションが行われる。これらのアロケーションが完了すると、図13に示すような、データパスのネットリストが生成される(S206)。
【0112】
ライフタイムテーブル334により割り当てられたレジスタr1、r2、r3、r4を加算器A1で接続する。ライフタイムテーブル334の制御ステップに応じて共有のレジスタr1、r2に入力する変数を切り替えるためにマルチプレクサM1、M2を、レジスタr1、r2に接続する。また制御ステップに応じてレジスタr3、r4に入力する変数のタイミングを制御するためマルチプレクサM3、M4を、レジスタr3、r4に接続する。
【0113】
すなわち、図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を備えている。
【0114】
図13のデータパスのネットリストが生成され、さらに、このデータパスを制御ステップに応じて制御する制御回路用テーブルが生成される(S206)。例えば、図12のライフタイムテーブル334から、各制御ステップで使用するレジスタ及び変数が決定するため、これに合わせてマルチプレクサを制御するための制御回路用テーブルを生成する。例えば、制御回路用テーブルには、制御ステップと、そのタイミングで制御されるマルチプレクサとが対応付けられている。
【0115】
そして、図13のデータパスのネットリストと制御回路用テーブルが生成されると、図14に示すような、データパス400と制御回路410を合成した合成回路420のRTLが出力される(S207)。
【0116】
制御回路用テーブルに基づいて、制御ステップ1,2に対応する制御信号s1、s2を出力する制御回路410を生成する。そして、この制御信号s1、s2をデータパス400のマルチプレクサに供給するように接続する。さらに、制御回路410及びデータパス400にクロックを供給する。
【0117】
すなわち、図14に示すように、この合成回路420は、データパス400と制御回路410を有している。
【0118】
データパス400の構成は図13と同様である。また、データパス400では、クロックが、レジスタr1、r2、r3、r4にそれぞれ供給される。さらに、制御信号s1、s2が、マルチプレクサM1、M2、M3、M4にそれぞれ供給される。
【0119】
制御回路410は、クロックのタイミングごとに"0"と"1"を繰り返す制御信号s2を生成するレジスタr5、制御信号s2を反転した制御信号s1を生成するインバータIN1を備えている。
【0120】
制御信号s1とs2により、ステップ1とステップ2が切り替えられる。例えば、制御信号s1によりステップ1が選択され、制御信号s2によりステップ2が選択される。
【0121】
制御信号s1が"1"、制御信号s2が"0"の場合、マルチプレクサM1が変数x4を選択してレジスタr1に保持され、マルチプレクサM2が変数y4を選択してレジスタr2に保持され、加算器A1により変数x4と変数y4が加算されて変数z5が出力される。
【0122】
次に、制御信号s1が"0"、制御信号s2が"1"の場合、マルチプレクサM1が変数z5を選択してレジスタr1に保持され、マルチプレクサM2が変数x8の下位5ビットを選択してレジスタr2に保持され、マルチプレクサM3が変数x8の上位3ビットを選択してレジスタr3に保持され、加算器A1により変数z5と変数x8が加算される。さらに、マルチプレクサM4が加算器A1の出力を選択してレジスタr4に保持され、加算器A1の出力結果が変数z9として出力される。
【0123】
図15及び図16は、図14の合成回路420をVerilog−HDLで記述したRTL記述の例である。RTLは、階層構造のモジュール単位に記述されている。例えば、RTL情報記憶部210に、RTL記述のテキストデータが格納される。
【0124】
この例では、まず、最上位階層であるトップのトップモジュール記述501が記述され、次に、トップモジュールの下位である制御回路の制御回路モジュール記述502が記述され、次に、トップモジュールの下位であるデータパスのデータパスモジュール記述503が記述されている。制御回路モジュール記述502は、図14の制御回路410に対応しており、データパスモジュール記述503は、図14のデータパス400に対応している。
【0125】
トップモジュール記述501には、データパスの入出力信号が記述され(501a)、制御回路の入出力信号が記述されている(501b)。
【0126】
制御回路モジュール記述502には、レジスタr5と制御信号s2の関係が記述され(502a)、レジスタr5の反転信号と制御信号s1の関係が記述され(502b)、クロックとレジスタr5の関係が記述されている(502c)。
【0127】
データパスモジュール記述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)。
【0128】
ここで、本発明の実施の形態1に係る動作合成方法と従来の動作合成方法とを比較するために、図32を用いて、従来の動作合成方法によりレジスタをアロケーションする参考例について説明する。
【0129】
図32(a)は、図8のライフタイムテーブル330に対し、従来の動作合成方法によりレジスタを割り当てたライフタイムテーブル920を示している。
【0130】
従来の動作合成方法では、ライフタイムの重ならない変数であることのみがレジスタを共有化する条件である。ここでは、変数x4と変数z5とが重ならない2つの変数であり、また、変数y4と変数x8とが重ならない2つの変数である。
【0131】
そうすると、図32(a)に示すように、ライフタイムの重ならない変数に一つのレジスタを割り当てる。すなわち、変数x4と変数z5に、ビット幅が大きい変数z5に合わせた5ビットのレジスタr1を割り当てる。変数y4と変数x8に、ビット幅が大きい変数x8に合わせた8ビットのレジスタr2を割り当てる。変数z9は、共有化できないため、変数z9に合わせた9ビットのレジスタr3を割り当てる。
【0132】
図32(b)は、図32(a)のライフタイムテーブル920から生成されたデータパス930を示している。
【0133】
ライフタイムテーブル920により割り当てられたレジスタr1、r2、r3を加算器A1で接続する。ライフタイムテーブル920の制御ステップに応じて共有のレジスタr1、r2に入力する変数を切り替えるためにマルチプレクサM1、M2を、レジスタr1、r2に接続する。また制御ステップに応じてレジスタr3に入力する変数のタイミングを制御するためマルチプレクサM3を、レジスタr3に接続する。
【0134】
すなわち、図32(b)に示すように、このデータパス930は、変数x4と加算器A1の出力である変数z5のいずれかを切り替えてレジスタr1へ出力するマルチプレクサM1、マルチプレクサM1が選択した変数を保持するレジスタr1、変数y4と変数x8との入力のいずれかを切り替えてレジスタr2へ出力するマルチプレクサM2、マルチプレクサM2が選択した変数を保持するレジスタr2、レジスタr1の値とレジスタr2の値とを加算する加算器A1、加算器A1の出力をレジスタr3へ出力するマルチプレクサM3、マルチプレクサM3を介した加算器A1の出力を変数z9として保持し出力するレジスタr3を備えている。
【0135】
図32のように、従来の動作合成方法によって生成された回路では、ビット幅の異なる値が共有化された後は、ビット幅の大きな変数に合わせて生成されたレジスタの全ビットをアクセスする回路構造となる。このため、下位ビットのみアクセスして演算を行えばよいタイミングにおいても、意味のない上位ビットのために無駄な電力を消費するという問題があった。
【0136】
例えば、図32の回路では、4ビットの変数x4と4ビットの変数y4との加算結果の変数z5は、5ビットのレジスタr1に格納されるため、加算器の入力の6ビット目以上は、どのような値をとっても、レジスタr1の値が変わることはない。しかしながら、変数y4の値は、8ビットに拡張された上で、8ビットの変数x8と切り替えてアクセスされるため、意味を持たない6ビット目以上のビットに対しても、切り替えが生じ、無駄な電力を消費することになる。
【0137】
また、図32の回路では、4ビットの変数y4の値をレジスタr2に取り込む際、5ビット目以上のビットには明示的に"0"が代入される記述となる。例えば、この後の処理で、レジスタr2に対してビット単位でクロックゲーティング回路を構成したとしても、変数y4の値をレジスタr2に取り込むタイミングでも6ビット目以上にも代入がなされているため、クロックゲーティングの対象とはできず、電力低減の機会が減ることになる。
【0138】
このように、従来の動作合成方法では、ビット幅の大きい変数に合わせたビット幅でレジスタを共有化するため、ビット幅の小さい変数にとって未使用のビットが発生することから、共有化するレジスタおよびその入力を切り替えるマルチプレクサのビットが無駄に大きいという問題があった。これにより回路面積が大きくなるという問題も生じる。
【0139】
近年、半導体の微細化に伴い、リーク電流によるスタティックな電力消費が無視できなくなってきている。リーク電流は、回路面積が大きいほど大きくなる傾向にあるため、面積が縮小できれば、スタティックな電力消費の削減にもつながる。従来の動作合成方法では、レジスタやマルチプレクサのビットが無駄に大きくなることから、このようなスタティックな電力消費という観点でも、最適化の余地が残るものであった。
【0140】
また、従来の動作合成方法では、4ビットの演算の時でも、8ビットの切り替えが生じ、無駄な電力を消費することになる。すなわち、従来の動作合成方法では、ビット幅の小さい変数の値を格納する場合であっても、未使用の無駄なビットを含む、レジスタの全入力ビットを切り替えるためのマルチプレクサを生成しており、これは、切り替えのために消費されるダイナミックな電力消費を削減するという観点においても、最適化の余地が残るものであった。
【0141】
さらに、従来の動作合成方法では、未使用ビットにも明示的に値を代入しているため、クロックゲーティングの余地がなく、ダイナミック電力を低減することができないという問題があった。
【0142】
これに対し、本実施形態では、上記図12のライフタイムテーブル334のように、ビット幅の異なる変数に対しレジスタ共有化する場合、大きいビット幅の変数を分割して、小さいビット幅の変数に合わせたレジスタを割り当てて共有化し、残りのビットには別のレジスタを割り当てるようにした。
【0143】
これにより、図13のように、変数y4と変数x8との共有化において、ビット幅の小さい変数y4に合わせたビット幅(5ビット)でレジスタが共有されるため、レジスタの入力を切り替えるマルチプレクサのビット幅も、図32と比べて従来の8ビットよりも小さい5ビットにすることができる。したがって、切り替えるビット数が減る分、マルチプレクサの面積が小さくなり、それに比例してリーク電流も少なく出来るため、スタティックな電力消費を低減することができる。また、マルチプレクサの切り替え時の未使用ビットの切り替えを削減することができ、ダイナミックな消費電力を低減することができる。
【0144】
また、変数x8を分割して残った上位ビットの部分は、共有のレジスタとは別のレジスタr3に割り当てられる。このため、変数y4の値の取り込みタイミングとは無関係にクロックゲーティングができるようになり、ダイナミックな消費電力をより一層低減することが可能となる。
【0145】
(本発明の実施の形態2)
以下、図面を参照して本発明の実施の形態2ついて説明する。図17は、本発明の実施の形態2に係る動作合成装置の機能構成を示している。
【0146】
図17の動作合成装置200は、図2の構成と比べて、RTL出力部のみが異なっている。その他の構成は同様である。すなわち、本実施形態の動作合成装置200は、実施の形態1のRTL出力部209に代えて、クロックゲーティング及びRTL出力部211を有している。
【0147】
クロックゲーティング及びRTL出力部211は、制御回路用テーブル記憶部207に記憶された制御回路用テーブルと、ネットリスト記憶部208に記憶されたデータパスのネットリストとに基づいて、クロックゲーティングを含む合成回路のRTL情報を生成し、出力する。
【0148】
図18は、クロックゲーティング及びRTL出力部211が生成した合成回路420の例である。図18の合成回路420は、図14の構成と比べて、制御回路410は同じ構成であり、データパス400は、マルチプレクサM3、M4に代えて、クロックゲーティングL1、L2を有している。
【0149】
このクロックゲーティングL1,L2は論理和回路で構成され、クロックゲーティングL1,L2は、レジスタr3、r4に供給されるクロックの変動を抑える。クロックゲーティングL1は、クロックと制御信号s2とを論理和演算してレジスタr3のクロック端子へ供給する。クロックゲーティングL2は、クロックと制御信号s1とを論理和演算してレジスタr4のクロック端子へ供給する。
【0150】
図19のタイミングチャートは、図18の合成回路420の動作を示している。制御信号s1、s2は、クロックごとのタイミングで"0"と"1"を交互に繰り返し、これに応じてステップ1とステップ2が繰り返される。
【0151】
ステップ1では、レジスタr1に変数x4が保持され、レジスタr2に変数y4が保持され、加算器A1が変数x4と変数y4とを加算し、変数z5を出力する。ステップ2では、レジスタr1に変数z5が保持され、レジスタr2に変数x8の下位ビットが保持され、レジスタr3に変数x8の上位ビットが保持され、加算器A1が変数z5と変数x8の上位ビット及び下位ビットとを加算し、変数z9を出力する。
【0152】
ここで、レジスタr3では、ステップ2においてのみ変数x8を使用するため、ステップ1のタイミングではクロックをゲーティングしてレジスタr3をラッチ動作させず、ステップ2のみクロックを供給してレジスタr2をラッチ動作させる。なお、図14の構成のようにクロックゲーティングしない場合には、レジスタr3は、変数x8と"0"とをクロック毎に交互に格納する。
【0153】
また、レジスタr4では、ステップ2の次のステップにおいてのみ変数z9の値が確定するため、ステップ2のタイミングではクロックをゲーティングしてレジスタr4をラッチ動作させず、ステップ2の次のステップ(ここではステップ1)のみクロックを供給してレジスタr4をラッチ動作させる。図19のように、レジスタr3、r4に供給されるクロックが半分になるため、レジスタr3、r4のダイナミックな消費電力を半分に減らすことができる。
【0154】
このように、本実施形態では、変数を保持するレジスタにクロックゲーティングを行うことで、消費電力を低減することができる。特に、従来、レジスタ共有によりクロックゲーティングが不可能な場合があったが、実施の形態1で説明したように、ビット幅の大きい変数を上位ビットと下位ビットに分割して、別のレジスタに割り当てているため、上位ビットのレジスタをクロックゲーティングができるようになり、消費電力を確実に低減することができる。
【0155】
(本発明の実施の形態3)
以下、図面を参照して本発明の実施の形態3ついて説明する。実施の形態1では、記憶ユニットのアロケーション処理において、ライフタイムの重ならない2つの変数に着目して、レジスタの割り当てを行った。これに対し、本実施形態では、ライフタイムの重ならない2以上の変数に着目して、レジスタを割り当てる。記憶ユニットのアロケーション以外については、実施の形態1,2と同様である。
【0156】
図20は、本発明の実施の形態3に係る記憶ユニットのアロケーション処理(S204)の流れを示している。
【0157】
図に示されるように、まず、ライフタイム計算部221は、CDFG上で状態を横切る各変数についてライフタイムを計算し(S401)、変数選択部222は、ライフタイムの重ならない2つ以上の変数及びレジスタに着目する(S402)。次いで、ビット幅検出部223は、着目した全ての変数のビット幅が同じかどうか判定する(S403)。
【0158】
S403において、ビット幅が異なると判定された場合、変数選択部222は、着目した変数の中から2つの変数を選ぶ(S404)。2つの変数を選んだ後は、実施の形態1と同様に、図5のS303〜S308の処理を行う。
【0159】
すなわち、選択した2つの変数のビット幅が異なるかどうか判定し(S303)、ビット幅が異なる場合、ビット幅が小さい変数を必要最小限に符号拡張し(S304)、符号拡張した2つの変数のビット幅が異なるかどうか判定し(S305)、ビット幅が異なる場合、ビット幅が大きい変数をビット幅が小さい変数の幅に合わせて上位ビットと下位ビットにビット分割し(S306)、ビット幅が小さい変数とビット幅が大きい変数の下位ビットとを同じレジスタに割り当て(S307)、ビット幅が大きい変数の上位ビットを別のレジスタに割り当てる(S308)。
【0160】
S403において、着目した全ての変数のビット幅が同じ場合、S303、S305において、選択した2つの変数のビット幅が同じ場合、着目した全ての変数もしくは選択した2つの変数に、同じレジスタを割り当てる(S405)。
【0161】
S308またはS405のレジスタ割り当ての後、レジスタ割り当て部226は、割り当てたレジスタと残った変数とを着目対象とする。
【0162】
次いで、レジスタ割り当て部226は、共有化の余地があるかどうか判定する(S407)。現在着目している複数の変数において、割り当てたレジスタも含めて、共有化する余地があるかどうか判定する。S407において、共有化の余地があると判定された場合、S403以降の処理を繰り返し、さらに2つの変数を選択して共有化を行う。
【0163】
S407において、共有化の余地がないと判定された場合、レジスタ割り当て部226は、さらなるレジスタ共有化の余地があるかどうか判定する(S408)。S408において、レジスタ共有化の余地があると判定された場合、S402以降の処理を繰り返す。また、S408において、レジスタ共有化の余地がないと判定された場合、レジスタ割り当て部226は、残った変数があれば全てレジスタに割り当てて、処理を終了する(S409)。
【0164】
このように、本実施形態では、記憶ユニットのアロケーションにあたり、ライフタイムの重ならない2つ以上の変数に着目し、ビット幅が異なる場合は、2つの変数を選択してレジスタの割り当てを行うようにした。これにより、ライフタイムの重ならない変数が2つ以上ある場合でも、実施の形態1と同様にレジスタを共有化することができる。
【0165】
(本発明の実施の形態4)
以下、図面を参照して本発明の実施の形態4ついて説明する。実施の形態3では、記憶ユニットアロケーション処理において、ライフタイムの重ならない2つ以上の変数に着目し、さらに2つの変数を選択してレジスタの割り当てを行った。これに対し、本実施形態では、ライフタイムの重ならない2以上の変数に着目して、その着目した2つ以上の変数に対しレジスタを割り当てる。記憶ユニットのアロケーション以外については、実施の形態1,2と同様である。
【0166】
図21は、本発明の実施の形態4に係る記憶ユニットのアロケーション処理(S204)の流れを示している。
【0167】
図に示されるように、まず、ライフタイム計算部221は、CDFG上で状態を横切る各変数についてライフタイムを計算し(S501)、変数選択部222は、ライフタイムの重ならない2つ以上の変数及びレジスタに着目する(S502)。次いで、ビット幅検出部223は、着目した変数が全て同じビット幅かどうか判定する(S503)。
【0168】
S503において、全ての変数のビット幅が同じではないと判定された場合、符号拡張部224は、ビット幅が最大の変数以外の変数を、必要最小限に符号拡張する(S504)。次いで、ビット幅検出部223は、符号拡張後の着目した変数が全て同じビット幅かどうか判定する(S505)。
【0169】
S505において、全ての変数のビット幅が同じではないと判定された場合、変数分割部225は、ビット幅が最小の変数のビット幅に合わせて、その他の変数を上位ビットと下位ビットにビット分割する(S506)。次いで、レジスタ割り当て部226は、ビット幅が最小の変数とその他の変数の下位ビットとを同じレジスタに割り当てる(S507)。
【0170】
次いで、レジスタ割り当て部226は、分割したその他の変数の上位ビットを新たな着目対象とする(S508)。その後、S505以降を繰り返し、分割した残りの変数に対し、レジスタの割り当てを行う。
【0171】
S503またはS505において、着目した変数が全て同じビット幅である場合、レジスタ割り当て部226は、着目した全ての変数を同じレジスタに割り当てる(S509)。
【0172】
次いで、レジスタ割り当て部226は、さらなるレジスタ共有化の余地があるかどうか判定する(S510)。S510において、レジスタ共有化の余地があると判定された場合、S502以降の処理を繰り返す。また、S510において、レジスタ共有化の余地がないと判定された場合、レジスタ割り当て部226は、残った変数があれば全てレジスタに割り当てて、処理を終了する(S511)。
【0173】
次に、図22〜図27を用いて、本発明の実施の形態4に係る動作合成方法の具体例について説明する。
【0174】
まず、動作合成方法S200の処理が開始されると、図22(a)の動作記述600をパーズして、図22(b)のCDFGが生成される(S201)。
【0175】
この動作記述600では、変数宣言記述部601に変数x4、y4、x8、z5、z9、x16、z17が定義され、演算記述部602に、これらの変数を使用した式602a、式602b、式602cが記述されている。
【0176】
動作記述600をパーズすると、図22(b)に示すように、加算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が生成される。
【0177】
次に、図23(a)に示すように、図22(b)のCDFGに対し制御ステップに区切ってスケジューリングが行われ、スケジューリングのCDFG611が生成される(S202)。
【0178】
この例では、ステップ1において、変数x4と変数y4とを加算して変数z5へ出力する加算1の処理を実行し、次のステップ2において、変数z5と変数x8とを加算して変数z9を出力する加算2の処理を実行し、次のステップ3において、変数z9と変数x16とを加算して変数z17を出力する加算3の処理を実行するようにスケジュールする。
【0179】
次に、図23(a)のスケジューリング後のCDFG611から、各変数のライフタイムを計算し、図23(b)に示すライフタイムテーブル620を生成する(S501)。
【0180】
この例では、変数x4、y4は、ステップ1より前のステップからステップ1までがライフタイムであり、変数x8、z5は、ステップ1からステップ2までがライフタイムであり、変数x16、z9は、ステップ2からステップ3までがライフタイムであり、変数z17は、全期間がライフタイムである。
【0181】
次に、図24(a)に示すように、変数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)。
【0182】
そして、図24(b)に示されるように、ビット幅最小の変数x4と、変数z5の下位ビット、変数z9の下位ビットに同じレジスタr1を割り当てる(S507)。さらに、分割した変数z5の上位4ビットと、変数z9の上位4ビットを着目対象とし(S511)、両者はビットが同じであるため、変数z5の上位4ビットと、変数z9の上位4ビットに同じレジスタr2を割り当てる(S509)。
【0183】
変数x4、変数z5、変数z9にレジスタを割り当てた後、図25(a)に示すように、変数y4と変数x8と変数x16とでライフタイムが重ならず、レジスタ共有化の余地があるため、変数y4、変数x8、変数x16に着目する(S502)。
【0184】
変数y4は4ビットであり、変数x8は8ビットであり、変数x16は16ビットであり、ビット幅が異なるため、ビット幅が最大ではない、変数y4、変数x8の変数を最小限に符号拡張し5ビットと9ビットとする(S504)。
【0185】
そして、ビット幅最小の変数y4のビット幅5に合わせて、変数x8を上位4ビットと下位5ビットに分割し、変数x16を上位11ビットと下位5ビットに分割する(S506)。図25(b)のように、ビット幅最小の変数y4と、変数x8の下位ビット、変数x16の下位ビットに同じレジスタr3を割り当てる(S507)。
【0186】
さらに、分割した変数x8の上位4ビットと、変数x15の上位11ビットを着目対象とする(S511)。ビット幅の小さい変数x8の4ビットに合わせて、変数x15の上位11ビットを上位7ビットと下位4ビットに分割する(S506)。図25(b)のように、ビット幅の小さい変数x8の上位4ビットと、変数x16の下位ビットに同じレジスタr4を割り当てる(S507)。さらに、残りの変数x16の上位7ビットにレジスタr5を割り当てる。
【0187】
次に、変数z17が残っているが、レジスタ共有化の余地がないため、図26(a)に示すように変数z17に着目し、図26(b)に示すように、変数z17にレジスタr6を割り当て(S511)、処理が終了する。
【0188】
図27は、図26のライフタイムテーブル623から生成されたデータパス700の構成を示している。データパス700では、ライフタイムテーブル623により割り当てられたレジスタr1〜r6を加算器A1で接続する。ライフタイムテーブル623の制御ステップに応じて共有のレジスタr1〜r4に入力する変数を切り替えるためにマルチプレクサM1〜M4を、レジスタr1〜r4に接続する。また制御ステップに応じてレジスタr5、r6に入力する変数のタイミングを制御するためマルチプレクサM5、M6を、レジスタr5、r6に接続する。
【0189】
すなわち、このデータパス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を備えている。
【0190】
このように、本実施形態では、記憶ユニットのアロケーションにあたり、ライフタイムの重ならない2つ以上の変数に着目し、最小のビット幅の変数に合わせて複数の変数を分割してレジスタの割り当てを行うようにした。
【0191】
これにより、ライフタイムの重ならない変数が2つ以上ある場合でも、実施の形態1と同様に共有化するレジスタのビット幅を小さくすることができる。
【0192】
また、実施の形態1と同様に、マルチプレクサの面積が小さくなり、スタティック電力を低減することができる。さらに、切り替え時の(ダイナミックな)消費電力を低減することができる。また、クロックゲーティングできる余地が増え、さらに消費電力を低減することが可能となる。
【0193】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【0194】
100 コンピュータシステム
101 本体部
103 メインメモリ
104 ハードディスク
105 表示装置
106 キーボード
107 マウス
108 動作合成プログラム
109 各種データ
200 動作合成装置
201 動作記述情報記憶部
202 パーズ処理部
203 内部表現情報記憶部
204 スケジューリング処理部
205 アロケーション処理部
205a 機能ユニットアロケーション部
205b 記憶ユニットアロケーション部
205c 通信ユニットアロケーション部
206 制御回路用テーブル及びネットリスト生成部
207 制御回路用テーブル記憶部
208 ネットリスト記憶部
209 RTL出力部
210 RTL情報記憶部
211 クロックゲーティング及びRTL出力部
221 ライフタイム計算部
222 変数選択部
223 ビット幅検出部
224 符号拡張部
225 変数分割部
226 レジスタ割り当て部

【特許請求の範囲】
【請求項1】
変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、
前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、
前記ライフタイム情報が時間軸上で重ならないm個(mは2以上の整数)の変数を選択し、
前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、
前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、
前記第1及び第2のレジスタを有する合成回路の回路情報を出力する、
動作合成方法。
【請求項2】
前記第1のレジスタの割り当ては、前記その他の変数を、前記第1のビット幅のビットと、前記第1のビット幅のビット以外のビットとに分割して、前記分割した前記第1のビット幅のビットに、前記第1のレジスタを割り当て、
前記第2のレジスタの割り当ては、前記分割した前記第1のビット幅のビット以外のビットに、前記第2のレジスタを割り当てる、
請求項1に記載の動作合成方法。
【請求項3】
前記第1のビット幅は、前記第1の変数の符号情報を示すビットを含めたビット幅として定義されている、
請求項1または2に記載の動作合成方法。
【請求項4】
前記第1のビット幅は、前記動作記述情報に記載された前記第1の変数に対して符号拡張したビット幅として定義されている、
請求項1乃至3のいずれか一項に記載の動作合成方法。
【請求項5】
前記第1のビット幅は、前記第1の変数の演算結果のビット幅に合わせて定義されている、
請求項4に記載の動作合成方法。
【請求項6】
前記その他の変数内の前記第1のビット幅のビットは、前記その他の変数の下位ビットである、
請求項1乃至5のいずれか一項に記載の動作合成方法。
【請求項7】
前記その他の変数内の前記第1のビット幅のビット以外のビットは、前記その他の変数の上位ビットである、
請求項1乃至6のいずれか一項に記載の動作合成方法。
【請求項8】
前記m個の変数から2個の変数を特定し、
前記第1の変数は、前記特定した2個の変数のうちビット幅が小さい変数であり、
前記その他の変数は、前記特定した2個の変数のうちビット幅が大きい変数である、
請求項1乃至7のいずれか一項に記載の動作合成方法。
【請求項9】
前記第1の変数は、前記m個の変数のうちビット幅が最小の変数である、
請求項1乃至8のいずれか一項に記載の動作合成方法。
【請求項10】
前記第1の変数のデータもしくは前記その他の変数のデータのいずれかを切り替えて、前記第1のレジスタに入力するマルチプレクサを、前記合成回路に割り当てる、
請求項1乃至9のいずれか一項に記載の動作合成方法。
【請求項11】
前記第2のレジスタに供給されるクロックを非活性にするクロックゲーティング回路を、前記合成回路に割り当てる、
請求項1乃至10のいずれか一項に記載の動作合成方法。
【請求項12】
前記mは2である、
請求項1乃至11のいずれか一項に記載の動作合成方法。
【請求項13】
変数の演算動作を含む動作記述情報から、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、
前記スケジューリングされたデータフローグラフ情報から、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、
前記ライフタイム情報が時間軸上で重ならない、第1のビット幅として定義された第1の変数と、第2の変数とを選択し、
前記第1の変数と、前記第2の変数に含まれる前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、
前記第2の変数に含まれる前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、
前記第1及び第2のレジスタを有する合成回路の回路情報を出力する、
動作合成方法。
【請求項14】
コンピュータに動作合成処理を実行させる動作合成プログラムであって、前記動作合成処理は、
変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成し、
前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成し、
前記ライフタイム情報が時間軸上で重ならないm個(mは2以上の整数)の変数を選択し、
前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、
前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当て、
前記第1及び第2のレジスタを有する合成回路の回路情報を出力する、
動作合成プログラム。
【請求項15】
前記第1のレジスタの割り当ては、前記その他の変数を、前記第1のビット幅のビットと、前記第1のビット幅のビット以外のビットとに分割して、前記分割した前記第1のビット幅のビットに、前記第1のレジスタを割り当て、
前記第2のレジスタの割り当ては、前記分割した前記第1のビット幅のビット以外のビットに、前記第2のレジスタを割り当てる、
請求項14に記載の動作合成プログラム。
【請求項16】
前記mは2である、
請求項14または15に記載の動作合成プログラム。
【請求項17】
変数の演算動作を含む動作記述情報に基づいて、前記変数の演算動作のタイミングをスケジューリングしたデータフローグラフ情報を生成するスケジューリング部と、
前記スケジューリングされたデータフローグラフ情報に基づいて、前記変数でデータの保持が必要な期間であるライフタイム情報を前記変数毎に生成するライフタイム生成部と、
前記ライフタイム情報が時間軸上で重ならないm個(mは2以上の整数)の変数を選択する変数選択部と、
前記m個の変数に含まれる第1のビット幅として定義された第1の変数と、前記m個の変数に含まれるその他の変数内の前記第1のビット幅のビットとに、前記第1のビット幅の第1のレジスタを割り当て、前記その他の変数内の前記第1のビット幅のビット以外のビットに、第2のレジスタを割り当てるレジスタ割り当て部と、
前記第1及び第2のレジスタを有する合成回路の回路情報を出力する回路情報出力部と、
を備える動作合成装置。
【請求項18】
前記レジスタ割り当て部は、前記その他の変数を、前記第1のビット幅のビットと、前記第1のビット幅のビット以外のビットとに分割して、前記分割した前記第1のビット幅のビットに、前記第1のレジスタを割り当て、前記分割した前記第1のビット幅のビット以外のビットに、前記第2のレジスタを割り当てる、
請求項17に記載の動作合成装置。
【請求項19】
前記mは2である、
請求項17または18に記載の動作合成装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate


【公開番号】特開2013−109438(P2013−109438A)
【公開日】平成25年6月6日(2013.6.6)
【国際特許分類】
【出願番号】特願2011−252263(P2011−252263)
【出願日】平成23年11月18日(2011.11.18)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】