145
21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364 Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, M.Sc. ®

Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

Embed Size (px)

Citation preview

Page 1: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 1

Einführung in Verilog HDL

IEEE-1364

Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, M.Sc.

®

Page 2: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 2

Verilog Historie

?Ursprünglich eine proprietäre Sprache der Firma Cadence und ein Teil des Verilog-XL Logik Simulators (entstanden 1985)

? Verilog-HDL wurde im Jahr 1990 öffentlich zugänglich

? Beginn der Normierung durch IEEE im Jahr 1993

? 1995 hat IEEE den Standard Verilog als IEEE-Norm 1394 veröffentlicht

? Die Aktualisierung der Norm 2001: Verilog2001TM

Page 3: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 3

Grundlegende Syntax

Page 4: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 4

Struktur eines Verilogmodells

Name des Moduls

Port Liste,Port Deklaration, Parameter Deklaration

Variablen Deklarationen, Zuweisungen, Module Instanziierung, sequentielle Blöcke, Unterprogramme

Modul Name

Body

Endmodule

Interface

Abschluss des Moduls

Das Modul ist die grundlegende Modellierungseinheit

Page 5: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 5

Kommentare

? Kommentare verbessern die Lesbarkeit von Verilog Modellen und dienen der Dokumentation.

? Es gibt zwei verschiedene Kommentaranweisungen. Einzeilige Kommentare beginnen mit “//”.

Mehrzeilige Kommentaranweisungen beginnen mit

“/*” und enden mit “*/”

Beispiele//Beispiel für einen einzeiligen Kommentar /* Beispiel für einen Kommentar über zwei

Zeilen*/

Page 6: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 6

LeerzeichenLeerzeichen (White spaces)(White spaces)

?Nicht alle Zeichen werden dargestellt! ?Nicht angezeigt werden z.B. Tabulatoren ? In der Regel werden diese Zeichen vom Simulator

ignoriert. Aber in Zeichenketten können sie wichtig sein!

?Nicht angezeigte Zeichen sind:– Leerzeichen,Tabulatoren– Tabulatoren – Zeilenabschlüsse (carriage returns)– Zeileneinschub – Seiteneinschub

Page 7: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 7

Bezeichner

Die folgenden Regeln müssen berücksichtigt werden, wenn

ein Modul oder Variable benannt werden:

? Verilog unterscheidet zwischen grOgrOßß undund kLEINschreiBunGkLEINschreiBunG

? Zulässig in Namen sind: a-z , A-Z , 0-9 , $

? Ein Name beginnt mit Buchstaben oder Unterstrich (underscore)

? $ Symbol ist am Anfang verboten

? Nicht länger als 1024 Zeichen

? Schlüsselworte der Sprache sind nicht als Name erlaubt:reg,wire,module etc.

Page 8: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 8

Logiksystem von Verilog

? In Verilog sind die vier logischen Zustände 1, 0, X, Z

vordefiniert:

1 -- High (wahr)

0 -- Low (falsch)

X -- Unbekannt (0 , 1 or Z)

Z -- Hohe Impedanz

? Neben diesen logischen Werten können 8 Signalstärken

verwendet werden. (Siehe nächste Folie)

Page 9: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 9

Signalstärken

? Es gibt 8 Stärken

HiZ0 HiZ1highz0 highz1Hohe Impedanz(kein Treiber)

0

Sm0 Sm1smallKleine Kapazität1

Me0 Me1mediumMittlere Kapazität2

We0 We1weak0 weak1Schwacher Treiber3

La0 La1largeGroße Kapazität4

Pu1 Pu0pull0 pull1Pull-up/down Stärke5

St0 St1strong0 strong1Starker Treiber6

Su0 Su1supply1 supply0Versorgung7

MnemonicBezeichnerStärkeEbene

Page 10: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 10

Zahlenspezifikation

? Zahlen werden in Verilog folgendermaßen vorgegeben:

Zahl der Bits ' Radix Wert

Stellen-zahl

Stellen-zahl

Binär ? b od. BOktal ? o od. ODezimal ? d od. DHexadezimal ? h od, H

Binär ? b od. BOktal ? o od. ODezimal ? d od. DHexadezimal ? h od, H

Ziffern oder Logikwerte

0-F, x, z

Ziffern oder Logikwerte

0-F, x, z

Beispiel

2’b00;4’d3;

Page 11: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 11

Operatoren wirken auf Operanden. Es gibt:

? arithmetische Operatoren* , / , + , - , % (Multiplikation, Division, Addition, Subtraktion, Modulo)Beispiel für den Modulo Operatorx = 3; y = 4;result = y % x; // result wird ‘1’

? logische Operatoren! , && , ||(logische-Negation, logisches-UND, logisches-ODER)

Operatoren

Page 12: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 12

OperatorenOperatoren? Vergleichsoperatoren

> , < , >= , <= (größer als, kleiner als, größer-gleich, kleiner-gleich)

? Schiebe-Operatoren>> , <<

(schiebe nach rechts, schiebe nach links)Beispiel für SchiebeoperatorA = 8‘b1010_0000A << 2 // ergibt 1000_0000;

Page 13: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 13

?Gleichheits-Operatoren== , != , === , !== (gleich, ungleich, Zeichen-Gleichheit bzw. -Ungleichheit)

Zeichen-Gleichheit (case equality):‘x’- und ‘z’-Werte mit eingeschlossen!

Beispiele(4’b 1z0x) == (4’b 1z0x) ? x(4’b 1z0x) != (4’b 1z0x) ? x//‘x‘ und ‘z’ werden nicht verglichen(4’b 1z0x) === (4’b 1z0x) ? 1(4’b 1z0x) !== (4’b 1z0x) ? 0//‘x‘ und ‘z’ werden mit verglichen

OperatorenOperatoren

Page 14: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 14

?Bitweise Operatoren~ , & , | , ^ , ^~ or ~^

(nicht, und, oder, exklusiv oder xor, xnor)

Unterschied zwischen logischen und bitweisen OperatorenLogische Operatoren in booleschen Ausdrücken

Bitweise Operatoren wirken auf die Bits von Signalen

BeispieleA = 3’b001 und B = 3’b11xA && B //ergibt 1’b1 logischer Wert: WahrA & B // ergibt 3’b00x logischer Wert: Falsch

OperatorenOperatoren

Page 15: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 15

OperatorenOperatoren

?Bedingungs- oder ternärer Operator? :

Beispiela= 3´b001;b= 3´b000;c= 2´b01;d= 2´b01;y = (c == d) ? a+b : a-b ;/* Hier ist ‘c’ gleich‘d’. Also wird ‘y’ a + b zugewiesen (3´b001+ 3`b000 = 3´b001) */

?Reduktionsoperatoren& , ~& , | , ~| , ^ , ^~ (UND, nicht-UND, ODER, nicht-ODER, xor, xnor) Operatoren erzeugen einen Skalar aus einem Vektor

Beispielz = &(10011);// ergibt ‘0’t = |(001); // ergibt ‘1’

Page 16: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 16

OperatorenOperatoren

? Zusammenfassender Operator (Concatenation Operator)

{ }

Beispiela = 2’b00; b = 4’b1111;c = {a,b}; //output is “c = 6’b00_1111”

