origen_testers 0.13.1 → 0.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. checksums.yaml +4 -4
  2. data/config/application.rb +151 -151
  3. data/config/boot.rb +13 -13
  4. data/config/commands.rb +85 -86
  5. data/config/users.rb +18 -18
  6. data/config/version.rb +8 -8
  7. data/lib/commands/build.rb +69 -69
  8. data/lib/commands/run.rb +48 -48
  9. data/lib/origen_testers.rb +47 -47
  10. data/lib/origen_testers/api.rb +381 -381
  11. data/lib/origen_testers/basic_test_setups.rb +105 -105
  12. data/lib/origen_testers/callback_handlers.rb +59 -59
  13. data/lib/origen_testers/command_based_tester.rb +45 -45
  14. data/lib/origen_testers/flow.rb +382 -382
  15. data/lib/origen_testers/generator.rb +283 -283
  16. data/lib/origen_testers/generator/identity_map.rb +23 -23
  17. data/lib/origen_testers/generator/placeholder.rb +11 -11
  18. data/lib/origen_testers/generator/test_numberer.rb +23 -23
  19. data/lib/origen_testers/igxl_based_tester.rb +12 -12
  20. data/lib/origen_testers/igxl_based_tester/base.rb +1100 -1099
  21. data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -79
  22. data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +169 -169
  23. data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -98
  24. data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -60
  25. data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -24
  26. data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -39
  27. data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +130 -130
  28. data/lib/origen_testers/igxl_based_tester/base/flow.rb +460 -460
  29. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +276 -276
  30. data/lib/origen_testers/igxl_based_tester/base/generator.rb +607 -607
  31. data/lib/origen_testers/igxl_based_tester/base/global_specs.rb +83 -83
  32. data/lib/origen_testers/igxl_based_tester/base/job.rb +75 -75
  33. data/lib/origen_testers/igxl_based_tester/base/jobs.rb +44 -44
  34. data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -59
  35. data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -39
  36. data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -31
  37. data/lib/origen_testers/igxl_based_tester/base/levelset.rb +110 -110
  38. data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -109
  39. data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -38
  40. data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -68
  41. data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -56
  42. data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -38
  43. data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -68
  44. data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -56
  45. data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -38
  46. data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -93
  47. data/lib/origen_testers/igxl_based_tester/base/references.rb +25 -25
  48. data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +322 -322
  49. data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +66 -66
  50. data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +212 -212
  51. data/lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb +37 -37
  52. data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -37
  53. data/lib/origen_testers/igxl_based_tester/base/timesets.rb +49 -49
  54. data/lib/origen_testers/igxl_based_tester/base/timesets_basic.rb +49 -49
  55. data/lib/origen_testers/igxl_based_tester/files.rb +43 -43
  56. data/lib/origen_testers/igxl_based_tester/j750.rb +269 -269
  57. data/lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb +32 -32
  58. data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -10
  59. data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -19
  60. data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -19
  61. data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -9
  62. data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -10
  63. data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -9
  64. data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -18
  65. data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -10
  66. data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -9
  67. data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -18
  68. data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -10
  69. data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +746 -746
  70. data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -9
  71. data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -10
  72. data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -34
  73. data/lib/origen_testers/igxl_based_tester/j750_hpt/custom_test_instance.rb +32 -32
  74. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -9
  75. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -9
  76. data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -19
  77. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -9
  78. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -9
  79. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -9
  80. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -9
  81. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -9
  82. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -9
  83. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -9
  84. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -9
  85. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +599 -599
  86. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -9
  87. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -9
  88. data/lib/origen_testers/igxl_based_tester/parser.rb +102 -102
  89. data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -9
  90. data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -33
  91. data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -48
  92. data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -339
  93. data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -109
  94. data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -203
  95. data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -21
  96. data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -92
  97. data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -31
  98. data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +420 -420
  99. data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -24
  100. data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -13
  101. data/lib/origen_testers/igxl_based_tester/ultraflex.rb +798 -798
  102. data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -10
  103. data/lib/origen_testers/igxl_based_tester/ultraflex/ate_hardware.rb +949 -949
  104. data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +36 -36
  105. data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -10
  106. data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -9
  107. data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -9
  108. data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -9
  109. data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -10
  110. data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +158 -158
  111. data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -19
  112. data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -19
  113. data/lib/origen_testers/igxl_based_tester/ultraflex/global_specs.rb +10 -10
  114. data/lib/origen_testers/igxl_based_tester/ultraflex/job.rb +9 -9
  115. data/lib/origen_testers/igxl_based_tester/ultraflex/jobs.rb +10 -10
  116. data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -9
  117. data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -9
  118. data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -9
  119. data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -10
  120. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -9
  121. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -10
  122. data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -9
  123. data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -18
  124. data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -10
  125. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -9
  126. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -18
  127. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -10
  128. data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -10
  129. data/lib/origen_testers/igxl_based_tester/ultraflex/references.rb +10 -10
  130. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +0 -0
  131. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +0 -0
  132. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +0 -0
  133. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb +0 -0
  134. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb +0 -0
  135. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +0 -0
  136. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +0 -0
  137. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb +0 -0
  138. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +0 -0
  139. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb +0 -0
  140. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +315 -315
  141. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -9
  142. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -10
  143. data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -9
  144. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -10
  145. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets_basic.rb +10 -10
  146. data/lib/origen_testers/interface.rb +345 -324
  147. data/lib/origen_testers/memory_style.rb +77 -77
  148. data/lib/origen_testers/no_interface.rb +7 -7
  149. data/lib/origen_testers/origen_ext/application/runner.rb +25 -25
  150. data/lib/origen_testers/origen_ext/generator.rb +54 -54
  151. data/lib/origen_testers/origen_ext/generator/flow.rb +91 -77
  152. data/lib/origen_testers/origen_ext/generator/resources.rb +21 -21
  153. data/lib/origen_testers/origen_ext/pins/pin.rb +78 -78
  154. data/lib/origen_testers/origen_ext/pins/pin_collection.rb +84 -84
  155. data/lib/origen_testers/parser.rb +22 -22
  156. data/lib/origen_testers/parser/description_lookup.rb +62 -62
  157. data/lib/origen_testers/parser/searchable_array.rb +30 -30
  158. data/lib/origen_testers/parser/searchable_hash.rb +30 -30
  159. data/lib/origen_testers/pattern_compilers.rb +116 -116
  160. data/lib/origen_testers/pattern_compilers/assembler.rb +88 -88
  161. data/lib/origen_testers/pattern_compilers/job.rb +96 -96
  162. data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -599
  163. data/lib/origen_testers/program_generators.rb +62 -62
  164. data/lib/origen_testers/smartest_based_tester.rb +8 -8
  165. data/lib/origen_testers/smartest_based_tester/base.rb +576 -567
  166. data/lib/origen_testers/smartest_based_tester/base/flow.rb +296 -291
  167. data/lib/origen_testers/smartest_based_tester/base/generator.rb +207 -194
  168. data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +32 -32
  169. data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +69 -69
  170. data/lib/origen_testers/smartest_based_tester/base/processors.rb +16 -16
  171. data/lib/origen_testers/smartest_based_tester/base/processors/adjacent_if_combiner.rb +106 -106
  172. data/lib/origen_testers/smartest_based_tester/base/processors/continue_implementer.rb +39 -39
  173. data/lib/origen_testers/smartest_based_tester/base/processors/empty_branch_cleaner.rb +21 -21
  174. data/lib/origen_testers/smartest_based_tester/base/processors/extract_run_flag_table.rb +33 -33
  175. data/lib/origen_testers/smartest_based_tester/base/processors/extract_set_variables.rb +22 -22
  176. data/lib/origen_testers/smartest_based_tester/base/processors/flag_optimizer.rb +188 -188
  177. data/lib/origen_testers/smartest_based_tester/base/processors/if_ran_cleaner.rb +34 -34
  178. data/lib/origen_testers/smartest_based_tester/base/test_method.rb +178 -164
  179. data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +77 -73
  180. data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -33
  181. data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -38
  182. data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -19
  183. data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -147
  184. data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +65 -65
  185. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +208 -193
  186. data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -54
  187. data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +38 -38
  188. data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -8
  189. data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -89
  190. data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +181 -181
  191. data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -54
  192. data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -10
  193. data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -19
  194. data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -10
  195. data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -10
  196. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -17
  197. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -13
  198. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.tf.erb +236 -214
  199. data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +48 -48
  200. data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -9
  201. data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -9
  202. data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -9
  203. data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -9
  204. data/lib/origen_testers/smartest_based_tester/v93k/variables_file.rb +10 -10
  205. data/lib/origen_testers/test/basic_interface.rb +17 -17
  206. data/lib/origen_testers/test/block.rb +21 -21
  207. data/lib/origen_testers/test/custom_test_interface.rb +111 -111
  208. data/lib/origen_testers/test/dut.rb +295 -295
  209. data/lib/origen_testers/test/dut2.rb +76 -76
  210. data/lib/origen_testers/test/dut3.rb +244 -244
  211. data/lib/origen_testers/test/interface.rb +503 -503
  212. data/lib/origen_testers/test/nvm.rb +94 -94
  213. data/lib/origen_testers/timing.rb +368 -368
  214. data/lib/origen_testers/vector.rb +207 -207
  215. data/lib/origen_testers/vector_based_tester.rb +41 -41
  216. data/lib/origen_testers/vector_generator.rb +655 -655
  217. data/lib/origen_testers/vector_pipeline.rb +302 -302
  218. data/pattern/bitmap.rb +7 -7
  219. data/pattern/dc_instr.rb +7 -7
  220. data/pattern/delay.rb +7 -7
  221. data/pattern/freq_counter.rb +6 -6
  222. data/pattern/mem_test.rb +8 -8
  223. data/pattern/multi_vector.rb +122 -122
  224. data/pattern/multi_vector_plus1.rb +125 -125
  225. data/pattern/nvm/j750/add_late_pins.rb +3 -3
  226. data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -8
  227. data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -8
  228. data/pattern/nvm/j750/j750_halt.rb +159 -159
  229. data/pattern/nvm/j750/j750_workout.rb +209 -209
  230. data/pattern/nvm/j750/timing.rb +73 -73
  231. data/pattern/read_write_reg.rb +61 -61
  232. data/pattern/reset.rb +4 -4
  233. data/pattern/subroutines.rb +69 -69
  234. data/pattern/tester_overlay.rb +61 -52
  235. data/pattern/tester_store.rb +28 -28
  236. data/program/_additional_erase.rb +7 -7
  237. data/program/_efa_resources.rb +7 -7
  238. data/program/_erase.rb +25 -25
  239. data/program/_erase_vfy.rb +5 -5
  240. data/program/_iv_resources.rb +10 -10
  241. data/program/basic_interface.rb +5 -5
  242. data/program/components/_prb1_main.rb +222 -222
  243. data/program/components/_temp.rb +6 -6
  244. data/program/custom_tests.rb +10 -10
  245. data/program/flow_control.rb +422 -422
  246. data/program/prb1.rb +11 -11
  247. data/program/prb1_resources.rb +28 -28
  248. data/program/prb2.rb +27 -27
  249. data/program/test.rb +29 -29
  250. data/program/uflex_resources.rb +199 -199
  251. data/templates/example.txt.erb +53 -53
  252. data/templates/j750/program_sheet.txt.erb +9 -9
  253. data/templates/manifest/v93k.yaml.erb +22 -22
  254. data/templates/web/index.md.erb +51 -51
  255. data/templates/web/layouts/_basic.html.erb +15 -15
  256. data/templates/web/partials/_navbar.html.erb +22 -22
  257. data/templates/web/release_notes.md.erb +5 -5
  258. metadata +2 -2
