JP2007323606A - 動作合成装置 - Google Patents
動作合成装置 Download PDFInfo
- Publication number
- JP2007323606A JP2007323606A JP2006156518A JP2006156518A JP2007323606A JP 2007323606 A JP2007323606 A JP 2007323606A JP 2006156518 A JP2006156518 A JP 2006156518A JP 2006156518 A JP2006156518 A JP 2006156518A JP 2007323606 A JP2007323606 A JP 2007323606A
- Authority
- JP
- Japan
- Prior art keywords
- variable
- description
- stage
- register
- same value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】動作合成により生成されるパイプライン回路において、複数のイタレーションで同一の値となる変数に対して生成されるパイプラインレジスタの数を減らすことができる動作合成装置を提供する。
【解決手段】プログラミング言語によってハードウエアの構成を記述したプログラムに基づいて動作合成を行う動作合成装置(1)は、プログラムにおけるループ文中に記述された変数の中から、イタレーション間で同一の値をとり、かつハードウエアにおける複数のステージで利用される、同一値変数を抽出する同一値変数抽出部(13c)と、同一値変数抽出部によって抽出された前記同一値変数のための共通レジスタを作成し、かつ、前記同一値変数の値を前記共通レジスタから読み出すRTL記述を生成するRTL記述生成部(13d)とを有する。
【選択図】図1
【解決手段】プログラミング言語によってハードウエアの構成を記述したプログラムに基づいて動作合成を行う動作合成装置(1)は、プログラムにおけるループ文中に記述された変数の中から、イタレーション間で同一の値をとり、かつハードウエアにおける複数のステージで利用される、同一値変数を抽出する同一値変数抽出部(13c)と、同一値変数抽出部によって抽出された前記同一値変数のための共通レジスタを作成し、かつ、前記同一値変数の値を前記共通レジスタから読み出すRTL記述を生成するRTL記述生成部(13d)とを有する。
【選択図】図1
Description
本発明は、動作合成装置に関し、特に、パイプライン処理に関する動作合成装置に関する。
従来より、半導体装置の設計において、ソフトウエアプログラミング言語、例えばC言語、によるプログラム記述(以下、C記述と略すこともある)を用いて、半導体装置のハードウエア構成を設計し、レジスタトランスファレベル(以下、RTLという)の記述(以下、RTL記述という)を自動的に生成する動作合成ツールが広く利用されている。
C記述からRTL記述を生成する動作合成処理、すなわち高位合成処理では,C記述中にループ処理を記述することによって、動作合成処理においてパイプライン動作をする回路のRTL記述が生成される。このようなソフトウエア記述からパイプライン動作回路の記述を生成する技法は、ループパイプラインあるいはソフトウェアパイプラインとも呼ばれ、一般に利用されている。そして、パイプライン動作の構造を有するアークテクチャの合成方法の技術も種々提案されている(例えば、特許文献1参照)。
ループパイプライン技法は,ループ1回分の処理(すなわち1イタレーション)が最後まで終了する前に次のイタレーションを開始するようにRTL記述を生成する方法である。前のイタレーションの開始から次のイタレーションの開始までの時間は、イニシエーション・インターバル(Initiation Interval)と呼ばれる。ソフトウエアのループ内の各演算、すなわち1イタレーション中の各演算処理において、イニシエーション・インターバルの時間が経過するごとに、対応するハードウエアでは、その各演算処理に用いていた計算資源(レジスタなどの記憶素子、演算器などの論理回路等)は、次のイタレーションに明け渡される。そして、1イタレーションは、イニシエーション・インターバルの時間が経過するごとに、別の計算資源を用いて次の演算処理を継続する。このような計算資源の集まり中の各計算資源は、ステージ単位に分けられる。1イタレーションは、イニシエーション・インターバルごとに1つずつステージを移動する。すなわち、1イタレーションにおける全演算処理は、複数のステージを移動することにより最終的に終了する。
1イタレーション中のある演算処理が終了して次の演算処理を行うために、そのイタレーションが別のステージへ移動するとき、その移動前のステージでレジスタに記憶された値は、その移動後のステージで利用するために、複製する場合がある。これにより、前ステージのレジスタを、次のイタレーションが利用できるようになる。この複製された値を保存するためのレジスタは、パイプラインレジスタと呼ばれる。
C記述における各センテンスは、高位合成のスケジューリング処理により、いずれかのステージに対応付けられる。そして、C記述中のある変数が、複数のステージに出現するとき、高位合成の処理によってその変数を保存するためのパイプラインレジスタが生成される。
しかし、上述した合成方法の技術(特許文献1)に開示されているような従来のパイプラインレジスタの生成方式では、1イタレーションにおけるステージの移動にのみ着目して、必要なパイプラインレジスタが生成されている。そのため複数のイタレーションに関わる、同一の値の変数があっても、不必要なパイプラインレジスタが生成されてしまうという問題があった。
特開平8-44773号公報
そこで、本発明は、動作合成により生成されるパイプライン回路において、複数のイタレーションで同一の値となる変数に対して生成されるパイプラインレジスタの数を減らすことができる動作合成装置を提供することを目的とする。
本発明の一態様によれば、プログラミング言語によってハードウエアの構成を記述したプログラムに基づいて動作合成を行う動作合成装置であって、前記プログラムにおけるループ文中に記述された変数の中から、イタレーション間で同一の値をとり、かつ前記ハードウエアにおける複数のステージで利用される、同一値変数を抽出する同一値変数抽出部と、該同一値変数抽出部によって抽出された前記同一値変数のための共通レジスタを作成し、かつ、前記同一値変数の値を前記共通レジスタから読み出すRTL記述を生成するRTL記述生成部と、を有することを特徴とする動作合成装置が提供される。
本発明によれば、動作合成により生成されるパイプライン回路において、複数のイタレーションで同一の値となる変数に対して生成されるパイプラインレジスタの数を減らすことができる。
以下、図面を参照して本発明の実施の形態を説明する。
(第1の実施の形態)
まず図1に基づき、第1の実施の形態に係わる動作合成装置の処理を説明する。
(第1の実施の形態)
まず図1に基づき、第1の実施の形態に係わる動作合成装置の処理を説明する。
図1は、本実施の形態に係わる動作合成装置の構成を示すブロック図である。動作合成装置1は、コンピュータ装置であり、入出力装置、記憶装置、CPU等からなる。具体的には、動作合成装置1は、設計者であるユーザが各種命令を指示するための、キーボード等の入力装置11と、各種データの表示等を行う画面を有するモニタ等の表示装置12と、CPUを含み、各種処理を実行するデータ処理装置13と、各種データを記憶する記憶装置14とを含んで構成されている。
記憶装置14は、設計対象である半導体装置の構成を記述したC言語によるプログラム、すなわちC記述を記憶する記憶領域部14aと、そのC記述に高位合成、すなわち動作合成を行うことにより生成されたRTL言語によるプログラム、すなわちRTL記述を記憶する記憶領域部14bとを含む。C言語は、プログラミング言語の一つである。
データ処理装置13は、C記述読込部13aと、ステージ対応部13bと、非更新変数抽出部13cと、RTL記述生成部13dとを含む。各部13aから13dは、主としてソフトウエアにより実現されている。
C記述読込部13aは、ユーザの指示に応じて、記憶装置14の記憶領域部14aに記憶されたC記述を読み出す処理を行う処理部である。
ステージ対応部13bは、後述するように、読み出したC記述を解析しスケジューリングを行い、C記述中の各センテンス中の変数を、パイプライン動作の各ステージに対応付ける処理を行う処理部である。ステージ対応部13bは、さらに、対応付けられた各ステージで利用される変数の情報を、C記述の中から抽出する処理を行う。
ループ変数比較部としての非更新変数抽出部13cは、ループ中の変数をリストアップし、C記述中のセンテンス毎に変数の利用、及び更新をチェックし、イタレーション間での変数の値を比較する処理を行う比較処理部である。特に、非更新変数抽出部13cは、C記述の中の変数の中で、その値の更新が行われない変数、すなわち非更新変数を抽出するための処理を行う。言い換えると、非更新変数抽出部13cは、全てのイタレーションで同一の値をとる変数を抽出する処理を行う処理部である。
RTL記述生成部13dは、C記述に基づいてRTL記述を生成する処理を行う処理部である。生成されたRTL記述は、記憶領域部14bに記憶される。
次に、図2を用いて、パイプライン回路合成の対象となるC記述の例を説明する。図2は、ループ処理を含むC記述の例を示す図である。C記述は、パイプラインの対象となるループ文を含む。動作合成処理により、図2のループ文の部分に対応して、パイプライン動作の回路が作成される。図2のC記述のループ文では、7つの変数、具体的には、2つの配列変数a[N],g[N]と5つの変数b,c,d,e,fとが用いられている。図2に示すC記述は、配列変数a[N]と変数cを入力として、配列変数g[N]を出力する処理を示す。
ループ文を構成するfor文21は、ループボディ部22を含む。ループ文が、パイプライン合成の対象となるループである。ループボディ部22の第1のセンテンス21aは、配列変数a[N]から1つの値を読み出して、変数bに代入する処理が行われることを示している。
第2のセンテンス21bは、変数bと変数cとを乗算して、変数dを得る処理が行われることを示している。
第3のセンテンス21cは、変数bと変数cとを加算して、変数eを得る処理が行われることを示している。
第4のセンテンス21dは、変数dと変数eとを加算して、変数fを得る処理が行われることを示している。
第5のセンテンス21eは、変数cと変数fとを乗算して、配列変数g[N]を得る処理が行われることを示している。
以上の第1から第5のセンテンスの処理は、配列変数a[N]の変数iを0からNまで、iを1ずつインクリメントしながら、iがNになるまで繰り返される。よって、このようなC記述から動作合成して得られたRTL記述は、第1から第5のセンテンスに対応した並列処理を実行するハードウエア回路の構成を示す記述となる。
第2のセンテンス21bは、変数bと変数cとを乗算して、変数dを得る処理が行われることを示している。
第3のセンテンス21cは、変数bと変数cとを加算して、変数eを得る処理が行われることを示している。
第4のセンテンス21dは、変数dと変数eとを加算して、変数fを得る処理が行われることを示している。
第5のセンテンス21eは、変数cと変数fとを乗算して、配列変数g[N]を得る処理が行われることを示している。
以上の第1から第5のセンテンスの処理は、配列変数a[N]の変数iを0からNまで、iを1ずつインクリメントしながら、iがNになるまで繰り返される。よって、このようなC記述から動作合成して得られたRTL記述は、第1から第5のセンテンスに対応した並列処理を実行するハードウエア回路の構成を示す記述となる。
各変数の値を得るために、変数a[N],b,c,d,e,fは、それぞれ、各センテンスにおいて代入あるいは演算のために用いられている。特に、図2において、変数cは、第2、第3および第5のセンテンスにおいて、他の変数を求めるために利用されている。
従来の動作合成処理によれば、図2のC記述を動作合成すると、図3の左側のRTL記述31が生成される。図3は、動作合成処理により得られるRTL記述の例を示す図である。
図3の左側のRTL記述31は、図2のC記述から生成される。本実施の形態は、ハードウエア回路のステージとC記述のセンテンスとが、一対一に対応している例である。RTL記述31の場合、変数cが、C記述の第2、第3及び第5のセンテンスに対応する各ステージにおいて利用されるようにするために、変数cの値は更新されずに同一であるにも拘わらず、ステージ毎に、変数c用のパイプラインレジスタが生成されるようにRTL記述31が生成される。図3では、変数cのために、矢印で示すように3つの代入文Dが記述されており、その図3のRTL記述31によれば、図4に示すようなハードウエア回路が生成される。
図4は、従来の動作合成により生成されるハードウエア回路の構成を説明するための模式図である。
図4の回路は、ステージ1から5を有する。ステージ1から5は、それぞれ図2に示すループボディ部22のセンテンス21aから21eに対応する。ステージ1は、配列変数a[i]の値とcの値を、それぞれレジスタ41とレジスタ42にストアする処理を行う入力処理のステージである。このステージ1は、第1のセンテンス21aに対応する。ステージ2は、配列変数a[i]の値をストアしているレジスタ41の値と、変数cの値をストアしているレジスタ42の値とを、乗算器43により乗算する処理を行うステージである。このステージ2は、第2のセンテンス21bに対応する。ステージ3は、変数b,cの値を、加算器47により加算する処理を行うステージである。このステージ3は、第3のセンテンス21cに対応する。ステージ4は、変数d,eの値を、加算器51により加算する処理を行うステージである。このステージ4は、第4のセンテンス21dに対応する。そして、ステージ5は、変数cの値と変数fを、乗算器54により乗算する処理を行うステージである。このステージ5は、第5のセンテンス21eに対応する。
図4の回路は、ステージ1から5を有する。ステージ1から5は、それぞれ図2に示すループボディ部22のセンテンス21aから21eに対応する。ステージ1は、配列変数a[i]の値とcの値を、それぞれレジスタ41とレジスタ42にストアする処理を行う入力処理のステージである。このステージ1は、第1のセンテンス21aに対応する。ステージ2は、配列変数a[i]の値をストアしているレジスタ41の値と、変数cの値をストアしているレジスタ42の値とを、乗算器43により乗算する処理を行うステージである。このステージ2は、第2のセンテンス21bに対応する。ステージ3は、変数b,cの値を、加算器47により加算する処理を行うステージである。このステージ3は、第3のセンテンス21cに対応する。ステージ4は、変数d,eの値を、加算器51により加算する処理を行うステージである。このステージ4は、第4のセンテンス21dに対応する。そして、ステージ5は、変数cの値と変数fを、乗算器54により乗算する処理を行うステージである。このステージ5は、第5のセンテンス21eに対応する。
ステージ2では、レジスタ41と42にそれぞれストアされた2つの値を乗算してその結果は変数dのレジスタ46にストアされる。ステージ3では、レジスタ41の値が転送されてストアされた変数bのレジスタ44と、レジスタ42の値が転送されてストアされた変数cのレジスタ45とにストアされた2つの値を加算してその結果は変数eのレジスタ50にストアされる。ステージ4では、レジスタ46の値が転送されてストアされた変数dのレジスタ49と、レジスタ50とにストアされた2つの値を加算してその結果はレジスタ変数fの53にストアされる。ステージ5では、レジスタ48の値が転送されてストアされた変数cのレジスタ52と、レジスタ53にストアされた2つの値を乗算してその結果は配列変数g[i]の値として出力される。
特に、ステージ3から5では、それぞれのステージで変数cを利用するために、あるいは次のステージへ変数cの値を転送するためにパイプラインレジスタであるレジスタ45、48及び52が設けられている。変数cの値は更新されずに同一値であるにも拘わらず、従来のようにC記述をそのまま動作合成処理すると、単に値をコピーして保持するためのレジスタ45、48及び52が生成されてしまう。
そこで、本実施の形態に係る動作合成装置1は、C記述を解析して複数のイタレーションにおける変数の変化を検出して、図5に示すようなRTL記述が得られるように、後述するような処理を行う。本実施の形態の動作合成装置1によれば、図2のC記述を動作合成すると、図3の右側のRTL記述32が生成される。
図3の右側のRTL記述32では、左側のRTL記述31における、変数cのための、矢印で示すように3つの代入文Dは無い。図3の右側のRTL記述32を生成する処理については、後述する。図3のRTL記述32によれば、図5に示すようなハードウエア回路が生成される。
図5は、本実施の形態の動作合成装置1により生成されるハードウエア回路の構成を説明するための模式図である。図5では、図4と同じ構成要素については、同じ符号を付す。
図5に示すように、本実施の形態の動作合成装置1により生成されるハードウエア回路では、変数c用のレジスタ61は、1つだけ生成され、図4と比較すると、レジスタの数が3つ減少している。
次に、以上のような構成にかかる動作合成装置1の処理の流れの例を説明する。図6は、本実施の形態に係わる動作合成装置1の処理の流れの例を示すフローチャートである。
ユーザの作成したC記述、ここでは、図2のループ文を含むC記述は、動作合成装置1の記憶装置14の記憶領域部14aに記憶されている。ユーザは、動作合成装置1に対して、記憶領域部14aに記憶されたC記述を指定し、そのC記述からRTL記述を生成する動作合成処理を行うように、動作合成装置1に指示を入力する。動作合成装置1は、その指示に応じて、指定されたC記述の動作合成を行うべく、図6の処理を実行する。
まず、動作合成装置1のC記述読込部13aは、指定されたC記述を、データ処理装置13のメモリ(図示せず)上に読み込む(ステップS1)。
次に、ステージ対応部13bは、C記述に対してスケジューリングを行い、各センテンスを、各パイプラインステージに対応させる処理が行われる(ステップS2)。この結果、パイプラインステージと各センテンスの変数との対応付けの情報、すなわち対応関係の情報が得られる。
そのために、ステージ対応部13bは、まず、ループボディ部22中に、複数のステージで利用される変数の情報の抽出を行う。図2の場合、ループ文の1イタレーションの間にある変数は、変数a[i], b, c, d, e, f, g[i], iである。そして、ステージ対応部13bは、C記述と、スケジューリングにより得られたパイプライン回路のステージの情報とを対応させ、これらの変数の中から、複数のステージにおいて利用される変数を抽出する。図2の場合、複数のステージにおいて利用される変数は、変数b, c, d, e, f, iである。
ステージ対応部13bにおける変数の情報及び対応関係の情報の抽出は、C記述のプログラム言語をテキスト解析により、行うことができる。例えば、C記述中の代入式「=」、演算子「*」、「+」等に基づいてテキスト文字の変数を特定し、代入式の左右にいずれかにあるかをチェックする、等により、変数の情報の抽出を行うことができる。また、2以上のステージに現れる変数があるかをチェックすることによって、2以上のステージで利用されている変数の情報も抽出することができる。そして、抽出された変数の情報と、ステージの情報とが対応付けされる。
続いて、非更新変数抽出部13cにより、ループ文中の変数をリストアップし,C記述中のセンテンス毎に変数の利用状況、更新状況をチェックし、イタレーション間での変数の値を比較し、すべてのイタレーションにおいて更新のない変数を抽出する処理が行われる(ステップS3)。具体的には、非更新変数抽出部13dは、C記述に対してテキスト解析を行い、センテンス21aから21eについて、代入式「=」の左側に存在する変数、すなわち代入操作により1イタレーションの間に更新される変数を抽出する。さらに、非更新変数抽出部13dは、代入式「=」の左側に存在しない変数であるが、イタレーションが切り替わるごとに所定の値ずつ、ここでは1ずつ、増分し変化する変数を抽出する。
図2の場合、非更新変数抽出部13cは、ループ文の1イタレーションの間に在る変数a[i], b, c, d, e, f, g[i], iをまず抽出してリストアップする。そして、非更新変数抽出部13cは、その変数a[i], b, c, d, e, f, g[i], iの中から、代入操作により1イタレーションの間に更新される変数b, d, e, f, g[ i ]と、イタレーションが切り替わるごとに所定の値だけ変化する変数a[ i ] , iとを除いた変数を抽出する。このようにして最後に抽出されて残った変数は、変数cであり、変数cは、すべてのイタレーションの間で同一値を取る変数である。このようにして、非更新変数抽出部13cは、すべてのイタレーションで同一値を取る変数の情報を抽出する処理を行う。
RTL記述生成部13dは、ステージ対応部13bと非更新変数抽出部13cの結果をもとに、削減できるパイプラインレジスタを特定し、C記述からRTL記述を生成する処理を行う(ステップS4)。
具体的には、RTL記述生成部13dは、複数のステージで利用され、かつ全てのイタレーションで同一値を取る変数は変数cであるので、変数cのパイプラインレジスタを削減するために、変数cを保存するレジスタを1つだけ生成するようにRTL記述を生成する。ステップS4の中は、2つのステップS5,S6を有している。
ステップS4では、同一値の変数cを保存するレジスタを1つだけ生成するために、図3の右側に示すように、RTL記述生成部13dは、RTL記述32中に、所定のRTL記述部33を追加する記述追加処理(ステップS5)を行う。さらに、RTL記述生成部13dは、変数cについては、すべてのステージで同じレジスタからの読み出しとなるようにRTL記述を生成あるいは変更する生成処理(ステップS6)も行う。
RTL記述生成部13dによって加えられる所定のRTL記述部33は、図3に示すように、最初のイタレーション時にだけ変数cのレジスタが生成されるようにする記述を含んでいる。言い換えると、所定のRTL記述部33は、複数のステージで利用され、かつ全てのイタレーションで同一値を取る変数cについては、最初のイタレーションのときに変数cのレジスタを1つだけ生成するためのRTL記述部である。
所定のRTL記述部33は、リセット(rst)信号が入ったときに、状態を示す変数stateを所定の状態(1’b0)とし、そして、変数stateがその所定の状態(1’b0)のときに、変数cに入力データの値を代入するためのレジスタ61(図5)を生成し、入力された変数cの値をそのレジスタに書き込むという記述である。
具体的には、記述追加処理(ステップS5)では、最初のイタレーションかどうか(ここでは、ステージ1の最初のステージかどうか)に応じて、変数stateの内容を変更するRTL記述部34が加えられる。そして、記述追加処理(ステップS5)では、最初のイタレーションのときにのみ、レジスタ61を生成し、そのレジスタ61に入力データの値cinを変数cとして書き込むRTL記述部35も加えられる。
その結果、レジスタ61に書き込まれた変数cの値は、必要とする全てのステージで、レジスタ61から読み出すことが可能となる。
そして、RTL記述生成部13dは、各ステージにおいて変数cが用いられるときは、共通のレジスタ61にストアされている値を読み出すように、変数cの部分を記述する。図3のRTL記述部36では、矢印で示す各センテンスEでは、変数cが同じレジスタから読み出されるように記述されている。
すなわち、RTL記述生成部13dは、RTL記述中に、always文を用いて、最初のイタレーションにおいて、共通のレジスタを作成する処理を記述したRTL記述部33を挿入する。そして、RTL記述生成部13dは、その後のイタレーションでは、変数cについてはその共通のレジスタにストアされた値を読み込むようにするだけの処理にするように、C記述部36を生成する。
挿入されるRTL記述部33は、記憶装置14に予め記憶されたRTL記述のテンプレートを用いて、変数名等を置き換えることによって、生成することができる。例えば、図3においては、矢印で示すセンテンスF中の変数だけを、非更新変数抽出部13cにおいて抽出された、全てのイタレーションで同一値を取る変数cの情報を用いて、置き換えるだけで、RTL記述部33は生成され得る。
RTL記述部36は、従来の合成方法で生成される各ステージのRTL記述部から、同一値を取る変数に関する代入文を削除し、その変数を、共通の変数に置き換えることによって、生成することができる。図3の場合、RTL記述部36は、従来の合成方法で生成されるRTL記述部31の各ステージの記述部から、矢印で示す変数cに関する代入文D,Gを削除し、変数cに関する変数を全て、共通の変数cに置き換えるような処理を行うことをよって、生成することができる。
すなわち、RTL記述生成部13dは、RTL記述中に、ハードウエアにおける複数のステージで利用され、かつ同一値を取る変数については、すべてのステージで同じレジスタからの読み出しとなるようにRTL記述を生成する。その結果、生成されるハードウエア回路では、図5に示すように、変数c用のレジスタ61は、1つだけ生成され、図4と比較すると、レジスタの数が3つ減少している。
以上のように、本実施の形態によれば、複数のステージで利用され、かつ全てのイタレーションで同一値を取る変数について、複製用のパイプラインレジスタを生成することがなくなるので、レジスタの数を減らすことができる。その結果、レジスタは消費電力が大きいので,レジスタの数を削減することで、設計対象の半導体装置は、物理的なサイズを小さくでき、かつ、消費電力の小さい回路を得ることができる。
なお、上述したステージ対応部13bと非更新変数抽出部13cの処理順序は、図1では、ステージ対応部13bの後に非更新変数抽出部13cが実行されるようになっているが、ステージ対応部13bと非更新変数抽出部13cとは互いに並列的に実行されて、それぞれの結果情報を、RTL記述生成部13dに出力するような構成でもよい。
(第2の実施の形態)
次に、第2の実施の形態を、図7から図13を用いて説明する。
第2の実施の形態の動作合成装置は、ループ文中において、それぞれが同一値をとる複数の変数にのみ依存して生成される変数の場合に、複製用のパイプラインレジスタを生成しないようにした点に特徴がある。
次に、第2の実施の形態を、図7から図13を用いて説明する。
第2の実施の形態の動作合成装置は、ループ文中において、それぞれが同一値をとる複数の変数にのみ依存して生成される変数の場合に、複製用のパイプラインレジスタを生成しないようにした点に特徴がある。
図7は、本実施の形態に係わる動作合成装置の構成を示すブロック図である。図7では、図1の同一の構成要素については同一の符号を付し、説明は省略する。図7に示すように、本実施の形態に係る動作合成装置1Aは、第2の非更新変数抽出部13eを有する点と、RTL記述生成部13fの内容がRTL記述生成部13dと異なる点が、第1の実施の形態と異なる。非更新変数抽出部13eとRTL記述生成部13fの処理内容については後述する。
図8は、本実施の形態に関わるC記述の例を示す図である。図8のC記述も、ループ処理を含むC記述である。図8のC記述のループ文では、7つの変数、具体的には、3つの配列変数a[N],b[N],z[N]と7つの変数c,d,e,f,g,x,yとが用いられている。図8に示すC記述は、配列変数a[N],b[N]と変数c,dを入力として、配列変数z[N]を出力する処理を示す。
ループ文を構成するfor文71は、ループボディ部72を含む。ループ文が、パイプライン合成の対象となるループである。ループボディ部72の第1のセンテンス71aは、配列変数a[N]から1つの値を読み出して、変数eに代入する処理が行われることを示している。第2のセンテンス71bも、同様に、配列変数b[N]から1つの値を読み出して、変数fに代入する処理が行われることを示している。
第3のセンテンス71cは、変数cと変数dとを加算して、変数gを得る処理が行われることを示している。第4のセンテンス71dは、変数eと変数gとを乗算して、変数xを得る処理が行われることを示している。第5のセンテンス71eは、変数fと変数gとを加算して、変数yを得る処理が行われることを示している。第6のセンテンス71fは、変数xと変数yとを乗算して、配列変数z[N]を得る処理が行われることを示している。
以上の第1から第6のセンテンスの処理は、配列変数a[N]とb[N]の変数iをそれぞれ0からNまで、iを1ずつインクリメントしながら、iがNになるまで繰り返される。よって、このようなC記述から動作合成して得られたRTL記述は、第1から第6のセンテンスに基づく、並列処理を実行するハードウエア回路の構成を示す記述となる。
第3のセンテンス71cは、変数cと変数dとを加算して、変数gを得る処理が行われることを示している。第4のセンテンス71dは、変数eと変数gとを乗算して、変数xを得る処理が行われることを示している。第5のセンテンス71eは、変数fと変数gとを加算して、変数yを得る処理が行われることを示している。第6のセンテンス71fは、変数xと変数yとを乗算して、配列変数z[N]を得る処理が行われることを示している。
以上の第1から第6のセンテンスの処理は、配列変数a[N]とb[N]の変数iをそれぞれ0からNまで、iを1ずつインクリメントしながら、iがNになるまで繰り返される。よって、このようなC記述から動作合成して得られたRTL記述は、第1から第6のセンテンスに基づく、並列処理を実行するハードウエア回路の構成を示す記述となる。
各変数の値を得るために、変数a[N],b[N],c,d,e,f,g,x,yは、それぞれ、各センテンスにおいて代入あるいは演算のために用いられている。特に、図8において、変数cとdは、第3のセンテンスにおいて、他の変数を求めるために利用されている。
従来の動作合成処理によれば、図8のC記述を動作合成すると、図9のRTL記述81が生成される。図9は、従来の動作合成処理により得られるRTL記述の例を示す図である。図10は、従来の動作合成により生成されるハードウエア回路の構成を説明するための模式図である。
図9のRTL記述81は、図8のC記述から生成される。本実施の形態は、ハードウエア回路のステージとC記述のセンテンスとが、一対一に対応していない例である。RTL記述81の場合、それぞれ同一値をとる変数cとdとを加算して生成された変数gの値が、更新されずに同一であるにも拘わらず、変数gの値をC記述の第4及び第5のセンテンスに対応する各ステージにおいて利用されるようにするために、変数g用のパイプラインレジスタが生成される。図9では、変数gのために、矢印で示すように1つの代入文D1が記述されており、その図9のRTL記述81によれば、図10に示すようなハードウエア回路が生成される。
図10の回路は、ステージ1から5を有する。ステージ1は、変数c,dの値と配列変数a[i], b[i]の値とを、それぞれレジスタ91,92,93,94にストアする処理を行う入力処理のステージである。このステージ1は、第1及び第2のセンテンス71aと71bに対応する。ステージ2は、変数cとdの値をストアしているレジスタ91と92のそれぞれの値を、加算器95により加算する処理を行うステージである。このステージ2は、第3のセンテンス71cに対応する。ステージ3は、変数eと変数gの値を、乗算器99により乗算する処理を行うステージである。このステージ3は、第4のセンテンス71dに対応する。ステージ4は、変数fとgの値を、加算器103により加算する処理を行うステージである。このステージ4は、第5のセンテンス71eに対応する。そして、ステージ5は、変数xと変数yを、乗算器106により乗算する処理を行うステージである。このステージ5は、第6のセンテンス71fに対応する。
ステージ2では、レジスタ91と92にそれぞれストアされた2つの値を乗算してその結果の値は、変数gのレジスタ96にストアされる。ステージ3では、レジスタ93の値が転送されてストアされた変数eのレジスタ97と、レジスタ96の値を乗算してその結果は変数xのレジスタ101にストアされる。ステージ4では、レジスタ96の値が転送されてストアされた変数gのレジスタ100と、レジスタ94の値がレジスタ98を介して転送されてストアされた変数fのレジスタ102とにストアされた2つの値を加算してその結果は変数yのレジスタ105にストアされる。ステージ5では、レジスタ101の値が転送されてストアされた変数xのレジスタ104の値と、変数yのレジスタ105の値を乗算してその結果は配列変数z[i]の値として出力される。
特に、ステージ3では、ステージ4で変数gを利用するためにパイプラインレジスタであるレジスタ100が設けられている。変数gの値は更新されずに同一値であるにも拘わらず、従来のようにC記述をそのまま動作合成処理すると、単に値をコピーして保持するためのレジスタ100が生成されてしまう。
そこで、本実施の形態に係る動作合成装置1Aは、C記述を解析して複数のイタレーションにおける変数の変化を検出して、図11に示すようなRTL記述が得られるように、後述するような処理を行う。本実施の形態の動作合成装置1Aによれば、図8のC記述を動作合成すると、図11のRTL記述82が生成される。図11は、本実施の形態に係る動作合成装置により生成されたRTL記述の例を示す図である。
図11のRTL記述82では、図9のRTL記述81における、変数gのための、矢印で示すように代入文D1は無い。図11のRTL記述82を生成する処理については、後述する。図11のRTL記述82によれば、図12に示すようなハードウエア回路が生成される。
図12は、本実施の形態の動作合成装置1Aにより生成されるハードウエア回路の構成を説明するための模式図である。図12では、図10と同じ構成要素については、同じ符号を付す。
図12に示すように、本実施の形態の動作合成装置1Aにより生成されるハードウエア回路では、変数g用のレジスタ111は、1つだけ生成され、図10と比較すると、レジスタの数が1つ減少している。
次に、以上のような構成にかかる動作合成装置1Aの処理の流れの例を説明する。図13は、本実施の形態に係わる動作合成装置1Aの処理の流れの例を示すフローチャートである。
ユーザの作成したC記述、ここでは、図8のループ文を含むC記述は、動作合成装置1Aの記憶装置14の記憶領域部14aに記憶されている。ユーザは、動作合成装置1に対して、記憶領域部14aに記憶されたC記述を指定し、そのC記述からRTL記述を生成する動作合成処理を行うように、動作合成装置1Aに指示を入力する。動作合成装置1Aは、その指示に応じて、指定されたC記述の動作合成を行うべく、図13の処理を実行する。なお、図6における処理と同じ処理については、同じ符号を付す。
まず、動作合成装置1のC記述読込部13aは、指定されたC記述を、データ処理装置13のメモリ(図示せず)上に読み込む(ステップS1)。
次に、ステージ対応部13bは、C記述に対してスケジューリングを行い、各センテンスを、各パイプラインステージに対応させる処理が行われる(ステップS2)。この結果、パイプラインステージと各センテンスの変数との対応付けの情報、すなわち対応関係の情報が得られる。
ステージ対応部13bは、ループボディ部72中に、複数のステージで利用される変数の情報の抽出を行う。図8の場合、ループ文の1イタレーションの間に在る変数は、変数a[i], b[i], c, d, e, f, g, x, y, z[i], iである。ステージ対応部13bは、C記述と、スケジューリングにより得られたパイプライン回路のステージの情報とを対応させ、これらの変数の中から、複数のステージにおいて利用される変数を抽出する。図8の場合、複数のステージにおいて利用される変数は、変数e, f, g, x, y, iである。
続いて、非更新変数抽出部13cにより、ループ文中の変数をリストアップし,C記述中のセンテンス毎に変数の利用状況、更新状況をチェックし、イタレーション間での変数の値を比較し、全てのイタレーションにおいて更新のない変数を抽出する処理が行われる(ステップS3)。
非更新変数抽出部13cは、ループ文中での変数の利用等をチェックし、すべてのイタレーション間での変数の値を比較する比較処理部である。図8の場合、非更新変数抽出部13cは、ループ文の1イタレーション中の変数a[i], b[i], c, d, e, f, g, x, y, z[i], iをまず抽出してリストアップする。そして、非更新変数抽出部13cは、その変数a[i], b[i], c, d, e, f, g, x, y, z[i], iの中から、代入操作により1イタレーションの間に更新される変数e, f, g, x, y, z[ i ]と、イタレーションが切り替わるごとに所定の値だけ変化する変数a[ i ] , b[i] , z[i], iとを除いた変数を抽出する。このようにして最後に抽出されて残った変数は、変数c, dであり、変数cは、すべてのイタレーションの間で同一値を取る変数である。このようにして、非更新変数抽出部13cは、すべてのイタレーションで同一値を取る変数の情報を抽出する処理を行う。
さらに、ループ変数比較部としての非更新変数抽出部13eは、非更新変数抽出部13cにおいて抽出された同一値をとる変数のみから求まる変数であって、複数のステージで利用されるものを抽出する処理を行う(ステップS11)。非更新変数抽出部13eは、1イタレーションの中で、同一値をとる変数のみに依存して更新され、複数のステージで利用される処理を、ループ文の中のセンテンスの代入式の左右の変数を比較する比較処理により特定し、同一値をとる変数のみから求まる変数であって、複数のステージで利用されるものを抽出する。図8の場合、変数gは、非更新変数抽出部13cにおいて抽出された、すべてのイタレーションで同一値を取る変数c, dのみから求まる変数であり、かつ複数のステージで利用される。ここでは、変数gは、変数cとdの加算により得られる変数であるので、変数gもすべてのイタレーションの中では定数となる。なお、同一値をとる変数のみから求まる変数としては、図8の場合には示されていないが、他にも、変数cのみから求まる変数、及び変数dのみから求まる変数がある。
RTL記述生成部13fは、ステージ対応部13bと非更新変数抽出部13eの結果をもとに、削減できるパイプラインレジスタを特定し、C記述からRTL記述を生成する処理を行う(ステップS12)。
具体的には、RTL記述生成部13fは、同一値を取る変数c, dのみから求まる変数は変数gであるので、変数gのパイプラインレジスタを削減するために、変数gを保存するレジスタを1つだけ生成するようにRTL記述を生成する。
ステップS12では、変数gを保存するレジスタを1つだけ生成するために、図11に示すように、RTL記述生成部13fは、RTL記述82中に、所定のRTL記述部83を追加する記述追加処理(ステップS13)を行う。さらに、その所定のRTL記述生成部13fは、変数gについては、他のステージで同じレジスタからの読み出しとなるようにRTL記述を生成あるいは変更する生成処理(ステップS14)も行う。
RTL記述生成部13fによって加えられる所定のRTL記述部83は、図11に示すように、最初のイタレーションであって、かつ変数gを生成するステージの時に、変数gのレジスタが生成されるようにするRTL記述を含んでいる。よって、所定のRTL記述部83は、複数のステージで利用され、かつ同一値を取る変数c, dのみから求まる変数gについては、最初のイタレーションであって、かつ変数gを生成するステージの時に変数gのレジスタを1つだけ生成するためのRTL記述部である。ここでは、変数gは、ステージ2のときに更新すなわち生成されるので、RTL記述部83は、最初のイタレーションのステージ2のときに、レジスタを生成している。
所定のRTL記述部83は、リセット(rst)信号が入ったときに、状態を示す変数stateを所定の状態(2’b00)とし、そして、変数stateが2ステージ目の状態を示す所定の状態(2’b01)を検出できるようにし、最初のイタレーションのステージ2のタイミングでレジスタ111(図12)を生成し、変数gの値をそのレジスタに書き込むという記述である。
具体的には、記述追加処理(ステップS13)では、最初のイタレーションであって、変数gを生成するステージ(ここでは、ステージ2)になったときに、変数stateの内容を変更するというRTL記述部84が加えられる。そして、記述追加処理(ステップS13)では、最初のイタレーションのステージ2のときに、変数gのレジスタ111を生成し、そのレジスタ111に、変数gとして書き込むというRTL記述部85も加えられる。
その結果、レジスタ111に書き込まれた変数gの値は、必要とする全てのステージで、レジスタ111から読み出すことが可能となる。
そして、RTL記述生成部13fは、各ステージにおいて変数gが用いられるときは、共通のレジスタ111にストアされている値を読み出すように、変数gの部分を記述する。図11のRTL記述部86では、矢印で示す各センテンスE1では、変数gが同じレジスタから読み出されるように記述されている。
すなわち、RTL記述生成部13fは、RTL記述中に、always文を用いて、最初のイタレーションの変数gを生成するステージの時に、共通のレジスタを作成する処理を記述したRTL記述部83を挿入する。そして、RTL記述生成部13fは、その後のイタレーションでは、変数gについてはその共通のレジスタにストアされた値を読み込むようにするだけの処理にするように、C記述部86を生成する。
挿入されるRTL記述部83も、第1の実施の形態のRTL記述部33と同様に、記憶装置14に予め記憶された、ステージ数に応じたRTL記述のテンプレートを用いて、変数名等を置き換えることによって、生成することができる。例えば、図11においては、矢印で示すセンテンスF1中の変数だけを、非更新変数抽出部13cにおいて抽出された、同一値を取る変数c, dのみから求まる変数gの情報を用いて、置き換えるだけで、RTL記述部83は生成され得る。
RTL記述部86は、従来の合成方法で生成される各ステージのRTL記述部から、同一値を取る変数に関する代入文を削除し、その変数を、共通の変数に置き換えることによって、生成することができる。図11の場合、RTL記述部86は、従来の合成方法で生成されるRTL記述部81の各ステージの記述部から、矢印で示す変数gに関する代入文D1を削除し、矢印で示す代入文D2における変数gに関する変数を全て、共通の変数gに置き換えるような処理を行うことをよって、生成することができる。
すなわち、RTL記述生成部13fは、RTL記述中に、ハードウエアにおける複数のステージで利用され、かつ同一値を取る変数のみから求まる変数については、すべてのステージで同じレジスタからの読み出しとなるようにRTL記述を生成する。その結果、生成されるハードウエア回路では、図12に示すように、変数g用のレジスタ111は、1つだけ生成され、図10と比較すると、レジスタの数が1つ減少している。
以上のように、本実施の形態によれば、ハードウエアにおける複数のステージで利用され、かつ同一値を取る変数のみから求まる変数について、複製用のパイプラインレジスタを生成することがなくなるので、レジスタの数を減らすことができる。その結果、レジスタは消費電力が大きいので,レジスタの数を削減することで、設計対象の半導体装置は、物理的なサイズを小さくでき、かつ、消費電力の小さい回路を得ることができる。
なお、応用例として、動作合成装置は、第1の実施の形態の処理と第2の実施の形態の処理の両方の処理を組み合わせた装置であってもよい。図14は、その両方の処理部を有する動作合成装置1Bの構成を示すブロック図である。図14では、図1及び図7の同一の構成要素については同一の符号を付している。
第1の実施の形態で生成されるレジスタと、第2の実施の形態で生成されるレジスタは異なるので、第1の実施の形態と第2の実施の形態の2つの処理を併せて行うようにすることによって、第1と第2の実施の形態のそれぞれの効果を生じさせることができる。
その場合、図14に示すように、本実施の形態に係る動作合成装置1BのRTL記述部13gは、非更新変数抽出部13cにおいて得られた、同一値を取る変数についてすべてのステージで同じレジスタからの読み出しとなるようにRTL記述を生成する処理(ステップS4)と、第2の非更新変数抽出部13eにおいて得られた、同一値を取る変数のみから求まる変数について複製用のパイプラインレジスタを生成しないようにRTL記述を生成する処理(ステップS12の処理)の両方の処理を行う。このような構成にすることにより、動作合成装置1Bは、本実施の形態の上述した効果に加えて、第1の実施の形態の効果を生じさせる。
なお、上述したステージ対応部13bと、非更新変数抽出部13c,13eの処理順序は、図7では、ステージ対応部13bの後に非更新変数抽出部13c,13eが実行されるようになっているが、ステージ対応部13bと非更新変数抽出部13c,13eとは互いに並列的に実行されて、それぞれの結果情報を、RTL記述生成部13fに出力するような構成でもよい。図14においても、同様である。
(第3の実施の形態)
次に、第3の実施の形態を、図15から図20を用いて説明する。
第3の実施の形態の動作合成装置は、ループ文中において、全てのイタレーションにおいて同一値をとるのではなく、所定回数のイタレーション毎に同一値をとる変数にのみ依存して生成される変数の場合に、複製用のパイプラインレジスタを生成しないようにした点に特徴がある。
次に、第3の実施の形態を、図15から図20を用いて説明する。
第3の実施の形態の動作合成装置は、ループ文中において、全てのイタレーションにおいて同一値をとるのではなく、所定回数のイタレーション毎に同一値をとる変数にのみ依存して生成される変数の場合に、複製用のパイプラインレジスタを生成しないようにした点に特徴がある。
図15は、本実施の形態に係わる動作合成装置の構成を示すブロック図である。図15では、図1の同一の構成要素については同一の符号を付し、説明は省略する。図15に示すように、本実施の形態に係る動作合成装置1Cは、繰り返し変数抽出部13hを有する点と、RTL記述生成部13iの内容が、RTL記述生成部13dとは異なる点が、第1の実施の形態と異なる。繰り返し変数抽出部13hとRTL記述生成部13iの処理内容については後述する。
図16は、本実施の形態に関わるC記述の例を説明するための図である。図16のC記述も、ループ処理を含むC記述である。動作合成処理により、図16のループ文の部分に対応して、パイプライン動作の回路が作成される。図16のC記述のループ文では、7つの変数、具体的には、4つの配列変数a[N],b[N],c[2],y[N]と6つの変数d,e,f,g,h,x,とが用いられている。図16に示すC記述は、配列変数a[N],b[N],c[2]と変数dを入力として、配列変数y[N]を出力する処理を示す。
図16のC記述は、第1及び第2の実施の形態に係る装置に適用しても、複数のステージで利用され、かつすべてのイタレーションで同一値を取る変数は存在しないが、上述したように、本実施の形態に係る装置に適用すると、所定のイタレーション間隔では同一値をとる変数についての不必要なパイプラインレジスタの生成をしないようにすることができる。
ループ文を構成するfor文121は、ループボディ部122を含む。ループ文が、パイプライン合成の対象となるループである。ループボディ部122の第1のセンテンス121aは、配列変数a[N]から1つの値を読み出して、変数dに代入する処理が行われることを示している。第2のセンテンス121bは、配列変数b[N]から1つの値を読み出して、変数eに代入する処理が行われることを示している。第3のセンテンス121cは、配列変数c[N]から1つの値を読み出して、変数fに代入する処理が行われることを示している。
第4のセンテンス121dは、変数dと変数fとを乗算して、変数gを得る処理が行われることを示している。第5のセンテンス121eは、変数eと変数fとを乗算して、変数hを得る処理が行われることを示している。第6のセンテンス121fは、変数gと変数hとを加算して、変数xを得る処理が行われることを示している。第7のセンテンス121gは、変数xと変数fとを加算して、配列変数y[N]を得る処理が行われることを示している。
以上の第1から第7のセンテンスの処理は、配列変数a[N],b[N]の変数iを0からNまで、iを1ずつインクリメントしながら、iがNになるまで繰り返される。
以上の第1から第7のセンテンスの処理は、配列変数a[N],b[N]の変数iを0からNまで、iを1ずつインクリメントしながら、iがNになるまで繰り返される。
特に、第3のセンテンスの処理では、配列変数c[2]は、演算(i%2)の値によって2つの値を取り得る。すなわち、整数である変数iが0からNまで変化するが、その変数iを2で除算して、その余り(0又は1)の値が、配列変数c[2]の値となる。よって、配列変数c[2]は、変数iが0からNまで変化するときに、0と1の値を所定の間隔で、ここでは交互に繰り返すものとなる。
その結果、変数fは、その0と1のいずれかの値となるので、変数fを用いた処理を行う第4,第5及び第7のセンテンス121d,121e、121gでは、所定の間隔で変化する変数fが用いられる。
このようなC記述から動作合成して得られたRTL記述は、第1から第7のセンテンスに対応した並列処理を実行するハードウエア回路の構成を示す記述となる。
従来の動作合成処理によれば、図16のC記述を動作合成すると、図17の左側のRTL記述131が生成される。図17は、動作合成処理により得られるRTL記述の例を示す図である。
図17の左側のRTL記述131は、図16のC記述から生成される。本実施の形態では、ハードウエア回路のステージとC記述のセンテンスとが、一対一に対応していない。RTL記述131の場合、変数fが、C記述の第4、第5及び第7のセンテンスに対応する各ステージにおいて利用されるようにするために、対応するステージにおいて、変数f用のパイプラインレジスタが生成されるようにRTL記述131が生成される。図17では、変数fのために、矢印D2で示すように2つの代入文が記述されており、その図17のRTL記述131によれば、図18に示すようなハードウエア回路が生成される。
図18は、従来の動作合成により生成されるハードウエア回路の構成を説明するための模式図である。
図18の回路は、ステージ1から5を有する。ステージ1は、配列変数a[i], b[i], c[i%2]の値を、それぞれレジスタ141、142、143にストアする処理を行う入力処理のステージである。このステージ1は、第1から第3のセンテンス121aから121cに対応する。ステージ2は、配列変数a[i]の値をストアしているレジスタ141の値と、配列変数c[i%2]の値をストアしているレジスタ143の値とを、乗算器144により乗算する処理を行うステージである。このステージ2は、第4のセンテンス121dに対応する。ステージ3は、変数eとfの値を、乗算器148により乗算する処理を行うステージである。このステージ3は、第5のセンテンス121eに対応する。ステージ4は、変数gとhの値を、加算器152により加算する処理を行うステージである。このステージ4は、第6のセンテンス121fに対応する。そして、ステージ5は、変数xの値と変数fを、加算器155により乗算する処理を行うステージである。このステージ5は、第7のセンテンス121gに対応する。
図18の回路は、ステージ1から5を有する。ステージ1は、配列変数a[i], b[i], c[i%2]の値を、それぞれレジスタ141、142、143にストアする処理を行う入力処理のステージである。このステージ1は、第1から第3のセンテンス121aから121cに対応する。ステージ2は、配列変数a[i]の値をストアしているレジスタ141の値と、配列変数c[i%2]の値をストアしているレジスタ143の値とを、乗算器144により乗算する処理を行うステージである。このステージ2は、第4のセンテンス121dに対応する。ステージ3は、変数eとfの値を、乗算器148により乗算する処理を行うステージである。このステージ3は、第5のセンテンス121eに対応する。ステージ4は、変数gとhの値を、加算器152により加算する処理を行うステージである。このステージ4は、第6のセンテンス121fに対応する。そして、ステージ5は、変数xの値と変数fを、加算器155により乗算する処理を行うステージである。このステージ5は、第7のセンテンス121gに対応する。
ステージ2では、レジスタ141と142にそれぞれストアされた2つの値を乗算してその結果は変数gのレジスタ145にストアされる。ステージ3では、レジスタ143の値が転送されてストアされた変数fのレジスタ147と、レジスタ142の値が転送されてストアされた変数eのレジスタ146とにストアされた2つの値を乗算してその結果は変数hのレジスタ150にストアされる。ステージ4では、レジスタ145の値が転送されてストアされた変数gのレジスタ149と、レジスタ150とにストアされた2つの値を加算してその結果は変数xのレジスタ153にストアされる。ステージ5では、レジスタ151の値が転送されてストアされた変数fのレジスタ154と、レジスタ153にストアされた2つの値を加算してその結果は配列変数z[i]の値として出力される。
特に、レジスタ143、147、151,154には、配列変数c[i%2]に対応する変数fの値が順次入力されるが、配列変数c[i%2]は、上述したように、ステージが切り替わる毎に、すなわち1ステージ毎に0と1を交互に繰り返す。よって、変数fも、0と1を交互に繰り返す。その結果、図17の左側のC記述131の場合は、変数fは所定の間隔毎に(ここでは1ステージ毎に)同一値であるにも拘わらず、ステージ1から5の間に存在する変数fのために4つのパイプラインレジスタが、図18に示すように生成されてしまう。ある瞬間においては、レジスタ143と151は、同一値であり、レジスタ147と154も、レジスタ143と151の値とは異なる1又は0の値をとる。
そこで、本実施の形態に係る動作合成装置1Cは、C記述を解析して複数のイタレーションにおける変数の変化を検出して、図17の右側に示すようなRTL記述が得られるように、後述するような処理を行う。本実施の形態の動作合成装置1Cによれば、図16のC記述を動作合成すると、図17の右側のRTL記述132が生成される。
図17の右側のRTL記述132では、左側のRTL記述131における、変数fのために、矢印で示すように2つの代入文D2は無い。図17の右側のRTL記述132を生成する処理については、後述する。図17のRTL記述132によれば、図19に示すようなハードウエア回路が生成される。
図19は、本実施の形態の動作合成装置1Cにより生成されるハードウエア回路の構成を説明するための模式図である。図19では、図18と同じ構成要素については、同じ符号を付す。
図19に示すように、本実施の形態の動作合成装置1Cにより生成されるハードウエア回路では、2つの変数f用のレジスタ143,147が生成され、図18と比較すると、レジスタの数が2つ減少している。
次に、以上のような構成にかかる動作合成装置1Cの処理の流れの例を説明する。図20は、本実施の形態に係わる動作合成装置1Cの処理の流れの例を示すフローチャートである。
ユーザの作成したC記述、ここでは、図16のループ文を含むC記述は、動作合成装置1Cの記憶装置14の記憶領域部14aに記憶されている。ユーザは、動作合成装置1Cに対して、記憶領域部14aに記憶されたC記述を指定し、そのC記述からRTL記述を生成する動作合成処理を行うように、動作合成装置1Cに指示を入力する。動作合成装置1Cは、その指示に応じて、指定されたC記述の動作合成を行うべく、図20の処理を実行する。なお、図6における処理と同じ処理については、同じ符号を付す。
まず、動作合成装置1CのC記述読込部13aは、指定されたC記述を、データ処理装置13のメモリ(図示せず)上に読み込む(ステップS1)。
次に、ステージ対応部13bは、C記述に対してスケジューリングを行い、各センテンスを、各パイプラインステージに対応させる処理が行われる(ステップS2)。この結果、パイプラインステージと各センテンスの変数との対応付けの情報、すなわち対応関係の情報が得られる。
ステージ対応部13bは、まず、ループボディ部22中に、複数のステージで利用される変数の情報の抽出を行う。図16の場合、ループ文の1イタレーションの間にある変数は、変数a[i], b[i], c[i%2], d, e, f, g, h, x, y[i], iである。そして、ステージ対応部13bは、C記述と、スケジューリングにより得られたパイプライン回路のステージの情報とを対応させ、これらの変数の中から、複数のステージにおいて利用される変数を抽出する。図16の場合、複数のステージにおいて利用される変数は、変数d, e, f, g, h, x, iである。すべてのイタレーションで同一値となる変数はない。
続いて、繰り返し変数抽出部13hにより、所定間隔毎に値が繰り返される変数を抽出する処理が行われる(ステップS21)。具体的には、繰り返し変数抽出部13hは、C記述に対してテキスト解析を行い、センテンス121aから121gについて、代入式「=」の右側に存在する変数が、所定の形式の記述に該当するか否かを判断することにより、所定間隔毎に値が繰り返される変数を抽出する。
図16の場合、繰り返し変数抽出部13hは、第3のセンテンスに、値が繰り返すものとなる変数の記述、ここでは、”i%2”のような割り算の余りを用いるような表現として、c[i%2]を検出することができる。そして、そのような変数(ここでは、変数c[i%2])のみから生成される変数であって、複数のステージで利用される変数として、変数fが抽出される。従って、”i%2”のような表現情報は、記憶装置14に予め記憶されており、繰り返し変数抽出部13hは、その表現情報を利用して、各センテンス中のテキストから、値が繰り返すものとなる変数を抽出することができる。
RTL記述生成部13iは、ステージ対応部13bと繰り返し変数抽出部13hの結果をもとに、削減できるパイプラインレジスタを特定し、C記述からRTLを生成する処理を行う(ステップS22)。
具体的には、RTL記述生成部13iは、複数のステージで利用され、かつ所定間隔で(ここでは1ステージおきに)、その値が繰り返される変数は変数fであるので、変数fのパイプラインレジスタを削減するために、変数fを保存するレジスタを、所定の数だけ生成するようにRTL記述を生成する。ステップS22の中は、2つのステップS23,S24を有している。
ステップS22では、所定の間隔で値が繰り返される変数fを保存するレジスタを、必要な数だけ生成するために、その数を決定するレジスタ数決定処理 (ステップS23)を行う。さらに、RTL記述生成部13iは、変数fについては、不必要なレジスタが生成されずに、同一値の別のレジスタからの読み出しとなるようにRTL記述を生成あるいは変更する生成処理(ステップS24)も行う。
具体的には、レジスタ数決定処理 (ステップS23)では、変数fが、いくつのイタレーション毎に同一値をとるかに応じて、必要なレジスタ数が決定される。まず、図16の場合、変数c[i%2]の記述から、変数c[i%2]は、2イタレーション毎に同一値をとることがわかり、変数c[i%2]のみで更新される変数fも、2イタレーション毎に同一値をとることがわかる。また、イタレーションの間隔(あるいはイタレーション数)と、そのイタレーション間隔に対応して必要なレジスタ数との対応関係をテーブルデータとして記憶装置14に予め記憶させておく。そして、RTL記述生成部13iは、変数c[i%2]の記述から決定されたイタレーションの間隔に基づいて、そのテーブルデータを参照することによって、必要なレジスタ数を決定する。
図16の場合、変数fの値をストアするレジスタの値は、2ステージ毎(言い換えると、1ステージおき)に同一値である。図18の場合は、一点鎖線の矢印JとKで示す、それぞれ2つのレジスタは、同一値である。
そこで、RTL記述生成部13iは、繰り返される所定間隔に応じて必要な数のレジスタを生成するように、変数fの部分が記述されたRTL記述を生成する(ステップS24)。図17のRTL記述部133では、矢印で示す2つセンテンスD3のみが記述され、RTL記述部133は、RTL記述部131の矢印で示す2つのレジスタを生成する記述D2は含まれていない。
図17の右側のRTL記述133によれば、2ステージ毎に変数fを保存するパイプラインレジスタの値は同一であるので、2個のレジスタが生成される。そして、1ステージ目では、変数fの値は図19のレジスタ143に書き込まれ、2ステージ目ではレジスタ147に書き込まれる。3ステージ目以降のレジスタは削除するようにRTL記述は、生成されるが、3ステージ目のパイプラインレジスタの代わりに、1ステージ目で書き込まれたレジスタ143から、変数fの値は読み出される。4ステージ目のレジスタの代わりに、2ステージ目で書き込まれたレジスタ147から、変数fの値は、読み出される。従って、2ステージ毎に交互に読み出すように、読み出しレジスタの構成が決定される。
すなわち、RTL記述生成部13iは、RTL記述中に、always文を用いて、必要な数のレジスタを作成する処理を記述し、その後のイタレーションでは、変数fについてはその作成されたレジスタにストアされた値を読み込むようにするだけの処理にするように、C記述部133を生成する。
生成されるRTL記述部133も、第1の実施の形態のRTL記述部36と同様に、従来の合成方法で生成される各ステージのRTL記述部から、必要な数のレジスタを生成する記述はそのまま利用して生成される。そして、その後のイタレーションでは、変数fについてはその作成されたレジスタにストアされた値を読み込むように、不必要なレジスタ生成のための記述を削除し、その変数を、共通の変数に置き換えることによって、生成され得る。図17の場合、RTL記述部132は、従来の合成方法で生成されるRTL記述部131の、矢印で示す変数fに関する代入文D2を削除し、変数fに関する変数f3を、矢印E2で示す共通の変数f1に置き換えるような処理を行うことをよって、生成され得る。
すなわち、RTL記述生成部13iは、RTL記述中に、ハードウエアにおける複数のステージで利用され、かつ所定間隔で同一値をとる変数については、必要なレジスタを生成しないようにRTL記述を生成する。その結果、生成されるハードウエア回路では、図19に示すように、変数f用のレジスタ143,147だけが生成され、図18と比較すると、レジスタの数が2つ減少している。
以上のように、本実施の形態によれば、複数のステージで利用され、かつ所定間隔で同一値をとる変数について、複製用のパイプラインレジスタを生成することがなくなるので、レジスタの数を減らすことができる。その結果、レジスタは消費電力が大きいので,レジスタの数を削減することで、設計対象の半導体装置は、物理的なサイズを小さくでき、かつ、消費電力の小さい回路を得ることができる。
なお、上述したステージ対応部13bと繰り返し変数抽出部13hの処理順序は、図15では、ステージ対応部13bの後に繰り返し変数抽出部13hが実行されるようになっているが、ステージ対応部13bと繰り返し変数抽出部13hとは互いに並列的に実行されて、それぞれの結果情報を、RTL記述生成部13iに出力するような構成でもよい。
なお、応用例として、動作合成装置は、第1、第2及び第3の実施の形態の処理の3つの処理を組み合わせた装置であってもよい。図21は、その3つの処理部を有する動作合成装置1Dの構成を示すブロック図である。図21では、図14の同一の構成要素については同一の符号を付している。
その場合、図21に示すように、本実施の形態に係る動作合成装置1BのRTL記述部13gは、非更新変数抽出部13cにおいて得られた、同一値を取る変数についてすべてのステージで同じレジスタからの読み出しとなるようにRTL記述を生成する処理(ステップS4)と、第2の非更新変数抽出部13eにおいて得られた、同一値を取る変数のみから求まる変数について複製用のパイプラインレジスタを生成しないようにRTL記述を生成する処理(ステップS12の処理)と、繰り返し変数抽出部13hにおいて得られた所定間隔で同一値をとる変数について不必要なレジスタを生成しないようにRTL記述を生成する処理(ステップS22)の3つの処理を行う。このような構成にすることにより、動作合成装置1Dは、本実施の形態の上述した効果に加えて、第1及び第2の実施の形態の効果を生じさせることができる。
なお、図21の場合、ステージ対応部13bと繰り返し変数抽出部13hとは互いに並列的に実行されて、それぞれの結果情報を、RTL記述生成部13iに出力するような構成でもよい。
また、上述した3つの実施の形態では、クロックの1サイクルでステージが移行するため、レジスタ等へのデータの入力処理部と、乗算器、加算器等の各演算部が、それぞれ1つのステージを構成しているが、複数サイクルに基づいてステージが移行する場合は、入力処理部と各演算部だけでなく、入力データ用のレジスタ、演算結果用等のレジスタも含めて1つのステージが構成される。
なお、以上説明した各部の動作を実行するプログラムは、フロッピー(登録商標)ディスク、CD−ROM等の可搬媒体や、ハードディスク等の記憶装置等に、その全体あるいは一部が記録され、あるいは記憶されている。そのプログラムがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明の動作合成装置を実現することができる。
以上説明したように、上述した3つの実施の形態に係る動作合成装置によれば、高位合成におけるパイプライン合成において、複数のイタレーションで共通の値となる変数に対するパイプラインレジスタの数を削減することができる。その結果、不要なレジスタを削減することにより半導体装置の面積を小さくすることができる。さらに、レジスタは消費電力が大きいので、レジスタの数を削減することで消費電力の小さい半導体装置を得ることができる。
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
1、1A、1B、1C、1D 動作合成回路、13 データ処理装置、14 記憶装置
Claims (5)
- プログラミング言語によってハードウエアの構成を記述したプログラムに基づいて動作合成を行う動作合成装置であって、
前記プログラムにおけるループ文中に記述された変数の中から、イタレーション間で同一の値をとり、かつ前記ハードウエアにおける複数のステージで利用される、同一値変数を抽出する同一値変数抽出部と、
該同一値変数抽出部によって抽出された前記同一値変数のための共通レジスタを作成し、かつ、前記同一値変数の値を前記共通レジスタから読み出すRTL記述を生成するRTL記述生成部と、
を有することを特徴とする動作合成装置。 - 前記同一値変数抽出部は、1イタレーション中の変数の中から、代入操作により前記1イタレーション中に更新される変数と、イタレーションが切り替わる毎に所定の値だけ変化する変数とを、除いて残った変数を、前記同一値変数として抽出することを特徴とする請求項1記載の動作合成装置。
- 前記RTL記述生成部は、最初のイタレーション時に共通のレジスタを作成する記述を生成する共通レジスタ作成記述生成部と、第2回目以降のイタレーションでは、前記同一値変数を前記共通レジスタから読み出す記述を生成する読出記述生成部とを有することを特徴とする請求項1又は2に記載の動作合成装置。
- 前記同一値変数は、1イタレーション中の演算処理により生成される変数であることを特徴とする請求項1記載の動作合成装置。
- 前記同一値変数は、所定のイタレーション間隔毎に同一の値をとる変数であることを特徴とする請求項1記載の動作合成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006156518A JP2007323606A (ja) | 2006-06-05 | 2006-06-05 | 動作合成装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006156518A JP2007323606A (ja) | 2006-06-05 | 2006-06-05 | 動作合成装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007323606A true JP2007323606A (ja) | 2007-12-13 |
Family
ID=38856335
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006156518A Pending JP2007323606A (ja) | 2006-06-05 | 2006-06-05 | 動作合成装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007323606A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10515171B2 (en) | 2018-03-16 | 2019-12-24 | Kabushiki Kaisha Toshiba | Circuit description generation apparatus and circuit description generation method |
-
2006
- 2006-06-05 JP JP2006156518A patent/JP2007323606A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10515171B2 (en) | 2018-03-16 | 2019-12-24 | Kabushiki Kaisha Toshiba | Circuit description generation apparatus and circuit description generation method |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4988758B2 (ja) | マルチサイクル・クロック・ゲーティングのための方法および装置 | |
JP5350428B2 (ja) | 自動プログラム生成装置、方法及びコンピュータプログラム | |
JP4580827B2 (ja) | 動作合成装置及び自動動作合成方法 | |
JP5450840B2 (ja) | プログラムの実行性能評価のためのテストデータ生成方法 | |
JP2007034584A (ja) | 高位合成装置、自動高位合成方法、高位合成プログラム及びゲートネットリスト自動検証方法 | |
US8266416B2 (en) | Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system | |
JP5157534B2 (ja) | 動作合成装置、および、プログラム | |
JP2009205523A (ja) | プロパティ自動生成装置 | |
JP2010267209A (ja) | 検証支援プログラム、検証支援装置および検証支援方法 | |
JP2009230677A (ja) | プロパティ生成システムおよびプロパティ検証システム | |
JP5228546B2 (ja) | 動作合成装置、および、プログラム | |
JP2007323606A (ja) | 動作合成装置 | |
JP2007080049A (ja) | 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部 | |
JP2011237989A (ja) | 半導体集積回路の設計装置、その設計方法、及びその設計プログラム | |
JP2012022580A (ja) | 情報処理装置、情報処理方法 | |
JP2007018313A (ja) | 回路設計プログラム、回路設計装置、回路設計方法 | |
JP6897213B2 (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
JP2006259805A (ja) | プロセッサ設計装置、プロセッサ設計方法およびプロセッサ設計プログラム | |
JP2001209664A (ja) | 高位合成方法並びに高位合成方法の実施に使用される記録媒体 | |
JP5267376B2 (ja) | 動作合成装置、動作合成方法、ならびに、プログラム | |
JP2011180814A (ja) | コンパイラ装置、コンパイル方法及びプログラム | |
JP5262678B2 (ja) | 動作合成システム、動作合成方法、及び動作合成用プログラム | |
JP4448048B2 (ja) | 構造解析プログラム | |
JP2009217720A (ja) | プログラム生成装置およびプログラム生成方法 | |
JP2009140028A (ja) | ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、制御プログラムおよび可読記録媒体 |