A VERILOG HARDVER LEÍRÓ NYELV ALKALMAZÁSA A LOGIKAI SZINTÉZISBEN

Hasonló dokumentumok
Hardver leíró nyelvek (HDL)

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Előadó: Dr. Oniga István

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI

Verilog HDL ismertető 2. hét : 1. hét dia

Laborgyakorlat 3 A modul ellenőrzése szimulációval. Dr. Oniga István

Kombinációs áramkörök modelezése Laborgyakorlat. Dr. Oniga István

Újrakonfigurálható eszközök

Occam 1. Készítette: Szabó Éva

PROTOTÍPUSKÉSZÍTÉS. Előadó: Dr. Oniga István

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Dr. Oniga István

Újrakonfigurálható eszközök

Budapesti Műszaki és Gazdaságtudományi Egyetem. A Verilog HDL II. Nagy Gergely. Elektronikus Eszközök Tanszéke (BME) szeptember 26.

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Digitális technika II. (vimia111) 5. gyakorlat: Tervezés adatstruktúra-vezérlés szétválasztással, vezérlőegység generációk

Dr. Oniga István DIGITÁLIS TECHNIKA 8

Dr. Oniga István DIGITÁLIS TECHNIKA 9

A Verilog HDL áttekintése

A VERILOG HARDVER LEÍRÓ NYELV ALKALMAZÁSA a LOGIKAI SZINTÉZISBEN

Hobbi Elektronika. A digitális elektronika alapjai: További logikai műveletek

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Java II. I A Java programozási nyelv alapelemei

Készítette: Nagy Tibor István

Újrakonfigurálható eszközök

Egyszerű RISC CPU tervezése

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Java II. I A Java programozási nyelv alapelemei

Kifejezések. Kozsik Tamás. December 11, 2016

Újrakonfigurálható eszközök

Bevezetés az informatikába

Digitális Technika. Dr. Oniga István Debreceni Egyetem, Informatikai Kar

Hobbi Elektronika. A digitális elektronika alapjai: Kombinációs logikai hálózatok 1. rész

A Picoblaze Core implementálása FPGA-ba

Programozás alapjai. 5. előadás

Mérési jegyzőkönyv. az ötödik méréshez

LOGIKAI TERVEZÉS PROGRAMOZHATÓ. Elő Előadó: Dr. Oniga István

Számítógépek felépítése, alapfogalmak

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Számítógépek felépítése, alapfogalmak

DIGITÁLIS TECHNIKA 7. Előadó: Dr. Oniga István

10. EGYSZERŰ HÁLÓZATOK TERVEZÉSE A FEJLESZTŐLAPON Ennél a tervezésnél egy olyan hardvert hozunk létre, amely a Basys2 fejlesztőlap két bemeneti

7.hét: A sorrendi hálózatok elemei II.

Programozás alapjai. 10. előadás

III. Alapfogalmak és tervezési módszertan SystemC-ben

FPGA & Verilog ismertetı. BME Méréstechnika és Információs Rendszerek Tanszék

Smalltalk 2. Készítette: Szabó Éva

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

A VERILOG HARDVER LEÍRÓ NYELV ALKALMAZÁSA A LOGIKAI SZINTÉZISBEN

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Komputeralgebra Rendszerek

Alapszintű formalizmusok

Pénzügyi algoritmusok

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

A SystemC programok adattípusai

Digitális technika (VIMIAA02) Laboratórium 1

Kifejezések. Kozsik Tamás. December 11, 2016

Digitális technika VIMIAA01

Digitális technika (VIMIAA02) Laboratórium 2

Digitális technika (VIMIAA02) Laboratórium 4

A számítógép alapfelépítése

Digitális technika (VIMIAA02) Laboratórium 1

Algoritmizálás és adatmodellezés tanítása 1. előadás

6. hét: A sorrendi hálózatok elemei és tervezése

Digitális technika (VIMIAA02) Laboratórium 3

Digitális Technika. Dr. Oniga István Debreceni Egyetem, Informatikai Kar

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Dr. Oniga István

Digitális technika (VIMIAA02) Laboratórium 3

Verilog ismertető (Szántó Péter, BME MIT, )

DIGITÁLIS TECHNIKA I

Digitális Technika. Dr. Oniga István Debreceni Egyetem, Informatikai Kar

Készítette: Oláh István mestertanár

1. Kombinációs hálózatok mérési gyakorlatai

Dr. Oniga István DIGITÁLIS TECHNIKA 4

Digitális technika II. (vimia111) 5. gyakorlat: Mikroprocesszoros tervezés, egyszerű feladatok HW és SW megvalósítása gépi szintű programozással

Előadó: Nagy István (A65)

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

Programozás II. 2. Dr. Iványi Péter

DIGITÁLIS TECHNIKA I

2. Fejezet : Számrendszerek

Digitális elektronika gyakorlat

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Digitális technika (VIMIAA01) Laboratórium 4

Programozási nyelvek (ADA)

Hobbi Elektronika. A digitális elektronika alapjai: Sorrendi logikai áramkörök 2. rész

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Bevezetés az informatikába

Programozási nyelvek 6. előadás

