origen_testers 0.13.1 → 0.13.2

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 (258) hide show
  1. checksums.yaml +4 -4
  2. data/config/application.rb +151 -151
  3. data/config/boot.rb +13 -13
  4. data/config/commands.rb +85 -86
  5. data/config/users.rb +18 -18
  6. data/config/version.rb +8 -8
  7. data/lib/commands/build.rb +69 -69
  8. data/lib/commands/run.rb +48 -48
  9. data/lib/origen_testers.rb +47 -47
  10. data/lib/origen_testers/api.rb +381 -381
  11. data/lib/origen_testers/basic_test_setups.rb +105 -105
  12. data/lib/origen_testers/callback_handlers.rb +59 -59
  13. data/lib/origen_testers/command_based_tester.rb +45 -45
  14. data/lib/origen_testers/flow.rb +382 -382
  15. data/lib/origen_testers/generator.rb +283 -283
  16. data/lib/origen_testers/generator/identity_map.rb +23 -23
  17. data/lib/origen_testers/generator/placeholder.rb +11 -11
  18. data/lib/origen_testers/generator/test_numberer.rb +23 -23
  19. data/lib/origen_testers/igxl_based_tester.rb +12 -12
  20. data/lib/origen_testers/igxl_based_tester/base.rb +1100 -1099
  21. data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -79
  22. data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +169 -169
  23. data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -98
  24. data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -60
  25. data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -24
  26. data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -39
  27. data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +130 -130
  28. data/lib/origen_testers/igxl_based_tester/base/flow.rb +460 -460
  29. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +276 -276
  30. data/lib/origen_testers/igxl_based_tester/base/generator.rb +607 -607
  31. data/lib/origen_testers/igxl_based_tester/base/global_specs.rb +83 -83
  32. data/lib/origen_testers/igxl_based_tester/base/job.rb +75 -75
  33. data/lib/origen_testers/igxl_based_tester/base/jobs.rb +44 -44
  34. data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -59
  35. data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -39
  36. data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -31
  37. data/lib/origen_testers/igxl_based_tester/base/levelset.rb +110 -110
  38. data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -109
  39. data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -38
  40. data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -68
  41. data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -56
  42. data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -38
  43. data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -68
  44. data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -56
  45. data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -38
  46. data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -93
  47. data/lib/origen_testers/igxl_based_tester/base/references.rb +25 -25
  48. data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +322 -322
  49. data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +66 -66
  50. data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +212 -212
  51. data/lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb +37 -37
  52. data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -37
  53. data/lib/origen_testers/igxl_based_tester/base/timesets.rb +49 -49
  54. data/lib/origen_testers/igxl_based_tester/base/timesets_basic.rb +49 -49
  55. data/lib/origen_testers/igxl_based_tester/files.rb +43 -43
  56. data/lib/origen_testers/igxl_based_tester/j750.rb +269 -269
  57. data/lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb +32 -32
  58. data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -10
  59. data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -19
  60. data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -19
  61. data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -9
  62. data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -10
  63. data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -9
  64. data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -18
  65. data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -10
  66. data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -9
  67. data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -18
  68. data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -10
  69. data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +746 -746
  70. data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -9
  71. data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -10
  72. data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -34
  73. data/lib/origen_testers/igxl_based_tester/j750_hpt/custom_test_instance.rb +32 -32
  74. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -9
  75. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -9
  76. data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -19
  77. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -9
  78. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -9
  79. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -9
  80. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -9
  81. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -9
  82. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -9
  83. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -9
  84. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -9
  85. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +599 -599
  86. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -9
  87. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -9
  88. data/lib/origen_testers/igxl_based_tester/parser.rb +102 -102
  89. data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -9
  90. data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -33
  91. data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -48
  92. data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -339
  93. data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -109
  94. data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -203
  95. data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -21
  96. data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -92
  97. data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -31
  98. data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +420 -420
  99. data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -24
  100. data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -13
  101. data/lib/origen_testers/igxl_based_tester/ultraflex.rb +798 -798
  102. data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -10
  103. data/lib/origen_testers/igxl_based_tester/ultraflex/ate_hardware.rb +949 -949
  104. data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +36 -36
  105. data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -10
  106. data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -9
  107. data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -9
  108. data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -9
  109. data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -10
  110. data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +158 -158
  111. data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -19
  112. data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -19
  113. data/lib/origen_testers/igxl_based_tester/ultraflex/global_specs.rb +10 -10
  114. data/lib/origen_testers/igxl_based_tester/ultraflex/job.rb +9 -9
  115. data/lib/origen_testers/igxl_based_tester/ultraflex/jobs.rb +10 -10
  116. data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -9
  117. data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -9
  118. data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -9
  119. data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -10
  120. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -9
  121. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -10
  122. data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -9
  123. data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -18
  124. data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -10
  125. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -9
  126. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -18
  127. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -10
  128. data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -10
  129. data/lib/origen_testers/igxl_based_tester/ultraflex/references.rb +10 -10
  130. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +0 -0
  131. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +0 -0
  132. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +0 -0
  133. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb +0 -0
  134. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb +0 -0
  135. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +0 -0
  136. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +0 -0
  137. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb +0 -0
  138. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +0 -0
  139. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb +0 -0
  140. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +315 -315
  141. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -9
  142. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -10
  143. data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -9
  144. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -10
  145. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets_basic.rb +10 -10
  146. data/lib/origen_testers/interface.rb +345 -324
  147. data/lib/origen_testers/memory_style.rb +77 -77
  148. data/lib/origen_testers/no_interface.rb +7 -7
  149. data/lib/origen_testers/origen_ext/application/runner.rb +25 -25
  150. data/lib/origen_testers/origen_ext/generator.rb +54 -54
  151. data/lib/origen_testers/origen_ext/generator/flow.rb +91 -77
  152. data/lib/origen_testers/origen_ext/generator/resources.rb +21 -21
  153. data/lib/origen_testers/origen_ext/pins/pin.rb +78 -78
  154. data/lib/origen_testers/origen_ext/pins/pin_collection.rb +84 -84
  155. data/lib/origen_testers/parser.rb +22 -22
  156. data/lib/origen_testers/parser/description_lookup.rb +62 -62
  157. data/lib/origen_testers/parser/searchable_array.rb +30 -30
  158. data/lib/origen_testers/parser/searchable_hash.rb +30 -30
  159. data/lib/origen_testers/pattern_compilers.rb +116 -116
  160. data/lib/origen_testers/pattern_compilers/assembler.rb +88 -88
  161. data/lib/origen_testers/pattern_compilers/job.rb +96 -96
  162. data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -599
  163. data/lib/origen_testers/program_generators.rb +62 -62
  164. data/lib/origen_testers/smartest_based_tester.rb +8 -8
  165. data/lib/origen_testers/smartest_based_tester/base.rb +576 -567
  166. data/lib/origen_testers/smartest_based_tester/base/flow.rb +296 -291
  167. data/lib/origen_testers/smartest_based_tester/base/generator.rb +207 -194
  168. data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +32 -32
  169. data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +69 -69
  170. data/lib/origen_testers/smartest_based_tester/base/processors.rb +16 -16
  171. data/lib/origen_testers/smartest_based_tester/base/processors/adjacent_if_combiner.rb +106 -106
  172. data/lib/origen_testers/smartest_based_tester/base/processors/continue_implementer.rb +39 -39
  173. data/lib/origen_testers/smartest_based_tester/base/processors/empty_branch_cleaner.rb +21 -21
  174. data/lib/origen_testers/smartest_based_tester/base/processors/extract_run_flag_table.rb +33 -33
  175. data/lib/origen_testers/smartest_based_tester/base/processors/extract_set_variables.rb +22 -22
  176. data/lib/origen_testers/smartest_based_tester/base/processors/flag_optimizer.rb +188 -188
  177. data/lib/origen_testers/smartest_based_tester/base/processors/if_ran_cleaner.rb +34 -34
  178. data/lib/origen_testers/smartest_based_tester/base/test_method.rb +178 -164
  179. data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +77 -73
  180. data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -33
  181. data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -38
  182. data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -19
  183. data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -147
  184. data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +65 -65
  185. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +208 -193
  186. data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -54
  187. data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +38 -38
  188. data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -8
  189. data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -89
  190. data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +181 -181
  191. data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -54
  192. data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -10
  193. data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -19
  194. data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -10
  195. data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -10
  196. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -17
  197. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -13
  198. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.tf.erb +236 -214
  199. data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +48 -48
  200. data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -9
  201. data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -9
  202. data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -9
  203. data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -9
  204. data/lib/origen_testers/smartest_based_tester/v93k/variables_file.rb +10 -10
  205. data/lib/origen_testers/test/basic_interface.rb +17 -17
  206. data/lib/origen_testers/test/block.rb +21 -21
  207. data/lib/origen_testers/test/custom_test_interface.rb +111 -111
  208. data/lib/origen_testers/test/dut.rb +295 -295
  209. data/lib/origen_testers/test/dut2.rb +76 -76
  210. data/lib/origen_testers/test/dut3.rb +244 -244
  211. data/lib/origen_testers/test/interface.rb +503 -503
  212. data/lib/origen_testers/test/nvm.rb +94 -94
  213. data/lib/origen_testers/timing.rb +368 -368
  214. data/lib/origen_testers/vector.rb +207 -207
  215. data/lib/origen_testers/vector_based_tester.rb +41 -41
  216. data/lib/origen_testers/vector_generator.rb +655 -655
  217. data/lib/origen_testers/vector_pipeline.rb +302 -302
  218. data/pattern/bitmap.rb +7 -7
  219. data/pattern/dc_instr.rb +7 -7
  220. data/pattern/delay.rb +7 -7
  221. data/pattern/freq_counter.rb +6 -6
  222. data/pattern/mem_test.rb +8 -8
  223. data/pattern/multi_vector.rb +122 -122
  224. data/pattern/multi_vector_plus1.rb +125 -125
  225. data/pattern/nvm/j750/add_late_pins.rb +3 -3
  226. data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -8
  227. data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -8
  228. data/pattern/nvm/j750/j750_halt.rb +159 -159
  229. data/pattern/nvm/j750/j750_workout.rb +209 -209
  230. data/pattern/nvm/j750/timing.rb +73 -73
  231. data/pattern/read_write_reg.rb +61 -61
  232. data/pattern/reset.rb +4 -4
  233. data/pattern/subroutines.rb +69 -69
  234. data/pattern/tester_overlay.rb +61 -52
  235. data/pattern/tester_store.rb +28 -28
  236. data/program/_additional_erase.rb +7 -7
  237. data/program/_efa_resources.rb +7 -7
  238. data/program/_erase.rb +25 -25
  239. data/program/_erase_vfy.rb +5 -5
  240. data/program/_iv_resources.rb +10 -10
  241. data/program/basic_interface.rb +5 -5
  242. data/program/components/_prb1_main.rb +222 -222
  243. data/program/components/_temp.rb +6 -6
  244. data/program/custom_tests.rb +10 -10
  245. data/program/flow_control.rb +422 -422
  246. data/program/prb1.rb +11 -11
  247. data/program/prb1_resources.rb +28 -28
  248. data/program/prb2.rb +27 -27
  249. data/program/test.rb +29 -29
  250. data/program/uflex_resources.rb +199 -199
  251. data/templates/example.txt.erb +53 -53
  252. data/templates/j750/program_sheet.txt.erb +9 -9
  253. data/templates/manifest/v93k.yaml.erb +22 -22
  254. data/templates/web/index.md.erb +51 -51
  255. data/templates/web/layouts/_basic.html.erb +15 -15
  256. data/templates/web/partials/_navbar.html.erb +22 -22
  257. data/templates/web/release_notes.md.erb +5 -5
  258. metadata +2 -2
