4-Bit Johnson Counter in Verilog – Design, Testbench & Simulation
Design
Ein Johnson-Counter (auch „Twisted Ring Counter“) verbindet den negierten Ausgang des letzten Flip-Flops mit dem Eingang des ersten. Bei n Stufen erzeugt er eine Folge von 2n Zuständen. Der folgende Code zeigt einen parameterisierten 4-Bit-Johnson-Counter mit aktiv-tiefem Reset.
module johnson_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; // Startzustand: 0001
end else begin
out[WIDTH-1] <= ~out[0]; // Invertierte Rückkopplung
for (int i = 0; i < WIDTH-1; i++) begin
out[i] <= out[i+1]; // Links-Shift
end
end
end
endmodule
Testbench
Struktur identisch zum Ring-Counter-Test; lediglich das DUT wird ausgetauscht.
module tb;
parameter WIDTH = 4;
logic clk, rstn;
logic [WIDTH-1:0] out;
johnson_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
Die Ausgabe durchläuft 8 eindeutige Zustände (0001 → 0000 → 1000 → 1100 → 1110 → 1111 → 0111 → 0011 → 0001 …) bevor sie sich wiederholt.
ncsim> run T=0 out=xxxx T=10 out=0001 T=50 out=0000 T=70 out=1000 T=90 out=1100 T=110 out=1110 T=130 out=1111 T=150 out=0111 T=170 out=0011 T=190 out=0001 ... Simulation complete via $finish(1) at time 330 NS
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
- Verilog Clock Generator: Design & Implementierungsleitfaden
- Verilog Math Functions meistern für effizientes Hardware-Design
- Verilog $timeformat meistern: Präzision und Anzeigesteuerung
- Verilog Mod-N Counter Design: Parameterisiertes Modul & Testbench