Несколько недель назад мы рассмотрели 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.