Industrial manufacturing
Industrial Internet of Things | Industrial materials | Equipment Maintenance and Repair | Industrial programming |
home  MfgRobots >> Industrial manufacturing >  >> Industrial programming >> Verilog

4‑Bit Johnson Counter in Verilog – Design, Testbench & Simulation

Design

  
  
module johnson_ctr #(parameter WIDTH=4) 
  (  
	input clk,                
	input rstn,
  	output reg [WIDTH-1:0] out
  );    
 
  always @ (posedge clk) begin
      if (!rstn)
         out <= 1;
      else begin
        out[WIDTH-1] <= ~out[0];
        for (int i = 0; i < WIDTH-1; i=i+1) begin
          out[i] <= out[i+1];
        end
      end
  end
endmodule

  

Testbench

  
  
module tb;
  parameter WIDTH = 4;
  
  reg clk;
  reg rstn;
  wire [WIDTH-1:0] out;
  
  johnson_ctr 	u0 (.clk (clk),
                .rstn (rstn),
                .out (out));
  
  always #10 clk = ~clk;
  
  initial begin
    {clk, rstn} <= 0;

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

  
Simulation Log
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
T=210 out=0000
T=230 out=1000
T=250 out=1100
T=270 out=1110
T=290 out=1111
T=310 out=0111
Simulation complete via $finish(1) at time 330 NS + 0


Verilog

  1. Verilog Basics: Designing Your First AND Gate
  2. Master Verilog: Complete Tutorial for Digital Circuit Design
  3. Mastering Verilog Syntax: Key Rules & Best Practices
  4. Verilog Module Basics: Structure & Syntax
  5. Mastering Verilog Concatenation: A Practical Guide
  6. Implementing Sequential Logic Using Verilog 'always' Blocks
  7. Verilog Asynchronous Ripple Counter Design & Implementation
  8. Verilog Ring Counter Module: Design & Testbench Example
  9. Verilog Mod-N Counter Design: Parameterized Module & Testbench
  10. Verilog Gray Counter Module – 4‑bit Gray Code Generator