36
Intelligent Systems Design Verilog Einführung Hardware Description Language (HDL) Prof. Dr.-Ing. Michael Karagounis Sommersemester 2016 Elektrotechnik

Hardware Description Language (HDL) - fh-dortmund.de · Intelligent Systems Design Verilog Einführung Hardware Description Language (HDL) Prof. Dr.-Ing. Michael Karagounis Sommersemester

  • Upload
    buingoc

  • View
    245

  • Download
    0

Embed Size (px)

Citation preview

Intelligent Systems Design

Verilog

Einführung

Hardware Description Language (HDL)

Prof. Dr.-Ing. Michael Karagounis

Sommersemester 2016

Elektrotechnik

HDL Konzept

Was ist eine Hardwarebeschreibungssprache ?

04.06.2018 Folie 2VERILOG HDL Kurzeinführung

HDL Konzept

• Textueller Entwurf von digitaler Hardware

• Netzliste (Gatter – Ebene)

• Logische Operationen (Datenfluss - Ebene)

• Algorithmen (Prozedurale - Ebene)

04.06.2018 VERILOG HDL Kurzeinführung Folie 3

HDL Konzept

Aus welchem Grund verwendet man Hardwarebeschreibungssprachen ?

04.06.2018 VERILOG HDL Kurzeinführung Folie 4

Übersichtlichkeit

Komplexe Schaltpläne sind schwer zu lesen

04.06.2018 VERILOG HDL Kurzeinführung Folie 5

Simulation

HDL Modelle können simuliert und verifiziert werden

04.06.2018 VERILOG HDL Kurzeinführung Folie 6

Synthese

• Abbildung des HDL-Model auf eine reelle Schaltung.

• Erzeugung einer Netzliste aus Standardzellen der verwendeten Technologie.

• Umstieg auf eine andere ASIC Technologie oder einen anderen FPGA Hersteller erfordert keine Veränderung des Models sondern nur einen neuen Synthesedurchlauf.

HDL Modelle können in eine Gatternetzliste gewandelt werden

04.06.2018 VERILOG HDL Kurzeinführung Folie 7

Place & Route

Nach der Synthese kann automatisiert ein Layout der Schaltung erstellt werden

04.06.2018 VERILOG HDL Kurzeinführung Folie 8

Gängige HDL

• VERILOG

• 1983 Gateway Design Automation (Cadence)

• VHDL (Very High Speed Integrated Circuit HDL)

• 1985 U.S. Department of Defense

• SystemC

• 1999 OSCI (Open SystemC Initiative)

04.06.2018 VERILOG HDL Kurzeinführung Folie 9

Aufbau eines VERILOG Moduls

module and(inI, inII, out); input inI;inout inII;output out;...endmodule

Definierung der Schnittstelle

04.06.2018 VERILOG HDL Kurzeinführung Folie 10

Gatter Ebene (Netzliste)

Verbindung der Ports• nach der Reihenfolge• durch Portnamen

module nand(in1, in2, out); input in1;input in2;output out;

wire help;

and na_und (in1, in2, help);// and na_und(.inii(in2), .inI(in1), .out(help));not nicht (help,out)

endmodule

module and(inI, inII, out); input inI;input inII;output out;...endmodule

module not(in, out); input in;output out;...endmodule

04.06.2018 VERILOG HDL Kurzeinführung Folie 11

Datenflussebene

• Signal out ist UND-Verknüpfung von in1 und in2• Ändert sich inI oder inII wird auch out aktualisiert

Höherer Abstraktionsgrad• keine explizite Gatter - Instanziierung• stattdessen Benutzung von Operatoren

module and(in1, in2, out); input in1;input in2;output out;

assign out = in1 & in2 ;

endmodule

04.06.2018 VERILOG HDL Kurzeinführung Folie 12

Logische Operatoren

! Negation

&& UND

|| ODER

04.06.2018 VERILOG HDL Kurzeinführung Folie 13

Bitweise Operatoren

~ Negation

& UND

| ODER

^ XOR

>> Rechts schieben

<< Links schieben

04.06.2018 VERILOG HDL Kurzeinführung Folie 14

Unterschied zwischen logischen & bitweisen Operatoren

wire [3:0] in1;wire [3:0] in2;wire out1;wire [3:0] out2;

assign in1=4´b0101;assign in2=4´b0110;

