В последней редакции PYNQ edition мы исследовали, как инфраструктура PYNQ позволяет нам получить доступ к аппаратным функциям более низкого уровня, таким как генерация функций и сигналов и логический анализ.

В этом выпуске мы собираемся изучить, что такое процессор ввода-вывода (IOP) PYNQ и как мы можем использовать его в Python из среды Jupyter. Если вы не знакомы с платформой PYNQ, IOP позволяет нам использовать интерфейсы Arduino, Pmod и Raspberry Pi на плате PYNQ Z2. Его также можно расширить, если мы создадим настраиваемые оверлеи для взаимодействия с любым стандартом.

Это позволяет нам разгрузить низкоуровневый интерфейс в реальном времени на программируемую логику, обеспечивая более гибкое решение.

Поскольку IOP предназначен для взаимодействия с множеством различных датчиков и модулей Pmod, каждый IOP поддерживает ряд стандартов интерфейса.

В структуре IOP существует поддержка SPI, IIC, GPIO и таймеров (для сигналов PWM), которые могут быть направлены на порт ввода-вывода через коммутатор.

В основе IOP лежит процессор MicroBlaze. Чтобы обеспечить компактность, процессор MicroBlaze запускается из блочного ОЗУ в программируемой логике. Чтобы обеспечить гибкость во время выполнения, блочная RAM сконфигурирована как двухпортовая память, а второй порт подключен к системе обработки. Это означает, что во время выполнения мы можем легко обновить программу, работающую на MicroBlazes.

Чтобы обеспечить возможность создания нескольких экземпляров IOP, особенно в небольших устройствах, обычно память BRAM для каждого MicroBlaze ограничена 64 КБ.

Конечно, чтобы быть эффективными, PS и PL должны иметь возможность обмениваться информацией и взаимодействовать за пределами памяти приложения. Это достигается с помощью почтовых ящиков.

Как и при разработке традиционного решения MicroBlaze, в дополнение к приложению нам нужны как определение оборудования, так и пакет поддержки платы (BSP).

Если вы клонируете репозиторий PYNQ git и исследуете элементы IOP в библиотеке, вы заметите в / lib / pmod MicroBlaze BSP вместе с приложениями для определенных Pmods (хотя и не для всех).

При создании образа PYNQ эти файлы компилируются в файл bin и доступны через оболочку Python, как показано ниже.

Это дает нам доступ к IOP в нашем приложении Python и создает приложения, которые их используют, например Хакстерский проект контрольных петель.

Если мы хотим использовать Pmod, который еще не поддерживается в образе PYNQ, мы можем создать наш собственный драйвер Pmod, используя существующий проект Pmod в качестве шаблона. Этот проект должен быть создан с использованием Xilinx SDK с форматом вывода bin, это помогает выбрать проект с правильным интерфейсом, например. SPI, IIC, GPIO и т. Д.

Однако, чтобы использовать процессоры MicroBlaze в программируемой логике, нам не нужно разрабатывать приложение в SDK. Мы также можем сделать это с помощью записной книжки Jupyter.

Обычно в записных книжках Jupyter мы пишем приложения Python; но с помощью команд iPython Magic, обозначенных %%, мы можем компилировать другие языки. Это включает C для MicroBlaze. Все, что нам нужно сделать, это указать тип магии и целевой MicroBlaze, например. %% microblaze base.PMODA.

Поскольку у нас может быть несколько экземпляров MicroBlaze, нам также необходимо идентифицировать целевой MicroBlaze.

Используя этот подход, мы можем затем написать код C, скомпилировать его и выполнить на MicroBlaze. Мы можем взаимодействовать с кодом C, запущенным на MicroBlaze, вызывая функцию из Python, как показано в примере ниже.

Эта способность писать на C и использовать MicroBlaze гарантирует, что мы можем разрабатывать системы с использованием инфраструктуры PYNQ, которая использует каждый элемент PS или PL для обеспечения оптимального решения.

Это также означает, что мы можем легко получить доступ к драйверам низкого уровня из нашего приложения Python.

См. Мои проекты FPGA / SoC: Адам Тейлор на Hackster.io

Получить код: ATaylorCEngFIET (Адам Тейлор)

Получите доступ к архивам MicroZed Chronicles с более чем 280 статьями о Zynq / Zynq MpSoC, обновляемыми еженедельно в MicroZed Chronicles.