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,217 @@
1
+ module OrigenTesters
2
+ module IGXLBasedTester
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
+ end
19
+
20
+ # @api private
21
+ def at_flow_start
22
+ @@test_instances_filename = nil
23
+ @@patsets_filename = nil
24
+ @@patgroups_filename = nil
25
+ end
26
+
27
+ # @api private
28
+ def at_run_start
29
+ flow.at_run_start
30
+ @@test_instance_sheets = nil
31
+ @@patset_sheets = nil
32
+ @@flow_sheets = nil
33
+ @@patgroup_sheets = nil
34
+ end
35
+ alias_method :reset_globals, :at_run_start
36
+
37
+ # Convenience method to allow the current name for the test instance,
38
+ # patsets and patgroups sheets to be set to the same value.
39
+ #
40
+ # # my j750 interface
41
+ #
42
+ # resources_filename = "common"
43
+ #
44
+ # # The above is equivalent to:
45
+ #
46
+ # test_instances_filename = "common"
47
+ # patsets_filename = "common"
48
+ # patgroups_filename = "common"
49
+ def resources_filename=(name)
50
+ self.test_instances_filename = name
51
+ self.patsets_filename = name
52
+ self.patgroups_filename = name
53
+ end
54
+
55
+ # Set the name of the current test instances sheet. This does not change
56
+ # the name of the current sheet, but rather sets the name of the sheet that
57
+ # will be generated the next time you access test_instances.
58
+ def test_instances_filename=(name)
59
+ @test_instances_filename = name
60
+ @@test_instances_filename = name
61
+ end
62
+
63
+ # Set the name of the current pattern sets sheet. This does not change
64
+ # the name of the current sheet, but rather sets the name of the sheet that
65
+ # will be generated the next time you access patsets.
66
+ def patsets_filename=(name)
67
+ @patsets_filename = name
68
+ @@patsets_filename = name
69
+ end
70
+
71
+ # Set the name of the current pattern groups sheet. This does not change
72
+ # the name of the current sheet, but rather sets the name of the sheet that
73
+ # will be generated the next time you access patgroups.
74
+ def patgroups_filename=(name)
75
+ @patgroups_filename = name
76
+ @@patgroups_filename = name
77
+ end
78
+
79
+ # Returns the name of the current test instances sheet
80
+ def test_instances_filename
81
+ @@test_instances_filename ||= @test_instances_filename || 'global'
82
+ end
83
+
84
+ # Returns the name of the current pat sets sheet
85
+ def patsets_filename
86
+ @@patsets_filename ||= @patsets_filename || 'global'
87
+ end
88
+
89
+ # Returns the name of the current pat groups sheet
90
+ def patgroups_filename
91
+ @@patgroups_filename ||= @patgroups_filename || 'global'
92
+ end
93
+
94
+ # Returns a hash containing all test instance sheets
95
+ def test_instance_sheets
96
+ @@test_instance_sheets ||= {}
97
+ end
98
+
99
+ # Returns a hash containing all pat set sheets
100
+ def patset_sheets
101
+ @@patset_sheets ||= {}
102
+ end
103
+
104
+ # Returns a hash containing all flow sheets
105
+ def flow_sheets
106
+ @@flow_sheets ||= {}
107
+ end
108
+
109
+ # Returns a hash containing all pat group sheets
110
+ def patgroup_sheets
111
+ @@patgroup_sheets ||= {}
112
+ end
113
+
114
+ # Returns an array containing all sheet generators where a sheet generator is a flow,
115
+ # test instance, patset or pat group sheet.
116
+ # All Origen program generators must implement this method
117
+ def sheet_generators # :nodoc:
118
+ g = []
119
+ [flow_sheets, test_instance_sheets, patset_sheets, patgroup_sheets].each do |sheets|
120
+ sheets.each do |name, sheet|
121
+ g << sheet
122
+ end
123
+ end
124
+ g
125
+ end
126
+
127
+ # Returns an array containing all flow sheet generators.
128
+ # All Origen program generators must implement this method
129
+ def flow_generators
130
+ g = []
131
+ flow_sheets.each do |name, sheet|
132
+ g << sheet
133
+ end
134
+ g
135
+ end
136
+
137
+ # Returns the current test instances sheet (as defined by the current value of
138
+ # test_instances_filename).
139
+ #
140
+ # Pass in a filename argument to have a specific sheet returned instead.
141
+ #
142
+ # If the sheet does not exist yet it will be created.
143
+ def test_instances(filename = test_instances_filename)
144
+ f = filename.to_sym
145
+ return test_instance_sheets[f] if test_instance_sheets[f]
146
+ t = platform::TestInstances.new
147
+ t.filename = f
148
+ test_instance_sheets[f] = t
149
+ end
150
+
151
+ # Returns the current pattern sets sheet (as defined by the current value of
152
+ # patsets_filename).
153
+ #
154
+ # Pass in a filename argument to have a specific sheet returned instead.
155
+ #
156
+ # If the sheet does not exist yet it will be created.
157
+ def patsets(filename = patsets_filename)
158
+ f = filename.to_sym
159
+ return patset_sheets[f] if patset_sheets[f]
160
+ p = platform::Patsets.new
161
+ p.filename = f
162
+ patset_sheets[f] = p
163
+ end
164
+ alias_method :pat_sets, :patsets
165
+ alias_method :pattern_sets, :patsets
166
+
167
+ # Returns the current pattern subroutine sheet (as defined by the current value of
168
+ # patsubrs_filename).
169
+ #
170
+ # Pass in a filename argument to have a specific sheet returned instead.
171
+ #
172
+ # If the sheet does not exist yet it will be created.
173
+ def patsubrs(filename = patsubrs_filename)
174
+ f = filename.to_sym
175
+ return patsubr_sheets[f] if patsubr_sheets[f]
176
+ p = platform::Patsubrs.new
177
+ p.filename = f
178
+ patsubr_sheets[f] = p
179
+ end
180
+ alias_method :pat_subrs, :patsubrs
181
+ alias_method :pattern_subrs, :patsubrs
182
+
183
+ # Returns the current flow sheet (as defined by the name of the current top
184
+ # level flow source file).
185
+ #
186
+ # Pass in a filename argument to have a specific sheet returned instead.
187
+ #
188
+ # If the sheet does not exist yet it will be created.
189
+ def flow(filename = Origen.file_handler.current_file.basename('.rb').to_s)
190
+ # DH here need to reset the flow!!
191
+ f = filename.to_sym
192
+ return flow_sheets[f] if flow_sheets[f] # will return flow if already existing
193
+ p = platform::Flow.new
194
+ p.inhibit_output if Origen.interface.resources_mode?
195
+ p.filename = f
196
+ flow_sheets[f] = p
197
+ end
198
+
199
+ # Returns the current pattern groups sheet (as defined by the current value of
200
+ # patgroups_filename).
201
+ #
202
+ # Pass in a filename argument to have a specific sheet returned instead.
203
+ #
204
+ # If the sheet does not exist yet it will be created.
205
+ def patgroups(filename = patgroups_filename)
206
+ f = filename.to_sym
207
+ return patgroup_sheets[f] if patgroup_sheets[f]
208
+ p = platform::Patgroups.new
209
+ p.filename = f
210
+ patgroup_sheets[f] = p
211
+ end
212
+ alias_method :pat_groups, :patgroups
213
+ alias_method :pattern_groups, :patgroups
214
+ end
215
+ end
216
+ end
217
+ end
@@ -0,0 +1,109 @@
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class Patgroup
5
+ attr_accessor :index
6
+
7
+ class Pattern
8
+ ATTRS = %w(group_name pattern_file comment)
9
+
10
+ ALIASES = {
11
+ pattern: :pattern_file
12
+ }
13
+
14
+ DEFAULTS = {
15
+ }
16
+
17
+ # Generate accessors for all attributes and their aliases
18
+ ATTRS.each do |attr|
19
+ attr_accessor attr.to_sym
20
+ end
21
+
22
+ ALIASES.each do |_alias, val|
23
+ define_method("#{_alias}=") do |v|
24
+ send("#{val}=", v)
25
+ end
26
+ define_method("#{_alias}") do
27
+ send(val)
28
+ end
29
+ end
30
+
31
+ def initialize(patgroup, attrs = {})
32
+ # Set the defaults
33
+ DEFAULTS.each do |k, v|
34
+ send("#{k}=", v)
35
+ end
36
+ # Then the values that have been supplied
37
+ self.group_name = patgroup
38
+ attrs.each do |k, v|
39
+ send("#{k}=", v)
40
+ end
41
+ end
42
+
43
+ def to_s
44
+ l = "\t"
45
+ ATTRS.each do |attr|
46
+ l += "#{send(attr)}\t"
47
+ end
48
+ "#{l}"
49
+ end
50
+ end
51
+
52
+ # Specify multiple patterns by passing an array of attributes
53
+ # as the 2nd argument:
54
+ #
55
+ # Patset.new("mrd1_pgrp", :pattern => "nvm_mrd1.PAT")
56
+ #
57
+ # Patset.new("mrd1_pgrp", [{:pattern => "nvm_mrd1.PAT"},
58
+ # {:pattern => "nvm_global_subs.PAT},
59
+ # ])
60
+ def initialize(name, attrs = {})
61
+ attrs = [attrs] unless attrs.is_a? Array
62
+ attrs.each do |pattrs|
63
+ if pattrs[:pattern]
64
+ pat = Pathname.new(pattrs[:pattern].gsub('\\', '/')).basename('.*').to_s
65
+ Origen.interface.referenced_patterns << pat
66
+ end
67
+ lines << Pattern.new(name, pattrs)
68
+ end
69
+ self.name = name
70
+ end
71
+
72
+ def ==(other_patgroup)
73
+ self.class == other_patgroup.class &&
74
+ name.to_s == other_patgroup.name.to_s &&
75
+ sorted_pattern_files == other_patgroup.sorted_pattern_files
76
+ end
77
+
78
+ def name
79
+ @name
80
+ end
81
+
82
+ def name=(n)
83
+ @name = n
84
+ lines.each { |l| l.group_name = n }
85
+ n
86
+ end
87
+
88
+ # Returns all lines in the pattern set
89
+ def lines
90
+ @lines ||= []
91
+ end
92
+
93
+ # Returns all pattern files in the pattern set in alphabetical order
94
+ def sorted_pattern_files
95
+ @lines.map(&:file_name).sort
96
+ end
97
+
98
+ # Returns the fully formatted pattern group for insertion into a patgroups sheet
99
+ def to_s
100
+ l = ''
101
+ lines.each do |line|
102
+ l += "#{line}\r\n"
103
+ end
104
+ l.chomp
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,38 @@
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class Patgroups
5
+ include ::OrigenTesters::Generator
6
+
7
+ OUTPUT_POSTFIX = 'patgroups'
8
+
9
+ def add(name, options = {})
10
+ p = platform::Patgroup.new(name, options)
11
+ collection << p
12
+ p
13
+ end
14
+
15
+ def finalize(options = {})
16
+ uniq!
17
+ sort!
18
+ end
19
+
20
+ # Present the patgroups in the final sheet in alphabetical order
21
+ def sort!
22
+ collection.sort_by!(&:name)
23
+ end
24
+
25
+ # Removes all duplicate patgroups
26
+ def uniq!
27
+ uniques = []
28
+ collection.each do |patgroup|
29
+ unless uniques.any? { |p| p == patgroup }
30
+ uniques << patgroup
31
+ end
32
+ end
33
+ self.collection = uniques
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,68 @@
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class Patset
5
+ attr_accessor :index
6
+
7
+ # Specify multiple patterns by passing an array of attributes
8
+ # as the 2nd argument:
9
+ #
10
+ # Patset.new("mrd1_pset", :pattern => "nvm_mrd1.PAT")
11
+ #
12
+ # Patset.new("mrd1_pset", [{:pattern => "nvm_mrd1.PAT"},
13
+ # {:pattern => "nvm_global_subs.PAT, :start_label => "subr"}
14
+ # ])
15
+ def initialize(name, attrs = {})
16
+ attrs = [attrs] unless attrs.is_a? Array
17
+ attrs.each do |pattrs|
18
+ if pattrs[:pattern]
19
+ pat = Pathname.new(pattrs[:pattern].gsub('\\', '/')).basename('.*').to_s
20
+ Origen.interface.referenced_patterns << pat
21
+ end
22
+ lines << platform::PatsetPattern.new(name, pattrs)
23
+ end
24
+ self.name = name
25
+ end
26
+
27
+ def ==(other_patset)
28
+ self.class == other_patset.class &&
29
+ name.to_s == other_patset.name.to_s &&
30
+ sorted_pattern_files == other_patset.sorted_pattern_files
31
+ end
32
+
33
+ def name
34
+ @name
35
+ end
36
+
37
+ def name=(n)
38
+ @name = n
39
+ lines.each { |l| l.pattern_set = n }
40
+ n
41
+ end
42
+
43
+ # Returns all lines in the pattern set
44
+ def lines
45
+ @lines ||= []
46
+ end
47
+
48
+ # Returns all pattern files in the pattern set in alphabetical order
49
+ def sorted_pattern_files
50
+ @lines.map(&:file_name).sort
51
+ end
52
+
53
+ # Returns the fully formatted pattern set for insertion into a patset sheet
54
+ def to_s
55
+ l = ''
56
+ lines.each do |line|
57
+ l += "#{line}\r\n"
58
+ end
59
+ l.chomp
60
+ end
61
+
62
+ def platform
63
+ Origen.interface.platform
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,56 @@
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class PatsetPattern
5
+ ALIASES = {
6
+ pattern: :file_name
7
+ }
8
+
9
+ def self.define
10
+ # Generate accessors for all attributes and their aliases
11
+ self::PATSET_ATTRS.each do |attr|
12
+ writer = "#{attr}=".to_sym
13
+ reader = attr.to_sym
14
+ attr_reader attr.to_sym unless method_defined? reader
15
+ attr_writer attr.to_sym unless method_defined? writer
16
+ end
17
+
18
+ ALIASES.each do |_alias, val|
19
+ writer = "#{_alias}=".to_sym
20
+ reader = _alias.to_sym
21
+ unless method_defined? writer
22
+ define_method("#{_alias}=") do |v|
23
+ send("#{val}=", v)
24
+ end
25
+ end
26
+ unless method_defined? reader
27
+ define_method("#{_alias}") do
28
+ send(val)
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ def initialize(patset, attrs = {})
35
+ # Set the defaults
36
+ self.class::PATSET_DEFAULTS.each do |k, v|
37
+ send("#{k}=", v)
38
+ end
39
+ # Then the values that have been supplied
40
+ self.pattern_set = patset
41
+ attrs.each do |k, v|
42
+ send("#{k}=", v)
43
+ end
44
+ end
45
+
46
+ def to_s
47
+ l = "\t"
48
+ self.class::PATSET_ATTRS.each do |attr|
49
+ l += "#{send(attr)}\t"
50
+ end
51
+ "#{l}"
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end