anchor.diff:  	    if (hwenabled) 
   	       seq
   	       if (cmdRing.notEmpty()) 
  -		  seq
  +		  action
  +		     let ct <-  fetchComplete.reserve.get();
   		     $display ("cmdFetch handle=%h address=%h burst=%h tag=%h", 
  -		      cmdRing.mempointer, cmdRing.bufferlast, 8, cmdFetchTag);
  +		      cmdRing.mempointer, cmdRing.bufferlastfetch, 8, ct );
   		     cmd_read_chan.readReq.put(
   			DmaRequest{pointer: cmdRing.mempointer,
  -			   offset: cmdRing.bufferlast, burstLen: 8, tag: cmdFetchTagfetchCompletion.reserve()});
  +			   offset: cmdRing.bufferlastfetch, burstLen: 8, tag: zeroExtend(unpack(ct))});
   		     cmdRing.popfetch();
  -		  endseq
  +		  endaction
   	       endseq
   	 endseq
      endseq;
  
positive.code: 	    action
  	       let rv <- cmd_read_chan.readData.get();
  	       cmd <= rv;
  	       completionBuffer.complete(Tuple2(rv.tag,void));
  	    endaction
  	    // wait a cycle so cmd is valid!
  //	    $display("cmdDispatch 0 tag=%h %h", cmd.tag, cmd.data);
  	    cmdifc.request.put(cmd.data);
  	 endseq
  	 for (dispCtr <= 1; dispCtr < 8; dispCtr <= dispCtr + 1)
  	    action
  	       let rv <- cmd_read_chan.readData.get();
  //	       $display("  cmdDispatch %h tag=%h %h", dispCtr, rv.tag, rv.data);
  	       cmdifc.request.put(rv.data);
  	    endaction
        endseq
     endseq;
     
     rule finishCmdReads;
        let v <- completionBuffer.drain.get();
        cmdRing.popAck();
        $display("pop ack");
     endrule
     
  
negative.code: 		     let rv <- copyEngine.response.get();
  		     status_write_chan.writeData.put(DmaData{data: rv, tag: statusTag});
  		  endaction
  	       statusRing.push();
  	       statusTag <= statusTag + 1;
  	    endseq
  
  