Разработчики электронной аппаратуры описывают поведение и структуру системы, и разрабатывают схемы с помощью языков HDL (hardware description language, HDL). Наиболее известны сегодня HDL-языки VHDL, Verilog и SystemVerilog. Они отличаются от обычных языков программирования, потому что включают описание времени задержки распространения сигнала, и подразумевают одновременное выполнение некоторых логических процессов. Разработка современных SoC (System on Chip) невозможна без этих трех специализированных языков описания аппаратуры.
Каждый из этих трех HDL имеет свой собственный стиль описания. VHDL и Verilog реализуют абстракции регистр - передача сигнала - логический уровень (register-transfer-level, RTL). Когда эти языки были впервые представлены в конце 1980-х, они считались прорывными технологиями, потому что позволяли инженерам работать на верхнем уровне абстракции с помощью RTL-симуляторов. Ранее была возможность симулировать поведение разработок на уровне схемы или логического элемента.
SystemVerilog был разработан как революционный переход от VHDL и Verilog для поддержки сложности разработок SoC. Он выглядит гибридным расширением Verilog - содержит в себе как HDL-описание аппаратуры, так и объектно-ориентированный подход к программированию. SystemVerilog включает возможности для разработки тестов производительности и формальной проверки на основе набора логических утверждений.
Разработку языка VHDL финансировало Министерство Обороны США, и компания Gateway Design Automation разработала Verilog с поддержкой симулятора. Компания Cadence Design Systems, когда она приобрела компанию Gateway, предоставила Verilog HDL в общее пользование, и он стал индустриальным стандартом.
В начале 1990-х индустрия электроники была подвержена "языковым войнам", и обе конкурирующие фракции VHDL и Verilog боролись друг с другом за место в умах и на рабочих столах инженеров. Оба языка выжили, и сегодня существуют совместно, причем часто в одном проекте.
Компания Co-Design разработала SystemVerilog, известный сначала как SUPERLOG. После того, как компания Synopsys приобрела компанию Co-Design, SUPERLOG/SystemVerilog также был предоставлен в публичный домен.
Все три языка сегодня являются индустриальными стандартами IEEE – VHDL это IEEE 1076-2008, Verilog это IEEE 1364-2005 и SystemVerilog это IEEE 1800-2012.
[Сравнение VHDL, Verilog, SystemVerilog]
VHDL и Verilog считаются обычными языками для разработки цифровых устройств, в то время как SystemVerilog представляет расширенную версию Verilog. Каждый язык имеет свой стиль и индивидуальные характеристики. VHDL унаследовал от языка программирования Ada концепцию и синтаксис, в то время как Verilog ссылается на ранний HDL, который назывался Hilo, и имеет стиль языка программирования C.
В Verilog и VHDL инженеры могут представить необходимую функциональность в виде текста программы. Затем модель симулируется для проверки, что дизайн работает так, как требуется. В модели могут быть подкорректированы любые проблемы, и симуляция проверит эту коррекцию.
VHDL это богатый и строго типизованный и строго детерминистический язык, более подробный в сравнению с Verilog. В результате проекты, написанные на VHDL, считаются само-документированными. Синтаксис сильно отличается от стиля языка C, и инженеры, работающие в VHDL, постоянно сталкиваются с необходимостью явного преобразования из одного типа данных в другой. VHDL часто сразу показывает ошибки, которые пропускает Verilog. VHDL имеет подчеркнуто однозначно недвусмысленную семантику, и поэтому легче переносится между разными системами разработки (в том смысле, что перенос точнее переносит все тонкости работы исходного проекта).
Пример кода VHDL:
reg1: process (rst, clk)
begin
if rst = '1' then
q_reg <= (others => '0');
q_i <= (others => '0');
elsif rising_edge(clk) then
if s_l = '1' then
q_i(0) <= q_i(7);
loop1: for i in 6 downto 0 loop
q_i(i + 1) <= q_i(i);
end loop loop1;
q_reg <= y;
else
q_i <= q_reg;
q_reg <= y;
end if;
end if;
end process reg1;
Verilog слабо проверяет типы, и более краткий, с эффективной нотацией. Он также детерминистический. Все типы данных в заранее определены в Verilog, и каждый из них имеет битовое представление. Синтаксис похож на C.
Пример кода Verilog:
always @(posedge CLK or posedge RST)
begin
if (RST) begin
q_reg = 0;
Q = 0;
end else if (S_L) begin
Q[7:0] = {Q[6:0],Q[7]};
q_reg = Y;
end else begin
Q = q_reg;
q_reg = Y;
end
end
SystemVerilog включает ряд расширений Verilog HDL с целью помочь инженерам в разработке и проверки больших и более сложных проектов. Фактически многие наблюдатели в сфере индустрии считают SystemVerilog первым языком типа Hardware Description and Verification Language (HDVL), потому что он объединяет в себе функции VHDL и Verilog, связанные с Hardware Verification Language (HVL) и поддерживает объекты. Похожая эволюция произошла с языком C, когда на основе его был создан C++.
Пример кода на SystemVerilog:
property p_push_error;
@ (posedge clk)
not (b_if.push && b_if.full && !b_if.pop);
endproperty : p_push_error
ap_push_error_1 : assert property (p_push_error);
property p_pop_error;
@ (posedge clk)
not (b_if.pop && b_if.empty);
endproperty : p_pop_error
ap_pop_error_1 : assert property (p_pop_error);
always_ff @ (posedge clk) begin
b_if.error <= (b_if.pop && b_if.empty) || (b_if.push && b_if.full && !b_if.pop);
Из-за своей структуры VDHL отлавливает больше ошибок уже на ранних стадиях процесса разработки. С другой стороны Verilog позволяет инженерам быстро описывать модели. SystemVerilog пытается взять лучшие функции из обоих языков, и включает в себя функции HVL для поддержки разработки тестов производительности и техник формальной проверки.
Сегодня "языковые войны" можно считать завершенными, потому что команды инженеров во всем мире эффективно применяют VHDL, Verilog и SystemVerilog для своих разработок SoC. В целом, SystemVerilog может помочь и с разработкой, и с проверкой дизайна, однако он пока не получил самого широкого распространения (в частности, ISE WebPack от компании Xilinx поддерживает только VHDL и Verilog).
[Ссылки]
1. What’s the Difference Between VHDL, Verilog, and SystemVerilog? site:electronicdesign.com. |