anchor.diff:  	     , Log#(N,nshift)
   	     , FShow#(Float)
   	     , Arith#(Float)
  -	     , Bits#(Vector#(N, Float), dsz));
  +	     , Bits#(Vector#(N, Float), dsz)
  +	     , Bits#(MatrixDescriptor#(UInt#(addrwidth)), mdsz)
  +	     , Bits#(Tuple2#(UInt#(addrwidth), UInt#(addrwidth)), tplsz)
  +	     , Add#(b__, 20, addrwidth)
  +      );
   
      let n = valueOf(n);
      let nshift = valueOf(nshift);
  
positive.code:       xpipe.deq();
        ypipe.deq();
        xyfifo.enq(tuple3(isFirst,xpipe.first(), ypipe.first()));
        lastFifo.enq(isLast);
     endrule
  
     Vector#(n, Server#(Tuple4#(Maybe#(Float), Float, Float, RoundMode), Tuple2#(Float,Exception))) macs <- replicateM(mkFloatMac);
     Vector#(n, FIFO#(Maybe#(Float))) accumFifo <- replicateM(mkFIFO());
     FIFOF#(Vector#(n,Float)) resultFifo <- mkFIFOF();
  
     rule mul;
  
negative.code:       let isLast = lastFifo.first();
        lastFifo.deq();
        for (Integer i = 0; i < valueOf(n); i = i + 1) begin
  	 Float vi;
  	 if (useMac) begin
  	    let resp <- macs[i].response.get();
  	    vi = tpl_1(resp);
  	 end
  	 else begin
  	    let resp <- adders[i].response.get();
  	    vi = tpl_1(resp);
  	 end
  	 vs[i] = vi;
  	 if (!isLast) begin
  	    accumFifo[i].enq(vi);
  	 end
        end
        if (isLast) begin
  