origen_testers 0.41.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/approved/j750/decompiler/sample/sample.atp +16 -0
- data/config/application.rb +6 -0
- data/config/boot.rb +3 -0
- data/config/commands.rb +148 -3
- data/config/global_commands.rb +0 -0
- data/config/shared_commands.rb +0 -0
- data/config/users.rb +0 -0
- data/config/version.rb +1 -1
- data/lib/commands/build.rb +0 -0
- data/lib/commands/convert.rb +16 -10
- data/lib/commands/run.rb +0 -0
- data/lib/origen_testers.rb +5 -0
- data/lib/origen_testers/api.rb +4 -0
- data/lib/origen_testers/atp.rb +0 -0
- data/lib/origen_testers/atp/ast/extractor.rb +0 -0
- data/lib/origen_testers/atp/ast/node.rb +0 -0
- data/lib/origen_testers/atp/flow.rb +0 -0
- data/lib/origen_testers/atp/flow_api.rb +0 -0
- data/lib/origen_testers/atp/formatter.rb +0 -0
- data/lib/origen_testers/atp/formatters/basic.rb +0 -0
- data/lib/origen_testers/atp/formatters/datalog.rb +0 -0
- data/lib/origen_testers/atp/parser.rb +0 -0
- data/lib/origen_testers/atp/processor.rb +0 -0
- data/lib/origen_testers/atp/processors/add_ids.rb +0 -0
- data/lib/origen_testers/atp/processors/add_set_result.rb +0 -0
- data/lib/origen_testers/atp/processors/adjacent_if_combiner.rb +0 -0
- data/lib/origen_testers/atp/processors/append_to.rb +0 -0
- data/lib/origen_testers/atp/processors/apply_post_group_actions.rb +0 -0
- data/lib/origen_testers/atp/processors/condition.rb +0 -0
- data/lib/origen_testers/atp/processors/continue_implementer.rb +0 -0
- data/lib/origen_testers/atp/processors/else_remover.rb +0 -0
- data/lib/origen_testers/atp/processors/empty_branch_remover.rb +0 -0
- data/lib/origen_testers/atp/processors/extract_set_flags.rb +0 -0
- data/lib/origen_testers/atp/processors/flag_optimizer.rb +0 -0
- data/lib/origen_testers/atp/processors/flattener.rb +0 -0
- data/lib/origen_testers/atp/processors/flow_id.rb +0 -0
- data/lib/origen_testers/atp/processors/marshal.rb +0 -0
- data/lib/origen_testers/atp/processors/on_pass_fail_remover.rb +0 -0
- data/lib/origen_testers/atp/processors/one_flag_per_test.rb +0 -0
- data/lib/origen_testers/atp/processors/pre_cleaner.rb +0 -0
- data/lib/origen_testers/atp/processors/redundant_condition_remover.rb +0 -0
- data/lib/origen_testers/atp/processors/relationship.rb +0 -0
- data/lib/origen_testers/atp/processors/sub_flow_remover.rb +0 -0
- data/lib/origen_testers/atp/program.rb +0 -0
- data/lib/origen_testers/atp/runner.rb +0 -0
- data/lib/origen_testers/atp/validator.rb +0 -0
- data/lib/origen_testers/atp/validators/condition.rb +0 -0
- data/lib/origen_testers/atp/validators/duplicate_ids.rb +0 -0
- data/lib/origen_testers/atp/validators/flags.rb +0 -0
- data/lib/origen_testers/atp/validators/jobs.rb +0 -0
- data/lib/origen_testers/atp/validators/missing_ids.rb +0 -0
- data/lib/origen_testers/atp_deprecation.rb +0 -0
- data/lib/origen_testers/basic_test_setups.rb +0 -0
- data/lib/origen_testers/callback_handlers.rb +0 -0
- data/lib/origen_testers/command_based_tester.rb +0 -0
- data/lib/origen_testers/decompiler.rb +9 -0
- data/lib/origen_testers/decompiler/decompiler_api.rb +163 -0
- data/lib/origen_testers/decompiler/nodes.rb +141 -0
- data/lib/origen_testers/decompiler/pattern.rb +304 -0
- data/lib/origen_testers/decompiler/pattern/elements/base.rb +44 -0
- data/lib/origen_testers/decompiler/pattern/elements/comment_block.rb +28 -0
- data/lib/origen_testers/decompiler/pattern/elements/frontmatter.rb +42 -0
- data/lib/origen_testers/decompiler/pattern/elements/pinlist.rb +44 -0
- data/lib/origen_testers/decompiler/pattern/elements/vector.rb +59 -0
- data/lib/origen_testers/decompiler/pattern/elements/vector_body_element.rb +105 -0
- data/lib/origen_testers/decompiler/pattern/enumerable_ext.rb +173 -0
- data/lib/origen_testers/decompiler/pattern/parsers.rb +111 -0
- data/lib/origen_testers/decompiler/pattern/spec_helpers.rb +41 -0
- data/lib/origen_testers/decompiler/pattern/splitter.rb +166 -0
- data/lib/origen_testers/decompiler/pattern/vector_delimiter_base.rb +70 -0
- data/lib/origen_testers/flow.rb +0 -0
- data/lib/origen_testers/generator/identity_map.rb +0 -0
- data/lib/origen_testers/generator/placeholder.rb +0 -0
- data/lib/origen_testers/generator/test_numberer.rb +0 -0
- data/lib/origen_testers/igxl_based_tester.rb +3 -0
- data/lib/origen_testers/igxl_based_tester/base.rb +8 -1
- data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/patset.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/patsets.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/decompiler.rb +72 -0
- data/lib/origen_testers/igxl_based_tester/decompiler/atp.rb +98 -0
- data/lib/origen_testers/igxl_based_tester/decompiler/nodes.rb +77 -0
- data/lib/origen_testers/igxl_based_tester/files.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750.rb +1 -1
- data/lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/flow.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/generator.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/patset.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/instances.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patgroups.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patsets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patsubrs.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/custom_test_instance.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +0 -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 +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/flow.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/flows.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/timesets.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/instances.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patgroups.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsubrs.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +0 -0
- data/lib/origen_testers/labview_based_tester.rb +0 -0
- data/lib/origen_testers/memory_style.rb +0 -0
- data/lib/origen_testers/no_interface.rb +0 -0
- data/lib/origen_testers/origen_ext/application/runner.rb +0 -0
- data/lib/origen_testers/origen_ext/generator.rb +0 -0
- data/lib/origen_testers/origen_ext/generator/flow.rb +0 -0
- data/lib/origen_testers/origen_ext/generator/pattern.rb +0 -0
- data/lib/origen_testers/origen_ext/generator/resources.rb +0 -0
- data/lib/origen_testers/origen_ext/pins/timing.rb +57 -0
- data/lib/origen_testers/origen_ext/pins/timing/timeset.rb +29 -0
- data/lib/origen_testers/parser.rb +0 -0
- data/lib/origen_testers/parser/description_lookup.rb +0 -0
- data/lib/origen_testers/parser/searchable_array.rb +0 -0
- data/lib/origen_testers/parser/searchable_hash.rb +0 -0
- data/lib/origen_testers/pattern_compilers.rb +0 -0
- data/lib/origen_testers/pattern_compilers/assembler.rb +0 -0
- data/lib/origen_testers/pattern_compilers/base.rb +0 -0
- data/lib/origen_testers/pattern_compilers/igxl_based.rb +0 -0
- data/lib/origen_testers/pattern_compilers/j750.rb +0 -0
- data/lib/origen_testers/pattern_compilers/job.rb +0 -0
- data/lib/origen_testers/pattern_compilers/runner.rb +0 -0
- data/lib/origen_testers/pattern_compilers/templates/template.aiv.erb +0 -0
- data/lib/origen_testers/pattern_compilers/ultraflex.rb +0 -0
- data/lib/origen_testers/pattern_compilers/v93k.rb +0 -0
- data/lib/origen_testers/pattern_compilers/v93k/digcap.rb +13 -8
- data/lib/origen_testers/pattern_compilers/v93k/multiport.rb +0 -0
- data/lib/origen_testers/program_generators.rb +0 -0
- data/lib/origen_testers/smartest_based_tester.rb +2 -0
- data/lib/origen_testers/smartest_based_tester/base.rb +2 -2
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/limits_file.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_bin_names.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_flow_vars.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/decompiler.rb +43 -0
- data/lib/origen_testers/smartest_based_tester/decompiler/avc.rb +76 -0
- data/lib/origen_testers/smartest_based_tester/decompiler/nodes.rb +23 -0
- data/lib/origen_testers/smartest_based_tester/smt7.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/smt8.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/limits_file.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/limits.csv.erb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.tf.erb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k/variables_file.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/flow.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/generator.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/limits_file.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/limits_workbook.rb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/templates/limits.csv.erb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/templates/template.flow.erb +0 -0
- data/lib/origen_testers/smartest_based_tester/v93k_smt8/test_suite.rb +0 -0
- data/lib/origen_testers/stil_based_tester.rb +0 -0
- data/lib/origen_testers/stil_based_tester/base.rb +6 -6
- data/lib/origen_testers/stil_based_tester/d10.rb +0 -0
- data/lib/origen_testers/stil_based_tester/stil.rb +0 -0
- data/lib/origen_testers/test/basic_interface.rb +0 -0
- data/lib/origen_testers/test/block.rb +0 -0
- data/lib/origen_testers/test/complex_timing.rb +22 -0
- data/lib/origen_testers/test/custom_test_interface.rb +0 -0
- data/lib/origen_testers/test/dummy_decompiler.rb +106 -0
- data/lib/origen_testers/test/dut.rb +12 -0
- data/lib/origen_testers/test/dut2.rb +19 -6
- data/lib/origen_testers/test/dut_adv_timing.rb +0 -0
- data/lib/origen_testers/test/empty_dut.rb +12 -0
- data/lib/origen_testers/test/interface.rb +0 -0
- data/lib/origen_testers/test/nvm.rb +0 -0
- data/lib/origen_testers/timing.rb +108 -305
- data/lib/origen_testers/timing/timeset.rb +141 -0
- data/lib/origen_testers/timing/timing_api.rb +307 -0
- data/lib/origen_testers/vector.rb +0 -0
- data/lib/origen_testers/vector_based_tester.rb +0 -0
- data/lib/origen_testers/vector_generator.rb +1 -0
- data/lib/origen_testers/vector_pipeline.rb +0 -0
- data/pattern/bitmap.rb +0 -0
- data/pattern/dc_instr.rb +0 -0
- data/pattern/decompile.rb +4 -0
- data/pattern/delay.rb +0 -0
- data/pattern/freq_counter.rb +0 -0
- data/pattern/mem_test.rb +0 -0
- data/pattern/multi_vector.rb +0 -0
- data/pattern/multi_vector_plus1.rb +0 -0
- data/pattern/nvm/j750/add_late_pins.rb +0 -0
- data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +0 -0
- data/pattern/nvm/j750/iterator_test_x_bx.rb +0 -0
- data/pattern/nvm/j750/j750_halt.rb +0 -0
- data/pattern/nvm/j750/j750_workout.rb +0 -0
- data/pattern/nvm/j750/timing.rb +4 -4
- data/pattern/nvm/v93k/v93k_workout.rb +0 -0
- data/pattern/pin_flip.rb +9 -0
- data/pattern/read_write_reg.rb +0 -0
- data/pattern/reset.rb +0 -0
- data/pattern/simple.rb +4 -0
- data/pattern/single_overlay_store.rb +0 -0
- data/pattern/subroutines.rb +0 -0
- data/pattern/tester_overlay.rb +0 -0
- data/pattern/tester_store.rb +0 -0
- data/program/_additional_erase.rb +0 -0
- data/program/_efa_resources.rb +0 -0
- data/program/_erase.rb +0 -0
- data/program/_erase_vfy.rb +0 -0
- data/program/_iv_resources.rb +0 -0
- data/program/basic_interface.rb +0 -0
- data/program/components/_deep_nested.rb +0 -0
- data/program/components/_prb2_main.rb +0 -0
- data/program/components/_small.rb +0 -0
- data/program/components/_temp.rb +0 -0
- data/program/custom_tests.rb +0 -0
- data/program/flow_control.rb +0 -0
- data/program/prb1.rb +0 -0
- data/program/prb1_resources.rb +0 -0
- data/program/prb2.rb +0 -0
- data/program/test.rb +0 -0
- data/templates/example.txt.erb +0 -0
- data/templates/j750/_vt_flow.txt.erb +0 -0
- data/templates/j750/_vt_instances.txt.erb +0 -0
- data/templates/j750/program_sheet.txt.erb +0 -0
- data/templates/manifest/v93k.yaml.erb +0 -0
- data/templates/origen_guides/decompilation/decompilerapi.md.erb +192 -0
- data/templates/origen_guides/decompilation/overview.md.erb +214 -0
- data/templates/origen_guides/decompilation/platformspecifics.md.erb +291 -0
- data/templates/origen_guides/decompilation/universalapi.md.erb +598 -0
- data/templates/origen_guides/pattern/common.md.erb +0 -0
- data/templates/origen_guides/pattern/creating.md.erb +0 -0
- data/templates/origen_guides/pattern/custom.md.erb +0 -0
- data/templates/origen_guides/pattern/documenting.md.erb +0 -0
- data/templates/origen_guides/pattern/introduction.md.erb +0 -0
- data/templates/origen_guides/pattern/j750.md.erb +0 -0
- data/templates/origen_guides/pattern/name.md.erb +0 -0
- data/templates/origen_guides/pattern/pins.md.erb +0 -0
- data/templates/origen_guides/pattern/registers.md.erb +0 -0
- data/templates/origen_guides/pattern/running.md.erb +0 -0
- data/templates/origen_guides/pattern/stil.md.erb +0 -0
- data/templates/origen_guides/pattern/timing.md.erb +205 -2
- data/templates/origen_guides/pattern/ultraflex.md.erb +0 -0
- data/templates/origen_guides/pattern/v93k.md.erb +0 -0
- data/templates/origen_guides/program/code.md.erb +0 -0
- data/templates/origen_guides/program/custom.md.erb +0 -0
- data/templates/origen_guides/program/doc.md.erb +0 -0
- data/templates/origen_guides/program/flowapi.md.erb +0 -0
- data/templates/origen_guides/program/flows.md.erb +0 -0
- data/templates/origen_guides/program/generating.md.erb +0 -0
- data/templates/origen_guides/program/interface.md.erb +0 -0
- data/templates/origen_guides/program/introduction.md.erb +0 -0
- data/templates/origen_guides/program/j750.md.erb +0 -0
- data/templates/origen_guides/program/philosophy.md.erb +0 -0
- data/templates/origen_guides/program/resources.md.erb +0 -0
- data/templates/origen_guides/program/ultraflex.md.erb +0 -0
- data/templates/origen_guides/program/v93k.md.erb +0 -0
- data/templates/origen_guides/program/v93ksmt7.md.erb +0 -0
- data/templates/origen_guides/program/v93ksmt8.md.erb +0 -0
- data/templates/web/index.md.erb +0 -0
- data/templates/web/layouts/_basic.html.erb +0 -0
- data/templates/web/layouts/_guides.html.erb +0 -0
- data/templates/web/partials/_navbar.html.erb +0 -0
- data/templates/web/partials/_placeholder.md.erb +0 -0
- data/templates/web/release_notes.md.erb +0 -0
- metadata +61 -3
@@ -0,0 +1,141 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module Decompiler
|
3
|
+
module Nodes
|
4
|
+
class Node
|
5
|
+
attr_reader :context
|
6
|
+
attr_reader :type
|
7
|
+
|
8
|
+
def self.inherited(subclass)
|
9
|
+
if subclass.const_defined?(:PLATFORM_NODES)
|
10
|
+
subclass.const_get(:PLATFORM_NODES).each do |n|
|
11
|
+
subclass.define_instance_method(n) do
|
12
|
+
instance_variable_get(":@#{n}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(context:, type:, **nodes)
|
19
|
+
@context = context
|
20
|
+
if type
|
21
|
+
@type = type
|
22
|
+
elsif @type.nil?
|
23
|
+
type = self.class.underscore
|
24
|
+
end
|
25
|
+
|
26
|
+
unless platform_nodes.empty?
|
27
|
+
platform_nodes.each do |n|
|
28
|
+
define_singleton_method(n) do
|
29
|
+
instance_variable_get("@#{n}".to_sym)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def execute?
|
36
|
+
@execute
|
37
|
+
end
|
38
|
+
|
39
|
+
def platform_nodes
|
40
|
+
self.class.const_defined?(:PLATFORM_NODES) ? self.class.const_get(:PLATFORM_NODES) : []
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class CommentBlock < OrigenTesters::Decompiler::Nodes::Node
|
45
|
+
attr_reader :comments
|
46
|
+
|
47
|
+
def initialize(comments:, context:)
|
48
|
+
@comments = comments
|
49
|
+
super(context: context, type: :comment_block)
|
50
|
+
end
|
51
|
+
|
52
|
+
def execute?
|
53
|
+
true
|
54
|
+
end
|
55
|
+
|
56
|
+
def execute!(context)
|
57
|
+
@comments.each { |c| cc(c) }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class Vector < OrigenTesters::Decompiler::Nodes::Node
|
62
|
+
attr_reader :repeat
|
63
|
+
attr_reader :timeset
|
64
|
+
attr_reader :pin_states
|
65
|
+
attr_reader :comment
|
66
|
+
|
67
|
+
# rubocop:disable Metrics/ParameterLists
|
68
|
+
def initialize(repeat:, timeset:, pin_states:, comment:, context:, **nodes)
|
69
|
+
@execute = true
|
70
|
+
|
71
|
+
@repeat = repeat
|
72
|
+
@timeset = timeset
|
73
|
+
@pin_states = pin_states
|
74
|
+
@comment = comment
|
75
|
+
|
76
|
+
super(context: context, type: :vector)
|
77
|
+
end
|
78
|
+
# rubocop:enable Metrics/ParameterLists
|
79
|
+
|
80
|
+
def execute!(context)
|
81
|
+
# Apply a timeset switch, if needed.
|
82
|
+
unless Origen.tester.timeset.name == timeset
|
83
|
+
Origen.tester.set_timeset(timeset)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Apply the comment
|
87
|
+
unless comment.empty?
|
88
|
+
cc(comment)
|
89
|
+
end
|
90
|
+
|
91
|
+
# Apply the pin states
|
92
|
+
context.pinlist.each_with_index do |pin, i|
|
93
|
+
dut.pins(pin).vector_formatted_value = pin_states[i]
|
94
|
+
end
|
95
|
+
|
96
|
+
# Cycle the tester
|
97
|
+
repeat.cycles
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class Pinlist < OrigenTesters::Decompiler::Nodes::Node
|
102
|
+
attr_reader :pins
|
103
|
+
alias_method :pinlist, :pins
|
104
|
+
|
105
|
+
def initialize(pins:, context:)
|
106
|
+
@pins = pins.map(&:to_sym)
|
107
|
+
super(context: context, type: :pinlist)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
class Frontmatter < OrigenTesters::Decompiler::Nodes::Node
|
112
|
+
attr_reader :comments
|
113
|
+
attr_reader :pattern_header
|
114
|
+
|
115
|
+
alias_method :header, :pattern_header
|
116
|
+
alias_method :comment_header, :pattern_header
|
117
|
+
|
118
|
+
def initialize(pattern_header: nil, comments: nil, context:)
|
119
|
+
@pattern_header = pattern_header
|
120
|
+
@comments = comments || []
|
121
|
+
|
122
|
+
super(context: context, type: :frontmatter)
|
123
|
+
end
|
124
|
+
|
125
|
+
def execute!(context)
|
126
|
+
pattern_header.each do |c|
|
127
|
+
cc(c)
|
128
|
+
end
|
129
|
+
|
130
|
+
comments.each do |c|
|
131
|
+
cc(c)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def execute?
|
136
|
+
true
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1,304 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module Decompiler
|
3
|
+
require_relative './pattern/elements/base'
|
4
|
+
require_relative './pattern/elements/comment_block'
|
5
|
+
require_relative './pattern/elements/frontmatter'
|
6
|
+
require_relative './pattern/elements/pinlist'
|
7
|
+
require_relative './pattern/elements/vector_body_element'
|
8
|
+
require_relative './pattern/elements/vector'
|
9
|
+
require_relative './pattern/vector_delimiter_base'
|
10
|
+
require_relative './pattern/enumerable_ext'
|
11
|
+
require_relative './pattern/parsers'
|
12
|
+
require_relative './pattern/splitter'
|
13
|
+
require_relative './pattern/spec_helpers'
|
14
|
+
|
15
|
+
class ParseError < Origen::OrigenError
|
16
|
+
end
|
17
|
+
|
18
|
+
class SubclassError < Origen::OrigenError
|
19
|
+
end
|
20
|
+
|
21
|
+
class NoFirstVectorAvailable < Origen::OrigenError
|
22
|
+
end
|
23
|
+
|
24
|
+
class NoSuchSource < Origen::OrigenError
|
25
|
+
end
|
26
|
+
|
27
|
+
class NoSuitableDecompiler < Origen::OrigenError
|
28
|
+
end
|
29
|
+
|
30
|
+
class NoMethodError < Origen::OrigenError
|
31
|
+
end
|
32
|
+
|
33
|
+
class NoAvailableProcessor < Origen::OrigenError
|
34
|
+
end
|
35
|
+
|
36
|
+
class Pattern
|
37
|
+
class << self
|
38
|
+
attr_reader :splitter_config
|
39
|
+
attr_reader :parser_config
|
40
|
+
attr_reader :platform_tokens
|
41
|
+
attr_reader :platform
|
42
|
+
attr_reader :no_verify
|
43
|
+
end
|
44
|
+
|
45
|
+
attr_reader :source
|
46
|
+
attr_reader :decompiled
|
47
|
+
attr_reader :direct_source
|
48
|
+
|
49
|
+
include Splitter
|
50
|
+
include Parsers
|
51
|
+
include EnumerableExt
|
52
|
+
include SpecHelpers
|
53
|
+
|
54
|
+
def initialize(source, direct_source: false, no_verify: false)
|
55
|
+
if source.is_a?(File)
|
56
|
+
source = source.path
|
57
|
+
end
|
58
|
+
|
59
|
+
if direct_source
|
60
|
+
@source = source
|
61
|
+
@direct_source = true
|
62
|
+
else
|
63
|
+
@source = Pathname(source)
|
64
|
+
unless @source.exist?
|
65
|
+
message = "Cannot find pattern source '#{@source}'"
|
66
|
+
Origen.log.error(message)
|
67
|
+
Origen.app!.fail(exception_class: OrigenTesters::Decompiler::NoSuchSource, message: message)
|
68
|
+
end
|
69
|
+
@direct_source = false
|
70
|
+
end
|
71
|
+
@decompiled = false
|
72
|
+
|
73
|
+
unless no_verify || self.class.no_verify
|
74
|
+
verify_subclass_configuration
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def platform
|
79
|
+
self.class.platform
|
80
|
+
end
|
81
|
+
alias_method :tester, :platform
|
82
|
+
|
83
|
+
def platform?(p = nil)
|
84
|
+
if p
|
85
|
+
platform == p
|
86
|
+
else
|
87
|
+
platform == tester.name.to_s
|
88
|
+
end
|
89
|
+
end
|
90
|
+
alias_method :tester?, :platform?
|
91
|
+
|
92
|
+
def decompiler
|
93
|
+
self.class
|
94
|
+
end
|
95
|
+
|
96
|
+
def decompiler?(d)
|
97
|
+
decompiler == d
|
98
|
+
end
|
99
|
+
|
100
|
+
def parser_config
|
101
|
+
self.class.parser_config || {}
|
102
|
+
end
|
103
|
+
|
104
|
+
def platform_tokens
|
105
|
+
self.class.platform_tokens
|
106
|
+
end
|
107
|
+
alias_method :decompiler_tokens, :platform_tokens
|
108
|
+
|
109
|
+
def comment_start
|
110
|
+
self.class.platform_tokens[:comment_start]
|
111
|
+
end
|
112
|
+
alias_method :comment_token, :comment_start
|
113
|
+
|
114
|
+
def splitter_config
|
115
|
+
self.class.splitter_config
|
116
|
+
end
|
117
|
+
|
118
|
+
def method_parse_frontmatter
|
119
|
+
if self.class.respond_to?(:parse_frontmatter)
|
120
|
+
self.class.method(:parse_frontmatter)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def method_parse_pinlist
|
125
|
+
if self.class.respond_to?(:parse_pinlist)
|
126
|
+
self.class.method(:parse_pinlist)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def method_parse_vector
|
131
|
+
if self.class.respond_to?(:parse_vector)
|
132
|
+
self.class.method(:parse_vector)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def verify_subclass_configuration
|
137
|
+
if method_parse_frontmatter.nil?
|
138
|
+
subclass_error('Missing class method #parse_frontmatter')
|
139
|
+
elsif method_parse_pinlist.nil?
|
140
|
+
subclass_error('Missing class method #parse_pinlist')
|
141
|
+
elsif method_parse_vector.nil?
|
142
|
+
subclass_error('Missing class method #parse_vector')
|
143
|
+
elsif splitter_config.nil?
|
144
|
+
subclass_error('Missing class variable :splitter_config')
|
145
|
+
elsif !(Splitter::REQUIRED_KEYS - splitter_config.keys).empty?
|
146
|
+
subclass_error("Splitter config is missing required keys: #{(Splitter::REQUIRED_KEYS - splitter_config.keys).map { |k| ':' + k.to_s }.join(', ')}")
|
147
|
+
elsif !(splitter_config.keys - Splitter::REQUIRED_KEYS - Splitter::OPTIONAL_KEYS).empty?
|
148
|
+
subclass_error("Splitter config contains extra keys: #{(splitter_config.keys - Splitter::REQUIRED_KEYS - Splitter::OPTIONAL_KEYS).map { |k| ':' + k.to_s }.join(', ')}")
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def subclass_error(message)
|
153
|
+
Origen.log.error("#{self.class.name} failed to subclasss OrigenTesters::DecompilerPattern: #{message}")
|
154
|
+
fail(SubclassError, "#{self.class.name} failed to subclasss OrigenTesters::DecompilerPattern: #{message}")
|
155
|
+
end
|
156
|
+
|
157
|
+
def decompiled?
|
158
|
+
@decompiled
|
159
|
+
end
|
160
|
+
|
161
|
+
def direct_source?
|
162
|
+
@direct_source
|
163
|
+
end
|
164
|
+
|
165
|
+
def first_vector
|
166
|
+
@first_vector || begin
|
167
|
+
each_vector do |v|
|
168
|
+
if v.vector?
|
169
|
+
@first_vector = v.element
|
170
|
+
break
|
171
|
+
end
|
172
|
+
end
|
173
|
+
if @first_vector.nil?
|
174
|
+
fail OrigenTesters::Decompiler::ParseError, "Could not locate the first vector in pattern #{@source}"
|
175
|
+
end
|
176
|
+
@first_vector
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def first_timeset
|
181
|
+
first_vector.timeset
|
182
|
+
end
|
183
|
+
alias_method :initial_timeset, :first_timeset
|
184
|
+
|
185
|
+
def first_pin_states_mapped
|
186
|
+
pins.each.with_index.with_object({}) do |(pin, i), hash|
|
187
|
+
hash[pin] = initial_pin_states[i]
|
188
|
+
end
|
189
|
+
end
|
190
|
+
alias_method :initial_pin_states_mapped, :first_pin_states_mapped
|
191
|
+
|
192
|
+
def first_pin_states
|
193
|
+
first_vector.pin_states
|
194
|
+
end
|
195
|
+
alias_method :initial_pin_states, :first_pin_states
|
196
|
+
|
197
|
+
def pinlist_size
|
198
|
+
pinlist.pins.size
|
199
|
+
end
|
200
|
+
alias_method :num_pins, :pinlist_size
|
201
|
+
alias_method :number_of_pins, :pinlist_size
|
202
|
+
|
203
|
+
def pins
|
204
|
+
pinlist.pins
|
205
|
+
end
|
206
|
+
|
207
|
+
def decompile(options = {})
|
208
|
+
# Read the pattern and split it into sections then parse and store the
|
209
|
+
# frontmatter and pinlist models
|
210
|
+
split!
|
211
|
+
@frontmatter = _parse_frontmatter_
|
212
|
+
@pinlist = _parse_pinlist_
|
213
|
+
|
214
|
+
@decompiled = true
|
215
|
+
self
|
216
|
+
end
|
217
|
+
|
218
|
+
def frontmatter
|
219
|
+
@frontmatter
|
220
|
+
end
|
221
|
+
|
222
|
+
def pinlist
|
223
|
+
@pinlist
|
224
|
+
end
|
225
|
+
|
226
|
+
def vectors
|
227
|
+
@vector_handler ||= vector_start
|
228
|
+
end
|
229
|
+
|
230
|
+
def current_vector_index
|
231
|
+
@current_vector_index
|
232
|
+
end
|
233
|
+
|
234
|
+
# Resolves the size of each pin in the pinlist using the initial pin states.
|
235
|
+
# @return [Hash] Hash wherein the keys are the pin names and each value is
|
236
|
+
# the corresponding size.
|
237
|
+
def pin_sizes
|
238
|
+
# initial_pin_states.map { |pin, state| state.size }
|
239
|
+
initial_pin_states_mapped.map { |pin, state| [pin, state.size] }.to_h
|
240
|
+
# pins.each.with_index.with_object({}) do |(pin, i), hash|
|
241
|
+
# hash[pin] = initial_pin_states[i].size
|
242
|
+
# end
|
243
|
+
end
|
244
|
+
|
245
|
+
def first_vector?
|
246
|
+
first_vector
|
247
|
+
rescue OrigenTesters::Decompiler::ParseError
|
248
|
+
return false
|
249
|
+
end
|
250
|
+
|
251
|
+
# Adds any pins in the decompiled pattern to the DUT which are not already present.
|
252
|
+
# @return [Array] Any pin names that were added to the DUT.
|
253
|
+
def add_pins
|
254
|
+
# pin_sizes = pat_model.pattern_model.pin_sizes
|
255
|
+
# pat_model.pinlist.each_with_index do |(name, pin), i|
|
256
|
+
# dut.add_pin(name, size: pin_sizes[i]) unless dut.has_pin?(name)
|
257
|
+
# end
|
258
|
+
retn = []
|
259
|
+
if first_vector?
|
260
|
+
pin_sizes.each do |pin, size|
|
261
|
+
unless dut.has_pin?(pin)
|
262
|
+
dut.add_pin(pin, size: size)
|
263
|
+
retn << pin
|
264
|
+
end
|
265
|
+
end
|
266
|
+
else
|
267
|
+
fail(NoFirstVectorAvailable, "No first vector available for pattern '#{source}'. Cannot add pins to the DUT '#{dut.class.name}'")
|
268
|
+
end
|
269
|
+
retn
|
270
|
+
end
|
271
|
+
|
272
|
+
# @note <code>line</code> is this context is delimited by the given separator.
|
273
|
+
# This may or may not be a true newline-delimited, line.
|
274
|
+
# def number_of_lines
|
275
|
+
# fail
|
276
|
+
# end
|
277
|
+
|
278
|
+
# Executing a pattern consist of:
|
279
|
+
# 1. Doing some initial setup (timesets, initial pin states, etc.)
|
280
|
+
# 2. Executing anything that can be executed in the frontmatter
|
281
|
+
# 3. Executing the vectors 1-by-1.
|
282
|
+
def execute(options = {})
|
283
|
+
if Origen.tester.timeset.nil?
|
284
|
+
if first_vector?
|
285
|
+
Origen.tester.set_timeset(first_timeset, 40)
|
286
|
+
else
|
287
|
+
Origen.log.error 'No first vector available and the timeset has not already been set!'
|
288
|
+
Origen.log.error 'Please set the timeset yourself prior to calling #execute! in a pattern that does not contain a first vector.'
|
289
|
+
fail(NoFirstVectorAvailable, "No first vector available for pattern '#{source}'. Cannot set a timeset to execute the pattern.")
|
290
|
+
end
|
291
|
+
end
|
292
|
+
frontmatter.execute!
|
293
|
+
each_vector_with_index do |vec, i|
|
294
|
+
if Origen.debug?
|
295
|
+
Origen.log.info("OrigenTesters: Executing Vector #{i}")
|
296
|
+
end
|
297
|
+
vec.execute!
|
298
|
+
end
|
299
|
+
|
300
|
+
self
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|
304
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module Decompiler
|
3
|
+
class Pattern
|
4
|
+
class Base
|
5
|
+
attr_reader :context
|
6
|
+
alias_method :decompiled_pattern, :context
|
7
|
+
|
8
|
+
attr_reader :node
|
9
|
+
alias_method :processor, :node
|
10
|
+
|
11
|
+
def initialize(node:, context:, **options)
|
12
|
+
@context = context
|
13
|
+
@node = node
|
14
|
+
end
|
15
|
+
|
16
|
+
def [](node)
|
17
|
+
node.find(node)
|
18
|
+
end
|
19
|
+
|
20
|
+
def platform_nodes
|
21
|
+
node.platform_nodes
|
22
|
+
end
|
23
|
+
|
24
|
+
def method_missing(m, *args, &block)
|
25
|
+
if platform_nodes.include?(m) || node.respond_to?(m)
|
26
|
+
node.send(m)
|
27
|
+
else
|
28
|
+
super
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def execute!
|
33
|
+
if node.execute?
|
34
|
+
node.execute!(self)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def pinlist
|
39
|
+
decompiled_pattern.pinlist.pinlist
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|