?Replikations-Operator

{ { } }

Beispiela = 2’b00; b = 4’b1111;c = {3{a},2{b}};//Ergebnis “c = 14’b00_00_00_1111_1111”

Page 17: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 17

Operator-Rangordnung

!, &, ~&, | ~, | ^, ~^, +, -(Vorzeichenoperator)

*, /, %+, -

<<, >> <, <=, >=, >

==, !=, ===, ~==&, ~&, ^, ~^

|, ~|,&&

||? :

Hoch

niedrig

Page 18: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 18

Datentypen

Datatypen fallen in zwei Kategorien

?Register: speichern Daten

? Verhalten sich wie Variablen in Standard-Programmiersprachen

behalten also ihren Wert

hat nichts mit einer Registerschaltung zu tun

?Netze: Definieren Verbindungsstrukturen (connectivity)

? Verhalten sich wie Verbindungsleitungen in einer Schaltung

?müssen ständig getrieben werden, damit sie ihren Wert behalten!

Page 19: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 19

Register

regintegerrealtimerealtime

Netze

wire tri supply0 supply1wand wortriand triortri1 tri0trireg

Datatypen

Page 20: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 20

Register

reg Voreinstellung: 1 bit skalarer Datatyp, Anfangswert xreg[31:0] prod is a 32 bit register named prod

integer 2er-Komplement Integerzahl

real Reelle Fließkommagröße: 0.4 or 1.2E12

time 64bit positive physikalische Größe für dieErfassung der Simulationszeit

realtime real-Zahl gespeichert im Fließkommaformat, 0.12

Datatypen

Page 21: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 21

wire nur Verbindungtri nur Verbindung, aber tristate abschaltbar

supply0 globale Verbindung nach GND

supply1 globale Verbindung nach VDD

wand, wor verbundenes (wired) UND, ODERtriand, trior wired UND, wired ODER aber tristate abschaltbar

tri1, tri0 Widerstand nach VDD, GND(pull-up, pull-down)

trireg ein Netz das die gespeicherte Ladung in einerphysikalischen Leitung nachbildet

Datentypen

Page 22: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 22

Zeichenfolgen (Strings)

? Verilog hat keinen speziellen Datentyp für Strings.? Strings können aber in reg-Datatypen gespeichert

werden, wenn diese in geeigneter Form deklariertwerden.

Beispiel

reg [8*10: 0]a;a = “verilog_HDL”;

/*‘a’ kann 11 Zeichen aufnehmen. Jedes Zeichendarf aus 8 Bits bestehen*/

Page 23: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 23

Einfache Verilog Modelle

Page 24: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 24

Verilog Primitive

? Verilog verfügt über vordefinierte primitive Komponenten für strukturelle Modelle

? Es gibt Verilog-Primitive für logische Gatter, Treiber und Transistoren

? Es handelt um “smart primitives” weil diese Primitiven mit einer beliebigen Zahl an Eingängen bzw. Ausgängen bei Treibern vorgegeben werden können.

? Beispielsweise kann ein “and” Gatterprimitiv über zwei, oder über drei oder sogar noch mehr Eingangssignale verfügen!

Page 25: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 25

Liste der vordefinierten Primitiven

Logikgatter and, nand, or, nor, xor, xnor

Treiberbuf, bufif0, bufif1not, notif0, notif1,pulldown, pullup

Transistoren und Transfergatternmos, pmos, cmosrnmos, rpmos, rcmostran, tranif0, tranif1,rtran, rtranif0, rtranif1

Page 26: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 26

Eigenschaften der Primitiven? Primitive erkennt man am Schlüsselwort

? Sie definieren kombinatorische Logikfunktionen oder Schaltfunktionen auf Transistorebene

? Primitive können nur innerhalb von Modulen instanziiert werden

? Der erste Port einer primitiven Gatter-Komponente ist das Ausgang gefolgt von den Eingängen

? Bei primitiven Treiberprimitiven werden die Ports als erste aufgezählt der eine Eingang steht am Ende der Portliste .

? Verilog erlaubt auch anwenderdefinierte primitive

Komponenten. Diese können kombinatorisch oder sequentiell

(flip-flops) sein.

Page 27: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 27

Syntax in Verilog-Modulen

Name des Moduls

Port Liste,Port Deklaration, Parameter Deklaration

Variablen Declarationen, Zuweisungen, Module Instanziierung, sequentielle Blöcke, Unterprogramme

Modul Name

Body

Endmodule

Interface

Abschluss des Moduls

Das Modul ist die grundlegende Modellierungseinheit

Page 28: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 28

Port-Typen

? Ports sind die Schnittstellen eines Moduls zur Außenwelt?Der Porttyp legt die Datenflussrichtung fest.? Alle Ports müssen definiert werden.

Typen Schlüsselwort Kommentar

module input

output

inout

Fluss ins Modul

Fluss aus dem Modul heraus

Bidirektionales Datenfluss

module

module

Page 29: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 29

Port Verbindungsregeln

reg oder net netinput

net

reg oder net

net inout

output net

Module können in Strukturmodellen als Komponenteneingesetzt werden ? Regeln für Datentypen der Ports

Inputs - interner Eingang ist immer ein Netz (net), externer Port net oder reg (Register)

Output - interner Ausgang net oder reg (Register), extern nur net

Inout - intern und extern betrachtet nur net

Page 30: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 30

Verhaltensmodelle

Aufgabe:? Erstellen Sie ein Modul, das 2 Eingänge und einen

Ausgang aufweist? Sind beide Eingänge “low”, dann wird der Ausgang auf

“high” gesetzt.? Jede andere Kombination der logischen Eingangspegel

erzeugt einen “low”-Wert am Ausgangsport.

Module

A

B

C

Page 31: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 31

Analyse der Vorgabe

?Wahrheitstabelle: Verhalten = XOR-Gatter

011101110000

Ausgang CEingang BEingang A

Module

A

B

C

Page 32: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 32

Design

? Das Modul ist die grundlegende Modellierungseinheit.

? Ein Modul kann ein gesamtes System, eine Leiterplatte, einen Chip oder auch nur ein logisches Gatter darstellen.

Module

A

B

C

Page 33: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 33

Verhaltensmodell des XOR Gatters

module xor_gate (a, b, c);

input a,b;

output c;

xor(c,a,b);

endmodule

Modul-Name

Schnittstellen

Modell-Körper

endmodule als Abschluss

Page 34: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 34

Strukturelles Modell

Statt Verhaltensmodelle können auch Strukturmodelle ausvernetzten Modulen geschrieben werden:

Beispiel:module struct (in1,in2,in3,in4,out);input in1,in2,in3,in4;output out;wire y1,y2;and (y1,in1,in2);and (y2,in3,in4);xor (out,y1,y2);

endmodule

in1

in2

in3

in4

y1

y2

out

Page 35: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 35

Skalare Größen und Vektor-Signale

? Eine skalare Verbindung (Netzdatentyp wire) entspricht einer einzelnen Signalleitung, die einen einzelnen Logikwert zu jeder Zeit trägt.

Syntax

wire bit;

?Mehrfachverbindungen können mehrere Bits transportieren.

