(57)【特許請求の範囲】
【請求項１】
タイムホイルにイベントを登録するイベント駆動法による論理シミュレーション方法であって、
(a) タイムホイルのスロットからイベントを取り出し、
(b) そのイベントが処理対象イベントか否かを判断し、
(c) 前記ステップ(b) で対象イベントと判断されたイベントを処理し、そして
(d) 処理済イベント番号を更新する、論理シミュレーション方法。
【請求項２】
(e) 各イベントに生成順を示す連続番号を付与し、
(f) 各素子の処理済イベントの連続番号を記録し、そして
前記ステップ(b) では前記処理済イベントの連続番号の最大値と処理しようとしているイベントの連続番号とを比較することによって対象イベントか否かを判断する、請求項１記載の論理シミュレーション方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明は論理シミュレーション方法に関し、特にたとえば、ＬＳＩ等の論理検証を目的とした論理シミュレーションで使用され、イベント駆動法を用いる論理シミュレーション方法に関する。
【０００２】
【従来の技術】
論理シミュレーションは、たとえばＬＳＩ等のディジタル回路の設計において、設計された回路の論理検証を目的としてコンピュータによって実行される工程である。
論理シミュレーションは、扱う遅延モデルによりいくつかの種類に分類される。遅延モデルはシミュレーションの正確さを決める大きな要因である。最も広く用いられている遅延モデルは、素子毎に異なった遅延値を持たせるノミナル遅延モデルである。このモデルは、信号伝播遅延を考慮しない０遅延モデルや、全素子が同じ信号伝播遅延時間を持つと仮定する単一遅延モデルに比べ、(1) 対象回路を限定しない、(2) シミュレーション結果がより正確である、という２点の特徴を持つ。
【０００３】
ノミナル遅延モデルのシミュレーション方法としては、イベント駆動法が広く用いられている。イベント駆動法では、イベント発生すなわち入力信号線の信号値が変化した素子についてのみ選択的に処理を行う。この手法において、シミュレーション結果の正当性を保証するためには、イベント時刻順に処理を行う必要があるため、タイムホイル（岩波講座：マイクロエレクトロニクス４、ＶＬＳＩの設計II，pp 205-208）と呼ばれるイベント処理順序管理機構が用いられる。
【０００４】
タイムホイルの構造を図１に示す。タイムホイル１はいくつかのスロット１１が連なった仮想的な輪である。各スロット１１は予め決められた時間間隔（通常、素子遅延値の最大公約数）毎の時刻に対応する。各スロットには、その時刻に発生するイベント１３がリスト形式で登録されている。また、カレントクロックはタイムホイルに登録されているイベントの最小時刻を示し、カレントクロックに対応したタイムホイルスロットに登録されているイベントから順に処理が行われる。イベント処理の結果、新たなイベントが発生すれば、タイムホイルの対応するスロットに新たに登録される。
【０００５】
１つのイベントに関する処理、すなわち入力素子の信号値の変更とその結果となる出力計算を１度に行う、いわゆる１パスイベント処理を行う場合、たとえば、図２に示す部分回路に対し、図３に示すように同一素子の異なる入力に対して同時刻のイベントがあるとき、ファンアウト素子に対して誤ったイベントが生成され、誤ったシミュレーション結果をもたらす場合がある。このような同時刻イベントの処理に起因するシミュレーション誤りを防ぐため、通常は、タイムホイルからイベントを取り出した後、即座に出力を計算するような１パス処理でなく、入力信号値の変更と出力信号値の計算を分離した２パス処理を行う（たとえば、European Conference on Design Automation '93, Tutorial E, Parallel Logic and Hight Level Simulation, pp.9-12）。
【０００６】
図４にこの従来技術の２パス処理の流れを示す。１パス目の処理では、ステップＳ１における初期化およびステップＳ５における入力イベント登録を経て、ステップＳ９においてタイムホイルからイベントを取り出し、ステップＳ１１でファンアウト先の入力信号値のみを変更し、ステップＳ１３でそれらファンアウト先の素子をテンポラリキューへ登録する。ステップＳ７でカレントクロックのタイムホイルスロット内にイベントがなくなった時点で、２パス目の処理に移る。２パス目の処理では、ステップＳ１７でテンポラリキューに登録されている素子を取り出し、ステップＳ１９でその出力信号値を計算し、ステップＳ２１で出力変化したものに関して、ステップＳ２３でイベントをタイムホイルに登録する。ステップＳ１５でテンポラリキューに登録されている素子がなくなった時点で、２パス目の処理を終え、ステップＳ２５でカレントクロックを１進める。
【０００７】
【発明が解決しようとする課題】
従来のイベント駆動法では、正しいシミュレーション結果を得るために１シミュレーション時刻に対して、２パスの処理が必要になる。各パスでは、それぞれタイムホイルへのイベント登録、およびテンポラリキューへの素子登録という動的データ操作が行われるが、これらは、イベント処理における出力信号値計算に比べ大きな処理時間が必要となり、論理シミュレーションの処理速度を制限する原因の１つとなる。
【０００８】
それゆえに、この発明の主たる目的は、より高速にかつ正しくシミュレーションできる、イベント駆動法を用いる論理シミュレーション方法を提供することである。
【０００９】
【課題を解決するための手段】
この発明は、タイムホイルにイベントを登録するイベント駆動法による論理シミュレーション方法であって、(a) タイムホイルのスロットからイベントを取り出し、(b) そのイベントが処理対象イベントか否かを判断し、(c) ステップ(b) で対象イベントと判断されたイベントを処理し、そして(d) 処理済イベント番号を更新する、論理シミュレーション方法である。
【００１０】
【作用】
実施例では、イベント生成時には、その発生信号線上での発生順序を示すシリアル（連続）番号をイベントに付加する。また、各素子のデータとして、処理済イベント番号を記録しておく。イベント処理時には、タイムホイルスロットからイベントを取り出し、たとえばファンイン素子データ内の処理済イベント番号とイベントに付加されたシリアル番号とを比較し、そのイベントが対象イベントかどうか判断する。そして、たとえば、後者の方が大きいか、あるいは両者が等しい場合にのみ、イベントを処理する。これ以外の場合は無効イベントとみなし、処理を行わない。
【００１１】
そして、イベント処理時には、ファンイン側素子データ内の処理済イベント番号を更新する。また、入力信号を更新すると同時に出力値も計算、更新し、出力値が変化した場合には、新たなイベントを生成してタイムホイルに登録する。
なお、タイムホイルの各スロットはスタックとして扱い、登録されたイベントデータは、ＬＩＦＯ(Last In First Out) の順に従って処理する。
【００１２】
各スロットに登録されたイベントは、ＬＩＦＯの順に処理されるため、同じ信号線の複数の同時刻イベントは最後に生成されたものが最初に処理される。また、これ以外のイベントは、最初に処理されたイベントの持つシリアル番号より小さい番号を持つため、全て処理されない。このため、同一信号線上に生成された同時刻のイベントが複数存在する場合、最後に生成されたものが正しい信号値を持つ。したがって、誤ったイベントの処理を回避することができる。
【００１３】
【発明の効果】
この発明によれば、１パス処理によって、正しい信号値を持つイベントデータのみの処理を実現し、正しいシミュレーション結果を保証することができる。これは、２パス処理によるシミュレーションに比べ、処理効率が良く、シミュレーションの処理速度向上が期待できる。
【００１４】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【００１５】
【実施例】
図５はこの発明によるシミュレーション方法を実施するシステムの構成例を示す。システム１０は、ワークステーションなどの処理装置１２と、キーボードやマウスなどの入力装置１４、磁気ディスクや光ディスクなどの外部記憶装置１６、およびＣＲＴや液晶パネルなどの表示装置１８を含む。
【００１６】
ここで、この発明によるシミュレーション方法を実現する各種データ構造の例を説明する。
図６はイベントのデータ構造の例であり、イベント生成元の素子へのポインタ，信号値，シリアル番号，および同一時刻のイベントリストを構成する他のイベントへのポインタからなる。
【００１７】
図７は素子データの例であり、ＡＮＤあるいはＯＲなど素子の機能，遅延値，入力信号値，出力信号値，生成済シリアル番号，処理済シリアル番号，およびファンアウト素子へのポインタと対応信号線番号を持つ。
そして、図１に示すタイムホイル１の各スロット１１（構成スロットの数の最低数は（対象回路に含まれる素子の最大遅延時間）／（シミュレーション単位時間）で決まる。）には、登録されたイベントリストの先頭へのポインタが書き込まれている。
【００１８】
図８に示す概略フロー図を参照して、まず、ステップＳ１０１でネットリストとして与えられた回路データを読み込み、ステップＳ１０３で素子データの集合である素子テーブルを作成する。続いて、ステップＳ１０５において回路に与える信号であるテストパターンを読み込み、ステップＳ１０７で信号値をモニタするためのプローブ点などを入力する。そして、ステップＳ１０９においてシリアル番号を用いた、１パスイベント駆動法によるシミュレーションを実行する。最後に、ステップＳ１１１で、シミュレーション結果の表示を行い、人手によって、あるいは自動的に回路論理が検証される。
【００１９】
先のステップＳ１０９におけるシミュレーション実行における１パスイベント処理では、図９のステップＳ２０１における初期化処理で、全ての素子の生成済シリアル番号および処理済シリアル番号を「０」にセットする。それとともに、このステップＳ２０１でカレントクロックを「０」にセットし、シミュレーション終了時刻をオペレータによって与えられた値にセットする。
【００２０】
カレントクロックとシミュレーション終了時刻を比較し、カレントクロックがシミュレーション終了時刻に達していれば、シミュレーションを終了する（ステップＳ２０３）。
ステップＳ２０５において、外部から回路に対する入力（テストパターン）のうち、現在時刻に対応したイベントがあれば、これらをタイムホイルに登録する。なお、これらのイベントは全て有効なイベントであるため、たとえば図６や図７に示すようにファンイン素子へのポインタを特別な値にすることによって、素子で発生したイベントと区別できるようにしておく。
【００２１】
カレントクロックのタイムホイルスロットにイベントが存在していなければステップＳ２２３にとぶ（ステップＳ２０７）。
そして、ステップＳ２０７でカレントクロックのイベントがあると、次のステップＳ２０９でカレントクロックのタイムホイルスロットから登録イベントを１つ取り出す。その後、ステップＳ２１１において、イベント内のシリアル番号とファンイン素子の処理済シリアル番号とを比較し、イベント内のシリアル番号の方が小さい場合は、すなわちステップＳ２１１において“ＮＯ”の場合は、ステップＳ２０７にとぶ。
【００２２】
ステップＳ２１１において“ＹＥＳ”のとき、ファンイン素子の処理済シリアル番号をイベントのシリアル番号に更新する（ステップＳ２１３）。次のステップＳ２１５においてファンアウト素子の新たな出力値を計算し、新たな出力値が以前の出力値と同じならば、ステップＳ２０７にとぶ（ステップＳ２１７）。
ステップＳ２１７で出力値の変化が生じれば、ステップＳ２１９において、ファンアウト素子の出力値を更新し、新たなイベントを生成するとともに、ファンアウト素子の出力済シリアル番号をインクリメントし、これをイベントのシリアル番号として付加する。そして、「カレントクロック」＋「ファンアウト素子の遅延値」をイベント発生時刻としてセットするとともに、イベントを、その発生時刻に対応したタイムホイルスロットの先頭に登録し、ステップＳ２１９に至る。
【００２３】
ステップＳ２１９では、カレントクロックをインクリメントし、ステップＳ２０７にとぶ。
以下に、図９に示す実施例のシミュレーション方法によって正しい結果が得られることを、同時刻イベントが発生する具体例を用いて説明する。
一例として、図２に示す論理回路（一部分）を与える。この例の部分回路は、１つのＡＮＤゲート素子Ａと３つのＮＯＴゲート素子Ｎ1 ，Ｎ2 およびＮ3 とからなる。Ａの各入力線はＮ1 ，Ｎ2 の出力と接続されており、Ａの出力はＮ3 の入力線と接続している。Ａの遅延をｄA ，Ｎ1 ，Ｎ2 ，Ｎ3 の遅延をそれぞれｄN1，ｄN2，ｄN3とする。
【００２４】
図２の例の場合、図３に示すように、時刻ｔにおいて、同時刻イベントがＮ1 ，Ｎ2 の出力、すなわちＡの入力において発生している。以下、この図３のタイミング図で示された入力信号に対するＡ、およびＮ1 ，Ｎ2 およびＮ3 での処理を説明する。
図１０に示すように、カレントクロックが時刻ｔになった瞬間には、Ａの＃１入力信号値はＬｏ、Ａの＃２入力信号値はＨｉ、Ａの出力値はＬｏ、Ｎ3 の出力信号値はＨｉである。また、このとき、Ａの出力線における出力済シリアル番号がＳA 、処理済シリアル番号がＳA ′とする（いまＳA ≧ＳA ′とする）。カレントクロックｔの処理開始時には、時刻ｔに対応するタイムホイルスロットに、イベントＥ１およびＥ２が登録されている。イベントＥ１およびイベントＥ２は、それぞれ、時刻ｔにおいて、Ｎ1 の出力がＨｉへ、またＮ2 の出力がＬｏへ変化することを示す。また、素子Ｎ1 およびＮ2 において、出力済シリアル番号は、それぞれ、ＳN1およびＳN2であり、処理済シリアル番号はそれぞれＳN1′およびＳN2′とし、ＳN1≧ＳN1′、ＳN2≧ＳN2′とする。
【００２５】
クロックｔにおける処理では、図９のステップＳ２０９に示すように、イベントＥ１がタイムホイルから取り出される。ステップＳ２１１の比較においてＳN1≧ＳN1′であるから、イベントＥ１は有効であり処理される。ステップＳ２１７で素子Ａの出力はＨｉに変化するため、イベントＥ１′を生成する（ステップＳ２１９）。このとき、イベントの信号値はＨｉ、シリアル番号はＳA ＋１である。このイベントは、ステップＳ２１９において、時刻ｔ＋ｄA に対応するタイムホイルスロットに登録される。
【００２６】
続いて、同じようにして、イベントＥ２が取り出される。ＳN2≧ＳN2′であるからイベントＥ２も有効であり、処理される。素子Ａの出力値はＬｏに変化するため、イベントＥ２′を生成する。このとき、イベントの信号値はＬｏ、シリアル番号はＳA ＋２である。このイベントは、時刻ｔ＋ｄA に対応するタイムホイルスロットに登録される。
【００２７】
そして、時刻ｔの処理終了時点では図１１に示す状態となる。このとき、実際には存在しない信号値変化に対応するイベントＥ１′およびＥ２′が時刻ｔ＋ｄA のタイムホイルスロットに登録されていることになる。
図１１に示すように、カレントクロックがｔ＋ｄA になった時点で、まず、イベントＥ２′が取り出される。Ｅ２′のシリアル番号はＳA ＋２であり、ファンイン素子Ａの出力線データ中の処理済シリアル番号はＳA ′である。もともとＳA ≧ＳA ′であるためＳ0 ＋２≧Ｓe となり、Ｅ２′は処理される。ここでＥ２′は実際には発生していないイベントであるが、直前のＡの出力値すなわちＮ3 の入力値と等しいため、これを処理しても新たなイベントは生成されず、シミュレーション誤りにはならない。なお、このとき、ファンイン素子Ａの出力線データ中の処理済シリアル番号はＳA ＋２に更新される。
【００２８】
続いてイベントＥ１′がタイムホイルから取り出される。イベントＥ１′のシリアル番号はＳA ＋２であり、ファンイン素子Ａの出力線データ中の処理済シリアル番号はＳA ＋１である。ＳA ＋１＜ＳA ＋２であるため、Ｅ１′は無効イベントとみなされ、処理されない。
したがって、時刻ｔ＋ｄA の処理終了時点では、図１２に示すように、ｔ＋ｄA より後のイベントとして何も存在していない。また、時間間隔０のパルスは、Ａの出力上で一時的に発生するが、このパルスはＡのファンアウト先のゲートＮ3 で無効化され、後段に伝播することはないため、正しいシミュレーション結果が得られる。
【図面の簡単な説明】
【図１】タイムホイルの構造を示す図解図である。
【図２】シミュレーションを行う対象回路の一例を示す回路図である。
【図３】図２における素子の出力信号変化を示すタイミング図である。
【図４】従来技術の２パスイベント処理の一例を示すフロー図である。
【図５】この発明が実施され得るシステム構成の一例を示すブロック図である。
【図６】イベントのデータ構造の一例を示す図解図である。
【図７】素子テーブルにおける１つの素子のデータ内容の一例を示す図解図である。
【図８】論理シミュレーション全体の流れを示すフロー図である。
【図９】この発明の実施例に従って１パスイベント処理を行うシミュレーション実行処理を示すフロー図である。
【図１０】（Ａ）は図９実施例に従ってシミュレーションを行ったときの、時刻ｔになった瞬間のタイムホイルの状態を示し、（Ｂ）は素子テーブル内のＡ，Ｎ1 ，Ｎ2 ，Ｎ3 に関するデータの一部分を示す図解図である。
【図１１】（Ａ）は図９実施例に従ってシミュレーションを行ったときの、時刻ｔ＋ｄA になった瞬間のタイムホイルの状態を示し、（Ｂ）は素子テーブル内のＡ，Ｎ1 ，Ｎ2 ，Ｎ3 に関するデータの一部分を示す図解図である。
【図１２】（Ａ）は図９実施例に従ってシミュレーションを行ったときの、時刻ｔ＋ｄA の処理終了直後のタイムホイルの状態を示し、（Ｂ）はテーブル内のＡ，Ｎ1 ，Ｎ2 ，Ｎ3 に関するデータの一部分を示す図解図である。
【符号の説明】
１  …タイムホイル
１１  …スロット
１２  …処理装置
【図１】
0003670681.tif 000002
【図２】
0003670681.tif 000003
【図３】
0003670681.tif 000004
【図４】
0003670681.tif 000005
【図５】
0003670681.tif 000006
【図６】
0003670681.tif 000007
【図７】
0003670681.tif 000008
【図８】
0003670681.tif 000009
【図９】
0003670681.tif 000010
【図１０】
0003670681.tif 000011
【図１１】
0003670681.tif 000012
【図１２】
0003670681.tif 000013