Verilog: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
стиль
 
(не показано 47 промежуточных версий 35 участников)
Строка 10: Строка 10:
| extension = [[.v]]
| extension = [[.v]]
}}
}}

'''Verilog''', ''Verilog HDL'' ({{lang-en|Verilog Hardware Description Language}}) — это [[язык описания аппаратуры]], используемый для [[язык проектирования|описания]] и моделирования электронных систем. Verilog HDL, не следует путать с [[VHDL]] (конкурирующий язык), наиболее часто используется в проектировании, верификации и реализации (например, в виде [[Интегральная схема|СБИС]]) аналоговых, цифровых и смешанных электронных систем на различных уровнях абстракции.
'''Verilog''', ''Verilog HDL'' ({{lang-en|Verilog Hardware Description Language}}) — это [[язык описания аппаратуры]], используемый для [[язык проектирования|описания]] и моделирования электронных систем. Verilog HDL, не следует путать с [[VHDL]] (конкурирующий язык), наиболее часто используется в проектировании, верификации и реализации (например, в виде [[Интегральная схема|СБИС]]) аналоговых, цифровых и смешанных электронных систем на различных уровнях абстракции.


Разработчики Verilog сделали его синтаксис очень похожим на синтаксис [[язык программирования C|языка C]], что упрощает его освоение. Verilog имеет препроцессор, очень похожий на препроцессор языка C, и основные управляющие конструкции «if», «while» также подобны одноимённым конструкциям языка C. Соглашения по форматированию вывода также очень похожи (см. [[printf]]).
Разработчики Verilog сделали его синтаксис очень похожим на синтаксис [[язык программирования C|языка C]], что упрощает его освоение. Verilog имеет препроцессор, очень похожий на препроцессор языка C, и основные управляющие конструкции «if», «while» также подобны одноимённым конструкциям языка C. Соглашения по форматированию вывода также очень похожи (см. [[printf]]).


Следует отметить, что описание аппаратуры, написанное на языке Verilog (как и на других [[язык описания аппаратуры|HDL]]-языках) принято называть программами, но в отличие от общепринятого понятия программы как последовательности инструкций, здесь программа задает структуру системы. Так же для языка Verilog не применим термин "выполнение программы".
Описание аппаратуры, написанное на языке Verilog (как и на других [[язык описания аппаратуры|HDL]]-языках) принято называть программами, но в отличие от общепринятого понятия [[Компьютерная программа|программы]] как последовательности инструкций, здесь программа задает структуру системы. Также для языка Verilog не применим термин «выполнение программы».


== Обзор ==
== Обзор ==
Строка 21: Строка 20:
Языки описания аппаратуры (Hardware description languages), такие как Verilog, отличаются от обычных языков программирования, поскольку включают в себя способы описания the propagation of time and signal dependencies (sensitivity). Например, существует два оператора присваивания, блокирующий (=) и неблокирующий (<=). Последний позволяет разработчику описывать изменения состояния конечного автомата (state-machine) без необходимости использования временных переменных. Поскольку такая концепция — часть семантики языка Verilog, разработчик может быстро описать большие схемы, в относительно компактной и чёткой форме. На момент создания язык Verilog позволял значительно увеличить производительность труда разработчиков схем, которым приходилось использовать графические schematic-capture, и specially-written software programs to document and simulate electronic circuits.
Языки описания аппаратуры (Hardware description languages), такие как Verilog, отличаются от обычных языков программирования, поскольку включают в себя способы описания the propagation of time and signal dependencies (sensitivity). Например, существует два оператора присваивания, блокирующий (=) и неблокирующий (<=). Последний позволяет разработчику описывать изменения состояния конечного автомата (state-machine) без необходимости использования временных переменных. Поскольку такая концепция — часть семантики языка Verilog, разработчик может быстро описать большие схемы, в относительно компактной и чёткой форме. На момент создания язык Verilog позволял значительно увеличить производительность труда разработчиков схем, которым приходилось использовать графические schematic-capture, и specially-written software programs to document and simulate electronic circuits.