A feladatokat önállóan, meg nem engedett segédeszközök használata nélkül oldottam meg: Olvasható aláírás:...

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

Szekvenciális hálózatok és automaták

Számítógépek felépítése

1. Kombinációs hálózatok mérési gyakorlatai

Tartalom Tervezési egység felépítése Utasítások csoportosítása Értékadás... 38

Digitális technika (VIMIAA02) Laboratórium 4

Mintavételes szabályozás mikrovezérlő segítségével

LOGSYS LOGSYS LCD KIJELZŐ MODUL FELHASZNÁLÓI ÚTMUTATÓ november 8. Verzió

és az instanceof operátor

A LOGSYS GUI. Fehér Béla Raikovich Tamás, Laczkó Péter BME MIT FPGA laboratórium

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Átírás:

A VERILOG HARDVER LEÍRÓ NYELV ALKALMAZÁSA A LOGIKAI SZINTÉZISBEN M.D. CILETTI Department of Electrical and Computer Engineering University of Colorado Colorado Springs, Colorado Copyright 1997 No part of these notes may be copied or reproduced in any form without the written permission of the author. A szerző írásbeli engedélye és jóváhagyása alapján átdolgozta és magyarra fordította FEHÉR BÉLA Budapesti Műszaki Egyetem Méréstechnika és Információs Rendszerek Tanszék

TARTALOM 1. rész: Bevezetés, modellek, hierarchikus tervezés, szimuláció 2. rész: Modulok felépítése, adattípusok, logikai operátorok 3. rész: Felhasználói primitívek, késleltetési modellek 4. rész: Működési leírás modellezése Verilog nyelven 5. rész: A Verilog szintézis módszereinek ismertetése 2

MODUL ELEMEK ÉS ADAT TÍPUSOK wire, reg wire input... output... inout... wire... tri...... reg... integer... real... time... input wire modul_a wire wire output wire, reg modul_b wire, reg wire wire Viselkedési utasítás_1 always begin... end 3

A NYELVI ELEMEK ÁTTEKINTÉSE A VERILOG NYELVBEN A MODUL FOGLALJA MAGÁBA A TERV LEÍRÁSÁT Modul elemek: Változók Konstansok Adattípusok Primitívek Operatorok PORT DEKLARÁCIÓK VÁLTOZÓ DEKLARÁCIÓK KONSTANS DEKLARÁCIÓK ESEMÉNY DEKLARÁCIÓK PRIMITÍV HIVATKOZÁSOK MODULHIVATKOZÁSOK FOLYTONOS ÉRTÉKADÁS VISELKEDÉSI UTASÍTÁSOK TASZK DEKLARÁCIÓK FÜGGVÉNY DEKLARÁCIÓK I/O IDŐZÍTÉS SPECIFIKÁCIÓK BEÉPÍTETT I/O 4

ADATTÍPUSOK ÉS HARDVER MODELLEK A VERILOG ADATTÍPUSOK TÁMOGATJÁK A HARDVER MODELLEZÉSÉT. A JELEK JELLEMZŐI AZ ÉRTÉK ÉS IDŐPONT, MELYET BEÁLLÍTHAT LOGIKAI PRIMITÍV (ELŐRE DEFINIÁLT FUNKCIÓ) FOLYTONOS ÉRTÉKADÁS (IMPLICIT KOMBINÁCIÓS LOGIKA) VISELKEDÉSI UTASÍTÁS (ÉRTÉK/IDŐ SZÁMÍTÁS UTJÁN) KONKURENS HARDVER ELEMEK (primitívek, modulok, viselkedési utasítások, assign) FIZIKAI JELLEMZŐK MEGADÁSA, pl. késleltetés, meghajtás erősség 5

ADATTÍPUSOK A VERILOG NYELVBEN CSAK ELŐRE DEFINIÁLT ADATTÍPUSOK VANNAK A VERILOG NYELV A VÁLTOZÓK KÉT ELŐRE DEFINIÁLT CSALÁDJÁT TÁMOGATJA VÁLTOZÓK VEZETÉK VÁLTOZÓK: HUZALOK (WIREs) ADATTÁROLÓ VÁLTOZÓK: REGISZTEREK (REGs) KONSTANSOK 6

ADAT TÍPUSOK - VEZETÉKEK A vezetékek valósítják meg a strukturális kapcsolatokat. PÉLDA: wire control_bits; // Deklarálja a vezetéket CÉL: BIZTOSÍTJA A STRUKTURÁLIS KAPCSOLATOT A TERV EGYES OBJEKTUMAI (PRIMITÍVEK ÉS MODULOK) KÖZÖTT A FOLYTONOS ÉRTÉKADÁS UTASÍTÁSNÁL A KIMENETI JEL VÁLTOZÓJA (IMPLICIT KOMBINÁCIÓS LOGIKA) A vezeték típusú változó logikai értékét az őt meghajtó kimenet szabja meg. 7

PÉLDA: ÖSSZEKÖTŐ VEZETÉK A y1 y_out B module connect_1 ( y_out, A, B); input A, B; output y_out; wire y1; not (y1, A); nand (y_out, y1, B); endmodule // Tulajdonképpen opcionális, a nem definiált // változók automatikusan vezetékek 8

