(57)【要約】  演算処理を繰り返す繰り返し演算処理であって演算処理の出力を次の演算処理の入力とする繰り返し演算処理を表したＣＤＦＧ（コントロールデータフローグラフ）を第１ＣＤＦＧ（１１１）として取得し、第１ＣＤＦＧ（１１１）を、第１ＣＤＦＧ（１１１）で表された繰り返し演算処理をパイプライン処理で実行する第２ＣＤＦＧ（１１２）に変更するＣＤＦＧ変更部（１６０）を備えた。
2017158785.tif 000002
【特許請求の範囲】
【請求項１】
演算処理を繰り返す繰り返し演算処理であって前記演算処理の出力を次の演算処理の入力とする繰り返し演算処理を表したＣＤＦＧ（コントロールデータフローグラフ）を第１ＣＤＦＧとして取得し、前記第１ＣＤＦＧを、前記第１ＣＤＦＧで表された前記繰り返し演算処理をパイプライン処理で実行する第２ＣＤＦＧに変更するＣＤＦＧ変更部を備えた高位合成装置。
【請求項２】
前記高位合成装置は、さらに、
前記第１ＣＤＦＧに表された前記繰り返し演算処理をパイプライン処理で実行した場合のスケジューリング結果を出力するスケジューリング部と、
前記スケジューリング結果に基づいて、前記第１ＣＤＦＧに表された前記繰り返し演算処理がパイプライン処理できるか否かを判定するパイプライン判定部と
を備え、
前記ＣＤＦＧ変更部は、
前記パイプライン判定部により、前記第１ＣＤＦＧに表された前記繰り返し演算処理がパイプライン処理できると判定された場合に前記第１ＣＤＦＧを前記第２ＣＤＦＧに変更する請求項１に記載の高位合成装置。
【請求項３】
前記スケジューリング部は、
前記第１ＣＤＦＧに表された前記繰り返し演算処理をパイプライン処理で実行した場合にデータハザードが生じた変数をデータハザード変数として含む前記スケジューリング結果を出力し、
前記パイプライン判定部は、
前記スケジューリング結果に含まれる前記データハザード変数に基づいて、前記第１ＣＤＦＧに表された前記繰り返し演算処理がパイプライン処理できるか否かを判定する請求項２に記載の高位合成装置。
【請求項４】
前記ＣＤＦＧ変更部は、
前記繰り返し演算処理のループ回数と前記演算処理の処理サイクルとに基づいて、前記第１ＣＤＦＧを前記第２ＣＤＦＧに変更する請求項１から３のいずれか１項に記載の高位合成装置。
【請求項５】
前記ＣＤＦＧ変更部は、
前記第１ＣＤＦＧを、前記繰り返し演算処理を前記処理サイクルの数のサブ繰り返し演算処理に分割し、前記処理サイクルの数のサブ繰り返し演算処理を実行する第１演算処理と、前記処理サイクルの数のサブ繰り返し演算処理の各々の出力を入力として前記演算処理を実行する第２演算処理とを表した前記第２ＣＤＦＧに変更する請求項４に記載の高位合成装置。
【請求項６】
前記第１演算処理は、パイプライン処理で実行できる請求項５に記載の高位合成装置。
【請求項７】
前記第２演算処理は、パイプライン処理で実行できる請求項５又は６に記載の高位合成装置。
【請求項８】
高位合成装置の高位合成方法において、
ＣＤＦＧ変更部が、演算処理を繰り返す繰り返し演算処理であって前記演算処理の出力を次の演算処理の入力とする繰り返し演算処理を表したＣＤＦＧ（コントロールデータフローグラフ）を第１ＣＤＦＧとして取得し、前記第１ＣＤＦＧを、前記第１ＣＤＦＧで表された前記繰り返し演算処理をパイプライン処理で実行する第２ＣＤＦＧに変更する高位合成方法。
【請求項９】
演算処理を繰り返す繰り返し演算処理であって前記演算処理の出力を次の演算処理の入力とする繰り返し演算処理を表したＣＤＦＧ（コントロールデータフローグラフ）を第１ＣＤＦＧとして取得し、前記第１ＣＤＦＧを、前記第１ＣＤＦＧで表された前記繰り返し演算処理をパイプライン処理で実行する第２ＣＤＦＧに変更するＣＤＦＧ変更処理をコンピュータに実行させる高位合成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラミング言語による動作記述からレジスタ転送レベルのＨＤＬ（ハードウェア記述言語）記述を自動生成する高位合成装置、高位合成方法及び高位合成プログラムに関する。
【背景技術】
【０００２】
従来、ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）開発では、Ｖｅｒｉｌｏｇ−ＨＤＬやＶＨＤＬといったハードウェア記述言語を使用した設計を行ってきた。しかし、近年の集積回路の大規模化に伴い、ハードウェア記述言語を使用した設計では設計記述量が膨大となり多大な設計時間を必要とされるため、設計生産性の向上が求められている。設計生産性の向上の一つとして、動作記述からレジスタ転送レベルの回路記述を自動合成する高位合成技術がある。高位合成技術は、ハードウェア記述言語よりも抽象度の高いＣ言語、Ｃ＋＋言語、ＳｙｓｔｅｍＣ言語といった高級言語による設計を行い、高位合成ツールを用いて自動的にハードウェア記述言語を生成する技術である。この高位合成技術によれば、設計記述量を削減し、設計時間の短縮を図ることができる。【０００３】
特許文献１の技術では、動作レベルの記述をＮ個の段階記述に分解し、Ｎ個の段階記述の間の入出力並びに演算がパイプライン処理されるようにスケジューリング部でタイミングを調整する。そして、特許文献１の技術では、Ｎ個の段階記述のそれぞれに対する段階回路と、半導体集積回路がとりうる２Ｎ−１個の段階状態を制御する状態制御回路とが生成されるようにハードウェア記述言語を生成する。このように、特許文献１には、高速なパイプライン回路を実現する動作合成方法が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−８６３１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１の技術は、演算処理を繰り返す繰り返し演算処理であって演算処理の出力を次の演算処理の入力とする繰り返し演算処理を実行する回路の動作記述には適用できないという課題がある。【０００６】
本発明は、演算処理を繰り返す繰り返し演算処理であって演算処理の出力を次の演算処理の入力とする繰り返し演算処理を実行する回路の動作記述を入力とした場合でも、パイプライン処理を可能にすることにより、処理性能が高いハードウェア記述言語を生成する高位合成装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明に係る高位合成装置は、
演算処理を繰り返す繰り返し演算処理であって前記演算処理の出力を次の演算処理の入力とする繰り返し演算処理を表したＣＤＦＧ（コントロールデータフローグラフ）を第１ＣＤＦＧとして取得し、前記第１ＣＤＦＧを、前記第１ＣＤＦＧで表された前記繰り返し演算処理をパイプライン処理で実行する前記第２ＣＤＦＧに変更するＣＤＦＧ変更部を備えた。
【発明の効果】
【０００８】
本発明に係る高位合成装置では、演算処理を繰り返す繰り返し演算処理であって前記演算処理の出力を次の演算処理の入力とする繰り返し演算処理を表したＣＤＦＧを第１ＣＤＦＧとして取得し、前記第１ＣＤＦＧを、前記第１ＣＤＦＧで表された前記繰り返し演算処理をパイプライン処理で実行する前記第２ＣＤＦＧに変更するＣＤＦＧ変更部を備えているので、繰り返し演算処理をパイプライン化することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係る高位合成装置１００の構成図。
【図２】高位合成技術を用いた高位合成装置１００ｘの構成図。
【図３】図２の高位合成装置１００ｘの動作を示すフロー図。
【図４】ソースコード１７１の具体例を示す図。
【図５】浮動小数点の加算演算の例を示す図。
【図６】図４に示した浮動小数点の加算演算の処理をパイプライン処理で実行した場合のタイミング図。
【図７】図６に対してデータハザードを回避するようにクロック周期毎の処理の実行タイミングを変更した場合のタイミング図。
【図８】実施の形態１に係る高位合成装置１００の高位合成方法５１０及び高位合成プログラム５２０による高位合成処理Ｓ１００を示すフロー図。
【図９】実施の形態１に係るＣＤＦＧ生成部１１０が図４に示したソースコード１７１から生成した第１ＣＤＦＧ１１１の一例を示す図。
【図１０】実施の形態１に係るスケジューリング結果１２２の例を示す図。
【図１１】実施の形態１に係るパイプライン判定処理Ｓ１５０のフロー図。
【図１２】実施の形態１に係るＣＤＦＧ変更部１６０が第１ＣＤＦＧ１１１を変更した第２ＣＤＦＧ１１２の一例を示す図。
【図１３】実施の形態１に係るＣＤＦＧ変更処理Ｓ１６０のフロー図。
【図１４】実施の形態１に係るＣＤＦＧ変更処理Ｓ１６０の前後での演算処理を数式で表した例。
【図１５】実施の形態１に係るＣＤＦＧ変更処理Ｓ１６０の前後での演算処理を回路で表した例。
【図１６】実施の形態１の変形例に係る高位合成装置１００ｙの構成図。
【発明を実施するための形態】
【００１０】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を用いて、本実施の形態に係る高位合成装置１００の構成について説明する。
本実施の形態において、高位合成装置１００は、コンピュータである。高位合成装置１００は、プロセッサ９１０、記憶装置９２０、入力インタフェース９３０、出力インタフェース９４０といったハードウェアを備える。記憶装置９２０は、メモリ９２１と補助記憶装置９２２とを有する。
【００１１】
高位合成装置１００は、機能構成として、ＣＤＦＧ生成部１１０と、スケジューリング部１２０と、パイプライン判定部１５０と、ＣＤＦＧ変更部１６０と、バインディング部１３０と、ＲＴＬ生成部１４０と、記憶部１７０とを備える。
以下の説明では、高位合成装置１００におけるＣＤＦＧ生成部１１０と、スケジューリング部１２０と、パイプライン判定部１５０と、ＣＤＦＧ変更部１６０と、バインディング部１３０と、ＲＴＬ生成部１４０とをまとめて高位合成部１０１ともいう。また、以下の説明では、高位合成装置１００におけるＣＤＦＧ生成部１１０と、スケジューリング部１２０と、パイプライン判定部１５０と、ＣＤＦＧ変更部１６０と、バインディング部１３０と、ＲＴＬ生成部１４０の機能を、高位合成装置１００の「部」の機能という。
高位合成装置１００の「部」の機能は、ソフトウェアで実現される。
【００１２】
また、記憶部１７０は、記憶装置９２０で実現される。記憶部１７０には、ソースコード１７１、合成制約情報１７２、回路情報１７３、ＲＴＬ１７４が記憶される。また、記憶部１７０には、ＣＤＦＧ生成部１１０により生成される第１ＣＤＦＧ１１１、スケジューリング部１２０により生成される制御サイクル情報１２１及びスケジューリング結果１２２、ＣＤＦＧ変更部１６０により生成される第２ＣＤＦＧ１１２といった情報が記憶される。
【００１３】
プロセッサ９１０は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
プロセッサ９１０は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ９１０は、具体的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００１４】
記憶装置９２０は、メモリ９２１及び補助記憶装置９２２を含む。補助記憶装置９２２は、具体的には、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ、又は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。メモリ９２１は、具体的には、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。本実施の形態では、記憶部１７０は、メモリ９２１により実現される。なお、記憶部１７０は、補助記憶装置９２２により実現されてもよいし、メモリ９２１と補助記憶装置９２２とにより実現されていてもよい。記憶部１７０の実現方法は任意である。
【００１５】
入力インタフェース９３０は、マウス、キーボード、タッチパネルといった入力装置と接続されるポートである。入力インタフェース９３０は、具体的には、ＵＳＢ端子である。なお、入力インタフェース９３０は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）と接続されるポートであってもよい。
出力インタフェース９４０は、ディスプレイ装置といった表示機器のケーブルが接続されるポートである。出力インタフェース９４０は、具体的には、ＵＳＢ端子又はＨＤＭＩ（登録商標）（Ｈｉｇｈ  Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）端子である。ディスプレイ装置は、具体的には、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）である。なお、出力インタフェース９４０は、プリンタ装置といった出力装置に接続されていてもよい。
【００１６】
補助記憶装置９２２には、「部」の機能を実現するプログラムが記憶されている。このプログラムは、メモリ９２１にロードされ、プロセッサ９１０に読み込まれ、プロセッサ９１０によって実行される。補助記憶装置９２２には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されている。ＯＳの少なくとも一部がメモリ９２１にロードされ、プロセッサ９１０はＯＳを実行しながら、「部」の機能を実現するプログラムを実行する。
【００１７】
高位合成装置１００は、１つのプロセッサ９１０のみを備えていてもよいし、複数のプロセッサ９１０を備えていてもよい。複数のプロセッサ９１０が「部」の機能を実現するプログラムを連携して実行してもよい。
【００１８】
「部」の機能による処理の結果を示す情報、データ、信号値、及び、変数値は、メモリ９２１、補助記憶装置９２２、又は、プロセッサ９１０内のレジスタ又はキャッシュメモリに記憶される。なお、図１において、各部と記憶部１７０とを結ぶ矢印は、各部が処理の結果を記憶部１７０に記憶すること、或いは、各部が記憶部１７０から情報を読み出すことを表している。また、各部を結ぶ矢印は、制御の流れを表している。
【００１９】
「部」の機能を実現するプログラムは、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）といった可搬記録媒体に記憶されてもよい。
なお、「部」の機能を実現するプログラムを高位合成プログラム５２０ともいう。高位合成プログラム５２０は、「部」として説明している機能を実現するプログラムである。また、高位合成プログラムプロダクトと称されるものは、高位合成プログラム５２０が記録された記憶媒体及び記憶装置であり、見た目の形式に関わらず、コンピュータ読み取り可能なプログラムをロードしているものである。
【００２０】
次に、本実施の形態の前提となる高位合成技術について説明する。
図２は、本実施の形態の前提となる高位合成技術を用いた高位合成装置１００ｘの構成を示す図である。
高位合成装置１００ｘは、図１で説明した本実施の形態に係る高位合成装置１００の構成から、パイプライン判定部１５０とＣＤＦＧ変更部１６０とを除いた構成である。すなわち高位合成装置１００ｘの高位合成部１０１ｘは、ＣＤＦＧ生成部１１０と、スケジューリング部１２０ｘと、バインディング部１３０と、ＲＴＬ生成部１４０とを備える。また、記憶部１７０には、第１ＣＤＦＧ１１１と制御サイクル情報１２１とが記憶され、スケジューリング結果１２２と第２ＣＤＦＧ１１２とは記憶されていない。
【００２１】
高位合成部１０１ｘは、ソースコード１７１と、合成制約情報１７２と、回路情報１７３とを入力として高位合成を行い、ＲＴＬ１７４を出力する。ＲＴＬ１７４は、ハードウェア記述言語の例である。
【００２２】
ソースコード１７１は、高位合成対象の回路の動作をＣ言語、Ｃ＋＋言語、ＳｙｓｔｅｍＣ言語といった高級言語で記述した動作記述である。ソースコード１７１は、入力装置から入力インタフェース９３０を介して入力され、記憶部１７０に記憶される。
合成制約情報１７２は、高位合成対象の回路の回路規模、資源量、タイミング制約、クロック周波数、パイプライン化対象部といった情報を含む。合成制約情報１７２は、入力装置から入力インタフェース９３０を介して入力され、記憶部１７０に記憶される。
回路情報１７３は、高位合成後の回路を実装するＬＳＩに設けられた演算ユニット、レジスタ、メモリユニット等の規模及び遅延情報等の情報を含む。回路情報１７３は、入力装置から入力インタフェース９３０を介して入力され、記憶部１７０に記憶される。
ＲＴＬ１７４は、回路の構造がハードウェア記述言語で記述された回路記述である。回路記述とは、回路動作を、レジスタ間の信号の流れと論理演算の組み合わせとにより記述したものである。回路記述は、回路の構造記述ともいう。
【００２３】
図３を用いて、図２の高位合成装置１００ｘの動作である高位合成処理Ｓ１００ｘの概要について説明する。高位合成処理Ｓ１００ｘは、実施の形態の前提となる高位合成技術を用いた処理である。高位合成処理Ｓ１００ｘは、ＣＤＦＧ生成処理Ｓ１１０、スケジューリング処理Ｓ１２０ｘ、バインディング処理Ｓ１３０、ＲＴＬ生成処理Ｓ１４０を有する。
【００２４】
ＣＤＦＧ生成処理Ｓ１１０において、ＣＤＦＧ生成部１１０は、ソースコード１７１の構文解析を行い、制御構成とデータ依存とを解析して、ＣＤＦＧ（コントロールデータフローグラフ）１１１を生成する。第１ＣＤＦＧ１１１は、制御フローとデータフローとを表現したグラフである。データフローは、演算を示すノードと、変数を示すノードと、ノード間を接続するエッジとで表現される。ＣＤＦＧ生成部１１０は、冗長な演算ノードの削除を行う。また、ＣＤＦＧ生成部１１０は、高性能かつ小面積な回路の構造記述を生成するために、不要処理の削除、共通部分処理の削除、定数の伝搬と畳み込みの処理、ループ処理の展開による並列度の向上処理等を行う。第１ＣＤＦＧ１１１については後で詳しく説明する。
【００２５】
次に、スケジューリング処理Ｓ１２０ｘにおいて、スケジューリング部１２０ｘは、第１ＣＤＦＧ１１１内の各ノードで示される処理を実行するために必要な制御サイクルを決定し、制御サイクル情報１２１として出力する。スケジューリング部１２０ｘは、合成制約情報１７２に設定されているクロック周波数と、回路情報１７３に設定されている演算ユニットやレジスタやメモリユニット等の遅延情報とに基づいて、制御サイクルを決定する。このとき、スケジューリング部１２０ｘは、第１ＣＤＦＧ１１１に含まれる繰り返し処理をパイプライン化した制御サイクルを試行する。スケジューリング部１２０ｘは、試行した制御サイクルで処理が実行出来ない場合は、別の方法を試行し、制御サイクルを決定する。スケジューリング部１２０ｘは、制御サイクルを含む制御サイクル情報１２１をスケジューリング結果１２２として出力する。
【００２６】
次に、バインディング処理Ｓ１３０において、バインディング部１３０は、制御サイクル情報１２１に基づいて、ハードウェア記憶リソースやハードウェア演算リソース等のハードウェアリソースを回路に割り付ける。バインディング部１３０は、制御サイクル情報１２１から、ハードウェアリソースのライフタイムを解析する。バインディング部１３０は、解析結果に基づき、同一処理が可能なハードウェアリソースのうち、ライフタイムがオーバーラップしていないハードウェアリソースには同一のハードウェアリソースを割り当て、ハードウェアを共有化する。バインディング部１３０は、ハードウェアリソースの回路への割り付け結果をバインディング結果として出力する。
【００２７】
最後に、ＲＴＬ生成処理Ｓ１４０において、ＲＴＬ生成部１４０は、制御サイクル情報１２１とバインディング結果とを実現するために、必要となる制御回路を生成する。そして、ＲＴＬ生成部１４０は、バインディング部１３０で得られたハードウェアリソースを接続したデータパスとあわせて、レジスタ転送レベル記述であるＲＴＬ１７４を出力する。
【００２８】
次に、具体例を用いて、本実施の形態の前提となる高位合成技術について説明する。
図４は、ソースコード１７１の具体例を示す図である。図４では、浮動小数点の複数入力値の合計値を算出する動作記述を記載したＣ言語のプログラムをソースコード１７１の例として示している。
図４に示すソースコード１７１は、入力となる浮動小数点の配列“ｉｎ＿ｄ”に格納されているＮ個の値の合計値を“ｒｅｓ＿ｄ”に格納する動作を示している。図４に示すソースコード１７１では、初期状態で“ｒｅｓ＿ｄ”に‘０’を設定し、ループ処理毎に“ｒｅｓ＿ｄ”に入力値である“ｉｎ＿ｄ［ｉ］”を加算する処理を繰り返すことで、入力値の合計値を算出する。図４に示すソースコード１７１では、ループ回数はＮ回である。
【００２９】
図４に示すソースコード１７１は、出力変数を次の入力変数として演算を繰り返す繰り返し処理を有する。繰り返し処理があるソースコード１７１から、処理性能、すなわち処理レイテンシとクロック周期の積が高いＲＴＬ記述を生成するためには、繰り返し処理をパイプライン処理化し、繰り返し処理のスループット性能を高める必要がある。
【００３０】
図５は、浮動小数点の加算演算の例を示している。
図５に示すように、浮動小数点の加算演算は、入力変数Ａ３００と入力変数Ｂ３０１に対して、変数入替処理３０２、桁合せ処理３０３、加算処理３０４、丸め処理３０５を行い、演算結果３０６を得る。
【００３１】
変数入替処理３０２では、入力変数Ａ３００の指数部と、入力変数Ｂ３０１の指数部との大小が比較３１０で比較され、スイッチ３１１で桁合せ処理３０３の処理対象の変数が選択される。ここで、入力変数Ａ３００の指数部より入力変数Ｂ３０１の指数部の方が大きい場合は入力変数Ａ３００の仮数部が桁合せ処理対象として桁合せ処理３０３に渡され、入力変数Ｂ３０１の仮数部は桁合せ処理不要として桁合せ処理３０３に渡される。入力変数Ａ３００の指数部より入力変数Ｂ３０１の指数部の方が小さい場合は入力変数Ｂ３０１の仮数部が桁合せ処理対象として桁合せ処理３０３に渡され、入力変数Ａ３００の仮数部は桁合せ処理不要として桁合せ処理３０３に渡される。
【００３２】
桁合せ処理３０３では、変数入替処理３０２で桁合せ処理対象として変数入替処理３０２から渡された変数の仮数部がシフタ３１３で右シフト処理され、桁合せ不要として変数入替処理３０２から渡された変数の仮数部との桁合せが行われる。桁合せが行われた変数は加算処理３０４に渡される。ここで、桁合せのためのシフト量は減算３１２で入力変数Ａ３００の指数部と入力変数Ｂ３０１の指数部との差分から算出される。
また、桁合せ処理が不要な変数として変数入替処理３０２から渡された変数の仮数部は入力された値がそのまま加算処理３０４に渡される。
【００３３】
加算処理３０４では、桁合せ処理３０３から渡された２つの桁の揃った変数の和が求められ、丸め処理３０５に出力される。なお、入力変数Ａ３００と入力変数Ｂ３０１の２つの変数の符号が同じ場合は加算が行われ、符号が異なる場合は引き算が行われる。
【００３４】
丸め処理３０５では、加算処理３０４から渡された加算結果に対し、例えばＩＥＥＥ７５４等の規格に合わせて正規化するために近似値への丸めが行われ、演算結果３０６として出力される。
【００３５】
図４に示した浮動小数点の合計値算出を行う場合は、入力変数Ａ３００には図４の配列“ｉｎ＿ｄ”の値を配列順に入力し、入力変数Ｂ３０１には図４の“ｒｅｓ＿ｄ”の値を入力する。つまり、図５の演算結果３０６が入力変数Ｂ３０１の入力となる。
【００３６】
以上のように浮動小数点の加算演算には多くの処理ステップが必要であり、整数の加算に比べ長い計算時間を必要とする。この一連の処理ステップを１クロックで実行すると、クロックが非常に低くなってしまうため、一般的には処理ステップ毎に異なるクロックサイクルで実行するように回路が設計される。
【００３７】
図６は、図４に示した浮動小数点の加算演算の処理をパイプライン処理で実行した場合のタイミング図の例である。
Ｌｏｏｐ４００は図４に示した繰り返し処理のループ回数を示す。Ｃｙｃｌｅ４０１はクロック周期を示す。処理４０２は１回目のループでのクロック周期毎の処理を示す。処理４０３は２回目のループでのクロック周期毎の処理を示す。図４では、ループ回数はＮである。
図６の処理４０２及び処理４０３のクロック周期毎の処理で、図６の変数入替Ａ０及び変数入替Ａ１は図５の変数入替処理３０２に該当する。図６の桁合せＢ０及び桁合せＢ１は図５の桁合せ処理３０３に該当する。図６の加算Ｃ０及び加算Ｃ１は図５の加算処理３０４に該当する。図６の丸めＤ０及び丸めＤ１は図５の丸め処理３０５に該当する。
【００３８】
図６では１回のループの演算処理の処理サイクルは４サイクルであるが、パイプライン処理にすることにより、Ｎ個の浮動小数点配列からの合計値算出の処理サイクル数は「Ｎ＋３」サイクルで実行できる。
しかし、図６では、処理４０２の丸めＤ０が４回目のサイクルで実行されているのに対し、処理４０３の変数入替Ａ１が２回目のサイクルで実行されている。処理４０２の丸めＤ０の出力データと処理４０３の変数入替Ａ１の入力データとはイタレーション間のデータ依存があるため、データハザードが発生し、所望の演算結果が得られない虞がある。
【００３９】
図７は、図６に対してデータハザードを回避するようにクロック周期毎の処理の実行タイミングを変更した場合のタイミング図の例である。
図７において、Ｌｏｏｐ５００は図６のＬｏｏｐ４００に対応し、Ｃｙｃｌｅ５０１は図６のＣｙｃｌｅ４０１に対応する。また、処理５０２は図６の処理４０２に対応し、処理５０３は図６の処理４０３に対応している。
図７では、処理５０２の丸めＤ０を４回目のサイクルで実行後、処理５０３の変数入替Ａ１を第５サイクルで実行するように変更し、データハザードを回避している。
しかし、図７では、Ｎ個の浮動小数点配列からの合計値算出の処理サイクル数は「Ｎ×４」サイクルが必要となる。
【００４０】
以上で、本実施の形態の前提となる高位合成技術についての説明を終わる。
【００４１】
＊＊＊動作の説明＊＊＊
次に、本実施の形態に係る高位合成装置１００の動作について説明する。
図８を用いて、本実施の形態に係る高位合成装置１００の高位合成方法５１０及び高位合成プログラム５２０による高位合成処理Ｓ１００の処理の概要について説明する。
図８に示す高位合成処理Ｓ１００では、図３に示した高位合成処理Ｓ１００ｘに対して、パイプライン判定処理Ｓ１５０と、ＣＤＦＧ変更処理Ｓ１６０とが追加されている。また、スケジューリング処理Ｓ１２０は、図３で説明したスケジューリング処理Ｓ１２０ｘに、スケジューリング結果１２２を出力する処理を加えた処理である。ＣＤＦＧ生成処理Ｓ１１０、バインディング処理Ｓ１３０、ＲＴＬ生成処理Ｓ１４０の処理については、図３で説明したものと同様である。
【００４２】
以下において、ソースコード１７１は、演算処理を繰り返す繰り返し演算処理であって前記演算処理の出力を次の演算処理の入力とする繰り返し演算処理の動作を記述している。
また、第１ＣＤＦＧ１１１は、演算処理を繰り返す繰り返し演算処理であって演算処理の出力を次の演算処理の入力とする繰り返し演算処理を表したＣＤＦＧである。具体的には、第１ＣＤＦＧ１１１は、ＣＤＦＧ生成部１１０によりソースコード１７１から生成される。
また、以下において、第１ＣＤＦＧ１１１のパイプライン化とは、第１ＣＤＦＧ１１１に表された繰り返し演算処理をパイプライン処理で実行できるようにすることを意味する。
【００４３】
スケジューリング処理Ｓ１２０は、スケジューリング処理Ｓ１２０ｘにスケジューリング結果１２２を出力するという処理が加わる。
スケジューリング処理Ｓ１２０において、スケジューリング部１２０は、第１ＣＤＦＧに表された繰り返し演算処理をパイプライン処理で実行した場合のスケジューリング結果１２２を出力する。具体的には、スケジューリング部１２０は、パイプライン処理を行う制御サイクルで処理を実現出来なかったことを示す情報と、データハザードが発生したデータハザード変数と、パイプラインの処理サイクルが４サイクルであることを含むスケジューリング結果１２２を出力する。データハザード変数とは、第１ＣＤＦＧ１１１に表された繰り返し演算処理をパイプライン処理で実行した場合にデータハザードが生じた変数である。パイプラインの処理サイクルとは、すなわち演算処理の処理サイクルである。
【００４４】
パイプライン判定処理Ｓ１５０において、パイプライン判定部１５０は、スケジューリング結果１２２に基づいて、第１ＣＤＦＧ１１１に表された繰り返し演算処理がパイプライン処理できるか否かを判定する。パイプライン判定部１５０は、スケジューリング結果１２２に含まれるデータハザード変数に基づいて、第１ＣＤＦＧ１１１に表された繰り返し演算処理がパイプライン処理できるか否かを判定する。つまり、パイプライン判定部１５０は、第１ＣＤＦＧ１１１を変更すれば、繰り返し演算処理のパイプライン化が可能か否かを判定する。パイプライン判定部１５０は、スケジューリング処理Ｓ１２０により出力されたスケジューリング結果１２２に基づいて、第１ＣＤＦＧ１１１のパイプライン化が可能か否かを判定する。
第１ＣＤＦＧ１１１のパイプライン化が可能と判定された場合、処理はＣＤＦＧ変更処理Ｓ１６０に進む。
第１ＣＤＦＧ１１１のパイプライン化が不可と判定された場合、処理はバインディング処理Ｓ１３０に進む。
パイプライン判定処理Ｓ１５０については後で詳しく説明する。
【００４５】
ＣＤＦＧ変更処理Ｓ１６０では、ＣＤＦＧ変更部１６０は、第１ＣＤＦＧ１１１を変更し、変更後の第２ＣＤＦＧ１１２を生成する。ＣＤＦＧ変更部１６０は、繰り返し演算処理を表した第１ＣＤＦＧ１１１を取得し、第１ＣＤＦＧ１１１を、第１ＣＤＦＧ１１１で表された繰り返し演算処理をパイプライン処理で実行する第２ＣＤＦＧ１１２に変更する。ＣＤＦＧ変更部１６０は、変更した第２ＣＤＦＧ１１２をスケジューリング処理Ｓ１２０に入力する。
ＣＤＦＧ変更処理Ｓ１６０については後で詳しく説明する。
【００４６】
次に、本実施の形態に係る高位合成処理Ｓ１００についてさらに詳しく説明する。
【００４７】
＜ＣＤＦＧ生成処理Ｓ１１０＞
ＣＤＦＧ生成処理Ｓ１１０は、上述したように、ソースコード１７１から第１ＣＤＦＧ１１１を生成する処理である。
【００４８】
図９は、本実施の形態に係るＣＤＦＧ生成部１１０が図４に示したソースコード１７１から生成した第１ＣＤＦＧ１１１の一例を示す図である。
図９において、第１ＣＤＦＧ１１１は、演算処理７０２を繰り返す繰り返し演算処理７９０であって演算処理７０２の出力を次の演算処理７０２の入力とする繰り返し演算処理７９０を表している。第１ＣＤＦＧ１１１は、複数のＤＦＧ（データフローグラフ）から構成される。
初期設定ＤＦＧ７００は、初期設定のＤＦＧで、ループ条件判定をする変数‘ｉ’と演算結果値“ｒｅｓ＿ｄ”とに０を設定している。
条件判定ＤＦＧ７０１は、条件判定の制御を表し、“ｉ＜Ｎ”の場合は、演算処理を行い、“ｅｌｓｅ”（その他）の場合は、演算処理を終了することを示している。
演算処理ＤＦＧ７０２は、演算処理のＤＦＧであり、図５で示した浮動小数点の加算処理を行っている。
条件更新ＤＦＧ７０３は、ループ条件判定を行う変数‘ｉ’を更新するＤＦＧで、‘ｉ’は１ループ毎に１ずつ加算される。
【００４９】
＜スケジューリング処理Ｓ１２０＞
スケジューリング処理Ｓ１２０において、スケジューリング部１２０は、第１ＣＤＦＧ１１１内の各ノードで示される処理を実行するために必要な制御サイクルを決定する。
スケジューリング部１２０は、図９の第１ＣＤＦＧ１１１が入力されると、図５で示した処理に対応付け、変数入替処理３０２、桁合せ処理３０３、加算処理３０４、丸め処理３０５にそれぞれに１サイクルの処理サイクルを割り付ける。
【００５０】
上述したように、スケジューリング部１２０は、第１ＣＤＦＧ１１１に含まれる繰り返し演算処理７９０をパイプライン化した制御サイクルを試行する。具体的には、スケジューリング部１２０は、図６で示したタイミングでパイプライン処理を行うような制御サイクルを試行する。
スケジューリング部１２０は、試行した制御サイクルで処理が実行出来ない場合は、別の方法を試行し、制御サイクルを決定する。具体的には、図６で示したパイプライン処理の場合、イタレーション間に依存性のある変数があり、データハザードが発生するため処理を実行することが出来ない。そのため、スケジューリング部１２０は、図７で示したタイミングで処理を行う制御サイクルに決定する。
【００５１】
スケジューリング部１２０は、スケジューリング結果として制御サイクル情報１２１を出力する。具体的には、スケジューリング部１２０は、図７で示したタイミングで処理を行う制御サイクルに決定した場合、制御サイクルはＮ×４であることを含む制御サイクル情報１２１を出力する。
また、スケジューリング部１２０は、試行した制御サイクルで処理が実行出来なかったことを示す情報をスケジューリング結果１２２として出力する。具体的には、スケジューリング部１２０は、パイプラン処理を行うような制御サイクルで処理を実現出来なかったことと、データハザードが発生したデータハザード変数と、パイプラインの処理サイクルとを含むスケジューリング結果１２２を出力する。
【００５２】
図１０は、本実施の形態に係るスケジューリング結果１２２の例を示す図である。
図６で示したパイプライン処理の制御サイクルが実行できなかった場合、スケジューリング部１２０は、図１０に示すようなスケジューリング結果１２２を出力する。スケジューリング結果１２２は、パイプラン処理を行う制御サイクルで処理を実現出来たか否かを示す情報と、データハザードが発生したデータハザード変数２２２と、パイプラインの処理サイクルとが含まれる。図６で示したパイプライン処理の制御サイクルが実行できなかった場合、スケジューリング結果１２２には、パイプライン試行結果２２１は失敗、データハザード変数２２２はｒｅｓ＿ｄ、パイプラインの処理サイクル２２３として４が設定される。
【００５３】
＜パイプライン判定処理Ｓ１５０＞
パイプライン判定処理Ｓ１５０において、パイプライン判定部１５０は、スケジューリング部１２０により通知されたスケジューリング結果１２２に基づいて、第１ＣＤＦＧ１１１のパイプライン化の可否を判定する。パイプライン判定部１５０は、第１ＣＤＦＧ１１１についてパイプライン化が不要又はパイプライン化が不可と判定した場合、スケジューリング部１２０が出力した制御サイクル情報１２１をバインディング部１３０に出力する。パイプライン判定部１５０は、パイプライン化が可能と判定した場合、スケジューリング部１２０から通知されたスケジューリング結果１２２をＣＤＦＧ変更部１６０に通知し、第１ＣＤＦＧ１１１の変更を指示する。
【００５４】
図１１は、本実施の形態に係るパイプライン判定処理Ｓ１５０のフロー図である。
ステップＳ１５１において、パイプライン判定部１５０は、スケジューリング結果１２２に基づいて、データハザードが発生しパイプライン化が失敗したか否かを判定する。具体的には、パイプライン判定部１５０は、スケジューリング結果１２２の「パイプライン化の試行結果」欄と、「データハザード変数」欄とから、データハザードが発生しパイプライン化が失敗したか否かを判定する。図１０の例では、パイプライン判定部１５０は、「パイプライン化の試行結果」欄が失敗であり、「データハザード変数」欄にｒｅｓ＿ｄが設定されているので、データハザードが発生しパイプライン化が失敗したと判定する。パイプライン判定部１５０は、データハザードが発生しパイプライン化が失敗したと判定した場合、ステップＳ１５２に進み、それ以外の場合、ステップＳ１５４に進む。
【００５５】
ステップＳ１５２において、パイプライン判定部１５０は、スケジューリング結果１２２に基づいて、データハザード変数が前演算処理（すなわち、前ループ）の出力変数を次演算処理の入力変数とすることにより発生しているもののみであるか否かを判定する。データハザード変数が前演算処理（すなわち、前ループ）の出力変数を次演算処理の入力変数とすることにより発生しているもののみということは、演算処理に含まれる複数の演算ノードの演算順序に依存するデータハザードは発生していないことを意味する。具体的には、パイプライン判定部１５０は、スケジューリング結果１２２の「データハザード変数」欄に設定されている変数と第１ＣＤＦＧ１１１とを比較して、スケジューリング結果１２２の「データハザード変数」欄に設定されている変数が、前演算処理の出力変数でありかつ次演算処理の入力変数としてのみ用いられているか否かを判定する。パイプライン判定部１５０は、パイプライン処理で発生するデータハザードが、前ループでの出力変数を入力とすることで発生しており、演算ノードの演算順序に依存するデータハザードは発生していないことを検出した場合、ステップＳ１５３に進む。それ以外の場合、ステップＳ１５４に進む。
【００５６】
ステップＳ１５３において、パイプライン判定部１５０は、第１ＣＤＦＧ１１１のパイプライン化が可能であると判定する。パイプライン判定部１５０は、パイプライン化が可能と判定した場合、スケジューリング部１２０から通知されたスケジューリング結果１２２をＣＤＦＧ変更部１６０に通知し、第１ＣＤＦＧ１１１の変更を指示する。
ステップＳ１５４において、パイプライン判定部１５０は、第１ＣＤＦＧ１１１のパイプライン化は不要又は不可であると判定する。パイプライン判定部１５０は、パイプライン化が不要又はパイプライン化が不可と判定した場合、スケジューリング部１２０が出力した制御サイクル情報１２１をバインディング部１３０に出力する。
【００５７】
＜ＣＤＦＧ変更処理Ｓ１６０＞
ＣＤＦＧ変更処理Ｓ１６０において、ＣＤＦＧ変更部１６０は、第１ＣＤＦＧ１１１を、第１ＣＤＦＧ１１１で表された繰り返し演算処理７９０をパイプライン処理で実行する第２ＣＤＦＧ１１２に変更する。ＣＤＦＧ変更部１６０は、パイプライン判定部１５０により、第１ＣＤＦＧ１１１に表された繰り返し演算処理７９０がパイプライン処理できると判定された場合に第１ＣＤＦＧ１１１を第２ＣＤＦＧ１１２に変更する。
言い換えると、ＣＤＦＧ変更部１６０は、ＣＤＦＧ生成部１１０が生成した第１ＣＤＦＧ１１１を、演算処理（ループ処理）の処理サイクルのパイプライン処理で実現できるように変更する。すなわち、ＣＤＦＧ変更部１６０は、第１ＣＤＦＧ１１１を、演算処理（ループ処理）の処理サイクルである４サイクルのパイプライン処理で実現できるように第２ＣＤＦＧ１１２に変更する。
【００５８】
図１２は、本実施の形態に係るＣＤＦＧ変更部１６０が第１ＣＤＦＧ１１１を変更した第２ＣＤＦＧ１１２の一例を示す図である。
ＣＤＦＧ変更部１６０は、繰り返し演算処理７９０のループ回数と演算処理の処理サイクルとに基づいて、第１ＣＤＦＧ１１１を第２ＣＤＦＧ１１２に変更する。
ＣＤＦＧ変更部１６０は、第１ＣＤＦＧ１１１を、繰り返し演算処理７９０を処理サイクルの数のサブ繰り返し演算処理に分割する。そして、ＣＤＦＧ変更部１６０は、処理サイクルの数のサブ繰り返し演算処理を実行する第１演算処理８０４と、処理サイクルの数のサブ繰り返し演算処理の各々の出力を入力として演算処理８１２を実行する第２演算処理８１４とを表した第２ＣＤＦＧ１１２に変更する。
第１演算処理８０４は、パイプライン処理で実行できる。第１演算処理８０４は、第一の繰り返し演算処理ともいう。第２演算処理８１４は、パイプライン処理で実行できる。なお、第２演算処理８１４は、時分割処理で実行してもよい。第２演算処理８１４は、第二の繰り返し演算処理ともいう。
【００５９】
図１２では、図９に示す第１ＣＤＦＧ１１１を演算処理（ループ処理）の処理サイクルである４サイクルのパイプラン処理で実現できるように変更した第２ＣＤＦＧ１１２を示している。図１２において、図９と同様の構成には同一の符号を付している。
【００６０】
図１２の第２ＣＤＦＧ１１２において、図９に示す第１ＣＤＦＧ１１１と異なる点は以下の点である。
１つ目は、第１ＣＤＦＧ１１１の初期設定７００が、第２ＣＤＦＧ１１２では初期設定８００に変更された点である。
２つ目は、第１ＣＤＦＧ１１１の演算処理７０２が、第２ＣＤＦＧ１１２では演算処理８０２に変更された点である。
３つ目は、第２ＣＤＦＧ１１２では、初期設定８１０と、条件判定８１１と、演算処理８１２と、ループ条件変数更新８１３とから成る第２演算処理が追加された点である。
【００６１】
図１２の第２ＣＤＦＧ１１２では、初期設定８００と条件判定７０１と演算処理８０２とループ条件変数更新８０３とで第１演算処理８０４を行い、入力変数“ｉｎ＿ｄ［０］”〜“ｉｎ＿ｄ［Ｎ−１］”から、“ｒｅｓ＿ｄ１［０］”〜“ｒｅｓ＿ｄ１［３］”までを算出する。また、第２ＣＤＦＧ１１２では、初期設定８１０と条件判定８１１と演算処理８１２とループ条件変数更新８１３とで第２演算処理８１４を行う。第２ＣＤＦＧ１１２では、第１ＣＤＦＧ１１１の出力である“ｒｅｓ＿ｄ１［０］”〜“ｒｅｓ＿ｄ１［３］”を入力とし、“ｒｅｓ＿ｄ１［０］＋ｒｅｓ＿ｄ１［１］＋ｒｅｓ＿ｄ１［２］＋ｒｅｓ＿ｄ１［３］”を実行し、“ｒｅｓ＿ｄ”として算出する。
【００６２】
図１３は、本実施の形態に係るＣＤＦＧ変更処理Ｓ１６０のフロー図である。
ステップＳ１６１において、ＣＤＦＧ変更部１６０は、演算処理７０２の出力変数“ｒｅｄ＿ｄ”を、演算処理（パイプライン処理）の処理サイクル数分で配列化するように第１ＣＤＦＧ１１１を変更する。本実施の形態では、演算処理（パイプライン処理）のサイクル数が４サイクルであることから、ＣＤＦＧ変更部１６０は、演算処理８０２のように出力変数を“ｒｅｓ＿ｄ１［０］〜ｒｅｓ＿ｄ１［４］”に配列化し、演算結果の取得元と保存先を“ｒｅｄ＿ｄ１［ｉ％４］”として、ループ回数毎に“ｒｅｓ＿ｄ１［０］”〜“ｒｅｓ＿ｄ１［３］”から割り当てている。
【００６３】
ステップＳ１６２において、ＣＤＦＧ変更部１６０は、配列化した出力変数の初期値設定を行うように第１ＣＤＦＧ１１１を変更する。ＣＤＦＧ変更部１６０は、配列化した出力変数“ｒｅｓ＿ｄ１［０］〜ｒｅｓ＿ｄ１［４］”の初期値設定を行うように第１ＣＤＦＧ１１１を変更する。具体的には、ＣＤＦＧ変更部１６０は、初期設定８００のように出力変数“ｒｅｓ＿ｄ［０］＝０”、“ｒｅｓ＿ｄ［１］＝０”、“ｒｅｓ＿ｄ［２］＝０”、“ｒｅｓ＿ｄ［３］＝０”を第１ＣＤＦＧ１１１に追加する。
【００６４】
ステップＳ１６３において、ＣＤＦＧ変更部１６０は、第２演算処理８１４の追加を行う。追加する第２演算処理８１４のＣＤＦＧは変更前の第１ＣＤＦＧ１１１と同様である。第２演算処理８１４では、演算処理の入力変数が第１演算処理８０４の出力になっている点と、演算処理８１２の繰り返し演算回数が演算処理（パイプライン処理）のサイクル数になっている点が異なる。
具体的には、ＣＤＦＧ変更部１６０は、まず、初期設定７００を複製し初期設定８００を生成する。次に、ＣＤＦＧ変更部１６０は、条件判定７０１の繰り返し演算数“ｉ＜Ｎ”を“ｉ＜４”に変更し、条件判定８１１を生成する。次に、演算処理７０２の入力変数“ｉｎ＿ｄ”を“ｒｅｄ＿ｄ１［ｉ］”に変更し、演算処理８１２を生成する。最後に、ループ条件変数更新７０３を複製し、ループ条件変数更新８１３を生成する。
【００６５】
以上により、ＣＤＦＧ変更部１６０は、演算処理の出力変数を処理サイクルの数で配列化することにより、繰り返し演算処理７９０を処理サイクルの数である４つのサブ繰り返し演算処理に分割する。４つのサブ繰り返し演算処理とは、“ｒｅｄ＿ｄ１［ｉ％４］”と“ｉｎ＿ｄ［ｉ］”とを入力して、“ｒｅｄ＿ｄ１［ｉ％４］”を出力する各演算処理８０２である。この４つのサブ繰り返し演算処理はパイプライン処理で実行できる。そして、ＣＤＦＧ変更部１６０は、４つのサブ繰り返し演算処理の各実行結果を第２演算処理８１４に出力し、演算処理８１２を実行する。
【００６６】
以上により、本実施の形態に係る高位合成処理Ｓ１００についての説明を終わる。
【００６７】
図１４は、本実施の形態に係るＣＤＦＧ変更処理Ｓ１６０の前後での演算処理を数式で表した例である。
【００６８】
数式５０は、ＣＤＦＧ変更処理Ｓ１６０前の図９で示した第１ＣＤＦＧ１１１を表す。数式５１の（１）から（５）は、ＣＤＦＧ変更処理Ｓ１６０後の図１２で示した第２ＣＤＦＧ１１２を表す。数式５１の（１）から（４）が第１演算処理８０４に対応し、数式５１の（５）が第２演算処理８１４に対応する。
【００６９】
図１５は、本実施の形態に係るＣＤＦＧ変更処理Ｓ１６０の前後での演算処理を回路で表した例である。
【００７０】
回路図６０は、ＣＤＦＧ変更処理Ｓ１６０前の図９で示した第１ＣＤＦＧ１１１から生成した回路を表す。回路図６１は、ＣＤＦＧ変更処理Ｓ１６０後の図１２で示した第２ＣＤＦＧ１１２から生成した回路を表している。
【００７１】
回路図６０では、演算処理回路６０１はパイプライン処理できないため、時分割処理で実施している。
一方、回路図６１では、演算処理回路６１１が図１２の第１演算処理８０４に対応し、演算処理回路６１３が図１２の第２演算処理８１４に対応している。演算処理回路６１１は演算処理をパイプライン処理で実施し、演算結果はＦＩＦＯ６１２に一旦保存された後、演算処理回路６１３で演算処理を時分割処理で実施する。
【００７２】
＊＊＊他の構成＊＊＊
本実施の形態の図１５では第２演算処理８１４に対応する演算処理回路６１３を時分割処理で実施している例を示しているが、第２演算処理は第１演算処理と同様にパイプライン処理で行っても良いし、並列処理で行っても良い。
【００７３】
また、本実施の形態では、パイプライン処理サイクルが４の場合の例をあげたが、パイプライン処理サイクル数が４以外の場合であっても本実施の形態は適用可能である。第１演算処理でパイプライン処理サイクル数分の配列に演算結果を格納し、第２演算処理でパイプライン処理サイクル数分の配列を入力とした演算を行うようにＣＤＦＧを変更すれば良い。
【００７４】
また、本実施の形態では演算処理として浮動小数点の加算を例に説明したが、本実施の形態が対象とする演算処理は浮動小数点の加算に限定されない。図１２の第１演算処理８０４は図９の繰り返し演算処理７９０と演算処理自体は同一で、入出力値の配列の個数のみを変更している。また、図１２の第２演算処理８１４は図９の繰り返し演算処理７９０と演算処理は同一で入出力値の保存先が異なるのみである。よって、本実施の形態は、入力変数と演算処理の出力変数を入力とする演処理算を繰り返し行う動作記述であれば、演算処理の内容は限定せずに適用することができる。
【００７５】
また、高位合成装置１００は、通信装置を備え、通信装置を介して、ソースコード１７１、合成制約情報１７２、回路情報１７３を受信してもよい。また、高位合成装置１００は、通信装置を介して、ＲＴＬ１７４を送信してもよい。この場合、通信装置はレシーバとトランスミッタとを備える。具体的には、通信装置は通信チップ又はＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。通信装置はデータを通信する通信部として機能する。レシーバはデータを受信する受信部として機能し、トランスミッタはデータを送信する送信部として機能する。
【００７６】
また、本実施の形態では、高位合成装置１００の「部」の機能がソフトウェアで実現されるが、変形例として、高位合成装置１００の「部」の機能がハードウェアで実現されてもよい。
図１６を用いて、本実施の形態の変形例に係る高位合成装置１００ｙの構成について説明する。
図１６に示すように、高位合成装置１００ｙは、処理回路９０９、入力インタフェース９３０、出力インタフェース９４０といったハードウェアを備える。
【００７７】
処理回路９０９は、前述した「部」の機能及び記憶部１７０を実現する専用の電子回路である。処理回路９０９は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、又は、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）である。
【００７８】
「部」の機能は、１つの処理回路９０９で実現されてもよいし、複数の処理回路９０９に分散して実現されてもよい。
【００７９】
別の変形例として、高位合成装置１００の機能がソフトウェアとハードウェアとの組合せで実現されてもよい。即ち、高位合成装置１００の一部の機能が専用のハードウェアで実現され、残りの機能がソフトウェアで実現されてもよい。
【００８０】
プロセッサ９１０、記憶装置９２０、及び、処理回路９０９を、総称して「プロセッシングサーキットリ」という。つまり、高位合成装置１００の構成が図１及び図１６のいずれに示した構成であっても、「部」の機能及び記憶部１７０は、プロセッシングサーキットリにより実現される。
【００８１】
「部」を「工程」又は「手順」又は「処理」に読み替えてもよい。また、「部」の機能をファームウェアで実現してもよい。
【００８２】
＊＊＊本実施の形態の効果の説明＊＊＊
以上のように、本実施の形態に係る高位合成装置１００は、ＣＤＦＧを変更するＣＤＦＧ変更部を備える。ＣＤＦＧ変更部は、出力変数を次の入力変数として演算処理を繰り返す繰り返し演算処理をパイプライン化可能なようにＣＤＦＧを変更する。よって、出力変数を次の入力変数として演算処理を繰り返す繰り返し演算処理についてもパイプライン化をすると共に、適切な演算結果を得ることができる。また、このようにループ１回の処理の入力が前回の結果を参照するような回路においても、処理性能（処理レイテンシとクロック周期の積）が高いＲＴＬ記述を生成することができる。
【００８３】
また、本実施の形態に係る高位合成装置１００は、スケジューリング部から通知されたスケジューリング結果に基づいて、繰り返し演算処理のパイプライン処理化の可否を判定するパイプライン判定部を備える。ＣＤＦＧ変更部は、パイプライン判定部によりパイプライン化が可能な場合のみＣＤＦＧを変更することができるので、無駄な処理を省き、効率的にＣＤＦＧを変更することができる。
【００８４】
また、本実施の形態に係る高位合成装置１００は、パイプライン処理サイクル数に応じてＣＤＦＧの変更方法を決定するので、元のＣＤＦＧを利用してＣＤＦＧを変更することができる。
【００８５】
以上、本発明の実施の形態について説明したが、この実施の形態の説明において「部」として説明するもののうち、いずれか１つのみを採用してもよいし、いくつかの任意の組合せを採用してもよい。つまり、高位合成装置の機能ブロックは、上記の実施の形態で説明した機能を実現することができれば、任意である。これらの機能ブロックを、どのような組合せ、或いは任意のブロック構成で高位合成装置を構成しても構わない。また、高位合成装置は、１つの装置でなく、複数の装置から構成された高位合成システムでもよい。
【００８６】
また、この実施の形態のうち、複数の部分を組合せて実施しても構わない。或いは、この実施の形態のうち、部分的に実施しても構わない。その他、この実施の形態を、全体として或いは部分的に、どのように組合せて実施しても構わない。
なお、上記の実施の形態は、本質的に好ましい例示であって、本発明、その適用物や用途の範囲を制限することを意図するものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【００８７】
５０，５１  数式、６０，６１  回路図、１００，１００ｘ，１００ｙ  高位合成装置、１０１，１０１ｘ  高位合成部、１１０  ＣＤＦＧ生成部、１１１  ＣＤＦＧ、１２０，１２０ｘ  スケジューリング部、１２１  制御サイクル情報、１２２  スケジューリング結果、１３０  バインディング部、１４０  ＲＴＬ生成部、１５０  パイプライン判定部、１６０  ＣＤＦＧ変更部、１１２  第２ＣＤＦＧ、１７０  記憶部、１７１  ソースコード、１７２  合成制約情報、１７３  回路情報、１７４  ＲＴＬ、２２１  試行結果、２２２  データハザード変数、２２３  処理サイクル、３００  入力変数Ａ、３０１  入力変数Ｂ、３０２  変数入替処理、３０３  桁合せ処理、３０４  加算処理、３０５  丸め処理、３０６  演算結果、３１０  比較、３１１  スイッチ、３１２  減算、３１３  シフタ、４００，５００  Ｌｏｏｐ、４０１，５０１  Ｃｙｃｌｅ、４０３，４０３，５０２，５０３  処理、５１０  高位合成方法、５２０  高位合成プログラム、６０１，６１１，６１３  演算処理回路、７００，８００，８１０  初期設定、７０１，８１１  条件判定、７０２，８０２，８１２  演算処理、７０３，８０３，８１３  ループ条件変数更新、７９０  繰り返し演算処理、８０４  第１演算処理、８１４  第２演算処理、９０９  処理回路、９１０  プロセッサ、９２０  記憶装置、９２１  メモリ、９２２  補助記憶装置、９３０  入力インタフェース、９４０  出力インタフェース、Ｓ１００，Ｓ１００ｘ  高位合成処理、Ｓ１１０  ＣＤＦＧ生成処理、Ｓ１２０，Ｓ１２０ｘ  スケジューリング処理、Ｓ１３０  バインディング処理、Ｓ１４０  ＲＴＬ生成処理、Ｓ１５０  パイプライン判定処理、Ｓ１６０  ＣＤＦＧ変更処理。
【図１】
2017158785.tif 000003
【図２】
2017158785.tif 000004
【図３】
2017158785.tif 000005
【図４】
2017158785.tif 000006
【図５】
2017158785.tif 000007
【図６】
2017158785.tif 000008
【図７】
2017158785.tif 000009
【図８】
2017158785.tif 000010
【図９】
2017158785.tif 000011
【図１０】
2017158785.tif 000012
【図１１】
2017158785.tif 000013
【図１２】
2017158785.tif 000014
【図１３】
2017158785.tif 000015
【図１４】
2017158785.tif 000016
【図１５】
2017158785.tif 000017
【図１６】
2017158785.tif 000018
【国際調査報告】
2017158785.tif 000019
2017158785.tif 000020
2017158785.tif 000021