Разработчики языка Verilog планировали создать язык с синтаксисом, схожим с синтаксисом языка Си, который уже широко использовался в разработке инженерного ПО. Verilog является языком, чувствительным к регистру, содержит препроцессор (более простой чем в языке Си), многие ключевые слова управления потоком управления (if, else, for, while, case, ...), похожие приоритеты операторов.
Разработчики языка Verilog планировали создать язык с синтаксисом, схожим с синтаксисом языка Си, который уже широко использовался в разработке инженерного ПО. Verilog является языком, чувствительным к регистру, содержит препроцессор (более простой чем в языке Си), многие ключевые слова управления потоком управления (if, else, for, while, case, ), похожие приоритеты операторов.
The designers of Verilog wanted a language with syntax similar to the C programming language, which was already widely used in engineering software development. Verilog is case-sensitive, has a basic preprocessor (though less sophisticated than ANSI C/C++), and equivalent control flow keywords (if/else, for, while, case, etc.), and compatible language operators precedence. Syntactic differences include variable declaration (Verilog requires bit-widths on net/reg types), demarcation of procedural-blocks (begin/end instead of curly braces {}), and many other minor differences.
The designers of Verilog wanted a language with syntax similar to the C programming language, which was already widely used in engineering software development. Verilog is case-sensitive, has a basic preprocessor (though less sophisticated than ANSI C/C++), and equivalent control flow keywords (if/else, for, while, case, etc.), and compatible language operators precedence. Syntactic differences include variable declaration (Verilog requires bit-widths on net/reg types), demarcation of procedural-blocks (begin/end instead of curly braces {}), and many other minor differences.


Строка 29: Строка 28:
-->
-->


