Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

Contador Johnson de 4 Bits em Verilog – Projeto, Testbench e Simulação

Projeto

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

Log de Simulação

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
Simulação completa via $finish(1) no tempo 330 NS + 0

Verilog

  1. Domine o Verilog: Tutorial Completo para Projeto de Circuitos Digitais
  2. Dominando Concatenação Verilog: Guia Prático
  3. Entendendo Atribuições em Verilog: Tipos, Sintaxe e Boas Práticas
  4. Verilog Blocking vs Non-Blocking: Diferenças Essenciais Explicadas
  5. Dominando Funções em Verilog para Design RTL Eficiente
  6. Entendendo Tasks em Verilog: Funções vs Tasks, Sintaxe e Uso
  7. Gerador de Clock Verilog: Guia de Design e Implementação
  8. Dominando Funções Matemáticas do Verilog para Design de Hardware Eficiente
  9. Dominando $timeformat do Verilog: Precisão e Controle de Exibição
  10. Projeto de Contador Mod-N em Verilog: Módulo Parametrizado e Testbench