origen_testers 0.5.7 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/config/shared_commands.rb +6 -0
  3. data/config/version.rb +2 -2
  4. data/lib/commands/run.rb +44 -0
  5. data/lib/origen_testers.rb +19 -1
  6. data/lib/origen_testers/flow.rb +382 -0
  7. data/lib/origen_testers/generator.rb +32 -29
  8. data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -0
  9. data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -0
  10. data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -0
  11. data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -0
  12. data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -0
  13. data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +97 -0
  14. data/lib/origen_testers/igxl_based_tester/base/flow.rb +390 -115
  15. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +4 -54
  16. data/lib/origen_testers/igxl_based_tester/base/generator.rb +257 -11
  17. data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -0
  18. data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -0
  19. data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -0
  20. data/lib/origen_testers/igxl_based_tester/base/levelset.rb +109 -0
  21. data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -0
  22. data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +33 -1
  23. data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -0
  24. data/lib/origen_testers/igxl_based_tester/base/timesets.rb +47 -0
  25. data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +2 -2
  26. data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -0
  27. data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +4 -0
  28. data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -0
  29. data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -0
  30. data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -0
  31. data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -0
  32. data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -0
  33. data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +137 -0
  34. data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -0
  35. data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -0
  36. data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -0
  37. data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -0
  38. data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -0
  39. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +58 -0
  40. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +58 -0
  41. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +95 -0
  42. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +2 -2
  43. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +121 -0
  44. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +24 -0
  45. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +137 -0
  46. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +4 -0
  47. data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -0
  48. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -0
  49. data/lib/origen_testers/interface.rb +41 -6
  50. data/lib/origen_testers/no_interface.rb +7 -0
  51. data/lib/origen_testers/origen_ext/application/runner.rb +25 -0
  52. data/lib/origen_testers/origen_ext/generator.rb +37 -0
  53. data/lib/origen_testers/origen_ext/generator/flow.rb +70 -0
  54. data/lib/origen_testers/origen_ext/generator/resources.rb +21 -0
  55. data/lib/origen_testers/program_generators.rb +0 -1
  56. data/lib/origen_testers/smartest_based_tester/base/flow.rb +158 -134
  57. data/lib/origen_testers/smartest_based_tester/base/generator.rb +2 -3
  58. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +4 -0
  59. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +5 -6
  60. data/lib/origen_testers/test/dut.rb +5 -0
  61. data/lib/origen_testers/test/j750_base_interface.rb +0 -3
  62. data/lib/origen_testers/test/ultraflex_interface.rb +230 -4
  63. data/lib/origen_testers/test/v93k_interface.rb +5 -23
  64. data/program/components/_temp.rb +6 -0
  65. data/program/flow_control.rb +190 -62
  66. data/program/prb1.rb +13 -50
  67. data/program/prb2.rb +0 -16
  68. data/program/test.rb +12 -3
  69. data/program/uflex_resources.rb +159 -0
  70. metadata +66 -16
  71. data/lib/origen_testers/doc.rb +0 -224
  72. data/lib/origen_testers/doc/generator.rb +0 -124
  73. data/lib/origen_testers/doc/generator/flow.rb +0 -69
  74. data/lib/origen_testers/doc/generator/flow_line.rb +0 -201
  75. data/lib/origen_testers/doc/generator/test.rb +0 -66
  76. data/lib/origen_testers/doc/generator/test_group.rb +0 -64
  77. data/lib/origen_testers/doc/generator/tests.rb +0 -45
  78. data/lib/origen_testers/doc/model.rb +0 -160
  79. data/lib/origen_testers/generator/flow_control_api.rb +0 -611
  80. data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +0 -476
  81. data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +0 -9
