code: def get_property(self, prop_name, **kwargs):
          
  
          ovr_default = False
          default = None
          if 'default' in kwargs:
              ovr_default = True
              default = kwargs.pop('default')
  
          # Check for stray kwargs
          if kwargs:
              raise TypeError("got an unexpected keyword argument '%s'" % list(kwargs.keys())[0])
  
          # If its already in the component, then safe to bypass checks
          if prop_name in self.inst.properties:
              prop_value = self.inst.properties[prop_name]
  
              if isinstance(prop_value, rdltypes.ComponentRef):
                  # If this is a hierarchical component reference, convert it to a Node reference
                  prop_value = prop_value.build_node_ref(self, self.env)
              if isinstance(prop_value, rdltypes.PropertyReference):
                  prop_value._resolve_node(self)
  
              return prop_value
  
          if ovr_default:
              # Default value is being overridden by user. Return their value
              return default
  
          # Otherwise, return its default value based on the property's rules
          rule = self.env.property_rules.lookup_property(prop_name)
  
          # Is it even a valid property or allowed for this component type?
          if rule is None:
              raise LookupError("Unknown property '%s'" % prop_name)
          if type(self.inst) not in rule.bindable_to:
              raise LookupError("Unknown property '%s'" % prop_name)
  
          # Return the default value as specified by the rulebook
          return rule.get_default(self)
docs: Gets the SystemRDL component property
  
          If a property was not explicitly set in the RDL source, its default
          value is derived. In some cases, a default value is implied according to
          other property values.
  
          Properties values that are a reference to a component instance are
          converted to a :class:`~Node` overlay object.
  
          Parameters
          ----------
          prop_name: str
              SystemRDL property name
          default:
              Override built-in default value of property.
              If the property was not explicitly set, return this value rather than
              the property's intrinsic default value.
  
          Raises
          ------
          LookupError
              If prop_name is invalid