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,56 +1,56 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class Base
4
- class PatsubrPattern
5
- ALIASES = {
6
- pattern: :file_name
7
- }
8
-
9
- def self.define
10
- # Generate accessors for all attributes and their aliases
11
- self::PATSUBR_ATTRS.each do |attr|
12
- writer = "#{attr}=".to_sym
13
- reader = attr.to_sym
14
- attr_reader attr.to_sym unless method_defined? reader
15
- attr_writer attr.to_sym unless method_defined? writer
16
- end
17
-
18
- ALIASES.each do |_alias, val|
19
- writer = "#{_alias}=".to_sym
20
- reader = _alias.to_sym
21
- unless method_defined? writer
22
- define_method("#{_alias}=") do |v|
23
- send("#{val}=", v)
24
- end
25
- end
26
- unless method_defined? reader
27
- define_method("#{_alias}") do
28
- send(val)
29
- end
30
- end
31
- end
32
- end
33
-
34
- def initialize(patsubr, attrs = {})
35
- # Set the defaults
36
- self.class::PATSUBR_DEFAULTS.each do |k, v|
37
- send("#{k}=", v)
38
- end
39
- # Then the values that have been supplied
40
- self.pattern_subr = patsubr
41
- attrs.each do |k, v|
42
- send("#{k}=", v)
43
- end
44
- end
45
-
46
- def to_s
47
- l = "\t"
48
- self.class::PATSUBR_ATTRS.each do |attr|
49
- l += "#{send(attr)}\t"
50
- end
51
- "#{l}"
52
- end
53
- end
54
- end
55
- end
56
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class PatsubrPattern
5
+ ALIASES = {
6
+ pattern: :file_name
7
+ }
8
+
9
+ def self.define
10
+ # Generate accessors for all attributes and their aliases
11
+ self::PATSUBR_ATTRS.each do |attr|
12
+ writer = "#{attr}=".to_sym
13
+ reader = attr.to_sym
14
+ attr_reader attr.to_sym unless method_defined? reader
15
+ attr_writer attr.to_sym unless method_defined? writer
16
+ end
17
+
18
+ ALIASES.each do |_alias, val|
19
+ writer = "#{_alias}=".to_sym
20
+ reader = _alias.to_sym
21
+ unless method_defined? writer
22
+ define_method("#{_alias}=") do |v|
23
+ send("#{val}=", v)
24
+ end
25
+ end
26
+ unless method_defined? reader
27
+ define_method("#{_alias}") do
28
+ send(val)
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ def initialize(patsubr, attrs = {})
35
+ # Set the defaults
36
+ self.class::PATSUBR_DEFAULTS.each do |k, v|
37
+ send("#{k}=", v)
38
+ end
39
+ # Then the values that have been supplied
40
+ self.pattern_subr = patsubr
41
+ attrs.each do |k, v|
42
+ send("#{k}=", v)
43
+ end
44
+ end
45
+
46
+ def to_s
47
+ l = "\t"
48
+ self.class::PATSUBR_ATTRS.each do |attr|
49
+ l += "#{send(attr)}\t"
50
+ end
51
+ "#{l}"
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,38 +1,38 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class Base
4
- class Patsubrs
5
- include ::OrigenTesters::Generator
6
-
7
- OUTPUT_POSTFIX = 'patsubrs'
8
-
9
- def add(name, options = {})
10
- p = Patsubr.new(name, options)
11
- collection << p
12
- p
13
- end
14
-
15
- def finalize(options = {})
16
- uniq!
17
- sort!
18
- end
19
-
20
- # Present the patsubrs in the final sheet in alphabetical order
21
- def sort!
22
- collection.sort_by!(&:name)
23
- end
24
-
25
- # Removes all duplicate patsubrs
26
- def uniq!
27
- uniques = []
28
- collection.each do |patsubr|
29
- unless uniques.any? { |p| p == patsubr }
30
- uniques << patsubr
31
- end
32
- end
33
- self.collection = uniques
34
- end
35
- end
36
- end
37
- end
38
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class Patsubrs
5
+ include ::OrigenTesters::Generator
6
+
7
+ OUTPUT_POSTFIX = 'patsubrs'
8
+
9
+ def add(name, options = {})
10
+ p = Patsubr.new(name, options)
11
+ collection << p
12
+ p
13
+ end
14
+
15
+ def finalize(options = {})
16
+ uniq!
17
+ sort!
18
+ end
19
+
20
+ # Present the patsubrs in the final sheet in alphabetical order
21
+ def sort!
22
+ collection.sort_by!(&:name)
23
+ end
24
+
25
+ # Removes all duplicate patsubrs
26
+ def uniq!
27
+ uniques = []
28
+ collection.each do |patsubr|
29
+ unless uniques.any? { |p| p == patsubr }
30
+ uniques << patsubr
31
+ end
32
+ end
33
+ self.collection = uniques
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,93 +1,93 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class Base
4
- class Pinmap
5
- include ::OrigenTesters::Generator
6
-
7
- attr_accessor :pins
8
- attr_accessor :pin_groups
9
- attr_accessor :power_pins
10
- attr_accessor :utility_pins
11
-
12
- PIN_TYPES = ['I/O', 'I', 'O']
13
- PWR_TYPES = ['Power']
14
- UTL_TYPES = ['Utility', 'I/O', 'I', 'O']
15
-
16
- def initialize # :nodoc:
17
- @pins = {}
18
- @pin_groups = Hash.new { |h, k| h[k] = {} }
19
- @power_pins = {}
20
- @utility_pins = {}
21
- end
22
-
23
- def add_pin(pin_name, attrs = {})
24
- attrs = {
25
- type: 'I/O',
26
- comment: ''
27
- }.merge(attrs)
28
- pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
29
- if PIN_TYPES.include? attrs[:type]
30
- type = attrs[:type]
31
- else
32
- Origen.log.error "Pinmap individual pin type '#{attrs[:type]}' must be set to one of the following: #{PIN_TYPES.join(', ')} for pin '#{pin_name}'"
33
- fail
34
- end
35
- @pins[pin_name] = { type: type, comment: attrs[:comment] }
36
- end
37
-
38
- def add_group_pin(grp_name, pin_name, attrs = {})
39
- attrs = {
40
- type: 'I/O',
41
- comment: ''
42
- }.merge(attrs)
43
- grp_name = grp_name.to_sym unless grp_name.is_a? Symbol
44
- pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
45
- if PIN_TYPES.include? attrs[:type]
46
- type = attrs[:type]
47
- else
48
- Origen.log.error "Pinmap group pin type '#{attrs[:type]}' must be set to one of the following: #{PIN_TYPES.join(', ')} for pin '#{pin_name}'"
49
- fail
50
- end
51
- @pin_groups[grp_name][pin_name] = { type: attrs[:type], comment: attrs[:comment] }
52
- end
53
-
54
- def add_power_pin(pin_name, attrs = {})
55
- attrs = {
56
- type: 'Power',
57
- comment: ''
58
- }.merge(attrs)
59
- pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
60
- if PWR_TYPES.include? attrs[:type]
61
- type = attrs[:type]
62
- else
63
- Origen.log.error "Pinmap powerpin type '#{attrs[:type]}' must be set to one of the following: #{PWR_TYPES.join(', ')} for pin '#{pin_name}'"
64
- fail
65
- end
66
- @power_pins[pin_name] = { type: attrs[:type], comment: attrs[:comment] }
67
- end
68
-
69
- def add_utility_pin(pin_name, attrs = {})
70
- attrs = {
71
- type: 'Utility',
72
- comment: ''
73
- }.merge(attrs)
74
- pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
75
- if UTL_TYPES.include? attrs[:type]
76
- type = attrs[:type]
77
- else
78
- Origen.log.error "Pinmap utility pin type '#{attrs[:type]}' must be set to one of the following: #{UTL_TYPES.join(', ')} for pin '#{pin_name}'"
79
- fail
80
- end
81
- @utility_pins[pin_name] = { type: attrs[:type], comment: attrs[:comment] }
82
- end
83
-
84
- def finalize(options = {})
85
- end
86
-
87
- def platform
88
- Origen.interface.platform
89
- end
90
- end
91
- end
92
- end
93
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class Pinmap
5
+ include ::OrigenTesters::Generator
6
+
7
+ attr_accessor :pins
8
+ attr_accessor :pin_groups
9
+ attr_accessor :power_pins
10
+ attr_accessor :utility_pins
11
+
12
+ PIN_TYPES = ['I/O', 'I', 'O']
13
+ PWR_TYPES = ['Power']
14
+ UTL_TYPES = ['Utility', 'I/O', 'I', 'O']
15
+
16
+ def initialize # :nodoc:
17
+ @pins = {}
18
+ @pin_groups = Hash.new { |h, k| h[k] = {} }
19
+ @power_pins = {}
20
+ @utility_pins = {}
21
+ end
22
+
23
+ def add_pin(pin_name, attrs = {})
24
+ attrs = {
25
+ type: 'I/O',
26
+ comment: ''
27
+ }.merge(attrs)
28
+ pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
29
+ if PIN_TYPES.include? attrs[:type]
30
+ type = attrs[:type]
31
+ else
32
+ Origen.log.error "Pinmap individual pin type '#{attrs[:type]}' must be set to one of the following: #{PIN_TYPES.join(', ')} for pin '#{pin_name}'"
33
+ fail
34
+ end
35
+ @pins[pin_name] = { type: type, comment: attrs[:comment] }
36
+ end
37
+
38
+ def add_group_pin(grp_name, pin_name, attrs = {})
39
+ attrs = {
40
+ type: 'I/O',
41
+ comment: ''
42
+ }.merge(attrs)
43
+ grp_name = grp_name.to_sym unless grp_name.is_a? Symbol
44
+ pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
45
+ if PIN_TYPES.include? attrs[:type]
46
+ type = attrs[:type]
47
+ else
48
+ Origen.log.error "Pinmap group pin type '#{attrs[:type]}' must be set to one of the following: #{PIN_TYPES.join(', ')} for pin '#{pin_name}'"
49
+ fail
50
+ end
51
+ @pin_groups[grp_name][pin_name] = { type: attrs[:type], comment: attrs[:comment] }
52
+ end
53
+
54
+ def add_power_pin(pin_name, attrs = {})
55
+ attrs = {
56
+ type: 'Power',
57
+ comment: ''
58
+ }.merge(attrs)
59
+ pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
60
+ if PWR_TYPES.include? attrs[:type]
61
+ type = attrs[:type]
62
+ else
63
+ Origen.log.error "Pinmap powerpin type '#{attrs[:type]}' must be set to one of the following: #{PWR_TYPES.join(', ')} for pin '#{pin_name}'"
64
+ fail
65
+ end
66
+ @power_pins[pin_name] = { type: attrs[:type], comment: attrs[:comment] }
67
+ end
68
+
69
+ def add_utility_pin(pin_name, attrs = {})
70
+ attrs = {
71
+ type: 'Utility',
72
+ comment: ''
73
+ }.merge(attrs)
74
+ pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
75
+ if UTL_TYPES.include? attrs[:type]
76
+ type = attrs[:type]
77
+ else
78
+ Origen.log.error "Pinmap utility pin type '#{attrs[:type]}' must be set to one of the following: #{UTL_TYPES.join(', ')} for pin '#{pin_name}'"
79
+ fail
80
+ end
81
+ @utility_pins[pin_name] = { type: attrs[:type], comment: attrs[:comment] }
82
+ end
83
+
84
+ def finalize(options = {})
85
+ end
86
+
87
+ def platform
88
+ Origen.interface.platform
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -1,25 +1,25 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class Base
4
- class References
5
- include ::OrigenTesters::Generator
6
- attr_accessor :references
7
-
8
- OUTPUT_PREFIX = nil
9
- OUTPUT_POSTFIX = nil
10
-
11
- def initialize # :nodoc:
12
- @references = []
13
- end
14
-
15
- def add(reference, options = {})
16
- options = {
17
- comment: nil
18
- }.merge(options)
19
-
20
- @references << { ref: reference, comment: options[:comment] }
21
- end
22
- end
23
- end
24
- end
25
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class References
5
+ include ::OrigenTesters::Generator
6
+ attr_accessor :references
7
+
8
+ OUTPUT_PREFIX = nil
9
+ OUTPUT_POSTFIX = nil
10
+
11
+ def initialize # :nodoc:
12
+ @references = []
13
+ end
14
+
15
+ def add(reference, options = {})
16
+ options = {
17
+ comment: nil
18
+ }.merge(options)
19
+
20
+ @references << { ref: reference, comment: options[:comment] }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,322 +1,322 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class Base
4
- class TestInstance
5
- attr_accessor :type, :index, :version, :append_version, :finalize, :meta
6
-
7
- def self.define
8
- # Generate accessors for all attributes and their aliases
9
- attrs.each do |attr|
10
- writer = "#{attr}=".to_sym
11
- reader = attr.to_sym
12
- attr_reader attr.to_sym unless method_defined? reader
13
- attr_writer attr.to_sym unless method_defined? writer
14
- end
15
-
16
- # Define the common aliases now, the instance type specific ones will
17
- # be created when the instance type is known
18
- self::TEST_INSTANCE_ALIASES.each do |_alias, val|
19
- writer = "#{_alias}=".to_sym
20
- reader = _alias.to_sym
21
- unless val.is_a? Hash
22
- unless method_defined? writer
23
- define_method("#{_alias}=") do |v|
24
- send("#{val}=", v)
25
- end
26
- end
27
- unless method_defined? reader
28
- define_method("#{_alias}") do
29
- send(val)
30
- end
31
- end
32
- end
33
- end
34
- end
35
-
36
- def self.attrs
37
- @attrs ||= begin
38
- attrs = self::TEST_INSTANCE_ATTRS.dup
39
-
40
- self::TEST_INSTANCE_EXTRA_ARGS.times do |i|
41
- attrs << "arg#{i}"
42
- end
43
- attrs << 'comment'
44
- attrs
45
- end
46
- end
47
-
48
- def initialize(name, type, attrs = {})
49
- @type = type
50
- @append_version = true
51
- self.name = name
52
- # Build the type specific accessors (aliases)
53
- self.class::TEST_INSTANCE_ALIASES[@type.to_sym].each do |_alias, val|
54
- define_singleton_method("#{_alias}=") do |v|
55
- send("#{val}=", v) if self.respond_to?("#{val}=", v)
56
- end
57
- define_singleton_method("#{_alias}") do
58
- send(val) if self.respond_to?(val)
59
- end
60
- end
61
- # Set the defaults
62
- self.class::TEST_INSTANCE_DEFAULTS[@type.to_sym].each do |k, v|
63
- send("#{k}=", v) if self.respond_to?("#{k}=", v)
64
- end
65
- # Then the values that have been supplied
66
- attrs.each do |k, v|
67
- send("#{k}=", v) if self.respond_to?("#{k}=", v)
68
- end
69
- end
70
-
71
- def inspect
72
- "<TestInstance: #{name}, Type: #{type}>"
73
- end
74
-
75
- def ==(other_instance)
76
- self.class == other_instance.class &&
77
- unversioned_name.to_s == other_instance.unversioned_name.to_s &&
78
- self.class.attrs.all? do |attr|
79
- # Exclude test name, already examined above and don't want to include
80
- # the version in the comparison
81
- if attr == 'test_name'
82
- true
83
- else
84
- send(attr) == other_instance.send(attr)
85
- end
86
- end
87
- end
88
-
89
- def self.new_empty(name, attrs = {})
90
- new(name, :empty, attrs)
91
- end
92
-
93
- def self.new_functional(name, attrs = {})
94
- new(name, :functional, attrs)
95
- end
96
-
97
- def self.new_board_pmu(name, attrs = {})
98
- new(name, :board_pmu, attrs)
99
- end
100
-
101
- def self.new_pin_pmu(name, attrs = {})
102
- new(name, :pin_pmu, attrs)
103
- end
104
-
105
- def self.new_apmu_powersupply(name, attrs = {})
106
- new(name, :apmu_powersupply, attrs)
107
- end
108
-
109
- def self.new_powersupply(name, attrs = {})
110
- new(name, :powersupply, attrs)
111
- end
112
-
113
- def self.new_mto_memory(name, attrs = {})
114
- new(name, :mto_memory, attrs)
115
- end
116
-
117
- # Returns the fully formatted test instance for insertion into an instance sheet
118
- def to_s(override_name = nil)
119
- l = "\t"
120
- self.class.attrs.each do |attr|
121
- if attr == 'test_name' && override_name
122
- l += "#{override_name}\t"
123
- else
124
- l += "#{send(attr)}\t"
125
- end
126
- end
127
- "#{l}"
128
- end
129
-
130
- def name
131
- if version && @append_version
132
- "#{@test_name}_v#{version}"
133
- else
134
- @test_name.to_s
135
- end
136
- end
137
- alias_method :test_name, :name
138
-
139
- def name=(val)
140
- self.test_name = val
141
- end
142
-
143
- def unversioned_name
144
- @test_name.to_s
145
- end
146
-
147
- # Set the cpu wait flags for the given test instance
148
- # instance.set_wait_flags(:a)
149
- # instance.set_wait_flags(:a, :c)
150
- def set_wait_flags(*flags)
151
- # This method is tester-specific and must be overridden by the child class
152
- fail 'The #{self.class} class has not defined a set_wait_flags method!'
153
- end
154
-
155
- # Set and enable the hi limit of a parametric test instance, passing in
156
- # nil or false as the lim parameter will disable the hi limit.
157
- def set_hi_limit(lim)
158
- if lim
159
- self.hi_limit = lim
160
- end
161
- self
162
- end
163
- alias_method :hi_limit=, :set_hi_limit
164
-
165
- # Set and enable the hi limit of a parametric test instance, passing in
166
- # nil or false as the lim parameter will disable the hi limit.
167
- def set_lo_limit(lim)
168
- if lim
169
- self.lo_limit = lim
170
- end
171
- self
172
- end
173
- alias_method :lo_limit=, :set_lo_limit
174
-
175
- # Set the current range of the test instance, the following are valid:
176
- #
177
- # Board PMU
178
- # * 2uA
179
- # * 20uA
180
- # * 200uA
181
- # * 2mA
182
- # * 20mA
183
- # * 200mA
184
- # * :smart
185
- #
186
- # Pin PMU
187
- # * 200nA
188
- # * 2uA
189
- # * 20uA
190
- # * 200uA
191
- # * 2mA
192
- # * :auto
193
- # * :smart
194
- #
195
- # Examples
196
- # instance.set_irange(:smart)
197
- # instance.set_irange(:ua => 2)
198
- # instance.set_irange(2.uA) # Same as above
199
- # instance.set_irange(:ma => 200)
200
- # instance.set_irange(0.2) # Same as above
201
- # instance.set_irange(:a => 0.2) # Same as above
202
- def set_irange(r = nil, options = {})
203
- r, options = nil, r if r.is_a?(Hash)
204
- unless r
205
- if r = options.delete(:na) || options.delete(:nA)
206
- r = r / 1_000_000_000
207
- elsif r = options.delete(:ua) || options.delete(:uA)
208
- r = r / 1_000_000.0
209
- elsif r = options.delete(:ma) || options.delete(:mA)
210
- r = r / 1000.0
211
- elsif r = options.delete(:a) || options.delete(:A)
212
- else
213
- fail "Can't determine requested irange!"
214
- end
215
- end
216
-
217
- if @type == :board_pmu
218
- if r == :smart
219
- self.irange = 6
220
- else
221
- self.irange = case
222
- when r > 0.02 then 5
223
- when r > 0.002 then 4
224
- when r > 0.0002 then 3
225
- when r > 0.00002 then 2
226
- when r > 0.000002 then 1
227
- else 0
228
- end
229
- end
230
-
231
- elsif @type == :powersupply
232
- if r == :smart
233
- self.irange = 6
234
- elsif r == :auto
235
- self.irange = 5
236
- else
237
- self.irange = case
238
- when r > 0.25 then 4 # between 250mA - 1A
239
- when r > 0.1 then 7 # between 100mA - 250mA
240
- when r > 0.01 then 0 # between 10mA - 100mA
241
- when r > 0.0005 then 1 # between 500ua - 10mA
242
- when r > 0.00005 then 2 # between 50ua - 500u
243
- when r > 0.000005 then 3 # between 5u - 50u
244
- else 8
245
- end
246
- end
247
-
248
- else # :pin_pmu
249
- if r == :smart
250
- self.irange = 5
251
- elsif r == :auto
252
- fail 'Auto range not available in FIMV mode!' if self.fimv?
253
- self.irange = 6
254
- else
255
- if fimv?
256
- self.irange = case
257
- when r > 0.0002 then 2
258
- else 4
259
- end
260
- else
261
- self.irange = case
262
- when r > 0.0002 then 2
263
- when r > 0.00002 then 4
264
- when r > 0.000002 then 0
265
- when r > 0.0000002 then 1
266
- else 3
267
- end
268
- end
269
- end
270
- end
271
-
272
- self
273
- end
274
-
275
- # Set the voltage range of the test instance, the following are valid:
276
- #
277
- # Board PMU
278
- # * 2V
279
- # * 5V
280
- # * 10V
281
- # * 24V
282
- # * :auto
283
- # * :smart
284
- #
285
- # Examples
286
- # instance.set_vrange(:auto)
287
- # instance.set_vrange(:v => 5)
288
- # instance.set_vrange(5) # Same as above
289
- def set_vrange(r = nil, options = {})
290
- r, options = nil, r if r.is_a?(Hash)
291
- if r == :smart
292
- self.vrange = 4
293
- elsif r == :auto
294
- self.vrange = 5
295
- elsif !r
296
- if r = options.delete(:v) || options.delete(:V)
297
- else
298
- fail "Can't determine requested vrange!"
299
- end
300
- end
301
- self.vrange = case
302
- when r > 10 then 3
303
- when r > 5 then 2
304
- when r > 2 then 1
305
- else 0
306
- end
307
- self
308
- end
309
-
310
- # Returns true if instance configured for force current, measure voltage
311
- def fimv?
312
- measure_mode == 1
313
- end
314
-
315
- # Returns true if instance configured for force voltage, measure current
316
- def fvmi?
317
- measure_mode == 0
318
- end
319
- end
320
- end
321
- end
322
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class TestInstance
5
+ attr_accessor :type, :index, :version, :append_version, :finalize, :meta
6
+
7
+ def self.define
8
+ # Generate accessors for all attributes and their aliases
9
+ attrs.each do |attr|
10
+ writer = "#{attr}=".to_sym
11
+ reader = attr.to_sym
12
+ attr_reader attr.to_sym unless method_defined? reader
13
+ attr_writer attr.to_sym unless method_defined? writer
14
+ end
15
+
16
+ # Define the common aliases now, the instance type specific ones will
17
+ # be created when the instance type is known
18
+ self::TEST_INSTANCE_ALIASES.each do |_alias, val|
19
+ writer = "#{_alias}=".to_sym
20
+ reader = _alias.to_sym
21
+ unless val.is_a? Hash
22
+ unless method_defined? writer
23
+ define_method("#{_alias}=") do |v|
24
+ send("#{val}=", v)
25
+ end
26
+ end
27
+ unless method_defined? reader
28
+ define_method("#{_alias}") do
29
+ send(val)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ def self.attrs
37
+ @attrs ||= begin
38
+ attrs = self::TEST_INSTANCE_ATTRS.dup
39
+
40
+ self::TEST_INSTANCE_EXTRA_ARGS.times do |i|
41
+ attrs << "arg#{i}"
42
+ end
43
+ attrs << 'comment'
44
+ attrs
45
+ end
46
+ end
47
+
48
+ def initialize(name, type, attrs = {})
49
+ @type = type
50
+ @append_version = true
51
+ self.name = name
52
+ # Build the type specific accessors (aliases)
53
+ self.class::TEST_INSTANCE_ALIASES[@type.to_sym].each do |_alias, val|
54
+ define_singleton_method("#{_alias}=") do |v|
55
+ send("#{val}=", v) if self.respond_to?("#{val}=", v)
56
+ end
57
+ define_singleton_method("#{_alias}") do
58
+ send(val) if self.respond_to?(val)
59
+ end
60
+ end
61
+ # Set the defaults
62
+ self.class::TEST_INSTANCE_DEFAULTS[@type.to_sym].each do |k, v|
63
+ send("#{k}=", v) if self.respond_to?("#{k}=", v)
64
+ end
65
+ # Then the values that have been supplied
66
+ attrs.each do |k, v|
67
+ send("#{k}=", v) if self.respond_to?("#{k}=", v)
68
+ end
69
+ end
70
+
71
+ def inspect
72
+ "<TestInstance: #{name}, Type: #{type}>"
73
+ end
74
+
75
+ def ==(other_instance)
76
+ self.class == other_instance.class &&
77
+ unversioned_name.to_s == other_instance.unversioned_name.to_s &&
78
+ self.class.attrs.all? do |attr|
79
+ # Exclude test name, already examined above and don't want to include
80
+ # the version in the comparison
81
+ if attr == 'test_name'
82
+ true
83
+ else
84
+ send(attr) == other_instance.send(attr)
85
+ end
86
+ end
87
+ end
88
+
89
+ def self.new_empty(name, attrs = {})
90
+ new(name, :empty, attrs)
91
+ end
92
+
93
+ def self.new_functional(name, attrs = {})
94
+ new(name, :functional, attrs)
95
+ end
96
+
97
+ def self.new_board_pmu(name, attrs = {})
98
+ new(name, :board_pmu, attrs)
99
+ end
100
+
101
+ def self.new_pin_pmu(name, attrs = {})
102
+ new(name, :pin_pmu, attrs)
103
+ end
104
+
105
+ def self.new_apmu_powersupply(name, attrs = {})
106
+ new(name, :apmu_powersupply, attrs)
107
+ end
108
+
109
+ def self.new_powersupply(name, attrs = {})
110
+ new(name, :powersupply, attrs)
111
+ end
112
+
113
+ def self.new_mto_memory(name, attrs = {})
114
+ new(name, :mto_memory, attrs)
115
+ end
116
+
117
+ # Returns the fully formatted test instance for insertion into an instance sheet
118
+ def to_s(override_name = nil)
119
+ l = "\t"
120
+ self.class.attrs.each do |attr|
121
+ if attr == 'test_name' && override_name
122
+ l += "#{override_name}\t"
123
+ else
124
+ l += "#{send(attr)}\t"
125
+ end
126
+ end
127
+ "#{l}"
128
+ end
129
+
130
+ def name
131
+ if version && @append_version
132
+ "#{@test_name}_v#{version}"
133
+ else
134
+ @test_name.to_s
135
+ end
136
+ end
137
+ alias_method :test_name, :name
138
+
139
+ def name=(val)
140
+ self.test_name = val
141
+ end
142
+
143
+ def unversioned_name
144
+ @test_name.to_s
145
+ end
146
+
147
+ # Set the cpu wait flags for the given test instance
148
+ # instance.set_wait_flags(:a)
149
+ # instance.set_wait_flags(:a, :c)
150
+ def set_wait_flags(*flags)
151
+ # This method is tester-specific and must be overridden by the child class
152
+ fail 'The #{self.class} class has not defined a set_wait_flags method!'
153
+ end
154
+
155
+ # Set and enable the hi limit of a parametric test instance, passing in
156
+ # nil or false as the lim parameter will disable the hi limit.
157
+ def set_hi_limit(lim)
158
+ if lim
159
+ self.hi_limit = lim
160
+ end
161
+ self
162
+ end
163
+ alias_method :hi_limit=, :set_hi_limit
164
+
165
+ # Set and enable the hi limit of a parametric test instance, passing in
166
+ # nil or false as the lim parameter will disable the hi limit.
167
+ def set_lo_limit(lim)
168
+ if lim
169
+ self.lo_limit = lim
170
+ end
171
+ self
172
+ end
173
+ alias_method :lo_limit=, :set_lo_limit
174
+
175
+ # Set the current range of the test instance, the following are valid:
176
+ #
177
+ # Board PMU
178
+ # * 2uA
179
+ # * 20uA
180
+ # * 200uA
181
+ # * 2mA
182
+ # * 20mA
183
+ # * 200mA
184
+ # * :smart
185
+ #
186
+ # Pin PMU
187
+ # * 200nA
188
+ # * 2uA
189
+ # * 20uA
190
+ # * 200uA
191
+ # * 2mA
192
+ # * :auto
193
+ # * :smart
194
+ #
195
+ # Examples
196
+ # instance.set_irange(:smart)
197
+ # instance.set_irange(:ua => 2)
198
+ # instance.set_irange(2.uA) # Same as above
199
+ # instance.set_irange(:ma => 200)
200
+ # instance.set_irange(0.2) # Same as above
201
+ # instance.set_irange(:a => 0.2) # Same as above
202
+ def set_irange(r = nil, options = {})
203
+ r, options = nil, r if r.is_a?(Hash)
204
+ unless r
205
+ if r = options.delete(:na) || options.delete(:nA)
206
+ r = r / 1_000_000_000
207
+ elsif r = options.delete(:ua) || options.delete(:uA)
208
+ r = r / 1_000_000.0
209
+ elsif r = options.delete(:ma) || options.delete(:mA)
210
+ r = r / 1000.0
211
+ elsif r = options.delete(:a) || options.delete(:A)
212
+ else
213
+ fail "Can't determine requested irange!"
214
+ end
215
+ end
216
+
217
+ if @type == :board_pmu
218
+ if r == :smart
219
+ self.irange = 6
220
+ else
221
+ self.irange = case
222
+ when r > 0.02 then 5
223
+ when r > 0.002 then 4
224
+ when r > 0.0002 then 3
225
+ when r > 0.00002 then 2
226
+ when r > 0.000002 then 1
227
+ else 0
228
+ end
229
+ end
230
+
231
+ elsif @type == :powersupply
232
+ if r == :smart
233
+ self.irange = 6
234
+ elsif r == :auto
235
+ self.irange = 5
236
+ else
237
+ self.irange = case
238
+ when r > 0.25 then 4 # between 250mA - 1A
239
+ when r > 0.1 then 7 # between 100mA - 250mA
240
+ when r > 0.01 then 0 # between 10mA - 100mA
241
+ when r > 0.0005 then 1 # between 500ua - 10mA
242
+ when r > 0.00005 then 2 # between 50ua - 500u
243
+ when r > 0.000005 then 3 # between 5u - 50u
244
+ else 8
245
+ end
246
+ end
247
+
248
+ else # :pin_pmu
249
+ if r == :smart
250
+ self.irange = 5
251
+ elsif r == :auto
252
+ fail 'Auto range not available in FIMV mode!' if self.fimv?
253
+ self.irange = 6
254
+ else
255
+ if fimv?
256
+ self.irange = case
257
+ when r > 0.0002 then 2
258
+ else 4
259
+ end
260
+ else
261
+ self.irange = case
262
+ when r > 0.0002 then 2
263
+ when r > 0.00002 then 4
264
+ when r > 0.000002 then 0
265
+ when r > 0.0000002 then 1
266
+ else 3
267
+ end
268
+ end
269
+ end
270
+ end
271
+
272
+ self
273
+ end
274
+
275
+ # Set the voltage range of the test instance, the following are valid:
276
+ #
277
+ # Board PMU
278
+ # * 2V
279
+ # * 5V
280
+ # * 10V
281
+ # * 24V
282
+ # * :auto
283
+ # * :smart
284
+ #
285
+ # Examples
286
+ # instance.set_vrange(:auto)
287
+ # instance.set_vrange(:v => 5)
288
+ # instance.set_vrange(5) # Same as above
289
+ def set_vrange(r = nil, options = {})
290
+ r, options = nil, r if r.is_a?(Hash)
291
+ if r == :smart
292
+ self.vrange = 4
293
+ elsif r == :auto
294
+ self.vrange = 5
295
+ elsif !r
296
+ if r = options.delete(:v) || options.delete(:V)
297
+ else
298
+ fail "Can't determine requested vrange!"
299
+ end
300
+ end
301
+ self.vrange = case
302
+ when r > 10 then 3
303
+ when r > 5 then 2
304
+ when r > 2 then 1
305
+ else 0
306
+ end
307
+ self
308
+ end
309
+
310
+ # Returns true if instance configured for force current, measure voltage
311
+ def fimv?
312
+ measure_mode == 1
313
+ end
314
+
315
+ # Returns true if instance configured for force voltage, measure current
316
+ def fvmi?
317
+ measure_mode == 0
318
+ end
319
+ end
320
+ end
321
+ end
322
+ end