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

Verilog Ring Counter Modul: Design & Testbench Beispiel

Design

Ein Ring Counter (Ringzähler) ist ein Schieberegister, bei dem der Ausgang des letzten Flip-Flops mit dem Eingang des ersten verbunden ist. Dadurch zirkuliert ein einzelnes Bit (oder ein Bitmuster) kontinuierlich durch die Registerkette. Der folgende parameterisierte Verilog-Code implementiert einen 4-Bit-Ring-Counter mit aktiv-tiefem, synchronem Reset.

module ring_ctr #(parameter WIDTH = 4) (
    input  logic        clk,
    input  logic        rstn,
    output logic [WIDTH-1:0] out
);

always_ff @(posedge clk) begin
    if (!rstn) begin
        out <= 1;                    // Initialisierung: nur LSB gesetzt
    end else begin
        out[WIDTH-1] <= out[0];      // MSB erhält LSB (Rückkopplung)
        for (int i = 0; i < WIDTH-1; i++) begin
            out[i] <= out[i+1];      // Schiebeoperation nach links
        end
    end
end

endmodule

Testbench

Die Testbench erzeugt einen Takt mit 20 ns Periodendauer, hält den Reset für zwei Takte aktiv und beobachtet dann 15 weitere Takte das Ausgangssignal.

module tb;
    parameter WIDTH = 4;
    logic clk, rstn;
    logic [WIDTH-1:0] out;

    ring_ctr #(.WIDTH(WIDTH)) u0 (
        .clk  (clk),
        .rstn (rstn),
        .out  (out)
    );

    always #10 clk = ~clk;

    initial begin
        clk  = 0;
        rstn = 0;
        $monitor("T=%0t out=%b", $time, out);
        repeat (2) @(posedge clk);
        rstn = 1;
        repeat (15) @(posedge clk);
        $finish;
    end
endmodule

Simulationsergebnis

Der Zähler durchläuft die Sequenz 0001 → 1000 → 0100 → 0010 → 0001 … und wiederholt sich alle 4 Takte.

ncsim> run
T=0   out=xxxx
T=10  out=0001
T=50  out=1000
T=70  out=0100
T=90  out=0010
T=110 out=0001
...
Simulation complete via $finish(1) at time 330 NS

Verilog

  1. Verilog meistern: Komplettes Tutorial für digitales Schaltungsdesign
  2. Verilog Concatenation meistern: Praktischer Leitfaden
  3. Verilog Assignments verstehen: Typen, Syntax und Best Practices
  4. Verilog Blocking vs. Non-Blocking: Wichtige Unterschiede erklärt
  5. Verilog Functions meistern für effizientes RTL-Design
  6. Verilog Tasks verstehen: Functions vs. Tasks, Syntax und Verwendung
  7. Verilog Clock Generator: Design & Implementierungsleitfaden
  8. Verilog Math Functions meistern für effizientes Hardware-Design
  9. Verilog Mod-N Counter Design: Parameterisiertes Modul & Testbench
  10. Verilog Gray Counter Modul – 4-Bit Gray-Code Generator