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
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)
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