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 Timing
3
+ class InvalidModification < Origen::OrigenError
4
+ end
5
+
6
+ class Timeset
7
+ attr_accessor :name, :cycled, :called
8
+ attr_reader :period_in_ns
9
+
10
+ def initialize(attrs = {})
11
+ @cycled = false
12
+ @locked = false
13
+ @called = false
14
+
15
+ attrs.each do |name, value|
16
+ send("#{name}=", value)
17
+ end
18
+
19
+ self.period_in_ns = attrs[:period_in_ns]
20
+ end
21
+
22
+ # Returns true if the timeset has a shorter period than the supplied timeset
23
+ def shorter_period_than?(timeset)
24
+ period_in_ns < timeset.period_in_ns
25
+ end
26
+
27
+ # Returns true if <code>tester.cycle</code> has been called while this
28
+ # timeset was the current timeset.
29
+ # @return [true, false] <code>true</code> if this timeset has been cycled, <code>false</code> otherwise.
30
+ def cycled?
31
+ @cycled
32
+ end
33
+
34
+ # Returns true if this timeset does not allow changes to its period_in_ns
35
+ def locked?
36
+ @locked
37
+ end
38
+ alias_method :period_in_ns_locked?, :locked?
39
+ alias_method :period_locked?, :locked?
40
+ alias_method :locked, :locked?
41
+
42
+ # Locks the current value of the timeset's period_in_ns. Attempts to further
43
+ # adjust the period_in_ns will results in an exception.
44
+ # @return [true, false] <code>true</code> if the period_in_ns has been locked, <code>false</code> otherwise.
45
+ def lock!
46
+ @locked = true
47
+ end
48
+ alias_method :lock_period!, :lock!
49
+ alias_method :lock_period_in_ns!, :lock!
50
+
51
+ # Sets the period_in_ns of this timeset and issues a callback to the <code>tester's #set_timeset</code>
52
+ # method, if this timeset is the current timeset, keeping the tester in
53
+ # sync with the changes to this timeset.
54
+ # @raise [InvalidModification] If the timeset is locked.
55
+ # @raise [InvalidModification] If period_in_ns is changed after the tester has been cycled using this timeset.
56
+ # @return [Fixnum] The updated period in ns.
57
+ def period_in_ns=(p)
58
+ self._period_in_ns_ = p
59
+
60
+ # If this is the current timeset, reset the timeset from the tester
61
+ # side to verify that everything is in sync. Otherwise, the period_in_ns
62
+ # here may not match what the tester/DUT has.
63
+ if current_timeset?
64
+ OrigenTesters::Timing.set_timeset(name, p)
65
+ end
66
+
67
+ # Return the period
68
+ p
69
+ end
70
+
71
+ # Indicates whether a period_in_ns has been defined for this timeset.
72
+ # @return [true, false] <code>true</code> if the period_in_ns has been set, <code>false</code> otherwise.
73
+ def period_in_ns?
74
+ !@period_in_ns.nil?
75
+ end
76
+
77
+ # Returns the current timeset in seconds
78
+ # @return [Float] Current period in seconds
79
+ def period_in_secs
80
+ if period_in_ns
81
+ period_in_ns * (10**-9)
82
+ end
83
+ end
84
+ alias_method :period_in_seconds, :period_in_secs
85
+
86
+ # Indicates whether this timeset is the current timeset.
87
+ # @return [true, false] <code>true</code> if this timeset is the current timeset, <code>false</code> otherwise.
88
+ def current_timeset?
89
+ OrigenTesters::Timing.timeset == self
90
+ end
91
+
92
+ # Indicates whether this timeset is or has been set as the current timeset.
93
+ # @return [true, false] <code>true</code> if this timeset is or has beent he current timeset, <code>false</code> otherwise.
94
+ def called?
95
+ @called
96
+ end
97
+
98
+ # Alias for the {#name} attr_reader.
99
+ def id
100
+ name.to_sym
101
+ end
102
+
103
+ def dut_timeset
104
+ dut.timesets[id]
105
+ end
106
+
107
+ def method_missing(m, *args, &block)
108
+ if dut_timeset && (dut_timeset.methods.include?(m) || dut_timeset.private_methods.include?(m))
109
+ dut_timeset.send(m, *args, &block)
110
+ else
111
+ super
112
+ end
113
+ end
114
+
115
+ # @api private
116
+ def _period_in_ns_=(p)
117
+ if locked?
118
+ Origen.app.fail(
119
+ exception_class: InvalidModification,
120
+ message: "Timeset :#{@name}'s period_in_ns is locked to #{@period_in_ns} ns!"
121
+ )
122
+ end
123
+
124
+ # Adding this causes examples in Origen (not OrigenTesters) to fail.
125
+ # Needs further discussion and potentially an Origen examples change.
126
+ # if cycled? && p != period_in_ns
127
+ # Origen.app!.fail(
128
+ # exception_class: InvalidModification,
129
+ # message: [
130
+ # "Timeset :#{name}'s period_in_ns cannot be changed after a cycle has occurred using this timeset!",
131
+ # " period_in_ns change occurred at #{caller[0]}",
132
+ # " Attempted to change period from #{@period_in_ns} to #{p}"
133
+ # ].join("\n")
134
+ # )
135
+ # end
136
+ @period_in_ns = p
137
+ @period_in_ns
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,307 @@
1
+ module OrigenTesters
2
+ module Timing
3
+ module TimingAPI
4
+ # @see Timing#level_period
5
+ #
6
+ # When period levelling is enabled, vectors will be expanded like this:
7
+ # $tester.set_timeset("fast", 40)
8
+ # 2.cycles # fast 1 0 0 1 0
9
+ # # fast 1 0 0 1 0
10
+ # # Without levelling enabled
11
+ # $tester.set_timeset("slow", 80)
12
+ # 2.cycles # slow 1 0 0 1 0
13
+ # # slow 1 0 0 1 0
14
+ # # With levelling enabled
15
+ # $tester.set_timeset("slow", 80)
16
+ # 2.cycles # fast 1 0 0 1 0
17
+ # # fast 1 0 0 1 0
18
+ # # fast 1 0 0 1 0
19
+ # # fast 1 0 0 1 0
20
+ #
21
+ # The overall time of the levelled/expanded vectors matches that of the unlevelled
22
+ # case. i.e. 4 cycles at fast speed (4 * 40ns = 160ns) is equivalent to 2 cycles
23
+ # at slow speed (2 * 80ns = 160ns).
24
+ #
25
+ # However, what if pin 1 in the example above was a clk pin where the 1 -> 0 transition
26
+ # was handled by the timing setup for that pin.
27
+ # In that case the levelled code is no longer functionally correct since it contains
28
+ # 4 clock pulses while the unlevelled code only has 2.
29
+ #
30
+ # Such pins can be specified via this attribute and the levelling logic will then
31
+ # automatically adjust the drive state to keep the number of pulses correct.
32
+ # It would automatically adjust to the alternative logic state where 0 means 'on'
33
+ # and 1 means 'off' if applicable.
34
+ #
35
+ # $tester.timing_toggled_pins << $dut.pin(:tclk) # This is pin 1
36
+ #
37
+ # $tester.set_timeset("fast", 40)
38
+ # 2.cycles # fast 1 0 0 1 0
39
+ # # fast 1 0 0 1 0
40
+ # # Without levelling enabled
41
+ # $tester.set_timeset("slow", 80)
42
+ # 2.cycles # slow 1 0 0 1 0
43
+ # # slow 1 0 0 1 0
44
+ # # With levelling enabled
45
+ # $tester.set_timeset("slow", 80)
46
+ # 2.cycles # fast 1 0 0 1 0
47
+ # # fast 0 0 0 1 0
48
+ # # fast 1 0 0 1 0
49
+ # # fast 0 0 0 1 0
50
+ #
51
+ # Multiple pins an be specified like this:
52
+ # $tester.timing_toggled_pins = [$dut.pin(:tclk), $dut.pin(:clk)] # Overrides any pins added elsewhere
53
+ # $tester.timing_toggled_pins << [$dut.pin(:tclk), $dut.pin(:clk)] # In addition to any pins added elsewhere
54
+ def timing_toggled_pins
55
+ @timing_toggled_pins ||= []
56
+ @timing_toggled_pins.flatten!
57
+ @timing_toggled_pins
58
+ end
59
+
60
+ # Set the timeset for the next vectors, this will remain in place until the next
61
+ # time this is called.
62
+ #
63
+ # $tester.set_timeset("bist_25mhz", 40)
64
+ #
65
+ # This method also accepts a block in which case the contained vectors will generate
66
+ # with the supplied timeset and subsequent vectors will return to the previous timeset
67
+ # automatically.
68
+ #
69
+ # $tester.set_timeset("bist_25mhz", 40) do
70
+ # $tester.cycle
71
+ # end
72
+ #
73
+ # The arguments can also be supplied as a single array, or not at all. In the latter case
74
+ # the existing timeset will simply be preserved. This is useful if you have timesets that
75
+ # can be conditionally set based on the target.
76
+ #
77
+ # # Target 1
78
+ # $soc.readout_timeset = ["readout", 120]
79
+ # # Target 2
80
+ # $soc.readout_timeset = false
81
+ #
82
+ # # This code is compatible with both targets, in the first case the timeset will switch
83
+ # # over, in the second case the existing timeset will be preserved.
84
+ # $tester.set_timeset($soc.readout_timeset) do
85
+ # $tester.cycle
86
+ # end
87
+ def set_timeset(timeset, period_in_ns = nil, &block)
88
+ OrigenTesters::Timing.set_timeset(timeset, period_in_ns, &block)
89
+ end
90
+ alias_method :with_timeset, :set_timeset
91
+
92
+ def timesets
93
+ OrigenTesters::Timing.timesets
94
+ end
95
+
96
+ def timeset?(t)
97
+ OrigenTesters::Timing.timeset?(t)
98
+ end
99
+
100
+ # Returns the timeset (a Timeset object) with the shortest period that has been
101
+ # encountered so far in the course of generating the current pattern.
102
+ #
103
+ # A tester object is re-instantiated at the start of every pattern which will reset
104
+ # this variable.
105
+ def min_period_timeset
106
+ OrigenTesters::Timing.min_period_timeset
107
+ end
108
+
109
+ def before_timeset_change(options = {})
110
+ end
111
+
112
+ # Returns the current period in ns, or nil, if no timeset has been set.
113
+ def period_in_ns
114
+ OrigenTesters::Timing.period_in_ns
115
+ end
116
+
117
+ def period_in_secs
118
+ OrigenTesters::Timing.period_in_ns
119
+ end
120
+ alias_method :period_in_seconds, :period_in_secs
121
+
122
+ # Cause the pattern to wait.
123
+ # The following options are available to help you specify the time to wait:
124
+ # * :cycles - delays specified in raw cycles, the test model is responsible for translating this into a sequence of valid repeat statements
125
+ # * :time_in_ns - time specified in nano-seconds
126
+ # * :time_in_us - time specified in micro-seconds
127
+ # * :time_in_ms - time specified in milli-seconds
128
+ # * :time_in_s - time specified in seconds
129
+ # If more than one option is supplied they will get added together to give a final
130
+ # delay time expressed in cycles.
131
+ # ==== Examples
132
+ # $tester.wait(cycles: 100, time_in_ns: 200) # Wait for 100 cycles + 200ns
133
+ # This method can also be used to trigger a match loop in which case the supplied time
134
+ # becomes the time out for the match. See the J750#match method for full details of the
135
+ # available options.
136
+ # $tester.wait(match: true, state: :high, pin: $dut.pin(:done), time_in_ms: 500)
137
+ def wait(options = {})
138
+ options = {
139
+ cycles: 0,
140
+ time_in_cycles: 0,
141
+ time_in_us: 0,
142
+ time_in_ns: 0,
143
+ time_in_ms: 0,
144
+ time_in_s: 0,
145
+ match: false, # Set to true to invoke a match loop where the supplied delay
146
+ # will become the timeout duration
147
+ }.merge(options)
148
+
149
+ cycles = 0
150
+ cycles += options[:cycles] + options[:time_in_cycles]
151
+ cycles += s_to_cycles(options[:time_in_s])
152
+ cycles += ms_to_cycles(options[:time_in_ms])
153
+ cycles += us_to_cycles(options[:time_in_us])
154
+ cycles += ns_to_cycles(options[:time_in_ns])
155
+
156
+ time = cycles * current_period_in_ns # Total delay in ns
157
+ case
158
+ when time < 1000 # When less than 1us
159
+ cc "Wait for #{'a maximum of ' if options[:match]}#{time}ns"
160
+ when time < 1_000_000 # When less than 1ms
161
+ cc "Wait for #{'a maximum of ' if options[:match]}#{(time.to_f / 1000).round(1)}us" # Display delay in us
162
+ when time < 1_000_000_000 # When less than 1s
163
+ cc "Wait for #{'a maximum of ' if options[:match]}#{(time.to_f / 1_000_000).round(1)}ms"
164
+ else
165
+ cc "Wait for #{'a maximum of ' if options[:match]}%.2fs" % (time.to_f / 1_000_000_000)
166
+ end
167
+
168
+ if cycles > 0 # Allow this function to be called with 0 in which case it will just return
169
+ if options[:match]
170
+ if block_given?
171
+ match_block(cycles, options) { yield }
172
+ else
173
+ match(options[:pin], options[:state], cycles, options)
174
+ end
175
+ else
176
+ delay(cycles)
177
+ end
178
+ end
179
+ end
180
+
181
+ # @see Timing#wait
182
+ # @api private
183
+ # This should not be called directly, call via tester#wait
184
+ def delay(cycles, options = {})
185
+ (cycles / max_repeat_loop).times do
186
+ if block_given?
187
+ yield options.merge(repeat: max_repeat_loop)
188
+ else
189
+ cycle(options.merge(repeat: max_repeat_loop))
190
+ end
191
+ end
192
+ if block_given?
193
+ yield options.merge(repeat: (cycles % max_repeat_loop))
194
+ else
195
+ cycle(options.merge(repeat: (cycles % max_repeat_loop)))
196
+ end
197
+ end
198
+
199
+ def max_repeat_loop
200
+ @max_repeat_loop || 65_535
201
+ end
202
+
203
+ def min_repeat_loop
204
+ @min_repeat_loop
205
+ end
206
+
207
+ # Returns any timesets that have been called during this execution.
208
+ # @return [Array] Array of OrigenTesters::Timing::Timeset objects that have been used so far.
209
+ def called_timesets
210
+ OrigenTesters::Timing.called_timesets
211
+ end
212
+ alias_method :called_timesets_by_instance, :called_timesets
213
+
214
+ # Similar to {#called_timesets}, but returns the name of the timesets instead.
215
+ # @return [Array] Array of names corresponding to the timesets that have been used so far.
216
+ def called_timesets_by_name
217
+ OrigenTesters::Timing.called_timesets_by_name
218
+ end
219
+
220
+ def current_period_in_ns
221
+ OrigenTesters::Timing.current_period_in_ns
222
+ end
223
+ alias_method :current_period, :current_period_in_ns
224
+ alias_method :period, :current_period_in_ns
225
+
226
+ def current_timeset
227
+ OrigenTesters::Timing.current_timeset
228
+ end
229
+ alias_method :timeset, :current_timeset
230
+
231
+ # Convert the supplied number of cycles to a time, based on the SoC defined cycle period
232
+ def cycles_to_time(cycles) # :nodoc:
233
+ (cycles * current_period_in_ns).to_f / 1_000_000_000
234
+ end
235
+
236
+ # This function can be used to generate a clock or some other repeating function
237
+ # that spans accross a range of vectors.
238
+ # The period of each cycle and the duration of the sequence are supplied via the following
239
+ # options:
240
+ # * :period_in_cycles
241
+ # * :period_in_ns
242
+ # * :period_in_us
243
+ # * :period_in_ms
244
+ # * :duration_in_cycles
245
+ # * :duration_in_ns
246
+ # * :duration_in_us
247
+ # * :duration_in_ms
248
+ # If multiple definitions for either option are supplied then they will be added
249
+ # together.
250
+ # ==== Example
251
+ # # Supply a clock pulse on :pinA for 100ms
252
+ # $tester.count(:period_in_cycles => 10, :duration_in_ms => 100) do
253
+ # $top.pin(:pinA).drive!(1)
254
+ # $top.pin(:pinA).drive!(0)
255
+ # end
256
+ def count(options = {})
257
+ options = { period_in_cycles: 0, period_in_ms: 0, period_in_us: 0, period_in_ns: 0,
258
+ duration_in_cycles: 0, duration_in_ms: 0, duration_in_us: 0, duration_in_ns: 0
259
+ }.merge(options)
260
+
261
+ period_cycles = options[:period_in_cycles] + ms_to_cycles(options[:period_in_ms]) +
262
+ us_to_cycles(options[:period_in_us]) + ns_to_cycles(options[:period_in_ns])
263
+
264
+ duration_cycles = options[:duration_in_cycles] + ms_to_cycles(options[:duration_in_ms]) +
265
+ us_to_cycles(options[:duration_in_us]) + ns_to_cycles(options[:duration_in_ns])
266
+
267
+ total = 0
268
+ while total < duration_cycles
269
+ wait(time_in_cycles: period_cycles)
270
+ yield # Return control back to caller
271
+ total += period_cycles
272
+ end
273
+ end
274
+
275
+ private
276
+
277
+ def s_to_cycles(time) # :nodoc:
278
+ ((time.to_f) * 1000 * 1000 * 1000 / current_period_in_ns).to_int
279
+ end
280
+
281
+ def ms_to_cycles(time) # :nodoc:
282
+ ((time.to_f) * 1000 * 1000 / current_period_in_ns).to_int
283
+ end
284
+
285
+ def us_to_cycles(time) # :nodoc:
286
+ ((time.to_f * 1000) / current_period_in_ns).to_int
287
+ end
288
+
289
+ def ns_to_cycles(time) # :nodoc:
290
+ (time.to_f / current_period_in_ns).to_int
291
+ end
292
+
293
+ def cycles_to_us(cycles) # :nodoc:
294
+ ((cycles.to_f * current_period_in_ns) / (1000)).ceil
295
+ end
296
+
297
+ def cycles_to_ms(cycles) # :nodoc:
298
+ ((cycles.to_f * current_period_in_ns) / (1000 * 1000)).ceil
299
+ end
300
+
301
+ # Cycles to tenths of a second
302
+ def cycles_to_ts(cycles) # :nodoc:
303
+ ((cycles.to_f * current_period_in_ns) / (1000 * 1000 * 100)).ceil
304
+ end
305
+ end
306
+ end
307
+ end
File without changes
File without changes