PÉLDA: A FOLYTONOS ÉRTÉKADÁS UTASÍTÁS KIMENETI VÁLTOZÓJA (IMPLICIT KOMBINÁCIÓS LOGIKA) module connect_2 ( y_out, A, B); input A, B; output y_out; wire y1; assign y1 =!A; assign y_out = y1 ~& B; endmodule BÁRMELY VÁLTOZÁS A JOBBOLDALI VÁLTOZÓK ÁLLAPOTÁBAN AZ UTASÍTÁS AZONNALI KIÉRTÉKELÉSÉT OKOZZA, MAJD AZ ÚJ ÉRTÉK KIADÁSÁNAK ÜTEMEZÉSÉT ELŐJEGYZI A SZIMULÁTORBAN. A FOLYAMATOS KIJELÖLŐ UTASÍTÁS (assign) BAL OLDALÁN CSAK VEZETÉK TÍPUSÚ VÁLTOZÓ LEHET. 9

FONTOSABB SZABÁLYOK EGY VEZETÉKET CSAK EGY PRIMITÍV KAPU HAJTHAT MEG VAGY EGY FOLYTONOS KIJELÖLŐ UTASÍTÁS ADHAT ÉRTÉKET NEKI. A B w_abc A w_abc vezeték változó értékét az A és B jelek állapota és a NOR kapu funkciója határozza meg. wire signal_1; assign signal_1 = signal_2 & signal 3; A signal_1 vezeték változó értékét a signal_2 és signal_3 jelek állapota és a & operátor (bitwise and) funkciója határozza meg. 10

ELŐRE DEFINIÁLT VEZETÉK TÍPUSOK A Verilog nyelv a vezeték típusok teljes készletét biztosítja. VEZETÉK TÍPUSÚ VÁLTOZÓK KÜLÖNBÖZŐ ELEMEI wire Egyszerű huzal az összeköttetésekhez. tri Huzal háromállapotú busz kapcsolat megvalósításához. wand Meghajtó huzalozott-és logika realizálásához. wor Meghajtó huzalozott-vagy logika realizálásához. triand WAND háromállapotú kimenettel. trior WOR háromállapotú kimenettel. 11

ELŐRE DEFINIÁLT VEZETÉK TÍPUSOK (folyt.) supply0 supply1 Logikai 0, kapcsolat a tápfeszültség GND-hez. Globális hálózat. Logikai 1, kapcsolat a tápfeszültség VCC-hez. Globális hálózat. tri0 Buszkapcsolat 0 -ra húzó ellenállással. tri1 Buszkapcsolat 1 -re húzó ellenállással. trireg Buszkapcsolat a fizikai huzal tároló kapacitását modellezve. Megjegyzés: Csak az utóbbi tárol értéket, a többit folyamatosan meg kell hajtani. 12

ELŐRE DEFINIÁLT TÁROLÓ TÍPUSOK A Verilog nyelv különböző tároló típusok használatát támogatja. ADATTÁROLÓ VÁLTOZÓK reg Logikai értékek tárolásához integer Eljárások lokális változóinak tárolásához time A szimulációs idő rendszerváltozója real Valós értékek (pl. késleltetési idők) tárolásához A VERILOG NYELV NEM TÁMOGAT FELHASZNÁLÓ ÁLTAL DEFINIÁLT ADATTÍPUSOKAT. A regiszter változók csak viselkedési utasításokban kaphatnak értéket. 13

PÉLDA: LOGIKAI ÉRTÉK TÁROLÁSA A regiszter típusú változók csak viselkedési leírások eljárásaiban (initial, always) kaphatnak értéket, a megfelelő szekvenciális utasítás végrehajtása során. A felvett értéket megtartják, amíg egy másik utasítás azt nem módosítja. module value_storage (... ); reg [2:0] hold_something; // 3 bit... initial begin hold_something =... ;... end... endmodule // Értékadás eljárásban 14

PÉLDA: A SZEKVENCIÁLIS SZÁMÍTÁSOK TÁMOGATÁSA A regiszter típusú változók támogatják a procedurális (szekvenciális) számítást egy viselkedési leíráson belül. module procedural_comp ( A, num_one); input [15:0] A; output num_one; integer counter; reg [4:0] num_one;... always @ (A) begin for... counter =... // ciklusszámláló num_one =...; end endmodule 15

A KAPUK MEGHAJTÁS ERŐSSÉGÉNEK DEFINIÁLÁSA A Verilog primitívekhez (opcionálisan) különböző meghajtáserősségeket rendelhetünk. Strength Strength Element Declaration Printed Name Level Modeled Abbreviation Abbreviation --------------------------------------------------------------------------------------------------------------- Supply Drive 7 Power supply supply Su Strong Drive 6 Default gate and strong St assign output strength Pull drive 5 Gate and pull Pu assign output strength Large 4 Size of trireg large La Capacitor net capacitor Weak Drive 3 Gate and weak We assign output strength 16

