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,111 @@
1
+ module OrigenTesters
2
+ module Decompiler
3
+ class Pattern
4
+ module Parsers
5
+ # @abstract This requires the child to supply:
6
+ # A method #parse_frontmatter(raw_frontmatter) which returns
7
+ # a node with the frontmatter parsed.
8
+ def _parse_frontmatter_
9
+ begin
10
+ n = method_parse_frontmatter.call(raw_frontmatter: raw_frontmatter, context: self)
11
+ rescue ParseError => e
12
+ # If parsing threw a ParseError, the platform found the error.
13
+ # Raise this as normal.
14
+ raise(e)
15
+ rescue Exception => e
16
+ # Anything else, raise a parse error and provide the error raised
17
+ # by parsing.
18
+ m = "Error encountered while parsing the frontmatter: #{e.class}"
19
+ Origen.log.error(m)
20
+ Origen.log.error(e.message)
21
+ Origen.log.error(e.backtrace.join("\n\t"))
22
+ Origen.app!.fail(exception_class: ParseError, message: m)
23
+ end
24
+
25
+ # Seperate this out so that errors creating the frontmatter class
26
+ # aren't confused with parsing errors.
27
+ @frontmatter = Frontmatter.new(node: n, context: self)
28
+ end
29
+
30
+ # @abstract This requires the child to supply:
31
+ # A method #parse_pinlist(raw_pinlist) which returns a node with
32
+ # the pinlist parsed.
33
+ #
34
+ # The node should have a #pins method, which returns an array of
35
+ # the pin names (as Strings).
36
+ # Example:
37
+ # parse_pinlist('vector ($tset, tclk, tdi, tdo, tms)')
38
+ # #=> ['tclk', 'tdi', 'tdo', 'tms']
39
+ def _parse_pinlist_
40
+ begin
41
+ n = method_parse_pinlist.call(raw_pinlist: raw_pinlist, context: self)
42
+ rescue ParseError => e
43
+ # If parsing threw a ParseError, the platform found the error.
44
+ # Raise this as normal.
45
+ raise(e)
46
+ rescue Exception => e
47
+ # Anything else, raise a parse error and provide the error raised by parsing.
48
+ m = "Error encountered while parsing the pinlist: #{e.class}"
49
+ Origen.log.error(m)
50
+ Origen.log.error(e.message)
51
+ Origen.log.error(e.backtrace.join("\n\t"))
52
+ Origen.app!.fail(exception_class: ParseError, message: m)
53
+ end
54
+
55
+ # Seperate this out so that errors creating the pinlist class
56
+ # aren't confused with parsing errors.
57
+ @pinlist = Pinlist.new(node: n, context: self)
58
+ end
59
+
60
+ # This will parse vectors line-by-line, so multi-line vectors will
61
+ # need to take this into account.
62
+ # @abstract This requires the child to supply:
63
+ # A method #parse_vector(raw_vector) which returns a node with
64
+ # the vector parsed.
65
+ #
66
+ # This node should have the following:
67
+ # - type
68
+ # - platform_nodes
69
+ #
70
+ # In the even the type is vector, it should also have:
71
+ # - timeset
72
+ # - This should return the timeset of the vector as a String.
73
+ # - pin states
74
+ # - This should return an array of strings, where each string
75
+ # corresponds to the pin state of a pin indicated by its offset
76
+ # into the pin header array.
77
+ # - comment
78
+ # The comment in this line. This can be either String,
79
+ # an Array of Strings (for multiline comments, if supported), or
80
+ # nil, if there is no comment.
81
+ # - comment
82
+ # A true/false value that indicates if this entire line is a comment.
83
+ # If true, operations, timeset, pin states, can be nil.
84
+ # If the type is something else (platform specifc, such as a 'starb label',for the J750),
85
+ # all contents can be in the 'platform_nodes'.
86
+ def _parse_vector_(raw_vector, options = {})
87
+ begin
88
+ v = method_parse_vector.call(raw_vector: raw_vector, context: self, meta: (@vector_meta ||= {}))
89
+ rescue ParseError => e
90
+ # If parsing threw a ParseError, the platform found the error.
91
+ # Raise this as normal.
92
+ raise(e)
93
+ rescue Exception => e
94
+ # Anything else, raise a parse error and provide the error raised by parsing.
95
+ m = "Error encountered while parsing the vector at index #{options[:vector_index]}: #{e.class}"
96
+ Origen.log.error(m)
97
+ Origen.log.error('While parsing:')
98
+ Origen.log.error(" #{raw_vector}")
99
+ Origen.log.error(e.message)
100
+ Origen.log.error(e.backtrace.join("\n\t"))
101
+ Origen.app!.fail(exception_class: ParseError, message: m)
102
+ end
103
+
104
+ # Seperate this out so that errors creating the vector body element class
105
+ # aren't confused with parsing errors.
106
+ @current_vector = VectorBodyElement.new(node: v, context: self, **options)
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,41 @@
1
+ module OrigenTesters
2
+ module Decompiler
3
+ class Pattern
4
+ module SpecHelpers
5
+ def to_yaml_hash(options = {})
6
+ {
7
+ pattern: @path,
8
+ timestamp: Time.now.to_s,
9
+ class: self.class.to_s,
10
+ # ... Add in the variables here
11
+
12
+ frontmatter: frontmatter.to_yaml_hash,
13
+ pinlist: pinlist.to_yaml_hash,
14
+ vectors: collect_vectors { |v, i| v.to_yaml_hash }
15
+ }
16
+ end
17
+
18
+ def to_spec_yaml(options = {})
19
+ to_yaml_hash.to_yaml
20
+ end
21
+
22
+ def spec_yaml_output
23
+ "#{Origen.app!.root}/output/#{platform}/decompiler/models/#{source.basename}.yaml"
24
+ end
25
+
26
+ def spec_yaml_approved
27
+ "#{Origen.app!.root}/approved/#{platform}/decompiler/models/#{source.basename}.yaml"
28
+ end
29
+
30
+ def write_spec_yaml(options = {})
31
+ path = options[:approved] ? spec_yaml_approved : spec_yaml_output
32
+ unless Dir.exist?(File.dirname(path))
33
+ FileUtils.mkdir_p(File.dirname(path))
34
+ end
35
+ File.open(path, 'w').puts(to_spec_yaml(options))
36
+ path
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,166 @@
1
+ module OrigenTesters
2
+ module Decompiler
3
+ class Pattern
4
+ module Splitter
5
+ REQUIRED_KEYS = [:pinlist_start, :vectors_start, :vectors_end]
6
+ OPTIONAL_KEYS = [:separator, :vectors_include_start_line, :vectors_include_end_line]
7
+
8
+ def section_indices
9
+ @section_indices
10
+ end
11
+
12
+ def raw_lines(start, stop, &block)
13
+ retn_lines = []
14
+ _run_line_ = lambda do |line, index, retn_lines, &block|
15
+ if index > stop
16
+ break
17
+ elsif index >= start
18
+ if block_given?
19
+ yield
20
+ else
21
+ retn_lines << line
22
+ end
23
+ end
24
+ end
25
+
26
+ if direct_source?
27
+ source.split("\n").map { |l| "#{l}\n" }.each_with_index do |line, index|
28
+ _run_line_.call(line, index, retn_lines, &block)
29
+ end
30
+ else
31
+ File.foreach(source).each_with_index do |line, index|
32
+ _run_line_.call(line, index, retn_lines, &block)
33
+ end
34
+ end
35
+ retn_lines
36
+ end
37
+
38
+ def raw_frontmatter
39
+ raw_lines(section_indices[:frontmatter_start], section_indices[:frontmatter_end])
40
+ end
41
+
42
+ def raw_pinlist
43
+ raw_lines(section_indices[:pinlist_start], section_indices[:pinlist_end])
44
+ end
45
+
46
+ def raw_vectors(&block)
47
+ raw_lines(section_indices[:vectors_start], section_indices[:vectors_end])
48
+ end
49
+
50
+ def raw_endmatter
51
+ raw_lines(section_indices[:endmatter_start], section_indices[:endmatter_end])
52
+ end
53
+
54
+ def split!
55
+ section_indices = split(splitter_config)
56
+
57
+ # Check that we found each section in the pattern.
58
+ if section_indices[:pinlist_start].nil?
59
+ Origen.log.error('Parsing Error!')
60
+ Origen.log.error("Could not locate the pinlist start in pattern #{source}")
61
+ Origen.log.error("Expected a pattern line to match '#{splitter_config[:pinlist_start]}'")
62
+
63
+ fail OrigenTesters::Decompiler::ParseError, "Parsing Error! Could not locate the pinlist start in pattern #{source}"
64
+ elsif section_indices[:vectors_start].nil?
65
+ Origen.log.error('Parsing Error!')
66
+ Origen.log.error("Could not locate the vector start in pattern #{source}")
67
+ Origen.log.error("Expected a pattern line to match '#{splitter_config[:vector_start]}'")
68
+
69
+ fail OrigenTesters::Decompiler::ParseError, "Parsing Error! Could not locate the vector body in pattern #{source}"
70
+ elsif section_indices[:vectors_end].nil?
71
+ Origen.log.error('Parsing Error!')
72
+ Origen.log.error("Could not locate the vector body end in pattern #{source}")
73
+ Origen.log.error("Expected a pattern line to match '#{splitter_config[:vector_end]}'")
74
+
75
+ fail OrigenTesters::Decompiler::ParseError, "Parsing Error! Could not locate the vector body end in pattern #{source}"
76
+ end
77
+
78
+ @section_indices = section_indices
79
+ @section_indices
80
+ end
81
+
82
+ # Splits the pattern into gour secionts using regexes:
83
+ # 1. Frontmatter
84
+ # 2. Pin List
85
+ # 3. Vectors
86
+ # 4. Endmatter
87
+ # The idea is that each section can be delimited by a line that matches some
88
+ # regex (and is not considered a comment line).
89
+ # The pattern will be read line-by-line, looking for the regexes.
90
+ # We're defining the pattern section as such:
91
+ # - Frontmatter starts at the beginning of the pattern and ends at the start of the pattern header.
92
+ # - Vectors start from the end of the pattern header and go until the end of the vectors.
93
+ # - Endmatter starts at the end of the vectors and ends at the end of the file.
94
+ # - Its possible (and fine) for endmatter to be non-existant, or even not allowed.
95
+ # - In the latter case, the endvector symbol should the EoF symbol.
96
+ # @return (Hash)
97
+ # rubocop:disable Metrics/ParameterLists
98
+ def split(pinlist_start:, vectors_start:, vectors_end:, vectors_include_start_line: false, vectors_include_end_line: false, &block)
99
+ def check_match(matcher, line, index, indices)
100
+ if matcher.respond_to?(:call)
101
+ matcher.call(line: line, index: index, current_indices: indices)
102
+ elsif matcher.is_a?(Regexp)
103
+ line =~ matcher
104
+ elsif matcher.is_a?(String)
105
+ line.start_with?(matcher)
106
+ else
107
+ fail "Splitter does not know how to match given matcher of class #{matcher.class}"
108
+ end
109
+ end
110
+
111
+ if File.zero?(source)
112
+ Origen.log.error('Parsing Error!')
113
+ Origen.log.error("Pattern #{source} has size zero!")
114
+ Origen.log.error('Decompiling empty files is not supported.')
115
+
116
+ fail(OrigenTesters::Decompiler::ParseError, "Empty or non-readable pattern file #{source}")
117
+ end
118
+
119
+ indices = {
120
+ frontmatter_start: 0,
121
+ endmatter_end: -1
122
+ }
123
+ if block_given?
124
+ fail 'Blocks are not yet supported!'
125
+ else
126
+ if vectors_end == -1
127
+ indices[:vectors_end] = -1
128
+ indices[:endmatter_start] = -1
129
+ end
130
+ _split_ = lambda do |line, index, indices|
131
+ if !indices[:pinlist_start]
132
+ if check_match(pinlist_start, line, index, indices)
133
+ indices[:frontmatter_end] = index - 1
134
+ indices[:pinlist_start] = index
135
+ end
136
+ elsif !indices[:vectors_start]
137
+ if check_match(vectors_start, line, index, indices)
138
+ indices[:pinlist_end] = index - 1
139
+ vectors_include_start_line ? indices[:vectors_start] = index : indices[:vectors_start] = index + 1
140
+ end
141
+ elsif !indices[:vectors_end]
142
+ if check_match(vectors_end, line, index, indices)
143
+ vectors_include_end_line ? indices[:vectors_end] = index : indices[:vectors_end] = index - 1
144
+ indices[:endmatter_start] = index
145
+ end
146
+ end
147
+ end
148
+
149
+ if direct_source?
150
+ source.split("\n").each_with_index do |line, index|
151
+ _split_.call(line, index, indices)
152
+ end
153
+ else
154
+ File.foreach(source).each_with_index do |line, index|
155
+ _split_.call(line, index, indices)
156
+ end
157
+ end
158
+
159
+ indices
160
+ end
161
+ # rubocop:enable Metrics/ParameterLists
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,70 @@
1
+ module OrigenTesters
2
+ module Decompiler
3
+ class Pattern
4
+ class VectorDelimiterBase
5
+ attr_reader :current_vector
6
+ attr_reader :parent
7
+
8
+ def initialize(parent)
9
+ @current_vector = []
10
+ @delimited = false
11
+ @in_comment_block = false
12
+
13
+ @parent = parent
14
+ end
15
+
16
+ def comment_start
17
+ parent.comment_start
18
+ end
19
+
20
+ def in_comment_block?
21
+ @in_comment_block
22
+ end
23
+
24
+ def shift(line)
25
+ if @in_comment_block
26
+ if !line.strip.start_with?(comment_start)
27
+ # End of the comment block.
28
+ # Signal that this vector is over, but don't include the
29
+ # newly shifted line.
30
+ @delimited = true
31
+ @include_last_line = false
32
+ else
33
+ @current_vector << line
34
+ end
35
+ else
36
+ if current_vector.empty? && line.strip.start_with?(comment_start)
37
+ # Currently in an empty vector and encountered a comment.
38
+ # Start a new comment block.
39
+ @in_comment_block = true
40
+ @current_vector << line
41
+ elsif !current_vector.empty? && line.strip.start_with?(comment_start)
42
+ # Not in an empty vector, but not in a comment block.
43
+ # Signal the end of this vector and start a new one with
44
+ # this vector.
45
+ @delimited = true
46
+ @include_last_line = false
47
+ else
48
+ # Standard single vector
49
+ @delimited = true
50
+ @include_last_line = true
51
+ @current_vector << line
52
+ end
53
+ end
54
+ end
55
+
56
+ def current_vector!
57
+ current_vector.join('')
58
+ end
59
+
60
+ def delimited?
61
+ @delimited
62
+ end
63
+
64
+ def include_last_line?
65
+ @include_last_line
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
File without changes
@@ -4,6 +4,9 @@ module OrigenTesters
4
4
  autoload :J750, 'origen_testers/igxl_based_tester/j750.rb'
