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
|
@@ -19,8 +19,7 @@ module OrigenTesters
|
|
|
19
19
|
timeset: :time_sets,
|
|
20
20
|
timesets: :time_sets,
|
|
21
21
|
|
|
22
|
-
other: {
|
|
23
|
-
},
|
|
22
|
+
other: {},
|
|
24
23
|
|
|
25
24
|
empty: {
|
|
26
25
|
start_func: :arg0,
|
|
@@ -634,10 +633,10 @@ module OrigenTesters
|
|
|
634
633
|
# instance.set_wait_flags(:a)
|
|
635
634
|
# instance.set_wait_flags(:a, :c)
|
|
636
635
|
def set_wait_flags(*flags)
|
|
637
|
-
a = (flags.include?(:a) || flags.include?(:a)) ? '1' : 'X'
|
|
638
|
-
b = (flags.include?(:b) || flags.include?(:b)) ? '1' : 'X'
|
|
639
|
-
c = (flags.include?(:c) || flags.include?(:c)) ? '1' : 'X'
|
|
640
|
-
d = (flags.include?(:d) || flags.include?(:d)) ? '1' : 'X'
|
|
636
|
+
a = (flags.include?(:a) || flags.include?(:a)) ? '1' : 'X' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
637
|
+
b = (flags.include?(:b) || flags.include?(:b)) ? '1' : 'X' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
638
|
+
c = (flags.include?(:c) || flags.include?(:c)) ? '1' : 'X' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
639
|
+
d = (flags.include?(:d) || flags.include?(:d)) ? '1' : 'X' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
641
640
|
self.wait_flags = d + c + b + a
|
|
642
641
|
self
|
|
643
642
|
end
|
|
@@ -658,9 +657,9 @@ module OrigenTesters
|
|
|
658
657
|
# intended to be used in documentation
|
|
659
658
|
def to_meta
|
|
660
659
|
return @meta if @meta
|
|
660
|
+
|
|
661
661
|
m = { 'Test' => name,
|
|
662
|
-
'Type' => type
|
|
663
|
-
}
|
|
662
|
+
'Type' => type }
|
|
664
663
|
if type == :functional
|
|
665
664
|
m['Pattern'] = pattern
|
|
666
665
|
elsif type == :board_pmu || type == :pin_pmu
|
|
@@ -12,7 +12,7 @@ module OrigenTesters
|
|
|
12
12
|
# Also note that this class inherits from the base Tester class and so all methods
|
|
13
13
|
# described there are also available.
|
|
14
14
|
class J750 < Base
|
|
15
|
-
require 'origen_testers/igxl_based_tester/j750/generator
|
|
15
|
+
require 'origen_testers/igxl_based_tester/j750/generator'
|
|
16
16
|
|
|
17
17
|
attr_accessor :use_hv_pin
|
|
18
18
|
attr_accessor :software_version
|
|
@@ -20,6 +20,7 @@ module OrigenTesters
|
|
|
20
20
|
def self.hpt_mode
|
|
21
21
|
@@hpt_mode
|
|
22
22
|
end
|
|
23
|
+
|
|
23
24
|
def self.hpt_mode?
|
|
24
25
|
@@hpt_mode
|
|
25
26
|
end
|
|
@@ -245,7 +246,7 @@ module OrigenTesters
|
|
|
245
246
|
def handshake(options = {})
|
|
246
247
|
options = {
|
|
247
248
|
readcode: false,
|
|
248
|
-
manual_stop: false
|
|
249
|
+
manual_stop: false # set a 2nd CPU flag in case 1st flag is automatically cleared
|
|
249
250
|
}.merge(options)
|
|
250
251
|
if options[:readcode]
|
|
251
252
|
set_code(options[:readcode])
|
|
@@ -19,8 +19,7 @@ module OrigenTesters
|
|
|
19
19
|
timeset: :time_sets,
|
|
20
20
|
timesets: :time_sets,
|
|
21
21
|
|
|
22
|
-
other: {
|
|
23
|
-
},
|
|
22
|
+
other: {},
|
|
24
23
|
|
|
25
24
|
empty: {
|
|
26
25
|
start_func: :arg0,
|
|
@@ -586,10 +585,10 @@ module OrigenTesters
|
|
|
586
585
|
# instance.set_wait_flags(:a)
|
|
587
586
|
# instance.set_wait_flags(:a, :c)
|
|
588
587
|
def set_wait_flags(*flags)
|
|
589
|
-
a = (flags.include?(:a) || flags.include?(:a)) ? '1' : 'X'
|
|
590
|
-
b = (flags.include?(:b) || flags.include?(:b)) ? '1' : 'X'
|
|
591
|
-
c = (flags.include?(:c) || flags.include?(:c)) ? '1' : 'X'
|
|
592
|
-
d = (flags.include?(:d) || flags.include?(:d)) ? '1' : 'X'
|
|
588
|
+
a = (flags.include?(:a) || flags.include?(:a)) ? '1' : 'X' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
589
|
+
b = (flags.include?(:b) || flags.include?(:b)) ? '1' : 'X' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
590
|
+
c = (flags.include?(:c) || flags.include?(:c)) ? '1' : 'X' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
591
|
+
d = (flags.include?(:d) || flags.include?(:d)) ? '1' : 'X' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
593
592
|
self.wait_flags = d + c + b + a
|
|
594
593
|
self
|
|
595
594
|
end
|
|
@@ -12,7 +12,7 @@ module OrigenTesters
|
|
|
12
12
|
# *Also note that this class inherits from the base Tester class and so all methods
|
|
13
13
|
# described there are also available*
|
|
14
14
|
class J750_HPT < J750
|
|
15
|
-
require 'origen_testers/igxl_based_tester/j750_hpt/generator
|
|
15
|
+
require 'origen_testers/igxl_based_tester/j750_hpt/generator'
|
|
16
16
|
|
|
17
17
|
def initialize(options = {})
|
|
18
18
|
super(options)
|
|
@@ -13,6 +13,7 @@ module OrigenTesters
|
|
|
13
13
|
# All descriptions are stored in this lookup table
|
|
14
14
|
def lookup
|
|
15
15
|
return @lookup if @lookup
|
|
16
|
+
|
|
16
17
|
# Use the one from the interface if present, program generation will
|
|
17
18
|
# automatically push descriptions in here
|
|
18
19
|
if Origen.interface_present?
|
|
@@ -26,7 +27,6 @@ module OrigenTesters
|
|
|
26
27
|
@parser = options[:parser]
|
|
27
28
|
FileUtils.rm_rf(SCRATCH_DIR) if File.exist?(SCRATCH_DIR)
|
|
28
29
|
parse_program
|
|
29
|
-
true
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# Returns the description for the given flow
|
|
@@ -57,11 +57,11 @@ module OrigenTesters
|
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
def source_directories
|
|
60
|
+
def source_directories # rubocop:disable Lint/DuplicateMethods
|
|
61
61
|
[@source_directories, Origen.config.test_program_source_directory].compact.flatten
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
-
def template_directories
|
|
64
|
+
def template_directories # rubocop:disable Lint/DuplicateMethods
|
|
65
65
|
[@template_directories, Origen.config.test_program_template_directory].compact.flatten
|
|
66
66
|
end
|
|
67
67
|
|
|
@@ -151,8 +151,8 @@ module OrigenTesters
|
|
|
151
151
|
markup_source_file_comments
|
|
152
152
|
# Compile the flow file, with Ruby comments now preserved and marked up
|
|
153
153
|
desc = Origen.app.runner.generate(program: true, patterns: ungenerated_dir, output: generated_dir,
|
|
154
|
-
|
|
155
|
-
|
|
154
|
+
check_for_changes: false, collect_stats: false, quiet: true,
|
|
155
|
+
collect_descriptions: true)
|
|
156
156
|
Origen.log.info ''
|
|
157
157
|
end
|
|
158
158
|
@program_generated = true
|
|
@@ -172,7 +172,7 @@ module OrigenTesters
|
|
|
172
172
|
markup_template_comments
|
|
173
173
|
# Compile the flow file, with Ruby comments now preserved and marked up
|
|
174
174
|
Origen.app.runner.generate(compile: true, patterns: uncompiled_dir, output: compiled_dir,
|
|
175
|
-
|
|
175
|
+
check_for_changes: false, collect_stats: false, quiet: true)
|
|
176
176
|
Origen.log.info ''
|
|
177
177
|
end
|
|
178
178
|
@program_compiled = true
|
|
@@ -251,8 +251,7 @@ module OrigenTesters
|
|
|
251
251
|
# templates to
|
|
252
252
|
def flow_or_instance_file?(file, options = {})
|
|
253
253
|
options = { flow: true,
|
|
254
|
-
instance: true
|
|
255
|
-
}.merge(options)
|
|
254
|
+
instance: true }.merge(options)
|
|
256
255
|
if options[:flow] && options[:instance]
|
|
257
256
|
match = 'Flow|Instances'
|
|
258
257
|
elsif options[:flow]
|
|
@@ -263,19 +262,18 @@ module OrigenTesters
|
|
|
263
262
|
# Not sure the best way to determine the file type of a partial, just
|
|
264
263
|
# return true for now to play it safe
|
|
265
264
|
return true if file.basename.to_s =~ /^_/
|
|
265
|
+
|
|
266
266
|
File.readlines(file).each do |line|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
exit 1
|
|
278
|
-
end
|
|
267
|
+
unless line =~ /^%/ || line =~ /^\s*<comment>/
|
|
268
|
+
return !!(line =~ /#{match}/)
|
|
269
|
+
end
|
|
270
|
+
rescue Exception => e
|
|
271
|
+
if e.is_a?(ArgumentError) && e.message =~ /invalid byte sequence/
|
|
272
|
+
return false
|
|
273
|
+
else
|
|
274
|
+
puts e.message
|
|
275
|
+
puts e.backtrace
|
|
276
|
+
exit 1
|
|
279
277
|
end
|
|
280
278
|
end
|
|
281
279
|
end
|
|
@@ -392,10 +392,10 @@ module OrigenTesters
|
|
|
392
392
|
|
|
393
393
|
# Returns an array of all pattern names referenced in this test instance
|
|
394
394
|
def patterns
|
|
395
|
-
if
|
|
395
|
+
if respond_to?(:pattern)
|
|
396
396
|
pattern.split(',').map do |pat|
|
|
397
397
|
extract_pattern_from_patset(pat)
|
|
398
|
-
end.flatten.map { |pat| pat.gsub(/.*[\\\/]/, '').gsub(/\..*/, '') }
|
|
398
|
+
end.flatten.map { |pat| pat.gsub(/.*[\\\/]/, '').gsub(/\..*/, '') } # rubocop:disable Style/MultilineBlockChain
|
|
399
399
|
end
|
|
400
400
|
end
|
|
401
401
|
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
module OrigenTesters
|
|
2
2
|
class IGXLBasedTester
|
|
3
3
|
class Parser
|
|
4
|
-
autoload :Flows,
|
|
5
|
-
autoload :Flow,
|
|
6
|
-
autoload :FlowLine,
|
|
7
|
-
autoload :TestInstances,
|
|
8
|
-
autoload :TestInstance,
|
|
9
|
-
autoload :PatternSets,
|
|
10
|
-
autoload :PatternSet,
|
|
11
|
-
autoload :DCSpecs,
|
|
12
|
-
autoload :DCSpec,
|
|
13
|
-
autoload :ACSpecs,
|
|
14
|
-
autoload :ACSpec,
|
|
15
|
-
autoload :Descriptions,
|
|
4
|
+
autoload :Flows, 'origen_testers/igxl_based_tester/parser/flows'
|
|
5
|
+
autoload :Flow, 'origen_testers/igxl_based_tester/parser/flow'
|
|
6
|
+
autoload :FlowLine, 'origen_testers/igxl_based_tester/parser/flow_line'
|
|
7
|
+
autoload :TestInstances, 'origen_testers/igxl_based_tester/parser/test_instances'
|
|
8
|
+
autoload :TestInstance, 'origen_testers/igxl_based_tester/parser/test_instance'
|
|
9
|
+
autoload :PatternSets, 'origen_testers/igxl_based_tester/parser/pattern_sets'
|
|
10
|
+
autoload :PatternSet, 'origen_testers/igxl_based_tester/parser/pattern_set'
|
|
11
|
+
autoload :DCSpecs, 'origen_testers/igxl_based_tester/parser/dc_specs'
|
|
12
|
+
autoload :DCSpec, 'origen_testers/igxl_based_tester/parser/dc_spec'
|
|
13
|
+
autoload :ACSpecs, 'origen_testers/igxl_based_tester/parser/ac_specs'
|
|
14
|
+
autoload :ACSpec, 'origen_testers/igxl_based_tester/parser/ac_spec'
|
|
15
|
+
autoload :Descriptions, 'origen_testers/igxl_based_tester/parser/descriptions'
|
|
16
16
|
|
|
17
17
|
def reset
|
|
18
18
|
@flows = nil
|
|
@@ -18,7 +18,7 @@ module OrigenTesters
|
|
|
18
18
|
forcei_50mA__lte_20mA: (-1.V..6.V),
|
|
19
19
|
forcei_Non50mA__half_scale: (-1..6.V),
|
|
20
20
|
forcei_Non50mA__full_scale: (-1.V..5.5.V) }
|
|
21
|
-
measi = [2.uA,
|
|
21
|
+
measi = [2.uA, 20.uA, 200.uA, 2.mA, 50.mA]
|
|
22
22
|
measv = { measi_50mA__gt_20mA: (-0.1.V..4.5.V),
|
|
23
23
|
measi_50mA__lte_20mA: (-1.V..6.V),
|
|
24
24
|
measi_20mA__0p5mA_to_20mA: (-1.V..5.5.V),
|
|
@@ -40,7 +40,7 @@ module OrigenTesters
|
|
|
40
40
|
forcei_50mA__n35mA_to_n20mA: (0.5.V..5.1.V),
|
|
41
41
|
forcei_50mA__n50mA_to_n35mA: (1.1.V..4.5.V),
|
|
42
42
|
forcei_Non50mA: (-1.V..6.V) }
|
|
43
|
-
measi = [2.uA,
|
|
43
|
+
measi = [2.uA, 20.uA, 200.uA, 2.mA, 50.mA]
|
|
44
44
|
measv = { measi_50mA: (-1.V..6.V),
|
|
45
45
|
measi_200uA: (-1.V..6.V),
|
|
46
46
|
measi_20uA: (-1.V..6.V),
|
|
@@ -51,7 +51,7 @@ module OrigenTesters
|
|
|
51
51
|
ppmu.new(forcei, forcev, measi, measv, vclamp)
|
|
52
52
|
elsif @instrument == 'HSD-4G'
|
|
53
53
|
forcei = [200.uA, 2.mA, 30.mA]
|
|
54
|
-
forcev = { measi_30mA: [min: '1.5V, 1.5V - 50mV/mA * Idut', max: '0V, -50mV/mA * Idut'],
|
|
54
|
+
forcev = { measi_30mA: [{ min: '1.5V, 1.5V - 50mV/mA * Idut', max: '0V, -50mV/mA * Idut' }],
|
|
55
55
|
measi_2mA: (-1.V..1.5.V),
|
|
56
56
|
measi_200uA: (-1.V..1.5.V) }
|
|
57
57
|
measi = [200.uA, 2.mA, 30.mA]
|
|
@@ -72,8 +72,8 @@ module OrigenTesters
|
|
|
72
72
|
vclamp = (-1.3.V..3.9.V)
|
|
73
73
|
ppmu.new(forcei, forcev, measi, measv, vclamp)
|
|
74
74
|
else
|
|
75
|
-
puts
|
|
76
|
-
puts
|
|
75
|
+
puts 'please enter an instrument type: e.g. $tester.ate_hardware("HSD-M").ppmu'
|
|
76
|
+
puts 'Instrument type available: "HSD-M", "HSD-U", "HSD-4G", and "HSS-6G" '
|
|
77
77
|
puts 'HSD-U is also known as Ultrapin1600. HSS-6G is also known as SB6G.'
|
|
78
78
|
end
|
|
79
79
|
end
|
|
@@ -82,7 +82,7 @@ module OrigenTesters
|
|
|
82
82
|
supply = Struct.new(:forcev, :irange, :source_overload_i, :source_overload_t, :source_fold_i,
|
|
83
83
|
:source_fold_t, :sink_overload_i, :sink_overload_t, :sink_fold_i,
|
|
84
84
|
:sink_fold_t, :meter_irange, :meter_vrange, :tdelay, :accuracy,
|
|
85
|
-
:filter, :bandwidth)
|
|
85
|
+
:filter, :bandwidth) # rubocop:disable Lint/StructNewOverride
|
|
86
86
|
if @instrument == 'VSM'
|
|
87
87
|
forcev = (0.V..4.V)
|
|
88
88
|
irange = [1.A, 11.A, 21.A, 51.A, 81.A]
|
|
@@ -98,17 +98,17 @@ module OrigenTesters
|
|
|
98
98
|
irange_51A: (2.55.A..52.53.A),
|
|
99
99
|
irange_81A: (4.05.A..83.43.A) }
|
|
100
100
|
source_fold_t = (10.uS..8.S)
|
|
101
|
-
sink_overload_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
|
|
102
|
-
irange_11A: [max: 858.mA], # ????? Not programmable?
|
|
103
|
-
irange_21A: [max: 1.64.A], # ????? Not programmable?
|
|
104
|
-
irange_51A: [max: 3.98.A], # ????? Not programmable?
|
|
105
|
-
irange_81A: [max: 6.32.A] } # ????? Not programmable?
|
|
101
|
+
sink_overload_i = { irange_1A: [{ max: 78.mA }], # ????? Not programmable?
|
|
102
|
+
irange_11A: [{ max: 858.mA }], # ????? Not programmable?
|
|
103
|
+
irange_21A: [{ max: 1.64.A }], # ????? Not programmable?
|
|
104
|
+
irange_51A: [{ max: 3.98.A }], # ????? Not programmable?
|
|
105
|
+
irange_81A: [{ max: 6.32.A }] } # ????? Not programmable?
|
|
106
106
|
sink_overload_t = 0 # ????? Not programmable?
|
|
107
|
-
sink_fold_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
|
|
108
|
-
irange_11A: [max: 858.mA], # ????? Not programmable?
|
|
109
|
-
irange_21A: [max: 1.64.A], # ????? Not programmable?
|
|
110
|
-
irange_51A: [max: 3.98.A], # ????? Not programmable?
|
|
111
|
-
irange_81A: [max: 6.32.A] } # ????? Not programmable?
|
|
107
|
+
sink_fold_i = { irange_1A: [{ max: 78.mA }], # ????? Not programmable?
|
|
108
|
+
irange_11A: [{ max: 858.mA }], # ????? Not programmable?
|
|
109
|
+
irange_21A: [{ max: 1.64.A }], # ????? Not programmable?
|
|
110
|
+
irange_51A: [{ max: 3.98.A }], # ????? Not programmable?
|
|
111
|
+
irange_81A: [{ max: 6.32.A }] } # ????? Not programmable?
|
|
112
112
|
sink_fold_t = (10.uS..8.S)
|
|
113
113
|
meter_irange = { irange_1A: [1.25.A, 2.5.A],
|
|
114
114
|
irange_11A: [13.75.A, 27.5.A],
|
|
@@ -144,23 +144,23 @@ module OrigenTesters
|
|
|
144
144
|
irange_102A: (5.1.A..105.06.A),
|
|
145
145
|
irange_162A: (8.1.A..166.86.A) }
|
|
146
146
|
source_fold_t = (10.uS..8.S)
|
|
147
|
-
sink_overload_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
|
|
148
|
-
irange_2A: [max: 156.mA], # ????? Not programmable?
|
|
149
|
-
irange_11A: [max: 858.mA], # ????? Not programmable?
|
|
150
|
-
irange_21A: [max: 1.64.A], # ????? Not programmable?
|
|
151
|
-
irange_51A: [max: 3.98.A], # ????? Not programmable?
|
|
152
|
-
irange_81A: [max: 6.32.A], # ????? Not programmable?
|
|
153
|
-
irange_102A: [max: 7.96.A], # ????? Not programmable?
|
|
154
|
-
irange_162A: [max: 12.64.A] } # ????? Not programmable?
|
|
147
|
+
sink_overload_i = { irange_1A: [{ max: 78.mA }], # ????? Not programmable?
|
|
148
|
+
irange_2A: [{ max: 156.mA }], # ????? Not programmable?
|
|
149
|
+
irange_11A: [{ max: 858.mA }], # ????? Not programmable?
|
|
150
|
+
irange_21A: [{ max: 1.64.A }], # ????? Not programmable?
|
|
151
|
+
irange_51A: [{ max: 3.98.A }], # ????? Not programmable?
|
|
152
|
+
irange_81A: [{ max: 6.32.A }], # ????? Not programmable?
|
|
153
|
+
irange_102A: [{ max: 7.96.A }], # ????? Not programmable?
|
|
154
|
+
irange_162A: [{ max: 12.64.A }] } # ????? Not programmable?
|
|
155
155
|
sink_overload_t = 0 # ????? Not programmable?
|
|
156
|
-
sink_fold_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
|
|
157
|
-
irange_2A: [max: 156.mA], # ????? Not programmable?
|
|
158
|
-
irange_11A: [max: 858.mA], # ????? Not programmable?
|
|
159
|
-
irange_21A: [max: 1.64.A], # ????? Not programmable?
|
|
160
|
-
irange_51A: [max: 3.98.A], # ????? Not programmable?
|
|
161
|
-
irange_81A: [max: 6.32.A], # ????? Not programmable?
|
|
162
|
-
irange_102A: [max: 7.96.A], # ????? Not programmable?
|
|
163
|
-
irange_162A: [max: 12.64.A] } # ????? Not programmable?
|
|
156
|
+
sink_fold_i = { irange_1A: [{ max: 78.mA }], # ????? Not programmable?
|
|
157
|
+
irange_2A: [{ max: 156.mA }], # ????? Not programmable?
|
|
158
|
+
irange_11A: [{ max: 858.mA }], # ????? Not programmable?
|
|
159
|
+
irange_21A: [{ max: 1.64.A }], # ????? Not programmable?
|
|
160
|
+
irange_51A: [{ max: 3.98.A }], # ????? Not programmable?
|
|
161
|
+
irange_81A: [{ max: 6.32.A }], # ????? Not programmable?
|
|
162
|
+
irange_102A: [{ max: 7.96.A }], # ????? Not programmable?
|
|
163
|
+
irange_162A: [{ max: 12.64.A }] } # ????? Not programmable?
|
|
164
164
|
meter_irange = { irange_1A: [1.25.A, 2.5.A],
|
|
165
165
|
irange_2A: [2.5.A, 5.A],
|
|
166
166
|
irange_11A: [13.75.A, 27.5.A],
|
|
@@ -213,8 +213,8 @@ module OrigenTesters
|
|
|
213
213
|
sink_fold_i = { irange_15A: (1.A..2.A),
|
|
214
214
|
irange_30A: (2.A..4.A) }
|
|
215
215
|
sink_fold_t = (102.4.uS..5.S)
|
|
216
|
-
meter_irange =
|
|
217
|
-
|
|
216
|
+
meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
|
|
217
|
+
irange_30A: [30.A] } # This is verified to be correct on tester.
|
|
218
218
|
meter_vrange = [4.V, 8.V]
|
|
219
219
|
tdelay = 0 # default tdelay
|
|
220
220
|
accuracy = { neg: -7.mV, pos: 7.mV }
|
|
@@ -238,8 +238,8 @@ module OrigenTesters
|
|
|
238
238
|
sink_fold_i = { irange_15A: (1.A..2.A),
|
|
239
239
|
irange_60A: (4.A..8.A) }
|
|
240
240
|
sink_fold_t = (102.4.uS..5.S)
|
|
241
|
-
meter_irange =
|
|
242
|
-
|
|
241
|
+
meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
|
|
242
|
+
irange_60A: [60.A] } # This is verified to be correct on tester.
|
|
243
243
|
meter_vrange = [4.V, 8.V]
|
|
244
244
|
tdelay = 0 # default tdelay
|
|
245
245
|
accuracy = { neg: -7.mV, pos: 7.mV }
|
|
@@ -263,8 +263,8 @@ module OrigenTesters
|
|
|
263
263
|
sink_fold_i = { irange_15A: (1.A..2.A),
|
|
264
264
|
irange_90A: (6.A..12.A) }
|
|
265
265
|
sink_fold_t = (102.4.uS..5.S)
|
|
266
|
-
meter_irange =
|
|
267
|
-
|
|
266
|
+
meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
|
|
267
|
+
irange_90A: [90.A] } # This is verified to be correct on tester.
|
|
268
268
|
meter_vrange = [4.V, 8.V]
|
|
269
269
|
tdelay = 0 # default tdelay
|
|
270
270
|
accuracy = { neg: -7.mV, pos: 7.mV }
|
|
@@ -308,8 +308,8 @@ module OrigenTesters
|
|
|
308
308
|
sink_fold_i = { irange_15A: (1.A..2.A),
|
|
309
309
|
irange_30A: (2.A..4.A) }
|
|
310
310
|
sink_fold_t = (102.4.uS..5.S)
|
|
311
|
-
meter_irange =
|
|
312
|
-
|
|
311
|
+
meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
|
|
312
|
+
irange_30A: [30.A] } # This is verified to be correct on tester.
|
|
313
313
|
meter_vrange = [4.V, 8.V]
|
|
314
314
|
tdelay = 0 # default tdelay
|
|
315
315
|
accuracy = { neg: -2.mV, pos: 2.mV }
|
|
@@ -333,8 +333,8 @@ module OrigenTesters
|
|
|
333
333
|
sink_fold_i = { irange_15A: (1.A..2.A),
|
|
334
334
|
irange_60A: (4.A..8.A) }
|
|
335
335
|
sink_fold_t = (102.4.uS..5.S)
|
|
336
|
-
meter_irange =
|
|
337
|
-
|
|
336
|
+
meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
|
|
337
|
+
irange_60A: [60.A] } # This is verified to be correct on tester.
|
|
338
338
|
meter_vrange = [4.V, 8.V]
|
|
339
339
|
tdelay = 0 # default tdelay
|
|
340
340
|
accuracy = { neg: -2.mV, pos: 2.mV }
|
|
@@ -358,8 +358,8 @@ module OrigenTesters
|
|
|
358
358
|
sink_fold_i = { irange_15A: (1.A..2.A),
|
|
359
359
|
irange_90A: (6.A..12.A) }
|
|
360
360
|
sink_fold_t = (102.4.uS..5.S)
|
|
361
|
-
meter_irange =
|
|
362
|
-
|
|
361
|
+
meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
|
|
362
|
+
irange_90A: [90.A] } # This is verified to be correct on tester.
|
|
363
363
|
meter_vrange = [4.V, 8.V]
|
|
364
364
|
tdelay = 0 # default tdelay
|
|
365
365
|
accuracy = { neg: -2.mV, pos: 2.mV }
|
|
@@ -379,7 +379,7 @@ module OrigenTesters
|
|
|
379
379
|
sink_overload_t = 'n/a'
|
|
380
380
|
sink_fold_i = (5.mA..200.mA)
|
|
381
381
|
sink_fold_t = (0.S..167.77.mS)
|
|
382
|
-
meter_irange =
|
|
382
|
+
meter_irange = [10.uA, 100.uA, 1.mA, 10.mA, 100.mA, 1.A]
|
|
383
383
|
meter_vrange = 7.V
|
|
384
384
|
tdelay = 0 # default tdelay
|
|
385
385
|
accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
|
|
@@ -402,7 +402,7 @@ module OrigenTesters
|
|
|
402
402
|
sink_overload_t = 'n/a'
|
|
403
403
|
sink_fold_i = (10.mA..400.mA)
|
|
404
404
|
sink_fold_t = (0.S..167.77.mS)
|
|
405
|
-
meter_irange =
|
|
405
|
+
meter_irange = [20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 2.A]
|
|
406
406
|
meter_vrange = 7.V
|
|
407
407
|
tdelay = 0 # default tdelay
|
|
408
408
|
accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
|
|
@@ -425,7 +425,7 @@ module OrigenTesters
|
|
|
425
425
|
sink_overload_t = 'n/a'
|
|
426
426
|
sink_fold_i = (20.mA..800.mA)
|
|
427
427
|
sink_fold_t = (0.S..167.77.mS)
|
|
428
|
-
meter_irange =
|
|
428
|
+
meter_irange = [40.uA, 400.uA, 4.mA, 40.mA, 400.mA, 4.A]
|
|
429
429
|
meter_vrange = 7.V
|
|
430
430
|
tdelay = 0 # default tdelay
|
|
431
431
|
accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
|
|
@@ -930,14 +930,14 @@ module OrigenTesters
|
|
|
930
930
|
source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
|
|
931
931
|
sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
|
|
932
932
|
else
|
|
933
|
-
puts
|
|
934
|
-
puts
|
|
935
|
-
puts "
|
|
936
|
-
puts "
|
|
937
|
-
puts "
|
|
938
|
-
puts "
|
|
939
|
-
puts "
|
|
940
|
-
puts "
|
|
933
|
+
puts 'please enter an instrument type: e.g. $tester.ate_hardware("VSM").supply'
|
|
934
|
+
puts 'Instrument type available: "VSM", "VSMx2", "VSMx4",'
|
|
935
|
+
puts '"HexVS", "HexVSx2", "HexVSx4", "HexVSx6",'
|
|
936
|
+
puts '"HexVS+", "HexVS+x2", "HexVS+x4", "HexVS+x6", "HDVS1",'
|
|
937
|
+
puts '"HDVS1x2", "HDVS1x4", "VHDVS", "VHDVS_HC", "VHDVSx2",'
|
|
938
|
+
puts '"VHDVS_HCx2", "VHDVS_HCx4", and "VHDVS_HCx8".'
|
|
939
|
+
puts '"VHDVS+", "VHDVS_HC+", "VHDVS+x2",'
|
|
940
|
+
puts '"VHDVS_HC+x2", "VHDVS_HC+x4", and "VHDVS_HC+x8".'
|
|
941
941
|
puts 'HDVS1 is also known as HDVS. VHDVS is also known as UVS256.'
|
|
942
942
|
puts 'x2 is Merged2, x4 is Merged4, x6 is Merged6. _HC is High-Current.'
|
|
943
943
|
puts '+ is High-Accuracy.'
|
|
@@ -8,8 +8,7 @@ module OrigenTesters
|
|
|
8
8
|
bin_pass bin_fail 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
|
|
@@ -23,8 +23,7 @@ module OrigenTesters
|
|
|
23
23
|
timeset: :time_sets,
|
|
24
24
|
timesets: :time_sets,
|
|
25
25
|
|
|
26
|
-
other: {
|
|
27
|
-
},
|
|
26
|
+
other: {},
|
|
28
27
|
|
|
29
28
|
empty: {
|
|
30
29
|
arg_list: :arg0,
|
|
@@ -310,7 +309,7 @@ module OrigenTesters
|
|
|
310
309
|
wait_flag1: -2, # waitoff
|
|
311
310
|
wait_flag2: -2, # waitoff
|
|
312
311
|
wait_flag3: -2, # waitoff
|
|
313
|
-
wait_flag4: -2
|
|
312
|
+
wait_flag4: -2 # waitoff
|
|
314
313
|
},
|
|
315
314
|
dcvi_powersupply: {
|
|
316
315
|
arg_list: 'PreconditionPat,StartOfBodyF,PrePatF,PreTestF,PostTestF,PostPatF,EndOfBodyF,HoldStatePat,DriveLoPins,DriveHiPins,DriveZPins,FloatPins,SamplingTime,SampleSize,SettlingTime,MainVoltage,AltVoltage,PowerPins,DisablePins,VoltageOutput,PcpStartLabel,PcpStopLabel,StartOfBodyFArgs,PrePatFArgs,PreTestFArgs,PostTestFArgs,PostPatFArgs,EndOfBodyFArgs,HspStartLabel,HspStopLabel,PcpCheckPatGen,CurrentClamp,HspCheckPatGen,HspResumePat,RelayMode,Util1Pins,Util0Pins,TestControl,SerializeMeas,MeasF,MeasFArgs,WaitFlagA,WaitFlagB,WaitFlagC,WaitFlagD,Validating_,Irange,PatternTimeout,PcpDisableAlarm,HspDisableAlarm',
|
|
@@ -320,7 +319,7 @@ module OrigenTesters
|
|
|
320
319
|
wait_flag1: -2, # waitoff
|
|
321
320
|
wait_flag2: -2, # waitoff
|
|
322
321
|
wait_flag3: -2, # waitoff
|
|
323
|
-
wait_flag4: -2
|
|
322
|
+
wait_flag4: -2 # waitoff
|
|
324
323
|
}
|
|
325
324
|
|
|
326
325
|
}
|
|
@@ -335,10 +334,10 @@ module OrigenTesters
|
|
|
335
334
|
# assumes clr flag means to set it off (waitoff = -2)
|
|
336
335
|
# does not yet support waitlo = 0
|
|
337
336
|
def set_wait_flags(*flags)
|
|
338
|
-
a = (flags.include?(:a) || flags.include?(:a)) ? '-1' : '-2'
|
|
339
|
-
b = (flags.include?(:b) || flags.include?(:b)) ? '-1' : '-2'
|
|
340
|
-
c = (flags.include?(:c) || flags.include?(:c)) ? '-1' : '-2'
|
|
341
|
-
d = (flags.include?(:d) || flags.include?(:d)) ? '-1' : '-2'
|
|
337
|
+
a = (flags.include?(:a) || flags.include?(:a)) ? '-1' : '-2' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
338
|
+
b = (flags.include?(:b) || flags.include?(:b)) ? '-1' : '-2' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
339
|
+
c = (flags.include?(:c) || flags.include?(:c)) ? '-1' : '-2' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
340
|
+
d = (flags.include?(:d) || flags.include?(:d)) ? '-1' : '-2' # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
|
|
342
341
|
self.wait_flag1 = a
|
|
343
342
|
self.wait_flag2 = b
|
|
344
343
|
self.wait_flag3 = c
|
|
@@ -356,9 +355,9 @@ module OrigenTesters
|
|
|
356
355
|
# intended to be used in documentation
|
|
357
356
|
def to_meta
|
|
358
357
|
return @meta if @meta
|
|
358
|
+
|
|
359
359
|
m = { 'Test' => name,
|
|
360
|
-
'Type' => type
|
|
361
|
-
}
|
|
360
|
+
'Type' => type }
|
|
362
361
|
if type == :functional
|
|
363
362
|
m['Pattern'] = pattern
|
|
364
363
|
elsif type == :board_pmu || type == :pin_pmu
|