(57)【特許請求の範囲】
【請求項１】
ハードウェア記述言語に基づく論理回路が形成された半導体デバイスの回路検証装置であって、
前記半導体デバイスのエミュレーションを実行するための信号を含む制御信号を当該半導体デバイスへ入力するエミュレーション部と、前記半導体デバイスの論理回路に対応したハードウェア記述言語により当該論理回路のシミュレーションを実行するシミュレーション部と、前記半導体デバイスのエミュレーション開始後にシミュレーションに係るパラメータを当該半導体デバイスから取得する取得部と、前記取得部が取得したパラメータを前記シミュレーション部によるシミュレーションに適用する設定部と、前記半導体デバイスの論理回路を前記取得部によるパラメータ取得前に修正する回路修正部とを備え、
前記回路修正部は、前記半導体デバイスの論理回路を修正するとき、当該論理回路にてパラメータを記憶する複数の記憶素子が前記制御信号によりリング型のシフトレジスタとして動作するためのバイパス配線と、前記バイパス配線を介して当該複数の記憶素子のパラメータを読み出し且つ該パラメータを前記取得部へ出力する読出部とを当該論理回路に付加することを特徴とする回路検証装置。
【請求項２】
さらに、前記半導体デバイスのエミュレーション中に当該半導体デバイスの信号が所定条件に該当する場合に前記エミュレーション部に対し当該エミュレーションの停止命令を発行する停止判定部を備え、
前記取得部は、前記停止判定部により停止命令が発行されたとき、前記半導体デバイスからパラメータを取得することを特徴とする請求項１記載の回路検証装置。
【請求項３】
さらに、前記取得部が取得したパラメータと所定条件との照合により前記シミュレーション部によるシミュレーションを実行するか否かを判定するシミュレーション判定部を備えることを特徴とする請求項１又は２記載の回路検証装置。
【請求項４】
前記エミュレーション部は、前記半導体デバイスがクロック信号を生成するＰＬＬ回路を具備する場合、前記半導体デバイスのエミュレーション中は前記ＰＬＬ回路に対しクロック信号の出力を指示し、前記半導体デバイスからパラメータを取得する間は前記ＰＬＬ回路に対しクロック信号の出力停止を指示することを特徴とする請求項１乃至３のいずれか１項に記載の回路検証装置。
【請求項５】
ハードウェア記述言語に基づく論理回路が形成された半導体デバイスにおいて該半導体デバイスのシミュレーションに係るパラメータを記憶する複数の記憶素子がリング型のシフトレジスタとして動作するための配線を当該論理回路に付加し、
前記半導体デバイスのエミュレーションを開始し、
前記エミュレーションの開始後、前記複数の記憶素子を前記リング型のシフトレジスタとして動作させて当該記憶素子のパラメータを読み出し、
前記半導体デバイスの論理回路に対応したハードウェア記述言語に前記読み出したパラメータを適用して当該論理回路のシミュレーションを実行することを特徴とする回路検証方法。
【請求項６】
さらに、前記半導体デバイスのエミュレーション中に当該半導体デバイスの信号が所定条件に該当する場合に前記エミュレーションを停止し、前記エミュレーションの停止後に前記複数の記憶素子のパラメータを読み出すことを特徴とする請求項５記載の回路検証方法。
【請求項７】
さらに、前記記憶素子から読み出したパラメータと所定条件とを照合し、当該パラメータが前記所定条件に対応する場合にシミュレーションを実行することを特徴とする請求項５又は６記載の回路検証方法。
【請求項８】
前記半導体デバイスがクロック信号を生成するＰＬＬ回路を具備する場合、前記半導体デバイスのエミュレーション中は前記ＰＬＬ回路に対しクロック信号の出力を指示し、前記半導体デバイスからパラメータを取得する間は前記ＰＬＬ回路に対しクロック信号の出力停止を指示することを特徴とする請求項５乃至７のいずれか１項に記載の回路検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体デバイスの検証技術に関し、特に、ハードウェア記述言語に基づく論理回路が形成されたデバイスの動作を検証する技術に関する。
【背景技術】
【０００２】
半導体技術の進歩により、半導体デバイスにおける論理ＬＳＩ（Large Scale Integrated circuit）の集積度が年々向上し、大規模なシステムを１チップに集積することが可能になっている。また、半導体デバイスの製造コストは、極めて高価であるとともに、その製造期間には１月以上を必要とするため、製造前に十分な検証を行うことが重要である。
【０００３】
半導体デバイスの検証は、設計の様々なフェーズで行われる。設計プロセスは、初期設計における抽象的なレベルから、最終段階における詳細な製造レベルに至るまで、各レベルに応じた論理情報を取り扱う。例えば、初期設計の段階では、入出力関係程度を確定する抽象レベルの論理情報を取り扱い、機能設計段階では、論理各部の機能を確定する機能レベルの論理情報を取り扱う。そして、最終的な詳細設計段階では、論理構造を確定する構造レベルの論理情報が取り扱われる。上述の各設計段階の論理情報は、一般に使用される各種ハードウェア記述言語（SystemC、SystemVerilog、Verilog-HDL、VHDL等）により表現することが可能である。
【０００４】
半導体デバイスの論理検証や、複数の半導体デバイスを使用したシステムの論理検証の方法には、ソフトウェアシミュレータによるものと、ハードウェアエミュレータによるもの、実際の半導体デバイスを利用したものがある。
【０００５】
ソフトウェアシミュレータは、ハードウェア記述言語で記述された論理情報をコンピュータプログラムとして実行するため、種々の設計段階において使用することができ、また、使用するハードウェア記述言語の変数等を容易に観測できるという利点を持っている。
【０００６】
一方、実際の半導体デバイスによる検証やハードウェアエミュレータは、ハードウェアを用いることから、論理検証をソフトウェアシミュレータよりも高速に実行することができる。ハードウェアエミュレータは、一般的に、ＦＰＧＡ（Field Programmable Gate Array）やＦＰＩＤ（Field Programmable Interconnect Device）などで構成され、外部からの入力信号により所望の論理構造を編成することができる。
【０００７】
ソフトウェアシミュレータの具体例としては、日本シノプシス株式会社のＶＣＳ（商標）やメンター・グラフィックス・ジャパンのＭｏｄｅｌＳｉｍ（商標）などが挙げられる。ハードウェアエミュレータとしては、特許文献１や特許文献２に代表されるＦＰＧＡエミュレータが挙げられる。また、特許文献３には、ソフトウェアシミュレータとハードウェアエミュレータとを組み合わせた論理検証装置が開示されている。
【０００８】
ソフトウェアシミュレータの問題点は、動作速度が遅いということである。その理由は、回路全体の動作をコンピュータプログラムにより実現するため、クロックサイクルごとに変化する全ての値を計算しなければならないからである。近年、ＣＰＵの動作速度は高速化しているが、検証対象の回路規模も大型化しているため、ソフトウェアシミュレータの速度は遅くなるばかりで、最近では最大でも１００Ｈｚ程度となっている。実際のＬＳＩの動作速度を例えば１ＧＨｚとすると、そのシミュレーションの速度は、ＬＳＩの1/10,000,000の速度となる。よって、このＬＳＩの１秒の動作をシミュレーションするためには、10,000,000秒＝約１１５日が必要になる。
【０００９】
一方、実際の半導体デバイスによる検証や、ＦＰＧＡを利用したハードウェアエミュレータは、回路の内部信号の観測性が悪い、すなわち回路内の信号の状態を外部から観測しにくいという問題点がある。実際の半導体デバイスの場合、一部の信号を観測するだけであれば、その信号を外部ピンから出力すればよいが、観測しようとする信号を変更することは困難である。なぜなら、それは、半導体デバイスの再製造を意味し、コストの面で現実的でないからである。
【００１０】
また、ＦＰＧＡを利用したハードウェアエミュレータの場合は、特定の信号を観測するだけであれば、回路を動作させている速度と同じ速度で観測することは可能である。しかしながら、回路の動作途中で、例えば、観測する信号を追加する、あるいは、信号の値を変更することは困難である。なぜなら、そのためには、ハードウェア記述言語の修正、合成（ハードウェア記述言語で記載された内容をネットリストにする作業）、配置配線（ネットリストをＦＰＧＡに実装する形式にする作業）が必要となり、作業に膨大な時間を要するからである。
【００１１】
これらの問題点に対処するための手法が、例えば、特許文献４に記載されている。特許文献４に記載の手法は、エミュレーション中にエミュレーション装置の記憶素子の値を所定の間隔でダンプし、回路の動作に不具合が起きたとき、ダンプしたデータをシミュレーション装置に読み込み、シミュレーションを開始するというものである。
【特許文献１】特開２０００−１３２４２０号公報
【特許文献２】特開２００１−２０９５５６号公報
【特許文献３】特開２０００―２１５２２６号公報
【特許文献４】特開平１１―２４９９３０号公報
【特許文献５】特願２００６−５５３０６３号公報、段落００８５
【非特許文献１】ザイリンクス株式会社、Virtex-4 Configuration Guide、２００７年６月２１日発行
【発明の開示】
【発明が解決しようとする課題】
【００１２】
上記特許文献４の手法では、シミュレーションに必要な記憶素子にスキャン用のフリップフロップ（SFF）を追加することで、上記動作が実現される。しかしながら、半導体デバイスのシミュレーションには、そのデバイスにある全ての記憶素子が持つパラメータを必要とする。したがって、上記特許文献４の手法にあっては、回路中のフリップフロップの数が元の２倍となる。そのため、回路の規模が大型化し、本来の回路レイアウトに影響を及ぼす可能性がある。
【００１３】
本発明の目的は、半導体デバイスのシミュレーションに必要なパラメータを読み出すための構成を簡素化することにある。
【課題を解決するための手段】
【００１４】
本発明に係る回路検証装置は、ハードウェア記述言語に基づく論理回路が形成された半導体デバイスの回路検証装置であって、前記半導体デバイスのエミュレーションを実行するための信号を含む制御信号を当該半導体デバイスへ入力するエミュレーション部と、前記半導体デバイスの論理回路に対応したハードウェア記述言語により当該論理回路のシミュレーションを実行するシミュレーション部と、前記半導体デバイスのエミュレーション開始後にシミュレーションに係るパラメータを当該半導体デバイスから取得する取得部と、前記取得部が取得したパラメータを前記シミュレーション部によるシミュレーションに適用する設定部と、前記半導体デバイスの論理回路を前記取得部によるパラメータ取得前に修正する回路修正部とを備え、前記回路修正部は、前記半導体デバイスの論理回路を修正するとき、当該論理回路にてパラメータを記憶する複数の記憶素子が前記制御信号によりリング型のシフトレジスタとして動作するためのバイパス配線と、前記バイパス配線を介して当該複数の記憶素子のパラメータを読み出し且つ該パラメータを前記取得部へ出力する読出部とを当該論理回路に付加する。
【００１５】
本発明に係る回路検証方法は、ハードウェア記述言語に基づく論理回路が形成された半導体デバイスにおいて該半導体デバイスのシミュレーションに係るパラメータを記憶する複数の記憶素子がリング型のシフトレジスタとして動作するための配線を当該論理回路に付加し、前記半導体デバイスのエミュレーションを開始し、前記エミュレーションの開始後、前記複数の記憶素子を前記リング型のシフトレジスタとして動作させて当該記憶素子のパラメータを読み出し、前記半導体デバイスの論理回路に対応したハードウェア記述言語に前記読み出したパラメータを適用して当該論理回路のシミュレーションを実行するという方法である。
【発明の効果】
【００１６】
本発明によれば、半導体デバイスのシミュレーションに必要なパラメータを読み出すための構成を簡素化することができる。これにより、論理回路の大型化を防ぐことができる。
【発明を実施するための最良の形態】
【００１７】
図１に、本発明の第１の実施形態の構成を示す。本実施形態の回路検証装置1001は、ハードウェア記述言語に基づく論理回路が形成された半導体デバイスの動作を検証するための装置である。半導体デバイス102を除く図示の構成は、回路検証装置1001においてＣＰＵのような制御ＩＣ（図示略）がプログラムを実行することにより実現される機能構成を表す。
【００１８】
ハードウェア記述言語100は、半導体デバイス102の論理回路に対応した、ＳｙｓｔｅｍＣ、ＳｙｓｔｅｍＶｅｒｉｌｏｇ、Ｖｅｒｉｌｏｇ、ＶＨＤＬのようなハードウェア記述言語である。なお、ＪＴＡＧ（IEEE1149.1）やＢＩＳＴ（Build-In Self Test）のように、検証の対象外やシミュレーションに不要な回路モジュールはハードウェア記述言語100から除外しておいてもよい。
【００１９】
半導体デバイス102の論理回路は、上記のようなハードウェア記述言語で記述された回路をネットリストに変換し、そのネットリストをもとに作成されたマスクデータから形成される。半導体デバイス102の論理回路は、ハードウェア記述言語により動作が規定されたものであればよく、その形成過程は、上記のものに限定されない。ハードウェア記述言語による論理回路が、後述するエミュレーション制御部140からの入力信号やクロック信号に従って動作することで、半導体デバイス102のエミュレーションが実行される。
【００２０】
回路検証装置1001において、ユーザI/F部120は、回路検証装置1001に対する外部からの指示を入力するためのインターフェースである。外部からの指示としては、半導体デバイス102の動作の開始・停止、取得部107の動作の開始、シミュレーション部110の動作の開始・停止、設定部111の動作の開始・停止などがある。また、半導体デバイス102について、エミュレーションやシミュレーションの状況をディスプレイ装置（図示略）に表示する。
【００２１】
エミュレーション制御部140は、本発明におけるエミュレーション部に相当し、本実施形態では入力信号制御部104およびクロック信号制御部105から構成される。入力信号制御部104は、予め設定されている入力信号情報103に基づいて、半導体デバイス102のエミュレーションに必要な信号を入力する。クロック信号制御部105は、半導体デバイス102の動作基準となるクロック信号の入力を制御する。
【００２２】
取得部107は、後述する回路修正部130により半導体デバイス102に設けられる読出部101Bを利用して、エミュレーション時の動作に関わるパラメータを半導体デバイス102から取得し、それを読出パラメータ106として保存する。
【００２３】
制御部108は、半導体デバイス102が適正に動作するように入力信号及びクロック信号のタイミングを制御しながら、ユーザI/F部120から入力された指示を入力信号制御部104、クロック信号制御部105、取得部107へ伝える。なお、回路検証装置1001から制御部108を省略してもよい。その場合、入力信号制御部104とクロック信号制御部105とが協調して適切な信号を半導体デバイス102に与え、取得部107をユーザI/F部120から直接制御する。
【００２４】
シミュレーション部110は、日本シノプシス株式会社のＶＣＳ（商標）や、メンター・グラフィックス・ジャパン株式会社のＭｏｄｅｌＳｉｍ（商標）などに代表される、いわゆるソフトウェアシミュレータである。シミュレーション部110は、ハードウェア記述言語100と入力信号情報103とを読み込み、半導体デバイス102が動作を停止した時点からのシミュレーションを実行する。
【００２５】
設定部111は、シミュレーション部110が使用するハードウェア記述言語100のパラメータに、取得部107が半導体デバイス102から取得した読出パラメータ106を設定する。この設定部111としては、ハードウェア記述言語100の規格が、例えばＶｅｒｉｌｏｇである場合、IEEE1164で定義されているＶｅｒｉｌｏｇ ＰＬＩ（Programming Language Interface）を適用することができる。また、ハードウェア記述言語100の規格が上記以外でも、シミュレーション部110が持つ同等の機能を用いて設定部111を実現することが出来る。例えば、シミュレーション部110がメンター・グラフィックス・ジャパン株式会社のＭｏｄｅｌＳｉｍ（商標）であれば、設定部111としてＳｉｇｎａｌ Ｓｐｙ（商標）を利用すればよい。
【００２６】
回路修正部130は、取得部107が半導体デバイス102からパラメータ（106）を取得するために、ハードウェア記述言語100を用いて半導体デバイス102の論理回路を修正する。この修正において、回路修正部130は、半導体デバイス102のフリップフロップ、ラッチ、ＲＡＭ等の複数の記憶素子をシフトレジスタとして動作させるためのバイパス配線101Aおよび読出部101Bを付加する。
【００２７】
図２及び図３を参照して、回路修正部130による回路の修正に関し、例を挙げて説明する。図２は、半導体デバイス102における記憶素子周辺の修正前の構成である。図示の構成において、Ｎ個の記憶素子201-1〜201-Nは、クロック信号制御部105（図１）からの共通のクロック信号が供給され、また、組合せ回路を挟んで直列的に配置されている。かかる構成に対し、回路修正部130は、半導体デバイス102のシミュレーションが開始されるまでに、例えばエミュレーション開始時などに、図３に示すような修正を行う。
【００２８】
図３より、修正後の半導体デバイス102には、バイパス配線101A（101A-1〜101A-N）および読出部101Bが追加されている。記憶素子201-1〜201-Nは、バイパス配線101Aにより、各組合せ回路を迂回してリング状に接続される。また、各記憶素子（201-1〜201-N）の前段には、その記憶素子への入力を読出部101Bの制御により切り替えるためのセレクタ302-1〜302-Nが追加される。この修正後の半導体デバイス102の動作については、後に説明する。
【００２９】
図４に示すフローチャートに沿って、図１の構成による動作を説明する。回路検証装置1001は、半導体デバイス102の動作を検証するにあたり、まず、回路修正部130を起動し、半導体デバイス102における記憶素子周辺の回路をハードウェア記述言語100を用いて修正する（ステップS400）。ここでは、一例として、前述の図３に示す構成のように修正されたとする。
【００３０】
次に、制御部108が、ユーザI/F部120からの指示に従い、回路検証装置1001の各部が適切に動作するように初期設定を行う（ステップS401）。初期設定は、例えば、各部への起動指示や、起動に必要な情報の設定を行い、また読出部101Bは、組合せ回路からの出力を記憶素子(201-1〜201-N)へ入力するよう、各セレクタ(302-1〜302-N)を設定する。
【００３１】
初期設定が完了すると、ユーザI/F部120からの指定により、制御部108がエミュレーション制御部140を制御し、半導体デバイス102に適切な入力信号およびクロック信号を与える。これにより、半導体デバイス102のエミュレーションが開始する（ステップS402）。このとき、入力信号制御部104は、入力信号として入力信号情報103からデータを読み込み、値を設定する。
【００３２】
エミュレーション開始後、回路検証装置1001は、半導体デバイス102の詳細な動作状況を検証するために、ある時点までの動作、あるいは、ある時点から先の動作についてシミュレーションを行う。そのある時点、すなわちシミュレーションのタイミングは、例えば、オペレータからの指示、あるいは、タイマ制御により、ユーザI/F部120が認識できるようにしておく。ユーザI/F部120は、シミュレーションのタイミングが到来したことを認識すると、その旨を制御部108へ通知する。
【００３３】
制御部108は、エミュレーション制御部140に対し、エミュレーションのためのクロック信号および入力信号を停止するよう指示する。これにより、いったん半導体デバイス102のエミュレーションが停止する（ステップS403）。
【００３４】
続いて、制御部108は、取得部107を起動し、現時点で各記憶素子に保存されているパラメータを半導体デバイス102から取得するよう指示する。指示を受けた取得部107は、半導体デバイス102の読出部101Bに対し、パラメータの読み出しを要求する。
【００３５】
ここで、図３を参照して、半導体デバイス102の読出部101Bが各記憶素子（201-1〜201-N）のパラメータを読み出す動作を説明する。読出部101Bは、半導体デバイス102の通常の動作時、すなわちエミュレーション中は、組合せ回路からの出力を記憶素子（201-1〜201-N）へ入力するよう、各セレクタ（302-1〜302-N）を設定する。
【００３６】
一方、エミュレーション開始後、取得部107からパラメータの読み出し要求を受けたとき、読出部101Bは、記憶素子201-1〜201-N間をバイパス配線101Aにより接続するようセレクタ（302-1〜302-N）を切り替える。これにより、記憶素子201-1〜201-Nが、バイパス配線101Aを介してリング状に直列接続される。
【００３７】
続いて、読出部101Bは、記憶素子201-1〜201-Nをリング型のシフトレジスタとして動作させ、出力端が自身（101B）に接続されている特定の記憶素子201-Nからパラメータを順次読み込む。シフトレジスタとして動作させるために、読出部101Bは、各記憶素子（201-1〜201-N）に共通のクロック信号を与える。
【００３８】
各記憶素子（201-1〜201-N）は、１クロックごとに、自身で保持するパラメータを出力側のバイパス配線101Aを介して後段の記憶素子へ供給し、また、前段の記憶素子からのパラメータを入力側のバイパス配線101Aを介して受け取る。これにより、リング状の記憶素子201-1〜201-Nにおいて、パラメータの記憶場所が順次シフトする。
【００３９】
したがって、上記のクロック動作をＮ回繰り返すことにより、Ｎ個の記憶素子（201-1〜201-N）のパラメータを１つの記憶素子（201-N）から読み出すことができる。なお、前述したように、記憶素子201-1〜201-Nはリング状に接続されることから、例えば、図３の左端の記憶素子201-1が出力したパラメータは、右端の記憶素子201-Nへ到達した後、一巡して元の記憶素子201-1へ戻る。よって、パラメータの読み出し処理後に、各記憶素子のパラメータが変更されることはない。
【００４０】
上記動作により、読出部101Bが記憶素子から順次パラメータを読み出すと、それらが取得部107へ供給される。取得部107は、読出部101Bからのパラメータを読出パラメータ106として保存する（ステップS404）。
【００４１】
読出パラメータ106の保存が完了すると、ユーザI/F部120は、シミュレーション部110および設定部111を起動する。起動したシミュレーション部110は、ハードウェア記述言語100を読み込み、シミュレーションを準備する（ステップS405）。設定部111は、シミュレーション部110が読み込んだハードウェア記述言語100のパラメータに、半導体デバイス102からの読出パラメータ106を設定する（ステップS406）。
【００４２】
シミュレーション部110は、設定された読出パラメータ106により、半導体デバイス102の動作についてシミュレーションを実行する（ステップS407）。これにより、エミュレーション開始（S402）から停止（S403）までの半導体デバイス102の動作を省略することができ、さらに、エミュレーション停止後の半導体デバイス102の動作がシミュレートされ、その様子がユーザI/F部120により画面表示される。
【００４３】
このように、本実施形態は、半導体デバイス102の記憶素子をリング型のシフトレジスタとして動作させることで、各記憶素子のパラメータを読み出す。したがって、パラメータ読み出しのために論理回路が大型化することを防止できる。また、ハードウェアによるエミュレーションと、ソフトウェアシミュレーションとを併用することから、動作速度および動作の観測性の双方を満足させることができる。
【００４４】
本実施形態では、クロック信号が１種類の場合について説明したが、記憶素子によってクロック周波数が異なっていてもよい。その場合、エミュレーション中は、各記憶素子に対し本来のクロックを分配し、各記憶素子の値を取得するときは、共通のクロックを与えるようにする。これにより、クロック周波数が異なる記憶素子もバイパス配線101Aを介して、リング状に直接接続することができる。
【００４５】
また、記憶素子を複数のブロックに分け、ブロック単位でリングを構成することも可能である。このようにすることで、記憶素子のパラメータを取得するときに、複数のリングを同時に動かすことが可能となり、パラメータを取得するまでの時間を短縮することが可能となる。
【００４６】
本発明の第２の実施形態について説明する。図５に、本実施形態の回路検証装置1002の構成を示す。回路検証装置1002の構成は、前述の回路検証装置1001（図１）に停止判定部150を追加したものに相当する。図１の実施形態では、半導体デバイス102のエミュレーションの停止タイミングをユーザI/F部120から指示したが、本実施形態は停止判定部150により行う。
【００４７】
停止判定部150は、エミュレーション開始後に、半導体デバイス102の状態が所定条件を満たす場合に、そのエミュレーションを停止すると判定する。判定のための条件としては、１）ある信号の値が特定の値になった場合、２）ある信号の値が特定の値の範囲内・範囲外になった場合、３）前記１）または２）が所定回数発生した場合、４）ブレークが発生した場合、５）複数の信号に対して前記１）〜４）を組み合わせた場合等、検証内容に応じて適宜設定する。
【００４８】
停止判定部150は、上記のような判定を行うために、例えば、半導体デバイス102の一部のパラメータや動作状態を表す信号をデバイスの外部端子を通じて取得する。なお、本実施形態のように停止判定部150を半導体デバイス102の外部に設けることに代えて、半導体デバイス102内に停止判定部150と同等な機能を形成しておいてもよい。
【００４９】
回路検証装置1002の動作は、下記の点を除き、基本的には図４に沿ったものと同様である。本実施形態では、初期設定（ステップS400）において、停止判定部150に停止条件を設定する。また、条件が成立したことにより、エミュレーションを停止するとき（ステップS402）、停止判定部150が、エミュレーション制御部140に対し、半導体デバイス102への入力信号およびクロック信号を停止するよう指示する。
【００５０】
本実施形態によれば、エミュレーションの停止タイミングを、そのエミュレーションの実際の状況に応じて決定することができる。
【００５１】
本発明の第３の実施形態について説明する。図６に、本実施形態の回路検証装置1003の構成を示す。回路検証装置1003の構成は、前述の回路検証装置1001（図１）にシミュレーション判定部160を追加したものに相当する。シミュレーション判定部160は、取得部107が半導体デバイス102から取得した読出パラメータ106を用いて、シミュレーションの要否を判定する。
【００５２】
図７に示すフローチャートに沿って、本実施形態の動作を説明する。回路修正部130による回路の修正後、半導体デバイス102で開始したエミュレーションが停止し、その半導体デバイス102からパラメータを読み出すまでの手順（ステップS700〜S704）は、図４に沿った前述の手順（S400〜S404）と同様であり、説明を省略する。
【００５３】
パラメータの取得が完了すると、シミュレーション判定部160が、その読出パラメータ106を所定の判定基準に照らし合わせ、この時点でシミュレーションを行うべきか否かを判定する（ステップS705）。判定基準は、例えば、今回の読出パラメータ106の値が、１）特定の値になった場合、２）特定の値の範囲内・範囲外になった場合、３）前記１）または２）が所定回数発生した場合、４）ブレークが発生した場合、５）複数の信号に対して前記１）〜４）を組み合わせた場合等、検証内容に応じて適宜設定する。はシミュレーションを行うと判定するといったものである。
【００５４】
上記判定の結果、シミュレーションを行う場合は（ステップS706：Yes）、前述の実施形態（図４：S405〜S407）と同様に、シミュレーション部110を起動し、読出パラメータ106に基づくシミュレーションを実行する（ステップS707）。
【００５５】
一方、シミュレーションを行わないと判定した場合（ステップS706：No）、シミュレーション判定部160は、エミュレーション制御部140にエミュレーションの再開を指示する（ステップS708）。これにより、半導体デバイス102に対するクロック信号等の供給が再開されると共に、一旦停止していたエミュレーションが再開される。その後、エミュレーションが停止されたときは、上記と同様な手順で、シミュレーションの要否を判定する。
【００５６】
本実施形態によれば、シミュレーションするか否かを半導体デバイス102のパラメータの状態に応じて決定することができる。また、前述したように、半導体デバイス102からパラメータを読み出す際は、各記憶素子をリング状のシフトレジスタとして動作させることから（図３）、各記憶素子の記憶状態が、読み出し前と同じ状態に維持される。したがって、シミュレーションを行わない場合に、エミュレーションを直ちに再開させることができる。
【００５７】
本発明の第４の実施形態について説明する。図８に、本実施形態の回路検証装置1004の構成を示す。回路検証装置1004は、検証対象の半導体デバイス（102）が複数ある場合を想定したものである。本実施形態は、ハードウェア記述言語の種別が異なる２つの半導体デバイス（102-1,102-2）を検証する構成であるが、検証対象の数量は、図示のものに限定されず、３つ以上であってもよい。
【００５８】
回路検証装置1004は、半導体デバイス102-1のためのハードウェア記述言語100-1、取得部107-1および読出パラメータ106-1と、半導体デバイス102-2のためのハードウェア記述言語100-2、取得部107-2および読出パラメータ106-2とを備える。
【００５９】
図８の構成は、入力信号およびクロック信号を２つの半導体デバイス（102-1,102-2）で共通のものとする構成であるが、これに代えて、入力信号およびクロック信号を個別にする構成、あるいは、入力信号は個別であるがクロック信号は共通とした構成、もしくは、入力信号は共通であるがクロック信号は個別とした構成であってもよい。信号供給を個別にする場合、半導体デバイス別にエミュレーション制御部140を設ける構成となる。
【００６０】
本実施形態の動作は、回路検証装置1004が、各半導体デバイス（102-1,102-2）について、概ね図４に沿った前述の手順を実行することになる。なお、本実施形態では、複数のハードウェア記述言語（100-1,100-2）を取り扱うことから、シミュレーション部110が、シミュレーションに使用するハードウェア記述言語を事前に判別できるようにすることが望ましい。そのためには、例えば、使用すべきハードウェア記述言語をユーザI/F部120からシミュレーション部110へ指示する、あるいは、設定部111がシミュレーション部110に対し、今回の読出パラメータ（106-1,106-2）が何れのハードウェア記述言語（100-1,100-2）に対応するかの情報を通知すればよい。
【００６１】
本実施形態によれば、一つの半導体デバイスだけでなく、複数の半導体デバイスの検証も可能である。これにより、ハードウェア記述言語の種別が異なる複数のデバイスの検証を単一の回路検証装置により行うことができる。
【００６２】
上記の第２〜第４の実施形態は、個別に実施することに限らず、適宜組み合わせて実施してもよい。
【００６３】
（具体例１）
上記実施形態の構成について具体例を挙げる。図９に、第１の具体例の構成を示す。この構成は、一般的な計算機800と半導体テスト装置806とをＰＣＩ（Peripheral Component Interconnect）バス805により、相互にアクセス可能に接続したものである。計算機800は、ＣＰＵ801、ＲＡＭ802、ブリッジ803およびＨＤＤ804を含む。計算機800はブリッジ803を介して、前述のユーザI/F部（120）を実現する入力ユニット809および表示ユニット810が接続されている。
【００６４】
計算機800は、前述のシミュレーション部（110）、設定部（111）、回路修正部（130）の機能を実現する。計算機800のＨＤＤ804またはＲＡＭ802には、ハードウェア記述言語（100）と、取得部（107）により取得した読出パラメータ（106）を格納する。
【００６５】
半導体テスト装置806において、制御ＦＰＧＡ807は、前述のエミュレーション制御部（140）、制御部（108）および取得部（107）に対応する。メモリ808は、前述の入力信号情報（103）を格納する記憶手段である。
【００６６】
図９の構成において、ユーザから入力ユニット809を通じて動作の開始を指定されたとき、ＣＰＵ801は、ＨＤＤ804に格納されたプログラムにより初期設定を実行する（図４：S401）。この初期設定では、ＨＤＤ804の入力信号情報（103）を半導体テスト装置806上のメモリ808に転送する。また、必要に応じて、制御ＦＰＧＡ807に対し、クロック数や周波数、位相関係の設定、半導体デバイス102に与える入力信号とメモリ808の値とに関する設定などを行う。
【００６７】
初期設定を終了したら、表示ユニット810に、半導体デバイス102のエミュレーションを開始できる状態になったことを表示し、ユーザが次のステップの実行を指示するまで待機する。
【００６８】
その後、ユーザからの指示により半導体デバイス102のエミュレーション開始が指示されたとき、ＣＰＵ801は、制御ＦＰＧＡ807により半導体デバイス102の動作を開始する（図４：S402）。その後、ユーザが、計算機800に接続されたキーボードやマウスなどの入力ユニット809を通じて、半導体デバイス102の動作の停止を指示を行う。ＣＰＵ801は、この指示を認識すると、制御ＦＰＧＡ807に対し半導体デバイス102の動作停止を指示する。これにより、半導体デバイス102のエミュレーションが停止する（図４：S403）。
【００６９】
ＣＰＵ801は、エミュレーションの停止を認識すると、制御ＦＰＧＡ807に対し、半導体デバイス102の各記憶素子からパラメータを読み出すよう指示する。制御ＦＰＧＡ807は、半導体デバイス102の一連の記憶素子をシフトレジスタとして動作させることで、各記憶素子のパラメータを順次読み出し、それを計算機800へ転送する。ＣＰＵ801は、制御ＦＰＧＡ807からのパラメータ（106）をＨＤＤ804あるいはＲＡＭ802に保存する（図４：S404）。なお、半導体デバイス102から読み出されるデータ量を考慮して、パラメータは、ＲＡＭ802よりもＨＤＤ804に記憶するのが望ましい。
【００７０】
続いて、ＣＰＵ801は、ＨＤＤ804に記憶されているシミュレーション部110のプログラムを実行することで、シミュレータ（110）を起動する（図４：S405）。起動したシミュレータ（110）は、ＨＤＤ804にあるハードウェア記述言語（100）および入力信号情報（103）を読み込む。また、半導体デバイス102から読み出されたパラメータ（106）をシミュレーションのパラメータとして設定する（図４：S406）。そして、シミュレーションを実行する（図４：S407）。
【００７１】
（具体例２）
半導体デバイス102として、汎用のＦＰＧＡを利用することができる。この場合の構成は、前述の図９のシステムにおいて、検証対象の半導体デバイス102をＦＰＧＡに置き換えた構成に相当する。一般的に、半導体デバイスは、動作周波数、電圧、入力I/F（LVTTL（Low Voltage TTL），ＨＳＴＬ（High Speed Transceiver Logic），ＬＶＤＳ（Low Voltage Differential Signaling）等）、パッケージ（ＤＩＰ（Dual Inline Package），ＢＧＡ（Ball Grid Array）等）などが異なるため、規格ごとに専用ボードを必要とすることが多い。一方で、ＦＰＧＡを利用して半導体デバイス102をエミュレーションすることで、ハードウェア記述言語ごとの専用ボードが不要となる。
【００７２】
ＦＰＧＡに関し、例えば、ザイリンクス株式会社のＦＰＧＡには、ＪＴＡＧおよびＳｅｌｅｃｔＭＡＰ（商標）用の端子から記憶素子を読み出すための機能を用意したものがある（特許文献５および非特許文献１を参照）。このようなＦＰＧＡを用いる場合、前述した回路修正部130による回路の修正（図４：S400）は省略することができる。すなわち、ＪＴＡＧもしくはＳｅｌｅｃｔＭＡＰを操作するように取得部107を構成すれば、ＦＰＧＡ内の記憶素子の値を読み出すことが可能となる。
【００７３】
図１０に、半導体デバイス102としてＦＰＧＡを用いた場合の構成を示す。図示の構成は、図９に示す前述の具体例における半導体テスト装置806をＦＰＧＡエミュレータ900に置き換えると共に、検証対象として複数のＦＰＧＡ903.1〜903.Nを備えたものである。かかる構成の動作は、図８に沿って説明した第４の実施形態のものに準じる。
【００７４】
なお、先に述べたように、ザイリンクス株式会社などのＦＰＧＡには、本発明の読出部（101B）に相当する機能が実装されている。よって、この場合、例えば、図１１に示すように、ＦＰＧＡ903.1〜903.NをJTAGで直列に接続して、シフトレジスタに準じた動作を行うよう指示することで、制御ＦＰＧＡ901により全てのＦＰＧＡ903.1〜903.Nからパラメータを読み出すことができる。
【００７５】
また、図１１の形態に代えて、図１２のようにＳｅｌｅｃｔＭＡＰインターフェースを制御ＦＰＧＡ901に接続することでも、全てのＦＰＧＡ903.1〜903.Nからパラメータを読み出すことができる。
【００７６】
半導体デバイス102にＦＰＧＡを利用する形態において、そのＦＰＧＡが、初期値を変更できる仕様である場合は、シミュレーション終了時点のパラメータをＦＰＧＡの新たな初期値としてもよい。この場合、新たな初期値を利用して、ＦＰＧＡの構成データ（コンフィグレーションデータ）を作成し、そのコンフィグレーションデータをＦＰＧＡに書き込む。これにより、シミュレーションにより検証した動作を、ＦＰＧＡエミュレータで再現することが可能になる。
【００７７】
なお、本発明は、デバイス内部でクロックを生成するためのＰＬＬ（Phase-Locked Loop）が搭載された半導体デバイスの検証にも適用可能である。ＰＬＬは、クロックに存在するジッタや周波数を逓倍する機能、位相シフトする機能などがあるため、多くの半導体デバイスで採用されている。ＰＬＬは、内部のＶＣＯ（Voltage Controlled Oscillator）によって自発的にクロック信号を生成するため、入力信号の周波数が制限される。原理上、その下限周波数は、０［Hz］より大きい値に設定される。
【００７８】
しかしながら、エミュレーションがいったん停止すると（図４：S403）、クロック周波数が０［Hz］になり、ＰＬＬ動作に不都合が生じる。この問題を解決するためには、例えば、図１３に示すような構成を半導体デバイス102に追加すればよい。
【００７９】
図１３の構成は、ＰＬＬ用の外部端子500とは別に、セレクタに直接アクセスするための外部端子501及び502を追加したものである。エミュレーション中は、外部端子500を通じてＰＬＬを動作させてクロック信号をセレクタへ入力する。また、エミュレーションを停止してパラメータを読み出すときは、外部端子501からセレクタにクロック信号を直接入力する。この切り替えのために、例えば、入力信号制御部104（図１）などが、外部端子502を通じてセレクタに選択信号を与える。これにより、ＰＬＬを搭載した半導体デバイス102であっても、エミュレーション中およびパラメータ読み出し時の双方で、適正にクロック信号を供給することができる。
【図面の簡単な説明】
【００８０】
【図１】本発明の第１の実施形態の構成を示すブロック図である。
【図２】本発明の実施形態における回路修正部の動作例（修正前）に関する説明図である。
【図３】本発明の実施形態における回路修正部の動作例（修正後）に関する説明図である。
【図４】本発明の第１の実施形態の動作に関するフローチャートである。
【図５】本発明の第２の実施形態の構成を示すブロック図である。
【図６】本発明の第３の実施形態の構成を示すブロック図である。
【図７】本発明の第３の実施形態の動作に関するフローチャートである。
【図８】本発明の第４の実施形態の構成を示すブロック図である。
【図９】本発明の実施形態の第１の具体例の構成を示すブロック図である。
【図１０】本発明の実施形態の第２の具体例の構成を示すブロック図である。
【図１１】本発明の実施形態の第２の具体例の構成を示すブロック図である。
【図１２】本発明の実施形態の第２の具体例の構成を示すブロック図である。
【図１３】本発明の実施形態の応用例の構成を示すブロック図である。
【符号の説明】
【００８１】
1001,1002,1003,1004  回路検証装置
100：ハードウェア記述言語、101A：バイパス配線、101B：読出部、102：半導体デバイス、103：入力信号情報、104：入力信号制御部、105：クロック信号制御部、106：読出パラメータ、107：取得部、108：制御部、110：シミュレーション部、111：設定部、120：ユーザI/F部、130：回路修正部、140：エミュレーション制御部、150：停止判定部、160：シミュレーション判定部、201-1〜201-N：記憶素子、301-1〜301-N：セレクタ、
【図１】
0005450973.tif 000002
【図２】
0005450973.tif 000003
【図３】
0005450973.tif 000004
【図４】
0005450973.tif 000005
【図５】
0005450973.tif 000006
【図６】
0005450973.tif 000007
【図７】
0005450973.tif 000008
【図８】
0005450973.tif 000009
【図９】
0005450973.tif 000010
【図１０】
0005450973.tif 000011
【図１１】
0005450973.tif 000012
【図１２】
0005450973.tif 000013
【図１３】
0005450973.tif 000014