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

Verilog Mod-N Counter Design: Parameterisiertes Modul & Testbench

Design

Ein Mod-N-Zähler zählt von 0 bis N-1 und springt dann wieder auf 0. Die Parameter N (Modulo) und WIDTH (Bitbreite) machen das Modul flexibel für beliebige Zählbereiche.

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

always_ff @(posedge clk) begin
    if (!rstn) begin
        out <= '0;
    end else if (out == N-1) begin
        out <= '0;
    end else begin
        out <= out + 1;
    end
end

endmodule

Testbench

Der Test prüft zwei vollständige Zählzyklen (20 Takte) nach Freigabe des Resets.

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

    modN_ctr #(.N(N), .WIDTH(WIDTH)) u0 (
        .clk  (clk),
        .rstn (rstn),
        .out  (out)
    );

    always #10 clk = ~clk;

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

Simulationsergebnis

Der Zähler zählt hexadezimal von 0x0 bis 0x9 und springt dann auf 0x0 zurück.

ncsim> run
T=0   rstn=0 out=0xx
T=10  rstn=0 out=0x0
T=30  rstn=1 out=0x0
T=50  rstn=1 out=0x1
...
T=210 rstn=1 out=0x9
T=230 rstn=1 out=0x0
T=250 rstn=1 out=0x1
...
Simulation complete via $finish(1) at time 430 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 $timeformat meistern: Präzision und Anzeigesteuerung
  10. Verilog T-Flipflop designen: RTL-Implementierung & Testbench