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,174 @@
1
+ module Origen
2
+ module Tester
3
+ class Ultraflex
4
+ module Generator
5
+ class TestInstances
6
+ include Origen::Tester::Generator
7
+
8
+ TEMPLATE = "#{Origen.top}/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb"
9
+ OUTPUT_POSTFIX = 'instances'
10
+
11
+ class IndexedString < ::String
12
+ attr_accessor :index
13
+
14
+ def name
15
+ self
16
+ end
17
+ end
18
+
19
+ def add(name, type, options = {})
20
+ options = {
21
+ test_instance_class: TestInstance
22
+ }.merge(options)
23
+ ins = options.delete(:test_instance_class).new(name, type, options)
24
+ if @current_group
25
+ @current_group << ins
26
+ else
27
+ collection << ins
28
+ end
29
+ c = Origen.interface.consume_comments
30
+ Origen.interface.descriptions.add_for_test_definition(name, c)
31
+ ins
32
+ end
33
+
34
+ # IG-XL doesn't have a formal instance group type and instead declares them anonymously
35
+ # whenever test instances of the same name appear consecutively in the test instance sheet.
36
+ # However when it comes to generating a test program life becomes much easier if we have
37
+ # a way to explicitly declare instances as part of a group - this makes duplicate tracking
38
+ # and sorting of the test instance sheet much easier.
39
+ #
40
+ # Use this method to generate instance groups via a block. Within the the block you should
41
+ # generate instances as normal and they will automatically be assigned to the current group.
42
+ # Note that the name of the instances generated within the group is discarded and replaced
43
+ # with the name of the group. Origen automatically appends "grp" to this name to highlight
44
+ # instances that were generated as part of the group.
45
+ #
46
+ # test_instances.group("erase_all_blocks") do |group|
47
+ # # Generate instances here as normal
48
+ # test_instances.functional("erase_blk0")
49
+ # test_instances.functional("erase_blk1")
50
+ # end
51
+ #
52
+ # The group object is passed into the block but usually you should not need to interact
53
+ # with this directly except maybe to set the name if it is not yet established at the point
54
+ # where the group is initiated:
55
+ #
56
+ # test_instances.group do |group|
57
+ # # Generate instances here as normal
58
+ # group.name = "group_blah"
59
+ # end
60
+ #
61
+ # A common way to generate groups is to create a helper method in your application which
62
+ # is responsible for creating groups as required:
63
+ #
64
+ # def group_wrapper(name, options)
65
+ # if options[:by_block]
66
+ # test_instances.group(name) do |group|
67
+ # yield group
68
+ # end
69
+ # else
70
+ # yield
71
+ # end
72
+ # end
73
+ #
74
+ # In that case the group argument becomes quite useful for branching based on whether you
75
+ # are generating a group or standalone instances:
76
+ #
77
+ # group_wrapper(name, options) do |group|
78
+ # if group
79
+ # # Generate group instances
80
+ # else
81
+ # # Generate standalone instances
82
+ # end
83
+ # end
84
+ def group(name = nil, options = {})
85
+ name, options = nil, name if name.is_a?(Hash)
86
+ @current_group = TestInstanceGroup.new(name, options)
87
+ collection << @current_group
88
+ yield @current_group
89
+ @current_group = nil
90
+ end
91
+ alias_method :add_group, :group
92
+
93
+ def finalize(_options = {}) # :nodoc:
94
+ uniq!
95
+ sort!
96
+ end
97
+
98
+ def uniq! # :nodoc:
99
+ uniques = []
100
+ versions = {}
101
+ multi_version_tests = {}
102
+ collection.each do |instance|
103
+ # If a uniquely named instance is found add it, otherwise update the version
104
+ # of the current instance to match that of the existing instance that it duplicates
105
+ unless uniques.any? do |i|
106
+ if i == instance
107
+ instance.version = i.version
108
+ true
109
+ else
110
+ false
111
+ end
112
+ end
113
+ if instance.respond_to?(:version=)
114
+ versions[instance.unversioned_name] ||= 0
115
+ versions[instance.unversioned_name] += 1
116
+ if versions[instance.unversioned_name] > 1
117
+ multi_version_tests[instance.unversioned_name] = true
118
+ end
119
+ instance.version = versions[instance.unversioned_name]
120
+ end
121
+ uniques << instance
122
+ end
123
+ end
124
+ # This final loop disables the version identifier for tests that have only a single version,
125
+ # this makes it clearer when multiple versions exist - whenever you see a v1 you know there
126
+ # is at least a v2 also.
127
+ collection.map! do |instance|
128
+ if instance.respond_to?(:version=)
129
+ unless multi_version_tests[instance.unversioned_name]
130
+ instance.append_version = false
131
+ end
132
+ end
133
+ instance
134
+ end
135
+ self.collection = uniques
136
+ end
137
+
138
+ def sort! # :nodoc:
139
+ # Present the instances in the final sheet in alphabetical order
140
+ collection.map!.with_index do |ins, _i|
141
+ if ins.is_a?(String) # Can happen if content has been rendered in from a template
142
+ ins = IndexedString.new(ins)
143
+ end
144
+ ins
145
+ end
146
+ collection.sort! { |a, b| [a.name.to_s] <=> [b.name.to_s] }
147
+ end
148
+
149
+ def bpmu(name, options = {})
150
+ add(name, :board_pmu, options)
151
+ end
152
+ alias_method :board_pmu, :bpmu
153
+
154
+ def ppmu(name, options = {})
155
+ add(name, :pin_pmu, options)
156
+ end
157
+ alias_method :pin_pmu, :ppmu
158
+
159
+ def functional(name, options = {})
160
+ add(name, :functional, options)
161
+ end
162
+
163
+ def empty(name, options = {})
164
+ add(name, :empty, options)
165
+ end
166
+
167
+ def other(name, options = {})
168
+ add(name, :other, options)
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,200 @@
1
+ require 'active_support/concern'
2
+
3
+ module Origen
4
+ module Tester
5
+ class Ultraflex
6
+ module Generator
7
+ extend ActiveSupport::Concern
8
+
9
+ autoload :TestInstance, 'origen/tester/ultraflex/generator/test_instance'
10
+ autoload :TestInstanceGroup, 'origen/tester/ultraflex/generator/test_instance_group'
11
+ autoload :TestInstances, 'origen/tester/ultraflex/generator/test_instances'
12
+ autoload :Patset, 'origen/tester/ultraflex/generator/patset'
13
+ autoload :Patsets, 'origen/tester/ultraflex/generator/patsets'
14
+ autoload :Patgroup, 'origen/tester/ultraflex/generator/patgroup'
15
+ autoload :Patgroups, 'origen/tester/ultraflex/generator/patgroups'
16
+ autoload :Flow, 'origen/tester/ultraflex/generator/flow'
17
+ autoload :FlowLine, 'origen/tester/ultraflex/generator/flow_line'
18
+ autoload :Placeholder, 'origen/tester/generator/placeholder'
19
+
20
+ included do
21
+ include Origen::Tester::Interface # adds the interface helpers/Origen hook-up
22
+ include Origen::Tester::Generator::FlowControlAPI::Interface
23
+ PLATFORM = Origen::Tester::Ultraflex
24
+ end
25
+
26
+ def reset_globals
27
+ flow.reset_globals
28
+ @@test_instances_filename = nil
29
+ @@patsets_filename = nil
30
+ @@patgroups_filename = nil
31
+ @@test_instances_filename = nil
32
+ @@patsets_filename = nil
33
+ @@patgroups_filename = nil
34
+ @@test_instance_sheets = nil
35
+ @@patset_sheets = nil
36
+ @@flow_sheets = nil
37
+ @@patgroup_sheets = nil
38
+ end
39
+
40
+ # Convenience method to allow the current name for the test instance,
41
+ # patsets and patgroups sheets to be set to the same value.
42
+ #
43
+ # # my ultraflex interface
44
+ #
45
+ # resources_filename = "common"
46
+ #
47
+ # # The above is equivalent to:
48
+ #
49
+ # test_instances_filename = "common"
50
+ # patsets_filename = "common"
51
+ # patgroups_filename = "common"
52
+ def resources_filename=(name)
53
+ self.test_instances_filename = name
54
+ self.patsets_filename = name
55
+ self.patgroups_filename = name
56
+ end
57
+
58
+ # Set the name of the current test instances sheet. This does not change
59
+ # the name of the current sheet, but rather sets the name of the sheet that
60
+ # will be generated the next time you access test_instances.
61
+ def test_instances_filename=(name)
62
+ @@test_instances_filename = name
63
+ end
64
+
65
+ # Set the name of the current pattern sets sheet. This does not change
66
+ # the name of the current sheet, but rather sets the name of the sheet that
67
+ # will be generated the next time you access patsets.
68
+ def patsets_filename=(name)
69
+ @@patsets_filename = name
70
+ end
71
+
72
+ # Set the name of the current pattern groups sheet. This does not change
73
+ # the name of the current sheet, but rather sets the name of the sheet that
74
+ # will be generated the next time you access patgroups.
75
+ def patgroups_filename=(name)
76
+ @@patgroups_filename = name
77
+ end
78
+
79
+ # Returns the name of the current test instances sheet
80
+ def test_instances_filename
81
+ @@test_instances_filename ||= 'global'
82
+ end
83
+
84
+ # Returns the name of the current pat sets sheet
85
+ def patsets_filename
86
+ @@patsets_filename ||= 'global'
87
+ end
88
+
89
+ # Returns the name of the current pat groups sheet
90
+ def patgroups_filename
91
+ @@patgroups_filename ||= 'global'
92
+ end
93
+
94
+ # Returns a hash containing all test instance sheets
95
+ def test_instance_sheets
96
+ @@test_instance_sheets ||= {}
97
+ end
98
+
99
+ # Returns a hash containing all pat set sheets
100
+ def patset_sheets
101
+ @@patset_sheets ||= {}
102
+ end
103
+
104
+ # Returns a hash containing all flow sheets
105
+ def flow_sheets
106
+ @@flow_sheets ||= {}
107
+ end
108
+
109
+ # Returns a hash containing all pat group sheets
110
+ def patgroup_sheets
111
+ @@patgroup_sheets ||= {}
112
+ end
113
+
114
+ # Returns an array containing all sheet generators where a sheet generator is a flow,
115
+ # test instance, patset or pat group sheet.
116
+ # All Origen program generators must implement this method
117
+ def sheet_generators # :nodoc:
118
+ g = []
119
+ [flow_sheets, test_instance_sheets, patset_sheets, patgroup_sheets].each do |sheets|
120
+ sheets.each do |_name, sheet|
121
+ g << sheet
122
+ end
123
+ end
124
+ g
125
+ end
126
+
127
+ # Returns an array containing all flow sheet generators.
128
+ # All Origen program generators must implement this method
129
+ def flow_generators
130
+ g = []
131
+ flow_sheets.each do |_name, sheet|
132
+ g << sheet
133
+ end
134
+ g
135
+ end
136
+
137
+ # Returns the current test instances sheet (as defined by the current value of
138
+ # test_instances_filename).
139
+ #
140
+ # Pass in a filename argument to have a specific sheet returned instead.
141
+ #
142
+ # If the sheet does not exist yet it will be created.
143
+ def test_instances(filename = test_instances_filename)
144
+ f = filename.to_sym
145
+ return test_instance_sheets[f] if test_instance_sheets[f]
146
+ t = TestInstances.new
147
+ t.filename = f
148
+ test_instance_sheets[f] = t
149
+ end
150
+
151
+ # Returns the current pattern sets sheet (as defined by the current value of
152
+ # patsets_filename).
153
+ #
154
+ # Pass in a filename argument to have a specific sheet returned instead.
155
+ #
156
+ # If the sheet does not exist yet it will be created.
157
+ def patsets(filename = patsets_filename)
158
+ f = filename.to_sym
159
+ return patset_sheets[f] if patset_sheets[f]
160
+ p = Patsets.new
161
+ p.filename = f
162
+ patset_sheets[f] = p
163
+ end
164
+ alias_method :pat_sets, :patsets
165
+ alias_method :pattern_sets, :patsets
166
+
167
+ # Returns the current flow sheet (as defined by the name of the current top
168
+ # level flow source file).
169
+ #
170
+ # Pass in a filename argument to have a specific sheet returned instead.
171
+ #
172
+ # If the sheet does not exist yet it will be created.
173
+ def flow(filename = Origen.file_handler.current_file.basename('.rb').to_s)
174
+ f = filename.to_sym
175
+ return flow_sheets[f] if flow_sheets[f]
176
+ p = Flow.new
177
+ p.inhibit_output if Origen.interface.resources_mode?
178
+ p.filename = f
179
+ flow_sheets[f] = p
180
+ end
181
+
182
+ # Returns the current pattern groups sheet (as defined by the current value of
183
+ # patgroups_filename).
184
+ #
185
+ # Pass in a filename argument to have a specific sheet returned instead.
186
+ #
187
+ # If the sheet does not exist yet it will be created.
188
+ def patgroups(filename = patgroups_filename)
189
+ f = filename.to_sym
190
+ return patgroup_sheets[f] if patgroup_sheets[f]
191
+ p = Patgroups.new
192
+ p.filename = f
193
+ patgroup_sheets[f] = p
194
+ end
195
+ alias_method :pat_groups, :patgroups
196
+ alias_method :pattern_groups, :patgroups
197
+ end
198
+ end
199
+ end
200
+ end
@@ -0,0 +1,11 @@
1
+ module Origen
2
+ module Tester
3
+ class Ultraflex
4
+ class Parser
5
+ class ACSpec
6
+ attr_accessor :collection
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
File without changes
@@ -0,0 +1,36 @@
1
+ module Origen
2
+ module Tester
3
+ class Ultraflex
4
+ class Parser
5
+ class DCSpec
6
+ attr_accessor :parser
7
+ attr_accessor :name, :categories
8
+ alias_method :symbol, :name
9
+
10
+ def initialize(name, categories, options = {})
11
+ @parser = options[:parser]
12
+ @name = name
13
+ @categories = categories
14
+ @values = {}
15
+ end
16
+
17
+ def add_values(components)
18
+ @categories.each_with_index do |category, i|
19
+ @values[category] ||= {}
20
+ @values[category]['Typ'] ||= components[5 + (i * 3) + 0]
21
+ @values[category]['Min'] ||= components[5 + (i * 3) + 1]
22
+ @values[category]['Max'] ||= components[5 + (i * 3) + 2]
23
+ end
24
+ end
25
+
26
+ def lookup(category, selector)
27
+ v = @values[category]
28
+ if v
29
+ v[selector]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,50 @@
1
+ module Origen
2
+ module Tester
3
+ class Ultraflex
4
+ class Parser
5
+ class DCSpecs < Origen::Tester::Parser::SearchableHash
6
+ attr_accessor :parser
7
+
8
+ def initialize(options = {})
9
+ @parser = options[:parser]
10
+ end
11
+
12
+ def import(file)
13
+ @categories = []
14
+ File.readlines(file).each do |line|
15
+ unless line.strip.empty?
16
+ components = line.split("\t")
17
+ if components[3] == 'Selector'
18
+ extract_categories(components)
19
+ else
20
+ unless components[1] == 'DC Specs' || components[1] == 'Symbol'
21
+ extract_spec(components)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ def inspect
29
+ "<DCSpecs: #{size}>"
30
+ end
31
+
32
+ def extract_categories(components)
33
+ components.each_with_index do |val, i|
34
+ if i > 4
35
+ @categories << val unless val.strip.empty?
36
+ end
37
+ end
38
+ @categories.uniq!
39
+ end
40
+
41
+ def extract_spec(components)
42
+ name = components[1]
43
+ self[name] ||= DCSpec.new(name, @categories, parser: parser)
44
+ self[name].add_values(components)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end