(57)【要約】本発明はチップレベルのＪＴＡＧテストに新しいハードウェア記述言語を提供する。新しいＢＳＤＬ（ＮＳＤＬ）と呼ばれるこの新しいハードウェア記述言語はシステムオンチップのテストリソースが記述されることを可能にし、それによって、システムオンチップのテストを円滑にするように、システムオンチップが記述されることを可能にする。本発明はシステムオンチップを記述するためのボトムアップ手法を提供する。本発明は、システムオンチップの構成要素のそれぞれのアルゴリズム記述をサポートし、かつシステムオンチップの構成要素同士の間の相互接続のアルゴリズム記述をサポートし、それによって、システムオンチップ全体のアルゴリズム記述又はシステムオンチップの一部のアルゴリズム記述の生成を可能にする。本発明は、システムオンチップのスキャンパスを動的に修正するように適合された（本明細書において、クロスロードデバイスと呼ばれる）デバイスを記述するための方法と、システムオンチップのテストを実行するために、かかるデバイスを使用するための方法とを含めて、かかるデバイスをサポートする。
2011512568.tif 000002
【特許請求の範囲】
【請求項１】
システムオンチップの構成要素に対するアクセスを制御するように適合されたデバイスを使用して、前記システムオンチップの少なくとも一部をテストするための方法であって、
前記構成要素に対するアクセスを動的に制御するように適合されたアーキテクチャを経由して相互接続された入力接続のセット及び出力接続のセットの記述を受信するステップであって、前記入力接続のセットが、スキャンパス入力接続と、前記システムオンチップの前記構成要素に対する少なくとも１つの構成要素アクセス入力接続とを含み、前記出力接続のセットが、スキャンパス出力接続と、前記システムオンチップの前記構成要素からの少なくとも１つの構成要素アクセス出力接続とを含む、受信するステップ、及び
前記アーキテクチャを経由して相互接続された前記入力接続のセット及び前記出力接続のセットの前記記述を格納するステップ
を備える方法。
【請求項２】
請求項１の方法において、前記アーキテクチャが切替アーキテクチャ、バスアーキテクチャ、及びネットワークアーキテクチャのうちの１つを含む、方法。
【請求項３】
請求項１の方法において、前記アーキテクチャが、前記システムオンチップのシステムスキャンパスを動的に修正するように適合されている、方法。
【請求項４】
前記記述がアルゴリズム記述を含む請求項１の方法。
【請求項５】
請求項１の方法において、前記少なくとも１つの構成要素アクセス入力接続及び前記少なくとも１つの構成要素アクセス出力接続が、前記構成要素を前記システムオンチップのスキャンパスに加えるために動的に選択されているように、かつ前記システムオンチップの前記スキャンパスから前記構成要素を除去するように動的に選択解除されているように適合されている、方法。
【請求項６】
請求項１の方法において、前記少なくとも１つのデバイスが、前記少なくとも１つの構成要素アクセス入力接続及び前記少なくとも１つの構成要素アクセス出力接続を経由して、少なくとも１つのトランザクションを使用して、前記構成要素を前記システムオンチップのスキャンパスに加えるように適合されている、方法。
【請求項７】
請求項１の方法において、前記アーキテクチャが、前記構成要素に対するアクセスを動的に制御するための少なくとも１つの接続をサポートするように適合されている、方法。
【請求項８】
請求項１の方法において、前記スキャンパス入力接続が、前記システムオンチップの入力テストアクセスポートに適用されたテストビットストリームを受信するように適合され、前記スキャンパス出力接続が、前記システムオンチップの出力テストアクセスポートにテストビットストリームを提供するように構成さている、方法。
【請求項９】
システムオンチップの構成要素をテストするための方法であって、前記システムオンチップがスキャンパスを備え、前記構成要素が少なくとも１個のレジスタを備え、
前記構成要素のアルゴリズム記述を処理することによって、前記構成要素の少なくとも１つの機能を、前記構成要素の前記少なくとも１個のレジスタに関する少なくとも１つのレジスタ値に変換するステップ、
前記システムオンチップのアルゴリズム記述を処理することによって、前記システムオンチップのトポロジ内の前記構成要素の位置を突き止めるステップ、
クロスロードデバイスのアルゴリズム記述を処理することによって、前記クロスロードデバイスを駆動させるステップであって、前記クロスロードデバイスが、前記構成要素を前記システムオンチップの前記スキャンパスに動的に加えるように適合された、駆動させるステップ、及び
前記構成要素に関する前記少なくとも１つのレジスタ値及び前記システムオンチップの前記トポロジ内の前記構成要素の前記位置を使用して、前記構成要素をテストするステップ
を備える方法。
【請求項１０】
システムオンチップの構成要素をテストするための装置であって、
スキャンパス入力接続、及び前記システムオンチップの前記構成要素に対する少なくとも１つの構成要素アクセス入力接続を備えた入力接続のセット、及び
スキャンパス出力接続、及び前記システムオンチップの前記構成要素からの少なくとも１つの構成要素アクセス出力接続を備えた出力接続のセット
を備え、
前記少なくとも１つの構成要素アクセス入力接続及び前記少なくとも１つの構成要素アクセス出力接続が、前記構成要素に対するアクセスを動的に制御するための複数の接続をサポートするように適合されたアーキテクチャを経由して相互接続された装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプリント回路基板の分野に関し、より詳細にはプリント回路基板のテストに関する。
【背景技術】
【０００２】
ジョイント・テスト・アクション・グループ（Ｊｏｉｎｔ  Ｔｅｓｔ  Ａｃｔｉｏｎ  Ｇｒｏｕｐ）（ＪＴＡＧ）は、バウンダリスキャンを使用してプリント回路基板をテストするためのテストアクセスポートに関するＩＥＥＥ１１４９標準を指す。ＪＴＡＧは、プリント回路基板をテストするために、自動テスト生成（ＡＴＧ）ツールによって使用される。バウンダリスキャン記述言語（Ｂｏｕｎｄａｒｙ  Ｓｃａｎ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）（ＢＳＤＬ）は基板レベルのＪＴＡＧに関するＩＥＥＥ１１４９．１標準の一部として開発されており、さらに、階層化スキャン記述言語（Ｈｉｅｒａｒｃｈｉｃａｌ  Ｓｃａｎ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）（ＨＳＤＬ）はＢＳＤＬの拡張として開発されている。ＢＳＤＬ／ＨＳＤＬは基板上又は基板の構成要素上で利用可能なリソースを記述する（この場合、ＨＳＤＬはその他の構成要素から構成される構成要素を記述する）。ＢＳＤＬ／ＨＳＤＬは基板レベルのＪＴＡＧに関して効率的であるものの、基板レベルのＪＴＡＧからチップレベルのＪＴＡＧへの推移はＢＳＤＬ／ＨＳＤＬの限界を強調する。
【０００３】
命令ＪＴＡＧ（ＩＪＴＡＧ）は、基板レベルのＪＴＡＧからチップレベルのＪＴＡＧへの移行に関連する既存のＪＴＡＧ限界を克服するために標準化されている（Ｐ１６８７標準として示される）が、ＩＪＴＡＧに関連する進行中の作業は、ＢＳＤＬ／ＨＳＤＬがチップレベルのＪＴＡＧテストに関する記述要件を満たすことが可能でないことを明らかにした。ＢＳＤＬ／ＨＳＤＬはバウンダリスキャンレジスタを構成しているセルの順序付けられたリストに依存するが、かかる静的記述はＩＪＴＡＧにおいて求められる複雑な動的スキャンチェーンを記述するのに適していない。さらに、ＢＳＤＬ／ＨＳＤＬは、システムのそれぞれの構成要素に関して必要とされるテスト手順を記述するための任意のスペースを提供することができない。
【発明の概要】
【課題を解決するための手段】
【０００４】
本発明はチップレベルのＪＴＡＧテストに新しいハードウェア記述言語を提供する。新しいＢＳＤＬ（ＮＳＤＬ）と呼ばれるこの新しいハードウェア記述言語は、システムオンチップのテストリソースが記述されることを可能にし、それによって、システムオンチップのテストを円滑にするように、システムオンチップが記述されることを可能にする。本発明はシステムオンチップを記述するためのボトムアップ手法を提供する。本発明は、システムオンチップの構成要素のそれぞれのアルゴリズム記述をサポートし、かつシステムオンチップの構成要素同士の間の相互接続のアルゴリズム記述をサポートし、それによって、システムオンチップ全体のアルゴリズム記述又はシステムオンチップの一部のアルゴリズム記述の生成を可能にする。本発明は、システムオンチップのスキャンパスを動的に修正するように適合された（本明細書において、クロスロードデバイス（ｃｒｏｓｓｒｏａｄ  ｄｅｖｉｃｅｓ）と呼ばれる）デバイスを記述するための方法と、システムオンチップデバイスのテストを実行するために、かかるデバイスを使用するための方法とを含めて、かかるデバイスをサポートする。
【０００５】
一実施形態では、システムオンチップの構成要素に対するアクセスを制御するように適合されたデバイスを使用してテストするための方法が提供される。１つのかかる実施形態では、この方法は、構成要素に対するアクセスを動的に制御するように適合されたアーキテクチャを経由して相互接続された入力接続のセット及び出力接続のセットの記述を受信するステップ、及びそのアーキテクチャを経由して相互接続された入力接続のセット及び出力接続のセットの記述を格納するステップを含み、この場合、入力接続のセットは、スキャンパス入力接続、及びシステムオンチップの構成要素に対する少なくとも１つの構成要素アクセス入力接続を含み、出力接続のセットは、スキャンパス出力接続、及びシステムオンチップの構成要素からの少なくとも１つの構成要素アクセス出力接続を含む。
【０００６】
一実施形態では、システムオンチップはスキャンパスを含み、構成要素は少なくとも１個のレジスタを含み、システムオンチップの構成要素をテストするための方法が提供される。１つのかかる実施形態では、この方法は、構成要素のアルゴリズム記述を処理することによって構成要素の少なくとも１つの機能を構成要素の少なくとも１個のレジスタに関する少なくとも１つのレジスタ値に変換するステップ、システムオンチップのアルゴリズム記述を処理することによってシステムオンチップのトポロジ内の構成要素の位置を突き止めるステップ、クロスロードデバイスのアルゴリズム記述を処理することによってクロスロードデバイスを駆動させるステップ（クロスロードデバイスは、構成要素をシステムオンチップのスキャンパスに動的に加えるように適合される）、及び構成要素に関する少なくとも１つのレジスタ値及びシステムオンチップのトポロジ内の構成要素の位置を使用して構成要素をテストするステップを含む。
【０００７】
本発明の教示は、添付の図面と共に、以下の詳細な説明を考慮することによって容易に理解され得る。
【図面の簡単な説明】
【０００８】
【図１】テスト環境のハイレベルブロック図である。
【図２】図１のテスト環境のシステムオンチップのハイレベルブロック図である。
【図３】「アクセスなし」構成要素の入出力知識を示す図である。
【図４】「限定されたアクセス」構成要素又は「完全なアクセス」構成要素の入出力知識を示す図である。
【図５】構成要素の内部スキャンパスのスライスの明示的な参照を示す図である。
【図６】クロスロードデバイスの表示のハイレベルブロック図である。
【図７】システムオンチップのスキャンパスを動的に修正するための一般的なクロスロードデバイスの使用のハイレベルブロック図である。
【図８】ＮＳＤＬを使用して記述され得る１つのクロスロードデバイスのハイレベルブロック図である。
【図９】ＮＳＤＬを使用して記述され得る１つのクロスロードデバイスのハイレベルブロック図である。
【図１０】ＮＳＤＬを使用して記述され得る１つのクロスロードデバイスのハイレベルブロック図である。
【図１１】図１のテスト環境のテストシステムのハイレベルブロック図である。
【図１２】ＪＴＡＧ接続を介してシステムをテストするために、図１のテストシステムによって実行される例示的な方法を示す図である。
【図１３】ＪＴＡＧ接続を介してシステムをテストするために、図１のテストシステムによって実行される例示的な方法を示す図である。
【図１４】ＪＴＡＧ接続を介してシステムをテストするために、図１のテストシステムによって実行される例示的な方法を示す図である。
【図１５】図２のシステムオンチップの構成要素のうちの１つをテストするためのテスト手順に関するレジスタビット値を決定するための構成要素の記述の使用を示す図である。
【図１６】図２のシステムオンチップの構成（ｃｏｍｐｏｓｉｔｉｏｎ）のうちの１つをテストするためのテスト手順に関するビットストリームを決定するための、図２のシステムオンチップの構成の記述の使用を示す図である。
【図１７】ＩＪＴＡＧ／ＮＳＤＬフレームワーク内のシステムの構成要素をテストするための、図１のテストシステムによって実行される例示的な方法を示す図である。
【図１８】例示的なシステムオンチップのハイレベルブロック図である。
【図１９】図１８のシステムオンチップの構成要素のうちの１つをテストするためのテスト手順に関するレジスタビット値を決定するための構成要素の記述の使用を示す図である。
【図２０】図１８のシステムオンチップの構成の記述を決定するための、図１８のシステムオンチップの構成要素の記述の使用を示す図である。
【図２１】並列アクセスインターフェースの一般的な接続方式のハイレベルブロック図である。
【図２２】２つの例示的な並列アクセス接続方式を示すハイレベルブロック図である。
【図２３Ａ】例示的なテスト環境のハイレベルブロック図である。
【図２３Ｂ】図２３Ａの例示的なテスト環境におけるデータフローのハイレベルブロック図である。
【図２４】システムオンチップの並列ポートとコアとの間の例示的な接続のハイレベルブロック図である。
【図２５】システムオンチップの並列ポートとコアとの間の例示的な接続のハイレベルブロック図である。
【図２６】システムオンチップの並列ポートとコアとの間の例示的な接続のハイレベルブロック図である。
【図２７】システムオンチップの並列ポートとコアとの間の例示的な接続のハイレベルブロック図である。
【図２８】並列アクセスインターフェースの内部接続方式のハイレベルブロック図である。
【図２９】システムオンチップのテストリソースを記述するための方法を示す図である。
【図３０】本明細書で説明される機能を実行する際に使用するのに適した汎用コンピュータのハイレベルブロック図である。
【発明を実施するための形態】
【０００９】
理解を円滑にする目的で、図面に共通の同一の要素を指定するために、可能な場合、同一の参照番号が使用されている。
【００１０】
本明細書で説明されるように、命令ＪＴＡＧ（ＩＪＴＡＧ）は、基板レベルのＪＴＡＧテストからチップレベルのＪＴＡＧテストへの移行に関連する既存のＪＴＡＧ限界を克服するために標準化されている（Ｐ１６８７標準、又は、その代わりにＩＪＴＡＧとして示される）が、ＩＪＴＡＧに関連する進行中の作業は、ＢＳＤＬ／ＨＳＤＬがチップレベルのバウンダリスキャンに関する記述要件を満たすことが可能でないことを明らかにした。本発明は、チップレベルのＪＴＡＧテストに関するＢＳＤＬ／ＨＳＤＬの限界を克服する新しいハードウェア記述言語を提供する。この新しいハードウェア記述言語は、本明細書において、新しいＢＳＤＬ（ＮＳＤＬ）と呼ばれる。このＮＳＤＬ言語はシステムオンチップのテストリソースの記述を可能にし、それによって、システムオンチップのテストを円滑にする。ＮＳＤＬ記述言語の多数の利点は以下のＮＳＤＬの説明から理解され得る。
【００１１】
本明細書で説明されるように、新しいハードウェア記述言語、ＮＳＤＬはＪＴＡＧベースのテストにおいて追加の進歩も可能にする。ＮＳＤＬ記述言語は、システムオンチップデバイスのテストを円滑にするために、いわゆる「クロスロードデバイス」の使用を可能にする。クロスロードデバイスは、システムオンチップのシステムスキャンパスの動的修正を可能にする。ＮＳＤＬ記述言語は、システムオンチップデバイスのテストを円滑にするために、並列アクセスの使用も可能にする。システムオンチップデバイスに対する並列アクセスは多くの様式で提供されることが可能である。さらに、かかる進歩はＮＳＤＬ記述言語によって可能にされているが、かかる進歩は、後に開発され得るその他の記述言語に関して利用されることも可能である点に留意されたい。
【００１２】
ハードウェア開発プロセスにおいて、３人の主な関係者が存在する。即ち、デバイスプロバイダ、システム設計者、及びテストエンジニアである。デバイスプロバイダは特定のデバイスを作成する。システム設計者は、システムを構成するために、デバイスプロバイダによって提供されたデバイスを使用する。テストエンジニアは、システムが適切に機能していることを確実にするために、システムをテストする（例えば、システムのデバイス同士の間の相互接続、デバイスの機能、システムの機能などをテストする）。ＮＳＤＬ言語は、（例えば、そのデバイスを記述するために）デバイスプロバイダによって使用されることが可能であり、（例えば、システムを構成する際に）システム設計者によって使用されることが可能であり、（例えば、システムをテストする際に）システム試験者によって使用されることが可能である。従って、ＮＳＤＬ言語は、ハードウェア開発プロセスの全体にわたって使用されることが期待される。
【００１３】
システムオンチップ開発プロセスにおいて、システムが構成されるデバイスは、「ソフト」デバイス、即ち、何らかのハードウェア記述言語でのデバイスの記述であり得る。このプロセスでは、システム設計者は、最終的に、テストエンジニアによってテストされるシステムオンチップを取得するために、システムレベル開発フローにおいて、ソフトデバイスをシステムレベルコードと統合する。（例えば、デバイスの数、デバイス同士の間の相互接続、デバイス内依存、デバイス間依存などの点から）システムオンチップの複雑さが高まると、システムオンチップをテストする複雑さが高まる。ＮＳＤＬ言語は、どんな複雑さのシステムオンチップデバイスも容易に記述されることを可能にし、従って、テストされることを可能にする。
【００１４】
図１はテスト環境のハイレベルブロック図を示す。詳細には、テスト環境１００は、システムオンチップ（Ｓ−ｏ−Ｃ）１１０、及びテストシステム（ＴＳ）１２０を含む。ＴＳ１２０は、Ｓ−ｏ−Ｃ１１０をテストする（例えば、（構成要素の機能を含めて）Ｓ−ｏ−Ｃ１１０の個々の構成要素、Ｓ−ｏ−Ｃ１１０上のデバイス同士の間の相互接続、Ｓ−ｏ−Ｃ１１０のシステムレベル機能など、並びにそれらの様々な組合せをテストする）。ＴＳ１２０は、（ＴＤＩポートとして示される）入力ポート１１５Ｉ及び（ＴＤＯポートとして示される）出力ポート１１５Ｏを含むテストアクセスポート（ＴＡＰ）１１５を経由してＳ−ｏ−Ｃ１１０をテストする。
【００１５】
一実施形態では、Ｐ１６８７環境において、ＴＡＰ１１５は、ＩＥＥＥ１１４９．１標準によって記述される。本明細書において、ＴＤＩポート１１５Ｉ及びＴＤＯポート１１５Ｏを使用して主に示され、かつ説明されるが、ＴＡＰ１１５は、（分かりやすくするために省略されている）ＴＣＫポート、ＴＭＳポート、及び、オプションで、ＴＲＳＴポートなど、その他の制御ポートを含むことが可能である。さらに、ＩＥＥＥ１１４９．１標準によって記述されるＴＡＰに関して主に示され、かつ説明されるが、ＴＡＰ１１５は、様々なその他のポート（例えば、その他の標準によって記述されるポートなど、並びにそれらの様々な組合せ）を利用することが可能である。
【００１６】
ＴＳ１２０は、テスト手順を使用して、Ｓ−ｏ−Ｃ１１０のテストを実行する。ＴＳ１２０は、１つ以上のテスト手順を使用して、１つ以上のテストを実行することが可能である。テスト手順は、構成要素の一部（例えば、構成要素の機能、構成要素の機能のセット、構成要素内依存など）、構成要素、構成要素のグループ（例えば、構成要素同士の間の相互接続、構成要素間依存など）、１つ以上のシステムレベル機能など、並びにそれらの様々な組合せ）をテストするために使用されることが可能である。
【００１７】
ＴＳ１２０は、Ｓ−ｏ−Ｃ１１０をテストするためのテスト手順を生成する。テスト手順はＳ−ｏ−Ｃ１１０をテストするために求められる情報を指定する。Ｓ−ｏ−Ｃ１１０向けのテスト手順は、（Ｓ−ｏ−Ｃ１１０の個々の構成要素のそれぞれの記述、並びに、Ｓ−ｏ−Ｃ１１０のシステムレベルの記述を含めて）Ｓ−ｏ−Ｃ１１０の記述を指定することが可能である。テスト手順は、入力テストベクトル及び期待される出力テストベクトルを指定することが可能である。テスト手順は、テストに関して求められる推定時間、テストに関する出力データ処理（例えば、ロギング、エラートリガリング（ｅｒｒｏｒ  ｔｒｉｇｇｅｒｉｎｇ）、回復動作など）など、並びにそれらの様々な組合せ）など、テストに関連するその他の情報を含み得る。
【００１８】
ＴＳ１２０は、（Ｓ−ｏ−Ｃ１１０の個々の構成要素のそれぞれの記述、並びに、Ｓ−ｏ−Ｃ１１０のシステムレベルの記述を含めて）Ｓ−ｏ−Ｃ１１０の記述を使用してＳ−ｏ−Ｃ１１０をテストするためのテスト手順を生成する。Ｓ−ｏ−Ｃ１１０の個々の構成要素の記述は、ＮＳＤＬを使用して指定され得る。個々の構成要素の記述は、構成要素の内部スキャンパスを記述することが可能である。Ｓ−ｏ−Ｃ１１０のシステムレベルの記述は、ＮＳＤＬを使用して指定され得る。Ｓ−ｏ−Ｃ１１０のシステムレベルの記述は、Ｓ−ｏ−Ｃ１１０のトポロジ（例えば、構成要素同士の間の相互接続、構成要素間依存など）を記述することが可能である。
【００１９】
（個々の構成要素の記述、システムレベルの記述などを含めて）Ｓ−ｏ−Ｃ１１０に関する記述情報は、Ｓ−ｏ−Ｃ１１０に関するテスト手順を生成する際に使用するように適合された情報を含む。例えば、記述情報は、スキャンパス長情報、スキャンパス階層情報など、並びにそれらの様々な組合せを決定するために処理され得る、構成要素スキャンパス情報、システムトポロジ情報などを含む。Ｓ−ｏ−Ｃ１１０に関する記述情報は、本明細書で説明される任意のその他の記述情報を含み得る。
【００２０】
ＴＳ１２０は、Ｓ−ｏ−Ｃ１１０上で１つ以上のテスト手順を実行することによって、Ｓ−ｏ−Ｃ１１０をテストする。ＴＳ１２０は、それぞれのテストが実行されるように、入力ビットストリーム及び期待されるテスト結果（例えば、期待される出力ビット値又は出力ビットストリーム）を生成する。ＴＳ１２０は、（入力テストベクトルと呼ばれる）入力ビットストリームをＴＤＩポート１１５Ｉに提供して、（出力テストベクトルと呼ばれる）対応する出力ビットストリームをＴＤＯポート １１５Ｏから受信する。ＴＳ１２０は、テストの結果を決定するために、実際の出力ビットストリームを期待される出力ビットストリームと比較する。ＴＳ１２０はテスト結果を格納することが可能である。
【００２１】
ＴＳ１２０は、Ｓ−ｏ−Ｃ１１０をテストするための１つ以上のテスト手順を実行することが可能である。ＴＳ１２０は（異なるスケジューリング決定が、結果として、テスト手順の同じセットに関して、異なるテスト完了時間をもたらすことになるため）総テスト時間を最小限に抑えるように複数のテスト手順の実行を組織することが可能である。ＴＳ１２０は、テストスケジュール（即ち、それに従ってテスト手順が実行されなければならない順序を指定するスケジュール）を指定することが可能である。ＴＳ１２０は、システムオンチップのテストに関連する様々なその他の機能を実行することが可能である。
【００２２】
図２は、図１のテスト環境のシステムオンチップのハイレベルブロック図を示す。図２に示されるように、Ｓ−ｏ−Ｃ１１０は、複数の構成要素相互接続２２０（集合的に、構成要素相互接続２２０）によって相互接続された複数の構成要素２１０Ａ〜２１０Ｅ（集合的に、構成要素２１０）を含む。
【００２３】
構成要素２１０は、システムオンチップシステム内に含まれることが可能な任意の構成要素を含み得る。構成要素２１０は、ＮＳＤＬを使用して記述されることが可能である。構成要素２１０は、本明細書でテストリソースと呼ばれる場合もある。
【００２４】
一実施形態では、Ｐ１６８７標準によるシステムにおいて、構成要素２１０は、ＩＰ、計器（ｉｎｓｔｒｕｍｅｎｔｓ）、及び／又は計器選択ビット（ｓｅｌｅｃｔ  ｉｎｓｔｒｕｍｅｎｔ  ｂｉｔｓ）（ＳＩＢ）を含み得る。
【００２５】
知的財産（ＩＰ）デバイスは、テストを必要としている通常のデバイスである。
【００２６】
計器は、テストを必要とする以外に、テストを支援するように適合された機能性（例えば、値の読み取り、値の監視、有用な情報の提供など、並びにそれらの様々な組合せ）を提供するデバイスである。例えば、計器は、寿命加速テストをパラメータ化するために使用されることになる温度センサーの出力であり得る。例えば、計器は、ソフトウェア定義された無線の獲得段階に関して調整可能なフィルタを較正するために使用されるセンサーの基準値であり得る。即ち、計器は、初期のシステムテストの間、並びに、システムの寿命の全体の両方でテストを支援することが可能である。
【００２７】
ＩＰ／計器は非常に類似する可能性があるという点で、これら２つの用語は、本明細書において、交換可能に使用されることが可能である。さらに、ＩＰ及び計器は、システムオンチップの構成要素として使用されることが可能であるため、ＩＰ及び計器は、本明細書において、より一般に、構成要素と呼ばれる場合がある。
【００２８】
ＩＰ／計器は、階層化スキャンパスを含み得る。階層化スキャンパスを有する構成要素は、構成要素がシステム内に導入されるときシステムスキャンパスの一部になる内部スキャンパスを含む。
【００２９】
ＳＩＢは、（どの１つ以上のデバイスがテストにおいて使用されることになるかに応じて）スキャンパスの一部がスキャンパス内に動的に含まれること、又はスキャンパスから動的に除去されることを可能にする階層化スキャンパスセルである。ＳＩＢは、Ｐ１６８７標準の現在の草案のハードウェア提案の一部を形成する。
【００３０】
一般に、階層は、システムオンチップの構成要素のテストを改善する。例えば、階層は、テストの間にアクティブなシステムスキャンパスの最小化と構成要素の隔離とを可能にし、それによって、システムオンチップの構成要素に対するアクセス時間を削減する）。
【００３１】
その他の実施形態では、その他の標準によるシステムにおいて、構成要素２１０は、その他のタイプの構成要素を含み得る。
【００３２】
一実施形態では、構成要素２１０は、１つ以上のクロスロードデバイスを含み得る。システムオンチップテストにおけるクロスロードデバイスの使用は、ＮＳＤＬ言語の使用によって可能にされる（即ち、大部分のかかるデバイスは、ＢＳＤＬ／ＨＳＤＬによって記述されていることが可能でない）。システムオンチップテストにおけるクロスロードデバイスの使用は、図６〜図１０に関してよりよく理解され得る。
【００３３】
図２に示すように、構成要素２１０のそれぞれは、複数の内部レジスタを含む。詳細には、構成要素２１０Ａは３個のレジスタ（Ａ０，Ａ１，Ａ２）を含み、構成要素２１０Ｂは６個のレジスタ（Ｂ０，Ｂ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５）を含み、構成要素２１０Ｃは５個のレジスタ（Ｃ０，Ｃ１，Ｃ２，Ｃ３，Ｃ４）を含み、構成要素２１０Ｄは３個のレジスタ（Ｄ０，Ｄ１，Ｄ２）を含み、構成要素２１０Ｅは４個のレジスタ（Ｅ０，Ｅ１，Ｅ２，Ｅ３）を含む。それぞれの構成要素２１０のレジスタは、その構成要素２１０に関する内部スキャンパスを形成する。それぞれの構成要素２１０の内部スキャンパスは、ＮＳＤＬを使用して記述されることが可能である。
【００３４】
図２に示すように、構成要素２１０のそれぞれは、少なくとも１つの機能をサポートする。詳細には、構成要素２１０Ａは３つの機能をサポートし、構成要素２１０Ｂは４つの機能をサポートし、構成要素２１０Ｃは３つの機能をサポートし、構成要素２１０Ｄは２つの機能をサポートし、構成要素２１０Ｅは１つの機能をサポートする。構成要素２１０のそれぞれによってサポートされるこれらの機能は、それぞれ、構成要素２１０のそれぞれのレジスタ（即ち、内部スキャンパス）を利用する。従って、構成要素２１０のそれぞれによってサポートされる機能は、ＮＳＤＬを使用して記述されることが可能である。
【００３５】
図２に示すように、Ｓ−ｏ−Ｃ１１０の構成要素２１０は、Ｓ−ｏ−Ｃ１１０の構成要素相互接続２２０を経由して接続される。構成要素２１０（即ち、構成要素２１０の内部スキャンパス）及び構成要素２１０同士の間の構成要素相互接続２２０は、Ｓ−ｏ−Ｃ１１０の入力テストポート（ＴＤＩ）からＳ−ｏ−Ｃ１１０の出力テストポート（ＴＤＯ）へのシステムスキャンパス（即ち、パス）を形成する。このシステムスキャンパスは、（例えば、それによって、ＮＳＤＬに基づくシステム全体の記述を形成するために、ＮＳＤＬを使用して個々の構成要素のそれぞれを定義し、ＮＳＤＬを使用してシステムの構成を定義することによって）ＮＳＤＬを使用して定義され得る。
【００３６】
本明細書で説明されるように、（即ち、構成要素２１０、構成要素相互接続２２０、構成要素内依存及び構成要素間依存などのそれぞれが相関するアルゴリズムの収集物を使用する際に記述されるため）ＮＳＤＬに基づくＳ−ｏ−Ｃ１１０のシステム全体の記述は、アルゴリズム記述である。Ｓ−ｏ−Ｃ１１０のアルゴリズム記述は、Ｓ−ｏ−Ｃ１１０をテストする際にＴＳ１２０による使用のために適合された情報（例えば、スキャンパス長情報、スキャンパス階層情報など、並びにそれらの様々な組合せ）を含む。
【００３７】
システムオンチップは、システムオンチップの構成要素のそれぞれを記述すること（例えば、ＩＰ、計器、（使用される場合）クロスロードデバイスなど、及びそれらの様々な組合せの記述）と、（システムオンチップの構成要素のそれぞれの間の相互接続、構成要素内依存及び構成要素間依存など、並びにそれらの様々な組合せの記述を含めて）システムオンチップのトポロジを記述することとによって記述されることが可能である。
【００３８】
一実施形態では、構成要素がＩＰ、計器、及び／又は計器選択ビット（ＳＩＢ）を含む、Ｐ１６８７標準によるシステムでは、システムオンチップの記述は、（例えば、内部レジスタの意味、適用／監視するための手順／ビットストリームのセットなどを含めて）それぞれのＩＰ／計器の記述、（ＳＩＢが使用される場合）それぞれのＳＩＢの記述、システムスキャンパスの構成の記述（即ち、それぞれの構成要素の内部スキャンパスがどのように構成要素を通過するかなどを含めて、スキャンパスがシステムオンチップをどのように通過するか）など、並びにそれらの様々な組合せを必要とする。
【００３９】
スキャンチェーン内にＩＰを挿入することは、スキャンチェーンを介したＩＰのテストを可能にする。システムオンチップ内のＩＰの使用は、ＩＰに関するアクセス特権レベル（ＡＰＬ）（例えば、アクセスなし、限定されたアクセス、完全なアクセス）に応じて異なる。
【００４０】
ＩＰに関するＡＰＬが「アクセスなし」である場合、テストツールはＩＰの内部の知識を有さず、従って、ＩＰのプロバイダによって提供された情報に依存しなければならない。例えば、ＩＰに関するビットストリームのセット（即ち、入力ビットストリーム及び期待される出力ビットストリーム）が提供されなければならない。この場合、これらのビットストリームは、静的ビットストリームと見なされる。テストツールは、ＩＰに関する静的入力ビットストリームをシステムオンチップに関するシステムビットストリーム内に挿入して、ＩＰのプロバイダによって指定されたように、対応する出力ビットストリームを処理しなければならない。
【００４１】
ＩＰに関するＡＰＬが「完全なアクセス」である場合、テストツールは、ＮＳＤＬ内に記述されたＩＰの内部スキャンチェーン、及び選り抜きの記述言語でのＩＰのソースの両方を含めて、ＩＰの内部の完全な知識を有する。この場合、テストツールは、（例えば、その独自のアルゴリズムを使用して）ＩＰに関して求められる入力ビットストリーム及び期待される出力ビットストリームを直接的に演算することが可能であり、又はＩＰのプロバイダは、（例えば、静的ビットストリーム及び／又は動的ビットストリームとして）事前に演算されたビットストリームのセットを提供することが可能である。
【００４２】
ＩＰに関するＡＰＬが「限定されたアクセス」である場合、テストツールは、ＩＰの内部の限定された知識だけを有する。ＩＰのＮＳＤＬ記述が提供される。ＩＰのＮＳＤＬ記述は、ＩＰの内部スキャンチェーンの記述と、ＩＰをテストするために使用され得る手順のセットとを含む。この場合、テストツールは、ＩＰをテストする際に使用するためのビットストリーム（例えば、入力ビットストリーム及び期待される出力ビットストリーム）を生成するために、ＩＰの記述を使用する。
【００４３】
計器をシステムオンチップ内に挿入することは、ある値又はある条件の検査を介したシステムオンチップのテストを可能にする。計器は、テスト目的で使用され得る１つ以上の機能をサポートすることが可能である。従って、ＩＰの記述は、ＩＰをテストするために必要とされる手順のセットだけを含むものの、計器の記述は、計器の機能にアクセスするために使用され得る手順（及び／又はビットストリーム）のセットも含む。計器の記述は、計器が構成されるレジスタのレジスタ値の点から、計器の機能の記述を含み得る。従って、ＮＳＤＬを使用すると、ＩＰと計器との間の唯一の違いは、手順のセットである。
【００４４】
ＩＰ及び計器に関して本明細書で説明されるように、ＩＰ及び計器の記述は、手順を使用して指定されることが可能である。手順は、手順が呼び出されるたびに実行されることになるアトミック命令（ａｔｏｍｉｃ  ｉｎｓｔｒｕｃｔｉｏｎｓ）の連結と見なされることが可能である。
【００４５】
ＩＰ／計器に関する手順の記述はＩＰ／計器のＡＰＬに依存し得る。
【００４６】
構成要素のＡＰＬが「アクセスなし」である場合、これらの手順は、ビットストリーム値（即ち、スキャンパス内に書き込まれることになる値及びスキャンパスから読み取られることになる値）として表されることが可能である。
【００４７】
構成要素のＡＰＬが「限定されたアクセス」又は「完全なアクセス」である場合、ＩＰ／計器のスキャンパスの知識は、これらの手順が構成され得るように、ＩＰ／計器に関する手順の表示に関して追加の自由を提供する。手順の空間構成は、システムオンチップのシステムスキャンパスの入出力を構成するために、異なる手順の入出力がどのように使用され得るかを示す。時間構成は、特定の動作を実行するために、同じ構成要素（例えば、ＩＰ／計器）に対して手順がどのように連続して適用され得るかを示す。加えて、手順は、より大きな手順及び／若しくは複数のより小さな手順に入れ子にされること、並びに／又はより大きな手順及び／若しくは複数のより小さな手順から入れ子にされることが可能である。
【００４８】
手順は手順属性（即ち、手順の記述）と手順本体とを含む。手順の記述は、長さ、ビジーモード指示、入力条件、終了条件、依存、内部スキャンパス記述など、並びにそれらの様々な組合せなどの情報を含み得る。
【００４９】
固定長手順は、実行されるのに常に同じ時間量がかかる手順と定義され得る。可変長手順は、実行されるのに可変の時間量がかかる手順と定義され得る。可変長手順は、その他の時間値（例えば、最善の時間及び最悪の時間、平均時間など、並びにそれらの様々な組合せ）を使用して定義されることが可能である。一実施形態では、それぞれの可変長手順に関して、少なくとも１つの終了条件が提供されなければならない。
【００５０】
手順の長さは、サイクル（又は、サイクルを用いた表現が可能でない場合、秒又は何らかのその他の時間単位など、何らかのその他の絶対項）を用いて表されることが可能である。例えば、物理的な計測を行う計器、非同期計器、非同期クロック領域で動作している計器などの場合、サイクルを用いて手順の長さを表すことは可能でない。手順の長さが時間で表される場合、テストツールは（例えば、実際のテストクロック期間の知識を用いて）サイクルカウントを決定することが可能であり、又は（例えば、基準クロック周期を使用して）サイクルカウントを推定することが可能である。
【００５１】
手順ビジーモードが手順によって宣言されるべきである。手順の実行の間に、スキャンチェーンの値が変化してはならない（即ち、それぞれのスキャンアクセスがその値を同じ値にリセットしなければならない）場合、手順のビジーモードは「保留」である。例えば、「保留」計器は、組合せデバイスであり得る（即ち、この場合、それぞれの修正が結果に影響を及ぼす）。手順の実行の間に、スキャンチェーンの値が重要でない場合、手順のビジーモードは「注意無用（ｄｏｎ’ｔ  ｃａｒｅ）」である。例えば、「注意無用」計器は、トリガされたときだけ入力をサンプリングする任意のデバイスであり得る。
【００５２】
システムオンチップの記述は、そのシステムオンチップに関連する依存の記述も含む。システムオンチップの依存は、（システムオンチップの１つの構成要素の機能同士又は手順同士の間の）構成要素内依存、及び（システムオンチップの異なる構成要素の機能同士又は手順同士の間の）構成要素間依存を含む。依存の記述は、（例えば、それらをリストアップすること、名称ベースでリンクさせることなど、並びにそれらの様々な組合せによって）多くの形で指定され得る。
【００５３】
例えば、機能Ｘがリストアップされた副機能のそれぞれが完了するまで、その実行を開始できないことを意味する「機能Ｘは、機能Ｘ１，Ｘ２，．．．，Ｘｎの完了に依存する」という表示を介して記述されることが可能である。例えば、手順Ｘは、多くの理由で、手順Ｙは手順Ｘが実行される前に完了されなければならないことを意味する「手順Ｘは、手順Ｙに依存する」という表示を介して記述されることが可能である。システムオンチップの依存は、様々なその他の形で記述されることが可能である。
【００５４】
システムオンチップの構成要素内依存及び構成要素間依存が宣言されるべきである。依存の宣言は、テストツールがテストスケジューリングを実行することを可能にする。一実施形態では、依存は、依存の（１つ以上の）手順の宣言的部分の一部として宣言されることが可能である。一実施形態では、依存は、明示的な名前付けを使用して宣言されることが可能である。１つのかかる実施形態では、外部依存をその外部依存が関連する構成要素の（１つ以上の）記号名とリンクさせるために、汎用パラメータが利用され得る。
【００５５】
ＮＳＤＬを使用すると、依存の記述及び宣言は、様々なその他の形で実行されることが可能である。
【００５６】
構成要素（又は、複数の構成要素のグループ）に関する１つの手順（又は、複数の手順）の構成は、（１つ若しくは複数の）構成要素の（１つ若しくは複数の）ＡＰＬに基づいて変化し、これは、その構成要素に関連する入出力情報の知識に影響を及ぼす。
【００５７】
図３は、「アクセスなし」構成要素３００の入出力知識を示す。構成要素のＡＰＬが「アクセスなし」である場合、その構成要素によってサポートされるそれぞれの機能に関して、機能の本体は、（入力ビットストリームを構成するために使用されることになる）入力ビットストリーム情報、関数の長さ情報及びスキャンパス長さ情報、並びに出力ビットストリーム情報（例えば、期待される出力ビットストリーム、求められる出力ビットストリーム処理など、並びにそれらの様々な組合せ）から構成されることになる。
【００５８】
図４は、「限定されたアクセス」構成要素又は「完全なアクセス」構成要素４００の入出力知識を示す。構成要素のＡＰＬが「限定されたアクセス」又は「完全なアクセス」である場合、構成要素の内部スキャンパスは知られている（即ち、構成要素のレジスタのそれぞれ、並びに、レジスタのトポロジは知られている）。構成要素の内部スキャンパスは、１つ以上の階層レベル上で配信され得る複数のスライスに区分化されることが可能である。異なる階層レベルに対するアクセスは、（例えば、隣接レベルの１つ以上のレジスタを使用して）いかなるようにも制御され得る。構成要素の内部スキャンパスをいくつかの階層レベルに区分化することは、図４に関して示され、かつ説明される構成要素に関してよりよく理解され得る。
【００５９】
図４に示されるように、内部スキャンパスは（スライス１、２、３、４、５として示される）５つのスライスに区分化される。内部スキャンパスの５つのスライスは、（レベル０、１として示される）２つの階層レベル上で配信される。スライス１、２、３、４、及び５は、それぞれ、４個のレジスタ、４個のレジスタ、３個のレジスタ、３個のレジスタ、及び２個のレジスタで構成される。スライス１、２、及び５は、階層レベル０内に配置される。スライス３及び４は、階層レベル１内に配置される。（レジスタＨ１として示される）レジスタは、内部スキャンパス階層レベル０とレベル１との間のアクセスを制御する。Ｈ１レジスタは、スライス３及び４が迂回される（即ち、これらのスライスが内部スキャンパスから排除される）ように、又はスライス３及び４が迂回されない（即ち、これらのスライスが内部スキャンパス内に含まれる）ように内部スキャンパスを制御する。
【００６０】
図４に示されるように、内部スキャンパスは以下のように構成される。スライス１の入力はＴＤＩであり、スライス１の出力はスライス２の入力である。スライス２の入力はスライス１の出力であり、スライス２の出力はＨ１（レベル０入力）に対する第１の入力である。レベル０において、Ｈ１の入力はスライス２の出力であり、Ｈ１の出力はスライス５の入力である。レベル１において、Ｈ１の出力はスライス３の入力であり、Ｈ１の入力はスライス４の出力である。スライス３の入力はＨ１の出力（レベル１の出力）であり、スライス３の出力はスライス４の入力である。スライス４の入力はスライス３の出力であり、スライス４の出力はＨ１の入力（レベル１の入力）である。スライス５の入力はＨ１の出力（レベル０の出力）であり、スライス５の出力はＴＤＯである。
【００６１】
一実施形態では、構成要素の内部スキャンパスを複数のスライスに区分化することは、機能的である、即ち、内部スキャンパスのそれぞれのスライスは、その上で動作している１つ以上のスライス機能を有し、それらのスライスのそれぞれは、そのそれぞれがテストツールによって独立してスケジュール可能な１つ以上のスライス手順を使用してテストされることが可能である。この実施形態では、内部スキャンパスの所与のスライス上で動作している機能の本体は、「アクセスなし」構成要素の機能の本体の構成に類似した形で構成され得る（即ち、機能の本体は、入力ビットストリーム情報、関数の長さ情報及びスキャンパス長情報、出力ビットストリーム情報など、並びにそれらの様々な組合せを使用して説明される）。
【００６２】
従って、内部スキャンパスの異なるスライス又はスライスの組合せを用いて動作している異なる手順を利用して、構成要素の内部スキャンパスの区分化は、様々な形で使用されることが可能である。例えば（図４を参照すると）、スライス１に関連する第１の手順Ｐ１は、データをスライス１内に書き込むために実行されることが可能であり、それによって、構成要素内のいくつかの機能の実行をトリガし、これは、結果として、結果データをスライス２内に格納し、エラーデータをスライス５内に格納する。次いで、それぞれ、スライス２及び５の値を読み取るために（それぞれ、スライス２及び５の上で動作している）２つの追加の手順Ｐ２及びＰ５が実行され得る。従って、（複数の階層レベルの全域で区分化することを含めて）内部スキャンパスをスライスに区分化することは、システムオンチップテストにおいて大きな柔軟性を提供する。ＴＳ１２０は、アルゴリズム手順を直列テストビットストリーム（例えば、入力ビットストリーム及び期待される出力ビットストリーム）に容易に変換することが可能である。
【００６３】
構成要素の内部スキャンパスのスライスを利用するために異なる手順が開発され得るため、内部スキャンパスのスライスを利用する手順は、（その中の信号を含めて）スライスを参照することが可能でなければならない。手順は、スライスをいかなるようにも参照することが可能である。一実施形態では、例えば、手順は、明示的な名前付けを使用してスライスを参照することが可能である。１つのかかる実施形態では、それぞれのスライス（即ち、レジスタ又はレジスタのグループ）に独自の名前が割り当てられ、それによって、階層的にインスタンスが作成された（ｉｎｓｔａｎｔｉａｔｅｄ）スライスが記録のようにアクセスされることを可能にする。構成要素のスライスを識別するために明示的な名前付けを使用する例は、図５に関して示され、かつ説明される。
【００６４】
図５は、構成要素５００の内部スキャンパスのスライスの明示的な参照を示す。図５に示されるように、構成要素５００は、そのそれぞれが、独自の名前によって参照される６つのスライスを有する１２個のレジスタスキャンパスを含む。第１のスライスは、ＢＳ＿０と名付けられた単一のレジスタである。第２のスライスは、ＢＳ＿１と名付けられた単一のレジスタである。第３のスライスは、ＢＳ＿０、ＢＳ＿１、ＢＳ＿２、及びＢＳ＿３と名付けられた４個のレジスタを含む、ＳＣＡＮ＿４＿ＢＩＴ＿０と名付けられた４個のレジスタの直列チェーンである。第４のスライスは、ＢＳ＿０、ＢＳ＿１、ＢＳ＿２、及びＢＳ＿３と名付けられた４個のレジスタを含む、Ａｎｏｔｈｅｒ＿ＳＣＡＮ＿４＿ＢＩＴと名付けられた４個のレジスタの直列チェーンである。第５のスライスは、ＢＳ＿２と名付けられた単一のレジスタである。第６のスライスは、ＢＳ＿３と名付けられた単一のレジスタである。
【００６５】
本明細書で説明されるように、階層的にインスタンスが作成されたレジスタは、記録のようにアクセスされることが可能である。例えば、矢印１によって示されるレジスタの独自の名前はＢＳ＿１である（２個のその他のレジスタがＢＳ＿１と名付けられているが、階層的な名前付けの使用がレジスタの独自の名前付けをどのように確実にするかを理解されよう）。例えば、矢印２によって示されるスライス（即ち、レジスタのグループ）の独自の名前は、ＳＣＡＮ＿４＿ＢＩＴ＿０である。例えば、矢印３によって示されるレジスタの独自の名前は、ａｎｏｔｈｅｒ＿ＳＣＡＮ＿４＿ＢＩＴ．ＢＳ＿１である。即ち、内部スキャンパスのそれぞれのスライス、並びに、それぞれのスライスのそれぞれのレジスタは、スライス及びレジスタの任意の数の階層レベルに関して、独自の名前を使用して参照されることが可能である。
【００６６】
本明細書において、構成要素に関する手順又は手順のセットを定義するために利用され得る特定の手順属性（例えば、手順の長さ、機能依存及び手順依存、内部スキャンパス記述、スライス記述、スライス基準属性など）に関して主に示され、かつ説明されるが、様々なその他の手順属性が指定され得る。手順を記述するために使用される手順属性は、システムオンチップテストをサポートするように手順を記述するために使用されることが可能な任意の情報を含み得る。
【００６７】
手順属性に加えて、手順は手順本体を含む。手順本体は、手順の詳細を含む。手順本体は、いかなるようにも実装され得る。手順本体は、スキャンパスの概念を有さない（むしろ、アクセスは、スライス上で並行して行われ、テストツールはこれらの動作をシステムスキャンパスに対するアクセスに融合する）。手順本体は、様々な文、主張、入れ子にされた手順など、並びにそれらの様々な組合せを使用することが可能である。
【００６８】
ＶＨＤＬ言語を使用して実装されたＮＳＤＬを使用してシステムオンチップが記述される（従って、システムオンチップに関連する手順のそれぞれがＶＨＤＬ言語を使用して実装されたＮＳＤＬを使用して記述される）一実施形態では、手順本体は、ＶＨＤＬ構文を使用して表現されることが可能である。手順の手順本体は、システムオンチップの記述の実装形態に応じて、その他の形で表現されることが可能である。
【００６９】
構成要素の内部スキャンパスの記述はＮＳＤＬによって容易に提供される。ＮＳＤＬでは、それぞれのレジスタセルはエンティティと見なされ、レジスタセルは、（例えば、ＮＳＤＬがＶＨＤＬのスーパーセットとして実装されるとき、ＶＨＤＬ規則を使用して）パッケージにグループ化されることが可能である。ＮＳＤＬでは、それぞれのレジスタエンティティは、２つの汎用パラメータ、即ち、レジスタインスタンスを明示的に参照することによって、スキャンパスを表現するために使用され得る「ｐｒｅｃｅｄｅｎｔ（先行部分）」及び「ｆｏｌｌｏｗｉｎｇ（後続部分）」を使用して記述される。レジスタエンティティの「ｐｒｅｃｅｄｅｎｔ」パラメータは、そのレジスタエンティティに対する入力のソースを指定する。レジスタエンティティの「ｆｏｌｌｏｗｉｎｇ」パラメータは、そのレジスタエンティティからの出力の宛先を指定する。従って、レジスタエンティティは、単一のレジスタ、（階層的グループ化を含めて）レジスタのグループなどを含み得る。
【００７０】
構成要素の内部スキャンパスの記述は、図５に関して示され、かつ説明される内部スキャンチェーンに対応する以下のサンプルコードに関してよりよく理解され得る。
【００７１】
以下のサンプルコードは、直列に配置された４個の基本的なバウンダリスキャンレジスタを含む簡単なスキャンパスを示し、この場合、第１のバウンダリスキャンレジスタは、ＴＤＩポートから入力を受信し、第４のバウンダリスキャンレジスタはＴＤＯポートに出力を提供する。
【００７２】
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");
【００７３】
この４個のレジスタスキャンチェーンは、エンティティ内にカプセル化されて、階層的にインスタンスが作成されることが可能である。以下のサンプルコードは、（ＳＣＡＮ＿４＿ＢＩＴ＿０レジスタエンティティ、及びａｎｏｔｈｅｒ＿ＳＣＡＮ＿４＿ＢＩＴレジスタエンティティを記述する際に最終的に使用するために）この４個のレジスタスキャンチェーンが正にどのようにエンティティ内にカプセル化されて、階層的にインスタンスが作成されることが可能であるかを示す。
【００７４】
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;
【００７５】
以下のサンプルコードは（図５に関して示され、かつ説明されたように、１２個のレジスタスキャンパスが、４個の個々のレジスタと、４個のレジスタレジスタスキャンチェーンから構成される２つのレジスタエンティティとを含めて、６つのレジスタエンティティの記述を使用して表される）図５の１２個のレジスタスキャンパスの表示（記述）を示す。
【００７６】
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");
【００７７】
このタイプの記述情報を使用すると、スキャンパスに関する情報（例えば、その長さ、その階層構造など、並びにそれらの様々な組合せ）は、（例えば、文脈上の検査を使用して）コンパイル時にテストツールによって自動的に演算されることが可能である。さらに、レジスタエンティティの記述は、（例えば、その他の設計における使用に関して）極めて再利用可能である。レジスタエンティティに関する記述情報は、多くの異なる形で収集、格納、及び検査されることが可能であるため（即ち、記号表の実装は、例えば、ハッシュテーブル、データベースなどの点から、コンパイラ同士の間でかなり異なる場合があるため）、かかる詳細は、分かりやすくするために、かつ一般性のために省略される。
【００７８】
さらに、このタイプの記述を使用すると、システムオンチップのそれぞれの構成要素は容易に記述されるため、システムオンチップのシステム全体の記述は、（構成要素同士の間の相互接続の記述、構成要素間依存の記述など、並びにそれらの様々な組合せを含めて）個々の構成要素の記述を組み合わせることによって取得されることが可能である。即ち、ＮＳＤＬは、システムオンチップ構成を記述する（かつ、従って、テストする）際にかなりの柔軟性を提供する。
【００７９】
本明細書で説明されるように、システムオンチップのスキャンパスの一部を形成する一般的な構成要素を記述することが可能であることに加えて、ＮＳＤＬは、システムオンチップのスキャンパスに対する動的変更を可能にするデバイスを記述することも可能である。このタイプのデバイスは、ＮＳＤＬ用語において「クロスロードデバイス」と呼ばれる。クロスロードデバイスの一般的な表示は、図６に関して示され、かつ説明される。
【００８０】
図６は、クロスロードデバイスの表示のハイレベルブロック図を示す。詳細には、クロスロードデバイス表示６００は、システムオンチップのスキャンパスを動的に修正することが可能なクロスロードデバイスを表す。クロスロードデバイスは、（アフルエント（ａｆｆｌｕｅｎｔｓ）と呼ばれる）１つ以上の入力を（トリビュタリ（ｔｒｉｂｕｔａｒｉｅｓ）と呼ばれる）１つ以上の出力に経路指定する。図６に示されるように、クロスロードデバイス表示６００は、（ｐａｔｈ＿ｉｎ＿０からｐａｔｈ＿ｉｎ＿ｍとして示される）複数のアフルエントと（ｐａｔｈ＿ｏｕｔ＿０からｐａｔｈ＿ｏｕｔ＿ｎとして示される）複数のトリビュタリとを含む。
【００８１】
システムオンチップをテストする際にクロスロードデバイスを使用するために、クロスロードデバイスは記述されなければならない。クロスロードデバイスの（１つ以上の）動的に可変なスキャンパスの記述は、特に静的なスキャンパスを処理するように設計されたＢＳＤＬ／ＨＳＤＬを使用することを達成することが（不可能でない場合）非常に困難である。対照的に、クロスロードデバイスの（１つ以上の）動的に可変なスキャンパスの記述は、テストツールによって容易に理解されるクロスロードデバイスのアルゴリズム記述を提供するＮＳＤＬによって容易に提供される。
【００８２】
ＮＳＤＬを使用したクロスロードデバイスの一般的な記述が続く。
【００８３】
IP <entity name> is
Generic(
precedent : string := "TDI";
following : string := "TDO";
affluent : string := "deselected";
tributary : string := "deselected";
); 
End <entity name>;
【００８４】
上に提示されたクロスロードデバイスの一般的な記述から理解されるように、汎用パラメータ「ａｆｆｌｕｅｎｔ」及び「ｔｒｉｂｕｔａｒｙ」は、階層化スキャンパスにアクセスするために使用されることが可能である。汎用パラメータ「ａｆｆｌｕｅｎｔ」及び「ｔｒｉｂｕｔａｒｙ」は、クロスロードデバイスがスキャンパス内の通過構成要素として単に動作する（即ち、アフルエントとトリビュタリはアクティブではなく、従って、スキャンパスを動的に修正しない）ように、当初「ｄｅｓｅｌｅｃｔｅｄ（選択解除された）」に設定される。クロスロードデバイスは、相対的な選択機能を呼び出すために「ａｆｆｌｕｅｎｔ」パラメータ及び「ｔｒｉｂｕｔａｒｙ」パラメータを使用することによって、スキャンパスを動的に修正するためにアクティブ化されることが可能である。
【００８５】
２つ以上のアフルエント及び／又は２つ以上のトリビュタリが存在する場合、アフルエント及び／又はトリビュタリのそれぞれは、独自に識別されなければならない。一実施形態では、例えば、簡単な順序数（例えば、アフルエントに関して、ａｆｆｌｕｅｎｔ＿０、ａｆｆｌｕｅｎｔ＿１など、トリビュタリに関して、ｔｒｉｂｕｔａｒｙ＿０、ｔｒｉｂｕｔａｒｙ＿１など）が使用され得る。このＮＳＤＬベースの記述を使用して、テストツールは、汎用パラメータを単に参照することによって、クロスロードデバイスを介した接続を理解することが可能である。
【００８６】
クロスロードデバイスの記述は、いかなるようにも生成され得る。一実施形態では、クロスロードデバイスの記述は、システムオンチップの１つの構成要素（又は、複数の構成要素）に対するアクセスを動的に制御するように適合されたアーキテクチャを経由して相互接続された入力接続のセット及び出力接続のセットの記述を使用して生成される。クロスロードデバイスの記述は、テストの際に使用するために格納され得る。プロセッサは、テストを実行する際に使用するために、（例えば、メモリから、別のシステムから、又は、かかる記述の任意のその他のソースから）クロスロードデバイスの記述を受信すること又は取り出すことが可能である。
【００８７】
本明細書で説明されるように、入力接続のセットは、（ＴＤＩからの方向に、システムオンチップのスキャンパスに接続された）スキャンパス入力接続と、（構成要素アクセス入力接続として示される）構成要素に対する少なくとも１つの接続とを含み、出力接続のセットは、（ＴＤＯに向けた方向に、システムオンチップのスキャンパスに接続された）スキャンパス出力接続と、（構成要素アクセス出力接続として示される）構成要素に対する少なくとも１つの接続とを含む。
【００８８】
一実施形態では、入力接続のセットは、（スキャンパス入力接続に関する）「ｐｒｅｃｅｄｅｎｔ」パラメータと、（１つ以上の構成要素アクセス入力接続に関する）１つ以上の「ａｆｆｌｕｅｎｔ」パラメータとを使用して指定される。一実施形態では、出力接続のセットは、（スキャンパス出力接続に関する）「ｆｏｌｌｏｗｉｎｇ」パラメータと、（１つ以上の構成要素アクセス出力接続に関する）１つ以上の「ａｆｆｌｕｅｎｔ」パラメータとを使用して指定される。
【００８９】
クロスロードデバイスは、システムスキャンパスをいかなるようにも動的に修正することが可能である。このアーキテクチャは、構成要素を経由して、入力接続のセットのうちのいくつかを出力接続のセットのうちのいくつかと動的に接続するための任意のアーキテクチャであってよく、この場合、クロスロードデバイスは、構成要素をシステムスキャンパスに加えるために選択される。例えば、このアーキテクチャは、切替アーキテクチャ、バスアーキテクチャ、ネットワークアーキテクチャなどであり得る。
【００９０】
一実施形態では、クロスロードデバイスの記述は、ツールをテストすることによって理解されているように適合された、少なくとも１つの構成規則（ｃｏｍｐｏｓｉｔｉｏｎａｌ  ｒｕｌｅ）を含むアルゴリズム記述である。クロスロードデバイスの記述は、（例えば、「ａｆｆｌｕｅｎｔ」パラメータ及び「ｔｒｉｂｕｔａｒｙ」パラメータを修正することによって）構成要素をスキャンパスに動的に加え、構成要素をスキャンパスから動的に除去するように動的に修正されることが可能である。
【００９１】
システムオンチップテストにおいてテストリソースを記述するためにＮＳＤＬを使用することは、クロスロードデバイスがシステムオンチップテストにおいて使用されることを可能にするように、多くの異なるクロスロードデバイスが記述されることを可能にする。ＮＳＤＬによって記述され得る異なるクロスロードデバイスは、３つの広い範疇にグループ化され得る。詳細には、クロスロードデバイスは、「有線」接続、「トランザクション」接続、又は「有線トランザクション」接続を表すことが可能である。
【００９２】
「有線」クロスロードデバイスは、システムオンチップのスキャンパス内に基本的に有線接続される（かつ、必要に応じて、選択又は選択解除され得る）クロスロードデバイスである。「有線」クロスロードデバイスは、切替に類似した形で動作する（即ち、接続は、必要に応じて、アフルエントとトリビュタリとの間で動的にプログラムされることが可能である）。「有線」クロスロードデバイスのスキャンパスはシステムオンチップのシステムスキャンパス内に有線接続されるため、「有線」クロスロードデバイスのスキャンパスは、明示的に選択解除される必要がある。「有線」クロスロードデバイスの第１の実施例（詳細には、Ｐ１６８７ハードウェア提案の一部である、計器選択ビット（ＳＩＢ）構成要素）が図８に示され、かつ説明される。「有線」クロスロードデバイスの第２の実施例は、図９に示され、かつ説明される。
【００９３】
「トランザクション」クロスロードデバイスは、一時的な接続（即ち、特定のトランザクションを表す接続）をサポートするクロスロードデバイスである。「トランザクション」クロスロードデバイスは、任意のアーキテクチャ（例えば、バス、ネットワークオンチップなど）として動作することが可能である。トランザクションは、「トランザクション」クロスロードデバイスのアーキテクチャによってサポートされ得る任意のトランザクション（例えば、バスアーキテクチャにおけるバスアクセス、ネットワークアーキテクチャにおけるルーティングなど）であり得る。「トランザクション」クロスロードデバイスのスキャンパスはトランザクションのときだけアクティブであるため、「トランザクション」クロスロードデバイスのスキャンパスは、明示的に選択解除される必要はない。「トランザクション」クロスロードデバイスの実施例は、図１０に示され、かつ説明される。
【００９４】
「有線」クロスロードデバイスにおいて、少なくとも１つの構成要素アクセス入力接続及び少なくとも１つの構成要素アクセス入力接続は、有線接続である。従って、（１つ以上の）構成要素アクセス入力接続及び（１つ以上の）構成要素アクセス出力接続は、異なる物理接続である。「トランザクション」クロスロードデバイスにおいて、少なくとも１つの構成要素アクセス入力接続及び少なくとも１つの構成要素アクセス入力接続は、複数のトランザクションをサポートするために、１つの物理接続が使用され得るようなトランザクション接続である（即ち、（１つ以上の）構成要素アクセス入力接続及び（１つ以上の）構成要素アクセス出力接続は、同じ物理接続を共有することが可能であるが、異なるトランザクション接続と見なされ得る）。
【００９５】
ＢＳＤＬ／ＨＳＤＬを使用すると、特定の「有線」クロスロードデバイス（即ち、ＳＩＢ構成要素）を記述することが可能であるものの、この記述は非常に困難である。さらに、ＢＳＤＬ／ＨＳＤＬを使用した、より複雑な「有線」クロスロードデバイスの記述は、可能でない場合がある。さらに、ＢＳＤＬ／ＨＳＤＬを使用した「トランザクション」クロスロードデバイス及び「有線トランザクション」クロスロードデバイスの記述は、可能でない可能性が高い。従って、このために、Ｐ１６８７において標準化されているクロスロードデバイスだけがＳＩＢ構成要素である。
【００９６】
対照的に、ＮＳＤＬを使用すると、任意の「有線」クロスロードデバイス、「トランザクション」クロスロードデバイス、及び「有線トランザクション」クロスロードデバイスの記述が明らかにサポートされ、テストツールによって容易に解釈される。確かに、事実上、システムオンチップのスキャンパスを動的に修正することが可能な、どんな複雑さのいかなるクロスロードデバイスも、ＮＳＤＬを使用して記述されることが可能である。ＮＳＤＬの能力を例示するために、クロスロードデバイス（及び、ＮＳＤＬを使用して表現されるそのそれぞれの記述）の少数の例は、本明細書において、図７〜１０に関して提供される。
【００９７】
図７は、システムオンチップのスキャンパスを動的に修正するための、汎用クロスロードデバイスの使用のハイレベルブロック図を示す。図７に示されるように、システムオンチップ７００は、汎用クロスロードデバイス７１０を含むスキャンパスを含む。スキャンパスは、２つの固定スキャンパス部分（即ち、常にスキャンパス内に含まれることが意図される部分）と、オプションのスキャンパス部分（即ち、クロスロードデバイス７１０によってスキャンパス内に動的に含まれること、及びスキャンパス内から動的に除去されることが可能な部分）とを含む。
【００９８】
図７に示されるように、システムオンチップ７００のスキャンパスにおいて、テストアクセス入力（ＴＤＩ）は、（一連のバウンダリスキャンセルを含む）第１の固定スキャンパス部分に結合され、第１の固定スキャンパス部分は、クロスロードデバイス７１０の第１の入力（即ち、先行部分）に結合され、クロスロードデバイス７１０の第１の出力（即ち、後続部分）は、第２の固定スキャンパス部分に結合され、第２の固定スキャンパス部分は、テストアクセス出力（ＴＤＯ）に結合される。
【００９９】
クロスロードデバイス７１０は、システムオンチップ７００のスキャンパスに対するオプションのスキャンパス部分の動的な（選択的な）組込みを可能にする。詳細には、クロスロードデバイス７１０は、第１の固定スキャンパス部分の出力をオプションのスキャンパス部分の入力に結合するために選択され得る第２の出力（即ち、トリビュタリ）を含み、オプションのスキャンパス部分の出力を第２の固定スキャンパス部分の入力に結合するために選択され得る第２の入力（即ち、アフルエント）を含む。
【０１００】
クロスロードデバイス７１０は、入出力の特定の組合せを選択すること／選択解除することによって、スキャンパスが動的に修正されることを可能にする。クロスロードデバイス７１０の第２の出力及び第２の入力が選択解除されるとき、スキャンパスは、ＴＤＩ、ＳＣＡＮ＿４＿ＢＩＴ＿０、ＢＳ＿０、ＢＳ＿１、クロスロードデバイス７１０、ＢＳ＿２、ＴＤＯである。クロスロードデバイス７１０の第２の出力及び第２の入力が選択されるとき（即ち、第１の入力が第２の出力に接続されて、第２の入力が第１の出力に接続されるとき）、スキャンパスは、ＴＤＩ、ＳＣＡＮ＿４＿ＢＩＴ＿０、ＢＳ＿０、ＢＳ＿１、クロスロードデバイス７１０、ａｎｏｔｈｅｒ＿ＳＣＡＮ＿４＿ＢＩＴ、ＢＳ＿３、クロスロードデバイス７１０、ＢＳ＿２、ＴＤＯである。
【０１０１】
図８は、ＮＳＤＬを使用して記述され得る１つのクロスロードデバイスのハイレベルブロック図を示す。詳細には、図８は、ＳＩＢデバイス８００を示す。ＳＩＢデバイス８００は、（即ち、構成要素がスキャンパスに加えられるように）別の構成要素の選択を可能にする。
【０１０２】
ＳＩＢデバイスは、選択ビットによって制御される。選択ビットの値が「０」のとき、セルはアクティブではない（セルは、正にスキャンパスの内部のビットである）。選択ビットの値が「１」に設定されたとき、スキャンパスは、ポートＷＳＩｏ（即ち、トリビュタリ）を介して外部に経路指定され、ポートＷＳＯｉ（即ち、アフルエント）を介して内部に経路指定され、それによって、それらのポートが接続される任意のデバイスをスキャンパスに加える。
【０１０３】
（分かりやすくするために行番号を加えた状態で）ＳＩＢデバイス８００のＮＳＤＬベースの記述が続く。
【０１０４】
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;
【０１０５】
ＳＩＢデバイス８００の記述において、ライン６〜９は、内部レジスタ（即ち、ＳＩＢデバイス８００の場合、正に１ビットである、階層を処理するためにテストツールが必要とするビット）を宣言し、ライン１０〜１７は選択手順を示し、ライン１９〜２６は、（そのそれぞれの名前を使用してテストツールによって容易に識別される）選択解除手順を示す。
【０１０６】
記述の本体において、ＮＳＤＬの２つの役割を識別するのは容易である。即ち、（１）スキャンパスの修正、従って、ビットストリームはスライス処理によって表現され（ライン１４及び２３を参照）、（２）トポロジの修正は、（例えば、トポロジマッピングにおける「ｐｒｅｃｅｄｅｎｔ」及び「ｆｏｌｌｏｗｉｎｇ」の割当てに類似した形で）列の値を割り当てることによって行われる。
【０１０７】
図９は、ＮＳＤＬを使用して記述され得る１つのクロスロードデバイスのハイレベルブロック図を示す。詳細には、図９は、階層切替デバイス９００を示す。階層切替デバイス９００は、３つの入力アフルエントと２つの出力トリビュタリとを含む。３つのアフルエント及び２つのトリビュタリを有するとして示されるが、任意の数のアフルエント及びトリビュタリがサポートされ得る。
【０１０８】
（分かりやすくするために行番号を加えた状態で）階層切替デバイス９００のＮＳＤＬベースの記述が続く。
【０１０９】
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;
【０１１０】
階層切替デバイス９００の記述において、ライン３〜７は（それぞれに独自の名前が与えられている場合）アフルエント及びトリビュタリを宣言し、ライン１２〜１９は（即ち、切替マトリックスに類似した）内部スキャンパスを宣言し、ライン２１〜２６はいくつかのカスタムタイプを定義することによって、ＶＨＤＬ機能を十分に活用する（それによって、本質的に階層的な記述子に関する切替マトリックスになるものを作成する）。
【０１１１】
階層切替デバイス９００の記述において、「選択」手順（ライン２９〜５３）は、ビットストリーム修正を処理し、さらに、動的なスキャンパス修正を記述するために、ＶＨＤＬアルゴリズム機能（及び事前に定義されたカスタムタイプ）を処理する。機能のこれらのパラメータは、接続されることになる経路の順序数を指す。
【０１１２】
階層切替デバイス９００の記述から理解されるように、階層切替デバイス９００を介して接続を非アクティブにすることは、接続の両終端の選択解除を必要とせず、むしろ、接続の１つの終端だけの選択解除が接続の役目を果たす。従って、選択解除は、２つの手順によって処理されることが可能である。即ち、（１）「ｄｅｓｅｌｅｃｔ＿ａｆｆｌｕｅｎｔ」は、（順序数をパラメータとして使用して）アフルエントの選択解除を可能にし、（２）「ｄｅｓｅｌｅｃｔ＿ｔｒｉｂｕｔａｒｙ」は、（順序数をパラメータとして使用して）トリビュタリの選択解除を可能にする。
【０１１３】
図１０は、ＮＳＤＬを使用して記述され得る１つのクロスロードデバイスのハイレベルブロック図を示す。詳細には、図１０は、バスアーキテクチャデバイス１０００を示す。バスアーキテクチャデバイス１０００は、構成要素バス１０１２を経由して相互接続されたマスターゲートウェイ構成要素１０１１と、５つのスレーブ構成要素１０１３Ａ〜１０１３Ｅ（集合的に、スレーブ構成要素１０１３）とを含む。
【０１１４】
バスアーキテクチャデバイス１０００において、スレーブ構成要素１０１２のそれぞれには、スレーブ構成要素１０１２にアクセスするためにゲートウェイ構成要素１０１１によって使用されるアドレスが割り当てられる。ゲートウェイ構成要素１０１１がスレーブ構成要素１０１２アクセスすることを可能にするために、ある種のプロトコルがバスアーキテクチャデバイス１０００によってサポートされなければならないが、バスアーキテクチャデバイス１０００のＮＳＤＬベースの記述は、そのプロトコルに関するどんな情報も必要としない。
【０１１５】
（分かりやすくするために行番号を加えた状態で）バスアーキテクチャデバイス１０００のＮＳＤＬベースの記述が続く。
【０１１６】
ゲートウェイパッケージの記述。
【０１１７】
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;
【０１１８】
バスアーキテクチャデバイス１０００のＮＳＤＬベースの記述は、より良好な可読性を目指して２つのファイルに分けられている。詳細には、バスアーキテクチャデバイス１０００のＮＳＤＬベースの記述は、以下の部分に分けられる。即ち、（１）バスアーキテクチャデバイス１０００に関するタイプ宣言のすべてをホストするパッケージ、及び（２）バスアーキテクチャデバイス１０００の記述である。
【０１１９】
バスアーキテクチャデバイス１０００のＮＳＤＬベースの記述は、バスアーキテクチャデバイス１０００のバスプロトコルの実際の実装に関する情報を必要とせず、むしろ、ＮＳＤＬベースの記述は、バスアーキテクチャデバイス１０００内でトランザクションを開始するために求められるコマンドに関する情報だけを必要とする。トランザクションは、ＮＳＤＬベースの記述内に含まれた「ｓｅｌｅｃｔ＿ｔｒｉｂｕｔａｒｙ」機能及び「ｓｅｌｅｃｔ＿ａｆｆｌｕｅｎｔ」機能によって定義される。
【０１２０】
「ｓｅｌｅｃｔ＿ｔｒｉｂｕｔａｒｙ」機能（ライン３１〜３８）は、バスに「書込み」動作を命令するために、（カスタムタイプ及び機能を利用している）良好なレジスタに良好なアドレスを書き込む。「ｓｅｌｅｃｔ＿ａｆｆｌｕｅｎｔ」機能（ライン４０〜４７）は、バスから「読取り」動作を命令するために、（カスタムタイプ及び機能を利用している）良好なレジスタから良好なアドレスを読み取る。
【０１２１】
バスアーキテクチャデバイス１０００は、「トランザクション」クロスロードデバイスであるため、バスアーキテクチャデバイス１０００のＮＳＤＬベースの記述は、「選択」手順又は「選択解除」手順を必要とせず、むしろ、テストツールが、その接続は一回だけアクティブになり、次いで、アフルエント及びトリビュタリは「選択解除された」に設定し戻されることになることを知るように、「選択」手順及び「選択解除」手順は、「トランザクション」として印される。
【０１２２】
本明細書で説明されるように、バスアーキテクチャデバイス１０００などのクロスロードデバイス（及び、その他のクロスロードデバイス）は、完全にＰ１６８７標準の現在の機能の範囲外である。バスアーキテクチャデバイス１０００などのクロスロードデバイス（及び、その他のクロスロードデバイス）の記述は、ＮＳＤＬの使用によってだけ可能にされる。
【０１２３】
本明細書で説明されるように、システムオンチップは、ＮＳＤＬを使用して記述されることが可能であり、さらに、システムオンチップのシステムレベルの記述は、システムオンチップをテストするためにテストツールによって利用されることが可能である。ＮＳＤＬを使用して記述されるシステムオンチップをテストするように適合された例示的なテストツールは図１１に関して示され、かつ説明される。さらに、ＮＳＤＬを使用して記述されるシステムオンチップのテストは、図１２〜図２０を参照してよりよく理解され得る。
【０１２４】
図１１は、図１のテスト環境のテストシステムのハイレベルブロック図を示す。詳細には、ＴＳ１２０は、プロセッサ１１１０と、メモリ１１２０と、入出力（Ｉ／Ｏ）インターフェース１１３０と、サポート回路１１４０とを含む。プロセッサ１１１０は、メモリ１１２０、Ｉ／Ｏインターフェース１１３０、及びサポート回路１１４０のそれぞれに結合される。プロセッサ１１１０は、本明細書で示され、かつ説明される様々なテスト機能を提供するために、メモリ１１２０、Ｉ／Ｏインターフェース１１３０、及びサポート回路１１４０と協働する。
【０１２５】
図１１に示されるように、メモリ１１２０は、システムテストを実行する際に使用するように適合されたリソースを格納する。詳細には、メモリ１１２０は、システムテストを実行する際に使用するように適合されたテストツール１１２１、テストリソース記述１１２２、及びテストデータ１１２３を格納する。メモリ１１２０は、（その他１１２４として示される）システムテストを実行するために使用され得る任意のその他のプログラム、記述、データなどを格納することが可能である。
【０１２６】
テストツール１１２１は、システムテストを制御する。テストツール１１２１は、１つ以上のテスト手順を含み得る。これらのテスト手順は、１つ以上のテストコンパイラによって生成され得る。これらのテスト手順は、１つ以上のシステムをテストするために実行され得る。テストツール１１２１は、システムテストを制御するために使用され得る任意のその他の手順、プログラムなどを含む。
【０１２７】
テストリソース記述１１２２は、構成要素記述、システム記述など、並びにそれらの様々な組合せなど、システムテストにおいて使用するように適合された任意の記述を含み得る。テストリソース記述１１２２は、システムトポロジの記述を含み得る。テストリソース記述１１２２は、システムオンチップテストを実行する際に使用するために処理されることが可能な任意のその他の記述を含み得る。
【０１２８】
テストリソース記述１１２２は、異なるタイプのテストリソースに関して記述テンプレートが維持され得るように、１つ以上のライブラリを含むことが可能である（従って、必要に応じて、アクセス及び修正されることが可能である）。これらのテンプレートは、構成要素レベルのテンプレート（例えば、あるＩＰに関するテンプレート、ある計器に関するテンプレートなど）、システムトポロジテンプレートなど、並びにそれらの様々な組合せであり得る。
【０１２９】
テストデータ１１２３は、システムテストを実行する際に使用するように適合された任意のデータを含む。テストデータ１１２３は、入力ビットストリームデータ、出力ビットストリームデータ（例えば、テストシステムによって決定された、期待される出力ビットストリーム、及びシステムオンチップから捕捉された実際の出力ビットストリーム）など、並びにそれらの様々な組合せを含み得る。テストデータ１１２３は、テストされているシステムに適用されることが可能であり、かつ／又はテストされているシステムから回復されることが可能な任意のその他のデータを含み得る。
【０１３０】
Ｉ／Ｏインターフェース１１３０は、ＴＳ１２０からＳ−ｏ−Ｃ１１０にインターフェースを提供する。Ｉ／Ｏインターフェース１１３０は、ＪＴＡＧベースのインターフェースである。Ｉ／Ｏインターフェース１１３０は、それによって、プロセッサ１１１０によるテスト手順の実行に応答して、ＴＳ１２０が入力ビットストリームをＳ−ｏ−Ｃ１１０に適用することが可能なＴＤＩインターフェースをサポートする。Ｉ／Ｏインターフェース１１３０は、それによって、プロセッサ１１１０によるテスト手順の実行に応答して、ＴＳ１２０が実際の出力ビットストリームをＳ−ｏ−Ｃ１１０から回復することが可能なＴＤＯインターフェースをサポートする。
【０１３１】
本明細書において、１つのＴＤＩインターフェース及び１つのＴＤＯインターフェースに関して主に示され、かつ説明されるが、Ｉ／Ｏインターフェース１１３０は、異なるシステムオンチップ構成をテストするために求められる又は所望される任意の数及び任意の（１つ以上の）タイプのテストインターフェースをサポートすることが可能である。例えば、ＪＴＡＧベースのテストの場合、Ｉ／Ｏインターフェース１１３０は、ＴＣＫ信号、ＴＭＳ信号、及び、オプションで、ＴＲＳＴ信号に関するインターフェースをサポートすることも可能である。
【０１３２】
サポート回路１１４０は、システムテストを実行する際に使用され得る任意の追加の回路を含む。例えば、サポート回路１１４０は、追加のプロセッサ、追加のメモリ、追加のインターフェース、テストビットストリーム生成回路、テストビットストリーム処理回路など、並びにそれらの様々な組合せを含み得る。サポート回路１１４０は、テストシステム１２０によって求められる場合がある任意の追加の回路を含む。
【０１３３】
プロセッサ１１４０は、本明細書で説明される様々なシステムオンチップテスト機能を提供するために、メモリ１１２０、Ｉ／Ｏインターフェース１１３０、及びサポート回路１１４０と協働する。
【０１３４】
プロセッサ１１４０は、記述（例えば、機能レベルの記述、構成要素記述など）を生成する。プロセッサ１１４０は、（例えば、構成要素相互接続を解析するため、システム記述を生成するためなどに構成要素記述を使用して）記述を生成するために、テストリソース記述１１２２からの記述を処理する。プロセッサ１１４０は、テストリソース記述１１２２の一部として、それらの記述を格納する。
【０１３５】
プロセッサ１１４０は、システムオンチップをテストするためのテスト手順を生成して、テストツール１１２１の一部としてそれらのテスト手順を格納する。プロセッサ１１４０は、テストツール１１２１からのテスト手順を使用して、テストデータを生成して、テストデータ１１２３の一部としてそのテストデータを格納する。
【０１３６】
プロセッサは、本明細書で説明される任意のその他のシステムオンチップテスト機能を提供するために、メモリ１１２０、Ｉ／Ｏインターフェース１１３０、及びサポート回路１１４０と協働することが可能である。
【０１３７】
システムオンチップのＮＳＤＬベースの記述を使用したシステムオンチップのテストは、システムオンチップのＮＳＤＬベースの記述を使用してシステムオンチップをテストするための方法を提供する図１２〜１４に関してよりよく理解され得る。システムオンチップのＮＳＤＬベースの記述を使用したシステムオンチップのテストは、（システムオンチップの１つの構成要素のテストを例示的に示す）図１５及び図１６、（システムオンチップの構成要素をテストするための方法を提供する）図１７、及び（システムオンチップのテストを例示的に示す）図１８〜図２０に関してさらに理解され得る。
【０１３８】
図１２は、ＪＴＡＧ接続を介してシステムをテストするために、図１のテストシステムによって実行される例示的な方法を示す。直列的に実行されているとして示され、かつ説明されるが、図１２の方法１２００のステップの少なくとも一部は、同時に、又は、図１２に関して示され、かつ説明されたのとは別の順序で実行されることが可能である。方法１２００は、ステップ１２０２で始まり、ステップ１２０４に進む。
【０１３９】
ステップ１２０４において、システムオンチップに関するテストビットストリームが決定される。テストビットストリームは、入力ビットストリームと、期待される出力ビットストリームとを含む。テストビットストリームは、本明細書で説明されるいずれかの形で決定されることが可能である。一実施形態では、テストビットストリームは、図１３に関して示され、かつ説明される方法を使用して決定される。
【０１４０】
ステップ１２０６において、入力ビットストリームは、システムオンチップに適用される。入力ビットストリームは、システムオンチップのＴＤＩインターフェースを経由してシステムオンチップに適用されることが可能である。ステップ１２０８において、システムオンチップから実際の出力ビットストリームが捕捉される。実際の出力ビットストリームは、システムオンチップのＴＤＯインターフェースを経由してシステムオンチップから捕捉され得る。
【０１４１】
ステップ１２１０において、実際の出力ビットストリーム及び期待される出力ビットストリームを使用して、テスト結果が決定される。テスト結果は（例えば、テストの間に何らかのエラーが存在したか否かを決定するために）実際の出力ビットストリームを期待される出力ビットストリームと比較することによって決定され得る。ステップ１２１２において、テスト結果が格納される。
【０１４２】
ステップ１２１４において、方法１２００は終了する。
【０１４３】
図１３は、ＪＴＡＧ接続を介してシステムをテストするために、図１のテストシステムによって実施される例示的な方法を示す。詳細には、図１３の方法１３００は、システムオンチップをテストする際に使用するためのテストビットストリームを決定するための方法を含む。直列的に実行されているとして示され、かつ説明されるが、図１３の方法１３００のステップの少なくとも一部は、同時に、又は、図１３に関して示され、かつ説明されたのとは別の順序で実行されることが可能である。方法１３００は、ステップ１３０２で始まり、ステップ１３０４に進む。
【０１４４】
ステップ１３０４において、（本明細書で、システム記述として示される）システムオンチップの記述が決定される。システム記述は、本明細書で説明されるいずれかの形で決定されることが可能である。システム記述は、システムオンチップのＮＳＤＬベースの記述である。一実施形態では、システム記述は、図１４に関して示され、かつ説明される方法を使用して決定される。
【０１４５】
ステップ１３０６において、システムオンチップをテストするためのテストビットストリームがシステムオンチップのシステム記述から決定される。テストビットストリームは、システムオンチップに適用されることになる入力ビットストリームと、システムオンチップから捕捉された実際の出力ビットストリームと比較されることが可能な期待される出力ビットストリームとを含む。 
【０１４６】
ステップ１３０８において、方法１３００は終了する。
【０１４７】
図１４は、ＪＴＡＧ接続を介してシステムをテストするために、図１のテストシステムによって実行される例示的な方法を示す。詳細には、図１４の方法１３０４は、システムオンチップのシステム記述を決定するための方法を含む。直列的に実行されているとして示され、かつ説明されるが、図１４の方法１３０４のステップの少なくとも一部は、同時に、又は、図１４に関して示され、かつ説明されたのとは別の順序で実行されることが可能である。方法１３０４は、ステップ１４０２で始まり、ステップ１４０４に進む。
【０１４８】
ステップ１４０４において、システムオンチップの構成要素が識別される。システムオンチップの構成要素は、いかなるようにも識別され得る。一実施形態では、システムオンチップの構成要素は、システムオンチップが供給されたテストリソースの一部として識別される。一実施形態では、システムオンチップの構成要素は、システムオンチップを解析することによって識別される。システムオンチップの構成要素は、いずれかのその他の形で識別されることも可能である。
【０１４９】
ステップ１４０６において、システムオンチップの構成要素のそれぞれに関して構成要素記述が決定される。構成要素記述は、いかなるようにも決定され得る。
【０１５０】
構成要素記述が事前に定義される一実施形態では、構成要素記述は、事前に定義された記述を単に読み取ることによって決定されることが可能である。構成要素記述が事前に設定されない一実施形態では、構成要素記述は、構成要素のそれぞれを解析することによって、オンザフライで定義されることが可能である。
【０１５１】
構成要素の記述は、構成要素の内部スキャンパスを指定する。一実施形態では、構成要素の記述は、レジスタ値の点から構成要素を表す。構成要素が複数の機能をサポートする、１つのかかる実施形態では、構成要素の機能のそれぞれは、レジスタ値の点から表されることが可能である。レジスタ値の点から構成要素を記述することは、図１５に関してよりよく理解され得る。構成要素記述はＮＳＤＬを使用して指定される。
【０１５２】
ステップ１４０８において、システムオンチップのトポロジが決定される。システムオンチップのトポロジは、システムオンチップの構成要素同士の間の相互接続を記述する。システムオンチップのトポロジは、システムオンチップの構成要素同士の間の相互接続を解析することによって決定される。
【０１５３】
ステップ１４１０において、システムオンチップのシステム記述が決定される。システム記述は、構成要素記述及びシステムトポロジを使用して決定される。システムオンチップのシステム記述は、システムオンチップのそれぞれの構成要素のそれぞれの内部スキャンパスと、システムオンチップの構成要素同士の間の相互接続とを含めて、システムオンチップのスキャンパスを表す。システム記述は、システムオンチップを記述するために使用されることが可能な任意のその他の情報を含み得る。ステップ１４１２において、システムオンチップのシステム記述が格納される。
【０１５４】
ステップ１４１４において、方法１３０４は終了する。
【０１５５】
図１５は、図２のシステムオンチップの構成要素のうちの１つをテストするためのテスト手順に関するレジスタ値を決定するための構成要素の記述の使用を示す。詳細には、（分かりやすくするために省略された）Ｓ−ｏ−Ｃ１１０の構成要素２１０Ａの記述は、Ｓ−ｏ−Ｃ１１０の構成要素２１０Ａに関する（レジスタ値１５１０として示される）レジスタ値のセットに変換される。構成要素２１０Ａのレジスタ値１５１０は、構成要素２１０Ａによってサポートされる３つの機能のそれぞれに関するレジスタ値を含む。構成要素２１０Ａによってサポートされる３つの機能のそれぞれに関するレジスタ値は、テスト構成要素２１０Ａに関して使用されるテストビットストリームをテストに関する値を決定するために処理されることが可能である。
【０１５６】
図１５に示されるように、構成要素２１０Ａの機能は、構成要素２１０Ａが構成される構成要素レジスタＡ０、Ａ１、Ａ２のレジスタ値の点から説明される。第１の機能は、「０００」、４サイクル待機、「００１」として定義される。第２の機能は、「１１１」、１サイクル待機、「０１０」、５サイクル待機、「１０１」として定義される。第３の機能は、「０００」、２サイクル待機、「１００」、１０サイクル待機、「０００」として定義される。即ち、レジスタ値１５１０は、機能から構成要素２１０Ａに関する構成要素レジスタ値へのマッピングを指定する。この記述（即ち、機能からレジスタ値へのマッピング）は、テストビットストリームを決定するために、構成要素の記述が処理され得る容易さを示す。
【０１５７】
図１５に示されるように、構成要素２１０Ａの機能のそれぞれに関して、レジスタ値１５１０は（１）その機能に関して、構成要素レジスタがどのように書き込まれ、かつ読み取られるか、及び（２）その機能に関して、構成要素レジスタ値がどのように解釈されなければならないかを示す。従って、ＮＳＤＬなどの記述言語において、構成要素の記述は、システムオンチップの関連で、構成要素をテストするためのテスト手順において使用するためのレジスタ値に変換されることが可能な構成要素の機能の記述を含む。
【０１５８】
機能からレジスタ値へのマッピングを説明する際に分かりやすくするために省略されているが、ＮＳＤＬの点から、構成要素２１０Ａの特定の記述は、図３〜図５に関して示され、かつ説明されたように構成されたアルゴリズム記述である。構成要素２１０ＡのこのＮＳＤＬベースの記述は、機能からレジスタ値へのマッピングが決定されることを可能にする。分かりやすくするために省略されているが、Ｓ−ｏ−Ｃ１１０のその他の構成要素（即ち、構成要素２１０Ｂ〜構成要素２１０Ｅ）のそれぞれに関して、類似の記述が定義され得る。
【０１５９】
図１６は、図２のシステムオンチップの構成要素のうちの１つをテストするためのテスト手順に関するテストビットストリームを決定するための、図２のシステムオンチップの構成の記述の使用を示す。図１６に示されるように、テストビットストリーム１６１０は、Ｓ−ｏ−Ｃ１１０の少なくとも一部をテストする際に使用するために生成される。詳細には、テストビットストリーム１６１０は、Ｓ−ｏ−Ｃ１１０のＴＤＩポートに適用される入力ビットストリーム１６１１Ｉと、Ｓ−ｏ−Ｃ１１０のＴＤＯポートから受信される出力ビットストリーム１６１１Ｏとを含む。
【０１６０】
テストビットストリーム１６１０は、（ＮＳＤＬを使用して指定される）Ｓ−ｏ−Ｃ１１０の記述を使用して、ＴＳ１２０によって生成される。（本明細書において、システム記述とも呼ばれる）Ｓ−ｏ−Ｃ１１０の記述は、Ｓ−ｏ−Ｃ１１０のテストリソースの記述（例えば、構成要素２１０の記述、構成要素相互接続２２０の記述など、並びにそれらの様々な組合せ）を含む。Ｓ−ｏ−Ｃ１１０のシステム記述は、Ｓ−ｏ−Ｃ１１０のトポロジ、従って、Ｓ−ｏ−Ｃ１１０のシステムスキャンパスを記述する。
【０１６１】
本明細書で説明されるように、ＴＳ１２０は、Ｓ−ｏ−Ｃ１１０の（システムスキャンパスの記述を提供する）システム記述に基づいてテストビットストリーム１６１０を生成する。従って、Ｓ−ｏ−Ｃ１１０のシステム記述はＳ−ｏ−Ｃ１１０のシステムスキャンパスの記述を提供するため、ＴＳ１２０は、Ｓ−ｏ−Ｃ１１０に関して生成されたテストビットストリーム１６１０のどの部分が、Ｓ−ｏ−Ｃ１１０のシステムスキャンパスのどの部分に対応するのかを決定することが可能である。これは、図１６に示される。
【０１６２】
図１６に示されるように、入力ビットストリーム１６１１Ｉ内及び出力ビットストリーム１６１１Ｏ内の特定のビット位置（即ち、構成要素２１０Ａに対応するビット位置）が突き止められている。構成要素２１０Ａ内のレジスタに対応する入力ビットストリーム１６１１Ｉ内及び出力ビットストリーム１６１１Ｏ内の特定の位置の位置決定は、（Ｓ−ｏ−Ｃ１１０内の構成要素２１０のそれぞれの位置を含めて、Ｓ−ｏ−Ｃ１１０のシステムスキャンパスに関する情報を提供する）Ｓ−ｏ−Ｃ１１０のＮＳＤＬベースの記述の使用によって可能にされる。
【０１６３】
構成要素レジスタからビットストリームへの変換を説明する際に、分かりやすくするために省略されているが、ＮＳＤＬの点から、Ｓ−ｏ−Ｃ１１０の特定の記述は、Ｓ−ｏ−Ｃ１１０のトポロジ、従って、Ｓ−ｏ−Ｃ１１０のシステムスキャンパスを記述するアルゴリズム記述である。Ｓ−ｏ−Ｃ１１０のこのＮＳＤＬベースの記述は、レジスタ値からビットストリームへの変換が実行されるのを可能にする。
【０１６４】
図１７は、ＩＪＴＡＧ／ＮＳＤＬフレームワーク内のシステムの構成要素をテストするために、図１のテストシステムによって実行される例示的な方法を示す。詳細には、図１７の方法１７００は、システムオンチップの１つの構成要素をテストするための方法を含む。直列的に実行されているとして示され、かつ説明されるが、図１７の方法１７００のステップの少なくとも一部は、同時に、又は、図１７に関して示され、かつ説明されたのとは別の順序で実行されることが可能である。方法１７００は、ステップ１７０２で始まり、ステップ１７０４に進む。
【０１６５】
ステップ１７０４において、システムオンチップの構成要素が選択される（即ち、テストされることになるシステムオンチップの構成要素として選択される）。
【０１６６】
ステップ１７０６において、選択された構成要素の記述が取得される。
【０１６７】
ステップ１７０８において、構成要素によってサポートされるそれぞれの機能に関して、機能は、その構成要素のレジスタに関連するレジスタ値に変換される。構成要素の機能は、構成要素の記述を使用して、レジスタ値に変換される。
【０１６８】
ステップ１７１０において、システムオンチップのシステム記述が取得される。システムオンチップのシステム記述は、システムオンチップの構成要素の記述及びシステムオンチップのトポロジの記述から決定された、システムオンチップのシステムスキャンパスを指定する。システム記述は、システムオンチップに関するテストビットストリームを指定するために使用されることが可能である。
【０１６９】
ステップ１７１２において、システムオンチップのテストビットストリーム内の選択された構成要素の位置がシステムオンチップのトポロジを使用して決定される。テストビットストリーム内の選択された構成要素の位置は、入力ビットストリーム内の１つ以上のビット位置及び実際の出力ビットストリーム内の１つ以上のビット位置を指定する。
【０１７０】
ステップ１７１３（オプションのステップ）において、（即ち、構成要素に対するアクセスがクロスロードデバイスによって制御される場合）クロスロードデバイスが駆動される。クロスロードデバイスは、クロスロードデバイスのアルゴリズム記述を処理することによって駆動される。クロスロードデバイスを駆動させることは、関連する構成要素をシステムオンチップのスキャンパスに動的に加えるために、クロスロードデバイスが選択されることを可能にする。構成要素に対するアクセスが、もはや求められなくなった後で、クロスロードデバイスは、次いで、関連する構成要素をシステムオンチップのスキャンパスから除去するために選択解除されることが可能である。構成要素に対するアクセスはクロスロードデバイスによって制御されてよく、又はクロスロードデバイスによって制御されなくてもよいため、このステップはオプションである。
【０１７１】
ステップ１７１４において、レジスタ値が入力ビットストリームの突き止められた位置内に挿入される。次いで、入力ビットストリームは、（即ち、システムオンチップの少なくとも一部をテストするために）システムオンチップの入力テストアクセスポートに適用されることが可能である。ステップ１７１６において、結果値が出力ビットストリームの突き止められた位置から（即ち、システムオンチップの出力テストアクセス部分からテストシステムによって捕捉された出力ビットストリームから）回復される。回復された結果値は、次いで、様々なテスト結果を決定するために処理されることが可能である。
【０１７２】
ステップ１７１８において、方法１７００は終了する。
【０１７３】
図１８は、例示的なシステムオンチップのハイレベルブロック図を示す。図１８に示されるように、システムオンチップ１８００は、フィルタと、アナログ・デジタル変換器（ＡＤＣ）、デジタル・アナログ変換器（ＤＡＣ）、及びアンテナアクセスユニット（ＡＡＵ）を含む、３つの計器とを含む。ＡＡＵは、アナログ・デジタル・アナログ変換をサポートする。このフィルタは、（ＲＸ＿ｏｕｔとして示される）ＡＤＣに対する出力接続と、（ＴＸ＿ｉｎとして示される）ＤＡＣからの入力接続とをサポートする。このフィルタは、（ＡＮ＿ｉｎｏｕｔとして示される）ＡＡＵとの双方向接続をサポートする。
【０１７４】
図１８に示されるように、３つの計器に対するアクセスはスキャンパスを経由してＴＤＩ入力からＴＤＯ出力に提供される。このスキャンパスはアクチュエータレジスタと３つのＳＩＢセル（それぞれの計器がスキャンパスに加えられるのを可能にする３つの計器のそれぞれに関して１つ）のセットとを含む。アクチュエータレジスタはフィルタとインターフェースをとる。第１のＳＩＢセルは（アフルエント及びトリビュタリを経由して）ＡＤＣ計器に対するアクセスを提供する。第２のＳＩＢセルは（アフルエント及びトリビュタリを経由して）ＤＡＣ計器に対するアクセスを提供する。第３のＳＩＢセルは（アフルエント及びトリビュタリを経由して）ＡＡＵ計器に対するアクセスを提供する。
【０１７５】
スキャンパスの記述が続く。ＴＤＩ入力はアクチュエータレジスタのセットの入力に結合される。アクチュエータレジスタのセットの出力は第１のＳＩＢセルの入力に結合される。第１のＳＩＢの出力は第２のＳＩＢセルの入力に結合される。第２のＳＩＢセルの出力は第３のＳＩＢセルの入力に結合される。第３のＳＩＢセルの出力はＴＤＯ出力に結合される。ＴＤＩ入力からＴＤＯ出力へのこのシーケンスは、ＳＩＢのそれぞれが選択解除されたとき（即ち、そのそれぞれの計器がスキャンパスに加えられるように、ＳＩＢのいずれも「選択され」ない場合）システムオンチップ１８００のスキャンパスを形成する。
【０１７６】
図１８に示されるように、３つの計器のそれぞれは、それらの３つの計器に関連するそれぞれのＳＩＢセルのアフルエントインターフェース及びトリビュタリインターフェースを選択することによって、スキャンパスに容易に加えられることが可能である。例えば、第１のＳＩＢは、ＡＤＣ計器がテストのためのスキャンパスに加えられることが可能なように選択され得る。例えば、第１のＳＩＢ及び第３のＳＩＢは、ＡＤＣ計器及びＡＡＵ計器の両方がテストのためにスキャンパスに加えられることが可能なように選択され得る。本明細書で説明されるように、システムオンチップ１８００のＮＳＤＬベースの記述は、システムオンチップ１８００のテストを簡素化する。
【０１７７】
図１９は、図１８のシステムオンチップの構成要素のうちの１つをテストするためのテスト手順に関するレジスタビット値を決定するための構成要素の記述の使用を示す。詳細には、図１９は、（記述１９１０として示される）ＡＤＣ計器の記述の（レジスタ１９２０として示される）ＡＤＣ計器のレジスタに関連するレジスタ値へのマッピングを示す。図１９に示されるように、記述１９１０は、（スキャンパス記述１９１１として示される）スキャンパスの記述と、（機能アルゴリズム１９１２として示される）ＡＤＣ計器によって実行される機能のアルゴリズム表示とを含む。
【０１７８】
記述１９１０は、ＮＳＤＬベースの（アルゴリズム）記述である。スキャンパス記述１９１１は、（データレジスタ及び制御レジスタを含む）ＡＤＣ計器のレジスタを識別して、（例えば、「先行部分」、「後続部分」、及び長さ情報を識別して）レジスタがどのように構成されるかを記述する。機能アルゴリズム１９１２は、ＡＤＣ計器によって実行される機能の動作を記述する。記述１９１０から、テストツールは、ＡＤＣ計器をテストするために使用され得るビットストリーム値を容易に決定することが可能である。
【０１７９】
図２０は、図１８のシステムオンチップの構成の記述を決定するための、図１８のシステムオンチップの構成要素の記述の使用を示す。詳細には、図２０は、（トポロジ２０１０として示される）図１８のシステムオンチップのトポロジの記述を示す。トポロジ２０１０は、システムオンチップ１８００の構成要素（例えば、アクチュエータレジスタ、ＳＩＢ、及び計器）のそれぞれの入力及び出力のそれぞれの汎用マッピングを使用して指定される。
【０１８０】
例えば、アクチュエータレジスタの記述は、アクチュエータレジスタに対する入力がＴＤＩ入力（「ｐｒｅｃｅｄｅｎｔ」＝＞「ＴＤＩ」）であり、アクチュエータレジスタからの出力が、ＡＤＣ計器のＲＸ＿ｒｅｇｉｓｔｅｒに対するアクセスを可能にするため（ｆｏｌｌｏｗｉｎｇ＝＞「ＲＸ＿ｅｎａｂｌｅ」）、ＲＸ＿ｅｎａｂｌｅとして示される第１のＳＩＢであることを示す。即ち、アクチュエータレジスタ構成要素は、そのアクチュエータレジスタ構成要素がインターフェースをとる構成要素の点から記述される。
【０１８１】
例えば、第１のＳＩＢの記述（即ち、ＲＸ＿ｅｎａｂｌｅ 構成要素）は、ＲＸ＿ｅｎａｂｌｅ構成要素がアクチュエータレジスタに対する入力（ｐｒｅｃｅｄｅｎｔ＝＞「ａｃｔｕａｔｏｒ＿ｒｅｇｉｓｔｅｒ」）であり、第１のＳＩＢの出力が、ＤＡＣ計器のＴＸ＿ｒｅｇｉｓｔｅｒに対するアクセスを可能にするため（ｆｏｌｌｏｗｉｎｇ＝＞「ＴＸ＿ｅｎａｂｌｅ」）、ＴＸ＿ｅｎａｂｌｅとして示される第２のＳＩＢであることを示す。
【０１８２】
さらに、第１のＳＩＢはＡＤＣ計器に対するアクセスを可能にするため、第１のＳＩＢの記述は、ＡＤＣ計器に対するアクセスも記述する。詳細には、第１のＳＩＢの記述は、第１のＳＩＢからＡＤＣ計器へのアクセスが１つの入力（ａｆｆｌｕｅｎｔ＝＞「ＲＸ＿ｒｅｇｉｓｔｅｒ」）及び１つの出力（ｔｒｉｂｕｔａｒｙ＝＞「ＲＸ＿ｅｎａｂｌｅ」）を経由して可能にされることを示す。
【０１８３】
これらの例から、システムオンチップのトポロジ全体がＮＳＤＬを使用して容易に記述され得ることは明らかである。さらに、トポロジはシステムオンチップの構成要素同士の間の相互接続の記述を提供するため、システムオンチップのトポロジ内のシステムオンチップの構成要素のそれぞれの位置は、容易に決定されることが可能である。
【０１８４】
本明細書で説明されるように、（構成要素の機能から構成要素のレジスタに関するレジスタ値へのマッピングを提供する）システムオンチップの構成要素の記述と、システムオンチップのトポロジの記述とを使用して、様々なタイプのテストがシステムオンチップ上で実行され得る。従って、図１８〜２０は、ＮＳＤＬを使用して、システムオンチップを記述する利点を示す。
【０１８５】
先の記述から、システムオンチップを記述するためにＮＳＤＬ言語を使用することの様々な利点及び利益は明らかである。ＮＳＤＬのアルゴリズム性質は、（トポロジがどんなに複雑であろうと）システムオンチップのテスト（例えば、複数の構成要素のテスト、１つの構成要素のテスト、構成要素の機能のサブセットのテストなど、並びにそれらの様々な組合せ）のために適合されたテストビットストリームを決定するために処理され得るシステムオンチップのアルゴリズム記述を可能にする。従って、ＮＳＤＬを使用すると、システムオンチップをテストする際に使用するための、システムオンチップのシステムスキャンパスの階層的記述が決定されることが可能である。
【０１８６】
ＮＳＤＬ言語は、システムオンチップ構成要素（例えば、ＩＰ、計器、クロスロードデバイスなど）のアルゴリズム記述、システムオンチップトポロジ（例えば、構成要素同士の間の相互接続、構成要素間依存など）など、並びにそれらの様々な組合せを提供することを含めて、ＢＳＤＬ／ＨＳＤＬが単にできないようにＩＪＴＡＧの特徴をサポートし、それによって、システムオンチップのアルゴリズムシステムレベルの記述を可能にする。従って、ＮＳＤＬ言語は、階層化スキャンパス組織を可能にし、それによって、レジスタ値をシステムオンチップのテストのために使用され得るテストビットストリームに変換することを可能にする。
【０１８７】
ＮＳＤＬ言語は多くの形で実装され得る。
【０１８８】
一実施形態では、ＮＳＤＬはＶＨＤＬの既存の特徴を使用して実装される。ＢＳＤＬはＶＨＤＬのサブセットとして定義されたのに対して、ＮＳＤＬはＶＨＤＬのスーパーセットを利用する。ＶＨＤＬは主なレジスタ転送レベル（ＲＴＬ）記述言語であるため、ＶＨＤＬはＶＨＤＬが記述する構成要素のテスト要件を表現するのに大変適している。ＶＨＤＬと互換性がある状態にとどまることによって、ＮＳＤＬは最小限の変更を行った状態で既存のコンパイラによってサポートされることが可能である。さらに、ＶＨＤＬの使用は、ＮＳＤＬに遷移することがＶＨＤＬに慣れた人々にとって円滑な経験になることを確実にし、さらに、既存のソース及びツールの変換及び適合が容易になることを確実にする。従って、ＶＨＤＬを利用しているＮＳＤＬは既存のユーザコミュニティへの影響を最小限に抑え、それによって、既存のユーザコミュニティによるＮＳＤＬの適合を簡素化する。
【０１８９】
対照的に、ＢＳＤＬは、ＢＳＤＬをＶＨＤＬと後方互換性及び前方互換性の両方があるものにする努力の際にＶＨＤＬのサブセットとして開発された。サブセットは、何も加えられていないことを示す（即ち、すべての情報は、次いで、通常と異なる形で解釈される、すでに既存のＶＨＤＬ規則内に組み込まれた構造的な構文規則によって運ばれる）。後方互換性は自動的であるものの、新しい構成物（ｃｏｎｔｒｕｃｔｓ）を定義する不可能性は進化を困難にする。この構造的な限界は、開発者に、多くの場合、直観に反する形で、２つの最も一般的な構成物（属性及び文字列）を過剰使用させる。即ち、ＢＳＤＬは、ＶＨＤＬのほんの一部の中で効果的に制約され、それによって、ＶＨＤＬが文脈的な意味を有するいかなる可能性も排除した。
【０１９０】
本明細書で説明されるように、ＮＳＤＬは、システムオンチップテストにおいて多くの利点を提供する。同様に、ＮＳＤＬを実装するためにＶＨＤＬを使用することは、 システムオンチップテストにおいて多くの利点を提供する。
【０１９１】
システムオンチップの構成要素は、ＶＨＤＬエンティティ構成要素カプレット上でモデル形成されることが可能であり、それによって、システムオンチップの構成要素によってサポートされる個々の機能の記述を可能にする。従って、それぞれの構成要素に対するアクセスは、階層を含み得る、その構成要素の内部スキャンパスを介して提供されることが可能である。さらに、構成要素は、テストシステムがその構成要素をテストするために使用することが可能なテスト手順の対応するセットが伴う可能性があり、この場合、手順の諸属性は、ＮＳＤＬ（例えば、長さ、依存など）を使用して指定され、一方、手順の本体は、ＶＨＤＬを使用して指定される。従って、これは、システム設計者が、構成要素設計者が構成要素レベルの記述を処理するのと同じようにシステムレベルの記述を処理することを可能にする。
【０１９２】
システムオンチップのスキャンパスは、ＶＨＤＬ構成要素のようにインスタンスが作成され得る一連のエンティティとして構成されることが可能であり、従って、パッケージ又はライブラリに容易に再グループ化されることが可能である。さらに、多くのより複雑な表示（例えば、所与のタイプの構成要素の複数のインスタンスの作成、構成要素依存など、並びにそれらの様々な組合せ）が容易に処理される。さらに、ＮＳＤＬは、伝統的なＶＤＬ信号マッピングに関する改善であるようにシステムスキャンチェーンの構築を可能にする。システムオンチップをテストするために開発されたテスト手順は、システムスキャンパス又は（複数の構成要素のグループ、又は１つの構成要素のサブセット若しくはサブセットすら含み得るスライスと呼ばれる）システムスキャンパスの一部を参照することが可能である。
【０１９３】
本明細書において、ＶＨＤＬを使用してＮＳＤＬが実装される実施形態に関して主に示され、かつ説明されるが、ＮＳＤＬは、（まだ開発されていないハードウェア記述言語を含み得る）その他のハードウェア記述言語を使用して実装されることが可能である。
【０１９４】
本明細書で説明されるように、ＪＴＡＧベースのテストを改善すること、並びにＪＴＡＧベースのテストにおいてクロスロードデバイスの使用を可能にすることに加えて、ＮＳＤＬ言語は、システムオンチップの構成要素に対する並列アクセスも可能にし、それによって、システムオンチップテストにおける改善（例えば、改良型のテストスケジューリング、改良型のテスト効率など、並びにそれらの様々な組合せ）を可能にする。
【０１９５】
Ｐ１６８７などの一実施形態では、並列アクセスは、主に、データ伝送向けの帯域幅を最適化する一方式として意図されるものの、直列アクセスは、テストの制御を依然として保持する。ＮＳＤＬ言語は、これら補助リソースを記述して、これらをテストフロー内（例えば、それぞれ、図１２及び図１７に関して示され、かつ説明される方法１２００内並びに１７００内）に挿入することが可能である。
【０１９６】
さらに、ＮＳＤＬは、例えば、システムオンチップをテストするための並列アクセスを提供するためにクロスロードデバイスを使用して、システムオンチップをテストするための並列アクセスを提供するためにファンアウト／ファンイン方式を使用してなど、並びにそれらの様々な組合せを使用して、より複雑なテストアクセス機構（ＴＡＭ）を記述するために拡張されることも可能である。
【０１９７】
１つのシステムオンチップ（又は、複数のシステムオンチップ）をテストするための並列アクセスの使用は、図２１〜図２８に関してより理解され得る。
【０１９８】
図２１は、並列アクセスインターフェースの一般的な接続方式のハイレベルブロック図を示す。詳細には、一般的な接続方式２１００は、並列アクセスインターフェース２１１０をシステムオンチップ２１２０に提供する。並列アクセスインターフェース２１１０は、内部並列ポート２１１１と、外部並列ポート２１１２と、内部インターフェース２１１３とを含む。システムオンチップ２１２０は、並列ポート２１２１を含む。
【０１９９】
図２１に示されるように、システムオンチップ２１２０に対する並列アクセスは、内部並列ポート２１１１と並列ポート２１２１との間の接続によって提供される。並列ポート２１２１の利用は、（１）（インスタンスの作成時に行われ得る）システムオンチップ２１２０に対する並列ポート２１２１の接続及び同期と、（２）（分かりやすくするために省略される）テストシステムによる並列ポート２１２１の処理とを必要とする。
【０２００】
図２１に示されるように、内部並列ポート２１１１及び外部並列ポート２１１２は、ｎ個の入力接続（ｎ＞０）及びｍ個の出力接続（ｍ＞０）が、システムオンチップ２１２０の並列ポート２１２１に接続されることを可能にする。
【０２０１】
システムオンチップ２１２０に対する並列アクセスは２つの様式で提供される。
【０２０２】
システムオンチップ２１２０に対する並列アクセスは、外部から提供される。テストシステムからシステムオンチップ２１２０への外部アクセスは、外部並列ポート２１１２を使用して提供される。外部並列ポート２１１２は、テストシステムと内部並列ポート２１１１との間のインターフェースとして機能する。外部並列ポート２１１２は、（それぞれ、内部並列ポート２１１１のｎ個の入力接続／ｍ個の出力接続に対応する）n個の入力接続及びｍ個の出力接続をサポートする。
【０２０３】
システムオンチップ２１２０に対する並列アクセスは、内部で提供される。テストシステムからシステムオンチップ２１２０への内部アクセスは、内部インターフェース２１１３を使用して提供される。一実施形態では、内部インターフェース２１１３は、システムスキャンパスに接続された、１つ以上の内部レジスタを使用して実装されることが可能である。この実施形態では、内部レジスタは、並列アクセスインターフェース２１１０の行動を制御するため、又は並列アクセスインターフェース２１１０の状態を問い合わせるために使用されることが可能である。
【０２０４】
上記のように、内部インターフェース２１１２又は外部インターフェース２１１３を経由して、内部並列ポート２１１１にアクセスすることになるテストシステムは、分かりやすくするために省略される。
【０２０５】
並列アクセスインターフェース２１１０はＮＳＤＬを使用して記述される。
【０２０６】
並列アクセスインターフェース２１１０のＮＳＤＬ記述は（１）（１つ以上の）内部ポートの記述（例えば、幅情報、データフローの方向、及び類似情報）、及び（２）並列アクセス機能／並列アクセス手順とを含む。
【０２０７】
並列アクセスインターフェース２１１０のＮＳＤＬ記述は、オプションで、（３）外部並列ポート２１１２の記述（例えば、幅情報、データフローの方向、及び類似情報）を含むことも可能である。
【０２０８】
並列アクセスインターフェース２１１０のＮＳＤＬ記述は、オプションで、（４）内部インターフェース２１１３の記述（例えば、制御機能及び／又は状態機能に関して利用されるレジスタの記述）を含むことも可能である。
【０２０９】
一実施形態では、テストシステムから複数の構成要素を有するシステムオンチップへの並列アクセスは、テストシステムと構成要素との間でテストビットストリームを結合するための直列テスト・アクセス・インターフェースの記述（この場合、直列テスト・アクセス・インターフェースは、システムオンチップの直列スキャンパスを使用して構成要素に対するアクセスを提供する）と、テストシステムと構成要素との間でテストビットストリームを結合するための並列テスト・アクセス・インターフェースの記述（この場合、並列テスト・アクセス・インターフェースは、システムオンチップの直列スキャンパスを使用せずに、即ち、アクセスが直列スキャンパスの１つ以上の値によって制御されることが可能でも、直列スキャンパスを経由して直接的にではなく構成要素に対するアクセスを提供する）とを使用して記述されることが可能である。直列テスト・アクセス・インターフェースの記述及び並列テスト・アクセス・インターフェースの記述は、テストにおいて使用するために格納されることが可能である。
【０２１０】
一実施形態では、テストシステムからシステムオンチップへの並列アクセスは、テストシステムをシステムオンチップのコアモジュールに結合して、並列インターフェースモジュールの記述を格納するように適合された並列インターフェースモジュールの記述を使用して記述されることが可能であり、この場合、並列インターフェースは、システムオンチップのスキャンパスを使用してコアモジュールにアクセスするように適合された少なくとも１つの直列レジスタ、及びシステムオンチップのスキャンパスを使用せずにコアモジュールにアクセスするように適合された少なくとも１つの並列レジスタを含む。この記述はテストにおいて使用するために格納されることが可能である。
【０２１１】
一実施形態では、テストシステムからシステムオンチップへの並列アクセスは、テストシステムと構成要素との間でテストビットストリームを結合するように適合された直列テストアクセスポートの記述と、テストシステムと構成要素との間でテストビットストリームを結合するように適合された並列テストアクセスポートの記述と、直列テストアクセスポート及び並列テストアクセスポートをシステムオンチップの構成要素の少なくとも一部に結合するように適合されたインターフェースポートの記述とを使用して記述されることが可能である。これらの記述は、システムオンチップをテストする際に使用するために格納されることが可能である。
【０２１２】
本明細書で説明されるように、これらの記述は生成されて、格納される。従って、これらの記述は、並列アクセスを使用して、様々なテスト（例えば、構成要素レベルのテスト、システムレベルのテストなど、並びにそれらの様々な組合せ）を実行するために、（例えば、メモリから、別のシステムから、又はかかる記述の任意のその他のソースから）プロセッサによって受信されることが可能である。
【０２１３】
テストシステムからシステムオンチップへの並列アクセスはその他の様式で記述されることが可能である。
【０２１４】
並列インターフェース２１１０とシステムオンチップ２１２０との間の通信は、同期であってよく、又は非同期であってもよい。
【０２１５】
一実施形態では、並列インターフェース２１１０とシステムオンチップ２１２０との間の通信は、スキャンチェーンと同期する。１つのかかる実施形態では、１１４９．１「更新」信号の立上り時に並列ポート２１２１上の（１つ以上の）値がサンプリングされる。この実施形態では、テストシステムは、単に、（入力のために）ポートに（１つ若しくは複数の）値を提示し、かつ／又は（出力のために）ポートから（１つ若しくは複数の）値を提示しなければならない。
【０２１６】
一実施形態では、並列インターフェース２１１０とシステムオンチップ２１２０との間の通信は、同期バーストとして実装される。１つのかかる実施形態では、帯域幅を最適化するために、データのバーストが（入力上で）並列ポート２１２１に送られ、かつ／又は（出力上で）並列ポート２１２１から読み取られる。１つのかかる実施形態では、バーストデータは、１１４９．１「更新」信号の立上り時に送られること／読み取られることが可能である。並列インターフェース２１１０は、テストシステムに対するデータバーストの特性を指定することになる。
【０２１７】
一実施形態では、並列インターフェース２１１０とシステムオンチップ２１２０との間の通信は、非同期である。この実施形態では、並列ポート２１２１は、単独で動作し、接続を導くために、その独自のプロトコルを処理する。この実施形態では、テストシステムは、ハイレベルのアクセス（データを送ること及びデータを受信すること）だけを可能にすることになる。トランザクションのプロトコルは、テストシステムの並列インターフェースドライバによって処理される。
【０２１８】
一実施形態では、システムオンチップ１２２０は、並列インターフェース２１１０との通信の複数のかかるモードをサポートすることが可能である。かかる実施形態では、異なる通信モードの間で切り替えるために、機能のセットが使用され得る。例えば、機能のセットは以下を含み得る。即ち、並列ポートを動作不能にする「ｄｉｓａｂｌｅ＿ｐｏｒｔ」、スキャンチェーン同期アクセスモードにトグルする「ｓｅｔ＿ｓｃａｎ＿ｓｙｎｃｈｒｏ」、バーストアクセスモードにトグルする「ｓｅｔ＿ｂｕｒｓｔ」、及び非同期モードにトグルする「ｓｅｔ＿ａｓｙｎｃｈｒｏ」である。
【０２１９】
図２２は、２つの例示的な並列アクセス接続方式を示すハイレベルブロック図を示す。
【０２２０】
図２２に示されるように、例示的な並列アクセス接続方式は、図１のテスト環境の関連で説明される。これらの例示的な並列アクセス接続方式は、テストシステム１２０をシステムオンチップ１１０に接続するために利用される。詳細には、これらの例示的な並列アクセス接続方式は、テストシステム１２０をシステムオンチップ１１０のＪＴＡＧインターフェース２２０１及び並列インターフェース２２０２に接続するために利用される。
【０２２１】
図２２に示されるように、第１の並列アクセス接続方式２２１０はＪＴＡＧ及び並列アクセスに関して共通のケーブルを利用する。第１の並列アクセス接続方式２２１０は、システムオンチップ１１０のスキャンパスに対するＪＴＡＧインターフェース２２０１及びシステムオンチップ１１０の並列インターフェース２２０２の両方に関して（ＪＴＡＧ並列インターフェースデバイスとして示される）単一の接続デバイス２１１１を利用する。
【０２２２】
図２２に示されるように、第２の並列アクセス接続方式２２２０は、個別のＪＴＡＧ接続及び並列接続を利用した。第２の並列アクセス接続方式２２１０は、システムオンチップ１１０のスキャンパスに対するＪＴＡＧインターフェース２２０１に関する（ＪＴＡＧインターフェースデバイス２１２１として示される）第１の接続デバイスと、システムオンチップ１１０の並列インターフェース２２０２に関する（並列インターフェースデバイス２１２２として示される）第２の接続デバイスとを利用する。
【０２２３】
第２の並列アクセス接続方式２２１０に関して、テストシステム１２０が、ＪＴＡＧインターフェース２２０１及び並列インターフェース２２０２の両方に関するテストソース／テストシンクである実施形態に関して示され、かつ説明されるが、その他の実施形態では、ＪＴＡＧインターフェース２２０１及び並列インターフェース２２０２に関するテストソース及び／又はテストシンクは異なってよい。例えば、ＪＴＡＧインターフェース２２０１又は並列インターフェース２２０２は、テストシステム１２０以外のテストソース及び／又はテストシングを使用することが可能である。
【０２２４】
一般に、並列インターフェースの実装形態に応じて、並列インターフェースを経由してシステムオンチップのテストを実行しているテストシステムは、例えば、テストシステムとシステムオンチップの並列ポートとの間に配置された多くの構成物により、システムオンチップの並列ポートに直接アクセスできない場合がある。例は、図２３Ａ及び２３Ｂに示され、かつ説明される。
【０２２５】
図２３Ａは、例示的なテスト環境のハイレベルブロック図を示す。この例示的なテスト環境２３００は、テストシステムが、システムオンチップに並列アクセスを提供する並列アクセスインターフェースを使用して、システムオンチップ上でテストを実行するのを可能にする。詳細には、テスト環境２３００は、インターフェースデバイス（ＩＤ）２３２０を経由して相互接続されたテストシステム（ＴＳ）２３１０とチップ／ボード（Ｃ／Ｂ）２３３０とを含む。
【０２２６】
ＴＳ２３１０は、並列アクセスインターフェースを経由してシステムオンチップのテストを実行するように適合されたテストシステムである。ＴＳ２３１０は、システムオンチップに対する並列アクセスを使用して、システムオンチップをテストする目的でシステムを実装するためにいかなるようにも実装され得る。一実施形態では、ＴＳ２３１０は、図１１に関して示され、かつ説明されたＴＳ１２０の（例えば、並列テスト機能をサポートするように適合された）適合バージョンとして実装されることが可能である。
【０２２７】
ＴＳ２３１０は、並列アクセスインターフェースを経由してシステムオンチップのテストを実行するために使用するように適合されたソフトウェアを含む。詳細には、ＴＳ２３１０は、テストツール２３１２及び並列インターフェースドライバ２３１３を制御しているオペレーティングシステム２３１１を含む。ＴＳ２３１０は、（分かりやすくするために省略される）システムオンチップのテストを実行するように適合された、その他のハードウェア及びソフトウェア（例えば、プロセッサ、メモリ、サポート回路など）を含む。
【０２２８】
一実施形態では、テストツール２３１２は、テストツール１１２１と同じであってよい（又は、少なくともテストツール２３１２に関して示され、かつ説明される機能は、テストツール１１２１の一部として実装されることが可能である。
【０２２９】
Ｃ／Ｂ２３３０は、システムオンチップ２３３１と並列インターフェース２３３２とを含む。システムオンチップ２３３１は、本明細書で説明されるいずれかのシステムオンチップであってよい。並列インターフェース２３３２は、図２１及び２２に関して示され、かつ説明されたような並列インターフェースである。並列インターフェース２３３２とシステムオンチップ２３３１との間の相互作用は、図２１に関してよりよく理解され得る。図２３Ａに示されるように、システムオンチップ２３３１及び並列インターフェース２３３２はそれぞれ、ＮＳＤＬを使用して記述される。
【０２３０】
ＩＤ２３２０は、ＴＳ２３１０とＣ／Ｂ２３３０との間のインターフェースとして機能する。ＴＳ２３１０とＩＤ２３２０との間のインターフェースは、ＴＳ２３１０によってサポートされる任意のタイプのインターフェース（例えば、ＵＳＢケーブル又はＴＳ２３１０によってサポートされ得る任意のその他のタイプのインターフェース）を使用して実装されることが可能である。ＩＤ２３２０とＣ／Ｂ２３３０との間のインターフェースは、Ｃ／Ｂ２３３０によってサポートされる任意のタイプのインターフェースとして実装されることが可能である。一実施形態では、ＩＤ２３２０は、データ信号及び制御信号が、独立してＴＳ２３１０からＣ／Ｂ２３３０に適用されることが可能なように、Ｃ／Ｂ２３３０に対して個別のデータインターフェース及び制御インターフェースをサポートする。
【０２３１】
本明細書で説明されるように、テストツール２３１２は、並列インターフェース２３３２（及び、従って、システムオンチップ２３３１）とのデータ交換を処理し、並列インターフェースドライバ２３１３は、並列インターフェース２３３２（及び、従って、システムオンチップ２３３１）とのプロトコル交換を処理する。即ち、並列インターフェースドライバ２３１３は、テストツール２３１２が並列インターフェース２３３２とのプロトコル交換を管理しなければならないことを防ぐ。図２３Ａに示されるように、ＴＳ２３１０とＣ／Ｂ２３３０との間のデータ交換及びプロトコル交換は、ＩＤ２３２０によってサポートされる。
【０２３２】
一実施形態では、並列インターフェースドライバ２３１３は、オペレーティングシステム２３１１によってサポートされた機能を使用して（例えば、バッファ、信号灯、メールボックスなど、並びにそれらの様々な組合せを使用して）並列インターフェース２３３２とのプロトコル交換を処理する。この実施形態では、テストツール２３１２は、システムオンチップのＪＴＡＧポートを直接制御せず、むしろ、テストツール２３１２は、（例えば、ドライバによって宣言され、テストツール２３１２によってインポートされた機能を使用して）テストツール２３１２に様々な機能を提供するドライバと相互作用する。
【０２３３】
図２３Ｂは、図２３Ａの例示的なテスト環境内のデータフローのハイレベルブロック図を示す。図２３Ｂに示されるように、データは（データフロー２３５１として示される）ＴＳ２３１０からＣ／Ｂ２３３０に、かつ（データフロー２３５２として示される）Ｃ／Ｂ２３３０からＴＳ２３１０に流れる。データフロー２３５１において、データは、テストツール２３１２から並列インターフェースドライバ２３１３に、そこからインターフェースデバイス２３２０に、そこから並列インターフェース２３３２に、そこからシステムオンチップ２３３１に流れる。データフロー２３５２において、データは、システムオンチップ２３３１からテストツール２３１２に逆経路に沿って流れる。本明細書で説明されるように、データフローは、テスト環境２３００の関連でだけ重要である。
【０２３４】
システムオンチップ２３３１のＮＳＤＬベースの記述は、対応する並列インターフェースに（例えば、インスタンスの作成時に）接続された１つ以上の並列ポートと（並列トランザクションに関するデータが格納される）１つ以上の並列スライスと、並列ポート上でトランザクションを開始するように適合された１つ以上の並列トランザクション機能とを含む。（１つ以上の）並列スライスは、特定の名前付け（例えば、「ｐａｒａｌｌｅｌ＿ｘｘｘｘ」）を使用して識別されることが可能である。並列トランザクション機能は、特定の名前付け（例えば、「ｓｅｎｄ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」及び「ｇｅｔ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」）を使用して識別されることが可能である。例えば、並列トランザクション機能のプロトタイプは以下を含み得る。
【０２３５】
function send_parallel_data (sending_slice : in string)
return boolean;
function get_parallel_data (receiving_slice : in string)
return Boolean;
【０２３６】
本明細書で説明される例示的な並列トランザクション機能は、並列ポート上の活動を広告し、さらに、直列テストビットストリームを制御するために、直列テストビットストリームに対する修正を示す。「並列スライス」の実装は、テストシステム（例示的に、ＴＳ２３１０のテストツール２３１２）にシステムオンチップの並列ポートと（本明細書において、システムオンチップの「コア」と呼ばれる）システムオンチップの残りの部分との間のデータフローの詳細について知らせる。システムオンチップの並列ポートとシステムオンチップのコアとの間の接続は、多くの様式で実装されることが可能である（その例は、図２４〜２７に関して示され、かつ説明される）。
【０２３７】
図２４は、並列ポートとシステムオンチップのコアとの間の例示的な接続のハイレベルブロック図を示す。図２４に示されるように、例示的な接続は、完全に独立した（直列スキャンパスから独立した）並列ポートを利用する。詳細には、接続２４００は、ＴＡＰポート２４１０と、並列アクセスをシステムオンチップ２４３０に提供している外部並列ポート２４２０とを含む。システムオンチップ２４３０は、ＴＡＰポート２４１０を経由して、又は外部並列ポート２４２０を経由してアクセスされ得るコア２４３９を含む。
【０２３８】
コア２４３９は、システムオンチップ２４３０の直列スキャンパス内の直列レジスタ２４３１を使用して、ＴＡＰポート２４１０を経由してアクセスされ得る。直列レジスタ２４３１は、第１のインターフェース２４３３を経由してコア２４３９に対するアクセスを制御する。コア２４３９は、システムオンチップ２４３０の直列スキャンパスの外部にある並列レジスタ２４３４を使用して、外部並列ポート２４２０を経由してアクセスされる。並列レジスタ２４３４は、第２のインターフェース２４３５を経由してコア２４３９に対するアクセスを制御する。
【０２３９】
図２４に示されるように、並列レジスタ２４３４を経由したコア２４３９に対するアクセスは、直列レジスタ２４３１から完全に独立している。従って、すべての制御信号は、システムオンチップ２４３０の直列スキャンパスからの介入のいかなる必要も伴わずに、並列論理によって処理される。機能「ｇｅｔ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」は、並列スライス（例示的に、「ｐａｒａｌｌｅｌ＿ｒｅｇ」）の名前を引数として単に解釈し、ビットストリームに対する修正は求められないため、機能の本体は空である。
【０２４０】
図２５は、並列ポートとシステムオンチップのコアとの間の例示的な接続のハイレベルブロック図を示す。図２５に示されるように、例示的な接続は、直列制御を伴う独立した並列ポートを利用する。詳細には、接続２５００は、ＴＡＰポート２５１０と、並列アクセスをシステムオンチップ２５３０に提供している外部並列ポート２５２０とを含む。システムオンチップ２５３０は、ＴＡＰポート２５１０を経由して、又は外部並列ポート２５２０を経由してアクセスされ得るコア２５３９を含む。
【０２４１】
コア２５３９は、システムオンチップ２５３０の直列スキャンパス内の直列レジスタ２５３１を使用して、ＴＡＰポート２５１０を経由してアクセスされる。直列レジスタ２５３１は、第１のインターフェース２５３３を経由してコア２５３９に対するアクセスを制御する。コア２５３９は、システムオンチップ２５３０の直列スキャンパスの外部にある並列レジスタ２５３４を使用して、外部並列ポート２５２０を経由してアクセスされる。並列レジスタ２５３４は、第２のインターフェース２５３５を経由して、コア２５３９に対するアクセスを制御する。
【０２４２】
図２５に示されるように、並列レジスタ２５３４及び関連する第２のインターフェース２５３５を経由したコア２５３９に対するアクセスは、システムオンチップ２５３０の直列スキャンパス内の追加のイネーブルレジスタ２５３２を使用して制御される。イネーブルレジスタ２５３２は、イネーブルレジスタ２５３２からコア２５３９への制御インターフェース２５３７を使用して、並列レジスタ２５３４を経由してコア２５３９に対するアクセスを制御する。従って、システムオンチップ２５３０の直列スキャンパスは、ＴＤＩ→イネーブルレジスタ２５３２→直列レジスタ２５３１→ＴＤＯを含む。
【０２４３】
従って、図２５に示されるように、並列レジスタ２５３４を経由したコア２５３９に対するアクセスは、システムオンチップ２５３０の直列スキャンパスから直列的に制御される。この実施形態では、機能「ｇｅｔ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」は、並列スライス（例示的に、「ｐａｒａｌｌｅｌ＿ｒｅｇ」）の名前を引数として解釈し、さらに、ビットストリームに対する修正が求められるため、機能の本体は、イネーブルレジスタ２５３２の値を所望される値に設定するための命令を含むことになる。
【０２４４】
図２６は並列ポートとシステムオンチップのコアとの間の例示的な接続のハイレベルブロック図を示す。図２６に示されるように、例示的な接続は、直列データ及び並列データに関して、コアに対して共有アクセスポートを利用する。詳細には、接続２６００は、ＴＡＰポート２６１０、及び並列アクセスをシステムオンチップ２６３０に提供している外部並列ポート２６２０を含む。システムオンチップ２６３０はＴＡＰポート２６１０を経由して、又は外部並列ポート２６２０を経由してアクセスされ得るコア２６３９を含む。
【０２４５】
コア２６３９は、システムオンチップ２６３０の直列スキャンパス内の直列レジスタ２６３１を使用して、ＴＡＰポート２６１０を経由してアクセスされる。直列レジスタ２６３１は、第１のインターフェース２６３３を経由してコア２６３９に対するアクセスを制御する。コア２６３９は、システムオンチップ２６３０の直列スキャンパスの外部にある並列レジスタ２６３４を使用して、外部並列ポート２６２０を経由してアクセスされる。並列レジスタ２６３４は、第２のインターフェース２６３５を経由して、コア２６３９に対するアクセスを制御する。
【０２４６】
図２６に示されるように、直列レジスタ２６３１及び並列レジスタ２６３４を経由したコア２６３９に対するアクセスは、共有アクセスポート２６３６を使用して制御される。共有アクセス部分２６３６は、直列レジスタ２６３１からの第１のインターフェース２６３３を第１の入力として解釈して、並列レジスタ２６３４からの第２のインターフェース２６３５を第２の入力として解釈する。共有アクセスポート２６３６は、入力のうちの１つを選択して、共有アクセスインターフェース２６３８を経由して入力のうちの選択された１つをコア２６３９に提供する。
【０２４７】
図２６に示されるように、共有アクセスポート２６３６によって入力のうちの１つを選択することは、システムオンチップ２６３０の直列スキャンパス内で追加のイネーブルレジスタ２６３２を使用して制御される。イネーブルレジスタ２６３２は、イネーブルレジスタ２６３２から共有アクセスポート２６３６への制御インターフェース２６３７を使用して、共有アクセスポート２６３６及び共有アクセスインターフェース２６３８を経由して、コア２５３９に対するアクセスを制御する。従って、システムオンチップ２６３０の直列スキャンパスは、ＴＤＩ→ 直列レジスタ２６３１→イネーブルレジスタ２６３２→ＴＤＯを含む。
【０２４８】
従って、図２６に示されるように、並列レジスタ２６３４を経由したコア２６３９に対するアクセスは、システムオンチップ２６３０の直列スキャンパスから直列的に制御される。この実施形態では、システムオンチップ２５３９は、（例えば、直列レジスタ２６３１及び並列レジスタ２６３４を「交番」としてラベル付けすることによって）２分法を広告することになる。かかる実施形態では、テストシステムは、並列インターフェースがアクティブであるとき、直列レジスタ２６３１がコア２６３９に何の影響も及ぼさない（即ち、直列レジスタ２６３１は効果的に「デッドストレージ（ｄｅａｒｄ  ｓｔｏｒａｇｅ）」である）ことを知っている。多くのレジスタが同じ並列ポートを共有し得るという点で、この規則は結合的（ａｓｓｏｃｉａｔｉｖｅ）である。
【０２４９】
図２７は、並列ポートとシステムオンチップのコアとの間の例示的な接続のハイレベルブロック図を示す。図２７に示されるように、直列レジスタ、及び並列アクセスをシステムオンチップのコアに提供する並列レジスタは、同じフリップフロップを共有し、従って、並列アクセスをシステムオンチップのコアに提供するために求められるリソースを最小限に抑える。詳細には、接続２７００は、イネーブルレジスタ２７３２と、複数のデータレジスタ２７３１１〜２７３１８（集合的に、データレジスタ２７３１）と、複数の共有アクセスポート２７３３１〜２７３３８（集合的に、共有アクセスポート２７３３）とを利用する。
【０２５０】
図２７に示されるように、イネーブルレジスタ２７３２のデータ入力は、ＴＤＩ入力であり、イネーブルレジスタ２７３２のデータ出力は、第１の共有アクセスポート２７３３１の入力のうちの１つであり、第１の共有アクセスポート２７３３１のデータ出力は、第１のデータレジスタ２７３１１のデータ入力であり、第１のデータレジスタ２７３１１の第１のデータ出力は、第２の共有アクセスポート２７３３２の入力のうちの１つであり、第２の共有アクセスポート２７３３２のデータ出力は、第２のデータレジスタ２７３１２のデータ入力であり、第２のデータレジスタ２７３１２の第１のデータ出力は、第３の共有アクセスポート２７３３３の入力のうちの１つであり、第３の共有アクセスポート２７３３３のデータ出力は、第３のデータレジスタ２７３１３のデータ入力であり、第８のデータレジスタ２７３１８の第１のデータ出力がＴＤＯ出力であるまで、以下同様である。
【０２５１】
図２７にさらに示されるように、共有アクセスポート２７３３のそれぞれは、（スキャンパス内の先のレジスタのデータ出力に結合されているのに加えて）第２のデータ入力を含む。共有アクセスポート２７３３１〜２７３３８の第２のデータ入力は、それぞれ、（本明細書において、並列入力接続として示される）外部並列ポート２７２０から、それぞれのデータ入力に結合される。従って、それぞれの共有アクセスポート２７３３は、その２つのデータ入力のうちの１つからデータを選択する（即ち、直列スキャンパス内の先のレジスタからのデータ入力、又はその共有アクセスポート２７３３に接続された外部並列ポート２７２０の並列入力接続のうちの１つからのデータ入力を選択する）。
【０２５２】
図２７に示されるように、イネーブルレジスタ２７３２の出力は、それぞれの共有アクセスポート２７３３に関する入力選択信号として、それぞれの共有アクセスポート２７３３に適用され、それによって、それぞれの共有アクセスポート２７３３によるデータの選択を制御する。
【０２５３】
イネーブルレジスタ２７３２の値が（ＴＡＰポート２７１０からの）直列データがコア２７３９に提供されるべきであることを示す場合、イネーブルレジスタ２７３２からそれぞれの共有アクセスポート２７３３に提供される入力選択信号は、（外部並列ポート２７２０から共有アクセスポートに接続された並列入力接続からではなく）スキャンパス内の先のレジスタから入力を選択するようにそれぞれの共有アクセスポート２７３３を導く。
【０２５４】
この場合、共有アクセスポート２７３３１は、（外部並列ポート２７２０の並列入力接続からではなく）イネーブルレジスタ２７３２から入力を選択し、それによって、イネーブルレジスタ２７３２の値を第１のデータレジスタ２７３１１内に読み取らせる（かつ、従って、コア２７３９に提供させる）。同様に、この場合、共有アクセスポート２７３３２は、（外部並列ポート２７２０の並列入力接続からではなく）第１のデータレジスタ２７３１１から入力を選択し、それによって、第１のデータレジスタ２７３１１の値を第２のデータレジスタ２７３１２内に読み取らせる（かつ、従って、コア２７３９に提供させる）。即ち、残りのデータ遷移の記述は分かりやくするために省略されるが、データレジスタ２７３１のその他のデータレジスタによる類似のデータ遷移は、直列データがコア２７３９に提供されることを可能にする。
【０２５５】
イネーブルレジスタ２７３２の値が（外部並列ポート２７２０からの）並列データがコア２７３９に提供されるべきことを示す場合、イネーブルレジスタ２７３２からそれぞれの共有アクセスポート２７３３に提供された入力選択信号は、（スキャンパス内の先のレジスタからではなく）外部並列ポート２７２０から共有アクセスポートに接続された並列入力接続から入力を選択するようにそれぞれの共有アクセスポート２７３３を導く。
【０２５６】
この場合、共有アクセスポート２７３３１は、（イネーブルレジスタ２７３２からではなく）共有アクセスポート２７３３１に接続された外部並列ポート２７２０の並列入力接続から入力を選択し、それによって、外部並列ポート２７２０のその並列入力接続からの値を第１のデータレジスタ２７３１１内に読み取らせる（かつ、従って、コア２７３９に提供させる）。同様に、この場合、共有アクセスポート２７３３２は、（第１のデータレジスタ２７３１１からではなく）共有アクセスポート２７３３２に接続された外部並列ポート２７２０の並列入力接続から入力を選択し、それによって、外部並列ポート２７２０のその並列入力接続からの値を第２のデータレジスタ２７３１２内に読み取らせる（かつ、従って、コア２７３９に提供させる）。即ち、残りのデータ遷移の記述は分かりやすくするために省略されるが、データレジスタ２７３１のその他のデータレジスタによる類似のデータ遷移は、並列データがコア２７３９に提供されることを可能にする。
【０２５７】
さらに、接続２７００の直接ＮＳＤＬ記述は非常に複雑であろうが、このタイプの接続は、図２６に関して示され、かつ説明された接続２６００に機能的に相当する点に留意されたい。接続２６００及び２７００において、直列データがコアに達するか又は並列データがコアに達するかを決定するのは、「選択」スライスの値である。接続２６００と接続２７００との間の唯一の違いは、期待される値にある。即ち、接続２７００において、レジスタは共有され、従って、並列アクセスの場合、直列データは上書きされるため、期待されることになる値は並列値である。
【０２５８】
本明細書において、（分かりやすくするために）１つの並列ポートを有するシステムオンチップに並列アクセスを提供することに関して主に示され、かつ説明されるが、並列アクセスは、複数の並列ポートを有するシステムオンチップに提供されることが可能である。同様に、本明細書において、（分かりやすくするために）１つの並列スライスを有するシステムオンチップに並列アクセスを提供することに関して主に示され、かつ説明されるが、並列アクセスは、複数の並列スライスを有するシステムオンチップに提供されることが可能である。
【０２５９】
かかる実施形態では、複数の並列ポートは、いかなるようにも識別され得る。例えば、複数の並列ポートは、（例えば、クロスロードデバイスに関して説明されたように）順序数を使用して識別されることが可能である。例えば、ｎ個の並列入力及びｍ個の並列出力を有するシステムオンチップは、以下のポートを有することになる。即ち、「ｐａｒａｌｌｅｌ＿ｉｎ＿＜ｉ＞」、ｉ＝０，１，．．．，ｎ−１、「ｐａｒａｌｌｅｌ＿ｏｕｔ＿＜ｋ＞」、ｋ＝０，１，．．．ｍ−１である。さらに、それぞれの並列ポートは、そのそれぞれがいかなるようにも（例えば、「ｇｅｔ＿ｐａｒａｌｌｅｌ＿ｄａｔａ＿ｐａｒａｌｌｅｌ＿ｉｎ＿０」、「ｓｅｔ＿ｓｃａｎ＿ｓｙｎｃｈｒｏ＿ｐａｒａｌｌｅｌ＿ｏｕｔ＿３」など、末尾に付けられた、対応するポート名を使用することによって）識別され得る、その独自の（１つ以上の）機能を有することになる。
【０２６０】
対照的に、並列スライスのそれぞれの名前が、それらのスライスが並列スライスであることを示す限り（例えば、名前は「ｐａｒａｌｌｅｌ＿」で始まることが可能である）、複数の並列スライスの名前付けに関する制限は存在しない。「ｓｅｎｄ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」及び「ｇｅｔ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」がスライス名をパラメータとして解釈する一実施形態では、任意のポートを任意の並列レジスタと接続することが可能である。「ｓｅｎｄ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」及び「ｇｅｔ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」がスライス名をパラメータとして解釈しないもう１つの実施形態では、システムオンチップは、それぞれのポートが１つ以上の並列スライスにどのように「接続する」かを正確に宣言することが可能である。
【０２６１】
並列インターフェースのＮＳＤＬ記述は、スキャンパス及びその関連機能の記述を含む。ＮＳＤＬ記述は、並列インターフェースが接続する実際の物理ポート（並列ピン）を示す。これは、（例えば、ＢＳＤＬがＴＡＰ信号を識別するように）トップレベルファイル内の伝統的なＢＳＤＬ／ＨＳＤＬ規則によって処理されることが可能である。並列通信プロトコルの実現は、並列インターフェースドライバに委ねられる。テストシステムは、どの並列ピンがどの並列インターフェースドライバによって制御されるかを告げられる。
【０２６２】
本明細書において、並列ポートに関する入力データフローに関して主に示され、かつ説明されるが、並列ポートに関する出力データフローは対称的になる。即ち、（図２４〜図２７に関して示され、かつ説明されるように）システムオンチップに対する入力データフローに関して実装され得る入力接続タイプのそれぞれについて、システムオンチップからの出力データフローに関して、対応する対称的な出力接続タイプが実装されることが可能である。
【０２６３】
本明細書において、並列アクセスインターフェースの内部並列ポートとシステムオンチップの並列ポートとの間の簡単な内部接続をサポートしている並列アクセスインターフェースに関して主に示され、かつ説明されるが、並列アクセスインターフェースは、並列アクセスインターフェースの内部並列ポートとシステムオンチップの並列ポートとの間のより複雑な内部接続をサポートすることが可能である。このように、ＮＳＤＬは、その複雑さにかかわらず、いかなるテストアクセス機構（ＴＡＭ）も記述することが可能である。
【０２６４】
一実施形態では、並列アクセスインターフェースの内部並列ポートとシステムオンチップの並列ポートとの間の内部接続は、１つ以上のクロスロードデバイスを使用して提供されることが可能である。１つのかかる実施形態では、直列スキャンパスから、又は並列ポートから内部接続を処理するために、選択機能及び選択解除機能が使用され得る。
【０２６５】
もう１つの実施形態では、並列アクセスインターフェースの内部並列ポートとシステムオンチップの並列ポートとの間の内部接続は、ファンイン／ファンアウト方式を使用して提供されることが可能である。かかる実施形態では、複数のシステムオンチップデバイスを駆動させるために並列ポートのビットが使用され得る（即ち、外部並列ポートの帯域幅は、内部並列ポートによって、複数のシステムオンチップデバイス間で共有される）。
【０２６６】
従って、本明細書において、並列アクセスを１つのシステムオンチップデバイスに提供する並列アクセスインターフェースに関して主に示され、かつ説明されるが、その他の実施形態では、並列アクセスインターフェースは、並列アクセスを複数のシステムオンチップデバイスに提供することが可能である。かかる並列アクセスインターフェースの一般的な接続方式は、図２８に関して示され、かつ説明される。
【０２６７】
図２８は、並列アクセスインターフェースの内部接続方式のハイレベルブロック図を示す。詳細には、内部接続方式２８００は、並列アクセスインターフェース２８１０を３つのシステムオンチップ２８２０１〜２８２０３（集合的に、システムオンチップ２８２０）に提供する。並列アクセスインターフェース２８１０は、内部並列ポート２８１１と、外部並列ポート２８１２と、内部インターフェース２８１３とを含む。外部並列ポート２８１２及び内部並列ポート２８１１は、テストシステムからシステムオンチップ２８２０へのｎ個の入力接続と、システムオンチップ２８２０からテストシステムへのｍ個の出力接続とをサポートする。
【０２６８】
図２８に示されるように、それぞれのシステムオンチップ２８２０は、並列入力接続及び並列出力接続をサポートしている並列ポートを含む。並列アクセスインターフェース２８１０の内部ポートは、以下をサポートする。即ち、（１）システムオンチップ２１２０のそれぞれに対する入力データフローのファンアウト、及び（２）システムオンチップ２１２０のそれぞれからの出力データフローに対するファンアウトである。外部並列ポート２８１２のｎ個の入力接続は、システムオンチップ２８２０１に対するｉ個の入力接続、システムオンチップ２８２０２に対するｊ個の入力接続、及びシステムオンチップ２８２０３に対するｋ個の入力接続にファンアウトする（即ち、ｎ＝ｉ＋ｊ＋ｋ）。外部並列ポート２８１２のｍ個の出力接続は、システムオンチップ２８２０１からのｐ個の出力接続、システムオンチップ２８２０２からのｑ個の出力接続、及びシステムオンチップ２８２０３からのｒ個の出力接続からファンインする（即ち、ｍ＝ｐ＋ｑ＋ｒ）。
【０２６９】
従って、ＮＳＤＬ記述言語を使用すると、いかなる複雑さのシステムオンチップデバイスも容易に記述されることが可能である。構成要素（例えば、ＩＰ、計器、クロスロードデバイスなど）、構成要素同士の間の相互接続など、並びにそれらの様々な組合せを含めて、システムオンチップデバイスの任意のテストリソースが記述されることが可能である。ＮＳＤＬでは、システムオンチップのテストリソースの記述は、アルゴリズム記述であり、この場合、それぞれのアルゴリズム記述は、テストツールによって理解されているように適合されたフォーマットで定義された１つ以上の構成規則を含む。
【０２７０】
図２９は、システムオンチップのテストリソースを記述するための方法を示す。直列的に実行されているとして示され、かつ説明されるが、図２９の方法２９００のステップの少なくとも一部は、同時に、又は、図２９に関して示され、かつ説明されたのとは別の順序で実行されることが可能である。方法２９００は、ステップ２９０２で始まり、ステップ２９０４に進む。
【０２７１】
ステップ２９０４において、システムオンチップのそれぞれの構成要素のアルゴリズム記述が生成される。
【０２７２】
それぞれの構成要素のアルゴリズム記述は、その構成要素によってサポートされる少なくとも１つの機能のその構成要素に関する少なくとも１個のレジスタへのマッピングを記述する。それぞれの構成要素のアルゴリズム記述は、その構成要素の内部スキャンパスを記述する。
【０２７３】
一実施形態では、システムオンチップの構成要素のアルゴリズム記述は、その構成要素によってサポートされた少なくとも１つの機能を識別するステップと、少なくとも１つの機能のそれぞれに関して、その構成要素の少なくとも１個のレジスタに関する少なくとも１つのレジスタ値への機能のマッピングを定義する構成要素のアルゴリズム記述を生成するステップと、構成要素のアルゴリズム記述を格納するステップとによって生成される。
【０２７４】
ステップ２９０６において、システムオンチップの構成要素同士の間の相互接続のアルゴリズム記述が生成される。構成要素同士の間の相互接続のアルゴリズム記述は、システムオンチップのシステムレベルのトポロジを指定する。
【０２７５】
ステップ２９０８において、システムオンチップのアルゴリズム記述は、構成要素のアルゴリズム記述と、構成要素同士の間の相互接続のアルゴリズム記述とを使用して生成される。
【０２７６】
システムオンチップのアルゴリズム記述は、そこからシステムオンチップのスキャンパスの記述が構成され得る、システムオンチップのトポロジを記述する。
【０２７７】
ステップ２９１０において、システムオンチップのアルゴリズム記述が格納される。構成要素のそれぞれの個々のアルゴリズム記述が格納され得る。構成要素同士の間の相互接続のアルゴリズム記述が格納される。アルゴリズム記述は、いかなるようにも格納され得る。ステップ２９１２において、方法２９００は終了する。
【０２７８】
アルゴリズム記述は、システムオンチップをテストする際に使用するためのテストツールによって理解されているように適合される。従って、アルゴリズム記述は、様々なテスト（例えば、構成要素レベルのテスト、システムレベルのテストなど、並びにそれらの様々な組合せ）を実行するために、（例えば、メモリから、別のシステムから、又はかかる記述の任意のその他のソースから）プロセッサによって受信されることが可能である。
【０２７９】
本明細書で説明されるように、一実施形態では、ＮＳＤＬ言語は、ＶＨＤＬを使用して実装されることが可能である。１つのかかる実施形態では、ＮＳＤＬに関する文法的な規則は、文脈上のバッカス正規形（ＢＮＦ）文法によって形式化され得る。例えば、ＢＮＦは、以下の例にあるように、構文構造の生成を容易に記述する。
【０２８０】
<entity_declaration> ::=
ENTITY <identifier> IS
<entity_header>
<entity_declarative_part>
[BEGIN
<entity_statement_part> ]
END [ENTITY] [ <entity_simple_name> ] ;
【０２８１】
この例では、記号「：：＝」は、左側要素が右側構成物内に誘導され得ることを示す。右側は、より多くの派生語彙素（ｄｅｒｉｖａｔｉｏｎｓ  ｌｅｘｅｍｅｓ）によって構成されることが可能である（大文字で示される原子要素はもはや誘導可能ではない）。ノードは派生点であり、一方、葉は、もはや誘導され得ないノードである（即ち、右側は、語彙素だけを含む）。角括弧「［」及び「］」は、オプションの派生を表現するために使用される（これらの角括弧は、反復規則を定義するのに有用である）。記号「＜」及び「＞」は、さらなる誘導を示すために使用される。引用符は、ＶＨＤＬ規則とコヒーレントに、列を示すために使用される。
【０２８２】
このタイプの構文は、構造的に言語に一致するいずれかの可能な「語句」を生成することが可能であり、所与のテキストがその言語に属する（即ち、所与のテキストが規則に従う）かどうかを検証するために使用されることが可能である。このタイプの構文は、構造記述に過ぎず、その「意味」に関する何らの情報を伝えることはできず、むしろ、その文脈上の情報を処理するための諸属性が加えられなければならない。
【０２８３】
Left_hand ↑(H)↓(L) ::= right_hand_0 ↑(HO)↓(LO) [right_hand_1↑(H1)↓(L1)],
【０２８４】
式中、
【０２８５】
↑（Ｌ）は、下位レベルの派生から誘導されて、上位レベルの派生に送信される情報を示す。
【０２８６】
↓（Ｈ）は、上位レベルの派生から誘導されて、下位レベルの派生に送信される情報を示す。
【０２８７】
それぞれのノードは、Ｈ０．．．Ｈｎから始めて、Ｈがどのように演算されるか、及びＬから始めて、異なるＬ０．．．Ｌｎがどのように取得されるかを定義するための規則のセットを定義する。
【０２８８】
それぞれのレベルは、言語の「意味」を有するために、その語句に関して、Ｈ、Ｌ、Ｈｉ、及びＬｉに関する条件のセットを定義することが可能である。
【０２８９】
（［１］から［１４］と番号付けられた）以下の規則は、ＩＰ及び計器の宣言を記述する。:
【０２９０】
[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
Ｃｒｏｓｓ＿ｄｅｃｌ／＝φである場合、それぞれの「有線」要素に関して「選択」文／「選択解除」文、及びそれぞれの「トランザクション」要素に関して少なくとも「選択」が存在することを確認する。
NB: Cross_decl = φ ⇔ Sel_Cross =φ,そうでない場合は、エラー
「ａｒｃｈｉｔｅｃｔｕｒｅ＿ｂｏｄｙ」内のすべてのモジュール間依存が解決されていることを確認する。
Ｐａｒ／＝φである場合、（Ｈ，ｎ）内に、少なくとも１つの並列レジスタが存在すること、及び（Ｐ＿ｉｎｆｏ）内に、対応する「ｇｅｔ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」／「ｓｅｎｄ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」の宣言が存在することを確認する。
Ｐａｒ＿ｄｅｃ／＝φである場合、Ｐａｒ内の情報（ポート名、並行レジスタ、接続、ファニング（ｆｕｎｎｉｎｇ）など）とのその整合性を確認する。
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)]);
この規則は、スキャンパスとのリンクの定義及び最終的な外部参照の宣言を可能にする。
ＮＢ。＜ｃｒｏｓｓｒｏａｄ＿ｉｎｆｏｒｍａｔｉｏｎ＞は規則［１０］から誘導される。
【０２９１】
[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;]
【０２９５】
この規則は、計器の使用に関する必須の手順のセット、及びオプションのテスト手順セットを記述する。Ｐ＿Ｉｎｆｏ＝Ｐ＿Ｔｅｓｔ∪Ｐ＿ｕｓｅ
【０２９６】
[9] <internal_scan_path>↑(H,n) ::=
<component_instantiation_statement> [<internal_scan_path>]
【０２９７】
「部分的なアクセス」又は「完全なアクセス」の場合、スキャンパスは、その構成要素の直接的なインスタンスの作成によって記述される（（Ｈ，ｎ）の文脈上の規則に関する規則［３７］〜［４１］を参照されたい）。この規則は、計器及びＩＰの入れ子構造を可能にする点に留意されたい。「アクセスなし」デバイスは、この派生の欠如によって識別される。
【０２９８】
[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
【０２９９】
規則［１］〜［１４］のこの計器定義及びＩＰ定義 は、（伝統的なＶＨＤＬ構成要素の場合に行われるように）何度もＩＰ／計器のインスタンスを作成することを可能にする。これは規則［１５］に示される。
【０３００】
[15] component_instantiation_statement ::=
instantiation label :
instantiated unit
[generic map aspect]
[port map aspect] ;
【０３０１】
構文の観点から、このインスタンスの作成規則（規則［１５］）は、伝統的なＶＨＤＬにおけるのと全く同じである。すべての新規性は、文脈側にある。
（１）  インスタンスの作成は、スキャンパス内へのデバイスの複写を作成する。コンパイラは、コンパイルライブラリからその情報を容易に取り出して、システムスキャンパスを完了するために、それらの情報を使用することが可能である。
（２）汎用マップは、正確なスキャンパス挿入点（「先行部分」、「後続部分」、アフルエント及びトリビュタリ）の指定を処理する。
（３）その他の汎用マッピングは外部要素の記号名を実際の記号名（即ち、対応するインスタンスのラベル）に分解することになる。テストツールは、参照された手順がインスタンスが作成された要素内に実際に存在することを確認しなければならないことにもなる。
【０３０２】
（［１６］から［３３］と番号付けられた）以下の規則は、例示的な手順を記述する。
【０３０３】
[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>;]
【０３０４】
規則。手順のプロトタイプは、人間のユーザにとって、コードをより読みやすくするための単なる構文技術である。これらの手順のプロトタイプは、文脈上の情報を運ばない。
【０３０５】
ＮＢ。「接続」派生は、選択手順に関してだけ可能にされる。
【０３０６】
[20] <function_prototype> ::=
FUNCTION <procedure_name> (<formal_parameter_list>)
[DEPENDENCIES (<dep_list>);]
LENGTH (<length_descriptor>);
BUSY_MODE ( <mode_identifier>);
[<optional_attributes>]
RETURN <type> ;
【０３０７】
規則。手順プロトタイプは、人間のユーザにとって、コードをより読みやすくするための単なる構文技術である。これらの手順のプロトタイプは、文脈上の情報を運ばない。
【０３０８】
ＮＢ。「接続」派生は、選択手順に関してだけ可能にされる。
【０３０９】
［２１］＜ｆｏｒｍａｌ＿ｐａｒａｍｅｔｅｒ＿ｌｉｓｔ＞
【０３１０】
規則。パラメータは、通常のＶＨＤＬパラメータの構文に従う。スキャンパススライスの参照は、明示的な名前付けによって行われることになる。
【０３１１】
[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:
Ｐ＝パラメータ情報（標準のＶＨＤＬ）。少なくとも１つのパラメータがスライス又は静的ビットストリームを参照すべきである。
Ｌ＝手順の長さ情報
Ｄ＝依存情報
Ｍ＝ビジーモード情報
＜ｐｒｏｃｅｄｕｒｅ＿ｎａｍｅ＞はリテラル識別子である
通常のＶＨＤＬにおけるような＜ｐｒｏｃｅｄｕｒｅ＿ｂｏｄｙ＞派生
Proc_info=P ∪L ∪D ∪M
Ｃｒｏｓｓ＿ｉｎｆｏ＝Ｓｅｌ＿ｉｎｆｏ／＝φ（Ｓｅｌ［１］〜Ｓｅｌ［６］における名前付け規則）である場合、Ｃｒｏｓｓ＿ｉｎｆｏ＝Ｓｅｌ＿ｉｎｆｏ∪Ｃ＿ｔｙｐｅ
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:
Ｐ＝パラメータ情報（標準のＶＨＤＬ）。少なくとも１つのパラメータがスライス又は静的ビットストリームを参照すべきである。
Ｌ＝手順の長さ情報
Ｄ＝依存情報
Ｍ＝ビジーモード情報
＜ｆｕｎｃｔｉｏｎ＿ｎａｍｅ＞はリテラル識別子である
通常のＶＨＤＬにおけるような＜ｆｕｎｃｔｉｏｎ＿ｂｏｄｙ＞派生
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: 
Ｐ＝付随手順の名前
Ｅ＝外部デバイスＰの名前がＣｈｅｃｋ  Ｅ∈Ｅｘｔ内で定義される、そうでない場合は、エラー
D=P ∪ E
[27] <mode_identifier>↑(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)
規則。Ｔ＝Ｔ又はＬ∪Ａ∪Ｕ
Ｌ＝関数の長さに関する下限
Ａ＝平均的な関数の長さ
Ｕ＝関数の長さに関する上限
[30] < time_exp >↑(T) ::= <numeral> <time_type>｜<numeral>
【０３１２】
規則。（時間単位が指定されない場合）Ｔは、絶対時間又はクロックカウントを含む
【０３１３】
[31] < end_cond >↑(C) ::= <boolean_expression>
【０３１４】
規則。ブール表現は、手順の終了条件を示す。明示的な名前付けによって識別されたスライスからの信号を使用すべきである。
【０３１５】
[32] <connection_type> ::= WIRED ｜ TRANSACTION
[33] <optional_attributes> ::=
【０３１６】
規則。この派生は、目的別に開放されたままである。オプションのパラメータを定義することによって、任意の２人の関係者は、標準化時間に任意に選択されたフォーマットの代わりに、それらの関係者が好むフォーマットで情報を交換することが可能になる。これは、例えば、電力管理に関する切替動作の推定を提示するために、又はジュール／ワットを直接提示するために使用され得る。テストツールは、そのテストツールが実装しない派生を無視することになり、最終的に、警告を作成する。
【０３１７】
本明細書で説明されるように、選択手順は、その名前によって識別される。（Ｓｅｌ［１］からＳｅｌ［６］と番号付けされた）以下の規則は、選択手順の名前付けの制御を、ＢＮＦのような構文で説明する。図８、図、９、及び図１０に関して本明細書で示され、かつ説明された例示的なクロスロードデバイスは、これらの規則の例示的な適用を示す。
【０３１８】
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=φ;
【０３１９】
説明。この規則は、機能が命令するアフルエントを検出する。これは、なし（即ち、規則は空のセットとして終了する）であってよく、すべてのアフルエント（指定されない）であってよく、又は単なるサブセット（１つ以上のａｆｆｌｕｅｎｔ＿＜ｎｍｂ＞）であってもよい。
【０３２０】
sel[5] <numbered_affluents↑(New_Affls)> ::=
AFFLUENT_<nmb>[;< numbered_affluents↑(Old_Affls)>]
規則。＜ｎｍｂ＞は、任意の自然数であってよい。
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) select(tributary_nmb : in std_logic_vector,
affluent_nmb : in std_logic_vector)
2) select(tributary_name : in string,
affluent_name : in string)
【０３２５】
自動テスト生成ツールは、対応する名前／数を正に記入しなければならないことになる。より正確な選択機能の場合、引数のうちのいくつか（例えば、名前自体がすでに目標を単一義に識別している場合（例えば、図８のＳＩＢ）、最終的になくなる、図９の階層切替デバイスの選択解除機能）だけが使用される必要がある。
【０３２６】
以下の規則（規則［３４］から「４１」は、ＶＨＤＬ９３に基づき、かつＶＨＤＬ９３と互換性があるが、感覚的により簡単である。ＮＳＤＬに直接関係しないすべての派生は、除去されている。規則［３４］から「３９」は、本明細書において、新しい文脈規則を記述するためだけに示される伝統的なＶＨＤＬ構文規則である点に留意されたい。
【０３２７】
[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)
【０３２８】
注記。これは、ＮＳＤＬがＶＨＤＬと統合し、ＩＰ及び計器を最上位のエンティティとして定義することを可能にする規則である。これはまた、テストツールが、その情報が（Ｈ，ｎ）、（Ｐ＿ｉｎｆｏ）、（Ｃｒｏｓｓ）、及び（Ｐａｒ）の中に格納される階層的な解析を完了するポイントでもある。
【０３２９】
規則。Ｅｘｔ＝φ、そうでない場合は、エラー（即ち、トップモジュール）
【０３３０】
[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];
【０３３１】
規則。この規則はインスタンスの作成時にコンパイラによって使用されることになる、定義されたエンティティのスキャンパス内部を記述する。この規則はスキャンパスを有するが、機能／手順のセットは有さないＰ１６８７非準拠エンティティを記述するために使用されることが可能である。エンティティは、依然として、伝統的なＶＨＤＬにおけるような状態にとどまり、従って、エンティティは外部依存を許可しない点に留意されたい。
【０３３２】
[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> ] ;
規則。（Ｐ，Ｆ）によって定義されたスキャンチェーンの整合性（ＴＤＩで始まる、ＴＤＯで終わる、ホールなし、階層から線形に離れるなど）を確認する。
[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)]
【０３３３】
規則。この規則は、規則の開発をスキャンチェーン関連のセルのインスタンスのインスタンスに制限する、同時処理文についてのＶＨＤＬ規則に関する文脈確認として解釈されることも可能である。
ＳＰ＿ｉｎｆｏ＝Ｓ＿ｏｌｄ∪Ｃ＿ｉｎｆｏ
Ｃ＿ｉｎｆｏ内のＰ及びＦを使用して、スキャンパスの整合性に関して確認する。
【０３３４】
[41] component_instantiation_statement ↑(C_info)::=
instantiation_label:
instantiated_unit↑(H,n)↑(P,F[,H_in, H_out])
[ generic_map_aspect ]
[ port_map_aspect];
【０３３５】
規則。データベース内の「ｉｎｓｔａｔｉａｔｅｄ＿ｕｎｉｔ」から解釈されるｎ（セルの数）、Ｈ（階層情報）、Ｐ（先の部分）、Ｆ（後続部分）、（Ｈ，ｎ）
制御セルによって導入されたＨ＿ｉｎ階層化スキャンパス、Ｈ＿ｏｕｔ階層化スキャンパス
Ｃ＿ｉｎｆｏ＝（Ｈ，ｎ）∪（Ｐ，Ｆ［Ｈ＿ｉｎ，Ｈ＿ｏｕｔ］）
【０３３６】
（［４２］から［５７］と番号付けされた）以下の規則は、並列アクセスに関する例示的な形式規則を含む。
【０３３７】
[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)]
【０３３８】
規則。ｐｒｏｖｅｎａｎｃｅ＿ｉｎｆｏ＝ｏｌｄ＿ｐｒｏｖ∪ｉｄｆ
【０３３９】
ＮＢ。「識別子」
【０３４０】
この規則は、構成に関して使用される並列ポートに関する何らの制限なしに、（図２８に関して示され、かつ説明された）ファンイン及びファンアウトの両方の記述を可能にする。この構成は、ポート全体を使用して、ＶＨＤＬ信号（「＆」記号）の連結規則に従って行われる。
【０３４１】
[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
「ｐａｒａｌｌｅｌ＿ｒｅｇ」は伝統的なＶＨＤＬ識別子である
[57]<parallel_connection>↑(par_connection) ::=
<port_name>↑(idf) CONNECTS <register_list>↑(idf_list);
Rule: par_connection = idf ∪ idf_list
【０３４２】
本明細書で説明されるように、クロスロードデバイスに類似した形で、並列インターフェースは、主なリソースを識別するために、いくつかの名前付け規則を利用する。名前付けを必要としているこれらの要素は、以下を含む。
【０３４３】
並列スライス。並列接続によってアクセスされ得るスライスは、「ｐａｒａｌｌｅｌ＿」で始まるその名前を有する。接続方式に続いて、これらのスライスは、直列スキャンパス又は直列スキャンパスの一部から完全に独立し得る。
【０３４４】
並列機能。並列リソースに対するアクセスは、２つの特定の機能即ち、「ｇｅｔ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」及び「ｓｅｎｄ＿ｐａｒａｌｌｅｌ＿ｄａｔａ」を介して取得される。
【０３４５】
本明細書で説明されるように、並列インターフェースに関して、３つの可能な同期モードが存在する。即ち、スキャンチェーンとの同期、バースト、及び非同期である。一実施形態では、これらのモード同士の間のトグルは、正にクロスロード選択機能に関するように、必要に応じて、ビットストリームがどのように変更されなければならないかを指定する特定の機能によって行われる。これらの機能は以下を含む。
【０３４６】
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;
【０３４７】
テストツールは、これらの機能に対する呼を追跡し続けることによって、どのモードがアクティブであるかを容易に知ることが可能である。デバイスは、そのデバイスが実際に実装するモードに関する機能だけを宣言することになる。
【０３４８】
タイプ「ｂｕｒｓｔ＿ｌｅｎｇｔｈ＿ｔｙｐｅ」は、開発者がそのバーストに関して可能にされた値の範囲を示すことができるように、整数のサブタイプとして並列インターフェースの内部に定義されなければならない。例は以下を含む。即ち、「ｓｕｂｔｙｐｅ  ｂｕｒｓｔ＿ｌｅｎｇｔｈ＿ｔｙｐｅは、整数範囲３から１０である」、「ｔｙｐｅ  ｂｕｒｓｔ＿ｌｅｎｇｔｈ＿ｔｙｐｅは（６，８，１０）である」などである。この解決策は、それぞれの並列インターフェースが、局所的にだけ有効になり、従って、最終的なその他のインターフェースを干渉しないことになる、その独自の「ｂｕｒｓｔ＿ｌｅｎｇｔｈ＿ｔｙｐｅ」を宣言することになることを意味する。
【０３４９】
並列インターフェースが２つ以上のポートを有する一実施形態では、機能が参照するポートの名前が機能名に添付されることになる。例は、「ｓｅｔ＿ｓｃａｎ＿ｓｙｎｃｈｒｏ＿ｐａｒａｌｌｅｌ＿ｏｕｔ＿０」、ｄｉｓａｂｌｅ＿ｐｏｒｔ＿ｐａｒａｌｌｅｌ＿ｉｎ」などを含む。
【０３５０】
前述のＢＮＦ規則は、実装されたＮＳＤＬに対して使用され得る規則の例を単に構成する。本発明は、かかる規則に限定されず、又はかかる規則によって限定されない。
【０３５１】
図３０は、本明細書で説明された機能を実行する際に使用するのに適した汎用コンピュータのハイレベルブロック図を示す。図３０に示されるように、システム３０００は、プロセッサ要素３００２（例えば、ＣＰＵ）と、メモリ３００４（例えば、ランダムアクセスメモリ（ＲＡＭ）及び／又は読出し専用メモリ（ＲＯＭ））と、テストモジュール３００５と、様々な入出力装置３００６（例えば、テープドライブ、フロッピードライブ、ハードディスクドライブ、又はコンパクトディスクドライブ、受信機、送信機、スピーカ、ディスプレイ、出力ポート、及びユーザ入力デバイス（キーボード、キーパッド、マウスなど）を含むが、これらに限定されない、記憶デバイス）とを含む。
【０３５２】
本発明は、ソフトウェアの形で、かつ／又は例えば、特定用途向け集積回路（ＡＳＩＣ）、汎用コンピュータ若しくは任意のその他のハードウェア均等物を使用して、ソフトウェアとハードウェアの組合せの形で実装されることが可能である点に留意されたい。一実施形態では、本テストプロセス３００５は、メモリ３００４内にロードされて、上で議論された機能を実装するために、プロセッサ３００２によって実行されることが可能である。従って、本発明の（関連するデータ構造を含む）テストプロセス３００５は、コンピュータ可読媒体又はキャリア、例えば、ＲＡＭメモリ、磁気ドライブ若しくは磁気ディスケット又は光ドライブ若しくは光ディスケットなどの上に格納されることが可能である。
【０３５３】
本明細書において、ＮＳＤＬを使用して記述及びテストされることが可能なシステムオンチップデバイスの特定の実装形態に関して主に示され、かつ説明されるが、ＮＳＤＬを使用して、様々なその他のシステムオンチップデバイスが記述及びテストされることが可能である。本明細書において、システムオンチップデバイスを記述及びテストするためにＮＳＤＬを使用することに関して主に示され、かつ説明されるが、ＮＳＤＬを使用して、様々なその他の電子回路が記述及びテストされることが可能である。本発明は、本明細書で示され、かつ説明された特定の電子回路を記述及びテストすることに限定されることが意図されない。
【０３５４】
本明細書において、ＮＳＤＬを使用して、システムオンチップデバイスを記述及びテストするために利用されることが可能なテストシステムの特定の実装形態に関して主に示され、かつ説明されるが、ＮＳＤＬを使用して、システムオンチップデバイスを記述及びテストするために、テストシステムの様々なその他の実装形態が利用されることが可能である。本発明は、本明細書で示され、かつ説明されるテストシステムの特定の実装形態に限定されることが意図されない。
【０３５５】
本明細書において、ソフトウェア方法として議論されたステップのうちのいくつかは、例えば、様々な方法ステップを実行するためにプロセッサと協働する回路として、ハードウェア内で実装されることが可能であることが企図される。本発明の一部は、コンピュータプログラム製品として実装されることが可能であり、コンピュータ命令は、コンピュータによって処理されるとき、本発明の方法及び／若しくは技法が起動されるように、又はそうでない場合は、本発明の方法及び／もしく技法が提供されるように、コンピュータの動作を適合する。本発明の方法を起動するための命令は、固定媒体内若しくは着脱可能な媒体内に格納され、ブロードキャスト内又はその他の信号保持媒体（ｓｉｇｎａｌ  ｂｅａｒｉｎｇ  ｍｅｄｉｕｍ）内でデータストリームを経由して送信され、かつ／あるいは命令に従って動作しているコンピューティングデバイス内のメモリ内に格納されることが可能である。
【０３５６】
本発明の教示を組み込む様々な実施形態が本明細書で詳細に示され、かつ説明されているが、当業者は、これらの教示を依然として組み込む、多くのその他の様々な実施形態を容易に考案することが可能である。
【図１】
2011512568.tif 000003
【図２】
2011512568.tif 000004
【図３】
2011512568.tif 000005
【図４】
2011512568.tif 000006
【図５】
2011512568.tif 000007
【図６】
2011512568.tif 000008
【図７】
2011512568.tif 000009
【図８】
2011512568.tif 000010
【図９】
2011512568.tif 000011
【図１０】
2011512568.tif 000012
【図１１】
2011512568.tif 000013
【図１２】
2011512568.tif 000014
【図１３】
2011512568.tif 000015
【図１４】
2011512568.tif 000016
【図１５】
2011512568.tif 000017
【図１６】
2011512568.tif 000018
【図１７】
2011512568.tif 000019
【図１８】
2011512568.tif 000020
【図１９】
2011512568.tif 000021
【図２０】
2011512568.tif 000022
【図２１】
2011512568.tif 000023
【図２２】
2011512568.tif 000024
【図２３Ａ】
2011512568.tif 000025
【図２３Ｂ】
2011512568.tif 000026
【図２４】
2011512568.tif 000027
【図２５】
2011512568.tif 000028
【図２６】
2011512568.tif 000029
【図２７】
2011512568.tif 000030
【図２８】
2011512568.tif 000031
【図２９】
2011512568.tif 000032
【図３０】
2011512568.tif 000033
【国際調査報告】
2011512568.tif 000034
2011512568.tif 000035
2011512568.tif 000036