Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

LabVIEW FPGA HDL Tools

Pre-release command-line tools (nihdl) for building customized FPGA designs for use with the ni/flexrio repository. They move, generate, and process the files needed to take a top-level HDL design to a LabVIEW FPGA bitfile through either of two compile flows (see below).

The two compile flows

nihdl supports two ways to turn a top-level HDL design into a LabVIEW FPGA bitfile. Both start by extending the board's open-source top-level HDL, and both run Vivado in the end — they differ in what compiles the bitfile:

  • Vivado compile flow — extend the design in HDL and compile the bitfile directly in Vivado (gen-vivadocompile-vivado). The host talks to your logic over registers and DMA FIFOs via the NI-RIO driver — no LabVIEW required.
  • LabVIEW FPGA compile flow — package your HDL as a custom LabVIEW FPGA target (gen-targetinstall-target), then write a VI and let LabVIEW FPGA compile the bitfile (it runs Vivado under the hood).

In short: in the Vivado flow you drive Vivado; in the LabVIEW FPGA flow LabVIEW FPGA drives Vivado for you. See Theory of Operation for the full story.

Documentation

Doc What's in it
Theory of Operation The architecture, the supported workflows, and how the pieces fit together. Start here.
Command Reference Every nihdl command, its options, the command flow, and per-command required settings.
Settings Reference The nihdlsettings.py model: hooks, context, --set overrides, and the full list of setters.
LVTargetCustomIO Reference The custom I/O CSV format used to define HDL ↔ LabVIEW FPGA signals.
Window Netlist and Constraints How the LabVIEW Window netlist is produced/consumed and how XDC constraints are processed for each compile flow (including the current_instance scoping rules).

Prerequisites

External tools

You need the external tools your flow uses:

  • Vivado — for gen-vivado, check-vivado, and compile-vivado (use the version your FlexRIO release targets).
  • LabVIEW + LabVIEW FPGA and the LabVIEW FPGA Compilation Tool for Vivado — for gen-lvbitx and custom LabVIEW FPGA targets.
  • ModelSim — only for simulation (gen-modelsim, sim-modelsim, launch-modelsim, compile-modelsim-lib). compile-modelsim-lib also needs Vivado to compile the Xilinx simulation libraries.
  • Git and Python — the tools support Python 3.9+; CI tests on 3.9 and 3.11 (3.11 is also used for static analysis).

Installing the tools

nihdl is published to PyPI and is normally installed into a per-target Python virtual environment by the host repository's setup script. From a target folder that contains nihdlsettings.py (for example, c:/dev/github/flexrio-custom/targets/pxie-7903custom), run:

nisetup

This creates and activates a virtual environment and installs the version of labview-fpga-hdl-tools pinned in the repository's dependencies.toml. Re-run nisetup in every new terminal — the environment is only active for the current session, and you'll see the environment name (for example, (flexrio-custom)) in your prompt when it is active.

To install the package directly instead (for example, outside a flexrio-custom checkout):

pip install labview-fpga-hdl-tools

Required Files

Every target folder must contain a nihdlsettings.py file. It configures all paths, tool locations, and project settings via setter calls, and defines hook functions that run before/after each command. The CLI exits with an error if it is not found.

A complete starter template lives at labview_fpga_hdl_tools/nihdlsettings_default.py — copy it into your target folder as nihdlsettings.py and customize it. See the Settings Reference for details.

All nihdl commands are run from the target folder unless noted otherwise:

nihdl --help

By default nihdl prints results inline and collects any warnings and errors into a single summary at the end. Add -v (--verbose) to any command for full step-by-step status with warnings and errors also shown inline; the end summary still appears, so verbose is additive to the default. See the Command Reference for details.

Quickstart: the Vivado compile flow

Run these from your target folder (the one with nihdlsettings.py), with the Python environment active (run nisetup once per terminal — see Prerequisites):

# 1. Pull in GitHub dependencies declared in dependencies.toml
nihdl install-deps

# 2. Create the Vivado project from your settings + HDL file lists
#    (this also runs gen-hdl and gen-xdc automatically)
nihdl gen-vivado --overwrite

# 3. Fast RTL elaboration check before a full compile
nihdl check-vivado

# 4. Full compile to a bitstream and LabVIEW FPGA bitfile
#    (this runs gen-lvbitx automatically at the end)
nihdl compile-vivado

Open the project interactively at any point with nihdl launch-vivado.

The LabVIEW FPGA compile flow (custom target)

To expose your HDL to LabVIEW FPGA as a custom target, define your I/O in the custom I/O CSV, then:

