Подтвердить что ты не робот

Симулятор нейронной сети в FPGA?

Чтобы узнать о программировании FPGA, я планирую кодировать простую нейронную сеть в FPGA (так как она широко параллельна, это одна из немногих вещей, где реализация FPGA может быть быстрее, чем реализация ЦП).

Хотя я знаком с программированием на С (более 10 лет). Я не уверен в разработке FPGA. Можете ли вы предоставить список руководств, что я должен делать/учиться/покупать?

Спасибо!

4b9b3361

Ответ 1

Большинство попыток создания "литеральной" нейронной сети на ПЛИС очень быстро ударяют по границам маршрутизации, вы можете получить несколько сотен ячеек до того, как P & R pulls займет больше времени, чем ваша проблема стоит ждать. Большая часть исследований в NN и FPGA использует этот подход, концентрируясь на минимальной реализации node и предлагая масштабирование теперь тривиально.

Способ создания эффективной нейронной сети с разумным размером фактически работает, чтобы использовать FPGA для построения специализированной машины для сверления числа нейронных сетей. Получите свои первоначальные значения node в чипе памяти, у вас есть второй чип памяти для следующих результатов timestamp и третья область для хранения ваших весов для подключения. Направьте значения node и данные соединения с помощью методов, чтобы шины памяти были насыщены (заказывайте node нагрузками по линии CAS, используя чтение по трубопроводам). При сравнении с предыдущими значениями пройденного большого количества проходов потребуется большое количество проходов, когда вы сравниваете весы с предыдущими значениями, запускайте их через узлы MAC DSP для оценки новых весов node, а затем выходите в область памяти результата после того, как все соединения будут оценены. Как только у вас закончится целая временная отметка, измените направление потока, чтобы следующий тайм-код записывался обратно в исходную область хранения.

Ответ 3

Я хочу указать на потенциальную проблему с внедрением нейронной сети в ПЛИС. ПЛИС имеют ограниченное количество ресурсов маршрутизации. В отличие от логических ресурсов (flops, look-up tables, memories), ресурсы маршрутизации трудно поддаются количественной оценке. Может быть, простая нейронная сеть будет работать, но "массово параллельная" с сетчатыми межсоединениями может и не быть.

Я бы предложил начать с простого ядра OpenCores.org, чтобы познакомиться с потоком FPGA, а затем перейти к прототипированию нейронной сети. Скачивание бесплатного Xilinx WebPack, которое включает симулятор ISIM, является хорошим началом. Позже вы можете купить дешевую дев. с небольшим FPGA (например, Xilinx Spartan 3) для запуска ваших проектов.

Ответ 4

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

  • http://www.fpga4fun.com/ - Отличные примеры простых проектов и некоторых плат.
  • http://opencores.org/ - Очень полезный ссылочный код для многих интерфейсов и т.д.

Вам также может понравиться использовать мягкий процессор в FPGA, чтобы помочь вам перейти с C на VHDL или Verilog. Это позволит вам перемещать небольшие модули кода от одного к другому, чтобы увидеть различия в оборудовании. Выбор языка несколько произволен - я часто использую код VHDL (синтаксически подобный ADA), но некоторые из моих коллег предпочитают Verilog (синтаксически подобный C). Мы обсуждаем это время от времени, но на самом деле это личный выбор.

