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 Timing
|
3
|
+
class InvalidModification < Origen::OrigenError
|
4
|
+
end
|
5
|
+
|
6
|
+
class Timeset
|
7
|
+
attr_accessor :name, :cycled, :called
|
8
|
+
attr_reader :period_in_ns
|
9
|
+
|
10
|
+
def initialize(attrs = {})
|
11
|
+
@cycled = false
|
12
|
+
@locked = false
|
13
|
+
@called = false
|
14
|
+
|
15
|
+
attrs.each do |name, value|
|
16
|
+
send("#{name}=", value)
|
17
|
+
end
|
18
|
+
|
19
|
+
self.period_in_ns = attrs[:period_in_ns]
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns true if the timeset has a shorter period than the supplied timeset
|
23
|
+
def shorter_period_than?(timeset)
|
24
|
+
period_in_ns < timeset.period_in_ns
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns true if <code>tester.cycle</code> has been called while this
|
28
|
+
# timeset was the current timeset.
|
29
|
+
# @return [true, false] <code>true</code> if this timeset has been cycled, <code>false</code> otherwise.
|
30
|
+
def cycled?
|
31
|
+
@cycled
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns true if this timeset does not allow changes to its period_in_ns
|
35
|
+
def locked?
|
36
|
+
@locked
|
37
|
+
end
|
38
|
+
alias_method :period_in_ns_locked?, :locked?
|
39
|
+
alias_method :period_locked?, :locked?
|
40
|
+
alias_method :locked, :locked?
|
41
|
+
|
42
|
+
# Locks the current value of the timeset's period_in_ns. Attempts to further
|
43
|
+
# adjust the period_in_ns will results in an exception.
|
44
|
+
# @return [true, false] <code>true</code> if the period_in_ns has been locked, <code>false</code> otherwise.
|
45
|
+
def lock!
|
46
|
+
@locked = true
|
47
|
+
end
|
48
|
+
alias_method :lock_period!, :lock!
|
49
|
+
alias_method :lock_period_in_ns!, :lock!
|
50
|
+
|
51
|
+
# Sets the period_in_ns of this timeset and issues a callback to the <code>tester's #set_timeset</code>
|
52
|
+
# method, if this timeset is the current timeset, keeping the tester in
|
53
|
+
# sync with the changes to this timeset.
|
54
|
+
# @raise [InvalidModification] If the timeset is locked.
|
55
|
+
# @raise [InvalidModification] If period_in_ns is changed after the tester has been cycled using this timeset.
|
56
|
+
# @return [Fixnum] The updated period in ns.
|
57
|
+
def period_in_ns=(p)
|
58
|
+
self._period_in_ns_ = p
|
59
|
+
|
60
|
+
# If this is the current timeset, reset the timeset from the tester
|
61
|
+
# side to verify that everything is in sync. Otherwise, the period_in_ns
|
62
|
+
# here may not match what the tester/DUT has.
|
63
|
+
if current_timeset?
|
64
|
+
OrigenTesters::Timing.set_timeset(name, p)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Return the period
|
68
|
+
p
|
69
|
+
end
|
70
|
+
|
71
|
+
# Indicates whether a period_in_ns has been defined for this timeset.
|
72
|
+
# @return [true, false] <code>true</code> if the period_in_ns has been set, <code>false</code> otherwise.
|
73
|
+
def period_in_ns?
|
74
|
+
!@period_in_ns.nil?
|
75
|
+
end
|
76
|
+
|
77
|
+
# Returns the current timeset in seconds
|
78
|
+
# @return [Float] Current period in seconds
|
79
|
+
def period_in_secs
|
80
|
+
if period_in_ns
|
81
|
+
period_in_ns * (10**-9)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
alias_method :period_in_seconds, :period_in_secs
|
85
|
+
|
86
|
+
# Indicates whether this timeset is the current timeset.
|
87
|
+
# @return [true, false] <code>true</code> if this timeset is the current timeset, <code>false</code> otherwise.
|
88
|
+
def current_timeset?
|
89
|
+
OrigenTesters::Timing.timeset == self
|
90
|
+
end
|
91
|
+
|
92
|
+
# Indicates whether this timeset is or has been set as the current timeset.
|
93
|
+
# @return [true, false] <code>true</code> if this timeset is or has beent he current timeset, <code>false</code> otherwise.
|
94
|
+
def called?
|
95
|
+
@called
|
96
|
+
end
|
97
|
+
|
98
|
+
# Alias for the {#name} attr_reader.
|
99
|
+
def id
|
100
|
+
name.to_sym
|
101
|
+
end
|
102
|
+
|
103
|
+
def dut_timeset
|
104
|
+
dut.timesets[id]
|
105
|
+
end
|
106
|
+
|
107
|
+
def method_missing(m, *args, &block)
|
108
|
+
if dut_timeset && (dut_timeset.methods.include?(m) || dut_timeset.private_methods.include?(m))
|
109
|
+
dut_timeset.send(m, *args, &block)
|
110
|
+
else
|
111
|
+
super
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# @api private
|
116
|
+
def _period_in_ns_=(p)
|
117
|
+
if locked?
|
118
|
+
Origen.app.fail(
|
119
|
+
exception_class: InvalidModification,
|
120
|
+
message: "Timeset :#{@name}'s period_in_ns is locked to #{@period_in_ns} ns!"
|
121
|
+
)
|
122
|
+
end
|
123
|
+
|
124
|
+
# Adding this causes examples in Origen (not OrigenTesters) to fail.
|
125
|
+
# Needs further discussion and potentially an Origen examples change.
|
126
|
+
# if cycled? && p != period_in_ns
|
127
|
+
# Origen.app!.fail(
|
128
|
+
# exception_class: InvalidModification,
|
129
|
+
# message: [
|
130
|
+
# "Timeset :#{name}'s period_in_ns cannot be changed after a cycle has occurred using this timeset!",
|
131
|
+
# " period_in_ns change occurred at #{caller[0]}",
|
132
|
+
# " Attempted to change period from #{@period_in_ns} to #{p}"
|
133
|
+
# ].join("\n")
|
134
|
+
# )
|
135
|
+
# end
|
136
|
+
@period_in_ns = p
|
137
|
+
@period_in_ns
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1,307 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module Timing
|
3
|
+
module TimingAPI
|
4
|
+
# @see Timing#level_period
|
5
|
+
#
|
6
|
+
# When period levelling is enabled, vectors will be expanded like this:
|
7
|
+
# $tester.set_timeset("fast", 40)
|
8
|
+
# 2.cycles # fast 1 0 0 1 0
|
9
|
+
# # fast 1 0 0 1 0
|
10
|
+
# # Without levelling enabled
|
11
|
+
# $tester.set_timeset("slow", 80)
|
12
|
+
# 2.cycles # slow 1 0 0 1 0
|
13
|
+
# # slow 1 0 0 1 0
|
14
|
+
# # With levelling enabled
|
15
|
+
# $tester.set_timeset("slow", 80)
|
16
|
+
# 2.cycles # fast 1 0 0 1 0
|
17
|
+
# # fast 1 0 0 1 0
|
18
|
+
# # fast 1 0 0 1 0
|
19
|
+
# # fast 1 0 0 1 0
|
20
|
+
#
|
21
|
+
# The overall time of the levelled/expanded vectors matches that of the unlevelled
|
22
|
+
# case. i.e. 4 cycles at fast speed (4 * 40ns = 160ns) is equivalent to 2 cycles
|
23
|
+
# at slow speed (2 * 80ns = 160ns).
|
24
|
+
#
|
25
|
+
# However, what if pin 1 in the example above was a clk pin where the 1 -> 0 transition
|
26
|
+
# was handled by the timing setup for that pin.
|
27
|
+
# In that case the levelled code is no longer functionally correct since it contains
|
28
|
+
# 4 clock pulses while the unlevelled code only has 2.
|
29
|
+
#
|
30
|
+
# Such pins can be specified via this attribute and the levelling logic will then
|
31
|
+
# automatically adjust the drive state to keep the number of pulses correct.
|
32
|
+
# It would automatically adjust to the alternative logic state where 0 means 'on'
|
33
|
+
# and 1 means 'off' if applicable.
|
34
|
+
#
|
35
|
+
# $tester.timing_toggled_pins << $dut.pin(:tclk) # This is pin 1
|
36
|
+
#
|
37
|
+
# $tester.set_timeset("fast", 40)
|
38
|
+
# 2.cycles # fast 1 0 0 1 0
|
39
|
+
# # fast 1 0 0 1 0
|
40
|
+
# # Without levelling enabled
|
41
|
+
# $tester.set_timeset("slow", 80)
|
42
|
+
# 2.cycles # slow 1 0 0 1 0
|
43
|
+
# # slow 1 0 0 1 0
|
44
|
+
# # With levelling enabled
|
45
|
+
# $tester.set_timeset("slow", 80)
|
46
|
+
# 2.cycles # fast 1 0 0 1 0
|
47
|
+
# # fast 0 0 0 1 0
|
48
|
+
# # fast 1 0 0 1 0
|
49
|
+
# # fast 0 0 0 1 0
|
50
|
+
#
|
51
|
+
# Multiple pins an be specified like this:
|
52
|
+
# $tester.timing_toggled_pins = [$dut.pin(:tclk), $dut.pin(:clk)] # Overrides any pins added elsewhere
|
53
|
+
# $tester.timing_toggled_pins << [$dut.pin(:tclk), $dut.pin(:clk)] # In addition to any pins added elsewhere
|
54
|
+
def timing_toggled_pins
|
55
|
+
@timing_toggled_pins ||= []
|
56
|
+
@timing_toggled_pins.flatten!
|
57
|
+
@timing_toggled_pins
|
58
|
+
end
|
59
|
+
|
60
|
+
# Set the timeset for the next vectors, this will remain in place until the next
|
61
|
+
# time this is called.
|
62
|
+
#
|
63
|
+
# $tester.set_timeset("bist_25mhz", 40)
|
64
|
+
#
|
65
|
+
# This method also accepts a block in which case the contained vectors will generate
|
66
|
+
# with the supplied timeset and subsequent vectors will return to the previous timeset
|
67
|
+
# automatically.
|
68
|
+
#
|
69
|
+
# $tester.set_timeset("bist_25mhz", 40) do
|
70
|
+
# $tester.cycle
|
71
|
+
# end
|
72
|
+
#
|
73
|
+
# The arguments can also be supplied as a single array, or not at all. In the latter case
|
74
|
+
# the existing timeset will simply be preserved. This is useful if you have timesets that
|
75
|
+
# can be conditionally set based on the target.
|
76
|
+
#
|
77
|
+
# # Target 1
|
78
|
+
# $soc.readout_timeset = ["readout", 120]
|
79
|
+
# # Target 2
|
80
|
+
# $soc.readout_timeset = false
|
81
|
+
#
|
82
|
+
# # This code is compatible with both targets, in the first case the timeset will switch
|
83
|
+
# # over, in the second case the existing timeset will be preserved.
|
84
|
+
# $tester.set_timeset($soc.readout_timeset) do
|
85
|
+
# $tester.cycle
|
86
|
+
# end
|
87
|
+
def set_timeset(timeset, period_in_ns = nil, &block)
|
88
|
+
OrigenTesters::Timing.set_timeset(timeset, period_in_ns, &block)
|
89
|
+
end
|
90
|
+
alias_method :with_timeset, :set_timeset
|
91
|
+
|
92
|
+
def timesets
|
93
|
+
OrigenTesters::Timing.timesets
|
94
|
+
end
|
95
|
+
|
96
|
+
def timeset?(t)
|
97
|
+
OrigenTesters::Timing.timeset?(t)
|
98
|
+
end
|
99
|
+
|
100
|
+
# Returns the timeset (a Timeset object) with the shortest period that has been
|
101
|
+
# encountered so far in the course of generating the current pattern.
|
102
|
+
#
|
103
|
+
# A tester object is re-instantiated at the start of every pattern which will reset
|
104
|
+
# this variable.
|
105
|
+
def min_period_timeset
|
106
|
+
OrigenTesters::Timing.min_period_timeset
|
107
|
+
end
|
108
|
+
|
109
|
+
def before_timeset_change(options = {})
|
110
|
+
end
|
111
|
+
|
112
|
+
# Returns the current period in ns, or nil, if no timeset has been set.
|
113
|
+
def period_in_ns
|
114
|
+
OrigenTesters::Timing.period_in_ns
|
115
|
+
end
|
116
|
+
|
117
|
+
def period_in_secs
|
118
|
+
OrigenTesters::Timing.period_in_ns
|
119
|
+
end
|
120
|
+
alias_method :period_in_seconds, :period_in_secs
|
121
|
+
|
122
|
+
# Cause the pattern to wait.
|
123
|
+
# The following options are available to help you specify the time to wait:
|
124
|
+
# * :cycles - delays specified in raw cycles, the test model is responsible for translating this into a sequence of valid repeat statements
|
125
|
+
# * :time_in_ns - time specified in nano-seconds
|
126
|
+
# * :time_in_us - time specified in micro-seconds
|
127
|
+
# * :time_in_ms - time specified in milli-seconds
|
128
|
+
# * :time_in_s - time specified in seconds
|
129
|
+
# If more than one option is supplied they will get added together to give a final
|
130
|
+
# delay time expressed in cycles.
|
131
|
+
# ==== Examples
|
132
|
+
# $tester.wait(cycles: 100, time_in_ns: 200) # Wait for 100 cycles + 200ns
|
133
|
+
# This method can also be used to trigger a match loop in which case the supplied time
|
134
|
+
# becomes the time out for the match. See the J750#match method for full details of the
|
135
|
+
# available options.
|
136
|
+
# $tester.wait(match: true, state: :high, pin: $dut.pin(:done), time_in_ms: 500)
|
137
|
+
def wait(options = {})
|
138
|
+
options = {
|
139
|
+
cycles: 0,
|
140
|
+
time_in_cycles: 0,
|
141
|
+
time_in_us: 0,
|
142
|
+
time_in_ns: 0,
|
143
|
+
time_in_ms: 0,
|
144
|
+
time_in_s: 0,
|
145
|
+
match: false, # Set to true to invoke a match loop where the supplied delay
|
146
|
+
# will become the timeout duration
|
147
|
+
}.merge(options)
|
148
|
+
|
149
|
+
cycles = 0
|
150
|
+
cycles += options[:cycles] + options[:time_in_cycles]
|
151
|
+
cycles += s_to_cycles(options[:time_in_s])
|
152
|
+
cycles += ms_to_cycles(options[:time_in_ms])
|
153
|
+
cycles += us_to_cycles(options[:time_in_us])
|
154
|
+
cycles += ns_to_cycles(options[:time_in_ns])
|
155
|
+
|
156
|
+
time = cycles * current_period_in_ns # Total delay in ns
|
157
|
+
case
|
158
|
+
when time < 1000 # When less than 1us
|
159
|
+
cc "Wait for #{'a maximum of ' if options[:match]}#{time}ns"
|
160
|
+
when time < 1_000_000 # When less than 1ms
|
161
|
+
cc "Wait for #{'a maximum of ' if options[:match]}#{(time.to_f / 1000).round(1)}us" # Display delay in us
|
162
|
+
when time < 1_000_000_000 # When less than 1s
|
163
|
+
cc "Wait for #{'a maximum of ' if options[:match]}#{(time.to_f / 1_000_000).round(1)}ms"
|
164
|
+
else
|
165
|
+
cc "Wait for #{'a maximum of ' if options[:match]}%.2fs" % (time.to_f / 1_000_000_000)
|
166
|
+
end
|
167
|
+
|
168
|
+
if cycles > 0 # Allow this function to be called with 0 in which case it will just return
|
169
|
+
if options[:match]
|
170
|
+
if block_given?
|
171
|
+
match_block(cycles, options) { yield }
|
172
|
+
else
|
173
|
+
match(options[:pin], options[:state], cycles, options)
|
174
|
+
end
|
175
|
+
else
|
176
|
+
delay(cycles)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
# @see Timing#wait
|
182
|
+
# @api private
|
183
|
+
# This should not be called directly, call via tester#wait
|
184
|
+
def delay(cycles, options = {})
|
185
|
+
(cycles / max_repeat_loop).times do
|
186
|
+
if block_given?
|
187
|
+
yield options.merge(repeat: max_repeat_loop)
|
188
|
+
else
|
189
|
+
cycle(options.merge(repeat: max_repeat_loop))
|
190
|
+
end
|
191
|
+
end
|
192
|
+
if block_given?
|
193
|
+
yield options.merge(repeat: (cycles % max_repeat_loop))
|
194
|
+
else
|
195
|
+
cycle(options.merge(repeat: (cycles % max_repeat_loop)))
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
def max_repeat_loop
|
200
|
+
@max_repeat_loop || 65_535
|
201
|
+
end
|
202
|
+
|
203
|
+
def min_repeat_loop
|
204
|
+
@min_repeat_loop
|
205
|
+
end
|
206
|
+
|
207
|
+
# Returns any timesets that have been called during this execution.
|
208
|
+
# @return [Array] Array of OrigenTesters::Timing::Timeset objects that have been used so far.
|
209
|
+
def called_timesets
|
210
|
+
OrigenTesters::Timing.called_timesets
|
211
|
+
end
|
212
|
+
alias_method :called_timesets_by_instance, :called_timesets
|
213
|
+
|
214
|
+
# Similar to {#called_timesets}, but returns the name of the timesets instead.
|
215
|
+
# @return [Array] Array of names corresponding to the timesets that have been used so far.
|
216
|
+
def called_timesets_by_name
|
217
|
+
OrigenTesters::Timing.called_timesets_by_name
|
218
|
+
end
|
219
|
+
|
220
|
+
def current_period_in_ns
|
221
|
+
OrigenTesters::Timing.current_period_in_ns
|
222
|
+
end
|
223
|
+
alias_method :current_period, :current_period_in_ns
|
224
|
+
alias_method :period, :current_period_in_ns
|
225
|
+
|
226
|
+
def current_timeset
|
227
|
+
OrigenTesters::Timing.current_timeset
|
228
|
+
end
|
229
|
+
alias_method :timeset, :current_timeset
|
230
|
+
|
231
|
+
# Convert the supplied number of cycles to a time, based on the SoC defined cycle period
|
232
|
+
def cycles_to_time(cycles) # :nodoc:
|
233
|
+
(cycles * current_period_in_ns).to_f / 1_000_000_000
|
234
|
+
end
|
235
|
+
|
236
|
+
# This function can be used to generate a clock or some other repeating function
|
237
|
+
# that spans accross a range of vectors.
|
238
|
+
# The period of each cycle and the duration of the sequence are supplied via the following
|
239
|
+
# options:
|
240
|
+
# * :period_in_cycles
|
241
|
+
# * :period_in_ns
|
242
|
+
# * :period_in_us
|
243
|
+
# * :period_in_ms
|
244
|
+
# * :duration_in_cycles
|
245
|
+
# * :duration_in_ns
|
246
|
+
# * :duration_in_us
|
247
|
+
# * :duration_in_ms
|
248
|
+
# If multiple definitions for either option are supplied then they will be added
|
249
|
+
# together.
|
250
|
+
# ==== Example
|
251
|
+
# # Supply a clock pulse on :pinA for 100ms
|
252
|
+
# $tester.count(:period_in_cycles => 10, :duration_in_ms => 100) do
|
253
|
+
# $top.pin(:pinA).drive!(1)
|
254
|
+
# $top.pin(:pinA).drive!(0)
|
255
|
+
# end
|
256
|
+
def count(options = {})
|
257
|
+
options = { period_in_cycles: 0, period_in_ms: 0, period_in_us: 0, period_in_ns: 0,
|
258
|
+
duration_in_cycles: 0, duration_in_ms: 0, duration_in_us: 0, duration_in_ns: 0
|
259
|
+
}.merge(options)
|
260
|
+
|
261
|
+
period_cycles = options[:period_in_cycles] + ms_to_cycles(options[:period_in_ms]) +
|
262
|
+
us_to_cycles(options[:period_in_us]) + ns_to_cycles(options[:period_in_ns])
|
263
|
+
|
264
|
+
duration_cycles = options[:duration_in_cycles] + ms_to_cycles(options[:duration_in_ms]) +
|
265
|
+
us_to_cycles(options[:duration_in_us]) + ns_to_cycles(options[:duration_in_ns])
|
266
|
+
|
267
|
+
total = 0
|
268
|
+
while total < duration_cycles
|
269
|
+
wait(time_in_cycles: period_cycles)
|
270
|
+
yield # Return control back to caller
|
271
|
+
total += period_cycles
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
private
|
276
|
+
|
277
|
+
def s_to_cycles(time) # :nodoc:
|
278
|
+
((time.to_f) * 1000 * 1000 * 1000 / current_period_in_ns).to_int
|
279
|
+
end
|
280
|
+
|
281
|
+
def ms_to_cycles(time) # :nodoc:
|
282
|
+
((time.to_f) * 1000 * 1000 / current_period_in_ns).to_int
|
283
|
+
end
|
284
|
+
|
285
|
+
def us_to_cycles(time) # :nodoc:
|
286
|
+
((time.to_f * 1000) / current_period_in_ns).to_int
|
287
|
+
end
|
288
|
+
|
289
|
+
def ns_to_cycles(time) # :nodoc:
|
290
|
+
(time.to_f / current_period_in_ns).to_int
|
291
|
+
end
|
292
|
+
|
293
|
+
def cycles_to_us(cycles) # :nodoc:
|
294
|
+
((cycles.to_f * current_period_in_ns) / (1000)).ceil
|
295
|
+
end
|
296
|
+
|
297
|
+
def cycles_to_ms(cycles) # :nodoc:
|
298
|
+
((cycles.to_f * current_period_in_ns) / (1000 * 1000)).ceil
|
299
|
+
end
|
300
|
+
|
301
|
+
# Cycles to tenths of a second
|
302
|
+
def cycles_to_ts(cycles) # :nodoc:
|
303
|
+
((cycles.to_f * current_period_in_ns) / (1000 * 1000 * 100)).ceil
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
File without changes
|
File without changes
|