anchor.diff:     ,Add#(1, h__, TDiv#(haystackBusWidth, 32))
      ,Add#(i__, 32, haystackBusWidth)
      ,Add#(j__, 8, haystackBusWidth)
  -   ,FunnelPipesPipelined#(1, DegPar, MemData#(haystackBusWidth), MemReadFunnelBPC)
  -   ,FunnelPipesPipelined#(1, DegPar, MemData#(configBusWidth), MemReadFunnelBPC)
   	    );
      
      let verbose = True;
   
      Reg#(Bit#(32)) needleLen <- mkReg(0);
  -   MemReadEngine#(haystackBusWidth,haystackBusWidth,1,DegPar) haystack_re <- mkMemReadEngineBuff(1024);
  -   MemReadEngine#(configBusWidth,configBusWidth,1,DegPar) config_re <- mkMemReadEngineBuff(1024);
  +   MemReadEngine#(haystackBusWidth,haystackBusWidth,1,1) haystack_re <- mkMemReadEngineBuff(1024);
  +   MemReadEngine#(configBusWidth,configBusWidth,1,2) config_re <- mkMemReadEngineBuff(1024);
      
      Reg#(Bit#(32)) needleSGLId <- mkReg(0);
      Reg#(Bit#(32)) mpNextSGLId <- mkReg(0);
  
positive.code: 	 needleLen <= needle_len;
  	 needleSGLId <= needle_sglId;
  	 mpNextSGLId <= mpNext_sglId;
  	 setupFSM.start();
        endmethod
     
        method Action search(Bit#(32) haystack_sglId, Bit#(32) haystack_len);
  	 if (verbose) $display("mkStrstr::search %d %d", haystack_sglId, haystack_len);
  	 haystackLen <= haystack_len;
  	 haystackSGLId <= haystack_sglId;
  	 startFSM.start();
        endmethod
     endinterface
     interface config_read_client = vec(config_re.dmaClient);
  
negative.code: // I can't belive we still have to do this shit
  function Bool my_or(Bool a, Bool b) = a || b;
     
  module mkStrstr#(StrstrIndication indication)(Strstr#(haystackBusWidth, configBusWidth))
     provisos (
     Mul#(TDiv#(configBusWidth, 8), 8, configBusWidth)
     ,Mul#(TDiv#(haystackBusWidth, 8), 8, haystackBusWidth)
     ,Add#(1, a__, TDiv#(haystackBusWidth, 8))
     ,Add#(b__, TLog#(TDiv#(haystackBusWidth, 8)), 32)
  