Программирование FPGA, с чего начать

29

Я разработчик программного обеспечения (C, C ++, Objective-C, Java ...), и я заинтересован в обучении программированию FPGA. Теперь вопрос может показаться вам простым, но, пожалуйста, найдите время, чтобы помочь мне в этом вопросе, так как я сейчас застрял. Моя компания попросила меня ознакомиться с технологией и поработать над решетчатым продуктом. У меня вопрос с чего начать? После некоторых исследований я обнаружил, что могу выбирать между VHDL и Verilog, я никогда не использовал ни одного из них. Есть ли специалист, который мог бы предложить мне, с чего мне начать? Выучить язык, узнать об аппаратных компонентах, а затем о решетке продукта? Или непосредственно начать с продукта Lattice (поскольку я читал, что методы программирования у поставщиков FPGA сильно различаются)?

Анила
источник
3
Если вы знакомы с программированием на C / C ++, то вам следует выбрать Verilog , а не VHDL. Синтаксис Verilog похож на C.
m.Alin
1
@ m.Alin Я только начинаю, и я обнаружил, что это не имеет значения, если это похоже на C, потому что я обнаружил, что самой сложной частью был не синтаксис, а разница в понятиях. Семантика даже близко не соответствует семантике С.
Эдгар Клеркс
Самое большое изменение, которое я нашел в C / C ++ / Java / etc. в том, что модули, которые вы пишете (я полагаю, эквивалентны модулям перевода), являются чисто управляемыми событиями. В C, упрощенном до базового принципа, скомпилированная программа будет выполнять строку 1 вашего кода, затем строку 2, затем 3, затем 4 и т. Д. В Verilog / VHDL такого нет, это немного похоже на рисование картинки : этот входной контакт соединяется с module1_input, module1_output переключает состояние каждый раз, когда module1_input достигает высокого уровня. Вместо if(condition)этого when(condition). Большинство FPGA IDE даже имеют вход графического дизайна, как если бы вы рисовали его на бумаге.
Чарли Хансон

Ответы:

40

Цифровой дизайн не имеет ничего общего с разработкой программного обеспечения (возможно, за исключением того, что синтаксис Verilog немного похож на язык C, но выглядит только так). Таким образом, очень сложно ответить на этот тип вопросов адекватно. Но как парень, который прошел путь от разработки программного обеспечения до проектирования оборудования, я попробую. Оглядываясь назад на себя, я бы посоветовал себе тогда, если бы знал, что знаю сейчас:

Начинать с нуля

Забудьте все о разработке программного обеспечения. Особенно языки программирования. Эти принципы не применяются в цифровом дизайне. Вероятно, было бы легко для парня, который проектировал процессор, программировать его на ассемблере или даже на C, но программист на ассемблере не сможет проектировать процессор.

На вашем пути обучения не склонны решать то, что кажется легкой проблемой с вашими существующими знаниями из программного обеспечения. Одним из классических примеров является «цикл». Даже если вы можете написать цикл for, скажем, в verilog - он служит другим целям. Он в основном используется для генерации кода. Это также может быть цикл for, как его видят разработчики программного обеспечения, но он ничего не даст, кроме симуляции (то есть вы не сможете программировать FPGA таким образом).

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

Изучите аппаратное обеспечение и язык HDL

Самые популярные языки HDL - Verilog и VHDL. Есть также специфичные для производителя, такие как AHDL (Altera HDL). Поскольку эти языки используются для описания аппаратных компонентов, все они в значительной степени используются для выражения одного и того же в схожих модах, но с другим синтаксисом.

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

Имея это в виду, я бы порекомендовал посмотреть с VHDL. Хотя с Verilog тоже все в порядке, если учесть вышеизложенное.

Важно помнить, что вы должны понимать, что вы выражаете на этом языке. Какое оборудование «описывается» и как оно работает.

По этой причине я бы порекомендовал вам приобрести какую-нибудь книгу по электронике в целом и такую ​​хорошую книгу, как эта - HDL Chip Design (она же синяя книга).

