class Origen::Clocks::Clock
Attributes
freq_range[W]
freq_target[W]
id[RW]
instantiate_users[RW]
owner[RW]
users[W]
Public Class Methods
new(id, owner, options = {}, &block)
click to toggle source
# File lib/origen/clocks/clock.rb, line 7 def initialize(id, owner, options = {}, &block) @id = id @owner = owner @id = @id.symbolize unless id.is_a? Symbol @instantiate_users = true options.each { |k, v| instance_variable_set("@#{k}", v) } (block.arity < 1 ? (instance_eval(&block)) : block.call(self)) if block_given? @users = [@users] unless @users.is_a? Array add_users_sub_blocks if @instantiate_users @setpoint = @freq_target end
Public Instance Methods
freq_range()
click to toggle source
Acceptable frequency range
# File lib/origen/clocks/clock.rb, line 71 def freq_range @freq_range end
Also aliased as: range
freq_target()
click to toggle source
Acceptable frequency range
# File lib/origen/clocks/clock.rb, line 77 def freq_target @freq_target end
Also aliased as: target
max()
click to toggle source
max method
# File lib/origen/clocks/clock.rb, line 92 def max if @freq_range == :fixed @freq_target else @freq_range.last end end
method_missing(m, *args, &block)
click to toggle source
# File lib/origen/clocks/clock.rb, line 111 def method_missing(m, *args, &block) ivar = "@#{m.to_s.gsub('=', '')}" ivar_sym = ":#{ivar}" if m.to_s =~ /=$/ define_singleton_method(m) do |val| instance_variable_set(ivar, val) end elsif instance_variables.include? ivar_sym instance_variable_get(ivar) else define_singleton_method(m) do instance_variable_get(ivar) end end send(m, *args, &block) end
min()
click to toggle source
min method
# File lib/origen/clocks/clock.rb, line 83 def min if @freq_range == :fixed @freq_target else @freq_range.first end end
name()
click to toggle source
# File lib/origen/clocks/clock.rb, line 19 def name @id end
setpoint()
click to toggle source
Current setpoint, defaults top nil on init
# File lib/origen/clocks/clock.rb, line 64 def setpoint @setpoint end
Also aliased as: curr_value, value
setpoint=(val)
click to toggle source
# File lib/origen/clocks/clock.rb, line 28 def setpoint=(val) if val == :gated || val == 'gated' @setpoint = :gated else setpoint_ok?(val) # This just warns if the clock is set out of range @setpoint = val end end
setpoint_ok?(val = nil)
click to toggle source
# File lib/origen/clocks/clock.rb, line 37 def setpoint_ok?(val = nil) val = @setpoint if val.nil? if @freq_range == :fixed if val == @freq_target true else Origen.log.warn("Clock '#{id}' is a fixed clock with a target frequency of #{@freq_target.as_Hz}") false end else if @freq_range.include?(val) true else Origen.log.warn("Setpoint (#{setpoint_string(val)}) for clock '#{id}' is not within the frequency range (#{freq_range_string})") false end end end
setpoint_to_target()
click to toggle source
Set the clock to the target frequency
# File lib/origen/clocks/clock.rb, line 59 def setpoint_to_target @setpoint = @freq_target end
users()
click to toggle source
Returns an Array
of IPs that use a clock
# File lib/origen/clocks/clock.rb, line 24 def users @users end
users_defined?()
click to toggle source
Check if the clock users are defined anywhere in the DUT
# File lib/origen/clocks/clock.rb, line 101 def users_defined? undefined_ips = ips - Origen.all_sub_blocks if undefined_ips.empty? true else Origen.log.warn("Clock '#{id}' has the following IP undefined: #{undefined_ips}") false end end
Private Instance Methods
add_users_sub_blocks()
click to toggle source
Instantiate and IP/users that use/access the clock
# File lib/origen/clocks/clock.rb, line 131 def add_users_sub_blocks @users.each do |ip| if @owner.respond_to? ip next else @owner.sub_block ip end end end
attrs_ok?()
click to toggle source
Ensure attributes are the correct type
# File lib/origen/clocks/clock.rb, line 142 def attrs_ok? return_value = true unless description.is_a? String Origen.log.error("Clock attribute 'description' must be a String!") return_value = false end return_value = false unless frequencies_ok? return_value end
clock_freqs_ok?()
click to toggle source
# File lib/origen/clocks/clock.rb, line 185 def clock_freqs_ok? if @freq_target.nil? false elsif @freq_range == :fixed true else if @freq_range.nil? Origen.log.error("PPEKit: Missing frequency target or range for clock '#{id}'!") false elsif @freq_range.include?(@freq_target) true else Origen.log.error("PPEKit: Frequency target #{@freq_target} is not inbetween the freq range #{@freq_range} for clock '#{id}'!") false end end end
freq_range_string()
click to toggle source
# File lib/origen/clocks/clock.rb, line 179 def freq_range_string start_freq = @freq_range.first end_freq = @freq_range.last "#{start_freq.as_Hz}\.\.#{end_freq.as_Hz}" end
frequencies_ok?()
click to toggle source
# File lib/origen/clocks/clock.rb, line 152 def frequencies_ok? if @freq_target.nil? false elsif @freq_range.nil? Origen.log.error("Missing frequency range for clock '#{name}'!") false elsif freq_range.is_a? Range if freq_range.include?(@freq_target) true else Origen.log.error("PPEKit: Frequency target #{@freq_target} is not inbetween the frequency range #{freq_range} for clock '#{name}'!") false end else Origen.log.error("Clock attribute 'freq_range' must be a Range!") return_value = false end end
setpoint_string(val = nil)
click to toggle source
# File lib/origen/clocks/clock.rb, line 171 def setpoint_string(val = nil) if val.nil? @setpoint.as_Hz unless @setpoint.nil? else val.as_Hz end end