anchor.diff:  import InnerProdInterface::*;
   import ConnectalBramFifo::*;
   
  +`ifdef NUMBER_OF_TILES 
  +typedef `NUMBER_OF_TILES NumTiles;
  +`else
   typedef 256 NumTiles;
  +`endif
  +`ifdef TILES_PER_MACRO
  +typedef `TILES_PER_MACRO NumTilesPerMacro;
  +`else
   typedef 16 NumTilesPerMacro;
  +`endif
   typedef TDiv#(NumTiles,NumTilesPerMacro) NumMacroTiles;
   typedef Tuple2#(Bit#(TLog#(NumTilesPerMacro)),TileRequest) MacroTileRequest;
   
  
positive.code: 
  (* synthesize *)
  module mkMacroTile#(Int#(16) mt)(MacroTile);
     ReqPipes#(NumTilesPerMacro,TileRequest) rp <- mkRequestPipesMTSynth();
     ResponsePipes#(NumTilesPerMacro) op <- mkResponsePipesMTSynth();
  
     for (Integer t = 0; t < valueOf(NumTilesPerMacro); t = t + 1) begin
        let tile <- mkInnerProdTile(mt * fromInteger(valueOf(NumTilesPerMacro)) + fromInteger(t));
        mkConnection(rp.outPipes[t], tile.request);
        mkConnection(tile.response, op.inPipes[t]);
     end
  
     FIFOF#(TileResponse) responseFifo <- mkSizedFIFOF(valueOf(NumTilesPerMacro));
  
negative.code:       cycles <= cycles+1;
     endrule
  
     let rpReset <- mkSyncReset(2, derivedReset, derivedClock);
     let opReset <- mkSyncReset(2, derivedReset, derivedClock);
     ReqPipes#(NumMacroTiles,MacroTileRequest) rp <- mkRequestPipesSynth(clocked_by derivedClock, reset_by rpReset);
     ResponsePipes#(NumMacroTiles) op <- mkResponsePipesSynth(clocked_by derivedClock, reset_by opReset);
  
     for (Integer mt = 0; mt < valueOf(NumMacroTiles); mt = mt + 1) begin
        let mtReset <- mkSyncReset(2, derivedReset, derivedClock);
  