anchor.diff:  				     )(DmaMatrixMultiplyIfc#(addrwidth, dsz))
      provisos (Add#(a__,ObjectOffsetSize,addrwidth)
   	     , Add#(N,0,n)
  +	     , Log#(N,nshift)
   	     , FShow#(Float)
   	     , Arith#(Float)
   	     , Bits#(Vector#(N, Float), dsz));
   
      let n = valueOf(n);
  +   let nshift = valueOf(nshift);
      Bool verbose = True;
   
      Reg#(Bool) doneReg <- mkReg(False);
  
positive.code: 
     XYRangePipeIfc#(UInt#(addrwidth)) xypipeifc <- mkXYRangePipeOut();
  
     Vector#(TAdd#(n,1), PipeOut#(Tuple2#(UInt#(addrwidth),UInt#(addrwidth)))) xypipes <- mkForkVector(xypipeifc.pipe);
  
     Reg#(Bool) running <- mkReg(False);
     FIFOF#(Bool) doneFifo <- mkFIFOF();
  
negative.code: 				       +fshow(" startC=")+fshow(startC)));
  
  	  if (i == 0) begin
  	     sourceA[0].start(descriptorA.pointer, pack(truncate(startA>>nshift)), pack(truncate(descriptorA.numColumns>>nshift)));
  	     $display($format(fshow(cycles)+fshow("    sourceA[0].start")+fshow(startA)));
  	  end
  	 sourceB[i].start(descriptorB.pointer, pack(truncate(startB>>nshift)), pack(truncate(descriptorB.numColumns>>nshift)));
  	 UInt#(TLog#(n)) in = fromInteger(i);
  	 Bit#(TAdd#(1,TLog#(n))) nn = fromInteger(n);
  	 $display($format(fshow(cycles)+fshow("    sourceB[")+fshow(in)+fshow("].start")+fshow(startB)));
  	  if (i == 0)
  	     sinkC.vector.start(descriptorC.pointer, pack(truncate(startC>>nshift)), 1);
         endrule
         if (i == 0)
  	  rule finishSourceA;
  