(57)【要約】【課題】データハザードに関する有効な情報を出力することにより、ループ記述を効果的にパイプライン化することが可能な動作合成装置を提供することができる。【解決手段】一実施の形態によれば、動作合成装置１０は、回路の動作に関する記述（動作記述）を動作合成して、回路の構造に関する記述（ＲＴＬ記述）を生成する動作合成部１００と、前記回路の動作に関する記述（動作記述）に含まれるパイプライン化対象のループ記述内に記述された変数のうち、イタレーション間に依存性のある変数の情報を、その依存関係とともに表示装置４００に表示させる入出力制御部２００と、を備える。【選択図】図１
2014174940.tif 000002
【特許請求の範囲】
【請求項１】
回路の動作に関する記述を動作合成して、回路の構造に関する記述を生成する動作合成部と、
前記回路の動作に関する記述に含まれるパイプライン化対象のループ記述内に記述された変数のうち、イタレーション間に依存性のある変数の情報を、その依存性を示す情報とともに表示装置に表示させる表示制御部と、を備えた動作合成装置。
【請求項２】
前記表示制御部は、パイプライン化対象のループ記述内に記述された変数のうち、一つのループ処理内においてデータ読み出しが行われた後にデータ書き込みが行われる変数の情報を、当該データ読み出し及び当該データ書き込みの依存性を示す情報とともに前記表示装置に表示させる、請求項１に記載の動作合成装置。
【請求項３】
前記表示制御部は、パイプライン化対象のループ記述内に記述された変数のうち、一つのループ処理内においてデータ読み出しが行われた後にデータ書き込みが行われる変数の情報を、当該データ読み出し及び当該データ書き込みの依存性を示す情報とともに前記表示装置に表示させ、
前記表示制御部は、前記データ読み出し及び前記データ書き込みの間に演算処理又はメモリアクセス処理が行われる場合、当該演算処理又は当該メモリアクセス処理に関する情報をさらに前記表示装置に表示させる、請求項１に記載の動作合成装置。
【請求項４】
前記表示制御部は、前記変数の情報及びその依存性を示す情報のうち指定された変数の情報又はその依存性を示す情報に対応する前記回路の構造に関する記述の情報を前記表示装置に表示させる、請求項１に記載の動作合成装置。
【請求項５】
前記表示制御部は、前記回路の動作に関する記述を、前記変数の情報に対応させてさらに前記表示装置に表示させる、請求項１に記載の動作合成装置。
【請求項６】
前記表示装置をさらに備えた、請求項１〜５の何れか一項に記載の動作合成装置。
【請求項７】
回路の動作に関する記述を動作合成して、回路の構造に関する記述を生成する動作合成処理と、
前記回路の動作に関する記述に含まれるパイプライン化対象のループ記述内に記述された変数のうち、イタレーション間に依存性のある変数の情報を、その依存性を示す情報とともに表示装置に表示させる表示制御処理と、をコンピュータに実行させる動作合成プログラム。
【請求項８】
前記表示制御処理は、パイプライン化対象のループ記述内に記述された変数のうち、一つのループ処理内においてデータ読み出しが行われた後にデータ書き込みが行われる変数の情報を、当該データ読み出し及び当該データ書き込みの依存性を示す情報とともに前記表示装置に表示させる、請求項７に記載の動作合成プログラム。
【請求項９】
前記表示制御処理は、パイプライン化対象のループ記述内に記述された変数のうち、一つのループ処理内においてデータ読み出しが行われた後にデータ書き込みが行われる変数の情報を、当該データ読み出し及び当該データ書き込みの依存性を示す情報とともに前記表示装置に表示させ、
前記表示制御処理は、前記データ読み出し及び前記データ書き込みの間に演算処理又はメモリアクセス処理が行われる場合、当該演算処理又は当該メモリアクセス処理に関する情報をさらに前記表示装置に表示させる、請求項７に記載の動作合成プログラム。
【請求項１０】
前記表示制御処理は、前記変数の情報及びその依存性を示す情報のうち指定された変数の情報又はその依存性を示す情報に対応する前記回路の構造に関する記述の情報を前記表示装置に表示させる、請求項７に記載の動作合成プログラム。
【請求項１１】
前記表示制御処理は、前記回路の動作に関する記述を、前記変数の情報に対応させてさらに前記表示装置に表示させる、請求項７に記載の動作合成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動作合成装置及び動作合成プログラムに関し、例えばループ記述を効果的にパイプライン化するのに適した動作合成装置及び動作合成プログラムに関する。
【背景技術】
【０００２】
Ｃ言語等による回路の動作に関する記述（動作記述）から、ＲＴＬ（Register Transfer Level）記述等の回路の構造に関する記述（構造記述）を自動生成する動作合成装置の開発が進んでいる。特に近年では、高いスループット（処理能力）のＲＴＬ記述を生成することが可能な動作合成装置が求められている。
【０００３】
関連する技術が特許文献１及び非特許文献１に開示されている。
【０００４】
特許文献１に開示されたパイプライン合成システムは、動作記述に含まれるループ記述から、パイプライン動作するＲＴＬ記述を生成している。それにより、このパイプライン合成システムは、実行サイクル数を低減して高いスループットのＲＴＬ記述を生成している。また、非特許文献１には、ループ記述のパイプライン化に関する技術が開示されている。
【０００５】
ところで、動作記述に含まれるループ記述をパイプライン化する場合において、あるループ処理でデータ書き込み処理が行われる前に次のループ処理でデータ読み出し処理が行われると、意図しないデータの読み出しが行われてしまう可能性がある。このような問題をデータハザードと称す。
【０００６】
このデータハザードの発生を防ぐため、例えば、動作合成のスケジューリング時にフォワーディング処理を施す等の対策が取られている（非特許文献２参照）。
【０００７】
しかしながら、フォワーディング処理を施す動作記述に対する遅延制約条件が厳しい場合や、フォワーディング処理を施す動作記述に複数の状態を要する要素が含まれる場合には、フォワーディング処理だけでは不十分な場合がある。そこで、特許文献２及び特許文献３では、さらなる対策を行っている。
【０００８】
特許文献２には、パイプラインのステージごとに実行を制御する技術が開示されている。また、特許文献３には、ループ処理を実際にパイプライン化してみてスケジューリング制約違反が生じるかどうかを検出する技術が開示されている。
【０００９】
その他、特許文献４には、Ｃ言語等による回路の動作に関する記述（ここでは設計記述）と、動作合成によりスケジューリングされた各状態と、の対応関係を出力する技術が開示されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特許第４７７０６５７号明細書
【特許文献２】特開２００９−２３８０８５号公報
【特許文献３】特開２０１０−１５３３９号公報
【特許文献４】特開２０１１−１０８１６４号公報
【非特許文献】
【００１１】
【非特許文献１】Takao Toi, Noritsugu Nakamura, Yoshinosuke Kato, Toru Awashima, Kazutoshi Wakabayashi, "High-level Synthesis Challenges for Mapping a Complete Program on a Dynamically Reconfigurable Processor", IPSJ Transaction on System LSI Design Methodology, Feb, 2010, vol.3, pp91-104
【非特許文献２】デビット・Ａ・パターソン、ジョン・Ｌ・ヘネシー著、"コンピュータの構成と設計"、日経ＢＰ社
【発明の概要】
【発明が解決しようとする課題】
【００１２】
例えば、特許文献３に開示された構成は、ループ記述を実際にパイプライン化してみてデータハザードが発生するか否かを検出するものであり、データハザード発生の恐れがあるにも関わらず回路規模等を犠牲にして自動的にデータハザードの発生を回避した場合には、データハザードを検出しない。つまり、この関連する技術は、データハザードを起こし得る全てのループ記述の情報を出力するものではない。このように、この関連する技術は、設計者に対してデータハザードに関する有効な情報を出力しないため、ループ記述を効果的にパイプライン化することができないという問題があった。
【００１３】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１４】
一実施の形態によれば、動作合成装置は、回路の動作に関する記述に含まれるパイプライン化対象のループ記述内に記述された変数のうち、イタレーション間に依存性のある変数の情報を、その依存性を示す情報とともに表示装置に表示させる表示制御部、を備える。
【００１５】
一実施の形態によれば、動作合成プログラムは、回路の動作に関する記述に含まれるパイプライン化対象のループ記述内に記述された変数のうち、イタレーション間に依存性のある変数の情報を、その依存性を示す情報とともに表示装置に表示させる表示制御処理、を備える。
【発明の効果】
【００１６】
前記一実施の形態によれば、データハザードに関する有効な情報を出力することにより、ループ記述を効果的にパイプライン化することが可能な動作合成装置及び動作合成プログラムを提供することができる。
【図面の簡単な説明】
【００１７】
【図１】実施の形態１にかかる動作合成装置の構成例を示すブロック図である。
【図２】実施の形態１にかかる動作合成部を説明するための概念図である。
【図３】実施の形態１にかかる動作合成部の論理構成の一例を示すブロック図である。
【図４Ａ】パイプライン化を説明するための概念図である。
【図４Ｂ】パイプライン化を説明するための概念図である。
【図４Ｃ】パイプライン化を説明するための概念図である。
【図５】データハザードを説明するための概念図である。
【図６】フォワーディングを説明するための概念図である。
【図７】実施の形態１にかかる動作合成部の動作を示すフローチャートである。
【図８Ａ】ループカウンタ回路のソースコードを示す図である。
【図８Ｂ】ループカウンタ回路の論理構成を示すブロック図である。
【図９】表示装置の具体的な表示内容の一例を示す図である。
【図１０】表示装置の具体的な表示内容の一例を示す図である。
【図１１】表示装置の具体的な表示内容の一例を示す図である。
【図１２】表示装置の具体的な表示内容の一例を示す図である。
【図１３】表示装置の具体的な表示内容の一例を示す図である。
【図１４】実施の形態１にかかる動作合成装置のハードウエア構成の一例を示すブロック図である。
【図１５Ａ】実施の形態１にかかるデータ処理システムの構成例を示すブロック図である。
【図１５Ｂ】実施の形態１にかかるデータ処理システムの構成例を示すブロック図である。
【発明を実施するための形態】
【００１８】
以下、図面を参照しつつ、実施の形態について説明する。なお、図面は簡略的なものであるから、この図面の記載を根拠として実施の形態の技術的範囲を狭く解釈してはならない。また、同一の要素には、同一の符号を付し、重複する説明は省略する。
【００１９】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００２０】
さらに、以下の実施の形態において、その構成要素（動作ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００２１】
＜実施の形態１＞
図１は、実施の形態１にかかる動作合成装置１０の構成例を示すブロック図である。本実施の形態にかかる動作合成装置１０は、回路の動作に関する記述に含まれるパイプライン化対象のループ記述内に記述された変数のうち、イタレーション間に依存性のある変数の情報を、その依存性を示す情報とともに表示装置に表示させる。それにより、本実施の形態にかかる動作合成装置１０は、データハザードに関する有効な情報を設計者に知らせることができるため、ループ記述を効果的にパイプライン化することができる。以下、具体的に説明する。
【００２２】
図１に示す動作合成装置１０は、動作合成部１００と、入出力制御部２００と、を備える。なお、図１の例では、入力装置３００及び表示装置４００も示されている。
【００２３】
（動作合成部１００）
動作合成部１００は、Ｃ言語等の回路の動作に関する記述（動作記述：以下、ソースコードと称す）１１を動作合成して、回路の構造に関する記述（構造記述；以下、ＲＴＬ記述と称す）１４を出力する部である。なお、ＲＴＬ記述１４は、図２の概念図にも示すように、例えば、状態遷移マシン（ＦＳＭ；Finite State Machine）と、状態遷移マシン中の複数の状態のそれぞれに対応する複数のデータパスと、からなる。
【００２４】
（入力装置３００）
入力装置３００は、例えば、キーボード等の文字入力部と、マウスやタッチパッドなどの位置入力部と、によって構成される。文字入力部は、ソースコード１１、合成制約１２及び回路情報１３等を入出力制御部２００に入力する。位置入力部は、表示装置４００の表示画面の任意の位置を指定（例えば、マウスでクリック）することにより、指定位置に対応する情報を入出力制御部２００に入力する。
【００２５】
（入出力制御部２００）
入出力制御部（表示制御部）２００は、入力装置３００からのソースコード１１、合成制約１２及び回路情報１３等を動作合成部１００に渡す。また、入出力制御部２００は、動作合成部１００による動作合成結果（ＲＴＬ記述１４の情報）及びデータハザードに関する情報（後述）を編集して表示装置４００に渡す。
【００２６】
（表示装置４００）
表示装置４００は、動作合成部１００による動作合成結果及び入出力制御部２００によって編集されたデータハザードに関する情報を表示画面に表示する。
【００２７】
（動作合成部１００の詳細）
続いて、図３を参照して、動作合成部１００の詳細を説明する。図３は、本実施の形態にかかる動作合成部１００の論理構成の一例を示すブロック図である。なお、本実施の形態では、動作合成部１００によって生成されるＲＴＬ記述１４が、その後オブジェクトコードに変換され、状態毎に動的に回路構成を変化させるアレイ型プロセッサ（動的再構成プロセッサ）２０に適用される場合を例に説明する。
【００２８】
図３に示す動作合成部１００は、ＤＦＧ生成部１０１と、スケジューリング部１０２と、アロケーション部１０３と、ＦＳＭ生成部１０４と、データパス生成部１０５と、パイプライン構成生成部１０６と、ＲＴＬ記述生成部１０７と、パイプライン判定部１０８と、を有する。
【００２９】
ＤＦＧ生成部１０１は、ソースコード１１の構文解析をして、演算等の各種処理機能を表す節点と、データの流れを表す枝と、からなるＤＦＧ（Data Flow Graph）を作成する。
【００３０】
パイプライン判定部１０８は、ソースコード１１に含まれるループ記述のそれぞれについてパイプライン化するか否かを判定する。本実施の形態では、パイプライン判定部１０８は、ユーザーによって指定されたループ記述を、パイプライン化対象のループ記述と判定している。なお、パイプライン判定部１０８は、各ループ記述についてパイプライン化するか否かを自動で判定する構成であっても良い。
【００３１】
（パイプライン化について）
以下、図４Ａ〜図４Ｃを参照して、ループ記述のパイプライン化について簡単に説明する。図４Ａは、ループ記述（状態数＝４）をパイプライン化しない場合の処理内容を示す概念図である。図４Ｂは、ループ記述の４状態を２状態に折り畳んでパイプライン化した場合の処理内容を示す概念図である。図４Ｃは、ループ記述の４状態を１状態に折り畳んでパイプライン化した場合の処理内容を示す概念図である。なお、本例では、パイプライン段数が４段、ループ回数が１０回であるものとする。また、本例では、１ステージ（一つの処理のまとまり）を実行するために１実行サイクル（クロックサイクル）が必要であるものとする。
【００３２】
図４Ａに示すように、ループ記述（状態数＝４）をパイプライン化しない場合、まず、１回目のループ処理である４ステージＡ１，Ｂ１，Ｃ１，Ｄ１が順に実行される。その後、２回目のループ処理である４ステージＡ２，Ｂ２，Ｃ２，Ｄ２が順に実行される。このような処理が、１０回目のループ処理まで繰り返される。その結果、ループ処理を実行するために必要な実行サイクル数は、４０実行サイクルとなる。
【００３３】
図４Ｂに示すように、ループ記述の４状態を２状態に折り畳んでパイプライン化した場合、まず、１回目のループ処理である４ステージＡ１，Ｂ１，Ｃ１，Ｄ１が順に実行される。また、１回目のループ処理開始から２ステップ（２実行サイクル）遅れて、２回目のループ処理である２ステージＡ２，Ｂ２，Ｃ２，Ｄ２が順に実行される。同様にして、直前のループ処理開始から２ステップ（２実行サイクル）遅れて、３〜１０回目の各ループ処理の４ステージが順に実行される。それにより、例えば、２ステージＣ１，Ａ２や２ステージＤ１，Ｂ２がそれぞれ並列実行される。また、例えば、２ステージＣ２，Ａ３や２ステージＤ２，Ｂ３がそれぞれ並列実行される。その結果、ループ処理を実行するために必要な実行サイクル数は、１８実行サイクルに初期化（エピローグ）及び後処理（プロローグ）分を加えた実行サイクル数のみとなる。
【００３４】
図４Ｃに示すように、ループ記述の４状態を１状態に折り畳んでパイプライン化した場合、まず、１回目のループ処理である４ステージＡ１，Ｂ１，Ｃ１，Ｄ１が順に実行される。また、１回目のループ処理開始から１ステップ（１実行サイクル）遅れて、２回目のループ処理である４ステージＡ２，Ｂ２，Ｃ２，Ｄ２が順に実行される。同様にして、直前のループ処理開始から１ステップ（１実行サイクル）遅れて、３〜１０回目の各ループ処理の４ステージが順に実行される。それにより、例えば、４ステージＤ１，Ｃ２，Ｂ３，Ａ４や４ステージＤ２，Ｃ３，Ｂ４，Ａ５が並列実行される。その結果、ループ処理を実行するために必要な実行サイクル数は、７実行サイクルに初期化（エピローグ）及び後処理（プロローグ）分を加えた実行サイクル数のみとなる。なお、ループ記述の状態数が１状態に折り畳まれた場合、ループ記述の他に記述が無ければ、初期化や後処理を除いて状態遷移マシンが生成されないこととなる。
【００３５】
上記のように、ループ記述をパイプライン化すると、パイプライン化しない場合と比較して、実行サイクル数が抑制される。したがって、パイプライン化するループ記述に対して短い遅延（厳しい遅延制約）を設定して動作合成が行われれば、パイプライン段数が増加するが、パイプライン化により実行サイクル数の増加が抑制され、かつ、１ステップ当たりの処理時間が短縮されるため、結果としてスループットは向上する。
【００３６】
（データハザードについて）
ただし、ループ記述をパイプライン化する場合には、データハザードが発生するおそれがあるためそれを回避する必要がある。以下、図５を参照して、データハザードについて簡単に説明する。本例では、図４Ｃと同条件であると仮定して説明する。
【００３７】
まず、１回目のループ処理である４ステージＡ１（Ｒｅａｄ）、Ｂ１（Ｗｒｉｔｅ）、Ｃ１（Ｒｅａｄ）、Ｄ１（Ｒｅａｄ）が順に実行される。また、１回目のループ処理開始から１ステップ遅れて、２回目のループ処理である４ステージＡ２（Ｒｅａｄ）、Ｂ２（Ｗｒｉｔｅ）、Ｃ２（Ｒｅａｄ）、Ｄ２（Ｒｅａｄ）が順に実行される。また、２回目のループ処理開始から１ステップ遅れて、３回目のループ処理である４ステージＡ３（Ｒｅａｄ）、Ｂ３（Ｗｒｉｔｅ）、Ｃ３（Ｒｅａｄ）、Ｄ３（Ｒｅａｄ）が順に実行される。また、３回目のループ処理開始から１ステップ遅れて、４回目のループ処理である４ステージＡ４（Ｒｅａｄ）、Ｂ４（Ｗｒｉｔｅ）、Ｃ４（Ｒｅａｄ）、Ｄ４（Ｒｅａｄ）が順に実行される。ここで、例えば、ステージＡ２のデータ読み出し処理は、ステージＢ１のデータ書き込み処理よりも先に行われる可能性があるため、意図しないデータを読み出してしまう可能性がある。このような問題をデータハザードと称す。
【００３８】
（フォワーディングについて）
そのため、例えば、動作合成のスケジューリング時にフォワーディング（バイパシング）処理を施すことにより、ステージＡ２のデータ読み出し処理がステージＢ１のデータ書き込み処理よりも先に実行されないようにする。
【００３９】
図６は、フォワーディングを説明するための図である。図６の例では、１状態目及び２状態目がマージされて新たな１状態目としてスケジューリングされている。より具体的には、１回目のループ処理のうちステージＡ１，Ｂ１がマージされて１ステージとして実行され、２回目のループ処理のうちステージＡ２，Ｂ２がマージされて１ステージとして実行され、３回目のループ処理のうちステージＡ３，Ｂ３がマージされて１ステージとして実行され、４回目のループ処理のうちステージＡ４，Ｂ４がマージされて１ステージとして実行される。さらに、あるループ処理でのデータ書き込み処理（例えば、ステージＢ１のデータ書き込み処理）が完了した後に、次のループ処理でのデータ読み出し処理（例えば、ステージＡ２のデータ読み出し処理）が行われるようにスケジューリングされている。このようなフォワーディング処理を施すことにより、データハザードが解消される。
【００４０】
図３に戻り、スケジューリング部１０２は、合成制約１２及び回路情報１３に基づいてＤＦＧ中の複数の節点をそれぞれいつ実行させるか決定（スケジューリング）し、ＣＤＦＧ（Control Data Flow Graph）として出力する。アロケーション部１０３は、合成制約１２及び回路情報１３に基づいて、ＣＤＦＧ中の枝で表されるデータを一時記憶するためのレジスタ及びメモリユニットを決定するとともに、ＣＤＦＧ中の節点で表される演算をどの演算ユニットを用いて行うかを決定する。
【００４１】
なお、合成制約１２には、回路規模、資源量、遅延制約（タイミング制約；クロック周波数）、パイプライン化対象のループ記述の情報等が設定されている。また、回路情報１３には、例えば、後述するアレイ型プロセッサ３０ａに設けられた各資源（演算ユニット，レジスタ，メモリユニット等）の規模及び遅延等の情報が設定されている。
【００４２】
次に、ＦＳＭ生成部１０４は、スケジューリング部１０２及びアロケーション部１０３の結果に基づき、状態遷移マシン（ＦＳＭ；Finite State Machine）を生成する。また、データパス生成部１０５は、スケジューリング部１０２及びアロケーション部１０３の結果に基づき、状態遷移マシンに含まれる複数の状態のそれぞれに対応する複数のデータパスを生成する。さらに、パイプライン構成生成部１０６は、パイプライン化対象のループ記述に含まれる複数の状態を折り畳んでパイプライン化する。
【００４３】
ＲＴＬ記述生成部１０７は、上記した状態遷移マシンと、当該状態遷移マシンに含まれる複数の状態のそれぞれに対応する複数のデータパスと、をＲＴＬ記述１４として出力する。
【００４４】
このようにして、動作合成部１００は、ソースコード１１から状態遷移マシンと状態遷移マシン中の複数の状態のそれぞれに対応する複数のデータパスとを生成し、ＲＴＬ記述１４として出力する。
【００４５】
（フローチャート）
続いて、図７を参照して、動作合成部１００の動作について説明する。図７は、動作合成部１００の動作を示すフローチャートである。
【００４６】
まず、動作合成部１００は、ソースコード１１を受け取って構文解析を行った後（Ｓ１０１）、動作記述言語レベルの最適化を行い（Ｓ１０２）、各種処理機能を表す接点とデータの流れを表す枝とを割り当てて（Ｓ１０３）、ＤＦＧを作成する（Ｓ１０４）。
【００４７】
次に、動作合成部１００は、ソースコード１１に含まれるループ記述のそれぞれについてパイプライン化するか否かを判定した後（Ｓ１０５）、合成制約１２及び回路情報１３に従ってスケジューリング（Ｓ１０６）及びアロケーション（Ｓ１０７）を行う。
【００４８】
次に、動作合成部１００は、スケジューリング及びアロケーションの結果に基づき、状態遷移マシンと、当該状態遷移マシンに含まれる複数の状態のそれぞれに対応する複数のデータパスと、を生成する（Ｓ１０８，Ｓ１０９）。さらに、動作合成部１００は、パイプライン化対象のループ記述に含まれる複数の状態を折り畳んでパイプライン化する（Ｓ１１０）。その後、動作合成部１００は、状態遷移マシン及び複数のデータパスに対し、ＲＴレベルや論理レベルの最適化を行った後（Ｓ１１１）、ＲＴＬ記述１４として出力する（Ｓ１１２）。
【００４９】
このようにして、動作合成部１００は、ソースコード１１から状態遷移マシンと状態遷移マシン中の複数の状態のそれぞれに対応する複数のデータパスとを生成し、ＲＴＬ記述１４として出力する。
【００５０】
（フォワーディング処理における問題点）
なお、フォワーディング処理を施した場合でも、データハザードの発生を防ぐことができない場合がある。以下では、フォワーディング処理における問題点について説明する。
【００５１】
データハザードは、既に図５等で説明したように、あるループ処理でのデータ書き込み処理と、次のループ処理でのデータ読み出し処理と、の順序が逆転してしまうことにより発生する。したがって、データハザードは、変数を自己参照する記述が含まれているループ記述をパイプライン化する場合に発生しやすい。具体的には、データハザードは、変数を自己参照するループカウンタ回路等の動作記述をパイプライン化する場合に発生しやすい。
【００５２】
図８Ａ及び図８Ｂは、それぞれループカウンタ回路５００のソースコード及びその論理構成を示す図である。図８Ｂに示すように、ループカウンタ回路５００は、セレクタ（ＳＥＬ）５０１と、加算回路５０２と、比較回路５０３と、レジスタ５０４〜５０６と、を有する。レジスタ５０４〜５０６には、それぞれ、値１、ｘ（任意の自然数）、ｘの最大値（ｍａｘ）が格納されている。
【００５３】
加算回路５０２は、値１と値ｘ（初期値０）とを加算して加算結果"１"を出力する。セレクタ５０１は、ループ処理を実行中、加算回路５０２の加算結果"１"を選択して出力する。レジスタ５０５は、クロックに同期してセレクタ５０１の出力"１"を取り込み出力する。それにより、加算回路５０２は、値１と値ｘ（値１）とを加算して加算結果"２"を出力する。このような動作が繰り返され、ｘ＞ｍａｘになると、比較回路５０３は、出力値を初期値から他の値に切り替える。それにより、ループ処理が終了する。なお、ループ処理が行われていない場合、セレクタ５０１は、レジスタ５０５の出力をそのままその当該レジスタの入力に供給する。
【００５４】
ここで、動作合成時のスケジューリングにて、ループカウンタ回路５００のループ記述に対してフォワーディング処理を施すと、レジスタ５０５の書き込み及び読み出しが折り畳む状態数以内にスケジューリングされることとなる（なお、以下の例では、説明を分かりやすくするため、レジスタ５０５の書き込み処理及び読み出し処理が同一状態にスケジューリングされる場合を例に説明する）。そのため、加算回路５０２やセレクタ５０１の前後段にフリップフロップ（レジスタ）を挿入してパイプライン段数を増加させることはできない（但し、比較回路５０３の前後段にフリップフロップ（レジスタ）を挿入することは可能）。つまり、このループ記述は、１実行サイクル内で動作する組み合わせ回路として動作合成されることとなる。
【００５５】
このループカウンタ回路５００のパイプライン化では、遅延制約が緩い場合、上記したようにフォワーディング処理を施すことによりデータハザードの発生を防ぐことができる。しかしながら、遅延制約が厳しい場合、加算回路５０２やセレクタ５０１等の遅延の影響によりフォワーディング処理を施すことができず、データハザードの発生を防ぐことができない可能性がある。
【００５６】
また、ループカウンタ回路５００以外の回路であっても、あるレジスタに対するデータ読み出し処理からデータ書き込み処理までの間に、同期メモリや同期演算器のような複数の実行サイクルを要する要素の処理が含まれる場合、指定された状態内にループ記述をパイプライン化することができない可能性がある。つまり、このような回路のパイプライン化では、フォワーディング処理を施すことができず、データハザードの発生を防ぐことができない可能性がある。
【００５７】
さらに、あるレジスタに対するデータ読み出し処理及びデータ書き込み処理の回数が多い場合や、データハザードを起こし得る動作記述が多い場合、スケジューリング時にすべての変数（レジスタ）に対してフォワーディング処理を施そうとすると矛盾が生じてしまう可能性がある。つまり、このような回路のパイプライン化では、フォワーディング処理を施すことができず、データハザードの発生を防ぐことができない可能性がある。
【００５８】
そこで、本実施の形態にかかる動作合成装置１０は、パイプライン化対象のループ記述内に記載された変数のうち、データハザードを起こし得る（イタレーション間に依存性のある）変数の情報を、その依存性を示す情報とともに表示装置４００に表示させる。それにより、本実施の形態にかかる動作合成装置１０は、データハザードに関する有効な情報を設計者に知らせることができるため、ループ記述を効果的にパイプライン化することができる。
【００５９】
なお、本実施の形態にかかる動作合成装置１０では、例えば、動作合成部１００が、スケジューリング前（例えばパイプライン判定時）にデータハザードに関連する情報を入出力制御部２００に渡し、入出力制御部２００が、動作合成部１００から受け取ったデータハザードに関連する情報に基づいて上記した変数及び依存性を示す情報を表示装置４００に表示させる。さらに、入出力制御部２００は、動作合成部１００から受け取ったデータハザードに関連する情報に基づいて、イタレーション間に依存性のある変数に対応させてソースコードを表示させたり、演算処理やメモリアクセス処理などの情報を表示させたりしてもよい。
【００６０】
（表示装置４００の表示内容）
図９〜図１３を参照して、表示装置４００の具体的な表示内容を説明する。図９〜図１３は、表示装置４００の具体的な表示内容の一例を示す図である。
【００６１】
図９〜図１３の例では、表示装置４００の画面左側（紙面左側）の動作記述表示部にソースコード（動作記述）が表示されている。また、表示装置４００の画面右側（紙面右側）の依存性表示部には、パイプライン化対象のループ記述内に記載された変数のうちイタレーション間に依存性のある変数の情報（図中の変数）が、その依存性を示す情報（図中の矢印）とともに表示されている。より具体的には、依存性表示部には、パイプライン化対象のループ記述内に記述された変数のうち、一つのループ処理内においてデータ読み出し後にデータ書き込みが行われる変数の情報（図中の変数）が、当該データ読み出し及び当該データ書き込みの依存性を示す情報（図中の矢印）とともに表示されている。換言すると、ある一つのループ処理内においデータ書き込みが行われ、かつ、次のループ処理内においてデータ読み出しが行われる変数の情報（図中の変数）が、当該データ読み出し及び当該データ書き込みの依存性を示す情報（図中の矢印）とともに表示されている。
【００６２】
なお、図９〜図１３の例では、依存性表示部に表示される変数の情報は、動作記述表示部に表示されるソースコードの対応する変数と同じ行に表示されている。また、図９〜図１３の例では、依存性表示部に表示される変数のうち、矢印を挟んで左側の変数が当該変数へのデータの書き込みを示し、矢印を挟んで右側の変数が当該変数からのデータの読み出しを示している。そして、矢印は、データの書き込みからデータの読み出しまでの依存性を示している。なお、この表示方式は、プログラムの記述において左辺が代入、右辺が読み出しであることに対応している。したがって、例えば、変数及び矢印の表示は左右逆であってもよい。
【００６３】
図９の例では、依存性表示部において、矢印を挟んで左側の変数ｉは、"ｉ＋＋"、即ち"ｉ＜＝ｉ＋１"の左辺（書き込み側）の変数ｉを示し、矢印を挟んで右側の変数ｉは、"ｉ＋＋"、即ち"ｉ＜＝ｉ＋１"の右辺（読み出し側）の変数ｉを示している。また、矢印を挟んで左側上段の変数ｃｏｕｎｔは、"ｃｏｕｎｔ＝７"の左辺（書き込み側）の変数ｃｏｕｎｔを示し、矢印を挟んで左側下段の変数ｃｏｕｎｔは、"ｃｏｕｎｔ−−"、即ち"ｃｏｕｎｔ＜＝ｃｏｕｎｔ−１"の左辺（書き込み側）の変数ｃｏｕｎｔを示し、矢印を挟んで右側下段の変数ｃｏｕｎｔは、"ｃｏｕｎｔ−−"、即ち"ｃｏｕｎｔ＜＝ｃｏｕｎｔ−１"の右辺（読み出し側）の変数ｃｏｕｎｔを示し、矢印を挟んで右側上段の変数ｃｏｕｎｔは、"ｃｏｕｎｔ＝＝０"の左辺（読み出し側）の変数ｃｏｕｎｔを示している。
【００６４】
次に、図１０の例では、イタレーション間に依存性のある変数に対するデータ読み書きの間に演算処理又はメモリアクセス処理が行われる場合、当該演算処理又は当該メモリアクセスに関する情報（図中の＋、−、＝＝）が依存性表示部にさらに表示されている。その他、入出力ポートへのアクセス処理に関する情報が依存性表示部にさらに表示されてもよい。さらに、動作合成エラーの原因となった箇所が太字や赤線で強調表示されてもよい。
【００６５】
次に、図１１の例では、依存性表示部に表示されたイタレーション間に依存性のある変数の情報（図中の変数）及びその依存性を示す情報（図中の矢印）の何れかを、マウスなどの位置入力部で指定できるようになっている。それにより、表示装置４００には、例えば、指定された変数の情報又はその依存性を示す情報に対応するＲＴＬ記述の情報（例えば、回路図）、文字情報（回路の規模、遅延情報を含む）等が表示される。なお、遅延がもっとも長いパスはクリティカルパスになるため、該当箇所が予め太字や赤線で強調表示されていてもよい。
【００６６】
次に、図１２には、パイプライン化対象のループ記述の他の例が示されている。このパイプライン化対象のループ記述内には、展開対象のループ記述が２つ含まれている。このような記述の場合、ソースコードのみを見ただけではイタレーション間の依存性がどこに存在するのかわかりにくい。そこで、図１３に示すように、展開対象の２つのループ記述を展開してみる。そうすると、変数ｉｎｐｉｘ［１］，ｉｎｐｉｘ［２］では、データ読み出し後にデータ書き込みが行われるため、イタレーション間に依存性が存在することがわかる。また、ｉｎｐｉｘ［３］では、条件分岐（ｉｆ）のｔｈｅｎ側の条件でデータが書き込まれる前に条件分岐のｅｌｓｅ側でデータが読み出される可能性があるため、やはりイタレーション間に依存性が存在することがわかる。
【００６７】
このように、本実施の形態にかかる動作合成装置１０は、パイプライン化対象のループ記述内に記載された変数のうち、データハザードを起こし得る（イタレーション間に依存性のある）変数の情報を、その依存性を示す情報とともに表示装置４００に表示させる。それにより、本実施の形態にかかる動作合成装置１０は、データハザードに関する有効な情報を設計者に知らせることができるため、ソースコードを修正して動作合成エラーを回避したり、性能低下を引き起こす記述を特定して修正したりして、ループ記述を効果的にパイプライン化することができる。
【００６８】
（動作合成装置１０のハードウエア構成例）
なお、本実施の形態にかかる動作合成装置１０は、例えば、汎用的なコンピュータシステムにより実現可能である。以下、図１４を用いて簡単に説明する。
【００６９】
図１４は、本実施の形態にかかる動作合成装置１０のハードウエア構成の一例を示すブロック図である。コンピュータ１１０は、例えば、制御装置であるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１１２と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１１３と、外部とのインターフェースであるＩＦ（Ｉｎｔｅｒ  Ｆａｃｅ）１１４と、不揮発性記憶装置の一例であるＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１１５と、を備える。さらに、コンピュータ１１０には、キーボードやマウス等の入力装置３００やディスプレイ等の表示装置４００が設けられている。
【００７０】
ＨＤＤ１１５には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）（不図示）と、動作記述情報１１６と、構造記述情報１１７と、動作合成プログラム１１８と、が記憶されている。動作記述情報１１６は、回路の動作に関する情報であって、図３におけるソースコード（動作記述）１１に相当する。構造記述情報１１７は、回路の構造に関する情報であって、図３におけるＲＴＬ記述１４に相当する。動作合成プログラム１１８は、本実施の形態にかかる動作合成処理が実装されたコンピュータプログラムである。
【００７１】
ＣＰＵ１１１は、コンピュータ１１０における各種処理、ＲＡＭ１１２，ＲＯＭ１１３，ＩＦ１１４及びＨＤＤ１１５へのアクセス等を制御する。コンピュータ１１０は、ＣＰＵ１１１がＨＤＤ１１５に記憶されたＯＳ及び動作合成プログラム１１８を読み込み、実行する。これにより、コンピュータ１１０は、本実施の形態にかかる動作合成装置１０を実現する。
【００７２】
本実施の形態では、動作合成部１００によって生成されるＲＴＬ記述１４が、その後オブジェクトコードに変換され、状態毎に動的に回路構成を変化させるアレイ型プロセッサ（動的再構成プロセッサ）に適用される場合を例に説明したが、これに限られない。動作合成部１００によって生成されるＲＴＬ記述１４は、その後論理合成や配置配線を経てレイアウトデータに変換された後、半導体集積回路（ＬＳＩ）や、ＦＰＧＡ及び動的再構成プロセッサ等の書き換え可能なプログラマブルデバイス向けの回路に適用されてもよい。以下、簡単に説明する。
【００７３】
（データ処理システム１ａ）
図１５Ａは、動作合成装置１０を含むデータ処理装置と、その出力結果が適用される処理装置と、からなるデータ処理システムの第１の構成例を示すブロック図である。
【００７４】
図１５Ａに示すデータ処理システム１ａは、動作合成装置１０及びオブジェクトコード生成装置２０ａからなるデータ処理装置と、アレイ型プロセッサ（ＦＰＧＡ及び動的再構成プロセッサ等の書き換え可能なプログラマブルデバイス向けの回路）３０ａと、を備える。
【００７５】
オブジェクトコード生成装置２０ａは、動作合成装置１０から出力されたＲＴＬ記述１４に対してテクノロジマッピングや配置配線等を行ってネットリストを生成した後、当該ネットリストをバイナリ変換してオブジェクトコード１５ａとして出力する。
【００７６】
アレイ型プロセッサ３０ａは、オブジェクトコード１５ａに基づいて状態毎に動的に回路構成を切り替えながら、外部から供給される処理データに演算処理を施し結果データとして出力する。
【００７７】
（データ処理システム１ｂ）
図１５Ｂは、動作合成装置１０を含むデータ処理装置と、その出力結果が適用される処理装置と、からなるデータ処理システムの第２の構成例を示すブロック図である。
【００７８】
図１５Ｂに示すデータ処理システム１ｂは、動作合成装置１０及びレイアウト装置２０ｂからなるデータ処理装置と、半導体集積回路３０ｂと、を備える。
【００７９】
レイアウト装置２０ｂは、動作合成装置１０から出力されたＲＴＬ記述１４に対して論理合成や配置配線等を行ってレイアウトデータ１５ｂを生成する。
【００８０】
半導体集積回路３０ｂは、レイアウトデータ１５ｂが適用された回路であり、外部から供給される処理データに演算処理を施し結果データとして出力する。
【００８１】
以上のように、上記実施の形態にかかる動作合成装置は、パイプライン化対象のループ記述内に記載された変数のうち、データハザードを起こし得る（イタレーション間に依存性のある）変数の情報を、その依存性を示す情報とともに表示装置に表示させる。それにより、上記実施の形態にかかる動作合成装置は、データハザードに関する有効な情報を設計者に知らせることができるため、ソースコードを修正して動作合成エラーを回避したり、性能低下を引き起こす記述を特定して修正したりして、ループ記述を効果的にパイプライン化することができる。
【００８２】
また、上記実施の形態にかかる動作合成装置は、スケジューリングを行う前に、データハザードを起こし得る変数の情報を表示装置に表示させるため、潜在的な問題箇所を早期に把握することができる。
【００８３】
また、上記実施の形態にかかる動作合成装置は、イタレーション間に依存性がある変数の情報を、その依存性を示す情報とともに表示装置に表示させるため、ソースコードの修正箇所を特定しやすい。また、依存性が可視化されるため、修正内容の決定も比較的容易である。例えば、データ読み書きの順序を修正したり、データ書き込みとデータ読み出しとで別の変数を使用したりすればよい。また、依存性の複雑度も可視化されるため、複雑な依存性を持つ変数が輻輳している場合にはアルゴリズム自体を書き換える等の対策をとることができる。
【００８４】
その他、設計者は、例えば、複数のカウンタ回路を一つに纏めることによってフォワーディング処理を施す記述自体を減らすことが可能になる。また、設計者は、フォワーディング処理を施してもクリティカルパスの短縮や実行サイクルを減らすことが難しい動作記述に対して、パイプライン化以外の方法で並列性を高めるように最適化ことも可能になる。
【００８５】
このように、上記実施の形態にかかる動作合成装置では、設計者による動作記述の変更を効率良く行うことが可能となる。
【００８６】
なお、上記実施の形態にかかる動作合成装置は、任意の処理を、ＣＰＵ（Central Processing Unit）にコンピュータプログラムを実行させることにより実現することも可能である。
【００８７】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、ＤＶＤ（Digital Versatile Disc）、ＢＤ(Blue-ray(登録商標) Disc)、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００８８】
（従来技術との差異）
特許文献３に開示された構成は、ループ記述を実際にパイプライン化してみてデータハザードが発生するか否かを検出するものであり、例えばデータハザード発生の恐れがあるにも関わらず回路規模等を犠牲にして自動的にデータハザードの発生を回避した場合には、データハザードを検出しない。つまり、この関連する技術は、データハザードを起こし得る全てのループ記述の情報を出力するものではない。このように、この関連する技術は、設計者に対してデータハザードに関する有効な情報を出力しないため、ループ記述を効果的にパイプライン化することができないという問題がある。さらに、この関連する技術は、変数の依存性の情報を出力しないため、設計者による動作記述の変更を効率良く行うことができないという問題がある。それに対し、上記実施の形態にかかる動作合成装置では、このような問題は生じない。
【００８９】
また、特許文献２に開示された構成は、フォワーディング処理を施してもデータハザードの発生を避けられないような記述に対しては、正常に動作できるようになるまで次の動作に進むのを待つような動作合成を自動的に行っている。そのため、この関連する技術では、性能を改善しようとしても、データハザードを起こし得る動作記述を特定することが困難である。それに対し、上記実施の形態にかかる動作合成装置では、このような問題は生じない。
【００９０】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【００９１】
１ａ，１ｂ  データ処理システム
１０  動作合成装置
１１  ソースコード
１２  合成制約
１３  回路情報
１４  ＲＴＬ記述
１５ａ  オブジェクトコード
１５ｂ  レイアウトデータ
２０ａ  オブジェクトコード生成装置
２０ｂ  論理合成及びレイアウト装置
３０ａ  アレイ型プロセッサ
３０ｂ  ＬＳＩ
１００  動作合成部
１０１  ＤＦＧ生成部
１０２  スケジューリング部
１０３  アロケーション部
１０４  ＦＳＭ生成部
１０５  データパス生成部
１０６  パイプライン構成生成部
１０７  ＲＴＬ記述生成部
１０８  パイプライン判定部
１１０  コンピュータ
１１１  ＣＰＵ
１１２  ＲＡＭ
１１３  ＲＯＭ
１１４  ＩＦ
１１５  ＨＤＤ
１１６  動作記述情報
１１７  構造記述情報
１１８  動作合成プログラム
２００  入出力制御部
３００  入力装置
４００  表示装置
５００  ループカウンタ回路
５０１  セレクタ
５０２  加算回路
５０３  比較回路
５０４〜５０６  レジスタ
【図１】
2014174940.tif 000003
【図２】
2014174940.tif 000004
【図３】
2014174940.tif 000005
【図４Ａ】
2014174940.tif 000006
【図４Ｂ】
2014174940.tif 000007
【図４Ｃ】
2014174940.tif 000008
【図５】
2014174940.tif 000009
【図６】
2014174940.tif 000010
【図７】
2014174940.tif 000011
【図８Ａ】
2014174940.tif 000012
【図８Ｂ】
2014174940.tif 000013
【図９】
2014174940.tif 000014
【図１０】
2014174940.tif 000015
【図１１】
2014174940.tif 000016
【図１２】
2014174940.tif 000017
【図１３】
2014174940.tif 000018
【図１４】
2014174940.tif 000019
【図１５Ａ】
2014174940.tif 000020
【図１５Ｂ】
2014174940.tif 000021