===============================================================================
ALE VHDL Integration                                         *ale-vhdl-options*


===============================================================================
ALE can use four different linters for VHDL:

  ghdl:
    Using `ghdl --std=08`

  ModelSim/Questa
    Using `vcom -2008 -quiet -lint`

  Vivado
    Using `xvhdl --2008`

  HDL Checker
    Using `hdl_checker --lsp`

===============================================================================
General notes

ghdl, ModelSim/Questa and Vivado linters default to VHDL-2008 support. This,
and other options, can be changed with each linter's respective option
variable.

Linters/compilers that utilize a "work" directory for analyzing designs- such
as ModelSim and Vivado- can be passed the location of these directories as
part of their respective option strings listed below. This is useful for
holistic analysis of a file (e.g. a design with components, packages, or other
code defined external to the current file as part of a larger project) or
when wanting to simply pass an alternative location for the auto-generated
work directories (such as '/tmp') so as to not muddle the current directory.
Since these type of linters often use this work directory for holding compiled
design data as part of a single build process, they sometimes cannot handle
the frequent, asynchronous application launches when linting while text is
changing. This can happen in the form of hangs or crashes. To help prevent
this when using these linters, it may help to run linting less frequently; for
example, only when a file is saved.

HDL Checker is an alternative for some of the issues described above. It wraps
around ghdl, Vivado and ModelSim/Questa and, when using the latter, it can
handle mixed language (VHDL, Verilog, SystemVerilog) designs.

===============================================================================
ghdl                                                            *ale-vhdl-ghdl*

                                             *ale-options.vhdl_ghdl_executable*
                                                   *g:ale_vhdl_ghdl_executable*
                                                   *b:ale_vhdl_ghdl_executable*
vhdl_ghdl_executable
g:ale_vhdl_ghdl_executable
  Type: |String|
  Default: `'ghdl'`

  This variable can be changed to the path to the 'ghdl' executable.

                                                *ale-options.vhdl_ghdl_options*
                                                      *g:ale_vhdl_ghdl_options*
                                                      *b:ale_vhdl_ghdl_options*
vhdl_ghdl_options
g:ale_vhdl_ghdl_options
  Type: |String|
  Default: `'--std=08'`

  This variable can be changed to modify the flags/options passed to 'ghdl'.


===============================================================================
hdl-checker                                              *ale-vhdl-hdl-checker*

HDL Checker is a wrapper for VHDL/Verilg/SystemVerilog tools that aims to
reduce the boilerplate code needed to set things up. It can automatically
infer libraries for VHDL sources, determine the compilation order and provide
some static checks.

You can install it using pip:
>
  $ pip install hdl-checker

`hdl-checker` will be run from a detected project root, determined by the
following methods, in order:

1. Find the first directory containing a configuration file (see
   |g:ale_hdl_checker_config_file|)
2. If no configuration file can be found, find the first directory containing
   a folder named `'.git'
3. If no such folder is found, use the directory of the current buffer

                                           *ale-options.hdl_checker_executable*
                                                 *g:ale_hdl_checker_executable*
                                                 *b:ale_hdl_checker_executable*
hdl_checker_executable
g:ale_hdl_checker_executable
  Type: |String|
  Default: `'hdl_checker'`

  This variable can be changed to the path to the 'hdl_checker' executable.

                                              *ale-options.hdl_checker_options*
                                                    *g:ale_hdl_checker_options*
                                                    *b:ale_hdl_checker_options*
hdl_checker_options
g:ale_hdl_checker_options
  Type: |String|
  Default: `''`

  This variable can be changed to modify the flags/options passed to the
  'hdl_checker' server startup command.

                                          *ale-options.hdl_checker_config_file*
                                                *g:ale_hdl_checker_config_file*
                                                *b:ale_hdl_checker_config_file*
hdl_checker_config_file
g:ale_hdl_checker_config_file
  Type: |String|
  Default: `'.hdl_checker.config'` (Unix),
           `'_hdl_checker.config'` (Windows)

  This variable can be changed to modify the config file HDL Checker will try
  to look for. It will also affect how the project's root directory is
  determined (see |ale-vhdl-hdl-checker|).

  More info on the configuration file format can be found at:
  https://github.com/suoto/hdl_checker/wiki/Setting-up-a-project


===============================================================================
vcom                                                            *ale-vhdl-vcom*

                                             *ale-options.vhdl_vcom_executable*
                                                   *g:ale_vhdl_vcom_executable*
                                                   *b:ale_vhdl_vcom_executable*
vhdl_vcom_executable
g:ale_vhdl_vcom_executable
  Type: |String|
  Default: `'vcom'`

  This variable can be changed to the path to the 'vcom' executable.

                                                *ale-options.vhdl_vcom_options*
                                                      *g:ale_vhdl_vcom_options*
                                                      *b:ale_vhdl_vcom_options*
vhdl_vcom_options
g:ale_vhdl_vcom_options
  Type: |String|
  Default: `'-2008 -quiet -lint'`

  This variable can be changed to modify the flags/options passed to 'vcom'.


===============================================================================
xvhdl                                                          *ale-vhdl-xvhdl*

                                            *ale-options.vhdl_xvhdl_executable*
                                                  *g:ale_vhdl_xvhdl_executable*
                                                  *b:ale_vhdl_xvhdl_executable*
vhdl_xvhdl_executable
g:ale_vhdl_xvhdl_executable
  Type: |String|
  Default: `'xvhdl'`

  This variable can be changed to the path to the 'xvhdl' executable.

                                               *ale-options.vhdl_xvhdl_options*
                                                     *g:ale_vhdl_xvhdl_options*
                                                     *b:ale_vhdl_xvhdl_options*
vhdl_xvhdl_options
g:ale_vhdl_xvhdl_options
  Type: |String|
  Default: `'--2008'`

  This variable can be changed to modify the flags/options passed to 'xvhdl'.


===============================================================================
  vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