A KAPUK MEGHAJTÁS ERŐSSÉGÉNEK DEFINIÁLÁSA (folyt.) Strength Strength Element Declaration Printed Name Level Modeled Abbreviation Abbreviation ---------------------------------------------------------------------------------------------------------------- Medium 2 Size of trireg medium Me Capacitor net capacitor Small 1 Size of trireg small Sm Capacitor net capacitor High 0 Not applicable highz Hi Impedance Megjegyzés: 1. A meghajtáserősség alapértéke a strong drive. 2. Meghajtáserősséget a következő primitívekhez rendelhetünk: and or xor buf bufif0 bufif1 pullup nand nor xnor not notif0 notif1 pulldown 17

A VERILOG NYELV LOGIKAI RENDSZERE 18

NÉGY ÉRTÉKŰ LOGIKAI RENDSZER A Verilog nyelv egy négyértékű, előre definiált logikai rendszert valósít meg A VERILOG NYELV ELŐRE DEFINIÁLT LOGIKAI ÉRTÉKEI 0 Logikai 0, vagy HAMIS (FALSE) feltétel 1 Logikai 1, vagy IGAZ (TRUE) feltétel x Határozatlan, nem definiált logikai érték (0 vagy 1) z Nagyimpedanciás állapot A VEZETÉKEK LOGIKAI ÉRTÉKÉT AZ ŐKET MEGHAJTÓ PRIMITÍV KAPU KIMENETE VAGY A FOLYTONOS KIJELÖLŐ UTASÍTÁS ÉRTÉKE HATÁROZZA MEG. 19

PÉLDA: VEZETÉKEK LOGIKAI ÉRTÉKE enable A y1 y2 5 ns 1 ns B module...... nand #5 (y1, A, B); bufif1 #1 (y2, enable, y1); endmodule Működés: Ha A = 1 és B = 1 akkor 5 ns múlva y1 = 0 Ha enable = 0 akkor 1 ns múlva y2 = z (Kikapcsol) A szimulációk során minden változó kezdeti értéke x (t=0-ban). 20

VEZETÉKTÍPUSOK DEKLARÁCIÓJÁNAK SZINTAKTIKÁJA Vezeték_típus töltéserősség indextartomány késleltetés nevek listája; Megjegyzés: 1. Töltéserősség csak a trireg primitívhez adható meg. 2. A vezeték késleltetés megadása opcionális. 3. A vezetékek alapértelmezésben skalárok. 4. Az indextartomány megadása: [3:7]. 5. Az indexértékek megadása kifejezésekkel is lehetséges. 6. A baloldali érték definiálja a legnagyobb helyiértéket (MSB), függetlenül a két érték relatív nagyságától. 21

PÉLDA: VEZETÉK DEKLARÁCIÓK wire [7:0] data_bus ; wire [0:word_size -1] control_bus; wire y1, z_5,...; wand A,B,C; trior [31:0] Abus1, Abus2; wire #5 x_sig1; // Vezeték deklaráció késleltetéssel trireg (medium) node1, node2, node3; 22

VÁTOZÓK DEKLARÁCIÓJA wire y1, z_5; // y1 és z_5 skalár vezetékek delarációja tri [7:0] some_bus; // Háromállapotú 8 bites busz delarációja. supply1 Pwr; // Tápfesz (logikai 1) delarációja. supply0 Gnd; // Föld (logikai 0) delarációja. wand A,B,C; // Három "huzalozott ÉS" vezeték delarációja. wire [7:0] data_bus; // 8-bites vektor, ahol data_bus[7] az MSB. wire [0:3] control_bus; // 4-bites vector, ahol control_bus[0] az MSB. reg A_Bit_Register; // 1-bites tároló regiszter. reg [31:0] A_Word; // 32-bites adat tároló regiszter. 23

VEKTORVÁLTOZÓK HASZNÁLATA A Verilog nyelv változói azonosítójukkal érhetők el. data_bus[5] // A data_bus 5-ös indexü bitje. (Bit-kiválasztás) data_bus[3:5] // A data_bus 3-5-ig terjedő bitjei. (Tartomány kiválasztás) data_bus[k+2] // Bit kiválasztás, ahol k+2 kifejezés a bit indexe. // k fordításidejű konstans! 24

NYELVI ESZKÖZÖK A TÖBBSZÖRÖS MEGHAJTÁS REALIZÁLÁSÁRA Helyes megoldás wand C; nor (C, A, B); not (C, X1); A B C X1 ROSSZ megoldás (Compiler Error Message) wire C; nor (C, A, B); not (C, X1); ERROR/WARNING: MULTIPLE DRIVERS ON NET OF TYPE WIRE 25

A VEZETÉKEK TÍPUSÁNAK ALAPBEÁLLÍTÁSA SZABÁLY: A NEM DEKLARÁLT AZONOSÍTÓK (IMPLICIT) VEZETÉKEK. PÉLDA module Nand_Latch(q, qbar, preset, clear); output q, qbar; input preset, clear; wire preset, clear, q, qbar; // Opcionális nand # 1 g1 (q, preset, qbar), g2 (qbar, clear, q); endmodule MEGJEGYZÉS: Az alapérték a fordításnál esetleg beállítható (direktíva). 26

