(57)【要約】【課題】高いスループットのＲＴＬ記述を生成することが可能な動作合成装置を提供すること。【解決手段】一実施の形態によれば、動作合成装置１００は、ループ記述をパイプライン化するか否かを判定するパイプライン判定部１０８と、パイプライン化するループ記述に対してパイプライン化しない場合よりも厳しい遅延制約を設定して動作合成を行う合成部と、を備える。それにより、動作合成装置１００は、従来よりも高いスループットのＲＴＬ記述を生成することができる。【選択図】図１
2014006650.tif 000002
【特許請求の範囲】
【請求項１】
ループ記述をパイプライン化するか否かを判定する判定部と、
パイプライン化するループ記述に対してパイプライン化しない場合よりも厳しい遅延制約を設定して動作合成を行う合成部と、を備えた動作合成装置。
【請求項２】
前記合成部は、パイプライン化する前記ループ記述に対してフォワーディング処理を施す場合、当該ループ記述に基づき生成された論理回路群にフラグを設定する、請求項１に記載の動作合成装置。
【請求項３】
請求項１に記載の動作合成装置と、
前記動作合成装置から出力された構造記述を論理合成した上で配置配線するレイアウト部と、を備えたデータ処理装置。
【請求項４】
請求項２に記載の動作合成装置と、
前記動作合成装置から出力された構造記述を論理合成した上で配置配線するレイアウト部と、を備え、
前記レイアウト部は前記フラグの設定された論理回路群を近接配置する、データ処理装置。
【請求項５】
請求項３に記載のデータ処理装置と、
前記データ処理装置から出力されたネットリストに基づいて状態に応じた回路が動的に構成される並列演算装置と、を備えたデータ処理システム。
【請求項６】
請求項４に記載のデータ処理装置と、
前記データ処理装置から出力されたネットリストに基づいて状態に応じた回路が動的に構成される並列演算装置と、を備えたデータ処理システム。
【請求項７】
前記ネットリストは、状態遷移マシンと、当該状態遷移マシンに含まれる複数の状態のそれぞれに対応する複数のデータパスと、によって構成され、
前記並列演算装置は、
前記複数のデータパスのそれぞれに対応する複数のコンテキストのうち、前記状態遷移マシンの状態に応じたコンテキストを選択する状態管理部と、
前記状態管理部によって選択された前記コンテキストに基づき演算処理内容を決定する複数のプロセッサエレメントと、
前記状態管理部によって選択された前記コンテキストに基づき前記複数のプロセッサエレメントのそれぞれの接続関係を決定する複数のスイッチエレメントと、を備えた、請求項５又は６に記載のデータ処理システム。
【請求項８】
前記各プロセッサエレメントは、
前記複数のコンテキストのそれぞれに対応する複数の動作命令を記憶し、前記複数の動作命令のうち前記状態管理部によって選択された前記コンテキストに対応する動作命令が読み出される命令メモリと、
前記動作命令に従った演算処理内容で、入力データに演算処理を施す演算ユニットと、
前記入力データ、前記演算ユニットによる演算結果、及び、前記演算ユニットによる演算処理の中間データの少なくとも何れかを一時的に記憶するレジスタと、を備えた、請求項７に記載のデータ処理システム。
【請求項９】
複数の前記演算ユニットのうち少なくとも１つの演算ユニットは、
当該演算ユニットの外部から供給される前記入力データを一時的に記憶するレジスタと、
当該演算ユニットの外部から供給される前記入力データと前記レジスタに記憶された前記入力データとの何れかを前記動作命令に従って選択的に出力するセレクタと、
前記動作命令に従った演算処理内容で、前記セレクタから出力されたデータに演算処理を施す演算器と、を備えた、請求項８に記載のデータ処理システム。
【請求項１０】
複数の前記演算ユニットのうち少なくとも１つの演算ユニットは、
前記動作命令に従った演算処理内容で、前記入力データに演算処理を施す演算器と、
前記演算器の演算結果を一時的に記憶するレジスタと、
前記演算器の前記演算結果と前記レジスタに記憶された前記演算結果との何れかを前記動作命令に従って選択的に出力するセレクタと、を備えた、請求項８に記載のデータ処理システム。
【請求項１１】
複数の前記演算ユニットのうち少なくとも１つの演算ユニットは、
前記動作命令に従った演算処理内容で、前記入力データに演算処理を施し中間データを生成する第１演算器と、
前記中間データを一時的に記憶するレジスタと、
前記第１演算器から出力された前記中間データと前記レジスタに記憶された前記中間データとの何れかを前記動作命令に従って選択的に出力するセレクタと、
前記動作命令に従った演算処理内容で、前記セレクタから出力されたデータに演算処理を施す第２演算器と、を備えた、請求項８に記載のデータ処理システム。
【請求項１２】
前記並列演算装置は、
前記複数のプロセッサエレメントのそれぞれの出力結果を記憶する複数のメモリユニットをさらに備え、
前記複数のメモリユニットのうち少なくとも１つのメモリユニットは、
当該メモリユニットの外部から供給されるアドレス信号と、ライト時に当該メモリユニットの外部から供給されるデータと、を一時的に記憶するレジスタと、
当該メモリユニットの外部から供給される前記アドレス信号及び前記データと、前記レジスタに記憶された前記アドレス信号及び前記データと、の何れかを状態に応じて選択的に出力するセレクタと、
前記セレクタから出力されたアドレス信号によって指定されたメモリセルに前記セレクタから出力されたデータが書き込まれ、又は、前記セレクタから出力されたアドレス信号によって指定されたメモリセルに記憶されたデータが読み出される、メモリと、を備えた、請求項７に記載のデータ処理システム。
【請求項１３】
前記並列演算装置は、
前記複数のプロセッサエレメントのそれぞれの出力結果を記憶する複数のメモリユニットをさらに備え、
前記複数のメモリユニットのうち少なくとも１つのメモリユニットは、
アドレス信号によって指定されたメモリセルにデータが書き込まれ、又は、アドレス信号によって指定されたメモリセルに記憶されたデータが読み出される、メモリと、
リード時に前記メモリから読み出されたデータを一時的に記憶するレジスタと、
前記メモリから読み出された前記データと、前記レジスタに記憶された前記データと、の何れかを状態に応じて選択的に出力するセレクタと、を備えた、請求項７に記載のデータ処理システム。
【請求項１４】
前記並列演算装置は、
前記複数のプロセッサエレメント間を接続するデータ配線上に設けられた複数のレジスタユニットをさらに備え、
前記各レジスタユニットは、
当該レジスタユニットの外部から供給される入力データを一時的に記憶するレジスタと、
当該レジスタユニットの外部から供給される前記入力データと前記レジスタに記憶された前記入力データとの何れかを状態に応じて選択的に出力するセレクタと、を有する、請求項７に記載のデータ処理システム。
【請求項１５】
前記並列演算装置は、
各状態にて、構成される回路の最大遅延に応じた周波数のクロックを生成し当該回路に供給する、請求項５に記載のデータ処理システム。
【請求項１６】
前記レイアウト部は、前記並列演算装置に設けられた回路資源を用いて、論理合成し、かつ、配置配線する、請求項５に記載のデータ処理システム。
【請求項１７】
パイプライン化するループ記述に対してパイプライン化しない場合よりも厳しい遅延制約を設定し、
動作合成を行う、動作合成方法。
【請求項１８】
パイプライン化する前記ループ記述に対してフォワーディング処理を施す場合、当該ループ記述に基づき生成された論理回路群にフラグを設定し、
前記動作合成を行う、請求項１７に記載の動作合成方法。
【請求項１９】
ループ記述をパイプライン化するか否かを判定する判定処理と、
パイプライン化するループ記述に対してパイプライン化しない場合よりも厳しい遅延制約を設定して動作合成を行う動作合成処理と、をコンピュータに実行させる動作合成プログラム。
【請求項２０】
パイプライン化する前記ループ記述に対してフォワーディング処理を施す場合、当該ループ記述に基づき生成された論理回路群にフラグを設定するフラグ設定処理と、
前記フラグ設定処理の後に動作合成を行う前記動作処理と、をコンピュータに実行させる請求項１９に記載の動作合成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は動作合成装置、動作合成方法、動作合成装置を備えたデータ処理システム、及び、動作合成プログラムに関する。
【背景技術】
【０００２】
Ｃ言語等による回路の動作に関する記述（動作記述）から、ＲＴＬ（Register Transfer Level）記述等の回路の構造に関する記述（構造記述）を自動生成する動作合成装置の開発が進んでいる。特に近年では、高いスループット（処理能力）のＲＴＬ記述を生成することが可能な動作合成装置が求められている。
【０００３】
関連する技術が特許文献１に開示されている。特許文献１に開示されたパイプライン合成システムは、動作記述に含まれるループ記述から、パイプライン動作するＲＴＬ記述を生成している。それにより、このパイプライン合成システムは、実行サイクル数を低減して高いスループットのＲＴＬ記述を生成している。
【０００４】
上記した動作合成装置によって生成されたＲＴＬ記述は、配置配線処理等を経て、オブジェクトコードに変換された後、例えば、ＦＰＧＡ（Field Programmable Gate Array）や動的再構成プロセッサ等の書き換え可能なプログラマブルデバイス向けの回路として利用される。
【０００５】
関連する技術が特許文献２に開示されている。特許文献２に開示された並列演算装置は、データ処理装置からのオブジェクトコードに基づいて状態毎にコンテキスト（動作状態）を切り替え、複数の処理回路を並列動作させている。この並列演算装置は、複数の処理回路を状態に応じて構成し直すことができるため（即ち、複数の処理回路を動的に再構成することができるため）、小さな回路規模で複雑な処理を実行することができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４７７０６５７号明細書
【特許文献２】特許第３９２１３６７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、ループ記述をパイプライン回路として合成する場合、遅延を短く（遅延制約を厳しく）すると、レジスタが多く挿入されるため、パイプライン段数は増加する。しかしながら、パイプライン化により状態数が折り畳まれるため、初期化（エピローグ）や後処理（プロローグ）を除き実行サイクル数は変化しない。したがって、パイプライン回路では、遅延を短く（遅延制約を厳しく）するほど、スループット（処理能力）が向上する。
【０００８】
一方、パイプライン化せずに多状態回路として合成する場合、遅延を短く（遅延制約を厳しく）すると、レジスタが多く挿入されるため、状態数が増加する。それに伴い、実行サイクル数も増加する。したがって、多状態回路では、実行サイクル数の増加による処理時間の増大が遅延短縮による処理時間の縮小を上回ると、スループット（処理能力）は低下する。一般的に、多状態回路では、遅延を短く（遅延制約を厳しく）するほど、レジスタやメモリ等のセットアップ時間及びホールド時間の合計時間の割合が大きくなり、演算自体に要する時間の割合が小さくなるため、スループットは低下する傾向にある。
【０００９】
ここで、特許文献１には、パイプライン合成システムが、スケジューリング及びアロケーション時に遅延制約をどのように設定しているのかについて記載されていない。したがって、このパイプライン合成システムは、ループ記述をパイプライン回路として合成するか否かに関わらず、回路全体に一律の遅延制約を設定してスケジューリング及びアロケーションを行っていると考えられる。
【００１０】
そのため、このパイプライン合成システムは、遅延を短くした場合（遅延制約を厳しくした場合）、多状態回路のスループットを向上させることができず、遅延を長くした場合（遅延制約を緩くした場合）、パイプライン回路のスループットを向上させることができない、という問題があった。換言すると、従来のパイプライン合成システムは、高いスループットのＲＴＬ記述を生成することができない、という問題があった。
【００１１】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
一実施の形態によれば、動作合成装置は、ループ記述をパイプライン化するか否かを判定する判定部と、パイプライン化するループ記述に対してパイプライン化しない場合よりも厳しい遅延制約を設定して動作合成を行う合成部と、を備える。
【００１３】
また、一実施の形態によれば、動作合成方法は、パイプライン化するループ記述に対してパイプライン化しない場合よりも厳しい遅延制約を設定し、動作合成を行う。
【００１４】
また、一実施の形態によれば、動作合成プログラムは、ループ記述をパイプライン化するか否かを判定する判定処理と、パイプライン化するループ記述に対してパイプライン化しない場合よりも厳しい遅延制約を設定して動作合成を行う動作合成処理と、をコンピュータに実行させる。
【発明の効果】
【００１５】
前記一実施の形態によれば、高いスループットのＲＴＬ記述を生成することが可能な動作合成装置を提供することができる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１にかかるデータ処理装置の論理構成の一例を示すブロック図である。
【図２】実施の形態１にかかる動作合成部を説明するための概念図である。
【図３Ａ】パイプライン化を説明するための概念図である。
【図３Ｂ】パイプライン化を説明するための概念図である。
【図３Ｃ】パイプライン化を説明するための概念図である。
【図４】データハザードを説明するための概念図である。
【図５】実施の形態１にかかる動作合成部の動作を示すフローチャートである。
【図６】実施の形態１にかかるデータ処理装置のハードウェア構成の一例を示すブロック図である。
【図７】実施の形態２にかかるアレイ型プロセッサの構成例を示すブロック図である。
【図８】実施の形態２にかかるプロセッサエレメント及びスイッチエレメントの構成例を示す図である。
【図９】実施の形態２にかかるデータ処理システムの構成例を示すブロック図である。
【図１０Ａ】演算ユニット及びレジスタの接続関係を示す図である。
【図１０Ｂ】演算ユニット及びレジスタの接続関係を示す図である。
【図１１Ａ】演算ユニットの構成例を示すブロック図である。
【図１１Ｂ】実施の形態３にかかる演算ユニットの構成例を示すブロック図である。
【図１１Ｃ】実施の形態３にかかる演算ユニットの構成例を示すブロック図である。
【図１１Ｄ】実施の形態３にかかる演算ユニットの構成例を示すブロック図である。
【図１２Ａ】メモリユニットの構成例を示すブロック図である。
【図１２Ｂ】実施の形態３にかかるメモリユニットの構成例を示すブロック図である。
【図１２Ｃ】実施の形態３にかかるメモリユニットの構成例を示すブロック図である。
【図１３Ａ】実施の形態３にかかるレジスタユニットの構成例を示す図である。
【図１３Ｂ】実施の形態３にかかるアレイ型プロセッサの一部を示すブロック図である。
【図１４】実施の形態３にかかる動作合成部の動作を示すフローチャートである。
【図１５】実施の形態３にかかる動作合成部の動作を示すフローチャートである。
【図１６Ａ】ループカウンタ回路のソースコードを示す図である。
【図１６Ｂ】ループカウンタ回路の論理構成を示すブロック図である。
【図１７】ループカウンタ回路の配置例を示す図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照しつつ、実施の形態について説明する。なお、図面は簡略的なものであるから、この図面の記載を根拠として実施の形態の技術的範囲を狭く解釈してはならない。また、同一の要素には、同一の符号を付し、重複する説明は省略する。
【００１８】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００１９】
さらに、以下の実施の形態において、その構成要素（動作ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００２０】
＜実施の形態１＞
【００２１】
図１は、実施の形態１にかかる動作合成部（動作合成装置）を備えたデータ処理装置１０の論理構成の一例を示すブロック図である。本実施の形態にかかる動作合成部は、パイプライン化するループ記述に対してパイプライン化しない場合よりも短い遅延（厳しい遅延制約；厳しいタイミング制約；高いクロック周波数）を設定して、動作合成を行う。それにより、本実施の形態にかかる動作合成部は、従来よりも高いスループット（処理能力）のＲＴＬ記述を生成することができる。以下、具体的に説明する。
【００２２】
図１に示すデータ処理装置１０は、動作合成部（動作合成装置）１００と、オブジェクトコード生成部（レイアウト部）１０９と、を備える。動作合成部１００は、ＤＦＧ生成部１０１と、スケジューリング部１０２と、アロケーション部１０３と、ＦＳＭ生成部１０４と、データパス生成部１０５と、パイプライン構成生成部１０６と、ＲＴＬ記述生成部１０７と、パイプライン判定部１０８と、を有する。なお、動作合成部１００のうちパイプライン判定部１０８以外の回路をまとめて合成部とも称する。
【００２３】
動作合成部１００は、図２の概念図にも示すように、Ｃ言語等の回路の動作に関する記述（動作記述：以下、ソースコードと称す）１１から、状態遷移マシン（ＦＳＭ；Finite State Machine）と、状態遷移マシン中の複数の状態のそれぞれに対応する複数のデータパスと、を生成し、回路の構造に関する記述（構造記述；以下、ＲＴＬ記述と称す）１４として出力する部である。
【００２４】
ＤＦＧ生成部１０１は、ソースコード１１の構文解析をして、演算等の各種処理機能を表す節点と、データの流れを表す枝と、からなるＤＦＧ（Data Flow Graff）を作成する。
【００２５】
パイプライン判定部１０８は、ソースコード１１に含まれるループ記述のそれぞれについてパイプライン化するか否かを判定する。本実施の形態では、パイプライン判定部１０８は、ユーザーによって指定されたループ記述を、パイプライン化対象のループ記述と判定している。なお、パイプライン判定部１０８は、各ループ記述についてパイプライン化するか否かを自動で判定する構成であっても良い。
【００２６】
以下、図３Ａ〜図３Ｃを参照して、ループ記述のパイプライン化について簡単に説明する。図３Ａは、ループ記述（状態数＝４）をパイプライン化しない場合の処理内容を示す概念図である。図３Ｂは、ループ記述の４状態を２状態に折り畳んでパイプライン化した場合の処理内容を示す概念図である。図３Ｃは、ループ記述の４状態を１状態に折り畳んでパイプライン化した場合の処理内容を示す概念図である。なお、本例では、パイプライン段数が４段、ループ回数が１０回であるものとする。また、本例では、１ステージ（一つの処理のまとまり）を実行するために１実行サイクル（クロックサイクル）が必要であるものとする。
【００２７】
図３Ａに示すように、ループ記述（状態数＝４）をパイプライン化しない場合、まず、１回目のループ処理である４ステージＡ１，Ｂ１，Ｃ１，Ｄ１が順に実行される。その後、２回目のループ処理である４ステージＡ２，Ｂ２，Ｃ２，Ｄ２が順に実行される。このような処理が、１０回目のループ処理まで繰り返される。その結果、ループ処理を実行するために必要な実行サイクル数は、４０実行サイクルとなる。
【００２８】
図３Ｂに示すように、ループ記述の４状態を２状態に折り畳んでパイプライン化した場合、まず、１回目のループ処理である４ステージＡ１，Ｂ１，Ｃ１，Ｄ１が順に実行される。また、１回目のループ処理開始から２ステップ（２実行サイクル）遅れて、２回目のループ処理である２ステージＡ２，Ｂ２，Ｃ２，Ｄ２が順に実行される。同様にして、直前のループ処理開始から２ステップ（２実行サイクル）遅れて、３〜１０回目の各ループ処理の４ステージが順に実行される。それにより、例えば、２ステージＣ１，Ａ２や２ステージＤ１，Ｂ２がそれぞれ並列実行される。また、例えば、２ステージＣ２，Ａ３や２ステージＤ２，Ｂ３がそれぞれ並列実行される。その結果、ループ処理を実行するために必要な実行サイクル数は、１８実行サイクルに初期化（エピローグ）及び後処理（プロローグ）分を加えた実行サイクル数のみとなる。
【００２９】
図３Ｃに示すように、ループ記述の４状態を１状態に折り畳んでパイプライン化した場合、まず、１回目のループ処理である４ステージＡ１，Ｂ１，Ｃ１，Ｄ１が順に実行される。また、１回目のループ処理開始から１ステップ（１実行サイクル）遅れて、２回目のループ処理である４ステージＡ２，Ｂ２，Ｃ２，Ｄ２が順に実行される。同様にして、直前のループ処理開始から１ステップ（１実行サイクル）遅れて、３〜１０回目の各ループ処理の４ステージが順に実行される。それにより、例えば、４ステージＤ１，Ｃ２，Ｂ３，Ａ４や４ステージＤ２，Ｃ３，Ｂ４，Ａ５が並列実行される。その結果、ループ処理を実行するために必要な実行サイクル数は、７実行サイクルに初期化（エピローグ）及び後処理（プロローグ）分を加えた実行サイクル数のみとなる。なお、ループ記述の状態数が１状態に折り畳まれた場合、ループ記述の他に記述が無ければ、初期化や後処理を除いて状態遷移マシンが生成されないこととなる。
【００３０】
上記のように、ループ記述をパイプライン化すると、パイプライン化しない場合と比較して、実行サイクル数が抑制される。したがって、パイプライン化するループ記述に対して短い遅延（厳しい遅延制約）を設定して動作合成が行われれば、パイプライン段数が増加するが、パイプライン化により実行サイクル数の増加が抑制され、かつ、１ステップ当たりの処理時間が短縮されるため、結果としてスループットは向上する。
【００３１】
なお、ループ記述のパイプライン化の詳細は、本発明者らによって発表された「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」にも開示されている。
【００３２】
ただし、ループ記述をパイプライン化する場合には、データハザードが発生するおそれがあるためそれを回避する必要がある。以下、図４を参照して、データハザードについて簡単に説明する。本例では、図３Ｃと同条件であると仮定して説明する。
【００３３】
まず、１回目のループ処理である４ステージＡ１（Ｒｅａｄ）、Ｂ１（Ｒｅａｄ）、Ｃ１（Ｗｒｉｔｅ）、Ｄ１（Ｒｅａｄ）が順に実行される。また、１回目のループ処理開始から１ステップ遅れて、２回目のループ処理である４ステージＡ２（Ｒｅａｄ）、Ｂ２（Ｒｅａｄ）、Ｃ２（Ｗｒｉｔｅ）、Ｄ２（Ｒｅａｄ）が順に実行される。ここで、ステージＡ２のデータ読み出し処理は、ステージＣ１のデータ書き込み処理よりも先に行われるため、意図しないデータを読み出してしまう可能性がある。このような問題をデータハザードと称す。
【００３４】
このデータハザードを回避するため、例えば、動作合成のスケジューリング時にフォワーディング（バイパシング）処理を施すことにより、ステージＡ２のデータ読み出し処理がステージＣ１のデータ書き込み処理よりも先に実行されないようにする。なお、フォワーディングの詳細は、「デビット・Ａ・パターソン、ジョン・Ｌ・ヘネシー著、"コンピュータの構成と設計"、日経ＢＰ社」にも開示されている。
【００３５】
図１に戻り、スケジューリング部１０２は、合成制約１２及び回路情報１３に基づいてＤＦＧ中の複数の節点をそれぞれいつ実行させるか決定（スケジューリング）し、ＣＤＦＧ（Control Data Flow Graff）として出力する。アロケーション部１０３は、合成制約１２及び回路情報１３に基づいて、ＣＤＦＧ中の枝で表されるデータを一時記憶するためのレジスタ及びメモリユニットを決定するとともに、ＣＤＦＧ中の節点で表される演算をどの演算ユニットを用いて行うかを決定する。
【００３６】
なお、合成制約１２には、回路規模、資源量、遅延制約（タイミング制約；クロック周波数）、パイプライン化対象のループ記述の情報等が設定されている。さらに、合成制約には、遅延制約として、多状態回路向け遅延制約と、多状態回路向け遅延制約よりも厳しい遅延制約であるパイプライン回路向け遅延制約と、が設定されている。また、回路情報１３には、例えば、後述するアレイ型プロセッサ２０に設けられた各資源（演算ユニット２１２，レジスタ２１３，メモリユニット２１０等）の規模及び遅延等の情報が設定されている。
【００３７】
ここで、ループ記述をパイプライン回路として合成する場合、遅延を短く（遅延制約を厳しく）すると、レジスタが多く挿入されるため、パイプライン段数は増加する。しかしながら、パイプライン化により状態数が折り畳まれるため、初期化（エピローグ）や後処理（プロローグ）を除き実行サイクル数は変化しない。したがって、パイプライン回路では、遅延を短く（遅延制約を厳しく）するほど、スループット（処理能力）が向上する。
【００３８】
一方、パイプライン化せずに多状態回路として合成する場合、遅延を短く（遅延制約を厳しく）すると、レジスタが多く挿入されるため、状態数が増加する。それに伴い、実行サイクル数も増加する。したがって、多状態回路では、実行サイクル数の増加による処理時間の増大が遅延短縮による処理時間の縮小を上回ると、スループット（処理能力）は低下する。一般的に、多状態回路では、遅延を短く（遅延制約を厳しく）するほど、レジスタやメモリ等のセットアップ時間及びホールド時間の合計時間の割合が大きくなり、演算自体に要する時間の割合が小さくなるため、スループットは低下する傾向にある。
【００３９】
そこで、スケジューリング部１０２及びアロケーション部１０３は、パイプライン化するループ記述に対してパイプライン回路向け遅延制約を設定するとともに、それ以外の記述に対して多状態回路向け遅延制約を設定して、それぞれスケジューリング及びアロケーションを行う。換言すると、スケジューリング部１０２及びアロケーション部１０３は、パイプライン化するループ記述に対して、それ以外の記述に対してよりも短い遅延（厳しい遅延制約）を設定して、それぞれスケジューリング及びアロケーションを行う。
【００４０】
それにより、パイプライン回路では、パイプライン段数が増加してレイテンシーは増加するが、パイプライン化により実行サイクル数の増加が抑制され、かつ、１ステップ当たりの処理時間が短くなるため、遅延を長くした場合よりもスループットが向上する。また、パイプライン回路以外の多状態回路では、状態数が抑制されて実行サイクル数が少なくなるとともに、レジスタやメモリ等のセットアップ時間やホールド時間の合計時間が短縮されるため、遅延を短くした場合よりもスループットが向上する。つまり、回路全体として、従来よりもスループットが向上することとなる。
【００４１】
次に、ＦＳＭ生成部１０４は、スケジューリング部１０２及びアロケーション部１０３の結果に基づき、状態遷移マシン（ＦＳＭ；Finite State Machine）を生成する。また、データパス生成部１０５は、スケジューリング部１０２及びアロケーション部１０３の結果に基づき、状態遷移マシンに含まれる複数の状態のそれぞれに対応する複数のデータパスを生成する。さらに、パイプライン構成生成部１０６は、パイプライン化対象のループ記述に含まれる複数の状態を折り畳んでパイプライン化する。
【００４２】
ＲＴＬ記述生成部１０７は、上記した状態遷移マシンと、当該状態遷移マシンに含まれる複数の状態のそれぞれに対応する複数のデータパスと、をＲＴＬ記述１４として出力する。
【００４３】
その後、オブジェクトコード生成部１０９は、ＲＴＬ記述１４を読み込んでテクノロジマッピングや配置配線等を行ってネットリストを生成し、バイナリ変換してオブジェクトコード１５として出力する。
【００４４】
このように、本実施の形態にかかる動作合成部１００は、パイプライン化するループ記述に対したパイプライン化しない場合よりも短い遅延（厳しい遅延制約）を設定して、動作合成を行う。それにより、本実施の形態にかかる動作合成部１００は、従来よりも高いスループット（処理能力）のＲＴＬ記述を生成することができる。
【００４５】
（フローチャート）
続いて、図５を参照して、データ処理装置１０内の動作合成部１００の動作について説明する。図５は、動作合成部１００の動作を示すフローチャートである。
【００４６】
まず、動作合成部１００は、ソースコード１１を受け取って構文解析を行った後（Ｓ１０１）、動作記述言語レベルの最適化を行い（Ｓ１０２）、各種処理機能を表す接点とデータの流れを表す枝とを割り当てて（Ｓ１０３）、ＤＦＧを作成する（Ｓ１０４）。
【００４７】
次に、動作合成部１００は、ソースコード１１に含まれるループ記述のそれぞれについてパイプライン化するか否かを判定した後（Ｓ１０５）、合成制約１２及び回路情報１３に従ってスケジューリング（Ｓ１０６）及びアロケーション（Ｓ１０７）を行う。
【００４８】
ここで、動作合成部１００は、パイプライン化するループ記述に対してパイプライン回路向け遅延制約を設定するとともに、それ以外の記述に対して多状態回路向け遅延制約を設定して、スケジューリング及びアロケーションを行う。換言すると、動作合成部１００は、パイプライン化するループ記述に対して、それ以外の記述に対してよりも短い遅延（厳しい遅延制約）を設定して、スケジューリング及びアロケーションを行う。それにより、パイプライン回路では、パイプライン段数が増加してレイテンシーは増加するが、パイプライン化により実行サイクル数の増加が抑制され、かつ、１ステップ当たりの処理時間が短くなるため、遅延を長くした場合よりもスループットが向上する。また、パイプライン回路以外の多状態回路では、状態数が抑制されて実行サイクル数が少なくなるとともに、レジスタやメモリ等のセットアップ時間やホールド時間の合計時間が短縮されるため、遅延を短くした場合よりもスループットが向上する。つまり、回路全体として、従来よりもスループットが向上することとなる。
【００４９】
次に、動作合成部１００は、スケジューリング及びアロケーションの結果に基づき、状態遷移マシンと、当該状態遷移マシンに含まれる複数の状態のそれぞれに対応する複数のデータパスと、を生成する（Ｓ１０８，Ｓ１０９）。さらに、動作合成部１００は、パイプライン化対象のループ記述に含まれる複数の状態を折り畳んでパイプライン化する（Ｓ１１０）。その後、動作合成部１００は、状態遷移マシン及び複数のデータパスに対し、ＲＴレベルや論理レベルの最適化を行った後（Ｓ１１１）、ＲＴＬ記述１４として出力する（Ｓ１１２）。
【００５０】
このように、本実施の形態にかかる動作合成部１００は、パイプライン化するループ記述に対してパイプライン化しない場合よりも短い遅延（厳しい遅延制約）を設定して、動作合成を行う。それにより、本実施の形態にかかる動作合成部１００は、従来よりも高いスループット（処理能力）のＲＴＬ記述を生成することができる。
【００５１】
（データ処理装置１０のハードウェア構成例）
なお、本実施の形態にかかる動作合成部１００及びそれを備えたデータ処理装置１０は、例えば、汎用的なコンピュータシステムにより実現可能である。以下、図６を用いて簡単に説明する。
【００５２】
図６は、本実施の形態にかかるデータ処理装置１０のハードウェア構成の一例を示すブロック図である。コンピュータ１１０は、例えば、制御装置であるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１１２と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１１３と、外部とのインターフェースであるＩＦ（Ｉｎｔｅｒ  Ｆａｃｅ）１１４と、不揮発性記憶装置の一例であるＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１１５と、を備える。コンピュータ１１０は、その他図示しない構成として、キーボードやマウス等の入力装置やディスプレイ等の表示装置を備えていても良い。
【００５３】
ＨＤＤ１１５には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）（不図示）と、動作記述情報１１６と、構造記述情報１１７と、動作合成プログラム１１８と、が記憶されている。動作記述情報１１６は、回路の動作に関する情報であって、図１におけるソースコード（動作記述）１１に相当する。構造記述情報１１７は、回路の構造に関する情報であって、図１におけるＲＴＬ記述１４に相当する。動作合成プログラム１１８は、本実施の形態にかかる動作合成処理が実装されたコンピュータプログラムである。
【００５４】
ＣＰＵ１１１は、コンピュータ１１０における各種処理、ＲＡＭ１１２，ＲＯＭ１１３，ＩＦ１１４及びＨＤＤ１１５へのアクセス等を制御する。コンピュータ１１０は、ＣＰＵ１１１がＨＤＤ１１５に記憶されたＯＳ及び動作合成プログラム１１８を読み込み、実行する。これにより、コンピュータ１１０は、本実施の形態にかかる動作合成部１００及びそれを備えたデータ処理装置１０を実現する。
【００５５】
＜実施の形態２＞
本実施の形態では、データ処理装置１０の出力結果（オブジェクトコード１５）が適用される回路の具体例について説明する。
【００５６】
図７は、オブジェクトコード１５に基づいて状態毎に動的に回路構成を変化させるアレイ型プロセッサ（並列演算装置）２０の構成例を示すブロック図である。図７に示すアレイ型プロセッサ２０は、Ｉ／Ｆ部２０１と、コードメモリ２０２と、状態管理部２０３と、マトリクス回路部２０５と、データメモリ部２０６と、を備える。マトリクス回路部２０５には、複数のプロセッサエレメント（ＰＥ）２０７と、複数のスイッチエレメント（ＳＷＥ）２０８と、がそれぞれマトリクス状に配置されている。データメモリ部２０６は、複数のメモリユニット２１０により構成される。複数のメモリユニット２１０は、例えば、マトリクス回路部２０５を囲むように配置されている。
【００５７】
なお、オブジェクトコード１５には、複数のコンテキスト（複数のデータパスに対応）と、状態遷移条件（状態遷移マシンに対応）と、が含まれている。各コンテキストには、複数のプロセッサエレメント２０７及び複数のスイッチエレメント２０８のそれぞれへの動作命令が設定されている。また、状態遷移条件には、状態に応じて複数のコンテキストの何れかを選択する状態管理部２０３への動作命令が設定されている。
【００５８】
Ｉ／Ｆ部２０１には、データ処理装置１０からのオブジェクトコード１５が供給される。コードメモリ２０２は、ＲＡＭ等の情報記憶媒体によって構成され、Ｉ／Ｆ部２０１に供給されたオブジェクトコード１５を記憶する。
【００５９】
状態管理部２０３は、状態に応じて複数のコンテキストの何れかを選択し、選択したコンテキストに応じた複数の命令ポインタ（ＩＰ）をそれぞれ複数のプロセッサエレメント２０７に出力する。
【００６０】
図８は、一組のプロセッサエレメント２０７及びスイッチエレメント２０８の構成例を示す図である。プロセッサエレメント２０７は、命令メモリ２１１と、演算ユニット２１２と、レジスタ２１３と、を有する。スイッチエレメント２０８は、配線接続スイッチ２１４〜２１８を有する。なお、本実施の形態では、演算ユニット２１２が、１つの演算器（ＡＬＵ）のみを有する場合を例に説明する。また、プロセッサエレメント２０７内の各要素は、図示していないが、データ配線を介してデータの受け渡しを行い、フラグ配線を介してフラグの受け渡しを行う。
【００６１】
プロセッサエレメント２０７は、データ配線を介して他のプロセッサエレメント２０７から供給されたデータに演算処理を施し、演算結果（データ）をデータ配線を介して別のプロセッサエレメント２０７に出力する。また、プロセッサエレメント２０７では、フラグ配線を介して他のプロセッサエレメント２０７からフラグが供給され、フラグ配線を介して別のプロセッサエレメント２０７にフラグが出力される。例えば、プロセッサエレメント２０７は、他のプロセッサエレメント２０７から供給されたフラグに基づいて演算処理の開始の有無を決定し、演算処理の結果に応じたフラグを別のプロセッサエレメント２０７に出力する。
【００６２】
命令メモリ２１１には、プロセッサエレメント２０７及びスイッチエレメント２０８への動作命令がコンテキストの数に応じて複数格納されている。そして、命令メモリ２１１では、状態管理部２０３からの命令ポインタ（ＩＰ）に基づいて、複数の動作命令のうち何れかの動作命令が読み出される。プロセッサエレメント２０７及びスイッチエレメント２０８は、命令メモリ２１１から読み出された動作命令に従って動作を実行する。
【００６３】
演算ユニット２１２は、命令メモリ２１１から読み出された動作命令に従った演算処理内容で、入力されたデータに演算処理を施す。
【００６４】
レジスタ２１３は、演算ユニット２１２に入力されるデータ、演算ユニット２１２による演算結果、演算ユニット２１２による演算処理の中間データ等を一時的に記憶する。なお、演算ユニット２１２の演算結果は、レジスタ２１３を介さずに直接プロセッサユニットの外部に出力されても良い。
【００６５】
配線接続スイッチ２１４〜２１６は、命令メモリ２１１から読み出された動作命令に従って、対応するプロセッサエレメント２０７（当該動作命令を格納している命令メモリ２１１を備えたプロセッサエレメント２０７）と、他のプロセッサエレメント２０７（例えば、隣接するプロセッサエレメント２０７）と、をデータ配線で接続する。
【００６６】
配線接続スイッチ２１６〜２１８は、命令メモリ２１１から読み出された動作命令に従って、対応するプロセッサエレメント２０７（当該動作命令を格納している命令メモリ２１１を備えたプロセッサエレメント２０７）と、他のプロセッサエレメント２０７（例えば、隣接するプロセッサエレメント２０７）と、をフラグ配線で接続する。
【００６７】
なお、配線接続スイッチ２１４〜２１６は、命令メモリ２１１から読み出された動作命令に従って、配線を接続する。なお、配線接続スイッチ２１６は、データ配線やフラグ配線の交差部に配置される。
【００６８】
（データ処理システム１）
図９は、データ処理装置１０及びアレイ型プロセッサ２０を備えたデータ処理システム１の構成例を示すブロック図である。
【００６９】
図９に示すデータ処理システム１において、データ処理装置１０は、ソースコード１１、合成制約１２及び回路情報１３を読み込んでオブジェクトコード１５を生成する。アレイ型プロセッサ２０は、データ処理装置１０から出力されたオブジェクトコード１５に基づいて状態毎に動的に回路構成を切り替えながら、外部から供給される処理データに演算処理を施し結果データとして出力する。
【００７０】
（アレイ型プロセッサ２０の再構成内容）
続いて、図１０Ａ及び図１０Ｂを参照して、動作合成時の遅延制約に応じたアレイ型プロセッサ２０の再構成内容について説明する。図１０Ａは、遅延制約が緩い（例えば、遅延制約が１２ｎｓ）場合の演算ユニット２１２及びレジスタ２１３の接続関係を示す図である。図１０Ｂは、遅延制約が厳しい（例えば、遅延制約が７ｎｓ）場合の演算ユニット２１２及びレジスタ２１３の接続関係を示す図である。なお、本例では、説明の簡単化のため、レジスタ２１３の遅延が一律０ｎｓ、演算ユニット２１２の遅延が一律３ｎｓ、配線遅延が一律２ｎｓであるものとし、セットアップ時間やホールド時間は考慮しない。
【００７１】
まず、図１０Ａの例では、遅延制約が１２ｎｓと緩いため、レジスタ間には２つの演算ユニット２１２が接続される。それにより、実行サイクルの周期が長くなるが、状態数が抑制されて実行サイクル数は少なくなる。多状態回路向けの動作合成は、このような緩い遅延制約を設定して実施される。
【００７２】
一方、図１０Ｂの例では、遅延制約が７ｎｓと厳しいため、レジスタ間には１つの演算ユニット２１２のみ接続される。つまり、図１０Ｂの例では、図１０Ａの場合と比較して、２つの演算ユニット２１２間にレジスタ２１３がさらに挿入されている。それにより、状態数が増加して実行サイクル数は増加するが、実行サイクルの周期は短くなる。ここで、パイプライン回路では、状態数が折り畳まれて実行サイクル数の増加が抑制されるため、遅延を短くして実行サイクルの周期を短くするほど、高速動作が可能になる。パイプライン回路向けの動作合成は、このような厳しい遅延制約を設定して実施される。
【００７３】
＜実施の形態３＞
本実施の形態では、アレイ型プロセッサ２０の変形例について説明する。
【００７４】
（演算ユニット２１２の変形例）
まず、図１１Ａ〜図１１Ｄを参照して、アレイ型プロセッサ２０に設けられた演算ユニット２１２の変形例について説明する。図１１Ａは、演算ユニット２１２を示すブロック図である。また、図１１Ｂ〜図１１Ｃは、演算ユニット２１２の変形例をそれぞれ演算ユニット２１２ｂ〜２１２ｄとして示すブロック図である。
【００７５】
図１１Ａに示す演算ユニット２１２は、演算器（ＡＬＵ）２１２１を有する。演算器２１２１は、演算ユニット２１２の入力データに演算処理を施して演算結果を出力する。
【００７６】
図１１Ｂに示す演算ユニット２１２ｂは、演算器の前段にフリップフロップを有する。具体的には、演算ユニット２１２ｂは、演算器２１２１ｂと、フリップフロップ（Ｆ／Ｆ）２１２２ｂと、セレクタ（ＳＥＬ）２１２３ｂと、を有する。フリップフロップ２１２２ｂは、演算ユニット２１２ｂの入力データをクロックに同期して取り込み出力する。セレクタ２１２３ｂは、フリップフロップ２１２２ｂの出力と、演算ユニット２１２ｂの入力データと、を状態（即ち、命令メモリから読み出された動作命令）に応じて選択的に出力する。演算器２１２１ｂは、セレクタ２１２３ｂの出力に演算処理を施して演算結果を出力する。
【００７７】
図１１Ｃに示す演算ユニット２１２ｃは、演算器の後段にフリップフロップを有する。具体的には、演算ユニット２１２ｃは、演算器２１２１ｃと、フリップフロップ２１２２ｃと、セレクタ２１２３ｃと、を有する。演算器２１２１ｃは、演算ユニット２１２ｃの入力データに演算処理を施して演算結果を出力する。フリップフロップ２１２２ｃは、演算器２１２１ｃの演算結果をクロックに同期して取り込み出力する。セレクタ２１２３ｃは、フリップフロップ２１２２ｃの出力と、演算器２１２１ｃの演算結果と、を状態に応じて選択的に出力する。
【００７８】
図１１Ｄに示す演算ユニット２１２ｄは、２つに分割された演算器の間にフリップフロップを有する。具体的には、演算ユニット２１２ｄは、２つに分割された演算器（第１演算器）２１２１ｄ及び演算器（第２演算器）２１２４ｄと、フリップフロップ２１２２ｄと、セレクタ２１２３ｄと、を有する。演算器２１２１ｄは、演算ユニット２１２ｄの入力データに演算処理を施して演算結果（中間データ）を出力する。フリップフロップ２１２２ｄは、演算器２１２１ｄの演算結果をクロックに同期して取り込み出力する。セレクタ２１２３ｄは、フリップフロップ２１２２ｄの出力と、演算器２１２１ｄの演算結果と、を状態に応じて選択的に出力する。演算器２１２４ｄは、セレクタ２１２３ｄの出力に演算処理を施して演算結果を出力する。
【００７９】
ここで、本実施の形態にかかるアレイ型プロセッサ２０は、複数の演算ユニット２１２の一部又は全部に代えて、それぞれ演算ユニット２１２ｂ〜２１２ｄの何れかを備える。それにより、本実施の形態にかかるアレイ型プロセッサ２０は、演算ユニット間にレジスタ２１３を挿入できるのみならず、演算ユニット内にもフリップフロップ（レジスタ）を挿入することが可能となる。
【００８０】
それにより、本実施の形態にかかるアレイ型プロセッサ２０は、さらに遅延を短くしてパイプライン段数を増加させたパイプライン回路を動的に再構成することができる。つまり、本実施の形態にかかるアレイ型プロセッサ２０は、さらに高いスループットのパイプライン回路を動的に再構成することができる。なお、このとき、動作合成部１００は、パイプライン化するループ記述に対してさらに短い遅延（厳しい遅延制約）を設定して動作合成を行う。
【００８１】
（メモリユニットの変形例）
続いて、図１２Ａ〜図１２Ｃを参照して、アレイ型プロセッサ２０に設けられたメモリユニット２１０の変形例について説明する。図１２Ａは、メモリユニット２１０を示すブロック図である。また、図１２Ｂ，図１２Ｃは、メモリユニット２１０の変形例をそれぞれメモリユニット２１０ｂ，２１０ｃとして示すブロック図である。
【００８２】
図１２Ａに示すメモリユニット２１０は、メモリ（ＭＥＭ）２１０１を有する。ライト時、メモリ２１０１では、アドレス信号によって指定されたメモリセルにデータが書き込まれる。一方、リード時、メモリ２１０１では、アドレス信号によって指定されたメモリセルからデータが読み出される。
【００８３】
図１２Ｂに示すメモリユニット２１０ｂは、メモリの前段にフリップフロップを有する。具体的には、メモリユニット２１０ｂは、メモリ２１０１ｂと、フリップフロップ（Ｆ／Ｆ）２１０２ｂと、セレクタ（ＳＥＬ）２１０３ｂと、を有する。フリップフロップ２１０２ｂは、外部から供給されるアドレス信号及びライト時に外部から供給される書き込みデータをクロックに同期して取り込み出力する。セレクタ２１０３ｂは、フリップフロップ２１０２ｂの出力（アドレス信号及び書き込みデータ）と、外部から供給されるアドレス信号及びライト時に外部から供給される書き込みデータと、の何れかを状態に応じて選択的に出力する。メモリ２１０１ｂでは、セレクタ２１０３ｂの出力によりデータの書き込み又は読み出しが行われる。
【００８４】
図１２Ｃに示すメモリユニット２１０ｃは、メモリの後段にフリップフロップを有する。具体的には、メモリユニット２１０ｃは、メモリ２１０１ｃと、フリップフロップ２１０２ｃと、セレクタ２１０３ｃと、を有する。メモリ２１０１ｃでは、リード時に、外部からのアドレス信号により指定されたメモリセルに外部からの書き込みデータが書き込まれ、ライト時に、外部からのアドレス信号により指定されたメモリセルからデータが読み出される。フリップフロップ２１０２ｃは、リード時にメモリ２１０１ｃから読み出されたデータをクロックに同期して取り込み出力する。セレクタ２１０３ｃは、フリップフロップ２１０２ｃの出力と、メモリ２１０１ｃから読み出されたデータと、の何れかを状態に応じて選択的に出力する。
【００８５】
ここで、本実施の形態にかかるアレイ型プロセッサ２０は、データメモリ部２０６を構成する複数のメモリユニット２１０の一部又は全部に代えて、それぞれメモリユニット２１０ｂ，２１０ｃの何れかを備える。それにより、本実施の形態にかかるアレイ型プロセッサ２０は、演算ユニット間や演算ユニット及びメモリユニット間にレジスタ２１３を挿入できるのみならず、メモリユニット内にもフリップフロップ（レジスタ）を挿入することが可能となる。
【００８６】
それにより、本実施の形態にかかるアレイ型プロセッサ２０は、さらに遅延を短くしてパイプライン段数を増加させたパイプライン回路を動的に再構成することができる。つまり、本実施の形態にかかるアレイ型プロセッサ２０は、さらに高いスループットのパイプライン回路を動的に再構成することができる。なお、このとき、動作合成部１００は、パイプライン化するループ記述に対してさらに短い遅延（厳しい遅延制約）を設定して動作合成を行う。
【００８７】
（その他の変形例）
続いて、図１３Ａ，図１３Ｂを参照して、アレイ型プロセッサ２０のその他の変形例について説明する。本例では、フリップフロップ及びセレクタからなるレジスタユニット２０９が、マトリクス回路部２０５内のデータ配線上に複数設けられている。同様にして、レジスタユニット２０９は、マトリクス回路部２０５のフラグ配線上にも複数設けられている。
【００８８】
図１３Ａは、複数のレジスタユニット２０９の構成例を示す図である。図１３Ｂは、レジスタユニット２０９を用いて動的に再構成されたアレイ型プロセッサ２０の一部を示す図である。
【００８９】
図１３Ａに示すように、フリップフロップ及びセレクタからなるレジスタユニット２０９は、データ配線上に複数設けられている。セレクタは、入力データをフリップフロップを介して出力するかバイパスするかを状態に応じて切り替える。例えば、複数のレジスタユニット２０９のうち任意のレジスタユニット２０９のフロップフロップを有効にすることで、データ配線上のフリップフロップの挿入位置を適宜変更することが可能となる。
【００９０】
図１３Ｂの例では、複数のレジスタユニット２０９のうちある一つのレジスタユニット２０９のフリップフロップを有効にして前段レジスタ（ＲＥＧ１）２１３及び演算ユニット２１２の間にフリップフロップを挿入している。それにより、前段レジスタ２１３と演算ユニット２１２との間の配線遅延を短くしている。例えば、フリップフロップは、前段レジスタ２１３と演算ユニット２１２との間の配線遅延と、演算ユニット２１２と後段レジスタ２１３との間の配線遅延と、が略同一になるような位置に挿入される。
【００９１】
このように、本実施の形態にかかるアレイ型プロセッサ２０は、データ配線上に挿入されるフリップフロップの挿入位置を適宜変更することが可能となる。それにより、本実施の形態にかかるアレイ型プロセッサ２０は、さらに遅延を短くしてパイプライン段数を増加させたパイプライン回路を動的に再構成することができる。つまり、本実施の形態にかかるアレイ型プロセッサ２０は、さらに高いスループットのパイプライン回路を動的に再構成することができる。また、回路全体の遅延を最適化することも可能である。なお、このとき、データ処理装置１０は、オブジェクトコード生成部１０９にて配置配線処理を行う際、上記したフリップフロップの挿入位置を決定する。
【００９２】
なお、データ配線上に複数のレジスタユニット２０９を備えた構成の詳細は、「D. Singh, S. Brown, "The case for registered routing swiches in field programmable gate arrays", Proceedings ACM/SIGDA International Synposium on Field-Programmable Gate Arrays, Feb, 2001, pp.161-169」にも開示されている。
【００９３】
本例では、レジスタユニット２０９が、フリップフロップ及びセレクタを有する場合を例に説明したがこれに限られない。レジスタユニット２０９は、フリップフロップのみを有する構成であっても良い。
【００９４】
続いて、図１４及び図１５を参照して、本実施の形態にかかるアレイ型プロセッサ２０向けの動作合成フローについて説明する。図１４は、本実施の形態にかかる動作合成部１００の第１の動作を示すフローチャートである。図１５は、本実施の形態にかかる動作合成部１００の第２の動作を示すフローチャートである。
【００９５】
（第１のフローチャート）
図１４の例では、動作合成部１００は、回路情報１３に代えて回路情報１３Ａを読み込む。回路情報１３Ａには、パイプライン回路向け回路情報と、多状態回路向け回路情報と、が含まれる。パイプライン回路向け回路情報には、アレイ型プロセッサ２０に設けられた各資源のうち比較的遅延の短い資源（演算ユニット２１２ｂ〜２１２ｃ，メモリユニット２１０ｂ，２１０ｃ，レジスタ２１３等）の情報が設定されている。一方、多状態回路向け回路情報には、アレイ型プロセッサ２０に設けられた各資源のうち比較的遅延の長い資源（演算ユニット２１２，メモリユニット２１０，レジスタ２１３等）の情報が設定されている。
【００９６】
この動作合成部１００は、パイプライン化するループ記述に対してパイプライン回路向け遅延制約及び回路情報を設定するとともに、それ以外の記述に対して多状態回路向け遅延制約及び回路情報を設定して、スケジューリング及びアロケーションを行う（Ｓ１０６，Ｓ１０７）。換言すると、動作合成部１００は、パイプライン化するループ記述に対して、それ以外の記述に対してよりも短い遅延制約及び短い遅延の資源を設定して、スケジューリング及びアロケーションを行う。
【００９７】
図１４に示す動作合成部１００のその他の動作については、図５に示す動作を同様であるため、その説明を省略する。
【００９８】
（第２のフローチャート）
図１５の例では、動作合成部１００は、図５の場合と同様の動作を経て、ＲＴレベルや論理レベルの最適化までを行う（Ｓ１１１）。その後、動作合成部１００は、パイプライン化する回路部分に対してフリップフロップを追加で挿入した後（Ｓ１１１２）、ＲＴＬ記述１４として出力する（Ｓ１１２）。
【００９９】
図１５に示す動作では、図１４の場合と比較して、２種類の回路情報を準備する必要が無い。ただし、この場合、データハザードが発生し得るパイプライン回路に対してフリップフロップが追加挿入されないように留意する必要がある。
【０１００】
＜実施の形態４＞
本実施の形態では、ループ記述のパイプライン化によりデータハザードが発生する回路の配置配線について説明する。
【０１０１】
データハザードは、既に図４等で説明したように、データ書き込み処理と、データ読み出し処理又はデータ書き込み処理と、の順序が逆転してしまうことにより発生する。したがって、データハザードは、変数を自己参照する回路記述にて発生しやすい。具体的には、データハザードは、変数を自己参照するループカウンタ回路等で発生しやすい。
【０１０２】
図１６Ａ及び図１６Ｂは、それぞれループカウンタ回路３００のソースコード及びその論理構成を示す図である。
【０１０３】
図１６Ｂに示すように、ループカウンタ回路３００は、セレクタ（ＳＥＬ）３０１と、加算回路３０２と、比較回路３０３と、レジスタ３０４〜３０６と、を有する。レジスタ３０４〜３０６には、それぞれ、値１、ｘ（任意の自然数）、ｘの最大値（ｍａｘ）が格納されている。
【０１０４】
加算回路３０２は、値１と値ｘ（初期値０）とを加算して加算結果"１"を出力する。セレクタ３０１は、ループ処理を実行中、加算回路３０２の加算結果"１"を選択して出力する。レジスタ３０５は、クロックに同期してセレクタ３０１の出力"１"を取り込み出力する。それにより、加算回路３０２は、値１と値ｘ（値１）とを加算して加算結果"２"を出力する。このような動作が繰り返され、ｘ＞ｍａｘになると、比較回路３０３は、出力値を初期値から他の値に切り替える。それにより、ループ処理が終了する。なお、ループ処理が行われていない場合、セレクタ３０１は、レジスタ３０５の出力をそのままその当該レジスタの入力に供給する。
【０１０５】
ここで、動作合成時のスケジューリングにて、ループカウンタ回路３００のループ記述に対してフォワーディング処理を施すと、レジスタ２０５の書き込み及び読み出しが折り畳む状態数以内にスケジューリングされることとなる。なお、以下の例では、説明を分かりやすくするため、レジスタ３０５の書き込み処理及び読み出し処理が同一状態にスケジューリングされる場合を例に説明する。そのため、加算回路３０２やセレクタ３０１の前後段にフリップフロップ（レジスタ）を挿入してパイプライン段数を増加させることはできない（但し、比較回路３０３の前後段にフリップフロップ（レジスタ）を挿入することは可能）。つまり、このループ記述は、１実行サイクル内で動作する組み合わせ回路として動作合成されることとなる。
【０１０６】
そこで、本実施の形態にかかるデータ処理装置１０は、データハザードの発生するループ記述に対してフォワーディング処理を施す場合、当該ループ記述に基づき生成された論理回路群（図１６Ｂの例では、セレクタ３０１，加算回路３０２，レジスタ３０５等）にフラグを設定する。より具体的には、当該論理回路群のそれぞれから識別可能な所定レベルの信号を出力させるようにしておく。そして、データ処理装置１０は、オブジェクトコード生成部１０９にて配置配線処理を行うときに、当該フラグの設定された論理回路群を近接配置して配線遅延をできるだけ短くする。それにより、データ処理装置１０は、フォワーディング処理が施されたパイプライン回路の処理時間を短くすることができる。
【０１０７】
図１７は、ループカウンタ回路３００の一部の配置例を示す図である。図１７に示すように、例えば、ループカウンタ回路３００は、隣接するプロセッサエレメント２０７によって動的に再構成される。
【０１０８】
なお、アレイ型プロセッサ２０では、ゲートアレイやセルベース等のＬＳＩ（Large Scale Integration）の場合と比較して、ルックアップテーブルやプロセッサエレメント（ＰＥ）等の大きな回路単位で配置配線処理が行われる。したがって、近接配置を考慮して動作合成を行うことは、スループット向上に有効である。
【０１０９】
＜実施の形態５＞
上記実施の形態１〜４にかかるアレイ型プロセッサ２０では、パイプライン回路がそれ以外の回路（多状態回路）よりも高い周波数のクロックに同期して動作する。つまり、パイプライン回路と多状態回路とはそれぞれ異なる周波数のクロックに同期して動作する。本実施の形態にかかるアレイ型プロセッサ２０は、さらに、状態によって回路遅延が変化する場合に、各状態の回路の最大遅延（クリティカルパル）に応じて動的にクロックの周波数を切り替える。
【０１１０】
なお、状態によって回路遅延を変化させる方法は、例えば、特許第４７５３８９５号明細書に開示されている。
【０１１１】
それに対し、動的にクロックの周波数を切り替える方法としては、例えば、複数のクロック供給配線の何れかを状態に応じて選択し、選択されたクロック供給配線のクロックを対応する回路に供給する方法がある。ただし、この方法では、クロック供給配線の本数が多くなり配線混雑するため、クロックの周波数の種類をそれほど多くすることはできない。また、クロック供給配線を切り替えるためのスイッチが別途必要になる。そこで、動的にクロックの周波数を切り替えるその他の方法としては、クロック供給元が状態に応じた周波数のクロックを生成し、当該クロックを一つのクロック供給配線に供給する方法がある。この方法は、例えば、国際公開ＷＯ２００９／１１６３９８号公報に開示されている。
【０１１２】
このように、本実施の形態にかかるアレイ型プロセッサ２０は、状態によって回路遅延が変化する場合に、パイプライン回路、多状態回路、複数の状態を有するパイプライン回路に関わらず、各状態の回路の最大遅延（クリティカルパス）に応じて動的にクロックの周波数を切り替えることができる。
【０１１３】
以上のように、上記実施の形態にかかる動作合成部（動作合成装置）１００は、パイプライン化するループ記述に対してパイプライン化しない場合よりも短い遅延（厳しい遅延制約）を設定して動作合成を行う。それにより、パイプライン回路では、パイプライン段数が増加してレイテンシーは増加するが、パイプライン化により実行サイクル数の増加が抑制され、かつ、１ステップ当たりの処理時間が短くなるため、スループットが向上する。また、パイプライン回路以外の多状態回路では、状態数が抑制されて実行サイクル数が少なくなるとともに、レジスタやメモリ等のセットアップ時間やホールド時間の合計時間が短縮されるため、スループットが向上する。つまり、上記実施の形態にかかる動作合成部１００は、回路全体として、従来よりもスループットを向上させることができる。
【０１１４】
また、上記実施の形態にかかるアレイ型プロセッサ（並列処理装置）２０は、例えば、内部にフリップフロップを有する演算ユニット、メモリユニット及びレジスタユニットを備える。それにより、上記実施の形態にかかるアレイ型プロセッサ２０は、遅延をさらに短くしてパイプライン段数を増加させたパイプライン回路を動的に再構成することができる。つまり、上記実施の形態にかかるアレイ型プロセッサ２０は、さらに高いスループットのパイプライン回路を動的に再構成することができる。
【０１１５】
また、上記実施の形態にかかるデータ処理装置１０は、データハザードの発生するループ記述に対してフォワーディング処理を施す場合、当該ループ記述に基づき生成された論理回路群にフラグを設定する。そして、上記実施の形態にかかるデータ処理装置１０は、配置配線処理を行うときに、当該フラグの設定された論理回路群を近接配置して配線遅延をできるだけ短くする。それにより、上記実施の形態にかかるデータ処理装置１０は、フォワーディング処理が施された回路の処理時間を短くすることができる。つまり、スループットを向上させることができる。
【０１１６】
さらに、上記実施の形態にかかるアレイ型プロセッサ２０は、状態によって回路遅延が変化する場合に、パイプライン回路、多状態回路、複数の状態を有するパイプライン回路に関わらず、各状態の回路の最大遅延（クリティカルパス）に応じて動的にクロックの周波数を切り替えることができる。
【０１１７】
また、上記実施の形態にかかる動作合成部及びそれを備えたデータ処理装置は、任意の処理を、ＣＰＵ（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）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【０１１９】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【０１２０】
１  データ処理システム
１０  データ処理装置
１１  ソースコード
１２  合成制約
１３，１３Ａ  回路情報
１４  ＲＴＬ記述
１５  オブジェクトコード
２０  アレイ型プロセッサ
１０１  ＤＦＧ生成部
１０２  スケジューリング部
１０３  アロケーション部
１０４  ＦＳＭ生成部
１０５  データパス生成部
１０６  パイプライン構成生成部
１０７  ＲＴＬ記述生成部
１０８  パイプライン判定部
１０９  オブジェクトコード生成部
１１０  コンピュータ
１１１  ＣＰＵ
１１２  ＲＡＭ
１１３  ＲＯＭ
１１４  ＩＦ
１１５  ＨＤＤ
１１６  動作記述情報
１１７  構造記述情報
１１８  動作合成プログラム
２０１  ＩＦ部
２０２  コードメモリ
２０３  状態管理部
２０５  マトリクス回路部
２０６  データメモリ
２０７  プロセッサエレメント
２０８  スイッチエレメント
２０９  レジスタユニット
２１０  メモリユニット
２１１  命令メモリ
２１２，２１２ｂ〜２１２ｄ  演算ユニット
２１０１，２１０１ｂ，２１０１ｃ  メモリ
２１０２ｂ，２１０２ｃ  フリップフロップ
２１０３ｂ，２１０３ｃ  セレクタ
２１２１，２１２１ｂ〜２１２１ｄ，２１２４ｄ  演算器
２１２２ｂ〜２１２２ｄ  フリップフロップ
２１２３ｂ〜２１２３ｄ  レジスタ
２１３  レジスタ
２１４〜２１８  配線接続スイッチ
【図１】
2014006650.tif 000003
【図２】
2014006650.tif 000004
【図３Ａ】
2014006650.tif 000005
【図３Ｂ】
2014006650.tif 000006
【図３Ｃ】
2014006650.tif 000007
【図４】
2014006650.tif 000008
【図５】
2014006650.tif 000009
【図６】
2014006650.tif 000010
【図７】
2014006650.tif 000011
【図８】
2014006650.tif 000012
【図９】
2014006650.tif 000013
【図１０Ａ】
2014006650.tif 000014
【図１０Ｂ】
2014006650.tif 000015
【図１１Ａ】
2014006650.tif 000016
【図１１Ｂ】
2014006650.tif 000017
【図１１Ｃ】
2014006650.tif 000018
【図１１Ｄ】
2014006650.tif 000019
【図１２Ａ】
2014006650.tif 000020
【図１２Ｂ】
2014006650.tif 000021
【図１２Ｃ】
2014006650.tif 000022
【図１３Ａ】
2014006650.tif 000023
【図１３Ｂ】
2014006650.tif 000024
【図１４】
2014006650.tif 000025
【図１５】
2014006650.tif 000026
【図１６Ａ】
2014006650.tif 000027
【図１６Ｂ】
2014006650.tif 000028
【図１７】
2014006650.tif 000029