anchor.diff:  
   typedef struct {ObjectRequest req;
   		Bit#(TLog#(numTags)) rename_tag;
  -		Bit#(TLog#(numClients)) client; } DRec#(numeric type numClients, numeric type numTags, numeric type addrWidth) deriving(Bits);
  +		Bit#(TLog#(numClients)) client;
  +		Bool last; } DRec#(numeric type numClients, numeric type numTags, numeric type addrWidth) deriving(Bits);
   
   typedef struct {Bit#(6) orig_tag;
   		Bit#(TLog#(numClients)) client; } RResp#(numeric type numClients, numeric type numTags, numeric type addrWidth) deriving(Bits);
  
positive.code:    FIFO#(Tuple2#(DRec#(numClients,numTags,addrWidth),MemData#(dataWidth))) readDataPipelineFifo <- mkFIFO;
     FIFO#(MemData#(dataWidth)) responseFifo <- mkFIFO;
     Vector#(numTags, Reg#(Bit#(8)))           burstRegs <- replicateM(mkReg(0));
     Reg#(Bit#(64))  beatCount <- mkReg(0);
     let beat_shift = fromInteger(valueOf(beatShift));
     
  
negative.code:       dynamicAssert(truncate(response_tag) == dreqFifo.first.rename_tag, "mkMemReadInternal");
        readDataPipelineFifo.enq(tuple2(dreqFifo.first, response));
        let burstLen = burstRegs[response_tag];
        let first =    firstRegs[response_tag];
        let last  =    lastRegs[response_tag];
        if (first) begin
  	 burstLen = dreqFifo.first.req.burstLen >> beat_shift;
  	 last = dreqFifo.first.last;
        end
        if (last) begin
  	 //$display("mkMemReadInternal::eob %d", cycle_cnt-last_eob);
  	 last_eob <= cycle_cnt;
  	 dreqFifo.deq();
  	 tag_gen.return_tag(truncate(response_tag));
        end
        burstRegs[response_tag] <= burstLen-1;
        firstRegs[response_tag] <= (burstLen-1 == 0);
        lastRegs[response_tag] <= (burstLen-1 == 1);
     endrule
  
     interface MemReadClient read_client;
  