anchor.diff:  	 return nopEngine;
      endfunction
   
  -   Stmt cmdFetch =   seq
  +   Stmt cmdFetch =   
  +   seq
  +      $display("cmdFetch FSM TOP");
  +      while (True) 
  +	 seq
  +	    if (hwenabled) 
  +	       seq
  +	       if (cmdRing.bufferfirst != cmdRing.bufferlast) 
  +		  seq
  +		     $display ("cmdFetch handle=%h address=%d burst=%h tag=%h", cmdRing.memhandle, cmdRing.bufferlast, 8, cmdFetchTag);
  +		     cmd_read_chan.readReq.put(
  +			DMAAddressRequest{handle: cmdRing.memhandle,
  +			   address: cmdRing.bufferlast, burstLen: 8, tag: cmdFetchTag});
  +		     cmdRing.pop(64);
  +		     cmdFetchTag <= cmdFetchTag + 1;
  +		  endseq
  +	       endseq
  +	 endseq
  +   endseq;
  +   
  +   Stmt cmdDispatch = 
  +   seq
         while (True) seq
  -	 while(!(hwenabled && cmdRing.notEmpty())) noAction;
  -	 cmd_read_chan.readReq.put(
  -	    DMAAddressRequest{handle: cmdRing.memhandle,
  -	       address: cmdRing.bufferlast, burstLen: 8, tag: 0});
  -	 cmdRing.pop(64);
  -      endseq
  -		     endseq;
  -
  -   Stmt cmdDispatch = 
  -   seq
  -      while (True) seq
  +	 $display("cmdDispatch FSM TOP");
   	 action
   	    let rv <- cmd_read_chan.readData.get();
   	    cmd <= rv.data;
  -	    cmdifc.request.put(rv.data);
  +	    $display("cmdDispatch %h", cmd);
  +	    //cmdifc.request.put(rv.data);
   	 endaction
   	 for (dispCtr <= 1; dispCtr < 8; dispCtr <= dispCtr + 1)
   	    action
   	       let rv <- cmd_read_chan.readData.get();
  -	       cmdifc.request.put(rv.data);
  +	       //cmdifc.request.put(rv.data);
   	    endaction
         endseq
      endseq;
  
positive.code:       while(True) seq
  	 if (statusRing.notFull() && copyEngine.response.notEmpty())
  	    seq
  	       status_write_chan.writeReq.put(
  		  DMAAddressRequest{handle: statusRing.memhandle, 
  		     address: statusRing.bufferfirst, burstLen: 8, tag: 0});
  	       statusRing.push(64);
  	       for (respCtr <= 0; respCtr < 8; respCtr <= respCtr + 1)
  		  action
  		     let rv <- copyEngine.response.get();
  		     status_write_chan.writeData.put(DMAData{data: rv, tag: 0});
  		  endaction
  	    endseq
  
  	 if (statusRing.notFull() && echoEngine.response.notEmpty())
  	    seq
  	       status_write_chan.writeReq.put(
  		  DMAAddressRequest{handle: statusRing.memhandle, 
  		     address: statusRing.bufferfirst, burstLen: 8, tag: 0});
  	       statusRing.push(64);
  	       for (respCtr <= 0; respCtr < 8; respCtr <= respCtr + 1)
  		  action
  		     let rv <- echoEngine.response.get();
  		     status_write_chan.writeData.put(DMAData{data: rv, tag: 0});
  		  endaction
  	    endseq
  
        endseq
  
negative.code:    
  
        method Action set(Bit#(1) _cmd, Bit#(3) regist, Bit#(32) addr);
  	 if (_cmd == 0)
  	    cmdRing.configifc.set(regist, addr);
  	 else
  	    statusRing.configifc.set(regist, addr);
  