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,295 +1,295 @@
1
- module OrigenTesters
2
- module Test
3
- class DUT
4
- # Simple DUT using Nexus interface
5
-
6
- attr_accessor :blocks
7
- attr_accessor :hv_supply_pin
8
- attr_accessor :lv_supply_pin
9
- attr_accessor :digsrc_pins
10
- attr_accessor :digcap_pins
11
- attr_accessor :digsrc_settings
12
- attr_accessor :digcap_settings
13
-
14
- include OrigenARMDebug
15
- include Origen::TopLevel
16
- include OrigenJTAG
17
-
18
- def initialize(options = {})
19
- add_pin :tclk
20
- add_pin :tdi
21
- add_pin :tdo
22
- add_pin :tms
23
- # add_pin_group :jtag, :tdi, :tdo, :tms
24
- add_power_pin_group :vdd1
25
- add_power_pin_group :vdd2
26
- add_virtual_pin :virtual1, type: :virtual_pin
27
- add_virtual_pin :virtual2, type: :ate_ch
28
-
29
- reg :testme32, 0x007a do |reg|
30
- reg.bits 31..16, :portB
31
- reg.bits 15..8, :portA
32
- reg.bits 1, :done
33
- reg.bits 0, :enable
34
- end
35
- @hv_supply_pin = 'VDDHV'
36
- @lv_supply_pin = 'VDDLV'
37
- @digsrc_pins = [:tdi, :tms]
38
- @digsrc_settings = { digsrc_mode: :parallel, digsrc_bit_order: :msb }
39
- @digcap_pins = :tdo
40
- @digcap_settings = { digcap_format: :twos_complement }
41
- @blocks = [Block.new(0, self), Block.new(1, self), Block.new(2, self)]
42
- end
43
-
44
- def on_create
45
- if tester && tester.uflex?
46
- tester.assign_dc_instr_pins([hv_supply_pin, lv_supply_pin])
47
- tester.assign_digsrc_pins(digsrc_pins)
48
- tester.apply_digsrc_settings(digsrc_settings)
49
- tester.assign_digcap_pins(digcap_pins)
50
- tester.apply_digcap_settings(digcap_settings)
51
- tester.memory_test_en = true
52
- end
53
- end
54
-
55
- def startup(options)
56
- $tester.set_timeset('tp0', 60)
57
- end
58
-
59
- def write_register(reg, options = {})
60
- arm_debug.write_register(reg, options)
61
- end
62
-
63
- def read_register(reg, options = {})
64
- arm_debug.write_register(reg, options)
65
- end
66
-
67
- def execute(options = {})
68
- options = { define: false, # whether to define subr or call it
69
- name: 'executefunc1',
70
- onemodsub: false # whether to expects subr to be in single module
71
- }.merge(options)
72
-
73
- if options[:define]
74
- # define subroutine
75
- $tester.start_subroutine(options[:name], onemodsub: options[:onemodsub])
76
- $tester.cycle
77
- $tester.end_subroutine(onemodsub: options[:onemodsub])
78
- $tester.cycle unless options[:onemodsub]
79
- else
80
- # call subroutine
81
- $tester.cycle
82
- $tester.call_subroutine(options[:name])
83
- $tester.cycle
84
- end
85
- end
86
-
87
- # Match loop functionality
88
- def match(options = {})
89
- options = { type: :match_pin, # whether to match DONE bit in register or match pin
90
- # :match_done
91
- # :match_2pins
92
- delay_in_us: 5, # match loop delay
93
- define: false, # whether to define subr or call it
94
- subr_name: false, # default use match type as subr name
95
- }.merge(options)
96
-
97
- subr_name = options[:subr_name] ? options[:subr_name] : options[:type].to_s
98
-
99
- if options[:define]
100
- $tester.start_subroutine(subr_name)
101
- $tester.cycle
102
- if options[:type] == :match_done
103
-
104
- # Match DONE bit in register
105
- $tester.wait(match: true,
106
- time_in_us: options[:delay_in_us],
107
- global_loops: true,
108
- check_for_fails: true,
109
- force_fail_on_timeout: true,
110
- clr_fail_post_match: true,
111
- manual_stop: true) do
112
- # Match on reading done bit
113
- reg(:testme32).bits(:done).write(1)
114
- reg(:testme32).bits(:done).read!
115
- end
116
- elsif options[:type] == :match_pin
117
- # Match on TDO pin state
118
- $tester.wait(match: true,
119
- pin: pin(:tdo),
120
- state: :high,
121
- time_in_us: options[:delay_in_us],
122
- global_loops: true,
123
- check_for_fails: true,
124
- force_fail_on_timeout: true,
125
- clr_fail_post_match: true,
126
- manual_stop: true)
127
- elsif options[:type] == :match_2pins
128
- # Match on TDO pin state
129
- $tester.wait(match: true,
130
- pin: pin(:tdo),
131
- state: :high,
132
- pin2: pin(:tms),
133
- state2: :high,
134
- time_in_us: options[:delay_in_us],
135
- global_loops: true,
136
- check_for_fails: true,
137
- force_fail_on_timeout: true,
138
- clr_fail_post_match: true,
139
- manual_stop: true)
140
- elsif options[:type] == :match_2pins_custom_jump
141
- # Match on TDO pin state
142
- $tester.wait(match: true,
143
- pin: pin(:tdo),
144
- state: :high,
145
- pin2: pin(:tms),
146
- state2: :high,
147
- time_in_us: options[:delay_in_us],
148
- on_pin_match_goto: { 0 => 'no_fails_found' },
149
- on_timeout_goto: 'no_fails_found',
150
- global_loops: true,
151
- check_for_fails: true,
152
- force_fail_on_timeout: true,
153
- clr_fail_post_match: true,
154
- manual_stop: true)
155
- $tester.cycle
156
- $tester.set_code(200)
157
- $tester.branch('match_done')
158
- $tester.label('no_fails_found')
159
- $tester.set_code(201)
160
- $tester.label('match_done')
161
- elsif options[:type] == :multiple_entries
162
- # Match on TDO pin state, with multiple subr entry points
163
- $tester.wait(match: true,
164
- pin: pin(:tdo),
165
- state: :high,
166
- time_in_us: options[:delay_in_us],
167
- global_loops: true,
168
- multiple_entries: true,
169
- check_for_fails: true,
170
- force_fail_on_timeout: true,
171
- clr_fail_post_match: true,
172
- manual_stop: true)
173
- end
174
- $tester.cycle
175
- $tester.end_subroutine
176
- $tester.cycle
177
- else
178
- # call subroutine
179
- $tester.cycle
180
- $tester.call_subroutine(subr_name)
181
- $tester.cycle
182
- end
183
- end
184
-
185
- def handshake(options = {})
186
- options = {
187
- define: false, # whether to define subr or call it
188
- }.merge(options)
189
-
190
- if options[:define]
191
- $tester.start_subroutine('handshake')
192
- $tester.handshake(readcode: 100)
193
- $tester.cycle
194
- $tester.cycle
195
- $tester.cycle
196
- $tester.end_subroutine
197
- else
198
- $tester.cycle
199
- $tester.call_subroutine('handshake')
200
- end
201
- end
202
-
203
- def keepalive(options = {})
204
- options = {
205
- define: false, # whether to define subr or call it
206
- allow_subroutine: false,
207
- subroutine_pat: true
208
- }.merge(options)
209
-
210
- if options[:define]
211
- $tester.start_subroutine('keep_alive')
212
- $tester.keep_alive(options)
213
- $tester.end_subroutine
214
- else
215
- $tester.cycle
216
- $tester.call_subroutine('keep_alive')
217
- end
218
- end
219
- alias_method :keep_alive, :keepalive
220
-
221
- def digsrc_overlay(options = {})
222
- options = { define: false, # whether to define subr or call it
223
- subr_name: false, # default use match type as subr name
224
- digsrc_pins: @digsrc_pins, # defaults to what's defined in $dut
225
- overlay_reg: nil, # defaults to testme32 register
226
- overlay_cycle_num: 32, # Only needed if overlay_reg is NOT nil, this specificies how many clk cycles to overlay.
227
- }.merge(options)
228
- if options[:define]
229
- $tester.start_subroutine(options[:subr_name]) # Start subroutine
230
- digsrc_pins = $tester.assign_digsrc_pins(options[:digsrc_pins])
231
- $tester.digsrc_start(digsrc_pins, dssc_mode: :single)
232
- original_pin_states = {}
233
- digsrc_pins.each do |pin|
234
- original_pin_states.merge!(pin => pin(pin).data)
235
- pin(pin).drive_mem
236
- end
237
- if options[:overlay_reg].nil?
238
- options[:overlay_cycle_num].times do
239
- $tester.digsrc_send(digsrc_pins)
240
- $tester.cycle
241
- end
242
- else
243
- $tester.dont_compress = true
244
- options[:overlay_reg].size.times do
245
- $tester.digsrc_send(digsrc_pins)
246
- $tester.cycle
247
- end
248
- end
249
- original_pin_states.each do |pin, state|
250
- pin(pin).drive(state)
251
- end
252
- $tester.digsrc_stop(digsrc_pins)
253
- $tester.cycle
254
- $tester.end_subroutine # end subroutine
255
- else
256
- $tester.cycle
257
- $tester.call_subroutine(options[:subr_name])
258
- end
259
- end
260
-
261
- def memory_test(options = {})
262
- options = {
263
- }.merge(options)
264
-
265
- $tester.memory_test(inc_counter_x: true, gen_vector: true)
266
-
267
- $tester.memory_test(inc_counter_y: true, gen_vector: true)
268
-
269
- $tester.memory_test(init_counter_x: true)
270
-
271
- $tester.memory_test(inc_counter_x: true, init_counter_y: true)
272
-
273
- $tester.memory_test(inc_counter_y: true, capture_vector: true)
274
-
275
- $tester.memory_test(pin: pin(:tdo), pin_data: :expect)
276
- end
277
-
278
- def freq_count(options = {})
279
- options = {
280
- }.merge(options)
281
-
282
- $tester.freq_count($dut.pin(:tdo), readcode: 73)
283
- end
284
-
285
- # dummy flag to check for a particular design bug for this DUT
286
- def has_margin0_bug?
287
- false
288
- end
289
-
290
- def find_block_by_id(id)
291
- @blocks.find { |block| block.id == id }
292
- end
293
- end
294
- end
295
- end
1
+ module OrigenTesters
2
+ module Test
3
+ class DUT
4
+ # Simple DUT using Nexus interface
5
+
6
+ attr_accessor :blocks
7
+ attr_accessor :hv_supply_pin
8
+ attr_accessor :lv_supply_pin
9
+ attr_accessor :digsrc_pins
10
+ attr_accessor :digcap_pins
11
+ attr_accessor :digsrc_settings
12
+ attr_accessor :digcap_settings
13
+
14
+ include OrigenARMDebug
15
+ include Origen::TopLevel
16
+ include OrigenJTAG
17
+
18
+ def initialize(options = {})
19
+ add_pin :tclk
20
+ add_pin :tdi
21
+ add_pin :tdo
22
+ add_pin :tms
23
+ # add_pin_group :jtag, :tdi, :tdo, :tms
24
+ add_power_pin_group :vdd1
25
+ add_power_pin_group :vdd2
26
+ add_virtual_pin :virtual1, type: :virtual_pin
27
+ add_virtual_pin :virtual2, type: :ate_ch
28
+
29
+ reg :testme32, 0x007a do |reg|
30
+ reg.bits 31..16, :portB
31
+ reg.bits 15..8, :portA
32
+ reg.bits 1, :done
33
+ reg.bits 0, :enable
34
+ end
35
+ @hv_supply_pin = 'VDDHV'
36
+ @lv_supply_pin = 'VDDLV'
37
+ @digsrc_pins = [:tdi, :tms]
38
+ @digsrc_settings = { digsrc_mode: :parallel, digsrc_bit_order: :msb }
39
+ @digcap_pins = :tdo
40
+ @digcap_settings = { digcap_format: :twos_complement }
41
+ @blocks = [Block.new(0, self), Block.new(1, self), Block.new(2, self)]
42
+ end
43
+
44
+ def on_create
45
+ if tester && tester.uflex?
46
+ tester.assign_dc_instr_pins([hv_supply_pin, lv_supply_pin])
47
+ tester.assign_digsrc_pins(digsrc_pins)
48
+ tester.apply_digsrc_settings(digsrc_settings)
49
+ tester.assign_digcap_pins(digcap_pins)
50
+ tester.apply_digcap_settings(digcap_settings)
51
+ tester.memory_test_en = true
52
+ end
53
+ end
54
+
55
+ def startup(options)
56
+ $tester.set_timeset('tp0', 60)
57
+ end
58
+
59
+ def write_register(reg, options = {})
60
+ arm_debug.write_register(reg, options)
61
+ end
62
+
63
+ def read_register(reg, options = {})
64
+ arm_debug.write_register(reg, options)
65
+ end
66
+
67
+ def execute(options = {})
68
+ options = { define: false, # whether to define subr or call it
69
+ name: 'executefunc1',
70
+ onemodsub: false # whether to expects subr to be in single module
71
+ }.merge(options)
72
+
73
+ if options[:define]
74
+ # define subroutine
75
+ $tester.start_subroutine(options[:name], onemodsub: options[:onemodsub])
76
+ $tester.cycle
77
+ $tester.end_subroutine(onemodsub: options[:onemodsub])
78
+ $tester.cycle unless options[:onemodsub]
79
+ else
80
+ # call subroutine
81
+ $tester.cycle
82
+ $tester.call_subroutine(options[:name])
83
+ $tester.cycle
84
+ end
85
+ end
86
+
87
+ # Match loop functionality
88
+ def match(options = {})
89
+ options = { type: :match_pin, # whether to match DONE bit in register or match pin
90
+ # :match_done
91
+ # :match_2pins
92
+ delay_in_us: 5, # match loop delay
93
+ define: false, # whether to define subr or call it
94
+ subr_name: false, # default use match type as subr name
95
+ }.merge(options)
96
+
97
+ subr_name = options[:subr_name] ? options[:subr_name] : options[:type].to_s
98
+
99
+ if options[:define]
100
+ $tester.start_subroutine(subr_name)
101
+ $tester.cycle
102
+ if options[:type] == :match_done
103
+
104
+ # Match DONE bit in register
105
+ $tester.wait(match: true,
106
+ time_in_us: options[:delay_in_us],
107
+ global_loops: true,
108
+ check_for_fails: true,
109
+ force_fail_on_timeout: true,
110
+ clr_fail_post_match: true,
111
+ manual_stop: true) do
112
+ # Match on reading done bit
113
+ reg(:testme32).bits(:done).write(1)
114
+ reg(:testme32).bits(:done).read!
115
+ end
116
+ elsif options[:type] == :match_pin
117
+ # Match on TDO pin state
118
+ $tester.wait(match: true,
119
+ pin: pin(:tdo),
120
+ state: :high,
121
+ time_in_us: options[:delay_in_us],
122
+ global_loops: true,
123
+ check_for_fails: true,
124
+ force_fail_on_timeout: true,
125
+ clr_fail_post_match: true,
126
+ manual_stop: true)
127
+ elsif options[:type] == :match_2pins
128
+ # Match on TDO pin state
129
+ $tester.wait(match: true,
130
+ pin: pin(:tdo),
131
+ state: :high,
132
+ pin2: pin(:tms),
133
+ state2: :high,
134
+ time_in_us: options[:delay_in_us],
135
+ global_loops: true,
136
+ check_for_fails: true,
137
+ force_fail_on_timeout: true,
138
+ clr_fail_post_match: true,
139
+ manual_stop: true)
140
+ elsif options[:type] == :match_2pins_custom_jump
141
+ # Match on TDO pin state
142
+ $tester.wait(match: true,
143
+ pin: pin(:tdo),
144
+ state: :high,
145
+ pin2: pin(:tms),
146
+ state2: :high,
147
+ time_in_us: options[:delay_in_us],
148
+ on_pin_match_goto: { 0 => 'no_fails_found' },
149
+ on_timeout_goto: 'no_fails_found',
150
+ global_loops: true,
151
+ check_for_fails: true,
152
+ force_fail_on_timeout: true,
153
+ clr_fail_post_match: true,
154
+ manual_stop: true)
155
+ $tester.cycle
156
+ $tester.set_code(200)
157
+ $tester.branch('match_done')
158
+ $tester.label('no_fails_found')
159
+ $tester.set_code(201)
160
+ $tester.label('match_done')
161
+ elsif options[:type] == :multiple_entries
162
+ # Match on TDO pin state, with multiple subr entry points
163
+ $tester.wait(match: true,
164
+ pin: pin(:tdo),
165
+ state: :high,
166
+ time_in_us: options[:delay_in_us],
167
+ global_loops: true,
168
+ multiple_entries: true,
169
+ check_for_fails: true,
170
+ force_fail_on_timeout: true,
171
+ clr_fail_post_match: true,
172
+ manual_stop: true)
173
+ end
174
+ $tester.cycle
175
+ $tester.end_subroutine
176
+ $tester.cycle
177
+ else
178
+ # call subroutine
179
+ $tester.cycle
180
+ $tester.call_subroutine(subr_name)
181
+ $tester.cycle
182
+ end
183
+ end
184
+
185
+ def handshake(options = {})
186
+ options = {
187
+ define: false, # whether to define subr or call it
188
+ }.merge(options)
189
+
190
+ if options[:define]
191
+ $tester.start_subroutine('handshake')
192
+ $tester.handshake(readcode: 100)
193
+ $tester.cycle
194
+ $tester.cycle
195
+ $tester.cycle
196
+ $tester.end_subroutine
197
+ else
198
+ $tester.cycle
199
+ $tester.call_subroutine('handshake')
200
+ end
201
+ end
202
+
203
+ def keepalive(options = {})
204
+ options = {
205
+ define: false, # whether to define subr or call it
206
+ allow_subroutine: false,
207
+ subroutine_pat: true
208
+ }.merge(options)
209
+
210
+ if options[:define]
211
+ $tester.start_subroutine('keep_alive')
212
+ $tester.keep_alive(options)
213
+ $tester.end_subroutine
214
+ else
215
+ $tester.cycle
216
+ $tester.call_subroutine('keep_alive')
217
+ end
218
+ end
219
+ alias_method :keep_alive, :keepalive
220
+
221
+ def digsrc_overlay(options = {})
222
+ options = { define: false, # whether to define subr or call it
223
+ subr_name: false, # default use match type as subr name
224
+ digsrc_pins: @digsrc_pins, # defaults to what's defined in $dut
225
+ overlay_reg: nil, # defaults to testme32 register
226
+ overlay_cycle_num: 32, # Only needed if overlay_reg is NOT nil, this specificies how many clk cycles to overlay.
227
+ }.merge(options)
228
+ if options[:define]
229
+ $tester.start_subroutine(options[:subr_name]) # Start subroutine
230
+ digsrc_pins = $tester.assign_digsrc_pins(options[:digsrc_pins])
231
+ $tester.digsrc_start(digsrc_pins, dssc_mode: :single)
232
+ original_pin_states = {}
233
+ digsrc_pins.each do |pin|
234
+ original_pin_states.merge!(pin => pin(pin).data)
235
+ pin(pin).drive_mem
236
+ end
237
+ if options[:overlay_reg].nil?
238
+ options[:overlay_cycle_num].times do
239
+ $tester.digsrc_send(digsrc_pins)
240
+ $tester.cycle
241
+ end
242
+ else
243
+ $tester.dont_compress = true
244
+ options[:overlay_reg].size.times do
245
+ $tester.digsrc_send(digsrc_pins)
246
+ $tester.cycle
247
+ end
248
+ end
249
+ original_pin_states.each do |pin, state|
250
+ pin(pin).drive(state)
251
+ end
252
+ $tester.digsrc_stop(digsrc_pins)
253
+ $tester.cycle
254
+ $tester.end_subroutine # end subroutine
255
+ else
256
+ $tester.cycle
257
+ $tester.call_subroutine(options[:subr_name])
258
+ end
259
+ end
260
+
261
+ def memory_test(options = {})
262
+ options = {
263
+ }.merge(options)
264
+
265
+ $tester.memory_test(inc_counter_x: true, gen_vector: true)
266
+
267
+ $tester.memory_test(inc_counter_y: true, gen_vector: true)
268
+
269
+ $tester.memory_test(init_counter_x: true)
270
+
271
+ $tester.memory_test(inc_counter_x: true, init_counter_y: true)
272
+
273
+ $tester.memory_test(inc_counter_y: true, capture_vector: true)
274
+
275
+ $tester.memory_test(pin: pin(:tdo), pin_data: :expect)
276
+ end
277
+
278
+ def freq_count(options = {})
279
+ options = {
280
+ }.merge(options)
281
+
282
+ $tester.freq_count($dut.pin(:tdo), readcode: 73)
283
+ end
284
+
285
+ # dummy flag to check for a particular design bug for this DUT
286
+ def has_margin0_bug?
287
+ false
288
+ end
289
+
290
+ def find_block_by_id(id)
291
+ @blocks.find { |block| block.id == id }
292
+ end
293
+ end
294
+ end
295
+ end