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
Verilog-Statements werden in Simulationssequenziell ausgeführt, platziert in prozeduralen Blöcken. Zwei Haupttypen: initial und always. Syntax initial [single statement] initial begin [multiple statements] end Wofür wird initial Block genutzt? Nicht synthetisierbar → kein Hardware-Schema. Zweck: Si
Vorheriger Artikel zeigte kombinatorische Logik mit always. Hier: Sequenzielle Logik mit Speicherelementen (Flipflops). JK Flipflop Speichert Werte, 2 Data Inputs j, k, Reset rstn, Clock clk. Wahrheitstabelle: rstnjkqKommentar 0000Reset asserted → Output 0 100Holdj=k=0 → Output unverändert 1011k=1
Der always Block eignet sich für sequenzielle und kombinatorische Logik. Frühere Beispiele nutzten assign; hier dieselben Designs mit always. Beispiel #1: Einfache kombinatorische Logik Output z als reg, aktualisiert bei Änderung in Sensitivity List. module combo (input a,b,c,d,e, output reg z);
Ein always Block ist einer der prozeduralen Blöcke in Verilog. Statements darin werden sequenziell ausgeführt. Syntax always @ (event) [statement] always @ (event) begin [multiple statements] end Ausführung bei definiertem Event. Event wird durch Sensitivity List definiert. Was ist die Sensitivity
Multi-Bit Verilog Wires/Variables können zu größeren Multi-Net Wires/Variables vereint werden mittels Concatenation Operatoren { und }, durch Kommas getrennt. Erlaubt auch Expressions und Sized Constants als Operanden. Größe jedes Operanden muss bekannt sein, um Gesamtgröße zu berechnen. Concatenati
Datenverarbeitung erfordert Berechnungen in digitalen Schaltungen. Verilog-Operatoren ermöglichen Synthese-Tools, passende Hardware-Elemente zu generieren. Arithmetische Operatoren OperatorBeschreibung a + bAddition a - bSubtraktion a * bMultiplikation a / bDivision (2. Operand 0 → X) a % bModulo (
Der Verilog assign Statement treibt kontinuierlich wire Signale und synthetisiert zu kombinatorischer Logik. Weitere Design-Beispiele: Beispiel #1: Einfache kombinatorische Logik module combo (input a,b,c,d,e, output z); assign z = ((a & b) | (c ^ d) & ~e); endmodule Synthese → Hardware-Schema
Signale vom Typ wire (oder ähnliche wire-ähnliche Datentypen) erfordern kontinuierliche Wertzuweisung. Analogie: Elektrischer Draht auf Breadboard – solange +5V an einem Ende anliegen, bekommt das Bauteil am anderen Ende die Spannung. In Verilog realisiert das assign Statement dies: wire wird kontin
Komplexe Designs entstehen durch hierarchische Integration mehrerer Module. Module werden in anderen Modulen instanziiert; Ports der Instanzen werden mit Signalen im Parent-Modul verbunden. Zwei Verbindungsmethoden: Geordnete Liste (Ordered List) und Benannte Verbindung (Named Connection). Port Conn
Ports sind Signale, die als Inputs/Outputs eines Moduls fungieren – die primäre Kommunikationsschnittstelle. Analogie: Modul = fertiger Chip auf PCB, Ports = Pins, nur Weg zur Außenwelt. Port-Typen PortBeschreibung InputModul empfängt Werte von außen OutputModul sendet Werte nach außen InoutBidirek
Ein module ist ein Block Verilog-Code, der eine bestimmte Funktionalität implementiert. Module können in andere Module eingebettet werden; ein höheres Modul kommuniziert mit niedrigeren über Input/Output-Ports. Syntax Ein Modul wird von module und endmodule umschlossen. Name folgt direkt auf module,
Ein Array-Deklaration eines Nets oder Variables kann Scalar oder Vector sein. Beliebig viele Dimensionen durch Adressbereich nach dem Identifiernamen → Multi-Dimensional Arrays. Erlaubt für reg, wire, integer, real. reg y1 [11:0]; // Scalar reg Array, Tiefe=12, je 1 Bit wire [0:7] y2 [3:0]
Verilog muss einzelne Bits und Bitgruppen darstellen. Ein einzelnes sequenzielles Element = Flipflop (1 Bit). 16-Bit-sequenzielles Element = Register (16 Bits). Dafür gibt es scalar und vector Nets und Variables. Scalar und Vector Net oder reg ohne Bereichsangabe = 1 Bit breit = Scalar. Mit Bereichs
Der Hauptzweck von Datentypen in Verilog ist die Repräsentation von Datenspeicherelementen (Bits in Flipflops) und Übertragungselementen (Wires, die Logikgatter und sequenzielle Strukturen verbinden). Welche Werte können Variablen annehmen? Fast alle Datentypen können nur einen von vier Werten anneh
Lexikalische Konventionen in Verilog ähneln C: Ein Strom von Tokens. Ein Token besteht aus einem oder mehreren Zeichen und kann Kommentare, Keywords, Zahlen, Strings oder Whitespace sein. Alle Zeilen müssen mit Semikolon ; enden. Verilog ist case-sensitive: var_a und var_A sind unterschiedliche Beze
Bevor wir tiefer in Verilog eintauchen, ist es hilfreich, die verschiedenen Abstraktionsschichten im Chip-Design zu verstehen. Die oberste Schicht ist die System-Level-Architektur, die Sub-Blöcke definiert und nach Funktionalität gruppiert. Beispiel: Ein Prozessor-Cluster mit mehreren Cores, Cache-B
Ein typischer Design-Flow folgt der unten dargestellten Struktur und lässt sich in mehrere Schritte unterteilen. Einige Phasen laufen parallel, andere sequenziell. Schauen wir uns an, wie ein typischer Projekt-Design-Zyklus in der Industrie heute aussieht. Anforderungen (Requirements) Der Kunde eine
In den Anfängen integrierter Schaltungen mussten Ingenieure Transistoren und ihre Verbindungen manuell auf Papier zeichnen, um sie für die Siliziumfertigung zu designen. Größere und komplexere Schaltungen erforderten mehr Ingenieure, Zeit und Ressourcen – bald wurde ein besserer Weg nötig. VHDL wurd
Verilog ist eine Hardware Description Language (HDL), die Ingenieure befähigt, digitale Logik für FPGAs und ASICs zu modellieren, simulieren und synthetisieren. Neben seinem nahen Verwandten VHDL ist Verilog die Industriestandard-Sprache für sowohl akademische Curricula als auch kommerzielle Produkt
Verilog