anchor.diff:  	 let row = tpl_1(index);
   	 let col = tpl_2(index)+fromInteger(i);
   	 
  -	 let startA = row*descriptorA.numColumns; // row major
  -	 let startB = col*descriptorB.numColumns; // col major layout (pre-transposed)
  -	 let startC = row*descriptorC.numColumns; // + col; // row major
  -	 if (startA != startAcheck)
  -	    $display("startAmismatch row=%d col=%d startA=%d startAcheck=%d", row, col, startA, startAcheck);
  -	 if (startB != (startBcheck + startBOffset[i]))
  -	    $display("startBmismatch row=%d col=%d startB=%d startBcheck=%d i=%d", row, col, startB, startBcheck, i_v);
  -	 if (startC != startCcheck)
  -	    $display("startCmismatch row=%d col=%d startC=%d startCcheck=%d", row, col, startC, startCcheck);
  +	 //let startA = row*descriptorA.numColumns; // row major
  +	 //let startB = col*descriptorB.numColumns; // col major layout (pre-transposed)
  +	 //let startC = row*descriptorC.numColumns + col; // row major
  +
  +	 let startB = startBBase + startBOffset[i];
  +	 let startC = startCBase + col;
   	 
   	 if (timing || verbose) $display($format(fshow(cycles)+fshow("    startDotProd index=")+fshow(tuple2(row,col))
   	    +fshow(" startA=")+fshow(startA)
  
positive.code: 	 let col <- toGet(colFifo).get();
  	 if (i == 0) begin
  	    let startC <- toGet(startCFifo).get();
  	    startC = startC + col;
  	    sinkC.vector.start(descriptorC.pointer, pack(extend(startC>>nshift)), fromInteger(k/n));
  	    if (verbose || verbose1) $display($format(fshow(cycles)+fshow("      sinkC[")+fshow(in)+fshow("].start")+fshow(startC)));
  	 end
  
negative.code: 	    sourceA[0].start(descriptorA.pointer, pack(extend(startA>>nshift)), pack(extend(descriptorA.numColumns>>nshift)));
  	    if (verbose || verbose1) $display($format(fshow(cycles)+fshow("    sourceA[0].start")+fshow(startA)));
  	 end
  	 let startB <- toGet(startBFifo).get();
  	 sourceB[i].start(descriptorB.pointer, pack(extend(startB>>nshift)), pack(extend(descriptorB.numColumns>>nshift)));
        endrule
        if (i == 0)
  