origen_testers 0.13.1 → 0.13.2

Sign up to get free protection for your applications and to get access to all the features.
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,10 +1,10 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class UltraFLEX
4
- require 'origen_testers/igxl_based_tester/base/ac_specsets'
5
- class ACSpecsets < Base::ACSpecsets
6
- TEMPLATE = "#{Origen.root!}/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb"
7
- end
8
- end
9
- end
10
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class UltraFLEX
4
+ require 'origen_testers/igxl_based_tester/base/ac_specsets'
5
+ class ACSpecsets < Base::ACSpecsets
6
+ TEMPLATE = "#{Origen.root!}/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb"
7
+ end
8
+ end
9
+ end
10
+ end
@@ -1,949 +1,949 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class UltraFLEX < Base
4
- class ATEHardware
5
- attr_accessor :instrument
6
-
7
- def initialize(instrumentname)
8
- @name = 'ultraflex'
9
- @instrument ||= instrumentname
10
- end
11
-
12
- def ppmu
13
- ppmu = Struct.new(:forcei, :forcev, :measi, :measv, :vclamp)
14
-
15
- if @instrument == 'HSD-M' # also known as HSD1000
16
- forcei = [20.uA, 200.uA, 2.mA, 50.mA]
17
- forcev = { forcei_50mA__gt_20mA: (-0.1.V..4.5.V),
18
- forcei_50mA__lte_20mA: (-1.V..6.V),
19
- forcei_Non50mA__half_scale: (-1..6.V),
20
- forcei_Non50mA__full_scale: (-1.V..5.5.V) }
21
- measi = [2.uA, 20.uA, 200.uA, 2.mA, 50.mA]
22
- measv = { measi_50mA__gt_20mA: (-0.1.V..4.5.V),
23
- measi_50mA__lte_20mA: (-1.V..6.V),
24
- measi_20mA__0p5mA_to_20mA: (-1.V..5.5.V),
25
- measi_20mA__0p05mA_to_1mA: (-1.V..6.V),
26
- measi_20mA__n0p5mA_to_0p5mA: (-1.85.V..6.V),
27
- measi_20mA__n1mA_to_n0p5mA: (-1.V..6.V),
28
- measi_20mA__n2mA_to_n1mA: (-1.V..5.5.V),
29
- measi_200uA__half_scale: (-1.V..6.V),
30
- measi_200uA__full_scale: (-1.V..5.V),
31
- measi_20uA__half_scale: (-1.V..6.V),
32
- measi_20uA__full_scale: (-1.V..5.5.V) }
33
- vclamp = (-2.V..6.5.V)
34
- ppmu.new(forcei, forcev, measi, measv, vclamp)
35
- elsif @instrument == 'HSD-U' # also known as Ultrapin1600 or Utah
36
- forcei = [20.uA, 200.uA, 2.mA, 50.mA]
37
- forcev = { forcei_50mA__20mA_to_50mA: (-0.1.V..4.5.V),
38
- forcei_50mA__0mA_to_20mA: (-1.V..6.V),
39
- forcei_50mA__n20mA_to_0mA: (-0.1.V..6.V),
40
- forcei_50mA__n35mA_to_n20mA: (0.5.V..5.1.V),
41
- forcei_50mA__n50mA_to_n35mA: (1.1.V..4.5.V),
42
- forcei_Non50mA: (-1.V..6.V) }
43
- measi = [2.uA, 20.uA, 200.uA, 2.mA, 50.mA]
44
- measv = { measi_50mA: (-1.V..6.V),
45
- measi_200uA: (-1.V..6.V),
46
- measi_20uA: (-1.V..6.V),
47
- measi_2mA__1mA_to_2mA: (-1.V..6.V),
48
- measi_2mA__n1mA_to_1mA: (-1.5.V..6.V),
49
- measi_2mA__n2mA_to_n1mA: (-1.V..6.V) }
50
- vclamp = (-1.5.V..6.5.V)
51
- ppmu.new(forcei, forcev, measi, measv, vclamp)
52
- elsif @instrument == 'HSD-4G'
53
- forcei = [200.uA, 2.mA, 30.mA]
54
- forcev = { measi_30mA: [min: '1.5V, 1.5V - 50mV/mA * Idut', max: '0V, -50mV/mA * Idut'],
55
- measi_2mA: (-1.V..1.5.V),
56
- measi_200uA: (-1.V..1.5.V) }
57
- measi = [200.uA, 2.mA, 30.mA]
58
- measv = (-1.V..1.5.V)
59
- vclamp = 'n/a'
60
- ppmu.new(forcei, forcev, measi, measv, vclamp)
61
- elsif @instrument == 'HSS-6G' # also known as SB6G
62
- forcei = [200.uA, 2.mA, 50.mA]
63
- forcev = { forcei_50mA__gt_20mA: (-0.1.V..3.6.V),
64
- forcei_50mA__lte_20mA: (-1.V..3.6.V),
65
- forcei_2mA: (-1.V..3.6.V),
66
- forcei_200uA: (-1.V..3.6.V) }
67
- measi = [200.uA, 2.mA, 50.mA]
68
- measv = { measi_50mA__gt_20mA: (-0.1.V..3.6.V),
69
- measi_50mA__lte_20mA: (-1.V..3.6.V),
70
- measi_200uA: (-1.V..3.6.V),
71
- measi_2mA: (-1.V..3.6.V) }
72
- vclamp = (-1.3.V..3.9.V)
73
- ppmu.new(forcei, forcev, measi, measv, vclamp)
74
- else
75
- puts "please enter an instrument type: e.g. $tester.ate_hardware(\"HSD-M\").ppmu"
76
- puts "Instrument type available: \"HSD-M\", \"HSD-U\", \"HSD-4G\", and \"HSS-6G\" "
77
- puts 'HSD-U is also known as Ultrapin1600. HSS-6G is also known as SB6G.'
78
- end
79
- end
80
-
81
- def supply
82
- supply = Struct.new(:forcev, :irange, :source_overload_i, :source_overload_t, :source_fold_i,
83
- :source_fold_t, :sink_overload_i, :sink_overload_t, :sink_fold_i,
84
- :sink_fold_t, :meter_irange, :meter_vrange, :tdelay, :accuracy,
85
- :filter, :bandwidth)
86
- if @instrument == 'VSM'
87
- forcev = (0.V..4.V)
88
- irange = [1.A, 11.A, 21.A, 51.A, 81.A]
89
- source_overload_i = { irange_1A: (100.mA..1.08.A),
90
- irange_11A: (1.1.A..11.88.A),
91
- irange_21A: (2.1.A..22.68.A),
92
- irange_51A: (5.1.A..55.08.A),
93
- irange_81A: (8.1.A..87.48.A) }
94
- source_overload_t = (10.uS..8.S)
95
- source_fold_i = { irange_1A: (50.mA..1.03.A),
96
- irange_11A: (550.mA..11.33.A),
97
- irange_21A: (1.05.A..21.63.A),
98
- irange_51A: (2.55.A..52.53.A),
99
- irange_81A: (4.05.A..83.43.A) }
100
- source_fold_t = (10.uS..8.S)
101
- sink_overload_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
102
- irange_11A: [max: 858.mA], # ????? Not programmable?
103
- irange_21A: [max: 1.64.A], # ????? Not programmable?
104
- irange_51A: [max: 3.98.A], # ????? Not programmable?
105
- irange_81A: [max: 6.32.A] } # ????? Not programmable?
106
- sink_overload_t = 0 # ????? Not programmable?
107
- sink_fold_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
108
- irange_11A: [max: 858.mA], # ????? Not programmable?
109
- irange_21A: [max: 1.64.A], # ????? Not programmable?
110
- irange_51A: [max: 3.98.A], # ????? Not programmable?
111
- irange_81A: [max: 6.32.A] } # ????? Not programmable?
112
- sink_fold_t = (10.uS..8.S)
113
- meter_irange = { irange_1A: [1.25.A, 2.5.A],
114
- irange_11A: [13.75.A, 27.5.A],
115
- irange_21A: [26.25.A, 52.5.A],
116
- irange_51A: [63.75.A, 127.5.A],
117
- irange_81A: [101.25.A, 202.5.A] }
118
- meter_vrange = [3.V, 6.V]
119
- tdelay = 0 # default tdelay
120
- accuracy = { neg: -2.mV, pos: 2.mV }
121
- filter = [635, 2539, 40_625]
122
- bandwidth = [0, 1, 2, 3, 4]
123
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
124
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
125
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
126
- elsif @instrument == 'VSMx2' # Also known as VSM, Merged2
127
- forcev = (0.V..4.V)
128
- irange = [1.A, 2.A, 11.A, 21.A, 51.A, 81.A, 102.A, 162.A]
129
- source_overload_i = { irange_1A: (100.mA..1.08.A),
130
- irange_2A: (200.mA..2.16.A),
131
- irange_11A: (1.1.A..11.88.A),
132
- irange_21A: (2.1.A..22.68.A),
133
- irange_51A: (5.1.A..55.08.A),
134
- irange_81A: (8.1.A..87.48.A),
135
- irange_102A: (10.2.A..110.16.A),
136
- irange_162A: (16.2.A..174.96.A) }
137
- source_overload_t = (10.uS..8.S)
138
- source_fold_i = { irange_1A: (50.mA..1.03.A),
139
- irange_2A: (100.mA..2.06.A),
140
- irange_11A: (550.mA..11.33.A),
141
- irange_21A: (1.05.A..21.63.A),
142
- irange_51A: (2.55.A..52.53.A),
143
- irange_81A: (4.05.A..83.43.A),
144
- irange_102A: (5.1.A..105.06.A),
145
- irange_162A: (8.1.A..166.86.A) }
146
- source_fold_t = (10.uS..8.S)
147
- sink_overload_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
148
- irange_2A: [max: 156.mA], # ????? Not programmable?
149
- irange_11A: [max: 858.mA], # ????? Not programmable?
150
- irange_21A: [max: 1.64.A], # ????? Not programmable?
151
- irange_51A: [max: 3.98.A], # ????? Not programmable?
152
- irange_81A: [max: 6.32.A], # ????? Not programmable?
153
- irange_102A: [max: 7.96.A], # ????? Not programmable?
154
- irange_162A: [max: 12.64.A] } # ????? Not programmable?
155
- sink_overload_t = 0 # ????? Not programmable?
156
- sink_fold_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
157
- irange_2A: [max: 156.mA], # ????? Not programmable?
158
- irange_11A: [max: 858.mA], # ????? Not programmable?
159
- irange_21A: [max: 1.64.A], # ????? Not programmable?
160
- irange_51A: [max: 3.98.A], # ????? Not programmable?
161
- irange_81A: [max: 6.32.A], # ????? Not programmable?
162
- irange_102A: [max: 7.96.A], # ????? Not programmable?
163
- irange_162A: [max: 12.64.A] } # ????? Not programmable?
164
- meter_irange = { irange_1A: [1.25.A, 2.5.A],
165
- irange_2A: [2.5.A, 5.A],
166
- irange_11A: [13.75.A, 27.5.A],
167
- irange_21A: [26.25.A, 52.5.A],
168
- irange_51A: [63.75.A, 127.5.A],
169
- irange_81A: [101.25.A, 202.5.A],
170
- irange_102A: [127.5.A, 255.A],
171
- irange_162A: [202.5.A, 405.A] }
172
- sink_fold_t = (10.uS..8.S)
173
- meter_vrange = [3.V, 6.V]
174
- tdelay = 0 # default tdelay
175
- accuracy = { neg: -2.mV, pos: 2.mV }
176
- filter = [635, 2539, 40_625]
177
- bandwidth = [0, 1, 2, 3, 4]
178
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
179
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
180
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
181
- elsif @instrument == 'HexVS'
182
- forcev = (0.V..5.5.V)
183
- irange = 15.A
184
- source_overload_i = (1.05.A..16.5.A)
185
- source_overload_t = (102.4.uS..300.mS)
186
- source_fold_i = (50.mA..15.5.A)
187
- source_fold_t = (102.4.uS..5.S)
188
- sink_overload_i = (2.A..3.A)
189
- sink_overload_t = (102.4.uS..300.mS)
190
- sink_fold_i = (1.A..2.A)
191
- sink_fold_t = (102.4.uS..5.S)
192
- meter_irange = [10.mA, 100.mA, 1.A, 15.A]
193
- meter_vrange = [4.V, 8.V]
194
- tdelay = 0 # default tdelay
195
- accuracy = { neg: -7.mV, pos: 7.mV }
196
- filter = 10_000
197
- bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
198
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
199
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
200
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
201
- elsif @instrument == 'HexVSx2' # Also known as HexVS, Merged2
202
- forcev = (0.V..5.5.V)
203
- irange = [15.A, 30.A]
204
- source_overload_i = { irange_15A: (1.05.A..16.5.A),
205
- irange_30A: (2.1.A..33.A) }
206
- source_overload_t = (102.4.uS..300.mS)
207
- source_fold_i = { irange_15A: (50.mA..15.5.A),
208
- irange_30A: (100.mA..31.A) }
209
- source_fold_t = (102.4.uS..5.S)
210
- sink_overload_i = { irange_15A: (2.A..3.A),
211
- irange_30A: (4.A..6.A) }
212
- sink_overload_t = (102.4.uS..300.mS)
213
- sink_fold_i = { irange_15A: (1.A..2.A),
214
- irange_30A: (2.A..4.A) }
215
- sink_fold_t = (102.4.uS..5.S)
216
- meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
217
- irange_30A: [30.A] } # This is verified to be correct on tester.
218
- meter_vrange = [4.V, 8.V]
219
- tdelay = 0 # default tdelay
220
- accuracy = { neg: -7.mV, pos: 7.mV }
221
- filter = 10_000
222
- bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
223
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
224
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
225
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
226
- elsif @instrument == 'HexVSx4' # Also known as HexVS, Merged4
227
- forcev = (0.V..5.5.V)
228
- irange = [15.A, 60.A]
229
- source_overload_i = { irange_15A: (1.05.A..16.5.A),
230
- irange_60A: (4.2.A..66.A) }
231
- source_overload_t = (102.4.uS..300.mS)
232
- source_fold_i = { irange_15A: (50.mA..15.5.A),
233
- irange_60A: (200.mA..62.A) }
234
- source_fold_t = (102.4.uS..5.S)
235
- sink_overload_i = { irange_15A: (2.A..3.A),
236
- irange_60A: (8.A..12.A) }
237
- sink_overload_t = (102.4.uS..300.mS)
238
- sink_fold_i = { irange_15A: (1.A..2.A),
239
- irange_60A: (4.A..8.A) }
240
- sink_fold_t = (102.4.uS..5.S)
241
- meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
242
- irange_60A: [60.A] } # This is verified to be correct on tester.
243
- meter_vrange = [4.V, 8.V]
244
- tdelay = 0 # default tdelay
245
- accuracy = { neg: -7.mV, pos: 7.mV }
246
- filter = 10_000
247
- bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
248
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
249
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
250
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
251
- elsif @instrument == 'HexVSx6' # Also known as HexVS, Merged6
252
- forcev = (0.V..5.5.V)
253
- irange = [15.A, 90.A]
254
- source_overload_i = { irange_15A: (1.05.A..16.5.A),
255
- irange_90A: (6.3.A..99.A) }
256
- source_overload_t = (102.4.uS..300.mS)
257
- source_fold_i = { irange_15A: (50.mA..15.5.A),
258
- irange_90A: (300.mA..93.A) }
259
- source_fold_t = (102.4.uS..5.S)
260
- sink_overload_i = { irange_15A: (2.A..3.A),
261
- irange_90A: (12.A..18.A) }
262
- sink_overload_t = (102.4.uS..300.mS)
263
- sink_fold_i = { irange_15A: (1.A..2.A),
264
- irange_90A: (6.A..12.A) }
265
- sink_fold_t = (102.4.uS..5.S)
266
- meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
267
- irange_90A: [90.A] } # This is verified to be correct on tester.
268
- meter_vrange = [4.V, 8.V]
269
- tdelay = 0 # default tdelay
270
- accuracy = { neg: -7.mV, pos: 7.mV }
271
- filter = 10_000
272
- bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
273
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
274
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
275
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
276
- elsif @instrument == 'HexVS+'
277
- forcev = (0.V..5.5.V)
278
- irange = 15.A
279
- source_overload_i = (1.05.A..16.5.A)
280
- source_overload_t = (102.4.uS..300.mS)
281
- source_fold_i = (50.mA..15.5.A)
282
- source_fold_t = (102.4.uS..5.S)
283
- sink_overload_i = (2.A..3.A)
284
- sink_overload_t = (102.4.uS..300.mS)
285
- sink_fold_i = (1.A..2.A)
286
- sink_fold_t = (102.4.uS..5.S)
287
- meter_irange = [10.mA, 100.mA, 1.A, 15.A]
288
- meter_vrange = [4.V, 8.V]
289
- tdelay = 0 # default tdelay
290
- accuracy = { neg: -2.mV, pos: 2.mV }
291
- filter = 10_000
292
- bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
293
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
294
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
295
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
296
- elsif @instrument == 'HexVS+x2' # Also known as HexVS+, Merged2
297
- forcev = (0.V..5.5.V)
298
- irange = [15.A, 30.A]
299
- source_overload_i = { irange_15A: (1.05.A..16.5.A),
300
- irange_30A: (2.1.A..33.A) }
301
- source_overload_t = (102.4.uS..300.mS)
302
- source_fold_i = { irange_15A: (50.mA..15.5.A),
303
- irange_30A: (100.mA..31.A) }
304
- source_fold_t = (102.4.uS..5.S)
305
- sink_overload_i = { irange_15A: (2.A..3.A),
306
- irange_30A: (4.A..6.A) }
307
- sink_overload_t = (102.4.uS..300.mS)
308
- sink_fold_i = { irange_15A: (1.A..2.A),
309
- irange_30A: (2.A..4.A) }
310
- sink_fold_t = (102.4.uS..5.S)
311
- meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
312
- irange_30A: [30.A] } # This is verified to be correct on tester.
313
- meter_vrange = [4.V, 8.V]
314
- tdelay = 0 # default tdelay
315
- accuracy = { neg: -2.mV, pos: 2.mV }
316
- filter = 10_000
317
- bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
318
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
319
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
320
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
321
- elsif @instrument == 'HexVS+x4' # Also known as HexVS+, Merged4
322
- forcev = (0.V..5.5.V)
323
- irange = [15.A, 60.A]
324
- source_overload_i = { irange_15A: (1.05.A..16.5.A),
325
- irange_60A: (4.2.A..66.A) }
326
- source_overload_t = (102.4.uS..300.mS)
327
- source_fold_i = { irange_15A: (50.mA..15.5.A),
328
- irange_60A: (200.mA..62.A) }
329
- source_fold_t = (102.4.uS..5.S)
330
- sink_overload_i = { irange_15A: (2.A..3.A),
331
- irange_60A: (8.A..12.A) }
332
- sink_overload_t = (102.4.uS..300.mS)
333
- sink_fold_i = { irange_15A: (1.A..2.A),
334
- irange_60A: (4.A..8.A) }
335
- sink_fold_t = (102.4.uS..5.S)
336
- meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
337
- irange_60A: [60.A] } # This is verified to be correct on tester.
338
- meter_vrange = [4.V, 8.V]
339
- tdelay = 0 # default tdelay
340
- accuracy = { neg: -2.mV, pos: 2.mV }
341
- filter = 10_000
342
- bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
343
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
344
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
345
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
346
- elsif @instrument == 'HexVS+x6' # Also known as HexVS+, Merged6
347
- forcev = (0.V..5.5.V)
348
- irange = [15.A, 90.A]
349
- source_overload_i = { irange_15A: (1.05.A..16.5.A),
350
- irange_90A: (6.3.A..99.A) }
351
- source_overload_t = (102.4.uS..300.mS)
352
- source_fold_i = { irange_15A: (50.mA..15.5.A),
353
- irange_90A: (300.mA..93.A) }
354
- source_fold_t = (102.4.uS..5.S)
355
- sink_overload_i = { irange_15A: (2.A..3.A),
356
- irange_90A: (12.A..18.A) }
357
- sink_overload_t = (102.4.uS..300.mS)
358
- sink_fold_i = { irange_15A: (1.A..2.A),
359
- irange_90A: (6.A..12.A) }
360
- sink_fold_t = (102.4.uS..5.S)
361
- meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
362
- irange_90A: [90.A] } # This is verified to be correct on tester.
363
- meter_vrange = [4.V, 8.V]
364
- tdelay = 0 # default tdelay
365
- accuracy = { neg: -2.mV, pos: 2.mV }
366
- filter = 10_000
367
- bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
368
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
369
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
370
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
371
- elsif @instrument == 'HDVS1' # also known as HDVS
372
- forcev = (0.V..7.V)
373
- irange = 1.A
374
- source_overload_i = 'n/a'
375
- source_overload_t = 'n/a'
376
- source_fold_i = (5.mA..1.A)
377
- source_fold_t = (0.S..167.77.mS)
378
- sink_overload_i = 'n/a'
379
- sink_overload_t = 'n/a'
380
- sink_fold_i = (5.mA..200.mA)
381
- sink_fold_t = (0.S..167.77.mS)
382
- meter_irange = [10.uA, 100.uA, 1.mA, 10.mA, 100.mA, 1.A]
383
- meter_vrange = 7.V
384
- tdelay = 0 # default tdelay
385
- accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
386
- filter = [1356, 2712, 5425, 10_850, 21_701, 43_402, 86_805, 173_611, 347_222,
387
- 694_444, 1_388_888, 2_777_777, 5_555_555]
388
- bandwidth = [0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24,
389
- 100, 101, 102, 103, 104, 220, 221, 222, 223, 224, 470,
390
- 471, 472, 473, 474]
391
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
392
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
393
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
394
- elsif @instrument == 'HDVS1x2' # also known as HDVS, Merged2
395
- forcev = (0.V..7.V)
396
- irange = 2.A
397
- source_overload_i = 'n/a'
398
- source_overload_t = 'n/a'
399
- source_fold_i = (10.mA..2.A)
400
- source_fold_t = (0.S..167.77.mS)
401
- sink_overload_i = 'n/a'
402
- sink_overload_t = 'n/a'
403
- sink_fold_i = (10.mA..400.mA)
404
- sink_fold_t = (0.S..167.77.mS)
405
- meter_irange = [20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 2.A]
406
- meter_vrange = 7.V
407
- tdelay = 0 # default tdelay
408
- accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
409
- filter = [1356, 2712, 5425, 10_850, 21_701, 43_402, 86_805, 173_611, 347_222,
410
- 694_444, 1_388_888, 2_777_777, 5_555_555]
411
- bandwidth = [0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24,
412
- 100, 101, 102, 103, 104, 220, 221, 222, 223, 224, 470,
413
- 471, 472, 473, 474]
414
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
415
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
416
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
417
- elsif @instrument == 'HDVS1x4' # also known as HDVS, Merged4
418
- forcev = (0.V..7.V)
419
- irange = [4.A]
420
- source_overload_i = 'n/a'
421
- source_overload_t = 'n/a'
422
- source_fold_i = (20.mA..4.A)
423
- source_fold_t = (0.S..167.77.mS)
424
- sink_overload_i = 'n/a'
425
- sink_overload_t = 'n/a'
426
- sink_fold_i = (20.mA..800.mA)
427
- sink_fold_t = (0.S..167.77.mS)
428
- meter_irange = [40.uA, 400.uA, 4.mA, 40.mA, 400.mA, 4.A]
429
- meter_vrange = 7.V
430
- tdelay = 0 # default tdelay
431
- accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
432
- filter = [1356, 2712, 5425, 10_850, 21_701, 43_402, 86_805, 173_611, 347_222,
433
- 694_444, 1_388_888, 2_777_777, 5_555_555]
434
- bandwidth = [0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24,
435
- 100, 101, 102, 103, 104, 220, 221, 222, 223, 224, 470,
436
- 471, 472, 473, 474]
437
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
438
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
439
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
440
- elsif @instrument == 'VHDVS' # also known as UVS256
441
- forcev = (-2.V..18.V)
442
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA]
443
- source_overload_i = 'n/a'
444
- source_overload_t = 'n/a'
445
- source_fold_i = { irange_4uA: (500.nA..4.uA),
446
- irange_20uA: (2.5.uA..20.uA),
447
- irange_200uA: (25.uA..200.uA),
448
- irange_2mA: (250.uA..2.mA),
449
- irange_20mA: (2.5.mA..20.mA),
450
- irange_200mA: (25.mA..200.mA) }
451
- source_fold_t = (300.uS..2.S)
452
- sink_overload_i = 'n/a'
453
- sink_overload_t = 'n/a'
454
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
455
- irange_20uA: (2.5.uA..20.uA),
456
- irange_200uA: (25.uA..200.uA),
457
- irange_2mA: (250.uA..2.mA),
458
- irange_20mA: (2.5.mA..20.mA),
459
- irange_200mA: (25.mA..75.mA) }
460
- sink_fold_t = (300.uS..2.S)
461
- meter_irange = { irange_4uA: 4.uA,
462
- irange_20uA: 20.uA,
463
- irange_200uA: 200.uA,
464
- irange_2mA: 2.mA,
465
- irange_20mA: 20.mA,
466
- irange_200mA: 200.mA }
467
- meter_vrange = 18.V
468
- tdelay = 0 # default tdelay
469
- accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
470
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
471
- bandwidth = (0..255) # Integers
472
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
473
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
474
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
475
- elsif @instrument == 'VHDVS_HC' # also known as UVS256, High-Current
476
- forcev = (-2.V..18.V)
477
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 800.mA]
478
- source_overload_i = 'n/a'
479
- source_overload_t = 'n/a'
480
- source_fold_i = { irange_4uA: (500.nA..4.uA),
481
- irange_20uA: (2.5.uA..20.uA),
482
- irange_200uA: (25.uA..200.uA),
483
- irange_2mA: (250.uA..2.mA),
484
- irange_20mA: (2.5.mA..20.mA),
485
- irange_200mA: (25.mA..200.mA),
486
- irange_700mA: (100.mA..700.mA),
487
- irange_800mA: (100.mA..800.mA) }
488
- source_fold_t = (300.uS..2.S)
489
- sink_overload_i = 'n/a'
490
- sink_overload_t = 'n/a'
491
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
492
- irange_20uA: (2.5.uA..20.uA),
493
- irange_200uA: (25.uA..200.uA),
494
- irange_2mA: (250.uA..2.mA),
495
- irange_20mA: (2.5.mA..20.mA),
496
- irange_200mA: (25.mA..75.mA),
497
- irange_700mA: (90.mA..110.mA), # This is verified on tester
498
- irange_800mA: (90.mA..110.mA) } # This is verified on tester
499
- sink_fold_t = (300.uS..2.S)
500
- meter_irange = { irange_4uA: 4.uA,
501
- irange_20uA: 20.uA,
502
- irange_200uA: 200.uA,
503
- irange_2mA: 2.mA,
504
- irange_20mA: 20.mA,
505
- irange_200mA: 200.mA,
506
- irange_700mA: 700.mA,
507
- irange_800mA: 800.mA }
508
- meter_vrange = 18.V
509
- tdelay = 0 # default tdelay
510
- accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
511
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
512
- bandwidth = (0..255) # Integers
513
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
514
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
515
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
516
- elsif @instrument == 'VHDVSx2' # also known as UVS256, Merged2
517
- forcev = (-2.V..18.V)
518
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 40.mA, 200.mA, 400.mA]
519
- source_overload_i = 'n/a'
520
- source_overload_t = 'n/a'
521
- source_fold_i = { irange_4uA: (500.nA..4.uA),
522
- irange_20uA: (2.5.uA..20.uA),
523
- irange_200uA: (25.uA..200.uA),
524
- irange_2mA: (250.uA..2.mA),
525
- irange_20mA: (2.5.mA..20.mA),
526
- irange_40mA: (5.mA..40.mA),
527
- irange_200mA: (25.mA..200.mA),
528
- irange_400mA: (50.mA..400.mA) }
529
- source_fold_t = (300.uS..2.S)
530
- sink_overload_i = 'n/a'
531
- sink_overload_t = 'n/a'
532
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
533
- irange_20uA: (2.5.uA..20.uA),
534
- irange_200uA: (25.uA..200.uA),
535
- irange_2mA: (250.uA..2.mA),
536
- irange_20mA: (2.5.mA..20.mA),
537
- irange_40mA: (5.mA..40.mA),
538
- irange_200mA: (25.mA..75.mA),
539
- irange_400mA: (50.mA..150.mA) }
540
- sink_fold_t = (300.uS..2.S)
541
- meter_irange = { irange_4uA: 4.uA,
542
- irange_20uA: 20.uA,
543
- irange_200uA: 200.uA,
544
- irange_2mA: 2.mA,
545
- irange_20mA: 20.mA,
546
- irange_40mA: 40.mA,
547
- irange_200mA: 200.mA,
548
- irange_400mA: 400.mA }
549
- meter_vrange = 18.V
550
- tdelay = 0 # default tdelay
551
- accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
552
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
553
- bandwidth = (0..255) # Integers
554
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
555
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
556
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
557
- elsif @instrument == 'VHDVS_HCx2' # also known as UVS256, High-Current, Merged2
558
- forcev = (-2.V..18.V)
559
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 40.mA, 200.mA, 400.mA, 700.mA, 1.4.A]
560
- source_overload_i = 'n/a'
561
- source_overload_t = 'n/a'
562
- source_fold_i = { irange_4uA: (500.nA..4.uA),
563
- irange_20uA: (2.5.uA..20.uA),
564
- irange_200uA: (25.uA..200.uA),
565
- irange_2mA: (250.uA..2.mA),
566
- irange_20mA: (2.5.mA..20.mA),
567
- irange_40mA: (5.mA..40.mA),
568
- irange_200mA: (25.mA..200.mA),
569
- irange_400mA: (50.mA..400.mA),
570
- irange_700mA: (100.mA..700.mA),
571
- irange_1p4A: (200.mA..1.4.A) }
572
- source_fold_t = (300.uS..2.S)
573
- sink_overload_i = 'n/a'
574
- sink_overload_t = 'n/a'
575
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
576
- irange_20uA: (2.5.uA..20.uA),
577
- irange_200uA: (25.uA..200.uA),
578
- irange_2mA: (250.uA..2.mA),
579
- irange_20mA: (2.5.mA..20.mA),
580
- irange_40mA: (5.mA..40.mA),
581
- irange_200mA: (25.mA..75.mA),
582
- irange_400mA: (50.mA..150.mA),
583
- irange_700mA: (90.mA..110.mA), # This is verified on tester
584
- irange_1p4A: (190.mA..210.mA) } # This is verified on tester
585
- sink_fold_t = (300.uS..2.S)
586
- meter_irange = { irange_4uA: 4.uA,
587
- irange_20uA: 20.uA,
588
- irange_200uA: 200.uA,
589
- irange_2mA: 2.mA,
590
- irange_20mA: 20.mA,
591
- irange_40mA: 40.mA,
592
- irange_200mA: 200.mA,
593
- irange_400mA: 400.mA,
594
- irange_700mA: 700.mA,
595
- irange_1p4A: 1.4.A }
596
- meter_vrange = 18.V
597
- tdelay = 0 # default tdelay
598
- accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
599
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
600
- bandwidth = (0..255) # Integers
601
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
602
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
603
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
604
- elsif @instrument == 'VHDVS_HCx4' # also known as UVS256, High-Current, Merged4
605
- forcev = (-2.V..18.V)
606
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 2.8.A]
607
- source_overload_i = 'n/a'
608
- source_overload_t = 'n/a'
609
- source_fold_i = { irange_4uA: (500.nA..4.uA),
610
- irange_20uA: (2.5.uA..20.uA),
611
- irange_200uA: (25.uA..200.uA),
612
- irange_2mA: (250.uA..2.mA),
613
- irange_20mA: (2.5.mA..20.mA),
614
- irange_200mA: (25.mA..200.mA),
615
- irange_700mA: (100.mA..700.mA),
616
- irange_2p8A: (400.mA..2.8.A) }
617
- source_fold_t = (300.uS..2.S)
618
- sink_overload_i = 'n/a'
619
- sink_overload_t = 'n/a'
620
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
621
- irange_20uA: (2.5.uA..20.uA),
622
- irange_200uA: (25.uA..200.uA),
623
- irange_2mA: (250.uA..2.mA),
624
- irange_20mA: (2.5.mA..20.mA),
625
- irange_200mA: (25.mA..75.mA),
626
- irange_700mA: (90.mA..110.mA), # This is verified on tester
627
- irange_2p8A: (390.mA..410.mA) } # This is verified on tester
628
- sink_fold_t = (300.uS..2.S)
629
- meter_irange = { irange_4uA: 4.uA,
630
- irange_20uA: 20.uA,
631
- irange_200uA: 200.uA,
632
- irange_2mA: 2.mA,
633
- irange_20mA: 20.mA,
634
- irange_200mA: 200.mA,
635
- irange_700mA: 700.mA,
636
- irange_2p8A: 2.8.A }
637
- meter_vrange = 18.V
638
- tdelay = 0 # default tdelay
639
- accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
640
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
641
- bandwidth = (0..255) # Integers
642
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
643
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
644
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
645
- elsif @instrument == 'VHDVS_HCx8' # also known as UVS256, High-Current, Merged8
646
- forcev = (-2.V..18.V)
647
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 5.6.A]
648
- source_overload_i = 'n/a'
649
- source_overload_t = 'n/a'
650
- source_fold_i = { irange_4uA: (500.nA..4.uA),
651
- irange_20uA: (2.5.uA..20.uA),
652
- irange_200uA: (25.uA..200.uA),
653
- irange_2mA: (250.uA..2.mA),
654
- irange_20mA: (2.5.mA..20.mA),
655
- irange_200mA: (25.mA..200.mA),
656
- irange_700mA: (100.mA..700.mA),
657
- irange_5p6A: (800.mA..5.6.A) }
658
- source_fold_t = (300.uS..2.S)
659
- sink_overload_i = 'n/a'
660
- sink_overload_t = 'n/a'
661
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
662
- irange_20uA: (2.5.uA..20.uA),
663
- irange_200uA: (25.uA..200.uA),
664
- irange_2mA: (250.uA..2.mA),
665
- irange_20mA: (2.5.mA..20.mA),
666
- irange_200mA: (25.mA..75.mA),
667
- irange_700mA: (90.mA..110.mA), # This is verified on tester
668
- irange_5p6A: (790.mA..810.mA) } # This is verified on tester
669
- sink_fold_t = (300.uS..2.S)
670
- meter_irange = { irange_4uA: 4.uA,
671
- irange_20uA: 20.uA,
672
- irange_200uA: 200.uA,
673
- irange_2mA: 2.mA,
674
- irange_20mA: 20.mA,
675
- irange_200mA: 200.mA,
676
- irange_700mA: 700.mA,
677
- irange_5p6A: 5.6.A }
678
- meter_vrange = 18.V
679
- tdelay = 0 # default tdelay
680
- accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
681
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
682
- bandwidth = (0..255) # Integers
683
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
684
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
685
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
686
- elsif @instrument == 'VHDVS+' # also known as UVS256, High-Accuracy
687
- forcev = (-2.V..18.V)
688
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA]
689
- source_overload_i = 'n/a'
690
- source_overload_t = 'n/a'
691
- source_fold_i = { irange_4uA: (500.nA..4.uA),
692
- irange_20uA: (2.5.uA..20.uA),
693
- irange_200uA: (25.uA..200.uA),
694
- irange_2mA: (250.uA..2.mA),
695
- irange_20mA: (2.5.mA..20.mA),
696
- irange_200mA: (25.mA..200.mA) }
697
- source_fold_t = (300.uS..2.S)
698
- sink_overload_i = 'n/a'
699
- sink_overload_t = 'n/a'
700
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
701
- irange_20uA: (2.5.uA..20.uA),
702
- irange_200uA: (25.uA..200.uA),
703
- irange_2mA: (250.uA..2.mA),
704
- irange_20mA: (2.5.mA..20.mA),
705
- irange_200mA: (25.mA..75.mA) }
706
- sink_fold_t = (300.uS..2.S)
707
- meter_irange = { irange_4uA: 4.uA,
708
- irange_20uA: 20.uA,
709
- irange_200uA: 200.uA,
710
- irange_2mA: 2.mA,
711
- irange_20mA: 20.mA,
712
- irange_200mA: 200.mA }
713
- meter_vrange = 18.V
714
- tdelay = 0 # default tdelay
715
- accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
716
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
717
- bandwidth = (0..255) # Integers
718
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
719
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
720
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
721
- elsif @instrument == 'VHDVS_HC+' # also known as UVS256, High-Current, High-Accuracy
722
- forcev = (-2.V..18.V)
723
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 800.mA]
724
- source_overload_i = 'n/a'
725
- source_overload_t = 'n/a'
726
- source_fold_i = { irange_4uA: (500.nA..4.uA),
727
- irange_20uA: (2.5.uA..20.uA),
728
- irange_200uA: (25.uA..200.uA),
729
- irange_2mA: (250.uA..2.mA),
730
- irange_20mA: (2.5.mA..20.mA),
731
- irange_200mA: (25.mA..200.mA),
732
- irange_700mA: (100.mA..700.mA),
733
- irange_800mA: (100.mA..800.mA) }
734
- source_fold_t = (300.uS..2.S)
735
- sink_overload_i = 'n/a'
736
- sink_overload_t = 'n/a'
737
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
738
- irange_20uA: (2.5.uA..20.uA),
739
- irange_200uA: (25.uA..200.uA),
740
- irange_2mA: (250.uA..2.mA),
741
- irange_20mA: (2.5.mA..20.mA),
742
- irange_200mA: (25.mA..75.mA),
743
- irange_700mA: (90.mA..110.mA), # This is verified on tester
744
- irange_800mA: (90.mA..110.mA) } # This is verified on tester
745
- sink_fold_t = (300.uS..2.S)
746
- meter_irange = { irange_4uA: 4.uA,
747
- irange_20uA: 20.uA,
748
- irange_200uA: 200.uA,
749
- irange_2mA: 2.mA,
750
- irange_20mA: 20.mA,
751
- irange_200mA: 200.mA,
752
- irange_700mA: 700.mA,
753
- irange_800mA: 800.mA }
754
- meter_vrange = 18.V
755
- tdelay = 0 # default tdelay
756
- accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
757
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
758
- bandwidth = (0..255) # Integers
759
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
760
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
761
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
762
- elsif @instrument == 'VHDVS+x2' # also known as UVS256, High-Accuracy, Merged2
763
- forcev = (-2.V..18.V)
764
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 40.mA, 200.mA, 400.mA]
765
- source_overload_i = 'n/a'
766
- source_overload_t = 'n/a'
767
- source_fold_i = { irange_4uA: (500.nA..4.uA),
768
- irange_20uA: (2.5.uA..20.uA),
769
- irange_200uA: (25.uA..200.uA),
770
- irange_2mA: (250.uA..2.mA),
771
- irange_20mA: (2.5.mA..20.mA),
772
- irange_40mA: (5.mA..40.mA),
773
- irange_200mA: (25.mA..200.mA),
774
- irange_400mA: (50.mA..400.mA) }
775
- source_fold_t = (300.uS..2.S)
776
- sink_overload_i = 'n/a'
777
- sink_overload_t = 'n/a'
778
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
779
- irange_20uA: (2.5.uA..20.uA),
780
- irange_200uA: (25.uA..200.uA),
781
- irange_2mA: (250.uA..2.mA),
782
- irange_20mA: (2.5.mA..20.mA),
783
- irange_40mA: (5.mA..40.mA),
784
- irange_200mA: (25.mA..75.mA),
785
- irange_400mA: (50.mA..150.mA) }
786
- sink_fold_t = (300.uS..2.S)
787
- meter_irange = { irange_4uA: 4.uA,
788
- irange_20uA: 20.uA,
789
- irange_200uA: 200.uA,
790
- irange_2mA: 2.mA,
791
- irange_20mA: 20.mA,
792
- irange_40mA: 40.mA,
793
- irange_200mA: 200.mA,
794
- irange_400mA: 400.mA }
795
- meter_vrange = 18.V
796
- tdelay = 0 # default tdelay
797
- accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
798
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
799
- bandwidth = (0..255) # Integers
800
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
801
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
802
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
803
- elsif @instrument == 'VHDVS_HC+x2' # also known as UVS256, High-Current, High-Accuracy, Merged2
804
- forcev = (-2.V..18.V)
805
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 40.mA, 200.mA, 400.mA, 700.mA, 1.4.A]
806
- source_overload_i = 'n/a'
807
- source_overload_t = 'n/a'
808
- source_fold_i = { irange_4uA: (500.nA..4.uA),
809
- irange_20uA: (2.5.uA..20.uA),
810
- irange_200uA: (25.uA..200.uA),
811
- irange_2mA: (250.uA..2.mA),
812
- irange_20mA: (2.5.mA..20.mA),
813
- irange_40mA: (5.mA..40.mA),
814
- irange_200mA: (25.mA..200.mA),
815
- irange_400mA: (50.mA..400.mA),
816
- irange_700mA: (100.mA..700.mA),
817
- irange_1p4A: (200.mA..1.4.A) }
818
- source_fold_t = (300.uS..2.S)
819
- sink_overload_i = 'n/a'
820
- sink_overload_t = 'n/a'
821
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
822
- irange_20uA: (2.5.uA..20.uA),
823
- irange_200uA: (25.uA..200.uA),
824
- irange_2mA: (250.uA..2.mA),
825
- irange_20mA: (2.5.mA..20.mA),
826
- irange_40mA: (5.mA..40.mA),
827
- irange_200mA: (25.mA..75.mA),
828
- irange_400mA: (50.mA..150.mA),
829
- irange_700mA: (90.mA..110.mA), # This is verified on tester
830
- irange_1p4A: (190.mA..210.mA) } # This is verified on tester
831
- sink_fold_t = (300.uS..2.S)
832
- meter_irange = { irange_4uA: 4.uA,
833
- irange_20uA: 20.uA,
834
- irange_200uA: 200.uA,
835
- irange_2mA: 2.mA,
836
- irange_20mA: 20.mA,
837
- irange_40mA: 40.mA,
838
- irange_200mA: 200.mA,
839
- irange_400mA: 400.mA,
840
- irange_700mA: 700.mA,
841
- irange_1p4A: 1.4.A }
842
- meter_vrange = 18.V
843
- tdelay = 0 # default tdelay
844
- accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
845
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
846
- bandwidth = (0..255) # Integers
847
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
848
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
849
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
850
- elsif @instrument == 'VHDVS_HC+x4' # also known as UVS256, High-Current, High-Accuracy, Merged4
851
- forcev = (-2.V..18.V)
852
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 2.8.A]
853
- source_overload_i = 'n/a'
854
- source_overload_t = 'n/a'
855
- source_fold_i = { irange_4uA: (500.nA..4.uA),
856
- irange_20uA: (2.5.uA..20.uA),
857
- irange_200uA: (25.uA..200.uA),
858
- irange_2mA: (250.uA..2.mA),
859
- irange_20mA: (2.5.mA..20.mA),
860
- irange_200mA: (25.mA..200.mA),
861
- irange_700mA: (100.mA..700.mA),
862
- irange_2p8A: (400.mA..2.8.A) }
863
- source_fold_t = (300.uS..2.S)
864
- sink_overload_i = 'n/a'
865
- sink_overload_t = 'n/a'
866
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
867
- irange_20uA: (2.5.uA..20.uA),
868
- irange_200uA: (25.uA..200.uA),
869
- irange_2mA: (250.uA..2.mA),
870
- irange_20mA: (2.5.mA..20.mA),
871
- irange_200mA: (25.mA..75.mA),
872
- irange_700mA: (90.mA..110.mA), # This is verified on tester
873
- irange_2p8A: (390.mA..410.mA) } # This is verified on tester
874
- sink_fold_t = (300.uS..2.S)
875
- meter_irange = { irange_4uA: 4.uA,
876
- irange_20uA: 20.uA,
877
- irange_200uA: 200.uA,
878
- irange_2mA: 2.mA,
879
- irange_20mA: 20.mA,
880
- irange_200mA: 200.mA,
881
- irange_700mA: 700.mA,
882
- irange_2p8A: 2.8.A }
883
- meter_vrange = 18.V
884
- tdelay = 0 # default tdelay
885
- accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
886
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
887
- bandwidth = (0..255) # Integers
888
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
889
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
890
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
891
- elsif @instrument == 'VHDVS_HC+x8' # also known as UVS256, High-Current, High-Accuracy, Merged8
892
- forcev = (-2.V..18.V)
893
- irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 5.6.A]
894
- source_overload_i = 'n/a'
895
- source_overload_t = 'n/a'
896
- source_fold_i = { irange_4uA: (500.nA..4.uA),
897
- irange_20uA: (2.5.uA..20.uA),
898
- irange_200uA: (25.uA..200.uA),
899
- irange_2mA: (250.uA..2.mA),
900
- irange_20mA: (2.5.mA..20.mA),
901
- irange_200mA: (25.mA..200.mA),
902
- irange_700mA: (100.mA..700.mA),
903
- irange_5p6A: (800.mA..5.6.A) }
904
- source_fold_t = (300.uS..2.S)
905
- sink_overload_i = 'n/a'
906
- sink_overload_t = 'n/a'
907
- sink_fold_i = { irange_4uA: (500.nA..4.uA),
908
- irange_20uA: (2.5.uA..20.uA),
909
- irange_200uA: (25.uA..200.uA),
910
- irange_2mA: (250.uA..2.mA),
911
- irange_20mA: (2.5.mA..20.mA),
912
- irange_200mA: (25.mA..75.mA),
913
- irange_700mA: (90.mA..110.mA), # This is verified on tester
914
- irange_5p6A: (790.mA..810.mA) } # This is verified on tester
915
- sink_fold_t = (300.uS..2.S)
916
- meter_irange = { irange_4uA: 4.uA,
917
- irange_20uA: 20.uA,
918
- irange_200uA: 200.uA,
919
- irange_2mA: 2.mA,
920
- irange_20mA: 20.mA,
921
- irange_200mA: 200.mA,
922
- irange_700mA: 700.mA,
923
- irange_5p6A: 5.6.A }
924
- meter_vrange = 18.V
925
- tdelay = 0 # default tdelay
926
- accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
927
- filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
928
- bandwidth = (0..255) # Integers
929
- supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
930
- source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
931
- sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
932
- else
933
- puts "please enter an instrument type: e.g. $tester.ate_hardware(\"VSM\").supply"
934
- puts "Instrument type available: \"VSM\", \"VSMx2\", \"VSMx4\","
935
- puts "\"HexVS\", \"HexVSx2\", \"HexVSx4\", \"HexVSx6\","
936
- puts "\"HexVS+\", \"HexVS+x2\", \"HexVS+x4\", \"HexVS+x6\", \"HDVS1\","
937
- puts "\"HDVS1x2\", \"HDVS1x4\", \"VHDVS\", \"VHDVS_HC\", \"VHDVSx2\","
938
- puts "\"VHDVS_HCx2\", \"VHDVS_HCx4\", and \"VHDVS_HCx8\"."
939
- puts "\"VHDVS+\", \"VHDVS_HC+\", \"VHDVS+x2\","
940
- puts "\"VHDVS_HC+x2\", \"VHDVS_HC+x4\", and \"VHDVS_HC+x8\"."
941
- puts 'HDVS1 is also known as HDVS. VHDVS is also known as UVS256.'
942
- puts 'x2 is Merged2, x4 is Merged4, x6 is Merged6. _HC is High-Current.'
943
- puts '+ is High-Accuracy.'
944
- end
945
- end
946
- end
947
- end
948
- end
949
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class UltraFLEX < Base
4
+ class ATEHardware
5
+ attr_accessor :instrument
6
+
7
+ def initialize(instrumentname)
8
+ @name = 'ultraflex'
9
+ @instrument ||= instrumentname
10
+ end
11
+
12
+ def ppmu
13
+ ppmu = Struct.new(:forcei, :forcev, :measi, :measv, :vclamp)
14
+
15
+ if @instrument == 'HSD-M' # also known as HSD1000
16
+ forcei = [20.uA, 200.uA, 2.mA, 50.mA]
17
+ forcev = { forcei_50mA__gt_20mA: (-0.1.V..4.5.V),
18
+ forcei_50mA__lte_20mA: (-1.V..6.V),
19
+ forcei_Non50mA__half_scale: (-1..6.V),
20
+ forcei_Non50mA__full_scale: (-1.V..5.5.V) }
21
+ measi = [2.uA, 20.uA, 200.uA, 2.mA, 50.mA]
22
+ measv = { measi_50mA__gt_20mA: (-0.1.V..4.5.V),
23
+ measi_50mA__lte_20mA: (-1.V..6.V),
24
+ measi_20mA__0p5mA_to_20mA: (-1.V..5.5.V),
25
+ measi_20mA__0p05mA_to_1mA: (-1.V..6.V),
26
+ measi_20mA__n0p5mA_to_0p5mA: (-1.85.V..6.V),
27
+ measi_20mA__n1mA_to_n0p5mA: (-1.V..6.V),
28
+ measi_20mA__n2mA_to_n1mA: (-1.V..5.5.V),
29
+ measi_200uA__half_scale: (-1.V..6.V),
30
+ measi_200uA__full_scale: (-1.V..5.V),
31
+ measi_20uA__half_scale: (-1.V..6.V),
32
+ measi_20uA__full_scale: (-1.V..5.5.V) }
33
+ vclamp = (-2.V..6.5.V)
34
+ ppmu.new(forcei, forcev, measi, measv, vclamp)
35
+ elsif @instrument == 'HSD-U' # also known as Ultrapin1600 or Utah
36
+ forcei = [20.uA, 200.uA, 2.mA, 50.mA]
37
+ forcev = { forcei_50mA__20mA_to_50mA: (-0.1.V..4.5.V),
38
+ forcei_50mA__0mA_to_20mA: (-1.V..6.V),
39
+ forcei_50mA__n20mA_to_0mA: (-0.1.V..6.V),
40
+ forcei_50mA__n35mA_to_n20mA: (0.5.V..5.1.V),
41
+ forcei_50mA__n50mA_to_n35mA: (1.1.V..4.5.V),
42
+ forcei_Non50mA: (-1.V..6.V) }
43
+ measi = [2.uA, 20.uA, 200.uA, 2.mA, 50.mA]
44
+ measv = { measi_50mA: (-1.V..6.V),
45
+ measi_200uA: (-1.V..6.V),
46
+ measi_20uA: (-1.V..6.V),
47
+ measi_2mA__1mA_to_2mA: (-1.V..6.V),
48
+ measi_2mA__n1mA_to_1mA: (-1.5.V..6.V),
49
+ measi_2mA__n2mA_to_n1mA: (-1.V..6.V) }
50
+ vclamp = (-1.5.V..6.5.V)
51
+ ppmu.new(forcei, forcev, measi, measv, vclamp)
52
+ elsif @instrument == 'HSD-4G'
53
+ forcei = [200.uA, 2.mA, 30.mA]
54
+ forcev = { measi_30mA: [min: '1.5V, 1.5V - 50mV/mA * Idut', max: '0V, -50mV/mA * Idut'],
55
+ measi_2mA: (-1.V..1.5.V),
56
+ measi_200uA: (-1.V..1.5.V) }
57
+ measi = [200.uA, 2.mA, 30.mA]
58
+ measv = (-1.V..1.5.V)
59
+ vclamp = 'n/a'
60
+ ppmu.new(forcei, forcev, measi, measv, vclamp)
61
+ elsif @instrument == 'HSS-6G' # also known as SB6G
62
+ forcei = [200.uA, 2.mA, 50.mA]
63
+ forcev = { forcei_50mA__gt_20mA: (-0.1.V..3.6.V),
64
+ forcei_50mA__lte_20mA: (-1.V..3.6.V),
65
+ forcei_2mA: (-1.V..3.6.V),
66
+ forcei_200uA: (-1.V..3.6.V) }
67
+ measi = [200.uA, 2.mA, 50.mA]
68
+ measv = { measi_50mA__gt_20mA: (-0.1.V..3.6.V),
69
+ measi_50mA__lte_20mA: (-1.V..3.6.V),
70
+ measi_200uA: (-1.V..3.6.V),
71
+ measi_2mA: (-1.V..3.6.V) }
72
+ vclamp = (-1.3.V..3.9.V)
73
+ ppmu.new(forcei, forcev, measi, measv, vclamp)
74
+ else
75
+ puts "please enter an instrument type: e.g. $tester.ate_hardware(\"HSD-M\").ppmu"
76
+ puts "Instrument type available: \"HSD-M\", \"HSD-U\", \"HSD-4G\", and \"HSS-6G\" "
77
+ puts 'HSD-U is also known as Ultrapin1600. HSS-6G is also known as SB6G.'
78
+ end
79
+ end
80
+
81
+ def supply
82
+ supply = Struct.new(:forcev, :irange, :source_overload_i, :source_overload_t, :source_fold_i,
83
+ :source_fold_t, :sink_overload_i, :sink_overload_t, :sink_fold_i,
84
+ :sink_fold_t, :meter_irange, :meter_vrange, :tdelay, :accuracy,
85
+ :filter, :bandwidth)
86
+ if @instrument == 'VSM'
87
+ forcev = (0.V..4.V)
88
+ irange = [1.A, 11.A, 21.A, 51.A, 81.A]
89
+ source_overload_i = { irange_1A: (100.mA..1.08.A),
90
+ irange_11A: (1.1.A..11.88.A),
91
+ irange_21A: (2.1.A..22.68.A),
92
+ irange_51A: (5.1.A..55.08.A),
93
+ irange_81A: (8.1.A..87.48.A) }
94
+ source_overload_t = (10.uS..8.S)
95
+ source_fold_i = { irange_1A: (50.mA..1.03.A),
96
+ irange_11A: (550.mA..11.33.A),
97
+ irange_21A: (1.05.A..21.63.A),
98
+ irange_51A: (2.55.A..52.53.A),
99
+ irange_81A: (4.05.A..83.43.A) }
100
+ source_fold_t = (10.uS..8.S)
101
+ sink_overload_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
102
+ irange_11A: [max: 858.mA], # ????? Not programmable?
103
+ irange_21A: [max: 1.64.A], # ????? Not programmable?
104
+ irange_51A: [max: 3.98.A], # ????? Not programmable?
105
+ irange_81A: [max: 6.32.A] } # ????? Not programmable?
106
+ sink_overload_t = 0 # ????? Not programmable?
107
+ sink_fold_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
108
+ irange_11A: [max: 858.mA], # ????? Not programmable?
109
+ irange_21A: [max: 1.64.A], # ????? Not programmable?
110
+ irange_51A: [max: 3.98.A], # ????? Not programmable?
111
+ irange_81A: [max: 6.32.A] } # ????? Not programmable?
112
+ sink_fold_t = (10.uS..8.S)
113
+ meter_irange = { irange_1A: [1.25.A, 2.5.A],
114
+ irange_11A: [13.75.A, 27.5.A],
115
+ irange_21A: [26.25.A, 52.5.A],
116
+ irange_51A: [63.75.A, 127.5.A],
117
+ irange_81A: [101.25.A, 202.5.A] }
118
+ meter_vrange = [3.V, 6.V]
119
+ tdelay = 0 # default tdelay
120
+ accuracy = { neg: -2.mV, pos: 2.mV }
121
+ filter = [635, 2539, 40_625]
122
+ bandwidth = [0, 1, 2, 3, 4]
123
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
124
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
125
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
126
+ elsif @instrument == 'VSMx2' # Also known as VSM, Merged2
127
+ forcev = (0.V..4.V)
128
+ irange = [1.A, 2.A, 11.A, 21.A, 51.A, 81.A, 102.A, 162.A]
129
+ source_overload_i = { irange_1A: (100.mA..1.08.A),
130
+ irange_2A: (200.mA..2.16.A),
131
+ irange_11A: (1.1.A..11.88.A),
132
+ irange_21A: (2.1.A..22.68.A),
133
+ irange_51A: (5.1.A..55.08.A),
134
+ irange_81A: (8.1.A..87.48.A),
135
+ irange_102A: (10.2.A..110.16.A),
136
+ irange_162A: (16.2.A..174.96.A) }
137
+ source_overload_t = (10.uS..8.S)
138
+ source_fold_i = { irange_1A: (50.mA..1.03.A),
139
+ irange_2A: (100.mA..2.06.A),
140
+ irange_11A: (550.mA..11.33.A),
141
+ irange_21A: (1.05.A..21.63.A),
142
+ irange_51A: (2.55.A..52.53.A),
143
+ irange_81A: (4.05.A..83.43.A),
144
+ irange_102A: (5.1.A..105.06.A),
145
+ irange_162A: (8.1.A..166.86.A) }
146
+ source_fold_t = (10.uS..8.S)
147
+ sink_overload_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
148
+ irange_2A: [max: 156.mA], # ????? Not programmable?
149
+ irange_11A: [max: 858.mA], # ????? Not programmable?
150
+ irange_21A: [max: 1.64.A], # ????? Not programmable?
151
+ irange_51A: [max: 3.98.A], # ????? Not programmable?
152
+ irange_81A: [max: 6.32.A], # ????? Not programmable?
153
+ irange_102A: [max: 7.96.A], # ????? Not programmable?
154
+ irange_162A: [max: 12.64.A] } # ????? Not programmable?
155
+ sink_overload_t = 0 # ????? Not programmable?
156
+ sink_fold_i = { irange_1A: [max: 78.mA], # ????? Not programmable?
157
+ irange_2A: [max: 156.mA], # ????? Not programmable?
158
+ irange_11A: [max: 858.mA], # ????? Not programmable?
159
+ irange_21A: [max: 1.64.A], # ????? Not programmable?
160
+ irange_51A: [max: 3.98.A], # ????? Not programmable?
161
+ irange_81A: [max: 6.32.A], # ????? Not programmable?
162
+ irange_102A: [max: 7.96.A], # ????? Not programmable?
163
+ irange_162A: [max: 12.64.A] } # ????? Not programmable?
164
+ meter_irange = { irange_1A: [1.25.A, 2.5.A],
165
+ irange_2A: [2.5.A, 5.A],
166
+ irange_11A: [13.75.A, 27.5.A],
167
+ irange_21A: [26.25.A, 52.5.A],
168
+ irange_51A: [63.75.A, 127.5.A],
169
+ irange_81A: [101.25.A, 202.5.A],
170
+ irange_102A: [127.5.A, 255.A],
171
+ irange_162A: [202.5.A, 405.A] }
172
+ sink_fold_t = (10.uS..8.S)
173
+ meter_vrange = [3.V, 6.V]
174
+ tdelay = 0 # default tdelay
175
+ accuracy = { neg: -2.mV, pos: 2.mV }
176
+ filter = [635, 2539, 40_625]
177
+ bandwidth = [0, 1, 2, 3, 4]
178
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
179
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
180
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
181
+ elsif @instrument == 'HexVS'
182
+ forcev = (0.V..5.5.V)
183
+ irange = 15.A
184
+ source_overload_i = (1.05.A..16.5.A)
185
+ source_overload_t = (102.4.uS..300.mS)
186
+ source_fold_i = (50.mA..15.5.A)
187
+ source_fold_t = (102.4.uS..5.S)
188
+ sink_overload_i = (2.A..3.A)
189
+ sink_overload_t = (102.4.uS..300.mS)
190
+ sink_fold_i = (1.A..2.A)
191
+ sink_fold_t = (102.4.uS..5.S)
192
+ meter_irange = [10.mA, 100.mA, 1.A, 15.A]
193
+ meter_vrange = [4.V, 8.V]
194
+ tdelay = 0 # default tdelay
195
+ accuracy = { neg: -7.mV, pos: 7.mV }
196
+ filter = 10_000
197
+ bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
198
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
199
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
200
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
201
+ elsif @instrument == 'HexVSx2' # Also known as HexVS, Merged2
202
+ forcev = (0.V..5.5.V)
203
+ irange = [15.A, 30.A]
204
+ source_overload_i = { irange_15A: (1.05.A..16.5.A),
205
+ irange_30A: (2.1.A..33.A) }
206
+ source_overload_t = (102.4.uS..300.mS)
207
+ source_fold_i = { irange_15A: (50.mA..15.5.A),
208
+ irange_30A: (100.mA..31.A) }
209
+ source_fold_t = (102.4.uS..5.S)
210
+ sink_overload_i = { irange_15A: (2.A..3.A),
211
+ irange_30A: (4.A..6.A) }
212
+ sink_overload_t = (102.4.uS..300.mS)
213
+ sink_fold_i = { irange_15A: (1.A..2.A),
214
+ irange_30A: (2.A..4.A) }
215
+ sink_fold_t = (102.4.uS..5.S)
216
+ meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
217
+ irange_30A: [30.A] } # This is verified to be correct on tester.
218
+ meter_vrange = [4.V, 8.V]
219
+ tdelay = 0 # default tdelay
220
+ accuracy = { neg: -7.mV, pos: 7.mV }
221
+ filter = 10_000
222
+ bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
223
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
224
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
225
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
226
+ elsif @instrument == 'HexVSx4' # Also known as HexVS, Merged4
227
+ forcev = (0.V..5.5.V)
228
+ irange = [15.A, 60.A]
229
+ source_overload_i = { irange_15A: (1.05.A..16.5.A),
230
+ irange_60A: (4.2.A..66.A) }
231
+ source_overload_t = (102.4.uS..300.mS)
232
+ source_fold_i = { irange_15A: (50.mA..15.5.A),
233
+ irange_60A: (200.mA..62.A) }
234
+ source_fold_t = (102.4.uS..5.S)
235
+ sink_overload_i = { irange_15A: (2.A..3.A),
236
+ irange_60A: (8.A..12.A) }
237
+ sink_overload_t = (102.4.uS..300.mS)
238
+ sink_fold_i = { irange_15A: (1.A..2.A),
239
+ irange_60A: (4.A..8.A) }
240
+ sink_fold_t = (102.4.uS..5.S)
241
+ meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
242
+ irange_60A: [60.A] } # This is verified to be correct on tester.
243
+ meter_vrange = [4.V, 8.V]
244
+ tdelay = 0 # default tdelay
245
+ accuracy = { neg: -7.mV, pos: 7.mV }
246
+ filter = 10_000
247
+ bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
248
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
249
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
250
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
251
+ elsif @instrument == 'HexVSx6' # Also known as HexVS, Merged6
252
+ forcev = (0.V..5.5.V)
253
+ irange = [15.A, 90.A]
254
+ source_overload_i = { irange_15A: (1.05.A..16.5.A),
255
+ irange_90A: (6.3.A..99.A) }
256
+ source_overload_t = (102.4.uS..300.mS)
257
+ source_fold_i = { irange_15A: (50.mA..15.5.A),
258
+ irange_90A: (300.mA..93.A) }
259
+ source_fold_t = (102.4.uS..5.S)
260
+ sink_overload_i = { irange_15A: (2.A..3.A),
261
+ irange_90A: (12.A..18.A) }
262
+ sink_overload_t = (102.4.uS..300.mS)
263
+ sink_fold_i = { irange_15A: (1.A..2.A),
264
+ irange_90A: (6.A..12.A) }
265
+ sink_fold_t = (102.4.uS..5.S)
266
+ meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
267
+ irange_90A: [90.A] } # This is verified to be correct on tester.
268
+ meter_vrange = [4.V, 8.V]
269
+ tdelay = 0 # default tdelay
270
+ accuracy = { neg: -7.mV, pos: 7.mV }
271
+ filter = 10_000
272
+ bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
273
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
274
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
275
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
276
+ elsif @instrument == 'HexVS+'
277
+ forcev = (0.V..5.5.V)
278
+ irange = 15.A
279
+ source_overload_i = (1.05.A..16.5.A)
280
+ source_overload_t = (102.4.uS..300.mS)
281
+ source_fold_i = (50.mA..15.5.A)
282
+ source_fold_t = (102.4.uS..5.S)
283
+ sink_overload_i = (2.A..3.A)
284
+ sink_overload_t = (102.4.uS..300.mS)
285
+ sink_fold_i = (1.A..2.A)
286
+ sink_fold_t = (102.4.uS..5.S)
287
+ meter_irange = [10.mA, 100.mA, 1.A, 15.A]
288
+ meter_vrange = [4.V, 8.V]
289
+ tdelay = 0 # default tdelay
290
+ accuracy = { neg: -2.mV, pos: 2.mV }
291
+ filter = 10_000
292
+ bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
293
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
294
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
295
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
296
+ elsif @instrument == 'HexVS+x2' # Also known as HexVS+, Merged2
297
+ forcev = (0.V..5.5.V)
298
+ irange = [15.A, 30.A]
299
+ source_overload_i = { irange_15A: (1.05.A..16.5.A),
300
+ irange_30A: (2.1.A..33.A) }
301
+ source_overload_t = (102.4.uS..300.mS)
302
+ source_fold_i = { irange_15A: (50.mA..15.5.A),
303
+ irange_30A: (100.mA..31.A) }
304
+ source_fold_t = (102.4.uS..5.S)
305
+ sink_overload_i = { irange_15A: (2.A..3.A),
306
+ irange_30A: (4.A..6.A) }
307
+ sink_overload_t = (102.4.uS..300.mS)
308
+ sink_fold_i = { irange_15A: (1.A..2.A),
309
+ irange_30A: (2.A..4.A) }
310
+ sink_fold_t = (102.4.uS..5.S)
311
+ meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
312
+ irange_30A: [30.A] } # This is verified to be correct on tester.
313
+ meter_vrange = [4.V, 8.V]
314
+ tdelay = 0 # default tdelay
315
+ accuracy = { neg: -2.mV, pos: 2.mV }
316
+ filter = 10_000
317
+ bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
318
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
319
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
320
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
321
+ elsif @instrument == 'HexVS+x4' # Also known as HexVS+, Merged4
322
+ forcev = (0.V..5.5.V)
323
+ irange = [15.A, 60.A]
324
+ source_overload_i = { irange_15A: (1.05.A..16.5.A),
325
+ irange_60A: (4.2.A..66.A) }
326
+ source_overload_t = (102.4.uS..300.mS)
327
+ source_fold_i = { irange_15A: (50.mA..15.5.A),
328
+ irange_60A: (200.mA..62.A) }
329
+ source_fold_t = (102.4.uS..5.S)
330
+ sink_overload_i = { irange_15A: (2.A..3.A),
331
+ irange_60A: (8.A..12.A) }
332
+ sink_overload_t = (102.4.uS..300.mS)
333
+ sink_fold_i = { irange_15A: (1.A..2.A),
334
+ irange_60A: (4.A..8.A) }
335
+ sink_fold_t = (102.4.uS..5.S)
336
+ meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
337
+ irange_60A: [60.A] } # This is verified to be correct on tester.
338
+ meter_vrange = [4.V, 8.V]
339
+ tdelay = 0 # default tdelay
340
+ accuracy = { neg: -2.mV, pos: 2.mV }
341
+ filter = 10_000
342
+ bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
343
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
344
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
345
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
346
+ elsif @instrument == 'HexVS+x6' # Also known as HexVS+, Merged6
347
+ forcev = (0.V..5.5.V)
348
+ irange = [15.A, 90.A]
349
+ source_overload_i = { irange_15A: (1.05.A..16.5.A),
350
+ irange_90A: (6.3.A..99.A) }
351
+ source_overload_t = (102.4.uS..300.mS)
352
+ source_fold_i = { irange_15A: (50.mA..15.5.A),
353
+ irange_90A: (300.mA..93.A) }
354
+ source_fold_t = (102.4.uS..5.S)
355
+ sink_overload_i = { irange_15A: (2.A..3.A),
356
+ irange_90A: (12.A..18.A) }
357
+ sink_overload_t = (102.4.uS..300.mS)
358
+ sink_fold_i = { irange_15A: (1.A..2.A),
359
+ irange_90A: (6.A..12.A) }
360
+ sink_fold_t = (102.4.uS..5.S)
361
+ meter_irange = { irange_15A: [10.mA, 100.mA, 1.A, 15.A],
362
+ irange_90A: [90.A] } # This is verified to be correct on tester.
363
+ meter_vrange = [4.V, 8.V]
364
+ tdelay = 0 # default tdelay
365
+ accuracy = { neg: -2.mV, pos: 2.mV }
366
+ filter = 10_000
367
+ bandwidth = [0, 1, 2, 3, 4, 5, 6, 7]
368
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
369
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
370
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
371
+ elsif @instrument == 'HDVS1' # also known as HDVS
372
+ forcev = (0.V..7.V)
373
+ irange = 1.A
374
+ source_overload_i = 'n/a'
375
+ source_overload_t = 'n/a'
376
+ source_fold_i = (5.mA..1.A)
377
+ source_fold_t = (0.S..167.77.mS)
378
+ sink_overload_i = 'n/a'
379
+ sink_overload_t = 'n/a'
380
+ sink_fold_i = (5.mA..200.mA)
381
+ sink_fold_t = (0.S..167.77.mS)
382
+ meter_irange = [10.uA, 100.uA, 1.mA, 10.mA, 100.mA, 1.A]
383
+ meter_vrange = 7.V
384
+ tdelay = 0 # default tdelay
385
+ accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
386
+ filter = [1356, 2712, 5425, 10_850, 21_701, 43_402, 86_805, 173_611, 347_222,
387
+ 694_444, 1_388_888, 2_777_777, 5_555_555]
388
+ bandwidth = [0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24,
389
+ 100, 101, 102, 103, 104, 220, 221, 222, 223, 224, 470,
390
+ 471, 472, 473, 474]
391
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
392
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
393
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
394
+ elsif @instrument == 'HDVS1x2' # also known as HDVS, Merged2
395
+ forcev = (0.V..7.V)
396
+ irange = 2.A
397
+ source_overload_i = 'n/a'
398
+ source_overload_t = 'n/a'
399
+ source_fold_i = (10.mA..2.A)
400
+ source_fold_t = (0.S..167.77.mS)
401
+ sink_overload_i = 'n/a'
402
+ sink_overload_t = 'n/a'
403
+ sink_fold_i = (10.mA..400.mA)
404
+ sink_fold_t = (0.S..167.77.mS)
405
+ meter_irange = [20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 2.A]
406
+ meter_vrange = 7.V
407
+ tdelay = 0 # default tdelay
408
+ accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
409
+ filter = [1356, 2712, 5425, 10_850, 21_701, 43_402, 86_805, 173_611, 347_222,
410
+ 694_444, 1_388_888, 2_777_777, 5_555_555]
411
+ bandwidth = [0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24,
412
+ 100, 101, 102, 103, 104, 220, 221, 222, 223, 224, 470,
413
+ 471, 472, 473, 474]
414
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
415
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
416
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
417
+ elsif @instrument == 'HDVS1x4' # also known as HDVS, Merged4
418
+ forcev = (0.V..7.V)
419
+ irange = [4.A]
420
+ source_overload_i = 'n/a'
421
+ source_overload_t = 'n/a'
422
+ source_fold_i = (20.mA..4.A)
423
+ source_fold_t = (0.S..167.77.mS)
424
+ sink_overload_i = 'n/a'
425
+ sink_overload_t = 'n/a'
426
+ sink_fold_i = (20.mA..800.mA)
427
+ sink_fold_t = (0.S..167.77.mS)
428
+ meter_irange = [40.uA, 400.uA, 4.mA, 40.mA, 400.mA, 4.A]
429
+ meter_vrange = 7.V
430
+ tdelay = 0 # default tdelay
431
+ accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
432
+ filter = [1356, 2712, 5425, 10_850, 21_701, 43_402, 86_805, 173_611, 347_222,
433
+ 694_444, 1_388_888, 2_777_777, 5_555_555]
434
+ bandwidth = [0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24,
435
+ 100, 101, 102, 103, 104, 220, 221, 222, 223, 224, 470,
436
+ 471, 472, 473, 474]
437
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
438
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
439
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
440
+ elsif @instrument == 'VHDVS' # also known as UVS256
441
+ forcev = (-2.V..18.V)
442
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA]
443
+ source_overload_i = 'n/a'
444
+ source_overload_t = 'n/a'
445
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
446
+ irange_20uA: (2.5.uA..20.uA),
447
+ irange_200uA: (25.uA..200.uA),
448
+ irange_2mA: (250.uA..2.mA),
449
+ irange_20mA: (2.5.mA..20.mA),
450
+ irange_200mA: (25.mA..200.mA) }
451
+ source_fold_t = (300.uS..2.S)
452
+ sink_overload_i = 'n/a'
453
+ sink_overload_t = 'n/a'
454
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
455
+ irange_20uA: (2.5.uA..20.uA),
456
+ irange_200uA: (25.uA..200.uA),
457
+ irange_2mA: (250.uA..2.mA),
458
+ irange_20mA: (2.5.mA..20.mA),
459
+ irange_200mA: (25.mA..75.mA) }
460
+ sink_fold_t = (300.uS..2.S)
461
+ meter_irange = { irange_4uA: 4.uA,
462
+ irange_20uA: 20.uA,
463
+ irange_200uA: 200.uA,
464
+ irange_2mA: 2.mA,
465
+ irange_20mA: 20.mA,
466
+ irange_200mA: 200.mA }
467
+ meter_vrange = 18.V
468
+ tdelay = 0 # default tdelay
469
+ accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
470
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
471
+ bandwidth = (0..255) # Integers
472
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
473
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
474
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
475
+ elsif @instrument == 'VHDVS_HC' # also known as UVS256, High-Current
476
+ forcev = (-2.V..18.V)
477
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 800.mA]
478
+ source_overload_i = 'n/a'
479
+ source_overload_t = 'n/a'
480
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
481
+ irange_20uA: (2.5.uA..20.uA),
482
+ irange_200uA: (25.uA..200.uA),
483
+ irange_2mA: (250.uA..2.mA),
484
+ irange_20mA: (2.5.mA..20.mA),
485
+ irange_200mA: (25.mA..200.mA),
486
+ irange_700mA: (100.mA..700.mA),
487
+ irange_800mA: (100.mA..800.mA) }
488
+ source_fold_t = (300.uS..2.S)
489
+ sink_overload_i = 'n/a'
490
+ sink_overload_t = 'n/a'
491
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
492
+ irange_20uA: (2.5.uA..20.uA),
493
+ irange_200uA: (25.uA..200.uA),
494
+ irange_2mA: (250.uA..2.mA),
495
+ irange_20mA: (2.5.mA..20.mA),
496
+ irange_200mA: (25.mA..75.mA),
497
+ irange_700mA: (90.mA..110.mA), # This is verified on tester
498
+ irange_800mA: (90.mA..110.mA) } # This is verified on tester
499
+ sink_fold_t = (300.uS..2.S)
500
+ meter_irange = { irange_4uA: 4.uA,
501
+ irange_20uA: 20.uA,
502
+ irange_200uA: 200.uA,
503
+ irange_2mA: 2.mA,
504
+ irange_20mA: 20.mA,
505
+ irange_200mA: 200.mA,
506
+ irange_700mA: 700.mA,
507
+ irange_800mA: 800.mA }
508
+ meter_vrange = 18.V
509
+ tdelay = 0 # default tdelay
510
+ accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
511
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
512
+ bandwidth = (0..255) # Integers
513
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
514
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
515
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
516
+ elsif @instrument == 'VHDVSx2' # also known as UVS256, Merged2
517
+ forcev = (-2.V..18.V)
518
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 40.mA, 200.mA, 400.mA]
519
+ source_overload_i = 'n/a'
520
+ source_overload_t = 'n/a'
521
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
522
+ irange_20uA: (2.5.uA..20.uA),
523
+ irange_200uA: (25.uA..200.uA),
524
+ irange_2mA: (250.uA..2.mA),
525
+ irange_20mA: (2.5.mA..20.mA),
526
+ irange_40mA: (5.mA..40.mA),
527
+ irange_200mA: (25.mA..200.mA),
528
+ irange_400mA: (50.mA..400.mA) }
529
+ source_fold_t = (300.uS..2.S)
530
+ sink_overload_i = 'n/a'
531
+ sink_overload_t = 'n/a'
532
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
533
+ irange_20uA: (2.5.uA..20.uA),
534
+ irange_200uA: (25.uA..200.uA),
535
+ irange_2mA: (250.uA..2.mA),
536
+ irange_20mA: (2.5.mA..20.mA),
537
+ irange_40mA: (5.mA..40.mA),
538
+ irange_200mA: (25.mA..75.mA),
539
+ irange_400mA: (50.mA..150.mA) }
540
+ sink_fold_t = (300.uS..2.S)
541
+ meter_irange = { irange_4uA: 4.uA,
542
+ irange_20uA: 20.uA,
543
+ irange_200uA: 200.uA,
544
+ irange_2mA: 2.mA,
545
+ irange_20mA: 20.mA,
546
+ irange_40mA: 40.mA,
547
+ irange_200mA: 200.mA,
548
+ irange_400mA: 400.mA }
549
+ meter_vrange = 18.V
550
+ tdelay = 0 # default tdelay
551
+ accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
552
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
553
+ bandwidth = (0..255) # Integers
554
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
555
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
556
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
557
+ elsif @instrument == 'VHDVS_HCx2' # also known as UVS256, High-Current, Merged2
558
+ forcev = (-2.V..18.V)
559
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 40.mA, 200.mA, 400.mA, 700.mA, 1.4.A]
560
+ source_overload_i = 'n/a'
561
+ source_overload_t = 'n/a'
562
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
563
+ irange_20uA: (2.5.uA..20.uA),
564
+ irange_200uA: (25.uA..200.uA),
565
+ irange_2mA: (250.uA..2.mA),
566
+ irange_20mA: (2.5.mA..20.mA),
567
+ irange_40mA: (5.mA..40.mA),
568
+ irange_200mA: (25.mA..200.mA),
569
+ irange_400mA: (50.mA..400.mA),
570
+ irange_700mA: (100.mA..700.mA),
571
+ irange_1p4A: (200.mA..1.4.A) }
572
+ source_fold_t = (300.uS..2.S)
573
+ sink_overload_i = 'n/a'
574
+ sink_overload_t = 'n/a'
575
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
576
+ irange_20uA: (2.5.uA..20.uA),
577
+ irange_200uA: (25.uA..200.uA),
578
+ irange_2mA: (250.uA..2.mA),
579
+ irange_20mA: (2.5.mA..20.mA),
580
+ irange_40mA: (5.mA..40.mA),
581
+ irange_200mA: (25.mA..75.mA),
582
+ irange_400mA: (50.mA..150.mA),
583
+ irange_700mA: (90.mA..110.mA), # This is verified on tester
584
+ irange_1p4A: (190.mA..210.mA) } # This is verified on tester
585
+ sink_fold_t = (300.uS..2.S)
586
+ meter_irange = { irange_4uA: 4.uA,
587
+ irange_20uA: 20.uA,
588
+ irange_200uA: 200.uA,
589
+ irange_2mA: 2.mA,
590
+ irange_20mA: 20.mA,
591
+ irange_40mA: 40.mA,
592
+ irange_200mA: 200.mA,
593
+ irange_400mA: 400.mA,
594
+ irange_700mA: 700.mA,
595
+ irange_1p4A: 1.4.A }
596
+ meter_vrange = 18.V
597
+ tdelay = 0 # default tdelay
598
+ accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
599
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
600
+ bandwidth = (0..255) # Integers
601
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
602
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
603
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
604
+ elsif @instrument == 'VHDVS_HCx4' # also known as UVS256, High-Current, Merged4
605
+ forcev = (-2.V..18.V)
606
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 2.8.A]
607
+ source_overload_i = 'n/a'
608
+ source_overload_t = 'n/a'
609
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
610
+ irange_20uA: (2.5.uA..20.uA),
611
+ irange_200uA: (25.uA..200.uA),
612
+ irange_2mA: (250.uA..2.mA),
613
+ irange_20mA: (2.5.mA..20.mA),
614
+ irange_200mA: (25.mA..200.mA),
615
+ irange_700mA: (100.mA..700.mA),
616
+ irange_2p8A: (400.mA..2.8.A) }
617
+ source_fold_t = (300.uS..2.S)
618
+ sink_overload_i = 'n/a'
619
+ sink_overload_t = 'n/a'
620
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
621
+ irange_20uA: (2.5.uA..20.uA),
622
+ irange_200uA: (25.uA..200.uA),
623
+ irange_2mA: (250.uA..2.mA),
624
+ irange_20mA: (2.5.mA..20.mA),
625
+ irange_200mA: (25.mA..75.mA),
626
+ irange_700mA: (90.mA..110.mA), # This is verified on tester
627
+ irange_2p8A: (390.mA..410.mA) } # This is verified on tester
628
+ sink_fold_t = (300.uS..2.S)
629
+ meter_irange = { irange_4uA: 4.uA,
630
+ irange_20uA: 20.uA,
631
+ irange_200uA: 200.uA,
632
+ irange_2mA: 2.mA,
633
+ irange_20mA: 20.mA,
634
+ irange_200mA: 200.mA,
635
+ irange_700mA: 700.mA,
636
+ irange_2p8A: 2.8.A }
637
+ meter_vrange = 18.V
638
+ tdelay = 0 # default tdelay
639
+ accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
640
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
641
+ bandwidth = (0..255) # Integers
642
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
643
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
644
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
645
+ elsif @instrument == 'VHDVS_HCx8' # also known as UVS256, High-Current, Merged8
646
+ forcev = (-2.V..18.V)
647
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 5.6.A]
648
+ source_overload_i = 'n/a'
649
+ source_overload_t = 'n/a'
650
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
651
+ irange_20uA: (2.5.uA..20.uA),
652
+ irange_200uA: (25.uA..200.uA),
653
+ irange_2mA: (250.uA..2.mA),
654
+ irange_20mA: (2.5.mA..20.mA),
655
+ irange_200mA: (25.mA..200.mA),
656
+ irange_700mA: (100.mA..700.mA),
657
+ irange_5p6A: (800.mA..5.6.A) }
658
+ source_fold_t = (300.uS..2.S)
659
+ sink_overload_i = 'n/a'
660
+ sink_overload_t = 'n/a'
661
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
662
+ irange_20uA: (2.5.uA..20.uA),
663
+ irange_200uA: (25.uA..200.uA),
664
+ irange_2mA: (250.uA..2.mA),
665
+ irange_20mA: (2.5.mA..20.mA),
666
+ irange_200mA: (25.mA..75.mA),
667
+ irange_700mA: (90.mA..110.mA), # This is verified on tester
668
+ irange_5p6A: (790.mA..810.mA) } # This is verified on tester
669
+ sink_fold_t = (300.uS..2.S)
670
+ meter_irange = { irange_4uA: 4.uA,
671
+ irange_20uA: 20.uA,
672
+ irange_200uA: 200.uA,
673
+ irange_2mA: 2.mA,
674
+ irange_20mA: 20.mA,
675
+ irange_200mA: 200.mA,
676
+ irange_700mA: 700.mA,
677
+ irange_5p6A: 5.6.A }
678
+ meter_vrange = 18.V
679
+ tdelay = 0 # default tdelay
680
+ accuracy = { neg: '-0.001xSUPPLY-10.mV', pos: '0.001xSUPPLY+10.mV' }
681
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
682
+ bandwidth = (0..255) # Integers
683
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
684
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
685
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
686
+ elsif @instrument == 'VHDVS+' # also known as UVS256, High-Accuracy
687
+ forcev = (-2.V..18.V)
688
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA]
689
+ source_overload_i = 'n/a'
690
+ source_overload_t = 'n/a'
691
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
692
+ irange_20uA: (2.5.uA..20.uA),
693
+ irange_200uA: (25.uA..200.uA),
694
+ irange_2mA: (250.uA..2.mA),
695
+ irange_20mA: (2.5.mA..20.mA),
696
+ irange_200mA: (25.mA..200.mA) }
697
+ source_fold_t = (300.uS..2.S)
698
+ sink_overload_i = 'n/a'
699
+ sink_overload_t = 'n/a'
700
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
701
+ irange_20uA: (2.5.uA..20.uA),
702
+ irange_200uA: (25.uA..200.uA),
703
+ irange_2mA: (250.uA..2.mA),
704
+ irange_20mA: (2.5.mA..20.mA),
705
+ irange_200mA: (25.mA..75.mA) }
706
+ sink_fold_t = (300.uS..2.S)
707
+ meter_irange = { irange_4uA: 4.uA,
708
+ irange_20uA: 20.uA,
709
+ irange_200uA: 200.uA,
710
+ irange_2mA: 2.mA,
711
+ irange_20mA: 20.mA,
712
+ irange_200mA: 200.mA }
713
+ meter_vrange = 18.V
714
+ tdelay = 0 # default tdelay
715
+ accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
716
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
717
+ bandwidth = (0..255) # Integers
718
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
719
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
720
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
721
+ elsif @instrument == 'VHDVS_HC+' # also known as UVS256, High-Current, High-Accuracy
722
+ forcev = (-2.V..18.V)
723
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 800.mA]
724
+ source_overload_i = 'n/a'
725
+ source_overload_t = 'n/a'
726
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
727
+ irange_20uA: (2.5.uA..20.uA),
728
+ irange_200uA: (25.uA..200.uA),
729
+ irange_2mA: (250.uA..2.mA),
730
+ irange_20mA: (2.5.mA..20.mA),
731
+ irange_200mA: (25.mA..200.mA),
732
+ irange_700mA: (100.mA..700.mA),
733
+ irange_800mA: (100.mA..800.mA) }
734
+ source_fold_t = (300.uS..2.S)
735
+ sink_overload_i = 'n/a'
736
+ sink_overload_t = 'n/a'
737
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
738
+ irange_20uA: (2.5.uA..20.uA),
739
+ irange_200uA: (25.uA..200.uA),
740
+ irange_2mA: (250.uA..2.mA),
741
+ irange_20mA: (2.5.mA..20.mA),
742
+ irange_200mA: (25.mA..75.mA),
743
+ irange_700mA: (90.mA..110.mA), # This is verified on tester
744
+ irange_800mA: (90.mA..110.mA) } # This is verified on tester
745
+ sink_fold_t = (300.uS..2.S)
746
+ meter_irange = { irange_4uA: 4.uA,
747
+ irange_20uA: 20.uA,
748
+ irange_200uA: 200.uA,
749
+ irange_2mA: 2.mA,
750
+ irange_20mA: 20.mA,
751
+ irange_200mA: 200.mA,
752
+ irange_700mA: 700.mA,
753
+ irange_800mA: 800.mA }
754
+ meter_vrange = 18.V
755
+ tdelay = 0 # default tdelay
756
+ accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
757
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
758
+ bandwidth = (0..255) # Integers
759
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
760
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
761
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
762
+ elsif @instrument == 'VHDVS+x2' # also known as UVS256, High-Accuracy, Merged2
763
+ forcev = (-2.V..18.V)
764
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 40.mA, 200.mA, 400.mA]
765
+ source_overload_i = 'n/a'
766
+ source_overload_t = 'n/a'
767
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
768
+ irange_20uA: (2.5.uA..20.uA),
769
+ irange_200uA: (25.uA..200.uA),
770
+ irange_2mA: (250.uA..2.mA),
771
+ irange_20mA: (2.5.mA..20.mA),
772
+ irange_40mA: (5.mA..40.mA),
773
+ irange_200mA: (25.mA..200.mA),
774
+ irange_400mA: (50.mA..400.mA) }
775
+ source_fold_t = (300.uS..2.S)
776
+ sink_overload_i = 'n/a'
777
+ sink_overload_t = 'n/a'
778
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
779
+ irange_20uA: (2.5.uA..20.uA),
780
+ irange_200uA: (25.uA..200.uA),
781
+ irange_2mA: (250.uA..2.mA),
782
+ irange_20mA: (2.5.mA..20.mA),
783
+ irange_40mA: (5.mA..40.mA),
784
+ irange_200mA: (25.mA..75.mA),
785
+ irange_400mA: (50.mA..150.mA) }
786
+ sink_fold_t = (300.uS..2.S)
787
+ meter_irange = { irange_4uA: 4.uA,
788
+ irange_20uA: 20.uA,
789
+ irange_200uA: 200.uA,
790
+ irange_2mA: 2.mA,
791
+ irange_20mA: 20.mA,
792
+ irange_40mA: 40.mA,
793
+ irange_200mA: 200.mA,
794
+ irange_400mA: 400.mA }
795
+ meter_vrange = 18.V
796
+ tdelay = 0 # default tdelay
797
+ accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
798
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
799
+ bandwidth = (0..255) # Integers
800
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
801
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
802
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
803
+ elsif @instrument == 'VHDVS_HC+x2' # also known as UVS256, High-Current, High-Accuracy, Merged2
804
+ forcev = (-2.V..18.V)
805
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 40.mA, 200.mA, 400.mA, 700.mA, 1.4.A]
806
+ source_overload_i = 'n/a'
807
+ source_overload_t = 'n/a'
808
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
809
+ irange_20uA: (2.5.uA..20.uA),
810
+ irange_200uA: (25.uA..200.uA),
811
+ irange_2mA: (250.uA..2.mA),
812
+ irange_20mA: (2.5.mA..20.mA),
813
+ irange_40mA: (5.mA..40.mA),
814
+ irange_200mA: (25.mA..200.mA),
815
+ irange_400mA: (50.mA..400.mA),
816
+ irange_700mA: (100.mA..700.mA),
817
+ irange_1p4A: (200.mA..1.4.A) }
818
+ source_fold_t = (300.uS..2.S)
819
+ sink_overload_i = 'n/a'
820
+ sink_overload_t = 'n/a'
821
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
822
+ irange_20uA: (2.5.uA..20.uA),
823
+ irange_200uA: (25.uA..200.uA),
824
+ irange_2mA: (250.uA..2.mA),
825
+ irange_20mA: (2.5.mA..20.mA),
826
+ irange_40mA: (5.mA..40.mA),
827
+ irange_200mA: (25.mA..75.mA),
828
+ irange_400mA: (50.mA..150.mA),
829
+ irange_700mA: (90.mA..110.mA), # This is verified on tester
830
+ irange_1p4A: (190.mA..210.mA) } # This is verified on tester
831
+ sink_fold_t = (300.uS..2.S)
832
+ meter_irange = { irange_4uA: 4.uA,
833
+ irange_20uA: 20.uA,
834
+ irange_200uA: 200.uA,
835
+ irange_2mA: 2.mA,
836
+ irange_20mA: 20.mA,
837
+ irange_40mA: 40.mA,
838
+ irange_200mA: 200.mA,
839
+ irange_400mA: 400.mA,
840
+ irange_700mA: 700.mA,
841
+ irange_1p4A: 1.4.A }
842
+ meter_vrange = 18.V
843
+ tdelay = 0 # default tdelay
844
+ accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
845
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
846
+ bandwidth = (0..255) # Integers
847
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
848
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
849
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
850
+ elsif @instrument == 'VHDVS_HC+x4' # also known as UVS256, High-Current, High-Accuracy, Merged4
851
+ forcev = (-2.V..18.V)
852
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 2.8.A]
853
+ source_overload_i = 'n/a'
854
+ source_overload_t = 'n/a'
855
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
856
+ irange_20uA: (2.5.uA..20.uA),
857
+ irange_200uA: (25.uA..200.uA),
858
+ irange_2mA: (250.uA..2.mA),
859
+ irange_20mA: (2.5.mA..20.mA),
860
+ irange_200mA: (25.mA..200.mA),
861
+ irange_700mA: (100.mA..700.mA),
862
+ irange_2p8A: (400.mA..2.8.A) }
863
+ source_fold_t = (300.uS..2.S)
864
+ sink_overload_i = 'n/a'
865
+ sink_overload_t = 'n/a'
866
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
867
+ irange_20uA: (2.5.uA..20.uA),
868
+ irange_200uA: (25.uA..200.uA),
869
+ irange_2mA: (250.uA..2.mA),
870
+ irange_20mA: (2.5.mA..20.mA),
871
+ irange_200mA: (25.mA..75.mA),
872
+ irange_700mA: (90.mA..110.mA), # This is verified on tester
873
+ irange_2p8A: (390.mA..410.mA) } # This is verified on tester
874
+ sink_fold_t = (300.uS..2.S)
875
+ meter_irange = { irange_4uA: 4.uA,
876
+ irange_20uA: 20.uA,
877
+ irange_200uA: 200.uA,
878
+ irange_2mA: 2.mA,
879
+ irange_20mA: 20.mA,
880
+ irange_200mA: 200.mA,
881
+ irange_700mA: 700.mA,
882
+ irange_2p8A: 2.8.A }
883
+ meter_vrange = 18.V
884
+ tdelay = 0 # default tdelay
885
+ accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
886
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
887
+ bandwidth = (0..255) # Integers
888
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
889
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
890
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
891
+ elsif @instrument == 'VHDVS_HC+x8' # also known as UVS256, High-Current, High-Accuracy, Merged8
892
+ forcev = (-2.V..18.V)
893
+ irange = [4.uA, 20.uA, 200.uA, 2.mA, 20.mA, 200.mA, 700.mA, 5.6.A]
894
+ source_overload_i = 'n/a'
895
+ source_overload_t = 'n/a'
896
+ source_fold_i = { irange_4uA: (500.nA..4.uA),
897
+ irange_20uA: (2.5.uA..20.uA),
898
+ irange_200uA: (25.uA..200.uA),
899
+ irange_2mA: (250.uA..2.mA),
900
+ irange_20mA: (2.5.mA..20.mA),
901
+ irange_200mA: (25.mA..200.mA),
902
+ irange_700mA: (100.mA..700.mA),
903
+ irange_5p6A: (800.mA..5.6.A) }
904
+ source_fold_t = (300.uS..2.S)
905
+ sink_overload_i = 'n/a'
906
+ sink_overload_t = 'n/a'
907
+ sink_fold_i = { irange_4uA: (500.nA..4.uA),
908
+ irange_20uA: (2.5.uA..20.uA),
909
+ irange_200uA: (25.uA..200.uA),
910
+ irange_2mA: (250.uA..2.mA),
911
+ irange_20mA: (2.5.mA..20.mA),
912
+ irange_200mA: (25.mA..75.mA),
913
+ irange_700mA: (90.mA..110.mA), # This is verified on tester
914
+ irange_5p6A: (790.mA..810.mA) } # This is verified on tester
915
+ sink_fold_t = (300.uS..2.S)
916
+ meter_irange = { irange_4uA: 4.uA,
917
+ irange_20uA: 20.uA,
918
+ irange_200uA: 200.uA,
919
+ irange_2mA: 2.mA,
920
+ irange_20mA: 20.mA,
921
+ irange_200mA: 200.mA,
922
+ irange_700mA: 700.mA,
923
+ irange_5p6A: 5.6.A }
924
+ meter_vrange = 18.V
925
+ tdelay = 0 # default tdelay
926
+ accuracy = { neg: '-0.001xSUPPLY-5.mV', pos: '0.001xSUPPLY+5.mV' }
927
+ filter = [49, 98, 195, 391, 781, 1563, 3125, 6250, 12_500, 25_000, 50_000, 100_000, 200_000]
928
+ bandwidth = (0..255) # Integers
929
+ supply.new(forcev, irange, source_overload_i, source_overload_t, source_fold_i,
930
+ source_fold_t, sink_overload_i, sink_overload_t, sink_fold_i,
931
+ sink_fold_t, meter_irange, meter_vrange, tdelay, accuracy, filter, bandwidth)
932
+ else
933
+ puts "please enter an instrument type: e.g. $tester.ate_hardware(\"VSM\").supply"
934
+ puts "Instrument type available: \"VSM\", \"VSMx2\", \"VSMx4\","
935
+ puts "\"HexVS\", \"HexVSx2\", \"HexVSx4\", \"HexVSx6\","
936
+ puts "\"HexVS+\", \"HexVS+x2\", \"HexVS+x4\", \"HexVS+x6\", \"HDVS1\","
937
+ puts "\"HDVS1x2\", \"HDVS1x4\", \"VHDVS\", \"VHDVS_HC\", \"VHDVSx2\","
938
+ puts "\"VHDVS_HCx2\", \"VHDVS_HCx4\", and \"VHDVS_HCx8\"."
939
+ puts "\"VHDVS+\", \"VHDVS_HC+\", \"VHDVS+x2\","
940
+ puts "\"VHDVS_HC+x2\", \"VHDVS_HC+x4\", and \"VHDVS_HC+x8\"."
941
+ puts 'HDVS1 is also known as HDVS. VHDVS is also known as UVS256.'
942
+ puts 'x2 is Merged2, x4 is Merged4, x6 is Merged6. _HC is High-Current.'
943
+ puts '+ is High-Accuracy.'
944
+ end
945
+ end
946
+ end
947
+ end
948
+ end
949
+ end