Всем привет. Есть в наличии Xilinx Kintex-7 FPGA KC705 Evaluation Kit. Хочется разобраться с использованием PCIe. В конечном итоге нужно сделать связку FPGA-PC. В этой связке компьютер задает начальные критерии. Плата, на основе этих критериев, как то обрабатывает данные и передает результат по PCIe обратно в компьтер. Для примера: плата является ethernet-мостом, который может оборвать соединение с конечным устройством, если будет передано сообщение, неудовлетворяющее критериям, и сообщить компьютеру, какое сообщение и по какому критерию не прошло.
Начал разбираться сам, но от обилия информации только каша в голове.
Как вижу я последовательность действий: 1) собрать для начала пример, в котором плата будет просто отвечать на запросы от компьютера (например зажигать/тушить светодиод). Примеры в вивадо основаны на работе с памятью. Таким образом от компьтера команда выглядит как адрес регистра функции чтения/записи, а данные это - просто адрес для чтения, и адрес/данные для записи - так ли это? Если это так, то для случая со светодиодом как это будет выглядеть? 2) разобраться как для этого дела написать драйвер по linux. 3) собрать пример, где помимо светодиода, будет еще задействована какая-нибудь кнопка, и привязать к ней какое-нибудь элементарное действие, например переключение раскладки (может быть это и не очень элементрано - не знаю). Соответственно в проект нужно будет добавь не достающее (как я понял это dma). 4) доработать драйвер.
На этом как бы идеи и представления как реализовать пропадают...
Конечно хотелось бы увидеть уже готовые примеры. Может пока искал информацию, что то пропустил. Но для начало бы было достаточно тыкнуть носом в подходящие доки хотя бы по первым двум пунктам, а так же подсказать где искать про сам PCIe, а то все что находил либо совсем про низкий уровень (параметры элементной базы, допустимые напряжения и т.д.), либо совсем поверхностно...
В ходе поисков был найден xapp1171. Подойдет ли он для реализации пункта 3? На сколько сложно будет написать драйвер основываясь на данном xapp?
|