Verilog
, standardisiert als
IEEE 1364
, ist eine
Hardwarebeschreibungssprache
, die fur die Modellierung mikroelektronischer Systeme (
VLSI
) verwendet wird.
[1]
Verilog
ist neben
VHDL
die weltweit meistgenutzte Hardwarebeschreibungssprache zum Entwerfen von Computerchips (
ASICs
,
FPGAs
).
Verilog wurde 1983/84 von
Phil Moorby
bei
Gateway Design Automation
ursprunglich als
Simulationssprache
entworfen. Der zweite wichtige Einsatzbereich ist die
Synthese
digitaler Schaltungen. Gateway Design Automation wurde 1990 von
Cadence Design Systems
aufgekauft. Cadence war nun Besitzer der Rechte an Verilog und des Logiksimulators Verilog-XL.
Parallel zu Verilog wurde die Beschreibungssprache VHDL immer popularer, und Cadence entschied 1995, Verilog in einen freien Standard umzuwandeln, verwaltet von der Organisation Open Verilog International (OVI, auch bekannt als Accellera). Verilog wurde beim
IEEE
eingereicht und im selben Jahr als IEEE Standard 1364?1995 (Verilog-95) verabschiedet.
Durch Zusammenfuhren von Verilog-A (Modellierungssprache fur analoge Schaltungen) und Verilog zu Verilog-AMS steht seit 1998 (erste Version) auch eine relativ leistungsfahige Sprache fur Analog/Mixed-Signal-Designs zur Verfugung. Fur den Analogbereich stehen jedoch keine Synthese-Tools zur Verfugung. Fur den Digitalbereich lieferte Synopsys bereits 1988 ein Synthese-Werkzeug fur Verilog aus.
Aufgrund von Einschrankungen, die von den Nutzern bemangelt wurden, veroffentlichte die IEEE im Jahr 2001 eine Erweiterung des Standards unter der Bezeichnung IEEE Standard 1364?2001, bekannt als Verilog 2001.
Im Juni 2002 erschien
SystemVerilog
3.0, eine Erweiterung fur den IEEE Standard 1364?2001. Mit SystemVerilog war es nun moglich, Hardware nicht nur zu beschreiben, sondern auch elegant zu verifizieren. Verilog wurde somit durch SystemVerilog zur ersten Hardware-Beschreibungs- und Verifikationssprache (
englisch
Hardware Description and Verification Language
, kurz
HDVL
genannt). Auch in den letzten Jahren wurden standig Spracherweiterungen vorgenommen.
Verilog erlaubt es,
Hardware
(z. B.
ICs
) auf einer hoheren Abstraktionsebene zu beschreiben, als es mit einem Schematic-Entry-Programm moglich ware. Die Architektur, das Verhalten und niedrigere Abstraktionslevel auf
Gatterebene
konnen beschrieben werden.
Beispiel fur ein
Und-Gatter
(
and gate
)
// Dies ist ein Verilog HDL Kommentar
// Deklaration der Variablen als einfache Leitung
wire
result
,
a
,
b
;
// Es gibt 3 Varianten, um ein (bitweises) UND-Gatter zu beschreiben
// Moglichkeit 1
assign
result
=
a
&
b
;
// kontinuierliche Zuweisung
// Moglichkeit 2
and
instanzname
(
result
,
a
,
b
);
// Instanzierung eines vorhandenen Moduls (hier ein eingebautes primitive)
// Moglichkeit 3
always
@(
a
or
b
)
// Verhaltensbeschreibung
//reagiert auf jede Anderung von a oder b (Bei kombinatorischer Logik)
begin
result
=
a
&
b
;
end
always
@(
a
or
b
)
// alternative Verhaltensbeschreibung
//reagiert auf jede Anderung von a oder b (Bei kombinatorischer Logik)
begin
if
(
a
)
then
result
=
b
;
else
result
=
1
'b0
;
end
Beispiel fur eine Verhaltensbeschreibung eines
Flipflops
(synthetisierbar)
// Deklarationen
reg
register_value
;
// als Register oder Speichervariable
wire
reset
,
clock
,
set
,
en
,
datain
;
// als Leitung
// Flipflop mit asynchronem Rucksetzen, synchronem Setzen und synchronem Enable
always
@(
posedge
clock
or
negedge
reset
)
begin
// Register reagiert auf positive clock-Flanke oder fallende reset-Flanke.
if
(
!
reset
)
//asynchrones Rucksetzen, wenn reset = LOW
register_value
<=
1
'b0
;
else
if
(
set
)
// synchrones Setzen, wenn set = HIGH
register_value
<=
1
'b1
;
else
if
(
en
)
// synchrones Ubernehmen des Wertes von datain, wenn en = HIGH
register_value
<=
datain
;
end
Neben den Beschreibungsmoglichkeiten fur Hardware bietet Verilog auch Merkmale aus anderen Sprachen, die z. B. fur das Debugging oder fur die Bereitstellung einer Testumgebung genutzt werden konnen. So ist es beispielsweise moglich, Textmeldungen auszugeben.
module
hello
;
// Module Deklaration mit dem Schlusselwort "module" <name>;
initial
$display
(
“
Hallo
Welt
“
);
// Einmalig ausfuhren, $display ist vergleichbar mit printf in C
endmodule
// Module ende Deklaration mit dem Schlusselwort endmodule
- ↑
Brock J. LaMeres:
Introduction to Logic Circuits & Logic Design with Verilog
. Springer International Publishing, Cham 2019,
ISBN 978-3-03013604-8
,
doi
:
10.1007/978-3-030-13605-5
(englisch,
springer.com
[abgerufen am 29. Dezember 2022]).