origen_testers 0.31.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/application.rb +3 -1
- data/config/shared_commands.rb +4 -0
- data/config/version.rb +1 -1
- data/lib/origen_testers/api.rb +8 -0
- data/lib/origen_testers/atp/flow.rb +30 -9
- data/lib/origen_testers/flow.rb +36 -2
- data/lib/origen_testers/generator.rb +44 -5
- data/lib/origen_testers/interface.rb +22 -2
- data/lib/origen_testers/origen_ext/generator.rb +4 -3
- data/lib/origen_testers/origen_ext/generator/flow.rb +99 -5
- data/lib/origen_testers/program_generators.rb +5 -1
- data/lib/origen_testers/smartest_based_tester.rb +1 -0
- data/lib/origen_testers/smartest_based_tester/base.rb +177 -114
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +329 -127
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +25 -7
- data/lib/origen_testers/smartest_based_tester/base/limits_file.rb +186 -60
- data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +4 -0
- data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +4 -0
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_bin_names.rb +5 -1
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_flow_vars.rb +108 -0
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +8 -3
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +9 -108
- data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +17 -7
- data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +29 -7
- data/lib/origen_testers/smartest_based_tester/smt7.rb +59 -0
- data/lib/origen_testers/smartest_based_tester/smt8.rb +218 -0
- data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +32 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +2 -2
- data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +109 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8.rb +8 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/flow.rb +234 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/generator.rb +48 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/limits_file.rb +14 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/limits_workbook.rb +148 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/templates/limits.csv.erb +3 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/templates/template.flow.erb +41 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/test_suite.rb +66 -0
- data/lib/origen_testers/stil_based_tester/base.rb +4 -0
- data/lib/origen_testers/test/interface.rb +16 -2
- data/lib/origen_testers/vector_generator.rb +9 -4
- data/lib/origen_testers/vector_pipeline.rb +1 -1
- data/pattern/nvm/v93k/v93k_workout.rb +7 -0
- data/program/_erase_vfy.rb +2 -1
- data/program/components/_deep_nested.rb +3 -0
- data/program/components/_prb1_main.rb +1 -1
- data/program/components/_prb2_main.rb +6 -2
- data/program/flow_control.rb +3 -3
- data/program/prb1.rb +4 -0
- data/program/prb2.rb +7 -3
- data/templates/origen_guides/pattern/v93k.md.erb +24 -0
- data/templates/origen_guides/program/v93k.md.erb +6 -148
- data/templates/origen_guides/program/v93ksmt7.md.erb +165 -0
- data/templates/origen_guides/program/v93ksmt8.md.erb +112 -0
- metadata +30 -3
- data/lib/origen_testers/smartest_based_tester/base/test_methods/smart_calc_tml.rb +0 -23
data/program/prb1.rb
CHANGED
@@ -10,4 +10,8 @@ Flow.create interface: 'OrigenTesters::Test::Interface', flow_description: 'Prob
|
|
10
10
|
|
11
11
|
import 'components/prb1_main'
|
12
12
|
|
13
|
+
# Test that a reference to a deeply nested test works (mainly for SMT8)
|
14
|
+
test :on_deep_1, if_failed: :deep_test
|
15
|
+
|
16
|
+
pass 1, description: "Good die!", softbin: 1
|
13
17
|
end
|
data/program/prb2.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# An example of creating an entire test program from
|
2
2
|
# a single source file
|
3
|
-
Flow.create interface: 'OrigenTesters::Test::Interface' do
|
3
|
+
Flow.create interface: 'OrigenTesters::Test::Interface', environment: :probe do
|
4
4
|
|
5
5
|
# Test that this can be overridden from the target at flow-level
|
6
6
|
self.add_flow_enable = :enabled
|
@@ -21,8 +21,12 @@ Flow.create interface: 'OrigenTesters::Test::Interface' do
|
|
21
21
|
func :erase_all, duration: :dynamic, number: 12000
|
22
22
|
func :margin_read1_all1, id: 'erased_successfully', number: 12010
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
# Check that an instance variable change in a sub-flow (prb2_main in this case)
|
25
|
+
# is preserved back here in the main flow
|
26
|
+
if include_additional_prb2_test
|
27
|
+
if_enable 'extra_tests' do
|
28
|
+
import 'components/prb2_main', number: 13000
|
29
|
+
end
|
26
30
|
end
|
27
31
|
|
28
32
|
func :margin_read1_all1, number: 14000
|
@@ -36,6 +36,30 @@ clk _______| |_______| |_| |_| |_| |_| |_| |_| |_| |_| |_______|
|
|
36
36
|
|
37
37
|
~~~
|
38
38
|
|
39
|
+
#### SmarTest 8
|
39
40
|
|
41
|
+
The Origen V93K driver supports generating patterns into both SMT7 and SMT8 pattern formats.
|
42
|
+
|
43
|
+
To enable SMT8 format, set the `smt_version:` attribute to 8 when instantiating the tester in your
|
44
|
+
[application environment](<%= path "guides/runtime/environment" %>) as shown here:
|
45
|
+
|
46
|
+
~~~ruby
|
47
|
+
# environment/v93k_smt7.rb
|
48
|
+
OrigenTesters::V93K.new
|
49
|
+
|
50
|
+
# environment/v93k_smt8.rb
|
51
|
+
OrigenTesters::V93K.new smt_version: 8
|
52
|
+
~~~
|
53
|
+
|
54
|
+
SMT8 patterns can either be in a zipped/binary format, or an ASCII file format.
|
55
|
+
Zipped is the default, but the ASCII format can sometimes be useful when visually inspecting patterns or
|
56
|
+
when comparing them via a difftool.
|
57
|
+
To enable ASCII format patterns, configure your environment like this:
|
58
|
+
|
59
|
+
~~~ruby
|
60
|
+
# environment/v93k_smt8.rb
|
61
|
+
OrigenTesters::V93K.new smt_version: 8,
|
62
|
+
zip_patterns: false
|
63
|
+
~~~
|
40
64
|
|
41
65
|
% end
|
@@ -1,70 +1,5 @@
|
|
1
1
|
% render "layouts/guides.html" do
|
2
2
|
|
3
|
-
### Flow Considerations
|
4
|
-
|
5
|
-
By default, a top-level `Flow.create` call in Origen will generate a standalone V93K testflow file which is
|
6
|
-
internally wrapped by a flow group, like this:
|
7
|
-
|
8
|
-
~~~text
|
9
|
-
group <FLOW_NAME> {
|
10
|
-
// Flow content here
|
11
|
-
}
|
12
|
-
~~~
|
13
|
-
|
14
|
-
When such flows are imported into a master flow file, SmarTest does not provide a standard enable mechanism
|
15
|
-
to control which sub-flows are executed.
|
16
|
-
|
17
|
-
However, Origen provides the ability to generate V93K flow modules with an enable-word wrapper, thereby allowing
|
18
|
-
the top-level flow to easily enable/disable the execution of flow modules via flow variables.
|
19
|
-
|
20
|
-
By enabling this feature in the target like this:
|
21
|
-
|
22
|
-
~~~ruby
|
23
|
-
OrigenTesters::V93K.new(add_flow_enable: :enabled)
|
24
|
-
~~~
|
25
|
-
|
26
|
-
the flow will now generate like this:
|
27
|
-
|
28
|
-
~~~text
|
29
|
-
group <FLOW_NAME> {
|
30
|
-
if @<FLOW_NAME>_ENABLE == 1 {
|
31
|
-
// Flow content here
|
32
|
-
}
|
33
|
-
}
|
34
|
-
~~~
|
35
|
-
|
36
|
-
The `@<FLOW_NAME>_ENABLE` variable will be initialized to 1 in the generated variables file for the given flow,
|
37
|
-
meaning that the module will run by default if the top-level flow does nothing with this variable.
|
38
|
-
|
39
|
-
Alternatively, the variable can be initialized to off like this:
|
40
|
-
|
41
|
-
~~~ruby
|
42
|
-
OrigenTesters::V93K.new(add_flow_enable: :disabled)
|
43
|
-
~~~
|
44
|
-
|
45
|
-
Meaning that by default, the module will not run and the top-level flow must always enable it by including
|
46
|
-
`@<FLOW_NAME>_ENABLE = 1` before hitting the module.
|
47
|
-
|
48
|
-
Setting this attribute in the target means that it will apply to all flows. Alternatively, it can be set within
|
49
|
-
the flow itself (or the interface) if it is necessary to use this feature for only a subset of flows, or to override
|
50
|
-
the default setting for a particular flow.
|
51
|
-
|
52
|
-
Here is an example:
|
53
|
-
|
54
|
-
~~~ruby
|
55
|
-
Flow.create interface: 'MyApp::Interface' do
|
56
|
-
|
57
|
-
# Ensure that this flow is always generated with an enable word wrapper that is enabled by default
|
58
|
-
self.add_flow_enable = :enabled
|
59
|
-
|
60
|
-
# Some functional test
|
61
|
-
func :blah
|
62
|
-
end
|
63
|
-
~~~
|
64
|
-
|
65
|
-
This same API may be used to implement similar features on other platforms in future, but for now only the V93K is implemented.
|
66
|
-
|
67
|
-
|
68
3
|
### Interface Considerations
|
69
4
|
|
70
5
|
Be sure to read and understand the guide to
|
@@ -133,6 +68,12 @@ t.lev_spec_set = 8
|
|
133
68
|
t.levset = 1
|
134
69
|
~~~
|
135
70
|
|
71
|
+
or to assign a spec in SMT8:
|
72
|
+
|
73
|
+
~~~ruby
|
74
|
+
t.spec = 'my_spec_min'
|
75
|
+
~~~
|
76
|
+
|
136
77
|
If the test method provides parameters, you can set them in the same way. As a convenience,
|
137
78
|
Origen will automatically work out whether the reference is to a parameter of the test suite
|
138
79
|
or of the test method, and will assign it accordingly.
|
@@ -164,38 +105,6 @@ t.lo_limit = 100.uA
|
|
164
105
|
t.hi_limit = 150.uA
|
165
106
|
~~~
|
166
107
|
|
167
|
-
#### Built-in Test Methods
|
168
|
-
|
169
|
-
SmarTest comes with a standard AC and DC test method library and Origen provides a built-in API to
|
170
|
-
generate a test flow which uses those test methods, here are some examples:
|
171
|
-
|
172
|
-
~~~ruby
|
173
|
-
# Execute a functional test
|
174
|
-
test_method = test_methods.ac_tml.ac_test.functional_test
|
175
|
-
|
176
|
-
# A basic DC voltage measurement
|
177
|
-
test_method = test_methods.dc_tml.dc_test.general_pmu force_mode: 'CURR', force_value: 100.uA
|
178
|
-
~~~
|
179
|
-
|
180
|
-
Generally the parameter naming is the lower-cased and underscored version of the name that appears
|
181
|
-
in the SMT documentation.
|
182
|
-
|
183
|
-
See the [DC library API](http://origen-sdk.org/testers/api/OrigenTesters/SmartestBasedTester/Base/TestMethods/DcTml.html)
|
184
|
-
and the [AC library API](http://origen-sdk.org/testers/api/OrigenTesters/SmartestBasedTester/Base/TestMethods/AcTml.html)
|
185
|
-
for up-to-date details of the implemented test methods and the parameter names.
|
186
|
-
|
187
|
-
However, some of these test methods are not particularly good and the recommendation from Advantest these
|
188
|
-
days is generally not to use them.
|
189
|
-
|
190
|
-
Since that means there is now a void where a universally available test method library should be, work is
|
191
|
-
underway to provide an Origen standard test method library.
|
192
|
-
The aim of this is to provide a complete generation solution from Origen so that those who have
|
193
|
-
a fairly conventional use case can rapidly build a complete test program from off-the-shelf
|
194
|
-
components, but that is still a work in progress and not yet ready for prime time use.
|
195
|
-
|
196
|
-
Many users of the V93K program generator however, are likely to want to use it in combination
|
197
|
-
with their own custom test method library...
|
198
|
-
|
199
108
|
#### Custom Test Methods
|
200
109
|
|
201
110
|
An API exists to define the naming and parameter signature of test methods provided by
|
@@ -402,55 +311,4 @@ For a more advanced integration which gets rid of the need to even call `add_my_
|
|
402
311
|
can refer to how the `origen_std_lib` interface integration works
|
403
312
|
[here](https://github.com/Origen-SDK/origen_std_lib/blob/master/plugin/lib/origen_std_lib.rb).
|
404
313
|
|
405
|
-
### Test Name Uniqueness
|
406
|
-
|
407
|
-
Test (suite) naming collisions can occur when importing multiple independent test flow modules into a
|
408
|
-
V93K master flow file.
|
409
|
-
|
410
|
-
To prevent that from ever occurring, Origen will generate and append a unique signature to the end of
|
411
|
-
all test names by default, for example:
|
412
|
-
|
413
|
-
~~~ruby
|
414
|
-
t = test_suites.add("my_test_name", options)
|
415
|
-
|
416
|
-
t.name # => "my_test_name_E32ABE8"
|
417
|
-
~~~
|
418
|
-
|
419
|
-
Applications can override this default behavior by setting the corresponding test interface attribute,
|
420
|
-
`unique_test_names`, to one of the following values:
|
421
|
-
|
422
|
-
* `:signature` - this is the default which will generate a unique signature as shown in the above example
|
423
|
-
* `nil` - no value will be appended to the test names at all
|
424
|
-
* `:flowname` - the name of the current top-level flow will be appended to all test names
|
425
|
-
* Setting this attribute to any other value will append that value directly to all test names
|
426
|
-
|
427
|
-
This attribute can be set in the [environment file](<%= path 'guides/runtime/environment' %>) when instantiating
|
428
|
-
the tester:
|
429
|
-
|
430
|
-
~~~ruby
|
431
|
-
OrigenTesters::V93K.new unique_test_names: nil
|
432
|
-
~~~
|
433
|
-
|
434
|
-
This provides a single place to control the behavior within a [monolithic application architecture](<%= path 'guides/starting/architecture/#Monolithic_Application_Architecture' %>).
|
435
|
-
|
436
|
-
However, under a [distributed application architecture](<%= path 'guides/starting/architecture/#Distributed_Application_Architecture' %>)
|
437
|
-
a given test flow module may be generated under a target/environment that is controlled by a 3rd party.
|
438
|
-
|
439
|
-
In that case, it is recommended to either set it at the flow-level, which will override any setting set at the
|
440
|
-
environment-level:
|
441
|
-
|
442
|
-
~~~ruby
|
443
|
-
# program/wt1_start.rb
|
444
|
-
Flow.create interface: 'MyApp::Interface', unique_test_names: 'wt1' do
|
445
|
-
|
446
|
-
end
|
447
|
-
~~~
|
448
|
-
|
449
|
-
Or, it can be set directly within your interface logic which will take the highest precedence:
|
450
|
-
|
451
|
-
~~~ruby
|
452
|
-
# lib/my_app/interface.rb
|
453
|
-
self.unique_test_names = :flowname
|
454
|
-
~~~
|
455
|
-
|
456
314
|
% end
|
@@ -0,0 +1,165 @@
|
|
1
|
+
% render "layouts/guides.html" do
|
2
|
+
|
3
|
+
This guide covers aspects of the V93K program generator API that are unique to SmarTest 7.
|
4
|
+
|
5
|
+
Be sure to also consult the [V93K Common API guide](<%= path "guides/program/v93k" %>) which is also applicable
|
6
|
+
to SMT7.
|
7
|
+
|
8
|
+
The SMT7 API is enabled by default when instantiating a V93K test environment:
|
9
|
+
|
10
|
+
~~~ruby
|
11
|
+
# environment/v93k_smt7.rb
|
12
|
+
OrigenTesters::V93K.new
|
13
|
+
~~~
|
14
|
+
|
15
|
+
### Interface Considerations
|
16
|
+
|
17
|
+
#### Built-in Test Methods
|
18
|
+
|
19
|
+
SmarTest comes with a standard AC and DC test method library and Origen provides a built-in API to
|
20
|
+
generate a test flow which uses those test methods, here are some examples:
|
21
|
+
|
22
|
+
~~~ruby
|
23
|
+
# Execute a functional test
|
24
|
+
test_method = test_methods.ac_tml.ac_test.functional_test
|
25
|
+
|
26
|
+
# A basic DC voltage measurement
|
27
|
+
test_method = test_methods.dc_tml.dc_test.general_pmu force_mode: 'CURR', force_value: 100.uA
|
28
|
+
~~~
|
29
|
+
|
30
|
+
Generally the parameter naming is the lower-cased and underscored version of the name that appears
|
31
|
+
in the SMT documentation.
|
32
|
+
|
33
|
+
See the [DC library API](http://origen-sdk.org/testers/api/OrigenTesters/SmartestBasedTester/Base/TestMethods/DcTml.html)
|
34
|
+
and the [AC library API](http://origen-sdk.org/testers/api/OrigenTesters/SmartestBasedTester/Base/TestMethods/AcTml.html)
|
35
|
+
for up-to-date details of the implemented test methods and the parameter names.
|
36
|
+
|
37
|
+
However, some of these test methods are not particularly good and the recommendation from Advantest these
|
38
|
+
days is generally not to use them.
|
39
|
+
|
40
|
+
Since that means there is now a void where a universally available test method library should be, work is
|
41
|
+
underway to provide an Origen standard test method library.
|
42
|
+
The aim of this is to provide a complete generation solution from Origen so that those who have
|
43
|
+
a fairly conventional use case can rapidly build a complete test program from off-the-shelf
|
44
|
+
components, but that is still a work in progress and not yet ready for prime time use.
|
45
|
+
|
46
|
+
Many users of the V93K program generator however, are likely to want to use it in combination
|
47
|
+
with their own custom test method library, see [how to define one here](<%= path "guides/program/v93k/#Custom_Test_Methods" %>).
|
48
|
+
|
49
|
+
### Flow Considerations
|
50
|
+
|
51
|
+
By default, a top-level `Flow.create` call in Origen will generate a standalone V93K testflow file which is
|
52
|
+
internally wrapped by a flow group, like this:
|
53
|
+
|
54
|
+
~~~text
|
55
|
+
group <FLOW_NAME> {
|
56
|
+
// Flow content here
|
57
|
+
}
|
58
|
+
~~~
|
59
|
+
|
60
|
+
When such flows are imported into a master flow file, SmarTest does not provide a standard enable mechanism
|
61
|
+
to control which sub-flows are executed.
|
62
|
+
|
63
|
+
However, Origen provides the ability to generate V93K flow modules with an enable-word wrapper, thereby allowing
|
64
|
+
the top-level flow to easily enable/disable the execution of flow modules via flow variables.
|
65
|
+
|
66
|
+
By enabling this feature in the target like this:
|
67
|
+
|
68
|
+
~~~ruby
|
69
|
+
OrigenTesters::V93K.new(add_flow_enable: :enabled)
|
70
|
+
~~~
|
71
|
+
|
72
|
+
the flow will now generate like this:
|
73
|
+
|
74
|
+
~~~text
|
75
|
+
group <FLOW_NAME> {
|
76
|
+
if @<FLOW_NAME>_ENABLE == 1 {
|
77
|
+
// Flow content here
|
78
|
+
}
|
79
|
+
}
|
80
|
+
~~~
|
81
|
+
|
82
|
+
The `@<FLOW_NAME>_ENABLE` variable will be initialized to 1 in the generated variables file for the given flow,
|
83
|
+
meaning that the module will run by default if the top-level flow does nothing with this variable.
|
84
|
+
|
85
|
+
Alternatively, the variable can be initialized to off like this:
|
86
|
+
|
87
|
+
~~~ruby
|
88
|
+
OrigenTesters::V93K.new(add_flow_enable: :disabled)
|
89
|
+
~~~
|
90
|
+
|
91
|
+
Meaning that by default, the module will not run and the top-level flow must always enable it by including
|
92
|
+
`@<FLOW_NAME>_ENABLE = 1` before hitting the module.
|
93
|
+
|
94
|
+
Setting this attribute in the target means that it will apply to all flows. Alternatively, it can be set within
|
95
|
+
the flow itself (or the interface) if it is necessary to use this feature for only a subset of flows, or to override
|
96
|
+
the default setting for a particular flow.
|
97
|
+
|
98
|
+
Here is an example:
|
99
|
+
|
100
|
+
~~~ruby
|
101
|
+
Flow.create interface: 'MyApp::Interface' do
|
102
|
+
|
103
|
+
# Ensure that this flow is always generated with an enable word wrapper that is enabled by default
|
104
|
+
self.add_flow_enable = :enabled
|
105
|
+
|
106
|
+
# Some functional test
|
107
|
+
func :blah
|
108
|
+
end
|
109
|
+
~~~
|
110
|
+
|
111
|
+
This same API may be used to implement similar features on other platforms in future, but for now only the V93K is implemented.
|
112
|
+
|
113
|
+
### Test Name Uniqueness
|
114
|
+
|
115
|
+
Test (suite) naming collisions can occur when importing multiple independent test flow modules into a
|
116
|
+
V93K master flow file.
|
117
|
+
|
118
|
+
To prevent that from ever occurring, Origen will generate and append a unique signature to the end of
|
119
|
+
all test names by default, for example:
|
120
|
+
|
121
|
+
~~~ruby
|
122
|
+
t = test_suites.add("my_test_name", options)
|
123
|
+
|
124
|
+
t.name # => "my_test_name_E32ABE8"
|
125
|
+
~~~
|
126
|
+
|
127
|
+
Applications can override this default behavior by setting the corresponding test interface attribute,
|
128
|
+
`unique_test_names`, to one of the following values:
|
129
|
+
|
130
|
+
* `:signature` - this is the default which will generate a unique signature as shown in the above example
|
131
|
+
* `nil` - no value will be appended to the test names at all
|
132
|
+
* `:flowname` - the name of the current top-level flow will be appended to all test names
|
133
|
+
* Setting this attribute to any other value will append that value directly to all test names
|
134
|
+
|
135
|
+
This attribute can be set in the [environment file](<%= path 'guides/runtime/environment' %>) when instantiating
|
136
|
+
the tester:
|
137
|
+
|
138
|
+
~~~ruby
|
139
|
+
OrigenTesters::V93K.new unique_test_names: nil
|
140
|
+
~~~
|
141
|
+
|
142
|
+
This provides a single place to control the behavior within a [monolithic application architecture](<%= path 'guides/starting/architecture/#Monolithic_Application_Architecture' %>).
|
143
|
+
|
144
|
+
However, under a [distributed application architecture](<%= path 'guides/starting/architecture/#Distributed_Application_Architecture' %>)
|
145
|
+
a given test flow module may be generated under a target/environment that is controlled by a 3rd party.
|
146
|
+
|
147
|
+
In that case, it is recommended to either set it at the flow-level, which will override any setting set at the
|
148
|
+
environment-level:
|
149
|
+
|
150
|
+
~~~ruby
|
151
|
+
# program/wt1_start.rb
|
152
|
+
Flow.create interface: 'MyApp::Interface', unique_test_names: 'wt1' do
|
153
|
+
|
154
|
+
end
|
155
|
+
~~~
|
156
|
+
|
157
|
+
Or, it can be set directly within your interface logic which will take the highest precedence:
|
158
|
+
|
159
|
+
~~~ruby
|
160
|
+
# lib/my_app/interface.rb
|
161
|
+
self.unique_test_names = :flowname
|
162
|
+
~~~
|
163
|
+
|
164
|
+
|
165
|
+
% end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
% render "layouts/guides.html" do
|
2
|
+
|
3
|
+
This guide covers aspects of the V93K program generator API that are unique to SmarTest 8.
|
4
|
+
|
5
|
+
Be sure to also consult the [V93K Common API guide](<%= path "guides/program/v93k" %>) which is also applicable
|
6
|
+
to SMT8.
|
7
|
+
|
8
|
+
The SMT8 API is enabled by adding `smt_version: 8` when instantiating a V93K test environment:
|
9
|
+
|
10
|
+
~~~ruby
|
11
|
+
# environment/v93k_smt8.rb
|
12
|
+
OrigenTesters::V93K.new smt_version: 8
|
13
|
+
~~~
|
14
|
+
|
15
|
+
### Package Structure
|
16
|
+
|
17
|
+
The V93K SMT8 test program generator will create a package with the following structure:
|
18
|
+
|
19
|
+
~~~text
|
20
|
+
MyAppNamespace/
|
21
|
+
├── common/
|
22
|
+
│ └── limits.ods
|
23
|
+
├── flows/
|
24
|
+
│ ├── my_flow_1/
|
25
|
+
│ │ └── MY_SUB_FLOW.flow
|
26
|
+
│ ├── MY_FLOW_2.flow
|
27
|
+
│ └── MY_FLOW_1.flow
|
28
|
+
└── limits/
|
29
|
+
├── Main.MY_FLOW_2_TESTS.csv
|
30
|
+
└── Main.MY_FLOW_1_TESTS.csv
|
31
|
+
~~~
|
32
|
+
|
33
|
+
Here is a description of each component:
|
34
|
+
|
35
|
+
|
36
|
+
##### MyAppNamespace/
|
37
|
+
|
38
|
+
This is the name of this test program package, it should be unique and the entire directory is intended to be
|
39
|
+
dropped directly into your test program's `src/` directory.
|
40
|
+
By default, your Origen application's namespace is used, though this can be overridden within your V93K environment
|
41
|
+
file:
|
42
|
+
|
43
|
+
~~~ruby
|
44
|
+
# environment/v93k_smt8.rb
|
45
|
+
OrigenTesters::V93K.new smt_version: 8,
|
46
|
+
package_namespace: 'something_else'
|
47
|
+
~~~
|
48
|
+
|
49
|
+
##### common/limits.ods
|
50
|
+
|
51
|
+
Contains the limits tables for all flows.
|
52
|
+
|
53
|
+
##### flows/
|
54
|
+
|
55
|
+
A top-level test program flow file in Origen will generate a correspondingly named file in the `flows/` directory,
|
56
|
+
where the name of the generated file is the upper-cased version of the source file name.
|
57
|
+
If the flow imports sub-flows or contains groups, then those will be contained in a directory named after the
|
58
|
+
lower-cased version of the flow name.
|
59
|
+
|
60
|
+
##### limits/
|
61
|
+
|
62
|
+
Origen generates the limts into CSV files before combining them into `common/limits.ods`. These intermediate files
|
63
|
+
will not be used by the test program but they are kept around in case they are useful.
|
64
|
+
|
65
|
+
### Flow Integration
|
66
|
+
|
67
|
+
The generated flow(s) should be integrated into a top-level (Main) flow like this:
|
68
|
+
|
69
|
+
~~~java
|
70
|
+
flow Main {
|
71
|
+
setup {
|
72
|
+
flow MY_FLOW_1 calls MyAppNamespace.flows.MY_FLOW_1 {}
|
73
|
+
flow MY_FLOW_2 calls MyAppNamespace.flows.MY_FLOW_2 {}
|
74
|
+
}
|
75
|
+
|
76
|
+
execute {
|
77
|
+
MY_FLOW_1.execute();
|
78
|
+
MY_FLOW_2.execute();
|
79
|
+
}
|
80
|
+
}
|
81
|
+
~~~
|
82
|
+
|
83
|
+
The `add_flow_enable:` tester option [as described in the SMT7 guide](<%= path "guides/program/v93ksmt7/#Flow_Considerations" %>)
|
84
|
+
is also supported by the SMT8 generator, though it may not make as much sense to use it in that case.
|
85
|
+
It generates an `ENABLE` flow parameter which could be used something like this:
|
86
|
+
|
87
|
+
|
88
|
+
~~~java
|
89
|
+
flow Main {
|
90
|
+
setup {
|
91
|
+
flow MY_FLOW_1 calls MyAppNamespace.flows.MY_FLOW_1 {}
|
92
|
+
flow MY_FLOW_2 calls MyAppNamespace.flows.MY_FLOW_2 {}
|
93
|
+
}
|
94
|
+
|
95
|
+
execute {
|
96
|
+
// Skip FLOW_1 and run only FLOW_2
|
97
|
+
MY_FLOW_1.ENABLE = 0;
|
98
|
+
MY_FLOW_2.ENABLE = 1;
|
99
|
+
|
100
|
+
MY_FLOW_1.execute();
|
101
|
+
MY_FLOW_2.execute();
|
102
|
+
}
|
103
|
+
}
|
104
|
+
~~~
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
% end
|