origen_testers 0.52.15 → 0.53.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/commands/build.rb +2 -2
- data/lib/commands/convert.rb +1 -1
- data/lib/commands/run.rb +2 -2
- data/lib/origen_testers/api.rb +3 -0
- data/lib/origen_testers/atp/ast/node.rb +1 -2
- data/lib/origen_testers/atp/flow.rb +36 -24
- data/lib/origen_testers/atp/flow_api.rb +1 -0
- data/lib/origen_testers/atp/parser.rb +6 -4
- data/lib/origen_testers/atp/processor.rb +1 -0
- data/lib/origen_testers/atp/processors/on_pass_fail_remover.rb +1 -0
- data/lib/origen_testers/atp/processors/relationship.rb +2 -4
- data/lib/origen_testers/atp/runner.rb +1 -0
- data/lib/origen_testers/callback_handlers.rb +1 -0
- data/lib/origen_testers/charz/profile.rb +7 -7
- data/lib/origen_testers/charz/routines/search_routine.rb +1 -0
- data/lib/origen_testers/charz/session.rb +1 -1
- data/lib/origen_testers/charz.rb +14 -10
- data/lib/origen_testers/command_based_tester.rb +1 -2
- data/lib/origen_testers/decompiler/nodes.rb +1 -1
- data/lib/origen_testers/decompiler/pattern/enumerable_ext.rb +1 -1
- data/lib/origen_testers/decompiler/pattern/splitter.rb +0 -2
- data/lib/origen_testers/decompiler/pattern.rb +2 -1
- data/lib/origen_testers/flow.rb +2 -3
- data/lib/origen_testers/generator/identity_map.rb +1 -1
- data/lib/origen_testers/generator/test_numberer.rb +1 -3
- data/lib/origen_testers/generator.rb +4 -2
- data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +1 -1
- data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +1 -1
- data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +1 -1
- data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +1 -1
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +11 -17
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +17 -2
- data/lib/origen_testers/igxl_based_tester/base/global_specs.rb +1 -1
- data/lib/origen_testers/igxl_based_tester/base/job.rb +16 -16
- data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +2 -2
- data/lib/origen_testers/igxl_based_tester/base/levelset.rb +2 -5
- data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +1 -3
- data/lib/origen_testers/igxl_based_tester/base/patset.rb +0 -1
- data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +0 -1
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +13 -14
- data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +2 -2
- data/lib/origen_testers/igxl_based_tester/base/timesets.rb +1 -1
- data/lib/origen_testers/igxl_based_tester/base/timesets_basic.rb +1 -1
- data/lib/origen_testers/igxl_based_tester/base.rb +16 -19
- data/lib/origen_testers/igxl_based_tester/decompiler/atp.rb +12 -20
- data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +1 -2
- data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +1 -2
- data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +1 -2
- data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +7 -8
- data/lib/origen_testers/igxl_based_tester/j750.rb +3 -2
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +5 -6
- data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +1 -1
- data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +18 -20
- data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +2 -2
- data/lib/origen_testers/igxl_based_tester/parser.rb +12 -12
- data/lib/origen_testers/igxl_based_tester/ultraflex/ate_hardware.rb +55 -55
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +1 -2
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +1 -2
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +9 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex.rb +12 -14
- data/lib/origen_testers/igxl_based_tester.rb +1 -1
- data/lib/origen_testers/interface.rb +8 -8
- data/lib/origen_testers/labview_based_tester/pxie6570.rb +2 -0
- data/lib/origen_testers/labview_based_tester.rb +2 -2
- data/lib/origen_testers/origen_ext/pins/pin.rb +6 -5
- data/lib/origen_testers/origen_ext/pins/pin_collection.rb +6 -6
- data/lib/origen_testers/parser/searchable_array.rb +2 -2
- data/lib/origen_testers/parser/searchable_hash.rb +2 -2
- data/lib/origen_testers/parser.rb +1 -1
- data/lib/origen_testers/pattern_compilers/assembler.rb +3 -1
- data/lib/origen_testers/pattern_compilers/base.rb +5 -4
- data/lib/origen_testers/pattern_compilers/igxl_based.rb +9 -3
- data/lib/origen_testers/pattern_compilers/j750.rb +4 -3
- data/lib/origen_testers/pattern_compilers/ultraflex.rb +4 -3
- data/lib/origen_testers/pattern_compilers/v93k.rb +28 -31
- data/lib/origen_testers/pattern_compilers.rb +1 -0
- data/lib/origen_testers/program_generators.rb +6 -0
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +29 -26
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +2 -0
- data/lib/origen_testers/smartest_based_tester/base/limits_file.rb +2 -2
- data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +3 -3
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_flow_vars.rb +1 -1
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +3 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +1 -1
- data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +1 -1
- data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +1 -1
- data/lib/origen_testers/smartest_based_tester/base.rb +11 -13
- data/lib/origen_testers/smartest_based_tester/decompiler/avc.rb +5 -10
- data/lib/origen_testers/smartest_based_tester/decompiler/nodes.rb +1 -1
- data/lib/origen_testers/smartest_based_tester/decompiler.rb +1 -0
- data/lib/origen_testers/smartest_based_tester/smt8.rb +5 -6
- data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +1 -2
- data/lib/origen_testers/smartest_based_tester/v93k.rb +1 -1
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/shmoo_test.rb +3 -2
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/test_suite.rb +5 -4
- data/lib/origen_testers/smartest_based_tester/v93k_smt8.rb +1 -1
- data/lib/origen_testers/stil_based_tester/base.rb +6 -7
- data/lib/origen_testers/test/custom_test_interface.rb +7 -7
- data/lib/origen_testers/test/dut.rb +23 -22
- data/lib/origen_testers/test/interface.rb +9 -7
- data/lib/origen_testers/test/nvm.rb +3 -3
- data/lib/origen_testers/timing/timeset.rb +0 -2
- data/lib/origen_testers/timing/timing_api.rb +2 -3
- data/lib/origen_testers/vector.rb +6 -5
- data/lib/origen_testers/vector_generator.rb +9 -3
- data/lib/origen_testers.rb +1 -1
- metadata +7 -23
|
@@ -3,6 +3,7 @@ module OrigenTesters
|
|
|
3
3
|
class Base
|
|
4
4
|
class FlowLine
|
|
5
5
|
attr_accessor :type, :id, :cz_setup # cz_setup is a virtual attrib since it is not part of the regular flow line
|
|
6
|
+
|
|
6
7
|
# cz_setup combine with instance name when characterize opcode is used
|
|
7
8
|
|
|
8
9
|
# Map any aliases to the official names here, multiple aliases for a given attribute
|
|
@@ -24,30 +25,23 @@ module OrigenTesters
|
|
|
24
25
|
# Aliases can also be used to set defaults on multiple attributes like this,
|
|
25
26
|
# use :value to refer to the value passed in to the given alias
|
|
26
27
|
flag_false: { device_condition: 'flag-false',
|
|
27
|
-
device_name: :value
|
|
28
|
-
},
|
|
28
|
+
device_name: :value },
|
|
29
29
|
flag_true: { device_condition: 'flag-true',
|
|
30
|
-
device_name: :value
|
|
31
|
-
},
|
|
30
|
+
device_name: :value },
|
|
32
31
|
flag_false_any: { group_specifier: 'any-active',
|
|
33
32
|
group_condition: 'flag-false',
|
|
34
|
-
group_name: :value
|
|
35
|
-
},
|
|
33
|
+
group_name: :value },
|
|
36
34
|
flag_false_all: { group_specifier: 'all-active',
|
|
37
35
|
group_condition: 'flag-false',
|
|
38
|
-
group_name: :value
|
|
39
|
-
},
|
|
36
|
+
group_name: :value },
|
|
40
37
|
flag_true_any: { group_specifier: 'any-active',
|
|
41
38
|
group_condition: 'flag-true',
|
|
42
|
-
group_name: :value
|
|
43
|
-
},
|
|
39
|
+
group_name: :value },
|
|
44
40
|
flag_true_all: { group_specifier: 'all-active',
|
|
45
41
|
group_condition: 'flag-true',
|
|
46
|
-
group_name: :value
|
|
47
|
-
},
|
|
42
|
+
group_name: :value },
|
|
48
43
|
flag_clear: { device_condition: 'flag-clear',
|
|
49
|
-
device_name: :value
|
|
50
|
-
}
|
|
44
|
+
device_name: :value }
|
|
51
45
|
}
|
|
52
46
|
|
|
53
47
|
# Assign attribute defaults here, generally this should match whatever defaults
|
|
@@ -155,11 +149,11 @@ module OrigenTesters
|
|
|
155
149
|
@type = type
|
|
156
150
|
# Set the defaults
|
|
157
151
|
DEFAULTS[@type.to_sym].each do |k, v|
|
|
158
|
-
send("#{k}=", v) if
|
|
152
|
+
send("#{k}=", v) if respond_to?("#{k}=")
|
|
159
153
|
end
|
|
160
154
|
# Then the values that have been supplied
|
|
161
155
|
attrs.each do |k, v|
|
|
162
|
-
send("#{k}=", v) if
|
|
156
|
+
send("#{k}=", v) if respond_to?("#{k}=")
|
|
163
157
|
end
|
|
164
158
|
# override test numbers if diff-friendly output desired
|
|
165
159
|
if Origen.tester.diff_friendly_output?
|
|
@@ -257,7 +251,7 @@ module OrigenTesters
|
|
|
257
251
|
# code
|
|
258
252
|
end
|
|
259
253
|
|
|
260
|
-
def id
|
|
254
|
+
def id # rubocop:disable Lint/DuplicateMethods
|
|
261
255
|
@id || "#{parameter}_#{unique_counter}"
|
|
262
256
|
end
|
|
263
257
|
|
|
@@ -337,6 +337,7 @@ module OrigenTesters
|
|
|
337
337
|
[edgeset_sheets, timeset_sheets].each do |sheets|
|
|
338
338
|
sheets.each do |name, sheet|
|
|
339
339
|
next if sheet.class.name =~ /Edgesets$/ && sheet.ts_basic
|
|
340
|
+
|
|
340
341
|
g << sheet
|
|
341
342
|
end
|
|
342
343
|
end
|
|
@@ -362,6 +363,7 @@ module OrigenTesters
|
|
|
362
363
|
def pinmaps(filename = pinmaps_filename)
|
|
363
364
|
f = filename.to_sym
|
|
364
365
|
return pinmap_sheets[f] if pinmap_sheets[f]
|
|
366
|
+
|
|
365
367
|
p = platform::Pinmap.new
|
|
366
368
|
p.filename = f
|
|
367
369
|
pinmap_sheets[f] = p
|
|
@@ -377,6 +379,7 @@ module OrigenTesters
|
|
|
377
379
|
def test_instances(filename = test_instances_filename)
|
|
378
380
|
f = filename.to_sym
|
|
379
381
|
return test_instance_sheets[f] if test_instance_sheets[f]
|
|
382
|
+
|
|
380
383
|
t = platform::TestInstances.new
|
|
381
384
|
t.filename = f
|
|
382
385
|
test_instance_sheets[f] = t
|
|
@@ -391,6 +394,7 @@ module OrigenTesters
|
|
|
391
394
|
def patsets(filename = patsets_filename)
|
|
392
395
|
f = filename.to_sym
|
|
393
396
|
return patset_sheets[f] if patset_sheets[f]
|
|
397
|
+
|
|
394
398
|
p = platform::Patsets.new
|
|
395
399
|
p.filename = f
|
|
396
400
|
patset_sheets[f] = p
|
|
@@ -407,6 +411,7 @@ module OrigenTesters
|
|
|
407
411
|
def patsubrs(filename = patsubrs_filename)
|
|
408
412
|
f = filename.to_sym
|
|
409
413
|
return patsubr_sheets[f] if patsubr_sheets[f]
|
|
414
|
+
|
|
410
415
|
p = platform::Patsubrs.new
|
|
411
416
|
p.filename = f
|
|
412
417
|
patsubr_sheets[f] = p
|
|
@@ -426,6 +431,7 @@ module OrigenTesters
|
|
|
426
431
|
# DH here need to reset the flow!!
|
|
427
432
|
f = filename.to_sym
|
|
428
433
|
return flow_sheets[f] if flow_sheets[f] # will return flow if already existing
|
|
434
|
+
|
|
429
435
|
p = platform::Flow.new
|
|
430
436
|
p.inhibit_output if Origen.interface.resources_mode?
|
|
431
437
|
p.filename = f
|
|
@@ -442,6 +448,7 @@ module OrigenTesters
|
|
|
442
448
|
def patgroups(filename = patgroups_filename)
|
|
443
449
|
f = filename.to_sym
|
|
444
450
|
return patgroup_sheets[f] if patgroup_sheets[f]
|
|
451
|
+
|
|
445
452
|
p = platform::Patgroups.new
|
|
446
453
|
p.filename = f
|
|
447
454
|
patgroup_sheets[f] = p
|
|
@@ -470,6 +477,7 @@ module OrigenTesters
|
|
|
470
477
|
|
|
471
478
|
f = filename.to_sym
|
|
472
479
|
return edgeset_sheets[f] if edgeset_sheets[f]
|
|
480
|
+
|
|
473
481
|
e = platform::Edgesets.new(options)
|
|
474
482
|
e.filename = f
|
|
475
483
|
edgeset_sheets[f] = e
|
|
@@ -489,6 +497,7 @@ module OrigenTesters
|
|
|
489
497
|
|
|
490
498
|
f = filename.to_sym
|
|
491
499
|
return timeset_sheets[f] if timeset_sheets[f]
|
|
500
|
+
|
|
492
501
|
case options[:timeset_basic]
|
|
493
502
|
when true
|
|
494
503
|
t = platform::TimesetsBasic.new(options)
|
|
@@ -518,12 +527,13 @@ module OrigenTesters
|
|
|
518
527
|
def levelsets(filename = levelsets_filename)
|
|
519
528
|
f = filename.to_sym
|
|
520
529
|
return levelset_sheets[f] if levelset_sheets[f]
|
|
530
|
+
|
|
521
531
|
t = platform::Levelset.new
|
|
522
532
|
t.filename = f
|
|
523
533
|
levelset_sheets[f] = t
|
|
524
534
|
end
|
|
525
|
-
alias_method :time_sets, :timesets
|
|
526
|
-
alias_method :timing_sets, :timesets
|
|
535
|
+
alias_method :time_sets, :timesets # rubocop:disable Lint/DuplicateMethods
|
|
536
|
+
alias_method :timing_sets, :timesets # rubocop:disable Lint/DuplicateMethods
|
|
527
537
|
|
|
528
538
|
# Returns the current AC specset sheet (as defined by the current value of
|
|
529
539
|
# ac_specsets_filename).
|
|
@@ -534,6 +544,7 @@ module OrigenTesters
|
|
|
534
544
|
def ac_specsets(filename = ac_specsets_filename)
|
|
535
545
|
f = filename.to_sym
|
|
536
546
|
return ac_specset_sheets[f] if ac_specset_sheets[f]
|
|
547
|
+
|
|
537
548
|
s = platform::ACSpecsets.new
|
|
538
549
|
s.filename = f
|
|
539
550
|
ac_specset_sheets[f] = s
|
|
@@ -548,6 +559,7 @@ module OrigenTesters
|
|
|
548
559
|
def dc_specsets(filename = dc_specsets_filename)
|
|
549
560
|
f = filename.to_sym
|
|
550
561
|
return dc_specset_sheets[f] if dc_specset_sheets[f]
|
|
562
|
+
|
|
551
563
|
s = platform::DCSpecsets.new
|
|
552
564
|
s.filename = f
|
|
553
565
|
dc_specset_sheets[f] = s
|
|
@@ -562,6 +574,7 @@ module OrigenTesters
|
|
|
562
574
|
def global_specs(filename = global_specs_filename)
|
|
563
575
|
f = filename.to_sym
|
|
564
576
|
return global_spec_sheets[f] if global_spec_sheets[f]
|
|
577
|
+
|
|
565
578
|
s = platform::GlobalSpecs.new
|
|
566
579
|
s.filename = f
|
|
567
580
|
global_spec_sheets[f] = s
|
|
@@ -576,6 +589,7 @@ module OrigenTesters
|
|
|
576
589
|
def program_jobs(filename = jobs_filename)
|
|
577
590
|
f = filename.to_sym
|
|
578
591
|
return job_sheets[f] if job_sheets[f]
|
|
592
|
+
|
|
579
593
|
j = platform::Jobs.new
|
|
580
594
|
j.filename = f
|
|
581
595
|
job_sheets[f] = j
|
|
@@ -590,6 +604,7 @@ module OrigenTesters
|
|
|
590
604
|
def references(filename = references_filename)
|
|
591
605
|
f = filename.to_sym
|
|
592
606
|
return reference_sheets[f] if reference_sheets[f]
|
|
607
|
+
|
|
593
608
|
r = platform::References.new
|
|
594
609
|
r.filename = f
|
|
595
610
|
reference_sheets[f] = r
|
|
@@ -24,24 +24,24 @@ module OrigenTesters
|
|
|
24
24
|
|
|
25
25
|
def initialize(jname, options = {}) # :nodoc:
|
|
26
26
|
@name = jname
|
|
27
|
-
options[:pinmap] ? @pinmap
|
|
28
|
-
options[:instances] ? @instances
|
|
29
|
-
options[:flows] ? @flows
|
|
30
|
-
options[:ac_specs] ? @ac_specs = [options[:ac_specs]] : @ac_specs
|
|
31
|
-
options[:dc_specs] ? @dc_specs = [options[:dc_specs]] : @dc_specs
|
|
32
|
-
options[:patsets] ? @patsets
|
|
33
|
-
options[:patgroups] ? @patgroups = [options[:patgroups]] : @patgroups
|
|
34
|
-
options[:bintables] ? @bintables = [options[:bintables]] : @bintables
|
|
35
|
-
options[:cz] ? @cz
|
|
36
|
-
options[:test_procs] ? @test_procs
|
|
27
|
+
options[:pinmap] ? @pinmap = [options[:pinmap]] : @pinmap = []
|
|
28
|
+
options[:instances] ? @instances = [options[:instances]] : @instances = []
|
|
29
|
+
options[:flows] ? @flows = [options[:flows]] : @flows = []
|
|
30
|
+
options[:ac_specs] ? @ac_specs = [options[:ac_specs]] : @ac_specs = []
|
|
31
|
+
options[:dc_specs] ? @dc_specs = [options[:dc_specs]] : @dc_specs = []
|
|
32
|
+
options[:patsets] ? @patsets = [options[:patsets]] : @patsets = []
|
|
33
|
+
options[:patgroups] ? @patgroups = [options[:patgroups]] : @patgroups = []
|
|
34
|
+
options[:bintables] ? @bintables = [options[:bintables]] : @bintables = []
|
|
35
|
+
options[:cz] ? @cz = [options[:cz]] : @cz = []
|
|
36
|
+
options[:test_procs] ? @test_procs = [options[:test_procs]] : @test_procs = []
|
|
37
37
|
options[:mix_sig_timing] ? @mix_sig_timing = [options[:mix_sig_timing]] : @mix_sig_timing = []
|
|
38
|
-
options[:wave_defs] ? @wave_defs
|
|
39
|
-
options[:psets] ? @psets
|
|
40
|
-
options[:signals] ? @signals
|
|
41
|
-
options[:port_map] ? @port_map
|
|
42
|
-
options[:fract_bus] ? @fract_bus
|
|
38
|
+
options[:wave_defs] ? @wave_defs = [options[:wave_defs]] : @wave_defs = []
|
|
39
|
+
options[:psets] ? @psets = [options[:psets]] : @psets = []
|
|
40
|
+
options[:signals] ? @signals = [options[:signals]] : @signals = []
|
|
41
|
+
options[:port_map] ? @port_map = [options[:port_map]] : @port_map = []
|
|
42
|
+
options[:fract_bus] ? @fract_bus = [options[:fract_bus]] : @fract_bus = []
|
|
43
43
|
options[:concurrent_seq] ? @concurrent_seq = [options[:concurrent_seq]] : @concurrent_seq = []
|
|
44
|
-
options[:comment] ? @comment
|
|
44
|
+
options[:comment] ? @comment = options[:instances] : @comment = nil
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
# Assigns job information for the given object
|
|
@@ -17,8 +17,8 @@ module OrigenTesters
|
|
|
17
17
|
vcl: -1, # Voltage clamp low
|
|
18
18
|
vch: 2.5, # Voltage clamp high
|
|
19
19
|
vt: 0.9, # Termination voltage
|
|
20
|
-
voutlotyp: 0,
|
|
21
|
-
vouthityp: 0,
|
|
20
|
+
voutlotyp: 0,
|
|
21
|
+
vouthityp: 0,
|
|
22
22
|
dmode: 'Largeswing-VT' # Driver mode (possibly ATE-specific)
|
|
23
23
|
}.merge(options)
|
|
24
24
|
@vil = options[:vil]
|
|
@@ -18,8 +18,6 @@ module OrigenTesters
|
|
|
18
18
|
@pins = {}
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
# rubocop:disable Metrics/ParameterLists
|
|
22
|
-
|
|
23
21
|
# Adds a pin level to the given levelset
|
|
24
22
|
def add(lsname, pin, level, options = {})
|
|
25
23
|
options = {
|
|
@@ -31,7 +29,7 @@ module OrigenTesters
|
|
|
31
29
|
add_level(pin, level)
|
|
32
30
|
@name = lsname
|
|
33
31
|
@spec_sheet = options[:spec_sheet]
|
|
34
|
-
@ls_sheet_pins
|
|
32
|
+
@ls_sheet_pins ||= options[:ls_sheet_pins]
|
|
35
33
|
end
|
|
36
34
|
|
|
37
35
|
# Assigns a level object to the given pin for this levelset
|
|
@@ -90,8 +88,7 @@ module OrigenTesters
|
|
|
90
88
|
end
|
|
91
89
|
|
|
92
90
|
def format_uflex_level(data, options = {})
|
|
93
|
-
options = {
|
|
94
|
-
}.merge(options)
|
|
91
|
+
options = {}.merge(options)
|
|
95
92
|
|
|
96
93
|
if data !~ /^\s*$/
|
|
97
94
|
data = data.gsub(/^/, '=')
|
|
@@ -11,8 +11,7 @@ module OrigenTesters
|
|
|
11
11
|
pattern: :pattern_file
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
DEFAULTS = {
|
|
15
|
-
}
|
|
14
|
+
DEFAULTS = {}
|
|
16
15
|
|
|
17
16
|
# Generate accessors for all attributes and their aliases
|
|
18
17
|
ATTRS.each do |attr|
|
|
@@ -82,7 +81,6 @@ module OrigenTesters
|
|
|
82
81
|
def name=(n)
|
|
83
82
|
@name = n
|
|
84
83
|
lines.each { |l| l.group_name = n }
|
|
85
|
-
n
|
|
86
84
|
end
|
|
87
85
|
|
|
88
86
|
# Returns all lines in the pattern set
|
|
@@ -52,19 +52,19 @@ module OrigenTesters
|
|
|
52
52
|
# Build the type specific accessors (aliases)
|
|
53
53
|
self.class::TEST_INSTANCE_ALIASES[@type.to_sym].each do |_alias, val|
|
|
54
54
|
define_singleton_method("#{_alias}=") do |v|
|
|
55
|
-
send("#{val}=", v) if
|
|
55
|
+
send("#{val}=", v) if respond_to?("#{val}=", v)
|
|
56
56
|
end
|
|
57
57
|
define_singleton_method("#{_alias}") do
|
|
58
|
-
send(val) if
|
|
58
|
+
send(val) if respond_to?(val)
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
# Set the defaults
|
|
62
62
|
self.class::TEST_INSTANCE_DEFAULTS[@type.to_sym].each do |k, v|
|
|
63
|
-
send("#{k}=", v) if
|
|
63
|
+
send("#{k}=", v) if respond_to?("#{k}=", v)
|
|
64
64
|
end
|
|
65
65
|
# Then the values that have been supplied
|
|
66
66
|
attrs.each do |k, v|
|
|
67
|
-
send("#{k}=", v) if
|
|
67
|
+
send("#{k}=", v) if respond_to?("#{k}=", v)
|
|
68
68
|
end
|
|
69
69
|
end
|
|
70
70
|
|
|
@@ -212,8 +212,7 @@ module OrigenTesters
|
|
|
212
212
|
r = r / 1_000_000.0
|
|
213
213
|
elsif r = options.delete(:ma) || options.delete(:mA)
|
|
214
214
|
r = r / 1000.0
|
|
215
|
-
|
|
216
|
-
else
|
|
215
|
+
r = options.delete(:a) || options.delete(:A)
|
|
217
216
|
fail "Can't determine requested irange!"
|
|
218
217
|
end
|
|
219
218
|
end
|
|
@@ -229,7 +228,7 @@ module OrigenTesters
|
|
|
229
228
|
when r > 0.00002 then 2
|
|
230
229
|
when r > 0.000002 then 1
|
|
231
230
|
else 0
|
|
232
|
-
|
|
231
|
+
end
|
|
233
232
|
end
|
|
234
233
|
|
|
235
234
|
elsif @type == :powersupply
|
|
@@ -246,21 +245,22 @@ module OrigenTesters
|
|
|
246
245
|
when r > 0.00005 then 2 # between 50ua - 500u
|
|
247
246
|
when r > 0.000005 then 3 # between 5u - 50u
|
|
248
247
|
else 8
|
|
249
|
-
|
|
248
|
+
end
|
|
250
249
|
end
|
|
251
250
|
|
|
252
251
|
else # :pin_pmu
|
|
253
252
|
if r == :smart
|
|
254
253
|
self.irange = 5
|
|
255
254
|
elsif r == :auto
|
|
256
|
-
fail 'Auto range not available in FIMV mode!' if
|
|
255
|
+
fail 'Auto range not available in FIMV mode!' if fimv?
|
|
256
|
+
|
|
257
257
|
self.irange = 6
|
|
258
258
|
else
|
|
259
259
|
if fimv?
|
|
260
260
|
self.irange = case
|
|
261
261
|
when r > 0.0002 then 2
|
|
262
262
|
else 4
|
|
263
|
-
|
|
263
|
+
end
|
|
264
264
|
else
|
|
265
265
|
self.irange = case
|
|
266
266
|
when r > 0.0002 then 2
|
|
@@ -268,7 +268,7 @@ module OrigenTesters
|
|
|
268
268
|
when r > 0.000002 then 0
|
|
269
269
|
when r > 0.0000002 then 1
|
|
270
270
|
else 3
|
|
271
|
-
|
|
271
|
+
end
|
|
272
272
|
end
|
|
273
273
|
end
|
|
274
274
|
end
|
|
@@ -297,8 +297,7 @@ module OrigenTesters
|
|
|
297
297
|
elsif r == :auto
|
|
298
298
|
self.vrange = 5
|
|
299
299
|
elsif !r
|
|
300
|
-
|
|
301
|
-
else
|
|
300
|
+
unless r = options.delete(:v) || options.delete(:V)
|
|
302
301
|
fail "Can't determine requested vrange!"
|
|
303
302
|
end
|
|
304
303
|
end
|
|
@@ -307,7 +306,7 @@ module OrigenTesters
|
|
|
307
306
|
when r > 5 then 2
|
|
308
307
|
when r > 2 then 1
|
|
309
308
|
else 0
|
|
310
|
-
|
|
309
|
+
end
|
|
311
310
|
self
|
|
312
311
|
end
|
|
313
312
|
|
|
@@ -12,7 +12,7 @@ module OrigenTesters
|
|
|
12
12
|
@append_version = true
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
def name
|
|
15
|
+
def name # rubocop:disable Lint/DuplicateMethods
|
|
16
16
|
if unversioned_name
|
|
17
17
|
if version && @append_version
|
|
18
18
|
"#{unversioned_name}_v#{version}"
|
|
@@ -48,7 +48,7 @@ module OrigenTesters
|
|
|
48
48
|
self.class == other_instance_group.class &&
|
|
49
49
|
unversioned_name.to_s == other_instance_group.unversioned_name.to_s &&
|
|
50
50
|
size == other_instance_group.size &&
|
|
51
|
-
|
|
51
|
+
all? do |ins|
|
|
52
52
|
other_instance_group.any? { |other_ins| ins == other_ins }
|
|
53
53
|
end
|
|
54
54
|
end
|
|
@@ -21,7 +21,7 @@ module OrigenTesters
|
|
|
21
21
|
pin = pin.to_sym unless pin.is_a? Symbol
|
|
22
22
|
esname = pin.to_sym unless esname.is_a? Symbol
|
|
23
23
|
@ts.key?(tsname) ? @ts[tsname].add_edge(pin, esname) : @ts[tsname] = platform::Timeset.new(tsname, pin, esname, options)
|
|
24
|
-
@ts_sheet_pins
|
|
24
|
+
@ts_sheet_pins ||= options[:ts_sheet_pins]
|
|
25
25
|
@ts[tsname]
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -21,7 +21,7 @@ module OrigenTesters
|
|
|
21
21
|
pin = pin.to_sym unless pin.is_a? Symbol
|
|
22
22
|
esname = pin.to_sym unless esname.is_a? Symbol
|
|
23
23
|
@ts.key?(tsname) ? @ts[tsname].add_edge(pin, esname) : @ts[tsname] = platform::Timeset.new(tsname, pin, esname, options)
|
|
24
|
-
@ts_sheet_pins
|
|
24
|
+
@ts_sheet_pins ||= options[:ts_sheet_pins]
|
|
25
25
|
@ts[tsname]
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -167,9 +167,7 @@ module OrigenTesters
|
|
|
167
167
|
def get_tester_channel(chanmapname, pinname, sitenum)
|
|
168
168
|
if sitenum <= @max_site
|
|
169
169
|
@testerchannel = @channelmap[chanmapname][sitenum][pinname].channel
|
|
170
|
-
|
|
171
|
-
else
|
|
172
|
-
return nil
|
|
170
|
+
@testerchannel
|
|
173
171
|
end
|
|
174
172
|
end
|
|
175
173
|
|
|
@@ -179,10 +177,8 @@ module OrigenTesters
|
|
|
179
177
|
if sitenum <= @max_site
|
|
180
178
|
if @channelmap[chanmapname][sitenum][pinname].type.include?('Merged')
|
|
181
179
|
@merged_channels = @channelmap[chanmapname][sitenum][pinname].type.split('Merged')[1]
|
|
182
|
-
|
|
180
|
+
'x' + @merged_channels
|
|
183
181
|
end
|
|
184
|
-
else
|
|
185
|
-
return nil
|
|
186
182
|
end
|
|
187
183
|
end
|
|
188
184
|
|
|
@@ -206,12 +202,13 @@ module OrigenTesters
|
|
|
206
202
|
if @testerconfig[testconfigname][slot][:instrument].to_s == 'VHDVS'
|
|
207
203
|
@productnum = @testerconfig[testconfigname][slot][:idprom].split(' ')[0]
|
|
208
204
|
# binding.pry
|
|
209
|
-
if (@productnum.include?('805-052-')) && (@productnum.split('-')[2].to_i >=
|
|
205
|
+
if (@productnum.include?('805-052-')) && (@productnum.split('-')[2].to_i >= 0o5)
|
|
210
206
|
return '+'
|
|
211
207
|
end
|
|
212
208
|
end
|
|
213
209
|
nil # if nothing matched
|
|
214
210
|
end
|
|
211
|
+
|
|
215
212
|
# Check if a specific VHDVS (UVS256) channel assignment is _HC variety (high-current)
|
|
216
213
|
# If the specific VHDVS channel is _HC variety, returns a "_HC" string, otherwise nil.
|
|
217
214
|
def is_vhdvs_hc(chanmapname, pinname, sitenum)
|
|
@@ -269,6 +266,7 @@ module OrigenTesters
|
|
|
269
266
|
unless prog_dir
|
|
270
267
|
fail 'You must supply the directory containing the test program sheets, or define it via Origen.config.test_program_output_directory'
|
|
271
268
|
end
|
|
269
|
+
|
|
272
270
|
@parser ||= IGXLBasedTester::Parser.new
|
|
273
271
|
@parsed_dir ||= false
|
|
274
272
|
if @parsed_dir != prog_dir
|
|
@@ -299,8 +297,7 @@ module OrigenTesters
|
|
|
299
297
|
# $tester.store(:offset => -2) # Just realized I need to capture that earlier vector
|
|
300
298
|
def store(*pins)
|
|
301
299
|
options = pins.last.is_a?(Hash) ? pins.pop : {}
|
|
302
|
-
options = { offset: 0
|
|
303
|
-
}.merge(options)
|
|
300
|
+
options = { offset: 0 }.merge(options)
|
|
304
301
|
update_vector microcode: 'stv', offset: options[:offset]
|
|
305
302
|
last_vector(options[:offset]).contains_capture = true unless @inhibit_vectors
|
|
306
303
|
end
|
|
@@ -319,8 +316,7 @@ module OrigenTesters
|
|
|
319
316
|
# $tester.cycle # This is the vector that will be captured
|
|
320
317
|
def store_next_cycle(*pins)
|
|
321
318
|
options = pins.last.is_a?(Hash) ? pins.pop : {}
|
|
322
|
-
options = {
|
|
323
|
-
}.merge(options)
|
|
319
|
+
options = {}.merge(options)
|
|
324
320
|
|
|
325
321
|
unless @inhibit_vectors
|
|
326
322
|
preset_next_vector microcode: 'stv' do |vector|
|
|
@@ -407,8 +403,7 @@ module OrigenTesters
|
|
|
407
403
|
# $tester.freq_count($top.pin(:d_out)) # Freq measure on pin "d_out"
|
|
408
404
|
# $tester.freq_count($top.pin(:d_out):readcode => 10)
|
|
409
405
|
def freq_count(pin, options = {})
|
|
410
|
-
options = { readcode: false
|
|
411
|
-
}.merge(options)
|
|
406
|
+
options = { readcode: false }.merge(options)
|
|
412
407
|
|
|
413
408
|
set_code(options[:readcode]) if options[:readcode]
|
|
414
409
|
cycle(microcode: "#{@microcode[:set_flag]} (cpuA)")
|
|
@@ -443,7 +438,7 @@ module OrigenTesters
|
|
|
443
438
|
capture_vector_mem1: false, # capture vector to memory type 1, here for J750 will be stv_m1
|
|
444
439
|
capture_vector_mem2: false, # capture vector to memory type 2, here for J750 will be stv_c
|
|
445
440
|
pin: false, # pin on which to drive or expect data, pass pin object here!
|
|
446
|
-
pin_data: false
|
|
441
|
+
pin_data: false # pin data (:none, :drive, :expect)
|
|
447
442
|
}.merge(options)
|
|
448
443
|
|
|
449
444
|
mto_opcode = ''
|
|
@@ -687,7 +682,7 @@ module OrigenTesters
|
|
|
687
682
|
group: false, # If true the end pattern is intended to run within a pattern group
|
|
688
683
|
high_voltage: false, # Supply a pin name here to declare it as an HV instrument (not yet defined)
|
|
689
684
|
freq_counter: false, # Supply a pin name here to declare it as a frequency counter
|
|
690
|
-
memory_test: false
|
|
685
|
+
memory_test: false # If true, define 2-bit MTO DGEN as instrument
|
|
691
686
|
}.merge(options)
|
|
692
687
|
|
|
693
688
|
if level_period?
|
|
@@ -850,8 +845,9 @@ module OrigenTesters
|
|
|
850
845
|
end
|
|
851
846
|
|
|
852
847
|
def enable_flag(options = {})
|
|
853
|
-
options = {
|
|
854
|
-
|
|
848
|
+
options = {
|
|
849
|
+
flagnum: 4 # default flag to use
|
|
850
|
+
}.merge(options)
|
|
855
851
|
|
|
856
852
|
if options[:flagnum] > @flags.length
|
|
857
853
|
abort "ERROR! Invalid flag value passed to 'enable_flag' method!\n"
|
|
@@ -861,8 +857,9 @@ module OrigenTesters
|
|
|
861
857
|
end
|
|
862
858
|
|
|
863
859
|
def set_flag(options = {})
|
|
864
|
-
options = {
|
|
865
|
-
|
|
860
|
+
options = {
|
|
861
|
+
flagnum: 4 # default flag to use
|
|
862
|
+
}.merge(options)
|
|
866
863
|
|
|
867
864
|
if options[:flagnum] > @flags.length
|
|
868
865
|
abort "ERROR! Invalid flag value passed to 'set_flag' method!\n"
|
|
@@ -43,42 +43,36 @@ module OrigenTesters
|
|
|
43
43
|
pattern_header: header,
|
|
44
44
|
variable_assignments: variable_assignments,
|
|
45
45
|
imports: imports,
|
|
46
|
-
comments: comments
|
|
47
|
-
)
|
|
46
|
+
comments: comments)
|
|
48
47
|
end
|
|
49
48
|
|
|
50
49
|
def parse_pinlist(raw_pinlist:, context:)
|
|
51
50
|
raw_pinlist = raw_pinlist.join('')
|
|
52
51
|
OrigenTesters::Decompiler::Nodes::Pinlist.new(context: self,
|
|
53
|
-
pins: raw_pinlist[raw_pinlist.index('$') + 1..raw_pinlist.index(')') - 1].split(/,\s*/)[1..-1]
|
|
54
|
-
)
|
|
52
|
+
pins: raw_pinlist[raw_pinlist.index('$') + 1..raw_pinlist.index(')') - 1].split(/,\s*/)[1..-1])
|
|
55
53
|
end
|
|
56
54
|
|
|
57
55
|
def parse_vector(raw_vector:, context:, meta:)
|
|
58
56
|
if raw_vector =~ Regexp.new('^\s*//')
|
|
59
57
|
nodes_namespace::CommentBlock.new(context: self,
|
|
60
|
-
comments: raw_vector.split("\n")
|
|
61
|
-
)
|
|
58
|
+
comments: raw_vector.split("\n"))
|
|
62
59
|
elsif raw_vector.strip.size == 0
|
|
63
60
|
nodes_namespace::CommentBlock.new(context: self, comments: ['// blank line replaced with comment by origen convert'])
|
|
64
61
|
elsif raw_vector =~ Regexp.new('^\s*start_label')
|
|
65
62
|
nodes_namespace::StartLabel.new(context: self,
|
|
66
|
-
start_label: raw_vector[raw_vector.index('start_label') + 11..-1].strip[0..-2]
|
|
67
|
-
)
|
|
63
|
+
start_label: raw_vector[raw_vector.index('start_label') + 11..-1].strip[0..-2])
|
|
68
64
|
elsif raw_vector =~ Regexp.new('^\s*global')
|
|
69
65
|
contents = raw_vector.strip['global'.size + 1..-2].strip.split(/\s+/)
|
|
70
66
|
nodes_namespace::GlobalLabel.new(context: self,
|
|
71
67
|
label_type: contents[0],
|
|
72
|
-
label_name: contents[1]
|
|
73
|
-
)
|
|
68
|
+
label_name: contents[1])
|
|
74
69
|
# original elsif for label was updated to avoid confusing origen's eol comments for a label
|
|
75
70
|
# elsif raw_vector =~ Regexp.new(':(?!(.*>))')
|
|
76
71
|
elsif raw_vector.split(';').first =~ Regexp.new(':(?!(.*>))')
|
|
77
72
|
nodes_namespace::Label.new(context: self,
|
|
78
73
|
# Strip any whitespace from the vector and grab contents up to
|
|
79
74
|
# the ':' symbol.
|
|
80
|
-
label_name: raw_vector.strip[0..-2]
|
|
81
|
-
)
|
|
75
|
+
label_name: raw_vector.strip[0..-2])
|
|
82
76
|
else
|
|
83
77
|
|
|
84
78
|
opcode_plus_args = raw_vector[0..(raw_vector.index('>') - 1)].rstrip.split(/\s+/)
|
|
@@ -88,14 +82,12 @@ module OrigenTesters
|
|
|
88
82
|
pin_states: timeset_plus_pins[1..-1],
|
|
89
83
|
opcode: (opcode_plus_args[0] && opcode_plus_args[0].empty?) ? nil : opcode_plus_args[0],
|
|
90
84
|
opcode_arguments: opcode_plus_args[1..-1],
|
|
91
|
-
comment:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
end
|
|
98
|
-
)
|
|
85
|
+
comment:
|
|
86
|
+
if raw_vector =~ Regexp.new('//')
|
|
87
|
+
raw_vector[raw_vector.index('//') + 2..-1].strip
|
|
88
|
+
else
|
|
89
|
+
''
|
|
90
|
+
end)
|
|
99
91
|
end
|
|
100
92
|
end
|
|
101
93
|
end
|
|
@@ -8,8 +8,7 @@ module OrigenTesters
|
|
|
8
8
|
sort_pass sort_fail result flag_pass flag_fail state
|
|
9
9
|
group_specifier group_sense group_condition group_name
|
|
10
10
|
device_sense device_condition device_name
|
|
11
|
-
debug_assume debug_sites comment
|
|
12
|
-
)
|
|
11
|
+
debug_assume debug_sites comment)
|
|
13
12
|
|
|
14
13
|
# Generate the instance method definitions based on the above
|
|
15
14
|
define
|