Class: OrigenTesters::IGXLBasedTester::Base::FlowLine

Inherits:
Object
  • Object
show all
Defined in:
lib/origen_testers/igxl_based_tester/base/flow_line.rb

Direct Known Subclasses

J750::FlowLine, UltraFLEX::FlowLine

Constant Summary collapse

ALIASES =

Map any aliases to the official names here, multiple aliases for a given attribute are allowed

{
  bin:            :bin_fail,
  softbin:        :sort_fail,
  soft_bin:       :sort_fail,
  sbin:           :sort_fail,
  name:           :tname,
  number:         :tnum,
  if_enable:      :enable,
  if_enabled:     :enable,
  enabled:        :enable,
  hi_limit:       :hilim,
  hi:             :hilim,
  lo_limit:       :lolim,
  lo:             :lolim,
  # Aliases can also be used to set defaults on multiple attributes like this,
  # use :value to refer to the value passed in to the given alias
  flag_false:     { device_condition: 'flag-false',
                    device_name:      :value
                 },
  flag_true:      { device_condition: 'flag-true',
                    device_name:      :value
                 },
  flag_false_any: { group_specifier: 'any-active',
                    group_condition: 'flag-false',
                    group_name:      :value
                     },
  flag_false_all: { group_specifier: 'all-active',
                    group_condition: 'flag-false',
                    group_name:      :value
                     },
  flag_true_any:  { group_specifier: 'any-active',
                    group_condition: 'flag-true',
                    group_name:      :value
                    },
  flag_true_all:  { group_specifier: 'all-active',
                    group_condition: 'flag-true',
                    group_name:      :value
                    },
  flag_clear:     { device_condition: 'flag-clear',
                    device_name:      :value
                 }
}
DEFAULTS =

Assign attribute defaults here, generally this should match whatever defaults Teradyne has set whenever you create a new test instance, etc.

{
  test:              {
    opcode: 'Test',
    result: 'Fail'
  },
  test_defer_limits: {
    opcode: 'Test-defer-limits',
    result: 'Fail'
  },
  cz:                {
    opcode: 'characterize',
    result: 'None'
  },
  goto:              {
    opcode: 'goto'
  },
  nop:               {
    opcode: 'nop'
  },
  set_device:        {
    opcode: 'set-device'
  },
  set_error_bin:     {
    opcode: 'set-error-bin'
  },
  enable_flow_word:  {
    opcode: 'enable-flow-word'
  },
  disable_flow_word: {
    opcode: 'disable-flow-word'
  },
  logprint:          {
    opcode: 'logprint'
  },
  use_limit:         {
    opcode: 'Use-Limit',
    result: 'Fail'
  },
  flag_false:        {
    opcode: 'flag-false'
  },
  flag_false_all:    {
    opcode: 'flag-false-all'
  },
  flag_true:         {
    opcode: 'flag-true'
  },
  flag_true_all:     {
    opcode: 'flag-true-all'
  }
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type, attrs = {}) ⇒ FlowLine

Returns a new instance of FlowLine.



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 149

def initialize(type, attrs = {})
  @ignore_missing_instance = attrs.delete(:instance_not_available)
  self.cz_setup = attrs.delete(:cz_setup)
  @type = type
  # Set the defaults
  DEFAULTS[@type.to_sym].each do |k, v|
    send("#{k}=", v) if self.respond_to?("#{k}=")
  end
  # Then the values that have been supplied
  attrs.each do |k, v|
    send("#{k}=", v) if self.respond_to?("#{k}=")
  end
  # override test numbers if diff-friendly output desired
  if Origen.tester.diff_friendly_output?
    self.tnum = 0
  end
end

Instance Attribute Details

#cz_setupObject

cz_setup is a virtual attrib since it is not part of the regular flow line



5
6
7
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 5

def cz_setup
  @cz_setup
end

#idObject

cz_setup is a virtual attrib since it is not part of the regular flow line



5
6
7
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 5

def id
  @id
end

#typeObject

cz_setup is a virtual attrib since it is not part of the regular flow line



5
6
7
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 5

def type
  @type
end

Class Method Details

.defineObject



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 107

