origen_testers 0.4.0

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 (199) hide show
  1. checksums.yaml +7 -0
  2. data/config/application.rb +140 -0
  3. data/config/commands.rb +73 -0
  4. data/config/development.rb +12 -0
  5. data/config/environment.rb +1 -0
  6. data/config/shared_commands.rb +47 -0
  7. data/config/users.rb +18 -0
  8. data/config/version.rb +8 -0
  9. data/lib/commands/build.rb +69 -0
  10. data/lib/origen_testers.rb +23 -0
  11. data/lib/origen_testers/api.rb +258 -0
  12. data/lib/origen_testers/basic_test_setups.rb +105 -0
  13. data/lib/origen_testers/callback_handlers.rb +58 -0
  14. data/lib/origen_testers/generator.rb +279 -0
  15. data/lib/origen_testers/generator/flow_control_api.rb +611 -0
  16. data/lib/origen_testers/generator/identity_map.rb +23 -0
  17. data/lib/origen_testers/generator/placeholder.rb +11 -0
  18. data/lib/origen_testers/generator/test_numberer.rb +23 -0
  19. data/lib/origen_testers/igxl_based_tester.rb +12 -0
  20. data/lib/origen_testers/igxl_based_tester/base.rb +641 -0
  21. data/lib/origen_testers/igxl_based_tester/base/flow.rb +171 -0
  22. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +322 -0
  23. data/lib/origen_testers/igxl_based_tester/base/generator.rb +217 -0
  24. data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -0
  25. data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -0
  26. data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -0
  27. data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -0
  28. data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -0
  29. data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -0
  30. data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -0
  31. data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -0
  32. data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +326 -0
  33. data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +58 -0
  34. data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +179 -0
  35. data/lib/origen_testers/igxl_based_tester/files.rb +43 -0
  36. data/lib/origen_testers/igxl_based_tester/j750.rb +248 -0
  37. data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -0
  38. data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -0
  39. data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -0
  40. data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -0
  41. data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -0
  42. data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -0
  43. data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -0
  44. data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -0
  45. data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -0
  46. data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -0
  47. data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -0
  48. data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +9 -0
  49. data/lib/origen_testers/igxl_based_tester/j750/templates/instances.txt.erb +16 -0
  50. data/lib/origen_testers/igxl_based_tester/j750/templates/patgroups.txt.erb +8 -0
  51. data/lib/origen_testers/igxl_based_tester/j750/templates/patsets.txt.erb +10 -0
  52. data/lib/origen_testers/igxl_based_tester/j750/templates/patsubrs.txt.erb +10 -0
  53. data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +547 -0
  54. data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -0
  55. data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -0
  56. data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -0
  57. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -0
  58. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -0
  59. data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -0
  60. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -0
  61. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -0
  62. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -0
  63. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -0
  64. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -0
  65. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -0
  66. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -0
  67. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -0
  68. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +515 -0
  69. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -0
  70. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -0
  71. data/lib/origen_testers/igxl_based_tester/parser.rb +102 -0
  72. data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -0
  73. data/lib/origen_testers/igxl_based_tester/parser/ac_specs.rb +0 -0
  74. data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -0
  75. data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -0
  76. data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -0
  77. data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -0
  78. data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -0
  79. data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -0
  80. data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -0
  81. data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -0
  82. data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +341 -0
  83. data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -0
  84. data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -0
  85. data/lib/origen_testers/igxl_based_tester/parser/timesets.rb +0 -0
  86. data/lib/origen_testers/igxl_based_tester/ultraflex.rb +477 -0
  87. data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +10 -0
  88. data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -0
  89. data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -0
  90. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -0
  91. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -0
  92. data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -0
  93. data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -0
  94. data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -0
  95. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -0
  96. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -0
  97. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -0
  98. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +9 -0
  99. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/instances.txt.erb +16 -0
  100. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patgroups.txt.erb +9 -0
  101. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsets.txt.erb +10 -0
  102. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsubrs.txt.erb +10 -0
  103. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +270 -0
  104. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -0
  105. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -0
  106. data/lib/origen_testers/interface.rb +183 -0
  107. data/lib/origen_testers/parser.rb +22 -0
  108. data/lib/origen_testers/parser/description_lookup.rb +62 -0
  109. data/lib/origen_testers/parser/searchable_array.rb +30 -0
  110. data/lib/origen_testers/parser/searchable_hash.rb +30 -0
  111. data/lib/origen_testers/pattern_compilers.rb +116 -0
  112. data/lib/origen_testers/pattern_compilers/assembler.rb +88 -0
  113. data/lib/origen_testers/pattern_compilers/job.rb +96 -0
  114. data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -0
  115. data/lib/origen_testers/program_generators.rb +55 -0
  116. data/lib/origen_testers/smartest_based_tester.rb +8 -0
  117. data/lib/origen_testers/smartest_based_tester/base.rb +411 -0
  118. data/lib/origen_testers/smartest_based_tester/base/flow.rb +188 -0
  119. data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +476 -0
  120. data/lib/origen_testers/smartest_based_tester/base/generator.rb +123 -0
  121. data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +23 -0
  122. data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +47 -0
  123. data/lib/origen_testers/smartest_based_tester/base/test_method.rb +143 -0
  124. data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +73 -0
  125. data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -0
  126. data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -0
  127. data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -0
  128. data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -0
  129. data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +43 -0
  130. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +166 -0
  131. data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -0
  132. data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -0
  133. data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -0
  134. data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +169 -0
  135. data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -0
  136. data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -0
  137. data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +9 -0
  138. data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -0
  139. data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -0
  140. data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -0
  141. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -0
  142. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +201 -0
  143. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -0
  144. data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -0
  145. data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -0
  146. data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -0
  147. data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -0
  148. data/lib/origen_testers/test/basic_interface.rb +17 -0
  149. data/lib/origen_testers/test/block.rb +21 -0
  150. data/lib/origen_testers/test/dut.rb +184 -0
  151. data/lib/origen_testers/test/dut2.rb +76 -0
  152. data/lib/origen_testers/test/j750_base_interface.rb +119 -0
  153. data/lib/origen_testers/test/j750_hpt_interface.rb +8 -0
  154. data/lib/origen_testers/test/j750_interface.rb +8 -0
  155. data/lib/origen_testers/test/nvm.rb +94 -0
  156. data/lib/origen_testers/test/ultraflex_interface.rb +110 -0
  157. data/lib/origen_testers/test/v93k_interface.rb +115 -0
  158. data/lib/origen_testers/timing.rb +362 -0
  159. data/lib/origen_testers/vector.rb +203 -0
  160. data/lib/origen_testers/vector_based_tester.rb +42 -0
  161. data/lib/origen_testers/vector_generator.rb +623 -0
  162. data/lib/origen_testers/vector_pipeline.rb +288 -0
  163. data/pattern/dc_instr.rb +7 -0
  164. data/pattern/delay.rb +7 -0
  165. data/pattern/mem_test.rb +8 -0
  166. data/pattern/multi_vector.rb +117 -0
  167. data/pattern/multi_vector_plus1.rb +125 -0
  168. data/pattern/nvm/j750/add_late_pins.rb +3 -0
  169. data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -0
  170. data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -0
  171. data/pattern/nvm/j750/j750_halt.rb +159 -0
  172. data/pattern/nvm/j750/j750_workout.rb +202 -0
  173. data/pattern/nvm/j750/timing.rb +73 -0
  174. data/pattern/nvm/v93k/v93k_workout.rb +136 -0
  175. data/pattern/read_write_reg.rb +58 -0
  176. data/pattern/reset.rb +4 -0
  177. data/pattern/subroutines.rb +38 -0
  178. data/program/_additional_erase.rb +7 -0
  179. data/program/_efa_resources.rb +7 -0
  180. data/program/_erase.rb +25 -0
  181. data/program/_erase_vfy.rb +5 -0
  182. data/program/_iv_resources.rb +10 -0
  183. data/program/basic_interface.rb +5 -0
  184. data/program/components/_prb2_main.rb +6 -0
  185. data/program/flow_control.rb +164 -0
  186. data/program/prb1.rb +226 -0
  187. data/program/prb1_resources.rb +28 -0
  188. data/program/prb2.rb +40 -0
  189. data/program/test.rb +20 -0
  190. data/templates/example.txt.erb +53 -0
  191. data/templates/j750/_vt_flow.txt.erb +8 -0
  192. data/templates/j750/_vt_instances.txt.erb +4 -0
  193. data/templates/j750/program_sheet.txt.erb +9 -0
  194. data/templates/manifest/v93k.yaml.erb +22 -0
  195. data/templates/web/index.md.erb +51 -0
  196. data/templates/web/layouts/_basic.html.erb +15 -0
  197. data/templates/web/partials/_navbar.html.erb +22 -0
  198. data/templates/web/release_notes.md.erb +5 -0
  199. metadata +332 -0