Существует подмножество инструкций языка Verilog, называемое '''синтезируемым'''. Модули, которые написаны на этом подмножестве, называют [[Уровень регистровых передач|RTL]] ({{lang-en|register transfer level}} — Уровень регистровых передач). Они могут быть физически реализованы с использованием [[Система_автоматизированного_проектирования|САПР]] синтеза. Данные САПР по определенным алгоритмам преобразуют абстрактный исходный код на Verilog в '''netlist''' — логически эквивалентное описание, состоящее из элементарных логических примитивов (например, AND, OR, NOT, [[триггер]]ы), которые доступны в выбранной технологии производства СБИС или программирования [[БМК]] и [[ПЛИС]]. Дальнейшая обработка netlist в конечном итоге порождает<!-- circuit fabrication blueprint--> фотошаблоны для [[фотолитография|литографии]] или прошивку<!--(such as a photo mask-set for an ASIC, or a bitstream-file for an).--> для [[Программируемая пользователем вентильная матрица|FPGA]].
Существует подмножество инструкций языка Verilog, называемое '''[[Логический синтез|синтезируемым]]'''. Модули, которые написаны на этом подмножестве, называют [[Уровень регистровых передач|RTL]] ({{lang-en|register transfer level}} — Уровень регистровых передач). Они могут быть физически реализованы с использованием [[Система автоматизированного проектирования|САПР]] синтеза. Данные САПР по определенным алгоритмам преобразуют абстрактный исходный код на Verilog в '''netlist''' — логически эквивалентное описание, состоящее из элементарных логических примитивов (например, AND, OR, NOT, [[триггер]]ы), которые доступны в выбранной технологии производства СБИС или программирования [[Базовый матричный кристалл|БМК]] и [[ПЛИС]]. Дальнейшая обработка netlist в конечном итоге порождает<!-- circuit fabrication blueprint--> фотошаблоны для [[фотолитография|литографии]] или прошивку<!--(such as a photo mask-set for an ASIC, or a bitstream-file for an).--> для [[Программируемая пользователем вентильная матрица|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 был создан 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 ===
=== Verilog-95 ===

Во время увеличивающейся популярности языка [[VHDL]], Cadence приняла решение добиться стандартизации языка. Cadence передала Verilog в общественное достояние. <!--into the public domain under the Open Verilog International (OVI) (now known as Accellera) organization. --> Verilog был послан в [[IEEE]] и принят как стандарт IEEE 1364—1995 (часто называемый Verilog-95).
Во время увеличивающейся популярности языка [[VHDL]], Cadence приняла решение добиться стандартизации языка. Cadence передала Verilog в общественное достояние. <!--into the public domain under the Open Verilog International (OVI) (now known as Accellera) organization. --> Verilog был послан в [[IEEE]] и принят как стандарт IEEE 1364—1995 (часто называемый Verilog-95).
<!-- In the same time frame Cadence initiated the creation of Verilog-A to put standards support behind its analog simulator Spectre. Verilog-A was never intended to be a standalone language and is a subset of Verilog-AMS which encompassed Verilog-95.-->
<!-- In the same time frame Cadence initiated the creation of Verilog-A to put standards support behind its analog simulator Spectre. Verilog-A was never intended to be a standalone language and is a subset of Verilog-AMS which encompassed Verilog-95.-->
Строка 47: Строка 43:
Verilog-2001 является значительно обновленным по сравнению с Verilog-95. Во-первых, он добавил поддержку знаковых переменных <!-- and nets-->(в формате [[Дополнительный код (представление числа)|дополнительного кода]]). Прежде авторам кода приходилось реализовывать знаковые операции с использованием большого количества битовых логических операций. <!--манипуляций (for example, the carry-out bit of a simple 8-bit addition required an explicit description of the boolean-algebra to determine its correct value.)--> Та же функциональность на Verilog-2001 описывается встроенными операторами языка: ''+'', ''-'', ''/'', ''*'', ''>>>'' <!-- Конструкция generate/endgenerate (похожая на одноименную конструкцию языка VHDL) позволяет контролировать to control instance and statement instantiation through normal decision-operators (case/if/else). Using generate/endgenerate, Verilog-2001 can instantiate an array of instances, with control over the connectivity of the individual instances. --> Был улучшен файловый ввод-вывод. Для улучшения читаемости кодов был немного изменен синтаксис, например ''always @*'', переопределение именованных параметров, объявление заголовков функций, задач и модулей в стиле Си.
Verilog-2001 является значительно обновленным по сравнению с Verilog-95. Во-первых, он добавил поддержку знаковых переменных <!-- and nets-->(в формате [[Дополнительный код (представление числа)|дополнительного кода]]). Прежде авторам кода приходилось реализовывать знаковые операции с использованием большого количества битовых логических операций. <!--манипуляций (for example, the carry-out bit of a simple 8-bit addition required an explicit description of the boolean-algebra to determine its correct value.)--> Та же функциональность на Verilog-2001 описывается встроенными операторами языка: ''+'', ''-'', ''/'', ''*'', ''>>>'' <!-- Конструкция generate/endgenerate (похожая на одноименную конструкцию языка VHDL) позволяет контролировать to control instance and statement instantiation through normal decision-operators (case/if/else). Using generate/endgenerate, Verilog-2001 can instantiate an array of instances, with control over the connectivity of the individual instances. --> Был улучшен файловый ввод-вывод. Для улучшения читаемости кодов был немного изменен синтаксис, например ''always @*'', переопределение именованных параметров, объявление заголовков функций, задач и модулей в стиле Си.


Verilog-2001 является самым часто используемым диалектом языка и поддерживается в большинстве коммерческих [[САПР]] для электроники (см. [[EDA]]).
Verilog-2001 является самым часто используемым диалектом языка и поддерживается в большинстве коммерческих [[САПР]] для электроники (см. [[Автоматизация проектирования электроники|EDA]]).


=== Verilog 2005 ===
=== Verilog 2005 ===

Verilog 2005 (стандарт IEEE 1364—2005) добавил небольшие исправления, уточнения спецификаций и несколько новых синтаксических конструкций, например, ключевое слово ''uwire''.
Verilog 2005 (стандарт IEEE 1364—2005) добавил небольшие исправления, уточнения спецификаций и несколько новых синтаксических конструкций, например, ключевое слово ''uwire''.


Строка 59: Строка 54:


SystemVerilog является надмножеством Verilog-2005, с многими новыми возможностями для верификации и моделирования разработок<!--design-verification and design-modeling.-->.
SystemVerilog является надмножеством Verilog-2005, с многими новыми возможностями для верификации и моделирования разработок<!--design-verification and design-modeling.-->.
<!--


<!-- The advent of High Level Verification languages such as OpenVera, and Verisity’s E language encouraged the development of Superlog by Co-Design Automation Inc. Co-Design Automation Inc was later purchased by Synopsys. The foundations of Superlog and Vera were donated to Accellera, which later became the IEEE standard P1800-2005: SystemVerilog.-->
The advent of High Level Verification languages such as OpenVera, and Verisity’s E language encouraged the development of Superlog by Co-Design Automation Inc. Co-Design Automation Inc was later purchased by Synopsys. The foundations of Superlog and Vera were donated to Accellera, which later became the IEEE standard P1800-2005: SystemVerilog.-->


== Пример ==
== Пример ==

[[Программа Hello, world!]] (не является синтезируемой)
[[Программа Hello, world!]] (не является синтезируемой)
<source lang="verilog">
<source lang="verilog">
Строка 75: Строка 70:
</source>
</source>


Два простых последовательно соединённых триггера:
Verilog 2001 описание: два простых последовательно соединённых триггера:
<source lang="verilog">
<source lang="verilog">
module toplevel(clock,reset);
module toplevel
(input clock,
input reset,
input clock;
input d,
output reg flop2
input reset;
);

reg flop1;
reg flop1;
always @ (posedge reset, posedge clock)
reg flop2;

always @ (posedge reset or posedge clock)
if (reset)
if (reset)
{flop1,flop2} <= 2'b00;
begin
flop1 <= 0;
flop2 <= 1;
end
else
else
begin
begin
flop1 <= flop2;
flop1 <= d;
flop2 <= flop1;
flop2 <= flop1;
end
end
endmodule
endmodule //toplevel
</source>
</source>


== Стандарт ==
== Стандарты ==
* IEEE Std 1364-1995 - первый стандарт
''IEEE Std 1364—2001'' — стандарт на Verilog 2001
* [https://inst.eecs.berkeley.edu/~cs150/fa06/Labs/verilog-ieee.pdf ''IEEE Std 1364—2001''] — стандарт на Verilog 2001
* IEEE 1364-2005 - обновленный стандарт
* [https://web.archive.org/web/20160918081811/http://www.cse.hcmut.edu.vn/~cuongpham/Verilog/SystemVerilog%20IEEE%20Std%201800-2005.pdf IEEE 1800-2005], IEEE 1800-2012] - IEEE Standard for SystemVerilog
* [http://www.verilog.com/IEEEVerilog.html IEEE P1364] — рабочая группа 1364 — бывший разработчик Verilog.
* [http://www.verilog.com/IEEEVerilog.html IEEE P1364] — рабочая группа 1364 — бывший разработчик Verilog.
* [http://www.eda.org/sv-ieee1800/ IEEE P1800] — рабочая группа 1800 — разработчик SystemVerilog и преемник рабочей группы 1364.
* [http://www.eda.org/sv-ieee1800/ IEEE P1800] — рабочая группа 1800 — разработчик SystemVerilog и преемник рабочей группы 1364.
Строка 108: Строка 104:
* 0
* 0
* 1
* 1
* Х - "неизвестное значение". Это значение испoльзуется только для симуляции, в реальной аппаратуре будет 0 или 1.
* Х — «неизвестное значение». Это значение используется только для симуляции, в реальной аппаратуре будет 0 или 1.
* Z - "состояние высокого [[Электрическое сопротивление|сопротивления]]", т.е. отсутствие сигнала.
* Z — «[[Высокоимпедансное состояние|состояние высокого сопротивления]]», то есть отсутствие сигнала.


Тип ''wire'' используется для описания цепей, ''reg'' для регистров и переменных. Оба эти типа могут также быть использованны при описании много-битовых данных:
Тип ''wire'' используется для описания цепей, ''reg'' для регистров и переменных. Оба эти типа могут также быть использованы при описании многобитовых данных:


<source lang="verilog">
<source lang="verilog">
Строка 126: Строка 122:
reg[31:0] memory[0:1023]; // 1024 словa памяти, каждое слово содержит 32 бита.
reg[31:0] memory[0:1023]; // 1024 словa памяти, каждое слово содержит 32 бита.
</source>
</source>

Кроме этого, Verilog содержит еще следующие типы данных:
* '''integer''' — то же самое, что «reg[31:0]», при этом в операциях учитывается знак (старший бит)
* '''real'''
* '''time'''
* '''realtime'''


=== Initial и Always ===
=== Initial и Always ===
Verilog содержит два вида блоков, которые могут производить вычисления: "initial"-блок и "always"-блок.
Verilog содержит два вида блоков, которые могут производить вычисления: «initial»-блок и «always»-блок.


"initial"-блок определяет какие действия должны быть сделаны при старте программы. Этот блок не является синтетизируемым и обычно используется для тестирования. Например:
«initial»-блок определяет, какие действия должны быть сделаны при старте программы. Этот блок не является синтезируемым и обычно используется для тестирования. Например:


<source lang="verilog">
<source lang="verilog">
Строка 146: Строка 148:
in2 = 20;
in2 = 20;


// Подождать пока результат будет готов.
// Подождать, пока результат будет готов.
#10;
#10;


// Вывести результат вычислений.
// Вывести результат вычислений.
Строка 157: Строка 159:
</source>
</source>


Программа может содержать несколько "initial"-блоков, все из них исполняются паралелльно.
Программа может содержать несколько «initial»-блоков, все они исполняются параллельно.


=== Операторы ===
=== Операторы ===

{| class=wikitable
{| class=wikitable
|-
|-
! Тип || Символа || Выполняемая операция
! Тип || Символы || Выполняемая операция
|-
|-
| rowspan=5|Побитовые || ~ || Инверсия
| rowspan=5|Побитовые || ~ || Инверсия
Строка 173: Строка 174:
| ^ || Побитовое XOR
| ^ || Побитовое XOR
|-
|-
| ~^ или ^~ || Побитовое XNOR
| ~^ или ^~ || Побитовое XNOR (EQU)
|-
|-
| rowspan=3|Логические || ! || NOT
| rowspan=3|Логические || ! || NOT
|-
|-
| && || AND
| && || AND
Строка 197: Строка 198:
| - || Вычитание
| - || Вычитание
|-
|-
| - || 2's complement
| - || 2’s complement
|-
|-
| * || Умножение
| * || Умножение
Строка 231: Строка 232:
| Сцепление || { , } || Сцепление
| Сцепление || { , } || Сцепление
|-
|-
| Копирование || {n{m}} || Копирует m значение n раз
| Копирование || <nowiki>{n{m}}</nowiki> || Копирует m значение n раз
|-
|-
| Условие || ? : || Условие
| Условие || ? : || Условие
Строка 241: Строка 242:


== Список приложений, поддерживающих Verilog ==
== Список приложений, поддерживающих Verilog ==
<!-- это в перспективе - в отдельную статью, как у американцев -->
<!-- это в перспективе — в отдельную статью, как у американцев -->* [http://www.altera.com Quartus II] — среда моделирования и отладки; работает, как минимум, под [[Windows]].

* [[Icarus Verilog]] — [[открытое программное обеспечение|open source]] приложения для моделирования и синтеза. Работает под [[Linux]], [[Windows]], [[Mac OS X]], [[FreeBSD]] и др. [http://iverilog.icarus.com/ страница проекта]
* [[Icarus Verilog]] — [[открытое программное обеспечение|open source]] — приложение для моделирования и синтеза. Работает под [[Linux]], [[Windows]], [[Mac OS X]], [[FreeBSD]] и др. [http://iverilog.icarus.com/ страница проекта]
* [http://www.synopsys.com/products/simulation/simulation.html VCS] среда моделирования и отладки; работает как под [[Unix]], так и под [[Windows]].
* [http://www.logicsim.com LogicSim] среда моделирования и отладки, работает под [[Windows]].
* [https://web.archive.org/web/20060423195805/http://www.synopsys.com/products/simulation/simulation.html VCS] — среда моделирования и отладки; работает как под [[Unix]], так и под [[Windows]].
* [http://www.cadence.com Incisive HDL] среда моделирования и отладки; работает как под [[Unix]], так и под [[Windows]].
* [http://www.logicsim.com LogicSim] — среда моделирования и отладки, работает под [[Windows]].
* [http://www.model.com ModelSim] среда моделирования и отладки; работает как под [[Unix]], так и под [[Windows]].
* [http://www.cadence.com Incisive HDL] — среда моделирования и отладки; работает как под [[Unix]], так и под [[Windows]].
* [http://www.model.com ModelSim] — среда моделирования и отладки; работает как под [[Unix]], так и под [[Windows]].
* [http://www.sugawara-systems.com Veritak] редактор, интегрированный компилятор/симулятор, транслятор с VHDL в Verilog, работает под управлением [[Windows]].
* [http://www.sugawara-systems.com Veritak] — редактор, интегрированный компилятор/симулятор, транслятор с VHDL в Verilog, работает под управлением [[Windows]].
* [http://www.veripool.com/verilator.html Verilator] open-source высокопроизводительный компилятор Verilog.
* [http://www.veripool.com/verilator.html Verilator] — open-source высокопроизводительный компилятор Verilog.
* [http://www.veripool.com/verilog-perl.html Verilog-Perl] набор Perl-модулей для предобработки и построения других инструментов.
* [http://www.veripool.com/verilog-perl.html Verilog-Perl] — набор Perl-модулей для предобработки и построения других инструментов.
* [http://code.google.com/p/vmodel/ vmodel] open-source средство для моделирования Verilog в MATLAB, основанное на Verilator.
* [https://github.com/amromanov/vmodel vmodel] — open-source средство для моделирования Verilog в MATLAB, основанное на Verilator.
* [http://www.semanticdesigns.com/Products/FrontEnds/VerilogFrontEnd.html Verilog for DMS] is a general toolset for implementing arbitrary analyses and transformations on Verilog.
* [http://www.semanticdesigns.com/Products/FrontEnds/VerilogFrontEnd.html Verilog for DMS] набор инструментов для реализации произвольных методов анализа и преобразования в Verilog.
* [http://www.carbondesignsystems.com VSPCompiler] инструмент для компилирования синтезируемого RTL-описания в C/C++/SystemC библиотеку.
* [http://www.tenison.com VTOC] инструмент для компилирования синтезируемого RTL-описания в C++/SystemC библиотеку.
* [http://www.carbondesignsystems.com VSPCompiler] — инструмент для компилирования синтезируемого RTL-описания в C/C++/SystemC библиотеку.
* [https://web.archive.org/web/20080719130532/http://www.tenison.com/ VTOC] — инструмент для компилирования синтезируемого RTL-описания в C++/SystemC библиотеку.
* [http://www.iss-us.com/wavevcd/ Wave VCD Viewer] программа для просмотра VCD-файлов. Verilog-симулятор может порождать [[Value Change Dump|VCD]]-файл, содержащий результаты моделирования. Wave VCD Viewer позволяет разработчику видеть результаты моделирования в виде временных диаграмм. Программа работает под управлением [[Windows]].
* [http://www.iss-us.com/wavevcd/ Wave VCD Viewer] — программа для просмотра VCD-файлов. Verilog-симулятор может порождать [[Value Change Dump|VCD]]-файл, содержащий результаты моделирования. Wave VCD Viewer позволяет разработчику видеть результаты моделирования в виде временных диаграмм. Программа работает под управлением [[Windows]].
* [http://www.geda.seul.org/tools/gtkwave/index.html GTKWave] open-source программа для просмотра временных диаграмм, которая среди прочего позволяет просматривать VCD-файлы.
* [http://gtkwave.sourceforge.net/ GTKWave] — open-source программа для просмотра временных диаграмм, которая среди прочего позволяет просматривать VCD-файлы.
* [http://dvteclipse.com/ Design and Verification Tools (DVT)] — IDE для SystemVerilog, Verilog, и VHDL на основе [[Eclipse (среда разработки)|Eclipse]].
* [[TkGate]] — средство моделирования и симуляции, основанное на Verilog.


== См. также ==
== См. также ==
Строка 271: Строка 275:
* [[JHDL]]
* [[JHDL]]


== Ссылки ==
== Литература ==
* [http://www.allhdl.ru/verilog.php VerilogHDL - язык проектирования аппаратуры]
* ''Соловьев В. В. '' Основы языка проектирования цифровой аппаратуры Verilog. — М.: Горячая линия — Телеком, 2014. — 208 с. — ISBN 978-5-9912-0353-1.


== Примечания ==
{{примечания}}


== Ссылки ==


* [http://fpga.in.ua/student-works/sozdanie-reusable-code-na-verilog.html Reusable-code на Verilog] {{Wayback|url=http://fpga.in.ua/student-works/sozdanie-reusable-code-na-verilog.html |date=20140714210250 }} — применение принципа повторного использования кода применительно к языку программирования Verilog. fpga.in.ua
* [http://www.opennet.ru/opennews/art.shtml?num=40365 Симулятор Verilog от Tachyon DA] — Компания Tachyon DA открыла код полноценного симулятора Verilog


[[Категория:САПР]]
[[Категория:САПР]]
Строка 281: Строка 290:
[[Категория:Языки проектирования]]
[[Категория:Языки проектирования]]
[[Категория:Языки описания аппаратуры]]
[[Категория:Языки описания аппаратуры]]
{{Link GA|zh}}

Текущая версия от 18:10, 25 июля 2024

Verilog
Класс языка Язык описания аппаратуры
Появился в 1983-1984
Автор Phil Moorby, Prabhu Goel
Расширение файлов .v
Выпуск
  • IEEE 1800-2023[1]
Испытал влияние Си, Паскаль[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.

Во время увеличивающейся популярности языка 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
  • 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

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.

Примечания

[править | править код]