origen_testers 0.13.1 → 0.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. checksums.yaml +4 -4
  2. data/config/application.rb +151 -151
  3. data/config/boot.rb +13 -13
  4. data/config/commands.rb +85 -86
  5. data/config/users.rb +18 -18
  6. data/config/version.rb +8 -8
  7. data/lib/commands/build.rb +69 -69
  8. data/lib/commands/run.rb +48 -48
  9. data/lib/origen_testers.rb +47 -47
  10. data/lib/origen_testers/api.rb +381 -381
  11. data/lib/origen_testers/basic_test_setups.rb +105 -105
  12. data/lib/origen_testers/callback_handlers.rb +59 -59
  13. data/lib/origen_testers/command_based_tester.rb +45 -45
  14. data/lib/origen_testers/flow.rb +382 -382
  15. data/lib/origen_testers/generator.rb +283 -283
  16. data/lib/origen_testers/generator/identity_map.rb +23 -23
  17. data/lib/origen_testers/generator/placeholder.rb +11 -11
  18. data/lib/origen_testers/generator/test_numberer.rb +23 -23
  19. data/lib/origen_testers/igxl_based_tester.rb +12 -12
  20. data/lib/origen_testers/igxl_based_tester/base.rb +1100 -1099
  21. data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -79
  22. data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +169 -169
  23. data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -98
  24. data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -60
  25. data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -24
  26. data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -39
  27. data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +130 -130
  28. data/lib/origen_testers/igxl_based_tester/base/flow.rb +460 -460
  29. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +276 -276
  30. data/lib/origen_testers/igxl_based_tester/base/generator.rb +607 -607
  31. data/lib/origen_testers/igxl_based_tester/base/global_specs.rb +83 -83
  32. data/lib/origen_testers/igxl_based_tester/base/job.rb +75 -75
  33. data/lib/origen_testers/igxl_based_tester/base/jobs.rb +44 -44
  34. data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -59
  35. data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -39
  36. data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -31
  37. data/lib/origen_testers/igxl_based_tester/base/levelset.rb +110 -110
  38. data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -109
  39. data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -38
  40. data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -68
  41. data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -56
  42. data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -38
  43. data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -68
  44. data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -56
  45. data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -38
  46. data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -93
  47. data/lib/origen_testers/igxl_based_tester/base/references.rb +25 -25
  48. data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +322 -322
  49. data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +66 -66
  50. data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +212 -212
  51. data/lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb +37 -37
  52. data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -37
  53. data/lib/origen_testers/igxl_based_tester/base/timesets.rb +49 -49
  54. data/lib/origen_testers/igxl_based_tester/base/timesets_basic.rb +49 -49
  55. data/lib/origen_testers/igxl_based_tester/files.rb +43 -43
  56. data/lib/origen_testers/igxl_based_tester/j750.rb +269 -269
  57. data/lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb +32 -32
  58. data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -10
  59. data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -19
  60. data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -19
  61. data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -9
  62. data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -10
  63. data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -9
  64. data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -18
  65. data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -10
  66. data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -9
  67. data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -18
  68. data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -10
  69. data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +746 -746
  70. data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -9
  71. data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -10
  72. data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -34
  73. data/lib/origen_testers/igxl_based_tester/j750_hpt/custom_test_instance.rb +32 -32
  74. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -9
  75. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -9
  76. data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -19
  77. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -9
  78. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -9
  79. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -9
  80. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -9
  81. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -9
  82. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -9
  83. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -9
  84. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -9
  85. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +599 -599
  86. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -9
  87. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -9
  88. data/lib/origen_testers/igxl_based_tester/parser.rb +102 -102
  89. data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -9
  90. data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -33
  91. data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -48
  92. data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -339
  93. data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -109
  94. data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -203
  95. data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -21
  96. data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -92
  97. data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -31
  98. data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +420 -420
  99. data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -24
  100. data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -13
  101. data/lib/origen_testers/igxl_based_tester/ultraflex.rb +798 -798
  102. data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -10
  103. data/lib/origen_testers/igxl_based_tester/ultraflex/ate_hardware.rb +949 -949
  104. data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +36 -36
  105. data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -10
  106. data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -9
  107. data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -9
  108. data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -9
  109. data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -10
  110. data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +158 -158
  111. data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -19
  112. data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -19
  113. data/lib/origen_testers/igxl_based_tester/ultraflex/global_specs.rb +10 -10
  114. data/lib/origen_testers/igxl_based_tester/ultraflex/job.rb +9 -9
  115. data/lib/origen_testers/igxl_based_tester/ultraflex/jobs.rb +10 -10
  116. data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -9
  117. data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -9
  118. data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -9
  119. data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -10
  120. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -9
  121. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -10
  122. data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -9
  123. data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -18
  124. data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -10
  125. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -9
  126. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -18
  127. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -10
  128. data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -10
  129. data/lib/origen_testers/igxl_based_tester/ultraflex/references.rb +10 -10
  130. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +0 -0
  131. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +0 -0
  132. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +0 -0
  133. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb +0 -0
  134. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb +0 -0
  135. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +0 -0
  136. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +0 -0
  137. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb +0 -0
  138. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +0 -0
  139. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb +0 -0
  140. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +315 -315
  141. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -9
  142. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -10
  143. data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -9
  144. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -10
  145. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets_basic.rb +10 -10
  146. data/lib/origen_testers/interface.rb +345 -324
  147. data/lib/origen_testers/memory_style.rb +77 -77
  148. data/lib/origen_testers/no_interface.rb +7 -7
  149. data/lib/origen_testers/origen_ext/application/runner.rb +25 -25
  150. data/lib/origen_testers/origen_ext/generator.rb +54 -54
  151. data/lib/origen_testers/origen_ext/generator/flow.rb +91 -77
  152. data/lib/origen_testers/origen_ext/generator/resources.rb +21 -21
  153. data/lib/origen_testers/origen_ext/pins/pin.rb +78 -78
  154. data/lib/origen_testers/origen_ext/pins/pin_collection.rb +84 -84
  155. data/lib/origen_testers/parser.rb +22 -22
  156. data/lib/origen_testers/parser/description_lookup.rb +62 -62
  157. data/lib/origen_testers/parser/searchable_array.rb +30 -30
  158. data/lib/origen_testers/parser/searchable_hash.rb +30 -30
  159. data/lib/origen_testers/pattern_compilers.rb +116 -116
  160. data/lib/origen_testers/pattern_compilers/assembler.rb +88 -88
  161. data/lib/origen_testers/pattern_compilers/job.rb +96 -96
  162. data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -599
  163. data/lib/origen_testers/program_generators.rb +62 -62
  164. data/lib/origen_testers/smartest_based_tester.rb +8 -8
  165. data/lib/origen_testers/smartest_based_tester/base.rb +576 -567
  166. data/lib/origen_testers/smartest_based_tester/base/flow.rb +296 -291
  167. data/lib/origen_testers/smartest_based_tester/base/generator.rb +207 -194
  168. data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +32 -32
  169. data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +69 -69
  170. data/lib/origen_testers/smartest_based_tester/base/processors.rb +16 -16
  171. data/lib/origen_testers/smartest_based_tester/base/processors/adjacent_if_combiner.rb +106 -106
  172. data/lib/origen_testers/smartest_based_tester/base/processors/continue_implementer.rb +39 -39
  173. data/lib/origen_testers/smartest_based_tester/base/processors/empty_branch_cleaner.rb +21 -21
  174. data/lib/origen_testers/smartest_based_tester/base/processors/extract_run_flag_table.rb +33 -33
  175. data/lib/origen_testers/smartest_based_tester/base/processors/extract_set_variables.rb +22 -22
  176. data/lib/origen_testers/smartest_based_tester/base/processors/flag_optimizer.rb +188 -188
  177. data/lib/origen_testers/smartest_based_tester/base/processors/if_ran_cleaner.rb +34 -34
  178. data/lib/origen_testers/smartest_based_tester/base/test_method.rb +178 -164
  179. data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +77 -73
  180. data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -33
  181. data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -38
  182. data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -19
  183. data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -147
  184. data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +65 -65
  185. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +208 -193
  186. data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -54
  187. data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +38 -38
  188. data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -8
  189. data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -89
  190. data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +181 -181
  191. data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -54
  192. data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -10
  193. data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -19
  194. data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -10
  195. data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -10
  196. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -17
  197. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -13
  198. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.tf.erb +236 -214
  199. data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +48 -48
  200. data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -9
  201. data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -9
  202. data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -9
  203. data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -9
  204. data/lib/origen_testers/smartest_based_tester/v93k/variables_file.rb +10 -10
  205. data/lib/origen_testers/test/basic_interface.rb +17 -17
  206. data/lib/origen_testers/test/block.rb +21 -21
  207. data/lib/origen_testers/test/custom_test_interface.rb +111 -111
  208. data/lib/origen_testers/test/dut.rb +295 -295
  209. data/lib/origen_testers/test/dut2.rb +76 -76
  210. data/lib/origen_testers/test/dut3.rb +244 -244
  211. data/lib/origen_testers/test/interface.rb +503 -503
  212. data/lib/origen_testers/test/nvm.rb +94 -94
  213. data/lib/origen_testers/timing.rb +368 -368
  214. data/lib/origen_testers/vector.rb +207 -207
  215. data/lib/origen_testers/vector_based_tester.rb +41 -41
  216. data/lib/origen_testers/vector_generator.rb +655 -655
  217. data/lib/origen_testers/vector_pipeline.rb +302 -302
  218. data/pattern/bitmap.rb +7 -7
  219. data/pattern/dc_instr.rb +7 -7
  220. data/pattern/delay.rb +7 -7
  221. data/pattern/freq_counter.rb +6 -6
  222. data/pattern/mem_test.rb +8 -8
  223. data/pattern/multi_vector.rb +122 -122
  224. data/pattern/multi_vector_plus1.rb +125 -125
  225. data/pattern/nvm/j750/add_late_pins.rb +3 -3
  226. data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -8
  227. data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -8
  228. data/pattern/nvm/j750/j750_halt.rb +159 -159
  229. data/pattern/nvm/j750/j750_workout.rb +209 -209
  230. data/pattern/nvm/j750/timing.rb +73 -73
  231. data/pattern/read_write_reg.rb +61 -61
  232. data/pattern/reset.rb +4 -4
  233. data/pattern/subroutines.rb +69 -69
  234. data/pattern/tester_overlay.rb +61 -52
  235. data/pattern/tester_store.rb +28 -28
  236. data/program/_additional_erase.rb +7 -7
  237. data/program/_efa_resources.rb +7 -7
  238. data/program/_erase.rb +25 -25
  239. data/program/_erase_vfy.rb +5 -5
  240. data/program/_iv_resources.rb +10 -10
  241. data/program/basic_interface.rb +5 -5
  242. data/program/components/_prb1_main.rb +222 -222
  243. data/program/components/_temp.rb +6 -6
  244. data/program/custom_tests.rb +10 -10
  245. data/program/flow_control.rb +422 -422
  246. data/program/prb1.rb +11 -11
  247. data/program/prb1_resources.rb +28 -28
  248. data/program/prb2.rb +27 -27
  249. data/program/test.rb +29 -29
  250. data/program/uflex_resources.rb +199 -199
  251. data/templates/example.txt.erb +53 -53
  252. data/templates/j750/program_sheet.txt.erb +9 -9
  253. data/templates/manifest/v93k.yaml.erb +22 -22
  254. data/templates/web/index.md.erb +51 -51
  255. data/templates/web/layouts/_basic.html.erb +15 -15
  256. data/templates/web/partials/_navbar.html.erb +22 -22
  257. data/templates/web/release_notes.md.erb +5 -5
  258. metadata +2 -2
