class Origen::Models::ScanRegister

Attributes

size[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/origen/models/scan_register.rb, line 8
def initialize(options = {})
  # The shift register
  reg :sr, 0, size: size, reset: options[:reset] || 0
  # The update register, this is the value presented to the outside world
  reg :ur, 0, size: size, reset: options[:reset] || 0

  port :si              # Scan in
  port :so              # Scan out
  port :c, size: size   # Capture in

  # Control signals
  port :se  # Shift enable
  port :ce  # Capture enable
  port :ue  # Update enable

  so.connect_to(sr[0])
end

Public Instance Methods

clock_apply() click to toggle source
# File lib/origen/models/scan_register.rb, line 61
def clock_apply
  if @mode == :shift
    sr.shift_right(@din)
  elsif @mode == :capture
    sr.write(@din)
  elsif @mode == :update
    ur.write(@din)
  end
  @din = nil
  @mode = nil
end
clock_prepare() click to toggle source
# File lib/origen/models/scan_register.rb, line 50
def clock_prepare
  @mode = mode
  if @mode == :shift
    @din = si.data
  elsif @mode == :capture
    @din = c.data
  elsif @mode == :update
    @din = sr.data
  end
end
method_missing(method, *args, &block) click to toggle source
Calls superclass method Origen::Model#method_missing
# File lib/origen/models/scan_register.rb, line 26
def method_missing(method, *args, &block)
  if BitCollection.instance_methods.include?(method)
    ur.send(method, *args, &block)
  else
    super
  end
end
mode() click to toggle source
# File lib/origen/models/scan_register.rb, line 38
def mode
  if se.data == 1
    :shift
  elsif ce.data == 1
    :capture
  elsif ue.data == 1
    :update
  else
    undefined
  end
end
respond_to?(*args) click to toggle source
Calls superclass method Origen::Model#respond_to?
# File lib/origen/models/scan_register.rb, line 34
def respond_to?(*args)
  super(*args) || BitCollection.instance_methods.include?(args.first)
end