Syntax

wire [0:n]bus; //‘n’ist bel. integer

?Die gleiche Syntax gilt auch für Registertypen reg

Page 36: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 36

? Speichernde Elemente

Zweidimensionale Felder modellieren Speicherblöcke

Syntax

reg [7:0]mem[0:1023];// 1024 8 Bit register

?Höherdimensionale Arrays erst ab Verilog-2001!

reg [4:0]mem[4:0][4:0];/* 2 dimensionales

Feld aus 5-Bit Worten */

Skalare Größen und Vektor-Signale

Page 37: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 37

Gatterverzögerungszeiten (Delays)

?Delays können primitiven Gattern zugewiesen werden, um hardwarenah zu modellieren

? Es gibt drei Arten von Delays: Rise, Fall und Turn-offDelay (Delays für steigende und fallende Flanken sowie das Abschaltdelay)

?Rise-Delay: Verzögerung bei Übergang in den Zustand ‘1’ aus anderen Zuständen

? Fall-Delay: Verzögerung bei Übergang in den Zustand ‘0’ aus anderen Zuständen

? Abschalt-Delay bei Übergang in den Zustand ‘Z’ (hohe Impedanz aus anderen Zuständen

Page 38: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 38

Delay-Vorgabe bei Primitiven

and #2 (out, in1, in2);

// delay von 2 Zeiteinheiten für alle Übergänge

and #(1.1, 2.1)(out, in1,in2);

// Rise-Delay 1.1 Fall-Delay 2.1

and #(1:2:3) (out, in1, in2);

// min.: typ.: max. Delay für alle Übergänge

and #(1.2:3.7:4.5),(3.1:6.0:7.8),(2.0:4.5:6.0)

(out,in1,in2); /*Separate min: typ: max Delays fürrise, fall und Abschalt Verzögerung.*/

Page 39: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 39

Transistor als Schalter (Switch-Level)

Verilog bietet die Möglichkeit digitale Transistorschaltmo-delle aufzubauen:

Beispiel: 3faches NAND Gatter Vdd

a b c

a

c

b

y

gnd

Page 40: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 40

Implementierung des Switch-Level-Modellsmodule nand_gate (y,a,b,c);input a,b,c;output y;

supply0 gnd;supply1 power;wire y1,y2;

pmos(y,power,a);pmos(y,power,b);pmos(y,power,c);nmos(y,y1,a);nmos(y1,y2,b);nmos(y2,gnd,c);

endmodule

Page 41: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 41

Übung 1

Schreibe ein strukturelles Modell für das gezeigte RS-Latch!Füge die angegebenen Delays hinzu!

Q

Q_

reset

set

Rise-tpy:5 min:3 max 7, Fall-6, Turnoff-4

Fall-tpy:5 min:3 max 7, Rise-6, Turnoff-4

Page 42: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 42

Modellierungstips

? Verilog-Quelltext kann in jedem Ordner abgelegt werden.

?Quelltext kann mit beliebigem Editor erstellt werden oder

(besser wegen Farbcodierung) mit den Editoren von

Simulationswerkzeugen.

?Dateien mit Verilog Quelltext können beliebig heißen, aber

es ist günstig, die Datei wie das Modul zu benennen.

? Es ist empfehlenswert, den Modulnamen sinnvoll, also

angelehnt an die beschriebene Komponente zu wählen,

also DFF für ein D-Flip-Flop.

Page 43: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 43

Model-Test

? Jedes Design muss getestet werden, um die Funktion sicherzustellen. Dazu wird simuliert.

? Ein Simulator kann Verilog-Modelle zeilenweise prüfen, um Fehler zu lokalisieren.

? Ist das Modell kompiliert, wird es mit geeigneten Testvektoren angesteuert.

Beispielmodellmodule xor_gate(a,b,c);

input a,b;output c;xor (a,b,c);

endmodule

Page 44: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 44

Test des XOR_Gatter-Modells

? Der Simulator wird gestartet und das xor_gate Model kompiliert. ? Danach wird der Simulator so eingestellt, dass die Ausgangs- und

Eingangsignale als Wellenzüge dargestellt werden (ports a, b und c).? Das Modell wird mit folgendem Stimulus angesteuert:

Wert Zeit erwarteter Ausgang force a 0 0 0force b 0 0 0force a 1 50 1force b 1 100 0force a 0 150 1force b 0 200 0

? Simuliere 250 Zeitschritte (Run for 250).

Page 45: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 45

Model Test im Überblick

Erzeuge den Quellcode für das Verilog Modell!

Kompiliere den Quelltext!

Korrigiere die Syntax-Fehler und kompiliereerneut!

Rufe den Simulator auf und lege die Eingangsmuster an! Prüfe Ausgangssignale!

Modell

Entwicklung

Kompiliere

Design

Beseitige

Syntax

Fehler

Simuliere

das Design

Fehler? Korrigiere Modell, kompiliere/simuliereerneut!

Page 46: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 46

Übung 2

1. Finden Sie die Fehler in folgendem Modell ?module port (a, b, c);input a, b;output c;reg a, b, c;//statements;

endmodule2. Ergänzen Sie die unvollständigen Anweisungen!

module exe (x, y, p, q);input x, q;output ________;reg ________;wire ________;//statements;

endmodule

Page 47: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 47

Übung 3

1. Welche Variablen haben falsche Namen?a. data_bus ( )b. _net ( )c. reg ( ) d. $flag ( )

2. Welche Zahlen sind falsch dargestellt?a. 2’d 5; ( )b. 4’h a; ( )c. 10’b x; ( )d. 3’d 111; ( )

Page 48: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 48

Systemaufgaben und Kompilerdirektiven

Page 49: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 49

Systemaufgaben (System tasks)

? Verilog stellt verschiedene eingebaute Routinen für Systemfunktionen zur Verfügung, um z.B. Ergebnisse zu drucken oder von Dateien zu lesen.

? Jede System-Task erkennt man am Symbol $ vor dem jeweiligen Schlüsselwort.

? System-Tasks dürfen nur aus prozeduralen Blöcken heraus aufgerufen werden (initial Block und alwaysBlock, siehe unten)

Beispiele

$display

$monitor

Page 50: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 50

Systemaufgaben (System tasks)

? $display – zeigt Werte von Variablen, Zeichenfolgen oder Ausdrücken auf dem Bildschirm an

Syntax$display (“format_def”, p1,p2,p3);“format_def”: Hier wird vorgegeben, in

welchem Format die Werte angezeigt sollen.

p1,p2,p3 : ausgewählte Variablen, deren Werte angezeigt werden sollen

Beispielea = 5;$display(“Hello world”); //druckt Zeichenfolge $display(“a=%d”,a);// gibt den Wert von ‘a’ aus

Page 51: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 51

$monitor

$monitor (“format_string”, p1,p2,p3);? $monitor verhält sich wie $display, ist aber immer aktiv. $monitor gibt die Variable bei jeder Zustandsänderung aus.

? Zu einer best. Zeit kann nur ein $monitor - Statement aktivsein. Sind mehrere $monitor Anweisungen aktiviert, wirdnur die zuletzt aufgerufene ausgeführt.Besipielinitial

$monitor (“state=%d”, state);/* wenn sich die Größe‘state’ändert, wird ihrWert ausgedruckt */

Page 52: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 52

Formatierungsmöglichkeiten

?%d oder %D als Dezimalzahl anzeigen

?%b oder %B binär anzeigen

?%s oder %S als Zeichenfolge anzeigen

?%h oder %H als Hex-Zahl anzeigen

?%c oder %C als ASCII-Symbol anzeigen

?%v oder %V Signalstärke anzeigen

?%o oder %O als Oktalzahl anzeigen

?%t oder %T Variable im Current-Time-Format anzeigen

?%f oder %F als relle Zahl anzeigen

Page 53: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 53

Wichtige System-Routinen

? $time - gibt die aktuelle Simulationszeit zurück

? $stop - hält den Simulator an, und setzt das System in den interaktiven Modus

? $finish - stoppt den Simulator

? $fopen - öffnet eine Datei

? $fclose – schließt eine Datei

? $fwrite – schreibt Daten in eine Datei

? $reset - setzt den Simulator zurück

? $random – erzeugt ganzzahlige Zufallszahlen

Page 54: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 54

Wichtige System-Routinen

? $monitoroff- deaktiviert die aktuelle $monitor-Routine

? $monitoron - aktiviert $monitor

? $strobe - anzeigen von Variablen am Simulationsende

? $readmemh - lese Hex-Daten aus einer Datei

? $readmemb - lese Binär-Daten aus einer Datei

? $setup - bestimme die setup time (Timing Check)

? $hold - bestimme die Halte-Zeit

? $period - bestimme die Periodendauer eines Signals

Page 55: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 55

Übung 4

Was wird nach folgenden Anweisungen ausgegeben?

1. latch = 4’d12;

$display(“Der aktuelle Wert von latch= %b”, latch);

2. in_reg = 3’d2;

$display($time,”in_register Wert = %b,in_reg[2:0]);

Page 56: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 56

Compiler-Direktiven

?Mit diesem Direktiven kann man in Verilog den Kompilationsvorgang steuern. Diese Anweisungen beginnen mit dem `-Symbol

? Einige wichtige Compiler-Direktiven sind

– `define– `include– `ifdef– `else– `endif– `timescale– `reset_all

Page 57: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 57

? `define – ersetzt als Makrofunktion Text im Verilog-Code. Eine Zeichenfolge kann über einen Namen angesprochenwerden.

Beispiel `define read 1

Wenn im Quellcode ‘read’ auftaucht, wird dieseZeichenfolge durch ‘1’ersetzt

? `include – setzt ein anderes Verilog-File ein:

Beispiel `include “old_file.v”

Compiler-Direktiven

Page 58: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 58

`ifdef, `else, `endif? Bedingte Kompilation: Verilog kann wahlweise

bestimmte Programmzeilen einschließen oder nicht.Syntax`ifdef macro_name

source_code;`else

source_code;`endif

Compiler-Direktiven

`ifdef TEST/*kompiliere “module one()” nur, wenn TEST gesetzt ist */module one();......endmodule`else /*kompiliere “module two()” als Voreinstellung */module two();......endmodule`endif /* Ende der bedingtenKompilation */

Page 59: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 59

? `timescale gibt die physikalische Dimension der Zeiteinheit in einer Verilogbeschreibung vor.

Syntax

`timescale <time_unit> / <time_precision>

? Time unit (1. Parameter) definiert die Zeiteinheit.

? Time precision (2. Parameter) die Zeitauflösung.

? Beide Parameter sind ganze Zahlen, mit den Werten 1,10 oder 100.

Compiler-Direktiven

Page 60: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 60

?Mögliche Zeiteinheiten s (Sekunde), ms (Millisekunde), us (Mikrosekunde), ns (Nanosekunde), ps(Picosekunde), fs (Femtosekunde)

Beispiel`timescale 1ns/100pshier ist #4 ein Delay von 4 Nanosekunden#4.234 und entspricht 4.23ns

`timescale 10ns/100pshier ist #4 gleich 40 Nanosekunden und#4.234 entspricht 42.34ns

Compiler-Direktiven

Page 61: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 61

Kontinuierliche Anweisungen,Delay,

Prozedurale Blöcke und Answeisungsgruppen

Page 62: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 62

Kontinuierliche Anweisung

? Anweisungen, die einem Netz logische Pegel zuweisen.?Die Anweisungen sind immer aktiv (wie Signalzu-

weisungen in VHDL). Zuweisung erfolgt mit Zustandswechsel auf der rechten Seite (Event).

? Kontinuierliche Zuweisungen können innerhalb wie außerhalb von prozeduralen Blöcken erfolgen

Syntaxassign wire_name = expression;

Beispielassign sum = a + b;

Page 63: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 63

Signalverzögerungen (Delays)

?Der Operator ‘ # ’ gibt Delays in Verilog an.

? ‘ # ’ heißt: „Warte eine bestimmte Zeit!“Beispiel

assign # 5 c = a & b;

a

b

c

0 5 10 15 20 25 30

Page 64: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 64

Prozedurale Blöcke

? Es gibt zwei prozedurale Blöcke

initial -Block

always -Block

?Werden primär in Verhaltensmodellen verwendet.

? Alle Verilog-Anweisungen, die Verhalten beschreiben

(behavioral statements) dürfen nur in diesen Blöcken

verwendet werden.

? Verschiedene prozedurale Blöcke in einem Modell

werden zeitlich parallel bei der Simulation ausgeführt.

Page 65: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 65

Initial-Block?Der Initial-Block wird nur einmal ausgeführt (one-shot

activity flow)

? Er dient zu Initialisierung von Variablen.

Syntaxinitial

variable_name = value;

Beispielinitial

a = 2’b00;

Page 66: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 66

Always-Block

?Dieser Block wird wiederholt ausgeführt.?Wenn sich in der Sensitivitätsliste eine Variable ändert,

wird der Block einmal durchlaufen.

Syntax

always @ (sensitivity_list)sequential statement;

Beispiel

always @ (a or b) //’or’ ist einSchlüsselwort

c = a + b; /* Wenn sich ‘a’ oder ‘b’ ändern, wird ‘c’ neu berechnet*/

Page 67: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 67

Ablauf bei beiden Blocktypen

Initialblock

Alwaysblock

Start

Ende

t = 0 t = 0

Reagiere auf Ereignis

Page 68: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 68

Anweisungsgruppen

? Treten in einem prozeduralen Block mehrere Anwei-sungen auf, müssen die Anweisungen gruppiert werden.

?Gruppieren kann man mit den Schlüsselworten

begin und end

(oder)

fork und join.

?Diese Schlüsselworte lassen sich verschachteln.

? In begin end Blöcken sind die Anweisungen sequentiell und die Delays addieren sich.

Page 69: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 69

Beispielinitial begin#5 c = 1;#5 b = 0;#5 d = c;

end

? Hier wartet die zweite Anweisung, bis die erste ausgeführt worden ist.

? Der Block ist nach 15 Zeiteinheiten abgearbeitet.

b

c

d

0 5 10 15 t->

Zusammenfassen von Statements zu Anweisungsgruppen

Page 70: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 70

? In fork-join Blöcken sind die Statements neben-läufig und die Delays sind voneinander unabhängig.

Beispielinitial

fork#5 c = 1;#5 b = 0;#5 d = c;

join? Hier wird das zweite Statement parallel zum ersten

abgearbeitet. ? Der Block ist nach 5 Zeiteinheiten beendet.

0 5 10 15

b

c

d

t->

Zusammenfassen von Statements

Page 71: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 71

Das träge Delay und das Transportdelay module delay (in, transport, inertial); input in;output transport;output inertial;reg transport;wire inertial;

assign #100 inertial = in;always @ (in)

begintransport <= # 100 in;

endendmodule

Page 72: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 72

0 50 100 150 200 250 300 350 400 450 500

in

transport

inertial

Ergebnis als Wellenzüge

?Das Inertial Delay (träges Delay) blendet Eingangssignal-wechsel, die kürzer als die Verzögerungszeit sind, aus.

?Das Transportdelay verzögert jedes Signal wie vorgege-ben!

Page 73: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 73

Übung 5

? Bestimme die Simulationszeit für jedes Statement. Gebe die End- und Zwischenwerte von a, b, c und d an!

initialbegina = 1'b0;b = #10 1’b1;c = #5 1’b0;d = #20 {a, b, c};

end

Page 74: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 74

Zeitliche Anblaufkontrolle und prozedurale Zuweisungen

Page 75: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 75

Prozedurale Ablaufsteuerung

? ‘#’ Operator blockiert die Abarbeitung von Anweisungenfür eine bestimmte Zahl von Zeiteinheiten.

?Der Eventsteuerungsoperator ‘@’ lässt die Abarbeitungnur bei Signalflanken zu. Es gibt 2 Typen: Beispiel für Typ 1 begin

……@ trig sum = a + b; /*sobald ‘trig’ gesetzt ist, wird sum zugewiesen */……

end

?Hier steht ‘@’ vor einem Bezeichner oder einem Ausdruck.

Page 76: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 76

Beispiel für Typ 2always @ (signal)

begin…… sum = a + b;……

end? Hier wird der Aktivitätsfluss auf ein Ereignis bei einer

Variablen oder bei einem Ausdruck synchronisiert.? Flankensteuerung mit Schlüsselworten posedge (positive

Flanke) oder negedge (negative Flanke). Beispielalways @ (posedge clk or negedge reset)

begin………

end

Prozedurale Ablaufsteuerung

Page 77: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 77

Wait Anweisung

? Für pegelsensitives Verhalten:Syntaxwait(Ausdruck)

statements;

?Wenn der Ausdruck den Wert “wahr” (“falsch”) ergibt, werden die folgenden Anweisungen (nicht) ausgeführt.

So kann man Ausdrücke überwachen!

Beispielmodule example_wait(

enable, a, b);input enable, a;output b;always beginwait (enable == 1)

b = a;end

endmodule

Page 78: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 78

Prozedurale Zuweisungen

? Es gibt in Verilog HDL zwei verschiedene Zuweisungs-arten:

blockierende (Blocking)und nicht blockierende Zuweisungen.

? Blockierende Anweisungen werden nacheinander, wie im Block aufgeführt, abgearbeitet. Erst wenn das eine Statement fertig ist, wird das nächste begonnen.

?Nicht blockierende Zuweisungen in einem Block werden zeitgleich gestartet und parallel abgearbeitet.

Page 79: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 79

Blockierende Zuweisungen? Der Operator ‘=’ kennzeichnet blockierendes Verhalten.? Gibt es Zeitverzögerungen in einer Zeile, wird die

nächste Zeile erst nach Ablauf des Delays angefangen.initial

begina = 5;b = 3;#10 c = 1;#5 d = 5;

endHier haben bei t = 0 ‘a’ und ‘b’ die Werte 5 und 3.Bei t = 10 wird ‘c’ der Wert ‘1’ und bei t = 15 wird ‘d’ ‘5’ zugewiesen.

Page 80: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 80

Ablauf bei blockierenden Zuweisungen

Beispielinitial // ‘a’ bekommt den Wert von begin // ‘b’ und ‘c’ bekommt dann a = b; // den Wert von ‘a’. Alsoc = a; // hat am Ende ‘c’ den

end // Anfangswert von von ‘b’

b

a

c

Page 81: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 81

Ablauf bei nicht blockierenden Zuweisungen

Beispielinitialbegina <= b; c <= a;

end

b c

a

Hier werden die rechtenSeiten aller Zuweisungenausgewertet und gleichzeitigzugewiesen.

Im Beispiel bekommt also ‘a’ den Wert von ‘b’ und ‘c’ den Wert von ‘a’.

Page 82: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 82

?Der erste always-Block verwendet blockierende Zuweisungen. Als Ergebnis erhalten wir: a = 15,b = 15.

?Der zweite Block verwendet nicht blockierende Zuweisungen. Das Ergebnis ist : c = 50, d = 25.

Die Werte werden korrekt ausge-tauscht, weil die Anweisungen zwar gleichzeitig aufgerufen werden, aber die Ergebnisse der rechten Seiten erst zwischengespeichert und danach zugewiesen werden.

Anwendung von nicht blockierenden Zuweisungen

initial begin

a = 10; c = 25;b = 15; d = 50;

endalways @(event)begin

a = b;b = a;

endalways @(event)begin

c <= d;d <= c;

end

Page 83: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 83

Auswahl und Verzweigung bei prozeduralen Zuweisungen

Page 84: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 84

Prozedurale Anweisungen

? Anweisungen zur Verzweigung und Auswahl werden in prozeduralen Blöcken verwendet

?Diese Anweisungen eignen sich besonders zur einfachen Modellierung von Hardwareblöcken, wie Komparatoren, Multiplexern, Kodier- und Dekodier-schaltungen usw.

Page 85: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 85

Bedingte Zuweisung

?Wie in der Sprache ‘C’ gibt es in Verilog if und elseVerzweigungen

Syntaxif (Ausdruck)

Anweisungen;else if (Ausdruck) <optional>

Anweisungen;elsevor_eingestellte_Anweisungen;

? if-else -Verzweigungen können verschachtelt werden.? Anweisungen nach if-else können mittels begin und end zusammengefasst werden.

Page 86: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 86

Beispielif (num = = 4`ha)out = input_a & input_b;

