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,298 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
module SubBlocks
|
|
3
|
+
# This will be called whenever an object that includes this module
|
|
4
|
+
# is instantiated
|
|
5
|
+
#
|
|
6
|
+
# @api private
|
|
7
|
+
def init_sub_blocks(*args)
|
|
8
|
+
options = args.find { |a| a.is_a?(Hash) }
|
|
9
|
+
if options
|
|
10
|
+
# Using reg_base_address for storage to avoid class with the original Origen base
|
|
11
|
+
# address API, but will accept any of these
|
|
12
|
+
@reg_base_address = options.delete(:reg_base_address) || options.delete(:reg_base_address) ||
|
|
13
|
+
options.delete(:base_address) || options.delete(:base) || 0
|
|
14
|
+
@domain_names = [options.delete(:domain) || options.delete(:domains)].flatten.compact
|
|
15
|
+
@domain_specified = !@domain_names.empty?
|
|
16
|
+
@path = options.delete(:path)
|
|
17
|
+
@abs_path = options.delete(:abs_path) || options.delete(:absolute_path)
|
|
18
|
+
end
|
|
19
|
+
if is_a?(SubBlock)
|
|
20
|
+
options.each do |k, v|
|
|
21
|
+
send("#{k}=", v)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
module Domains
|
|
27
|
+
def domain(name, options = {})
|
|
28
|
+
domains[name] = Origen::Registers::Domain.new(name, options)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def domain_specified?
|
|
32
|
+
@domain_specified
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def domains
|
|
36
|
+
@domains ||= {}.with_indifferent_access
|
|
37
|
+
if @domain_names
|
|
38
|
+
@domain_names.each do |domain|
|
|
39
|
+
if domain.is_a?(Origen::Registers::Domain)
|
|
40
|
+
@domains[domain.id] = domain
|
|
41
|
+
elsif parent.domains[domain]
|
|
42
|
+
@domains[domain] = parent.domains[domain]
|
|
43
|
+
else
|
|
44
|
+
fail "Uknown domain: #{domain}"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
@domain_names = nil
|
|
48
|
+
end
|
|
49
|
+
if parent && @domains.empty?
|
|
50
|
+
parent.domains
|
|
51
|
+
else
|
|
52
|
+
@domains
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
alias_method :register_domains, :domains
|
|
56
|
+
end
|
|
57
|
+
include Domains
|
|
58
|
+
|
|
59
|
+
# Jumping through some hoops here since many Origen modules talk about an owner,
|
|
60
|
+
# but would prefer to start standardizing on parent in future, so this should give
|
|
61
|
+
# most Origen models a parent method
|
|
62
|
+
module Parent
|
|
63
|
+
def parent
|
|
64
|
+
@owner
|
|
65
|
+
end
|
|
66
|
+
alias_method :owner, :parent
|
|
67
|
+
|
|
68
|
+
unless method_defined? :owner=
|
|
69
|
+
def owner=(obj)
|
|
70
|
+
if obj.respond_to?(:controller) && obj.controller
|
|
71
|
+
@owner = obj.controller
|
|
72
|
+
else
|
|
73
|
+
@owner = obj
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
alias_method :parent=, :owner=
|
|
78
|
+
end
|
|
79
|
+
include Parent
|
|
80
|
+
|
|
81
|
+
module RegBaseAddress
|
|
82
|
+
def reg_base_address(options = {})
|
|
83
|
+
if options[:relative]
|
|
84
|
+
reg_base_address_for_domain(options)
|
|
85
|
+
else
|
|
86
|
+
total_reg_base_address = reg_base_address_for_domain(options)
|
|
87
|
+
if parent
|
|
88
|
+
total_reg_base_address += parent.reg_base_address(options)
|
|
89
|
+
end
|
|
90
|
+
total_reg_base_address
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def reg_base_address_for_domain(options)
|
|
95
|
+
if @reg_base_address
|
|
96
|
+
if @reg_base_address.is_a?(Hash)
|
|
97
|
+
if options[:domain]
|
|
98
|
+
if options[:domain].is_a?(Hash)
|
|
99
|
+
domains = options[:domain].keys
|
|
100
|
+
else
|
|
101
|
+
domains = [options[:domain]].flatten
|
|
102
|
+
end
|
|
103
|
+
bases = domains.map do |d|
|
|
104
|
+
@reg_base_address.with_indifferent_access[d]
|
|
105
|
+
end.compact
|
|
106
|
+
if bases.empty?
|
|
107
|
+
@reg_base_address[:default] || 0
|
|
108
|
+
else
|
|
109
|
+
if bases.size > 1
|
|
110
|
+
fail 'Multiple base addresses found, specify the domain you want, e.g. reg.address(domain: :ahb)'
|
|
111
|
+
else
|
|
112
|
+
bases.first
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
else
|
|
116
|
+
@reg_base_address[:default] || 0
|
|
117
|
+
end
|
|
118
|
+
else
|
|
119
|
+
@reg_base_address
|
|
120
|
+
end
|
|
121
|
+
else
|
|
122
|
+
0
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
unless method_defined? :base_address
|
|
127
|
+
def base_address
|
|
128
|
+
reg_base_address
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
include RegBaseAddress
|
|
133
|
+
|
|
134
|
+
module Path
|
|
135
|
+
def path=(val)
|
|
136
|
+
@path = val
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def path_var
|
|
140
|
+
@path
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def abs_path=(val)
|
|
144
|
+
@abs_path = val
|
|
145
|
+
end
|
|
146
|
+
alias_method :full_path=, :abs_path=
|
|
147
|
+
|
|
148
|
+
def abs_path
|
|
149
|
+
@abs_path
|
|
150
|
+
end
|
|
151
|
+
alias_method :full_path, :abs_path
|
|
152
|
+
|
|
153
|
+
def path(options = {})
|
|
154
|
+
return abs_path if abs_path
|
|
155
|
+
if is_a?(Origen::Registers::BitCollection)
|
|
156
|
+
# Special case where path relative to the register has been requested
|
|
157
|
+
if options[:relative_to] == parent
|
|
158
|
+
if size == 1
|
|
159
|
+
return "[#{position}]"
|
|
160
|
+
else
|
|
161
|
+
return "[#{position + size - 1}:#{position}]"
|
|
162
|
+
end
|
|
163
|
+
else
|
|
164
|
+
p = parent.parent
|
|
165
|
+
end
|
|
166
|
+
else
|
|
167
|
+
p = parent
|
|
168
|
+
end
|
|
169
|
+
if p && p != options[:relative_to]
|
|
170
|
+
if p.path(options).empty?
|
|
171
|
+
root = ''
|
|
172
|
+
else
|
|
173
|
+
root = "#{p.path(options)}."
|
|
174
|
+
end
|
|
175
|
+
else
|
|
176
|
+
root = ''
|
|
177
|
+
end
|
|
178
|
+
local = (path_var || name || self.class.to_s.split('::').last).to_s
|
|
179
|
+
if local == 'hidden'
|
|
180
|
+
root.chop
|
|
181
|
+
else
|
|
182
|
+
"#{root}#{local}"
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
alias_method :hdl_path, :path
|
|
186
|
+
end
|
|
187
|
+
include Path
|
|
188
|
+
|
|
189
|
+
# Returns a hash containing all immediate children of the given sub-block
|
|
190
|
+
def sub_blocks
|
|
191
|
+
@sub_blocks ||= {}.with_indifferent_access
|
|
192
|
+
end
|
|
193
|
+
alias_method :children, :sub_blocks
|
|
194
|
+
|
|
195
|
+
# Delete all sub_blocks by emptyig the Hash
|
|
196
|
+
def delete_sub_blocks
|
|
197
|
+
@sub_blocks = {}
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def sub_blocks_array
|
|
201
|
+
sub_blocks.map { |_name, sub_block| sub_block }
|
|
202
|
+
end
|
|
203
|
+
alias_method :children_array, :sub_blocks_array
|
|
204
|
+
|
|
205
|
+
# Returns an array containing all descendant child objects of the given sub-block, i.e. this returns
|
|
206
|
+
# an array containing children's children as well
|
|
207
|
+
#
|
|
208
|
+
# Note that this returns an array instead of a hash since there could be naming collisions in the
|
|
209
|
+
# hash keys
|
|
210
|
+
def all_sub_blocks
|
|
211
|
+
@all_sub_blocks ||= begin
|
|
212
|
+
(sub_blocks_array + sub_blocks_array.map(&:all_sub_blocks)).flatten
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Returns true if the given sub block owns at least one register
|
|
217
|
+
def owns_registers?
|
|
218
|
+
if regs
|
|
219
|
+
regs.is_a?(Origen::Registers::RegCollection) && !regs.empty?
|
|
220
|
+
else
|
|
221
|
+
false
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def sub_block(name, options = {})
|
|
226
|
+
class_name = options.delete(:class_name)
|
|
227
|
+
if class_name
|
|
228
|
+
begin
|
|
229
|
+
klass = eval("::#{namespace}::#{class_name}")
|
|
230
|
+
rescue
|
|
231
|
+
begin
|
|
232
|
+
klass = eval(class_name)
|
|
233
|
+
rescue
|
|
234
|
+
begin
|
|
235
|
+
klass = eval("#{self.class}::#{class_name}")
|
|
236
|
+
rescue
|
|
237
|
+
puts "Could not find class: #{class_name}"
|
|
238
|
+
raise 'Unknown sub block class!'
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
else
|
|
243
|
+
klass = Origen::SubBlock
|
|
244
|
+
end
|
|
245
|
+
unless klass.respond_to?(:includes_origen_model)
|
|
246
|
+
puts 'Any class which is to be instantiated as a sub_block must include Origen::Model,'
|
|
247
|
+
puts "add this to #{klass}:"
|
|
248
|
+
puts ''
|
|
249
|
+
puts ' include Origen::Model'
|
|
250
|
+
puts ''
|
|
251
|
+
fail 'Sub block does not include Origen::Model!'
|
|
252
|
+
end
|
|
253
|
+
block = klass.new(options.merge(parent: self))
|
|
254
|
+
block.name = name
|
|
255
|
+
sub_blocks[name] = block
|
|
256
|
+
if respond_to?(name)
|
|
257
|
+
# puts "Tried to create a sub-block named #{name} in #{self.class}, but it already has a method with this name!"
|
|
258
|
+
# puts "To avoid confusion rename one of them and try again!"
|
|
259
|
+
# raise "Non-unique sub-block name!"
|
|
260
|
+
else
|
|
261
|
+
define_singleton_method name do
|
|
262
|
+
sub_blocks[name]
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
block
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def namespace
|
|
269
|
+
self.class.to_s.sub(/::[^:]*$/, '')
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
# A simple class that will be instantiated by default when a sub block is
|
|
274
|
+
# defined without another class name specified
|
|
275
|
+
#
|
|
276
|
+
# This class includes support for registers, pins, etc.
|
|
277
|
+
class SubBlock
|
|
278
|
+
include Origen::Model
|
|
279
|
+
|
|
280
|
+
# Used to create attribute accessors on the fly.
|
|
281
|
+
#
|
|
282
|
+
# On first call of a missing method a method is generated to avoid the missing lookup
|
|
283
|
+
# next time, this should be faster for repeated lookups of the same method, e.g. reg
|
|
284
|
+
def method_missing(method, *args, &block)
|
|
285
|
+
return regs(method) if self.has_reg?(method)
|
|
286
|
+
if method.to_s =~ /=$/
|
|
287
|
+
define_singleton_method(method) do |val|
|
|
288
|
+
instance_variable_set("@#{method.to_s.sub('=', '')}", val)
|
|
289
|
+
end
|
|
290
|
+
else
|
|
291
|
+
define_singleton_method(method) do
|
|
292
|
+
instance_variable_get("@#{method}")
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
send(method, *args, &block)
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
end
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
module Tester
|
|
3
|
+
# This module implements the basic set of methods that a tester must have
|
|
4
|
+
# in order for Origen to talk to it.
|
|
5
|
+
#
|
|
6
|
+
# They can be overridden by tester specific classes and who may go on to add
|
|
7
|
+
# additional methods of their own.
|
|
8
|
+
#
|
|
9
|
+
# Essentially this API means that any class that includes Origen::Tester will
|
|
10
|
+
# function as a tester, although it might not do very much!
|
|
11
|
+
module API
|
|
12
|
+
attr_accessor :includes
|
|
13
|
+
attr_accessor :comment_level
|
|
14
|
+
attr_accessor :generating
|
|
15
|
+
attr_accessor :inhibit_comments
|
|
16
|
+
attr_accessor :inhibit_vectors
|
|
17
|
+
|
|
18
|
+
def name
|
|
19
|
+
@name || self.class
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def generate?
|
|
23
|
+
true
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def generating_pattern?
|
|
27
|
+
@generating == :pattern
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def generating_program?
|
|
31
|
+
@generating == :program
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def pat_extension
|
|
35
|
+
@pat_extension || 'txt'
|
|
36
|
+
end
|
|
37
|
+
alias_method :pattern_extension, :pat_extension
|
|
38
|
+
|
|
39
|
+
def comment_char
|
|
40
|
+
@comment_char || '//'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def program_comment_char
|
|
44
|
+
@program_comment_char || comment_char
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def pattern_header(*_args)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def pattern_footer(*_args)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def step_comment_prefix
|
|
54
|
+
@step_comment_prefix || '##'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def is_vector_based?
|
|
58
|
+
return @vector_based if defined?(@vector_based)
|
|
59
|
+
true
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def is_command_based?
|
|
63
|
+
!is_vector_based?
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def j750?
|
|
67
|
+
false
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def v93k?
|
|
71
|
+
false
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def ultraflex?
|
|
75
|
+
false
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def doc?
|
|
79
|
+
false
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def j750_hpt?
|
|
83
|
+
false
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def annotate(_msg, _options = {})
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Ignore fails on the given pins for the duration of the given block, this
|
|
90
|
+
# has the effect of temporarily setting the states of the given pins to
|
|
91
|
+
# don't care.
|
|
92
|
+
def ignore_fails(*pins)
|
|
93
|
+
pins.each(&:suspend)
|
|
94
|
+
yield
|
|
95
|
+
pins.each(&:resume)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Output a comment in the pattern, normally you would not call this directly
|
|
99
|
+
# and instead use these shorthand methods:
|
|
100
|
+
# cc "Some comment"
|
|
101
|
+
# ss "A single line step comment"
|
|
102
|
+
# step_comment do
|
|
103
|
+
# cc "A multi line"
|
|
104
|
+
# cc "step comment"
|
|
105
|
+
# end
|
|
106
|
+
def c1(msg, _options = {})
|
|
107
|
+
prefix = comment_char + ' '
|
|
108
|
+
prefix += step_comment_prefix + ' ' if @step_comment_on
|
|
109
|
+
push_comment(prefix + msg.to_s)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def c2(msg, options = {})
|
|
113
|
+
c1(msg, options)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def pattern_section(msg)
|
|
117
|
+
if generating_program?
|
|
118
|
+
yield
|
|
119
|
+
else
|
|
120
|
+
step_comment(msg)
|
|
121
|
+
yield
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def ss(msg = nil)
|
|
126
|
+
div = step_comment_prefix.length
|
|
127
|
+
div = 1 if div == 0
|
|
128
|
+
c1(step_comment_prefix * (70 / div))
|
|
129
|
+
@step_comment_on = true
|
|
130
|
+
if block_given?
|
|
131
|
+
yield
|
|
132
|
+
else
|
|
133
|
+
c1(msg)
|
|
134
|
+
end
|
|
135
|
+
@step_comment_on = false
|
|
136
|
+
c1(step_comment_prefix * (70 / div))
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def snip(_number, _options = {})
|
|
140
|
+
yield
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Allows a section to be run without actually generating any vectors. This can be useful
|
|
144
|
+
# to ensure the pin states end up as they otherwise would have if the section had been run.
|
|
145
|
+
# Classic example of this is a subroutine pattern, wrap this around a call to the startup
|
|
146
|
+
# routine to ensure the pin states are as they would have been immediately after the startup.
|
|
147
|
+
# ==== Example
|
|
148
|
+
# # Setup state as if I had run startup without actually doing so
|
|
149
|
+
# $tester.inhibit_vectors_and_comments do
|
|
150
|
+
# $soc.startup
|
|
151
|
+
# $top.startup
|
|
152
|
+
# end
|
|
153
|
+
def inhibit_vectors_and_comments
|
|
154
|
+
inhibit_vectors = @inhibit_vectors
|
|
155
|
+
inhibit_comments = @inhibit_comments
|
|
156
|
+
@inhibit_vectors = true
|
|
157
|
+
@inhibit_comments = true
|
|
158
|
+
yield
|
|
159
|
+
@inhibit_vectors = inhibit_vectors # Restore to their initial state
|
|
160
|
+
@inhibit_comments = inhibit_comments
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# @see inhibit_vectors_and_comments
|
|
164
|
+
def inhibit_vectors
|
|
165
|
+
inhibit_vectors = @inhibit_vectors
|
|
166
|
+
@inhibit_vectors = true
|
|
167
|
+
yield
|
|
168
|
+
@inhibit_vectors = inhibit_vectors # Restore to their initial state
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# @see inhibit_vectors_and_comments
|
|
172
|
+
def inhibit_comments
|
|
173
|
+
inhibit_comments = @inhibit_comments
|
|
174
|
+
@inhibit_comments = true
|
|
175
|
+
yield
|
|
176
|
+
@inhibit_comments = inhibit_comments
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Generate a vector.
|
|
180
|
+
# Calling this method will generate a vector in the output pattern based on the
|
|
181
|
+
# current pin states and timeset.
|
|
182
|
+
def cycle(options = {})
|
|
183
|
+
options = {
|
|
184
|
+
microcode: '',
|
|
185
|
+
timeset: current_timeset,
|
|
186
|
+
pin_vals: current_pin_vals,
|
|
187
|
+
repeat: nil
|
|
188
|
+
}.merge(options)
|
|
189
|
+
|
|
190
|
+
if any_clocks_running?
|
|
191
|
+
update_running_clocks
|
|
192
|
+
if options[:repeat]
|
|
193
|
+
slice_repeats(options).each do |slice|
|
|
194
|
+
options[:repeat] = slice[0]
|
|
195
|
+
delay(options.delete(:repeat), options) do |options|
|
|
196
|
+
push_vector(options)
|
|
197
|
+
end
|
|
198
|
+
slice[1].each { |clock_pin_name| clocks_running[clock_pin_name].toggle_clock }
|
|
199
|
+
options[:pin_vals] = current_pin_vals
|
|
200
|
+
end
|
|
201
|
+
else
|
|
202
|
+
push_vector(options)
|
|
203
|
+
pins_need_toggling.each { |clock_pin_name| clocks_running[clock_pin_name].toggle_clock }
|
|
204
|
+
end
|
|
205
|
+
else
|
|
206
|
+
if options[:repeat]
|
|
207
|
+
delay(options.delete(:repeat), options) do |options|
|
|
208
|
+
push_vector(options)
|
|
209
|
+
end
|
|
210
|
+
else
|
|
211
|
+
push_vector(options)
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def import_test_time(_file, _options = {})
|
|
217
|
+
puts "Sorry but an importer doesn't exist for: #{Origen.tester.class}"
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def any_clocks_running?
|
|
221
|
+
@clocks_running.nil? ? false : @clocks_running.count > 0
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def clocks_running
|
|
225
|
+
@clocks_running
|
|
226
|
+
end
|
|
227
|
+
alias_method :running_clocks, :clocks_running
|
|
228
|
+
|
|
229
|
+
def push_running_clock(pin)
|
|
230
|
+
@clocks_running.nil? ? @clocks_running = { pin.name.to_s => pin } : @clocks_running[pin.name.to_s] = pin
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def pop_running_clock(pin)
|
|
234
|
+
fail "ERROR: No clocks running, doesn't make sense to pop one" unless any_clocks_running?
|
|
235
|
+
@clocks_running.delete(pin.name.to_s)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def slice_repeats(options = {})
|
|
239
|
+
slices = {}
|
|
240
|
+
repeat_ary = []
|
|
241
|
+
clocks_running.each do |name, clock_pin|
|
|
242
|
+
if clock_pin.next_edge < (cycle_count + options[:repeat])
|
|
243
|
+
pin_slices = (clock_pin.next_edge..(cycle_count + options[:repeat])).step(clock_pin.half_period).to_a
|
|
244
|
+
pin_slices.insert(0, cycle_count)
|
|
245
|
+
else
|
|
246
|
+
pin_slices = [cycle_count]
|
|
247
|
+
end
|
|
248
|
+
pin_slices.each do |cycle|
|
|
249
|
+
slices[cycle].nil? ? slices[cycle] = name : slices[cycle] = "#{slices[cycle]},#{name}"
|
|
250
|
+
end
|
|
251
|
+
slices[cycle_count + options[:repeat]] = '' if pin_slices[-1] != cycle_count + options[:repeat]
|
|
252
|
+
end
|
|
253
|
+
slices.keys.sort.each do |edge_cycles|
|
|
254
|
+
# puts "Toggle #{slices[edge_cycles]} on #{edge_cycles}"
|
|
255
|
+
repeat_ary.push([edge_cycles, slices[edge_cycles].split(',')])
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
(repeat_ary.count - 1).downto(1).each { |i| repeat_ary[i][0] = repeat_ary[i][0] - repeat_ary[i - 1][0] }
|
|
259
|
+
repeat_ary[1..-1]
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def pins_need_toggling
|
|
263
|
+
toggle_ary = []
|
|
264
|
+
clocks_running.each do |name, clock_pin|
|
|
265
|
+
toggle_ary.push("#{name}") if clock_pin.next_edge == cycle_count
|
|
266
|
+
end
|
|
267
|
+
toggle_ary
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def update_running_clocks
|
|
271
|
+
clocks_running.each do |_name, clock_pin|
|
|
272
|
+
clock_pin.update_clock
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
module Tester
|
|
3
|
+
class BDM < CommandBasedTester
|
|
4
|
+
def initialize
|
|
5
|
+
super
|
|
6
|
+
# The minimum time unit is 0.1s
|
|
7
|
+
set_timeset('default', 100_000_000)
|
|
8
|
+
@pat_extension = 'cmd'
|
|
9
|
+
@comment_char = '//'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def delay(cycles)
|
|
13
|
+
microcode "WAIT #{cycles_to_ts(cycles)}"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def write_byte(address, data)
|
|
17
|
+
microcode "WB 0x#{address.to_s(16).upcase} 0x#{data.to_s(16).upcase}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def write_word(address, data)
|
|
21
|
+
microcode "WW 0x#{address.to_s(16).upcase} 0x#{data.to_s(16).upcase}"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
module Tester
|
|
3
|
+
# A base class that can be used to model command-based, rather than
|
|
4
|
+
# vector-based testers.
|
|
5
|
+
class CommandBasedTester
|
|
6
|
+
include Tester
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
@vector_based = false
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Write a string directly to the output file without being processed
|
|
13
|
+
# or modified in any way
|
|
14
|
+
def direct_write(str)
|
|
15
|
+
microcode str
|
|
16
|
+
end
|
|
17
|
+
alias_method :dw, :direct_write
|
|
18
|
+
|
|
19
|
+
# Concept of a cycle not supported, print out an error to the output
|
|
20
|
+
# file to alert the user that execution has hit code that is not
|
|
21
|
+
# compatible with a command based tester.
|
|
22
|
+
def cycle(*_args)
|
|
23
|
+
microcode '*** Cycle called ***'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Concept of a subroutine not supported, print out an error to the output
|
|
27
|
+
# file to alert the user that execution has hit code that is not
|
|
28
|
+
# compatible with a command based tester.
|
|
29
|
+
def call_subroutine(sub)
|
|
30
|
+
microcode "Call_subroutine called to #{sub}"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def format_vector(vec)
|
|
34
|
+
vec.microcode
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Loop the content embedded in the supplied block
|
|
38
|
+
def loop(_name = nil, number_of_loops)
|
|
39
|
+
number_of_loops.times do
|
|
40
|
+
yield
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
alias_method :loop_vector, :loop
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|