VHDL или Verilog? [закрыто]

94

VHDL и Verilog - это HDL дня. Каковы преимущества того, кто вообще не имеет опыта работы с ЛПВП?

stevenvh
источник
2
Они кажутся одинаково эффективными, выберите тот, который вы предпочитаете. Я считаю, что VHDL подходит мне лучше всего.
Леон Хеллер
1
Как я могу дать этим модераторам "проголосовать вниз"? Риторика людей с опытом ранее более ценна, чем информация, содержащаяся в книгах. Книги не несут понятие времени.
dsgdfg

Ответы:

70

Я не могу сказать вам, чему учиться, но вот некоторые контрастные моменты (от очень VHDL-ориентированного пользователя, но я старался быть максимально справедливым!), Которые могут помочь вам сделать выбор на основе ваших собственных предпочтений с точки зрения стиля разработки:

И имейте в виду знаменитую цитату, которая звучит так: «Я предпочитаю, какой из двух я сейчас не использую» (извините, я не могу вспомнить, кто на самом деле написал это - возможно, Яник Бержерон?)

VHDL

  • сильно типизированных
  • более многословный
  • очень детерминированный
  • не-C-подобный синтаксис (и мышление)

Множество ошибок компиляции, но в большинстве случаев работает так, как вы ожидаете. Это может привести к очень крутому чувству кривой обучения (наряду с незнакомым синтаксисом)

Verilog

  • слабо типизированных
  • более кратким
  • только детерминированный, если вы тщательно соблюдаете некоторые правила
  • больше C-подобного синтаксиса (и мышления)

Ошибки обнаруживаются позже в симуляции - кривая обучения «ощущению, как будто что-то делается» меньше, но длится дольше (если это правильная метафора?)

Также в пользу Verilog является то, что высокопроизводительная проверка все больше и больше опирается на SystemVerilog, который является огромным расширением для Verilog. Но высокопроизводительные инструменты также могут объединять код синтеза VHDL с кодом проверки SystemVerilog.


Полностью для другого подхода: MyHDL - вы получаете всю мощь Python как языка верификации с набором расширений синтеза, из которых вы можете генерировать VHDL или Verilog.

Или Cocotb - все возможности Python как языка проверки, с вашим синтезируемым кодом, все еще написанным на том языке, на котором вы решили изучать HDL (например, VHDL или Verilog).

Мартин Томпсон
источник
2
Я знаю Verilog, но я не знаком с VHDL: что вы подразумеваете под VHDL, будучи более детерминированным, чем Verilog?
Cic
44

Я выучил оба на одной неделе. VHDL похож на ADA / Pascal, а Verilog похож на C. VHDL более многословен и более болезнен для получения компиляции, но как только вы получите компиляцию, ваши шансы на успех возрастают. По крайней мере, это то, что я нашел. Verilog, как и C, довольно доволен, позволяя вам выстрелить себе в ногу. Некоторые отрасли, такие как авиакосмическая промышленность, склоняются к VHDL, другие склоняются к Verilog. Проблема, с которой я сталкиваюсь в обоих случаях, заключается в возможностях тестового стенда, и при попытке освоить и попытаться перейти от симуляции к написанию синтезируемого кода только на кремнии / ПЛИС - это еще один уровень образования.

Есть язык, который мне действительно нравится, называется CDL . Он строго синтезируемый, вы пишете свои испытательные стенды другими способами, он генерирует синтезируемый Verilog, который вы можете использовать в других инструментах. К сожалению, документов по CDL не хватает, я надеюсь выпустить несколько примеров в мире, чтобы показать, насколько проще их использовать, чем Verilog или VHDL, но просто этого не сделали. Он поставляется с собственной сим / тестовой средой. С CDL и GTKWave вы можете проделать значительную работу.

