Toolchain path configuration
About 2067 wordsAbout 7 min
2026-11-02
settings.json tells Digital IDE which tools to use on this machine and where to launch them. Devices, top levels, source directories and project compilation options belong in property.json. Installing the extension does not install vendor tools, simulators or their licenses. Configure only the tools your workflow needs.
Where to save settings
Use the VS Code Command Palette (Ctrl+Shift+P) to open the appropriate JSON settings file. Put complete digital-ide.* keys directly in its outer object, without an additional digital-ide object. JSONC comments and trailing commas are supported.
| Scope | Command / location | Recommended use |
|---|---|---|
| User | Preferences: Open User Settings (JSON) | Machine-specific installation paths shared by projects. Prefer this scope to avoid committing personal paths to a repository. |
| Remote | Preferences: Open Remote Settings (JSON) in a Remote SSH window | Paths on the remote host where the extension and backend run. Install the tools there. |
| Workspace | Preferences: Open Workspace Settings (JSON); .vscode/settings.json for a single-folder workspace | Project simulator choices or tool versions that override user settings. Multi-root workspace settings are stored in the .code-workspace file's settings object. |
For these ordinary tool settings, workspace values override user values. In a remote window, remote settings override local user settings, and workspace settings override remote settings. Extension defaults apply when no value is set. Current tool settings do not declare folder-level resource scope; do not rely on separate folders in a multi-root workspace selecting independent toolchains. Open separate windows for different tool environments.
Digital IDE synchronizes saved settings with the backend. Stop and restart existing Vivado or simulation sessions to use a different executable. After changing the system PATH, restart VS Code / the Remote SSH extension host so it receives the updated environment; opening a new terminal alone may not be enough.
Choose tools for your workflow
| Workflow | Requirements |
|---|---|
| HDL editing, hierarchy and existing waveforms | Complete extension and backend installation; these features do not require every vendor tool. |
| Xilinx synthesis, implementation, programming and IP configuration | Vivado, appropriate device support, licenses and programming drivers. |
| Xilinx processor software and debugging | An SDK/Vitis installation containing xsct; debugging also uses hw_server and the target architecture's GDB. A Vitis GUI installation does not necessarily provide XSCT. |
| Efinix FPGA builds | The original Efinity installation or Digital IDE's Efinity package, depending on the workflow. These have separate settings. |
| Verilog/SystemVerilog simulation | Choose a backend such as Verilator or Icarus. Verilator also needs a working C++ build environment. Icarus needs iverilog and vvp; interactive simulation additionally involves iverilog-vpi and a compilation environment. |
| VHDL / mixed-language simulation | ModelSim/Questa, licenses and matching simulation libraries. Its tool directory must provide vsim, vlog, vcom, vlib and vmap; interactive mode also needs a C++ environment for its VPI module. |
| CXXRTL / VCS | CXXRTL uses yosys, g++ and Yosys CXXRTL runtime headers. VCS needs vendor tools, licenses and a compilation environment. Make these commands available on the extension host's PATH. |
What each path should contain
All path settings below are strings. Prefer absolute paths. On Windows, use /, as in C:/Xilinx/Vivado/2024.1/bin, or escape backslashes as C:\\Xilinx\\Vivado\\2024.1\\bin. Do not embed extra quotation marks inside the string, even when a path contains spaces.
Do not copy property.json variables such as ${workspace} or ${plname} into tool settings. The validation command can expand ~, ${workspaceFolder} and ${env:NAME}, but runtime adapters do not consistently implement that expansion. Absolute paths work across these entry points.
FPGA and SDK tools
| Full setting key | Purpose and recommended value | Default / empty value |
|---|---|---|
digital-ide.prj.vivado.install.path | Vivado's bin directory, or the full path to vivado.bat on Windows / vivado on Linux. IP queries and validation also recognize an installation root, but HARD handles directories differently. Use bin for compatibility across entry points. | Default: C:/Xilinx/Vivado/2018.3/bin, a historical path rather than a detection result. Set explicitly to "" for HARD to launch via PATH. |
digital-ide.prj.xsdk.install.path | The bin directory containing xsct, or a full xsct.bat / xsct path. The retained xsdk name also covers Vitis installations that provide XSCT. | ""; uses xsct on PATH. |
digital-ide.efinity.install.path | The original Efinity installation root, containing bin/efinity and bin/efx_run or platform-suffixed equivalents. Do not use its bin directory or a single executable. | ""; the complete installation root is not inferred from PATH. Set it explicitly for the original vendor workflow. |
digital-ide.prj.efinix.package.path | The root of Digital IDE's self-contained Efinity package, such as a prepared tools/efinity/package directory. Generation/build flows that require this package validate its structure. | ""; package-dependent flows report missing configuration. This is neither the original Efinity installation nor the package's bin subdirectory. |
The two Efinity paths are not interchangeable. The original vendor workflow does not require a package setting merely to fill every option. Prepare a valid package before configuring a flow that needs it.
Simulators and auxiliary tools
| Full setting key | Purpose and recommended value | Default / empty value |
|---|---|---|
digital-ide.prj.iverilog.install.path | The executable directory, such as C:/iverilog/bin or /usr/bin. Simulation appends iverilog, vvp and iverilog-vpi to this directory. Do not use the installation root or a single executable. | ""; searches PATH. |
digital-ide.prj.modelsim.install.path | ModelSim/Questa's tool directory, such as win64 on Windows or linux_x86_64 on Linux. Common runtime subdirectories under an installation directory are also recognized. Use a directory containing the full tool suite, not a single vsim file. | Default: C:/modeltech64_10.4/win64. Explicit "" uses the tools on PATH. |
digital-ide.prj.verilator.install.path | The executable, its directory or an installation root containing bin. The Windows runtime adapter looks for verilator.exe. | ""; searches PATH, then VERILATOR_ROOT/bin. An invalid explicit path causes an error instead of silently selecting another version. |
digital-ide.prj.verible.install.path | Verible validation path: the directory containing verible-verilog-lint, an installation root or the executable itself. | "". Current source uses this path only for toolchain validation; setting it does not switch editor diagnostics or formatting to Verible. |
digital-ide.function.simulate.gtkwavePath | GTKWave validation path: executable, directory or the command name gtkwave. | "gtkwave". Currently used only for toolchain validation. The built-in waveform page does not require it, and setting it does not automatically open external GTKWave. |
Defaults do not mean installed tools
Vivado and ModelSim defaults are historical Windows paths. Override them for newer installations, Linux or Remote SSH, or explicitly use empty strings with a correctly configured PATH. Deleting the setting restores its default.
Simulation options
| Full setting key | Type and default | Effect |
|---|---|---|
digital-ide.function.simulate.fastSimulator | String, "verilator" | Default fast simulation backend: verilator, iverilog, cxxrtl, vcs, modelsim or questa. Selecting a name does not install it. The VHDL file entry point currently selects modelsim directly. This does not switch HARD's vendor simulation workflow. |
digital-ide.function.simulate.simulationHome | String, unspecified | Output location for simulator backends that support this option. Normally leave unset to use project-local .dide/ caches. If needed, use a writable absolute path and avoid sharing one output directory across projects. |
digital-ide.function.simulate.xilinxLibPath | String, "" | Simulation library location for the Xilinx vendor preparation flow. This is neither Vivado's bin directory nor a custom HDL source library. Match the simulator, version and device family. |
digital-ide.function.simulate.vendorCachePath | String, "", deprecated | Legacy cache setting. Current vendor caches live under the project's .dide/ directory; omit this setting in new configurations. |
digital-ide.function.simulate.runInTerminal | Boolean, false | Retained setting. The current simulation entry point does not read it, so it does not control whether interactive simulation runs in a terminal. |
The extension currently registers no dedicated VCS/CXXRTL installation path setting. Prefer PATH for normal configuration; do not invent keys from other tools' naming patterns. See simulation for execution steps.
Libraries and processor debugging
These library settings are strings defaulting to "". See Libraries for import operations.
| Full setting key | Effect |
|---|---|
digital-ide.lib.common.path | Common HDL library root; when unset, uses the extension-provided common library location. |
digital-ide.lib.custom.path | Custom HDL library root. References in property.json → library.hardware.custom are resolved relative to it. |
digital-ide.lib.vhdl.path | VHDL library resources for language services. Defaults to bundled resources, with a source-tree fallback for development. DIGITAL_SERVER_VHDL_LIBRARY_PATH can override it. Normally leave unchanged. |
Configure Xilinx custom IP repositories with property.json → IP_REPO. Although digital-ide.prj.xilinx.IP.repo.path and digital-ide.prj.xilinx.BD.repo.path remain declared settings, current source has no corresponding project-import consumer. Do not rely on these old keys for IP/BD configuration.
Check the following only when using processor debugging; see SDK for the workflow:
| Full setting key | Type, default and effect |
|---|---|
digital-ide.xilinx.ps.hwServer.path | String, "". Full hardware server executable path. If unset, tries to infer it from XSCT's installation, then falls back to command lookup. |
digital-ide.xilinx.ps.hwServer.host | String, "127.0.0.1". Hardware server address; loopback refers to the remote host in Remote SSH. |
digital-ide.xilinx.ps.hwServer.port | Integer, 3121, range 1–65535. Hardware server port. |
digital-ide.xilinx.ps.gdb.portBase | Integer, 3000, range 1–65532. Base GDB server port; avoid conflicts with other sessions. |
digital-ide.xilinx.ps.gdb.arm.path | String, "". Full ARM arm-none-eabi-gdb path. |
digital-ide.xilinx.ps.gdb.aarch64.path | String, "". Full AArch64 aarch64-none-elf-gdb path. |
digital-ide.xilinx.ps.gdb.armR5.path | String, "". Full ARM R5 armr5-none-eabi-gdb path. |
digital-ide.xilinx.ps.gdb.microblaze.path | String, "". Full MicroBlaze microblaze-xilinx-elf-gdb path. |
digital-ide.xilinx.ps.gdb.microblaze64.path | String, "". Full MicroBlaze 64 mb64-gdb path. |
Unset GDB paths also attempt installation inference from XSCT, then command lookup. If inference fails, specify the actual executable; include its .exe suffix on Windows.
Windows and Linux examples
These illustrate path syntax, not automatic installation. Keep only installed tools you need and use paths matching your machine. Merge the keys into your existing settings object without replacing other settings.
Windows: Vivado and Icarus
Assuming Vivado is installed at C:/Xilinx/Vivado/2024.1 and Icarus at C:/iverilog:
{
"digital-ide.prj.vivado.install.path": "C:/Xilinx/Vivado/2024.1/bin",
"digital-ide.prj.iverilog.install.path": "C:/iverilog/bin",
"digital-ide.function.simulate.fastSimulator": "iverilog"
}Linux / Remote SSH: Vivado, XSCT and Verilator
Assuming vendor tools are under /opt/Xilinx and Verilator is in /usr/bin:
{
"digital-ide.prj.vivado.install.path": "/opt/Xilinx/Vivado/2024.1/bin",
"digital-ide.prj.xsdk.install.path": "/opt/Xilinx/Vitis/2024.1/bin",
"digital-ide.prj.verilator.install.path": "/usr/bin/verilator",
"digital-ide.function.simulate.fastSimulator": "verilator"
}Use an existing PATH
Explicitly clear historical default paths when the extension host's environment already provides the tools. This example selects ModelSim/Questa:
{
"digital-ide.prj.vivado.install.path": "",
"digital-ide.prj.modelsim.install.path": "",
"digital-ide.function.simulate.fastSimulator": "modelsim"
}Validation skips empty paths. Check the commands in the same execution environment and run an actual simulation/build. Environment scripts loaded by an interactive shell may not apply to the extension host.
Verify the configuration
- Save settings in the correct scope for the current local or remote window.
- Run TOOL Options → Validate Configured Toolchains, also available through the Command Palette. Results appear in the TOOL tree.
- Validation covers Vivado, XSCT, Efinity, ModelSim/Questa, Icarus, Verible, Verilator and GTKWave, checking only explicit, non-empty values. No configured toolchains does not mean tools are absent: defaults and empty values are skipped.
- Inspect the resolved executable, version and errors. A green check means the version command succeeded and was recognized. It does not verify licenses, C++ compilers, companion programs, simulation libraries or board drivers, or guarantee that an installation root works in every runtime entry point.
- Run a minimal simulation or HARD Launch with your project. Inspect the actual command, working directory and first error in Output. Verify PS debugging, Efinity packages and VCS/CXXRTL separately.
For example, check a Linux Verilator environment with:
command -v verilator
verilator --version
g++ --version
make --versionFor the Windows Icarus example, use PowerShell:
& 'C:/iverilog/bin/iverilog.exe' -V
& 'C:/iverilog/bin/vvp.exe' -VTroubleshooting
| Symptom | Check and remedy |
|---|---|
| Program exists but cannot be found | Check the required path shape: Icarus needs an executable directory; Efinity needs an installation root. Verify that the path belongs to the actual extension host. |
| Works in a terminal but not in the extension | Check whether the shell alone loads vendor environment scripts. Start VS Code / the remote backend with the required PATH, license and library environment, then restart the extension host. |
| Windows paths appear on Linux | Override Vivado/ModelSim defaults in remote settings and check for workspace overrides. |
| Validation passes but simulation fails | Check companion commands, C++/VPI environment, language support and vendor simulation libraries. Successful vsim -version does not validate vlog, vcom or a license. |
| Permission denied or missing shared libraries | Check executable permissions and vendor runtime dependencies. Keep the complete vendor installation instead of moving individual executables. |
| Old version still runs after a setting change | End the existing session and Launch again. Inspect workspace overrides and the actual Output path; reload the window if needed. |
Installation · Project configuration (property.json) · Simulation · FPGA builds