Introdução

Neste tutorial, exploraremos como desenvolver um projeto de controle de luzes LED utilizando VHDL, uma linguagem de descrição de hardware amplamente utilizada. O projeto abordará a criação de um sistema que controla múltiplos LEDs, permitindo que sejam acesos, apagados ou piscantes em resposta a sinais de controle. Utilizaremos o framework VUnit, que facilita a realização de testes em projetos VHDL, além de simuladores gratuitos como GHDL e GTKWave para validação do comportamento do hardware descrito. Ao longo do guia, você encontrará instruções detalhadas sobre como configurar seu ambiente de desenvolvimento, implementar a lógica em VHDL e testar seu projeto, tornando este tutorial ideal para quem deseja aprimorar suas habilidades em design digital.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Antes de iniciar o desenvolvimento, você precisa configurar seu ambiente. Instale o VHDL Compiler (GHDL) e o GTKWave. Certifique-se de que ambos estejam disponíveis no seu PATH. Você pode verificar a instalação usando os comandos `ghdl –version` e `gtkwave –version`. Para sistemas Linux, você pode instalar usando o gerenciador de pacotes da sua distribuição.

    commands
    # Verificar versões instaladas
    ghdl --version
    gtkwave --version

  2. Criação da Estrutura do Projeto

    Crie uma nova pasta para o seu projeto e dentro dela, crie subpastas para a descrição VHDL e para os testes. A estrutura do projeto deve ser similar a esta:
    “`
    projeto_led/
    src/
    led_controller.vhd
    tests/
    test_led_controller.vhd
    “`
    Isso permitirá organizar o código e os testes de forma clara.

    commands
    mkdir projeto_led
    cd projeto_led
    mkdir src tests

  3. Implementação do Controlador de LED

    Crie um arquivo chamado `led_controller.vhd` na pasta `src`. Neste arquivo, você descreverá a lógica para o controle de LEDs. O código define uma entidade que recebe um sinal de controle e acende ou apaga os LEDs correspondentes.

    led_controller.vhd
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    
    entity led_controller is
        Port ( control : in STD_LOGIC;
               led_output : out STD_LOGIC);
    begin
        process(control)
        begin
            case control is
                when '1' => led_output <= '1'; -- Liga o LED
                when '0' => led_output <= '0'; -- Desliga o LED
                when others => led_output <= '0'; -- Segurança
            end case;
        end process;
    end entity led_controller;

  4. Criação do Teste para o Controlador de LED

    Dentro da pasta `tests`, crie um arquivo chamado `test_led_controller.vhd`. Nele, você irá implementar os testes que verificarão se a lógica do controlador de LED está funcionando como esperado. Os testes utilizarão o framework VUnit.

    test_led_controller.vhd
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use VUnit.STD_LOGIC_1164.ALL;
    
    entity test_led_controller is
    end entity test_led_controller;
    
    architecture behavior of test_led_controller is
        signal control : STD_LOGIC;
        signal led_output : STD_LOGIC;
        component led_controller
        Port ( control : in STD_LOGIC;
               led_output : out STD_LOGIC);
        end component;
    begin
        uut: led_controller port map (control => control, led_output => led_output);
    
        -- Testes
        process
        begin
            control <= '1'; wait for 10 ns; -- Liga o LED
            assert led_output = '1' report "Erro: LED não acendeu" severity error;
            control <= '0'; wait for 10 ns; -- Desliga o LED
            assert led_output = '0' report "Erro: LED não apagou" severity error;
            wait;
        end process;
    end architecture behavior;

  5. Compilação e Simulação dos Testes

    Para compilar e simular seu VHDL, use o GHDL. No terminal, navegue até a pasta do projeto e execute os seguintes comandos. O primeiro comando compila os arquivos VHDL, e o segundo executa os testes com o VUnit.

    commands
    # Compilar os arquivos VHDL
    ghdl -a src/led_controller.vhd tests/test_led_controller.vhd
    # Executar os testes
    ghdl -e test_led_controller; ghdl -r test_led_controller --wave=wave.ghw

  6. Visualização dos Resultados com GTKWave

    Depois de compilar e executar os testes, você pode visualizar os resultados usando GTKWave. Execute o seguinte comando para abrir o arquivo de forma interativa e observar a saída do seu circuito.

    commands
    # Abrir GTKWave
    gtkwave wave.ghw

  7. Refinamento do Projeto e Inclusão de Novos Recursos

    Você pode continuar refinando seu projeto, adicionando funcionalidades, como a capacidade de controlar vários LEDs ao mesmo tempo ou implementar uma lógica mais complexa. Utilize o VUnit para criar novos testes para cada nova adição e mantenha seu projeto em constante evolução.

    commands
    # Adicionar mais lógica no led_controller.vhd
    # Criar novos testes conforme necessário

Conclusão

Neste tutorial, aprendemos a desenvolver um projeto de controle de luzes LED utilizando VHDL e o framework VUnit. Desde a configuração do ambiente e estruturação do projeto até a implementação de testes e visualização de resultados no GTKWave, abordamos todo o fluxo de desenvolvimento. Com este conhecimento, você pode expandir suas habilidades em design de hardware, criar projetos mais complexos e explorar o vasto mundo da programação em VHDL.

Hashtags

#VHDL #VUnit #DesenvolvimentoDeHardware #Simulação #GHDL #GTKWave