assign out1 = in1 && in2;// out1==1

assign out2 = in1 & in2;//out2==4´b0100

04.06.2018 VERILOG HDL Kurzeinführung Folie 15

Arithmetische Operatoren

04.06.2018 VERILOG HDL Kurzeinführung Folie 16

Symbol Operation

* Multiplikation

/ Division

+ Addition

- Subtraktion

% Modulo

Relationale Operatoren

04.06.2018 VERILOG HDL Kurzeinführung Folie 17

== Gleichheit

!= Ungleichheit

> Größer als

< Kleiner als

>= Größer gleich

<= Kleiner gleich

Konkatinierungsoperator { }

04.06.2018 VERILOG HDL Kurzeinführung Folie 18

wire [3:0] in1;wire [3:0] in2;wire [7:0] out;

assign in1=4´b0101;assign in2=4´b0110;

assign out= {in1,in2};// out=8´b0101_0110

Always Block

• für prozedurale Algorithmen

• für Speicherelemente Latch FlipFlop

• kein assign bei Zuweisungen

• blocking assignment

• nonblocking assignment

•Zuweisungen nur auf Typ reg möglich

04.06.2018 VERILOG HDL Kurzeinführung Folie 19

module immer(in1,in2, out);input in1;input in2;output out;

reg out;

always @(in1 or in2)beginout=in1 & in2;//out<= in1 & in2;

end

endmodule

if Statement

reg [7:0] blabla;

always @(blub or ende)beginif(blub==8‘d255)

blabla=0;else if ( ende)

blabla=8‘hfa;else

blabla=8‘b0101_0110;end

04.06.2018 VERILOG HDL Kurzeinführung Folie 20

case- Statement

reg [7:0] blabla;

always @(s1 or s2)begin

case({s1,s2})2‘b01: blabla=8‘d1;2‘b10: blabla=8‘d127;default: blabla=8‘d0;

endcaseend

04.06.2018 VERILOG HDL Kurzeinführung Folie 21

for Schleife

reg [7:0] blabla;reg [3:0] i;

alwaysbegin

for(i=0; i<8 ; i=i+1)blabla=blabla >> 1;

end

04.06.2018 VERILOG HDL Kurzeinführung Folie 22

Latch

module latch(en,in,out);input en;input in;output out;

reg out;

always @(en or in)if(en)out=in;

//else//out=out;

endmodule

Unvollständige Sensitivity list führt zu Speicherelement.

always Block wird nur dann durchlaufen, wenn sich das Signal en oder das Signal in ändert.

Die Speicherung wird durch die if Abfragebeschrieben.

04.06.2018 VERILOG HDL Kurzeinführung Folie 23

Flip-Flop

module flipiflopi(clk,rst,in,out);input clk;input rst;input in;output out;

reg out;

always @(posedge clk or negedge rst)if(!rst)out=0;

elseout=in;

endmodule

Ausführung nur bei positiver

bzw. negativer Taktflanke

Realisierung taktflankengesteuerte Bauteile

Modellierung von Reset und Preset möglich

Man kann entweder nur level-sensitive odernur flanken-sensitive always Blöckerealisieren.

Ab Verilog-2001 ist die gleichzeitige Nutzung von flanken und pegelsensitiven Signalen in der Sensitivity List möglich

04.06.2018 VERILOG HDL Kurzeinführung Folie 24

Register aus 8 Flip-Flops

module flipiflopi(clk,rst,in,out);input clk;input rst;input [7:0] in;output [7:0] out;

reg [7:0] out;

always @(posedge clk or negedge rst)if(!rst)out=0;

elseout=in;

endmodule

04.06.2018 VERILOG HDL Kurzeinführung Folie 25

Unterschied blocking/nonblocking Assignment

module flipiflopi(clk,rst,in,out1);input clk;input rst;input [7:0] in;output [7:0] out1;reg [7:0] out1;reg [7:0] out2;

always @(posedge clk or negedge rst)if(!rst)beginout1=0;out2=0

endelsebeginout1=in;out2=out1;

endendmodule

Mit der nächsten Taktflanke

Erhält out1 den Wert von inund out2 den aktuellen Wert

out1 d.h. den Wert von in.

Fall 1: Blocking assignments

04.06.2018 VERILOG HDL Kurzeinführung Folie 26

