JP2013521583A - ハードウェア設計のコンカレント及びシリアル混在型論理シミュレーション - Google Patents

ハードウェア設計のコンカレント及びシリアル混在型論理シミュレーション Download PDF

Info

Publication number
JP2013521583A
JP2013521583A JP2012556263A JP2012556263A JP2013521583A JP 2013521583 A JP2013521583 A JP 2013521583A JP 2012556263 A JP2012556263 A JP 2012556263A JP 2012556263 A JP2012556263 A JP 2012556263A JP 2013521583 A JP2013521583 A JP 2013521583A
Authority
JP
Japan
Prior art keywords
simulation engine
module
concurrent
serial
simulation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2012556263A
Other languages
English (en)
Other versions
JP5798132B2 (ja
Inventor
ウィズナント、キース
バジーレ、クラウディオ
パオロ サジェッセ、ジャチント
Original Assignee
シノプシイス インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by シノプシイス インコーポレイテッド filed Critical シノプシイス インコーポレイテッド
Publication of JP2013521583A publication Critical patent/JP2013521583A/ja
Application granted granted Critical
Publication of JP5798132B2 publication Critical patent/JP5798132B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2117/00Details relating to the type or aim of the circuit design
    • G06F2117/08HW-SW co-design, e.g. HW-SW partitioning

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

【課題】ハードウェア設計のシミュレーションを向上させる。
【解決手段】HDLで記述される設計をシミュレートする方法を提供する。この方法では、設計のモジュールを、シリアルシミュレーションエンジンによるシミュレーションのための第1のモジュールと、コンカレントシミュレーションエンジンによるシミュレーションのための第2のモジュールとに分割することができる。HDLの実行モデルと一致するイベントのクラスに基づくシミュレーションに関して、第1及び第2のモジュールに優先順位を付けることができる。イベントの各クラスに対してシリアル及びコンカレントの両シミュレーションエンジンの両シミュレーションを同期させることができる。同期は、更新されたインタフェース変数の値の転送を含むことができる。
【選択図】図6A

Description

関連出願
本願は、2010年3月4日に出願された米国仮特許出願第61/339,391号に基づく優先権を主張する。上記仮特許出願は、引用を以て本明細書の一部となす。
本発明は、論理シミュレーションに関し、より詳細には、シリアルシミュレーションエンジン及びコンカレント(同時並行的)シミュレーションエンジンを含む統合型論理シミュレータに関する。
論理シミュレーションは、電子回路の設計フローにおいて不可欠なステップである。論理シミュレーションは通常、論理シミュレータと呼ばれる電子設計自動化(Electronic Design Automation:EDA)ソフトウェアツールを用いて行われる。論理シミュレータは、通常、ハードウェア記述言語(Hardware Description Language:HDL)コードの形式で提供されるハードウェア設計を処理する。ハードウェア設計から実際の電子回路を製作する物理的実装フェーズに移行する前に、ハードウェア設計者は、ハードウェア設計が仕様に合っていることを検証するために広範囲に及ぶ論理シミュレーションを行う。通常のハードウェア設計フローでは、仕様に合っていない回路が製作されるリスクを最小にするために、設計プロセスに加えて機能検証プロセスが実行される。論理シミュレーションは通常、その結果として、ユーザが観察したいと思っている一連の回路信号の波形を生成する。ユーザは、生成された波形を解析及び可視化することによって、ハードウェア設計が正しく機能することを検証することができる。論理シミュレータはまた、回路信号の値を用いて回路不良をもたらす状態を検出する埋め込みアサーションにより、ハードウェア設計のシミュレーションをサポートする。論理シミュレータは、回路をシミュレートしている間に埋め込みアサーションを評価し、アサーション違反をユーザに報告する。当該違反報告に基づいて、ユーザは、ハードウェア設計における設計ミスを発見して修復することができる。
米国特許出願第12/586,724号明細書(US 2011/0072403 A1)
ハードウェア設計のシミュレーションを向上させる。
ハードウェア記述言語(HDL)で記述された設計をシミュレートする方法が提供される。この方法においては、統合型論理シミュレータを動作させることができる。この統合型論理シミュレータは、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンを含むことができる。シリアルシミュレーションエンジンは、一度に1つずつのシミュレーションを行うことができるが、コンカレントシミュレーションエンジンは、複数の並行的なシミュレーションを行うことができる。コンピュータを用いて、HDLの実行モデルによって定義されるイベントのクラスに基づいて、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンの両シミュレーションを同期させることができる。
設計は、統合型論理シミュレータによって実行される2つのモジュール群に分割されることができる。第1のモジュール群はシリアルシミュレーションエンジンで実行することができ、第2のモジュール群はコンカレントシミュレーションエンジンで実行することができる。一実施形態では、分割は、シリアルシミュレーションエンジン及び/またはコンカレントシミュレーションエンジンが所望のレベルのシミュレーション性能を達成する能力に基づいて行われる。別の実施形態では、分割は、ユーザが手動で行うことができる。
シリアルシミュレーションエンジンまたはコンカレントシミュレーションエンジンのいずれか一方を統合型論理シミュレータの主シミュレーションエンジンに指定することができ、その場合、他方のシミュレーションエンジンは副シミュレーションエンジンに指定される。一実施形態では、シリアルシミュレーションエンジンが主シミュレーションエンジンであり、コンカレントシミュレーションエンジンが副シミュレーションエンジンである。別の実施形態では、コンカレントシミュレーションエンジンが主シミュレーションエンジンであり、シリアルシミュレーションエンジンが副シミュレーションエンジンである。主シミュレーションエンジンは、同期点において副シミュレーションエンジンを呼び出す。一実施形態では、同期点は、HDLの実行モデルによって定義されたキュー(待ち行列)評価の前にある。別の実施形態では、同期点は、HDLの実行モデルによって定義されたキュー評価の後にある。
設計の分割は、設計の設計階層を考慮して行うことができることに留意されたい。例えば、一実施形態では、第1のモジュールが副シミュレーションエンジンによってシミュレートされることは、第1のモジュールの下の設計階層内においてより深くインスタンス化された全てのサブモジュールも同様に副シミュレーションエンジンによってシミュレートされることを示唆している。別の実施形態では、(副シミュレーションエンジンによってシミュレートされる)第1のモジュールが第2のモジュールをインスタンス化する場合に、第2のモジュールは、主シミュレーションエンジンによってシミュレートされることができる。
本発明の方法に従って、副シミュレーションエンジンモジュールにおける特定の変数を、主シミュレーションエンジンと通信するためのインタフェース変数として識別することができる。これらのインタフェース変数の値を、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンの両者に格納することができる。
同期点において副シミュレーションエンジンにおけるイベントを評価する前に、インタフェース変数の値を副シミュレーションエンジンに転送することができる。この転送中、インタフェース変数の値は、主シミュレーションエンジンのストレージ表現(storage representation)から副シミュレーションエンジンのストレージ表現に翻訳されることができる。一実施形態では、変更されたインタフェース変数の値のみが同期点において転送される。
同期点において副シミュレーションエンジンにおけるイベントを評価した後に、インタフェース変数の値を主シミュレーションエンジンに転送することもできる。この転送中、インタフェース変数の値は、副シミュレーションエンジンのストレージ表現から主シミュレーションエンジンのストレージ表現に翻訳されることができる。一実施形態では、変更されたインタフェース変数の値のみが同期点において転送される。
実行モデルにおける同期点は、業界標準のアプリケーションプログラミングインタフェースを通して確立されることができることに留意されたい。例示的な業界標準のアプリケーションプログラミングインタフェースには、プログラミング言語インタフェース(Programming. Language Interface:PLI)及び検証手続インタフェース(Verification Procedural Interface:VPI)が含まれるが、これらに限定されるものではない。別の実施形態では、同期点は、独自仕様のインタフェースを通して確立されることができる。
特に、副シミュレーションエンジンモジュールは、主シミュレーションエンジン内のスタブモジュールによって表現されることができる。このスタブモジュールは、対応する副シミュレーションエンジンモジュールのためのインタフェース変数を含む。スタブモジュールは、対応する副シミュレーションエンジンモジュールのHDLを含まない。
HDLで記述される設計をシミュレートする別の方法が提供される。この方法では、設計のモジュールを、シリアルシミュレーションエンジンによるシミュレーションのための第1のモジュールと、コンカレントシミュレーションエンジンによるシミュレーションのための第2のモジュールとに分割することができる。HDLの実行モデルと一致するイベントのクラスに基づくシミュレーションに関して、第1及び第2のモジュールに優先順位を付けることができる。コンピュータを用いて、イベントの各クラスに対してシリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンのシミュレーションを同期させることができる。
同期は、更新されたインタフェース変数の値の転送を含むことができ、該値は、シリアルシミュレーションエンジンとコンカレントシミュレーションエンジンとの間で、第2のモジュールと、第1のモジュールの少なくとも1つのサブセットとによって共有される。この転送は、更新されたインタフェース変数の値の表現の翻訳を含むことができる。
第2のモジュールは各々、シリアルシミュレーションエンジン内のスタブモジュールとして表現されることができ、ここで、該スタブモジュールは第1のモジュールのうちの1つである。コンカレントシミュレーションエンジンにおけるインタフェース変数のための値を或るワードに格納することができ、これらの値は、シリアルシミュレーションエンジン内の当該スタブモジュールの複数のインスタンスと関係がある。
同期は、シリアルシミュレーションエンジンにおけるイベントの1つのクラスの評価を終え、次に更新されたインタフェース変数の値をコンカレントシミュレーションエンジンに転送してイベントの当該同じクラスの評価を行うステップをさらに含むことができる。同期は、コンカレントシミュレーションエンジンにおけるイベントの1つのクラスの評価を終え、次に更新されたインタフェース変数の値をシリアルシミュレーションエンジンに転送して、(1)コンカレントシミュレーションエンジンによって当該クラスにおける新しいイベントが生成されたときのイベントの当該同じクラス、または(2)もしあればイベントの次のクラスの評価をHDLの実行モデルに従って行うステップをさらにまた含むことができる。
一実施形態では、HDLはVerilogであり、イベントの1つのクラスは、アクティブイベント、非アクティブイベント及びノンブロッキング代入更新イベントのうちの1つである。一実施形態では、同期は、HDLによって記述されるイベントのクラスの優先順位に基づいて、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンを用いて、イベントの全てのクラスを通過するステップを含むことができる。
Verilog HDL実行モデルにおけるキュー評価のサブセットを示す。 モジュールのためのインタフェース変数の役割を果たす埋め込みモジュールのポート変数を示す。 従来のトップモジュールのための例示的なHDLを示す。 スタブモジュールを含むトップモジュールのための例示的なHDLを示す。 従来のトップモジュールのブロック図を示す。 スタブモジュールを含むトップモジュールのブロック図を示す。 シリアルシミュレーションエンジンにおけるインタフェース変数の値のための例示的なストレージ表現を示す。 コンカレントシミュレーションエンジンにおけるインタフェース変数の値のための例示的なストレージ表現を示す。 アクティブイベントキュー評価のためのシリアルシミュレーションエンジンとコンカレントシミュレーションエンジンとの間の翻訳及び同期のための例示的な動作を示す。 Verilog HDL実行モデルによって指定されるキューの種類に基づく複数のイベントキュー評価のための、シリアルシミュレーションエンジンとコンカレントシミュレーションエンジンとの間の翻訳及び同期のための例示的な動作を示す。 VHDL実行モデルによって指定されるキューの種類に基づく複数のイベントキュー評価のための、シリアルシミュレーションエンジンとコンカレントシミュレーションエンジンとの間の翻訳及び同期のための例示的な動作を示す。 シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンのためのデータストレージを示す。特に、コンカレントシミュレーションエンジンのためのワードストレージは、1つの実行された命令が、シリアルシミュレーションエンジンにおいて、複数の論理関数をシミュレートし、複数の論理インスタンスに対応する複数の出力を生成することを可能にする。 シリアル及びコンカレントシミュレーションエンジンによって実装されるような様々なモジュールのブロック図を示す。特に、シリアルシミュレーションエンジン内のモジュールには、コンカレントシミュレーションエンジンに責任を転送するスタブモジュールが含まれるが、コンカレントシミュレーションエンジン内のモジュールには、シリアルシミュレーションエンジンに責任を転送するスタブモジュールが含まれる。 統合型論理シミュレータを含む例示的なデジタルASIC設計フローの簡易化した表現を示す。
従来の論理シミュレータは、本明細書において「シリアルシミュレーションエンジン」と呼ばれる技法において、一度に1つのシミュレーションを実行する。適切な性能を達成するために、シリアルシミュレーションエンジンは各シミュレーションをできるだけ速く実行するように設計される。係属中の米国特許出願第12/586,724号明細書(特許文献1)には、ハードウェア設計の同時並行的シミュレーションを効率的に行うための、本明細書において「コンカレントシミュレーションエンジン」と呼ばれる技法が記載されており、特許文献1は引用を以て本明細書の一部となす。コンカレントシミュレーションエンジンは、同時に幾つかのシミュレーションを実行することによって性能を達成する。
シリアル及びコンカレントシミュレーションエンジンの実装並びにシミュレートされているハードウェア設計の独自の特性に応じて、シリアルシミュレーションエンジンを用いてハードウェア設計の特定の部分を実行し、コンカレントシミュレーションエンジンを用いてハードウェア設計の特定の他の部分を実行することが望ましいであろう。コンカレントシミュレーションエンジン及びシリアルシミュレーションエンジンを1つの統合型論理シミュレータに統合するためのソフトウェアベースの技法について以下に説明する。この統合によりもたらされる論理シミュレータを、これ以降「統合型論理シミュレータ」と呼ぶ。
論理シミュレータは、ハードウェア記述言語(HDL)により定められるときに、特定の実行モデルを実装することに留意されたい。統合型論理シミュレータを記述するために、Verilog HDLを用いる。しかし、統合型論理シミュレータは、その他のHDL及び該HDLに関連する実行モデルに適用することができる。
Verilog HDLは、基本的な離散イベント実行モデルに従って解釈される。幾つかのイベントキューが定義され、そこからのイベントが実行される。イベントは、(1)シミュレーションが進むにつれて生成され、(2)特定のキューに配置され、(3)実行モデルにより定められるようなシミュレーション中の特定の時点でキューから取り出され、(4)実行される。イベントを実行すると、今度は、後で実行するためにキューに配置される追加イベントを生成することができる。イベントを含むこのシーケンスは、それ以上イベントが生成されなくなるまで継続し、イベントが生成されなくなった時点でシミュレーションは終了する。
通常、シミュレートされるハードウェア設計は、複数のモジュールとしてVerilog HDLで表される。多くの場合、Verilogモジュールと実際のハードウェアサブコンポーネントとの間に対応関係があるが、必ずしもそうばかりとは限らない(例えばVerilogモジュールは、単一のハードウェアサブコンポーネントによって実装されない抽象的な機能性またはビヘイビア(振る舞い)を表現し得る)。Verilogモジュールは、別のモジュールに「埋め込まれる」と言われているモジュールのインスタンスとともに階層に配置される。例えば、マイクロプロセッサ用モジュールは、種々の演算モジュール、論理モジュール、制御モジュール及び記憶モジュールに分解され得る。マイクロプロセッサモジュール内には、階層に構築された各構成モジュールの埋め込みインスタンスがある。
インスタンス化された各Verilogモジュールは、Verilog HDL実行モデルの仕様に従って、論理シミュレータによる実行のためにイベントを生成する。Verilog HDL論理シミュレータは、シリアルシミュレーションエンジンのみ、コンカレントシミュレーションエンジンのみ、またはシリアルシミュレーションエンジンとコンカレントシミュレーションエンジンの組合せ(後者は本明細書に記載の統合型論理シミュレータである)のいずれを用いて実装されようと、実行モデルに従うはずである。
例えば、図1は、Verilog HDL実行モデルによって記述されるキューのサブセットを示している。Verilog HDL実行モデルは、論理シミュレータの非アクティブイベントキューから任意の非アクティブイベント102が実行される前に、論理シミュレータのアクティブイベントキューから全てのアクティブイベント101が実行されることを必要とする。アクティブ及び非アクティブイベントキューが空になった時点で、NBA更新イベントキューからノンブロッキング代入(non-blocking assignment:NBA)更新イベント103が実行される。図1に示されているものの他にも、シミュレーションの進行とともに1つのキューから別のキューへ進むための確立した規則に従って、Verilog HDL実行モデル内に他のキューがあることに留意されたい。
シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンの両者を用いる統合型論理シミュレータにおいて、ハードウェア設計を記述するHDLプログラムを2つのモジュール群に分割することができる。1つのモジュール群はシリアルシミュレーションエンジンによって実行され、もう1つのモジュール群はコンカレントシミュレーションエンジンによって実行される。統合型論理シミュレータがVerilog HDL実行モデルに違反しない(例えばシリアルシミュレーションエンジンまたはコンカレントシミュレーションエンジンのいずれか一方において実行するためのアクティブイベント及び非アクティブイベントがまだある間はNBA更新イベントが実行されない)ように、統合型論理シミュレータにおける1つのキューから別のキューへの進行は、シリアルシミュレーションエンジンとコンカレントシミュレーションエンジンとの間で調整されなければならない。
Verilogモジュールは、入力/出力ポート変数を介して互いに相互作用する。モジュール間相互参照として知られている機能(その仕組みは当業者に知られているので、ここでは説明しない)を介して、或るVerilogモジュールを他のモジュールインスタンス内の内部変数に直接読み書きすることもできる。これらの内部変数は、モジュール間相互作用において用いられ、或るモジュールのための「インタフェース変数」として特定されかつ参照される。
図2は、2つのモジュール、すなわち、加算器モジュール202と、加算器モジュール202をインスタンス化するトップレベルモジュール201とを備えた単純な従来の設計を示している。トップレベルモジュール201内の変数と埋め込み加算器モジュール202内の変数とが、加算器ポート変数を介して結び付けられる。これらのポート変数は、この設計におけるインタフェース変数である。図2に示されているように、トップモジュール201のためのインタフェース変数「clk」、「input1」及び「input2」は、加算器モジュール202のためのインタフェース変数「clk」、「a」及び「b」にマッピングする。それゆえ、例えば、変数input1が変化すると、変数「a」も変化する。同様に、加算器モジュール202のインタフェース変数「out」は、トップレベルモジュール201のためのインタフェース変数「sum」にマッピングする。
特に、シリアルシミュレーションエンジンにアサインされたモジュールがコンカレントシミュレーションエンジンにアサインされたモジュールとインターフェースをとるとき、シリアルシミュレーションエンジンモジュールは、コンカレントシミュレーションエンジンモジュールのためのプレースホルダとして機能するスタブモジュールと相互作用することができる。このスタブモジュールは、埋め込みモジュールの全てのインタフェース変数を含むことができる。再び図2に示されている設計を参照すると、トップレベルモジュールをシリアルシミュレーションエンジンにアサインすることができ、加算器モジュールをコンカレントシミュレーションエンジンにアサインすることができる。この場合、加算器モジュールRTLを参照する代わりに、シリアルシミュレーションは、加算器のためのスタブモジュールを参照する。
図3Aは、設計200(図2)のための従来のHDL300を示しており、図3Bは、統合型論理シミュレータによりシミュレートされるときのシリアルシミュレーションエンジンによって参照されるHDL310を示している。加算器モジュールのためのインタフェース変数はHDL310(スタブモジュールとも呼ばれる)に残るが、加算器モジュールの機能的側面(すなわち「always @ (posedge_clk)」及び「out = a + b」)はもはやシリアルシミュレーションエンジン内に存在しないことに留意されたい。特に、図4A及び図4Bを参照して説明したように、加算器モジュールの機能的側面は、代わりにコンカレントシミュレーションエンジンにおいて定義される。
図4A及び図4Bは、トップモジュール及び埋め込みモジュールの例示的な分割を示している。具体的には、図4Aは、図2に示した設計の従来の論理シミュレータ図を示している。この場合、全てのモジュール(すなわち、トップモジュール201及び加算器モジュール202)がシリアルシミュレーションエンジン401によってシミュレートされる。対照的に、図4Bは、コンカレントシミュレーションエンジン402が埋め込み加算器モジュール202に対する責任を持たされているときの分割を示している。この場合、実際の加算器モジュールHDLはコンカレントシミュレーションエンジン402によってシミュレートされることができ、シリアルシミュレーションエンジン401は、埋め込み加算器モジュールのためのスタブモジュール202Aと相互作用することができる。
図4Bに示されている構成では、シリアルシミュレーションエンジン401は、各インタフェース変数(1つが図示されている)にアサインされた自身のストレージ403を有することができる。スタブモジュール202Aへの入力の役割を果たすインタフェース変数に値を書き込むことができ、スタブモジュール202Aへの出力の役割を果たすインタフェース変数から値が読み出される。同様に、コンカレントシミュレーションエンジン402は、各インタフェース変数(1つが図示されている)にアサインされた自身のストレージ404を有することができる。コンカレントシミュレーションエンジンモジュール、すなわち、加算器モジュール202への入力の役割を果たすインタフェース変数から値を読み出すことができ、加算器モジュール202への出力の役割を果たすインタフェース変数に値を書き込むことができる。上記したように、加算器モジュール202内のインタフェース変数の値の変更は、スタブモジュール202Aに反映されることになり、それによってトップモジュール201が適切に機能することを確実にする。同様に、スタブモジュール202A内のインタフェース変数の値の変更は、加算器モジュール202に反映されることになり、それによってそれが適切に機能することを確実にする。
インタフェース変数ではない変数は、シリアルシミュレーションエンジン401またはコンカレントシミュレーションエンジン402のいずれか一方に格納されるが、両方には格納されないことに留意されたい。換言すれば、統合型論理シミュレータにおいてシリアルシミュレーションエンジン401とコンカレントシミュレーションエンジン402との間で共有される状態は、インタフェース変数に限定される。
特に、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンは、変数の値を格納するために互いに異なる表現を利用することができる。一実施形態では、シリアルシミュレーションエンジンは、上記変数に対して複数の値、各シミュレーションに対して1つが格納されている表現を用いることができる。例えば、図5Aに示されているシリアルシミュレーションエンジン500を参照し、4つの異なるシミュレーション、すなわち、シミュレーション0、シミュレーション1、シミュレーション2及びシミュレーション3に対して複数の値を有する8ビット変数Vのための変数の値の表現を考える。変数Vのための各シミュレーションは、8ビットを格納する。対照的に、図5Bに示されているコンカレントシミュレーションエンジン510を参照すると、複数の4ビットワードに4つのシミュレーションの値が格納される。具体的には、そのようなアサインされたワードが8つ、すなわち変数Vの各ビットに1つある(すなわちV[0]〜V[7])。図5A及び図5B中のボックス501及び502はそれぞれ、シリアルシミュレーションエンジン500及びコンカレントシミュレーションエンジン510において複数のシミュレーションにわたってシングルビットのための値がどのように構築されるかを示している(例えばビットA、B、C及びDを参照)。
インタフェース変数の2つのコピー(すなわち、シリアルシミュレーションエンジンに1つ、コンカレントシミュレーションエンジンに1つ)があるので、これら2つのコピーは、統合型論理シミュレータが全シミュレーション状態の一貫した表示を保つように、更新時に同期されたままでなければならない。いくつかの実施形態では、キュー評価の始めと終わりにインタフェース変数の値が同期される。インタフェース変数の値を同期させるには、変数の値を格納するためのシリアルシミュレーションエンジン表現(例えば図5Aを参照)とコンカレントシミュレーションエンジン表現(例えば図5Bを参照)との間の翻訳が必要である。
図6Aは、Verilog HDL実行モデルにおけるアクティブイベントキューに基づくシリアルシミュレーションエンジン600Aとコンカレントシミュレーションエンジン600Bとの間の例示的な同期を示している。各シミュレーションエンジンは自身のアクティブイベントキューを有することに留意されたい。すなわち、シリアルシミュレーションエンジン600Aはアクティブイベント601を有し、コンカレントシミュレーションエンジンはアクティブイベント611を有する。一実施形態では、シリアルシミュレーションエンジン600A内のアクティブイベントキューにそれ以上アクティブイベント601がなくなれば、その時がコンカレントシミュレーションエンジン600Bに同期させる時間である。
ステップ630では、コンカレントシミュレーションエンジンモジュールのためのポートインタフェース変数の値が、シリアルシミュレーションエンジン600Aから翻訳・同期関数(translate and synchronize function)620へ転送される。この翻訳・同期関数620は、シリアルシミュレーションエンジン600Aによって用いられるストレージ表現からコンカレントシミュレーションエンジン600Bによって用いられるストレージ表現へ(例えば、図5Aに示されているストレージ表現から図5Bに示されているストレージ表現へ)の翻訳を含む。ステップ631では、翻訳され転送されたポートインタフェース変数の値に基づいて、コンカレントシミュレーションエンジン600Bにおけるアクティブイベント611が実行される。ステップ632では、コンカレントシミュレーションエンジンモジュールのためのポートインタフェース変数の値が、翻訳・同期関数620を介してシリアルシミュレーションエンジン600Aに転送される。この方向においては、翻訳・同期関数620は、コンカレントシミュレーションエンジン600Bによって用いられるストレージ表現からシリアルシミュレーションエンジン600Aによって用いられるストレージ表現への翻訳を含む。
翻訳・同期関数620は、グルーロジック640の一部を形成することに留意されたい。このグルーロジックは、コンパイル時間関数及びランタイム関数の両者を提供する。コンパイル時間関数は、シリアルシミュレーションエンジン600Aに全てのモジュールのためのソースコードが与えられたときに、コンカレントシミュレーションエンジン600Bには該エンジンにアサインされるモジュールの定義が与えられる一方で、シリアルシミュレーションエンジン600Aには同じモジュールのためのスタブ定義が与えられることを確実にすることを含む。ランタイム関数は、シミュレータが動作してイベントを生成し始めた時点で、シリアルシミュレーションエンジンとコンカレントシミュレーションエンジンとの間でのインタフェース変数の翻訳が与えられることを確実にすることを含む。ランタイム関数はまた、シリアルシミュレーションエンジン600Aにおけるキューの実行がVerilog HDL実行モデルに従うように、シリアルシミュレーションエンジン600A及びコンカレントシミュレーションエンジン600Bの両者においてシミュレーションが適切に同期されることを確実にすることを含む。このように、翻訳・同期関数620は、グルーロジック640のランタイム関数の一部を形成する。
コンカレントシミュレーションエンジン600Bのアクティブイベント611を実行することで、シリアルシミュレーションエンジン600Aの追加アクティブイベント601を生成したかもしれないことに留意されたい。これについては(翻訳・同期関数620を用いて同期される)ステップ633で示されている。これらの新たなイベントは次にVerilog HDL実行モデルによって実行され、その後、翻訳・同期関数620を用いてステップ630、631、632及び633が繰り返される。シリアルシミュレーションエンジン600Aのアクティブイベント601がないとき(コンカレントシミュレーションエンジン600Bによって生成される追加アクティブイベントまたは既にシリアルシミュレーションエンジン600Aにおいてキューに入れられているアクティブイベントに基づいて)、シリアルシミュレーションエンジン600Aの非アクティブイベントキューからの非アクティブイベント602は、Verilog HDL実行モデルに従って実行されることができる。
図6Aのアクティブキューを参照して説明した同期をVerilog HDL実行モデルにおける他のキュー評価に拡張することができる。例えば、図6Bは、シリアルシミュレーションエンジン600A及びコンカレントシミュレーションエンジン600Bのためのアクティブイベントキュー(アクティブイベント601及び611)、非アクティブイベントキュー(非アクティブイベント602及び612)、並びにNBA更新イベントキュー(NBA更新イベント603及び613)を含む例示的な拡張を示している。シリアルシミュレーションエンジン600Aとコンカレントシミュレーションエンジン600Bとの間で、アクティブキュー、非アクティブキュー及びNBA更新キューは、それぞれ翻訳・同期関数620、621及び622(これらはグルーロジック640の一部を形成する)を用いて同期される。
シリアルシミュレーションエンジン600Aの或るキューが評価された後、インタフェース変数の値がコンカレントシミュレーションエンジン600Bに転送される。このイベントはその後、コンカレントシミュレーションエンジン600Bの対応するキューから実行される。イベント実行の結果を含むインタフェース変数の値はその後、シリアルシミュレーションエンジン600Aに戻され、そしてVerilog HDL実行モデルに従ってキューからキューへ進む。図6Bに示されているように、シリアルシミュレーションエンジン600Aまたはコンカレントシミュレーションエンジン600Bのいずれか一方において実行される任意のイベントは、優先順位が高いかまたは低いかいずれかの1若しくは複数のイベントを生成し得ることに留意されたい。通常、コンカレントシミュレーションエンジン600Bによって任意の新たなイベントが生成されたときは、翻訳・同期関数はすぐ知らされ、当該新たなイベントはその後、シリアルシミュレーションエンジン600Aの適切なキューに配置される。
アクティブイベント、非アクティブイベント及びNBA更新イベントを含むVerilog HDLに基づく例示的なキューについては既に説明したことに留意されたい。しかし、統合型論理シミュレータを、その他のHDL及び該HDLに関連する実行モデルに有利に適用することもできる。従って、通常、統合型論理シミュレータは、特定のHDLによって提供されるイベントの全クラスと連動することができる。さらに、各特定のHDLは、統合型論理シミュレータによって尊重されることができるような互いに異なるキュー遷移規則を有することができる。
例えば、図6Cは、VHDL(超高速集積回路(very high speed integrated circuit:VHSIC)HDL)モデルにおける例示的なキューのシミュレーション実行順序を示している。VHDLモデルでは、実行の順序は、信号更新イベント、関数評価イベント及びプロセス評価イベント経て進み、制御もプロセス実行の終わりに達するまでこの方向に流れ、終わりの時点で制御は信号更新に戻ることに留意されたい。上記したように、シリアルシミュレーションエンジン600Aとコンカレントシミュレーションエンジン600Bとの間での各実行の遷移は、翻訳・同期関数620、621及び622を含むグルーロジック640を用いて促進されることができる。
統合型論理シミュレータにおいて関連アクティブイベント及びNBA更新イベントが実行されるような以下の例を考える。これらのイベントは、3つの代入、すなわち、シリアルシミュレーションエンジンによってシミュレートされるモジュールにおける2つの代入及びコンカレントシミュレーションエンジンによってシミュレートされるモジュールからの1つの代入によってもたらされる(Verilog代入は、計算された変数の値を格納場所に書き込むことを含む)。

Serial Simulation Engine
// Active event.
always @(posedge CLK)
A = B + 1;
// NBA update event.
always @(posedge CLK)
C <= D;

Concurrent Simulation Engine
// Active event.
always @(A)
B = A + 2;
上の例では、立ち上がり(positive edge)においてCLKをトリガするとき、2つのイベントが生成される。1つのイベントはシリアルシミュレーションエンジンアクティブイベントキューに配置され、もう1つのイベントはシリアルシミュレーションエンジンNBA更新イベントキューに配置される。図6Bのための優先順位によれば、最初にアクティブイベントがVerilog HDL実行モデルに従って実行され、その後、シリアルシミュレーションアクティブイベントキューは空になる。この空状態は、図6Aに関連して説明した4ステップのプロセスに従って、統合型論理シミュレータをコンカレントシミュレーションエンジンに同期させる。具体的には、以下の通りである。
変数Aのための値が、シリアルシミュレーションエンジンからコンカレントシミュレーションエンジンへ転送される。
コンカレントシミュレーションエンジンにおいてアクティブイベントが実行される。
変数Bのための更新された値が、コンカレントシミュレーションエンジンからシリアルシミュレーションエンジンへ転送される。
コンカレントシミュレーションにおいてアクティブイベントが実行されるので、次のキュー評価に進む前に、シリアルシミュレーションエンジンにおいてなすべき余分な仕事(すなわち新たなアクティブイベント)が存在するであろう。従って、プロセスは、シリアルシミュレーションエンジンにおけるアクティブイベントキューに戻る。
この時点で、シリアルシミュレーションエンジンにおいて実行すべきアクティブイベントはもうない。さらに、シリアルシミュレーションエンジンにもコンカレントシミュレーションエンジンにも非アクティブイベントがなく(後者の点は、図6Aにおいて概説したような方法で非アクティブイベントキュー上のコンカレントシミュレーションエンジンと同期させた後に決定される)、これは、シリアルシミュレーションが保留状態のNBA更新イベントを実行して変数Cに書き込むことができることを意味する。
一実施形態では、なすべき仕事の量を減らすために、修正インタフェース変数のみ(または代わりにインタフェース変数内の修正ビットのみ)がキュー評価点において同期される。他の実施形態では、修正インタフェース変数を有するシミュレーションがキュー評価点においてのみが同期される。キュー評価点は、1つのシミュレーションエンジンにおける或る特定のキュー内の全てのイベントを終えたときに現れることができる。一実施形態では、キュー評価点は、同期をトリガすることができる。すなわち、グルーロジックが、更新されたインタフェース変数を、他のシミュレーションエンジンにおいて実行するために対応するキューに転送する。しかし、他の実施形態では、1若しくは複数のインタフェース変数の変化が同期をトリガすることができる。それゆえ、同期は、キュー評価前、キュー評価後、またはキュー評価の前後に起こり得る(全部または一部において)。
図7は、シリアルシミュレーションエンジン700Aによってシミュレートされるトップモジュール701と、コンカレントシミュレーションエンジン700Bによってシミュレートされる加算器モジュール712とを示している。この実施形態では、トップモジュール701は複数のスタブ加算器モジュール702A、702B、702C及び702Dを含む。特に、シリアルシミュレーションエンジン700Aにおけるスタブ加算器モジュール702A〜702Dの全てのインスタンスを、コンカレントシミュレーションエンジン700Bにおける加算器モジュール712の1つのインスタンスのみによって定義することができる。
有利には、この態様は、目的を達成するためのかなりの力を統合型論理シミュレータに対して与える。具体的には、シリアルシミュレータエンジン700A内の各スタブモジュールは、各インタフェース変数のための別個のストレージを有することができるが、コンカレントシミュレーションエンジン700B内の対応するモジュールは、複数の値を格納し得る1つのワードを有することができ、それによって該ワードは複数のスタブモジュールに関連するインタフェース変数の値を格納することができる。例えば、図7では、スタブ加算器モジュール702A〜702Dは、各インタフェース変数に対してそれぞれストレージ703A〜703Dを有することができる。対照的に、コンカレントシミュレーションエンジン700B内の加算器モジュール712は、各スタブ加算器モジュール702A〜702Dからのこれらのインタフェース変数を格納するために1つのワード713しか必要としない。
ストレージ703A〜703Dに格納される値が1ビット値(例えば1つのclk値)であると仮定すれば、ワード713の各ビットは、特定のスタブモジュールによって格納されている値に対応することができる(すなわち、703A←→703A’、703B←→703B’、703C←→703C’、703D←→703D’)。それゆえ、イベントの実行中にシリアルシミュレーションエンジン700Aのストレージ703C内のインタフェース変数の値が変化した場合、該値は同期中にコンカレントシミュレーションエンジン700B内のビット703Cに転送されることになる。この転送は、図5A及び図5Bを参照して説明したものと同じ翻訳を含むことに留意されたい。さらに、他の実施形態は、シリアルシミュレーションエンジン700Aに格納されたマルチビット値を有することができ、該値はマルチビット値としてコンカレントシミュレーションエンジン700Bの1つのワードの位置に転送されることができることに留意されたい。このストレージ構成により、コンカレントシミュレーションエンジン700Bは、加算器モジュール712内の複数(すなわち4つ)の値を用いて複数(すなわち4回)のコンカレントシミュレーションを行うことができる。
有利には、論理シミュレーションに用いられる多くのコンピュータは、拡張ワード値、例えば32、64または128ビットのレジスタを有する。それゆえ、統合型論理シミュレータのコンカレントシミュレーションエンジンは、1つのワードに格納されているかなりの量のデータに同じ操作を同時に適用することができる。
上記した実施形態では、シリアルシミュレーションエンジンは、それが同期点においてコンカレントシミュレーションエンジンを呼び出すシリアルシミュレーションエンジンであるという意味では、統合型論理シミュレータの主シミュレーションエンジンであってよい。他の実施形態では、逆の構成、すなわち、コンカレントシミュレーションエンジンが主シミュレーションエンジンであり、Verilog HDL実行モデルに従ってキューからキューへ進行し、適切な同期点においてシリアルシミュレーションエンジンを呼び出すような構成も可能である。一実施形態では、実行モデルにおける同期点は、プログラミング言語インタフェース(PLI)や検証手続インタフェース(VPI)などの業界標準のアプリケーションプログラミングインタフェースを通して確立されることができ、これらのインタフェースは、ユーザ定義拡張子をVerilogシミュレーションに実装するために用いられる。別の実施形態では、実行モデルにおける同期点は、1若しくは複数の独自仕様のインタフェースを通して確立されることができる。
一実施形態では、どのモジュールがスタブモジュールとして(かつコンカレントシミュレーションエンジンにおいて行われる関連コンカレントシミュレーションを用いて)インスタンス化されることができるかを決定するための設計の分割をユーザが手動で行うことができる。別の実施形態では、この分割を、潜在的なインスタンスの数に基づくシミュレーションによって自動的に行うことができる(すなわち、インスタンスの数が多ければ多いほど、コンカレントシミュレーションエンジンによって達成可能な力が大きい)。さらに別の実施形態では、シリアルシミュレーションエンジン及び/またはコンカレントシミュレーションエンジンが所望のレベルのシミュレーション性能を達成する能力に基づいて分割を行うことができる。例えば、或るモジュールがPLI(プログラミング言語インタフェース)を通してユーザ定義C関数への広範な関数呼び出し(コール)を行う場合、おそらくコンカレントシミュレーションエンジンの値表現を活用する能力なしにユーザ定義関数が書き込まれたので、上記モジュールは、シリアルシミュレーションエンジンによる実行に一層適しているであろう。
設計の分割は、設計の設計階層を考慮して行うことができることに留意されたい。例えば、一実施形態では、第1のモジュールが副シミュレーションエンジンによってシミュレートされることは、第1のモジュールの下の設計階層内においてより深くインスタンス化された全てのサブモジュールも同様に副シミュレーションエンジンによってシミュレートされることを示唆している。別の実施形態では、第1のモジュール(副シミュレーションエンジンによってシミュレートされる)が第2のモジュールをインスタンス化する場合に、第2のモジュールは、主シミュレーションエンジンによってシミュレートされることができる。上記したように、主シミュレーションエンジンはシリアルシミュレーションエンジンであってよく、第2のシミュレーションエンジンはコンカレントシミュレーションエンジンであってよい(逆もまた同様)。
例えば、以下のコードは、統合型論理シミュレータに固有の柔軟性の或る例示的な事例を与える。

// Original Verilog

module top_module;
reg clk;
reg [7:0] input1;
reg [7:0] input2;
wire [7:0] sum;
wire [7:0] product;
adder_and_mult am (.clk(clk),
.a(input1),
.b (input2),
.sum(sum),
.product (product) ) ;
endmodule

module adder_and_mult(clk, a, b, sum, product);
input clk;
input [7:0] a;
input [7:0] b;
output [7:0] sum;
output [7:0] product;

always @(posedge clk)
sum = a + b;

multiplier mult (.clk(clk) ,
.a(a),
.b(b),
.product (product));
end module

module multiplier (clk, a, b, product);
input clk;
input [7:0] a;
input [7:0] b;
output [7:0] product;

always @(posedge clk)
product = a * b;
endmodule

// Verilog + stub modules simulated by the serial simulation engine.

// To be simulated by the serial simulation engine.
module top_module;
reg clk;
reg [7:0] input1;
reg [7:0] input2;
wire [7:0] sum;
wire [7:0] product;
adder_and_mult am(.clk(clk) ,
.a (input1),
.b (input2),
.sum(sum),
.product (product));
endmodule

// To be simulated by the concurrent simulation engine.
module adder_and_mult (clk, a, b, sum, product);
input clk;
input [7:0] a;
input [7:0] b;
output [7:0] sum;
output [7:0] product;

multiplier mult (.clk(clk),
.a (a),
.b(b),
.product (product));
endmodule

// To be simulated by the serial simulation engine.
module multiplier (clk, a, b, product);
input clk;
input [7:0] a;
input [7:0] b;
output [7:0] product;

always @(posedge clk)
product = a * b;
endmodule

図8は、上記のコードを表現しているブロック図を示していることに留意されたい。この実施形態では、シリアルシミュレーションエンジン811は、スタブ加算器及び乗算器モジュール802Aを含むトップモジュール801に対する責任を持たされている。コンカレントシミュレーションエンジン812は、埋め込み加算器及び乗算器モジュール802に対する責任を持たされている。この場合、実際の加算器HDLは、コンカレントシミュレーションエンジン802によってシミュレートされることができ、コンカレントシミュレーションエンジン812は、埋め込み乗算器モジュールのためのスタブモジュール803Aと相互作用することができる。この実施形態では、加算器及び乗算器モジュール802はスタブ乗算器モジュール803Aを含み、スタブ乗算器モジュール803Aは、シリアルシミュレーションエンジン811の乗算器モジュール803と相互作用する。換言すれば、モジュールの下の設計階層内においてより深くインスタンス化された任意のサブモジュール(スタブモジュールからシミュレーションを行うように指示された任意のモジュール)は、シリアルシミュレーションエンジン811またはコンカレントシミュレーションエンジン812のいずれかによって実行されるように構造化されることができる。通常、シリアルシミュレーションエンジン811とコンカレントシミュレーションエンジン812との間のシミュレーション責任のこの転送は、何度も行われることができ、システム資源を最適化するように構造化されることができることに留意されたい。
トップモジュールに埋め込まれている加算器モジュールのためのイベントを実行するものとしてコンカレントシミュレーションエンジンについて上記で説明したが、統合型論理シミュレーションは、他の種類のトップ/埋め込みモジュールに等しく適用可能であることに留意されたい。例えば、別の埋め込みモジュールは、被試験体(device under test:DUT)を含むことができ、DUTはシリアルシミュレーションエンジンにおいてスタブモジュールとして表現されることができる。この場合、トップモジュールは、テストベンチを含むことができる。
図9は、統合型論理シミュレータを含む例示的なデジタルASIC設計フローの簡易化した表現を示している。高レベルにおいて、プロセスは製品アイデア(ステップ900)から始まり、EDAソフトウェア設計プロセス(ステップ910)において実現される。設計が完成すると、完成した設計をテープアウトすることができる(イベント940)。テープアウトの後、製造プロセス(ステップ950)並びに梱包及び組立てプロセス(ステップ960)を行い、最終的に完成チップが得られる(結果970)。
EDAソフトウェア設計プロセス(ステップ910)は、実際には、簡単にするために直線的に示されている複数のステップ912〜930からなる。実際のASIC設計プロセスでは、特定の設計は、特定のテストに合格するまで上記ステップを繰り返さなければならないかもしれない。同様に、任意の実際の設計プロセスでは、これらのステップが異なる順番及び組合せで生じることがある。従って、この説明は、特定のASICのための特定の、または推奨される設計フローではなく、コンテキスト及び一般的説明のつもりで与えられている。
ここで、EDAソフトウェア設計プロセス(ステップ910)の構成要素ステップについて簡単に説明する。
システム設計(ステップ912):設計者は、自身が実装したい機能性を記述し、何らかの状況を仮定した計画を行うことにより機能性を微調整し、コストをチェックすることなどができる。この段階で、ハードウェア−ソフトウェアのアーキテクチャ分割が起こり得る。このステップにおいて用いることができるシノプシス社(Synopsys, Inc.)製の例示的なEDAソフトウェア製品には、Model Architect、Saber、System Studio、DesignWare(登録商標)の各製品が含まれる。
論理設計及び機能検証(ステップ914):この段階では、システム内のモジュールのためのVHDLまたはVerilogコードが書き込まれ、設計の機能的精度がチェックされる。より具体的には、設計をチェックして該設計が正しい出力を作り出すことを確実にする。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、VCS、VERA、DesignWare(登録商標)、Magellan、Formality、ESP、LEDAの各製品が含まれる。一実施形態では、上記の統合型論理シミュレータは、論理設計及び機能検証ステップ914中に実装されることができる。
合成及びテスト設計(design for test)(ステップ916):ここでは、VHDL/Verilogがネットリストに翻訳される。ネットリストは、標的技術に対して最適化されることができる。さらに、完成チップのチェックを可能にするためにテストの設計及び実装が行われる。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、Design Compiler(登録商標)、Power Compiler、DFTMAX、TetraMAX、DesignWare(登録商標)の各製品が含まれる。
ネットリスト検証(ステップ918):このステップでは、ネットリストがタイミング制約を順守しかつVHDL/Verilogソースコードと一致しているかチェックされる。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、Formality、PrimeTime、VCSの各製品が含まれる。
設計計画(ステップ920):ここでは、チップのための全体的なフロアプランが作成され、タイミング及びトップレベルルーティングのために解析される。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、Astro及びIC Compilerの各製品が含まれる。
物理的実装(ステップ922):このステップでは、配置(回路素子の位置決め)及びルーティング(回路素子の接続)を行う。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、Astro及びIC Compilerの各製品が含まれる。
解析及び抽出(ステップ924):このステップでは、回路機能がトランジスタレベルにおいて検証され、それにより、何らかの状況を仮定した微調整が可能になる。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、AstroRail、PrimeRail、Primetime、Star RC/XTの各製品が含まれる。
フィジカル検証(ステップ926):このステップでは、製造、電気に関する問題、リソグラフィーの問題及び電気回路の正確さを確保するために種々のチェック機能が行われる。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、Hercules製品が含まれる。
解像度向上(ステップ928):このステップは、設計の製造可能性を向上させるためのレイアウトの幾何学的操作を含む。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、Proteus、ProteusAF、PSMGenの各製品が含まれる。
マスクデータ準備(ステップ930):このステップは、完成チップを製作するためにリソグラフィーに用いるためのマスクの製作のための「テープアウト」データを提供する。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、CATS(R)ファミリーの製品が含まれる。
データストレージシステム、少なくとも1つの入力デバイス及び少なくとも1つの出力デバイスとデータ及び命令を送受信するように結合された少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステムで実行する1若しくは複数のコンピュータプログラムを用いて、上記した統合型論理シミュレータを実行することができる。各コンピュータプログラムは、高水準手続き型またはオブジェクト指向のプログラミング言語で、あるいは必要に応じてアセンブリ言語または機械語で実装されることができ、いずれの場合においても、言語はコンパイルまたは解釈された言語であってよい。適切なプロセッサには、例として、汎用及び専用マイクロプロセッサ並びに他の種類のマイクロコントローラが含まれる。一般的に、プロセッサは読出し専用メモリ(ROM)及び/またはランダムアクセスメモリ(RAM)から命令及びデータを受け取ることになる。一般的に、コンピュータは、データファイルを格納するための1若しくは複数の大容量ストレージデバイスを含むことになり、そのようなデバイスには、磁気ディスク(内部ハードディスク及びリムーバブルディスクなど)、光磁気ディスク及び光ディスクが含まれる。コンピュータプログラム命令及びデータを目に見える方法で具体化するのに適したストレージデバイスには、例として、半導体メモリデバイス(EPROM、EEPROM、フラッシュメモリデバイスなど)、磁気ディスク(内部ハードディスク及びリムーバブルディスクなど)、光磁気ディスク及びCDROMディスクなどを含む全ての形態の不揮発性メモリが含まれる。上述のいずれも、特殊用途向け集積回路(application-specific integrated circuit:ASIC)を補うかまたはASICに組み込むことができる。
本発明の原理を説明する添付の図面とともに、本発明の1若しくは複数の実施形態の詳細な説明が上記でなされている。そのような実施形態に関連して本発明について説明されているが、本発明は、どの実施形態に限定されるものでもない。本発明の範囲は特許請求の範囲によってのみ限定され、本発明は、数多くの代替形態、変更形態及び等価形態を含む。本発明への完全な理解を与えるために、以下の説明に多くの具体的詳細が示されている。これらの詳細は例示のために与えられているものであり、これらの具体的詳細の一部または全部なしに、特許請求の範囲に従って本発明を実施することができる。明瞭さのために、本発明に関連する技術分野において既知である技術項目については、本発明が不必要に不明瞭にならないように、詳細に説明しなかった。

Claims (23)

  1. ハードウェア記述言語(HDL)で記述された設計をシミュレートする方法であって、
    シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンを含む統合型論理シミュレータを動作させるステップと、
    前記シリアルシミュレーションエンジンを用いて一度に1つずつのシミュレーションを行うステップと、
    前記コンカレントシミュレーションエンジンを用いて複数の並行的なシミュレーションを行うステップと、
    前記HDLの実行モデルによって定義されるイベントのクラスに基づいて、前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジンの両シミュレーションを同期させるステップとを含むことを特徴とする方法。
  2. 前記設計を、前記統合型論理シミュレータによって実行される2つのモジュール群に分割するステップをさらに含み、
    前記2つのモジュール群が、前記シリアルシミュレーションエンジンで評価するための第1のモジュール群と、前記コンカレントシミュレーションエンジンで評価するための第2のモジュール群とを含むことを特徴とする請求項1に記載の方法。
  3. 前記分割するステップを、前記設計の設計階層を考慮して行うことを特徴とする請求項2に記載の方法。
  4. 前記コンカレントシミュレーションエンジンが、第1のモジュールをシミュレートするときに、該第1のモジュールの下位の前記設計階層内においてより深くインスタンス化された任意のサブモジュールも同様にシミュレートすることを特徴とする請求項3に記載の方法。
  5. 第1のシミュレーションエンジンによってシミュレートされる第1のモジュールが、第2のモジュールをインスタンス化するとき、該第2のモジュールを第2のシミュレーションエンジンによってシミュレートし、
    前記第2のモジュールが、前記第1のシミュレーションエンジンによってシミュレートされる第3のモジュールをインスタンス化し、
    前記第1及び第2のシミュレーションエンジンがそれぞれ、(1)前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジン、または(2)前記コンカレントシミュレーション及び前記シリアルシミュレーションエンジン、のいずれかであることを特徴とする請求項3に記載の方法。
  6. 前記シリアルシミュレーションエンジンまたは前記コンカレントシミュレーションエンジンのうちの一方を前記統合型論理シミュレータの主シミュレーションエンジンに指定するステップと、
    前記シリアルシミュレーションエンジンまたは前記コンカレントシミュレーションエンジンのうちの他方を前記統合型論理シミュレータの副シミュレーションエンジンに指定するステップとをさらに含み、
    前記主シミュレーションエンジンが、同期点において前記副シミュレーションエンジンを呼び出すことを特徴とする請求項3に記載の方法。
  7. 前記同期点が、前記HDLの前記実行モデルによって定義されたキュー評価の前にあることを特徴とする請求項6に記載の方法。
  8. 前記同期点が、前記HDLの実行モデルによって定義されたキュー評価の後にあることを特徴とする請求項6に記載の方法。
  9. 前記副シミュレーションエンジンモジュールにおける特定の変数を、前記主シミュレーションエンジンと通信するためのインタフェース変数として識別するステップをさらに含むことを特徴とする請求項6に記載の方法。
  10. 前記インタフェース変数の値を前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジンに格納するステップをさらに含むことを特徴とする請求項9に記載の方法。
  11. 前記同期点において前記副シミュレーションエンジンにおけるイベントを評価する前に、前記インタフェース変数の値を前記副シミュレーションエンジンに転送するステップをさらに含むことを特徴とする請求項9に記載の方法。
  12. 前記同期点において前記副シミュレーションエンジンにおけるイベントを評価した後に、前記インタフェース変数の値を前記主シミュレーションエンジンに転送するステップをさらに含むことを特徴とする請求項9に記載の方法。
  13. 副シミュレーションエンジンモジュールが、前記主シミュレーションエンジン内のスタブモジュールによって表現されることを特徴とする請求項12に記載の方法。
  14. ハードウェア記述言語(HDL)で記述された設計をシミュレートするための、コンピュータ実行可能命令を格納するコンピュータ可読媒体であって、前記命令が、コンピュータによって実行されたときに、
    シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンを含む統合型論理シミュレータを実行するステップと、
    前記シリアルシミュレーションエンジンを用いて一度に1つずつのシミュレーションを行うステップと、
    前記コンカレントシミュレーションエンジンを用いて複数の並行的なシミュレーションを行うステップと、
    前記HDLの実行モデルによって定義されるイベントのクラスに基づいて、前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジンの両シミュレーションを同期させるステップとを行うことを特徴とするコンピュータ可読媒体。
  15. 前記設計を、前記統合型論理シミュレータによって実行される2つのモジュール群に分割するステップをさらに含み、
    前記2つのモジュール群が、前記シリアルシミュレーションエンジンで評価するための第1のモジュール群と、前記コンカレントシミュレーションエンジンの評価で評価するための第2のモジュール群とを含むようにしたことを特徴とする請求項14に記載のコンピュータ可読媒体。
  16. 前記分割するステップを、前記設計の設計階層を考慮して行うようにしたことを特徴とする請求項15に記載のコンピュータ可読媒体。
  17. 前記コンカレントシミュレーションエンジンが、第1のモジュールをシミュレートするときに、該第1のモジュールの下位の前記設計階層内においてより深くインスタンス化された任意のサブモジュールも同様にシミュレートするようにしたことを特徴とする請求項16に記載のコンピュータ可読媒体。
  18. 第1のシミュレーションエンジンによってシミュレートされる第1のモジュールが、第2のモジュールをインスタンス化するとき、該第2のモジュールを第2のシミュレーションエンジンによってシミュレートし、
    前記第2のモジュールが、前記第1のシミュレーションエンジンによってシミュレートされる第3のモジュールをインスタンス化し、
    前記第1及び第2のシミュレーションエンジンがそれぞれ、(1)前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジン、または(2)前記コンカレントシミュレーションエンジン及び前記シリアルシミュレーションエンジン、のいずれかであるようにしたことを特徴とする請求項16に記載のコンピュータ可読媒体。
  19. 前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジンのうちの一方を前記統合型論理シミュレータの主シミュレーションエンジンに指定するステップと、
    前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジンのうちの他方を前記統合型論理シミュレータの副シミュレーションエンジンに指定するステップとをさらに含み、
    前記主シミュレーションエンジンが、同期点において前記副シミュレーションエンジンを呼び出すようにしたことを特徴とする請求項15に記載のコンピュータ可読媒体。
  20. 前記同期点が、前記HDLの前記実行モデルによって定義されたキュー評価の前にあるようにしたことを特徴とする請求項19に記載のコンピュータ可読媒体。
  21. 前記同期点が、前記HDLの実行モデルによって定義されたキュー評価の後にあるようにしたことを特徴とする請求項19に記載のコンピュータ可読媒体。
  22. 前記副シミュレーションエンジンモジュールにおける特定の変数を、前記主シミュレーションエンジンと通信するためのインタフェース変数として識別するステップをさらに含むようにしたことを特徴とする請求項19に記載のコンピュータ可読媒体。
  23. 前記実行モデルにおける前記同期点が、業界標準のアプリケーションプログラミングインタフェースを通して確立されるようにしたことを特徴とする請求項19に記載のコンピュータ可読媒体。
JP2012556263A 2010-03-04 2011-03-04 ハードウェア設計のコンカレント及びシリアル混在型論理シミュレーション Active JP5798132B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US33939110P 2010-03-04 2010-03-04
US61/339,391 2010-03-04
US13/031,139 2011-02-18
US13/031,139 US8738350B2 (en) 2010-03-04 2011-02-18 Mixed concurrent and serial logic simulation of hardware designs
PCT/US2011/027184 WO2011109707A2 (en) 2010-03-04 2011-03-04 Mixed concurrent and serial logic simulation of hardware designs

Publications (2)

Publication Number Publication Date
JP2013521583A true JP2013521583A (ja) 2013-06-10
JP5798132B2 JP5798132B2 (ja) 2015-10-21

Family

ID=44532066

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012556263A Active JP5798132B2 (ja) 2010-03-04 2011-03-04 ハードウェア設計のコンカレント及びシリアル混在型論理シミュレーション

Country Status (6)

Country Link
US (1) US8738350B2 (ja)
EP (1) EP2542969A4 (ja)
JP (1) JP5798132B2 (ja)
KR (1) KR101752943B1 (ja)
CN (1) CN102782651B (ja)
WO (1) WO2011109707A2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120117143A1 (en) * 2010-11-03 2012-05-10 Paul William Watkinson Computerized system and method for verifying computer operations
US9053264B2 (en) * 2011-03-16 2015-06-09 Synopsys, Inc. What-if simulation methods and systems
KR20140021389A (ko) * 2012-08-10 2014-02-20 한국전자통신연구원 모델 제작 및 실행 분리형 시뮬레이션 장치 및 그 방법
CN104657108B (zh) * 2015-02-15 2018-03-02 北京邮电大学 一种微处理器的软件模拟器的事件队列的管理方法及系统
US9852244B2 (en) * 2015-05-04 2017-12-26 Synopsys, Inc. Efficient waveform generation for emulation
US10387217B2 (en) 2017-02-15 2019-08-20 Ca, Inc. Distributed processing of mixed serial and concurrent workloads
US10755014B2 (en) * 2018-03-14 2020-08-25 Montana Systems Inc. Event-driven design simulation
WO2020139959A1 (en) * 2018-12-28 2020-07-02 Didi Research America, Llc Architecture for simulation of distributed systems
US11480964B2 (en) 2018-12-28 2022-10-25 Beijing Voyager Technology Co., Ltd. Distributed system execution using a serial timeline
WO2020139961A1 (en) 2018-12-28 2020-07-02 Didi Research America, Llc Distributed system task management using a simulated clock
US20220374260A1 (en) * 2021-05-21 2022-11-24 Samsung Electronics Co., Ltd. Systems, methods, and apparatus for coordinating computation systems

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10198707A (ja) * 1996-11-13 1998-07-31 Fujitsu Ltd 論理シミュレーション方法および装置並びに論理シミュレーションプログラムを格納した記憶媒体
JP2002175344A (ja) * 2000-10-17 2002-06-21 Nec Corp 電子回路と制御プログラムとのコバリデーション方法
JP2003330992A (ja) * 2002-04-18 2003-11-21 Internatl Business Mach Corp <Ibm> モデル・シミュレーション

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0830653A (ja) * 1994-07-19 1996-02-02 Hitachi Ltd 論理シミュレーション装置とその制御方法
US6263303B1 (en) * 1998-10-26 2001-07-17 Sony Corporation Simulator architecture
US6466898B1 (en) 1999-01-12 2002-10-15 Terence Chan Multithreaded, mixed hardware description languages logic simulation on engineering workstations
US6230114B1 (en) * 1999-10-29 2001-05-08 Vast Systems Technology Corporation Hardware and software co-simulation including executing an analyzed user program
AU1375401A (en) 1999-11-10 2001-06-06 Hyperchip Inc. System for performing parallel circuit simulation in a high level description language
US7319947B1 (en) * 1999-12-22 2008-01-15 Intel Corporation Method and apparatus for performing distributed simulation utilizing a simulation backplane
US7260517B2 (en) * 2001-06-17 2007-08-21 Brian Bailey Synchronization of multiple simulation domains in an EDA simulation environment
US7401015B1 (en) * 2001-06-17 2008-07-15 Brian Bailey Coherent state among multiple simulation models in an EDA simulation environment
US7110935B1 (en) * 2001-10-16 2006-09-19 Xilinx, Inc. Method and system for modeling and automatically generating an electronic design from a system level environment
EP1476828B1 (en) * 2002-02-22 2007-10-24 Neosera Systems Limited A method and a processor for parallel processing of logic event simulation
US7143369B1 (en) * 2003-03-14 2006-11-28 Xilinx, Inc. Design partitioning for co-stimulation
US20050138515A1 (en) 2003-11-05 2005-06-23 Hyduke Stanley M. Method and apparatus for co-verification of digital designs
US7698118B2 (en) * 2004-04-15 2010-04-13 Mentor Graphics Corporation Logic design modeling and interconnection
US8849644B2 (en) * 2007-12-20 2014-09-30 Mentor Graphics Corporation Parallel simulation using an ordered priority of event regions
US8121825B2 (en) * 2008-04-30 2012-02-21 Synopsys, Inc. Method and apparatus for executing a hardware simulation and verification solution
CN101533428A (zh) * 2009-04-30 2009-09-16 华北电力大学 一种电磁暂态离线非实时并行仿真系统及仿真方法
US8156457B2 (en) * 2009-09-24 2012-04-10 Synopsys, Inc. Concurrent simulation of hardware designs with behavioral characteristics

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10198707A (ja) * 1996-11-13 1998-07-31 Fujitsu Ltd 論理シミュレーション方法および装置並びに論理シミュレーションプログラムを格納した記憶媒体
JP2002175344A (ja) * 2000-10-17 2002-06-21 Nec Corp 電子回路と制御プログラムとのコバリデーション方法
JP2003330992A (ja) * 2002-04-18 2003-11-21 Internatl Business Mach Corp <Ibm> モデル・シミュレーション

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
川北 浩孝: "HDLとCによるリアルタイム・システムの設計▲1▼(概要編)", INTERFACE, vol. 第23巻, JPN6015002059, June 1997 (1997-06-01), JP, pages 76 - 81, ISSN: 0002988005 *

Also Published As

Publication number Publication date
EP2542969A4 (en) 2015-06-10
JP5798132B2 (ja) 2015-10-21
US8738350B2 (en) 2014-05-27
CN102782651B (zh) 2016-06-22
KR101752943B1 (ko) 2017-07-03
KR20130048204A (ko) 2013-05-09
WO2011109707A3 (en) 2011-12-22
CN102782651A (zh) 2012-11-14
US20110218792A1 (en) 2011-09-08
WO2011109707A2 (en) 2011-09-09
EP2542969A2 (en) 2013-01-09

Similar Documents

Publication Publication Date Title
JP5798132B2 (ja) ハードウェア設計のコンカレント及びシリアル混在型論理シミュレーション
US8468475B2 (en) Conversion of circuit description to an abstract model of the circuit
US8463587B2 (en) Hierarchical order ranked simulation of electronic circuits
KR20130081354A (ko) 분산 병렬 시뮬레이션에서의 통신 방법
US8650513B2 (en) Reducing x-pessimism in gate-level simulation and verification
TWI474203B (zh) 模擬電路的方法、積體電路、電腦系統及電腦程式產品
Rincon et al. Core design and system-on-a-chip integration
US7711534B2 (en) Method and system of design verification
TWI496018B (zh) 具功率管理電路積體電路之快速模擬方法
US20180336304A1 (en) Method for compression of emulation time line in presence of dynamic re-programming of clocks
US11327790B1 (en) Event-level parallel simulation using dynamic synchronization
CN103548026B (zh) 在rtl模拟中兑现多循环路径语义的方法和装置
US10521528B2 (en) Signal reconstruction in sequential logic circuitry
US10210294B1 (en) System and methods for simulating a circuit design
KR101328263B1 (ko) 체계적 점진적 구체화를 통한 전자시스템수준에서부터게이트수준까지의 검증 방법
KR20080096723A (ko) 가변적 동기/통신 방식에 의한 분산 병렬 시뮬레이션 방법
US8775987B1 (en) Generation of a replay module for simulation of a circuit design
Lapshin Ivanov Fabricación de Core RISC-V por medio de Herramientas Open-Source
KR20070108303A (ko) 체계적 점진적 구체화를 통한 전자시스템수준에서부터게이트수준까지의 검증 방법
Sweeney Hardware Design Methodologies Hardware Design Methodologies
Bappudi Example Modules for Hardware-software Co-design
Guo A survey of hardware design verification
Golshan ASIC Design Implementation Process

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140219

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150108

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150127

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150427

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150511

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150804

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150820

R150 Certificate of patent or registration of utility model

Ref document number: 5798132

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250