(57)【特許請求の範囲】
【請求項１】
第１のハードウェア記述言語（第１のＨＤＬ）で記載される少なくとも１つの構成要素と、前記第１のＨＤＬとは異なる第２のＨＤＬで記載される少なくとも１つのモジュールとを有する回路記述のシミュレーションコードを生成する方法であって、
少なくとも１つのプログラムされたプロセッサ上で動作を行なうことを含み、前記動作は、
前記回路記述を詳述することと、
シミュレーションのデータフローのグラフを生成することとを含み、前記生成することは、
第１のデータフロービルダーを用いて前記第１のＨＤＬで記載されるモジュールを通じてデータ経路をモデル化することと、
第２のデータフロービルダーを用いて前記第２のＨＤＬで記載されるモジュールを通じて前記データ経路をモデル化することとを含み、前記動作は、さらに、
前記データフローのグラフからシミュレーションコードを生成することを含み、前記生成されたコードは、前記回路記述に従って回路動作をシミュレートするように実行可能であり、
前記シミュレーションコードを生成することは、
前記第１のＨＤＬで記載されるモジュールから前記第２のＨＤＬで記載されるモジュールへ横断し、または前記第２のＨＤＬで記載されるモジュールから前記第１のＨＤＬで記載されるモジュールへ横断する各信号に対して、第１のメモリ位置で前記第１のＨＤＬと両立可能な第１の信号表現および第２のメモリ位置で前記第２のＨＤＬと両立可能な第２の信号表現を生成することと、
前記第１および第２の信号表現によって表わされる信号のモジュールによる修正に応答して、前記第１および第２のメモリ位置の両方を更新するように構成されるトランザクション関数を生成することとを含む、方法。
【請求項２】
前記第１および第２のＨＤＬで記載されるモジュールを通じて前記データ経路をモデル化することは、
データフローのネットを推測することと、
各モジュールのために処理を生成することと、
前記ネットのドライバを生成することと、
前記データフローのネットに対する各処理の感度を決定することとを含む、請求項１に記載の方法。
【請求項３】
前記第１のＨＤＬで記載されるモジュールを通じて前記データ経路をモデル化することは、
前記回路記述の第１のトラバースで前記第１のデータフロービルダーを用いて前記第１のＨＤＬで記載されるモジュールのデータフローのネットを推測することと、
前記回路記述の第２のトラバースにおいて、次のステップを行なうために第３のデータフロービルダーを用いることとを含み、当該ステップは、
前記第１のＨＤＬで記載される各モジュールの処理を生成することと、
前記第１のＨＤＬに関連する前記ネットのドライバを生成することと、
前記第１のＨＤＬで記載されるモジュールの処理の感度を決定することとを含む、請求項１に記載の方法。
【請求項４】
前記第２のＨＤＬで記載されるモジュールを通じて前記データ経路をモデル化することは、
前記回路記述の前記第１のトラバースにおいて、次のステップを行なうために前記第２のデータフロービルダーを用いることを含み、当該ステップは、
前記第２のＨＤＬで記載されるモジュールのデータフローのネットを推測することと、
前記第２のＨＤＬで記載される各モジュールの処理を生成することと、
前記第２のＨＤＬに関連する前記ネットのドライバを生成することと、
前記第２のＨＤＬで記載されるモジュールの処理の感度を決定することとを含み、前記モデル化することは、さらに、
前記第２のＨＤＬで記載されるモジュールの浅いトラバースを行なうために第４のデータフロービルダーを用いることを含む、請求項３に記載の方法。
【請求項５】
前記回路記述の前記第２のトラバースは、前記回路記述のインスタンス化ステートメントのみをトラバースする、請求項４に記載の方法。
【請求項６】
前記トランザクション関数は、前記第１および第２の信号表現によって表わされる信号が修正されるシミュレーションの間に１デルタ周期で更新動作を完了するように構成される、請求項１に記載の方法。
【請求項７】
プロセッサが実行可能な命令が記憶された持続的でプロセッサ読取可能な記憶媒体であって、プロセッサによって実行されたときの命令は、プロセッサに次のステップを実行させ、当該ステップは、
第１のハードウェア記述言語（第１のＨＤＬ）で記載される少なくとも１つのモジュールと、前記第１のＨＤＬとは異なる第２のＨＤＬで記載される少なくとも１つのモジュールとを有する回路記述を詳述することと、
シミュレーションのデータフローのグラフを生成することとを含み、前記生成することは、
第１のデータフロービルダーを用いて前記第１のＨＤＬで記載されるモジュールを通じてデータ経路をモデル化することと、
第２のデータフロービルダーを用いて前記第２のＨＤＬで記載されるモジュールを通じて前記データ経路をモデル化することとを含み、前記ステップは、さらに、
前記データフローのグラフからシミュレーションコードを生成することを含み、前記生成されたコードは、前記回路記述に従って回路動作をシミュレートするように実行可能
であり、
前記シミュレーションコードを生成することは、
前記第１のＨＤＬで記載されるモジュールから前記第２のＨＤＬで記載されるモジュールへ横断し、または前記第２のＨＤＬで記載されるモジュールから前記第１のＨＤＬで記載されるモジュールへ横断する各信号に対して、第１のメモリ位置で前記第１のＨＤＬと両立可能な第１の信号表現および第２のメモリ位置で前記第２のＨＤＬと両立可能な第２の信号表現を生成することと、
前記第１および第２の信号表現によって表わされる信号のモジュールによる修正に応答して、前記第１および第２のメモリ位置の両方を更新するように構成されるトランザクション関数を生成することとを含む、記憶媒体。
【請求項８】
前記第１および第２のＨＤＬの少なくとも１つで記載されるモジュールを通じて前記データ経路をモデル化することは、
データフローのネットを推測することと、
各モジュールのために処理を生成することと、
前記ネットのドライバを生成することと、
前記データフローのネットに対する各処理の感度を決定することとを含む、請求項７に記載の記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
１以上の実施例は、一般に、回路設計のシミュレーションに関する。
【背景技術】
【０００２】
背景
加工技術の進歩により、種々のレベルの抽出を用いて複雑な集積回路（ＩＣ）を設計できる。ハードウェア記述言語（ＨＤＬ）を用いて、回路はゲートレベル、レジスタ転送レベル（ＲＴＬ）およびより高い論理レベルで設計することができる。ＨＤＬを用いて設計する場合、設計は大抵モジュール方式で構成される。設計者は、システムの挙動の観点からモジュールを記述し、当該挙動は、レジスタの１つの組からレジスタの他の組への組合せモジュールを通じて信号の生成および伝搬を記述する。ＨＤＬは、モジュールの機能を記述するために多くの組の構成を与える。モジュールは、より高いレベルのモジュールを形成するために、組合されたり増大されたりしてもよい。
【０００３】
設計費用を減らすため、設計者は、企業内または商業的供給者から与えられる以前創作された設計をよく埋め込む。以前開発された論理ブロックのライブラリは、回路設計において選択され含めることができるように発達している。そのようなライブラリモジュールは、たとえば、加算器、乗算器、フィルタ、および他の算術およびデジタル信号処理（ＤＳＰ）機能を含み、そこからシステム設計を容易に構成することができる。技術者団体は時に、これらの以前に創作された設計を「ＩＰコア」（知的財産コア）または「論理コア」と呼び、そのような用語をここでは互換可能に用い得る。以前開発された論理コアの使用により回路の再設計が削減され、より早い設計周期を可能にする。このように、ライブラリからコアを用いることで、設計費用を低減することができる。
【０００４】
実施の前に設計が要求された通りに機能するかを決定するために、ＨＤＬ設計をシミュレートできる。欠陥設計による無駄な製造費用は、これによって避けられ得る。たとえば高レベルモデル化システム（ＨＬＭＳ）およびＨＤＬシミュレータを含む、回路設計をシミュレートするために、数多くのツールが利用可能である。
【０００５】
設計コードのオブジェクト指向された再使用のため、ＨＤＬ設計は、異なるＨＤＬで書かれたモジュールをよく含む。２つの共通に使用されるＨＤＬは、ＶＨＤＬ（ＶＨＳＩＣ（超高速集積回路）ハードウェア記述言語）およびヴェリログ（Verilog）である。２つ以上のＨＤＬを利用するＨＤＬ仕様は、混合言語設計とも呼ばれる。１言語で定義されるモジュールは、サブモジュールとしていずれかの言語の他のモジュールを含み、インスタンス階層の深さまたは設計階層が言語タイプを切り替える回数に制限はない。モジュールインスタンスでポートとして使用される信号は、言語境界も乗り越えることができ、設計によって縛られるもの以外に制限はない。説明の簡単化のため、例および実施例は主として混合言語を用いて記述され、設計の各モジュールは、ヴェリログまたはＶＨＤＬ言語のいずれかで記述される。ここで使用される際、ＶＨＤＬの構成要素およびヴェリログのモジュールは通常、モジュールと称する。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
異なるＨＤＬの異なるフォーマットおよび能力により、混合言語設計は、効率的にシミュレートするのが困難となり得る。混合言語シミュレーションの１つの解決法として、モジュール単位ごとのコード生成（つまり、コンパイルされたコードシミュレーションを有効にするためのＨＤＬからの実行可能な／アセンブリ／オブジェクトコード生成）を実行する。コード生成の間、ヴェリログモジュールおよびＶＨＤＬモジュールの各々がインスタンス化されるように、特有の表現が生成される。これらのモジュールを基礎とした表現は、実行時間に読み込まれ、シミュレーションを行なうのに用いられる。そのようなモデルにおいて、ヴェリログモジュールおよびＶＨＤＬモジュールの間の信号を変換し伝搬するためのポート接続は、シミュレーション実行時間の間に構成され、シミュレーション稼働負荷を増大させ得る新しい信号をよく生成する。信号を言語境界を越えて伝搬させるデータ型変換および複雑なポート接続を扱うために、信号を適切にマッピングし変換するための付加的かつ黙示的なＨＤＬ処理が必要とされる。信号の伝搬および付加的なＨＤＬ処理を扱うことの組合せ効果により、シミュレーションの複雑さおよびメモリ要求が増し、シミュレーション実行時間の効率を低減させる。
【課題を解決するための手段】
【０００７】
概要
一実施例では、第１および第２のＨＤＬの組合せで記載される少なくとも１つのモジュールを有する回路記述のシミュレーションコードを生成する方法が与えられる。回路記述が詳述され、回路記述のシミュレーションのデータフローのグラフが生成される。シミュレーションのデータフローのグラフは、少なくとも第１のデータフロービルダーを用いて第１のＨＤＬのモジュールを通じてデータ経路をモデル化することと、少なくとも第２のデータフロービルダーを用いて第２のＨＤＬのモジュールを通じてデータ経路をモデル化することとによって生成される。シミュレーションコードは、シミュレーションのデータフローのグラフに従って設計の実行をモデル化するように構成され、データフローのグラフから生成される。
【０００８】
いくつかの実施例では、第１および第２のＨＤＬで記載されるモジュールを通じてデータ経路をモデル化することは、データフローのネットを推測することと、各モジュールのために処理を生成することと、ネットのドライバを生成することと、データフローのネットに対する各処理の感度を決定することとを含む。
【０００９】
いくつかの実施例では、第１のＨＤＬで記載されるモジュールを通じてデータ経路をモデル化することは、回路記述の第１のトラバースで第１のデータフロービルダーを用いて第１のＨＤＬで記載されるモジュールのデータフローのネットを推測することと、回路記述の第２のトラバースにおいて、次のステップを行なうために第３のデータフロービルダーを用いることとを含む。当該ステップは、第１のＨＤＬで記載される各モジュールの処理を生成することと、第１のＨＤＬに関連するネットのドライバを生成することと、第１のＨＤＬで記載されるモジュールの処理の感度を決定することとを含み得る。
【００１０】
いくつかの実施例では、第２のＨＤＬで記載されるモジュールを通じてデータ経路をモデル化することは、回路記述の第１のトラバースにおいて、次のステップを行なうために第２のデータフロービルダーを用いることと、第２のＨＤＬで記載されるモジュールの浅いトラバースを行なうために第４のデータフロービルダーを用いることを含む。上記ステップは、第２のＨＤＬで記載されるモジュールのデータフローのネットを推測することと、第２のＨＤＬで記載される各モジュールの処理を生成することと、第２のＨＤＬに関連するネットのドライバを生成することと、第２のＨＤＬで記載されるモジュールの処理の感度を決定することとを含み得る。
【００１１】
いくつかの実施例では、回路記述の第２のトラバースは、回路記述のインスタンス化ステートメントのみをトラバースする。
【００１２】
いくつかの実施例においては、第１のＨＤＬはヴェリログで、第２のＨＤＬはＶＨＤＬである。
【００１３】
いくつかの実施例では、回路記述のシミュレーションコードを生成する方法は、さらに、第１のＤＨＬと両立可能な形式を有する第１のＨＤＬ信号表現を生成することと、第２のＤＨＬと両立可能な形式を有する第２のＨＤＬ信号表現を生成することと、シミュレーションのデータフローのグラフにおいて言語境界間で回路記述の各インスタンス化されたモジュールに対し、インスタンス化されたモジュールのポートを第１のＨＤＬ信号表現にマッピングすることと、インスタンス化されたモジュールのポートを第２のＨＤＬ信号表現にマッピングすることとを含む。
【００１４】
いくつかの実施例では、シミュレーションコードを生成することは、第１および第２のトランザクション関数を生成することを含む。第１のトランザクション関数は、シミュレーションの間に第１のＨＤＬ信号表現の値での変化に応答して、次の動作をするように構成される。当該動作は、第１のＨＤＬ信号表現を第２のＨＤＬ信号表現の形式の第１の変換された値に変換することと、第２のＨＤＬ信号表現を第１の変換された値で更新することとを含む。第１のトランザクション関数は、シミュレーションの間に第２のＨＤＬ信号表現の値での変化に応答して、次の動作をするように構成される。当該動作は、第２のＨＤＬ信号表現を第１のＨＤＬ信号表現の形式の第２の変換された値に変換することと、第２のＨＤＬ信号表現を第２の変換された値で更新することとを含む。
【００１５】
いくつかの実施例では、第１の信号表現は、第１のＨＤＬと両立可能な形式で第１のメモリ位置に記憶され、第２の信号表現は、第２のＨＤＬと両立可能な形式で第２のメモリ位置に記憶される。
【００１６】
いくつかの実施例では、第１のトランザクション関数は、第１のＨＤＬ信号表現の値が変化するシミュレーションの間にデルタ周期で変換および更新の動作を完了するように構成され、第２のトランザクション関数は、第２のＨＤＬ信号表現の値が変化するシミュレーションの間にデルタ周期で変換および更新の動作を完了するように構成される。
【００１７】
他の実施例では、第１および第２のＨＤＬの組合せで記載される回路設計のシミュレーションコードを生成するための方法が与えられる。回路記述が詳述され、回路記述のシミュレーションのデータフローのグラフが生成される。シミュレーションコードは、シミュレーションのデータフローのグラフに従って設計の実行をモデル化するように構成され、データフローのグラフから生成される。シミュレーションコードは、第１のＤＨＬと両立可能な形式を有する第１のＨＤＬ信号表現と、第２のＤＨＬと両立可能な形式を有する第２のＨＤＬ信号表現とを用いる。シミュレーションのデータフローのグラフにおいて言語境界間で回路記述の各インスタンス化されたモジュールに対し、インスタンス化されたモジュールのポートは、第１のＨＤＬ信号表現にマッピングされるとともに、第２のＨＤＬ信号表現にマッピングされる。
【００１８】
いくつかの実施例では、シミュレーションコードを生成することは、さらに、シミュレーションの間に第１のＨＤＬ信号表現の値での変化に応答して、次の動作をするように構成される第１のトランザクション関数を生成することを含み、当該動作は、第１のＨＤＬ信号表現を第２のＨＤＬ信号表現の形式の第１の変換された値に変換することと、第２のＨＤＬ信号表現を第１の変換された値で更新することとを含む。シミュレーションコードを生成することは、さらに、シミュレーションの間に第２のＨＤＬ信号表現の値での変化に応答して、次の動作をするように構成される第２のトランザクション関数を生成することを含み、当該動作は、第２のＨＤＬ信号表現を第１のＨＤＬ信号表現の形式の第２の変換された値に変換することと、第２のＨＤＬ信号表現を第２の変換された値で更新することとを含む。
【００１９】
いくつかの実施例では、第１および第２のトランザクション関数は、第１のＨＤＬと両立可能な形式で第１のメモリ位置に第１の信号表現を記憶し、第２のＨＤＬと両立可能な形式で第２のメモリ位置に第２の信号表現を記憶するように構成される。
【００２０】
いくつかの実施例では、第１のトランザクション関数は、第１のＨＤＬ信号表現の値が変化するシミュレーションの間にデルタ周期で変換を完了し動作を更新するように構成され、第２のトランザクション関数は、第２のＨＤＬ信号表現の値が変化するシミュレーションの間にデルタ周期で変換を完了し動作を更新するように構成される。
【００２１】
いくつかの実施例では、回路記述のシミュレーションのデータフローのグラフを生成することは、第１のデータフロービルダーを用いて第１のＨＤＬで記載されるモジュールを通じてデータ経路をモデル化することと、第２のデータフロービルダーを用いて第２のＨＤＬで記載されるモジュールを通じてデータ経路をモデル化することとを含む。
【００２２】
いくつかの実施例では、第１のＨＤＬで記載されるモジュールを通じてデータ経路をモデル化することは、回路記述の第１のトラバースで第１のデータフロービルダーを用いて第１のＨＤＬで記載されるモジュールのデータフローのネットを推測することと、回路記述の第２のトラバースにおいて、次のステップを行なうために第３のデータフロービルダーを用いることとを含む。当該ステップは、第１のＨＤＬで記載される各モジュールの処理を生成することと、第１のＨＤＬに関連するネットのドライバを生成することと、第１のＨＤＬで記載されるモジュールの処理の感度を決定することとを含む。
【００２３】
いくつかの実施例では、第２のＨＤＬで記載されるモジュールを通じてデータ経路をモデル化することは、回路記述の第１のトラバースにおいて、次のステップを行なうために第２のデータフロービルダーを用いることと、第２のＨＤＬで記載されるモジュールの浅いトラバースを行なうために第４のデータフロービルダーを用いることとを含む。上記ステップは、第２のＨＤＬで記載されるモジュールのデータフローのネットを推測することと、第２のＨＤＬで記載される各モジュールの処理を生成することと、第２のＨＤＬに関連するネットのドライバを生成することと、第２のＨＤＬで記載されるモジュールの処理の感度を決定することとを含む。
【００２４】
いくつかの実施例では、回路記述の第２のトラバースは、回路記述のインスタンス化ステートメントのみをトラバースする。
【００２５】
さらに他の実施例では、製造の品目が与えられる。当該品目は、回路記述を処理するためにプロセッサが実行可能な命令で構成される持続的でプロセッサ読取可能な記憶媒体によって特徴づけられる。命令がプロセッサによって実行されるとき、命令はプロセッサに回路記述を詳述させるとともに、回路記述のシミュレーションのデータフローのグラフを生成させる。シミュレーションのデータフローのグラフは、少なくとも第１のデータフロービルダーを用いて第１のＨＤＬのモジュールを通じてデータ経路をモデル化すること、および、少なくとも第２のデータフロービルダーを用いて第２のＨＤＬのモジュールを通じてデータ経路をモデル化することによって生成される。第１のＨＤＬのモジュールを通じたデータ経路は、回路記述の２つのトラバースでデータフロービルダーを用いてモデル化される。回路記述の第１のトラバースでは、第１のＨＤＬのモジュールのデータフローのネットは、回路記述の第１のトラバースで第１のデータフロービルダーを用いて推測される。回路記述の第２のトラバースでは、処理が第１のＨＤＬの各モジュールに対して生成され、第１のＨＤＬのネットのドライバが生成され、第１のＨＤＬのモジュールの処理の感度が決定される。いったんデータフローのグラフが生成されると、シミュレーションのデータフローのグラフに従って設計の実行をモデル化するように構成されるシミュレーションコードが生成される。
【００２６】
いくつかの実施例では、第２のＨＤＬで記載されるモジュールを通じてデータ経路をモデル化することは、次のステップを行なうために回路記述の第１のトラバースで第２のデータフロービルダーを用いることと、第２のＨＤＬで記載されるモジュールの浅いトラバースを行なうために第４のデータフロービルダーを用いることとを含む。当該ステップは、第２のＨＤＬで記載されるモジュールのデータフローのネットを推測することと、第２のＨＤＬで記載される各モジュールのために処理を生成することと、第２のＨＤＬと関連するネットのドライバを生成することと、第２のＨＤＬのモジュールで記載される処理の感度を決定することとを含む。
【００２７】
種々の他の実施例は、続く詳細な説明および特許請求の範囲において説明されることが分かるだろう。
【００２８】
様々な局面および有利な点は、次の詳細な説明を考察し、以下の図面を参照することによって明らかとなる。
【図面の簡単な説明】
【００２９】
【図１】混合言語回路記述の階層の一例を示す。
【図２】図１に示される混合言語回路記述のモジュール間の信号伝搬を表わす。
【図３】シミュレーションの間に言語境界間で信号を効率的に変換するために、コンパイルの間に事前に構成され得るトランザクション関数の実施の一例のフロー図を示す。
【図４】混合言語回路記述をコンパイルするための処理の一例のフロー図を示す。
【図５】そこに記載された処理および関数を実行するために構成され得るコンピュータ構造を示す。
【発明を実施するための形態】
【００３０】
詳細な説明
データフローのモデル化は、ＨＤＬの設計をシミュレートするのに効率的な方法を与える。データフローモデルにおいて、レジスタおよび方法の間のデータフローの観点から回路がモデル化され、当該方法で設計は個々のゲートのインスタンス化よりもむしろデータを処理する。データフローのシミュレータは、シミュレーションコードがデータ（つまり、ＨＤＬモジュールの内部およびＨＤＬモジュールに沿って流れる信号）に続く方法で実行される点で特徴付けられる。この特性を満足させる一方でデータ生成を最適化するために、単一言語シミュレータは通常、新たにインスタンス化されたモジュールのための新たな信号データ構造を生成することなしに、インスタンス化を介してモジュール間で信号を伝搬する。シミュレータは、インスタンス化するモジュールからのデータ構造を再使用する。しかしながら、異なるＨＤＬに基づいてモジュール間で信号が横断するとき、２つのモデルの信号データ構造は両立可能でない。以前の混合言語シミュレータは通常、異なるＨＤＬタイプのモジュールがインスタンス化されたときに信号の変換および伝搬を扱うために、新たな信号および実行時間ヘルパー処理を生成することによってこの問題に対処する。これらの新たな信号および実行時間処理の結果、シミュレータの稼働負荷およびメモリ要求が増大する。
【００３１】
一以上の実施例は、混合言語のデータフローシミュレーションのための効率的な実行時間コードを生成するための方法を与え、それにより、シミュレータの稼働負荷およびメモリ要求が低減される。コンパイルの間、信号表現の数を最小化させる方法でデータフロー表現が生成され、ＨＤＬの言語境界に沿った信号の変換が事前に構成される。混合言語仕様の言語境界に沿って信号の伝搬を扱うために、実行時間で生成されるのにいかなる付加的な処理も要求されない。代わりに、言語境界に沿った信号伝搬の固有の複雑性は、信号のデータフローを生成しシミュレーションコードを生成する局面の間のコンパイル時間で扱われる。その結果、非常に改善された実行時間の動作およびメモリ占有面積を伴った混合言語シミュレータとなる。
【００３２】
図１は、混合言語回路記述の一例を示す。この例において、ＨＤＬ仕様は、トップレベルのＶＨＤＬモジュールＶｈ１（１０２）を含む。Ｖｈ１モジュールは、ヴェリログモジュールＶｅｒ２（１０４）をインスタンス化する。ヴェリログモジュールは、ＶＨＤＬモジュールＶｈ３（１０６）およびヴェリログモジュールＶｅｒ４（１０８）をインスタンス化する。Ｖｈ３モジュールはさらに、ヴェリログモジュールＶｅｒ５（１１０）をインスタンス化する。この例でのＨＤＬ設計階層の深さは、説明の簡単化のため４つのレベルに制限されている。実際には、モジュールをインスタンス化するときに信号が言語境界を横断する回数を制限するＨＤＬの設計規則はない。その結果、大きなＨＤＬ設計は、何回も境界を横断して、何回も信号変換を要求し得る。
【００３３】
一以上の実施例では、言語境界を横断する各信号のために１つのヴェリログ表現および１つのＶＨＤＬ表現を生成することによって、混合言語のデータフローシミュレータで言語境界を横切る信号伝搬のためのシミュレータ効率を改善する。コンパイル時間では、信号のヴェリログ表現は、単一言語のヴェリログシミュレータにあるため、ヴェリログの活性なデータフロービルダーによって生成される。また、信号のＶＨＤＬ表現は、単一言語のＶＨＤＬシミュレータにあるため、ＶＨＤＬの活性なデータフロービルダーによって生成される。もし信号が言語境界を複数回横断すれば、対応するＨＤＬのために前もって生成された表現が用いられる。データフロー信号を再使用することにより、ポートのための信号生成が混合言語シミュレータにおいて最適化される。
【００３４】
コード生成局面の間、シミュレーションの間に混合言語信号のＶＨＤＬ部分およびヴェリログ部分の更新を制御するためにトランザクション関数が生成され得る。トランザクション関数は、この信号に敏感なＶＨＤＬ処理およびヴェリログ処理をウェイクアップし／スケジュールするように構成される。この構造により、コンパイラは各混合言語信号のための最小量のデータを構築することが確実になる。これにより、実行時間に処理されることが要求される信号符号化データの量が低減される。
【００３５】
図２は、図１に示される混合言語回路記述のモジュール間の信号伝搬を表わす。この例において、２つの信号表現Ｖｈｓｉｇ２２０およびＶｅｒｓｉｇ２２２は、モジュール２０２、２０４、２０６、２０８および２１０を通じて信号のデータフローを表わすのに用いられる。ＶＨＤＬモジュールは、Ｖｈｓｉｇ２２０の信号表現を用いてシミュレートされ、ヴェリログモジュールは、Ｖｅｒｓｉｇ２２２の信号表現を用いてシミュレートされる。ＶＨＤＬポートは、コンパイルの間ヴェリログ信号にマッピングされる。コンパイルの間に生成されるトランザクション関数は、他方での充電に応答して信号表現の１つを更新するように構成される。
【００３６】
たとえば、シミュレーションの間、Ｖｈｓｉｇ２２０は、ＶＨＤＬモジュールＶｈ１ ２０２によって生成される信号を表わすのに用いられる。ＶＨＤＬモジュール２０２は、信号Ｖｈｓｉｇ２２０を用いてシミュレートされ、ヴェリログモジュールＶｅｒ２ ２０４、Ｖｅｒ４ ２０８およびＶｅｒ５ ２１０は、ヴェリログ信号表現Ｖｅｒｓｉｇ２２２を用いてそれらの各信号に対してシミュレートされる。ＶｈｓｉｇがＶｈ１ ２０２のシミュレーションに続いて更新されたとき、トランザクション関数はＶｅｒｓｉｇ２２２も更新する。明確のため、Ｖｈｓｉｇ２２０のような信号は、入力信号に加えて、出力信号、入出力信号またはモジュールにおいて局所的に宣言された信号を表わすようにも用いられ得る。
【００３７】
混合言語シミュレーションにおいて、言語境界を横切って用いられる信号の変化は、当該信号に接近するすべてのヴェリログモジュールおよびＶＨＤＬモジュールに伝搬されなければならない。ヴェリログ側で生じるそのような信号の変化は、ＶＨＤＬ側でただちに利用可能であるべきであり、ＶＨＤＬ側での信号に対する変化は、ヴェリログ側でただちに見えるようにすべきである。
【００３８】
一以上の実施例は、言語境界を横切って通過する各信号に対する２つのメモリ位置、１つはヴェリログ型の位置、もう１つはＶＨＤＬ型の位置、を保持することによって、この問題に対処している。実行時間において、ヴェリログモジュールが信号のヴェリログ表現を修正するとき、ヴェリログ型のメモリ位置に変化が書き込まれる。同じデルタ周期、すなわち、信号のヴェリログ表現が伝搬される同じモデル化された時間周期において、トランザクション関数はヴェリログ値をＶＨＤＬ値に変換し、変換された値を信号のＶＨＤＬ型の位置に書き込む。同様に、ＶＨＤＬモジュールが実行時間に信号を変化させるとき、当該変化はＶＨＤＬ型のメモリ位置に書き込まれ、変換されて、当該信号に関係するヴェリログ型の位置に記憶される。これは、ヴェリログモジュールが実行されたとき、シミュレータは信号の最も最近の値を用い、値の変化を確認するためにそれを前の値と比較可能であることを確実にする。同様に、ＶＨＤＬモジュールが実行されたとき、単一の言語ＶＨＤＬフローにあるため、信号の最新のＶＨＤＬ値が容易に利用可能である。トランザクション関数は各信号対を変換し更新するように構成されるので、信号がヴェリログモジュール内にある間に信号が実行時間でアクセスされるとき、シミュレータは混合言語信号の説明を要求されない。
【００３９】
図３は、シミュレーションの間に言語境界間で信号表現を効率的に変換するために、コンパイルの間に生成され構成され得るトランザクション関数によって実施される処理の一例のフロー図を示す。ＶＨＤＬ信号はブロック３０２および３０４でモニターされ、信号Ｖｈｓｉｇへの修正に応答して、トランザクション関数は、ブロック３０６でＶＨＤＬ形式のメモリ位置にＶｈｓｉｇの値を書き込むように構成される。ブロック３０８では、トランザクション関数は、コンパイルの間に決定された変換を用いてＶｈｓｉｇをヴェリログ形式に変換する。変換された値は、ブロック３１０においてヴェリログ形式のメモリ位置に記憶される。当該値がブロック３０６および３１０でメモリに書き込まれた後、トランザクション関数は、ブロック３１２でＶｈｓｉｇまたはＶｅｒｓｉｇのいずれかに敏感であることから、データフローのグラフによって示される処理の行使を開始する。
【００４０】
同様に、ヴェリログ信号Ｖｅｒｓｉｇは、ブロック３２２および３２４でモニターされる。Ｖｅｒｓｉｇ信号への修正に応答して、トランザクション関数は、ブロック３２６においてＶｅｒｓｉｇの値をヴェリログ形式のメモリ位置に書き込むように構成される。ブロック３２８では、トランザクション関数は、コンパイルの間に決定された変換を用いてＶｅｒｓｉｇをＶＨＤＬ形式に変換する。変換された値は、ブロック３３０においてＶＨＤＬ形式のメモリ位置に記憶される。当該値がブロック３２６および３３０でメモリに書き込まれた後、トランザクション関数は、ブロック３３２でＶｈｓｉｇまたはＶｅｒｓｉｇのいずれかに敏感であることから、データフローのグラフによって示される処理の行使を開始する。
【００４１】
一以上の実施例において、十分に精緻な混合言語設計のデータフロー表現は、十分に精緻な混合言語設計の各モジュールのために、ネットを推測し、処理を生成し、ネットのドライバーを生成し、感度を決定するための単一言語のヴェリログおよびＶＨＤＬのデータフロービルダーを用いることによって生成され得る。データフローのグラフは、ＶＨＤＬビルダーを用いてＶＨＤＬモジュールを通じておよびヴェリログデータフロービルダーを用いてヴェリログモジュールを通じて、設計をトラバースし、信号のデータフローをモデル化することにより、混合言語のＨＤＬ仕様のために生成され得る。
【００４２】
モジュール間参照の付加的な固有の複雑さにより、ヴェリログのデータフロー中心のシミュレータは、設計のトップダウンを２度トラバースする必要がある。各トラバースは、個別のデータフロービルダーを用いて実現され、それゆえ、ヴェリログのデータフロー中心のシミュレータは、ヴェリログモジュールを通じてデータフローを決定するために２つのデータフロービルダーを用いる。
【００４３】
一以上の実施例は、４つのデータフロービルダーを用いて混合言語のデータフローモデルを生成する。２つのデータビルダーは、設計のＶＨＤＬモジュールを処理し、他の２つのデータビルダーは、設計のヴェリログモジュールを処理する。混合言語設計のヴェリログ部分はヴェリログシミュレーションのデータフロービルダーによって処理され、混合言語設計のＶＨＤＬ部分はＶＨＤＬシミュレーションのデータフロービルダーによって処理されなければならないため、混合言語シミュレータは、少なくとも３つのデータフロービルダー、２つのヴェリログビルダーおよび１つのＶＨＤＬビルダー、を必要とする。２つのヴェリログビルダーは、情報の分離を保存するために必要とされる。設計がトラバースされるため、ＶＨＤＬビルダーは設計のＶＨＤＬ部分をトラバースするのに用いられ、ヴェリログビルダーは設計のヴェリログ部分をトラバースするのに用いられる。このように、設計の全トラバースは、少なくとも１つのＶＨＤＬビルダーおよび少なくとも１つのヴェリログビルダーを利用する。
【００４４】
設計階層のヴェリログ部分の２つのトラバースが必要とされることから、設計階層のＶＨＤＬ部分をトラバースするのに第２のＶＨＤＬビルダーが必要とされる。その結果、混合言語のデータフローグラフは、設計の２つのトラバースにおいて２つのＶＨＤＬビルダーおよび２つのヴェリログビルダーを用いて生成することができる。第１および第２のＶＨＤＬデータフロービルダーのみならず第１および第２のヴェリログデータフロービルダーを実施するために同じコードが用いられ得る。しかしながら、これらは、それらの間に情報の共有がない点でまとまりのない構造である。実際に、第１のヴェリログデータフロービルダーは、第２のヴェリログデータフロービルダーを生成する前に消去され得る。
【００４５】
設計がトラバースされるとき、各インスタンス化されたモジュールのＨＤＬ型に基づいて、適当なＶＨＤＬまたはヴェリログのデータフロービルダーが選択される。たとえば、もし最上位のモジュールがＶＨＤＬ言語で書きこまれた場合、ＶＨＤＬのデータフロービルダーは、ヴェリログモジュールがインスタンス化されるまでＨＤＬ設計階層のトップダウンをトラバースするために生成され用いられる。ヴェリログモジュールとの遭遇に応答して、ヴェリログのデータフロービルダーは、ヴェリログモジュールの下で設計階層のトラバースを継続するために生成され用いられる。ヴェリログモジュールがＶＨＤＬモジュールをインスタンス化するまで、ヴェリログのデータフロービルダーを用いて設計がトラバースされる。そのとき、前回生成されたＶＨＤＬのデータフロービルダーは、ＶＨＤＬモジュールの下でＶＨＤＬ階層をトラバースするために用いられ得る。他のヴェリログモジュールのインスタンス化に遭遇するまで、ＶＨＤＬのデータフロービルダーを用いてトラバースが継続する。ヴェリログモジュールとの遭遇に応答して、前回生成されたヴェリログのデータフロービルダーは、階層のトラバースを継続するために用いられる。ＶＨＤＬのデータフロービルダーおよびヴェリログのデータフロービルダーの間を必要な回数だけ制御により切り替える。このトラバースの間、ＶＨＤＬのデータフロービルダーは、ネットを推測すること、シミュレーションでモジュールのステートメントを実行するための処理を生成すること、各モジュールによって修正される信号を有するネットのドライバーを生成すること、および、推測されるデータフローネットの生成される処理信号の各々の感度を決定することを含む、処理されるＶＨＤＬモジュールの各々に対して多くのタスクを実行する。ヴェリログモジュールの各々に対して、ヴェリログのデータフロービルダーは、データフローのネットを推測するのに用いられる。上述したように、モジュール間参照の固有の複雑さにより、処理およびネットドライバを生成し、各ヴェリログモジュールのためのネットの感度を決定するために、第２のトラバースが必要とされる。
【００４６】
いったん階層設計の第１のトラバースが完了すると、第２のＶＨＤＬのデータフロービルダーが生成され、最上位レベルのＶＨＤＬモジュールから始まる設計階層のトップダウンの浅いトラバースのために用いられ得る。浅いトラバースは、ＶＨＤＬ処理、信号割り当ておよびデクラレーションが処理されない設計トラバースに関する。浅いトラバースにおいて、インスタンス化ステートメントは、ヴェリログモジュールのインスタンス化に遭遇するまで識別され解析される。ヴェリログモジュールのインスタンス化への遭遇に応答して、第２のヴェリログのデータフロービルダーは、このインスタンス化されたモジュールの下、ヴェリログの階層設計をトラバースするために生成され用いられる。
【００４７】
この第２のトラバースの間、第２のヴェリログのデータフロービルダーは、モジュールのプロセスを生成すること、ネットのドライバを生成すること、および、データフローのネットへの各処理の感度を決定することを含む、処理されるヴェリログモジュールの各々に対して多くのタスクを実行する。第１のトラバースのように、設計階層がトラバースされたとき、言語境界間において第２のヴェリログおよびＶＨＤＬのデータフロービルダーの間を制御スイッチが行き来する。
【００４８】
図４は、混合言語回路記述をコンパイルするための処理の一例のフロー図を示す。回路記述がブロック４０１に詳述される。混合言語ＨＤＬ記述のデータフロー図表は、ブロック４３０に示される処理の例において生成される。ＶＨＤＬのデータフロービルダーおよびヴェリログのデータフロービルダーは、ブロック４０２において生成される。ＶＨＤＬ信号Ｖｈｓｉｇおよびヴェリログ信号Ｖｅｒｓｉｇは、ブロック４０４において生成される。この例では、信号表現およびデータフロービルダーは、混合言語設計をトラバースする前に生成される。いくつかの実施例では、第１のＨＤＬのモジュールに遭遇したとき、第１の信号表現およびデータフロービルダーが生成される。異なるＤＨＬのモジュールに遭遇した場合、第２の信号表現およびデータフロービルダーが生成される。
【００４９】
十分に精緻な設計の第１のトラバースは、ブロック４０６において開始される。第１のトラバースの間に決定ステップ４０８で遭遇される各ヴェリログブロックに対し、第１のヴェリログのデータフロービルダーは、ブロック４１０において第１の組のデータフロー問題を解決するのに用いられる。上述したように、第１のデータフロービルダーは、Ｖｅｒｓｉｇ信号のデータフローのネットを推測するのに用いられる。第１のトラバースの間の決定ステップ４０８で遭遇される各ＶＨＤＬブロックに対し、第１のＶＨＤＬデータフロービルダーは、ブロック４１２においてＶｈｓｉｇ信号表現のデータフローをマッピングするのに用いられる。上述したように、第１のトラバースに渡って、ＶＨＤＬのデータフロービルダーは、Ｖｈｓｉｇのネットを推測し、モジュールに含まれる処理を生成し、ネットのドライバを生成し、データフローのネットに対する各処理の感度を決定する。
【００５０】
決定ステップ４１４においてモジュールの新たなインスタンスにいつ遭遇したときでも、データフローのグラフ生成のため決定ステップ４０８において適当なデータフロービルダーが選択される。ＨＤＬ仕様の第１のトラバースが決定ステップ４１４において完了したとき、第２のＶＨＤＬのデータフロービルダーおよび第２のヴェリログのデータフロービルダーがブロック４１６において生成される。ＨＤＬ仕様のデータフローのグラフを完成させるため、精緻な設計が２度トラバースされ、第２のデータフロービルダーが用いられる。決定ステップ４１８において遭遇する各ヴェリログブロックに対し、第２のヴェリログのデータフロービルダーは、ブロック４２０におけるＶｅｒｓｉｇ信号を用いてヴェリログのデータフローのグラフを完成させるのに用いられる。上述したように、第２のヴェリログのデータフロービルダーは、モジュールの処理を生成し、ネットのドライバを生成し、ブロック４１０において第１のトラバースで生成されるデータフローのネットに対する各処理の感度を決定する。各ＶＨＤＬモジュールに対して、第２のＶＨＤＬのデータフロービルダーは、ブロック４２２において各ＶＨＤＬモデルの浅いトラバースを行なうことによって全仕様がトラバースされるのを可能にし、ＶＨＤＬモジュール内のインスタンス化ステートメントのみ細部までに処理される。
【００５１】
モジュールの行使をモデル化するように構成され、シミュレーションのデータフローのグラフに従うシミュレーションコードは、第１のＨＤＬと両立可能な形式を有する第１のＨＤＬ信号表現および第２のＨＤＬと両立可能な形式を有する第２のＨＤＬ信号表現を用いてブロック４４０で生成される。シミュレーションのデータフローのグラフにおける言語境界間で回路記述の各インスタンス化されたモジュールに対し、インスタンス化されたモジュールのポートは、第１のＨＤＬ信号表現にマッピングされるとともに第２のＨＤＬ信号表現にマッピングされる。
【００５２】
例示および実施例は、ＶＨＤＬおよびヴェリログにおいて表現される混合言語設計の文脈で最初に記載されているが、実施例は、ＶＨＤＬおよびヴェリログのみならずまたはその代わりに、他のＨＤＬ言語を含む混合言語仕様のシミュレーションに関連しても用いられ得ることが認識される。同様に、上記の例示および実施例は、１つの最上位のモジュールを参照して記載されているが、一以上の実施例は、複数の最上位モジュールで設計に容易に外挿することができる。
【００５３】
図５は、そこに記載された処理および関数を実行するために構成され得るコンピュータ構造の一例のブロック図を示す。プログラムコードで構成された１以上のプロセッサおよびメモリ構成を含む種々の代替的なコンピュータ構成は、処理およびデータ構造を制御し、異なる実施例のアルゴリズムを実行するのに適していると評価されるだろう。プロセッサの実行可能な形式で符号化される一以上の実施例の処理を含むコンピュータコードは、磁気的または光学的ディスクまたはテープ、電子記憶装置、またはネットワークを通じた応用サービスのような、様々なコンピュータ読取可能な記憶媒体または配信チャネルを介して記憶されるか与えら得る。
【００５４】
プロセッサ計算配列５００は、１以上のプロセッサ５０２、クロック信号発生器５０４、メモリ部５０６、記憶部５０８、およびホストバス５１２に結合された入力／出力制御部５１０を含む。プロセッサ計算配列５００は、回路板上の分離した構成要素で実行され得るか、集積回路内で内部的に実行され得る。集積回路内で内部的に実行されるとき、プロセッサ計算配列は、マイクロコントローラとしても知られている。
【００５５】
計算配列の構造は、本願の当業者には認識されているように、実施要件に依存する。プロセッサ５０２は、１以上の汎用プロセッサ、１以上の汎用プロセッサおよび適当な共用プロセッサの組合せ、または１以上の特化されたプロセッサ（たとえば、ＲＩＳＣ、ＣＩＳＣ、パイプライン型など）であり得る。
【００５６】
メモリ配列５０６は通常、複数レベルのキャッシュメモリおよび主メモリを含む。記憶配列５０８は、磁気ディスク（図示せず）、フラッシュ、ＥＰＲＯＭ、または他の不揮発性データ記憶によって与えられるような局所的および／または遠隔の持続性記憶を含み得る。当該記憶部は、読出または読出／書込が可能であり得る。さらに、メモリ部５０６および記憶部５０８は、単一の配列に結合されてもよい。
【００５７】
プロセッサ配列５０２は、記憶部５０８および／またはメモリ部５０６の配列でソフトウェアを行使し、記憶部５０８および／またはメモリ部５０６の配列からデータを読み出すとともにそこへデータを記憶し、入力／出力制御配列５１０を通じて外部装置と通信する。これらの機能は、クロック信号発生器５０４によって同期される。計算配列のリソースは、オペレーティングシステム（図示せず）またはハードウェア制御部（図示せず）のいずれかによって管理され得る。
【産業上の利用可能性】
【００５８】
実施例は、ＨＤＬシミュレーションのための種々のシステムに対して応用可能であり得る。他の局面および実施例は、明細書を考慮することから明らかである。明細書および明示された実施例は例としてのみ考慮されるべきものであり、真の権利範囲および実施例の精神は、続く特許請求の範囲によって示される。
【図１】
0005716104.tif 000002
【図２】
0005716104.tif 000003
【図３】
0005716104.tif 000004
【図４】
0005716104.tif 000005
【図５】
0005716104.tif 000006