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,207 +1,207 @@
1
- module OrigenTesters
2
- # A simple class to model a vector
3
- class Vector
4
- attr_accessor :repeat, :microcode, :timeset, :pin_vals,
5
- :number, :cycle_number, :dont_compress,
6
- :comments, :inline_comment, :cycle, :number, :contains_capture
7
-
8
- def initialize(attrs = {})
9
- @inline_comment = ''
10
- attrs.each do |attribute, value|
11
- send("#{attribute}=", value)
12
- end
13
- end
14
-
15
- def comments
16
- @comments ||= []
17
- end
18
-
19
- def update(attrs = {})
20
- attrs.each do |attribute, value|
21
- send("#{attribute}=", value)
22
- end
23
- end
24
-
25
- # Returns the value (a string) that is assigned to the given pin by the
26
- # given vector
27
- #
28
- # vector.pin_vals # => "1 1 XX10 H X1"
29
- # vector.pin_value($dut.pins(:jtag)) # => "XX10"
30
- def pin_value(pin)
31
- $tester.regex_for_pin(pin).match(pin_vals)
32
- Regexp.last_match(1)
33
- end
34
-
35
- # Replace the current pin value assigned to the given pin with either the state
36
- # that it currently has, or with a supplied string value.
37
- #
38
- # In the case of a string being supplied as the 2nd argument, the caller is
39
- # responsible for ensuring that the pin state format/codes matches that used
40
- # by the current tester.
41
- #
42
- # vector.pin_vals # => "1 1 XX10 H X1"
43
- # $dut.pins(:jtag).drive(0)
44
- # vector.set_pin_value($dut.pins(:jtag))
45
- # vector.pin_vals # => "1 1 0000 H X1"
46
- # vector.set_pin_value($dut.pins(:jtag), "XXXX")
47
- # vector.pin_vals # => "1 1 XXXX H X1"
48
- def set_pin_value(pin, value = nil)
49
- regex = $tester.regex_for_pin_sub(pin)
50
- value ||= pin.to_vector
51
- if $tester.ordered_pins_cache.first == pin
52
- self.pin_vals = pin_vals.sub(regex, value + '\2')
53
- elsif $tester.ordered_pins_cache.last == pin
54
- self.pin_vals = pin_vals.sub(regex, '\1' + value)
55
- else
56
- self.pin_vals = pin_vals.sub(regex, '\1' + value + '\3')
57
- end
58
- end
59
-
60
- # Converts the vector to the period specified by the given timeset (instead of the period
61
- # for the timeset it was originally created with).
62
- #
63
- # This may convert the single vector to multiple vectors, in which case the method will
64
- # yield as many vectors as required back to the caller.
65
- def convert_to_timeset(tset)
66
- # If no conversion required
67
- if tset.period_in_ns == timeset.period_in_ns
68
- yield self
69
- else
70
- if tset.period_in_ns > timeset.period_in_ns
71
- fail "Cannot convert a vector with timeset #{timeset.name} to timeset #{tset.name}!"
72
- end
73
- if timeset.period_in_ns % tset.period_in_ns != 0
74
- fail "The period of timeset #{timeset.name} is not a multiple of the period of timeset #{tset.name}!"
75
- end
76
- if contains_capture
77
- vector_modification_required = true
78
- elsif $tester.timing_toggled_pins.empty?
79
- vector_modification_required = false
80
- else
81
- # If the timing toggled pins are not driving on this vector, then no
82
- # modification will be required
83
- vector_modification_required = $tester.timing_toggled_pins.any? do |pin|
84
- value = pin_value(pin)
85
- value == '1' || value == '0'
86
- end
87
- end
88
- number_of_base_vectors = repeat || 1
89
- vectors_per_period = timeset.period_in_ns / tset.period_in_ns
90
- self.inline_comment += "Period levelled (#{timeset.name})"
91
- self.timeset = tset
92
- if vector_modification_required && vectors_per_period > 1
93
- pin_values = $tester.timing_toggled_pins.map do |pin|
94
- on = pin_value(pin)
95
- if on == '1'
96
- { pin: pin, on: '1', off: '0' }
97
- elsif on == '0'
98
- { pin: pin, on: '0', off: '1' }
99
- end
100
- end
101
- pin_vals_with_compare = nil
102
- number_of_base_vectors.times do |i|
103
- # Drive the 'on' value on the first cycle, this is already setup
104
- v = dup
105
- v.repeat = 1
106
- v.pin_vals = inhibit_compares
107
- $tester.remove_store_from_vector(v) if v.contains_capture
108
- yield v
109
- # Then drive the pin 'off' value for the remainder
110
- v = dup
111
- r = vectors_per_period - 1
112
- if r > 1
113
- v = dup
114
- v.repeat = r - 1
115
- pin_values.each { |vals| v.set_pin_value(vals[:pin], vals[:off]) if vals }
116
- $tester.remove_store_from_vector(v) if v.contains_capture
117
- yield v
118
- end
119
- v = dup
120
- v.repeat = 1
121
- v.pin_vals = restore_compares
122
- pin_values.each { |vals| v.set_pin_value(vals[:pin], vals[:off]) if vals }
123
- yield v
124
- end
125
- else
126
- self.repeat = number_of_base_vectors * vectors_per_period
127
- yield self
128
- end
129
- end
130
- end
131
-
132
- # Set all active compare data to X.
133
- # The original values will be preserved so that they can be restored
134
- # vector.pin_vals # => "1 1 LHLL 10001 L 1 XX 0"
135
- # vector.inhibit_compares # => "1 1 XXXX 10001 X 1 XX 0"
136
- # vector.restore_compares # => "1 1 LHLL 10001 L 1 XX 0"
137
- def inhibit_compares
138
- @orig_pin_vals = pin_vals
139
- @pin_vals = pin_vals.gsub(/H|L/, 'X')
140
- end
141
-
142
- # @see Vector#inhibit_compares
143
- def restore_compares
144
- @pin_vals = @orig_pin_vals
145
- end
146
-
147
- # Updates the pin values to reflect the value currently held by the given pin
148
- def update_pin_val(pin)
149
- vals = pin_vals.split(' ')
150
- if pin.belongs_to_a_pin_group? && !pin.is_a?(Origen::Pins::PinCollection)
151
- port = nil
152
- pin.groups.each { |i| port = i[1] if port.nil? && Origen.tester.ordered_pins.include?(i[1]) } # see if group is included in ordered pins
153
- if port
154
- ix = Origen.tester.ordered_pins.index(port) # find index of port
155
- i = port.index(pin)
156
- else
157
- ix = Origen.tester.ordered_pins.index(pin)
158
- i = 0
159
- end
160
- else
161
- ix = Origen.tester.ordered_pins.index(pin)
162
- i = 0
163
- end
164
-
165
- if Origen.pin_bank.pin_groups.keys.include? pin.id
166
- val = pin.map { |p| Origen.tester.format_pin_state(p) }.join('')
167
- vals[ix] = val
168
- else
169
- val = Origen.tester.format_pin_state(pin)
170
- vals[ix][i] = val
171
- end
172
-
173
- self.pin_vals = vals.join(' ')
174
- end
175
-
176
- def ordered_pins
177
- Origen.app.pin_map.sort_by { |id, pin| pin.order }.map { |id, pin| pin }
178
- end
179
-
180
- def microcode=(val)
181
- if val && has_microcode? && @microcode != val
182
- fail "Trying to assign microcode: #{val}, but vector already has microcode: #{@microcode}"
183
- else
184
- @microcode = val
185
- end
186
- end
187
-
188
- # Since repeat 0 is non-intuitive every vector implicitly has a repeat of 1
189
- def repeat
190
- @repeat || 1
191
- end
192
-
193
- def has_microcode?
194
- !!(@microcode && !@microcode.empty?)
195
- end
196
-
197
- def ==(obj)
198
- if obj.is_a?(Vector)
199
- self.has_microcode? == obj.has_microcode? &&
200
- timeset == obj.timeset &&
201
- pin_vals == obj.pin_vals
202
- else
203
- super obj
204
- end
205
- end
206
- end
207
- end
1
+ module OrigenTesters
2
+ # A simple class to model a vector
3
+ class Vector
4
+ attr_accessor :repeat, :microcode, :timeset, :pin_vals,
5
+ :number, :cycle_number, :dont_compress,
6
+ :comments, :inline_comment, :cycle, :number, :contains_capture
7
+
8
+ def initialize(attrs = {})
9
+ @inline_comment = ''
10
+ attrs.each do |attribute, value|
11
+ send("#{attribute}=", value)
12
+ end
13
+ end
14
+
15
+ def comments
16
+ @comments ||= []
17
+ end
18
+
19
+ def update(attrs = {})
20
+ attrs.each do |attribute, value|
21
+ send("#{attribute}=", value)
22
+ end
23
+ end
24
+
25
+ # Returns the value (a string) that is assigned to the given pin by the
26
+ # given vector
27
+ #
28
+ # vector.pin_vals # => "1 1 XX10 H X1"
29
+ # vector.pin_value($dut.pins(:jtag)) # => "XX10"
30
+ def pin_value(pin)
31
+ $tester.regex_for_pin(pin).match(pin_vals)
32
+ Regexp.last_match(1)
33
+ end
34
+
35
+ # Replace the current pin value assigned to the given pin with either the state
36
+ # that it currently has, or with a supplied string value.
37
+ #
38
+ # In the case of a string being supplied as the 2nd argument, the caller is
39
+ # responsible for ensuring that the pin state format/codes matches that used
40
+ # by the current tester.
41
+ #
42
+ # vector.pin_vals # => "1 1 XX10 H X1"
43
+ # $dut.pins(:jtag).drive(0)
44
+ # vector.set_pin_value($dut.pins(:jtag))
45
+ # vector.pin_vals # => "1 1 0000 H X1"
46
+ # vector.set_pin_value($dut.pins(:jtag), "XXXX")
47
+ # vector.pin_vals # => "1 1 XXXX H X1"
48
+ def set_pin_value(pin, value = nil)
49
+ regex = $tester.regex_for_pin_sub(pin)
50
+ value ||= pin.to_vector
51
+ if $tester.ordered_pins_cache.first == pin
52
+ self.pin_vals = pin_vals.sub(regex, value + '\2')
53
+ elsif $tester.ordered_pins_cache.last == pin
54
+ self.pin_vals = pin_vals.sub(regex, '\1' + value)
55
+ else
56
+ self.pin_vals = pin_vals.sub(regex, '\1' + value + '\3')
57
+ end
58
+ end
59
+
60
+ # Converts the vector to the period specified by the given timeset (instead of the period
61
+ # for the timeset it was originally created with).
62
+ #
63
+ # This may convert the single vector to multiple vectors, in which case the method will
64
+ # yield as many vectors as required back to the caller.
65
+ def convert_to_timeset(tset)
66
+ # If no conversion required
67
+ if tset.period_in_ns == timeset.period_in_ns
68
+ yield self
69
+ else
70
+ if tset.period_in_ns > timeset.period_in_ns
71
+ fail "Cannot convert a vector with timeset #{timeset.name} to timeset #{tset.name}!"
72
+ end
73
+ if timeset.period_in_ns % tset.period_in_ns != 0
74
+ fail "The period of timeset #{timeset.name} is not a multiple of the period of timeset #{tset.name}!"
75
+ end
76
+ if contains_capture
77
+ vector_modification_required = true
78
+ elsif $tester.timing_toggled_pins.empty?
79
+ vector_modification_required = false
80
+ else
81
+ # If the timing toggled pins are not driving on this vector, then no
82
+ # modification will be required
83
+ vector_modification_required = $tester.timing_toggled_pins.any? do |pin|
84
+ value = pin_value(pin)
85
+ value == '1' || value == '0'
86
+ end
87
+ end
88
+ number_of_base_vectors = repeat || 1
89
+ vectors_per_period = timeset.period_in_ns / tset.period_in_ns
90
+ self.inline_comment += "Period levelled (#{timeset.name})"
91
+ self.timeset = tset
92
+ if vector_modification_required && vectors_per_period > 1
93
+ pin_values = $tester.timing_toggled_pins.map do |pin|
94
+ on = pin_value(pin)
95
+ if on == '1'
96
+ { pin: pin, on: '1', off: '0' }
97
+ elsif on == '0'
98
+ { pin: pin, on: '0', off: '1' }
99
+ end
100
+ end
101
+ pin_vals_with_compare = nil
102
+ number_of_base_vectors.times do |i|
103
+ # Drive the 'on' value on the first cycle, this is already setup
104
+ v = dup
105
+ v.repeat = 1
106
+ v.pin_vals = inhibit_compares
107
+ $tester.remove_store_from_vector(v) if v.contains_capture
108
+ yield v
109
+ # Then drive the pin 'off' value for the remainder
110
+ v = dup
111
+ r = vectors_per_period - 1
112
+ if r > 1
113
+ v = dup
114
+ v.repeat = r - 1
115
+ pin_values.each { |vals| v.set_pin_value(vals[:pin], vals[:off]) if vals }
116
+ $tester.remove_store_from_vector(v) if v.contains_capture
117
+ yield v
118
+ end
119
+ v = dup
120
+ v.repeat = 1
121
+ v.pin_vals = restore_compares
122
+ pin_values.each { |vals| v.set_pin_value(vals[:pin], vals[:off]) if vals }
123
+ yield v
124
+ end
125
+ else
126
+ self.repeat = number_of_base_vectors * vectors_per_period
127
+ yield self
128
+ end
129
+ end
130
+ end
131
+
132
+ # Set all active compare data to X.
133
+ # The original values will be preserved so that they can be restored
134
+ # vector.pin_vals # => "1 1 LHLL 10001 L 1 XX 0"
135
+ # vector.inhibit_compares # => "1 1 XXXX 10001 X 1 XX 0"
136
+ # vector.restore_compares # => "1 1 LHLL 10001 L 1 XX 0"
137
+ def inhibit_compares
138
+ @orig_pin_vals = pin_vals
139
+ @pin_vals = pin_vals.gsub(/H|L/, 'X')
140
+ end
141
+
142
+ # @see Vector#inhibit_compares
143
+ def restore_compares
144
+ @pin_vals = @orig_pin_vals
145
+ end
146
+
147
+ # Updates the pin values to reflect the value currently held by the given pin
148
+ def update_pin_val(pin)
149
+ vals = pin_vals.split(' ')
150
+ if pin.belongs_to_a_pin_group? && !pin.is_a?(Origen::Pins::PinCollection)
151
+ port = nil
152
+ pin.groups.each { |i| port = i[1] if port.nil? && Origen.tester.ordered_pins.include?(i[1]) } # see if group is included in ordered pins
153
+ if port
154
+ ix = Origen.tester.ordered_pins.index(port) # find index of port
155
+ i = port.index(pin)
156
+ else
157
+ ix = Origen.tester.ordered_pins.index(pin)
158
+ i = 0
159
+ end
160
+ else
161
+ ix = Origen.tester.ordered_pins.index(pin)
162
+ i = 0
163
+ end
164
+
165
+ if Origen.pin_bank.pin_groups.keys.include? pin.id
166
+ val = pin.map { |p| Origen.tester.format_pin_state(p) }.join('')
167
+ vals[ix] = val
168
+ else
169
+ val = Origen.tester.format_pin_state(pin)
170
+ vals[ix][i] = val
171
+ end
172
+
173
+ self.pin_vals = vals.join(' ')
174
+ end
175
+
176
+ def ordered_pins
177
+ Origen.app.pin_map.sort_by { |id, pin| pin.order }.map { |id, pin| pin }
178
+ end
179
+
180
+ def microcode=(val)
181
+ if val && has_microcode? && @microcode != val
182
+ fail "Trying to assign microcode: #{val}, but vector already has microcode: #{@microcode}"
183
+ else
184
+ @microcode = val
185
+ end
186
+ end
187
+
188
+ # Since repeat 0 is non-intuitive every vector implicitly has a repeat of 1
189
+ def repeat
190
+ @repeat || 1
191
+ end
192
+
193
+ def has_microcode?
194
+ !!(@microcode && !@microcode.empty?)
195
+ end
196
+
197
+ def ==(obj)
198
+ if obj.is_a?(Vector)
199
+ self.has_microcode? == obj.has_microcode? &&
200
+ timeset == obj.timeset &&
201
+ pin_vals == obj.pin_vals
202
+ else
203
+ super obj
204
+ end
205
+ end
206
+ end
207
+ end
@@ -1,41 +1,41 @@
1
- require 'active_support/concern'
2
- module OrigenTesters
3
- # Including this module in a class gives it all the basics required
4
- # to generator vector-based test patterns
5
- module VectorBasedTester
6
- extend ActiveSupport::Concern
7
-
8
- require 'origen_testers/vector_generator'
9
- require 'origen_testers/timing'
10
- require 'origen_testers/api'
11
-
12
- included do
13
- include VectorGenerator
14
- include Timing
15
- include API
16
- end
17
-
18
- module ClassMethods # :nodoc:
19
- # This overrides the new method of any class which includes this
20
- # module to force the newly created instance to be registered as
21
- # a tester with Origen
22
- def new(*args, &block) # :nodoc:
23
- if Origen.app.with_doc_tester?
24
- x = OrigenTesters::Doc.allocate
25
- if Origen.app.with_html_doc_tester?
26
- x.html_mode = true
27
- end
28
- else
29
- x = allocate
30
- end
31
- x.send(:initialize, *args, &block)
32
- x.register_tester
33
- x
34
- end
35
- end
36
-
37
- def register_tester # :nodoc:
38
- Origen.app.tester = self
39
- end
40
- end
41
- end
1
+ require 'active_support/concern'
2
+ module OrigenTesters
3
+ # Including this module in a class gives it all the basics required
4
+ # to generator vector-based test patterns
5
+ module VectorBasedTester
6
+ extend ActiveSupport::Concern
7
+
8
+ require 'origen_testers/vector_generator'
9
+ require 'origen_testers/timing'
10
+ require 'origen_testers/api'
11
+
12
+ included do
13
+ include VectorGenerator
14
+ include Timing
15
+ include API
16
+ end
17
+
18
+ module ClassMethods # :nodoc:
19
+ # This overrides the new method of any class which includes this
20
+ # module to force the newly created instance to be registered as
21
+ # a tester with Origen
22
+ def new(*args, &block) # :nodoc:
23
+ if Origen.app.with_doc_tester?
24
+ x = OrigenTesters::Doc.allocate
25
+ if Origen.app.with_html_doc_tester?
26
+ x.html_mode = true
27
+ end
28
+ else
29
+ x = allocate
30
+ end
31
+ x.send(:initialize, *args, &block)
32
+ x.register_tester
33
+ x
34
+ end
35
+ end
36
+
37
+ def register_tester # :nodoc:
38
+ Origen.app.tester = self
39
+ end
40
+ end
41
+ end