Я строю проект FPGA, в котором некоторые устройства (процессор, UART, контроллер GPIO) подключены к шине AXI4.Шина AXI4 подключается к хосту через Xilinx «AXI Memory Mapped to PCI Express (PCIe) Gen2 v2.6 LogiCORE IP», который действует как мост.Подсистема, расположенная на интерфейсах FPGA через PCIe с драйвером Linux.Этот драйвер создает файл устройства для предоставления интерфейса к симулятору компьютерной системы, работающему на хосте, так называемой виртуальной платформе (VP).Часть компонентов системы будет смоделирована в VP, тогда как остальные компоненты реализованы на FPGA.Системная шина VP прозрачно подключена к шине AXI4 на ПЛИС через драйвер и вышеупомянутый мост.Транзакции, инициируемые на хосте, уже реализованы и работают правильно.
Я хотел бы знать, есть ли способ обнаружения транзакции чтения или записи PCIe в драйвере Linux, тогда как транзакция выдается конечной точкой PCIeвыступая в роли мастера шины.
Пока что мои идеи таковы: (i) создать экземпляр контроллера DMA на ПЛИС, который выдает прерывание с сигналом сообщения (MSI) хосту в конце каждой передачи,Затем драйвер может получить начальный адрес и размер передачи из контрольных регистров DMA.(ii) выделить на хосте буфер, из которого / в который мастер чтения / записи шины PCIe выполняет чтение / запись.Этот буфер должен быть опрошен, чтобы обнаружить изменения, которые мне кажутся неэффективными, особенно для больших буферов.
Есть ли у кого-нибудь идея для лучшего решения?Это мой первый вопрос здесь.Пожалуйста, извините, что мой вопрос стал немного длинным.Любые отзывы будут высоко оценены.