origen_testers 0.41.0 → 0.42.0

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e05743e4c62f21fdda22dcf6eae8056c1e2db75dfd97d6cf311e7d5577a4e0b6
4
- data.tar.gz: a1c877c1b3e3da3566958e11a711ec4aea246b5be91b6420ae6f9c3bda7dc131
3
+ metadata.gz: b61e30758057f753a3f11c3f9e804ec902c04b11ab5d044eead50e933396dcc4
4
+ data.tar.gz: 56e4f2859a2dd2d3440f41b8f0025764a1fdbe49dd54266ec46f3f18f6ed4315
5
5
  SHA512:
6
- metadata.gz: 995f309c1e5894066c36623f8243ff8f88fa6329e8304d276333536f668ec0d89655bd3a49ada8cf29e184a2e4b12952c8bce9aab31f736cdb9939cb89f0b28a
7
- data.tar.gz: 01e0fdbb2784d33693d145b013f523013017ad0b4a83a6f363defe47ea0ff0be428522ae15f1010abc554245f2d7bf1f23ad36a24aa28a01d129a30c9d958759
6
+ metadata.gz: 218203f35e42e7d2de5fa2668dca505dff43339e598ce231d9a5d57f6f8dd02d90f5fb3b53e6d4aef3bc6036eeebe4bc09663190fb192fa72e1aed3ed3e7eb2c
7
+ data.tar.gz: 83d9e9baee738fac32b9123d8991f18b5b4b3c00cbfda40b74fde58c75c7d052f3da23533e090c8cef611207ae037a151da9d78bad8446a0b696240cf10788c2
@@ -0,0 +1,16 @@
1
+ // Sample pattern text for the J750
2
+ // Source located at: lib/origen_testers/igxl_based_tester/decompiler
3
+
4
+ import tset tp0;
5
+ svm_only_file = no;
6
+ opcode_mode = extended;
7
+ compressed = yes;
8
+
9
+ vector ($tset, tclk, tdi, tdo, tms)
10
+ {
11
+ start_label pattern_st:
12
+ // Start of vector body
13
+ repeat 2 > tp0 X X X X ; // First Vector
14
+ repeat 5 > tp0 1 0 X 1 ;
15
+ end_module > tp0 X X X X ; // Last Vector
16
+ }
@@ -40,6 +40,12 @@ class OrigenTestersApplication < Origen::Application
40
40
  section.page :custom, heading: "Creating Custom Testers"
41
41
  section.page :generating, heading: "Running the ProgGen"
42
42
  end
43
+ index.section :decompilation, heading: "Decompilation", before: :simulation do |section|
44
+ section.page :overview, heading: "Overview & Example"
45
+ section.page :decompilerapi, heading: "Decompiling, Adding Pins, & Executing"
46
+ section.page :universalapi, heading: "Working with Decompiled Patterns"
47
+ section.page :platformspecifics, heading: "Platform Specifics"
48
+ end
43
49
  end
44
50
  }
45
51
 
@@ -5,6 +5,9 @@ require "origen_testers"
5
5
  require "origen_testers/test/dut.rb"
6
6
  require "origen_testers/test/block.rb"
7
7
  require "origen_testers/test/dut2.rb"
8
+ require "origen_testers/test/empty_dut.rb"
9
+ require "origen_testers/test/complex_timing.rb"
10
+
8
11
  # NOTE: Before adding new duts-- consider adding option to DUT class
9
12
  # so we don't reduce overall code coverage-- thx, mgmt
10
13
  require "origen_testers/test/nvm.rb"
