Данную задачу можно решить с помощью ПЛИС.
В Xilinx Vivado есть готовые IP блоки в
частности и для PCIe.
Для решения задачи ставим IP блоки прописываем в блоках адреса и другие параметры.
В Linux получаем базовый адрес и через этот адрес получаем доступ ко всем устройствам.
IP блоки Xilinx хорошо документированы там в принципе все описано.
Я не так давно решал подобную задачу. Проект на Kintex-7 включал:
PCIe(8 линий), JESD204B(16 линий) , несколько PLL, ADC и DAC на 2.5 ГГц.