anchor.diff:     
      zipWithM(mkConnection, fxpipes, map(getRowColSinkPipe, sinks));
      
  -   XYRangePipeIfc#(UInt#(addrwidth)) indexpipeifc <- mkXYRangePipeOut();
  +   XYRangePipeIfc#(UInt#(addrwidth)) indexpipeifc;
      XYRangePipeIfc#(UInt#(addrwidth)) offsetpipeA <- mkXYRangePipeOut();
      XYRangePipeIfc#(UInt#(addrwidth)) offsetpipeB <- mkXYRangePipeOut();
      XYRangePipeIfc#(UInt#(addrwidth)) offsetpipeC <- mkXYRangePipeOut();
   
  -   Vector#(TAdd#(J,K), PipeOut#(Tuple2#(UInt#(addrwidth),UInt#(addrwidth)))) indexpipes <- mkForkVector(indexpipeifc.pipe);
  +   Vector#(TAdd#(J,K), PipeOut#(Tuple2#(UInt#(addrwidth),UInt#(addrwidth)))) indexpipes;
  +   if (timing || verbose || tagging) begin
  +      indexpipeifc <- mkXYRangePipeOut();
  +      indexpipes <- mkForkVector(indexpipeifc.pipe);
  +   end
      Vector#(J, PipeOut#(Tuple2#(UInt#(addrwidth),UInt#(addrwidth))))        offsetpipesA <- mkForkVector(offsetpipeA.pipe);
      Vector#(K, PipeOut#(Tuple2#(UInt#(addrwidth),UInt#(addrwidth))))        offsetpipesB <- mkForkVector(offsetpipeB.pipe);
      Vector#(J, PipeOut#(Tuple2#(UInt#(addrwidth),UInt#(addrwidth))))        offsetpipesC <- mkForkVector(offsetpipeC.pipe);
  
positive.code:       if (verbose) $display("mm pointerA=%d pointerB=%d pointerC=%d\n", pointerA, pointerB, pointerC);
        if (verbose) $display("mm.start ra=%d ca=%d rb=%d cb=%d dotprodCount=%d", numRowsA, numColumnsA, numRowsB, numColumnsB, dotprodCount);
        if (verbose) $display($format(fshow("mm.start ")+fshow(indexcfg)));
        indexpipeifc.start(indexcfg);
        offsetpipeA.start(offsetcfgA);
        offsetpipeB.start(offsetcfgB);
        offsetpipeC.start(offsetcfgC);
  
negative.code: 	 if(j < jj-1)
  	    controlDependenceA[j].enq(?);
  	 
  	 match { .startABase, .unusedA } <- toGet(offsetpipesA[j]).get();
  	 match { .startCBase, .offsetC } <- toGet(offsetpipesC[j]).get();
  	 let startA = startABase + startAOffset[j];
  	 let startC = startCBase + startCOffset[j] + offsetC;
  	 
  	 int jint = fromInteger(j);
  	 Tuple2#(UInt#(addrwidth),UInt#(addrwidth)) index = unpack(0);
  	 if (timing || verbose || tagging)
  	    index <- toGet(indexpipes[j+kk]).get();
  	 let row = tpl_1(index)+fromInteger(j);
  	 let col = tpl_2(index);
  
  	 if (timing || verbose) begin
  	 
  	    $display($format(fshow(cycles)+fshow("    start A index=")+fshow(tuple2(row,col))
  			     +fshow(" startA=")+fshow(startA)
  			     +fshow(" startC=")+fshow(startC)
  			     +fshow(" j=")+fshow(jint)));
  	 end
  
  	 sourceA[j].start(descriptorA.pointer, pack(extend(startA>>nshift)), pack(extend(descriptorA.numColumns>>nshift)), extend(row));
  	 if (verbose || verbose1) $display($format(fshow(cycles)+fshow("    sourceA[")+fshow(jint)+fshow("].start")+fshow(startA)));
  	 sinks[j].start(descriptorC.pointer, pack(extend(startC>>nshift)), fromInteger(kk/n));
  