data/program/prb1.rb CHANGED
@@ -1,11 +1,11 @@
1
- # An instance of the interface is
2
- # passed in here, iterators and other
3
- # argument passing will be supported
4
- # similar to Pattern.create.
5
- Flow.create interface: 'OrigenTesters::Test::Interface' do
6
-
7
- self.resources_filename = 'prb1'
8
-
9
- import 'components/prb1_main'
10
-
11
- end
1
+ # An instance of the interface is
2
+ # passed in here, iterators and other
3
+ # argument passing will be supported
4
+ # similar to Pattern.create.
5
+ Flow.create interface: 'OrigenTesters::Test::Interface' do
6
+
7
+ self.resources_filename = 'prb1'
8
+
9
+ import 'components/prb1_main'
10
+
11
+ end
@@ -1,28 +1,28 @@
1
- # Similar to the test flows an interface instance is passed in as the first argument.
2
- Resources.create interface: 'OrigenTesters::Test::Interface' do
3
-
4
- self.resources_filename = 'prb1'
5
-
6
- # Logic here should be minimal,
7
- # pass whatever options you want
8
- # but the recommended approach is
9
- # to infer the pattern name and as
10
- # many additional details as
11
- # possible from the test name
12
- func :program_ckbd, :duration => :dynamic
13
-
14
- import 'efa_resources'
15
-
16
- func :margin_read1_ckbd
17
- func :normal_read_ckbd
18
- func :margin_read0_ckbd
19
-
20
- func :erase_all, :duration => :dynamic
21
-
22
- para 'charge_pump', :high_voltage => true
23
-
24
- if $tester.j750?
25
- test_instances.render 'templates/j750/vt_instances'
26
- compile 'templates/j750/program_sheet.txt', :passed_param => true
27
- end
28
- end
1
+ # Similar to the test flows an interface instance is passed in as the first argument.
2
+ Resources.create interface: 'OrigenTesters::Test::Interface' do
3
+
4
+ self.resources_filename = 'prb1'
5
+
6
+ # Logic here should be minimal,
7
+ # pass whatever options you want
8
+ # but the recommended approach is
9
+ # to infer the pattern name and as
10
+ # many additional details as
11
+ # possible from the test name
12
+ func :program_ckbd, :duration => :dynamic
13
+
14
+ import 'efa_resources'
15
+
16
+ func :margin_read1_ckbd
17
+ func :normal_read_ckbd
18
+ func :margin_read0_ckbd
19
+
20
+ func :erase_all, :duration => :dynamic
21
+
22
+ para 'charge_pump', :high_voltage => true
23
+
24
+ if $tester.j750?
25
+ test_instances.render 'templates/j750/vt_instances'
26
+ compile 'templates/j750/program_sheet.txt', :passed_param => true
27
+ end
28
+ end
data/program/prb2.rb CHANGED
@@ -1,27 +1,27 @@
1
- # An example of creating an entire test program from
2
- # a single source file
3
- Flow.create interface: 'OrigenTesters::Test::Interface' do
4
-
5
- # Test that this can be overridden from the target at flow-level
6
- self.add_flow_enable = :enabled
7
-
8
- self.resources_filename = 'prb2'
9
-
10
- func :erase_all, :duration => :dynamic
11
-
12
- func :margin_read1_all1
13
-
14
- func :erase_all, :duration => :dynamic
15
- func :margin_read1_all1
16
-
17
- import 'components/prb2_main'
18
-
19
- func :erase_all, :duration => :dynamic
20
- func :margin_read1_all1, :id => 'erased_successfully'
21
-
22
- if_enable 'extra_tests' do
23
- import 'components/prb2_main'
24
- end
25
-
26
- func :margin_read1_all1
27
- end
1
+ # An example of creating an entire test program from
2
+ # a single source file
3
+ Flow.create interface: 'OrigenTesters::Test::Interface' do
4
+
5
+ # Test that this can be overridden from the target at flow-level
6
+ self.add_flow_enable = :enabled
7
+
8
+ self.resources_filename = 'prb2'
9
+
10
+ func :erase_all, :duration => :dynamic
11
+
12
+ func :margin_read1_all1
13
+
14
+ func :erase_all, :duration => :dynamic
15
+ func :margin_read1_all1
16
+
17
+ import 'components/prb2_main'
18
+
19
+ func :erase_all, :duration => :dynamic
20
+ func :margin_read1_all1, :id => 'erased_successfully'
21
+
22
+ if_enable 'extra_tests' do
23
+ import 'components/prb2_main'
24
+ end
25
+
26
+ func :margin_read1_all1
27
+ end
data/program/test.rb CHANGED
@@ -1,29 +1,29 @@
1
- # An instance of the interface is
2
- # passed in here, iterators and other
3
- # argument passing will be supported
4
- # similar to Pattern.create.
5
- Flow.create interface: 'OrigenTesters::Test::Interface' do
6
-
7
- # Instantiate tests via the
8
- # interface
9
- # func 'program_ckbd', :tname => 'PGM_CKBD', :tnum => 1000, :bin => 100, :soft_bin => 1100
10
-
11
- # para 'charge_pump', :high_voltage => true, :lo_limit => 5, :hi_limit => 6
12
-
13
- meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, lo_limit: 35
14
- meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45
15
- meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35
16
- meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35
17
- meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV
18
- meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV, continue: true
19
- meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 2000, lo_limit: 0.01, continue: true
20
- meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: "_some_spec", lo_limit: 0.01, continue: true
21
- meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: [1, 2]
22
- meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, lo_limit: [1.uA, 2.uA, 3.uA], hi_limit: [4.uA,5.uA], units: "A", defer_limits: true
23
-
24
- if tester.uflex?
25
- log "Test of ultraflex render API"
26
- line = flow.ultraflex.use_limit
27
- line.units = "Hz"
28
- end
29
- end
1
+ # An instance of the interface is
2
+ # passed in here, iterators and other
3
+ # argument passing will be supported
4
+ # similar to Pattern.create.
5
+ Flow.create interface: 'OrigenTesters::Test::Interface' do
6
+
7
+ # Instantiate tests via the
8
+ # interface
9
+ # func 'program_ckbd', :tname => 'PGM_CKBD', :tnum => 1000, :bin => 100, :soft_bin => 1100
10
+
11
+ # para 'charge_pump', :high_voltage => true, :lo_limit => 5, :hi_limit => 6
12
+
13
+ meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, lo_limit: 35
14
+ meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45
15
+ meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35
16
+ meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35
17
+ meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV
18
+ meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV, continue: true
19
+ meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 2000, lo_limit: 0.01, continue: true
20
+ meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: "_some_spec", lo_limit: 0.01, continue: true
21
+ meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: [1, 2]
22
+ meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, lo_limit: [1.uA, 2.uA, 3.uA], hi_limit: [4.uA,5.uA], units: "A", defer_limits: true
23
+
24
+ if tester.uflex?
25
+ log "Test of ultraflex render API"
26
+ line = flow.ultraflex.use_limit
27
+ line.units = "Hz"
28
+ end
29
+ end
@@ -1,199 +1,199 @@
1
- Resources.create interface: 'OrigenTesters::Test::Interface' do
2
-
3
- pinmap :pinmap_test
4
-
5
- timing_sheet_pins = [:tclk, :tdi, :tdo, :tms]
6
-
7
- # Define some edge options so we can define some Edge objects
8
- default_options = {
9
- d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
10
- d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
11
- d0_edge: 'd1_edge', # time at which the input drive is turned on
12
- d1_edge: 'clkre + 0.25 * cycle', # time of the initial data drive edge
13
- d2_edge: '', # time of the return format data drive edge
14
- d3_edge: '', # time at which the input drive is turned off
15
- c_mode: 'Edge', # output compare mode
16
- c1_edge: 'clkre + 0.75 * cycle', # time of the initial output compare edge
17
- c2_edge: '', # time of the final output compare edge (window compare)
18
- t_res: 'Machine', # timing resolution (possibly ATE-specific)
19
- clk_per: '' # clock period equation - for use with MCG
20
- }
21
- clock_options = {
22
- d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
23
- d_fmt: 'RL', # drive data format (NR, RL, RH, etc.)
24
- d0_edge: 'd1_edge', # time at which the input drive is turned on
25
- d1_edge: 'clkre', # time of the initial data drive edge
26
- d2_edge: 'clkre + 0.5 * cycle', # time of the return format data drive edge
27
- d3_edge: '', # time at which the input drive is turned off
28
- c_mode: 'Off', # output compare mode
29
- c1_edge: '', # time of the initial output compare edge
30
- c2_edge: '', # time of the final output compare edge (window compare)
31
- t_res: 'Machine', # timing resolution (possibly ATE-specific)
32
- clk_per: 'mcg_cycle' # clock period equation - for use with MCG
33
- }
34
- input_options = {
35
- d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
36
- d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
37
- d0_edge: 'd1_edge', # time at which the input drive is turned on
38
- d1_edge: 'clkre - jtag_su', # time of the initial data drive edge
39
- d2_edge: '', # time of the return format data drive edge
40
- d3_edge: '', # time at which the input drive is turned off
41
- c_mode: 'Off', # output compare mode
42
- c1_edge: '', # time of the initial output compare edge
43
- c2_edge: '', # time of the final output compare edge (window compare)
44
- t_res: 'Machine', # timing resolution (possibly ATE-specific)
45
- clk_per: '' # clock period equation - for use with MCG
46
- }
47
- output_options = {
48
- d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
49
- d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
50
- d0_edge: 'd1_edge', # time at which the input drive is turned on
51
- d1_edge: 'clkre', # time of the initial data drive edge
52
- d2_edge: '', # time of the return format data drive edge
53
- d3_edge: '', # time at which the input drive is turned off
54
- c_mode: 'Edge', # output compare mode
55
- c1_edge: 'clkre + jtag_ov', # time of the initial output compare edge
56
- c2_edge: '', # time of the final output compare edge (window compare)
57
- t_res: 'Machine', # timing resolution (possibly ATE-specific)
58
- clk_per: '' # clock period equation - for use with MCG
59
- }
60
-
61
- # Define the Edge objects that you want to use later to construct edgesets/timesets
62
- # * the interface puts these in 'edge_collection'
63
- # FORMAT: edge <timing category>, <pin_name/type>, <edge options>
64
- edge :default, :default, default_options
65
- edge :clock, :clk, clock_options
66
- edge :input, :default, input_options
67
- edge :output, :default, output_options
68
-
69
- # Assign edges to the pins for edgeset sheet ':func'
70
- # * assign all pins some default timing for starters...
71
- # * importing edgesets will automatically populate ac_specset variables contained within the equations
72
- # FORMAT: edgeset <edgeset sheet name>, edgeset: <edgeset>, pin: <pin_name>, edge: <edge_object>, es_sheet_pins: <array of pins>, spec_sheet: <AC specsheet name>
73
- edgeset :func, edgeset: :default, pin: :tclk, edge: edge_collection.edges[:default][:default], spec_sheet: :func, es_sheet_pins: timing_sheet_pins
74
- edgeset :func, edgeset: :default, pin: :tms, edge: edge_collection.edges[:default][:default], spec_sheet: :func
75
- edgeset :func, edgeset: :default, pin: :tdi, edge: edge_collection.edges[:default][:default], spec_sheet: :func
76
- edgeset :func, edgeset: :default, pin: :tdo, edge: edge_collection.edges[:default][:default], spec_sheet: :func
77
- # * now assign pins some more meaningful timing for JTAG operation...
78
- edgeset :func, edgeset: :es_jtag, pin: :tclk, edge: edge_collection.edges[:clock][:clk], spec_sheet: :func, es_sheet_pins: timing_sheet_pins
79
- edgeset :func, edgeset: :es_jtag, pin: :tms, edge: edge_collection.edges[:input][:default], spec_sheet: :func
80
- edgeset :func, edgeset: :es_jtag, pin: :tdi, edge: edge_collection.edges[:input][:default], spec_sheet: :func
81
- edgeset :func, edgeset: :es_jtag, pin: :tdo, edge: edge_collection.edges[:output][:default], spec_sheet: :func
82
-
83
- # Assign edges to the pins for timeset sheet ':func'
84
- # * first a :default timeset
85
- # FORMAT: timeset <timset sheet name>, timeset: <timeset>, pin: <pin_name>, eset: <edgeset name>, ts_sheet_pins: <array of pins>
86
- timeset :func, timeset: :default, pin: :tclk, eset: :default, ts_sheet_pins: timing_sheet_pins
87
- timeset :func, timeset: :default, pin: :tms, eset: :default
88
- timeset :func, timeset: :default, pin: :tdi, eset: :default
89
- timeset :func, timeset: :default, pin: :tdo, eset: :default
90
- # * now a :jtag timeset
91
- timeset :func, timeset: :jtag, pin: :tclk, eset: :es_jtag, ts_sheet_pins: timing_sheet_pins
92
- timeset :func, timeset: :jtag, pin: :tms, eset: :es_jtag
93
- timeset :func, timeset: :jtag, pin: :tdi, eset: :es_jtag
94
- timeset :func, timeset: :jtag, pin: :tdo, eset: :es_jtag
95
-
96
- # Now repeat the timing generation process to create a timeset_basic sheet
97
- edgeset :func_tsb, edgeset: :default, pin: :tclk, edge: edge_collection.edges[:default][:default], spec_sheet: :func, es_sheet_pins: timing_sheet_pins, timeset_basic: true
98
- edgeset :func_tsb, edgeset: :default, pin: :tms, edge: edge_collection.edges[:default][:default], spec_sheet: :func
99
- edgeset :func_tsb, edgeset: :default, pin: :tdi, edge: edge_collection.edges[:default][:default], spec_sheet: :func
100
- edgeset :func_tsb, edgeset: :default, pin: :tdo, edge: edge_collection.edges[:default][:default], spec_sheet: :func
101
- # * now assign pins some more meaningful timing for JTAG operation...
102
- edgeset :func_tsb, edgeset: :es_jtag, pin: :tclk, edge: edge_collection.edges[:clock][:clk], spec_sheet: :func, es_sheet_pins: timing_sheet_pins, timeset_basic: true
103
- edgeset :func_tsb, edgeset: :es_jtag, pin: :tms, edge: edge_collection.edges[:input][:default], spec_sheet: :func
104
- edgeset :func_tsb, edgeset: :es_jtag, pin: :tdi, edge: edge_collection.edges[:input][:default], spec_sheet: :func
105
- edgeset :func_tsb, edgeset: :es_jtag, pin: :tdo, edge: edge_collection.edges[:output][:default], spec_sheet: :func
106
-
107
- # Assign edges to the pins for timeset sheet ':func'
108
- # * first a :default timeset
109
- # FORMAT: timeset <timset sheet name>, timeset: <timeset>, pin: <pin_name>, eset: <edgeset name>, ts_sheet_pins: <array of pins>
110
- timeset :func_tsb, timeset: :default, pin: :tclk, eset: :default, ts_sheet_pins: timing_sheet_pins, timeset_basic: true
111
- timeset :func_tsb, timeset: :default, pin: :tms, eset: :default
112
- timeset :func_tsb, timeset: :default, pin: :tdi, eset: :default
113
- timeset :func_tsb, timeset: :default, pin: :tdo, eset: :default
114
- # * now a :jtag timeset
115
- timeset :func_tsb, timeset: :jtag, pin: :tclk, eset: :es_jtag, ts_sheet_pins: timing_sheet_pins, timeset_basic: true
116
- timeset :func_tsb, timeset: :jtag, pin: :tms, eset: :es_jtag
117
- timeset :func_tsb, timeset: :jtag, pin: :tdi, eset: :es_jtag
118
- timeset :func_tsb, timeset: :jtag, pin: :tdo, eset: :es_jtag
119
-
120
- # * now define a few more AC specs and values
121
- ac_specset :func, 'cycle', specset: :func_100MHz, nom: { min: '9*ns', typ: '10*ns', max: '11*ns' }
122
- ac_specset :func, 'cycle', specset: :func_125MHz, nom: { min: '7*ns', typ: '8*ns', max: '9*ns' }
123
- ac_specset :func, 'new_var1', specset: :func_100MHz, nom: { min: '1*ns', typ: '2*ns', max: '3*ns' }
124
- ac_specset :func, 'new_var2', specset: :func_125MHz, nom: { min: '4*ns', typ: '5*ns', max: '6*ns' }
125
-
126
- level_sheet_pins = [:vdd1, :vdd2, :tclk, :tdi, :tdo, :tms]
127
-
128
- # Define some level options so we can define some Level objects
129
- pwr_options = {
130
- vmain: 'vdd_main_val', # Main supply voltage
131
- valt: 'vdd_alt_val', # Alternate supply voltage
132
- ifold: 'fold_val', # Supply clamp current
133
- delay: 'delay_val' # Supply power-up delay
134
- }
135
- se_pin_options1 = {
136
- vil: 'pin_supply * 0.25', # Input drive low
137
- vih: 'pin_supply * 0.75', # Input drive high
138
- vol: 'pin_supply * 0.45', # Output compare low
139
- voh: 'pin_supply * 0.55', # Output compare high
140
- vcl: 'vclamp_low', # Voltage clamp low
141
- vch: 'vclamp_low', # Voltage clamp high
142
- vt: 'pin_supply * 0.50', # Termination voltage
143
- voutlotyp: '0', #
144
- vouthityp: '0', #
145
- dmode: 'Largeswing-VT' # Driver mode (possibly ATE-specific)
146
- }
147
- se_pin_options2 = {
148
- vil: 'pin_supply * 0.10', # Input drive low
149
- vih: 'pin_supply * 0.90', # Input drive high
150
- vol: 'pin_supply * 0.50', # Output compare low
151
- voh: 'pin_supply * 0.50', # Output compare high
152
- vcl: 'vclamp_low', # Voltage clamp low
153
- vch: 'vclamp_low', # Voltage clamp high
154
- vt: 'pin_supply * 0.50', # Termination voltage
155
- voutlotyp: '0', #
156
- vouthityp: '0', #
157
- dmode: 'Largeswing-VT' # Driver mode (possibly ATE-specific)
158
- }
159
-
160
- # Define the Level objects that you want to use later to construct edgesets/timesets
161
- # * the interface puts these in 'level_collection'
162
- # FORMAT: level <level category>, <level options>
163
- pwr_level :pwr, pwr_options
164
- pin_level_se :pin_type1, se_pin_options1
165
- pin_level_se :pin_type2, se_pin_options2
166
-
167
- # Assign levels to the pins for levelset sheet ':func'
168
- # * assign all pins some default levels for starters...
169
- # * importing levelsets will automatically populate dc_specset variables contained within the equations
170
- # FORMAT: levelset <levelset sheet name>, pin: <pin_name>, level: <level_object>, es_sheet_pins: <array of pins>, spec_sheet: <AC specsheet name>
171
- levelset :func, pin: :vdd1, level: level_collection.pwr_group[:pwr], spec_sheet: :func, ls_sheet_pins: level_sheet_pins
172
- levelset :func, pin: :vdd2, level: level_collection.pwr_group[:pwr], spec_sheet: :func
173
- levelset :func, pin: :tclk, level: level_collection.pin_group[:pin_type1], spec_sheet: :func
174
- levelset :func, pin: :tms, level: level_collection.pin_group[:pin_type2], spec_sheet: :func
175
- levelset :func, pin: :tdi, level: level_collection.pin_group[:pin_type1], spec_sheet: :func
176
- levelset :func, pin: :tdo, level: level_collection.pin_group[:pin_type2], spec_sheet: :func
177
-
178
- # * now define a few more DC specs and values
179
- dc_specset :func, 'vdd_main_val', specset: :power_down_levels, min: { min: '0.1*V' }, nom: { typ: '0.2*V' }, max: { max: '0.3*V' }
180
- dc_specset :func, 'vdd_alt_val', specset: :power_down_levels, min: { min: '7*V' }, nom: { typ: '8*V' }, max: { max: '9*V' }
181
- dc_specset :func, 'current1', specset: :power_up_levels, min: { min: '1*mA' }, nom: { typ: '2*mA' }, max: { max: '3*mA' }
182
- dc_specset :func, 'voltage1', specset: :power_up_levels, min: { min: '4*mV' }, nom: { typ: '5*mV' }, max: { max: '6*mV' }
183
-
184
- # Define some global variables that will generate a Globals sheet
185
- global_spec :spec1, job: 'FT', value: '17', comment: 'entering spec1'
186
- global_spec :spec2, job: 'WT', value: '18', comment: 'entering spec2'
187
- global_spec :spec3, job: 'FT1', value: '19', comment: 'entering spec3'
188
- global_spec :spec4, job: 'WT1', value: '20', comment: 'entering spec4'
189
-
190
- # Collect all the currently generated sheets and include them in the FT job
191
- job_def 'FT'
192
-
193
- # Add a couple additional flow sheets to define the WT job
194
- job_def 'WT', flows: ['WT_flow1', 'WT_flow2']
195
-
196
- # Add a couple of files to the references sheet
197
- reference '.\inc\file1.xla', comment: 'Block1'
198
- reference '.\inc\file2.xla', comment: 'Block2'
199
- end
1
+ Resources.create interface: 'OrigenTesters::Test::Interface' do
2
+
3
+ pinmap :pinmap_test
4
+
5
+ timing_sheet_pins = [:tclk, :tdi, :tdo, :tms]
6
+
7
+ # Define some edge options so we can define some Edge objects
8
+ default_options = {
9
+ d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
10
+ d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
11
+ d0_edge: 'd1_edge', # time at which the input drive is turned on
12
+ d1_edge: 'clkre + 0.25 * cycle', # time of the initial data drive edge
13
+ d2_edge: '', # time of the return format data drive edge
14
+ d3_edge: '', # time at which the input drive is turned off
15
+ c_mode: 'Edge', # output compare mode
16
+ c1_edge: 'clkre + 0.75 * cycle', # time of the initial output compare edge
17
+ c2_edge: '', # time of the final output compare edge (window compare)
18
+ t_res: 'Machine', # timing resolution (possibly ATE-specific)
19
+ clk_per: '' # clock period equation - for use with MCG
20
+ }
21
+ clock_options = {
22
+ d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
23
+ d_fmt: 'RL', # drive data format (NR, RL, RH, etc.)
24
+ d0_edge: 'd1_edge', # time at which the input drive is turned on
25
+ d1_edge: 'clkre', # time of the initial data drive edge
26
+ d2_edge: 'clkre + 0.5 * cycle', # time of the return format data drive edge
27
+ d3_edge: '', # time at which the input drive is turned off
28
+ c_mode: 'Off', # output compare mode
29
+ c1_edge: '', # time of the initial output compare edge
30
+ c2_edge: '', # time of the final output compare edge (window compare)
31
+ t_res: 'Machine', # timing resolution (possibly ATE-specific)
32
+ clk_per: 'mcg_cycle' # clock period equation - for use with MCG
33
+ }
34
+ input_options = {
35
+ d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
36
+ d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
37
+ d0_edge: 'd1_edge', # time at which the input drive is turned on
38
+ d1_edge: 'clkre - jtag_su', # time of the initial data drive edge
39
+ d2_edge: '', # time of the return format data drive edge
40
+ d3_edge: '', # time at which the input drive is turned off
41
+ c_mode: 'Off', # output compare mode
42
+ c1_edge: '', # time of the initial output compare edge
43
+ c2_edge: '', # time of the final output compare edge (window compare)
44
+ t_res: 'Machine', # timing resolution (possibly ATE-specific)
45
+ clk_per: '' # clock period equation - for use with MCG
46
+ }
47
+ output_options = {
48
+ d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
49
+ d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
50
+ d0_edge: 'd1_edge', # time at which the input drive is turned on
51
+ d1_edge: 'clkre', # time of the initial data drive edge
52
+ d2_edge: '', # time of the return format data drive edge
53
+ d3_edge: '', # time at which the input drive is turned off
54
+ c_mode: 'Edge', # output compare mode
55
+ c1_edge: 'clkre + jtag_ov', # time of the initial output compare edge
56
+ c2_edge: '', # time of the final output compare edge (window compare)
57
+ t_res: 'Machine', # timing resolution (possibly ATE-specific)
58
+ clk_per: '' # clock period equation - for use with MCG
59
+ }
60
+
61
+ # Define the Edge objects that you want to use later to construct edgesets/timesets
62
+ # * the interface puts these in 'edge_collection'
63
+ # FORMAT: edge <timing category>, <pin_name/type>, <edge options>
64
+ edge :default, :default, default_options
65
+ edge :clock, :clk, clock_options
66
+ edge :input, :default, input_options
67
+ edge :output, :default, output_options
68
+
69
+ # Assign edges to the pins for edgeset sheet ':func'
70
+ # * assign all pins some default timing for starters...
71
+ # * importing edgesets will automatically populate ac_specset variables contained within the equations
72
+ # FORMAT: edgeset <edgeset sheet name>, edgeset: <edgeset>, pin: <pin_name>, edge: <edge_object>, es_sheet_pins: <array of pins>, spec_sheet: <AC specsheet name>
73
+ edgeset :func, edgeset: :default, pin: :tclk, edge: edge_collection.edges[:default][:default], spec_sheet: :func, es_sheet_pins: timing_sheet_pins
74
+ edgeset :func, edgeset: :default, pin: :tms, edge: edge_collection.edges[:default][:default], spec_sheet: :func
75
+ edgeset :func, edgeset: :default, pin: :tdi, edge: edge_collection.edges[:default][:default], spec_sheet: :func
76
+ edgeset :func, edgeset: :default, pin: :tdo, edge: edge_collection.edges[:default][:default], spec_sheet: :func
77
+ # * now assign pins some more meaningful timing for JTAG operation...
78
+ edgeset :func, edgeset: :es_jtag, pin: :tclk, edge: edge_collection.edges[:clock][:clk], spec_sheet: :func, es_sheet_pins: timing_sheet_pins
79
+ edgeset :func, edgeset: :es_jtag, pin: :tms, edge: edge_collection.edges[:input][:default], spec_sheet: :func
80
+ edgeset :func, edgeset: :es_jtag, pin: :tdi, edge: edge_collection.edges[:input][:default], spec_sheet: :func
81
+ edgeset :func, edgeset: :es_jtag, pin: :tdo, edge: edge_collection.edges[:output][:default], spec_sheet: :func
82
+
83
+ # Assign edges to the pins for timeset sheet ':func'
84
+ # * first a :default timeset
85
+ # FORMAT: timeset <timset sheet name>, timeset: <timeset>, pin: <pin_name>, eset: <edgeset name>, ts_sheet_pins: <array of pins>
86
+ timeset :func, timeset: :default, pin: :tclk, eset: :default, ts_sheet_pins: timing_sheet_pins
87
+ timeset :func, timeset: :default, pin: :tms, eset: :default
88
+ timeset :func, timeset: :default, pin: :tdi, eset: :default
89
+ timeset :func, timeset: :default, pin: :tdo, eset: :default
90
+ # * now a :jtag timeset
91
+ timeset :func, timeset: :jtag, pin: :tclk, eset: :es_jtag, ts_sheet_pins: timing_sheet_pins
92
+ timeset :func, timeset: :jtag, pin: :tms, eset: :es_jtag
93
+ timeset :func, timeset: :jtag, pin: :tdi, eset: :es_jtag
94
+ timeset :func, timeset: :jtag, pin: :tdo, eset: :es_jtag
95
+
96
+ # Now repeat the timing generation process to create a timeset_basic sheet
97
+ edgeset :func_tsb, edgeset: :default, pin: :tclk, edge: edge_collection.edges[:default][:default], spec_sheet: :func, es_sheet_pins: timing_sheet_pins, timeset_basic: true
98
+ edgeset :func_tsb, edgeset: :default, pin: :tms, edge: edge_collection.edges[:default][:default], spec_sheet: :func
99
+ edgeset :func_tsb, edgeset: :default, pin: :tdi, edge: edge_collection.edges[:default][:default], spec_sheet: :func
100
+ edgeset :func_tsb, edgeset: :default, pin: :tdo, edge: edge_collection.edges[:default][:default], spec_sheet: :func
101
+ # * now assign pins some more meaningful timing for JTAG operation...
102
+ edgeset :func_tsb, edgeset: :es_jtag, pin: :tclk, edge: edge_collection.edges[:clock][:clk], spec_sheet: :func, es_sheet_pins: timing_sheet_pins, timeset_basic: true
103
+ edgeset :func_tsb, edgeset: :es_jtag, pin: :tms, edge: edge_collection.edges[:input][:default], spec_sheet: :func
104
+ edgeset :func_tsb, edgeset: :es_jtag, pin: :tdi, edge: edge_collection.edges[:input][:default], spec_sheet: :func
105
+ edgeset :func_tsb, edgeset: :es_jtag, pin: :tdo, edge: edge_collection.edges[:output][:default], spec_sheet: :func
106
+
107
+ # Assign edges to the pins for timeset sheet ':func'
108
+ # * first a :default timeset
109
+ # FORMAT: timeset <timset sheet name>, timeset: <timeset>, pin: <pin_name>, eset: <edgeset name>, ts_sheet_pins: <array of pins>
110
+ timeset :func_tsb, timeset: :default, pin: :tclk, eset: :default, ts_sheet_pins: timing_sheet_pins, timeset_basic: true
111
+ timeset :func_tsb, timeset: :default, pin: :tms, eset: :default
112
+ timeset :func_tsb, timeset: :default, pin: :tdi, eset: :default
113
+ timeset :func_tsb, timeset: :default, pin: :tdo, eset: :default
114
+ # * now a :jtag timeset
115
+ timeset :func_tsb, timeset: :jtag, pin: :tclk, eset: :es_jtag, ts_sheet_pins: timing_sheet_pins, timeset_basic: true
116
+ timeset :func_tsb, timeset: :jtag, pin: :tms, eset: :es_jtag
117
+ timeset :func_tsb, timeset: :jtag, pin: :tdi, eset: :es_jtag
118
+ timeset :func_tsb, timeset: :jtag, pin: :tdo, eset: :es_jtag
119
+
120
+ # * now define a few more AC specs and values
121
+ ac_specset :func, 'cycle', specset: :func_100MHz, nom: { min: '9*ns', typ: '10*ns', max: '11*ns' }
122
+ ac_specset :func, 'cycle', specset: :func_125MHz, nom: { min: '7*ns', typ: '8*ns', max: '9*ns' }
123
+ ac_specset :func, 'new_var1', specset: :func_100MHz, nom: { min: '1*ns', typ: '2*ns', max: '3*ns' }
124
+ ac_specset :func, 'new_var2', specset: :func_125MHz, nom: { min: '4*ns', typ: '5*ns', max: '6*ns' }
125
+
126
+ level_sheet_pins = [:vdd1, :vdd2, :tclk, :tdi, :tdo, :tms]
127
+
128
+ # Define some level options so we can define some Level objects
129
+ pwr_options = {
130
+ vmain: 'vdd_main_val', # Main supply voltage
131
+ valt: 'vdd_alt_val', # Alternate supply voltage
132
+ ifold: 'fold_val', # Supply clamp current
133
+ delay: 'delay_val' # Supply power-up delay
134
+ }
135
+ se_pin_options1 = {
136
+ vil: 'pin_supply * 0.25', # Input drive low
137
+ vih: 'pin_supply * 0.75', # Input drive high
138
+ vol: 'pin_supply * 0.45', # Output compare low
139
+ voh: 'pin_supply * 0.55', # Output compare high
140
+ vcl: 'vclamp_low', # Voltage clamp low
141
+ vch: 'vclamp_low', # Voltage clamp high
142
+ vt: 'pin_supply * 0.50', # Termination voltage
143
+ voutlotyp: '0', #
144
+ vouthityp: '0', #
145
+ dmode: 'Largeswing-VT' # Driver mode (possibly ATE-specific)
146
+ }
147
+ se_pin_options2 = {
148
+ vil: 'pin_supply * 0.10', # Input drive low
149
+ vih: 'pin_supply * 0.90', # Input drive high
150
+ vol: 'pin_supply * 0.50', # Output compare low
151
+ voh: 'pin_supply * 0.50', # Output compare high
152
+ vcl: 'vclamp_low', # Voltage clamp low
153
+ vch: 'vclamp_low', # Voltage clamp high
154
+ vt: 'pin_supply * 0.50', # Termination voltage
155
+ voutlotyp: '0', #
156
+ vouthityp: '0', #
157
+ dmode: 'Largeswing-VT' # Driver mode (possibly ATE-specific)
158
+ }
159
+
160
+ # Define the Level objects that you want to use later to construct edgesets/timesets
161
+ # * the interface puts these in 'level_collection'
162
+ # FORMAT: level <level category>, <level options>
163
+ pwr_level :pwr, pwr_options
164
+ pin_level_se :pin_type1, se_pin_options1
165
+ pin_level_se :pin_type2, se_pin_options2
166
+
167
+ # Assign levels to the pins for levelset sheet ':func'
168
+ # * assign all pins some default levels for starters...
169
+ # * importing levelsets will automatically populate dc_specset variables contained within the equations
170
+ # FORMAT: levelset <levelset sheet name>, pin: <pin_name>, level: <level_object>, es_sheet_pins: <array of pins>, spec_sheet: <AC specsheet name>
171
+ levelset :func, pin: :vdd1, level: level_collection.pwr_group[:pwr], spec_sheet: :func, ls_sheet_pins: level_sheet_pins
172
+ levelset :func, pin: :vdd2, level: level_collection.pwr_group[:pwr], spec_sheet: :func
173
+ levelset :func, pin: :tclk, level: level_collection.pin_group[:pin_type1], spec_sheet: :func
174
+ levelset :func, pin: :tms, level: level_collection.pin_group[:pin_type2], spec_sheet: :func
175
+ levelset :func, pin: :tdi, level: level_collection.pin_group[:pin_type1], spec_sheet: :func
176
+ levelset :func, pin: :tdo, level: level_collection.pin_group[:pin_type2], spec_sheet: :func
177
+
178
+ # * now define a few more DC specs and values
179
+ dc_specset :func, 'vdd_main_val', specset: :power_down_levels, min: { min: '0.1*V' }, nom: { typ: '0.2*V' }, max: { max: '0.3*V' }
180
+ dc_specset :func, 'vdd_alt_val', specset: :power_down_levels, min: { min: '7*V' }, nom: { typ: '8*V' }, max: { max: '9*V' }
181
+ dc_specset :func, 'current1', specset: :power_up_levels, min: { min: '1*mA' }, nom: { typ: '2*mA' }, max: { max: '3*mA' }
182
+ dc_specset :func, 'voltage1', specset: :power_up_levels, min: { min: '4*mV' }, nom: { typ: '5*mV' }, max: { max: '6*mV' }
183
+
184
+ # Define some global variables that will generate a Globals sheet
185
+ global_spec :spec1, job: 'FT', value: '17', comment: 'entering spec1'
186
+ global_spec :spec2, job: 'WT', value: '18', comment: 'entering spec2'
187
+ global_spec :spec3, job: 'FT1', value: '19', comment: 'entering spec3'
188
+ global_spec :spec4, job: 'WT1', value: '20', comment: 'entering spec4'
189
+
190
+ # Collect all the currently generated sheets and include them in the FT job
191
+ job_def 'FT'
192
+
193
+ # Add a couple additional flow sheets to define the WT job
194
+ job_def 'WT', flows: ['WT_flow1', 'WT_flow2']
195
+
196
+ # Add a couple of files to the references sheet
197
+ reference '.\inc\file1.xla', comment: 'Block1'
198
+ reference '.\inc\file2.xla', comment: 'Block2'
199
+ end