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,123 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ module Generator
5
+ extend ActiveSupport::Concern
6
+
7
+ autoload :Placeholder, 'origen_testers/generator/placeholder'
8
+
9
+ included do
10
+ include Interface # adds the interface helpers/Origen hook-up
11
+ end
12
+
13
+ # This is just to give all interfaces an initialize that takes
14
+ # one argument. The super is important for cases where this module
15
+ # is included late via Testers::ProgramGenerators
16
+ def initialize(options = {})
17
+ super
18
+ @initialized = true
19
+ end
20
+
21
+ def add_tml(name, methods)
22
+ custom_tmls[name] = methods
23
+ end
24
+ alias_method :add_test_method_library, :add_tml
25
+
26
+ # @api private
27
+ def at_flow_start
28
+ end
29
+
30
+ # @api private
31
+ def at_run_start
32
+ flow.at_run_start
33
+ @@flow_sheets = nil
34
+ end
35
+ alias_method :reset_globals, :at_run_start
36
+
37
+ def resources_filename=(name)
38
+ end
39
+
40
+ def flow(filename = Origen.file_handler.current_file.basename('.rb').to_s)
41
+ f = filename.to_sym
42
+ if Origen.interface.resources_mode?
43
+ f = f.to_s.sub(/_resources?/, '').to_sym
44
+ end
45
+ return flow_sheets[f] if flow_sheets[f] # will return flow if already existing
46
+ p = platform::Flow.new
47
+ p.inhibit_output if Origen.interface.resources_mode?
48
+ p.filename = f
49
+ p.test_suites ||= platform::TestSuites.new(p)
50
+ p.test_methods ||= platform::TestMethods.new(p)
51
+ p.pattern_master ||= platform::PatternMaster.new(p)
52
+ flow_sheets[f] = p
53
+ end
54
+
55
+ # Returns a top-level pattern master file which will contain all patterns from
56
+ # all flows. Additionally each flow has its own pattern master file containing
57
+ # only the patterns for the specific flow.
58
+ def pattern_master
59
+ @pattern_master ||= begin
60
+ m = platform::PatternMaster.new(manually_register: true)
61
+ name = 'complete.pmfl'
62
+ name = "#{Origen.config.program_prefix}_#{name}" if Origen.config.program_prefix
63
+ m.filename = name
64
+ m
65
+ end
66
+ end
67
+
68
+ # Generates a pattern compiler configuration file (.aiv) to compile all
69
+ # patterns referenced in all flows.
70
+ def pattern_compiler
71
+ @pattern_compiler ||= begin
72
+ m = platform::PatternCompiler.new(manually_register: true)
73
+ name = 'complete.aiv'
74
+ name = "#{Origen.config.program_prefix}_#{name}" if Origen.config.program_prefix
75
+ m.filename = name
76
+ m
77
+ end
78
+ end
79
+
80
+ def test_suites
81
+ flow.test_suites
82
+ end
83
+
84
+ def test_methods
85
+ flow.test_methods
86
+ end
87
+
88
+ def flow_sheets
89
+ @@flow_sheets ||= {}
90
+ end
91
+
92
+ # Returns an array containing all sheet generators.
93
+ # All Origen program generators must implement this method
94
+ def sheet_generators # :nodoc:
95
+ g = []
96
+ flow_sheets.each do |_name, sheet|
97
+ g << sheet
98
+ g << sheet.pattern_master
99
+ end
100
+ g << pattern_master if pattern_master
101
+ g << pattern_compiler unless referenced_subroutine_patterns.empty? && referenced_patterns.empty?
102
+ g
103
+ end
104
+
105
+ # Returns an array containing all flow sheet generators.
106
+ # All Origen program generators must implement this method
107
+ def flow_generators
108
+ g = []
109
+ flow_sheets.each do |_name, sheet|
110
+ g << sheet
111
+ end
112
+ g
113
+ end
114
+
115
+ private
116
+
117
+ def custom_tmls
118
+ @custom_tmls ||= {}
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,23 @@
1
+ require 'pathname'
2
+ module OrigenTesters
3
+ module SmartestBasedTester
4
+ class Base
5
+ class PatternCompiler
6
+ include OrigenTesters::Generator
7
+
8
+ attr_accessor :filename
9
+
10
+ def initialize(flow = nil)
11
+ end
12
+
13
+ def subroutines
14
+ Origen.interface.referenced_subroutine_patterns
15
+ end
16
+
17
+ def patterns
18
+ Origen.interface.referenced_patterns
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,47 @@
1
+ require 'pathname'
2
+ module OrigenTesters
3
+ module SmartestBasedTester
4
+ class Base
5
+ class PatternMaster
6
+ include OrigenTesters::Generator
7
+
8
+ attr_reader :flow, :paths
9
+ attr_accessor :filename
10
+
11
+ def initialize(flow = nil)
12
+ @flow = flow
13
+ @paths = {}
14
+ end
15
+
16
+ def filename
17
+ @filename || flow.filename.sub('.flow', '.pmfl')
18
+ end
19
+
20
+ def subdirectory
21
+ 'vectors'
22
+ end
23
+
24
+ def add(name, options = {})
25
+ name, subdir = extract_subdir(name, options)
26
+ name += '.binl.gz' unless name =~ /binl.gz$/
27
+ Origen.interface.referenced_patterns << name
28
+ paths[subdir] ||= []
29
+ # Just add it, duplicates will be removed at render time
30
+ paths[subdir] << name unless paths[subdir].include?(name)
31
+ end
32
+
33
+ private
34
+
35
+ def extract_subdir(name, options = {})
36
+ p = Pathname.new(name.to_s)
37
+ name = p.basename.to_s
38
+ subdir = p.dirname.to_s
39
+ # if subdir == '.'
40
+ # # In future may support setting a default subdir via the interface
41
+ # end
42
+ [name, subdir]
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,143 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ class TestMethod
5
+ FORMAT_TYPES = [:current, :voltage, :time, :string, :integer]
6
+
7
+ # Returns the object representing the test method library that the
8
+ # given test method is defined in
9
+ attr_reader :library
10
+ attr_reader :type
11
+ attr_reader :id
12
+ alias_method :name, :id
13
+ # Returns an hash corresponding to the parameters that the given test method has.
14
+ # The keys are the parameter names and the values are the parameter type.
15
+ attr_reader :parameters
16
+ attr_accessor :class_name
17
+ attr_accessor :abs_class_name
18
+
19
+ def initialize(options)
20
+ @type = options[:type]
21
+ @library = options[:library]
22
+ @class_name = options[:methods].delete(:class_name)
23
+ @parameters = {}
24
+ # Add limits by default
25
+ define_singleton_method('limits') do
26
+ @limits
27
+ end
28
+ @limits = TestMethods::Limits.new(self)
29
+ # Add any methods
30
+ if options[:methods][:methods]
31
+ methods = options[:methods][:methods]
32
+ @finalize = methods.delete(:finalize)
33
+ methods.each do |method_name, function|
34
+ var_name = "@#{method_name}".gsub(/=|\?/, '_')
35
+ instance_variable_set(var_name, function)
36
+ define_singleton_method method_name do |*args|
37
+ instance_variable_get(var_name).call(self, *args)
38
+ end
39
+ end
40
+ end
41
+ # Create attributes corresponding to the test method type represented
42
+ # by this method instance
43
+ options[:methods].each do |attr, type_default|
44
+ unless attr == :limits_type || attr == :aliases || attr == :methods
45
+ clean_attr = clean_attr_name(attr)
46
+ type = type_default[0]
47
+ default = type_default[1]
48
+ allowed = type_default[2]
49
+ @parameters[attr] = type
50
+ aliases = [clean_attr]
51
+ aliases << clean_attr.underscore if clean_attr.underscore != clean_attr
52
+ aliases.each do |alias_|
53
+ define_singleton_method("#{alias_}=") do |v|
54
+ if allowed
55
+ unless allowed.include?(v)
56
+ fail "Cannot set #{alias_} to #{v}, valid values are: #{allowed.join(', ')}"
57
+ end
58
+ end
59
+ instance_variable_set("@#{clean_attr}", v)
60
+ end
61
+ define_singleton_method(alias_) do
62
+ instance_variable_get("@#{clean_attr}")
63
+ end
64
+ end
65
+ send("#{clean_attr}=", default)
66
+ end
67
+ end
68
+ if options[:methods][:aliases]
69
+ options[:methods][:aliases].each do |alias_, attr|
70
+ clean_attr = clean_attr_name(attr)
71
+ define_singleton_method("#{alias_}=") do |v|
72
+ send("#{clean_attr}=", v)
73
+ end
74
+ define_singleton_method(alias_) do
75
+ send(clean_attr)
76
+ end
77
+ end
78
+ end
79
+ # Finally set any initial values that have been supplied
80
+ options[:attrs].each do |k, v|
81
+ send("#{k}=", v) if respond_to?("#{k}=")
82
+ end
83
+ end
84
+
85
+ def format(attr)
86
+ clean_attr = clean_attr_name(attr)
87
+ val = send(clean_attr)
88
+ if FORMAT_TYPES.include?(parameters[attr])
89
+ type = parameters[attr]
90
+ else
91
+ # The type is based on the value of another attribute
92
+ type = send(clean_attr_name(parameters[attr]))
93
+ end
94
+ case type
95
+ when :current, 'CURR'
96
+ "#{val}[A]"
97
+ when :voltage, 'VOLT'
98
+ "#{val}[V]"
99
+ when :time
100
+ "#{val}[s]"
101
+ when :frequency
102
+ "#{val}[Hz]"
103
+ when :string, :integer
104
+ val.to_s
105
+ else
106
+ fail "Unknown type for attribute #{attr}: #{type}"
107
+ end
108
+ end
109
+
110
+ def klass
111
+ @abs_class_name ||
112
+ "#{library.klass}.#{@class_name || type.to_s.camelize}"
113
+ end
114
+
115
+ def finalize
116
+ @finalize
117
+ end
118
+
119
+ def method_missing(method, *args, &block)
120
+ if limits && limits.respond_to?(method)
121
+ limits.send(method, *args, &block)
122
+ else
123
+ super
124
+ end
125
+ end
126
+
127
+ def respond_to?(method)
128
+ (limits && limits.respond_to?(method)) || super
129
+ end
130
+
131
+ private
132
+
133
+ def clean_attr_name(name)
134
+ name.to_s.gsub(/\.|-/, '_')
135
+ end
136
+
137
+ def id=(val)
138
+ @id = val
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,73 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ class TestMethods
5
+ # Origen::Tester::Generator not included since test methods do not have their
6
+ # own top-level sheet, they will be incorporated within the flow sheet
7
+
8
+ require 'origen_testers/smartest_based_tester/base/test_methods/base_tml'
9
+ require 'origen_testers/smartest_based_tester/base/test_methods/limits'
10
+ autoload :AcTml, 'origen_testers/smartest_based_tester/base/test_methods/ac_tml'
11
+ autoload :DcTml, 'origen_testers/smartest_based_tester/base/test_methods/dc_tml'
12
+ autoload :CustomTml, 'origen_testers/smartest_based_tester/base/test_methods/custom_tml'
13
+
14
+ attr_accessor :flow, :collection
15
+
16
+ def initialize(flow)
17
+ @flow = flow
18
+ @collection = []
19
+ @ix = 0
20
+ end
21
+
22
+ def filename
23
+ flow.filename
24
+ end
25
+
26
+ def add(test_method, options = {})
27
+ collection << test_method
28
+ test_method.send 'id=', "tm_#{collection.size}"
29
+ test_method
30
+ end
31
+
32
+ def [](ix)
33
+ collection[ix]
34
+ end
35
+
36
+ # Returns the AC test method library
37
+ def ac_tml
38
+ @ac_tml ||= AcTml.new(self)
39
+ end
40
+
41
+ # Returns the DC test method library
42
+ def dc_tml
43
+ @dc_tml ||= DcTml.new(self)
44
+ end
45
+
46
+ # Creates an accessor for custom test method libraries the first time they are called
47
+ def method_missing(method, *args, &block)
48
+ custom_tmls = Origen.interface.send(:custom_tmls)
49
+ if custom_tmls[method]
50
+ tml = CustomTml.new(self, custom_tmls[method])
51
+ instance_variable_set "@#{method}", tml
52
+ define_singleton_method method do
53
+ instance_variable_get("@#{method}")
54
+ end
55
+ send(method)
56
+ else
57
+ super
58
+ end
59
+ end
60
+
61
+ def respond_to?(method)
62
+ !!Origen.interface.send(:custom_tmls)[method] || super
63
+ end
64
+
65
+ def finalize
66
+ collection.each do |method|
67
+ method.finalize.call(method) if method.finalize
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,33 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ class TestMethods
5
+ class AcTml < BaseTml
6
+ TEST_METHODS = {
7
+ frequency_by_digital_capture: {
8
+ class_name: 'Frequency_byDigitalCapture',
9
+ vector_variable_name: [:string, ''],
10
+ algorithm: [:string, 'FFT', %w(FFT LinearFit)],
11
+ sample_period: [:time, 0],
12
+ target_frequency: [:frequency, 0],
13
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)],
14
+ test_name: [:string, 'passFrequency_MHz']
15
+ },
16
+ functional_test: {
17
+ test_name: [:string, 'Functional'],
18
+ output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
19
+ }
20
+ }
21
+
22
+ def ac_test
23
+ self
24
+ end
25
+
26
+ def klass
27
+ 'ac_tml.AcTest'
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end