anchor.diff:     FIFOF#(AddrBeat#(16)) csrRagBeatFifo <- mkFIFOF();
      FIFOF#(Bool)       csrIsMsixAddrFifo <- mkFIFOF();
      FIFOF#(Vector#(1024,Bool)) csrOneHotFifo <- mkFIFOF();
  +
  +   FIFOF#(AddrBeat#(16)) csrWagBeatFifo <- mkFIFOF();
  +   FIFOF#(Bool)       csrWagIsMsixAddrFifo <- mkFIFOF();
  +   FIFOF#(Vector#(1024,Bool)) csrWagOneHotFifo <- mkFIFOF();
  +
      rule readDataRule;
         let beat <- csrRag.addrBeat.get();
         let addr = beat.addr >> 2; // word address
  
positive.code:                3: msix_entry[groupaddr].masked <= unpack(dword[0]);
              endcase
           end
        else
           case (modaddr)
  	    775: tlpdata.tlpTracing <= (dword != 0) ? True : False;
  
  	    768: begin
  		    bramRequestFifo.enq(BRAMRequest{ write: False, responseOnWrite: False, address: bramMuxRdAddrReg, datain: ?});
  		    bramMuxRdAddrReg <= bramMuxRdAddrReg + 1;
  		 end
  	    792: tlpdata.pcieTraceBramWrAddr <= truncate(dword);
  	    794: tlpdata.tlpTraceLimit <= truncate(dword);
           endcase
        if (beat.last)
  	 writeDoneFifo.enq(beat.tag);
     endrule
  
negative.code: 
        csrRagBeatFifo.enq(beat);
        csrIsMsixAddrFifo.enq(msixaddr >= 0 && msixaddr <= 63);
        function Bool addrDecode(Integer i); return addr[9:0] == fromInteger(i); endfunction
        csrOneHotFifo.enq(genWith(addrDecode));
     endrule
     rule readDataRule2;
  