Verilog HDL (англ. Verilog Hardware Description Language) — мова опису апаратури (HDL), що використовується для опису та моделювання електронних систем. Verilog HDL не слід плутати з VHDL (конкуруюча мова), найбільш часто використовується у проектуванні, верифікації і реалізації (наприклад, у вигляді НВІС) аналогових, цифрових та змішаних електронних систем на різних рівнях абстракції.
Verilog | |
---|---|
Парадигма | структурний |
Дата появи | 1984 |
Останній реліз | IEEE1364-2005 (9 листопада, 2005 ) |
Система типізації | (статичний), слабкий тип |
Під впливом від | C, Pascal[1] і Ада[1] |
Вплинула на | SystemVerilog |
Звичайні розширення файлів | . |
Розробники 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 має права на логічні симулятори Gateway's Verilog і Verilog-XL simulator.
Типи даних
У Verilog існує дві основних групи типів даних: net та variable. Обидві групи відрізняються способами призначення та зберігнная значення. Також ці групи представляють різні структури під час синтезу. Екземпляри об'єктів обох груп під час моделювання Verilog опису можуть приймати 4 значення:
- 0.
- 1.
- x - невідоме значення. Дане значення використовується лише під час моделювання. Під час роботи реальної апаратури завжди буде "0" або "1".
- z - стан високого імпендансу, тобто відсутність сигналу. Прикладом використання даного значення є опис тристабільних буферів.
Декларація net об'єктів
Тип даних net буду представляти фізичні з'єднання між блоками дизайну, наприклад, логічними вентилями. Об'єкти даного типу не будуть зберігати значення (окрім тристабільних буферів). Значення такого об'єкту буде визначатися значеннями його драйверів. Якщо до net об'єкту не приєднано драйверів, то він матиме значення високого імпендансу (z).
wire w1; // 1-бітовий сигнал wire[31:0] bus; // 32-бітова шина
Декларація змінних
Змінні являються абстракцією елементу для зберігання даних. Змінна має зберігати значення від одного присвоєння до іншого. Конструкція просвоєння діє як тригер, який збуджує зміну значення в елементі збереження даних. Початковим значення для типів reg, time та integer є невідоме значення — x. Початковим значення для типів real та realtime є значення - 0.0
reg [7:0] bus; // декларація 8-бітної шини reg [31:0] memory[0:1023]; // 1024 слова пам`яті, кожне слово складається з 32 бітів.
Поведінкова модель
Існує декілька способів задання Verilog процесів.
initial
Конструкція initial використовується для задання певного блоку коду, що буде виконано рівно один раз. Варто зазначити, що дана конструкція не належить до синтезованої підмножини мови. Типовим використанням initial конструкції є ініціалізація певних змінних під час початку моделювання. Нижче наведено приклад генерації синхросигналу c періодом period у тестовому модулі.
module testbench(); initial begin clk = 1'b0; forever #(period/2) clk = ~clk; end endmodule
always
Конструкція always представляє собою блок коду, який повторно виконується під час моделювання. always складається з двох частин - списку чутливості та блоку операторів. Список чутливості представляє собою набір певних сигналів або виразів. Зміна значення будь-якого елементу зі списку чутливості ініцією виконання блоку операторів конструкції. Декілька always-блоків виконуються паралельно. У наступному прикладі наведено спосіб використання даної конструкції для реалізації функції бітове АБО. Кожен раз, коли сигнал A чи B отримують нове значення вираховується значення сигналу C.
always @ ( A or B ) begin C = A & B ; end
Приклад
Програма 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
Нижче наведено опис дискретного автомату для керування світлофором. Для реалізації затримок під час роботи світлофору використовується модель затримок. Затримка в кожній вершині темпороального графу реалізується за допомогою петель, умовою для яких є підрахунок числа тактів. Затримка реалізується за допомогою зациклювання у стані. Зациклювання відбувається доки лічильник тактів не досягне значення затримки.
module fsm(input clk, reset, st, onn, output R, Y, G); localparam [2:0] a1 = 3'b000, a2 = 3'b001, a3 = 3'b010, a4 = 3'b011, a5 = 3'b100; reg [2:0] state, nextState; reg [2:0] count, count1; localparam T1 = 3'b010; localparam T2 = 3'b101; always@(posedge(clk)) begin if(reset) begin state = a1; count = 3'b000; end else begin state = nextState; count = count1; end end always_comb begin case(state) a1: begin if(count < T1 - 1) begin nextState = a1; count1 = count1 + 1'b1; end else if(onn) begin nextState = a2; count1 = 3'b000; end else begin nextState = a1; count1 = 3'b000; end end a2: begin if(count < T1 - 1) begin nextState = a2; count1 = count1 + 1'b1; end else if(!onn || !st) begin nextState = a1; count1 = 3'b000; end else begin nextState = a3; count1 = 3'b000; end end a3: begin if(count < T2 - 1) begin nextState = a3; count1 = count1 + 1'b1; end else if(!onn || !st) begin nextState = a1; count1 = 3'b000; end else begin nextState = a4; count1 = 3'b000; end end a4: begin if(count < T1 - 1) begin nextState = a4; count1 = count1 + 1'b1; end else if(!onn || !st) begin nextState = a1; count1 = 3'b000; end else begin nextState = a5; count1 = 3'b000; end end a5: begin if(count < T2 - 1) begin nextState = a5; count1 = count1 + 1'b1; end else if(!onn || !st) begin nextState = a1; count1 = 3'b000; end else begin nextState = a2; count1 = 3'b000; end end default: nextState = a1; endcase end
Оператори
Мова програмування 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 разів |
Умовні | ? : | Умова |
Див. також
Посилання
- 1364-2005 — IEEE Standard for Verilog Hardware Description Language [ 25 березня 2016 у Wayback Machine.]
- Verilog Tutorial [ 15 травня 2013 у Wayback Machine.] (англ.)
- Asic-World [ 16 грудня 2007 у Wayback Machine.] (англ.)
- Verilog Tutorial[недоступне посилання з червня 2019] (англ.)
- Verilog Tutorial[недоступне посилання з червня 2019] (англ.)
- Verilog Tutorial [ 3 вересня 2013 у Wayback Machine.] (англ.)
- (англ.)
- (англ.)
- Поляков А. К. Языки VHDL и Verilog в проектировании цифровой аппаратуры. — М.: СОЛОН-Пресс, 2003. — 320 с.: ил. — (Серия «Системы проектирования»). — (рос.)
- (рос.)
Це незавершена стаття про мови програмування. Ви можете проєкту, виправивши або дописавши її. |
- https://www.physi.uni-heidelberg.de/~angelov/VHDL/VHDL_SS09_Teil10.pdf
- (unspecified title) —
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Verilog HDL angl Verilog Hardware Description Language mova opisu aparaturi HDL sho vikoristovuyetsya dlya opisu ta modelyuvannya elektronnih sistem Verilog HDL ne slid plutati z VHDL konkuruyucha mova najbilsh chasto vikoristovuyetsya u proektuvanni verifikaciyi i realizaciyi napriklad u viglyadi NVIS analogovih cifrovih ta zmishanih elektronnih sistem na riznih rivnyah abstrakciyi VerilogParadigma strukturnijData poyavi 1984Ostannij reliz IEEE1364 2005 9 listopada 2005 18 rokiv tomu 2005 11 09 Sistema tipizaciyi statichnij slabkij tipPid vplivom vid C Pascal 1 i Ada 1 Vplinula na SystemVerilogZvichajni rozshirennya fajliv code v code Rozrobniki Verilog zrobili jogo sintaksis duzhe shozhim na sintaksis movi C sho sproshuye jogo osvoyennya Verilog maye preprocesor duzhe shozhij na preprocesor movi C i osnovni keruyuchi konstrukciyi if while takozh podibni odnojmennim konstrukciyam movi C Ugodi po formatuvannyu vivedennya takozh duzhe shozhi div printf Slid zaznachiti sho opis aparaturi napisanij movoyu Verilog yak i inshimi HDL movami prijnyato nazivati programami ale na vidminu vid zagalnoprijnyatogo ponyattya programi yak poslidovnosti instrukcij tut programa predstavlyaye mnozhinu operatoriv yaki vikonuyutsya paralelno i ciklichno pid keruvannyam ob yektiv nazvanih signalami Kozhen takij operator ye modellyu pevnogo elementa realnoyi funkcionalnoyi shemi aparaturi a signal analogom realnogo logichnogo signalu Tak samo dlya movi Verilog ne zastosovuyetsya termin vikonannya programi Faktichno vikonannya Verilog programi ye modelyuvannyam funkcionalnoyi shemi yaku vona opisuye sho vikonuyetsya specialnoyu programoyu Verilog simulyatorom OglyadRozrobniki movi Verilog hotili stvoriti yiyi za sintaksisom podibnoyu do movi programuvannya C yaka uzhe shiroko vikoristovuvalasya pri rozrobci programnogo zabezpechenni Yak i C Verilog chutlivij do registru i maye bazovij preprocesor hocha ne takij skladnij yak u ANSI C C Jogo klyuchovi slova dlya keruvannya potokom taki yak if else for while case ta inshi ye ekvivalentnimi a Chergovist operacij sumisna iz C Do sintaksichnih vidminnostej vidnosyatsya neobhidnist vkazuvati shirinu v bitah pri deklaraciyi zminnih demarkaciya procedurnih blokiv Verilog vikoristovuye klyuchovi slova begin end zamist figurnih duzhok i bagato inshih ne znachnih vidminnostej Verilog vimagaye shob usim zminnim viznachavsya rozmir V C ci rozmiri viznachayutsya tipom zminnoyi napriklad cilij tip mozhe mati rozmir v 8 bit Struktura programi na Verilog skladayetsya iz iyerarhiyi moduliv Moduli inkapsulyuyut iyerarhiyu dizajnu i komunikuyut z inshimi modulyami cherez mnozhinu ogoloshenih vhodiv vihodiv i dvonapravlenih portiv Isnuye pidmnozhina instrukcij movi Verilog pridatna dlya Moduli yaki napisani v mezhah ciyeyi pidmnozhini nazivayut RTL angl register transfer level riven registrovih peredach Voni mozhut buti fizichno realizovani z vikoristannyam SAPR sintezu SAPR za pevnimi algoritmami peretvorit abstraktnij vihidnij Verilog kod na perelik zv yazkiv angl netlist logichno ekvivalentnij opis sho skladayetsya z elementarnih logichnih primitiviv napriklad elementi AND OR NOT ta trigeri yaki dostupni u vibranij tehnologiyi virobnictva NVIS abo programuvannya BMK chi PLIS Podalsha obrobka pereliku zv yazkiv v kincevomu pidsumku porodzhuye fotoshabloni dlya litografiyi abo proshivku dlya FPGA StvorennyaVerilog stvorili Phil Moorby i Prabhu Goel vzimku 1983 1984 rokiv u firmi Automated Integrated Design Systems z 1985 roku Gateway Design Automation yak movu modelyuvannya aparaturi U 1990 roci Gateway Design Automation bula kuplena Kompaniya Cadence maye prava na logichni simulyatori Gateway s Verilog i Verilog XL simulator Tipi danihU Verilog isnuye dvi osnovnih grupi tipiv danih net ta variable Obidvi grupi vidriznyayutsya sposobami priznachennya ta zberignnaya znachennya Takozh ci grupi predstavlyayut rizni strukturi pid chas sintezu Ekzemplyari ob yektiv oboh grup pid chas modelyuvannya Verilog opisu mozhut prijmati 4 znachennya 0 1 x nevidome znachennya Dane znachennya vikoristovuyetsya lishe pid chas modelyuvannya Pid chas roboti realnoyi aparaturi zavzhdi bude 0 abo 1 z stan visokogo impendansu tobto vidsutnist signalu Prikladom vikoristannya danogo znachennya ye opis tristabilnih buferiv Deklaraciya net ob yektiv Tip danih net budu predstavlyati fizichni z yednannya mizh blokami dizajnu napriklad logichnimi ventilyami Ob yekti danogo tipu ne budut zberigati znachennya okrim tristabilnih buferiv Znachennya takogo ob yektu bude viznachatisya znachennyami jogo drajveriv Yaksho do net ob yektu ne priyednano drajveriv to vin matime znachennya visokogo impendansu z wire w1 1 bitovij signal wire 31 0 bus 32 bitova shina Deklaraciya zminnih Zminni yavlyayutsya abstrakciyeyu elementu dlya zberigannya danih Zminna maye zberigati znachennya vid odnogo prisvoyennya do inshogo Konstrukciya prosvoyennya diye yak triger yakij zbudzhuye zminu znachennya v elementi zberezhennya danih Pochatkovim znachennya dlya tipiv reg time ta integer ye nevidome znachennya x Pochatkovim znachennya dlya tipiv real ta realtime ye znachennya 0 0reg 7 0 bus deklaraciya 8 bitnoyi shini reg 31 0 memory 0 1023 1024 slova pam yati kozhne slovo skladayetsya z 32 bitiv Povedinkova modelIsnuye dekilka sposobiv zadannya Verilog procesiv initial Konstrukciya initial vikoristovuyetsya dlya zadannya pevnogo bloku kodu sho bude vikonano rivno odin raz Varto zaznachiti sho dana konstrukciya ne nalezhit do sintezovanoyi pidmnozhini movi Tipovim vikoristannyam initial konstrukciyi ye inicializaciya pevnih zminnih pid chas pochatku modelyuvannya Nizhche navedeno priklad generaciyi sinhrosignalu c periodom period u testovomu moduli module testbench initial begin clk 1 b0 forever period 2 clk clk end endmodule always Konstrukciya always predstavlyaye soboyu blok kodu yakij povtorno vikonuyetsya pid chas modelyuvannya always skladayetsya z dvoh chastin spisku chutlivosti ta bloku operatoriv Spisok chutlivosti predstavlyaye soboyu nabir pevnih signaliv abo viraziv Zmina znachennya bud yakogo elementu zi spisku chutlivosti iniciyeyu vikonannya bloku operatoriv konstrukciyi Dekilka always blokiv vikonuyutsya paralelno U nastupnomu prikladi navedeno sposib vikoristannya danoyi konstrukciyi dlya realizaciyi funkciyi bitove ABO Kozhen raz koli signal A chi B otrimuyut nove znachennya virahovuyetsya znachennya signalu C always A or B begin C A amp B endPrikladPrograma Hello world na movi Verilog ne sintezuyetsya module main initial begin display Hello world finish end endmodule Dva prostih poslidovno z yednanih trigeri module toplevel clock reset input clock input reset reg flop1 reg flop2 always posedge reset or posedge clock if reset begin flop1 lt 0 flop2 lt 1 end else begin flop1 lt flop2 flop2 lt flop1 end endmodule Nizhche navedeno opis diskretnogo avtomatu dlya keruvannya svitloforom Dlya realizaciyi zatrimok pid chas roboti svitloforu vikoristovuyetsya model zatrimok Zatrimka v kozhnij vershini temporoalnogo grafu realizuyetsya za dopomogoyu petel umovoyu dlya yakih ye pidrahunok chisla taktiv Zatrimka realizuyetsya za dopomogoyu zaciklyuvannya u stani Zaciklyuvannya vidbuvayetsya doki lichilnik taktiv ne dosyagne znachennya zatrimki module fsm input clk reset st onn output R Y G localparam 2 0 a1 3 b000 a2 3 b001 a3 3 b010 a4 3 b011 a5 3 b100 reg 2 0 state nextState reg 2 0 count count1 localparam T1 3 b010 localparam T2 3 b101 always posedge clk begin if reset begin state a1 count 3 b000 end else begin state nextState count count1 end end always comb begin case state a1 begin if count lt T1 1 begin nextState a1 count1 count1 1 b1 end else if onn begin nextState a2 count1 3 b000 end else begin nextState a1 count1 3 b000 end end a2 begin if count lt T1 1 begin nextState a2 count1 count1 1 b1 end else if onn st begin nextState a1 count1 3 b000 end else begin nextState a3 count1 3 b000 end end a3 begin if count lt T2 1 begin nextState a3 count1 count1 1 b1 end else if onn st begin nextState a1 count1 3 b000 end else begin nextState a4 count1 3 b000 end end a4 begin if count lt T1 1 begin nextState a4 count1 count1 1 b1 end else if onn st begin nextState a1 count1 3 b000 end else begin nextState a5 count1 3 b000 end end a5 begin if count lt T2 1 begin nextState a5 count1 count1 1 b1 end else if onn st begin nextState a1 count1 3 b000 end else begin nextState a2 count1 3 b000 end end default nextState a1 endcase endOperatoriMova programuvannya Verilog pidtrimuye nastupni operatori Tip operatoriv Simvol Operaciya Pobitovi Pobitova inversiya amp Pobitova AND Pobitova OR Pobitova XOR or Pobitova XNOR Logichni NOT amp amp AND OR Redukciya Reduction amp Reduction AND amp Reduction NAND Reduction OR Reduction NOR Reduction XOR or Reduction XNOR Arifmetichni Dodavannya Vidnimannya dopovnennya do 2 Mnozhennya Dilennya Pidnesennya do stepenya Verilog 2001 Vidnosni gt Bilshe lt Menshe gt Bilshe abo dorivnyuye lt Menshe abo dorivnyuye Logichna rivnist Logichna nerivnist 4 state logichna rivnist 4 state logichna nerivnist Zsuv gt gt Logichnij zsuv vpravo lt lt Logichnij zsuv vlivo gt gt gt Arifmetichnij zsuv vpravo Verilog 2001 lt lt lt Arifmetichnij zsuv vlivo Verilog 2001 Konkatenaciya Konkatenaciya Replikaciya n m Replikaciya znachennya m n raziv Umovni UmovaDiv takozhVHDL AHDL Icarus VerilogPosilannya1364 2005 IEEE Standard for Verilog Hardware Description Language 25 bereznya 2016 u Wayback Machine Verilog Tutorial 15 travnya 2013 u Wayback Machine angl Asic World 16 grudnya 2007 u Wayback Machine angl Verilog Tutorial nedostupne posilannya z chervnya 2019 angl Verilog Tutorial nedostupne posilannya z chervnya 2019 angl Verilog Tutorial 3 veresnya 2013 u Wayback Machine angl angl angl Polyakov A K Yazyki VHDL i Verilog v proektirovanii cifrovoj apparatury M SOLON Press 2003 320 s il Seriya Sistemy proektirovaniya ISBN 5 98003 016 6 ros ros Ce nezavershena stattya pro movi programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi https www physi uni heidelberg de angelov VHDL VHDL SS09 Teil10 pdf unspecified title ISBN 9783486711509