class RgGen::SystemVerilog::Common::Utility::DataObject

Public Class Methods

new(object_type, default_attributes = {}) { |self| ... } click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 10
def initialize(object_type, default_attributes = {})
  @object_type = object_type
  apply_attributes(**default_attributes)
  block_given? && yield(self)
end

Public Instance Methods

declaration() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 26
def declaration
  declaration_snippets
    .select { |snippet| snippet && !snippet.empty? }
    .join(' ')
end
identifier() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 32
def identifier
  Identifier.new(name) do |identifier|
    identifier.__width__(width)
    identifier.__array_size__(array_size)
    identifier.__array_format__(array_format)
  end
end

Private Instance Methods

argument_direction() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 61
def argument_direction
  @object_type == :argument && direction
end
array?() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 79
def array?
  return false unless array_size
  !array_size.empty?
end
declaration_snippets() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 42
def declaration_snippets
  [
    rand_keyword,
    argument_direction,
    paraemter_keyword,
    data_type,
    packed_dimensions,
    object_identifier,
    default_value
  ]
end
default_value() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 123
def default_value
  default && "= #{default}"
end
msb(size) click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 75
def msb(size)
  (size.is_a?(Integer) && size - 1) || "#{size}-1"
end
object_identifier() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 110
def object_identifier
  "#{name}#{unpacked_dimensions}"
end
packed_array_size() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 97
def packed_array_size
  size = []
  size.concat(Array(array_size)) if array_format == :packed
  size << width if valid_width?
  size
end
packed_dimensions() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 69
def packed_dimensions
  (serialized? ? serialized_array_size : packed_array_size)
    .map { |size| "[#{msb(size)}:0]" }
    .join
end
paraemter_keyword() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 65
def paraemter_keyword
  @object_type == :parameter && parameter_type
end
rand_keyword() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 54
def rand_keyword
  return unless @object_type == :variable
  return unless random
  return :rand if random.equal?(true)
  random
end
serialized?() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 84
def serialized?
  array? && array_format == :serialized
end
serialized_array_size() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 88
def serialized_array_size
  size = [(width || 1), *array_size]
  if size.all? { |s| s.is_a?(Integer) }
    [size.inject(&:*)]
  else
    [size.join('*')]
  end
end
unpacked_array?() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 114
def unpacked_array?
  array? && array_format == :unpacked
end
unpacked_dimensions() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 118
def unpacked_dimensions
  return unless unpacked_array?
  array_size.map { |size| "[#{size}]" }.join
end
valid_width?() click to toggle source
# File lib/rggen/systemverilog/common/utility/data_object.rb, line 104
def valid_width?
  return false unless width
  return true unless width.is_a?(Integer)
  width > 1
end