(57)【特許請求の範囲】
【請求項１】
検査対象設計（ＤＵＴ：Design Under Test）の複数のクロック信号を生成するための実行可能な命令を記憶する非一時的コンピュータ可読記憶媒体であって、前記命令によって、エミュレータは、
各ジッタクロック値が前記エミュレータによってエミュレーションされている前記ＤＵＴの前記複数のクロック信号のうちの１つのクロック信号に関連付けられ、かつ、各ジッタクロック値が前記１つのクロック信号に関連付けられたジッタ値とクロックパラメータとに基づいて決定される、複数のジッタクロック値を特定し、
前記複数のジッタクロック値から、最小ジッタクロック値を特定し、
前記複数のクロック信号のうち、前記最小ジッタクロック値に関連付けられたクロック信号のエッジを出力するように設定される非一時的コンピュータ可読記憶媒体。
【請求項２】
前記命令によって、前記エミュレータは、前記クロック信号に関連付けられたジッタ範囲から前記ジッタ値をランダムに選択するようにさらに設定される請求項１に記載の非一時的コンピュータ可読記憶媒体。
【請求項３】
前記クロック信号に関連付けられた前記クロックパラメータは、前記クロック信号の周期に関連付けられている請求項１に記載の非一時的コンピュータ可読記憶媒体。
【請求項４】
前記命令によって、前記エミュレータは、前記ジッタ値及び前記クロックパラメータを組み合わせることにより、前記複数のジッタクロック値から１つのジッタクロック値を決定するようにさらに設定される請求項１に記載の非一時的コンピュータ可読記憶媒体。
【請求項５】
前記命令によって、前記エミュレータは、前記最小ジッタクロック値でないジッタクロック値に関連付けられた前記複数のクロック信号の各々について、前記クロック信号の状態を維持するようにさらに設定される請求項１に記載の非一時的コンピュータ可読記憶媒体。
【請求項６】
前記命令によって、前記エミュレータは、ジッタクロック値に関連付けられた前記複数のクロック信号の各々について、前記ジッタクロック値が前記最小ジッタクロック値であるか否かに基づき、前記クロック信号の追加ジッタクロック値を生成するようにさらに設定される請求項１に記載の非一時的コンピュータ可読記憶媒体。
【請求項７】
前記命令によって、前記エミュレータは、前記ジッタクロック値が前記最小ジッタクロック値ではないことに応じて、前記追加ジッタクロック値を、前記ジッタクロック値と前記最小ジッタクロック値との間の差となるよう生成するようにさらに設定される請求項６に記載の非一時的コンピュータ可読記憶媒体。
【請求項８】
前記命令によって、前記エミュレータは、前記クロック信号に関連付けられた前記ジッタクロック値が前記最小ジッタクロック値であることに応じて、前記クロック信号に関連付けられた追加クロックパラメータと、ジッタ範囲からランダムに選択された追加ジッタ値とを合計することにより、前記追加ジッタクロック値を生成するようにさらに設定される請求項６に記載の非一時的コンピュータ可読記憶媒体。
【請求項９】
検査対象設計（ＤＵＴ：Design Under Test）のクロック信号を生成するための実行可能な命令を記憶する非一時的コンピュータ可読記憶媒体であって、前記命令によって、エミュレータは、
前記エミュレータによってエミュレーションされている前記ＤＵＴの前記クロック信号に関連付けられたクロックパラメータを取得し、
ジッタ値をランダムに生成し、
前記クロックパラメータ及び前記ジッタ値に基づき、前記クロック信号に対するジッタクロック値を生成するように設定される非一時的コンピュータ可読記憶媒体。
【請求項１０】
前記命令によって、前記エミュレータは、
各々が前記ＤＵＴの異なるクロック信号と関連付けられた複数のジッタクロック値であって、生成された前記ジッタクロック値を含む前記複数のジッタクロック値を特定し、
前記複数のジッタクロック値から、最小ジッタクロック値を特定し、
前記最小ジッタクロック値に関連付けられたクロック信号のエッジを出力するようにさらに設定される請求項９に記載の非一時的コンピュータ可読記憶媒体。
【請求項１１】
前記クロックパラメータ及び前記ジッタ値が組み合わせられて、前記ジッタクロック値が生成される請求項９に記載の非一時的コンピュータ可読記憶媒体。
【請求項１２】
前記ジッタ値は、前記クロック信号に関連付けられたジッタ範囲から前記ジッタ値をランダムに選択することによって生成される請求項９に記載の非一時的コンピュータ可読記憶媒体。
【請求項１３】
前記クロック信号に関連付けられた前記クロックパラメータは、前記クロック信号の周期に関連付けられている請求項９に記載の非一時的コンピュータ可読記憶媒体。
【請求項１４】
エミュレータによってエミュレーションされるクロック生成器であって、
前記エミュレータによってエミュレーションされる検査対象設計（ＤＵＴ：Design Under Test）の第１クロック信号に関連付けられ、前記第１クロック信号に関連付けられた第１ジッタ値と第１クロックパラメータとに基づいて決定される第１ジッタクロック値を記憶するように設定される第１記憶部と、
前記ＤＵＴの第２クロック信号に関連付けられ、前記第２クロック信号に関連付けられた第２ジッタ値と第２クロックパラメータとに基づいて決定される第２ジッタクロック値を記憶するように設定される第２記憶部と、
前記第１ジッタクロック値が前記第２ジッタクロック値より小さいことを判定するように設定される最小演算子と、
前記第１ジッタクロック値が前記第２ジッタクロック値より小さいことに基づき、前記第１クロック信号のエッジを出力するように設定される比較器と、
を備えるクロック生成器。
【請求項１５】
追加比較器をさらに備え、
前記最小演算子は、さらに、前記第１ジッタクロック値が前記第２ジッタクロック値より小さいことに基づき、前記第１ジッタクロック値を前記比較器と前記追加比較器とに出力するように設定され、
前記比較器は、さらに、
前記最小演算子によって出力された前記第１ジッタクロック値を受信し、
記憶された前記第１ジッタクロック値を前記第１記憶部から読み出し、
前記最小演算子により出力された前記第１ジッタクロック値が前記第１記憶部から読み出した前記第１ジッタクロック値と同一であることに基づき、前記第１クロック信号の前記エッジを出力するように設定され、
前記追加比較器は、
前記最小演算子によって出力された前記第１ジッタクロック値を受信し、
記憶された前記第２ジッタクロック値を前記第２記憶部から読み出し、
前記最小演算子により出力された前記第１ジッタクロック値が前記第２記憶部から読み出した前記第２ジッタクロック値とは異なることに基づき、前記第２クロック信号の状態を維持するように設定される請求項１４に記載のクロック生成器。
【請求項１６】
前記第１クロック信号に関連付けられた第１ジッタ範囲から前記第１ジッタ値をランダムに選択するように設定される第１ランダムジッタ生成器と、
前記第２クロック信号に関連付けられた第２ジッタ範囲から前記第２ジッタ値をランダムに選択するように設定される第２ランダムジッタ生成器と、をさらに備える請求項１４に記載のクロック生成器。
【請求項１７】
前記第１クロック信号に関連付けられた第３ジッタ値と第３クロックパラメータとに基づき、前記第１クロック信号の第３ジッタクロック値を生成し、前記第３ジッタクロック値を前記第１記憶部に記憶して前記第１ジッタクロック値と置き換えるように設定される第１ランダムジッタ生成器と、
前記第２ジッタクロック値と前記第１ジッタクロック値との差に基づき、前記第２クロック信号の第４ジッタクロック値を生成し、前記第４ジッタクロック値を前記記憶要素に記憶して前記第２ジッタクロック値と置き換えるように設定される追加比較器と、をさらに備える請求項１４に記載のクロック生成器。
【請求項１８】
検査対象設計（ＤＵＴ：Design Under Test）の複数のクロック信号を生成する方法であって、
エミュレータにより、複数のジッタクロック値を特定するステップであって、各ジッタクロック値は、前記エミュレータによってエミュレーションされる前記検査対象設計（ＤＵＴ）の前記複数のクロック信号のうちの１つのクロック信号に関連付けられ、各ジッタクロック値は、前記クロック信号に関連付けられたジッタ値とクロックパラメータとに基づいて決定されるステップと、
前記エミュレータにより、前記複数のジッタクロック値から、最小ジッタクロック値を特定するステップと、
前記エミュレータにより、前記複数のクロック信号から、前記最小ジッタクロック値に関連付けられたクロック信号のエッジを出力するステップと、を備える方法。
【請求項１９】
前記最小ジッタクロック値でないジッタクロック値に関連付けられた前記複数のクロック信号の各々について、前記クロック信号の状態を維持するステップをさらに備える請求項１８に記載の方法。
【請求項２０】
ジッタクロック値に関連付けられた前記複数のクロック信号の各々について、前記ジッタクロック値が前記最小ジッタクロック値であるか否かに基づき、前記クロック信号の追加ジッタクロック値を生成するステップをさらに備える請求項１８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、設計のエミュレーション全般に係り、特にジッタを伴うクロックのエミュレーションに係る。
【背景技術】
【０００２】
エミュレータは、回路設計者が高度に複雑な集積回路設計（例えば、システムオンチップ（ＳＯＣ））の設計及びデバグを行う際の補助として開発されてきた。エミュレータは、集積回路の動作を協働して模倣することのできる複数の現場プログラム可能なゲートアレイ（ＦＰＧＡ）又は特定のプログラム可能なエミュレーション要素を備える。設計者は、エミュレータを使用して集積回路の動作を模倣することにより、製造に先立って、その集積回路が種々の設計要件に対応していることを検証できる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
集積回路は、通常、異なるクロックで動作する複数の要素を備える。従って、集積回路は、複数のクロックドメインを備える。信号は、ルーティン的に異なるクロックドメイン間を通過する。クロックドメインの横断中、エラー／異常が集積回路に導入されることもある。エラーの一因は、クロック信号中に存在するジッタであり得る。例えば、２つのクロックが１ＧＨｚで動作するよう設計されることもある。しかしながら、ジッタのせいで、双方のクロックが揃えられる（双方とも１ＧＨｚで動作する）可能性は非常に低い。従って、信号が該複数のクロックドメインを横断する時、クロックが正確に予期どおりには動作しないため、エラーが発生することもある。
【０００４】
エミュレータが集積回路のエミュレーションを行う時、エミュレーション環境内のクロックは、設計通りに（ジッタを含まず）開始及び終了する完全なクロックである。エミュレーションされたクロックは、ジッタを考慮に入れないため、ジッタによって引き起こされる特定のエラーが集積回路のエミュレーション時に検出されないこともある。
【図面の簡単な説明】
【０００５】
本開示の実施形態は、詳細な説明、添付のクレーム、及び添付の図（あるいは図面）からより容易に明らかとなるその他の効果及び特徴を有する。以下に図の簡単な説明を行う。
【０００６】
【図１】一実施形態に係る、エミュレーション環境のブロック図である。
【図２】一実施形態に係る、ホストシステムを示すブロック図である。
【図３】一実施形態に係る、エミュレータによってエミュレーションされてクロック信号を生成するクロック生成器を示すブロック図である。
【図４】一実施形態に係る、クロック信号及びシステムファストクロックを示すタイミング図である。
【図５】一実施形態に係る、複数のクロック信号のエミュレーションを行うプロセスを示すフロー図である。
【図６】一実施形態に係る、機械可読媒体から命令を読み出し、プロセッサでそれらを実行することのできる一例としての機械の要素を示すブロック図である。
【発明を実施するための形態】
【０００７】
図面及び以下の説明は、特定の実施形態を例示としてのみ説明するものである。当業者は、以下の説明から、本明細書に記載の構造及び方法の代替実施形態が本明細書に記載の原則から逸脱することなく採用されてもよいことを容易に理解するであろう。
【０００８】
これからいくつかの実施形態を参照するが、その例を添付の図面に示してある。図面では、同様の要素を特定するのに同様の参照符号を使用している。「３０２Ａ」等、参照符号に続く文字は、そのテキストがその特定の参照符号を有する要素を具体的に言及していることを示す。「３０２」等、後続の文字を伴わない参照符号は、その参照符号を含む図面のいずれかまたはすべての要素を言及するものである。
【０００９】
＜概要＞
ジッタを伴う検査対象設計（ＤＵＴ：Design Under Test）のクロックのエミュレーションを行うための開示のシステム（方法及びコンピュータプログラム製品）を説明する。エミュレータは、エミュレーションされるＤＵＴに対してジッタを伴うクロック信号を生成するため、クロック生成器のエミュレーションを行う。クロック生成器は、各クロック信号に対して、ランダムジッタ生成器、アキュムレータ、及び比較器を備える。クロック生成器は、最小演算子も備える。
【００１０】
各ランダムジッタ生成器は、メモリから、各クロック信号に関連付けられたクロックパラメータを読み出す。クロックパラメータは、例えば、クロック周期の正の部分（立ち上がりエッジと立ち下がりエッジとの間）又は負の部分（立ち下がりエッジと次の立ち上がりエッジとの間）の幅であってもよい。パラメータ化されたランダムジッタ生成器は、読み出されたクロックパラメータと、ジッタ範囲からランダムに選択されたジッタ値（例えば、クロックパラメータとランダムに選択されたジッタ値との和）とに基づき、クロック信号のジッタクロック値を生成する。ランダムジッタ生成器は、各アキュムレータにジッタクロック値を記憶する。
【００１１】
システムファストクロックのクロックサイクル中、最小演算子は、アキュムレータに記憶されたジッタクロック値を取得する。システムファストクロックは、クロック生成器によって生成されたクロック信号より高い周波数で動作する。最小演算子は、ジッタクロック値から最小ジッタクロック値を特定する。最小演算子は、各比較器に最小ジッタクロック値を出力する。各比較器は、最小ジッタクロック値を各アキュムレータに記憶されたジッタクロック値と比較する。値が同一でない場合、比較器は、各クロック信号を変更しない。例えば、クロック信号が高い状態にあった場合、このクロック信号は高い状態に維持される。さらに、比較器は、アキュムレータに記憶されたジッタクロック値と最小ジッタクロック値との間の差を求める。比較器は、アキュムレータの前回記憶された値と置き換える新たなジッタクロック値として、求められた差をアキュムレータに記憶する。
【００１２】
一方、値が同一である場合、比較器は、各クロック信号上にエッジを出力させる（比較器は、クロック信号に状態を変更させる）。一実施形態において、クロック信号が低い状態である場合、比較器は、立ち上がりエッジを出力する。しかしながらクロック信号が高い状態にある場合、比較器は、立ち下がりエッジを出力する。各ランダムジッタ生成器は、メモリから読み出したクロックパラメータと新たにランダムに選択されたジッタ値とに基づき、クロック信号の新たなジッタクロック値を生成する。ランダムジッタ生成器は、生成したジッタクロック値を対応するアキュムレータに記憶し、アキュムレータに前回記憶された値と置き換える。
【００１３】
続く各システムファストクロック中、最小演算子により、アキュムレータに記憶された値から最小ジッタクロック値を選択し、比較器により、各クロック信号のエッジを出力すべきか否かを判定し、新たな値をアキュムレータに記憶するプロセスが繰り返される。ジッタ値をクロック信号の生成に使用されるクロックパラメータに組み込むことにより、クロック信号のサイクルは変化し（すべてが同一とは限らない）、クロックの実世界の環境における動作を表すようになる。さらにジッタを組み込んでクロック信号を変化させることにより、例えば、ＤＵＴ内でクロックドメイン横断中に発生するエラーを検出することができる。
【００１４】
＜エミュレーション環境の概要＞
図１は、一実施形態に係る、エミュレーション環境１００を示すブロック図である。エミュレーション環境１００は、エミュレータ１１０とホストシステム１２０とを備える。エミュレータ１１０及びホストシステム１２０は、インタフェース１１５を介して通信する。
【００１５】
インタフェース１１５は、ホストシステム１２０とエミュレータ１１０との間の通信を可能にする通信媒体である。一実施形態において、インタフェース１１５は、電気的接続を備えたケーブルである。例えば、インタフェース１１５は、ＵＳＢ、イーサネット（登録商標）、光ケーブル、又は特注ケーブルであってもよい。一実施形態において、インタフェース１１５は、無線通信媒体又はネットワークである。他の例として、インタフェース１１５は、Ｂｌｕｅｔｏｏｔｈ（登録商標）又はＩＥＥＥ８０２．１１プロトコルを採用した無線通信媒体であってもよい。
【００１６】
エミュレータ１１０は、検査対象設計（ＤＵＴ）のエミュレーションを行うハードウェアシステムである。ＤＵＴは、エミュレータ１１０によってエミュレーションされる１つ以上の回路設計である。エミュレータ１１０は、ＤＵＴを総括的にエミュレーションすることができるように設定されたＦＰＧＡを備える。他の実施形態において、エミュレータ１１０は、ＦＰＧＡの代わりに他の種別の再設定可能なハードウェア要素を備える。エミュレーションされるＤＵＴについて、エミュレータ１１０は、ホストシステム１２０から、エミュレーション中、ＤＵＴに対してジッタを伴うクロック信号を生成する１つ以上のクロック生成器を備えたＤＵＴの記述を含むビットストリーム（例えば、１つ以上のバイナリファイル）を受信する。さらにこのビットストリームは、ホストシステム１２０により作成されたＤＵＴのパーティションと、エミュレータＦＰＧＡへのパーティションのマッピングと、ＦＰＧＡ上での論理（ＤＵＴ論理及びクロック生成器論理）の置換と配置された論理間のルーティングとを記述する。エミュレータ１１０は、このビットストリームに基づき、適切なＦＰＧＡを設定し、ＤＵＴのエミュレーションを行う。
【００１７】
ホストシステム１２０は、ＤＵＴのエミュレーションを行うようにエミュレータ１１０を設定する。ホストシステム１２０は、単一のコンピュータであってもよく、又は複数のコンピュータの集合であってもよい。ホストシステムが複数のコンピュータからなる実施形態において、ホストシステム１２０によって実施されるものとして本明細書に記載の機能は、これらの複数のコンピュータの間で分担されてもよい。
【００１８】
ホストシステム１２０は、ユーザから、エミュレータ１１０上で実行されるＤＵＴの記述を受信する。一実施形態において、ＤＵＴの記述は、レジスタ転送言語（ＲＴＬ）等、一種のハードウェア記述言語（ＨＤＬ）である。ホストシステム１２０は、ＤＵＴのＨＤＬ記述に基づき、ゲートレベルネットリストを作成する。他の実施形態において、ユーザから受信したＤＵＴの記述は、ゲームレベルネットリストにある。ホストシステム１２０は、ＤＵＴに、１つ以上のクロック生成器を組み込む。各クロック生成器は、ジッタを伴うＤＵＴのクロック信号を生成する。
【００１９】
ホストシステム１２０は、クロック生成器を伴うＤＵＴのエミュレーションを行うために、エミュレータＦＰＧＡを設定するための情報を含む１つ以上のビットストリームを生成する。ビットストリームには、例えば、ＤＵＴの１つ以上のパーティションの設計記述、マッピング情報（例えば、ＦＰＧＡへのパーティションのマッピング）、置換及びルーティング情報、及びＤＵＴの設計制約が含まれてもよい。
【００２０】
ホストシステム１２０は、インタフェース１１５を介してエミュレータ１１０に、ＤＵＴのエミュレーションを行うためにＦＰＧＡを設定すべく生成したビットストリームを送信する。エミュレータ１１０がＤＵＴのエミュレーションを行っている間、及び／又は、エミュレータ１１０がＤＵＴのエミュレーションを行った後、ホストシステム１２０は、エミュレータ１１０からエミュレーション結果を受信する。エミュレーション結果は、ＤＵＴのエミュレーションに基づき、エミュレータ１１０によって生成された情報である。
【００２１】
図２は、一実施形態に係る、ホストシステム１２０をより詳細に示すブロック図である。ホストシステム１２０は、入力受信器２００、合成器２１０、論理マッピングモジュール２２０、パーティション分割モジュール２３０、技術マッピングモジュール２４０、配置及びルーティングモジュール２５０、及びビットストリーム生成モジュール２６０を備える。これらの要素は各々、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせとして実装されてもよい。これらの要素はともに、ＤＵＴのエミュレーションを行うエミュレータ１１０を設定するための情報を生成する。
【００２２】
入力受信器２００は、エミュレータ１１０によって実行されるＤＵＴの記述を受信する。一実施形態において、入力受信器２００は、ＨＤＬ又はゲートレベルネットリストでＤＵＴの記述を受信する。
【００２３】
合成器２１０は、ＨＤＬ記述をゲートレベル論理に変換する。ＤＵＴの記述がＨＤＬで受信された場合、合成器２１０は、ＨＤＬ記述を合成しゲートレベル論理ベースでのＤＵＴの記述を伴うゲートレベルネットリストを作成するようする。一実施形態において、合成器２１０はまた、ＤＵＴについて受信されたゲートレベルネットリストを他のゲートレベルネットリストにも変換する。
【００２４】
論理マッピングモジュール２２０は、ＤＵＴの論理を、エミュレータ１１０のＦＰＧＡにおいて利用可能な要素にマッピングする。論理マッピングモジュール２２０は、エミュレータＦＰＧＡにおいて利用可能でないＤＵＴのゲートレベルネットリストに含まれる論理を特定し、エミュレータＦＰＧＡにおいて利用可能な対応のハードウェア要素に関連付ける（割り当てる）。例えば、論理マッピングモジュール２２０は、ゲートレベルネットリストにおいてＢｏｏｌｅａｎ論理ゲートを特定し、Ｂｏｏｌｅａｎ論理ゲートをＦＰＧＡにおいて利用可能な対応の論理ゲート又はルックアップテーブル（ＬＵＴ）ユニットに関連付ける。一実施形態において、論理マッピングモジュール２２０は、このマッピングに基づいてゲートレベルネットリストを修正する。
【００２５】
一実施形態において、論理マッピングモジュール２２０はまた、ＤＵＴのクロック信号を生成する１つ以上のクロック生成器をＤＵＴに組み込む。クロック生成器によって生成されたクロック信号にはジッタが含まれる。クロック生成器の要素及び設計の詳細については、以下に図３を参照して説明する。
【００２６】
一実施形態において、論理マッピングモジュール２２０は、ＤＵＴを解析し、ＤＵＴのクロック信号を特定する。論理マッピングモジュール２２０は、クロック信号の各セットに対してクロック生成器を備える。他の実施形態において、論理マッピングモジュール２２０は、ＤＵＴのクロック信号すべてを生成するために単一のクロック生成器を備える。論理マッピングモジュール２２０は、ＤＵＴのゲートレベルネットリストを修正することにより、１つ以上のクロック生成器を組み込む。他の実施形態において、１つ以上のクロック生成器は、ＤＵＴのＨＤＬ記述の合成に先立って、ＤＵＴに組み込まれる。
【００２７】
パーティション分割モジュール２３０は、ＤＵＴを分割し、パーティションをエミュレータＦＰＧＡにマッピングする。パーティション分割モジュール２３０は、ＤＵＴのネットリストを使用して、ゲートレベルでＤＵＴを多数のパーティションに分割する。パーティション分割モジュール２３０は、各パーティションをエミュレータ１１０の１つ以上のＦＰＧＡにマッピングする。パーティション分割モジュール２３０は、設計規則、設計制約（例えば、タイミング又は論理上の制約）、及びエミュレータ１１０に関する情報を使用してパーティション分割及びマッピングを実施する。
【００２８】
技術マッピングモジュール２４０は、論理マッピング及びパーティション分割に基づき、ＤＵＴの物理要素をマッピングする。具体的には、技術マッピングモジュール２４０は、必要に応じて、作成されたパーティションとパーティションのＦＰＧＡへのマッピングとに基づいて１つ以上のパーティションを修正する。例えば、ＤＵＴは３つの論理ゲートを備え、第１論理ゲートの出力が第２論理ゲートの入力と第３論理ゲートの入力とに接続されているとする。ＤＵＴをパーティション分割して、第１論理ゲート及び第２論理ゲートが、同一のＦＰＧＡ上で実行されるものの、第３論理ゲートは異なるＦＰＧＡ上で実行されるようにすることができる。異なるＦＰＧＡにおける第１論理ゲートと第３論理ゲートとの間の接続は、同一のＦＰＧＡにおける２つの論理ゲート間の接続と比較するところの追加遅延をもつことにより、不正確な動作を発生してもよい。技術マッピングモジュール２４０は、同一のＦＰＧＡ上の２つの論理ゲート間に遅延要素（又はバッファ）を追加して、異なるＦＰＧＡ上の論理ゲート間の遅延に合致させてもよい。
【００２９】
配置及びルーティングモジュール２５０は、ゲートレベルネットリストとパーティション分割及びマッピングに関連する情報とを受信し、各ＤＵＴ論理要素（クロック生成器要素を含む）の配置及び接続を決定する。配置及びルーティングモジュール２５０は、論理要素とデバグ論理との間のルーティングが最適化されるように、論理要素とデバグ論理を配置する。
【００３０】
ビットストリーム生成モジュール２６０は、エミュレータ１１０のＦＰＧＡの設定に関する情報を記述する１つ以上のビットストリームを生成する。ＦＰＧＡの設定には、実行されるハードウェア要素の置換、要素間の接続（すなわち、ルーティング）、及びその他の設計情報が含まれる。ビットストリーム生成モジュール２６０は、エミュレータ１１０のＦＰＧＡが１つ以上のクロック生成器を備えたＤＵＴのエミュレーションを行うために設定されるように、ビットストリームをエミュレータ１１０に送信する。ビットストリームは、記憶され、ビットストリーム送信指示の受信に応じてエミュレータ１１０に提供されてもよい。
【００３１】
図３は、エミュレータ１１０によってエミュレーションされ、エミュレーションされたＤＵＴに対するクロック信号を生成するクロック生成器３００を示すブロック図である。本例において、図示のクロック生成器３００は、ＤＵＴの２つのクロック信号３１２Ａ及び３１２Ｂを生成する。本実施形態では、簡易化のため、クロック信号３１２を２つのみ図示している。しかしながら、他の実施形態において、クロック生成器３００は、２つを上回る数のクロック信号３１２を生成するであろう。クロック生成器３００は、クロック信号３１２より高い周波数で動作するシステムファストクロック３１１に応じて動作する。一実施形態において、システムファストクロック３１１の各サイクル中、クロック信号３１２の少なくとも１つがエッジ（例えば、立ち上がりエッジ又は立ち下がりエッジ）を出力する。
【００３２】
クロック生成器３００は、ランダムジッタ生成器３０２Ａ及び３０２Ｂ、アキュムレータ３０４Ａ及び３０４Ｂ、最小演算子３０６、及び比較器３０８Ａ及び３０８Ｂを備える。ランダムジッタ生成器３０２Ａ、アキュムレータ３０４Ａ、及び比較器３０８Ａを使用してクロック信号３１２Ａを生成する。ランダムジッタ生成器３０２Ｂ、アキュムレータ３０４Ｂ、及び比較器３０８Ｂを使用してクロック信号３１２Ｂを生成する。クロック生成器３００が（信号３１２Ａ及び３１２Ｂに加えて）追加クロック信号３１２を生成する他の実施形態において、クロック生成器３００は、各追加クロック信号について、追加ランダムジッタ生成器３０２、アキュムレータ３０４、及び比較器３０８を備えるであろう。
【００３３】
ランダムジッタ生成器３０２は、ジッタを各クロック信号３１２に組み込む。一実施形態において、各ランダムジッタ生成器３０２は、対応のクロック信号３１２が有することのできるジッタ値を表すジッタ範囲（例えば、−Ｎ〜＋Ｍ）を記憶する。ジッタ範囲は、対応のクロック信号の設計仕様に基づいて設定される。例えば、クロック信号３１２の設計仕様は、クロック信号３１２が１ＧＨｚ±１０％ジッタで動作することを示してもよい。ジッタ範囲は、±１０％に基づいて設定される。他の実施形態において、ランダムジッタ生成器３０２は、これらのパラメータを使用した計算式に基づいてジッタ値を決定するのを可能とするような、より複雑なジッタ値を記憶する。
【００３４】
各ランダムジッタ生成器３０２は、メモリ３１０から入力３１４を介して、対応のクロック信号３１２のクロックパラメータを読み出す。一実施形態において、メモリ３１０は、図３に示すとおり、クロック生成器３００から分離している。他の実施形態において、メモリ３１０は、クロック生成器３００の一部である。他の実施形態において、複数のメモリを使用してクロックパラメータを記憶する。他の実施形態において、メモリが設けられず、クロックパラメータは、通信チャンネル等の他の手段を介して取得される。
【００３５】
一実施形態において、メモリ３１０に記憶された各クロックパラメータはクロックサイクルの周期に関連付けられる。一実施形態において、メモリ３１０は、各クロック信号３１２について、少なくとも２つのクロックパラメータを記憶する。１つのクロックパラメータは、クロックの周期の正の部分の幅であり、これは立ち上がりエッジと立ち下がりエッジとの間である。他のクロックパラメータは、クロックの周期の負の部分の幅であり、これは立ち下がりエッジと次の立ち上がりエッジとの間である。ランダムジッタ生成器３０２は、各クロック信号３１２のクロックパラメータのうちの少なくとも１つを読み出す。他の実施形態において、メモリ３１０は、各クロック信号３１２について、クロックサイクルの周期の半分である単一のクロックパラメータを記憶する。他の実施形態において、記憶される単一のクロックパラメータは、クロックサイクルの周期である。他の実施形態において、記憶されるパラメータは、クロックの周期及びデューティサイクルである。
【００３６】
ランダムジッタ生成器３０２は、記憶されたジッタ範囲内でジッタ値をランダムに選択する（例えば、−Ｎと＋Ｍとの間の値を選択する）。ランダムジッタ生成器３０２は、読み出したクロックパラメータとランダムに選択されたジッタ値とに基づいてジッタクロック値を生成する。一実施形態において、ランダムジッタ生成器３０２は、読み出したクロックパラメータとランダムに選択されたジッタ値とを合計することにより、ジッタクロック値を生成する。他の実施形態において、ジッタクロック値は、異なる方法でクロックパラメータとランダムに選択されたジッタ値とを組み合わせる（例えば、クロックパラメータとジッタ値を乗算、除算、又は差を計算する）ことによって生成することもできる。ランダムジッタ生成器３０２は、アキュムレータ３０４にジッタクロック値を記憶するため、出力３１６を介してジッタクロック値を出力する。
【００３７】
各アキュムレータ３０４は、ジッタクロック値を記憶する記憶要素である。アキュムレータ３０４は、入力３１８Ａを介して対応するランダムジッタ生成器３０２からジッタクロック値を受信し、その値を記憶する。アキュムレータ３０４は、出力３２０を介して各比較器３０８にジッタクロック値を出力し、出力３２２を介して最小演算子３０６にジッタクロック値も出力する。
【００３８】
最小演算子３０６は、システムファストクロック３１１を受信し、システムファストクロックのサイクル中、最小演算子３０６は、アキュムレータ３０４に記憶された値から最小ジッタクロック値を選択する。最小演算子３０６は、入力３２４を介して、アキュムレータ３０４に記憶されたジッタクロック値を記憶する。最小演算子３０６は、受信したジッタクロック値から、最小値を有するジッタクロック値を選択する。最小演算子３０６は、出力３２６を介して最小ジッタクロック値を比較器３０８に出力する。
【００３９】
比較器３０８は、各クロック信号３１２上のエッジを出力するか否かを判定する。各比較器３０８は、入力３２８を介して、最小演算子３０６に出力された最小ジッタクロック値を受信する。各比較器３０８は、入力３３０を介して、各アキュムレータ３０４に記憶されたジッタクロック値も受信する。比較器３０８は、アキュムレータ３０４に記憶されたジッタクロック値を最小ジッタクロック値と比較する。これらの値が同一でない場合、比較器３０８は、各クロック信号３１２の状態を変化させない（エッジを出力しない）。一方、これらの値が同一である場合、比較器３０８は、クロック信号３１２の状態を変更する。比較器３０８は、クロック信号３１２が低い状態にあった場合、クロック信号３１２に対して高い状態（立ち上がりエッジ）を出力する。しかしながら、クロック信号が高い状態にあった場合、比較器は低い状態（立ち下がりエッジ）を出力する。
【００４０】
一実施形態において、比較器３０８は、これらの値が同一である時、現在のシステムファストクロックサイクル中、クロック信号３１２の状態を変更する代わりに、クロック信号３１２の状態を変更する前に、１つ以上の追加システムファストクロックサイクルが通過するのを待ってもよい。比較器３０８は、適切なタイミングでない、又はある条件が満たされていないという理由により、状態を変更させるのを待ってもよい。例えば、エミュレータ１１０を動作させる試験台が状態変化の出力の準備ができていない場合、比較器３０８は試験台の準備が整うまで待機するであろう。
【００４１】
さらに、各比較器３０８は、各アキュムレータ３０４に記憶された値と最小ジッタクロック値との間の差を計算する。比較器３０８は、出力３３２を介して計算された差を出力し、この差を新たなジッタクロック値として各アキュムレータ３０４に記憶する。新たなジッタクロック値は、アキュムレータ３０４に前回記憶された値と置き換えられる。他の実施形態において、比較器３０８は、エッジを生成するか否かを判定するためにアキュムレータ３０４に記憶されたジッタクロック値を最小ジッタクロック値と比較する代わりに、アキュムレータ値と最小ジッタクロック値との差を計算し、計算された差が０と等しい場合、エッジを生成すると判定する。
【００４２】
比較器３０８によってアキュムレータ３０４に記憶された値が０である場合、各ランダムジッタ生成器３０２は、アキュムレータ３０４に対する新たなジッタクロック値を生成する。ランダムジッタ生成器３０２は、各クロック信号３１２のクロックパラメータをメモリ３１０から読み出す。メモリ３１０が各クロック信号３１２に対して少なくとも２つのクロックパラメータを記憶する実施形態において、ランダムジッタ生成器３０２は、前回読み込んだクロックパラメータとは異なるクロックパラメータを読み出す。例えば、ランダムジッタ生成器３０２がクロックサイクルの正の部分の幅を前回読み出した場合、ランダムジッタ生成器３０２は、負の部分の幅を読み出す。ランダムジッタ生成器３０２は、読み出されたクロックパラメータとジッタ範囲からランダムに選択されたジッタ値とを合計することによって新たなジッタクロック値を生成する。ランダムジッタ生成器３０２は、アキュムレータ３０４に新たなジッタクロック値を記憶し、前回記憶された値と置き換える。
【００４３】
システムファストクロックの次のサイクル中、アキュムレータ３０４は、自身に記憶されたジッタクロック値を出力し、最小演算子３０６は最小ジッタクロック値を選択し、比較器３０８はエッジを出力するか否かを判定し、新たなジッタクロック値をアキュムレータ３０４に記憶する。従って、システムファストクロックの各サイクル中、プロセスを繰り返す。さらに、クロックパラメータがメモリ３１０から読み出される度に、ジッタがランダムジッタ生成器３０２によってパラメータに組み込まれる。一実施形態において、クロックのいずれかで新たなエッジが要求される時のみ、このプロセスが繰り返される。
【００４４】
一実施形態において、１つ以上のメモリを使用してアキュムレータ３０４を記憶する。アキュムレータ３０４を記憶するメモリは、メモリ３１０とすることができる。
【００４５】
一実施形態において、図３に示す動作は、プロセッサ又はマイクロコントローラによって実施される。本実施形態において、要素３０２、３０４、３０６、及び３０８は、プロセッサに、メモリ３１０からのクロックパラメータを読み出させ、クロックジッタ値の選択、アキュムレーションの記憶、最小値の計算、比較の実施、クロックエッジの発行、及びアキュムレータの更新を行わせる命令である。命令の順が異なる場合もある。
【００４６】
図４は、一実施形態に係る、クロック生成器３００の動作中のクロック信号３１２Ａ、クロック信号３１２Ｂ、及びシステムファストクロック３１１を示すタイミング図４００である。タイミング図４００は、システムファストクロック４０４Ａ、４０４Ｂ、４０４Ｃ、４０４Ｄ、４０４Ｅ、４０４Ｆ、４０４Ｇの７つのサイクルを示している。本例では、クロック信号３１２が低い状態で開始し、メモリ３１０が各クロック信号３１２に対して単一のクロックパラメータを記憶するものとする。メモリ３１０は、信号３１２Ａに対してクロックパラメータ「５５」を記憶し、信号３１２Ｂに対してクロックパラメータ「６０」を記憶する。さらに、信号３１２Ａのジッタ範囲を「±５」とし、信号３１２Ｂのジッタ範囲を「±３」とする。
【００４７】
クロック生成器３００が初期化されるとき、クロック生成器３００は、メモリ３１０からクロック信号３１２Ａに対するクロックパラメータ「５５」を読み出し、ジッタ範囲「±５」からジッタ値「＋４」をランダムに選択する。クロック生成器３００は、クロックパラメータとジッタ値とを合計し、結果の「５９」をアキュムレータ３０４Ａに記憶する。さらに、クロック生成器３００は、メモリ３１０からクロック信号３１２Ｂに対するクロックパラメータ「６０」を読み出し、ジッタ範囲「±３」からジッタ値「−３」を選択する。クロック生成器３００は、これらを合計し、結果の「５７」をアキュムレータ３０４Ｂに記憶する。
【００４８】
クロックサイクル４０４Ａ中、クロック生成器３００は、アキュムレータ３０４Ｂが最小値「５７」を含むことを判定し、結果として、クロック信号３１２Ｂに対して立ち上がりエッジ４０６を出力する。クロック生成器３００は、メモリ３１０からクロック信号３１２Ｂに対するクロックパラメータ「６０」を読み出し、対応するジッタ範囲からジッタ値「−２」をランダムに選択する。クロック生成器３００は、クロックパラメータとジッタ値とを合計し、結果の「５８」をアキュムレータ３０４Ｂに記憶し、前回記憶された値と置き換える。さらにクロック生成器３００は、アキュムレータ３０４Ａに記憶された値の「５９」と最小値「５７」との差を求める。クロック生成器３００は、結果の「２」をアキュムレータ３０４Ａに記憶する。
【００４９】
サイクル４０４Ｂ中、クロック生成器３００は、アキュムレータ３０４Ａが最小値の「２」を含むことを判定し、結果として、クロック信号３１２Ａに対して立ち上がりエッジ４０８を出力する。クロック生成器３００は、メモリ３１０からクロック信号３１２Ａに対するクロックパラメータ「５５」を読み出し、ジッタ値「＋１」をランダムに選択する。クロック生成器３００は、クロックパラメータとジッタ値とを合計し、結果の「５６」をアキュムレータ３０４Ａに記憶する。さらに、クロック生成器３００は、アキュムレータ３０４Ｂに記憶された値の「５８」と最小値「２」との差を求める。クロック生成器３００は、結果の「５６」をアキュムレータ３０４Ｂに記憶する。
【００５０】
サイクル４０４Ｃ中、クロック生成器３００は、アキュムレータ３０４Ａ及び３０４Ｂの双方が最小／同一値の「５６」を含むことを判定する。結果として、クロック生成器３００は、クロック信号３１２Ａに対して立ち下がりエッジ４１０を出力し、クロック信号３１２Ｂに対して立ち下がりエッジ４１２を出力する。クロック生成器３００は、メモリ３１０からクロック信号３１２Ａに対するクロックパラメータ「５５」を読み出し、対応のジッタ範囲からジッタ値「＋２」をランダムに選択する。クロック生成器３００は、クロックパラメータとジッタ値とを合計し、結果の「５７」をアキュムレータ３０４Ａに記憶する。さらにクロック生成器３００は、メモリ３１０からクロック信号３１２Ｂに対するクロックパラメータ「６０」を読み出し、対応のジッタ範囲からジッタ値「−２」をランダムに選択する。クロック生成器３００は、クロックパラメータとジッタ値とを合計し、結果の「５８」をアキュムレータ３０４Ａに記憶する。
【００５１】
クロックサイクル４０４Ｄ中、クロック生成器３００は、アキュムレータ３０４Ａが最小値の「５７」を含むため、クロック信号３１２Ａに対する立ち上がりエッジ４１４を出力する。クロック生成器３００は、メモリ３１０から読み出したクロックパラメータ「５５」とランダムに選択されたジッタ値「＋５」との和に基づき、アキュムレータ３０４Ａにジッタクロック値「６０」を記憶する。さらにクロック生成器３００は、前回アキュムレータ３０４Ｂに記憶された値「５８」と最小値「５７」との差が「１」であるため、アキュムレータ３０４Ｂにジッタクロック値「１」を記憶する。
【００５２】
クロックサイクル４０４Ｅ中、クロック生成器３００は、アキュムレータ３０４Ｂが最小値「１」を含むため、クロック信号３１２Ｂに対して立ち上がりエッジ４１６を出力する。クロック生成器３００は、クロックパラメータ「６０」とランダムに選択されたジッタ値「−１」との和に基づき、アキュムレータ３０ＢＡにジッタクロック値「５９」を記憶する。さらに、クロック生成器３００は、アキュムレータ３０４Ａに前回記憶された値「６０」と最小値「１」との差が「５９」であるため、アキュムレータ３０４Ａにジッタクロック値「５９」を記憶する。
【００５３】
クロックサイクル４０４Ｆ中、クロック生成器３００は、アキュムレータ３０４Ａ及び３０４の双方が最小値「５９」を含むため、クロック信号３１２Ａに対して立ち下がりエッジ４１８を出力し、クロック信号３１２Ｂに対して立ち下がりエッジ４２０を出力する。クロック生成器３００は、アキュムレータ３０４Ａにジッタクロック値「５０」（クロックパラメータ「５５」とランダムに選択されたジッタ値「−５」との和）を記憶する。クロック生成器３００はまた、アキュムレータ３０４Ｂにジッタクロック値「６３」（クロックパラメータ「６０」とランダムに選択されたジッタ値「＋３」との和）も記憶する。クロックサイクル４０４Ｇ中、クロック生成器３００は、アキュムレータ３０４Ａが最小値「５０」を含むため、クロック信号３１２Ａに対して立ち上がりエッジ４２２を出力する。
【００５４】
以下に示す表は、図４の例において、各システムファストクロックサイクル４０４の開始時に各アキュムレータ３０４によって記憶された値を示している。＊印は、新たな値がランダムジッタ生成器３０２から取得されたことを示す。
【表１】
0006353013.tif 000002
【００５５】
タイミング図４００からわかるとおり、クロック信号３１２のサイクルは、ジッタを含むことによって変化するであろう。例えば、クロック信号３１２Ａについては、立ち上がりエッジ４０８と４１４との間に２つのシステムファストクロックサイクル（サイクル４０４Ｂ及び４０４Ｃ）がある。しかしながら、立ち上がりエッジ４１４と４２２との間には、３つのシステムファストクロックサイクル（サイクル４０４Ｄ〜４０４Ｆ）がある。ジッタが含まれなかった場合、各クロック信号３１２のすべてのサイクルが同一となるであろう。クロック信号３１２のジッタ及び変化により、エミュレータ１１０が、例えばＤＵＴにおけるクロックドメインの横断を正しくエミュレーションすることができるようになる。ジッタがなければ、クロック信号３１２Ａが値「６０」を有するクロック信号３１２Ｂより低い値「５５」を有するために、第１クロックエッジがクロック信号３１２Ａ上にあったであろうことにも気付くかもしれない。クロック信号３１２Ｂ上のエッジが最初に現れると、本発明なしには露呈しなかったであろう設計バグを露呈することもある。
【００５６】
図５は、一実施形態に係る、ＤＵＴの複数のクロック信号のエミュレーションを行うプロセスを示すフロー図である。他の実施形態では、図５のステップを異なる順に実施することができる。さらに他の実施形態には、ここに記載のステップ以外の異なる、且つ／又は、追加のステップを含むことができる。
【００５７】
この例示の目的で、エミュレータ１１０は、ＤＵＴのクロック信号に対するクロックパラメータを記憶するものとする。さらに、エミュレータ１１０は、クロック信号が有することのできるジッタ値を表す、各クロック信号に対するジッタ範囲を記憶するものとする。
【００５８】
エミュレータ１１０は、各クロック信号に対してジッタクロック値を生成する（５０２ａ）。クロック信号に対してジッタクロック値を生成するため、エミュレータ１１０は、クロック信号に対して記憶されたクロックパラメータを特定し、クロックパラメータとクロック信号のジッタ範囲からランダムに選択されたジッタ値とを合計する。エミュレータ１１０は、システムファストクロックのサイクルが開始されたか否かを判定する（５０４）。システムファストクロックのサイクルが開始されていない場合、エミュレータ１１０は、次のシステムファストクロックサイクルが開始するのを待つ（５０６）。
【００５９】
システムファストクロックサイクルが開始すると、エミュレータ１１０は、生成されたジッタクロック値から最小値を決定する（５０８）。エミュレータ１１０は、最小ジッタクロック値を有するクロック信号上のエッジを出力する（５１０）。
【００６０】
エミュレータ１１０は、各クロック信号に対する新たなジッタクロック値を生成する（５１２）。クロック信号が最小ジッタクロック値を有していなかった場合、エミュレータ１１０は、そのクロック信号について、クロック信号のために前回生成されたジッタクロック値と最小値との差となる新たなジッタクロック値を決定する。クロック信号が最小ジッタクロック値を有していた場合、エミュレータ１１０は、そのクロック信号について、新たなジッタクロック値を、クロックのために記憶されたクロックパラメータとクロック信号のジッタ範囲からランダムに選択されたジッタ値との和となるように決定する。その後、新たに生成されたジッタクロック値のために、ステップ５０４〜５１２を繰り返す。
【００６１】
＜演算機械の構造＞
さて図６を参照すると、これは機械可読媒体から命令を読み出し、プロセッサ（又はコントローラ）でそれらを実行することのできる一例としての機械の要素を示すブロック図である。具体的には、図６は、コンピュータシステム６００の一例としての形態である機械の図的表現であり、その中には図１〜５で説明した方法のいずれか１つ以上を機械に実施（実行）させるための命令６２４（例えば、ソフトウェア又はプログラムコード）が含まれている。コンピュータシステム６００は、図１のエミュレーション環境１００に示された実体（例えば、ホストシステム１１０、エミュレータ１２０）の１つ以上に使用されてもよい。
【００６２】
一例としてのコンピュータシステム６００は、ハードウェアプロセッサ６０２（例えば、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、デジタル信号プロセッサ（ＤＳＰ）、１つ以上の特定用途専用集積回路（ＡＳＩＣ）、１つ以上の無線周波数集積回路（ＲＦＩＣ）、又はこれらのいずれかの組み合わせ）、メインメモリ６０４、及び静的メモリ６０６を備え、これらは互いにバス６０８を介して通信するよう設定される。コンピュータシステム６００はさらに、グラフィックス表示部６１０（例えば、プラズマ表示パネル（ＰＤＰ）、液晶ディスプレイ（ＬＣＤ）、プロジェクタ、又はブラウン管（ＣＲＴ））を備えてもよい。コンピュータシステム６００は、英数字入力装置６１２（例えば、キーボード）、カーソル制御装置６１４（例えば、マウス、トラックボール、ジョイスティック、モーションセンサ、又はその他のポインティング装備）、記憶部６１６、信号生成装置６１８（例えば、スピーカ）、及びネットワークインタフェース装置６２０も備えてよく、これらもバス６０８を介して通信するよう設定される。
【００６３】
記憶部６１６は、本明細書に記載の方法又は機能のうちのいずれか１つ以上を実現する命令６２４（例えば、ソフトウェア）を記憶する機械可読媒体６２２を備える。命令６２４（例えば、ソフトウェア）はまた、コンピュータシステム６００による実行中、メインメモリ６０４又はプロセッサ６０２（例えば、プロセッサのキャッシュメモリ内）内に、全部又は少なくとも一部存在してもよく、メインメモリ６０４及びプロセッサ６０２もまた機械可読媒体を構成する。命令６２４（例えば、ソフトウェア）は、ネットワークインタフェース装置６２０を介してネットワーク６２６で送受信されてもよい。
【００６４】
機械可読媒体６２２は、一例としての実施形態において単一の媒体として示したが、「機械可読媒体」という用語は、命令（例えば、命令６２４）を記憶可能な単一又は複数の媒体（例えば、集中データベース、分散データベース、又は関連キャッシュ及びサーバ）を含むものと理解されなければならない。また「機械可読媒体」という用語は、機械によって実行される命令（例えば、命令６２４）を記憶可能で、本明細書に開示の方法のうちのいずれか１つ以上を機械に実施させるいずれかの媒体を含むものと理解されなければならない。「機械可読媒体」という用語は、固体メモリ、光学媒体、及び磁気媒体の形態でのデータリポジトリを含むが、これに限定されるものでない。
【００６５】
当分野で既知のとおり、コンピュータシステム６００は、図６に示す以外の異なる、且つ／又は、他の要素を有することができる。またコンピュータシステム６００は、図示の特定要素を省くことができる。例えば、エミュレータ１２０として作用するコンピュータシステム６００は、他の要素のうち、１つ以上のハードウェアプロセッサ６０２、複数の記憶部６１６、ネットワークインタフェース装置６２０、及び複数の設定可能論理回路（図１を参照して上述したとおり）を含んでもよいが、英数字入力装置６１２とカーソル制御装置６１４とを省いてもよい。
【００６６】
＜追加構成の考察＞
本明細書を通じて、複数の例が単一例として説明した要素、動作、又は構造を実装してもよい。１つ以上の方法の個々の動作を別個の動作として図示及び説明したが、個々の動作のうちの１つ以上が同時に実施されてもよく、これらの動作が図示の順に実施される必要はない。例示の構成において別個の要素として表した構造及び機能が、組み合わせられた構造又は要素として実装されてもよい。同様に、単一の要素として表した構造及び機能が、別個の要素として実装されてもよい。これらの変形、修正、追加、及び改良並びにその他の変形、修正、追加、及び改良は本明細書の主題の範囲内である。
【００６７】
本明細書中、例えば、図１〜６に示すとおり、論理、若しくは多数の要素、モジュール、又は機構を含むものとして特定の実施形態を説明した。モジュールは、ソフトウェアモジュール（例えば、機械可読媒体上または送信信号内に実装されたコード）又はハードウェアモジュールのいずれかを構成してもよい。ハードウェアモジュールは、特定動作を実施可能な有形のユニットであり、特定の方法で構成又は配置されてもよい。一例としての実施形態において、１つ以上のコンピュータシステム（例えば、スタンドアロンコンピュータシステム、クライアントコンピュータシステム、又はサーバコンピュータシステム）又はコンピュータシステムの１つ以上のハードウェアモジュール（例えば、プロセッサ、又はプロセッサ群）は、本明細書に記載の特定動作を実施するよう動作するハードウェアモジュールとしてソフトウェア（例えば、アプリケーション又はアプリケーション部分）によって構成されてもよい。
【００６８】
種々の実施形態において、ハードウェアモジュールは、機械的又は電気的に実装されてもよい。例えば、ハードウェアモジュールは、特定動作を実施するように持続的に構成された専用回路又は論理（例えば、現場プログラム可能なゲートアレイ（ＦＰＧＡ）又は特定用途専用集積回路（ＡＳＩＣ）等の特殊目的用プロセッサ）を備えてもよい。ハードウェアモジュールはまた、特定の動作を実施するためにソフトウェアによって一時的に構成されたプログラム可能な論理又は回路（例えば、汎用プロセッサ又はその他のプログラム可能プロセッサ内に含まれるような）を備えてもよい。専用の持続的に構成された回路にハードウェアモジュールを機械的に実装するか、或いは一時的に構成された（例えば、ソフトウェア（又はコンピュータプログラムコード）で構成された）回路にハードウェアモジュールを機械的に実装するかは、コスト及び時間を考慮して決定されてもよいことが理解されるであろう。
【００６９】
本明細書に記載の一例としての方法の種々の動作は、少なくとも部分的に、関連動作を実施するよう一時的に（例えば、ソフトウェアによって）構成されるか持続的に構成される、プロセッサ６０２等の１つ以上のプロセッサによって実施されてもよい。一時的に構成されるか、持続的に構成されるかを問わず、このようなプロセッサは、１つ以上の動作又は機能を実施するよう動作するプロセッサ実装モジュールを構成してもよい。本明細書で言及したモジュールは、いくつかの例としての実施形態において、プロセッサ実装モジュールを備えてもよい。
【００７０】
１つ以上のプロセッサはまた、「クラウドコンピューティング」環境における、又は「サービス型ソフトウェア（ＳａａＳ）」としての関連動作の性能をサポートするように動作してもよい。例えば、少なくとも一部の動作が
コンピュータ群（プロセッサを含む機械の例として）によって実施されてもよく、これらの動作は、ネットワーク（例えば、インターネット）及び１つ以上の適切なインタフェース（例えば、アプリケーションプログラムインタフェース（ＡＰＩ））を介してアクセス可能である。
【００７１】
特定動作の性能が１つ以上のプロセッサの間で分散されてもよく、単一の機械内に設けられるものだけでなく、複数の機械に展開されるものでああってよい。いくつかの例としての実施形態において、１つ以上のプロセッサ又はプロセッサ実装モジュールは、単一の地理的位置（例えば、家庭環境、会社環境、又はサーバファーム）に配置されてもよい。他の例としての実施形態において、１つ以上のプロセッサ又はプロセッサ実装モジュールは、複数の地理的位置に分布してもよい。
【００７２】
本明細書の一部は、機械メモリ（例えば、コンピュータメモリ）内のビット又はバイナリデジタル信号として記憶されたデータ上の動作のアルゴリズム又は象徴的表現で表されている。これらのアルゴリズム又は象徴的表現は、データ処理分野の当業者が、自らの仕事の内容を同業者に伝える際に使用される技術の例である。本明細書において使用される「アルゴリズム」は、所望の結果を導く自己無撞着な一連の動作又は同様の処理である。この文脈において、アルゴリズム及び動作には、物理的量の物理的操作が含まれる。通常、このような量は、記憶、アクセス、転送、結合、比較、又はその他の機械による操作が可能な電気信号、磁気信号、又は光学信号の形態を採ってもよいが、必ずしもこのような形態でなくてよい。時として、主に共通して使用されるという理由で、このような信号を「データ」、「コンテンツ」、「ビット」、「値」、「要素」、「符号」、「性質」、「用語」、「数」、「数値」等の単語を使用して言及するのが好都合である。しかしながら、このような単語は、単に好都合なラベルであって、適切な物理量と関連付けられなければならない。
【００７３】
特段の指摘の無い限り、「処理」、「演算」、「計算」、「決定」、「表現」、「表示」等の単語を使用した本明細書中での議論は、１つ以上のメモリ（例えば、揮発性メモリ、不揮発性メモリ、又はそれらの組み合わせ）、レジスタ、又は情報の受信、記憶、送信、又は表示を行うその他の機械要素内の物理的（例えば、電子的、磁気的、又は光学的）量として表現されるデータの操作又は変換を行う機械（例えば、コンピュータ）の作用又はプロセスを言及するものであってもよい。
【００７４】
本明細書中で使用した「一実施形態」又は「実施形態」の参照は、本実施形態との関連で説明した特定の要素、特徴、構造、又は性質が少なくとも１つの実施形態に含まれることを意味する。本明細書中、種々の箇所で出現する「一実施形態において」というフレーズは、必ずしもすべてが同一の実施形態について言及しているものでない。
【００７５】
いくつかの実施形態は、その派生物とともに「連結」及び「接続」という表現を使用して記述されてもよい。例えば、いくつかの実施形態では、２つ以上の要素が直接の物理的接触又は電気的接触状態にあることを示す「連結」という用語を使用して記述されてもよい。しかしながら、「連結」という用語は、２つの要素が互いに直接接触していないものの、互いに協働する、又は相互作用することも意味してよい。本実施形態は、この文脈において限定されるものでない。
【００７６】
本明細書中で使用される「備える」、「備えている」、「含む」、「含んでいる」、「有する、」「有している」、又はそれらの変化形は、非排他的包含であることを意図するものである。例えば、挙げられた要素を備えるプロセス、方法、物品、又は装置は、必ずしもこれらの要素のみに限定されるものでなく、明示的に挙げられていないか、又はこのようなプロセス、方法、物品、又は装置に本来備わっている他の要素も含んでよい。さらに、反対であることを明示的に指摘していない限り、「又は」は、包含的な「又は」であり、排他的な「又は」ではない。例えば、条件Ａ又はＢは、以下のいずれかによって満たされる。Ａが真実であり（又は存在し）、Ｂが誤りである（又は存在しない）。Ａが誤りであり（又は存在せず）、Ｂが真実である（存在する）。Ａ及びＢの双方が真実である（又は存在する）。
【００７７】
また不定冠詞の使用が、本明細書中の実施形態の要素及び構成要素を説明する際に採用されている。これは、便宜上使用したに過ぎず、本発明の一般的意味を与えるものである。本説明は、１つ又は少なくとも１つを含み、且つ、明示の無い限り複数も含むものと理解しなければならない。
【００７８】
当業者は、本開示を熟読することにより、本明細書に記載の実施形態のさらに追加の代替構造設計及び機能設計を理解するであろう。従って、特定の実施形態及び適用例について図示及び説明を行ったが、本開示の実施形態は、本明細書に開示の精密な構成及び構成要素に限定されるものでないことを理解しなければならない。本明細書に記載の方法及び装置の配置、動作、及び詳細について、添付のクレームに規定の精神及び範囲から逸脱することなく、当業者にとって明らかな修正、変更、及び変形がなされてもよい。
【図１】
0006353013.tif 000003
【図２】
0006353013.tif 000004
【図３】
0006353013.tif 000005
【図４】
0006353013.tif 000006
【図５】
0006353013.tif 000007
【図６】
0006353013.tif 000008