origen_testers 0.16.1 → 0.17.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/version.rb +2 -2
- data/lib/origen_testers/labview_based_tester/pxie6570.rb +20 -7
- data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +12 -0
- data/lib/origen_testers/timing.rb +1 -2
- data/program/_additional_erase.rb +1 -1
- data/program/_erase.rb +7 -3
- data/program/_erase_vfy.rb +1 -1
- data/program/basic_interface.rb +1 -1
- data/program/components/_prb1_main.rb +84 -81
- data/program/components/_prb2_main.rb +2 -2
- data/program/components/_small.rb +11 -11
- data/program/components/_temp.rb +2 -2
- data/program/custom_tests.rb +3 -3
- data/program/flow_control.rb +185 -185
- data/program/prb2.rb +9 -9
- data/program/test.rb +10 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd766d675c5dc9794ac28a826929bd9ddca1c602
|
4
|
+
data.tar.gz: 6a892c83abbc5fafda9b09cc6a25ff143d704d51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fed7f00ff4816dc84fa81d977617bad88812e6acdef1bf71c0599e3362077c5f27008f226d1b9aaf4aefb0eb74123f78a63c22eec2c16d8896576a444f7c5546
|
7
|
+
data.tar.gz: fa32ef3cec160f14984c94a22f7e2a8b3f2d2790b74582eec54ae4dda37d0c877b84dce979e99189e26e2794b6f7986134c66b07fd6200e61f8732f4234c39e0
|
data/config/version.rb
CHANGED
@@ -7,8 +7,8 @@ module OrigenTesters
|
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@pat_extension = 'digipatsrc'
|
10
|
-
@
|
11
|
-
@
|
10
|
+
@capture_history = {}
|
11
|
+
@source_history = {}
|
12
12
|
@global_label_export = []
|
13
13
|
@called_subroutines = []
|
14
14
|
@default_capture_wave_name = 'default_capture_waveform'
|
@@ -17,6 +17,8 @@ module OrigenTesters
|
|
17
17
|
|
18
18
|
# Internal method called by Origen
|
19
19
|
def pattern_header(options = {})
|
20
|
+
microcode "// source count: #{@source_history[:count]}" if @source_history[:started]
|
21
|
+
microcode "// capture count: #{@capture_history[:count]}" if @capture_history[:started]
|
20
22
|
microcode 'file_format_version 1.0;'
|
21
23
|
start_label = "#{options[:pattern]}_st"
|
22
24
|
microcode "export #{start_label};"
|
@@ -41,7 +43,7 @@ module OrigenTesters
|
|
41
43
|
# Internal method called by Origen
|
42
44
|
def pattern_footer(options = {})
|
43
45
|
# add capture/source stop to the end of the pattern
|
44
|
-
cycle microcode: 'capture_stop' if @
|
46
|
+
cycle microcode: 'capture_stop' if @capture_history[:started]
|
45
47
|
cycle microcode: 'halt'
|
46
48
|
microcode '}'
|
47
49
|
end
|
@@ -141,15 +143,17 @@ module OrigenTesters
|
|
141
143
|
cur_pin_state = nil
|
142
144
|
if overlay_options.key?(:pins)
|
143
145
|
overlay_options = { change_data: true }.merge(overlay_options)
|
144
|
-
unless @
|
146
|
+
unless @source_history[:started]
|
145
147
|
add_microcode_to_first_vec "source_start(#{@default_source_wave_name})"
|
146
|
-
@
|
148
|
+
@source_history[:started] = true
|
149
|
+
@source_history[:count] = 0
|
147
150
|
end
|
148
151
|
|
149
152
|
# ensure no unwanted repeats on the source line
|
150
153
|
options[:dont_compress] = true
|
151
154
|
|
152
155
|
if overlay_options[:change_data]
|
156
|
+
@source_history[:count] += 1
|
153
157
|
if options[:microcode].nil?
|
154
158
|
options[:microcode] = 'source'
|
155
159
|
else
|
@@ -169,10 +173,11 @@ module OrigenTesters
|
|
169
173
|
|
170
174
|
# internal method to avoid needless code duplication
|
171
175
|
def add_capture_start(pins, options = {})
|
172
|
-
unless @
|
176
|
+
unless @capture_history[:started]
|
173
177
|
# add the capture start opcode to the top of the pattern
|
174
178
|
add_microcode_to_first_vec "capture_start(#{@default_capture_wave_name})"
|
175
|
-
@
|
179
|
+
@capture_history[:started] = true
|
180
|
+
@capture_history[:count] = 0
|
176
181
|
end
|
177
182
|
end
|
178
183
|
|
@@ -182,8 +187,11 @@ module OrigenTesters
|
|
182
187
|
options = { offset: 0 }.merge(options)
|
183
188
|
pins = pins.flatten.compact
|
184
189
|
|
190
|
+
repeat_count = options[:repeat].nil? ? 1 : options[:repeat]
|
191
|
+
|
185
192
|
fail 'For the PXIE6570 you must supply the pins to store/capture' if pins.empty?
|
186
193
|
add_capture_start pins, options
|
194
|
+
@capture_history[:count] += repeat_count
|
187
195
|
|
188
196
|
pins.each { |pin| pin.save; pin.capture }
|
189
197
|
preset_next_vector(microcode: 'capture') do
|
@@ -203,6 +211,11 @@ module OrigenTesters
|
|
203
211
|
response = super(pin)
|
204
212
|
response.sub('C', 'V')
|
205
213
|
end
|
214
|
+
|
215
|
+
# warn but don't fail if an api for another platform is not yet implemented
|
216
|
+
def method_missing(m, *args, &block)
|
217
|
+
Origen.log.warn "#{m} is not yet implemented for LabVIEWBasedTester::Pxie6570"
|
218
|
+
end
|
206
219
|
end
|
207
220
|
end
|
208
221
|
Pxie6570 = LabVIEWBasedTester::Pxie6570
|
@@ -16,6 +16,18 @@ module OrigenTesters
|
|
16
16
|
functional_test: {
|
17
17
|
test_name: [:string, 'Functional'],
|
18
18
|
output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
|
19
|
+
},
|
20
|
+
spec_search: {
|
21
|
+
max: [:string, nil],
|
22
|
+
method: [:string, nil],
|
23
|
+
min: [:string, nil],
|
24
|
+
output: [:string, 'None', %w(None ReportUI ShowFailOnly)],
|
25
|
+
resolution: [:string, ''],
|
26
|
+
result_pin_list: [:string, ''],
|
27
|
+
setup_pin_list: [:string, ''],
|
28
|
+
spec: [:string, nil],
|
29
|
+
step: [:string, nil],
|
30
|
+
test_name: [:string, 'SpecSearch_Test']
|
19
31
|
}
|
20
32
|
}
|
21
33
|
|
@@ -170,10 +170,9 @@ module OrigenTesters
|
|
170
170
|
# @api private
|
171
171
|
def _if_dut
|
172
172
|
if dut
|
173
|
-
|
173
|
+
yield
|
174
174
|
else
|
175
175
|
Origen.log.warning 'It looks like you are calling tester.set_timeset before the DUT is instantiated, you should avoid doing that until the dut object is available'
|
176
|
-
false
|
177
176
|
end
|
178
177
|
end
|
179
178
|
|
data/program/_erase.rb
CHANGED
@@ -12,14 +12,18 @@ Flow.create do |options|
|
|
12
12
|
# Define default options
|
13
13
|
options = { :pulses => 4,
|
14
14
|
:post_verify => true,
|
15
|
+
:number => 0,
|
15
16
|
}.merge(options)
|
16
17
|
|
17
|
-
options[:
|
18
|
-
|
18
|
+
number = options[:number]
|
19
|
+
|
20
|
+
options[:pulses].times do |i|
|
21
|
+
func :erase_all, number: number
|
22
|
+
number += i * 10
|
19
23
|
end
|
20
24
|
|
21
25
|
if options[:post_verify]
|
22
|
-
import 'erase_vfy'
|
26
|
+
import 'erase_vfy', number: number
|
23
27
|
end
|
24
28
|
|
25
29
|
end
|
data/program/_erase_vfy.rb
CHANGED
data/program/basic_interface.rb
CHANGED
@@ -1,215 +1,218 @@
|
|
1
1
|
Flow.create do |options|
|
2
2
|
# Instantiate tests via the
|
3
3
|
# interface
|
4
|
-
func 'program_ckbd', :
|
5
|
-
func 'margin_read1_ckbd'
|
4
|
+
func 'program_ckbd', tname: 'PGM_CKBD', tnum: 1000, bin: 100, soft_bin: 1100
|
5
|
+
func 'margin_read1_ckbd', number: 1010
|
6
6
|
|
7
7
|
# Control the build process based on
|
8
8
|
# the current target
|
9
9
|
if $dut.has_margin0_bug?
|
10
|
-
func 'normal_read_ckbd'
|
10
|
+
func 'normal_read_ckbd', number: 1020
|
11
11
|
else
|
12
|
-
func 'margin_read0_ckbd'
|
12
|
+
func 'margin_read0_ckbd', number: 1030
|
13
13
|
end
|
14
14
|
|
15
15
|
# Include a sub flow, example of
|
16
16
|
# parameter passing
|
17
|
-
import '../erase', :
|
17
|
+
import '../erase', pulses: 6, number: 2000
|
18
18
|
|
19
19
|
# Render an ERB template, or raw
|
20
20
|
# text file
|
21
21
|
if $tester.j750?
|
22
|
-
flow.render 'templates/j750/vt_flow', :
|
22
|
+
flow.render 'templates/j750/vt_flow', include_tifr: true
|
23
23
|
end
|
24
24
|
|
25
25
|
log 'Should be v1'
|
26
|
-
func :program_ckbd
|
26
|
+
func :program_ckbd, number: 3000
|
27
27
|
log 'Should be v2'
|
28
|
-
func :program_ckbd, :
|
28
|
+
func :program_ckbd, duration: :dynamic, number: 3010
|
29
29
|
log 'Should be v1'
|
30
|
-
func :program_ckbd
|
30
|
+
func :program_ckbd, number: 3020
|
31
31
|
log 'Should be v2'
|
32
|
-
func :program_ckbd, :
|
32
|
+
func :program_ckbd, duration: :dynamic, number: 3030
|
33
33
|
|
34
34
|
log 'Should be a v1 test instance group'
|
35
|
-
func :program_ckbd, :
|
35
|
+
func :program_ckbd, by_block: true, number: 3040
|
36
36
|
log 'Should be a v2 test instance group'
|
37
|
-
func :program_ckbd, :
|
37
|
+
func :program_ckbd, by_block: true, duration: :dynamic, number: 3050
|
38
38
|
log 'Should be a v1 test instance group'
|
39
|
-
func :program_ckbd, :
|
39
|
+
func :program_ckbd, by_block: true, number: 3060
|
40
40
|
log 'Should be a v2 test instance group'
|
41
|
-
func :program_ckbd, :
|
41
|
+
func :program_ckbd, by_block: true, duration: :dynamic, number: 3070
|
42
42
|
|
43
43
|
# Test job conditions
|
44
|
-
func :p1_only_test, :
|
44
|
+
func :p1_only_test, if_job: :p1, number: 3080
|
45
45
|
if_job [:p1, :p2] do
|
46
|
-
func :p1_or_p2_only_test
|
46
|
+
func :p1_or_p2_only_test, number: 3090
|
47
47
|
end
|
48
|
-
func :not_p1_test, :
|
49
|
-
func :not_p1_or_p2_test, :
|
48
|
+
func :not_p1_test, unless_job: :p1, number: 3100
|
49
|
+
func :not_p1_or_p2_test, unless_job: [:p1, :p2], number: 3110
|
50
50
|
unless_job [:p1, :p2] do
|
51
|
-
func :another_not_p1_or_p2_test
|
51
|
+
func :another_not_p1_or_p2_test, number: 3120
|
52
52
|
end
|
53
53
|
|
54
54
|
log 'Verify that a test with an external instance works'
|
55
|
-
por
|
55
|
+
por number: 3130
|
56
56
|
|
57
57
|
log 'Verify that a request to use the current context works'
|
58
|
-
func :erase_all, :
|
59
|
-
func :erase_all, :
|
58
|
+
func :erase_all, if_job: :p1, number: 3140 # Job should be P1
|
59
|
+
func :erase_all, context: :current, number: 3150 # Job should be P1
|
60
60
|
unless_job :p2 do
|
61
|
-
func :erase_all, :
|
62
|
-
func :erase_all
|
61
|
+
func :erase_all, context: :current, number: 3160 # Job should be P1
|
62
|
+
func :erase_all, number: 3170 # Job should be !P2
|
63
63
|
end
|
64
64
|
|
65
65
|
# Deliver an initial erase pulse
|
66
|
-
func :erase_all
|
66
|
+
func :erase_all, number: 3180
|
67
67
|
|
68
68
|
# Deliver additional erase pulses as required until it verifies, maximum of 5 additional pulses
|
69
|
+
number = 3200
|
69
70
|
5.times do |x|
|
70
71
|
# Assign a unique id attribute to each verify so that we know which one we are talking about when
|
71
72
|
# making other tests dependent on it.
|
72
73
|
# When Origen sees the if_failed dependency on a future test it will be smart enough to inhibit the binning
|
73
74
|
# on this test without having to explicitly declare that.
|
74
|
-
func :margin_read1_all1, :
|
75
|
+
func :margin_read1_all1, id: "erase_vfy_#{x}", number: number
|
76
|
+
number += 10
|
75
77
|
# Run this test only if the given verify failed
|
76
|
-
func :erase_all, :
|
78
|
+
func :erase_all, if_failed: "erase_vfy_#{x}", number: number
|
79
|
+
number += 10
|
77
80
|
end
|
78
81
|
|
79
82
|
# A final verify to set the binning
|
80
|
-
func :margin_read1_all1
|
83
|
+
func :margin_read1_all1, number: 4000
|
81
84
|
|
82
85
|
log 'Test if enable'
|
83
|
-
func :erase_all, :
|
86
|
+
func :erase_all, if_enable: 'do_erase', number: 4010
|
84
87
|
|
85
88
|
if_enable 'do_erase' do
|
86
|
-
func :erase_all
|
89
|
+
func :erase_all, number: 4020
|
87
90
|
end
|
88
91
|
|
89
92
|
log 'Test unless enable'
|
90
|
-
func :erase_all, :
|
93
|
+
func :erase_all, unless_enable: 'no_extra_erase', number: 4030
|
91
94
|
|
92
95
|
unless_enable 'no_extra_erase' do
|
93
|
-
func :erase_all
|
94
|
-
func :erase_all
|
96
|
+
func :erase_all, number: 4040
|
97
|
+
func :erase_all, number: 4050
|
95
98
|
end
|
96
99
|
|
97
|
-
func :erase_all
|
98
|
-
func :erase_all
|
100
|
+
func :erase_all, number: 4060
|
101
|
+
func :erase_all, number: 4070
|
99
102
|
|
100
103
|
log 'Test if_passed'
|
101
|
-
func :erase_all, :
|
102
|
-
func :erase_all, :
|
104
|
+
func :erase_all, id: 'erase_passed_1', number: 4080
|
105
|
+
func :erase_all, id: 'erase_passed_2', number: 4090
|
103
106
|
|
104
|
-
func :margin_read1_all1, :
|
107
|
+
func :margin_read1_all1, if_passed: 'erase_passed_1', number: 4100
|
105
108
|
if_passed 'erase_passed_2' do
|
106
|
-
func :margin_read1_all1
|
109
|
+
func :margin_read1_all1, number: 4110
|
107
110
|
end
|
108
111
|
|
109
112
|
log 'Test unless_passed'
|
110
|
-
func :erase_all, :
|
111
|
-
func :erase_all, :
|
113
|
+
func :erase_all, id: 'erase_passed_3', number: 4120
|
114
|
+
func :erase_all, id: 'erase_passed_4', number: 4130
|
112
115
|
|
113
|
-
func :margin_read1_all1, :
|
116
|
+
func :margin_read1_all1, unless_passed: 'erase_passed_3', number: 4140
|
114
117
|
unless_passed 'erase_passed_4' do
|
115
|
-
func :margin_read1_all1
|
118
|
+
func :margin_read1_all1, number: 4150
|
116
119
|
end
|
117
120
|
|
118
121
|
log 'Test if_failed'
|
119
|
-
func :erase_all, :
|
120
|
-
func :erase_all, :
|
122
|
+
func :erase_all, id: 'erase_failed_1', number: 4160
|
123
|
+
func :erase_all, id: 'erase_failed_2', number: 4170
|
121
124
|
|
122
|
-
func :margin_read1_all1, :
|
125
|
+
func :margin_read1_all1, if_failed: 'erase_failed_1', number: 4180
|
123
126
|
if_failed 'erase_failed_2' do
|
124
|
-
func :margin_read1_all1
|
127
|
+
func :margin_read1_all1, number: 4190
|
125
128
|
end
|
126
129
|
|
127
130
|
log 'Test unless_failed'
|
128
|
-
func :erase_all, :
|
129
|
-
func :erase_all, :
|
131
|
+
func :erase_all, id: 'erase_failed_3', number: 4200
|
132
|
+
func :erase_all, id: 'erase_failed_4', number: 4210
|
130
133
|
|
131
|
-
func :margin_read1_all1, :
|
134
|
+
func :margin_read1_all1, unless_failed: 'erase_failed_3', number: 4220
|
132
135
|
unless_failed 'erase_failed_4' do
|
133
|
-
func :margin_read1_all1
|
136
|
+
func :margin_read1_all1, number: 4230
|
134
137
|
end
|
135
138
|
|
136
139
|
log 'Test if_ran'
|
137
|
-
func :erase_all, :
|
138
|
-
func :erase_all, :
|
140
|
+
func :erase_all, id: 'erase_ran_1', number: 4240
|
141
|
+
func :erase_all, id: 'erase_ran_2', number: 4250
|
139
142
|
|
140
|
-
func :margin_read1_all1, :
|
143
|
+
func :margin_read1_all1, if_ran: 'erase_ran_1', number: 4260
|
141
144
|
if_ran 'erase_ran_2' do
|
142
|
-
func :margin_read1_all1
|
145
|
+
func :margin_read1_all1, number: 4270
|
143
146
|
end
|
144
147
|
|
145
148
|
log 'Test unless_ran'
|
146
|
-
func :erase_all, :
|
147
|
-
func :erase_all, :
|
149
|
+
func :erase_all, id: 'erase_ran_3', number: 4280
|
150
|
+
func :erase_all, id: 'erase_ran_4', number: 4290
|
148
151
|
|
149
|
-
func :margin_read1_all1, :
|
152
|
+
func :margin_read1_all1, unless_ran: 'erase_ran_3', number: 4300
|
150
153
|
unless_ran 'erase_ran_4' do
|
151
|
-
func :margin_read1_all1
|
154
|
+
func :margin_read1_all1, number: 4310
|
152
155
|
end
|
153
156
|
|
154
157
|
log 'Verify that job context wraps import'
|
155
158
|
if_job :fr do
|
156
|
-
import '../erase'
|
159
|
+
import '../erase', number: 5000
|
157
160
|
end
|
158
161
|
|
159
162
|
log 'Verify that job context wraps enable block within an import'
|
160
163
|
if_job :fr do
|
161
|
-
import '../additional_erase'
|
162
|
-
import '../additional_erase', :
|
164
|
+
import '../additional_erase', number: 5500
|
165
|
+
import '../additional_erase', force: true, number: 5600
|
163
166
|
end
|
164
167
|
|
165
168
|
log 'Verify that flow.cz works...'
|
166
|
-
func :margin_read1_all1, :
|
169
|
+
func :margin_read1_all1, pin_levels: :cz, cz_setup: 'vbplus_sweep', number: 5700
|
167
170
|
|
168
171
|
log 'Verify that flow.cz works with enable words'
|
169
172
|
if_enable 'usb_xcvr_cz' do
|
170
|
-
func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vil_cz'
|
171
|
-
func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vih_cz'
|
173
|
+
func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vil_cz', number: 5710
|
174
|
+
func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vih_cz', number: 5720
|
172
175
|
end
|
173
176
|
|
174
|
-
func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vil_cz', if_enable: 'usb_xcvr_cz'
|
175
|
-
func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vih_cz', if_enable: 'usb_xcvr_cz'
|
177
|
+
func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vil_cz', if_enable: 'usb_xcvr_cz', number: 5730
|
178
|
+
func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vih_cz', if_enable: 'usb_xcvr_cz', number: 5740
|
176
179
|
|
177
180
|
log 'Verify that MTO template works...'
|
178
|
-
mto_memory :mto_read1_all1
|
181
|
+
mto_memory :mto_read1_all1, number: 5750
|
179
182
|
|
180
183
|
if tester.uflex?
|
181
184
|
log 'import statement'
|
182
|
-
import 'temp'
|
185
|
+
import 'temp', number: 5800
|
183
186
|
|
184
187
|
log 'direct call'
|
185
188
|
|
186
|
-
meas :bgap_voltage_meas, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45
|
187
|
-
meas :bgap_voltage_meas1
|
189
|
+
meas :bgap_voltage_meas, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, number: 5910
|
190
|
+
meas :bgap_voltage_meas1, number: 5920
|
188
191
|
end
|
189
192
|
|
190
193
|
if tester.j750?
|
191
|
-
meas :lo_voltage, tnum: 1150, bin: 95, soft_bin: 5
|
192
|
-
meas :hi_voltage, pins: :hi_v, tnum: 1160, bin: 96, soft_bin: 6
|
193
|
-
meas :ps_leakage, pins: :power, tnum: 1170, bin: 97, soft_bin: 6
|
194
|
+
meas :lo_voltage, tnum: 1150, bin: 95, soft_bin: 5, number: 5920
|
195
|
+
meas :hi_voltage, pins: :hi_v, tnum: 1160, bin: 96, soft_bin: 6, number: 5930
|
196
|
+
meas :ps_leakage, pins: :power, tnum: 1170, bin: 97, soft_bin: 6, number: 5940
|
194
197
|
end
|
195
198
|
|
196
199
|
log 'Speed binning example bug from video 5'
|
197
200
|
group "200Mhz Tests", id: :g200 do
|
198
|
-
test :test200_1
|
199
|
-
test :test200_2
|
200
|
-
test :test200_3
|
201
|
+
test :test200_1, number: 5950
|
202
|
+
test :test200_2, number: 5960
|
203
|
+
test :test200_3, number: 5970
|
201
204
|
end
|
202
205
|
|
203
206
|
group "100Mhz Tests", if_failed: :g200, id: :g100 do
|
204
|
-
test :test100_1, bin: 5
|
205
|
-
test :test100_2, bin: 5
|
206
|
-
test :test100_3, bin: 5
|
207
|
+
test :test100_1, bin: 5, number: 5980
|
208
|
+
test :test100_2, bin: 5, number: 5990
|
209
|
+
test :test100_3, bin: 5, number: 6000
|
207
210
|
end
|
208
211
|
|
209
212
|
pass 2, if_ran: :g100
|
210
213
|
|
211
214
|
log 'Test node optimization within an if_failed branch'
|
212
|
-
func :some_func_test, id: :sft1
|
215
|
+
func :some_func_test, id: :sft1, number: 6010
|
213
216
|
|
214
217
|
if_failed :sft1 do
|
215
218
|
bin 10, if_flag: "Alarm"
|
@@ -1,15 +1,15 @@
|
|
1
1
|
Flow.create do |options|
|
2
2
|
|
3
|
-
test :test1, if_enable: :small_flow
|
4
|
-
test :test2, if_enable: :small_flow
|
5
|
-
test :test1
|
6
|
-
test :test1
|
7
|
-
test :test1
|
8
|
-
test :test1
|
9
|
-
test :test1
|
10
|
-
test :test1
|
11
|
-
test :test1
|
12
|
-
test :test1, if_enable: :small_flow
|
13
|
-
test :test2, if_enable: :small_flow
|
3
|
+
test :test1, if_enable: :small_flow, number: options[:number] + 10
|
4
|
+
test :test2, if_enable: :small_flow, number: options[:number] + 20
|
5
|
+
test :test1, number: options[:number] + 30
|
6
|
+
test :test1, number: options[:number] + 40
|
7
|
+
test :test1, number: options[:number] + 50
|
8
|
+
test :test1, number: options[:number] + 60
|
9
|
+
test :test1, number: options[:number] + 70
|
10
|
+
test :test1, number: options[:number] + 80
|
11
|
+
test :test1, number: options[:number] + 90
|
12
|
+
test :test1, if_enable: :small_flow, number: options[:number] + 100
|
13
|
+
test :test2, if_enable: :small_flow, number: options[:number] + 110
|
14
14
|
|
15
15
|
end
|
data/program/components/_temp.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Flow.create do |options|
|
2
2
|
|
3
|
-
meas :bgap_voltage_meas, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45
|
4
|
-
meas :bgap_voltage_meas1
|
3
|
+
meas :bgap_voltage_meas, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, number: options[:number] + 10
|
4
|
+
meas :bgap_voltage_meas1, number: options[:number] + 20
|
5
5
|
|
6
6
|
end
|
data/program/custom_tests.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# This flow is used to test custom test method API
|
2
2
|
Flow.create interface: 'OrigenTesters::Test::CustomTestInterface' do
|
3
3
|
|
4
|
-
custom :test1
|
4
|
+
custom :test1, number: 30000
|
5
5
|
|
6
|
-
custom :test2
|
6
|
+
custom :test2, number: 30010
|
7
7
|
|
8
|
-
custom :test3
|
8
|
+
custom :test3, number: 30020
|
9
9
|
|
10
10
|
end
|
data/program/flow_control.rb
CHANGED
@@ -8,244 +8,244 @@ Flow.create interface: 'OrigenTesters::Test::Interface', flow_name: "Flow Contro
|
|
8
8
|
self.resources_filename = 'flow_control'
|
9
9
|
|
10
10
|
log "Test that if_failed works"
|
11
|
-
func :read1, id: :t1, bin: 10
|
12
|
-
func :erase1, if_failed: :t1, bin: 12
|
11
|
+
func :read1, id: :t1, bin: 10, number: 50000
|
12
|
+
func :erase1, if_failed: :t1, bin: 12, number: 50010
|
13
13
|
|
14
14
|
log "Test the block form of if_failed"
|
15
|
-
func :read2, id: :t2, bin: 10
|
15
|
+
func :read2, id: :t2, bin: 10, number: 50020
|
16
16
|
if_failed :t2 do
|
17
|
-
func :erase2
|
18
|
-
func :erase2
|
17
|
+
func :erase2, number: 50030
|
18
|
+
func :erase2, number: 50040
|
19
19
|
end
|
20
20
|
|
21
21
|
log "Test that if_passed works"
|
22
|
-
func :read1, id: :t3, bin: 10
|
23
|
-
func :pgm1, if_passed: :t3
|
22
|
+
func :read1, id: :t3, bin: 10, number: 50050
|
23
|
+
func :pgm1, if_passed: :t3, number: 50060
|
24
24
|
|
25
25
|
log "Test the block form of if_passed"
|
26
|
-
func :read2, id: :t4, bin: 10
|
26
|
+
func :read2, id: :t4, bin: 10, number: 50070
|
27
27
|
if_passed :t4 do
|
28
|
-
func :pgm1
|
29
|
-
func :pgm1
|
28
|
+
func :pgm1, number: 50080
|
29
|
+
func :pgm1, number: 50090
|
30
30
|
end
|
31
31
|
|
32
32
|
log "Test that if_ran works"
|
33
|
-
func :pgm, id: :t5, bin: 10
|
34
|
-
func :read0, if_ran: :t5
|
33
|
+
func :pgm, id: :t5, bin: 10, number: 50100
|
34
|
+
func :read0, if_ran: :t5, number: 50110
|
35
35
|
|
36
36
|
log "Test the block form of if_ran"
|
37
|
-
func :pgm, id: :t6, bin: 10
|
37
|
+
func :pgm, id: :t6, bin: 10, number: 50120
|
38
38
|
if_ran :t6 do
|
39
|
-
func :read0
|
40
|
-
func :read0
|
39
|
+
func :read0, number: 50130
|
40
|
+
func :read0, number: 50140
|
41
41
|
end
|
42
42
|
|
43
43
|
log "Test that unless_ran works"
|
44
|
-
func :pgm, id: :t7, bin: 10
|
45
|
-
func :read0, unless_ran: :t7
|
44
|
+
func :pgm, id: :t7, bin: 10, number: 50150
|
45
|
+
func :read0, unless_ran: :t7, number: 50160
|
46
46
|
|
47
47
|
log "Test the block form of unless_ran"
|
48
|
-
func :pgm, id: :t8, bin: 10
|
48
|
+
func :pgm, id: :t8, bin: 10, number: 50170
|
49
49
|
unless_ran :t8 do
|
50
|
-
func :read0
|
51
|
-
func :read0
|
50
|
+
func :read0, number: 50180
|
51
|
+
func :read0, number: 50190
|
52
52
|
end
|
53
53
|
|
54
54
|
log "Test that if_job works"
|
55
|
-
func :cold_test, if_job: :fc
|
55
|
+
func :cold_test, if_job: :fc, number: 50200
|
56
56
|
|
57
57
|
log "Test the block form of if_job"
|
58
58
|
if_job [:prb1, :prb2] do
|
59
|
-
func :probe_only_test1
|
60
|
-
func :probe_only_test2
|
59
|
+
func :probe_only_test1, number: 50210
|
60
|
+
func :probe_only_test2, number: 50220
|
61
61
|
end
|
62
62
|
|
63
63
|
log "Test that the block form of if_job can be overridden, prb9 should be removed"
|
64
64
|
if_job [:prb1, :prb2, :prb9] do
|
65
|
-
func :probe_only_test1
|
65
|
+
func :probe_only_test1, number: 50230
|
66
66
|
end
|
67
67
|
|
68
68
|
log "Test that unless_job works"
|
69
|
-
func :warmish_test, unless_job: :fc
|
69
|
+
func :warmish_test, unless_job: :fc, number: 50240
|
70
70
|
|
71
71
|
log "Test the block form of unless_job"
|
72
72
|
unless_job [:prb1, :prb2] do
|
73
|
-
func :ft_only_test1
|
74
|
-
func :ft_only_test2
|
73
|
+
func :ft_only_test1, number: 50250
|
74
|
+
func :ft_only_test2, number: 50260
|
75
75
|
end
|
76
76
|
|
77
77
|
log "Test that if_enable works"
|
78
|
-
func :extra_test, if_enable: :extras
|
78
|
+
func :extra_test, if_enable: :extras, number: 50270
|
79
79
|
|
80
80
|
log "Test the block form of if_enable"
|
81
81
|
if_enable :cz do
|
82
|
-
func :cz_test1
|
83
|
-
func :cz_test2
|
82
|
+
func :cz_test1, number: 50280
|
83
|
+
func :cz_test2, number: 50290
|
84
84
|
end
|
85
85
|
|
86
86
|
log "Test that unless_enable works"
|
87
|
-
func :long_test, unless_enable: :quick
|
87
|
+
func :long_test, unless_enable: :quick, number: 50300
|
88
88
|
|
89
89
|
log "Test the block form of unless_enable"
|
90
90
|
unless_enable :quick do
|
91
|
-
func :long_test1
|
92
|
-
func :long_test2
|
91
|
+
func :long_test1, number: 50310
|
92
|
+
func :long_test2, number: 50320
|
93
93
|
end
|
94
94
|
|
95
95
|
log "Test that if_any_failed works"
|
96
|
-
func :test1, id: :ifa1
|
97
|
-
func :test2, id: :ifa2
|
98
|
-
func :test3, if_any_failed: [:ifa1, :ifa2]
|
96
|
+
func :test1, id: :ifa1, number: 50330
|
97
|
+
func :test2, id: :ifa2, number: 50340
|
98
|
+
func :test3, if_any_failed: [:ifa1, :ifa2], number: 50350
|
99
99
|
|
100
100
|
log "Test the block form of if_any_failed"
|
101
|
-
func :test1, id: :oof_passcode1
|
102
|
-
func :test2, id: :oof_passcode2
|
101
|
+
func :test1, id: :oof_passcode1, number: 50360
|
102
|
+
func :test2, id: :oof_passcode2, number: 50370
|
103
103
|
if_any_failed :oof_passcode1, :oof_passcode2 do
|
104
|
-
func :test3
|
105
|
-
func :test4
|
104
|
+
func :test3, number: 50380
|
105
|
+
func :test4, number: 50390
|
106
106
|
end
|
107
107
|
|
108
108
|
log "Test that if_all_failed works"
|
109
|
-
func :test1, id: :ifall1
|
110
|
-
func :test2, id: :ifall2
|
111
|
-
func :test3, if_all_failed: [:ifall1, :ifall2]
|
109
|
+
func :test1, id: :ifall1, number: 50400
|
110
|
+
func :test2, id: :ifall2, number: 50410
|
111
|
+
func :test3, if_all_failed: [:ifall1, :ifall2], number: 50420
|
112
112
|
|
113
113
|
log "Test the block form of if_all_failed"
|
114
|
-
func :test1, id: :ifallb1
|
115
|
-
func :test2, id: :ifallb2
|
114
|
+
func :test1, id: :ifallb1, number: 50430
|
115
|
+
func :test2, id: :ifallb2, number: 50440
|
116
116
|
if_all_failed [:ifallb1, :ifallb2] do
|
117
|
-
func :test3
|
118
|
-
func :test4
|
117
|
+
func :test3, number: 50450
|
118
|
+
func :test4, number: 50460
|
119
119
|
end
|
120
120
|
|
121
121
|
log "Test that if_any_passed works"
|
122
|
-
func :test1, id: :ifap1
|
123
|
-
func :test2, id: :ifap2
|
124
|
-
func :test3, if_any_passed: [:ifap1, :ifap2]
|
122
|
+
func :test1, id: :ifap1, number: 50470
|
123
|
+
func :test2, id: :ifap2, number: 50480
|
124
|
+
func :test3, if_any_passed: [:ifap1, :ifap2], number: 50490
|
125
125
|
|
126
126
|
log "Test the block form of if_any_passed"
|
127
|
-
func :test1, id: :ifapb1
|
128
|
-
func :test2, id: :ifapb2
|
127
|
+
func :test1, id: :ifapb1, number: 50500
|
128
|
+
func :test2, id: :ifapb2, number: 50510
|
129
129
|
if_any_passed :ifapb1, :ifapb2 do
|
130
|
-
func :test3
|
131
|
-
func :test4
|
130
|
+
func :test3, number: 50520
|
131
|
+
func :test4, number: 50530
|
132
132
|
end
|
133
133
|
|
134
134
|
log "Test that if_all_passed works"
|
135
|
-
func :test1, id: :ifallp1
|
136
|
-
func :test2, id: :ifallp2
|
137
|
-
func :test3, if_all_passed: [:ifallp1, :ifallp2]
|
135
|
+
func :test1, id: :ifallp1, number: 50540
|
136
|
+
func :test2, id: :ifallp2, number: 50550
|
137
|
+
func :test3, if_all_passed: [:ifallp1, :ifallp2], number: 50560
|
138
138
|
|
139
139
|
log "Test the block form of if_all_passed"
|
140
|
-
func :test1, id: :ifallpb1
|
141
|
-
func :test2, id: :ifallpb2
|
140
|
+
func :test1, id: :ifallpb1, number: 50570
|
141
|
+
func :test2, id: :ifallpb2, number: 50580
|
142
142
|
if_all_passed :ifallpb1, :ifallpb2 do
|
143
|
-
func :test3
|
144
|
-
func :test4
|
143
|
+
func :test3, number: 50590
|
144
|
+
func :test4, number: 50600
|
145
145
|
end
|
146
146
|
|
147
147
|
log "Test that group-level dependencies work"
|
148
148
|
group "grp1", id: :grp1 do
|
149
|
-
func :grp1_test1, bin: 5
|
150
|
-
func :grp1_test2, bin: 5
|
151
|
-
func :grp1_test3, bin: 5
|
149
|
+
func :grp1_test1, bin: 5, number: 50610
|
150
|
+
func :grp1_test2, bin: 5, number: 50620
|
151
|
+
func :grp1_test3, bin: 5, number: 50630
|
152
152
|
end
|
153
153
|
|
154
154
|
group "grp2", if_failed: :grp1 do
|
155
|
-
func :grp2_test1, bin: 5
|
156
|
-
func :grp2_test2, bin: 5
|
157
|
-
func :grp2_test3, bin: 5
|
155
|
+
func :grp2_test1, bin: 5, number: 50640
|
156
|
+
func :grp2_test2, bin: 5, number: 50650
|
157
|
+
func :grp2_test3, bin: 5, number: 50660
|
158
158
|
end
|
159
159
|
|
160
160
|
log "Another group-level dependencies test based on a real life use case"
|
161
|
-
func :gt1, bin: 90
|
161
|
+
func :gt1, bin: 90, number: 50670
|
162
162
|
group "gt_grp1", id: :gt_grp1 do
|
163
|
-
func :gt_grp1_test1, bin: 90, id: :gt_grp1
|
164
|
-
func :gt_grp1_test2, bin: 90, id: :gt_grp1
|
163
|
+
func :gt_grp1_test1, bin: 90, id: :gt_grp1, number: 50680
|
164
|
+
func :gt_grp1_test2, bin: 90, id: :gt_grp1, number: 50690
|
165
165
|
end
|
166
|
-
func :gt2, bin: 90, if_failed: :gt_grp1
|
166
|
+
func :gt2, bin: 90, if_failed: :gt_grp1, number: 50700
|
167
167
|
group "gt_grp2", id: :gt_grp2, if_failed: :gt_grp1 do
|
168
168
|
# The if_failed and IDs here are redundant, but it should still generate
|
169
169
|
# valid output if an application were to do this
|
170
|
-
func :gt_grp2_test1, bin: 90, id: :gt_grp2, if_failed: :gt_grp1
|
171
|
-
func :gt_grp2_test2, bin: 90, id: :gt_grp2, if_failed: :gt_grp1
|
170
|
+
func :gt_grp2_test1, bin: 90, id: :gt_grp2, if_failed: :gt_grp1, number: 50710
|
171
|
+
func :gt_grp2_test2, bin: 90, id: :gt_grp2, if_failed: :gt_grp1, number: 50720
|
172
172
|
end
|
173
|
-
func :gt3, bin: 90, if_failed: :gt_grp2
|
173
|
+
func :gt3, bin: 90, if_failed: :gt_grp2, number: 50730
|
174
174
|
|
175
175
|
log "Test that nested groups work"
|
176
176
|
group "level1" do
|
177
|
-
func :lev1_test1, bin: 5
|
178
|
-
func :lev1_test2, bin: 5
|
179
|
-
func :lev1_test3, id: :l1t3, bin: 10
|
180
|
-
func :lev1_test4, if_failed: :l1t3, bin: 12
|
181
|
-
func :lev1_test5, id: :l1t5, bin: 12
|
177
|
+
func :lev1_test1, bin: 5, number: 50740
|
178
|
+
func :lev1_test2, bin: 5, number: 50750
|
179
|
+
func :lev1_test3, id: :l1t3, bin: 10, number: 50760
|
180
|
+
func :lev1_test4, if_failed: :l1t3, bin: 12, number: 50770
|
181
|
+
func :lev1_test5, id: :l1t5, bin: 12, number: 50780
|
182
182
|
group "level2" do
|
183
|
-
func :lev2_test1, bin: 5
|
184
|
-
func :lev2_test2, bin: 5
|
185
|
-
func :lev2_test3, id: :l2t3, bin: 10
|
186
|
-
func :lev2_test4, if_failed: :l2t3, bin: 12
|
183
|
+
func :lev2_test1, bin: 5, number: 50790
|
184
|
+
func :lev2_test2, bin: 5, number: 50800
|
185
|
+
func :lev2_test3, id: :l2t3, bin: 10, number: 50810
|
186
|
+
func :lev2_test4, if_failed: :l2t3, bin: 12, number: 50820
|
187
187
|
# Test dependency on a test from another group
|
188
|
-
func :lev2_test5, if_failed: :l1t5, bin: 12
|
188
|
+
func :lev2_test5, if_failed: :l1t5, bin: 12, number: 50830
|
189
189
|
end
|
190
190
|
end
|
191
191
|
|
192
192
|
log "Test nested conditions on a group"
|
193
|
-
func :nt1, bin: 10, id: :nt1
|
193
|
+
func :nt1, bin: 10, id: :nt1, number: 50840
|
194
194
|
if_failed :nt1 do
|
195
|
-
func :nt2, bin: 11, id: :nt2
|
195
|
+
func :nt2, bin: 11, id: :nt2, number: 50850
|
196
196
|
group "ntg1", id: :ntg1, if_passed: :nt2 do
|
197
|
-
func :nt3, bin: 12
|
197
|
+
func :nt3, bin: 12, number: 50860
|
198
198
|
end
|
199
199
|
group "ntg2", id: :ntg2, if_failed: :nt2 do
|
200
|
-
func :nt4, bin: 13
|
200
|
+
func :nt4, bin: 13, number: 50870
|
201
201
|
end
|
202
202
|
end
|
203
203
|
|
204
204
|
log "Embedded conditional tests 1"
|
205
|
-
func :test1, id: :ect1_1
|
205
|
+
func :test1, id: :ect1_1, number: 50880
|
206
206
|
if_failed :ect1_1 do
|
207
|
-
func :test2
|
208
|
-
func :test3, id: :ect1_3
|
207
|
+
func :test2, number: 50890
|
208
|
+
func :test3, id: :ect1_3, number: 50900
|
209
209
|
if_failed :ect1_3 do
|
210
|
-
func :test4
|
210
|
+
func :test4, number: 50910
|
211
211
|
end
|
212
212
|
end
|
213
213
|
|
214
214
|
log "Embedded conditional tests 2"
|
215
|
-
func :test1, id: :ect2_1
|
216
|
-
func :test2, id: :ect2_2
|
215
|
+
func :test1, id: :ect2_1, number: 50920
|
216
|
+
func :test2, id: :ect2_2, number: 50930
|
217
217
|
if_failed :ect2_1 do
|
218
|
-
func :test3, if_failed: :ect2_2
|
219
|
-
func :test4, if_enable: "en1"
|
218
|
+
func :test3, if_failed: :ect2_2, number: 50940
|
219
|
+
func :test4, if_enable: "en1", number: 50950
|
220
220
|
if_enable "en2" do
|
221
|
-
func :test5
|
222
|
-
func :test6
|
221
|
+
func :test5, number: 50960
|
222
|
+
func :test6, number: 50970
|
223
223
|
end
|
224
|
-
func :test7
|
224
|
+
func :test7, number: 50980
|
225
225
|
end
|
226
|
-
func :test8
|
226
|
+
func :test8, number: 51000
|
227
227
|
|
228
228
|
log "Nested enable word test 1"
|
229
229
|
if_enable "word1" do
|
230
|
-
func :test1
|
230
|
+
func :test1, number: 51010
|
231
231
|
if_enable "word2" do
|
232
|
-
func :test2
|
232
|
+
func :test2, number: 51020
|
233
233
|
end
|
234
234
|
end
|
235
235
|
|
236
236
|
log "Nested enable word test 2"
|
237
237
|
if_enable "word1" do
|
238
|
-
func :test1
|
238
|
+
func :test1, number: 51030
|
239
239
|
unless_enable "word2" do
|
240
|
-
func :test2
|
240
|
+
func :test2, number: 51040
|
241
241
|
end
|
242
242
|
end
|
243
243
|
|
244
244
|
log "Nested enable word test 3"
|
245
245
|
if_enable ["word1", "word2"] do
|
246
|
-
func :test1
|
246
|
+
func :test1, number: 51050
|
247
247
|
if_enable "word3" do
|
248
|
-
func :test2
|
248
|
+
func :test2, number: 51060
|
249
249
|
end
|
250
250
|
end
|
251
251
|
|
@@ -256,126 +256,126 @@ Flow.create interface: 'OrigenTesters::Test::Interface', flow_name: "Flow Contro
|
|
256
256
|
|
257
257
|
log "Test enable words that wrap a lot of tests"
|
258
258
|
if_enable :word1 do
|
259
|
-
5.times do
|
260
|
-
func :test1
|
259
|
+
5.times do |i|
|
260
|
+
func :test1, number: 51100 + (i * 10)
|
261
261
|
end
|
262
262
|
if_enable :word2 do
|
263
|
-
4.times do
|
264
|
-
func :test1
|
263
|
+
4.times do |i|
|
264
|
+
func :test1, number: 51200 + (i * 10)
|
265
265
|
end
|
266
|
-
func :test1, enable: :word3
|
266
|
+
func :test1, enable: :word3, number: 51300
|
267
267
|
end
|
268
268
|
end
|
269
269
|
|
270
270
|
if tester.j750?
|
271
271
|
log "This should generate an AND flag"
|
272
|
-
func :test1, id: :at1
|
273
|
-
func :test2, id: :at2
|
272
|
+
func :test1, id: :at1, number: 51310
|
273
|
+
func :test2, id: :at2, number: 51320
|
274
274
|
if_failed :at1 do
|
275
|
-
func :test3, if_failed: :at2
|
275
|
+
func :test3, if_failed: :at2, number: 51330
|
276
276
|
# This should re-use the AND flag, rather than create a duplicate
|
277
|
-
func :test4, if_failed: :at2
|
277
|
+
func :test4, if_failed: :at2, number: 51340
|
278
278
|
end
|
279
279
|
log "This should NOT generate an AND flag"
|
280
280
|
# Creating an AND flag here is logically correct, but creates un-necessary flow lines. Since
|
281
281
|
# the test at11 is already gated by the at21 condition, it does not need to be applied to any
|
282
282
|
# tests that are dependent on at11.
|
283
|
-
func :test1, id: :at11
|
283
|
+
func :test1, id: :at11, number: 51350
|
284
284
|
if_failed :at11 do
|
285
|
-
func :test2, id: :at21
|
286
|
-
func :test3, if_failed: :at21
|
287
|
-
func :test4, if_failed: :at21
|
285
|
+
func :test2, id: :at21, number: 51360
|
286
|
+
func :test3, if_failed: :at21, number: 51370
|
287
|
+
func :test4, if_failed: :at21, number: 51380
|
288
288
|
end
|
289
289
|
end
|
290
290
|
|
291
291
|
log "Manual flag setting"
|
292
|
-
test :test1, on_fail: { set_flag: :my_flag }, continue: true
|
293
|
-
test :test2, if_flag: :my_flag
|
292
|
+
test :test1, on_fail: { set_flag: :my_flag }, continue: true, number: 51390
|
293
|
+
test :test2, if_flag: :my_flag, number: 51400
|
294
294
|
unless_flag :my_flag do
|
295
|
-
test :test3
|
295
|
+
test :test3, number: 51410
|
296
296
|
end
|
297
297
|
|
298
298
|
log "Mixed-case manual flags"
|
299
|
-
test :test1, on_fail: { set_flag: :$My_Mixed_Flag }, continue: true
|
300
|
-
test :test2, if_flag: "$My_Mixed_Flag"
|
299
|
+
test :test1, on_fail: { set_flag: :$My_Mixed_Flag }, continue: true, number: 51420
|
300
|
+
test :test2, if_flag: "$My_Mixed_Flag", number: 51430
|
301
301
|
unless_flag "$My_Mixed_Flag" do
|
302
|
-
test :test3
|
302
|
+
test :test3, number: 51440
|
303
303
|
end
|
304
304
|
|
305
305
|
log "Mixed-case enables"
|
306
|
-
test :extra_test, if_enable: :$MCEn_extras
|
306
|
+
test :extra_test, if_enable: :$MCEn_extras, number: 51450
|
307
307
|
unless_enable "$MCEn_test" do
|
308
|
-
test :test1
|
309
|
-
test :test2
|
308
|
+
test :test1, number: 51460
|
309
|
+
test :test2, number: 51470
|
310
310
|
end
|
311
311
|
|
312
312
|
if tester.v93k?
|
313
313
|
log "This should retain the set-run-flag in the else conditional"
|
314
|
-
func :test22, id: :at22
|
314
|
+
func :test22, id: :at22, number: 51480
|
315
315
|
|
316
316
|
if_failed :at22 do
|
317
|
-
func :test22a
|
318
|
-
func :test22b
|
317
|
+
func :test22a, number: 51490
|
318
|
+
func :test22b, number: 51500
|
319
319
|
end
|
320
320
|
|
321
|
-
func :test22c
|
322
|
-
func :test22d
|
321
|
+
func :test22c, number: 51510
|
322
|
+
func :test22d, number: 51520
|
323
323
|
|
324
324
|
if_failed :at22 do
|
325
|
-
func :test22e
|
326
|
-
func :test22f
|
325
|
+
func :test22e, number: 51530
|
326
|
+
func :test22f, number: 51540
|
327
327
|
end
|
328
328
|
end
|
329
329
|
|
330
330
|
if tester.v93k?
|
331
331
|
log "This should optimize away then/else branches that are empty"
|
332
|
-
func :test36, continue: true
|
333
|
-
func :test36b, bin: 12, continue:true
|
332
|
+
func :test36, continue: true, number: 51550
|
333
|
+
func :test36b, bin: 12, continue:true, number: 51560
|
334
334
|
|
335
335
|
log "Tests of render"
|
336
336
|
|
337
337
|
render 'multi_bin;', if_flag: :my_flag
|
338
338
|
|
339
|
-
func :test36, on_fail: { render: 'multi_bin;' }, if_flag: :my_flag
|
339
|
+
func :test36, on_fail: { render: 'multi_bin;' }, if_flag: :my_flag, number: 51570
|
340
340
|
end
|
341
341
|
|
342
342
|
log 'An optimization test case, this should not generate a flag on V93K'
|
343
|
-
func :test1, id: :t1a
|
343
|
+
func :test1, id: :t1a, number: 51580
|
344
344
|
|
345
345
|
if_passed :t1a do
|
346
|
-
func :test2
|
346
|
+
func :test2, number: 51590
|
347
347
|
end
|
348
348
|
|
349
349
|
if_failed :t1a do
|
350
|
-
func :test3
|
350
|
+
func :test3, number: 51600
|
351
351
|
bin 10
|
352
352
|
end
|
353
353
|
|
354
354
|
log 'The reverse optimization test case, this should not generate a flag on V93K'
|
355
|
-
func :test1, id: :t1b
|
355
|
+
func :test1, id: :t1b, number: 51610
|
356
356
|
|
357
357
|
if_failed :t1b do
|
358
|
-
func :test3
|
358
|
+
func :test3, number: 51620
|
359
359
|
bin 10
|
360
360
|
end
|
361
361
|
|
362
362
|
if_passed :t1b do
|
363
|
-
func :test2
|
363
|
+
func :test2, number: 51630
|
364
364
|
end
|
365
365
|
|
366
366
|
if tester.v93k?
|
367
367
|
log 'Nested optimization test case'
|
368
|
-
func :outer_test, id: :ot
|
368
|
+
func :outer_test, id: :ot, number: 51640
|
369
369
|
if_failed :ot do
|
370
370
|
unless_flag :flag1 do
|
371
|
-
func :inner_test1, id: :it1
|
371
|
+
func :inner_test1, id: :it1, number: 51650
|
372
372
|
render 'multi_bin;', if_failed: :it1
|
373
373
|
end
|
374
374
|
end
|
375
375
|
|
376
376
|
log 'Nested flag optimization test case'
|
377
377
|
if_flag :flag1 do
|
378
|
-
func :test4, id: :nf_t4
|
378
|
+
func :test4, id: :nf_t4, number: 51660
|
379
379
|
if_failed :nf_t4 do
|
380
380
|
render 'multi_bin;', if_flag: :flag1
|
381
381
|
end
|
@@ -384,82 +384,82 @@ Flow.create interface: 'OrigenTesters::Test::Interface', flow_name: "Flow Contro
|
|
384
384
|
log 'Same test case with volatile flag'
|
385
385
|
volatile :$Alarm
|
386
386
|
if_flag :$Alarm do
|
387
|
-
func :test10, id: :nf_t5
|
387
|
+
func :test10, id: :nf_t5, number: 51670
|
388
388
|
if_failed :nf_t5 do
|
389
389
|
render 'multi_bin;', if_flag: :$Alarm
|
390
390
|
end
|
391
391
|
end
|
392
392
|
|
393
393
|
log 'The setting of flags used in later OR conditions should be preserved'
|
394
|
-
func :test2, id: :of1
|
395
|
-
func :test3, if_failed: :of1
|
396
|
-
func :test2, id: :of2
|
397
|
-
func :test3, if_failed: :of2
|
398
|
-
func :test4
|
399
|
-
func :test4, if_any_failed: [:of1, :of2]
|
394
|
+
func :test2, id: :of1, number: 51680
|
395
|
+
func :test3, if_failed: :of1, number: 51690
|
396
|
+
func :test2, id: :of2, number: 51700
|
397
|
+
func :test3, if_failed: :of2, number: 51710
|
398
|
+
func :test4, number: 51720
|
399
|
+
func :test4, if_any_failed: [:of1, :of2], number: 51730
|
400
400
|
|
401
401
|
log 'The setting of flags used in later AND conditions should be preserved'
|
402
|
-
func :test2, id: :af1
|
403
|
-
func :test3, if_failed: :af1
|
404
|
-
func :test2, id: :af2
|
405
|
-
func :test3, if_failed: :af2
|
406
|
-
func :test4
|
407
|
-
func :test4, if_all_failed: [:af1, :af2]
|
402
|
+
func :test2, id: :af1, number: 51740
|
403
|
+
func :test3, if_failed: :af1, number: 51750
|
404
|
+
func :test2, id: :af2, number: 51760
|
405
|
+
func :test3, if_failed: :af2, number: 51770
|
406
|
+
func :test4, number: 51780
|
407
|
+
func :test4, if_all_failed: [:af1, :af2], number: 51790
|
408
408
|
|
409
409
|
log 'Adjacent tests that set a flag and then use it in an OR condition should be valid'
|
410
|
-
func :test2, id: :of11
|
411
|
-
func :test2, id: :of12
|
412
|
-
func :test4, if_any_failed: [:of11, :of12]
|
410
|
+
func :test2, id: :of11, number: 51800
|
411
|
+
func :test2, id: :of12, number: 51810
|
412
|
+
func :test4, if_any_failed: [:of11, :of12], number: 51820
|
413
413
|
|
414
414
|
log 'Adjacent tests that set a flag and then use it in an AND condition should be valid'
|
415
|
-
func :test2, id: :af11
|
416
|
-
func :test2, id: :af12
|
417
|
-
func :test4, if_all_failed: [:af11, :af12]
|
415
|
+
func :test2, id: :af11, number: 51830
|
416
|
+
func :test2, id: :af12, number: 51840
|
417
|
+
func :test4, if_all_failed: [:af11, :af12], number: 51850
|
418
418
|
|
419
419
|
log 'Adjacent if combiner test case 1'
|
420
|
-
func :test1, if_enable: :my_enable_word
|
421
|
-
func :test2, unless_enable: :my_enable_word
|
422
|
-
func :test1, if_flag: :my_flag
|
423
|
-
func :test2, unless_flag: :my_flag
|
420
|
+
func :test1, if_enable: :my_enable_word, number: 51860
|
421
|
+
func :test2, unless_enable: :my_enable_word, number: 51870
|
422
|
+
func :test1, if_flag: :my_flag, number: 51880
|
423
|
+
func :test2, unless_flag: :my_flag, number: 51890
|
424
424
|
|
425
425
|
log 'Adjacent if combiner test case 2'
|
426
|
-
func :test2, unless_enable: :my_enable_word
|
427
|
-
func :test1, if_enable: :my_enable_word
|
428
|
-
func :test2, unless_flag: :my_flag
|
429
|
-
func :test1, if_flag: :my_flag
|
426
|
+
func :test2, unless_enable: :my_enable_word, number: 51900
|
427
|
+
func :test1, if_enable: :my_enable_word, number: 51910
|
428
|
+
func :test2, unless_flag: :my_flag, number: 51920
|
429
|
+
func :test1, if_flag: :my_flag, number: 51930
|
430
430
|
|
431
431
|
log 'Volatile if combiner test case'
|
432
|
-
func :test1, if_flag: :$Alarm
|
433
|
-
func :test2, unless_flag: :$Alarm
|
432
|
+
func :test1, if_flag: :$Alarm, number: 51940
|
433
|
+
func :test2, unless_flag: :$Alarm, number: 51950
|
434
434
|
end
|
435
435
|
|
436
436
|
log 'Test the block form of expressing if passed/failed dependents'
|
437
437
|
func :test1, on_pass: ->{
|
438
|
-
func :test2
|
438
|
+
func :test2, number: 51970
|
439
439
|
}, on_fail: ->{
|
440
|
-
func :test3
|
440
|
+
func :test3, number: 51980
|
441
441
|
bin 10
|
442
|
-
}
|
442
|
+
}, number: 51960
|
443
443
|
|
444
444
|
log 'Test the else block on a flag condition'
|
445
445
|
if_enabled "bitmap", then: ->{
|
446
|
-
test :test2
|
446
|
+
test :test2, number: 51990
|
447
447
|
}, else: ->{
|
448
|
-
test :test3
|
448
|
+
test :test3, number: 52000
|
449
449
|
}
|
450
450
|
if_flag :some_flag, then: ->{
|
451
|
-
test :test2
|
451
|
+
test :test2, number: 52010
|
452
452
|
}, else: ->{
|
453
|
-
test :test3
|
453
|
+
test :test3, number: 52020
|
454
454
|
}
|
455
455
|
|
456
456
|
log 'Test of a real life case which was found to have problems'
|
457
457
|
unless_enable "eword1" do
|
458
458
|
unless_enable "eword2" do
|
459
|
-
import 'components/small'
|
459
|
+
import 'components/small', number: 53000
|
460
460
|
end
|
461
461
|
if_enable "eword2" do
|
462
|
-
import 'components/small'
|
462
|
+
import 'components/small', number: 54000
|
463
463
|
end
|
464
464
|
end
|
465
465
|
end
|
data/program/prb2.rb
CHANGED
@@ -7,21 +7,21 @@ Flow.create interface: 'OrigenTesters::Test::Interface' do
|
|
7
7
|
|
8
8
|
self.resources_filename = 'prb2'
|
9
9
|
|
10
|
-
func :erase_all, :
|
10
|
+
func :erase_all, duration: :dynamic, number: 10000
|
11
11
|
|
12
|
-
func :margin_read1_all1
|
12
|
+
func :margin_read1_all1, number: 10010
|
13
13
|
|
14
|
-
func :erase_all, :
|
15
|
-
func :margin_read1_all1
|
14
|
+
func :erase_all, duration: :dynamic, number: 10020
|
15
|
+
func :margin_read1_all1, number: 10030
|
16
16
|
|
17
|
-
import 'components/prb2_main'
|
17
|
+
import 'components/prb2_main', number: 11000
|
18
18
|
|
19
|
-
func :erase_all, :
|
20
|
-
func :margin_read1_all1, :
|
19
|
+
func :erase_all, duration: :dynamic, number: 12000
|
20
|
+
func :margin_read1_all1, id: 'erased_successfully', number: 12010
|
21
21
|
|
22
22
|
if_enable 'extra_tests' do
|
23
|
-
import 'components/prb2_main'
|
23
|
+
import 'components/prb2_main', number: 13000
|
24
24
|
end
|
25
25
|
|
26
|
-
func :margin_read1_all1
|
26
|
+
func :margin_read1_all1, number: 14000
|
27
27
|
end
|
data/program/test.rb
CHANGED
@@ -10,16 +10,16 @@ Flow.create interface: 'OrigenTesters::Test::Interface' do
|
|
10
10
|
|
11
11
|
# para 'charge_pump', :high_voltage => true, :lo_limit => 5, :hi_limit => 6
|
12
12
|
|
13
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, lo_limit: 35
|
14
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45
|
15
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35
|
16
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35
|
17
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV
|
18
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV, continue: true
|
19
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 2000, lo_limit: 0.01, continue: true
|
20
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: "_some_spec", lo_limit: 0.01, continue: true
|
21
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: [1, 2]
|
22
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, lo_limit: [1.uA, 2.uA, 3.uA], hi_limit: [4.uA,5.uA], units: "A", defer_limits: true
|
13
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, lo_limit: 35, number: 40000
|
14
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, number: 40010
|
15
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35, number: 40020
|
16
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35, number: 40030
|
17
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV, number: 40040
|
18
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV, continue: true, number: 40050
|
19
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 2000, lo_limit: 0.01, continue: true, number: 40060
|
20
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: "_some_spec", lo_limit: 0.01, continue: true, number: 40070
|
21
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: [1, 2], number: 40080
|
22
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, lo_limit: [1.uA, 2.uA, 3.uA], hi_limit: [4.uA,5.uA], units: "A", defer_limits: true, number: 40090
|
23
23
|
|
24
24
|
if tester.uflex?
|
25
25
|
log "Test of ultraflex render API"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen_testers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|