@@ -1,291 +1,296 @@
1
- require 'origen_testers/smartest_based_tester/base/processors'
2
- module OrigenTesters
3
- module SmartestBasedTester
4
- class Base
5
- class Flow < ATP::Formatter
6
- include OrigenTesters::Flow
7
-
8
- attr_accessor :test_suites, :test_methods, :lines, :stack, :var_filename
9
- # Returns an array containing all runtime variables which get set by the flow
10
- attr_reader :set_runtime_variables
11
-
12
- attr_accessor :add_flow_enable
13
-
14
- def var_filename
15
- @var_filename || 'global'
16
- end
17
-
18
- def subdirectory
19
- 'testflow/mfh.testflow.group'
20
- end
21
-
22
- def filename
23
- super.gsub('_flow', '')
24
- end
25
-
26
- def hardware_bin_descriptions
27
- @hardware_bin_descriptions ||= {}
28
- end
29
-
30
- def flow_control_variables
31
- Origen.interface.variables_file(self).flow_control_variables
32
- end
33
-
34
- def runtime_control_variables
35
- Origen.interface.variables_file(self).runtime_control_variables
36
- end
37
-
38
- def at_flow_start
39
- model # Call to ensure the signature gets populated
40
- end
41
-
42
- def at_flow_end
43
- end
44
-
45
- def flow_header
46
- h = ['{']
47
- if add_flow_enable
48
- var = filename.sub(/\..*/, '').upcase
49
- var = generate_flag_name("#{var}_ENABLE")
50
- if add_flow_enable == :enabled
51
- flow_control_variables << [var, 1]
52
- else
53
- flow_control_variables << [var, 0]
54
- end
55
- h << " if @#{var} == 1 then"
56
- h << ' {'
57
- i = ' '
58
- else
59
- i = ''
60
- end
61
- if set_runtime_variables.size > 0
62
- h << i + ' {'
63
- set_runtime_variables.each do |var|
64
- h << i + " @#{generate_flag_name(var.to_s)} = -1;"
65
- end
66
- h << i + ' }, open,"Init Flow Control Vars", ""'
67
- end
68
- h
69
- end
70
-
71
- def flow_footer
72
- f = []
73
- if add_flow_enable
74
- f << ' }'
75
- f << ' else'
76
- f << ' {'
77
- f << ' }'
78
- end
79
- f << "}, open,\"#{filename.sub(/\..*/, '').upcase}\", \"\""
80
- f
81
- end
82
-
83
- def finalize(options = {})
84
- super
85
- test_suites.finalize
86
- test_methods.finalize
87
- @indent = add_flow_enable ? 2 : 1
88
- @lines = []
89
- @stack = { on_fail: [], on_pass: [] }
90
- m = Processors::ContinueImplementer.new.process(model.ast)
91
- m = Processors::IfRanCleaner.new.process(m)
92
- m = Processors::FlagOptimizer.new.run(m)
93
- m = Processors::AdjacentIfCombiner.new.process(m)
94
- m = Processors::EmptyBranchCleaner.new.process(m)
95
- @set_runtime_variables = Processors::ExtractSetVariables.new.run(m)
96
- process(m)
97
- end
98
-
99
- def line(str)
100
- @lines << (' ' * @indent) + str
101
- end
102
-
103
- # def on_flow(node)
104
- # line '{'
105
- # @indent += 1
106
- # process_all(node.children)
107
- # @indent -= 1
108
- # line "}, open,\"#{unique_group_name(node.find(:name).value)}\", \"\""
109
- # end
110
-
111
- def on_test(node)
112
- name = node.find(:object).to_a[0]
113
- name = name.name unless name.is_a?(String)
114
- if node.children.any? { |n| t = n.try(:type); t == :on_fail || t == :on_pass } ||
115
- !stack[:on_pass].empty? || !stack[:on_fail].empty?
116
- line "run_and_branch(#{name})"
117
- process_all(node.to_a.reject { |n| t = n.try(:type); t == :on_fail || t == :on_pass })
118
- line 'then'
119
- line '{'
120
- @indent += 1
121
- on_pass = node.children.find { |n| n.try(:type) == :on_pass }
122
- process_all(on_pass) if on_pass
123
- stack[:on_pass].each { |n| process_all(n) }
124
- @indent -= 1
125
- line '}'
126
- line 'else'
127
- line '{'
128
- @indent += 1
129
- on_fail = node.children.find { |n| n.try(:type) == :on_fail }
130
- process_all(on_fail) if on_fail
131
- stack[:on_fail].each { |n| process_all(n) }
132
- @indent -= 1
133
- line '}'
134
- else
135
- line "run(#{name});"
136
- end
137
- end
138
-
139
- def on_render(node)
140
- node.to_a[0].split("\n").each do |l|
141
- line(l)
142
- end
143
- end
144
-
145
- def on_job(node)
146
- jobs, state, *nodes = *node
147
- jobs = clean_job(jobs)
148
- runtime_control_variables << ['JOB', '']
149
- condition = jobs.join(' or ')
150
- line "if #{condition} then"
151
- line '{'
152
- @indent += 1
153
- process_all(node) if state
154
- @indent -= 1
155
- line '}'
156
- line 'else'
157
- line '{'
158
- @indent += 1
159
- process_all(node) unless state
160
- @indent -= 1
161
- line '}'
162
- end
163
-
164
- def on_condition_flag(node)
165
- flag, state, *nodes = *node
166
- flag_true = node.find(:flag_true)
167
- flag_false = node.find(:flag_false)
168
- if flag.is_a?(Array)
169
- condition = flag.map { |f| "@#{generate_flag_name(f)} == 1" }.join(' or ')
170
- else
171
- condition = "@#{generate_flag_name(flag)} == 1"
172
- end
173
- line "if #{condition} then"
174
- line '{'
175
- @indent += 1
176
- if flag_true
177
- process_all(flag_true.children)
178
- else
179
- process_all(nodes) if state
180
- end
181
- @indent -= 1
182
- line '}'
183
- line 'else'
184
- line '{'
185
- @indent += 1
186
- if flag_false
187
- process_all(flag_false.children)
188
- else
189
- process_all(nodes) unless state
190
- end
191
- @indent -= 1
192
- line '}'
193
- end
194
-
195
- def on_flow_flag(node)
196
- flag, state, *nodes = *node
197
- [flag].flatten.each do |f|
198
- flow_control_variables << generate_flag_name(f)
199
- end
200
- on_condition_flag(node)
201
- end
202
-
203
- def on_run_flag(node)
204
- flag, state, *nodes = *node
205
- [flag].flatten.each do |f|
206
- runtime_control_variables << generate_flag_name(f)
207
- end
208
- on_condition_flag(node)
209
- end
210
-
211
- def on_enable_flow_flag(node)
212
- flag = node.value.upcase
213
- flow_control_variables << flag
214
- line "@#{flag} = 1;"
215
- end
216
-
217
- def on_disable_flow_flag(node)
218
- flag = node.value.upcase
219
- flow_control_variables << flag
220
- line "@#{flag} = 0;"
221
- end
222
-
223
- def on_set_run_flag(node)
224
- flag = generate_flag_name(node.value)
225
- runtime_control_variables << flag
226
- line "@#{flag} = 1;"
227
- end
228
-
229
- def on_group(node)
230
- on_fail = node.children.find { |n| n.try(:type) == :on_fail }
231
- on_pass = node.children.find { |n| n.try(:type) == :on_pass }
232
- line '{'
233
- @indent += 1
234
- stack[:on_fail] << on_fail if on_fail
235
- stack[:on_pass] << on_pass if on_pass
236
- process_all(node.children - [on_fail, on_pass])
237
- stack[:on_fail].pop if on_fail
238
- stack[:on_pass].pop if on_pass
239
- @indent -= 1
240
- line "}, open,\"#{unique_group_name(node.find(:name).value)}\", \"\""
241
- end
242
-
243
- def on_set_result(node)
244
- bin = node.find(:bin).try(:value)
245
- desc = node.find(:bin).to_a[1]
246
- sbin = node.find(:softbin).try(:value)
247
- sdesc = node.find(:softbin).to_a[1] || 'fail'
248
- if bin && desc
249
- hardware_bin_descriptions[bin] ||= desc
250
- end
251
-
252
- if node.to_a[0] == 'pass'
253
- line "stop_bin \"#{sbin}\", \"\", , good, noreprobe, green, #{bin}, over_on;"
254
- else
255
- line "stop_bin \"#{sbin}\", \"#{sdesc}\", , bad, noreprobe, red, #{bin}, over_on;"
256
- end
257
- end
258
-
259
- def on_log(node)
260
- line "print_dl(\"#{node.to_a[0]}\");"
261
- end
262
-
263
- def unique_group_name(name)
264
- @group_names ||= {}
265
- if @group_names[name]
266
- @group_names[name] += 1
267
- "#{name}_#{@group_names[name]}"
268
- else
269
- @group_names[name] = 1
270
- name
271
- end
272
- end
273
-
274
- def clean_job(job)
275
- [job].flatten.map { |j| "@JOB == \"#{j.to_s.upcase}\"" }
276
- end
277
-
278
- private
279
-
280
- def generate_flag_name(flag)
281
- case flag[0]
282
- when '$'
283
- flag[1..-1]
284
- else
285
- flag.upcase
286
- end
287
- end
288
- end
289
- end
290
- end
291
- end
1
+ require 'origen_testers/smartest_based_tester/base/processors'
2
+ module OrigenTesters
3
+ module SmartestBasedTester
4
+ class Base
5
+ class Flow < ATP::Formatter
6
+ include OrigenTesters::Flow
7
+
8
+ attr_accessor :test_suites, :test_methods, :lines, :stack, :var_filename
9
+ # Returns an array containing all runtime variables which get set by the flow
10
+ attr_reader :set_runtime_variables
11
+
12
+ attr_accessor :add_flow_enable, :flow_name
13
+
14
+ def var_filename
15
+ @var_filename || 'global'
16
+ end
17
+
18
+ def subdirectory
19
+ 'testflow/mfh.testflow.group'
20
+ end
21
+
22
+ def filename
23
+ super.gsub('_flow', '')
24
+ end
25
+
26
+ def flow_name
27
+ @flow_name || filename.sub(/\..*/, '').upcase
28
+ end
29
+
30
+ def hardware_bin_descriptions
31
+ @hardware_bin_descriptions ||= {}
32
+ end
33
+
34
+ def flow_control_variables
35
+ Origen.interface.variables_file(self).flow_control_variables
36
+ end
37
+
38
+ def runtime_control_variables
39
+ Origen.interface.variables_file(self).runtime_control_variables
40
+ end
41
+
42
+ def at_flow_start
43
+ model # Call to ensure the signature gets populated
44
+ end
45
+
46
+ def at_flow_end
47
+ end
48
+
49
+ def flow_header
50
+ h = [' {']
51
+ if add_flow_enable
52
+ var = filename.sub(/\..*/, '').upcase
53
+ var = generate_flag_name("#{var}_ENABLE")
54
+ if add_flow_enable == :enabled
55
+ flow_control_variables << [var, 1]
56
+ else
57
+ flow_control_variables << [var, 0]
58
+ end
59
+ h << " if @#{var} == 1 then"
60
+ h << ' {'
61
+ i = ' '
62
+ else
63
+ i = ''
64
+ end
65
+ if set_runtime_variables.size > 0
66
+ h << i + ' {'
67
+ set_runtime_variables.each do |var|
68
+ h << i + " @#{generate_flag_name(var.to_s)} = -1;"
69
+ end
70
+ h << i + ' }, open,"Init Flow Control Vars", ""'
71
+ end
72
+ h
73
+ end
74
+
75
+ def flow_footer
76
+ f = []
77
+ if add_flow_enable
78
+ f << ' }'
79
+ f << ' else'
80
+ f << ' {'
81
+ f << ' }'
82
+ end
83
+ f << ''
84
+ f << " }, open,\"#{flow_name}\",\"\""
85
+ f
86
+ end
87
+
88
+ def finalize(options = {})
89
+ super
90
+ test_suites.finalize
91
+ test_methods.finalize
92
+ @indent = add_flow_enable ? 2 : 1
93
+ @lines = []
94
+ @stack = { on_fail: [], on_pass: [] }
95
+ m = Processors::ContinueImplementer.new.process(model.ast)
96
+ m = Processors::IfRanCleaner.new.process(m)
97
+ m = Processors::FlagOptimizer.new.run(m)
98
+ m = Processors::AdjacentIfCombiner.new.process(m)
99
+ m = Processors::EmptyBranchCleaner.new.process(m)
100
+ @set_runtime_variables = Processors::ExtractSetVariables.new.run(m)
101
+ process(m)
102
+ end
103
+
104
+ def line(str)
105
+ @lines << (' ' * @indent) + str
106
+ end
107
+
108
+ # def on_flow(node)
109
+ # line '{'
110
+ # @indent += 1
111
+ # process_all(node.children)
112
+ # @indent -= 1
113
+ # line "}, open,\"#{unique_group_name(node.find(:name).value)}\", \"\""
114
+ # end
115
+
116
+ def on_test(node)
117
+ name = node.find(:object).to_a[0]
118
+ name = name.name unless name.is_a?(String)
119
+ if node.children.any? { |n| t = n.try(:type); t == :on_fail || t == :on_pass } ||
120
+ !stack[:on_pass].empty? || !stack[:on_fail].empty?
121
+ line "run_and_branch(#{name})"
122
+ process_all(node.to_a.reject { |n| t = n.try(:type); t == :on_fail || t == :on_pass })
123
+ line 'then'
124
+ line '{'
125
+ @indent += 1
126
+ on_pass = node.children.find { |n| n.try(:type) == :on_pass }
127
+ process_all(on_pass) if on_pass
128
+ stack[:on_pass].each { |n| process_all(n) }
129
+ @indent -= 1
130
+ line '}'
131
+ line 'else'
132
+ line '{'
133
+ @indent += 1
134
+ on_fail = node.children.find { |n| n.try(:type) == :on_fail }
135
+ process_all(on_fail) if on_fail
136
+ stack[:on_fail].each { |n| process_all(n) }
137
+ @indent -= 1
138
+ line '}'
139
+ else
140
+ line "run(#{name});"
141
+ end
142
+ end
143
+
144
+ def on_render(node)
145
+ node.to_a[0].split("\n").each do |l|
146
+ line(l)
147
+ end
148
+ end
149
+
150
+ def on_job(node)
151
+ jobs, state, *nodes = *node
152
+ jobs = clean_job(jobs)
153
+ runtime_control_variables << ['JOB', '']
154
+ condition = jobs.join(' or ')
155
+ line "if #{condition} then"
156
+ line '{'
157
+ @indent += 1
158
+ process_all(node) if state
159
+ @indent -= 1
160
+ line '}'
161
+ line 'else'
162
+ line '{'
163
+ @indent += 1
164
+ process_all(node) unless state
165
+ @indent -= 1
166
+ line '}'
167
+ end
168
+
169
+ def on_condition_flag(node)
170
+ flag, state, *nodes = *node
171
+ flag_true = node.find(:flag_true)
172
+ flag_false = node.find(:flag_false)
173
+ if flag.is_a?(Array)
174
+ condition = flag.map { |f| "@#{generate_flag_name(f)} == 1" }.join(' or ')
175
+ else
176
+ condition = "@#{generate_flag_name(flag)} == 1"
177
+ end
178
+ line "if #{condition} then"
179
+ line '{'
180
+ @indent += 1
181
+ if flag_true
182
+ process_all(flag_true.children)
183
+ else
184
+ process_all(nodes) if state
185
+ end
186
+ @indent -= 1
187
+ line '}'
188
+ line 'else'
189
+ line '{'
190
+ @indent += 1
191
+ if flag_false
192
+ process_all(flag_false.children)
193
+ else
194
+ process_all(nodes) unless state
195
+ end
196
+ @indent -= 1
197
+ line '}'
198
+ end
199
+
200
+ def on_flow_flag(node)
201
+ flag, state, *nodes = *node
202
+ [flag].flatten.each do |f|
203
+ flow_control_variables << generate_flag_name(f)
204
+ end
205
+ on_condition_flag(node)
206
+ end
207
+
208
+ def on_run_flag(node)
209
+ flag, state, *nodes = *node
210
+ [flag].flatten.each do |f|
211
+ runtime_control_variables << generate_flag_name(f)
212
+ end
213
+ on_condition_flag(node)
214
+ end
215
+
216
+ def on_enable_flow_flag(node)
217
+ flag = node.value.upcase
218
+ flow_control_variables << flag
219
+ line "@#{flag} = 1;"
220
+ end
221
+
222
+ def on_disable_flow_flag(node)
223
+ flag = node.value.upcase
224
+ flow_control_variables << flag
225
+ line "@#{flag} = 0;"
226
+ end
227
+
228
+ def on_set_run_flag(node)
229
+ flag = generate_flag_name(node.value)
230
+ runtime_control_variables << flag
231
+ line "@#{flag} = 1;"
232
+ end
233
+
234
+ def on_group(node)
235
+ on_fail = node.children.find { |n| n.try(:type) == :on_fail }
236
+ on_pass = node.children.find { |n| n.try(:type) == :on_pass }
237
+ line '{'
238
+ @indent += 1
239
+ stack[:on_fail] << on_fail if on_fail
240
+ stack[:on_pass] << on_pass if on_pass
241
+ process_all(node.children - [on_fail, on_pass])
242
+ stack[:on_fail].pop if on_fail
243
+ stack[:on_pass].pop if on_pass
244
+ @indent -= 1
245
+ line "}, open,\"#{unique_group_name(node.find(:name).value)}\", \"\""
246
+ end
247
+
248
+ def on_set_result(node)
249
+ bin = node.find(:bin).try(:value)
250
+ desc = node.find(:bin).to_a[1]
251
+ sbin = node.find(:softbin).try(:value)
252
+ sdesc = node.find(:softbin).to_a[1] || 'fail'
253
+ if bin && desc
254
+ hardware_bin_descriptions[bin] ||= desc
255
+ end
256
+
257
+ if node.to_a[0] == 'pass'
258
+ line "stop_bin \"#{sbin}\", \"\", , good, noreprobe, green, #{bin}, over_on;"
259
+ else
260
+ line "stop_bin \"#{sbin}\", \"#{sdesc}\", , bad, noreprobe, red, #{bin}, over_on;"
261
+ end
262
+ end
263
+
264
+ def on_log(node)
265
+ line "print_dl(\"#{node.to_a[0]}\");"
266
+ end
267
+
268
+ def unique_group_name(name)
269
+ @group_names ||= {}
270
+ if @group_names[name]
271
+ @group_names[name] += 1
272
+ "#{name}_#{@group_names[name]}"
273
+ else
274
+ @group_names[name] = 1
275
+ name
276
+ end
277
+ end
278
+
279
+ def clean_job(job)
280
+ [job].flatten.map { |j| "@JOB == \"#{j.to_s.upcase}\"" }
281
+ end
282
+
283
+ private
284
+
285
+ def generate_flag_name(flag)
286
+ case flag[0]
287
+ when '$'
288
+ flag[1..-1]
289
+ else
290
+ flag.upcase
291
+ end
292
+ end
293
+ end
294
+ end
295
+ end
296
+ end