+ All Categories
Home > Documents > Einführung in Verilog HDL · PDF fileassignment ) sequential_statement ... Wait Warten...

Einführung in Verilog HDL · PDF fileassignment ) sequential_statement ... Wait Warten...

Date post: 06-Mar-2018
Category:
Upload: vokhanh
View: 213 times
Download: 0 times
Share this document with a friend
115
Techn. Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Fachgebiet Rechnerarchitektur, Fachbereich Informatik, TU Darmstadt Versionen 4/2004, 4/2005 M. Halbach, R. Hoffmann, 4/2006 M. Halbach 4/2007, 10/2007, 4/2008, 3/2009 R. Hoffmann Einführung in Verilog HDL Technische Grundlagen der Informatik II Sommersemester 2009 Version 3/2009
Transcript

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

Fachgebiet Rechnerarchitektur, Fachbereich Informatik, TU Darmstadt

Versionen 4/2004, 4/2005 M. Halbach, R. Hoffmann,4/2006 M. Halbach 4/2007, 10/2007, 4/2008, 3/2009 R. Hoffmann

Einführung in Verilog HDL

Technische Grundlagen der Informatik IISommersemester 2009

Version 3/2009

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-2

Inhalt: Verilog HDL

Hardware-Beschreibungssprachen

Syntax-Schreibweise

Beschreibungsarten

Konstanten und Variablen

Operatoren

Modul: Definition, Zuweisungen, Statements

Delay Control, Event Control

Verilog-Programmbeispiele

ANHANG 1: Vertiefungen

ANHANG 2: Simulation

ANHANG 3: Weitere Programmbeispiele

graue Farbe: Zusatzinformation für Fortgeschrittene

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-3

Hardware-Beschreibungssprachen

Zweck Spezifikation im Entwurfsprozeß

für den manuellen Entwurf automatische Hardware-Synthese

Simulation Dokumentation

des entworfenen Systems Kommunikation zwischen Software- und Hardware-Spezialisten Veranschaulichung von Hardware-Strukturen und Algorithmen in der

Lehre

Sprachen Frühe Sprachen

CDL: Computer Description Language) CHU ca. 1965 CASSANDRE: Mermet ca. 1970 HDL (Hardware-Description-Language), 1975-80 R. Hoffmann

VHDL (1980-85,IBM, TI, Intermetrics), VERILOG HDL(1984, Gateway Design Automation) SystemC, System Verilog

entnommen aus Werbebroschüren fürXilinx Spartan™-3E FPGAs, 2005 bzw.Altera Cyclone Series, August 2004

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-4

Eigenschaften von Hardware-Beschreibungssprachen

Beschreibungsarten strukturell (Komponenten mit ihren Verbindungen) algorithmisch (ablauforientiert)

Abstraktionsniveaus Schalter, Transistor, Wire Gatter, Komponenten Automaten Algorithmen (Funktionelle Ebene)

Low

High

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-5

Eigenschaften von Hardware-Beschreibungssprachen (2)

Parallelverarbeitung Grundprinzip: Alle Komponenten arbeiten gleichzeitig parallel parallele Prozesse synchrone/asynchrone Parallelität Parallele Übertragung von Signalwerten über Verbindungsleitungen im Zeitraster, mit Zeitverzögerungen

Hardware-Datentypen Signale, Wires Taktsignale synchrone Register, asynchrone Speicher und Latches Ereignisse (Flanken)

Datenformate, Signalwerte Bitvektoren, Bitmatrizen Mehrwertige Logik (0, 1, Hochohmig, Kurzschluss, Pullup, ...)

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-6

Verwendete Syntax-Ausdrücke

[…] optional (0 oder 1 mal)

{…} wiederhole beliebig oft (0 bis n mal)

(…) wiederhole mindestens einmal (1 bis n)

( ) normale Klammer-Zeichen

id Bezeichner

| mehrere Auswahlmöglichkeiten

::= Hilfsbezeichnerdefinition

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

Beschreibungsarten

Strukturbeschreibung und

Algorithmische Beschreibung,

am Beispiel eines Halbaddierers

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-8

Halbaddierer: Funktionsweise

Inputs: a, b

Outputs

Summe s

Übertrag c (carry)

a b c s

0 0 0 0

0 1 0 1

1 0 0 1

1 1 1 0

a b

sc

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-9

Strukturbeschreibung mit Gatter-Bausteinen

module hadd3(a, b, c, s);input a, b;output c, s;

xor xor1(s, a, b);and and1(c, a, b);// Baustein aktueller Name (Verbindung)

endmodule

a b

sc

Kennzeichen: Verbindung expliziter Modul-Instanzen.

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-10

… mit logischen Operatoren

module hadd2(a, b, c, s);input a, b;output c, s;

