Loading AI tools
Из Википедии, свободной энциклопедии
Verilog, Verilog HDL (англ. Verilog Hardware Description Language) — это язык описания аппаратуры, используемый для описания и моделирования электронных систем. Verilog HDL, не следует путать с VHDL (конкурирующий язык), наиболее часто используется в проектировании, верификации и реализации (например, в виде СБИС) аналоговых, цифровых и смешанных электронных систем на различных уровнях абстракции.
Разработчики Verilog сделали его синтаксис очень похожим на синтаксис языка C, что упрощает его освоение. Verilog имеет препроцессор, очень похожий на препроцессор языка C, и основные управляющие конструкции «if», «while» также подобны одноимённым конструкциям языка C. Соглашения по форматированию вывода также очень похожи (см. printf).
Описание аппаратуры, написанное на языке Verilog (как и на других HDL-языках) принято называть программами, но в отличие от общепринятого понятия программы как последовательности инструкций, здесь программа задает структуру системы. Также для языка Verilog не применим термин «выполнение программы».
Существует подмножество инструкций языка Verilog, называемое синтезируемым. Модули, которые написаны на этом подмножестве, называют RTL (англ. register transfer level — Уровень регистровых передач). Они могут быть физически реализованы с использованием САПР синтеза. Данные САПР по определенным алгоритмам преобразуют абстрактный исходный код на Verilog в netlist — логически эквивалентное описание, состоящее из элементарных логических примитивов (например, AND, OR, NOT, триггеры), которые доступны в выбранной технологии производства СБИС или программирования БМК и ПЛИС. Дальнейшая обработка netlist в конечном итоге порождает фотошаблоны для литографии или прошивку для FPGA.
Verilog был создан Филом Мурби (Phil Moorby) и Прабху Гоэлем (Prabhu Goel) зимой 1983–1984 годов в фирме Automated Integrated Design Systems (с 1985 года Gateway Design Automation) как язык моделирования аппаратуры. В 1990 году Gateway Design Automation была куплена Cadence Design Systems. Компания Cadence имеет права на логические симуляторы Gateway’s Verilog и Verilog-XL simulator.
Во время увеличивающейся популярности языка VHDL, Cadence приняла решение добиться стандартизации языка. Cadence передала Verilog в общественное достояние. Verilog был послан в IEEE и принят как стандарт IEEE 1364—1995 (часто называемый Verilog-95).
Дополнения к языку Verilog-95 были приняты как IEEE 1364—2001 (или Verilog-2001).
Verilog-2001 является значительно обновленным по сравнению с Verilog-95. Во-первых, он добавил поддержку знаковых переменных (в формате дополнительного кода). Прежде авторам кода приходилось реализовывать знаковые операции с использованием большого количества битовых логических операций. Та же функциональность на Verilog-2001 описывается встроенными операторами языка: +, -, /, *, >>> Был улучшен файловый ввод-вывод. Для улучшения читаемости кодов был немного изменен синтаксис, например always @*, переопределение именованных параметров, объявление заголовков функций, задач и модулей в стиле Си.
Verilog-2001 является самым часто используемым диалектом языка и поддерживается в большинстве коммерческих САПР для электроники (см. EDA).
Verilog 2005 (стандарт IEEE 1364—2005) добавил небольшие исправления, уточнения спецификаций и несколько новых синтаксических конструкций, например, ключевое слово uwire.
Отдельная от стандарта часть, Verilog-AMS, позволяет моделировать аналоговые и аналого-цифровые устройства.
SystemVerilog является надмножеством Verilog-2005, с многими новыми возможностями для верификации и моделирования разработок.
Программа Hello, world! (не является синтезируемой)
module main;
initial
begin
$display("Hello world!");
$finish;
end
endmodule
Verilog 2001 описание: два простых последовательно соединённых триггера:
module toplevel
(input clock,
input reset,
input d,
output reg flop2
);
reg flop1;
always @ (posedge reset, posedge clock)
if (reset)
{flop1,flop2} <= 2'b00;
else
begin
flop1 <= d;
flop2 <= flop1;
end
endmodule //toplevel
Verilog содержит два базовых типа данных: wire и reg. Оба эти типа могут принимать 4 возможныe значения при симуляции Verilog программы:
Тип wire используется для описания цепей, reg для регистров и переменных. Оба эти типа могут также быть использованы при описании многобитовых данных:
wire w1;
wire[31:0] bus; // 32-битовая шина
reg r1;
reg[7:0] bitvector; // 8-битовый регистр
Переменные типа reg имеют начальное значение 'X'. Цепи передают значения между регистрами. Если цепь не присоединена ни к какому регистру, она будет иметь значение 'Z'.
Verilog также содержит массивы, которые позволяют моделировать память:
reg[31:0] memory[0:1023]; // 1024 словa памяти, каждое слово содержит 32 бита.
Кроме этого, Verilog содержит еще следующие типы данных:
Verilog содержит два вида блоков, которые могут производить вычисления: «initial»-блок и «always»-блок.
«initial»-блок определяет, какие действия должны быть сделаны при старте программы. Этот блок не является синтезируемым и обычно используется для тестирования. Например:
module testbench;
reg clock;
reg[31:0] in1, in2;
reg[63:0] out;
// Тестируемый модуль
multiplier mult(clock, in1, in2, out);
initial begin
// Тестовые данные.
in1 = 4;
in2 = 20;
// Подождать, пока результат будет готов.
#10;
// Вывести результат вычислений.
$display("result=%d", out);
$finish();
end
endmodule
Программа может содержать несколько «initial»-блоков, все они исполняются параллельно.
Тип | Символы | Выполняемая операция |
---|---|---|
Побитовые | ~ | Инверсия |
& | Побитовое AND | |
| | Побитовое OR | |
^ | Побитовое XOR | |
~^ или ^~ | Побитовое XNOR (EQU) | |
Логические | ! | NOT |
&& | AND | |
|| | OR | |
Редукция | & | Редуцированное AND |
~& | Редуцированное NAND | |
| | Редуцированное OR | |
~| | Редуцированное NOR | |
^ | Редуцированное XOR | |
~^ или ^~ | Редуцированное XNOR | |
Арифметические | + | Сложение |
- | Вычитание | |
- | 2’s complement | |
* | Умножение | |
/ | Деление | |
** | Экспонента (*Verilog-2001) | |
Отношение | > | Больше |
< | Меньше | |
>= | Больше либо равно | |
<= | Меньше либо равно | |
== | Логическое равенство | |
!= | Логическое неравно | |
=== | 4-state логическое равенство | |
!== | 4-state логическое неравно | |
Сдвиг | >> | Логический сдвиг вправо |
<< | Логический сдвиг влево | |
>>> | Арифметический сдвиг вправо (*Verilog-2001) | |
<<< | Арифметический сдвиг влево (*Verilog-2001) | |
Сцепление | { , } | Сцепление |
Копирование | {n{m}} | Копирует m значение n раз |
Условие | ? : | Условие |
На языке Verilog созданы описания открытых микропроцессоров OpenSPARC T1, T2, S1 Core и OpenRISC. Их исходный код доступен под лицензиями LGPL и GPL.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.