anchor.diff:  				     )(DmaMatrixMultiplyIfc#(addrwidth, dsz))
      provisos (  Add#(N,n__,K)
   	     , Mul#(N,m__,K)
  -	     , Add#(1,0,J)
  +	     , Add#(1,o__,J)
   	     , Log#(N,nshift)
   	     , FShow#(Float)
   	     , Arith#(Float)
  
positive.code: typedef 20 MMSize;
  
  interface DramMatrixMultiply#(numeric type n, numeric type dmasz);
     interface Vector#(TAdd#(K,1), ObjectReadClient#(dmasz)) readClients;
     interface Vector#(1, ObjectWriteClient#(dmasz)) writeClients;
     method Action start(ObjectPointer pointerA, UInt#(MMSize) numRowsA, UInt#(MMSize) numColumnsA,
  		       ObjectPointer pointerB, UInt#(MMSize) numRowsB, UInt#(MMSize) numColumnsB,
  
negative.code: (* synthesize *)
  module [Module] mkDramMatrixMultiply(DramMatrixMultiply#(N,TMul#(N,32)));
     Vector#(TAdd#(K,J), DmaVectorSource#(DmaSz, Vector#(N,Float))) vfsources <- replicateM(mkDmaVectorSource());
     Vector#(J, VectorSource#(DmaSz, Vector#(N,Float))) xvfsources = takeAt(0,          map(dmaVectorSourceVector, vfsources));
     Vector#(K, VectorSource#(DmaSz, Vector#(N,Float))) yvfsources = takeAt(valueOf(J), map(dmaVectorSourceVector, vfsources));
     DmaMatrixMultiplyIfc#(MMSize,DmaSz) dmaMMF <- mkDmaMatrixMultiply(xvfsources, yvfsources, mkDmaVectorSink);
     interface Vector readClients = map(getSourceReadClient, vfsources);
     interface Vector writeClients = cons(dmaMMF.dmaClient, nil);
  