anchor.diff:         xactors_to_slaves <- replicateM (mkAXI4_Master_Xactor);
   
      // ----------------------------------------------------------------
  -   // Book-keeping to keep track of which master originated a transaction, in
  -   // order to route corresponding responses back to that master, etc.
  -   // Legal slaves  are 0..(num_slaves-1)
  -   // The "illegal" value of 'num_slaves' is used for decode errors (no such slave)
  +   // Book-keeping FIFOs and regs
  +   // - to keep track of which master originated a transaction, in order
  +   //       to route corresponding responses back to that master
  +   // - to manage wdata channel based on burst info in awaddr channel
  +   // - to manage requests that do not map to any of the slaves.
  +   // Legal slaves are 0..(num_slaves-1)
  +   //     The "illegal" value of 'num_slaves' is used for decode errors (no such slave).
  +   // num_masters could be 1 => Bit #(0) to identify a master, but
  +   //     equality on Bit #(0) is dicey, so we always use num_masters+1.
      // Size of SizedFIFOs is estimated: should cover round-trip latency to slave and back.
   
      // ----------------
  
positive.code:    // (0 => ready for next burst)
     Vector #(tn_num_masters, Reg #(AXI4_Len)) v_rg_wd_beat_count <- replicateM (mkReg (0));
  
     // On a write-transaction to non-exisitent slave, record id and user for error response
     Vector #(tn_num_masters,
  	    FIFOF #(Tuple2 #(Bit #(wd_id),
  			     Bit #(wd_user))))  v_f_wr_err_info <- replicateM (mkSizedFIFOF (8));
  
negative.code:    Vector #(tn_num_masters, FIFOF #(Bit #(log_ns_plus_1))) v_f_rd_sjs <- replicateM (mkSizedFIFOF (8));
     // On an mi->sj read-transaction, records (mi,arlen) for slave sj
     Vector #(tn_num_slaves,
  	    FIFOF #(Tuple2 #(Bit #(log_nm_plus_1),
  			     AXI4_Len)))            v_f_rd_mis <- replicateM (mkSizedFIFOF (8));
     // On an mi->sj read-transaction, this register is the R-channel burst beat_count
     // (0 => ready for next burst)
  