Получить симулятор

Прежде чем начать что-либо делать аппаратно и использовать какие-либо специфичные для поставщика функции и т. Д., Приобретите себе симулятор. Я начинал с Verilog и использовал Icarus Verilog вместе с GTK Wave. Это бесплатные проекты с открытым исходным кодом. Используйте примеры, которые вы видите в книгах, попрактикуйтесь, создав собственные схемы, чтобы почувствовать вкус этого.

Получить совет по развитию

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

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

Я бы также позаботился о том, чтобы на плате были компоненты, которые вы планируете использовать или которые можно расширять. Например, если вы хотите спроектировать сетевое устройство, например, маршрутизатор, убедитесь, что на плате установлен Ethernet PHY или его можно расширить, например, через разъем HSMC и т. Д.

Платы обычно идут с хорошим справочником, руководством пользователя и примерами дизайна. Изучите их.

Читать книги

Вам нужно будет читать книги. В моем случае у меня не было друзей, знакомых с цифровым дизайном, и этот сайт тоже не очень помог из-за одной простой вещи - я даже не знал, как сформулировать свой вопрос. Все, что я мог придумать, было что-то вроде: «Хм, ребята, есть что-то, dcfifo, и я услышал кое-что о проблемах пересечения области часов, что это такое и почему мой дизайн не работает?»

Я лично начал с этого:

У поставщиков ПЛИС есть много поваренных книг с лучшими практиками. Изучите их вместе с эталонными конструкциями. Вот один из Альтера, например.

Вернись с более конкретными вопросами

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

user8459
источник
Большое спасибо за этот подробный ответ, он действительно помог мне понять, как я могу действовать. К сожалению, у меня нет друзей, которые могли бы мне помочь. Но вы только что спасли меня от многих неприятностей и еще раз большое спасибо !!!!
Анила
5
Отличный ответ.
Асад Эбрахим
Еще в школе мы изучали C ++ до того, как узнали VHDL. Было много проблем с пониманием этого, но точка, когда все щелкнуло, была, когда я понял, что все происходит в режиме реального времени и параллельно (параллельно, а не асинхронно, как nodejs). Разработка программного обеспечения происходит последовательно, но в HDL все происходит одновременно (большую часть времени). Если у вас есть что-то вроде «x = 1; y = 2; y = x; x = y», в SW, в конце y будет равен 1, в HDL у вас есть условие гонки, так как x и y попытаются переходить друг в друга в одно и то же время. Просто помните об этом, и жизнь может быть проще для вас.
PGT
@PGT Вы должны ожидать, что значение y будет чем-то отличным от 1, если 'y' доступно для нескольких процессов, работающих на одном или нескольких ядрах, что может навязать его авторитет более слабому процессу.
Адития
1

В качестве альтернативы вы можете использовать некоторые высокоуровневые методы синтеза, такие как Vivado HLS от Xilinx и решение OpenCL от Altera. Возможно, это поможет вам освоить языки описания аппаратного обеспечения с учетом вашего программного обеспечения.

troore
источник
-1

Сначала изучите основы цифрового дизайна. Машина Мили / Мура, комбинаторная логика, таблица истинности, карта Карно и так далее. Начните создавать простой дизайн в схеме (7-сегментный счетчик), а затем изучите HDL. В Европе VHDL используется, в США Verilog. Наконец, важна временная привязка, имейте в виду, что сигналы имеют задержки, которые являются мгновенными компонентами и зависят от температуры, и каждый сигнал имеет другую задержку.

Книга для чтения: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379

Знание синтаксиса Perfect Language предназначено для дальнейшего понимания в первую очередь цифрового дизайна и проблем.

Робин
источник
В Европе VHDL используется, в США Verilog. Совсем не правда ...
Мэтт Янг
Действительно, я выучил Verilog, и я из Великобритании. Это также язык, преподаваемый в одном из модулей, которые я изучал в универе (также в Великобритании).
Том Карпентер