anchor.diff:     
      xp[radix - 1][radix - 1] < mkSizedFIFOF(4);
      
  -   
      // create distributors
      
      for (Bit#(4) x = 0; x < radix; x = x + 1)
  -      mkdistributor("n", id, linkin[x], map(toPipeOut, xp[x]));
  +      mkdistributor(id, linkin[x], map(toPipeOut, xp[x]));
   
      // create arbiters
      for (Bit#(4) y = 0; y < radix; y = y + 1)
  
positive.code:    rule move;
        if (out.notFull && in[arb.grant_id].notEmpty)
  	 action
  	    $display("%s id %d,%d from %d", name, id[0], id[1], arb.grant_id);
  	    out.enq(in[arb.grant_id].first());
  	    in[arb.grant_id].deq();
  	 endaction
     endrule
  endmodule
  
  module mkDistribute#(Vector(n, Bit#(4)) id, String name, PipeOut#(a) in, Vector#(n, PipeIn#(a)) out)(Empty);
     rule move;
        $display("distrib %s[%d,%d] to [%d,%d] v %x",
  	 name, id[0], id[1], in.first.address[0], in.first.address[1],
  	 in.first.payload);
        if (in.address[0] < id[0]) 
  
negative.code: endfunction
  
  
  module mkNocArbitrate#(Vector#(n, Bit#(4)) id, Vector#(n, PipeOut#(a)) in, PipeIn#(a) out)(Empty);
     Arbiter_IFC#(n) arb <- mkArbiter(False);   
     for (Integer i = 0; i < valueOf(n); i = i + 1)
        rule send_request (out.notFull && in[i].notEmpty);
  