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,91 @@
1
+ module Origen
2
+ module Specs
3
+ # This class is used to store text information to help with documentation processes
4
+ class Doc_Resource
5
+ attr_accessor :mode, :type, :sub_type, :audience, :table_title
6
+ attr_accessor :note_refs, :exhibit_refs, :before_table, :after_table, :doc_options
7
+
8
+ def initialize(selector = {}, table_title = {}, text = {}, options = {})
9
+ @mode = selector[:mode]
10
+ @type = selector[:type]
11
+ @sub_type = selector[:sub_type]
12
+ @audience = selector[:audience]
13
+ @table_title = table_title[:title]
14
+ @note_refs = table_title[:note_refs]
15
+ @exhibit_refs = table_title[:exhibit_refs]
16
+ @before_table = text[:before]
17
+ @after_table = text[:after]
18
+ @doc_options = options
19
+ end
20
+
21
+ def to_xml
22
+ tmp = {}
23
+ tmp['mode'] = @mode unless @mode.nil?
24
+ tmp['type'] = @type unless @type.nil?
25
+ tmp['sub_type'] = @sub_type unless @sub_type.nil?
26
+ tmp['audience'] = @audience unless @audience.nil?
27
+ doc_resource_ml = Nokogiri::XML::Builder.new do |xml|
28
+ xml.doc_resource(tmp.each do |t, d|
29
+ "#{t}=\"#{d}\""
30
+ end
31
+ ) do
32
+ unless @table_title.nil? && @note_refs.size == 0 && @exhibit_refs.size == 0
33
+ unless @note_refs.first.to_s.size == 0
34
+ unless @exhibit_refs.first.to_s.size == 0
35
+ xml.title do
36
+ unless @table_title.nil?
37
+ xml.Text @table_title.to_s
38
+ end
39
+ unless @note_refs.size == 0
40
+ unless @note_refs.first.to_s.size == 0
41
+ xml.noteRefs do
42
+ @note_refs = [@note_refs] unless @note_refs.is_a? Array
43
+ @note_refs.each do |note_ref|
44
+ unless note_ref.to_s.size == 0
45
+ xml.noteRef(href: note_ref.to_s)
46
+ end # unless note_ref.to_s.size == 0
47
+ end # @note_refs.each do |note_ref|
48
+ end # xml.noteRefs do
49
+ end # unless @note_refs.first.to_s.size == 0
50
+ end # unless @note_refs.size == 0
51
+ unless @exhibit_refs.size == 0
52
+ unless @exhibit_refs.first.to_s.size == 0
53
+ xml.exhibitRefs do
54
+ @exhibit_refs = [@exhibit_refs] unless @exhibit_refs.is_a? Array
55
+ @exhibit_refs.each do |exhibit_ref|
56
+ unless exhibit_ref.to_s.size == 0
57
+ xml.exhibitRef(href: exhibit_ref.to_s)
58
+ end # unless exhibit_ref.to_s.size == 0
59
+ end # @exhibit_refs.each do |exhibit_ref|
60
+ end # xml.exhibitRefs do
61
+ end # unless @exhibit_refs.first.to_s.size == 0
62
+ end # unless @exhibit_refs.size == 0
63
+ end # xml.title.done
64
+ end # unless @exhibit_refs.to_s.size == 0
65
+ end # unless @note_refs.to_s.size == 0
66
+ end # unless @table_title.nil? && @note_refs.size == 0 && @exhibit_refs.size == 0
67
+ unless @before_table.nil? && @after_table.nil?
68
+ xml.paragraphs do
69
+ unless @before_table.nil?
70
+ if @before_table.is_a? Nokogiri::XML::Node
71
+ xml.before_table @before_table.inner_html
72
+ else
73
+ xml.before_table @before_table
74
+ end
75
+ end
76
+ unless @after_table.nil?
77
+ if @after_table.is_a? Nokogiri::XML::Node
78
+ xml.after_table after_table.inner_html
79
+ else
80
+ xml.after_table @after_table
81
+ end
82
+ end
83
+ end # xml.paragraphs do
84
+ end # unless @before_table.nil? && @after_table.nil?
85
+ end # xml.doc_resource
86
+ end # doc_resource_ml = Nokogiri::
87
+ doc_resource_ml
88
+ end # to_xml
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,17 @@
1
+ module Origen
2
+ module Specs
3
+ # This class is used to store spec exhibit information used to document IP
4
+ class Exhibit
5
+ attr_accessor :id, :type, :title, :description, :reference, :markup
6
+
7
+ def initialize(id, type, options = {})
8
+ @id = id
9
+ @type = type
10
+ @title = options[:title]
11
+ @description = options[:description]
12
+ @reference = options[:reference]
13
+ @markup = options[:markup]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module Origen
2
+ module Specs
3
+ # This class is used to store mode select for IP
4
+ class Mode_Select
5
+ attr_accessor :block, :usage, :mode, :supported, :location
6
+
7
+ def initialize(blk, use, mode_ref, support, loc)
8
+ @block = blk
9
+ @usage = use
10
+ @mode = mode_ref
11
+ @supported = support
12
+ @location = loc
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ module Origen
2
+ module Specs
3
+ # This class is used to store spec note information used to document IP
4
+ class Note
5
+ attr_accessor :id, :type, :mode, :audience, :text, :markup
6
+
7
+ def initialize(id, type, options = {})
8
+ @id = id
9
+ @type = type
10
+ @mode = options[:mode]
11
+ @audience = options[:audience]
12
+ @text = options[:text]
13
+ @markup = options[:markup]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module Origen
2
+ module Specs
3
+ # This class is used to store override information for specified specs on instantiated IP
4
+ class Override
5
+ attr_accessor :block, :usage, :spec_ref, :mode_ref, :sub_type, :audience, :minimum, :maximum, :typical, :disable
6
+
7
+ def initialize(block_options = {}, find_spec = {}, values = {}, options = {})
8
+ @block = block_options[:block]
9
+ @usage = block_options[:usage]
10
+ @spec_ref = find_spec[:spec_id]
11
+ @mode_ref = find_spec[:mode_ref]
12
+ @sub_type = find_spec[:sub_type]
13
+ @audience = find_spec[:audience]
14
+ @minimum = values[:min]
15
+ @maximum = values[:max]
16
+ @typical = values[:typ]
17
+ @disable = options[:disable]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module Origen
2
+ module Specs
3
+ # This class is used to store Power Supply Information at the SoC Level
4
+ class Power_Supply
5
+ attr_accessor :generic, :actual
6
+
7
+ def initialize(gen, act)
8
+ @generic = gen
9
+ @actual = act
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,226 @@
1
+ module Origen
2
+ module Specs
3
+ class Spec
4
+ autoload :Note, 'origen/specs/note'
5
+ autoload :Exhibit, 'origen/specs/exhibit'
6
+ require_relative 'checkers'
7
+
8
+ SpecAttribute = Struct.new(:name, :type, :required, :author, :description)
9
+
10
+ Limit = Struct.new(:exp) do
11
+ def value
12
+ Origen::Specs::Spec.send(:evaluate_limit, exp)
13
+ end
14
+ end
15
+
16
+ TYPES = Origen::Specs::SPEC_TYPES
17
+
18
+ ATTRS = {
19
+ ip_name: SpecAttribute.new(:ip_name, Symbol, true, :design, 'The parent IP object of the specification'),
20
+ name: SpecAttribute.new(:name, Symbol, true, :design, 'Specification Name'),
21
+ type: SpecAttribute.new(:type, Symbol, true, :design, "Specification Type, acceptable values: #{TYPES}"),
22
+ sub_type: SpecAttribute.new(:sub_type, Symbol, true, :design, 'Specification sub-type (e.g. :max_operating_condition)'),
23
+ mode: SpecAttribute.new(:mode, Symbol, true, :design, 'Specification mode, inherited from the owning parent object'),
24
+ symbol: SpecAttribute.new(:symbol, String, false, :design, 'Specification symbol, can contain HTML'),
25
+ description: SpecAttribute.new(:description, String, false, :design, 'Specification description'),
26
+ audience: SpecAttribute.new(:audience, Symbol, false, :design, 'Specification audience, acceptable values are :internal and :external'),
27
+ min: SpecAttribute.new(:min, Limit, false, :design, 'Specification minimum limit. The limit expression is displayed, not a resolved value'),
28
+ min_ovr: SpecAttribute.new(:min_ovr, Limit, false, :design, 'Specification minimum limit at SoC level. The limit expression is displaye,d not a resolved value'),
29
+ max: SpecAttribute.new(:max, Limit, false, :design, 'Specification maximum limit. The limit expression is displayed, not a resolved value'),
30
+ max_ovr: SpecAttribute.new(:max_ovr, Limit, false, :design, 'Specification maximum limit at SoC level. The limit expression is displaye,d not a resolved value'),
31
+ typ: SpecAttribute.new(:typ, Limit, false, :design, 'Specification typical limit. The limit expression is displayed, not a resolved value'),
32
+ typ_ovr: SpecAttribute.new(:typ_ovr, Limit, false, :design, 'Specification typical limit at SoC level. The limit expression is displaye,d not a resolved value'),
33
+ unit: SpecAttribute.new(:unit, String, false, :design, 'Specification unit of measure'),
34
+ constraints: SpecAttribute.new(:constraints, String, false, :design, "Single logical expression or a CSV list of logical expressions required for the spec to be valid (e.g. 'GVDD == 1.2V'"),
35
+ limit_type: SpecAttribute.new(:limit_type, Symbol, false, :design, 'Auto-generated attribute based on analysis of the spec limits. Acceptable values are :single_sided and :double_sided'),
36
+ notes: SpecAttribute.new(:notes, Hash, false, :design, 'Specification notes'),
37
+ disposition_required: SpecAttribute.new(:disposition_required, TrueClass, false, :pde, 'Boolean representation of whether a specification needs a disposition based on silicon results or customer input'),
38
+ priority: SpecAttribute.new(:priority, TrueClass, false, :pde, 'Integer value (1-4) to indicate which priority the cz for this spec will be: 1. Highest priority, for critical or historically risky specs 2. Medium priority, relatively low risk. Not required until all priority 1 specs have been handled 3. Lowest priority, very low risk, low performance specs 4. No plans to characterize'),
39
+ target: SpecAttribute.new(:target, String, false, :pde, 'Specification target limit. Not used for pass/fail results but for data analysis'),
40
+ guardband: SpecAttribute.new(:guardband, Limit, false, :pde, 'Specification guardband limit'),
41
+ testable: SpecAttribute.new(:testable, TrueClass, false, :pde, 'Boolean representation of whether a specification is testable'),
42
+ tested_at_probe: SpecAttribute.new(:tested_at_probe, TrueClass, false, :pde, 'Boolean representation of whether a specification is tested at probe'),
43
+ tested_at_ft_hot: SpecAttribute.new(:tested_at_ft_hot, TrueClass, false, :pde, 'Boolean representation of whether a specification is tested at final test hot temperature'),
44
+ tested_at_ft_ext_hot: SpecAttribute.new(:tested_at_ft_ext_hot, TrueClass, false, :pde, 'Boolean representation of whether a specification is tested at final test extended hot temperature'),
45
+ tested_at_ft_cold: SpecAttribute.new(:tested_at_ft_cold, TrueClass, false, :pde, 'Boolean representation of whether a specification is tested at final test cold temperature'),
46
+ tested_at_ft_ext_cold: SpecAttribute.new(:tested_at_ft_ext_cold, TrueClass, false, :pde, 'Boolean representation of whether a specification is tested at final test extended cold temperature'),
47
+ tested_at_ft_room: SpecAttribute.new(:tested_at_ft_room, TrueClass, false, :pde, 'Boolean representation of whether a specification is tested at final test room temperature'),
48
+ guaranteed_by_prod_test: SpecAttribute.new(:guaranteed_by_prod_test, TrueClass, false, :pde, 'Boolean representation of whether a specification is guaranteed by production test'),
49
+ guaranteed_by_proxy_test: SpecAttribute.new(:guaranteed_by_proxy_test, TrueClass, false, :pde, 'Boolean representation of whether a specification is guaranteed by production test via a proxy test such as BIST'),
50
+ guaranteed_by_construction: SpecAttribute.new(:guaranteed_by_construction, TrueClass, false, :pde, 'Boolean representation of whether a specification is guaranteed by physical construction, design documentation required'),
51
+ guaranteed_by_simulation: SpecAttribute.new(:guaranteed_by_simulation, TrueClass, false, :pde, 'Boolean representation of whether a specification is tested guaranteed by simulation, design documentation required'),
52
+ cz_on_ate: SpecAttribute.new(:cz_on_ate, TrueClass, false, :pde, 'Boolean representation of whether a specification is characterized on ATE'),
53
+ cz_ate_sample_size: SpecAttribute.new(:cz_ate_sample_size, Integer, false, :pde, 'Integer number representing the sample size of the split used for customer Cpk calculation as tested on ATE'),
54
+ cz_ate_cpk: SpecAttribute.new(:cz_ate_cpk, Float, false, :pde, 'Float number representing the customer or representative Cpk of the specification as tested on ATE'),
55
+ cz_on_bench: SpecAttribute.new(:cz_on_bench, TrueClass, false, :pde, 'Boolean representation of whether a specification is characterized on a bench setup'),
56
+ cz_bench_sample_size: SpecAttribute.new(:cz_bench_sample_size, Integer, false, :pde, 'Integer number representing the sample size of the split used for customer Cpk calculation on a bench setup'),
57
+ cz_bench_cpk: SpecAttribute.new(:cz_bench_cpk, Float, false, :pde, 'Float number representing the customer or representative Cpk of the specification as tested on a bench setup'),
58
+ cz_on_system: SpecAttribute.new(:cz_on_system, TrueClass, false, :pde, 'Boolean representation of whether a specification is characterized in a system setup'),
59
+ cz_system_sample_size: SpecAttribute.new(:cz_system_sample_size, Integer, false, :pde, 'Integer number representing the sample size of the split used for customer Cpk calculation in a system'),
60
+ cz_system_cpk: SpecAttribute.new(:cz_system_cpk, Float, false, :pde, 'Float number representing the customer or representative Cpk of the specification as tested in a system')
61
+ }
62
+
63
+ ATTRS.each do |_id, spec_attr|
64
+ class_eval("def #{spec_attr.name}(param=nil); param.nil? ? @#{spec_attr.name} : (@#{spec_attr.name} = param); end")
65
+ end
66
+
67
+ # There are at least three attributes needed to define a unique spec.
68
+ # 1) name (e.g. :vdd)
69
+ # 2) type (e.g. :dc) Possible values are [:dc, :ac, :temperature]
70
+ # 3) mode (e.g. :global). mode defaults to the current mode found for the parent object
71
+ # A mode is defined as a device state that requires some sequence of actions to be enabled.
72
+ # A type is a classification moniker that exists without any stimulus required.
73
+ # Some specs require a fourth attribute sub_type to be uniquely defined.
74
+ # For example, a global device level VDD specification would require four attributes to be unique.
75
+ # Here is an example of two spec definitions for a VDD power supply
76
+ # name = :vdd, type: :dc, mode: :global, sub_type: typical_operating_conditions, typ = "1.0V +/- 30mV"
77
+ # name = :vdd, type: :dc, mode: :global, sub_type: maximum_operating_conditions, min = -0.3V, max = 1.8V
78
+ # Whereas a typical DDR timing specification might only need three attributes to be unique
79
+ # name: :tddkhas, type: :ac, mode: ddr4dr2400, sub_type: nil
80
+
81
+ def initialize(name, type, mode, owner_name, &block)
82
+ @name = name_audit(name)
83
+ fail 'Specification names must be of types Symbol or String and cannot start with a number' if @name.nil?
84
+ @type = type
85
+ @sub_type = nil # not necessary to be able to find a unique spec, but required for some specs
86
+ @mode = mode
87
+ @ip_name = owner_name
88
+ @symbol = nil # Meant to be populated with HTML representing the way the spec name should look in a document
89
+ @description = nil
90
+ @min, @typ, @max, @target = nil, nil, nil, nil
91
+ @min_ovr, @typ_ovr, @typ_ovr = nil, nil, nil
92
+ @audience = nil
93
+ @notes = {}
94
+ @exhibits = {}
95
+ @testable = nil
96
+ @guardband = nil
97
+ (block.arity < 1 ? (instance_eval(&block)) : block.call(self)) if block_given?
98
+ fail "Spec type must be one of #{TYPES.join(', ')}" unless TYPES.include? type
99
+ @min = Limit.new(@min)
100
+ @max = Limit.new(@max)
101
+ @typ = Limit.new(@typ)
102
+ @min_ovr = Limit.new(@min_ovr)
103
+ @max_ovr = Limit.new(@max_ovr)
104
+ @typ_ovr = Limit.new(@typ_ovr)
105
+ @guardband = Limit.new(@guardband)
106
+ fail "Spec #{name} failed the limits audit!" unless limits_ok?
107
+ end
108
+
109
+ def method_missing(method, *args, &block)
110
+ ivar = "@#{method.to_s.gsub('=', '')}"
111
+ ivar_sym = ":#{ivar}"
112
+ if method.to_s =~ /=$/
113
+ define_singleton_method(method) do |val|
114
+ instance_variable_set(ivar, val)
115
+ end
116
+ elsif instance_variables.include? ivar_sym
117
+ instance_variable_get(ivar)
118
+ else
119
+ define_singleton_method(method) do
120
+ instance_variable_get(ivar)
121
+ end
122
+ end
123
+ send(method, *args, &block)
124
+ end
125
+
126
+ # Do a 'diff' from the current spec (self) and the compare spec
127
+ # Returns a hash with attribute as key and an array of the
128
+ # attribute values that differed
129
+ def diff(compare_spec)
130
+ diff_results = Hash.new do |h, k|
131
+ h[k] = []
132
+ end
133
+ # Loop through self's isntance variables first
134
+ instance_variables.each do |ivar|
135
+ ivar_sym = ivar.to_s.gsub('@', '').to_sym
136
+ next if ivar_sym == :notes # temporarily disable until notes diff method written
137
+ ivar_str = ivar.to_s.gsub('@', '')
138
+ if compare_spec.respond_to? ivar_sym
139
+ # Check if the instance variable is a Limit and if so then find
140
+ # all instance_variables and diff them as well
141
+ if instance_variable_get(ivar).class == Origen::Specs::Spec::Limit
142
+ limit_diff_results = diff_limits(instance_variable_get(ivar), compare_spec.instance_variable_get(ivar))
143
+ # Extract the limit diff pairs and merge with updated keys with the diff_results hash
144
+ limit_diff_results.each do |k, v|
145
+ limit_diff_key = "#{ivar_str}_#{k}".to_sym
146
+ diff_results[limit_diff_key] = v
147
+ end
148
+ else
149
+ unless instance_variable_get(ivar) == compare_spec.instance_variable_get(ivar)
150
+ diff_results[ivar_sym] = [instance_variable_get(ivar), compare_spec.instance_variable_get(ivar)]
151
+ Origen.log.debug "Found spec difference for instance variable #{ivar} for #{self} and #{compare_spec}"
152
+ end
153
+ end
154
+ else
155
+ # The compare spec doesn't have the current instance variable
156
+ # so log a difference
157
+ if instance_variable_get(ivar).class == Origen::Specs::Spec::Limit
158
+ limit_diff_results = diff_limits(instance_variable_get(ivar), compare_spec.instance_variable_get(ivar))
159
+ # Extract the limit diff pairs and merge with updated keys with the diff_results hash
160
+ limit_diff_results.each do |k, v|
161
+ limit_diff_key = "#{ivar_str}_#{k}".to_sym
162
+ diff_results[limit_diff_key] = v
163
+ end
164
+ else
165
+ Origen.log.debug "Instance variable #{ivar} exists for #{self} and does not for #{compare_spec}"
166
+ diff_results[ivar_sym] = [instance_variable_get(ivar), '']
167
+ end
168
+ end
169
+ end
170
+ # Loop through unique instance variables for compare_spec
171
+ diff_results
172
+ end
173
+
174
+ # Monkey patch of hash/array include? method needed because
175
+ # Origen::Specs#specs can return a single Spec instance or an Array of Specs
176
+ def include?(s)
177
+ s == @name ? true : false
178
+ end
179
+
180
+ # Add a specification note
181
+ def add_note(id, options = {})
182
+ options = {
183
+ type: :spec
184
+ }.update(options)
185
+ # Create the Note instance and add to the notes attribute
186
+ @notes[id] = Origen::Specs::Note.new(id, options[:type], options)
187
+ end
188
+
189
+ # Returns a Note object from the notes hash
190
+ def notes(id = nil)
191
+ return nil if @notes.nil?
192
+ @notes.filter(id)
193
+ end
194
+
195
+ # Returns the number of notes as an Integer
196
+ def note_count
197
+ @notes.size
198
+ end
199
+
200
+ private
201
+
202
+ # This assumes the limit objects are Structs
203
+ def diff_limits(limit_one, limit_two = nil)
204
+ diff_results = Hash.new do |h, k|
205
+ h[k] = []
206
+ end
207
+ # Only need to loop through limit one ivars because the Limit class cannot
208
+ # be changed in 3rd party files like the Spec class can be
209
+ limit_one.members.each do |m|
210
+ if limit_two.respond_to? m
211
+ unless limit_one.send(m) == limit_two.send(m)
212
+ diff_results[m] = [limit_one.send(m), limit_two.send(m)]
213
+ Origen.log.debug "Found limit difference for member #{m} for #{limit_one} and #{limit_two}"
214
+ end
215
+ else
216
+ # Limit two doesn't have the current instance variable or was not provided
217
+ # as an argument so log a difference
218
+ Origen.log.debug "Member #{m} exists for #{limit_one} and does not for #{limit_two}"
219
+ diff_results[m] = [limit_one.send(m), '']
220
+ end
221
+ end
222
+ diff_results
223
+ end
224
+ end
225
+ end
226
+ end
@@ -0,0 +1,14 @@
1
+ module Origen
2
+ module Specs
3
+ # This class is used to store spec exhibit information used to document IP
4
+ class Version_History
5
+ attr_accessor :date, :author, :changes
6
+
7
+ def initialize(date, author, changes)
8
+ @date = date
9
+ @author = author
10
+ @changes = changes
11
+ end
12
+ end
13
+ end
14
+ end