# Generate target support files (BoardIO/Clock XML, Window VHDL, plugin content)
nihdl gen-target

# Install the generated plugin into your LabVIEW FPGA install
nihdl install-target

Simulating with ModelSim

# Create the ModelSim project and compile all VHDL (vcom -autoorder -2008)
# When XilinxSimLibFolder is configured, this also compiles the Xilinx
# simulation libraries (unisim, secureip, ...) on the first run, which can
# take several minutes. Run it standalone with: nihdl compile-modelsim-lib
nihdl gen-modelsim

# Launch the GUI, or run headless with --batch
nihdl launch-modelsim

For the complete command list, options, and required settings, see the Command Reference.

Validating Without External Tools

To exercise settings and file generation without launching Vivado or ModelSim, set skip flags in your nihdlsettings.py:

def pre_all(context):
    config = context.config
    # ... configure settings ...
    config.set_skip_vivado(True)
    config.set_skip_modelsim(True)

Troubleshooting / FAQ

Error: Settings file not found: ...nihdlsettings.py Run the command from the target folder that contains nihdlsettings.py, or pass --config path/to/nihdlsettings.py.

A command reports a missing required setting. Each command validates the settings it needs before running. Check the Per-Command Setting Requirements table and confirm the corresponding setter is called in pre_all(). Remember that relative paths resolve from the nihdlsettings.py file's directory.

A relative path isn't resolving the way I expect. All hooks run with the working directory set to the nihdlsettings.py file's directory, and path setters resolve relative paths from there. Use forward slashes (/) on every platform.

launch-vivado / check-vivado / compile-vivado can't find the project. Run nihdl gen-vivado --overwrite first; these commands require an existing .xpr.

gen-lvbitx warns it isn't in the right place. It is intended to run from VivadoProject/<project>.runs/impl_1. It also needs to locate createBitfile.exe; it auto-discovers the latest installed LabVIEW (2023–2030), or set set_labview_path(...) to point at a specific install.

A dependency file collides by name with a target-specific copy. Use add_exclude_hdl_file_list(...) to drop the unwanted copy from the assembled HDL file list.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

labview_fpga_hdl_tools-2.0.0.dev3.tar.gz (85.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

labview_fpga_hdl_tools-2.0.0.dev3-py3-none-any.whl (101.4 kB view details)

Uploaded Python 3

File details

Details for the file labview_fpga_hdl_tools-2.0.0.dev3.tar.gz.

File metadata

File hashes

Hashes for labview_fpga_hdl_tools-2.0.0.dev3.tar.gz
Algorithm Hash digest
SHA256 e2dcdbbdc70f85b110b19a13afe7f373aed6bc30675af74319a150aabb291a7b
MD5 703604a90d382867e18c04ebf7bb23f0
BLAKE2b-256 4a9596f62ccae7717ea295e7b14b108869fba44ffbf2e8c5dfe3194aeede4875

See more details on using hashes here.

Provenance

The following attestation bundles were made for labview_fpga_hdl_tools-2.0.0.dev3.tar.gz:

Publisher: publish.yml on ni/labview-fpga-hdl-tools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file labview_fpga_hdl_tools-2.0.0.dev3-py3-none-any.whl.

File metadata

File hashes

Hashes for labview_fpga_hdl_tools-2.0.0.dev3-py3-none-any.whl
Algorithm Hash digest
SHA256 1b52ea60b7ce3013f4e1ad22d3d6cbfbb292f010e1481dcb1c25ce5b0239fc9c
MD5 c02b41b304f43dbb8d7cdd1fa226426f
BLAKE2b-256 3f2b3a9193e54efb66c5ac59007cc45e662a5f20f654f5bb93edff80775b9bed

See more details on using hashes here.

Provenance

The following attestation bundles were made for labview_fpga_hdl_tools-2.0.0.dev3-py3-none-any.whl:

Publisher: publish.yml on ni/labview-fpga-hdl-tools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

2.0.0.dev3 This release

2 files

1.1.8

2 files

1.1.7

2 files

1.1.6

2 files

1.1.5

2 files

1.1.4

2 files

1.1.3

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.1

2 files

1.0.0

2 files

0.4.11

2 files

0.4.10

2 files

0.4.9

2 files

0.4.7

2 files

0.4.6

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.25

2 files

0.0.24

2 files

0.0.23

2 files

0.0.22

2 files

0.0.21

2 files

0.0.20

2 files

0.0.19

2 files

0.0.18

2 files

0.0.17

2 files

0.0.15

2 files

0.0.14

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page