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,349 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
module Pins
|
|
3
|
+
# Stores all pins, pin aliases and pin groups for the current target.
|
|
4
|
+
# A central store is used to allow either top-level or sub-block objects to
|
|
5
|
+
# add pins to the current context available to the testers.
|
|
6
|
+
#
|
|
7
|
+
# The global Origen pin bank (an instance of this class) is returned from Origen.pin_bank.
|
|
8
|
+
class PinBank
|
|
9
|
+
include Origen::CoreCallbacks
|
|
10
|
+
|
|
11
|
+
# There is one pin bank per Origen thread, this clears the bank every time the target is changed
|
|
12
|
+
#
|
|
13
|
+
# @api private
|
|
14
|
+
def before_load_target
|
|
15
|
+
empty!
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Add the given pin to the bank
|
|
19
|
+
#
|
|
20
|
+
# @return [Origen::Pins::Pin] the supplied pin object
|
|
21
|
+
def add_pin(pin, _owner, _options = {})
|
|
22
|
+
if pin.is_a?(PowerPin)
|
|
23
|
+
bank = all_power_pins
|
|
24
|
+
elsif pin.is_a?(GroundPin)
|
|
25
|
+
bank = all_ground_pins
|
|
26
|
+
else
|
|
27
|
+
bank = all_pins
|
|
28
|
+
end
|
|
29
|
+
if bank[pin.id]
|
|
30
|
+
fail "A pin with id #{pin.id} already exists!"
|
|
31
|
+
end
|
|
32
|
+
all_ids << pin.id
|
|
33
|
+
bank[pin.id] = pin
|
|
34
|
+
# If ends in a number
|
|
35
|
+
# if !options[:dont_create_group] && pin.id.to_s =~ /(.*?)(\d+)$/
|
|
36
|
+
# # Create a new group if one with the given name doesn't already exist
|
|
37
|
+
# unless group = all_pin_groups[$1.to_sym]
|
|
38
|
+
# group = PinCollection.new(owner, options)
|
|
39
|
+
# group.id = $1.to_sym
|
|
40
|
+
# all_pin_groups[$1.to_sym] = group
|
|
41
|
+
# end
|
|
42
|
+
# group.add_pin(pin)
|
|
43
|
+
# end
|
|
44
|
+
pin
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def add_pin_group(group, owner, options = {})
|
|
48
|
+
unless options[:pins_exist]
|
|
49
|
+
group.each do |pin|
|
|
50
|
+
add_pin(pin, owner, options.merge(dont_create_group: true))
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
store_pin_group(group, options)
|
|
54
|
+
group
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Returns a hash containing all pins available in the current context stored by their primary ID
|
|
58
|
+
def pins(options = {})
|
|
59
|
+
all_pins.select do |_id, pin|
|
|
60
|
+
pin.enabled?(options)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def power_pins(options = {})
|
|
65
|
+
all_power_pins.select do |_id, pin|
|
|
66
|
+
pin.enabled?(options)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def ground_pins(options = {})
|
|
71
|
+
all_ground_pins.select do |_id, pin|
|
|
72
|
+
pin.enabled?(options)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Returns a hash containing all pin_groups available in the current context stored by their primary ID
|
|
77
|
+
def pin_groups(options = {})
|
|
78
|
+
current_pin_group_store(all_pin_groups, options).select do |_id, group|
|
|
79
|
+
group.enabled?(options)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Returns a hash containing all power_pin_groups available in the current context stored by their primary ID
|
|
84
|
+
def power_pin_groups(options = {})
|
|
85
|
+
current_pin_group_store(all_power_pin_groups, options).select do |_id, group|
|
|
86
|
+
group.enabled?(options)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Returns a hash containing all ground_pin_groups available in the current context stored by their primary ID
|
|
91
|
+
def ground_pin_groups(options = {})
|
|
92
|
+
current_pin_group_store(all_ground_pin_groups, options).select do |_id, group|
|
|
93
|
+
group.enabled?(options)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Returns a hash containing all pins stored by their primary ID
|
|
98
|
+
def all_pins
|
|
99
|
+
@all_pins ||= {}
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Returns a hash containing all pin groups stored by context
|
|
103
|
+
def all_pin_groups
|
|
104
|
+
@all_pin_groups ||= {}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Returns a hash containing all power pins stored by their primary ID
|
|
108
|
+
def all_power_pins
|
|
109
|
+
@all_power_pins ||= {}
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Returns a hash containing all ground pins stored by their primary ID
|
|
113
|
+
def all_ground_pins
|
|
114
|
+
@all_ground_pins ||= {}
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Returns a hash containing all power pin groups stored by context
|
|
118
|
+
def all_power_pin_groups
|
|
119
|
+
@all_power_pin_groups ||= {}
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Returns a hash containing all ground pin groups stored by context
|
|
123
|
+
def all_ground_pin_groups
|
|
124
|
+
@all_ground_pin_groups ||= {}
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def find(id, options = {})
|
|
128
|
+
id = id.to_sym
|
|
129
|
+
if options[:power_pin]
|
|
130
|
+
pin = all_power_pins[id] || find_pin_group(id, options)
|
|
131
|
+
elsif options[:ground_pin]
|
|
132
|
+
pin = all_ground_pins[id] || find_pin_group(id, options)
|
|
133
|
+
else
|
|
134
|
+
pin = all_pins[id] || find_by_alias(id, options) || find_pin_group(id, options)
|
|
135
|
+
end
|
|
136
|
+
if pin
|
|
137
|
+
if options[:ignore_context] || pin.enabled?(options)
|
|
138
|
+
pin
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def find_pin_group(id, options = {})
|
|
144
|
+
options = {
|
|
145
|
+
include_all: true
|
|
146
|
+
}.merge(options)
|
|
147
|
+
if options[:power_pin]
|
|
148
|
+
base = all_power_pin_groups
|
|
149
|
+
elsif options[:ground_pin]
|
|
150
|
+
base = all_ground_pin_groups
|
|
151
|
+
else
|
|
152
|
+
base = all_pin_groups
|
|
153
|
+
end
|
|
154
|
+
pin_group_stores_in_context(base, options) do |store|
|
|
155
|
+
return store[id] if store[id]
|
|
156
|
+
end
|
|
157
|
+
nil
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# This will be called by the pins whenever a new alias is added to them
|
|
161
|
+
def register_alias(id, pin, _options = {})
|
|
162
|
+
known_aliases[id] ||= []
|
|
163
|
+
known_aliases[id] << pin
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# Find an existing pin group with the given ID if it exists and return it, otherwise create one
|
|
167
|
+
def find_or_create_pin_group(id, owner, options = {})
|
|
168
|
+
group = find_pin_group(id, options)
|
|
169
|
+
unless group
|
|
170
|
+
group = PinCollection.new(owner, options)
|
|
171
|
+
group.id = id
|
|
172
|
+
store_pin_group(group, options)
|
|
173
|
+
end
|
|
174
|
+
group
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# Delete a specific pin
|
|
178
|
+
def delete_pin(pin)
|
|
179
|
+
if pin.is_a?(PowerPin)
|
|
180
|
+
bank = all_power_pins
|
|
181
|
+
elsif pin.is_a?(GroundPin)
|
|
182
|
+
bank = all_ground_pins
|
|
183
|
+
else
|
|
184
|
+
bank = all_pins
|
|
185
|
+
end
|
|
186
|
+
# First delete the pin from any of the pin groups it resides
|
|
187
|
+
Origen.pin_bank.pin_groups.each do |_name, grp|
|
|
188
|
+
next unless grp.store.include?(pin)
|
|
189
|
+
grp.delete(pin)
|
|
190
|
+
end
|
|
191
|
+
# Now delete the pin from the pin bank
|
|
192
|
+
if bank[pin.id]
|
|
193
|
+
bank.delete(pin.id)
|
|
194
|
+
# Delete all known aliases as well
|
|
195
|
+
known_aliases.delete(pin.name)
|
|
196
|
+
else
|
|
197
|
+
if pin.id == pin.name
|
|
198
|
+
fail "A pin with id #{pin.id} does not exist!"
|
|
199
|
+
else
|
|
200
|
+
fail "A pin with id #{pin.id} and name #{pin.name} does not exist!"
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# Delete a specific pin group
|
|
206
|
+
def delete_pingroup(group)
|
|
207
|
+
found_group = false
|
|
208
|
+
if group.power_pins?
|
|
209
|
+
base = all_power_pin_groups
|
|
210
|
+
elsif group.ground_pins?
|
|
211
|
+
base = all_ground_pin_groups
|
|
212
|
+
else
|
|
213
|
+
base = all_pin_groups
|
|
214
|
+
end
|
|
215
|
+
pin_group_stores_in_context(base) do |store|
|
|
216
|
+
if store.include?(group.id)
|
|
217
|
+
store.delete(group.id)
|
|
218
|
+
found_group = true
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
fail "A pin group with id #{group.id} does not exist!" unless found_group == true
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
private
|
|
225
|
+
|
|
226
|
+
def current_pin_group_store(base, options)
|
|
227
|
+
pin_group_stores_in_context(base, options)
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def pin_group_stores_in_context(base, options = {})
|
|
231
|
+
# Pin group availability is now only scoped by package
|
|
232
|
+
options[:mode] = :all
|
|
233
|
+
options[:configuration] = :all
|
|
234
|
+
resolve_packages(options).each do |package|
|
|
235
|
+
base[package] ||= {}
|
|
236
|
+
resolve_modes(options).each do |mode|
|
|
237
|
+
base[package][mode] ||= {}
|
|
238
|
+
resolve_configurations(options).each do |config|
|
|
239
|
+
base[package][mode][config] ||= {}
|
|
240
|
+
if block_given?
|
|
241
|
+
yield base[package][mode][config]
|
|
242
|
+
else
|
|
243
|
+
return base[package][mode][config]
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def store_pin_group(group, options)
|
|
251
|
+
if group.power_pins?
|
|
252
|
+
base = all_power_pin_groups
|
|
253
|
+
elsif group.ground_pins?
|
|
254
|
+
base = all_ground_pin_groups
|
|
255
|
+
else
|
|
256
|
+
base = all_pin_groups
|
|
257
|
+
end
|
|
258
|
+
pin_group_stores_in_context(base, options) do |store|
|
|
259
|
+
store[group.id] = group
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# Returns an array containing the package ids resolved from the given options or
|
|
264
|
+
# the current top-level context
|
|
265
|
+
def resolve_packages(options = {})
|
|
266
|
+
p = [options.delete(:package) || options.delete(:packages) || current_package_id].flatten.compact
|
|
267
|
+
if options[:include_all] || p.empty?
|
|
268
|
+
p << :all
|
|
269
|
+
end
|
|
270
|
+
p.uniq
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
# Returns an array containing the mode ids resolved from the given options or
|
|
274
|
+
# the current top-level context
|
|
275
|
+
def resolve_modes(options = {})
|
|
276
|
+
m = [options.delete(:mode) || options.delete(:modes) || current_mode_id].flatten.compact
|
|
277
|
+
if options[:include_all] || m.empty?
|
|
278
|
+
m << :all
|
|
279
|
+
end
|
|
280
|
+
m.uniq
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
# Returns an array containing the configuration ids resolved from the given options or
|
|
284
|
+
# the current top-level context
|
|
285
|
+
def resolve_configurations(options = {})
|
|
286
|
+
c = [options.delete(:configuration) || options.delete(:configurations) || current_configuration].flatten.compact
|
|
287
|
+
if options[:include_all] || c.empty?
|
|
288
|
+
c << :all
|
|
289
|
+
end
|
|
290
|
+
c.uniq
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
# Returns the current configuration context for this pin/pin group, if a configuration has been
|
|
294
|
+
# explicitly set on this pin that will be returned, otherwise the current chip-level configuration
|
|
295
|
+
# context will be returned (nil if none is set)
|
|
296
|
+
def current_configuration
|
|
297
|
+
if Origen.top_level
|
|
298
|
+
Origen.top_level.current_configuration
|
|
299
|
+
end
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
# Returns the current top-level package ID, nil if none is set.
|
|
303
|
+
def current_package_id
|
|
304
|
+
if Origen.top_level && Origen.top_level.current_package
|
|
305
|
+
Origen.top_level.current_package.id
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
# Returns the current top-level mode ID, nil if none is set.
|
|
310
|
+
def current_mode_id
|
|
311
|
+
if Origen.top_level && Origen.top_level.current_mode
|
|
312
|
+
Origen.top_level.current_mode.id
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
def find_by_alias(id, options = {})
|
|
317
|
+
if known_aliases[id]
|
|
318
|
+
pins = known_aliases[id].select do |pin|
|
|
319
|
+
pin.has_alias?(id, options)
|
|
320
|
+
end
|
|
321
|
+
if pins.size > 1
|
|
322
|
+
fail "Mutliple pins with the alias #{id} have been found in the current scope!"
|
|
323
|
+
end
|
|
324
|
+
pins.first
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
# Delete all pins, groups and aliases from the bank
|
|
329
|
+
def empty!
|
|
330
|
+
@all_ids = nil
|
|
331
|
+
@known_aliases = nil
|
|
332
|
+
@all_pins = nil
|
|
333
|
+
@all_power_pins = nil
|
|
334
|
+
@all_ground_pins = nil
|
|
335
|
+
@all_pin_groups = nil
|
|
336
|
+
@all_power_pin_groups = nil
|
|
337
|
+
@all_ground_pin_groups = nil
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
def known_aliases
|
|
341
|
+
@known_aliases ||= {}
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
def all_ids
|
|
345
|
+
@all_ids ||= []
|
|
346
|
+
end
|
|
347
|
+
end
|
|
348
|
+
end
|
|
349
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
module Pins
|
|
3
|
+
class PinClock
|
|
4
|
+
attr_accessor :running
|
|
5
|
+
attr_accessor :cycles_per_half_period
|
|
6
|
+
attr_accessor :last_edge
|
|
7
|
+
attr_accessor :next_edge
|
|
8
|
+
|
|
9
|
+
def initialize(owner, options = {})
|
|
10
|
+
@owner = owner
|
|
11
|
+
@running = false
|
|
12
|
+
@cycles_per_half_period = 0
|
|
13
|
+
@ns_per_half_period = 0
|
|
14
|
+
update_half_period(options)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def running?
|
|
18
|
+
@running
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def start_clock(options = {})
|
|
22
|
+
fail "ERROR: Clock on #{@owner.name} already running." if running?
|
|
23
|
+
|
|
24
|
+
if update_required?(options)
|
|
25
|
+
update_half_period(options)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
@last_edge = Origen.tester.cycle_count
|
|
29
|
+
@next_edge = Origen.tester.cycle_count + @cycles_per_half_period
|
|
30
|
+
cc "Start clock on #{@owner.name}: cycles_per_half_period=#{@cycles_per_half_period}, start cycle=#{@last_edge}"
|
|
31
|
+
Origen.tester.push_running_clock(@owner) unless running?
|
|
32
|
+
@running = true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def restart_clock(_options = {})
|
|
36
|
+
stop_clock
|
|
37
|
+
update_clock
|
|
38
|
+
start_clock
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def stop_clock(_options = {})
|
|
42
|
+
cc "Stop clock on #{@owner.name}: stop cycle=#{Origen.tester.cycle_count}" if running?
|
|
43
|
+
Origen.tester.pop_running_clock(@owner) if running?
|
|
44
|
+
@running = false
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def update_clock
|
|
48
|
+
unless update_half_period(period_in_ns: @ns_per_half_period)
|
|
49
|
+
@last_edge = Origen.tester.cycle_count
|
|
50
|
+
@next_edge = Origen.tester.cycle_count + @cycles_per_half_period
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def toggle
|
|
55
|
+
@owner.toggle
|
|
56
|
+
@last_edge = Origen.tester.cycle_count
|
|
57
|
+
@next_edge = Origen.tester.cycle_count + @cycles_per_half_period
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
|
|
62
|
+
def update_half_period(options = {})
|
|
63
|
+
old_cycles_per_half_period = @cycles_per_half_period
|
|
64
|
+
options = { cycles: 0,
|
|
65
|
+
period_in_s: 0, period_in_ms: 0, period_in_us: 0, period_in_ns: 0,
|
|
66
|
+
frequency_in_hz: 0, frequency_in_khz: 0, frequency_in_mhz: 0,
|
|
67
|
+
freq_in_hz: 0, freq_in_khz: 0, freq_in_mhz: 0
|
|
68
|
+
}.merge(options)
|
|
69
|
+
|
|
70
|
+
cycles = 0
|
|
71
|
+
cycles += options[:cycles]
|
|
72
|
+
cycles += s_to_cycles(options[:period_in_s])
|
|
73
|
+
cycles += ms_to_cycles(options[:period_in_ms])
|
|
74
|
+
cycles += us_to_cycles(options[:period_in_us])
|
|
75
|
+
cycles += ns_to_cycles(options[:period_in_ns])
|
|
76
|
+
cycles += hz_to_cycles(options[:frequency_in_hz])
|
|
77
|
+
cycles += khz_to_cycles(options[:frequency_in_khz])
|
|
78
|
+
cycles += mhz_to_cycles(options[:frequency_in_mhz])
|
|
79
|
+
cycles += hz_to_cycles(options[:freq_in_hz])
|
|
80
|
+
cycles += khz_to_cycles(options[:freq_in_khz])
|
|
81
|
+
cycles += mhz_to_cycles(options[:freq_in_mhz])
|
|
82
|
+
|
|
83
|
+
@cycles_per_half_period = cycles / 2
|
|
84
|
+
@ns_per_half_period = cycles * Origen.tester.current_period_in_ns
|
|
85
|
+
@cycles_per_half_period == old_cycles_per_half_period
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def s_to_cycles(time) # :nodoc:
|
|
89
|
+
((time.to_f) * 1000 * 1000 * 1000 / Origen.tester.current_period_in_ns).to_int
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def ms_to_cycles(time) # :nodoc:
|
|
93
|
+
((time.to_f) * 1000 * 1000 / Origen.tester.current_period_in_ns).to_int
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def us_to_cycles(time) # :nodoc:
|
|
97
|
+
((time.to_f * 1000) / Origen.tester.current_period_in_ns).to_int
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def ns_to_cycles(time) # :nodoc:
|
|
101
|
+
(time.to_f / Origen.tester.current_period_in_ns).to_int
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def hz_to_cycles(freq) # :nodoc:
|
|
105
|
+
(freq == 0) ? freq : s_to_cycles(1 / freq.to_f)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def khz_to_cycles(freq) # :nodoc:
|
|
109
|
+
(freq == 0) ? freq : ms_to_cycles(1 / freq.to_f)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def mhz_to_cycles(freq) # :nodoc:
|
|
113
|
+
(freq == 0) ? freq : us_to_cycles(1 / freq.to_f)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def update_required?(options)
|
|
117
|
+
options[:cycles] ||
|
|
118
|
+
options[:period_in_s] || options[:period_in_ms] || options[:period_in_us] || options[:period_in_ns]
|
|
119
|
+
options[:frequency_in_hz] || options[:frequency_in_khz] || options[:frequency_in_mhz] ||
|
|
120
|
+
options[:freq_in_hz] || options[:freq_in_khz] || options[:freq_in_mhz]
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|