anchor.diff:     method Bit#(32) dbg();
   endinterface
   
  -//(* synthesize *)
  -module [Module] mkDramMatrixMultiply#(MmDebugIndication mmDebugIndication)(DramMatrixMultiply#(N,TMul#(N,32)));
  +(* 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(mmDebugIndication, xvfsources, yvfsources, mkDmaVectorSink);
  +   DmaMatrixMultiplyIfc#(MMSize,DmaSz) dmaMMF <- mkDmaMatrixMultiply(xvfsources, yvfsources, mkDmaVectorSink);
      interface Vector readClients = map(getSourceReadClient, vfsources);
      interface Vector writeClients = dmaMMF.writeClients;
      method start = dmaMMF.start;
  
positive.code:  * Just considering memory bandwidth, every J+K cycles it is ready to perform J*K*N multiply accumulates.
   *
   */
  module [Module] mkDmaMatrixMultiply#(MmDebugIndication mmDebugIndication,
  				     Vector#(J, VectorSource#(dsz, Vector#(N, Float))) sourceA,
  				     Vector#(K, VectorSource#(dsz, Vector#(N, Float))) sourceB,
  				     function Module#(DmaVectorSink#(dsz, Vector#(N, Float))) mkSink(PipeOut#(Vector#(N, Float)) pipe_in)
  				     )(DmaMatrixMultiplyIfc#(addrwidth, dsz))
  
negative.code: 	    +fshow(" startC=")+fshow(startC)
  	    +fshow(" startC>>nshift=")+fshow(startC>>nshift)
  	    +fshow(" j=")+fshow(jint)));
  
  	 sourceA[j].start(descriptorA.pointer, pack(extend(startA>>nshift)), pack(extend(descriptorA.numColumns>>nshift)));
  	 if (verbose || verbose1) $display($format(fshow(cycles)+fshow("    sourceA[")+fshow(jint)+fshow("].start")+fshow(startA)));
  