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


94

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


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 - это то, чем вы хотите заниматься в своей карьере, я рекомендую иметь по крайней мере некоторые возможности с обоими, возможно, действительно хорошо с одним, но не быть полностью неспособным использовать другое.


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

23

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


Да, это выглядит плохо, но я не уверен: это недостаток в языке или в этом конкретном синтезаторе?
Стивенвх

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 ...


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.

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


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

4

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.