origen_testers 0.5.7 → 0.6.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 (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