集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置
【課題】集積回路の設計において、効率よく並列処理を行うこと。
【解決手段】集積回路の設計を行う際に、集積回路内の複数の素子が複数のスレッドに割り当てられる。スレッドごとに素子の状態を解析する処理が複数のスレッドで並列に行われる。ある時刻の各素子の解析状況に基づいて複数の素子が複数のスレッドに再度割り当てられる。例えば、並列に処理されるスレッド間の負荷の偏りがなくなるように各スレッドに素子が再度割り当てられる。次の時刻の解析は、複数の素子が複数のスレッドに再度割り当てられた状態で行われる。
【解決手段】集積回路の設計を行う際に、集積回路内の複数の素子が複数のスレッドに割り当てられる。スレッドごとに素子の状態を解析する処理が複数のスレッドで並列に行われる。ある時刻の各素子の解析状況に基づいて複数の素子が複数のスレッドに再度割り当てられる。例えば、並列に処理されるスレッド間の負荷の偏りがなくなるように各スレッドに素子が再度割り当てられる。次の時刻の解析は、複数の素子が複数のスレッドに再度割り当てられた状態で行われる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置に関する。
【背景技術】
【0002】
従来、集積回路の設計に関し、電子回路の設計に用いられる並列回路シミュレーション装置が知られている。例えば、シミュレーション装置は、シミュレーション予測時間の長い子回路から順に二つの部分回路に分割する時点から所定の時点までの区間を一世代とし、一世代ごとに子回路全ての並列回路シミュレーション予測時間を求める。シミュレーション装置は、並列回路シミュレーション予測時間が前の世代で求めた並列回路シミュレーション予測時間より長くなったときに分割処理を停止する(例えば、特許文献1参照。)。
【0003】
また、集積回路の電力解析システムが知られている。例えば、回路シミュレータは、組合せ回路を単位とするクラスタごとに回路情報と信号トグル情報とを算出し、これを用いて回路シミュレーションを行う。回路シミュレータは、クラスタごとの時系列的な電力値を解析して、回路全体の電力解析を行う(例えば、特許文献2参照。)。
【0004】
また、疎結合並列計算機における負荷の動的均等化方法が知られている。例えば、マスタープロセッサは、与えられた仕事を、優先度の高いジョブと、スレーブプロセッサの個数以上の複数個の優先度の低いジョブとに分割する。マスタープロセッサは、優先度の高いジョブをスレーブプロセッサのうちのいくつかに割り付けるとともに、少なくとも優先度の低いジョブ一個を全スレーブプロセッサに分散して割り付ける。スレーブプロセッサは、ジョブを優先度の高いものから低いものの順に実行してその優先度の低いジョブが実行されるとき新たなジョブを要求する通信メッセージをマスタープロセッサに送信する。マスタープロセッサは、通信メッセージの到着によって通信メッセージを送信した既に優先度の低いジョブを保有していないスレーブプロセッサに対して、少なくとも一個の優先度の低いジョブを割り付ける(例えば、特許文献3参照。)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平4−21071号公報
【特許文献2】特開2003−85233号公報
【特許文献3】特公平7−13817号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、従来の技術では、回路全体を複数の回路に分割し、分割された各回路を複数のスレッドに割り当て、複数のスレッドを並列に処理する場合、効率よく並列処理を行うことが困難であるという問題点がある。例えば、少しずつ時刻を進めながら集積回路の各素子の状態を解析する場合、素子の入力信号の変化量が大きいときに計算を行い、素子の入力信号の変化量が小さいときに変化なしとして計算を省略することができる。従って、複数のスレッドに対する素子の割り当てを固定状態にして解析を進めると、ある時刻において、計算が行われる素子の数が多いスレッドと、計算が行われる素子の数が少ないスレッドと、が生じることがある。計算が行われる素子の数が多いスレッドでは、計算量が多くなるため、計算が終了するのに時間がかかる。計算が行われる素子の数が少ないスレッドでは、計算量が少ないので、短時間で計算が終了する。集積回路の経時的な変化を解析する場合、同一の時刻における全ての素子の解析が終了しないと次の時刻の解析に進むことができない。つまり、ある時刻における解析に要する時間は、計算が行われる素子の数が多いスレッドの計算に要する時間で決まる。そのため、計算が行われる素子の数が多いスレッドと、計算が行われる素子の数が少ないスレッドと、が混在すると、効率よく並列処理を行うことができない。
【0007】
本発明は、上述した従来技術による問題点を解消するため、効率よく並列処理を行うことができる集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
この集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置では、集積回路内の複数の素子が複数のスレッドに割り当てられる。各スレッドに割り当てられた各素子の状態をスレッドごとに解析する処理が、複数のスレッドで並列に行われる。各スレッドに割り当てられた各素子の解析状況が照合され、解析状況を照合した結果に基づいて複数の素子が複数のスレッドに再度割り当てられる。
【発明の効果】
【0009】
この集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置によれば、効率よく並列処理を行うことができるという効果を奏する。
【図面の簡単な説明】
【0010】
【図1】実施例にかかる設計装置のハードウェア構成を示すブロック図である。
【図2】実施例にかかる設計装置の機能的な構成を示すブロック図である。
【図3】実施例にかかる設計方法を示すフローチャートである。
【図4】実施例にかかる設計方法の第1の例を示すフローチャートである。
【図5】実施例にかかる設計方法の第2の例を示すフローチャートである。
【図6】実施例にかかる設計方法の第3の例を示すフローチャートである。
【図7】実施例にかかる設計方法の第4の例を示すフローチャートである。
【図8】実施例にかかる再割り当て方法の第1の例を示すフローチャートである。
【図9】実施例にかかる再割り当て方法の第1の例を説明する説明図である。
【図10】実施例にかかる再割り当て方法の第2の例を示すフローチャートである。
【図11】実施例にかかる再割り当て方法の第3の例を示すフローチャートである。
【図12】実施例にかかる再割り当て方法の第2または第3の例を説明する説明図である。
【図13】集積回路の製造手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下に添付図面を参照して、本開示技術にかかる集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置の好適な実施の形態を詳細に説明する。
【0012】
(実施例1)
実施例1では、集積回路の設計を行う際に、集積回路内の複数の素子が複数のスレッドに割り当てられ、スレッドごとに素子の状態を解析する処理が複数のスレッドで並列に行われる。そして、ある時刻の各素子の解析状況に基づいて複数の素子が複数のスレッドに再度割り当てられる。次の時刻の解析は、複数の素子が複数のスレッドに再度割り当てられた状態で行われる。
【0013】
・設計装置のハードウェア構成
図1は、実施例にかかる設計装置のハードウェア構成を示すブロック図である。図1に示すように、設計装置は、CPU(Central Processing Unit)1と、ROM(Read‐Only Memory)2と、RAM(Random Access Memory)3と、磁気ディスクドライブ4と、磁気ディスク5と、光ディスクドライブ6と、光ディスク7と、ディスプレイ8と、I/F(Interface)9と、キーボード10と、マウス11と、スキャナ12と、プリンタ13と、を備えている。また、各構成部はバス15によってそれぞれ接続されている。
【0014】
ここで、CPU1は、設計装置の全体の制御を司る。ROM2は、ブートプログラムなどのプログラムを記憶している。RAM3は、CPU1のワークエリアとして使用される。磁気ディスクドライブ4は、CPU1の制御にしたがって磁気ディスク5に対するデータのリード/ライトを制御する。磁気ディスク5は、磁気ディスクドライブ4の制御で書き込まれたデータを記憶する。
【0015】
光ディスクドライブ6は、CPU1の制御にしたがって光ディスク7に対するデータのリード/ライトを制御する。光ディスク7は、光ディスクドライブ6の制御で書き込まれたデータを記憶したり、光ディスク7に記憶されたデータをコンピュータに読み取らせたりする。
【0016】
ディスプレイ8は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ8は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0017】
インターフェース(以下、「I/F」と略する。)9は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク14に接続され、このネットワーク14を介して他の装置に接続される。そして、I/F9は、ネットワーク14と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F9には、たとえばモデムやLANアダプタなどを採用することができる。
【0018】
キーボード10は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス11は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【0019】
スキャナ12は、画像を光学的に読み取り、設計装置内に画像データを取り込む。なお、スキャナ12は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ13は、画像データや文書データを印刷する。プリンタ13には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【0020】
・設計装置の機能的構成
図2は、実施例にかかる設計装置の機能的な構成を示すブロック図である。図2に示すように、設計装置は、割り当て部21、解析部22、照合部23および再割り当て部24を備えている。割り当て部21は、集積回路内の複数の素子を複数のスレッドに割り当てる。解析部22は、各スレッドに割り当てられた各素子の状態をスレッドごとに解析する。スレッドごとの解析処理は、複数のスレッドで並列に行われる。照合部23は、各スレッドに割り当てられた各素子の解析状況を照合する。再割り当て部24は、解析状況を照合した結果に基づいて複数の素子を複数のスレッドに再度割り当てる。割り当て部21、解析部22、照合部23および再割り当て部24は、例えばROM2、RAM3、磁気ディスク5、光ディスク7などの記憶部に記憶された当該機能に関するプログラムをCPU1に実行させることにより、または、I/F9により、当該機能を実現することができる。割り当て部21に入力される回路の情報や、解析部22から出力される解析結果は、例えば記憶部に保持される。
【0021】
・集積回路の設計方法
図3は、実施例にかかる設計方法を示すフローチャートである。図3に示すように、集積回路を設計する処理が開始されると、まず、集積回路の情報に基づいて、集積回路内の複数の素子が複数のスレッドに割り当てられる(ステップS1)。次いで、スレッドごとに、各スレッドに割り当てられた各素子の状態が解析される。各素子の状態を解析する処理は、複数のスレッドで並列に行われる(ステップS2)。次いで、終了であるか否かが判定される(ステップS3)。終了でない場合(ステップS3:No)、各スレッドに割り当てられた各素子の、ステップS2における解析状況が照合される(ステップS4)。次いで、ステップS4での解析状況の照合結果に基づいて、複数の素子が複数のスレッドに再度割り当てられる(ステップS5)。そして、ステップS2に戻り、各素子の状態を解析する処理がスレッドごとに並列に処理される(ステップS2)。ステップS3で終了であると判定されるまで、ステップS2〜ステップS5が繰り返される。ステップS3で終了であると判定されると(ステップS3:Yes)、一連の処理が終了する。
【0022】
実施例1によれば、ある時刻において並列に処理された複数のスレッドにおける各素子の解析状況に基づいて各スレッドに素子が再度割り当てられる。各スレッドに素子が再度割り当てられた状態で、次の時刻の解析が行われる。従って、ある時刻において並列に処理されたスレッド間の負荷に偏りがあっても、次の時刻において並列に処理されるスレッド間の負荷の偏りがなくなるように各スレッドに素子が再度割り当てられることによって、効率よく並列処理を行うことができる。
【0023】
(実施例2)
実施例2には、実施例1の設計方法の具体例を示す。設計装置のハードウェア構成および機能的構成は、実施例1と同様である。
【0024】
・集積回路の設計方法(1)
図4は、実施例にかかる設計方法の第1の例を示すフローチャートである。この第1の例は、時刻tの解析を行うたびに各スレッドに素子を再度割り当てる方法である。図4に示すように、集積回路を設計する処理が開始されると、まず、集積回路の情報として例えばネットリストが読み込まれる。また、解析を行う際の制御情報として例えば解析の終了までの時間や解析の間隔Δtが読み込まれる(ステップS11)。次いで、集積回路の情報に基づいて集積回路内の複数の素子が複数のスレッドに割り当てられる(ステップS12)。素子の一例として、例えばトランジスタが挙げられる。次いで、各スレッドが並列に処理されて、時刻tが0であるときの回路の初期状態が解析される(ステップS13)。回路の状態を解析することの一例として、例えば各素子の出力電位を計算することが挙げられる。ここでは、各素子の出力電位を計算することとする。次いで、時刻tがΔtだけ進められる(ステップS14)。次いで、各スレッドが並列に処理されて、時刻tのときの回路の状態が解析される(ステップS15)。次いで、現在の時刻が解析の終了時刻であるか否かが判定される(ステップS16)。
【0025】
現在の時刻が終了時刻でない場合(ステップS16:No)、スレッドごとの素子の解析状況がチェックされる(ステップS17)。解析状況のチェックによって、現在の時刻において各スレッドの各素子について、例えば出力電位が計算されたか否かの情報が作成される。素子の入力電位が変化すると、該素子の出力電位が変化する。信号が第1の電位(例えば、ハイやロー)から第2の電位(例えば、ローやハイ)に遷移するのに要する時間や、信号が第1の電位または第2の電位である時間と比較して、Δtは短い。従って、ある素子の入力電位が現在の時刻とその一つ前の時刻(現在よりもΔtだけ前の時刻)とで殆ど変化していない場合、該素子の現在の時刻における出力電位は、その一つ前の時刻における出力電位と殆ど同じである。それゆえ、Δtの間に入力電位に変化がないと見なせる素子については、出力電位の計算を省略することができる。それに対して、Δtの間に入力電位に変化があると見なせる素子については、出力電位が変化する可能性があるので、出力電位を計算するのが好ましい。
【0026】
次いで、ステップS17で作成された、各素子の出力電位が計算されたか否かの情報に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる(ステップS18)。上述したように、Δtが短いので、ある素子の現在の時刻における入力電位がその一つ前の時刻(現在よりもΔtだけ前の時刻)における入力電位に対して変化している場合、該素子の入力電位は、次の時刻(現在よりもΔtだけ後の時刻)においても変化している確率が高い。一方、ある素子の現在の時刻における入力電位がその一つ前の時刻(現在よりもΔtだけ前の時刻)における入力電位に対して変化していない場合、該素子の入力電位は、次の時刻(現在よりもΔtだけ後の時刻)においても変化していない確率が高い。つまり、現在の時刻において出力電位が計算された素子については、次の時刻においても出力電位が計算されると見なすことができる。現在の時刻において出力電位が計算されなかった素子については、次の時刻においても出力電位が計算されないと見なすことができる。従って、各スレッドに素子を再度割り当てる際には、現在の時刻において出力電位が計算された素子を複数のスレッドに均等に割り当てるのが好ましい。また、現在の時刻において出力電位が計算されなかった素子も複数のスレッドに均等に割り当てるようにしてもよい。出力電位が計算された素子を複数のスレッドに再度割り当てる方法については、後述する。
【0027】
次いで、時刻tがさらにΔtだけ進められる(ステップS19)。そして、ステップS15に戻り、ステップS15〜ステップS19の処理が繰り返される。ステップS16で終了時刻になると(ステップS16:Yes)、解析結果が出力され(ステップS20)、一連の処理が終了する。上述した設計方法(1)の代わりに、解析状況に変化があるときに各スレッドに素子を再度割り当てるようにしてもよい。
【0028】
・集積回路の設計方法(2)
図5は、実施例にかかる設計方法の第2の例を示すフローチャートである。この第2の例は、前回の解析状況と今回の解析状況とが異なるときに各スレッドに素子を再度割り当てる方法である。図5に示すように、集積回路を設計する処理が開始されると、まず、上述した設計方法(1)のステップS11〜ステップS16と同様の処理が行われる(ステップS31〜ステップS36)。ただし、ステップS35では、時刻tのときの回路の状態が解析されるときに、時刻t(今回)における素子の解析状況と、その一つ前の時刻(前回)における素子の解析状況が記録される(ステップS35)。今回の素子の解析状況と前回の素子の解析状況の情報は、例えばRAM3、磁気ディスク5、光ディスク7などの記憶部に保持される。終了時刻になっていない場合(ステップS36:No)、前回の素子の解析状況の記録と今回の素子の解析状況の記録とが比較される(ステップS37)。そして、前回の素子の解析状況と今回の素子の解析状況とが同じであるか否かが判定される(ステップS38)。
【0029】
前回の素子の解析状況と今回の素子の解析状況とが同じでない場合(ステップS38:No)、上述した設計方法(1)のステップS18と同様に、ステップS35で記録された今回の素子の解析状況に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる(ステップS39)。次いで、時刻tがさらにΔtだけ進められる(ステップS40)。一方、前回の素子の解析状況と今回の素子の解析状況とが同じである場合(ステップS38:Yes)、ステップS39を省略してステップS40へ進む。そして、ステップS35に戻り、ステップS35〜ステップS40の処理が繰り返される。ステップS36で終了時刻になると(ステップS36:Yes)、解析結果が出力され(ステップS41)、一連の処理が終了する。上述した設計方法(1)、(2)の代わりに、一定時間ごとに各スレッドに素子を再度割り当てるようにしてもよい。
【0030】
・集積回路の設計方法(3)
図6は、実施例にかかる設計方法の第3の例を示すフローチャートである。この第3の例は、所定時間が経過するたびに各スレッドに素子を再度割り当てる方法である。図6に示すように、集積回路を設計する処理が開始されると、まず、上述した設計方法(1)のステップS11〜ステップS16と同様の処理が行われる(ステップS51〜ステップS56)。ただし、ステップS55では、時刻tのときの回路の状態が解析されるときに、素子の解析状況が記録される(ステップS55)。終了時刻になっていない場合(ステップS56:No)、時刻tが0であるときまたは前回各スレッドに素子を再度割り当てたときから、所定の時間が経過したか否かが判定される。例えば、時刻tの値を所定の時間(例えば、Δtの10倍の時間)の値で除したときの剰余が0であるときに所定の時間が経過したと判定される。剰余が0でないときには、所定の時間が経過していないと判定される(ステップS57)。
【0031】
所定の時間が経過した場合(ステップS57:Yes)、上述した設計方法(1)のステップS18と同様に、ステップS55で記録された素子の解析状況に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる(ステップS58)。次いで、時刻tがさらにΔtだけ進められる(ステップS59)。一方、所定の時間が経過していない場合(ステップS57:No)、ステップS58を省略してステップS59へ進む。そして、ステップS55に戻り、ステップS55〜ステップS59の処理が繰り返される。ステップS56で終了時刻になると(ステップS56:Yes)、解析結果が出力され(ステップS60)、一連の処理が終了する。なお、素子の解析が所定回数行われたとき、すなわちΔtの更新が所定回数行われたときに各スレッドに素子が再度割り当てられるようにしてもよい。上述した設計方法(1)、(2)、(3)の代わりに、スレッド間の、出力電位が計算された素子数の割合の差に基づいて各スレッドに素子を再度割り当てるようにしてもよい。
【0032】
・集積回路の設計方法(4)
図7は、実施例にかかる設計方法の第4の例を示すフローチャートである。この第4の例は、スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えたときに各スレッドに素子を再度割り当てる方法である。図7に示すように、集積回路を設計する処理が開始されると、まず、上述した設計方法(1)のステップS11〜ステップS16と同様の処理が行われる(ステップS71〜ステップS76)。ただし、ステップS75では、時刻tのときの回路の状態が解析されるときに、素子の解析状況が記録される(ステップS75)。終了時刻になっていない場合(ステップS76:No)、ステップS75で記録された素子の解析状況に基づいて、スレッドごとの素子の解析状況がチェックされる(ステップS77)。解析状況のチェックによって、スレッドごとに時刻tのときに出力電位が計算された素子数の割合が計算される。次いで、スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えたか否かが判定される(ステップS78)。例えば、所定値が50%である場合、出力電位が計算された素子数の割合が最も大きいスレッドの該割合と、出力電位が計算された素子数の割合が最も小さいスレッドの該割合との差が例えば50%を超えたか否かが判定される。
【0033】
スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えた場合(ステップS78:Yes)、上述した設計方法(1)のステップS18と同様に、ステップS75で記録された素子の解析状況に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる(ステップS79)。次いで、時刻tがさらにΔtだけ進められる(ステップS80)。一方、スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えていない場合(ステップS78:No)、ステップS79を省略してステップS80へ進む。そして、ステップS75に戻り、ステップS75〜ステップS80の処理が繰り返される。ステップS76で終了時刻になると(ステップS76:Yes)、解析結果が出力され(ステップS81)、一連の処理が終了する。なお、上述した設計方法(2)、(3)および(4)のうちの二つまたは三つを組み合わせてもよい。
【0034】
・出力電位が計算された素子を複数のスレッドに再度割り当てる方法(1)
図8は、実施例にかかる再割り当て方法の第1の例を示すフローチャートである。この第1の例は、素子の番号順に素子を複数のスレッドに割り当てる方法である。図8に示すように、再割り当て処理が開始されると、まず、aの値およびbの値がともに0に設定され、cの値が1に設定される(ステップS91)。aの値は、例えば出力電位が計算された素子の数を数えるカウンタの値である。aの値は、例えば0以上の整数である。bの値は、例えば出力電位が計算されなかった素子の数を数えるカウンタの値である。bの値は、例えば0以上の整数である。cの値は、例えば個々の素子に付された個別の番号である。cの値は、例えば1以上の整数である。次いで、c番目の素子について前回出力電位が計算されたか否かが判定される(ステップS92)。
【0035】
前回c番目の素子の出力電位が計算されていた場合(ステップS92:Yes)、出力電位が計算された素子の数を数えるカウンタの値aをスレッドの数で除したときの剰余に1を足した値dが求められる。dの値は、例えば個々のスレッドに付された個別の番号である。dの値は、例えば1以上の整数である。d番目のスレッドにc番目の素子が割り当てられる。出力電位が計算された素子の数を数えるカウンタの値aに1が加算される(ステップS93)。例えば、出力電位が計算された素子の数を数えるカウンタの値aが0であるとする。cの値が1であるとする。前回1番目の素子の出力電位が計算されていたとする。dの値は1となるので、1番目のスレッドに1番目の素子が割り当てられる。そして、出力電位が計算された素子が一つ見つかったので、出力電位が計算された素子の数を数えるカウンタの値aが1となる。
【0036】
一方、前回c番目の素子の出力電位が計算されていなかった場合(ステップS92:No)、出力電位が計算されなかった素子の数を数えるカウンタの値bをスレッドの数で除したときの剰余に1を足した値dが求められる。d番目のスレッドにc番目の素子が割り当てられる。出力電位が計算されなかった素子の数を数えるカウンタの値bに1が加算される(ステップS94)。例えば、出力電位が計算されなかった素子の数を数えるカウンタの値bが0であるとする。cの値が3であるとする。前回3番目の素子の出力電位が計算されていなかったとする。dの値は1となるので、1番目のスレッドに3番目の素子が割り当てられる。そして、出力電位が計算されなかった素子が一つ見つかったので、出力電位が計算されなかった素子の数を数えるカウンタの値bが1となる。
【0037】
次いで、素子の番号cが素子の数と同じであるか否かが判定される(ステップS95)。cの値が素子の数と同じでない場合(ステップS95:No)、素子の番号cの値に1が加算される(ステップS96)。そして、ステップS92に戻り、ステップS92〜ステップS96の処理が繰り返される。ステップS95でcの値が素子の数と同じになると(ステップS95:Yes)、全ての素子の再割り当てが終了したので、一連の処理が終了する。
【0038】
図9は、実施例にかかる再割り当て方法の第1の例を説明する説明図である。図9において、符号31は、素子の番号cの値を示している。符号32は、各素子番号の素子の前回の解析状況を示している。●は、前回出力電位が計算されたことを表し、○は、前回出力電位が計算されなかったことを表している。符号33は、出力電位が計算された素子の数を数えるカウンタの値aの変化の様子を示している。符号34は、出力電位が計算されなかった素子の数を数えるカウンタの値bの変化の様子を示している。符号35は、スレッドの番号dの値を示している。符号36は、各スレッドに割り当てられた、前回出力電位が計算された素子の番号を示している。符号37は、各スレッドに割り当てられた、前回出力電位が計算されなかった素子の番号を示している。図9に示すように、前回出力電位が計算された素子と前回出力電位が計算されなかった素子とが別々に、例えば素子の番号cの値が小さい順に、スレッドの番号dの値が小さい順にスレッドに割り当てられていく。従って、前回出力電位が計算された素子が最も多く割り当てられたスレッドと、前回出力電位が計算された素子が最も少なく割り当てられたスレッドとで、前回出力電位が計算された素子の数の差は、0または1となる。上述した再割り当て方法(1)の代わりに、前回出力電位が計算された素子をスレッド間で移動させるようにして各スレッドに素子を再度割り当てるようにしてもよい。
【0039】
・出力電位が計算された素子を複数のスレッドに再度割り当てる方法(2)
図10は、実施例にかかる再割り当て方法の第2の例を示すフローチャートである。この第2の例は、前回出力電位が計算された素子の数が多いスレッドから前回出力電位が計算された素子の数が少ないスレッドへ、前回出力電位が計算された素子を移動させる方法である。図10に示すように、再割り当て処理が開始されると、まず、前回出力電位が計算された素子の数をスレッドの数で除した値eが求められる。eの値の整数部に1を足した値fが求められる。eの値の整数部から1を引いた値gが求められる(ステップS101)。eの値は、前回出力電位が計算された素子の数の1スレッド当たりの平均値である。fの値は、前回出力電位が計算された素子の数の平均値eの前後にある整数のうちの大きい方の値である。gの値は、前回出力電位が計算された素子の数の平均値eの前後にある整数のうちの小さい方の値である。例えば、eの値が19.3である場合、fの値は20となり、gの値は19となる。ただし、eの値が整数である場合には、fおよびgの値は、ともにeの値となる。例えば、eの値が19である場合、fの値とgの値はともに19である。
【0040】
次いで、スレッドが順に調査され、前回出力電位が計算された素子の数がfの値よりも大きいスレッドHが検索される(ステップS102)。前回出力電位が計算された素子の数がfの値よりも大きいスレッドは、前回出力電位が計算された素子の数が多いスレッドである。次いで、スレッドHがあるか否かが判定される(ステップS103)。スレッドHがある場合(ステップS103:Yes)、前回出力電位が計算された素子の数が最も少ないスレッドJが検索される(ステップS104)。スレッドJが複数ある場合には、そのうちの一つが選択される。選択の仕方は、任意である。次いで、スレッドHの前回出力電位が計算された素子がスレッドHからスレッドJへ移動させられる。スレッドJに前回出力電位が計算されなかった素子がある場合には、スレッドHからスレッドJへ前回出力電位が計算された素子が移動させられる際に、スレッドJの前回出力電位が計算されなかった素子がスレッドJからスレッドHへ移動させられてもよい。つまり、スレッドHの前回出力電位が計算された素子と、スレッドJの前回出力電位が計算されなかった素子との交換が行われてもよい(ステップS105)。そして、ステップS102に戻り、ステップS102〜ステップS105の処理が繰り返される。ステップS102〜ステップS105の処理を行うことによって、スレッドHがなくなる。
【0041】
ステップS103でスレッドHがない場合(ステップS103:No)、スレッドが順に調査され、前回出力電位が計算された素子の数がgの値よりも小さいスレッドKが検索される(ステップS106)。前回出力電位が計算された素子の数がgの値よりも小さいスレッドは、前回出力電位が計算された素子の数が少ないスレッドである。次いで、スレッドKがあるか否かが判定される(ステップS107)。スレッドKがある場合(ステップS107:Yes)、前回出力電位が計算された素子の数が最も多いスレッドLが検索される(ステップS108)。スレッドLが複数ある場合には、そのうちの一つが選択される。選択の仕方は、任意である。次いで、スレッドLの前回出力電位が計算された素子がスレッドLからスレッドKへ移動させられる。スレッドKに前回出力電位が計算されなかった素子がある場合には、スレッドLからスレッドKへ前回出力電位が計算された素子が移動させられる際に、スレッドKの前回出力電位が計算されなかった素子がスレッドKからスレッドLへ移動させられてもよい。つまり、スレッドLの前回出力電位が計算された素子と、スレッドKの前回出力電位が計算されなかった素子との交換が行われてもよい(ステップS109)。そして、ステップS106に戻り、ステップS106〜ステップS109の処理が繰り返される。ステップS106〜ステップS109の処理を行うことによって、スレッドKがなくなる。ステップS107でスレッドKがなくなると(ステップS107:No)、一連の処理が終了する。なお、時刻tが0であるときの素子の割り当て状況によっては、スレッドJやスレッドKに前回出力電位が計算されなかった素子がない場合がある。上述した再割り当て方法(2)とは異なる方法で、前回出力電位が計算された素子をスレッド間で移動させるようにして各スレッドに素子を再度割り当てるようにしてもよい。
【0042】
・出力電位が計算された素子を複数のスレッドに再度割り当てる方法(3)
図11は、実施例にかかる再割り当て方法の第3の例を示すフローチャートである。この第3の例は、前回出力電位が計算された素子の数が最も多いスレッドから前回出力電位が計算された素子の数が最も少ないスレッドへ、前回出力電位が計算された素子を移動させる方法である。図11に示すように、再割り当て処理が開始されると、まず、スレッドごとに前回出力電位が計算された素子の数が調べられる。そして、前回出力電位が計算された素子の数が最も多いスレッドMの、前回出力電位が計算された素子の数がmとされる(ステップS111)。また、前回出力電位が計算された素子の数が最も少ないスレッドNの、前回出力電位が計算された素子の数がnとされる(ステップS112)。ステップS111とステップS112は、処理の順序が逆でもよいし、同時に処理されてもよい。次いで、mの値からnの値を引いた値が1以下であるか否かが判定される(ステップS113)。
【0043】
mの値からnの値を引いた値が2以上である場合(ステップS113:No)、スレッドMの前回出力電位が計算された素子がスレッドMからスレッドNへ移動させられる。スレッドNに前回出力電位が計算されなかった素子がある場合には、スレッドMからスレッドNへ前回出力電位が計算された素子が移動させられる際に、スレッドNの前回出力電位が計算されなかった素子がスレッドNからスレッドMへ移動させられてもよい。つまり、スレッドMの前回出力電位が計算された素子と、スレッドNの前回出力電位が計算されなかった素子との交換が行われてもよい(ステップS114)。ステップS114において移動させられる素子の数は、前回出力電位が計算された素子および前回出力電位が計算されなかった素子のいずれも一つずつである。そして、ステップS111に戻り、ステップS111〜ステップS114の処理が繰り返される。ステップS113でmの値からnの値を引いた値が1または0になると(ステップS113:Yes)、スレッド間で、前回出力電位が計算された素子の数が均等に割り当てられたことになるので、一連の処理が終了する。なお、時刻tが0であるときの素子の割り当て状況によっては、スレッドNに前回出力電位が計算されなかった素子がない場合がある。
【0044】
スレッド間で、前回出力電位が計算された素子の数が均等化されると、mの値からnの値を引いた値が1または0になる。これは、上述した再割り当て方法(2)において説明したeの値、fの値およびgの値を用いて以下のように説明される。eの値が整数でないとき、各スレッドの前回出力電位が計算された素子の数はfの値かgの値となるので、mの値からnの値を引いた値が1となる。eの値が整数であるときには、各スレッドの前回出力電位が計算された素子の数はeの値となるので、mの値からnの値を引いた値が0となる。ただし、eの値が整数であっても、前回出力電位が計算された素子の数がeの値でないスレッドがあれば、mの値からnの値を引いた値は2以上となる。例えば、eの値が整数である場合、前回出力電位が計算された素子の数が[e−1]個であるスレッドがあれば、前回出力電位が計算された素子の数が[e+1]個であるスレッドがあることになり、mの値からnの値を引いた値は2となる。従って、mの値からnの値を引いた値が1以下であれば、スレッド間で、前回出力電位が計算された素子の数が均等化されているといえる。
【0045】
図12は、実施例にかかる再割り当て方法の第2または第3の例を説明する説明図である。図12において、符号41は、スレッド番号が1であるスレッドに割り当てられた素子の経時的な変化の様子を示している。同様に、符号42は、スレッド番号が2であるスレッドの様子、符号43は、スレッド番号が3であるスレッドの様子、符号44は、スレッド番号が4であるスレッドの様子をそれぞれ示している。●は、前回出力電位が計算されたことを表し、○は、前回出力電位が計算されなかったことを表している。各解析時刻間における各スレッド間の矢印は、素子の移動を表している。図12に示す例では、ある時刻における素子の解析状況の情報から次の時刻における素子の割り当てが見直されている。また、例えば時刻T2から時刻Tm−1までのように、素子の解析状況に変化がない場合に、スレッドに素子を再度割り当てる処理が省略されてもよい。
【0046】
・集積回路の製造手順
図13は、集積回路の製造手順の一例を示すフローチャートである。図13に示すように、まず、集積回路に要求される機能や制約などの仕様に基づいて、例えばHardware Description Language(HDL、ハードウェア記述言語)で回路データ51が記述される。記述された回路データ51に基づいて論理合成が行われ(ステップS121)、ネットリスト52が作成される。このネットリスト52に対してタイミング解析が行われたり、ノイズやパワーの見積もりなどの解析が行われる(ステップS122)。その解析結果に基づいて、仕様を満たすまで論理合成が行われ(ステップS121)、ネットリスト52が作成し直される。仕様を満たすネットリスト52ができたら、そのネットリスト52に基づいてレイアウト処理が行われ(ステップS123)、図形データ53が作成される。この図形データ53に対してタイミング解析が行われたり、ノイズやパワーの見積もりなどの解析が行われる(ステップS124)。また、図形データ53に対して各種の検証が行われる(ステップS125)。解析結果や検証結果に基づいて、仕様を満たすまでレイアウト処理が行われ(ステップS123)、図形データ53が作成し直される。仕様を満たすまで図形データ53ができたら、その図形データ53に基づいて、製造工程において集積回路が製造される(ステップS126)。
【0047】
ステップS122やステップS124でタイミング解析を行うときには、タイミング解析を行う装置にセルやマクロのライブラリが読み込まれる。セルやマクロのネットリスト54に基づいて回路シミュレーションを行うことによって(ステップS127)、セルやマクロのライブラリ55が作成される。ステップS127の回路シミュレーションを行う際に、上述した各実施例が適用される。また、ネットリストの段階で行われるノイズやパワーの見積もりや、レイアウト処理後のパワー解析やノイズ解析において、上述した各実施例が適用された回路シミュレータが呼び出される。
【0048】
実施例2によれば、実施例1と同様の効果が得られる。また、複数のスレッドが並列に処理されるマルチスレッド処理においては、共有メモリ上に全ての回路情報が格納されている。従って、スレッドに素子を再度割り当てる際にスレッドに割り当てられた素子が変更になっても、メモリを参照するためのオーバーヘッドは生じない。上述した実施例を適用しないで、各スレッドに素子を一つずつ割り当て、素子の出力電位の計算が終了したスレッドにその都度素子を割り当てていく場合には、集積回路の素子の数が多いため、その都度空いたスレッドに素子を割り当てるためのオーバーヘッドが大きくなりすぎるという欠点がある。上述した実施例によれば、このような欠点がない。また、素子の状態の変化を監視したり、素子を動的に割り当てるためのオーバーヘッドは、その都度空いたスレッドに素子を割り当てるためのオーバーヘッドよりも小さいと考えられる。
【0049】
なお、上述した設計方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【0050】
また、本実施の形態で説明した設計装置は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(ASIC)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、例えば、上述した設計装置の割り当て部21、解析部22、照合部23および再割り当て部24をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、設計装置を製造することができる。
【0051】
上述した実施例1、2に関し、さらに以下の付記を開示する。
【0052】
(付記1)コンピュータが、集積回路内の複数の素子を複数のスレッドに割り当てる割り当てステップと、各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析ステップと、各スレッドに割り当てられた各素子の解析状況を照合する照合ステップと、該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当てステップと、を実行することを特徴とする集積回路の設計方法。
【0053】
(付記2)前記再割り当てステップでは、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を、次の解析のときにも計算される素子として再度割り当てを行い、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されなかったという結果である素子を、次の解析のときにも計算されない素子として再度割り当てを行うことを特徴とする付記1に記載の集積回路の設計方法。
【0054】
(付記3)前記再割り当てステップでは、各スレッドに、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を順番に割り当てることを特徴とする付記2に記載の集積回路の設計方法。
【0055】
(付記4)前記再割り当てステップでは、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1大きいスレッドから、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1小さいスレッドへ、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を移動させることを特徴とする付記2に記載の集積回路の設計方法。
【0056】
(付記5)前記再割り当てステップでは、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が最も多いスレッドから、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が最も少ないスレッドへ、スレッド間の、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数の差が0または1になるまで、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を移動させることを特徴とする付記2に記載の集積回路の設計方法。
【0057】
(付記6)前記コンピュータが、前記解析ステップを実行するたびに前記再割り当てステップを行うか、今回の前記照合ステップで得られた照合結果と前回の前記照合ステップで得られた照合結果とが異なるときに前記再割り当てステップを行うか、前記解析ステップを実行する間隔よりも長い間隔で前記再割り当てステップを行うか、スレッド間の、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数の差に基づいて前記再割り当てステップを行うことを特徴とする付記1〜5のいずれか一つに記載の集積回路の設計方法。
【0058】
(付記7)コンピュータを、集積回路内の複数の素子を複数のスレッドに割り当てる割り当て部、各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析部、各スレッドに割り当てられた各素子の解析状況を照合する照合部、該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当て部、として機能させることを特徴とする集積回路の設計プログラム。
【0059】
(付記8)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を、次の解析のときにも計算される素子として再度割り当てを行い、前記照合部で得られた照合結果が前記解析部において計算されなかったという結果である素子を、次の解析のときにも計算されない素子として再度割り当てを行うことを特徴とする付記7に記載の集積回路の設計プログラム。
【0060】
(付記9)前記再割り当て部は、各スレッドに、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を順番に割り当てることを特徴とする付記8に記載の集積回路の設計プログラム。
【0061】
(付記10)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1大きいスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1小さいスレッドへ、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記8に記載の集積回路の設計プログラム。
【0062】
(付記11)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も多いスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も少ないスレッドへ、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差が0または1になるまで、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記8に記載の集積回路の設計プログラム。
【0063】
(付記12)前記再割り当て部は、前記解析部で解析を実行するたびに再度割り当てを行うか、今回の前記照合部で得られた照合結果と前回の前記照合部で得られた照合結果とが異なるときに再度割り当てを行うか、前記解析部で解析を実行する間隔よりも長い間隔で再度割り当てを行うか、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差に基づいて再度割り当てを行うことを特徴とする付記7〜11のいずれか一つに記載の集積回路の設計プログラム。
【0064】
(付記13)集積回路内の複数の素子を複数のスレッドに割り当てる割り当て部と、各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析部と、各スレッドに割り当てられた各素子の解析状況を照合する照合部と、該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当て部と、を備えることを特徴とする集積回路の設計装置。
【0065】
(付記14)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を、次の解析のときにも計算される素子として再度割り当てを行い、前記照合部で得られた照合結果が前記解析部において計算されなかったという結果である素子を、次の解析のときにも計算されない素子として再度割り当てを行うことを特徴とする付記13に記載の集積回路の設計装置。
【0066】
(付記15)前記再割り当て部は、各スレッドに、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を順番に割り当てることを特徴とする付記14に記載の集積回路の設計装置。
【0067】
(付記16)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1大きいスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1小さいスレッドへ、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記14に記載の集積回路の設計装置。
【0068】
(付記17)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も多いスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も少ないスレッドへ、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差が0または1になるまで、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記14に記載の集積回路の設計装置。
【0069】
(付記18)前記再割り当て部は、前記解析部で解析を実行するたびに再度割り当てを行うか、今回の前記照合部で得られた照合結果と前回の前記照合部で得られた照合結果とが異なるときに再度割り当てを行うか、前記解析部で解析を実行する間隔よりも長い間隔で再度割り当てを行うか、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差に基づいて再度割り当てを行うことを特徴とする付記13〜17のいずれか一つに記載の集積回路の設計装置。
【符号の説明】
【0070】
21 割り当て部
22 解析部
23 照合部
24 再割り当て部
【技術分野】
【0001】
本発明は、集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置に関する。
【背景技術】
【0002】
従来、集積回路の設計に関し、電子回路の設計に用いられる並列回路シミュレーション装置が知られている。例えば、シミュレーション装置は、シミュレーション予測時間の長い子回路から順に二つの部分回路に分割する時点から所定の時点までの区間を一世代とし、一世代ごとに子回路全ての並列回路シミュレーション予測時間を求める。シミュレーション装置は、並列回路シミュレーション予測時間が前の世代で求めた並列回路シミュレーション予測時間より長くなったときに分割処理を停止する(例えば、特許文献1参照。)。
【0003】
また、集積回路の電力解析システムが知られている。例えば、回路シミュレータは、組合せ回路を単位とするクラスタごとに回路情報と信号トグル情報とを算出し、これを用いて回路シミュレーションを行う。回路シミュレータは、クラスタごとの時系列的な電力値を解析して、回路全体の電力解析を行う(例えば、特許文献2参照。)。
【0004】
また、疎結合並列計算機における負荷の動的均等化方法が知られている。例えば、マスタープロセッサは、与えられた仕事を、優先度の高いジョブと、スレーブプロセッサの個数以上の複数個の優先度の低いジョブとに分割する。マスタープロセッサは、優先度の高いジョブをスレーブプロセッサのうちのいくつかに割り付けるとともに、少なくとも優先度の低いジョブ一個を全スレーブプロセッサに分散して割り付ける。スレーブプロセッサは、ジョブを優先度の高いものから低いものの順に実行してその優先度の低いジョブが実行されるとき新たなジョブを要求する通信メッセージをマスタープロセッサに送信する。マスタープロセッサは、通信メッセージの到着によって通信メッセージを送信した既に優先度の低いジョブを保有していないスレーブプロセッサに対して、少なくとも一個の優先度の低いジョブを割り付ける(例えば、特許文献3参照。)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平4−21071号公報
【特許文献2】特開2003−85233号公報
【特許文献3】特公平7−13817号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、従来の技術では、回路全体を複数の回路に分割し、分割された各回路を複数のスレッドに割り当て、複数のスレッドを並列に処理する場合、効率よく並列処理を行うことが困難であるという問題点がある。例えば、少しずつ時刻を進めながら集積回路の各素子の状態を解析する場合、素子の入力信号の変化量が大きいときに計算を行い、素子の入力信号の変化量が小さいときに変化なしとして計算を省略することができる。従って、複数のスレッドに対する素子の割り当てを固定状態にして解析を進めると、ある時刻において、計算が行われる素子の数が多いスレッドと、計算が行われる素子の数が少ないスレッドと、が生じることがある。計算が行われる素子の数が多いスレッドでは、計算量が多くなるため、計算が終了するのに時間がかかる。計算が行われる素子の数が少ないスレッドでは、計算量が少ないので、短時間で計算が終了する。集積回路の経時的な変化を解析する場合、同一の時刻における全ての素子の解析が終了しないと次の時刻の解析に進むことができない。つまり、ある時刻における解析に要する時間は、計算が行われる素子の数が多いスレッドの計算に要する時間で決まる。そのため、計算が行われる素子の数が多いスレッドと、計算が行われる素子の数が少ないスレッドと、が混在すると、効率よく並列処理を行うことができない。
【0007】
本発明は、上述した従来技術による問題点を解消するため、効率よく並列処理を行うことができる集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
この集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置では、集積回路内の複数の素子が複数のスレッドに割り当てられる。各スレッドに割り当てられた各素子の状態をスレッドごとに解析する処理が、複数のスレッドで並列に行われる。各スレッドに割り当てられた各素子の解析状況が照合され、解析状況を照合した結果に基づいて複数の素子が複数のスレッドに再度割り当てられる。
【発明の効果】
【0009】
この集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置によれば、効率よく並列処理を行うことができるという効果を奏する。
【図面の簡単な説明】
【0010】
【図1】実施例にかかる設計装置のハードウェア構成を示すブロック図である。
【図2】実施例にかかる設計装置の機能的な構成を示すブロック図である。
【図3】実施例にかかる設計方法を示すフローチャートである。
【図4】実施例にかかる設計方法の第1の例を示すフローチャートである。
【図5】実施例にかかる設計方法の第2の例を示すフローチャートである。
【図6】実施例にかかる設計方法の第3の例を示すフローチャートである。
【図7】実施例にかかる設計方法の第4の例を示すフローチャートである。
【図8】実施例にかかる再割り当て方法の第1の例を示すフローチャートである。
【図9】実施例にかかる再割り当て方法の第1の例を説明する説明図である。
【図10】実施例にかかる再割り当て方法の第2の例を示すフローチャートである。
【図11】実施例にかかる再割り当て方法の第3の例を示すフローチャートである。
【図12】実施例にかかる再割り当て方法の第2または第3の例を説明する説明図である。
【図13】集積回路の製造手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下に添付図面を参照して、本開示技術にかかる集積回路の設計方法、集積回路の設計プログラムおよび集積回路の設計装置の好適な実施の形態を詳細に説明する。
【0012】
(実施例1)
実施例1では、集積回路の設計を行う際に、集積回路内の複数の素子が複数のスレッドに割り当てられ、スレッドごとに素子の状態を解析する処理が複数のスレッドで並列に行われる。そして、ある時刻の各素子の解析状況に基づいて複数の素子が複数のスレッドに再度割り当てられる。次の時刻の解析は、複数の素子が複数のスレッドに再度割り当てられた状態で行われる。
【0013】
・設計装置のハードウェア構成
図1は、実施例にかかる設計装置のハードウェア構成を示すブロック図である。図1に示すように、設計装置は、CPU(Central Processing Unit)1と、ROM(Read‐Only Memory)2と、RAM(Random Access Memory)3と、磁気ディスクドライブ4と、磁気ディスク5と、光ディスクドライブ6と、光ディスク7と、ディスプレイ8と、I/F(Interface)9と、キーボード10と、マウス11と、スキャナ12と、プリンタ13と、を備えている。また、各構成部はバス15によってそれぞれ接続されている。
【0014】
ここで、CPU1は、設計装置の全体の制御を司る。ROM2は、ブートプログラムなどのプログラムを記憶している。RAM3は、CPU1のワークエリアとして使用される。磁気ディスクドライブ4は、CPU1の制御にしたがって磁気ディスク5に対するデータのリード/ライトを制御する。磁気ディスク5は、磁気ディスクドライブ4の制御で書き込まれたデータを記憶する。
【0015】
光ディスクドライブ6は、CPU1の制御にしたがって光ディスク7に対するデータのリード/ライトを制御する。光ディスク7は、光ディスクドライブ6の制御で書き込まれたデータを記憶したり、光ディスク7に記憶されたデータをコンピュータに読み取らせたりする。
【0016】
ディスプレイ8は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ8は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0017】
インターフェース(以下、「I/F」と略する。)9は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク14に接続され、このネットワーク14を介して他の装置に接続される。そして、I/F9は、ネットワーク14と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F9には、たとえばモデムやLANアダプタなどを採用することができる。
【0018】
キーボード10は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス11は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【0019】
スキャナ12は、画像を光学的に読み取り、設計装置内に画像データを取り込む。なお、スキャナ12は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ13は、画像データや文書データを印刷する。プリンタ13には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【0020】
・設計装置の機能的構成
図2は、実施例にかかる設計装置の機能的な構成を示すブロック図である。図2に示すように、設計装置は、割り当て部21、解析部22、照合部23および再割り当て部24を備えている。割り当て部21は、集積回路内の複数の素子を複数のスレッドに割り当てる。解析部22は、各スレッドに割り当てられた各素子の状態をスレッドごとに解析する。スレッドごとの解析処理は、複数のスレッドで並列に行われる。照合部23は、各スレッドに割り当てられた各素子の解析状況を照合する。再割り当て部24は、解析状況を照合した結果に基づいて複数の素子を複数のスレッドに再度割り当てる。割り当て部21、解析部22、照合部23および再割り当て部24は、例えばROM2、RAM3、磁気ディスク5、光ディスク7などの記憶部に記憶された当該機能に関するプログラムをCPU1に実行させることにより、または、I/F9により、当該機能を実現することができる。割り当て部21に入力される回路の情報や、解析部22から出力される解析結果は、例えば記憶部に保持される。
【0021】
・集積回路の設計方法
図3は、実施例にかかる設計方法を示すフローチャートである。図3に示すように、集積回路を設計する処理が開始されると、まず、集積回路の情報に基づいて、集積回路内の複数の素子が複数のスレッドに割り当てられる(ステップS1)。次いで、スレッドごとに、各スレッドに割り当てられた各素子の状態が解析される。各素子の状態を解析する処理は、複数のスレッドで並列に行われる(ステップS2)。次いで、終了であるか否かが判定される(ステップS3)。終了でない場合(ステップS3:No)、各スレッドに割り当てられた各素子の、ステップS2における解析状況が照合される(ステップS4)。次いで、ステップS4での解析状況の照合結果に基づいて、複数の素子が複数のスレッドに再度割り当てられる(ステップS5)。そして、ステップS2に戻り、各素子の状態を解析する処理がスレッドごとに並列に処理される(ステップS2)。ステップS3で終了であると判定されるまで、ステップS2〜ステップS5が繰り返される。ステップS3で終了であると判定されると(ステップS3:Yes)、一連の処理が終了する。
【0022】
実施例1によれば、ある時刻において並列に処理された複数のスレッドにおける各素子の解析状況に基づいて各スレッドに素子が再度割り当てられる。各スレッドに素子が再度割り当てられた状態で、次の時刻の解析が行われる。従って、ある時刻において並列に処理されたスレッド間の負荷に偏りがあっても、次の時刻において並列に処理されるスレッド間の負荷の偏りがなくなるように各スレッドに素子が再度割り当てられることによって、効率よく並列処理を行うことができる。
【0023】
(実施例2)
実施例2には、実施例1の設計方法の具体例を示す。設計装置のハードウェア構成および機能的構成は、実施例1と同様である。
【0024】
・集積回路の設計方法(1)
図4は、実施例にかかる設計方法の第1の例を示すフローチャートである。この第1の例は、時刻tの解析を行うたびに各スレッドに素子を再度割り当てる方法である。図4に示すように、集積回路を設計する処理が開始されると、まず、集積回路の情報として例えばネットリストが読み込まれる。また、解析を行う際の制御情報として例えば解析の終了までの時間や解析の間隔Δtが読み込まれる(ステップS11)。次いで、集積回路の情報に基づいて集積回路内の複数の素子が複数のスレッドに割り当てられる(ステップS12)。素子の一例として、例えばトランジスタが挙げられる。次いで、各スレッドが並列に処理されて、時刻tが0であるときの回路の初期状態が解析される(ステップS13)。回路の状態を解析することの一例として、例えば各素子の出力電位を計算することが挙げられる。ここでは、各素子の出力電位を計算することとする。次いで、時刻tがΔtだけ進められる(ステップS14)。次いで、各スレッドが並列に処理されて、時刻tのときの回路の状態が解析される(ステップS15)。次いで、現在の時刻が解析の終了時刻であるか否かが判定される(ステップS16)。
【0025】
現在の時刻が終了時刻でない場合(ステップS16:No)、スレッドごとの素子の解析状況がチェックされる(ステップS17)。解析状況のチェックによって、現在の時刻において各スレッドの各素子について、例えば出力電位が計算されたか否かの情報が作成される。素子の入力電位が変化すると、該素子の出力電位が変化する。信号が第1の電位(例えば、ハイやロー)から第2の電位(例えば、ローやハイ)に遷移するのに要する時間や、信号が第1の電位または第2の電位である時間と比較して、Δtは短い。従って、ある素子の入力電位が現在の時刻とその一つ前の時刻(現在よりもΔtだけ前の時刻)とで殆ど変化していない場合、該素子の現在の時刻における出力電位は、その一つ前の時刻における出力電位と殆ど同じである。それゆえ、Δtの間に入力電位に変化がないと見なせる素子については、出力電位の計算を省略することができる。それに対して、Δtの間に入力電位に変化があると見なせる素子については、出力電位が変化する可能性があるので、出力電位を計算するのが好ましい。
【0026】
次いで、ステップS17で作成された、各素子の出力電位が計算されたか否かの情報に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる(ステップS18)。上述したように、Δtが短いので、ある素子の現在の時刻における入力電位がその一つ前の時刻(現在よりもΔtだけ前の時刻)における入力電位に対して変化している場合、該素子の入力電位は、次の時刻(現在よりもΔtだけ後の時刻)においても変化している確率が高い。一方、ある素子の現在の時刻における入力電位がその一つ前の時刻(現在よりもΔtだけ前の時刻)における入力電位に対して変化していない場合、該素子の入力電位は、次の時刻(現在よりもΔtだけ後の時刻)においても変化していない確率が高い。つまり、現在の時刻において出力電位が計算された素子については、次の時刻においても出力電位が計算されると見なすことができる。現在の時刻において出力電位が計算されなかった素子については、次の時刻においても出力電位が計算されないと見なすことができる。従って、各スレッドに素子を再度割り当てる際には、現在の時刻において出力電位が計算された素子を複数のスレッドに均等に割り当てるのが好ましい。また、現在の時刻において出力電位が計算されなかった素子も複数のスレッドに均等に割り当てるようにしてもよい。出力電位が計算された素子を複数のスレッドに再度割り当てる方法については、後述する。
【0027】
次いで、時刻tがさらにΔtだけ進められる(ステップS19)。そして、ステップS15に戻り、ステップS15〜ステップS19の処理が繰り返される。ステップS16で終了時刻になると(ステップS16:Yes)、解析結果が出力され(ステップS20)、一連の処理が終了する。上述した設計方法(1)の代わりに、解析状況に変化があるときに各スレッドに素子を再度割り当てるようにしてもよい。
【0028】
・集積回路の設計方法(2)
図5は、実施例にかかる設計方法の第2の例を示すフローチャートである。この第2の例は、前回の解析状況と今回の解析状況とが異なるときに各スレッドに素子を再度割り当てる方法である。図5に示すように、集積回路を設計する処理が開始されると、まず、上述した設計方法(1)のステップS11〜ステップS16と同様の処理が行われる(ステップS31〜ステップS36)。ただし、ステップS35では、時刻tのときの回路の状態が解析されるときに、時刻t(今回)における素子の解析状況と、その一つ前の時刻(前回)における素子の解析状況が記録される(ステップS35)。今回の素子の解析状況と前回の素子の解析状況の情報は、例えばRAM3、磁気ディスク5、光ディスク7などの記憶部に保持される。終了時刻になっていない場合(ステップS36:No)、前回の素子の解析状況の記録と今回の素子の解析状況の記録とが比較される(ステップS37)。そして、前回の素子の解析状況と今回の素子の解析状況とが同じであるか否かが判定される(ステップS38)。
【0029】
前回の素子の解析状況と今回の素子の解析状況とが同じでない場合(ステップS38:No)、上述した設計方法(1)のステップS18と同様に、ステップS35で記録された今回の素子の解析状況に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる(ステップS39)。次いで、時刻tがさらにΔtだけ進められる(ステップS40)。一方、前回の素子の解析状況と今回の素子の解析状況とが同じである場合(ステップS38:Yes)、ステップS39を省略してステップS40へ進む。そして、ステップS35に戻り、ステップS35〜ステップS40の処理が繰り返される。ステップS36で終了時刻になると(ステップS36:Yes)、解析結果が出力され(ステップS41)、一連の処理が終了する。上述した設計方法(1)、(2)の代わりに、一定時間ごとに各スレッドに素子を再度割り当てるようにしてもよい。
【0030】
・集積回路の設計方法(3)
図6は、実施例にかかる設計方法の第3の例を示すフローチャートである。この第3の例は、所定時間が経過するたびに各スレッドに素子を再度割り当てる方法である。図6に示すように、集積回路を設計する処理が開始されると、まず、上述した設計方法(1)のステップS11〜ステップS16と同様の処理が行われる(ステップS51〜ステップS56)。ただし、ステップS55では、時刻tのときの回路の状態が解析されるときに、素子の解析状況が記録される(ステップS55)。終了時刻になっていない場合(ステップS56:No)、時刻tが0であるときまたは前回各スレッドに素子を再度割り当てたときから、所定の時間が経過したか否かが判定される。例えば、時刻tの値を所定の時間(例えば、Δtの10倍の時間)の値で除したときの剰余が0であるときに所定の時間が経過したと判定される。剰余が0でないときには、所定の時間が経過していないと判定される(ステップS57)。
【0031】
所定の時間が経過した場合(ステップS57:Yes)、上述した設計方法(1)のステップS18と同様に、ステップS55で記録された素子の解析状況に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる(ステップS58)。次いで、時刻tがさらにΔtだけ進められる(ステップS59)。一方、所定の時間が経過していない場合(ステップS57:No)、ステップS58を省略してステップS59へ進む。そして、ステップS55に戻り、ステップS55〜ステップS59の処理が繰り返される。ステップS56で終了時刻になると(ステップS56:Yes)、解析結果が出力され(ステップS60)、一連の処理が終了する。なお、素子の解析が所定回数行われたとき、すなわちΔtの更新が所定回数行われたときに各スレッドに素子が再度割り当てられるようにしてもよい。上述した設計方法(1)、(2)、(3)の代わりに、スレッド間の、出力電位が計算された素子数の割合の差に基づいて各スレッドに素子を再度割り当てるようにしてもよい。
【0032】
・集積回路の設計方法(4)
図7は、実施例にかかる設計方法の第4の例を示すフローチャートである。この第4の例は、スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えたときに各スレッドに素子を再度割り当てる方法である。図7に示すように、集積回路を設計する処理が開始されると、まず、上述した設計方法(1)のステップS11〜ステップS16と同様の処理が行われる(ステップS71〜ステップS76)。ただし、ステップS75では、時刻tのときの回路の状態が解析されるときに、素子の解析状況が記録される(ステップS75)。終了時刻になっていない場合(ステップS76:No)、ステップS75で記録された素子の解析状況に基づいて、スレッドごとの素子の解析状況がチェックされる(ステップS77)。解析状況のチェックによって、スレッドごとに時刻tのときに出力電位が計算された素子数の割合が計算される。次いで、スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えたか否かが判定される(ステップS78)。例えば、所定値が50%である場合、出力電位が計算された素子数の割合が最も大きいスレッドの該割合と、出力電位が計算された素子数の割合が最も小さいスレッドの該割合との差が例えば50%を超えたか否かが判定される。
【0033】
スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えた場合(ステップS78:Yes)、上述した設計方法(1)のステップS18と同様に、ステップS75で記録された素子の解析状況に基づいて、集積回路内の複数の素子が複数のスレッドに再度割り当てられる(ステップS79)。次いで、時刻tがさらにΔtだけ進められる(ステップS80)。一方、スレッド間の、出力電位が計算された素子数の割合の差が所定値を超えていない場合(ステップS78:No)、ステップS79を省略してステップS80へ進む。そして、ステップS75に戻り、ステップS75〜ステップS80の処理が繰り返される。ステップS76で終了時刻になると(ステップS76:Yes)、解析結果が出力され(ステップS81)、一連の処理が終了する。なお、上述した設計方法(2)、(3)および(4)のうちの二つまたは三つを組み合わせてもよい。
【0034】
・出力電位が計算された素子を複数のスレッドに再度割り当てる方法(1)
図8は、実施例にかかる再割り当て方法の第1の例を示すフローチャートである。この第1の例は、素子の番号順に素子を複数のスレッドに割り当てる方法である。図8に示すように、再割り当て処理が開始されると、まず、aの値およびbの値がともに0に設定され、cの値が1に設定される(ステップS91)。aの値は、例えば出力電位が計算された素子の数を数えるカウンタの値である。aの値は、例えば0以上の整数である。bの値は、例えば出力電位が計算されなかった素子の数を数えるカウンタの値である。bの値は、例えば0以上の整数である。cの値は、例えば個々の素子に付された個別の番号である。cの値は、例えば1以上の整数である。次いで、c番目の素子について前回出力電位が計算されたか否かが判定される(ステップS92)。
【0035】
前回c番目の素子の出力電位が計算されていた場合(ステップS92:Yes)、出力電位が計算された素子の数を数えるカウンタの値aをスレッドの数で除したときの剰余に1を足した値dが求められる。dの値は、例えば個々のスレッドに付された個別の番号である。dの値は、例えば1以上の整数である。d番目のスレッドにc番目の素子が割り当てられる。出力電位が計算された素子の数を数えるカウンタの値aに1が加算される(ステップS93)。例えば、出力電位が計算された素子の数を数えるカウンタの値aが0であるとする。cの値が1であるとする。前回1番目の素子の出力電位が計算されていたとする。dの値は1となるので、1番目のスレッドに1番目の素子が割り当てられる。そして、出力電位が計算された素子が一つ見つかったので、出力電位が計算された素子の数を数えるカウンタの値aが1となる。
【0036】
一方、前回c番目の素子の出力電位が計算されていなかった場合(ステップS92:No)、出力電位が計算されなかった素子の数を数えるカウンタの値bをスレッドの数で除したときの剰余に1を足した値dが求められる。d番目のスレッドにc番目の素子が割り当てられる。出力電位が計算されなかった素子の数を数えるカウンタの値bに1が加算される(ステップS94)。例えば、出力電位が計算されなかった素子の数を数えるカウンタの値bが0であるとする。cの値が3であるとする。前回3番目の素子の出力電位が計算されていなかったとする。dの値は1となるので、1番目のスレッドに3番目の素子が割り当てられる。そして、出力電位が計算されなかった素子が一つ見つかったので、出力電位が計算されなかった素子の数を数えるカウンタの値bが1となる。
【0037】
次いで、素子の番号cが素子の数と同じであるか否かが判定される(ステップS95)。cの値が素子の数と同じでない場合(ステップS95:No)、素子の番号cの値に1が加算される(ステップS96)。そして、ステップS92に戻り、ステップS92〜ステップS96の処理が繰り返される。ステップS95でcの値が素子の数と同じになると(ステップS95:Yes)、全ての素子の再割り当てが終了したので、一連の処理が終了する。
【0038】
図9は、実施例にかかる再割り当て方法の第1の例を説明する説明図である。図9において、符号31は、素子の番号cの値を示している。符号32は、各素子番号の素子の前回の解析状況を示している。●は、前回出力電位が計算されたことを表し、○は、前回出力電位が計算されなかったことを表している。符号33は、出力電位が計算された素子の数を数えるカウンタの値aの変化の様子を示している。符号34は、出力電位が計算されなかった素子の数を数えるカウンタの値bの変化の様子を示している。符号35は、スレッドの番号dの値を示している。符号36は、各スレッドに割り当てられた、前回出力電位が計算された素子の番号を示している。符号37は、各スレッドに割り当てられた、前回出力電位が計算されなかった素子の番号を示している。図9に示すように、前回出力電位が計算された素子と前回出力電位が計算されなかった素子とが別々に、例えば素子の番号cの値が小さい順に、スレッドの番号dの値が小さい順にスレッドに割り当てられていく。従って、前回出力電位が計算された素子が最も多く割り当てられたスレッドと、前回出力電位が計算された素子が最も少なく割り当てられたスレッドとで、前回出力電位が計算された素子の数の差は、0または1となる。上述した再割り当て方法(1)の代わりに、前回出力電位が計算された素子をスレッド間で移動させるようにして各スレッドに素子を再度割り当てるようにしてもよい。
【0039】
・出力電位が計算された素子を複数のスレッドに再度割り当てる方法(2)
図10は、実施例にかかる再割り当て方法の第2の例を示すフローチャートである。この第2の例は、前回出力電位が計算された素子の数が多いスレッドから前回出力電位が計算された素子の数が少ないスレッドへ、前回出力電位が計算された素子を移動させる方法である。図10に示すように、再割り当て処理が開始されると、まず、前回出力電位が計算された素子の数をスレッドの数で除した値eが求められる。eの値の整数部に1を足した値fが求められる。eの値の整数部から1を引いた値gが求められる(ステップS101)。eの値は、前回出力電位が計算された素子の数の1スレッド当たりの平均値である。fの値は、前回出力電位が計算された素子の数の平均値eの前後にある整数のうちの大きい方の値である。gの値は、前回出力電位が計算された素子の数の平均値eの前後にある整数のうちの小さい方の値である。例えば、eの値が19.3である場合、fの値は20となり、gの値は19となる。ただし、eの値が整数である場合には、fおよびgの値は、ともにeの値となる。例えば、eの値が19である場合、fの値とgの値はともに19である。
【0040】
次いで、スレッドが順に調査され、前回出力電位が計算された素子の数がfの値よりも大きいスレッドHが検索される(ステップS102)。前回出力電位が計算された素子の数がfの値よりも大きいスレッドは、前回出力電位が計算された素子の数が多いスレッドである。次いで、スレッドHがあるか否かが判定される(ステップS103)。スレッドHがある場合(ステップS103:Yes)、前回出力電位が計算された素子の数が最も少ないスレッドJが検索される(ステップS104)。スレッドJが複数ある場合には、そのうちの一つが選択される。選択の仕方は、任意である。次いで、スレッドHの前回出力電位が計算された素子がスレッドHからスレッドJへ移動させられる。スレッドJに前回出力電位が計算されなかった素子がある場合には、スレッドHからスレッドJへ前回出力電位が計算された素子が移動させられる際に、スレッドJの前回出力電位が計算されなかった素子がスレッドJからスレッドHへ移動させられてもよい。つまり、スレッドHの前回出力電位が計算された素子と、スレッドJの前回出力電位が計算されなかった素子との交換が行われてもよい(ステップS105)。そして、ステップS102に戻り、ステップS102〜ステップS105の処理が繰り返される。ステップS102〜ステップS105の処理を行うことによって、スレッドHがなくなる。
【0041】
ステップS103でスレッドHがない場合(ステップS103:No)、スレッドが順に調査され、前回出力電位が計算された素子の数がgの値よりも小さいスレッドKが検索される(ステップS106)。前回出力電位が計算された素子の数がgの値よりも小さいスレッドは、前回出力電位が計算された素子の数が少ないスレッドである。次いで、スレッドKがあるか否かが判定される(ステップS107)。スレッドKがある場合(ステップS107:Yes)、前回出力電位が計算された素子の数が最も多いスレッドLが検索される(ステップS108)。スレッドLが複数ある場合には、そのうちの一つが選択される。選択の仕方は、任意である。次いで、スレッドLの前回出力電位が計算された素子がスレッドLからスレッドKへ移動させられる。スレッドKに前回出力電位が計算されなかった素子がある場合には、スレッドLからスレッドKへ前回出力電位が計算された素子が移動させられる際に、スレッドKの前回出力電位が計算されなかった素子がスレッドKからスレッドLへ移動させられてもよい。つまり、スレッドLの前回出力電位が計算された素子と、スレッドKの前回出力電位が計算されなかった素子との交換が行われてもよい(ステップS109)。そして、ステップS106に戻り、ステップS106〜ステップS109の処理が繰り返される。ステップS106〜ステップS109の処理を行うことによって、スレッドKがなくなる。ステップS107でスレッドKがなくなると(ステップS107:No)、一連の処理が終了する。なお、時刻tが0であるときの素子の割り当て状況によっては、スレッドJやスレッドKに前回出力電位が計算されなかった素子がない場合がある。上述した再割り当て方法(2)とは異なる方法で、前回出力電位が計算された素子をスレッド間で移動させるようにして各スレッドに素子を再度割り当てるようにしてもよい。
【0042】
・出力電位が計算された素子を複数のスレッドに再度割り当てる方法(3)
図11は、実施例にかかる再割り当て方法の第3の例を示すフローチャートである。この第3の例は、前回出力電位が計算された素子の数が最も多いスレッドから前回出力電位が計算された素子の数が最も少ないスレッドへ、前回出力電位が計算された素子を移動させる方法である。図11に示すように、再割り当て処理が開始されると、まず、スレッドごとに前回出力電位が計算された素子の数が調べられる。そして、前回出力電位が計算された素子の数が最も多いスレッドMの、前回出力電位が計算された素子の数がmとされる(ステップS111)。また、前回出力電位が計算された素子の数が最も少ないスレッドNの、前回出力電位が計算された素子の数がnとされる(ステップS112)。ステップS111とステップS112は、処理の順序が逆でもよいし、同時に処理されてもよい。次いで、mの値からnの値を引いた値が1以下であるか否かが判定される(ステップS113)。
【0043】
mの値からnの値を引いた値が2以上である場合(ステップS113:No)、スレッドMの前回出力電位が計算された素子がスレッドMからスレッドNへ移動させられる。スレッドNに前回出力電位が計算されなかった素子がある場合には、スレッドMからスレッドNへ前回出力電位が計算された素子が移動させられる際に、スレッドNの前回出力電位が計算されなかった素子がスレッドNからスレッドMへ移動させられてもよい。つまり、スレッドMの前回出力電位が計算された素子と、スレッドNの前回出力電位が計算されなかった素子との交換が行われてもよい(ステップS114)。ステップS114において移動させられる素子の数は、前回出力電位が計算された素子および前回出力電位が計算されなかった素子のいずれも一つずつである。そして、ステップS111に戻り、ステップS111〜ステップS114の処理が繰り返される。ステップS113でmの値からnの値を引いた値が1または0になると(ステップS113:Yes)、スレッド間で、前回出力電位が計算された素子の数が均等に割り当てられたことになるので、一連の処理が終了する。なお、時刻tが0であるときの素子の割り当て状況によっては、スレッドNに前回出力電位が計算されなかった素子がない場合がある。
【0044】
スレッド間で、前回出力電位が計算された素子の数が均等化されると、mの値からnの値を引いた値が1または0になる。これは、上述した再割り当て方法(2)において説明したeの値、fの値およびgの値を用いて以下のように説明される。eの値が整数でないとき、各スレッドの前回出力電位が計算された素子の数はfの値かgの値となるので、mの値からnの値を引いた値が1となる。eの値が整数であるときには、各スレッドの前回出力電位が計算された素子の数はeの値となるので、mの値からnの値を引いた値が0となる。ただし、eの値が整数であっても、前回出力電位が計算された素子の数がeの値でないスレッドがあれば、mの値からnの値を引いた値は2以上となる。例えば、eの値が整数である場合、前回出力電位が計算された素子の数が[e−1]個であるスレッドがあれば、前回出力電位が計算された素子の数が[e+1]個であるスレッドがあることになり、mの値からnの値を引いた値は2となる。従って、mの値からnの値を引いた値が1以下であれば、スレッド間で、前回出力電位が計算された素子の数が均等化されているといえる。
【0045】
図12は、実施例にかかる再割り当て方法の第2または第3の例を説明する説明図である。図12において、符号41は、スレッド番号が1であるスレッドに割り当てられた素子の経時的な変化の様子を示している。同様に、符号42は、スレッド番号が2であるスレッドの様子、符号43は、スレッド番号が3であるスレッドの様子、符号44は、スレッド番号が4であるスレッドの様子をそれぞれ示している。●は、前回出力電位が計算されたことを表し、○は、前回出力電位が計算されなかったことを表している。各解析時刻間における各スレッド間の矢印は、素子の移動を表している。図12に示す例では、ある時刻における素子の解析状況の情報から次の時刻における素子の割り当てが見直されている。また、例えば時刻T2から時刻Tm−1までのように、素子の解析状況に変化がない場合に、スレッドに素子を再度割り当てる処理が省略されてもよい。
【0046】
・集積回路の製造手順
図13は、集積回路の製造手順の一例を示すフローチャートである。図13に示すように、まず、集積回路に要求される機能や制約などの仕様に基づいて、例えばHardware Description Language(HDL、ハードウェア記述言語)で回路データ51が記述される。記述された回路データ51に基づいて論理合成が行われ(ステップS121)、ネットリスト52が作成される。このネットリスト52に対してタイミング解析が行われたり、ノイズやパワーの見積もりなどの解析が行われる(ステップS122)。その解析結果に基づいて、仕様を満たすまで論理合成が行われ(ステップS121)、ネットリスト52が作成し直される。仕様を満たすネットリスト52ができたら、そのネットリスト52に基づいてレイアウト処理が行われ(ステップS123)、図形データ53が作成される。この図形データ53に対してタイミング解析が行われたり、ノイズやパワーの見積もりなどの解析が行われる(ステップS124)。また、図形データ53に対して各種の検証が行われる(ステップS125)。解析結果や検証結果に基づいて、仕様を満たすまでレイアウト処理が行われ(ステップS123)、図形データ53が作成し直される。仕様を満たすまで図形データ53ができたら、その図形データ53に基づいて、製造工程において集積回路が製造される(ステップS126)。
【0047】
ステップS122やステップS124でタイミング解析を行うときには、タイミング解析を行う装置にセルやマクロのライブラリが読み込まれる。セルやマクロのネットリスト54に基づいて回路シミュレーションを行うことによって(ステップS127)、セルやマクロのライブラリ55が作成される。ステップS127の回路シミュレーションを行う際に、上述した各実施例が適用される。また、ネットリストの段階で行われるノイズやパワーの見積もりや、レイアウト処理後のパワー解析やノイズ解析において、上述した各実施例が適用された回路シミュレータが呼び出される。
【0048】
実施例2によれば、実施例1と同様の効果が得られる。また、複数のスレッドが並列に処理されるマルチスレッド処理においては、共有メモリ上に全ての回路情報が格納されている。従って、スレッドに素子を再度割り当てる際にスレッドに割り当てられた素子が変更になっても、メモリを参照するためのオーバーヘッドは生じない。上述した実施例を適用しないで、各スレッドに素子を一つずつ割り当て、素子の出力電位の計算が終了したスレッドにその都度素子を割り当てていく場合には、集積回路の素子の数が多いため、その都度空いたスレッドに素子を割り当てるためのオーバーヘッドが大きくなりすぎるという欠点がある。上述した実施例によれば、このような欠点がない。また、素子の状態の変化を監視したり、素子を動的に割り当てるためのオーバーヘッドは、その都度空いたスレッドに素子を割り当てるためのオーバーヘッドよりも小さいと考えられる。
【0049】
なお、上述した設計方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【0050】
また、本実施の形態で説明した設計装置は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(ASIC)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、例えば、上述した設計装置の割り当て部21、解析部22、照合部23および再割り当て部24をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、設計装置を製造することができる。
【0051】
上述した実施例1、2に関し、さらに以下の付記を開示する。
【0052】
(付記1)コンピュータが、集積回路内の複数の素子を複数のスレッドに割り当てる割り当てステップと、各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析ステップと、各スレッドに割り当てられた各素子の解析状況を照合する照合ステップと、該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当てステップと、を実行することを特徴とする集積回路の設計方法。
【0053】
(付記2)前記再割り当てステップでは、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を、次の解析のときにも計算される素子として再度割り当てを行い、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されなかったという結果である素子を、次の解析のときにも計算されない素子として再度割り当てを行うことを特徴とする付記1に記載の集積回路の設計方法。
【0054】
(付記3)前記再割り当てステップでは、各スレッドに、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を順番に割り当てることを特徴とする付記2に記載の集積回路の設計方法。
【0055】
(付記4)前記再割り当てステップでは、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1大きいスレッドから、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1小さいスレッドへ、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を移動させることを特徴とする付記2に記載の集積回路の設計方法。
【0056】
(付記5)前記再割り当てステップでは、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が最も多いスレッドから、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数が最も少ないスレッドへ、スレッド間の、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数の差が0または1になるまで、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を移動させることを特徴とする付記2に記載の集積回路の設計方法。
【0057】
(付記6)前記コンピュータが、前記解析ステップを実行するたびに前記再割り当てステップを行うか、今回の前記照合ステップで得られた照合結果と前回の前記照合ステップで得られた照合結果とが異なるときに前記再割り当てステップを行うか、前記解析ステップを実行する間隔よりも長い間隔で前記再割り当てステップを行うか、スレッド間の、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子の数の差に基づいて前記再割り当てステップを行うことを特徴とする付記1〜5のいずれか一つに記載の集積回路の設計方法。
【0058】
(付記7)コンピュータを、集積回路内の複数の素子を複数のスレッドに割り当てる割り当て部、各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析部、各スレッドに割り当てられた各素子の解析状況を照合する照合部、該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当て部、として機能させることを特徴とする集積回路の設計プログラム。
【0059】
(付記8)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を、次の解析のときにも計算される素子として再度割り当てを行い、前記照合部で得られた照合結果が前記解析部において計算されなかったという結果である素子を、次の解析のときにも計算されない素子として再度割り当てを行うことを特徴とする付記7に記載の集積回路の設計プログラム。
【0060】
(付記9)前記再割り当て部は、各スレッドに、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を順番に割り当てることを特徴とする付記8に記載の集積回路の設計プログラム。
【0061】
(付記10)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1大きいスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1小さいスレッドへ、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記8に記載の集積回路の設計プログラム。
【0062】
(付記11)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も多いスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も少ないスレッドへ、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差が0または1になるまで、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記8に記載の集積回路の設計プログラム。
【0063】
(付記12)前記再割り当て部は、前記解析部で解析を実行するたびに再度割り当てを行うか、今回の前記照合部で得られた照合結果と前回の前記照合部で得られた照合結果とが異なるときに再度割り当てを行うか、前記解析部で解析を実行する間隔よりも長い間隔で再度割り当てを行うか、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差に基づいて再度割り当てを行うことを特徴とする付記7〜11のいずれか一つに記載の集積回路の設計プログラム。
【0064】
(付記13)集積回路内の複数の素子を複数のスレッドに割り当てる割り当て部と、各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析部と、各スレッドに割り当てられた各素子の解析状況を照合する照合部と、該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当て部と、を備えることを特徴とする集積回路の設計装置。
【0065】
(付記14)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を、次の解析のときにも計算される素子として再度割り当てを行い、前記照合部で得られた照合結果が前記解析部において計算されなかったという結果である素子を、次の解析のときにも計算されない素子として再度割り当てを行うことを特徴とする付記13に記載の集積回路の設計装置。
【0066】
(付記15)前記再割り当て部は、各スレッドに、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を順番に割り当てることを特徴とする付記14に記載の集積回路の設計装置。
【0067】
(付記16)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1大きいスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数をスレッドの数で除した値の整数部の値よりも1小さいスレッドへ、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記14に記載の集積回路の設計装置。
【0068】
(付記17)前記再割り当て部は、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も多いスレッドから、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数が最も少ないスレッドへ、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差が0または1になるまで、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子を移動させることを特徴とする付記14に記載の集積回路の設計装置。
【0069】
(付記18)前記再割り当て部は、前記解析部で解析を実行するたびに再度割り当てを行うか、今回の前記照合部で得られた照合結果と前回の前記照合部で得られた照合結果とが異なるときに再度割り当てを行うか、前記解析部で解析を実行する間隔よりも長い間隔で再度割り当てを行うか、スレッド間の、前記照合部で得られた照合結果が前記解析部において計算されたという結果である素子の数の差に基づいて再度割り当てを行うことを特徴とする付記13〜17のいずれか一つに記載の集積回路の設計装置。
【符号の説明】
【0070】
21 割り当て部
22 解析部
23 照合部
24 再割り当て部
【特許請求の範囲】
【請求項1】
コンピュータが、
集積回路内の複数の素子を複数のスレッドに割り当てる割り当てステップと、
各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析ステップと、
各スレッドに割り当てられた各素子の解析状況を照合する照合ステップと、
該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当てステップと、
を実行することを特徴とする集積回路の設計方法。
【請求項2】
前記再割り当てステップでは、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を、次の解析のときにも計算される素子として再度割り当てを行い、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されなかったという結果である素子を、次の解析のときにも計算されない素子として再度割り当てを行うことを特徴とする請求項1に記載の集積回路の設計方法。
【請求項3】
前記再割り当てステップでは、各スレッドに、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を順番に割り当てることを特徴とする請求項2に記載の集積回路の設計方法。
【請求項4】
コンピュータを、
集積回路内の複数の素子を複数のスレッドに割り当てる割り当て部、
各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析部、
各スレッドに割り当てられた各素子の解析状況を照合する照合部、
該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当て部、
として機能させることを特徴とする集積回路の設計プログラム。
【請求項5】
集積回路内の複数の素子を複数のスレッドに割り当てる割り当て部と、
各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析部と、
各スレッドに割り当てられた各素子の解析状況を照合する照合部と、
該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当て部と、
を備えることを特徴とする集積回路の設計装置。
【請求項1】
コンピュータが、
集積回路内の複数の素子を複数のスレッドに割り当てる割り当てステップと、
各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析ステップと、
各スレッドに割り当てられた各素子の解析状況を照合する照合ステップと、
該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当てステップと、
を実行することを特徴とする集積回路の設計方法。
【請求項2】
前記再割り当てステップでは、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を、次の解析のときにも計算される素子として再度割り当てを行い、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されなかったという結果である素子を、次の解析のときにも計算されない素子として再度割り当てを行うことを特徴とする請求項1に記載の集積回路の設計方法。
【請求項3】
前記再割り当てステップでは、各スレッドに、前記照合ステップで得られた照合結果が前記解析ステップにおいて計算されたという結果である素子を順番に割り当てることを特徴とする請求項2に記載の集積回路の設計方法。
【請求項4】
コンピュータを、
集積回路内の複数の素子を複数のスレッドに割り当てる割り当て部、
各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析部、
各スレッドに割り当てられた各素子の解析状況を照合する照合部、
該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当て部、
として機能させることを特徴とする集積回路の設計プログラム。
【請求項5】
集積回路内の複数の素子を複数のスレッドに割り当てる割り当て部と、
各スレッドに割り当てられた各素子の状態を該スレッドごとに解析する処理を、該複数のスレッドで並列に行う解析部と、
各スレッドに割り当てられた各素子の解析状況を照合する照合部と、
該解析状況を照合した結果に基づいて該複数の素子を複数のスレッドに再度割り当てる再割り当て部と、
を備えることを特徴とする集積回路の設計装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2011−22693(P2011−22693A)
【公開日】平成23年2月3日(2011.2.3)
【国際特許分類】
【出願番号】特願2009−165542(P2009−165542)
【出願日】平成21年7月14日(2009.7.14)
【出願人】(308014341)富士通セミコンダクター株式会社 (2,507)
【Fターム(参考)】
【公開日】平成23年2月3日(2011.2.3)
【国際特許分類】
【出願日】平成21年7月14日(2009.7.14)
【出願人】(308014341)富士通セミコンダクター株式会社 (2,507)
【Fターム(参考)】
[ Back to top ]