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
@@ -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