TÁROLÓ ADATÍPUSOK FUNKCIÓ: A HARDVER TÁROLÓELEMEK ABSZTRAKCIÓJA. PÉLDA reg A_Bit_Register; reg [7:0] A_Word; Megjegyzés: A reg típusú változó ezen kívül használható a viselkedési leírások eljárásaiban értékek átmeneti tárolására. Ezeket az átmeneti tároló elemeket a szintézis eszközök többnyire automatikusan elhagyják. 27

TÁROLÓ ADATTÍPUSOK SZABÁLYOK REGISZTER VÁLTOZÓK CSAK ELJÁRÁS UTASÍTÁSOKBAN, TASZKOKON BELÜL, VAGY FÜGGVÉNYEKBEN KAPHATNAK ÚJ ÉRTÉKET. A reg TÍPUSÚ VÁLTOZÓK KEZDETI DEFAULT ÉRTÉKE 'X', HATÁROZATLAN. A reg VÁLTOZÓ NEM LEHET KÖZVETLENÜL ELŐRE DEFINIÁLT PRIMITÍV KIMENETE. A REGISZTEREK MEGTARTJÁK ÉRTÉKÜKET A KÖVETKEZŐ ÉRTÉKADÁSIG. A VÁLTOZÓ MÉRET ALAPÉRTÉKE 1 BIT. EGY MODUL BEMENETI PORTJA NEM LEHET reg TÍPUSÚ. EGY MODUL BE-/KIMENETI (I/O) PORTJA NEM LEHET reg TÍPUSÚ.. 28

VEKTOR VÁLTOZÓK HASZNÁLATA SZABÁLYOK 1. MINDIG A TARTOMÁNY KIVÁLASZTÁS BAL OLDALI ELEME AZ MSB, A JOBB OLDALI AZ LSB. 2. A DEFINIÁLT HATÁRON KÍVÜLI ELEMEK ÉRTÉKE 'x'. 3. A TARTOMÁNY KIJELÖLÉSRE KONSTANS KIFEJEZÉSEK HASZNÁLHATÓK. PÉLDA vect[7:0] 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 1 0 vect[7:0] értéke 36 vect[3:0] értéke 4 vect[5:1] értéke 18 vect[0:3] értéke 2 Vect[addr] értéke x, ha az addr a definiált tartományon kívül esik. 29

MEMÓRIÁK: KÉTDIMENZIÓS ADATTÖMBÖK A VERILOG NYELV (KORLÁTOZOTTAN) TÁMOGATJA A KÉTDIMENZIÓS ADATTÖMBÖKET ÁLTALÁNOS FORMÁTUM reg szószélesség azonosító memóriaméret... reg [31:0] cache_memory [0:1023];... reg [31:0] a_word_register; 31 reg [7:0] instr_register;... 0... 1023 word_size 0 array_depth KORLÁTOZÁS: A MEMÓRIÁBAN KÖZVETLENÜL BIT VAGY BITTARTOMÁNY KIVÁLASZTÁS NEM LEHETSÉGES. 30

MEMÓRIÁK: KÉTDIMENZIÓS ADATTÖMBÖK SZABÁLYOK: 1. BIT ÉS TARTOMÁNYKIVÁLASZTÁS NEM LEHETSÉGES 2. CSAK TELJES MEMÓRIASZAVAK HOZZÁFÉRHETŐK. PÉLDA HELYES HASZNÁLATRA reg [15:0] cache_memory [0:1023]; reg [15:0] a_word_register; reg [7:0] instr_register;... // az aktív eljárás utasításai a_word_register = cache_memory[17];... instr_register[k] = a_word_register [k+4];... 0 cache_memory[17] 1023...... 15... 0 a_word_register[k+4] 31

MEMÓRIÁK: KÉTDIMENZIÓS ADATTÖMBÖK NEM MEGENGEDETT HASZNÁLAT instr_register = cache_memory [0:4]; 0 15... 0... a_word_register[k+4] cache_memory[17]... 1023 32

AZ EGÉSZ (INTEGER) ADATTÍPUS FUNKCIÓ: AZ ELJÁRÁSOK LOKÁLIS VÁLTOZÓINAK MEGVALÓSÍTÁSA INTEGER A rendszer 32 bites változóként tárolja Operátorai kettes komplemens aritmetikát realizálnak MSB egyúttal az előjelet is jelzi PÉLDÁK integer A1, K, Size_of_Memory; integer loop_index [1:100]; // A változó nincs inicializálva 33

AZ IDŐ (TIME) ADATTÍPUS FUNKCIÓ: AZ ELJÁRÁSOKBAN SZÜKSÉGES IDŐFÜGGŐ MŰVELETEK MEGVALÓSÍTÁSÁT TÁMOGATJA. CSAK SZIMULÁCIÓBAN!! PÉLDÁK time T_samples [1:100]; // implicit méret 64 bit time A_Time_Value; A_Time_Value = $time; T_samples[42] = $time; FONTOS AZ IDŐ (time) TÍPUSÚ VÁLTOZÓ NEM LEHET SEM MODUL PORT, SEM PRIMITIVE KAPU KI-/ BEMENETE 34

