Class: SystemRDL::Evaluator::Instance

Inherits:
Object
  • Object
show all
Defined in:
lib/systemrdl/evaluator/instance.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(definition, parent, name, token_range) ⇒ Instance

Returns a new instance of Instance.



6
7
8
9
10
11
12
13
# File 'lib/systemrdl/evaluator/instance.rb', line 6

def initialize(definition, parent, name, token_range)
  @definition = definition
  @parent = parent
  @name = name
  @token_range = token_range
  @properties = []
  @instances = []
end

Instance Attribute Details

#array_infoObject (readonly)

Returns the value of attribute array_info.



18
19
20
# File 'lib/systemrdl/evaluator/instance.rb', line 18

def array_info
  @array_info
end

#definitionObject (readonly)

Returns the value of attribute definition.



15
16
17
# File 'lib/systemrdl/evaluator/instance.rb', line 15

def definition
  @definition
end

#instancesObject (readonly)

Returns the value of attribute instances.



21
22
23
# File 'lib/systemrdl/evaluator/instance.rb', line 21

def instances
  @instances
end

#nameObject (readonly)

Returns the value of attribute name.



17
18
19
# File 'lib/systemrdl/evaluator/instance.rb', line 17

def name
  @name
end

#parentObject (readonly)

Returns the value of attribute parent.



16
17
18
# File 'lib/systemrdl/evaluator/instance.rb', line 16

def parent
  @parent
end

#propertiesObject (readonly)

Returns the value of attribute properties.



20
21
22
# File 'lib/systemrdl/evaluator/instance.rb', line 20

def properties
  @properties
end

#token_rangeObject (readonly)

Returns the value of attribute token_range.



19
20
21
# File 'lib/systemrdl/evaluator/instance.rb', line 19

def token_range
  @token_range
end

Instance Method Details

#addrmap?Boolean

Returns:



54
55
56
# File 'lib/systemrdl/evaluator/instance.rb', line 54

def addrmap?
  layer == :addrmap
end

#array?Boolean

Returns:



86
87
88
# File 'lib/systemrdl/evaluator/instance.rb', line 86

def array?
  false
end

#element_nameObject



27
28
29
30
31
32
33
34
# File 'lib/systemrdl/evaluator/instance.rb', line 27

def element_name
  return name.to_s unless array?

  array_info
    .indices
    .inject([name]) { |name_elements, index| name_elements << "[#{index}]" }
    .join
end

#field?Boolean

Returns:



70
71
72
# File 'lib/systemrdl/evaluator/instance.rb', line 70

def field?
  layer == :field
end

#finalizeObject



108
109
110
111
# File 'lib/systemrdl/evaluator/instance.rb', line 108

def finalize
  @instances.each(&:finalize)
  @definition.finalize(self)
end

#find_addrmapObject



78
79
80
81
82
83
84
# File 'lib/systemrdl/evaluator/instance.rb', line 78

def find_addrmap
  if RUBY_VERSION >= '4.0'
    upper_instances(include_root: false, include_self: true).rfind(&:addrmap?)
  else
    upper_instances(include_root: false, include_self: true).reverse_each.find(&:addrmap?)
  end
end

#full_nameObject



36
37
38
# File 'lib/systemrdl/evaluator/instance.rb', line 36

def full_name
  upper_instances(include_root: false, include_self: true).map(&:element_name).join('.')
end

#layerObject



46
47
48
# File 'lib/systemrdl/evaluator/instance.rb', line 46

def layer
  definition.layer
end

#mem?Boolean

Returns:



62
63
64
# File 'lib/systemrdl/evaluator/instance.rb', line 62

def mem?
  layer == :mem
end

#property(name) ⇒ Object



90
91
92
# File 'lib/systemrdl/evaluator/instance.rb', line 90

def property(name)
  properties.find { |prop| prop.name == name }
end

#property_value(name) ⇒ Object



94
95
96
# File 'lib/systemrdl/evaluator/instance.rb', line 94

def property_value(name)
  property(name)&.value
end

#reg?Boolean

Returns:



66
67
68
# File 'lib/systemrdl/evaluator/instance.rb', line 66

def reg?
  layer == :reg
end

#regfile?Boolean

Returns:



58
59
60
# File 'lib/systemrdl/evaluator/instance.rb', line 58

def regfile?
  layer == :regfile
end

#revalidateObject



103
104
105
106
# File 'lib/systemrdl/evaluator/instance.rb', line 103

def revalidate
  @definition.revalidate(self)
  @instances.each(&:revalidate)
end

#root?Boolean

Returns:



50
51
52
# File 'lib/systemrdl/evaluator/instance.rb', line 50

def root?
  layer == :root
end

#structural_component?Boolean

Returns:



74
75
76
# File 'lib/systemrdl/evaluator/instance.rb', line 74

def structural_component?
  addrmap? || regfile? || mem? || reg? || field?
end

#to_value(token_range) ⇒ Object



23
24
25
# File 'lib/systemrdl/evaluator/instance.rb', line 23

def to_value(token_range)
  Value.new(self, :"#{layer}_reference", nil, token_range)
end

#upper_instances(include_root: false, include_self: false) ⇒ Object



40
41
42
43
44
# File 'lib/systemrdl/evaluator/instance.rb', line 40

def upper_instances(include_root: false, include_self: false)
  instances = (root? && []) || parent.upper_instances(include_root:, include_self: true)
  instances << self if (root? && include_root) || (!root? && include_self)
  instances
end

#validateObject



98
99
100
101
# File 'lib/systemrdl/evaluator/instance.rb', line 98

def validate
  @definition.validate(self)
  @instances.each(&:revalidate)
end