Supply the promise with the bits from its associated primitive's execution.

        The fulfillment process must walk the promise chain backwards
        until it reaches the original promise and can supply the final
        value.

        The data that comes in can either be all a bit read for every
        bit written by the associated primitive, or (if the primitive
        supports it), only the bits that are used by promises. The
        ignore_nonpromised_bits flag specifies which format the
        incoming data is in.

        Args:
            bits: A bitarray (or compatible) containing the data read from the jtag controller's TDO pin.
            ignore_nonpromised_bits: A boolean specifying if only promised bits are being returned (and thus the 2nd index of the promise must be used for slicing the incoming data).

def _fulfill(self, bits, ignore_nonpromised_bits=False):
        """Supply the promise with the bits from its associated primitive's execution.

        The fulfillment process must walk the promise chain backwards
        until it reaches the original promise and can supply the final
        value.

        The data that comes in can either be all a bit read for every
        bit written by the associated primitive, or (if the primitive
        supports it), only the bits that are used by promises. The
        ignore_nonpromised_bits flag specifies which format the
        incoming data is in.

        Args:
            bits: A bitarray (or compatible) containing the data read from the jtag controller's TDO pin.
            ignore_nonpromised_bits: A boolean specifying if only promised bits are being returned (and thus the 2nd index of the promise must be used for slicing the incoming data).

        """
        if self._allsubsfulfilled():
            if not self._components:
                if ignore_nonpromised_bits:
                    self._value = bits[self._bitstartselective:
                                       self._bitstartselective +
                                       self._bitlength]
                else:
                    self._value = bits[self._bitstart:self._bitend]
            else:
                self._value = self._components[0][0]._value
                for sub, offset in self._components[1:]:
                    self._value += sub._value
            if self._parent is not None:
                self._parent._fulfill(None)