(57)【特許請求の範囲】
【請求項１】
半導体集積回路の動作を単一のプロセスとして記述する動作レベル記述を受け付ける受付部、
当該受け付けられた動作レベル記述を、当該動作レベル記述に含まれる所定のプラグマに基づいて、複数のプロセスのそれぞれとしての、データの入力段階記述、処理の本体段階記述、データの出力段階記述に分割する分割部、
当該入力段階記述、当該本体段階記述、当該出力段階記述のそれぞれについて入出力並びに演算のタイミングをスケジュールするスケジュール部、
当該入力段階記述、当該本体段階記述、当該出力段階記述、及び、当該タイミングに基づいて、半導体集積回路の構成、配置、配線を記述するレジスタ転送レベル記述を生成する生成部、
を備え、
前記生成部は、
（ａ）当該入力段階記述の出力のタイミングと当該本体段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置し、
（ｂ）当該本体段階記述の出力のタイミングと当該出力段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置する、
ことを特徴とする動作合成装置。
【請求項２】
請求項１に記載の動作合成装置であって、
前記生成部は、当該配置されたレジスタ回路の入出力のタイミングが重複しないレジスタ回路が共有されるように再配置する、
ことを特徴とする動作合成装置。
【請求項３】
請求項１又は２に記載の動作合成装置であって、
前記スケジュール部は、当該動作レベル記述に含まれる所定のプラグマに基づいてスケジュールする、
ことを特徴とする動作合成装置。
【請求項４】
請求項１又は２に記載の動作合成装置であって、
前記スケジュール部は、当該動作レベル記述に含まれる所定のコメントに基づいてスケジュールする、
ことを特徴とする動作合成装置。
【請求項５】
請求項１又は２に記載の動作合成装置であって、
前記受付部は、当該動作レベル記述に対する付加情報をさらに受け付け、
前記スケジュール部は、当該付加情報に基づいてスケジュールする、
ことを特徴とする動作合成装置。
【請求項６】
受付部、分割部、スケジュール部、生成部を備える動作合成装置が実行する動作合成方法であって、
前記受付部が、半導体集積回路の動作を単一のプロセスとして記述する動作レベル記述を受け付ける受付ステップ、
前記分割部が、当該受け付けられた動作レベル記述を、当該動作レベル記述に含まれる所定のプラグマに基づいて、複数のプロセスのそれぞれとしての、データの入力段階記述、処理の本体段階記述、データの出力段階記述に分割する分割ステップ、
前記スケジュール部が、当該入力段階記述、当該本体段階記述、当該出力段階記述のそれぞれについて入出力並びに演算のタイミングをスケジュールするスケジュールステップ、
前記生成部が、当該入力段階記述、当該本体段階記述、当該出力段階記述、及び、当該タイミングに基づいて、半導体集積回路の構成、配置、配線を記述するレジスタ転送レベル記述を生成する生成ステップ、
を備え、
前記生成ステップでは、前記生成部が、
（ａ）当該入力段階記述の出力のタイミングと当該本体段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置し、
（ｂ）当該本体段階記述の出力のタイミングと当該出力段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置する、
ことを特徴とする動作合成方法。
【請求項７】
コンピュータを、
半導体集積回路の動作を単一のプロセスとして記述する動作レベル記述を受け付ける受付部、
当該受け付けられた動作レベル記述を、当該動作レベル記述に含まれる所定のプラグマに基づいて、複数のプロセスのそれぞれとしての、データの入力段階記述、処理の本体段階記述、データの出力段階記述に分割する分割部、
当該入力段階記述、当該本体段階記述、当該出力段階記述のそれぞれについて入出力並びに演算のタイミングをスケジュールするスケジュール部、
当該入力段階記述、当該本体段階記述、当該出力段階記述、及び、当該タイミングに基づいて、半導体集積回路の構成、配置、配線を記述するレジスタ転送レベル記述を生成する生成部、
として機能させるプログラムであって、
前記生成部は、
（ａ）当該入力段階記述の出力のタイミングと当該本体段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置し、
（ｂ）当該本体段階記述の出力のタイミングと当該出力段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置する、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路の動作レベル記述からレジスタ転送レベル記述を生成する際に、レジスタの数を抑制するのに好適な動作合成装置、動作合成方法及びこれらをコンピュータ上で実現するためのプログラムに関する。
【背景技術】
【０００２】
コンピュータ技術の進歩により、ＣＡＤ（Ｃｏｍｐｕｔｅｒ−Ａｉｄｅｄ  Ｄｅｓｉｇｎ）システムを使用して論理回路の設計、解析および評価等を行うのが一般的になっている。このＣＡＤシステムは、例えば、動作合成ツールや論理合成ツールを備える。
【０００３】
動作合成ツールを使用して動作合成を行う際には、入力ポートや変数のビット幅等のＨ／Ｗ化に必要な情報を含んだ、動作レベル記述言語で書かれた記述を用意する必要がある。動作合成ツールは、動作レベル記述言語で書かれた記述に基づいて動作合成することにより、ＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ（レジスタ転送レベル））記述言語による記述を出力する。動作合成ツールによる動作合成技術は、例えば、特許文献１に開示されている。
【０００４】
以下、特許文献１に開示された動作合成の手順について簡単に説明する。
【０００５】
まず、動作合成ツールは、動作レベル記述言語で書かれた記述の構文解析を行う。続いて、動作合成ツールは、記述中の変数をレジスタ（又はメモリ）で実現する。そして、動作合成ツールは、コントロールデータフローグラフ（以下、ＣＤＦＧとする。）を生成する。
【０００６】
次に、動作合成ツールは、ＣＤＦＧに基づいてリソースバインディングおよびスケジュールを実行する。そして、動作合成ツールは、合成制約である回路周波数や演算器制約に基づいて、演算器、レジスタおよびマルチプレクサ等のマッピングおよびシェアリングを行うことにより回路を合成する。最後に、動作合成ツールは、合成された回路構成を、論理合成ツールに直接入力可能なＲＴＬ記述言語による記述として出力して、動作合成を終了する。
【特許文献１】特開２００７−２７２６７１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
通常、動作記述は、データの入力段階記述、処理の本体記述、データの出力段階記述で構成される。特許文献１に開示された動作合成の手順によって合成された回路では、入力段階で入力されるデータの数、データの出力段階で出力されるデータの数だけのレジスタを用意する必要があった。このため、変数の数が増大すると、その分だけ多くのレジスタを用意する必要があった。
【０００８】
本発明は、上記問題に鑑みてなされたものであり、半導体集積回路の動作レベル記述からレジスタ転送レベル記述を生成する際に、レジスタの数を抑制するのに好適な動作合成装置、動作合成方法及びこれらをコンピュータ上で実現するためのプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明の第１の観点に係る動作合成装置は、受付部、分割部、スケジュール部、生成部を備え、以下のように構成する。
まず、受付部は、半導体集積回路の動作を単一のプロセスとして記述する動作レベル記述を受け付ける。
次に、分割部は、当該受け付けられた動作レベル記述を、当該動作レベル記述に含まれる所定のプラグマに基づいて、複数のプロセスのそれぞれとしての、データの入力段階記述、処理の本体段階記述、データの出力段階記述に分割する。
さらに、スケジュール部は、当該入力段階記述、当該本体段階記述、当該出力段階記述のそれぞれについて入出力並びに演算のタイミングをスケジュールする。
そして、生成部は、当該入力段階記述、当該本体段階記述、当該出力段階記述、及び、当該タイミングに基づいて、半導体集積回路の構成、配置、配線を記述するレジスタ転送レベル記述を生成する。
また、生成部は、
（ａ）当該入力段階記述の出力のタイミングと当該本体段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置し、
（ｂ）当該本体段階記述の出力のタイミングと当該出力段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置する。
【００１０】
上記目的を達成するために、その他の観点に係る動作合成方法は、受付部、分割部、スケジュール部、生成部を備える動作合成装置が実行する動作合成方法であって、受付ステップ、分割ステップ、スケジュールステップ、生成ステップを備え、以下のように構成する。
すなわち、受付ステップでは、受付部が、半導体集積回路の動作を単一のプロセスとして記述する動作レベル記述を受け付ける。
そして、分割ステップでは、分割部が、当該受け付けられた動作レベル記述を、当該動作レベル記述に含まれる所定のプラグマに基づいて、複数のプロセスのそれぞれとしての、データの入力段階記述、処理の本体段階記述、データの出力段階記述に分割する。
さらに、スケジュールステップでは、スケジュール部が、当該入力段階記述、当該本体段階記述、当該出力段階記述のそれぞれについて入出力並びに演算のタイミングをスケジュールする。
また、生成ステップでは、生成部が、当該入力段階記述、当該本体段階記述、当該出力段階記述、及び、当該タイミングに基づいて、半導体集積回路の構成、配置、配線を記述するレジスタ転送レベル記述を生成する。
さらに、生成ステップでは、生成部が、
（ａ）当該入力段階記述の出力のタイミングと当該本体段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置し、
（ｂ）当該本体段階記述の出力のタイミングと当該出力段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置する。
【００１１】
上記目的を達成するために、その他の観点に係るプログラムは、コンピュータを、受付部、分割部、スケジュール部、生成部として、以下のように機能させる。
まず、受付部は、半導体集積回路の動作を単一のプロセスとして記述する動作レベル記述を受け付ける。
次に、分割部は、当該受け付けられた動作レベル記述を、当該動作レベル記述に含まれる所定のプラグマに基づいて、複数のプロセスのそれぞれとしての、データの入力段階記述、処理の本体段階記述、データの出力段階記述に分割する。
さらに、スケジュール部は、当該入力段階記述、当該本体段階記述、当該出力段階記述のそれぞれについて入出力並びに演算のタイミングをスケジュールする。
そして、生成部は、当該入力段階記述、当該本体段階記述、当該出力段階記述、及び、当該タイミングに基づいて、半導体集積回路の構成、配置、配線を記述するレジスタ転送レベル記述を生成する。
また、生成部は、
（ａ）当該入力段階記述の出力のタイミングと当該本体段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置し、
（ｂ）当該本体段階記述の出力のタイミングと当該出力段階記述の入力のタイミングとが一致する場合、当該出力と当該入力を直接接続し、一致しない場合、当該出力と当該入力の間にレジスタ回路を配置する。
【発明の効果】
【００１２】
本発明によれば、半導体集積回路の動作レベル記述からレジスタ転送レベル記述を生成する際に、レジスタ回路の数を抑制するのに好適な動作合成装置、動作合成方法及びこれらをコンピュータ上で実現するためのプログラムを提供することができる。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照して、本実施形態に係る動作合成装置について説明する。
【００１４】
まず、図１を参照して、本実施形態に係る動作合成装置の構成について説明する。
【００１５】
図１に示すように、動作合成装置１００は、物理的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１３と、ハードディスク装置１４と、入力装置１５と、表示装置１６と、を備える。動作合成装置１００が備える各構成要素はバスを介して接続される。
【００１６】
ＣＰＵ１１は、ハードディスク装置１４に記憶されたプログラムに従って動作合成装置１００全体の動作を制御する。ＣＰＵ１５は、各構成要素とバスを介して接続され制御信号やデータのやりとりをする。
【００１７】
ＲＯＭ１２は、電源投入直後に実行されるＩＰＬ（Ｉｎｉｔｉａｌ  Ｐｒｏｇｒａｍ  Ｌｏａｄｅｒ）を記憶する。ＩＰＬが実行された後、ＣＰＵ１１は、ハードディスク装置１４に記憶されたプログラムをＲＡＭ１３に読み出して実行する。
【００１８】
ＲＡＭ１３は、データやプログラムを一時的に記憶する。ＲＡＭ１３は、ハードディスク装置１４から読み出されたプログラムや、動作合成処理に必要なデータ等を一時記憶する。
【００１９】
ハードディスク装置１４は、ＣＰＵ１１により実行されるプログラムを記憶する。
【００２０】
入力装置１５は、ＣＰＵ１１による制御のもと、動作合成に必要なパラメータ等の入力をユーザから受け付け、また、動作合成開始要求等の要求をユーザから受け付ける。入力装置１５は、例えば、キーボードやマウスから構成される。
【００２１】
表示装置１６は、ＣＰＵ１１による制御のもと、ユーザからのパラメータ等の入力や動作合成開始要求等の要求を受け付けるための画面、動作レベル記述を表示するための画面、レジスタ転送レベル記述を表示するための画面等を表示する。表示装置１６は、例えば、液晶ディスプレイ装置から構成される。
【００２２】
次に、本実施形態に係る動作合成装置１００の基本構成について説明する。
【００２３】
図２は、本実施形態に係る動作合成装置１００の基本構成を示すブロック図である。図２に示すように、動作合成装置１００は、機能的には、受付部２０と、分割部３０と、スケジュール部４０と、生成部５０と、を備える。
【００２４】
受付部２０は、動作レベル記述を受け付ける。受付部２０は、ＣＰＵ１１が、ＲＯＭ１２、ＲＡＭ１３及び入力装置１５と協働することにより実現される。
【００２５】
分割部３０は、動作レベル記述を各処理段階の記述に分割する。具体的には、分割部３０は、ＲＡＭ１３に記憶された動作レベル記述を、データの入力段階記述と、処理の本体段階記述と、データの出力段階記述と、に分割する。分割部３０は、ＣＰＵ１１が、ＲＯＭ１２及びＲＡＭ１３と協働することにより実現される。
【００２６】
スケジュール部４０は、入力段階記述、本体段階記述、出力段階記述のそれぞれについて入出力並びに演算のタイミングをスケジュールする。スケジュール部４０は、ＣＰＵ１１が、ＲＯＭ１２及びＲＡＭ１３と協働することにより実現される。
【００２７】
生成部５０は、入力段階記述、本体段階記述、出力段階記述、及び、タイミングに基づいて、半導体集積回路の構成、配置、配線を記述するＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ（レジスタ転送レベル））記述を生成する。
【００２８】
具体的には、生成部５０は、入力段階記述の出力のタイミングと本体段階記述の入力のタイミングとが一致する場合、出力と入力を直接接続し、一致しない場合、出力と入力の間にレジスタ回路を配置する。また、生成部５０は、本体段階記述の出力のタイミングと出力段階記述の入力のタイミングとが一致する場合、出力と入力を直接接続し、一致しない場合、出力と入力の間にレジスタ回路を配置する。
【００２９】
次に、本実施形態に係る動作合成装置１００が実行する動作合成処理について、図３と図４を参照して説明する。
【００３０】
なお、図３に示すように、動作合成装置１００は、図２に示した基本構成に加え、ＣＤＦＧ（Ｃｏｎｔｒｏｌ  Ｄａｔａ  Ｆｌｏｗ  Ｇｒａｐｈ）生成部３５を更に備えるものとする。また、生成部５０は、処理段階別ＲＴＬ記述生成部５１と、通信路生成部５２と、全ＲＴＬ記述生成部５３と、を備えるものとする。
【００３１】
そして、図３に示すように、動作合成装置１００は、記憶装置１１０が備える動作レベル記述記憶部１１１に記憶された動作レベル記述を動作合成し、求めたＲＴＬ記述を記憶装置１１０が備えるＲＴＬ記述記憶部１１２に格納するものとする。なお、本実施形態では、動作合成装置１００の外部に記憶装置１１０がある構成として説明するが、動作合成装置１００が記憶装置１１０を備える構成でもよい。動作合成装置１００が記憶装置１１０を備える構成では、例えば、ハードディスク装置１４が記憶装置１１０を構成する。
【００３２】
ここで、動作レベル記述は、設計対象の回路動作を、Ｃ言語、Ｃ＋＋言語、あるいはＪＡＶＡ（登録商標）言語等を用いて表現した記述である。なお、動作レベル記述には、各入出力に、基準点からのタイミングがプラグマを用いて指定されているものとする。また、ＲＴＬ記述は、生成された、設計対象の回路をクロック毎の動作にまで具体化した記述である。
【００３３】
図４は、本実施形態に係る動作合成装置１００が実行する動作合成処理を示すフローチャートである。
【００３４】
動作合成装置１００は、例えば、所定の動作レベル記述を動作合成する旨の要求を入力装置１５を介してユーザから受けると、動作合成処理を開始する。
【００３５】
まず、ＣＰＵ１１は、動作合成処理で使用するデータを初期化する（ステップＳ１１）。ＣＰＵ１１は、ＲＡＭ１３に記憶されたデータを初期化する。
【００３６】
ＣＰＵ１１が初期化を完了すると、受付部２０は動作レベル記述を受け付ける（ステップＳ１２）。まず、受付部２０は、ユーザから動作合成対象の動作レベル記述の指定とパラメータの指定とを受け付ける。そして、受付部２０は、ユーザから指定された動作レベル記述を動作レベル記述記憶部１１１から読み出してＲＡＭ１３に記憶するとともに、ユーザから指定されたパラメータをＲＡＭ１３に記憶する。
【００３７】
次に、分割部３０は、動作レベル記述を各処理段階の記述に分割する（ステップＳ１３）。具体的には、分割部３０は、ＲＡＭ１３に記憶された動作レベル記述を、データの入力段階記述と、処理の本体段階記述と、データの出力段階記述と、に分割する。分割部３０は、例えば、動作レベル記述中の入出力ポートの定義部分やプラグマを参照して動作レベル記述を分割する。
【００３８】
次に、ＣＤＦＧ生成部３５は、各処理段階のＣＤＦＧをそれぞれ生成する（ステップＳ１４）。具体的には、ＣＤＦＧ生成部３５は、入力段階記述に基づいて入力処理のＣＤＦＧを生成し、本体段階記述に基づいて本体処理のＣＤＦＧを生成し、出力段階記述に基づいて出力処理のＣＤＦＧを生成する。なお、ＣＤＦＧ生成部３５は、ＣＰＵ１１が、ＲＯＭ１２及びＲＡＭ１３と協働することにより実現される。
【００３９】
次に、スケジュール部４０は、各処理段階の処理についてそれぞれスケジュールする（ステップＳ１５）。具体的には、スケジュール部４０は、入力処理のＣＤＦＧに基づいて入力処理に必要な演算器数とステップ数とを求め、本体処理のＣＤＦＧに基づいて本体処理に必要な演算器数とステップ数とを求め、出力処理のＣＤＦＧに基づいて出力処理に必要な演算器数とステップ数とを求める。なお、スケジュール部４０は、例えば、動作レベル記述中にプラグマとして記述されたタイミングの指定に基づいてスケジュールする。
【００４０】
次に、処理段階別ＲＴＬ記述生成部５１は、各処理段階のＲＴＬ記述を生成する（ステップＳ１６）。具体的には、処理段階別ＲＴＬ記述生成部５１は、入力処理段階の処理のスケジュール結果に基づいて入力処理段階の入力回路に相当するＲＴＬ記述を生成し、本体処理段階の処理のスケジュール結果に基づいて本体処理段階の本体回路に相当するＲＴＬ記述を生成し、出力処理段階の処理のスケジュール結果に基づいて出力処理段階の出力回路に相当するＲＴＬ記述を生成する。
【００４１】
次に、通信路生成部５２は、各処理段階のＲＴＬ記述とスケジュール結果とに基づいて各回路間の通信路を生成する（ステップＳ１７）。通信路生成部５２が実行する通信路生成処理については、図５に示すフローチャートを用いて詳細に説明する。
【００４２】
まず、通信路生成部５２は、回路間で転送されるデータからデータを選択する（ステップＳ２１）。ここで、回路間で転送されるデータとは、例えば、入力回路から本体回路に供給されるデータや、本体回路から出力回路に供給されるデータである。
【００４３】
次に、通信路生成部５２は、選択したデータを転送元の回路が出力するタイミングと選択したデータを転送先の回路が入力するタイミングとが異なるか否かを判別する（ステップＳ２２）。例えば、選択したデータが入力回路から本体回路に供給されるデータである場合、通信路生成部５２は、入力回路がこのデータを出力するタイミングと本体回路がこのデータを入力するタイミングとが異なるか否かを判別する。
【００４４】
ここで、各回路は、データを使用するまでは、データを入力する必要はない。このため、スケジュール部４０は、データを使用するタイミングをデータを入力するタイミングとしてスケジュールするものとする。以下、データを入力するタイミングはデータを使用するタイミングと同じであるものとして説明する。
【００４５】
通信路生成部５２は、タイミングが異なると判別した場合（ステップＳ２２：ＹＥＳ）、選択したデータに対応するレジスタを用意する（ステップＳ２３）。一方、通信路生成部５２は、タイミングが異ならないと判別した場合（ステップＳ２２：ＮＯ）、選択したデータに対応したレジスタを用意しない。
【００４６】
通信路生成部５２は、タイミングが異ならないと判別した場合（ステップＳ２２：ＮＯ）、若しくは、選択したデータに対応するレジスタの用意（ステップＳ２３）を完了した場合、回路間で転送されるデータを全て選択したか否かを判別する（ステップＳ２４）。
【００４７】
通信路生成部５２は、データを全ては選択していないと判別した場合（ステップＳ２４：ＮＯ）、回路間で転送されるデータのうちまだ選択していないデータを選択して同様の処理を繰り返す（ステップＳ２１〜ステップＳ２３）。一方、通信路生成部５２は、データを全て選択したと判別した場合（ステップＳ２４：ＹＥＳ）、レジスタが用意されたデータからデータを選択する（ステップＳ２５）。
【００４８】
通信路生成部５２は、レジスタが用意されたデータからデータを選択した（ステップＳ２５）後、選択したデータの転送タイミングと転送タイミングが重複しないデータが有るか否かを判別する（ステップＳ２６）。なお、通信路生成部５２は、ステップＳ２３で対応するレジスタが用意されたデータのうち、選択したデータを出力する回路から出力されるデータのみを対象とする。すなわち、通信路生成部５２は、レジスタが用意されなかったデータや、選択したデータを出力する回路とは別の回路から出力されるデータは対象にしない。
【００４９】
通信路生成部５２は、選択したデータの転送タイミングと転送タイミングが重複しないデータが有ると判別した場合（ステップＳ２６：ＹＥＳ）、選択したデータと転送タイミングが重複しないデータに対応して用意されたレジスタと選択したデータに対応して用意されたレジスタとを共有する（ステップＳ２７）。
【００５０】
具体的には、例えば、通信路生成部５２は、選択したデータに対応して用意されたレジスタを削除し、選択したデータと転送タイミングが重複しないデータに対応して用意されたレジスタを共有する。
【００５１】
通信路生成部５２は、選択したデータの転送タイミングと転送タイミングが重複しないデータがないと判別した場合（ステップＳ２６：ＮＯ）、若しくは、レジスタの共有（ステップＳ２７）を完了した場合、レジスタが用意されたデータを全て選択したか否かを判別する（ステップＳ２８）。
【００５２】
通信路生成部５２は、データを全ては選択していないと判別した場合（ステップＳ２８：ＮＯ）、レジスタが用意されたデータのうちまだ選択していないデータを選択して同様の処理を繰り返す（ステップＳ２５〜ステップＳ２７）。一方、通信路生成部５２は、データを全て選択したと判別した場合（ステップＳ２８：ＹＥＳ）、通信路情報を生成する（ステップＳ２９）。
【００５３】
具体的には、通信路生成部５２は、回路間で転送されるデータとレジスタとを対応付けた情報を通信路情報として生成する（ステップＳ２９）。
【００５４】
通信路生成部５２は、通信路情報の生成（ステップＳ２９）を終了すると、通信路生成処理を終了する。
【００５５】
通信路生成部５２が通信路生成処理（ステップＳ１７）を終了すると、全ＲＴＬ記述生成部５３は、処理段階別ＲＴＬ記述生成部５１が生成した各処理段階のＲＴＬ記述と、通信路生成部５２が生成した通信路情報とに基づいて、受付部２０が受け付けた動作レベル記述の全記述に対応したＲＴＬ記述を生成する（ステップＳ１８）。
【００５６】
最後に、全ＲＴＬ記述生成部５３は、ＲＴＬ記憶部１１２に全ＲＴＬ記述を記憶し、動作合成処理を終了する（ステップＳ１９）。
【００５７】
次に、本実施形態に係る動作合成装置１００が動作レベル記述に基づいてどのようにＲＴＬ記述を生成するかを具体例を挙げて説明する。
【００５８】
図６に、ＳｙｓｔｅｍＣ言語で表現された動作レベル記述の一例を示す。図６に示した動作レベル記述は、供給された３つの入力データの最大公約数を計算して出力するモジュールｇｃｄ３の動作を表現した記述の一例である。なお、図６には、本発明の説明に必要な部分のみを示している。
【００５９】
２行目から５行目に示すように、モジュールｇｃｄ３は、２つの入力端子ｓｔａｒｔ、ｉｎ＿ｄａｔと、２つの出力端子ｏｕｔ＿ｄａｔ、ｄｏｎｅと、を有する。ここで、入力端子ｓｔａｒｔは、データの入力の開始を指示する信号（ｓｔａｒｔ信号）が供給される端子であり、入力端子ｉｎ＿ｄａｔは、入力データが供給される端子である。また、出力端子ｏｕｔ＿ｄａｔは、データを出力する端子であり、出力端子ｄｏｎｅは、出力データが有効であることを示す信号（ｄｏｎｅ信号）を出力する端子である。
【００６０】
モジュールｇｃｄ３は、入力端子ｓｔａｒｔにｓｔａｒｔ信号が供給されたと判別すると、入力端子ｉｎ＿ｄａｔからデータを３つ取り込む。モジュールｇｃｄ３は、取り込んだ３つのデータの最大公約数を求め、求めた結果を出力端子ｏｕｔ＿ｄａｔから出力した後、出力端子ｄｏｎｅからｄｏｎｅ信号を出力する。
【００６１】
モジュールｇｃｄ３の動作記述は、２つの関数ｅｎｔｒｙ（）、ｇｃｄ２（）を有する。関数ｅｎｔｒｙ（）は、外部から入力データを取り込み、関数ｇｃｄ２（）を呼び出して最大公約数を計算し、計算結果を外部に出力する動作を表現した関数である。関数ｇｃｄ２（）は、与えられた２つの数の最大公約数をユークリッドの互除法を用いて計算する動作を表現した関数である。
【００６２】
関数ｅｎｔｒｙ（）には、入力処理、本体処理、出力処理の３つの処理が記載されている。
【００６３】
入力処理では、まず、入力端子ｓｔａｒｔから読み込まれる値が「１」になるまで待つ（１３行目）。入力端子ｓｔａｒｔから読み込まれる値が「１」になると、入力端子ｉｎ＿ｄａｔから入力データを取り込み、ローカル変数ｄａｔ［］に値を格納する。入力端子ｉｎ＿ｄａｔからの入力データの取り込みは、３回連続で実行され、１回目、２回目、３回目の入力データがそれぞれローカル変数ｄａｔ［０］、ｄａｔ［１］、ｄａｔ［２］に格納される（１４行目から１７行目）。なお、以下の説明では、理解を容易にするため、必要に応じて、ローカル変数ｄａｔ［０］、ｄａｔ［１］、ｄａｔ［２］を、データｄａｔ［０］、ｄａｔ［１］、ｄａｔ［２］とする。
【００６４】
１２行目には、この入力処理が、データ毎のハンドシェイクなしに、バースト的に実行されるべき処理であることを指示するプラグマｂｕｒｓｔ＿ｉｎｔｅｒｆａｃｅが指定されている。なお、このプラグマｂｕｒｓｔ＿ｉｎｔｅｒｆａｃｅは、ＳｙｓｔｅｍＣの仕様で定められているものではない。
【００６５】
プラグマｂｕｒｓｔ＿ｉｎｔｅｒｆａｃｅにより、以下の（１）及び（２）の指定がされる。
（１）入力端子ｓｔａｒｔからのデータの取り込みを毎クロックサイクル実行すること。
（２）入力端子ｓｔａｒｔに供給されたデータが「１」になると、次のクロックサイクルで入力端子ｉｎ＿ｄａｔからデータを取り込み、このクロックサイクルを起点（１クロックサイクル目）として、次のクロックサイクル（２クロックサイクル目）及び次の次のクロックサイクル（３クロックサイクル目）に連続して入力端子ｉｎ＿ｄａｔからデータを取り込むこと。
【００６６】
本体処理では、関数ｇｃｄ２（）を呼び出し、３つの数の最大公約数を計算する（２０行目から２１行目）。まず、１回目に入力したデータｄａｔ［０］と２回目に入力したデータｄａｔ［１］とを引数として関数ｇｃｄ２（）を呼び出すことで、これらのデータの最大公約数を計算する（２０行目）。次に、その結果と３回目に入力したデータｄａｔ［２］を引数として関数ｇｃｄ２（）を呼び出すことで、結果として３つのデータの最大公約数を計算し、ローカル変数ｒｅｔに格納する（２１行目）。
【００６７】
出力処理では、ローカル変数ｒｅｔに格納された最大公約数を出力端子ｏｕｔ＿ｄａｔに出力するとともに、ｄｏｎｅ信号の信号レベルを「１」として出力端子ｄｏｎｅから出力する（２２行目から２４行目）。そして、次のクロックサイクルでｄｏｎｅ信号の信号レベルを「０」に戻して出力端子ｄｏｎｅから出力する（２５行目から２６行目）。
【００６８】
関数ｇｃｄ２（）は、２つの数を引数ｘ、ｙとして与えられ、ユークリッドの互除法をもちいて当該２数の最大公約数を計算し、戻り値として返す。具体的には以下の手順を実行する。まず、ｘとｙを比較し、もしその値が異なっていればｘとｙのうち大きい方をその差分で更新する（３２行目から３５行目）。ｘとｙの値が同じになった時点で繰り返しを終了し、最大公約数としてｘの値を戻り値として返す。
【００６９】
図６に示す動作記述のスケジュール結果の一例を、図７（Ａ）、図７（Ｂ）、図８（Ａ）及び図８（Ｂ）に示す。図７（Ａ）は、入力処理のスケジュール結果の一例を示した図である。図７（Ｂ）と図８（Ａ）は、本体処理のスケジュール結果の一例を示した図である。図８（Ｂ）は、出力処理のスケジュール結果の一例を示した図である。
【００７０】
図７（Ａ）に示すように、プラグマｂｕｒｓｔ＿ｉｎｔｅｒｆａｃｅの指定に従い、状態１から状態４にかけて、入力処理がスケジュールされる。状態１では入力端子ｓｔａｒｔから値を読み込み、その値が「０」の間は状態１を繰り返す。入力端子ｓｔａｒｔの値が「１」になると、次のクロックサイクルで状態２を実行する。状態２、３、４では入力端子ｉｎ＿ｄａｔから値を読み込み、それぞれローカル変数ｄａｔ［０］、ｄａｔ［１］、ｄａｔ［２］に値を格納する。
【００７１】
また、図７（Ｂ）および図８（Ａ）に示すように、状態３から状態７にかけて本体処理がスケジュールされる。状態３では１番目のデータｄａｔ［０］と２番目のデータｄａｔ［１］の値が、それぞれｘ、ｙに格納される。状態４−１、４−２、４−３−１、４−３−２では、関数ｇｃｄ２（）の処理が実行される。
【００７２】
状態４−１では、ｘとｙの値を比較し、その値が同じ場合に、ｘの値を最大公約数としてｔに格納して状態５に遷移する。状態４−２では、ｘとｙの値を比較し、ｘの値が大きい場合は状態４−３−１へ、ｙの値が大きい場合は状態４−３−２へ遷移する。状態４−３−１では、ｙとｘの差分をｙに格納している。状態４−３−２では、ｘとｙの差分をｘに格納する。そして、それぞれ状態４−１へ戻る。ｘとｙの値が異なる間は、これらを繰り返す。状態５では、データｄａｔ［０］とデータｄａｔ［１］の最大公約数ｔと３番目のデータｄａｔ［２］を、それぞれｘ、ｙに格納する。状態６−１、６−２、６−３−１、６−３−２では、再び関数ｇｃｄ２（）の処理が実行される。その動作は状態４−１から４−３−２と同様である。最後に状態７においてローカル変数ｒｅｔに関数ｇｃｄ２（）の戻り値を格納する。
【００７３】
図８（Ｂ）に示すように、状態７から状態８にかけて出力処理がスケジュールされる。状態７において、ローカル変数ｒｅｔに格納された３つの入力の最大公約数が出力端子ｏｕｔ＿ｄａｔから出力されるとともに、出力端子ｄｏｎｅから「１」が出力される。次の状態８において、出力端子ｄｏｎｅから「０」が出力される。
【００７４】
なお、このスケジュール結果の例において、図７（Ａ）の状態３と図７（Ｂ）の状態３とは同時に実行される。また、図８（Ａ）の状態７と図８（Ｂ）の状態７とは同時に実行される。
【００７５】
図９に、合成された入力回路１２１、本体回路１２２、出力回路１２３、全体制御回路１２４及びレジスタ１２５のブロック図を例示する。動作合成装置１００は、スケジュール結果を元に以下のように通信路を作成する。
【００７６】
なお、入力回路１２１、本体回路１２２及び出力回路１２３は、処理段階別ＲＴＬ記述生成部５１が生成したそれぞれの処理段階のＲＴＬ記述により表現される回路である。また、全体制御回路１２４は、入力回路１２１、本体回路１２２及び出力回路１２３を制御する回路である。
【００７７】
まず、入力回路１２１がデータを出力するタイミングと、本体回路１２２がデータを使用するタイミングとを比較し、異なる場合に通信路にレジスタを用意する。同じ場合には通信路にレジスタを用意しない。なお、前述のように、データを使用するタイミングとデータを入力するタイミングは同じタイミングであるものとして説明する。
【００７８】
具体的には、データｄａｔ［０］は、入力回路１２１がデータを出力するタイミングと、本体回路１２２がデータを使用するタイミングが異なるため、レジスタ１２５を用意する。データｄａｔ［１］は、入力回路１２１がデータを出力するタイミングと、本体回路１２２がデータを使用するタイミングが同じであるため、レジスタを用意しない。データｄａｔ［２］は、入力回路１２１がデータを出力するタイミングと、本体回路１２２がデータを使用するタイミングが異なるため、レジスタ１２５を用意する。
【００７９】
次に、入力回路１２１がデータを出力するタイミングと本体回路１２２がデータを使用するタイミングまでの期間を信号ごとに比較し、レジスタの共有を決定する。期間が重ならない場合にはレジスタを共有し、期間が重なる場合にはレジスタを共有しない。データｄａｔ［０］とデータｄａｔ［２］の当該タイミングは重ならないためレジスタ１２５を共有する。
【００８０】
次に、入力回路１２１、出力回路１２３との間の通信路を生成する。データｄａｔ［１］にはレジスタを介さずに接続する通信路を生成する。データｄａｔ［０］、ｄａｔ［２］には共有されたレジスタ１２５を介して接続される通信路を生成する。
【００８１】
本体回路１２２と出力回路１２３との間の通信路についても同様に生成する。
【００８２】
最後に、生成した通信路に対応したＲＴＬ記述を作成し記憶装置に格納する。
【００８３】
特許文献１に開示された動作合成の手順によって合成された回路では、入力段階記述の処理が全て完了するまで本体段階記述の処理を開始できず、また、本体段階記述の処理が全て完了するまではデータの出力段階記述の処理を開始できなかった。
【００８４】
しかしながら、上述したように本実施形態に係る動作合成装置１００によれば、入力段階記述の処理の完了を待たずに本体段階記述の処理を開始でき、さらに、本体段階記述の処理の完了を待たずに出力段階記述の処理を開始できる。
【００８５】
具体的には、入力回路１２１が状態４を実行して全ての入力データの受け取りを完了する前に本体回路１２２がその処理を開始する。本体回路１２２と出力回路１２３との間でも同様である。
【００８６】
さらに、本実施形態に係る動作合成装置１００によれば、半導体集積回路の動作レベル記述からレジスタ転送レベル記述を生成する際に、レジスタ回路の数を抑制できる。
【００８７】
具体的には、入力回路１２１がデータを出力するタイミングと本体回路１２２がデータを使用するタイミングとが一致する場合、このデータを転送するための通信路はレジスタを用いずに直接接続される。このため、転送されるデータに対応して全てレジスタを用意する場合に比べ、入力回路１２１と本体回路１２２との間の通信路上のレジスタの数を減らすことができる。本体回路１２２と出力回路１２３との間の通信路上のレジスタについても同様である。
【００８８】
また、入力回路１２１がデータを出力するタイミングと本体回路１２２がデータを使用するタイミングまでの期間を信号ごとに比較し、期間が重ならない場合にはレジスタを共有する。このため、入力回路１２１と本体回路１２２との間の通信路上のレジスタの数をさらに減らすことができる。本体回路１２２と出力回路１２３との間の通信路上のレジスタについても同様である。
【００８９】
上述の実施形態では、プラグマを用いて入出力タイミングを指定したが、他の指定方法により入出力タイミングを指定することも可能である。
【００９０】
図１０に、入出力タイミングをコメントにより指定する場合の、動作記述の一例を示す。図１０の動作記述は、図６と比較すると、２行目の入力信号ｉｎ＿ｄａｔの宣言が、入力信号ａ、ｂ、ｃの宣言であることが異なり（２ａ、２ｂ、２ｃ行目）、１１行目から１９行目の入力端子ｉｎ＿ｄａｔからの読み込みが、入力端子ａ、ｂ、ｃからの読み込み（１３行目、１５ａ、１５ｂ、１５ｃ、１６行目）となっていることが異なる。また、入力のタイミングが、プラグマではなく、入力信号のコメントとして指定していることが異なる。
【００９１】
また、図１１（Ａ）に、入出力タイミングを動作記述とは別に指定する場合の動作記述の一例を示す。図１１（Ａ）の動作記述は、図１０と比較すると、入力のタイミングをコメントとして指定していない。代わりに、図１１（Ｂ）に示すように、入力信号とタイミングのペアを表形式で指定している。このように、入出力タイミングを指定する方法は、任意である。
【００９２】
また、上記実施形態では、プログラムが、記憶装置に予め記憶されているものとして説明した。しかし、動作合成装置を、装置の全部又は一部として動作させ、あるいは、上述の処理を実行させるためのプログラムを、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、ＭＯ（Ｍａｇｎｅｔｏ  Ｏｐｔｉｃａｌ  Ｄｉｓｋ）などのコンピュータ読み取り可能な記録媒体に格納して配布し、これを別のコンピュータにインストールし、上述の手段として動作させ、あるいは、上述の工程を実行させてもよい。
【００９３】
さらに、インターネット上のサーバ装置が有するディスク装置等にプログラムを格納しておき、例えば、搬送波に重畳させて、コンピュータにダウンロード等してプログラムを実行してもよい。
【００９４】
上述したように、本実施形態に係る動作合成装置１００によれば、入力段階記述の処理の完了を待たずに本体段階記述の処理を開始でき、また、本体段階記述の処理の完了を待たずに出力段階記述の処理を開始できる。さらに、本実施形態に係る動作合成装置１００によれば、半導体集積回路の動作レベル記述からレジスタ転送レベル記述を生成する際に、レジスタ回路の数を抑制できる。
【図面の簡単な説明】
【００９５】
【図１】本発明の実施形態に係る動作合成装置の構成を示すブロック図である。
【図２】動作合成装置の基本構成を示すブロック図である。
【図３】動作合成処理を説明するためのブロック図である。
【図４】動作合成処理を示すフローチャートである。
【図５】図４のフローチャートに示した通信路生成処理を示すフローチャートである。
【図６】動作レベル記述の一例を示す第１の図である。
【図７】（Ａ）は、入力処理のスケジュール結果の一例を示す図である。（Ｂ）は、本体処理のスケジュール結果の一例を示す第１の図である。
【図８】（Ａ）は、本体処理のスケジュール結果の一例を示す第２の図である。（Ｂ）は、出力処理のスケジュール結果の一例を示す図である。
【図９】通信路生成処理を説明するためのブロック図である。
【図１０】動作レベル記述の一例を示す第２の図である。
【図１１】（Ａ）は、動作レベル記述の一例を示す第３の図である。（Ｂ）は、入力信号とタイミングの関係を表した図である。
【符号の説明】
【００９６】
１１  ＣＰＵ
１２  ＲＯＭ
１３  ＲＡＭ
１４  ハードディスク装置
１５  入力装置
１６  表示装置
２０  受付部
３０  分割部
３５  ＣＤＦＧ生成部
４０  スケジュール部
５０  生成部
５１  処理段階別ＲＴＬ記述生成部
５２  通信路生成部
５３  全ＲＴＬ記述生成部
１００  動作合成装置
１１０  記憶装置
１１１  動作レベル記述記憶部
１１２  ＲＴＬ記述記憶部
【図１】
0005211776.tif 000002
【図２】
0005211776.tif 000003
【図３】
0005211776.tif 000004
【図４】
0005211776.tif 000005
【図５】
0005211776.tif 000006
【図６】
0005211776.tif 000007
【図７】
0005211776.tif 000008
【図８】
0005211776.tif 000009
【図９】
0005211776.tif 000010
【図１０】
0005211776.tif 000011
【図１１】
0005211776.tif 000012