(57)【要約】【課題】複数モジュール構成時、あるモジュールのレイテンシが変更があった場合等に、自動でモジュール間のレイテンシ調整を実施することを可能にする。【解決手段】高位合成装置１は、動作記述を入力して高位合成処理を行いＨＤＬ記述を出力する装置である。動作記述にレイテンシ調整箇所を指定するレイテンシ調整パス指定部２０１と、指定されたレイテンシ調整箇所から入力までの入出力の接続関係及びモジュールを抽出するレイテンシ調整パス抽出部２０２と、抽出されたモジュールの動作合成を実施する動作合成部２０３と、動作合成部２０３の結果に基づいて各モジュールのレイテンシ情報を抽出するレイテンシ情報抽出部２０４と、抽出されたレイテンシ情報に基づいて、前記指定されたレイテンシ調整箇所に挿入するレイテンシ値を算出するレイテンシ算出部２０５と、算出されたレイテンシ値をＨＤＬ記述に挿入するレイテンシ挿入部２０６と、を備える。【選択図】図４
2010165334.tif 000002
【特許請求の範囲】
【請求項１】
動作記述を入力して高位合成処理を行いＨＤＬ記述を出力する高位合成装置であって、
動作記述にレイテンシ調整箇所を指定するレイテンシ調整パス指定手段と、
指定されたレイテンシ調整箇所から入力までの入出力の接続関係及びモジュールを抽出するレイテンシ調整パス抽出手段と、
抽出されたモジュールの動作合成を実施する動作合成手段と、
前記動作合成手段の結果に基づいて各モジュールのレイテンシ情報を抽出するレイテンシ情報抽出手段と、
抽出されたレイテンシ情報に基づいて、前記指定されたレイテンシ調整箇所に挿入するレイテンシ値を算出するレイテンシ算出手段と、
算出されたレイテンシ値をＨＤＬ記述に挿入するレイテンシ挿入手段と、
を備えることを特徴とする、高位合成装置。
【請求項２】
前記レイテンシ情報抽出手段は、高位合成ログ結果及びディレクティブ情報の少なくともいずれか一方に基づいて、レイテンシ情報を抽出することを特徴とする、請求項１記載の高位合成装置。
【請求項３】
前記レイテンシ算出手段は、
各パスのレイテンシの合計算出手段と、
最大レイテンシ算出手段と、
レイテンシ挿入値計算手段と、
を含むことを特徴とする、請求項１又は２記載の高位合成装置。
【請求項４】
前記各パスのレイテンシの合計算出手段は、
前記レイテンシ調整パス抽出手段が抽出した各パス上のモジュールレイテンシの合計を算出することを特徴とする、請求項３記載の高位合成装置。
【請求項５】
前記各パスのレイテンシの合計算出手段は、
算出の際、パス上に既に挿入すべきレイテンシ挿入値がある場合は、当該レイテンシ挿入値も含めて合計して算出することを特徴とする、請求項４記載の高位合成装置。
【請求項６】
前記最大レイテンシ算出手段は、
前記各パスのレイテンシの合計算出手段が算出したレイテンシの最大値を算出することを特徴とする、請求項３から５のいずれか１項記載の高位合成装置。
【請求項７】
前記レイテンシ挿入値計算手段は、
前記最大レイテンシ算出手段が算出した最大値から、各レイテンシ値を引いて、挿入するべきレイテンシ挿入値を計算することを特徴とする、請求項３から６のいずれか１項記載の高位合成装置。
【請求項８】
前記レイテンシ調整パス抽出手段による抽出過程で多入力モジュールがあると判断される場合は、多入力ポイントのレイテンシ調整を優先的に実施することを特徴とする、請求項１から７のいずれか１項記載の高位合成装置。
【請求項９】
前記レイテンシ算出手段は、
前記レイテンシ調整パス抽出手段による抽出過程でレイテンシ調整ポイントの最終モジュールの出力に分岐経路があると判断される場合は、分岐経路毎にレイテンシ値を算出することを特徴とする、請求項１から８のいずれか１項記載の高位合成装置。
【請求項１０】
前記レイテンシ挿入手段は、
前記レイテンシ調整パス抽出手段による抽出過程でレイテンシ調整ポイントの最終モジュールの出力に分岐経路を有すると判断した場合は、最終モジュール出力経路から分岐経路パスを生成し、分岐経路パスを分岐先のモジュールに接続することを特徴とする、請求項９記載の高位合成装置。
【請求項１１】
動作記述を入力して高位合成処理を行いＨＤＬ記述を出力する、コンピュータを用いた高位合成方法であって、
動作記述にレイテンシ調整箇所を指定するレイテンシ調整パス指定工程と、
指定されたレイテンシ調整箇所から入力までの入出力の接続関係及びモジュールを抽出するレイテンシ調整パス抽出工程と、
抽出されたモジュールの動作合成を実施する動作合成工程と、
前記動作合成工程の結果に基づいて各モジュールのレイテンシ情報を抽出するレイテンシ情報抽出工程と、
抽出されたレイテンシ情報に基づいて、前記指定されたレイテンシ調整箇所に挿入するレイテンシ値を算出するレイテンシ算出工程と、
算出されたレイテンシ値をＨＤＬ記述に挿入するレイテンシ挿入工程と、
を含むことを特徴とする、高位合成方法。
【請求項１２】
コンピュータを、
動作記述にレイテンシ調整箇所を指定するレイテンシ調整パス指定手段と、
指定されたレイテンシ調整箇所から入力までの入出力の接続関係及びモジュールを抽出するレイテンシ調整パス抽出手段と、
抽出されたモジュールの動作合成を実施する動作合成手段と、
前記動作合成手段の結果に基づいて各モジュールのレイテンシ情報を抽出するレイテンシ情報抽出手段と、
抽出されたレイテンシ情報に基づいて、前記指定されたレイテンシ調整箇所に挿入するレイテンシ値を算出するレイテンシ算出手段と、
算出されたレイテンシ値をＨＤＬ記述に挿入するレイテンシ挿入手段として機能させ、
動作記述を入力して高位合成処理を行いＨＤＬ記述を出力する高位合成装置として機能させることを特徴とする、高位合成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高位合成装置、方法及びプログラムに関し、特に、高位合成時に動作記述におけるモジュールのレイテンシを解析し、ツールが自動的にモジュール間のレイテンシ方法を調整し、モジュールのスループットを最適化する技術に関する。
【背景技術】
【０００２】
高位合成はC言語ベースによる回路設計技術である。C言語ベース設計は従来の Verilog/VHDLなどのHDL(Hardware Description Language)よりも記述抽象度が高く、設計効率の向上が期待されている。高位合成設計では、ディレクティブ(ソースコード上指定)によるモジュールのレイテンシ(入力から出力までの遅延)設計ができる。周波数upによる再利用の際、手間をかけずに目標スペック(レイテンシ)を満たしたモジュールを自動生成できる。しかし、周波数upによる再利用は、モジュールのゲート規模/タイミングの影響により、目標スペックを満たせない場合もある。目標スペックを満たせない場合は、レイテンシの再設計(ディレクティブ再指定)が必要となる。
【０００３】
特許文献１では、モジュール"内"のスレッド間のレイテンシ調整を行い、スループットの最適化を行うことについて記載されている。しかしながら、モジュール"間"のレイテンシ調整を行い、スループットの最適化を行うことについては、開示されていない。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
レイテンシ再設計は、複数モジュール構成時のモジュール間のレイテンシ調整に影響する。(図４８参照)高位合成設計では、モジュールAとB、Cを別々に高位合成した場合、入力X,YからDへの到着時刻(X',Y')は手設計でそろえる必要がある。再利用の際、あるモジュールのレイテンシを変更した場合、モジュール間のレイテンシ調整を人手で調整する必要となり、手間である。
【０００５】
本発明は上記実情に鑑みて、複数モジュール構成時、あるモジュールのレイテンシが変更があった場合等に、自動でモジュール間のレイテンシ調整を実施することが可能な高位合成装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するために下記の構成を特徴とする高位合成装置、方法及びプログラムを提供する。
【０００７】
本発明に係る高位合成装置は、動作記述を入力して高位合成処理を行いＨＤＬ記述を出力する高位合成装置であって、動作記述にレイテンシ調整箇所を指定するレイテンシ調整パス指定手段と、指定されたレイテンシ調整箇所から入力までの入出力の接続関係及びモジュールを抽出するレイテンシ調整パス抽出手段と、抽出されたモジュールの動作合成を実施する動作合成手段と、前記動作合成手段の結果に基づいて各モジュールのレイテンシ情報を抽出するレイテンシ情報抽出手段と、抽出されたレイテンシ情報に基づいて、前記指定されたレイテンシ調整箇所に挿入するレイテンシ値を算出するレイテンシ算出手段と、算出されたレイテンシ値をＨＤＬ記述に挿入するレイテンシ挿入手段と、を備えることを特徴とする。
【０００８】
本発明に係る高位合成方法は、動作記述を入力して高位合成処理を行いＨＤＬ記述を出力する、コンピュータを用いた高位合成方法であって、動作記述にレイテンシ調整箇所を指定するレイテンシ調整パス指定工程と、指定されたレイテンシ調整箇所から入力までの入出力の接続関係及びモジュールを抽出するレイテンシ調整パス抽出工程と、抽出されたモジュールの動作合成を実施する動作合成工程と、前記動作合成工程の結果に基づいて各モジュールのレイテンシ情報を抽出するレイテンシ情報抽出工程と、抽出されたレイテンシ情報に基づいて、前記指定されたレイテンシ調整箇所に挿入するレイテンシ値を算出するレイテンシ算出工程と、算出されたレイテンシ値をＨＤＬ記述に挿入するレイテンシ挿入工程と、を含むことを特徴とする。
【０００９】
本発明に係る高位合成プログラムは、コンピュータを、動作記述にレイテンシ調整箇所を指定するレイテンシ調整パス指定手段と、指定されたレイテンシ調整箇所から入力までの入出力の接続関係及びモジュールを抽出するレイテンシ調整パス抽出手段と、抽出されたモジュールの動作合成を実施する動作合成手段と、前記動作合成手段の結果に基づいて各モジュールのレイテンシ情報を抽出するレイテンシ情報抽出手段と、抽出されたレイテンシ情報に基づいて、前記指定されたレイテンシ調整箇所に挿入するレイテンシ値を算出するレイテンシ算出手段と、算出されたレイテンシ値をＨＤＬ記述に挿入するレイテンシ挿入手段として機能させ、動作記述を入力して高位合成処理を行いＨＤＬ記述を出力する高位合成装置として機能させることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、複数モジュール構成時、あるモジュールのレイテンシが変更があった場合等に、自動でモジュール間のレイテンシ調整を実施することが可能な高位合成装置、方法及びプログラムを提供することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】本発明の各実施形態に係る高位合成装置の外観例を示す図である。
【図２】本発明の各実施形態に係る高位合成装置の構成例を示すブロック図である。
【図３】本発明の実施形態１が適用される回路の概念を示す図である。
【図４】本発明の実施形態１の機能構成を示すブロック図である。
【図５】図４のレイテンシ算出部２０５の機能構成を示すブロック図である。
【図６】図３の回路概念を動作記述した例（図４の動作記述に相当）を示す図（その１）である。
【図７】図３の回路概念を動作記述した例（図４の動作記述に相当）を示す図（その２）である。
【図８】本発明の実施形態１による高位合成結果例（図４のＨＤＬ記述に相当）を示す図（その１）である。
【図９】本発明の実施形態１による高位合成結果例（図４のＨＤＬ記述に相当）を示す図（その２）である。
【図１０】本発明の実施形態１の高位合成処理の手順を示すフローチャートである。
【図１１】本発明の実施形態１において遅延調整ポイントを指定する例を示す図である。
【図１２】本発明の実施形態１の動作合成部２０３が生成したログ結果の例を示す図である。
【図１３】本発明の実施形態１のレイテンシ情報抽出部２０４が抽出したレイテンシ情報の例を図３の回路概念図と紐付けて示す図である。
【図１４】本発明の実施形態１のレイテンシ算出処理の詳細手順（図１０のステップＳ５に相当）を示すフローチャートである。
【図１５】本発明の実施形態１のレイテンシ算出処理の結果の例を図３の回路概念図と紐付けて示す図である。
【図１６】本発明の実施形態１による高位合成処理の結果得られる回路の概念を示す図である。
【図１７】本発明の実施形態１の変形実施形態を説明するための図である。
【図１８】本発明の実施形態２が適用される回路の概念を示す図である。
【図１９】図１８の回路概念を動作記述した例（図４の動作記述に相当）を示す図（その１）である。
【図２０】図１８の回路概念を動作記述した例（図４の動作記述に相当）を示す図（その２）である。
【図２１】本発明の実施形態２による高位合成結果例（図４のＨＤＬ記述に相当）を示す図である。
【図２２】本発明の実施形態２の高位合成処理の手順を示すフローチャートである。
【図２３】本発明の実施形態２において遅延調整ポイントを指定する例を示す図である。
【図２４】本発明の実施形態２のレイテンシ調整パスの抽出処理の詳細手順（図２２のステップＳ２ａに相当）を示すフローチャートである。
【図２５】本発明の実施形態２のレイテンシ調整パスの抽出処理の抽出結果例を説明するための図である。
【図２６】本発明の実施形態２の動作合成部２０３が生成したログ結果の例を示す図である。
【図２７】本発明の実施形態２のレイテンシ情報抽出部２０４が抽出したレイテンシ情報の例を図１８の回路概念図と紐付けて示す図である。
【図２８】本発明の実施形態２のレイテンシ算出処理の詳細手順（図２２のステップＳ５ａに相当）を示すフローチャートである。
【図２９】本発明の実施形態２のレイテンシ算出処理の結果の例を図１８の回路概念図と紐付けて示す図（その１）である。
【図３０】本発明の実施形態２のレイテンシ算出処理の結果の例を図１８の回路概念図と紐付けて示す図（その２）である。
【図３１】本発明の実施形態２による高位合成処理の結果得られる回路の概念を示す図である。
【図３２】本発明の実施形態３が適用される回路の概念を示す図である。
【図３３】図３２の回路概念を動作記述した例（図４の動作記述に相当）を示す図（その１）である。
【図３４】図３２の回路概念を動作記述した例（図４の動作記述に相当）を示す図（その２）である。
【図３５】本発明の実施形態３による高位合成結果例（図４のＨＤＬ記述に相当）を示す図である。
【図３６】本発明の実施形態３の高位合成処理の手順を示すフローチャートである。
【図３７】本発明の実施形態３において遅延調整ポイントを指定する例を示す図である。
【図３８】本発明の実施形態３のレイテンシ調整パスの抽出処理の詳細手順（図３６のステップＳ２ｂに相当）を示すフローチャートである。
【図３９】本発明の実施形態３のレイテンシ調整パスの抽出処理の抽出結果例を説明するための図である。
【図４０】本発明の実施形態３の動作合成部２０３が生成したログ結果の例を示す図である。
【図４１】本発明の実施形態３のレイテンシ情報抽出部２０４が抽出したレイテンシ情報の例を図３２の回路概念図と紐付けて示す図である。
【図４２】本発明の実施形態３のレイテンシ算出処理の詳細手順（図３６のステップＳ５ｂに相当）を示すフローチャートである。(図２８と等価)
【図４３】本発明の実施形態３のレイテンシ算出処理の結果の一部を図３２の回路概念図と紐付けて示す図である。
【図４４】本発明の実施形態３のレイテンシ挿入処理の詳細手順（図３６のステップＳ６bに相当）を示すフローチャートである。
【図４５】本発明の実施形態３のレイテンシ算出処理の結果の例を図３２の回路概念図と紐付けて示す図である。
【図４６】本発明の実施形態３による高位合成処理の結果得られる回路の概念を示す図である。
【図４７】本発明の実施形態３を実施しない場合のレイテンシ挿入の結果の例を図３２の回路概念図と紐付けて示す図である。
【図４８】従来の高位合成処理について説明するための図である。
【発明を実施するための形態】
【００１２】
以下、本発明の好適な実施の形態について図面を参照して説明する。
【００１３】
図１は、本発明の各実施形態の高位合成装置の外観例を示す図である。高位合成装置は、コンピュータ本体、グラフィックディスプレイ装置、キーボード、マウス、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory ）が装着されるＣＤ−ＲＯＭ装置、およびネットワークを含む。高位合成プログラムは、ＣＤ−ＲＯＭ等の記憶媒体によって供給される。高位合成プログラムはコンピュータ本体によって実行され、操作者はグラフィックディスプレイ装置を見ながらキーボードまたはマウスを操作することによって高位合成を行う。また、高位合成プログラムは他のコンピュータより通信回線を経由し、ネットワークを介してコンピュータ本体に供給されてもよい。
【００１４】
図２は、本発明の各実施形態の高位合成装置の構成例を示すブロック図である。図２に示すコンピュータ本体は、ＣＰＵ（Central Processing Unit ）、ＲＯＭ(Read Only Memory)、ＲＡＭ（Random Access Memory）およびハードディスクを含む。ＣＰＵは、グラフィックディスプレイ装置、キーボード、マウス、ＣＤ−ＲＯＭ装置、ネットワーク装置、ＲＯＭ、ＲＡＭまたはハードディスクとの間でデータを入出力しながら処理を行う。ＣＤ−ＲＯＭに記録された高位合成プログラムは、ＣＰＵによりＣＤ−ＲＯＭ装置を介して一旦ハードディスクに格納される。ＣＰＵは、ハードディスクから適宜高位合成プログラムをＲＡＭにロードして実行することによって高位合成を行う。
【００１５】
以下に各実施の形態における高位合成装置について説明するが、図１に示す高位合成装置の外観および図２に示す高位合成装置の構成は各実施の形態において共通である。
【００１６】
(実施形態１)
実施形態１は、図３に示す回路(概念)を例に、モジュールA,B,C,Dの周波数upによる再利用により各モジュールのレイテンシが変更になることを想定し、モジュール間のレイテンシ調整(outBとoutCの遅延調整)を上述の高位合成装置で実施する例である。
【００１７】
図４は本発明の実施形態１における高位合成装置の概略構成を示す機能ブロック図である。図示のように、高位合成装置１は、レイテンシ調整パス指定部２０１、レイテンシパス抽出部２０２、動作合成部２０３、レイテンシ情報抽出部２０４、レイテンシ算出部２０５、レイテンシ挿入部２０６を備える。以下、各部について説明する。
【００１８】
レイテンシ調整パス指定部２０１は、動作記述にレイテンシ調整箇所を指定する。
レイテンシ調整パス抽出部２０２は、レイテンシ調整箇所から入力までの入出力の接続関係及び、モジュールを抽出する。
動作合成部２０３は、各接続モジュールの動作合成を実施する。
【００１９】
レイテンシ情報抽出部２０４は、動作合成部２０３の結果より各モジュールのレイテンシ情報を抽出する。
レイテンシ算出部２０５は、レイテンシ情報抽出部２０４の結果より調整ポイントに挿入するレイテンシを算出する。
【００２０】
レイテンシ挿入部２０６は、レイテンシ算出部２０５により算出されたレイテンシ値をHDL記述に挿入する。なお、挿入の態様としては、次の３つの方法が有効である。第１にモジュール間に遅延調整値分のFFを挿入する方法、第２に前段モジュール出力に遅延調整値分の遅延を挿入する方法、第３に後段モジュールの各入力ポートに遅延調整値分の遅延を挿入する方法である。
次に、レイテンシ算出部２０５について、図５の詳細機能ブロックを参照してより詳細に説明する。
【００２１】
図５はレイテンシ算出部２０５の機能ブロック図である。「各パスのレイテンシの合計算出部」２０５ａは、レイテンシ調整パス抽出部２０４で抽出した各Pass上にある モジュールのレイテンシを合計する。最大レイテンシ算出部２０５ｂは、「各パスのレイテンシの合計算出部」２０５ａで算出した各パスの最大値を算出する。レイテンシ挿入値計算部２０５ｃは、最大レイテンシ算出部２０５ｂにより算出された最大レイテンシに基づいて、各パスに挿入するレイテンシ値を計算する。
【００２２】
図６と図７は、図３の回路概念をsystemCで動作記述した例である(図４の"動作記述"に相当する。)。
module_top.h/.ccはモジュールのI/O定義(IN1,IN2,OUT)及び、モジュール間接続を記述したものである。
module_*.h/.cc(*はA,B,C,Dを示す)はモジュールA,B,C,DのI/O定義、及び各モジュールの動作を記述したものである。
動作記述に記載している「META」はデータと複数のI/F制御信号をまとめた宣言である(METAは名称も含めて制御信号をユーザー定義できるSysemCの記述方法)。
なお、本発明と関係ない記述に関する説明は省略する。
【００２３】
図８と図９は、図６と図７の動作記述を本実施形態の高位合成装置１によって高位合成させた結果例である(図４の"HDL記述"に相当する。)。本実施形態の高位合成装置１ではVerilog-HDLで生成された例である。
module_top.vはモジュールI/O(IN1,IN2,OUT)を記述及び、モジュール間の接続を記述したものである。
module_A〜D.vは各モジュールの動作をHDL記述したものである。
本実施形態によりmodule_top.vに記述している「module_2delay C_delay」を自動挿入することになる。
また、module_2delay.vを自動生成する(従来なら、モジュール間の遅延を解析し、手挿入で実施することになる。)。
なお、本発明と関係ない記述に関する説明は省略する。
【００２４】
次に、本実施形態の高位合成装置１の処理手順を図１０のフローチャートを用いて説明する。
【００２５】
S1：module_top.hに遅延調整ポイント(ADJUST(...))を指定する(図１１に遅延調整ポイントを指定する例を示す。以下、図１１に示した例に基づいて説明する。)。本実施形態では遅延調整ポイントは人手で選んだポイントをレイテンシ調整パス指定手段が指定する。引数には、レイテンシ調整したい信号を記載する。いくつでも記載可能だが、本説明例では2個(outB,outC)とする。
【００２６】
S2：レイテンシ調整パス抽出部２０２は、ADJUSTの引数に記載している信号outB,outCから入力(IN1,IN2)までの入出力の接続関係及び、モジュールを抽出する。
本説明例の場合、
PassE：   outB← (moduleB) ← outA ← (moduleA) ← IN1
PassF：   outC← (moduleC) ← IN2
が抽出される。
【００２７】
S3：動作合成部２０３は、moduleA〜Dの動作合成を実施する。Verilog-HDLが生成される。図１２に、生成されたVerilog-HDLの例を示す。
【００２８】
S4：レイテンシ情報抽出部２０４は、動作合成部２０３のログ結果よりレイテンシ情報を抽出する（図１３参照。なお、図１３では説明上分かりやすくするため、図３の回路概念図とログ結果を紐付けしている）。
moduleA_Latency = 1
moduleB_Latency = 3
moduleC_Latency = 2
moduleD_Latency = 1
【００２９】
S5：S4で抽出したレイテンシ情報を基にPassE、PassFに挿入するレイテンシ値を算出する。図１４を用いて説明する。図１４はS5の詳細フローである。
S5-1：各Pass上にあるモジュールのレイテンシを合計する
Pass_E Latency = moduleA Latency + moduleB Latency = 1+3 =4
Pass_F Latency = moduleC_Latency = 2
S5-2：各Passの最大レイテンシを算出する
Max_Latency = (Pass_E Latency , Pass_F Latency) = 4
S5-3：最大レイテンシ値より各Passのレイテンシ挿入値を算出する。
Adjust_E_Latency = Max_Latency -  Pass_E_Latency = 4-4 = 0
Adjust_F_Latency = Max_Latency -  Pass_F_Latency = 4-2 = 2
S5により、Pass_Fに 2CLK Delayを挿入することになる(図１５参照)。
【００３０】
S6：S5-3で算出したレイテンシ値を図１２のHDLに挿入する(図８と図９参照)。
Pass_Fには2CLK遅延を挿入することになる。
高位合成装置が生成するモジュール「module_2delay」をmodule_top.vのモジュールCの出力(outC)の後段に挿入する。「module_2delay」の出力(outC_2d)はモジュールDの入力に接続される。
本実施形態による処理の結果（図８と図９参照）により生成される回路は図１６となる。図１６に示す回路がデバイスに実装されることになる。
【００３１】
上記実施形態によれば、モジュールA,B,C,Dの動作合成結果（レイテンシ情報）より人手を介さずにモジュール間のレイテンシ調整値を計算し、それをHDLに挿入することが可能となる。
【００３２】
なお、上記実施形態では、レイテンシ情報の抽出を動作合成ログ結果から抽出したが、設計時にソースコード上に指定するディレクティブ情報からレイテンシ情報を抽出することも可能である。図１７にモジュールBにディレクティブ(LATENCY(3)： レイテンシ3) を挿入した例を示す。
【００３３】
(実施形態２)
実施形態２では、図１８に示す回路(概念)を例に、レイテンシ調整パス間に分岐がある場合のモジュール間のレイテンシ調整(outBとoutEの遅延調整)を、図１，図２で示した高位合成装置１で実施する例である。なお、本実施形態２における高位合成装置１の概略構成は実施形態１(図４，図５)と等価であるため省略する。
【００３４】
図１９と図２０は、図１８の回路概念をsystemCで動作記述した例である(図４の"動作記述"に相当する。)。
module_top.h/.ccはモジュールのI/O定義(IN1,IN2,OUT)及び、モジュール間接続を記述したものである。
module_*.h/.cc(*はA,B,C,D,E,Fを示す)はモジュールA,B,C,D,EのI/O定義、及び各モジュールの動作を記述したものである。
動作記述に記載している「META」はデータと複数のI/F制御信号をまとめた宣言である(METAは名称も含めて制御信号をユーザー定義できるSysemCの記述方法)。
module_top.hのmodule_Dの出力が2つあるが(outD1,outD2)、SystemCの記述上の制約である。
outD1,outD2は同じタイミングの同じ値の出力である。
なお、本発明と関係ない記述に関する説明は省略する。
【００３５】
図２１は、図１９と図２０の動作記述を本実施形態の高位合成装置１による高位合成結果例である(図４の"HDL記述"に相当する。)。本実施形態の高位合成装置１ではVerilog-HDLで生成された例である。
module_top.vはモジュールI/O(IN1,IN2,OUT)を記述及び、モジュール間の接続を記述したものである。
module_A〜F.vは各モジュールの動作をHDL記述したものである。
本実施形態によりmodule_top.vに記述している「module_3delay A_delay」、「module_2delay B_delay」を自動挿入することになる。
また、module_2delay.v,module_3delay.vを自動生成する(従来なら、モジュール間の遅延を解析し、手挿入で実施することになる。)
なお、本発明と関係ない記述に関する説明は省略する。
【００３６】
本発明の高位合成装置の処理手順を図２２の機能フローチャートを用いて説明する。なお、図１０に示した実施形態１の処理手順とほとんど同じであるが、レイテンシ調整パスの抽出処理と、レイテンシ算出処理とが、異なる。
【００３７】
S1：module_top.ccに遅延調整ポイント(ADJUST(...))を指定する(図２３に遅延調整ポイントを指定する例を示す。以下、図２３に示した例に基づいて説明する。)。本実施形態では遅延調整ポイントは人手で選んだポイントをレイテンシ調整パス指定手段が指定する。引数には、レイテンシ調整したい信号を記載する。いくつでも記載可能だが、本実施形態では2個(outB,outE)とする。
【００３８】
S2a：レイテンシ調整パス抽出部２０２の機能フローを図２４に示す。パス抽出過程でパス分岐がある場合は、分岐点のレイテンシ調整を実施する。
S2a-1 : ADJUSTの引数に記載している信号outB,outEから入力(IN1,IN2)までの入出力の接続関係及び、モジュールを抽出する。この場合、図２５に示すような接続関係及びモジュールが抽出される。
S2a-2 ：パス中に分岐パスがあるかいなかを判断する。図２３に基づく本説明例においては、PassEのmodule_Bに分岐パスがあるので、S2a-3に進み、module_B分岐パスレイテンシ調整優先フラグをアサートする(module_B_pri_adjust = 1)。
【００３９】
S3:動作合成部２０３は、moduleA〜Fの動作合成を実施する。Verilog-HDLが生成される。図２６に、生成されたVerilog-HDLの例を示す。
【００４０】
S4：レイテンシ情報抽出部２０４は、動作合成部２０３のログ結果よりレイテンシ情報を抽出する(図２７参照。なお、図２７では説明上分かりやすくするため、図１８の回路概念図とログ結果を紐付けしている)。
moduleA_Latency = 1
moduleB_Latency = 2
moduleC_Latency = 3
moduleD_Latency = 1
moduleE_Latency = 4
moduleF_Latency = 2
【００４１】
S5a：レイテンシパス算出部２０５の機能フローを図２８に示す。
S5a-1：抽出過程でパス分岐があることを示す分岐パスフラグがアサートしている場合は、分岐点のレイテンシ調整を実施する。図２３に基づく本説明例においては、S2a-2 においてPassEのmodule_B分岐パスレイテンシ調整優先フラグがアサートされているので(module_B_pri_adjust = 1)、module_B入力地点のレテンシ調整を実施する。S5a-2へ進む。
【００４２】
S5a-2：分岐パス(module_B)から入力までのレイテンシの合計を算出する。
Pass_B_IN1 Latency = moduleA Latency =1
Pass_B_IN2 Latency = moduleD_Latency + moduleC_Latency = 1 + 3 = 4
【００４３】
S5a-3：分岐Passの最大レイテンシを算出する。
Max_Latency = (Pass_B_IN1 Latency , Pass_B_IN2 Latency) = 4
【００４４】
S5a-4：分岐Passのレイテンシ値を計算する。
Adjust_B_IN1 Latency = Max_Latency - Pass_B_IN1 Latency = 4-1 = 3
Adjust_B_IN2 Latency = Max_Latency - Pass_B_IN2 Latency = 4-4 = 0
S5a-1へ戻る。
S5a-4より、Pass_B_IN1に3CLK Delayを挿入することになる(図２９参照)。
【００４５】
S5a-5：分岐パスフラグをクリアする。(module_B_pri_adjust = 0)
S5a-1へ戻る。
S5a-1：分岐パスフラグはアサートされていないので、S5a-6へ進む。
【００４６】
S5a-6：各Pass上にあるモジュールのレイテンシを合計する。この際、S5a-3で算出したレイテンシ値(Adjust_B_IN1 Latency)も含む。
Pass_E Latency = moduleA Latency + moduleB Latency + Adjust_B_IN1 Latency = 1+2+3 =6
Pass_F Latency = moduleC_Latency + moduleD_Latency + moduleE_Latency = 3+1+4 = 8
【００４７】
S5a-7：各Passの最大レイテンシを算出する。
Max_Latency = (Pass_E Latency , Pass_F Latency) = 8
【００４８】
S5a-8：最大レイテンシ値より各Passのレイテンシ挿入値を算出する。
Adjust_E_Latency = Max_Latency -  Pass_E_Latency = 8-6 = 2
Adjust_F_Latency = Max_Latency -  Pass_F_Latency = 8-8 = 0
S5a-8により、Pass_Eに 2CLK Delayを挿入することになる(図３０参照)。
【００４９】
S6：S5a-4/S5a-8で算出したレイテンシ値を図２６のHDLに挿入する(図２１参照)。
高位合成装置１が生成するモジュール「module_3delay」をmodule_top.vのモジュールAの出力(outA)の後段に挿入する。
「module_3delay」の出力(outA_3d)はモジュールBの入力に接続される。
また、「module_2delay」をmodule_top.vのモジュールBの出力(outB)の後段に挿入する。
「module_2delay」の出力(outB_2d)はモジュールFの入力に接続される。
本実施形態による処理の結果（図２１参照）により生成される回路は図３１となる。図３１に示す回路がデバイスに実装されることになる。
【００５０】
上記実施形態によれば、複数入力のあるモジュールで構成されるモジュール間のレイテンシ調整も自動化可能となる。
【００５１】
なお、上記実施形態では、レイテンシ情報の抽出を動作合成ログ結果から抽出したが、設計時にソースコード上に指定するディレクティブ情報からレイテンシ情報を抽出することが可能である。
【００５２】
(実施形態３)
実施形態３では、図３２に示す回路(概念)を例に、レイテンシ調整ポイントの最終モジュール出力に分岐(x)がある場合のモジュール間のレイテンシ調整(outAとoutBの遅延調整)を、図１，図２で示した高位合成装置１で実施する例である。なお、本実施形態３における高位合成装置１の概略構成は実施形態１(図４，図５)と等価であるため省略する。
【００５３】
図３３と図３４は、図３２の回路概念をsystemCで動作記述した例である。(図４の”動作記述”に相当する。)。
module_top.h/.ccはモジュールのI/O定義(IN1,IN2,OUT)及び、モジュール間接続を記述したものである。
module_*.h/.cc(*はA,B,Cを示す)はモジュールA,B,CのI/O定義、及び各モジュールの動作を記述したものである。
動作記述に記載している「META」はデータと複数のI/F制御信号をまとめた宣言である(METAは名称も含めて制御信号をユーザー定義できるSysemCの記述方法)。
module_top.hのmodule_Bの出力が2つあるが(outD1,outD2)、SystemCの記述上の制約である。  outB1,outB2は同じタイミングの同じ値の出力である。
なお、本発明と関係ない記述に関する説明は省略する。
【００５４】
図３５は、図３３と図３４の動作記述を本実施形態の高位合成装置１による高位合成結果例である(図４の"HDL記述"に相当する。)。本実施形態の高位合成装置１ではVerilog-HDLで生成された例である。
module_top.vはモジュールI/O(IN1,IN2,OUT)を記述及び、モジュール間の接続を記述したものである。
module_A〜C.vは各モジュールの動作をHDL記述したものである。
本実施形態によりmodule_top.vに記述している「module_2delay IN1_delay」、「module_3delay B_delay」を自動挿入し、module_2delay.v,module_3delay.vを自動生成する(従来なら、モジュール間の遅延を解析し、手挿入で実施することになる。)
さらに、module_B出力の分岐信号「branch_B」を自動生成し(図３５中の丸囲み数字１)、「branch_B」をmodule_Aのdin2に自動接続している(図３５中の丸囲み数字２)。「module_3delay B_delay」の出力(outB_3d)をmodule_Bに接続せず、module_Bの出力branch_B(=out_B)を接続することで、module_A入力のレイテンシ調整を保証する。
なお、本発明と関係ない記述に関する説明は省略する。
【００５５】
本実施形態の高位合成装置の処理手順を図３６の機能フローチャートを用いて説明する。なお、図２２に示した実施形態２の処理手順とほとんど同じであるが、レイテンシ調整パスの抽出処理（ステップＳ２ｂ）と、レイテンシ挿入処理（ステップＳ６ｂ）とが、異なる。
【００５６】
S1：module_top.ccに遅延調整ポイント(ADJUST(...))を指定する(図３７に遅延調整ポイントを指定する例を示す。以下、図３７に示した例に基づいて説明する。)。本実施形態では遅延調整ポイントは人手で選んだポイントをレイテンシ調整パス指定手段が指定する。引数には、レイテンシ調整したい信号を記載する。いくつでも記載可能だが、本実施形態では2個(outA,outB)とする。
【００５７】
S2b：レイテンシ調整パス抽出部２０２の機能フローを図３８に示す。パス抽出過程でパス分岐がある場合は、分岐点のレイテンシ調整を実施する。さらに、レイテンシ調整ポイントの最終出力モジュールに分岐パスの有無を見つける。
S2b-1 : (実施形態２と仕組みは同じ。)  ADJUSTの引数に記載している信号outA,outBから入力(IN1,IN2)までの入出力の接続関係及び、モジュールを抽出する。この場合、図３９に示すような接続関係及びモジュールが抽出される。
S2b-2 ：(実施形態２と仕組みは同じ。)  パス中に分岐パスがあるかいなかを判断する。図３６に基づく本説明例においては、PassEのmodule_Aに分岐パスがあるので、S2a-3に進み、module_A分岐パスレイテンシ調整優先フラグをアサートする(module_A_pri_adjust = 1)。
S2b-4：レイテンシ調整ポイント(outA,outB)の最終出力モジュールに分岐パスが歩かないかを判断する。図３６に基づく本説明例においては、PassFの調整ポイントoutBに分岐パスがあるので、S2a-5に進み、outB分岐パスフラグをアサートする(out_B_branch = 1)。
【００５８】
S3:動作合成部２０３は、moduleA〜Cの動作合成を実施する。Verilog-HDLが生成される。図４０に、生成されたVerilog-HDLの例を示す。
【００５９】
S4：レイテンシ情報抽出部２０４は、動作合成部２０３のログ結果よりレイテンシ情報を抽出する(図４１参照。なお、図４１では説明上分かりやすくするため、図３２の回路概念図とログ結果を紐付けしている)。
moduleA_Latency = 3
moduleB_Latency = 2
moduleC_Latency = 3
【００６０】
S5：レイテンシパス算出部２０５の機能フローを図４２に示す。(実施形態２の図２８と同じ)
S5-1：抽出過程でパス分岐があることを示す分岐パスフラグがアサートしている場合は、分岐点のレイテンシ調整を実施する。図３２に基づく本説明例においては、S2a-2 においてPassEのmodule_A分岐パスレイテンシ調整優先フラグがアサートされているので(module_A_pri_adjust = 1)、module_A入力地点のレテンシ調整を実施する。S5-2へ進む。
【００６１】
S5a-2：分岐パス(module_A)から入力までのレイテンシの合計を算出する。
Pass_A_IN1 Latency = 0
Pass_A_IN2 Latency = moduleB_Latency = 2
【００６２】
S5a-3：分岐Passの最大レイテンシを算出する。
Max_Latency = (Pass_A_IN1 Latency , Pass_A_IN2 Latency) = 2
【００６３】
S5-4：分岐Passのレイテンシ値を計算する。
Adjust_A_IN1 Latency = Max_Latency - Pass_A_IN1 Latency = 2-0 = 2
Adjust_A_IN2 Latency = Max_Latency - Pass_A_IN2 Latency = 2-2 = 0
S5-1へ戻る。
S5-4より、Pass_A_IN1に2CLK Delayを挿入することになる(図４３参照)。
【００６４】
S5a-5：分岐パスフラグをクリアする。(module_A_pri_adjust = 0)
S5a-1へ戻る。
S5-1：分岐パスフラグはアサートされていないので、S5-6へ進む。
【００６５】
S5a-6：各Pass上にあるモジュールのレイテンシを合計する。この際、S5-3で算出したレイテンシ値(Adjust_A_IN1 Latency)も含む。
Pass_E Latency = moduleA Latency + Adjust_B_IN1 Latency = 3+2 = 5
Pass_F Latency = moduleB_Latency = 2
【００６６】
S5-7：各Passの最大レイテンシを算出する。
Max_Latency = (Pass_E Latency , Pass_F Latency) = 5
【００６７】
S5-8：最大レイテンシ値より各Passのレイテンシ挿入値を算出する。
Adjust_E_Latency = Max_Latency -  Pass_E_Latency = 5-5 = 0
Adjust_F_Latency = Max_Latency -  Pass_F_Latency = 5-2 = 3
S5-8により、Pass_Fに 3CLK Delayを挿入することになる(挿入位置は後述)。
【００６８】
S6b：レイテンシ挿入部２０６の機能フローを図４４に示す。
本実施形態では、S5-4/S5-8で算出したレイテンシ値を図４０のHDLに挿入する。
最終出力分岐パスフラグがアサートしている場合は、最終モジュール出力経路から分岐経路パスを生成し、分岐経路パスを分岐先のモジュールに接続する。S5-4で算出したレイテンシ値は最終出力分岐パスフラグがアサートしている。なお、図３２に示す回路(概念)におけるS5-4,S5-8で算出したレイテンシを挿入した様子は図４５となる。
S5-4で算出したレイテンシの挿入フローを下記に示す。
【００６９】
S6b-1：S5-8で算出したレイテンシ最終出力分岐パスフラグがアサートしているのでS6b-2へ遷移する。
S6b-3：S5-8で挿入すべきレイテンシ挿入箇所の最終モジュール(module_B)出力(outB)経路から分岐経路パス(branch_B)を生成する。(生成された様子は図３５中の丸囲み数字１を参照)
S6b-4：分岐経路パス(branch_B)を分岐先のモジュール(module_A)に接続に接続する。(接続の様子は図３５中の丸囲み数字２を参照)
S6b-5：最終モジュール(module_B)出力(outB)の後段にレイテンシ「module_3delay B_delay」挿入する(図３５中の丸囲み数字３を参照)。
「module_3delay B_delay」の出力(outB_3d)はmodule_Cの入力に接続される。
【００７０】
なお、S5-8で算出したレイテンシは最終出力分岐パスフラグがアサートしていないので挿入経路にレイテンシを挿入することになる(S6b-1においてS6b-2へ遷移)。(図３５のmodule_2delay IN1_delay参照)
【００７１】
本実施形態による処理の結果（図３５参照）により生成される回路は図４６となる。図４６に示す回路がデバイスに実装されることになる。
【００７２】
上記実施形態によれば、調整パスの調整ポイント(モジュールBのoutB)に他モジュール(モジュールA)への分岐パスのある場合でも、適切な位置にレイテンシを自動挿入が可能となる。(適切ではないレイテンシ挿入例：図４７を参照)
【００７３】
なお、上記実施形態では、レイテンシ情報の抽出を動作合成ログ結果から抽出したが、設計時にソースコード上に指定するディレクティブ情報からレイテンシ情報を抽出することが可能である。
【００７４】
以上に説明した各実施形態によれば、高位合成設計において、特に周波数upによる再利用時に、レイテンシの再設計を自動化できる。すなわち、モジュール間のレイテンシ調整を行い、スループットの最適化を行うことが可能になる。
【００７５】
また、上記各実施形態によれば、レイテンシ調整パス抽出部２０２がレイテンシ調整ポイントから入力ポイントまでのパスを抽出するため、任意のポイントのレイテンシ調整が可能となる。
【００７６】
また、上記各実施形態によれば、レイテンシ情報抽出の際、高位合成ログ結果及びディレクティブ情報（設計時にソースコード上に指定）の少なくともいずれか一方に基づいてレイテンシ算出情報を抽出する。そのため、ユーザーの理解しやすい情報からレイテンシ情報を得ることができる効果を有する。
【００７７】
また、上記各実施形態によれば、レイテンシ算出アルゴリズムが容易となり、PC負荷が軽くなる効果がある。
【００７８】
また、上記各実施形態によれば、人手を介さず、レイテンシを挿入することが可能となる。人的な接続ミスもなくなる。
【００７９】
また、上記実施形態２によれば、複数入力のあるモジュールで構成されるモジュール間のレイテンシ調整も自動化可能となる。また、複数入力のあるモジュールで構成されるモジュール間のレイテンシ調整も自動化可能となる。
【００８０】
また、上記実施形態３によれば、調整パスの調整ポイントに他モジュールへの分岐パスのある場合でも、分岐パスに接続しているモジュールの入力タイミングも保持しながらレイテンシ調整が可能となる。
【符号の説明】
【００８１】
１    高位合成装置
１１０    コンピュータ本体
１２０    ネットワーク
２０１    レイテンシ調整パス指定部
２０２    レイテンシ調整パス抽出部
２０３    動作合成部
２０４    レイテンシ情報抽出部
２０５    レイテンシ算出部
２０５ａ    各パスのレイテンシの合計算出部
２０５ｂ    最大レイテンシ算出部
２０５ｃ    レイテンシ挿入値計算部
２０６    レイテンシ挿入部
【先行技術文献】
【特許文献】
【００８２】
【特許文献１】特許第３７６３７００号公報
【図１】
2010165334.tif 000003
【図２】
2010165334.tif 000004
【図３】
2010165334.tif 000005
【図４】
2010165334.tif 000006
【図５】
2010165334.tif 000007
【図６】
2010165334.tif 000008
【図７】
2010165334.tif 000009
【図８】
2010165334.tif 000010
【図９】
2010165334.tif 000011
【図１０】
2010165334.tif 000012
【図１１】
2010165334.tif 000013
【図１２】
2010165334.tif 000014
【図１３】
2010165334.tif 000015
【図１４】
2010165334.tif 000016
【図１５】
2010165334.tif 000017
【図１６】
2010165334.tif 000018
【図１７】
2010165334.tif 000019
【図１８】
2010165334.tif 000020
【図１９】
2010165334.tif 000021
【図２０】
2010165334.tif 000022
【図２１】
2010165334.tif 000023
【図２２】
2010165334.tif 000024
【図２３】
2010165334.tif 000025
【図２４】
2010165334.tif 000026
【図２５】
2010165334.tif 000027
【図２６】
2010165334.tif 000028
【図２７】
2010165334.tif 000029
【図２８】
2010165334.tif 000030
【図２９】
2010165334.tif 000031
【図３０】
2010165334.tif 000032
【図３１】
2010165334.tif 000033
【図３２】
2010165334.tif 000034
【図３３】
2010165334.tif 000035
【図３４】
2010165334.tif 000036
【図３５】
2010165334.tif 000037
【図３６】
2010165334.tif 000038
【図３７】
2010165334.tif 000039
【図３８】
2010165334.tif 000040
【図３９】
2010165334.tif 000041
【図４０】
2010165334.tif 000042
【図４１】
2010165334.tif 000043
【図４２】
2010165334.tif 000044
【図４３】
2010165334.tif 000045
【図４４】
2010165334.tif 000046
【図４５】
2010165334.tif 000047
【図４６】
2010165334.tif 000048
【図４７】
2010165334.tif 000049
【図４８】
2010165334.tif 000050