origen_testers 0.13.1 → 0.13.2
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/application.rb +151 -151
- data/config/boot.rb +13 -13
- data/config/commands.rb +85 -86
- data/config/users.rb +18 -18
- data/config/version.rb +8 -8
- data/lib/commands/build.rb +69 -69
- data/lib/commands/run.rb +48 -48
- data/lib/origen_testers.rb +47 -47
- data/lib/origen_testers/api.rb +381 -381
- data/lib/origen_testers/basic_test_setups.rb +105 -105
- data/lib/origen_testers/callback_handlers.rb +59 -59
- data/lib/origen_testers/command_based_tester.rb +45 -45
- data/lib/origen_testers/flow.rb +382 -382
- data/lib/origen_testers/generator.rb +283 -283
- data/lib/origen_testers/generator/identity_map.rb +23 -23
- data/lib/origen_testers/generator/placeholder.rb +11 -11
- data/lib/origen_testers/generator/test_numberer.rb +23 -23
- data/lib/origen_testers/igxl_based_tester.rb +12 -12
- data/lib/origen_testers/igxl_based_tester/base.rb +1100 -1099
- data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -79
- data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +169 -169
- data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -98
- data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -60
- data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -24
- data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -39
- data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +130 -130
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +460 -460
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +276 -276
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +607 -607
- data/lib/origen_testers/igxl_based_tester/base/global_specs.rb +83 -83
- data/lib/origen_testers/igxl_based_tester/base/job.rb +75 -75
- data/lib/origen_testers/igxl_based_tester/base/jobs.rb +44 -44
- data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -59
- data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -39
- data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -31
- data/lib/origen_testers/igxl_based_tester/base/levelset.rb +110 -110
- data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -109
- data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -68
- data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -56
- data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -68
- data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -56
- data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -93
- data/lib/origen_testers/igxl_based_tester/base/references.rb +25 -25
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +322 -322
- data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +66 -66
- data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +212 -212
- data/lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb +37 -37
- data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -37
- data/lib/origen_testers/igxl_based_tester/base/timesets.rb +49 -49
- data/lib/origen_testers/igxl_based_tester/base/timesets_basic.rb +49 -49
- data/lib/origen_testers/igxl_based_tester/files.rb +43 -43
- data/lib/origen_testers/igxl_based_tester/j750.rb +269 -269
- data/lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb +32 -32
- data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +746 -746
- data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -34
- data/lib/origen_testers/igxl_based_tester/j750_hpt/custom_test_instance.rb +32 -32
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +599 -599
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/parser.rb +102 -102
- data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -33
- data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -48
- data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -339
- data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -109
- data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -203
- data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -21
- data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -92
- data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -31
- data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +420 -420
- data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -24
- data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -13
- data/lib/origen_testers/igxl_based_tester/ultraflex.rb +798 -798
- data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/ate_hardware.rb +949 -949
- data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +36 -36
- data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +158 -158
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/ultraflex/global_specs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/job.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/jobs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/references.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +315 -315
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets_basic.rb +10 -10
- data/lib/origen_testers/interface.rb +345 -324
- data/lib/origen_testers/memory_style.rb +77 -77
- data/lib/origen_testers/no_interface.rb +7 -7
- data/lib/origen_testers/origen_ext/application/runner.rb +25 -25
- data/lib/origen_testers/origen_ext/generator.rb +54 -54
- data/lib/origen_testers/origen_ext/generator/flow.rb +91 -77
- data/lib/origen_testers/origen_ext/generator/resources.rb +21 -21
- data/lib/origen_testers/origen_ext/pins/pin.rb +78 -78
- data/lib/origen_testers/origen_ext/pins/pin_collection.rb +84 -84
- data/lib/origen_testers/parser.rb +22 -22
- data/lib/origen_testers/parser/description_lookup.rb +62 -62
- data/lib/origen_testers/parser/searchable_array.rb +30 -30
- data/lib/origen_testers/parser/searchable_hash.rb +30 -30
- data/lib/origen_testers/pattern_compilers.rb +116 -116
- data/lib/origen_testers/pattern_compilers/assembler.rb +88 -88
- data/lib/origen_testers/pattern_compilers/job.rb +96 -96
- data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -599
- data/lib/origen_testers/program_generators.rb +62 -62
- data/lib/origen_testers/smartest_based_tester.rb +8 -8
- data/lib/origen_testers/smartest_based_tester/base.rb +576 -567
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +296 -291
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +207 -194
- data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +32 -32
- data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +69 -69
- data/lib/origen_testers/smartest_based_tester/base/processors.rb +16 -16
- data/lib/origen_testers/smartest_based_tester/base/processors/adjacent_if_combiner.rb +106 -106
- data/lib/origen_testers/smartest_based_tester/base/processors/continue_implementer.rb +39 -39
- data/lib/origen_testers/smartest_based_tester/base/processors/empty_branch_cleaner.rb +21 -21
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_run_flag_table.rb +33 -33
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_set_variables.rb +22 -22
- data/lib/origen_testers/smartest_based_tester/base/processors/flag_optimizer.rb +188 -188
- data/lib/origen_testers/smartest_based_tester/base/processors/if_ran_cleaner.rb +34 -34
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +178 -164
- data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +77 -73
- data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -33
- data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -38
- data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -19
- data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -147
- data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +65 -65
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +208 -193
- data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -54
- data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +38 -38
- data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -8
- data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -89
- data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +181 -181
- data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -54
- data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -19
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -17
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -13
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.tf.erb +236 -214
- data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +48 -48
- data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/variables_file.rb +10 -10
- data/lib/origen_testers/test/basic_interface.rb +17 -17
- data/lib/origen_testers/test/block.rb +21 -21
- data/lib/origen_testers/test/custom_test_interface.rb +111 -111
- data/lib/origen_testers/test/dut.rb +295 -295
- data/lib/origen_testers/test/dut2.rb +76 -76
- data/lib/origen_testers/test/dut3.rb +244 -244
- data/lib/origen_testers/test/interface.rb +503 -503
- data/lib/origen_testers/test/nvm.rb +94 -94
- data/lib/origen_testers/timing.rb +368 -368
- data/lib/origen_testers/vector.rb +207 -207
- data/lib/origen_testers/vector_based_tester.rb +41 -41
- data/lib/origen_testers/vector_generator.rb +655 -655
- data/lib/origen_testers/vector_pipeline.rb +302 -302
- data/pattern/bitmap.rb +7 -7
- data/pattern/dc_instr.rb +7 -7
- data/pattern/delay.rb +7 -7
- data/pattern/freq_counter.rb +6 -6
- data/pattern/mem_test.rb +8 -8
- data/pattern/multi_vector.rb +122 -122
- data/pattern/multi_vector_plus1.rb +125 -125
- data/pattern/nvm/j750/add_late_pins.rb +3 -3
- data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -8
- data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -8
- data/pattern/nvm/j750/j750_halt.rb +159 -159
- data/pattern/nvm/j750/j750_workout.rb +209 -209
- data/pattern/nvm/j750/timing.rb +73 -73
- data/pattern/read_write_reg.rb +61 -61
- data/pattern/reset.rb +4 -4
- data/pattern/subroutines.rb +69 -69
- data/pattern/tester_overlay.rb +61 -52
- data/pattern/tester_store.rb +28 -28
- data/program/_additional_erase.rb +7 -7
- data/program/_efa_resources.rb +7 -7
- data/program/_erase.rb +25 -25
- data/program/_erase_vfy.rb +5 -5
- data/program/_iv_resources.rb +10 -10
- data/program/basic_interface.rb +5 -5
- data/program/components/_prb1_main.rb +222 -222
- data/program/components/_temp.rb +6 -6
- data/program/custom_tests.rb +10 -10
- data/program/flow_control.rb +422 -422
- data/program/prb1.rb +11 -11
- data/program/prb1_resources.rb +28 -28
- data/program/prb2.rb +27 -27
- data/program/test.rb +29 -29
- data/program/uflex_resources.rb +199 -199
- data/templates/example.txt.erb +53 -53
- data/templates/j750/program_sheet.txt.erb +9 -9
- data/templates/manifest/v93k.yaml.erb +22 -22
- data/templates/web/index.md.erb +51 -51
- data/templates/web/layouts/_basic.html.erb +15 -15
- data/templates/web/partials/_navbar.html.erb +22 -22
- data/templates/web/release_notes.md.erb +5 -5
- metadata +2 -2
|
@@ -1,56 +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
|
|
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
|
|
@@ -1,38 +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
|
|
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
|
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
module IGXLBasedTester
|
|
3
|
-
class Base
|
|
4
|
-
class Pinmap
|
|
5
|
-
include ::OrigenTesters::Generator
|
|
6
|
-
|
|
7
|
-
attr_accessor :pins
|
|
8
|
-
attr_accessor :pin_groups
|
|
9
|
-
attr_accessor :power_pins
|
|
10
|
-
attr_accessor :utility_pins
|
|
11
|
-
|
|
12
|
-
PIN_TYPES = ['I/O', 'I', 'O']
|
|
13
|
-
PWR_TYPES = ['Power']
|
|
14
|
-
UTL_TYPES = ['Utility', 'I/O', 'I', 'O']
|
|
15
|
-
|
|
16
|
-
def initialize # :nodoc:
|
|
17
|
-
@pins = {}
|
|
18
|
-
@pin_groups = Hash.new { |h, k| h[k] = {} }
|
|
19
|
-
@power_pins = {}
|
|
20
|
-
@utility_pins = {}
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def add_pin(pin_name, attrs = {})
|
|
24
|
-
attrs = {
|
|
25
|
-
type: 'I/O',
|
|
26
|
-
comment: ''
|
|
27
|
-
}.merge(attrs)
|
|
28
|
-
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
|
29
|
-
if PIN_TYPES.include? attrs[:type]
|
|
30
|
-
type = attrs[:type]
|
|
31
|
-
else
|
|
32
|
-
Origen.log.error "Pinmap individual pin type '#{attrs[:type]}' must be set to one of the following: #{PIN_TYPES.join(', ')} for pin '#{pin_name}'"
|
|
33
|
-
fail
|
|
34
|
-
end
|
|
35
|
-
@pins[pin_name] = { type: type, comment: attrs[:comment] }
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def add_group_pin(grp_name, pin_name, attrs = {})
|
|
39
|
-
attrs = {
|
|
40
|
-
type: 'I/O',
|
|
41
|
-
comment: ''
|
|
42
|
-
}.merge(attrs)
|
|
43
|
-
grp_name = grp_name.to_sym unless grp_name.is_a? Symbol
|
|
44
|
-
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
|
45
|
-
if PIN_TYPES.include? attrs[:type]
|
|
46
|
-
type = attrs[:type]
|
|
47
|
-
else
|
|
48
|
-
Origen.log.error "Pinmap group pin type '#{attrs[:type]}' must be set to one of the following: #{PIN_TYPES.join(', ')} for pin '#{pin_name}'"
|
|
49
|
-
fail
|
|
50
|
-
end
|
|
51
|
-
@pin_groups[grp_name][pin_name] = { type: attrs[:type], comment: attrs[:comment] }
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def add_power_pin(pin_name, attrs = {})
|
|
55
|
-
attrs = {
|
|
56
|
-
type: 'Power',
|
|
57
|
-
comment: ''
|
|
58
|
-
}.merge(attrs)
|
|
59
|
-
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
|
60
|
-
if PWR_TYPES.include? attrs[:type]
|
|
61
|
-
type = attrs[:type]
|
|
62
|
-
else
|
|
63
|
-
Origen.log.error "Pinmap powerpin type '#{attrs[:type]}' must be set to one of the following: #{PWR_TYPES.join(', ')} for pin '#{pin_name}'"
|
|
64
|
-
fail
|
|
65
|
-
end
|
|
66
|
-
@power_pins[pin_name] = { type: attrs[:type], comment: attrs[:comment] }
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def add_utility_pin(pin_name, attrs = {})
|
|
70
|
-
attrs = {
|
|
71
|
-
type: 'Utility',
|
|
72
|
-
comment: ''
|
|
73
|
-
}.merge(attrs)
|
|
74
|
-
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
|
75
|
-
if UTL_TYPES.include? attrs[:type]
|
|
76
|
-
type = attrs[:type]
|
|
77
|
-
else
|
|
78
|
-
Origen.log.error "Pinmap utility pin type '#{attrs[:type]}' must be set to one of the following: #{UTL_TYPES.join(', ')} for pin '#{pin_name}'"
|
|
79
|
-
fail
|
|
80
|
-
end
|
|
81
|
-
@utility_pins[pin_name] = { type: attrs[:type], comment: attrs[:comment] }
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def finalize(options = {})
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def platform
|
|
88
|
-
Origen.interface.platform
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module IGXLBasedTester
|
|
3
|
+
class Base
|
|
4
|
+
class Pinmap
|
|
5
|
+
include ::OrigenTesters::Generator
|
|
6
|
+
|
|
7
|
+
attr_accessor :pins
|
|
8
|
+
attr_accessor :pin_groups
|
|
9
|
+
attr_accessor :power_pins
|
|
10
|
+
attr_accessor :utility_pins
|
|
11
|
+
|
|
12
|
+
PIN_TYPES = ['I/O', 'I', 'O']
|
|
13
|
+
PWR_TYPES = ['Power']
|
|
14
|
+
UTL_TYPES = ['Utility', 'I/O', 'I', 'O']
|
|
15
|
+
|
|
16
|
+
def initialize # :nodoc:
|
|
17
|
+
@pins = {}
|
|
18
|
+
@pin_groups = Hash.new { |h, k| h[k] = {} }
|
|
19
|
+
@power_pins = {}
|
|
20
|
+
@utility_pins = {}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def add_pin(pin_name, attrs = {})
|
|
24
|
+
attrs = {
|
|
25
|
+
type: 'I/O',
|
|
26
|
+
comment: ''
|
|
27
|
+
}.merge(attrs)
|
|
28
|
+
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
|
29
|
+
if PIN_TYPES.include? attrs[:type]
|
|
30
|
+
type = attrs[:type]
|
|
31
|
+
else
|
|
32
|
+
Origen.log.error "Pinmap individual pin type '#{attrs[:type]}' must be set to one of the following: #{PIN_TYPES.join(', ')} for pin '#{pin_name}'"
|
|
33
|
+
fail
|
|
34
|
+
end
|
|
35
|
+
@pins[pin_name] = { type: type, comment: attrs[:comment] }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def add_group_pin(grp_name, pin_name, attrs = {})
|
|
39
|
+
attrs = {
|
|
40
|
+
type: 'I/O',
|
|
41
|
+
comment: ''
|
|
42
|
+
}.merge(attrs)
|
|
43
|
+
grp_name = grp_name.to_sym unless grp_name.is_a? Symbol
|
|
44
|
+
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
|
45
|
+
if PIN_TYPES.include? attrs[:type]
|
|
46
|
+
type = attrs[:type]
|
|
47
|
+
else
|
|
48
|
+
Origen.log.error "Pinmap group pin type '#{attrs[:type]}' must be set to one of the following: #{PIN_TYPES.join(', ')} for pin '#{pin_name}'"
|
|
49
|
+
fail
|
|
50
|
+
end
|
|
51
|
+
@pin_groups[grp_name][pin_name] = { type: attrs[:type], comment: attrs[:comment] }
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def add_power_pin(pin_name, attrs = {})
|
|
55
|
+
attrs = {
|
|
56
|
+
type: 'Power',
|
|
57
|
+
comment: ''
|
|
58
|
+
}.merge(attrs)
|
|
59
|
+
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
|
60
|
+
if PWR_TYPES.include? attrs[:type]
|
|
61
|
+
type = attrs[:type]
|
|
62
|
+
else
|
|
63
|
+
Origen.log.error "Pinmap powerpin type '#{attrs[:type]}' must be set to one of the following: #{PWR_TYPES.join(', ')} for pin '#{pin_name}'"
|
|
64
|
+
fail
|
|
65
|
+
end
|
|
66
|
+
@power_pins[pin_name] = { type: attrs[:type], comment: attrs[:comment] }
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def add_utility_pin(pin_name, attrs = {})
|
|
70
|
+
attrs = {
|
|
71
|
+
type: 'Utility',
|
|
72
|
+
comment: ''
|
|
73
|
+
}.merge(attrs)
|
|
74
|
+
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
|
75
|
+
if UTL_TYPES.include? attrs[:type]
|
|
76
|
+
type = attrs[:type]
|
|
77
|
+
else
|
|
78
|
+
Origen.log.error "Pinmap utility pin type '#{attrs[:type]}' must be set to one of the following: #{UTL_TYPES.join(', ')} for pin '#{pin_name}'"
|
|
79
|
+
fail
|
|
80
|
+
end
|
|
81
|
+
@utility_pins[pin_name] = { type: attrs[:type], comment: attrs[:comment] }
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def finalize(options = {})
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def platform
|
|
88
|
+
Origen.interface.platform
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
module IGXLBasedTester
|
|
3
|
-
class Base
|
|
4
|
-
class References
|
|
5
|
-
include ::OrigenTesters::Generator
|
|
6
|
-
attr_accessor :references
|
|
7
|
-
|
|
8
|
-
OUTPUT_PREFIX = nil
|
|
9
|
-
OUTPUT_POSTFIX = nil
|
|
10
|
-
|
|
11
|
-
def initialize # :nodoc:
|
|
12
|
-
@references = []
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def add(reference, options = {})
|
|
16
|
-
options = {
|
|
17
|
-
comment: nil
|
|
18
|
-
}.merge(options)
|
|
19
|
-
|
|
20
|
-
@references << { ref: reference, comment: options[:comment] }
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module IGXLBasedTester
|
|
3
|
+
class Base
|
|
4
|
+
class References
|
|
5
|
+
include ::OrigenTesters::Generator
|
|
6
|
+
attr_accessor :references
|
|
7
|
+
|
|
8
|
+
OUTPUT_PREFIX = nil
|
|
9
|
+
OUTPUT_POSTFIX = nil
|
|
10
|
+
|
|
11
|
+
def initialize # :nodoc:
|
|
12
|
+
@references = []
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def add(reference, options = {})
|
|
16
|
+
options = {
|
|
17
|
+
comment: nil
|
|
18
|
+
}.merge(options)
|
|
19
|
+
|
|
20
|
+
@references << { ref: reference, comment: options[:comment] }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -1,322 +1,322 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
module IGXLBasedTester
|
|
3
|
-
class Base
|
|
4
|
-
class TestInstance
|
|
5
|
-
attr_accessor :type, :index, :version, :append_version, :finalize, :meta
|
|
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 inspect
|
|
72
|
-
"<TestInstance: #{name}, Type: #{type}>"
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def ==(other_instance)
|
|
76
|
-
self.class == other_instance.class &&
|
|
77
|
-
unversioned_name.to_s == other_instance.unversioned_name.to_s &&
|
|
78
|
-
self.class.attrs.all? do |attr|
|
|
79
|
-
# Exclude test name, already examined above and don't want to include
|
|
80
|
-
# the version in the comparison
|
|
81
|
-
if attr == 'test_name'
|
|
82
|
-
true
|
|
83
|
-
else
|
|
84
|
-
send(attr) == other_instance.send(attr)
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def self.new_empty(name, attrs = {})
|
|
90
|
-
new(name, :empty, attrs)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def self.new_functional(name, attrs = {})
|
|
94
|
-
new(name, :functional, attrs)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def self.new_board_pmu(name, attrs = {})
|
|
98
|
-
new(name, :board_pmu, attrs)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def self.new_pin_pmu(name, attrs = {})
|
|
102
|
-
new(name, :pin_pmu, attrs)
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def self.new_apmu_powersupply(name, attrs = {})
|
|
106
|
-
new(name, :apmu_powersupply, attrs)
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def self.new_powersupply(name, attrs = {})
|
|
110
|
-
new(name, :powersupply, attrs)
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
def self.new_mto_memory(name, attrs = {})
|
|
114
|
-
new(name, :mto_memory, attrs)
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# Returns the fully formatted test instance for insertion into an instance sheet
|
|
118
|
-
def to_s(override_name = nil)
|
|
119
|
-
l = "\t"
|
|
120
|
-
self.class.attrs.each do |attr|
|
|
121
|
-
if attr == 'test_name' && override_name
|
|
122
|
-
l += "#{override_name}\t"
|
|
123
|
-
else
|
|
124
|
-
l += "#{send(attr)}\t"
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
"#{l}"
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
def name
|
|
131
|
-
if version && @append_version
|
|
132
|
-
"#{@test_name}_v#{version}"
|
|
133
|
-
else
|
|
134
|
-
@test_name.to_s
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
alias_method :test_name, :name
|
|
138
|
-
|
|
139
|
-
def name=(val)
|
|
140
|
-
self.test_name = val
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
def unversioned_name
|
|
144
|
-
@test_name.to_s
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
# Set the cpu wait flags for the given test instance
|
|
148
|
-
# instance.set_wait_flags(:a)
|
|
149
|
-
# instance.set_wait_flags(:a, :c)
|
|
150
|
-
def set_wait_flags(*flags)
|
|
151
|
-
# This method is tester-specific and must be overridden by the child class
|
|
152
|
-
fail 'The #{self.class} class has not defined a set_wait_flags method!'
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
# Set and enable the hi limit of a parametric test instance, passing in
|
|
156
|
-
# nil or false as the lim parameter will disable the hi limit.
|
|
157
|
-
def set_hi_limit(lim)
|
|
158
|
-
if lim
|
|
159
|
-
self.hi_limit = lim
|
|
160
|
-
end
|
|
161
|
-
self
|
|
162
|
-
end
|
|
163
|
-
alias_method :hi_limit=, :set_hi_limit
|
|
164
|
-
|
|
165
|
-
# Set and enable the hi limit of a parametric test instance, passing in
|
|
166
|
-
# nil or false as the lim parameter will disable the hi limit.
|
|
167
|
-
def set_lo_limit(lim)
|
|
168
|
-
if lim
|
|
169
|
-
self.lo_limit = lim
|
|
170
|
-
end
|
|
171
|
-
self
|
|
172
|
-
end
|
|
173
|
-
alias_method :lo_limit=, :set_lo_limit
|
|
174
|
-
|
|
175
|
-
# Set the current range of the test instance, the following are valid:
|
|
176
|
-
#
|
|
177
|
-
# Board PMU
|
|
178
|
-
# * 2uA
|
|
179
|
-
# * 20uA
|
|
180
|
-
# * 200uA
|
|
181
|
-
# * 2mA
|
|
182
|
-
# * 20mA
|
|
183
|
-
# * 200mA
|
|
184
|
-
# * :smart
|
|
185
|
-
#
|
|
186
|
-
# Pin PMU
|
|
187
|
-
# * 200nA
|
|
188
|
-
# * 2uA
|
|
189
|
-
# * 20uA
|
|
190
|
-
# * 200uA
|
|
191
|
-
# * 2mA
|
|
192
|
-
# * :auto
|
|
193
|
-
# * :smart
|
|
194
|
-
#
|
|
195
|
-
# Examples
|
|
196
|
-
# instance.set_irange(:smart)
|
|
197
|
-
# instance.set_irange(:ua => 2)
|
|
198
|
-
# instance.set_irange(2.uA) # Same as above
|
|
199
|
-
# instance.set_irange(:ma => 200)
|
|
200
|
-
# instance.set_irange(0.2) # Same as above
|
|
201
|
-
# instance.set_irange(:a => 0.2) # Same as above
|
|
202
|
-
def set_irange(r = nil, options = {})
|
|
203
|
-
r, options = nil, r if r.is_a?(Hash)
|
|
204
|
-
unless r
|
|
205
|
-
if r = options.delete(:na) || options.delete(:nA)
|
|
206
|
-
r = r / 1_000_000_000
|
|
207
|
-
elsif r = options.delete(:ua) || options.delete(:uA)
|
|
208
|
-
r = r / 1_000_000.0
|
|
209
|
-
elsif r = options.delete(:ma) || options.delete(:mA)
|
|
210
|
-
r = r / 1000.0
|
|
211
|
-
elsif r = options.delete(:a) || options.delete(:A)
|
|
212
|
-
else
|
|
213
|
-
fail "Can't determine requested irange!"
|
|
214
|
-
end
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
if @type == :board_pmu
|
|
218
|
-
if r == :smart
|
|
219
|
-
self.irange = 6
|
|
220
|
-
else
|
|
221
|
-
self.irange = case
|
|
222
|
-
when r > 0.02 then 5
|
|
223
|
-
when r > 0.002 then 4
|
|
224
|
-
when r > 0.0002 then 3
|
|
225
|
-
when r > 0.00002 then 2
|
|
226
|
-
when r > 0.000002 then 1
|
|
227
|
-
else 0
|
|
228
|
-
end
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
elsif @type == :powersupply
|
|
232
|
-
if r == :smart
|
|
233
|
-
self.irange = 6
|
|
234
|
-
elsif r == :auto
|
|
235
|
-
self.irange = 5
|
|
236
|
-
else
|
|
237
|
-
self.irange = case
|
|
238
|
-
when r > 0.25 then 4 # between 250mA - 1A
|
|
239
|
-
when r > 0.1 then 7 # between 100mA - 250mA
|
|
240
|
-
when r > 0.01 then 0 # between 10mA - 100mA
|
|
241
|
-
when r > 0.0005 then 1 # between 500ua - 10mA
|
|
242
|
-
when r > 0.00005 then 2 # between 50ua - 500u
|
|
243
|
-
when r > 0.000005 then 3 # between 5u - 50u
|
|
244
|
-
else 8
|
|
245
|
-
end
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
else # :pin_pmu
|
|
249
|
-
if r == :smart
|
|
250
|
-
self.irange = 5
|
|
251
|
-
elsif r == :auto
|
|
252
|
-
fail 'Auto range not available in FIMV mode!' if self.fimv?
|
|
253
|
-
self.irange = 6
|
|
254
|
-
else
|
|
255
|
-
if fimv?
|
|
256
|
-
self.irange = case
|
|
257
|
-
when r > 0.0002 then 2
|
|
258
|
-
else 4
|
|
259
|
-
end
|
|
260
|
-
else
|
|
261
|
-
self.irange = case
|
|
262
|
-
when r > 0.0002 then 2
|
|
263
|
-
when r > 0.00002 then 4
|
|
264
|
-
when r > 0.000002 then 0
|
|
265
|
-
when r > 0.0000002 then 1
|
|
266
|
-
else 3
|
|
267
|
-
end
|
|
268
|
-
end
|
|
269
|
-
end
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
self
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
# Set the voltage range of the test instance, the following are valid:
|
|
276
|
-
#
|
|
277
|
-
# Board PMU
|
|
278
|
-
# * 2V
|
|
279
|
-
# * 5V
|
|
280
|
-
# * 10V
|
|
281
|
-
# * 24V
|
|
282
|
-
# * :auto
|
|
283
|
-
# * :smart
|
|
284
|
-
#
|
|
285
|
-
# Examples
|
|
286
|
-
# instance.set_vrange(:auto)
|
|
287
|
-
# instance.set_vrange(:v => 5)
|
|
288
|
-
# instance.set_vrange(5) # Same as above
|
|
289
|
-
def set_vrange(r = nil, options = {})
|
|
290
|
-
r, options = nil, r if r.is_a?(Hash)
|
|
291
|
-
if r == :smart
|
|
292
|
-
self.vrange = 4
|
|
293
|
-
elsif r == :auto
|
|
294
|
-
self.vrange = 5
|
|
295
|
-
elsif !r
|
|
296
|
-
if r = options.delete(:v) || options.delete(:V)
|
|
297
|
-
else
|
|
298
|
-
fail "Can't determine requested vrange!"
|
|
299
|
-
end
|
|
300
|
-
end
|
|
301
|
-
self.vrange = case
|
|
302
|
-
when r > 10 then 3
|
|
303
|
-
when r > 5 then 2
|
|
304
|
-
when r > 2 then 1
|
|
305
|
-
else 0
|
|
306
|
-
end
|
|
307
|
-
self
|
|
308
|
-
end
|
|
309
|
-
|
|
310
|
-
# Returns true if instance configured for force current, measure voltage
|
|
311
|
-
def fimv?
|
|
312
|
-
measure_mode == 1
|
|
313
|
-
end
|
|
314
|
-
|
|
315
|
-
# Returns true if instance configured for force voltage, measure current
|
|
316
|
-
def fvmi?
|
|
317
|
-
measure_mode == 0
|
|
318
|
-
end
|
|
319
|
-
end
|
|
320
|
-
end
|
|
321
|
-
end
|
|
322
|
-
end
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module IGXLBasedTester
|
|
3
|
+
class Base
|
|
4
|
+
class TestInstance
|
|
5
|
+
attr_accessor :type, :index, :version, :append_version, :finalize, :meta
|
|
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 inspect
|
|
72
|
+
"<TestInstance: #{name}, Type: #{type}>"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def ==(other_instance)
|
|
76
|
+
self.class == other_instance.class &&
|
|
77
|
+
unversioned_name.to_s == other_instance.unversioned_name.to_s &&
|
|
78
|
+
self.class.attrs.all? do |attr|
|
|
79
|
+
# Exclude test name, already examined above and don't want to include
|
|
80
|
+
# the version in the comparison
|
|
81
|
+
if attr == 'test_name'
|
|
82
|
+
true
|
|
83
|
+
else
|
|
84
|
+
send(attr) == other_instance.send(attr)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def self.new_empty(name, attrs = {})
|
|
90
|
+
new(name, :empty, attrs)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def self.new_functional(name, attrs = {})
|
|
94
|
+
new(name, :functional, attrs)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def self.new_board_pmu(name, attrs = {})
|
|
98
|
+
new(name, :board_pmu, attrs)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def self.new_pin_pmu(name, attrs = {})
|
|
102
|
+
new(name, :pin_pmu, attrs)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def self.new_apmu_powersupply(name, attrs = {})
|
|
106
|
+
new(name, :apmu_powersupply, attrs)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def self.new_powersupply(name, attrs = {})
|
|
110
|
+
new(name, :powersupply, attrs)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def self.new_mto_memory(name, attrs = {})
|
|
114
|
+
new(name, :mto_memory, attrs)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Returns the fully formatted test instance for insertion into an instance sheet
|
|
118
|
+
def to_s(override_name = nil)
|
|
119
|
+
l = "\t"
|
|
120
|
+
self.class.attrs.each do |attr|
|
|
121
|
+
if attr == 'test_name' && override_name
|
|
122
|
+
l += "#{override_name}\t"
|
|
123
|
+
else
|
|
124
|
+
l += "#{send(attr)}\t"
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
"#{l}"
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def name
|
|
131
|
+
if version && @append_version
|
|
132
|
+
"#{@test_name}_v#{version}"
|
|
133
|
+
else
|
|
134
|
+
@test_name.to_s
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
alias_method :test_name, :name
|
|
138
|
+
|
|
139
|
+
def name=(val)
|
|
140
|
+
self.test_name = val
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def unversioned_name
|
|
144
|
+
@test_name.to_s
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Set the cpu wait flags for the given test instance
|
|
148
|
+
# instance.set_wait_flags(:a)
|
|
149
|
+
# instance.set_wait_flags(:a, :c)
|
|
150
|
+
def set_wait_flags(*flags)
|
|
151
|
+
# This method is tester-specific and must be overridden by the child class
|
|
152
|
+
fail 'The #{self.class} class has not defined a set_wait_flags method!'
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Set and enable the hi limit of a parametric test instance, passing in
|
|
156
|
+
# nil or false as the lim parameter will disable the hi limit.
|
|
157
|
+
def set_hi_limit(lim)
|
|
158
|
+
if lim
|
|
159
|
+
self.hi_limit = lim
|
|
160
|
+
end
|
|
161
|
+
self
|
|
162
|
+
end
|
|
163
|
+
alias_method :hi_limit=, :set_hi_limit
|
|
164
|
+
|
|
165
|
+
# Set and enable the hi limit of a parametric test instance, passing in
|
|
166
|
+
# nil or false as the lim parameter will disable the hi limit.
|
|
167
|
+
def set_lo_limit(lim)
|
|
168
|
+
if lim
|
|
169
|
+
self.lo_limit = lim
|
|
170
|
+
end
|
|
171
|
+
self
|
|
172
|
+
end
|
|
173
|
+
alias_method :lo_limit=, :set_lo_limit
|
|
174
|
+
|
|
175
|
+
# Set the current range of the test instance, the following are valid:
|
|
176
|
+
#
|
|
177
|
+
# Board PMU
|
|
178
|
+
# * 2uA
|
|
179
|
+
# * 20uA
|
|
180
|
+
# * 200uA
|
|
181
|
+
# * 2mA
|
|
182
|
+
# * 20mA
|
|
183
|
+
# * 200mA
|
|
184
|
+
# * :smart
|
|
185
|
+
#
|
|
186
|
+
# Pin PMU
|
|
187
|
+
# * 200nA
|
|
188
|
+
# * 2uA
|
|
189
|
+
# * 20uA
|
|
190
|
+
# * 200uA
|
|
191
|
+
# * 2mA
|
|
192
|
+
# * :auto
|
|
193
|
+
# * :smart
|
|
194
|
+
#
|
|
195
|
+
# Examples
|
|
196
|
+
# instance.set_irange(:smart)
|
|
197
|
+
# instance.set_irange(:ua => 2)
|
|
198
|
+
# instance.set_irange(2.uA) # Same as above
|
|
199
|
+
# instance.set_irange(:ma => 200)
|
|
200
|
+
# instance.set_irange(0.2) # Same as above
|
|
201
|
+
# instance.set_irange(:a => 0.2) # Same as above
|
|
202
|
+
def set_irange(r = nil, options = {})
|
|
203
|
+
r, options = nil, r if r.is_a?(Hash)
|
|
204
|
+
unless r
|
|
205
|
+
if r = options.delete(:na) || options.delete(:nA)
|
|
206
|
+
r = r / 1_000_000_000
|
|
207
|
+
elsif r = options.delete(:ua) || options.delete(:uA)
|
|
208
|
+
r = r / 1_000_000.0
|
|
209
|
+
elsif r = options.delete(:ma) || options.delete(:mA)
|
|
210
|
+
r = r / 1000.0
|
|
211
|
+
elsif r = options.delete(:a) || options.delete(:A)
|
|
212
|
+
else
|
|
213
|
+
fail "Can't determine requested irange!"
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
if @type == :board_pmu
|
|
218
|
+
if r == :smart
|
|
219
|
+
self.irange = 6
|
|
220
|
+
else
|
|
221
|
+
self.irange = case
|
|
222
|
+
when r > 0.02 then 5
|
|
223
|
+
when r > 0.002 then 4
|
|
224
|
+
when r > 0.0002 then 3
|
|
225
|
+
when r > 0.00002 then 2
|
|
226
|
+
when r > 0.000002 then 1
|
|
227
|
+
else 0
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
elsif @type == :powersupply
|
|
232
|
+
if r == :smart
|
|
233
|
+
self.irange = 6
|
|
234
|
+
elsif r == :auto
|
|
235
|
+
self.irange = 5
|
|
236
|
+
else
|
|
237
|
+
self.irange = case
|
|
238
|
+
when r > 0.25 then 4 # between 250mA - 1A
|
|
239
|
+
when r > 0.1 then 7 # between 100mA - 250mA
|
|
240
|
+
when r > 0.01 then 0 # between 10mA - 100mA
|
|
241
|
+
when r > 0.0005 then 1 # between 500ua - 10mA
|
|
242
|
+
when r > 0.00005 then 2 # between 50ua - 500u
|
|
243
|
+
when r > 0.000005 then 3 # between 5u - 50u
|
|
244
|
+
else 8
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
else # :pin_pmu
|
|
249
|
+
if r == :smart
|
|
250
|
+
self.irange = 5
|
|
251
|
+
elsif r == :auto
|
|
252
|
+
fail 'Auto range not available in FIMV mode!' if self.fimv?
|
|
253
|
+
self.irange = 6
|
|
254
|
+
else
|
|
255
|
+
if fimv?
|
|
256
|
+
self.irange = case
|
|
257
|
+
when r > 0.0002 then 2
|
|
258
|
+
else 4
|
|
259
|
+
end
|
|
260
|
+
else
|
|
261
|
+
self.irange = case
|
|
262
|
+
when r > 0.0002 then 2
|
|
263
|
+
when r > 0.00002 then 4
|
|
264
|
+
when r > 0.000002 then 0
|
|
265
|
+
when r > 0.0000002 then 1
|
|
266
|
+
else 3
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
self
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# Set the voltage range of the test instance, the following are valid:
|
|
276
|
+
#
|
|
277
|
+
# Board PMU
|
|
278
|
+
# * 2V
|
|
279
|
+
# * 5V
|
|
280
|
+
# * 10V
|
|
281
|
+
# * 24V
|
|
282
|
+
# * :auto
|
|
283
|
+
# * :smart
|
|
284
|
+
#
|
|
285
|
+
# Examples
|
|
286
|
+
# instance.set_vrange(:auto)
|
|
287
|
+
# instance.set_vrange(:v => 5)
|
|
288
|
+
# instance.set_vrange(5) # Same as above
|
|
289
|
+
def set_vrange(r = nil, options = {})
|
|
290
|
+
r, options = nil, r if r.is_a?(Hash)
|
|
291
|
+
if r == :smart
|
|
292
|
+
self.vrange = 4
|
|
293
|
+
elsif r == :auto
|
|
294
|
+
self.vrange = 5
|
|
295
|
+
elsif !r
|
|
296
|
+
if r = options.delete(:v) || options.delete(:V)
|
|
297
|
+
else
|
|
298
|
+
fail "Can't determine requested vrange!"
|
|
299
|
+
end
|
|
300
|
+
end
|
|
301
|
+
self.vrange = case
|
|
302
|
+
when r > 10 then 3
|
|
303
|
+
when r > 5 then 2
|
|
304
|
+
when r > 2 then 1
|
|
305
|
+
else 0
|
|
306
|
+
end
|
|
307
|
+
self
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
# Returns true if instance configured for force current, measure voltage
|
|
311
|
+
def fimv?
|
|
312
|
+
measure_mode == 1
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
# Returns true if instance configured for force voltage, measure current
|
|
316
|
+
def fvmi?
|
|
317
|
+
measure_mode == 0
|
|
318
|
+
end
|
|
319
|
+
end
|
|
320
|
+
end
|
|
321
|
+
end
|
|
322
|
+
end
|