assign s = a ^ b; // ^ exklusiv-oderassign c = a & b; // & und

endmodulea b

c s

Kennzeichen: Verbindung impliziter Modul-Instanzen.

Die Operatoren werden durch den Übersetzer durch primitive Moduln ersetzt.

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-11

… mit hochsprachlichen Operatoren

module hadd1(a, b, c, s);input a, b

output c, s; // sind hier implizit wire

assign {c,s} = a + b; // { , } Konkatenation

endmodule

HA

a b

sc

Kennzeichen: Verbindung impliziter Modul-Instanzen.

Die Operatoren durch den Übersetzer aufprimitive Moduln abgebildet. Dabei kann der hochsprachliche Operator auf einfachere Operatoren/Moduln übersetzt werden.

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-12

Algorithmische Beschreibung

auch bezeichnet als prozedurale / funktionale / Verhaltens – Beschreibung

module hadd1(a, b, c, s);input a, b

output c, s; // sind hier implizit wire

always @(a or b) // immer bei Änderung

{c,s} = a + b;

endmodule

Kennzeichen: Das Verhalten wird prozedural beschrieben.Vorstellung: Das Verhalten wird simuliert.

Bemerkung: wird auch als kombinatorischer always-Blockbezeichnet.

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

Konstanten und Variablen

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-14

Konstanten

Zahlen

Zeichenketten , siehe Anhang

Parameter

Compilerdirektive

graue Farbe: Zusatzinformation für Fortgeschrittene

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-15

Zahlen, binär codiert

Ohne Festlegung der Bitbreite

Syntax: Basis Zahl Basis

'b (binär, 2)

'o (oktal, 8)

'd (dezimal, 10),

'h (hexadezimal, 16)

Mit Festlegung der Bitbreite

Syntax: Bitbreite Basis Zahl

'b0010

4'b10

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-16

Zahlen-Beispiele

'b00010 // binär

147 // dezimal

'h7FF // hexadezimal

'o422 // oktal

5'b10 // 5-bit binär → 00010

5'd3 // 5-bit dezimal

-5'b11 // negative 5-bit Binärzahl(2er Komplement) → 11101

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-17

Variablentypen

wire

wand, wor

reg (hat verschiedene Bedeutungen)

Hardwareunabhängige Datentypen

integer (z. B. für Zählschleifen)

real

time (für Zeitmarken)

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-18

Mögliche Wertefür wire, wand, wor, reg

0 logische Null (false)

1 logische Eins (true)

x undefiniert, unbekannt

z hochohmig (Tristate)

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-19

wire zur Datenweiterleitung

Nur zum Transport, keine Speicherung!

Zur Verbindung von Primitiven und Modulinstanzen

Eine Verbindungsleitung

wire a;

Leitungsbündel

wire [4:2] b;

Zusatzinfomation: wire mit Verzögerung

wire [1:0] #(2) wires_with_2_clocks_delay;

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-20

and, or

and ergibt

0 if mindestens eine 0

1 if beide Inputs 1

x sonst

or ergibt

1 if mindestens eine 1

0 if beide Inputs 0

x sonst

Tabellen dazu siehe Anhang

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-21

reg (mehrdeutig)

Vier mögliche Bedeutungen

1. (temp) Hilfsvariable, dient nur zur Berechung, hat keine physikalische Entsprechung, wird bei der Synthese wegoptimiert

2. (tempwire) zur prozeduralen Beschreibung von Schaltnetzen, verwendet anstelle von wire/assign

3. (memory) zur asynchronen Speicherung (entspricht Latch/RS-FF)

4. (sync) Synchrones Register

Wenn die Bedeutung nicht eindeutig klar ist, dann zusätzliche Kommentare verwenden!!

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-22

Bitvektoren und Bitmatrizen

Speicher oder Registersätze werden als Vektoren aus Registern deklariert

Deklaration

reg a; // 1 Bit breites Register

reg [7:0] b; // 8 Bit breites Reg. (Bit 7 = MSB)

reg [0:7] b; // 8 Bit breites Reg. (Bit 0 = MSB)

reg [7:0] d [0:10]; // 11 8-Bit-Register

reg c [0:15]; // 16 1-Bit-Register

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

Operatoren

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-24

Dyadische arithmetische Operatoren

+ Addition- Subtraktion* Multiplikation/ Division% Modulo

reg und wire: Operatoren werden vorzeichenlos interpretiert

im neuen Standard auch mit Vorzeichen definierbar

real und integer: mit Vorzeichen

Falls irgendein Bit eines Operanden undefiniert („x“) ist, ist der Wert des Gesamtergebnisses ebenfalls undefiniert!

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-25

Monadische arithmetische Operatoren

– Minus (Vorzeichenwechsel)

+Plus (Vorzeichen bleibt erhalten)

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-26

