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: 
        first <= True;
        last <= (cfg.xbase+cfg.xstep >= cfg.xlimit);
        if (True || verbose) $display("mkIteratorOut xbase=%d xstep=%d xlimit=%d last=%d notEmpty=%d", cfg.xbase, cfg.xstep, cfg.xlimit, (cfg.xbase+cfg.xstep >= cfg.xlimit),
  	 (cfg.xbase < cfg.xlimit));
     endmethod
     method Bool isFirst() = first;
     method Bool isLast() = last;
  endmodule: mkIteratorOut
  
  typedef struct {
     a xbase;
  
negative.code:    a xstep;
  } IteratorConfig#(type a) deriving (Bits, FShow);
  
  interface IteratorWithContext#(type a, type c);
     interface PipeOut#(a) pipe;
     method Bool isFirst();
     method Bool isLast();
     method Action start(IteratorConfig#(a) cfg, c ctxt);
     method c ctxt();
  endinterface
  
  interface IteratorIfc#(type a);
     interface PipeOut#(a) pipe;
     method Bool isFirst();
  