def _add(name, options = {}, &block)
      # Add the name and parent to the options if they aren't already given
      # If the parent isn't available on the includer class, it will remain nil.
      options = {
        name:   name,
        parent: parent
      }.merge(options)

      options = Origen::Utility.collector(hash: options, merge_method: :keep_hash, &block).to_h

      # Instantiate the class. This will place the object in the @_componentable_container at the indicated name
      _instantiate_class(name, options)

      # Create an accessor for the new item, if indicated to do so.
      _push_accessor(name, options)

      @_componentable_container[name]
    end
def _add(name, options = {}, &block)
      # Add the name and parent to the options if they aren't already given
      # If the parent isn't available on the includer class, it will remain nil.
      options = {
        name:   name,
        parent: parent
      }.merge(options)

      options = Origen::Utility.collector(hash: options, merge_method: :keep_hash, &block).to_h

      # Instantiate the class. This will place the object in the @_componentable_container at the indicated name
      _instantiate_class(name, options)

      # Create an accessor for the new item, if indicated to do so.
      _push_accessor(name, options)

      @_componentable_container[name]
    end
Adds a new item to the componentable container.
 @note All options added will be passed to the subclasses instantiation.
 @note The options is only valid for the stock :add method.
 @note Any extra options provided are still passed to the subclasses instantiation.
 @param name [Symbol] Name to reference the new component object.
 @param options [Hash] Customizations for both the add method and for the class's instantiation.
 @option options [Class, String] class_name The class to instaniate the component at :name as.
 @return [ComponentableObject] The instantiated class at :name
 @raise [Origen::Componentable::NameInUseError] Raised if :name already points to a component.