Еще один инструмент под названием Verilator , достаточно жесткий для поддержания чистоты вашего Verilog. Это бесплатный симулятор Verilog с очень простым способом подключения к симу или создания испытательных стендов в C / C ++. Вы также можете использовать Verilog, не ограничивая вас там. Существует также Icarus Verilog , который больше и более известен, но я бы порекомендовал Verilator, если вы хотите изучать Verilog. Для VHDL есть GHDL , мой опыт работы с ним был не таким хорошим, как у Verilator , но, по крайней мере, есть бесплатный инструмент для того, чтобы намочить ноги. Если у вас есть опыт программирования, вы, скорее всего, поймете и наслаждаетесь Verilog быстрее, чем VHDL.

Я определенно согласен с Леоном, попробуйте оба. fpga4fun и другие веб-страницы содержат некоторую полезную информацию, и некоторые из этих страниц предоставят вам как Verilog, так и VHDL-эквиваленты для обсуждаемой темы. Я считаю такие страницы наиболее полезными для сравнения двух языков. Если использование HDL - это то, чем вы хотите заниматься в своей карьере, я рекомендую иметь по крайней мере некоторые возможности с обоими, возможно, действительно хорошо с одним, но не быть полностью неспособным использовать другое.

dwelch
источник
1
Очень хорошие советы. Я отредактировал ваш ответ как ссылку на меня и других. +1
Даниэль Грилло
23

Многие священные войны велись из-за этого. Одним из конкретных недостатков Verilog является его недетерминированное поведение. http://www.sigasi.com/content/verilogs-major-flaw

Philippe
источник
Да, это выглядит плохо, но я не уверен: это недостаток в языке или в этом конкретном синтезаторе?
Стивенвх
4
Это проблема языка. Различные синтезаторы выбирают свое поведение непредсказуемым образом. Запустите один и тот же код на симуляторе Mentor или на симуляторе Cadence, и вы можете получить другие результаты.
Филипп
20

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

Обычно выбор того или другого зависит от инструментов, которые вы используете. Некоторые из популярных инструментов FPGA работают лучше с VHDL. Некоторые популярные инструменты ASIC работают лучше с Verilog. Итак, что лучше, зависит от того, что вы хотите с ним делать.

Скажем, вы хотите создавать небольшие проекты с использованием FPGA Altera, которые популярны в школах EE. Бесплатные инструменты поддерживают оба HDL. Но вы можете обнаружить, что сообщество пользователей в основном использует VHDL. Будет больше примеров кода, многократно используемых модулей и т. Д., Если вы выберете этот язык.

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

Больше обсуждения здесь и полезных ссылок здесь:

http://www.eetimes.com/electronics-blogs/programmable-logic-designline-blog/4032239/Verilog-versus-VHDL-which-is-best-

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

Энди МакКи
источник
4
Благодарю. Последнее предложение важно. Существуют ли инструменты, которые конвертируют один в другой?
Стивенвх
Есть некоторая история правительства США, в которую я не попаду, но если вы посмотрите на modelsim, когда он принимает verilog, он преобразуется в vhdl, а затем симулирует это. С другой стороны, это не так, поэтому, по крайней мере, с verilog to vhdl вы можете увидеть некоторые преобразования с помощью этого инструмента. Есть и другие инструменты, которые специально конвертируют так или иначе, и у них есть демо-версии.
old_timer
3
Некоторые из коммерческих инструментов (синтез, статический анализ) будут читать на одном языке и выводить на другом. Результат подобен использованию компилятора для превращения Ada в язык ассемблера, а затем декомпилятора для извлечения C. Результат вам не понравится.
Энди МакКи
17

Краткий ответ : используйте SystemVerilog, но изучите также VHDL . Избегайте Verilog-2001, если можете.

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

  • Verilog-2001 лаконичен , а VHDL (очень, очень, очень) многословен
  • Verilog-2001 поддерживает конструкции очень низкого уровня, которые не поддерживаются VHDL (но вам не придется использовать их для проектирования типичного уровня передачи регистра (RTL)
  • VHDL более строго типизирован , что, как правило, значительно облегчает раннее обнаружение ошибок.
  • VHDL гораздо более выразителен, чем Verilog
  • Verilog-2001 имеет более C-подобный синтаксис, тогда как VHDL более Ada-подобный
  • Verilog-2001 может иметь некоторые запутанные концепции для начинающих (например, wireпротив reg)

Тем не менее, наиболее важные понятия разделяются двумя языками, хотя и под разными именами (например, alwaysпротив process), и в любом случае трудность в изучении ЛПВП больше связана с концепциями, лежащими в основе (таких как параллелизм всех процессов, HW). условности и т. д.), чем самому языку. Учитывая различия, если выбор между Verilog 2001 и VHDL, я лично обращался бы к любому новичку в VHDL.

