理解を円滑にする目的で、図面に共通の同一の要素を指定するために、可能な場合、同一の参照番号が使用されている。
本明細書で説明されるように、命令JTAG(IJTAG)は、基板レベルのJTAGテストからチップレベルのJTAGテストへの移行に関連する既存のJTAG限界を克服するために標準化されている(P1687標準、または、その代わりにIJTAGとして示される)が、IJTAGに関連する進行中の作業は、BSDL/HSDLが、チップレベルのバウンダリスキャンに関する記述要件を満たすことが可能でないことを明らかにした。本発明は、チップレベルのJTAGテストに関するBSDL/HSDLの限界を克服する新しいハードウェア記述言語を提供する。この新しいハードウェア記述言語は、本明細書において、新しいBSDL(NSDL)と呼ばれる。このNSDL言語は、システムオンチップのテストリソースの記述を可能にし、それによって、システムオンチップのテストを円滑にする。NSDL記述言語の多数の利点は、以下のNSDLの説明から理解され得る。
本明細書で説明されるように、新しいハードウェア記述言語、NSDLは、JTAGベースのテストにおいて追加の進歩も可能にする。NSDL記述言語は、システムオンチップデバイスのテストを円滑にするために、いわゆる「クロスロードデバイス」の使用を可能にする。クロスロードデバイスは、システムオンチップのシステムスキャンパスの動的修正を可能にする。NSDL記述言語は、システムオンチップデバイスのテストを円滑にするために、並列アクセスの使用も可能にする。システムオンチップデバイスに対する並列アクセスは、多くの様式で提供されることが可能である。さらに、かかる進歩はNSDL記述言語によって可能にされているが、かかる進歩は、後に開発され得るその他の記述言語に関して利用されることも可能である点に留意されたい。
ハードウェア開発プロセスにおいて、3人の主な関係者が存在する。すなわち、デバイスプロバイダ、システム設計者、およびテストエンジニアである。デバイスプロバイダは、特定のデバイスを作成する。システム設計者は、システムを構成するために、デバイスプロバイダによって提供されたデバイスを使用する。テストエンジニアは、システムが適切に機能していることを確実にするために、システムをテストする(例えば、システムのデバイス同士の間の相互接続、デバイスの機能、システムの機能などをテストする)。NSDL言語は、(例えば、そのデバイスを記述するために)デバイスプロバイダによって使用されることが可能であり、(例えば、システムを構成する際に)システム設計者によって使用されることが可能であり、(例えば、システムをテストする際に)システム試験者によって使用されることが可能である。したがって、NSDL言語は、ハードウェア開発プロセスの全体にわたって使用されることが期待される。
システムオンチップ開発プロセスにおいて、システムが構成されるデバイスは、「ソフト」デバイス、すなわち、何らかのハードウェア記述言語でのデバイスの記述であり得る。このプロセスでは、システム設計者は、最終的に、テストエンジニアによってテストされるシステムオンチップを取得するために、システムレベル開発フローにおいて、ソフトデバイスをシステムレベルコードと統合する。(例えば、デバイスの数、デバイス同士の間の相互接続、デバイス内依存、デバイス間依存などの点から)システムオンチップの複雑さが高まると、システムオンチップをテストする複雑さが高まる。NSDL言語は、どんな複雑さのシステムオンチップデバイスも容易に記述されることを可能にし、したがって、テストされることを可能にする。
図1は、テスト環境のハイレベルブロック図を示す。詳細には、テスト環境100は、システムオンチップ(S−o−C)110と、テストシステム(TS)120とを含む。TS120は、S−o−C110をテストする(例えば、(構成要素の機能を含めて)S−o−C110の個々の構成要素、S−o−C110上のデバイス同士の間の相互接続、S−o−C110のシステムレベル機能など、ならびにそれらの様々な組合せをテストする)。TS120は、(TDIポートとして示される)入力ポート115Iおよび(TDOポートとして示される)出力ポート115Oを含むテストアクセスポート(TAP)115を経由してS−o−C110をテストする。
一実施形態では、P1687環境において、TAP115は、IEEE1149.1標準によって記述される。本明細書において、TDIポート115IおよびTDOポート115Oを使用して主に示され、かつ説明されるが、TAP115は、(分かりやすくするために省略されている)TCKポート、TMSポート、および、オプションで、TRSTポートなど、その他の制御ポートを含むことが可能である。さらに、IEEE1149.1標準によって記述されるTAPに関して主に示され、かつ説明されるが、TAP115は、様々なその他のポート(例えば、その他の標準によって記述されるポートなど、ならびにそれらの様々な組合せ)を利用することが可能である。
TS120は、テスト手順を使用して、S−o−C110のテストを実行する。TS120は、1つまたは複数のテスト手順を使用して、1つまたは複数のテストを実行することが可能である。テスト手順は、構成要素の一部(例えば、構成要素の機能、構成要素の機能のセット、構成要素内依存など)、構成要素、構成要素のグループ(例えば、構成要素同士の間の相互接続、構成要素間依存など)、1つまたは複数のシステムレベル機能など、ならびにそれらの様々な組合せをテストするために使用されることが可能である。
TS120は、S−o−C110をテストするためのテスト手順を生成する。テスト手順は、S−o−C110をテストするために求められる情報を指定する。S−o−C110向けのテスト手順は、(S−o−C110の個々の構成要素のそれぞれの記述、ならびに、S−o−C110のシステムレベルの記述を含めて)S−o−C110の記述を指定することが可能である。テスト手順は、入力テストベクトルおよび期待される出力テストベクトルを指定することが可能である。テスト手順は、テストに関して求められる推定時間、テストに関する出力データ処理(例えば、ロギング、エラートリガリング(error triggering)、回復動作など)など、ならびにそれらの様々な組合せなど、テストに関連するその他の情報を含み得る。
TS120は、(S−o−C110の個々の構成要素のそれぞれの記述、ならびに、S−o−C110のシステムレベルの記述を含めて)S−o−C110の記述を使用してS−o−C110をテストするためのテスト手順を生成する。S−o−C110の個々の構成要素の記述は、NSDLを使用して指定され得る。個々の構成要素の記述は、構成要素の内部スキャンパスを記述することが可能である。S−o−C110のシステムレベルの記述は、NSDLを使用して指定され得る。S−o−C110のシステムレベルの記述は、S−o−C110のトポロジ(例えば、構成要素同士の間の相互接続、構成要素間依存など)を記述することが可能である。
(個々の構成要素の記述、システムレベルの記述などを含めて)S−o−C110に関する記述情報は、S−o−C110に関するテスト手順を生成する際に使用するように適合された情報を含む。例えば、記述情報は、スキャンパス長情報、スキャンパス階層情報など、ならびにそれらの様々な組合せを決定するために処理され得る、構成要素スキャンパス情報、システムトポロジ情報などを含む。S−o−C110に関する記述情報は、本明細書で説明される任意のその他の記述情報を含み得る。
TS120は、S−o−C110上で1つまたは複数のテスト手順を実行することによって、S−o−C110をテストする。TS120は、それぞれのテストが実行されるように、入力ビットストリームおよび期待されるテスト結果(例えば、期待される出力ビット値または出力ビットストリーム)を生成する。TS120は、(入力テストベクトルと呼ばれる)入力ビットストリームをTDIポート115Iに提供して、(出力テストベクトルと呼ばれる)対応する出力ビットストリームをTDOポート 115Oから受信する。TS120は、テストの結果を決定するために、実際の出力ビットストリームを期待される出力ビットストリームと比較する。TS120は、テスト結果を格納することが可能である。
TS120は、S−o−C110をテストするための1つまたは複数のテスト手順を実行することが可能である。TS120は(異なるスケジューリング決定が、結果として、テスト手順の同じセットに関して、異なるテスト完了時間をもたらすことになるため)総テスト時間を最小限に抑えるように複数のテスト手順の実行を組織することが可能である。TS120は、テストスケジュール(すなわち、それに従ってテスト手順が実行されなければならない順序を指定するスケジュール)を指定することが可能である。TS120は、システムオンチップのテストに関連する様々なその他の機能を実行することが可能である。
図2は、図1のテスト環境のシステムオンチップのハイレベルブロック図を示す。図2に示されるように、S−o−C110は、複数の構成要素相互接続220(集合的に、構成要素相互接続220)によって相互接続された複数の構成要素210A〜210E(集合的に、構成要素210)を含む。
構成要素210は、システムオンチップシステム内に含まれることが可能な任意の構成要素を含み得る。構成要素210は、NSDLを使用して記述されることが可能である。構成要素210は、本明細書でテストリソースと呼ばれる場合もある。
一実施形態では、P1687標準によるシステムにおいて、構成要素210は、IP、計器(instruments)、および/または計器選択ビット(select instrument bits)(SIB)を含み得る。
知的財産(IP)デバイスは、テストを必要としている通常のデバイスである。
計器は、テストを必要とする以外に、テストを支援するように適合された機能性(例えば、値の読み取り、値の監視、有用な情報の提供など、ならびにそれらの様々な組合せ)を提供するデバイスである。例えば、計器は、寿命加速テストをパラメータ化するために使用されることになる温度センサーの出力であり得る。例えば、計器は、ソフトウェア定義された無線の獲得段階に関して調整可能なフィルタを較正するために使用されるセンサーの基準値であり得る。すなわち、計器は、初期のシステムテストの間、ならびに、システムの寿命の全体の両方でテストを支援することが可能である。
IP/計器は非常に類似する可能性があるという点で、これら2つの用語は、本明細書において、交換可能に使用されることが可能である。さらに、IPおよび計器は、システムオンチップの構成要素として使用されることが可能であるため、IPおよび計器は、本明細書において、より一般に、構成要素と呼ばれる場合がある。
IP/計器は、階層化スキャンパスを含み得る。階層化スキャンパスを有する構成要素は、構成要素がシステム内に導入されるときシステムスキャンパスの一部になる内部スキャンパスを含む。
SIBは、(どの1つまたは複数のデバイスがテストにおいて使用されることになるかに応じて)スキャンパスの一部がスキャンパス内に動的に含まれること、またはスキャンパスから動的に除去されることを可能にする階層化スキャンパスセルである。SIBは、P1687標準の現在の草案のハードウェア提案の一部を形成する。
一般に、階層は、システムオンチップの構成要素のテストを改善する。例えば、階層は、テストの間にアクティブなシステムスキャンパスの最小化と構成要素の隔離とを可能にし、それによって、システムオンチップの構成要素に対するアクセス時間を削減する。
その他の実施形態では、その他の標準によるシステムにおいて、構成要素210は、その他のタイプの構成要素を含み得る。
一実施形態では、構成要素210は、1つまたは複数のクロスロードデバイスを含み得る。システムオンチップテストにおけるクロスロードデバイスの使用は、NSDL言語の使用によって可能にされる(すなわち、大部分のかかるデバイスは、BSDL/HSDLによって記述されていることが可能でない)。システムオンチップテストにおけるクロスロードデバイスの使用は、図6〜図10に関してよりよく理解され得る。
図2に示すように、構成要素210のそれぞれは、複数の内部レジスタを含む。詳細には、構成要素210Aは3個のレジスタ(A0,A1,A2)を含み、構成要素210Bは6個のレジスタ(B0,B1,B2,B3,B4,B5)を含み、構成要素210Cは5個のレジスタ(C0,C1,C2,C3,C4)を含み、構成要素210Dは3個のレジスタ(D0,D1,D2)を含み、構成要素210Eは4個のレジスタ(E0,E1,E2,E3)を含む。それぞれの構成要素210のレジスタは、その構成要素210に関する内部スキャンパスを形成する。それぞれの構成要素210の内部スキャンパスは、NSDLを使用して記述されることが可能である。
図2に示すように、構成要素210のそれぞれは、少なくとも1つの機能をサポートする。詳細には、構成要素210Aは3つの機能をサポートし、構成要素210Bは4つの機能をサポートし、構成要素210Cは3つの機能をサポートし、構成要素210Dは2つの機能をサポートし、構成要素210Eは1つの機能をサポートする。構成要素210のそれぞれによってサポートされるこれらの機能は、それぞれ、構成要素210のそれぞれのレジスタ(すなわち、内部スキャンパス)を利用する。したがって、構成要素210のそれぞれによってサポートされる機能は、NSDLを使用して記述されることが可能である。
図2に示すように、S−o−C110の構成要素210は、S−o−C110の構成要素相互接続220を経由して接続される。構成要素210(すなわち、構成要素210の内部スキャンパス)および構成要素210同士の間の構成要素相互接続220は、S−o−C110の入力テストポート(TDI)からS−o−C110の出力テストポート(TDO)へのシステムスキャンパス(すなわち、パス)を形成する。このシステムスキャンパスは、(例えば、それによって、NSDLに基づくシステム全体の記述を形成するために、NSDLを使用して個々の構成要素のそれぞれを定義し、NSDLを使用してシステムの構成を定義することによって)NSDLを使用して定義され得る。
本明細書で説明されるように、(すなわち、構成要素210、構成要素相互接続220、構成要素内依存および構成要素間依存などのそれぞれが相関するアルゴリズムの収集物を使用する際に記述されるため)NSDLに基づくS−o−C110のシステム全体の記述は、アルゴリズム記述である。S−o−C110のアルゴリズム記述は、S−o−C110をテストする際にTS120による使用のために適合された情報(例えば、スキャンパス長情報、スキャンパス階層情報など、ならびにそれらの様々な組合せ)を含む。
システムオンチップは、システムオンチップの構成要素のそれぞれを記述すること(例えば、IP、計器、(使用される場合)クロスロードデバイスなど、およびそれらの様々な組合せの記述)と、(システムオンチップの構成要素のそれぞれの間の相互接続、構成要素内依存および構成要素間依存など、ならびにそれらの様々な組合せの記述を含めて)システムオンチップのトポロジを記述することとによって記述されることが可能である。
一実施形態では、構成要素がIP、計器、および/または計器選択ビット(SIB)を含む、P1687標準によるシステムでは、システムオンチップの記述は、(例えば、内部レジスタの意味、適用/監視するための手順/ビットストリームのセットなどを含めて)それぞれのIP/計器の記述、(SIBが使用される場合)それぞれのSIBの記述、システムスキャンパスの構成の記述(すなわち、それぞれの構成要素の内部スキャンパスがどのように構成要素を通過するかなどを含めて、スキャンパスがシステムオンチップをどのように通過するか)など、ならびにそれらの様々な組合せを必要とする。
スキャンチェーン内にIPを挿入することは、スキャンチェーンを介したIPのテストを可能にする。システムオンチップ内のIPの使用は、IPに関するアクセス特権レベル(APL)(例えば、アクセスなし、限定されたアクセス、完全なアクセス)に応じて異なる。
IPに関するAPLが「アクセスなし」である場合、テストツールはIPの内部の知識を有さず、したがって、IPのプロバイダによって提供された情報に依存しなければならない。例えば、IPに関するビットストリームのセット(すなわち、入力ビットストリームおよび期待される出力ビットストリーム)が提供されなければならない。この場合、これらのビットストリームは、静的ビットストリームと見なされる。テストツールは、IPに関する静的入力ビットストリームをシステムオンチップに関するシステムビットストリーム内に挿入して、IPのプロバイダによって指定されたように、対応する出力ビットストリームを処理しなければならない。
IPに関するAPLが「完全なアクセス」である場合、テストツールは、NSDL内に記述されたIPの内部スキャンチェーン、および選り抜きの記述言語でのIPのソースの両方を含めて、IPの内部の完全な知識を有する。この場合、テストツールは、(例えば、その独自のアルゴリズムを使用して)IPに関して求められる入力ビットストリームおよび期待される出力ビットストリームを直接的に演算することが可能であり、またはIPのプロバイダは、(例えば、静的ビットストリームおよび/または動的ビットストリームとして)事前に演算されたビットストリームのセットを提供することが可能である。
IPに関するAPLが「限定されたアクセス」である場合、テストツールは、IPの内部の限定された知識だけを有する。IPのNSDL記述が提供される。IPのNSDL記述は、IPの内部スキャンチェーンの記述と、IPをテストするために使用され得る手順のセットとを含む。この場合、テストツールは、IPをテストする際に使用するためのビットストリーム(例えば、入力ビットストリームおよび期待される出力ビットストリーム)を生成するために、IPの記述を使用する。
計器をシステムオンチップ内に挿入することは、ある値またはある条件の検査を介したシステムオンチップのテストを可能にする。計器は、テスト目的で使用され得る1つまたは複数の機能をサポートすることが可能である。したがって、IPの記述は、IPをテストするために必要とされる手順のセットだけを含むものの、計器の記述は、計器の機能にアクセスするために使用され得る手順(および/またはビットストリーム)のセットも含む。計器の記述は、計器が構成されるレジスタのレジスタ値の点から、計器の機能の記述を含み得る。したがって、NSDLを使用すると、IPと計器との間の唯一の違いは、手順のセットである。
IPおよび計器に関して本明細書で説明されるように、IPおよび計器の記述は、手順を使用して指定されることが可能である。手順は、手順が呼び出されるたびに実行されることになるアトミック命令(atomic instructions)の連結と見なされることが可能である。
IP/計器に関する手順の記述は、IP/計器のAPLに依存し得る。
構成要素のAPLが「アクセスなし」である場合、これらの手順は、ビットストリーム値(すなわち、スキャンパス内に書き込まれることになる値およびスキャンパスから読み取られることになる値)として表されることが可能である。
構成要素のAPLが「限定されたアクセス」または「完全なアクセス」である場合、IP/計器のスキャンパスの知識は、これらの手順が構成され得るように、IP/計器に関する手順の表示に関して追加の自由を提供する。手順の空間構成は、システムオンチップのシステムスキャンパスの入出力を構成するために、異なる手順の入出力がどのように使用され得るかを示す。時間構成は、特定の動作を実行するために、同じ構成要素(例えば、IP/計器)に対して手順がどのように連続して適用され得るかを示す。加えて、手順は、より大きな手順および/もしくは複数のより小さな手順に入れ子にされること、ならびに/またはより大きな手順および/もしくは複数のより小さな手順から入れ子にされることが可能である。
手順は手順属性(すなわち、手順の記述)と手順本体とを含む。手順の記述は、長さ、ビジーモード指示、入力条件、終了条件、依存、内部スキャンパス記述など、ならびにそれらの様々な組合せなどの情報を含み得る。
固定長手順は、実行されるのに常に同じ時間量がかかる手順と定義され得る。可変長手順は、実行されるのに可変の時間量がかかる手順と定義され得る。可変長手順は、その他の時間値(例えば、最善の時間および最悪の時間、平均時間など、ならびにそれらの様々な組合せ)を使用して定義されることが可能である。一実施形態では、それぞれの可変長手順に関して、少なくとも1つの終了条件が提供されなければならない。
手順の長さは、サイクル(または、サイクルを用いた表現が可能でない場合、秒または何らかのその他の時間単位など、何らかのその他の絶対項)を用いて表されることが可能である。例えば、物理的な計測を行う計器、非同期計器、非同期クロック領域で動作している計器などの場合、サイクルを用いて手順の長さを表すことは可能でない。手順の長さが時間で表される場合、テストツールは(例えば、実際のテストクロック期間の知識を用いて)サイクルカウントを決定することが可能であり、または(例えば、基準クロック周期を使用して)サイクルカウントを推定することが可能である。
手順ビジーモードが手順によって宣言されるべきである。手順の実行の間に、スキャンチェーンの値が変化してはならない(すなわち、それぞれのスキャンアクセスがその値を同じ値にリセットしなければならない)場合、手順のビジーモードは「保留」である。例えば、「保留」計器は、組合せデバイスであり得る(すなわち、この場合、それぞれの修正が結果に影響を及ぼす)。手順の実行の間に、スキャンチェーンの値が重要でない場合、手順のビジーモードは「注意無用(don’t care)」である。例えば、「注意無用」計器は、トリガされたときだけ入力をサンプリングする任意のデバイスであり得る。
システムオンチップの記述は、そのシステムオンチップに関連する依存の記述も含む。システムオンチップの依存は、(システムオンチップの1つの構成要素の機能同士または手順同士の間の)構成要素内依存、および(システムオンチップの異なる構成要素の機能同士または手順同士の間の)構成要素間依存を含む。依存の記述は、(例えば、それらをリストアップすること、名称ベースでリンクさせることなど、ならびにそれらの様々な組合せによって)多くの形で指定され得る。
例えば、機能Xがリストアップされた副機能のそれぞれが完了するまで、その実行を開始できないことを意味する「機能Xは、機能X1,X2,...,Xnの完了に依存する」という表示を介して記述されることが可能である。例えば、手順Xは、多くの理由で、手順Yは手順Xが実行される前に完了されなければならないことを意味する「手順Xは、手順Yに依存する」という表示を介して記述されることが可能である。システムオンチップの依存は、様々なその他の形で記述されることが可能である。
システムオンチップの構成要素内依存および構成要素間依存が宣言されるべきである。依存の宣言は、テストツールがテストスケジューリングを実行することを可能にする。一実施形態では、依存は、依存の(1つまたは複数の)手順の宣言的部分の一部として宣言されることが可能である。一実施形態では、依存は、明示的な名前付けを使用して宣言されることが可能である。1つのかかる実施形態では、外部依存をその外部依存が関連する構成要素の(1つまたは複数の)記号名とリンクさせるために、汎用パラメータが利用され得る。
NSDLを使用すると、依存の記述および宣言は、様々なその他の形で実行されることが可能である。
構成要素(または、複数の構成要素のグループ)に関する1つの手順(または、複数の手順)の構成は、(1つもしくは複数の)構成要素の(1つもしくは複数の)APLに基づいて変化し、これは、その構成要素に関連する入出力情報の知識に影響を及ぼす。
図3は、「アクセスなし」構成要素300の入出力知識を示す。構成要素のAPLが「アクセスなし」である場合、その構成要素によってサポートされるそれぞれの機能に関して、機能の本体は、(入力ビットストリームを構成するために使用されることになる)入力ビットストリーム情報、関数の長さ情報およびスキャンパス長さ情報、ならびに出力ビットストリーム情報(例えば、期待される出力ビットストリーム、求められる出力ビットストリーム処理など、ならびにそれらの様々な組合せ)から構成されることになる。
図4は、「限定されたアクセス」構成要素または「完全なアクセス」構成要素400の入出力知識を示す。構成要素のAPLが「限定されたアクセス」または「完全なアクセス」である場合、構成要素の内部スキャンパスは知られている(すなわち、構成要素のレジスタのそれぞれ、ならびに、レジスタのトポロジは知られている)。構成要素の内部スキャンパスは、1つまたは複数の階層レベル上で配信され得る複数のスライスに区分化されることが可能である。異なる階層レベルに対するアクセスは、(例えば、隣接レベルの1つまたは複数のレジスタを使用して)いかなるようにも制御され得る。構成要素の内部スキャンパスをいくつかの階層レベルに区分化することは、図4に関して示され、かつ説明される構成要素に関してよりよく理解され得る。
図4に示されるように、内部スキャンパスは(スライス1、2、3、4、5として示される)5つのスライスに区分化される。内部スキャンパスの5つのスライスは、(レベル0、1として示される)2つの階層レベル上で配信される。スライス1、2、3、4、および5は、それぞれ、4個のレジスタ、4個のレジスタ、3個のレジスタ、3個のレジスタ、および2個のレジスタで構成される。スライス1、2、および5は、階層レベル0内に配置される。スライス3および4は、階層レベル1内に配置される。(レジスタH1として示される)レジスタは、内部スキャンパス階層レベル0とレベル1との間のアクセスを制御する。H1レジスタは、スライス3および4が迂回される(すなわち、これらのスライスが内部スキャンパスから排除される)ように、またはスライス3および4が迂回されない(すなわち、これらのスライスが内部スキャンパス内に含まれる)ように内部スキャンパスを制御する。
図4に示されるように、内部スキャンパスは以下のように構成される。スライス1の入力はTDIであり、スライス1の出力はスライス2の入力である。スライス2の入力は、スライス1の出力であり、スライス2の出力は、H1(レベル0入力)に対する第1の入力である。レベル0において、H1の入力は、スライス2の出力であり、H1の出力は、スライス5の入力である。レベル1において、H1の出力は、スライス3の入力であり、H1の入力は、スライス4の出力である。スライス3の入力は、H1の出力(レベル1の出力)であり、スライス3の出力は、スライス4の入力である。スライス4の入力は、スライス3の出力であり、スライス4の出力は、H1の入力(レベル1の入力)である。スライス5の入力は、H1の出力(レベル0の出力)であり、スライス5の出力はTDOである。
一実施形態では、構成要素の内部スキャンパスを複数のスライスに区分化することは、機能的である、すなわち、内部スキャンパスのそれぞれのスライスは、その上で動作している1つまたは複数のスライス機能を有し、それらのスライスのそれぞれは、そのそれぞれがテストツールによって独立してスケジュール可能な1つまたは複数のスライス手順を使用してテストされることが可能である。この実施形態では、内部スキャンパスの所与のスライス上で動作している機能の本体は、「アクセスなし」構成要素の機能の本体の構成に類似した形で構成され得る(すなわち、機能の本体は、入力ビットストリーム情報、関数の長さ情報およびスキャンパス長情報、出力ビットストリーム情報など、ならびにそれらの様々な組合せを使用して説明される)。
したがって、内部スキャンパスの異なるスライスまたはスライスの組合せを用いて動作している異なる手順を利用して、構成要素の内部スキャンパスの区分化は、様々な形で使用されることが可能である。例えば(図4を参照すると)、スライス1に関連する第1の手順P1は、データをスライス1内に書き込むために実行されることが可能であり、それによって、構成要素内のいくつかの機能の実行をトリガし、これは、結果として、結果データをスライス2内に格納し、エラーデータをスライス5内に格納する。次いで、それぞれ、スライス2および5の値を読み取るために(それぞれ、スライス2および5の上で動作している)2つの追加の手順P2およびP5が実行され得る。したがって、(複数の階層レベルの全域で区分化することを含めて)内部スキャンパスをスライスに区分化することは、システムオンチップテストにおいて大きな柔軟性を提供する。TS120は、アルゴリズム手順を直列テストビットストリーム(例えば、入力ビットストリームおよび期待される出力ビットストリーム)に容易に変換することが可能である。
構成要素の内部スキャンパスのスライスを利用するために異なる手順が開発され得るため、内部スキャンパスのスライスを利用する手順は、(その中の信号を含めて)スライスを参照することが可能でなければならない。手順は、スライスをいかなるようにも参照することが可能である。一実施形態では、例えば、手順は、明示的な名前付けを使用してスライスを参照することが可能である。1つのかかる実施形態では、それぞれのスライス(すなわち、レジスタまたはレジスタのグループ)に独自の名前が割り当てられ、それによって、階層的にインスタンスが作成された(instantiated)スライスが記録のようにアクセスされることを可能にする。構成要素のスライスを識別するために明示的な名前付けを使用する例は、図5に関して示され、かつ説明される。
図5は、構成要素500の内部スキャンパスのスライスの明示的な参照を示す。図5に示されるように、構成要素500は、そのそれぞれが、独自の名前によって参照される6つのスライスを有する12個のレジスタスキャンパスを含む。第1のスライスは、BS_0と名付けられた単一のレジスタである。第2のスライスは、BS_1と名付けられた単一のレジスタである。第3のスライスは、BS_0、BS_1、BS_2、およびBS_3と名付けられた4個のレジスタを含む、SCAN_4_BIT_0と名付けられた4個のレジスタの直列チェーンである。第4のスライスは、BS_0、BS_1、BS_2、およびBS_3と名付けられた4個のレジスタを含む、Another_SCAN_4_BITと名付けられた4個のレジスタの直列チェーンである。第5のスライスは、BS_2と名付けられた単一のレジスタである。第6のスライスは、BS_3と名付けられた単一のレジスタである。
本明細書で説明されるように、階層的にインスタンスが作成されたレジスタは、記録のようにアクセスされることが可能である。例えば、矢印1によって示されるレジスタの独自の名前はBS_1である(2個のその他のレジスタがBS_1と名付けられているが、階層的な名前付けの使用がレジスタの独自の名前付けをどのように確実にするかを理解されよう)。例えば、矢印2によって示されるスライス(すなわち、レジスタのグループ)の独自の名前は、SCAN_4_BIT_0である。例えば、矢印3によって示されるレジスタの独自の名前は、another_SCAN_4_BIT.BS_1である。すなわち、内部スキャンパスのそれぞれのスライス、ならびに、それぞれのスライスのそれぞれのレジスタは、スライスおよびレジスタの任意の数の階層レベルに関して、独自の名前を使用して参照されることが可能である。
本明細書において、構成要素に関する手順または手順のセットを定義するために利用され得る特定の手順属性(例えば、手順の長さ、機能依存および手順依存、内部スキャンパス記述、スライス記述、スライス基準属性など)に関して主に示され、かつ説明されるが、様々なその他の手順属性が指定され得る。手順を記述するために使用される手順属性は、システムオンチップテストをサポートするように手順を記述するために使用されることが可能な任意の情報を含み得る。
手順属性に加えて、手順は手順本体を含む。手順本体は、手順の詳細を含む。手順本体は、いかなるようにも実装され得る。手順本体は、スキャンパスの概念を有さない(むしろ、アクセスは、スライス上で並行して行われ、テストツールはこれらの動作をシステムスキャンパスに対するアクセスに融合する)。手順本体は、様々な文、主張、入れ子にされた手順など、ならびにそれらの様々な組合せを使用することが可能である。
VHDL言語を使用して実装されたNSDLを使用してシステムオンチップが記述される(したがって、システムオンチップに関連する手順のそれぞれがVHDL言語を使用して実装されたNSDLを使用して記述される)一実施形態では、手順本体は、VHDL構文を使用して表現されることが可能である。手順の手順本体は、システムオンチップの記述の実装形態に応じて、その他の形で表現されることが可能である。
構成要素の内部スキャンパスの記述は、NSDLによって容易に提供される。NSDLでは、それぞれのレジスタセルはエンティティと見なされ、レジスタセルは、(例えば、NSDLがVHDLのスーパーセットとして実装されるとき、VHDL規則を使用して)パッケージにグループ化されることが可能である。NSDLでは、それぞれのレジスタエンティティは、2つの汎用パラメータ、すなわち、レジスタインスタンスを明示的に参照することによって、スキャンパスを表現するために使用され得る「precedent(先行部分)」および「following(後続部分)」を使用して記述される。レジスタエンティティの「precedent」パラメータは、そのレジスタエンティティに対する入力のソースを指定する。レジスタエンティティの「following」パラメータは、そのレジスタエンティティからの出力の宛先を指定する。したがって、レジスタエンティティは、単一のレジスタ、(階層的グループ化を含めて)レジスタのグループなどを含み得る。
構成要素の内部スキャンパスの記述は、図5に関して示され、かつ説明される内部スキャンチェーンに対応する以下のサンプルコードに関してよりよく理解され得る。
以下のサンプルコードは、直列に配置された4個の基本的なバウンダリスキャンレジスタを含む簡単なスキャンパスを示し、この場合、第1のバウンダリスキャンレジスタは、TDIポートから入力を受信し、第4のバウンダリスキャンレジスタはTDOポートに出力を提供する。
BS_0: BS generic map (precedent => "TDI", following => "BS_1");
BS_1: BS generic map (precedent => "BS_0", following => "BS_2");
BS_2: BS generic map (precedent => "BS_1", following => "BS_3");
BS_3: BS generic map (precedent => "BS_2", following => "TDO");
この4個のレジスタスキャンチェーンは、エンティティ内にカプセル化されて、階層的にインスタンスが作成されることが可能である。以下のサンプルコードは、(SCAN_4_BIT_0レジスタエンティティ、およびanother_SCAN_4_BITレジスタエンティティを記述する際に最終的に使用するために)この4個のレジスタスキャンチェーンが正にどのようにエンティティ内にカプセル化されて、階層的にインスタンスが作成されることが可能であるかを示す。
Entity SCAN_4_BIT is
Generic (precedent : string := "TDI"; following : string := "TDO");
End entity;
Architecture A of SCAN_4_BIT is
begin
BS_0: BS generic map (precedent => precedent, following => "BS_1");
BS_1: BS generic map (precedent => "BS_0", following => "BS_2");
BS_2: BS generic map (precedent => "BS_1", following => "BS_3");
BS_3: BS generic map (precedent => "BS_2", following => following);
end;
以下のサンプルコードは、(図5に関して示され、かつ説明されたように、12個のレジスタスキャンパスが、4個の個々のレジスタと、4個のレジスタレジスタスキャンチェーンから構成される2つのレジスタエンティティとを含めて、6つのレジスタエンティティの記述を使用して表される)図5の12個のレジスタスキャンパスの表示(記述)を示す。
BS_0: BS generic map (precedent => "TDI", following => "BS_1 ");
BS_1: BS generic map (precedent => "BS_0", following => "SCAN_4_BIT_0");
SCAN_4_BIT_0: BS generic map (precedent => "BS_1", following =>
"another_SCAN_4_BIT");
another_SCAN_4_BIT: BS generic map (precedent => "SCAN_4_BIT_0",
following => "BS_2");
BS_2: BS generic map (precedent => "another_SCAN_4_BIT", following => "BS_3");
BS_3: BS generic map (precedent => "BS_2", following => "TDO");
このタイプの記述情報を使用すると、スキャンパスに関する情報(例えば、その長さ、その階層構造など、ならびにそれらの様々な組合せ)は、(例えば、文脈上の検査を使用して)コンパイル時にテストツールによって自動的に演算されることが可能である。さらに、レジスタエンティティの記述は、(例えば、その他の設計における使用に関して)極めて再利用可能である。レジスタエンティティに関する記述情報は、多くの異なる形で収集、格納、および検査されることが可能であるため(すなわち、記号表の実装は、例えば、ハッシュテーブル、データベースなどの点から、コンパイラ同士の間でかなり異なる場合があるため)、かかる詳細は、分かりやすくするために、かつ一般性のために省略される。
さらに、このタイプの記述を使用すると、システムオンチップのそれぞれの構成要素は容易に記述されるため、システムオンチップのシステム全体の記述は、(構成要素同士の間の相互接続の記述、構成要素間依存の記述など、ならびにそれらの様々な組合せを含めて)個々の構成要素の記述を組み合わせることによって取得されることが可能である。すなわち、NSDLは、システムオンチップ構成を記述する(かつ、したがって、テストする)際にかなりの柔軟性を提供する。
本明細書で説明されるように、システムオンチップのスキャンパスの一部を形成する一般的な構成要素を記述することが可能であることに加えて、NSDLは、システムオンチップのスキャンパスに対する動的変更を可能にするデバイスを記述することも可能である。このタイプのデバイスは、NSDL用語において「クロスロードデバイス」と呼ばれる。クロスロードデバイスの一般的な表示は、図6に関して示され、かつ説明される。
図6は、クロスロードデバイスの表示のハイレベルブロック図を示す。詳細には、クロスロードデバイス表示600は、システムオンチップのスキャンパスを動的に修正することが可能なクロスロードデバイスを表す。クロスロードデバイスは、(アフルエント(affluents)と呼ばれる)1つまたは複数の入力を(トリビュタリ(tributaries)と呼ばれる)1つまたは複数の出力に経路指定する。図6に示されるように、クロスロードデバイス表示600は、(path_in_0からpath_in_mとして示される)複数のアフルエントと(path_out_0からpath_out_nとして示される)複数のトリビュタリとを含む。
システムオンチップをテストする際にクロスロードデバイスを使用するために、クロスロードデバイスは記述されなければならない。クロスロードデバイスの(1つまたは複数の)動的に可変なスキャンパスの記述は、特に静的なスキャンパスを処理するように設計されたBSDL/HSDLを使用することを達成することが(不可能でない場合)非常に困難である。対照的に、クロスロードデバイスの(1つまたは複数の)動的に可変なスキャンパスの記述は、テストツールによって容易に理解されるクロスロードデバイスのアルゴリズム記述を提供するNSDLによって容易に提供される。
NSDLを使用したクロスロードデバイスの一般的な記述が続く。
IP <entity name> is
Generic(
precedent : string := "TDI";
following : string := "TDO";
affluent : string := "deselected";
tributary : string := "deselected";
);
End <entity name>;
上に提示されたクロスロードデバイスの一般的な記述から理解されるように、汎用パラメータ「affluent」および「tributary」は、階層化スキャンパスにアクセスするために使用されることが可能である。汎用パラメータ「affluent」および「tributary」は、クロスロードデバイスがスキャンパス内の通過構成要素として単に動作する(すなわち、アフルエントとトリビュタリはアクティブではなく、したがって、スキャンパスを動的に修正しない)ように、当初「deselected(選択解除された)」に設定される。クロスロードデバイスは、相対的な選択機能を呼び出すために「affluent」パラメータおよび「tributary」パラメータを使用することによって、スキャンパスを動的に修正するためにアクティブ化されることが可能である。
2つ以上のアフルエントおよび/または2つ以上のトリビュタリが存在する場合、アフルエントおよび/またはトリビュタリのそれぞれは、独自に識別されなければならない。一実施形態では、例えば、簡単な順序数(例えば、アフルエントに関して、affluent_0、affluent_1など、トリビュタリに関して、tributary_0、tributary_1など)が使用され得る。このNSDLベースの記述を使用して、テストツールは、汎用パラメータを単に参照することによって、クロスロードデバイスを介した接続を理解することが可能である。
クロスロードデバイスの記述は、いかなるようにも生成され得る。一実施形態では、クロスロードデバイスの記述は、システムオンチップの1つの構成要素(または、複数の構成要素)に対するアクセスを動的に制御するように適合されたアーキテクチャを経由して相互接続された入力接続のセットおよび出力接続のセットの記述を使用して生成される。クロスロードデバイスの記述は、テストの際に使用するために格納され得る。プロセッサは、テストを実行する際に使用するために、(例えば、メモリから、別のシステムから、または、かかる記述の任意のその他のソースから)クロスロードデバイスの記述を受信することまたは取り出すことが可能である。
本明細書で説明されるように、入力接続のセットは、(TDIからの方向に、システムオンチップのスキャンパスに接続された)スキャンパス入力接続と、(構成要素アクセス入力接続として示される)構成要素に対する少なくとも1つの接続とを含み、出力接続のセットは、(TDOに向けた方向に、システムオンチップのスキャンパスに接続された)スキャンパス出力接続と、(構成要素アクセス出力接続として示される)構成要素に対する少なくとも1つの接続とを含む。
一実施形態では、入力接続のセットは、(スキャンパス入力接続に関する)「precedent」パラメータと、(1つまたは複数の構成要素アクセス入力接続に関する)1つまたは複数の「affluent」パラメータとを使用して指定される。一実施形態では、出力接続のセットは、(スキャンパス出力接続に関する)「following」パラメータと、(1つまたは複数の構成要素アクセス出力接続に関する)1つまたは複数の「affluent」パラメータとを使用して指定される。
クロスロードデバイスは、システムスキャンパスをいかなるようにも動的に修正することが可能である。このアーキテクチャは、構成要素を経由して、入力接続のセットのうちのいくつかを出力接続のセットのうちのいくつかと動的に接続するための任意のアーキテクチャであってよく、この場合、クロスロードデバイスは、構成要素をシステムスキャンパスに加えるために選択される。例えば、このアーキテクチャは、切替アーキテクチャ、バスアーキテクチャ、ネットワークアーキテクチャなどであり得る。
一実施形態では、クロスロードデバイスの記述は、ツールをテストすることによって理解されているように適合された、少なくとも1つの構成規則(compositional rule)を含むアルゴリズム記述である。クロスロードデバイスの記述は、(例えば、「affluent」パラメータおよび「tributary」パラメータを修正することによって)構成要素をスキャンパスに動的に加え、構成要素をスキャンパスから動的に除去するように動的に修正されることが可能である。
システムオンチップテストにおいてテストリソースを記述するためにNSDLを使用することは、クロスロードデバイスがシステムオンチップテストにおいて使用されることを可能にするように、多くの異なるクロスロードデバイスが記述されることを可能にする。NSDLによって記述され得る異なるクロスロードデバイスは、3つの広い範疇にグループ化され得る。詳細には、クロスロードデバイスは、「有線」接続、「トランザクション」接続、または「有線トランザクション」接続を表すことが可能である。
「有線」クロスロードデバイスは、システムオンチップのスキャンパス内に基本的に有線接続される(かつ、必要に応じて、選択または選択解除され得る)クロスロードデバイスである。「有線」クロスロードデバイスは、切替に類似した形で動作する(すなわち、接続は、必要に応じて、アフルエントとトリビュタリとの間で動的にプログラムされることが可能である)。「有線」クロスロードデバイスのスキャンパスはシステムオンチップのシステムスキャンパス内に有線接続されるため、「有線」クロスロードデバイスのスキャンパスは、明示的に選択解除される必要がある。「有線」クロスロードデバイスの第1の実施例(詳細には、P1687ハードウェア提案の一部である、計器選択ビット(SIB)構成要素)が図8に示され、かつ説明される。「有線」クロスロードデバイスの第2の実施例は、図9に示され、かつ説明される。
「トランザクション」クロスロードデバイスは、一時的な接続(すなわち、特定のトランザクションを表す接続)をサポートするクロスロードデバイスである。「トランザクション」クロスロードデバイスは、任意のアーキテクチャ(例えば、バス、ネットワークオンチップなど)として動作することが可能である。トランザクションは、「トランザクション」クロスロードデバイスのアーキテクチャによってサポートされ得る任意のトランザクション(例えば、バスアーキテクチャにおけるバスアクセス、ネットワークアーキテクチャにおけるルーティングなど)であり得る。「トランザクション」クロスロードデバイスのスキャンパスはトランザクションのときだけアクティブであるため、「トランザクション」クロスロードデバイスのスキャンパスは、明示的に選択解除される必要はない。「トランザクション」クロスロードデバイスの実施例は、図10に示され、かつ説明される。
「有線」クロスロードデバイスにおいて、少なくとも1つの構成要素アクセス入力接続および少なくとも1つの構成要素アクセス入力接続は、有線接続である。したがって、(1つまたは複数の)構成要素アクセス入力接続および(1つまたは複数の)構成要素アクセス出力接続は、異なる物理接続である。「トランザクション」クロスロードデバイスにおいて、少なくとも1つの構成要素アクセス入力接続および少なくとも1つの構成要素アクセス出力接続は、複数のトランザクションをサポートするために、1つの物理接続が使用され得るようなトランザクション接続である(すなわち、(1つまたは複数の)構成要素アクセス入力接続および(1つまたは複数の)構成要素アクセス出力接続は、同じ物理接続を共有することが可能であるが、異なるトランザクション接続と見なされ得る)。
BSDL/HSDLを使用すると、特定の「有線」クロスロードデバイス(すなわち、SIB構成要素)を記述することが可能であるものの、この記述は非常に困難である。さらに、BSDL/HSDLを使用した、より複雑な「有線」クロスロードデバイスの記述は、可能でない場合がある。さらに、BSDL/HSDLを使用した「トランザクション」クロスロードデバイスおよび「有線トランザクション」クロスロードデバイスの記述は、可能でない可能性が高い。したがって、このために、P1687において標準化されているクロスロードデバイスだけがSIB構成要素である。
対照的に、NSDLを使用すると、任意の「有線」クロスロードデバイス、「トランザクション」クロスロードデバイス、および「有線トランザクション」クロスロードデバイスの記述が明らかにサポートされ、テストツールによって容易に解釈される。確かに、事実上、システムオンチップのスキャンパスを動的に修正することが可能な、どんな複雑さのいかなるクロスロードデバイスも、NSDLを使用して記述されることが可能である。NSDLの能力を例示するために、クロスロードデバイス(および、NSDLを使用して表現されるそのそれぞれの記述)の少数の例は、本明細書において、図7〜10に関して提供される。
図7は、システムオンチップのスキャンパスを動的に修正するための、汎用クロスロードデバイスの使用のハイレベルブロック図を示す。図7に示されるように、システムオンチップ700は、汎用クロスロードデバイス710を含むスキャンパスを含む。スキャンパスは、2つの固定スキャンパス部分(すなわち、常にスキャンパス内に含まれることが意図される部分)と、オプションのスキャンパス部分(すなわち、クロスロードデバイス710によってスキャンパス内に動的に含まれること、およびスキャンパス内から動的に除去されることが可能な部分)とを含む。
図7に示されるように、システムオンチップ700のスキャンパスにおいて、テストアクセス入力(TDI)は、(一連のバウンダリスキャンセルを含む)第1の固定スキャンパス部分に結合され、第1の固定スキャンパス部分は、クロスロードデバイス710の第1の入力(すなわち、先行部分)に結合され、クロスロードデバイス710の第1の出力(すなわち、後続部分)は、第2の固定スキャンパス部分に結合され、第2の固定スキャンパス部分は、テストアクセス出力(TDO)に結合される。
クロスロードデバイス710は、システムオンチップ700のスキャンパスに対するオプションのスキャンパス部分の動的な(選択的な)組込みを可能にする。詳細には、クロスロードデバイス710は、第1の固定スキャンパス部分の出力をオプションのスキャンパス部分の入力に結合するために選択され得る第2の出力(すなわち、トリビュタリ)を含み、オプションのスキャンパス部分の出力を第2の固定スキャンパス部分の入力に結合するために選択され得る第2の入力(すなわち、アフルエント)を含む。
クロスロードデバイス710は、入出力の特定の組合せを選択すること/選択解除することによって、スキャンパスが動的に修正されることを可能にする。クロスロードデバイス710の第2の出力および第2の入力が選択解除されるとき、スキャンパスは、TDI、SCAN_4_BIT_0、BS_0、BS_1、クロスロードデバイス710、BS_2、TDOである。クロスロードデバイス710の第2の出力および第2の入力が選択されるとき(すなわち、第1の入力が第2の出力に接続されて、第2の入力が第1の出力に接続されるとき)、スキャンパスは、TDI、SCAN_4_BIT_0、BS_0、BS_1、クロスロードデバイス710、another_SCAN_4_BIT、BS_3、クロスロードデバイス710、BS_2、TDOである。
図8は、NSDLを使用して記述され得る1つのクロスロードデバイスのハイレベルブロック図を示す。詳細には、図8は、SIBデバイス800を示す。SIBデバイス800は、(すなわち、構成要素がスキャンパスに加えられるように)別の構成要素の選択を可能にする。
SIBデバイスは、選択ビットによって制御される。選択ビットの値が「0」のとき、セルはアクティブではない(セルは、正にスキャンパスの内部のビットである)。選択ビットの値が「1」に設定されたとき、スキャンパスは、ポートWSIo(すなわち、トリビュタリ)を介して外部に経路指定され、ポートWSOi(すなわち、アフルエント)を介して内部に経路指定され、それによって、それらのポートが接続される任意のデバイスをスキャンパスに加える。
(分かりやすくするために行番号を加えた状態で)SIBデバイス800のNSDLベースの記述が続く。
1 IP SIB generic (precedent : string := "TDI";
2 following : string := "TDO";
3 tributary : string := "deselected";
4 affluent : string:= "deselected")
5 Begin
6 Up SIB : REG generic map (precedent =>"TDI",
7 following=>"TDO"
8 elements => 1);
9
10 Procedure select
11 Length 1;
12 Selection wired;
13 {
14 Up Sib <= '1’;
15 tributary:= "TDI";
16 affluent:= "TDO";
17 }
18
19 Procedure deselect
20 Length 1 ;
21 Selection wired;
22 {
23 Up Sib <=‘0’;
24 tributary := "deselected";
25 affluent := "deselected";
26 }
27
28 End SIB;
SIBデバイス800の記述において、ライン6〜9は、内部レジスタ(すなわち、SIBデバイス800の場合、正に1ビットである、階層を処理するためにテストツールが必要とするビット)を宣言し、ライン10〜17は選択手順を示し、ライン19〜26は、(そのそれぞれの名前を使用してテストツールによって容易に識別される)選択解除手順を示す。
記述の本体において、NSDLの2つの役割を識別するのは容易である。すなわち、(1)スキャンパスの修正、したがって、ビットストリームはスライス処理によって表現され(ライン14および23を参照)、(2)トポロジの修正は、(例えば、トポロジマッピングにおける「precedent」および「following」の割当てに類似した形で)列の値を割り当てることによって行われる。
図9は、NSDLを使用して記述され得る1つのクロスロードデバイスのハイレベルブロック図を示す。詳細には、図9は、階層切替デバイス900を示す。階層切替デバイス900は、3つの入力アフルエントと2つの出力トリビュタリとを含む。3つのアフルエントおよび2つのトリビュタリを有するとして示されるが、任意の数のアフルエントおよびトリビュタリがサポートされ得る。
(分かりやすくするために行番号を加えた状態で)階層切替デバイス900のNSDLベースの記述が続く。
1 IP Hierarchy_switch generic (precedent : string := "TDI";
2 following : string := "TDO";
3 tributary_0 : string := "deselected";
4 tributary_1 : string := "deselected";
5 affluent_0 : string:= "deselected";
6 affluent_1 : string:= "deselected";
7 affluent_2 : string:= "deselected";
8 )
9
10 Begin
11
12 Affl_map: Vector_REG generic map (precedent =>"TDI",
13 following=>"Trib_map"
14 elem_size =>2;
15 elements =>3);
16 Trib_map : Vector_REG generic map (precedent =>"Affl_map",
17 following=>"TDO"
18 elem_size =>2;
19 elements =>2);
20
21 subtype name is string (1 to 11);
22 type name_vector is array (natural range <>) of name;
23 constant affluent_name : name_vector (0 to 2) :=
24 ("affluent_0 ","affluent_1 ","affluent_2");
25 constant tributary_name : name_vector (0 to 1) :=
26 ("tributary_0","tributary_1");
27
28
29 Procedure select(affluent_nmb : in std_logic_vector(1 downto 0);
30 tributary_nmb : in std_logic)
31 Length 1;
32 Selection wired;
33 {
34 Trib_map <= affluent_nmb;
35 Affl_map <= "0"&tributary_nmb;
36
37 case (tributary_nmb)
38 when‘0’=>tributary_0 :=
39 affluent_name(conv_integer(affluent_nmb));
40 when‘1’=> tributary_1:=
41 affluent _name(conv_integer(affluent_nmb));
42 end case;
43
44 case (affluent_nmb)
45 when "00"=> affluent_0:=
46 tributary_name(conv_integer(tributary_nmb));
47 when "01" => affluent_1 :=
48 tributary_name(conv_integer(tributary_nmb));
49 when "10" => affluent_2 :=
50 tributary_name(conv_integer(tributary_nmb));
51 when others => assert false report "ERROR!" severity failure;
52 end case;
53 }
54
55 Procedure deselect_affluent
56 (affluent_nmb : in std_logic_vector(1 downto 0))
57 Length 1;
58 Selection wired;
59 {
60 Affl_map <= "11";
61 case (affluent_nmb)
62 when "00" => affluent_0 := "deselected";
63 when "01" => affluent_1 := "deselected";
64 when "10" => affluent_2 := "deselected";
65 when others => assert false report "ERROR!" severity warning;
66 end case;
67
68 }
69
70 Procedure deselect_tributary (tributary_nmb : in std_logic)
71 Length 1;
72 Selection wired;
73 {
74 Trib_map <= "11";
75 case (tributary_nmb)
76 when‘0’=> tributary_0 := "deselected";
77 when‘1’=> tributary_ 1:= "deselected";
78 end case;
79 }
80 End hierarchy_switch;
階層切替デバイス900の記述において、ライン3〜7は、(それぞれに独自の名前が与えられている場合)アフルエントおよびトリビュタリを宣言し、ライン12〜19は、(すなわち、切替マトリックスに類似した)内部スキャンパスを宣言し、ライン21〜26は、いくつかのカスタムタイプを定義することによって、VHDL機能を十分に活用する(それによって、本質的に階層的な記述子に関する切替マトリックスになるものを作成する)。
階層切替デバイス900の記述において、「選択」手順(ライン29〜53)は、ビットストリーム修正を処理し、さらに、動的なスキャンパス修正を記述するために、VHDLアルゴリズム機能(および事前に定義されたカスタムタイプ)を処理する。機能のこれらのパラメータは、接続されることになる経路の順序数を指す。
階層切替デバイス900の記述から理解されるように、階層切替デバイス900を介して接続を非アクティブにすることは、接続の両終端の選択解除を必要とせず、むしろ、接続の1つの終端だけの選択解除が接続の役目を果たす。したがって、選択解除は、2つの手順によって処理されることが可能である。すなわち、(1)「deselect_affluent」は、(順序数をパラメータとして使用して)アフルエントの選択解除を可能にし、(2)「deselect_tributary」は、(順序数をパラメータとして使用して)トリビュタリの選択解除を可能にする。
図10は、NSDLを使用して記述され得る1つのクロスロードデバイスのハイレベルブロック図を示す。詳細には、図10は、バスアーキテクチャデバイス1000を示す。バスアーキテクチャデバイス1000は、構成要素バス1012を経由して相互接続されたマスターゲートウェイ構成要素1011と、5つのスレーブ構成要素1013A〜1013E(集合的に、スレーブ構成要素1013)とを含む。
バスアーキテクチャデバイス1000において、スレーブ構成要素1013のそれぞれには、構成要素パス1012にアクセスするためにゲートウェイ構成要素1011によって使用されるアドレスが割り当てられる。ゲートウェイ構成要素1011が構成要素パス1012アクセスすることを可能にするために、ある種のプロトコルがバスアーキテクチャデバイス1000によってサポートされなければならないが、バスアーキテクチャデバイス1000のNSDLベースの記述は、そのプロトコルに関するどんな情報も必要としない。
(分かりやすくするために行番号を加えた状態で)バスアーキテクチャデバイス1000のNSDLベースの記述が続く。
ゲートウェイパッケージの記述。
1 Package GW_package is
2
3 Constant N_SLAVES : integer := 5;
4 Constant ADDRESS_DEPTH : integer := 3;
5 subtype slave_name_type is string (1 to 1);
6 subtype slave_address_type is std_logic_vector
7 (ADDRESS_DEPTH-1 downto 0);
8
9 Type slave_mapping_type is record
10 slave_name : slave_name_type;
11 slave_address : slave_address_typr;
12 end record;
13
14 Type network_mapping_type is array (1 to N_SLAVES) of
15 slave_mapping_type;
16
17 Constant BUS_OP_FIELDS : integer := 2;
18
19 Constant BUS_READ : std_logic_vector(BUS_OP_FIELDS-1
downto 0) := "01";
20 Constant BUS_ WRITE: std_logic_vector(BUS_OP_FIELDS-1
downto 0) := "10";
21 Constant BUS_IDLE: std_logic_vector(BUS_OP_FIELDS-1 downto
0) := "00";
22
23 End GW_package;
Gateway Description:
1 Use GW_package.all;
2
3 IP GW generic (precedent : string := "TDI";
4 following : string := "TDO";
5 tributary : string := "deselected";
6 affluent : string := "deselected";
7 network_mapping: network_mapping_type);
8
9
10 Begin
11
12 Address_map :REG generic map (precedent => "TDI",
13 following=> "TDO"
14 elements => ADDRESS_DEPTH);
15 Bus_operation : REG generic map(
16 precedent => "Address_map";
17 following => "TDO";
18 elements => BUS_OP_FIELDS);
19
20 Function get_slave_address(name : in slave_name_type)
21 return slave_address_type is
22 Begin
23 for k in N_SLAVES loop
24 If network_mapping(k).slave_name = name then
25 return network_mapping(k).slave_address;
26 End loop;
27 asset false report "ERROR, slave "&name&" does not exist"
28 severity failure;
29 end get_slave_address;
30
31 Procedure select_tributary(tributary_name :in slave_name_type)
32 Length 10;
33 Selection transaction;
34 {
35 address_map <= get_slave_address(tributary_name);
36 bus_operation <= BUS_WRITE;
37 tributary := tributary_name;
38 }
39
40 Procedure select_affluent(affluent_name : in slave_name_type)
41 Length 10;
42 Selection transaction;
43 {
44 address_map <= get_slave_address(affluent_name);
45 bus_operation <= BUS_READ;
46 affluent := affluent_name;
47 }
48
49 End GW;
バスアーキテクチャデバイス1000のNSDLベースの記述は、より良好な可読性を目指して2つのファイルに分けられている。詳細には、バスアーキテクチャデバイス1000のNSDLベースの記述は、以下の部分に分けられる。すなわち、(1)バスアーキテクチャデバイス1000に関するタイプ宣言のすべてをホストするパッケージ、および(2)バスアーキテクチャデバイス1000の記述である。
バスアーキテクチャデバイス1000のNSDLベースの記述は、バスアーキテクチャデバイス1000のバスプロトコルの実際の実装に関する情報を必要とせず、むしろ、NSDLベースの記述は、バスアーキテクチャデバイス1000内でトランザクションを開始するために求められるコマンドに関する情報だけを必要とする。トランザクションは、NSDLベースの記述内に含まれた「select_tributary」機能および「select_affluent」機能によって定義される。
「select_tributary」機能(ライン31〜38)は、バスに「書込み」動作を命令するために、(カスタムタイプおよび機能を利用している)良好なレジスタに良好なアドレスを書き込む。「select_affluent」機能(ライン40〜47)は、バスから「読取り」動作を命令するために、(カスタムタイプおよび機能を利用している)良好なレジスタから良好なアドレスを読み取る。
バスアーキテクチャデバイス1000は、「トランザクション」クロスロードデバイスであるため、バスアーキテクチャデバイス1000のNSDLベースの記述は、「選択」手順または「選択解除」手順を必要とせず、むしろ、テストツールが、その接続は一回だけアクティブになり、次いで、アフルエントおよびトリビュタリは「選択解除された」に設定し戻されることになることを知るように、「選択」手順および「選択解除」手順は、「トランザクション」として印される。
本明細書で説明されるように、バスアーキテクチャデバイス1000などのクロスロードデバイス(および、その他のクロスロードデバイス)は、完全にP1687標準の現在の機能の範囲外である。バスアーキテクチャデバイス1000などのクロスロードデバイス(および、その他のクロスロードデバイス)の記述は、NSDLの使用によってだけ可能にされる。
本明細書で説明されるように、システムオンチップは、NSDLを使用して記述されることが可能であり、さらに、システムオンチップのシステムレベルの記述は、システムオンチップをテストするためにテストツールによって利用されることが可能である。NSDLを使用して記述されるシステムオンチップをテストするように適合された例示的なテストツールは、図11に関して示され、かつ説明される。さらに、NSDLを使用して記述されるシステムオンチップのテストは、図12〜図20を参照してよりよく理解され得る。
図11は、図1のテスト環境のテストシステムのハイレベルブロック図を示す。詳細には、TS120は、プロセッサ1110と、メモリ1120と、入出力(I/O)インターフェース1130と、サポート回路1140とを含む。プロセッサ1110は、メモリ1120、I/Oインターフェース1130、およびサポート回路1140のそれぞれに結合される。プロセッサ1110は、本明細書で示され、かつ説明される様々なテスト機能を提供するために、メモリ1120、I/Oインターフェース1130、およびサポート回路1140と協働する。
図11に示されるように、メモリ1120は、システムテストを実行する際に使用するように適合されたリソースを格納する。詳細には、メモリ1120は、システムテストを実行する際に使用するように適合されたテストツール1121、テストリソース記述1122、およびテストデータ1123を格納する。メモリ1120は、(その他1124として示される)システムテストを実行するために使用され得る任意のその他のプログラム、記述、データなどを格納することが可能である。
テストツール1121は、システムテストを制御する。テストツール1121は、1つまたは複数のテスト手順を含み得る。これらのテスト手順は、1つまたは複数のテストコンパイラによって生成され得る。これらのテスト手順は、1つまたは複数のシステムをテストするために実行され得る。テストツール1121は、システムテストを制御するために使用され得る任意のその他の手順、プログラムなどを含む。
テストリソース記述1122は、構成要素記述、システム記述など、ならびにそれらの様々な組合せなど、システムテストにおいて使用するように適合された任意の記述を含み得る。テストリソース記述1122は、システムトポロジの記述を含み得る。テストリソース記述1122は、システムオンチップテストを実行する際に使用するために処理されることが可能な任意のその他の記述を含み得る。
テストリソース記述1122は、異なるタイプのテストリソースに関して記述テンプレートが維持され得るように、1つまたは複数のライブラリを含むことが可能である(したがって、必要に応じて、アクセスおよび修正されることが可能である)。これらのテンプレートは、構成要素レベルのテンプレート(例えば、あるIPに関するテンプレート、ある計器に関するテンプレートなど)、システムトポロジテンプレートなど、ならびにそれらの様々な組合せであり得る。
テストデータ1123は、システムテストを実行する際に使用するように適合された任意のデータを含む。テストデータ1123は、入力ビットストリームデータ、出力ビットストリームデータ(例えば、テストシステムによって決定された、期待される出力ビットストリーム、およびシステムオンチップから捕捉された実際の出力ビットストリーム)など、ならびにそれらの様々な組合せを含み得る。テストデータ1123は、テストされているシステムに適用されることが可能であり、かつ/またはテストされているシステムから回復されることが可能な任意のその他のデータを含み得る。
I/Oインターフェース1130は、TS120からS−o−C110にインターフェースを提供する。I/Oインターフェース1130は、JTAGベースのインターフェースである。I/Oインターフェース1130は、それによって、プロセッサ1110によるテスト手順の実行に応答して、TS120が入力ビットストリームをS−o−C110に適用することが可能なTDIインターフェースをサポートする。I/Oインターフェース1130は、それによって、プロセッサ1110によるテスト手順の実行に応答して、TS120が実際の出力ビットストリームをS−o−C110から回復することが可能なTDOインターフェースをサポートする。
本明細書において、1つのTDIインターフェースおよび1つのTDOインターフェースに関して主に示され、かつ説明されるが、I/Oインターフェース1130は、異なるシステムオンチップ構成をテストするために求められるまたは所望される任意の数および任意の(1つまたは複数の)タイプのテストインターフェースをサポートすることが可能である。例えば、JTAGベースのテストの場合、I/Oインターフェース1130は、TCK信号、TMS信号、および、オプションで、TRST信号に関するインターフェースをサポートすることも可能である。
サポート回路1140は、システムテストを実行する際に使用され得る任意の追加の回路を含む。例えば、サポート回路1140は、追加のプロセッサ、追加のメモリ、追加のインターフェース、テストビットストリーム生成回路、テストビットストリーム処理回路など、ならびにそれらの様々な組合せを含み得る。サポート回路1140は、テストシステム120によって求められる場合がある任意の追加の回路を含む。
プロセッサ1140は、本明細書で説明される様々なシステムオンチップテスト機能を提供するために、メモリ1120、I/Oインターフェース1130、およびサポート回路1140と協働する。
プロセッサ1140は、記述(例えば、機能レベルの記述、構成要素記述など)を生成する。プロセッサ1140は、(例えば、構成要素相互接続を解析するため、システム記述を生成するためなどに構成要素記述を使用して)記述を生成するために、テストリソース記述1122からの記述を処理する。プロセッサ1140は、テストリソース記述1122の一部として、それらの記述を格納する。
プロセッサ1140は、システムオンチップをテストするためのテスト手順を生成して、テストツール1121の一部としてそれらのテスト手順を格納する。プロセッサ1140は、テストツール1121からのテスト手順を使用して、テストデータを生成して、テストデータ1123の一部としてそのテストデータを格納する。
プロセッサは、本明細書で説明される任意のその他のシステムオンチップテスト機能を提供するために、メモリ1120、I/Oインターフェース1130、およびサポート回路1140と協働することが可能である。
システムオンチップのNSDLベースの記述を使用したシステムオンチップのテストは、システムオンチップのNSDLベースの記述を使用してシステムオンチップをテストするための方法を提供する図12〜14に関してよりよく理解され得る。システムオンチップのNSDLベースの記述を使用したシステムオンチップのテストは、(システムオンチップの1つの構成要素のテストを例示的に示す)図15および図16、(システムオンチップの構成要素をテストするための方法を提供する)図17、および(システムオンチップのテストを例示的に示す)図18〜図20に関してさらに理解され得る。
図12は、JTAG接続を介してシステムをテストするために、図1のテストシステムによって実行される例示的な方法を示す。直列的に実行されているとして示され、かつ説明されるが、図12の方法1200のステップの少なくとも一部は、同時に、または、図12に関して示され、かつ説明されたのとは別の順序で実行されることが可能である。方法1200は、ステップ1202で始まり、ステップ1204に進む。
ステップ1204において、システムオンチップに関するテストビットストリームが決定される。テストビットストリームは、入力ビットストリームと、期待される出力ビットストリームとを含む。テストビットストリームは、本明細書で説明されるいずれかの形で決定されることが可能である。一実施形態では、テストビットストリームは、図13に関して示され、かつ説明される方法を使用して決定される。
ステップ1206において、入力ビットストリームは、システムオンチップに適用される。入力ビットストリームは、システムオンチップのTDIインターフェースを経由してシステムオンチップに適用されることが可能である。ステップ1208において、システムオンチップから実際の出力ビットストリームが捕捉される。実際の出力ビットストリームは、システムオンチップのTDOインターフェースを経由してシステムオンチップから捕捉され得る。
ステップ1210において、実際の出力ビットストリームおよび期待される出力ビットストリームを使用して、テスト結果が決定される。テスト結果は(例えば、テストの間に何らかのエラーが存在したか否かを決定するために)実際の出力ビットストリームを期待される出力ビットストリームと比較することによって決定され得る。ステップ1212において、テスト結果が格納される。
ステップ1214において、方法1200は終了する。
図13は、JTAG接続を介してシステムをテストするために、図1のテストシステムによって実施される例示的な方法を示す。詳細には、図13の方法1300は、システムオンチップをテストする際に使用するためのテストビットストリームを決定するための方法を含む。直列的に実行されているとして示され、かつ説明されるが、図13の方法1300のステップの少なくとも一部は、同時に、または、図13に関して示され、かつ説明されたのとは別の順序で実行されることが可能である。方法1300は、ステップ1302で始まり、ステップ1304に進む。
ステップ1304において、(本明細書で、システム記述として示される)システムオンチップの記述が決定される。システム記述は、本明細書で説明されるいずれかの形で決定されることが可能である。システム記述は、システムオンチップのNSDLベースの記述である。一実施形態では、システム記述は、図14に関して示され、かつ説明される方法を使用して決定される。
ステップ1306において、システムオンチップをテストするためのテストビットストリームがシステムオンチップのシステム記述から決定される。テストビットストリームは、システムオンチップに適用されることになる入力ビットストリームと、システムオンチップから捕捉された実際の出力ビットストリームと比較されることが可能な期待される出力ビットストリームとを含む。
ステップ1308において、方法1300は終了する。
図14は、JTAG接続を介してシステムをテストするために、図1のテストシステムによって実行される例示的な方法を示す。詳細には、図14の方法1304は、システムオンチップのシステム記述を決定するための方法を含む。直列的に実行されているとして示され、かつ説明されるが、図14の方法1304のステップの少なくとも一部は、同時に、または、図14に関して示され、かつ説明されたのとは別の順序で実行されることが可能である。方法1304は、ステップ1402で始まり、ステップ1404に進む。
ステップ1404において、システムオンチップの構成要素が識別される。システムオンチップの構成要素は、いかなるようにも識別され得る。一実施形態では、システムオンチップの構成要素は、システムオンチップが供給されたテストリソースの一部として識別される。一実施形態では、システムオンチップの構成要素は、システムオンチップを解析することによって識別される。システムオンチップの構成要素は、いずれかのその他の形で識別されることも可能である。
ステップ1406において、システムオンチップの構成要素のそれぞれに関して構成要素記述が決定される。構成要素記述は、いかなるようにも決定され得る。
構成要素記述が事前に定義される一実施形態では、構成要素記述は、事前に定義された記述を単に読み取ることによって決定されることが可能である。構成要素記述が事前に設定されない一実施形態では、構成要素記述は、構成要素のそれぞれを解析することによって、オンザフライで定義されることが可能である。
構成要素の記述は、構成要素の内部スキャンパスを指定する。一実施形態では、構成要素の記述は、レジスタ値の点から構成要素を表す。構成要素が複数の機能をサポートする、1つのかかる実施形態では、構成要素の機能のそれぞれは、レジスタ値の点から表されることが可能である。レジスタ値の点から構成要素を記述することは、図15に関してよりよく理解され得る。構成要素記述はNSDLを使用して指定される。
ステップ1408において、システムオンチップのトポロジが決定される。システムオンチップのトポロジは、システムオンチップの構成要素同士の間の相互接続を記述する。システムオンチップのトポロジは、システムオンチップの構成要素同士の間の相互接続を解析することによって決定される。
ステップ1410において、システムオンチップのシステム記述が決定される。システム記述は、構成要素記述およびシステムトポロジを使用して決定される。システムオンチップのシステム記述は、システムオンチップのそれぞれの構成要素のそれぞれの内部スキャンパスと、システムオンチップの構成要素同士の間の相互接続とを含めて、システムオンチップのスキャンパスを表す。システム記述は、システムオンチップを記述するために使用されることが可能な任意のその他の情報を含み得る。ステップ1412において、システムオンチップのシステム記述が格納される。
ステップ1414において、方法1304は終了する。
図15は、図2のシステムオンチップの構成要素のうちの1つをテストするためのテスト手順に関するレジスタ値を決定するための構成要素の記述の使用を示す。詳細には、(分かりやすくするために省略された)S−o−C110の構成要素210Aの記述は、S−o−C110の構成要素210Aに関する(レジスタ値1510として示される)レジスタ値のセットに変換される。構成要素210Aのレジスタ値1510は、構成要素210Aによってサポートされる3つの機能のそれぞれに関するレジスタ値を含む。構成要素210Aによってサポートされる3つの機能のそれぞれに関するレジスタ値は、テスト構成要素210Aに関して使用されるテストビットストリームをテストに関する値を決定するために処理されることが可能である。
図15に示されるように、構成要素210Aの機能は、構成要素210Aが構成される構成要素レジスタA0、A1、A2のレジスタ値の点から説明される。第1の機能は、「000」、4サイクル待機、「001」として定義される。第2の機能は、「111」、1サイクル待機、「010」、5サイクル待機、「101」として定義される。第3の機能は、「000」、2サイクル待機、「100」、10サイクル待機、「000」として定義される。すなわち、レジスタ値1510は、機能から構成要素210Aに関する構成要素レジスタ値へのマッピングを指定する。この記述(すなわち、機能からレジスタ値へのマッピング)は、テストビットストリームを決定するために、構成要素の記述が処理され得る容易さを示す。
図15に示されるように、構成要素210Aの機能のそれぞれに関して、レジスタ値1510は(1)その機能に関して、構成要素レジスタがどのように書き込まれ、かつ読み取られるか、および(2)その機能に関して、構成要素レジスタ値がどのように解釈されなければならないかを示す。したがって、NSDLなどの記述言語において、構成要素の記述は、システムオンチップの関連で、構成要素をテストするためのテスト手順において使用するためのレジスタ値に変換されることが可能な構成要素の機能の記述を含む。
機能からレジスタ値へのマッピングを説明する際に分かりやすくするために省略されているが、NSDLの点から、構成要素210Aの特定の記述は、図3〜図5に関して示され、かつ説明されたように構成されたアルゴリズム記述である。構成要素210AのこのNSDLベースの記述は、機能からレジスタ値へのマッピングが決定されることを可能にする。分かりやすくするために省略されているが、S−o−C110のその他の構成要素(すなわち、構成要素210B〜構成要素210E)のそれぞれに関して、類似の記述が定義され得る。
図16は、図2のシステムオンチップの構成要素のうちの1つをテストするためのテスト手順に関するテストビットストリームを決定するための、図2のシステムオンチップの構成の記述の使用を示す。図16に示されるように、テストビットストリーム1610は、S−o−C110の少なくとも一部をテストする際に使用するために生成される。詳細には、テストビットストリーム1610は、S−o−C110のTDIポートに適用される入力ビットストリーム1611Iと、S−o−C110のTDOポートから受信される出力ビットストリーム1611Oとを含む。
テストビットストリーム1610は、(NSDLを使用して指定される)S−o−C110の記述を使用して、TS120によって生成される。(本明細書において、システム記述とも呼ばれる)S−o−C110の記述は、S−o−C110のテストリソースの記述(例えば、構成要素210の記述、構成要素相互接続220の記述など、ならびにそれらの様々な組合せ)を含む。S−o−C110のシステム記述は、S−o−C110のトポロジ、したがって、S−o−C110のシステムスキャンパスを記述する。
本明細書で説明されるように、TS120は、S−o−C110の(システムスキャンパスの記述を提供する)システム記述に基づいてテストビットストリーム1610を生成する。したがって、S−o−C110のシステム記述はS−o−C110のシステムスキャンパスの記述を提供するため、TS120は、S−o−C110に関して生成されたテストビットストリーム1610のどの部分が、S−o−C110のシステムスキャンパスのどの部分に対応するのかを決定することが可能である。これは、図16に示される。
図16に示されるように、入力ビットストリーム1611I内および出力ビットストリーム1611O内の特定のビット位置(すなわち、構成要素210Aに対応するビット位置)が突き止められている。構成要素210A内のレジスタに対応する入力ビットストリーム1611I内および出力ビットストリーム1611O内の特定の位置の位置決定は、(S−o−C110内の構成要素210のそれぞれの位置を含めて、S−o−C110のシステムスキャンパスに関する情報を提供する)S−o−C110のNSDLベースの記述の使用によって可能にされる。
構成要素レジスタからビットストリームへの変換を説明する際に、分かりやすくするために省略されているが、NSDLの点から、S−o−C110の特定の記述は、S−o−C110のトポロジ、したがって、S−o−C110のシステムスキャンパスを記述するアルゴリズム記述である。S−o−C110のこのNSDLベースの記述は、レジスタ値からビットストリームへの変換が実行されるのを可能にする。
図17は、IJTAG/NSDLフレームワーク内のシステムの構成要素をテストするために、図1のテストシステムによって実行される例示的な方法を示す。詳細には、図17の方法1700は、システムオンチップの1つの構成要素をテストするための方法を含む。直列的に実行されているとして示され、かつ説明されるが、図17の方法1700のステップの少なくとも一部は、同時に、または、図17に関して示され、かつ説明されたのとは別の順序で実行されることが可能である。方法1700は、ステップ1702で始まり、ステップ1704に進む。
ステップ1704において、システムオンチップの構成要素が選択される(すなわち、テストされることになるシステムオンチップの構成要素として選択される)。
ステップ1706において、選択された構成要素の記述が取得される。
ステップ1708において、構成要素によってサポートされるそれぞれの機能に関して、機能は、その構成要素のレジスタに関連するレジスタ値に変換される。構成要素の機能は、構成要素の記述を使用して、レジスタ値に変換される。
ステップ1710において、システムオンチップのシステム記述が取得される。システムオンチップのシステム記述は、システムオンチップの構成要素の記述およびシステムオンチップのトポロジの記述から決定された、システムオンチップのシステムスキャンパスを指定する。システム記述は、システムオンチップに関するテストビットストリームを指定するために使用されることが可能である。
ステップ1712において、システムオンチップのテストビットストリーム内の選択された構成要素の位置がシステムオンチップのトポロジを使用して決定される。テストビットストリーム内の選択された構成要素の位置は、入力ビットストリーム内の1つまたは複数のビット位置および実際の出力ビットストリーム内の1つまたは複数のビット位置を指定する。
ステップ1713(オプションのステップ)において、(すなわち、構成要素に対するアクセスがクロスロードデバイスによって制御される場合)クロスロードデバイスが駆動される。クロスロードデバイスは、クロスロードデバイスのアルゴリズム記述を処理することによって駆動される。クロスロードデバイスを駆動させることは、関連する構成要素をシステムオンチップのスキャンパスに動的に加えるために、クロスロードデバイスが選択されることを可能にする。構成要素に対するアクセスが、もはや求められなくなった後で、クロスロードデバイスは、次いで、関連する構成要素をシステムオンチップのスキャンパスから除去するために選択解除されることが可能である。構成要素に対するアクセスはクロスロードデバイスによって制御されてよく、またはクロスロードデバイスによって制御されなくてもよいため、このステップはオプションである。
ステップ1714において、レジスタ値が入力ビットストリームの突き止められた位置内に挿入される。次いで、入力ビットストリームは、(すなわち、システムオンチップの少なくとも一部をテストするために)システムオンチップの入力テストアクセスポートに適用されることが可能である。ステップ1716において、結果値が出力ビットストリームの突き止められた位置から(すなわち、システムオンチップの出力テストアクセス部分からテストシステムによって捕捉された出力ビットストリームから)回復される。回復された結果値は、次いで、様々なテスト結果を決定するために処理されることが可能である。
ステップ1718において、方法1700は終了する。
図18は、例示的なシステムオンチップのハイレベルブロック図を示す。図18に示されるように、システムオンチップ1800は、フィルタと、アナログ・デジタル変換器(ADC)、デジタル・アナログ変換器(DAC)、およびアンテナアクセスユニット(AAU)を含む、3つの計器とを含む。AAUは、アナログ・デジタル・アナログ変換をサポートする。このフィルタは、(RX_outとして示される)ADCに対する出力接続と、(TX_inとして示される)DACからの入力接続とをサポートする。このフィルタは、(AN_inoutとして示される)AAUとの双方向接続をサポートする。
図18に示されるように、3つの計器に対するアクセスは、スキャンパスを経由してTDI入力からTDO出力に提供される。このスキャンパスは、アクチュエータレジスタと3つのSIBセル(それぞれの計器がスキャンパスに加えられるのを可能にする3つの計器のそれぞれに関して1つ)のセットとを含む。アクチュエータレジスタは、フィルタとインターフェースをとる。第1のSIBセルは、(アフルエントおよびトリビュタリを経由して)ADC計器に対するアクセスを提供する。第2のSIBセルは、(アフルエントおよびトリビュタリを経由して)DAC計器に対するアクセスを提供する。第3のSIBセルは、(アフルエントおよびトリビュタリを経由して)AAU計器に対するアクセスを提供する。
スキャンパスの記述が続く。TDI入力は、アクチュエータレジスタのセットの入力に結合される。アクチュエータレジスタのセットの出力は、第1のSIBセルの入力に結合される。第1のSIBの出力は、第2のSIBセルの入力に結合される。第2のSIBセルの出力は、第3のSIBセルの入力に結合される。第3のSIBセルの出力は、TDO出力に結合される。TDI入力からTDO出力へのこのシーケンスは、SIBのそれぞれが選択解除されたとき(すなわち、そのそれぞれの計器がスキャンパスに加えられるように、SIBのいずれも「選択され」ない場合)システムオンチップ1800のスキャンパスを形成する。
図18に示されるように、3つの計器のそれぞれは、それらの3つの計器に関連するそれぞれのSIBセルのアフルエントインターフェースおよびトリビュタリインターフェースを選択することによって、スキャンパスに容易に加えられることが可能である。例えば、第1のSIBは、ADC計器がテストのためのスキャンパスに加えられることが可能なように選択され得る。例えば、第1のSIBおよび第3のSIBは、ADC計器およびAAU計器の両方がテストのためにスキャンパスに加えられることが可能なように選択され得る。本明細書で説明されるように、システムオンチップ1800のNSDLベースの記述は、システムオンチップ1800のテストを簡素化する。
図19は、図18のシステムオンチップの構成要素のうちの1つをテストするためのテスト手順に関するレジスタビット値を決定するための構成要素の記述の使用を示す。詳細には、図19は、(記述1910として示される)ADC計器の記述の(レジスタ1920として示される)ADC計器のレジスタに関連するレジスタ値へのマッピングを示す。図19に示されるように、記述1910は、(スキャンパス記述1911として示される)スキャンパスの記述と、(機能アルゴリズム1912として示される)ADC計器によって実行される機能のアルゴリズム表示とを含む。
記述1910は、NSDLベースの(アルゴリズム)記述である。スキャンパス記述1911は、(データレジスタおよび制御レジスタを含む)ADC計器のレジスタを識別して、(例えば、「先行部分」、「後続部分」、および長さ情報を識別して)レジスタがどのように構成されるかを記述する。機能アルゴリズム1912は、ADC計器によって実行される機能の動作を記述する。記述1910から、テストツールは、ADC計器をテストするために使用され得るビットストリーム値を容易に決定することが可能である。
図20は、図18のシステムオンチップの構成の記述を決定するための、図18のシステムオンチップの構成要素の記述の使用を示す。詳細には、図20は、(トポロジ2010として示される)図18のシステムオンチップのトポロジの記述を示す。トポロジ2010は、システムオンチップ1800の構成要素(例えば、アクチュエータレジスタ、SIB、および計器)のそれぞれの入力および出力のそれぞれの汎用マッピングを使用して指定される。
例えば、アクチュエータレジスタの記述は、アクチュエータレジスタに対する入力がTDI入力(「precedent」=>「TDI」)であり、アクチュエータレジスタからの出力が、ADC計器のRX_registerに対するアクセスを可能にするため(following=>「RX_enable」)、RX_enableとして示される第1のSIBであることを示す。すなわち、アクチュエータレジスタ構成要素は、そのアクチュエータレジスタ構成要素がインターフェースをとる構成要素の点から記述される。
例えば、第1のSIBの記述(すなわち、RX_enable 構成要素)は、RX_enable構成要素がアクチュエータレジスタに対する入力(precedent=>「actuator_register」)であり、第1のSIBの出力が、DAC計器のTX_registerに対するアクセスを可能にするため(following=>「TX_enable」)、TX_enableとして示される第2のSIBであることを示す。
さらに、第1のSIBはADC計器に対するアクセスを可能にするため、第1のSIBの記述は、ADC計器に対するアクセスも記述する。詳細には、第1のSIBの記述は、第1のSIBからADC計器へのアクセスが1つの入力(affluent=>「RX_register」)および1つの出力(tributary=>「RX_enable」)を経由して可能にされることを示す。
これらの例から、システムオンチップのトポロジ全体がNSDLを使用して容易に記述され得ることは明らかである。さらに、トポロジはシステムオンチップの構成要素同士の間の相互接続の記述を提供するため、システムオンチップのトポロジ内のシステムオンチップの構成要素のそれぞれの位置は、容易に決定されることが可能である。
本明細書で説明されるように、(構成要素の機能から構成要素のレジスタに関するレジスタ値へのマッピングを提供する)システムオンチップの構成要素の記述と、システムオンチップのトポロジの記述とを使用して、様々なタイプのテストがシステムオンチップ上で実行され得る。したがって、図18〜20は、NSDLを使用して、システムオンチップを記述する利点を示す。
先の記述から、システムオンチップを記述するためにNSDL言語を使用することの様々な利点および利益は明らかである。NSDLのアルゴリズム性質は、(トポロジがどんなに複雑であろうと)システムオンチップのテスト(例えば、複数の構成要素のテスト、1つの構成要素のテスト、構成要素の機能のサブセットのテストなど、ならびにそれらの様々な組合せ)のために適合されたテストビットストリームを決定するために処理され得るシステムオンチップのアルゴリズム記述を可能にする。したがって、NSDLを使用すると、システムオンチップをテストする際に使用するための、システムオンチップのシステムスキャンパスの階層的記述が決定されることが可能である。
NSDL言語は、システムオンチップ構成要素(例えば、IP、計器、クロスロードデバイスなど)のアルゴリズム記述、システムオンチップトポロジ(例えば、構成要素同士の間の相互接続、構成要素間依存など)など、ならびにそれらの様々な組合せを提供することを含めて、BSDL/HSDLが単にできないようにIJTAGの特徴をサポートし、それによって、システムオンチップのアルゴリズムシステムレベルの記述を可能にする。したがって、NSDL言語は、階層化スキャンパス組織を可能にし、それによって、レジスタ値をシステムオンチップのテストのために使用され得るテストビットストリームに変換することを可能にする。
NSDL言語は、多くの形で実装され得る。
一実施形態では、NSDLは、VHDLの既存の特徴を使用して実装される。BSDLはVHDLのサブセットとして定義されたのに対して、NSDLは、VHDLのスーパーセットを利用する。VHDLは主なレジスタ転送レベル(RTL)記述言語であるため、VHDLは、VHDLが記述する構成要素のテスト要件を表現するのに大変適している。VHDLと互換性がある状態にとどまることによって、NSDLは、最小限の変更を行った状態で既存のコンパイラによってサポートされることが可能である。さらに、VHDLの使用は、NSDLに遷移することが、VHDLに慣れた人々にとって円滑な経験になることを確実にし、さらに、既存のソースおよびツールの変換および適合が容易になることを確実にする。したがって、VHDLを利用しているNSDLは、既存のユーザコミュニティへの影響を最小限に抑え、それによって、既存のユーザコミュニティによるNSDLの適合を簡素化する。
対照的に、BSDLは、BSDLをVHDLと後方互換性および前方互換性の両方があるものにする努力の際にVHDLのサブセットとして開発された。サブセットは、何も加えられていないことを示す(すなわち、すべての情報は、次いで、通常と異なる形で解釈される、すでに既存のVHDL規則内に組み込まれた構造的な構文規則によって運ばれる)。後方互換性は自動的であるものの、新しい構成物(contructs)を定義する不可能性は進化を困難にする。この構造的な限界は、開発者に、多くの場合、直観に反する形で、2つの最も一般的な構成物(属性および文字列)を過剰使用させる。すなわち、BSDLは、VHDLのほんの一部の中で効果的に制約され、それによって、VHDLが文脈的な意味を有するいかなる可能性も排除した。
本明細書で説明されるように、NSDLは、システムオンチップテストにおいて多くの利点を提供する。同様に、NSDLを実装するためにVHDLを使用することは、 システムオンチップテストにおいて多くの利点を提供する。
システムオンチップの構成要素は、VHDLエンティティ構成要素カプレット上でモデル形成されることが可能であり、それによって、システムオンチップの構成要素によってサポートされる個々の機能の記述を可能にする。したがって、それぞれの構成要素に対するアクセスは、階層を含み得る、その構成要素の内部スキャンパスを介して提供されることが可能である。さらに、構成要素は、テストシステムがその構成要素をテストするために使用することが可能なテスト手順の対応するセットが伴う可能性があり、この場合、手順の諸属性は、NSDL(例えば、長さ、依存など)を使用して指定され、一方、手順の本体は、VHDLを使用して指定される。したがって、これは、システム設計者が、構成要素設計者が構成要素レベルの記述を処理するのと同じようにシステムレベルの記述を処理することを可能にする。
システムオンチップのスキャンパスは、VHDL構成要素のようにインスタンスが作成され得る一連のエンティティとして構成されることが可能であり、したがって、パッケージまたはライブラリに容易に再グループ化されることが可能である。さらに、多くのより複雑な表示(例えば、所与のタイプの構成要素の複数のインスタンスの作成、構成要素依存など、ならびにそれらの様々な組合せ)が容易に処理される。さらに、NSDLは、伝統的なVHDL信号マッピングに関する改善であるようにシステムスキャンチェーンの構築を可能にする。システムオンチップをテストするために開発されたテスト手順は、システムスキャンパスまたは(複数の構成要素のグループ、または1つの構成要素のサブセットもしくはサブセットすら含み得るスライスと呼ばれる)システムスキャンパスの一部を参照することが可能である。
本明細書において、VHDLを使用してNSDLが実装される実施形態に関して主に示され、かつ説明されるが、NSDLは、(まだ開発されていないハードウェア記述言語を含み得る)その他のハードウェア記述言語を使用して実装されることが可能である。
本明細書で説明されるように、JTAGベースのテストを改善すること、ならびにJTAGベースのテストにおいてクロスロードデバイスの使用を可能にすることに加えて、NSDL言語は、システムオンチップの構成要素に対する並列アクセスも可能にし、それによって、システムオンチップテストにおける改善(例えば、改良型のテストスケジューリング、改良型のテスト効率など、ならびにそれらの様々な組合せ)を可能にする。
P1687などの一実施形態では、並列アクセスは、主に、データ伝送向けの帯域幅を最適化する一方式として意図されるものの、直列アクセスは、テストの制御を依然として保持する。NSDL言語は、これら補助リソースを記述して、これらをテストフロー内(例えば、それぞれ、図12および図17に関して示され、かつ説明される方法1200内ならびに1700内)に挿入することが可能である。
さらに、NSDLは、例えば、システムオンチップをテストするための並列アクセスを提供するためにクロスロードデバイスを使用して、システムオンチップをテストするための並列アクセスを提供するためにファンアウト/ファンイン方式を使用してなど、ならびにそれらの様々な組合せを使用して、より複雑なテストアクセス機構(TAM)を記述するために拡張されることも可能である。
1つのシステムオンチップ(または、複数のシステムオンチップ)をテストするための並列アクセスの使用は、図21〜図28に関してより理解され得る。
図21は、並列アクセスインターフェースの一般的な接続方式のハイレベルブロック図を示す。詳細には、一般的な接続方式2100は、並列アクセスインターフェース2110をシステムオンチップ2120に提供する。並列アクセスインターフェース2110は、内部並列ポート2111と、外部並列ポート2112と、内部インターフェース2113とを含む。システムオンチップ2120は、並列ポート2121を含む。
図21に示されるように、システムオンチップ2120に対する並列アクセスは、内部並列ポート2111と並列ポート2121との間の接続によって提供される。並列ポート2121の利用は、(1)(インスタンスの作成時に行われ得る)システムオンチップ2120に対する並列ポート2121の接続および同期と、(2)(分かりやすくするために省略される)テストシステムによる並列ポート2121の処理とを必要とする。
図21に示されるように、内部並列ポート2111および外部並列ポート2112は、n個の入力接続(n>0)およびm個の出力接続(m>0)が、システムオンチップ2120の並列ポート2121に接続されることを可能にする。
システムオンチップ2120に対する並列アクセスは、2つの様式で提供される。
システムオンチップ2120に対する並列アクセスは、外部から提供される。テストシステムからシステムオンチップ2120への外部アクセスは、外部並列ポート2112を使用して提供される。外部並列ポート2112は、テストシステムと内部並列ポート2111との間のインターフェースとして機能する。外部並列ポート2112は、(それぞれ、内部並列ポート2111のn個の入力接続/m個の出力接続に対応する)n個の入力接続およびm個の出力接続をサポートする。
システムオンチップ2120に対する並列アクセスは、内部で提供される。テストシステムからシステムオンチップ2120への内部アクセスは、内部インターフェース2113を使用して提供される。一実施形態では、内部インターフェース2113は、システムスキャンパスに接続された、1つまたは複数の内部レジスタを使用して実装されることが可能である。この実施形態では、内部レジスタは、並列アクセスインターフェース2110の行動を制御するため、または並列アクセスインターフェース2110の状態を問い合わせるために使用されることが可能である。
上記のように、内部インターフェース2112または外部インターフェース2113を経由して、内部並列ポート2111にアクセスすることになるテストシステムは、分かりやすくするために省略される。
並列アクセスインターフェース2110は、NSDLを使用して記述される。
並列アクセスインターフェース2110のNSDL記述は、(1)(1つまたは複数の)内部ポートの記述(例えば、幅情報、データフローの方向、および類似情報)と、(2)並列アクセス機能/並列アクセス手順とを含む。
並列アクセスインターフェース2110のNSDL記述は、オプションで、(3)外部並列ポート2112の記述(例えば、幅情報、データフローの方向、および類似情報)を含むことも可能である。
並列アクセスインターフェース2110のNSDL記述は、オプションで、(4)内部インターフェース2113の記述(例えば、制御機能および/または状態機能に関して利用されるレジスタの記述)を含むことも可能である。
一実施形態では、テストシステムから複数の構成要素を有するシステムオンチップへの並列アクセスは、テストシステムと構成要素との間でテストビットストリームを結合するための直列テストアクセスインターフェースの記述(この場合、直列テストアクセスインターフェースは、システムオンチップの直列スキャンパスを使用して構成要素に対するアクセスを提供する)と、テストシステムと構成要素との間でテストビットストリームを結合するための並列テストアクセスインターフェースの記述(この場合、並列テストアクセスインターフェースは、システムオンチップの直列スキャンパスを使用せずに、すなわち、アクセスが直列スキャンパスの1つまたは複数の値によって制御されることが可能でも、直列スキャンパスを経由して直接的にではなく構成要素に対するアクセスを提供する)とを使用して記述されることが可能である。直列テストアクセスインターフェースの記述および並列テストアクセスインターフェースの記述は、テストにおいて使用するために格納されることが可能である。
一実施形態では、テストシステムからシステムオンチップへの並列アクセスは、テストシステムをシステムオンチップのコアモジュールに結合して、並列インターフェースモジュールの記述を格納するように適合された並列インターフェースモジュールの記述を使用して記述されることが可能であり、この場合、並列インターフェースは、システムオンチップのスキャンパスを使用して、コアモジュールにアクセスするように適合された、少なくとも1つの直列レジスタと、システムオンチップのスキャンパスを使用せずに、コアモジュールにアクセスするように適合された、少なくとも1つの並列レジスタとを含む。この記述は、テストにおいて使用するために格納されることが可能である。
一実施形態では、テストシステムからシステムオンチップへの並列アクセスは、テストシステムと構成要素との間でテストビットストリームを結合するように適合された直列テストアクセスポートの記述と、テストシステムと構成要素との間でテストビットストリームを結合するように適合された並列テストアクセスポートの記述と、直列テストアクセスポートおよび並列テストアクセスポートをシステムオンチップの構成要素の少なくとも一部に結合するように適合されたインターフェースポートの記述とを使用して記述されることが可能である。これらの記述は、システムオンチップをテストする際に使用するために格納されることが可能である。
本明細書で説明されるように、これらの記述は生成されて、格納される。したがって、これらの記述は、並列アクセスを使用して、様々なテスト(例えば、構成要素レベルのテスト、システムレベルのテストなど、ならびにそれらの様々な組合せ)を実行するために、(例えば、メモリから、別のシステムから、またはかかる記述の任意のその他のソースから)プロセッサによって受信されることが可能である。
テストシステムからシステムオンチップへの並列アクセスは、その他の様式で記述されることが可能である。
並列インターフェース2110とシステムオンチップ2120との間の通信は、同期であってよく、または非同期であってもよい。
一実施形態では、並列インターフェース2110とシステムオンチップ2120との間の通信は、スキャンチェーンと同期する。1つのかかる実施形態では、1149.1「更新」信号の立上り時に並列ポート2121上の(1つまたは複数の)値がサンプリングされる。この実施形態では、テストシステムは、単に、(入力のために)ポートに(1つもしくは複数の)値を提示し、かつ/または(出力のために)ポートから(1つもしくは複数の)値を提示しなければならない。
一実施形態では、並列インターフェース2110とシステムオンチップ2120との間の通信は、同期バーストとして実装される。1つのかかる実施形態では、帯域幅を最適化するために、データのバーストが(入力上で)並列ポート2121に送られ、かつ/または(出力上で)並列ポート2121から読み取られる。1つのかかる実施形態では、バーストデータは、1149.1「更新」信号の立上り時に送られること/読み取られることが可能である。並列インターフェース2110は、テストシステムに対するデータバーストの特性を指定することになる。
一実施形態では、並列インターフェース2110とシステムオンチップ2120との間の通信は、非同期である。この実施形態では、並列ポート2121は、単独で動作し、接続を導くために、その独自のプロトコルを処理する。この実施形態では、テストシステムは、ハイレベルのアクセス(データを送ることおよびデータを受信すること)だけを可能にすることになる。トランザクションのプロトコルは、テストシステムの並列インターフェースドライバによって処理される。
一実施形態では、システムオンチップ1220は、並列インターフェース2110との通信の複数のかかるモードをサポートすることが可能である。かかる実施形態では、異なる通信モードの間で切り替えるために、機能のセットが使用され得る。例えば、機能のセットは以下を含み得る。すなわち、並列ポートを動作不能にする「disable_port」、スキャンチェーン同期アクセスモードにトグルする「set_scan_synchro」、バーストアクセスモードにトグルする「set_burst」、および非同期モードにトグルする「set_asynchro」である。
図22は、2つの例示的な並列アクセス接続方式を示すハイレベルブロック図を示す。
図22に示されるように、例示的な並列アクセス接続方式は、図1のテスト環境の関連で説明される。これらの例示的な並列アクセス接続方式は、テストシステム120をシステムオンチップ110に接続するために利用される。詳細には、これらの例示的な並列アクセス接続方式は、テストシステム120をシステムオンチップ110のJTAGインターフェース2201および並列インターフェース2202に接続するために利用される。
図22に示されるように、第1の並列アクセス接続方式2210は、JTAGおよび並列アクセスに関して共通のケーブルを利用する。第1の並列アクセス接続方式2210は、システムオンチップ110のスキャンパスに対するJTAGインターフェース2201およびシステムオンチップ110の並列インターフェース2202の両方に関して、(JTAG並列インターフェースデバイスとして示される)単一の接続デバイス2111を利用する。
図22に示されるように、第2の並列アクセス接続方式2220は、個別のJTAG接続および並列接続を利用した。第2の並列アクセス接続方式2210は、システムオンチップ110のスキャンパスに対するJTAGインターフェース2201に関する(JTAGインターフェースデバイス2121として示される)第1の接続デバイスと、システムオンチップ110の並列インターフェース2202に関する(並列インターフェースデバイス2122として示される)第2の接続デバイスとを利用する。
第2の並列アクセス接続方式2210に関して、テストシステム120が、JTAGインターフェース2201および並列インターフェース2202の両方に関するテストソース/テストシンクである実施形態に関して示され、かつ説明されるが、その他の実施形態では、JTAGインターフェース2201および並列インターフェース2202に関するテストソースおよび/またはテストシンクは異なってよい。例えば、JTAGインターフェース2201または並列インターフェース2202は、テストシステム120以外のテストソースおよび/またはテストシングを使用することが可能である。
一般に、並列インターフェースの実装形態に応じて、並列インターフェースを経由してシステムオンチップのテストを実行しているテストシステムは、例えば、テストシステムとシステムオンチップの並列ポートとの間に配置された多くの構成物により、システムオンチップの並列ポートに直接アクセスできない場合がある。例は、図23Aおよび23Bに示され、かつ説明される。
図23Aは、例示的なテスト環境のハイレベルブロック図を示す。この例示的なテスト環境2300は、テストシステムが、システムオンチップに並列アクセスを提供する並列アクセスインターフェースを使用して、システムオンチップ上でテストを実行するのを可能にする。詳細には、テスト環境2300は、インターフェースデバイス(ID)2320を経由して相互接続されたテストシステム(TS)2310とチップ/ボード(C/B)2330とを含む。
TS2310は、並列アクセスインターフェースを経由してシステムオンチップのテストを実行するように適合されたテストシステムである。TS2310は、システムオンチップに対する並列アクセスを使用して、システムオンチップをテストする目的でシステムを実装するためにいかなるようにも実装され得る。一実施形態では、TS2310は、図11に関して示され、かつ説明されたTS120の(例えば、並列テスト機能をサポートするように適合された)適合バージョンとして実装されることが可能である。
TS2310は、並列アクセスインターフェースを経由してシステムオンチップのテストを実行するために使用するように適合されたソフトウェアを含む。詳細には、TS2310は、テストツール2312および並列インターフェースドライバ2313を制御しているオペレーティングシステム2311を含む。TS2310は、(分かりやすくするために省略される)システムオンチップのテストを実行するように適合された、その他のハードウェアおよびソフトウェア(例えば、プロセッサ、メモリ、サポート回路など)を含む。
一実施形態では、テストツール2312は、テストツール1121と同じであってよい(または、少なくともテストツール2312に関して示され、かつ説明される機能は、テストツール1121の一部として実装されることが可能である)。
C/B2330は、システムオンチップ2331と並列インターフェース2332とを含む。システムオンチップ2331は、本明細書で説明されるいずれかのシステムオンチップであってよい。並列インターフェース2332は、図21および22に関して示され、かつ説明されたような並列インターフェースである。並列インターフェース2332とシステムオンチップ2331との間の相互作用は、図21に関してよりよく理解され得る。図23Aに示されるように、システムオンチップ2331および並列インターフェース2332はそれぞれ、NSDLを使用して記述される。
ID2320は、TS2310とC/B2330との間のインターフェースとして機能する。TS2310とID2320との間のインターフェースは、TS2310によってサポートされる任意のタイプのインターフェース(例えば、USBケーブルまたはTS2310によってサポートされ得る任意のその他のタイプのインターフェース)を使用して実装されることが可能である。ID2320とC/B2330との間のインターフェースは、C/B2330によってサポートされる任意のタイプのインターフェースとして実装されることが可能である。一実施形態では、ID2320は、データ信号および制御信号が、独立してTS2310からC/B2330に適用されることが可能なように、C/B2330に対して個別のデータインターフェースおよび制御インターフェースをサポートする。
本明細書で説明されるように、テストツール2312は、並列インターフェース2332(および、したがって、システムオンチップ2331)とのデータ交換を処理し、並列インターフェースドライバ2313は、並列インターフェース2332(および、したがって、システムオンチップ2331)とのプロトコル交換を処理する。すなわち、並列インターフェースドライバ2313は、テストツール2312が並列インターフェース2332とのプロトコル交換を管理しなければならないことを防ぐ。図23Aに示されるように、TS2310とC/B2330との間のデータ交換およびプロトコル交換は、ID2320によってサポートされる。
一実施形態では、並列インターフェースドライバ2313は、オペレーティングシステム2311によってサポートされた機能を使用して(例えば、バッファ、信号灯、メールボックスなど、ならびにそれらの様々な組合せを使用して)並列インターフェース2332とのプロトコル交換を処理する。この実施形態では、テストツール2312は、システムオンチップのJTAGポートを直接制御せず、むしろ、テストツール2312は、(例えば、ドライバによって宣言され、テストツール2312によってインポートされた機能を使用して)テストツール2312に様々な機能を提供するドライバと相互作用する。
図23Bは、図23Aの例示的なテスト環境内のデータフローのハイレベルブロック図を示す。図23Bに示されるように、データは(データフロー2351として示される)TS2310からC/B2330に、かつ(データフロー2352として示される)C/B2330からTS2310に流れる。データフロー2351において、データは、テストツール2312から並列インターフェースドライバ2313に、そこからインターフェースデバイス2320に、そこから並列インターフェース2332に、そこからシステムオンチップ2331に流れる。データフロー2352において、データは、システムオンチップ2331からテストツール2312に逆経路に沿って流れる。本明細書で説明されるように、データフローは、テスト環境2300の関連でだけ重要である。
システムオンチップ2331のNSDLベースの記述は、対応する並列インターフェースに(例えば、インスタンスの作成時に)接続された1つまたは複数の並列ポートと(並列トランザクションに関するデータが格納される)1つまたは複数の並列スライスと、並列ポート上でトランザクションを開始するように適合された1つまたは複数の並列トランザクション機能とを含む。(1つまたは複数の)並列スライスは、特定の名前付け(例えば、「parallel_xxxx」)を使用して識別されることが可能である。並列トランザクション機能は、特定の名前付け(例えば、「send_parallel_data」および「get_parallel_data」)を使用して識別されることが可能である。例えば、並列トランザクション機能のプロトタイプは以下を含み得る。
function send_parallel_data (sending_slice : in string)
return boolean;
function get_parallel_data (receiving_slice : in string)
return Boolean;
本明細書で説明される例示的な並列トランザクション機能は、並列ポート上の活動を広告し、さらに、直列テストビットストリームを制御するために、直列テストビットストリームに対する修正を示す。「並列スライス」の実装は、テストシステム(例示的に、TS2310のテストツール2312)にシステムオンチップの並列ポートと(本明細書において、システムオンチップの「コア」と呼ばれる)システムオンチップの残りの部分との間のデータフローの詳細について知らせる。システムオンチップの並列ポートとシステムオンチップのコアとの間の接続は、多くの様式で実装されることが可能である(その例は、図24〜27に関して示され、かつ説明される)。
図24は、並列ポートとシステムオンチップのコアとの間の例示的な接続のハイレベルブロック図を示す。図24に示されるように、例示的な接続は、完全に独立した(直列スキャンパスから独立した)並列ポートを利用する。詳細には、接続2400は、TAPポート2410と、並列アクセスをシステムオンチップ2430に提供している外部並列ポート2420とを含む。システムオンチップ2430は、TAPポート2410を経由して、または外部並列ポート2420を経由してアクセスされ得るコア2439を含む。
コア2439は、システムオンチップ2430の直列スキャンパス内の直列レジスタ2431を使用して、TAPポート2410を経由してアクセスされ得る。直列レジスタ2431は、第1のインターフェース2433を経由してコア2439に対するアクセスを制御する。コア2439は、システムオンチップ2430の直列スキャンパスの外部にある並列レジスタ2434を使用して、外部並列ポート2420を経由してアクセスされる。並列レジスタ2434は、第2のインターフェース2435を経由してコア2439に対するアクセスを制御する。
図24に示されるように、並列レジスタ2434を経由したコア2439に対するアクセスは、直列レジスタ2431から完全に独立している。したがって、すべての制御信号は、システムオンチップ2430の直列スキャンパスからの介入のいかなる必要も伴わずに、並列論理によって処理される。機能「get_parallel_data」は、並列スライス(例示的に、「parallel_reg」)の名前を引数として単に解釈し、ビットストリームに対する修正は求められないため、機能の本体は空である。
図25は、並列ポートとシステムオンチップのコアとの間の例示的な接続のハイレベルブロック図を示す。図25に示されるように、例示的な接続は、直列制御を伴う独立した並列ポートを利用する。詳細には、接続2500は、TAPポート2510と、並列アクセスをシステムオンチップ2530に提供している外部並列ポート2520とを含む。システムオンチップ2530は、TAPポート2510を経由して、または外部並列ポート2520を経由してアクセスされ得るコア2539を含む。
コア2539は、システムオンチップ2530の直列スキャンパス内の直列レジスタ2531を使用して、TAPポート2510を経由してアクセスされる。直列レジスタ2531は、第1のインターフェース2533を経由してコア2539に対するアクセスを制御する。コア2539は、システムオンチップ2530の直列スキャンパスの外部にある並列レジスタ2534を使用して、外部並列ポート2520を経由してアクセスされる。並列レジスタ2534は、第2のインターフェース2535を経由して、コア2539に対するアクセスを制御する。
図25に示されるように、並列レジスタ2534および関連する第2のインターフェース2535を経由したコア2539に対するアクセスは、システムオンチップ2530の直列スキャンパス内の追加のイネーブルレジスタ2532を使用して制御される。イネーブルレジスタ2532は、イネーブルレジスタ2532からコア2539への制御インターフェース2537を使用して、並列レジスタ2534を経由してコア2539に対するアクセスを制御する。したがって、システムオンチップ2530の直列スキャンパスは、TDI→イネーブルレジスタ2532→直列レジスタ2531→TDOを含む。
したがって、図25に示されるように、並列レジスタ2534を経由したコア2539に対するアクセスは、システムオンチップ2530の直列スキャンパスから直列的に制御される。この実施形態では、機能「get_parallel_data」は、並列スライス(例示的に、「parallel_reg」)の名前を引数として解釈し、さらに、ビットストリームに対する修正が求められるため、機能の本体は、イネーブルレジスタ2532の値を所望される値に設定するための命令を含むことになる。
図26は、並列ポートとシステムオンチップのコアとの間の例示的な接続のハイレベルブロック図を示す。図26に示されるように、例示的な接続は、直列データおよび並列データに関して、コアに対して共有アクセスポートを利用する。詳細には、接続2600は、TAPポート2610と、並列アクセスをシステムオンチップ2630に提供している外部並列ポート2620とを含む。システムオンチップ2630は、TAPポート2610を経由して、または外部並列ポート2620を経由してアクセスされ得るコア2639を含む。
コア2639は、システムオンチップ2630の直列スキャンパス内の直列レジスタ2631を使用して、TAPポート2610を経由してアクセスされる。直列レジスタ2631は、第1のインターフェース2633を経由してコア2639に対するアクセスを制御する。コア2639は、システムオンチップ2630の直列スキャンパスの外部にある並列レジスタ2634を使用して、外部並列ポート2620を経由してアクセスされる。並列レジスタ2634は、第2のインターフェース2635を経由して、コア2639に対するアクセスを制御する。
図26に示されるように、直列レジスタ2631および並列レジスタ2634を経由したコア2639に対するアクセスは、共有アクセスポート2636を使用して制御される。共有アクセス部分2636は、直列レジスタ2631からの第1のインターフェース2633を第1の入力として解釈して、並列レジスタ2634からの第2のインターフェース2635を第2の入力として解釈する。共有アクセスポート2636は、入力のうちの1つを選択して、共有アクセスインターフェース2638を経由して入力のうちの選択された1つをコア2639に提供する。
図26に示されるように、共有アクセスポート2636によって入力のうちの1つを選択することは、システムオンチップ2630の直列スキャンパス内で追加のイネーブルレジスタ2632を使用して制御される。イネーブルレジスタ2632は、イネーブルレジスタ2632から共有アクセスポート2636への制御インターフェース2637を使用して、共有アクセスポート2636および共有アクセスインターフェース2638を経由して、コア2639に対するアクセスを制御する。したがって、システムオンチップ2630の直列スキャンパスは、TDI→ 直列レジスタ2631→イネーブルレジスタ2632→TDOを含む。
したがって、図26に示されるように、並列レジスタ2634を経由したコア2639に対するアクセスは、システムオンチップ2630の直列スキャンパスから直列的に制御される。この実施形態では、システムオンチップ2630は、(例えば、直列レジスタ2631および並列レジスタ2634を「交番」としてラベル付けすることによって)2分法を広告することになる。かかる実施形態では、テストシステムは、並列インターフェースがアクティブであるとき、直列レジスタ2631がコア2639に何の影響も及ぼさない(すなわち、直列レジスタ2631は効果的に「デッドストレージ(deard storage)」である)ことを知っている。多くのレジスタが同じ並列ポートを共有し得るという点で、この規則は結合的(associative)である。
図27は、並列ポートとシステムオンチップのコアとの間の例示的な接続のハイレベルブロック図を示す。図27に示されるように、直列レジスタ、および並列アクセスをシステムオンチップのコアに提供する並列レジスタは、同じフリップフロップを共有し、したがって、並列アクセスをシステムオンチップのコアに提供するために求められるリソースを最小限に抑える。詳細には、接続2700は、イネーブルレジスタ2732と、複数のデータレジスタ27311〜27318(集合的に、データレジスタ2731)と、複数の共有アクセスポート27331〜27338(集合的に、共有アクセスポート2733)とを利用する。
図27に示されるように、イネーブルレジスタ2732のデータ入力は、TDI入力であり、イネーブルレジスタ2732のデータ出力は、第1の共有アクセスポート27331の入力のうちの1つであり、第1の共有アクセスポート27331のデータ出力は、第1のデータレジスタ27311のデータ入力であり、第1のデータレジスタ27311の第1のデータ出力は、第2の共有アクセスポート27332の入力のうちの1つであり、第2の共有アクセスポート27332のデータ出力は、第2のデータレジスタ27312のデータ入力であり、第2のデータレジスタ27312の第1のデータ出力は、第3の共有アクセスポート27333の入力のうちの1つであり、第3の共有アクセスポート27333のデータ出力は、第3のデータレジスタ27313のデータ入力であり、第8のデータレジスタ27318の第1のデータ出力がTDO出力であるまで、以下同様である。
図27にさらに示されるように、共有アクセスポート2733のそれぞれは、(スキャンパス内の先のレジスタのデータ出力に結合されているのに加えて)第2のデータ入力を含む。共有アクセスポート27331〜27338の第2のデータ入力は、それぞれ、(本明細書において、並列入力接続として示される)外部並列ポート2720から、それぞれのデータ入力に結合される。したがって、それぞれの共有アクセスポート2733は、その2つのデータ入力のうちの1つからデータを選択する(すなわち、直列スキャンパス内の先のレジスタからのデータ入力、またはその共有アクセスポート2733に接続された外部並列ポート2720の並列入力接続のうちの1つからのデータ入力を選択する)。
図27に示されるように、イネーブルレジスタ2732の出力は、それぞれの共有アクセスポート2733に関する入力選択信号として、それぞれの共有アクセスポート2733に適用され、それによって、それぞれの共有アクセスポート2733によるデータの選択を制御する。
イネーブルレジスタ2732の値が、(TAPポート2710からの)直列データがコア2739に提供されるべきであることを示す場合、イネーブルレジスタ2732からそれぞれの共有アクセスポート2733に提供される入力選択信号は、(外部並列ポート2720から共有アクセスポートに接続された並列入力接続からではなく)スキャンパス内の先のレジスタから入力を選択するようにそれぞれの共有アクセスポート2733を導く。
この場合、共有アクセスポート27331は、(外部並列ポート2720の並列入力接続からではなく)イネーブルレジスタ2732から入力を選択し、それによって、イネーブルレジスタ2732の値を第1のデータレジスタ27311内に読み取らせる(かつ、したがって、コア2739に提供させる)。同様に、この場合、共有アクセスポート27332は、(外部並列ポート2720の並列入力接続からではなく)第1のデータレジスタ27311から入力を選択し、それによって、第1のデータレジスタ27311の値を第2のデータレジスタ27312内に読み取らせる(かつ、したがって、コア2739に提供させる)。すなわち、残りのデータ遷移の記述は分かりやくするために省略されるが、データレジスタ2731のその他のデータレジスタによる類似のデータ遷移は、直列データがコア2739に提供されることを可能にする。
イネーブルレジスタ2732の値が(外部並列ポート2720からの)並列データがコア2739に提供されるべきであることを示す場合、イネーブルレジスタ2732からそれぞれの共有アクセスポート2733に提供された入力選択信号は、(スキャンパス内の先のレジスタからではなく)外部並列ポート2720から共有アクセスポートに接続された並列入力接続から入力を選択するようにそれぞれの共有アクセスポート2733を導く。
この場合、共有アクセスポート27331は、(イネーブルレジスタ2732からではなく)共有アクセスポート27331に接続された外部並列ポート2720の並列入力接続から入力を選択し、それによって、外部並列ポート2720のその並列入力接続からの値を第1のデータレジスタ27311内に読み取らせる(かつ、したがって、コア2739に提供させる)。同様に、この場合、共有アクセスポート27332は、(第1のデータレジスタ27311からではなく)共有アクセスポート27332に接続された外部並列ポート2720の並列入力接続から入力を選択し、それによって、外部並列ポート2720のその並列入力接続からの値を第2のデータレジスタ27312内に読み取らせる(かつ、したがって、コア2739に提供させる)。すなわち、残りのデータ遷移の記述は分かりやすくするために省略されるが、データレジスタ2731のその他のデータレジスタによる類似のデータ遷移は、並列データがコア2739に提供されることを可能にする。
さらに、接続2700の直接NSDL記述は非常に複雑であろうが、このタイプの接続は、図26に関して示され、かつ説明された接続2600に機能的に相当する点に留意されたい。接続2600および2700において、直列データがコアに達するかまたは並列データがコアに達するかを決定するのは、「選択」スライスの値である。接続2600と接続2700との間の唯一の違いは、期待される値にある。すなわち、接続2700において、レジスタは共有され、したがって、並列アクセスの場合、直列データは上書きされるため、期待されることになる値は並列値である。
本明細書において、(分かりやすくするために)1つの並列ポートを有するシステムオンチップに並列アクセスを提供することに関して主に示され、かつ説明されるが、並列アクセスは、複数の並列ポートを有するシステムオンチップに提供されることが可能である。同様に、本明細書において、(分かりやすくするために)1つの並列スライスを有するシステムオンチップに並列アクセスを提供することに関して主に示され、かつ説明されるが、並列アクセスは、複数の並列スライスを有するシステムオンチップに提供されることが可能である。
かかる実施形態では、複数の並列ポートは、いかなるようにも識別され得る。例えば、複数の並列ポートは、(例えば、クロスロードデバイスに関して説明されたように)順序数を使用して識別されることが可能である。例えば、n個の並列入力およびm個の並列出力を有するシステムオンチップは、以下のポートを有することになる。すなわち、「parallel_in_<i>」、i=0,1,...,n−1、「parallel_out_<k>」、k=0,1,...m−1である。さらに、それぞれの並列ポートは、そのそれぞれがいかなるようにも(例えば、「get_parallel_data_parallel_in_0」、「set_scan_synchro_parallel_out_3」など、末尾に付けられた、対応するポート名を使用することによって)識別され得る、その独自の(1つまたは複数の)機能を有することになる。
対照的に、並列スライスのそれぞれの名前が、それらのスライスが並列スライスであることを示す限り(例えば、名前は「parallel_」で始まることが可能である)、複数の並列スライスの名前付けに関する制限は存在しない。「send_parallel_data」および「get_parallel_data」がスライス名をパラメータとして解釈する一実施形態では、任意のポートを任意の並列レジスタと接続することが可能である。「send_parallel_data」および「get_parallel_data」がスライス名をパラメータとして解釈しないもう1つの実施形態では、システムオンチップは、それぞれのポートが1つまたは複数の並列スライスにどのように「接続する」かを正確に宣言することが可能である。
並列インターフェースのNSDL記述は、スキャンパスおよびその関連機能の記述を含む。NSDL記述は、並列インターフェースが接続する実際の物理ポート(並列ピン)を示す。これは、(例えば、BSDLがTAP信号を識別するように)トップレベルファイル内の伝統的なBSDL/HSDL規則によって処理されることが可能である。並列通信プロトコルの実現は、並列インターフェースドライバに委ねられる。テストシステムは、どの並列ピンがどの並列インターフェースドライバによって制御されるかを告げられる。
本明細書において、並列ポートに関する入力データフローに関して主に示され、かつ説明されるが、並列ポートに関する出力データフローは対称的になる。すなわち、(図24〜図27に関して示され、かつ説明されるように)システムオンチップに対する入力データフローに関して実装され得る入力接続タイプのそれぞれについて、システムオンチップからの出力データフローに関して、対応する対称的な出力接続タイプが実装されることが可能である。
本明細書において、並列アクセスインターフェースの内部並列ポートとシステムオンチップの並列ポートとの間の簡単な内部接続をサポートしている並列アクセスインターフェースに関して主に示され、かつ説明されるが、並列アクセスインターフェースは、並列アクセスインターフェースの内部並列ポートとシステムオンチップの並列ポートとの間のより複雑な内部接続をサポートすることが可能である。このように、NSDLは、その複雑さにかかわらず、いかなるテストアクセス機構(TAM)も記述することが可能である。
一実施形態では、並列アクセスインターフェースの内部並列ポートとシステムオンチップの並列ポートとの間の内部接続は、1つまたは複数のクロスロードデバイスを使用して提供されることが可能である。1つのかかる実施形態では、直列スキャンパスから、または並列ポートから内部接続を処理するために、選択機能および選択解除機能が使用され得る。
もう1つの実施形態では、並列アクセスインターフェースの内部並列ポートとシステムオンチップの並列ポートとの間の内部接続は、ファンイン/ファンアウト方式を使用して提供されることが可能である。かかる実施形態では、複数のシステムオンチップデバイスを駆動させるために並列ポートのビットが使用され得る(すなわち、外部並列ポートの帯域幅は、内部並列ポートによって、複数のシステムオンチップデバイス間で共有される)。
したがって、本明細書において、並列アクセスを1つのシステムオンチップデバイスに提供する並列アクセスインターフェースに関して主に示され、かつ説明されるが、その他の実施形態では、並列アクセスインターフェースは、並列アクセスを複数のシステムオンチップデバイスに提供することが可能である。かかる並列アクセスインターフェースの一般的な接続方式は、図28に関して示され、かつ説明される。
図28は、並列アクセスインターフェースの内部接続方式のハイレベルブロック図を示す。詳細には、内部接続方式2800は、並列アクセスインターフェース2810を3つのシステムオンチップ28201〜28203(集合的に、システムオンチップ2820)に提供する。並列アクセスインターフェース2810は、内部並列ポート2811と、外部並列ポート2812と、内部インターフェース2813とを含む。外部並列ポート2812および内部並列ポート2811は、テストシステムからシステムオンチップ2820へのn個の入力接続と、システムオンチップ2820からテストシステムへのm個の出力接続とをサポートする。
図28に示されるように、それぞれのシステムオンチップ2820は、並列入力接続および並列出力接続をサポートしている並列ポートを含む。並列アクセスインターフェース2810の内部ポートは、以下をサポートする。すなわち、(1)システムオンチップ2820のそれぞれに対する入力データフローのファンアウト、および(2)システムオンチップ2820のそれぞれからの出力データフローのファンアウトである。外部並列ポート2812のn個の入力接続は、システムオンチップ28201に対するi個の入力接続、システムオンチップ28202に対するj個の入力接続、およびシステムオンチップ28203に対するk個の入力接続にファンアウトする(すなわち、n=i+j+k)。外部並列ポート2812のm個の出力接続は、システムオンチップ28201からのp個の出力接続、システムオンチップ28202からのq個の出力接続、およびシステムオンチップ28203からのr個の出力接続からファンインする(すなわち、m=p+q+r)。
したがって、NSDL記述言語を使用すると、いかなる複雑さのシステムオンチップデバイスも容易に記述されることが可能である。構成要素(例えば、IP、計器、クロスロードデバイスなど)、構成要素同士の間の相互接続など、ならびにそれらの様々な組合せを含めて、システムオンチップデバイスの任意のテストリソースが記述されることが可能である。NSDLでは、システムオンチップのテストリソースの記述は、アルゴリズム記述であり、この場合、それぞれのアルゴリズム記述は、テストツールによって理解されているように適合されたフォーマットで定義された1つまたは複数の構成規則を含む。
図29は、システムオンチップのテストリソースを記述するための方法を示す。直列的に実行されているとして示され、かつ説明されるが、図29の方法2900のステップの少なくとも一部は、同時に、または、図29に関して示され、かつ説明されたのとは別の順序で実行されることが可能である。方法2900は、ステップ2902で始まり、ステップ2904に進む。
ステップ2904において、システムオンチップのそれぞれの構成要素のアルゴリズム記述が生成される。
それぞれの構成要素のアルゴリズム記述は、その構成要素によってサポートされる少なくとも1つの機能のその構成要素に関する少なくとも1個のレジスタへのマッピングを記述する。それぞれの構成要素のアルゴリズム記述は、その構成要素の内部スキャンパスを記述する。
一実施形態では、システムオンチップの構成要素のアルゴリズム記述は、その構成要素によってサポートされた少なくとも1つの機能を識別するステップと、少なくとも1つの機能のそれぞれに関して、その構成要素の少なくとも1個のレジスタに関する少なくとも1つのレジスタ値への機能のマッピングを定義する構成要素のアルゴリズム記述を生成するステップと、構成要素のアルゴリズム記述を格納するステップとによって生成される。
ステップ2906において、システムオンチップの構成要素同士の間の相互接続のアルゴリズム記述が生成される。構成要素同士の間の相互接続のアルゴリズム記述は、システムオンチップのシステムレベルのトポロジを指定する。
ステップ2908において、システムオンチップのアルゴリズム記述は、構成要素のアルゴリズム記述と、構成要素同士の間の相互接続のアルゴリズム記述とを使用して生成される。
システムオンチップのアルゴリズム記述は、そこからシステムオンチップのスキャンパスの記述が構成され得る、システムオンチップのトポロジを記述する。
ステップ2910において、システムオンチップのアルゴリズム記述が格納される。構成要素のそれぞれの個々のアルゴリズム記述が格納され得る。構成要素同士の間の相互接続のアルゴリズム記述が格納される。アルゴリズム記述は、いかなるようにも格納され得る。ステップ2912において、方法2900は終了する。
アルゴリズム記述は、システムオンチップをテストする際に使用するためのテストツールによって理解されているように適合される。したがって、アルゴリズム記述は、様々なテスト(例えば、構成要素レベルのテスト、システムレベルのテストなど、ならびにそれらの様々な組合せ)を実行するために、(例えば、メモリから、別のシステムから、またはかかる記述の任意のその他のソースから)プロセッサによって受信されることが可能である。
本明細書で説明されるように、一実施形態では、NSDL言語は、VHDLを使用して実装されることが可能である。1つのかかる実施形態では、NSDLに関する文法的な規則は、文脈上のバッカス正規形(BNF)文法によって形式化され得る。例えば、BNFは、以下の例にあるように、構文構造の生成を容易に記述する。
<entity_declaration> ::=
ENTITY <identifier> IS
<entity_header>
<entity_declarative_part>
[BEGIN
<entity_statement_part> ]
END [ENTITY] [ <entity_simple_name> ] ;
この例では、記号「::=」は、左側要素が右側構成物内に誘導され得ることを示す。右側は、より多くの派生語彙素(derivations lexemes)によって構成されることが可能である(大文字で示される原子要素はもはや誘導可能ではない)。ノードは派生点であり、一方、葉は、もはや誘導され得ないノードである(すなわち、右側は、語彙素だけを含む)。角括弧「[」および「]」は、オプションの派生を表現するために使用される(これらの角括弧は、反復規則を定義するのに有用である)。記号「<」および「>」は、さらなる誘導を示すために使用される。引用符は、VHDL規則とコヒーレントに、列を示すために使用される。
このタイプの構文は、構造的に言語に一致するいずれかの可能な「語句」を生成することが可能であり、所与のテキストがその言語に属する(すなわち、所与のテキストが規則に従う)かどうかを検証するために使用されることが可能である。このタイプの構文は、構造記述に過ぎず、その「意味」に関する何らの情報を伝えることはできず、むしろ、その文脈上の情報を処理するための諸属性が加えられなければならない。
Left_hand ↑(H)↓(L) ::= right_hand_0 ↑(HO)↓(LO) [right_hand_1↑(H1)↓(L1)],
式中、
↑(L)は、下位レベルの派生から誘導されて、上位レベルの派生に送信される情報を示す。
↓(H)は、上位レベルの派生から誘導されて、下位レベルの派生に送信される情報を示す。
それぞれのノードは、H0...Hnから始めて、Hがどのように演算されるか、およびLから始めて、異なるL0...Lnがどのように取得されるかを定義するための規則のセットを定義する。
それぞれのレベルは、言語の「意味」を有するために、その語句に関して、H、L、Hi、およびLiに関する条件のセットを定義することが可能である。
([1]から[14]と番号付けられた)以下の規則は、IPおよび計器の宣言を記述する。:
[1] <IP_declaration> ↑(H,n)↑(P_info)↑(Ext)↑(Cross)↑(Par)::=
IP <identifier> IS
<device_header> ↑(Ext)↑(Cross_decl)↑(Par)
BEGIN
<IP_instrument_archi_body>↑(H,n)↓(Ext)↑(P_info)
↑(Sel_Cross)↑(Par_dec)
END [IP] [<device_simple_name>] ;
Rule: Cross=Cross_decl∪Sel_Cross
Cross_decl/=φである場合、それぞれの「有線」要素に関して「選択」文/「選択解除」文、およびそれぞれの「トランザクション」要素に関して少なくとも「選択」が存在することを確認する。
NB: Cross_decl = φ ⇔ Sel_Cross =φ,そうでない場合は、エラー
「architecture_body」内のすべてのモジュール間依存が解決されていることを確認する。
Par/=φである場合、(H,n)内に、少なくとも1つの並列レジスタが存在すること、および(P_info)内に、対応する「get_parallel_data」/「send_parallel_data」の宣言が存在することを確認する。
Par_dec/=φである場合、Par内の情報(ポート名、並行レジスタ、接続、ファニング(funning)など)とのその整合性を確認する。
NB: Par_decl =φ ⇔ Par =φ,そうでない場合は、エラー
[2] <instrument_declaration>↑(H,n)↑(P_info)↑(Ext)↑(Cross)↑(Par)::=
INSTRUMENT <identifier> IS
<device_header> ↑(Ext)↑(Cross_decl)↑(Par)
↑(Cross_decl)
BEGIN
<IP_instrument_archi_body>↑(H,n)↓(Ext)↑(P_info)
↑(Sel_Cross)↑(Par_dec)
END [instrument] [device_simple_name];
Rule: Cross=Cross_decl∪Sel_Cross [Same as rule 1]
[3] <IP_instrument_archi_body>↑(P_info)↓(Ext)↑(Sel_Cross)↑(Par_dec) ::=
ARCHITECTURE < architecture_simple_name > OF <entity_name> IS
architecture_declarative_part
BEGIN
<IP_instr_stat_part>↑(H,n)↑(P_info)↓(Ext)↑(Sel_Cross)↑(Par_dec)
END [ARCHITECTURE] [<architecture_simple_name> ] ;
[4] <IP instr_stat_part>↑(H,n)↑(P_info)↓(Ext)↑(Sel_Cross)↑(Par_dec) ::=
<intemal_scan_path>↑(H,n)
[<parallel_declarations>↑(Par_dec)]
<IP_instrument_statement_part>↓(Ext)↑(P_info)↑(Sel_Cross)
[5] <device_header>↑(Ext)↑(Cross_decl)↑(Par) ::=
GENERIC(
[<crossroad_information>↑(Cross_decl)]
[; <parallel_information>↑(Par)]
[; <external_dependencies>↑(Ext)]);
この規則は、スキャンパスとのリンクの定義および最終的な外部参照の宣言を可能にする。
NB。<crossroad_information>は規則[10]から誘導される。
[6] <external_dependencies>↑(Ext) ::=
<external_reference>↑(New_Ext)[;<external_dependencies>↑(Old_Ext)]
Rule: Ext= New_Ext ∪ Old_Ext
[7] <external_reference> ↑(Ext)::= <string_identifier> : string
Rule:↑(Ext)= string_identifier
これらの記入項のそれぞれは、外部要素に関する記号名を定義する。この記号は、外部機能依存に関してこの要素を参照するために使用されることになる。
[8] IP_instrument_statement_part↓(Ext)↑(P_info)::=
<proc_func_list>↓(Ext)↑(P_use)↑(Sel_Cross)
[TEST_SET <proc_func_list>↓(Ext)↑(P_test) END TEST_SET;]
この規則は、計器の使用に関する必須の手順のセット、およびオプションのテスト手順セットを記述する。P_Info=P_Test∪P_use
[9] <internal_scan_path>↑(H,n) ::=
<component_instantiation_statement> [<internal_scan_path>]
「部分的なアクセス」または「完全なアクセス」の場合、スキャンパスは、その構成要素の直接的なインスタンスの作成によって記述される((H,n)の文脈上の規則に関する規則[37]〜[41]を参照されたい)。この規則は、計器およびIPの入れ子構造を可能にする点に留意されたい。「アクセスなし」デバイスは、この派生の欠如によって識別される。
[10] <crossroad_information>↑(Cross)::=
PRECEDENT : STRING := "TDI";
FOLLOWING :STRING:= "TDO"
[<tributaries>↑(Affls)]
[<affluents>↑(Tribs)]
;
Rule: Cross = Affls ∪ Tribs
[11] <tributaries>↑(Tribs) ::=
TRIBUTARY : STRING := "deselected";
|<numbered_tributaries>↑(num_tribs);
Rule: Tribs = "tributary"
|Tribs = num_tribs
[12] <numbered_tributaries>↑(Tribs) ::=
TRIBUTARY_<numeral> : STRING := "deselected"
[; <numbered_tributaries>↑(Old_Tribs)]
Rule: Tribs = "tributary_<numeral>" ∪ Old_tribs
[13] <affluents>↑(Affls)::=
AFFLUENT : STRING := "deselected";
|<numbered_affluents>↑(num_affls) ;
Rule: Affls = "affluent"
|Affls = num_affls
[14] <numbered_affluents>↑(Affls)::=
AFFLUENT_<numeral> : STRING := "deselected"
[; <numbered_affluents>↑(Old_Affls)]
Rule: Affls = "affluent_<numeral>" ∪ Old_Affls
規則[1]〜[14]のこの計器定義およびIP定義 は、(伝統的なVHDL構成要素の場合に行われるように)何度もIP/計器のインスタンスを作成することを可能にする。これは規則[15]に示される。
[15] component_instantiation_statement ::=
instantiation label :
instantiated unit
[generic map aspect]
[port map aspect] ;
構文の観点から、このインスタンスの作成規則(規則[15])は、伝統的なVHDLにおけるのと全く同じである。すべての新規性は、文脈側にある。
(1) インスタンスの作成は、スキャンパス内へのデバイスの複写を作成する。コンパイラは、コンパイルライブラリからその情報を容易に取り出して、システムスキャンパスを完了するために、それらの情報を使用することが可能である。
(2)汎用マップは、正確なスキャンパス挿入点(「先行部分」、「後続部分」、アフルエントおよびトリビュタリ)の指定を処理する。
(3)その他の汎用マッピングは、外部要素の記号名を実際の記号名(すなわち、対応するインスタンスのラベル)に分解することになる。テストツールは、参照された手順が、インスタンスが作成された要素内に実際に存在することを確認しなければならないことにもなる。
([16]から[33]と番号付けられた)以下の規則は、例示的な手順を記述する。
[16] <proc_func_list>↓(Ext)↑(P_info) ::=
[<proc_func_proto_list>]<complete_proc_func_list>↓(Ext)↑(P_info)
[17] <proc_func_proto_list> ::=
<proc_func_prototype> [;<proc_func_proto_list>]
[18] <proc_func_prototype> ::= <procedure_prototype>|
<function_prototype>
[19] <procedure_prototype> ::=
procedure <procedure_name> (<formal_parameter_list>)
[DEPENDENCIES (<dep_list>);]
LENGTH (<(length_descriptor>);
BUSY_MODE ( <mode_identifier>);
[CONNECTION <connection_type>;]
規則。手順のプロトタイプは、人間のユーザにとって、コードをより読みやすくするための単なる構文技術である。これらの手順のプロトタイプは、文脈上の情報を運ばない。
NB。「接続」派生は、選択手順に関してだけ可能にされる。
[20] <function_prototype> ::=
FUNCTION <procedure_name> (<formal_parameter_list>)
[DEPENDENCIES (<dep_list>);]
LENGTH (<length_descriptor>);
BUSY_MODE ( <mode_identifier>);
[<optional_attributes>]
RETURN <type> ;
規則。手順プロトタイプは、人間のユーザにとって、コードをより読みやすくするための単なる構文技術である。これらの手順のプロトタイプは、文脈上の情報を運ばない。
NB。「接続」派生は、選択手順に関してだけ可能にされる。
[21]<formal_parameter_list>
規則。パラメータは、通常のVHDLパラメータの構文に従う。スキャンパススライスの参照は、明示的な名前付けによって行われることになる。
[22] <complete_proc func_list>↓(Ext)↑(P_info)↑(Cross) ::=
<complete_procedure>↓(Ext)↑(new_P)↑(Cross_Info)
[;<complete_proc_func_list>↓(Ext)↑(OldP)↑(Old_Cross)]
<complete_function>↓(Ext)↑(new_P)
[;<complete_proc_func_list>↓(Ext)↑(OldP)]
Rule: P_info=Old_P ∪ New_P
Cross=Old_Cross ∪ Cross_info
[23] <complete_procedure>↓(Ext)↑(Proc_info)↑(Cross_info)::=
PROCEDURE <procedure_name↑(Sel_info)>
(<formal_parameter_list>↑(P))
[DEPENDENCIES (<dep_list>)↓(Ext)↑(D);]
LENGTH (<length_descriptor>↑(L));
BUSY_MODE (<mode_identifier>)↑(M);
[CONNECTION <connection_type>↑(C_type);]
IS
begin
<procedure_body>
END <procedure_name>;
Rule:
P=パラメータ情報(標準のVHDL)。少なくとも1つのパラメータがスライスまたは静的ビットストリームを参照すべきである。
L=手順の長さ情報
D=依存情報
M=ビジーモード情報
<procedure_name>はリテラル識別子である
通常のVHDLにおけるような<procedure_body>派生
Proc_info=P ∪L ∪D ∪M
Cross_info=Sel_info/=φ(Sel[1]〜Sel[6]における名前付け規則)である場合、Cross_info=Sel_info∪C_type
NB: Sel_info= φ⇔ C_type=φそうでない場合は、エラー
[24] <complete_function>↓(Ext)↑(Proc_info)::=
FUNCTION <function_name> (<formal_parameter_list>↑(P))
[DEPENDENCIES (<dep_list>)↓(Ext)↑(D);]
LENGTH (<length_descriptor>↑(L));
BUSY_MODE (<mode_identifier>)↑(M);
RETURN <type> IS
BEGIN
< function_body>
END < function_name>;
Rule:
P=パラメータ情報(標準のVHDL)。少なくとも1つのパラメータがスライスまたは静的ビットストリームを参照すべきである。
L=手順の長さ情報
D=依存情報
M=ビジーモード情報
<function_name>はリテラル識別子である
通常のVHDLにおけるような<function_body>派生
Proc_info=P∪L ∪D ∪M
[25] <dep_list>↓(Ext)↑D_new) ::=
<dependence>↓(Ext)↑(D)[;dep_list↓(Ext)↑(D_old)]
Rule: D_new= D_old ∪ D or D_new=D
[26] <dependence>↓(Ext)↑(D) ::= <string_identifier>↑(P)|
<string_identifier>↑(E).<string_identifier>↑(P)
Rule:
P=付随手順の名前
E=外部デバイスPの名前がCheck E∈Ext内で定義される、そうでない場合は、エラー
D=P ∪ E
[27] <mode_identifier>↑(M) ::= HOLD|DONT_CARE
規則。M=「hold」または「dont_care」
[28] <length_descriptor>↑(L) ::= <length_exp>↑(T) [: <end_cond>↑(C)]
Rule: L=T∪C
[29] < length_exp >↑(T) ::= <time_exp>↑(T)|
<time_exp>↑(L),<time_exp>↑(A),<time_exp>↑(U)
規則。T=TまたはL∪A∪U
L=関数の長さに関する下限
A=平均的な関数の長さ
U=関数の長さに関する上限
[30] < time_exp >↑(T) ::= <numeral> <time_type>|<numeral>
規則。(時間単位が指定されない場合)Tは、絶対時間またはクロックカウントを含む
[31] < end_cond >↑(C) ::= <boolean_expression>
規則。ブール表現は、手順の終了条件を示す。明示的な名前付けによって識別されたスライスからの信号を使用すべきである。
[32] <connection_type> ::= WIRED | TRANSACTION
[33] <optional_attributes> ::=
規則。この派生は、目的別に開放されたままである。オプションのパラメータを定義することによって、任意の2人の関係者は、標準化時間に任意に選択されたフォーマットの代わりに、それらの関係者が好むフォーマットで情報を交換することが可能になる。これは、例えば、電力管理に関する切替動作の推定を提示するために、またはジュール/ワットを直接提示するために使用され得る。テストツールは、そのテストツールが実装しない派生を無視することになり、最終的に、警告を作成する。
本明細書で説明されるように、選択手順は、その名前によって識別される。(Sel[1]からSel[6]と番号付けされた)以下の規則は、選択手順の名前付けの制御を、BNFのような構文で説明する。図8、図、9、および図10に関して本明細書で示され、かつ説明された例示的なクロスロードデバイスは、これらの規則の例示的な適用を示す。
sel[1] <procedure_name> ↑(Sel_info) :: =
<radix>[<extentions>↑(Affls)↑(Tribs)]
Rule : Sel_info=(Affls) ∪ (Tribs)
sel[2] <radix> ::= SELECT | DESELECT
sel[3] <extensions> ::=
<affluents↑(AffIs)> | <tributaries↑(Tribs)>
sel[4] <affluents↑(Affls)> ::= AFFLUENT
|<numbered_affluents↑(Nmb_Affls)>|
φ
Rule : if (affluent) Affls="All";
if (numbered_affluents) Affls= Nmb_Affls
if (φ) Affls=φ;
説明。この規則は、機能が命令するアフルエントを検出する。これは、なし(すなわち、規則は空のセットとして終了する)であってよく、すべてのアフルエント(指定されない)であってよく、または単なるサブセット(1つまたは複数のaffluent_<nmb>)であってもよい。
sel[5] <numbered_affluents↑(New_Affls)> ::=
AFFLUENT_<nmb>[;< numbered_affluents↑(Old_Affls)>]
規則。<nmb>は、任意の自然数であってよい。
New_Affls= Old_Affls∪afflunent_<nmb>;
sel[6] <tributariess↑(Tribs)> ::= TRIBUTARY
|<numbered_tributaries↑(Nmb_Tribs)>|
φ
Rule : if (tributary) Tribs=" All";
if (numbered_ tributaries) Tribs= Nmb_Tribs
if (φ) Tribs=φ;
説明。この規則は、機能が命令するトリビュタリを検出する。これは、なし(すなわち、規則は空のセットとして終了する)であってよく、すべてのトリビュタリ(指定されない)であってよく、または単なるサブセット(1つまたは複数のtributary_<nmb>)であってもよい。
自動テスト生成ツールによって使用されることになる選択手順の場合、自動テスト生成ツールが、それらをどのように処理するかを知るように、標準化された引数の必要も存在する。実際の選択アルゴリズムに従って、派生を参照する2つの様式が存在し得る。すなわち、(1)すなわち、「列」または均等のタイプを使用して、明示的な名前付けによって、(2)すなわち、良好な大きさのstd_logic_vectorを使用して、派生の順序数によって、である。
引数は、派生に続いて、(選択規則Sel[1]〜Sel[6]から判断される)手順制御を変更することになる。以下のプロトタイプは、最も一般的な事例と相対的である(NB。この例は「選択」であるが、当然、同じ規則は「選択解除」にも有効である)。
1) select(tributary_nmb : in std_logic_vector,
affluent_nmb : in std_logic_vector)
2) select(tributary_name : in string,
affluent_name : in string)
自動テスト生成ツールは、対応する名前/数を正に記入しなければならないことになる。より正確な選択機能の場合、引数のうちのいくつか(例えば、名前自体がすでに目標を単一義に識別している場合(例えば、図8のSIB)、最終的になくなる、図9の階層切替デバイスの選択解除機能)だけが使用される必要がある。
以下の規則(規則[34]から「41」)は、VHDL93に基づき、かつVHDL93と互換性があるが、感覚的により簡単である。NSDLに直接関係しないすべての派生は、除去されている。規則[34]から「39」は、本明細書において、新しい文脈規則を記述するためだけに示される伝統的なVHDL構文規則である点に留意されたい。
[34] library_unit ::=
primary_unit
|secondary_unit
[35] primary_unit↑(H,n)↑(P_info)↑(Cross)↑(Par)::=
entity_declaration↑(H,n)
|configuration_declaration
|package_declaration
|IP_declaration↑(H,n)↑(P_info)↑(Ext)↑(Cross)↑(Par)
|Instrument_declaration↑(H,n)↑(P_info)↑(Ext)↑(Cross)↑(Par)
注記。これは、NSDLがVHDLと統合し、IPおよび計器を最上位のエンティティとして定義することを可能にする規則である。これはまた、テストツールが、その情報が(H,n)、(P_info)、(Cross)、および(Par)の中に格納される階層的な解析を完了するポイントでもある。
規則。Ext=φ、そうでない場合は、エラー(すなわち、トップモジュール)
[36] secondary_unit ::=
architecture_body
|package_body
[37] entity_declaration ↑(H,n)::=
ENTITY <identifier> IS
entity_header
entity_declarative_part
[ BEGIN
architecture_ body↑(H,n)]
END [ entity ] [ entity_simple_name];
規則。この規則は、インスタンスの作成時にコンパイラによって使用されることになる、定義されたエンティティのスキャンパス内部を記述する。この規則は、スキャンパスを有するが、機能/手順のセットは有さないP1687非準拠エンティティを記述するために使用されることが可能である。エンティティは、依然として、伝統的なVHDLにおけるような状態にとどまり、したがって、エンティティは、外部依存を許可しない点に留意されたい。
[38] architecture_body↑(H,n) ::=
ARCHITECTURE <architecture_simple_name> OF entity_name IS
architecture_declarative_part
BEGIN
architecture_statement_part↑(H,n)↑(P,F)
END [ architecture ] [ <architecture_simple_name> ] ;
規則。(P,F)によって定義されたスキャンチェーンの整合性(TDIで始まる、TDOで終わる、ホールなし、階層から線形に離れるなど)を確認する。
[39] architecture_statement_part↑(H,n)↑(P,F)::=
[component_instantiation_statement↑(Hi,ni)↑(P,F)i]
Rule:
H= ∪ Hi + (H_in, H_out)i
(P,F)= ∪ (P,F)i,
n=Σini
[40] <scan_path>↑(SP_info) ::=
<component_instantiation_statement>↑(C_info)
[<scan_path>↑(S_old)]
規則。この規則は、規則の開発をスキャンチェーン関連のセルのインスタンスに制限する、同時処理文についてのVHDL規則に関する文脈確認として解釈されることも可能である。
SP_info=S_old∪C_info
C_info内のPおよびFを使用して、スキャンパスの整合性に関して確認する。
[41] component_instantiation_statement ↑(C_info)::=
instantiation_label:
instantiated_unit↑(H,n)↑(P,F[,H_in, H_out])
[ generic_map_aspect ]
[ port_map_aspect];
規則。データベース内の「instantiated_unit」から解釈されるn(セルの数)、H(階層情報)、P(先の部分)、F(後続部分)、(H,n)
制御セルによって導入されたH_in階層化スキャンパス、H_out階層化スキャンパス
C_info=(H,n)∪(P,F[H_in,H_out])
([42]から[57]と番号付けされた)以下の規則は、並列アクセスに関する例示的な形式規則を含む。
[42]<parallel_information> ↑(Par)::=
[ <parallel_ inputs> ↑(par_in)]
[ <parallel_outputs>↑(par_out) ]
;
Rule: Par = par_in ∪ par_out
[43]<parallel_declarations>↑(Par_dec) ::=
[<parallel_connection> ↑(par_connection)]
[<alternates>↑(alter_info)]
[<fanning>↑(fanning_info)]
Rule: Par_dec = par_connection・fanning_info・after_info
[44]<parallel_inputs>↑(par_in) ::=
<single_parallel_input>↑(idf)
|<numbered_par_ inputs>↑(par_ins) ;
Rule: par_in = idf
|par_in = par_ins
[45] <single_parallel_input>↑(idf)::=
PARALLEL_IN : STRING := "deselected" ;
Rule: idf = "parallel_in"
[46] <numbered_par_inputs>↑(par_in) ::=
<numbered_par_input>↑(idf)
[; <numbered_par_inputs>↑(par_ins)]
Rule: par_in = idf ∪ par_ins
[47] <numbered_par_input>↑(idf)::=
PARALLEL_IN_<numeral> : STRING := "deselected"
Rule: idf = "parallel_in_<numeral>"
[48] <parallel_outputs> ↑(par_out)::=
<single_parallel_output>↑(idf)
|<numbered_par_outputs>↑(par_outs);
Rule: par_out = idf
|par_out = par_outs
[49] <single_parallel_output>↑(idf)::=
PARALLEL_OUT: STRING := "deselected";
Rule: idf = "parallel_out"
[50] <numbered_par_outputs>↑(par_outs)::=
<numbered_par_output>↑(idf)
[; <numbered_par_outputs>↑(old_par_outs)]
Rule: par_outs = idf ∪old_par_outs
[51] <numbered_par_output>↑(idf) ::=
PARALLEL_OUT_<numeral>:STRING:= "deselected"
Rule: idf = "parallel_out _<numeral>"
[52]<fanning>↑(fanning_info) ::=
<port_name>↑(idf) FAN <provenance>↑(provenance_info);
Rule: fanning_info = idf ∪ provenance_info
[53]<port_name>↑(idf) ::= <single_parallel_output>↑(idf)
|<numbered_par_outputs>↑(idf)
|<single_parallel_input>↑(idf)
|<numbered_par_inputs>↑(idf)
[54]<provenance>↑(provenance_info) ::=
<port_name>↑(idf)[&<provenance>↑(old_prov)]
規則。provenance_info=old_prov∪idf
NB。「識別子」
この規則は、構成に関して使用される並列ポートに関する何らの制限なしに、(図28に関して示され、かつ説明された)ファンインおよびファンアウトの両方の記述を可能にする。この構成は、ポート全体を使用して、VHDL信号(「&」記号)の連結規則に従って行われる。
[55]<alternates>↑(alter_info) ::=
<serial_reg>↑(idf) IS ALTERNATE OF <alter_regs>↑(idf_list);
Rule: alter_info = idf ∪ idf_list
[56]<register_list>↑(idf_list) ::=
<parallel_reg>↑(idf) [,<register_list>↑(old_idf_list)];
Rule: idf_list = idf ∪ old_idf_list
「parallel_reg」は伝統的なVHDL識別子である
[57]<parallel_connection>↑(par_connection) ::=
<port_name>↑(idf) CONNECTS <register_list>↑(idf_list);
Rule: par_connection = idf ∪ idf_list
本明細書で説明されるように、クロスロードデバイスに類似した形で、並列インターフェースは、主なリソースを識別するために、いくつかの名前付け規則を利用する。名前付けを必要としているこれらの要素は、以下を含む。
並列スライス。並列接続によってアクセスされ得るスライスは、「parallel_」で始まるその名前を有する。接続方式に続いて、これらのスライスは、直列スキャンパスまたは直列スキャンパスの一部から完全に独立し得る。
並列機能。並列リソースに対するアクセスは、2つの特定の機能すなわち、「get_parallel_data」および「send_parallel_data」を介して取得される。
本明細書で説明されるように、並列インターフェースに関して、3つの可能な同期モードが存在する。すなわち、スキャンチェーンとの同期、バースト、および非同期である。一実施形態では、これらのモード同士の間のトグルは、正にクロスロード選択機能に関するように、必要に応じて、ビットストリームがどのように変更されなければならないかを指定する特定の機能によって行われる。これらの機能は以下を含む。
function set_scan_synchro return boolean;
function set_burst(length : in burst_length_type) return boolean;
function set_asynchro return boolean;
function disable_port return boolean;
テストツールは、これらの機能に対する呼を追跡し続けることによって、どのモードがアクティブであるかを容易に知ることが可能である。デバイスは、そのデバイスが実際に実装するモードに関する機能だけを宣言することになる。
タイプ「burst_length_type」は、開発者がそのバーストに関して可能にされた値の範囲を示すことができるように、整数のサブタイプとして並列インターフェースの内部に定義されなければならない。例は以下を含む。すなわち、「subtype burst_length_typeは、整数範囲3から10である」、「type burst_length_typeは(6,8,10)である」などである。この解決策は、それぞれの並列インターフェースが、局所的にだけ有効になり、したがって、最終的なその他のインターフェースを干渉しないことになる、その独自の「burst_length_type」を宣言することになることを意味する。
並列インターフェースが2つ以上のポートを有する一実施形態では、機能が参照するポートの名前が機能名に添付されることになる。例は、「set_scan_synchro_parallel_out_0」、disable_port_parallel_in」などを含む。
前述のBNF規則は、NSDLを実装するのに使用され得る規則の例を単に構成する。本発明は、かかる規則に限定されず、またはかかる規則によって限定されない。
図30は、本明細書で説明された機能を実行する際に使用するのに適した汎用コンピュータのハイレベルブロック図を示す。図30に示されるように、システム3000は、プロセッサ要素3002(例えば、CPU)と、メモリ3004(例えば、ランダムアクセスメモリ(RAM)および/または読出し専用メモリ(ROM))と、テストモジュール3005と、様々な入出力装置3006(例えば、テープドライブ、フロッピードライブ、ハードディスクドライブ、またはコンパクトディスクドライブ、受信機、送信機、スピーカ、ディスプレイ、出力ポート、およびユーザ入力デバイス(キーボード、キーパッド、マウスなど)を含むが、これらに限定されない、記憶デバイス)とを含む。
本発明は、ソフトウェアの形で、かつ/または例えば、特定用途向け集積回路(ASIC)、汎用コンピュータもしくは任意のその他のハードウェア均等物を使用して、ソフトウェアとハードウェアの組合せの形で実装されることが可能である点に留意されたい。一実施形態では、本テストプロセス3005は、メモリ3004内にロードされて、上で議論された機能を実装するために、プロセッサ3002によって実行されることが可能である。したがって、本発明の(関連するデータ構造を含む)テストプロセス3005は、コンピュータ可読媒体またはキャリア、例えば、RAMメモリ、磁気ドライブもしくは磁気ディスケットまたは光ドライブもしくは光ディスケットなどの上に格納されることが可能である。
本明細書において、NSDLを使用して記述およびテストされることが可能なシステムオンチップデバイスの特定の実装形態に関して主に示され、かつ説明されるが、NSDLを使用して、様々なその他のシステムオンチップデバイスが記述およびテストされることが可能である。本明細書において、システムオンチップデバイスを記述およびテストするためにNSDLを使用することに関して主に示され、かつ説明されるが、NSDLを使用して、様々なその他の電子回路が記述およびテストされることが可能である。本発明は、本明細書で示され、かつ説明された特定の電子回路を記述およびテストすることに限定されることが意図されない。
本明細書において、NSDLを使用して、システムオンチップデバイスを記述およびテストするために利用されることが可能なテストシステムの特定の実装形態に関して主に示され、かつ説明されるが、NSDLを使用して、システムオンチップデバイスを記述およびテストするために、テストシステムの様々なその他の実装形態が利用されることが可能である。本発明は、本明細書で示され、かつ説明されるテストシステムの特定の実装形態に限定されることが意図されない。
本明細書において、ソフトウェア方法として議論されたステップのうちのいくつかは、例えば、様々な方法ステップを実行するためにプロセッサと協働する回路として、ハードウェア内で実装されることが可能であることが企図される。本発明の一部は、コンピュータプログラム製品として実装されることが可能であり、コンピュータ命令は、コンピュータによって処理されるとき、本発明の方法および/もしくは技法が起動されるように、またはそうでない場合は、本発明の方法および/もしく技法が提供されるように、コンピュータの動作を適合する。本発明の方法を起動するための命令は、固定媒体内もしくは着脱可能な媒体内に格納され、ブロードキャスト内またはその他の信号保持媒体(signal bearing medium)内でデータストリームを経由して送信され、かつ/あるいは命令に従って動作しているコンピューティングデバイス内のメモリ内に格納されることが可能である。
本発明の教示を組み込む様々な実施形態が本明細書で詳細に示され、かつ説明されているが、当業者は、これらの教示を依然として組み込む、多くのその他の様々な実施形態を容易に考案することが可能である。