origen_testers 0.5.7 → 0.6.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/shared_commands.rb +6 -0
- data/config/version.rb +2 -2
- data/lib/commands/run.rb +44 -0
- data/lib/origen_testers.rb +19 -1
- data/lib/origen_testers/flow.rb +382 -0
- data/lib/origen_testers/generator.rb +32 -29
- data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -0
- data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -0
- data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -0
- data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -0
- data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -0
- data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +97 -0
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +390 -115
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +4 -54
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +257 -11
- data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -0
- data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -0
- data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -0
- data/lib/origen_testers/igxl_based_tester/base/levelset.rb +109 -0
- data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +33 -1
- data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -0
- data/lib/origen_testers/igxl_based_tester/base/timesets.rb +47 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +2 -2
- data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +4 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +137 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +58 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +58 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +95 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +2 -2
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +121 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +24 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +137 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +4 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -0
- data/lib/origen_testers/interface.rb +41 -6
- data/lib/origen_testers/no_interface.rb +7 -0
- data/lib/origen_testers/origen_ext/application/runner.rb +25 -0
- data/lib/origen_testers/origen_ext/generator.rb +37 -0
- data/lib/origen_testers/origen_ext/generator/flow.rb +70 -0
- data/lib/origen_testers/origen_ext/generator/resources.rb +21 -0
- data/lib/origen_testers/program_generators.rb +0 -1
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +158 -134
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +2 -3
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +4 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +5 -6
- data/lib/origen_testers/test/dut.rb +5 -0
- data/lib/origen_testers/test/j750_base_interface.rb +0 -3
- data/lib/origen_testers/test/ultraflex_interface.rb +230 -4
- data/lib/origen_testers/test/v93k_interface.rb +5 -23
- data/program/components/_temp.rb +6 -0
- data/program/flow_control.rb +190 -62
- data/program/prb1.rb +13 -50
- data/program/prb2.rb +0 -16
- data/program/test.rb +12 -3
- data/program/uflex_resources.rb +159 -0
- metadata +66 -16
- data/lib/origen_testers/doc.rb +0 -224
- data/lib/origen_testers/doc/generator.rb +0 -124
- data/lib/origen_testers/doc/generator/flow.rb +0 -69
- data/lib/origen_testers/doc/generator/flow_line.rb +0 -201
- data/lib/origen_testers/doc/generator/test.rb +0 -66
- data/lib/origen_testers/doc/generator/test_group.rb +0 -64
- data/lib/origen_testers/doc/generator/tests.rb +0 -45
- data/lib/origen_testers/doc/model.rb +0 -160
- data/lib/origen_testers/generator/flow_control_api.rb +0 -611
- data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +0 -476
- data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +0 -9
|
@@ -57,6 +57,10 @@ module OrigenTesters
|
|
|
57
57
|
opcode: 'Test',
|
|
58
58
|
result: 'Fail'
|
|
59
59
|
},
|
|
60
|
+
test_defer_limits: {
|
|
61
|
+
opcode: 'Test-defer-limits',
|
|
62
|
+
result: 'Fail'
|
|
63
|
+
},
|
|
60
64
|
cz: {
|
|
61
65
|
opcode: 'characterize',
|
|
62
66
|
result: 'None'
|
|
@@ -198,60 +202,10 @@ module OrigenTesters
|
|
|
198
202
|
"#{l}"
|
|
199
203
|
end
|
|
200
204
|
|
|
201
|
-
def job
|
|
202
|
-
if !if_jobs.empty? && !unless_jobs.empty?
|
|
203
|
-
fail "Both if and unless jobs have been defined for test: #{parameter}"
|
|
204
|
-
elsif !if_jobs.empty?
|
|
205
|
-
if_jobs.join(',')
|
|
206
|
-
elsif !unless_jobs.empty?
|
|
207
|
-
unless_jobs.map { |j| "!#{j}" }.join(',')
|
|
208
|
-
else
|
|
209
|
-
''
|
|
210
|
-
end
|
|
211
|
-
end
|
|
212
|
-
alias_method :jobs, :job
|
|
213
|
-
|
|
214
205
|
def unless_enable=(*args)
|
|
215
206
|
end
|
|
216
207
|
alias_method :unless_enabled=, :unless_enable=
|
|
217
208
|
|
|
218
|
-
def if_jobs
|
|
219
|
-
@if_jobs ||= []
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
def unless_jobs
|
|
223
|
-
@unless_jobs ||= []
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
def if_job=(jobs)
|
|
227
|
-
[jobs].flatten.compact.each do |job|
|
|
228
|
-
job = job.to_s.upcase
|
|
229
|
-
if job =~ /!/
|
|
230
|
-
self.unless_job = job
|
|
231
|
-
else
|
|
232
|
-
if_jobs << job unless if_jobs.include?(job)
|
|
233
|
-
end
|
|
234
|
-
end
|
|
235
|
-
end
|
|
236
|
-
alias_method :if_jobs=, :if_job=
|
|
237
|
-
alias_method :add_if_jobs, :if_job=
|
|
238
|
-
alias_method :add_if_job, :if_job=
|
|
239
|
-
|
|
240
|
-
def unless_job=(jobs)
|
|
241
|
-
[jobs].flatten.compact.each do |job|
|
|
242
|
-
job = job.to_s.upcase
|
|
243
|
-
job.gsub!('!', '')
|
|
244
|
-
unless_jobs << job unless unless_jobs.include?(job)
|
|
245
|
-
end
|
|
246
|
-
end
|
|
247
|
-
alias_method :unless_jobs=, :unless_job=
|
|
248
|
-
alias_method :add_unless_jobs, :unless_job=
|
|
249
|
-
alias_method :add_unless_job, :unless_job=
|
|
250
|
-
|
|
251
|
-
def continue_on_fail
|
|
252
|
-
self.result = 'None'
|
|
253
|
-
end
|
|
254
|
-
|
|
255
209
|
def continue_pass
|
|
256
210
|
self.result = 'Pass'
|
|
257
211
|
end
|
|
@@ -268,10 +222,6 @@ module OrigenTesters
|
|
|
268
222
|
# self.debug_sites = "All"
|
|
269
223
|
# end
|
|
270
224
|
|
|
271
|
-
def set_flag_on_fail
|
|
272
|
-
self.flag_fail = "#{id}_FAILED"
|
|
273
|
-
end
|
|
274
|
-
|
|
275
225
|
def set_flag_on_pass
|
|
276
226
|
self.flag_pass = "#{id}_PASSED"
|
|
277
227
|
end
|
|
@@ -24,23 +24,38 @@ module OrigenTesters
|
|
|
24
24
|
|
|
25
25
|
# @api private
|
|
26
26
|
def at_flow_start
|
|
27
|
+
unless Origen.interface.resources_mode?
|
|
28
|
+
flow.at_flow_start if flow
|
|
29
|
+
end
|
|
30
|
+
@@pinmaps_filename = nil
|
|
27
31
|
@@test_instances_filename = nil
|
|
28
32
|
@@patsets_filename = nil
|
|
29
33
|
@@patgroups_filename = nil
|
|
34
|
+
@@edgesets_filename = nil
|
|
35
|
+
@@timesets_filename = nil
|
|
36
|
+
@@levelsets_filename = nil
|
|
37
|
+
@@ac_specsets_filename = nil
|
|
38
|
+
@@dc_specsets_filename = nil
|
|
30
39
|
end
|
|
31
40
|
|
|
32
41
|
# @api private
|
|
33
42
|
def at_run_start
|
|
34
43
|
flow.at_run_start
|
|
44
|
+
@@pinmap_sheets = nil
|
|
35
45
|
@@test_instance_sheets = nil
|
|
36
46
|
@@patset_sheets = nil
|
|
37
47
|
@@flow_sheets = nil
|
|
38
48
|
@@patgroup_sheets = nil
|
|
49
|
+
@@edgeset_sheets = nil
|
|
50
|
+
@@timeset_sheets = nil
|
|
51
|
+
@@levelset_sheets = nil
|
|
52
|
+
@@ac_specset_sheets = nil
|
|
53
|
+
@@dc_specset_sheets = nil
|
|
39
54
|
end
|
|
40
55
|
alias_method :reset_globals, :at_run_start
|
|
41
56
|
|
|
42
57
|
# Convenience method to allow the current name for the test instance,
|
|
43
|
-
# patsets and
|
|
58
|
+
# patsets, patgroups and timesets sheets to be set to the same value.
|
|
44
59
|
#
|
|
45
60
|
# # my j750 interface
|
|
46
61
|
#
|
|
@@ -48,13 +63,33 @@ module OrigenTesters
|
|
|
48
63
|
#
|
|
49
64
|
# # The above is equivalent to:
|
|
50
65
|
#
|
|
66
|
+
# pinmaps_filename = "common"
|
|
51
67
|
# test_instances_filename = "common"
|
|
52
68
|
# patsets_filename = "common"
|
|
53
69
|
# patgroups_filename = "common"
|
|
70
|
+
# edgesets_filename = "common"
|
|
71
|
+
# timesets_filename = "common"
|
|
72
|
+
# levelsets_filename = "common"
|
|
73
|
+
# ac_specsets_filename = "common"
|
|
74
|
+
# dc_specsets_filename = "common"
|
|
54
75
|
def resources_filename=(name)
|
|
76
|
+
self.pinmaps_filename = name
|
|
55
77
|
self.test_instances_filename = name
|
|
56
78
|
self.patsets_filename = name
|
|
57
79
|
self.patgroups_filename = name
|
|
80
|
+
self.edgesets_filename = name
|
|
81
|
+
self.timesets_filename = name
|
|
82
|
+
self.levelsets_filename = name
|
|
83
|
+
self.ac_specsets_filename = name
|
|
84
|
+
self.dc_specsets_filename = name
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Set the name of the current pinmap sheet. This does not change
|
|
88
|
+
# the name of the current sheet, but rather sets the name of the sheet that
|
|
89
|
+
# will be generated the next time you access pinmaps.
|
|
90
|
+
def pinmaps_filename=(name)
|
|
91
|
+
@pinmaps_filename = name
|
|
92
|
+
@@pinmaps_filename = name
|
|
58
93
|
end
|
|
59
94
|
|
|
60
95
|
# Set the name of the current test instances sheet. This does not change
|
|
@@ -81,6 +116,51 @@ module OrigenTesters
|
|
|
81
116
|
@@patgroups_filename = name
|
|
82
117
|
end
|
|
83
118
|
|
|
119
|
+
# Set the name of the current edgesets sheet. This does not change
|
|
120
|
+
# the name of the current sheet, but rather sets the name of the sheet that
|
|
121
|
+
# will be generated the next time you access patgroups.
|
|
122
|
+
def edgesets_filename=(name)
|
|
123
|
+
@edgesets_filename = name
|
|
124
|
+
@@edgesets_filename = name
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Set the name of the current timesets sheet. This does not change
|
|
128
|
+
# the name of the current sheet, but rather sets the name of the sheet that
|
|
129
|
+
# will be generated the next time you access patgroups.
|
|
130
|
+
def timesets_filename=(name)
|
|
131
|
+
@timesets_filename = name
|
|
132
|
+
@@timesets_filename = name
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Set the name of the current levelsets sheet. This does not change
|
|
136
|
+
# the name of the current sheet, but rather sets the name of the sheet that
|
|
137
|
+
# will be generated the next time you access patgroups.
|
|
138
|
+
def levelsets_filename=(name)
|
|
139
|
+
@levelsets_filename = name
|
|
140
|
+
@@levelsets_filename = name
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Set the name of the current AC specsets sheet. This does not change
|
|
144
|
+
# the name of the current sheet, but rather sets the name of the sheet that
|
|
145
|
+
# will be generated the next time you access patgroups.
|
|
146
|
+
def ac_specsets_filename=(name)
|
|
147
|
+
@ac_specsets_filename = name
|
|
148
|
+
@@ac_specsets_filename = name
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Set the name of the current DC specsets sheet. This does not change
|
|
152
|
+
# the name of the current sheet, but rather sets the name of the sheet that
|
|
153
|
+
# will be generated the next time you access patgroups.
|
|
154
|
+
def dc_specsets_filename=(name)
|
|
155
|
+
@dc_specsets_filename = name
|
|
156
|
+
@@dc_specsets_filename = name
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Returns the name of the current pinmaps sheet
|
|
160
|
+
def pinmaps_filename
|
|
161
|
+
@@pinmaps_filename ||= @pinmaps_filename || 'global'
|
|
162
|
+
end
|
|
163
|
+
|
|
84
164
|
# Returns the name of the current test instances sheet
|
|
85
165
|
def test_instances_filename
|
|
86
166
|
@@test_instances_filename ||= @test_instances_filename || 'global'
|
|
@@ -96,6 +176,36 @@ module OrigenTesters
|
|
|
96
176
|
@@patgroups_filename ||= @patgroups_filename || 'global'
|
|
97
177
|
end
|
|
98
178
|
|
|
179
|
+
# Returns the name of the current edgesets sheet
|
|
180
|
+
def edgesets_filename
|
|
181
|
+
@@edgesets_filename ||= @edgesets_filename || 'global'
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Returns the name of the current timesets sheet
|
|
185
|
+
def timesets_filename
|
|
186
|
+
@@timesets_filename ||= @timesets_filename || 'global'
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Returns the name of the current levelsets sheet
|
|
190
|
+
def levelsets_filename
|
|
191
|
+
@@levelsets_filename ||= @levelsets_filename || 'global'
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# Returns the name of the current AC specset sheet
|
|
195
|
+
def ac_specsets_filename
|
|
196
|
+
@@ac_specsets_filename ||= @ac_specsets_filename || 'global'
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Returns the name of the current DC specset sheet
|
|
200
|
+
def dc_specsets_filename
|
|
201
|
+
@@dc_specsets_filename ||= @dc_specsets_filename || 'global'
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# Returns a hash containing all pinmap sheets
|
|
205
|
+
def pinmap_sheets
|
|
206
|
+
@@pinmap_sheets ||= {}
|
|
207
|
+
end
|
|
208
|
+
|
|
99
209
|
# Returns a hash containing all test instance sheets
|
|
100
210
|
def test_instance_sheets
|
|
101
211
|
@@test_instance_sheets ||= {}
|
|
@@ -116,12 +226,39 @@ module OrigenTesters
|
|
|
116
226
|
@@patgroup_sheets ||= {}
|
|
117
227
|
end
|
|
118
228
|
|
|
229
|
+
# Returns a hash containing all edgeset sheets
|
|
230
|
+
def edgeset_sheets
|
|
231
|
+
@@edgeset_sheets ||= {}
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
# Returns a hash containing all timeset sheets
|
|
235
|
+
def timeset_sheets
|
|
236
|
+
@@timeset_sheets ||= {}
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# Returns a hash containing all levelset sheets
|
|
240
|
+
def levelset_sheets
|
|
241
|
+
@@levelset_sheets ||= {}
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
# Returns a hash containing all AC specsets sheets
|
|
245
|
+
def ac_specset_sheets
|
|
246
|
+
@@ac_specset_sheets ||= {}
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
# Returns a hash containing all DC specsets sheets
|
|
250
|
+
def dc_specset_sheets
|
|
251
|
+
@@dc_specset_sheets ||= {}
|
|
252
|
+
end
|
|
253
|
+
|
|
119
254
|
# Returns an array containing all sheet generators where a sheet generator is a flow,
|
|
120
|
-
# test instance, patset
|
|
255
|
+
# test instance, patset, pat group, edgeset, timeset, or AC/DC specset sheet.
|
|
121
256
|
# All Origen program generators must implement this method
|
|
122
257
|
def sheet_generators # :nodoc:
|
|
123
258
|
g = []
|
|
124
|
-
[flow_sheets, test_instance_sheets, patset_sheets,
|
|
259
|
+
[pinmap_sheets, flow_sheets, test_instance_sheets, patset_sheets,
|
|
260
|
+
patgroup_sheets, edgeset_sheets, timeset_sheets, levelset_sheets,
|
|
261
|
+
ac_specset_sheets, dc_specset_sheets].each do |sheets|
|
|
125
262
|
sheets.each do |name, sheet|
|
|
126
263
|
g << sheet
|
|
127
264
|
end
|
|
@@ -139,6 +276,21 @@ module OrigenTesters
|
|
|
139
276
|
g
|
|
140
277
|
end
|
|
141
278
|
|
|
279
|
+
# Returns the current pinmaps sheet (as defined by the current value of
|
|
280
|
+
# pinmaps_filename).
|
|
281
|
+
#
|
|
282
|
+
# Pass in a filename argument to have a specific sheet returned instead.
|
|
283
|
+
#
|
|
284
|
+
# If the sheet does not exist yet it will be created.
|
|
285
|
+
def pinmaps(filename = pinmaps_filename)
|
|
286
|
+
f = filename.to_sym
|
|
287
|
+
return pinmap_sheets[f] if pinmap_sheets[f]
|
|
288
|
+
p = platform::Pinmap.new
|
|
289
|
+
p.filename = f
|
|
290
|
+
pinmap_sheets[f] = p
|
|
291
|
+
end
|
|
292
|
+
alias_method :pin_maps, :pinmaps
|
|
293
|
+
|
|
142
294
|
# Returns the current test instances sheet (as defined by the current value of
|
|
143
295
|
# test_instances_filename).
|
|
144
296
|
#
|
|
@@ -191,14 +343,17 @@ module OrigenTesters
|
|
|
191
343
|
# Pass in a filename argument to have a specific sheet returned instead.
|
|
192
344
|
#
|
|
193
345
|
# If the sheet does not exist yet it will be created.
|
|
194
|
-
def flow(filename =
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
346
|
+
def flow(filename = nil)
|
|
347
|
+
if filename || Origen.file_handler.current_file
|
|
348
|
+
filename ||= Origen.file_handler.current_file.basename('.rb').to_s
|
|
349
|
+
# DH here need to reset the flow!!
|
|
350
|
+
f = filename.to_sym
|
|
351
|
+
return flow_sheets[f] if flow_sheets[f] # will return flow if already existing
|
|
352
|
+
p = platform::Flow.new
|
|
353
|
+
p.inhibit_output if Origen.interface.resources_mode?
|
|
354
|
+
p.filename = f
|
|
355
|
+
flow_sheets[f] = p
|
|
356
|
+
end
|
|
202
357
|
end
|
|
203
358
|
|
|
204
359
|
# Returns the current pattern groups sheet (as defined by the current value of
|
|
@@ -217,6 +372,97 @@ module OrigenTesters
|
|
|
217
372
|
alias_method :pat_groups, :patgroups
|
|
218
373
|
alias_method :pattern_groups, :patgroups
|
|
219
374
|
|
|
375
|
+
# Returns the current collection of edges that are defined. These are
|
|
376
|
+
# used in support of creating edgeset/timeset sheets. They do not have
|
|
377
|
+
# an associated sheet of their own.
|
|
378
|
+
def edges
|
|
379
|
+
@@edges ||= platform::Edges.new
|
|
380
|
+
end
|
|
381
|
+
alias_method :edge_collection, :edges
|
|
382
|
+
|
|
383
|
+
# Returns the current edgesets sheet (as defined by the current value of
|
|
384
|
+
# edgesets_filename).
|
|
385
|
+
#
|
|
386
|
+
# Pass in a filename argument to have a specific sheet returned instead.
|
|
387
|
+
#
|
|
388
|
+
# If the sheet does not exist yet it will be created.
|
|
389
|
+
def edgesets(filename = edgesets_filename)
|
|
390
|
+
f = filename.to_sym
|
|
391
|
+
return edgeset_sheets[f] if edgeset_sheets[f]
|
|
392
|
+
e = platform::Edgesets.new
|
|
393
|
+
e.filename = f
|
|
394
|
+
edgeset_sheets[f] = e
|
|
395
|
+
end
|
|
396
|
+
alias_method :edge_sets, :edgesets
|
|
397
|
+
|
|
398
|
+
# Returns the current timesets sheet (as defined by the current value of
|
|
399
|
+
# timesets_filename).
|
|
400
|
+
#
|
|
401
|
+
# Pass in a filename argument to have a specific sheet returned instead.
|
|
402
|
+
#
|
|
403
|
+
# If the sheet does not exist yet it will be created.
|
|
404
|
+
def timesets(filename = timesets_filename)
|
|
405
|
+
f = filename.to_sym
|
|
406
|
+
return timeset_sheets[f] if timeset_sheets[f]
|
|
407
|
+
t = platform::Timesets.new
|
|
408
|
+
t.filename = f
|
|
409
|
+
timeset_sheets[f] = t
|
|
410
|
+
end
|
|
411
|
+
alias_method :time_sets, :timesets
|
|
412
|
+
alias_method :timing_sets, :timesets
|
|
413
|
+
|
|
414
|
+
# Returns the current collection of levels that are defined. These are
|
|
415
|
+
# used in support of creating levelset sheets. They do not have
|
|
416
|
+
# an associated sheet of their own.
|
|
417
|
+
def levels
|
|
418
|
+
@@levels ||= platform::Levels.new
|
|
419
|
+
end
|
|
420
|
+
alias_method :level_collection, :levels
|
|
421
|
+
|
|
422
|
+
# Returns the current levelsets sheet (as defined by the current value of
|
|
423
|
+
# levelsets_filename).
|
|
424
|
+
#
|
|
425
|
+
# Pass in a filename argument to have a specific sheet returned instead.
|
|
426
|
+
#
|
|
427
|
+
# If the sheet does not exist yet it will be created.
|
|
428
|
+
def levelsets(filename = levelsets_filename)
|
|
429
|
+
f = filename.to_sym
|
|
430
|
+
return levelset_sheets[f] if levelset_sheets[f]
|
|
431
|
+
t = platform::Levelset.new
|
|
432
|
+
t.filename = f
|
|
433
|
+
levelset_sheets[f] = t
|
|
434
|
+
end
|
|
435
|
+
alias_method :time_sets, :timesets
|
|
436
|
+
alias_method :timing_sets, :timesets
|
|
437
|
+
|
|
438
|
+
# Returns the current AC specset sheet (as defined by the current value of
|
|
439
|
+
# ac_specsets_filename).
|
|
440
|
+
#
|
|
441
|
+
# Pass in a filename argument to have a specific sheet returned instead.
|
|
442
|
+
#
|
|
443
|
+
# If the sheet does not exist yet it will be created.
|
|
444
|
+
def ac_specsets(filename = ac_specsets_filename)
|
|
445
|
+
f = filename.to_sym
|
|
446
|
+
return ac_specset_sheets[f] if ac_specset_sheets[f]
|
|
447
|
+
s = platform::ACSpecsets.new
|
|
448
|
+
s.filename = f
|
|
449
|
+
ac_specset_sheets[f] = s
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
# Returns the current DC specset sheet (as defined by the current value of
|
|
453
|
+
# dc_specsets_filename).
|
|
454
|
+
#
|
|
455
|
+
# Pass in a filename argument to have a specific sheet returned instead.
|
|
456
|
+
#
|
|
457
|
+
# If the sheet does not exist yet it will be created.
|
|
458
|
+
def dc_specsets(filename = dc_specsets_filename)
|
|
459
|
+
f = filename.to_sym
|
|
460
|
+
return dc_specset_sheets[f] if dc_specset_sheets[f]
|
|
461
|
+
s = platform::DCSpecsets.new
|
|
462
|
+
s.filename = f
|
|
463
|
+
dc_specset_sheets[f] = s
|
|
464
|
+
end
|
|
465
|
+
|
|
220
466
|
private
|
|
221
467
|
|
|
222
468
|
# Custom test instance libraries
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module IGXLBasedTester
|
|
3
|
+
class Base
|
|
4
|
+
class PinLevelSingle
|
|
5
|
+
attr_accessor :vil, :vih # Input level information
|
|
6
|
+
attr_accessor :vol, :voh # Output level information
|
|
7
|
+
attr_accessor :vcl, :vch # Clamp level information
|
|
8
|
+
attr_accessor :vt # Termination level information
|
|
9
|
+
attr_accessor :voutlotyp, :vouthityp, :dmode
|
|
10
|
+
|
|
11
|
+
def initialize(options = {}) # :nodoc:
|
|
12
|
+
options = {
|
|
13
|
+
vil: 0, # Input drive low
|
|
14
|
+
vih: 1.8, # Input drive high
|
|
15
|
+
vol: 1.0, # Output compare low
|
|
16
|
+
voh: 0.8, # Output compare high
|
|
17
|
+
vcl: -1, # Voltage clamp low
|
|
18
|
+
vch: 2.5, # Voltage clamp high
|
|
19
|
+
vt: 0.9, # Termination voltage
|
|
20
|
+
voutlotyp: 0, #
|
|
21
|
+
vouthityp: 0, #
|
|
22
|
+
dmode: 'Largeswing-VT' # Driver mode (possibly ATE-specific)
|
|
23
|
+
}.merge(options)
|
|
24
|
+
@vil = options[:vil]
|
|
25
|
+
@vih = options[:vih]
|
|
26
|
+
@vol = options[:vol]
|
|
27
|
+
@voh = options[:voh]
|
|
28
|
+
@vcl = options[:vcl]
|
|
29
|
+
@vch = options[:vch]
|
|
30
|
+
@vt = options[:vt]
|
|
31
|
+
@voutlotyp = options[:voutlotyp]
|
|
32
|
+
@vouthityp = options[:vouthityp]
|
|
33
|
+
@dmode = options[:dmode]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def ==(level)
|
|
37
|
+
if level.is_a? PinLevelSingle
|
|
38
|
+
vil == level.vil &&
|
|
39
|
+
vih == level.vih &&
|
|
40
|
+
vol == level.vol &&
|
|
41
|
+
voh == level.voh &&
|
|
42
|
+
vcl == level.vcl &&
|
|
43
|
+
vch == level.vch &&
|
|
44
|
+
vt == level.vt &&
|
|
45
|
+
voutlotyp == level.voutlotyp &&
|
|
46
|
+
vouthityp == level.vouthityp &&
|
|
47
|
+
dmode == level.dmode
|
|
48
|
+
else
|
|
49
|
+
super
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def platform
|
|
54
|
+
Origen.interface.platform
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|