(57)【要約】フィールド・プログラマブル・ゲート・アレイ・デバイス（ＦＰＧＡ）などのリプログラマブル・デバイスを用いてソフトウェア・シミュレータの動作を高速化する方法及びシステムである。この方法及びシステムは、リプログラマブル・デバイスを用いて、特定用途向け集積回路（ＡＳＩＣ）のデジタル回路設計のエミュレーション及びプロトタイピングを行うようにしたものである。このシステムは、設計検証マネージャ・ソフトウェア・プログラムを備えており、このソフトウェア・プログラムは、クロック・ソースを探索するサブルーチン、クロック・ソースからクロック信号を受取っている同期要素を探索するサブルーチン、それに、クロック・ソースとかかる同期要素との間にエッジ検出回路を挿入するサブルーチンを含んでいる。この新規な方法は、基本クロックである設計クロックを、クロック・トリガ入力端子へ供給する替わりにクロック・イネーブル入力端子へ供給するようにし、また、その設計に含まれているその他全てのクロックに対して自動的に遅延させた新たなクロックを生成してクロック・トリガ入力端子へ供給することにより、クロック・タイミングに関する問題を解消できるようにしたものである。このシステムは、自動的なリターゲッティングによってＡＳＩＣ設計をリプログラマブル・デバイスに変換する際に、その変換後のリプログラマブル・デバイスが、ＡＳＩＣとＦＰＧＡとで互いにクロッキング・チェーンのタイミングが異なることから、複数のフリップフロップ及び複数のラッチを異なった時刻にトリガすることになるような場合に生じていた障害を解消するものである。
2007508638.tif 000002
【特許請求の範囲】
【請求項１】
デジタル回路設計におけるクロック・スキュー及び競合状態を排除することでＡＳＩＣ設計の設計検証を高速化するシステムにおいて、
コンピュータを備え、
前記コンピュータはランダム・アクセス・メモリを有しており、
前記ランダム・アクセス・メモリにはデジタル回路設計ファイルが格納されており、
前記メモリに格納されている前記デジタル回路設計ファイルに処理を施すための設計検証マネージャ・プログラムを備え、
前記設計検証プログラムは、
前記デジタル回路設計ファイルの中のクロック・ソースを探索するための「クロック・ソースを探索するサブルーチン」と、
前記「クロック・ソースを探索するサブルーチン」によって発見された前記クロック・ソースからクロック信号を受け取っている前記デジタル回路設計ファイルの中の同期要素を探索するための「同期要素を探索するサブルーチン」と、
発見された前記クロック・ソースと前記同期要素との間にエッジ検出回路を挿入するための「エッジ検出回路を挿入するサブルーチン」とを含んでおり、
以上によってデジタル回路設計の設計検証が高速化されるようにした、
ことを特徴とするシステム。
【請求項２】
前記設計検証マネージャは、「クロック・イネーブル入力端子を備えていない同期要素を探索し、クロック・イネーブル入力端子を備えていない同期要素をクロック・イネーブル入力端子を備えている同期要素に置き換えるサブルーチン」を含んでいることを特徴とする請求項１記載のシステム。
【請求項３】
前記設計検証マネージャは、「前記同期要素の入力端子と前記同期要素の出力端子との間の接続を解析して前記同期要素の入力端子と前記同期要素の出力端子との間にデータ・バッファを挿入するサブルーチン」を含んでいることを特徴とする請求項１記載のシステム。
【請求項４】
前記設計検証マネージャは、「クロックの立下りエッジにより駆動されるクロック立下りエッジ駆動型の要素を探索し、クロック立下りエッジ駆動型の要素をクロック立上りエッジ駆動型の要素に置き換えるサブルーチン」を含んでいることを特徴とする請求項１記載のシステム。
【請求項５】
前記設計検証マネージャは、「クロックの立上りエッジにより駆動されるクロック立上りエッジ駆動型の要素を探索し、クロック立上りエッジ駆動型の要素をクロック立下りエッジ駆動型の要素に置き換えるサブルーチン」を含んでいることを特徴とする請求項１記載のシステム。
【請求項６】
デジタル回路設計をシミュレートするシステムにおいて、
コンピュータを備え、
前記コンピュータは設計ファイルを格納するメモリを有しており、
前記メモリに格納されている前記設計ファイルに処理を施すための設計検証マネージャ・プログラムを備え、
前記メモリに格納されている複数の設計ファイルを、またはそれら複数の設計ファイルのうちの選択された部分を、シミュレートするためのシミュレータ・プログラムを備え、
前記シミュレータの動作を刺激するためのテストベンチ・ファイルを備え、
前記コンピュータはハードウェア・アクセラレータを含んでおり、
前記設計検証マネージャ・プログラムは、「設計ファイルを、選択されたシミュレーション・ファイルと、選択されたハードウェア実行ファイルとに分類するサブルーチン」を含んでおり、
前記設計検証マネージャ・プログラムは、前記選択されたシミュレーション・ファイルを前記シミュレータにダウンロードし、前記選択されたハードウェア実行ファイルを前記ハードウェア・アクセラレータにダウンロードし、
前記設計検証マネージャ・プログラムに含まれる「前記選択されたハードウェア実行ファイルの中のクロック・ソースを探索するサブルーチン」を備え、
「クロック・ソースからクロック信号を受取っている、前記回路設計ファイルの中の、クロックで駆動される入力端子を備えている同期要素を探索するサブルーチン」を備え、
「前記クロック・ソースと前記同期要素との間にエッジ検出回路を挿入するソフトウェア・サブルーチン」を備え、
前記「クロック・ソースを探索するサブルーチン」、前記「同期要素を探索するサブルーチン」、及び前記「エッジ検出回路を挿入するサブルーチン」は、前記設計検証マネージャによって、前記選択されたハードウェア実行ファイルに対して動作し、
以上によってデジタル回路設計の設計検証が高速化されるようにした、
ことを特徴とするデジタル回路設計をシミュレートするシステム。
【請求項７】
前記ハードウェア・アクセラレータは、
ターゲット・ハードウェアと、
テンポラリ・バッファと、
ドライバ・バッファとを含んでおり、
前記シミュレータは、
「前記選択されたシミュレーション・ファイルの機能シミュレーションを実行するサブルーチン」と、
「前記「機能シミュレーションを実行するサブルーチン」によって実行される選択されたシミュレーション・ファイルのシミュレーションの終了を検出するサブルーチン」とを含んでおり、
前記ハードウェア・アクセラレータは、
「前記テンポラリ・バッファへデータを転送するサブルーチン」と、
「前記テンポラリ・バッファへのデータ転送の終了を検出するサブルーチン」と、
「前記「前記テンポラリ・バッファへのデータ転送の終了を検出するサブルーチン」に応答して、前記テンポラリ・バッファから前記ドライバ・バッファへデータを転送するサブルーチン」とを含んでおり、
前記ドライバ・バッファの複数の出力が、互いに略々同時に前記ターゲット・ハードウェアの複数の入力信号線に供給されるようにしてある、
ことを特徴とする請求項６記載のデジタル回路をシミュレートするシステム。
【請求項８】
前記ハードウェアは、
入力信号バッファを含んでおり、
前記シミュレータは、
「入力信号バッファからの読み込みを行うサブルーチン」を含んでおり、該「入力信号バッファからの読み込みを行うサブルーチン」は、ハードウェア・アクセラレータから前記シミュレータへデータを読み込むためのサブルーチンであり、前記入力信号バッファは、前記ターゲット・ハードウェアの中の論理要素からの入力を格納するものであり、
「ハードウェア・タイムアウト・サブルーチン」を含んでおり、該「ハードウェア・タイムアウト・サブルーチン」は、データ転送の終了の検出に応答する前記サブルーチンに応答するものであり、前記入力信号バッファから前記シミュレータへのデータの読み込みを実行し、このデータの読み込みは、好ましくは前記シミュレータの内部クロックを基準として定められる間隔で行われ、その間隔は前記シミュレータの内部クロックの１間隔から１００分の１間隔までの範囲内の間隔である、
ことを特徴とする請求項７記載のデジタル回路をシミュレートするシステム。
【請求項９】
前記ハードウェア・アクセラレータは、
読み込み検出回路と、
入力信号バッファとを含んでおり、
前記シミュレータは、
「割込サブルーチン」と、
「入力信号バッファからの読み込みを行うサブルーチン」とを含んでおり、該「入力信号バッファからの読み込みを行うサブルーチン」は、入力信号バッファから前記シミュレータへデータを読み込むためのサブルーチンであり、前記入力信号バッファは、前記ターゲット・ハードウェアの中の論理要素からの出力を格納するものであり、
前記読み込み検出回路は、ターゲット・ハードウェアの内部の信号処理に応答して、該信号処理の完了時に割込信号を送出し、
前記「割込サブルーチン」は、前記割込信号に応答して、前記入力信号バッファから前記シミュレータへのデータの読み込みを実行し、このデータの読み込みは、好ましくは即時に行われるものである、
ことを特徴とする請求項７記載のデジタル回路をシミュレートするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子回路設計の設計検証に関し、より詳しくは、最新の回路設計の設計検証を高速化することに関するものであって、この高速化は、ソフトウェア・シミュレータの高速化と、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）などのリプログラマブル・デバイスを用いた電子設計のエミュレーションとによってなされるものである。更に詳しくは、本発明は、一般的に、特定用途向け集積回路（ＡＳＩＣ）設計及びハイ・デフィニション・ロジック（ＨＤＬ）設計を、特別の種類のリプログラマブル・デバイスに自動リターゲッティングすることによって高速化する検証に関するものである。
【背景技術】
【０００２】
今日のＡＳＩＣ設計は、そのゲート数が数千万個にも達している。このような多数のゲートを備えたＡＳＩＣ設計の設計検証は、例えば、Cadence Design社の製品であるNC-Sim（登録商標）や、Synopsys 社の製品であるVCS Simulator（登録商標）、それに、米国、ネバダ州、ラスベガスに所在のAldec社の製品であるRiviera（登録商標）及びActive-HDL（登録商標）などのソフトウェア・シミュレータを用いて行われている。しかしながら、ＡＳＩＣ設計のゲート数が増大する速さは、コンピュータの演算速度が向上する速さをはるかに凌いでおり、そのため、ＡＳＩＣ設計の設計検証のための設計シミュレータの動作を更に高速化することが求められている。
【０００３】
この高速化のための１つの方策は、シミュレーションを、より高度に抽象化したレベルで行うようにするというものであり、そのようなシミュレータには、例えば、SystemC（登録商標）、Behavioral VHDL（登録商標）、SystemVerilog（登録商標）などがある。しかしながら、この種のシミュレータに必要とされる精緻なコンパイラは、高コストである上に、未だ開発途上にある。また、この種のシミュレータのパフォーマンス・ゲインは、最新の最大級規模のＡＳＩＣデバイスの設計検証を効率的に行えるだけの十分なものとはなっていない。
【０００４】
この高速化のためのもう１つの方策は、在来のシミュレータの動作を高速化するというものであり、これは、全般的にシミュレーションの替わりにエミュレーションを利用することによって行われる。そのようなアクセラレータないしエミュレータは、リプログラマブル・デバイスで構成され、Quickturn社及びIkos社によって製造されている。この種のものに付随する主たる短所は、設計の基本特性をリプログラマブル・デバイスによって再現するために、ＡＳＩＣのクロッキング・チェーンをＦＰＧＡデバイスで発生させるクロッキング・チェーンに変換する作業を、手作業で行わねばならず、そのために数百時間もの作業時間が必要とされることにある。
【０００５】
また、大規模デバイスとして構成されたＡＳＩＣ設計では、発熱量も大きな問題となっており、そのような設計では、フリップフロップやラッチどうしの間での全てのデータ転送を同期させるためのクロックが、１つのシステム・クロックではなく、２０ないし４０もの多数のクロックとなっている。リプログラマブル・デバイスにおけるゲート及びゲート配線の動作タイミングは、ＡＳＩＣ設計におけるゲート及びゲート配線の動作タイミングとは異なるため、ＡＳＩＣ設計の特性をリプログラマブル・デバイスでエミュレートできるように、ＡＳＩＣ設計を高い信頼性をもって確実にリプログラマブル・デバイスに変換するには、高度の集中力と長い作業時間とが必要とされる。本発明の目的は、このＡＳＩＣ設計からリプログラマブル・デバイスへの自動的な変換を保証することにある。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従って、本発明の１つの課題は、最新の非常に大規模なＡＳＩＣ設計の設計検証を高速化することにある。
【０００７】
本発明の別の１つの課題は、ＡＳＩＣ設計のシミュレーションを高速化することによって、非常に大規模なＡＳＩＣ設計の設計検証を高速化するシステム及び装置を提供することにある。
【０００８】
本発明の１つの課題は、ＡＳＩＣ設計からリプログラマブル・デバイスへの変換が自動的に行われるようにすることで、ＡＳＩＣ設計の機能上の設計検証を迅速に行えるようにすることにある。このことは、リプログラマブル・デバイスをＡＳＩＣデバイスと同一機能を果たすように動作させるための、ＡＳＩＣのクロッキング・チェーンからリプログラマブル・デバイスにおけるクロッキング・チェーンへの変換が、自動的に行われるようにすることによって、達成されるものである。
【０００９】
更に、本発明の別の１つの課題は、様々なフリップフロップ及びラッチのクロッキングに操作を加えることによって、様々なＡＳＩＣ設計を、ハードウェア・アクセラレータ、エミュレータ、及び様々なＡＳＩＣプロトタイピング装置によって、効果的に且つ容易に取り扱えるようにすることにある。
【００１０】
本発明の別の１つの課題は、回路設計ファイルの中の、クロック・ソースからクロック信号を受取っている同期要素を探索し、クロック・ソースとかかる同期要素との間にエッジ検出回路を挿入することにより、非常に大規模なＡＳＩＣ設計の設計検証を高速化するシステム及び装置を提供することにある。
【００１１】
本発明の別の１つの課題は、クロック・イネーブル入力端子を備えていない同期要素を探索し、クロック・イネーブル入力端子を備えている同期要素に置き換えることにより、ＡＳＩＣ設計の設計検証を高速化する方法及び装置を提供することにある。
【００１２】
本発明の更に別の１つの課題は、設計検証マネージング・ソフトウェアを備え、この設計検証マネージング・ソフトウェアが、同期要素の入力と非同期要素の出力との間の接続を解析して、それら入力の間にデータ・バッファを挿入するようにした、ＡＳＩＣ設計の設計検証のための方法及び装置を提供することにある。
【００１３】
本発明の更に別の１つの課題は、検証マネージャ・ソフトウェアが、クロック立下りエッジ駆動型の要素を探索して、クロック立下りエッジ駆動型の要素をクロック立上り駆動型の要素に置き換えるようにした、ＡＳＩＣ設計の設計検証のための方法及び装置を提供することにある。
【００１４】
本発明の更に別の１つの課題は、設計検証マネージャ・ソフトウェアが、ＡＳＩＣ設計ファイルを格納するメモリと、前記設計ファイルに処理を施すための設計検証マネージャ・ソフトウェアと、前記設計ファイルまたはその選択された部分をシミュレートするためのシミュレータ・ソフトウェアとを備えた、非常に大規模なＡＳＩＣ設計の設計検証のための装置及び方法を提供することにある。
【００１５】
本発明の更に別の１つの課題は、設計ファイルと、設計検証マネージャ・ソフトウェアと、シミュレーション・ソフトウェアと、シミュレータの動作を刺激するためのテストベンチ・ファイルとを格納しているコンピュータを備え、また更に、ハードウェア・アクセラレータを備えた、ＡＳＩＣ設計の設計検証を高速化するための方法及び装置を提供することにある。設計検証マネージャ・ソフトウェアは、複数の設計ファイルを、選択されたシミュレーション・ファイルと、選択されたハードウェア実行ファイルとに分類し、分類されたそれらファイルは、前記シミュレータの中の選択されたシミュレーション・ファイルと、前記ハードウェア・アクセラレータの中の選択されたハードウェア実行ファイルとにダウンロードされる。
【課題を解決するための手段】
【００１６】
本発明の目的は、ＡＳＩＣのシミュレーション及び検証を格段に高速化する、改良した方法及び装置を提供することにある。ここに開示する本発明は、シミュレータ及びハードウェア・アクセラレータを備えた環境で動作する、完璧なＡＳＩＣ設計の設計検証のための方法及び装置である。複数のＡＳＩＣ設計セクションのうちの一部はソフトウェア・シミュレータに処理させ、別の一部はハードウェア・アクセラレータに処理させている。ただし、それら複数の設計セクションの全てが、１つのユニットとして動作するようになっており、これは、シミュレータとアクセラレータとが、複数の信号線を介して緊密に相互接続されていることによるものである。
【００１７】
ＡＳＩＣ設計の設計データは、キーボードや、マウス・デバイスなどの、任意のデータ入力デバイスを介して入力される。或いはまた、図１に示したものと同様の構成の別のコンピュータ上において、オフラインでＡＳＩＣ設計を作成するようにしてもよく、そのようにしたものも本発明の範囲に含まれる。新たに作成されたＡＳＩＣ設計の設計ファイルは、ランダム・アクセス・メモリ（ＲＡＭ）に一時的に格納され、また、コンピュータのハードディスクに永久的に格納される。
【００１８】
データ入力デバイスは、シミュレータとアクセラレータとの間の通信リンクをセットアップするためにも用いられる。このセットアップは、設計検証マネージャ（ＤＶＭ）に含まれている入出力（Ｉ／Ｏ）制御プログラム・サブルーチンに働きかけるものであり、このＩ／Ｏ制御プログラム・サブルーチンによって、設計シミュレータとハードウェア・アクセラレータとの間のデータの流れが制御される。また、ユーザは、このセットアップの一環として、シミュレータ及びアクセラレータのどのテストポイントを観察するのか、また、シミュレータのどの信号データにアクセラレータのどのテストポイントを刺激させるのか、それに、アクセラレータのどの信号データにシミュレータのどのテストポイントを刺激させるのかについて、ＤＶＭに指示を与えることができる。
【００１９】
シミュレータとターゲット・ハードウェア内の複数の設計セクションの間では、通常、何百もの信号がやり取りされるため、それら各方向に転送される全ての信号を一旦格納して、適切なタイミングでシミュレータ及び／またはターゲット・ハードウェアへ供給するためのバッファが必要とされる。シミュレータとハードウェア・アクセラレータとの間の信号データ転送は、３２ビットの周辺機器インターフェース（ＰＣＩ）を介して行うため、全てのデータを３２ビットのデータ・セグメントに区切るようにしている。ただし、６４ビットのＰＣＩを使用する場合には、６４ビットに区切るようにすればよい。更に、このデータ転送は、ユニフォーム・シリアル・バス（ＵＳＢ）又はイーサネット（登録商標）・バス、又は同様にその他のバスを介して行うようにしてもよい。ターゲット・ハードウェアからシミュレータへ供給される信号を格納するバッファを、入力信号バッファと呼ぶ。例えば、ターゲット・ハードウェアからシミュレータへ供給される信号の数が８０であるならば、通常、入力バッファ内のデータは、３個の３２ビット・ワードから成るものとする。同様に、シミュレータからターゲット・ハードウェアへ供給される信号の数が１００であるならば、出力バッファは、４個の３２ビット・レジスタを組み合わせたものとすればよい。また、ハードウェア・アクセラレータは、全ての信号が同時に供給されることを必要とするため、出力バッファは、２組のバッファから成るものとする必要がある。第１組のバッファは、テンポラリ・バッファであり、シミュレータから供給されるデータを収集するものである。選択されたテストベクターに対応した全ての信号がこのテンポラリ・バッファに格納されたならば、クロックの１つのエッジが発生したときに、それら信号を一斉に、ターゲット・ハードウェアを直接的に駆動するバッファである「ドライバ・バッファ」へ転送する。
【００２０】
入力信号バッファは、ターゲット・ハードウェアにおいて生成された複数の信号を、設計シミュレータへ供給するためのバッファである。設計シミュレータは、更に、Ｉ／Ｏプログラム・サブルーチンを起動して、このシミュレータの制御下にあるメモリ・ロケーションから、ハードウェア・アクセラレータを制御する出力信号バッファの中の対応するチャネルへ、信号データを送出させることもできる。出力信号バッファは、複数の信号線を介してターゲット・ハードウェアへ、それらデータを供給する。このデータ転送は、１回のシミュレーション・サイクルの完了によって起動される。
【００２１】
ターゲット・ハードウェアがプロセッサを含む場合には、そのターゲット・ハードウェアが割込信号を送出することによって、入力バッファからデータを読み込むようシミュレータに指示する。割込信号を送出するという方法に替えて、信号スキャンを行うという方法を用いることも可能であるが、この方法は動作速度がより遅いため、推薦されない。ターゲット・ハードウェアがプロセッサを含まない場合には、そのターゲット・ハードウェアの入力端子に接続されている信号線の信号遷移が発生してから、そのターゲット・ハードウェアが安定状態になるのに必要な所定の時間が経過した時点で、入力バッファからの読み込みが行われるようにすればよい。
【００２２】
ハードウェア・アクセラレータが割込信号を送出したならば、シミュレータ内のデータ入力プログラム・サブルーチンによって、入力信号バッファからＲＡＭの対応するメモリ・ロケーションへのデータ転送が行われる。このデータ転送に続いて、１つのプログラム・サブルーチンによって、新たにロードされた複数の信号のデータと、それらデータがそれまでロードされていたメモリ・ロケーションに存在していた以前のデータとの間に、変化が生じているか否かがチェックされる。もし変化がなければ、シミュレータは何の動作もせず、データ入力プログラム・サブルーチンは、新たな割込信号が送出されるのを待つ。
【００２３】
一方、ターゲット・ハードウェアから供給されて読み込んだ新たなデータが、以前のデータと相違していたならば、プログラム・サブルーチンは、設計シミュレータの動作を開始させ、設計シミュレータはシミュレーション・ステップを実行して新たに受取ったデータに処理を施す。続いて、別のサブルーチンが、このシミュレータの複数の出力のモニタを開始して、それら出力が安定状態に達したか否かをチェックする。シミュレータの複数の出力が安定状態に達したならば、更に別のサブルーチンが、出力バッファへのデータ転送を開始し、それによって再び、ハードウェア・アクセラレータの動作が開始される。
【００２４】
本発明の上述した課題、効果、及び新規な特徴、並びにその他の課題、効果、及び新規な特徴については、以下の詳細な説明並びに添付図面を参照することにより、更に明瞭に理解することができる。
【発明を実施するための最良の形態】
【００２５】
図１に示したのは、コンピュータ・システム１のブロック図であり、このコンピュータ・システム１は、リプログラマブル・デバイスを用いて、ＡＳＩＣ設計の設計検証及び自動的プロトタイピングを行えるようにしたものである。コンピュータ・システム１としては、例えばSun Microsystems社の製品であるSunBlade 1000（登録商標）などのような、ワークステーションを使用することもでき、また、例えばDell社や、Hwelett-Packard社をはじめとする様々なメーカーが製造しているパーソナル・コンピュータ（ＰＣ）を使用することも可能である。コンピュータ・システム１は、プロセッサ１７０、ランダム・アクセス・メモリ（ＲＡＭ）１７１、ハードディスク・ストレージ１７２、データ入力デバイス１７３、それに、ディスプレイ、即ちモニタ１８０を備えている。データ入力装置１７３としては、様々な入力装置を使用することができるが、説明を簡明にするために、本明細書では多くの箇所で、データ入力装置１７３をキーボードと称している。
【００２６】
以上に加えて、コンピュータ・システム１は、コンピュータ・メモリ１７１に格納されたソフトウェア・シミュレータ４、プログラムにより設計セクションを構築することのできる１つまたは複数のリプログラマブル・デバイスで構成されたリプログラマブル・ハードウェア・アクセラレータ５、それに、設計検証マネージャ（ＤＶＭ）ソフトウェア３を含んでおり、ＤＶＭソフトウェア３は、ＡＳＩＣ設計を、リプログラマブル・ハードウェア・アクセラレータ５内にインプリメントするのに適したフォーマットに変換するためのソフトウェアである。また、ＤＶＭソフトウェア３は、１つのデバイス・ファミリーに対応するように製作されたコンプレックス・プログラマブル・ロジック・デバイス（ＣＰＬＤ）及びＦＰＧＡの設計を、別のＣＰＬＤまたはＦＰＧＡのデバイス・ファミリーで動作する設計に変換する機能も備えている。
【００２７】
シミュレータ４としては、例えばCadence Design社の製品であるNC-Sim（登録商標）や、米国、ネバダ州、ラスベガスに所在のAldec社の製品であるActive-HDL（登録商標）のような、広く一般的に用いられているシミュレータのうちの適当なものを使用することができる。ハードウェア・アクセラレータ５としては、Alatek Sp. zo.o.社のハードウェア・エンベッデッド・シミュレーション（ＨＥＳ）製品などを使用することができる。また、ＤＶＭ３としては、Alatek社の製品を使用することができ、このＤＶＭ３は、ＨＤＬ及びネットリストの設計を、例えばXilinx社の製品であるVirtex II（登録商標）や、Altera社の製品であるStratix（登録商標）などのようなフィールド・プログラマブル・デバイスに適合させる機能を備えている。
【００２８】
ＡＳＩＣ設計は、１つ１つのＡＳＩＣ設計が、複数の設計ファイル２によって構成されている。それら複数の設計ファイル２は、ＤＶＭ３に含まれている一連のソフトウェア・サブルーチンへ供給される。ＤＶＭ３は、ユーザの操作に従って、供給された複数の設計ファイル２を、シミュレータ４に処理させる設計ファイルとハードウェア・アクセラレータ５に処理させる設計ファイルとに分類する。即ち、「設計ファイルを分類するサブルーチン」２３１（図１３）が、信号線２３０を介して供給されてくるＡＳＩＣ設計の複数の設計ファイル２を、ユーザからの入力に応答して、選択されたシミュレーション・ファイル（ユーザがシミュレーション・ファイルとして選択した設計ファイル）２３３と、選択されたハードウェア実行ファイル（ユーザがハードウェア実行ファイルとして選択した設計ファイル）２３５とに分類する。選択されたシミュレーション・ファイル２３３は信号線２３２を介してＲＡＭメモリ１７１に、また、選択されたハードウェア実行ファイル２３５は信号線２３４を介してこれもＲＡＭメモリ１７１に、それぞれ格納される。更に、選択されたシミュレーション・ファイル２３３は信号線７を介してソフトウェア・シミュレータ４へ供給され、選択されたハードウェア実行ファイル２３５は信号線１０を介してハードウェア・アクセラレータ５へ供給される。通常、ユーザは、少数の信号遷移しか含まないそれらの設計ファイルをシミュレータ４へ供給することによって、より高速でシミュレーションが行われるようにする。一方、通常のテストベンチ刺激ファイルによって多数の信号遷移が生成されるような設計ファイル２は、ハードウェア・アクセラレータ５へ送るようにする。Aldec社の製品であるRiviera（登録商標）や、Mentor Graphics社の製品であるModelSim（登録商標）などをはじめとして、大多数のソフトウェア・シミュレータ４は「プロファイラ」ソフトウェアを含んでおり、この「プロファイラ」ソフトウェアは、設計をスキャンして、複数の設計ファイル２のうちのどの部分が多くの信号遷移を発生し、どの部分が僅かな信号遷移しか発生しないかを判定することができる。
【００２９】
選択されたシミュレーション・ファイル２３３と、選択されたハードウェア実行ファイル２３５との間の直接的な相互作用を確保するために、「シミュレータからハードウェア・アクセラレータへデータが供給されるテストポイントを探索するサブルーチン」２３７と、「ハードウェア・アクセラレータからシミュレータへデータが供給されるテストポイントを探索するサブルーチン」２４１とが、信号線２３６及び２４０上に送出される設計ファイル２３３及び２３５を解析して、両者間のコモン信号であるテストポイントを判別するようにしている。より詳しくは、「シミュレータからハードウェア・アクセラレータへデータが供給されるテストポイントを探索するサブルーチン」２３７は、シミュレータ４のどのテストポイントが、ハードウェア・アクセラレータ５へデータが供給されるテストポイントであるかを判別する。そして、それに該当するテストポイントのリストを、信号線２３８を介して、選択されたハードウェア実行データベース（ＳＨＡデータベース）２３９へ供給する。同様に、「ハードウェア・アクセラレータからシミュレータへデータが供給されるテストポイントを探索するサブルーチン」２４１は、信号線２４０上に送出されるデータ（このデータには、選択されたシミュレーション・ファイル２３３及び選択されたハードウェア実行ファイル２３５が含まれている）を解析し、ハードウェア・アクセラレータ５の出力部からシミュレータ４の入力部へデータが供給されるテストポイントのリストを生成する。そして、「ハードウェア・アクセラレータからシミュレータへデータが供給されるテストポイントを探索するサブルーチン」２４１は、そのテストポイントのリストを、信号線２４２を介して、選択されたハードウェア実行データベース（ＨＡＳデータベース）２４３へ供給する。
【００３０】
ＤＶＭソフトウェア３は、ＳＨＡデータベース２３９のデータに基づき、「データをテンポラリ・バッファへ転送するサブルーチン」２２１（図１４）に、ハードウェア・アクセラレータ５を制御するための信号として、どの信号をテンポラリ・バッファ１９６（図１２）へ転送すべきかを指示する。同様に、ＤＶＭ３は、ＨＡＳデータベース２４３に基づき、「入力信号バッファからの読み込みを行うサブルーチン」２１３（図１４）を制御して、必要な信号データをシミュレータ４にロードさせる。以上を要約すると、シミュレータ４は、みずからの内部動作を完了したならば、ハードウェア・アクセラレータ５の動作を刺激する信号を送出する。一方、ハードウェア・アクセラレータ５は、みずからの動作が安定状態に達したならば、シミュレータ４の動作を制御する信号を送出する。この「ピンポン」のように行き来する動作が反復して実行され、この反復動作は、全てのテストベンチ１８１（図１４）が、信号線１８２と、ＤＶＭ３と、信号線７とを介してシミュレータ４の中へ供給されてしまうまで、或いは、信号線２０８上のデータが全てターゲット・ハードウェア１９０（図１２）へ供給されてしまうまで続けられる。
【００３１】
ＤＶＭソフトウェア３は、図２のフローチャートの中に列挙した複数のサブルーチンで構成されている。「クロック・ソフトウェアを探索するサブルーチン」１１は、信号線６上に送出される複数の設計ファイル２をスキャンして、設計クロック（ユーザ・クロックともいう）を探索し、そして、発見した設計クロックのネーム及びデータを、信号線１２を介して「クロック探索データベース（第１データベース）」１３へ送出する。「クロック・ソースを探索するサブルーチン」１５は、信号線１４上に送出される前処理が施された設計ファイル２（これには、設計クロックのリストが含まれている）を受取る。「クロック・ソースを探索するサブルーチン」１５は、信号線１４上に送出される設計ファイル２をスキャンして、クロック・ソースを探索し、そして、発見したクロック・ソースのリストを、信号線１６を介して「クロック・ソース探索データベース（第２データベース）」１７へ送出する。更に、クロックのリスト１３及びクロック・ソースのリスト１７は、信号線１８上へも送出される。
【００３２】
本発明の基本を成しているのは、「クロック・ソース」と、「クロックに従属する入力端子」とを探索し、そして、発見したそれらに対して、然るべき回路変換処理即ち回路変換アルゴリズムを適用することである。ここでいうクロック・ソースとは、フリップフロップまたはラッチであって、他のラッチまたはフリップフロップのクロック入力端子を駆動するものをいう。例えば、図５のフリップフロップ８２は「クロック・ソース」であり、なぜならば、このフリップフロップ８２は、信号線９３上に信号を送出し、送出された信号は、ゲート８４、信号線９５、ゲート８５、及び信号線９７を介して、フリップフロップ８１のクロック入力端子へと供給されているからである。また、このフリップフロップ８２は、信号線９３、ゲート８４、及び信号線９５を介して、フリップフロップ８３の同期Ｄ入力端子を駆動しているということからも、「クロック・ソース」に該当するものであるといえる。ゲート８４やゲート８５などのように、クロック出力を受取らない要素は、非同期要素と呼ばれる。このような非同期要素が、フリップフロップの駆動端子Ｄまたはクロック入力端子を駆動している場合には、そのことが原因となって、ある１つのデバイス・レイアウトから別の１つのデバイス・レイアウトへの回路の挙動が予測不可能なものとなるおそれがある。本発明は、回路動作におけるこのような非同期要素の影響を排除するものである。
【００３３】
「クロック・ソースを探索するサブルーチン」１５は、フリップフロップ８１及び８３などのフリップフロップへ入力する非同期入力を解析して、フリップフロップ８２が「クロック・ソース」であることを検出する。「クロック・ソースを探索するサブルーチン」１５は、フリップフロップ８１のＣ−クロック入力端子から、信号線９７を逆にたどり、それによって、ゲート８５の出力端子を発見する。続いて「クロック・ソースを探索するサブルーチン」１５は、このゲート８５の入力を調べる。そのために「クロック・ソースを探索するサブルーチン」１５は、信号線９５を逆にたどり、それによって、ゲート８４を発見する。「クロック・ソースを探索するサブルーチン」１５は、ゲート８４の一方の入力端子に接続されている信号線９３を解析し、それによってフリップフロップ８２を発見し、そして、上述した定義に従って、そのフリップフロップ８２が、「クロック・ソース」であることを宣言する。
【００３４】
「クロックで駆動される入力端子を備えている同期要素」とは、同期入力端子を備えているフリップフロップ及びラッチであり、例えば、フリップフロップ８３は、そのＤ入力端子に「クロック・ソース」の信号線である信号線９５が接続している。この信号線９５が「クロック・ソース」の信号線であることは、それが「クロック・ソース」に接続されていることが「クロック・ソースを探索するサブルーチン」１５によって発見されたことにより既に認識されている。そのため、この要素８３は、「クロックで駆動される入力端子を備えている同期要素を探索するサブルーチン」１９によって、クロックで駆動される入力端子を備えている要素であると識別される。「クロックで駆動される入力端子を備えている同期要素を探索するサブルーチン」１９は、信号線１８を介して供給される設計データに処理を施して、何らかの形で「クロック・ソース」に接続されている同期入力端子（例えばプリセット入力端子、リセット入力端子、イネーブル入力端子、或いはデータ入力端子）を識別し、そして、そのデータを「同期要素探索データベース（第４データベース）」１８４に格納する。更に、この「同期要素探索データベース」のデータは、設計ファイル２のデータ、クロック探索データベース１３のデータ、及びクロック・ソース探索データベース１７のデータと共に信号線２２上へ送出される。
【００３５】
「クロック・ドメインを探索するサブルーチン」２３は、信号線２２上のデータを解析して、全ての同期要素を、その要素のクロック入力端子に接続している信号線に従って分類する。例えば信号線９７はそのクロック名称に基づいて分類され、また信号線９５はクロックに関連した信号線であることによって分類され、このように分類された各分類をクロック・ドメインという。クロック・ドメインに関する情報は、信号線１８１を介して、「クロック・ドメイン探索データベース（第４データベース）」１８４へ供給される。クロック・ドメインに関して要素を分類することが重要であるのは、そうすることにより、所与の１つのクロック・ドメインに所属する全ての要素を、ただ１つのエッジ検出回路によって駆動することが可能になるからである。
【００３６】
「クロック・ドメインを探索するサブルーチン」２３は更に、ポジティブ・エッジによってトリガされる要素とネガティブ・エッジによってトリガされる要素とを分別し、それぞれを信号線２６、２４上へ送出する。
【００３７】
４つのデータベース（第１〜第４データベース）１３、１７、２１、及び１８４は、設計者がそれらを参照可能なように構築されており、また、それら４つのデータベースは、例えばMicrosoft Word（登録商標）や、Active-HDL（登録商標）などの、適当なソフトウェアを用いることにより、コンピュータ１が、ディスプレイ即ちモニタ１８０上に表示できるようにしてある。
【００３８】
信頼性の高い動作を行わせるには、クロック信号によってトリガされる要素の全てが、同一のクロック・エッジによってトリガされるようにしておくのがよく、そのためには、ネガティブ・エッジ・トリガ型の要素は、全て、ポジティブ・エッジ・トリガ型の要素に変換しておく必要がある。「フリップフリップをポジティブ・エッジ・トリガ型のものに変換するサブルーチン」２５は、信号線２４上のデータを解析して、ネガティブ・エッジ・トリガ型の要素を、ポジティブ・エッジ・トリガ型の要素に置き換えるサブルーチンである。こうして置き換えられたポジティブ・エッジ・トリガ型の要素を示すリストが、信号線２７上に送出される。尚、以上に説明したものでは、ポジティブ・エッジ・トリガ型の要素の方に揃えるようにしたものであったが、これとは逆に、ネガティブ・エッジ・トリガ型の要素の方に揃えるようにしたものも、当然、本発明の範囲に含まれる。
【００３９】
クロックを受取っている要素の、クロックで駆動される入力端子はいずれも、メイン・システム・クロック（ＭＳＣ）のポジティブ遷移が発生する直前の時点で、安定状態にある必要があり、そのため、「分離用フリップフロップを挿入するサブルーチン」２８によって、該当する要素の入力端子に、バッファ・フリップフロップ、即ち「分離用」フリップフロップが挿入される。バッファ・フリップフロップに該当するのは、例えば図６のフリップフロップ１０６であり、バッファ・フリップフロップは、システム・クロックのポジティブ遷移が発生する前にトリガされるようにしておく。例えば、図７に示したように、ＭＳＣクロックのネガティブ・エッジによって、バッファ・フリップフロップがトリガされることができる。
【００４０】
フリップフロップ８２のようなクロック・ソースを制御するクロックは、エッジ検出回路を介することなしに、ユーザ・クロックＣＬＫがそのまま供給されるようにすることが好ましい。そうするためには、例えば要素８３ｉなどのように、クロックで駆動される入力端子を備えた要素には、フリップフロップ１０６のようなバッファが、その要素に入力する同期入力を安定化するために必要である。
【００４１】
本発明を構成する上での基本概念は、ＡＳＩＣデバイスからＦＰＧＡデバイスへの変換を行う際に、様々に異なったタイミングとなり得るユーザ・クロックＣＬＫは、要素８２などのクロック・ソースをクロックする目的にのみ使用して、その他の同期要素をクロックするためには一切使用すべきでないということにある。その替わりに、全てのユーザ・クロックＣＬＫは、クロック・イネーブル（ＣＥ）信号として使用するようにしており、それによって、設計全体に含まれる全ての同期要素をトリガするために発生されるＭＳＣ信号７０によって、それら要素をトリガできるようにしている。この概念を現実化するために、「ＣＥ入力端子を備えていない全てのフリップフロップをＣＥ入力端子を備えているフリップフロップに置き換えるサブルーチン」が、信号線２９を介して供給されるデータ・ファイルをスキャンして、どのクロック要素が「クロック・イネーブル（ＣＥ）入力端子」を備えていない要素であるかを識別している。「ＣＥ入力端子を備えていない全てのフリップフロップをＣＥ入力端子を備えているフリップフロップに置き換えるサブルーチン」３０は、該当する要素を、ＣＥ入力端子を備えていること以外はその要素と同等の要素に置き換えるサブルーチンである。例えば、図５に示した要素８０、８１、及び８３は、このサブルーチン３０によって、図６に示したように、ＣＥ入力端子を備えたフリップフロップである要素８０ｉ、８１ｉ、及び８３ｉに置き換えられる。
【００４２】
ユーザ・クロック信号をクロック・イネーブル（ＣＥ）入力端子へ供給するには、ユーザ・クロック信号における信号遷移を、例えば図４のエッジ検出回路７９のような「エッジ検出器」で検出して、ＣＥ入力端子へ供給する必要がある。このエッジ検出器の動作については、後に図４を参照して詳細に説明する。
【００４３】
「エッジ検出回路を挿入し、クロックをＤ入力端子に接続するサブルーチン」３２は、信号線３１を介して供給される前処理された設計のデータを受取り、その前処理された設計の中に「エッジ検出回路」を挿入して、同期要素のクロック・イネーブル入力端子へ、同期要素からのクロック入力の替わりに、ローカルすなわちユーザ・クロックが供給されるようにするものである。そして、それら同期要素（例えば要素８１ｉ）のクロック入力端子へ、システム・クロックであるＭＳＣ信号７０が供給されるようにすることにより、それら同期要素の全てが、システム・クロックであるＭＳＣ信号７０の同一のエッジ（立上りエッジまたは立下りエッジ）に応答できるようになる。
【００４４】
「全ての同期要素をＭＳＣクロック７０に接続するサブルーチン」３４は、全てのクロックによりトリガされる要素を示したデータを信号線３３を介して受取り、そして、ＭＳＣクロック信号をそれら要素のクロック入力端子に接続する。この時点での設計は、尚、ローカル・クロック（ユーザ・クロック）の立上りエッジと立下りエッジとのいずれにも応答する必要があり、そのため、「エッジ検出回路の出力を接続するサブルーチン」３６が、信号線３５を介して供給される設計のデータに応答して、エッジ検出回路から出力されるローカル・クロックの立上りエッジと立下りエッジとのいずれか一方を、選択された要素のＣＥ入力端子に接続するようにしている。例えば、この「エッジ検出回路の出力を接続するサブルーチン」３６（図２）が、そのように改造を加えた設計を、例えば、ハードウェア・エンベッデッド（ＨＥ）設計ファイルの形で信号線３７上へ出力する。出力されたＨＥ設計ファイルは、この信号線３７を介して、ソフトウェア・サブルーチンである「プレース・アンド・ルート・サブルーチン」３８へ供給される。このサブルーチン３８は、例えば、Xilinx社の製品であるISE 5.1（登録商標）などであって、以上の改造が加えられた設計をダウンロード可能にするためのビット・ストリーム・ファイルを作成し、このビット・フォーマットとなったファイルを、信号線３９を介してＦＰＧＡデバイス４０へ送出する。
【００４５】
以下に、図面を参照して、図２のフローチャートに列挙した、ＤＶＭ３に含まれる複数のサブルーチンの動作について、更に詳細に説明する。
【００４６】
図３に、出力信号線５４及びゲート４４を介してクロックＣＬＫにより駆動される２つのクロック・ドメインを含む設計を示した。ゲート４３及び４４では、夫々に固有の時間遅れが生じるため、要素４２は不適当なタイミングでトリガされるおそれがあり、そのため競合状態が発生するおそれがある。この競合状態を排除すべく、図２のフローチャートに示した複数のサブルーチンによって、図３の回路が図４の回路に変換される。「クロックを探索するサブルーチン」１１は、クロックを探索することによって、信号線５０及び５４がクロック信号線であることを発見する。「クロック・ソースを探索するサブルーチン」１５は、ＣＬＫ端子４７が外部ユーザ・クロック信号端子であること、並びに、信号線５４上の信号が、信号線５０上の外部ユーザ・クロック信号からゲート４４が直接的に生成したユーザ・クロックであることを識別する。ゲート４４が送出するクロックは信号線５０上のユーザ・クロックであり、フリップフロップによって生成されたクロックではないため、ゲート４４は、先にその定義を説明した本発明における「クロック・ソース」には該当せず、なぜならば、独立した「クロック・ソース」となり得るのは、フリップフロップとラッチとのいずれかに限られるからである。
【００４７】
本発明において採用されている定義によれば、「クロック・ソース」が存在している場合にのみ、「クロックで駆動される入力端子」を備えた要素の有無が問題となる。図３の回路では、「クロック・ソースを探索するサブルーチン」１５は、「クロック・ソース」を発見しないため、「同期要素を探索するサブルーチン」１９による「クロックで駆動される入力端子」の探索は行われない。
【００４８】
「クロック・ドメインを探索するサブルーチン」２３は、フリップフロップ４１、４２が、ポジティブ・エッジ・トリガ型のフリップフロップであることを発見し、その情報を信号線２６上へ送出する。一方、ネガティブ・エッジ・トリガ型のフリップフロップを示す情報が信号線２４上へ送出されることはなく、なぜならば、サブルーチン２３は、そのようなデバイスを、信号線２２を介して供給される設計のデータ（図３）の中に発見しないからである。
【００４９】
「クロック・ドメインを探索するサブルーチン」２３は、図３の回路の中に、２つの同期要素の夫々の入力端子を駆動する２つのクロックが存在していることを発見する。従って、そこには２つの「クロック・ドメイン」が存在しており、その一方は、信号線５０を介して供給されるクロックＣＬＫであり、他方は、信号線５４を介して供給されるゲート４４の出力信号である。信号線５０及び５４のようなクロック信号線に関して、もし１本のクロック信号線が２つ以上の入力端子に接続されている場合には、「クロック・ドメインを探索するサブルーチン」２３が、各クロック・ドメインに所属する全ての要素を示すリストを作成する。図５においては、全ての要素がポジティブ・エッジ・トリガ型の要素であるため、「フリップフロップをポジティブ・エッジ・トリガ型のものに変換するサブルーチン」２５を起動する必要はない。更に、図３においては、全てのフリップフロップがＣＥ入力端子を備えているため、「フリップフロップを置き換えるサブルーチン」３０によるＣＥ型フリップフロップへの置き換えも実行されない。
【００５０】
「クロック・ドメインを探索するサブルーチン」２３が、要素４１及び４２が同期要素であることを識別したため、「エッジ検出回路を挿入するサブルーチン」３２が、それらの入力端子に夫々に「エッジ検出回路」７８及び７９を挿入する。ＭＳＣ信号線７０は、時刻ｔ４の時点（図７）で、「エッジ検出回路」７９のフリップフロップ６７をセットしてその出力Ｑを論理状態「０」にする。また、時刻ｔ５から、ゲート４３及び４４で生じる正の遅延に相当する時間が経過した時点で、ゲート６８の出力が論理状態「１」になるため、それによってゲート６２を介してフリップフロップ４２のＣＥ入力端子がイネーブルされる。時刻ｔ６の時点では、ＭＳＣ信号が、信号線７０を介して要素４２をトリガする。エッジ検出回路７８の動作も、以上のエッジ検出回路７９の動作と同様である。
【００５１】
「全ての同期要素をＭＳＣクロックに接続するサブルーチン」３４によって、ＭＳＣ信号線７０が要素４１及び４２の夫々のクロック入力端子に接続されているため、図４には共通する１本のクロック信号線７０が示されている。要素４１及び４２は、ポジティブ・エッジによってトリガされるフリップフロップであるため、「エッジ検出回路の出力を接続するサブルーチン」３６によって、エッジ検出回路７８及び７９の立上りエッジ７２及び７５が、それらに対応する同期要素４１及び４２の夫々のＣＥ入力端子に接続されている。要素４１及び４２は夫々ＣＥＡイネーブル信号とＣＥＢイネーブル信号とに接続されているため、ＡＮＤゲート６０及び６２が付加されている。ＡＮＤゲート６０及び６２はＣＥＡ及びＣＥＢイネーブル信号と信号線７２及び７５上の信号の立上りエッジとの論理和を取るものである。図４は、図２のフローチャートに示した複数のソフトウェア・サブルーチンがどのように用いられて図３に示した設計が処理されるかについての具体例を示したものである。図３に示した設計と対比したときに、図４の設計では付加されているハードウェアは、クロック・スキュー及び競合状態を自動的に排除するためのものであり、それらを排除することで、設計検証スケジュールにおける数ヶ月もの短縮が可能になる。
【００５２】
図５に示した同期要素８０、８１、及び８３は、いずれもＣＥ入力端子を備えていないため、それら要素は、「ＣＥ入力端子を備えていない全てのフリップフロップをＣＥ入力端子を備えているフリップフロップに置き換えるサブルーチン」３０によって、図６に示したように、夫々、ＣＥ入力端子を備えている要素８０ｉ、８１ｉ、及び８３ｉに置き換えられる。また、「クロック・ソースを探索するサブルーチン」１５によって、要素８２がクロック・ソースであることが認識されており、更に、要素８３は、そのＤ入力端子に競合状態信号９５が接続されているため、「分離用のフリップフロップを挿入するサブルーチン」２８によって、「バッファ」即ち分離用のブリッジ部１０６が付加されている。このバッファ１０６は、信号線７０上のＭＳＣ信号の否定信号によってトリガされるようにしてあり、そのため、フリップフロップ８３ｉのＤ入力端子は、信号線７０上のＭＳＣ信号にポジティブ・エッジが発生した時点でも安定状態にある。
【００５３】
フリップフロップが、フリップフロップ８２のようなクロック・ソース要素であるならば、エッジ検出回路はそのようなフリップフロップ８２には必要がない。
【００５４】
同期フリップフロップが、そのクロック入力端子に入力しているクロックのエッジに反応するのに対して、同期ラッチは、その「ゲーティング」入力端子に入力している電圧レベルに反応する。実用上の観点からは、ラッチのゲート・イネーブル（ＧＥ）入力端子はフリップフロップのＣＥ入力端子と同一性質のものとみなすことができ、また、ラッチのゲート（Ｇ）入力端子はフリップフロップのクロック入力端子と同一性質のものとみなすことができる。そのため、ＤＶＭソフトウェア３は、フリップフロップ及びラッチに対して、同一の処理を施すものとしてある。それゆえ、図２に示したソフトウェア・サブルーチン１１、１５、１９、２３、２４、２５、２８、及び３０は、フリップフロップに対しても、ラッチに対しても、同じように動作する。
【００５５】
図８に示した回路設計は、２つのラッチ１１０及び１１１を含んでいる。それらラッチはゲート・イネーブル（ＧＥ）入力端子を備えていないため、それらラッチは、「ＣＥ入力端子を備えていない全てのフリップフロップをＣＥ入力端子を備えているフリップフロップに置き換えるサブルーチン」３０によって、夫々、ＧＥ入力端子を備えているラッチ１１０ｉ及び１１１ｉに置き換えられる。ラッチは、みずからの「ゲーティング（クロッキング）」入力端子に入力している電圧レベルに反応するものであり、そのため、「エッジ検出回路を挿入するサブルーチン」３２によって、ラッチ１１０ｉにはイネーブル・インバータ１３１が挿入され、ラッチ１１１ｉにはイネーブル・インバータ１３２が挿入される。インバータから成るイネーブル回路１３１及び１３２は、図８の回路設計では、電圧レベルによってトリガされるようになっている。これ以外の点に関しては、それらイネーブル回路１３１、１３２は、図４に示したエッジ・イネーブル回路と同様に動作するものとなっている。
【００５６】
場合によっては、２つ以上のラッチがシリアルに接続されていて、それらラッチの全てがクロック・ソースであるということもあり、その具体例を示したのが図１０である。このようなラッチに該当するのはラッチ１４１及び１４２であり、それら２つのラッチは、独立クロック・ソースとして扱われ、図１１に示したように、それらラッチに元々接続されていた信号線１５０によって駆動される。そのため、「クロック・ソースを探索するサブルーチン」１５は、最初にラッチ１４１を発見した時点で探索を終了せずに、更に、そのラッチ１４２の入力端子が、そのラッチ１４１と同様の別のラッチ駆動要素に接続されていないかどうかを調べる。ラッチ１４１及び１４２がクロック駆動要素であるならば、それらラッチの入力端子には、イネーブル・インバータ１３１のようなイネーブル・インバータも、また、バッファ・ラッチ１６４のようなバッファ・ラッチも接続されていないはずである。ラッチ１４１及び１４２は、本来の入力信号によって直接駆動されるようにしておくことが重量であり、なぜならば、そうすることによって、可及的に早い時点で出力信号を発生させることができるからである。
【００５７】
ＤＶＭ３は、ＡＳＩＣ設計の複数の設計ファイル２に対する処理を完了したならば、続いて、複数の選択された設計セクションを、信号線７を介してシミュレータ４の中へダウンロードし、それら設計セクションの機能特性のソフトウェア・シミュレーションを行わせる。複数の選択された設計セクションは、実際には、ＡＳＩＣ設計の複数の設計ファイル２が格納されているメモリ・ロケーションに存在しているのであるが、それらメモリ・ロケーションのアドレス権限及びコントロール権限が、ＤＶＭ３から、シミュレータ４に含まれているソフトウェア・サブルーチンへ渡されるのである。図１にシミュレータ用の設計メモリ２００を描き加えてあるのは、選択された設計セクションに対して、シミュレータ４が直接的に制御を行っていることを強調して示すためである。シミュレータ４は、シミュレータ用の設計論理メモリ２００に格納されているシミュレートされた設計セクションに対して、信号線２０７を介して制御を行う。このシミュレータ用の設計論理メモリ２００は、物理メモリであるＲＡＭ１７１に含まれている多くのメモリ・ロケーションにより構成されているものである。
【００５８】
ＤＶＭ３は、以上に説明した、ＡＳＩＣからＦＰＧＡのネットリストへの自動変換プロシージャを通じて、残りの設計セクションを、信号線１０を介してハードウェア・アクセラレータ５へダウンロードし、より詳しくは、その中の、好ましくはＦＰＧＡから成るターゲット・ハードウェア１９０へダウンロードする。信号線７及び１０は、設計ファイル２の選択された設計セクションを、シミュレータ４及びハードウェア・アクセラレータ５へダウンロードするために用いられると共に、テストベンチ１８１などの刺激信号を供給するためにも用いられる。
【００５９】
テストベンチ１８１は、通常は、ユーザがキーボード１７３からの入力によって作成して、信号線１７９、プロセッサ１７０、及び信号線１７８を介してハードディスク１７２に格納されるものである。また、通常は、動作を高速化するために、テストベンチは一旦ローカルＲＡＭにセーブされ、そこからシミュレータ４及びハードウェア・アクセラレータ５へ供給される。このため、テストベンチ１８１は、ハードディスク１７２から、信号線１７８、プロセッサ１７０、信号線１７５、及びＤＶＭ３を介して、メモリの中にダウンロードされ、またそのとき、ＤＶＭ３のソフトウェア・サブルーチンのうち、「ＲＡＭ１７１を制御してダウンロード動作を制御するサブルーチン」が、テストベンチ１８１を信号線１８２上へ送出する。こうしてメモリの中にダウンロードされたテストベンチ信号は、キーボード１７３から入力される指示によって、或いは、ＤＶＭ３のサブルーチンのコマンドによって、信号線１８２を介して読み出され、読み出されたテストベンチ信号は、信号線１７６、プロセッサ１７０、及び信号線１７４を介して、シミュレータ４及びハードウェア・アクセラレータ５へ供給される。尚、信号線７及び１０は、信号線１７６、プロセッサ１７０、及び信号線１７４の組み合わせによって代替することも可能である。
【００６０】
ハードウェア・アクセラレーション・プロセスは、シミュレータ４と、ハードウェア・アクセラレータ５と、それらに付属する信号線及びソフトウェア・サブルーチンとによって実行されるものであり、このプロセスについては、米国特許第5,479,355号公報（発明者：Hyduke、発行日：1995年12月26日）に詳細に記載されている。尚、同特許公報の開示内容はこの言及をもって本願開示に組込まれたものとする。更に、ソフトウェア・シミュレータの動作については、米国特許第5,051,938号（発明者：Hyduke、発行日：1991年9月24日）に詳細に記載されている。尚、同特許公報の開示内容もこの言及をもって本願開示に組込まれたものとする。これら特許公報に記載があるため、ソフトウェア・シミュレータ４の動作については、本明細書では詳細に説明するまでもない。尚、これら２件の特許公報において使用されている用語・名称を、本明細書でも使用している。
【００６１】
シミュレータ用の設計論理メモリ２００へダウンロードされた上述した複数の選択された設計セクションを、図１２に更に詳細に示した。それら複数の設計セクションは、ＲＡＭ１７１内の様々な領域にロードされるため、図にはそれら設計セクションを、シミュレータ設計回路の第１回路〜第ｉ回路として示した。
【００６２】
シミュレータ４及びハードウェア・アクセラレータ５に、設計セクションをロードしたならば、続いて、外部信号イベントを表している刺激信号を、シミュレータ４又はハードウェア・アクセラレータ５のいずれか一方へ供給する。例えば、シミュレータ４がＵＡＲＴデバイスをシミュレートする場合には、そのＵＡＲＴデバイスの入力端子に入力される種類の信号によって、シミュレータ４及びハードウェア・アクセラレータ５の中にロードされている複数の設計セクションにより構成された設計全体を刺激するようにし、これは、連結信号線８ａ〜８ｉ、及び９ａ〜９ｎによって連結されていることによって行われる。同様に、ハードウェア・アクセラレータ５の中にロードされたＵＳＢデバイスがその入力線を介してデータ・ファイルを受取ったならば、それによってハードウェア・アクセラレータ５の内部で動作がトリガされ、そして、信号線８ａ〜８ｉ、及び９ａ〜９ｎを介して、シミュレータ４とアクセラレータ５の設計ブロックとの間で、一連のデータ交換が行われる。
【００６３】
ハードウェア・アクセラレータ５が非常に高速のクロック速度で動作するのに対して、シミュレータ４は比較的低速のソフトウェア・クロック速度で動作するため、ハードウェア環境とソフトウェア環境との両方のイベントの間の同期を取る必要がある。これに関して、図１２に示したように、シミュレータ４からアクセラレータ５への信号の流れと、アクセラレータ５からシミュレータ４への信号の流れとを、別個に取扱うようにしている。
【００６４】
ハードウェア・アクセラレータ５の中核を成しているのは、プログラマブル・ターゲット・ハードウェア１９０であり、ＤＶＭ３が信号線１０を介してハードウェア・アクセラレータ５の中にダウンロードする複数の選択された設計セクションは、このプログラマブル・ターゲット・ハードウェア１９０の中に格納される。このターゲット・ハードウェア１９０へ供給される全ての信号１９３ａ〜１９３ｉは、同時に供給されなければならず、なぜならば、それら信号１９３ａ〜１９３ｉがランダムな順番で供給されたなら、ターゲット・ハードウェアの動作がランダムに発生してしまうからである。そのため、シミュレータ４が１回のシミュレーション・サイクルを完了して、その複数の出力をハードウェア・アクセラレータ５へダウンロードするときには、そのダウンロードを、２段階のステップで実行するようにしている。先ず、ダウンロードしようとするデータの複数のバイトないしワードは、数多くのクロック・サイクルに亘って「テンポラリ・バッファ」１９６の中にロードされる。そして、シミュレータ４の中には、このシミュレータ４からバッファ１９６へのデータ転送を制御するためのソフトウェア・サブルーチンが組込まれており、このソフトウェア・サブルーチンが信号線２０２上へ送出する信号に制御されて、そのデータの複数のワードがバッファ１９６の中に格納される。
【００６５】
ハードウェア・アクセラレータ５へ供給すべき全ての信号が、バッファ１９６内で更新されたならば、シミュレータ４の中の、このシミュレータ４からハードウェア・アクセラレータ５へのデータ転送を制御するためのソフトウェア・サブルーチンが、信号線２０３上に信号を送出することにより、テンポラリ・バッファ１９６からドライバ・バッファ１９４の中へデータが転送される。このデータ転送は、最短の時間で、また、複数のチャネルの間の「タイム・スキュー」が最小となるようにして、行われなければならない。通常、このスキューは１ナノ秒〜数ナノ秒程度の大きさとなる。
【００６６】
ハードウェア・アクセラレータ５の中の複数の設計セクションは、その複数の入力端子における全ての信号遷移に対して高速で反応し、それら信号遷移は、図示例において、信号線１９３ａ〜１９３ｉを介して供給される信号遷移である。通常、ターゲット・ハードウェア１９０は、信号線１９３ａ〜１９３ｉを介して新たな信号を受取ってから、数ナノ秒以内に、出力信号線１９７ａ〜１９７ｎ上に安定状態で信号を送出する。従って、もしハードウェア・アクセラレータ５が、マイクロプロセッサや遅延線を含んでいない場合には、シミュレータ４は、信号線２０３上に信号を送出した後の最初のソフトウェア・クロック・サイクルにおいて、出力信号１９７ａ〜１９７ｎを読み取ることができる。図２に示した「プレース・アンド・ルート・サブルーチン」３８は、ターゲット・ハードウェア１９０における最も長い経路遅延の長さを算出することができるため、ターゲット・ハードウェア１９０が信号線１９７ａ〜１９７ｎ上に新たに送出したデータを、どれ程の時間が経過した後に、「ハードウェアのタイムアウトを調べるサブルーチン」２１１が読み込むべきかについてのアドバイス情報を、この「プレース・アンド・ルート・サブルーチン」３８はシミュレータ４に供給することができる。この時間の長さは、シミュレータ４のクロック期間の何個分という表し方で表すことができる。
【００６７】
しかしながら、ターゲット・ハードウェア１９０が、マイクロプロセッサや、タイマや、遅延線を含んでいる場合には、読み込み検出回路２０５を装備する必要がある。１つのプロセッサが必要な動作を完了するたびに、また、１つの遅延時間が経過するたびに、また、１つのタイマがタイムアウトするたびに、ターゲット・ハードウェア１９０が信号線２０４上に信号を送出し、読み込み検出回路２０５が信号線２０６上に、シミュレータ４によって読み取られる割込信号を送出する。シミュレータ４は、信号線２０６上のこの割込信号に反応して、入力信号バッファ１９１からのデータの読み込みを行う。シミュレータ４がこのデータの読み込みを行っている間は、信号線１９７ａ〜１９７ｎ上のデータは安定状態にあるため、入力信号バッファ１９１は、マルチプレクサで構成することが可能であり、その場合に、そのマルチプレクサが、シミュレータ４に制御されて、ターゲット・ハードウェア５における様々なテストポイントを選択するようにすればよい。
【００６８】
次に図１３及び図１４を参照して、シミュレータ４及びハードウェア・アクセラレータ５における設計ブロックの閉ループ動作について説明する。図１３はＤＶＭ３に含まれている複数のソフトウェア・サブルーチンと、それらサブルーチンに関連した、シミュレータ４とアクセラレータ５との間で行われる閉ループ動作のセットアップとを示した図である。ソフトウェア・サブルーチンである「設計ファイルを分類するサブルーチン」２３１は、ユーザの操作に従って、ＡＳＩＣ設計の複数の設計ファイル２を、ソフトウェア・シミュレータでシミュレートするファイルと、ハードウェアで実行する設計ブロックを含む別のファイルとに分類する。「設計ファイルを分類するサブルーチン」２３１は、シミュレーションのために選択されたファイルである「選択されたシミュレーション・ファイル」を、信号線２３２を介して、好ましくはＲＡＭ１７１内に存在する「選択されたシミュレーション・ファイルのデータベース」２３３へ転送する。「設計ファイルを分類するするサブルーチン」２３１は、ハードウェアで実行するためのファイルとして選択されたファイルを、信号線２３４を介して、好ましくはＲＡＭ１７１内に存在する「選択されたハードウェア実行ファイルのデータベース」２３５に格納する。「選択されたシミュレーション・ファイルのデータベース」２３３の中の情報は、信号線７を介してシミュレータへ供給される。一方、「選択されたハードウェア実行ファイルのデータベース」２３５の中の情報に対しては、図２に示した、ＤＶＭ３に含まれている一連のサブルーチンによって更なる処理が施される。
【００６９】
また、サブルーチン２３７によって、信号線２３６上の情報の解析が行われており、この信号線２３６上の情報は、シミュレータ４に現在何がロードされているか、ハードウェア・アクセラレータ５に次に何をダウンロードするか、それに、シミュレータ４の複数の出力信号のうちのどの出力信号が次にハードウェア・アクセラレータの入力信号線を駆動するかについてのデータを提供している。この情報は、信号線２３８を介してＳＨＡデータベース２３９に格納される。このデータベース２３９は、ＲＡＭ１７１内に構築することが好ましく、シミュレータ４のサブルーチンによって参照される。そして、シミュレータ４のソフトウェア・サブルーチンは、この情報に基づいて、シミュレータ４が「出力信号テンポラリ・バッファ」１９６へ送出し、そして、そこからドライバ・バッファ１９４へ転送されるデータの設定を行う。
【００７０】
「ハードウェア・アクセラレータからシミュレータへデータが供給されるテストポイントを探索するサブルーチン」２４１は、ハードウェア・アクセラレータ５の出力信号線から次に入力信号を受取るシミュレータ４内のテストポイントを識別する。この情報は、信号線２４２を介してＨＡＳデータベース２４３に格納される。ＨＡＳデータベース２４３は、ＲＡＭ１７１内に構築することが好ましい。このＨＡＳデータベース２４３内の情報に基づいて、信号線から「入力信号バッファ」１９１へデータが供給されると共に、バッファ１９１内の信号の配列が設定される。
【００７１】
シミュレータ４の中とハードウェア・アクセラレータ５の中とにロードされた複数の設計ブロックによって形成される閉ループ構成を、それに刺激を付与することによりアクティブにさせる方法の１つは、ターゲット・ハードウェア（図１２）の信号線１９１上に送出する信号によるものであり、もう１つは、「テストベンチ・データベース」１８１が駆動する信号線１８２上の信号によるものである。ターゲット・ハードウェア１９０へ入力している信号線１８９上に刺激信号が送出されたならば、ターゲット・ハードウェア１９０は、その新たな入力条件をエミュレートして、信号線２０９上に出力信号を出力する。ターゲット・ハードウェア１９０がマイクロプロセッサを含んでいるものである場合には、「割込またはハードウェア・タイムアウト・サブルーチン」２１１が割込信号を発生するようにする。このサブルーチン２１１は、ハードウェアで構成することも、ソフトウェアで構成することもでき、また両者を組合せて構成してもよい。同様に、ターゲット・ハードウェア１９０がタイマや遅延線を含むものである場合にも、「割込またはハードウェア・タイムアウト・サブルーチン」２１１が、そのタイマや遅延線が動作を終了した時点で信号線２１２上に信号を送出するようにしておけばよい。一方、ターゲット・ハードウェアが、プロセッサや、タイマや、遅延線を含んでいない場合には、「割込またはハードウェア・タイムアウト・サブルーチン」２１１が、シミュレータ４の入力を制御するための制御信号をレジスタ１９１の中へダウンロードするようにし、そして、信号線１９０を介してデータを受取ったときからハードウェア・クロック・サイクル１回分または数回分の後に、信号線２１２上に信号が送出されるようにしておくことが好ましい。この信号線２１２上の信号は、「入力信号バッファ」１９１からデータを読み取ってよいことをシミュレータ４に知らせるものである。
【００７２】
「入力信号バッファからの読み込みを行うサブルーチン」２１３は、シミュレータ４に含まれている複数のソフトウェア・サブルーチンのうちの１つであって、バッファ１９１からデータを読み込んで、そのデータをＲＡＭ１７１内の適当なロケーションに格納するものであり、これらはシミュレータ４の制御下で行われる。この動作が完了したならば、シミュレータ４は信号線２１４上に信号を送出する。この信号線２１４上のデータに反応して、「入力信号に変化があったか否かを調べるサブルーチン」２１５が、シミュレータ４へのそれまでの入力信号のデータと、この新たな入力信号のデータとが相違しているか否かをチェックする。両者の間に相違があったならば、シミュレーション・サイクルを実行する。一方、バッファ１９１から供給された入力信号に変化がなかったならば、シミュレータ４は、シミュレーションを実行せず、ハードウェア・デバイスから新たな１組の入力信号２２８が入力してくるのを待つ。それら入力信号２２８は、信号線１８９を介してターゲット・ハードウェア１９０へ供給される新たなハードウェア信号である。
【００７３】
シミュレータ４は、「設計のシミュレーションを実行するサブルーチン」２１７によってシミュレーション・サイクルを実行した後に、信号線２１８上に、シミュレーション・データを送出する。このとき、「信号線上のデータが安定状態か否かを調べるサブルーチン」２１９が、シミュレーションが完了したか否かをチェックしている。シミュレーション・サイクルが完了したときに、この「信号線上のデータが安定状態にあるか否かを調べるサブルーチン」２１９は、テンポラリ・バッファ１９６へのデータ転送を制御する出力を送出する。このデータ転送は、コンピュータ１の内部バス構造に対応した３２ビットまたは６４ビットのワードによって行われるようにしておくのがよい。この出力信号テンポラリ・バッファ１９６へ転送される信号線２２２上のワードを、「全ての信号が転送されたか否かを調べるサブルーチン」２２３がモニタしており、この出力信号テンポラリ・バッファ１９６へ最後のデータ・ワードが転送されたならば、「全ての信号が転送されたか否かを調べるサブルーチン」２２３は、信号線２２４上にコマンドを送出し、このコマンドは、テンポラリ・バッファ１９６から、ターゲット・ハードウェアを直接制御している出力信号ドライバ・バッファ１９４へ、データを転送することを命じるコマンドである。そして、「ドライバ・バッファへのデータ転送を行うサブルーチン」２２５が、信号線２０３上に信号を送出することによって、出力信号テンポラリ・バッファ１９６から出力信号ドライバ・バッファ１９６へのダウンロードが実際に実行される。
【００７４】
シミュレータ４とハードウェア・アクセラレータ５とを組合せた以上の構成は、信号線１８２を介して供給されるテストベンチ信号１８１によって刺激されたならば、「設計のシミュレーションを実行するサブルーチン」２１７によって、設計のシミュレーションの１回のサイクルが実行される。このとき、「信号線上のデータが安定状態にあるか否かを調べるサブルーチン」２１９が、信号線２１８をモニタしており、そのシミュレーション・サイクルが完了したときに、その完了を認識して信号線２２０上に信号を送出する。この信号が送出されたときには、シミュレーション・データが、安定状態になっていて、ターゲット・ハードウェア１９０へ供給可能な状態になっている。これ以後、以上に説明したサイクルが反復される。
【００７５】
図面に示して本明細書において説明した実施の形態は、具体例を提示することを目的としたものであって、本発明はこの実施の形態に限定されるものではなく、本発明の範囲は特許請求の範囲に記載した通りのものである。
【図面の簡単な説明】
【００７６】
【図１】ハードウェア・アクセラレータを備え設計シミュレータを実行するコンピュータ・システムのブロック図である。
【図２】設計ファイルをＡＳＩＣアプリケーションからＦＰＧＡインプリメンテーションへ変換するための一連のソフトウェア・サブルーチンを列挙したフローチャートである。
【図３】２つのクロック・ドメインを含み競合状態を伴うＡＳＩＣ設計の典型例を示した図である。
【図４】２つのクロック・ドメインを単一のクロック・ドメインに変換した設計を示した図である。
【図５】複数のＤ型フリップフロップと２つのクロック・ドメインとを含み競合状態を伴う設計を示した図である。
【図６】単一クロック・ドメインに変換したＤ型フリップフロップを含む設計を示した図である。
【図７】クロック・タイミングを示したチャートである。
【図８】複数のラッチを含み競合状態を伴う回路設計のブロック図である。
【図９】複数のラッチを含み競合状態を排除した回路設計のブロック図である。
【図１０】複数のラッチを含み競合状態を伴う別の回路設計を示したブロック図である。
【図１１】複数のラッチを含み競合状態を伴う別の回路設計を示したブロック図である。
【図１２】ハードウェア検証ブロックとソフトウェア検証ブロックとの間の接続を示したブロック図である。
【図１３】設計ファイルをシミュレーション・ファイルとハードウェア・アクセラレータ・ファイルとに分類することを示したブロック図である。
【図１４】シミュレータとハードウェア・アクセラレータとの間のデータ転送のための複数のサブルーチンを示したフローチャートである。
【図１】
2007508638.tif 000003
【図２】
2007508638.tif 000004
【図３】
2007508638.tif 000005
【図４】
2007508638.tif 000006
【図５】
2007508638.tif 000007
【図６】
2007508638.tif 000008
【図７】
2007508638.tif 000009
【図８】
2007508638.tif 000010
【図９】
2007508638.tif 000011
【図１０】
2007508638.tif 000012
【図１１】
2007508638.tif 000013
【図１２】
2007508638.tif 000014
【図１３】
2007508638.tif 000015
【図１４】
2007508638.tif 000016
【国際調査報告】
2007508638.tif 000017