VHDL и Verilog - это HDL дня. Каковы преимущества того, кто вообще не имеет опыта работы с ЛПВП?
VHDL и Verilog - это HDL дня. Каковы преимущества того, кто вообще не имеет опыта работы с ЛПВП?
Ответы:
Я не могу сказать вам, чему учиться, но вот некоторые контрастные моменты (от очень VHDL-ориентированного пользователя, но я старался быть максимально справедливым!), Которые могут помочь вам сделать выбор на основе ваших собственных предпочтений с точки зрения стиля разработки:
И имейте в виду знаменитую цитату, которая звучит так: «Я предпочитаю, какой из двух я сейчас не использую» (извините, я не могу вспомнить, кто на самом деле написал это - возможно, Яник Бержерон?)
Множество ошибок компиляции, но в большинстве случаев работает так, как вы ожидаете. Это может привести к очень крутому чувству кривой обучения (наряду с незнакомым синтаксисом)
Ошибки обнаруживаются позже в симуляции - кривая обучения «ощущению, как будто что-то делается» меньше, но длится дольше (если это правильная метафора?)
Также в пользу Verilog является то, что высокопроизводительная проверка все больше и больше опирается на SystemVerilog, который является огромным расширением для Verilog. Но высокопроизводительные инструменты также могут объединять код синтеза VHDL с кодом проверки SystemVerilog.
Полностью для другого подхода: MyHDL - вы получаете всю мощь Python как языка верификации с набором расширений синтеза, из которых вы можете генерировать VHDL или Verilog.
Или Cocotb - все возможности Python как языка проверки, с вашим синтезируемым кодом, все еще написанным на том языке, на котором вы решили изучать HDL (например, VHDL или Verilog).
Я выучил оба на одной неделе. 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 - это то, чем вы хотите заниматься в своей карьере, я рекомендую иметь по крайней мере некоторые возможности с обоими, возможно, действительно хорошо с одним, но не быть полностью неспособным использовать другое.
Многие священные войны велись из-за этого. Одним из конкретных недостатков Verilog является его недетерминированное поведение. http://www.sigasi.com/content/verilogs-major-flaw
Оба имеют свои преимущества и недостатки. VHDL более академичен, многословен и сложен. Вы должны написать больше кода, но строгость означает, что он с большей вероятностью сработает. Verilog проще для типичного цифрового дизайна, но облегчает создание сложных ошибок. VHDL чаще встречается в университетах. Verilog чаще встречается в крупных полупроводниковых компаниях.
Обычно выбор того или другого зависит от инструментов, которые вы используете. Некоторые из популярных инструментов FPGA работают лучше с VHDL. Некоторые популярные инструменты ASIC работают лучше с Verilog. Итак, что лучше, зависит от того, что вы хотите с ним делать.
Скажем, вы хотите создавать небольшие проекты с использованием FPGA Altera, которые популярны в школах EE. Бесплатные инструменты поддерживают оба HDL. Но вы можете обнаружить, что сообщество пользователей в основном использует VHDL. Будет больше примеров кода, многократно используемых модулей и т. Д., Если вы выберете этот язык.
И наоборот, если вы собираетесь работать в крупной компании, занимающейся серьезным проектированием микросхем, в наши дни почти все они используют Verilog. Сверхмощные инструменты синтеза, моделирования и верификации оптимизированы для Verilog. И в последнее время SystemVerilog - расширения для Verilog для поддержки проектирования и проверки системы высокого уровня.
Больше обсуждения здесь и полезных ссылок здесь:
Для новичка / любителя лучший совет - решить, с какими фишками вы хотите играть, и посмотреть, какие примеры предлагает вендор. Используйте это. Как только вы станете опытным цифровым дизайнером, изучение другого языка займет всего несколько дней.
Краткий ответ : используйте SystemVerilog, но изучите также VHDL . Избегайте Verilog-2001, если можете.
Очень длинный ответ : на данный момент, я предполагаю, что под Verilog вы имеете в виду 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-2001logic [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.
Чтобы быть полностью завершенным, в наборе инструментов разработчика аппаратного обеспечения есть два других важных типа языков (хотя качество этих инструментов может сильно различаться):
Моя карьера за последние 13 лет была 80% ASIC и 20% FPGA.
VHDL использовался в течение первых 3,5 лет, а остальные были Verilog. Я не нашел переключения на Verilog трудным, и по причине местоположения (Силиконовая долина) и соображений скорости я сегодня пишу только в Verilog.
Кроме того, я делаю множество асинхронных интерфейсов, защелок и полустроительных дизайнов на уровне ворот для повышения производительности, поэтому VHDL сейчас практически не используется в моей жизни. Вместо этого я обнаружил, что SystemVerilog и SystemC гораздо полезнее подобрать и использовать для больших инженерных проектов.
На одном этапе такие инструменты, как Verilator (бесплатно! И быстро), сэкономили мне очень много средств, необходимых для критических симуляций. У вас нет этой опции (пока) для VHDL. И вам это может никогда не понадобиться, если вы всегда плаваете в богатом бассейне или не занимаетесь дизайном> 1M ворот.
Тем не менее, VHDL лучше для начинающих, прежде чем они разработают твердые принципы проектирования HW. Мои связи с ребятами из EDA здесь показывают, что за последние 10 лет они мало занимались разработкой VHDL, и сегодня у HLS есть большой стимул. Так что вокруг не будет много разработчиков инструментов VHDL ...
Я пошел на VHDL, в основном потому, что я очень хорошо знаю C и обнаружил, что при попытке написать verilog я обычно писал так, как будто я нацеливался на процессор, не описывающий аппаратное обеспечение.
Очень досадно писать страницу кода и понимать, что то, что вы написали, было по сути последовательной программой, а не аппаратным проектом, да, это было бы синтезатором, но результат был уродливым и медленным.
VHDL отличался настолько, что мне было гораздо проще думать с точки зрения логического проектирования, а не потока управления.
В конце концов, язык редко бывает сложным, навыки в дизайне системы, а не в наборе текста.
С уважением, Дэн.
В прошлом году в университете, который я изучал, были организованы два открытых курса для начинающих. Оба содержали один и тот же контент, но один использовал VHDL, а другой - Verilog.
Конечно, я спросил обоих профессоров о различиях VHDL и Verilog. Оба не могли выбрать лучшее.
Поэтому мне пришлось пройти оба курса, чтобы понять, какой из них может быть лучше для меня. Мое первое впечатление было VHDL более Паскаль, как и Verilog более C-подобный .
После этого я решил сделать только VHDL, потому что в то время я работал с Delphi.
Но я никогда не работал с FPGA после курса. Так что это лучшее, что я могу вам помочь.
Я использую 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, заключается в том, что, поскольку это очень многословный язык, кажется, что существует тенденция (по мнению дизайнеров) полагать, что он не требует комментариев. Конечно, это не так, вы должны написать комментарии перед кодом.
Я буду весить два своих цента: я сам большой пользователь VHDL, но Verilog, безусловно, справится с этой работой. Вы всегда можете обернуть одно в другое (хотя с указанием времени и стоимости печати).
Я обнаружил, что в сыром VHDL отсутствует множество полезных функций. (ИЛИ И ИЛИ: на ум приходит целый std_logic_vector). Таким образом, создание собственного набора инструментов отлаженных, синтезируемых функций значительно увеличивает вашу производительность при использовании VHDL.
Может быть, кто-то может сослаться на хорошую библиотеку с открытым исходным кодом, которая предлагает все эти «полезные» функции?
Предыдущие ответы в значительной степени охватывают контрасты между двумя языками, и эта статья также довольно хорошо освещает эти вопросы: http://www.bitweenie.com/listings/verilog-vs-vhdl/
Я также хотел бы сделать еще пару замечаний, которые не были упомянуты.
Я бы рекомендовал сначала изучить VHDL по нескольким причинам. Строгая типизация помогает компилятору отлавливать ошибки некоторых начинающих. Я также слышал, что VHDL труднее подобрать после первого использования Verilog.
Честно говоря, вы не ошибетесь ни с одним языком; и если вы работаете в этой отрасли очень долго, вы все равно будете учить оба языка.