anchor.diff:  // I can't belive we still have to do this shit
   function Bool my_or(Bool a, Bool b) = a || b;
      
  -typedef `DEGPAR DegPar;   
  -   
   module mkStrstr#(StrstrIndication indication)(Strstr#(haystackBusWidth, configBusWidth))
  -   provisos( Log#(DegPar,logDegPar)
  -
  -
  -   ,Mul#(TDiv#(configBusWidth, 8), 8, 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)
  
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:    Reg#(Bit#(32)) setupCnt <- mkReg(0);
     Reg#(Bit#(32)) doneCnt <- mkReg(0);
  
     MPStreamEngine#(haystackBusWidth,configBusWidth) engine <- mkMPStreamEngine;
     mkConnection(config_re.readServers[0].data, engine.needle);
     mkConnection(config_re.readServers[1].data, engine.mpNext);
     mkConnection(haystack_re.readServers[0].data, engine.haystack);
  
     rule resr;
        let rv <- toGet(engine.locdone).get;
        // send results back to SW
        indication.searchResult(rv);
        if (verbose) $display("strstr search result %d", rv);
     endrule
        
     interface StrstrRequest request;
        method Action setup(Bit#(32) needle_sglId, Bit#(32) mpNext_sglId, Bit#(32) needle_len);
  