Відкрити головне меню

Verilog

Мова опису апаратури (для верифікації та синтезу).

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

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

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

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

Зміст

ОглядРедагувати

Розробники мови Verilog хотіли створити її за синтаксисом подібною до мови програмування C, яка уже широко використовувалася при розробці програмного забезпеченні. Як і C, Verilog чутливий до регістру і має базовий препроцесор (хоча не такий складний як у ANSI C/C++). Його ключові слова для керування потоком (такі як if/else, for, while, case, та інші) є еквівалентними, а Черговість операцій сумісна із C. До синтаксичних відмінностей відносяться: необхідність вказувати ширину в бітах при декларації змінних, демаркація процедурних блоків (Verilog використовує ключові слова begin/end замість фігурних дужок {}), і багато інших не значних відмінностей. Verilog вимагає, щоб усім змінним визначався розмір. В C ці розміри визначаються 'типом' змінної (наприклад, цілий тип може мати розмір в 8 біт).

Структура програми на 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 разів
Умовні ? : Умова

Див. такожРедагувати

ПосиланняРедагувати