origen_testers 0.41.0 → 0.42.0

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 (347) hide show
  1. checksums.yaml +4 -4
  2. data/approved/j750/decompiler/sample/sample.atp +16 -0
  3. data/config/application.rb +6 -0
  4. data/config/boot.rb +3 -0
  5. data/config/commands.rb +148 -3
  6. data/config/global_commands.rb +0 -0
  7. data/config/shared_commands.rb +0 -0
  8. data/config/users.rb +0 -0
  9. data/config/version.rb +1 -1
  10. data/lib/commands/build.rb +0 -0
  11. data/lib/commands/convert.rb +16 -10
  12. data/lib/commands/run.rb +0 -0
  13. data/lib/origen_testers.rb +5 -0
  14. data/lib/origen_testers/api.rb +4 -0
  15. data/lib/origen_testers/atp.rb +0 -0
  16. data/lib/origen_testers/atp/ast/extractor.rb +0 -0
  17. data/lib/origen_testers/atp/ast/node.rb +0 -0
  18. data/lib/origen_testers/atp/flow.rb +0 -0
  19. data/lib/origen_testers/atp/flow_api.rb +0 -0
  20. data/lib/origen_testers/atp/formatter.rb +0 -0
  21. data/lib/origen_testers/atp/formatters/basic.rb +0 -0
  22. data/lib/origen_testers/atp/formatters/datalog.rb +0 -0
  23. data/lib/origen_testers/atp/parser.rb +0 -0
  24. data/lib/origen_testers/atp/processor.rb +0 -0
  25. data/lib/origen_testers/atp/processors/add_ids.rb +0 -0
  26. data/lib/origen_testers/atp/processors/add_set_result.rb +0 -0
  27. data/lib/origen_testers/atp/processors/adjacent_if_combiner.rb +0 -0
  28. data/lib/origen_testers/atp/processors/append_to.rb +0 -0
  29. data/lib/origen_testers/atp/processors/apply_post_group_actions.rb +0 -0
  30. data/lib/origen_testers/atp/processors/condition.rb +0 -0
  31. data/lib/origen_testers/atp/processors/continue_implementer.rb +0 -0
  32. data/lib/origen_testers/atp/processors/else_remover.rb +0 -0
  33. data/lib/origen_testers/atp/processors/empty_branch_remover.rb +0 -0
  34. data/lib/origen_testers/atp/processors/extract_set_flags.rb +0 -0
  35. data/lib/origen_testers/atp/processors/flag_optimizer.rb +0 -0
  36. data/lib/origen_testers/atp/processors/flattener.rb +0 -0
  37. data/lib/origen_testers/atp/processors/flow_id.rb +0 -0
  38. data/lib/origen_testers/atp/processors/marshal.rb +0 -0
  39. data/lib/origen_testers/atp/processors/on_pass_fail_remover.rb +0 -0
  40. data/lib/origen_testers/atp/processors/one_flag_per_test.rb +0 -0
  41. data/lib/origen_testers/atp/processors/pre_cleaner.rb +0 -0
  42. data/lib/origen_testers/atp/processors/redundant_condition_remover.rb +0 -0
  43. data/lib/origen_testers/atp/processors/relationship.rb +0 -0
  44. data/lib/origen_testers/atp/processors/sub_flow_remover.rb +0 -0
  45. data/lib/origen_testers/atp/program.rb +0 -0
  46. data/lib/origen_testers/atp/runner.rb +0 -0
  47. data/lib/origen_testers/atp/validator.rb +0 -0
  48. data/lib/origen_testers/atp/validators/condition.rb +0 -0
  49. data/lib/origen_testers/atp/validators/duplicate_ids.rb +0 -0
  50. data/lib/origen_testers/atp/validators/flags.rb +0 -0
  51. data/lib/origen_testers/atp/validators/jobs.rb +0 -0
  52. data/lib/origen_testers/atp/validators/missing_ids.rb +0 -0
  53. data/lib/origen_testers/atp_deprecation.rb +0 -0
  54. data/lib/origen_testers/basic_test_setups.rb +0 -0
  55. data/lib/origen_testers/callback_handlers.rb +0 -0
  56. data/lib/origen_testers/command_based_tester.rb +0 -0
  57. data/lib/origen_testers/decompiler.rb +9 -0
  58. data/lib/origen_testers/decompiler/decompiler_api.rb +163 -0
  59. data/lib/origen_testers/decompiler/nodes.rb +141 -0
  60. data/lib/origen_testers/decompiler/pattern.rb +304 -0
  61. data/lib/origen_testers/decompiler/pattern/elements/base.rb +44 -0
  62. data/lib/origen_testers/decompiler/pattern/elements/comment_block.rb +28 -0
  63. data/lib/origen_testers/decompiler/pattern/elements/frontmatter.rb +42 -0
  64. data/lib/origen_testers/decompiler/pattern/elements/pinlist.rb +44 -0
  65. data/lib/origen_testers/decompiler/pattern/elements/vector.rb +59 -0
  66. data/lib/origen_testers/decompiler/pattern/elements/vector_body_element.rb +105 -0
  67. data/lib/origen_testers/decompiler/pattern/enumerable_ext.rb +173 -0
  68. data/lib/origen_testers/decompiler/pattern/parsers.rb +111 -0
  69. data/lib/origen_testers/decompiler/pattern/spec_helpers.rb +41 -0
  70. data/lib/origen_testers/decompiler/pattern/splitter.rb +166 -0
  71. data/lib/origen_testers/decompiler/pattern/vector_delimiter_base.rb +70 -0
  72. data/lib/origen_testers/flow.rb +0 -0
  73. data/lib/origen_testers/generator/identity_map.rb +0 -0
  74. data/lib/origen_testers/generator/placeholder.rb +0 -0
  75. data/lib/origen_testers/generator/test_numberer.rb +0 -0
  76. data/lib/origen_testers/igxl_based_tester.rb +3 -0
  77. data/lib/origen_testers/igxl_based_tester/base.rb +8 -1
  78. data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +0 -0
  79. data/lib/origen_testers/igxl_based_tester/base/flow.rb +0 -0
  80. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +0 -0
  81. data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +0 -0
  82. data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +0 -0
  83. data/lib/origen_testers/igxl_based_tester/base/patset.rb +0 -0
  84. data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +0 -0
  85. data/lib/origen_testers/igxl_based_tester/base/patsets.rb +0 -0
  86. data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +0 -0
  87. data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +0 -0
  88. data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +0 -0
  89. data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +0 -0
  90. data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +0 -0
  91. data/lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb +0 -0
  92. data/lib/origen_testers/igxl_based_tester/decompiler.rb +72 -0
  93. data/lib/origen_testers/igxl_based_tester/decompiler/atp.rb +98 -0
  94. data/lib/origen_testers/igxl_based_tester/decompiler/nodes.rb +77 -0
  95. data/lib/origen_testers/igxl_based_tester/files.rb +0 -0
  96. data/lib/origen_testers/igxl_based_tester/j750.rb +1 -1
  97. data/lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb +0 -0
  98. data/lib/origen_testers/igxl_based_tester/j750/flow.rb +0 -0
  99. data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +0 -0
  100. data/lib/origen_testers/igxl_based_tester/j750/generator.rb +0 -0
  101. data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +0 -0
  102. data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +0 -0
  103. data/lib/origen_testers/igxl_based_tester/j750/patset.rb +0 -0
  104. data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +0 -0
  105. data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +0 -0
  106. data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +0 -0
  107. data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +0 -0
  108. data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +0 -0
  109. data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +0 -0
  110. data/lib/origen_testers/igxl_based_tester/j750/templates/instances.txt.erb +0 -0
  111. data/lib/origen_testers/igxl_based_tester/j750/templates/patgroups.txt.erb +0 -0
  112. data/lib/origen_testers/igxl_based_tester/j750/templates/patsets.txt.erb +0 -0
  113. data/lib/origen_testers/igxl_based_tester/j750/templates/patsubrs.txt.erb +0 -0
  114. data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +0 -0
  115. data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +0 -0
  116. data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +0 -0
  117. data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +0 -0
  118. data/lib/origen_testers/igxl_based_tester/j750_hpt/custom_test_instance.rb +0 -0
  119. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +0 -0
  120. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +0 -0
  121. data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +0 -0
  122. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +0 -0
  123. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +0 -0
  124. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +0 -0
  125. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +0 -0
  126. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +0 -0
  127. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +0 -0
  128. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +0 -0
  129. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +0 -0
  130. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +0 -0
  131. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +0 -0
  132. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +0 -0
  133. data/lib/origen_testers/igxl_based_tester/parser.rb +0 -0
  134. data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +0 -0
  135. data/lib/origen_testers/igxl_based_tester/parser/ac_specs.rb +0 -0
  136. data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +0 -0
  137. data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +0 -0
  138. data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +0 -0
  139. data/lib/origen_testers/igxl_based_tester/parser/flow.rb +0 -0
  140. data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +0 -0
  141. data/lib/origen_testers/igxl_based_tester/parser/flows.rb +0 -0
  142. data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +0 -0
  143. data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +0 -0
  144. data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +0 -0
  145. data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +0 -0
  146. data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +0 -0
  147. data/lib/origen_testers/igxl_based_tester/parser/timesets.rb +0 -0
  148. data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +0 -0
  149. data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +0 -0
  150. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +0 -0
  151. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +0 -0
  152. data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +0 -0
  153. data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +0 -0
  154. data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +0 -0
  155. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +0 -0
  156. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +0 -0
  157. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +0 -0
  158. data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +0 -0
  159. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +0 -0
  160. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/instances.txt.erb +0 -0
  161. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patgroups.txt.erb +0 -0
  162. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsets.txt.erb +0 -0
  163. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsubrs.txt.erb +0 -0
  164. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +0 -0
  165. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +0 -0
  166. data/lib/origen_testers/labview_based_tester.rb +0 -0
  167. data/lib/origen_testers/memory_style.rb +0 -0
  168. data/lib/origen_testers/no_interface.rb +0 -0
  169. data/lib/origen_testers/origen_ext/application/runner.rb +0 -0
  170. data/lib/origen_testers/origen_ext/generator.rb +0 -0
  171. data/lib/origen_testers/origen_ext/generator/flow.rb +0 -0
  172. data/lib/origen_testers/origen_ext/generator/pattern.rb +0 -0
  173. data/lib/origen_testers/origen_ext/generator/resources.rb +0 -0
  174. data/lib/origen_testers/origen_ext/pins/timing.rb +57 -0
  175. data/lib/origen_testers/origen_ext/pins/timing/timeset.rb +29 -0
  176. data/lib/origen_testers/parser.rb +0 -0
  177. data/lib/origen_testers/parser/description_lookup.rb +0 -0
  178. data/lib/origen_testers/parser/searchable_array.rb +0 -0
  179. data/lib/origen_testers/parser/searchable_hash.rb +0 -0
  180. data/lib/origen_testers/pattern_compilers.rb +0 -0
  181. data/lib/origen_testers/pattern_compilers/assembler.rb +0 -0
  182. data/lib/origen_testers/pattern_compilers/base.rb +0 -0
  183. data/lib/origen_testers/pattern_compilers/igxl_based.rb +0 -0
  184. data/lib/origen_testers/pattern_compilers/j750.rb +0 -0
  185. data/lib/origen_testers/pattern_compilers/job.rb +0 -0
  186. data/lib/origen_testers/pattern_compilers/runner.rb +0 -0
  187. data/lib/origen_testers/pattern_compilers/templates/template.aiv.erb +0 -0
  188. data/lib/origen_testers/pattern_compilers/ultraflex.rb +0 -0
  189. data/lib/origen_testers/pattern_compilers/v93k.rb +0 -0
  190. data/lib/origen_testers/pattern_compilers/v93k/digcap.rb +13 -8
  191. data/lib/origen_testers/pattern_compilers/v93k/multiport.rb +0 -0
  192. data/lib/origen_testers/program_generators.rb +0 -0
  193. data/lib/origen_testers/smartest_based_tester.rb +2 -0
  194. data/lib/origen_testers/smartest_based_tester/base.rb +2 -2
  195. data/lib/origen_testers/smartest_based_tester/base/flow.rb +0 -0
  196. data/lib/origen_testers/smartest_based_tester/base/generator.rb +0 -0
  197. data/lib/origen_testers/smartest_based_tester/base/limits_file.rb +0 -0
  198. data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +0 -0
  199. data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +0 -0
  200. data/lib/origen_testers/smartest_based_tester/base/processors/extract_bin_names.rb +0 -0
  201. data/lib/origen_testers/smartest_based_tester/base/processors/extract_flow_vars.rb +0 -0
  202. data/lib/origen_testers/smartest_based_tester/base/test_method.rb +0 -0
  203. data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +0 -0
  204. data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +0 -0
  205. data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +0 -0
  206. data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +0 -0
  207. data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +0 -0
  208. data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +0 -0
  209. data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +0 -0
  210. data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +0 -0
  211. data/lib/origen_testers/smartest_based_tester/decompiler.rb +43 -0
  212. data/lib/origen_testers/smartest_based_tester/decompiler/avc.rb +76 -0
  213. data/lib/origen_testers/smartest_based_tester/decompiler/nodes.rb +23 -0
  214. data/lib/origen_testers/smartest_based_tester/smt7.rb +0 -0
  215. data/lib/origen_testers/smartest_based_tester/smt8.rb +0 -0
  216. data/lib/origen_testers/smartest_based_tester/v93k.rb +0 -0
  217. data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +0 -0
  218. data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +0 -0
  219. data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +0 -0
  220. data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +0 -0
  221. data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +0 -0
  222. data/lib/origen_testers/smartest_based_tester/v93k/limits_file.rb +0 -0
  223. data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +0 -0
  224. data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +0 -0
  225. data/lib/origen_testers/smartest_based_tester/v93k/templates/limits.csv.erb +0 -0
  226. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +0 -0
  227. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +0 -0
  228. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.tf.erb +0 -0
  229. data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +0 -0
  230. data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +0 -0
  231. data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +0 -0
  232. data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +0 -0
  233. data/lib/origen_testers/smartest_based_tester/v93k/variables_file.rb +0 -0
  234. data/lib/origen_testers/smartest_based_tester/v93k_smt8.rb +0 -0
  235. data/lib/origen_testers/smartest_based_tester/v93k_smt8/flow.rb +0 -0
  236. data/lib/origen_testers/smartest_based_tester/v93k_smt8/generator.rb +0 -0
  237. data/lib/origen_testers/smartest_based_tester/v93k_smt8/limits_file.rb +0 -0
  238. data/lib/origen_testers/smartest_based_tester/v93k_smt8/limits_workbook.rb +0 -0
  239. data/lib/origen_testers/smartest_based_tester/v93k_smt8/templates/limits.csv.erb +0 -0
  240. data/lib/origen_testers/smartest_based_tester/v93k_smt8/templates/template.flow.erb +0 -0
  241. data/lib/origen_testers/smartest_based_tester/v93k_smt8/test_suite.rb +0 -0
  242. data/lib/origen_testers/stil_based_tester.rb +0 -0
  243. data/lib/origen_testers/stil_based_tester/base.rb +6 -6
  244. data/lib/origen_testers/stil_based_tester/d10.rb +0 -0
  245. data/lib/origen_testers/stil_based_tester/stil.rb +0 -0
  246. data/lib/origen_testers/test/basic_interface.rb +0 -0
  247. data/lib/origen_testers/test/block.rb +0 -0
  248. data/lib/origen_testers/test/complex_timing.rb +22 -0
  249. data/lib/origen_testers/test/custom_test_interface.rb +0 -0
  250. data/lib/origen_testers/test/dummy_decompiler.rb +106 -0
  251. data/lib/origen_testers/test/dut.rb +12 -0
  252. data/lib/origen_testers/test/dut2.rb +19 -6
  253. data/lib/origen_testers/test/dut_adv_timing.rb +0 -0
  254. data/lib/origen_testers/test/empty_dut.rb +12 -0
  255. data/lib/origen_testers/test/interface.rb +0 -0
  256. data/lib/origen_testers/test/nvm.rb +0 -0
  257. data/lib/origen_testers/timing.rb +108 -305
  258. data/lib/origen_testers/timing/timeset.rb +141 -0
  259. data/lib/origen_testers/timing/timing_api.rb +307 -0
  260. data/lib/origen_testers/vector.rb +0 -0
  261. data/lib/origen_testers/vector_based_tester.rb +0 -0
  262. data/lib/origen_testers/vector_generator.rb +1 -0
  263. data/lib/origen_testers/vector_pipeline.rb +0 -0
  264. data/pattern/bitmap.rb +0 -0
  265. data/pattern/dc_instr.rb +0 -0
  266. data/pattern/decompile.rb +4 -0
  267. data/pattern/delay.rb +0 -0
  268. data/pattern/freq_counter.rb +0 -0
  269. data/pattern/mem_test.rb +0 -0
  270. data/pattern/multi_vector.rb +0 -0
  271. data/pattern/multi_vector_plus1.rb +0 -0
  272. data/pattern/nvm/j750/add_late_pins.rb +0 -0
  273. data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +0 -0
  274. data/pattern/nvm/j750/iterator_test_x_bx.rb +0 -0
  275. data/pattern/nvm/j750/j750_halt.rb +0 -0
  276. data/pattern/nvm/j750/j750_workout.rb +0 -0
  277. data/pattern/nvm/j750/timing.rb +4 -4
  278. data/pattern/nvm/v93k/v93k_workout.rb +0 -0
  279. data/pattern/pin_flip.rb +9 -0
  280. data/pattern/read_write_reg.rb +0 -0
  281. data/pattern/reset.rb +0 -0
  282. data/pattern/simple.rb +4 -0
  283. data/pattern/single_overlay_store.rb +0 -0
  284. data/pattern/subroutines.rb +0 -0
  285. data/pattern/tester_overlay.rb +0 -0
  286. data/pattern/tester_store.rb +0 -0
  287. data/program/_additional_erase.rb +0 -0
  288. data/program/_efa_resources.rb +0 -0
  289. data/program/_erase.rb +0 -0
  290. data/program/_erase_vfy.rb +0 -0
  291. data/program/_iv_resources.rb +0 -0
  292. data/program/basic_interface.rb +0 -0
  293. data/program/components/_deep_nested.rb +0 -0
  294. data/program/components/_prb2_main.rb +0 -0
  295. data/program/components/_small.rb +0 -0
  296. data/program/components/_temp.rb +0 -0
  297. data/program/custom_tests.rb +0 -0
  298. data/program/flow_control.rb +0 -0
  299. data/program/prb1.rb +0 -0
  300. data/program/prb1_resources.rb +0 -0
  301. data/program/prb2.rb +0 -0
  302. data/program/test.rb +0 -0
  303. data/templates/example.txt.erb +0 -0
  304. data/templates/j750/_vt_flow.txt.erb +0 -0
  305. data/templates/j750/_vt_instances.txt.erb +0 -0
  306. data/templates/j750/program_sheet.txt.erb +0 -0
  307. data/templates/manifest/v93k.yaml.erb +0 -0
  308. data/templates/origen_guides/decompilation/decompilerapi.md.erb +192 -0
  309. data/templates/origen_guides/decompilation/overview.md.erb +214 -0
  310. data/templates/origen_guides/decompilation/platformspecifics.md.erb +291 -0
  311. data/templates/origen_guides/decompilation/universalapi.md.erb +598 -0
  312. data/templates/origen_guides/pattern/common.md.erb +0 -0
  313. data/templates/origen_guides/pattern/creating.md.erb +0 -0
  314. data/templates/origen_guides/pattern/custom.md.erb +0 -0
  315. data/templates/origen_guides/pattern/documenting.md.erb +0 -0
  316. data/templates/origen_guides/pattern/introduction.md.erb +0 -0
  317. data/templates/origen_guides/pattern/j750.md.erb +0 -0
  318. data/templates/origen_guides/pattern/name.md.erb +0 -0
  319. data/templates/origen_guides/pattern/pins.md.erb +0 -0
  320. data/templates/origen_guides/pattern/registers.md.erb +0 -0
  321. data/templates/origen_guides/pattern/running.md.erb +0 -0
  322. data/templates/origen_guides/pattern/stil.md.erb +0 -0
  323. data/templates/origen_guides/pattern/timing.md.erb +205 -2
  324. data/templates/origen_guides/pattern/ultraflex.md.erb +0 -0
  325. data/templates/origen_guides/pattern/v93k.md.erb +0 -0
  326. data/templates/origen_guides/program/code.md.erb +0 -0
  327. data/templates/origen_guides/program/custom.md.erb +0 -0
  328. data/templates/origen_guides/program/doc.md.erb +0 -0
  329. data/templates/origen_guides/program/flowapi.md.erb +0 -0
  330. data/templates/origen_guides/program/flows.md.erb +0 -0
  331. data/templates/origen_guides/program/generating.md.erb +0 -0
  332. data/templates/origen_guides/program/interface.md.erb +0 -0
  333. data/templates/origen_guides/program/introduction.md.erb +0 -0
  334. data/templates/origen_guides/program/j750.md.erb +0 -0
  335. data/templates/origen_guides/program/philosophy.md.erb +0 -0
  336. data/templates/origen_guides/program/resources.md.erb +0 -0
  337. data/templates/origen_guides/program/ultraflex.md.erb +0 -0
  338. data/templates/origen_guides/program/v93k.md.erb +0 -0
  339. data/templates/origen_guides/program/v93ksmt7.md.erb +0 -0
  340. data/templates/origen_guides/program/v93ksmt8.md.erb +0 -0
  341. data/templates/web/index.md.erb +0 -0
  342. data/templates/web/layouts/_basic.html.erb +0 -0
  343. data/templates/web/layouts/_guides.html.erb +0 -0
  344. data/templates/web/partials/_navbar.html.erb +0 -0
  345. data/templates/web/partials/_placeholder.md.erb +0 -0
  346. data/templates/web/release_notes.md.erb +0 -0
  347. metadata +61 -3
