anchor.diff:  	       bl = truncate(cmd.len);
   	    end
   	    workf.enq(tuple3(truncate(bl>>beat_shift), idx, last));
  -	    //$display("readReq %d, %h %h %h", idx, cmd.base, bl, last);
  +	    if (verbose) $display("MemreadEngine::readReq %d, %h %h %h", idx, cmd.base, bl, last);
   	    return MemRequest { sglId: cmd.sglId, offset: cmd.base, burstLen:bl, tag: (cmd.tag << valueOf(serverIdxSz)) | extend(idx)};
   	 endmethod
         endinterface
  
positive.code:       match {.rc, .idx, .last} = workf.first;
        let new_respCnt = respCnt+1;
        let l = False;
        //$display("%h %d", d.data, idx);
        if (new_respCnt == rc) begin
  	 respCnt <= 0;
  	 workf.deq;
  
negative.code:    rule load_ctxt_a (!load_in_progress);
        if (outs1[loadIdx]) begin
  	 load_in_progress <= True;
  	 if (verbose) $display("mkMemreadEngineBuff::load_ctxt_a %d", loadIdx);
  	 let cmd = cmdRegs[loadIdx];
  	 let cond0 <- buffCap[loadIdx].maybeDecrement(unpack(extend(cmd.burstLen>>beat_shift)));
  	 let cond1 = cmd.len <= extend(cmd.burstLen);
  	 loadf_b.enq(tuple3(cmd,cond0,cond1));
  	 if (verbose) $display("mkMemreadEngineBuff::load_ctxt_b %d %d", buffCap[loadIdx].read(), cmd.burstLen>>beat_shift);
        end
        else begin
  	 incr_loadIdx;
        end
     endrule
  
     // should use an EHR for outs1 to avoid the need for this pragma
     (* descending_urgency = "load_ctxt_c, store_cmd" *)
     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);
        if  (cond0) begin
  	 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);
  	    outs1[loadIdx] <= False;
  	 end
  	 else begin
  