@@ -0,0 +1,38 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ class TestMethods
5
+ # Base class of all test method libraries
6
+ class BaseTml
7
+ # Returns the test_methods object for the current flow
8
+ attr_reader :test_methods
9
+
10
+ def initialize(test_methods)
11
+ @test_methods = test_methods
12
+ end
13
+
14
+ def method_missing(method, *args, &block)
15
+ if definitions[method]
16
+ m = platform::TestMethod.new methods: definitions[method].dup,
17
+ attrs: (args.first || {}),
18
+ type: method,
19
+ library: self
20
+ test_methods.add(m)
21
+ m
22
+ else
23
+ super
24
+ end
25
+ end
26
+
27
+ def platform
28
+ Origen.interface.platform
29
+ end
30
+
31
+ def definitions
32
+ @definitions || self.class::TEST_METHODS
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,19 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ class TestMethods
5
+ class CustomTml < BaseTml
6
+ def initialize(test_methods, definitions)
7
+ @definitions = definitions
8
+ @klass = definitions[:class_name]
9
+ super test_methods
10
+ end
11
+
12
+ def klass
13
+ @klass || ''
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,147 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ class TestMethods
5
+ class DcTml < BaseTml
6
+ TEST_METHODS = {
7
+ continuity: {
8
+ pinlist: [:string, '@'],
9
+ test_current: [:current, 10.uA],
10
+ settling_time: [:time, 1.ms],
11
+ measurement_mode: [:string, 'PPMUpar', %w(PPMUpar ProgLoad)],
12
+ polarity: [:string, 'SPOL', ['SPOL' 'BPOL']],
13
+ precharge_to_zero_vol: [:string, 'ON', %w(ON OFF)],
14
+ test_name: [:string, 'passVolt_mv'],
15
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
16
+ },
17
+ dps_connectivity: {
18
+ dps_pins: [:string, '@'],
19
+ test_name: [:string, 'DPS_ForceSense'],
20
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
21
+ },
22
+ dps_status: {
23
+ dps_pins: [:string, '@'],
24
+ constant_current: [:string, 'OFF', %w(ON OFF)],
25
+ unregulated: [:string, 'OFF', %w(ON OFF)],
26
+ over_voltage: [:string, 'OFF', %w(ON OFF)],
27
+ over_power_temp: [:string, 'OFF', %w(ON OFF)],
28
+ test_name: [:string, 'DPS_Status'],
29
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
30
+ },
31
+ dvm: {
32
+ class_name: 'DVM',
33
+ pinlist: [:string, '@'],
34
+ settling_time: [:time, 0],
35
+ measure_mode: [:string, 'PPMUpar', %w(PPMUpar ProgLoad)],
36
+ test_name: [:string, 'passVoltageLimit_mV'],
37
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
38
+ },
39
+ general_pmu: {
40
+ class_name: 'GeneralPMU',
41
+ pinlist: [:string, '@'],
42
+ force_mode: [:string, 'VOLT', %w(VOLT CURR)],
43
+ force_value: [:force_mode, 3800.mV],
44
+ spmu_clamp: [:current, 0],
45
+ precharge: [:string, 'OFF', %w(ON OFF)],
46
+ precharge_voltage: [:voltage, 0],
47
+ settling_time: [:time, 0],
48
+ tester_state: [:string, 'CONNECTED', %w(CONNECTED DISCONNECTED UNCHANGED)],
49
+ termination: [:string, 'OFF', %w(ON OFF)],
50
+ measure_mode: [:string, 'PPMUpar', %w(PPMUpar PPMUser SPMUser)],
51
+ relay_switch_mode: [:string, 'DEFAULT(BBM)', ['DEFAULT(BBM)', 'BBM', 'MBB', 'PARALLEL']],
52
+ ppmu_clamp_low: [:voltage, 0],
53
+ ppmu_clamp_high: [:voltage, 0],
54
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)],
55
+ test_name: [:string, 'passLimit_uA_mV']
56
+ },
57
+ high_z: {
58
+ pinlist: [:string, '@'],
59
+ force_voltage: [:voltage, 2500.mV],
60
+ settling_time: [:time, 0],
61
+ relay_switch_mode: [:string, 'DEFAULT(BBM)', ['DEFAULT(BBM)', 'BBM', 'MBB', 'PARALLEL']],
62
+ test_name: [:string, 'passCurrent_uA'],
63
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
64
+ },
65
+ leakage: {
66
+ pinlist: [:string, '@'],
67
+ measure: [:string, 'BOTH', %w(BOTH LOW HIGH)],
68
+ force_voltage_low: [:voltage, 400.mV],
69
+ force_voltage_high: [:voltage, 3800.mV],
70
+ spmu_clamp_current_low: [:current, 0],
71
+ spmu_clamp_current_high: [:current, 0],
72
+ ppmu_pre_charge: [:string, 'ON', %w(ON OFF)],
73
+ precharge_voltage_low: [:voltage, 0],
74
+ precharge_voltage_high: [:voltage, 0],
75
+ settling_time_low: [:time, 0],
76
+ settling_time_high: [:time, 0],
77
+ pre_function: [:string, 'NO', %w(NO ALL ToStopVEC ToStopCYC)],
78
+ control_test_num_off_functional: [:string, 'NO', %w(NO ALL ToStopVEC ToStopCYC)],
79
+ stop_cyc_vec_low: [:integer, 0],
80
+ stop_cyc_vec_high: [:integer, 0],
81
+ measure_mode: [:string, 'PPMUpar', %w(PPMUpar PPMUser SPMUser)],
82
+ relay_switch_mode: [:string, 'DEFAULT(BBM)', ['DEFAULT(BBM)', 'BBM', 'MBB', 'PARALLEL']],
83
+ test_name: [:string, '(passCurrentLow_uA,passCurrentHigh_uA)'],
84
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
85
+ },
86
+ operating_current: {
87
+ dps_pins: [:string, '@'],
88
+ samples: [:integer, 4],
89
+ delay_time: [:time, 0],
90
+ termination: [:string, 'OFF', %w(ON OFF)],
91
+ test_name: [:string, 'passCurrLimit_uA'],
92
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
93
+ },
94
+ output_dc: {
95
+ class_name: 'OutputDC',
96
+ pinlist: [:string, ''],
97
+ mode: [:string, 'PROGRAMLOAD', %w(PROGRAMLOAD, PPMU SPMU PPMUTERM SPMUTERM)],
98
+ measure_level: [:string, 'BOTH', %(BOTH LOW HIGH)],
99
+ force_current_low: [:current, 0],
100
+ force_current_high: [:current, 0],
101
+ max_pass_low: [:voltage, 0],
102
+ min_pass_low: [:voltage, 0],
103
+ max_pass_high: [:voltage, 0],
104
+ min_pass_high: [:voltage, 0],
105
+ settling_time_low: [:time, 0],
106
+ settling_time_high: [:time, 0],
107
+ spmu_clamp_voltage_low: [:voltage, 0],
108
+ spmu_clamp_voltage_high: [:voltage, 0],
109
+ vector_range: [:string, ''],
110
+ test_name: [:string, '(OutputDC_LowLevel[V],OutputDC_HighLevel[V])'],
111
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
112
+ },
113
+ production_iddq: {
114
+ dps_pins: [:string, 'Vee'],
115
+ disconnect_pins: [:string, ''],
116
+ settling_time: [:time, 0],
117
+ stop_mode: [:string, 'ToStopVEC', %w(ToStopVEC ToStopCYC)],
118
+ str_stop_vec_cyc_num: [:string, ''],
119
+ samples: [:integer, 16],
120
+ check_functional: [:string, 'ON', %w(ON OFF)],
121
+ control_test_num_of_functional: [:string, 'OFF', %w(ON OFF)],
122
+ ganged_mode: [:string, 'OFF', %w(ON OFF)],
123
+ test_name: [:string, 'passCurrLimit_uA'],
124
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
125
+ },
126
+ standby_current: {
127
+ dps_pins: [:string, '@'],
128
+ samples: [:integer, 16],
129
+ termination: [:string, 'OFF', %w(ON OFF)],
130
+ settling_time: [:time, 0],
131
+ test_name: [:string, 'passCurrLimit_uA'],
132
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
133
+ }
134
+ }
135
+
136
+ def dc_test
137
+ self
138
+ end
139
+
140
+ def klass
141
+ 'dc_tml.DcTest'
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,43 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ class TestMethods
5
+ class Limits
6
+ attr_reader :test_method
7
+ attr_accessor :lo_limit, :hi_limit
8
+
9
+ def initialize(test_method)
10
+ @test_method = test_method
11
+ end
12
+
13
+ def to_s
14
+ if !lo_limit && !hi_limit
15
+ "\"#{test_name}\"" + ' = "":"NA":"":"NA":"":"":""'
16
+ elsif !lo_limit
17
+ "\"#{test_name}\"" + " = \"\":\"NA\":\"#{hi_limit}\":\"LE\":\"\":\"\":\"0\""
18
+ elsif !hi_limit
19
+ "\"#{test_name}\"" + " = \"#{lo_limit}\":\"GE\":\"\":\"NA\":\"\":\"\":\"0\""
20
+ else
21
+ "\"#{test_name}\"" + " = \"#{lo_limit}\":\"GE\":\"#{hi_limit}\":\"LE\":\"\":\"\":\"0\""
22
+ end
23
+ end
24
+
25
+ def set_lo_limit(val)
26
+ self.lo_limit = val
27
+ end
28
+
29
+ def set_hi_limit(val)
30
+ self.hi_limit = val
31
+ end
32
+
33
+ private
34
+
35
+ def test_name
36
+ name = test_method.test_name if test_method.respond_to?(:test_name)
37
+ name || 'Functional'
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,166 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ class TestSuite
5
+ ATTRS =
6
+ %w(name
7
+ comment
8
+
9
+ timing_equation timing_spec timing_set
10
+ level_equation level_spec level_set
11
+ analog_set
12
+ pattern
13
+ context
14
+ test_type
15
+ test_method
16
+
17
+ test_number
18
+ test_level
19
+
20
+ bypass
21
+ set_pass
22
+ set_fail
23
+ hold
24
+ hold_on_fail
25
+ output_on_pass
26
+ output_on_fail
27
+ pass_value
28
+ fail_value
29
+ per_pin_on_pass
30
+ per_pin_on_fail
31
+ log_mixed_signal_waveform
32
+ fail_per_label
33
+ ffc_enable
34
+ log_first
35
+ ffv_enable
36
+ frg_enable
37
+ hardware_dsp_disable
38
+ )
39
+
40
+ ALIASES = {
41
+ tim_equ_set: :timing_equation,
42
+ tim_spec_set: :timing_spec,
43
+ timset: :timing_set,
44
+ timeset: :timing_set,
45
+ time_set: :timing_set,
46
+ lev_equ_set: :level_equation,
47
+ lev_spec_set: :level_spec,
48
+ levset: :level_set,
49
+ levels: :level_set,
50
+ pin_levels: :level_set,
51
+ anaset: :analog_set,
52
+ test_num: :test_number,
53
+ test_function: :test_method,
54
+ value_on_pass: :pass_value,
55
+ value_on_fail: :fail_value,
56
+ seqlbl: :pattern,
57
+ mx_waves_enable: :log_mixed_signal_waveform,
58
+ hw_dsp_disable: :hardware_dsp_disable,
59
+ ffc_on_fail: :log_first
60
+ }
61
+
62
+ DEFAULTS = {
63
+ output_on_pass: true,
64
+ output_on_fail: true,
65
+ pass_value: true,
66
+ fail_value: true,
67
+ per_pin_on_pass: true,
68
+ per_pin_on_fail: true
69
+ }
70
+
71
+ # Generate accessors for all attributes and their aliases
72
+ ATTRS.each do |attr|
73
+ attr_accessor attr.to_sym
74
+ end
75
+
76
+ # Define the aliases
77
+ ALIASES.each do |_alias, val|
78
+ define_method("#{_alias}=") do |v|
79
+ send("#{val}=", v)
80
+ end
81
+ define_method("#{_alias}") do
82
+ send(val)
83
+ end
84
+ end
85
+
86
+ def initialize(name, attrs = {})
87
+ self.name = name
88
+ # Set the defaults
89
+ DEFAULTS.each do |k, v|
90
+ send("#{k}=", v)
91
+ end
92
+ # Then the values that have been supplied
93
+ attrs.each do |k, v|
94
+ send("#{k}=", v) if respond_to?("#{k}=")
95
+ end
96
+ end
97
+
98
+ def lines
99
+ l = []
100
+ l << ' override = 1;'
101
+ l << " override_tim_equ_set = #{wrap_if_string(timing_equation)};" if timing_equation
102
+ l << " override_lev_equ_set = #{wrap_if_string(level_equation)};" if level_equation
103
+ l << " override_tim_spec_set = #{wrap_if_string(timing_spec)};" if timing_spec
104
+ l << " override_lev_spec_set = #{wrap_if_string(level_spec)};" if level_spec
105
+ l << " override_anaset = #{wrap_if_string(analog_set)};" if analog_set
106
+ l << " override_timset = #{wrap_if_string(timing_set)};" if timing_set
107
+ l << " override_levset = #{wrap_if_string(level_set)};" if level_set
108
+ l << " override_seqlbl = #{wrap_if_string(pattern)};" if pattern
109
+ l << " override_test_number = #{test_number};" if test_number
110
+ l << " override_testf = #{test_method.id};" if test_method
111
+ l << " test_level = #{test_level};" if test_level
112
+ l << " ffc_on_fail = #{wrap_if_string(log_first)};" if log_first
113
+ l << " comment = \"#{comment}\";" if comment
114
+ l << "local_flags = #{flags};"
115
+ l << ' site_match = 2;'
116
+ l << ' site_control = "parallel:";'
117
+ l
118
+ end
119
+
120
+ def method_missing(method, *args, &block)
121
+ if test_method && test_method.respond_to?(method)
122
+ test_method.send(method, *args, &block)
123
+ else
124
+ super
125
+ end
126
+ end
127
+
128
+ def respond_to?(method)
129
+ (test_method && test_method.respond_to?(method)) || super
130
+ end
131
+
132
+ private
133
+
134
+ def flags
135
+ f = []
136
+ f << 'bypass' if bypass
137
+ f << 'set_pass' if set_pass
138
+ f << 'set_fail' if set_fail
139
+ f << 'hold' if hold
140
+ f << 'hold_on_fail' if hold_on_fail
141
+ f << 'output_on_pass' if output_on_pass
142
+ f << 'output_on_fail' if output_on_fail
143
+ f << 'value_on_pass' if pass_value
144
+ f << 'value_on_fail' if fail_value
145
+ f << 'per_pin_on_pass' if per_pin_on_pass
146
+ f << 'per_pin_on_fail' if per_pin_on_fail
147
+ f << 'mx_waves_enable' if log_mixed_signal_waveform
148
+ f << 'fail_per_label' if fail_per_label
149
+ f << 'ffc_enable' if ffc_enable
150
+ f << 'ffv_enable' if ffv_enable
151
+ f << 'frg_enable' if frg_enable
152
+ f << 'hw_dsp_disable' if hardware_dsp_disable
153
+ f.join(', ')
154
+ end
155
+
156
+ def wrap_if_string(value)
157
+ if value.is_a?(String)
158
+ "\"#{value}\""
159
+ else
160
+ value
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,58 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ class TestSuites
5
+ # Origen::Tester::Generator not included since test suites do not have their
6
+ # own top-level sheet, they will be incorporated within the flow sheet
7
+
8
+ attr_accessor :flow, :collection
9
+
10
+ def initialize(flow)
11
+ @flow = flow
12
+ @collection = []
13
+ end
14
+
15
+ def filename
16
+ flow.filename
17
+ end
18
+
19
+ def add(name, options = {})
20
+ name = make_unique(name)
21
+ suite = platform::TestSuite.new(name, options)
22
+ @collection << suite
23
+ # c = Origen.interface.consume_comments
24
+ # Origen.interface.descriptions.add_for_test_definition(name, c)
25
+ suite
26
+ end
27
+ alias_method :run, :add
28
+ alias_method :run_and_branch, :add
29
+
30
+ def platform
31
+ Origen.interface.platform
32
+ end
33
+
34
+ def finalize
35
+ collection.each do |suite|
36
+ if suite.pattern
37
+ flow.pattern_master.add suite.pattern
38
+ Origen.interface.pattern_master.add suite.pattern
39
+ end
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def make_unique(name)
46
+ @existing_names ||= {}
47
+ if @existing_names[name]
48
+ @existing_names[name] += 1
49
+ "#{name}_#{@existing_names[name]}"
50
+ else
51
+ @existing_names[name] = 0
52
+ name
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end