origen_testers 0.5.7 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/config/shared_commands.rb +6 -0
  3. data/config/version.rb +2 -2
  4. data/lib/commands/run.rb +44 -0
  5. data/lib/origen_testers.rb +19 -1
  6. data/lib/origen_testers/flow.rb +382 -0
  7. data/lib/origen_testers/generator.rb +32 -29
  8. data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -0
  9. data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -0
  10. data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -0
  11. data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -0
  12. data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -0
  13. data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +97 -0
  14. data/lib/origen_testers/igxl_based_tester/base/flow.rb +390 -115
  15. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +4 -54
  16. data/lib/origen_testers/igxl_based_tester/base/generator.rb +257 -11
  17. data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -0
  18. data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -0
  19. data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -0
  20. data/lib/origen_testers/igxl_based_tester/base/levelset.rb +109 -0
  21. data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -0
  22. data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +33 -1
  23. data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -0
  24. data/lib/origen_testers/igxl_based_tester/base/timesets.rb +47 -0
  25. data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +2 -2
  26. data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -0
  27. data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +4 -0
  28. data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -0
  29. data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -0
  30. data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -0
  31. data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -0
  32. data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -0
  33. data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +137 -0
  34. data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -0
  35. data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -0
  36. data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -0
  37. data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -0
  38. data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -0
  39. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +58 -0
  40. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +58 -0
  41. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +95 -0
  42. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +2 -2
  43. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +121 -0
  44. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +24 -0
  45. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +137 -0
  46. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +4 -0
  47. data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -0
  48. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -0
  49. data/lib/origen_testers/interface.rb +41 -6
  50. data/lib/origen_testers/no_interface.rb +7 -0
  51. data/lib/origen_testers/origen_ext/application/runner.rb +25 -0
  52. data/lib/origen_testers/origen_ext/generator.rb +37 -0
  53. data/lib/origen_testers/origen_ext/generator/flow.rb +70 -0
  54. data/lib/origen_testers/origen_ext/generator/resources.rb +21 -0
  55. data/lib/origen_testers/program_generators.rb +0 -1
  56. data/lib/origen_testers/smartest_based_tester/base/flow.rb +158 -134
  57. data/lib/origen_testers/smartest_based_tester/base/generator.rb +2 -3
  58. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +4 -0
  59. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +5 -6
  60. data/lib/origen_testers/test/dut.rb +5 -0
  61. data/lib/origen_testers/test/j750_base_interface.rb +0 -3
  62. data/lib/origen_testers/test/ultraflex_interface.rb +230 -4
  63. data/lib/origen_testers/test/v93k_interface.rb +5 -23
  64. data/program/components/_temp.rb +6 -0
  65. data/program/flow_control.rb +190 -62
  66. data/program/prb1.rb +13 -50
  67. data/program/prb2.rb +0 -16
  68. data/program/test.rb +12 -3
  69. data/program/uflex_resources.rb +159 -0
  70. metadata +66 -16
  71. data/lib/origen_testers/doc.rb +0 -224
  72. data/lib/origen_testers/doc/generator.rb +0 -124
  73. data/lib/origen_testers/doc/generator/flow.rb +0 -69
  74. data/lib/origen_testers/doc/generator/flow_line.rb +0 -201
  75. data/lib/origen_testers/doc/generator/test.rb +0 -66
  76. data/lib/origen_testers/doc/generator/test_group.rb +0 -64
  77. data/lib/origen_testers/doc/generator/tests.rb +0 -45
  78. data/lib/origen_testers/doc/model.rb +0 -160
  79. data/lib/origen_testers/generator/flow_control_api.rb +0 -611
  80. data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +0 -476
  81. data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +0 -9
@@ -57,6 +57,10 @@ module OrigenTesters
57
57
  opcode: 'Test',
58
58
  result: 'Fail'
59
59
  },
