Залізне протистояння vhdl проти verilog, geekbrains - навчальний портал для програмістів

Коротко про важкий вибір «залізних» програмістів.

Якщо ви розробляєте мобільні додатки, веб-сторінки або створюєте гри, то напевно взагалі не розумієте про яких мовах мова, що тут власне порівнювати, та й взагалі вважаєте, що це не зовсім про програмування. Але якщо ваша життя пов'язане з ПЛІС (CPLD, FPGA), то питання, заявлений в заголовку, для вас не варто - вибір давно зроблений. Тому спробуємо в цьому тексті образно взяти за руку перших і провести їх до других, попутно змусивши зробити свій вибір.

Залізне протистояння vhdl проти verilog, geekbrains - навчальний портал для програмістів

Мови опису апаратури

В середині 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;

architecture OR_beh of OR_ent is
begin

А от реалізація АБО на 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, просто через те, що ймовірність того, що схемотехник зіткнеться з програмуванням куди вище, ніж розробник, що спеціалізується на високорівневих мовах спуститься до програмування ПЛІС.

Схожі статті