(57)【要約】  スケジューリング結果ファイル（１０３）は、順番に実行される複数の処理ステップそれぞれに１つ以上の処理が割り当てられたことを示す。対象特定部（１２０）は、スケジューリング結果ファイルに示される処理のうち、演算を行う処理である対象処理と、対象処理が割り当てられた処理ステップの後に実行される処理ステップに割り当てられて対象処理と同じ種類の演算を行う処理である同種処理と、を特定する。移動先特定部（１３０）は、対象処理が割り当てられると対象処理と同種処理とで演算器を共用することが可能になる処理ステップを、移動先ステップとして特定する。スケジューリング変更部（１５０）は、スケジューリング結果ファイルの内容を、対象処理が移動先ステップに割り当てられた状態の内容に変更する。
2017033336.tif 000002
【特許請求の範囲】
【請求項１】
順番に実行される複数の処理ステップそれぞれに１つ以上の処理が割り当てられたことを示すスケジューリング結果ファイルに示される処理のうち、演算を行う処理である対象処理と、前記対象処理が割り当てられた処理ステップの後に実行される処理ステップに割り当てられて前記対象処理と同じ種類の演算を行う処理である同種処理と、を特定する対象特定部と、
前記対象処理が割り当てられると前記対象処理と前記同種処理とで演算器を共用することが可能になる処理ステップを、移動先ステップとして特定する移動先特定部と、
前記スケジューリング結果ファイルの内容を、前記対象処理が前記移動先ステップに割り当てられた状態の内容に変更するスケジューリング変更部と
を備える回路設計支援装置。
【請求項２】
前記対象特定部は、演算を行う処理である演算処理と前記演算処理とは別の処理である他の処理とが同じ処理ステップに割り当てられている場合、前記演算処理の出力が前記他の処理の入力になっていないことを条件に、前記演算処理を前記対象処理として特定する
請求項１に記載の回路設計支援装置。
【請求項３】
前記移動先特定部は、前記対象処理が割り当てられた処理ステップが実行されてから前記同種処理が割り当てられた処理ステップが実行されるまでの間に実行される処理ステップから、前記移動先ステップを特定する
請求項１に記載の回路設計支援装置。
【請求項４】
前記移動先特定部は、演算を行う処理であって前記対象処理から出力される値が入力される処理である影響処理が割り当てられていない処理ステップを、候補ステップとして特定し、特定した候補ステップから前記移動先ステップを特定する
請求項３に記載の回路設計支援装置。
【請求項５】
前記スケジューリング結果ファイルは、順番に実行される複数の処理ブロックそれぞれが１つ以上の処理ステップを有することを示し、
前記移動先特定部は、特定した候補ステップのうち、前記同種処理が割り当てられた処理ステップを有する処理ブロックが有する候補ステップを、前記移動先ステップとして特定する
請求項４に記載の回路設計支援装置。
【請求項６】
前記対象処理は、入力される値である入力値を用いて演算を行って、演算によって得られた値を出力値として出力する処理であり、
前記同種処理は、前記対象処理から出力された出力値が入力されて、入力された出力値を用いて演算を行う処理であり、
前記複数の処理ステップは、前記対象処理から出力された出力値をメモリに書き込む書込み処理が割り当てられた処理ステップである書込みステップと、前記同種処理に前記出力値を入力するために、前記出力値が書き込まれたメモリから前記出力値を読み出す読出し処理が割り当てられた処理ステップである読出しステップとを含み、
前記スケジューリング変更部は、前記書込みステップに割り当てられた書込み処理を、前記入力値をメモリに書き込む処理に変更し、前記読出しステップに割り当てられた読出し処理を、前記対象処理に前記入力値を入力するために、前記入力値が書き込まれたメモリから前記入力値を読み出す処理に変更し、前記対象処理から出力された出力値が前記同種処理に入力されるように前記対象処理を前記移動先ステップに割り当てる
請求項１に記載の回路設計支援装置。
【請求項７】
前記スケジューリング結果ファイルが変更される前の状態において、前記対象処理から出力された出力値がメモリに書き込まれてから、前記出力値が書き込まれたメモリから前記出力値が読み出されるまでの時間を表すライフサイクルを特定するライフサイクル特定部と、
前記スケジューリング変更部は、前記書込み処理と前記読出し処理で使用されるメモリの記憶容量を、特定されたライフサイクルに応じた記憶容量にする
請求項６に記載の回路設計支援装置。
【請求項８】
順番に実行される複数の処理ステップそれぞれに１つ以上の処理が割り当てられたことを示すスケジューリング結果ファイルに示される処理のうち、演算を行う処理である対象処理と、前記対象処理が割り当てられた処理ステップの後に実行される処理ステップに割り当てられて前記対象処理と同じ種類の演算を行う処理である同種処理と、を特定する対象特定処理と、
前記対象処理が割り当てられると前記対象処理と前記同種処理とで演算器を共用することが可能になる処理ステップを、移動先ステップとして特定する移動先特定処理と、
前記スケジューリング結果ファイルの内容を、前記対象処理が前記移動先ステップに割り当てられた状態の内容に変更するスケジューリング変更処理と
をコンピュータに実行させるための回路設計支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、回路設計を支援する技術に関するものである。
【背景技術】
【０００２】
半導体集積回路は、ＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）で設計されている。
ＲＴＬによる回路設計では、組み合わせ回路の動作が記述される。組み合わせ回路は、レジスタとして機能するフリップフロップの出力を入力として、入力の状態に応じた出力を行う回路である。
近年、集積回路の回路規模が増大しており、ＲＴＬによる回路設計に多大な時間を要している。
そこで、ＲＴＬよりも抽象度が高い高級言語を用いてＲＴＬを自動的に生成する高位合成という技術が提唱されており、高位合成を実現する高位合成ツールが市販されている。高級言語の一例は、Ｃ言語とＣ＋＋言語とＳｙｓｔｅｍＣである。【０００３】
また、高位合成によってＲＴＬを生成した場合、人手によってＲＴＬを生成した場合に比べて、半導体集積回路の回路規模を削減できる可能性がある。高位合成において、回路共有を自動的に行うことができるためである。【０００４】
このような高位合成は、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）の設計に利用されていたが、近年、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）に適用されるケースも増加している。
ＡＳＩＣは、使用するメモリと使用する乗算器の数が増えるほど、回路規模が増加する。
一方、ＦＰＧＡにはメモリと乗算器が予め内蔵されているため、使用するメモリと使用する乗算器の数が内蔵されている数を超えなければ、ＦＰＧＡの回路規模は増加しない。
しかし、フィルタリングのような複雑な処理が多い場合、使用する乗算器の数がＦＰＧＡに内蔵されている数を超えてしまう。
その場合、使用する乗算器の数を削減するため、乗算のビット幅を削減したり、乗算を用いないアルゴリズムに変更したりするケースがある。そして、乗算のビット幅を削減するケースでは演算精度が低くなってしまい、アルゴリズムを変更するケースでは演算数が増えてしまう。
また、内蔵する乗算器の数が多いＦＰＧＡを選択すると、費用が高くなってしまう。【０００５】
乗算器は、複数の論理素子を用いて構成される演算器の一例であり、ＦＰＧＡに内蔵される複数の論理素子を用いて構成される。
そのため、乗算器以外の演算器の数についても、ＦＰＧＡに内蔵される論理素子を用いて構成することが可能な数を超えないように設計する必要がある。【０００６】
前述の通り、高位合成は回路共有を自動的に行う。そのため、高位合成によって演算器が共有されて、使用する演算器の数が減り、使用する演算器の数が、ＦＰＧＡに実装できる範囲に収まる可能性がある。【０００７】
特許文献１には、並列記述間でハードウェア資源を共有した回路を生成することが開示されている。
特許文献２には、データフローグラフから、共通の回路で実行することによって削減される回路面積が大きいサブグラフを検出して、回路規模を削減することが開示されている。
しかし、特許文献１および特許文献２には、使用するメモリを増やすことによって、使用する演算器の数を減らすことについては開示されていない。つまり、ＦＰＧＡ内のメモリのうち、未使用のメモリを有効活用することによって、使用する演算器の数を減らし、使用する演算器の数を、ＦＰＧＡに実装できる範囲に収めることついては、特許文献１および特許文献２には開示されていない。【０００８】
従来の高位合成ツールは、設計者の指定に従って、配列をレジスタ化またはメモリ化するため、使用する演算器の数を減らすことを目的として、使用するメモリを増やすことはない。つまり、設計者が意図した数以上のメモリが使用されることはない。
ＡＳＩＣが設計対象となる場合、メモリの増加はコストの増加を招くため、メモリの数を少なくする設計が基本である。
一方、ＦＰＧＡが設計対象となる場合、未使用のメモリを有効活用する方が効率的である。
しかし、未使用のメモリを有効活用する設計は、従来の高位合成では行われていない。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０００−１８７６８１号公報
【特許文献２】特開２００６−１３９４２７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明は、同じ種類の演算を行う複数の処理で演算器を共用する回路の設計を支援することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の回路設計支援装置は、
順番に実行される複数の処理ステップそれぞれに１つ以上の処理が割り当てられたことを示すスケジューリング結果ファイルに示される処理のうち、演算を行う処理である対象処理と、前記対象処理が割り当てられた処理ステップの後に実行される処理ステップに割り当てられて前記対象処理と同じ種類の演算を行う処理である同種処理と、を特定する対象特定部と、
前記対象処理が割り当てられると前記対象処理と前記同種処理とで演算器を共用することが可能になる処理ステップを、移動先ステップとして特定する移動先特定部と、
前記スケジューリング結果ファイルの内容を、前記対象処理が前記移動先ステップに割り当てられた状態の内容に変更するスケジューリング変更部とを備える。
【発明の効果】
【００１２】
本発明によれば、同じ種類の演算を行う複数の処理で演算器を共用する回路の設計を支援することができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１における回路設計支援装置１００の概要図。
【図２】実施の形態１における回路設計支援装置１００の構成図。
【図３】実施の形態１における回路設計支援方法のフローチャート。
【図４】実施の形態１におけるソースコード１０１を示す図。
【図５】実施の形態１におけるスケジューリング結果ファイル１０３の内容を示す図。
【図６】従来の方法によって設計される回路構成を示す図。
【図７】実施の形態１におけるステップ結果ファイル１０４を示す図。
【図８】実施の形態１における対象特定処理（Ｓ１２０）のフローチャート。
【図９】実施の形態１における同種演算器リスト１９１を示す図。
【図１０】実施の形態１における対象処理リスト１９２を示す図。
【図１１】実施の形態１における移動先特定処理（Ｓ１３０）のフローチャート。
【図１２】実施の形態１における対象処理リスト１９２を示す図。
【図１３】実施の形態１におけるライフサイクル特定処理（Ｓ１４０）のフローチャート。
【図１４】実施の形態１における対象処理リスト１９２を示す図。
【図１５】実施の形態１におけるスケジューリング変更処理（Ｓ１５０）のフローチャート。
【図１６】実施の形態１におけるスケジューリング変更ファイル１９３の内容を示す図。
【図１７】実施の形態１におけるステップ変更ファイル１９４を示す図。
【図１８】実施の形態１によって設計される回路構成を示す図。
【図１９】実施の形態１における回路設計支援装置１００の構成図。
【発明を実施するための形態】
【００１４】
実施の形態１．
回路の設計を支援する回路設計支援装置１００について、図１から図１９に基づいて説明する。具体的には、設計対象となる回路は半導体集積回路である。
【００１５】
＊＊＊構成の説明＊＊＊
図１に基づいて、回路設計支援装置１００の概要について説明する。
回路設計支援装置１００は、ソースコード１０１を基にしてＲＴＬファイル１０９を生成する装置である。
ソースコード１０１は、回路の動作内容が高級言語を用いて記述されたファイルである。具体的には、高級言語は、Ｃ言語、Ｃ＋＋言語またはＳｙｓｔｅｍＣ言語である。
ＲＴＬファイル１０９は、回路の動作内容がＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）を用いて記述されたファイルである。ＲＴＬはＲｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌの略称である。
【００１６】
図２に基づいて、回路設計支援装置１００の構成について説明する。
回路設計支援装置１００は、プロセッサ９０１とメモリ９０３とを備えるコンピュータである。プロセッサ９０１は信号線９１０を介してメモリ９０３に接続されている。
【００１７】
プロセッサ９０１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。具体的には、プロセッサ９０１は、ＣＰＵ、ＤＳＰまたはＧＰＵである。ＣＰＵはＣｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略称であり、ＤＳＰはＤｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒの略称であり、ＧＰＵはＧｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略称である。
メモリ９０３はデータを記憶する記憶装置である。具体的には、メモリ９０３はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００１８】
メモリ９０３には、回路設計支援装置１００で使用、生成または入出力されるデータが記憶される。
具体的には、メモリ９０３には、ソースコード１０１と、ＣＤＦＧファイル１０２と、スケジューリング結果ファイル１０３と、ステップ結果ファイル１０４と、ＲＴＬファイル１０９とが記憶される。さらに、メモリ９０３には、同種演算器リスト１９１と、対象処理リスト１９２と、スケジューリング変更ファイル１９３、ステップ変更ファイル１９４とが記憶される。これらのデータの内容については後述する。
【００１９】
その他に、メモリ９０３には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と、「部」の機能を実現するプログラムとが記憶されている。具体的には、「部」は、ＣＤＦＧ生成部１１０、スケジューリング部１１１、対象特定部１２０、移動先特定部１３０、ライフサイクル特定部１４０、スケジューリング変更部１５０およびＲＴＬ生成部１１２である。なお、「部」の機能を実現するプログラムは記憶媒体に記憶することができる。「部」の機能については後述する。
プロセッサ９０１は、ＯＳを実行しながら「部」の機能を実現するプログラムを実行する。つまり、「部」の機能を実現するプログラムは、メモリ９０３にロードされ、プロセッサ９０１によって実行される。
なお、回路設計支援装置１００が複数のプロセッサ９０１を備えて、複数のプロセッサ９０１が「部」の機能を実現するプログラムを連携して実行してもよい。
【００２０】
プロセッサ９０１とメモリ９０３とをまとめたハードウェアを「プロセッシングサーキットリ」という。
「部」は「工程」、「手順」または「処理」に読み替えてもよい。「部」の機能はファームウェアで実現してもよい。
【００２１】
＊＊＊動作の説明＊＊＊
回路設計支援装置１００の動作は回路設計支援方法に相当する。また、回路設計支援方法は回路設計支援プログラムの処理手順に相当する。
【００２２】
図３に基づいて、回路設計支援方法について説明する。
Ｓ１１０はＣＤＦＧ生成処理である。ＣＤＦＧは、Ｃｏｎｔｒｏｌ  Ｄａｔａ  Ｆｌｏｗ．  Ｇｒａｐｈの略称である。
Ｓ１１０において、ＣＤＦＧ生成部１１０は、ソースコード１０１を用いて、ＣＤＦＧファイル１０２を生成する。
ＣＤＦＧ生成処理（Ｓ１１０）は、高位合成において一般的に行われている処理であるため、処理の詳細についての説明は省略する。
【００２３】
図４に、Ｃ言語で記述されたソースコード１０１の具体的な内容を示す。
このソースコード１０１には、３つの処理ブロックが記述されている。処理ブロックは、１つ以上の処理の纏まりである。
第１の処理ブロックは、ａ［ｉ］＊ｂ［ｉ］を演算する処理と、ｆｕｎｃ０という関数を演算する処理とを含んでいる。
第２の処理ブロックは、ｆｕｎｃ０という関数を演算する処理を含んでいる。
第３の処理ブロックは、ｃ［ｉ］＊ｐを演算する処理を含んでいる。
第１の処理ブロックと第３の処理ブロックとのそれぞれの処理は、ｆｏｒ文によって１０２４回繰り返し実行される。
【００２４】
図３に戻り、Ｓ１１１から説明を続ける。
Ｓ１１１はスケジューリング処理である。
Ｓ１１１において、スケジューリング部１１１は、ＣＤＦＧファイル１０２を用いて、スケジューリング結果ファイル１０３とステップ結果ファイル１０４とを生成する。
スケジューリング処理（Ｓ１１１）は、高位合成において一般的に行われている処理であるため、処理の詳細についての説明は省略する。
なお、スケジューリング処理（Ｓ１１１）は、広義のスケジューリング処理に相当し、高位合成におけるアロケーション処理を含んだ処理である。アロケーション処理は、バインディング処理とも呼ばれる。
【００２５】
スケジューリング結果ファイル１０３は、順番に実行される複数の処理ブロックそれぞれが１つ以上の処理ステップを有すること、および、順番に実行される複数の処理ステップそれぞれに１つ以上の処理が割り当てられたことを示す。
【００２６】
図５に、図４のソースコード１０１を基に生成されたＣＤＦＧファイル１０２を用いて生成されるスケジューリング結果ファイル１０３の内容を示す。
この図において、ＬＯＯＰ１、ＮｏｎＬＯＯＰおよびＬＯＯＰ２はブロック名である。ＬＯＯＰ１＿ＳＴ１、ＬＯＯＰ１＿ＳＴ２、Ｎｏｎ＿ＬＯＯＰ＿ＳＴ１、ＬＯＯＰ２＿ＳＴ１およびＬＯＯＰ２＿ＳＴ２はステップ名である。ｍｕｌは乗算処理の処理名であり、Ｗは書込み処理の処理名であり、Ｒは読出し処理の処理名である。また、ｆｕｎｃ０およびｆｕｎｃ１は関数名である。
スケジューリング結果ファイル１０３は、処理ブロックＬＯＯＰ１が処理ステップＬＯＯＰ１＿ＳＴ１と処理ステップＬＯＯＰ２＿ＳＴ２とを有することを示している。そして、スケジューリング結果ファイル１０３は、処理ステップＬＯＯＰ１＿ＳＴ１にｃ＝ａ＊ｂを演算する処理とｆｕｎｃ０を演算する処理とが割り当てられて、処理ステップＬＯＯＰ１＿ＳＴ２にｃをメモリに書き込む処理が割り当てられたことを示している。
スケジューリング結果ファイル１０３は、処理ブロックＮｏｎＬＯＯＰが処理ステップＮｏｎＬＯＯＰ＿ＳＴ１を有することを示している。そして、スケジューリング結果ファイル１０３は、処理ステップＮｏｎＬＯＯＰ＿ＳＴ１にｆｕｎｃ１を演算する処理が割り当てられたことを示している。
さらに、スケジューリング結果ファイル１０３は、処理ブロックＬＯＯＰ２が処理ステップＬＯＯＰ２＿ＳＴ１と処理ステップＬＯＯＰ２＿ＳＴ２とを有することを示している。そして、スケジューリング結果ファイル１０３は、処理ステップＬＯＯＰ２＿ＳＴ１にｃをメモリから読み出す処理が割り当てられて、処理ステップＬＯＯＰ２＿ＳＴ２にｐ＊ｃを演算する処理が割り当てられたことを示している。
【００２７】
図６は、図５のスケジューリング結果ファイル１０３を用いてＲＴＬファイル１０９が生成された場合において、ＲＴＬファイル１０９を用いて生成される回路の構成を示す図である。この回路は、１つのメモリと、ｍｕｌ１とｍｕｌ２という２つの乗算器とを備えている。
【００２８】
ステップ結果ファイル１０４は、演算器およびメモリが使用される処理ステップを特定する情報を示す。
演算器は、加算、減算、乗算または除算などの演算を行う素子である。具体的には、演算器は、加算器、減算器、乗算器、除算器、または、これらの組み合わせである。
【００２９】
図７に、図４のソースコード１０１を基に生成されたＣＤＦＧファイル１０２を用いて生成されるステップ結果ファイル１０４の内容を示す。
この図において、ｍｕｌは乗算器名であり、ＭＥＭ＿０はメモリ名であり、ｆｕｎｃ０およびｆｕｎｃ１は関数を演算する演算器を識別する演算器名である。ＵＳＥは演算器が使用されることを意味し、Ｗは書込み処理でメモリが使用されることを意味し、Ｒは読出し処理でメモリが使用されることを意味する。ＬＯＯＰ１、ＮｏｎＬＯＯＰおよびＬｏｏｐ２はブロック名であり、ＳＴ１およびＳＴ２はステップ名の一部である。
ステップ結果ファイル１０４は、乗算器ｍｕｌが処理ステップＬＯＯＰ１＿ＳＴ１および処理ステップＬＯＯＰ２＿ＳＴ２で使用されることを示している。ステップ結果ファイル１０４は、演算器ｆｕｎｃ０が処理ステップＬＯＯＰ１＿ＳＴ１で使用され、演算器ｆｕｎｃ１が処理ステップＮｏｎＬＯＯＰで使用されることを示している。さらに、ステップ結果ファイル１０４は、メモリＭＥＭ＿０が処理ステップＬＯＯＰ１＿ＳＴ２および処理ステップＬＯＯＰ２＿ＳＴ１で使用されることを示している。
また、ステップ結果ファイル１０４は、処理ブロックＬＯＯＰ１と処理ブロックＬＯＯＰ２とのそれぞれの繰り返し回数が１０２４回であることを示している。さらに、ステップ結果ファイル１０４は、ＮｏｎＬＯＯＰが繰り返し実行されないこと、つまり、ＮｏｎＬＯＯＰの繰り返し回数が１回であることを示している。繰り返し回数は、繰り返して実行される回数である。
【００３０】
図３に戻り、Ｓ１２０から説明を続ける。
Ｓ１２０は対象特定処理である。
Ｓ１２０において、対象特定部１２０は、スケジューリング結果ファイル１０３に示される処理のうち、対象処理と同種処理とを特定する。対象処理は、演算を行う処理である。同種処理は、対象処理が割り当てられた処理ステップの後に実行される処理ステップに割り当てられて、対象処理と同じ種類の演算を行う処理である。
但し、演算を行う処理である演算処理と演算処理とは別の処理である他の処理とが同じ処理ステップに割り当てられている場合、対象特定部１２０は、演算処理の出力が他の処理の入力になっていないことを条件に、演算処理を対象処理として特定する。
【００３１】
図８に基づいて、対象特定処理（Ｓ１２０）の詳細について説明する。
Ｓ１２１において、対象特定部１２０は、ステップ結果ファイル１０４から、同種演算器名を取得する。同種演算器は複数の処理ステップで使用される演算器であり、同種演算器名は同種演算器を識別する演算器名である。図７のステップ結果ファイル１０４は、乗算器ｍｕｌが処理ステップＬＯＯＰ１＿ＳＴ１および処理ステップＬＯＯＰ２＿ＳＴ２で使用されることを示している。したがって、図７のステップ結果ファイル１０４において、同種演算器名はｍｕｌである。
そして、対象特定部１２０は、同種演算器リスト１９１を生成し、生成した同種演算器リスト１９１に、同種演算器名と、第１の同種ステップ名と、第２の同種ステップ名とを登録する。第１の同種ステップは、同種演算器が使用される２つの処理ステップのうち、先に実行される方の処理ステップである。第１の同種ステップ名は、第１の同種ステップを識別するステップ名である。第２の同種ステップは、同種演算器が使用される２つの処理ステップのうち、後に実行される方の処理ステップである。第２の同種ステップ名は、第２の同種ステップを識別するステップ名である。
【００３２】
図９に、図７のステップ結果ファイル１０４を用いて生成される同種演算器リスト１９１を示す。
同種演算器リスト１９１は、同種演算器である乗算器ｍｕｌが第１の同種ステップＬＯＯＰ１＿ＳＴ１および第２の同種ステップＬＯＯＰ２＿ＳＴ２で使用されることを示している。
【００３３】
図８に戻り、Ｓ１２２から説明を続ける。
Ｓ１２２において、対象特定部１２０は、同種演算器リスト１９１から選択されていない未選択の同種演算器名があるか判定する。
未選択の同種演算器名がある場合、処理はＳ１２３に進む。
未選択の同種演算器名がない場合、対象特定処理（Ｓ１２０）は終了する。
【００３４】
Ｓ１２３において、対象特定部１２０は、未選択の同種演算器名を同種演算器リスト１９１から１つ選択する。
【００３５】
Ｓ１２４において、対象特定部１２０は、選択した同種演算器名に対応付いた第１の同種ステップ名を同種演算器リスト１９１から取得する。
そして、対象特定部１２０は、取得した第１の同種ステップ名で識別される第１の同種ステップの情報をスケジューリング結果ファイル１０３から取得する。
【００３６】
Ｓ１２５において、対象特定部１２０は、取得した情報を用いて、第１の同種ステップに他の処理が割り当てられているか判定する。他の処理は同種演算処理とは別の処理であり、同種演算処理は同種演算器名に対応する名称の処理である。
他の処理が割り当てられている場合、処理はＳ１２６に進む。
他の処理が割り当てられていない場合、処理はＳ１２７に進む。
【００３７】
図９の同種演算器リスト１９１において、同種演算器名はｍｕｌであり、第１の同種ステップ名はＬＯＯＰ１＿ＳＴ１である。
図５のスケジューリング結果ファイル１０３において、第１の同種ステップＬＯＯＰ１＿ＳＴ１には、同種演算処理ｍｕｌとは別に、関数ｆｕｎｃ０を演算する処理が割り当てられている。つまり、他の処理ｆｕｎｃ０が第１の同種ステップＬＯＯＰ１＿ＳＴ１に割り当てられている。したがって、処理はＳ１２６に進む。
【００３８】
Ｓ１２６において、対象特定部１２０は、同種演算処理の出力が他の処理の入力になっているか判定する。
同種演算処理の出力が他の処理の入力になっている場合、処理はＳ１２２に戻る。
同種演算処理の出力が他の処理の入力になっていない場合、処理はＳ１２７に進む。
【００３９】
図５のスケジューリング結果ファイル１０３において、他の処理ｆｕｎｃ０の入力は入力値ａおよび入力値ｂである。つまり、同種演算処理ｍｕｌから出力される出力値ｃは他の処理ｆｕｎｃ０の入力になっていない。したがって、処理はＳ１２７に進む。
【００４０】
Ｓ１２７において、対象特定部１２０は、対象処理情報と同種処理情報とを対象処理リスト１９２に登録する。対象処理情報は対象処理を特定する情報であり、対象処理は第１の同種ステップに割り当てられた同種演算処理である。同種処理情報は同種処理を特定する情報であり、同種処理は第２の同種ステップに割り当てられた同種演算処理である。
Ｓ１２７の後、処理はＳ１２２に戻る。
【００４１】
図１０に、図９の同種演算器リスト１９１と図５のスケジューリング結果ファイル１０３とを用いて生成される対象処理リスト１９２を示す。
対象処理リスト１９２には、対象処理情報として、処理名であるｍｕｌと、処理ステップ名であるＬＯＯＰ１＿ＳＴ１と、が登録されている。また、対象処理リスト１９２には、同種処理情報として、処理名であるｍｕｌと、処理ステップ名であるＬＯＯＰ２＿ＳＴ２と、が登録されている。
【００４２】
図３に戻り、Ｓ１３０から説明を続ける。
Ｓ１３０は移動先特定処理である。
Ｓ１３０において、移動先特定部１３０は、対象処理の移動先となる移動先ステップを特定する。移動先ステップは、対象処理が割り当てられると対象処理と同種処理とで演算器を共用することが可能になる処理ステップである。
移動先特定部１３０は、対象処理が割り当てられた処理ステップが実行されてから同種処理が割り当てられた処理ステップが実行されるまでの間に実行される処理ステップから、移動先ステップを特定する。
【００４３】
移動先特定部１３０は、移動先ステップを以下の手順で特定する。
移動先特定部１３０は、演算を行う処理であって対象処理から出力される値が入力される処理である影響処理が割り当てられていない処理ステップを候補ステップとして特定し、特定した候補ステップから移動先ステップを特定する。
【００４４】
移動先特定部１３０は、移動先ステップを以下のように特定する。
移動先特定部１３０は、特定した候補ステップのうち、同種処理が割り当てられた処理ステップを有する処理ブロックが有する候補ステップを、移動先ステップとして特定する。
【００４５】
図１１に基づいて、移動先特定処理（Ｓ１３０）の詳細について説明する。
Ｓ１３１において、移動先特定部１３０は、対象処理リスト１９２から、対象処理情報と同種処理情報との組のうち、未選択の組を１つ選択する。
【００４６】
Ｓ１３２において、移動先特定部１３０は、対象処理情報から、対象処理が割り当てられた処理ステップである対象ステップのステップ名を、対象ステップ名として取得する。また、移動先特定部１３０は、同種処理情報から、同種処理が割り当てられた処理ステップである同種ステップのステップ名を、同種ステップ名として取得する。
そして、移動先特定部１３０は、スケジューリング結果ファイル１０３から、対象ステップ名で識別される対象ステップと同種ステップ名で識別される同種ステップとの間にある処理ステップの情報を、中間ステップの情報として取得する。中間ステップは、対象ステップが実行されてから同種ステップが実行されるまでの間に実行される処理ステップである。
【００４７】
図５のスケジューリング結果ファイル１０３において、対象処理が処理ステップＬＯＯＰ１＿ＳＴ１の処理ｍｕｌであり、同種処理が処理ステップＬＯＯＰ２＿ＳＴ２の処理ｍｕｌであるものとする。この場合、中間ステップは、ＬＯＯＰ１＿ＳＴ２、ＮｏｎＬＯＯＰ＿ＳＴ１およびＬＯＯＰ２＿ＳＴ１である。
【００４８】
Ｓ１３３において、移動先特定部１３０は、各中間ステップの情報に基づいて、対象処理が割り当てられると論理的に影響を受ける処理ステップである影響ステップを特定する。
【００４９】
具体的には、移動先特定部１３０は、影響ステップを以下のように特定する。
まず、移動先特定部１３０は、演算処理が割り当てられた中間ステップを特定する。
次に、移動先特定部１３０は、特定した中間ステップに割り当てられた演算処理に、対象処理から出力される値が入力されるか判定する。
そして、移動先特定部１３０は、対象処理から出力される値が入力される演算処理が割り当てられた中間ステップを、影響ステップとして特定する。
【００５０】
図５のスケジューリング結果ファイル１０３において、対象処理が処理ステップＬＯＯＰ１＿ＳＴ１の処理ｍｕｌであり、中間ステップがＬＯＯＰ１＿ＳＴ２、ＮｏｎＬＯＯＰ＿ＳＴ１およびＬＯＯＰ２＿ＳＴ１であるものとする。この場合、中間ステップＬＯＯＰ１＿ＳＴ２および中間ステップＬＯＯＰ２＿ＳＴ１には演算処理が割り当てられておらず、中間ステップＮｏｎＬＯＯＰ＿ＳＴ１に割り当てられた演算処理ｆｕｎｃ１には対象処理ｍｕｌの出力値ｃが入力されていない。したがって、いずれの中間ステップも影響ステップではない。
【００５１】
Ｓ１３４において、移動先特定部１３０は、取得した中間ステップの情報から、影響ステップではない中間ステップの情報を、候補ステップの情報として抽出する。
【００５２】
Ｓ１３５において、移動先特定部１３０は、同種処理情報から、同種ステップを有する処理ブロックである同種ブロックのブロック名を、同種ブロック名として取得する。
そして、移動先特定部１３０は、各候補ステップの情報から、同種ブロック名で識別される同種ブロックが有する候補ステップの情報を特定する。
【００５３】
図５のスケジューリング結果ファイル１０３において、同種処理が処理ステップＬＯＯＰ２＿ＳＴ２の処理ｍｕｌである場合、同種ブロックは処理ブロックＬＯＯＰ２である。そして、候補ステップがＬＯＯＰ１＿ＳＴ２、ＮｏｎＬＯＯＰ＿ＳＴ１およびＬＯＯＰ２＿ＳＴ１である場合、同種ブロックが有する候補ステップはＬＯＯＰ２＿ＳＴ１である。
【００５４】
Ｓ１３６において、移動先特定部１３０は、特定した候補ステップの情報から、候補ステップ名を、移動先ステップ名として取得する。
そして、移動先特定部１３０は、移動先ステップ名を対象処理リスト１９２に登録する。
【００５５】
図１２に、移動先ステップ名が登録された対象処理リスト１９２を示す。
対象処理リスト１９２には、対象処理ｍｕｌの移動先ステップを識別する移動先ステップ名として、ＬＯＯＰ２＿ＳＴ１が登録されている。
【００５６】
Ｓ１３７において、移動先特定部１３０は、対象処理情報と同種処理情報との未選択の組が対象処理リスト１９２にあるか判定する。
未選択の組がある場合、処理はＳ１３１に戻る。
未選択の組がない場合、移動先特定処理（Ｓ１３０）は終了する。
【００５７】
図３に戻り、Ｓ１４０から説明を続ける。
Ｓ１４０はライフサイクル特定処理である。
Ｓ１４０において、ライフサイクル特定部１４０は、スケジューリング結果ファイル１０３が変更される前の状態において、対象処理から出力される出力値のライフサイクルを特定する。このライフサイクルは、対象処理から出力された出力値がメモリに書き込まれてから、出力値が書き込まれたメモリから出力値が読み出されるまでの時間を表す。
【００５８】
図１３に基づいて、ライフサイクル特定処理（Ｓ１４０）の詳細について説明する。
Ｓ１４１において、ライフサイクル特定部１４０は、対象処理リスト１９２から、未選択の対象処理情報を１つ選択する。
【００５９】
Ｓ１４２において、ライフサイクル特定部１４０は、選択した対象処理情報から対象ステップ名を取得し、取得した対象ステップ名で識別される対象ステップの情報をスケジューリング結果ファイル１０３から取得する。
【００６０】
Ｓ１４３において、ライフサイクル特定部１４０は、取得した対象ステップの情報から、対象処理の入力ノードを識別する入力ノード名を取得する。入力ノードは、入力値が設定される変数である。
そして、ライフサイクル特定部１４０は、入力ノード名で識別される入力ノードの情報をスケジューリング結果ファイル１０３およびステップ結果ファイル１０４から取得する。
【００６１】
Ｓ１４４において、ライフサイクル特定部１４０は、対象処理の入力ノードの情報に基づいて、対象処理の入力値のライフサイクルを特定する。
ライフサイクルは、値が変数に設定されてから、変数に設定された値が消失するまでの時間、を表すサイクル数である。
【００６２】
図５のスケジューリング結果ファイル１０３において、処理ステップＬＯＯＰ１＿ＳＴ１の処理ｍｕｌが対象処理である場合、対象処理の入力ノードはａおよびｂである。
入力ノードａおよびｂには１サイクル毎に入力値が設定されるため、対象処理の入力値のライフサイクルは１サイクルである。
【００６３】
Ｓ１４５において、ライフサイクル特定部１４０は、取得した対象ステップの情報から、対象処理の出力ノードを識別する出力ノード名を取得する。出力ノードは、出力値が設定される変数である。
そして、ライフサイクル特定部１４０は、出力ノード名で識別される出力ノードの情報をスケジューリング結果ファイル１０３およびステップ結果ファイル１０４から取得する。
【００６４】
Ｓ１４６において、ライフサイクル特定部１４０は、対象処理の出力ノードの情報に基づいて、対象処理の出力値のライフサイクルを特定する。
【００６５】
図５のスケジューリング結果ファイル１０３において、処理ステップＬＯＯＰ１＿ＳＴ１の処理ｍｕｌが対象処理である場合、対象処理の出力ノードはｃである。この出力ノードｃに設定された出力値は、書込み処理Ｗでメモリに書き込まれて、読出し処理Ｒでメモリから読み出されるまで、メモリに保持される。言い換えると、対象処理ｍｕｌから出力された出力値は、対象処理ｍｕｌが属する処理ブロックＬＯＯＰ１＿ＳＴ１が完了するまで、メモリに保持される
図７のステップ結果ファイル１０４において、対象処理ｍｕｌが属する処理ブロックＬＯＯＰ１の繰り返し回数は１０２４である。つまり、対象処理ｍｕｌの出力値は、最大で１０２４サイクルの間、メモリＭＥＭ＿０に保持される。したがって、対象処理の出力値のライフサイクルは１０２４サイクルである。
【００６６】
Ｓ１４７において、ライフサイクル特定部１４０は、対象処理の入力値のライフサイクルと対象処理の出力値のライフサイクルとを対象処理リスト１９２に登録する。
【００６７】
図１４に、ライフサイクルが登録された対象処理リスト１９２を示す。
対象処理リスト１９２には、対象処理ｍｕｌの入力値のライフサイクルである１サイクルと、対象処理ｍｕｌの出力値のライフサイクルである１０２４サイクルとが登録されている。
【００６８】
Ｓ１４８において、ライフサイクル特定部１４０は、未選択の対象処理情報が対象処理リスト１９２にあるか判定する。
未選択の対象処理情報がある場合、処理はＳ１４１に戻る。
未選択の対象処理情報がない場合、ライフサイクル特定処理（Ｓ１４０）は終了する。
【００６９】
図３に戻り、Ｓ１５０から説明を続ける。
Ｓ１５０において、スケジューリング変更部１５０は、スケジューリング結果ファイル１０３の内容を、対象処理が移動先ステップに割り当てられた状態の内容に変更する。
【００７０】
具体的に、スケジューリング変更部１５０は、スケジューリング結果ファイル１０３の内容を以下のように変更する。
但し、対象処理、同種処理および複数の処理ステップは、次の条件を満たすものとする。
対象処理は、入力される値である入力値を用いて演算を行って、演算によって得られた値を出力値として出力する処理である。
同種処理は、対象処理から出力された出力値が入力されて、入力された出力値を用いて演算を行う処理である。
複数の処理ステップは、書込み処理が割り当てられた処理ステップである書込みステップと、読出し処理が割り当てられた処理ステップである読出しステップとを含む。書込み処理は、対象処理から出力された出力値をメモリに書き込む処理である。読出し処理は、同種処理に出力値を入力するために、出力値が書き込まれたメモリから出力値を読み出す処理である。
スケジューリング変更部１５０は、書込みステップに割り当てられた書込み処理を、入力値をメモリに書き込む処理に変更する。
さらに、スケジューリング変更部１５０は、読出しステップに割り当てられた読出し処理を、対象処理に入力値を入力するために、入力値が書き込まれたメモリから入力値を読み出す処理に変更する。
そして、スケジューリング変更部１５０は、対象処理から出力された出力値が同種処理に入力されるように、対象処理を移動先ステップに割り当てる。
また、スケジューリング変更部１５０は、書込み処理と読出し処理で使用されるメモリの記憶容量を、特定されたライフサイクルに応じた記憶容量にする。
【００７１】
図１５に基づいて、スケジューリング変更処理（Ｓ１５０）の詳細について説明する。
Ｓ１５１において、スケジューリング変更部１５０は、スケジューリング結果ファイル１０３を複製する。
以下、複製したスケジューリング結果ファイル１０３をスケジューリング変更ファイル１９３と呼ぶ。
【００７２】
Ｓ１５２において、スケジューリング変更部１５０は、対象処理リスト１９２から、未選択の対象処理情報を１つ選択する。
【００７３】
Ｓ１５３において、スケジューリング変更部１５０は、選択した対象処理情報から対象処理名と対象ステップ名とを取得する。
次に、スケジューリング変更部１５０は、取得した対象ステップ名で識別される対象ステップの情報をスケジューリング変更ファイル１９３から取得する。
そして、スケジューリング変更部１５０は、取得した対象ステップの情報から、対象処理の入力ノードを識別する入力ノード名と、対象処理の出力ノードを識別する出力ノード名とを取得する。
【００７４】
図５のスケジューリング結果ファイル１０３において、処理ステップＬＯＯＰ１＿ＳＴ１の処理ｍｕｌが対象処理である場合、入力ノードはａおよびｂであり、出力ノードはｃである。
【００７５】
Ｓ１５４において、スケジューリング変更部１５０は、Ｓ１５３で取得した出力ノード名を用いて、スケジューリング変更ファイル１９３から、書込み処理名と書込みステップ名と読出し処理名と読出しステップ名とを取得する。
書込み処理名は書込み処理の処理名であり、書込み処理は出力ノード名で識別される出力ノードに設定された出力値をメモリに書き込む処理である。
書込みステップ名は書込みステップのステップ名であり、書込みステップは書込み処理が割り当てられた処理ステップである。
読出し処理名は読出し処理の処理名であり、読出し処理は書込み処理でメモリに書き込まれた出力値を読み出す処理である。
読出しステップ名は読出しステップのステップ名であり、読出しステップは読出し処理が割り当てられた処理ステップである。
【００７６】
図５のスケジューリング結果ファイル１０３において、出力ノードがｃである場合、書込み処理はＷであり、書込みステップはＬＯＯＰ１＿ＳＴ２であり、読出し処理はＲであり、読出しステップはＬＯＯＰ２＿ＳＴ１である。
【００７７】
Ｓ１５５において、スケジューリング変更部１５０は、対象処理を移動先ステップに割り当てるために、書込み処理と読出し処理とを変更する。
【００７８】
スケジューリング変更部１５０は、書込み処理を以下のように変更する。
スケジューリング変更部１５０は、書込みステップ名で識別される書込みステップから、書込み処理名で識別される書込み処理を削除する。
そして、スケジューリング変更部１５０は、Ｓ１５３で取得した入力ノード名で識別される入力ノードに設定された入力値をメモリに書き込む書込み処理を、書込みステップに追加する。
【００７９】
スケジューリング変更部１５０は、読出し処理を以下のように変更する。
スケジューリング変更部１５０は、読出しステップ名で識別される読出しステップから、読出し処理名で識別される読出し処理を削除する。
そして、スケジューリング変更部１５０は、入力値が書き込まれたメモリから入力値を読み出す読出し処理を、読出しステップに追加する。
【００８０】
図１６に、図５のスケジューリング結果ファイル１０３を変更することによって得られるスケジューリング変更ファイル１９３を示す。
このスケジューリング変更ファイル１９３において、書込みステップＬＯＯＰ１＿ＳＴ２には、２つの書込み処理Ｗが割り当てられている。第１の書込み処理は入力ノードａに設定された入力値を第１のメモリに書き込む処理であり、第２の書込み処理は入力ノードｂに設定された入力値を第２のメモリに書き込む処理である。
また、読出しステップＬＯＯＰ２＿ＳＴ１には、２つの読出し処理Ｒが割り当てられている。第１の読出し処理は入力ノードａに設定された入力値を第１のメモリから読み出す処理であり、第２の読出し処理は入力ノードｂに設定された入力値を第２のメモリから読み出す処理である。
【００８１】
Ｓ１５６において、スケジューリング変更部１５０は、Ｓ１５２で取得した対象処理名と対象ステップ名とを用いて、対象処理の割り当てを変更する。
【００８２】
スケジューリング変更部１５０は、対象処理の割り当てを以下のように変更する。
スケジューリング変更部１５０は、対象ステップ名で識別される対象ステップから、対象処理名で識別される対象処理を削除する。
次に、スケジューリング変更部１５０は、移動先ステップ名を対象処理リスト１９２から取得する。
そして、スケジューリング変更部１５０は、移動先ステップ名で識別される移動先ステップに対象処理を追加する。このとき、スケジューリング変更部１５０は、読出し処理でメモリから読み出された入力値が対象処理の入力値になることを示す情報を、対象処理の情報の一部として、スケジューリング変更ファイル１９３に登録する。
【００８３】
図１６のスケジューリング変更ファイル１９３において、対象処理ｍｕｌは移動先ステップＬＯＯＰ２＿ＳＴ１に割り当てられている。
また、２つの読出し処理Ｒで読み出された入力値が対象処理ｍｕｌの入力値になっている。第１の読出し処理で読み出される入力値は入力ノードａに設定された入力値であり、第２の読出し処理で読み出される入力値は入力ノードｂに設定された入力値である。
【００８４】
Ｓ１５７において、スケジューリング変更部１５０は、書込みステップに追加した書込み処理および読出しステップに追加した読出し処理で使用するメモリの記憶容量を算出する。
そして、スケジューリング変更部１５０は、算出した記憶容量を、メモリの情報の一部として、スケジューリング変更ファイル１９３に登録する。
【００８５】
スケジューリング変更部１５０は、メモリの記憶容量を以下のように算出する。
スケジューリング変更部１５０は、選択した対象処理情報に対応付いたライフサイクルを対象処理リスト１９２から取得する。ここで取得されるライフサイクルは、入力値のライフサイクルと出力値のライフサイクルである。
次に、スケジューリング変更部１５０は、出力値のライフサイクルを入力値のライフサイクルで割って得られるサイクル数を算出する。このサイクル数は、スケジューリング結果ファイル１０３において、出力値のライフサイクルの間に、入力値が対象処理に入力される入力回数に相当する。
そして、スケジューリング変更部１５０は、算出したサイクル数と同じ個数の入力値を記憶するために必要な記憶容量を、メモリの記憶容量として算出する。つまり、メモリの記憶容量の大きさは、算出したサイクル数と同じ個数の入力値の合計サイズ以上である。
【００８６】
図１４の対象処理リスト１９２において、対象処理ｍｕｌの入力値のライフサイクルは１サイクルであり、対象処理ｍｕｌの出力値のライフサイクルは１０２４サイクルである。この場合、１０２４個（＝１０２４／１）の入力値を記憶するために必要な記憶容量がメモリの記憶容量となる。
図１６のスケジューリング変更ファイル１９３において、入力ノードａおよびｂに設定される入力値の大きさが１バイトである場合、１０２４個の入力値を記憶するために必要な記憶容量は１０２４バイトである。つまり、２つのメモリのそれぞれの記憶容量は１０２４バイトである。第１のメモリは入力ノードａに設定された入力値の書込みおよび読出しに使用されるメモリであり、第２の入力メモリは入力ノードｂに設定された入力値の書込みおよび読出しに使用されるメモリである。
【００８７】
Ｓ１５８において、スケジューリング変更部１５０は、未選択の対象処理情報が対象処理リスト１９２にあるか判定する。
未選択の対象処理情報がある場合、処理はＳ１５１に戻る。
未選択の対象処理情報がない場合、処理はＳ１５９に進む。
【００８８】
Ｓ１５９において、スケジューリング変更部１５０は、スケジューリング変更ファイル１９３を用いて、ステップ変更ファイル１９４を生成する。ステップ変更ファイル１９４は、スケジューリング変更ファイル１９３に対応するステップ結果ファイル１０４である。
図１７に、図１６のスケジューリング変更ファイル１９３に対応するステップ変更ファイル１９４を示す。
ステップ結果ファイル１０４を生成する処理は、高位合成においてスケジューリング処理の一部として一般的に行われている処理であるため、Ｓ１５９の処理の詳細についての説明は省略する。
Ｓ１５９の後、スケジューリング変更処理（Ｓ１５０）は終了する。
【００８９】
図３に戻り、Ｓ１１２から説明を続ける。
Ｓ１１２はＲＴＬ生成処理である。
Ｓ１１２において、ＲＴＬ生成部１１２は、スケジューリング変更ファイル１９３を用いて、ＲＴＬファイル１０９を生成する。
ＲＴＬ生成処理（Ｓ１１２）は、高位合成において一般的に行われている処理であるため、処理の詳細についての説明を省略する。
Ｓ１１２の後、回路設計支援方法の処理は終了する。
【００９０】
図１８は、図１６のステップ変更ファイル１９４を用いてＲＴＬファイル１０９が生成された場合において、ＲＴＬファイル１０９を用いて生成される回路の構成を示す図である。
この回路は、２つのメモリと、ｍｕｌという１つの乗算器とを備えている。図６に示した回路と比較すると、メモリの数は増えているが、乗算器の数は減っている。
【００９１】
＊＊＊実施の形態の効果の説明＊＊＊
回路設計支援装置１００は、同じ種類の演算を行う複数の処理で演算器を共用する回路の設計を支援することができる。具体的には、回路設計支援装置１００は、未使用のメモリを活用することによって、複数の処理で演算器を共用することを可能にする。
これにより、回路で使用する演算器の数を減らすことができる。つまり、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）のように演算器の数が限られた回路を設計する際に、回路で使用する演算器の数を限られた範囲内に収めることが可能になる。
【００９２】
＊＊＊他の構成＊＊＊
上記の説明では複数の乗算処理で乗算器を共用する例について説明したが、関数を演算する複数の処理で演算器を共用してもよい。さらに、スケジューリング結果ファイル１０３またはステップ結果ファイル１０４が関数を演算する演算器の個数を示す場合、演算器の個数が閾値を超える関数を演算する複数の処理で演算器を共用してもよい。この閾値は、利用者が回路設計支援装置１００に設定することができる。
スケジューリング変更部１５０は、対象処理の割り当てを変更した場合に使用されるメモリの数を数えて、使用されるメモリの数が閾値を超えないことを条件に、対象処理の割り当てを変更してもよい。この閾値は、設計対象の回路で使用することができるメモリの数の上限である。
【００９３】
回路設計支援装置１００の機能は、ハードウェアで実現してもよい。
図１９に、回路設計支援装置１００の機能がハードウェアで実現される場合の構成を示す。
回路設計支援装置１００は、処理回路９２０を備える。処理回路９２０はプロセッシングサーキットリともいう。
処理回路９２０は、ＣＤＦＧ生成部１１０、スケジューリング部１１１、対象特定部１２０、移動先特定部１３０、ライフサイクル特定部１４０、スケジューリング変更部１５０、ＲＴＬ生成部１１２および記憶部１９０といった「部」の機能を実現する専用の電子回路である。
具体的には、処理回路９２０は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＡＳＩＣ、ＦＰＧＡまたはこれらの組み合わせである。ＧＡはＧａｔｅ  Ａｒｒａｙの略称であり、ＡＳＩＣはＡｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略称である。
なお、回路設計支援装置１００が複数の処理回路９２０を備えて、複数の処理回路９２０が「部」の機能を連携して実現してもよい。
【００９４】
回路設計支援装置１００の機能は、ソフトウェアとハードウェアとの組み合わせで実現してもよい。つまり、一部の「部」の機能をソフトウェアで実現し、残りの「部」の機能をハードウェアで実現してもよい。
具体的には、ＣＤＦＧ生成部１１０とスケジューリング部１１１とＲＴＬ生成部１１２との機能をプロセッサ９０１によって実行されるプログラムで実現し、対象特定部１２０と移動先特定部１３０とライフサイクル特定部１４０とスケジューリング変更部１５０との機能を処理回路９２０によって実現してもよい。
【００９５】
実施の形態は、好ましい形態の例示であり、本発明の技術的範囲を制限することを意図するものではない。実施の形態は、部分的に実施してもよいし、他の形態と組み合わせて実施してもよい。
フローチャート等を用いて説明した処理手順は、回路設計支援装置、回路設計支援方法および回路設計支援プログラムの処理手順の一例である。
【符号の説明】
【００９６】
回路設計支援装置１００、１０１  ソースコード、１０２  ＣＤＦＧファイル、１０３  スケジューリング結果ファイル、１０４  ステップ結果ファイル、１０９  ＲＴＬファイル、１１０  ＣＤＦＧ生成部、１１１  スケジューリング部、１１２  ＲＴＬ生成部、１２０  対象特定部、１３０  移動先特定部、１４０  ライフサイクル特定部、１５０  スケジューリング変更部、１９０  記憶部、１９１  同種演算器リスト、１９２  対象処理リスト、１９３  スケジューリング変更ファイル、１９４  ステップ変更ファイル、９０１  プロセッサ、９０３  メモリ、９１０  信号線、９２０  処理回路。
【図１】
2017033336.tif 000003
【図２】
2017033336.tif 000004
【図３】
2017033336.tif 000005
【図４】
2017033336.tif 000006
【図５】
2017033336.tif 000007
【図６】
2017033336.tif 000008
【図７】
2017033336.tif 000009
【図８】
2017033336.tif 000010
【図９】
2017033336.tif 000011
【図１０】
2017033336.tif 000012
【図１１】
2017033336.tif 000013
【図１２】
2017033336.tif 000014
【図１３】
2017033336.tif 000015
【図１４】
2017033336.tif 000016
【図１５】
2017033336.tif 000017
【図１６】
2017033336.tif 000018
【図１７】
2017033336.tif 000019
【図１８】
2017033336.tif 000020
【図１９】
2017033336.tif 000021
【国際調査報告】
2017033336.tif 000022
2017033336.tif 000023