anchor.diff:     AxiDMA#(Bit#(64))   dma <- mkAxiDMA(indication.dmaIndication);
   `endif
   
  -   Server#(CommandStruct, Bit#(32)) ce <- mkCopyEngine(dma.read.readChannels[2], dma.write.writeChannels[2]);
  -
  +   Server#(Bit#(64), Bit#(64)) ce <- mkCopyEngine(dma.read.readChannels[2], dma.write.writeChannels[2]);
  +   Server#(Bit#(64), Bit#(64)) discardServer <- mkNopServer();
  +   Server#(Bit#(64), Bit#(64)) echoServer <- mkEchoServer();
  +   
  +   Server#(Bit#(64), Bit#(64)) cmdServer;
  +   Server#(Bit#(64), Bit#(64)) responseServer;
   
      ReadChan#(Bit#(64))   dma_read_chan = dma.read.readChannels[0];
      WriteChan#(Bit#(64)) dma_write_chan = dma.write.writeChannels[0];
  
positive.code: 	 hwenabled <= en == 1;
        endmethod
     
        method Action readWord(Bit#(40) addr);
  	 dma_read_chan.readReq.put(addr);
        endmethod
     
        method Action writeWord(Bit#(40) addr, Bit#(64) data);
  	 dma_write_chan.writeReq.put(addr);
  	 dma_write_chan.writeData.put(data);
        endmethod  
         
     endinterface
  
  
negative.code:    RingBuffer statusRing <- mkRingBuffer;
     Reg#(Bool) hwenabled <- mkReg(False);
     Reg#(Bool) cmdBusy <- mkReg(False);
     UInt#(64) cmd;
  
     // wait for hwenabled
     // wait for not cmdBusy
     // wait for cmdRing not empty
     // then start fetches for the next command
     Stmt CmdFetch = 
     seq
        while (True) seq
  	 while(!(hwenabled && cmdRing.notEmpty())) noAction;
  	 cmd_read_chan.readReq.put(cmdRing.expBufferLast);
  	 cmdRing.expBufferLast <= cmdRing.expBufferLast + 8;
        endseq
     endseq
     
     function UInt#(8) getopcode(UInt#(64) a);
        return a[63:56];
     endfunction
  
     Stmt CmdDispatch = 
     seq
        while (True) seq
  	 cmd = cmd_read_chan.readData.get();
  	 let fn = getopcode(cmd);
  	 if (fn == cmdNop)
  	    cmdServer = nopServer;
  	 else if (fn == cmdCOPY)
  	    cmdServer = ce;
  	 else if (fn == cmdECHO)
  	    cmdServer = echoServer;
  	 cmdServer.put(cmd);
  	 for (ii = 1; ii < 8; ii = ii + 1)
  	    cmdServer.put(cmd_read_chan.readData.get());
        endseq
     endseq
     
     
     Stmt CmdCompletion =
     seq
        while(True) seq
  	 while(!(hwenabled && statusRing.notFull())) noAction;
        endseq
     endseq
  
     rule copyCompletion;
        let v <- ce.response.get();
        indication.coreIndication.completion(1, v);
  