(57)【要約】【課題】１周期以上の遅延があっても正しい遅延量を設定してエミュレーションすることができるエミュレータ及びエミュレーション方法を提供すること。【解決手段】エミュレータ３１０は、ユーザ電圧に応じて予め求められた遅延値が設定値として格納されたテーブルブロック３１４と、テーブルブロック３１４を参照し、ソースクロック４００に対しスキュー調整値により遅延を設定して遅延クロックを生成するスキュー調整用ブロック３１１と、定電圧で動作するＣＰＵエバチップ３１８と、ユーザ電圧で動作し、ＣＰＵエバチップ３１８と共にプログラムを実行する周辺エバチップ３１３とを有し、スキュー調整用ブロック３１１により、ＣＰＵエバチップ３１８、周辺エバチップ３１３にユーザ電圧に応じた遅延のＣＰＵコアクロック４０１、周辺エバクロック４０２を供給することで両者の同期を取りながらエミュレーションを実行する。【選択図】図２
2008287462.tif 000002
【特許請求の範囲】
【請求項１】
マイクロコンピュータのＣＰＵ機能を実現するＣＰＵコア部と周辺機能を実現する周辺部とを備えた前記マイクロコンピュータの動作を実現するエミュレータであって、
クロックジェネレータから出力されるソースクロックを入力して、前記ＣＰＵコア部に供給される第１の動作クロックと前記周辺部に供給される第２の動作クロックとを生成するスキュー調整部と、
前記周辺部に供給されるユーザ電圧に応じて求められ、前記第１又は前記第２の動作クロックに付加される遅延量を決定するための設定値が格納された設定値テーブルとを有し、
前記スキュー調整部は、前記設定値に基づいて前記第１の動作クロックと前記第２の動作クロック間のスキューを調整するエミュレータ。
【請求項２】
スキュー調整部は、前記ソースクロック及び複数の遅延量が異なる遅延クロックを切替選択して前記第１及び前記第２の動作クロックを生成するものであって、切り替え前後のクロックが同一論理レベルとなるタイミングで前記ソースクロック又は前記遅延クロックを選択する
ことを特徴とする請求項１記載のエミュレータ。
【請求項３】
ユーザ電圧測定部を有し、
前記スキュー調整部は、前記ユーザ電圧測定部の測定結果に基づき前記設定値テーブルの前記設定値を選択する
ことを特徴とする請求項１又は２記載のエミュレータ。
【請求項４】
前記ユーザ電圧測定部は、ユーザ電圧をアナログ−ディジタル変換するＡＤ変換器である
ことを特徴とする請求項３記載のエミュレータ。
【請求項５】
前記ユーザ電圧測定部は、複数の基準電圧値と前記ユーザ電圧を比較するコンパレータであって、前記ユーザ電圧の電圧範囲を測定する
ことを特徴とする請求項３記載のエミュレータ。
【請求項６】
前記設定値テーブルは、ユーザ電圧範囲と、それに対する設定値とからなるテーブルである
ことを特徴とする請求項１乃至５のいずれか１項記載のエミュレータ。
【請求項７】
前記設定値テーブルは、任意の電圧において遅延値を変化させて動作させることにより、前記ＣＰＵコア部及び前記周辺部が正常に動作するか否かを判定して求めたものである
ことを特徴とする請求項１乃至６のいずれか１項記載のエミュレータ。
【請求項８】
前記設定値は、前記正常に動作する範囲の遅延値の中で最もマージンが大きい値である
ことを特徴とする請求項７項記載のエミュレータ。
【請求項９】
前記ＣＰＵコア部及び前記周辺部はそれぞれ異なるチップから構成される
ことを特徴とする請求項１乃至８のいずれか１項記載のエミュレータ。
【請求項１０】
マイクロコンピュータのＣＰＵ機能を実現するＣＰＵコア部及び周辺機能を実現する周辺部と、該周辺部に供給されるユーザ電圧に応じて予め求められ前記ＣＰＵコア部に供給される第１の動作クロック又は前記周辺部に供給される第２の動作クロックに付加される遅延量を決定するための設定値が格納された設定値テーブルとによって、前記マイクロコンピュータの動作をエミュレーションするエミュレーション方法であって、
前記ユーザ電圧を測定し、
前記測定した結果に基づいて、前記設定値テーブルから所定の設定値を選択し、
前記選択した所定の設定値に基づいて、前記第１の動作クロックと前記第２の動作クロック間のスキューを調整するエミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイコン用インサーキットエミュレータ及びエミュレーション方法に関し、特に、電圧変動による同期調整を図ったエミュレータ及びエミュレーション方法に関する。
【背景技術】
【０００２】
高機能なエミュレータは、ＣＰＵ（Central Processing Unit）にソフトウェアをデバッグするために必要な多くの機能を有する。多くの機能とは、例えばプログラムを任意の箇所で停止させるブレーク機能、プログラム実行の軌跡をたどるためのトレース機能、実行中のメモリ内容を監視するリアルタイムＲＡＭ（Random Access Memory）モニタ機能などであり、これらは、本来のＣＰＵに多くの付加回路が接続されて実現されている（以下、このような機能を有するＣＰＵをＣＰＵコアという。）。
【０００３】
このため高機能なエミュレータは、１個のＬＳＩチップ上にＣＰＵコアと、タイマー、時計及び割り込み機能を有する部分等の周辺機能を搭載することができず、ＣＰＵコアを有するＬＳＩ（以下ＣＰＵエバチップという。）、周辺機能を有するＬＳＩ（以下、周辺エバチップという。）に分割し、２つをプリント基板などで配線することでエミュレータを実現している。
【０００４】
近年、エミュレーションする製品（マイコン）の動作スピードの高速化、及び動作電源電圧範囲の拡張により、動作時に電源電圧、動作周波数を変更することが要求されてきている。実際のデバイスでは、ＣＰＵコアとメモリなどのインターフェースはレギュレータの固定電圧で動作していて、ＩＯバッファはユーザ電圧により変動する。エミュレータでも、ＣＰＵエバチップとメモリ、及びホストマシンとのインターフェースは、固定電圧で動作させる必要がある。
【０００５】
またユーザーシステムに接続される周辺エバチップは、電源電圧、動作スピード、及び入出力タイミングをエミュレーションするために、実際のデバイスのＩＯバッファと同じようにユーザーシステムの仕様電源電圧に追従することが要求されている。そのためＣＰＵエバチップと周辺エバチップの動作電圧が異なることや、基板での遅延によって２つのチップの動作にずれが発生してしまうため、ＣＰＵエバチップと周辺エバチップの動作クロックのスキュー（遅延）を調整することにより正しく動作するようにする必要がある。
【０００６】
そこで、このようなＣＰＵコアと周辺エバチップのクロックのスキュー調整の方法が特許文献１に記載されている。図１３（ａ）は特許文献１に記載のエミュレーション回路である。図１３（ａ）に示すように、エミュレーションチップ６２０は、マイクロコンピュータ６１０とエミュレータであるホストマシン６３０のインターフェースを行なうチップである。ここで図１３（ａ）に示すエミュレーションチップ（以下、ＣＰＵエバチップという。）６２０は上述のＣＰＵコアに相当する。また、マイクロコンピュータ６１０は、上述の周辺エバチップに相当する。
【０００７】
エミュレーションチップ（ＣＰＵエバチップ）６２０は、発振回路６２１、タイミングジェネレータ６２２、データバスラッチ６２３、及び比較回路６２４で構成される。ホストマシン６３０はＣＰＵエバチップ６２０と接続されている。マイクロコンピュータ（周辺エバチップ）６１０は、タイミングジェネレータ６１１、及び出力回路６１２で構成される。
【０００８】
ＣＰＵエバチップ６２０の発振回路６２１の出力は電圧レベル変換回路６５０を介して、マイクロコンピュータ６１０のタイミングジェネレータ６１１と、遅延回路６６０へ接続される。遅延回路６６０の出力は、ＣＰＵエバチップ６２０のタイミングジェネレータ６２２の入力に接続される。マイクロコンピュータ６１０のタイミングジェネレータ６１１の出力は、マイクロコンピュータ６１０の出力回路６１２の入力に接続されている。マイクロコンピュータ６１０の出力回路６１２の出力は、電圧レベル変換回路６５０を介して、ＣＰＵエバチップ６２０のデータバスラッチ６２３のバスに接続されている。ＣＰＵエバチップ６２０のデータバスラッチ６２３はＣＰＵエバチップ６２０のクロックジェネレータ６２２からのクロックを入力として、メモリ６４０へデータを出力する。
【０００９】
ＣＰＵエバチップ６２０の比較回路６２４は、一方の入力がＣＰＵエバチップ６２０のタイミングジェネレータ６２２の出力と接続され、他方の入力が電圧レベル変換回路６５０を介してマイクロコンピュータ６１０のタイミングジェネレータ６１１の出力と接続されている。比較回路６２４の出力は外部でモニタされ、そのモニタ結果から、遅延回路６６０の遅延量を設定する構成になっている。
【００１０】
次に、この特許文献１に記載のエミュレーション回路の動作について説明する。比較回路６２４は、クロック８０４とクロック８０５とを比較する。クロック８０４は、発振回路６２１の出力であるクロック８００を遅延回路６６０において遅延させ、これをタイミングジェネレータ６２２の入力として生成したクロックである。クロック８０５は、発振回路６２１のクロック８００が電圧レベル変換回路６５０を通ることで遅延された信号８０１をマイクロコンピュータ６１０のタイミングジェネレータ６１１に入力し、生成したクロックを、電圧変換回路６５０を介してＣＰＵエバチップ６２０に入力した信号である。比較回路６２４の比較出力信号８０６に基づいて、遅延回路６６０の遅延量を設定することにより、ＣＰＵエバチップ６２０のタイミングジェネレータ６２２がデータバスラッチ６２３に出力するストローブ信号８０３と、データバス信号７００が電圧レベル変換回路６５０を通り、データバスラッチ６２３に入力されたデータバス信号７０１との同期をとることができる。
【００１１】
図１３（ｂ）は図１３（ａ）に示すエミュレーション回路の動作を示すタイミングチャートである。クロック８００は発振回路６２１から生成されるクロック信号である。クロック８０１はクロック８００に対して、クロック８００を受けて、電圧レベル変換回路６５０を通ることで生じる遅延、及び配線遅延による遅れｔ１を生じている。
【００１２】
マイクロコンピュータ６１０ではクロック８０１を用いてタイミングジェネレータ６１１でクロック８０５とストローブ信号８０２を生成する。ＣＰＵエバチップ６２０ではデータバスラッチ６２３において、マイクロコンピュータ６１０が出力するデータバス信号７００が電圧レベル変換回路６５０を通ったデータバス信号７０１をストローブ信号８０３でラッチし、メモリ６４０へ書き込む。
【００１３】
このとき、ＣＰＵエバチップ６２０が得るデータバス信号７０１は電圧レベル変換回路６５０の遅延及び配線遅延によりｔ３だけ、データバス信号７００より遅れている。一方、ＣＰＵエバチップ６２０ではクロック８００から遅延回路６６０により遅延された信号からタイミングジェネレータ６２２により基本クロック８０４とストローブ信号８０３を生成する。ここで、ＣＰＵエバチップ６２０が、マイクロコンピュータ６１０からのデータバス信号７０１を確実に取り込むためには、前記クロック８０１が発振回路から生成されたクロック８００から、電圧レベル変換回路６５０を通ることによる遅延、及び配線遅延による遅れｔ１と、データバス信号７０１が電圧レベル変換回路６５０を通ることによる遅延及び配線遅延によりデータバス信号７００に対しての遅れｔ３の合計時間だけ、遅延回路６６０により、発振回路６２１から生成されるクロック８００からストローブ信号８０３を遅らせることにより可能となる。
【００１４】
その遅延回路６６０の遅延量を決めるために、マイクロコンピュータ６１０のクロック８０５と遅延回路６６０を通ったクロック８０４を比較回路６２４で比較し、その出力信号８０６のハイレベルの時間が遅延量ｔ１と遅延量ｔ３の合計時間から遅延回路６６０により遅らせた時間の差（これを遅延量をｔ２とする）と考えられるため、信号８０６をモニタしてハイレベルの期間がなくなるよう、すなわち遅延量ｔ２が零になるように調整すれば、正しい遅延量を設定することができる。これにより、ＣＰＵエバチップ６２０のタイミングジェネレータ６２２がデータバスラッチ６２３に出力するストローブ信号８０３と、マイクロコンピュータ６１０のタイミングジェネレータ６１１の出力ストローブ信号８０２が出力回路６１２を介して出力されるデータバス信号７００が、電圧レベル変換回路６５０を通り、データバスラッチ６２３に入力されるデータバス信号７０１との同期をとることができる。
【特許文献１】特開平０６−１６１８０８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
しかしながら、この特許文献１の方法では、比較回路６２４により位相を比較することにより遅延量を設定しているため、正常に動作する範囲は１周期以内となる。このために、電圧が大きく変化し、クロックのスキューの変動幅が１周期以上になったときに、１周期以上の変動に対しては検出できないという問題点がある。
【００１６】
図１４（ａ）に示す例は、クロック８０４に対して、実際には遅延Ｔ４のクロック８０５がとなり、クロック８０４の１周期以上の遅延となった場合を示す。この場合、特許文献１に記載の方法では、実際の遅延とは異なる遅延Ｔ５の遅延量を設定してしまう。正しい遅延Ｔ４を設定した場合は、ラッチＡのタイミングでデータバス７０１をラッチし、正しいＤａｔａＡをラッチすることになるが、間違った遅延Ｔ５ではラッチＢのタイミングでデータバス７０１をラッチしてしまい、正しいデータをラッチすることができない。
【００１７】
また、このように１周期以上の遅延がある場合に、動作周波数をモードの切り替えにより変更になった場合は図１４（ｂ）のように、高周波数のときは実際とは異なる遅延量Ｔ６を設定しており、低周波数に切り替えると遅延量Ｔ７へ大幅に遅延量が増え、調整までの時間がかかることなどで、さらなる誤動作を起こす可能性がある。
【００１８】
さらに、この特許文献１では動作クロックのタイミングを合わせるために比較回路６２４の出力比較信号８０６をモニタし調整するようにしているが、クロック遅延調整用の基板上の経路と本来の同期を取りたい、データバスラッチ６２３の入力までの経路は完全に同じわけではないので、基板上の遅延を調整することができないという問題点がある。
【課題を解決するための手段】
【００１９】
本発明に係るエミュレータは、マイクロコンピュータのＣＰＵ機能を実現するＣＰＵコア部と周辺機能を実現する周辺部とを備えた前記マイクロコンピュータの動作を実現するエミュレータであって、クロックジェネレータから出力されるソースクロックを入力して、前記ＣＰＵコア部に供給される第１の動作クロックと前記周辺部に供給される第２の動作クロックとを生成するスキュー調整部と、前記周辺部に供給されるユーザ電圧に応じて求められ、前記第１又は前記第２の動作クロックに付加される遅延量を決定するための設定値が格納された設定値テーブルとを有し、前記スキュー調整部は、前記設定値に基づいて前記第１の動作クロックと前記第２の動作クロック間のスキューを調整するものである。
【００２０】
本発明に係るエミュレーション方法は、マイクロコンピュータのＣＰＵ機能を実現するＣＰＵコア部及び周辺機能を実現する周辺部と、該周辺部に供給されるユーザ電圧に応じて予め求められ前記ＣＰＵコア部に供給される第１の動作クロック又は前記周辺部に供給される第２の動作クロックに付加される遅延量を決定するための設定値が格納された設定値テーブルとによって、前記マイクロコンピュータの動作をエミュレーションするエミュレーション方法であって、前記ユーザ電圧を測定し、前記測定した結果に基づいて、前記設定値テーブルから所定の設定値を選択し、前記選択した所定の設定値に基づいて、前記第１の動作クロックと前記第２の動作クロック間のスキューを調整するものである。
【００２１】
本発明においては、ユーザ電圧に応じて予め求められた遅延値が設定値として格納された設定値テーブルを有し、この設定値テーブルを参照して第１及び第２の動作クロックを生成するので、正しい遅延量の第１及び第２の動作クロックを生成してＣＰＵコア部及び周辺部の同期を取ることができる。
【発明の効果】
【００２２】
本発明においては、１周期以上の遅延があっても正しい遅延量を設定してエミュレーションすることができるエミュレータ及びエミュレーション方法を提供することができる。
【発明を実施するための最良の形態】
【００２３】
実施の形態１．
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。図１はインサーキットエミュレータのシステム全体を示す図である。図１に示すように、インサーキットエミュレータ３１０はユーザのターゲットシステム開発やマイコンに組み込むソフトのデバッグを目的とし、ユーザのターゲットに乗せる実際のマイコンと同じ動きをし、さらにホストマシン１から、ブレークやトレースなどのデバッグ機能の操作を可能にした装置である。
【００２４】
本実施の形態におけるエミュレータ３１０は、マイクロコンピュータのＣＰＵ機能を実現するＣＰＵコア３１２と周辺機能を実現する周辺エバチップ３１３とを備えたマイクロコンピュータの動作を実現するエミュレータであり、クロックジェネレータ３１７から出力されるソースクロックを入力して、ＣＰＵコア３１２に供給される第１の動作クロック４０１と周辺エバチップ３１３に供給される第２の動作クロック４０２とを生成するスキュー調整用ブロック３１１と、周辺エバチップ３１３に供給されるユーザ電源の電圧値（ユーザ電圧）に応じて求められ、ＣＰＵコアクロック４０１又は周辺エバクロック４０２に付加される遅延量を決定するための設定値が格納されたテーブルブロックとを有する。そして、スキュー調整用ブロック３１１は、設定値に基づいてＣＰＵコアクロック４０１と周辺エバクロック４０２間のスキューを調整する。
【００２５】
具体的には次のように構成される。すなわち、エミュレータ３１０は、実際のマイコンのＣＰＵ機能にデバッグ機能をプラスしたＣＰＵコア３１２を有するＬＳＩのＣＰＵエバチップ３１８と、実際のマイコンの周辺機能を有する周辺エバチップ３１３と、その他ホストコントロールＭＣＵ２、エミュレーションメモリ３、レベルシフタ４、クロックジェネレータ３１７、及びターゲットＩ／Ｆ６、ホストインターフェース（不図示）を有している。
【００２６】
ユーザ電源は、ユーザターゲットボード５からターゲットＩ／Ｆ６を介して供給される。ユーザターゲットボード５と直接接続される周辺エバチップ３１３はユーザターゲットボード５から供給されるユーザ電源に追従して動作しており、エミュレーションメモリ３やホストコントロールＭＣＵ２、クロックジェネレータ３１７、及びＣＰＵエバチップ３１８は外部ＡＣ電源から供給される３．３Ｖ固定で動作している。レベルシフタ４は、ＣＰＵエバチップ３１８側のレベルシフタの入出力端子の駆動電源に３．３Ｖ電源を使用し、周辺エバチップ３１３側のレベルシフタの入出力端子の駆動電源にユーザ電源を使用している。
【００２７】
エミュレーションメモリ３は、ＣＰＵエバチップ３１８が実行するユーザプログラムや実行結果等を格納する。クロックジェネレータ３１７はソースクロック４００を生成する。ＣＰＵエバチップ３１８は、ＣＰＵコア３１２及びスキュー調整用ブロック３１１を有し、ホストコントロールＭＣＵはユーザ電圧測定ブロック３１５及びテーブルブロック３１４を有する。
【００２８】
テーブルブロック３１４は、ユーザ電圧に応じて予め求められた遅延値が設定値として格納された設定値テーブルとして機能する。スキュー調整用ブロック３１１は、テーブルブロック３１４を参照し、クロックジェネレータ３１７が生成するソースクロック４００に対し、テーブルブロック３１４に格納されたスキュー調整値（設定値）により遅延を設定して第１の動作クロック及び第２の動作クロックとなるＣＰＵコアクロック４０１及び周辺エバクロック４０２を生成するスキュー調整部として機能する。
【００２９】
ＣＰＵエバチップ３１８は定電圧で動作するチップであり、そのＣＰＵコア３１２は、ＣＰＵにソフトウェアをデバッグするために必要な、例えばプログラムを任意の箇所で停止させるブレーク機能、プログラム実行の軌跡をたどるためのトレース機能、実行中のメモリ内容を監視するリアルタイムＲＡＭモニタ機能などの多くの機能が付加されたものである。ユーザ電圧測定ブロック３１５は、ユーザ電圧４０５に基づきユーザ電圧をデコードし、スキュー調整用ブロック３１１は、このデコード値に応じてテーブルブロック３１４から設定値を読み出す。周辺エバチップ３１３は、ユーザ電圧で動作し、ＣＰＵエバチップ３１８と共にプログラムを実行するチップであり、ＣＰＵコア３１２と周辺エバチップ３１３とは相互にバス３２０で接続されている。
【００３０】
本実施の形態においては、最適なスキュー調整値のテーブルを作成してテーブルブロック３１４に記録しておき、テーブルブロック３１４からスキューの調整値を設定する。テーブルブロック３１４に書き込むスキュー設定値は１周期以上の値とすることも可能であるので、実際と異なる遅延量を設定することがない。なお、ここでのテーブルブロック３１４とは、ＦＬＡＳＨ、ＥＥＰＲＯＭ等を含む不揮発性のメモリ全般を示すが以下では代表してＲＯＭともいう。テーブルブロック３１４からのスキュー調整値の設定を行うタイミングは、ユーザの使用電圧をモニタしユーザの使用電圧の変動に追従してテーブルブロック３１４から選択して設定する。すなわち、エミュレータ３１０は、スキュー調整ブロック３１１により、ＣＰＵエバチップ３１８及び／又は周辺エバチップ３１３にそれぞれの動作電圧に応じた遅延値のＣＰＵコアクロック４０１、周辺エバクロック４０２を供給することで両者の同期を取りながらエミュレーションを実行する。
【００３１】
図２は本実施の形態１にかかるエミュレータ３１０の各機能を示すブロックである。ユーザ電源電圧供給部３１６からの動作電圧を受けて動作するエミュレータ３１０はクロックジェネレータ３１７と、クロックジェネレータ３１７が生成するソースクロック４００を入力とするスキュー調整用ブロック３１１と、ユーザ電圧４０５の電圧を測定するユーザ電圧測定ブロック３１５と、その測定した電圧値をアドレス値にデコードするデコーダ３６２と、そのアドレス出力４０４が供給されるテーブルブロック３１４と、スキュー調整用ブロック３１１が生成したＣＰＵコアクロック４０１及び周辺エバクロック４０２がそれぞれ供給されるＣＰＵコア３１２及び周辺エバチップ３１３とを有する。
【００３２】
次にこのエミュレータ３１０の動作について説明する。ユーザ電源電圧供給部３１６の電圧をユーザ電圧測定ブロック３１５において測定を行う。ユーザ電圧測定ブロック３１５は、電圧値が変化した場合にテーブルブロック３１４に対してデコーダ３６２でデコードしたアドレス出力を行う。テーブルブロック３１４はそのアドレス出力に対応したスキュー設定値をスキュー調整用ブロック３１１に出力する。
【００３３】
スキュー調整用ブロック３１１はクロックジェネレータ３１７からのソースクロック４００とテーブルブロック３１４からのスキュー調整値設定信号４０３により、ソースクロック４００に対して適切な遅延値を与えたクロックを生成し、ＣＰＵコア３１２にはＣＰＵコアクロック４０１を周辺エバチップ３１３には周辺エバクロック４０２を供給する。このことによりＣＰＵコアと周辺エバチップは、ユーザ電圧に対応した、同期の取れた動作が可能になる。
【００３４】
ここで、スキュー調整値（設定値）とは、ＣＰＵコア３１２と、周辺エバチップ３１３の動作のずれによる誤動作を補正するために、ＣＰＵコア３１２の動作クロック又は周辺エバチップ３１３の動作クロックに付加する遅延のことである。
【００３５】
図３はユーザ電圧測定ブロック３１５からデコーダ３６２よりアドレスを出力するまでの一般的な回路構成を示す図である。本例では、ユーザ電圧測定ブロック３１５が電圧測定結果を８ビット精度でデコーダ３６２に供給する例を示す。デコーダ３６２の内部では、それぞれの電圧範囲の比較値とユーザ電圧測定結果とをそれぞれ比較した結果から、その電圧範囲に相当するアドレスを出力する。本例では、比較回路５１１〜５１４の４つを具備し、比較する電圧範囲をそれぞれ５Ｖ以上、４Ｖ＜電圧＜５Ｖ、３Ｖ＜電圧＜４Ｖ、２．５Ｖ＜電圧＜３Ｖ、２．５Ｖ以下に電圧範囲を分けている。例えば３．５４Ｖが電圧測定結果として供給された場合、５Ｖ以上を検出する比較回路５１１、４〜５Ｖを検出する比較器５１２は"１"を出力し、３〜４Ｖを検出する比較回路５１３、２．５Ｖ未満を検出する比較回路５１４は"０"を出力する。これらの入力を受けてアドレス値に変換して出力する変換部５１１は、アドレス出力４０４として"０００２Ｈ"を出力する。
【００３６】
次に、スキュー調整用テーブルの作成方法について説明する。本実施の形態においては、任意の動作範囲の電圧において遅延値を変化させ、ＣＰＵコア３１２（ＣＰＵエバチップ３１８）及び周辺エバチップ３１３が正常に動作するか否かをテストし、正常に動作する範囲の遅延値の中でもっともマージンが大きい値をスキュー調整値とし、各ユーザ電圧に対するスキュー調整値を求めてスキュー調整用テーブルを作成する。
【００３７】
図４はスキュー調整用テーブルの作成方法を示すフローチャートである。スキュー調整用テーブルは、テーブルブロック３１４の中に格納される。先ず、初期電圧値を設定する（ステップＳ１）。たとえば、５Ｖ、４Ｖ、３Ｖ、２Ｖと電圧を変化させる場合に最初にテストを行う電圧を５Ｖとしていれば、ここでの初期電圧値は５Ｖである。
【００３８】
ステップＳ２以降は、個々のエミュレータ製品毎に出荷検査工程等で行なう工程で、これによりその製品固有のスキュー調整値を調整することができる。先ず、初期スキュー調整値を設定する(ステップＳ２)。ステップＳ２の初期スキュー調整値は、１番最初の１台については設定できる最小値とする。２台目以降は、１台目のステップＳ３のテスト結果を基準とすることにより、すべての範囲でスキュー幅を変化させて確認せずに、最適値が得られそうな限定した範囲としてテストすることができる。
【００３９】
例えば、−１２ｎｓから＋１６ｎｓまでスキューを変えてテストする場合、１台目は、−１２ｎｓ〜＋１６ｎｓまでスキューを変えてテストする必要があるが、１台目のテストをパスした範囲が、図５に示すように−３ｎｓ〜＋１３ｎｓであある場合、２台目以降の初期スキュー調整値は−１２ｎｓから始めずに、例えば−５ｎｓ等とすることができる。
【００４０】
次に、設定した電圧値及びスキュー調整値においてテストを行う。ここでのテストの対象はエミュレータ３１０自身であり、ＣＰＵエバチップ３１８及び周辺エバチップ３１３が正常に動作するか否か（ＯＫかＮＧか）を電圧値とスキュー調整値毎にテストし、結果を記録する（ステップＳ３）。記録はテストプログラムの中でホストマシン１に、結果を記録するテスト結果のテンポラリファイルを作成してそこへ記録する等すればよい。
【００４１】
テストでは、例えば、ＣＰＵコア３１２と周辺エバチップ３１３の２チップ間のバス３２０を動作させるプログラムを動かし期待値との比較を行なう。また、割り込みやメモリアクセスなど実際に機能を動かし動作に問題がないかを確認する。
【００４２】
次に、すべてのスキュー調整値に対してテストを実行したか否かを判定する（ステップＳ４）。なお、全てのスキュー調整値は、２台目以降は限定された範囲のすべてのスキュー設定値となる。全てのスキュー調整値についてテストを行ってない場合は、スキュー調整値を変化させ（ステップＳ５）、ステップＳ３に戻る。
【００４３】
全てのスキュー調整値についてテストを行った場合は、テスト結果を記録したファイルから、テストをパスしたスキュー設定値の中央値を一番マージンが大きくなるスキュー調整値として求める。図５（ａ）、図５（ｂ）の結果例のようにそれぞれの電圧範囲で、パスしたスキュー調整値の中央値を一番マージンがあるスキュー調整値として求める。そして、そのスキュー調整値をその測定電圧値でのスキュー調整値として、ホストマシンに別途テンポラリファイルを作成して記録する。（ステップＳ６）。
【００４４】
そして、すべての測定電圧値に対してテストを行ったかどうか判定し（ステップＳ７）、行ってない場合は電圧値を変化させ（ステップＳ８）ステップＳ２に戻る。全ての電圧値に対してテストを行なった場合は、ホストマシン１からエミュレータ３１０上のテーブルブロックへ各電圧ごとのスキューを最適にするスキュー調整値を書き込み(ステップＳ９)、終了する。このように、任意の動作範囲の電圧において遅延値を変化させ、ＣＰＵエバチップ３１８及び周辺エバチップ３１３が正常に動作するか否かをテストして設定値テーブルを生成し、この設定値テーブルを参照してクロックを生成するため正しい遅延値のクロックでエミュレーションを実行することができる。
【００４５】
図５(ａ)及び図５(ｂ)は、個体差によるバラつきがあった場合の結果例を示す。図５ (ａ)は、１００ＭＨｚで測定した第１の例である。スキュー調整値は、テーブルのデータ格納可能範囲と、本実施の形態にかかるエミュレータ３１０において、必要とする実際のスキュー調整値の精度を考慮し、係数を変更することが可能である。
【００４６】
本例においてはスキュー設定値の＋１と実際のスキュー調整値の＋１ｎｓとが対応している。図５(ａ)において、例えば、５．０−５．５Ｖでは、パスするスキュー調整値は−３ｎｓから＋６ｎｓの間なので、一番マージンが大きい＋１ｎｓのスキュー調整値を最適値とする。また、１．５−２．０Ｖでは＋７ｎｓが最適値となる。１００ＭＨｚでの測定であるので１周期は１０ｎｓであるが、この第１の例においては１周期以上の遅延はなく、上述の特許文献１の位相比較回路でも動作可能である。
【００４７】
図５（ｂ）は、同じく１００ＭＨｚで測定した第２の例である。本例は、個体差によるバラつきが大きかった場合の結果例であり、遅延量が１周期以上となるため、上述の特許文献１に記載の手法では調整することができない。この第２の例においては、例えば５．０−５．５Ｖの最適値は−４ｎｓであり、１．５‐２．０Ｖの最適値は＋１１ｎｓとなる。すなわち、その差が１５ｎｓであり、１０ｎｓ（１周期）以上になっているが、本実施の形態ではテーブルブロック３１４にスキュー最適値を格納するので、１周期以上の設定も可能である。よって、上述したように、１周期以上の設定ができないことによるアクセスタイミングのずれを解決することができる。また、図５(ａ)、図５(ｂ)の例のように個体差がある場合でも、それぞれの個体差に応じた改善を図ることができる。
【００４８】
図６は図１のテーブルブロック３１４に格納されるテーブルの例を示す図である。図６（ａ）に図５(ｂ)のスキュー調整値結果の一覧を示す。すなわち、図６（ａ）は、図５（ｂ）のスキュー調整用テーブル作成のための結果におけるユーザ電圧範囲とその際のスキューの最適な設定値との対応表である。ここではスキュー設定値の＋１と実際のスキュー調整値の＋１ｎｓとが対応している。
【００４９】
図６（ａ）に図２に示すテーブルブロック３１４に実際に載せるスキュー調整値テーブルであって、上述の第２の例に対応したものを示している。テーブル形式については、図６（ｂ）に示すように、ユーザの電圧範囲が５．０Ｖ以上にあるときは、テーブルブロック（ＲＯＭ）のアドレス"００００Ｈ"のデータをスキュー設定値とするというような関連付けをした設定テーブルとしている。また設定値については１６ビットで上位８ビットに−値を、下位８ビットに＋値を格納するようにしている。スキュー設定値を読み出す処理が、テーブルブロック（ＲＯＭ）の直接アドレスに対応させているため、素早くかつ容易にアクセスができるという効果も奏する。
【００５０】
次にスキュー調整用ブロックの詳細について説明する。図７はスキュー調整用ブロックの詳細を示すブロック図である。スキュー調整用ブロック３１１は、スキュー設定値分離回路３５０、スキュー設定値選択回路３５１、第１ＣＰＵコアレジスタ３３２、第２ＣＰＵコアレジスタ３３３、ＣＰＵコアクロック切替回路３３６、ＣＰＵコアクロック切替信号生成回路３３４、ＣＰＵコアレジスタクリア回路３３５、第１ＣＰＵコアクロック選択回路３３０、及び第２ＣＰＵコアクロック選択回路３３１を有する。更に、第１周辺エバチップレジスタ３４２、第２周辺エバチップレジスタ３４３、周辺エバクロック切替回路３４６、周辺エバクロック切替信号生成回路３４４、周辺エバチップレジスタクリア回路３４５、第１周辺エバクロック選択回路３４０、第２周辺エバクロック選択回路３４１、及び遅延ゲート３２１〜３２４を有する。
【００５１】
ここで、本実施の形態においては、例えば、予め所定の遅延量を有する遅延ゲートを、所望の段数接続し、所望の遅延量のＣＰＵコアクロック４０１、周辺エバクロック４０２を生成する。従って図７に示す例においては、遅延ゲートは４つのみ図示しているが、これに限るものではなく、上述の図５に示す場合であれば、−１２ｎｓ乃至＋１６ｎｓ遅延させたクロックを生成するための段数の遅延ゲートが必要となる。また、製造ばらつき等の影響を考慮し、生成できる遅延量がある程度マージンを有するようにしてもよい。
【００５２】
スキュー設定値分離回路３５０において、スキュー調整値設定信号４０３を正負信号と絶対値信号に分ける。スキュー設定値選択回路３５１はスキュー設定値分離回路３５０の正負信号と絶対値信号を受けて、正負信号が負の場合には第２ＣＰＵコアレジスタ３３３に絶対値信号を、正の場合には第２周辺エバチップレジスタ３４３に絶対値信号を送る。また絶対値信号を送っていない他方レジスタには、"１"を送るように動作する。
【００５３】
第２ＣＰＵコアレジスタ３３３はスキュー設定値選択回路３５１からのデータを格納する。第１ＣＰＵコアレジスタ３３２は第２ＣＰＵコアレジスタ３３３のデータを受け取り格納する。ソースクロック４００とそれに直列に接続された遅延ゲート３２１、３２２、３２３、３２４のそれぞれからの出力は第１ＣＰＵコアクロック選択回路３３０と第２ＣＰＵコアクロック選択回路３３１に入力される。第１ＣＰＵコアクロック選択回路３３０には他にＶＤＤが入力として、第２ＣＰＵコアクロック選択回路３３１には他にＧＮＤが接続されている
【００５４】
第１ＣＰＵコアレジスタ３３２の格納データは、ＣＰＵコアクロック選択回路３３０の信号切替信号として入力され、第２ＣＰＵコアレジスタ３３３の格納データは第２ＣＰＵコアクロック選択回路３３１の信号切替信号として入力される。第１ＣＰＵコアクロック選択回路３３０と第２ＣＰＵコアクロック選択回路３３１の出力は、ＣＰＵコアレジスタクリア回路３３５のそれぞれの入力となり、そのＣＰＵコアレジスタクリア回路３３５の出力は、第１ＣＰＵコアレジスタ３３２のクリア信号となる。
【００５５】
第１ＣＰＵコアクロック選択回路３３０と第２ＣＰＵコアクロック選択回路３３１の出力は、ＣＰＵコアクロック切替回路３３６に入力される。第１ＣＰＵコアレジスタ３３２の出力は、ＣＰＵコアクロック切替信号生成回路３３４に入力され、ＣＰＵコアクロック切替信号生成回路３３４の出力はＣＰＵコアクロック切替回路３３６のクロック切替信号となり、そのＣＰＵコアクロック切替回路３３６の出力はＣＰＵコアクロック４０１となる。
【００５６】
第２周辺エバチップレジスタ３４３はスキュー設定値選択回路３５１からのデータを格納する。第１周辺エバチップレジスタ３４２は第２周辺エバチップレジスタ３４３のデータを受け取り格納する。ソースクロック４００とそれに直列に接続された遅延ゲート３２１、３２２、３２３、３２４のそれぞれからの出力は第１周辺エバクロック選択回路３４０と第２周辺エバクロック選択回路３４１に入力される。第１周辺エバクロック選択回路３４０には他にＶＤＤが入力として、第２周辺エバクロック選択回路３４１には他にＧＮＤが接続されている
【００５７】
第１周辺エバチップレジスタ３４２の格納データは、第１周辺エバクロック選択回路３４０の信号切替信号として入力され、第２周辺エバチップレジスタ３４３の格納データは第２周辺エバクロック選択回路３４１の信号切替信号として入力される。
【００５８】
第１周辺エバクロック選択回路３４０と第２周辺エバクロック選択回路３４１の出力は、周辺エバチップレジスタクリア回路３４５のそれぞれの入力となり、その周辺エバチップレジスタクリア回路３４５の出力は、第１周辺エバチップレジスタ３４２のクリア信号となる。第１周辺エバクロック選択回路３４０と第２周辺エバクロック選択回路３４１の出力は、周辺エバクロック切替回路３４６の入力に接続されている。
【００５９】
第１周辺エバチップレジスタ３４２の出力は、周辺エバクロック切替信号生成回路３４４に入力され、周辺エバクロック切替信号生成回路３４４の出力は周辺エバクロック切替回路３４６の切替信号となり、その周辺エバクロック切替回路３４６の出力は周辺エバクロック４０２となる。
【００６０】
図８は図７のスキュー調整用ブロック３１１でのクロックの切り替えのタイミングチャートを示す。ここではＣＰＵコアクロック４０１が時刻Ｔ１０２において遅延ゲート３２２の出力から、遅延ゲート３２４の出力に切り替わる例を示す。例えば、ＣＰＵコア３１２よりも、周辺エバチップ３１３の動作電圧が大幅に低い場合、ＣＰＵコア３１２の方が速く動作するため、ＣＰＵコア３１２の動作クロックに遅延ゲート３２２で遅延を付加することにより周辺エバチップ３１３との動作タイミングを合わせる。そして、この状態から、周辺エバチップ３１３の電圧がさらに下がることで、ＣＰＵコア３１２の動作クロックにより大きな遅延となる遅延ゲート３２４に切り替えることでＣＰＵコア３１２の動作と周辺エバチップ３１３の同期を合わせる例である。
【００６１】
スキュー調整値設定信号４０３の変化により、スキュー設定値分離回路３５０とスキュー設定値選択回路３５１が動作し、ＣＰＵコアクロックの切替信号であるスキュー設定値を第２ＣＰＵコアレジスタ３３３に与える。そして、時刻Ｔ１００において、スキュー調整値設定信号４０３から得られた第２ＣＰＵコアレジスタ３３３の格納データは００１０Ｈ（遅延信号４１１選択信号）であり、遅延信号４１１を選択しているため、第２ＣＰＵコアクロック選択回路３３１の出力は遅延信号４１１が出力されている。
【００６２】
第１ＣＰＵコアレジスタ３３２のデータはＣＰＵコアレジスタクリア回路３３５により、クリアされているため００００Ｈが出力され、第１ＣＰＵコアクロック選択回路３３０の出力は００００Ｈ選択時のＶＤＤが出力され、出力信号４２３としてＨｉが出力されている。
【００６３】
第１ＣＰＵコアレジスタ３３２は００００Ｈのため、ＣＰＵコアクロック切替信号生成回路３３４はＬｏｗとなり、第２ＣＰＵコアクロック選択回路３３１が選択され、ＣＰＵコアクロック４０１には遅延信号４１１が出力されている。
【００６４】
時刻Ｔ１０１において、第２ＣＰＵコアレジスタ３３３のデータは０１０１Ｈ（遅延信号４１３の選択信号）に変化する。第２ＣＰＵコアレジスタ３３３の前のデータである００１０Ｈ（遅延信号４１１の選択信号）は第１ＣＰＵコアレジスタ３３２へ転送される。そのため、第２ＣＰＵコアクロック選択回路３３１は遅延信号４１３を出力し、第１ＣＰＵコアクロック選択回路３３０は遅延信号４１１を出力する。
【００６５】
ＣＰＵコアクロック切替信号生成回路３３４は第１ＣＰＵコアレジスタ３３２が０ではないため、Ｈｉ出力となり、ＣＰＵコアクロック切替回路３３６は第１ＣＰＵコアクロック選択回路３３０の出力信号４２３を選択し、出力の遅延信号４１１がＣＰＵコアクロック４０１に出力される。
【００６６】
時刻Ｔ１０２において、第１ＣＰＵコアクロック選択回路３３０と第２ＣＰＵコアクロック選択回路３３１の出力信号である遅延信号４１１と遅延信号４１３が共に同一論理レベルであるＬｏｗのタイミングで、ＣＰＵコアレジスタクリア回路３３５の出力がＨｉとなり、第１ＣＰＵコアレジスタ３３２のデータがクリアされる。そのためＣＰＵコアクロック切替信号生成回路３３４がＬｏｗになり、ＣＰＵコアクロック切替回路３３６が出力信号を遅延信号４１１から、遅延信号４１３へ切り替えることにより、ＣＰＵコアクロックは遅延信号４１３となる。
【００６７】
以上述べたように、ここでは、時刻Ｔ１０１のタイミングでスキュー設定値信号４０３が変化するが、ＣＰＵコアクロック４０１の切り替えは時刻Ｔ１０２で行なう。このように、ＣＰＵコアクロック４０１の切り替えの前後の信号が共にＬｏｗ位相となるようなタイミングで信号を切り替える。すなわち、時刻Ｔ１０２前のタイミングで第１ＣＰＵコアクロック選択回路３３０のクロック信号４２３はＬｏｗレベルであり、時刻Ｔ１０２後のタイミングで第２ＣＰＵコアクロック選択回路３３１のクロック信号４２４はＬｏｗレベルであり、時刻Ｔ１０２の前後において、切り替えるクロック信号４２３、４２４は共にＬｏｗレベルとなっている。このことにより、スキュー切替信号のタイミングに関わらず、変化前後の信号の変化タイミングに同期して、実際の信号を切り替えるため、動作クロックのひげの発生を防止することができ、誤動作を防ぐことができる。
【００６８】
次に、図９はＣＰＵコアクロック４０１側を遅延させている状況から、周辺エバクロック４０２側に遅延が入るようにクロックを切り替える時のタイミングチャートを示す。ここではＣＰＵコアクロック４０１が時刻Ｔ２０２において最初の遅延ゲート３２２の出力から、遅延なしのスルー出力に切り替わり、周辺エバクロック４０２が時刻Ｔ２０３において遅延なしのスルー出力から、遅延ゲート３２３の出力に切り替わる例を示す。
【００６９】
これは、例えば、ＣＰＵコア３１２よりも周辺エバチップ３１３の動作電圧が低く、ＣＰＵコア３１２の方が速く動作するため、ＣＰＵコア３１２の動作クロックに遅延ゲート３２２で遅延を付加することにより周辺エバチップ３１３との動作タイミングを合わせている状態から、周辺エバチップ３１３の電圧がＣＰＵコア３１２の電圧よりも上がることで、ＣＰＵコア３１２の動作クロックに遅延が不要になり遅延なしのスルー出力に切り替え、逆に周辺エバチップ３１３の動作クロックに遅延が必要になり、遅延なしのスルー出力から遅延ゲート３２３に切り替えることでＣＰＵコア３１２の動作と周辺エバチップ３１３の動作を合わせる場合などである。
【００７０】
スキュー調整値設定信号４０３の変化により、スキュー設定値分離回路３５０とスキュー設定値選択回路３５１が動作し、ＣＰＵコアクロック切替信号４２１となるスキュー設定値を第２ＣＰＵコアレジスタ３３３に与え、また、周辺エバクロック切替信号４２２に当たるスキュー設定値を周辺エバコアレジスタ３４３に与える。
【００７１】
そして、時間Ｔ２００においては、スキュー調整値設定信号４０３が第２ＣＰＵコアレジスタ３３３のデータは００１０Ｈ（遅延信号４１１の選択信号）であり、遅延信号４１１を選択しているため、第２ＣＰＵコアクロック選択回路３３１の出力は遅延信号４１１が出力されている。
【００７２】
また、第２周辺エバコアレジスタ３４３のデータは０００１Ｈ（ソースクロック４００の選択信号）であり、遅延なしのソースクロック４００を選択しているため、第２周辺エバクロック選択回路３４１の出力はソースクロック４００が出力されている。第１ＣＰＵコアレジスタ３３２のデータはＣＰＵコアレジスタクリア回路３３５により、クリアされているため００００Ｈが出力され、第１ＣＰＵコアクロック選択回路３３０の出力は００００Ｈ選択時のＶＤＤとなり、出力信号４２３としてＨｉ出力されている。
【００７３】
第１ＣＰＵコアレジスタ３３２は００００Ｈのため、ＣＰＵコアクロック切替信号生成回路３３４は、Ｌｏｗとなり、第２ＣＰＵコアクロック選択回路３３１が選択され、ＣＰＵコアクロック４０１には遅延信号４１１が出力されている。また、第１周辺エバチップレジスタ３４２のデータは周辺エバチップレジスタクリア回路３４５により、クリアされているため００００Ｈが出力され、第１周辺エバクロック選択回路３４０の出力は００００Ｈ選択時のＶＤＤとなり、信号ライン４３３にＨｉ出力されている。
【００７４】
第１周辺エバチップレジスタ３４２は００００Ｈのため、周辺エバクロック切替信号生成回路３４４はＬｏｗとなり、第２周辺エバクロック回路３４１が選択され、周辺エバクロック４０２には、遅延なしのソースクロック４００が出力されている。
【００７５】
時間Ｔ２０１において、第２ＣＰＵコアレジスタ３３３のデータは０００１Ｈ（ソースクロック４００の選択信号）に変化する。第２ＣＰＵコアレジスタ３３３の前のデータである００１０Ｈ（遅延信号４１１の選択信号）は第１ＣＰＵコアレジスタ３３２へ転送される。そのため、第２ＣＰＵコアクロック選択回路３３１は遅延なしのソースクロック４００を出力し、第１ＣＰＵコアクロック選択回路３３０は遅延信号４１１を出力する。ＣＰＵコアクロック切替信号生成回路３３４は第１ＣＰＵコアレジスタ３３２が０ではないためＨｉ出力となり、ＣＰＵコアクロック切替回路３３６は第１ＣＰＵコアクロック選択回路３３０の出力信号４２３を選択し、遅延信号４１１がＣＰＵコアクロック４０１として出力される。
【００７６】
次に、時刻Ｔ２０１において、第２周辺エバチップレジスタ３４３のデータは００１１Ｈ（遅延信号４１２の選択信号）に変化する。第２周辺エバチップレジスタ３４３の前のデータである０００１Ｈ（ソースクロック４００の選択信号)は第１周辺エバチップレジスタ３４２へ転送される。そのため、第２周辺エバクロック選択回路３４１は遅延信号４１２を出力し、第１周辺エバクロック選択回路３４０は遅延なしソースクロック４００を出力する。
【００７７】
周辺エバクロック切替信号生成回路３４４は第１周辺エバチップレジスタ３４２が０ではないためＨｉ出力となり、周辺エバクロック切替回路３４６は第１周辺エバクロック選択回路３４０の出力信号４３３のラインを選択し、遅延なしソースクロック４００が周辺エバクロック４０２として出力される。
【００７８】
そして、時刻Ｔ２０２において、第１ＣＰＵコアクロック選択回路３３０及び第２ＣＰＵコアクロック選択回路３３１の出力信号であるそれぞれ遅延信号４１１及びソースクロック４００が共にＬｏｗのタイミングで、ＣＰＵコアレジスタクリア回路３３５の出力がＨｉとなり、第１ＣＰＵコアレジスタ３３２のデータがクリアされる。そのためＣＰＵコアクロック切替信号生成回路３３４がＬｏｗになり、ＣＰＵコアクロック切替回路３３６が出力信号を遅延信号４１１から、遅延なしソースクロック４００へ切り替えることにより、ＣＰＵコアクロックはソースクロック４００となる。
【００７９】
また、時刻Ｔ２０３において、第１周辺エバクロック選択回路３４０及び第２周辺エバクロック選択回路３４１の出力信号であるそれぞれ遅延信号４１２及びソースクロック４００が共にＬｏｗのタイミングで、周辺エバチップレジスタクリア回路３４５の出力がＨｉとなり、第１周辺エバチップレジスタ３４２のデータがクリアされる。そのため周辺エバクロック切替信号生成回路３４４がＬｏｗになり、周辺エバクロック切替回路３４６が出力信号を遅延なしソースクロック４００から、遅延信号４１２へ切り替えることにより、周辺エバクロックは遅延信号４１２となる。
【００８０】
以上述べたように、ここでは時刻Ｔ２０１のタイミングでスキュー設定値信号４０３が変化するが、ＣＰＵコアクロック４０１の信号の切り替えは切り替え前後の信号が共に同一論理レベルであるＬｏｗ位相のタイミングＴ２０２により信号を変化させる。すなわち、ＣＰＵコアクロック４０１は、時刻Ｔ２０２までは遅延ゲート３２２の出力４１１を選択し、時刻Ｔ２０２にソースクロック４００を選択するため、時刻Ｔ２０２の前後でいずれもＬｏｗレベルとなっている。同様に周辺エバクロック４０２は時刻Ｔ２０３のタイミングで信号を切り替えるが、切り替え前後の信号が共に同一論理レベルであるＬｏｗ位相のタイミング（Ｔ２０３）にて信号を変化させる。すなわち、時刻Ｔ２０２までは、ソースクロック４００を選択し、Ｔ２０２のタイミングで遅延ゲート３２３の出力４１２を選択することで、周辺エバクロック４０２は、Ｔ２０２のタイミング前後でいずれもＬｏｗレベルとなる。このことにより、スキュー切替信号のタイミングに関わらず、変化前後の信号の変化タイミングに同期して、実際の信号を切り替えるため、動作クロックにひげの発生を防止することができ、誤動作を防止することができる。
【００８１】
従来ではクロックの位相比較で調整値を求めていたため、高周波数で電圧変動幅が広くなった場合に遅延がクロックの周期以上になると適切な遅延量とすることができなくなっていたが、本実施の形態においては予め、動作電圧毎に、ＣＰＵエバチップ３１８及び周辺エバチップ３１３が最適に動くスキュー調整値をテーブルで保持しているためクロック周期以上の遅延であっても調整可能である。このため動作周波数が変動するシステムでも、１周期以上のクロックスキューを検出し設定できるため、周辺エバチップ３１３とＣＰＵエバチップ３１８間で入出力するデータのタイミングが一致し、誤動作することがない。
【００８２】
さらに、本実施の形態においては実際のタイミングスキューを設定電圧毎に組み込んで動作を行うため、従来のように基板上にクロックの経路の違いによる基板上の遅延調整の誤差が生じることがないため、より誤動作の生じないシステムが構築することができる。
【００８３】
実施の形態２．
次に、本発明の実施の形態２について説明する。実施の形態１のユーザ電圧測定ブロック３１５を、マイコン（ＭＣＵ）３６０のＡＤ機能（ＡＤ変換器３６１）で実現することも可能である。図１０は、本実施の形態にかかるエミュレータを示すブロック図である。エミュレータ３１０は、ＭＣＵ３６０を有し、テーブルブロック３１４はＭＣＵ３６０のＲＯＭを使用する。このＭＣＵ３６０はエミュレータ３１０上に実装しているメインボードとホストマシンのＩ／Ｆのコントロール用マイコンを使用することができる。本実施の形態は、ＭＣＵ３６０のＡＤ機能が余っている場合に有効である。
【００８４】
この場合、マイコンのテーブルブロック（ＲＯＭ）３１４にスキュー調整用のテーブルを書き込んでおいて、ＡＤ変換器３６１でユーザ電圧をモニタする。テーブルからのスキュー設定値を元に、スキュー調整用ブロック３１１で周辺エバチップ３１３とＣＰＵコア３１２の動作クロックを調整する。
【００８５】
ＭＣＵ３６０のプログラムの中で、動作電圧をＡＤ変換する機能を常に動作させ、ＡＤ変換終了割り込みの度に定期的にテーブルブロック３１４へ、また、そのアドレスについては、電圧範囲Ａ（３．０Ｖ−２．０Ｖ）に対応するアドレスをテーブルブロックの０００３Ｈ番地に、電圧範囲Ｂ（５．５Ｖ以上）を対応するアドレスをテーブルブロックの００００Ｈ番地にというように予め決めておく。
【００８６】
本実施の形態においても実施の形態１と同様の効果を奏する。実施の形態１における電圧測定ブロックとテーブルブロックを、エミュレータ３１０とホストマシンのＩ／Ｆのコントロール用ＭＣＵ３６０で余ったＲＯＭ、ＡＤ変換器、Ｐｏｒｔ又は外部拡張機能で実現することにより、コスト削減を図ることができる。
【００８７】
さらに、基板上の構成がシンプルになる。さらにまた、ＭＣＵ３６０が搭載されていて、そのＡＤ機能が余っていた場合、新たな資源を追加することなく本実施の形態にかかるエミュレータを実現することができる。たとえば図１の全体構成図のようにエミュレータ３１０とホストマシン１間の通信をコントロールするマイコンがあり、かつそのマイコンの機能が余っている場合は、本実施の形態２で必要なＭＣＵ３６０を兼用して使用できるため、新たなマイコンを実装せずにすみ、コストの削減につながる。
【００８８】
実施の形態３．
次に、本発明の実施の形態３について説明する。本実施の形態においては、実施の形態１における電圧測定ブロックを、コンパレータ（アナログＩＣ）を設けて実現する。図１１は、実施の形態３にかかるエミュレータを示すブロック図である。実施の形態１でのユーザ電圧測定ブロック３１５を図１１のコンパレータ部３６３に置き換えてもよい。図１２にコンパレータ部３６３の詳細を示す。スキュー調整を切り替える基準電圧値毎にコンパレータ５０１〜５０４を設け、それぞれのコンパレータ５０１〜５０４に基準電圧を期待値として、ユーザ電圧を比較対象電圧として入力する。そして、コンパレータ５０１〜５０４の出力をデコーダ５０５に接続する。
【００８９】
各コンパレータ５０１〜５０４で基準電圧と比較対象のユーザ電圧と比較して出力される"Ｈｉｇｈ"または"ＬＯＷ"の出力結果をデコーダ５０５にて、ＲＯＭのアドレスにデコードする。デコーダ５０５以下の動きについては、実施の形態１と同様で、予め求めてテーブルブロック３１４に格納してあるスキュー調整用テーブルから、スキュー調整値をコンパレータ部３６３から出力されるアドレスにより選択することで、ユーザの電圧に合ったスキューで動作させることができる。
【００９０】
本実施の形態においても、実施の形態１と同様の効果を奏する。さらにコンパレータ部３６３を使用することにより、電圧検出のスピードがあがり、ユーザの動作によりリアルタイム追従した設定を行うことができる。また、マイコンのＡＤ変換速度ｍｉｎ６μＳに対して、コンパレータ部３６３の変換速度は０．３μｓ〜１μｓなのでより、コンパレータ部３６３を採用した方が電圧変動により速く反応することができる。
【００９１】
以上、説明したように、ＣＰＵエバチップ３１８が一定電圧で動作しており、周辺エバチップ３１３の動作電圧が変動する複数チップ構成で、チップ毎にクロックスキューを調整したクロックによって、各チップのプログラムの実行とチップ間データの入出力を行なうエミュレータに対して、次の利点がある。
【００９２】
すなわち、第１に１つの製品で広範囲な電圧範囲でのスキューを調整できるため、ユーザの使用電圧範囲ごとにエミュレータを提供する必要がなくなり、１つのエミュレータで広範囲な電圧範囲に対応できるようになる。
【００９３】
第２に、動作電圧に応じた最適なスキュー調整値を自動的に設定できるため、ユーザは、使用環境を意識することなく、最適なスキューで使用できる。
【００９４】
第３に電圧変動によって、１周期以上のスキューのずれが発生する場合でも正しくスキュー調整することができる。
【００９５】
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００９６】
【図１】本発明の実施の形態１にかかるインサーキットエミュレータのシステム全体を示す図である。
【図２】本発明の実施の形態１にかかるエミュレータ３１０の各機能を示すブロックである。
【図３】ユーザ電圧測定ブロックからデコーダよりアドレスを出力するまでの一般的な回路構成を示す図である。
【図４】本発明の実施の形態１にかかるスキュー調整用テーブルの作成方法を示すフローチャートである。
【図５】(ａ)及び(ｂ)は、個体差によるスキュー調整値にバラつきがあった場合の結果例を示す。
【図６】本発明の実施の形態１にかかるテーブルブロックに格納されるテーブルの例を示す図である。
【図７】本発明の実施の形態１にかかるスキュー調整用ブロックの詳細を示すブロック図である。
【図８】図７のスキュー調整用ブロックでのクロックの切り替えのタイミングチャートを示す。
【図９】ＣＰＵコアクロック側を遅延させている状況から、周辺エバクロック側に遅延が入るようにクロックを切り替える時のタイミングチャートを示す図である。
【図１０】本発明の実施の形態２にかかるエミュレータを示すブロック図である。
【図１１】本発明の実施の形態３にかかるエミュレータを示すブロック図である。
【図１２】本発明の実施の形態３にかかるコンパレータ部の詳細を示す図である。
【図１３】（ａ）は特許文献１に記載のエミュレーション回路、（ｂ）は（ａ）に示すエミュレーション回路の動作を示すタイミングチャートである。
【図１４】特許文献１の問題点を説明する図である。
【符号の説明】
【００９７】
２  ホストコントロールＭＣＵ
３  エミュレーションメモリ
４  レベルシフタ
５  ユーザターゲットボード
６  ターゲットＩ／Ｆ
３１０  エミュレータ
３１１  スキュー調整用ブロック
３１２  エバチップ
３１２  ＣＰＵコア
３１３  周辺エバチップ
３１４  テーブルブロック
３１５  ユーザ電圧測定ブロック
３１６  ユーザ電源電圧供給部
３１７  クロックジェネレータ
３１８  ＣＰＵエバチップ
３２０  バス
３２１〜３２４  遅延ゲート
３３０  第１ＣＰＵコアクロック選択回路
３３１  第２ＣＰＵコアクロック選択回路
３３２  第１ＣＰＵコアレジスタ
３３３  第２ＣＰＵコアレジスタ
３３４  ＣＰＵコアクロック切替信号生成回路
３３５  ＣＰＵコアレジスタクリア回路
３３６  ＣＰＵコアクロック切替回路
３３６  コアチップクロック切替回路
３４０  周辺エバクロック選択回路
３４０  第１周辺エバクロック選択回路
３４１  第２周辺エバクロック選択回路
３４２  第１周辺エバチップレジスタ
３４３  第２周辺エバチップレジスタ
３４４  周辺エバクロック切替信号生成回路
３４５  周辺エバチップレジスタクリア回路
３４６  周辺エバクロック切替回路
３５０  スキュー設定値分離回路
３５１  スキュー設定値選択回路
３６１  ＡＤ変換器
３６２  デコーダ
３６３  コンパレータ部
４００  ソースクロック
４０１  ＣＰＵコアクロック
４０２  周辺エバクロック
４０２  周辺エバクロック
４０３  スキュー調整値設定信号
４０４  アドレス出力
４０５  ユーザ電圧
４１０〜４１３  遅延信号
４１０〜４１３  遅延ゲート
４２１  ＣＰＵコアクロック切替信号
４２２  周辺エバクロック切替信号
４２３  出力信号
５０１〜５０４  コンパレータ
５０５  デコーダ
５１１〜５１４  比較回路
【図１】
2008287462.tif 000003
【図２】
2008287462.tif 000004
【図３】
2008287462.tif 000005
【図４】
2008287462.tif 000006
【図５】
2008287462.tif 000007
【図６】
2008287462.tif 000008
【図７】
2008287462.tif 000009
【図８】
2008287462.tif 000010
【図９】
2008287462.tif 000011
【図１０】
2008287462.tif 000012
【図１１】
2008287462.tif 000013
【図１２】
2008287462.tif 000014
【図１３】
2008287462.tif 000015
【図１４】
2008287462.tif 000016