anchor.diff:     Reg#(Float) learningRateOverNumExamples <- mkReg(defaultValue);
   
      FIFOF#(Vector#(N,Float)) wfifo <- mkFIFOF();
  -   Vector#(N, FloatServer2#(Float)) adders <- replicateM(mkFloatAdder());
  -   Vector#(N, FloatServer2#(Float)) adders2 <- replicateM(mkFloatAdder());
  -   Vector#(N, FloatServer2#(Float)) multipliers <- replicateM(mkFloatMultiplier());
  +   Vector#(N, FloatAlu) adders <- replicateM(mkFloatAdder(defaultValue));
  +   Vector#(N, FloatAlu) adders2 <- replicateM(mkFloatAdder(defaultValue));
  +   Vector#(N, FloatAlu) multipliers <- replicateM(mkFloatMultiplier(defaultValue));
      DmaVectorSink#(DmaSz, Vector#(N, Float)) sink <- mkDmaVectorSink(toPipeOut(wfifo));
   
   // weights += learningRate * (pos_associations - neg_associations) / num_examples;
  
positive.code: import Pipe::*;
  import Timer::*;
  import RbmTypes::*;
  
  function ObjectReadClient#(asz) getSourceReadClient(DmaVectorSource#(asz,a) s); return s.dmaClient; endfunction
  function ObjectWriteClient#(asz) getSinkWriteClient(DmaVectorSink#(asz,a) s); return s.dmaClient; endfunction
  
negative.code:       sources[2].vector.pipe.deq();
        for (Integer i = 0; i < n; i = i+1) begin
  	 let resultexc <- multipliers[i].response.get();
  	 adders2[i].request.put(tuple2(weights[i], tpl_1(resultexc)));
        end
     endrule
     rule result;
  