Unterschied blocking/nonblocking assignment

module flipiflopi(clk,rst,in,out1);input clk;input rst;input [7:0] in;output [7:0] out1;reg [7:0] out1;reg [7:0] out2;

always @(posedge clk or negedge rst)if(!rst)beginout1<=0;out2<=0

endelsebeginout1<=in;out2<=out1;

endendmodule

Mit der nächsten Taktflanke erhält out1 den Wert von in und out2 den alten Wert von out1 d.h. den Wert den out1 vor der Taktflanke hatte.

Man darf in einem always Block entwedernur nonblocking oder nur blocking assignments benutzen.

Fall 2: Non-blocking assignments

04.06.2018 VERILOG HDL Kurzeinführung Folie 27

Beispiel: 8 Bit Parallel/Seriell Wandler

module p2s(clk,rst,mode,in,out);input clk;input rst;input [1:0] mode;input [7:0] in;output out;

reg [7:0] sreg;

assign out=sreg[0];...

Hilfssignal sreg stellt eigentliches Register da.

Letztes Bit wird dem Ausgang zugewiesen.

...always @ (posedge clk or negedge rst)if(!rst)sreg=0;

else case (mode)2‘b01: sreg=in;2‘b10: sreg=sreg >> 1;default: sreg=sreg;

endcase

endmodule

• Laden

• Schieben

• Halten

04.06.2018 VERILOG HDL Kurzeinführung Folie 28

Beispiel: FSM (Finite State Machine)

04.06.2018 VERILOG HDL Kurzeinführung Folie 29

Beispiel: FSM (Finite State Machine)

module fsm(clk, rst, nack, next, ready, bla, blub, ok);input clk;input rst;input nack;input next;input ready;output bla;output blub;output ok;reg bla;reg blub;reg ok;parameter [1:0] s0 = 2'd0 , s1 = 2'd1 , s2 = 2'd2 ;reg [1:0] current_state, next_state ;...

04.06.2018 VERILOG HDL Kurzeinführung Folie 30

Beispiel: FSM (Finite State Machine)

...always @(current_state or nack or next or ready) begin

case (current_state)s0:begin

if (next)next_state = s1;

elsenext_state = s0;

ends1:begin

if (!nack)next_state = s2;

elsenext_state = s1;

ends2:begin

if (ready)next_state = s0;

elsenext_state = s2;

enddefault: next_state = s0;

endcaseend

Ermittlung des nächsten Zustandes

04.06.2018 VERILOG HDL Kurzeinführung Folie 31

Beispiel: FSM (Finite State Machine)

always @(current_state)begincase (current_state)

s0: bla=1'b1;s1: blub=1'b1;s2: ok=1'b1;

endcaseend

Zuweisung der Ausgangswerte in jedem Zustand

Problem: Erzeugung von nicht gewollten Latches.

04.06.2018 VERILOG HDL Kurzeinführung Folie 32

Beispiel: FSM (Finite State Machine)

always @(current_state)begin

case (current_state)s0: begin

bla=1'b1;blub=0;ok=0;

ends1: begin

bla=0;blub=1'b1;ok=0;

ends2: begin

bla=0;blub=0;ok=1’b1;

endendcase

end

In jedem Zweig müssen alle Variablen einen Wert erhalten.

04.06.2018 VERILOG HDL Kurzeinführung Folie 33

Beispiel: FSM (Finite State Machine)

always @(current_state)begin

bla=0;blub=0;ok=0;

case (current_state)s0: bla=1'b1;s1: blub=1'b1;s2: ok=1'b1;

endcaseend

Eine Alternative ist die Benutzung von Default Werten.

Der als letztes zugewiesene Werte ist gültig.

04.06.2018 VERILOG HDL Kurzeinführung Folie 34

Beispiel: FSM (Finite State Machine)

always @( posedge clk or negedge rst) begin

if (!rst)current_state = s0;

elsecurrent_state = next_state;

end

• getakteter Block

• Speichert den aktuellen Zustand

• Übernimmt mit der positiven Flanke denneuen Zustand

04.06.2018 VERILOG HDL Kurzeinführung Folie 35

VERILOG

• Literatur

• Samir Palniktar: Verilog HDL A Guide to Digital Synthesis

• http://www.sutherland-hdl.com

04.06.2018 VERILOG HDL Kurzeinführung Folie 36