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,150 @@
1
+ module Origen
2
+ module Tester
3
+ class VectorPipeline
4
+ attr_reader :group_size, :pipeline
5
+
6
+ def initialize(group_size)
7
+ @group_size = group_size
8
+ @pipeline = []
9
+ end
10
+
11
+ # Add a vector/comment to the pipeline
12
+ def <<(vector)
13
+ if vector.is_a?(Vector)
14
+ consume_comments(vector)
15
+ if vector.repeat > 1
16
+ add_repeat_vector(vector)
17
+ else
18
+ pipeline << vector
19
+ end
20
+ else
21
+ comments << vector
22
+ end
23
+ end
24
+
25
+ # If there are complete groups sitting at the top of the pipeline
26
+ # then this will yield them back line by line, stopping when after the last
27
+ # complete group and leaving any remaining single vectors in the pipeline
28
+ # If there are no complete groups present then it will just return
29
+ def flush
30
+ while lead_group_finalized?
31
+ lead_group.each do |vector|
32
+ vector.comments.each do |comment|
33
+ yield comment
34
+ end
35
+ yield vector
36
+ end
37
+ pipeline.shift(group_size)
38
+ end
39
+ end
40
+
41
+ # Call at the end to force a flush out of any remaining vectors
42
+ def empty
43
+ if !pipeline.empty? || !comments.empty?
44
+ pipeline.each do |vector|
45
+ vector.comments.each do |comment|
46
+ yield comment
47
+ end
48
+ yield vector
49
+ end
50
+ comments.each do |comment|
51
+ yield comment
52
+ end
53
+ @pipeline = []
54
+ @comments = []
55
+ end
56
+ end
57
+
58
+ private
59
+
60
+ # Pushes a duplicate of the given vector with its repeat set to 1
61
+ # Also clears any comments associated with the vector with the rationale that we only
62
+ # want to see them the first time
63
+ def push_duplicate(vector)
64
+ v = vector.dup
65
+ v.repeat = 1
66
+ pipeline << v
67
+ vector.comments = []
68
+ end
69
+
70
+ def add_repeat_vector(vector)
71
+ count = vector.repeat
72
+ # Align to the start of a new group by splitting off single vectors
73
+ # to complete the current group
74
+ while !aligned? && count > 0
75
+ push_duplicate(vector)
76
+ count -= 1
77
+ end
78
+ if count > group_size
79
+ remainder = count % group_size
80
+ # Create a group with the required repeat
81
+ group_size.times do
82
+ push_duplicate(vector)
83
+ end
84
+ pipeline.last.repeat = (count - remainder) / group_size
85
+ # Then expand out any leftover
86
+ remainder.times do
87
+ push_duplicate(vector)
88
+ end
89
+ # For small repeats that fit within the group just expand them
90
+ else
91
+ while count > 0
92
+ push_duplicate(vector)
93
+ count -= 1
94
+ end
95
+ end
96
+ end
97
+
98
+ # Returns true of the next vector to be added to the pipeline will
99
+ # be at the start of a new group
100
+ def aligned?
101
+ (pipeline.size % group_size) == 0
102
+ end
103
+
104
+ def consume_comments(vector)
105
+ vector.comments = comments
106
+ @comments = []
107
+ end
108
+
109
+ def comments
110
+ @comments ||= []
111
+ end
112
+
113
+ # When true the lead group is complete and a further repeat of it is not possible
114
+ # Calling this will compress the 2nd group into the 1st if possible
115
+ def lead_group_finalized?
116
+ if lead_group.size == group_size
117
+ if second_group_present?
118
+ i = -1
119
+ if second_group.all? do |vector|
120
+ i += 1
121
+ pipeline[i] == vector
122
+ end
123
+ pipeline[group_size - 1].repeat += 1
124
+ group_size.times { pipeline.delete_at(group_size) }
125
+ false
126
+ else
127
+ true
128
+ end
129
+ else
130
+ false
131
+ end
132
+ else
133
+ false
134
+ end
135
+ end
136
+
137
+ def second_group_present?
138
+ second_group.size == group_size
139
+ end
140
+
141
+ def lead_group
142
+ pipeline[0..group_size - 1]
143
+ end
144
+
145
+ def second_group
146
+ pipeline[group_size..(group_size * 2) - 1]
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,56 @@
1
+ require 'active_support/concern'
2
+ module Origen
3
+ module Tester
4
+ autoload :J750, 'origen/tester/j750/j750'
5
+ autoload :J750_HPT, 'origen/tester/j750/j750_hpt'
6
+ autoload :Ultraflex, 'origen/tester/ultraflex/ultraflex'
7
+ autoload :V93K, 'origen/tester/v93k/v93k'
8
+ autoload :BDM, 'origen/tester/bdm/bdm'
9
+ autoload :JLink, 'origen/tester/jlink/jlink'
10
+ autoload :Doc, 'origen/tester/doc/doc'
11
+
12
+ autoload :Vector, 'origen/tester/vector'
13
+ autoload :VectorPipeline, 'origen/tester/vector_pipeline'
14
+ autoload :CommandBasedTester, 'origen/tester/command_based_tester'
15
+ autoload :Interface, 'origen/tester/interface'
16
+ autoload :Generator, 'origen/tester/generator'
17
+ autoload :Parser, 'origen/tester/parser'
18
+ autoload :Time, 'origen/tester/time'
19
+
20
+ extend ActiveSupport::Concern
21
+
22
+ require 'origen/tester/vector_generator'
23
+ require 'origen/tester/timing'
24
+ require 'origen/tester/api'
25
+
26
+ include VectorGenerator
27
+ include Timing
28
+ include API
29
+
30
+ included do
31
+ end
32
+
33
+ module ClassMethods # :nodoc:
34
+ # This overrides the new method of any class which includes this
35
+ # module to force the newly created instance to be registered as
36
+ # a tester with Origen
37
+ def new(*args, &block) # :nodoc:
38
+ if Origen.app.with_doc_tester?
39
+ x = Origen::Tester::Doc.allocate
40
+ if Origen.app.with_html_doc_tester?
41
+ x.html_mode = true
42
+ end
43
+ else
44
+ x = allocate
45
+ end
46
+ x.send(:initialize, *args, &block)
47
+ x.register_tester
48
+ x
49
+ end
50
+ end
51
+
52
+ def register_tester # :nodoc:
53
+ Origen.app.tester = self
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,134 @@
1
+ require 'active_support/concern'
2
+ module Origen
3
+ # Include this module to identify it as a top-level object in Origen, normally
4
+ # an object that represents the SoC/Top-level device.
5
+ #
6
+ # Origen will then fallback on this top-level object to service any register
7
+ # read/write requests or any pin requests that are generated by lower
8
+ # level objects and which cannot be fulfilled at that level.
9
+ #
10
+ # The current top level object can then be referenced at any time via
11
+ # Origen.top_level.
12
+ module TopLevel
13
+ extend ActiveSupport::Concern
14
+
15
+ included do
16
+ # Any pattern compilation or other operation that requires access to a pinmap
17
+ # will look for it via this attribute, this should return a path to the pinmap
18
+ # file to be used
19
+ attr_accessor :pinmap
20
+
21
+ # Store the current pattern compiler instance name
22
+ attr_accessor :compiler
23
+
24
+ include Origen::Model
25
+ end
26
+
27
+ def reset!
28
+ reset bang: true
29
+ end
30
+
31
+ def pinmap=(val)
32
+ @pinmap = Pathname.new(val)
33
+ end
34
+
35
+ def reset(options = {})
36
+ Origen.app.listeners_for(:before_top_level_reset).each(&:before_top_level_reset)
37
+ if options[:bang]
38
+ Origen.app.listeners_for(:shutdown, top_level: :last).each do |listener|
39
+ listener.shutdown(Pattern.create_options)
40
+ end
41
+ Origen.app.listeners_for(:on_top_level_reset!, top_level: false).each(&:on_top_level_reset!)
42
+ end
43
+ Origen.app.listeners_for(:on_top_level_reset, top_level: false).each(&:on_top_level_reset)
44
+ Origen.app.listeners_for(:reset_registers).each(&:reset_registers)
45
+ if options[:bang]
46
+ Origen.app.listeners_for(:startup).each do |listener|
47
+ listener.startup(Pattern.create_options)
48
+ end
49
+ end
50
+ Origen.app.listeners_for(:after_top_level_reset).each(&:after_top_level_reset)
51
+ end
52
+
53
+ def ip_name
54
+ @ip_name || self.class.to_s.split('::').last.symbolize
55
+ end
56
+
57
+ # Use this to specify the current package option for the given SoC.
58
+ #
59
+ # This allows different pin configurations to be specified by package.
60
+ def current_package=(val)
61
+ @current_package_id = val.is_a?(ChipPackage) ? val.id : val
62
+ end
63
+ alias_method :package=, :current_package=
64
+
65
+ # Returns the current package configuration of the pin owner, unless specifically
66
+ # specified by the application this will return nil.
67
+ def current_package(_options = {})
68
+ if @current_package_id
69
+ return _packages[@current_package_id] if _packages[@current_package_id]
70
+ fail "The package #{@current_package_id} of #{self.class} has not been defined!"
71
+ end
72
+ end
73
+ alias_method :package, :current_package
74
+
75
+ # Returns an array containing the IDs of all known configurations if no ID is supplied,
76
+ # otherwise returns an object representing the given package ID
77
+ def packages(id = nil, _options = {})
78
+ id, options = nil, id if id.is_a?(Hash)
79
+ if id
80
+ _packages[id]
81
+ else
82
+ _packages.ids
83
+ end
84
+ end
85
+
86
+ # Execute the supplied block within the context of the given package, at the end
87
+ # the model's package attribute will be restored to what it was before calling
88
+ # this method.
89
+ def with_package(id, _options = {})
90
+ orig = package
91
+ self.package = id
92
+ yield
93
+ self.package = orig
94
+ end
95
+
96
+ def add_package(id, _options = {})
97
+ p = ChipPackage.new
98
+ p.id = id
99
+ p.owner = self
100
+ yield p if block_given?
101
+ _add_package(p)
102
+ p
103
+ end
104
+
105
+ def includes_origen_top_level?
106
+ true
107
+ end
108
+
109
+ # Sets the Origen.top_level.packages array to nil. Written so packages created in memory can
110
+ # be erased so packages defined in Ruby files can be loaded
111
+ def delete_all_packages
112
+ @_packages = nil
113
+ end
114
+ alias_method :delete_all_pkgs, :delete_all_packages
115
+
116
+ private
117
+
118
+ def init_top_level
119
+ Origen.app.add_toplevel_listener(self)
120
+ end
121
+
122
+ def _packages
123
+ @_packages ||= {}
124
+ end
125
+
126
+ def _add_package(package)
127
+ if _packages[package.id]
128
+ fail "There is already a package called #{package.id}!"
129
+ else
130
+ _packages[package.id] = package
131
+ end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,65 @@
1
+ module Origen
2
+ module Users
3
+ # Interface to talk to a company's LDAP-based employee directory, an instance of this class is available
4
+ # at Origen.ldap
5
+ #
6
+ # This provides APIs to lookup public information about any user (email, phone number, etc)
7
+ class LDAP
8
+ require 'io/console'
9
+ require 'base64'
10
+ require 'net-ldap'
11
+
12
+ SERVICE_ACCOUNT = Origen.site_config.ldap_username
13
+ SERVICE_PASS = Origen.site_config.ldap_password
14
+
15
+ HOST = Origen.site_config.ldap_host
16
+ PORT = Origen.site_config.ldap_port
17
+ BASE_DN = Origen.site_config.ldap_base_dn
18
+
19
+ def available?
20
+ !!(SERVICE_ACCOUNT && SERVICE_PASS && HOST && PORT && BASE_DN)
21
+ end
22
+
23
+ # Lookup the given user in the core directory and return an object representing the user's entry
24
+ # in the FSL application directory, run the display method from the console to see the field
25
+ # names and what information is available.
26
+ # The record for the given user will be cached the first time it is generated, so this method can be
27
+ # repeatedly called from the same thread without incurring a remote fetch each time.
28
+ #
29
+ # entry = Origen.fsl.lookup("r49409")
30
+ # entry.mail # => stephen.mcginty@freescale.com
31
+ def lookup(user_or_id = Origen.current_user)
32
+ id = id(user_or_id)
33
+ unless instance_variable_defined?("@#{id.downcase}")
34
+ record = service.search(base: BASE_DN, filter: "#{Origen.site_config.ldap_user_id_attribute || 'id'}=#{id}").first
35
+ instance_variable_set("@#{id.downcase}", record)
36
+ end
37
+ instance_variable_get("@#{id.downcase}")
38
+ end
39
+
40
+ # Prints out the information available for the given core, this is useful to work out the name
41
+ # of the information that you want to pull from the object returned from lookup
42
+ def display(user_or_id = Origen.current_user)
43
+ lookup(user_or_id).each do |attribute, values|
44
+ puts " #{attribute}:"
45
+ values.each do |value|
46
+ puts " --->#{value}"
47
+ end
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def id(user_or_id)
54
+ user_or_id.respond_to?(:id) ? user_or_id.id : user_or_id
55
+ end
56
+
57
+ def service
58
+ @service ||= Net::LDAP.new host: HOST,
59
+ port: PORT,
60
+ encryption: :simple_tls,
61
+ auth: { method: :simple, username: SERVICE_ACCOUNT, password: SERVICE_PASS }
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,149 @@
1
+ module Origen
2
+ module Users
3
+ class User
4
+ require 'openssl'
5
+ require 'digest/sha1'
6
+
7
+ attr_reader :role
8
+ attr_writer :name, :email
9
+
10
+ def self.current_user_id
11
+ `whoami`.strip
12
+ end
13
+
14
+ def self.current
15
+ Origen.current_user
16
+ end
17
+
18
+ def initialize(*args)
19
+ if args.last.is_a?(Symbol)
20
+ @role = args.pop
21
+ else
22
+ @role = :user
23
+ end
24
+ if args.size == 2
25
+ @name = args.first
26
+ end
27
+ id = args.pop
28
+ if id.to_s =~ /(.*)@/
29
+ @email = id
30
+ @id = Regexp.last_match(1)
31
+ else
32
+ @id = id
33
+ end
34
+ end
35
+
36
+ # Send the user an email
37
+ #
38
+ # @example
39
+ # User.current.send subject: "Complete", message: "Your job is done!"
40
+ # User.new("r49409").send subject: "Complete", message: "Your job is done!"
41
+ def send(options)
42
+ options[:body] ||= options[:message]
43
+ options[:to] = self
44
+ Origen.mailer.send_email(options)
45
+ end
46
+
47
+ def id
48
+ @id.to_s.downcase
49
+ end
50
+ alias_method :core_id, :id
51
+
52
+ # Returns true if the user is an admin for the current application
53
+ def admin?
54
+ role == :admin
55
+ end
56
+
57
+ # Returns true if the user is the current user
58
+ def current?
59
+ id.to_s.downcase == self.class.current_user_id
60
+ end
61
+
62
+ # Returns the user's initials in lower case
63
+ def initials
64
+ initials = name.split(/\s+/).map { |n| n[0].chr }.join('')
65
+ initials.downcase
66
+ end
67
+
68
+ def name
69
+ @name || @id
70
+ end
71
+
72
+ def email
73
+ return @email if @email
74
+ if Origen.site_config.email_domain
75
+ "#{id}@#{Origen.site_config.email_domain}"
76
+ end
77
+ end
78
+
79
+ # Fetch user data from the FSL application directory
80
+ #
81
+ # @example
82
+ #
83
+ # User.new("r49409").lookup.motunixdomain # => ["cde-tx32.sps.mot.com"]
84
+ def lookup(default = 'Unknown')
85
+ data = Origen.ldap.lookup(self)
86
+ if block_given?
87
+ if data
88
+ yield data
89
+ else
90
+ default
91
+ end
92
+ else
93
+ data
94
+ end
95
+ end
96
+
97
+ # Prints all raw data available on the given user from the FSL
98
+ # application directory.
99
+ #
100
+ # Most of the useful data is already exposed through the available
101
+ # user methods, but if you want to get any of these parameters they
102
+ # can be fetched via the lookup method.
103
+ def raw
104
+ Origen.ldap.display(self)
105
+ nil
106
+ end
107
+ alias_method :display, :raw
108
+
109
+ def ==(user)
110
+ if user.is_a?(Origen::Users::User)
111
+ user.id == id
112
+ elsif user.is_a?(String)
113
+ user.downcase == id
114
+ else
115
+ super
116
+ end
117
+ end
118
+
119
+ # Provides methods to access attributes available from LDAP
120
+ def method_missing(method, *args, &block)
121
+ l = Origen.ldap.lookup(self)
122
+ if l
123
+ if l.attribute_names.include?(method)
124
+ l[method]
125
+ else
126
+ super
127
+ end
128
+ else
129
+ super
130
+ end
131
+ end
132
+
133
+ def respond_to?(method)
134
+ super || begin
135
+ if Origen.ldap.available?
136
+ Origen.ldap.lookup(self) && Origen.ldap.lookup(self).attribute_names.include?(method.to_sym)
137
+ else
138
+ false
139
+ end
140
+ end
141
+ end
142
+
143
+ # Returns a string like "Stephen McGinty <Stephen.Mcginty@freescale.com>"
144
+ def name_and_email
145
+ "#{name} <#{email}>"
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,30 @@
1
+ module Origen
2
+ # Methods related to individual users and groups
3
+ module Users
4
+ autoload :User, 'origen/users/user'
5
+ autoload :LDAP, 'origen/users/ldap'
6
+
7
+ def app_users
8
+ # Had to do some shenanigans here due to Origen.root not being available
9
+ # when this file is included, only load the users from the app once a user
10
+ # method is first called
11
+ return @app_users if @app_users
12
+ require File.join(Origen.root, 'config', 'users')
13
+ @app_users = users
14
+ end
15
+
16
+ # Returns a user object representing the current user, will return a default
17
+ # user object if the current user is not known to the generator
18
+ def current_user
19
+ core_id = Origen::Users::User.current_user_id
20
+ user = app_users.find { |user| user.core_id == core_id }
21
+ user || User.new(core_id)
22
+ end
23
+
24
+ # Returns all admin user objects
25
+ def admins
26
+ app_users.select(&:admin?)
27
+ end
28
+ alias_method :developers, :admins
29
+ end
30
+ end
@@ -0,0 +1,93 @@
1
+ module Origen
2
+ module Utility
3
+ # BlockArgs provides a neat way to pass multiple block arguments to a method
4
+ # that the method can then used in various ways.
5
+ #
6
+ # (blocks in Ruby are merely nameless methods you can pass to methods as an argument. Used to pass ruby code to a method basically.)
7
+ #
8
+ # A single BlockArgs object is an array of these blocks that can be added or
9
+ # deleted.
10
+ #
11
+ # def handle_some_blocks(options={})
12
+ #
13
+ # blockA = Origen::Utility::BlockArgs.new
14
+ # blockB = Origen::Utility::BlockArgs.new
15
+ #
16
+ # yield blockA, blockB
17
+ #
18
+ # puts "Handling blocks!"
19
+ #
20
+ # if options[:block_to_run] == :blockA
21
+ # blockA.each do |block|
22
+ # block.call
23
+ # end
24
+ # else
25
+ # blockB.each do |block|
26
+ # block.call
27
+ # end
28
+ # end
29
+ #
30
+ # puts "Done handling blocks!"
31
+ #
32
+ # end
33
+ #
34
+ # To then use the above method:
35
+ #
36
+ # handle_some_blocks(options) do |blockA, blockB|
37
+ # blockA.add do
38
+ # puts "do task 1"
39
+ # end
40
+ # blockA.add do
41
+ # puts "do task 2"
42
+ # end
43
+ # blockB.add do
44
+ # puts "do task 3"
45
+ # end
46
+ # end
47
+ #
48
+ # Many blocks can be added in this case to either the blockA or blockB BlockArg objects.
49
+ # The only reason 2 BlockArg objects are used above is that handle_some_blocks wants to use
50
+ # different blocks depending on an option argument.
51
+ #
52
+ # This is a very powerful way to put code specific to one application in a different method in
53
+ # different class (e.g. handle_some_blocks) where the code calling it doesn't need to know
54
+ # exact implementation details.
55
+ #
56
+ class BlockArgs
57
+ # any Enumerable methods also can be used
58
+ # e.g. each_with_index
59
+ include Enumerable
60
+
61
+ # Creates a new BlockArgs object
62
+ def initialize
63
+ @block_args = []
64
+ end
65
+
66
+ # Adds a block to the BlockArgs object
67
+ def add(&block)
68
+ @block_args << block
69
+ end
70
+
71
+ # Deletes a block to the BlockArgs object
72
+ def delete(&block)
73
+ @block_args.delete(block)
74
+ end
75
+
76
+ # required to enumerate objects for Enumerable
77
+ # iterator returns each block at a time
78
+ def each
79
+ @block_args.each do |arg|
80
+ yield arg
81
+ end
82
+ end
83
+
84
+ # same as each but returns index of each block
85
+ # instead of block itself.
86
+ def each_index
87
+ @block_args.each_index do |i|
88
+ yield i
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end