anchor.diff:     } MsgFromSoftwareTag deriving (Bits,Eq);
   
   typedef struct {
  -   Bool     last;
      MsgFromSoftwareTag tag;
      Bit#(24)  data;
      } MsgFromSoftware deriving (Bits);
   
   typedef enum {
  -   Loopback,
  -   LocDone,
  -   TransferDone
  +   Loopback=1,
  +   LocDone=2,
  +   TransferDone=3
      } MsgToSoftwareTag deriving (Bits,Eq);
   
   typedef struct {
  -   Bool     last;
      MsgToSoftwareTag tag;
      Bit#(24)  data;
      } MsgToSoftware deriving (Bits);
  
positive.code:       let r <- toGet(responseFifo).get();
        NvmeIoResponse response = unpack(r);
        Bit#(8) sct = truncate(response.statusCodeType);
        
        MsgToSoftware msg = MsgToSoftware { tag: TransferDone, data: { sct, response.statusCode }, last: True};
        outmsgTagProbe <= msg.tag;
        outmsgDataProbe <= msg.data;
        msgToSoftwareFifo.enq(extend(pack(msg)));
     endrule
     rule rl_match;
        let loc <- toGet(mpEngine.locdone).get();
        MsgToSoftware msg = MsgToSoftware { tag: LocDone, data: truncate(pack(loc)), last: loc == -1 };
        outmsgTagProbe <= msg.tag;
        outmsgDataProbe <= msg.data;
        msgToSoftwareFifo.enq(extend(pack(msg)));
     endrule
  
     AxiStreamSlave#(32) msgFromSoftwareStream <- mkAxiStream(msgFromSoftwareFifo);
  
negative.code:    Reg#(Bit#(24))                      needleLenReg <- mkReg(0);
     MPStreamEngine#(PcieDataBusWidth,DataBusWidth)    mpEngine <- mkMPStreamEngine();
  
     FIFOF#(MemData#(32)) msgFromSoftwareFifo <- mkFIFOF();
     FIFOF#(MemData#(32)) msgToSoftwareFifo <- mkFIFOF();
     FIFOF#(MemDataF#(PcieDataBusWidth)) dataFromNvmeFifo <- mkFIFOF();
     FIFOF#(MemDataF#(PcieDataBusWidth)) dataToNvmeFifo <- mkFIFOF();
     FIFOF#(Bit#(SizeOf#(NvmeIoCommand))) requestFifo <- mkFIFOF();
  