origen 0.0.1 → 0.0.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/bin/ctags +0 -0
- data/bin/origen +165 -1
- data/bin/rgen +2 -0
- data/config/application.rb +141 -0
- data/config/commands.rb +72 -0
- data/config/development.rb +7 -0
- data/config/environment.rb +0 -0
- data/config/rgen.policy +7 -0
- data/config/rubocop/easy.yml +620 -0
- data/config/rubocop/easy_disabled.yml +271 -0
- data/config/rubocop/easy_enabled.yml +731 -0
- data/config/rubocop/strict.yml +620 -0
- data/config/rubocop/strict_disabled.yml +247 -0
- data/config/rubocop/strict_enabled.yml +755 -0
- data/config/users.rb +20 -0
- data/config/version.rb +1 -1
- data/helpers/url.rb +68 -0
- data/lib/c99/doc_interface.rb +56 -0
- data/lib/c99/j750_interface.rb +85 -0
- data/lib/c99/nvm.rb +89 -0
- data/lib/c99/target/mock2.rb +1 -0
- data/lib/c99/target/subdir/mock3.rb +1 -0
- data/lib/option_parser/optparse.rb +12 -0
- data/lib/origen/acronyms.rb +60 -0
- data/lib/origen/application/command_dispatcher.rb +12 -0
- data/lib/origen/application/configuration.rb +206 -0
- data/lib/origen/application/configuration_manager.rb +78 -0
- data/lib/origen/application/deployer.rb +367 -0
- data/lib/origen/application/environment.rb +186 -0
- data/lib/origen/application/lsf.rb +145 -0
- data/lib/origen/application/lsf_manager.rb +657 -0
- data/lib/origen/application/plugins_manager.rb +280 -0
- data/lib/origen/application/release.rb +359 -0
- data/lib/origen/application/runner.rb +246 -0
- data/lib/origen/application/statistics.rb +191 -0
- data/lib/origen/application/target.rb +374 -0
- data/lib/origen/application/version_tracker.rb +59 -0
- data/lib/origen/application/workspace_manager.rb +151 -0
- data/lib/origen/application.rb +746 -0
- data/lib/origen/bugs/bug.rb +36 -0
- data/lib/origen/bugs.rb +45 -0
- data/lib/origen/callbacks.rb +35 -0
- data/lib/origen/chip_mode.rb +118 -0
- data/lib/origen/chip_package.rb +461 -0
- data/lib/origen/client.rb +87 -0
- data/lib/origen/code_generators/actions.rb +258 -0
- data/lib/origen/code_generators/base.rb +57 -0
- data/lib/origen/code_generators/bundler.rb +17 -0
- data/lib/origen/code_generators/gem_setup.rb +49 -0
- data/lib/origen/code_generators/rake.rb +13 -0
- data/lib/origen/code_generators/rspec.rb +12 -0
- data/lib/origen/code_generators/semver.rb +39 -0
- data/lib/origen/code_generators/timever.rb +37 -0
- data/lib/origen/code_generators.rb +111 -0
- data/lib/origen/commands/add.rb +12 -0
- data/lib/origen/commands/compile.rb +62 -0
- data/lib/origen/commands/ctags.rb +9 -0
- data/lib/origen/commands/dispatch.rb +22 -0
- data/lib/origen/commands/environment.rb +11 -0
- data/lib/origen/commands/fetch.rb +63 -0
- data/lib/origen/commands/generate.rb +130 -0
- data/lib/origen/commands/interactive.rb +73 -0
- data/lib/origen/commands/lint.rb +82 -0
- data/lib/origen/commands/lsf.rb +93 -0
- data/lib/origen/commands/merge.rb +55 -0
- data/lib/origen/commands/modifications.rb +12 -0
- data/lib/origen/commands/new.rb +113 -0
- data/lib/origen/commands/plugin.rb +105 -0
- data/lib/origen/commands/program.rb +70 -0
- data/lib/origen/commands/rc.rb +442 -0
- data/lib/origen/commands/save.rb +56 -0
- data/lib/origen/commands/target.rb +27 -0
- data/lib/origen/commands/time.rb +127 -0
- data/lib/origen/commands/version.rb +17 -0
- data/lib/origen/commands/web.rb +221 -0
- data/lib/origen/commands.rb +272 -0
- data/lib/origen/commands_global.rb +76 -0
- data/lib/origen/controller.rb +94 -0
- data/lib/origen/core_ext/array.rb +23 -0
- data/lib/origen/core_ext/bignum.rb +36 -0
- data/lib/origen/core_ext/enumerable.rb +76 -0
- data/lib/origen/core_ext/fixnum.rb +46 -0
- data/lib/origen/core_ext/hash.rb +52 -0
- data/lib/origen/core_ext/module.rb +14 -0
- data/lib/origen/core_ext/numeric.rb +126 -0
- data/lib/origen/core_ext/object.rb +13 -0
- data/lib/origen/core_ext/range.rb +7 -0
- data/lib/origen/core_ext/string.rb +124 -0
- data/lib/origen/core_ext.rb +10 -0
- data/lib/origen/database/key_value_store.rb +111 -0
- data/lib/origen/database/key_value_stores.rb +108 -0
- data/lib/origen/database.rb +6 -0
- data/lib/origen/encodings.rb +102 -0
- data/lib/origen/features/feature.rb +22 -0
- data/lib/origen/features.rb +104 -0
- data/lib/origen/file_handler.rb +429 -0
- data/lib/origen/generator/comparator.rb +56 -0
- data/lib/origen/generator/compiler.rb +277 -0
- data/lib/origen/generator/flow.rb +49 -0
- data/lib/origen/generator/job.rb +131 -0
- data/lib/origen/generator/pattern.rb +356 -0
- data/lib/origen/generator/pattern_finder.rb +155 -0
- data/lib/origen/generator/pattern_iterator.rb +55 -0
- data/lib/origen/generator/renderer.rb +113 -0
- data/lib/origen/generator/resources.rb +40 -0
- data/lib/origen/generator/stage.rb +89 -0
- data/lib/origen/generator.rb +85 -0
- data/lib/origen/global_methods.rb +205 -0
- data/lib/origen/import_manager.rb +596 -0
- data/lib/origen/location/base.rb +116 -0
- data/lib/origen/location/map.rb +83 -0
- data/lib/origen/location.rb +6 -0
- data/lib/origen/log.rb +217 -0
- data/lib/origen/logger_methods.rb +56 -0
- data/lib/origen/mode.rb +61 -0
- data/lib/origen/model.rb +267 -0
- data/lib/origen/model_initializer.rb +45 -0
- data/lib/origen/nvm/block_array.rb +72 -0
- data/lib/origen/nvm.rb +6 -0
- data/lib/origen/parameters/live.rb +22 -0
- data/lib/origen/parameters/missing.rb +28 -0
- data/lib/origen/parameters/set.rb +144 -0
- data/lib/origen/parameters.rb +107 -0
- data/lib/origen/pdm.rb +218 -0
- data/lib/origen/pins/function_proxy.rb +36 -0
- data/lib/origen/pins/ground_pin.rb +6 -0
- data/lib/origen/pins/pin.rb +860 -0
- data/lib/origen/pins/pin_bank.rb +349 -0
- data/lib/origen/pins/pin_clock.rb +124 -0
- data/lib/origen/pins/pin_collection.rb +492 -0
- data/lib/origen/pins/pin_common.rb +206 -0
- data/lib/origen/pins/port.rb +268 -0
- data/lib/origen/pins/power_pin.rb +30 -0
- data/lib/origen/pins.rb +696 -0
- data/lib/origen/registers/bit.rb +562 -0
- data/lib/origen/registers/bit_collection.rb +787 -0
- data/lib/origen/registers/container.rb +288 -0
- data/lib/origen/registers/domain.rb +16 -0
- data/lib/origen/registers/reg.rb +1406 -0
- data/lib/origen/registers/reg_collection.rb +24 -0
- data/lib/origen/registers.rb +652 -0
- data/lib/origen/regression_manager.rb +251 -0
- data/lib/origen/remote_manager.rb +340 -0
- data/lib/origen/revision_control/base.rb +257 -0
- data/lib/origen/revision_control/design_sync.rb +276 -0
- data/lib/origen/revision_control/git.rb +243 -0
- data/lib/origen/revision_control/subversion.rb +6 -0
- data/lib/origen/revision_control.rb +44 -0
- data/lib/origen/ruby_version_check.rb +131 -0
- data/lib/origen/site_config.rb +61 -0
- data/lib/origen/specs/checkers.rb +103 -0
- data/lib/origen/specs/creation_info.rb +17 -0
- data/lib/origen/specs/doc_resource.rb +91 -0
- data/lib/origen/specs/exhibit.rb +17 -0
- data/lib/origen/specs/mode_select.rb +16 -0
- data/lib/origen/specs/note.rb +17 -0
- data/lib/origen/specs/override.rb +21 -0
- data/lib/origen/specs/power_supply.rb +13 -0
- data/lib/origen/specs/spec.rb +226 -0
- data/lib/origen/specs/version_history.rb +14 -0
- data/lib/origen/specs.rb +552 -0
- data/lib/origen/sub_blocks.rb +298 -0
- data/lib/origen/tester/api.rb +277 -0
- data/lib/origen/tester/bdm/bdm.rb +25 -0
- data/lib/origen/tester/command_based_tester.rb +46 -0
- data/lib/origen/tester/doc/doc.rb +226 -0
- data/lib/origen/tester/doc/generator/flow.rb +71 -0
- data/lib/origen/tester/doc/generator/flow_line.rb +203 -0
- data/lib/origen/tester/doc/generator/test.rb +68 -0
- data/lib/origen/tester/doc/generator/test_group.rb +66 -0
- data/lib/origen/tester/doc/generator/tests.rb +47 -0
- data/lib/origen/tester/doc/generator.rb +126 -0
- data/lib/origen/tester/doc/model.rb +162 -0
- data/lib/origen/tester/generator/flow_control_api.rb +606 -0
- data/lib/origen/tester/generator/identity_map.rb +25 -0
- data/lib/origen/tester/generator/placeholder.rb +13 -0
- data/lib/origen/tester/generator/test_numberer.rb +25 -0
- data/lib/origen/tester/generator.rb +271 -0
- data/lib/origen/tester/interface.rb +154 -0
- data/lib/origen/tester/j750/files.rb +45 -0
- data/lib/origen/tester/j750/generator/flow.rb +123 -0
- data/lib/origen/tester/j750/generator/flow_line.rb +288 -0
- data/lib/origen/tester/j750/generator/patgroup.rb +111 -0
- data/lib/origen/tester/j750/generator/patgroups.rb +41 -0
- data/lib/origen/tester/j750/generator/patset.rb +111 -0
- data/lib/origen/tester/j750/generator/patsets.rb +41 -0
- data/lib/origen/tester/j750/generator/templates/flow.txt.erb +9 -0
- data/lib/origen/tester/j750/generator/templates/instances.txt.erb +16 -0
- data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +8 -0
- data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +10 -0
- data/lib/origen/tester/j750/generator/test_instance.rb +846 -0
- data/lib/origen/tester/j750/generator/test_instance_group.rb +60 -0
- data/lib/origen/tester/j750/generator/test_instances.rb +182 -0
- data/lib/origen/tester/j750/generator.rb +203 -0
- data/lib/origen/tester/j750/j750.rb +845 -0
- data/lib/origen/tester/j750/j750_hpt.rb +35 -0
- data/lib/origen/tester/j750/parser/ac_spec.rb +11 -0
- data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
- data/lib/origen/tester/j750/parser/dc_spec.rb +36 -0
- data/lib/origen/tester/j750/parser/dc_specs.rb +50 -0
- data/lib/origen/tester/j750/parser/descriptions.rb +340 -0
- data/lib/origen/tester/j750/parser/flow.rb +111 -0
- data/lib/origen/tester/j750/parser/flow_line.rb +207 -0
- data/lib/origen/tester/j750/parser/flows.rb +23 -0
- data/lib/origen/tester/j750/parser/pattern_set.rb +94 -0
- data/lib/origen/tester/j750/parser/pattern_sets.rb +33 -0
- data/lib/origen/tester/j750/parser/test_instance.rb +322 -0
- data/lib/origen/tester/j750/parser/test_instances.rb +26 -0
- data/lib/origen/tester/j750/parser/timeset.rb +15 -0
- data/lib/origen/tester/j750/parser/timesets.rb +0 -0
- data/lib/origen/tester/j750/parser.rb +104 -0
- data/lib/origen/tester/jlink/jlink.rb +33 -0
- data/lib/origen/tester/parser/description_lookup.rb +64 -0
- data/lib/origen/tester/parser/searchable_array.rb +32 -0
- data/lib/origen/tester/parser/searchable_hash.rb +32 -0
- data/lib/origen/tester/parser.rb +24 -0
- data/lib/origen/tester/time.rb +338 -0
- data/lib/origen/tester/timing.rb +253 -0
- data/lib/origen/tester/ultraflex/files.rb +45 -0
- data/lib/origen/tester/ultraflex/generator/flow.rb +119 -0
- data/lib/origen/tester/ultraflex/generator/flow_line.rb +269 -0
- data/lib/origen/tester/ultraflex/generator/patgroup.rb +111 -0
- data/lib/origen/tester/ultraflex/generator/patgroups.rb +41 -0
- data/lib/origen/tester/ultraflex/generator/patset.rb +111 -0
- data/lib/origen/tester/ultraflex/generator/patsets.rb +41 -0
- data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +9 -0
- data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +16 -0
- data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +8 -0
- data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +10 -0
- data/lib/origen/tester/ultraflex/generator/test_instance.rb +622 -0
- data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +60 -0
- data/lib/origen/tester/ultraflex/generator/test_instances.rb +174 -0
- data/lib/origen/tester/ultraflex/generator.rb +200 -0
- data/lib/origen/tester/ultraflex/parser/ac_spec.rb +11 -0
- data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
- data/lib/origen/tester/ultraflex/parser/dc_spec.rb +36 -0
- data/lib/origen/tester/ultraflex/parser/dc_specs.rb +50 -0
- data/lib/origen/tester/ultraflex/parser/descriptions.rb +342 -0
- data/lib/origen/tester/ultraflex/parser/flow.rb +111 -0
- data/lib/origen/tester/ultraflex/parser/flow_line.rb +207 -0
- data/lib/origen/tester/ultraflex/parser/flows.rb +23 -0
- data/lib/origen/tester/ultraflex/parser/pattern_set.rb +94 -0
- data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +33 -0
- data/lib/origen/tester/ultraflex/parser/test_instance.rb +262 -0
- data/lib/origen/tester/ultraflex/parser/test_instances.rb +26 -0
- data/lib/origen/tester/ultraflex/parser/timeset.rb +15 -0
- data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
- data/lib/origen/tester/ultraflex/parser.rb +104 -0
- data/lib/origen/tester/ultraflex/ultraflex.rb +759 -0
- data/lib/origen/tester/v93k/generator/flow.rb +63 -0
- data/lib/origen/tester/v93k/generator/flow_node/print.rb +10 -0
- data/lib/origen/tester/v93k/generator/flow_node.rb +17 -0
- data/lib/origen/tester/v93k/generator/pattern.rb +16 -0
- data/lib/origen/tester/v93k/generator/pattern_master.rb +54 -0
- data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +6 -0
- data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +11 -0
- data/lib/origen/tester/v93k/generator/templates/template.flow.erb +121 -0
- data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +9 -0
- data/lib/origen/tester/v93k/generator/test_function.rb +103 -0
- data/lib/origen/tester/v93k/generator/test_functions.rb +79 -0
- data/lib/origen/tester/v93k/generator/test_method.rb +46 -0
- data/lib/origen/tester/v93k/generator/test_methods.rb +75 -0
- data/lib/origen/tester/v93k/generator/test_suite.rb +54 -0
- data/lib/origen/tester/v93k/generator/test_suites.rb +65 -0
- data/lib/origen/tester/v93k/generator.rb +80 -0
- data/lib/origen/tester/v93k/v93k.rb +420 -0
- data/lib/origen/tester/vector.rb +86 -0
- data/lib/origen/tester/vector_generator.rb +633 -0
- data/lib/origen/tester/vector_pipeline.rb +150 -0
- data/lib/origen/tester.rb +56 -0
- data/lib/origen/top_level.rb +134 -0
- data/lib/origen/users/ldap.rb +65 -0
- data/lib/origen/users/user.rb +149 -0
- data/lib/origen/users.rb +30 -0
- data/lib/origen/utility/block_args.rb +93 -0
- data/lib/origen/utility/csv_data.rb +110 -0
- data/lib/origen/utility/design_sync.rb +494 -0
- data/lib/origen/utility/diff.rb +158 -0
- data/lib/origen/utility/input_capture.rb +121 -0
- data/lib/origen/utility/mailer.rb +143 -0
- data/lib/origen/utility/s_record.rb +205 -0
- data/lib/origen/utility/time_and_date.rb +30 -0
- data/lib/origen/utility.rb +12 -0
- data/lib/origen/version_checker.rb +117 -0
- data/lib/origen/version_string.rb +356 -0
- data/lib/origen.rb +648 -0
- data/lib/tasks/gem.rake +27 -22
- data/origen_site_config.yml +36 -0
- data/source_setup +17 -0
- data/spec/format/rgen_formatter.rb +14 -0
- data/templates/api_doc/README.txt.erb +24 -0
- data/templates/code_generators/gemfile_app.rb +4 -0
- data/templates/code_generators/gemfile_plugin.rb +6 -0
- data/templates/code_generators/gemspec.rb +33 -0
- data/templates/code_generators/rakefile.rb +10 -0
- data/templates/code_generators/spec_helper.rb +49 -0
- data/templates/code_generators/version.rb +8 -0
- data/templates/code_generators/version_time.rb +3 -0
- data/templates/git/gitignore.erb +33 -0
- data/templates/j750/_vt_flow.txt.erb +8 -0
- data/templates/j750/_vt_instances.txt.erb +4 -0
- data/templates/j750/program_sheet.txt.erb +9 -0
- data/templates/nanoc/Rules +74 -0
- data/templates/nanoc/config.yaml +77 -0
- data/templates/nanoc/content/favicon.ico +0 -0
- data/templates/nanoc/layouts/bootstrap.html.erb +63 -0
- data/templates/nanoc/layouts/bootstrap3.html.erb +71 -0
- data/templates/nanoc/layouts/freescale.html.erb +79 -0
- data/templates/nanoc/lib/bootstrap_filter.rb +49 -0
- data/templates/nanoc/lib/codeblocks_filter.rb +41 -0
- data/templates/nanoc/lib/default.rb +2 -0
- data/templates/nanoc/lib/gzip_filter.rb +16 -0
- data/templates/nanoc/lib/haml_code_filter.rb +41 -0
- data/templates/nanoc/lib/helpers.rb +1 -0
- data/templates/nanoc/lib/search_filter.rb +62 -0
- data/templates/nanoc_dynamic/content/search.js.erb +92 -0
- data/templates/shared/web/_logo.html +10 -0
- data/templates/test/_inline_sub.txt.erb +2 -0
- data/templates/test/environment.txt.erb +1 -0
- data/templates/test/inline.txt.erb +11 -0
- data/templates/test/inspections.txt.erb +19 -0
- data/templates/test/set1/_sub1.txt.erb +12 -0
- data/templates/test/set1/_sub4.txt.erb +1 -0
- data/templates/test/set1/_sub5.txt.erb +1 -0
- data/templates/test/set1/main.txt.erb +53 -0
- data/templates/test/set1/sub_dir/_sub2.txt.erb +20 -0
- data/templates/test/set1/sub_dir/_sub3.txt.erb +12 -0
- data/templates/test/set1/sub_dir/main2.txt.erb +4 -0
- data/templates/test/set2/template_with_no_erb_1.txt +9 -0
- data/templates/test/set2/template_with_no_erb_2.txt +9 -0
- data/templates/test/set3/_layout.html.erb +4 -0
- data/templates/test/set3/content.html.erb +6 -0
- data/templates/time/filter.rb.erb +15 -0
- data/templates/time/rules.rb.erb +45 -0
- metadata +639 -5
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
class Generator
|
|
3
|
+
class Resources
|
|
4
|
+
attr_accessor :top_level
|
|
5
|
+
|
|
6
|
+
def create(options = {}, &block)
|
|
7
|
+
# Refresh the target to start all settings from scratch each time
|
|
8
|
+
# This is an easy way to reset all registered values
|
|
9
|
+
Origen.app.reload_target!
|
|
10
|
+
Origen.tester.generating = :program
|
|
11
|
+
sub_flow = @top_level
|
|
12
|
+
@top_level = true unless @top_level
|
|
13
|
+
job.output_file_body = options.delete(:name).to_s if options[:name]
|
|
14
|
+
if sub_flow
|
|
15
|
+
interface = Origen.interface
|
|
16
|
+
interface.resources_mode do
|
|
17
|
+
opts = Origen.generator.option_pipeline.pop || {}
|
|
18
|
+
interface.instance_exec(opts, &block)
|
|
19
|
+
end
|
|
20
|
+
interface.close(sub_resource: true)
|
|
21
|
+
else
|
|
22
|
+
Origen.log.info "Generating... #{Origen.file_handler.current_file.basename}"
|
|
23
|
+
interface = Origen.reset_interface(options)
|
|
24
|
+
interface.resources_mode do
|
|
25
|
+
interface.instance_eval(&block)
|
|
26
|
+
end
|
|
27
|
+
interface.close
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def reset
|
|
32
|
+
@top_level = false
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def job
|
|
36
|
+
Origen.app.current_job
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
class Generator
|
|
3
|
+
# The stage provides a way to store objects in named banks for later retrieval.
|
|
4
|
+
# This is typically used during pattern generation to generate header, body and
|
|
5
|
+
# footer elements of a pattern in non-sequential order, allowing them to be
|
|
6
|
+
# combined at the end into the logical order.
|
|
7
|
+
class Stage
|
|
8
|
+
def initialize
|
|
9
|
+
@vault = {}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def reset!
|
|
13
|
+
@vault = {}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Returns vectors from the end of the bank
|
|
17
|
+
def last_vector(offset = 0)
|
|
18
|
+
offset = offset.abs
|
|
19
|
+
i = current_bank.size - 1
|
|
20
|
+
while offset >= 0
|
|
21
|
+
return nil if i < 0
|
|
22
|
+
unless current_bank[i].is_a?(String)
|
|
23
|
+
return current_bank[i] if offset == 0
|
|
24
|
+
offset -= 1
|
|
25
|
+
end
|
|
26
|
+
i -= 1
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Same as last_vector except it returns the last objects of any
|
|
31
|
+
# type, not just vectors
|
|
32
|
+
def last_object(offset = 0)
|
|
33
|
+
i = current_bank.size - 1 - offset
|
|
34
|
+
current_bank[i]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Store a new value in the current bank
|
|
38
|
+
def store(obj)
|
|
39
|
+
current_bank.push(obj)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Insert a new object into the current bank X places from the end
|
|
43
|
+
def insert_from_end(obj, x)
|
|
44
|
+
# Ruby insert is a bit un-intuative in that insert(1) will insert something 1 place in from the
|
|
45
|
+
# start, whereas insert(-1) will insert it at the end (0 places in from the end).
|
|
46
|
+
# So the subtraction of 1 here aligns the behavior when inserting from the start or the end.
|
|
47
|
+
current_bank.insert((x * -1) - 1, obj)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Insert a new object into the current bank X places from the start
|
|
51
|
+
def insert_from_start(obj, x)
|
|
52
|
+
current_bank.insert(x, obj)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Pull the last item added to the current bank
|
|
56
|
+
def newest
|
|
57
|
+
current_bank.pop
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Pull the oldest item added to the current bank
|
|
61
|
+
def oldest
|
|
62
|
+
current_bank.shift
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Set the current bank
|
|
66
|
+
def bank=(name)
|
|
67
|
+
@bank = name
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Returns the entire bank, an array
|
|
71
|
+
def bank(name = @bank)
|
|
72
|
+
@vault[name] || []
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def current_bank
|
|
76
|
+
return @vault[@bank] if @vault[@bank]
|
|
77
|
+
@vault[@bank] = []
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Temporarily switches to the given bank
|
|
81
|
+
def with_bank(bank)
|
|
82
|
+
orig_bank = @bank
|
|
83
|
+
@bank = bank
|
|
84
|
+
yield
|
|
85
|
+
@bank = orig_bank
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
class Generator
|
|
3
|
+
autoload :Pattern, 'origen/generator/pattern'
|
|
4
|
+
autoload :Flow, 'origen/generator/flow'
|
|
5
|
+
autoload :Resources, 'origen/generator/resources'
|
|
6
|
+
autoload :Job, 'origen/generator/job'
|
|
7
|
+
autoload :PatternFinder, 'origen/generator/pattern_finder'
|
|
8
|
+
autoload :PatternIterator, 'origen/generator/pattern_iterator'
|
|
9
|
+
autoload :Stage, 'origen/generator/stage'
|
|
10
|
+
autoload :Compiler, 'origen/generator/compiler'
|
|
11
|
+
autoload :Comparator, 'origen/generator/comparator'
|
|
12
|
+
autoload :Renderer, 'origen/generator/renderer'
|
|
13
|
+
|
|
14
|
+
def pattern
|
|
15
|
+
@pattern ||= Pattern.new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def flow
|
|
19
|
+
@flow ||= Flow.new
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def resources
|
|
23
|
+
@resources ||= Resources.new
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def stage
|
|
27
|
+
@stage ||= Stage.new
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def generate_pattern(file, options)
|
|
31
|
+
Job.new(file, options).run
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def generate_program(file, options)
|
|
35
|
+
Origen.file_handler.resolve_files(file, ignore_with_prefix: '_', default_dir: "#{Origen.root}/program") do |path|
|
|
36
|
+
Origen.file_handler.current_file = path
|
|
37
|
+
j = Job.new(path, options)
|
|
38
|
+
j.pattern = path
|
|
39
|
+
j.run
|
|
40
|
+
end
|
|
41
|
+
Origen.interface.write_files(options)
|
|
42
|
+
unless options[:quiet] || Origen.tester.is_a?(Origen::Tester::Doc)
|
|
43
|
+
if options[:referenced_pattern_list]
|
|
44
|
+
file = "#{Origen.root}/list/#{options[:referenced_pattern_list]}"
|
|
45
|
+
else
|
|
46
|
+
file = Origen.config.referenced_pattern_list
|
|
47
|
+
end
|
|
48
|
+
puts "Referenced pattern list written to: #{Pathname.new(file).relative_path_from(Pathname.pwd)}"
|
|
49
|
+
dir = Pathname.new(file).dirname
|
|
50
|
+
FileUtils.mkdir_p(dir) unless dir.exist?
|
|
51
|
+
File.open(file, 'w') do |f|
|
|
52
|
+
Origen.interface.referenced_patterns.uniq.sort.each do |pat|
|
|
53
|
+
f.puts pat
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def compile_file_or_directory(file, options)
|
|
60
|
+
Job.new(file, { compile: true, default_dir: "#{Origen.root}/templates" }.merge(options)).run
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def merge_file_or_directory(file, options)
|
|
64
|
+
Job.new(file, options).run
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def compiler
|
|
68
|
+
@compiler ||= Compiler.new
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def pattern_finder
|
|
72
|
+
@pattern_finder ||= PatternFinder.new
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def create_iterator
|
|
76
|
+
iterator = PatternIterator.new
|
|
77
|
+
Origen.app.pattern_iterators << iterator
|
|
78
|
+
iterator
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def option_pipeline
|
|
82
|
+
@option_pipeline ||= []
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
module GlobalMethods
|
|
3
|
+
require_relative 'encodings'
|
|
4
|
+
# If a new gem (i.e. not part of the existing Ruby installation) is required by Origen or an
|
|
5
|
+
# application then it should be required via this method.
|
|
6
|
+
# On Windows this can be installed automatically and this method will take care of doing
|
|
7
|
+
# that.
|
|
8
|
+
#
|
|
9
|
+
# However due to the restricted user permissions available on Linux this cannot be done
|
|
10
|
+
# automatically and you must ensure that you arrange to have the required gem installed
|
|
11
|
+
# on Linux - contact Stephen McGinty to get this done.
|
|
12
|
+
#
|
|
13
|
+
# A given user will then have to update their local toolset to pick this up and this method
|
|
14
|
+
# will give them the necessary instructions.
|
|
15
|
+
#
|
|
16
|
+
# @example
|
|
17
|
+
#
|
|
18
|
+
# require_gem "rest-client"
|
|
19
|
+
# require_gem "net/ldap", :name => "net-ldap"
|
|
20
|
+
def require_gem(name, options = {})
|
|
21
|
+
Origen.deprecate <<-END
|
|
22
|
+
require_gem will be removed in Origen V3, Bundler should be used to manage gem dependencies
|
|
23
|
+
END
|
|
24
|
+
options = {
|
|
25
|
+
name: name
|
|
26
|
+
}.merge(options)
|
|
27
|
+
name = name.to_s
|
|
28
|
+
options[:name] = options[:name].to_s
|
|
29
|
+
if options[:version] && options[:version] =~ /^v(.*)/
|
|
30
|
+
options[:version] = Regexp.last_match[1]
|
|
31
|
+
end
|
|
32
|
+
# This gem was not included in the initial Origen v2.x.x gemset, so need to handle instalations
|
|
33
|
+
# without it
|
|
34
|
+
begin
|
|
35
|
+
if options[:version]
|
|
36
|
+
gem options[:name], options[:version]
|
|
37
|
+
end
|
|
38
|
+
require name
|
|
39
|
+
rescue LoadError
|
|
40
|
+
if Origen.running_on_windows?
|
|
41
|
+
puts "Installing #{options[:name]}"
|
|
42
|
+
command = "gem install #{options[:name]} --no-rdoc --no-ri"
|
|
43
|
+
command += " --version #{options[:version]}" if options[:version]
|
|
44
|
+
if !system(command)
|
|
45
|
+
puts 'It looks like a problem occurred, ensure you have installed Ruby exactly per the Origen guide'
|
|
46
|
+
else
|
|
47
|
+
puts 'A missing gem has just been installed to your system, please re-run the previous command'
|
|
48
|
+
end
|
|
49
|
+
else
|
|
50
|
+
puts "Installing #{options[:name]}"
|
|
51
|
+
command = "gem install --user-install #{options[:name]} --no-rdoc --no-ri"
|
|
52
|
+
command += " --version #{options[:version]}" if options[:version]
|
|
53
|
+
if !system(command)
|
|
54
|
+
puts 'It looks like there was a problem installing that gem, run the following commands to ensure you have an up to date'
|
|
55
|
+
puts 'environment, then try again:'
|
|
56
|
+
puts ''
|
|
57
|
+
puts " cd #{Origen.top}"
|
|
58
|
+
puts ' source source_setup update'
|
|
59
|
+
puts " cd #{FileUtils.pwd}"
|
|
60
|
+
else
|
|
61
|
+
puts 'A missing gem has just been installed to your system, please re-run the previous command'
|
|
62
|
+
end
|
|
63
|
+
# puts "The current application has required a gem called #{options[:name]}, however that is not available in your current toolset."
|
|
64
|
+
# puts 'This may be solved by following the instructions below, otherwise contact the application owner.'
|
|
65
|
+
# puts ''
|
|
66
|
+
# puts_require_latest_ruby
|
|
67
|
+
end
|
|
68
|
+
exit 1
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def annotate(msg, options = {})
|
|
73
|
+
Origen.app.tester.annotate(msg, options)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def c1(msg, options = {})
|
|
77
|
+
Origen.app.tester.c1(msg, options)
|
|
78
|
+
end
|
|
79
|
+
alias_method :cc, :c1
|
|
80
|
+
|
|
81
|
+
def c2(msg, options = {})
|
|
82
|
+
Origen.app.tester.c2(msg, options)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def ss(*args, &block)
|
|
86
|
+
Origen.app.tester.ss(*args, &block)
|
|
87
|
+
end
|
|
88
|
+
alias_method :step_comment, :ss
|
|
89
|
+
|
|
90
|
+
def pp(*args, &block)
|
|
91
|
+
Origen.app.tester.pattern_section(*args, &block)
|
|
92
|
+
end
|
|
93
|
+
alias_method :pattern_section, :pp
|
|
94
|
+
alias_method :ps, :pp
|
|
95
|
+
|
|
96
|
+
def snip(*args, &block)
|
|
97
|
+
Origen.app.tester.snip(*args, &block)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Render an ERB template
|
|
101
|
+
def render(*args, &block)
|
|
102
|
+
Origen.generator.compiler.render(*args, &block)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# The options passed to an ERB template. Having it
|
|
106
|
+
# global like this is ugly, but it does allow a hash of options
|
|
107
|
+
# to always be available in templates even if the template
|
|
108
|
+
# is being rendered using a custom binding.
|
|
109
|
+
#
|
|
110
|
+
# @api private
|
|
111
|
+
def options
|
|
112
|
+
$_target_options ||
|
|
113
|
+
Origen.generator.compiler.options
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def global_binding
|
|
117
|
+
binding
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def debug(*lines)
|
|
121
|
+
Origen.deprecate 'debug method is deprecated, use Origen.log.debug instead'
|
|
122
|
+
if Origen.debug?
|
|
123
|
+
Origen.log.info ''
|
|
124
|
+
c = caller[0]
|
|
125
|
+
c =~ /(.*):(\d+):.*/
|
|
126
|
+
$_last_log_time ||= Time.now
|
|
127
|
+
delta = Time.now - $_last_log_time
|
|
128
|
+
$_last_log_time = Time.now
|
|
129
|
+
begin
|
|
130
|
+
Origen.log.info "*** Debug *** %.6f #{Regexp.last_match[1]}:#{Regexp.last_match[2]}" % delta
|
|
131
|
+
rescue
|
|
132
|
+
# For this to fail it means the deprecated method was called by IRB or similar
|
|
133
|
+
# and in that case there is no point advising who called anyway
|
|
134
|
+
end
|
|
135
|
+
options = lines.last.is_a?(Hash) ? lines.pop : {}
|
|
136
|
+
lines.flatten.each do |line|
|
|
137
|
+
line.split(/\n/).each do |line|
|
|
138
|
+
Origen.log.info line, options
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
Pattern = Origen.pattern unless defined?(Pattern)
|
|
145
|
+
Flow = Origen.flow unless defined?(Flow)
|
|
146
|
+
Resources = Origen.resources unless defined?(Resources)
|
|
147
|
+
User = Origen::Users::User unless defined?(User)
|
|
148
|
+
|
|
149
|
+
# Returns an Excel column based on an Integer argument
|
|
150
|
+
def get_excel_column(n)
|
|
151
|
+
excel_columns = {}
|
|
152
|
+
@column = 'A'
|
|
153
|
+
(1..75).to_a.each do |i|
|
|
154
|
+
excel_columns[i] = @column
|
|
155
|
+
@column = @column.succ
|
|
156
|
+
end
|
|
157
|
+
excel_columns[n]
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Returns the full class hierarchy of an object
|
|
161
|
+
def get_full_class(obj)
|
|
162
|
+
klass_str = ''
|
|
163
|
+
until obj.nil?
|
|
164
|
+
if obj == Origen.top_level
|
|
165
|
+
klass_str.prepend obj.class.to_s
|
|
166
|
+
else
|
|
167
|
+
# If the class method produces "SubBlock" then use the object name instead
|
|
168
|
+
if obj.class.to_s.split('::').last == 'SubBlock'
|
|
169
|
+
klass_str.prepend "::#{obj.name.upcase}"
|
|
170
|
+
else
|
|
171
|
+
klass_str.prepend "::#{obj.class.to_s.split('::').last}"
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
obj = obj.parent
|
|
175
|
+
end
|
|
176
|
+
klass_str
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Returns Rgen supported encoding formats
|
|
180
|
+
def encodings(format = nil)
|
|
181
|
+
if format.nil?
|
|
182
|
+
Origen::ENCODINGS.keys
|
|
183
|
+
else
|
|
184
|
+
Origen::ENCODINGS[format].keys
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Returns the encoded symbol as a String if one match is found.
|
|
189
|
+
# Returns a hash for multiple results and nil for no match
|
|
190
|
+
def encoding_search(symbol, options = {})
|
|
191
|
+
options = {
|
|
192
|
+
format: :utf8
|
|
193
|
+
}.update(options)
|
|
194
|
+
fail "The encoding format '#{options[:format]}' is not supported, please choose from #{encodings}" unless encodings.include? options[:format]
|
|
195
|
+
results = Origen::ENCODINGS[options[:format]].filter(symbol)
|
|
196
|
+
if results.size == 1
|
|
197
|
+
results.values.first
|
|
198
|
+
elsif results.size > 1
|
|
199
|
+
results
|
|
200
|
+
else
|
|
201
|
+
return nil
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|