VÁLTOZÓK ÉRTÉKADÁSA ÉRTÉKADÁS MÓDJA VÁLTOZÓ TÍPUSA VEZETÉK VÁLTOZÓ REGISZTER VÁLTOZÓ PRIMITÍV KAPU KIMENETE IGEN NEM FOLYTONOS KIJELÖLÉS UTASÍTÁS IGEN NEM ELJÁRÁS UTASÍTÁS NEM YES FOLYTONOS KIJELÖLÉS ELJÁRÁSBAN NEM assign... deassign IGEN assign... deassign A VERILOG NYELVBEN MINDEN VÁLTOZÓ STATIKUS VÁLTOZÓ. 35

ADATTÍPUSOK HASZNÁLATA MODUL PORTOKON VÁLTOZÓ TÍPUS VEZETÉK VÁLTOZÓ PORT MÓD input output inout IGEN IGEN IGEN REGISZTER VÁLTOZÓ NEM IGEN NEM 36

VÁLTOZÓK ÉRVÉNYESSÉGE MINDEN VÁLTOZÓ LOKÁLIS ÉRVÉNYŰ, ARRA A MODULRA, TASZKRA, FÜGVÉNYRE VAGY ELNEVEZETT BLOKKRA, AHOL DEKLARÁLTÁK. parent_module NET or REGISTER NET NET child_module NET NET or REGISTER NET 37

VÁLTOZÓK ÉRVÉNYESSÉGE Add_full formal actual c_in a a sum Add_half b b c_out M1 w1 (a b) w2 ab formal a sum Add_half b c_out M2 w3 (a b) c_in (a b) c_in (a + b) c_in + ab sum c_out module Add_full (sum, c_out, a, b, c_in); input a, b, c_in; output c_out, sum; wire w1, w2, w3, w4; Add_half M1 (w1, w2, a, b); Add_half M2 (sum, w3, w1, c_in); or (c_out, w2, w3); endmodule module Add_half (sum, c_out, a, b); input a, b; output c_out, sum; assign {c_out, sum} = a + b; endmodule 38

HIERARCHIKUS HIVATKOZÁSOK A változók vagy konstansok a terv hierarchia bármely pontjáról hivatkozhatók. Hivatkozható: PARAMÉTER, REGISZTER, EGÉSZ, VEZETÉK, VALÓS, IDŐ, ESEMÉNY VÁLTOZÓK ÉRVÉNYESSÉGE LOKÁLIS. HIERARCHIKUS HIVATKOZÁS A NÉVVEL ELLÁTOTT BLOKKOKBAN. PÉLDA TOP_MODULE_1.CHILD_MODULE_1.child_block_1.register_A TOP_MODULE_1 CHILD_MODULE_1 begin: child_block_1... end A hierarchikus hivatkozást általában jelek megfigyelésekor használjuk.

SZÁMOK DEFINIÁLÁSA PÉLDÁK Szám Bitek Alap Érék Tárolt formátum 2'b10 2 Binary 2 10 3'd5 3 Decimal 5 101 3'o5 3 Octal 5 101 8'o5 8 Octal 5 00000101 8'ha 8 Hex 10 00001010 3'b5 Érvénytelen! 3'b01x 3 Binary - 01x 12'hx 12 Hex - xxxxxxxxxxxx 8'hz 8 Hex - zzzzzzzz 8'b0000_0001 8 Binary 1 00000001 8'b001 8 Binary 1 00000001 8'bx01 8 Binary - xxxxxx01 'bz nem definiált Binary - zzzzz...zzzzzz (32 bit) 10 H = 16 D 10 B = 2 D 10 O = 8 D 40

KONSTANS ADATTÍPUS A VERILOG NYELV TÁMOGATJA A reg, integer, real ÉS time TÍPUSÚ KONSTANSOKAT. parameter MS_BIT = 15; parameter j = 5, k=10; parameter mask = 8'b1100_1100; parameter byte_size = 8, byte_max = byte_size -1; parameter r = 5.7; parameter av_delay = (min_delay + max_delay)/2; Megjegyzés: A paraméter deklaráció jobb oldalán csak korábban már definiált értékek szerepelhetnek. 41

KONSTANSOK HASZNÁLATA module Param_Examp (y_out, a, b); parameter size = 8, delay = 15; output [size-1:0] y_out; input [size-1:0] a, b; wire [size-1:0] #delay y_out; // Vezeték késleltetése // Egyéb utasítások. endmodule A Verilog nyelv megengedi a paraméterek felülírását közvetlenül a modul hívásakor és közvetve teljes hierarchikus hivatkozást használva. 42

PARAMÉTER ÁTADÁS KÖZVETLENÜL, MODUL HÍVÁSKOR module modxnor (y_out, a, b); parameter size = 8, delay = 15; // lokális definició output [size-1:0] y_out; input [size-1:0] a, b; wire [size-1:0] #delay y_out = a~^b; // komplex deklaráció, xnor funkció endmodule // késleltetés definiálásával module Your_Design; modxnor M1 (y1_out,b1,c1); // Modulhívás default paraméterekkel modxnor #(4,5) M2 (y2_out,b2,c2); endmodule // Modulhívás módosított paraméterekkel // A size=4, delay = 5 értékek érvényesek Megjegyzés: A paraméterek a listában sorban egymás után helyettesítődnek, a nem használt paraméter helye dupla (,,) vesszőkkel átugorható. 43

