anchor.diff:  `endif
          );
   
  -   for(Integer i = 0; i < top.indications.length; i=i+1) begin
  -       mkXsimSource(i, top.indications[i].src_rdy, top.indications[i].beat);
  -       rule ind_dst_rdy;
  -           top.indications[i].dst_rdy(True);
  -       endrule
  -   end
  -   for(Integer i = 0; i < top.requests.length; i=i+1) begin
  -       MsgSinkR#(4) sink <- mkXsimSink(i, top.requests[i].dst_rdy);
  -       rule req_src_rdy;
  -           top.requests[i].src_rdy(sink.src_rdy);
  -       endrule
  -       rule req_beat;
  -           top.requests[i].beat(sink.beat);
  -       endrule
  -   end
  +   mapM_(uncurry(mkXsimSource), zip(top.indications, genVector()));
  +   mapM_(uncurry(mkXsimSink), zip(top.requests, genVector()));
   endmodule
  
positive.code: // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  // SOFTWARE.
  import Portal            :: *;
  import Top               :: *;
  import HostInterface     :: *;
  
negative.code: endmodule
  
  import "BVI" XsimSource =
  module mkXsimSourceBVI#(Bit#(32) portal, Bool src_rdy, MsgBeat#(4) beat)(Empty);
      port portal = portal;
      port src_rdy = src_rdy;
      port beat = beat;
  endmodule
  module mkXsimSource#(MsgSource#(4) indication, Integer i)(Empty);
     mkXsimSourceBVI(fromInteger(i), indication.src_rdy, indication.beat());
     rule ind_dst_rdy;
        indication.dst_rdy(True);
     endrule
  endmodule
  
  interface MsgSinkR#(numeric type bytes_per_beat);
  