Vergleichsoperatoren

Ergebnis 0, 1 oder x

> größer>= größer oder gleich< kleiner <= kleiner oder gleich == gleich!= ungleich

Ergebnis 0 oder 1

=== bitweise identisch (auch x, z)!== mindestens ein Bit nicht identisch

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-27

Logische Operatoren für Abfragen

Für Operanden mit 1 Bit Breite (true/false)

! cond nichtcond1 && cond2 undcond1 || cond2 oder

Bedingte Wertberechnung

result = cond ? truevalue : falsevalue

// if cond=true then result = truevalue

// else result = falsevalue

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-28

Bitweise Verknüpfung

~ Negation (not)& und (and)| oder (or)^ exklusiv-oder (xor)~& nicht-und (nand)~| nicht-oder (nor)~^ oder ^~ gleich, Äquivalenz (xnor)

in Klammern stehen die Namen der entsprechenden Primitiven (Grund-Gatter-Bausteine)

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-29

Monadische Reduktion

Reduktion: alle Bits des Vektors X werden miteinander durch die Operation verknüpft, Ergebnis ist ein Bit

& A und (and)| A oder (or)^ A exklusiv-oder (xor)~& A nicht-und (nand)~| A nicht-oder (nor)~^ A gleich (xnor)

z. B. | 'b10001 1'b1

&b[2:0] b[2] & b[1] & b[0]

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-30

Shifts

x << n shift x nach links um n Bitsx >> n shift x nach rechts um n Bits

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-31

Konkatenation

{ , }

Aneinanderreihung von Bits oder Bitvektoren

{ a, b[2:1], c[9:3] }

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-32

Replikation

{ Rep-Anzahl { expr }}

statt {b, b, b} einfacher {3{b}}

z. B. sign-extension

B[15:0] = {{8{A[7]}} , A[7:0]}

Ergebnis: A7 A7 A7 A7 A7 A7 A7 A7 A7A6A5A4A3A2A1A0

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

Modul

Modul-DefinitionModul-InstanziierungParallele AusführungZuweisungen

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-34

Modul-Definition

Beispiel

module hadd2(a, b, c, s);input a, b;output c, s;

xor xor1(s, a, b); // assign s = a ^ b;

assign c = a & b;

endmodule

Syntaxmodule modulID ( [ portID {, portID} ] );{ input | output | inout [ [ range ] ]portID {, portID } ; }{ declaration } // Instanziierung von Moduln{ parallel_statement } // initial, always, assignendmodule

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-35

Modul-Instanziierung (Declaration)

Beispiele xor xor1(s, a, b), xor2(t, c, d);

hadd add1(.a(a), .s(sum));

// .formalerParam(aktuellerParam)