PARAMÉTER ÁTADÁS KÖZVETETT, HIERARCHIKUS HIVATKOZÁSSAL module Your_Design; // Felső színtű modul modxnor M1 (y1_out, b1, c1), // Almodulok hívása M2 (y2_out, b2, c2); endmodule module modxnor (y, a, b); // Az almodul definiálása parameter size = 8, delay =15; // Paraméterek deklarációja output [size-1:0] y_out; input [size-1:0] a, b; wire [size-1:0] #delay y_out = a^b; endmodule module annotate; // Független "paraméterátadó" modul defparam Your_Design.M2.size = 4, // Parameter azonosítás név szerinti Your_Design.M2.delay = 5; // hierarchikus hivatkozással endmodule 44

A VERILOG NYELV ELŐRE DEFINIÁLT NYELVI OPERÁTORAI 45

OPERÁTOROK FUNKCIÓ: MŰVELETI TÁMOGATÁS A FOLYTONOS ÉRTÉKADÁS UTASÍTÁSOK ÉS REGISZTER MÓDOSÍTÁSOK VÉGREHAJTÁSÁHOZ. {} concatenation +, -, *, / arithmetic (includes unary +, -) % modulus (remainder) >, >=, <, <= relational! logical negation && logical and logical or == logical equality (ambiguity results in x)!= logical inequality (ambiguity results in x) === case equality (includes x, z match)!== case inequality (includes x, z match) 46

OPERÁTOROK ~ bit-wise negation & bit-wise and bit-wise inclusive or ^ bit-wise exclusive or ~ bit-wise nor ~^ or ^~ equivalence (bit-wise exclusive nor) & reduction and ~& reduction nand reduction or ~ reduction nor ^ reduction xor ~^ or ^~ reduction xnor << left shift >> right shift?: conditional 47

OPERÁTOROK - VHDL és VERILOG VHDL VERILOG & {} concatenation same +, -, *, / arithmetic (includes unary +, -) mod, rem % modulus (remainder) same >, >=, <, <= relational not! negation and, nand1 && logical and or, nor, xor1 logical or = == logical equality (ambiguity results in x) /=!= logical inequality (ambiguity results in x) === case equality (includes x, z match)!== case inequality (includes x, z match) 1 Csak a VHDL standard BIT, BOOLEAN típusokhoz. 48

OPERÁTOROK - VHDL és VERILOG VHDL VERILOG ~ bit-wise negation and, nand1 & bit-wise and or1 bit-wise inclusive or xor1 ^ bit-wise exclusive or ~& bitwise nand ~ bitwise nor ~^, ^~ equivalence (bit-wise exclusive nor) &(010101) = 0 &(010x10) = 0 & reduction and (010101) = 1 (010x10) = 1 reduction or ~ reduction nor ^ reduction xor ~^, ^~ reduction xnor << left shift >> right shift? : conditional abs 1 Korlátozva az egy dimenziós BIT és BOOLEAN tömbökre 49

OPERANDUSOK VEZETÉKEK REGISZTEREK KONSTANSOK VEZETÉK VEKTOR EGY BITJE REGISZTER VEKOR EGY BITJE VEZETÉK VEKTOR BITTARTOMÁNYA REGISZTER VEKTOR BITTARTOMÁNYA MEMÓRIA CÍM FENTI ELEMEKBŐL ÖSSZEKAPCSOLÁSSAL KÉPEZETT ÚJABB VEKTOR 50

KIFEJEZÉSEK A kifejezések az operandusok előre definiált operátorok, felhasználói függvények és rendszer függvények segítségével formált kombinációi. A KIFEJEZÉSEK AZ ÉRTÉKADÁSOKHOZ ÉS A FELTÉTEL KIÉRTÉKELÉSEKHEZ KAPCSOLÓDNAK. PÉLDÁK assign THIS_SIG = a_sig ^ b_sig; if (A!= B) Y = 10; // Két kifejezés @(SET or RESET) begin... end if (non_zero_value) execute_statement; ha a non_zero_value kiértékelése true A kifejezések mindig egy vagy több bitből álló értéket adnak vissza. 51

PÉLDÁK OPERÁTOROK HASZNÁLATÁRA ~(101011) = 010100 Bitwise Negation (010101) & (001100) = 000100 Bitwise And (010101) (001100) = 011101 Bitwise Or (010101) ^ (001100) = 011001 Bitwise Xor &(010101) = 0 Reduction And (010101) = 1 Reduction Or &(010x10) = 0 Reduction And (010x10) = 1 Reduction Or LOGIKAI KAPCSOLATOK (a < size -1) && (b!= c) && (index!= last_one) if (! inword) if (inword == 0) 52

PÉLDÁK OPERÁTOROK HASZNÁLATÁRA module shift; reg [1:0] start, result; initial begin start = 1; // Alapértelmezésben decimális result = (start << 1); end endmodule 53

