Skip to content
Adrian Byszuk edited this page Oct 14, 2021 · 3 revisions

VHDL

The rust_hdl language server is still under heavy development. As of now (Jan. 2019) it allows only for syntax checking and very basic semantic analysis.

Installing server

As the server name implies, it's written in Rust so you must have Rust toolchain installed.
After compilation you have to manually add binaries to your $PATH. My choice is to put them in '/usr/local/bin'.

git clone https://github.com/kraigher/rust_hdl.git
cd rust_hdl
cargo build --release
sudo cp target/release/vhdl_ls /usr/local/bin
sudo cp target/release/vhdl_parser /usr/local/bin

Registering in .vimrc

if executable('vhdl_ls')
    au User lsp_setup call lsp#register_server({
        \ 'name': 'vhdl_ls',
        \ 'cmd': {server_info->['vhdl_ls']},
        \ 'root_uri':{server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), 'vhdl_ls.toml'))},
        \ 'whitelist': ['vhdl'],
        \ })
endif

Keep in mind that vhdl_ls requires vhdl_ls.toml file for proper operation in large projects.

GHDL is the dominant open source tool for VHDL analysis, simulation and synthesis.

Installing server

The actual ghdl-ls binary is part of GHDL project, so you need to install or build GHDL itself.
GHDL can come with one of 3 backends: mcode, gcc, llvm. For the purpose of language server I recommend the mcode backend.

If you choose to compile GHDL yourself, don't forget to add ghdl-ls binary to your $PATH. My choice is to put it in '/usr/local/bin'.

Registering in .vimrc

Configuration is almost identical as for rust_hdl.

if executable('ghdl-ls')
    au User lsp_setup call lsp#register_server({
        \ 'name': 'ghdl-ls',
        \ 'cmd': {server_info->['ghdl-ls']}, " add [-v] for debugging purposes and enable `vim-lsp` logging
        \ 'root_uri':{server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), 'hdl-prj.json'))},
        \ 'whitelist': ['vhdl', 'vhd'],
        \ })
endif

For ghdl-ls to work properly with larger codebase, you need to prepare hdl-prj.json project description file. As of (Mar 2021) format of this file isn't yet frozen or extensively documented, but you can find some examples in this GH thread
The .vimrc config above will look for this file in the directory of VHDL you've opened, or in any parent directories.