anchor.diff:     method Action start(IteratorConfig#(a) cfg);
   endinterface
   
  -module mkIteratorOut(IteratorIfc#(a)) provisos (Arith#(a), Bits#(a,awidth), Eq#(a), Ord#(a));
  +module mkIteratorWithContext(IteratorWithContext#(a,c)) provisos (Arith#(a), Bits#(a,awidth), Eq#(a), Ord#(a), Bits#(c,cwidth));
  +   Reg#(c) ctxtReg <- mkReg(unpack(0));
      Reg#(a) x <- mkReg(0);
      Reg#(a) xbase <- mkReg(0);
      Reg#(a) xstep <- mkReg(0);
  
positive.code:    a xstep;
  } IteratorConfig#(type a) deriving (Bits, FShow);
  
  interface IteratorIfc#(type a);
     interface PipeOut#(a) pipe;
     method Bool isFirst();
  
negative.code:    Reg#(a) xlimit <- mkReg(0);
     Reg#(Bool) first <- mkReg(False);
     Reg#(Bool) last <- mkReg(False);
     Reg#(Bool) idle <- mkReg(True);
     Bool verbose = False;
     interface PipeOut pipe;
        method a first();
  	 return x;
        endmethod
        method Action deq if (!idle);
  	 let next_x = x + xstep;
  	 x <= x + xstep;
  	 first <= False;
  	 last <= (next_x+xstep >= xlimit);
  	 idle <= last;
        endmethod
        method Bool notEmpty();
  	 return (x < xlimit);
        endmethod
     endinterface
     method Action start(IteratorConfig#(a) cfg, c ctxt) if (idle);
        x <= cfg.xbase;
        xbase <= cfg.xbase;
        xstep <= cfg.xstep;
  