Что касается руководства для покупателей/учителей, вам необходимо:

  • Терпение:). Цикл проектирования для ПЛИС значительно длиннее, чем для программного обеспечения из-за количества дополнительных "свободных параметров" в сборке, поэтому не удивляйтесь, если это требуется некоторое время, чтобы получить проекты, работающие именно так, как вы хотите.

  • Платформа разработки. Для обучения я бы купил один из трех крупных поставщиков FPGA: Xilinx, Altera или Lattice. Мое предпочтение - Xilinx на данный момент, но все трое хороши. Для обучения не покупайте его на основе более высоких частей - вам не нужно при использовании FPGA. Для Xilinx возьмите его на основе спартанских серий, таких как SP601 (у меня есть один). Для Altera купите Cyclone. Платы разработки будут значительно дешевле, чем у более дорогих частей.

  • Кабель для программирования. Большинство компаний производят кабель программирования USB со специальным разъемом для программирования устройств на плате (часто с использованием JTAG). Некоторые платы имеют встроенный программный интерфейс (например, SP601 от Xilinx), поэтому вам не нужно тратить на него дополнительные деньги.

  • Инструменты сборки. Их много, но большинство крупных поставщиков FPGA предоставляют свое решение. Имейте в виду, что инструменты доступны только для меньших FPGA с более низкой производительностью, например, Xilinx ISE Webpack.

    Программное обеспечение включает этапы, с которыми вы, возможно, не знакомы, исходящие из мира программного обеспечения. Специфика потока инструмента всегда меняется, но любой инструмент, который вы используете, должен иметь возможность получить от вашего кода к вашему конкретному устройству. Последняя часть этого потока дизайна обычно предоставляется поставщиком FPGA, поскольку она специфична для оборудования и является собственностью. Чтобы дать вам краткий пример, требуемое программное обеспечение должно взять ваш код VHDL и Verilog и (это версия Xilinx):

    • "Синтезировать" его в конструкции, соответствующие строительным блокам, доступным внутри вашей конкретной FPGA.
    • "Перевести и отобразить" дизайн в часть.
    • "Размещайте и направляйте" логику на конкретном устройстве, чтобы он соответствовал вашим требованиям времени (например, тактовой частоте, на которую вы хотите запустить проект).

Ответ 5

Независимо от того, что говорит Чарльз Стюарт, Verilog - прекрасное место для начала. Это напоминает мне о C, как VHDL напоминает мне об ADA. Никто не использует Оккам в промышленности, и он не распространен в университетах.

Для книги Verilog я рекомендую эти, особенно Verilog HDL. Verilog выполняет параллельную работу тривиально, в отличие от C.

Чтобы купить, получить относительно дешевую плату eval cyclone III от [Altera] или Altera 3 (например, это Cyclone III с NIOS за $449 или этот за $199) или Xilinx.

Ответ 6

Я дам вам третью рекомендацию: используйте VHDL. Да, на поверхности это похоже на ADA. Хотя Verilog имеет некоторое сходство с C. Однако, с Verilog вы получаете только те типы, которые поставляются с ним из коробки. С помощью VHDL вы можете определить свои собственные новые типы, которые позволяют вам программировать на более высоком уровне (конечно, RTL). Я уверен, что бесплатные инструменты Xilinx и Altera поддерживают как VHDL, так и Verilog. "Руководство для дизайнеров VHDL" от Ashenden - это хорошая книга VHDL.

VHDL имеет стандартный математический пакет с фиксированной точкой, который может упростить реализацию NN.

Ответ 7

Это старое, потому что я почти не думал о ПЛИС почти за 20 лет, и он использует параллельный язык программирования, который довольно неясен, но Пейдж и Лук, 1991, "Компиляция Оккама в FPGA" содержит несколько важных тем в хорошем смысле, достаточно, я думаю, для ваших целей. Две ссылки для тестирования:

  • KRoC является активно поддерживаемым, основанным на Linux компилятором Оккама, который, как я знаю, имеет активную базу пользователей.
  • Роджер Пил имеет страницу логического синтеза, которая имеет некоторую документацию о его рабочем процессе на основе Linux от синтеза кода Okam до ввода/вывода FPGA.

Occam- > FPGA - это не то, где действие, но может быть гораздо лучше начать, чем, скажем, Verilog.

Ответ 8

Я бы рекомендовал изучить xilinx высокоуровневый синтез, особенно если вы исходите из C-фона. Он абстрагирует технические детали при использовании hdl, поэтому разработчик может сосредоточиться на алгоритмической реализации.

Это ограничение в типе кода C, который вы можете написать. Например, вы не можете использовать динамически размерные структуры данных, так как это будет определять аппаратное обеспечение с динамическим размером.