(57)【要約】【課題】回路設計の時間を短縮するステートマシン分割プログラム、情報処理装置およびステートマシン分割方法を提供すること。【解決手段】実施形態に係るステートマシン分割プログラムは、コンピュータに、ステートマシンを用いて演算処理を制御する回路を示す回路情報に基づく設計値と、予め定められた基準値とを比較し、設計値が基準値を超える場合は、ステートマシンを複数のステートマシンに分割する処理を実行させることを特徴とする。【選択図】図１
2016122299.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
ステートマシンを用いて演算処理を制御する回路を示す回路情報に基づく設計値が、予め定められた基準値よりも大きいか否かを判定し、
前記設計値が前記基準値よりも大きい場合は、前記ステートマシンを複数のステートマシンに分割する
処理を実行させることを特徴とするステートマシン分割プログラム。
【請求項２】
前記分割する処理は、前記設計値が前記基準値よりも大きい場合は、前記基準値と同じ数のステートを有するサブステートマシンと、前記設計値を前記基準値で除算した値に応じた数のステートを有するメインステートマシンとに前記ステートマシンを分割する
ことを特徴とする請求項１に記載のステートマシン分割プログラム。
【請求項３】
前記分割する処理は、前記設計値を前記基準値で除算した値で前記ステートマシンが有するステートの数を除算した値が所定の閾値よりも小さい場合は、前記ステートマシンを分割せず、前記設計値を前記基準値で除算した値で前記ステートマシンが有するステートの数を除算した値が所定の閾値以上となる場合は、前記設計値を前記基準値で除算した値に応じた値と同じ数のステートを有するメインステートマシンと、前記ステートマシンが有するステートの数をメインステートマシンが有するステートの数で除算した値に応じた値と同じ数のステートを有するサブステートマシンとに前記ステートマシンを分割する
ことを特徴とする請求項１に記載のステートマシン分割プログラム。
【請求項４】
前記分割する処理は、前記設計値が前記基準値以下となるまで、前記ステートマシンを順次分割することを特徴とする請求項１に記載のステートマシン分割プログラム。
【請求項５】
前記判定する処理は、前記ステートマシンが有するステートの数を示す設計値が、指定されたステートの数を示す基準値よりも大きいか否かを判定することを特徴とする請求項１〜４のうちいずれか１つに記載のステートマシン分割プログラム。
【請求項６】
前記判定する処理は、前記回路が前記所定の処理を完了するまでの期間を示す設計値が、指定された期間を示す基準値よりも大きいか否かを判定することを特徴とする請求項１〜４のうちいずれか１つに記載のステートマシン分割プログラム。
【請求項７】
前記判定する処理は、前記回路が前記処理を完了するまでに実行する演算の回数を示す設計値が、指定された演算の回数を示す基準値よりも大きいか否かを判定することを特徴とする請求項１〜４のうちいずれか１つに記載のステートマシン分割プログラム。
【請求項８】
前記判定する処理は、前記ステートマシンが有するステートの参照回数を示す設計値が、指定された参照回数を示す基準値よりも大きいか否かを判定することを特徴とする請求項１〜４のうちいずれか１つに記載のステートマシン分割プログラム。
【請求項９】
コンピュータに、
ステートマシンを用いて演算処理を制御する回路を示す回路情報に基づく設計値が、予め定められた基準値よりも大きいか否かを判定し、
前記設計値が前記基準値よりも大きい場合は、前記ステートマシンのステートの参照先となるフリップフロップを追加した回路情報を出力する
処理を実行させることを特徴とするステートマシン分割プログラム。
【請求項１０】
前記出力する処理は、前記設計値を前記基準値で除算した値に応じた数のフリップフロップを追加した回路情報を出力することを特徴とする請求項９に記載のステートマシン分割プログラム。
【請求項１１】
ステートマシンを用いて演算処理を制御する回路を示す回路情報に基づく設計値が、予め定められた基準値よりも大きいか否かを判定する判定部と、
前記設計値が前記基準値よりも大きい場合は、前記ステートマシンを複数のステートマシンに分割する分割部と
を有することを特徴とする情報処理装置。
【請求項１２】
ステートマシンを用いて演算処理を制御する回路を示す回路情報に基づく設計値が、予め定められた基準値よりも大きいか否かを判定する判定部と、
前記設計値が前記基準値を超える場合は、前記ステートマシンのステートの参照先となるフリップフロップを追加した回路情報を出力する出力部と
を有することを特徴とする情報処理装置。
【請求項１３】
情報処理装置が、
ステートマシンを用いて演算処理を制御する回路を示す回路情報に基づく設計値が、予め定められた基準値よりも大きいか否かを判定し、
前記設計値が前記基準値よりも大きい場合は、前記ステートマシンを複数のステートマシンに分割する
処理を実行することを特徴とするステートマシン分割方法。
【請求項１４】
情報処理装置が、
ステートマシンを用いて演算処理を制御する回路を示す回路情報に基づく設計値が、予め定められた基準値よりも大きいか否かを判定し、
前記設計値が前記基準値よりも大きい場合は、前記ステートマシンのステートの参照先となるフリップフロップを追加した回路情報を出力する
処理を実行することを特徴とするステートマシン分割方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ステートマシン分割プログラム、情報処理装置およびステートマシン分割方法に関する。
【背景技術】
【０００２】
従来、コンピュータによって論理回路を合成する技術が知られている。このような技術の一例として、クロックを意識せずに論理回路の機能が記述された動作記述を、クロックに基づいてレジスタ間の機能を記述したＲＴＬ（Register  Transfer  Level）に変換する動作合成システムが知られている。例えば、動作合成システムは、動作記述に基づいて、演算のスケジューリングと演算器のリソース・シェアリングとを設定し、演算内容と演算のタイミングとを制御するステートマシンとデータパスとを生成する動作合成を実行する。
【０００３】
このような動作合成システムの一例として、生成したデータパスの中で全体がアクティブにならないｆａｌｓｅパスを検出し、レイテンシの最適化対象となるデータパスを削減する技術が知られている。また、回路上に設置されるモジュール間の接続を考慮し、レイテンシを調整するＦＦ（フリップフロップ）の挿入位置を最適化する動作合成システムが知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−２０９６７０号公報
【特許文献２】特開２０１４−１４２９１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、自動生成されたステートマシンが回路の動作タイミング上問題となる場合は、ＲＴＬを用いたタイミング解析の結果を元に利用者が動作記述を書き直すので、回路設計に時間がかかるという問題がある。
【０００６】
例えば、タイミング解析の結果を元に利用者が動作記述を作成し直す場合は、抽象度が高い動作記述ができなくなるため、設計のＴＡＴ（Turn  Around  Time）や、シミュレーション時間の短縮が困難になる。また、タイミング解析の結果を元に利用者が動作記述を作成し直す場合は、実際に処理を実行する際の動作タイミングを考慮して動作記述を作成するため、テクノロジや動作周波数が異なる回路に動作記述を流用できなくなり、動作記述の再利用性が低下する。また、回路の配置配線時にステートマシンが動作タイミング上問題となると解った場合は、動作記述から見直しを行うので、工程上のロスが増大する。この結果、ＲＴＬのタイミング解析の結果を元に利用者が動作記述を作成し直す方法では、回路設計に時間がかかってしまう。
【０００７】
１つの側面では、本発明は、回路設計の時間を短縮するステートマシン分割プログラム、情報処理装置およびステートマシン分割方法を提供する。
【課題を解決するための手段】
【０００８】
本願の開示するステートマシン分割プログラムは、一つの態様において、コンピュータに、ステートマシンを用いて演算処理を制御する回路を示す回路情報に基づく設計値と、予め定められた基準値とを比較し、前記設計値が前記基準値を超える場合は、前記ステートマシンを複数のステートマシンに分割する処理を実行させることを特徴とする。
【発明の効果】
【０００９】
回路設計の時間を短縮できる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係る動作合成装置が有する機能構成の一例を示す図である。
【図２】図２は、実施例１に係る基準値記憶部が記憶する基準値の一例を説明する図である。
【図３】図３は、実施例１に係る動作合成装置が記憶する設定値の一例を説明する図である。
【図４】図４は、実施例１に係る動作合成装置が記憶する分割されたステートマシンの情報の一例を説明する図である。
【図５】図５は、実施例１に係る動作合成部が実行する処理の一例を説明する図である。
【図６】図６は、動作合成処理の一例を説明する図である。
【図７】図７は、実施例１に係る動作合成装置がステートマシンを分割する処理を説明する図である。
【図８】図８は、ステートの数による遅延の一例を説明する図である。
【図９】図９は、ステートの数が増大した際に生じる遅延の一例を説明する図である。
【図１０】図１０は、ステートの参照先の数による遅延の一例を説明する図である。
【図１１】図１１は、ステートの参照先が増大した際に生じる遅延の一例を説明する図である。
【図１２】図１２は、動作記述を見直してステートマシンを分割させる処理の一例を説明する図である。
【図１３】図１３は、実施例１に係る動作合成装置が実行する処理を説明する図である。
【図１４】図１４は、ステートマシンの分割による効果を説明する図である。
【図１５】図１５は、実施例１に係る動作合成装置が実行する処理の流れを説明するフローチャートである。
【図１６】図１６は、実施例１に係る動作合成装置が実行するステートマシン分割処理の流れを説明するフローチャートである。
【図１７】図１７は、実施例２に係る動作合成装置の機能構成の一例を説明する図である。
【図１８】図１８は、実施例２に係る動作合成装置が実行する処理の流れを説明するフローチャートである。
【図１９】図１９は、実施例３に係る動作合成装置の機能構成の一例を説明する図である。
【図２０】図２０は、実施例３に係る動作合成装置がステートマシンを分割する処理の例を説明する図である。
【図２１】図２１は、実施例３に係る動作合成装置が実行する処理の流れを説明するフローチャートである。
【図２２】図２２は、実施例４に係る動作合成装置の機能構成の一例を説明する図である。
【図２３】図２３は、実施例４に係る分割結果記憶部が記憶する情報の一例を説明する図である。
【図２４】図２４は、実施例４に係る動作合成装置が参照先を分散させる処理の一例を説明する図である。
【図２５】図２５は、実施例４に係る動作合成装置が実行する処理の流れを説明するフローチャートである。
【図２６】図２６は、実施例１に係る動作合成装置として動作するコンピュータのハードウェア構成を示す図である。
【発明を実施するための形態】
【００１１】
以下に図面を参照して、本発明にかかるステートマシン分割プログラム、情報処理装置およびステートマシン分割方法の実施の形態を詳細に説明する。なお、以下の実施例により本願の開示するステートマシン分割プログラム、情報処理装置およびステートマシン分割方法の実施の形態が限定されるものではない。
【実施例１】
【００１２】
［動作合成装置の一例］
図１は、実施例１に係る動作合成装置が有する機能構成の一例を示す図である。図１に示すように、動作合成装置１は、基準値記憶部１０、設定値記憶部１１、分割結果記憶部１２、入力部２０、動作合成部２１、判定部２２、分割部２３、出力部２４を有する。
【００１３】
図１に示す動作合成装置１は、クロックを意識せずに論理回路の機能が記述された動作記述を、クロックに基づいてレジスタ間の機能を記述したＲＴＬの記述（以下、単にＲＴＬと記載する場合がある。）に変換する。かかるＲＴＬには、処理を実現するための各種演算を行うデータパス部の記述と、どのタイミングでデータパス部のどの演算器を動かすかを制御するステートマシン部の記述とが含まれる。
【００１４】
また、動作合成装置１は、ＲＴＬを生成した場合は、ＲＴＬのタイミング解析を行わずに、ＲＴＬに基づく設定値、すなわち、設計対象となる回路の性能や属性を示す各種の情報に基づく値と利用者により指定された基準値とを比較する。そして、動作合成装置１は、設定値が基準値を超える場合は、ＲＴＬが示す回路のステートマシンを複数のステートマシンに分割し、再度動作合成を行う。
【００１５】
以下、動作合成装置１が有する各機能構成が実行する処理の一例を説明する。なお、以下の説明では、動作合成装置１が生成するステートマシン部の記述を、動作合成装置１が生成するステートマシンと記載する場合がある。
【００１６】
基準値記憶部１０は、予め指定される基準値を記憶する。ここで、基準値とは、動作合成装置１の利用者が予め指定する値であり、動作合成装置１が生成するステートマシンや、動作合成装置１が生成したＲＴＬが示す回路の性能や属性を指定するための値である。例えば、図２は、実施例１に係る基準値記憶部が記憶する基準値の一例を説明する図である。例えば、基準値記憶部１０は、基準値として、動作合成装置１が生成するステートマシンが有するステートの数「ｋ」を基準値として記憶する。
【００１７】
図１に戻り、設定値記憶部１１は、動作合成装置１が動作記述から動作合成したＲＴＬを記憶する。例えば、図３は、実施例１に係る動作合成装置が記憶する設定値の一例を説明する図である。図３に示す例では、設定値記憶部１１は、回路情報として、動作合成装置１が生成したステートマシンが有するステートごとに、ステートの各種条件を示す情報１１ａ〜１１ｃを有する。
【００１８】
例えば、設定値記憶部１１は、ｎ番目のステートの情報１１ａとして、ステート名「org_state_name[n]」、遷移元ステートインデックス「org_in_id[n][a]」、遷移元からの遷移条件「org_in_cond[n][a]」を記憶する。また、設定値記憶部１１は、ｎ番目のステートの情報１１ａとして、遷移先ステートインデックス「org_out_id[n][b]」、遷移先への遷移条件「org_out_cond[n][b]」、ステートの参照先「org_reg[n][c]」を記憶する。
【００１９】
ここで、ステート名「org_state_name[n]」とは、ステートを特定するための情報であり、例えば、情報１１ａが［ｎ］番目のステートである旨を示す情報である。また、遷移元ステートインデックス「org_in_id[n][a]」は、［ｎ］番目のステートの遷移元となるステートが［ａ］番目のステートであることを示す情報である。また、遷移元からの遷移条件「org_in_cond[n][a]」は、遷移元となる［ａ］番目のステートから［ｎ］番目のステートに遷移するための条件を示す情報である。
【００２０】
また、遷移先ステートインデックス「org_out_id[n][b]」とは、［ｎ］番目のステートの遷移先となるステートが［ｂ］番目のステートであることを示す情報である。また、遷移先への遷移条件「org_out_cond[n][b]」とは、遷移元となる［ｎ］番目のステートから［ｂ］番目のステートに遷移するための条件を示す情報である。また、ステートの参照先「org_reg[n][c]」とは、ステートの遷移を示すレジスタを示す情報であり、例えば、［ｎ］番目のステートの参照先が［ｃ］番目のレジスタであることを示す情報である。
【００２１】
なお、図３では記載を省略したが、設定値記憶部１１には、ステートマシンの情報以外にも、演算を行うデータパス部の情報が格納されるものとする。例えば、設定値記憶部１１には、データパス部の情報として、演算を行う演算器、演算器の出力を保持するＦＦ（フリップフロップ）、演算器に信号を入力するマルチプレクサ、演算器からの出力をＦＦに出力するデマルチプレクサの数等が格納される。また、設定値記憶部１１には、データパス部が有する演算器、ＦＦ、マルチプレクサおよびデマルチプレクサの接続関係や、マルチプレクサおよびデマルチプレクサの参照元となるレジスタの番号等が登録される。
【００２２】
図１に戻り、分割結果記憶部１２は、動作合成装置１によって分割されたステートマシンの情報を記憶する。例えば、図４は、実施例１に係る動作合成装置が記憶する分割されたステートマシンの情報の一例を説明する図である。なお、図４には、動作合成装置１がステートマシンを主たるステートマシンであるメインステートマシンと、メインステートマシンに従属してステートが遷移する従たるステートマシンであるサブステートマシンとに分割した場合の例を記載した。
【００２３】
例えば、図４に記憶する例では、分割結果記憶部１２は、メインステートマシンのステートごとに、ステートの情報１２ａ〜１２ｃを記憶し、サブステートマシンのステートごとに、ステートの情報１２ｄ〜１２ｆを記憶する。なお、実施例１では、分割結果記憶部１２がメインステートマシンおよびサブステートマシンが有するステートの情報を記憶するものとしたが、各ステートの情報は、メインステートマシンおよびサブステートマシンごとに異なる記憶部が記憶してもよい。
【００２４】
例えば、分割結果記憶部１２は、メインステートマシンが有する［ｍ］番目のステートの情報１２ａとして、ステート名「main_state_name[m]」、遷移元ステートインデックス「main_in_id[m][a]」、遷移元からの遷移条件「main_in_cond[m][a]」を記憶する。また、分割結果記憶部１２は、［ｍ］番目のステートの情報１２ａとして、遷移先ステートインデックス「main_out_id[m][b]」、遷移先への遷移条件「main_out_cond[m][b]」を記憶する。
【００２５】
また、分割結果記憶部１２は、メインステートマシンが有する［ｍ］番目のステートに属するサブステートマシンが有する［k+1］番目のステートの情報１２ｄとして、ステート名「sub_state_name[m][k+1]」を記憶する。また、分割結果記憶部１２は、情報１２ｄとして、遷移元ステートインデックス「sub_in_id[m][k+1][a]」、遷移元からの遷移条件「sub_in_cond[m][k+1][a]」、遷移先ステートインデックス「sub_out_id[m][k+1][b]」を記憶する。また、分割結果記憶部１２は、情報１２ｄとして、遷移先への遷移条件「sub_out_cond[m][k+1][b]」、ステートの参照先［sub_reg[m][k+1][c]］を記憶する。
【００２６】
図１に戻り、説明を続ける。入力部２０は、動作合成装置１の利用者が指定する基準値の入力を受付ける。例えば、図１に示す例では、入力部２０は、動作合成装置１が生成するステートマシンが有するステートの数を基準値として受付ける。かかる場合、入力部２０は、受信した基準値を基準値記憶部１０に格納する。
【００２７】
また、入力部２０は、ＲＴＬに変換する動作記述を受付ける。かかる動作記述は、入力部２０が有するエディタ機能等により生成された動作記述であってもよく、他の装置や記録媒体等から読み込んだものであってもよい。また、入力部２０は、動作記述を受付けた場合は、受付けた動作記述を動作合成部２１に出力し、動作合成処理を実行させる。なお、入力部２０は、マウスやキーボードなどのユーザの操作を受け付けるデバイスなどで実現される。
【００２８】
動作合成部２１は、入力部２０が受け付けた動作記述を用いて、ＲＴＬを生成する動作合成処理を実行し、生成したＲＴＬを設定値記憶部１１に登録する。例えば、図５は、実施例１に係る動作合成部が実行する処理の一例を説明する図である。図５に示すように、動作合成部２１は、動作記述を受付けると、動作記述から、スケジューリングおよびリソース・シェアリングを設定し、設定結果に基づいて、データパスとステートマシンとを生成する動作合成を実行する。そして、動作合成部２１は、動作合成の結果、動作記述が示す動作を実現する回路のＲＴＬを生成する。
【００２９】
ここで、図６は、動作合成処理の一例を説明する図である。例えば、動作合成部２１は、図６の（Ａ）に示すように、クロック等の回路の動作タイミングを意識せずに論理回路の機能が記述された動作記述を受信する。かかる場合、動作合成部２１は、図６の（Ｂ）に示すように、動作を実現するため、どのタイミングでどの演算を行うかを決定するスケジューリングを設定する。例えば、図６に示す例では、動作合成部２１は、３サイクルのレイテンシで演算を実行する旨を設定する。また、動作合成部２１は、図６の（Ｃ）に示すように、演算器を共有する演算を設定するリソース・シェアリングを行う。例えば、図６に示す例では、動作合成部２１は、最初のサイクルと２番目のサイクルで実行される積算を同一の演算器で行い、２番目のサイクルと３番目のサイクルで実行される和算を同一の演算器で行う旨を設定する。
【００３０】
そして、動作合成部２１は、図６の（Ｄ）に示すように、スケジューリングとリソース・シェアリングの結果に基づいて、データパスとステートマシンとを生成する。例えば、動作合成部２１は、リソース・シェアリングの結果に基づいて、演算処理を実現するデータパス部を生成する。また、動作合成部２１は、スケジューリングに基づいて、データパス部が有するマルチプレクサとデマルチプレクサとを制御するステートマシン部を生成する。そして、動作合成部２１は、生成したデータパスとステートマシンとを示すＲＴＬを設定値記憶部１１に登録する。
【００３１】
判定部２２は、設定値記憶部１１に登録された設計値と、基準値記憶部１０に登録された基準値とを比較する。例えば、判定部２２は、基準値として、ステートマシンが有するステートの数が設定されている場合は、設定値記憶部１１に登録されたＲＴＬから、ステートマシンが有するステートの数を設定値として特定する。そして、判定部２２は、特定した設定値が基準値を超えているか否かを判定し、設定値が基準値を超えている場合は、設定値記憶部１１が記憶するステートマシンのＲＴＬと基準値と設計値とを分割部２３に出力する。一方、判定部２２は、特定した設定値が基準値以下となる場合は、設定値記憶部１１に登録されたＲＴＬを出力部２４に出力する。
【００３２】
分割部２３は、設計値が基準値を超える場合は、ステートマシンを複数のステートマシンに分割する。例えば、分割部２３は、判定部２２からステートマシンのＲＴＬを受信する。そして、分割部２３は、基準値としてステートマシンが有するステートの数が設定されている場合は、ステートマシンの各ステートを振り分けることで、ステートマシンをメインステートマシンとサブステートマシンとに分割する。より具体的には、分割部２３は、基準値と同じ数のステートを有するサブステートマシンと、設計値を基準値で除算した値を切り上げた値と同じ数のステートを有するメインステートマシンとにステートマシンを分割する。
【００３３】
そして、分割部２３は、メインステートマシンとサブステートマシンとを示すＲＴＬ、すなわち、情報１２ａ〜１２ｆを生成し、生成した情報を分割結果記憶部１２に登録する。かかる場合、動作合成部２１は、分割結果記憶部１２に登録された情報１２ａ〜１２ｆを取得する。そして、動作合成部２１は、取得した情報１２ａ〜１２ｆが示すメインステートマシンとサブステートマシンにより制御が行われるよう、ＲＴＬを修正し、修正したＲＴＬを設定値記憶部１１に登録する。この結果、修正後のＲＴＬの設定値が基準値を満たすこととなるので、判定部２２は、修正後のＲＴＬを出力部２４に出力する。
【００３４】
以下、図７を用いて、分割部２３がステートマシンをメインステートマシンとサブステートマシンとに分割する処理の一例を説明する。図７は、実施例１に係る動作合成装置がステートマシンを分割する処理を説明する図である。なお、図７に示す例では、メインステートマシンが有するｎ個のステートであるＳＴ１〜ＳＴｎと、各ステートの遷移を示す矢印でステートマシンを表した。
【００３５】
例えば、分割部２３は、図７の（Ｅ）に示すステートＳＴ１〜ＳＴｎを有するステートマシンのＲＴＬを取得する。かかる場合、分割部２３は、ステートマシンに含まれるステートを、ステートの順序を辿りながら、ステートの数が基準値以下となる複数のグループに分割する。例えば、分割部２３は、基準値の値が「ｋ」である場合は、図７の（Ｆ）に示すように、ＳＴ１〜ＳＴｋ、ＳＴｋ＋１〜ＳＴ２ｋ、ＳＴ２ｋ＋１・・・ＳＴ（ｍ−１）ｋ、ＳＴ（ｍ−１）ｋ＋１〜ＳＴｎというように分割する。
【００３６】
続いて、分割部２３は、異なるグループに分割したステート間の遷移条件を特定する。例えば、分割部２３は、ＳＴ１に遷移するリセット解除時と、ＳＴｋからＳＴｋ＋１へと遷移するための遷移条件Ａと、ＳＴ２ｋからＳｔ２ｋ＋１へと遷移するための遷移条件Ｂとを特定する。また、分割部２３は、ＳＴ（ｍ−１）ｋからＳＴ（ｍ−１）ｋ＋１へと遷移するための遷移条件Ｃ、ＳＴｎからＳＴ１へと遷移するための遷移条件Ｄを特定する。また、分割部２３は、グループを隔てるステート間の遷移条件、例えば、ＳＴ２ｋ−１からＳＴ２へと遷移するための遷移条件Ｚを特定する。
【００３７】
そして、分割部２３は、各グループにアイドルステートを追加し、グループに含まれるステートのうち最上流となるステートまでの遷移元をアイドルステートに変更する。また、分割部２３は、グループに含まれるステートのうち最下流となるステートの遷移先をアイドルステートに変更する。また、分割部２３は、遷移条件Ｚ等、グループを隔ててステートが遷移する遷移条件の遷移先を、同一グループに含まれるアイドルステートに変更する。この結果、分割部２３は、実質的なステートの数が基準値の数ｋ個以下となる複数のサブステートマシンを生成する。
【００３８】
また、分割部２３は、設定値を基準値で除算した値を切り上げた値を算出し、算出した値と同じ数のステートを有するメインステートマシンを生成する。そして、分割部２３は、メインステートマシンに含まれる各ステートの遷移条件として、ステートマシンのステートを複数のグループに分割した際の分割箇所の条件を設定する。つまり、分割部２３は、メインステートマシンの各ステートを、各サブステートマシンと対応させる。また、分割部２３は、グループを隔ててステートが遷移する遷移条件については、かかるグループと対応するサブステートマシンを特定し、特定したサブステートマシンに対応するステート間の遷移条件とする。
【００３９】
この結果、分割部２３は、図７中（Ｇ）に示すように、ステートマシンをメインステートマシンと複数のサブステートマシンとに分割する。例えば、図７に示す例では、分割部２３は、遷移条件Ａ〜遷移条件Ｄ、遷移条件Ｚで遷移するＭａｉｎ＿ＳＴ１〜Ｍａｉｎ＿ＳＴｍまでのｍ個のステートを有するメインステートマシンを生成する。
【００４０】
また、分割部２３は、遷移条件Ｄまたは遷移条件Ｚでアイドルステートから他のステートに遷移し、遷移条件Ａでアイドルステートに戻るサブステートマシンＳｕｂ１を生成する。また、分割部２３は、遷移条件Ａでアイドルステートから他のステートに遷移し、遷移条件Ｂまたは遷移条件Ｚでアイドルステートに戻るサブステートマシンＳｕｂ２を生成する。また、分割部２３は、遷移条件Ｃでアイドルステートから他のステートに遷移し、遷移条件Ｄでアイドルステートに戻るサブステートマシンＳｕｂｍを生成する。なお、分割部２３は、他にも、分割元となるステートマシンから分割した各ステートを含むサブステートマシンを生成しているものとする。
【００４１】
図１に戻り、出力部２４は、設定値が基準値を満たすＲＴＬを出力する。例えば、出力部２４は、判定部２２からＲＴＬを受付けると、ＲＴＬをそのまま、若しくは、ＲＴＬに基づく回路図等を出力する。例えば、出力部２４は、プリンタやモニタ等の情報出力装置により実現される。
【００４２】
このように、動作合成装置１は、動作合成されたＲＴＬの回路情報の設定値が、設定された基準値を超える場合は、ステートマシンを分割し、回路情報の設定値が基準値を下回るように、ＲＴＬを修正する。この結果、動作合成装置１は、ＲＴＬのタイミング解析の結果に基づいて利用者が動作記述を修正せずとも、利用者が望む回路のＲＴＬを出力することができるので、回路設計に係る時間を短縮することができる。
【００４３】
以下、図を用いて、動作合成装置１の効果を説明する。図８は、ステートの数による遅延の一例を説明する図である。例えば、図８に示すステートマシンは、２つのステートを有する。かかる場合、ステートマシンは、ステート１の成立条件が成立すると、図８中（Ｈ）に示す太線経路を介して、ステート１を示す値を出力する。この結果、図８に示すステートマシンは、図８中（Ｉ）に示すように、ステートの値を保持するＦＦの遅延、ステート１の成立条件である（１）の遅延、ＡＮＤ回路ａおよびＯＲ回路ｃの遅延を合計した遅延を有する。かかる遅延がクロック周期以内に収まる場合、ステートマシンは、回路の動作タイミング上問題とはならない。
【００４４】
一方、図９は、ステートの数が増大した際に生じる遅延の一例を説明する図である。例えば、図９に示すステートマシンは、３つのステートを有する。かかる場合、ステートマシンは、図９中の太線に示す経路を介して、ステート１を示す値を出力する。ここで、図９に示すステートマシンは、図８に示すステートマシンよりも多くのステートを有するため、回路規模が増大する。この結果、図９中の太線に示す経路は、図８中（Ｈ）に示した経路よりも長くなるため、図９中（Ｊ）に示すように、信号を保持するためのバッファｆが設置されることとなる。この結果、図９に示すステートマシンは、図９中（Ｌ）に示すように、ステートの値を保持するＦＦの遅延、ステート１の成立条件である（１）の遅延、ＡＮＤ回路ａ、ＯＲ回路ｄ、ＯＲ回路ｅおよびバッファｆの遅延を合計した遅延を有する。この結果、ステートマシンは、遅延がクロック周期以内に収まらず、回路の動作タイミング上問題になってしまう。
【００４５】
また、図１０は、ステートの参照先の数による遅延の一例を説明する図である。例えば、図１０に示すステートマシンは、３つの参照先を有する。かかる場合、図１０の（Ｍ）に示すように、ステートマシンの出力は、１つのＦＦを介して、参照先がステートマシンを参照するためのＦＦに分配される。この結果、図１０に示すステートマシンは、図１０中（Ｎ）に示すように、ステートマシンの出力を保持するＦＦの遅延と、かかるＦＦから参照先が参照するＦＦまでの経路（１）の遅延とを合計した遅延を有する。
【００４６】
一方、図１１は、ステートの参照先が増大した際に生じる遅延の一例を説明する図である。例えば、図１１に示すステートマシンは、７つの参照先を有する。かかる場合、１つのＦＦの出力では、参照先が参照する各ＦＦを駆動できない恐れがあるため、図１１中（Ｏ）に示すように、バッファａが追加される。また、図１１に示す例では、参照先の増加に伴い、参照先が参照するＦＦの設置位置がステートマシンの出力を保持するＦＦから離れるため、バッファｂおよびバッファｃが追加される。かかる場合、図１１に示すステートマシンは、図１１中（Ｒ）に示すように、ステートマシンの出力を保持するＦＦの遅延と、かかるＦＦから参照先が参照するＦＦまでの経路（１）の遅延とを合計した遅延に加え、各バッファａ〜ｃの遅延を合計した遅延を有する。この結果、ステートマシンは、遅延がクロック周期以内に収まらず、回路の動作タイミング上問題になってしまう。
【００４７】
上述したように、ステートマシンのステート数や参照先が増大した場合は、ステートマシン自体が回路の動作タイミング上問題となる。そこで、動作合成装置１は、ステートマシンを複数のステートマシンに分割することで、ステートマシンあたりのステート数や参照先を削減する。
【００４８】
なお、ステートマシンが回路の動作タイミング上問題となるか否かは、ＲＴＬのタイミング解析から特定することができる。このため、ＲＴＬのタイミング解析や実装時の解析等でステートマシンが問題となった場合は、動作記述を見直し、自動生成されるステートマシンを分割させることで、ステートマシンあたりのステート数や参照先を削減する手法も考えられる。
【００４９】
例えば、図１２は、動作記述を見直してステートマシンを分割させる処理の一例を説明する図である。図１２に示す例では、利用者は、処理Ａの動作記述から生成されたＲＴＬのタイミング解析の結果、ステートマシンがタイミング上問題となる場合は、図１２中（Ｓ）に示すように、処理Ａを処理Ａ１と処理Ａ２とに分けた動作記述を新たに作成する。この結果、動作合成システムは、図１２の（Ｔ）に示すように、処理Ａ１を実行するデータパス部とステートマシン部、および、処理Ａ２を実行するデータパス部とステートマシン部とを有するモジュールのＲＴＬを出力する。しかしながら、タイミング解析の結果を元に利用者が動作記述を作成し直す場合は、回路設計に要する時間を増大される恐れがある。
【００５０】
一方、図１３は、実施例１に係る動作合成装置が実行する処理を説明する図である。例えば、動作合成装置１は、図１３中（Ｕ）に示すように、ＲＴＬのタイミング解析の結果ではなく、ＲＴＬの回路情報である設計値に着目し、ステートマシンを分割する。具体的には、動作合成装置１は、設計値が基準値を超えていた場合は、生成されたステートマシンが回路の動作タイミング上問題となりえると判定する。この結果、動作合成装置１は、図１３中（Ｖ）に示すように、ＲＴＬを修正し、ステートマシンをメインステートマシンとサブステートマシンとに分割する。この結果、動作合成装置１は、ＲＴＬのタイミング解析や、動作記述の修正を行わずとも、ステートマシンが問題となるのを解消できるので、回路設計に係る時間を短縮することができる。
【００５１】
ここで、図１４は、ステートマシンの分割による効果を説明する図である。例えば、図１４に示す例では、動作合成装置１は、ステート数がｎ個のステートマシンを、ステート数がｋ個の複数のサブステートマシンと、ステート数がｍ個のメインステートマシンとに分割する。ここで、値「ｍ」は、設計値であるステートマシンのステート数「ｎ」を基準値の値「ｋ」で除算した値を切り上げた値である。
【００５２】
かかる分割を行った場合、動作合成装置１は、メインステートマシンおよびサブステートマシンのステートの数を削減する。この結果、メインステートマシンおよびサブステートマシンの配線が短くなる結果、信号を補償するバッファが不要となる。また、動作合成装置１は、図１４中（Ｗ）に示すように、ステートマシンを分割することで、各ステートマシンの参照先を削減する。この結果、サブステートマシンの信号を補償するバッファや
参照先のＦＦを駆動させるためのバッファが不要となるので、動作合成装置１は、ステートマシンの遅延をクロック周期内に収めることができる。
【００５３】
なお、動作合成部２１、判定部２２、分割部２３は、電子回路等で実現されてもよい。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路、またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などを適用する。
【００５４】
また、基準値記憶部１０、設定値記憶部１１、分割結果記憶部１２は、記憶装置である。ここで、記憶装置の例として、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（flash  memory）などの半導体メモリ素子を適用する。
【００５５】
次に、図１５を用いて、動作合成装置１が実行する処理の流れの一例を説明する。図１５は、実施例１に係る動作合成装置が実行する処理の流れを説明するフローチャートである。まず、動作合成装置１は、設定値記憶部１１から、ステートマシンのステート数ｎを取得する（ステップＳ１０１）。続いて、動作合成装置１は、基準値記憶部１０から、基準値ｋを取得する（ステップＳ１０２）。そして、動作合成装置１は、ｎをｋで除算した値が１よりも大きいか否かを判定する（ステップＳ１０３）。すなわち、動作合成装置１は、ｎがｋを超えるか否かを判定する。
【００５６】
ここで、動作合成装置１は、ｎをｋで除算した値が１よりも大きい場合（ステップＳ１０３：Ｙｅｓ）、すなわち、ｎがｋを超える場合は、ステートマシンの分割を要すると判定する（ステップＳ１０４）。また、動作合成装置１は、メインステートマシンのステート数を算出する（ステップＳ１０５）。具体的には、動作合成装置１は、ｎ／ｋを切り上げた値をメインステートマシンのステート数ＭａｉｎＳＴ＿ｎｕｍに設定する。
【００５７】
また、動作合成装置１は、サブステートマシンのステート数を算出する（ステップＳ１０６）。具体的には、動作合成装置１は、基準値ｋをサブステートマシンのステート数ＳｕｂＳＴ＿ｎｕｍに設定する。そして、動作合成装置１は、ステートマシンを分割するステートマシン分割処理を実行し（ステップＳ１０７）、処理を終了する。一方、動作合成装置１は、ｎをｋで除算した値が１以下となる場合（ステップＳ１０３：Ｎｏ）、すなわち、ｎがｋ以下となる場合は、ステートマシンの分割が不要と判定し（ステップＳ１０８）、処理を終了する。
【００５８】
続いて、図１６を用いて、図１５中ステップＳ１０７に示したステートマシン分割処理の流れの一例を説明する。図１６は、実施例１に係る動作合成装置が実行するステートマシン分割処理の流れを説明するフローチャートである。まず、動作合成装置１は、設計値記憶部１１に記憶されたステートの情報を、番号が若い順にＳｕｂＳＴ＿ｎｕｍ個ずつデータを取得する（ステップＳ２０１）。
【００５９】
次に、動作合成装置１は、メインステートマシンにステートを１つ追加する（ステップＳ２０２）。例えば、動作合成装置１は、メインステートマシンのステートを示す情報として、ｉｄ＿ｍ＝０〜（ＭａｉｎＳＴ＿ｎｕｍ−１）を設定する。また、動作合成装置１は、ｉｄ＿ｋ＝０として、サブステートマシンにＩＤＬＥステートを作成する（ステップＳ２０３）。
【００６０】
ここで、動作合成装置１は、ｉｄ＿ｍ＝＝０を満たすか否かを判定する（ステップＳ２０４）。すなわち、動作合成装置１は、メインステートマシンにステートが設定されているか否かを判定する。そして、動作合成装置１は、ｉｄ＿ｍ＝＝０を満たさない場合は（ステップＳ２０４、Ｎｏ）、ＩＤＬＥステートをリセット解除時のステートにする（ステップＳ２０５）。続いて、動作合成装置１は、取得したｋ個のステートの情報から、ｉｄ＿ｋ番目のデータを選択する（ステップＳ２０６）。
【００６１】
そして、動作合成装置１は、選択したデータをサブステートマシンのデータとしてコピーする（ステップＳ２０７）。例えば、動作合成装置１は、選択したデータの各情報に含まれる「ｏｒｇ」を「ｓｕｂ」に変更したデータを生成する。また、動作合成装置１は、選択したデータの遷移元が、ステップＳ２０１で取得したステートであるか否かを判定する（ステップＳ２０８）。
【００６２】
そして、動作合成装置１は、選択したデータの遷移元が、ステップＳ２０１で取得したステートではないと判定した場合は（ステップＳ２０８：Ｙｅｓ）、以下の処理を実行する。まず、動作合成装置１は、選択したデータの遷移元ステートインデックスと遷移元からの遷移条件とを、ｉｄ＿ｍが示すメインステートマシンのステートの情報としてコピーする（ステップＳ２０９）。次に、動作合成装置１は、選択したデータの遷移元からの遷移条件を、サブステートマシンのアイドルステートの遷移先への遷移条件にコピーし、アイドルステートの遷移先ステートインデックスをｉｄ＿ｋに設定する（ステップＳ２１０）。
【００６３】
そして、動作合成装置１は、選択したデータの遷移元ステートインデックスからコピーしたサブステートマシンの遷移元ステートインデックスの［ａ］の値を「０」（すなわち、アイドルステート）に設定する（ステップＳ２１１）。続いて、動作合成装置１は、選択したデータの遷移先が、ステップＳ２０１で取得したステート以外のステートであるか否かを判定する（ステップＳ２１２）。
【００６４】
そして、動作合成装置１は、選択したデータのコピー元の遷移先が、ステップＳ２０１で取得したステート以外のステートであると判定した場合は（ステップＳ２１２：Ｙｅｓ）、以下の処理を実行する。まず、動作合成装置１は、選択したデータの遷移先ステートインデックスと遷移先への遷移条件とをメインステートマシンのステート情報としてコピーする（ステップＳ２１３）。次に、動作合成装置１は、選択したデータの遷移先への遷移条件をサブステートマシンのアイドルステートの遷移元からの遷移条件にコピーし、アイドルステートの遷移先ステートインデックスの値［ｂ］を「ｉｄ＿ｋ」の値に設定する（ステップＳ２１４）。そして、動作合成装置１は、選択したデータからコピーしたサブステートマシンの遷移元ステートインデックスの［ａ］を「０」（すなわち、アイドルステート）に設定する（ステップＳ２１５）。
【００６５】
続いて、動作合成装置１は、ｉｄ＿ｋの値がＳｕｂＳＴ＿ｎｕｍの値以下であるか否かを判定する（ステップＳ２１６）。そして、動作合成装置１は、ｉｄ＿ｋの値がＳｕｂＳＴ＿ｎｕｍの値よりも大きい場合は（ステップＳ２１６：Ｎｏ）、ｉｄ＿ｍの値がＭａｉｎＳＴ＿ｎｕｍの値より小さいか否かを判定する（ステップＳ２１７）。そして、動作合成装置１は、ｉｄ＿ｍの値がＭａｉｎＳＴ＿ｎｕｍの値以上である場合は（ステップＳ２１７：Ｎｏ）、処理を終了する。
【００６６】
一方、動作合成装置１は、ｉｄ＿ｍの値がＭａｉｎＳＴ＿ｎｕｍの値より小さい場合は（ステップＳ２１７：Ｙｅｓ）、ｉｄ＿ｍの値を１インクリメントし（ステップＳ２１８）、ステップＳ２０１から、各処理を再度実行する。また、動作合成装置１は、ｉｄ＿ｋの値がＳｕｂＳＴ＿ｎｕｍの値以下である場合は（ステップＳ２１６：Ｙｅｓ）、ｉｄ＿ｋの値を１インクリメントし（ステップＳ２１９）、ステップＳ２０６から、各処理を再度実行する。
【００６７】
また、動作合成装置１は、選択したデータのコピー元の遷移先が、ステップＳ２０１で取得したステートのいずれかであると判定した場合は（ステップＳ２１２：Ｎｏ）、ステップＳ２１３〜Ｓ２１５をスキップし、ステップＳ２１６を実行する。また、動作合成装置１は、選択したデータの遷移元が、ステップＳ２０１で取得したステートのいずれかであると判定した場合は（ステップＳ２０８：Ｎｏ）、ステップＳ２０９〜Ｓ２１１をスキップし、ステップＳ２１２を実行する。また、動作合成装置１は、ｉｄ＿ｍ＝＝０を満たす場合は（ステップＳ２０４：Ｙｅｓ）、ステップＳ２０５の実行をスキップする。
【００６８】
[実施例１の効果]
上述したように、動作合成装置１は、ステートマシンを用いて演算処理を制御する回路のＲＴＬに基づく設計値と、予め定められた基準値とを比較する。そして、動作合成装置１は、設計値が基準値を超える場合は、ステートマシンを複数のステートマシンに分割する。このため、動作合成装置１は、ＲＴＬのタイミング解析に基づいて動作記述を修正せずとも、ステートマシンがタイミング上問題とはならない回路のＲＴＬを生成させることができるので、回路設計にかかる時間を短縮することができる。
【００６９】
また、例えば、動作合成装置１は、動作記述の見直しを不要とするので、抽象度が高い動作記述を可能とし、設計のＴＡＴ（Turn  Around  Time）や、シミュレーション時間を短縮することができる。また、動作合成装置１は、動作記述の抽象度を保つ結果、テクノロジや動作周波数が異なる回路に動作記述を流用させることができるので、動作記述の再利用性を向上させることができる。
【００７０】
また、動作合成装置１は、ステートマシンを、基準値と同じ数のステートを有するサブステートマシンと、設計値を基準値で除算した値を切り上げた値と同じ数のステートを有するメインステートマシンとに分割する。このため、動作合成装置１は、各ステートマシンが有するステートの数と、参照先の数を削減することができる。また、動作合成装置１は、ステート間の依存関係を削減するので、配置配線性を向上させることができる。この結果、動作合成装置１は、ステートマシンがタイミング上問題となるのを防ぐことができる。
【００７１】
また、動作合成装置１は、ステートマシンが有するステートの数を示す設計値と基準値とを比較する。この結果、動作合成装置１は、ステートマシンの分割が適切か否かを精度良く判定することができる。
【実施例２】
【００７２】
上述した実施例１では、ステートマシンが有するステートの数に基づいて、ステートマシンを分割するか否かを判定する動作合成装置１について説明した。しかしながら、実施形態は、これに限定されるものではない。以下、実施例２として、動作合成装置が実行する処理の他の例を説明する。
【００７３】
例えば、実施例２に係る動作合成装置１ａは、回路が処理を完了するまでのレイテンシまたは処理を完了するまでに実行する演算の回数であるオペレーションの数を設計値および基準値とする。また、他の例では、動作合成装置１ａは、ステートマシンの各ステートを参照する回数であるｆａｎｏｕｔ数を設計値および基準値とする。
【００７４】
そして、動作合成装置１ａは、設計値が基準値を超える場合は、設計値を基準値で除算した値を切り上げた値と同じ数のステートを有するメインステートマシンを生成する。また、動作合成装置１ａは、ステートマシンのステート数をメインステートマシンのステート数で除算した値を切り上げた値と同じ数のステートを有するサブステートマシンを生成する。ただし、動作合成装置１ａは、サブステートマシンのステート数が予め定められた所定の値（例えば、４）以上となる場合にのみ、ステートマシンをメインステートマシンとサブステートマシンとに分割する。
【００７５】
例えば、動作合成装置１ａは、プロセス内のオペレーション数を設計値および基準値とする。ここで、動作合成装置１ａは、設計値が「１２００」であり基準値が「４００」であり、動作記述から合成したステートマシンのステート数が「２４」である場合は、以下の分割を実行する。すなわち、動作合成装置１ａは、メインステートマシンのステート数が「１２００／４００＝３」、サブステートマシンのステート数が「２４／３＝８」となるので、ステートマシンの分割を実行する。
【００７６】
一方、動作合成装置１ａは、動作記述から合成したステートマシンのステート数が「９」である場合は、メインステートマシンのステート数が「１２００／４００＝３」、サブステートマシンのステート数が「９／３＝３」となる。かかる場合、ステートマシンをメインステートマシンとサブステートマシンとに分割しても、ステートマシンのステート数や参照先を削減することができない。このため、動作合成装置１ａは、ステートマシンの分割を実行せずに、処理を終了する。
【００７７】
図１７は、実施例２に係る動作合成装置の機能構成の一例を説明する図である。図１７に示す例では、動作合成装置１ａは、基準値記憶部１０ａ、設定値記憶部１１、分割結果記憶部１２、入力部２０、動作合成部２１、判定部２２ａ、分割部２３ａ、出力部２４を有する。なお、以下の説明では、実施例１と同様の機能を発揮するものについては、同一の符号を付し、以下の説明を省略する。
【００７８】
基準値記憶部１０ａは、予め設定される基準値として、レイテンシの値、オペレーションの数、ｆａｎｏｕｔ数等を記憶する。判定部２２ａは、基準値記憶部１０ａから基準値を取得すると、設定値記憶部１１から、基準値と同種の情報である設定値を取得する。そして、判定部２２ａは、設定値が基準値を超える場合は、設定値記憶部１１に格納された情報を分割部２３ａに出力し、設定値が基準値を超えない場合は、設定値記憶部１１に格納された情報を出力部２４に出力する。
【００７９】
分割部２３ａは、設計値を基準値で除算した値でステートマシンが有するステートの数を除算した値が所定の閾値よりも小さい場合は、ステートマシンを分割せずに処理を終了する。一方、分割部２３ａは、設計値を基準値で除算した値でステートマシンが有するステートの数を除算した値が所定の閾値以上となる場合は、ステートマシンの分割を行う。すなわち、分割部２３ａは、設計値を基準値で除算した値を切り上げた値と同じ数のステートを有するメインステートマシンを生成する。また、分割部２３ａは、ステートマシンが有するステートの数をメインステートマシンが有するステートの数で除算した値を切り上げた値と同じ数のステートを有するサブステートマシンを生成する。
【００８０】
なお、分割部２３ａがステートマシンを分割する処理については、分割部２３が実行する処理と同様の処理によって実現されるものとし、以下の説明を省略する。
【００８１】
次に、図１８を用いて、動作合成装置１ａが実行する処理の流れの一例を説明する。図１８は、実施例２に係る動作合成装置が実行する処理の流れを説明するフローチャートである。まず、動作合成装置１ａは、設定値記憶部１１から、設計値ｄとステートマシンのステート数ｎを取得し（ステップＳ２０１）、基準値記憶部１０ａから、基準値ｋを取得する（ステップＳ２０２）。そして、動作合成装置１ａは、設計値ｄを基準値ｋで除算した値が１よりも大きく、かつ、ｄをｋで除算した値でｎを除算した値を切り上げた値が所定の値（４）以上となるか否かを判定する（ステップＳ２０３）。
【００８２】
そして、動作合成装置１ａは、ステップＳ２０３の条件を満たす場合（ステップＳ２０３：Ｙｅｓ）、すなわち、設計値が基準値をこえ、かつ、サブステートマシンのステート数が所定の閾値以上となる場合は、以下の処理を実行する。すなわち、動作合成装置１ａは、ステートマシンの分割を要すると判定し（ステップＳ２０４）、メインステートマシンのステート数を算出する（ステップＳ２０５）。具体的には、動作合成装置１ａは、ｄ／ｋを切り上げた値をメインステートマシンのステート数ＭａｉｎＳＴ＿ｎｕｍに設定する。
【００８３】
また、動作合成装置１ａは、サブステートマシンのステート数を算出する（ステップＳ２０６）。具体的には、動作合成装置１ａは、ｎをメインステートマシンのステート数ＭａｉｎＳＴ＿ｎｕｍで除算した値を切り上げた値をＳｕｂＳＴ＿ｎｕｍに設定する。そして、動作合成装置１ａは、ステートマシンを分割するステートマシン分割処理を実行し（ステップＳ２０７）、処理を終了する。一方、動作合成装置１ａは、ステップＳ２０３の条件を満たさない場合（ステップＳ２０３：Ｎｏ）、すなわち、設定値が基準値を超えない場合、または、サブステートマシンのステート数が所定の値より小さい場合は、以下の処理を実行する。すなわち、動作合成装置１ａは、ステートマシンの分割が不要と判定し（ステップＳ２０８）、処理を終了する。
【００８４】
[実施例２の効果]
このように、動作合成装置１ａは、設計値を基準値で除算した値でステートマシンが有するステートの数を除算した値が所定の閾値以上となる場合にのみ、ステートマシンの分割を行う。すなわち、動作合成装置１ａは、サブステートマシンのステートの数が所定の値以上となる場合には、ステートマシンの分割を行うと判定する。そして、動作合成装置１ａは、設計値を基準値で除算した値を切り上げた値と同じ数のステートを有するメインステートマシンを生成する。また、動作合成装置１ａは、ステートマシンが有するステートの数をメインステートマシンが有するステートの数で除算した値を切り上げた値と同じ数のステートを有するサブステートマシンを生成する。
【００８５】
このため、動作合成装置１ａは、不要なステートマシンの分割を不要とするので、回路設計にかかる時間をさらに短縮することができる。また、動作合成装置１ａは、不要なステートマシンの分割により、分割後のステートマシンがタイミング上問題となるといった不具合を軽減することができる。
【００８６】
また、動作合成装置１ａは、回路が所定を完了するまでの期間であるレイテンシの値を設計値および基準値とする。ここで、ステートマシンが有するステートの数は、レイテンシの値に基づいて推定できる。このため、動作合成装置１ａは、レイテンシの値を推定値および基準値として比較することで、ステートマシンのＲＴＬが生成される前に、ステートマシンの分割が必要か否かを判定できるので、回路設計にかかる時間をさらに短縮できる。
【００８７】
また、動作合成装置１ａは、回路が処理を完了するまでに実行する演算の回数であるオペレーションの数を設計値および基準値とする。ここで、ステートマシンが有するステートの数は、オペレーションの数を用いて推定できる。このため、動作合成装置１ａは、ステートマシンのＲＴＬが生成される前に、ステートマシンの分割が必要か否かを判定できるので、回路設計にかかる時間をさらに短縮できる。
【００８８】
ここで、ｆａｎｏｕｔ数が多い場合は、配線が長くなり、若しくは、参照先のＦＦが増加するため、バッファが設置される結果、ステートマシンがタイミング上問題となる恐れがある。しかしながら、動作合成装置１ａは、ステートマシンが有するステートの参照回数であるｆａｎｏｕｔ数を設計値および基準値とする。この結果、動作合成装置１ａは、ステートマシンのｆａｎｏｕｔ数が基準値を超える場合、ステートマシンがタイミング上問題となると判定し、ステートマシンの分割を行うので、分割後の各ステートマシンのｆａｎｏｕｔ数を削減する。このため、動作合成装置１ａは、ステートマシンが動作タイミング上問題となるのを防ぐことができる。
【実施例３】
【００８９】
上述した実施例１、２では、動作記述から生成されたステートマシンを、基準値と設計値との値に基づく数のステートを有するメインステートマシンとサブステートマシンに分割する動作合成装置１、１ａについて説明した。しかしながら、実施形態は、これに限定されるものではない。以下、実施例３として、動作合成装置が実行する処理の他の例を説明する。
【００９０】
例えば、実施例３に係る動作合成装置１ｂは、ｆａｎｏｕｔ数を基準値として記憶し、ＲＴＬからｆａｎｏｕｔ数を設定値として取得すると、基準値と設定値とを比較する。そして、動作合成装置１ｂは、設定値が基準値を超える場合には、設定値の値が基準値よりも小さくなるまで、ステートマシンを順次分割してもよい。
【００９１】
図１９は、実施例３に係る動作合成装置の機能構成の一例を説明する図である。図１９に示す例では、動作合成装置１ｂは、基準値記憶部１０ｂ、設定値記憶部１１、分割結果記憶部１２、入力部２０、動作合成部２１、判定部２２ｂ、分割部２３ｂ、出力部２４を有する。なお、以下の説明では、実施例１、２と同様の機能を発揮するものについては、同一の符号を付し、以下の説明を省略する。
【００９２】
基準値記憶部１０ｂは、予め設定される基準値として、ｆａｎｏｕｔ数を記憶する。判定部２２ｂは、設定値記憶部１１に記憶されたＲＴＬを解析し、ステートマシンの参照先の数を計数することで、ｆａｎｏｕｔ数を特定する。そして、判定部２２ｂは、特定したｆａｎｏｕｔ数、すなわち設定値が、基準値記憶部１０ｂに記憶された基準値を超える場合は、設定値記憶部１１に格納された情報を分割部２３ｂに出力する。一方、判定部２２ｂは、設定値が基準値を超えない場合は、設定値記憶部１１に格納された情報を出力部２４に出力する。
【００９３】
分割部２３ｂは、設定値が基準値を超える場合は、設定値が基準値よりも小さくなるまでステートマシンの分割を行う。より具体的には、分割部２３ｂは、ステートマシンを同程度のステート数を有する２つのサブステートマシンに分割するとともに、サブステートマシン間の遷移を示す１つのメインステートマシンとに分割する。そして、分割部２３ｂは、サブステートマシンのｆａｎｏｕｔ数を計数し、係数したｆａｎｏｕｔ数が基準値を超える場合には、生成した各サブステートマシンをそれぞれ２つのサブステートマシンに分割する。また、分割部２３ｂは、分割したサブステートマシンのｆａｎｏｕｔ数を計測し、ｆａｎｏｕｔ数が基準値を超える場合は、さらに各サブステートマシンを分割する。
【００９４】
以下、図２０を用いて、分割部２３ｂがステートマシンをメインステートマシンとサブステートマシンとに分割する処理の一例を説明する。図２０は、実施例３に係る動作合成装置がステートマシンを分割する処理の例を説明する図である。なお、図２０に示す例では、図７と同様に、メインステートマシンが有するｎ個のステートであるＳＴ１〜ＳＴｎと、各ステートの遷移を示す矢印でステートマシンを表した。
【００９５】
例えば、分割部２３ｂは、図２０の（Ｘ）に示すステートＳＴ１〜ＳＴｎを有するステートマシンのＲＴＬを取得する。かかる場合、分割部２３ｂは、初回の分割処理として、ステートマシンを、２つのステートを有するメインステートマシンと、ステートマシンを２つに分割したサブステートマシンとに分割する。
【００９６】
例えば、分割部２３ｂは、ステートマシンをステートＳＴ１〜ＳＴｎ／２までのステートと、ステートＳＴｎ／２＋１〜ＳＴｎまでのステートとに分割する。また、分割部２３ｂは、ステートＳＴｎ／２からステートＳＴｎ／２＋１へ遷移する遷移条件Ｂを特定し、ステートＳＴｎからステートＳＴ１へ遷移する遷移条件Ｄを特定する。そして、分割部２３ｂは、２つのステートを有するメインステートマシンを生成し、メインステートマシンが有するステート間の遷移条件として遷移条件Ｂおよび遷移条件Ｄを設定する。
【００９７】
また、分割部２３ｂは、ステートＳＴ１〜ＳＴｎ／２までのステートに、アイドルステートを追加する。また、分割部２３ｂは、遷移条件ＤでアイドルステートからステートＳＴ１に遷移し、遷移条件ＢでステートＳＴｎ／２からアイドルステートに遷移するよう、ステートＳＴ１、ＳＴｎ／２の遷移条件と遷移先ステートとを設定する。そして、分割部２３ｂは、ステートＳＴ１〜ＳＴｎ／２の名称を、Ｓｕｂ１＿ＳＴ１〜Ｓｕｂ１＿ＳＴｎ／２に変更する。
【００９８】
また、分割部２３ｂは、ステートＳＴｎ／２〜ＳＴｎまでのステートに、アイドルステートを追加する。また、分割部２３ｂは、遷移条件ＢでアイドルステートからステートＳＴｎ／２に遷移し、遷移条件ＤでステートＳＴｎからアイドルステートに遷移するよう、ステートＳＴｎ／２、ＳＴｎの遷移条件と遷移先ステートとを設定する。そして、分割部２３ｂは、ステートＳＴｎ／２＋１〜ＳＴｎの名称を、Ｓｕｂ２＿ＳＴ１〜Ｓｕｂ２＿ＳＴｎ／２に変更する。
【００９９】
この結果、分割部２３ｂは、図２０中（Ｘ）に示すように、遷移条件ＢでＭａｉｎ＿ＳＴ１からＭａｉｎ＿ＳＴ２にステートが遷移し、遷移条件ＤでＭａｉｎ＿ＳＴ２からＭａｉｎ＿ＳＴ１にステートが遷移するメインステートマシンを生成する。また、分割部２３ｂは、遷移条件ＤでアイドルステートからステートＳｕｂ１＿ＳＴ１にステートが遷移し、遷移条件ＢでＳｕｂ１＿ＳＴｎ／２からアイドルステートにステートが遷移するサブステートマシンを生成する。また、分割部２３ｂは、遷移条件ＢでアイドルステートからステートＳｕｂ２＿ＳＴ１にステートが遷移し、遷移条件ＤでＳｕｂ２＿ＳＴｎ／２からアイドルステートにステートが遷移するサブステートマシンを生成する。
【０１００】
すなわち、分割部２３ｂは、遷移条件Ｂでステートの遷移が始まり、遷移要件Ｄでステートの遷移が停止するサブステートマシンと、遷移条件Ｄでステートの遷移が始まり、遷移要件Ｂでステートの遷移が停止するサブステートマシンとを生成する。また、分割部２３ｂは、遷移条件Ｂと遷移条件Ｄでステートが変化するメインステートマシンを生成する。
【０１０１】
また、分割部２３ｂは、生成した各サブステートマシンのｆａｎｏｕｔ数を計数し、係数したｆａｎｏｕｔ数、すなわち設計値が基準値を超えるか否かを判定する。そして、分割部２３ｂは、設計値が基準値を超える場合は、生成した各サブステートマシンをさらに分割する。
【０１０２】
例えば、図２０に示す例では、ステートＳＴｎ／４からステートＳＴｎ／４＋１への遷移条件は、遷移条件Ａであり、ステートＳＴ３ｎ／４からステートＳＴ３ｎ／４＋１への遷移条件は、遷移条件Ｃである。かかる場合、分割部２３ｂは、メインステートマシンのステート数を倍にし、遷移条件Ａ〜Ｄでステートが順次遷移するメインステートマシンを新たに生成する。
【０１０３】
また、分割部２３ｂは、ステートマシンを４つのグループに分割する。例えば、分割部２３ｂは、ステートＳＴ１〜ＳＴｎ／４までのステートと、ステートＳＴｎ／４＋１〜ＳＴｎ／２までのステートと、ステートＳＴｎ／４＋１〜ＳＴ３ｎ／４までのステートと、ステートＳＴ３ｎ／４＋１〜ＳＴｎまでのステートとに分割する。そして、分割部２３ｂは、分割した各グループにアイドルステートを追加した４つのサブステートマシンを生成し、特定した遷移条件Ａ〜Ｄで、それぞれ個別のサブステートマシンがステートの遷移を開始するように遷移先条件と遷移先ステートとを設定する。
【０１０４】
この結果、分割部２３ｂは、図２０中（Ｚ）に示すように、遷移条件ＡでＭａｉｎ＿ＳＴ１からＭａｉｎ＿ＳＴ２にステートが遷移し、遷移条件ＢでＭａｉｎ＿ＳＴ２からＭａｉｎ＿ＳＴ３にステートが遷移するメインステートマシンを生成する。また、分割部２３ｂは、遷移条件ＣでＭａｉｎ＿ＳＴ３からＭａｉｎ＿ＳＴ４にステートが遷移し、遷移条件ＤでＭａｉｎ＿ＳＴ４からＭａｉｎ＿ＳＴ１にステートが遷移するメインステートマシンを生成する。
【０１０５】
また、分割部２３ｂは、遷移条件ＤでアイドルステートからステートＳｕｂ１＿ＳＴ１にステートが遷移し、遷移条件ＡでＳｕｂ１＿ＳＴｎ／４からアイドルステートにステートが遷移するサブステートマシンを生成する。また、分割部２３ｂは、遷移条件ＡでアイドルステートからステートＳｕｂ２＿ＳＴ１にステートが遷移し、遷移条件ＢでＳｕｂ２＿ＳＴｎ／４からアイドルステートにステートが遷移するサブステートマシンを生成する。また、分割部２３ｂは、遷移条件ＢでアイドルステートからステートＳｕｂ３＿ＳＴ１にステートが遷移し、遷移条件ＣでＳｕｂ３＿ＳＴｎ／４からアイドルステートにステートが遷移するサブステートマシンを生成する。また、分割部２３ｂは、遷移条件ＣでアイドルステートからステートＳｕｂ４＿ＳＴ１にステートが遷移し、遷移条件ＤでＳｕｂ４＿ＳＴｎ／４からアイドルステートにステートが遷移するサブステートマシンを生成する。
【０１０６】
また、分割部２３ｂは、サブステートマシンのｆａｎｏｕｔ数が基準値以下となるまで、上述した処理を繰り返し実行し、メインステートマシンを順次分割する。この結果、動作合成装置１ｂは、基準値を満たすステートマシンを生成できるので、ステートマシンがタイミング上問題となるのを防ぐことができる。
【０１０７】
次に、図２１を用いて、動作合成装置１ｂが実行する処理の流れの一例を説明する。図２１は、実施例３に係る動作合成装置が実行する処理の流れを説明するフローチャートである。まず、動作合成装置１ｂは、設定値記憶部１１から、ステートマシンのステートに対するｆａｎｏｕｔ数である設計値ｄとステートマシンのステート数ｎを取得し（ステップＳ３０１）、基準値記憶部１０ｂから、基準値ｋを取得する（ステップＳ３０２）。そして、動作合成装置１ｂは、設計値ｄが基準値ｋよりも大きいか否かを判定する（ステップＳ３０３）。
【０１０８】
そして、動作合成装置１ｂは設計値ｄが基準値ｋよりも大きい場合は（ステップＳ３０３：Ｙｅｓ）、ステートマシンの分割を要すると判定し（ステップＳ３０４）、メインステートマシンのステート数を算出する（ステップＳ３０５）。具体的には、動画合成装置１ｂは、メインステートマシンのステート数の初期値としてＭａｉｎＳＴ＿ｎｕｍ＝２を設定する。また、動作合成装置１ｂは、ステップＳ３０５の処理が２回目以降である場合は、メインステートマシンのステート数を２倍にする。
【０１０９】
続いて、動作合成装置１ｂは、サブステートマシンのステート数を算出する（ステップＳ３０６）。具体的には、動作合成装置１ｂは、サブステートマシンのステート数ＳｕｂＳＴ＿ｎｕｍとして、ステートマシンが有するステート数ｎをメインステートマシンのステート数ＭａｉｎＳＴ＿ｎｕｍで除算した値を切り上げた値を設定する。そして、動作合成装置１ｂは、図１６に示したステートマシン分割処理を実行する（ステップＳ３０７）。
【０１１０】
ここで、動作合成装置１ｂは、分割結果となるサブステートマシンが有するステートの参照先の数ｄｄを算出し（ステップＳ３０８）、算出した数ｄｄがｋよりも大きいか否かを判定する（ステップＳ３０９）。そして、動作合成装置１ｂは、算出した数ｄｄがｋ以下となる場合は（ステップＳ３０９：Ｎｏ）、処理を終了する。一方、動作合成装置１ｂは、算出した数ｄｄがｋよりも多い場合は（ステップＳ３０９：Ｙｅｓ）、ステップＳ３０４を再度実行する。また、動作合成装置１ｂは、設計値ｄの値が基準値ｋの値以下となる場合は（ステップＳ３０３：Ｎｏ）、ステートマシンの分割を不要と判定し（ステップＳ３１０）、処理を終了する。
【０１１１】
[実施例３の効果]
上述したように、動作合成装置１ｂは、設計値が基準値を超える場合は、設計値が基準値以下となるまで、ステートマシンを順次分割する。このため、動作合成装置１ｂは、動作記述から生成されたステートマシンがタイミング上問題となるのを防ぐとともに、回路設計に係る時間を短縮できる。
【実施例４】
【０１１２】
上述した実施例１〜３では、設計値が基準値を超える場合は、ステートマシンをメインステートマシンとサブステートマシンとに分割する動作合成装置１〜１ｂについて説明した。しかしながら、実施形態は、これに限定されるものではない。以下、実施例４として、動作合成装置が実行する処理の他の例を説明する。
【０１１３】
例えば、実施例４に係る動作合成装置１ｃは、ＲＴＬに基づく設計値と予め定められた基準値とを比較する。そして、動作合成装置１ｃは、設計値が基準値を超える場合は、ステートマシンが有するステートの参照先となるフリップフロップを追加する。この結果、動作合成装置１ｃは、データパス部がステートを参照する際の参照先となるフリップフロップを分散させることができるので、参照先を駆動させるバッファを削減する結果、ステートマシンが動作タイミング上問題となるのを防ぐことができる。
【０１１４】
図２２は、実施例４に係る動作合成装置の機能構成の一例を説明する図である。図２２に示す例では、動作合成装置１ｃは、基準値記憶部１０ｃ、設定値記憶部１１、分割結果記憶部１２ａ、入力部２０、動作合成部２１ａ、判定部２２ｃ、分割部２３ｃ、出力部２４を有する。なお、以下の説明では、実施例１〜３と同様の機能を発揮するものについては、同一の符号を付し、以下の説明を省略する。
【０１１５】
基準値記憶部１０ｃは、基準値記憶部１０〜１０ｂと同様に、予め定められた基準値を記憶する。例えば、基準値記憶部１０ｃは、回路が処理を完了するまでのレイテンシまたは処理を完了するまでに実行する演算の回数であるオペレーションの数を基準値として記憶する。また、他の例では、基準値記憶部１０ｃは、ステートマシンが有するステート数またはステートマシンの各ステートを参照する回数であるｆａｎｏｕｔ数を基準値として記憶する。
【０１１６】
分割結果記憶部１２ａは、分割部２３ｃによって追加されたフリップフロップの情報を記憶する。例えば、図２３は、実施例４に係る分割結果記憶部が記憶する情報の一例を説明する図である。例えば、分割結果記憶部１２ａは、図２３に示すように、追加されたフリップフロップであるコピーＦＦのインデックスとして「cpff_id[n][c]」を記憶する。
【０１１７】
図２２に戻り、説明を続ける。動作合成部２１ａは、動作合成部２１と同様に、動作記述からＲＴＬを動作合成する。また、動作合成部２１ａは、後述するように、分割部２３ｃによってコピーＦＦのインデックスが分割結果記憶部１２ａに登録された場合は、コピーＦＦのインデックスを用いて、ステートの参照先を分割させたＲＴＬを生成する。
【０１１８】
例えば、第１のコピーＦＦのインデックスと第２のコピーＦＦのインデックスが分割結果記憶部１２ａに登録される。かかる場合、動作合成部２１ａは、ステートマシンが有するステートのうち半分のステートの参照先インデックスを、第１のコピーＦＦのインデックスに変更し、残りのステートの参照先インデックスを第２のコピーＦＦのインデックスに変更する。
【０１１９】
ここで、図２４は、実施例４に係る動作合成装置が参照先を分散させる処理の一例を説明する図である。例えば、図２４中の（ａ）に示す例では、ステートマシンのステートの参照先となるＦＦは、ステートマシンを参照する６つの回路と接続される。かかる場合、動作合成装置１ｃは、図２４中（ｂ）に示すように、参照先となるＦＦを追加し、各ステートの参照先を分散させる。この結果、動作合成装置１ｃは、各ＦＦに接続される回路の数を３つに削減できるので、信号を補償するバッファを不要とする結果、ステートマシンが動作タイミング上問題となるのを防ぐことができる。
【０１２０】
図２２に戻り、判定部２２ｃは、判定部２２〜２２ｂと同様に、設定値が基準値を超えるか否かを判定する。例えば、判定部２２ｃは、設定値記憶部１１に記憶されたＲＴＬを解析し、基準値に対応する種別の設定値を特定する。そして、判定部２２ｃは、特定した設定値が基準値を超える場合は、設定値記憶部１１に格納された情報を分割部２３ｃに出力し、設定値が基準値を超えない場合は、設定値記憶部１１に格納された情報を出力部２４に出力する。
【０１２１】
分割部２３ｃは、設定値が基準値を超える場合は、ステートマシンのステートの参照先となるフリップフロップを追加する。具体的には、分割部２３ｃは、設定値を基準値で除算した値を切り上げた値を算出する。そして、分割部２３ｃは、算出した値と同じ数のコピーＦＦのインデックスを生成し、生成したコピーＦＦのインデックスを分割結果記憶部１２ａに登録する。この結果、分割部２３ｃは、ステートマシンのステートの参照先を分割することができる。
【０１２２】
次に、図２５を用いて、動作合成装置１ｃが実行する処理の流れの一例を説明する。図２５は、実施例４に係る動作合成装置が実行する処理の流れを説明するフローチャートである。なお、図２５に示す例では、コピーＦＦを示す変数ｃｐｆｆ＿ｉｄの初期値が「０」に設定されているものとする。
【０１２３】
まず、動作合成装置１ｃは、設定値記憶部１１から、設計値ｄとステートマシンのステート数ｎを取得し（ステップＳ４０１）、基準値記憶部１０ｃから、基準値ｋを取得する（ステップＳ４０２）。そして、動作合成装置１ｃは、設計値ｄを基準値ｋで除算した値が１よりも大きいか否かを判定する（ステップＳ４０３）。
【０１２４】
そして、動作合成装置１ｃは設計値ｄを基準値ｋで除算した値が１よりも大きい場合は（ステップＳ４０３：Ｙｅｓ）、ステートマシンの分割を要すると判定し（ステップＳ４０４）、コピーＦＦの数を算出する（ステップＳ４０５）。具体的には、動画合成装置１ｃは、コピーＦＦの数として、設計値ｄを基準値ｋで除算した値を切り上げた値をコピーＦＦの数であるＣｏｐｙＦＦ＿ｎｕｍとする。
【０１２５】
続いて、動作合成装置１ｃは、ステートマシンのステート数ｎをコピーＦＦの数で除算した値を算出する（ステップＳ４０６）。具体的には、動作合成装置１ｃは、ｎをＣｏｐｙＦＦ＿ｎｕｍで除算した値を切り上げた値をＳＴ＿ｎｕｍとする。また、動作合成装置１ｃは、設計値記憶部１１に登録されたステートマシンのステートを、先頭からＳＴ＿ｎｕｍ個取得する（ステップＳ４０７）。そして、動作合成装置１ｃは、取得したステートの参照先インデックスをコピーＦＦのインデックスに書換える（ステップＳ４０８）。例えば、動作合成装置１ｃは、取得したステートの参照先インデックスを「ｃｐｆｆ＿ｉｄ＝０」に書換える。
【０１２６】
また、動作合成装置１ｃは、ｃｐｆｆ＿ｉｄの値がＣｏｐｙＦＦ＿ｎｕｍよりも小さいか否かを判定する（ステップＳ４０９）。そして、動作合成装置１ｃは、ｃｐｆｆ＿ｉｄの値がＣｏｐｙＦＦ＿ｎｕｍの値以上となる場合は（ステップＳ４０９：Ｎｏ）、処理を終了する。一方、動作合成装置１ｃは、ｃｐｆｆ＿ｉｄの値がＣｏｐｙＦＦ＿ｎｕｍよりも小さい場合は（ステップＳ４０９：Ｙｅｓ）、ｃｐｆｆ＿ｉｄの値を１つインクリメントし（ステップＳ４１０）、ステップＳ４０７を再度実行する。また、動作合成装置１ｃは、設定値ｄを基準値ｋで除算した値が１以下となる場合は（ステップＳ４０３：Ｎｏ）、ステートマシンの分割が不要であると判定し（ステップＳ４１１）、処理を終了する。
【０１２７】
[実施例４の効果]
上述したように、動作合成装置１ｃは、設計値と基準値とを比較し、設計値が基準値を超える場合は、ステートマシンのステートの参照先となるフリップフロップを追加した回路情報を出力する。このため、動作合成装置１ｃは、ステートマシンが動作タイミング上問題となるのを防ぎつつ、回路設計にかかる時間を短縮することができる。また、ステートマシンが生成される前であっても、データパス部が参照先とするＦＦの数を設定することができる。このため、動作合成装置１ｃは、レイテンシの値やオペレーション数の数等、ステートマシンを生成する前に比較可能な基準値と設定値とを用いた場合は、ステートマシン回路設計にかかる時間をさらに短縮できる。
【０１２８】
また、動作合成装置１ｃは、設計値を基準値で除算した値に応じた数のフリップフロップを追加した回路情報を出力する。このため、動作合成装置１ｃは、ステートマシンのステートの参照先を、基準値に対する設計値の割合に応じた数に分割させることができるので、ステートマシンがタイミング上問題となるのを防ぐことができる。
【実施例５】
【０１２９】
これまで本発明の実施例について説明したが、実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例５として他の実施例を説明する。
【０１３０】
［ステートマシンを分割する処理について］
上述した説明では、動作合成装置１〜１ｂは、ステートマシンをメインステートマシンとサブステートマシンとに分割した。ここで、動作合成装置１〜１ｂがステートマシンを分割する処理は、上述した処理以外にも、任意の処理を適用して良い。すなわち、動作合成装置１〜１ｂは、ステートマシンの分割手法に係らず、ＲＴＬのタイミング解析を行わずとも、設定値と基準値の比較結果からステートマシンが動作タイミング上問題となるか否かを判断する。そして、動作合成装置１〜１ｂは、設定値と基準値の比較結果からステートマシンが動作タイミング上問題となる場合は、ステートマシンを分割するので、回路設計に係る時間を短縮できる。
【０１３１】
［基準値と設定値について］
上述した実施例１〜４では、レイテンシの値、オペレーション数、ステートマシンのステート数、ステートに対応するｆａｎｏｕｔ数を基準値および設定値とする例について説明した。かかる基準値と設定値は、あくまで一例であり、動作合成装置１〜１ｃは、ＲＴＬのタイミング解析前にステートマシンが動作タイミング上問題となるか否かを判定できるのであれば、任意の情報を基準値および設定値として採用することができる。すなわち、実施例１〜４に係る動作合成装置１〜１ｃは、レイテンシの値、オペレーション数、ステートマシンのステート数、ステートに対応するｆａｎｏｕｔ数を基準値および設定値としてもよい。
【０１３２】
また、動作合成装置１〜１ｃは、複数種別の情報を組み合わせた基準値および設定値を用いて、ステートマシンが動作タイミング上問題となるか否かを判定してもよい。また、基準値および設定値は、ユーザが外部から任意の値を設定するだけでなく、回路デザインの動作周波数や、テクノロジライブラリの種類から推定される値であってもよい。
【０１３３】
［基準値について］
上述した動作合成装置１〜１ｃに設定する基準値は、任意の値を設定することができる。例えば、利用者は、回路の設計、用途、配線の内容等に応じて、随時基準値を変更することができる。また、係る基準値の値は、回路に要求される機能、設計、用途、配線等の内容に応じて、自動的に定められる値であってもよく、利用者が任意に設定する値であってもよい。
【０１３４】
［機能構成について］
上述した処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１３５】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【０１３６】
さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１３７】
[ハードウェア構成]
図２６は、実施例１に係る動作合成装置として動作するコンピュータのハードウェア構成を示す図である。図２６が示すように、コンピュータ３００は、各種演算処理を実行するＣＰＵ（Central  Processing  Unit）３１０、ＲＯＭ（Read  Only  Memory）３２０、ＨＤＤ（Hard  Disk  Drive）３３０、ＲＡＭ（Random  Access  Memory）３４０を有する。各装置３１０〜３４０は、バス３５０で接続される。
【０１３８】
ＨＤＤ３３０は、上述した判定部２２〜２２ｃ、分割部２３〜２３ｃと同様の処理をコンピュータ３００に実行させる分割プログラム３３０ａを記憶する。ＣＰＵ３１０は、ＨＤＤ３３０に記憶された分割プログラム３３０ａを読み出して、ＲＡＭ３４０に展開して実行することで、各種の処理を行う。
【０１３９】
なお、上記の分割プログラム３３０ａは、必ずしもＨＤＤ３３０に記憶されている必要はない。例えば、コンピュータ３００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ３００が読み出して実行するようにしてもよい。コンピュータ３００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤディスク、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、ＬＡＮ（Local  Area  Network）等に接続された装置にこのプログラムを記憶させておき、コンピュータ３００がこれらからプログラムを読み出して実行するようにしてもよい。
【符号の説明】
【０１４０】
１、１ａ〜１ｃ  動作合成装置
１０、１０ａ〜１０ｃ  基準値記憶部
１１  設定値記憶部
１２、１２ａ  分割結果記憶部
２０  入力部
２１、２１ａ  動作合成部
２２、２２ａ〜２２ｃ  判定部
２３、２３ａ〜２３ｃ  分割部
２４  出力部
【図１】
2016122299.tif 000003
【図２】
2016122299.tif 000004
【図３】
2016122299.tif 000005
【図４】
2016122299.tif 000006
【図５】
2016122299.tif 000007
【図６】
2016122299.tif 000008
【図７】
2016122299.tif 000009
【図８】
2016122299.tif 000010
【図９】
2016122299.tif 000011
【図１０】
2016122299.tif 000012
【図１１】
2016122299.tif 000013
【図１２】
2016122299.tif 000014
【図１３】
2016122299.tif 000015
【図１４】
2016122299.tif 000016
【図１５】
2016122299.tif 000017
【図１６】
2016122299.tif 000018
【図１７】
2016122299.tif 000019
【図１８】
2016122299.tif 000020
【図１９】
2016122299.tif 000021
【図２０】
2016122299.tif 000022
【図２１】
2016122299.tif 000023
【図２２】
2016122299.tif 000024
【図２３】
2016122299.tif 000025
【図２４】
2016122299.tif 000026
【図２５】
2016122299.tif 000027
【図２６】
2016122299.tif 000028