@@ -21,6 +21,151 @@ aliases = {
21
21
  # Now branch to the specific task code
22
22
  case @command
23
23
 
24
+ # Generates a pattern model given the input file(s).
25
+ when "generate_pattern_model"
26
+ Origen.load_target
27
+ approved = ARGV.delete('--approve')
28
+ ARGV.each do |pat|
29
+ puts "Generating pattern model for #{pat}"
30
+ model = OrigenTesters::Decompiler.decompile(pat)
31
+ path = model.write_spec_yaml(approved: approved)
32
+ puts "Wrote model to: #{path}"
33
+ puts
34
+ end
35
+ exit 0
36
+
37
+ when "analyze_decompiler_performance", 'analyze_decomp_perf'
38
+ options = {
39
+ output_csv: Origen.app.root.join('tmp/origen_testers/analyze_decompiler_performance.csv'),
40
+ ramp: [1]
41
+ }
42
+
43
+ envs = {
44
+ j750: {output: "#{Origen.app!.root}/output/j750/pin_flip.atp", count_scale: 1.0},
45
+ v93k: {output: "#{Origen.app!.root}/output/v93k/pin_flip.avc", count_scale: 1.0},
46
+ stil: {output: "#{Origen.app!.root}/output/stil/pin_flip.stil", count_scale: 1.0},
47
+ }
48
+
49
+ opt_parser = OptionParser.new do |opts|
50
+ opts.banner = 'Run a performance test for the available decompilers.'
51
+ opts.on('-c', '--count COUNT', Integer, 'Overrides the full-toggle count (number of vectors)') { |c| options[:count] = c }
52
+ opts.on('-s', '--scale SCALE', Float, 'Overrides the default scale of 1.0 for all decompilers') do |s|
53
+ envs.each { |e, o| o[:count_scale] *= s }
54
+ end
55
+ opts.on('-e', '--environment NAME', String, 'Override the default environment, NAME can be a full path or a fragment of an environment file name') { |e| options[:environment] = e }
56
+ opts.on('-t', '--target NAME', String, 'Override the default target, NAME can be a full path or a fragment of a target file name') { |t| options[:target] = t }
57
+ opts.on('-p', '--pin NAME', String, 'Override the default pin for toggling. Default is \'tclk\'') { |t| options[:pin] = t }
58
+ opts.on('--output_csv CSV_FILE', String, "Override the default output name & directory for the resulting CSV file. Default: #{options[:output_csv]}") { |o| options[:output_csv] = Pathname(o) }
59
+ opts.on('-r', '--ramp [RAMPS]', String, 'Run multiple tests, applying an additional count_scale of 0.1, 0.5, 1, 5, 10, 50, 100 each time. Note: with the default scale count of 10k, this becomes: 1k, 5k, 10k, 50k, 100k, 500k, 1mil. Or, supplying custom ramps formatted as count1,count2,...') do |r|
60
+ if r
61
+ options[:ramp] = r.split(',').map(&:to_f)
62
+ else
63
+ options[:ramp] = [0.1, 0.5, 1, 5, 10, 50, 100]
64
+ end
65
+ end
66
+
67
+ envs.each do |env, o|
68
+ opts.on("--#{env}_scale SCALE", Float, "Additinally scales the #{env} platform") { |s| envs[env][:count_scale] *= s }
69
+ end
70
+
71
+ opts.separator ''
72
+ opts.on('-h', '--help', 'Show this message') { puts opts; exit 0 }
73
+ end
74
+ opt_parser.parse! ARGV
75
+ unless options[:output_csv].dirname.exist?
76
+ FileUtils.mkdir_p(options[:output_csv].dirname)
77
+ end
78
+
79
+ Origen.log.info "Testing Decompiler Performance..."
80
+ Origen.log.info "Performing setup..."
81
+
82
+ Origen.target.temporary = options[:target] || 'default'
83
+ Origen.load_target
84
+ ENV['ORIGEN_TESTERS_BIT_FLIP_PIN'] = options[:pin] || 'tclk'
85
+
86
+ Origen.log.info
87
+ Origen.log.info "Generating pattern 'pin_flip' toggling pin #{ENV['ORIGEN_TESTERS_BIT_FLIP_PIN']}..."
88
+
89
+ File.open(options[:output_csv], 'w') do |c|
90
+ c.puts('Base Count (vectors),' + envs.keys.map { |e| "#{e} (User Time (Seconds))" }.join(','))
91
+
92
+ options[:ramp].each do |r|
93
+ count = (options[:count] || 10_000) * r
94
+ envs.each do |e, opts|
95
+ env_count = (opts[:count_scale] * count).to_i.to_s
96
+ Origen.log.info " Generating pattern for environment: #{e}.rb... "
97
+ Origen.log.info " Target Count: #{env_count}"
98
+
99
+ ENV['ORIGEN_TESTERS_BIT_FLIP_COUNT'] = env_count
100
+ Origen.environment.temporary = "#{e}.rb"
101
+ Origen.load_target
102
+ Origen.app.runner.generate(patterns: 'pin_flip')
103
+ end
104
+
105
+ target_env = options[:environment] || 'v93k.rb'
106
+ Origen.log.info
107
+ Origen.log.info "Conversion Target Env: #{target_env}"
108
+ Origen.log.info "Converting Patterns..."
109
+ fields = {'User Time' => 0, 'System time' => 1, 'Elapsed Time' => 3, 'Peak Memory Usage' => 8}
110
+ resource_usages = {}
111
+ maxes = fields.map { |k, v| [k, [0.0, nil]] }.to_h
112
+ mins = fields.map { |k, v| [k, [Float::INFINITY, nil]] }.to_h
113
+ envs.each do |env, opts|
114
+ usage = {}
115
+ cmd = "/usr/bin/time -v origen convert #{opts[:output]} -e #{target_env} -o #{Origen.app!.root}/output/performance_test/#{env} -t #{Origen.target.name}"
116
+ puts cmd
117
+ out, err, stat = Open3.capture3(cmd)
118
+ output = err.split("\n")
119
+ fields.each do |f, i|
120
+ if f == 'Elapsed Time'
121
+ t = Time.parse("0:#{output[i+1].split(': ').last}")
122
+ usage[f] = ((t.min * 60) + t.sec).to_f
123
+ else
124
+ usage[f] = output[i+1].split(': ').last.to_f
125
+ end
126
+ if usage[f] > maxes[f][0]
127
+ maxes[f] = [usage[f], env]
128
+ end
129
+ if usage[f] < mins[f][0]
130
+ mins[f] = [usage[f], env]
131
+ end
132
+ end
133
+
134
+ resource_usages[env] = usage
135
+ puts out
136
+ puts err
137
+ end
138
+
139
+ Origen.log.info
140
+ Origen.log.info "Usage Report:"
141
+ Origen.log.info "Count Scales:"
142
+ envs.each do |env, opts|
143
+ Origen.log.info " #{env}: #{opts[:count_scale]} (#{opts[:count_scale] * count.to_i})"
144
+ end
145
+ Origen.log.info "File sizes:"
146
+ envs.each do |env, opts|
147
+ Origen.log.info " #{opts[:output]}: %.2f MiB" % (File.size(opts[:output]).to_f / 2**20)
148
+ end
149
+ fields.keys.each do |f|
150
+ Origen.log.info " #{f}:"
151
+ Origen.log.info " Max: #{maxes[f][0]} (#{maxes[f][1]})"
152
+ Origen.log.info " Min: #{mins[f][0]} (#{mins[f][1]})"
153
+ s = '%.2f' % (maxes[f][0] - mins[f][0])
154
+ Origen.log.info " Diff Max-to-Min: #{s}"
155
+ s = '%.2f' % ((mins[f][0] / maxes[f][0]) * 100)
156
+ Origen.log.info " Scale Max-to-Min: #{s}%"
157
+ s = '%.2f' % ((maxes[f][0] / mins[f][0]) * 100)
158
+ Origen.log.info " Scale Min-to-Max: #{s}%"
159
+ end
160
+
161
+ c.puts("#{count}," + resource_usages.values.collect { |u| u['User Time'] }.join(','))
162
+ end
163
+ end
164
+ Origen.log.info
165
+ Origen.log.info "Output CSV available at: #{options[:output_csv]}"
166
+
167
+ exit 0
168
+
24
169
  when "tags"
25
170
  Dir.chdir Origen.root do
26
171
  system "ripper-tags --recursive lib"
@@ -45,9 +190,9 @@ when "examples", "test"
45
190
  # ARGV = %w(templates/example.txt.erb -t debug -r approved)
46
191
  # load "origen/commands/compile.rb"
47
192
  if Origen.app.stats.changed_files == 0 &&
48
- Origen.app.stats.new_files == 0 &&
49
- Origen.app.stats.changed_patterns == 0 &&
50
- Origen.app.stats.new_patterns == 0
193
+ Origen.app.stats.new_files == 0 &&
194
+ Origen.app.stats.changed_patterns == 0 &&
195
+ Origen.app.stats.new_patterns == 0
51
196
 
52
197
  Origen.app.stats.report_pass
53
198
  else
File without changes
File without changes
File without changes
@@ -1,6 +1,6 @@
1
1
  module OrigenTesters
2
2
  MAJOR = 0
3
- MINOR = 41
3
+ MINOR = 42
4
4
  BUGFIX = 0
5
5
  DEV = nil
6
6
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
File without changes
@@ -67,19 +67,25 @@ else
67
67
  end
68
68
 
69
69
  def converter(file, options = {})
70
- snippet = IO.read(file, 2000) # Read first 2000 characters
71
- case snippet
72
- when /STIL \d+\.\d+/
70
+ if OrigenTesters.decompiler_for?(file)
73
71
  lambda do
74
- STIL.add_pins(file)
75
- # Use raw pin names in the output pattern and not the ALL pin group or similar, maybe
76
- # make this an option in future though
77
- dut.pin_pattern_order(*dut.pins.map { |id, pin| id })
78
- STIL.execute(file, set_timesets: true)
72
+ OrigenTesters.execute(file)
79
73
  end
80
74
  else
81
- Origen.log.error "Unknown input format for file: #{file}"
82
- nil
75
+ snippet = IO.read(file, 2000) # Read first 2000 characters
76
+ case snippet
77
+ when /STIL \d+\.\d+/
78
+ lambda do
79
+ STIL.add_pins(file)
80
+ # Use raw pin names in the output pattern and not the ALL pin group or similar, maybe
81
+ # make this an option in future though
82
+ dut.pin_pattern_order(*dut.pins.map { |id, pin| id })
83
+ STIL.execute(file, set_timesets: true)
84
+ end
85
+ else
86
+ Origen.log.error "Unknown input format for file: #{file}"
87
+ nil
88
+ end
83
89
  end
84
90
  end
85
91
 
File without changes
@@ -38,6 +38,9 @@ module OrigenTesters
38
38
  ATP::Program.load(f)
39
39
  end
40
40
  end
41
+
42
+ require 'origen_testers/decompiler'
43
+ extend Decompiler::API
41
44
  end
42
45
  autoload :ATP, 'origen_testers/atp_deprecation'
43
46
 
@@ -51,3 +54,5 @@ require 'origen_testers/pattern_compilers/runner'
51
54
  require 'origen_testers/callback_handlers'
52
55
  require 'origen_testers/origen_ext/pins/pin'
53
56
  require 'origen_testers/origen_ext/pins/pin_collection'
57
+ require 'origen_testers/origen_ext/pins/timing'
58
+ require 'origen_testers/origen_ext/pins/timing/timeset'
@@ -239,6 +239,10 @@ module OrigenTesters
239
239
  repeat: nil
240
240
  }.merge(options)
