anchor.diff:     rule sinkDone;
         // each time we write a burst of k values via sinkC
         let b <- sinkC.vector.finish();
  -      let c = dpCount-fromInteger(k);
  -      $display("sinkDone c=%d k=%d", c, k);
  -      dpCount <= c;
  +      let c = dotprodCount-fromInteger(n);
  +      $display($format(fshow(cycles)+fshow("    sinkDone c")+fshow(c)));
  +      dotprodCount <= c;
         if (c == 0) begin
   	 running <= False;
   	 doneFifo.enq(?);
  
positive.code: 	  let row = tpl_1(xy);
  	  let col = tpl_2(xy)+fromInteger(i);
  
  	 if (verbose) $display($format(fshow("startDotProd xy=")+fshow(tuple2(row,col))+fshow(" acols=")+fshow(descriptorA.numColumns)+fshow(" bcols=")+fshow(descriptorB.numColumns)));
  	  let startA = row*descriptorA.numColumns/fromInteger(n); // row major
  	  let startB = col*descriptorB.numColumns/fromInteger(n); // col major layout (pre-transposed)
  	  let startC = (row*descriptorC.numColumns + col) / fromInteger(n); // row major
  	  if (verbose) $display($format(fshow("startDotProd xy=")+fshow(tuple2(row,col))
  					+fshow(" colsC=")+fshow(descriptorC.numColumns)
  					+fshow(" startC=")+fshow(startC)));
  
  	  if (i == 0)
  	     sourceA[0].start(descriptorA.pointer, pack(truncate(startA)), pack(truncate(startA + descriptorA.numColumns/fromInteger(n))));
  	  sourceB[i].start(descriptorB.pointer, pack(truncate(startB)), pack(truncate(startB + descriptorB.numColumns/fromInteger(n))));
  	  if (i == 0)
  	     sinkC.vector.start(descriptorC.pointer, pack(truncate(startC)), pack(truncate(startC + fromInteger(k))));
         endrule
         if (i == 0)
  	  rule finishSourceA;
  	     //$display($format(fshow("sourceA[0].finish ")+sourceA[0].dbg()));
  	     let b <- sourceA[0].finish();
  	  endrule
        rule finishSourceB;
  	 $display("sourceB[%d].finish", i);
  	 let b <- sourceB[i].finish();
        endrule
        
  
negative.code:       Tuple2#(UInt#(addrwidth),UInt#(addrwidth)) xy = xypipes[n].first;
        xypipes[n].deq;
        Vector#(N,Float) vs;
        for (Integer i = 0; i < n; i = i + 1) begin
  	 let v = fxdotprods[i].first;
  	 fxdotprods[i].deq;
  	 let xyi = tuple2(tpl_1(xy), tpl_2(xy)+fromInteger(i));
  	 if (verbose) $display($format(fshow(cycles)+fshow("    dotprodvalue xy=")+fshow(xyi)+fshow(" dotprod=")+fshow(v)));
  	 vs[i] = v;
        end
        dfifo.enq(vs);
  