(57)【特許請求の範囲】
【請求項１】
対象ソースプログラムの中の複数の関数のそれぞれがソフトウェアで実装される場合について各関数の実行に要するソフトウェア処理時間を算出するソフトウェア検討部と、
前記対象ソースプログラムに基づいて、前記複数の関数における関数間のデータフローを示す関数間データフローグラフを生成するデータフローグラフ生成部と、
各関数がハードウェアで実装される複数のハードウェア実装パターンに対して、前記対象ソースプログラムに対する高位合成によって、各ハードウェア実装パターンの実行に要するハードウェア処理時間と、各ハードウェア実装パターンの実装に要する回路規模と、を算出するハードウェア検討部と、
各関数のソフトウェア処理時間と、各関数のハードウェア処理時間と、各関数の回路規模と、前記関数間データフローグラフと、に基づいて、ソフトウェアで実装される１つ以上の関数とハードウェアで実装される１つ以上の関数との実装組み合わせを選択する実装組み合わせ選択部と、
を備え、
前記ハードウェア検討部は、統合されることによってハードウェア処理時間が短縮される２つ以上の関数を前記関数間データフローグラフに基づいて探し、見つかった２つ以上の関数が統合されるハードウェア実装パターンを生成し、各ハードウェア実装パターンにしたがって前記対象ソースプログラムに対する高位合成を行うことによって各ハードウェア実装パターンにおける各関数のハードウェア処理時間と各ハードウェア実装パターンにおける各関数の回路規模とを算出する
設計支援システム。
【請求項２】
対象ソースプログラムの中の複数の関数のそれぞれがソフトウェアで実装される場合について各関数の実行に要するソフトウェア処理時間を算出するソフトウェア検討部と、
前記対象ソースプログラムに基づいて、前記複数の関数における関数間のデータフローを示す関数間データフローグラフを生成するデータフローグラフ生成部と、
各関数がハードウェアで実装される複数のハードウェア実装パターンに対して、前記対象ソースプログラムに対する高位合成によって、各ハードウェア実装パターンの実行に要するハードウェア処理時間と、各ハードウェア実装パターンの実装に要する回路規模と、を算出するハードウェア検討部と、
各関数のソフトウェア処理時間と、各関数のハードウェア処理時間と、各関数の回路規模と、前記関数間データフローグラフと、に基づいて、ソフトウェアで実装される１つ以上の関数とハードウェアで実装される１つ以上の関数との実装組み合わせを選択する実装組み合わせ選択部と、
を備え、
前記実装組み合わせ選択部は、順次に実行される２つ以上の関数と並列に実行される２つ以上の関数とを前記関数間データフローグラフに基づいて実装組み合わせ毎に特定し、特定結果と各関数のソフトウェア処理時間と各ハードウェア実装パターンにおける各関数のハードウェア処理時間とに基づいて各関数が実行される時間帯を示す実行時間帯データを実装組み合わせ毎に生成し、各実装組み合わせの実行時間帯データに基づいて所要時間についての要件である所要時間要件を満たす実装組み合わせを選択し、回路規模についての要件である回路規模要件を満たす実装組み合わせを選択する
設計支援システム。
【請求項３】
前記実装組み合わせ選択部は、前記関数間データフローグラフに基づいて前記複数の関数の実行順を特定し、連続して実行される２つの関数の間でのデータ転送に要する時間であるデータ転送時間を考慮して、前記所要時間要件を満たす実装組み合わせを選択する
請求項２に記載の設計支援システム。
【請求項４】
前記設計支援システムは、
前記対象ソースプログラムに基づいて各関数の入出力データ量を特定し、各関数の入出力データ量に対する転送時間を算出する転送時間算出部を備え、
前記実装組み合わせ選択部は、前記２つの関数のそれぞれの転送時間に基づいて前記データ転送時間を特定する
請求項３に記載の設計支援システム。
【請求項５】
前記設計支援システムは、
前記対象ソースプログラムの中の前記複数の関数のために選択された実装組み合わせに対して機械学習を行うことによって、選択される実装組み合わせの候補となる１つ以上の実装組み合わせを特定する学習モデルを更新する学習部を備え、
前記実装組み合わせ選択部は、新たな対象ソースプログラムの中の新たな複数の関数のための実装組み合わせの候補となる１つ以上の実装組み合わせを前記学習モデルを実行することによって特定し、特定された１つ以上の実装組み合わせの中から前記新たな複数の関数のための実装組み合わせを選択する
請求項１から請求項４のいずれか１項に記載の設計支援システム。
【請求項６】
対象ソースプログラムの中の複数の関数のそれぞれがソフトウェアで実装される場合について各関数の実行に要するソフトウェア処理時間を算出するソフトウェア検討処理と、
前記対象ソースプログラムに基づいて、前記複数の関数における関数間のデータフローを示す関数間データフローグラフを生成するデータフローグラフ生成処理と、
各関数がハードウェアで実装される複数のハードウェア実装パターンに対して、前記対象ソースプログラムに対する高位合成によって、各ハードウェア実装パターンの実行に要するハードウェア処理時間と、各ハードウェア実装パターンの実装に要する回路規模と、を算出するハードウェア検討処理と、
各関数のソフトウェア処理時間と、各関数のハードウェア処理時間と、各関数の回路規模と、前記関数間データフローグラフと、に基づいて、ソフトウェアで実装される１つ以上の関数とハードウェアで実装される１つ以上の関数との実装組み合わせを選択する実装組み合わせ選択処理と、
をコンピュータに実行させるための設計支援プログラムであって、
前記ハードウェア検討処理は、統合されることによってハードウェア処理時間が短縮される２つ以上の関数を前記関数間データフローグラフに基づいて探し、見つかった２つ以上の関数が統合されるハードウェア実装パターンを生成し、各ハードウェア実装パターンにしたがって前記対象ソースプログラムに対する高位合成を行うことによって各ハードウェア実装パターンにおける各関数のハードウェア処理時間と各ハードウェア実装パターンにおける各関数の回路規模とを算出する
設計支援プログラム。
【請求項７】
対象ソースプログラムの中の複数の関数のそれぞれがソフトウェアで実装される場合について各関数の実行に要するソフトウェア処理時間を算出するソフトウェア検討処理と、
前記対象ソースプログラムに基づいて、前記複数の関数における関数間のデータフローを示す関数間データフローグラフを生成するデータフローグラフ生成処理と、
各関数がハードウェアで実装される複数のハードウェア実装パターンに対して、前記対象ソースプログラムに対する高位合成によって、各ハードウェア実装パターンの実行に要するハードウェア処理時間と、各ハードウェア実装パターンの実装に要する回路規模と、を算出するハードウェア検討処理と、
各関数のソフトウェア処理時間と、各関数のハードウェア処理時間と、各関数の回路規模と、前記関数間データフローグラフと、に基づいて、ソフトウェアで実装される１つ以上の関数とハードウェアで実装される１つ以上の関数との実装組み合わせを選択する実装組み合わせ選択処理と、
をコンピュータに実行させるための設計支援プログラムであって、
前記実装組み合わせ選択処理は、順次に実行される２つ以上の関数と並列に実行される２つ以上の関数とを前記関数間データフローグラフに基づいて実装組み合わせ毎に特定し、特定結果と各関数のソフトウェア処理時間と各ハードウェア実装パターンにおける各関数のハードウェア処理時間とに基づいて各関数が実行される時間帯を示す実行時間帯データを実装組み合わせ毎に生成し、各実装組み合わせの実行時間帯データに基づいて所要時間についての要件である所要時間要件を満たす実装組み合わせを選択し、回路規模についての要件である回路規模要件を満たす実装組み合わせを選択する
設計支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システム設計を支援するための技術に関するものである。
【背景技術】
【０００２】
組み込みシステムの開発において、ソフトウェア（Ｓ／Ｗ）に割り当てる処理とハードウェア（Ｈ／Ｗ）に割り当てる処理とについての検討が要求仕様に基づいて行われる。
このような検討は「Ｓ／Ｗ−Ｈ／Ｗ分割」と呼ばれる。【０００３】
一般的に、処理の高速化のためにハードウェアが活用され、システムの縮小化のためにソフトウェアが活用される。
ソフトウェアに割り当てる処理とハードウェアに割り当てる処理との組み合わせは膨大であり、適切な組み合わせを人手で判断することは困難である。また、選ばれた組み合わせが要求性能を満たさないことが分かった場合、Ｓ／Ｗ−Ｈ／Ｗ分割をやり直す必要がある。
そこで、Ｓ／Ｗ−Ｈ／Ｗ分割を定量的に自動で行う方法が求められている。【０００４】
特許文献１は、Ｓ／Ｗ−Ｈ／Ｗ分割のための技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１７／１３５２１９号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１の技術は、全ての組み合わせを検討し、各組み合わせについて使用リソース量、通信帯域および性能を提示する。
そのため、利用者は、提示された情報に基づいて、適切な組み合わせを判断しなければならない。【０００７】
本発明は、対象システムの動作が記述されたソースプログラム（対象ソースプログラム）に基づいて、ソフトウェアで実装される１つ以上の関数とハードウェアで実装される１つ以上の関数との適切な実装組み合わせを提示できるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
本発明の設計支援システムは、
対象ソースプログラムの中の複数の関数のそれぞれがソフトウェアで実装される場合について各関数の実行に要するソフトウェア処理時間を算出するソフトウェア検討部と、
前記対象ソースプログラムに基づいて、前記複数の関数における関数間のデータフローを示す関数間データフローグラフを生成するデータフローグラフ生成部と、
前記対象ソースプログラムに対する高位合成によって、各関数の実行に要するハードウェア処理時間と、各関数の実装に要する回路規模と、を算出するハードウェア検討部と、
各関数のソフトウェア処理時間と、各関数のハードウェア処理時間と、各関数の回路規模と、前記関数間データフローグラフと、に基づいて、ソフトウェアで実装される１つ以上の関数とハードウェアで実装される１つ以上の関数との実装組み合わせを選択する実装組み合わせ選択部と、を備える。
【発明の効果】
【０００９】
本発明によれば、対象ソースプログラムの中の複数の関数について、各関数のソフトウェア処理時間と各関数のハードウェア処理時間と各関数の回路規模が算出される。そして、これらの情報に加えて関数間データフローグラフを利用して実装組み合わせが選択される。関数間データフローグラフは関数間の依存関係を明らかにする。
したがって、関数間の依存関係に基づく適切な実装組み合わせを提示することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１における設計支援システム１００Ｓの構成図。
【図２】実施の形態１における対象システム２００の構成図。
【図３】実施の形態１における設計支援方法のフローチャート。
【図４】実施の形態１におけるループ処理の一例を示す図。
【図５】実施の形態１におけるパイプライン化された一連の処理を示す図。
【図６】実施の形態１におけるソースプログラムの一例を示す図。
【図７】実施の形態１における関数統合の一例を示す図。
【図８】実施の形態１における関数統合前のタイミングチャートを示す。
【図９】実施の形態１における関数統合後の処理時間を示す。
【図１０】実施の形態１における関数統合後のタイミングチャートを示す。
【図１１】実施の形態１におけるスループットの改善例（改善前）を示す図。
【図１２】実施の形態１におけるスループットの改善例（改善後）を示す図。
【図１３】実施の形態１におけるスループットの改善例を示す図。
【図１４】実施の形態２における設計支援システム１００Ｓの構成図。
【図１５】実施の形態２における設計支援方法のフローチャート。
【図１６】各実施の形態における設計支援装置１００のハードウェア構成図。
【発明を実施するための形態】
【００１１】
実施の形態および図面において、同じ要素または対応する要素には同じ符号を付している。説明した要素と同じ符号が付された要素の説明は適宜に省略または簡略化する。図中の矢印はデータの流れ又は処理の流れを主に示している。
【００１２】
実施の形態１．
システム設計を支援する設計支援システム１００Ｓについて、図１から図１３に基づいて説明する。
【００１３】
＊＊＊構成の説明＊＊＊
図１に基づいて、設計支援システム１００Ｓの構成を説明する。
設計支援システム１００Ｓは、設計支援装置１００によって実現される。
但し、設計支援システム１００Ｓは、複数の装置によって実現されてもよい。つまり、設計支援装置１００の機能は、複数の装置によって実現されてもよい。
【００１４】
設計支援装置１００は、プロセッサ１０１とメモリ１０２と補助記憶装置１０３と通信装置１０４と入出力インタフェース１０５といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【００１５】
プロセッサ１０１は、演算処理を行うＩＣであり、他のハードウェアを制御する。例えば、プロセッサ１０１は、ＣＰＵ、ＤＳＰまたはＧＰＵである。
ＩＣは、Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略称である。
ＣＰＵは、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略称である。
ＤＳＰは、Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒの略称である。
ＧＰＵは、Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略称である。
【００１６】
メモリ１０２は揮発性または不揮発性の記憶装置である。メモリ１０２は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ１０２はＲＡＭである。メモリ１０２に記憶されたデータは必要に応じて補助記憶装置１０３に保存される。
ＲＡＭは、Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略称である。
【００１７】
補助記憶装置１０３は不揮発性の記憶装置である。例えば、補助記憶装置１０３は、ＲＯＭ、ＨＤＤまたはフラッシュメモリである。補助記憶装置１０３に記憶されたデータは必要に応じてメモリ１０２にロードされる。
ＲＯＭは、Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙの略称である。
ＨＤＤは、Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅの略称である。
【００１８】
通信装置１０４はレシーバ及びトランスミッタである。例えば、通信装置１０４は通信チップまたはＮＩＣである。
ＮＩＣは、Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄの略称である。
【００１９】
入出力インタフェース１０５は、入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース１０５はＵＳＢ端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
ＵＳＢは、Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓの略称である。
【００２０】
設計支援装置１００は、受付部１１０と解析部１２０とハードウェア検討部１３０と実装組み合わせ選択部１４０と出力部１５０といった要素を備える。
解析部１２０は、データフローグラフ生成部１２１とソフトウェア検討部１２２と転送時間算出部１２３といった要素を備える。
ハードウェア検討部１３０は、パターン生成部１３１と高位合成部１３２といった要素を備える。
これらの要素はソフトウェアで実現される。
【００２１】
補助記憶装置１０３には、受付部１１０と解析部１２０とハードウェア検討部１３０と実装組み合わせ選択部１４０と出力部１５０としてコンピュータを機能させるための設計支援プログラムが記憶されている。設計支援プログラムは、メモリ１０２にロードされて、プロセッサ１０１によって実行される。
補助記憶装置１０３には、さらに、ＯＳが記憶されている。ＯＳの少なくとも一部は、メモリ１０２にロードされて、プロセッサ１０１によって実行される。
プロセッサ１０１は、ＯＳを実行しながら、設計支援プログラムを実行する。
ＯＳは、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍの略称である。
【００２２】
設計支援プログラムの入出力データは記憶部１９０に記憶される。
メモリ１０２は記憶部１９０として機能する。但し、補助記憶装置１０３、プロセッサ１０１内のレジスタおよびプロセッサ１０１内のキャッシュメモリなどの記憶装置が、メモリ１０２の代わりに、又は、メモリ１０２と共に、記憶部１９０として機能してもよい。
【００２３】
設計支援装置１００は、プロセッサ１０１を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ１０１の機能を分担する。
【００２４】
設計支援プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータ読み取り可能に記録（格納）することができる。
【００２５】
＊＊＊動作の説明＊＊＊
設計支援装置１００の動作の手順は設計支援方法に相当する。また、設計支援装置１００の動作の手順は設計支援プログラムによる処理の手順に相当する。
【００２６】
設計支援方法は、ソフトウェアとハードウェアとによって構成されるシステムの設計を支援するための方法である。
設計の対象となるシステムを「対象システム」と称する。
対象システムの具体例は各種の組込みシステムである。
【００２７】
図２に基づいて、対象システム２００の構成を説明する。
対象システム２００は、プロセッサ２０１と集積回路２０２とバス２０９とを備える。
プロセッサ２０１は、対象システム２００の機能の一部をソフトウェアで実装するための要素である。プロセッサ２０１の具体例はＣＰＵである。
集積回路２０２は、対象システム２００の機能の一部をハードウェアで実装するための要素である。集積回路２０２の具体例はＦＰＧＡである。ＦＰＧＡはＦｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略称である。
プロセッサ２０１と集積回路２０２は、バス２０９を介してデータを通信する。
【００２８】
図３に基づいて、設計支援方法の手順を説明する。
ステップＳ１１０において、利用者は、対象ソースプログラムを設計支援装置１００に入力する。
受付部１１０は、入力された対象ソースプログラムを受け付け、受け付けた対象ソースプログラムを記憶部１９０に記憶する。
対象ソースプログラムは、対象システムの動作が記述されたソースプログラムである。例えば、対象ソースプログラムはＣ言語で記述される。
対象ソースプログラムは、複数の関数を含む。各関数は、対象ソースプログラムの機能の一部を実現する。
【００２９】
さらに、利用者は、要件データを設計支援装置１００に入力する。
受付部１１０は、入力された要件データを受け付け、受け付けた要件データを記憶部１９０に記憶する。
要件データは、対象システムに対する要件を指定するデータであり、所要時間要件と回路規模要件とを含む。
所要時間要件は、対象システムによる一連の処理の実行に要する時間（所要時間）についての要件である。
回路規模要件は、集積回路の規模（回路規模）についての要件である。
【００３０】
ステップＳ１２０において、解析部１２０は、対象ソースプログラムを解析する。
具体的には、データフローグラフ生成部１２１、ソフトウェア検討部１２２および転送時間算出部１２３が、対象ソースプログラムに基づいて、以下のように動作する。
【００３１】
データフローグラフ生成部１２１は、対象ソースプログラムの中の複数の関数についてのデータフローを示すグラフを生成する。生成されるグラフを「データフローグラフ」と称する。
具体的には、データフローグラフ生成部１２１は、関数間データフローグラフと関数内データフローグラフとを生成する。
関数間データフローグラフは、関数間のデータフローを示す。例えば、関数間データフローグラフは、各関数の引数によって特定される関数間の依存関係（データ入出力の関係）に基づいて生成される。関数間データフローグラフを参照することにより、関数間の依存関係が分かるため、各関数の実行順序が特定される。そして、順次に実行される２つ以上の関数、および、並列に実行される２つ以上の関数、が特定される。
関数内データフローグラフは、関数内のデータフローを示す。例えば、関数内データフローグラフは、関数内の各処理の変数によって特定される処理間の依存関係に基づいて生成される。関数内データフローグラフを参照することにより、処理間の依存関係が分かるため、各処理の実行順序が特定される。そして、順次に実行される２つ以上の処理、および、並列に実行される２つ以上の処理、が特定される。
【００３２】
ソフトウェア検討部１２２は、対象ソースプログラムの中の複数の関数のそれぞれがソフトウェアで実装される場合について、各関数の実行に要する時間を算出する。算出される時間を「ソフトウェア処理時間」と称する。
例えば、ソフトウェア処理時間は、プロファイリングと呼ばれるツールを利用することによって算出される。ツールの具体例はｇｐｒｏｆである。
【００３３】
まず、転送時間算出部１２３は、対象ソースプログラムの中の複数の関数のそれぞれの入出力データ量を特定する。入出力データ量は、入力または出力されるデータの量である。例えば、入出力データ量はビット数で表される。
そして、転送時間算出部１２３は、各関数の入出力データ量に対する転送時間を算出する。転送時間は、データの転送に要する時間である。
例えば、転送時間は、「転送時間＝ビット量÷バス幅÷動作周波数」という式を計算することによって算出される。
【００３４】
ステップＳ１３０において、ハードウェア検討部１３０は、対象ソースプログラムに対する高位合成によって、各関数のハードウェア処理時間と、各関数の回路規模と、を算出する。
ハードウェア処理時間は、各関数がハードウェアで実装される場合に各関数の実行に要する時間である。
回路規模は、各関数がハードウェア（回路）で実装される場合に各関数の実装に要する規模である。
【００３５】
具体的には、パターン生成部１３１および高位合成部１３２が以下のように動作する。
パターン生成部１３１は、データフローグラフに基づいて、複数のハードウェア実装パターンを生成する。
ハードウェア実装パターンは、対象ソースプログラムの中の各関数がハードウェアで実装されるパターンである。
各ハードウェア実装パターンは、高位合成のためのパラメータとして使用される。例えば、各ハードウェア実装パターンは、高位合成ツールのオプションを利用して指定される。
【００３６】
例えば、パターン生成部１３１は、各ハードウェア実装パターンを以下のように生成する。
パターン生成部１３１は、統合されることによってハードウェア処理時間が短縮される２つ以上の関数を関数間データフローグラフに基づいて探す。そして、パターン生成部１３１は、見つかった２つ以上の関数が統合されるハードウェア実装パターンを生成する。「関数統合」について後述する。
パターン生成部１３１は、各関数の中の複数の処理のうちパイプライン化されることによってハードウェア処理時間が短縮される２つ以上の処理を各関数の関数内データフローグラフに基づいて探す。そして、パターン生成部１３１は、見つかった２つ以上の処理がパイプライン化されるハードウェア実装パターンを生成する。「パイプライン化」について後述する。
パターン生成部１３１は、各関数の中の複数の処理のうち並列化されることによってハードウェア処理時間が短縮される２つ以上の処理を各関数の関数内データフローグラフに基づいて探す。そして、パターン生成部１３１は、見つかった２つ以上の関数が並列化されるハードウェア実装パターンを生成する。「並列化」について後述する。
【００３７】
パターン生成部１３１は、各関数の中の複数の演算のうち種類が同じである２つ以上の演算を対象ソースプログラムの中の各関数のソースプログラムに基づいて探す。そして、パターン生成部１３１は、見つかった２つ以上の演算を１つの演算に統合するために対象ソースプログラムの中の各関数のソースプログラムを書き替える。これにより、演算回路の共有が可能になる。「回路共有」について後述する。
【００３８】
高位合成部１３２は、各ハードウェア実装パターンにしたがって対象ソースプログラムに対する高位合成を行う。
これにより、各ハードウェア実装パターンにおける各関数のハードウェア処理時間と、各ハードウェア実装パターンにおける各関数の回路規模と、が算出される。
【００３９】
ステップＳ１４０において、実装組み合わせ選択部１４０は、各種データに基づいて実装組み合わせを選択する。
各種データは、各関数のソフトウェア処理時間、各ハードウェア実装パターンにおける各関数のハードウェア処理時間、各ハードウェア実装パターンにおける各関数の回路規模、および、データフローグラフである。
実装組み合わせは、ソフトウェアで実装される１つ以上の関数とハードウェアで実装される１つ以上の関数との組み合わせである。
【００４０】
具体的には、実装組み合わせ選択部１４０は、所要時間要件と回路規模要件とを満たす実装組み合わせを選択する。選択される実装組み合わせを「適合組み合わせ」と称する。
適合組み合わせは、例えば、線形計画法を利用することによって選択することができる。
【００４１】
所要時間要件を満たす実装組み合わせは以下のように特定される。
まず、実装組み合わせ選択部１４０は、順次に実行される２つ以上の関数と並列に実行される２つ以上の関数とを関数間データフローグラフに基づいて実装組み合わせ毎に特定する。
ソフトウェアによる実装の場合、対象システムに備わるプロセッサ（コア）の数以下の数の関数を並列に実装することが可能である。しかし、対象システムに備わるプロセッサ（コア）の数を超える数の関数を並列に実装することは可能でない。例えば、対象システムに備わるプロセッサがシングルコアプロセッサである場合、ソフトウェアで実装される２つ以上の関数を並列に実装することは可能でない。
ハードウェアによる実装の場合、２つ以上の関数を並列に実装することが可能である。
【００４２】
次に、実装組み合わせ選択部１４０は、特定結果と、各関数のソフトウェア処理時間と、各ハードウェア実装パターンにおける各関数のハードウェア処理時間と、に基づいて、実行時間帯データを実装組み合わせ毎に生成する。
実行時間帯データは、各関数が実行される時間帯を示す。順次に実行される２つ以上の関数は、異なる時間帯に実行される。並列に実行される２つ以上の関数は、同じ時間帯に実行される。
各関数が実行される時間帯は、連続して実行される２つの関数の間でのデータ転送に要する時間（データ転送時間）を考慮して算出される。つまり、先の関数の実行が完了してデータ転送時間が経過したタイミングで、後の関数の実行が開始される。
例えば、実装組み合わせ選択部１４０は、関数間データフローグラフに基づいて、複数の関数の実行順を特定する。そして、実装組み合わせ選択部１４０は、連続して実行される２つの関数から成る関数組毎に、関数間のデータ転送時間を特定する。
２つの関数の両方がソフトウェアで実装される場合、データ転送時間はゼロとみなすことができる。但し、この場合のデータ転送時間として、ゼロ以外の時間が設定されてもよい。
２つの関数の両方がハードウェアで実装される場合、データ転送時間はゼロとみなすことができる。但し、この場合のデータ転送時間として、ゼロ以外の時間が設定されてもよい。
２つの関数の一方がソフトウェアで実装されて２つの関数の他方がハードウェアで実装される場合、データ転送時間は、２つの関数のそれぞれの転送時間に基づいて特定される。例えば、先の関数の出力データ量に対する転送時間、または、後の関数の入力データ量に対する転送時間をデータ転送時間とみなすことができる。
【００４３】
そして、実装組み合わせ選択部１４０は、各実装組み合わせの実行時間帯データに基づいて、所要時間要件を満たす実装組み合わせを選択する。
例えば、実装組み合わせ選択部１４０は、各実装組み合わせの実行時間帯データに基づいて各実装組み合わせにおける所要時間を算出する。各実装組み合わせの実行時間帯データが示す全体の時間帯の長さが、各実装組み合わせにおける所要時間となる。そして、実装組み合わせ選択部１４０は、実装組み合わせ毎に、実装組み合わせにおける所要時間が所要時間要件を満たすか判定する。実装組み合わせにおける所要時間が所要時間要件を満たす場合、実装組み合わせは所要時間要件を満たす。
【００４４】
回路規模要件を満たす実装組み合わせは以下のように特定される。
まず、実装組み合わせ選択部１４０は、実装組み合わせにおける回路規模を算出する。
例えば、実装組み合わせ選択部１４０は、ハードウェアで実装される１つ以上の関数に対応する１つ以上の回路規模の合計を算出する。算出される合計が実装組み合わせにおける回路規模である。
そして、実装組み合わせ選択部１４０は、実装組み合わせにおける回路規模が回路規模要件を満たすか判定する。
実装組み合わせにおける回路規模が回路規模要件を満たす場合、実装組み合わせは回路規模要件を満たす。
【００４５】
適合組み合わせが複数存在する場合、実装組み合わせ選択部１４０は、各適合組み合わせにおける所要時間と各適合組み合わせにおける回路規模との少なくともいずれかに基づいて、最適な適合組み合わせを選択する。
例えば、実装組み合わせ選択部１４０は、所要時間が最短である適合組み合わせ、または、回路規模が最小である適合組み合わせ、を選択する。
【００４６】
ステップＳ１５０において、出力部１５０は、選択された適合組み合わせを出力する。
例えば、出力部１５０は、適合組み合わせをディスプレイに表示する。
【００４７】
以下に、図３のステップＳ１３０に関して「並列化」、「パイプライン化」、「回路共有」および「関数統合」を説明する。
【００４８】
まず、「並列化」について説明する。
並列化は、関数内のアーキテクチャである。並列化により、処理が高速化され、処理時間が短縮される。
逐次的に実行される複数の処理が並列に実行されることにより、並列に実行される処理の数に応じて処理時間が短縮される。
【００４９】
図４に、ループ処理の一例を示す。
式（１）は、１００回繰り返し実行される。各回の式（１）は独立している。例えば、「ｉ＝０」のときの式（１）である「Ａ［０］＝Ｂ［０］＋Ｃ［０］」と「ｉ＝１」のときの式（１）である「Ａ［１］＝Ｂ［１］＋Ｃ［１］」との間に依存関係はない。
高位合成ツールに対して、ループ展開の数（ループ数）を指定してオプション（ｕｎｒｏｌｌ  ｔｉｍｅｓ）を設定することができる。そして、高位合成ツールが実行されることにより、指定されたループ数に応じたＲＴＬが生成される。ＲＴＬはレジスタ転送レベルの略称である。
ループ数が多いほど並列処理数が増え、処理時間が短縮される。
【００５０】
次に、「パイプライン化」について説明する。
パイプライン化は、関数内のアーキテクチャである。パイプライン化により、処理が高速化され、処理時間が短縮される。
一連の処理が完了する前に次回の一連の処理が開始されることにより、スループットが向上する。具体的には、一連の処理において、各処理が完了したときに次回の各処理が開始される。
【００５１】
図５に、パイプライン化された一連の処理を示す。
一連の処理において、第１処理、第２処理、第３処理、第４処理の順に各処理が実行される。一連の処理によって、第１データ、第２データ、第３データ、第４データの順に各データが処理される。
一連の処理がパイプライン化されない場合（図示省略）、第１データに対する一連の処理が完了した後に、第２データに対する一連の処理が実行される。
一連の処理がパイプライン化された場合（図５参照）、第１データに対する第４処理が実行される間に、第２データに対する第３処理が実行され、第３データに対する第２処理が実行され、第４データに対する第１処理が実行される。これにより、スループットが向上する。
【００５２】
次に、「回路共有」について説明する。
回路共有は、関数内のアーキテクチャである。回路共有により、種類が同じである複数の演算で演算回路が共有され、回路規模が縮小される。
【００５３】
図６に、回路共有のための変更前後のソースプログラムの一例を示す。
ソースプログラム（１）は、変更前のソースプログラムである。
ソースプログラム（１）には、２つのループ処理が含まれる。変数ｉに基づくループ処理をループ処理（ｉ）と称し、変数ｊに基づくループ処理をループ処理（ｊ）と称する。
ループ処理（ｉ）では、演算Ａと演算Ｘが繰り返し実行される。
ループ処理（ｊ）では、演算Ａと演算Ｙが繰り返し実行される。
ソースプログラム（１）において、演算Ａは２箇所に記述されている。
【００５４】
ソースプログラム（２）は、変更後のソースプログラムである。
ソースプログラム（２）には、１つのループ処理が含まれる。このループ処理は、ループ処理（ｉ）とループ処理（ｊ）とを統合したものである。各回のループ処理において、演算Ａが実行された後、演算Ｘと演算Ｙとのうち変数ｘの値に基づいて選択される演算が実行される。
ソースプログラム（２）において、演算Ａは１箇所に記述されている。
ソースプログラム（１）をソースプログラム（２）へ変換することにより、ループ処理（ｉ）の演算Ａとループ処理（ｊ）の演算Ａとのために演算回路を共有することが可能となる。
【００５５】
回路共有のために、高位合成ツールが利用される。
高位合成ツールに対して、各演算器の共有の要否と各レジスタの共有の要否とを指定してオプションを設定することができる。演算器およびレジスタは演算回路を構成する要素である。
【００５６】
次に、「関数統合」について説明する。
関数統合は、複数の関数に跨るアーキテクチャ、つまり、関数間のアーキテクチャである。関数統合により、処理が高速化され、処理時間が短縮される。
具体的には、複数の関数が１つの関数に統合された後、複数の関数における複数の処理がパイプライン化されることにより、処理時間が短縮される。
【００５７】
図７に、関数統合の一例を示す。
関数統合前において、関数（１）の後に関数（２）が実行され、関数（２）の後に関数（３）が実行される。
関数（２）と関数（３）が関数（２，３）に統合された場合、関数（１）の後に関数（２，３）が実行される。
【００５８】
図８に、関数統合前のタイミングチャートを示す。
Ｓ／Ｗ時間（１）は、関数（１）がソフトウェアで実装された場合の関数（１）の処理時間である。
Ｈ／Ｗ時間（２）は、関数（２）がハードウェアで実装された場合の関数（２）の処理時間である。
Ｈ／Ｗ時間（３）は、関数（３）がハードウェアで実装された場合の関数（３）の処理時間である。
処理時間の間隔は、関数間のデータ転送時間を表している。
【００５９】
図９に、関数（２）と関数（３）が統合された場合の処理時間を示す。
関数（２）の処理が完了する前に関数（３）の処理を開始することができる場合、関数（２）と関数（３）を統合することによって、関数（２）および関数（３）の処理時間が短縮される。
【００６０】
図１０に、関数統合後のタイミングチャートを示す。
Ｈ／Ｗ時間（２，３）は、関数（２）と関数（３）が統合された場合の関数（２，３）の処理時間である。
関数（２）と関数（３）が統合されることにより、関数（１）、関数（２）および関数（３）の所要時間が短縮される。破線の四角は短縮される時間を表している。
【００６１】
図１１および図１２に、スループットの改善例を示す。
関数（１）から関数（５）の５つの関数によって一連の処理が実行される。
時間（１−５）は、１つのフレームに対する一連の処理に要する時間（所要時間）である。
あるフレームに対する一連の処理が完了した後に次のフレームに対する一連の処理が開始される場合（図１１参照）、３つのフレームに対する一連の処理の所要時間は、時間（１−５）の３倍以上の時間となる。
あるフレームに対する一連の処理が完了する前に次のフレームに対する一連の処理が開始される場合（図１２参照）、３つのフレームに対する一連の処理の所要時間は、時間（１−５）の３倍未満の時間となる。
図１２では、関数（４）によってフレーム（Ｘ）に対する処理が開始されると、関数（１）によってフレーム（Ｘ＋１）に対する処理が開始される。
【００６２】
図１３に、スループットの改善例を示す。
関数（１）から関数（５）のそれぞれのスループットが３０ｆｐｓであると仮定する。ｆｐｓは１秒当たりに処理されるフレームの数を意味する。
関数（３）と関数（４）が関数（３，４）に統合されたと仮定する。また、関数（３，４）のスループットが３０ｆｐｓであると仮定する。この場合、パイプラインの段数が削減され、関数（１）から関数（５）の全体のスループットが改善される。改善されるスループットは、３０ｆｐｓに相当する時間である。
【００６３】
＊＊＊実施の形態１の効果＊＊＊
実施の形態１によって、最適なＳ／Ｗ−Ｈ／Ｗ分割を自動で行うことができる。つまり、対象システムの要件を満たす実装組み合わせを自動で選択することができる。
そのため、Ｈ／Ｗ設計およびＳ／Ｗ設計の経験がない者であっても、適切な実装組み合わせを得ることができる。
【００６４】
設計支援システム１００Ｓは、対象ソースプログラムの中の複数の関数について、各関数のソフトウェア処理時間と各関数の転送時間と各関数のハードウェア処理時間と各関数の回路規模を算出する。そして、設計支援システム１００Ｓは、これらの情報に加えてデータフローグラフを利用して実装組み合わせを選択する。データフローグラフは関数間（または処理間）の依存関係を明らかにする。
したがって、関数間（または処理間）の依存関係に基づく適切な実装組み合わせを提示することが可能となる。
【００６５】
実施の形態２．
実装組み合わせの選択結果を学習する形態について、主に実施の形態１と異なる点を図１４および図１５に基づいて説明する。
【００６６】
＊＊＊構成の説明＊＊＊
図１４に基づいて、設計支援装置１００の構成を説明する。
設計支援装置１００は、さらに、学習部１６０を備える。
設計支援プログラムは、さらに、学習部１６０としてコンピュータを機能させる。
【００６７】
＊＊＊動作の説明＊＊＊
図１５に基づいて、設計支援方法の手順を説明する。
ステップＳ２１０からステップＳ２３０は、実施の形態１におけるステップＳ１１０からステップＳ１３０と同じである。
【００６８】
ステップＳ２４０において、実装組み合わせ選択部１４０は、所要時間要件と回路規模要件とを満たす実装組み合わせ（適合組み合わせ）を選択する。
ステップＳ２４０は、実施の形態１におけるステップＳ１４０に相当する。但し、ステップＳ２４０の一部は、実施の形態１におけるステップＳ１４０と異なる。
【００６９】
まず、実装組み合わせ選択部１４０は、学習モデルを実行することによって、対象ソースプログラムの中の複数の関数のための実装組み合わせの候補となる１つ以上の実装組み合わせを特定する。
学習モデルは、選択される実装組み合わせの候補となる１つ以上の実装組み合わせを特定する機能を有する。学習モデルは、ソフトウェア、ハードウェアまたはこれらの組み合わせで実現される。学習モデルは、学習器または学習モジュールとも呼ばれる。
例えば、実装組み合わせ選択部１４０は、対象ソースプログラムの中の複数の関数のそれぞれの情報（ソースプログラムまたはデータフローグラフなど）を入力として、学習モデルを実行する。これにより、１つ以上の実装組み合わせが学習モデルから出力される。出力される１つ以上の実装組み合わせが、対象ソースプログラムの中の複数の関数のための実装組み合わせの候補として特定された１つ以上の実装組み合わせである。
そして、実装組み合わせ選択部１４０は、特定された１つ以上の実装組み合わせの中から、対象ソースプログラムの中の複数の関数のための実装組み合わせ（適合組み合わせ）を選択する。選択方法は、実施の形態１のステップＳ１４０における方法と同じである。
【００７０】
ステップＳ２５０は、実施の形態１におけるステップＳ１５０と同じである。
【００７１】
ステップＳ２６０において、学習部１６０は、ステップＳ２４０で選択された実装組み合わせに対して機械学習を行う。これにより、学習モデルが更新される。
例えば、実装組み合わせ選択部１４０は、対象ソースプログラムの中の複数の関数のそれぞれの情報（ソースプログラムまたはデータフローグラフなど）と選択された実装組み合わせの情報とを入力として、機械学習を行う。これにより、学習モデルが更新される。
【００７２】
ステップＳ２６０の後、処理はステップＳ２１０に進む。
そして、新たな対象ソースプログラムに対して、ステップＳ２１０からステップＳ２６０が実行される。新たな対象ソースプログラムの中の複数の関数を新たな複数の関数と称する。
これにより、新たな複数の関数のための実装組み合わせ（適合組み合わせ）が選択される。
【００７３】
＊＊＊実施の形態２の効果＊＊＊
実施の形態２により、実装組み合わせの選択結果について機械学習を行って学習モデルを得ることができる。そして、学習モデルによって実装組み合わせの候補を限定することができる。
適合組み合わせは、限定された候補の中から選択される。そのため、設計支援システム１００Ｓの負荷が軽減される。また、対象ソースプログラムの入力から適合組み合わせの出力までの時間が短縮される。
【００７４】
＊＊＊実施の形態の補足＊＊＊
図１６に基づいて、設計支援装置１００のハードウェア構成を説明する。
設計支援装置１００は処理回路１０９を備える。
処理回路１０９は、受付部１１０と解析部１２０とハードウェア検討部１３０と実装組み合わせ選択部１４０と出力部１５０と学習部１６０とを実現するハードウェアである。
処理回路１０９は、専用のハードウェアであってもよいし、メモリ１０２に格納されるプログラムを実行するプロセッサ１０１であってもよい。
【００７５】
処理回路１０９が専用のハードウェアである場合、処理回路１０９は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ＡＳＩＣ、ＦＰＧＡまたはこれらの組み合わせである。
ＡＳＩＣは、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略称である。
ＦＰＧＡは、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略称である。
【００７６】
設計支援装置１００は、処理回路１０９を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路１０９の機能を分担する。
【００７７】
処理回路１０９において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【００７８】
このように、設計支援装置１００の各機能はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【００７９】
設計支援装置１００の要素である「部」は、「処理」または「工程」と読み替えてもよい。
【００８０】
各実施の形態は、好ましい形態の例示であり、本発明の技術的範囲を制限することを意図するものではない。各実施の形態は、部分的に実施してもよいし、他の形態と組み合わせて実施してもよい。フローチャート等を用いて説明した手順は、適宜に変更してもよい。
【符号の説明】
【００８１】
１００  設計支援装置、１００Ｓ  設計支援システム、１０１  プロセッサ、１０２  メモリ、１０３  補助記憶装置、１０４  通信装置、１０５  入出力インタフェース、１０９  処理回路、１１０  受付部、１２０  解析部、１２１  データフローグラフ生成部、１２２  ソフトウェア検討部、１２３  転送時間算出部、１３０  ハードウェア検討部、１３１  パターン生成部、１３２  高位合成部、１４０  実装組み合わせ選択部、１５０  出力部、１６０  学習部、１９０  記憶部、２００  対象システム、２０１  プロセッサ、２０２  集積回路、２０９  バス。
【要約】
ソフトウェア検討部（１２２）は、対象ソースプログラムの中の複数の関数のそれぞれのソフトウェア処理時間を算出する。データフローグラフ生成部（１２１）は、前記対象ソースプログラムに基づいて、前記複数の関数の関数間データフローグラフを生成する。ハードウェア検討部（１３０）は、前記対象ソースプログラムに対する高位合成によって、各関数のハードウェア処理時間と各関数の回路規模とを算出する。実装組み合わせ選択部（１４０）は、各関数のソフトウェア処理時間と、各関数のハードウェア処理時間と、各関数の回路規模と、前記関数間データフローグラフと、に基づいて、ソフトウェアで実装される１つ以上の関数とハードウェアで実装される１つ以上の関数との実装組み合わせを選択する。【図１】
0006752393.tif 000002
【図２】
0006752393.tif 000003
【図３】
0006752393.tif 000004
【図４】
0006752393.tif 000005
【図５】
0006752393.tif 000006
【図６】
0006752393.tif 000007
【図７】
0006752393.tif 000008
【図８】
0006752393.tif 000009
【図９】
0006752393.tif 000010
【図１０】
0006752393.tif 000011
【図１１】
0006752393.tif 000012
【図１２】
0006752393.tif 000013
【図１３】
0006752393.tif 000014
【図１４】
0006752393.tif 000015
【図１５】
0006752393.tif 000016
【図１６】
0006752393.tif 000017