Verilog
Verilog | |
---|---|
Класс языка | Язык описания аппаратуры |
Появился в | 1983-1984 |
Автор | Phil Moorby, Prabhu Goel |
Расширение файлов | .v |
Выпуск | |
Испытал влияние | Си, Паскаль[2] и Ада[2] |
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.
Verilog-95
[править | править код]Во время увеличивающейся популярности языка VHDL, Cadence приняла решение добиться стандартизации языка. Cadence передала Verilog в общественное достояние. Verilog был послан в IEEE и принят как стандарт IEEE 1364—1995 (часто называемый Verilog-95).
Verilog 2001
[править | править код]Дополнения к языку Verilog-95 были приняты как IEEE 1364—2001 (или Verilog-2001).
Verilog-2001 является значительно обновленным по сравнению с Verilog-95. Во-первых, он добавил поддержку знаковых переменных (в формате дополнительного кода). Прежде авторам кода приходилось реализовывать знаковые операции с использованием большого количества битовых логических операций. Та же функциональность на Verilog-2001 описывается встроенными операторами языка: +, -, /, *, >>> Был улучшен файловый ввод-вывод. Для улучшения читаемости кодов был немного изменен синтаксис, например always @*, переопределение именованных параметров, объявление заголовков функций, задач и модулей в стиле Си.
Verilog-2001 является самым часто используемым диалектом языка и поддерживается в большинстве коммерческих САПР для электроники (см. EDA).
Verilog 2005
[править | править код]Verilog 2005 (стандарт IEEE 1364—2005) добавил небольшие исправления, уточнения спецификаций и несколько новых синтаксических конструкций, например, ключевое слово uwire.
Отдельная от стандарта часть, Verilog-AMS, позволяет моделировать аналоговые и аналого-цифровые устройства.
SystemVerilog
[править | править код]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
Стандарты
[править | править код]- IEEE Std 1364-1995 - первый стандарт
- IEEE Std 1364—2001 — стандарт на Verilog 2001
- IEEE 1364-2005 - обновленный стандарт
- IEEE 1800-2005, IEEE 1800-2012] - IEEE Standard for SystemVerilog
- IEEE P1364 — рабочая группа 1364 — бывший разработчик Verilog.
- IEEE P1800 — рабочая группа 1800 — разработчик SystemVerilog и преемник рабочей группы 1364.
Конструкции языка
[править | править код]Типы данных
[править | править код]Verilog содержит два базовых типа данных: wire и reg. Оба эти типа могут принимать 4 возможныe значения при симуляции Verilog программы:
- 0
- 1
- Х — «неизвестное значение». Это значение используется только для симуляции, в реальной аппаратуре будет 0 или 1.
- Z — «состояние высокого сопротивления», то есть отсутствие сигнала.
Тип 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 содержит еще следующие типы данных:
- integer — то же самое, что «reg[31:0]», при этом в операциях учитывается знак (старший бит)
- real
- time
- realtime
Initial и Always
[править | править код]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
[править | править код]На языке Verilog созданы описания открытых микропроцессоров OpenSPARC T1, T2, S1 Core и OpenRISC. Их исходный код доступен под лицензиями LGPL и GPL.
Список приложений, поддерживающих Verilog
[править | править код]- Quartus II — среда моделирования и отладки; работает, как минимум, под Windows.
- Icarus Verilog — open source — приложение для моделирования и синтеза. Работает под Linux, Windows, Mac OS X, FreeBSD и др. страница проекта
- VCS — среда моделирования и отладки; работает как под Unix, так и под Windows.
- LogicSim — среда моделирования и отладки, работает под Windows.
- Incisive HDL — среда моделирования и отладки; работает как под Unix, так и под Windows.
- ModelSim — среда моделирования и отладки; работает как под Unix, так и под Windows.
- Veritak — редактор, интегрированный компилятор/симулятор, транслятор с VHDL в Verilog, работает под управлением Windows.
- Verilator — open-source высокопроизводительный компилятор Verilog.
- Verilog-Perl — набор Perl-модулей для предобработки и построения других инструментов.
- vmodel — open-source средство для моделирования Verilog в MATLAB, основанное на Verilator.
- Verilog for DMS — набор инструментов для реализации произвольных методов анализа и преобразования в Verilog.
- VSPCompiler — инструмент для ��омпилирования синтезируемого RTL-описания в C/C++/SystemC библиотеку.
- VTOC — инструмент для компилирования синтезируемого RTL-описания в C++/SystemC библиотеку.
- Wave VCD Viewer — программа для просмотра VCD-файлов. Verilog-симулятор может порождать VCD-файл, содержащий результаты моделирования. Wave VCD Viewer позволяет разработчику видеть результаты моделирования в виде временных диаграмм. Программа работает под управлением Windows.
- GTKWave — open-source программа для просмотра временных диаграмм, которая среди прочего позволяет просматривать VCD-файлы.
- Design and Verification Tools (DVT) — IDE для SystemVerilog, Verilog, и VHDL на основе Eclipse.
- TkGate — средство моделирования и симуляции, основанное на Verilog.
См. также
[править | править код]Схожие языки
[править | править код]Литература
[править | править код]- Соловьев В. В. Основы языка проектирования цифровой аппаратуры Verilog. — М.: Горячая линия — Телеком, 2014. — 208 с. — ISBN 978-5-9912-0353-1.
Примечания
[править | править код]Ссылки
[править | править код]- Reusable-code на Verilog Архивная копия от 14 июля 2014 на Wayback Machine — применение принципа повторного использования кода применительно к языку программирования Verilog. fpga.in.ua
- Симулятор Verilog от Tachyon DA — Компания Tachyon DA открыла код полноценного симулятора Verilog