Configurando editores para o GHDL-LS

Posted on Seg 03 Maio 2021 in vhdl • Last Modified Ter 04 Maio 2021 • 2 min read

O GHDL é um analisador, compilador e simulador para VHDL, rápido e leve ideal para prototipação.

Instalando o GHDL e GHDL language server no Linux

Para instalar o language server é preciso compilar o GHDL manualmente:

É necessário ter o gcc-gnat e o make, caso não o tenha basta rodar sudo apt install gnat make zlib1g-dev.

  • Baixe o código do GHDL via zip ou git clone https://github.com/ghdl/ghdl.git
  • Entre no diretório baixado e configure o instalador com ./configure --prefix=/usr/local
  • Compile o GHDL com make
  • Instale o GHDL com make install
  • Instale o GHDL-LS com pip3 install .
  • Como o GHDL-LS foi instalado com o PIP ele será colocado em ~/.local/bin/ghdl-ls, para facilitar podemos adiciona-lo no $PATH com echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc && source ~/.bashrc

Configurando o editor para usar o GHDL-LS

Oque é o Language Service Protocol (LSP)

Suportar o autocomplete, checagem de sintaxe e outras ferramentas de edição é uma tarefa complexa. Até pouco tempo atras cada IDE tinha sua própria forma de fazer isso, e cada novo editor precisava reinventar a roda. O VSCode vem com uma nova abordagem, a biblioteca rodando seu próprio processo e se comunicando com o editor via um protocolo (o LSP) podendo assim ser utilizado por diversos editores.

Neovim

O Neovim 0.5v já vem com um cliente LSP integrado que será usado nesse tutorial. Há outras opções como o coc.nvim e neomake.

Tendo seu LSP já configurado basta cadastrar o ghdl-ls no seu init.nvim:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
    lua << EOF
    local lspconfig = require'lspconfig'
    local configs = require'lspconfig/configs'
    local attach = require'completion'.on_attach
    local util = require "lspconfig/util"

    if not lspconfig.ghdl then
        configs.ghdl = {
            default_config = {
                cmd = {"ghdl-ls"},
                filetypes = {"vhd, vhdl"},
                root_dir = util.root_pattern("hdl-prj.json", ".git")
            },
        }
    end

    lspconfig.ghdl.setup{}

    EOF

Um exemplo de nvim configurado pode ser encontrado aqui

Editor com um código VHDL errado mostrando os erros

Notas do professor

A maioria dos exemplos aqui se aplicam somente aos sistema *nix, mas você pode facilmente adaptar para o seu sistema e no próprio GIT do projeto os desenvolvedores fornecem um docker que pode ser executado em qualquer plataforma suportada.

Há outros editores (na verdade quase todos modernos) que suportam LSP. Veja se o seu suporta e, usando as informações que o Guilherme descreveu neste post, você poderá facilmente integrar com o GHDL-LS.

Contribuições

  • 03/mai/2021: Guilherme Salustiano escreveu este post.
  • 04/mai/2021: Bruno (professor) editou para corrigir alguns erros e as notas no final do post.