60
+ test_defer_limits: {
61
+ opcode: 'Test-defer-limits',
62
+ result: 'Fail'
63
+ },
60
64
  cz: {
61
65
  opcode: 'characterize',
62
66
  result: 'None'
@@ -198,60 +202,10 @@ module OrigenTesters
198
202
  "#{l}"
199
203
  end
200
204
 
201
- def job
202
- if !if_jobs.empty? && !unless_jobs.empty?
203
- fail "Both if and unless jobs have been defined for test: #{parameter}"
204
- elsif !if_jobs.empty?
205
- if_jobs.join(',')
206
- elsif !unless_jobs.empty?
207
- unless_jobs.map { |j| "!#{j}" }.join(',')
208
- else
209
- ''
210
- end
211
- end
212
- alias_method :jobs, :job
213
-
214
205
  def unless_enable=(*args)
215
206
  end
216
207
  alias_method :unless_enabled=, :unless_enable=
217
208
 
218
- def if_jobs
219
- @if_jobs ||= []
220
- end
221
-
222
- def unless_jobs
223
- @unless_jobs ||= []
224
- end
225
-
226
- def if_job=(jobs)
227
- [jobs].flatten.compact.each do |job|
228
- job = job.to_s.upcase
229
- if job =~ /!/
230
- self.unless_job = job
231
- else
232
- if_jobs << job unless if_jobs.include?(job)
233
- end
234
- end
235
- end
236
- alias_method :if_jobs=, :if_job=
237
- alias_method :add_if_jobs, :if_job=
238
- alias_method :add_if_job, :if_job=
239
-
240
- def unless_job=(jobs)
241
- [jobs].flatten.compact.each do |job|
242
- job = job.to_s.upcase
243
- job.gsub!('!', '')
244
- unless_jobs << job unless unless_jobs.include?(job)
245
- end
246
- end
247
- alias_method :unless_jobs=, :unless_job=
248
- alias_method :add_unless_jobs, :unless_job=
249
- alias_method :add_unless_job, :unless_job=
250
-
251
- def continue_on_fail
252
- self.result = 'None'
253
- end
254
-
255
209
  def continue_pass
256
210
  self.result = 'Pass'
257
211
  end
@@ -268,10 +222,6 @@ module OrigenTesters
268
222
  # self.debug_sites = "All"
269
223
  # end
270
224
 
271
- def set_flag_on_fail
272
- self.flag_fail = "#{id}_FAILED"
273
- end
274
-
275
225
  def set_flag_on_pass
276
226
  self.flag_pass = "#{id}_PASSED"
277
227
  end
@@ -24,23 +24,38 @@ module OrigenTesters
24
24
 
25
25
  # @api private
26
26
  def at_flow_start
27
+ unless Origen.interface.resources_mode?
28
+ flow.at_flow_start if flow
29
+ end
30
+ @@pinmaps_filename = nil
27
31
  @@test_instances_filename = nil
28
32
  @@patsets_filename = nil
29
33
  @@patgroups_filename = nil
34
+ @@edgesets_filename = nil
35
+ @@timesets_filename = nil
36
+ @@levelsets_filename = nil
37
+ @@ac_specsets_filename = nil
38
+ @@dc_specsets_filename = nil
30
39
  end
31
40
 
32
41
  # @api private
33
42
  def at_run_start
34
43
  flow.at_run_start
44
+ @@pinmap_sheets = nil
35
45
  @@test_instance_sheets = nil
36
46
  @@patset_sheets = nil
37
47
  @@flow_sheets = nil
38
48
  @@patgroup_sheets = nil
49
+ @@edgeset_sheets = nil
50
+ @@timeset_sheets = nil
51
+ @@levelset_sheets = nil
52
+ @@ac_specset_sheets = nil
53
+ @@dc_specset_sheets = nil
39
54
  end
40
55
  alias_method :reset_globals, :at_run_start
41
56
 
42
57
  # Convenience method to allow the current name for the test instance,
43
- # patsets and patgroups sheets to be set to the same value.
58
+ # patsets, patgroups and timesets sheets to be set to the same value.
44
59
  #
45
60
  # # my j750 interface
46
61
  #
@@ -48,13 +63,33 @@ module OrigenTesters
48
63
  #
49
64
  # # The above is equivalent to:
50
65
  #
66
+ # pinmaps_filename = "common"
51
67
  # test_instances_filename = "common"
52
68
  # patsets_filename = "common"
53
69
  # patgroups_filename = "common"
70
+ # edgesets_filename = "common"
71
+ # timesets_filename = "common"
72
+ # levelsets_filename = "common"
73
+ # ac_specsets_filename = "common"
74
+ # dc_specsets_filename = "common"
54
75
  def resources_filename=(name)
76
+ self.pinmaps_filename = name
55
77
  self.test_instances_filename = name
56
78
  self.patsets_filename = name
57
79
  self.patgroups_filename = name
80
+ self.edgesets_filename = name
81
+ self.timesets_filename = name
82
+ self.levelsets_filename = name
83
+ self.ac_specsets_filename = name
84
+ self.dc_specsets_filename = name
85
+ end
86
+
87
+ # Set the name of the current pinmap sheet. This does not change
88
+ # the name of the current sheet, but rather sets the name of the sheet that
89
+ # will be generated the next time you access pinmaps.
90
+ def pinmaps_filename=(name)
91
+ @pinmaps_filename = name
92
+ @@pinmaps_filename = name
58
93
  end
59
94
 
60
95
  # Set the name of the current test instances sheet. This does not change
@@ -81,6 +116,51 @@ module OrigenTesters
81
116
  @@patgroups_filename = name
82
117
  end
83
118
 
119
+ # Set the name of the current edgesets sheet. This does not change
120
+ # the name of the current sheet, but rather sets the name of the sheet that
121
+ # will be generated the next time you access patgroups.
122
+ def edgesets_filename=(name)
123
+ @edgesets_filename = name
124
+ @@edgesets_filename = name
125
+ end
126
+
127
+ # Set the name of the current timesets sheet. This does not change
128
+ # the name of the current sheet, but rather sets the name of the sheet that
129
+ # will be generated the next time you access patgroups.
130
+ def timesets_filename=(name)
131
+ @timesets_filename = name
132
+ @@timesets_filename = name
133
+ end
134
+
135
+ # Set the name of the current levelsets sheet. This does not change
136
+ # the name of the current sheet, but rather sets the name of the sheet that
137
+ # will be generated the next time you access patgroups.
138
+ def levelsets_filename=(name)
139
+ @levelsets_filename = name
140
+ @@levelsets_filename = name
141
+ end
142
+
143
+ # Set the name of the current AC specsets sheet. This does not change
144
+ # the name of the current sheet, but rather sets the name of the sheet that
145
+ # will be generated the next time you access patgroups.
146
+ def ac_specsets_filename=(name)
147
+ @ac_specsets_filename = name
148
+ @@ac_specsets_filename = name
149
+ end
150
+
151
+ # Set the name of the current DC specsets sheet. This does not change
152
+ # the name of the current sheet, but rather sets the name of the sheet that
153
+ # will be generated the next time you access patgroups.
154
+ def dc_specsets_filename=(name)
155
+ @dc_specsets_filename = name
156
+ @@dc_specsets_filename = name
157
+ end
158
+
159
+ # Returns the name of the current pinmaps sheet
160
+ def pinmaps_filename
161
+ @@pinmaps_filename ||= @pinmaps_filename || 'global'
162
+ end
163
+
84
164
  # Returns the name of the current test instances sheet
85
165
  def test_instances_filename
86
166
  @@test_instances_filename ||= @test_instances_filename || 'global'
@@ -96,6 +176,36 @@ module OrigenTesters
96
176
  @@patgroups_filename ||= @patgroups_filename || 'global'
97
177
  end
98
178
 
179
+ # Returns the name of the current edgesets sheet
180
+ def edgesets_filename
181
+ @@edgesets_filename ||= @edgesets_filename || 'global'
182
+ end
183
+
184
+ # Returns the name of the current timesets sheet
185
+ def timesets_filename
186
+ @@timesets_filename ||= @timesets_filename || 'global'
187
+ end
188
+
189
+ # Returns the name of the current levelsets sheet
190
+ def levelsets_filename
191
+ @@levelsets_filename ||= @levelsets_filename || 'global'
192
+ end
193
+
194
+ # Returns the name of the current AC specset sheet
195
+ def ac_specsets_filename
196
+ @@ac_specsets_filename ||= @ac_specsets_filename || 'global'
197
+ end
198
+
199
+ # Returns the name of the current DC specset sheet
200
+ def dc_specsets_filename
201
+ @@dc_specsets_filename ||= @dc_specsets_filename || 'global'
202
+ end
203
+
204
+ # Returns a hash containing all pinmap sheets
205
+ def pinmap_sheets
206
+ @@pinmap_sheets ||= {}
207
+ end
208
+
99
209
  # Returns a hash containing all test instance sheets
100
210
  def test_instance_sheets
101
211
  @@test_instance_sheets ||= {}
@@ -116,12 +226,39 @@ module OrigenTesters
116
226
  @@patgroup_sheets ||= {}
117
227
  end
118
228
 
229
+ # Returns a hash containing all edgeset sheets
230
+ def edgeset_sheets
231
+ @@edgeset_sheets ||= {}
232
+ end
233
+
234
+ # Returns a hash containing all timeset sheets
235
+ def timeset_sheets
236
+ @@timeset_sheets ||= {}
237
+ end
238
+
239
+ # Returns a hash containing all levelset sheets
240
+ def levelset_sheets
241
+ @@levelset_sheets ||= {}
242
+ end
243
+
244
+ # Returns a hash containing all AC specsets sheets
245
+ def ac_specset_sheets
246
+ @@ac_specset_sheets ||= {}
247
+ end
248
+
249
+ # Returns a hash containing all DC specsets sheets
250
+ def dc_specset_sheets
251
+ @@dc_specset_sheets ||= {}
252
+ end
253
+
119
254
  # Returns an array containing all sheet generators where a sheet generator is a flow,
120
- # test instance, patset or pat group sheet.
255
+ # test instance, patset, pat group, edgeset, timeset, or AC/DC specset sheet.
121
256
  # All Origen program generators must implement this method
122
257
  def sheet_generators # :nodoc:
123
258
  g = []
124
- [flow_sheets, test_instance_sheets, patset_sheets, patgroup_sheets].each do |sheets|
259
+ [pinmap_sheets, flow_sheets, test_instance_sheets, patset_sheets,
260
+ patgroup_sheets, edgeset_sheets, timeset_sheets, levelset_sheets,
261
+ ac_specset_sheets, dc_specset_sheets].each do |sheets|
125
262
  sheets.each do |name, sheet|
126
263
  g << sheet
127
264
  end
@@ -139,6 +276,21 @@ module OrigenTesters
139
276
  g
140
277
  end
141
278
 
279
+ # Returns the current pinmaps sheet (as defined by the current value of
280
+ # pinmaps_filename).
281
+ #
282
+ # Pass in a filename argument to have a specific sheet returned instead.
283
+ #
284
+ # If the sheet does not exist yet it will be created.
285
+ def pinmaps(filename = pinmaps_filename)
286
+ f = filename.to_sym
287
+ return pinmap_sheets[f] if pinmap_sheets[f]
288
+ p = platform::Pinmap.new
289
+ p.filename = f
290
+ pinmap_sheets[f] = p
291
+ end
292
+ alias_method :pin_maps, :pinmaps
293
+
142
294
  # Returns the current test instances sheet (as defined by the current value of
143
295
  # test_instances_filename).
144
296
  #
@@ -191,14 +343,17 @@ module OrigenTesters
191
343
  # Pass in a filename argument to have a specific sheet returned instead.
192
344
  #
193
345
  # If the sheet does not exist yet it will be created.
194
- def flow(filename = Origen.file_handler.current_file.basename('.rb').to_s)
195
- # DH here need to reset the flow!!
196
- f = filename.to_sym
197
- return flow_sheets[f] if flow_sheets[f] # will return flow if already existing
198
- p = platform::Flow.new
199
- p.inhibit_output if Origen.interface.resources_mode?
200
- p.filename = f
201
- flow_sheets[f] = p
346
+ def flow(filename = nil)
347
+ if filename || Origen.file_handler.current_file
348
+ filename ||= Origen.file_handler.current_file.basename('.rb').to_s
349
+ # DH here need to reset the flow!!
350
+ f = filename.to_sym
351
+ return flow_sheets[f] if flow_sheets[f] # will return flow if already existing
352
+ p = platform::Flow.new
353
+ p.inhibit_output if Origen.interface.resources_mode?
354
+ p.filename = f
355
+ flow_sheets[f] = p
356
+ end
202
357
  end
203
358
 
204
359
  # Returns the current pattern groups sheet (as defined by the current value of
@@ -217,6 +372,97 @@ module OrigenTesters
217
372
  alias_method :pat_groups, :patgroups
218
373
  alias_method :pattern_groups, :patgroups
219
374
 
375
+ # Returns the current collection of edges that are defined. These are
376
+ # used in support of creating edgeset/timeset sheets. They do not have
377
+ # an associated sheet of their own.
378
+ def edges
379
+ @@edges ||= platform::Edges.new
380
+ end
381
+ alias_method :edge_collection, :edges
382
+
383
+ # Returns the current edgesets sheet (as defined by the current value of
384
+ # edgesets_filename).
385
+ #
386
+ # Pass in a filename argument to have a specific sheet returned instead.
387
+ #
388
+ # If the sheet does not exist yet it will be created.
389
+ def edgesets(filename = edgesets_filename)
390
+ f = filename.to_sym
391
+ return edgeset_sheets[f] if edgeset_sheets[f]
392
+ e = platform::Edgesets.new
393
+ e.filename = f
394
+ edgeset_sheets[f] = e
395
+ end
396
+ alias_method :edge_sets, :edgesets
397
+
398
+ # Returns the current timesets sheet (as defined by the current value of
399
+ # timesets_filename).
400
+ #
401
+ # Pass in a filename argument to have a specific sheet returned instead.
402
+ #
403
+ # If the sheet does not exist yet it will be created.
404
+ def timesets(filename = timesets_filename)
405
+ f = filename.to_sym
406
+ return timeset_sheets[f] if timeset_sheets[f]
407
+ t = platform::Timesets.new
408
+ t.filename = f
409
+ timeset_sheets[f] = t
410
+ end
411
+ alias_method :time_sets, :timesets
412
+ alias_method :timing_sets, :timesets
413
+
414
+ # Returns the current collection of levels that are defined. These are
415
+ # used in support of creating levelset sheets. They do not have
416
+ # an associated sheet of their own.
417
+ def levels
418
+ @@levels ||= platform::Levels.new
419
+ end
420
+ alias_method :level_collection, :levels
421
+
422
+ # Returns the current levelsets sheet (as defined by the current value of
423
+ # levelsets_filename).
424
+ #
425
+ # Pass in a filename argument to have a specific sheet returned instead.
426
+ #
427
+ # If the sheet does not exist yet it will be created.
428
+ def levelsets(filename = levelsets_filename)
429
+ f = filename.to_sym
430
+ return levelset_sheets[f] if levelset_sheets[f]
431
+ t = platform::Levelset.new
432
+ t.filename = f
433
+ levelset_sheets[f] = t
434
+ end
435
+ alias_method :time_sets, :timesets
436
+ alias_method :timing_sets, :timesets
437
+
438
+ # Returns the current AC specset sheet (as defined by the current value of
439
+ # ac_specsets_filename).
440
+ #
441
+ # Pass in a filename argument to have a specific sheet returned instead.
442
+ #
443
+ # If the sheet does not exist yet it will be created.
444
+ def ac_specsets(filename = ac_specsets_filename)
445
+ f = filename.to_sym
446
+ return ac_specset_sheets[f] if ac_specset_sheets[f]
447
+ s = platform::ACSpecsets.new
448
+ s.filename = f
449
+ ac_specset_sheets[f] = s
450
+ end
451
+
452
+ # Returns the current DC specset sheet (as defined by the current value of
453
+ # dc_specsets_filename).
454
+ #
455
+ # Pass in a filename argument to have a specific sheet returned instead.
456
+ #
457
+ # If the sheet does not exist yet it will be created.
458
+ def dc_specsets(filename = dc_specsets_filename)
459
+ f = filename.to_sym
460
+ return dc_specset_sheets[f] if dc_specset_sheets[f]
461
+ s = platform::DCSpecsets.new
462
+ s.filename = f
463
+ dc_specset_sheets[f] = s
464
+ end
465
+
220
466
  private
221
467
 
222
468
  # Custom test instance libraries
@@ -0,0 +1,59 @@
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class Base
4
+ class PinLevelSingle
5
+ attr_accessor :vil, :vih # Input level information
6
+ attr_accessor :vol, :voh # Output level information
7
+ attr_accessor :vcl, :vch # Clamp level information
8
+ attr_accessor :vt # Termination level information
9
+ attr_accessor :voutlotyp, :vouthityp, :dmode
10
+
11
+ def initialize(options = {}) # :nodoc:
12
+ options = {
13
+ vil: 0, # Input drive low
14
+ vih: 1.8, # Input drive high
15
+ vol: 1.0, # Output compare low
16
+ voh: 0.8, # Output compare high
17
+ vcl: -1, # Voltage clamp low
18
+ vch: 2.5, # Voltage clamp high
19
+ vt: 0.9, # Termination voltage
20
+ voutlotyp: 0, #
21
+ vouthityp: 0, #
22
+ dmode: 'Largeswing-VT' # Driver mode (possibly ATE-specific)
23
+ }.merge(options)
24
+ @vil = options[:vil]
25
+ @vih = options[:vih]
26
+ @vol = options[:vol]
27
+ @voh = options[:voh]
28
+ @vcl = options[:vcl]
29
+ @vch = options[:vch]
30
+ @vt = options[:vt]
31
+ @voutlotyp = options[:voutlotyp]
32
+ @vouthityp = options[:vouthityp]
33
+ @dmode = options[:dmode]
34
+ end
35
+
36
+ def ==(level)
37
+ if level.is_a? PinLevelSingle
38
+ vil == level.vil &&
39
+ vih == level.vih &&
40
+ vol == level.vol &&
41
+ voh == level.voh &&
42
+ vcl == level.vcl &&
43
+ vch == level.vch &&
44
+ vt == level.vt &&
45
+ voutlotyp == level.voutlotyp &&
46
+ vouthityp == level.vouthityp &&
47
+ dmode == level.dmode
48
+ else
49
+ super
50
+ end
51
+ end
52
+
53
+ def platform
54
+ Origen.interface.platform
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end