SZINTAKTIKA KORLÁTOZÁSOK A && B legal A B legal A & &B illegal A B illegal A & (&B) A ( B) legal legal 54

EGYENLŐSÉG OPERÁTOROK a === b a!== b a egyenlő b, az 'x' és 'z' értékeket is beleértve a nem egyenlő b, az 'x' és 'z' értékeket is beleértve a == b a egyenlő b, az eredmény lehet ismeretlen* a!= b a nem egyenlő b, az eredmény lehet ismeretlen* MEGJEGYZÉSEK *az ismeretlen eredmény azt jelenti, hogy lehet 'x' is AZ ÖSSZEHASONLÍTÁS BITENKÉNT TÖRTÉNIK, A RÖVIDEBB OPERANDUST NULLÁKKAL KIEGÉSZÍTVE AZ EREDMÉNY '1' HA IGAZ ÉS '0' HA HAMIS 55

LOGIKAI OPERÁTOROK SZABÁLYOK KIFEJEZÉSEK KIÉRTÉKELÉSE BALRÓL JOBBRA A KIÉRTÉKELÉS LEÁLL, HA AZ IGAZ VAGY HAMIS FELTÉTELEK BÁRMELYIKE TELJESÜL A && OPERÁTOR NAGYOBB PRECEDENCIÁJÚ MINT A PÉLDÁK A < SIZE-1 && B!= C && INDEX!= LASTONE (A < SIZE-1) && (B!= C) && (INDEX!= LASTONE) if (!inword) // gyorsabb, mint: if(inword ==0) 56

PÉLDA - A XOR OPERÁTOR IGAZSÁGTÁBLÁJA Exclusive Or (Bitwise) -------------------------------- ^ 0 1 x z ------ ------------------------- 0 0 1 x x 1 1 0 x x x x x x x z x x x x 57

A FELTÉTELES OPERÁTOR ÁLTALÁNOS SZINTAKTIKA céloperandus = feltételkifejezés? igaz-ág : hamis-ág; PÉLDA wire [15:0] bus_a = drive_bus_a? data : 'bz; Működés: drive_bus_a =1; // 'data' meghajtja bus_a vonalait drive_bus_a = 0; // bus_a nagy impedanciás marad drive_bus_a = x; // bus_a határozatlan 'x' értékű lesz 58

A FELTÉTELES OPERÁTOR MEGJEGYZÉS: 1. 'z' használata feltételes kifejezésekben 2. Az operandusokat nullákkal tölti fel, ha eltérő méretűek 3. Ha a feltételes kifejezés bizonytalan, akor mind az igaz, mind a hamis kifejezés kiértékelésre kerül, majd az eredményt a következő táblázat szerint adja meg: ------------------------------?: 0 1 x ------ ----------------------- 0 0 x x 1 x 1 x x x x x 59

A SHIFT OPERÁTOR A SHIFT MŰVELET SORÁN FELLÉPŐ ÜRES BITEKET 0-VAL TÖLTI FEL module shifter // Példa a 0-k belépésére reg [1:0] start, result; initial begin start = 1; result = (start << 1); end endmodule PÉLDA start result 00 00 01 10 60

AZ ÖSSZEKAPCSOLÁS (CONCATENATION) OPERÁTOR FUNKCIÓ: FÜGGETLEN JELEKBŐL LOGIKAI BUSZ KIALAKÍTÁSA. MEGJEGYZÉSEK: {A, B[3:0], W, 3'b101} {A, B[3], B[2], B[1], B[0], W, 1'b1, 1'b0,1'b1} 1. Az összekapcsolás a Verilog nyelvben sokkal általánosabb, mint a VHDL-ben, ahol ez csak két egydimenziós tömbre vonatkozhat. 2. Az összekapcsolás a Verilog nyelvben támogatja beágyazást és ismétlést. 3. Az összekapcsolásban nem szerepelhetnek konstansok. 61

ISMÉTLŐDŐ ÖSSZEKAPCSOLÁS PÉLDÁK { 4 {w}} ugyanaz, mint {w, w, w, w} { A, B, {C,D}} ugyanaz, mint {A, B, C, D} 62

KARAKTERLÁNCOK A KARAKTERLÁNCOK TÁROLÁSÁHOZ MEGFELELŐ MÉRETŰ TÖMBÖT KELL DEKLARÁLNI. 8 BITES ASCII KÓD KARAKTERENKÉNT reg TÍPUSÚ VÁLTOZÓ A TÁROLÁSHOZ PÉLDA reg [8 * num_char -1 : 0] string_holder string_holder = "Hello world"; // 11 karakter 88 biten MEGJEGYZÉS: Ha num_char > 11 akkor a tároló balról nullákkal töltődik fel 63

ARITMETIKAI OPERÁTOROK A VERILOG NYELVBEN A +, -, *, /, % (MODULUS) MŰVELETEK MIND A VEZETÉK, MIND A REGISZTER VÁLTOZÓK KÖRÉBEN ÉRVÉNYESEK PÉLDÁK wire [31: 0] oper_a, oper_b; wire [32:0] Sum = oper_a + oper_b; 64