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
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.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.vmodule 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 endmoduleTestbench 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.vmodule 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 endmoduleSimulaçã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.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.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.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.
