Since the Sigasi 2025.3 release, the CLI feature is included with the Sigasi VS Code extension bringing the functionality right at your fingertips in your personal VS Code terminal.
If you prefer to use the CLI feature without installing VS Code, you can download it here. Note that this standalone feature only provides command-line functionality, it does not provide the full capabilities of the Sigasi VS Code extension.
In order to use the Sigasi CLI feature standalone, you will need a license. The license can be configured by either:
- A license file in your home directory, named
.sigasi.lic - Using an environment variable:
SIGASI_LM_LICENSE_FILELM_LICENSE_FILE
To find out what license is currently configured for Sigasi CLI, you may use the --license or -l flags. This will check out a license and return its information alongside available system information. Any encountered errors will be clearly reported. After this, the license is released again and the CLI exits.
For more information about licenses, please refer to our manual.
If the license is not available, Sigasi CLI will start polling the license server at regular intervals until the license can be obtained.
To install Sigasi CLI, obtain a build ZIP for your operating system and extract it.
Then, use either sigasi-cli (Linux) or sigasi-cli.bat (Windows).
sigasi-cli [COMMAND] [ARGUMENTS]
You can get usage information by adding the --help or -h flag.
You can also use this flag for each command to get usage information for those commands specifically.
$ sigasi-cli --help
Usage: sigasi-cli [OPTIONS] [COMMAND]
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
-l, --license Check out a license, show its information and diagnostics,
and exit.
Logging Options:
-v, --verbose Output more to the console.
--debug Output debug information to the console.
Commands:
compilation-order Export project compilation order.
compilation-recipe Export project compilation recipe.
document Export project documentation.
extract Extract a library or all tool libraries to a library
database.
format Format VHDL files.
list-targets List Sigasi project targets.
verify-target-commands Validate the Sigasi project target commands.
verify Validate the project.
To turn on verbose output, use any of the following flags.
| Option | Description |
|---|
--verbose | -v | basic progress reporting |
--debug | debug information |
The verify command allows you to check an entire Sigasi project for issues.
Issues can be reported in different formats, such as plain text, JSON, or XML.
$ sigasi-cli verify --help
Usage: sigasi-cli verify [OPTIONS] PROJECT
Validate the project.
PROJECT Path of a project root folder.
-t, --target=<target> Scope the command to a target for a Sigasi
project. Can be used multiple times.
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
Logging Options:
-v, --verbose Output more to the console.
--debug Output debug information to the console.
Project Options:
-P, --path=<key=value> Sets a custom path variable for an Eclipse-style '.
project' definition. Can be used multiple times.
-D, --library-database, --dependencies-path=<directory>
Directory to search for project dependencies or a
library database. Can be used multiple times.
Output Options:
-o, --out=FILE File to write the output to.
-a, --absolute Use absolute paths to refer to files instead of
Sigasi project paths.
--plain Output in plain format.
--json Output in JSON format.
--sonarqube Output in SonarQube format.
--warnings-ng Output in Warnings NG XML format.
Execution Options:
--fail-on-error Fail on any error marker.
--fail-on-warning Fail on any warning or error marker.
--fail-on-info Fail on any info, warning, or error marker.
--include-suppressed Include suppressed issues in output.
Sigasi projects sometimes use environment variables to point at
external files and folders, e.g., at the location of your VUnit
installation. These variables are set in the IDE, but Sigasi CLI is not aware
of these variables by default. Also, the environment in which you run
CLI (e.g., your CI server) may be different from the environment in
which you run Sigasi. For example, VUnit may be installed in a
different location in each environment.
Using -P or --path, you can specify the value of the different
PATH variables in your .project file. For example, if your
.project file contains a linked folder like this:
<link>
<name>Common Libraries/vunit_include</name>
<type>2</type>
<locationURI>VUNIT/verilog/include</locationURI>
</link>You can set the VUNIT variable to the path of your VUnit installation:
$ sigasi-cli verify --path=VUNIT=/path/to/vunit/installation [FURTHER OPTIONS]
You can use -P or --path multiple times to specify the value of
multiple PATH variables.
Note that Sigasi CLI does not support resource filters in the .project file.
Sigasi projects can also use third-party libraries from the Library Database.
Refer to the extract command documentation and
Sigasi libraries manual
for more information about the Library Database.
With the -D or --library-database option, you can specify the path to a Library Database
that contains these libraries.
To save the output to a file, you can use one of the output options (--out or -o) or, on Linux, redirect the output using >.
$ sigasi-cli verify -o markers.txt .
$ sigasi-cli verify --out=markers.txt .
$ sigasi-cli verify . > markers.txt
By default, the file paths of the files with issues will be given as Sigasi project paths.
This makes it easy to find the relevant file in Sigasi and fix the problem,
because these are path relative to the project root.
When the output of the verify command is to be processed by a script, though,
Sigasi project paths are usually not what you want,
especially if your project contains a lot of linked resources.
Much easier to work with are absolute paths,
which you’ll get when you pass the --absolute flag.
| Format | Description |
|---|
| default | colored, suitable for terminal |
--plain | colorless |
--json | JSON format, more detailed |
--sonarqube | JSON format for SonarQube |
--warnings-ng | XML format for Warnings NG |
By default, the verify command will output a single line of information for each issue found.
This includes the path, line, and column where the issue is located, the severity, and a message.
If you want to use this format but without coloring, you can use the --plain flag.
hdl/boards/vfc/rtl/IRQ_Generator_Top.vhd:147:17: WARNING: Incorrect array size in assignment: expected (<g_wb_data_width>) but was (<64>)
hdl/boards/vfc/rtl/IRQ_Generator_Top.vhd:155:21: WARNING: Incorrect array size in assignment: expected (<32>) but was (<g_wb_data_width>)
hdl/boards/vfc/rtl/IRQ_Generator_Top.vhd:156:17: WARNING: Incorrect array size in assignment: expected (<32>) but was (<g_wb_data_width>)
hdl/boards/vfc/rtl/IRQ_Generator_Top.vhd:157:17: WARNING: Incorrect array size in assignment: expected (<g_wb_data_width>) but was (<32>)
hdl/boards/vfc/rtl/IRQ_Generator_Top.vhd:158:17: WARNING: Incorrect array size in assignment: expected (<g_wb_data_width>) but was (<32>)
hdl/boards/vfc/rtl/IRQ_Generator_Top.vhd:192:10: WARNING: The order of the associations is different from the declaration order
hdl/boards/vfc/rtl/IRQ_Generator_Top.vhd:202:10: WARNING: The order of the associations is different from the declaration order
hdl/boards/vfc/rtl/IRQ_generator.vhd:117:10: WARNING: The order of the associations is different from the declaration order
hdl/boards/vfc/rtl/IRQ_generator.vhd:123:10: WARNING: The order of the associations is different from the declaration order
...
If you want more detailed information for each issue, you can use the JSON output format by using the --json flag.
{
"project": "vme64x-core",
"issues": [
{
"resource": "hdl/boards/vfc/rtl/IRQ_Generator_Top.vhd",
"library": "work",
"description": "Incorrect array size in assignment: expected (<g_wb_data_width>) but was (<64>)",
"line": 147,
"lineEnd": 147,
"column": 17,
"columnEnd": 37,
"severity": "WARNING",
"code": "com.sigasi.hdt.vhdl.Vhdl.144",
"codeDescription": "Array assignment validation",
"category": "Range validation"
}
]
}
To import issues into SonarQube , use the --sonarqube flag to output issues in a format that can be interpreted by SonarQube. First output the issues into a file, then pass them to SonarQube by adding the sonar.externalIssuesReportPaths parameter. More info can be found here .
Additionally, issues can be formatted in an XML format suitable for the Jenkins plugin Warnings NG by using the --warnings-ng flag.
This allows for output to be fed to the plugin, which will visualize the issues for each Jenkins run.
You can do so by adding the following to your Jenkinsfile:
// Specify the path of your Sigasi CLI installation
final String sigasi_cli = "/opt/sigasi-cli/sigasi-cli"
// ...
// Add the following somewhere in your build step
sh "${sigasi_cli} verify --warnings-ng --out sigasi-issues.xml ."
// ...
// Add this to your 'post' step
recordIssues(
enabledForFailure: true, aggregatingResults: true,
recordIssues tool: issues(pattern: 'sigasi-issues.xml', analysisModelId: 'sigasi')
)
To easily check if any issues of a certain severity were found in the project (without having to parse the output), you can use one of the following options:
| Option | Threshold |
|---|
--fail-on-error | Any error markers |
--fail-on-warning | Any error or warning markers |
--fail-on-info | Any error, warning, or info markers |
If any issue was found that matches the threshold, an exit code of 16 will be returned once finished.
The project is still validated in its entirety, regardless of whether the threshold was reached.
Suppressed issues are filtered from the output by default, as we consider these issues ‘resolved’.
If you do want to include suppressed issues in the output, add the --include-suppressed option:
$ sigasi-cli verify --include-suppressed .
Note that this option is ignored when using the --sonarqube or --warnings-ng format.
When verifying a Sigasi project, the --target=<target> option can be passed once or multiple times to limit reported issues to the selected targets.
The document command allows you to create documentation for a Sigasi project.
The documentation can include problem information and generated diagrams and can be split into pages.
$ sigasi-cli document --help
Usage: sigasi-cli document [OPTIONS] PROJECT
Export project documentation.
PROJECT Path of a project root folder.
-t, --target=<target> Scope the command to a single target for a Sigasi
project.
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
Logging Options:
-v, --verbose Output more to the console.
--debug Output debug information to the console.
Project Options:
-P, --path=<key=value> Sets a custom path variable for an Eclipse-style '.
project' definition. Can be used multiple times.
-D, --library-database, --dependencies-path=<directory>
Directory to search for project dependencies or a
library database. Can be used multiple times.
Export Options:
--top-level=<qualifiedName>
Export documentation for the given qualified name.
--diagrams=<diagramExports>
Specify whether or how to include diagrams in
output. Defaults to embedded diagrams. The
following options are available:
EMBEDDED: include diagrams and embed them in HTML
files (default).
LINKED: include diagrams and write them to
separate file which is linked in HTML file.
NONE: don't include diagrams.
--include-problems Include problem information in output.
--include-suppressed Include suppressed problems in output.
--design-units-per-page=<unitsPerPage>
Split into multiple pages with the given design
units per page.
--diagram-node-limit=<nodeLimit>
Maximum number of nodes in diagrams. Modifying
this limit might result in slow diagram
generation. Defaults to 12000.
-T, --threads=<threads> Number of parallel export threads. Defaults to
maximum available.
-d, --output-directory=<outputDirectory>
Directory to write documentation files to.
Defaults to PROJECT/sigasi-doc.
--[no-]include-version Include Sigasi version in output.
--include-revision[=<revisionText>]
Include revision date in output. A custom revision
text can be passed as an argument, otherwise
defaults to 'Revision YYYY-MM-DD'.
These are the same as the project options for the verify command.
You can export the documentation for a given top level qualified name using --top-level=qualified.name. For example: --top-level=work.entity.architecture.
By default, diagrams are included as embedded SVGs in the generated documentation.
This can be changed to generate separate files that are linked into the HTML using --diagrams=linked.
It can also be disabled using --diagrams=none.
If the project root contains a file named sigasi-doc.css it will be copied to the target folder and
included in the HTML, embedded or linked according to the --diagrams value.
Diagram generation is multithreaded by default, this can be adjusted using -T or --threads.
Problem information is not included by default in the generated documentation. It can be added using --include-problems.
Suppressed problems can also be added with the additional flag --include-supressed.
The documentation can also be split into multiple pages with the option --design-units-per-page=unitsPerPage.
The summarized project information is on the first page. Subsequent pages provide more detailed insights about a limited
amount of design units per page, as specified.
You can configure an upper limit to the number of nodes in a diagram. This limit prevents large diagrams from being rendered. By default, it is set to 12000.
The folder where you want to export the documentation can be set with the option --output-directory. By default, it is exported into the sigasi-doc folder of the selected project.
By default, Sigasi will add the date of the export as revision information for the documentation. You can change that text using --include-revision=<yourRevisionText>
You can configure whether Sigasi’s version is in the exported documentation by using --[no-]include-version
For a Sigasi project with multiple targets,
documentation can only be exported for a single target at once.
You can list the available targets with the list-targets command.
Pass the selected target with --target to this command.
Should you want to export documentation for all targets,
you can use a shell script similar to this on Linux,
replacing PROJECT with the path to your project:
project_path=PROJECT
for target in $(sigasi-cli list-targets "${project_path}"); do
sigasi-cli export-documentation --target="${target}" --output-directory="${project_path}/sigasi-doc-${target}"
done
The compilation-order command allows you to generate a CSV file of all HDL files in your project, sorted in the correct compilation order.
$ sigasi-cli compilation-order --help
Usage: sigasi-cli compilation-order [OPTIONS] PROJECT
Export project compilation order.
PROJECT Path of a project root folder.
-t, --target=<target> Scope the command to a target for a Sigasi project.
Can be used multiple times.
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
Logging Options:
-v, --verbose Output more to the console.
--debug Output debug information to the console.
Project Options:
-P, --path=<key=value> Sets a custom path variable for an Eclipse-style '.
project' definition. Can be used multiple times.
-D, --library-database, --dependencies-path=<directory>
Directory to search for project dependencies or a
library database. Can be used multiple times.
Export Options:
-o, --out=<file> Output file. Defaults to PROJECT/compilation_order.
csv or PROJECT/toplevel_order.csv
--top-level=<qualifiedName>
Export compilation order with given qualified name
as top level.
These are the same as the project options for the verify command.
By default, the compilation order is written into compilation_order.csv in the root folder of the selected project. You can export the documentation for a given top level qualified name using --top-level=qualified.name (e.g. --top-level=work.entity.architecture).
Adding this option will generate the compilation order list in a file named toplevel_order.csv. To save the output to a specific file, you can use either -o or --out.
By default, the compilation order of a Sigasi project will contain the compilation order for all targets.
With the --target option, only files included in any of the (one or more) specified targets will be printed.
For projects with a complicated setup,
the same file may occur in multiple targets with e.g. a different library mapping or preprocessor configuration.
Working with this output in downstream script could be more complicated than required.
To get a result that’s easier to work with,
you can pass the --target option once or more to this command.
By specifying a single target, or multiple orthogonal targets,
you can avoid duplicate files in the output.
When passing a top level qualified name using --top-level,
the command may also request you to pass a --target option
to disambiguate the top level if it occurs in multiple targets.
The compilation-recipe command allows you to create a machine-readable json file that contains the compilation order and all compilation details, such as library mapping, language levels and SystemVerilog preprocessor defines.
$ sigasi-cli compilation-recipe --help
Usage: sigasi-cli compilation-recipe [OPTIONS] PROJECT
Export project compilation recipe.
PROJECT Path of a project root folder.
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
Logging Options:
-v, --verbose Output more to the console.
--debug Output debug information to the console.
Project Options:
-P, --path=<key=value> Sets a custom path variable for an Eclipse-style '.
project' definition. Can be used multiple times.
-D, --library-database, --dependencies-path=<directory>
Directory to search for project dependencies or a
library database. Can be used multiple times.
Export Compilation Recipe Options:
-o, --out=<file> Output file. Defaults to stdout.
--[no-]project-relative
Output paths relative to the project root.
--top-level=<qualifiedName>
Export Compilation Recipe with given qualified name
as Top Level.
These are the same as the project options for the verify command.
- You can specify the output file with the option
--out. - Whether file paths should be relative to the project directory with
--project-relative, if not provided, then it defaults to use absolute paths. - You can export the compilation recipe for a given top level qualified name using
--top-level=qualified.name (e.g. --top-level=work.entity.architecture).
The extract command allows you to extract tool libraries or standalone libraries into the Library Database.
These libraries can be then used in your projects. Refer to the Sigasi libraries manual
for more information about the Library Database.
$ sigasi-cli extract --help
Usage: sigasi-cli extract [OPTIONS]
Extract a library or all tool libraries to a library database.
-k, --kind=<kind> Supported tool name (Quartus, Vivado), library name
(UVVM, UVM), or a custom library name.
-a, --alias=<alias> Alias for this tool or library instance. This alias can
be used in a project configuration to switch between
different versions of a tool or library.
-p, --path=<toolOrLibrary>
Path of a tool or library directory to extract from.
-D, --library-database=<database>
Path of a library database folder.
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
Logging Options:
-v, --verbose Output more to the console.
--debug Output debug information to the console.
Examples:
sigasi-cli extract --kind=Quartus --alias=24.1 \
--path=/opt/intelFPGA_pro/24.1/quartus \
--library-database=/opt/sigasi-libraries
sigasi-cli extract --kind=UVM --alias=1800.2-2020-2.0 \
--path=/opt/uvm/1800.2-2020-2.0 \
--library-database=/opt/sigasi-libraries
sigasi-cli extract --kind=mylib --alias=v0.1 \
--path=/opt/mylib_v0.1 \
--library-database=/opt/sigasi-libraries
The following information should be provided to extract libraries:
- What should be extracted: if it’s a tool, specify which kind of tool it is; if it’s a library, specify which kind of library it is.
- The alias that will be used in projects to identify exactly this version of a tool or a library.
- The path where this tool or library is located.
- The path to a Library Database where libraries should be extracted to.
The format command allows you to format one or more VHDL files.
$ sigasi-cli format --help
Usage: sigasi-cli format [OPTIONS] FILE...
Format VHDL files.
FILE... One or more VHDL files to format.
--preserve-newlines Preserve newlines
--[no-]align Align code. Turned on by default.
--keywords=<keywordCasing>
Keyword casing: uppercase, lowercase, ignore
--comment-align-column=<column>
Alignment column for trailing comments
--spaces-for-tabs Insert spaces for tabs
--tab-width=<tabWidth>
Tab width
--vhdl-version=<vhdlVersion>
VHDL version: 93, 2002, 2008, 2019
--out=<outputPath> When invoked with one FILE, write output to this
path instead of FILE.
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
Logging Options:
-v, --verbose Output more to the console.
--debug Output debug information to the console.
The formatter can decide to join or split lines. Pass --preserve-newlines to prevent this.
The formatter will attempt to align parts of the declaration of generics, ports, etc. Pass --no-align to keep all parts to the left.
-- Default behaviour
entity CORE is
Port(SYS_CLK : in STD_LOGIC;
CONTROL : in STD_LOGIC_VECTOR(1 downto 0);
KEY : in STD_LOGIC_VECTOR(79 downto 0);
IV : in STD_LOGIC_VECTOR(79 downto 0);
KEY_OUT : out STD_LOGIC);
...
end CORE;
-- When passing --no-align
entity CORE is
Port(SYS_CLK : in STD_LOGIC;
CONTROL : in STD_LOGIC_VECTOR(1 downto 0);
KEY : in STD_LOGIC_VECTOR(79 downto 0);
IV : in STD_LOGIC_VECTOR(79 downto 0);
KEY_OUT : out STD_LOGIC);
...
end CORE;
Using --keywords=uppercase or --keywords=lowercase will rewrite keywords in the specified case. The default --keywords=ignore will retain the existing casing.
The column on which to align trailing comments can be specified with --comment-align-column. Note that comments are aligned by default, but not when --no-align is passed.
-- by default, the formatter aligns comments at column 40.
entity counter is
Port(clk : in std_logic; -- clock
rst : in std_logic; -- reset counter to 0
i : in std_logic; -- should clock cycles be counted
c : out std_logic_vector(7 downto 0)); -- counted cycles
end counter;
-- with --comment-align-column=50, all of the port comments in this example line up
entity counter is
Port(clk : in std_logic; -- clock
rst : in std_logic; -- reset counter to 0
i : in std_logic; -- should clock cycles be counted
c : out std_logic_vector(7 downto 0)); -- counted cycles
end counter;
Using --spaces-for-tabs instruments the formatter to replace all indentation tabs with spaces (by default they are left as is). If you don’t set the tab width to, e.g., 8 with --tab-width=8, each tab will be replaced with 4 spaces.
--vhdl-version=2019 sets the VHDL version used to parse the VHDL file to VHDL 2019. Other supported versions are 93, 2002 and 2008 (the default).
--out=/path/to/file writes the formatted VHDL code to the specified file, instead of modifying the input file.
Note that this option is only accepted when a single VHDL file is passed.
Sigasi CLI includes two tools to help debug and analyze Sigasi Projects: list-targets and verify-target-commands. Refer to the Sigasi Project targets section for more details.
The list-targets simply lists all targets in the project.sigasi file of the given project, to help with scripting.
$ sigasi-cli list-targets --help
Usage: sigasi-cli list-targets [OPTIONS] PROJECT
List Sigasi project targets.
PROJECT Path of a project root folder.
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
Logging Options:
-v, --verbose Output more to the console.
--debug Output debug information to the console.
Project Options:
-P, --path=<key=value> Sets a custom path variable for an Eclipse-style '.
project' definition. Can be used multiple times.
-D, --library-database, --dependencies-path=<directory>
Directory to search for project dependencies or a
library database. Can be used multiple times.
The verify-target-commands tool executes the target commands defined in the project.sigasi file and reports any issues encountered during execution. These may include unrecognized flags, incorrect option usage, or even infinite loops in build scripts. Refer to the Sigasi Project command section for more details.
$ sigasi-cli verify-target-commands --help
Usage: sigasi-cli verify-target-commands [OPTIONS] PROJECT
Validate the Sigasi project target commands.
PROJECT Path of a project root folder.
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
Logging Options:
-v, --verbose Output more to the console.
--debug Output debug information to the console.
Project Options:
-P, --path=<key=value> Sets a custom path variable for an Eclipse-style '.
project' definition. Can be used multiple times.
-D, --library-database, --dependencies-path=<directory>
Directory to search for project dependencies or a
library database. Can be used multiple times.
Sigasi CLI should always finish with a 0 exit code.
If this is not the case, refer to the following table.
| Code | Description |
|---|
0 | Successful program execution. |
1 | Unhandled program exception occurred. |
2 | Invalid command line arguments / options. |
7 | Licensing error. Make sure a valid license is available. |
16 | Verification severity threshold reached. |
17 | Documentation export failed. |
18 | Compilation export failed. |
19 | Extraction of libraries failed. |
Refer to the following articles with step-by-step examples of how to use Sigasi CLI in CI:
On Windows, the encoding of command-line arguments depends on the system locale. When using an English locale with Unicode characters (e.g., Japanese, Korean, Chinese) in file paths or arguments, these may not be encoded properly.
To resolve this, enable the Windows setting Beta: Use Unicode UTF-8 for worldwide language support which can be found under Control Panel > Region > Administrative > Change system locale…. Alternatively, use a system locale that matches the character set you’re working with.
Also see https://learn.microsoft.com/en-us/windows/apps/design/globalizing/use-utf8-code-page#set-a-process-code-page-to-utf-8 .