@@ -0,0 +1,141 @@
1
+ module OrigenTesters
2
+ module Decompiler
3
+ module Nodes
4
+ class Node
5
+ attr_reader :context
6
+ attr_reader :type
7
+
8
+ def self.inherited(subclass)
9
+ if subclass.const_defined?(:PLATFORM_NODES)
10
+ subclass.const_get(:PLATFORM_NODES).each do |n|
11
+ subclass.define_instance_method(n) do
12
+ instance_variable_get(":@#{n}")
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ def initialize(context:, type:, **nodes)
19
+ @context = context
20
+ if type
21
+ @type = type
22
+ elsif @type.nil?
23
+ type = self.class.underscore
24
+ end
25
+
26
+ unless platform_nodes.empty?
27
+ platform_nodes.each do |n|
28
+ define_singleton_method(n) do
29
+ instance_variable_get("@#{n}".to_sym)
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ def execute?
36
+ @execute
37
+ end
38
+
39
+ def platform_nodes
40
+ self.class.const_defined?(:PLATFORM_NODES) ? self.class.const_get(:PLATFORM_NODES) : []
41
+ end
42
+ end
43
+
44
+ class CommentBlock < OrigenTesters::Decompiler::Nodes::Node
45
+ attr_reader :comments
46
+
47
+ def initialize(comments:, context:)
48
+ @comments = comments
49
+ super(context: context, type: :comment_block)
50
+ end
51
+
52
+ def execute?
53
+ true
54
+ end
55
+
56
+ def execute!(context)
57
+ @comments.each { |c| cc(c) }
58
+ end
59
+ end
60
+
61
+ class Vector < OrigenTesters::Decompiler::Nodes::Node
62
+ attr_reader :repeat
63
+ attr_reader :timeset
64
+ attr_reader :pin_states
65
+ attr_reader :comment
66
+
67
+ # rubocop:disable Metrics/ParameterLists
68
+ def initialize(repeat:, timeset:, pin_states:, comment:, context:, **nodes)
69
+ @execute = true
70
+
71
+ @repeat = repeat
72
+ @timeset = timeset
73
+ @pin_states = pin_states
74
+ @comment = comment
75
+
76
+ super(context: context, type: :vector)
77
+ end
78
+ # rubocop:enable Metrics/ParameterLists
79
+
80
+ def execute!(context)
81
+ # Apply a timeset switch, if needed.
82
+ unless Origen.tester.timeset.name == timeset
83
+ Origen.tester.set_timeset(timeset)
84
+ end
85
+
86
+ # Apply the comment
87
+ unless comment.empty?
88
+ cc(comment)
89
+ end
90
+
91
+ # Apply the pin states
92
+ context.pinlist.each_with_index do |pin, i|
93
+ dut.pins(pin).vector_formatted_value = pin_states[i]
94
+ end
95
+
96
+ # Cycle the tester
97
+ repeat.cycles
98
+ end
99
+ end
100
+
101
+ class Pinlist < OrigenTesters::Decompiler::Nodes::Node
102
+ attr_reader :pins
103
+ alias_method :pinlist, :pins
104
+
105
+ def initialize(pins:, context:)
106
+ @pins = pins.map(&:to_sym)
107
+ super(context: context, type: :pinlist)
108
+ end
109
+ end
110
+
111
+ class Frontmatter < OrigenTesters::Decompiler::Nodes::Node
112
+ attr_reader :comments
113
+ attr_reader :pattern_header
114
+
115
+ alias_method :header, :pattern_header
116
+ alias_method :comment_header, :pattern_header
117
+
118
+ def initialize(pattern_header: nil, comments: nil, context:)
119
+ @pattern_header = pattern_header
120
+ @comments = comments || []
121
+
122
+ super(context: context, type: :frontmatter)
123
+ end
124
+
125
+ def execute!(context)
126
+ pattern_header.each do |c|
127
+ cc(c)
128
+ end
129
+
130
+ comments.each do |c|
131
+ cc(c)
132
+ end
133
+ end
134
+
135
+ def execute?
136
+ true
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,304 @@
1
+ module OrigenTesters
2
+ module Decompiler
3
+ require_relative './pattern/elements/base'
4
+ require_relative './pattern/elements/comment_block'
5
+ require_relative './pattern/elements/frontmatter'
6
+ require_relative './pattern/elements/pinlist'
7
+ require_relative './pattern/elements/vector_body_element'
8
+ require_relative './pattern/elements/vector'
9
+ require_relative './pattern/vector_delimiter_base'
10
+ require_relative './pattern/enumerable_ext'
11
+ require_relative './pattern/parsers'
12
+ require_relative './pattern/splitter'
13
+ require_relative './pattern/spec_helpers'
14
+
15
+ class ParseError < Origen::OrigenError
16
+ end
17
+
18
+ class SubclassError < Origen::OrigenError
19
+ end
20
+
21
+ class NoFirstVectorAvailable < Origen::OrigenError
22
+ end
23
+
24
+ class NoSuchSource < Origen::OrigenError
25
+ end
26
+
27
+ class NoSuitableDecompiler < Origen::OrigenError
28
+ end
29
+
30
+ class NoMethodError < Origen::OrigenError
31
+ end
32
+
33
+ class NoAvailableProcessor < Origen::OrigenError
34
+ end
35
+
36
+ class Pattern
37
+ class << self
38
+ attr_reader :splitter_config
39
+ attr_reader :parser_config
40
+ attr_reader :platform_tokens
41
+ attr_reader :platform
42
+ attr_reader :no_verify
43
+ end
44
+
45
+ attr_reader :source
46
+ attr_reader :decompiled
47
+ attr_reader :direct_source
48
+
49
+ include Splitter
50
+ include Parsers
51
+ include EnumerableExt
52
+ include SpecHelpers
53
+
54
+ def initialize(source, direct_source: false, no_verify: false)
55
+ if source.is_a?(File)
56
+ source = source.path
57
+ end
58
+
59
+ if direct_source
60
+ @source = source
61
+ @direct_source = true
62
+ else
63
+ @source = Pathname(source)
64
+ unless @source.exist?
65
+ message = "Cannot find pattern source '#{@source}'"
66
+ Origen.log.error(message)
67
+ Origen.app!.fail(exception_class: OrigenTesters::Decompiler::NoSuchSource, message: message)
68
+ end
69
+ @direct_source = false
70
+ end
71
+ @decompiled = false
72
+
73
+ unless no_verify || self.class.no_verify
74
+ verify_subclass_configuration
75
+ end
76
+ end
77
+
78
+ def platform
79
+ self.class.platform
80
+ end
81
+ alias_method :tester, :platform
82
+
83
+ def platform?(p = nil)
84
+ if p
85
+ platform == p
86
+ else
87
+ platform == tester.name.to_s
88
+ end
89
+ end
90
+ alias_method :tester?, :platform?
91
+
92
+ def decompiler
93
+ self.class
94
+ end
95
+
96
+ def decompiler?(d)
97
+ decompiler == d
98
+ end
99
+
100
+ def parser_config
101
+ self.class.parser_config || {}
102
+ end
103
+
104
+ def platform_tokens
105
+ self.class.platform_tokens
106
+ end
107
+ alias_method :decompiler_tokens, :platform_tokens
108
+
109
+ def comment_start
110
+ self.class.platform_tokens[:comment_start]
111
+ end
112
+ alias_method :comment_token, :comment_start
113
+
114
+ def splitter_config
115
+ self.class.splitter_config
116
+ end
117
+
118
+ def method_parse_frontmatter
119
+ if self.class.respond_to?(:parse_frontmatter)
120
+ self.class.method(:parse_frontmatter)
121
+ end
122
+ end
123
+
124
+ def method_parse_pinlist
125
+ if self.class.respond_to?(:parse_pinlist)
126
+ self.class.method(:parse_pinlist)
127
+ end
128
+ end
129
+
130
+ def method_parse_vector
131
+ if self.class.respond_to?(:parse_vector)
132
+ self.class.method(:parse_vector)
133
+ end
134
+ end
135
+
136
+ def verify_subclass_configuration
137
+ if method_parse_frontmatter.nil?
138
+ subclass_error('Missing class method #parse_frontmatter')
139
+ elsif method_parse_pinlist.nil?
140
+ subclass_error('Missing class method #parse_pinlist')
141
+ elsif method_parse_vector.nil?
142
+ subclass_error('Missing class method #parse_vector')
143
+ elsif splitter_config.nil?
144
+ subclass_error('Missing class variable :splitter_config')
145
+ elsif !(Splitter::REQUIRED_KEYS - splitter_config.keys).empty?
146
+ subclass_error("Splitter config is missing required keys: #{(Splitter::REQUIRED_KEYS - splitter_config.keys).map { |k| ':' + k.to_s }.join(', ')}")
147
+ elsif !(splitter_config.keys - Splitter::REQUIRED_KEYS - Splitter::OPTIONAL_KEYS).empty?
148
+ subclass_error("Splitter config contains extra keys: #{(splitter_config.keys - Splitter::REQUIRED_KEYS - Splitter::OPTIONAL_KEYS).map { |k| ':' + k.to_s }.join(', ')}")
149
+ end
150
+ end
151
+
152
+ def subclass_error(message)
153
+ Origen.log.error("#{self.class.name} failed to subclasss OrigenTesters::DecompilerPattern: #{message}")
154
+ fail(SubclassError, "#{self.class.name} failed to subclasss OrigenTesters::DecompilerPattern: #{message}")
155
+ end
156
+
157
+ def decompiled?
158
+ @decompiled
159
+ end
160
+
161
+ def direct_source?
162
+ @direct_source
163
+ end
164
+
165
+ def first_vector
166
+ @first_vector || begin
167
+ each_vector do |v|
168
+ if v.vector?
169
+ @first_vector = v.element
170
+ break
171
+ end
172
+ end
173
+ if @first_vector.nil?
174
+ fail OrigenTesters::Decompiler::ParseError, "Could not locate the first vector in pattern #{@source}"
175
+ end
176
+ @first_vector
177
+ end
178
+ end
179
+
180
+ def first_timeset
181
+ first_vector.timeset
182
+ end
183
+ alias_method :initial_timeset, :first_timeset
184
+
185
+ def first_pin_states_mapped
186
+ pins.each.with_index.with_object({}) do |(pin, i), hash|
187
+ hash[pin] = initial_pin_states[i]
188
+ end
189
+ end
190
+ alias_method :initial_pin_states_mapped, :first_pin_states_mapped
191
+
192
+ def first_pin_states
193
+ first_vector.pin_states
194
+ end
195
+ alias_method :initial_pin_states, :first_pin_states
196
+
197
+ def pinlist_size
198
+ pinlist.pins.size
199
+ end
200
+ alias_method :num_pins, :pinlist_size
201
+ alias_method :number_of_pins, :pinlist_size
202
+
203
+ def pins
204
+ pinlist.pins
205
+ end
206
+
207
+ def decompile(options = {})
208
+ # Read the pattern and split it into sections then parse and store the
209
+ # frontmatter and pinlist models
210
+ split!
211
+ @frontmatter = _parse_frontmatter_
212
+ @pinlist = _parse_pinlist_
213
+
214
+ @decompiled = true
215
+ self
216
+ end
217
+
218
+ def frontmatter
219
+ @frontmatter
220
+ end
221
+
222
+ def pinlist
223
+ @pinlist
224
+ end
225
+
226
+ def vectors
227
+ @vector_handler ||= vector_start
228
+ end
229
+
230
+ def current_vector_index
231
+ @current_vector_index
232
+ end
233
+
234
+ # Resolves the size of each pin in the pinlist using the initial pin states.
235
+ # @return [Hash] Hash wherein the keys are the pin names and each value is
236
+ # the corresponding size.
237
+ def pin_sizes
238
+ # initial_pin_states.map { |pin, state| state.size }
239
+ initial_pin_states_mapped.map { |pin, state| [pin, state.size] }.to_h
240
+ # pins.each.with_index.with_object({}) do |(pin, i), hash|
241
+ # hash[pin] = initial_pin_states[i].size
242
+ # end
243
+ end
244
+
245
+ def first_vector?
246
+ first_vector
247
+ rescue OrigenTesters::Decompiler::ParseError
248
+ return false
249
+ end
250
+
251
+ # Adds any pins in the decompiled pattern to the DUT which are not already present.
252
+ # @return [Array] Any pin names that were added to the DUT.
253
+ def add_pins
254
+ # pin_sizes = pat_model.pattern_model.pin_sizes
255
+ # pat_model.pinlist.each_with_index do |(name, pin), i|
256
+ # dut.add_pin(name, size: pin_sizes[i]) unless dut.has_pin?(name)
257
+ # end
258
+ retn = []
259
+ if first_vector?
260
+ pin_sizes.each do |pin, size|
261
+ unless dut.has_pin?(pin)
262
+ dut.add_pin(pin, size: size)
263
+ retn << pin
264
+ end
265
+ end
266
+ else
267
+ fail(NoFirstVectorAvailable, "No first vector available for pattern '#{source}'. Cannot add pins to the DUT '#{dut.class.name}'")
268
+ end
269
+ retn
270
+ end
271
+
272
+ # @note <code>line</code> is this context is delimited by the given separator.
273
+ # This may or may not be a true newline-delimited, line.
274
+ # def number_of_lines
275
+ # fail
276
+ # end
277
+
278
+ # Executing a pattern consist of:
279
+ # 1. Doing some initial setup (timesets, initial pin states, etc.)
280
+ # 2. Executing anything that can be executed in the frontmatter
281
+ # 3. Executing the vectors 1-by-1.
282
+ def execute(options = {})
283
+ if Origen.tester.timeset.nil?
284
+ if first_vector?
285
+ Origen.tester.set_timeset(first_timeset, 40)
286
+ else
287
+ Origen.log.error 'No first vector available and the timeset has not already been set!'
288
+ Origen.log.error 'Please set the timeset yourself prior to calling #execute! in a pattern that does not contain a first vector.'
289
+ fail(NoFirstVectorAvailable, "No first vector available for pattern '#{source}'. Cannot set a timeset to execute the pattern.")
290
+ end
291
+ end
292
+ frontmatter.execute!
293
+ each_vector_with_index do |vec, i|
294
+ if Origen.debug?
295
+ Origen.log.info("OrigenTesters: Executing Vector #{i}")
296
+ end
297
+ vec.execute!
298
+ end
299
+
300
+ self
301
+ end
302
+ end
303
+ end
304
+ end
@@ -0,0 +1,44 @@
1
+ module OrigenTesters
2
+ module Decompiler
3
+ class Pattern
4
+ class Base
5
+ attr_reader :context
6
+ alias_method :decompiled_pattern, :context
7
+
8
+ attr_reader :node
9
+ alias_method :processor, :node
10
+
11
+ def initialize(node:, context:, **options)
12
+ @context = context
13
+ @node = node
14
+ end
15
+
16
+ def [](node)
17
+ node.find(node)
18
+ end
19
+
20
+ def platform_nodes
21
+ node.platform_nodes
22
+ end
23
+
24
+ def method_missing(m, *args, &block)
25
+ if platform_nodes.include?(m) || node.respond_to?(m)
26
+ node.send(m)
27
+ else
28
+ super
29
+ end
30
+ end
31
+
32
+ def execute!
33
+ if node.execute?
34
+ node.execute!(self)
35
+ end
36
+ end
37
+
38
+ def pinlist
39
+ decompiled_pattern.pinlist.pinlist
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end