anchor.diff:     rule load_ctxt_c if (load_in_progress);
         load_in_progress <= False;
         incr_loadIdx;
  -      match {.cmd,.cond0,.cond1} <- toGet(loadf_b).get;
  -      if (verbose) $display("mkMemreadEngineBuff::load_ctxt_c cmd.len %d idx %d cond0 %d cond1 %d", cmd.len, loadIdx, cond0, cond1);
  +      match {.cmd,.cond0,.last_burst} <- toGet(loadf_b).get;
         if  (cond0) begin
  +	 if (verbose) $display("mkMemreadEngineBuff::load_ctxt_c cmd.len %d idx %d cond0 %d last_burst %d", cmd.len, loadIdx, cond0, last_burst);
   	 let x = cmd.burstLen;
   	 if (cmd.len < extend(cmd.burstLen))
   	    x = truncate(cmd.len);
  -	 loadf_c.enq(tuple2(truncate(loadIdx),cmd));
  -	 if (cond1) begin
  -	    if (verbose) $display("load_ctxt_b cond1 %d", cond1);
  +	 loadf_c.enq(tuple3(truncate(loadIdx),cmd,last_burst));
  +	 if (last_burst) begin
  +	    if (verbose) $display("load_ctxt_b last_burst %d", last_burst);
  +	    outfs[loadIdx].enq(?);
   	    outs1[loadIdx] <= False;
   	 end
   	 else begin
  
positive.code: 	     return inpipe.first.data;
  	  endmethod
  	  method Action deq;
  	     if (verbose) $display("check_out: idx %d data %h", i, inpipe.first.data);
  	     inpipe.deq;
  	     buffCap[i].increment(1);
  	     if (inpipe.first.last)
  		outfs[i].enq(?);
  	  endmethod
  	  method Bool notEmpty = inpipe.notEmpty;
         endinterface);
  
negative.code:    rule load_ctxt_a (!load_in_progress);
        if (outs1[loadIdx]) begin
  	 load_in_progress <= True;
  	 let cmd = cmdRegs[loadIdx];
  	 let cond0 <- buffCap[loadIdx].maybeDecrement(unpack(extend(cmd.burstLen>>beat_shift)));
  	 let last_burst = cmd.len <= extend(cmd.burstLen);
  	 loadf_b.enq(tuple3(cmd,cond0,last_burst));
  	 if (verbose) $display("mkMemreadEngineBuff::load_ctxt_b buffCap %d burstLen %d cond0 %d last_burst %d", buffCap[loadIdx].read(), cmd.burstLen>>beat_shift, cond0, last_burst);
        end
        else begin
  	 incr_loadIdx;
  