Однако, как я уже сказал, я предлагаю не использовать ни VHDL, ни Verilog-2001, если у вас есть право выбора. Вопреки тому, что многие люди предполагают, SystemVerilog не является языком высокого уровня, полезным только для проектирования или проверки на системном уровне, и имеет мало общего с языками, которые можно использовать в инструменте синтеза высокого уровня, таком как SystemC.

Вместо этого SystemVerilog представляет собой полное обновление языка Verilog (на основе Verilog-2005, см. Http://en.wikipedia.org/wiki/SystemVerilog ), которое имеет полностью синтезируемое подмножество, которое соответствует краткости Verilog с более высокой выразительностью, чем оба Verilog-2001 и VHDL, предоставляя, на мой взгляд, лучшее из обоих миров.

Примеры очень значимых конструкций / выражений, доступных в SystemVerilog, которые недоступны в Verilog-2001, VHDL или в обоих:

  • always_ff, always_latch, always_combБлоки , которые помогают разработчику отличить сразу между блоками , реализующих различные виды логики, и - always_combи always_latch- (! Источником бесконечных ошибок в VHDL и Verilog, особенно для начинающих) вывод автоматически сигналы , которые должны идти в списке чувствительности
  • logicтипы, которые заменяют запутанные wireи regтипы Verilog-2001
  • упакованные типы, которые позволяют легко logic [N-1:0][M-1:0][P-1:0]создавать многомерные шины (например ), тогда как Verilog-2001 поддерживает только двумерные шины, а VHDL заставляет разработчика определять новые типы для построения аналогичных структур
  • высокоуровневые конструкции, такие как struct(аналогичные VHDL record) и даже более высокого уровня, interfaceкоторые можно очень эффективно использовать для моделирования обычных структур (таких как порты шины)

Я проверил все эти различия «на моей коже», работая над довольно сложной многоядерной системой для исследовательских целей. В настоящее время он поддерживается многими инструментами, и я точно знаю (используя их почти каждый день), что он поддерживается инструментами Synopsys (как для потоков синтеза ASIC, так и FPGA), Xilinx Vivado (для синтеза FPGA) и инструментами моделирования, такими как в качестве MentorGraphics Modelsim, Cadence NCsim и Synopsys VCS.

Чтобы быть полностью завершенным, в наборе инструментов разработчика аппаратного обеспечения есть два других важных типа языков (хотя качество этих инструментов может сильно различаться):

  • Языки поколения HDL, такие как MyHDL (на основе Python) и Rocket (на основе Scala). Идея здесь такова: вы описываете свой дизайн на языке более высокого уровня, но при этом используете концепции HDL (например, параллельные блоки, явная синхронизация) и затем генерируете обычный HDL (обычно Verilog-2001). Честно говоря, я не нахожу это супер полезным, так как шаг абстракции от HDL мал, а SystemVerilog уже предлагает многие концепции более высокого уровня, с тем преимуществом, что он напрямую подается в поток синтеза без промежуточных шагов.
  • Инструменты высокого уровня синтеза , такие как Vivado HLS, LegUp, Calypto Catapult и многие другие. Они берут очень высокоуровневое описание, часто на C, C ++ или SystemC и, как правило, несвязанные, и генерируют наилучшую реализацию в (обычно нечитабельном) Verilog. Они довольно хорошо генерируют некоторые объекты (например, HW-ускорители для таких функций, как свертка, БПФ и т. Д.), Но, как правило, не являются универсальными. Например, невозможно спроектировать ядро ​​процессора в большинстве инструментов HLS - я знаю только одно - BlueSpec, который действительно является гибридом между поколениями HLS и HDL.
Франческо Конти
источник
Это довольно много, как я узнал. Сначала выучил VHDL и закодировал его 3 года. После этого потратил 3 месяца на кодирование verilog и (очень быстро) решил, что SystemVerilog - это то, что нужно. Теперь я пишу почти исключительно SV, но в значительной степени полагаюсь на методы понимания и кодирования, которые я изучил при использовании VHDL.
Станри
12

Моя карьера за последние 13 лет была 80% ASIC и 20% FPGA.

VHDL использовался в течение первых 3,5 лет, а остальные были Verilog. Я не нашел переключения на Verilog трудным, и по причине местоположения (Силиконовая долина) и соображений скорости я сегодня пишу только в Verilog.

Кроме того, я делаю множество асинхронных интерфейсов, защелок и полустроительных дизайнов на уровне ворот для повышения производительности, поэтому VHDL сейчас практически не используется в моей жизни. Вместо этого я обнаружил, что SystemVerilog и SystemC гораздо полезнее подобрать и использовать для больших инженерных проектов.

На одном этапе такие инструменты, как Verilator (бесплатно! И быстро), сэкономили мне очень много средств, необходимых для критических симуляций. У вас нет этой опции (пока) для VHDL. И вам это может никогда не понадобиться, если вы всегда плаваете в богатом бассейне или не занимаетесь дизайном> 1M ворот.

Тем не менее, VHDL лучше для начинающих, прежде чем они разработают твердые принципы проектирования HW. Мои связи с ребятами из EDA здесь показывают, что за последние 10 лет они мало занимались разработкой VHDL, и сегодня у HLS есть большой стимул. Так что вокруг не будет много разработчиков инструментов VHDL ...

user27239
источник
FreeHDL для симуляции VHDL? Qucs как внешний интерфейс.
Мартин
8

Я пошел на VHDL, в основном потому, что я очень хорошо знаю C и обнаружил, что при попытке написать verilog я обычно писал так, как будто я нацеливался на процессор, не описывающий аппаратное обеспечение.

Очень досадно писать страницу кода и понимать, что то, что вы написали, было по сути последовательной программой, а не аппаратным проектом, да, это было бы синтезатором, но результат был уродливым и медленным.

VHDL отличался настолько, что мне было гораздо проще думать с точки зрения логического проектирования, а не потока управления.

В конце концов, язык редко бывает сложным, навыки в дизайне системы, а не в наборе текста.

С уважением, Дэн.

Дэн Миллс
источник
5

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

Конечно, я спросил обоих профессоров о различиях VHDL и Verilog. Оба не могли выбрать лучшее.

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

После этого я решил сделать только VHDL, потому что в то время я работал с Delphi.

Но я никогда не работал с FPGA после курса. Так что это лучшее, что я могу вам помочь.

Даниэль Грилло
источник
5

Я использую VHDL почти полностью. Мой опыт показывает, что VHDL более распространен в Европе, Verilog в США, но VHDL также добился устойчивого прогресса и в США. Строгая типизация VHDL меня не беспокоит, потому что я использую его как старомодный язык аппаратного проектирования, используемый в небольшой программируемой логике, такой как PALASM или AHDL от Altera.

Большая проблема для большинства людей, использующих VHDL, это сильные типы. Они хотят делать назначения между std_logic_vector (который я считаю коллекцией проводов в целевом объекте) и "int" (который я считаю числом, хранящимся в компьютере, который компилирует проект). Наиболее раздражающее преобразование типов, с которым я обычно сталкиваюсь, происходит между bit_vector (который я считаю описанием набора проводов в компьютере, компилирующем дизайн) и std_logic_vector. На самом деле то, что сейчас потянуло меня к stackexchange, - это поиск преобразования из char (символьная переменная, хранящаяся в компилирующем компьютере) в int.

Когда-то самым известным конфликтом между VHDL и Verilog был конкурс дизайна, организованный журналом ASIC & EDA. Google "Неожиданные результаты конкурса дизайна оборудования: Verilog Won & VHDL Lost? - Ты будешь судьей!", Например: http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual /Example/lrgeEx2/cooley.html

Конкурс должен был реализовать довольно сложный 9-битный регистр. Это было вверх / вниз, а также несколько других вещей. В результате 8 из 9 дизайнеров Verilog запустили код через 90 минут. Ноль из 5 парней VHDL работал.

Я не использую VHDL, как никто другой. То, как я это использую, типы не часто мешают мне. Я бы реализовал вышеуказанный проект так же, как и все остальное, полностью в std_logic и std_logic_vector, используя (в свое время) библиотеку IEEE без знака. Вместо этого я представляю, что дизайнеры VHDL сделали свою работу с int и затерялись в преобразовании типов.

Есть два места, где вы можете потеряться при преобразовании типов: (а) ваш дизайн и (б) ваш тестовый стенд. Для меня просто проще написать тестовый стенд (почти) целиком в std_logic, так что сам тестовый стенд (почти) можно синтезировать. Под «почти» я подразумеваю, что я определю часы с отложенным назначением, которое не может быть синтезировано. Но кроме этого (и комментариев), вы не можете отличить мои испытательные стенды от синтезированной логики.

В любом случае, прежде чем выбрать первый язык для изучения (предпочтения есть почти у всех, но почти все используют оба), я бы посоветовал посмотреть этот конкурс и прочитать комментарий к нему.

Одна из проблем, с которыми я столкнулся в VHDL, заключается в том, что, поскольку это очень многословный язык, кажется, что существует тенденция (по мнению дизайнеров) полагать, что он не требует комментариев. Конечно, это не так, вы должны написать комментарии перед кодом.

Карл Браннен
источник
1
Я думаю, что это интересное утверждение, что строгая типизация VHDL является самой большой проблемой. Для меня строгая типизация является центральной чертой, которая позволяет мне повышать уровень абстракции. В проектировании аппаратного обеспечения у вас есть выбор между описанием структуры, которая реализует поведение, или описанием поведения, которое реализует структуру. История показала, что абстракция является ключом к успешному проектированию больших систем, и цифровые системы не являются исключением. Поэтому я думаю, что вы многое упускаете, ограничивая очень узкое подмножество языковых возможностей.
Трондд
2
Да, но я не специализируюсь на «проектировании больших систем», я специализируюсь на небольших вещах, которые должны быть чрезвычайно эффективными. Есть ряд причин, по которым эффективность иногда становится первостепенной в дизайне электроники. Иногда большая система изготавливается из множества этих небольших систем, и такая конструкция дает гораздо большую эффективность.
Карл Браннен,
5

Я буду весить два своих цента: я сам большой пользователь VHDL, но Verilog, безусловно, справится с этой работой. Вы всегда можете обернуть одно в другое (хотя с указанием времени и стоимости печати).

Я обнаружил, что в сыром VHDL отсутствует множество полезных функций. (ИЛИ И ИЛИ: на ум приходит целый std_logic_vector). Таким образом, создание собственного набора инструментов отлаженных, синтезируемых функций значительно увеличивает вашу производительность при использовании VHDL.

Может быть, кто-то может сослаться на хорошую библиотеку с открытым исходным кодом, которая предлагает все эти «полезные» функции?

ErikAndren
источник
2
Я почти уверен, что сокращение И / ИЛИ включено в VHDL 2008 наряду с некоторыми другими полезными обновлениями.
ks0ze
4

Предыдущие ответы в значительной степени охватывают контрасты между двумя языками, и эта статья также довольно хорошо освещает эти вопросы: http://www.bitweenie.com/listings/verilog-vs-vhdl/

Я также хотел бы сделать еще пару замечаний, которые не были упомянуты.

Я бы рекомендовал сначала изучить VHDL по нескольким причинам. Строгая типизация помогает компилятору отлавливать ошибки некоторых начинающих. Я также слышал, что VHDL труднее подобрать после первого использования Verilog.

Честно говоря, вы не ошибетесь ни с одним языком; и если вы работаете в этой отрасли очень долго, вы все равно будете учить оба языка.

user19460
источник