(57)【要約】【課題】Ｃ／Ｃ＋＋言語プログラム等の高位言語で記述された浮動小数点演算を含む動作から、その動作を実現するハードウェア記述を生成するのに好適な動作合成装置等を提供する。【解決手段】文字列情報からなる動作記述と、前記動作記述に対応付けられる演算の伝播規則が記憶され、前記演算として定義される浮動小数点演算を仮数部と指数部とに変換し、当該仮数部と当該指数部とに基づき、冗長ビット幅を削除した冗長ビット幅に基づく前記浮動小数点演算に対応付けられた動作記述を出力する。【選択図】図４
2009223554.tif 000002
【特許請求の範囲】
【請求項１】
文字列情報からなる動作記述が記憶される動作記述記憶部と、
前記動作記述に対応付けられる演算の伝播規則が記憶される伝播規則記憶部と、
前記演算として定義される浮動小数点演算を仮数部と指数部とに変換する変換部と、
前記変換部が変換した前記仮数部と前記指数部とに基づき、冗長ビット幅を削除する削除部と、
前記削除部が削除した前記冗長ビット幅に基づく前記浮動小数点演算に対応付けられた動作記述を出力する出力部と、
を備えることを特徴とする動作合成装置。
【請求項２】
前記削除部は、ＣＤＦＧ（Control Data Flow Graph）を生成するＣＤＦＧ生成部と、前向き解析部と、を備え、
前記前向き解析部は、前記ＣＤＦＧ生成部が生成した前記ＣＤＦＧ上の後向き枝を辿り、前記伝播規則記憶部に記憶された演算のビット幅又はレンジ値の伝播規則に従って、不動点に到達するまで変数の取り得るビット幅又はレンジ値を算出する計算を繰り返す、
ことを特徴とする請求項１に記載の動作合成装置。
【請求項３】
前記削除部は、後向き解析部と、をさらに備え、
前記後向き解析部は、前記前向き解析部が計算した結果に基づき、前記ＣＤＦＧ生成部が生成した前記ＣＤＦＧ上の前向き枝を辿り、前記伝播規則記憶部に記憶された演算のビット幅又はレンジ値の伝播規則に従って、不動点に到達するまで変数の取り得るビット幅又はレンジ値を算出する計算を繰り返す、
ことを特徴とする請求項２に記載の動作合成装置。
【請求項４】
前記変換部は、前記浮動小数点演算を丸めるモードとして、最近値への丸め、ゼロ方向への丸め、正の無限大方向への丸め、又は、負の無限大方向への丸めのうち少なくともいずれか１つモードを備える、
ことを特徴とする請求項１乃至３のいずれか１項に記載の動作合成装置。
【請求項５】
動作記述記憶部と、伝播規則記憶部と、変換部と、削除部と、出力部と、を有する動作合成装置にて実行される動作合成方法であって、
前記動作記述記憶部には、文字列情報からなる動作記述が記憶され、
前記伝播規則記憶部には、前記動作記述に対応付けられる演算の伝播規則が記憶され、
前記変換部は、前記演算として定義される浮動小数点演算を仮数部と指数部とに変換する変換工程と、
前記削除部は、前記変換部が変換した前記仮数部と前記指数部とに基づき、冗長ビット幅を削除する削除工程と、
前記出力部は、前記削除部が削除した前記冗長ビット幅に基づく前記浮動小数点演算に対応付けられた動作記述を出力する出力工程と、
を備えることを特徴とする動作合成方法。
【請求項６】
コンピュータを、
文字列情報からなる動作記述が記憶される動作記述記憶部と、
前記動作記述に対応付けられる演算の伝播規則が記憶される伝播規則記憶部と、
前記演算として定義される浮動小数点演算を仮数部と指数部とに変換する変換部と、
前記変換部が変換した前記仮数部と前記指数部とに基づき、冗長ビット幅を削除する削除部と、
前記削除部が削除した前記冗長ビット幅に基づく前記浮動小数点演算に対応付けられた動作記述を出力する出力部と、
として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｃ／Ｃ＋＋言語プログラム等の高位言語で記述された浮動小数点演算を含む動作から、その動作を実現するハードウェア記述を生成するのに好適な動作合成装置、動作合成方法、及び、これらをコンピュータにて実現するためのプログラムに関する。
【背景技術】
【０００２】
近年、市場に流通する機器の多くにＬＳＩ（Large Scale Integration）が搭載されてきている。半導体技術の進歩に伴って、市場に流通する機器のライフサイクルは、ますます短くなってきている。そのため、半導体メーカによっては、短期間で高性能なシステムＬＳＩを開発することが重要となってきている。
【０００３】
短期間でシステムＬＳＩを開発する技術として、動作合成ツールを用いたシステムＬＳＩの開発技術が知られている。動作合成ツールとは、ハードウェアの動作を表現するアルゴリズムから、論理合成ツールに入力されるＲＴＬ（Register Transfer Level）記述を生成するＥＤＡ（Electronic Design Automation）ツールである。
【０００４】
動作合成ツールによるシステムＬＳＩの開発期間を短縮する手法としては、例えば、ソフトウェア部分とハードウェア部分とを含めたシステム使用をＣ／Ｃ＋＋言語などの動作記述レベルで記述し、システムレベルでの検証を行うソフトウェア／ハードウェア協調検証で使用された記述（Ｃ／Ｃ＋＋言語などで記述されたシステム仕様のハードウェア部分の記述）を用いて動作合成を行う技術が知られている。
【０００５】
信号処理等で用いられている浮動小数点演算を動作合成ツールに入力し、ハードウェアとして実現する場合、動作記述中にライブラリ化された浮動小数点演算を記述することで、動作合成ツールへの入力を可能とする技術が知られている（例えば、特許文献１参照）。
【０００６】
動作合成においては、動作記述に記載されている演算に着目し、スケジューリング・共有化といった最適化処理を行っている。動作合成におけるスケジューリングとは、動作記述に基づいて、開発対象のＬＳＩで実行される各演算の並列化や逐次化を行う処理である。動作合成におけるスケジューリング・共有化の対象となる演算器が演算ライブラリに備えられている。
【０００７】
また、動作合成では、アロケーションを行うことで、演算器の共有化が行われている。アロケーションとは、スケジューリングされた各演算を、演算器に割り当てるための処理である。
【０００８】
演算ライブラリは、動作合成におけるスケジューリング・共有化が可能な単純な演算器（加算器、減算器、乗算器等）で構成されている（例えば、特許文献１参照）。これらの演算器は、動作合成において、スケジューリング・共有化の対象となる。単純な演算器で構成されている場合、動作合成時に演算器のスケジューリング・共有化が制限されて自由度が低下することはない。
【特許文献１】特開２００７−３１６７３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１に開示されている構成では、一般にＩＥＥＥ７５４に基づく浮動小数点演算を比較器・加減算器・乗算器等を用いて合成する場合、莫大なビット幅の演算器が要求されることが多く、スケジューリング・共有化を効果的に行うことが困難な場合があった。従って、動作合成によるスケジューリング・共有化を効率的に行うのに好適な新たな方法が求められている。
【００１０】
本発明は、上記問題に鑑みてなされたものであり、Ｃ／Ｃ＋＋言語プログラム等の高位言語で記述された浮動小数点演算を含む動作から、その動作を実現するハードウェア記述を生成するのに好適な動作合成装置、動作合成方法、及び、これらをコンピュータにて実現するためのプログラムを提供することを目的とする。
また、動作合成によるスケジューリング・共有化を効率的に行うのに好適な動作合成装置等を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記の目的を達成するため、本発明の第１の観点に係る動作合成装置は、
文字列情報からなる動作記述が記憶される動作記述記憶部と、
前記動作記述に対応付けられる演算の伝播規則が記憶される伝播規則記憶部と、
前記演算として定義される浮動小数点演算を仮数部と指数部とに変換する変換部と、
前記変換部が変換した前記仮数部と前記指数部とに基づき、冗長ビット幅を削除する削除部と、
前記削除部が削除した前記冗長ビット幅に基づく前記浮動小数点演算に対応付けられた動作記述を出力する出力部と、
を備えることを特徴とする。
【００１２】
上記の目的を達成するため、本発明の第２の観点に係る動作合成方法は、
動作記述記憶部と、伝播規則記憶部と、変換部と、削除部と、出力部と、を有する動作合成装置にて実行される動作合成方法であって、
前記動作記述記憶部には、文字列情報からなる動作記述が記憶され、
前記伝播規則記憶部には、前記動作記述に対応付けられる演算の伝播規則が記憶され、
前記変換部は、前記演算として定義される浮動小数点演算を仮数部と指数部とに変換する変換工程と、
前記削除部は、前記変換部が変換した前記仮数部と前記指数部とに基づき、冗長ビット幅を削除する削除工程と、
前記出力部は、前記削除部が削除した前記冗長ビット幅に基づく前記浮動小数点演算に対応付けられた動作記述を出力する出力工程と、
を備えることを特徴とする。
【００１３】
上記の目的を達成するため、本発明の第３の観点に係るプログラムは、
コンピュータを、
文字列情報からなる動作記述が記憶される動作記述記憶部と、
前記動作記述に対応付けられる演算の伝播規則が記憶される伝播規則記憶部と、
前記演算として定義される浮動小数点演算を仮数部と指数部とに変換する変換部と、
前記変換部が変換した前記仮数部と前記指数部とに基づき、冗長ビット幅を削除する削除部と、
前記削除部が削除した前記冗長ビット幅に基づく前記浮動小数点演算に対応付けられた動作記述を出力する出力部と、
として機能させることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、動作合成によるスケジューリング・共有化を効率的に行うことができる。
【発明を実施するための最良の形態】
【００１５】
以下では、本発明の動作合成装置の実施形態の一つについて説明するが、当該実施形態は本発明の原理の理解を容易にするためのものであり、本発明の範囲は、下記の実施形態に限られるものではなく、当業者が以下の実施形態の構成を適宜置換した他の実施形態も、本発明の範囲に含まれる。
【００１６】
なお、以下の実施形態において、動作レベル（アルゴリズム・レベル）の記述をアルゴリズム記述と呼ぶ。また、ＲＴＬの記述をＲＴＬ記述と呼ぶ。また、ゲート・レベルの記述を論理記述と呼ぶ。従って、動作記述からＲＴＬ記述への展開を動作合成と呼び、ＲＴＬ記述からゲート・レベルへの展開を論理合成と呼ぶ。さらに、以下に述べる実施形態では、アルゴリズム記述がＣ／Ｃ＋＋言語を用いて記述されている場合を例示して本願発明の説明を行う。なお、これは本願発明に適用されるアルゴリズム記述がＣ／Ｃ＋＋言語に制限されることを意味するものではない。
【００１７】
本発明の実施の形態に係る動作合成装置について、図１を参照して詳細に説明する。
【００１８】
動作合成装置１０は、本装置１０内に動作記述記憶部２０と、動作合成処理部３０と、出力ＲＴＬ記憶部４０と、浮動小数点位置情報記憶部５０と、ＲＴＬシミュレータ部６０と、演算伝播規則記憶部７０と、入出力インタフェイス部８０と、制御部９０と、を備える。
【００１９】
動作合成装置１０には、本装置１０内に各種情報を入力するための入力部１００と、本装置１０からの各種情報を出力するための出力部１１０と、が接続されている。
入力部１００は、例えば、キーボード、マウスポインタ、タッチパネル等から構成される。
出力部１１０は、例えば、ディスプレイ装置、印刷装置等から構成される。
なお、動作合成装置１０と、入力部１００及び出力部１１０とを一体の装置とすることもできる。
【００２０】
動作記述記憶部２０は、動作合成によって生成されたＲＴＬ記述を記憶する。
動作合成処理部３０は、ＲＴＬ記述に基づいて動作合成を行う。
出力ＲＴＬ記憶部４０は、後述するＲＴＬ情報出力部３６が出力するＲＴＬ記述を記憶する。
浮動小数点位置情報記憶部５０は、後述する仮数部・指数部変換部３２が変換する各浮動小数点の位置を記憶する。
ＲＴＬシミュレータ部６０は、ＲＴＬ記述の論理機能やタイミングを検証する。
演算伝播規則記憶部７０は、各演算のビット幅、レンジ値の伝播規則を記憶する。
入出力インタフェイス部８０は、入力部１００及び出力部１１０と後述する制御部９０との間で実行されるデータ通信を制御する。
制御部９０は、ＣＰＵ（Central Processing Unit）（図示せず）、メモリ（図示せず）、大容量記憶装置（図示せず）等を備える。ＣＰＵ等はバスを介してそれぞれ接続されている。制御部９０は、各部の制御を行う。
【００２１】
図２は、動作合成処理部３０のプログラム構成を示したものである。動作合成処理部３０は、字句解析・構文解析部３１と、仮数部・指数部変換部３２と、冗長ビット幅削除部３３と、スケジューリング部３４と、バインディング部３５と、ＲＴＬ情報出力部３６と、を備える。
【００２２】
字句解析・構文解析部３１は、入力部１００から与えられた入力文字列（高位合成コンフィギュレーション指定情報）を動作記述記憶部２０に保存し、当該入力文字列の字句解析・構文解析を行う。
【００２３】
仮数部・指数部変換部３２は、各浮動小数点演算の変換を行い、仮数部・指数部に分割する処理を行う。
【００２４】
冗長ビット幅削除部３３は、各変数（ユーザが定義した変数・内部で自動生成した変数）の取り得る値を静的に解析し、冗長なビット幅の削減処理を行う。
【００２５】
スケジューリング部３４及びバインディング部３５は、合成に必要な演算器／レジスタ資源の割当て・共有を行う。
【００２６】
ＲＴＬ情報出力部３６は、ＲＴＬ出力処理および各浮動小数点演算に関する動作記述・ＲＴＬ記述間対応情報の出力処理を行う。
【００２７】
図３は、冗長ビット幅削除部３３をさらに詳細化したプログラム構成を示したものである。
【００２８】
ＣＤＦＧ（Control Data Flow Graph）生成部３３ａは、仮数部・指数部に分割する処理後、ＣＤＦＧを生成する。
【００２９】
前向き解析部３３ｂは、ＣＤＦＧと演算伝播規則記憶部７０に記憶された情報とを用いて、データフローを前向きに解析し、冗長なビット幅の削減を行う。
【００３０】
後向き解析部３３ｃは、ＣＤＦＧと演算伝播規則記憶部７０に記憶された情報とを用いて、データフローを後向きに解析し、冗長なビット幅の削減を行う。
【００３１】
次に、本実施形態に係る動作合成装置１０の動作について、図４を参照して説明する。
【００３２】
まず、字句解析・構文解析部３１は、入力部１００を介してユーザが記述したＣ／Ｃ＋＋言語等の浮動小数点演算を含む動作記述を受け付ける。また、字句解析・構文解析部３１は、エンティティとアーキテクチャとの対応関係が指定されたコンフィグレーション指定情報に基づいて、当該動作記述の字句・構文解析を行う（ステップＳ１１）。
【００３３】
図５は、入力動作記述である浮動小数点型について定めたものである。
【００３４】
定義型として、unsigned型であるufloat、及びsigned型であるsfloatの２種類がある。また、各引数には、指数部のビット幅（ebw）、仮数部のビット幅（mbw）、及び丸めモード（t-mode）の指定が可能である。丸めモードについては、unbiased（最近値への丸め）、towards zero（ゼロ方向への丸め）、towards positive infinity（正の無限大方向への丸め）、及びtowards negative infinity（負の無限大方向への丸め）の４種類の指定が可能である。また、演算は、加算・減算・乗算・除算の指定が可能である。
丸めモードは、ビット幅を削減する際に重要な情報であり、導出されるビット解析（すなわち合成回路の品質）に大きな影響を与える。また、丸めモードの選択性がユーザに与えられない場合、ユーザは演算精度に関する調節を行うことができないため、設計の自由度及び利便性が著しく低下することとなる。
なお、本フォーマットでは、正規化数のみを扱うものとし、非正規化数は対象外とする。
【００３５】
次に、ステップＳ１１において、字句・構文解析が処理された後、仮数部・指数部変換部３２は、各浮動小数点演算の変換を行い、仮数部・指数部に分割する処理を行う（ステップＳ１２）。
【００３６】
図６は、仮数部・指数部の変換（ステップＳ１２）を、浮動小数点加算の場合について具現化したものである。
ここでは、図７に示すように、ufloat型の変数x（仮数部c1 bit、指数部c2 bit）、y（仮数部c3 bit、指数部c4 bit）、z（仮数部c5 bit、指数部c6 bit）が定義されたとき、z = x + yの加算処理が行われる。
【００３７】
以下では、図６に示す各（１）〜（５）について説明を行う。
【００３８】
（１）では、ufloat型の変数x、y、zについて、指数部を示す変数と仮数部を示す変数とに分割が行われる。
【００３９】
（２）及び（３）では、xの指数部の値とyの指数部の値とを比較し、両者の小数点位置を合わせる処理が行われる。
【００４０】
（４）では、zの指数部・仮数部の計算が行われる。また、キャリーを考慮して、x + yの結果が計算され、zの指数部・仮数部が求められる。
【００４１】
（５）では、代入部（z）の型において指定した丸めモードに従い、丸め処理が行われる。
【００４２】
また、図８は、仮数部・指数部の変換（ステップＳ１２）を、浮動小数点乗算の場合について具現化したものである。
以下では、図８に示す仮数部・指数部の変換処理について、各（１）〜（３）について説明を行う。
【００４３】
（１）では、ufloat型の変数x、y、zについて、指数部を示す変数と仮数部を示す変数とに分割が行われる
【００４４】
（２）では、指数部・仮数部の計算処理が行われる。仮数部については、xとyの仮数部に関する乗算処理が行われ、指数部については、xとyの指数部に関する加算処理が行われる。
なお、このフェーズで、zの指数部が決定される。
【００４５】
（３）では、丸め処理が行われる。zの型に指定した丸めモードに従って、zの仮数部が決定される。
【００４６】
次に、冗長ビット幅削除部３３は、各変数（ユーザが定義した変数・内部で自動生成した変数）の取り得る値を静的に解析し、冗長なビット幅の削減処理を行う（ステップＳ１３）。
【００４７】
図９は、冗長ビット幅の削除処理（ステップＳ１３）を、詳細化したフローチャートである。
【００４８】
ＣＤＦＧ生成部３３ａは、仮数部・指数部の変換処理部後、記述に基づいてＣＤＦＧを生成する（ステップＳ２１）。
【００４９】
次に、前向き解析部３３ｂは、コントロールフローグラフ上の後向き枝（back edge）を辿り、演算伝播規則記憶部７０に記憶された各演算のビット幅（もしくはレンジ値）伝播規則（例えば、図１０及び図１１に示す加算・乗算）に従って、各変数の取り得るビット幅（もしくはレンジ値）を計算し、不動点（fixed point）に到達するまで何回も繰り返す（ステップＳ２２）。fixed pointに到達した時に、各変数の取り得るビット幅が求まり、その（削減された）新しいビット幅に更新される。
【００５０】
次に、後向き解析部３３ｃは、コントロールフローグラフ上の前向き枝（forward edge）を辿り、演算伝播規則記憶部７０に記憶された各演算のビット幅（もしくはレンジ値）伝播規則（例えば、図１２から図１５に示す加算・乗算）に従って、各変数の取り得るビット幅（もしくはレンジ値）を計算し、不動点（fixed point）に到達するまで何回も繰り返す（ステップＳ２３）。
ただし、各変数のビット幅は、前向き解析終了後の結果が反映された状況で、後向き解析を開始するものとする。fixed pointに到達した時に、各変数の取り得るビット幅が求まり、その（削減された）新しいビット幅に更新される。
なお、本処理で更新されたビット幅が最終的に決定されるビット幅となる。
【００５１】
たとえば、unsigned型の１ビットの変数x、y、zが与えられ、計算式w = (x + y) + zが存在する場合、変数wが必要とするビット幅について説明する。
【００５２】
従来、x + yの計算結果を保持するために必要なビット幅は２ビット（1 bit + 1bit = 2 bit）である。また、(x + y) + zの計算結果を保持するために必要なビット幅は３ビット（2 bit + 1 bit = 3 bit）である。従って、変数wに必要なビット幅は３ビットとなる。
【００５３】
一方、本発明に係る手法では、レンジ値に基づいて各変数の必要となるビットを導出することができる。
【００５４】
x + yが取り得るレンジ値は、[0, 2]（[0, 1] + [0, 1] = [0, 2]）となる。また、(x + y) + zの計算結果を保持するために必要なレンジ値は、[0, 3]（[0, 2] + [0, 1] = [0, 3]）である。従って、変数wに必要なビット幅は２ビットとなる。
【００５５】
さらに、データフローを下から上へ辿って、各変数のビット幅を決定する分析（後向き解析）では、解析精度は大きく異なる。
【００５６】
z = x >> yの右シフト（＞＞）処理が存在する場合を考える。ただし、zは出力変数とする。
従来、xは、出力変数zを７ビット左シフトした結果であるため、１１ビット（4 bit + 7 bit = 11 bit）と計算される。
一方、xは出力変数z（レンジ値[0, 15]）を４ビット左シフトした結果であるため、xの取り得る値は、[0, 255]すなわち８ビットと計算される。
【００５７】
次に、スケジューリング部３４及びバインディング部３５は、それぞれスケジューリングを行い、バインディングを実施する。さらに、スケジューリング部３４及びバインディング部３５は、合成に必要な演算器／レジスタ資源の割当て・共有を行う（ステップＳ１４）。
【００５８】
最後に、ＲＴＬ情報出力部３６は、ＲＴＬ出力処理、および各浮動小数点演算に関する動作記述・ＲＴＬ記述間の対応情報の出力を行う（ステップＳ１５）。
【００５９】
以上説明したように、本発明によれば、より柔軟かつ実用的な浮動小数点型を導入し、またデータフロー解析に基づく冗長なビット幅削減処理の導入処理を動作合成ツール内で行うことで、浮動小数点演算を含む動作記述から、より高性能な合成回路を出力することができる。
また、動作合成によるスケジューリング・共有化を効率的に行うことができる。
【図面の簡単な説明】
【００６０】
【図１】本実施形態に係る動作合成装置の構成を示すブロック図である。
【図２】動作合成処理部の構成を示す図である。
【図３】冗長ビット幅削除部の構成を示す図である。
【図４】動作合成装置の動作を説明するフローチャートである。
【図５】浮動小数点型の実現例を示す図である。
【図６】仮数部・指数部の変換処理における、浮動小数点加算の適用例を示す図である。
【図７】仮数部・指数部の変換処理前における、浮動小数点加算記述を示す図である。
【図８】仮数部・指数部の変換処理における、浮動小数点乗算の適用例を示す図である。
【図９】冗長ビット幅を削除する動作を説明するフローチャートである。
【図１０】前向き解析における、unsigned型／signed型共通の加算の伝播規則例を示す図である。
【図１１】前向き解析における、unsigned型／signed型共通の乗算の伝播規則例を示す図である。
【図１２】後向き解析における、signed型の加算の伝播規則例を示す図である。
【図１３】後向き解析における、unsigned型の加算の伝播規則例を示す図である。
【図１４】後向き解析における、signed型の乗算の伝播規則例を示す図である。
【図１５】後向き解析における、signed型の乗算の伝播規則例を示す図である。
【符号の説明】
【００６１】
１０    動作合成装置
２０    動作記述記憶部
３０    動作合成処理部
３１    文字解析・構文解析部
３２    仮数部・指数部変換部
３３    冗長ビット幅削除部
３３ａ  ＣＤＦＧ生成部
３３ｂ  前向き解析部
３３ｃ  後向き解析部
３４    スケジューリング部
３５    バインディング部
３６    ＲＴＬ情報出力部
４０    出力ＲＴＬ記憶部
５０    浮動小数点位置情報記憶部
６０    ＲＴＬシミュレータ部
７０    伝残伝播規則記憶部
８０    入出力インタフェイス部
９０    制御部
１００  入力部
１１０  出力部
【図１】
2009223554.tif 000003
【図２】
2009223554.tif 000004
【図３】
2009223554.tif 000005
【図４】
2009223554.tif 000006
【図５】
2009223554.tif 000007
【図６】
2009223554.tif 000008
【図７】
2009223554.tif 000009
【図８】
2009223554.tif 000010
【図９】
2009223554.tif 000011
【図１０】
2009223554.tif 000012
【図１１】
2009223554.tif 000013
【図１２】
2009223554.tif 000014
【図１３】
2009223554.tif 000015
【図１４】
2009223554.tif 000016
【図１５】
2009223554.tif 000017