SyntaxmoduleID [ #( parameter { , parameter } ) ]

{ instance_name ( port_connections ) , }instance_name ( port_connections ) ;

port_connections ::= [ value ] { , [ value ] } |.port ( value ) {, .port ( value ) }

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-36

Parallele Ausführung allerParallel_Statements eines Moduls

initial sequential_statement

einmalig ausgeführtzur Initialisierung, für seq. Abläufe

always sequential_statement

(Endlos-)Schleife, meist Event-getriggert

assign wireID = expression ;

permanente Zuweisung (Verdrahtung)„continuous assignment“

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

Zuweisungen

continuous assignments (assign)

procedural assignments

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-38

continuous assignments: assign

Verwendung

Unmittelbare Weiterleitung von Signalwerten

Eingänge werden kontinuierlich ausgewertet und der Ausgang wird automatisch aktualisiert

dient der Beschreibung von Schaltnetzen (reine Kombinatorik)

z. B. assign out = in1 | in2;

assign [#delay] wireID = expression ;

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-39

Nur innerhalb „initial“- oder „always“-Blöcken für reg-Variablen zulässig

Zwei Formen

Blockierend, asynchron

regID = expression

Nicht-blockierend, synchron

regID <= expression

procedural assignments

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-40

procedural assignmentsBlockierend, asynchron

regID = expression

Blockierende Zuweisungen erfolgen nacheinander(in der durch den Ablauf vorgegebenen Reihenfolge)

a=3; b=7; a=b; b=a; (Ergebnis: a=b=7)

Anwendung

Zwischenspeichern von temporären Werten, die in der Hardware oftmals Signalen entsprechen.

Beachte: Die Kommentierung solcher reg-Variablen als Hilfsvariablen ist hilfreich für das Verständnis und die Dokumentation der Beschreibung. Dadurch wird die Konfusion mit synchronen Registern vermieden.

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-41

procedural assignmentsNicht-Blockierend, synchron

regID <= expression

Auswertung

(Masterphase) Alle rechten Seiten der Anweisungsgruppe werden quasi-parallel berechnet und zwischen gespeichert.

(Slavephase) Alle zwischen gepeicherten Werte werden quasi-parallel den Registern zugewiesen.

Implizit werden Hilfsvariablen reserviert. Die synchrone Arbeitsweise wird emuliert.

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-42

Beispiel: Vertauschen von Werten

always @(posedge clk) begina <= b;b <= a;

end

Beispiel:

Werte vor dem Takt: a=3, b=7

Werte nach dem Takt: a=7, b=3

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-43

Beispiel: JK-Flipflop

module jkff(clk, j, k, q, _q);

input clk, j, k;

output q, _q;

reg q; // syncreg

initial q = 1'b0;

always @(posedge clk)q <= (j & !q) | (!k & q);

assign _q = !q;

endmodule

_ _Q+ = J.Q + K.Q

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

Statements

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-45

Block

Beispielbegin: Schleife

integer i;for (i=0; i<5; i = i + 1)

end

Syntaxbegin [ : blkID { declaration } ]{ sequential_statement }end

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-46

Bedingte Ausführung: if, case

if ( expr )sequential_statement[ else sequential_statement ]

case | casex | casez ( expr )( expr { , expr } : sequential_statement )[ default: sequential_statement ]endcase

Es wird kein „break“ benötigt!

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-47

Beispiel case, 4-Kanal Multiplexer

module mux4_case(a, b, c, d, select, y, ena);input a, b, c, d, ena; input [1:0] select;output reg y; // tempwire// y ist Hilfsvariable, kein Hardware-Registeralways @(a, b, c, d, select) // bei Änderung von ...

if (ena)case (select)

0: y = a; 1: y = b;2: y = c; 3: y = d;

default: y = 1'bx; // undefinedendcase

else y = 1'bz; // hochohmigendmodule

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-48

Schleifen

forever sequential_statement

for ( assignment; condition_expression;assignment )sequential_statement

while ( condition_expression )sequential_statement

repeat ( amount_expression )sequential_statement

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-49

Timing Control

Delay Verzögerungszeit

Event Ereignis

Wait Warten auf Bedingung, s. Anhang

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-50

Delay Control

Beispiele

b = #8 a; a wird sofort ausgewertet, zwischengespeichert und nach 8 Zeiteinheiten zugewiesen

#8 b = a; erst wird 8 Zeiteinheiten gewartet, dann ausgewertet und zugewiesen

Syntax#delay sequential_statementregID = #delay expr;mit delay ::= number | ( expr )

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-51

Event Control

Ausführung erst nach dem Eintreffen eines Ereignisses

Ereignis:

Wertänderung von (input, inout, wire oder reg)

oder benannter Event

Am Modulbeginn Deklaration event eventID ;

Auslösen durch -> eventID

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-52

Event Control (2)

Warten auf Event, danach ausführen

expr auswerten, nach event zuweisen

Definition event

@ ( event { or event } ) sequential_statement

regID = @ ( event { or event } ) expr ;

event ::= Identifier |[ posedge | negedge ] expr

,

Beispiel: always@(posedge Clock) begin … end

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

Verilog-Beispielprogramme

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-54

Beispiele

Parity

Full Adder

Counter, synchron

Zustandsmaschine Ampel

weitere Beispiele s. Anhang 3

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-55

Modul Parity

module parity (x, odd, even);

input [8:0] x;

output odd, even;

assign odd = ^x; // Exor Reduktion

assign even = ~^x;

endmodule

9

x

odd

even

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-56

Testumgebung Parity

module testbed( );

reg [8:0] I; // Datenspeicher in Umgebung

parity test(I, odd, even); // Instanz

initial beginI=5; #25 I=2; #25; // Testablauf

end

initial #50 $finish; // nach 50 Zeiteinheiten Ende

endmodule

neu

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-57

Halbaddierer HA (Wdh.)

module hadd1(a, b, c, s);input a, b

output c, s; // Signale

assign {c,s} = a + b; // { , } Konkatenation

endmodule

HA

a b

sc

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-58

Volladdierer FA soll aus HAs zusammengesetzt werden

Eingabe drei Bits

Daten (a, b)

Carry-In-Bit (cin)

Ausgabe zwei Bits

Summenbit (s)

Carry-Out-Bit (cout)

FA

a b

scout

cin

HA, HA ?

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-59

Wiederverwendung von Modulen

module VolladdiererFA(a, b, cin, cout, s);

input a, b, cin;output cout, s;

wire s1; wire [1:0] c;

hadd2 a1(a, b, c[1], s1),a2(s1, cin, c[0], s);

assign cout = c[0] | c[1];

endmodule

HA

a b

HA

cin

scout

s1

c[1]

c[0]

FA

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-60

Synchroner Zähler

Eingabe

Clock

Reset

Ausgabe

Zählerzustand (Q), z. B. 2 Bit breit

neu

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-61

Modul Synchroner Zähler

module Counter(Reset, Clock, Q);

input Reset, Clock;

output [1:0] Q;

reg [1:0] Q;

initial Q = 1;

always @(posedge Clock)if (Reset) Q <= 0; else Q <= Q + 1;

endmodule

// output reg [1:0] Q

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-62

TestumgebungSynchroner Zähler

module testbed();reg Reset, Clock; // mem, asynwire [1:0] Q;Counter test (Reset, Clock, Q);initial

repeat (7) beginClock=0; #5 Clock=1; #5; // Taktgeneratorend

initial begin #2 Reset = 1; #10 Reset = 0; endinitial #80 $finish;

endmodule

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-63

Zustandsmaschine/-automat Ampel

module ampel(clk, schalte, rot, gelb, gruen);input clk, schalte; output rot, gelb, gruen;reg [2:0] state; initial state = 3'd0;always @(posedge clk) if (schalte)

case (state)3'b000: state <= 3'b010;3'b010: state <= 3'b101; 3'b101: state <= 3'b011; 3'b011: state <= 3'b000;default state <= 3'b000;endcase

assign {gruen, gelb} = state[2:1];assign rot = !state[0];

endmodule

000

010

101

011

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-64

Verilog 2001

Zusammenfassen von

input x; wire x; input wire x

output y; reg y; output reg y

Deklarationen der Parameter direkt in den Portlisten

module mm(input wire x, output reg y);

task tt(input wire x, ouput wire y);

function ff(input wire x);

Generate: Erzeugung regelmäßiger Strukturen

Sensitivitätsliste

always @(x1 or x2) always @(x1, x2)

Vorzeichenbehaftete Arithmetik: signed

Multidimensionale Felder

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-65

Weitere Informationen

IEEE Standard Verilog® Hardware Description

Language, IEEE Std 1364

Übersichtsblatt (teilweise BNF-Notation)

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-66

Kostenlose Programme

Simulation

Icarus Veriloghttp://sourceforge.net/projects/iverilog/http://icarus.com/eda/verilog/

GTKWavehttp://sourceforge.net/projects/gtkwave/

Synthese

Altera Quartus Web Editionhttp://www.altera.com/

Xilinx ISEhttp://www.xilinx.com/

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-67

Ausgabe mit Icarus und GTKWave

initial begin$dumpfile("ausgabe.vcd");$dumpvars(0);

end

Aufruf:

iverilog meine_datei.v

vvp a.out

winwave ausgabe.vcd (Windows)

gtkwave ausgabe.vcd (X)

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-68

ANHANG 1: Vertiefungen

Konstanten: Zeichenketten

Parameter Statement

Compilerdirektive

Wired And/Or

Vergleichsoperatoren "a == b" und "a === b"

case, casex, casez

Block- oder Taskabbruch

wait, fork, expliziter event

wire-Verzögerungen

Unterprogramme: Task, Function

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-69

Zeichenketten

Durch doppelte Anführungszeichen eingeschlossen

z. B. "Text"

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-70

Parameter Statement

Zuordnung von Konstanten zu symbolischen Namen

parameter identifier = constant_expression ;

Veränderung im aufrufenden Modul mit

moduleID #( alle parameter ) instanz;

defparam instance.identifier =constant_expression ;

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-71

Parametrisierung

module addierer(a, b, s);parameter n = 8;input [n – 1 : 0] a, b;output [n – 1 : 0] s;assign s = a + b;

endmodule

module multiadd(a, b, c, s);input [3 : 0] a, b, c;output [3 : 0] s;wire [3 : 0] s1;addierer #(4) x(a, b, s1), y(c, s1, s);

endmodule

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-72

Compilerdirektive

Deklaration mit `define name wert

Verwendung mit `name(wird ersetzt durch wert)

z. B.

`define schwelle 8

if (zaehler == `schwelle) …

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-73

and, or

and ergibt

0 if mindestens eine 0

1 if beide 1

x sonst

or ergibt

1 if mindestens eine 1

0 if beide 0

x sonst

and 0 1 x z

0 0 0 0 0

1 0 1 x x

x 0 x x x

z 0 x x x

or 1 0 x z

1 1 1 1 1

0 1 0 x x

x 1 x x x

z 1 x x x

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-74

wand, wor

„wired and“ und „wired or“

für Netze mit mehreren Quellen

wand 0 1 x z

0 0 0 0 0

1 0 1 x 1

x 0 x x x

z 0 1 x z

wor 0 1 x z

0 0 1 x 0

1 1 1 1 1

x x 1 x x

z 0 1 x z

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-75

VergleichsoperatorenErgebnisse von "a == b" und "a === b"

a b == ===

0 0 1 1

0 1 0 0

0 'bx 'bx 0

0 'bz 'bx 0

1 0 0 0

1 1 1 1

1 'bx 'bx 0

1 'bz 'bx 0

a b == ===

'bx 0 'bx 0

'bx 1 'bx 0

'bx 'bx 'bx 1

'bx 'bz 'bx 0

'bz 0 'bx 0

'bz 1 'bx 0

'bz 'bx 'bx 0

'bz 'bz 'bx 1

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-76

case, casex, casez

case

exakter bitweiser Vergleich inkl. 'x' und 'z'-Werten

casez

'z'-Werte in der case- und den Vergleichs-Expressions werden als „don't care“ behandelt

casex

'z' und 'x'-Werte werden als „don't care“ behandelt

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-77

Mögliche Werte bei case/casex/casez

die aufgeführten Werte werden als Übereinstimmung gewertet

angegeben ist nur der niedrigste Standard,z. B. bei Icarus ist bei case auch x und z möglich

wenn keine Bedingung zutrifft, wird der default-Teil verwendet

bei expr case casez casex

0 0 0, z 0, x, z

1 1 1, z 1, x, z

x 0, 1, x, z

z 0, 1, x, z 0, 1, x, z

? 0, 1, x, z

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-78

Block- oder Taskabbruch

disable taskID | blockID ;

z. B.

initial begin: clock_loopclock = 0; forever begin

#5 clock=1; #5 clock=0;end end

initial #350 disable clock_loop

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-79

Wait Statement

Erst wenn Auswertung der Bedingung den Wert 'true' ergibt, erfolgt Ausführung

wait ( expr ) sequential_statement

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-80

fork

Sequentielle Blöcke parallel durchführen

Syntax: fork [ : blkID { declaration } ]{ sequential_statement }

join

z. B.

fork // Aufspaltung in 2 threads

begin … end // thread 1

begin … end // thread 2

join // Zusammenführung

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

Unterprogramme

Tasks und Funktionen

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-84

Unterprogramme

Task

Ersatz für prozedurale Anweisungen

Function

Ersatz für einen Ausdruck (expression)

task taskID ;{ input | output | inout [ [ range ] ]

portID { , portID } } ;{ declaration }{ sequential_statement }

endtask

Aufruf: taskID [ ( expr { , expr } ) ] ;

function [ [ range ] | type ] // default: 1 BitfunctionID ;

( input [ [ range ] ] paramID ; ){ declarations }begin

{ sequential_statement |functionID = expr ; }

endendfunction

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-85

Task

Aufruf

innerhalb von always-, initial-Block

nicht innerhalb von assign

Ein-/Ausgabe-Parameter

gleiche Reihenfolge beim Aufruf wie in der Definition

Rekursiver Aufruf ist möglich, jedoch keine automatische Speicherverwaltung (d. h. nur statische Variablen)

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-86

Beispiel Task

Definition: Addition

task add_values;

output c_out;output [3:0] sum;input [3:0] data_a, data_b;input c_in;

begin #5{ c_out, sum } <= data_a + (data_b + c_in);

end

endtask

Aufruf

add_values(cout, s, da, db, cin);

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-87

Function

überall verwendbar

auch im assign-Statement

Deklaration: f(inputs)

inputs, Parameterübergabe: by value

Rückgabe über Zuweisung an Funktionsnamen f

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-88

Einschränkungen für Functions

Function soll in reine Logikfunktion umsetzbar sein

Ausgabe muss „sofort“ verfügbar sein

deshalb nicht erlaubt:

delay control (#)

event control (@)

wait

Rekursion

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-89

Beispiel Function

function [3:0] max;

input [3:0] op_a, op_b;

beginmax = (op_a >= op_b)? op_a : op_b;

end

endfunction

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

ANHANG 2: Simulation

Einstellungen

Ausgabemöglichkeiten

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-91

Testumgebung

wird für die Simulation benötigt, nicht für die Synthese

enthält den zu testenden Modul

enthält Taktgenerator, z.B.

reg clk; initial clk = 1'b1; always #1 clk = !clk;

enthält

Hilfsregister

Initialisierungen

Simulationsablauf (Testablauf) mit Beendigung ($finish)

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-92

Zeiteinheit, Simulation beenden

`timescale simul_zeiteinheit / anzeigetakt

z. B.

`timescale 1ns / 1ns

Verzögerung #2 bedeutet dann 2 ns

$finish

z. B.

initial #500 $finish;

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-93

Ausgabe auf die Konsole

$write ( formatstring { , varID } )

$display ( formatstring { , varID } )

wie $write, mit zusätzlichem Zeilenende

$monitor ( formatstring { , varID } )

bei Änderung einer Variablen erfolgt eine Ausgabe

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-94

Beispiele

Beispiel:$write(" AC hat den Wert %h", ac);

Beobachtung des Signals data

always @(data)$display("Wertaenderung von data: %0b (@%0t) ",

data, $time);

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-95

formatstring

ähnlich wie in C mit %

%b display in binary format

%c display in ASCII character format

%d display in decimal format

%h display in hex format

%o display in octal format

%s display in string format

%t display in time format

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-96

Längenangabe bei formatstring

Ohne Längenangabe

z. B. %b, entsprechend Bitbreite (rechtsbündig)

00101 00101

mit Längenangabe 0

z. B. %0b, linksbündig ohne führende Nullen

00101 101

mit Längenangabe größer Bitbreite: zusätzliche Leerzeichen

z. B. %12b

00101 _______00101

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-97

Externe Daten einlesen

$readmemb("Dateiname_binär",memory [, startadresse [, endadresse]])

$readmemh("Dateiname_hexadezimal",memory [, startadresse [, endadresse]])

Dateiinhalt:

je Adresse ein Zahlenwert der angegebenen Basis

mit Leerzeichen oder Zeilenumbruch voneinander getrennt

Anzahl Einträge muss stimmen!

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-98

Beispiel: Externe Daten einlesen

Verilog-Fragment

reg [7:0] mem [1:5];initial $readmemh("init.txt", mem, 1, 3);

Dateiinhalt init.txt

9 8 4

Ergebnis

mem[1] = 9, mem[2] = 8, mem[3] = 4

mem[4] und mem[5] sind nicht initialisiert

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-99

Datenänderung aufzeichnen

$dumpfile("dateiname.vcd");$dumpvars(level);$dumpon; $dumpoff;mit level ::= 0 | 1

level = 1

nur Variablen des aktuellen Moduls protokollieren

level = 0

alle Variablen (eigene und auch untergeordnete Module) protokollieren

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

ANHANG 3: Weitere Beispiele

Vorwärts/Rückwärts-Zähler

Arithmetic and Logical Unit (ALU) mit Test-Umgebung (FSM)

8-Bit-Tri-State-Bus

Beschreibung einer Volladdierer-Kette

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-101

Vorwärts/Rückwärts-Zähler

Eingabe

Clock (Takt)

Reset (auf Null setzen)

Incr (erhöhe um eins)

Decr (verringere um eins)

Ausgabe

2-Bit-Wert (Z)

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-102

ModulVorwärts/Rückwärts-Zähler

module Counter(Clock, Reset, Incr, Decr, Z);

input Clock, Reset, Incr, Decr;output reg [1:0] Z; // syncreg mit output

always @(posedge Clock) beginif (Reset) Z <= 0;if (Incr) Z <= Z + 1;if (Decr) Z <= Z – 1;

end

endmodule

neu

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-103

Testumgebung Vorwärts/Rückwärts-Zähler

module testbed();

reg Clock, Reset, Incr, Decr;wire [1:0] Z;Counter test(Clock, Reset, Incr, Decr, Z);

initial Clock=0;

always #1 Clock=~Clock;

initial #16 $finish;

initial … // Reset, Incr, Decr: nächste Folie

endmodule

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-104

ZeitdiagrammVorwärts/Rückwärts-Zähler

hier wird Decr interpretiert

initial begin#0 Reset=1; Incr=0; Decr=0;#2 Reset=0; Incr=1; // zählen#4 Decr=1; // Achtung auf die Konfliktmöglichkeit!#2 Incr=0; Decr=1; // … unterschiedliche Interpretationen!end

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-105

Vorwärts/Rückwärts-Zählermit Konfliktauflösung

module Counter(Clock, Reset, Incr, Decr, Z);

input Clock, Reset, Incr, Decr;output [1:0] Z;reg [1:0] Z;

initial Z = 0;

always @(posedge Clock) beginif (Reset) Z <= 0; elseif (Incr) Z <= Z+1; elseif (Decr) Z <= Z-1;

end

endmodule

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-106

Arithmetic and Logical Unit (ALU)

Dateneingänge a, b

Ergebnis y

Operation op

1: y = a

2: y = nand (a, b)

sonst: y = 0

op

a b

y

8 8

2

8

ALU

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-107

Definition der ALU

module alutype(op, a, b, y);

input [1:0] op; //alu functioninput [7:0] a,b;output [7:0] y;

assign y = (op == 1) ? a :(op == 2) ? ~(a & b) : 0;

endmodule

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-108

Test-Umgebung

Aufgabe: alle möglichen ALU-Operationen testen

Input-Operanden

ALUop

a b

y

alu

ra rb

ry

alutype

y:wire

rop

clock

Steuerwerk

state

SteuersignaleMikrooperationen

stop

Test-Umgebung stwrw

sync. Register

Ergebnis

FSM

Operation

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-109

Test-Umgebung: Bausteine und Taktgenerator

module stwrw(); reg [1:0] state;

reg [7:0] ra, rb, ry;wire [7:0] y;reg [1:0] rop;reg stop;

reg clock; // boole

alutype alu(rop, ra, rb, y);

initial begin clock = 0; stop = 0; end

initial #5 repeat (40) #5 clock = !clock;

initial wait (stop) @(posedge clock) $finish;

ALUop

a b

y

alu

ra rb

ry

alutype

y:wire

rop

clock

Steuerwerk

state

SteuersignaleMikrooperationen

stop

Test-Umgebung stwrw

sync. Register

Ergebnis

FSM

Operation

ALUop

a b

y

alu

ra rb

ry

alutype

y:wire

rop

clock

Steuerwerk

state

SteuersignaleMikrooperationen

stop

Test-Umgebung stwrw

sync. Register

Ergebnis

FSM

Operation

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-110

Test-Umgebung: Zustandsautomat (FSM)

initial state = 0; always @(posedge clock) case (state)

0: beginrop<=0; ry<=0; state <= 1;ra <= 2; rb <= ~0; end

1: beginrop<=1; ry<=y; state<= 2; end

2: beginrop<=2; ry<=y; state<= 3; end

3: beginrop<=0; ry<=y; state<= 0; stop<= 1; end

endcase

endmodule

0

1

2

3

rop<=0; ry<=0; ra <= 2; rb <= ~0

rop<=1; ry<=y

rop<=2; ry<=y

rop<=0; ry<=y; stop<= 1

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-111

Die Zustände (Post- und Preconditions)

0

1

2

3

rop<=0; ry<=0; ra <= 2; rb <= ~0

rop<=1; ry<=y

rop<=2; ry<=y

rop<=0; ry<=y; stop<= 1

rop=0: y=0ry=0ra=2rb=11..1rop=1: y=ra=2

ry=0ra=2rb=11..1

rop=2: y=nand(ra,rb)=11..101ry=2ra=2rb=11..1

rop=0: y=0ry=11..101ra=2rb=11..1stop=1

rop=x: y=xry=xra=xrb=xstop=0

x = undefined

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-112

Simulation (Test)

0ns 10ns 20ns 30ns 40ns 50ns

stwrw.state

stwrw.ra

stwrw.rb

stwrw.ry

stwrw.y

stwrw.rop

stwrw.clock

stwrw.stop

0 1 2 3 0

2

FF

0 2 FD

0 2 FD 0

0 1 2 0

stop=0 rop=0: y=0ry=0ra=2rb=11..1

rop=1: y=ra=2ry=0ra=2rb=11..1

rop=2: y=11..101

ry=2ra=2rb=11..1

rop=0: y=0ry=11..101ra=2rb=11..1stop=1

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-113

Beispiel 8-Bit-Tri-State-Bus

module bustreiber(bus, send, dout, out);

inout [7:0] bus;

input send;

input [7:0] dout;

output [7:0] din;

assign bus = send? dout : 8'bzzzzzzzz;

assign din = bus;

endmodule

send

dout

din bus

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-114

Beschreibung einer Volladierer-Kette

Volladdierer aus Primitiven

Vier-Bit-Addierer, aus 4 FA

Generierung von Hardware-Strukturen

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-115

Modul Volladdierer aus Primitiven

module fulladder(sum, c_out, x, y, c_in);

output sum, c_out;input x, y, c_in;wire a, b, c;

xor (a, x, y); // bei den vor-xor (sum, a, c_in); // definierten Gatter-and (b, x, y); // primitiven sindand (c, a, c_in); // keine Bezeichneror (c_out, c, b); // notwendig

endmodule

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-116

Vier-Bit-Addierer, aus 4 FA

module FourBitAdder (sum, c_out, x, y, c_in);

output [3:0] sum;output c_out;input [3:0] x, y;input c_in;wire c1, c2, c3;

fulladder fa0(sum[0], c1, x[0], y[0], c_in);fulladder fa1(sum[1], c2, x[1], y[1], c1);fulladder fa2(sum[2], c3, x[2], y[2], c2);fulladder fa3(sum[3], c_out, x[3], y[3], c3);

endmodule

Tech

n.

Gru

ndla

gen d

er

Info

rmatik 2

, SS 0

9,

R. H

offm

ann, TU

D

V-117

Generierung von Hardware-Strukturen

module NBitAdder #(parameter n = 4)(input [n : 1] a, input [n : 1] b, output c, output [n : 1] s);

wire [n : 0] carry;

assign carry[0] = 0;

generate genvar i;for (i = 1; i <= n; i = i + 1) begin: fulladder_chain

fulladder fa(a[i], b[i], carry[i – 1], carry[i], s[i]);

end

endgenerate

assign c = carry[n];

endmodule


Recommended