docs: 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)