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.
- checksums.yaml +4 -4
- data/config/shared_commands.rb +6 -0
- data/config/version.rb +2 -2
- data/lib/commands/run.rb +44 -0
- data/lib/origen_testers.rb +19 -1
- data/lib/origen_testers/flow.rb +382 -0
- data/lib/origen_testers/generator.rb +32 -29
- data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -0
- data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -0
- data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -0
- data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -0
- data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -0
- data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +97 -0
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +390 -115
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +4 -54
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +257 -11
- data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -0
- data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -0
- data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -0
- data/lib/origen_testers/igxl_based_tester/base/levelset.rb +109 -0
- data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +33 -1
- data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -0
- data/lib/origen_testers/igxl_based_tester/base/timesets.rb +47 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +2 -2
- data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +4 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +137 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +58 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +58 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +95 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +2 -2
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +121 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +24 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +137 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +4 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -0
- data/lib/origen_testers/interface.rb +41 -6
- data/lib/origen_testers/no_interface.rb +7 -0
- data/lib/origen_testers/origen_ext/application/runner.rb +25 -0
- data/lib/origen_testers/origen_ext/generator.rb +37 -0
- data/lib/origen_testers/origen_ext/generator/flow.rb +70 -0
- data/lib/origen_testers/origen_ext/generator/resources.rb +21 -0
- data/lib/origen_testers/program_generators.rb +0 -1
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +158 -134
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +2 -3
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +4 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +5 -6
- data/lib/origen_testers/test/dut.rb +5 -0
- data/lib/origen_testers/test/j750_base_interface.rb +0 -3
- data/lib/origen_testers/test/ultraflex_interface.rb +230 -4
- data/lib/origen_testers/test/v93k_interface.rb +5 -23
- data/program/components/_temp.rb +6 -0
- data/program/flow_control.rb +190 -62
- data/program/prb1.rb +13 -50
- data/program/prb2.rb +0 -16
- data/program/test.rb +12 -3
- data/program/uflex_resources.rb +159 -0
- metadata +66 -16
- data/lib/origen_testers/doc.rb +0 -224
- data/lib/origen_testers/doc/generator.rb +0 -124
- data/lib/origen_testers/doc/generator/flow.rb +0 -69
- data/lib/origen_testers/doc/generator/flow_line.rb +0 -201
- data/lib/origen_testers/doc/generator/test.rb +0 -66
- data/lib/origen_testers/doc/generator/test_group.rb +0 -64
- data/lib/origen_testers/doc/generator/tests.rb +0 -45
- data/lib/origen_testers/doc/model.rb +0 -160
- data/lib/origen_testers/generator/flow_control_api.rb +0 -611
- data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +0 -476
- data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +0 -9
@@ -0,0 +1,39 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class Base
|
4
|
+
class SupplyLevel
|
5
|
+
attr_accessor :vmain, :valt # Supply level information
|
6
|
+
attr_accessor :ifold # Clamp current information
|
7
|
+
attr_accessor :delay # Supply power-up delay
|
8
|
+
|
9
|
+
def initialize(options = {}) # :nodoc:
|
10
|
+
options = {
|
11
|
+
vmain: 1.8, # Main supply voltage
|
12
|
+
valt: 1.8, # Alternate supply voltage
|
13
|
+
ifold: 1, # Supply clamp current
|
14
|
+
delay: 0 # Supply power-up delay
|
15
|
+
}.merge(options)
|
16
|
+
@vmain = options[:vmain]
|
17
|
+
@valt = options[:valt]
|
18
|
+
@ifold = options[:ifold]
|
19
|
+
@delay = options[:delay]
|
20
|
+
end
|
21
|
+
|
22
|
+
def ==(level)
|
23
|
+
if level.is_a? PinLevelSingle
|
24
|
+
vmain == level.vmain &&
|
25
|
+
valt == level.valt &&
|
26
|
+
ifold == level.ifold &&
|
27
|
+
delay == level.delay
|
28
|
+
else
|
29
|
+
super
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def platform
|
34
|
+
Origen.interface.platform
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class Base
|
4
|
+
class Levels
|
5
|
+
include ::OrigenTesters::Generator
|
6
|
+
|
7
|
+
# If levels are defined for a power group then this will return the level object
|
8
|
+
attr_accessor :pwr_group
|
9
|
+
# If levels are defined for a pin group then this will return the level object
|
10
|
+
attr_accessor :pin_group
|
11
|
+
|
12
|
+
def initialize(options = {}) # :nodoc:
|
13
|
+
@pwr_group = Hash.new { |h, k| h[k] = {} }
|
14
|
+
@pin_group = Hash.new { |h, k| h[k] = {} }
|
15
|
+
end
|
16
|
+
|
17
|
+
# Defines a new Power Level category for the given pin/group
|
18
|
+
def add_power_level(cat, options = {})
|
19
|
+
cat = cat.to_sym unless cat.is_a? Symbol
|
20
|
+
pwr_group[cat] = platform::SupplyLevel.new(options)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Defines a new Single-Ended Pin Level category for the given pin/group
|
24
|
+
def add_se_pin_level(cat, options = {})
|
25
|
+
cat = cat.to_sym unless cat.is_a? Symbol
|
26
|
+
pin_group[cat] = platform::PinLevelSingle.new(options)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class Base
|
4
|
+
class Levelset
|
5
|
+
include ::OrigenTesters::Generator
|
6
|
+
|
7
|
+
attr_accessor :pins
|
8
|
+
attr_accessor :spec_sheet
|
9
|
+
attr_accessor :ls_sheet_pins
|
10
|
+
|
11
|
+
# Levelset name
|
12
|
+
attr_accessor :name
|
13
|
+
|
14
|
+
OUTPUT_PREFIX = 'LV'
|
15
|
+
# OUTPUT_POSTFIX = 'LV'
|
16
|
+
|
17
|
+
def initialize(options = {}) # :nodoc:
|
18
|
+
@pins = {}
|
19
|
+
end
|
20
|
+
|
21
|
+
# rubocop:disable Metrics/ParameterLists
|
22
|
+
|
23
|
+
# Adds a pin level to the given levelset
|
24
|
+
def add(lsname, pin, level, options = {})
|
25
|
+
options = {
|
26
|
+
spec_sheet: 'default' # defines which specset sheet to put variables in (e.g. func, scan) when generating specset files
|
27
|
+
}.merge(options)
|
28
|
+
lsname = lsname.to_sym unless lsname.is_a? Symbol
|
29
|
+
pin = pin.to_sym unless pin.is_a? Symbol
|
30
|
+
|
31
|
+
add_level(pin, level)
|
32
|
+
@name = lsname
|
33
|
+
@spec_sheet = options[:spec_sheet]
|
34
|
+
@ls_sheet_pins = options[:ls_sheet_pins] unless @ls_sheet_pins
|
35
|
+
end
|
36
|
+
|
37
|
+
# Assigns a level object to the given pin for this levelset
|
38
|
+
def add_level(pin, level)
|
39
|
+
if @pins.key?(pin)
|
40
|
+
Origen.log.error "Pin #{pin} already exists in levelset"
|
41
|
+
else
|
42
|
+
@pins[pin] = level
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def finalize(options = {})
|
47
|
+
end
|
48
|
+
|
49
|
+
# Populate an array of pins based on the pin or pingroup
|
50
|
+
def get_pin_objects(grp)
|
51
|
+
pins = []
|
52
|
+
if Origen.top_level.pin(grp).is_a?(Origen::Pins::Pin) ||
|
53
|
+
Origen.top_level.pin(grp).is_a?(Origen::Pins::FunctionProxy)
|
54
|
+
pins << Origen.top_level.pin(grp)
|
55
|
+
elsif Origen.top_level.pin(grp).is_a?(Origen::Pins::PinCollection)
|
56
|
+
Origen.top_level.pin(grp).each do |pin|
|
57
|
+
pins << pin
|
58
|
+
end
|
59
|
+
else
|
60
|
+
Origen.log.error "Could not find pin class: #{grp} #{Origen.top_level.pin(grp).class}"
|
61
|
+
end
|
62
|
+
pins
|
63
|
+
end
|
64
|
+
|
65
|
+
# Equality check to compare full contents of 2 level objects
|
66
|
+
def levels_eql?(level1, level2)
|
67
|
+
level1 == level2
|
68
|
+
end
|
69
|
+
|
70
|
+
# Globally modify text within the level object
|
71
|
+
def gsub_levels!(level, old_val, new_val)
|
72
|
+
# determine if object is a power level (conatins :vmain) or a SE pin level (:vil)
|
73
|
+
if level.respond_to?(:vmain)
|
74
|
+
level.vmain = level.vmain.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
75
|
+
level.valt = level.valt.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
76
|
+
level.ifold = level.ifold.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
77
|
+
# level.delay = level.delay.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
78
|
+
elsif level.respond_to?(:vil)
|
79
|
+
level.vil = level.vil.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
80
|
+
level.vih = level.vih.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
81
|
+
level.vol = level.vol.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
82
|
+
level.voh = level.voh.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
83
|
+
level.vcl = level.vcl.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
84
|
+
level.vch = level.vch.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
85
|
+
level.vt = level.vt.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
86
|
+
level.voutlotyp = level.voutlotyp.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
87
|
+
level.vouthityp = level.vouthityp.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
88
|
+
level.dmode = level.dmode.gsub(/#{Regexp.escape(old_val)}/, new_val)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def format_uflex_level(data, options = {})
|
93
|
+
options = {
|
94
|
+
}.merge(options)
|
95
|
+
|
96
|
+
if data !~ /^\s*$/
|
97
|
+
data = data.gsub(/^/, '=')
|
98
|
+
end
|
99
|
+
data = data.gsub(/(\W)([a-zA-Z])/, '\1_\2')
|
100
|
+
data = data.gsub(/(\*\s*)_([kmun]{0,1}[AVs]{1})/, '\1\2')
|
101
|
+
end
|
102
|
+
|
103
|
+
def platform
|
104
|
+
Origen.interface.platform
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class Base
|
4
|
+
class Pinmap
|
5
|
+
include ::OrigenTesters::Generator
|
6
|
+
|
7
|
+
attr_accessor :pins
|
8
|
+
attr_accessor :pin_groups
|
9
|
+
attr_accessor :power_pins
|
10
|
+
attr_accessor :utility_pins
|
11
|
+
|
12
|
+
PIN_TYPES = ['I/O', 'I', 'O']
|
13
|
+
PWR_TYPES = ['Power']
|
14
|
+
UTL_TYPES = ['Utility', 'I/O', 'I', 'O']
|
15
|
+
|
16
|
+
def initialize # :nodoc:
|
17
|
+
@pins = {}
|
18
|
+
@pin_groups = Hash.new { |h, k| h[k] = {} }
|
19
|
+
@power_pins = {}
|
20
|
+
@utility_pins = {}
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_pin(pin_name, attrs = {})
|
24
|
+
attrs = {
|
25
|
+
type: 'I/O',
|
26
|
+
comment: ''
|
27
|
+
}.merge(attrs)
|
28
|
+
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
29
|
+
if PIN_TYPES.include? attrs[:type]
|
30
|
+
type = attrs[:type]
|
31
|
+
else
|
32
|
+
Origen.log.error "Pinmap individual pin type '#{attrs[:type]}' must be set to one of the following: #{PIN_TYPES.join(', ')} for pin '#{pin_name}'"
|
33
|
+
fail
|
34
|
+
end
|
35
|
+
@pins[pin_name] = { type: type, comment: attrs[:comment] }
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_group_pin(grp_name, pin_name, attrs = {})
|
39
|
+
attrs = {
|
40
|
+
type: 'I/O',
|
41
|
+
comment: ''
|
42
|
+
}.merge(attrs)
|
43
|
+
grp_name = grp_name.to_sym unless grp_name.is_a? Symbol
|
44
|
+
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
45
|
+
if PIN_TYPES.include? attrs[:type]
|
46
|
+
type = attrs[:type]
|
47
|
+
else
|
48
|
+
Origen.log.error "Pinmap group pin type '#{attrs[:type]}' must be set to one of the following: #{PIN_TYPES.join(', ')} for pin '#{pin_name}'"
|
49
|
+
fail
|
50
|
+
end
|
51
|
+
@pin_groups[grp_name][pin_name] = { type: attrs[:type], comment: attrs[:comment] }
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_power_pin(pin_name, attrs = {})
|
55
|
+
attrs = {
|
56
|
+
type: 'Power',
|
57
|
+
comment: ''
|
58
|
+
}.merge(attrs)
|
59
|
+
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
60
|
+
if PWR_TYPES.include? attrs[:type]
|
61
|
+
type = attrs[:type]
|
62
|
+
else
|
63
|
+
Origen.log.error "Pinmap powerpin type '#{attrs[:type]}' must be set to one of the following: #{PWR_TYPES.join(', ')} for pin '#{pin_name}'"
|
64
|
+
fail
|
65
|
+
end
|
66
|
+
@power_pins[pin_name] = { type: attrs[:type], comment: attrs[:comment] }
|
67
|
+
end
|
68
|
+
|
69
|
+
def add_utility_pin(pin_name, attrs = {})
|
70
|
+
attrs = {
|
71
|
+
type: 'Utility',
|
72
|
+
comment: ''
|
73
|
+
}.merge(attrs)
|
74
|
+
pin_name = pin_name.to_sym unless pin_name.is_a? Symbol
|
75
|
+
if UTL_TYPES.include? attrs[:type]
|
76
|
+
type = attrs[:type]
|
77
|
+
else
|
78
|
+
Origen.log.error "Pinmap utility pin type '#{attrs[:type]}' must be set to one of the following: #{UTL_TYPES.join(', ')} for pin '#{pin_name}'"
|
79
|
+
fail
|
80
|
+
end
|
81
|
+
@utility_pins[pin_name] = { type: attrs[:type], comment: attrs[:comment] }
|
82
|
+
end
|
83
|
+
|
84
|
+
def finalize(options = {})
|
85
|
+
end
|
86
|
+
|
87
|
+
def platform
|
88
|
+
Origen.interface.platform
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -2,7 +2,7 @@ module OrigenTesters
|
|
2
2
|
module IGXLBasedTester
|
3
3
|
class Base
|
4
4
|
class TestInstance
|
5
|
-
attr_accessor :type, :index, :version, :append_version, :finalize
|
5
|
+
attr_accessor :type, :index, :version, :append_version, :finalize, :meta
|
6
6
|
|
7
7
|
def self.define
|
8
8
|
# Generate accessors for all attributes and their aliases
|
@@ -46,6 +46,7 @@ module OrigenTesters
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def initialize(name, type, attrs = {})
|
49
|
+
@meta = {}
|
49
50
|
@type = type
|
50
51
|
@append_version = true
|
51
52
|
self.name = name
|
@@ -68,6 +69,35 @@ module OrigenTesters
|
|
68
69
|
end
|
69
70
|
end
|
70
71
|
|
72
|
+
# Returns a hash containing key meta data about the test instance, this is
|
73
|
+
# intended to be used in documentation
|
74
|
+
def to_meta
|
75
|
+
m = { 'Test' => name,
|
76
|
+
'Type' => type
|
77
|
+
}
|
78
|
+
if type == :functional
|
79
|
+
m['Pattern'] = pattern
|
80
|
+
elsif type == :board_pmu || type == :pin_pmu
|
81
|
+
m['Measure'] = fvmi? ? 'current' : 'voltage'
|
82
|
+
if hi_lo_limit_valid & 2 != 0
|
83
|
+
m['Hi'] = hi_limit
|
84
|
+
end
|
85
|
+
if hi_lo_limit_valid & 1 != 0
|
86
|
+
m['Lo'] = lo_limit
|
87
|
+
end
|
88
|
+
if force_cond
|
89
|
+
m['Force'] = force_cond
|
90
|
+
end
|
91
|
+
end
|
92
|
+
m['DC'] = "#{dc_category} (#{dc_selector})"
|
93
|
+
m['AC'] = "#{ac_category} (#{ac_selector})"
|
94
|
+
m.merge(@meta)
|
95
|
+
end
|
96
|
+
|
97
|
+
def inspect
|
98
|
+
"<TestInstance: #{name}, Type: #{type}>"
|
99
|
+
end
|
100
|
+
|
71
101
|
def ==(other_instance)
|
72
102
|
self.class == other_instance.class &&
|
73
103
|
unversioned_name.to_s == other_instance.unversioned_name.to_s &&
|
@@ -167,6 +197,7 @@ module OrigenTesters
|
|
167
197
|
end
|
168
198
|
self
|
169
199
|
end
|
200
|
+
alias_method :hi_limit=, :set_hi_limit
|
170
201
|
|
171
202
|
# Set and enable the hi limit of a parametric test instance, passing in
|
172
203
|
# nil or false as the lim parameter will disable the hi limit.
|
@@ -179,6 +210,7 @@ module OrigenTesters
|
|
179
210
|
end
|
180
211
|
self
|
181
212
|
end
|
213
|
+
alias_method :lo_limit=, :set_lo_limit
|
182
214
|
|
183
215
|
# Set the current range of the test instance, the following are valid:
|
184
216
|
#
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class Base
|
4
|
+
class Timeset
|
5
|
+
attr_accessor :master_ts, :t_mode # Timeset information
|
6
|
+
attr_accessor :pins
|
7
|
+
attr_accessor :name
|
8
|
+
|
9
|
+
# Specify timeset information by providing a pin and its associated edge timing
|
10
|
+
def initialize(name, pin, edge, attrs = {}) # :nodoc:
|
11
|
+
attrs = {
|
12
|
+
master_ts: '', # master timeset name
|
13
|
+
t_mode: '' # timing mode (possibly ATE-specific)
|
14
|
+
}.merge(attrs)
|
15
|
+
@master_ts = attrs[:master_ts]
|
16
|
+
@t_mode = attrs[:t_mode]
|
17
|
+
@pins = { pin => edge }
|
18
|
+
self.name = name
|
19
|
+
end
|
20
|
+
|
21
|
+
# Assigns a timing edge object to the given pin for this timeset
|
22
|
+
def add_edge(pin, edge)
|
23
|
+
if @pins.key?(pin)
|
24
|
+
Origen.log.error "Pin #{pin} already exists in timeset"
|
25
|
+
fail
|
26
|
+
else
|
27
|
+
@pins[pin] = edge
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def platform
|
32
|
+
Origen.interface.platform
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class Base
|
4
|
+
class Timesets
|
5
|
+
include ::OrigenTesters::Generator
|
6
|
+
|
7
|
+
attr_accessor :ts
|
8
|
+
attr_accessor :ts_sheet_pins
|
9
|
+
|
10
|
+
OUTPUT_PREFIX = 'TS'
|
11
|
+
# OUTPUT_POSTFIX = 'TS'
|
12
|
+
|
13
|
+
def initialize # :nodoc:
|
14
|
+
@ts = {}
|
15
|
+
end
|
16
|
+
|
17
|
+
def add(tsname, pin, esname, options = {})
|
18
|
+
tsname = tsname.to_sym unless tsname.is_a? Symbol
|
19
|
+
pin = pin.to_sym unless pin.is_a? Symbol
|
20
|
+
esname = pin.to_sym unless esname.is_a? Symbol
|
21
|
+
@ts.key?(tsname) ? @ts[tsname].add_edge(pin, esname) : @ts[tsname] = platform::Timeset.new(tsname, pin, esname, options)
|
22
|
+
@ts_sheet_pins = options[:ts_sheet_pins] unless @ts_sheet_pins
|
23
|
+
@ts[tsname]
|
24
|
+
end
|
25
|
+
|
26
|
+
def finalize(options = {})
|
27
|
+
end
|
28
|
+
|
29
|
+
# Populate an array of pins based on the pin or pingroup
|
30
|
+
def get_pin_objects(grp)
|
31
|
+
pins = []
|
32
|
+
if Origen.top_level.pin(grp).is_a?(Origen::Pins::Pin) ||
|
33
|
+
Origen.top_level.pin(grp).is_a?(Origen::Pins::FunctionProxy)
|
34
|
+
pins << Origen.top_level.pin(grp)
|
35
|
+
elsif Origen.top_level.pin(grp).is_a?(Origen::Pins::PinCollection)
|
36
|
+
Origen.top_level.pin(grp).each do |pin|
|
37
|
+
pins << pin
|
38
|
+
end
|
39
|
+
else
|
40
|
+
Origen.log.error "Could not find pin class: #{grp} #{Origen.top_level.pin(grp).class}"
|
41
|
+
end
|
42
|
+
pins
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -4,6 +4,6 @@ DFF 1.1 Flow Table
|
|
4
4
|
Gate Command Bin Number Sort Number Flag Group Device Debug
|
5
5
|
Label Enable Job Part Env Opcode Parameter TName TNum Pass Fail Pass Fail Result Pass Fail State Specifier Sense Condition Name Sense Condition Name Assume Sites Comment
|
6
6
|
% end
|
7
|
-
%
|
8
|
-
<%=
|
7
|
+
% format.each do |line|
|
8
|
+
<%= line %>
|
9
9
|
% end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module OrigenTesters
|
2
|
+
module IGXLBasedTester
|
3
|
+
class UltraFLEX
|
4
|
+
require 'origen_testers/igxl_based_tester/base/ac_specsets'
|
5
|
+
class ACSpecsets < Base::ACSpecsets
|
6
|
+
TEMPLATE = "#{Origen.root!}/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|