@@ -1,98 +1,98 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class Base
4
- class DCSpecsets
5
- include ::OrigenTesters::Generator
6
-
7
- attr_accessor :dc_specs
8
- attr_accessor :dc_specsets
9
-
10
- OUTPUT_PREFIX = 'SpecsDC'
11
- # OUTPUT_POSTFIX = 'SpecsDC'
12
-
13
- def initialize # :nodoc:
14
- ## Hash Autovivification
15
- l = ->(h, k) { h[k] = Hash.new(&l) }
16
-
17
- @dc_specs = []
18
- @dc_specsets = Hash.new(&l)
19
- end
20
-
21
- # Assigns a DC spec value object to the given variable for this specset
22
- # The attrs hash is expected to defined as follows:
23
- # attrs = {
24
- # specset: :specset_name, # if not defined, specset = :default
25
- # # Spec selectors that contain both the scope and value of the spec
26
- # nom: { typ: 1.8 }, # typ is an example of the UFlex scope, nom is the spec selector
27
- # min: { min: 1.7 }, # Users can defined any number of selectors in this fashion
28
- # max: { max: 1.9 }
29
- # }
30
- def add(spec, attrs = {})
31
- attrs = {
32
- specset: :default
33
- }.merge(attrs)
34
-
35
- specset = attrs.delete(:specset)
36
-
37
- @dc_specs << spec unless @dc_specs.include?(spec)
38
-
39
- attrs.each do |selector, value|
40
- @dc_specsets[specset][spec][selector] = value
41
- end
42
- end
43
-
44
- # Prepare the spec information for file output
45
- def format_uflex_dc_spec(data, options = {})
46
- options = {
47
- spec: nil
48
- }.update(options)
49
-
50
- case options[:spec]
51
- when /(voh|vol|vt|vcl|vch|vdd)/i
52
- spec_type = 'volt'
53
- when /(ioh|iol)/i
54
- spec_type = 'curr'
55
- else
56
- spec_type = nil
57
- end
58
-
59
- case data
60
- when NilClass
61
- data_new = 0
62
- when Fixnum, Float
63
- case
64
- when data == 0
65
- data_new = data.to_s
66
- when data.abs < 1e-6
67
- data_new = (data * 1_000_000_000).round(4).to_s + '*nV' if spec_type == 'volt'
68
- data_new = (data * 1_000_000_000).round(4).to_s + '*nA' if spec_type == 'curr'
69
- data_new = data.to_s if spec_type.nil?
70
- when data.abs < 1e-3
71
- data_new = (data * 1_000_000).round(4).to_s + '*uV' if spec_type == 'volt'
72
- data_new = (data * 1_000_000).round(4).to_s + '*uA' if spec_type == 'curr'
73
- data_new = data.to_s if spec_type.nil?
74
- when data.abs < 1
75
- data_new = data.to_s + '*V' if spec_type == 'volt'
76
- data_new = (data * 1_000).round(4).to_s + '*mA' if spec_type == 'curr'
77
- data_new = data.to_s if spec_type.nil?
78
- else
79
- data_new = data.to_s + '*V' if spec_type == 'volt'
80
- data_new = data.to_s + '*A' if spec_type == 'curr'
81
- data_new = data.to_s if spec_type.nil?
82
- end
83
- data_new = data_new.gsub(/^/, '=')
84
- when String
85
- data_new = data.gsub(/^/, '=').gsub(/(\W)([a-zA-Z])/, '\1_\2')
86
- # Remove underscores from unit designations
87
- data_new.gsub!(/(\W)_(nV|uV|mV|V|nA|uA|mA|A)(\W)/i, '\1\2\3')
88
- data_new.gsub!(/(\W)_(nV|uV|mV|V|nA|uA|mA|A)$/i, '\1\2')
89
- else
90
- Origen.log.error "Unknown class type (#{data.class}) for spec value: #{data}"
91
- fail
92
- end
93
- data_new
94
- end
95
- end
96
- end
97
- end
98
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class DCSpecsets
5
+ include ::OrigenTesters::Generator
6
+
7
+ attr_accessor :dc_specs
8
+ attr_accessor :dc_specsets
9
+
10
+ OUTPUT_PREFIX = 'SpecsDC'
11
+ # OUTPUT_POSTFIX = 'SpecsDC'
12
+
13
+ def initialize # :nodoc:
14
+ ## Hash Autovivification
15
+ l = ->(h, k) { h[k] = Hash.new(&l) }
16
+
17
+ @dc_specs = []
18
+ @dc_specsets = Hash.new(&l)
19
+ end
20
+
21
+ # Assigns a DC spec value object to the given variable for this specset
22
+ # The attrs hash is expected to defined as follows:
23
+ # attrs = {
24
+ # specset: :specset_name, # if not defined, specset = :default
25
+ # # Spec selectors that contain both the scope and value of the spec
26
+ # nom: { typ: 1.8 }, # typ is an example of the UFlex scope, nom is the spec selector
27
+ # min: { min: 1.7 }, # Users can defined any number of selectors in this fashion
28
+ # max: { max: 1.9 }
29
+ # }
30
+ def add(spec, attrs = {})
31
+ attrs = {
32
+ specset: :default
33
+ }.merge(attrs)
34
+
35
+ specset = attrs.delete(:specset)
36
+
37
+ @dc_specs << spec unless @dc_specs.include?(spec)
38
+
39
+ attrs.each do |selector, value|
40
+ @dc_specsets[specset][spec][selector] = value
41
+ end
42
+ end
43
+
44
+ # Prepare the spec information for file output
45
+ def format_uflex_dc_spec(data, options = {})
46
+ options = {
47
+ spec: nil
48
+ }.update(options)
49
+
50
+ case options[:spec]
51
+ when /(voh|vol|vt|vcl|vch|vdd)/i
52
+ spec_type = 'volt'
53
+ when /(ioh|iol)/i
54
+ spec_type = 'curr'
55
+ else
56
+ spec_type = nil
57
+ end
58
+
59
+ case data
60
+ when NilClass
61
+ data_new = 0
62
+ when Fixnum, Float
63
+ case
64
+ when data == 0
65
+ data_new = data.to_s
66
+ when data.abs < 1e-6
67
+ data_new = (data * 1_000_000_000).round(4).to_s + '*nV' if spec_type == 'volt'
68
+ data_new = (data * 1_000_000_000).round(4).to_s + '*nA' if spec_type == 'curr'
69
+ data_new = data.to_s if spec_type.nil?
70
+ when data.abs < 1e-3
71
+ data_new = (data * 1_000_000).round(4).to_s + '*uV' if spec_type == 'volt'
72
+ data_new = (data * 1_000_000).round(4).to_s + '*uA' if spec_type == 'curr'
73
+ data_new = data.to_s if spec_type.nil?
74
+ when data.abs < 1
75
+ data_new = data.to_s + '*V' if spec_type == 'volt'
76
+ data_new = (data * 1_000).round(4).to_s + '*mA' if spec_type == 'curr'
77
+ data_new = data.to_s if spec_type.nil?
78
+ else
79
+ data_new = data.to_s + '*V' if spec_type == 'volt'
80
+ data_new = data.to_s + '*A' if spec_type == 'curr'
81
+ data_new = data.to_s if spec_type.nil?
82
+ end
83
+ data_new = data_new.gsub(/^/, '=')
84
+ when String
85
+ data_new = data.gsub(/^/, '=').gsub(/(\W)([a-zA-Z])/, '\1_\2')
86
+ # Remove underscores from unit designations
87
+ data_new.gsub!(/(\W)_(nV|uV|mV|V|nA|uA|mA|A)(\W)/i, '\1\2\3')
88
+ data_new.gsub!(/(\W)_(nV|uV|mV|V|nA|uA|mA|A)$/i, '\1\2')
89
+ else
90
+ Origen.log.error "Unknown class type (#{data.class}) for spec value: #{data}"
91
+ fail
92
+ end
93
+ data_new
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -1,60 +1,60 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class Base
4
- class Edge
5
- attr_accessor :d_src, :d_fmt, :d0_edge, :d1_edge, :d2_edge, :d3_edge # Input pin timing information
6
- attr_accessor :c_mode, :c1_edge, :c2_edge # Output pin timing information
7
- attr_accessor :t_res, :clk_per
8
-
9
- def initialize(options = {}) # :nodoc:
10
- options = {
11
- d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
12
- d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
13
- d0_edge: '', # time at which the input drive is turned on
14
- d1_edge: '', # time of the initial data drive edge
15
- d2_edge: '', # time of the return format data drive edge
16
- d3_edge: '', # time at which the input drive is turned off
17
- c_mode: 'Edge', # output compare mode
18
- c1_edge: '', # time of the initial output compare edge
19
- c2_edge: '', # time of the final output compare edge (window compare)
20
- t_res: 'Machine', # timing resolution (possibly ATE-specific)
21
- clk_per: '' # clock period equation - for use with MCG
22
- }.merge(options)
23
- @d_src = options[:d_src]
24
- @d_fmt = options[:d_fmt]
25
- @d0_edge = options[:d0_edge]
26
- @d1_edge = options[:d1_edge]
27
- @d2_edge = options[:d2_edge]
28
- @d3_edge = options[:d3_edge]
29
- @c_mode = options[:c_mode]
30
- @c1_edge = options[:c1_edge]
31
- @c2_edge = options[:c2_edge]
32
- @t_res = options[:t_res]
33
- @clk_per = options[:clk_per]
34
- end
35
-
36
- def ==(edge)
37
- if edge.is_a? Edge
38
- d_src == edge.d_src &&
39
- d_fmt == edge.d_fmt &&
40
- d0_edge == edge.d0_edge &&
41
- d1_edge == edge.d1_edge &&
42
- d2_edge == edge.d2_edge &&
43
- d3_edge == edge.d3_edge &&
44
- c_mode == edge.c_mode &&
45
- c1_edge == edge.c1_edge &&
46
- c2_edge == edge.c2_edge &&
47
- t_res == edge.t_res &&
48
- clk_per == edge.clk_per
49
- else
50
- super
51
- end
52
- end
53
-
54
- def platform
55
- Origen.interface.platform
56
- end
57
- end
58
- end
59
- end
60
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class Edge
5
+ attr_accessor :d_src, :d_fmt, :d0_edge, :d1_edge, :d2_edge, :d3_edge # Input pin timing information
6
+ attr_accessor :c_mode, :c1_edge, :c2_edge # Output pin timing information
7
+ attr_accessor :t_res, :clk_per
8
+
9
+ def initialize(options = {}) # :nodoc:
10
+ options = {
11
+ d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
12
+ d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
13
+ d0_edge: '', # time at which the input drive is turned on
14
+ d1_edge: '', # time of the initial data drive edge
15
+ d2_edge: '', # time of the return format data drive edge
16
+ d3_edge: '', # time at which the input drive is turned off
17
+ c_mode: 'Edge', # output compare mode
18
+ c1_edge: '', # time of the initial output compare edge
19
+ c2_edge: '', # time of the final output compare edge (window compare)
20
+ t_res: 'Machine', # timing resolution (possibly ATE-specific)
21
+ clk_per: '' # clock period equation - for use with MCG
22
+ }.merge(options)
23
+ @d_src = options[:d_src]
24
+ @d_fmt = options[:d_fmt]
25
+ @d0_edge = options[:d0_edge]
26
+ @d1_edge = options[:d1_edge]
27
+ @d2_edge = options[:d2_edge]
28
+ @d3_edge = options[:d3_edge]
29
+ @c_mode = options[:c_mode]
30
+ @c1_edge = options[:c1_edge]
31
+ @c2_edge = options[:c2_edge]
32
+ @t_res = options[:t_res]
33
+ @clk_per = options[:clk_per]
34
+ end
35
+
36
+ def ==(edge)
37
+ if edge.is_a? Edge
38
+ d_src == edge.d_src &&
39
+ d_fmt == edge.d_fmt &&
40
+ d0_edge == edge.d0_edge &&
41
+ d1_edge == edge.d1_edge &&
42
+ d2_edge == edge.d2_edge &&
43
+ d3_edge == edge.d3_edge &&
44
+ c_mode == edge.c_mode &&
45
+ c1_edge == edge.c1_edge &&
46
+ c2_edge == edge.c2_edge &&
47
+ t_res == edge.t_res &&
48
+ clk_per == edge.clk_per
49
+ else
50
+ super
51
+ end
52
+ end
53
+
54
+ def platform
55
+ Origen.interface.platform
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,24 +1,24 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class Base
4
- class Edges
5
- include ::OrigenTesters::Generator
6
-
7
- attr_accessor :edges
8
-
9
- def initialize(options = {}) # :nodoc:
10
- @edges = Hash.new do |h, k|
11
- h[k] = {}
12
- end
13
- end
14
-
15
- # Defines a new Edge object for the category and pin name
16
- def add(grp, pin, options = {})
17
- grp = grp.to_sym unless grp.is_a? Symbol
18
- pin = pin.to_sym unless pin.is_a? Symbol
19
- edges[grp][pin] = platform::Edge.new(options)
20
- end
21
- end
22
- end
23
- end
24
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class Edges
5
+ include ::OrigenTesters::Generator
6
+
7
+ attr_accessor :edges
8
+
9
+ def initialize(options = {}) # :nodoc:
10
+ @edges = Hash.new do |h, k|
11
+ h[k] = {}
12
+ end
13
+ end
14
+
15
+ # Defines a new Edge object for the category and pin name
16
+ def add(grp, pin, options = {})
17
+ grp = grp.to_sym unless grp.is_a? Symbol
18
+ pin = pin.to_sym unless pin.is_a? Symbol
19
+ edges[grp][pin] = platform::Edge.new(options)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,39 +1,39 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class Base
4
- class Edgeset
5
- attr_accessor :period, :t_mode # Edgeset information
6
- attr_accessor :pins
7
- attr_accessor :spec_sheet
8
- attr_accessor :name
9
-
10
- def initialize(name, pin, edge, attrs = {}) # :nodoc:
11
- attrs = {
12
- period: '', # tester cycle duration
13
- t_mode: '', # timing mode (possibly ATE-specific)
14
- spec_sheet: 'default' # defines which specset sheet to put variables in (e.g. func, scan) when generating specset files
15
- }.merge(attrs)
16
- @period = attrs[:period]
17
- @t_mode = attrs[:t_mode]
18
- @spec_sheet = attrs[:spec_sheet]
19
- @pins = { pin => edge }
20
- self.name = name
21
- end
22
-
23
- # Assigns a timing edge object to the given pin for this edgeset
24
- def add_edge(pin, edge)
25
- if @pins.key?(pin)
26
- Origen.log.error "Pin #{pin} already exists in edgeset"
27
- fail
28
- else
29
- @pins[pin] = edge
30
- end
31
- end
32
-
33
- def platform
34
- Origen.interface.platform
35
- end
36
- end
37
- end
38
- end
39
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class Edgeset
5
+ attr_accessor :period, :t_mode # Edgeset information
6
+ attr_accessor :pins
7
+ attr_accessor :spec_sheet
8
+ attr_accessor :name
9
+
10
+ def initialize(name, pin, edge, attrs = {}) # :nodoc:
11
+ attrs = {
12
+ period: '', # tester cycle duration
13
+ t_mode: '', # timing mode (possibly ATE-specific)
14
+ spec_sheet: 'default' # defines which specset sheet to put variables in (e.g. func, scan) when generating specset files
15
+ }.merge(attrs)
16
+ @period = attrs[:period]
17
+ @t_mode = attrs[:t_mode]
18
+ @spec_sheet = attrs[:spec_sheet]
19
+ @pins = { pin => edge }
20
+ self.name = name
21
+ end
22
+
23
+ # Assigns a timing edge object to the given pin for this edgeset
24
+ def add_edge(pin, edge)
25
+ if @pins.key?(pin)
26
+ Origen.log.error "Pin #{pin} already exists in edgeset"
27
+ fail
28
+ else
29
+ @pins[pin] = edge
30
+ end
31
+ end
32
+
33
+ def platform
34
+ Origen.interface.platform
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,130 +1,130 @@
1
- module OrigenTesters
2
- module IGXLBasedTester
3
- class Base
4
- class Edgesets
5
- include ::OrigenTesters::Generator
6
-
7
- attr_accessor :es
8
- attr_accessor :es_sheet_pins
9
- attr_accessor :ts_basic
10
-
11
- OUTPUT_PREFIX = 'ES'
12
- # OUTPUT_POSTFIX = 'ES'
13
-
14
- def initialize(options = {}) # :nodoc:
15
- @es = {}
16
- @ts_basic = options[:timeset_basic]
17
- end
18
-
19
- def add(esname, pin, edge, options = {})
20
- esname = esname.to_sym unless esname.is_a? Symbol
21
- pin = pin.to_sym unless pin.is_a? Symbol
22
- @es.key?(esname) ? @es[esname].add_edge(pin, edge) : @es[esname] = platform::Edgeset.new(esname, pin, edge, options)
23
- @es_sheet_pins = options[:es_sheet_pins] unless @es_sheet_pins
24
- @es
25
- end
26
-
27
- def finalize(options = {})
28
- end
29
-
30
- # Populate an array of pins based on the pin or pingroup
31
- def get_pin_objects(grp)
32
- pins = []
33
- if Origen.top_level.pin(grp).is_a?(Origen::Pins::Pin) ||
34
- Origen.top_level.pin(grp).is_a?(Origen::Pins::FunctionProxy)
35
- pins << Origen.top_level.pin(grp)
36
- elsif Origen.top_level.pin(grp).is_a?(Origen::Pins::PinCollection)
37
- Origen.top_level.pin(grp).each do |pin|
38
- pins << pin
39
- end
40
- else
41
- Origen.log.error "Could not find pin class: #{grp} #{Origen.top_level.pin(grp).class}"
42
- end
43
- pins
44
- end
45
-
46
- # Equality check to compare full contents of edge object
47
- def edges_eql?(edge1, edge2)
48
- edge1 == edge2
49
- end
50
-
51
- # Globally modify text within the edge object
52
- def gsub_edges!(edge, old_val, new_val)
53
- edge.d_src = edge.d_src.gsub(/#{Regexp.escape(old_val)}/, new_val)
54
- edge.d_fmt = edge.d_fmt.gsub(/#{Regexp.escape(old_val)}/, new_val)
55
- edge.d0_edge = edge.d0_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
56
- edge.d1_edge = edge.d1_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
57
- edge.d2_edge = edge.d2_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
58
- edge.d3_edge = edge.d3_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
59
- edge.c_mode = edge.c_mode.gsub(/#{Regexp.escape(old_val)}/, new_val)
60
- edge.c1_edge = edge.c1_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
61
- edge.c2_edge = edge.c2_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
62
- edge.t_res = edge.t_res.gsub(/#{Regexp.escape(old_val)}/, new_val)
63
- edge.clk_per = edge.clk_per.gsub(/#{Regexp.escape(old_val)}/, new_val)
64
- end
65
-
66
- # Prepare the edge information for ES/TS file output
67
- def format_uflex_edge(data, line_cnt, options = {})
68
- options = {
69
- no_disable: false
70
- }.merge(options)
71
-
72
- if data !~ /^\s*$/
73
- data = data.gsub(/^/, '=')
74
- end
75
- data = data.gsub(/(\W)([a-zA-Z])/, '\1_\2')
76
-
77
- case data
78
- when /_d0_edge|_d_on/
79
- data = data.gsub(/_d0_edge|_d_on/, "F#{line_cnt}")
80
- when /_d1_edge|_d_data/
81
- data = data.gsub(/_d1_edge|_d_data/, "G#{line_cnt}")
82
- when /_d2_edge|_dret/
83
- data = data.gsub(/_d2_edge|_dret/, "H#{line_cnt}")
84
- when /_d3_edge|_d_off/
85
- data = data.gsub(/_d3_edge|_d_off/, "I#{line_cnt}")
86
- when /_c1_edge|_c_open/
87
- data = data.gsub(/_c1_edge|_c_open/, "K#{line_cnt}")
88
- when /_c2_edge|_c_close/
89
- data = data.gsub(/_c2_edge|_c_close/, "L#{line_cnt}")
90
- when /^\s*$/
91
- options[:no_disable] ? data = '' : data = 'disable'
92
- else
93
- data
94
- end
95
- end
96
-
97
- # Prepare the edge information for TSB file output
98
- def format_uflex_edge_tsb(data, line_cnt, options = {})
99
- options = {
100
- no_disable: false
101
- }.merge(options)
102
-
103
- if data !~ /^\s*$/
104
- data = data.gsub(/^/, '=')
105
- end
106
- data = data.gsub(/(\W)([a-zA-Z])/, '\1_\2')
107
-
108
- case data
109
- when /_d0_edge|_d_on/
110
- data = data.gsub(/_d0_edge|_d_on/, "I#{line_cnt}")
111
- when /_d1_edge|_d_data/
112
- data = data.gsub(/_d1_edge|_d_data/, "J#{line_cnt}")
113
- when /_d2_edge|_dret/
114
- data = data.gsub(/_d2_edge|_dret/, "K#{line_cnt}")
115
- when /_d3_edge|_d_off/
116
- data = data.gsub(/_d3_edge|_d_off/, "L#{line_cnt}")
117
- when /_c1_edge|_c_open/
118
- data = data.gsub(/_c1_edge|_c_open/, "N#{line_cnt}")
119
- when /_c2_edge|_c_close/
120
- data = data.gsub(/_c2_edge|_c_close/, "O#{line_cnt}")
121
- when /^\s*$/
122
- options[:no_disable] ? data = '' : data = 'disable'
123
- else
124
- data
125
- end
126
- end
127
- end
128
- end
129
- end
130
- end
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class Edgesets
5
+ include ::OrigenTesters::Generator
6
+
7
+ attr_accessor :es
8
+ attr_accessor :es_sheet_pins
9
+ attr_accessor :ts_basic
10
+
11
+ OUTPUT_PREFIX = 'ES'
12
+ # OUTPUT_POSTFIX = 'ES'
13
+
14
+ def initialize(options = {}) # :nodoc:
15
+ @es = {}
16
+ @ts_basic = options[:timeset_basic]
17
+ end
18
+
19
+ def add(esname, pin, edge, options = {})
20
+ esname = esname.to_sym unless esname.is_a? Symbol
21
+ pin = pin.to_sym unless pin.is_a? Symbol
22
+ @es.key?(esname) ? @es[esname].add_edge(pin, edge) : @es[esname] = platform::Edgeset.new(esname, pin, edge, options)
23
+ @es_sheet_pins = options[:es_sheet_pins] unless @es_sheet_pins
24
+ @es
25
+ end
26
+
27
+ def finalize(options = {})
28
+ end
29
+
30
+ # Populate an array of pins based on the pin or pingroup
31
+ def get_pin_objects(grp)
32
+ pins = []
33
+ if Origen.top_level.pin(grp).is_a?(Origen::Pins::Pin) ||
34
+ Origen.top_level.pin(grp).is_a?(Origen::Pins::FunctionProxy)
35
+ pins << Origen.top_level.pin(grp)
36
+ elsif Origen.top_level.pin(grp).is_a?(Origen::Pins::PinCollection)
37
+ Origen.top_level.pin(grp).each do |pin|
38
+ pins << pin
39
+ end
40
+ else
41
+ Origen.log.error "Could not find pin class: #{grp} #{Origen.top_level.pin(grp).class}"
42
+ end
43
+ pins
44
+ end
45
+
46
+ # Equality check to compare full contents of edge object
47
+ def edges_eql?(edge1, edge2)
48
+ edge1 == edge2
49
+ end
50
+
51
+ # Globally modify text within the edge object
52
+ def gsub_edges!(edge, old_val, new_val)
53
+ edge.d_src = edge.d_src.gsub(/#{Regexp.escape(old_val)}/, new_val)
54
+ edge.d_fmt = edge.d_fmt.gsub(/#{Regexp.escape(old_val)}/, new_val)
55
+ edge.d0_edge = edge.d0_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
56
+ edge.d1_edge = edge.d1_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
57
+ edge.d2_edge = edge.d2_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
58
+ edge.d3_edge = edge.d3_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
59
+ edge.c_mode = edge.c_mode.gsub(/#{Regexp.escape(old_val)}/, new_val)
60
+ edge.c1_edge = edge.c1_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
61
+ edge.c2_edge = edge.c2_edge.gsub(/#{Regexp.escape(old_val)}/, new_val)
62
+ edge.t_res = edge.t_res.gsub(/#{Regexp.escape(old_val)}/, new_val)
63
+ edge.clk_per = edge.clk_per.gsub(/#{Regexp.escape(old_val)}/, new_val)
64
+ end
65
+
66
+ # Prepare the edge information for ES/TS file output
67
+ def format_uflex_edge(data, line_cnt, options = {})
68
+ options = {
69
+ no_disable: false
70
+ }.merge(options)
71
+
72
+ if data !~ /^\s*$/
73
+ data = data.gsub(/^/, '=')
74
+ end
75
+ data = data.gsub(/(\W)([a-zA-Z])/, '\1_\2')
76
+
77
+ case data
78
+ when /_d0_edge|_d_on/
79
+ data = data.gsub(/_d0_edge|_d_on/, "F#{line_cnt}")
80
+ when /_d1_edge|_d_data/
81
+ data = data.gsub(/_d1_edge|_d_data/, "G#{line_cnt}")
82
+ when /_d2_edge|_dret/
83
+ data = data.gsub(/_d2_edge|_dret/, "H#{line_cnt}")
84
+ when /_d3_edge|_d_off/
85
+ data = data.gsub(/_d3_edge|_d_off/, "I#{line_cnt}")
86
+ when /_c1_edge|_c_open/
87
+ data = data.gsub(/_c1_edge|_c_open/, "K#{line_cnt}")
88
+ when /_c2_edge|_c_close/
89
+ data = data.gsub(/_c2_edge|_c_close/, "L#{line_cnt}")
90
+ when /^\s*$/
91
+ options[:no_disable] ? data = '' : data = 'disable'
92
+ else
93
+ data
94
+ end
95
+ end
96
+
97
+ # Prepare the edge information for TSB file output
98
+ def format_uflex_edge_tsb(data, line_cnt, options = {})
99
+ options = {
100
+ no_disable: false
101
+ }.merge(options)
102
+
103
+ if data !~ /^\s*$/
104
+ data = data.gsub(/^/, '=')
105
+ end
106
+ data = data.gsub(/(\W)([a-zA-Z])/, '\1_\2')
107
+
108
+ case data
109
+ when /_d0_edge|_d_on/
110
+ data = data.gsub(/_d0_edge|_d_on/, "I#{line_cnt}")
111
+ when /_d1_edge|_d_data/
112
+ data = data.gsub(/_d1_edge|_d_data/, "J#{line_cnt}")
113
+ when /_d2_edge|_dret/
114
+ data = data.gsub(/_d2_edge|_dret/, "K#{line_cnt}")
115
+ when /_d3_edge|_d_off/
116
+ data = data.gsub(/_d3_edge|_d_off/, "L#{line_cnt}")
117
+ when /_c1_edge|_c_open/
118
+ data = data.gsub(/_c1_edge|_c_open/, "N#{line_cnt}")
119
+ when /_c2_edge|_c_close/
120
+ data = data.gsub(/_c2_edge|_c_close/, "O#{line_cnt}")
121
+ when /^\s*$/
122
+ options[:no_disable] ? data = '' : data = 'disable'
123
+ else
124
+ data
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end