anchor.diff:  // DM-to-CPU CSR tap (for writes to CSRs)
   
   interface DM_CSR_Tap_IFC;
  -   interface MemoryClient #(12, XLEN)  client;
  -   interface MemoryServer #(12, XLEN)  server;
  -   interface Get #(Trace_Data)         trace_data_out;
  +   interface Client #(DM_CPU_Req #(12,  XLEN), DM_CPU_Rsp #(XLEN)) client;
  +   interface Server #(DM_CPU_Req #(12,  XLEN), DM_CPU_Rsp #(XLEN)) server;
  +   interface Get #(Trace_Data)  trace_data_out;
   endinterface
   
   (* synthesize *)
   module mkDM_CSR_Tap (DM_CSR_Tap_IFC);
      // req from DM
  -   FIFOF #(MemoryRequest #(12, XLEN)) f_req_in     <- mkFIFOF;
  +   FIFOF #(DM_CPU_Req #(12,  XLEN)) f_req_in     <- mkFIFOF;
      // req to CPU
  -   FIFOF #(MemoryRequest #(12, XLEN)) f_req_out    <- mkFIFOF;
  +   FIFOF #(DM_CPU_Req #(12,  XLEN)) f_req_out    <- mkFIFOF;
      // resp CPU->DM
  -   FIFOF #(MemoryResponse #(XLEN))    f_rsp        <- mkFIFOF;
  +   FIFOF #(DM_CPU_Rsp #(XLEN))      f_rsp        <- mkFIFOF;
      // Tap to TV
  -   FIFOF #(Trace_Data)                f_trace_data <- mkFIFOF;
  +   FIFOF #(Trace_Data)              f_trace_data <- mkFIFOF;
   
      rule request;
         let req <- pop (f_req_in);
  
positive.code:       end
     endrule
  
     interface MemoryClient client = toGPClient (f_req_out, f_rsp);
     interface MemoryServer server = toGPServer (f_req_in,  f_rsp);
  
     interface Get trace_data_out = toGet (f_trace_data);
  endmodule: mkDM_GPR_Tap
  
negative.code:       end
     endrule
  
     interface Client client = toGPClient (f_req_out, f_rsp);
     interface Server server = toGPServer (f_req_in,  f_rsp);
  
     interface Get trace_data_out = toGet (f_trace_data);
  endmodule: mkDM_CSR_Tap
  