Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Verilog

Verilog Assign Statements: Kontinuierliche Signalzuweisung erklärt

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 kontinuierlich mit Wert getrieben (Konstante oder Expression aus Signalen).

Assign Syntax

assign  = [drive_strength] [delay] ;

Regeln

Beispiel #1: Einfaches AND-Gatter

Net out wird kontinuierlich durch i1 & i2 getrieben. Synthese → RTL-Schema mit AND-Gatter.

assign Statements eignen sich ideal für kombinatorische Gatter in Verilog.

Beispiel #2: Komplexe Concatenation & Part-Select

Modul mit 4-Bit Input x, 1-Bit y, 5-Bit Output z. Verschiedene Assign-Cases (nur einer aktiv, sonst Contention → X):

module xyz (input [3:0] x, input y, output [4:0] z);
    wire [1:0] a; wire b;
    // x='hC, y='h1 → z='b11001 (0x19)
    assign z = {x, y};              // Case 1: Concat 5 Bit → z
    assign z[3:1] = {x, y};         // Case 2: Nur z[3:1] getrieben, z[4],z[0] = Z
    assign z[3:1] = {x, y}; assign z[4] = 1; // Case 3: z[4]=1 → z='b1001Z
    assign z[3:1] = {x, y}; assign z[3] = 0; // Case 4: Zwei Driver für bit3, beide 0 → OK, z='bZ001Z
    assign z[3:1] = {x, y}; assign z[3] = 1; // Case 5: Zwei Driver, unterschiedliche Werte → Contention, z='bZX01Z
    assign z = {x[1:0], y};         // Case 6: Part-Select RHS → z='b00001
    assign z[2:0] = {x[1:0], y};    // Case 7: Nur z[2:0] → z='bZZ001
    assign z = {3{y}};              // Case 8: Replication 3{y} = {y,y,y} → z='b00111
    assign {a, b} = {x, y};         // Case 9: LHS Concat: a=2bit, b=1bit, RHS=5bit → LSBs: a='b00, b='b1
    assign {a, b} = {x, y};         // Case 10: LHS Reihenfolge umgekehrt → a='b01, b='b0
endmodule

Assign auf reg Variablen

Illegal: reg Typ Variablen mit assign treiben. reg speichert Daten, braucht keine kontinuierliche Treibung. reg Signals nur in Prozeduralblöcken (initial, always) treibbar.

Implizite Continuous Assignment

Explizit: wire [1:0] a; assign a = x & y;

Implizit (bei Deklaration): wire [1:0] a = x & y;

Kombinatorische Logik Design

Digitaler Schaltkreis aus kombinatorischen Gattern + Verilog Code.

module combo (input a,b,c,d, output o);
    assign o = ~((a & b) | c ^ d);
endmodule

Kombinatorik erfordert kontinuierliches Treiben der Inputs (anders als sequenzielle Elemente wie FFs, die Werte an Clock-Flanke speichern). assign passt perfekt: Output o aktualisiert bei jeder RHS-Änderung.

Synthese → kombinatorischer Schaltkreis. Waveform: o wird 1 wenn RHS true, 0 wenn false. 0-10ns: Inputs X → Output X.

Verilog

  1. C# Switch Statement meistern: Syntax, Beispiele & Best Practices
  2. C# Break Statement: Wie und wann man es einsetzt
  3. C# Continue Statement meistern: Schleifeniterationen effektiv überspringen
  4. Verilog Concatenation meistern: Praktischer Leitfaden
  5. Verilog Assignments verstehen: Typen, Syntax und Best Practices
  6. Verilog Blocking vs. Non-Blocking: Wichtige Unterschiede erklärt
  7. Verilog Functions meistern für effizientes RTL-Design
  8. Verilog Tasks verstehen: Functions vs. Tasks, Syntax und Verwendung
  9. Verilog Clock Generator: Design & Implementierungsleitfaden
  10. Verilog Math Functions meistern für effizientes Hardware-Design