JP4332200B2 - モジュール式試験システム内のパターンオブジェクトファイルを管理するための方法およびモジュール式試験システム - Google Patents
モジュール式試験システム内のパターンオブジェクトファイルを管理するための方法およびモジュール式試験システム Download PDFInfo
- Publication number
- JP4332200B2 JP4332200B2 JP2008180843A JP2008180843A JP4332200B2 JP 4332200 B2 JP4332200 B2 JP 4332200B2 JP 2008180843 A JP2008180843 A JP 2008180843A JP 2008180843 A JP2008180843 A JP 2008180843A JP 4332200 B2 JP4332200 B2 JP 4332200B2
- Authority
- JP
- Japan
- Prior art keywords
- pattern
- test
- vendor
- compiler
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000012360 testing method Methods 0.000 title claims description 702
- 238000000034 method Methods 0.000 title claims description 182
- 238000012546 transfer Methods 0.000 claims description 3
- 230000004931 aggregating effect Effects 0.000 claims 2
- 230000006870 function Effects 0.000 description 134
- 238000011990 functional testing Methods 0.000 description 102
- 230000014509 gene expression Effects 0.000 description 79
- 230000008676 import Effects 0.000 description 61
- 239000013598 vector Substances 0.000 description 49
- 230000008569 process Effects 0.000 description 28
- 238000013507 mapping Methods 0.000 description 27
- 230000009969 flowable effect Effects 0.000 description 26
- 239000011159 matrix material Substances 0.000 description 25
- 230000007704 transition Effects 0.000 description 22
- 239000011800 void material Substances 0.000 description 21
- 230000007246 mechanism Effects 0.000 description 19
- 101100045596 Schizosaccharomyces pombe (strain 972 / ATCC 24843) tcg1 gene Proteins 0.000 description 15
- 230000000007 visual effect Effects 0.000 description 15
- 230000008859 change Effects 0.000 description 14
- 238000004891 communication Methods 0.000 description 14
- 238000011867 re-evaluation Methods 0.000 description 14
- 230000009471 action Effects 0.000 description 12
- 230000001419 dependent effect Effects 0.000 description 12
- 238000012545 processing Methods 0.000 description 12
- 102100025677 Alkaline phosphatase, germ cell type Human genes 0.000 description 11
- 101000574440 Homo sapiens Alkaline phosphatase, germ cell type Proteins 0.000 description 11
- 238000013459 approach Methods 0.000 description 10
- 230000008901 benefit Effects 0.000 description 10
- 239000000243 solution Substances 0.000 description 10
- 230000000694 effects Effects 0.000 description 9
- 238000009434 installation Methods 0.000 description 8
- 238000003860 storage Methods 0.000 description 8
- 238000013519 translation Methods 0.000 description 8
- 230000006399 behavior Effects 0.000 description 6
- 238000011161 development Methods 0.000 description 6
- 230000003993 interaction Effects 0.000 description 6
- 238000004088 simulation Methods 0.000 description 6
- 102100036300 Golgi-associated olfactory signaling regulator Human genes 0.000 description 5
- 101710204059 Golgi-associated olfactory signaling regulator Proteins 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 5
- 230000002452 interceptive effect Effects 0.000 description 5
- 238000012797 qualification Methods 0.000 description 5
- 230000001360 synchronised effect Effects 0.000 description 5
- 241000132023 Bellis perennis Species 0.000 description 4
- 235000005633 Chrysanthemum balsamita Nutrition 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000005259 measurement Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000005192 partition Methods 0.000 description 4
- 239000000523 sample Substances 0.000 description 4
- 238000013515 script Methods 0.000 description 4
- 239000004065 semiconductor Substances 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 238000010200 validation analysis Methods 0.000 description 4
- 102100033265 Integrator complex subunit 2 Human genes 0.000 description 3
- 108050002021 Integrator complex subunit 2 Proteins 0.000 description 3
- 230000027455 binding Effects 0.000 description 3
- 238000009739 binding Methods 0.000 description 3
- 125000004122 cyclic group Chemical group 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- 239000000796 flavoring agent Substances 0.000 description 3
- 235000019634 flavors Nutrition 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 230000000638 stimulation Effects 0.000 description 3
- 238000010998 test method Methods 0.000 description 3
- 101150001015 BOP1 gene Proteins 0.000 description 2
- 102100039435 C-X-C motif chemokine 17 Human genes 0.000 description 2
- 101000889048 Homo sapiens C-X-C motif chemokine 17 Proteins 0.000 description 2
- 102100024061 Integrator complex subunit 1 Human genes 0.000 description 2
- 101710092857 Integrator complex subunit 1 Proteins 0.000 description 2
- 101100084025 Mus musculus Alpg gene Proteins 0.000 description 2
- 101100444142 Neurospora crassa (strain ATCC 24698 / 74-OR23-1A / CBS 708.71 / DSM 1257 / FGSC 987) dut-1 gene Proteins 0.000 description 2
- 101100244014 Neurospora crassa (strain ATCC 24698 / 74-OR23-1A / CBS 708.71 / DSM 1257 / FGSC 987) ppi-5 gene Proteins 0.000 description 2
- 101150023294 PIN4 gene Proteins 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 239000003795 chemical substances by application Substances 0.000 description 2
- 230000002950 deficient Effects 0.000 description 2
- 238000010348 incorporation Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- BULVZWIRKLYCBC-UHFFFAOYSA-N phorate Chemical compound CCOP(=S)(OCC)SCSCC BULVZWIRKLYCBC-UHFFFAOYSA-N 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 101150071434 BAR1 gene Proteins 0.000 description 1
- 101100457838 Caenorhabditis elegans mod-1 gene Proteins 0.000 description 1
- 101100369802 Caenorhabditis elegans tim-1 gene Proteins 0.000 description 1
- 102100034032 Cytohesin-3 Human genes 0.000 description 1
- 101710160297 Cytohesin-3 Proteins 0.000 description 1
- 101100064076 Deinococcus radiodurans (strain ATCC 13939 / DSM 20539 / JCM 16871 / LMG 4051 / NBRC 15346 / NCIMB 9279 / R1 / VKM B-1422) dps1 gene Proteins 0.000 description 1
- 101100064083 Deinococcus radiodurans (strain ATCC 13939 / DSM 20539 / JCM 16871 / LMG 4051 / NBRC 15346 / NCIMB 9279 / R1 / VKM B-1422) dps2 gene Proteins 0.000 description 1
- 101150110972 ME1 gene Proteins 0.000 description 1
- 101100310541 Mus musculus Snap23 gene Proteins 0.000 description 1
- 101001128814 Pandinus imperator Pandinin-1 Proteins 0.000 description 1
- 101001024685 Pandinus imperator Pandinin-2 Proteins 0.000 description 1
- 101100083552 Photorhabdus laumondii subsp. laumondii (strain DSM 15139 / CIP 105565 / TT01) pllA gene Proteins 0.000 description 1
- 102100028029 SCL-interrupting locus protein Human genes 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 208000036550 childhood-onset striatonigral degeneration Diseases 0.000 description 1
- 238000010367 cloning Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000013101 initial test Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- VIKNJXKGJWUCNN-XGXHKTLJSA-N norethisterone Chemical compound O=C1CC[C@@H]2[C@H]3CC[C@](C)([C@](CC4)(O)C#C)[C@@H]4[C@@H]3CCC2=C1 VIKNJXKGJWUCNN-XGXHKTLJSA-N 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000012224 working solution Substances 0.000 description 1
Images
Landscapes
- Tests Of Electronic Circuits (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
- Debugging And Monitoring (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Description
・別の実施形態では、システムコントローラおよびサイトコントローラは1つまたは複数のコンピューティングデバイスで実装することができる。各コンピューティングデバイスは、
・種々の基本システムサービスを取り扱うための手順、およびハードウエアに依存するタスクを実行するための手順を含むオペレーティングシステム;
・オペレーティングシステムと、パターンオブジェクトファイルを管理するためのアプリケーションプログラムのような、試験システムの他のアプリケーションプログラムとの間のインターフェースを構成するためのアプリケーション層;
・オペレーティングシステムおよびアプリケーションプログラムからの命令を実行するためのプロセッサユニット;および
・試験システムのデータを記憶するためのメモリユニットを含むことができ、メモリユニットは、ランダムアクセスメモリ、不揮発性メモリまたは大容量記憶装置を含むことができる。
試験環境は、テスタをインストールし、それを1組の試験を実行するために準備するための必要な条件を指定する1組のファイルを含む。試験環境は、以下に記載されるもののためのファイルを含むことが好ましい。
1.テスタ資源定義:そのオープンアーキテクチャ試験システムにおいて利用することができるテスタ資源タイプ、およびそのような資源のためにサポートされるパラメータを指定するためのファイル。
2.テスタ構成:サイトコントローラ、サイトおよび対応するマッピングを指定するためのファイル。
3.モジュール構成:各サイト内のハードウエアモジュールを指定するためのファイル。
4.ピン記述:信号ピン、電源のようなDUTピンを命名し、ピングループを記述するためのファイル。
5.ソケット:DUTピン‐テスタピンの割当てを指定するためのファイル。
6.ピンオプション:ピンのための特殊なオプション又はモードを指定するためのファイル。
7.パターンリスト:試験パターンおよびそのシーケンスを指定するためのファイル。
8.パターン:試験ベクトルを指定するためのファイル。
各ハードウエアモジュールは、試験システムによって用いるための1つまたは複数のタイプのハードウエア資源(略して資源)を提供する。テスタ資源定義は、利用可能な資源タイプのための1組の資源名、並びにそれぞれの特定の資源タイプに関連する1組のパラメータ名およびタイプを宣言するために用いられることが好ましい。たとえば、資源名dpinは、デジタルテスタピンを指すために用いられる。これらの資源は、VIL(入力低電圧用)、VIH(入力高電圧用)、VOL(出力低電圧用)、VOH(出力高電圧用)などのパラメータを有する。資源定義ファイルは、「.rsc」の拡張子を有するであろう。以下に示されるのは、いくつかのテスタ資源を含む、資源定義の一例である。
# File Resources.rsc
#
Version 0.1.2;
ResourceDefs
{
# digital pins
dpin
{
# Low and High voltages for input pins
Voltage VIL, VIH;
# Low and High voltages for output pins
Voltage VOL, VOH;
}
# power supplies
dps
{
#
# PRE_WAIT specifies the time to wait after voltage
# reached its final value to start pattern
# generation. The actual time that the system
# will wait is a small system specified range:
# PRE_WAIT-delta <= actual <= PRE_WAIT+delta
#
# PRE_WAIT_MIN is a minimum amount to wait after voltage
# reached its final value to start pattern generation.
# It is a system specified range:
# PRE_WAIT_MIN <= actual <= PRE_WAIT_MIN+delta
#
# POST_WAIT specifies the time to wait after pattern
# generation ends to shut down the power. The actual
# time that the system will wait is a small system
# defined range:
# POST_WAIT-delta <= actual <= POST_WAIT+delta
#
# POST_WAIT_MIN specifies the time to wait after pattern
# generation ends to shut down the power. The actual
# time that the system will wait is a small system
# defined range:
# POST_WAIT_MIN <= actual <= POST_WAIT_MIN+delta
#
Time PRE_WAIT;
Time PRE_WAIT_MIN;
Time POST_WAIT;
Time POST_WAIT_MIN;
# The voltage.
Voltage VCC;
}
}
以下に与えられるのは、本発明の好ましい実施形態による資源定義ファイルのための構造である。
version-info resource-defs
version-info:
Version version-identifer;
resource-defs:
ResourceDefs {resource-def-list}
resource-def-list:
resource-def
resource-def-list resource-def
resource-def:
resource-name {resource-params-decl-list}
resource-params-decl-list:
resource-params-decl
resource-params-decl-list resource-params-decl
resource-params-decl:
elementary-type-name resource-param-name-list;
resource-param-name-list:
resource-param-name
resource-param-name-list , resource-param-name
1.version-identifier:集合[0−9a−zA−Z.]からの1つまたは複数の文字からなる文字列。それはバージョン番号を表す。
2.resource-name:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、数字で始まらない。それはdpinまたはdpsのような資源の名前を表す。
3.elemantary-type-name:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、数字で始まらない。それは、Voltage(cf.)のような基本タイプの名前を表す。
4.resource-param-name:集合[a−zA−Z_0−9]からの1つまたは複数の文字空なる文字列であり、数字で始まらない。それは、VILのような資源パラメータの名前を表す。
テスタ構成は、特定のシステム構成内のサイトコントローラ、およびサイトコントローラのスイッチマトリクス入力ポートへの接続を記載するために用いられることが好ましい1組の規則である。本発明の一実施形態のアーキテクチャでは、単一のサイトコントローラを単一のスイッチマトリクス入力ポートに接続することができる。したがって、この状況では、スイッチマトリクス接続は、システム内のサイトコントローラのための暗黙の識別子としての役割を果たす(他の構成も可能である)。以下は一般的なテスタ構成の一例である。
# Tester Configuration, Sys.cfg
#
Version 1.2.5;
SysConfig
{
#
# The first field is the hostname of the Site Controller machine;
# it can be specified as either a dotted-decimal IP address or a
# domain-qualified hostname.
#
# The second field is the switch matrix input port number, which
# implicitly serves as the identifier for the Site Controller
# connected to it.
#
zeus. olympus.deities.org 2;
127.0.0.2 4;
127.0.0.0 1; # SITEC-1
127.0.0.3 3;
}
以下に与えられるのは、本発明の一実施形態によるシステム構成ファイルのための構造である。
version-info system-config
version-info:
Version version-identifer;
system-config:
SysConfig{ site-controller-connection-list}
site-controller-connection-list:
site-controller-connection
site-controller-connection-list site-controller-connection
site-controller-connection:
site-controller-hostname input-port;
site-controller-hostname:
ip-address
domain-qualified-hostname
ip-address:
octet . octet .octet . octet
domain-qualified hostname:
name
domain-qualified-hostname . name
1.version-identifier:集合[0−9a−zA−Z.]からの1つまたは複数の文字からなる文字列。それはバージョン番号を表す。
2.octet:0〜255の負でない整数(10進表記)。
3.name:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、数字で始まらない。それは、ドメイン修飾されたホスト名内の名前部分を表す。
4.input-port:10進表記の負でない整数。
モジュール構成によって、テスタの物理的な構成、たとえばシステムシャーシ内の各モジュールの物理的な場所およびタイプを指定できるようになる。これは、動的なテスタバス構成によって必要とされ、そのテスタバス構成によって、テスタバスアドレスを物理的なスロットの場所にマッピングできるようになる。この情報は、システム構成の妥当性を検査するためにシステムブートアップ時に行われるハードウエア発見プロセスを可能にする。スイッチマトリクスの各出力ポートは物理的なスロットを定義し、そのスロットは単一のハードウエアモジュールによって占有されることが好ましい。以下に示されるのは、本発明の一実施形態による、ファイルModules.cfgにおいて指定されるモジュール構成の一例である。
# Module Configuration File, Modules.cfg
#
Version0.0.1;
ModuleConfig
{
#
# A configuration definition which provides information about
# the module type that is attached to slots 1-12 and 32-48.
# Note that a module might provide more than
# a single type of resource.
#
Slot1-12, 32-48 # Switch matrix output ports
# which use the configuration
# defined below.
{
VendorID 1; # defined vendor code.
ModuleID 1; # Vendor-defined id code.
ModuleDriver mod1. dll; # Module software.
#
# Resource named dpin specifies channels
# for digital data. The name dpin is not
# a keyword. It is simply the name of a hardware
# resource, and is obtained from the resource
# definition file.
#
Resource dpin
{
MaxAvailable32; # Resource units 1 .. 32.
}
Resource analog
{
MaxAvailablel6; # Resource units 1 .. 16.
Disabled 1-8; # Disabled resources 1 .. 8.
# So, enabled ones are 9 .. 16.
}
}
#
# A configuration definition which provides information about
# the module type that is attached to slots16-30, 50, and 61-64.
#
# Slot 16-30, 50, 61-64
{
Resource dpin
{
MaxAvailable32; # Max available resource units.
Disabled 3,30-32; # Disabled resources.
}
ModuleDriver "module two.dll";
VendorID 2;
ModuleID 2;
}
#
# A configuration definition, which provides information about
# the module type that is attached to slots 65-66.
#
Slot 65-66
{
ModulelD 4; # DPS module with 8 supplies.
ModuleDriver mod4.dll;
VendorID 1;
#
# Resource type dps specifying resource units for a
# Device Power Supply
#
Resource dps
{
MaxAvailable 4;
Disabled 1;
}
}
}
以下は、好ましい実施形態によるモジュール構成構造である。
version-info module-config-def
version-info:
Version version-identifier;
module-config-def:
ModuleConfig {slot-entry-list}
slot-entry-list:
slot-entry
slot-entry-list slot-entry
slot-entry:
Slot positive-integer-list {slot-info}
slot-info:
required-config-list
required-config-list:
required-config
required-config-list required-config
required-coiifig:
VendorID id-code ;
ModuleID id-code ;
ModuleDriver file-name ;
Resource resource-name {max-spec disabled specopt}
max-spec:
MaxAvailable positive-integer ;
disabled-spec:
Disabled positive-integer-list;
positive-integer-list:
positive-integer-list-entry
positive-integer-list , positive-integer-list-entry
positive- inte ger-list-entry:
positive-integer
positive-integer-number-range
positive-integer-number-range:
positive-integer - pos-integer
1.version-identifier:集合[0−9a−zA−Z.]からの1つまたは複数の文字からなる文字列。ただし、最初の文字は集合[0−9]から選択されなければならない。
2.positive-integer:集合[0−9]からの1つまたは複数の文字からなる文字列であり、0で始まらない。
3.id-code:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列。
4.resource-name:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列。ただし、第1の文字は集合[a−zA−Z]から選択されなければならない。
DUTピン記述はピン記述ファイルを用いて記述される。ユーザは、ピン記述ファイル内のDUTピンの記述を入手できようになり、その記述は拡張子.pinを有する。このプレーンテキストファイルは、少なくとも、DUTピン名のリストと、定義されたDUTピン名を利用する、命名されたピングループの初期定義とを含む(それらの定義は、たとえばプログラミングによって、後に変更または追加することができるので「初期」である)。
# Pin description file, myDUT.pin.
#
# Note that this implicitly imports the resource
# configuration file,Resources.rsc.
#
Version 1.1.3a;
PinDescription
{
Resource dpin
{
A0;
A1;
A2;
A3;
A4;
# This syntax expands to the names "ABUS[1]" and "ABUS[2]"
ABUS[1:2];
A5;
BBUS[1:8];
DIR;
CLK;
Group Grp1
{
DIR, CLK, A0, A1, A2, A3, A4, BBUS[1:4]
}
Group Grp2
{
A5,
#
# The following line will expand to
# "DIR, Al, A2, A4, A5, BBUS[2]":
#
Grp1 - CLK - A0 - A3 - BBUS [1] - BBUS [3:4] + A5,
BBUS[5:8]
}
}
Resource dps
{
vcc1;
vcc2;
vcc3;
Group PSG
{
vcc1, vcc2
}
}
}
1.ピングループおよびピンは同じ名前空間を共有し、グローバル(すなわち試験計画)範囲を有する。これらの名前をグローバル範囲にする結果の1つは、異なる資源ブロックにおいて宣言されるときでも、ピンおよびピングループが重複した名前を使用することができないことである。
2.ピン記述ファイルにおいて少なくとも1つの資源定義が必要とされる。
3.各資源において少なくとも1つのピン名が定義されなければならない。
4.ピンおよびピングループ名は資源境界内で固有であることが要求される。
5.2つ以上の資源のために同じピンまたはグループ名を定義することができる。しかしながら、同じ資源内に同じものがある場合には無視される。
6.1つのグループ定義内に現れる全てのピン名およびグループ名はその資源内で既に定義されていなければならない。
7.もし与えられる場合には、グループ定義は少なくとも1つのピン名またはグループ名を持たなければならない(すなわち、グループ定義は空であることはできない)。
8.ピングループ定義は、予め定義されたピングループへの参照を含むことができる。
9.ピングループ定義は、予め定義されたピンおよび/またはピングループの追加および削除のような集合演算を含むことができる。
以下に与えられるのは、本発明の好ましい実施形態によるピン記述のための構造である。
version-info pin-description
version-info:
Version version-identifier;
pin-description:
PinDescription {resource-pins-def-list}
resource-pins-def-list:
resource-pins-def
resource-pins-def-list resource-pins-def
resource-pins-def:
Resource resource-name {pin-or-pin-group-def-list}
pin-or-pin-group-def-list:
pin-or-pin-group-def
pin-or-pin-group-def-list pin-or-pin-group-def
pindef-or-pin-groupdef:
pin-def;
pin-group-def
pin-def:
pin-name
pin-name [index : index]
pin-group-def:
Group pin-group-name {pin-group-def-item-list}
pin-group-def-item-list:
pin-def
pin-group-def-item-list, pin-def
1.version-identifier:集合[0−9a−zA−Z.]からの1つまたは複数の文字からなる文字列。それはバージョン番号を表す。
2.resource-name:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、数字で始まらない。それはdpinまたはdpsのような資源の名前を表す。
3.pin-name:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、数字で始まらない。それは、ピンA0の名前を表す。
4.pin-gourp-name:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、数字で始まらない。それは、ピングループABUSの名前を表す。
5.index:負でない整数。それは、関連するピンのグループの下限または上限を表す。
ソケットは、DUTピン名と物理的なテスタピン(チャネル)割当てとの間のマッピングを指定する(物理的なテスタチャネル番号はモジュール構成ファイルにおいて定義される)。異なるソケットを用いて、異なるDUTパッケージおよび異なるロードボード構成などをサポートすることができることに留意されたい。マルチDUTシステムの場合、DUT/チャネル割当てのためのソケット定義は、基本ソケットの多数のサイトへの「クローニング」をサポートすることができる。しかしながら、異なるソケット(すなわち、同じ論理ピンのための異なる物理的なマッピング)はサイトモジュール区分を考慮すべきである。したがって、DUTピンをテスタチャネル割当てに与えることに加えて、ソケットは実効的にはサイト区分も定義する。こうして、ソケットファイルは、いくつかの個別のサイトソケットのための定義を含むことができる。以下に示されるのは、3つのDUTサイトを定義するソケットファイルのサンプルである。
SocketDef
{
DUTType CHIP3
{
PinDescription dutP3.pin; # The pin description file for CHIP3
DUT 2 # Uses the full-specification syntax
{
SiteController 1; # Switch Matrix input port
Resource dpin
{
#
# The CLK pin is assigned to resource dpin,
# slot 2, resource unit (channel) 13.
#
CLK 2.13;
#
# The DIR pin is assigned to resource dpin,
# slot 5, resource unit 15.
DIR 5.15;
#
# The following statement will be expanded to
# BBUS [7] 5.4
# BBUS [6] 5.5
# BBUS [5] 5.6
#
# So for example, the pin sequence BBUS[7], BBUS[6],
# BBUS[5] is assigned to the same slot 5, and to
# resource units 4,5 and 6 respectively.
#
BBUS [7:5] 5.[4:6];
BBUS[1:4] 7.[21:18];
BBUS [8] 9.16;
}
Resource dps
{
#
# The V1 pin is assigned to resource dps,
# slot 1, resource unit (channel) 1.
#
VCC1 1.1;
#
# The VCC2 pin is assigned to resource dps,
# slot 1, resource unit (channel) 2.
#
VCC2 1.2;
}
}# End DUT 2
DUT 1 # This is "cloned" from DUT 2 above
{
SiteController 1; # Same Site Controller as for DUT 2
Resource dpin
{
SIotOffset 1; # Offset value for slots
}
Resource dps
{
SlotOffset 10; # Offset value for slots
}
#
# The offset syntax above indicates that the slot/resource
# unit assignments are "cloned" from the first DUT defined
# for this DUTType, i.e., DUT 2, with the slots offset by
# the SlotOffset values.
#
# Looking at the definition of dpin resource units for
# DUT 2, CLK is bound to slot 2. Hence, for the present
# DUT, CLK is bound to slot 2 + 1= 3.
#
# Some of the new bindings in effect due to the offset
# assignments are shown in the table below:
#
#---------------------------------------------------------------------
# Pin Resource RUnit Slot
# -----------------------------------------------------------------------
# CLK dpin 13 2 + 1 = 3.
# DIR dpin 15 5 + 1= 6
# BBUS [8] dpin 16 9 + 1 = 10
# VCC1 dps 1 1 + 10 = 11
# VCC2 dps 2 1 + 10 = 11
#
} # End DUT 1
} # End DUTType CHIP3
DUTType 74LS245
{
PinDescription dutLS.pin;
DUT 3 disabled # This DUT site is disabled, and will be ignored
{
・・・
}
}# End DUTType 74LS245
} # End SocketDef
1.ソケットファイルは、モジュール構成ファイル、および所与のDUTタイプのためのユーザのピン記述ファイルの両方からの情報を用いる(上記の例のピン記述の場合の指定を参照されたい)。モジュール構成情報は、ソケットファイルコンパイラが暗黙のうちに利用することができる。ソケットファイルコンパイラは、パターンコンパイラの一部を構成し、ソケットDUT名からテスタチャネルへのマッピング、モジュール構成およびピン記述ファイルを読み出し、分析して、テスタピンのパターンコンパイラによって用いられるDUTピンへのマッピングを設定する。
2.DUTタイプ当たり少なくとも1つのDUTサイト定義が必要とされ、それは、SlotOffset構文ではなく、フルスペック構文を用いなければならない。同じDUTタイプに対して2つ以上のDUTサイト定義が与えられる場合には、第1のサイト定義はフルスペック構文を用いなければならない。
3.後続の各DUTサイト定義(同じDUTタイプ)は、フルスペック構文、SlotOffset構文のいずれかを用いることができるが、両方は用いることができない。これにより、個々のサイトが、標準パターンから逸脱できるようになる(たとえば、動作不能のチャネルに起因する)。
4.SlotOffset構文から導出される結合は、そのDUTタイプのために定義される第1のサイト(フルスペック構文を用いる)に対して定義される。
5.DUTサイトは、実際の物理的な順序で宣言される必要はない。これにより、第1の(物理的な)サイトがそのパターンから逸脱する状況が許される。
6.DUTサイトIDは、ソケット全体にわたって(すなわち、その中で定義される全てのDUTタイプにわたって)固有であることが要求される。
7.DUTサイト定義毎に少なくとも1つの資源定義が必要とされる。
8.サイト定義を、モジュール構成とともに用いて、試験構成が単一サイト/単一DUTであるか、単一サイト/多数DUTであるかを判定しなければならない。
9.全ての場合に、ソケットファイルは、ピン記述ファイルおよびモジュール構成ファイルと一致する1組のDUTチャネルマッピングを指定しなければならない。
10.場合によっては、1つまたは複数のDUTチャネルがテスタから切断されることをソケットが指定できるようにすることが望ましいであろう(たとえば、割り当てられた物理チャネルを特殊なID「0.0」を有するチャネルと指定することによる)。この場合、試験プログラムの関連で、これらのDUTチャネルを使用し、参照することができる。そのようなチャネル上での動作の結果として、システム警告が生成されるであろう(ただし、エラーではない)。ロード時に、切断されたチャネルのためのパターンデータは破棄されるであろう。
以下は、本発明の好ましい実施形態によるモジュール構成のための構造である。
version-info socket-def
version-info:
Version version-identifer;
socket-def:
SocketDef {device-specific-socket-def-list}
device-specific-socket-def-list:
device-specific-socket-def
device-specific-socket-def list device-specific-socket-def
device-specific-socket-def:
DUTType DUT-type-name {pin-description-file dut-info-list}
pin-description-file:
PinDesc pin-description-file-name ;
dut-info-list:
dut-info
dut-info-list dut-info
dut-info:
DUT dut-id {site-controller-input-port resource-info-list}
site-controller-input-port:
SiteController switch-matrix-input-port-number;
resource-info-list:
resource-info
resource-info-list resource-info
resource-info:
Resource resource-name {resource-item-unit-assignment-list}
resource-item-unit-assignment-list:
resource-item-unit-assignment
resource item-unit-assignment-list resource-item-unit-assignment
resource-item-unit-assignment:
resource-item-name slot-number. resource-unit;
resource-item-name [resource-item-index] slot-number. resource-
unit-index;
resource-item-name [resource-item-index-range]
slot-number. [resource-unit-index-range];
resource-item-index-range:
resource-item-index : resource-item-index
resource-unit-index-range:
resource-unit-index : resource-unit-index
1.version-identifier:集合[0−9a−zA−Z.]からの1つまたは複数の文字からなる文字列。それはバージョン番号を表す。
2.Dut-type-name:集合[0−9a−zA−Z.]からの1つまたは複数の文字からなる文字列。ただし、最初の文字は集合[0−9]から選択されてはならない。それは、CHIP3のようなDUTのタイプを表す。
3.pin-description-file-name:ファイルの簡単な名前であり、そのディレクトリ名は含まないが、全ての拡張子を含む。そのファイル名は、ホストオペレーティングシステムによって認識される構文からなり、引用符に囲まれる場合には、空白および他の文字が許される。
4.switch-matrix-input-port-number:10進表記の負でない整数であり、サイトコントローラに接続される入力ポートのポート数を表す。
5.dut-id:10進表記の負でない整数であり、DUTのインスタンスを特定する。
6.resource-name:集合[0−9a−zA−Z]からの1つまたは複数の文字からなる文字列であり、最初の文字は数字であってはならない。それは資源ファイルにおいて定義される資源の名前を表す。
7.resource-item-name:集合[0−9a−zA−Z]からの1つまたは複数の文字からなる文字列であり、最初の文字は数字であってはならない。それは、ピンまたはピングループのような資源ユニットの名前を表す。
8.resource-item-index:10進表記の負でない整数であり、資源項目のグループのうちの特定のメンバを表す。resource-item-index-rangeの関連では、それは、資源項目グループの連続した文字列の下限または上限を表す。
9.resource-unit-index:10進表記の負でない整数であり、資源ユニット(チャネル)のグループのうちの特定のメンバを表す。resource-unit-index-rangeの関連では、それは、資源ユニットグループの連続した文字列の下限または上限を表す。
論理的なピン名を物理チャネルにマッピングすること(たとえばソケットによって提供される)に加えて、テスタ資源を指定するためにいくつかの属性を用いることができることに留意されたい。たとえば、試験固有、ベンダ固有、および/または試験システム固有の場合がある、チャネルのための特定のハードウエア構成を定義するために、複数のオプションを用いることができる。これらのオプションは、ピンモードオプションを用いて記述され、ピンモードオプションファイルを通して入手できるようになるであろう。
{
clock IN double;
a0 OUT single;
・・・
};
先に指摘されたように、資源定義ファイル(Resource.rsc)、システム構成ファイル(Sys.cfg)およびモジュール構成ファイル(Module.cfg)は、「周知の」場所において入手できることが好ましい。この「周知の」場所は、システム環境変数Tester_ACTIVE_CONFIGSの値によって指定されるディレクトリである。たとえば、Tester_ACTIVE_CONFIGSの値がディレクトリF:\Tester_SYS\configsである場合には、システムは、以下のファイルが存在するものと予想するであろう。
・F:\Tester_SYS\configs\Resources.rsc
・F:\Tester_SYS\configs\Sys.cfg
・F:\Tester_SYS\configs\Modules.cfg
テスタシステムの2つの主なエンドユーザ向けコンポーネントのうちの1つが試験環境である。他のコンポーネントは、テスタがエンドユーザ(すなわち、試験技師および試験クラス開発者)に提供するプログラミングファシリティである。
ユーザ変数および定数のためのファイル*.usrv
仕様セットのためのファイル*.spec
レベルのためのファイル*.lvl
タイミングのためのファイル*.tim
試験条件グループのためのファイル*.tcg
ビン定義のためのファイル*.ddefs
カスタム関数および試験クラス用のファイルプリヘッダのためのファイル*.ph
カスタムタイプのためのファイル*.ctyp
カスタム変数のためのファイル*.cvar
試験計画のためのファイル*.tpl
・ユーザ変数および定数
・仕様セット
・レベル
・タイミング
・試験条件
・ビン定義
・プリヘッダ
・カスタムタイプ
・カスタム変数
・試験計画
試験記述ファイルをインポートすることにより、インポート用ファイルが、インポートされるファイルによって利用可能であるオブジェクトの名前を参照できるようになる。これにより、インポート用ファイルは、インポートされるファイルによって命名されるオブジェクトを参照できるようになる。ピン記述ファイルxxx.pinをインポートするソケットファイルaaa.socについて考える。同じくxxx.pinをインポートする別のbbb.socファイルも存在することができる。しかしながら、これらのインポートのいずれによっても、xxx.pinによって記述されるオブジェクトは発生しない。それらは、既に存在するものと仮定されるオブジェクトを参照するだけである。
Version 3.4.5.;
#
# These import statements will actually cause the
# objects to come into existence:
#
Import xxx.pin; # Elaborates pin and pin-group objects
Import aaa.soc; # Elaborates site socket map objects
# Other imports as necessary
・・・
Flow Flow 1
{
・・・
}
1.yがxを命名するインポートステートメントを有する。または、
2.xがzによってインポートされ、yがzを命名するインポートステートメントを有する。
ユーザ変数および定数を用いて、グローバル変数および定数が定義されるであろう。それらの定数は、その値がコンパイル時に固定され、変更することができないオブジェクトである。たとえば、最大整数値は定数になるであろう。一方、変数に結び付けられる式は、APIを介して、実行時に変更することができる。
・整数
・符号なし整数
・ダブル
・ストリング
・ボルト単位の電圧(V)
・ボルト/秒単位の電圧スルー(VPS)
・アンペア単位の電流(A)
・ワット単位の電力(W)
・秒単位の時間(S)
・メートル単位の長さ(M)
・ヘルツ単位の周波数(Hz)
・オーム単位の抵抗(Ohm)
・ファラド単位の静電容量(F)
・pF(ピコファラド)の場合のような、10−12の場合のp(ピコ)
・nS(ナノ秒)の場合のような、10−9の場合のn(ナノ)
・uS(マイクロ秒)の場合のような、10−6の場合のu(マイクロ)
・mV(ミリアンペア)の場合のような、10−3の場合のm(ミリ)
・kOhm(キロオーム)の場合のような、10+3の場合のk(キロ)
・MHz(メガヘルツ)の場合のような、10+6の場合のM(メガ)
・GHz(ギガヘルツ)の場合のような、10+9の場合のG(ギガ)
# File limits.usrv
# --------------------------------------------------------
Version 1.0.0;
#
# This UserVars collection declaration declares a set of
# globally available variables and constants.
#
UserVars
{
# Some constant Integer globals used in various places.
Const Integer MaxInteger = 2147483647;
Const Integer Minlnteger = -2147483648;
# Smallest value such that 1.0 + Epsilon!= 1.0
Const Double Epsilon =2.2204460492503131 e-016;
# Some important constants related to Double
Const Double MaxDouble = 1.7976931348623158e+308;
Const Double MinDouble = - MaxDouble;
Const Double ZeroPlus = 2.2250738585072014e-308;
Const Double ZeroMinus = - ZeroPlus;
}
# File myvars.usrv
# --------------------------------------------------------
Version 0.1;
#
# This declares a UserVars collection of some engineering
# globals.
#
UserVars MyVars
{
# Engineering quantities.
Const Voltage VInLow = 0.0; # 0 Volts
Const Voltage VInHigh= 5.0; # 5 Volts
Const Voltage VOutLow = 400.0 mV; # 400 milliVolts
Const Voltage VOutHigh= 5.1; # 5.1 Volts
Const Time DeltaT = 2.0E-9; # 2 nanoseconds
Const TimeClkTick =1.0ns; # 1 nanosecond
Const Resistance R10 = 10.0 kOhms; # 10 kilo Ohms
# Some variables are declared below.
Current ILow = 1.0 mA; #1 milliAmp
Current IHigh = 2.0 mA; # 2 milliAmp
Power PLow = ILow * VInLow; # Low power value
Power PHigh = IHigh * VInHigh; # High power value
#
# An array of low values for all A bus pins.
# The vil for A0 will be in ABusVil [0], A1
# in ABusVil [1], so on.
#
Voltage ABusVil[8] ={1.0, 1.2, Others = 1.5};
}
# Does not compile because a Current and a Voltage cannot be added
# to yield a Power.
#
Power Pxxx = IHigh + VInHigh;
Integer Y = 3.6; # Y gets assigned 3
Power Pyyy = Y; # Pyyy gets assigned 3.0 watts
Double Z = Pyyy; # Pyyy gets converted to a unitless Double
# Explicit type conversion is allowed, but not required.
# X becomes 3.5
Double X = Double (Pxxx); #X becomes 3.5
Integer Y = Integer (Pxxx); #Y becomes 3
# Explicit type conversion is required.
Length L = Double (Pxxx); #L becomes 3.5 meters
Voltage V = Integer (Pxxx); #V becomes 3.0 Volts.
UserVars MyVars
{
Integer X = 2.0;
#
# Refers to the above X, and to the globally
# available MaxInteger from the default
# UserVars collection.
#
Integer Y =MaxInteger - X;
}
# Declare X, Y1 and Y2 in the YourVars UserVars collection.
UserVars YourVars
{
Integer X = 3.0;
# Refers to the X from MyVars.
Integer Y1 =MaxInteger - MyVars.X;
# Refers to the X declared above.
Integer Y2 =MaxInteger - X;
}
# More variables being added to the MyVars collection
UserVars MyVars
{
#
# Refers to X and Y from the earlier declaration
# of MyVars.
#
Integer Z = X + Y;
}
名前が修飾されている、すなわち名前が点によって分離される2つの部分を含む場合には、変数は、その点の前にある部分によって名前を付けられる、名前付きユーザ変数コレクションからもたらされる。したがって、上記のMyVars.XはMyVarsコレクション内のXを指している。デフォルトユーザ変数コレクションを明示するために、名前「_UserVars」を用いることができる。
ユーザ変数は、nameストリング、const/varブーリアン、列挙された値としてのtypeおよび式木としてのexpressionを有するn個組のコレクションとして実装される。1つの名前の式は、以下のコールによってセットすることができる。
DoubleT, VoltageT,...};
Status setExpression(const String& name,
const bool isConst,
const elementaryType,
const Expression& expression);
Expression (2147483647));
_UserVars.setExpression ("MinInteger", true, IntegerT,
Expression(-2147483648));
_UserVars.setExpression ("Epsilon", true, DoubleT,
Expression (2.2204460492503131e-016));
_UserVars.setExpression ("MaxDouble", true, DoubleT,
Expression (1.7976931348623158e+308));
_UserVars.setExpression ("MinDouble", true, DoubleT,
Expression("- MaxDouble") );
_UserVars.setExpression("ZeroPlus", true, DoubleT,
Expression(2.2250738585072014e-308));
_UserVars.setExpression("ZeroMinus", true, DoubleT,
Expression("- ZeroPlus") );
Expression(0.0));
myVars.setExpression("VInHigh", true, VoltageT,
Expression(5.0));
myVars.setExpression("DeltaT", true, TimeT,
Expression(2.0E-9));
myVars.setExpression("ClkTick", true, TimeT,
Expression (1.0E-9));
myVars.setExpression("R10", true, ResistanceT,
Expression(10.0E+3));
myVars.setExpression("ILow", false, CurrentT,
Expression (1.0E-3));
myVars.setExpression("IHigh", false, CurrentT,
Expression(2.0E-3));
myVars.setExpression("PLow", false, PowerT,
Expression("ILow * VInLow"));
myVars.setExpression("PHigh", false, PowerT,
Expression("IHigh * VInHigh"));
myVars.setExpression ("ABusVil[0]", false, VoltageT,
Expression(1.0));
myVars.setExpression("ABusVil[l]", false, VoltageT,
Expression(1.2));
myVars.setExpression("ABusVil[2]", false, VoltageT,
Expression( 1.5));
myVars.setExpression("ABusVil[3]", false, VoltageT,
Expression(1.5));
myVars.setExpression("ABusVil[4]", false, VoltageT,
Expression(I .5));
myVars.setExpression("ABusVil[5]", false, VoltageT,
Expression( 1.5));
myVars.setExpression("ABusVil[6]", false, VoltageT,
Expression(1.5));
myVars.setExpression("ABusVil[7]", false, VoltageT,
Expression(1.5));
これらの名前および式を含むC++ UserVarsクラスは、アプリケーションプログラムインターフェース(API)をエクスポートし、実行時にこれらの値を評価し、変更する。UserVarsに関連する式の変更は、UserVarsがいつ再評価されるか、およびその評価の影響が何であるかという問題にも対処する。
{
UnsignedlntegerT, IntegerT, DoubleT, VoltageT, ...
};
Status getExpression(const String& name,
Expression& expression) const;
Status setExpression(const String& name,
const bool isConst,
const elementaryType,
const Expression& expression);
setExpression ("Y", true, IntegerT, Expression("X+1"));
{
UnsignedIntegerT, IntegerT, DoubleT, VoltageT, ...
};
Status getType(const String& name,
ElementaryType& elementaryType) const;
・UserVars Global Re-evaluationメソッド。
・所与の変数または定数に従属する変数および定数のリストをゲットするためのメソッド。
仕様セットは、セレクタに基づいて値を取り込むことができる変数のコレクションを供給するために用いられる。たとえば、セレクタMinnie、Mickey、GoofyおよびDaisyを用いる以下のSpecification Setについて考える。
# File Aaa. spec
# ---------------------------------------------------------
Version 1.0;
Import Limits.usrv;
SpecificationSet Aaa (Minnie, Mickey, Goofy, Daisy)
{
Double xxx = 1.0, 2.0, 3.0, 4.0;
Integer yyy = 10, 20, 30, 40;
Integer zzz =MaxInteger - xxx,
MaxInteger - xxx - 1,
MaxInteger - xxx - 2,
Maxlnteger - xxx;
# The following declaration associates a single
# value, which will be chosen regardless of the
# selector. It is equivalent to:
# Integer www = yyy + zzz, yyy + zzz, yyy + zzz, yyy + zzz
Integer www = yyy + zzz; }
}
yyy = 30;
zzz =MaxInteger - xxx - 2;
www = yyy + zzz;
1.その名前が修飾されている場合には、その名前は、名前付きユーザ変数コレクションにおいて分解されなければならない。
2.その名前が修飾されていない場合には、その名前は、その名前が試験条件グループにおいて宣言される場合にはローカル仕様セットにおいて、それが試験条件グループにおいて参照される場合には名前付き仕様セットにおいて分解される。
3.その名前が上記の規則によって分解されない場合には、その名前はデフォルトユーザ変数コレクションにおいて分解される。
Import limits. usrv; # Picks up the limits UserVars file above.
Import aaa. spec; # Picks up the Specification Set AAA above.
TestConditionGroup TCG1
{
SpecificationSet(Min, Max, Typ)
{
vcc = 4.9, 5.1, 5.0;
}
# Rule 1: Resolution in a named user variables collection.
# A reference to MyVars.VInLow refers to VInLow from MyVars.
# Rule 2: Resolution in a local specification set.
# A reference to "vcc" here will resolve in the context
# of the local specification set above.
# Rule 3: Resolution in default user variables collection.
# A reference to"MaxInteger" here will resolve to limits.usrv.
# Error: Resolution of xxx
# A reference to xxx does not resolve because it is neither in
# the local specification set, nor in limits.usrv.
# Error: Resolution of Aaa.xxx
# Looks for a named UserVars collection named Aaa. The named
# specification set does not qualify.
}
TestConditionGroup TCG2
{
SpecificationSet Aaa; # References the imported specification set
# Rule 1: Resolution in a named user variables collection.
# A reference to MyVars.VInLow refers to VInLow from MyVars.
# Rule 2: Resolution in a named specification set.
# A reference to "xxx" here will resolve in the context
# of the local specification set Aaa above.
# Rule 3: Resolution in default user variables collection.
# A reference to"MaxInteger" here will resolve to limits.usrv.
# Error: Resolution of vcc
# A reference to vcc does not resolve because it is neither in
# the named specification set Aaa, nor in limits.usrv.
# Error: Resolution of Aaa.xxx
# Looks for a named UserVars collection named Aaa. The named
# specification set does not qualify.
}
上記の規則を用いるとき、仕様セットは、C++ SpecificationSetクラスによって実装されることができる。SpecificationSetクラスは基本的には、UserVarsクラスと同じAPIを有するが、セレクタのための余分なストリングパラメータがあることが異なる。したがって、このAPIは詳細には説明されない。
Levelは、ピンおよびピングループのパラメータを指定するために用いられる。それは、以下の形の宣言のコレクションである。
{
<pin-param-1> = xxx;
<pin-param-2> = yyy;
...
}
# File CHIPlevels.lvl
# ------------------------------------------------------
Version 1.0;
Import CHIP3resources.rsc;
Import CHIP3pins.pin;
Levels CHIP3Levels
{
#
# Specifies pin-parameters for various pins and
# pin groups using globals and values from
# the specification set.
#
# The order of specification is significant.
# Pin parameters will be set in order from
# first to last in this Levels section, and
# from first to last for each pin or pin-group
# subsection.
#
# From the imported pin description fileCHIP3pins.pin,
# the InPins group is in the "dpin" resource. From the
# imported resource definition file CHIP3resources.rsc,
# the "dps" resource has parameters named VIL and VIH.
#
InPins { VIL = v_il; VIH = v_ih+ 1.0;}
# The following statement requires a delay of 10 uS after
# the call to set the InPins levels. Actual delay will be
# a small system defined range around 10.0E-6:
# 10.0E-6 - delta <= actual <= 10.0E-6 + delta
Delay 10.0E-6;
#
# For the OutPins, the levels for the parameters
# VOL and VOH are specified.
#
OutPins{ VOL = v_ol/ 2.0; VOH = v_oh; }
# The clock pin will have special values.
Clock { VOL = 0.0; VOH = v_ih/ 2.0;}
# A Delay of 10 uS after the call to set Clock levels.
# This is a minimum delay, that is guaranteed to be for
# at least 10.0 uS, though it may be a little more:
# 10.0E-6 <= actual <= 10.0E-6 + delta
MinDelay 10.0 uS;
#
# The PowerPins group is in the "dps" resource. Pins of this
# pin group have special parameters:
# PRE_WAIT specifies the time to wait after voltage
# reached its final value to start pattern
# generation. Actual wait time will be a small
# system defined range around PRE_WAIT (see)
# POST_WAIT specifies the time to wait after pattern
# generation ends to shut down the power. Actual
# wait time will be a small system defined range
# around PRE_WAIT (see).
#
PowerPins
{
PRE_WAIT = 10.0 ms;
POST_WAIT= 10.0 ms;
# VCC reaches its final value of 2.0 V from its
# present value in a ramp with a Voltage Slew Rate
# of ±.01 Volts per Second.
VCC =Slew(0.01, 2.0 V);
}
}
Levels CHIP4Levels
{
# ...
}
上記の規則を用いて、以下の演算をサポートするC++ Levelsオブジェクトを書くことができる。
・以下の演算が行われる。
const String& parameterName,
ElementaryType elementaryType,
const Expression& Expression);
Expression("v_ih + 1.0");
・以下の演算が行われ、その演算は、先に説明されたように、全ての所定のモジュールレベルインターフェースをくまなく調べて、発行し、パラメータの全てのレベルを、指定された順序で割り当てるであろう。セレクタパラメータを用いて、先に指定された規則に従って、それらの式内の名前が分解される。
試験条件グループ部分言語は、仕様、タイミングおよびレベルの記述を一緒にパッケージ化する。Timingオブジェクトは多くの場合に、複数のパラメータを用いて指定される。複数のパラメータを複数のタイミングにおいて用いて、種々のパルスの前縁および後縁を指定することができる。同様に、Levelsは種々の電圧レベルの最大値、最小値および典型値を指定することによりパラメータ化することができる。試験条件グループ(TCG)オブジェクトは、仕様と、これらの仕様に基づくTimingsおよびLevelsのインスタンシエーションとを一纏めにする。
# File myTestConditionGroups.tcg
# ---------------------------------------------------------
Version 0.1;
Import CHIPlevels.lvl;
Import edges.spec;
Importtimingl.tim;
Import timing2.tim;
TestConditionGroup TCG1
{
# This Local SpecificationSet uses user-defined selectors
# "min", "max" and "typ". Any number of selectors with any
# user defined names is allowed.
#
# The specification set specifies a table giving values for
# variables that can be used in expressions to initialize
# timings and levels. The specification set below defines
# values for variables as per the following table:
# min max typ
# v_cc 2.9 3.1 3.0
# v_ih vInHigh + 0.0 vInHigh + 0.2 vInHigh + 0.1
# v_il vInLow + 0.0 vInLow + 0.2 vInLow + 0.1
# ...
# A reference such as"vlnHigh" must be previously defined
# in a blockof UserVars.
#
# Thus, if the "max" selector was selected in a functional
# test, then the "max" column of values would be bound to
# the variables, setting v_cc to 3.1, v_ih to vInHigh+2.0
# and so on.
#
# Note that this is a local specification set, and has no
# name.
SpecificationSet(min, max, typ)
{
# Minimum, Maximum and Typical specifications for
# voltages.
Voltage v_cc = 2.9, 3.1, 3.0;
Voltage v_ih = vInHigh + 0.0,
vInHigh + 0.2,
vInHigh + 0.1;
Voltage v_il = vInLow + 0.0,
vInLow + 0.2,
vInLow + 0.1;
# Minimum, Maximum and Typical specifications for
# leading and trailing timing edges. The base
# value of 1.0E-6 uS corresponds to 1 picosecond,
# and is given as an example of using scientific
# notation for numbers along with units.
Time t_le = 1.0E-6 uS,
1.0E-6 uS + 4.0 * DeltaT,
1.0E-6 uS + 2.0 * DeltaT;
Time t_te = 30ns,
30ns + 4.0 * DeltaT,
30ns + 2.0 * DeltaT;
}
# Refers to the CHIP3Levels imported earlier. It
# is one of possibly many levels objects that have been
# imported from the above file.
Levels CHIP3Levels;
# Refers to filetimingl.tim containing the single
# timing Timingl. The filename should be quoted if
# it has whitespace characters in it.
Timings Timing 1 ;
}
# Another test condition group
TestConditionGroup TCG2
{
# CIockAndDataEdgesSpecs is a specification set which
# is available in the edges.specs file. Assume it has
# the following declaration:
# Specification Set ClockAndDataEdgesSpecs (min, max, typ)
# {
# Time clock_le = 10.00 uS, 10.02 uS, 10.01 uS;
# Time clock_te = 20.00 uS, 20.02 uS, 20.01 uS;
# Timedata_le = 10.0 uS, 10.2 uS, 10.1 uS;
# Time data_te = 30.0 uS, 30.2 uS, 30.1 uS;
# }
# A Specification Set reference to this named set is below:
SpecificationSet ClockAndDataEdgesSpecs;
# An inlined levels declaration. Since the associated
# specification set (above) does not have variables such
# as VInLow, VInHigh, VOutLow and VOutHigh, they must
# resolve in the default UserVars collection.
Levels
{
InPins { VIL = VInLow; VIH = VInHigh + 1.0;}
OutPins { VOL = VOutLow/ 2.0; VOH = VOutHigh;}
}
# This Timing is from the file "timing2.tim". The timings
# will need the leading and trailing edge timings for clock
# and data as specified in the above specification set.
Timings Timing2;
}
# File LevelsOnlyAndTimingsOnly.tcg
# ------------------------------------------------------
Version 0.1;
# A Levels-only Test Condition Group.
TestConditionGroup LevelsOnlyTCG
{
SpecificationSet(Min, Max, Typ)
{
Voltage v_il = 0.0, 0.2, 0.1;
Voltagev_ih = 3.9, 4.1, 4.0;
}
# An inlined levels declaration. Since the associated
# specification set (above) does not have variables such
# as VInLow, VInHigh, VOutLow and VOutHigh, they must
# resolve in the default UserVars collection.
Levels
{
InPins { VIL v_il; VIH v_ih + 1.0;}
OutPins { VOL v_il/ 2.0; VOH v_ih;}
}
}
# A Timings-only Test Condition Group
TestConditionGroup TimingsOnlyTCG
{
SpecificationSet(Min, Max, Typ)
{
Time t_le = 0.9E-3, 1.1E-3,1.0E-3;
}
Timings Timing2;
}
TestConditionオブジェクトは1つのTCGを特定のセレクタに結び付ける。一旦、TCGが先に示されるように宣言されたなら、以下に示されるように、TestConditionオブジェクトを宣言することができる。
{
TestConditionGroup = TCG1;
Selector = min;
}
TestCondition TCTyp .
{
TestConditionGroup = TCG1;
Selector = typ;
}
TestCondition TCMax
{
TestConditionGroup = TCG1;
Selector = max;
}
# Declare a FunctionalTest"MyFunctionaITest" that refers to three
# Test Condition Group instances.
#
Test FunctionalTest MyFunctionalTest
{
# Specify the Pattern List
PList = patlAlist;
# Any number of TestConditions can be specified:
TestCondition = TCMin;
TestCondition = TCMax;
TestCondition = TCTyp;
}
試験条件グループ内の名前の分解は先に説明された。しかしながら、これらの規則が繰返し述べられ、再び以下に与えられる。
1.その名前が修飾されている場合には(ページを参照されたい)、その名前は、名前付きユーザ変数コレクションにおいて分解されなければならない。
2.その名前が修飾されていない場合には、その名前は、その名前が試験条件グループにおいて宣言される場合にはローカル仕様セットにおいて、それが試験条件グループにおいて参照される場合には名前付き仕様セットにおいて分解される。
3.その名前が上記の規則によって分解されない場合には、その名前はデフォルトユーザ変数コレクションにおいて分解される。
試験条件グループは以下の実行時の意味を有する。
・InputPins.VIL
・InputPins.VIH
・OutputPins.VIL
・OutputPins.VIH
・Clock.VOL
・Clock.VOH
上記の規則を用いて、Test Condition GroupがC++ TestConditionGroupクラスにおいて宣言されることができ、それを以下のように初期化することができる。
Bin Definitionクラスはビン、すなわち、数多くのDUTを試験した結果を要約するカウンタのコレクションを定義する。1つのDUTを試験する過程において、そのDUTは、たとえば特定の試験の結果を指示するために、任意のビンにセットされることができる。試験が進められるとき、そのDUTは別のビンにセットされることができる。DUTが最終的にセットされるビンは、その試験の終了時の最後のそのような設定である。この最終的なビンのためのカウンタは、このDUTの試験の終了時にインクリメントされる。ビン定義を有する別個のファイルは接尾部.bdefsを有するべきある。
# File CHIPbins.bdefs
# --------------------------------------------------------------
Version 1.2.3;
BinDefs
{
# The HardBins are an outermost level of
# bins. They are not a refinement of any other
# bins.
BinGroup HardBins
{
"3GHzPass": "DUTs passing 3GHz";
"2.8GHzPass": "DUTs passing 2.8GHz";
"3GHzFail": "DUTs failing 3GHz";
"2.8GHzFail": "DUTs failing 2.8GHz";
LeakageFail: "DUTs failing leakage";
}
# The SoftBins are a next level of refinement.
# SoftBins are a refinement of HardBins.
BinGroup SoftBins : HardBins
{
"3GHzAllPass":
"Good DUTs at 3GHz", "3GHzPass";
"3GHzCacheFail":
"Cache Fails at 3GHz", "3GHzFail";
"3GHzSBFTFail":
"SBFT Fails at 3GHz", "3GHzFail";
"3GHzLeakage":
"Leakages at 3GHz", LeakageFail;
"2.8GHzAllPass":
"Good DUTs at 2.8GHz", "2.8GHzPass";
"2.8GHzCacheFail":
"Cache Fails at2.8GHz","2.8GHzFail";
"2.8GHzSBFTFail":
"SBFT Fails at 2.8GHz", "2.8GHzFail";
"2.8GHzLeakage":
"Leakages at 2.8GHz", LeakageFail;
}
}
File CHIPbins.bdefs
# -------------------------------------------------------------
Version 1.2.3;
BinDefs
{
# The PassFailBins are an outermost level of
# bins. They are not a refinement of any other
# bins.
BinGroup PassFailBins
{
Pass: "Count of passing DUTS.";
Fail: "Count of failing DUTS.";
}
# The HardBins are a next level of refinement.
# HardBins are a refinement of the PassFailBins,
# as indicated by "HardBins : PassFailBins".
BinGroup HardBins : PassFailBins
{
"3GHzPass": "DUTs passing 3GHz", Pass;
"2.8GHzPass": "DUTs passing 2.8GHz", Pass;
"3GHzFail": "DUTs failing 3GHz", Fail;
"2.8GHzFail": "DUTs failing 2.8GHz", Fail;
LeakageFail: "DUTs failing leakage", Fail;
}
# The SoftBins are a next level of refinement.
# SoftBins are a refinement of HardBins.
BinGroup SoftBins : HardBins
{
"3 GHzAllPass" :
"Good DUTs at 3GHz", "3GHzPass";
"3 GHzCacheFail":
"Cache Fails at 3GHz", "3GHzFail";
"3 GHzSBFTFail":
"SBFT Fails at 3GHz", "3GHzFail";
"3GHzLeakage":
"Leakages at 3GHz", LeakageFail;
"2.8GHzAllPass":
"Good DUTs at 2.8GHz", "2.8GHzPass";
"2.8GHzCacheFail":
"Cache Fails at2.8GHz", "2.8GHzFail";
"2.8GHzSBFTFail":
"SBFT Fails at 2.8GHz", "2.8GHzFail";
"2.8GHzLeakage":
"Leakages at 2.8GHz", LeakageFail;
}
}
{
# A group of most base bins
BinGroup A { ... }
# A group of base bins that is a refinement of A
BinGroup Ax : A { ... }
# A group of leaf bins that is a refinement of Ax
BinGroup Axx : Ax { ... }
# A group of base bins that is a refinement of A
BinGroup Ay : A{ ...}
# A group of leaf bins that is a refinement of Ay
BinGroup Ayy : Ay { ... }
# A group of most base bins
BinGroup B { ... }
# A group of leaf bins that is a refinement of B
BinGroup Bx : B { ... }
}
1.識別子またはストリングリテラルのいずれかである名前と、
2.このビンが何を要約するかを記述する記述と、
3.このビンがリファインメントBinGroup内にある場合には、それがリファインメントであり、ベースビンとしても知られているビンの名前とを有する。
Result 0
{
# Action to be taken on getting a 0 back from
# executing a test.
# Set the bin to SoftBin."3GHZPass" expressing that the
# DUT was excellent.
SetBin SoftBins."3GHzPass";
}
SetBin SoftBins."2.8GHzAllPass";
1.複数のSoftBin「2.8GHzAllPass」
2.複数のHardBinのリファインメント「2.8GHzPass」
3.複数のPassFailBinのリファインメント「Pass」
1.ビンがリーフビンである場合には、それは、1つのDUTの試験の終了時にこのビンのためにSetBinステートメントが実行された回数である。
2.ビンがベースビンである場合には、それは、それがリファインメントであるビンのカウンタの和である。
1.BinDefinitions宣言はいくつかのBinGroup宣言から構成される。
2.各BinGroup宣言は、名前と、それがリファインメントであるオプションのBinGroup名と、それに続くビン宣言のブロックとを有する。
3.ビン宣言は、名前と、それに続く記述と、オプションでそれに続く、このビンがリファインメントであるベースビンの名前とを含む。
4.ビン名はストリングリテラルまたはIdにすることができる。空ストリングは有効なビン名にすべきではない。ビン名は、BinGroup宣言内の名前の中で固有であるべきであるが、他のBinGroup宣言において同じ名前を用いることができる。
5.BinGroup宣言Xxxが別のBinGroup宣言Yyyのリファインメントである場合には、Xxx内の全てのビン宣言は、Yyyからのベースビンの名前を宣言しなければならない。したがって、複数のSoftBinは複数のHardBinのリファインメントであることを宣言されるので、複数のSoftBin内の各ビン宣言は複数のHardBinのビンのリファインメントである。
6.PassFailBinのような、別のBinGroup宣言のリファインメントでないBinGroup宣言は、ベースビンを宣言しないBin宣言を有することが好ましい。
1.AaaがBbbのベースビンである場合には、AaaはBbbの1組のベース内にある。
2.Aaaの任意のベースもBbbの1組のベース内にある。
上記の規則を用いて、1つのオブジェクトタイプBinGroupを、BinDefs宣言内のBinGroup宣言毎に構成することができる。クラスBinGroupはサブクラスLeafBinGroupを有するであろう。これらの2つのクラスの演算は同じであるが、BinGroup::incrementBinがC++保護演算であるのに対して、LeafBinGroup::incrementBinがC++公開演算であることを除く。
LeafBinGroup(BinGroup& baseBinGroup);
const String& description,
const String& baseBinName);
String& description);
Status getBaseBin(const String& binName,
BinGroup* pBaseBinGroup,
String& baseBinName);
Status getBinValue(const String& binName,
unsigned int& value);
TestPlan::TestPlan()
:m_PassFailBins, // Default Constructor
m_HardBins(&m_PassFaiIBins),
m_SoftBins(&m_HardBins)
{}
// Bin initializations
m_PassFailBins.addBin("Pass", "Count of passing DUTS.","");
m_PassFailBins.addBin("Fail", "Count of failing DUTS.","");
m_HardBins.addBin("3GHzPass", "Duts passing 3GHz", "Pass");
...
pTestPlan->setBin("SoftBins", "3GHzAllPass");
m_pCurrentBinGroup->incrementBin(m_currentBin);
試験計画は、試験プログラムの主要構造と考えることができる。試験計画はファイルをインポートし、類似のコンストラクツインラインを定義することができる。こうして、いくつかのグローバルの定義を与えられたファイルをインポートし、付加的なグローバルズインラインを宣言することができる。
試験計画の重要な要素のうちの1つはFlowである。Flowは、有限状態機械をカプセル化する。それはいくつかのFlowItemを含み、それらのFlowItemはIFlowableオブジェクトを実行し、その後、別のフロー項目に遷移する。IFlowableを実行することは、IFlowableインターフェースをインプリメントするオブジェクトを実行することを含む。IFlowableインターフェースをインプリメントする一般的なオブジェクトはTestおよびFlowそのものである。
# FlowTest1 implements a finite state machine for the
# Min, Typ and Max flavors of MyFunctionalTest1. On
# success it testsTest1Min, Test1Typ,Test1Max
# and then returns to its caller with 0 as a successful
# status. On failure, it returns 1 as a failing status.
#
# Assume that the testsMyFunctionalTest1Min, ... all
# return a Result of 0 (Pass), 1 and 2(for a couple
# of levels of failure).
# Result 0 Result 1 Result 2
# Test1Min Test1Typ return 1 return 1
# Test1Typ Test1Max return 1 return 1
# Test1Max return 0 return 1 return 1
#
Flow FlowTest1
{
FlowItem FlowTest1_Min MyFunctionalTest1Min
{
Result 0
{
PropertyPassFail = "Pass";
IncrementCounters PassCount;
GoTo FlowTest1_Typ;
}
Result 1
{
Property PassFail = "Fail";
IncrementCounters FailCount;
Return 1;
}
# This result block will be executed if
# MyFunctionalTest1Min returns any of
# 2, 5, 6, 7,-6, -5 or-4
Result 2, 5:7, -6:-4
{
Property PassFail = "Fail";
IncrementCounters FailCount;
Return 1;
}
}
FlowItem FlowTest1_Typ { ... }
FlowItem FlowTest1_Max { ... }
}
1.FlowItem FlowTest1_Minを実行することで開始する。
2.FlowTest1_Minは機能試験、MyFunctionalTest1Minを実行する。この試験の詳細は、後に完全な試験計画が提示されるときに与えられる。
3.この試験を実行することから、9つの結果、0、1、2、5、6、7、−6、−5または−4が予想される。最初の2つのResult句はそれぞれ0および1を処理し、第3の句は結果値の残り全てを処理する。
4.結果「0」(合格)が生じる場合には、FlowTest1_MinはカウンタPassCounterをインクリメントするであろう。その後、それは新たなFlowItem FlowTest1_Typに遷移するであろう。
5.結果「1」または結果「2」が生じる場合には、FlowTest1_MinはカウンタFailCounterをインクリメントし、そのフローから戻るであろう。
6.FlowTest1_Typは同じようにして動作し、成功時にFlowTest1_Maxをコールするであろう。
7.FlowTest1_Maxは同じようにして動作し、成功時に、成功した結果(「0」)でFlowTest1から戻るであろう。
1.1つのIFlowableを実行する(それは、以前に定義されたFlow、またはTest、または上記の規則によってC++においてインプリメントされることができるユーザ定義のFlowを用いることができる)。
2.IFlowableの実行は数値結果を返す。その結果に基づいて、ある特定の動作が行われ(いくつかのカウンタを更新する)、その後、2つの事柄のうちの1つが起こる。
a.Flowは数値結果にとともにコール元に戻る。
b.Flowは、別の状態(FlowItem)に遷移することにより継続する。
・1つのFlowItemは1つの名前を有する。
・1つのFlowItemは実行されるべき1つのFlowableを有する。
・1つのFlowItemは数またはResult句を有する。
・1つのFlowItemの各Result句は動作を提供し、1つの遷移で終了し、1つまたは複数の結果値に関連付けられる。
{
Result <one or more result values>
{
<actions for these result values>
<transition for these result values>
}
Result<one or more other result values>
{
...
}
...
}
・GUIツールによって用いられるストリング値を有する実体を属性結果にセットするためのプロパティ動作。これは上記のFlowTest1の例において見ることができる。
・任意の、またはユーザルーチンをコールするためのルーチンコール動作。これは後に説明される。
Flowオブジェクトの典型的な使用法は、Testのシーケンスを定義することである。その後、このシーケンスは、試験計画サーバ(TPS)において生じるイベント、すなわちExecute Test Planイベントの結果として実行される。各サイトコントローラ上にある試験計画サーバが、ユーザの試験計画を実行する。しかしながら、Flowオブジェクトは、他のイベントに応答しても実行される。括弧内の名前は、Flowをこれらのイベントに割り当てる際に用いられる名前である。
1.System Load Flow(SysLoadFlow)。このFlowは、1つの試験計画が1つまたは複数のサイトコントローラにロードされるときに、システムコントローラ上で実行される。それは、任意のサイトコントローラ上に試験計画を実際にロードする前に実行される。このフローによって、試験計画開発者は、システムコントローラを起源とすべきである動作を定義できるようになる。そのような動作は、パターンファイルのブロードキャストロード、較正動作などを含む。
2.Site Load Flow(SiteLoadFlow)。このFlowは、1つの試験計画がサイト上にロードされ、初期化された後に、サイトコントローラ上で実行される。これにより、任意のサイト特有の初期化を行うことができる。
3.Lot Start/End Flow(LotStartFlow/LotEndFlow)。これらのFlowは、試験計画サーバが新たなロットの開始を通知されるときに、サイトコントローラ上で実行される。これは典型的には、データログストリームにロット特有の情報で注釈を付すために製造環境において用いられる。
4.DUT Change Flow(DutChangeFlow)。このFlowは、そのDUT情報が変化するときに、サイトコントローラ上で実行される。再び、これは典型的には、アナログストリームを更新するために製造環境において用いられる。
5.TestPlan Start/End Flow(TestPlanStartFlow/TestPlanEndFlow)。これらのFlowは、試験計画サーバが、現在のTest Flowを実行し始めるように指示されるとき、およびそのフローがその実行を終了するときに、サイトコントローラ上で実行される。
6.Test Start/End Flow(TestStartFlow/TestEndFlow)。これらのFlowは、Test Flowが新たなTestを実行し始めているとき、およびそのTestがその実行を終了するときに、サイトコントローラ上で実行される。
7.Test Flow(TestFlow)。このFlowは、試験計画サーバが「Execute Test Plan」メッセージを受信するときに実行される主要Flowオブジェクトであることに留意されたい。
以下の例では、フローによってインプリメントされる有限状態機械を記述するコメントとともにFlowが与えられる。その有限状態機械は、遷移行列として与えられる。その行列の行はFlowItemに対応し、列は結果に対応する。その行列の1つの行のエントリは、返された結果が列において指定された値であるときに、その行のFlowItemから遷移されるFlowItemを指示する。
# File mySimpleTestPlan.tpl
# -------------------------------------------------------------
Version 0.1;
Import xxx.pin; # Pins
# Constants and variables giving limiting values.
Import limits.usrv;
# Import test condition groups
Import myTestConditionGroups.tcg;
# Import some bin definitions.
Import bins.bdefs;
# -------------------------------------------------------------
# Start of the test plan
# -------------------------------------------------------------
TestPlan Sample;
# This block defines Pattern Lists file-qualified names and
# Pattern List variables that are used in Test declarations.
# Pattern list variables are deferred till customization is
# examined.
PListDefs
{
# File qualified pattern list names
pllA.plist:patlAlist,
pl2A.plist:pat2AList
}
# The socket for the tests in this test plan (this is not imported,
# but resolved at activation time):
SocketDef = mytest. soc;
# Declare some user variables inline
UserVars
{
# String name for current test
String CurrentTest ="MyTest";
}
TestConditionTClMin
{
TestConditionGroup = TCG1;
Selector = min;
}
TestCondition.TClTyp
{
TestConditionGroup = TCG1;
Selector = typ;
}
TestCondition TC1Max
{
TestConditionGroup = TCG1;
Selector max;
}
# Likewise for TC2Min, TC2Typ, TC2Max ...
#
# Declare a FunctionalTest. "FunctionalTest" refers to a C++
# test class that runs the test, and returns a 0,1 or 2 as
# a Result. The Test Condition Group TCG1 is selected with
# the "min" selector by referring to theTClMin TestCondition.
#
Test FunctionalTest MyFunctionalTest1Min
{
PListParam = patlAList;
TestConditionParam =TClMin;
}
# Another FunctionalTest selecting TCG1 with "typ"
Test FunctionalTestMyFunctionalTest1Typ
{
PListParam = patlAList;
TestConditionParam = TC1Typ;
}
# Another FunctionalTest selecting TCG1 with "max"
Test FunctionalTest MyFunctionalTest1Max
{
PListParam = patlAList;
TestConditionParam = TC1Max;
}
# Now select TCG2 with "min"
Test FunctionalTest MyFunctionalTest2Min
{
PListParam pat2AList;
TestConditionParam = TC2Min;
}
# Likewise for TCG2 with "typ" and TCG2 with "max"
Test FunctionalTest MyFunctionalTest2Typ
{
PListParam patlAList;
TestConditionParam = TC2Typ;
}
Test FunctionalTest MyFunctionalTest2Max
{
PListParam patlAList;
TestConditionParam = TC2Max;
}
#
# At this time the following Test objects have been defined
# MyFunctionalTest1Min
# MyFunctionalTest1Typ
# MyFunctionalTest1Max
# MyFunctionalTest2Min
# MyFunctionalTest2Typ
# MyFunctionalTest2Max
#
#
# Counters are variables that are incremented during the
# execution of a test. They areUnsignedIntegers that are
# initialized to zero.
#
Counters {PassCount, FailCount}
#
# Flows can now be presented. A Flow is an object that
# essentially represents a finite state machine which
# can execute "Flowables", and transition to other flowables based
# on the Result returned from executing a Flowable. A Flow can also
# call another flow.
#
# A Flow consists of a numberof FlowItems and transitions
# between them.FlowItems have names which are unique in
# the enclosing Flow, execute a "Flowable" object, and then
# transition to another FlowItem in the same enclosing Flow.
#
# Flowable objects include Tests and other Flows. When
# a Flowable object executes, it returns a numeric Result
# which is used by the FlowItem to transition to another
# FlowItem. As a result of this, both Tests and Flows
# terminate by returning a numeric Result value.
#
# FlowTest1 implements a finite state machine for the
# Min, Typ and Max flavors of MyFunctionalTest1 . On
# success it tests Test1Min,Test1Typ, Test1Max
# and then returns to its caller with 0 as a successful
# Result. On failure, it returns 1 as a failing Result.
#
# Assume that the testsMyFunctionalTest1Min, ... all
# return a Result of 0 (Pass), 1 'and 2 (for a couple
# of levels of failure). The Transition Matrix of the
# finite state machine implemented by FlowTest1 is:
# -------------------------------------------------------------
# Result 0 Result 1 Result 2
# -------------------------------------------------------------
# FlowTest1_Min FlowTest1_Typ return 1 return 1
# FlowTest1_Typ FlowTest1_Max return 1 return 1
# FlowTest1_Max return 0 return 1 return 1
#
# where the IFlowables run by each FlowItem are:
# FlowItem IFlowable that is run
# FlowTest1_Min MyFunctionalTest1Min
# FlowTest1_Typ MyFunctionalTest1Typ
# FlowTest1_Max MyFunctionalTest1Max
#
Flow FlowTest1
{
FlowItem FlowTest1_Min MyFunctionalTest1Min
{
Result 0
{
PropertyPassFail = "Pass";
IncrementCounters PassCount;
GoTo FlowTest1_Typ;
}
Result 1,2
{
PropertyPassFail = "Fail";
IncrementCounters Fail Count;
Return 1;
}
}
FlowItem FlowTest1_Typ MyFunctionalTest1Typ
{
Result 0
{
PropertyPassFail = "Pass";
IncrementCounters PassCount;
GoToFlowTest1_Max;
}
Result 1,2
{
PropertyPassFail ="Fail";
IncrementCountersFaiICount;
Return 1;
}
}
# Likewise for FlowTest1_Max
FlowItem FlowTest1_Max MyFunctionalTest1Max
{
Result 0
{
PropertyPassFail = "Pass";
IncrementCounters PassCount;
Return 0;
}
Result 1,2
{
PropertyPassFail = "Fail";
IncrementCountersFailCount;
Return 1;
}
}
}
#
# FlowTest2 is similar to FlowTest1. It implements a
# finite state machine for the Min, Typ and Max flavors
# of MyFunctionalTest2. On success it tests Test2Min,
# Test2Typ, Test2Max and then returns to its caller with
# 0 as a successful Result. On failure, it returns 1 as
# a failing Result.
#
# Assume that the testsMyFunctionalTest2Min, ... all
# return a Result of 0 (Pass), 1 and 2 (for a couple
# of levels of failure). The Transition Matrix of the
# finite state machine implemented by FlowTest2 is:
# -------------------------------------------------------------
# Result 0 Result 1 Result 2
# -------------------------------------------------------------
# FlowTest2_Min FlowTest2_Typ return 1 return 1
# FlowTest2_Typ FIowTest2_Max return 1 return 1
# FlowTest2_Max return 0 return 1 return 1
#
# Where the IFlowables run by eachFlowItem are:
# FlowItem IFlowable that is run
# FIowTest2_Min MyFunctionalTest2Min
# FlowTest2_Typ MyFunctionalTest2Typ
# FlowTest2_Max MyFunctionalTest2Max
#
Flow FlowTest2
{
# ...
}
#
# Now the FlowMain, the main test flow, can be presented. It
# implements a finite state machine that calls FlowTest1
# and FlowTest2 as below:
# --------------------------------------------------------
# Result 0 Result 1
# --------------------------------------------------------
# FlowMain_1 FlowMain_2 return 1
# FlowMain_2 return 0 return 1
#
# Where the IFlowables run by each FlowItem are:
# FlowItem IFlowable that is run
# FlowMain_l FlowTest1
# FlowMain_2 FlowTest2
Flow FlowMain
{
# The first declared flow is the initial flow to be
# executed. It goes to FlowMain_2 on success, and
# returns 1 on failure.
FlowItem FlowMain_1 FlowTest1
{
Result 0
{
PropertyPassFail "Pass";
IncrementCounters PassCount;
GoTo FlowMain_2;
}
Result 1
{
# Sorry ... FlowTest1 failed
PropertyPassFail = "Fail";
IncrementCounters FailCount;
# Add to the right soft bin
SetBin SoftBins. "3GHzSBFTFail";
Return 1;
}
}
FlowItem FlowMain_2 FlowTest2
{
Result 0
{
# All passed!
PropertyPassFail = "Pass";
IncrementCounters PassCount;
# Add to the right soft bin
SetBin SoftBins."3GHzAllPass";
Return 0;
}
Result 1
{
# FlowTest1 passed, but FlowTest2 failed
PropertyPassFail = "Fail";
IncrementCounters FailCount;
# Add to the right soft bin
SetBin SoftBins."3GHzCacheFail";
Return 1;
{
}
}
TestFlow = FlowMain;
1.最初に、バージョン番号が与えられる。この番号を用いて、コンパイラバージョンの互換性が確保される。
2.その後、多数のインポートが宣言される。これらは、その試験計画において用いられる名前を分解するために必要とされる宣言を有する種々のファイルである。
3.次に、試験計画名が宣言され、その後、試験計画のインライン宣言を行う。
4.次に、1組のPListDefsが宣言される。これらは、名前付きファイルからGlobalPListsの名前を付ける、ファイル修飾付きの名前を含む。それらは、パターンリスト変数も含む。パターンリスト変数は、実行時にcustom flowableにおいて初期化されることができる変数である。それらは、ランタイムまで、試験と実際のパターンリストとの結合を遅らせる手段を提供する。
5.次に、1組のUserVarsが宣言される。これらはストリングを含む。
6.その後、合格した試験および不合格の試験の数を判定するために、いくつかのカウンタが宣言される。カウンタは変数に過ぎず、初期化されて0になり、IncrementCounterステートメントにおいてインクリメントされる。それらは、1つのDUTの試験の終了時に現在セットされているビンだけがインクリメントされるという意味を有する、先に説明されたBinとは異なる。
7.次に、一連のTest Conditionが宣言される。これらはそれぞれ、Test Condition Groupおよびセレクタを指定する。この例では、Test Condition Groupは、mytestconditionsgroup.tcgからもたらされる。しかしながら、それらは試験計画においてインラインにすることができる。
8.次に、一連のFlowableまたはTestが宣言される。これは、パターンリストおよび試験条件を選択する既知のTest FunctionalTestである。こうして、たとえば、MyFunctionalTest1Maxは、試験条件TC1Maxおよびパターンリストを選択する。
9.この後に、3つのフロー、FlowTest1、FlowTest2およびFlowMainが宣言される。FlowはFlowableを実行する。Flowableは、Test(MyFunctionalTest1Maxなど)および他のフロー(FlowTest1およびFlowTest2など)を含む。FlowTest1およびFlowTest2はそれぞれ、Test1およびTest2の最小、典型および最大バージョンを通る。フローFlowMainは、先に宣言されているフロー、FlowTest1およびFlowTest2をコールする。
10.最後に、TestFlowイベントがFlowMain Flowに割り当てられる。したがって、フローFlowMainは、ユーザがこの計画を実行しようするときに、この試験計画によって実行されることになるフローである。
上記の規則を用いて、Flowそのものを除いて、要素の大部分のためのC++インプリメンテーションを果たすことができる。
FlowItemを表すためのC++クラスは以下のインターフェースを有することができる。
・このFlowItemのために実行されることになるIFlowableをセットすることになる演算。
CounterRefList counterRefs) ;
CounterRefList counters;
...
// Code for Result clause
// Result 2, 3 {...}
// of flowobject.
counters.reset();
counters.add(&A);
counters.add(&B);
counters.add(&C);
flowObject.setCounterRefs(2, counters) ;
flowObject.setCounterRefs(3, counters) ;
unsigned int returnResult);
・最後に、FlowItemは演算を実行する必要がある。
FlowItem FlowMain_2;
CounterRefList counters;
FlowMain_1.setFlowable(FIowTest1);
// Result 0
counters.reset();
counters.add(&PassCount);
FlowMain_1.setCounterRefs (0, counters) ;
FlowMain_1.setTransition (0, &FlowMain_2);
// Result 1
counters.reset();
counters.add(&FailCount);
FlowMain_1.setCounterRefs (1, counters) ;
// The following call from ITestPlan will set the
// current bin group and bin name.
pTestPlan->setBin("SoftBins","3GHzSBFTFaiI");
FlowMain_1.setReturnResult (1, 1) ;
カウンタは0に初期化される変数であり、試験実行中の種々の時点において、IncrementCounterステートメントによってインクリメントされることができる。これは、試験の終了時にのみインクリメントされるBinとは異なる。さらに、ビンは階層的であるのに対して、カウンタは変数に過ぎない。したがって、カウンタはビンよりもはるかに簡単であり、より制限されたファシリティである。
一旦、全てのFlowItemが作成されたなら、Flowオブジェクトは、以下に示されるように、C++オブジェクトとして作成されることができる。
・FlowItemを追加するための演算。
・Flowを実行するための演算。
一般に、プログラムコードの大部分はデバイス試験のためのデータであり、残りは、試験方法を実現する試験プログラムのコードである。このデータはDUTに依存する(たとえば、電源条件、信号電圧条件、タイミング条件など)。試験コードは、ATEハードウエアに指定されたデバイス条件をロードするためのメソッドと、ユーザによって指定された目的(データロギングなど)を実現するために必要とされるメソッドから構成される。
先に述べられたように、試験クラスはITestから派生する。上記の規則を用いて、これらは、ITestインターフェースをインプリメントするC++クラスにおいてインプリメントされることができる。ITestインターフェースのための指定されるメソッドに加えて、これらのクラスは、デバイス試験の特定のクラスを実行するために必要とされるTest固有のインテリジェンスおよびロジックを提供する。また試験クラスはIFlowableインターフェースもインプリメントする。この結果として、Testクラスのインスタンスは、試験を実行するためにFlowItemにおいて用いることができる。
ユーザがC関数をコールできるようにし、ITestおよびIFlowableインターフェースをインプリメントする自らのクラスを開発できるようにするために、カスタマイゼーションの仕組みが提供される。
1つの試験クラスのオブジェクトが、そのメソッドおよびシグネチャに関して問合せを受けることができる場合には、そのオブジェクトは、生成されるソースコード内に包含するのに適したパラメータが入手できることを検証されることができる。そのような特徴は、翻訳段階における誤り検査および妥当性検査のために極めて有用であろう。試験技師がパラメータの名前、またはこれらのパラメータへの引き数の数(またはおそらくタイプ)を間違った場合には、C++コンパイラからのコンパイル時エラーメッセージを待つ代わりに、翻訳段階において、それが見つけられて、翻訳時に意味のあるエラーメッセージを与えることができる。これは、試験技師にとってさらに有用であろう。
C++においてヘッダを用いることはよく知られている。しかしながら、C++はパースし、読み出すのが難しいので、本発明の一実施形態は、コンパイラが、試験クラス開発者がヘッダとして用いることができるC++出力を作成できるようにする構文を定義する。この実施形態によれば、試験クラス開発者はプリヘッダファイルを書き、それがプリヘッダファイルとしてコンパイラ400によって出力され、それにより、対応する試験クラスまたは他の試験実体において見ることができるようにする。
TestCondition TC 1
{
TestConditionGroup = TCG1; # Previously defined TCG for Levels
Selector = min;
}
TestCondition TC2
{
TestConditionGroup = TCG2; # Previously defined TCG for Timing
Selector = min;
}
...
Test FunctionalTest FuncTest1
{
PListParam = patList1; # Previously defined pattern list
TestConditionParam = TC1;
TestConditionParam = TC2;
}
#
# Parameterization specification pre-header for FunctionalTest
#
ImportTest1.ph; # For base class Test1
Import Test2. ph; # For base class Test2
TestClass = FunctionalTest; # The name of this test class
PublicBases = Test1, Test2; # List of public base classes
# The parameters list or "parameter block":
Parameters
{
# The following declaration specifies that a FunctionalTest has
# - a parameter of type PList
# - [represented by C++ typeTester::PatternTree]
# - stored in a member named m_pPatList
# - a function to set it named setPatternTree.
# - a parameter description for the GUI to use as a tool tip
PList PListParam
{
Cardinality = 1;
Attribute =m_pPatList;
SetFunction = setPatternTree;
Description = "The PList parameter for a FunctionalTest";
}
#
# The following declaration specifies that a FunctionalTest has
# - 1 or more parameters of type TestCondition
# - [represented by C++ type Tester::TestCondition]
# - stored in a member named m_testCondnsArray
# - a function to set it named addTestCondition.
# - a parameter description for the GUI to use as a tool tip
# The [implement] clause causes the translation phase of to
# generate a default implementation of this function.
#
TestCondition TestConditionParam
{
Cardinality = 1-n;
Attribute = m_testCondnsArray;
SetFunction = addTestCondition [Implement] ;
Description = "The TestCondition parameter for a FunctionalTest";
}
}
#
# The section below is part of the Pre-Header which is an escape
# into C++ code. This will be referred to as a "template block."
#
# Everything in this section will be reproduced verbatim in the
# generated header file, except for "$Class", "$Inc",
# "$ParamAryTypes", "$ParamAttrs","$ParamFns" and"$ParamImpls".
#
# Note that no comments beginning with the "#" character are supported
# within the following section.
#
CPlusPlusBegin
$Inc
namespace
{
class $Class
{
// Array types for parameters storage:
$ParamAryTypes
public:
virtual void preExec();
virtual voidexec();
virtual voidpostExec();
$ParamFns
...
private:
double m_someVar;
$ParamAttrs
...
};
...
$ParamImpls
} // End namespace
CPlusPlusEnd
コンパイラがプリヘッダファイルを処理するとき、コンパイラは、$Inc、$Class、$ParamAryTypesなどのコンパイラ変数の値を蓄積する。これにより、その後、コンパイラは上記と全く同じようにC++コードを生成し、指示された場所においてコンパイラ変数$Inc、$Classなどの値に拡張することにより、以下のC++ヘッダを作成できるようになる。FunctionalTest.phの場合、コンパイラは、FunctionalTestクラスのための以下のC++ヘッダファイルFunctionalTest.hを作成する。
#include <ITest.h>
#line 5 "./FunctionalTest.ph"
#include <Test1.h>
#line 6 "./FunctionalTest.ph"
#include <Test2.h>
#line 55 "./FunctionalTest.ph"
#include <vector>
#line 55"./FunctionalTest.ph"
#include <Levels.h>
#line 55 "./FunctionalTest.ph"
#include <TestCondnGrp.h>
...
#line 56 "./FunctionalTest.ph"
namespace
{
#line 7 "./FunctionalTest.ph"
class FunctionalTest : public ITest,
#line 8 "./FunctionalTest.ph"
public Test1,
#line 8 "./FunctionalTest.ph"
public Test2
#line 59 "./FunctionalTest.ph"
{
// Array types for parameters storage:
#line 61"./FunctionalTest.ph"
public:
#line 37 "./FunctionalTest.ph"
typedef std::vector<Tester::TestCondition *>
TestConditionPtrsAry_t;
#line 62 "./FunctionalTest.ph"
public:
virtual void preExec();
virtual voidexec();
virtual void postExec();
public:
#line 7 "./FunctionalTest.ph"
void setName(OFCString &name); # Automatic for all tests
#line 22 "./FunctionalTest.ph"
void setPatternTree(PatternTree *);
#line 23 "./FunctionalTest.ph"
StringgetPListParamDescriptionO const;
#line 39 "./FunctionalTest.ph"
void addTestCondition(TestCondition*);
#line 40 "./FunctionalTest.ph"
void getTestConditionParamDescription () const;
#line 67 "./FunctionalTest.ph"
...
private:
double m_someVar;
#line 70 "./FunctionalTest.ph"
private:
#line 7 "./FunctionalTest.ph"
OFCString m_name; # Automatic for all tests
#line 21 "./FunctionalTest.ph"
Tester::PatternTree *m_pPatList;
#line 38 "./FunctionalTest.ph"
TestConditionPtrsAry_tm testCondnsArray;
#line 71 "./FunctionalTest.ph"
...
};
...
#line 7 "./FunctionalTest.ph"
inline void
#line 7 "./FunctionalTest.ph"
FunctionalTest::setName(OFCString &name)
#line 74 "./FunctionalTest.h"
{
m_name = name;
return;
}
#line 39 "./FunctionalTest.ph"
inline void
#line 39 "./FunctionalTest.ph"
FunctionalTest::addTestCondition(TestCondition *arg)
#line 74 "./FunctionalTest.ph"
{
m_testCondusArray.push_back(arg);
return;
}
#line 23 "./FunctionalTest.ph"
inline void
Tester::String FunctionalTest::getPListParamDescription()
{
return "The PList parameter for a FunctionalTest";
}
#line 40"./FunctionalTest.ph"
inline void
Tester: :StringFunctionalTest::getTestConditionParamDescription()
{
return "The TestCondition parameter for a FunctionalTest";
}
#line 75"./FunctionalTest.ph"
} // End namespace
{
PListParam = patList1; # Previously defined pattern list
TestConditionParam = TC1;
TestConditionParam = TC2;
}
FuncTest1.setName ("FuncTest1");
FuncTest1.setPatternTree(&patList1);
FuncTest1.addTestCondition(&TC1);
FuncTest1 .addTestCondition(&TC2);
プリヘッダは、付加的なタイプとして、いくつかの他のユーザ定義列挙法をサポートする。これにより、GUIは、ある特定のパラメータの値をセットするために用いることができる、取り得る選択肢のドロップダウンリストを提供できるようになる。さらに、プリヘッダは、テーブルと考えることができる多数のパラメータを関連付けるための機能を提供する。たとえば、プリヘッダは、「プロパティ」のアレイを、関連する1組の、名前のためのストリングのアレイ、および値のための整数のアレイとしてインプリメントするのに都合良く用いることができる。この機能をインプリメントする1つの簡単な方法は、カスタムタイプ(後に説明される)のアレイを用いることである。しかしながら、それは、ユーザに、使用すべきカスタムタイププリヘッダを書くことを要求する。これらの機能がいずれも、以下の例において示される。
# File FooBarTest.ph
#
# Parameterization specification pre-header for
# custom test class FoobarTest
# --------------------------------------------------------
Version 1.0;
Import Test1.ph; # For base class Test1
TestClass = FoobarTest; # The name of this test class
PublicBases = Test1; # List of public base classes
# The parameters list:
Parameters
{
# An enumerated type
Enum WishyWashy = Yes, Perhaps, Possibly, Maybe, MaybeNot, No;
# Define a WishyWashy parameter.
WishyWashy WW
{
Cardinality = 1;
Attribute = m_ww;
SetFunction = setWw;
Description = "The WW parameter for a Foobar Test";
}
# This class has an array of name-number pairs that is
# interpreted in the class.
ParamGroup
{
Cardinality = 0-n;
# The Name field in this array is:
# - of type String
# - [represented by C++ type Tester::String]
# - stored in a member named m_NameArray
# - a function to set it named addName.
# - a parameter description for the GUI to use as a tool tip
String Name
{
Attribute = m_NameArray;
SetFunction = addName;
Description = "A Name with a Value";
}
# The Number field in this array is:
# - of type Integer
# - [represented by C++ type int]
# - stored in a member named m_NumberArray
# - a function to set it named addNumber.
# - a parameter description for the GUI to use as a tool tip
Integer Number
{
Attribute =m_NumberArray;
SetFunction = addNumber;
Description = "The value of the Name";
}
}
# The following declaration specifies that a FunctionalTest has
# - a parameter of type PList
# - [represented by C++ type Tester::PatternTree]
# - stored in a member named m_pPatList
# - a function to set it named setPattemTree.
# - a parameter description for the GUI to use as a tool tip
PList PListParam
{
Cardinality =1;
Attribute =m_pPatList;
SetFunction = setPatternTree;
Description = "The PList parameter for a FunctionalTest";
}
#
# The following declaration specifies that a FunctionalTest has
# - 1 or more parameters of type TestCondition
# - [represented by C++ type Tester::TestCondition]
# - stored in a member named m_testCondnsArray
# - a function to set it named addTestCondition.
# The [implement] clause causes the translation phase of to
# generate a default implementation of this function.
#
TestCondition TestConditionParam
{
Cardinality = 1-n;
Attribute =m_testCondnsArray;
SetFunction = addTestCondition [Implement];
Description = "The TestCondition parameter for a FunctionalTest";
}
}
CPlusPlusBegin
$Inc
namespace
{
class $Class
{
// Array types for parameters storage:
$ParamAryTypes
public:
virtual void preExec();
virtual void exec();
virtual void postExec();
$ParamFns
// ...
private:
double m_someVar;
$ParamAttrs
// ...
};
// ...
$ParamImpls
}// End namespace
CPlusPlusEnd
これにより、フロー遷移が行われるときに、ユーザはカスタム関数をコールできるようになる。カスタム関数は、以下のように、プリヘッダを通して宣言される。
# File MyFunctions.ph
#
# Parameterization specification pre-header for MyFunctions
# --------------------------------------------------------
Version 1.0;
Functions MyFunctions; # The name of this group of functions
# Declare the following C++ function in the
# MyFunctions namespace to determine the minimum
# of two values.
# // Return the minimum of x, y
# double MyRoutines::Min
# (ITestPlan* pITestPlan,int& x, int& y);
Integer Min(Integer x, Integer y);
# Declare the following C++ function in the
# UserRoutines namespace to return the average of
# an array.
# // Return the average of the array
# double MyRoutines::Avg
# (ITestPlan* pITestPlan, double* a, const inta_size);
# The C++ function will be called with a and a'Length
Double Avg(Double a[]);
# Declare the following C++ function in the
# UserRoutines namespace to print the dut id
# and a message
# // Return the average of the array
# double MyRoutines::Print
# (ITestPlan* pITestPlan, String* msg, unsigned int&dutId);
# The C++ function will be called with a and a'Length
Void Print(String msg, Unsignedlnteger dutld);
#
# File Functions.ph
#
Functions = Functions; # The name of this group of functions
# Declare the following C++ function in the
# Functions namespace
# Returns the ID of the current DUT being tested by the
# caller.
UnsignedlntegerGetDUTID();
上記のMyFunctionsのためにコンパイラによって生成されることになるC++コードは、MyFunctions名前空間において単純にいくつかの関数を宣言することである。
{
double Min(ITestPlan* pITestPlan, int& x, int& y);
double Avg(ITestPlan* pITestPlan, double* a, const int a_size);
void Print(ITestPlan* pITestPlan, char* Msg, unsigned int dutID);
}
プリヘッダを用いて、C++ IFlowableインターフェースをインプリメントするプリヘッダを作成することもできる。これにより、ユーザは、FlowItem内で実行することができるカスタムフローアブルを定義できるようになる。以下に示されるのは、ユーザ定義のFlowable MyFlowableのためのプリヘッダである。
# File MyFlowable.ph
#
# Parameterization specification pre-header for MyFlowable
# --------------------------------------------------------
Version 1.2.4;
FlowableClass = MyFlowable; # The name of this custom class
# The parameters list:
Parameters
{
# The following declaration specifies that a MyFlowable has
# - 1 optional parameter Intl of type Integer
# - [represented by C++ type int]
# - stored in a member namedm_intl Val
# - a function to set it named setIntlVal.
Integer Int1
{
Cardinality= 0-1;
Attribute = m_int1Val;
SetFunction = setIntl Val;
}
# The following declaration specifies that a MyFlowable has
# - 1 mandatory parameter Int2 of type Integer
# - [represented by C++ type int]
# - stored in a member named m_int2Val
# - a function to set it named setInt2Val.
Integer Int2
{
Cardinality = 1;
Attribute =m_int2VaI;
SetFunction = setInt2Val;
}
# The following declaration specifies that a MyFlowable has
# - one or more parameters of type String
# - [represented by C++ type Tester::String]
# - stored in a member named m_stringArrVal
# - a function to set it named addStr.ingVal.
String Stringltem
{
Cardinality = 1-n;
Attribute = m_stringArrVal;
SetFunction = addStringVal;
}
# The following declaration specifies that a MyFlowable has
# - A single PList parameter
# - [represented by the C++ type Tester::PList]
# - stored in a member named m_plist
# - a function to set it named setPListParam
PList PListParam
{
Cardinality =1;
Attribute = m_plist;
SetFunction = setPListParam;
}
}
#
# The section below is part of the Pre-Header which is an escape
# into C++ code.
#
# Everything in this section will be reproduced verbatim in the
# generated header file, except for"$Class", "$Inc",
# "$ParamAryTypes","$ParamAttrs", "$ParamFns" and"$ParamImpls".
#
# Note that no comments beginning with the character are supported
# within the following section.
#
CPlusPlusBegin
$Inc
namespace
{
class $Class
{
// Array types for parameters storage:
$ParamAryTypes
public:
virtual void preExec();
virtual void exec();
virtual void postExec();
$ParamFns
// ...
private:
double m_someVar;
$ParamAttrs
// ...
};
// ...
$ParamImpls
}// End namespace
CPlusPlusEnd
1.現在のテスタ構成内で試験計画を実行することができるか否かを検査することになるプログラムローディングのためのFlow。
2.特定のパターンおよびパターンリストをロードすることになるパターンローディングのためのFlow。
3.ハードウエアおよびソフトウエアを既知の状態にし、グローバル変数をロードし、他の初期化および妥当性検査機能を実施することになる初期化のためのFlow。
4.他の一般的に有用な試験フロー。
先のTestクラスパラメータ化に関する説明は、既知のタイプ、すなわち基本タイプ並びにPListsおよびTestConditionsのようなテスタ定義のタイプを有するような試験クラスパラメータの場合のみ許される。ユーザの自由度を高めるために、タイプ拡張性を与え、それにより、複数のタイプ(コンパイラには事前にはわかっていない)を作成し、使用できるようにすることが重要である。カスタムタイプ(CT)はCustom Typeにおいて定義されるであろう。これらのカスタムタイプを用いて、C言語ストラクトに対応するタイプ(Plain Old Dataタイプ、すなわちPODとも呼ばれ、C++の同じ名前のものとは大きく異なる)および関数シグネチャのためのC言語タイプ定義に対応するタイプを定義することができる。ユーザタイプを含む別個のファイルは拡張子.ctypを有するであろう。ここに示されるのは、本発明の好ましい実施形態によるユーザタイプ宣言の一例である。
# File MyCustomTypes.ctyp
# --------------------------------------------------------
Version 1.0.0;
CustomTypes
{
# A structured Plain-Old-Data type
Pod Foo
{
String S1; # String is a standard type
Integer I1; # ... and so is Integer
String S2;
}
# Another structured type using Foo
Pod Bar
{
Foo Fool;
String S1;
Foo Foo2;
}
#
# A pointer to a function.
# Return type: Integer
# Parameters: Integer, Integer
#
Routine BinaryOp(Integer, Integer) Returns Integer;
#
# Another pointer to. a function.
# Return type: Void
# Parameter: Integer
#
Routine UnaryOp(Integer) Returns Void;
#
# A pointer to a function that takes
# no parameters and does not return a value.
#
Routine NullaryOp () Void;
}
先に提示されたCustomType宣言は、コンパイラによって以下のC++コードに翻訳されるであろう。
{
struct Foo
{
Tester:: String S1;
int I1;
Tester:: String S2
};
struct Bar
{
Foo Foo 1;
Tester:: String S1;
Foo Foo2;
};
typedef int (*BinaryOp) (int&, int&);
typedef void (*UnaryOp)(int);
typedef void (*NullaryOp)();
}
ユーザがある試験を拡張する場合について考えると、その試験は、パターンリストおよび試験条件に加えて、他のクラスオブジェクト、ならびにCustom Type(すなわち、.ctypファイル)を含むファイル内で定義される任意の(すなわち、ユーザ定義の)オブジェクトで初期化される必要がある。たとえば、ユーザがファイルMyTestCTs.ctypにおいて定義されるCTを用いることを望むものと仮定する。
Version 1.0;
CustomTypes
{
Pod Foo
{
String name;
PList patternList;
}
Pod Bar
{
Foo someFoo;
Double dVal;
}
RoutineBinaryOp(Integer, Integer) return Integer;
}
Import MyFunctions.ph;
Import MyCustomTypes.ctyp;
...
# TheCustomVars block defines variables of the Custom
# types defined earlier.
CustomVars
{
...
Bar bar 1 =
{
{"This is a Foo", somePatList}, # someFoo
3.14159 # dVal
}
#
# A function object that is a binary operator.
# The name on the right hand side of the assignment
# is a routine declared in MyFunctions, for which,
# of course, the user has to provide an implementation.
#
BinaryOp bop1= MyFunctions.Min;
}
...
Test MyFancyTest MyTest1
{
...
BarParam = bar1;
BinaryOpParam =bop1;
}
...
# File MyFancyTest.ph
#
# Parameterization specification pre-header for MyFancyTest
# --------------------------------------------------------
Version 1.0.2;
Import MyCustomTypes.ctyp; # For CTs used in MyFancyTest
Import FunctionalTest. ph; # For base class FunctionalTest
TestClass = MyFancyTest; # The name of this test class
PublicBases = FunctionalTest; # List of public base classes
# The parameters list:
Parameters
{
# The following declaration specifies that a MyFancyTest has
# - an optional array of parameters of custom type Bar
# - [represented by C++ type CustomTypes::Bar]
# - stored in a member named m_barsArray
# - a function to set it named addBarParam.
# An implementation. will be generated for addBarParam.
Bar BarParam
{
Cardinality = 0-n;
Attribute =m_barsArray;
SetFunction = addBarParam [Implement];
}
# The following declaration specifies that a MyFancyTest has
# - an optional parameter of custom type BinaryOp
# - [represented by C++ type CustomTypes::BinaryOp]
# - stored in a member named m_binaryOp
# - a function to set it named setBinaryOpParam.
# An implementation will be generated for setBinaryOpParam.
BinaryOp BinaryOpParam
{
Cardinality = 0-1;
Attribute = m_binary0p;
SetFunction = setBinaryOpParam [Implement];
}
}
CPlusPlusBegin
$Inc
namespace
{
class $Class
{
$ParamAryTypes
public:
virtual void preExec();
virtual void exec();
virtual void postExec();
$ParamFns
// ...
private:
double m_someVar;
$ParamAttrs
// ...
};
// ...
$ParamImpls
}// End namespace
CPlusPlusEnd .
最後に、一旦コンパイラがこのプリヘッダファイルを処理したなら、コンパイラはMyFuncyTestクラスのための以下のC++ヘッダファイル、すなわちMyFuncyTest.hを作成するであろう。
#include <ITest.h>
#include <FunctionalTest.h>
...
namespace
{
class MyFancyTest : public ITest,
public Functional Test
{
public:
typedef std::vector<CustomTypes::Bar *> Bar Ary_t;
public:
virtual void preExec();
virtual void exec();
virtual void postExec();
public:
void setName(OFCString &name); # Automatic for all tests
void setPatternTree(PatternTree *);
void addTestCondition(TestCondition *);
void addBarParam(CustomTypes::Bar *) ;
voidsetBinaryOpParam(CustomTypes::BinaryOp *);
...
private:
double m_someVar;
private:
OFCString m_name; # Automatic for all tests
PatternTree*m_pPatList;
TestConditionPtrsAry_t m_testCondnsArray;
BarAry_t m_barsArray;
BinaryOp*m_binary0p;
...
}; // End class MyFancyTest
...
inline void
MyFancyTest: :addBarParam (CustomTypes::Bar *arg)
{
m_barsArray.push_back(arg);
return;
}
inline void
MyFancyTest::setBinaryOpParam(CustomTypes: :BinaryOp *arg)
{
m_binaryOp = arg;
return;
}
} // End namespace
先に示されたように、Testクラス、カスタムFlowableクラス、またはカスタム関数定義のためのプリヘッダは、パラメータ化仕様セクションを通して、クラス/関数へのイントロスペクションを制限する。コンパイラはこのセクションを用いて、クラス/関数のためのパラメータ化インターフェースを生成する(そして、クラス/関数ヘッダそのものを生成する)。TestクラスおよびFlowableクラスの場合、コンパイラはまた、このセクションを用いて、Test Planコード内のコールを後に生成し、そのクラスのインスタンスを初期化する。プリヘッダおよび対応する宣言に関する以下の点に留意されたい。
1.全てのTestまたはカスタムFlowableクラス定義は、プリヘッダ内で指定されることが好ましい。プリヘッダ内のParametersブロックは、そのようなクラスのためのパラメータリストを指定することができる唯一の場所であることが好ましい(したがって、結果として、パターンリストおよび試験条件仕様のようなTestのための「標準的な」パラメータも、プリヘッダのParametersブロックに含まれる必要がある;これにより、全てのパラメータ、標準およびCTが一様に処理されるようになる)。
2.TestまたはFlowableクラスのためのプリヘッダにおいて非オプションとして定義される(すなわち、0以外の基数を有する)全てのパラメータが、そのクラスのインスタンスのためのTestブロックまたはFlowableブロック宣言の中で初期化されるべきである。
3.Test/Flowableブロックにおいてパラメータの初期化のために用いられるオブジェクトは予め定義されているべきである。
4.置換指示子$Class、$Inc、$ParamAryTypes、$ParamFns、$ParamAttrsおよび$ParamImplsが、ユーザが対応する生成されたコードを生成されたクラスヘッダファイル内に挿入させるつもりである、プリヘッダのユーザコードセクション内の正確な場所に現われなければならない。置換指示子毎に特定のコードが生成されるので、これらの置換指示子は厳密に一度だけ現われるべきである。
5.プリヘッダのParametersブロック内のパラメータ仕様の名前(上記の例のPListParam、TestConditionParamまたはBarParamのような)は、そのクラスのインスタンスの宣言において用いられることになるパラメータの名前である。
6.以下はパラメータ仕様において用いられる記述子の意味である。
a.Cardinality:これはサポートされることになるこのタイプのパラメータの数を指示する。以下は一実施形態において取り得る値である。
i.1:このパラメータは強制的であり、厳密に一度だけ指定されるべきである。このパラメータは、パラメータのタイプのオブジェクトへのポインタとして保持されるであろう。
ii.0−1:このパラメータはオプションである。指定される場合には、それは一度だけ指定されなければならない。このパラメータは、パラメータのタイプのオブジェクトへのポインタとして保持されるであろう。
iii.1−n:このパラメータは強制的である。さらに、このパラメータのために多数の値を指定することができる。この値は指定された順序で記憶されるであろう。
iv.0−n:このパラメータはオプションである。このパラメータのために多数の値を指定することができる。この値は指定された順序で記憶されるであろう。
上記の()および()の場合に、全ての指定された値が、パラメータのタイプへのポインタ上でテンプレート化される、STLベクトル<>に記憶されることになることに留意されたい。このベクトルのタイプは定義され、$ParamAryTypesによって指示される場所に挿入されるであろう。これらのタイプ定義のためのアクセスレベルは常に公開である。
b.Attribute:このタイプのパラメータ値(複数可)のための記憶として用いるためのC++変数の名前。その名前は、C++クラスの私用データメンバとして全く同じ語で再現されることになり、C++識別子のための要件に準拠しなければならない。この属性のタイプに関して、以下のことに留意されたい。
i.ただ1つの値だけが許される場合には、そのパラメータのタイプへのポインタである。
ii.多数の値が許される場合には、そのパラメータのタイプへのポインタ上にテンプレート化されるSTLベクトル<>である(上記の()を参照)。
それらの属性はTest Planによって作成され、ポピュレートされるオブジェクトへの参照を保持し、これらのオブジェクトを所有しないことに留意されたい。オブジェクトの寿命は常に、Test Planそのものによって管理される。
c.SetFunction:このパラメータのための値をセットするために用いるための関数の名前。以下の点に留意されたい。
i.その名前は全く同じ語で再現されることになり、それゆえ、C++言語要件に準拠しなければならない。
ii.その関数のアクセスレベルは常に公開である。
iii.リターンタイプは常に空である。
iv.その関数は常に、タイプポインタ/パラメータタイプのただ1つの引き数をとる。
d.Description:このパラメータのランタイム変更中にヘルプを提供するために、GUIツールによって用いられることになるツールチップであるストリングリテラル。Xxxと名前を付けられたパラメータのためのカスタムクラスにおいて生成されるC++メンバ関数は以下の通りであり、その関数は指定されたストリングを返すであろう。
以下に示されるのは、いくつかのカスタム化を用いて説明される試験計画例である。
# File MyCustomizedTestPlan.tpl
# --------------------------------------------------------
Version 0.1;
#
# Imports as before ...
# The following import is implicit, but can be explicitly
# provided.
Import FunctionalTest.ph;
# Import for MyFlowables, MyFunctions and Functions
Import MyFlowables.ph;
Import MyFunctions.ph;
Import Functions.ph;
# --------------------------------------------------------
# Start of the test plan
# --------------------------------------------------------
TestPlan Sample;
# This block defines Pattern Lists file-qualified names and
# Pattern List variables that are used in Test declarations.
# The file-qualified names refer to pattern lists in the named
# files. The variables refer to String variables which will
# hold the pattern list names at run time. User defined Flowable
# objects could set the values of these variables through an
# API.
PListDefs
{
# File qualified pattern list names
pl1A. plist:pat1Alist,
pl2A.plist:pat2AList,
# Pattern list variables
plistXxx,
plistYyy,
plistZzz
}
# SocketDef, UserVars declaration as before ...
# Declarations of TestConditions TC1Min, TC1Typ, TC1Max,
# TC2Min, TC2Typ, TC2Max as before ...
#
# Declare a FunctionalTest. "FunctionalTest" refers to a C++
# test class that runs the test, and returns a 0,1 or 2 as
# a Result. The Test Condition Group TCG1 is selected with
# the "min" selector by referring to theTClMin TestCondition.
#
# Note that compiler can compile this because of the imported
# FunctionalTest.ph file.
#
Test FunctionalTest MyFunctionalTest1Min
{
PListParam = patlAList;
TestConditionParam = TC1Min;
}
#
# Additional FunctionalTest declarations for the following, as before
# MyFunctionalTest1Typ
# MyFunctionalTest1Max
# MyFunctionalTest2Min
# MyFunctionalTest2Typ
# MyFunctionalTest2Max
#
# Here is a declaration of MyFlowable. It uses a PatternList variable
# plistXxx which is initialized by the flowable prior to use here.
#
# Compiler can compile this because of the imported MyFlowables.ph file:
Flowable MyFlowable MyFlowable1
{
Int1 = 10;
Int2 = 20;
Stringltem = "Hello World";
PListParam = plistXxx;
}
# Counters for PassCount and FailCount as before...
# Flows as before. Flows FlowTest1 and FlowTest2 are
# unchanged from the previous example.
Flow FlowTest1
{
# ...
}
Flow FlowTest2
{
# ...
}
#
# Now FlowMain, a main flow, can be presented. It
# implements a finite state machine that calls FlowTest1
# and FlowTest2 as below:
# --------------------------------------------------------
# Result 0 Result 1
# --------------------------------------------------------
# FlowMain_1 Flowmain_2 return 1
# FlowMain_2 FlowMain_3 return 1
# FlowMain_3 FlowMain_4 return 1
# FIowMain_4 FlowMain_5 return 1
# FlowMain_5 return 0 return 1
#
# Where the IFlowables run by eachFlowltem are:
# --------------------------------------------------------
# Flowltem IFlowable that is run
# --------------------------------------------------------
# FlowMain_l Myflowable1
# FlowMain_2 DatalogStartFlow
# Flowmain_3 FlowTest1
# Flowmain_4 FlowTest2
# FlowMain_5 DatalogStopFlow
#
Flow FlowMain
{
#
# The first declared flow is the initial flow to be
# executed. It goes to Flowmain_Initializationflow
# on success, and returns 1 on failure.
#
FlowItem FlowMain_1 MyFlowable1
{
Result 0
{
Property PassFail = "Pass";
IncrementCounters PassCount;
# A user function call
MyFunctions.Print ("PassedMyFlowable1",
Functions.GetDUTID());
GoTo FlowMain_2;
}
Result 1
{
Property PassFail = "Fail";
IncrementCounters FailCount;
# A user function call
MyFunctions.Print("Failed Myflowable1",
Functions.GetDUTID());
SetBin SoftBins."3GHzLeakage";
Return 1;
}
}
#
# Goes to FlowMain_3 on success
# and returns 1 on failure.
#
FlowItem FlowMain_2 DatalogStartFlow
{
Result 0
{
Property PassFail = "Pass";
IncrementCounters PassCount;
# A user function call
MyFunctions.Print("Passed DatalogStartFlow",
Functions.GetDUTIDO);
GoTo FlowMain_3;
}
Result 1
{
Property PassFail = "Fail";
IncrementCounters FailCount;
MyFunctions.Print("Failed DatalogStartFlow",
Functions.GetDUTID());
Return 1;
}
}
# This FlowItem calls the previously defined FlowTest1
FlowItem FlowMain 3 FlowTest1
{
Result 0
{
Property PassFail = "Pass";
IncrementCounters PassCount;
# A user function call
MyFunctions.Print("Passed FlowTest1",
Functions.GetDUTID());
GoTo FlowMain_4;
}
Result 1
{
Property PassFail = "Fail";
IncrementCounters FailCount;
# A user function call
MyFunctions.Print("Failed FlowTest1",
Functions.GetDUTID());
SetBin SoftBins."3GHzCacheFail";
Return 1;
}
}
# This Flowltem calls the previously defined FIowTest2
Flowltem FlowMain 4 FlowTest2
{
Result 0
{
Property PassFail = "Pass";
IncrementCounters PassCount;
# A user function call
MyFunctions.Print("Passed FlowTest2",
Functions.GetDUTID());
GoTo FlowMain_5;
}
Result 1
{
# FlowTest1 passed, but FlowTest2 failed
Property PassFail = "Fail";
IncrementCounters FailCount;
# A user function call
MyFunctions.Print("Failed FlowTest2",
Functions.GetDUTID());
SetBin SoftBins."3GHzSBFTFail";
Return 1;
}
}
FlowItem FlowMain_5DatalogStopFlow
{
Result 0
{
# All Passed!
Property PassFail = "Pass";
IncrementCounters PassCount;
# A user function call
MyFunctions.Print ("Passed all!",
Functions.GetDUTID());
SetBin SoftBins."3GHzAllPass";
Return 0;
}
Result 1
{
# FlowTest1 and FlowTest2 passed,
# but DatalogStopFlow failed
Property PassFail = "Fail";
IncrementCounters FailCount;
# A user function call
MyFunctions.Print("Failed DatalogStopFlow",
Functions.GetDUTID());
Return1;
}
}
}
1.ここでPListDefsセクションは、いくつかのPList名とともに、いくつかのPList変数も有する。PList名は、試験において直に用いることができる名前である。PList変数は試験において用いることができる変数であり、その値は、ランタイムにおいて、カスタム化されたFlowable内のコードによって実際のPListに結び付けられる。
2.PListDefsセクションはオプションである。存在しない場合には、その内容は種々のTest宣言からコンパイラによって推測されるであろう。存在する場合には、それは、用いられるTestのPListパラメータの全てを宣言しなければならないが、それはさらに多くのパラメータを宣言することもできる。
3.値をPList変数に割り当てるために、ランタイムAPIを利用できるであろう。TestPlanクラスは以下の関数を有するであろう。そのFlowableはPListVariableを特定のPListに結び付けるためにその関数を用いることができるであろう。
const Tester: :String& fileQualifiedPListName);
複数のフローにおいてカスタム関数コールを呼び出すことを除いて、コンパイラによって生成されることになるC++コードが、先に提示された種々のカスタム化技法のために示されている。FlowItem内のユーザ関数コールは、各FlowのIUserCallsメンバによって取り扱われることが好ましい。各Flowは、以下に示されるように、単一の仮想メンバ関数をエクスポートするインターフェースIUserCallsのメンバを有することが好ましい。
{
public:
virtual void exec(const String& flowItemName,
unsigned int result) = 0;
} ;
{
public:
virtual void exec(const String& flowItemName,
unsigned int result)
{
if (flowItemName == "FlowMain_1")
{
//...
} else if(flowItemName== "FlowMain_2")
{
//...
} else if (flowItemName == "FlowMain_3")
{
switch (result)
{
case 0:
MyFunctions::Print("Passed FlowTest1",
Functions: :GetDUTID());
return;
case 1:
MyFunctions::Print("Failed FlowTest1",
Functions: :GetDUTID());
return;
default:
return;
}
}
else if (flowItemName =="FlowMain_4")
{
// ...
}
else if (flowItemName =="FlowMain_5")
{
// ...
}
}
};
先に説明されたように、Test Plan記述ファイルは、1つの試験計画において用いられる複数のオブジェクトと、それらの互いに対する関係とを指定する。一実施形態では、このファイルはC++コードに翻訳され、それは、標準インターフェースITestPlanのインプリメンテーションの形でサイトコントローラにおいて実行されることになる。このコードは、サイトコントローラ上にロードされることができるウインドウズ・ダイナミックリンクライブラリ(DLL)にパッケージ化されることができる。Test Program DLLは、サイトコントローラソフトウエアが試験計画オブジェクトを生成し、それが含む試験計画オブジェクトを返すために用いることができる標準的な既知のエントリポイントを有するように生成される。
1つの試験計画記述からITestPlanのインプリメンテーションへの変換のプロセスは、試験プログラムコンパイラ400によって達成される。このプロセスは2段階、すなわち翻訳およびコンパイルにおいて行われる。
MyTestPlan.cpp
Timing1.cpp
MyTestPlan.sln (MSVC++ "Solution" file)
MyTestPlan.vcproj (MSVC++ "Project" file)
サイトコントローラソフトウエアは、その処理空間内にTest Program DLLをロードし、DLL内の「ファクトリ」関数をコールして、Test Planオブジェクトのインスタンスを作成する。一旦Test Planオブジェクトが作成されたなら、サイトコントローラソフトウエアは、その試験計画を実行するか、または必要とされる任意の他の方法で試験計画とやりとりすることができる。
ウインドウズ環境の大部分のC++ソフトウエア開発者にとってアプリケーション(またはDLL、ライブラリなど)を構築することは、開発環境(MSビジュアルC++、ボーランドC++など)を構築し、コードを編集し、そして(多くの場合に)ボタンを押してプロダクトを構築することを意味する。
ユーザの環境について、ある特定の想定がなされる。それらの想定は以下の通りである。
1.Test Plan開発者は、上記の方法および規則に従って、自らのTest Planを開発しているであろう。
2.Test Plan開発者はC++の熟練者レベルの知識を持たない場合もある。
3.Test Plan開発者は、ファイル(複数可)をTest Plan DLLに変換するために、コマンドラインツールまたはGUIツールを利用できるであろう。
MSビジュアルスタジオで非インタラクティブに作業するには、2つの手法のうちの1つが必要になる。第1の(そして最も簡単な)手法はコマンドラインインターフェースを用いることである。第2の(そしてより自由度のある)手法は自動インターフェースを用いることである。このセクションは両方の手法を説明する。
ビジュアルスタジオを非インタラクティブに使用するために、1つまたは複数の有効なプロジェクトを含むワーキングソリューションで開始すべきである。残念なことに、これは、コマンドライン手法又は自動手法のいずれからも達成することができないタスクである。いずれの方法もプロジェクト作成のための仕組みを提供しない。しかしながら、ビジュアルスタジオのためのプロジェクトおよびソリューションはテンプレートから作成することができる。それゆえ、プロジェクト名およびテンプレートを与えて開始することにより、ビジュアルスタジオのためのソリューション/プロジェクトを作成することができる。
コマンドラインがサポートしないので、生成されたプロジェクトに新たなファイルを追加するために、ビジュアルスタジオ自動モデルが用いられる。プロジェクトに新たなファイルおよび既存のファイルを追加するために、2つのビジュアルスタジオマクロが提供される。ActiveScriptエンジン(VBScript、JScript、ActivePerl、ActivePythonなどのような)を用いて同じタスクを実行するために、外部スクリプトが類似のコードを用いることができる。それゆえ、本発明のコード生成ツールは新たなファイルを作成し、自動モデルを用いて、それらのファイルを既存のビジュアルスタジオプロジェクトに追加することができる。ファイルが作成された後に、それらのファイルは、必要に応じて、ツールによって更新することができる。
一旦、適当なソリューションおよびプロジェクトが得られたなら、ビジュアルスタジオを非インタラクティブに用いて、Test Planを構築することに対していくつかのオプションがある。最も単純なオプションは、コマンドラインからそれを呼び出すことである。そのようなコマンドラインは以下のようになるであろう。
Testクラスの開発者がその作業を検査し、デバックするために、サイトコントローラ内でブレークし、そのコードの中を逐次的に進むことができるようにするデバッガを利用する必要がある。コンパイラによって生成されるコードはMSVC++によってコンパイルされるC++であるので、MSVC++デバッガを用いて、Testクラスインプリメンテーションがデバッグされる。この特徴は、C++において直に作業するTestクラス開発者などだけを対象にしていることに留意されたい。生成されたC++コードを直に参照することなくTestプログラムの動作をデバッグするか、または逐次的に進めることを望む試験技師に対して他の仕組みが提供されるであろう。
このセクションは、テスタのための一般的なソフトウエア環境、すなわちユーザ試験計画によって必要とされるファイルのための場所、そのようなファイルのための代替の場所を指定するための仕組み、ならびに試験計画およびモジュール制御ソフトウエアの場所を指定するための方法を説明する。
システムの標準的な場所、および1つの試験計画によって必要とされる
1.パターンリスト
2.パターン
3.タイミングデータ
4.試験クラスDLL、のための探索経路のランタイム構成を、環境構成ファイルによって指定されるような、「環境」変数によって構成することができる。これらはテキストファイルであり、以下のような単純な構文を用いる。
・パターンリスト:Tester_PATLIST_PATH
・パターンオブジェクトファイル:Tester_PATOBJ_PATH
・パターンソースファイル:Tester_PATSRC_PATH(これはオプションである;以下を参照)
・Timingデータファイル:Tester_TIMING_PATH
・TestクラスDLL:Tester_TEST_CLASS_LIBPATH
$Tester_INSTALLATIONROOT\cfg\setups\Setup.envが、「環境」変数のデフォルト値を指定するであろう。他の構成の仕組みが利用できない場合には、このファイルが必要とされるであろう。一般的に、それは、システム上で実行される全ての試験計画の場合に利用可能であろう。このファイルはインストール中にインストールおよび構成管理(ICM)システムによって作成され、インストーラからの入力が先に述べられた3つの変数のためのデフォルト値を割り当てる(上記の3つの変数のためのシステムデフォルトに加えて、このファイルは、以下のサブセクションにおいて説明されるような、ある特定の他のテスタ「環境」変数のためのシステムデフォルトも含むことに留意されたい)。
ユーザ試験計画によって必要とされる「環境」変数に加えて、試験環境によって、以下の2つの「環境」変数が必要とされる。
1.Tester_TEST_PLAN_LIBPATH:これは、ロードされるべきであるユーザ試験計画DLLを見つけるためにシステムコントローラが用いることになる探索経路を指定する。ユーザピン記述およびソケットファイルを見つけるためにも同じ探索経路が用いられることに留意されたい。ICMへのインストール時間中に指定される、この変数のためのデフォルト値は、ICMによって、ファイル$Tester_INSTALLATION_ROOT\cfg\setups\Setup.envに格納される。
2.Tester_MODULE_LIBPATH:これは、ベンダ提供ハードウエアモジュール制御ソフトウエアDLLをロードするためにシステムが用いることになる探索経路を指定する。構成管理データベース(CMD)から引き出されるこの情報も、ICMによってファイル$Tester_INSTALLATION_ROOT\cfg\setups\Setup.envに格納される。
探索経路を指定する「環境」変数について以下の点に留意されたい。
1.各変数は、ある特定のタイプの参照されるファイルを見つけるためにシステムが探索することになるディレクトリ名の、セミコロン(「;」)によって分離されたリストにすべきである。
2.システムがそのような「環境」変数の値を最初に調べた後に、その値に対してユーザによって行われた任意の変更(たとえば、環境構成ファイルを編集することによる)は、それを行うための必要性をユーザが明示的にシステムに「通知する」ときにのみ、システムによって登録されるであろう。
3.テスタが正常に動作する環境のような分散環境内の「カレントワーキングディレクトリ」(CWD)の表記法は、ユーザが直観的に予想するものではないかもしれないので、CWDに対する経路が曖昧な結果に繋がる可能性があるとき、探索経路内の相対経路名は、関連する環境変数(ルートを定義する機能を提供する)の特定の設定に関連するように解釈されるであろう。探索経路内の全ての相対経路名が基づくことになると想定されるルートを指示する、この関連する環境変数は、「Tester_INSTALLATION_ROOT」変数であり、それはユーザのシステムへのテスタインストールのトップレベル(すなわち「ルート」)ディレクトリの場所を与える。
4.ディレクトリエントリは集合[V:*?<>|;]内の文字を含むことができない。セミコロン(「;」)を除いて、この集合内の全ての他の文字はウインドウズファイル名において違法であることに留意されたい。セミコロン(「;」)は探索経路内のエントリを区切るために用いられるので、セミコロンは探索経路エントリにおいて用いられるべきでない。経路名には空白を埋め込むことができるが、経路名の直前および直後に生じる(すなわち、経路名内の空白でない最初の文字の前および最後の文字の後の)全ての空白は経路名の一部であるとは見なされず、全て無視されるであろうことに留意されたい。
5.探索経路ディレクトリは、定義の中に現われた順序に探索されるであろう。最初に現われたファイルが選択されるであろう。
非常に大きな1組の試験パターンファイルの効率的な管理、取り扱いおよびローディングは、本発明の1つの実施形態のフレームワークのアーキテクチャに関する重要な側面である。階層的なパターンリストの概念は、扱いやすい概念化を提供し、エンドユーザがシステムを使いやすくする際の効率的な手段であると見なされる。
version-info global-pattern-list-definitions
version-info :
Version version- identifier;
global-pattern-list-definitions :
global-pattern-list-definition
global-pattern-list-definitions global-pattern-list-definition
global-pattern-list-definition :
global-pattern-list-declaration {list-block}
global-pattern-list-declaration :
GlobalPList pattern-list-name optionsopt
list-block :
list-entry
list-block list-entry
list-entry :
pattern-entry ;
pattern-list-entry ;
global-pattern-list-definition ;
local-pattern-list-definition
pattern-entry :
Pat pattern-name optionsopt
pattern-list-entry :
PList pattern-list-reference optionsopt
pattern-list-reference :
pattern-list-qualified-name
file-name ':' pattern-list-qualified-name
pattern-list-qualified-name :
pattern-list-name
pattern-list-qualified-name '.' pattern-list-name
local-pattern-list-definition :
local-pattern-list-declaration {list-block}
local-pattern-list-declaration :
LocalPList pattern-list-name optionsopt
options :
option
options option
option :
[option-definition]
option-definition :
option-name option-parametersopt
option-parameters:
option-parameter
option-parameters ',' option-parameter
1.version-identifier:集合[0−9]からの1つまたは複数の文字からなる文字列であり、最初の文字は数字でなければならない。
2.name:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、最初の文字は[a−zA−Z_]から選択されなければならない。
3.pattern-list-name:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、最初の文字は[a−zA−Z_]から選択されなければならない。
4.file-name:有効なウインドウズファイル名(ファイル名内に任意の空白が含まれる場合には、それは二重引用符で囲まれなければならない)。これは単純なファイル名でなければならない、すなわちディレクトリコンポーネントを持つべきでないことに留意されたい。pattern-list-referenceは、同じファイル内のパターンリストを内部参照することができるか、または別のファイル内のパターンリストを外部参照することができる。外部参照はファイル名によって修飾される必要がある。
5.oprion-name:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、最初の文字は[a−zA−Z_]から選択されなければならない。
6.option-parameter:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列。
パターンリストのための静的規則またはコンパイル時の規則は宣言および名前の分解を規定する。パターンリスト言語内の名前は、global-pattern-list-definitionおよびlocal-pattern-list-definitionによって宣言される。それらの名前は、pattern-list-referenceによって参照される。以下は、これらの宣言および参照を規定するいくつかの規則である。
1.global-pattern-list-definitionまたはlocal-pattern-list-definitionはパターンリストの名前を宣言する。pattern-list-referenceは、宣言されたパターンリストの名前を参照する。グローバルパターンリストの名前はグローバルに知られている。ローカルパターンリストの名前は、それらの宣言されたリストブロック内でのみ知られている。それらの名前は、修飾を用いることなく、そのリストブロック内で直に参照されることができる。さらに深くネストされた宣言では、ローカルパターンリストは、修飾された名前によって参照される必要があるであろう。
2.ローカルパターンリスト名は、包含パターンリストの範囲内で知られており、グローバルパターンリスト名はシステムの範囲内で知られている。たとえば、以下を参照されたい。
{
LocalPList L1
{
LocalPList L2
{
...
}
GlobalPList G2
{
...
}
PList L2; # OK. Name L2 is known in this scope
PList G2 # OK. Name G2 is global
}
PList L2; # Error. Name L2 is not known here.
PListL1.L2; # OK. Name L1 is known here. L2 is known by
# qualification.
PList G1.L1.L2; # OK. Qualification by G1 is not needed but
# is allowed.
PList G2; # OK. Name G2 is global
}
3.グローバルパターンリストはパターンリストファイルの最も外側のレベルにおいて定義されることができるか、または包含パターンリスト内でネストされるように定義されることができる。しかしながら、そのネスティングは単に便宜的なものである。それらは、ファイル内の最も外側のレベルにおいてグローバルパターンリストとして概念的に定義される。ネストされたグローバルパターンリストは、同じ名前の最も外側の(ネストされない)グローバルパターンリストと意味的に同等である。したがって、たとえば、以下を参照されたい。
{
GlobalPList G2
}
is semantically equivalent to:
GlobalPList G1
{
PList G2; # References G2
}
GlobalPList G2 ...
4.全てのグローバルパターンリストは固有に名前を付けられる。
{
# Note that this is as if declared at the outermost level
# with a reference to it right here.
GlobalPList G2
{
...
}
}
# This declaration will be an error in this or any other file,
# as the name G2 is already taken.
GlobalPList G2 # Error. Global name G2 is taken.
{
...
}
5.ローカルパターンリストは常に、ローカルパターンリストの名前の範囲も決定する、包含パターンリスト内でネストされた定義を有する。ローカルパターンリストは、その包含パターンリスト内で固有に名前を付けられる。ローカルパターンリストは構文的に、パターンリストファイル内の最も外側のレベルにおいて生じることを許されない。
{
LocalPList L
{
}
LocalPList L2
{
LocalPList L1 # OK. No local name L1 is declared
directly
# in the enclosing scope defined by L2.
{
}
PList Ll; #OK. Refers to Ll declared in L2
PListG1.L1; #OK. Refers to L1 declared in G1.
}
# Error. Redeclaring name L1 when the enclosing scope
# defined by G1 already has an Ll declared in it.
LocalPList L1;
{
}
}
6.各パターンリストファイルは、1つまたは複数のグローバルパターンリストのための定義を含む。これは構文から直に生じる。最も外側のレベルはglobal-pattern-list-definitionであり、それらのうちの少なくとも1つが存在しなければならない。
7.Pattern-nameは、Patキーワードに続く、1つのパターンへの参照である。それは、その名前が接尾語.patをパターン名に連結することによって得られるパターンファイル内に存在するパターンを参照する。そのファイルは、パターンのために定義された1つの探索経路に沿って得られることになる1つのファイルを示す。
8.pattern-list-referenceは、PListキーワードに続くパターンリストへの参照である。その参照は、オプションのファイル名、およびそれに続く、修飾されたパターンリスト名からなり、そのパターンリスト名は単に、ドットによって分離される名前のリストである。したがって、たとえば、以下は、ファイルfoo.plist内にあるグローバルパターンリストG1内にネストされるL1内にネストされるL2内にネストされるローカルパターンリストL3を参照するpattern-list-referenceとして用いることができる。その名前の最も左側の名前部分はG1である。
1.各名前部分は、その前にある接頭部に照らして宣言される名前に分解する。
2.ファイル修飾がある場合には、最も左側の名前部分は、名前を付けられたファイルにおいて宣言されるグローバルパターンリストに分解する。
3.ファイル修飾がない場合には、最も左側の名前は、包含範囲内のローカルパターンリストに分解することができ、それが失敗する場合には、次の包含範囲内のローカルパターンリストに分解することができ、それが包含グローバル範囲まで続けられる。
4.グローバル範囲がパターンリストファイル内の最も外側のレベルにおいて宣言されたかのように、グローバル範囲の意味を保持するために、最も近くにある包含グローバル範囲への範囲の探索を制限する必要がある。ネストされたグローバル範囲が最も外側のレベルにおいて(同等に)テキスト形式で宣言された場合には、名前分解探索は、その範囲を検査した後に終了するであろう。
5.その参照が以前のステップによって分解されていなかった場合には、最も左側の名前部分が、この同じファイル内のグローバルパターンリストに分解されることができる。
6.その参照が以前のステップによって分解されていなかった場合には、最も左側の名前部分が、.plist接尾部を最も左側の名前部分に追加することにより、そのファイル内で名前を付けられるグローバルパターンリストに分解されることができる。
7.その参照が以前のステップによって分解されていなかった場合には、その参照はエラー状態である。
{
PList G3; # OK. Refers to a pattern list later in this file.
PList G4; # OK. Refers to a pattern list in file "G4.plist
# OK. Refers to Gl in the file "my_plists.plist".
PList my_plists.plist:Gl;
# OK. Refers to a pattern list in file "my_plists.plist". The
# qualified name refers to a local pattern list named L2
declared
# in the scope of a local pattern list named L1 declared in
the
# scope of a global pattern list named G1.
PList my_plists.plist:Gl.Ll.L2;
LocalPList L1
{
LocalPList L2
{
}
}
PList L1; # OK. Refers to L1 declared in the
# enclosing scope of Gl
}
GlobalPlist G2
{
LocalPList L2
{
}
GlobalPList G3
{
LocalPList L3
{
}
PList L1; # Error. No L1 declared in this or any enclosing
# scope;
# Error. The name L2 is not declared in this scope. Also
# though L2 is declared in the enclosing scope, this scope
# is global, and so no further enclosing scope is examined.
#
# Contrast with reference to name L2 in LocalPList L3 below.
PList L2;
PListG1.L1; #OK. Refers to L1 in G1.
# Error. G3 is not really nested inside G1. Since G3
# is global, it is really declared at an outermost level,
# and so G1.G3 is meaningless.
PList G2.G3.L3;
}
LocalPList L3
{
# OK. Refers to G2.L2. The enclosing global scope is G2
# and the name L2 is declared in G2.
PList L2;
}
}
{
LocalPList L2
{
LocalPList L3
{
# Error. L2 runs L3 which runs L2.
# This is a recursive reference to L2
PList L2;
PList G2;
}
}
}
GlobalPList G2
{
# Error. G1.L2 runs L3 which runs G2 which runs GI.L2.
# This is a mutually recursive reference to G1.L2.
PList G1.L2;
}
図6は、本発明の一実施形態によるパターンコンパイラ602およびパターンローダ604を示す。パターンのユーザ定義の内容は、プレーンテキストファイルであるパターンソースファイル606において入手することができる。パターンコンパイラは、ソースファイルを、テスタハードウエア上にロードするのに適したモジュール特有のフォーマットにコンパイルする責任を担うであろう。この後者のファイルはパターンオブジェクトファイルと呼ばれるであろう。以下はその一般的な属性である。
1.パターンオブジェクトは、ユーザが作成することはできない。むしろ、ユーザは、他のパターンリストおよび/またはパターンのコレクションであるパターンリストを常に取り扱う。パターンリストオブジェクトは、必要に応じてユーザがアクセスできるようにしながら、その中に含まれるパターンオブジェクトを作成し、所有し、保持する。
2.パターンは1つの試験計画内で固有に名前を付けられる。すなわち、その試験計画内では、同じ名前を有する2つのパターンは存在することはできない。パターンの名前は、それを含むファイルの名前とは異なる。パターンファイル名は、1つのパターンを参照するためにパターンリストファイルにおいて用いられる名前であり、一方、そのパターンの実際の名前はパターンファイルにおいて定義される。
こうして、パターンコンパイラ602は、(用いられるベンダ特有のデジタルモジュールに照らして)特定のサイト構成をターゲットにする必要がある。この説明の残りの部分において、用語「モジュール」は、一例として、デジタルモジュールを指すために用いられるであろう。種々のベンダからのモジュール608をシステムに組み込むことができるようにするために、以下の手順が好ましい。
1.各モジュールベンダは、動的にロード可能なライブラリまたは個別の実行可能プログラムの形で、自ら所有するモジュール特有のパターンコンパイラ610を提供する責任を担うであろう。このコンパイラライブラリ/実行可能プログラムは、最低でも、compile()メソッドを提供するであろう。
2.パターンソースファイルは、それが含むパターンブロックのタイプ毎に2つの異なるタイプのセクションを収容するであろう。
a.全てのコンパイラがアクセス可能である情報を含む「共通」セクション(ただし、必ずしも用いられる必要はない)。
b.固有ベンダコードによってそれぞれ特定され、特定のベンダコンパイラによって使用可能な情報のための1つまたは複数のオプションのベンダ特有セクション。
3.ベンダのコンパイラは、パターンオブジェクトファイルを直に作成しないであろう。代わりに、テスタは、パターンコンパイラの一部であるオブジェクトファイルマネージャ(OFM)614によって管理されるパターンオブジェクト「metafile」612を提供するであろう。パターンコンパイラは、システムコントローラとして動作するコンピュータ上に、またはオフラインで、たとえばシステムコントローラが接続されるネットワーク上に配置することができる。これまで抽象語において参照された「パターンオブジェクトファイル」は、実際にはこのオブジェクトメタファイルである。オブジェクトメタファイルは、パターンソースファイルと同じ名前を付けられることになり、ソースファイル拡張子がオブジェクトファイル拡張子によって置き換えられる。OFMは、このファイルの読出しおよび書込みを行うためのアプリケーションプログラミングインターフェース(API)を提供するであろう。オブジェクトメタファイルは、以下のものを格納するための手段を有するであろう。
a.共通ヘッダ情報
b.対応するモジュール、およびそのモジュールためのパターンデータの場所を特定する情報を含む、モジュール特有のヘッダ情報
c.モジュールベンダの要求に応じて編成され、モジュールベンダによって解釈されることができる、モジュール特有のパターンデータ
オープンアーキテクチャ試験システムは、拡張性があり、かつ自由度の高いソリューションを提供する。本発明の一実施形態のオープンアーキテクチャ試験システムでは、単一の被試験デバイス(DUT)を種々のベンダからのテスタモジュールに接続することができる。この文脈における試験モジュールは、オープンアーキテクチャ試験システム内の1つの機能ユニットを指しており、ハードウエアおよびソフトウエア両方のコンポーネントを含むことができる。この実施形態の分散形で、構成変更可能なモジュール式オープンアーキテクチャ試験システムは、本明細書では、試験システムまたはシステムとも呼ばれる。
IVendorPatCompilerインターフェース1303は、2つの関数グループをサポートする。第1の関数グループは、パターンソースファイル内の非サイクライズパターンブロックのコンパイルと、モジュールデータによるパターンオブジェクトメタファイルの更新とをサポートする。第2の関数グループは、パターンオブジェクトメタファイルの共通ブロックセクションの更新をサポートする。
・compile():compile()メソッドは、パターンソースファイルをコンパイルするためにOFMによって呼び出される。OFMはPOFCyclizedModuleAgentオブジェクトをベンダコンパイラに渡す。このオブジェクトは、保護/アクセス制御を提供し、ベンダコンパイラがパターンソースファイルの共通セクションおよびモジュール特有セクションへの読出しアクセス、並びにベンダモジュール特有セクションへの書込みアクセスを共に許可されるようにする。ピンと資源との間のマッピングについての情報を提供するために、OFMResourcePinMapperインスタンスも引き数としてベンダコンパイラに渡される。
・needsPinNames():needsPinNames()メソッドは、compile()メソッドが呼び出されるときに、モジュールコンパイラが提供されることになるピン名のリストを必要とするか否かを問い合わせるために、OFMによって呼び出される。
・getSupportedResources():getSupportedResources()メソッドは、それがサポートする資源の名前についてモジュールコンパイラに問い合わせるために、OFMによって呼び出される。これは、ベンダコンパイラが資源レベル毎にパターンコンパイルプロセスのためのピンリストを必要とするときに、ピンのリストを作成するために用いられる。
・release():release()メソッドは、所望のIVendorPatCompilerオブジェクトが削除される前に、ベンダパターンコンパイラがクリーンアップ動作を実行できるようにするために、OFMによって呼び出される。
・getErrorList():getErrorList()メソッドは、OFCStatusオブジェクトのアレイを検索するために、OFMによって呼び出される。このアレイは、パターンコンパイラがパターンソースのコンパイル中に出合う場合があるエラーおよび警告の両方を含む。OFCStatusは、エラーについての情報を含むエンティティである。それには、特定のエラーコードを表す簡単な形の整数値を用いることができる。OFCStatusを、エラーが生じた場合のエラーコード、およびエラーの特定のインスタンスに関連するいくつかの特有のデータを含む情報を有するオブジェクトとすることが有用である。
・getPinRef():オブジェクトファイルマネージャがベンダパターンコンパイラにパターンソースファイルをパースし、OFMにピン参照設定ファイルの名前を提供することを要求する場合には、オブジェクトファイルマネージャはgetPinRef()メソッドを呼び出す。
・getSubReferences():オブジェクトファイルマネージャがベンダパターンコンパイラにパターンソースファイルをパースし、OFMにこのパターンソースファイルによって参照されるSubroutineのアレイを提供することを要求する場合には、オブジェクトファイルマネージャはgetSubReferences()メソッドを呼び出す。
・getSynchronizedNameArray():OFMがベンダパターンコンパイラにパターンソースファイルをパースし、OFMにこのパターンソースファイル内に存在する同期したブロックのアレイを提供することを要求する場合には、OFMはgetSynchronizedNameArray()メソッドを呼び出す。OFMフレームワークはこれらの名前(ピン記述ファイルにおいて宣言される)を用いて、これらのブロックの実行を調整する。
IVendorCyclizedPatCompilerインターフェース1304は、IVendorCompilerインターフェース1302から継承する。またそれは、モジュールベンダに2つの関数グループをサポートすることを要求する。第1の関数グループは、パターンソースファイル内のサイクライズパターンブロックのコンパイルをサポートし、パターンオブジェクトメタファイルを更新する。第2の関数グループは、パターンオブジェクトメタファイルの共通ブロックセクションの更新をサポートする。
・getALPGReferences():OFMがベンダパターンコンパイラにパターンソースファイルをパースし、OFMにパターンソースファイル内で参照されるALPGパターンのリストを提供することを要求する場合には、OFMはgetALPGReferences()メソッドを呼び出す。
・getDomainList():OFMがベンダパターンコンパイラにパターンソースファイルをパースし、OFMにパターンによって用いられるDomainのリストを提供することを要求する場合には、OFMはgetDomainList()メソッドを呼び出す。1つのパターンがデバイスの全てのドメインのために用いられない場合もあるので、このドメインのリストには、ピン記述ファイルにおいて指定されるドメインのリストのサブセットを用いることができることに留意されたい。
・getLabelList():OFMがベンダパターンコンパイラにパターンソースファイルをパースし、OFMに所与のドメインのためのパターンソースにおいて用いられるLabelのリストを提供することを要求する場合には、OFMはgetLabelList()メソッドを呼び出す。ラベルは1つのドメインにおいて或る範囲を有し、同じラベルを多数のドメインにおいて用いることができることに留意されたい。
・getLabelOpcodeOffset():OFMがベンダパターンコンパイラにパターンソースファイルをパースし、OFMに所与のドメインのラベルのためのOpcodeオフセットを提供することを要求する場合には、OFMはgetLabelOpcodeOffset()メソッドを呼び出す。
・getLabelOperandOffset():OFMがベンダパターンコンパイラにパターンソースファイルをパースし、OFMに所与のドメインのラベルのためのOperandオフセットを提供することを要求する場合には、OFMはgetLabelOperandOffset()メソッドを呼び出す。
・getPXRSetupFileRef():OFMがベンダパターンコンパイラにパターンソースファイルをパースし、OFMに、インポートされるPattern Cross Reference Setupファイルの名前を提供することを要求する場合には、OFMはgetPXRSetupFileRef()メソッドを呼び出す。
・getCyclizedPatternType():OFMがベンダパターンコンパイラにパターンソースファイルをパースし、OFMに指定されるサイクライズパターンブロックのタイプ(SQPG、ALPG、SUBR、SCAN、ESCAN)を提供することを要求する場合には、OFMはgetCyclizedPatternType()メソッドを呼び出す。
・getAMAX():OFMがベンダパターンコンパイラにソースファイルをパースし、OFMに、共通セクションに属する最大アドレスサイズデータを提供することを要求する場合には、OFMはgetAMAX()メソッドを呼び出す。
OFMModuleAgent1306は、POFCyclizedModuleAgentクラスによって拡張することができるベースクラスである。このクラスは、各モジュールのバイナリオペークデータにアクセスするために必要とされるメソッドグループのインプリメンテーションを提供する。OFMModuleAgentクラス1306は以下のメソッドを含む。
・flush():バッファされたバイナリデータがフラッシュされる必要がある場合には、ベンダコンパイラはflush()メソッドを呼び出す。
・position():1つのパターンブロック内のバイナリデータの現在位置を判定するために、ベンダコンパイラはposition()メソッドを呼び出す。
・preAllocate():ベンダコンパイラがOFMに、効率を改善するために所与のサイズのpattern‐object‐metafile内の1つのブロックを予め割り当てることを要求する場合には、ベンダコンパイラはpreAllocate()メソッドを呼び出す。バイナリブロックのために割り当てられるデフォルトサイズは0x4000である。
・getSize():ベンダコンパイラがOFMに、モジュールのためのバイナリデータのサイズを判定するためにメタファイルに問い合わせることを要求する場合には、ベンダコンパイラはgetSize()メソッドを呼び出す。
・read():ベンダコンパイラがOFMに、所与のサイズのデータを、そのモジュールのためのメタファイルからの所与のオフセットにおいて読み出すことを要求する場合には、ベンダコンパイラはread()メソッドを呼び出す。オフセットおよびサイズはそのモジュールのためのブロックに対するものであり、全メタファイルに対するものではない。
・verify():ベンダコンパイラがOFMに、所与のサイズの有効データが、そのモジュールのためのこのメタファイルの所与のオフセットにおいて存在することを検査することを要求する場合には、ベンダコンパイラはverify()メソッドを呼び出す。オフセットおよびサイズはそのモジュールのためのブロックに対するものであり、全メタファイルに対するものではない。
・write():ベンダコンパイラがOFMに、所与のサイズのデータを、所与のオフセットにおいてそのモジュールのためのメタファイルに書き込むことを要求する場合には、ベンダコンパイラはwrite()メソッドを呼び出す。オフセットおよびサイズはそのモジュールのためのブロックに対するものであり、全メタファイルに対するものではない。
・getSocketRef():ベンダコンパイラがOFMに、タイプSocketInfoのオブジェクトを作成することを要求する場合には、ベンダコンパイラはgetSocketRef()メソッドを呼び出す。このクラスは、ファイルをパースすることを必要とすることなく、コンパイラがシステムソケットファイルの設定にアクセスできるようにする。
・getSourceRef():ベンダコンパイラがOFMに、パターンソースファイルの名前を提供することを要求する場合には、ベンダコンパイラはgetSourceRef()メソッドを呼び出す。
・getSourceVersion():ベンダコンパイラがOFMに、パターンソースファイル言語バージョンを表すバージョンストリングを供給することを要求する場合には、ベンダコンパイラはgetSourceVersion()メソッドを呼び出す。
POFCyclizedModuleAgentクラス1308は、OFMが或るパターンをコンパイルし始めるときに、OFMによって開かれるPatternObjMetaFileクラス1314へのシャローハンドルである。それは、サイクライズテスタモジュールに特有の付加的な方法でOFMModuleAgentを拡張する。それは、ベンダパターンコンパイラが共通セクションおよびモジュールセクションの両方から読出しを行うことができるようにすることにより、ベンダパターンコンパイラがパターンオブジェクトメタファイルにアクセスするのを制限する。また、それはベンダコンパイラのモジュールセクションへの書込みアクセスも提供する。このインターフェースは、OFMがcompile()メソッドを呼び出すときに、パターンのコンパイル中にベンダパターンコンパイラによって用いられる。POFCyclizedModuleAgentクラス1308は以下のメソッドを含む。
・getALPGRefList():ベンダコンパイラがOFMに、このパターンソース内で参照されるALPGパターンのアレイを提供することを要求する場合には、ベンダコンパイラはgetALPGRefList()メソッドを呼び出す。
・getDomainList():ベンダコンパイラがOFMに、このパターンによって用いられるドメインのアレイを提供することを要求する場合には、ベンダコンパイラはgetDomainList()メソッドを呼び出す。1つのパターンが1つのデバイスの全てのドメインのために用いられない場合もあるので、このドメインのアレイは、ピン記述ファイルにおいて指定されるドメインのアレイのサブセットの場合もあることに留意されたい。
・getLabelList():ベンダコンパイラがOFMに、所与のドメインのためのパターンソースにおいて用いられるLabelのアレイを提供することを要求する場合には、ベンダコンパイラはgetLabelList()メソッドを呼び出す。ラベルはドメイン内の或る範囲を有し、同じラベルを多数のドメインにおいて用いることができることに留意されたい。
・getLabelOpcodeOffset():ベンダコンパイラがOFMに、所与のドメイン内のラベルのためのOpcodeオフセットを提供することを要求する場合には、ベンダコンパイラはgetLabelOpcodeOffset()メソッドを呼び出す。
・getLabelOperandOffset():ベンダコンパイラがOFMに、所与のドメイン内のラベルのためのOperandオフセットを提供することを要求する場合には、ベンダコンパイラはgetLabelOperandOffset()メソッドを呼び出す。
・getPXRSetupFileRef():ベンダコンパイラがOFMに、インポートされるPattern Cross Reference Setupファイルの名前を提供することを要求する場合には、ベンダコンパイラはgetPXRSetupFileRef()メソッドを呼び出す。
・getTimingRef():ベンダコンパイラがOFMに、ITimFileインターフェースをインプリメントするオブジェクトを提供することを要求する場合には、ベンダコンパイラはgetTimingRef()メソッドを呼び出す。このクラスは、このファイルをパースすることを必要とすることなく、コンパイラがシステム試験プログラム言語タイミングファイルの設定にアクセスできるようにする。
・getTimingMapRef():ベンダコンパイラがOFMに、ITMapFileインターフェースをインプリメントするオブジェクトを提供することを要求する場合には、ベンダコンパイラはgetTimingMapRef()メソッドを呼び出す。このクラスは、このファイルをパースすることを必要とすることなく、コンパイラが試験システムタイミングマップファイルの設定にアクセスできるようにする。
・getCyclizedPatternType():ベンダコンパイラがOFMに、指定されるパターンのタイプ(SQPG、ALPG、SUBR、SCAN、ESCAN)を提供することを要求する場合には、ベンダコンパイラはgetCyclizedPatternType()メソッドを呼び出す。
・getTMapResolutionChecksFlag():ベンダコンパイラは、試験システム変数TMAP_RESOLUTION_CHECKSがシステム環境構成ファイル内でセットされるか否かを問い合わせるために、getTMapResolutionChecksFlag()メソッドを呼び出す。
ベンダパターンコンパイラは、サイクライズパターンブロックをコンパイルするときに、サブルーチンパターンオブジェクトメタファイルおよびALPGパターンオブジェクトメタファイルのラベルおよびオフセットにアクセスする必要がある。このアクセスは、OFMLabelReaderクラス1310によって提供される。このクラスは、POFCyclizedModuleAgentクラスと同じように機能し、ドメイン毎にメタファイルのサブルーチンおよびALPGラベル/オフセットデータへの読出し専用アクセスを提供する。ベンダコンパイラは、参照されるサブルーチン/ALPGパターン毎にこのオブジェクトをインスタンス化し、そのタスクが完了するときに、そのオブジェクトを削除することができる。この実施形態では、これは、サイクライズデジタルモジュールパターンコンパイラに特有である。OFMLabelReaderクラス1310は以下のメソッドを含む。
・OFMLabelReader():ベンダコンパイラは、指定されたサブルーチンまたはALPGパターンオブジェクトメタファイルのためのOFMLabelReaderオブジェクトを構成するために、OFMLabelReader()メソッドを呼び出す。
・open():ベンダコンパイラは、OFMLabelReaderオブジェクトがファイルを開くために、open()メソッドを呼び出す。
・close():ベンダコンパイラは、OFMLabelReaderオブジェクトがファイルを閉じるために、close()メソッドを呼び出す。
・getLabelsList():ベンダコンパイラがOFMに、OFMLabelReaderインスタンスの所与のドメインのためのラベルのアレイをゲットすることを要求する場合には、ベンダコンパイラはgetLabelsList()メソッドを呼び出す。
・getLabelOpcodeOffset():ベンダコンパイラがOFMに、OFMLabelReaderインスタンスの所与のドメイン内のラベルのためのOpcodeオフセットを読み出すことを要求する場合には、ベンダコンパイラはgetLabelOpcodeOffset()メソッドを呼び出す。
・getLabelOperandOffset():ベンダコンパイラがOFMに、OFMLabelReaderインスタンスの所与のドメイン内のラベルのためのOperandオフセットを読み出すことを要求する場合には、ベンダコンパイラはgetLabelOperandOffset()メソッドを呼び出す。
・getSourceVersion():ベンダコンパイラがOFMに、このOFMLabelReaderインスタンスによって表されるサブルーチンパターンオブジェクトファイルを生成するために用いられるソースファイルのVersionを読み出すことを要求する場合には、ベンダコンパイラはgetSourceVersion()メソッドを呼び出す。
# Filename : main1. pat (produces object file main1.pobj)
#
Version 1.0 ;
#
---------------------------------------------------------------------------------------------------------
# Main Pattern definition:
#
---------------------------------------------------------------------------------------------------------
MainPattern
{
CommonSection
{
$ define ALL_H (H*)
$ define ALL_L (L*)
$ define ALL_0 (0*)
$ define ALL_1 (1*)
# ----------------------------------------------------------------------------------------
# Timing Specifications
# ----------------------------------------------------------------------------------------
Timing "productionTiming.tim:ProductionTiming";
# ----------------------------------------------------------------------------------------
# Pin Description file Specifications
# ----------------------------------------------------------------------------------------
PinDescription "Pin.pin";
# ----------------------------------------------------------------------------------------
# Setup file Specifications
# ----------------------------------------------------------------------------------------
Pxr "setup.pxr";
# ----------------------------------------------------------------------------------------
# Default Domain Cycles
# ----------------------------------------------------------------------------------------
Domain default
{
# ------------------------------------------------------------------------
# label:instruction {Vector/Waveform Data}
# ------------------------------------------------------------------------
NOP { V { DIR=1; APins=$ (ALL_1) ;
BPins=$ (ALL_H); OE_=0; } W {AllPins=wfs1; } }
NOP { V { APins=${ALL_0}; BPins=${ALL_L}; } }
NOP { V { APins=10000000; BPins=HLLLLLLL; } }
NOP { V { APins=${ALL_1}; BPins=${ALL_H}; } }
EXIT { V { APins=${ALL_0}; BPins=${ALL_L}; } }
}
}
}
# ---------------------------------------------------------------------------------------------------------
# FOO Pattern definition;
# ---------------------------------------------------------------------------------------------------------
Pattern FOO
{
CommonSection
{
NumberOfData = 192;
DataFormat
{
float, int;
}
Data
{
0.0E+00, 1;
5.21E+00, 0;
. . . . ;
}
}
VendorSection 1
{
Compression = ENABLED;
}
---------------------------------------------------------------------------------------------------------
# File twoCyclizedTypes.pat
#
---------------------------------------------------------------------------------------------------------
Version 1.0;
#
# This is the main cyclized pattern block
#
MainPattern
{
CommonSection
{
. . .
}
}
#
# This is the subroutine cyclized pattern block
#
SubrPattern
{
CommonSection
{
. . .
}
}
---------------------------------------------------------------------------------------------------------
# File threeTypes.pat
#
---------------------------------------------------------------------------------------------------------
Version 1.0;
#
# This is the main cyclized pattern block
#
MainPattern
{
CommonSection
{
. . .
}
}
# Thisis ,a pattern block of generic type FOO1
#
Pattern FOO1
{
CommonSection
{
. . .
}
}
#
# This is a pattern block of generic type FOO2
#
Pattern FOO2
{
CommonSection
{
. . .
}
}
要約情報および他の共通の構成情報がパターンオブジェクトメタファイルのメイン共通ヘッダに格納される。その要約は、パターンオブジェクト内の種々のパターンブロックにアクセスするために必要な情報からなる。以下の情報がメイン共通ヘッダに格納される。
1.パターンソースファイル名。
2.ソースファイルからのバージョン情報。
3.パターンコンパイル中に用いられることになる、Socketファイル、Utility Configuration FileおよびModule Configuration Fileへの参照。
4.パターンオブジェクトメタファイル内に収容されるパターンブロックのタイプのコレクション。
1.ソースファイルにおいて宣言されるようなパターンのタイプ。
2.パターンソースファイルの共通セクション内のサブルーチン参照のマップ。
3.このタイプのパターンブロックのために必要とされる場合には、Pin設定ファイルへの参照。
4.このパターンにおいて定義される同期したブロックのマップ。これは、システムピン記述ファイル内のkeyword Synchronizedで定義される名前に対応する。
1.ソースファイルにおいて宣言されるようなパターンのタイプ。
2.パターンソースファイルの共通セクション内のサブルーチン参照のマップ。
3.このパターンにおいて定義されるドメインブロックのマップ。これは、システムピン記述ファイル内のkeyword Domainで定義される名前に対応する。これらの名前は、非サイクライズパターンのためのSynchronizedブロックと同じようにしてOFMフレームワークによって処理される。
4.パターンソースファイルの共通セクションにおいて用いられる波形およびタイミング名のリスト。
5.パターンソースファイルの共通セクション内のベクトルオペコードおよびオペランドアドレスへのラベル参照のマップ。
6.パターンソースファイルにおいて指定されるPin、Timing、Timing Mapおよび他の設定への参照。
一実施形態では、試験システムパターンコンパイラは、特定のサイト構成(用いられるベンダ特有のデジタルモジュールに照らして)をターゲットにする。種々のベンダからのモジュールの試験システムへの組み込みをサポートするために、以下の手法がインプリメントされる。
1.ベンダコンパイラはパターンオブジェクトファイルを直に作成しない。代わりに、試験システムは、OFMによって管理されるパターンオブジェクトメタファイルを提供する。用語「パターンオブジェクトメタファイル」は、オブジェクトメタファイルとも呼ばれる。OFMフレームワークは、共通パターンデータのメタファイルへの格納を管理するが、種々のモジュールベンダからのプラグインに基づいて、ベンダ特有のデータのコンパイルを呼び出す。パターンコンパイルプロセスのためのモデルは、図6に示されるように視覚化することができる。パターンオブジェクトメタファイルは、パターンソースファイルと同じ名前を有するが、ソースファイル拡張子がパターンオブジェクトファイル拡張子によって置き換えられる。OFMは、これらのファイルに対する読出しおよび書込みのためのアプリケーションプログラミングインターフェース(API)を提供する。パターンオブジェクトメタファイルは、以下のものを格納するための手段を有する。
a.共通ヘッダ情報
b.モジュール特有ヘッダ情報
c.モジュールベンダによって編成され、モジュールベンダによって解釈されることができるモジュール特有パターンデータ
2.各モジュールベンダは、動的にロード可能なライブラリの形で、自ら所有するパターンコンパイラを提供する責任がある。このライブラリは、IVendorPatCompilerまたはIVendorCyclizedPatCompiler、あるいはその両方のような、OFMフレームワークによって定義される標準インターフェースの完全なインプリメンテーションを検索する能力を与える。IVendorPatCompilerインターフェースを提供する機能は以下のライブラリによって与えられる。
IVendorPatCompiler*&pCompiler,
const OFCString& type);
IVendorCyclizedPatCompiler*& pCompiler);
3.OFMフレームワークは、パターンコンパイルのタスクをサポートするために必要とされる、ベンダコンパイラが共通データにアクセスできるようにするための1組のインターフェースを含む。これは、DUTピン、DUTソケットおよびDUTタイミングの記述をカプセル化するランタイムオブジェクトへのアクセスを含む。またそれは、パターンサブルーチンのような、他の参照されるパターンメタファイルにアクセスするための能力も含む。
4.OFMフレームワークは、モジュールベンダのコンパイラがモジュール特有のヘッダ情報およびデータをパターンオブジェクトメタファイルに書き込むことができるようにするための1組のインターフェースも含む。オブジェクトメタファイルのこのレイアウトによって、ターゲットとされるサイト内の2つ以上のモジュールが同じ場合であっても、パターンデータがモジュール毎に編成されるようになることに留意されたい。
1.OFMフレームワークはOFMManagerのインスタンスをインスタンス化し、SYSTEMパターンコンパイラのコマンドラインにおいて指定される1つまたは複数のパターンのコンパイルを管理する。
2.OFMManagerは初期化されるようになる。これは、システムユーティリティズ構成ファイルを用いて、指定された(ベンダ毎およびモジュール毎)全てのパターンコンパイラ・ダイナミックリンクライブラリ(DLL)を登録することを含む。システムユーティリティズ構成ファイルは、或る特定のシステム構成のユーティリティ設定を指定する。このファイルは、パターンコンパイラDLL(複数の場合もあり)の名前(複数の場合もあり)と、ベンダのモジュール(複数の場合もあり)毎に登録される共有されるライブラリとを含む。この情報は、種々のベンダコンパイラを呼び出して、パターンソースファイルの対応するセクションをコンパイルするために、OFMフレームワークによって用いられる。登録の一部として、それがサポートするパターンブロックのタイプを見つけ出すために、各DLLが問い合わせを受ける。
3.その後、OFMManagerはPatternObjectMetaFileクラスを用いて、全パターンソースファイルに共通のデータをセーブする。このステップの一部として、フレームワークはパターンソースファイルを読み出し、このパターンソースファイルを含むパターンブロックのタイプを検索する。見つけられたパターンブロックの種々のタイプが共通セクションに格納される。フレームワークがパターンブロックの2つの広義のタイプ、CyclizedとRegular(非Cyclized)とを区別することに留意されたい。通常のパターンブロックは、それらのタイプを定義する任意の名前を有することができる。OFMフレームワークは、これらの名前を予め通知される必要はないので、システムはオープンアーキテクチャを有することができる。
4.コンパイルされるパターンソース内に含まれるパターンブロックのタイプ毎に、その後、OFMManagerはベンダパターンコンパイラDLLを問い合わせて、IVendorPatCompilerインターフェースをインプリメントするオブジェクトをインスタンス化する。サイクライズパターンブロックがコンパイルされている場合、OFMManagerはDLLを問い合わせて、代わりに、ICyclizedVendorPatCompilerインターフェース(それはIVendorCompilerインターフェースのサブタイプである)をインプリメントするオブジェクトをインスタンス化する。
5.上記のステップ4において得られたIVendorCompiler派生オブジェクト毎に、OFMManagerはgetSupportedResources()メソッドをコールし、このモジュールによってサポートされるシステム資源のリストをゲットする。システム資源のリストを用いて(SocketファイルおよびシステムModule Configuration File(MCF)とともに)、コンパイルされる必要がある資源のコレクションが作成される。パターンコンパイルのためにベンダコンパイラがそのようなリストを提供される必要がある場合には、同じくシステム資源のリストを用いて、被試験デバイス(DUT)のためのピンのリストが作成される。コンパイルされているパターンがピン向きには記述されず、それゆえコンパイラがピンリストを必要としない場合もあるので、OFMフレームワークはこれを強制しないことに留意されたい。その場合には、IVendorPatCompilerインターフェースが、needsPinNames()メソッドをサポートし、OFMManagerが、特定のベンダコンパイラがDUTピンのリストを必要とするか否かを見いだすことができるようにする。
6.OFMManagerは、コンパイルされているパターンブロックのタイプをサポートする各IVendorPatCompilerインターフェースのcompile()メソッドを呼び出す。それは、このメソッドに以下の引き数を与える。
a.パターンソースにおいて参照される資源タイプのリスト、および(オプションで)そのような各資源タイプのピン名のリスト。ピンが必要とされない場合には、ピンのリストは空である。
b.ベンダパターンコンパイラが、パターンオブジェクトメタファイルに読出しアクセスおよび書込みアクセスできるようにするためのOFMModuleAgent派生オブジェクト(またはサイクライズパターンの場合のPOFCyclizedModuleAgent)のインスタンス。
7.パターンソースの各ブロックをコンパイルした後に、OFMManagerは、最初に用いられたコンパイラに、共通セクションデータを問い合わせて、その後、それを用いて、パターンオブジェクトメタファイルが更新される。
8.その後、OFMManagerは各ベンダパターンコンパイラに、出合ったエラー/警告のリストを問い合わせる。このエラー/警告のリストは一纏めにされて、ユーザに提供される。
9.コンパイルされるパターンソースファイル毎にステップ3〜8が繰り返されて、対応するパターンオブジェクトメタファイルが生成される。
10.最後に、OFMManagerは、このステップシーケンスのステップ2において登録された全てのベンダパターンコンパイラを公開する。これにより、種々のベンダコンパイラが、コンパイルプロセスが終了する前に、クリーンアップできるようになる。
本発明の一実施形態の試験システムでは、各モジュールベンダが、自ら所有する特有のパターンローディング機構を提供する責任を担う。先に説明されたように、パターンオブジェクトメタファイルは、種々のセクションにモジュール特有データを格納する。ベンダインプリメンテーションは、パターンオブジェクトメタファイルから関連するセクションにアクセスするために、システムアプリケーションプログラミングインターフェース(API)を用いる。さらにOFMフレームワークは、各モジュールのロードパターンメソッドをコールし、モジュール特有のデータをメタファイルの適当なセクションからモジュールにロードする責任を担う。
1.PatternMgrオブジェクトが、パターン実行シーケンスを含むパターンのコレクションをロードするための責任を担う。このオブジェクトは、ロードされるパターン毎にPatternLoaderインスタンスをインスタンス化する。
2.PatternLoaderは、ロードされるパターンのためのPatternObjMetaFileクラスのインスタンスをインスタンス化し、それに、パターンオブジェクトメタファイル内のパターンブロックのタイプのリストを問い合わせる。PatternLoaderはさらに、PatternObjMetaFileクラスに、各パターンブロックタイプ内に含まれるモジュールのタイプを問い合わせる。
3.その後、PatternLoaderは、ベンダによって提供される対応する派生IModuleクラスのloadPattern()メソッドを呼び出し、ブロックおよびモジュールのタイプ毎にパターンデータをロードする。
4.対応するIModuleインターフェースのloadPattern()メソッドは、PatternLoaderクラスに渡された参照を用いる。その後、それはPatternLoaderクラスのload()メソッドを用いて、PatternObjMetaFileクラスにアクセスし、それからモジュール特有のデータを読み出し、それによりパターンのローディングを達成する。
各コンパイラベンダは複数のパターンのための種々のプレーンテキストフォーマットを完全に指定することができ、それは実際には大部分の場合に必要になるであろう。しかしながら、一般的に、全てのベクトルのために複数のモジュールにわたる統一性および同一の意味が必要になる、サイクルベースの試験環境の場合、パターンファイルのための、共有され、一般化された構文が望ましいだけでなく、必要になるであろう。この共有された構文は、パターンソースファイル内の「共通」セクションのために指定されることになる構文である。実際には、大抵の場合に、「共通」セクションはパターンファイルにおいて必要とされる唯一のセクション(ヘッダ情報を除く)であり、全てのベンダのコンパイラはそのセクションにおいてのみ正常に動作することが想定される。このセクションは、全てのコンパイラが解釈できるべきである、パターンファイルのための規則を表す。パターンファイルは以下のように編成されるであろう。
version_info pattern_definitions
version_info :
Version_version-identifier ';'
pattern_definitions :
pattern_definition
pattern_definitions pattern_definition
pattern_definition :
main_header '{' main_section '}'
main_header '{' main_section vendor-sections '}'
subr_header '{' subr_section '}'
subr_header '{' subr_section vendor_sections '}'
main_header :
MainPattern identifier
main_section :
CommonSection '{'common_contents
main_section_domains '}'
common_contents :
timing_reference timing_map_reference
timing_reference :
Timing file-name ';'
timing_map_reference
TimingMap file-name ';'
main_section_domains :
main_section_domains main_section_domain
main_section_domain
main_section_domain :
Domain domain_name '{'main_section_contents'}'
domain_name :
identifier
main_section_contents :
main_section_contents main_section_content
main_section_content
main_section_content :
label_spec main_pattern_spec
main_pattern_spec
label_spec :
label ':'
label :
identifier
main_pattern_spec :
main_operation capture_mask_flag '{'
vectors_and_waveforms '}'
main_operation : /* empty */
common_operation
jal_op
jsr_op
jsrc_op
jsc_op
exit_op
common_operation :
idxi_op
idxin_op
jec_op
jech_op
jff_op
jffi_op
jni_op
ldin_op
nop_op
pause_op
sndc_op
sndt_op
stfi_op
sti_op
stps_op
wait_op
/*
* Instructions specific to the MAIN Patterns
*/
jsr_op :
JSR identifier
jsrc_op :
JSRC identifier
jsc_op :
JSC identifier
jal_op: :
JAL identifier
exit_op :
EXIT
/*
* Instructions common to both MAIN and SUBR Patterns
*/
idxi_op :
IDXI 24-bit number
idxin_op :
IDXIn index-register
jec_op :
JEC identifier
jech_op :
JECH identifier
jff_op :
JFF identifier
jffi_op :
JFFI identifier
jni_op :
JNI identifier
ldin_op :
LDIN index-register
nop_op :
NOP
pause_op :
PAUSE
sndc_op :
SNDC 8-bit number
sndt_op :
SNDT 8-bit number
stfi_op :
STFI 24-bit number
sti_op :
STI 24-bit number
stps_op :
STPS
wait_op :
WAIT
capture_mask_flag :/* empty */
capture_mask_flag CTV
capture_mask_flag MTV
capture_mask_flag MATCH
vectors_and_waveforms : /* empty */
vectors_and_waveforms vector
vectors_and_waveforms waveform
vector :
vector_declaration '{' vector_data '}'
vector_declaration :
Vector
V
vector_data :
vector_datum
vector_data vector_datum
vector_datum :
pin_name '=' vector_value ';'
pin_name '=' identifier ';'
waveform :
waveform_declaration '{' waveform_data '}'
waveform_declaration :
Waveform
W
waveform_data :
waveform_datum
waveform_data waveform_datum
waveform_datum :
waveform-table-pin-group-name '=' identifier ';'
pin_name :
identifier
vendor_sections :
vendor_sections_vendor_section {}
vendor_section {}
vendor_section :
VendorSection '{' vendor_section_contents '}'
subr_header :
SubrPattern
subr_section :
CommonSection '{' common_contents
source_selection_table subr_section_domains '}'
CommonSection '{' common_contents
subr_section_domains '}'
subr_section_domains :
subr_section_domains subr_section_domain
subr_section_domain
subr_section_domain :
Domain domain_name '{' subr_section_contents '}'
source_selection_table :
SourceSelectionTable '{' source_selector_definitions '}'
source_selector_definitions :
source_selector_definitions source_selector_definition
source_selector_definition
source_selector_definition :
SourceSelector source_selector_name '{'
source_mappings '}'
source_selector_name :
identifier
source_mappings :
source_mappings source_mapping
source_mapping
source_mapping
pin_name '=' source ';'
source :
MAIN
INVERT_MAIN
SUBR
INVERT_SUBR
subr_section_contents :
subr_section_contents subr_section_content
subr_section_content
subr_section_content :
label_spec_subr_pattern_spec
subr_pattern_spec
subr_pattern_spec :
subr_operation capture_mask_flag '{'
vectors_and_waveforms '}'
subr_operation : /* empty */
common_operation
rtn_op
stss_op
/*
* Instructions specific to the SUBR Patterns
*/
rtn_op :
RTN
stss_op :
STSS identifier
1.version-identifier:集合[0−9]からの1つまたは複数の文字からなる文字列であり、最初の文字は数字でなければならない。
2.identifier:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、最初の文字は[a−zA−Z_]から選択されなければならない。
3.vendor-section-contents:ベンダ特有のコンパイラに対してのみ意味のある任意のテキスト。
4.file-name:有効なウインドウズファイル名(ファイル名内に任意の空白が含まれる場合には、それは二重引用符で囲まれなければならない)。これは単純なファイル名でなければならない、すなわちディレクトリコンポーネントを持つべきでないことに留意されたい。
5.waveform-table-pin-group-name:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、最初の文字は[a−zA−Z_]から選択されなければならない。この変数は他の場所で宣言され、ピンのグループに共通である波形テーブルの名前を保持する。
6.24bit number:最大16777215までの有効な10進数。
7.8bit number:最大256までの有効な10進数。
8.index-register:有効な10進数。1つのモジュールの実施形態では、これは値[1−8]を有することができる。
9.vector:これは、STIL内のVectorステートメントに類似である。これは、信号名および信号グループ名を参照し、コンパイラがPin Descriptionファイルにアクセスできるようにするために必要になることに留意されたい。
10.waveform-time-reference:集合[a−zA−Z_0−9]からの1つまたは複数の文字からなる文字列であり、最初の文字は[a−zA−Z_]から選択されなければならない。
1.pattern-name項目は、パターンファイルがそのためのデータを含むPatternオブジェクトに関連付けられることになる名前を指定する。これは、対応するパターンオブジェクトメタファイル内のヘッダに引き継がれるようになる。
2.waveform-time-referenceは、Timingファイル内の、パターンファイルに対して外部から定義されることになる特定のwaveform-and-timing定義のための名前である。パターンファイルにおいてwaveform-time-referenceを指定することにより、別のwaveform-time-referenceが現われるまで、(waveform-and-timingのための)特定の名前が全ての後続のベクトルに結合されるであろう。
3.サブルーチンコールのためのオペランド(たとえば、JSRおよびJSRC)は、同じパターンファイルにおいて以前に現われたpattern-specラベル、または外部から定義されたサブルーチンパターン内のpattern-specラベルであるストリングである。このオペランドは最終的には、サブルーチンをロード/処理するために分解されるであろう。サブルーチンコールオペランドのためのラベルは、システムにわたって固有である必要がある。
MAIN Patternソースファイルの簡単な例が、その使用法を例示するのを助けるであろう。
# Filename : good1.pat
#
Version 1.0 ;
# -------------------------------------------------------------
# Main Pattern definition:
# -------------------------------------------------------------
MainPattern good1
{
CommonSection
{
MacroDef defaultDataVal (XXXXXXXX)
MacroDef nopInstr (NOP)
MacroDef label1 (Label1:)
MacroDef jniInst (JNI)
# -------------------------------------------------------------
# Timing Specifications
# -------------------------------------------------------------
Timing "productionTiming.tim";
TimingMap "productionTimingOpenSTARMap.tmap";
# -------------------------------------------------------------
# Default Domain Cycles
# -------------------------------------------------------------
Domain default
{
# -------------------------------------------------------------
# label: instruction {Vector/Waveform Data}
# -------------------------------------------------------------
NOP { V { DATA = $defaultDataVal; CLK = 1;} W
{DATA = wfs1; CLK = wfs1; } }
JAL myAPG { V { DATA = 00000000; } }
JSC mySCAN { V { DATA = 10101010; } }
JSRC mySubroutine { V { DATA = 01010101; } }
JSR myAPG { V { DATA = 00110011; } }
STI 100 { }
labZero: NOP { V { DATA = 00000011; } }
JNI labZero { V { DATA = 11111100; } }
IDXI 3000 { V { DATA = 10101010; } }
IDXIn 3 { V { DATA = 01010101; } }
$label1 NOP { V { DATA = $defaultDataVal; } }
IDXI 2000 { V { DATA = 10101010; } }
NOP { }
EXIT { V { DATA =LLHHLLHH; } }
}
}
}
# Subroutine Pattern mySubrPat1 definition:
# -------------------------------------------------------------
SubrPattern mySubrPat1
{
CommonSection
{
# -------------------------------------------------------------
# Timing Specifications
# -------------------------------------------------------------
Timing "productionTiming.tim";
TimingMap "productionTimingOpenSTARMap.tmap";
# -------------------------------------------------------------
# Source Selection Specifications
# -------------------------------------------------------------
SourceSelectionTable
{
SourceSelectorSrcSelDef
{
DATA=SUBR; CLK=SUBR; DATA=SUBR;
}
SourceSelector SrcSelOne
{
DATA=MAIN; CLK=MAIN;
}
}
# -------------------------------------------------------------
# Default Domain Cycles
# -------------------------------------------------------------
Domain default
{
# -------------------------------------------------------------
# label : instruction { Vector and Waveform Data setups }
# -------------------------------------------------------------
STI 100 { Vector { DATA =00000000; } }
IDXI 3000 { Vector { DATA = 00001111; } }
IDXIn 3 { Vector { DATA = 00110011; } }
$label1 NOP { Vector { DATA =LLHHLLHH; } }
NOP { Vector { DATA =LLXXXXXX; } }
NOP { Vector { DATA =LLHHXXXX; } }
JNI Label1 { Vector { DATA =LLHHLLHH; } }
STSS SrcSelOne { Vector { DATA = LHLHLHLH; } }
RTN { Vector { DATA = LLXXXXXX; } }
}
}
}
1.パターンソースファイル名
2.ソースファイルにおいて宣言されるようなパターンのタイプ
3.ソースファイルからのバージョン情報
4.パターンソースファイルの共通セクションにおいて用いられる全てのwaveform-and-timing名のリスト
5.パターンソースファイルの共通セクション内の(相対的な)ベクトルアドレスへの全てのサブルーチン参照のマップ
6.パターンソースファイルの共通セクション内の(相対的な)ベクトルアドレスへの全てのラベル参照のマップ
7.一般的なブックキーピング情報:ベクトルカウント、命令カウントなど。
プレーンテキストパターンソースファイル:.pat
コンパイルされたパターンオブジェクトメタファイル:.pobj
パターンリストファイル:.plst
Tester_PATLIST_PATH:パターンリストファイルの場合。
Tester_PATSRC_PATH:パターンソースファイル(オプション)の場合。
Tester_PATOBJ_PATH:パターンオブジェクトメタファイルの場合。
パターンオブジェクトはユーザによって作成されない。むしろ、ユーザは常に、他のパターンリストおよび/またはパターンのコレクションであるパターンリストオブジェクトを処理する。ユーザがアクセスできるようにしながら、パターンリストオブジェクトは、その中に含まれるパターンオブジェクトを作成し、所有し、保持する。ユーザの試験プログラム内のパターンリストオブジェクトは、パターンリストの実際の定義を含む、ディスク上のパターンリストファイルに関連する。パターンリストの定義は、そのパターンリストのための明示的な名前を提供し、ファイル名連想を通して、パターンの順序付きリストおよび/または他のパターンリストを特定する。このセクションは、パターンリストおよびパターンのソフトウエアがテスタフレームワークにおいて如何に操作されるかを理解するための前置きとして、それらのソフトウエア表現を記述する。
試験システム内の1つの試験サイト(および拡大解釈して、その中にある試験計画)は、多数のトップレベルパターンリストに関連付けることができる。しかしながら、複数の試験計画に対して、常に1つの実行文脈だけが存在する。トップレベルパターンリストは、それによって(階層的に)参照されるパターンのための実行シーケンスを定義するので、アクティブな実行文脈は、現在選択されているトップレベルパターンリストに対応するものである。これは、ある時点において、1つのパターンリスト内に含まれるパターンだけがハードウエア上にロードされることができることを意味しないことに留意されたい。むしろ、1つの実行シーケンスを実行可能にするためにハードウエア上にロードされる必要がある1組のパターンは常に、現在ロードされている全てのパターンのサブセットでなければならない。
直観的には、トップレベルパターンリストを表現するための1つの方法は、ある種の木データ構造によると考えられる。図7は、本発明の順序付きのパターン木の1つの実施形態を示しており、パターンリストAがトップレベルパターンリストであると仮定する。
以下の情報がパターン木の全てのノードにおいて格納されるであろう。
1.そのノードに関連するエンティティ(パターンリストまたはパターン)の名前。
2.定義ソースのタイプ。葉(パターンノード)の場合、これは常にパターンファイルになるであろう。中間(パターンリスト)ノードの場合、これは「トップレベルファイル」(トップレベルパターンリスト定義用)、または「エンベデッド・イン・ファイル」(ネストされたパターンリスト定義用)のいずれかにすることができる。
3.そのノードが関連するディスク上のファイルの最後の変更タイムスタンプ。
1.そのノードによって表されるパターンリストオブジェクト上に(もしあるなら)セットされる実行オプション、すなわちそのオブジェクトオプション。
2.その子毎に、そのノードによって表されるパターンリスト定義内の各子参照上に(もしあるなら)セットされる実行オプション、すなわち参照オプション。
1.実行木として編成される、外部および内部両方のパターンによってコールされるサブルーチンへの全ての(おそらく遷移的な)参照。
パターンリストの内容に対してなされる変更は概念的には、そのパターンリストへの全ての参照に影響を及ぼす。必要に応じてパターンオブジェクトおよびパターンリストオブジェクトに適用される以下の規則が、そのような変更を管理するために用いられるであろう。
1.ディスク上のパターンリストファイルの内容に対してなされる変更は、そのパターンリスト上(またはそれを参照する任意の他のパターンリスト上)で実行されるload()コマンドにおいてのみ、試験システムの中に伝えられるであろう。言い換えると、ソフトウエア内のパターンリスト階層は常に、ハードウエア上に現在ロードされているパターンリストを反映するであろう。
2.ユーザは、パターンリストをそれらのディスクファイルソースと同期させるために、ロード時間中に行われる検査を無効にするモードをセットすることができるであろう。これにより、生成モードの動作を、より迅速かつ安全にすることができるであろう。
試験サイト(および拡大解釈して、そのサイトのための試験計画)に関連するトップレベルパターンリストは公開(グローバル)範囲を有する。そのシステムは、ユーザが個々のノードおよび副木にアクセスできるように、トップレベルパターンリストを表すパターン木をナビゲートするためのAPIを提供する。
パターンリストの静的な規則は先に説明された。パターンリストの動的な(実行)規則の記述がここで提示される。
1.トップレベルパターンリストは、複数のパターンのための1つのPattern Execution Sequenceを定義する。それは、そのような実行シーケンスをそのトップレベルパターンリストに対応するパターン木から如何に導出することができるかを記述する。たとえば、図7に示されるパターン木Aに対応するパターン実行シーケンスは{q、s、t、q、r、q、u、u、v}である。Pattern Execution Sequenceは概念的には、そのパターン木を通して記述される実行シーケンスを反映する順序木である。フレームワークは、パターン木ノードと、Pattern Execution Sequence内の対応するエントリとの間の任意の必要なナビゲーションリンクを確立し、保持する。
2.Pattern Setは、そのパターン木内の全ての固有のパターン(サブルーチンを含む)のリストに過ぎない。したがって、これは、ハードウエア上にロードされるべきである個々のパターンを決定するために用いられることになるリストである。フレームワークは、パターン木ノードと、Pattern Set内の対応するエントリとの間の任意の必要なナビゲーションリンクを確立し、保持する。図7のパターン木のためのPattern Setは(q、s、t、r、u、v)である(パターンリストA内のパターンはいずれも如何なるサブルーチンコールも含まないものと仮定される)。
上記のように、各パターンリスト宣言(その定義に先行する)またはパターンリスト/パターン参照エントリの後に、多数の実行オプションが続くことができる。パターンリスト実行オプションは、パターンリストのランタイム実行を変更する。さらに拡張できるようにするために、これらのオプションのための名前(およびオプション値)がパターンコンパイラのパターンリストファイルパーサによって単にストリングとして処理され、必要に応じて特定のバージョンによって解釈されることになる。テスタは、以下に記述される、1組のオプションおよびそれらの解釈を規定する。しかしながら、ベンダはその1組のオプションを拡張することができる。オプション構文をパース時に妥当性検査できるようにするために、パターンリストファイルパーサは、ある特定のバージョンのための情報ファイルを読み出すことができる。そのような情報ファイルを用いて、ある特定のバージョンがそもそも実行オプションの指定をサポートするか否かを指定することもできる。
1.パターンリスト定義上(すなわち、ファイル内の「local-pattern-list-declaration、global-pattern-list-declaration」生成物内)でセットされるIntrinsicオプションは、事実上、ユーザの試験プログラム内の対応するパターンリストオブジェクト上での直接的なオプション設定である。したがって、これは、そのパターンリストオブジェクトへの全ての参照に当てはまり、オブジェクトオプションと呼ばれる。
2.パターンリスト/パターンへの参照上(すなわち、ファイル内の「pattern-entry」および「pattern-list-entry」生成物内)でセットされるReferentialオプションは、オプションの範囲を、その階層内の特有の経路、すなわち木のルートから考慮中の参照に導く経路(パターンリスト/パターンの宣言順序によって確立される)に制限する。したがって、これらは、特定のオブジェクト参照上のオプションであり(且つ、オブジェクトそのものにおけるオプションではない)、参照オプションと呼ばれる。
3.コレクション階層(パターンリスト/パターンの宣言順序によって確立される)内の任意のリスト/パターンのための有効オプション設定は、木のルートからそのリスト/パターンまでの経路に沿って出合うオブジェクトオプションおよび参照オプションの組み合わせである。その特定の組み合わせの仕組み(たとえば、集合の結び、集合の交わり、または任意の他の競合解消アルゴリズム)は、オプションそのもののプロパティである。
・それがIntrinsicである(すなわち、GlobalまたはLocalキーワードを伴う定義に関連する)か、Referentialである(すなわち、PatまたはPListキーワードを伴う参照に関連する)か。Intrinsicオプションは、定義の場所および全ての参照において当てはまるが、Referentialオプションは、それらが関連する参照においてのみ当てはまる。
・さらに、オプションが全ての静的に(構文的に)または動的に(参照されることにより意味的に)ネストされたパターンまたはパターンリストに再帰的に当てはまるものと仮定される場合には、そのオプションは「子によって継承される」と言われる。
1.Mask<pin/pin group>
GlobalPList、LocalPListに適用されるときにIntrinsic。
PList、Patに適用されるときにReferential。
子によって継承される。
このパターンリストは常に、使用禁止の指示されたピンまたはピングループによって参照されるピンの比較回路を有するであろう。多くの場合に、ハードウエアの制限の結果として、バースト不連続部が生じることになる。
2.BurstOff
GlobalPList、LocalPListに適用されるときにIntrinsic。
PList、Patに適用されるときにReferential。
子によって継承されない。
このパターンリストは常に、非バーストモードにおいて実行されるであろう。このオプションは子によって継承されないが、BurstOffDeepオプション(下記)は子によって継承される。
3.BurstOffDeep
GlobalPList、LocalPListに適用されるときにIntrinsic。
PList、Patに適用されるときにReferential。
子によって継承される。
このパターンリストは常に、非バーストモードにおいて実行されるであろう。このオプションは子によって継承されるが、BurstOffオプション(上記)は子によって継承されない。BurstOffDeepオプションは子によって消されないことに留意されたい。
4.PreBurst<pattern>
GlobalPList、LocalPListに適用されるときにIntrinsic。
指定されたバーストオプションを有しない子ノードによってのみ継承される。
指示されるパターンは、このパターンリスト内の全てのバーストに前置されるべきである。PreBurstパターンは、このパターンリストノードに起因して開始される全てのバーストの直前に生じる。そのオプションは、同じパターンであるPreBurstオプションを有するバースト内に既にあるときには適用されない。
5.PostBurst<pattern>
GlobalPList、LocalPListに適用されるときにIntrinsic。
指定されたバーストオプションを有しない子ノードによってのみ継承される。
指示されるパターンは、このパターンリスト内の全てのバーストに後置されるべきである。PostBurstパターンは、このパターンリストノードに起因して開始される全てのバーストの直後に生じる。そのオプションは、同じパターンであるPostBurstオプションを有するバースト内に既にあるときには適用されない。
6.PrePattern<pattern>
GlobalPList、LocalPListに適用されるときにIntrinsic。
子によって継承されない。
指示されるパターンは、このパターンリスト内の全てのパターンに前置されるべきである。
7.PostPattern<pattern>
GlobalPList、LocalPListに適用されるときにIntrinsic。
子によって継承されない。
指示されるパターンは、このパターンリスト内の全てのパターンに後置されるべきである。
8.Alpg<alpg object name>
GlobalPList、LocalPListに適用されるときにIntrinsic。
子によって継承されない。
名前付きALPGオブジェクトは、低速APGレジスタ設定、読出し待ち時間、中間データレジスタ、アドレススクランブル、データ反転、データ発生器などの関連する情報を格納する。
9.StartPattern<pattern>
GlobalPList、LocalPListに適用されるときにIntrinsic。
子によって継承されない。
そのパターンリストは、その実行シーケンスにおいてStartPatternが最初に現われるときに実行し始めるであろう。
10.StopPattern<pattern>
GlobalPList、LocalPListに適用されるときにIntrinsic。
子によって継承されない。
そのパターンリストは、その実行シーケンスにおいてStopPatternが最初に現れるときに実行するのを止めるであろう。
11.StartAddr<vector offset or label>
GlobalPList、LocalPListに適用されるときにIntrinsic。
子によって継承されない。
これはStartPatternオプションを伴わなければならない。そのパターンリストは、その実行シーケンスにおいてStartPatternが最初に現われるときのStartAddrにおいて実行し始めなければならない。
12.StopAddr<vector offset or label>
GlobalPList、LocalPListに適用されるときにIntrinsic。
子によって継承されない。
これはStopPatternオプションを伴わなければならない。そのパターンリストは、その実行シーケンスにおいてStopPatternが最初に現われるときにStopAddrにおいて実行するのを止めなければならない。
13.EnableCompare_StartPattern<pattern>
GlobalPList、LocalPListに適用されるときにIntrinsic。
子によって継承されない。
パターン比較は、指示されるパターンが最初に現われるときに開始するであろう。
14.EnableCompare_StartAddr、EnableCompare_StartCycle
GlobalPList、LocalPListに適用されるときにIntrinsic。
子によって継承されない。
これは、EnabelCompare_StartPatternを伴わなければならない。パターン比較が開始することになるパターン内のアドレスまたはサイクルを指示する。
15.EnableCompare_StopPattern<pattern>
GlobalPList、LocalPListに適用されるときにIntrinsic。
子によって継承されない。
パターン比較は、指示されるパターンが最初に現われるときに終了するであろう。
16.EnableCompare_StopAddr、EnableCompare_StopCycle
GlobalPList、LocalPListに適用されるときにIntrinsic。
子によって継承されない。
これは、EnableCompare_StopPatternを伴わなければならない。パターン比較が終了することになるパターン内のアドレスまたはサイクルを指示する。
17.Skip
PList、Patに適用されるときにReferential。
子によって継承されない。
パターンリストによって支配されるパターンまたはサブシーケンス全体がスキップされるようにする。これは、このパターンリスト副木のルートにおいて全てのオプションもスキップさせるであろう。それは、このパターン副木が実行するために存在しなかったかのようにする。
先に説明されたように、或るパターンリストのための実行シーケンスがハードウエアに提示されるとき、ハードウエアは、ソフトウエアが関与することなく、パターンのシーケンスのバーストを生成する。バースト不連続部は、先行するバーストが終了し、新たなバーストが開始される、実行シーケンス内の場所である。上記のオプションリストに示されるように、PreBurst、PostBurst、BurstOffおよびBurstOffDeepオプションは、バースト不連続部が生じる場所を制御する。PreBurstおよびPostBurstオプションは、以下に記述されるある特定の付加的な規則に対するバースト不連続部サブジェクトを決定する。
1.親リストがPreBurstおよびPostBurstオプションを有し、ネストされたリストが同じ対応するオプションを有するとき、バースト不連続部は存在せず、ネストされたリストのPreBurstおよびPostBurstオプションは当てはまらない。親リストのPreBurstおよびPostBurstを適用するただ1つのバーストだけが存在する。
2.ネストされたリストがバーストオプションを持たないとき、それは、これらのオプションの記述によって親リストと同じPreBurstおよびPostBurstオプションを有することと同じであることに留意されたい。結果として、バーストオプションを持たないネストされたリストはバースト不連続部を生じない。
3.上記の規則1が当てはまらず、かつ親リストの開始からネストされたリストの開始までパターン実行シーケンスへの寄与がある場合には、ネストされたリストの開始時にバースト不連続部が存在する。この場合、親リストのPreBurstおよびPostBurstは、親リストからのパターン実行シーケンスへのこの寄与に当てはまる。ネストされたリストのPreBurstおよびPostBurstは、ネストされたリストに当てはまる。
4.上記の規則1が当てはまらず、かつネストされたリストの終了から親リストの終了までのパターン実行シーケンスへの寄与がある場合には、ネストされたリストの終了時にバースト不連続部が存在する。この場合、親リストのPreBurstおよびPostBurstは、親リストからのパターン実行シーケンスへのこの寄与に当てはまる。ネストされたリストのPreBurstおよびPostBurstは、ネストされたリストに当てはまる。
5.上記の規則1が当てはまらず、かつネストされたリストから以外の親リストからのパターン実行シーケンスへの寄与がない場合には、親リストのPreBurstおよびPostBurstは当てはまらない。ネストされたリストのPreBurstおよびPostBurstを適用するただ1つのバーストだけが存在する。
この例はBurstOffおよびPreBurstを例示する。特に強調されるのは、BurstOffによって、複数のパターンが、1パターン長である複数のバースト内で1つずつ実行されることである。それゆえ、PreBurstオプションは依然として当てはまる。入力パターンリストは以下のとおりである。
{
Pat q;
PList B;
Pat r;
Pat s;
Grobal C
{
Pat t;
PList D;
};
PList D;
PList E;
};
Global B
{
Pat a;
Pat b;
};
Global D [BurstOff]
{
Pat c;
Pat d;
};
Global E
{
Pat e;
};
zq|ab|zr|zs|t|c|d|c|d|e
1.A上のBurstOffオプションはBによって継承されないので、B内のパターンaおよびbはバーストとして動作する。
2.A上のPreBurstオプションはBによって継承されないので、Bによるバースト内のaおよびbはzによって前置されない。
3.zによる前置は、aの直接の子であることに起因して実行されるパターン、すなわちパターンq、rおよびsの場合にのみ起こる。これらのパターンは、BurstOffオプションを有するAに起因して1パターン長だけであるバースト内にあるかのように1つずつ実行される。BurstOffは、パターンに、1パターン長バーストにおいて個別に実行されることを要求する。それゆえ、PreBurstおよびPostBurstオプションは依然として当てはまる。
4.パターンリストDは、その子cおよびdが1つずつ実行される固有バーストオフオプションを有する。それは、AからのPreBurst zを継承しない。
この例はBurstOffBurstOffオプションを例示する。パターンリスト定義中のBurstOffDeepは、ネストされる定義および参照されるリストに影響を及ぼす。しかしながら、PreBurstおよびPostBurstオプションは、ネストされたリストおよび参照されたリストによって継承されない。その例は、例1の場合と同じパターンA、B、C、D、Eを用いるが、それらのオプションが異なる。
5.Aの定義上のオプション:[BurstOffDeep]、[PreBurst z]、[PostBurst y]
6.任意の他のノード上の他のオプションはない。
zqy|a|b|zry|zsy|t|c|d|c|d|e
1.PreBurstおよびPostBurstはB、C、D、Eによって継承されない。
2.BurstOffDeepはB、C、D、Eによって継承される。
ここで、例1のパターンリスト木について考えるものとする。ただし、オプションは以下のとおりである。
1.Aの定義上のオプション:[PreBurst x]、[PostBurst y]
2.Cの定義上のオプション:[PreBurst x]、[PostBurst z]
3.任意の他のノード上の他のオプションはない。
xqabrstcdcdey
1.最初のxは、実際には現在のバーストに関連するプレバーストオプションxに等しいので、禁止される。
2.最後のzは、PostBurst zがDに継承されず、zが付加されることができるCから生成されるパターンが存在しないので、禁止される。
この例は、ネストされた定義および参照されるリストへのSkipオプションの影響を例示する。その例は、例1の場合と同じパターンA、B、C、D、Eを用いるが、それらのオプションが異なる。
1.Aの定義上のオプション:[Skip]、[PreBurst z]、[PostBurst y]
2.rへの参照上のオプション:[Skip]
3.Cの定義上のオプション:[Skip]
zqabscdey
1.rおよびCのためのノードはスキップされる。
2.バーストブレークは全く存在しない。
この例はMaskオプションの影響と、パターンならびにパターンリスト定義および参照へのその影響とを例示する。その例は、例1の場合と同じパターンA、B、C、D、Eを用いるが、それらのオプションが異なる。
1.Aの定義上のオプション:[mask pin1_pin2]、[PreBurst z]
2.Bの参照上のオプション:[mask pin3]
3.Bの定義上のオプション:[mask pin4]
4.eの参照上のオプション:[mask pin5]
5.任意のノード上の他のオプションはない。
1111111111111 1
2222222222222 2
33 5
44
1.ベンダのハードウエアは、バーストブレークを生じることなく、2つのマスクブロックだけしか収容することができない。eが実行されるまで、2つのマスクブロックはピン{1、2}およびピン{1、2、3、4}である。パターンeがピン{1、2、5}の異なるマスクブロックで到着するとき、ハードウエアはバーストブレークを要求する。
この例は、或る定義において継承されるオプションが、その定義が参照されるときには当てはまらないことを例示する。以下の例について考える。
{
Global B [BurstOffDeep]
{
Global C
{
...
};
...
};
...
PList C;
};
Global D
{
PList C;
};
以下の例について考える。
{
Pat p1;
LocalPList B [PreBurst x] [PostBurst y]
{
Pat p2;
}
LocalPList C
{
Pat p3;
}
LocalPList D [PreBurst x] [PostBurst z]
{
Pat p4;
}
LocalPList E [PreBurst w] [PostBurst y] .
{
Pat p5;
}
Pat p6;
}
x p1 p2 p3 y|x p4 z|w p5 y|x p6 y
ユーザは主に、パターンファイルを用いて試験設定を定義することにより、システムとやりとりする。Timing Fileは、これらのパターンのTimingを記述するために用いられる。このファイルは、分解されるべき基礎的な定義のための他のシステムファイル(たとえば、Pin、SpecSelector)を必要とする。さらに、Timing定義において用いられる種々の変数を分解するために用いられるSpec-SelectorおよびGlobal定義は、複合TestConditionGroupオブジェクトにカプセル化される。Test Planファイルのような、さらに上位のファイルはさらに、このTestConditionGroupインスタンスを使用する。
MainPattern
{
CommonSection
{
...
Timing = myGalxy.tim;
TimingMap = myGalxyMap.tmap;
...
Domain default
{
NOP V {SIG= 1;CLK= 1; DATA=L;} W {SIG=wfs1;
FASTCLK=wfs1;} *
NOP W {SIG=wfs2;}
NOP V {SIG=L;}
NOP V {SIG=0;}
}
}
}
*Here we define the
WaveformSelector
component of the TimingMap
to use for the pattern
characters.
Importtim1.tim;
Import tim2.tim;
Import tmap1.tmap;
TestConditionGroup tim1_prod
{
SpecSet = prodTmgSpec (min, max, typ)
{
period = 10ns, 15ns, 12ns;
}
Timings
{
Timing = tim1; **
TimingMap = tmap1;
}
}
TestConditionGroup tim2_prod
{
SpecSet = prodTmgSpec(min,max,typ)
{
period = 10ns, 15ns, 12ns;
}
Timings
{
Timing = tim2;
TimingMap = tmap1;
}
}
TestCondition tim1_prod_typ
{
TestConditionGroup = tim1_prod;
Selector = typ;
}
TestCondition tim2_prod_max
{
TestConditionGroup = tim2_prod;
Selector = max;
}
Test FunctionalTest MyFunctionalTestSlow
{
PListParam = patlist1;
TestConditionParam = tim1_prod_typ;
}
TestFunctionalTest MyFunctionalTestFast
{
PListParam = patList1;
TestConditionParam = tim2_prod_max;
}
**Two Tests within a Test Plan
using different timing objects
defined earlier
Timing basic_functional
{
...
Pin SIG
{
WaveformTable wfs1
{
{ 1 { U@t_le ; D@t_te D; Z@45ns;} } **
};
};
Pin CLK
{
WaveformTable wfs1
{
{ 0 { U@20ns; D@40ns; }};
};
};
}
**This variable, which defines
the edge placement, is
defined elsewhere and is
dependent on a
SpecificationSet.
{
t_le = 10ns, 14ns, 12ns;
t_te = 30ns, 34ns, 32ns;
...
}
{
TestConditionGroup = prodTmgSpec;
SpecSelector = typ; *
}
TestConditionGroup prodTmp_max
{
TestConditionGroup = prodTmgSpec;
SpecSelector = max; **
};
*This timing uses the
typical specification in the
SpecSelector.
**This timing uses the
max specification in the
SpecSelector.
テスタモジュールの2つのコンポーネントが、波形の生成およびその関連するタイミングに直に関与する。2つのモジュールは、パターン発生器(PG)およびフレームプロセッサ(FP)である。オープンアーキテクチャ試験システムアーキテクチャ内のフレームプロセッサによる波形フォーマッティングおよびタイミング発生を例示する簡略化されたブロック図が図10に示される。波形の発生の簡単な説明が以下に与えられる。
その方法は、ピン毎の全てのWaveformTableブロックをテスタ内のLTSにマッピングすることである。テスタハードウエアが4LTSをサポートする場合には、ユーザは最大4つのWaveformTableブロックを定義することができる。各WaveformTableブロックは、テスタデジタルモジュールのために最大n個の波形定義を有することができる。
テスタDigital Moduleへのマッピングを例示するために、以下のことが仮定される。フレームプロセッサはFPモードにセットされる。CTVおよびMTVビットは、GTSビットの全数が6であり、Timing Bank Selectorビットの総数が4であるようにセットされる。
このセクションはテスタオペレーティングシステム(TOS)の基本動作を記述する。このセクションにおいて考えられる動作は以下のものである。
・システム初期化
・Test Planローディング
・パターンローディング
・Test Planの実行
・個々のTestの実行
一実施形態ではシステムを初期化するために、ある特定の仮定が満たされなければならず、かつある特定の条件が満たされなければならない。以下のサブセクションがこれらを記載する。
関連するシステムソフトウエアコンポーネントのコピーが中央に格納され、その場所がシステムコントローラに知られている。これは、システムコントローラそのものに存在することができるか、またはネットワーク実装ディレクトリを有する(または別の仕組みを介してSYSCに知られている)他のシステム上に存在することができ、どのような仕組みであっても、システムが機能することができる前に、システムコントローラが使用するために、全てのソフトウエアが入手できなければならない。このソフトウエアは以下のものを含む。
ベンダハードウエア制御(すなわちモジュールソフトウエア)DLL
標準またはユーザ試験クラスDLL
ユーザ試験計画DLL
一旦、上記の仮定および事前条件が満たされたなら、システム初期化は最初に、以下のようなシステム妥当性検査ステップを開始する。
1.システムコントローラが、システムおよびモジュール構成ファイルを読み出し、システムのユーザ指定の意図を初期化する。
2.指定されたシステム構成情報を用いて、システムコントローラは、指定されたサイトコントローラが動作中であり、接触可能であり、しかも準備できている(すなわち、SCMを実行している)ことを確認する。この確認ステップ中にエラーがあれば、システムエラーが引き起こされて、初期化は中止されるであろう。
3.その後、システムコントローラは、SITEC−1にあるSCMサービスに、スイッチマトリックスを構成して、全てのハードウエアモジュールにアクセスできるようにすることを指示し、ハードウエア発見を実行するように要求する。
4.SITEC−1におけるSCMサービスは、{vendor,hardware}タプルのための全ての利用可能なモジュールスロット(既知のハードウエアの場所)をポーリングし、{vendor,hardware}タプルのスロットへのマッピングを生成する。したがって、終了時に、このポーリングは、完全なシステム内に存在する完全な1組の{vendor,hardware,slot}結合を特定している。このポーリングの結果はシステムコントローラに送られる。
5.システムコントローラは、上記のハードウエア発見ステップの結果が、モジュール構成ファイル内のユーザ指定の構成と一致することを確認する。この確認ステップ中に何らかのエラーがあれば、システムエラーが引き起こされ、初期化は中止されるであろう。
6.その後、システムコントローラは、周知の場所(複数の場合もあり)において環境設定ファイル(複数の場合もあり)からデフォルト環境(モジュールDLLを探すための探索経路、パターンリスト、パターン、試験計画DLL、試験クラスDLLなど)をロードする。
7.システムコントローラは、全ての特定されたモジュールソフトウエアDLLが存在することを確実にする。システムコントローラ上で入手できない場合には、可能であるなら、中央記憶装置から検索される。そうでない場合には、システムエラーが引き起こされ、初期化が中止される。
サイト構成、すなわちサイト分割は、利用可能なシステムハードウエアモジュールを種々のサイトに(すなわち、多数のDUTにサービスするために)ソフトウエアレベルで割り当てることを含む。サイト分割情報はソケットファイルにおいて提供されることを思い起こされたい。
1.ソケットが与えられるとき、システムコントローラは最初に、現時点で存在しているシステム分割がソケットに適合するか否か、または再分割が必要であるか否かを判定する。初期化中のデフォルト分割は、全ての利用可能なモジュールがSITEC−1に接続される分割である。以下の残りのステップは、再分割が必要とされる場合のみ実行される。
2.システムコントローラは各サイトコントローラSCMに構成メッセージを送り、新たなソケットの下でそのために使用可能にされるDUTサイトの数および識別でそのものを再構成する。これは一般的な手順であり、1つのサイトコントローラによって制御されるDUTサイトの数が1つである場合を取り扱うことに留意されたい。新たなソケット情報はSCMにも伝達される。
3.各SCMは、もしあれば、実行中のTPSを停止して、新たなTPSを開始し、新たなソケットと、新たなソケットの下でそのために使用可能にされるDUTサイトの数および識別とを用いてそれを初期化する。
4.システムコントローラは、どのサイトが、必要とされるシステムモジュールのどのサブセットを必要とするかを判定する。これを行いながら、システムコントローラはサイトのためのハードウエアスロット情報も準備する。サイト毎の最終的な結果は、そのサイトに割り当てられるモジュールDLLに対するスロットのリストである。このサイト特有のリストは、Site Module DLL Slot List(SITE-MDSL)として表されるであろう。
5.システムコントローラは適当なSITE-MDSL、および必要なモジュールDLLを各SCMに提供する。各SCMはさらに、新たに開始されたTPSがこの情報を入手できるようにする。
6.その後、システムコントローラは、適当なサイト‐スロット間接続のために、すなわち、サイト分割作業のために、SITEC-1にSwitch Matrixを構成するように要求する。
7.サイト1〜n上のTPSは、そのSITE-MDSLにおいて指定されるDLLをロードする。これらの各DLLは、initialize()という名前の関数を有し、その関数はスロット番号のアレイを取得する。TPSは、そのモジュールタイプのための適当なスロットリストでinitialize()をコールする。この時点で誤動作があれば、システムエラーが引き起こされて、初期化が中止される。initialize()メソッドは以下のことを行う。
a.標準インターフェースIXXXModuleに基づいて具体的なクラスを作成する。たとえば、或るデジタルモジュールに関連するDLLは、それが関連する各スロットにサービスするために、1つのIPinModuleベースオブジェクトを作成するであろう。
b.インターフェースIResourceに基づいて、そのモジュール内の「資源ユニット」毎に1つの複数の具体的なクラスを作成する。再び、或るデジタルモジュールの場合、各IPinModuleベースオブジェクトは、デジタルモジュールによって占有されるスロットのコレクション内の全てのピンのためのITesterPinベースオブジェクトを作成するであろう。
8.その後、サイト1〜n上のTPSは、ロードされた各モジュールDLLにおいてgetXXXModule()をコールし、モジュール内容情報を検索する。
9.getXXXModule()へのコールの度に、IModuleポインタとして<VendorHWType>Moduleクラスオブジェクトが返される(たとえば、AdvantestPinModule)。そのような各IModuleポインタはTPSによってキャッシュされ、TPSは、フレームワーク/ユーザコードがこれらを入手できるようにする。IModule、IResourceなどのコレクションは永続的である(少なくともTPSの寿命にわたって)ことに留意されたい。
10.一旦、上記のステップが完了したなら、TPSは、その割り当てられた(既知の)ポートにおいて、listen()を開始する。これは、TPSが標準(すなわちサイト分割された)動作を開始する「準備ができている」ことを、システムコントローラに伝える。
このセクションは、ユーザTest Plan DLLがサイトコントローラ上にロードされる(1つまたは複数のDUT試験のために)ステップを記述する。
1.システムコントローラは最初に、試験計画DLLをその自らの処理空間内にロードし、それに、関連するソケットファイルおよびDUTタイプ識別子を問い合わせる。この情報を用いて、この試験計画を実行するサイト(複数の場合もあり)、それゆえこの試験計画がロードされることになるサイトコントローラ(複数の場合もあり)が特定される。
2.その後、システムコントローラは、その試験計画に関連するソケット情報を用いて、先に略述されたような再分割プロセスを開始する。
3.システムコントローラは、試験計画DLLから、試験計画によって用いられる試験クラスDLLのリストを抽出し、一旦、システムコントローラが、TPSが標準(すなわち、サイト分割された)動作を開始する準備ができていることを確認したなら、試験クラスDLLを、そして最後に、試験Plan DLLそのものを適当なTPSに送出する。
4.TPSはLoadLibrary()をコールして、それを処理空間にロードする。それは、DLLにおいて周知の関数をコールして、それがサービスするサイト(すなわちDUT)の数と同じ数の試験計画オブジェクトを作成する。
5.TPSは、必要なテスタフレームワークオブジェクトで試験計画オブジェクト(複数の場合もあり)を初期化する。初期化中に、TPSは、試験計画オブジェクト(複数の場合もあり)によって用いられる試験クラスに適したDLLを処理空間にロードし、試験クラスインスタンスを作成する。
6.TPSはシステムコントローラに対する通信チャネルを試験計画オブジェクト(複数の場合もあり)に設定する。
7.システムコントローラはTPSと通信し、試験計画オブジェクト(複数の場合もあり)のためのプロキシを構築する。
予め定義されたフローロジックにしたがって試験計画内の全ての試験を実行するための方法は以下のとおりである。
1.ユーザのアプリケーションがRunTestPlanメッセージをTPSに送信する。TPSはExecutingTestPlanメッセージを全ての接続されたアプリケーションに送る。その後、TPSはTest Plan上でexecute()をコールする。
2.1つのサイトコントローラで多数のDUTを試験することは、そのサイトコントローラ上で、DUT当たり1つの多数のスレッドを用いて実行される。各スレッドは、同じ試験計画オブジェクトの異なる個別のインスタンスを実行する。この場合には、モジュール制御ソフトウエアDLLを複数のDUTにわたって共有することができるので、DUT識別子パラメータを取得するために、ハードウエア通信のためのモジュールコマンドが必要とされる。
3.試験計画オブジェクトは、そのコレクション内の各試験にわたって繰り返され(別法では、そのFlowオブジェクトに、フローロジックにしたがって各試験を処理するように指示し)、preExec()、execute()およびpostExec()をコールする。
4.各試験が実行されるとき、全ての接続されるアプリケーションに対してステータスメッセージが返送される。
ユーザは、全ての試験ではなく、1つの試験計画内のただ1つの試験を実行したい場合もある。ただ1つの試験を実行する場合、その方法は以下のとおりである。
1.ユーザアプリケーションがRunTestメッセージをTPSに送信する。TPSはExecutingTestメッセージを全ての接続されるアプリケーションに送る。その後、TPSは、Test PlanにおいてexecuteTest()をコールし、実行するための試験を指定する。
2.Test Planオブジェクトは、その試験オブジェクトにおいてpreExec()、execute()およびpostExec()をコールすることにより、指定された試験を実行する。
3.その試験が実行されるとき、それは全ての接続されるアプリケーションにステータスメッセージを返送する。
Claims (26)
- モジュール式試験システム内のパターンオブジェクトファイルを管理するための方法であって、
モジュール式試験システムを配設することであって、該モジュール式試験システムは少なくとも1つのサイトコントローラを制御するためのシステムコントローラを備え、該少なくとも1つのサイトコントローラは少なくとも1つの試験モジュールおよびその対応する被試験デバイス(DUT)を制御する、モジュール式試験システムを配設すること、
複数のベンダ供給パターンコンパイラと前記モジュール式試験システムとの間に標準インターフェースを確立するためのオブジェクトファイル管理(OFM)フレームワークを作成すること、
複数のタイプのパターンブロックを含むパターンソースファイルを受信すること、
各ベンダ供給パターンコンパイラから得られた情報から共通のタイプのパターンブロックを決定することであって、前記共通のタイプのパターンブロックは全てのベンダ供給パターンコンパイラにより利用することができること、
前記OFMフレームワークを用いて、前記パターンソースファイルに基づいてパターンオブジェクトメタファイルを作成することであって、前記共通のタイプのパターンブロックを、複数の同じインスタンスを許容しないように共通セクションに集約することを含む、パターンオブジェクトメタファイルを作成すること、及び
前記パターンオブジェクトメタファイルを用いて前記試験モジュールを通して前記DUTを試験すること
を含む、モジュール式試験システム内のパターンオブジェクトファイルを管理するための方法。 - 前記OFMフレームワークは、ベンダ供給パターンデータを前記モジュール式試験システムに組み込むことをサポートするための標準インターフェースクラスを提供する、請求項1に記載の方法。
- 前記OFMフレームワークはさらに、モジュール特有のパターンデータを種々のベンダから前記パターンオブジェクトメタファイルに転送するように構成される、請求項1に記載の方法。
- 前記OFMフレームワークを作成することは、
前記ベンダ供給パターンコンパイラと前記試験モジュールを接続するためのベンダパターンコンパイラクラスを作成すること、
パターンオブジェクトメタファイルクラスにアクセスするためのOFMモジュールエージェントクラスを作成することであって、該パターンオブジェクトメタファイルクラスは、コンパイルされる前記パターンオブジェクトメタファイルをカプセル化する、OFMモジュールエージェントクラスを作成すること、及び
パターンコンパイル中に用いられる他の補助パターンオブジェクトメタファイルの特定の部分にアクセスするためのOFMラベルリーダクラスを作成すること
を含む、請求項1に記載の方法。 - 前記ベンダパターンコンパイラクラスを作成することは、
前記パターンソースファイルのパターンコンパイルをサポートすること、
前記パターンオブジェクトメタファイルのモジュール特有のセクションを更新すること、
前記パターンオブジェクトメタファイルの前記共通セクションを更新すること、及び
コンパイルエラーを一纏めにすること
を含む、請求項4に記載の方法。 - 前記OFMモジュールエージェントクラスを作成することは、
前記共通セクションからの前記ベンダ供給パターンコンパイラの読出し動作をサポートすること、
ベンダ特有のセクションからの前記ベンダ供給パターンコンパイラの読出し動作をサポートすること、及び
前記ベンダ供給パターンコンパイラから前記パターンオブジェクトメタファイルのモジュール特有のセクションへの書込み動作をサポートすること
を含む、請求項4に記載の方法。 - 前記OFMラベルリーダクラスを作成することは、
補助パターンオブジェクトメタファイルのラベルにアクセスすること、及び
前記補助パターンオブジェクトメタファイルのラベルオフセットにアクセスすること
を含む、請求項4に記載の方法。 - 前記パターンオブジェクトメタファイルは、
前記パターンソースファイル内の非サイクルベースのパターンブロックを表すための1つまたは複数のパターンブロックと、
前記パターンソースファイル内のサイクルベースのパターンブロックを表すための多くても1つのサイクライズパターンブロックと
を含む、請求項1に記載の方法。 - 前記パターンオブジェクトメタファイルを作成することは、
パターンのコンパイルを制御するためにOFMマネージャを初期化すること、
各ベンダモジュールが前記パターンオブジェクトメタファイルによって利用されるべくベンダパターンコンパイラインターフェースオブジェクトをインスタンス化することであって、該ベンダパターンコンパイラインターフェースオブジェクトは多数のタイプのパターンブロックをサポートする、インスタンス化すること、
ベンダパターンコンパイラインターフェースオブジェクトに従って前記試験モジュールによってサポートされるシステム資源のリストを獲得すること、
パターンコンパイラを用いて前記パターンソースファイル内の1以上の共通のタイプのパターンブロックを含む資源タイプのリストをコンパイルすることであって、それによって、共通セクションデータを生成する、コンパイルすること、
パターンオブジェクトメタファイルクラスとして共通セクションデータを格納することであって、該共通セクションデータは、前記ベンダ供給パターンコンパイラがアクセスできる情報をパターンオブジェクトメタファイルに含む、共通セクションデータを格納すること、
並びに
コンパイルエラーおよび警告のリストを生成すること
を含む、請求項1に記載の方法。 - 前記パターンコンパイラは、
少なくとも1つのモジュール特有のパターンコンパイラと、
各モジュール特有のコンパイラに対し、前記対応するパターンソースファイルのモジュール特有のセクションおよび共通セクションの両方をコンパイルするように指示するためのオブジェクトファイルマネージャとを含む、請求項9に記載の方法。 - 前記ベンダパターンコンパイラインターフェースオブジェクトはサイクルベースパターンコンパイラインターフェースオブジェクトを含む、請求項9に記載の方法。
- 前記ベンダパターンコンパイラインターフェースオブジェクトは非サイクルベースパターンコンパイラインターフェースオブジェクトを含む、請求項9に記載の方法。
- 前記多数のタイプのパターンブロックは、サイクルベースパターンおよび非サイクルベースパターンからなるグループから選択される1つまたは複数の項目を含む、請求項9に記載の方法。
- モジュール式試験システムであって、
システムコントローラと、
前記システムコントローラに接続される少なくとも1つのサイトコントローラと、
少なくとも1つの試験モジュールおよびその対応する被試験デバイス(DUT)であって、該試験モジュールは前記サイトコントローラによって制御される、少なくとも1つの試験モジュールおよびその対応する被試験デバイスと、
複数のベンダ供給パターンコンパイラと該モジュール式試験システムとの間に標準インターフェースを確立するためのオブジェクトファイル管理(OFM)フレームワークと、
複数のタイプのパターンブロックを含むパターンソースファイルを受信するための手段と、
各ベンダ供給パターンコンパイラから得られた情報から共通のタイプのパターンブロックを決定する手段であって、前記共通のタイプのパターンブロックは全てのベンダ供給パターンコンパイラにより利用することができる手段、
前記OFMフレームワークを用いて、前記パターンソースファイルに基づいてパターンオブジェクトメタファイルを作成するための手段であって、前記共通のタイプのパターンブロックを、複数の同じインスタンスを許容しないように共通セクションに集約することを含む、パターンオブジェクトメタファイルを作成する手段、と、
前記パターンオブジェクトメタファイルを用いて、前記試験モジュールを通して前記DUTを試験するための手段と
を備える、モジュール式試験システム。 - 前記OFMフレームワークは、ベンダ供給パターンデータを前記モジュール式試験システムに組み込むことをサポートするための標準インターフェースクラスを提供する、請求項14に記載のシステム。
- 前記OFMフレームワークは、モジュール特有のパターンデータを種々のベンダから前記パターンオブジェクトメタファイルに転送するように構成される、請求項14に記載のシステム。
- 前記OFMフレームワークは、
前記ベンダ供給パターンコンパイラと前記試験モジュールを接続するためのベンダパターンコンパイラクラスを作成するための手段と、
パターンオブジェクトメタファイルクラスにアクセスするためのOFMモジュールエージェントクラスを作成するための手段であって、該パターンオブジェクトメタファイルクラスは、コンパイルされる前記パターンオブジェクトメタファイルをカプセル化する、作成するための手段と、
パターンコンパイル中に用いられる他の補助パターンオブジェクトメタファイルの特定の部分にアクセスするためのOFMラベルリーダクラスを作成するための手段と
をさらに備える、請求項14に記載のシステム。 - 前記ベンダパターンコンパイラクラスを作成するための前記手段は、
前記パターンソースファイルのパターンコンパイルをサポートするための手段と、
前記パターンオブジェクトメタファイルのモジュール特有のセクションを更新するための手段と、
前記パターンオブジェクトメタファイルの前記共通セクションを更新するための手段と、
コンパイルエラーを一纏めにするための手段と
を備える、請求項17に記載のシステム。 - 前記OFMモジュールエージェントクラスを作成するための前記手段は、
前記共通セクションからの前記ベンダ供給パターンコンパイラの読出し動作をサポートするための手段と、
モジュール特有のセクションからの前記ベンダ供給パターンコンパイラの読出し動作をサポートするための手段と、
前記ベンダ供給パターンコンパイラから前記パターンオブジェクトメタファイルの前記モジュール特有のセクションへの書込み動作をサポートするための手段と
を備える、請求項17に記載のシステム。 - 前記OFMラベルリーダクラスを作成するための前記手段は、
補助パターンオブジェクトメタファイルのラベルにアクセスするための手段と、
前記補助パターンオブジェクトメタファイルのラベルオフセットにアクセスするための手段と
を備える、請求項17に記載のシステム。 - 前記パターンオブジェクトメタファイルは、
前記パターンソースファイル内の非サイクルベースパターンブロックを表すための1つまたは複数のパターンブロックと、
前記パターンソースファイル内のサイクルベースパターンブロックを表すための多くても1つのサイクライズパターンブロックと
を含む、請求項14に記載のシステム。 - 前記パターンオブジェクトメタファイルを作成するための前記手段は、
パターンのコンパイルを制御するためにOFMマネージャを初期化するための手段と、
各ベンダモジュールが前記パターンオブジェクトメタファイルによって利用されるべくベンダパターンコンパイラインターフェースオブジェクトをインスタンス化するための手段であって、該ベンダパターンコンパイラインターフェースオブジェクトは多数のタイプのパターンブロックをサポートする、インスタンス化するための手段と、
ベンダパターンコンパイラインターフェースオブジェクトに従って前記試験モジュールによってサポートされるシステム資源のリストを獲得するための手段と、
パターンコンパイラを用いて前記パターンソースファイル内の1以上の共通のタイプのパターンブロックを含む資源タイプのリストをコンパイルするための手段であって、それによって、共通セクションデータを生成する、コンパイルするための手段と、
パターンオブジェクトメタファイルクラスとして共通セクションデータを格納する手段であって、該共通セクションデータは、前記ベンダ供給パターンコンパイラがアクセスできる情報をパターンオブジェクトメタファイルに含む、格納する手段と、 コンパイルエラーおよび警告のリストを生成するための手段と
を備える、請求項14に記載のシステム。 - 前記パターンコンパイラは、
少なくとも1つのモジュール特有のパターンコンパイラと、
各モジュール特有のコンパイラに対し、前記対応するパターンソースファイルのモジュール特有のセクションおよび共通セクションの両方をコンパイルするように指示するためのオブジェクトファイルマネージャと
を備える、請求項22に記載のシステム。 - 前記ベンダパターンコンパイラインターフェースオブジェクトはサイクルベースパターンコンパイラインターフェースオブジェクトを含む、請求項22に記載のシステム。
- 前記ベンダパターンコンパイラインターフェースオブジェクトは非サイクルベースパターンコンパイラインターフェースオブジェクトを含む、請求項22に記載のシステム。
- 前記多数のタイプのパターンブロックは、サイクルベースパターンおよび非サイクルベースパターンからなるグループから選択される1つまたは複数の項目を含む、請求項22に記載のシステム。
Applications Claiming Priority (4)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US57357704P | 2004-05-22 | 2004-05-22 | |
| US60/573,577 | 2004-05-22 | ||
| US10/918,513 | 2004-08-13 | ||
| US10/918,513 US7209851B2 (en) | 2003-02-14 | 2004-08-13 | Method and structure to develop a test program for semiconductor integrated circuits |
Related Parent Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2006519573A Division JP4332179B2 (ja) | 2004-05-22 | 2005-05-23 | パターンコンパイラ |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2009008683A JP2009008683A (ja) | 2009-01-15 |
| JP4332200B2 true JP4332200B2 (ja) | 2009-09-16 |
Family
ID=38131583
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2008180843A Expired - Fee Related JP4332200B2 (ja) | 2004-05-22 | 2008-07-11 | モジュール式試験システム内のパターンオブジェクトファイルを管理するための方法およびモジュール式試験システム |
Country Status (4)
| Country | Link |
|---|---|
| JP (1) | JP4332200B2 (ja) |
| CN (6) | CN1997909B (ja) |
| AT (3) | ATE451625T1 (ja) |
| DE (3) | DE602005015848D1 (ja) |
Families Citing this family (41)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7925940B2 (en) * | 2007-10-17 | 2011-04-12 | Synopsys, Inc. | Enhancing speed of simulation of an IC design while testing scan circuitry |
| US8094566B2 (en) * | 2009-12-24 | 2012-01-10 | Advantest Corporation | Test apparatus and test method |
| CN102215140B (zh) * | 2010-04-02 | 2013-03-27 | 英业达股份有限公司 | 储存局域网络的检验装置 |
| CN102378232A (zh) * | 2010-08-23 | 2012-03-14 | 财团法人资讯工业策进会 | 无线网络信号的测试系统及其测量方法 |
| CN103109275B (zh) * | 2010-09-07 | 2016-02-03 | 爱德万测试公司 | 在半导体测试环境中使用虚拟仪器的系统、方法和设备 |
| CN101980174B (zh) * | 2010-11-24 | 2012-07-04 | 中国人民解放军国防科学技术大学 | 一种自动测试计算机应用程序区间能耗的方法 |
| JP2012167958A (ja) * | 2011-02-10 | 2012-09-06 | Nippon Syst Wear Kk | 試験情報表示装置、方法、プログラム、および該ソフトウェアを格納したコンピュータ可読媒体 |
| CN102608517A (zh) * | 2012-02-16 | 2012-07-25 | 工业和信息化部电子第五研究所 | 一种创建集成电路测试程序包的快速方法 |
| US9606183B2 (en) | 2012-10-20 | 2017-03-28 | Advantest Corporation | Pseudo tester-per-site functionality on natively tester-per-pin automatic test equipment for semiconductor test |
| US10161993B2 (en) * | 2013-02-21 | 2018-12-25 | Advantest Corporation | Tester with acceleration on memory and acceleration for automatic pattern generation within a FPGA block |
| JP6174898B2 (ja) * | 2013-04-30 | 2017-08-02 | ルネサスエレクトロニクス株式会社 | 半導体試験装置 |
| TWI490689B (zh) * | 2013-05-17 | 2015-07-01 | 英業達股份有限公司 | 不間斷自動更新測試命令之系統及方法 |
| CN104298590B (zh) * | 2013-07-16 | 2019-05-10 | 爱德万测试公司 | 用于按管脚apg的快速语义处理器 |
| CN103413003B (zh) * | 2013-08-21 | 2016-07-06 | 浪潮(北京)电子信息产业有限公司 | 一种序列传输、接收装置及方法 |
| KR102147172B1 (ko) * | 2014-04-09 | 2020-08-31 | 삼성전자주식회사 | 시스템 온 칩 및 그것의 검증 방법 |
| US9672020B2 (en) | 2014-09-19 | 2017-06-06 | Microsoft Technology Licensing, Llc | Selectively loading precompiled header(s) and/or portion(s) thereof |
| CN107003648B (zh) * | 2014-12-17 | 2019-06-11 | 西门子公司 | 自动化设备的功能模块的检验方法和工程规划系统 |
| CN107454124B (zh) * | 2016-05-31 | 2020-11-03 | 创新先进技术有限公司 | 设备自动化方法及装置 |
| CN106507098B (zh) * | 2016-10-09 | 2018-10-19 | 珠海市魅族科技有限公司 | 数据处理的方法和装置 |
| CN106603074A (zh) * | 2016-11-03 | 2017-04-26 | 武汉新芯集成电路制造有限公司 | 一种dac电路并行测试系统及并行测试方法 |
| CN107959981B (zh) * | 2017-10-30 | 2020-07-10 | 捷开通讯(深圳)有限公司 | 一种通信终端和通信测试方法 |
| CN109324956B (zh) * | 2018-08-20 | 2021-11-05 | 深圳前海微众银行股份有限公司 | 系统测试方法、设备及计算机可读存储介质 |
| CN109508290A (zh) * | 2018-10-25 | 2019-03-22 | 深圳点猫科技有限公司 | 一种基于教育系统的自动化测试方法及电子设备 |
| CN109884923A (zh) * | 2019-02-21 | 2019-06-14 | 苏州天准科技股份有限公司 | 一种自动化设备控制模块化可配置系统 |
| CN109975650B (zh) * | 2019-04-30 | 2024-07-12 | 珠海市运泰利自动化设备有限公司 | 一种TypeC接头连板多通道测试平台 |
| CN110954804B (zh) * | 2019-12-19 | 2021-11-02 | 上海御渡半导体科技有限公司 | 一种批量精确诊断cBit阵列故障的装置和方法 |
| CN116547666B (zh) * | 2020-12-03 | 2024-03-22 | 美商新思科技有限公司 | 硬件设计编译故障时自动顺序重试 |
| CN112835562A (zh) * | 2021-01-25 | 2021-05-25 | 深圳前海微众银行股份有限公司 | 一种单文件组件开发方法及装置、电子设备 |
| CN113051114A (zh) * | 2021-03-19 | 2021-06-29 | 无锡市软测认证有限公司 | 一种用于提高芯片测试效率的方法 |
| CN113050952B (zh) * | 2021-04-19 | 2024-07-05 | 杭州至千哩科技有限公司 | 伪指令编译方法、装置、计算机设备及存储介质 |
| CN113238834B (zh) * | 2021-05-31 | 2023-08-08 | 北京世冠金洋科技发展有限公司 | 仿真模型文件的处理方法、装置及电子设备 |
| CN113342649B (zh) * | 2021-05-31 | 2023-11-14 | 上海创景信息科技有限公司 | 基于真实目标机实现单元测试的方法、介质和设备 |
| KR102314419B1 (ko) * | 2021-07-27 | 2021-10-19 | (주) 에이블리 | 반도체 테스트 패턴 발생 장치 및 방법 |
| CN113740077B (zh) * | 2021-09-13 | 2024-08-16 | 广州文远知行科技有限公司 | 车辆底盘测试方法、装置、设备及存储介质 |
| CN114252758B (zh) * | 2021-12-03 | 2024-12-06 | 杭州至千哩科技有限公司 | Ate测试通道资源配置方法、装置、设备及存储介质 |
| CN114646867B (zh) * | 2022-05-18 | 2022-10-28 | 南京宏泰半导体科技有限公司 | 一种集成电路并发测试装置及方法 |
| CN115630594B (zh) * | 2022-12-19 | 2023-03-21 | 杭州加速科技有限公司 | 一种芯片设计仿真文件到Pattern文件的转换方法及其系统 |
| CN116257037B (zh) * | 2023-05-15 | 2023-08-11 | 通达电磁能股份有限公司 | 控制器测试程序的生成方法、系统、电子设备及存储介质 |
| CN116520754B (zh) * | 2023-06-27 | 2023-09-22 | 厦门芯泰达集成电路有限公司 | 基于预加载模式的dps模块控制方法、系统 |
| CN117539700A (zh) * | 2023-11-13 | 2024-02-09 | 宁畅信息产业(北京)有限公司 | 一种测试管理方法、装置、设备及介质 |
| CN119381283B (zh) * | 2024-12-31 | 2025-03-21 | 合肥晶合集成电路股份有限公司 | 半导体量测方法和量测主站点 |
Family Cites Families (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP0143623A3 (en) * | 1983-11-25 | 1987-09-23 | Mars Incorporated | Automatic test equipment |
| JPH03130839A (ja) | 1989-10-17 | 1991-06-04 | Chubu Nippon Denki Software Kk | オンラインシミュレーション方式 |
| US6208439B1 (en) * | 1990-11-09 | 2001-03-27 | Litel Instruments | Generalized geometric transforms for computer generated holograms |
| US6678643B1 (en) * | 1999-06-28 | 2004-01-13 | Advantest Corp. | Event based semiconductor test system |
| US6629282B1 (en) * | 1999-11-05 | 2003-09-30 | Advantest Corp. | Module based flexible semiconductor test system |
| US6651204B1 (en) * | 2000-06-01 | 2003-11-18 | Advantest Corp. | Modular architecture for memory testing on event based test system |
| CN1154045C (zh) * | 2000-07-25 | 2004-06-16 | 华为技术有限公司 | 一种跨平台的联合仿真系统 |
| US6779140B2 (en) * | 2001-06-29 | 2004-08-17 | Agilent Technologies, Inc. | Algorithmically programmable memory tester with test sites operating in a slave mode |
| US6737926B2 (en) * | 2001-08-30 | 2004-05-18 | Micron Technology, Inc. | Method and apparatus for providing clock signals at different locations with minimal clock skew |
| CN100341110C (zh) * | 2002-04-11 | 2007-10-03 | 株式会社爱德万测试 | 避免asic/soc制造中原型保持的制造方法和设备 |
| US7460988B2 (en) * | 2003-03-31 | 2008-12-02 | Advantest Corporation | Test emulator, test module emulator, and record medium storing program therein |
-
2005
- 2005-05-23 DE DE602005015848T patent/DE602005015848D1/de not_active Expired - Lifetime
- 2005-05-23 CN CN2005800164369A patent/CN1997909B/zh not_active Expired - Fee Related
- 2005-05-23 CN CN 200580015953 patent/CN1981202A/zh active Pending
- 2005-05-23 CN CN2005800163968A patent/CN1989417B/zh not_active Expired - Fee Related
- 2005-05-23 DE DE602005018205T patent/DE602005018205D1/de not_active Expired - Lifetime
- 2005-05-23 AT AT05743262T patent/ATE451625T1/de not_active IP Right Cessation
- 2005-05-23 DE DE602005018204T patent/DE602005018204D1/de not_active Expired - Lifetime
- 2005-05-23 CN CNB2005800164373A patent/CN100541218C/zh not_active Expired - Fee Related
- 2005-05-23 AT AT05743229T patent/ATE451624T1/de not_active IP Right Cessation
- 2005-05-23 CN CN200580016355A patent/CN100580473C/zh not_active Expired - Fee Related
- 2005-05-23 AT AT05743357T patent/ATE438865T1/de not_active IP Right Cessation
- 2005-05-23 CN CN200580016215A patent/CN100585422C/zh not_active Expired - Fee Related
-
2008
- 2008-07-11 JP JP2008180843A patent/JP4332200B2/ja not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| ATE438865T1 (de) | 2009-08-15 |
| JP2009008683A (ja) | 2009-01-15 |
| CN100580473C (zh) | 2010-01-13 |
| CN1981202A (zh) | 2007-06-13 |
| CN100541218C (zh) | 2009-09-16 |
| CN1981200A (zh) | 2007-06-13 |
| CN1989417A (zh) | 2007-06-27 |
| ATE451624T1 (de) | 2009-12-15 |
| CN1989417B (zh) | 2011-03-16 |
| DE602005015848D1 (de) | 2009-09-17 |
| CN1997908A (zh) | 2007-07-11 |
| CN1997909A (zh) | 2007-07-11 |
| CN1997909B (zh) | 2010-11-10 |
| CN1981203A (zh) | 2007-06-13 |
| CN100585422C (zh) | 2010-01-27 |
| ATE451625T1 (de) | 2009-12-15 |
| DE602005018205D1 (de) | 2010-01-21 |
| DE602005018204D1 (de) | 2010-01-21 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP4332179B2 (ja) | パターンコンパイラ | |
| JP3890079B1 (ja) | モジュール式試験システムにおける交換可能コンポーネントを制御するための方法及びシステム | |
| JP4516961B2 (ja) | 半導体試験システム、試験プログラムを生成するための方法、及びプリヘッダ | |
| JP3939336B2 (ja) | 半導体集積回路用のテストプログラムを開発する方法および構造 | |
| CN1997909B (zh) | 用于控制模块化测试系统中可互换部件的方法和系统 | |
| US8255198B2 (en) | Method and structure to develop a test program for semiconductor integrated circuits | |
| JP2007528993A5 (ja) | ||
| US7809520B2 (en) | Test equipment, method for loading test plan and program product | |
| JP3911007B1 (ja) | モジュール式試験システムをシミュレートする方法及びシステム | |
| KR20070023762A (ko) | 반도체 집적 회로를 위한 테스트 프로그램을 개발하는 방법및 구조 | |
| KR20070035507A (ko) | 모듈식 테스트 시스템에서 호환성있는 컴포넌트를 제어하는방법 및 시스템 | |
| Dollas et al. | A KNOWLEDGE BASED ENVIRONMENT FOR INTEGRATED CIRCUIT TESTING |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081028 |
|
| TRDD | Decision of grant or rejection written | ||
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20090526 |
|
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20090619 |
|
| R150 | Certificate of patent or registration of utility model |
Ref document number: 4332200 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120626 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120626 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130626 Year of fee payment: 4 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130626 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130626 Year of fee payment: 4 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| LAPS | Cancellation because of no payment of annual fees |