@@ -1,476 +0,0 @@
1
- module OrigenTesters
2
- module SmartestBasedTester
3
- class Base
4
- class FlowNode
5
- attr_accessor :type, :id, :rendered, :parent, :deleted
6
- alias_method :rendered?, :rendered
7
- alias_method :deleted?, :deleted
8
- attr_reader :flow
9
-
10
- TYPES = [:run, :run_and_branch, :print, :print_to_datalog, :good_bin, :bad_bin, :group,
11
- :assign_value, :if_then
12
- ]
13
-
14
- ATTRS = {
15
- good_bin: {
16
- soft_bin: nil,
17
- soft_bin_desc: nil,
18
- bin: nil,
19
- bin_desc: nil,
20
- bin_type: :good,
21
- reprobe: false,
22
- color: :green,
23
- overon: true
24
- },
25
- bad_bin: {
26
- soft_bin: nil,
27
- soft_bin_desc: 'fail',
28
- bin: nil,
29
- bin_desc: nil,
30
- bin_type: :bad,
31
- reprobe: false,
32
- color: :red,
33
- overon: true
34
- },
35
- run: {
36
- nodes: [],
37
- else_nodes: [],
38
- test_suite: nil,
39
- id: nil
40
- },
41
- run_and_branch: {
42
- nodes: [],
43
- else_nodes: [],
44
- test_suite: nil,
45
- id: nil
46
- },
47
- if_then: {
48
- condition: nil,
49
- nodes: [],
50
- else_nodes: []
51
- },
52
- print: {
53
- value: nil
54
- },
55
- print_to_datalog: {
56
- value: nil
57
- },
58
- group: {
59
- name: nil,
60
- nodes: [],
61
- comment: nil,
62
- bypass: nil
63
- },
64
- assign_value: {
65
- variable: nil,
66
- value: nil
67
- }
68
- }
69
-
70
- ALIASES = {
71
- good_bin: {
72
- sbin: :soft_bin,
73
- softbin: :soft_bin
74
- },
75
- bad_bin: {
76
- sbin: :soft_bin,
77
- softbin: :soft_bin
78
- }
79
- }
80
-
81
- def parent
82
- @parent || flow.collection
83
- end
84
-
85
- # Call this instead of FlowNode.new, this will return a dedicated object for the given
86
- # type if one exists, otherwise it will instantiate a generic FlowNode object
87
- def self.create(flow, type, attrs = {})
88
- unless TYPES.include?(type)
89
- fail "Uknown flow node type :#{type}, valid types are #{TYPES.map { |t| ':' + t.to_s }.join(', ')}"
90
- end
91
- attrs[:_flow] = flow
92
- attrs[:called_internally] = true
93
- FlowNode.new(type, attrs)
94
- end
95
-
96
- def initialize(type, attrs = {})
97
- unless attrs.delete(:called_internally)
98
- fail "Don't use FlowNode.new, use FlowNode.create instead"
99
- end
100
- @flow = attrs.delete(:_flow)
101
- ATTRS[type].each do |attr, default|
102
- define_singleton_method("#{attr}=") do |v|
103
- instance_variable_set("@#{attr}", v)
104
- end
105
- define_singleton_method("#{attr}") do
106
- instance_variable_get("@#{attr}")
107
- end
108
- send("#{attr}=", default.respond_to?(:each) ? default.dup : default)
109
- end
110
- if ALIASES[type]
111
- ALIASES[type].each do |alias_, attr|
112
- define_singleton_method("#{alias_}=") do |v|
113
- send("#{attr}=", v)
114
- end
115
- define_singleton_method("#{alias_}") do
116
- send(attr)
117
- end
118
- end
119
- end
120
- @type = type
121
- attrs.each do |k, v|
122
- send("#{k}=", v) if respond_to?("#{k}=")
123
- end
124
- end
125
-
126
- def inspect
127
- "<#{self.class}:#{object_id} type: #{type}>"
128
- end
129
-
130
- # This module implements the flow control API for the V93K
131
- module FlowControlAPI
132
- def enable
133
- @enable
134
- end
135
-
136
- def enable=(val)
137
- @enable = val
138
- end
139
- alias_method :if_enable=, :enable=
140
- alias_method :if_enabled=, :enable=
141
- alias_method :enabled=, :enable=
142
-
143
- def unless_enable
144
- @unless_enable
145
- end
146
-
147
- def unless_enable=(val)
148
- @unless_enable = val
149
- end
150
- alias_method :unless_enabled=, :unless_enable=
151
-
152
- def if_jobs
153
- @if_jobs ||= []
154
- end
155
-
156
- def unless_jobs
157
- @unless_jobs ||= []
158
- end
159
-
160
- def if_job=(jobs)
161
- [jobs].flatten.compact.each do |job|
162
- job = job.to_s.upcase
163
- if_jobs << job unless if_jobs.include?(job)
164
- end
165
- end
166
- alias_method :if_jobs=, :if_job=
167
- alias_method :add_if_jobs, :if_job=
168
- alias_method :add_if_job, :if_job=
169
-
170
- def unless_job=(jobs)
171
- [jobs].flatten.compact.each do |job|
172
- job = job.to_s.upcase
173
- job.gsub!('!', '')
174
- unless_jobs << job unless unless_jobs.include?(job)
175
- end
176
- end
177
- alias_method :unless_jobs=, :unless_job=
178
- alias_method :add_unless_jobs, :unless_job=
179
- alias_method :add_unless_job, :unless_job=
180
-
181
- # Run the test only if the given flow variable is true
182
- def flag_true=(var)
183
- c = "@#{var.to_s.upcase} == 1"
184
- if type == :if_then && condition == :skip
185
- self.condition = c
186
- self
187
- else
188
- node = FlowNode.create(flow, :if_then)
189
- node.parent = parent
190
- node.condition = c
191
- node.nodes << self
192
- # Replace self in the main flow with the conditional node (which includes self
193
- # in its parent collection)
194
- parent[parent.index(self)] = node
195
- flow.replace_relationship_dependent(self, node)
196
- end
197
- end
198
-
199
- # Run the test unless the given flow variable is true
200
- def flag_clear=(var)
201
- c = "@#{var.to_s.upcase} != 1"
202
- if type == :if_then && condition == :skip
203
- self.condition = c
204
- self
205
- else
206
- node = FlowNode.create(flow, :if_then)
207
- node.parent = parent
208
- node.condition = c
209
- node.nodes << self
210
- # Replace self in the main flow with the conditional node (which includes self
211
- # in its parent collection)
212
- parent[parent.index(self)] = node
213
- flow.replace_relationship_dependent(self, node)
214
- end
215
- end
216
-
217
- def continue_on_fail
218
- if group? || if_then?
219
- nodes.reject! do |n|
220
- if n.bin?
221
- n.deleted = true
222
- parent.delete(n)
223
- true
224
- end
225
- end
226
- nodes.each { |n| n.continue_on_fail if n.test? || n.if_then? }
227
- if if_then?
228
- else_nodes.reject! do |n|
229
- if n.bin?
230
- n.deleted = true
231
- parent.delete(n)
232
- true
233
- end
234
- end
235
- else_nodes.each { |n| n.continue_on_fail if n.test? || n.if_then? }
236
- end
237
- else
238
- else_nodes.reject! do |n|
239
- if n.bin?
240
- n.deleted = true
241
- parent.delete(n)
242
- true
243
- end
244
- end
245
- end
246
- end
247
-
248
- def set_flag_on_fail(id = self.id)
249
- var = "#{id}_FAILED"
250
- if group?
251
- nodes.each { |n| n.set_flag_on_fail(id) if n.test? || n.if_then? }
252
- elsif if_then?
253
- nodes.each { |n| n.set_flag_on_fail(id) if n.test? || n.if_then? }
254
- else_nodes.each { |n| n.set_flag_on_fail(id) if n.test? || n.if_then? }
255
- else
256
- @fail_flags_set ||= []
257
- unless @fail_flags_set.include?(var)
258
- flow.flow_control_variables << var
259
- else_nodes << flow.assign_value(var, 1)
260
- @fail_flags_set << var
261
- end
262
- end
263
- var
264
- end
265
-
266
- def set_flag_on_pass(id = self.id)
267
- var = "#{id}_PASSED"
268
- if group?
269
- nodes.each { |n| n.set_flag_on_pass(id) if n.test? || n.if_then? }
270
- elsif if_then?
271
- nodes.each { |n| n.set_flag_on_pass(id) if n.test? || n.if_then? }
272
- else_nodes.each { |n| n.set_flag_on_pass(id) if n.test? || n.if_then? }
273
- else
274
- @pass_flags_set ||= []
275
- unless @pass_flags_set.include?(var)
276
- flow.flow_control_variables << var
277
- nodes << flow.assign_value(var, 1)
278
- @pass_flags_set << var
279
- end
280
- end
281
- var
282
- end
283
-
284
- def set_flag_on_ran(id = self.id)
285
- var = "#{id}_RAN"
286
- if group?
287
- nodes.each { |n| n.set_flag_on_ran(id) if n.test? }
288
- else
289
- @ran_flags_set ||= []
290
- unless @ran_flags_set.include?(var)
291
- flow.flow_control_variables << var
292
- nodes << flow.assign_value(var, 1)
293
- else_nodes << flow.assign_value(var, 1)
294
- @ran_flags_set << var
295
- end
296
- end
297
- var
298
- end
299
-
300
- def run_if_all_passed(parent)
301
- end
302
-
303
- def run_if_any_passed(parent)
304
- end
305
-
306
- def run_if_all_failed(parent)
307
- end
308
-
309
- def run_if_any_failed(parent)
310
- end
311
- end
312
- include FlowControlAPI
313
-
314
- def empty?
315
- return false if type == :run
316
- if respond_to?(:nodes)
317
- nodes.each { |n| return false unless n.deleted? || n.rendered? || n.empty? }
318
- if respond_to?(:else_nodes)
319
- else_nodes.each { |n| return false unless n.deleted? || n.rendered? || n.empty? }
320
- end
321
- true
322
- end
323
- end
324
-
325
- def lines(options = {})
326
- return [] if empty?
327
- # Convert Run nodes to Run and Branch as required
328
- if type == :run && (!nodes.empty? || !else_nodes.empty?)
329
- self.type = :run_and_branch
330
- end
331
- case type
332
- when :good_bin, :bad_bin
333
- l = ["stop_bin \"#{soft_bin || bin}\", \"#{soft_bin_desc}\", , #{bin_type}, #{reprobe ? 'reprobe' : 'noreprobe'}, #{color}, #{bin}, #{overon ? 'over_on' : 'not_over_on'};"]
334
- when :print
335
- l = ["print(\"#{value}\");"]
336
- when :print_to_datalog
337
- l = ["print_dl(\"#{value}\");"]
338
- when :run
339
- l = ["run(#{test_suite.name});"]
340
- when :run_and_branch
341
- l = [
342
- "run_and_branch(#{test_suite.name})",
343
- 'then',
344
- '{'
345
- ]
346
- nodes.each do |node|
347
- l << node.lines(indent: 3) unless node.rendered
348
- node.rendered = true
349
- end
350
- l += [
351
- '}',
352
- 'else',
353
- '{'
354
- ]
355
- else_nodes.each do |node|
356
- l << node.lines(indent: 3) unless node.rendered
357
- node.rendered = true
358
- end
359
- l << '}'
360
- l.flatten!
361
-
362
- when :if_then
363
- c = condition == :skip ? '1' : condition
364
- l = [
365
- "if #{c} then",
366
- '{'
367
- ]
368
- nodes.each do |node|
369
- l << node.lines(indent: 3) unless node.rendered
370
- node.rendered = true
371
- end
372
- l += [
373
- '}',
374
- 'else',
375
- '{'
376
- ]
377
- else_nodes.each do |node|
378
- l << node.lines(indent: 3) unless node.rendered
379
- node.rendered = true
380
- end
381
- l << '}'
382
- l.flatten!
383
-
384
- when :group
385
- l = ['{']
386
- nodes.each do |node|
387
- l << node.lines(indent: 3) unless node.rendered
388
- node.rendered = true
389
- end
390
- l << "}, #{bypass ? 'groupbypass, ' : ''}open,\"#{name}\", \"#{comment}\""
391
- l.flatten!
392
- when :assign_value
393
- l = ["@#{variable.to_s.upcase} = #{value};"]
394
- else
395
- fail "Don't know how to render: #{type}"
396
- end
397
- if options[:indent]
398
- l.map! { |line| (' ' * options[:indent]) + line }
399
- end
400
- l
401
- end
402
-
403
- def finalize(options = {})
404
- case type
405
- when :good_bin, :bad_bin
406
- if bin && bin_desc
407
- flow.hardware_bin_descriptions[bin] = bin_desc
408
- end
409
- end
410
-
411
- # Implement job/enable branches
412
- unless if_jobs.empty?
413
- condition = if_jobs.map { |j| "@JOB == \"#{j}\"" }.join(' or ')
414
- node = FlowNode.create(flow, :if_then)
415
- node.parent = parent
416
- node.condition = condition
417
- node.nodes << self
418
- parent[parent.index(self)] = node
419
- self.parent = node.nodes
420
- end
421
- unless unless_jobs.empty?
422
- condition = unless_jobs.map { |j| "@JOB != \"#{j}\"" }.join(' and ')
423
- node = FlowNode.create(flow, :if_then)
424
- node.parent = parent
425
- node.condition = condition
426
- node.nodes << self
427
- parent[parent.index(self)] = node
428
- self.parent = node.nodes
429
- end
430
- if enable
431
- condition = "@#{enable.to_s.upcase} == 1"
432
- node = FlowNode.create(flow, :if_then)
433
- node.parent = parent
434
- node.condition = condition
435
- node.nodes << self
436
- parent[parent.index(self)] = node
437
- self.parent = node.nodes
438
- end
439
- if unless_enable
440
- condition = "@#{unless_enable.to_s.upcase} == 1"
441
- node = FlowNode.create(flow, :if_then)
442
- node.parent = parent
443
- node.condition = condition
444
- node.else_nodes << self
445
- parent[parent.index(self)] = node
446
- self.parent = node.else_nodes
447
- end
448
- end
449
-
450
- def group?
451
- type == :group
452
- end
453
-
454
- def test?
455
- [:run, :run_and_branch].include?(@type)
456
- end
457
-
458
- def if_then?
459
- type == :if_then
460
- end
461
-
462
- def bin?
463
- [:stop_bin, :bad_bin].include?(@type)
464
- end
465
-
466
- def self.platform
467
- Origen.interface.platform
468
- end
469
-
470
- def platform
471
- self.class.platform
472
- end
473
- end
474
- end
475
- end
476
- end