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,8 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K < Base
4
+ require 'origen_testers/smartest_based_tester/v93k/generator.rb'
5
+ end
6
+ end
7
+ V93K = SmartestBasedTester::V93K
8
+ end
@@ -0,0 +1,89 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ # Responsible for building V93K test programs from a collection of sub-programs
5
+ class Builder
6
+ require 'yaml'
7
+
8
+ autoload :Flow, 'origen_testers/smartest_based_tester/v93k/builder/flow'
9
+ autoload :PatternMaster, 'origen_testers/smartest_based_tester/v93k/builder/pattern_master'
10
+
11
+ attr_reader :manifest
12
+
13
+ def build(manifest, options = {})
14
+ @manifest_dir = Pathname.new(manifest).dirname.to_s
15
+ @manifest = YAML.load_file(manifest).with_indifferent_access
16
+ parse_sub_programs
17
+ render(options)
18
+ end
19
+
20
+ private
21
+
22
+ def render(options)
23
+ manifest[:flows].each do |name, flow|
24
+ flow_file = nil
25
+ pm_file = nil
26
+
27
+ flow.each do |sub_program|
28
+ unless flows[sub_program]
29
+ puts "Flow #{name} includes sub-program #{sub_program}, but it has not been defined!"
30
+ exit 1
31
+ end
32
+ flow_file ||= Flow.new
33
+ flow_file.add_sub_flow(flows[sub_program])
34
+ if pattern_masters[sub_program]
35
+ pm_file ||= PatternMaster.new
36
+ pm_file.add_sub_file(pattern_masters[sub_program])
37
+ end
38
+ end
39
+
40
+ compile_options = {
41
+ action: :compile,
42
+ files: "#{Origen.root!}/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb",
43
+ output_file_name: "#{name}.flow",
44
+ output_sub_dir: 'testflow',
45
+ options: { program: flow_file }
46
+ }.merge(options)
47
+
48
+ Origen.app.runner.launch(compile_options)
49
+
50
+ if pm_file
51
+ compile_options = {
52
+ action: :compile,
53
+ files: "#{Origen.root!}/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb",
54
+ output_file_name: "#{name}.pmfl",
55
+ output_sub_dir: 'vectors',
56
+ options: { program: pm_file }
57
+ }.merge(options)
58
+ end
59
+ Origen.app.runner.launch(compile_options)
60
+ end
61
+ end
62
+
63
+ def parse_sub_programs
64
+ manifest[:sub_programs].each do |sub_program|
65
+ name = sub_program[:name]
66
+ if sub_program[:flow]
67
+ flows[name] = Flow.new(find_file(sub_program[:flow]))
68
+ end
69
+ if sub_program[:pattern_master]
70
+ pattern_masters[name] = PatternMaster.new(find_file(sub_program[:pattern_master]))
71
+ end
72
+ end
73
+ end
74
+
75
+ def find_file(file)
76
+ Origen.file_handler.clean_path_to(file, default_dir: @manifest_dir)
77
+ end
78
+
79
+ def flows
80
+ @flows ||= {}
81
+ end
82
+
83
+ def pattern_masters
84
+ @pattern_masters ||= {}
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,169 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ class Builder
5
+ # Responsible for modelling/building the contents of a V93K flow file
6
+ class Flow
7
+ attr_reader :information, :declarations, :flags, :testmethodparameters,
8
+ :testmethodlimits, :testmethods, :test_suites, :test_flow, :binning,
9
+ :hardware_bin_descriptions, :file
10
+
11
+ def initialize(file = nil)
12
+ @information = {}
13
+ @declarations = {}
14
+ @flags = {}
15
+ @testmethodparameters = {}
16
+ @testmethodlimits = {}
17
+ @testmethods = {}
18
+ @test_suites = {}
19
+ @test_flow = []
20
+ @binning = []
21
+ @hardware_bin_descriptions = {}
22
+ @groups = {}
23
+ @file = file
24
+ parse_file if file
25
+ end
26
+
27
+ def add_sub_flow(flow)
28
+ combine(flow, :information, exclude: 'test_revision')
29
+ combine(flow, :declarations)
30
+ combine(flow, :flags)
31
+ add_test_methods(flow)
32
+ add_test_suites(flow)
33
+ add_flow(flow)
34
+ (binning << flow.binning).flatten!.uniq!
35
+ combine(flow, :hardware_bin_descriptions)
36
+ end
37
+
38
+ private
39
+
40
+ def parse_file
41
+ current_section = nil
42
+ current = nil
43
+ File.open(file) do |f|
44
+ f.each_line do |line|
45
+ if current_section
46
+ if line =~ /^\s*end\s*$/
47
+ current_section = nil
48
+ current = nil
49
+ else
50
+ case current_section
51
+ when :information, :declarations, :flags, :hardware_bin_descriptions
52
+ if line =~ /^\s*(.*)\s*=\s*(.*)\s*$/
53
+ send(current_section)[Regexp.last_match(1).strip] = Regexp.last_match(2).strip
54
+ end
55
+ when :testmethodparameters, :testmethodlimits, :testmethods, :test_suites
56
+ if line =~ /^\s*(.*):\s*$/
57
+ current = Regexp.last_match(1)
58
+ send(current_section)[current] = {}
59
+ elsif current
60
+ if line =~ /^\s*(.*)\s*=\s*(.*)\s*$/
61
+ send(current_section)[current][Regexp.last_match(1).strip] = Regexp.last_match(2).strip
62
+ end
63
+ end
64
+ when :binning
65
+ binning << line.strip
66
+ when :test_flow
67
+ add_flow_line(line)
68
+ end
69
+ end
70
+ else
71
+ if line =~ /^\s*(information|declarations|flags|testmethodparameters|testmethodlimits|testmethods|test_suites|test_flow|binning|hardware_bin_descriptions)\s*$/
72
+ current_section = Regexp.last_match(1).to_sym
73
+ current = nil
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ def groups
81
+ @groups
82
+ end
83
+
84
+ def add_flow(flow)
85
+ flow.test_flow.each { |l| add_flow_line(l) }
86
+ end
87
+
88
+ def add_flow_line(line)
89
+ line.strip!
90
+ # Make group names unique as required
91
+ if line =~ /\s*},\s*open\s*,\s*("|')(.*)("|'),.*/
92
+ group = Regexp.last_match(2).strip
93
+ if groups[group]
94
+ line = line.sub(group, "#{group} #{groups[group]}")
95
+ groups[group] += 1
96
+ else
97
+ groups[group] = 1
98
+ end
99
+ end
100
+ test_flow << line
101
+ end
102
+
103
+ def combine(flow, attribute, options = {})
104
+ exclude = [options[:exclude]].flatten.compact
105
+ flow.send(attribute).each do |key, val|
106
+ unless exclude.include?(key)
107
+ if send(attribute)[key]
108
+ if send(attribute)[key] != val
109
+ puts "#{flow} assigns #{attribute} attribute #{key} to #{val}, however it is already assigned to #{send(attribute)[key]}"
110
+ exit 1
111
+ end
112
+ else
113
+ send(attribute)[key] = val
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+ def add_test_methods(flow)
120
+ flow.testmethods.each do |id, tm|
121
+ if testmethods[id]
122
+ nid = "tm_#{tm_ix}"
123
+ testmethods[nid] = tm
124
+ testmethodparameters[nid] = flow.testmethodparameters[id]
125
+ testmethodlimits[nid] = flow.testmethodlimits[id]
126
+ flow.test_suites.each do |tsid, ts|
127
+ if ts['override_testf'] == "#{id};"
128
+ ts['override_testf'] = "#{nid};"
129
+ end
130
+ end
131
+ else
132
+ testmethods[id] = tm
133
+ testmethodparameters[id] = flow.testmethodparameters[id]
134
+ testmethodlimits[id] = flow.testmethodlimits[id]
135
+ end
136
+ end
137
+ end
138
+
139
+ def add_test_suites(flow)
140
+ flow.test_suites.each do |id, ts|
141
+ if test_suites[id]
142
+ i = 1
143
+ nid = id
144
+ while test_suites[nid]
145
+ nid = "#{id}_#{i}"
146
+ i += 1
147
+ end
148
+ test_suites[nid] = ts
149
+ flow.test_flow.map! do |line|
150
+ if line =~ /(run|run_and_branch)\(#{id}\)/
151
+ line.sub(id, nid)
152
+ else
153
+ line
154
+ end
155
+ end
156
+ else
157
+ test_suites[id] = ts
158
+ end
159
+ end
160
+ end
161
+
162
+ def tm_ix
163
+ testmethods.size + 1
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,54 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ class Builder
5
+ # Responsible for modelling/building the contents of a V93K pattern master file
6
+ class PatternMaster
7
+ attr_reader :file, :paths
8
+
9
+ def initialize(file = nil)
10
+ @file = file
11
+ @paths = {}
12
+ parse_file if file
13
+ end
14
+
15
+ def add_sub_file(pm)
16
+ pm.paths.each do |path, files|
17
+ if paths[path]
18
+ paths[path] += files
19
+ paths[path].uniq!
20
+ else
21
+ paths[path] = files
22
+ end
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def parse_file
29
+ File.open(file) do |f|
30
+ capture = nil
31
+ current_path = nil
32
+ f.each_line do |line|
33
+ line = line.strip
34
+ if line =~ /^\s*path:\s*$/
35
+ capture = :path
36
+ elsif capture == :path
37
+ paths[line] ||= []
38
+ current_path = paths[line]
39
+ capture = nil
40
+ elsif line =~ /^\s*files:\s*$/
41
+ capture = :file
42
+ elsif capture == :file
43
+ unless line.empty?
44
+ current_path << line
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,10 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ require 'origen_testers/smartest_based_tester/base/flow'
5
+ class Flow < Base::Flow
6
+ TEMPLATE = "#{Origen.root!}/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb"
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ require 'origen_testers/smartest_based_tester/base/flow_node'
5
+ class FlowNode < Base::FlowNode
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ # Include this module in an interface class to make it a V93K interface and to give
5
+ # access to the V93K program generator API
6
+ module Generator
7
+ extend ActiveSupport::Concern
8
+
9
+ require_all "#{Origen.root!}/lib/origen_testers/smartest_based_tester/v93k"
10
+ require 'origen_testers/smartest_based_tester/base/generator'
11
+
12
+ included do
13
+ include Base::Generator
14
+ PLATFORM = V93K
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ require 'origen_testers/smartest_based_tester/base/pattern_compiler'
5
+ class PatternCompiler < Base::PatternCompiler
6
+ TEMPLATE = "#{Origen.root!}/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb"
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ require 'origen_testers/smartest_based_tester/base/pattern_master'
5
+ class PatternMaster < Base::PatternMaster
6
+ TEMPLATE = "#{Origen.root!}/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb"
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ AI_DIR_FILE
2
+ tmp_dir ./tmp
3
+ tmf_dir ./
4
+ vbc_dir ./
5
+ avc_dir ./AVC/
6
+ pinconfig_file ./<%= $dut.name.to_s.upcase %>.cfg
7
+ single_binary_pattern_dir ./BINL/
8
+
9
+ AI_V2B_OPTIONS -ALT -c <%= $dut.name.to_s.upcase %>.vbc -k -z PS800
10
+
11
+ PATTERNS name tmf_file v2b_options
12
+ % subroutines.uniq.sort.each do |pattern|
13
+ <%= pattern.sub(/\..*/, '') %> <%= $dut.name.to_s.upcase %>.tmf -s
14
+ % end
15
+ % patterns.uniq.sort.each do |pattern|
16
+ <%= pattern.sub(/\..*/, '') %> <%= $dut.name.to_s.upcase %>.tmf
17
+ % end
@@ -0,0 +1,201 @@
1
+ hp93000,testflow,0.1
2
+ language_revision = 1;
3
+
4
+ information
5
+
6
+ % program = options[:program]
7
+ % if program
8
+ % program.information.each do |key, val|
9
+ % unless key == "test_revision"
10
+ <%= key %> = <%= val %>
11
+ % end
12
+ % end
13
+ % else
14
+ -- STOPDIFF
15
+ test_revision = "<%= Origen.app.version %>";
16
+ -- STARTDIFF
17
+ % end
18
+
19
+ end
20
+ --------------------------------------------------
21
+ declarations
22
+
23
+ % if program
24
+ % program.declarations.each do |key, val|
25
+ <%= key %> = <%= val %>
26
+ % end
27
+ % else
28
+ % flow_control_variables.each do |var|
29
+ @<%= var.to_s.upcase %> = -1;
30
+ % end
31
+ % end
32
+ end
33
+ --------------------------------------------------
34
+ implicit_declarations
35
+
36
+ end
37
+ -----------------------------------------------------------------
38
+ flags
39
+
40
+ % if program
41
+ % program.flags.each do |key, val|
42
+ <%= key %> = <%= val %>
43
+ % end
44
+ % else
45
+ datalog_formatter = 0;
46
+ datalog_sample_size = 1;
47
+ graphic_result_displa = 1;
48
+ state_display = 0;
49
+ print_wafermap = 0;
50
+ ink_wafer = 0;
51
+ max_reprobes = 1;
52
+ temp_monitor = 1;
53
+ calib_age_monitor = 1;
54
+ diag_monitor = 1;
55
+ current_monitor = 1;
56
+ log_events_enable = 1;
57
+ set_pass_level = 0;
58
+ set_fail_level = 0;
59
+ set_bypass_level = 0;
60
+ hold_on_fail = 0;
61
+ global_hold = 0;
62
+ debug_mode = 0;
63
+ debug_analog = 0;
64
+ parallel_mode = 1;
65
+ site_match_mode = 2;
66
+ global_overon = 0;
67
+ limits_enable = 0;
68
+ test_number_enable = 1;
69
+ test_number_inc = 1;
70
+ log_cycles_before = 0;
71
+ log_cycles_after = 0;
72
+ unburst_mode = 0;
73
+ sqst_mode = 0;
74
+ warn_as_fail = 1;
75
+ use_hw_dsp = 0;
76
+ dsp_file_enable = 0;
77
+ buffer_testflow_log = 0;
78
+ check_testmethod_api = 0;
79
+ stdf_generation = 1;
80
+ tm_crash_as_fatal = 1;
81
+ hidden_datalog_mode = 0;
82
+ multibin_mode = 0;
83
+ % end
84
+ end
85
+ -----------------------------------------------------------------
86
+ testmethodparameters
87
+ % if program
88
+ % program.testmethodparameters.each do |id, parameters|
89
+ <%= id %>:
90
+ % parameters.each do |key, val|
91
+ <%= key %> = <%= val %>
92
+ % end
93
+ % end
94
+ % else
95
+ % test_methods.collection.each do |method|
96
+ <%= method.id %>:
97
+ % method.parameters.each do |name, type|
98
+ "<%= name.is_a?(String) ? name : name.to_s.camelize(:lower) %>" = "<%= method.format(name) %>";
99
+ % end
100
+ % end
101
+ % end
102
+ end
103
+ --------------------------------------------------
104
+ testmethodlimits
105
+ % if program
106
+ % program.testmethodlimits.each do |id, parameters|
107
+ <%= id %>:
108
+ % parameters.each do |key, val|
109
+ <%= key %> = <%= val %>
110
+ % end
111
+ % end
112
+ % else
113
+ % test_methods.collection.each do |method|
114
+ % if method.respond_to?(:limits) && method.limits
115
+ <%= method.id %>:
116
+ <%= method.limits %>;
117
+ % end
118
+ % end
119
+ % end
120
+ end
121
+ --------------------------------------------------
122
+ testmethods
123
+ % if program
124
+ % program.testmethods.each do |id, parameters|
125
+ <%= id %>:
126
+ % parameters.each do |key, val|
127
+ <%= key %> = <%= val %>
128
+ % end
129
+ % end
130
+ % else
131
+ % test_methods.collection.each do |method|
132
+ <%= method.id %>:
133
+ testmethod_class = "<%= method.klass %>";
134
+ % end
135
+ % end
136
+ end
137
+ --------------------------------------------------
138
+ test_suites
139
+ % if program
140
+ % program.test_suites.each do |id, parameters|
141
+ <%= id %>:
142
+ % parameters.each do |key, val|
143
+ <%= key %> = <%= val %>
144
+ % end
145
+ % end
146
+ % else
147
+ % test_suites.collection.each do |suite|
148
+ <%= suite.name %>:
149
+ % suite.lines.each do |line|
150
+ <%= line %>
151
+ % end
152
+ % end
153
+ % end
154
+ end
155
+ --------------------------------------------------
156
+ test_flow
157
+ % if program
158
+ % program.test_flow.each do |line|
159
+ <%= line %>
160
+ % end
161
+ % else
162
+ {
163
+ % flow_control_variables.each do |var|
164
+ @<%= var.to_s.upcase %> = -1;
165
+ % end
166
+ }, open,"Init Flow Control Vars", ""
167
+ % collection.each do |node|
168
+ % unless node.rendered? || node.deleted? || node.empty?
169
+ % node.lines.each do |line|
170
+ <%= line %>
171
+ % end
172
+ % end
173
+ % end
174
+ % end
175
+ end
176
+ -------------------------------------------------
177
+ binning
178
+ % if program
179
+ % program.binning.each do |line|
180
+ <%= line %>
181
+ % end
182
+ % else
183
+ otherwise bin = "db", "", , bad, noreprobe, red, , not_over_on;
184
+ % end
185
+ end
186
+ -------------------------------------------------
187
+ context
188
+
189
+ end
190
+ --------------------------------------------------
191
+ hardware_bin_descriptions
192
+ % if program
193
+ % program.hardware_bin_descriptions.each do |key, val|
194
+ <%= key %> = <%= val %>
195
+ % end
196
+ % else
197
+ % hardware_bin_descriptions.each do |bin, desc|
198
+ <%= bin %> = "<%= desc %>";
199
+ % end
200
+ % end
201
+ end