origen_testers 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/config/application.rb +140 -0
- data/config/commands.rb +73 -0
- data/config/development.rb +12 -0
- data/config/environment.rb +1 -0
- data/config/shared_commands.rb +47 -0
- data/config/users.rb +18 -0
- data/config/version.rb +8 -0
- data/lib/commands/build.rb +69 -0
- data/lib/origen_testers.rb +23 -0
- data/lib/origen_testers/api.rb +258 -0
- data/lib/origen_testers/basic_test_setups.rb +105 -0
- data/lib/origen_testers/callback_handlers.rb +58 -0
- data/lib/origen_testers/generator.rb +279 -0
- data/lib/origen_testers/generator/flow_control_api.rb +611 -0
- data/lib/origen_testers/generator/identity_map.rb +23 -0
- data/lib/origen_testers/generator/placeholder.rb +11 -0
- data/lib/origen_testers/generator/test_numberer.rb +23 -0
- data/lib/origen_testers/igxl_based_tester.rb +12 -0
- data/lib/origen_testers/igxl_based_tester/base.rb +641 -0
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +171 -0
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +322 -0
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +217 -0
- data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -0
- data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -0
- data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -0
- data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -0
- data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +326 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +58 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +179 -0
- data/lib/origen_testers/igxl_based_tester/files.rb +43 -0
- data/lib/origen_testers/igxl_based_tester/j750.rb +248 -0
- data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/instances.txt.erb +16 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patgroups.txt.erb +8 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patsets.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patsubrs.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +547 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +515 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/parser.rb +102 -0
- data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/parser/ac_specs.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -0
- data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -0
- data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -0
- data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -0
- data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -0
- data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -0
- data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -0
- data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -0
- data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +341 -0
- data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -0
- data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -0
- data/lib/origen_testers/igxl_based_tester/parser/timesets.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex.rb +477 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/instances.txt.erb +16 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patgroups.txt.erb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsets.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsubrs.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +270 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -0
- data/lib/origen_testers/interface.rb +183 -0
- data/lib/origen_testers/parser.rb +22 -0
- data/lib/origen_testers/parser/description_lookup.rb +62 -0
- data/lib/origen_testers/parser/searchable_array.rb +30 -0
- data/lib/origen_testers/parser/searchable_hash.rb +30 -0
- data/lib/origen_testers/pattern_compilers.rb +116 -0
- data/lib/origen_testers/pattern_compilers/assembler.rb +88 -0
- data/lib/origen_testers/pattern_compilers/job.rb +96 -0
- data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -0
- data/lib/origen_testers/program_generators.rb +55 -0
- data/lib/origen_testers/smartest_based_tester.rb +8 -0
- data/lib/origen_testers/smartest_based_tester/base.rb +411 -0
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +188 -0
- data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +476 -0
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +123 -0
- data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +23 -0
- data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +47 -0
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +143 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +73 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +43 -0
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +166 -0
- data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -0
- data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +169 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -0
- data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -0
- data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -0
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -0
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +201 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -0
- data/lib/origen_testers/test/basic_interface.rb +17 -0
- data/lib/origen_testers/test/block.rb +21 -0
- data/lib/origen_testers/test/dut.rb +184 -0
- data/lib/origen_testers/test/dut2.rb +76 -0
- data/lib/origen_testers/test/j750_base_interface.rb +119 -0
- data/lib/origen_testers/test/j750_hpt_interface.rb +8 -0
- data/lib/origen_testers/test/j750_interface.rb +8 -0
- data/lib/origen_testers/test/nvm.rb +94 -0
- data/lib/origen_testers/test/ultraflex_interface.rb +110 -0
- data/lib/origen_testers/test/v93k_interface.rb +115 -0
- data/lib/origen_testers/timing.rb +362 -0
- data/lib/origen_testers/vector.rb +203 -0
- data/lib/origen_testers/vector_based_tester.rb +42 -0
- data/lib/origen_testers/vector_generator.rb +623 -0
- data/lib/origen_testers/vector_pipeline.rb +288 -0
- data/pattern/dc_instr.rb +7 -0
- data/pattern/delay.rb +7 -0
- data/pattern/mem_test.rb +8 -0
- data/pattern/multi_vector.rb +117 -0
- data/pattern/multi_vector_plus1.rb +125 -0
- data/pattern/nvm/j750/add_late_pins.rb +3 -0
- data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -0
- data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -0
- data/pattern/nvm/j750/j750_halt.rb +159 -0
- data/pattern/nvm/j750/j750_workout.rb +202 -0
- data/pattern/nvm/j750/timing.rb +73 -0
- data/pattern/nvm/v93k/v93k_workout.rb +136 -0
- data/pattern/read_write_reg.rb +58 -0
- data/pattern/reset.rb +4 -0
- data/pattern/subroutines.rb +38 -0
- data/program/_additional_erase.rb +7 -0
- data/program/_efa_resources.rb +7 -0
- data/program/_erase.rb +25 -0
- data/program/_erase_vfy.rb +5 -0
- data/program/_iv_resources.rb +10 -0
- data/program/basic_interface.rb +5 -0
- data/program/components/_prb2_main.rb +6 -0
- data/program/flow_control.rb +164 -0
- data/program/prb1.rb +226 -0
- data/program/prb1_resources.rb +28 -0
- data/program/prb2.rb +40 -0
- data/program/test.rb +20 -0
- data/templates/example.txt.erb +53 -0
- data/templates/j750/_vt_flow.txt.erb +8 -0
- data/templates/j750/_vt_instances.txt.erb +4 -0
- data/templates/j750/program_sheet.txt.erb +9 -0
- data/templates/manifest/v93k.yaml.erb +22 -0
- data/templates/web/index.md.erb +51 -0
- data/templates/web/layouts/_basic.html.erb +15 -0
- data/templates/web/partials/_navbar.html.erb +22 -0
- data/templates/web/release_notes.md.erb +5 -0
- metadata +332 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class Base
|
4
|
+
class Patsets
|
5
|
+
include ::OrigenTesters::Generator
|
6
|
+
|
7
|
+
OUTPUT_POSTFIX = 'patsets'
|
8
|
+
|
9
|
+
def add(name, options = {})
|
10
|
+
p = platform::Patset.new(name, options)
|
11
|
+
collection << p
|
12
|
+
p
|
13
|
+
end
|
14
|
+
|
15
|
+
def finalize(options = {})
|
16
|
+
uniq!
|
17
|
+
sort!
|
18
|
+
end
|
19
|
+
|
20
|
+
# Present the patsets in the final sheet in alphabetical order
|
21
|
+
def sort!
|
22
|
+
collection.sort_by!(&:name)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Removes all duplicate patsets
|
26
|
+
def uniq!
|
27
|
+
uniques = []
|
28
|
+
collection.each do |patset|
|
29
|
+
unless uniques.any? { |p| p == patset }
|
30
|
+
uniques << patset
|
31
|
+
end
|
32
|
+
end
|
33
|
+
self.collection = uniques
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class Base
|
4
|
+
class Patsubr
|
5
|
+
attr_accessor :index
|
6
|
+
|
7
|
+
# Specify multiple patterns by passing an array of attributes
|
8
|
+
# as the 2nd argument:
|
9
|
+
#
|
10
|
+
# Patset.new("mrd1_pset", :pattern => "nvm_mrd1.PAT")
|
11
|
+
#
|
12
|
+
# Patset.new("mrd1_pset", [{:pattern => "nvm_mrd1.PAT"},
|
13
|
+
# {:pattern => "nvm_global_subs.PAT, :start_label => "subr"}
|
14
|
+
# ])
|
15
|
+
def initialize(name, attrs = {})
|
16
|
+
attrs = [attrs] unless attrs.is_a? Array
|
17
|
+
attrs.each do |pattrs|
|
18
|
+
if pattrs[:pattern]
|
19
|
+
pat = Pathname.new(pattrs[:pattern].gsub('\\', '/')).basename('.*').to_s
|
20
|
+
Origen.interface.referenced_patterns << pat
|
21
|
+
end
|
22
|
+
lines << platform::PatsubrPattern.new(name, pattrs)
|
23
|
+
end
|
24
|
+
self.name = name
|
25
|
+
end
|
26
|
+
|
27
|
+
def ==(other_patset)
|
28
|
+
self.class == other_patset.class &&
|
29
|
+
name.to_s == other_patset.name.to_s &&
|
30
|
+
sorted_pattern_files == other_patset.sorted_pattern_files
|
31
|
+
end
|
32
|
+
|
33
|
+
def name
|
34
|
+
@name
|
35
|
+
end
|
36
|
+
|
37
|
+
def name=(n)
|
38
|
+
@name = n
|
39
|
+
lines.each { |l| l.pattern_set = n }
|
40
|
+
n
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns all lines in the pattern set
|
44
|
+
def lines
|
45
|
+
@lines ||= []
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns all pattern files in the pattern set in alphabetical order
|
49
|
+
def sorted_pattern_files
|
50
|
+
@lines.map(&:file_name).sort
|
51
|
+
end
|
52
|
+
|
53
|
+
# Returns the fully formatted pattern set for insertion into a patset sheet
|
54
|
+
def to_s
|
55
|
+
l = ''
|
56
|
+
lines.each do |line|
|
57
|
+
l += "#{line}\r\n"
|
58
|
+
end
|
59
|
+
l.chomp
|
60
|
+
end
|
61
|
+
|
62
|
+
def platform
|
63
|
+
Origen.interface.platform
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class Base
|
4
|
+
class PatsubrPattern
|
5
|
+
ALIASES = {
|
6
|
+
pattern: :file_name
|
7
|
+
}
|
8
|
+
|
9
|
+
def self.define
|
10
|
+
# Generate accessors for all attributes and their aliases
|
11
|
+
self::PATSUBR_ATTRS.each do |attr|
|
12
|
+
writer = "#{attr}=".to_sym
|
13
|
+
reader = attr.to_sym
|
14
|
+
attr_reader attr.to_sym unless method_defined? reader
|
15
|
+
attr_writer attr.to_sym unless method_defined? writer
|
16
|
+
end
|
17
|
+
|
18
|
+
ALIASES.each do |_alias, val|
|
19
|
+
writer = "#{_alias}=".to_sym
|
20
|
+
reader = _alias.to_sym
|
21
|
+
unless method_defined? writer
|
22
|
+
define_method("#{_alias}=") do |v|
|
23
|
+
send("#{val}=", v)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
unless method_defined? reader
|
27
|
+
define_method("#{_alias}") do
|
28
|
+
send(val)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize(patsubr, attrs = {})
|
35
|
+
# Set the defaults
|
36
|
+
self.class::PATSUBR_DEFAULTS.each do |k, v|
|
37
|
+
send("#{k}=", v)
|
38
|
+
end
|
39
|
+
# Then the values that have been supplied
|
40
|
+
self.pattern_subr = patsubr
|
41
|
+
attrs.each do |k, v|
|
42
|
+
send("#{k}=", v)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_s
|
47
|
+
l = "\t"
|
48
|
+
self.class::PATSUBR_ATTRS.each do |attr|
|
49
|
+
l += "#{send(attr)}\t"
|
50
|
+
end
|
51
|
+
"#{l}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class Base
|
4
|
+
class Patsubrs
|
5
|
+
include ::OrigenTesters::Generator
|
6
|
+
|
7
|
+
OUTPUT_POSTFIX = 'patsubrs'
|
8
|
+
|
9
|
+
def add(name, options = {})
|
10
|
+
p = Patsubr.new(name, options)
|
11
|
+
collection << p
|
12
|
+
p
|
13
|
+
end
|
14
|
+
|
15
|
+
def finalize(options = {})
|
16
|
+
uniq!
|
17
|
+
sort!
|
18
|
+
end
|
19
|
+
|
20
|
+
# Present the patsubrs in the final sheet in alphabetical order
|
21
|
+
def sort!
|
22
|
+
collection.sort_by!(&:name)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Removes all duplicate patsubrs
|
26
|
+
def uniq!
|
27
|
+
uniques = []
|
28
|
+
collection.each do |patsubr|
|
29
|
+
unless uniques.any? { |p| p == patsubr }
|
30
|
+
uniques << patsubr
|
31
|
+
end
|
32
|
+
end
|
33
|
+
self.collection = uniques
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,326 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class Base
|
4
|
+
class TestInstance
|
5
|
+
attr_accessor :type, :index, :version, :append_version
|
6
|
+
|
7
|
+
def self.define
|
8
|
+
# Generate accessors for all attributes and their aliases
|
9
|
+
attrs.each do |attr|
|
10
|
+
writer = "#{attr}=".to_sym
|
11
|
+
reader = attr.to_sym
|
12
|
+
attr_reader attr.to_sym unless method_defined? reader
|
13
|
+
attr_writer attr.to_sym unless method_defined? writer
|
14
|
+
end
|
15
|
+
|
16
|
+
# Define the common aliases now, the instance type specific ones will
|
17
|
+
# be created when the instance type is known
|
18
|
+
self::TEST_INSTANCE_ALIASES.each do |_alias, val|
|
19
|
+
writer = "#{_alias}=".to_sym
|
20
|
+
reader = _alias.to_sym
|
21
|
+
unless val.is_a? Hash
|
22
|
+
unless method_defined? writer
|
23
|
+
define_method("#{_alias}=") do |v|
|
24
|
+
send("#{val}=", v)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
unless method_defined? reader
|
28
|
+
define_method("#{_alias}") do
|
29
|
+
send(val)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.attrs
|
37
|
+
@attrs ||= begin
|
38
|
+
attrs = self::TEST_INSTANCE_ATTRS.dup
|
39
|
+
|
40
|
+
self::TEST_INSTANCE_EXTRA_ARGS.times do |i|
|
41
|
+
attrs << "arg#{i}"
|
42
|
+
end
|
43
|
+
attrs << 'comment'
|
44
|
+
attrs
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def initialize(name, type, attrs = {})
|
49
|
+
@type = type
|
50
|
+
@append_version = true
|
51
|
+
self.name = name
|
52
|
+
# Build the type specific accessors (aliases)
|
53
|
+
self.class::TEST_INSTANCE_ALIASES[@type.to_sym].each do |_alias, val|
|
54
|
+
define_singleton_method("#{_alias}=") do |v|
|
55
|
+
send("#{val}=", v) if self.respond_to?("#{val}=", v)
|
56
|
+
end
|
57
|
+
define_singleton_method("#{_alias}") do
|
58
|
+
send(val) if self.respond_to?(val)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
# Set the defaults
|
62
|
+
self.class::TEST_INSTANCE_DEFAULTS[@type.to_sym].each do |k, v|
|
63
|
+
send("#{k}=", v) if self.respond_to?("#{k}=", v)
|
64
|
+
end
|
65
|
+
# Then the values that have been supplied
|
66
|
+
attrs.each do |k, v|
|
67
|
+
send("#{k}=", v) if self.respond_to?("#{k}=", v)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def ==(other_instance)
|
72
|
+
self.class == other_instance.class &&
|
73
|
+
unversioned_name.to_s == other_instance.unversioned_name.to_s &&
|
74
|
+
self.class.attrs.all? do |attr|
|
75
|
+
# Exclude test name, already examined above and don't want to include
|
76
|
+
# the version in the comparison
|
77
|
+
if attr == 'test_name'
|
78
|
+
true
|
79
|
+
else
|
80
|
+
send(attr) == other_instance.send(attr)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.new_empty(name, attrs = {})
|
86
|
+
new(name, :empty, attrs)
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.new_functional(name, attrs = {})
|
90
|
+
new(name, :functional, attrs)
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.new_board_pmu(name, attrs = {})
|
94
|
+
new(name, :board_pmu, attrs)
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.new_pin_pmu(name, attrs = {})
|
98
|
+
new(name, :pin_pmu, attrs)
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.new_apmu_powersupply(name, attrs = {})
|
102
|
+
new(name, :apmu_powersupply, attrs)
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.new_mto_memory(name, attrs = {})
|
106
|
+
new(name, :mto_memory, attrs)
|
107
|
+
end
|
108
|
+
|
109
|
+
# Returns the fully formatted test instance for insertion into an instance sheet
|
110
|
+
def to_s(override_name = nil)
|
111
|
+
l = "\t"
|
112
|
+
self.class.attrs.each do |attr|
|
113
|
+
if attr == 'test_name' && override_name
|
114
|
+
l += "#{override_name}\t"
|
115
|
+
else
|
116
|
+
l += "#{send(attr)}\t"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
"#{l}"
|
120
|
+
end
|
121
|
+
|
122
|
+
def name
|
123
|
+
if version && @append_version
|
124
|
+
"#{@test_name}_v#{version}"
|
125
|
+
else
|
126
|
+
@test_name.to_s
|
127
|
+
end
|
128
|
+
end
|
129
|
+
alias_method :test_name, :name
|
130
|
+
|
131
|
+
def name=(val)
|
132
|
+
self.test_name = val
|
133
|
+
end
|
134
|
+
|
135
|
+
def unversioned_name
|
136
|
+
@test_name.to_s
|
137
|
+
end
|
138
|
+
|
139
|
+
# Set the cpu wait flags for the given test instance
|
140
|
+
# instance.set_wait_flags(:a)
|
141
|
+
# instance.set_wait_flags(:a, :c)
|
142
|
+
def set_wait_flags(*flags)
|
143
|
+
# This method is tester-specific and must be overridden by the child class
|
144
|
+
fail 'The #{self.class} class has not defined a set_wait_flags method!'
|
145
|
+
end
|
146
|
+
|
147
|
+
# Set and enable the pre-charge voltage of a parametric test instance.
|
148
|
+
def set_pre_charge(val)
|
149
|
+
if val
|
150
|
+
self.pre_charge_enable = 1
|
151
|
+
self.pre_charge = val
|
152
|
+
else
|
153
|
+
self.pre_charge_enable = 0
|
154
|
+
end
|
155
|
+
self
|
156
|
+
end
|
157
|
+
alias_method :set_precharge, :set_pre_charge
|
158
|
+
|
159
|
+
# Set and enable the hi limit of a parametric test instance, passing in
|
160
|
+
# nil or false as the lim parameter will disable the hi limit.
|
161
|
+
def set_hi_limit(lim)
|
162
|
+
if lim
|
163
|
+
self.hi_lo_limit_valid = hi_lo_limit_valid | 2
|
164
|
+
self.hi_limit = lim
|
165
|
+
else
|
166
|
+
self.hi_lo_limit_valid = hi_lo_limit_valid & 1
|
167
|
+
end
|
168
|
+
self
|
169
|
+
end
|
170
|
+
|
171
|
+
# Set and enable the hi limit of a parametric test instance, passing in
|
172
|
+
# nil or false as the lim parameter will disable the hi limit.
|
173
|
+
def set_lo_limit(lim)
|
174
|
+
if lim
|
175
|
+
self.hi_lo_limit_valid = hi_lo_limit_valid | 1
|
176
|
+
self.lo_limit = lim
|
177
|
+
else
|
178
|
+
self.hi_lo_limit_valid = hi_lo_limit_valid & 2
|
179
|
+
end
|
180
|
+
self
|
181
|
+
end
|
182
|
+
|
183
|
+
# Set the current range of the test instance, the following are valid:
|
184
|
+
#
|
185
|
+
# Board PMU
|
186
|
+
# * 2uA
|
187
|
+
# * 20uA
|
188
|
+
# * 200uA
|
189
|
+
# * 2mA
|
190
|
+
# * 20mA
|
191
|
+
# * 200mA
|
192
|
+
# * :smart
|
193
|
+
#
|
194
|
+
# Pin PMU
|
195
|
+
# * 200nA
|
196
|
+
# * 2uA
|
197
|
+
# * 20uA
|
198
|
+
# * 200uA
|
199
|
+
# * 2mA
|
200
|
+
# * :auto
|
201
|
+
# * :smart
|
202
|
+
#
|
203
|
+
# Examples
|
204
|
+
# instance.set_irange(:smart)
|
205
|
+
# instance.set_irange(:ua => 2)
|
206
|
+
# instance.set_irange(2.uA) # Same as above
|
207
|
+
# instance.set_irange(:ma => 200)
|
208
|
+
# instance.set_irange(0.2) # Same as above
|
209
|
+
# instance.set_irange(:a => 0.2) # Same as above
|
210
|
+
def set_irange(r = nil, options = {})
|
211
|
+
r, options = nil, r if r.is_a?(Hash)
|
212
|
+
unless r
|
213
|
+
if r = options.delete(:na) || options.delete(:nA)
|
214
|
+
r = r / 1_000_000_000
|
215
|
+
elsif r = options.delete(:ua) || options.delete(:uA)
|
216
|
+
r = r / 1_000_000.0
|
217
|
+
elsif r = options.delete(:ma) || options.delete(:mA)
|
218
|
+
r = r / 1000.0
|
219
|
+
elsif r = options.delete(:a) || options.delete(:A)
|
220
|
+
else
|
221
|
+
fail "Can't determine requested irange!"
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
if @type == :board_pmu
|
226
|
+
if r == :smart
|
227
|
+
self.irange = 6
|
228
|
+
else
|
229
|
+
self.irange = case
|
230
|
+
when r > 0.02 then 5
|
231
|
+
when r > 0.002 then 4
|
232
|
+
when r > 0.0002 then 3
|
233
|
+
when r > 0.00002 then 2
|
234
|
+
when r > 0.000002 then 1
|
235
|
+
else 0
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
else # :pin_pmu
|
240
|
+
if r == :smart
|
241
|
+
self.irange = 5
|
242
|
+
elsif r == :auto
|
243
|
+
fail 'Auto range not available in FIMV mode!' if self.fimv?
|
244
|
+
self.irange = 6
|
245
|
+
else
|
246
|
+
if fimv?
|
247
|
+
self.irange = case
|
248
|
+
when r > 0.0002 then 2
|
249
|
+
else 4
|
250
|
+
end
|
251
|
+
else
|
252
|
+
self.irange = case
|
253
|
+
when r > 0.0002 then 2
|
254
|
+
when r > 0.00002 then 4
|
255
|
+
when r > 0.000002 then 0
|
256
|
+
when r > 0.0000002 then 1
|
257
|
+
else 3
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
self
|
264
|
+
end
|
265
|
+
|
266
|
+
# Set the voltage range of the test instance, the following are valid:
|
267
|
+
#
|
268
|
+
# Board PMU
|
269
|
+
# * 2V
|
270
|
+
# * 5V
|
271
|
+
# * 10V
|
272
|
+
# * 24V
|
273
|
+
# * :auto
|
274
|
+
# * :smart
|
275
|
+
#
|
276
|
+
# Examples
|
277
|
+
# instance.set_vrange(:auto)
|
278
|
+
# instance.set_vrange(:v => 5)
|
279
|
+
# instance.set_vrange(5) # Same as above
|
280
|
+
def set_vrange(r = nil, options = {})
|
281
|
+
r, options = nil, r if r.is_a?(Hash)
|
282
|
+
if r == :smart
|
283
|
+
self.vrange = 4
|
284
|
+
elsif r == :auto
|
285
|
+
self.vrange = 5
|
286
|
+
elsif !r
|
287
|
+
if r = options.delete(:v) || options.delete(:V)
|
288
|
+
else
|
289
|
+
fail "Can't determine requested vrange!"
|
290
|
+
end
|
291
|
+
end
|
292
|
+
self.vrange = case
|
293
|
+
when r > 10 then 3
|
294
|
+
when r > 5 then 2
|
295
|
+
when r > 2 then 1
|
296
|
+
else 0
|
297
|
+
end
|
298
|
+
self
|
299
|
+
end
|
300
|
+
|
301
|
+
# Set the meaure mode of a parametric test instance, either:
|
302
|
+
# * :voltage / :fimv
|
303
|
+
# * :current / :fvmi
|
304
|
+
def set_measure_mode(mode)
|
305
|
+
if mode == :current || mode == :fvmi
|
306
|
+
self.measure_mode = 0
|
307
|
+
elsif mode == :voltage || mode == :fimv
|
308
|
+
self.measure_mode = 1
|
309
|
+
else
|
310
|
+
fail "Unknown measure mode: #{mode}"
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
# Returns true if instance configured for force current, measure voltage
|
315
|
+
def fimv?
|
316
|
+
measure_mode == 1
|
317
|
+
end
|
318
|
+
|
319
|
+
# Returns true if instance configured for force voltage, measure current
|
320
|
+
def fvmi?
|
321
|
+
measure_mode == 0
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|
326
|
+
end
|