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,76 @@
1
+ require 'irb'
2
+ require 'irb/completion'
3
+
4
+ ARGV << '--help' if ARGV.empty?
5
+
6
+ aliases = {
7
+ 'i' => 'interactive',
8
+ 'f' => 'fetch'
9
+ }
10
+
11
+ command = ARGV.shift
12
+ command = aliases[command] || command
13
+
14
+ require 'origen/global_methods'
15
+ include Origen::GlobalMethods
16
+
17
+ if ARGV.delete('-d') || ARGV.delete('--debug')
18
+ begin
19
+ if RUBY_VERSION >= '2.0.0'
20
+ require 'byebug'
21
+ else
22
+ require 'rubygems'
23
+ require 'ruby-debug'
24
+ end
25
+ rescue LoadError
26
+ def debugger
27
+ caller[0] =~ /.*\/(\w+\.rb):(\d+).*/
28
+ puts 'The debugger gem is not installed, add the following to your Gemfile:'
29
+ puts
30
+ puts "if RUBY_VERSION >= '2.0.0'"
31
+ puts " gem 'byebug', '~>3.5'"
32
+ puts 'else'
33
+ puts " gem 'debugger', '~>1.6'"
34
+ puts 'end'
35
+ puts
36
+ end
37
+ end
38
+ Origen.enable_debugger
39
+ else
40
+ def debugger
41
+ caller[0] =~ /.*\/(\w+\.rb):(\d+).*/
42
+ puts "#{Regexp.last_match[1]}:#{Regexp.last_match[2]} - debugger statement ignored, run again with '-d' to enable it"
43
+ end
44
+ end
45
+
46
+ case command
47
+
48
+ when 'new'
49
+ require 'origen/commands/new'
50
+
51
+ when '--version', '-v'
52
+ require 'origen/commands/version'
53
+
54
+ when 'fetch', 'f'
55
+ require 'origen/commands/fetch'
56
+
57
+ when 'interactive'
58
+ IRB.start
59
+
60
+ else
61
+ puts 'Error: Command not recognized' unless ['-h', '--help'].include?(command)
62
+ puts <<-EOT
63
+ Usage: origen COMMAND [ARGS]
64
+
65
+ The following commands are available:
66
+ new Create a new Origen application or plugin. "origen new my_app" creates a
67
+ new origen application workspace in "./my_app"
68
+ interactive Start an interactive Origen console (short-cut alias: "i"), this is just
69
+ IRB with the 'origen' lib loaded automatically
70
+ fetch Automatically creates the workspace for the requested plugin and
71
+ populates the latest version of the plugin (short-cut alias: "f")
72
+
73
+ Many commands can be run with -h (or --help) for more information.
74
+ EOT
75
+ exit(1)
76
+ end
@@ -0,0 +1,94 @@
1
+ module Origen
2
+ module Controller
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def model(options = {})
7
+ options[:controller_class] = self
8
+ if options[:path]
9
+ @path_to_model = options[:path]
10
+ else
11
+ options[:model_class] = _resolve_model_class(options)
12
+ end
13
+ Origen.controllers << options
14
+ end
15
+
16
+ def path_to_model
17
+ @path_to_model
18
+ end
19
+
20
+ def _resolve_model_class(options)
21
+ class_name = options[:class_name]
22
+ if class_name
23
+ begin
24
+ klass = eval("#{_namespace}::#{class_name}")
25
+ rescue
26
+ begin
27
+ klass = eval(class_name)
28
+ rescue
29
+ begin
30
+ klass = eval("#{self}::#{class_name}")
31
+ rescue
32
+ puts "Could not find class: #{class_name}"
33
+ raise 'Unknown model class!'
34
+ end
35
+ end
36
+ end
37
+ klass
38
+ else
39
+ fail "You must supply a :class_name option when defining a controller's model!"
40
+ end
41
+ end
42
+
43
+ def _namespace
44
+ to_s.sub(/::[^:]*$/, '')
45
+ end
46
+ end
47
+
48
+ def is_a?(*args)
49
+ if model
50
+ super(*args) || model.is_a?(*args)
51
+ else
52
+ super(*args)
53
+ end
54
+ end
55
+
56
+ def model
57
+ @model ||= begin
58
+ if self.class.path_to_model
59
+ eval(self.class.path_to_model)
60
+ end
61
+ end
62
+ end
63
+
64
+ def respond_to?(*args)
65
+ if model
66
+ super(*args) || model.respond_to?(*args)
67
+ else
68
+ super(*args)
69
+ end
70
+ end
71
+
72
+ # Used to proxy all method and attribute requests not implemented on the controller
73
+ # to the model.
74
+ #
75
+ # On first call of a missing method a method is generated to avoid the missing lookup
76
+ # next time, this should be faster for repeated lookups of the same method, e.g. reg
77
+ def method_missing(method, *args, &block)
78
+ if model.respond_to?(method)
79
+ define_singleton_method(method) do |*args, &block|
80
+ model.send(method, *args, &block)
81
+ end
82
+ send(method, *args, &block)
83
+ else
84
+ super
85
+ end
86
+ end
87
+
88
+ private
89
+
90
+ def _model=(model)
91
+ @model = model
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,23 @@
1
+ class Array
2
+ def ids
3
+ map(&:id)
4
+ end
5
+
6
+ def dups?
7
+ find { |e| rindex(e) != index(e) } ? true : false
8
+ end
9
+
10
+ def dups
11
+ (select { |e| rindex(e) != index(e) }).uniq
12
+ end
13
+
14
+ def dups_with_index
15
+ return {} unless self.dups?
16
+ hash = Hash.new { |h, k| h[k] = [] }
17
+ each_with_index do |val, idx|
18
+ hash[val] << idx
19
+ end
20
+ hash.delete_if { |_k, v| v.size == 1 }
21
+ hash
22
+ end
23
+ end
@@ -0,0 +1,36 @@
1
+ class Bignum
2
+ # Extend Fixnum to enable 10.cycles
3
+ def cycles
4
+ if block_given?
5
+ times do
6
+ yield
7
+ Origen.app.tester.cycle
8
+ end
9
+ else
10
+ Origen.app.tester.cycle(repeat: self)
11
+ end
12
+ end
13
+ alias_method :cycle, :cycles
14
+
15
+ alias_method :old_bit_select, :[]
16
+ def [](*args)
17
+ if args.length == 1 && !args.first.is_a?(Range)
18
+ old_bit_select(args.first)
19
+ else
20
+ if args.first.is_a?(Range)
21
+ msb = args.first.first
22
+ lsb = args.first.last
23
+ else
24
+ msb = args.first
25
+ lsb = args.last
26
+ end
27
+ (self >> lsb) & 0.ones_comp(msb - lsb + 1)
28
+ end
29
+ end
30
+
31
+ def ones_comp(num_bits)
32
+ self ^ ((1 << num_bits) - 1)
33
+ end
34
+ alias_method :ones_complement, :ones_comp
35
+ alias_method :ones_compliment, :ones_comp
36
+ end
@@ -0,0 +1,76 @@
1
+ module Enumerable
2
+ PRIMATIVES = [TrueClass, FalseClass, NilClass, Integer, Float, String, Symbol, Regexp, Complex, Rational, Fixnum, Bignum]
3
+
4
+ def debug(msg)
5
+ Origen.log.debug(msg)
6
+ end
7
+
8
+ # Returns a list of primitives and/or complex objects found within an enumerable object
9
+ # It ignores empty or nil values by default but is configurable
10
+ # The method is recusive and will run until all enumerable objects have been examined
11
+ def list(options = {})
12
+ options = {
13
+ nil_or_empty: false,
14
+ flatten: [], # Can be a single class or an array of classes to 'flatten' when enumerating (treated as a single value)
15
+ select: [], # Select certain complex data types for enumeration
16
+ ignore: [], # Ignore certain complex data types for enumeration
17
+ to_s: false # If set to true this will convert a complex object called with 'flatten' option to a String
18
+ }.update(options)
19
+ list_array ||= []
20
+ [:ignore, :select, :flatten].each do |opt|
21
+ options[opt] = [options[opt]] unless options[opt].is_a? Array
22
+ end
23
+ unless options[:flatten].empty? || options[:select].empty?
24
+ fail "Cannot have the same arguments for 'flatten' and 'select' options" unless (options[:flatten] & options[:select]).empty?
25
+ end
26
+ unless options[:flatten].empty? || options[:ignore].empty?
27
+ fail "Cannot have the same arguments for 'flatten' and 'ignore' options" unless (options[:flatten] & options[:ignore]).empty?
28
+ end
29
+ unless options[:ignore].empty? || options[:select].empty?
30
+ fail "Cannot have the same arguments for 'ignore' and 'select' options" unless (options[:ignore] & options[:select]).empty?
31
+ end
32
+ if self.respond_to?(:empty?) && self.empty?
33
+ list_array << self if options[:nil_or_empty]
34
+ else
35
+ each do |k, v|
36
+ self.is_a?(Hash) ? item = v : item = k
37
+ klass = item.class.to_s
38
+ superklass = item.class.superclass.to_s
39
+ if options[:flatten].include? item.class
40
+ if item.respond_to?(:empty?)
41
+ next if item.empty? && options[:nil_or_empty] == false
42
+ end
43
+ debug "Adding current enumerable #{klass} to list as a flat object, will not enumerate through it..."
44
+ if options[:to_s] == true
45
+ list_array << "#{superklass}::#{klass}"
46
+ else
47
+ list_array << item
48
+ end
49
+ next
50
+ else
51
+ next unless options[:select].empty? || options[:select].include?(item.class) || PRIMATIVES.include?(item.class)
52
+ next if options[:ignore].include?(item.class)
53
+ case item
54
+ when NilClass
55
+ list_array << item if options[:nil_or_empty]
56
+ when Hash, Array, Range
57
+ # debugger if item == [] && $bac == 1
58
+ if item.empty?
59
+ list_array << [] if options[:nil_or_empty]
60
+ else
61
+ list_array += item.list(options)
62
+ end
63
+ when Struct
64
+ list_array += item.list(options)
65
+ when String
66
+ next if item.empty? && options[:nil_or_empty] == false
67
+ list_array << item
68
+ else
69
+ list_array << item
70
+ end
71
+ end
72
+ end
73
+ end
74
+ list_array
75
+ end
76
+ end
@@ -0,0 +1,46 @@
1
+ class Fixnum
2
+ # Extend Fixnum to enable 10.cycles
3
+ def cycles
4
+ if block_given?
5
+ times do
6
+ yield
7
+ Origen.app.tester.cycle
8
+ end
9
+ else
10
+ Origen.app.tester.cycle(repeat: self)
11
+ end
12
+ end
13
+ alias_method :cycle, :cycles
14
+
15
+ alias_method :old_bit_select, :[]
16
+ def [](*args)
17
+ if args.length == 1 && !args.first.is_a?(Range)
18
+ old_bit_select(args.first)
19
+ else
20
+ if args.first.is_a?(Range)
21
+ msb = args.first.first
22
+ lsb = args.first.last
23
+ else
24
+ msb = args.first
25
+ lsb = args.last
26
+ end
27
+ (self >> lsb) & 0.ones_comp(msb - lsb + 1)
28
+ end
29
+ end
30
+
31
+ def ones_comp(num_bits)
32
+ self ^ ((1 << num_bits) - 1)
33
+ end
34
+ alias_method :ones_complement, :ones_comp
35
+ alias_method :ones_compliment, :ones_comp
36
+
37
+ def to_bool
38
+ if self == 1
39
+ return true
40
+ elsif self == 0
41
+ return false
42
+ else
43
+ return nil
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,52 @@
1
+ require 'active_support/core_ext/hash/indifferent_access'
2
+
3
+ class Hash
4
+ def ids
5
+ keys
6
+ end
7
+
8
+ # Only updates the common keys that exist in self
9
+ def update_common(hash)
10
+ each_key do |k|
11
+ self[k] = hash[k] if hash.key? k
12
+ end
13
+ end
14
+
15
+ # Boolean method to check if self and another hash have intersecting keys
16
+ def intersect?(hash)
17
+ (keys.to_set & hash.keys.to_set).empty? ? false : true
18
+ end
19
+
20
+ # Returns a hash containing the intersecting keys between self and another hash
21
+ def intersections(hash)
22
+ (keys.to_set & hash.keys.to_set).to_a
23
+ end
24
+
25
+ # Filter a hash by a key filter of various types
26
+ def filter(filter)
27
+ filtered_hash = {}
28
+ select_logic = case filter
29
+ when String then 'k[Regexp.new(filter)]'
30
+ when (Fixnum || Integer || Float || Numeric) then "k[Regexp.new('#{filter}')]"
31
+ when Regexp then 'k[filter]'
32
+ when Symbol then 'k == filter'
33
+ when NilClass then true
34
+ else true
35
+ end
36
+ # rubocop:disable UnusedBlockArgument
37
+ filtered_hash = select do |k, v|
38
+ [TrueClass, FalseClass].include?(select_logic.class) ? select_logic : !!eval(select_logic)
39
+ end
40
+ filtered_hash
41
+ end
42
+
43
+ # Returns the longest key as measured by String#length
44
+ def longest_key
45
+ keys.map(&:to_s).max_by(&:length)
46
+ end
47
+
48
+ # Returns the longest key as measured by String#length
49
+ def longest_value
50
+ values.map(&:to_s).max_by(&:length)
51
+ end
52
+ end
@@ -0,0 +1,14 @@
1
+ class Module
2
+ def alias_accessor(new, orig)
3
+ alias_reader(new, orig)
4
+ alias_writer(new, orig)
5
+ end
6
+
7
+ def alias_writer(new, orig)
8
+ alias_method("#{new}=", "#{orig}=") if method_defined?("#{orig}=")
9
+ end
10
+
11
+ def alias_reader(new, orig)
12
+ alias_method(new, orig) if method_defined?(orig)
13
+ end
14
+ end
@@ -0,0 +1,126 @@
1
+ class Numeric
2
+ def to_hex
3
+ "0x#{to_s(16).upcase}"
4
+ end
5
+
6
+ def to_bin
7
+ "0b#{to_s(2)}"
8
+ end
9
+
10
+ # Converts a number to a String representing binary number
11
+ # Requires width of bit string for padding. If the width is
12
+ # less than the number of bits required to represent the number
13
+ # the width argument is meaningless.
14
+ def to_bitstring(width)
15
+ '%0*b' % [width, self]
16
+ end
17
+
18
+ # Reverses the bit representation of a number and returns
19
+ # the new value. Useful when changing register data based on bit order
20
+ def reverse_bits(width)
21
+ result = 0
22
+ 0.upto(width - 1) do |i|
23
+ result += self[i] * 2**(width - 1 - i)
24
+ end
25
+ result
26
+ end
27
+
28
+ %w(GHz Ghz GTs Gts).each do |m|
29
+ define_method m do
30
+ self * 1_000_000_000
31
+ end
32
+ end
33
+
34
+ %w(MHz Mhz MTs Mts).each do |m|
35
+ define_method m do
36
+ self * 1_000_000
37
+ end
38
+ end
39
+
40
+ %w(GB).each do |m|
41
+ define_method m do
42
+ self * 1_024 * 1_024 * 1_024
43
+ end
44
+ end
45
+
46
+ %w(MB).each do |m|
47
+ define_method m do
48
+ self * 1_024 * 1_024
49
+ end
50
+ end
51
+
52
+ %w(to_GB).each do |m|
53
+ define_method m do
54
+ result = self / 1_024 / 1_024 / 1_024
55
+ if result == Integer(result)
56
+ return Integer(result)
57
+ else
58
+ return result
59
+ end
60
+ end
61
+ end
62
+
63
+ %w(to_MB).each do |m|
64
+ define_method m do
65
+ result = to_f / 1_024 / 1_024
66
+ if result == Integer(result)
67
+ return Integer(result)
68
+ else
69
+ return result
70
+ end
71
+ end
72
+ end
73
+
74
+ %w(kHz KHz Khz kO ko kOhm kohm).each do |m|
75
+ define_method m do
76
+ self * 1_000
77
+ end
78
+ end
79
+
80
+ %w(kB KB).each do |m|
81
+ define_method m do
82
+ self * 1_024
83
+ end
84
+ end
85
+
86
+ %w(to_kB to_KB).each do |m|
87
+ define_method m do
88
+ result = to_f / 1_024
89
+ if result == Integer(result)
90
+ return Integer(result)
91
+ else
92
+ return result
93
+ end
94
+ end
95
+ end
96
+
97
+ %w(v V s S a A Hz Ts Ohm ohm O o).each do |m|
98
+ define_method m do
99
+ self
100
+ end
101
+ end
102
+
103
+ %w(mv mV ms mS ma mA mo mO mOhm mohm).each do |m|
104
+ define_method m do
105
+ self / 1_000.0
106
+ end
107
+ end
108
+
109
+ %w(uv uV us uS ua uA).each do |m|
110
+ define_method m do
111
+ self / 1_000_000.0
112
+ end
113
+ end
114
+
115
+ %w(nv nV ns nS na nA).each do |m|
116
+ define_method m do
117
+ self / 1_000_000_000.0
118
+ end
119
+ end
120
+
121
+ %w(pv pV ps pS pa pA).each do |m|
122
+ define_method m do
123
+ self / 1_000_000_000_000.0
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,13 @@
1
+ class Object
2
+ # Tries the given methods and returns the first one to return a value,
3
+ # ultimately returns nil if no value is found.
4
+ def try(*methods)
5
+ methods.each do |method|
6
+ if self.respond_to?(method)
7
+ val = send(method)
8
+ return val if val
9
+ end
10
+ end
11
+ nil
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ class Range
2
+ def reverse
3
+ first = self.first
4
+ last = self.last
5
+ last..first
6
+ end
7
+ end
@@ -0,0 +1,124 @@
1
+ require 'active_support/core_ext/string/inflections'
2
+ begin
3
+ require 'scrub_rb'
4
+ rescue LoadError
5
+ # Temporary patch as the scrub_rb gem is not installed to the central Ruby installation.
6
+ # This means that when running Origen outside of an application this functionality is not
7
+ # available (which is fine), within an application the gem will be loaded correctly by
8
+ # Bundler and the gem will require quite happily.
9
+ end
10
+
11
+ class String
12
+ def to_dec
13
+ if self =~ /0x(.*)/
14
+ Regexp.last_match[1].to_i(16)
15
+ elsif self =~ /0b(.*)/
16
+ Regexp.last_match[1].to_i(2)
17
+ else
18
+ to_i
19
+ end
20
+ end
21
+
22
+ def escape_underscores
23
+ gsub('_', '\_')
24
+ end
25
+ alias_method :escape_underscore, :escape_underscores
26
+
27
+ def camel_case
28
+ Origen.deprecate "String#camel_case! is deprecated, use String#camelcase instead, or if you want to get rid of spaces: my_string.gsub(' ', '_').camelcase"
29
+ gsub(/\s+/, '_').split('_').map(&:capitalize).join
30
+ end
31
+
32
+ def pad_leading_zeros(width)
33
+ str = self
34
+ (0..(width - size) - 1).each { str = '0' + str }
35
+ str
36
+ end
37
+
38
+ def to_lines(length)
39
+ lines = []
40
+ line = []
41
+ len = 0
42
+ split(/\s+/).each do |word|
43
+ if (len + word.length) > length
44
+ lines << line.join(' ')
45
+ line = []
46
+ len = 0
47
+ end
48
+ line << word
49
+ len += word.length + 1 # For the trailing space
50
+ end
51
+ lines << line.join(' ') unless line.empty?
52
+ lines
53
+ end
54
+
55
+ # Sanitizes the string for conversion to a symbol and returns a lower
56
+ # cased symbol version of the string
57
+ def symbolize
58
+ gsub(/(\n|\s|\(|\)|\.|\[|\]|-|{|})/, '_').downcase.to_sym
59
+ end
60
+
61
+ # acronyms
62
+ def to_snakecase!
63
+ Origen.deprecate 'String#to_snakecase! is deprecated, use String#underscore instead since it is aware of FSL acronyms'
64
+ gsub!(/\s+/, '')
65
+ g = gsub!(/(.)([A-Z])/, '\1_\2');
66
+ d = downcase!
67
+ g || d
68
+ end
69
+ alias_method :snakecase!, :to_snakecase!
70
+
71
+ def to_snakecase
72
+ Origen.deprecate 'String#to_snakecase is deprecated, use String#underscore instead since it is aware of FSL acronyms'
73
+ dup.tap(&:to_snakecase!)
74
+ end
75
+ alias_method :snakecase, :to_snakecase
76
+
77
+ def squeeze_lines
78
+ split(/\n+/).join(' ').squeeze(' ')
79
+ end
80
+
81
+ # Attempt to convert a String to a boolean answer
82
+ def to_bool
83
+ if self == true || self =~ (/^(true|t|yes|y|1)$/i)
84
+ return true
85
+ elsif self == false || self.empty? || self =~ (/^(false|f|no|n|0)$/i)
86
+ return false
87
+ else
88
+ return nil
89
+ end
90
+ end
91
+
92
+ # Check if a String is a numeric
93
+ def is_numeric?
94
+ return true if self =~ /\A\d+\Z/
95
+ true if Float(self) rescue false # rubocop:disable Style/RescueModifier
96
+ end
97
+ alias_method :numeric?, :is_numeric?
98
+
99
+ # Convert the String to a Numeric (Float or Integer)
100
+ def to_numeric
101
+ if self.numeric?
102
+ if to_i == to_f
103
+ to_i
104
+ else
105
+ to_f
106
+ end
107
+ else
108
+ fail "'#{self}' cannot be converted to a Numeric, exiting..."
109
+ end
110
+ end
111
+ alias_method :to_number, :to_numeric
112
+
113
+ # Capitalize every word
114
+ def titleize(options = {})
115
+ options = {
116
+ keep_specials: false
117
+ }.update(options)
118
+ if options[:keep_specials]
119
+ split.map(&:capitalize).join(' ')
120
+ else
121
+ split(/ |\_|\-/).map(&:capitalize).join(' ')
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,10 @@
1
+ require 'origen/core_ext/object'
2
+ require 'origen/core_ext/string'
3
+ require 'origen/core_ext/fixnum'
4
+ require 'origen/core_ext/bignum'
5
+ require 'origen/core_ext/numeric'
6
+ require 'origen/core_ext/module'
7
+ require 'origen/core_ext/hash'
8
+ require 'origen/core_ext/array'
9
+ require 'origen/core_ext/range'
10
+ require 'origen/core_ext/enumerable'