anchor.diff:  	 responseCount = fromInteger(valueOf(NumTiles));
         match { .tile, .data } <- toGet(innerProdResponseFifo).get();
         if (verbose) $display("innerProdResponseRule count=%d tile=%d data=%h", responseCount, tile, data);
  -      topBufferWriteFifo.enq(BRAMRequest{write: True, responseOnWrite: False, address: truncate(pack(tile)), datain: data});
  +      topBuffer.portA.request.put(BRAMRequest{write: True, responseOnWrite: False, address: truncate(pack(tile)), datain: data});
   
         if (responseCount == 1) begin
   	 colWriteBackIterator.start(IteratorConfig {xbase: 0, xlimit: fromInteger(valueOf(NumTiles)*2), xstep: fromInteger(valueOf(DataBusWidth)/8)});
  
positive.code:    interface Put#(XYIteratorConfig#(Bit#(LineBufferAddrSize))) convRequest; // for testing
     interface BRAMClient#(Bit#(LineBufferAddrSize),Int#(16)) lineBufferReadClient;
     interface BRAMClient#(Bit#(LineBufferAddrSize),Int#(16)) lineBufferWriteClient;
     interface BRAMClient#(Bit#(LineBufferAddrSize),Int#(16)) topBufferReadClient;
     interface BRAMClient#(Bit#(LineBufferAddrSize),Int#(16)) topBufferWriteClient;
     interface PipeOut#(InnerProdParam) innerProdRequest;
     interface PipeIn#(InnerProdResponse) innerProdResponse;
     interface MemReadClient#(DataBusWidth) readClient;
  
negative.code:    rule topBufferReadRule;
        let addr <- toGet(topBufferReadIterator.pipe).get();
        if (verbose) $display("topBufferReadRule: addr=%h", addr);
        topBuffer.portB.request.put(BRAMRequest{write: False, responseOnWrite: False, address: addr, datain: 0});
     endrule
     rule topBufferResponseRule;
        let v <- topBuffer.portB.response.get();
        writeDataGearbox.enq(vec(pack(v)));
     endrule
     Reg#(Bit#(32)) wrrCount <- mkReg(0);
     rule writeReqRule;
        let offset <- toGet(colWriteBackIterator.pipe).get();
  