Verilog Essentials: Kurzer Überblick
Verhaltenscode steht immer in module/endmodule. Jedes Digitaldesign geht in einen module Block. Ports optional: input (Signale rein), output (Signale raus).
Modul
Leeres Modul testbench. Name: alphanumerisch + _.
module testbench; endmodule
Modul mit Ports: Inputs d, clk, rstb, Output q.
module dff (input d, clk, rstb, output q); endmodule
Datentypen
Primär zwei Typen: reg (hält Werte wie Variable) und wire (elektrischer Draht-Analogie, muss kontinuierlich getrieben werden). wire verbindet Module/Signale.
module testbench;
reg d, rst_b, clk;
wire q;
endmodule
Assignments
Drei Basis-Blöcke:
always @ (condition) | Ausführung bei Condition |
initial | Einmalig bei Simulationsstart |
assign LHS = RHS | LHS aktualisiert bei RHS-Änderung |
Regeln:
regnur ininitial/alwayszuweisbarwirenur viaassignzuweisbar- Mehrere Statements in
initial/always→begin ... end
module testbench;
reg d, rst_b, clk; wire q;
initial begin
d = 0; rst_b = 0; clk = 0;
#100 $finish;
end
always begin
#10 clk = ~clk;
end
endmodule
Beobachtungen:
- Multiple Lines →
begin/end regSignale ininitialzugewieseninitialläuft bei 0nsalwaysohne Condition → Endlosschleife (wiewhile(1)in C)#= Time Delay.#10= 10 Zeit-Einheiten wartenclk = ~clktoggelt Clock alle 10 Einheiten$finishbeendet Simulation nach 100 Einheiten
Verilog
- Verilog meistern: Komplettes Tutorial für digitales Schaltungsdesign
- Verilog Concatenation meistern: Praktischer Leitfaden
- Verilog Assignments verstehen: Typen, Syntax und Best Practices
- Verilog Blocking vs. Non-Blocking: Wichtige Unterschiede erklärt
- Verilog Functions meistern für effizientes RTL-Design
- Verilog Tasks verstehen: Functions vs. Tasks, Syntax und Verwendung
- Verilogs hierarchischen Referenz-Gültigkeitsbereich meistern: Namenskonflikte in Modulen und Blöcken vermeiden
- Verilog Clock Generator: Design & Implementierungsleitfaden
- Verilog Math Functions meistern für effizientes Hardware-Design
- Verilog $timeformat meistern: Präzision und Anzeigesteuerung