5
5
  autoload :J750_HPT, 'origen_testers/igxl_based_tester/j750_hpt.rb'
6
6
  autoload :UltraFLEX, 'origen_testers/igxl_based_tester/ultraflex.rb'
7
+
8
+ require 'origen_testers/igxl_based_tester/base.rb'
9
+ require 'origen_testers/igxl_based_tester/decompiler'
7
10
  end
8
11
  # Convenience/Legacy names without the IGXLBasedTester namespace
9
12
  autoload :J750, 'origen_testers/igxl_based_tester/j750.rb'
@@ -1,5 +1,12 @@
1
1
  module OrigenTesters
2
2
  module IGXLBasedTester
3
+ class << self
4
+ attr_reader :pat_extension
5
+ attr_reader :comment_char
6
+ end
7
+ @pat_extension = 'atp'
8
+ @comment_char = '//'
9
+
3
10
  # This is the base class of all IGXL-based testers
4
11
  class Base
5
12
  include VectorBasedTester
@@ -27,7 +34,7 @@ module OrigenTesters
27
34
  @counter_msb_bits = 0
28
35
  @max_repeat_loop = 65_535 # 16 bits
29
36
  @min_repeat_loop = 2
30
- @pat_extension = 'atp'
37
+ @pat_extension = OrigenTesters::IGXLBasedTester.pat_extension
31
38
  @active_loads = true
32
39
  @pipeline_depth = 34
33
40
  @software_version = ''