Introdução

Neste tutorial, iremos desenvolver um sistema de controle de semáforo utilizando Verilog, uma das principais linguagens de descrição de hardware. O sistema terá como objetivo controlar o sinal de um semáforo para garantir uma sequência segura e eficiente entre os estados vermelho, amarelo e verde. Utilizaremos o software Vivado da Xilinx para a implementação e simulação do nosso projeto, e vamos assegurar que todas as etapas sejam cobertas, desde a escrita do código até os testes funcionais. Este guia é voltado para iniciantes que desejam entender como funcionam sistemas digitais e é uma excelente introdução à programação em Verilog.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Instale o Xilinx Vivado em sua máquina. Certifique-se de que sua plataforma atende aos requisitos mínimos. Após a instalação, abra o Vivado e configure um novo projeto. Não se esqueça de selecionar o dispositivo FPGA que você está usando.

    commands
    # Inicie o Vivado;
    # Crie um novo projeto e selecione o dispositivo FPGA correto.

  2. Criação do Módulo do Semáforo

    Escreva o código Verilog para o módulo do semáforo. O semáforo terá três estados: vermelho, amarelo e verde, e alternará entre eles a cada intervalo de tempo definido.

    traffic_light.v
    module traffic_light(
        input clk,
        input rst,
        output reg [1:0] state
    );
        // Estado do semáforo
        parameter RED = 2'b00, YELLOW = 2'b01, GREEN = 2'b10;
        reg [3:0] counter;
    
        always @(posedge clk or posedge rst) begin
            if (rst) begin
                state <= RED;
                counter <= 4'b0;
            end else begin
                counter <= counter + 1;
                case(state)
                    RED: if(counter == 4'd9) begin
                        state <= GREEN;
                        counter <= 4'b0;
                    end;
                    GREEN: if(counter == 4'd5) begin
                        state <= YELLOW;
                        counter <= 4'b0;
                    end;
                    YELLOW: if(counter == 4'd2) begin
                        state <= RED;
                        counter <= 4'b0;
                    end;
                endcase
            end
        end
    endmodule

  3. Testbench para Simulação

    Crie um testbench para simular o comportamento do seu módulo. O testbench deve instanciar o módulo do semáforo e aplicar os sinais de clock e reset.

    traffic_light_tb.v
    module traffic_light_tb;
        reg clk;
        reg rst;
        wire [1:0] state;
    
        traffic_light uut (
            .clk(clk),
            .rst(rst),
            .state(state)
        );
    
        initial begin
            clk = 0;
            rst = 1;
            #10;
            rst = 0;
            #100;
            $finish;
        end
    
        always #5 clk = ~clk;
    
        initial begin
            $monitor("Time: %0dns, State: %b", $time, state);
        end
    endmodule

  4. Simulação do Módulo

    Compile e simule seu módulo utilizando o Vivado. Use o testbench criado na etapa anterior para verificar se o semáforo muda de estado conforme esperado.

    commands
    # Compile o projeto no Vivado;
    # Inicie a simulação do testbench e observe as saídas.

  5. Geração de Relatório de Simulação

    Após a simulação, gere um relatório para verificar se o semáforo se comporta corretamente durante todos os ciclos de clock.

    commands
    # Gere e analise o relatório de simulação;
    # Verifique se todas as transições de estado estão corretas.

  6. Implementação em Hardware

    Depois de verificar que o código funciona corretamente, implemente o projeto no hardware real. Conecte LEDs e botões para visualizar o funcionamento do semáforo.

    commands
    # Conecte os LEDs ao FPGA "<Pino do dispositivo>" para os estados do semáforo;
    # Programe o dispositivo FPGA usando o Vivado.

  7. Testes Finais

    Realize testes finais no hardware para garantir que o semáforo opera conforme o esperado nas condições reais. Ajuste o código conforme necessário.

    commands
    # Teste as transições do semáforo com diferentes pressões de botão;
    # Monitore o comportamento dos LEDs.

Conclusão

Neste tutorial, você aprendeu a implementar um sistema de controle de semáforo em Verilog. Desde a configuração do ambiente de desenvolvimento no Vivado até a simulação do módulo e sua implementação em hardware, exploramos cada etapa necessária. Com esse conhecimento, você pode criar projetos mais complexos que utilizem a lógica de estados e implementar sistemas digitais eficientes. Continue explorando o Verilog e as capacidades do FPGA para expandir suas habilidades em design digital.

Hashtags

#Verilog #FPGA #Vivado #SistemasDigitais #Simulação