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,77 +1,77 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
class MemoryStyle
|
|
3
|
-
attr_reader :pin_id, :size, :bit_order, :format, :trigger, :mode, :data_type
|
|
4
|
-
|
|
5
|
-
def initialize
|
|
6
|
-
@pin_id = []
|
|
7
|
-
@size = []
|
|
8
|
-
@bit_order = []
|
|
9
|
-
@format = []
|
|
10
|
-
@trigger = []
|
|
11
|
-
@mode = []
|
|
12
|
-
@data_type = []
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# Set memory style attributes for the given pin
|
|
16
|
-
#
|
|
17
|
-
# @example
|
|
18
|
-
# mem.pin :tdi, size: 8, trigger: :auto
|
|
19
|
-
def pin(*pin_ids)
|
|
20
|
-
options = pin_ids.last.is_a?(Hash) ? pin_ids.pop : {}
|
|
21
|
-
pin_ids.each_index do |i|
|
|
22
|
-
if pin_ids[i].is_a?(Symbol)
|
|
23
|
-
pin_ids[i] = dut.pin(pin_ids[i]).name
|
|
24
|
-
else
|
|
25
|
-
pin_ids[i] = pin_ids[i].name
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
@pin_id << pin_ids
|
|
29
|
-
@size << options[:size]
|
|
30
|
-
@bit_order << options[:bit_order]
|
|
31
|
-
@format << options[:format]
|
|
32
|
-
@trigger << options[:trigger]
|
|
33
|
-
@mode << options[:mode]
|
|
34
|
-
@data_type << options[:data_type]
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Get the chronologically last setting for the given pin's attributes
|
|
38
|
-
#
|
|
39
|
-
# @example
|
|
40
|
-
# mem.pin :tdi, size: 1
|
|
41
|
-
# mem.pin :tdi, size: 2
|
|
42
|
-
#
|
|
43
|
-
# my_local_attribute_hash = mem.accumulate_attributes(:tdi)
|
|
44
|
-
# # my_local_attribute_hash now is
|
|
45
|
-
# # {pin_id: :tdi, size: 2, bit_order: nil, format: nil, trigger: nil}
|
|
46
|
-
def accumulate_attributes(pin_id)
|
|
47
|
-
a = { pin_id: pin_id }
|
|
48
|
-
@pin_id.each_index do |i|
|
|
49
|
-
if @pin_id[i].include?(pin_id)
|
|
50
|
-
a[:size] = @size[i]
|
|
51
|
-
a[:bit_order] = @bit_order[i]
|
|
52
|
-
a[:format] = @format[i]
|
|
53
|
-
a[:trigger] = @trigger[i]
|
|
54
|
-
a[:mode] = @mode[i]
|
|
55
|
-
a[:data_type] = @data_type[i]
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
a
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# Check to see if a given pin exists in this style container
|
|
62
|
-
def contains_pin?(pin_id)
|
|
63
|
-
contained_pins.include?(pin_id)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# Get an array of pins contained in this style container
|
|
67
|
-
def contained_pins
|
|
68
|
-
pins = []
|
|
69
|
-
@pin_id.each do |a|
|
|
70
|
-
a.each do |p|
|
|
71
|
-
pins << p
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
pins.uniq
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
class MemoryStyle
|
|
3
|
+
attr_reader :pin_id, :size, :bit_order, :format, :trigger, :mode, :data_type
|
|
4
|
+
|
|
5
|
+
def initialize
|
|
6
|
+
@pin_id = []
|
|
7
|
+
@size = []
|
|
8
|
+
@bit_order = []
|
|
9
|
+
@format = []
|
|
10
|
+
@trigger = []
|
|
11
|
+
@mode = []
|
|
12
|
+
@data_type = []
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Set memory style attributes for the given pin
|
|
16
|
+
#
|
|
17
|
+
# @example
|
|
18
|
+
# mem.pin :tdi, size: 8, trigger: :auto
|
|
19
|
+
def pin(*pin_ids)
|
|
20
|
+
options = pin_ids.last.is_a?(Hash) ? pin_ids.pop : {}
|
|
21
|
+
pin_ids.each_index do |i|
|
|
22
|
+
if pin_ids[i].is_a?(Symbol)
|
|
23
|
+
pin_ids[i] = dut.pin(pin_ids[i]).name
|
|
24
|
+
else
|
|
25
|
+
pin_ids[i] = pin_ids[i].name
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
@pin_id << pin_ids
|
|
29
|
+
@size << options[:size]
|
|
30
|
+
@bit_order << options[:bit_order]
|
|
31
|
+
@format << options[:format]
|
|
32
|
+
@trigger << options[:trigger]
|
|
33
|
+
@mode << options[:mode]
|
|
34
|
+
@data_type << options[:data_type]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Get the chronologically last setting for the given pin's attributes
|
|
38
|
+
#
|
|
39
|
+
# @example
|
|
40
|
+
# mem.pin :tdi, size: 1
|
|
41
|
+
# mem.pin :tdi, size: 2
|
|
42
|
+
#
|
|
43
|
+
# my_local_attribute_hash = mem.accumulate_attributes(:tdi)
|
|
44
|
+
# # my_local_attribute_hash now is
|
|
45
|
+
# # {pin_id: :tdi, size: 2, bit_order: nil, format: nil, trigger: nil}
|
|
46
|
+
def accumulate_attributes(pin_id)
|
|
47
|
+
a = { pin_id: pin_id }
|
|
48
|
+
@pin_id.each_index do |i|
|
|
49
|
+
if @pin_id[i].include?(pin_id)
|
|
50
|
+
a[:size] = @size[i]
|
|
51
|
+
a[:bit_order] = @bit_order[i]
|
|
52
|
+
a[:format] = @format[i]
|
|
53
|
+
a[:trigger] = @trigger[i]
|
|
54
|
+
a[:mode] = @mode[i]
|
|
55
|
+
a[:data_type] = @data_type[i]
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
a
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Check to see if a given pin exists in this style container
|
|
62
|
+
def contains_pin?(pin_id)
|
|
63
|
+
contained_pins.include?(pin_id)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Get an array of pins contained in this style container
|
|
67
|
+
def contained_pins
|
|
68
|
+
pins = []
|
|
69
|
+
@pin_id.each do |a|
|
|
70
|
+
a.each do |p|
|
|
71
|
+
pins << p
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
pins.uniq
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
# Origen will instantiate this interface if the application doesn't define one,
|
|
3
|
-
# this allows test flows to be generated only
|
|
4
|
-
class NoInterface
|
|
5
|
-
include OrigenTesters::ProgramGenerators
|
|
6
|
-
end
|
|
7
|
-
end
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
# Origen will instantiate this interface if the application doesn't define one,
|
|
3
|
+
# this allows test flows to be generated only
|
|
4
|
+
class NoInterface
|
|
5
|
+
include OrigenTesters::ProgramGenerators
|
|
6
|
+
end
|
|
7
|
+
end
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
# This shim is temporary to help NXP transition to Origen from
|
|
2
|
-
# our original internal version (RGen)
|
|
3
|
-
if defined? RGen::ORIGENTRANSITION
|
|
4
|
-
require 'rgen/application/runner'
|
|
5
|
-
else
|
|
6
|
-
require 'origen/application/runner'
|
|
7
|
-
end
|
|
8
|
-
module Origen
|
|
9
|
-
class Application
|
|
10
|
-
class Runner
|
|
11
|
-
alias_method :orig_launch, :launch
|
|
12
|
-
# Patch this to allow write: false to be given as an option when
|
|
13
|
-
# generating a test program. When supplied and set to false, the program
|
|
14
|
-
# output files will not be written and only a flow model will be generated.
|
|
15
|
-
def launch(options = {})
|
|
16
|
-
if options.key?(:write)
|
|
17
|
-
OrigenTesters::Interface.write = options[:write]
|
|
18
|
-
else
|
|
19
|
-
OrigenTesters::Interface.write = true
|
|
20
|
-
end
|
|
21
|
-
orig_launch(options)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
1
|
+
# This shim is temporary to help NXP transition to Origen from
|
|
2
|
+
# our original internal version (RGen)
|
|
3
|
+
if defined? RGen::ORIGENTRANSITION
|
|
4
|
+
require 'rgen/application/runner'
|
|
5
|
+
else
|
|
6
|
+
require 'origen/application/runner'
|
|
7
|
+
end
|
|
8
|
+
module Origen
|
|
9
|
+
class Application
|
|
10
|
+
class Runner
|
|
11
|
+
alias_method :orig_launch, :launch
|
|
12
|
+
# Patch this to allow write: false to be given as an option when
|
|
13
|
+
# generating a test program. When supplied and set to false, the program
|
|
14
|
+
# output files will not be written and only a flow model will be generated.
|
|
15
|
+
def launch(options = {})
|
|
16
|
+
if options.key?(:write)
|
|
17
|
+
OrigenTesters::Interface.write = options[:write]
|
|
18
|
+
else
|
|
19
|
+
OrigenTesters::Interface.write = true
|
|
20
|
+
end
|
|
21
|
+
orig_launch(options)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
# This shim is temporary to help NXP transition to Origen from
|
|
2
|
-
# our original internal version (RGen)
|
|
3
|
-
if defined? RGen::ORIGENTRANSITION
|
|
4
|
-
require 'rgen/generator'
|
|
5
|
-
else
|
|
6
|
-
require 'origen/generator'
|
|
7
|
-
end
|
|
8
|
-
module Origen
|
|
9
|
-
class Generator
|
|
10
|
-
include Comparator
|
|
11
|
-
|
|
12
|
-
# Makes more sense for this plugin to own this method now
|
|
13
|
-
def generate_program(file, options)
|
|
14
|
-
Origen.file_handler.resolve_files(file, ignore_with_prefix: '_', default_dir: "#{Origen.root}/program") do |path|
|
|
15
|
-
Origen.file_handler.current_file = path
|
|
16
|
-
j = Job.new(path, options)
|
|
17
|
-
j.pattern = path
|
|
18
|
-
j.run
|
|
19
|
-
end
|
|
20
|
-
Origen.interface.write_files(options)
|
|
21
|
-
unless options[:quiet] || !Origen.interface.write?
|
|
22
|
-
if options[:referenced_pattern_list]
|
|
23
|
-
file = "#{Origen.root}/list/#{options[:referenced_pattern_list]}"
|
|
24
|
-
else
|
|
25
|
-
file = Origen.config.referenced_pattern_list
|
|
26
|
-
end
|
|
27
|
-
puts "Referenced pattern list written to: #{Pathname.new(file).relative_path_from(Pathname.pwd)}"
|
|
28
|
-
dir = Pathname.new(file).dirname
|
|
29
|
-
FileUtils.mkdir_p(dir) unless dir.exist?
|
|
30
|
-
File.open(file, 'w') do |f|
|
|
31
|
-
pats = Origen.interface.all_pattern_references.map do |name, refs|
|
|
32
|
-
refs[:main][:all] + refs[:main][:origen]
|
|
33
|
-
end.flatten.uniq.sort
|
|
34
|
-
unless pats.empty?
|
|
35
|
-
f.puts '# Main patterns'
|
|
36
|
-
pats.each { |p| f.puts p }
|
|
37
|
-
f.puts
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
pats = Origen.interface.all_pattern_references.map do |name, refs|
|
|
41
|
-
refs[:subroutine][:all] + refs[:subroutine][:origen]
|
|
42
|
-
end.flatten.uniq.sort
|
|
43
|
-
unless pats.empty?
|
|
44
|
-
f.puts '# Subroutine patterns'
|
|
45
|
-
pats.each { |p| f.puts p }
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
ref_file = File.join(Origen.file_handler.reference_directory, Pathname.new(file).basename)
|
|
49
|
-
check_for_changes(file, ref_file)
|
|
50
|
-
end
|
|
51
|
-
Origen.interface.on_program_completion(options)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
1
|
+
# This shim is temporary to help NXP transition to Origen from
|
|
2
|
+
# our original internal version (RGen)
|
|
3
|
+
if defined? RGen::ORIGENTRANSITION
|
|
4
|
+
require 'rgen/generator'
|
|
5
|
+
else
|
|
6
|
+
require 'origen/generator'
|
|
7
|
+
end
|
|
8
|
+
module Origen
|
|
9
|
+
class Generator
|
|
10
|
+
include Comparator
|
|
11
|
+
|
|
12
|
+
# Makes more sense for this plugin to own this method now
|
|
13
|
+
def generate_program(file, options)
|
|
14
|
+
Origen.file_handler.resolve_files(file, ignore_with_prefix: '_', default_dir: "#{Origen.root}/program") do |path|
|
|
15
|
+
Origen.file_handler.current_file = path
|
|
16
|
+
j = Job.new(path, options)
|
|
17
|
+
j.pattern = path
|
|
18
|
+
j.run
|
|
19
|
+
end
|
|
20
|
+
Origen.interface.write_files(options)
|
|
21
|
+
unless options[:quiet] || !Origen.interface.write?
|
|
22
|
+
if options[:referenced_pattern_list]
|
|
23
|
+
file = "#{Origen.root}/list/#{options[:referenced_pattern_list]}"
|
|
24
|
+
else
|
|
25
|
+
file = Origen.config.referenced_pattern_list
|
|
26
|
+
end
|
|
27
|
+
puts "Referenced pattern list written to: #{Pathname.new(file).relative_path_from(Pathname.pwd)}"
|
|
28
|
+
dir = Pathname.new(file).dirname
|
|
29
|
+
FileUtils.mkdir_p(dir) unless dir.exist?
|
|
30
|
+
File.open(file, 'w') do |f|
|
|
31
|
+
pats = Origen.interface.all_pattern_references.map do |name, refs|
|
|
32
|
+
refs[:main][:all] + refs[:main][:origen]
|
|
33
|
+
end.flatten.uniq.sort
|
|
34
|
+
unless pats.empty?
|
|
35
|
+
f.puts '# Main patterns'
|
|
36
|
+
pats.each { |p| f.puts p }
|
|
37
|
+
f.puts
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
pats = Origen.interface.all_pattern_references.map do |name, refs|
|
|
41
|
+
refs[:subroutine][:all] + refs[:subroutine][:origen]
|
|
42
|
+
end.flatten.uniq.sort
|
|
43
|
+
unless pats.empty?
|
|
44
|
+
f.puts '# Subroutine patterns'
|
|
45
|
+
pats.each { |p| f.puts p }
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
ref_file = File.join(Origen.file_handler.reference_directory, Pathname.new(file).basename)
|
|
49
|
+
check_for_changes(file, ref_file)
|
|
50
|
+
end
|
|
51
|
+
Origen.interface.on_program_completion(options)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -1,77 +1,91 @@
|
|
|
1
|
-
# This shim is temporary to help NXP transition to Origen from
|
|
2
|
-
# our original internal version (RGen)
|
|
3
|
-
if defined? RGen::ORIGENTRANSITION
|
|
4
|
-
require 'rgen/generator/flow'
|
|
5
|
-
else
|
|
6
|
-
require 'origen/generator/flow'
|
|
7
|
-
end
|
|
8
|
-
module Origen
|
|
9
|
-
class Generator
|
|
10
|
-
class Flow
|
|
11
|
-
alias_method :orig_create, :create
|
|
12
|
-
|
|
13
|
-
# Create a call stack of flows so that we can work out where the nodes
|
|
14
|
-
# of the ATP AST originated from
|
|
15
|
-
def create(options = {}, &block)
|
|
16
|
-
# Patch for Windows operation since the path can start with something like "C:/"
|
|
17
|
-
if caller[0] =~ /(:(\/|\\))/
|
|
18
|
-
orig_separator = Regexp.last_match(1)
|
|
19
|
-
file, line = *caller[0].sub(/:(\/|\\)/, '_ORIG_SEPARATOR_').split(':')
|
|
20
|
-
file = file.sub('_ORIG_SEPARATOR_', orig_separator)
|
|
21
|
-
else
|
|
22
|
-
file, line = *caller[0].split(':')
|
|
23
|
-
end
|
|
24
|
-
OrigenTesters::Flow.callstack << file
|
|
25
|
-
flow_comments, comments = *_extract_comments(OrigenTesters::Flow.callstack.last, line.to_i)
|
|
26
|
-
OrigenTesters::Flow.comment_stack << comments
|
|
27
|
-
if OrigenTesters::Flow.flow_comments
|
|
28
|
-
top = false
|
|
29
|
-
name = options[:name] || Pathname.new(file).basename('.rb').to_s.sub(/^_/, '')
|
|
30
|
-
Origen.interface.flow.group(name, description: flow_comments) do
|
|
31
|
-
orig_create(options, &block)
|
|
32
|
-
end
|
|
33
|
-
else
|
|
34
|
-
OrigenTesters::Flow.flow_comments = flow_comments
|
|
35
|
-
if options.key?(:unique_ids)
|
|
36
|
-
OrigenTesters::Flow.unique_ids = options.delete(:unique_ids)
|
|
37
|
-
else
|
|
38
|
-
OrigenTesters::Flow.unique_ids = true
|
|
39
|
-
end
|
|
40
|
-
top = true
|
|
41
|
-
orig_create(options, &block)
|
|
42
|
-
end
|
|
43
|
-
OrigenTesters::Flow.callstack.pop
|
|
44
|
-
OrigenTesters::Flow.comment_stack.pop
|
|
45
|
-
OrigenTesters::Flow.flow_comments = nil if top
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def _extract_comments(file, flow_line)
|
|
49
|
-
flow_comments = []
|
|
50
|
-
comments = {}
|
|
51
|
-
comment = nil
|
|
52
|
-
File.readlines(file).each_with_index do |line, i|
|
|
53
|
-
if comment
|
|
54
|
-
if line =~ /^\s*#-(.*)/
|
|
55
|
-
# Nothing, just ignore but keep the comment open
|
|
56
|
-
elsif line =~ /^\s*#(.*)/
|
|
57
|
-
comment << Regexp.last_match(1).strip
|
|
58
|
-
else
|
|
59
|
-
comment = nil
|
|
60
|
-
end
|
|
61
|
-
else
|
|
62
|
-
if line =~ /^\s*#[^-](.*)/
|
|
63
|
-
if i < flow_line
|
|
64
|
-
comment = flow_comments
|
|
65
|
-
else
|
|
66
|
-
comment = []
|
|
67
|
-
comments[i + 1] = comment
|
|
68
|
-
end
|
|
69
|
-
comment << Regexp.last_match(1).strip
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
[flow_comments, comments]
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
1
|
+
# This shim is temporary to help NXP transition to Origen from
|
|
2
|
+
# our original internal version (RGen)
|
|
3
|
+
if defined? RGen::ORIGENTRANSITION
|
|
4
|
+
require 'rgen/generator/flow'
|
|
5
|
+
else
|
|
6
|
+
require 'origen/generator/flow'
|
|
7
|
+
end
|
|
8
|
+
module Origen
|
|
9
|
+
class Generator
|
|
10
|
+
class Flow
|
|
11
|
+
alias_method :orig_create, :create
|
|
12
|
+
|
|
13
|
+
# Create a call stack of flows so that we can work out where the nodes
|
|
14
|
+
# of the ATP AST originated from
|
|
15
|
+
def create(options = {}, &block)
|
|
16
|
+
# Patch for Windows operation since the path can start with something like "C:/"
|
|
17
|
+
if caller[0] =~ /(:(\/|\\))/
|
|
18
|
+
orig_separator = Regexp.last_match(1)
|
|
19
|
+
file, line = *caller[0].sub(/:(\/|\\)/, '_ORIG_SEPARATOR_').split(':')
|
|
20
|
+
file = file.sub('_ORIG_SEPARATOR_', orig_separator)
|
|
21
|
+
else
|
|
22
|
+
file, line = *caller[0].split(':')
|
|
23
|
+
end
|
|
24
|
+
OrigenTesters::Flow.callstack << file
|
|
25
|
+
flow_comments, comments = *_extract_comments(OrigenTesters::Flow.callstack.last, line.to_i)
|
|
26
|
+
OrigenTesters::Flow.comment_stack << comments
|
|
27
|
+
if OrigenTesters::Flow.flow_comments
|
|
28
|
+
top = false
|
|
29
|
+
name = options[:name] || Pathname.new(file).basename('.rb').to_s.sub(/^_/, '')
|
|
30
|
+
Origen.interface.flow.group(name, description: flow_comments) do
|
|
31
|
+
orig_create(options, &block)
|
|
32
|
+
end
|
|
33
|
+
else
|
|
34
|
+
OrigenTesters::Flow.flow_comments = flow_comments
|
|
35
|
+
if options.key?(:unique_ids)
|
|
36
|
+
OrigenTesters::Flow.unique_ids = options.delete(:unique_ids)
|
|
37
|
+
else
|
|
38
|
+
OrigenTesters::Flow.unique_ids = true
|
|
39
|
+
end
|
|
40
|
+
top = true
|
|
41
|
+
orig_create(options, &block)
|
|
42
|
+
end
|
|
43
|
+
OrigenTesters::Flow.callstack.pop
|
|
44
|
+
OrigenTesters::Flow.comment_stack.pop
|
|
45
|
+
OrigenTesters::Flow.flow_comments = nil if top
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def _extract_comments(file, flow_line)
|
|
49
|
+
flow_comments = []
|
|
50
|
+
comments = {}
|
|
51
|
+
comment = nil
|
|
52
|
+
File.readlines(file).each_with_index do |line, i|
|
|
53
|
+
if comment
|
|
54
|
+
if line =~ /^\s*#-(.*)/
|
|
55
|
+
# Nothing, just ignore but keep the comment open
|
|
56
|
+
elsif line =~ /^\s*#(.*)/
|
|
57
|
+
comment << Regexp.last_match(1).strip
|
|
58
|
+
else
|
|
59
|
+
comment = nil
|
|
60
|
+
end
|
|
61
|
+
else
|
|
62
|
+
if line =~ /^\s*#[^-](.*)/
|
|
63
|
+
if i < flow_line
|
|
64
|
+
comment = flow_comments
|
|
65
|
+
else
|
|
66
|
+
comment = []
|
|
67
|
+
comments[i + 1] = comment
|
|
68
|
+
end
|
|
69
|
+
comment << Regexp.last_match(1).strip
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
[flow_comments, comments]
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Provides a hook to enable an internal startup callback to
|
|
79
|
+
class OrigenTestersPersistentFlowCallbackHandler
|
|
80
|
+
include Origen::PersistentCallbacks
|
|
81
|
+
|
|
82
|
+
def on_flow_start(options)
|
|
83
|
+
if Origen.interface.respond_to?(:_internal_startup)
|
|
84
|
+
Origen.interface._internal_startup(options)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
# Instantiate an instance of this class immediately when this file is loaded, this object will
|
|
89
|
+
# then listen for the remainder of the Origen thread
|
|
90
|
+
OrigenTestersPersistentFlowCallbackHandler.new
|
|
91
|
+
end
|