Железное противостояние: VHDL против Verilog

Коротко о трудном выборе «железных» программистов.
2 минуты14383

Если вы разрабатываете мобильные приложения, веб-страницы или создаете игры, то наверняка вообще не понимаете о каких языках речь, что тут собственно сравнивать, да и вообще полагаете, что это не совсем про программирование. Но если ваша жизнь связана с ПЛИС (CPLD, FPGA), то вопрос, заявленный в заголовке, для вас не стоит — выбор давно сделан. Поэтому попробуем в этом тексте образно взять за руку первых и провести их ко вторым, попутно заставив сделать свой выбор.

Языки описания аппаратуры

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

Первым серьёзным представителем стал Verilog, разработанный компанией Gateway Design Automation в 1985 году. Огромное влияние на язык оказал всё тот же С, это касается, как препроцессора, так и непосредственного внешнего вида кода. Основное предназначение - сверхбольшие интегральные схемы (СБИС), количество логических узлов в которых превышает 10 тысяч элементов.

Язык VHDL разрабатывался параллельно, а главным заказчиком было министерство обороны США. Исходя из этого, за основу был взят язык Ада, но некоторые черты заимствованы у Pascal. Область применения изначально была шире, чем у Verilog, по задумке создателей VHDL должен применяться на всех этапах разработки логических схем.

Синтаксис

Как уже было сказано, оба языка взяли за основу привычные большинству языки высокого уровня, соответственно синтаксис и конструкции в целом выглядят знакомо. Вот реализация элемента ИЛИ на языке VHDL:

library ieee;
use ieee.std_logic_1164.all;

--------------------------------------

entity OR_ent is
port( x: in std_logic;
y: in std_logic;
F: out std_logic
);
end OR_ent;  

---------------------------------------

architecture OR_arch of OR_ent is
begin
   
   process(x, y)
   begin
       -- compare to truth table
       if ((x='0') and (y='0')) then
   F <= '0';
else
   F <= '1';
end if;
   end process;

end OR_arch;

architecture OR_beh of OR_ent is
begin

   F <= x or y;

end OR_beh;

А вот реализация ИЛИ на Verilog:

primitive or2_input (c,a,b);
 output c;
 input a,b;
 table
   //a b : c
   1 ? : 1;
   ? 1 : 1;
   0 0 : 0;
   0 x : x;
   x 0 : x;
  endtable
endprimitive

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

Современное противостояние

Если взглянуть на рейтинг популярности TIOBE, то оба языка находятся далеко не на вершине. VHDL в свежем рейтинге занимает лишь 49 место, Verilog — замыкает почётную сотню. Если ориентироваться на результаты запросов по вакансиям на портале trud.com, то здесь ситуация обратная — Verilog обыгрывает VHDL с небольшим перевесом.

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

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

vhdlverilogжелезоразработкаweb_developer
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!