def virtual_pin_groups(id = nil, options = {}, &_block)
      id, options = nil, id if id.is_a?(Hash)
      if id
        pin = Origen.pin_bank.find(id, options.merge(virtual_pin: true))
        unless pin
          puts <<-END
You have tried to reference virtual_pin_group :#{id} within #{self.class} but it does not exist, this could be
because the pin group has not been defined yet or it is an alias that is not available in the current context.

If you meant to define the virtual_pin_group then use the add_virtual_pin_group method instead.

          END
          fail 'Utility pin group not found'
        end
        pin
      else
        Origen.pin_bank.virtual_pin_groups(options)
      end
    end
def virtual_pin_groups(id = nil, options = {}, &_block)
      id, options = nil, id if id.is_a?(Hash)
      if id
        pin = Origen.pin_bank.find(id, options.merge(virtual_pin: true))
        unless pin
          puts <<-END
You have tried to reference virtual_pin_group :#{id} within #{self.class} but it does not exist, this could be
because the pin group has not been defined yet or it is an alias that is not available in the current context.

If you meant to define the virtual_pin_group then use the add_virtual_pin_group method instead.

          END
          fail 'Utility pin group not found'
        end
        pin
      else
        Origen.pin_bank.virtual_pin_groups(options)
      end
    end
Equivalent to the pin_groups method but considers virtual pins rather than regular pins