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.
Files changed (336) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ctags +0 -0
  3. data/bin/origen +165 -1
  4. data/bin/rgen +2 -0
  5. data/config/application.rb +141 -0
  6. data/config/commands.rb +72 -0
  7. data/config/development.rb +7 -0
  8. data/config/environment.rb +0 -0
  9. data/config/rgen.policy +7 -0
  10. data/config/rubocop/easy.yml +620 -0
  11. data/config/rubocop/easy_disabled.yml +271 -0
  12. data/config/rubocop/easy_enabled.yml +731 -0
  13. data/config/rubocop/strict.yml +620 -0
  14. data/config/rubocop/strict_disabled.yml +247 -0
  15. data/config/rubocop/strict_enabled.yml +755 -0
  16. data/config/users.rb +20 -0
  17. data/config/version.rb +1 -1
  18. data/helpers/url.rb +68 -0
  19. data/lib/c99/doc_interface.rb +56 -0
  20. data/lib/c99/j750_interface.rb +85 -0
  21. data/lib/c99/nvm.rb +89 -0
  22. data/lib/c99/target/mock2.rb +1 -0
  23. data/lib/c99/target/subdir/mock3.rb +1 -0
  24. data/lib/option_parser/optparse.rb +12 -0
  25. data/lib/origen/acronyms.rb +60 -0
  26. data/lib/origen/application/command_dispatcher.rb +12 -0
  27. data/lib/origen/application/configuration.rb +206 -0
  28. data/lib/origen/application/configuration_manager.rb +78 -0
  29. data/lib/origen/application/deployer.rb +367 -0
  30. data/lib/origen/application/environment.rb +186 -0
  31. data/lib/origen/application/lsf.rb +145 -0
  32. data/lib/origen/application/lsf_manager.rb +657 -0
  33. data/lib/origen/application/plugins_manager.rb +280 -0
  34. data/lib/origen/application/release.rb +359 -0
  35. data/lib/origen/application/runner.rb +246 -0
  36. data/lib/origen/application/statistics.rb +191 -0
  37. data/lib/origen/application/target.rb +374 -0
  38. data/lib/origen/application/version_tracker.rb +59 -0
  39. data/lib/origen/application/workspace_manager.rb +151 -0
  40. data/lib/origen/application.rb +746 -0
  41. data/lib/origen/bugs/bug.rb +36 -0
  42. data/lib/origen/bugs.rb +45 -0
  43. data/lib/origen/callbacks.rb +35 -0
  44. data/lib/origen/chip_mode.rb +118 -0
  45. data/lib/origen/chip_package.rb +461 -0
  46. data/lib/origen/client.rb +87 -0
  47. data/lib/origen/code_generators/actions.rb +258 -0
  48. data/lib/origen/code_generators/base.rb +57 -0
  49. data/lib/origen/code_generators/bundler.rb +17 -0
  50. data/lib/origen/code_generators/gem_setup.rb +49 -0
  51. data/lib/origen/code_generators/rake.rb +13 -0
  52. data/lib/origen/code_generators/rspec.rb +12 -0
  53. data/lib/origen/code_generators/semver.rb +39 -0
  54. data/lib/origen/code_generators/timever.rb +37 -0
  55. data/lib/origen/code_generators.rb +111 -0
  56. data/lib/origen/commands/add.rb +12 -0
  57. data/lib/origen/commands/compile.rb +62 -0
  58. data/lib/origen/commands/ctags.rb +9 -0
  59. data/lib/origen/commands/dispatch.rb +22 -0
  60. data/lib/origen/commands/environment.rb +11 -0
  61. data/lib/origen/commands/fetch.rb +63 -0
  62. data/lib/origen/commands/generate.rb +130 -0
  63. data/lib/origen/commands/interactive.rb +73 -0
  64. data/lib/origen/commands/lint.rb +82 -0
  65. data/lib/origen/commands/lsf.rb +93 -0
  66. data/lib/origen/commands/merge.rb +55 -0
  67. data/lib/origen/commands/modifications.rb +12 -0
  68. data/lib/origen/commands/new.rb +113 -0
  69. data/lib/origen/commands/plugin.rb +105 -0
  70. data/lib/origen/commands/program.rb +70 -0
  71. data/lib/origen/commands/rc.rb +442 -0
  72. data/lib/origen/commands/save.rb +56 -0
  73. data/lib/origen/commands/target.rb +27 -0
  74. data/lib/origen/commands/time.rb +127 -0
  75. data/lib/origen/commands/version.rb +17 -0
  76. data/lib/origen/commands/web.rb +221 -0
  77. data/lib/origen/commands.rb +272 -0
  78. data/lib/origen/commands_global.rb +76 -0
  79. data/lib/origen/controller.rb +94 -0
  80. data/lib/origen/core_ext/array.rb +23 -0
  81. data/lib/origen/core_ext/bignum.rb +36 -0
  82. data/lib/origen/core_ext/enumerable.rb +76 -0
  83. data/lib/origen/core_ext/fixnum.rb +46 -0
  84. data/lib/origen/core_ext/hash.rb +52 -0
  85. data/lib/origen/core_ext/module.rb +14 -0
  86. data/lib/origen/core_ext/numeric.rb +126 -0
  87. data/lib/origen/core_ext/object.rb +13 -0
  88. data/lib/origen/core_ext/range.rb +7 -0
  89. data/lib/origen/core_ext/string.rb +124 -0
  90. data/lib/origen/core_ext.rb +10 -0
  91. data/lib/origen/database/key_value_store.rb +111 -0
  92. data/lib/origen/database/key_value_stores.rb +108 -0
  93. data/lib/origen/database.rb +6 -0
  94. data/lib/origen/encodings.rb +102 -0
  95. data/lib/origen/features/feature.rb +22 -0
  96. data/lib/origen/features.rb +104 -0
  97. data/lib/origen/file_handler.rb +429 -0
  98. data/lib/origen/generator/comparator.rb +56 -0
  99. data/lib/origen/generator/compiler.rb +277 -0
  100. data/lib/origen/generator/flow.rb +49 -0
  101. data/lib/origen/generator/job.rb +131 -0
  102. data/lib/origen/generator/pattern.rb +356 -0
  103. data/lib/origen/generator/pattern_finder.rb +155 -0
  104. data/lib/origen/generator/pattern_iterator.rb +55 -0
  105. data/lib/origen/generator/renderer.rb +113 -0
  106. data/lib/origen/generator/resources.rb +40 -0
  107. data/lib/origen/generator/stage.rb +89 -0
  108. data/lib/origen/generator.rb +85 -0
  109. data/lib/origen/global_methods.rb +205 -0
  110. data/lib/origen/import_manager.rb +596 -0
  111. data/lib/origen/location/base.rb +116 -0
  112. data/lib/origen/location/map.rb +83 -0
  113. data/lib/origen/location.rb +6 -0
  114. data/lib/origen/log.rb +217 -0
  115. data/lib/origen/logger_methods.rb +56 -0
  116. data/lib/origen/mode.rb +61 -0
  117. data/lib/origen/model.rb +267 -0
  118. data/lib/origen/model_initializer.rb +45 -0
  119. data/lib/origen/nvm/block_array.rb +72 -0
  120. data/lib/origen/nvm.rb +6 -0
  121. data/lib/origen/parameters/live.rb +22 -0
  122. data/lib/origen/parameters/missing.rb +28 -0
  123. data/lib/origen/parameters/set.rb +144 -0
  124. data/lib/origen/parameters.rb +107 -0
  125. data/lib/origen/pdm.rb +218 -0
  126. data/lib/origen/pins/function_proxy.rb +36 -0
  127. data/lib/origen/pins/ground_pin.rb +6 -0
  128. data/lib/origen/pins/pin.rb +860 -0
  129. data/lib/origen/pins/pin_bank.rb +349 -0
  130. data/lib/origen/pins/pin_clock.rb +124 -0
  131. data/lib/origen/pins/pin_collection.rb +492 -0
  132. data/lib/origen/pins/pin_common.rb +206 -0
  133. data/lib/origen/pins/port.rb +268 -0
  134. data/lib/origen/pins/power_pin.rb +30 -0
  135. data/lib/origen/pins.rb +696 -0
  136. data/lib/origen/registers/bit.rb +562 -0
  137. data/lib/origen/registers/bit_collection.rb +787 -0
  138. data/lib/origen/registers/container.rb +288 -0
  139. data/lib/origen/registers/domain.rb +16 -0
  140. data/lib/origen/registers/reg.rb +1406 -0
  141. data/lib/origen/registers/reg_collection.rb +24 -0
  142. data/lib/origen/registers.rb +652 -0
  143. data/lib/origen/regression_manager.rb +251 -0
  144. data/lib/origen/remote_manager.rb +340 -0
  145. data/lib/origen/revision_control/base.rb +257 -0
  146. data/lib/origen/revision_control/design_sync.rb +276 -0
  147. data/lib/origen/revision_control/git.rb +243 -0
  148. data/lib/origen/revision_control/subversion.rb +6 -0
  149. data/lib/origen/revision_control.rb +44 -0
  150. data/lib/origen/ruby_version_check.rb +131 -0
  151. data/lib/origen/site_config.rb +61 -0
  152. data/lib/origen/specs/checkers.rb +103 -0
  153. data/lib/origen/specs/creation_info.rb +17 -0
  154. data/lib/origen/specs/doc_resource.rb +91 -0
  155. data/lib/origen/specs/exhibit.rb +17 -0
  156. data/lib/origen/specs/mode_select.rb +16 -0
  157. data/lib/origen/specs/note.rb +17 -0
  158. data/lib/origen/specs/override.rb +21 -0
  159. data/lib/origen/specs/power_supply.rb +13 -0
  160. data/lib/origen/specs/spec.rb +226 -0
  161. data/lib/origen/specs/version_history.rb +14 -0
  162. data/lib/origen/specs.rb +552 -0
  163. data/lib/origen/sub_blocks.rb +298 -0
  164. data/lib/origen/tester/api.rb +277 -0
  165. data/lib/origen/tester/bdm/bdm.rb +25 -0
  166. data/lib/origen/tester/command_based_tester.rb +46 -0
  167. data/lib/origen/tester/doc/doc.rb +226 -0
  168. data/lib/origen/tester/doc/generator/flow.rb +71 -0
  169. data/lib/origen/tester/doc/generator/flow_line.rb +203 -0
  170. data/lib/origen/tester/doc/generator/test.rb +68 -0
  171. data/lib/origen/tester/doc/generator/test_group.rb +66 -0
  172. data/lib/origen/tester/doc/generator/tests.rb +47 -0
  173. data/lib/origen/tester/doc/generator.rb +126 -0
  174. data/lib/origen/tester/doc/model.rb +162 -0
  175. data/lib/origen/tester/generator/flow_control_api.rb +606 -0
  176. data/lib/origen/tester/generator/identity_map.rb +25 -0
  177. data/lib/origen/tester/generator/placeholder.rb +13 -0
  178. data/lib/origen/tester/generator/test_numberer.rb +25 -0
  179. data/lib/origen/tester/generator.rb +271 -0
  180. data/lib/origen/tester/interface.rb +154 -0
  181. data/lib/origen/tester/j750/files.rb +45 -0
  182. data/lib/origen/tester/j750/generator/flow.rb +123 -0
  183. data/lib/origen/tester/j750/generator/flow_line.rb +288 -0
  184. data/lib/origen/tester/j750/generator/patgroup.rb +111 -0
  185. data/lib/origen/tester/j750/generator/patgroups.rb +41 -0
  186. data/lib/origen/tester/j750/generator/patset.rb +111 -0
  187. data/lib/origen/tester/j750/generator/patsets.rb +41 -0
  188. data/lib/origen/tester/j750/generator/templates/flow.txt.erb +9 -0
  189. data/lib/origen/tester/j750/generator/templates/instances.txt.erb +16 -0
  190. data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +8 -0
  191. data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +10 -0
  192. data/lib/origen/tester/j750/generator/test_instance.rb +846 -0
  193. data/lib/origen/tester/j750/generator/test_instance_group.rb +60 -0
  194. data/lib/origen/tester/j750/generator/test_instances.rb +182 -0
  195. data/lib/origen/tester/j750/generator.rb +203 -0
  196. data/lib/origen/tester/j750/j750.rb +845 -0
  197. data/lib/origen/tester/j750/j750_hpt.rb +35 -0
  198. data/lib/origen/tester/j750/parser/ac_spec.rb +11 -0
  199. data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
  200. data/lib/origen/tester/j750/parser/dc_spec.rb +36 -0
  201. data/lib/origen/tester/j750/parser/dc_specs.rb +50 -0
  202. data/lib/origen/tester/j750/parser/descriptions.rb +340 -0
  203. data/lib/origen/tester/j750/parser/flow.rb +111 -0
  204. data/lib/origen/tester/j750/parser/flow_line.rb +207 -0
  205. data/lib/origen/tester/j750/parser/flows.rb +23 -0
  206. data/lib/origen/tester/j750/parser/pattern_set.rb +94 -0
  207. data/lib/origen/tester/j750/parser/pattern_sets.rb +33 -0
  208. data/lib/origen/tester/j750/parser/test_instance.rb +322 -0
  209. data/lib/origen/tester/j750/parser/test_instances.rb +26 -0
  210. data/lib/origen/tester/j750/parser/timeset.rb +15 -0
  211. data/lib/origen/tester/j750/parser/timesets.rb +0 -0
  212. data/lib/origen/tester/j750/parser.rb +104 -0
  213. data/lib/origen/tester/jlink/jlink.rb +33 -0
  214. data/lib/origen/tester/parser/description_lookup.rb +64 -0
  215. data/lib/origen/tester/parser/searchable_array.rb +32 -0
  216. data/lib/origen/tester/parser/searchable_hash.rb +32 -0
  217. data/lib/origen/tester/parser.rb +24 -0
  218. data/lib/origen/tester/time.rb +338 -0
  219. data/lib/origen/tester/timing.rb +253 -0
  220. data/lib/origen/tester/ultraflex/files.rb +45 -0
  221. data/lib/origen/tester/ultraflex/generator/flow.rb +119 -0
  222. data/lib/origen/tester/ultraflex/generator/flow_line.rb +269 -0
  223. data/lib/origen/tester/ultraflex/generator/patgroup.rb +111 -0
  224. data/lib/origen/tester/ultraflex/generator/patgroups.rb +41 -0
  225. data/lib/origen/tester/ultraflex/generator/patset.rb +111 -0
  226. data/lib/origen/tester/ultraflex/generator/patsets.rb +41 -0
  227. data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +9 -0
  228. data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +16 -0
  229. data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +8 -0
  230. data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +10 -0
  231. data/lib/origen/tester/ultraflex/generator/test_instance.rb +622 -0
  232. data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +60 -0
  233. data/lib/origen/tester/ultraflex/generator/test_instances.rb +174 -0
  234. data/lib/origen/tester/ultraflex/generator.rb +200 -0
  235. data/lib/origen/tester/ultraflex/parser/ac_spec.rb +11 -0
  236. data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
  237. data/lib/origen/tester/ultraflex/parser/dc_spec.rb +36 -0
  238. data/lib/origen/tester/ultraflex/parser/dc_specs.rb +50 -0
  239. data/lib/origen/tester/ultraflex/parser/descriptions.rb +342 -0
  240. data/lib/origen/tester/ultraflex/parser/flow.rb +111 -0
  241. data/lib/origen/tester/ultraflex/parser/flow_line.rb +207 -0
  242. data/lib/origen/tester/ultraflex/parser/flows.rb +23 -0
  243. data/lib/origen/tester/ultraflex/parser/pattern_set.rb +94 -0
  244. data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +33 -0
  245. data/lib/origen/tester/ultraflex/parser/test_instance.rb +262 -0
  246. data/lib/origen/tester/ultraflex/parser/test_instances.rb +26 -0
  247. data/lib/origen/tester/ultraflex/parser/timeset.rb +15 -0
  248. data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
  249. data/lib/origen/tester/ultraflex/parser.rb +104 -0
  250. data/lib/origen/tester/ultraflex/ultraflex.rb +759 -0
  251. data/lib/origen/tester/v93k/generator/flow.rb +63 -0
  252. data/lib/origen/tester/v93k/generator/flow_node/print.rb +10 -0
  253. data/lib/origen/tester/v93k/generator/flow_node.rb +17 -0
  254. data/lib/origen/tester/v93k/generator/pattern.rb +16 -0
  255. data/lib/origen/tester/v93k/generator/pattern_master.rb +54 -0
  256. data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +6 -0
  257. data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +11 -0
  258. data/lib/origen/tester/v93k/generator/templates/template.flow.erb +121 -0
  259. data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +9 -0
  260. data/lib/origen/tester/v93k/generator/test_function.rb +103 -0
  261. data/lib/origen/tester/v93k/generator/test_functions.rb +79 -0
  262. data/lib/origen/tester/v93k/generator/test_method.rb +46 -0
  263. data/lib/origen/tester/v93k/generator/test_methods.rb +75 -0
  264. data/lib/origen/tester/v93k/generator/test_suite.rb +54 -0
  265. data/lib/origen/tester/v93k/generator/test_suites.rb +65 -0
  266. data/lib/origen/tester/v93k/generator.rb +80 -0
  267. data/lib/origen/tester/v93k/v93k.rb +420 -0
  268. data/lib/origen/tester/vector.rb +86 -0
  269. data/lib/origen/tester/vector_generator.rb +633 -0
  270. data/lib/origen/tester/vector_pipeline.rb +150 -0
  271. data/lib/origen/tester.rb +56 -0
  272. data/lib/origen/top_level.rb +134 -0
  273. data/lib/origen/users/ldap.rb +65 -0
  274. data/lib/origen/users/user.rb +149 -0
  275. data/lib/origen/users.rb +30 -0
  276. data/lib/origen/utility/block_args.rb +93 -0
  277. data/lib/origen/utility/csv_data.rb +110 -0
  278. data/lib/origen/utility/design_sync.rb +494 -0
  279. data/lib/origen/utility/diff.rb +158 -0
  280. data/lib/origen/utility/input_capture.rb +121 -0
  281. data/lib/origen/utility/mailer.rb +143 -0
  282. data/lib/origen/utility/s_record.rb +205 -0
  283. data/lib/origen/utility/time_and_date.rb +30 -0
  284. data/lib/origen/utility.rb +12 -0
  285. data/lib/origen/version_checker.rb +117 -0
  286. data/lib/origen/version_string.rb +356 -0
  287. data/lib/origen.rb +648 -0
  288. data/lib/tasks/gem.rake +27 -22
  289. data/origen_site_config.yml +36 -0
  290. data/source_setup +17 -0
  291. data/spec/format/rgen_formatter.rb +14 -0
  292. data/templates/api_doc/README.txt.erb +24 -0
  293. data/templates/code_generators/gemfile_app.rb +4 -0
  294. data/templates/code_generators/gemfile_plugin.rb +6 -0
  295. data/templates/code_generators/gemspec.rb +33 -0
  296. data/templates/code_generators/rakefile.rb +10 -0
  297. data/templates/code_generators/spec_helper.rb +49 -0
  298. data/templates/code_generators/version.rb +8 -0
  299. data/templates/code_generators/version_time.rb +3 -0
  300. data/templates/git/gitignore.erb +33 -0
  301. data/templates/j750/_vt_flow.txt.erb +8 -0
  302. data/templates/j750/_vt_instances.txt.erb +4 -0
  303. data/templates/j750/program_sheet.txt.erb +9 -0
  304. data/templates/nanoc/Rules +74 -0
  305. data/templates/nanoc/config.yaml +77 -0
  306. data/templates/nanoc/content/favicon.ico +0 -0
  307. data/templates/nanoc/layouts/bootstrap.html.erb +63 -0
  308. data/templates/nanoc/layouts/bootstrap3.html.erb +71 -0
  309. data/templates/nanoc/layouts/freescale.html.erb +79 -0
  310. data/templates/nanoc/lib/bootstrap_filter.rb +49 -0
  311. data/templates/nanoc/lib/codeblocks_filter.rb +41 -0
  312. data/templates/nanoc/lib/default.rb +2 -0
  313. data/templates/nanoc/lib/gzip_filter.rb +16 -0
  314. data/templates/nanoc/lib/haml_code_filter.rb +41 -0
  315. data/templates/nanoc/lib/helpers.rb +1 -0
  316. data/templates/nanoc/lib/search_filter.rb +62 -0
  317. data/templates/nanoc_dynamic/content/search.js.erb +92 -0
  318. data/templates/shared/web/_logo.html +10 -0
  319. data/templates/test/_inline_sub.txt.erb +2 -0
  320. data/templates/test/environment.txt.erb +1 -0
  321. data/templates/test/inline.txt.erb +11 -0
  322. data/templates/test/inspections.txt.erb +19 -0
  323. data/templates/test/set1/_sub1.txt.erb +12 -0
  324. data/templates/test/set1/_sub4.txt.erb +1 -0
  325. data/templates/test/set1/_sub5.txt.erb +1 -0
  326. data/templates/test/set1/main.txt.erb +53 -0
  327. data/templates/test/set1/sub_dir/_sub2.txt.erb +20 -0
  328. data/templates/test/set1/sub_dir/_sub3.txt.erb +12 -0
  329. data/templates/test/set1/sub_dir/main2.txt.erb +4 -0
  330. data/templates/test/set2/template_with_no_erb_1.txt +9 -0
  331. data/templates/test/set2/template_with_no_erb_2.txt +9 -0
  332. data/templates/test/set3/_layout.html.erb +4 -0
  333. data/templates/test/set3/content.html.erb +6 -0
  334. data/templates/time/filter.rb.erb +15 -0
  335. data/templates/time/rules.rb.erb +45 -0
  336. 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