SPI‑контроллер на FPGA: переносим на Zynq 7000. Часть 2

Продолжаем разработку SPI IP Core на Verilog. В первой части мы перенесли SPI‑контроллер с Altera Cyclone IV на Zynq-7020, сохранили исходный регистровый интерфейс и добавили AXI4-Lite. Теперь задача меняется: нужно превратить работающий RTL в полноценное устройство под Linux.
Во второй части соберем Block Design с PS, настроим карту адресов и прерывания, подготовим загрузочную цепочку и Device Tree, а затем подключим контроллер к стандартной SPI subsystem Linux. Здесь уже недостаточно рабочего bitstream: ошибка в ps7_init, адресах или Device Tree может сделать исправное ядро недоступным для ОС. После обычного PIO‑доступа добавим потоковый тракт для больших объемов данных. Для этого появятся AXI‑Stream адаптер, глубокий FIFO, backpressure и режим TX‑only. По ходу разберем ошибки, которые проявляются только под нагрузкой: потерю байтов на границе FIFO, проблемы запуска DMA и устаревший результат синтеза.
Финал этой части — плата самостоятельно загружает Linux, SPI работает через драйвер, а большие буферы передаются из DDR в PL через AXI DMA без побайтового участия Cortex‑A9.
Всем, кому интересно продолжение — добро пожаловать под кат! =)



















