(57)【特許請求の範囲】
【請求項１】
コンピュータが、
記憶部に格納された集積回路の情報に基づいて、前記集積回路内の複数の素子を複数のスレッドに割り当てし、
前記複数のスレッドに割り当てられた前記複数の素子の出力電位の状態を前記スレッド毎に並列に解析し、
前記解析によって求められた前記複数の素子の出力電位の第１のタイミングにおける状態と、前記第１のタイミングから第１の時間経過した第２のタイミングにおける状態とを照合し、
前記照合によって求められた、前記第１のタイミングから前記第２のタイミングの間に前記出力電位の状態が変化した前記スレッド毎の前記複数の素子の数、および前記出力電位の状態が変化しなかった前記スレッド毎の前記複数の素子の数に基づいて、前記複数の素子を前記複数のスレッドに再度割り当てる、
処理を実行することを特徴とする集積回路の設計方法。
【請求項２】
前記再度割り当て処理を実行する際に、前記出力電位の状態が変化した前記スレッド毎の前記複数の素子を、前記第２のタイミングから前記第１の時間経過した第３のタイミングにおいても前記出力電位の状態が変化する素子とし、前記出力電位の状態が変化しなかった前記スレッド毎の前記複数の素子を、前記第３のタイミングにおいても前記出力電位の状態が変化しない素子として前記複数の素子を前記複数のスレッドに割り当てることを特徴とする請求項１に記載の集積回路の設計方法。
【請求項３】
前記複数のスレッドのそれぞれには番号が順に割り振られており、
前記再度割り当て処理は、前記第２のタイミングで前記出力電位が変化した前記複数の素子の個数を数える第１のカウンタの値と、前記第２のタイミングで前記出力電位が変化しなかった前記複数の素子の個数を数える第２のカウンタの値をそれぞれ前記複数のスレッドの総数で除した剰余に１を足す演算を行い、前記演算の結果と同じ値の番号が割り振られた前記複数のスレッドの内の１つに、前記出力電位が変化した前記複数の素子または前記出力電位が変化しなかった前記複数の素子を割り当てることを特徴とする請求項１または２に記載の集積回路の設計方法。
【請求項４】
記憶部に格納された集積回路の情報に基づいて、前記集積回路内の複数の素子を複数のスレッドに割り当てし、
前記複数のスレッドに割り当てられた前記複数の素子の出力電位の状態を前記スレッド毎に並列に解析し、
前記解析によって求められた前記複数の素子の出力電位の第１のタイミングにおける状態と、前記第１のタイミングから第１の時間経過した第２のタイミングにおける状態とを照合し、
前記照合によって求められた、前記第１のタイミングから前記第２のタイミングの間に前記出力電位の状態が変化した前記スレッド毎の前記複数の素子の数、および前記出力電位の状態が変化しなかった前記スレッド毎の前記複数の素子の数に基づいて、前記複数の素子を前記複数のスレッドに再度割り当てる、
処理をコンピュータに実行させることを特徴とする集積回路の設計プログラム。
【請求項５】
記憶部に格納された集積回路の情報に基づいて、前記集積回路内の複数の素子を複数のスレッドに割り当てる割り当て部と、
前記複数のスレッドに割り当てられた前記複数の素子の出力電位の状態を前記スレッド毎に並列に解析する解析部と、
前記解析によって求められた前記複数の素子の出力電位の第１のタイミングにおける状態と、前記第１のタイミングから第１の時間経過した第２のタイミングにおける状態とを照合する照合部と、
前記照合によって求められた、前記第１のタイミングから前記第２のタイミングの間に前記出力電位の状態が変化した前記スレッド毎の前記複数の素子の数、および前記出力電位の状態が変化しなかった前記スレッド毎の前記複数の素子の数に基づいて、前記複数の素子を前記複数のスレッドに再度割り当てる再割り当て部と、
を備えることを特徴とする集積回路の設計装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置に関する。
【背景技術】
【０００２】
従来、集積回路の設計に関し、電子回路の設計に用いられる並列回路シミュレーション装置が知られている。例えば、シミュレーション装置は、シミュレーション予測時間の長い子回路から順に二つの部分回路に分割する時点から所定の時点までの区間を一世代とし、一世代ごとに子回路全ての並列回路シミュレーション予測時間を求める。シミュレーション装置は、並列回路シミュレーション予測時間が前の世代で求めた並列回路シミュレーション予測時間より長くなったときに分割処理を停止する（例えば、特許文献１参照。）。
【０００３】
また、集積回路の電力解析システムが知られている。例えば、回路シミュレータは、組合せ回路を単位とするクラスタごとに回路情報と信号トグル情報とを算出し、これを用いて回路シミュレーションを行う。回路シミュレータは、クラスタごとの時系列的な電力値を解析して、回路全体の電力解析を行う（例えば、特許文献２参照。）。
【０００４】
また、疎結合並列計算機における負荷の動的均等化方法が知られている。例えば、マスタープロセッサは、与えられた仕事を、優先度の高いジョブと、スレーブプロセッサの個数以上の複数個の優先度の低いジョブとに分割する。マスタープロセッサは、優先度の高いジョブをスレーブプロセッサのうちのいくつかに割り付けるとともに、少なくとも優先度の低いジョブ一個を全スレーブプロセッサに分散して割り付ける。スレーブプロセッサは、ジョブを優先度の高いものから低いものの順に実行してその優先度の低いジョブが実行されるとき新たなジョブを要求する通信メッセージをマスタープロセッサに送信する。マスタープロセッサは、通信メッセージの到着によって通信メッセージを送信した既に優先度の低いジョブを保有していないスレーブプロセッサに対して、少なくとも一個の優先度の低いジョブを割り付ける（例えば、特許文献３参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平４−２１０７１号公報
【特許文献２】特開２００３−８５２３３号公報
【特許文献３】特公平７−１３８１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の技術では、回路全体を複数の回路に分割し、分割された各回路を複数のスレッドに割り当て、複数のスレッドを並列に処理する場合、効率よく並列処理を行うことが困難であるという問題点がある。例えば、少しずつ時刻を進めながら集積回路の各素子の状態を解析する場合、素子の入力信号の変化量が大きいときに計算を行い、素子の入力信号の変化量が小さいときに変化なしとして計算を省略することができる。従って、複数のスレッドに対する素子の割り当てを固定状態にして解析を進めると、ある時刻において、計算が行われる素子の数が多いスレッドと、計算が行われる素子の数が少ないスレッドと、が生じることがある。計算が行われる素子の数が多いスレッドでは、計算量が多くなるため、計算が終了するのに時間がかかる。計算が行われる素子の数が少ないスレッドでは、計算量が少ないので、短時間で計算が終了する。集積回路の経時的な変化を解析する場合、同一の時刻における全ての素子の解析が終了しないと次の時刻の解析に進むことができない。つまり、ある時刻における解析に要する時間は、計算が行われる素子の数が多いスレッドの計算に要する時間で決まる。そのため、計算が行われる素子の数が多いスレッドと、計算が行われる素子の数が少ないスレッドと、が混在すると、効率よく並列処理を行うことができない。
【０００７】
本発明は、上述した従来技術による問題点を解消するため、効率よく並列処理を行うことができる集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
この集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置では、集積回路内の複数の素子が複数のスレッドに割り当てられる。各スレッドに割り当てられた各素子の状態をスレッドごとに解析する処理が、複数のスレッドで並列に行われる。各スレッドに割り当てられた各素子の解析状況が照合され、解析状況を照合した結果に基づいて複数の素子が複数のスレッドに再度割り当てられる。
【発明の効果】
【０００９】
この集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置によれば、効率よく並列処理を行うことができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】実施例にかかる設計装置のハードウェア構成を示すブロック図である。
【図２】実施例にかかる設計装置の機能的な構成を示すブロック図である。
【図３】実施例にかかる設計方法を示すフローチャートである。
【図４】実施例にかかる設計方法の第１の例を示すフローチャートである。
【図５】実施例にかかる設計方法の第２の例を示すフローチャートである。
【図６】実施例にかかる設計方法の第３の例を示すフローチャートである。
【図７】実施例にかかる設計方法の第４の例を示すフローチャートである。
【図８】実施例にかかる再割り当て方法の第１の例を示すフローチャートである。
【図９】実施例にかかる再割り当て方法の第１の例を説明する説明図である。
【図１０】実施例にかかる再割り当て方法の第２の例を示すフローチャートである。
【図１１】実施例にかかる再割り当て方法の第３の例を示すフローチャートである。
【図１２】実施例にかかる再割り当て方法の第２または第３の例を説明する説明図である。
【図１３】集積回路の製造手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本開示技術にかかる集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置の好適な実施の形態を詳細に説明する。
【００１２】
（実施例１）
実施例１では、集積回路の設計を行う際に、集積回路内の複数の素子が複数のスレッドに割り当てられ、スレッドごとに素子の状態を解析する処理が複数のスレッドで並列に行われる。そして、ある時刻の各素子の解析状況に基づいて複数の素子が複数のスレッドに再度割り当てられる。次の時刻の解析は、複数の素子が複数のスレッドに再度割り当てられた状態で行われる。
【００１３】
・設計装置のハードウェア構成
図１は、実施例にかかる設計装置のハードウェア構成を示すブロック図である。図１に示すように、設計装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３と、磁気ディスクドライブ４と、磁気ディスク５と、光ディスクドライブ６と、光ディスク７と、ディスプレイ８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）９と、キーボード１０と、マウス１１と、スキャナ１２と、プリンタ１３と、を備えている。また、各構成部はバス１５によってそれぞれ接続されている。
【００１４】
ここで、ＣＰＵ１は、設計装置の全体の制御を司る。ＲＯＭ２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ３は、ＣＰＵ１のワークエリアとして使用される。磁気ディスクドライブ４は、ＣＰＵ１の制御にしたがって磁気ディスク５に対するデータのリード／ライトを制御する。磁気ディスク５は、磁気ディスクドライブ４の制御で書き込まれたデータを記憶する。
【００１５】
光ディスクドライブ６は、ＣＰＵ１の制御にしたがって光ディスク７に対するデータのリード／ライトを制御する。光ディスク７は、光ディスクドライブ６の制御で書き込まれたデータを記憶したり、光ディスク７に記憶されたデータをコンピュータに読み取らせたりする。
【００１６】
ディスプレイ８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００１７】
インターフェース（以下、「Ｉ／Ｆ」と略する。）９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１４に接続され、このネットワーク１４を介して他の装置に接続される。そして、Ｉ／Ｆ９は、ネットワーク１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００１８】
キーボード１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００１９】
スキャナ１２は、画像を光学的に読み取り、設計装置内に画像データを取り込む。なお、スキャナ１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ１３は、画像データや文書データを印刷する。プリンタ１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００２０】
・設計装置の機能的構成
図２は、実施例にかかる設計装置の機能的な構成を示すブロック図である。図２に示すように、設計装置は、割り当て部２１、解析部２２、照合部２３および再割り当て部２４を備えている。割り当て部２１は、集積回路内の複数の素子を複数のスレッドに割り当てる。解析部２２は、各スレッドに割り当てられた各素子の状態をスレッドごとに解析する。スレッドごとの解析処理は、複数のスレッドで並列に行われる。照合部２３は、各スレッドに割り当てられた各素子の解析状況を照合する。再割り当て部２４は、解析状況を照合した結果に基づいて複数の素子を複数のスレッドに再度割り当てる。割り当て部２１、解析部２２、照合部２３および再割り当て部２４は、例えばＲＯＭ２、ＲＡＭ３、磁気ディスク５、光ディスク７などの記憶部に記憶された当該機能に関するプログラムをＣＰＵ１に実行させることにより、または、Ｉ／Ｆ９により、当該機能を実現することができる。割り当て部２１に入力される回路の情報や、解析部２２から出力される解析結果は、例えば記憶部に保持される。
【００２１】
・集積回路の設計方法
図３は、実施例にかかる設計方法を示すフローチャートである。図３に示すように、集積回路を設計する処理が開始されると、まず、集積回路の情報に基づいて、集積回路内の複数の素子が複数のスレッドに割り当てられる（ステップＳ１）。次いで、スレッドごとに、各スレッドに割り当てられた各素子の状態が解析される。各素子の状態を解析する処理は、複数のスレッドで並列に行われる（ステップＳ２）。次いで、終了であるか否かが判定される（ステップＳ３）。終了でない場合（ステップＳ３：Ｎｏ）、各スレッドに割り当てられた各素子の、ステップＳ２における解析状況が照合される（ステップＳ４）。次いで、ステップＳ４での解析状況の照合結果に基づいて、複数の素子が複数のスレッドに再度割り当てられる（ステップＳ５）。そして、ステップＳ２に戻り、各素子の状態を解析する処理がスレッドごとに並列に処理される（ステップＳ２）。ステップＳ３で終了であると判定されるまで、ステップＳ２〜ステップＳ５が繰り返される。ステップＳ３で終了であると判定されると（ステップＳ３：Ｙｅｓ）、一連の処理が終了する。
【００２２】
実施例１によれば、ある時刻において並列に処理された複数のスレッドにおける各素子の解析状況に基づいて各スレッドに素子が再度割り当てられる。各スレッドに素子が再度割り当てられた状態で、次の時刻の解析が行われる。従って、ある時刻において並列に処理されたスレッド間の負荷に偏りがあっても、次の時刻において並列に処理されるスレッド間の負荷の偏りがなくなるように各スレッドに素子が再度割り当てられることによって、効率よく並列処理を行うことができる。
【００２３】
（実施例２）
実施例２には、実施例１の設計方法の具体例を示す。設計装置のハードウェア構成および機能的構成は、実施例１と同様である。
【００２４】
・集積回路の設計方法（１）
図４は、実施例にかかる設計方法の第１の例を示すフローチャートである。この第１の例は、時刻ｔの解析を行うたびに各スレッドに素子を再度割り当てる方法である。図４に示すように、集積回路を設計する処理が開始されると、まず、集積回路の情報として例えばネットリストが読み込まれる。また、解析を行う際の制御情報として例えば解析の終了までの時間や解析の間隔Δｔが読み込まれる（ステップＳ１１）。次いで、集積回路の情報に基づいて集積回路内の複数の素子が複数のスレッドに割り当てられる（ステップＳ１２）。素子の一例として、例えばトランジスタが挙げられる。次いで、各スレッドが並列に処理されて、時刻ｔが０であるときの回路の初期状態が解析される（ステップＳ１３）。回路の状態を解析することの一例として、例えば各素子の出力電位を計算することが挙げられる。ここでは、各素子の出力電位を計算することとする。次いで、時刻ｔがΔｔだけ進められる（ステップＳ１４）。次いで、各スレッドが並列に処理されて、時刻ｔのときの回路の状態が解析される（ステップＳ１５）。次いで、現在の時刻が解析の終了時刻であるか否かが判定される（ステップＳ１６）。
【００２５】
現在の時刻が終了時刻でない場合（ステップＳ１６：Ｎｏ）、スレッドごとの素子の解析状況がチェックされる（ステップＳ１７）。解析状況のチェックによって、現在の時刻において各スレッドの各素子について、例えば出力電位が計算されたか否かの情報が作成される。素子の入力電位が変化すると、該素子の出力電位が変化する。信号が第１の電位（例えば、ハイやロー）から第２の電位（例えば、ローやハイ）に遷移するのに要する時間や、信号が第１の電位または第２の電位である時間と比較して、Δｔは短い。従って、ある素子の入力電位が現在の時刻とその一つ前の時刻（現在よりもΔｔだけ前の時刻）とで殆ど変化していない場合、該素子の現在の時刻における出力電位は、その一つ前の時刻における出力電位と殆ど同じである。それゆえ、Δｔの間に入力電位に変化がないと見なせる素子については、出力電位の計算を省略することができる。それに対して、Δｔの間に入力電位に変化があると見なせる素子については、出力電位が変化する可能性があるので、出力電位を計算するのが好ましい。
【００２６】
次いで、ステップＳ１７で作成された、各素子の出力電位が計算されたか否かの情報に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる（ステップＳ１８）。上述したように、Δｔが短いので、ある素子の現在の時刻における入力電位がその一つ前の時刻（現在よりもΔｔだけ前の時刻）における入力電位に対して変化している場合、該素子の入力電位は、次の時刻（現在よりもΔｔだけ後の時刻）においても変化している確率が高い。一方、ある素子の現在の時刻における入力電位がその一つ前の時刻（現在よりもΔｔだけ前の時刻）における入力電位に対して変化していない場合、該素子の入力電位は、次の時刻（現在よりもΔｔだけ後の時刻）においても変化していない確率が高い。つまり、現在の時刻において出力電位が計算された素子については、次の時刻においても出力電位が計算されると見なすことができる。現在の時刻において出力電位が計算されなかった素子については、次の時刻においても出力電位が計算されないと見なすことができる。従って、各スレッドに素子を再度割り当てる際には、現在の時刻において出力電位が計算された素子を複数のスレッドに均等に割り当てるのが好ましい。また、現在の時刻において出力電位が計算されなかった素子も複数のスレッドに均等に割り当てるようにしてもよい。出力電位が計算された素子を複数のスレッドに再度割り当てる方法については、後述する。
【００２７】
次いで、時刻ｔがさらにΔｔだけ進められる（ステップＳ１９）。そして、ステップＳ１５に戻り、ステップＳ１５〜ステップＳ１９の処理が繰り返される。ステップＳ１６で終了時刻になると（ステップＳ１６：Ｙｅｓ）、解析結果が出力され（ステップＳ２０）、一連の処理が終了する。上述した設計方法（１）の代わりに、解析状況に変化があるときに各スレッドに素子を再度割り当てるようにしてもよい。
【００２８】
・集積回路の設計方法（２）
図５は、実施例にかかる設計方法の第２の例を示すフローチャートである。この第２の例は、前回の解析状況と今回の解析状況とが異なるときに各スレッドに素子を再度割り当てる方法である。図５に示すように、集積回路を設計する処理が開始されると、まず、上述した設計方法（１）のステップＳ１１〜ステップＳ１６と同様の処理が行われる（ステップＳ３１〜ステップＳ３６）。ただし、ステップＳ３５では、時刻ｔのときの回路の状態が解析されるときに、時刻ｔ（今回）における素子の解析状況と、その一つ前の時刻（前回）における素子の解析状況が記録される（ステップＳ３５）。今回の素子の解析状況と前回の素子の解析状況の情報は、例えばＲＡＭ３、磁気ディスク５、光ディスク７などの記憶部に保持される。終了時刻になっていない場合（ステップＳ３６：Ｎｏ）、前回の素子の解析状況の記録と今回の素子の解析状況の記録とが比較される（ステップＳ３７）。そして、前回の素子の解析状況と今回の素子の解析状況とが同じであるか否かが判定される（ステップＳ３８）。
【００２９】
前回の素子の解析状況と今回の素子の解析状況とが同じでない場合（ステップＳ３８：Ｎｏ）、上述した設計方法（１）のステップＳ１８と同様に、ステップＳ３５で記録された今回の素子の解析状況に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる（ステップＳ３９）。次いで、時刻ｔがさらにΔｔだけ進められる（ステップＳ４０）。一方、前回の素子の解析状況と今回の素子の解析状況とが同じである場合（ステップＳ３８：Ｙｅｓ）、ステップＳ３９を省略してステップＳ４０へ進む。そして、ステップＳ３５に戻り、ステップＳ３５〜ステップＳ４０の処理が繰り返される。ステップＳ３６で終了時刻になると（ステップＳ３６：Ｙｅｓ）、解析結果が出力され（ステップＳ４１）、一連の処理が終了する。上述した設計方法（１）、（２）の代わりに、一定時間ごとに各スレッドに素子を再度割り当てるようにしてもよい。
【００３０】
・集積回路の設計方法（３）
図６は、実施例にかかる設計方法の第３の例を示すフローチャートである。この第３の例は、所定時間が経過するたびに各スレッドに素子を再度割り当てる方法である。図６に示すように、集積回路を設計する処理が開始されると、まず、上述した設計方法（１）のステップＳ１１〜ステップＳ１６と同様の処理が行われる（ステップＳ５１〜ステップＳ５６）。ただし、ステップＳ５５では、時刻ｔのときの回路の状態が解析されるときに、素子の解析状況が記録される（ステップＳ５５）。終了時刻になっていない場合（ステップＳ５６：Ｎｏ）、時刻ｔが０であるときまたは前回各スレッドに素子を再度割り当てたときから、所定の時間が経過したか否かが判定される。例えば、時刻ｔの値を所定の時間（例えば、Δｔの１０倍の時間）の値で除したときの剰余が０であるときに所定の時間が経過したと判定される。剰余が０でないときには、所定の時間が経過していないと判定される（ステップＳ５７）。
【００３１】
所定の時間が経過した場合（ステップＳ５７：Ｙｅｓ）、上述した設計方法（１）のステップＳ１８と同様に、ステップＳ５５で記録された素子の解析状況に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる（ステップＳ５８）。次いで、時刻ｔがさらにΔｔだけ進められる（ステップＳ５９）。一方、所定の時間が経過していない場合（ステップＳ５７：Ｎｏ）、ステップＳ５８を省略してステップＳ５９へ進む。そして、ステップＳ５５に戻り、ステップＳ５５〜ステップＳ５９の処理が繰り返される。ステップＳ５６で終了時刻になると（ステップＳ５６：Ｙｅｓ）、解析結果が出力され（ステップＳ６０）、一連の処理が終了する。なお、素子の解析が所定回数行われたとき、すなわちΔｔの更新が所定回数行われたときに各スレッドに素子が再度割り当てられるようにしてもよい。上述した設計方法（１）、（２）、（３）の代わりに、スレッド間の、出力電位が計算された素子数の割合の差に基づいて各スレッドに素子を再度割り当てるようにしてもよい。
【００３２】
・集積回路の設計方法（４）
図７は、実施例にかかる設計方法の第４の例を示すフローチャートである。この第４の例は、スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えたときに各スレッドに素子を再度割り当てる方法である。図７に示すように、集積回路を設計する処理が開始されると、まず、上述した設計方法（１）のステップＳ１１〜ステップＳ１６と同様の処理が行われる（ステップＳ７１〜ステップＳ７６）。ただし、ステップＳ７５では、時刻ｔのときの回路の状態が解析されるときに、素子の解析状況が記録される（ステップＳ７５）。終了時刻になっていない場合（ステップＳ７６：Ｎｏ）、ステップＳ７５で記録された素子の解析状況に基づいて、スレッドごとの素子の解析状況がチェックされる（ステップＳ７７）。解析状況のチェックによって、スレッドごとに時刻ｔのときに出力電位が計算された素子数の割合が計算される。次いで、スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えたか否かが判定される（ステップＳ７８）。例えば、所定値が５０％である場合、出力電位が計算された素子数の割合が最も大きいスレッドの該割合と、出力電位が計算された素子数の割合が最も小さいスレッドの該割合との差が例えば５０％を超えたか否かが判定される。
【００３３】
スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えた場合（ステップＳ７８：Ｙｅｓ）、上述した設計方法（１）のステップＳ１８と同様に、ステップＳ７５で記録された素子の解析状況に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる（ステップＳ７９）。次いで、時刻ｔがさらにΔｔだけ進められる（ステップＳ８０）。一方、スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えていない場合（ステップＳ７８：Ｎｏ）、ステップＳ７９を省略してステップＳ８０へ進む。そして、ステップＳ７５に戻り、ステップＳ７５〜ステップＳ８０の処理が繰り返される。ステップＳ７６で終了時刻になると（ステップＳ７６：Ｙｅｓ）、解析結果が出力され（ステップＳ８１）、一連の処理が終了する。なお、上述した設計方法（２）、（３）および（４）のうちの二つまたは三つを組み合わせてもよい。
【００３４】
・出力電位が計算された素子を複数のスレッドに再度割り当てる方法（１）
図８は、実施例にかかる再割り当て方法の第１の例を示すフローチャートである。この第１の例は、素子の番号順に素子を複数のスレッドに割り当てる方法である。図８に示すように、再割り当て処理が開始されると、まず、ａの値およびｂの値がともに０に設定され、ｃの値が１に設定される（ステップＳ９１）。ａの値は、例えば出力電位が計算された素子の数を数えるカウンタの値である。ａの値は、例えば０以上の整数である。ｂの値は、例えば出力電位が計算されなかった素子の数を数えるカウンタの値である。ｂの値は、例えば０以上の整数である。ｃの値は、例えば個々の素子に付された個別の番号である。ｃの値は、例えば１以上の整数である。次いで、ｃ番目の素子について前回出力電位が計算されたか否かが判定される（ステップＳ９２）。
【００３５】
前回ｃ番目の素子の出力電位が計算されていた場合（ステップＳ９２：Ｙｅｓ）、出力電位が計算された素子の数を数えるカウンタの値ａをスレッドの数で除したときの剰余に１を足した値ｄが求められる。ｄの値は、例えば個々のスレッドに付された個別の番号である。ｄの値は、例えば１以上の整数である。ｄ番目のスレッドにｃ番目の素子が割り当てられる。出力電位が計算された素子の数を数えるカウンタの値ａに１が加算される（ステップＳ９３）。例えば、出力電位が計算された素子の数を数えるカウンタの値ａが０であるとする。ｃの値が１であるとする。前回１番目の素子の出力電位が計算されていたとする。ｄの値は１となるので、１番目のスレッドに１番目の素子が割り当てられる。そして、出力電位が計算された素子が一つ見つかったので、出力電位が計算された素子の数を数えるカウンタの値ａが１となる。
【００３６】
一方、前回ｃ番目の素子の出力電位が計算されていなかった場合（ステップＳ９２：Ｎｏ）、出力電位が計算されなかった素子の数を数えるカウンタの値ｂをスレッドの数で除したときの剰余に１を足した値ｄが求められる。ｄ番目のスレッドにｃ番目の素子が割り当てられる。出力電位が計算されなかった素子の数を数えるカウンタの値ｂに１が加算される（ステップＳ９４）。例えば、出力電位が計算されなかった素子の数を数えるカウンタの値ｂが０であるとする。ｃの値が３であるとする。前回３番目の素子の出力電位が計算されていなかったとする。ｄの値は１となるので、１番目のスレッドに３番目の素子が割り当てられる。そして、出力電位が計算されなかった素子が一つ見つかったので、出力電位が計算されなかった素子の数を数えるカウンタの値ｂが１となる。
【００３７】
次いで、素子の番号ｃが素子の数と同じであるか否かが判定される（ステップＳ９５）。ｃの値が素子の数と同じでない場合（ステップＳ９５：Ｎｏ）、素子の番号ｃの値に１が加算される（ステップＳ９６）。そして、ステップＳ９２に戻り、ステップＳ９２〜ステップＳ９６の処理が繰り返される。ステップＳ９５でｃの値が素子の数と同じになると（ステップＳ９５：Ｙｅｓ）、全ての素子の再割り当てが終了したので、一連の処理が終了する。
【００３８】
図９は、実施例にかかる再割り当て方法の第１の例を説明する説明図である。図９において、符号３１は、素子の番号ｃの値を示している。符号３２は、各素子番号の素子の前回の解析状況を示している。●は、前回出力電位が計算されたことを表し、○は、前回出力電位が計算されなかったことを表している。符号３３は、出力電位が計算された素子の数を数えるカウンタの値ａの変化の様子を示している。符号３４は、出力電位が計算されなかった素子の数を数えるカウンタの値ｂの変化の様子を示している。符号３５は、スレッドの番号ｄの値を示している。符号３６は、各スレッドに割り当てられた、前回出力電位が計算された素子の番号を示している。符号３７は、各スレッドに割り当てられた、前回出力電位が計算されなかった素子の番号を示している。図９に示すように、前回出力電位が計算された素子と前回出力電位が計算されなかった素子とが別々に、例えば素子の番号ｃの値が小さい順に、スレッドの番号ｄの値が小さい順にスレッドに割り当てられていく。従って、前回出力電位が計算された素子が最も多く割り当てられたスレッドと、前回出力電位が計算された素子が最も少なく割り当てられたスレッドとで、前回出力電位が計算された素子の数の差は、０または１となる。上述した再割り当て方法（１）の代わりに、前回出力電位が計算された素子をスレッド間で移動させるようにして各スレッドに素子を再度割り当てるようにしてもよい。
【００３９】
・出力電位が計算された素子を複数のスレッドに再度割り当てる方法（２）
図１０は、実施例にかかる再割り当て方法の第２の例を示すフローチャートである。この第２の例は、前回出力電位が計算された素子の数が多いスレッドから前回出力電位が計算された素子の数が少ないスレッドへ、前回出力電位が計算された素子を移動させる方法である。図１０に示すように、再割り当て処理が開始されると、まず、前回出力電位が計算された素子の数をスレッドの数で除した値ｅが求められる。ｅの値の整数部に１を足した値ｆが求められる。ｅの値の整数部から１を引いた値ｇが求められる（ステップＳ１０１）。ｅの値は、前回出力電位が計算された素子の数の１スレッド当たりの平均値である。ｆの値は、前回出力電位が計算された素子の数の平均値ｅの前後にある整数のうちの大きい方の値である。ｇの値は、前回出力電位が計算された素子の数の平均値ｅの前後にある整数のうちの小さい方の値である。例えば、ｅの値が１９．３である場合、ｆの値は２０となり、ｇの値は１９となる。ただし、ｅの値が整数である場合には、ｆおよびｇの値は、ともにｅの値となる。例えば、ｅの値が１９である場合、ｆの値とｇの値はともに１９である。
【００４０】
次いで、スレッドが順に調査され、前回出力電位が計算された素子の数がｆの値よりも大きいスレッドＨが検索される（ステップＳ１０２）。前回出力電位が計算された素子の数がｆの値よりも大きいスレッドは、前回出力電位が計算された素子の数が多いスレッドである。次いで、スレッドＨがあるか否かが判定される（ステップＳ１０３）。スレッドＨがある場合（ステップＳ１０３：Ｙｅｓ）、前回出力電位が計算された素子の数が最も少ないスレッドＪが検索される（ステップＳ１０４）。スレッドＪが複数ある場合には、そのうちの一つが選択される。選択の仕方は、任意である。次いで、スレッドＨの前回出力電位が計算された素子がスレッドＨからスレッドＪへ移動させられる。スレッドＪに前回出力電位が計算されなかった素子がある場合には、スレッドＨからスレッドＪへ前回出力電位が計算された素子が移動させられる際に、スレッドＪの前回出力電位が計算されなかった素子がスレッドＪからスレッドＨへ移動させられてもよい。つまり、スレッドＨの前回出力電位が計算された素子と、スレッドＪの前回出力電位が計算されなかった素子との交換が行われてもよい（ステップＳ１０５）。そして、ステップＳ１０２に戻り、ステップＳ１０２〜ステップＳ１０５の処理が繰り返される。ステップＳ１０２〜ステップＳ１０５の処理を行うことによって、スレッドＨがなくなる。
【００４１】
ステップＳ１０３でスレッドＨがない場合（ステップＳ１０３：Ｎｏ）、スレッドが順に調査され、前回出力電位が計算された素子の数がｇの値よりも小さいスレッドＫが検索される（ステップＳ１０６）。前回出力電位が計算された素子の数がｇの値よりも小さいスレッドは、前回出力電位が計算された素子の数が少ないスレッドである。次いで、スレッドＫがあるか否かが判定される（ステップＳ１０７）。スレッドＫがある場合（ステップＳ１０７：Ｙｅｓ）、前回出力電位が計算された素子の数が最も多いスレッドＬが検索される（ステップＳ１０８）。スレッドＬが複数ある場合には、そのうちの一つが選択される。選択の仕方は、任意である。次いで、スレッドＬの前回出力電位が計算された素子がスレッドＬからスレッドＫへ移動させられる。スレッドＫに前回出力電位が計算されなかった素子がある場合には、スレッドＬからスレッドＫへ前回出力電位が計算された素子が移動させられる際に、スレッドＫの前回出力電位が計算されなかった素子がスレッドＫからスレッドＬへ移動させられてもよい。つまり、スレッドＬの前回出力電位が計算された素子と、スレッドＫの前回出力電位が計算されなかった素子との交換が行われてもよい（ステップＳ１０９）。そして、ステップＳ１０６に戻り、ステップＳ１０６〜ステップＳ１０９の処理が繰り返される。ステップＳ１０６〜ステップＳ１０９の処理を行うことによって、スレッドＫがなくなる。ステップＳ１０７でスレッドＫがなくなると（ステップＳ１０７：Ｎｏ）、一連の処理が終了する。なお、時刻ｔが０であるときの素子の割り当て状況によっては、スレッドＪやスレッドＫに前回出力電位が計算されなかった素子がない場合がある。上述した再割り当て方法（２）とは異なる方法で、前回出力電位が計算された素子をスレッド間で移動させるようにして各スレッドに素子を再度割り当てるようにしてもよい。
【００４２】
・出力電位が計算された素子を複数のスレッドに再度割り当てる方法（３）
図１１は、実施例にかかる再割り当て方法の第３の例を示すフローチャートである。この第３の例は、前回出力電位が計算された素子の数が最も多いスレッドから前回出力電位が計算された素子の数が最も少ないスレッドへ、前回出力電位が計算された素子を移動させる方法である。図１１に示すように、再割り当て処理が開始されると、まず、スレッドごとに前回出力電位が計算された素子の数が調べられる。そして、前回出力電位が計算された素子の数が最も多いスレッドＭの、前回出力電位が計算された素子の数がｍとされる（ステップＳ１１１）。また、前回出力電位が計算された素子の数が最も少ないスレッドＮの、前回出力電位が計算された素子の数がｎとされる（ステップＳ１１２）。ステップＳ１１１とステップＳ１１２は、処理の順序が逆でもよいし、同時に処理されてもよい。次いで、ｍの値からｎの値を引いた値が１以下であるか否かが判定される（ステップＳ１１３）。
【００４３】
ｍの値からｎの値を引いた値が２以上である場合（ステップＳ１１３：Ｎｏ）、スレッドＭの前回出力電位が計算された素子がスレッドＭからスレッドＮへ移動させられる。スレッドＮに前回出力電位が計算されなかった素子がある場合には、スレッドＭからスレッドＮへ前回出力電位が計算された素子が移動させられる際に、スレッドＮの前回出力電位が計算されなかった素子がスレッドＮからスレッドＭへ移動させられてもよい。つまり、スレッドＭの前回出力電位が計算された素子と、スレッドＮの前回出力電位が計算されなかった素子との交換が行われてもよい（ステップＳ１１４）。ステップＳ１１４において移動させられる素子の数は、前回出力電位が計算された素子および前回出力電位が計算されなかった素子のいずれも一つずつである。そして、ステップＳ１１１に戻り、ステップＳ１１１〜ステップＳ１１４の処理が繰り返される。ステップＳ１１３でｍの値からｎの値を引いた値が１または０になると（ステップＳ１１３：Ｙｅｓ）、スレッド間で、前回出力電位が計算された素子の数が均等に割り当てられたことになるので、一連の処理が終了する。なお、時刻ｔが０であるときの素子の割り当て状況によっては、スレッドＮに前回出力電位が計算されなかった素子がない場合がある。
【００４４】
スレッド間で、前回出力電位が計算された素子の数が均等化されると、ｍの値からｎの値を引いた値が１または０になる。これは、上述した再割り当て方法（２）において説明したｅの値、ｆの値およびｇの値を用いて以下のように説明される。ｅの値が整数でないとき、各スレッドの前回出力電位が計算された素子の数はｆの値かｇの値となるので、ｍの値からｎの値を引いた値が１となる。ｅの値が整数であるときには、各スレッドの前回出力電位が計算された素子の数はｅの値となるので、ｍの値からｎの値を引いた値が０となる。ただし、ｅの値が整数であっても、前回出力電位が計算された素子の数がｅの値でないスレッドがあれば、ｍの値からｎの値を引いた値は２以上となる。例えば、ｅの値が整数である場合、前回出力電位が計算された素子の数が［ｅ−１］個であるスレッドがあれば、前回出力電位が計算された素子の数が［ｅ＋１］個であるスレッドがあることになり、ｍの値からｎの値を引いた値は２となる。従って、ｍの値からｎの値を引いた値が１以下であれば、スレッド間で、前回出力電位が計算された素子の数が均等化されているといえる。
【００４５】
図１２は、実施例にかかる再割り当て方法の第２または第３の例を説明する説明図である。図１２において、符号４１は、スレッド番号が１であるスレッドに割り当てられた素子の経時的な変化の様子を示している。同様に、符号４２は、スレッド番号が２であるスレッドの様子、符号４３は、スレッド番号が３であるスレッドの様子、符号４４は、スレッド番号が４であるスレッドの様子をそれぞれ示している。●は、前回出力電位が計算されたことを表し、○は、前回出力電位が計算されなかったことを表している。各解析時刻間における各スレッド間の矢印は、素子の移動を表している。図１２に示す例では、ある時刻における素子の解析状況の情報から次の時刻における素子の割り当てが見直されている。また、例えば時刻Ｔ２から時刻Ｔｍ−１までのように、素子の解析状況に変化がない場合に、スレッドに素子を再度割り当てる処理が省略されてもよい。
【００４６】
・集積回路の製造手順
図１３は、集積回路の製造手順の一例を示すフローチャートである。図１３に示すように、まず、集積回路に要求される機能や制約などの仕様に基づいて、例えばＨａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ（ＨＤＬ、ハードウェア記述言語）で回路データ５１が記述される。記述された回路データ５１に基づいて論理合成が行われ（ステップＳ１２１）、ネットリスト５２が作成される。このネットリスト５２に対してタイミング解析が行われたり、ノイズやパワーの見積もりなどの解析が行われる（ステップＳ１２２）。その解析結果に基づいて、仕様を満たすまで論理合成が行われ（ステップＳ１２１）、ネットリスト５２が作成し直される。仕様を満たすネットリスト５２ができたら、そのネットリスト５２に基づいてレイアウト処理が行われ（ステップＳ１２３）、図形データ５３が作成される。この図形データ５３に対してタイミング解析が行われたり、ノイズやパワーの見積もりなどの解析が行われる（ステップＳ１２４）。また、図形データ５３に対して各種の検証が行われる（ステップＳ１２５）。解析結果や検証結果に基づいて、仕様を満たすまでレイアウト処理が行われ（ステップＳ１２３）、図形データ５３が作成し直される。仕様を満たすまで図形データ５３ができたら、その図形データ５３に基づいて、製造工程において集積回路が製造される（ステップＳ１２６）。
【００４７】
ステップＳ１２２やステップＳ１２４でタイミング解析を行うときには、タイミング解析を行う装置にセルやマクロのライブラリが読み込まれる。セルやマクロのネットリスト５４に基づいて回路シミュレーションを行うことによって（ステップＳ１２７）、セルやマクロのライブラリ５５が作成される。ステップＳ１２７の回路シミュレーションを行う際に、上述した各実施例が適用される。また、ネットリストの段階で行われるノイズやパワーの見積もりや、レイアウト処理後のパワー解析やノイズ解析において、上述した各実施例が適用された回路シミュレータが呼び出される。
【００４８】
実施例２によれば、実施例１と同様の効果が得られる。また、複数のスレッドが並列に処理されるマルチスレッド処理においては、共有メモリ上に全ての回路情報が格納されている。従って、スレッドに素子を再度割り当てる際にスレッドに割り当てられた素子が変更になっても、メモリを参照するためのオーバーヘッドは生じない。上述した実施例を適用しないで、各スレッドに素子を一つずつ割り当て、素子の出力電位の計算が終了したスレッドにその都度素子を割り当てていく場合には、集積回路の素子の数が多いため、その都度空いたスレッドに素子を割り当てるためのオーバーヘッドが大きくなりすぎるという欠点がある。上述した実施例によれば、このような欠点がない。また、素子の状態の変化を監視したり、素子を動的に割り当てるためのオーバーヘッドは、その都度空いたスレッドに素子を割り当てるためのオーバーヘッドよりも小さいと考えられる。
【００４９】
なお、上述した設計方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【００５０】
また、本実施の形態で説明した設計装置は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（ＡＳＩＣ）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、例えば、上述した設計装置の割り当て部２１、解析部２２、照合部２３および再割り当て部２４をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、設計装置を製造することができる。
【００５１】
上述した実施例１、２に関し、さらに以下の付記を開示する。
【００５２】
（付記１）コンピュータが、集積回路内の複数の素子を複数のスレッドに割り当てる割り当てステップと、各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析ステップと、各スレッドに割り当てられた各素子の解析状況を照合する照合ステップと、該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当てステップと、を実行することを特徴とする集積回路の設計方法。
【００５３】
（付記２）前記再割り当てステップでは、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を、次の解析のときにも計算される素子として再度割り当てを行い、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されなかったという結果である素子を、次の解析のときにも計算されない素子として再度割り当てを行うことを特徴とする付記１に記載の集積回路の設計方法。
【００５４】
（付記３）前記再割り当てステップでは、各スレッドに、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を順番に割り当てることを特徴とする付記２に記載の集積回路の設計方法。
【００５５】
（付記４）前記再割り当てステップでは、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも１大きいスレッドから、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも１小さいスレッドへ、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を移動させることを特徴とする付記２に記載の集積回路の設計方法。
【００５６】
（付記５）前記再割り当てステップでは、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が最も多いスレッドから、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が最も少ないスレッドへ、スレッド間の、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数の差が０または１になるまで、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を移動させることを特徴とする付記２に記載の集積回路の設計方法。
【００５７】
（付記６）前記コンピュータが、前記解析ステップを実行するたびに前記再割り当てステップを行うか、今回の前記照合ステップで得られた照合結果と前回の前記照合ステップで得られた照合結果とが異なるときに前記再割り当てステップを行うか、前記解析ステップを実行する間隔よりも長い間隔で前記再割り当てステップを行うか、スレッド間の、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数の差に基づいて前記再割り当てステップを行うことを特徴とする付記１〜５のいずれか一つに記載の集積回路の設計方法。
【００５８】
（付記７）コンピュータを、集積回路内の複数の素子を複数のスレッドに割り当てる割り当て部、各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析部、各スレッドに割り当てられた各素子の解析状況を照合する照合部、該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当て部、として機能させることを特徴とする集積回路の設計プログラム。
【００５９】
（付記８）前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を、次の解析のときにも計算される素子として再度割り当てを行い、前記照合部で得られた照合結果が前記解析部において計算されなかったという結果である素子を、次の解析のときにも計算されない素子として再度割り当てを行うことを特徴とする付記７に記載の集積回路の設計プログラム。
【００６０】
（付記９）前記再割り当て部は、各スレッドに、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を順番に割り当てることを特徴とする付記８に記載の集積回路の設計プログラム。
【００６１】
（付記１０）前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも１大きいスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも１小さいスレッドへ、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記８に記載の集積回路の設計プログラム。
【００６２】
（付記１１）前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も多いスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も少ないスレッドへ、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差が０または１になるまで、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記８に記載の集積回路の設計プログラム。
【００６３】
（付記１２）前記再割り当て部は、前記解析部で解析を実行するたびに再度割り当てを行うか、今回の前記照合部で得られた照合結果と前回の前記照合部で得られた照合結果とが異なるときに再度割り当てを行うか、前記解析部で解析を実行する間隔よりも長い間隔で再度割り当てを行うか、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差に基づいて再度割り当てを行うことを特徴とする付記７〜１１のいずれか一つに記載の集積回路の設計プログラム。
【００６４】
（付記１３）集積回路内の複数の素子を複数のスレッドに割り当てる割り当て部と、各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析部と、各スレッドに割り当てられた各素子の解析状況を照合する照合部と、該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当て部と、を備えることを特徴とする集積回路の設計装置。
【００６５】
（付記１４）前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を、次の解析のときにも計算される素子として再度割り当てを行い、前記照合部で得られた照合結果が前記解析部において計算されなかったという結果である素子を、次の解析のときにも計算されない素子として再度割り当てを行うことを特徴とする付記１３に記載の集積回路の設計装置。
【００６６】
（付記１５）前記再割り当て部は、各スレッドに、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を順番に割り当てることを特徴とする付記１４に記載の集積回路の設計装置。
【００６７】
（付記１６）前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも１大きいスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも１小さいスレッドへ、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記１４に記載の集積回路の設計装置。
【００６８】
（付記１７）前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も多いスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も少ないスレッドへ、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差が０または１になるまで、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記１４に記載の集積回路の設計装置。
【００６９】
（付記１８）前記再割り当て部は、前記解析部で解析を実行するたびに再度割り当てを行うか、今回の前記照合部で得られた照合結果と前回の前記照合部で得られた照合結果とが異なるときに再度割り当てを行うか、前記解析部で解析を実行する間隔よりも長い間隔で再度割り当てを行うか、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差に基づいて再度割り当てを行うことを特徴とする付記１３〜１７のいずれか一つに記載の集積回路の設計装置。
【符号の説明】
【００７０】
２１  割り当て部
２２  解析部
２３  照合部
２４  再割り当て部
【図１】
0005504721.tif 000002
【図２】
0005504721.tif 000003
【図３】
0005504721.tif 000004
【図４】
0005504721.tif 000005
【図５】
0005504721.tif 000006
【図６】
0005504721.tif 000007
【図７】
0005504721.tif 000008
【図８】
0005504721.tif 000009
【図９】
0005504721.tif 000010
【図１０】
0005504721.tif 000011
【図１１】
0005504721.tif 000012
【図１２】
0005504721.tif 000013
【図１３】
0005504721.tif 000014