Verilog

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Verilog
Парадигма: структурний
Дата появи: 1984
Останній реліз: IEEE1364-2005 (9 листопада 2005; 3481 день тому)
Система типізації: статичний, слабкий тип
Вплинула на: SystemVerilog
Звичайні розширення файлів: .v

Verilog HDL (англ. Verilog Hardware Description Language) — мова опису апаратури (HDL), що використовується для опису та моделювання електронних систем. Verilog HDL не слід плутати з VHDL (конкуруюча мова), найбільш часто використовується у проектуванні, верифікації і реалізації (наприклад, у вигляді НВІС) аналогових, цифрових та змішаних електронних систем на різних рівнях абстракції.

Розробники Verilog зробили його синтаксис дуже схожим на синтаксис мови C, що спрощує його освоєння. Verilog має препроцесор, дуже схожий на препроцесор мови C, і основні керуючі конструкції if, while також подібні однойменним конструкціям мови C. Угоди по форматуванню виведення також дуже схожі (див. printf).

Слід зазначити, що опис апаратури, написаний мовою Verilog (як і іншими HDL-мовами) прийнято називати програмами, але, на відміну від загальноприйнятого поняття програми, як послідовності інструкцій, тут програма представляє множину операторів, які виконуються паралельно і циклічно під керуванням об'єктів, названих сигналами. Кожен такий оператор є моделлю певного елемента реальної функціональної схеми апаратури, а сигнал — аналогом реального логічного сигналу. Так само для мови Verilog не застосовується термін «виконання програми». Фактично, виконання Verilog-програми є моделюванням функціональної схеми, яку вона описує, що виконується спеціальною програмою — Verilog-симулятором.

Огляд[ред.ред. код]

Існує підмножина інструкцій мови Verilog, придатна для синтезу. Модулі, які написані в межах цієї підмножини, називають RTL (англ. register transfer level — рівень регістрових передач). Вони можуть бути фізично реалізовані з використанням САПР синтезу. САПР за певними алгоритмами перетворить абстрактний вихідний Verilog-код на перелік зв'язків (англ. netlist) — логічно еквівалентний опис, що складається з елементарних логічних примітивів (наприклад, елементи AND, OR, NOT та тригери), які доступні у вибраній технології виробництва НВІС або програмування БМК чи ПЛІС. Подальша обробка переліку зв'язків в кінцевому підсумку породжує фотошаблони для літографії або прошивку для 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.

Приклад[ред.ред. код]

Програма Hello world! на мові Verilog (не синтезується):

module main;
  initial
    begin
      $display("Hello world!");
      $finish;
    end
endmodule

Два простих послідовно з'єднаних тригери:

module toplevel(clock,reset);
  input clock;
  input reset;
 
  reg flop1;
  reg flop2;
 
  always @ (posedge reset or posedge clock)
    if (reset)
      begin
        flop1 <= 0;
        flop2 <= 1;
      end
    else
      begin
        flop1 <= flop2;
        flop2 <= flop1;
      end
endmodule

Оператори[ред.ред. код]

Мова програмування Verilog підтримує наступні оператори:

Тип операторів Символ Операція
Побітові ~ Побітова інверсія
& Побітова AND
| Побітова OR
^ Побітова XOR
~^ or ^~ Побітова XNOR
Логічні  ! NOT
&& AND
|| OR
Редукція (Reduction) & Reduction AND
~& Reduction NAND
| Reduction OR
~| Reduction NOR
^ Reduction XOR
~^ or ^~ Reduction XNOR
Арифметичні + Додавання
- Віднімання
- доповнення до 2
* Множення
/ Ділення
** Піднесення до степеня (*Verilog-2001)
Відносні > Більше
< Менше
>= Більше або дорівнює
<= Менше або дорівнює
== Логічна рівність
 != Логічна нерівність
=== 4-state логічна рівність
 !== 4-state логічна нерівність
Зсув >> Логічний зсув вправо]]
<< Логічний зсув вліво
>>> Арифметичний зсув вправо (*Verilog-2001)
<<< Арифметичний зсув вліво (*Verilog-2001)
Конкатенація {, } Конкатенація
Реплікація {n{m}} Реплікація значення m n разів
Умовні  ? : Умова

Див. також[ред.ред. код]

Посилання[ред.ред. код]