else if (num != 4`h9)begin out = input_a | input_b;flag = flag + 1`b1;

endelseout = 1`b0;

Bedingte Zuweisung

Page 87: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 87

Auswahl mit Case ? In Verilog haben wir drei Typen von Auswahl-

Statements: case, casex, casez.?Diese Anweisungen können ebenfalls verschachtelt

werden.? Ist kein Vergleich zutreffend, wird die nach default

stehende Anweisung ausgeführt.

Syntaxcase (Ausdruck)case_index1: Anweisungen1;case_index2: Anweisungen2;default : Anweisungen_def;endcase

Page 88: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 88

Auswahl mit Case

Beispielcase (select)

2´d0 : out = in1;2´d1 : out = in2;2´d2 : out = in3;

default : out = in4;endcase

/* Wenn select nicht 0, 1, 2 ist, wird out = in4 */

Page 89: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 89

? casex oder casez überspringen ‘x’- und ‘z’-Werte beim Vergleich von Case-Vorgabe und Case-Auswahl-Index.

? ‘x’ und ‘z’ werden also als nicht relevant (don’t cares) angesehen.Beispiel

casex (one_hot)4´bxx1 : next_state = 2;4´bx1x : next_state = 1;4´b1xx : next_state = 3;

endcase

Auswahl mit Casex oder Casez

Page 90: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 90

Übung 6

Schreiben Sie ein Modell für einen 4 X 1-Multiplexer mit Hilfe von case-Statements und alternativ mit if-elseVerzweigungen.

Page 91: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 91

Schleifen in prozeduralen Blöcken

Benannte Blöcke und lokale Variablen

Page 92: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 92

Schleifen

? In Verilog gibt es vier verschiedene Schleifentypen:

while, for, repeat, forever.

? Schleifen sind nur innerhalb von prozeduralen Blöcken

erlaubt (initial und always Blöcke).

? Zeitlich nebenläufige Anweisungen können nicht

wiederholt durchlaufen werden.

? Jede Schleife kann mit dem Statement disable

beendet werden!

Page 93: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 93

While-Schleife

? while -Schleifen werden solange ausgeführt, wie ein Ausdruck “wahr” ist.

? Sobald der Ausdruck den Wert “falsch” annimmt, wird die Schleife abgebrochen und das erste Statement nach der Schleife ausgeführt.

Beispiel

while (count <= 4’d 11)begincount = count + 1’b1;end/*wird ausgeführt biscount den wert 11 erreicht*/

Syntax

while(Ausdruck)beginAnweisungen;end

Page 94: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 94

For-Schleifen

?Haben die gleichen Eigenschaften wie die for Schleifen in ‘C’. Die Schleife wird solange ausgeführt, wie ein Ausdruck “wahr” ist. Abbruch immer über disable möglich.

? Schleifenindex wird am Anfang gesetzt, dann inkrementiert und mit der Bedingung verglichen.

Syntaxfor(Anfangs_Bedingung; Ausdruck; reg_Zuweisung)begin

Anweisungen;end

Page 95: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 95

?Register-Variable für Schleifenindex muss entweder integer oder reg-Type sein.

Beispielinteger i;for (i=0; i <= 99; i=i+1)

begin...Anweisungen;...

end

Schleife wird 100mal ausgeführt.

For-Schleifen

Page 96: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 96

Repeat-Schleifen?Hier wird der relevante Ausdruck einmal ausgewertet,

um zu bestimmen, wie oft die Schleife abgearbeitet werden soll. Abbruch wie immer mit disable

?Wenn sich dabei ein ‘x’ oder ‘z’ ergibt, wird die Schleife wie bei ‘0’ gar nicht durchlaufen.

SyntaxRepeat (Ausdruck)

Anweisungen;

Beispielrepeat (16)beginAnweisungen;...

end// 16 Durchläufe

Page 97: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 97

Forever-Schleife

? Schleife ohne Abbruchbedingung oder Schleifenindex.

? Beenden nur mit disable möglich.

Beispielinitial

beginclk = 1’b0;forever #5 clk = ~clk

end

Page 98: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 98

Forever-Schleife und always-Block im Vergleich

? Beide sind zyklisch.

? Ein always-Block definiert nebenläufiges Verhalten,

forever-Schleife stellt einen algorithmischen Ablauf dar.

? forever-Schleifen lassen sich schachteln, aber always-

Blöcke nicht.

? forever-Schleifen werden nur dann ausgeführt, wenn sie bei der Simulation des Modells erreicht werden, always-

Blöcke sind stets aktiv.

Page 99: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 99

Übung 7

Wo liegt der Fehler in der folgenden for-Schleife?module test;integer i;...initialbeginfor (i=0; i<= 15; i = i + 1);

in = i;end

endmodule

Page 100: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 100

Benannte Blöcke

? Blöcke können Namen erhalten, also benannt werden.? In solchen Blöcken können lokale Variablen deklariert

werden. ? Benannte Blöcke können sogar mit dem Schlüsselwortdisable deaktiviert werden.

Beispiel

initialbegin : benannter_Blockreg a;integer count;......

end

Page 101: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 101

Disable-Anweisung

?Diese Anweisung beendet die Ausführung von benannten Blöcken und von Schleifen!

Examplefor (count=100;count>=10;count=count-1)begin : testout = a + b;if (out = = 50)

disable test;end

Page 102: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 102

Hierarchie und strukturelle Modellierung

Page 103: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 103

Hierarchie in Modulen

Top Modul

Sub-Modul 1 Sub-Modul 2

Modul 1 Modul 2 Modul 3

Beispiel

Volladdierer

Halb-Addierer

Halb-Addierer

Page 104: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 104

Hierarchie und Struktue

? Komplexe Modelle können zur Verbesserung der Übersichtlichkeit in kleinere aufgeteilt werden.

?Diese kleineren Module werden verbunden, um die gewünschte Funktion zu erhalten, in dem die Modelle instanziiert werden (strukturelles Modell).

?Das Modul auf der obersten Hierarchieebene ist das Top-Modul.

?Das oberste Moduls muss nicht immer Ports besitzen.

Page 105: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 105

Beispiel für strukturelles Modell

module halb_addierer(S,C,A,B);

output S, C;input A, B;

wire S, C, A, B;

assign S = A ^ B;assign C = A & B;

endmodule

AB

S

C

HalbAddierer

A

B

S

C

Page 106: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 106

Schaltplan Volladdierer

Halb-Add. 2

ha2

A

B

S

C

Halb-Add. 1

ha1

A

B

S

C

in1

in2

cincout

sumI1

I2 I3

Volladdierer

Page 107: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 107

Verbindung von Modul-Ports in Strukturmodellen

?Modelle auf niedrigeren Hierarchieebenen müssen nicht nur instanziiert werden, sondern auch verbunden, damit die angestrebte Funktion entsteht.

?Diese Port-Verbindungen zwischen verschiedenen Modulen kann auf 2 Arten erfolgen:

Verbindung nach Position

Verbindung durch explizite benannte Zuordnung

Page 108: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 108

Verbindung mit expliziter Zuordnung

Volladdierer (Verbindung mit benannter Zuordnung)module full_adder(sum,in1,in2,cin,cout);

input in1,in2,cin;half_adder h_a1 (.S(I1),.A(in1),.B(in2),.C(I2));

half_adder h_a2 (.S(sum),.A(I1),.B(cin),.C(I3));output sum;output cout;wire I1,I2,I3;

or(cout,I2,I3);half_adder h_a1 (.S(I1),.A(in1),.B(in2),.C(I2));half_adder h_a2 (.S(sum),.A(I1),.B(cin),.C(I3));

endmoduleInstanzen Namen – unterscheiden Mehrfach-

instanzen desselben Moduls.

Portverbindung mit benannter Zuordnung, d.h. Verbindung über Port-name und zugeordneter Signalleitung.

Page 109: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 109

Verbindung mit impliziter Zuordnung

Volladdierer (Verbindung nach Position)module full_adder(sum,in1,in2,cin,cout);

input in1,in2,cin;output sum;output cout;wire I1,I2,I3;

or(cout,I2,I3);half_adder h_a1 (I1,I2,in1,in2);half_adder h_a2 (sum,I3,I1,cin);

endmodule

Sieht einfach aus!Aber explizite Zuordnung ist weniger fehleranfällig!

Verbindung der Modul-Ports gemäß Position in Submodul.

Page 110: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 110

Parameter, der Datentyp “Event”

und Unterprogramme

Page 111: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 111

Parameter

? Konstanten, die bei der Simulation verwendet werden und ganze sowie reelle Zahlen, Zeiten, Verzögerungen oder ASCII Folgen darstellen.

? Konstanten in Verilog erkennt man am Schlüsselwort ‘parameter’

? Jede Konstante kann bei der Kompilation verändert werden, aber nicht während der Simulation.

Beispielparameter delay = 10;

Hier ersetzt der Kompiler überall im Quellcode ‘delay’durch ’10’.

Page 112: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 112

Überschreiben von Parametern

?Manchmal müssen Parameter geändert werden.

? Angenommen man hat ein parametrisiertes Verhaltens-

modell für einen 2Bit-Addierer geschrieben, das später

als 10-Bit.Addierer verwendet werden soll.

?Wenn sich der Parameter 2 Bit für die Addiererbreite

überschreiben lässt, ist dies die einzige notwendige

Änderung!

?Das Schlüsselwort ‘defparam’ kann zum Überschreiben

von Parameterwerten benutzt werden.

Page 113: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 113

Überschreiben von Parametern

Beispielmodule one();

…parameter delay = 100;…

endmodule

module two();…defparam g1.delay = 150, g2.delay = 200;…one g1();one g2();…

endmodule

Instanz g1 von Modul one erhält delay = 150

Instanz g2 von Modul one erhält delay = 200

Page 114: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 114

Datentyp Event

?Wird als Indikator für ein Ereignis benutzt. ? Variablen dieses Typs können keine logischen Werte

annehmen oder Daten speichern.?Dieser Datentyp eignet sich zum Synchronisieren von

nebenläufigen Aktivitäten in einem Modul. ?Das Schlüsselwort ‘event’ kennzeichnet Signale dieses

Typs.

? Events werden mit dem Operator ‘->’ ausgelöst.

? Events erkennt man mit dem Event-Operator @.

Page 115: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 115

Beispiel...event start;always @ (posedge clock)begin...if (data == 1'b0)-> start; // wenn data == 1’b0 wird, löst dies... // einen Event auf dem Signal start aus

endalways @ (start) // always Block reagiert auf den Eventbegin...statements;...

end...

Beispiel für Event

Page 116: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 116

Unterprogramme

?Unterprogramme gliedern ein komplexes Modell.

?Code-Segmente, die mehrfach genutzt werden, brauchen nur einmal eingegeben zu werden.

?Unterprogramme vereinfachen so die Wartung, Aktualisierung und Portabilität von Modellen.

? Verilog kennt zwei Klassen von Unterprogrammen:

task und function

Page 117: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 117

Tasks? Tasks fassen prozedurale Anweisungen zusammen.

? Es sind beliebig viele Eingangs-, Ausgangs- und

bidirektionale Ports zulässig.

? Tasks werden innerhalb eines Modeuls deklariert (keine

Packages wie in VHDL)

? Tasks können andere Tasks oder Funktionen aufrufen.

? Tasks können nur von einer prozeduralen Anweisung

aufgerufen werden und dürfen nicht in Ausdrücken

auftreten.

Page 118: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 118

Tasks

Syntax

task task_name;port Deklaration;...Anwesiungen;...

endtaks

Page 119: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 119

Task Beispiel

module task_add(data_1,data_2,out);input [1:0]data_1,data_2;output [2:0]out;reg [2:0]out;

always@(data_1 or data_2)add(data_1,data_2,out);

task add;input [1:0]a; input [1:0]b;output [2:0]c; c = a + b;

endtaskendmodule

Task Deklaration

Task Aufruf im always-Block

Page 120: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 120

Function ? Functions können nur kombinatorisches Verhalten

darstellen

? Functions dürfen keine Delays, flankensensitives oder

zeitkontrolliertes Verhalten enthalten.

? Functions müssen einen oder mehrere Eingänge auf-

weisen. Ausgabeports und bidirektionale Ports sind nicht

erlaubt. Funktionen geben einen einzigen Wert zurück.

? Functions können andere Funktionen aber keine Tasks

aufrufen.

?Der Rückgabetyp muss angegeben werden

Page 121: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 121

Functions

Syntax

function [Typ_oder_Bereich] function_name;input_port deklaration ;...Anweisungen;...

endfunction

/* [Typ_oder_Bereich] =

real,integer,time,realtime oder Bereich */

Page 122: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 122

Function Beispielmodule fun_mux(sel,a,b,out); // Multiplexer für 8Bit-Worte

input [7:0]a,b; // a, b: Eingangsworteinput sel; // sel: Auswahlbitoutput [7:0] out; // out: Ausgabewortreg [7:0]out;

always @(sel,a,b)out = mux(sel,a,b);

function [7:0]mux; input sel;input [7:0]a,b; case (sel)

1'b0 : mux = a;1'b1 : mux = b;default : mux = 7'bx;

endcaseendfunction

endmodule

Function-Deklaration: Name mux,

Bereich = 8 Bit

Aufruf im always-Block

Page 123: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 123

Übung 8

1. Schreibe eine Funktion, die die beiden 4-Bit Zahlen ‘a’

und ‘b’ multipliziert! Das Ergebnis ist 8 Bit breit. Testen

Sie die Funktion in einem Modul!

2. Schreibe eine Funktion, die die Fakultät n! einer 4-Bit

Zahl berechnet. Das Ergebnis ist ein 32-Bit Wert und

wird mit einer Verzögerungszeit von 10 Zeiteinheiten

zugewiesen.

Page 124: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 124

Specify Blöcke

Page 125: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 125

Specify Blöcke

? In diesen Blöcken können Verzögerungszeiten und Laufzeiten für ein Modul festgelegt werden.

? Ein specify-Block ist ein eigenständiger Block, der nicht in prozeduralen Blöcken eingebunden sein darf.

? specify-Blöcke haben folgende Aufgaben:

Zuweisen von Pin-zu-Pin-Delays für ein Modul

Setup-Timing-Checks

Festlegen von specparam-Konstanten

Page 126: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 126

?Das Delay zwischen einem input/inout-Port und einemoutput/inout-Port ist ein Pin-zu-Pin Delay.

?Dieses Delay kann in paralleler Form oder als vollstän-dige Möglichkeit (full connection) vorgegeben werden:

Pin-zu-Pin Verzögerungen

input/inout port

output/ inout port

input/inout port

output/ inout port

Operator ‘=>’ Operator ‘*>’

Parallel Full

Page 127: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 127

Parallele Verbindung

Beispiel

module pc(inA,inB,inC,out1,out2,out3);input inA, inB, inC;output out1,out2,out3;

specify(inA => out1) = 3;(inB => out2) = 3;(inC => out3) = 4;

endspecify

and(out1,inA,inB,inC);or (out2,inA,inB,inC);xor(out3,inA,inB,inC);

endmodule

Pfadverzögerungen von: inA nach out1, inB nach out2 und inC nach out3

Page 128: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 128

Examplemodule fc(inA,inB,inC,out);

input inA, inB, inC;output out;

specify(inA,inB,inC *> out) = 3;

endspecify

and(out,inA,inB,inC);or (out,inA,inB,inC);xor(out,inA,inB,inC);

endmodule

“Full” Verbindung

Alle kombinatorischmöglichen

Pfadverzögerungen sind 3 Zeiteinheiten

Page 129: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 129

Weitere Möglichkeiten

? specify-Blöcke können bedingte Pfadverzögerungen vorgeben:Beispielspecifyif (data = 1) (data => out ) = 10;if (data = 0) (data => out ) = 8;

endspecify? Generische Parameter können in specify-Blöcken definiert werden

mit Schlüsselwort ‘specparam’ (entspricht VHDL Generics)

Beispielspecify

specparam delay = 10;

(in => out) = delay;endspecify

Page 130: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 130

Testbenches

Page 131: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 131

Test Bench

?Diese Module dienen in Verilog zur automatisierten

Verifikation anderer Module.

? Zu testendes Modul wird in die Test Bench eingesetzt.

?Das zu verifizierende Design heißt das Design Under

Test (DUT)

Page 132: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 132

Test-Methodik

Testvektor-Generator

Ausgabe-Überwachung

Design Under Test

Test Bench

Page 133: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 133

DUT Beispiel

//Design Under Test

module halb_addierer (a,b,sum,carry);output sum, carry;input a, b;

wire sum, carry, a, b;

//kontinuierliche Zuweisungenassign sum = a ^ b;assign carry = a & b;

endmodule

Page 134: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 134

Testbench Beispielmodule tb;reg a,b;wire sum, carry;

//halb_addierer Instanziierunghalb_addierer ins1(a,b,sum,carry);/*Port Verbindung

erfolgt implizit */initialbegin //Output monitor

$monitor ( $time,"input_a= %b,input_b=%b,Sum=%b,Carry=%b",a,b,sum,carry);

endinitialbegin //Test-Vektor-Generierung

#10 a = 0 ; b = 0;#10 a = 0 ; b = 1;#10 a = 1 ; b = 0; #10 a = 1 ; b = 1;

endendmodule

Page 135: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 135

Ergebnis

# 0 input_a= x,input_b=x,Sum=x,Carry=x# 10 input_a= 0,input_b=0,Sum=0,Carry=0# 20 input_a= 0,input_b=1,Sum=1,Carry=0# 30 input_a= 1,input_b=0,Sum=1,Carry=0# 40 input_a= 1,input_b=1,Sum=0,Carry=1

Textausgabe mit Hilfe der $monitor System Task

Wellenzüge

Page 136: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 136

Übung 9

Schreibe ein Modell für einen 4 zu 2 Decoder und teste die Funktion des Modells mit einer Testbench!

Page 137: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 137

Erweiterungen in Verilog 2001

Page 138: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 138

Verilog 2001

? Verilog-95(IEEE 1394) wurde aktualisiert und verbessert. Mit diesen Erweiterungen entstand der IEEE Standard 1364-2001, kurz Verilog-2001

? Verilog 2001 vereinfacht die Nutzung Verilog noch weiter

? Verilog 2001 verknappt die Syntax.

?Die meisten EDA-Produkte unterstützen den neuenStandard!

Page 139: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 139

Verilog 2001- Port DeklarationVerilog 1995module add

(a,b,c_in,sum,c_out);input [7:0] a,b;input c_inoutput [7:0] sum;output cout;reg [7:0] sum;reg c_out;wire [7:0] a,b;wire c_in;. . .

Verilog 2001 – entweder können Portrichtungund Datentyp zusammengefasst werdenmoduleadd(a,b,c_in,sum,c_out);input wire [7:0] a,b;input wire c_in;output reg [7:0] sum;output reg cout;

. . .

Verilog 2001 – oder die gesamte Portinforma-tion wird in der Portliste angegebenmodule add(input wire [7:0] a,b;input wire c_in;output reg [7:0] sum;output reg cout;). . .

Page 140: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 140

Task und Function

Verilog 1995

task parity_check;input [15:0]data_in;output even;output odd;wire [15,10] dat_inwire even, odd;...endtask

Verilog 2001Datenflussrichung und Datentypkönnen zusammen in der Portlisteangegeben werden (gilt auch fürFunctions).task parity_check (input wire [15:0] data_in,output wire even,output wire odd);…endtask

Page 141: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 141

Generate-Anweisung

? Verilog 1995 – Nicht vorhanden

? Verilog 2001 – Reguläre Modellstrukturen werden algorithmisch mitdem generate-Statement erzeugt.

Beispielmodule gray2bin1 (bin,gray);

parameter SIZE = 8;output [SIZE-1:0] bin;input [SIZE-1:0] gray;

genvar i;generate for(i=0; i<SIZE; i=i+1)begin

assign bin[i] = ^gray[SIZE-1:i];end

endmodule

Generierung von 8 assignAnweisungen mit angepass-ten Indexwerten

genvar: neuer Datentyp als Indexvariable für generate

Page 142: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 142

Neue Sensitivitätsliste

Verilog 1995? Tritt mehr als eine Variable in einer Sensitivitätsliste auf,

dann werden diese mit dem or Schlüsselwort getrennt:always @(negedge rst or posedge clk) begin{statements} ;

end

Verilog 2001?Hier können die Variablen in der Liste mit Kommas

getrennt werden:always @(negedge rst, posedge clk) begin{statements} ;

end

Page 143: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 143

Potenzierungsoperator

Verilog 1995Nicht vorhanden

Verilog 2001Der Operator ** in Verilog 2001 erlaubt die Potenzbildung:integer resultat, basis, exponent;always @(posedge clock)

resultat = basis ** exponent;

Page 144: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 144

Zweierkomplement-Arithmetik

Verilog 1995? reg und net Datentypen werden als vorzeichenlose

Typen betrachtet. Vorzeichen können nur bei integerberücksichtigt werden.

Verilog 2001? reg und net Datentypen können auch vorzeichenbe-

haftet verarbeitet werde, wenn sie mit dem Schlüssel-wort ‘signed’ versehen werden:

module multiplier_8by8 (a, b, product);input signed [7:0] a, b;output signed [15:0] product;assign product = a * b;

endmodule

Page 145: Prof. Dr. Bernhard Hoppe, Karthikeyan Balasubramanian, …hoppe.eit.h-da.de/HDLs/verilog_into_11_7.pdf · 21.12.2006 Einführung in Verilog 1 Einführung in Verilog HDL IEEE-1364

21.12.2006 Einführung in Verilog 145

Multidimensionale Felder

Verilog 1995?Nur eindimensionale Felder:

//1-dim. Feld aus 8-bit reg-Variablenreg [7:0] array1 [0:255];

Verilog 2001?Mehr-dimensional Arrays sind zulässig. /* 3-dimensionales Feld aus 8-Bit Netzen vomTyp wire */

wire [7:0] array3 [0:255][0:255][0:15];