docs: def spinn5_fpga_link(x, y, link, root_x=0, root_y=0):
      """Get the identity of the FPGA link which corresponds with the supplied
      link.
  
      .. note::
          This function assumes the system is constructed from SpiNN-5 boards
          whose FPGAs are loaded with the SpI/O 'spinnaker_fpgas' image.
  
      Parameters
      ----------
      x, y : int
          The chip whose link is of interest.
      link : :py:class:`~rig.links.Link`
          The link of interest.
      root_x, root_y : int
          The coordinates of the root chip (i.e. the chip used to boot the
          machine), e.g. from
          :py:attr:`rig.machine_control.MachineController.root_chip`.
  
      Returns
      -------
      (fpga_num, link_num) or None
          If not None, the link supplied passes through an FPGA link. The
          returned tuple indicates the FPGA responsible for the sending-side of
          the link.
  
          `fpga_num` is the number (0, 1 or 2) of the FPGA responsible for the
          link.
  
          `link_num` indicates which of the sixteen SpiNNaker links (0 to 15)
          into an FPGA is being used. Links 0-7 are typically handled by S-ATA
          link 0 and 8-15 are handled by S-ATA link 1.
  
          Returns None if the supplied link does not pass through an FPGA.
      """
      x, y = spinn5_chip_coord(x, y, root_x, root_y)
      return SPINN5_FPGA_LINKS.get((x, y, link))