Несколько недель назад мы рассмотрели Xilinx Комплект для разработки глубокой нейронной сети и фреймворк DNNDK.

В этом блоге мы подробно рассмотрим элемент, лежащий в основе DNNDK, - это процессор глубокого обучения, или DPU, как его обычно называют.

Использование DPU с DNNDK позволяет нам реализовать сверточные нейронные сети (CNN) в наших решениях Zynq и Zynq MPSoC.

DPU создается в программируемой логике и требует подключения как к процессору, так и к внешней памяти. Во внешней памяти хранятся как инструкции, так и изображения для классификации, а процессор реагирует на прерывания от DPU для синхронизации работы.

С точки зрения интерфейса, DPU очень прост, состоящий из нескольких интерфейсов AXI, прерываний, тактовых импульсов и сбросов.

  • Интерфейс команд главного DPU (32 бита)
  • Два интерфейса передачи данных Master DPU (128 бит)
  • Интерфейс ведомого DPU (32 бита)

Помимо тактовой частоты ведомого AXI, ядро ​​DPU использует две тактовые частоты: тактовую частоту главного интерфейса AXI (m_axi_dpu_clk) и тактовую частоту, в два раза превышающую эту частоту (dpu_2x_clk). Чтобы добиться закрытия по времени, эти часы должны быть синхронизированы; поэтому для генерации обоих часов следует использовать мастер часов.

Чтобы обеспечить максимальную производительность, основная тактовая частота AXI должна быть установлена ​​на 333 МГц, что является максимальной тактовой частотой для интерфейсов AXI. Конечно, это означает, что dpu_2x_clk требует тактовой частоты 666 МГц. Убедитесь, что опция согласованной маршрутизации включена.

После подключения интерфейсов AXI мы можем назначить адреса памяти. Чтобы убедиться, что мы можем работать с DNNDK, нам необходимо выделить DPU не менее 16 МБ памяти.

Для работы с DNNDK первое прерывание DPU должно быть связано с IRQ 10. Это означает, что оно должно быть подключено к IRQ1 [7: 0] бит 2. Мы можем использовать блоки конкатенации и констант, чтобы гарантировать использование правильного прерывания.

Теперь, когда проект подключен к системе обработки, мы можем немного больше сосредоточиться на конфигурации самого IP-ядра.

Первое, что нам нужно решить, это количество DPU, которое мы хотим, чтобы IP-адрес DPU содержал - в нашем решении может быть от одного до трех ядер.

Второе - это собственно архитектура ядер. Доступно восемь архитектур. Название архитектуры Bxxx фактически определяет пиковые операции за такт. Чтобы обеспечить диапазон пиковых операций, разные архитектуры ядра имеют разные уровни пиксельного, входного и выходного параллелизма.

Выбор длины каскада DSP, как всегда, является компромиссом между использованием ресурсов и характеристиками синхронизации. Большая длина каскада требует меньше логики, но обеспечивает худшую производительность синхронизации, в то время как меньшая длина каскада требует меньше ресурсов, но обеспечивает лучшую производительность синхронизации. Поэтому использование каскадов большей длины более полезно в небольших устройствах, где логические ресурсы недоступны.

Последний вариант DSP, низкое или высокое использование DSP, относится к тому, как IP-ядро DPU реализует элементы DSP.

  • Низкий - DSP используются только для умножения
  • Высокий - элементы DSP используются для умножения и накопления.

Опять же, использование низкого значения предназначено для небольших устройств, которые предлагают ограниченные ресурсы.

Последний вариант - хотим ли мы, чтобы UltraRAM использовалась в IP DPU. Это доступно не на всех устройствах, но когда оно есть, его можно использовать вместо BRAM.

Как только все это настроено по желанию, мы можем реализовать дизайн. Когда я реализовал вышеуказанный дизайн, использование было таким, как показано ниже:

Если вы хотите узнать немного больше о DPU, взгляните на Технический эталонный дизайн, доступный здесь бесплатно.

Теперь, когда у нас есть битовый поток Vivado, нам нужно интегрировать его со сбросом стека DNNDK и начать использовать решение для нашего приложения CNN.

Следите за моим Хакстерским проектом - скоро там появится подробное руководство!

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

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

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