def self.define
  # Generate accessors for all attributes and their aliases
  self::TESTER_FLOWLINE_ATTRS.each do |attr|
    writer = "#{attr}=".to_sym
    reader = attr.to_sym
    attr_reader attr.to_sym unless method_defined? reader
    attr_writer attr.to_sym unless method_defined? writer
  end

  ALIASES.each do |_alias, val|
    if val.is_a? Hash
      if ((self::TESTER_FLOWLINE_ATTRS.map(&:to_sym)) & val.keys) == val.keys
        writer = "#{_alias}=".to_sym
        unless method_defined? writer
          define_method("#{_alias}=") do |v|
            val.each do |k, _v|
              myval = _v == :value ? v : _v
              send("#{k}=", myval)
            end
          end
        end
      end
    else

      if self::TESTER_FLOWLINE_ATTRS.include? "#{val}"
        writer = "#{_alias}=".to_sym
        reader = _alias.to_sym
        unless method_defined? writer
          define_method("#{_alias}=") do |v|
            send("#{val}=", v)
          end
        end
        unless method_defined? reader
          define_method("#{_alias}") do
            send(val)
          end
        end
      end
    end
  end
end

.unique_counterObject



265
266
267
268
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 265

def self.unique_counter
  @ix ||= -1
  @ix += 1
end

Instance Method Details

#continue_passObject



209
210
211
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 209

def continue_pass
  self.result = 'Pass'
end

#debug_assume_failObject



217
218
219
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 217

def debug_assume_fail
  self.debug_assume = 'Fail'
end

#debug_assume_passObject



213
214
215
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 213

def debug_assume_pass
  self.debug_assume = 'Pass'
end

#parameterObject



176
177
178
179
180
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 176

def parameter
  # When referring to the test instance take the opportunity to refresh the current
  # version of the test instance
  @parameter = Origen.interface.identity_map.current_version_of(@parameter)
end

#parameter=(value) ⇒ Object



167
168
169
170
171
172
173
174
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 167

def parameter=(value)
  if (@type == :test || @test == :cz) && !@ignore_missing_instance
    if value.is_a?(String) || value.is_a?(Symbol)
      fail "You must supply the actual test instance object for #{value} when adding it to the flow"
    end
  end
  @parameter = value
end

#run_if_all_(args) ⇒ Object



253
254
255
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 253

def run_if_all_(args)
  # code
end

#run_if_all_failed(parent) ⇒ Object



248
249
250
251
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 248

def run_if_all_failed(parent)
  parent.continue_on_fail
  self.flag_true_all = parent.set_flag_on_fail
end

#run_if_all_passed(parent) ⇒ Object



238
239
240
241
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 238

def run_if_all_passed(parent)
  parent.continue_on_fail
  self.flag_true_all = parent.set_flag_on_pass
end

#run_if_any_failed(parent) ⇒ Object



243
244
245
246
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 243

def run_if_any_failed(parent)
  parent.continue_on_fail
  self.flag_true_any = parent.set_flag_on_fail
end

#run_if_any_passed(parent) ⇒ Object



233
234
235
236
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 233

def run_if_any_passed(parent)
  parent.continue_on_fail
  self.flag_true_any = parent.set_flag_on_pass
end

#set_flag_on_passObject

def debug_sites

  self.debug_sites = "All"
end


225
226
227
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 225

def set_flag_on_pass
  self.flag_pass = "#{id}_PASSED"
end

#set_flag_on_ranObject



229
230
231
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 229

def set_flag_on_ran
  self.flag_pass = "#{id}_RAN"
end

#test?Boolean

Returns:

  • (Boolean)


270
271
272
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 270

def test?
  @type == :test
end

#to_sObject

Returns the fully formatted flow line for insertion into a flow sheet



183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 183

def to_s
  l = "\t"
  self.class::TESTER_FLOWLINE_ATTRS.each do |attr|
    if attr == 'parameter'
      ins = parameter
      if ins.respond_to?(:name)
        l += "#{ins.name}"
      else
        l += "#{ins}"
      end
      if type == :cz && cz_setup
        l += " #{cz_setup}\t"
      else
        l += "\t"
      end
    else
      l += "#{send(attr)}\t"
    end
  end
  "#{l}"
end

#unique_counterObject



261
262
263
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 261

def unique_counter
  @unique_counter ||= self.class.unique_counter
end

#unless_enable=(*args) ⇒ Object Also known as: unless_enabled=



205
206
# File 'lib/origen_testers/igxl_based_tester/base/flow_line.rb', line 205

def unless_enable=(*args)
end