241
241
 
242
+ unless timeset.period_in_ns?
243
+ fail "You must supply a period_in_ns to timeset '#{timeset.name}' before you can cycle the tester!"
244
+ end
245
+ timeset.cycled = true
242
246
  if PatSeq.thread
243
247
  PatSeq.thread.cycle(options)
244
248
  else
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,9 @@
1
+ require_relative 'decompiler/decompiler_api'
2
+ require_relative 'decompiler/nodes'
3
+ require_relative 'decompiler/pattern'
4
+
5
+ module OrigenTesters
6
+ module Decompiler
7
+ extend API
8
+ end
9
+ end
@@ -0,0 +1,163 @@
1
+ module OrigenTesters
2
+ module Decompiler
3
+ module API
4
+ @registered_decompilers = []
5
+
6
+ # Decompiles the given pattern, returning
7
+ def decompile(pattern, options = {})
8
+ decompiled_pattern(pattern, options).decompile
9
+ end
10
+
11
+ # @note This method is the same as #decompile except that the module's
12
+ # #decompile method won't be automatically called.
13
+ def decompiled_pattern(pattern, options = {})
14
+ # decompiler!(pattern).decompiled_pattern(pattern)
15
+ _decompiler = options.delete(:decompiler)
16
+ _decompiler.nil? ? decompiler!(pattern).new(pattern, options) : _decompiler.new(pattern, options)
17
+ end
18
+
19
+ # Creates a decompiled pattern from the raw input directly.
20
+ # In this case, no attempts to figure out the decompiler are made. The
21
+ # suitable decompiler should either be given with the :decompiler parameter,
22
+ # or the current environment will be used.
23
+ def decompile_text(text, decompiler: nil)
24
+ if decompiler.nil?
25
+ select_decompiler!.new(text, direct_source: true).decompile
26
+ else
27
+ decompiler.new(text, direct_source: true).decompile
28
+ end
29
+ end
30
+ alias_method :decompile_str, :decompile_text
31
+ alias_method :decompile_string, :decompile_text
32
+ alias_method :decompile_raw_input, :decompile_text
33
+
34
+ # Returns the decompiler module that will be uesd to decompile the
35
+ # given pattern source.
36
+ def select_decompiler(pattern = nil, options = {})
37
+ if pattern.is_a?(Hash)
38
+ options = pattern
39
+ pattern = nil
40
+ elsif pattern.nil?
41
+ options = {}
42
+ pattern = nil
43
+ end
44
+
45
+ # if respond_to?(:suitable_decompiler_for)
46
+ # puts "HI".red
47
+ # puts self
48
+ # registered_decompilers = [self]
49
+ # end
50
+
51
+ _registered_decompilers = respond_to?(:suitable_decompiler_for) ? [self] : registered_decompilers
52
+
53
+ # We have the list of modules that support decompilation, but those modules
54
+ # could have sub-modules that support other decompilation flavors.
55
+ # We'll select the decompiler by just iterating through each support
56
+ # decompiler and until we find one that supports either the file extension,
57
+ # or the current tester name.
58
+ _registered_decompilers.each do |m|
59
+ if pattern
60
+ mod = m.suitable_decompiler_for(pattern: pattern, **options)
61
+ elsif tester.nil?
62
+ return nil
63
+ else
64
+ mod = m.suitable_decompiler_for(tester: Origen.tester.name.to_s, **options)
65
+ end
66
+
67
+ if mod
68
+ return mod
69
+ end
70
+ end
71
+
72
+ nil
73
+ end
74
+ alias_method :decompiler, :select_decompiler
75
+ alias_method :decompiler_for, :select_decompiler
76
+
77
+ def select_decompiler!(pattern = nil, options = {})
78
+ mod = select_decompiler(pattern, options)
79
+
80
+ if mod.nil? && pattern
81
+ # Origen.log.error "Unknown decompiler for file extension '#{File.extname(pattern)}'"
82
+ Origen.app!.fail(
83
+ message: "Cannot find a suitable decompiler for pattern source '#{pattern}' ('#{File.extname(pattern)}')",
84
+ exception_class: OrigenTesters::Decompiler::NoSuitableDecompiler
85
+ )
86
+ elsif mod.nil?
87
+ # Origen.log.error "Unknown decompiler for tester #{Origen.tester.name}"
88
+ # fail "Current environment '#{Orige.current_environment}' does not contain a suitable decompiler! Cannot select this as the decompiler."
89
+ Origen.app!.fail(
90
+ message: "Current environment '#{Origen.environment.file.basename}' does not contain a suitable decompiler! Cannot select this as the decompiler.",
91
+ exception_class: OrigenTesters::Decompiler::NoSuitableDecompiler
92
+ )
93
+ end
94
+ mod
95
+ end
96
+ alias_method :decompiler!, :select_decompiler!
97
+ alias_method :decompiler_for!, :select_decompiler!
98
+
99
+ # Returns all the registered decompiler modules.
100
+ # @note Registered decompilers are stored on the OrigenTesters::Decompiler module.
101
+ def registered_decompilers
102
+ OrigenTesters::Decompiler::API.instance_variable_get(:@registered_decompilers)
103
+ end
104
+
105
+ # Registers a new decompiler module.
106
+ # @return [TrueClass, FalseClass] Like Ruby's #require method, returns
107
+ # true if decompiler is now registered and returns false if the mod
108
+ # was previously registered.
109
+ # If there are problems registering the mod, an exception is raised.
110
+ # @raise [NoModule]
111
+ def register_decompiler(mod)
112
+ if mod.is_a?(String)
113
+ mod = eval(mod)
114
+ end
115
+
116
+ if registered_decompiler?(mod)
117
+ false
118
+ else
119
+ verify_decompiler_mod!(mod)
120
+ registered_decompilers << mod
121
+ true
122
+ end
123
+ end
124
+
125
+ # Verifies that the registered decompiler has the required methods
126
+ # available. Namely: #select_decompiler and #decompiled_pattern
127
+ def verify_decompiler_mod!(mod)
128
+ unless mod.respond_to?(:suitable_decompiler_for)
129
+ Origen.app!.fail(
130
+ exception_class: OrigenTesters::Decompiler::NoMethodError,
131
+ message: "No method #suitable_decompiler_for found on #{mod}. Cannot register as a decompiler."
132
+ )
133
+ end
134
+ true
135
+ end
136
+
137
+ # Queries if a decompiler is available for the given pattern.
138
+ def decompiler_for?(pattern = nil, options = {})
139
+ !select_decompiler(pattern, options).nil?
140
+ end
141
+
142
+ # Queries if the decompiler in mod has been registered.
143
+ def registered_decompiler?(mod)
144
+ if mod.is_a?(String)
145
+ mod = eval(mod)
146
+ end
147
+
148
+ registered_decompilers.include?(mod)
149
+ end
150
+
151
+ def execute(pattern, options = {})
152
+ decompile(pattern, options).execute(options)
153
+ end
154
+
155
+ def add_pins(pattern, options = {})
156
+ decompile(pattern, options).add_pins
157
+ end
158
+
159
+ def self.convert(pattern)
160
+ end
161
+ end
162
+ end
163
+ end