anchor.diff:     rule load_ctxt_a (!load_in_progress);
         if (outs1[loadIdx]) begin
   	 load_in_progress <= True;
  -	 cmdFifo.enq(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
   
  -   rule load_ctxt_b if (load_in_progress);
  -      let unused <- toGet(cmdFifo).get();
  -      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);
  -   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
  -	 if (verbose) $display("mkMemreadEngineBuff::load_ctxt_c %d %d", cmd.len, loadIdx);
   	 let x = cmd.burstLen;
   	 if (cmd.len < extend(cmd.burstLen))
   	    x = truncate(cmd.len);
   	 loadf_c.enq(tuple2(truncate(loadIdx),cmd));
   	 if (cond1) begin
  -	    //$display("load_ctxt_b cond1");
  +	    if (verbose) $display("load_ctxt_b cond1 %d", cond1);
   	    outs1[loadIdx] <= False;
   	 end
   	 else begin
  
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: 	     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)
  