{"id":13416895,"url":"https://github.com/nickg/nvc","last_synced_at":"2026-03-14T15:02:30.495Z","repository":{"id":1791326,"uuid":"2715244","full_name":"nickg/nvc","owner":"nickg","description":"VHDL compiler and simulator","archived":false,"fork":false,"pushed_at":"2024-05-28T20:26:21.000Z","size":25913,"stargazers_count":583,"open_issues_count":27,"forks_count":76,"subscribers_count":37,"default_branch":"master","last_synced_at":"2024-05-29T10:37:27.805Z","etag":null,"topics":["compiler","fpga","simulator","vhdl"],"latest_commit_sha":null,"homepage":"https://www.nickg.me.uk/nvc/","language":"VHDL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"addyosmani/es6-tools","license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nickg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"nickg","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2011-11-05T13:13:19.000Z","updated_at":"2024-05-30T18:10:35.367Z","dependencies_parsed_at":"2023-10-16T23:58:07.680Z","dependency_job_id":"9cbfdc44-870b-449c-83b1-25a23177dc8f","html_url":"https://github.com/nickg/nvc","commit_stats":{"total_commits":5905,"total_committers":28,"mean_commits":"210.89285714285714","dds":"0.052497883149873026","last_synced_commit":"7369e674cb5482a28848b429e4b1799ac3377a8f"},"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickg%2Fnvc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickg%2Fnvc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickg%2Fnvc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickg%2Fnvc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nickg","download_url":"https://codeload.github.com/nickg/nvc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243671364,"owners_count":20328604,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compiler","fpga","simulator","vhdl"],"created_at":"2024-07-30T22:00:28.976Z","updated_at":"2026-03-14T15:02:30.487Z","avatar_url":"https://github.com/nickg.png","language":"VHDL","funding_links":["https://github.com/sponsors/nickg"],"categories":["HDL simulators and compilers","VHDL-Toolkit","C","Electronics Simulators"],"sub_categories":[],"readme":"### Synopsis\n\n[![Build Status](https://github.com/nickg/nvc/actions/workflows/build-test.yml/badge.svg?branch=master\u0026event=push)](https://github.com/nickg/nvc/actions)\n[![Coverage Status](https://coveralls.io/repos/github/nickg/nvc/badge.svg?branch=master)](https://coveralls.io/github/nickg/nvc?branch=master)\n\nNVC is a [VHDL](https://en.wikipedia.org/wiki/VHDL) compiler and\nsimulator.\n\nNVC supports almost all of VHDL-2008 with the exception of PSL, and it\nhas been successfully used to simulate several real-world designs.\nExperimental support for Verilog and VHDL-2019 is under development.\n\nNVC has a particular emphasis on simulation performance and uses\n[LLVM](https://llvm.org/) to compile VHDL to native machine code.\n\nNVC is not a synthesizer.  That is, it does not output something that\ncould be used to program an FPGA or ASIC.  It implements only the\nsimulation behaviour of the language as described by the [IEEE\n1076](https://standards.ieee.org/standard/1076-2019.html) standard.\n\nNVC supports popular verification frameworks including\n[OSVVM](https://osvvm.org/), [UVVM](https://www.uvvm.org/),\n[VUnit](https://vunit.github.io/) and [cocotb](https://www.cocotb.org/).\nSee [below](#vendor-libraries) for installation instructions.\n\n### Usage\n\nSimulating a VHDL hardware design involves three steps: _analysing_ the\nsource files; _elaborating_ the design; and _running_ the\nsimulation.  This is analogous to compiling, linking, and executing a\nsoftware program.  With NVC these steps are accomplished using the `-a`,\n`-e`, and `-r` commands:\n\n    $ nvc -a my_design.vhd my_tb.vhd\n    $ nvc -e my_tb\n    $ nvc -r my_tb\n\nOr more succinctly, as a single command:\n\n    $ nvc -a my_design.vhd my_tb.vhd -e my_tb -r\n\nWhere `my_tb` is the name of the top-level test-bench entity.\n\nThe full manual can be read after installation using `man nvc` or\n[online](https://www.nickg.me.uk/nvc/manual.html).\n\n### License\n\nThis program is [free\nsoftware](https://www.gnu.org/philosophy/free-sw.en.html) distributed\nunder the terms of the GNU General Public License version 3 or later.\nYou may use, modify, and redistribute the program as you wish but if you\ndistribute modifications you must preserve the license text and\ncopyright notices, and also make the modified source code available to\nyour users.\n\nThe source files for the IEEE standard libraries are included in the\nrepository.  These were originally provided under a proprietary license\nthat forbid distribution of modifications, but in 2019 were relicensed\nunder Apache 2.0.  Freely redistributable versions of the 1993 libraries\nwere made by editing and removing declarations from the 2019 libraries,\nand so are also licensed under Apache 2.0.  Certain VHDL libraries\ndeveloped specifically for NVC under `lib/nvc` and `lib/std` are also\nlicensed under Apache 2.0.  See the individual files for details.\n\nThe VITAL libraries are distributed under `lib/vital`.  These were\nderived from draft copies of the packages freely available on the\ninternet.  The license status of these is unclear as the final text is\npart of the VITAL standard which must be purchased from the IEEE.  If\nyou are packaging this program for a distribution with strict free\nsoftware requirements you should strip these files from the tarball and\nconfigure with `--disable-vital`.\n\n### Installing\n\nNVC is developed under GNU/Linux and is regularly tested on macOS and\nWindows under MSYS2.\n\nOn macOS NVC can be installed with `brew install nvc`.  NVC is also\npackaged for [FreeBSD](https://www.freshports.org/cad/nvc),\n[Gentoo](https://packages.gentoo.org/packages/sci-electronics/nvc), Arch\nLinux [AUR](https://aur.archlinux.org/packages/nvc), and [several other\ndistributions](https://repology.org/project/nvc/versions).  A Windows\ninstaller is available from the [releases\npage](https://github.com/nickg/nvc/releases/) and can be installed using\n[winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/)\nwith `winget install NickGasson.NVC`.  Users of systems without existing\npackages should build from source.\n\nFor testing in GitHub Actions use\n[setup-nvc](https://github.com/marketplace/actions/setup-nvc).  There is\nalso a Docker image\n[ghcr.io/nickg/nvc](https://github.com/nickg/nvc/pkgs/container/nvc) for\nother CI environments.\n\nNVC has both a release branch and a development master branch. The\nmaster branch should be stable enough for day-to-day use and has\ncomprehensive regression tests, but the release branch is more suitable\nfor third party packaging.  The latest released version is\n[1.19.2](https://github.com/nickg/nvc/releases/tag/r1.19.2).\nSignificant changes since the last release are detailed in\n[NEWS.md](NEWS.md).\n\nIf you are building from a Git clone rather than a released tarball you\nfirst need to generate the configure script using:\n\n    ./autogen.sh\n\nIn-tree builds are not supported so create a separate build directory:\n\n    mkdir build \u0026\u0026 cd build\n\nFinally build and install using the standard autotools steps:\n\n    ../configure\n    make\n    sudo make install\n\nTo use a specific version of LLVM add `--with-llvm=/path/to/llvm-config`\nto the configure command.  The minimum supported LLVM version is 8.0.\nVersions between 8 and 21 have all been tested.\n\nNVC also depends on Flex to generate the lexical analyser.\n\nOn a Debian derivative the following should be sufficient to install all\nrequired dependencies:\n\n    sudo apt-get install build-essential automake autoconf \\\n      flex check llvm-dev pkg-config zlib1g-dev libdw-dev \\\n      libffi-dev libzstd-dev\n\nOn `rpm` based distributions, the following can be installed to fulfill\nrequired dependencies:\n\n    sudo dnf install autoconf automake flex check llvm-devel libffi-devel \\\n      zlib-ng-compat-devel libzstd-devel elfutils-devel\n\nOnly the MSYS2 environment on Windows is supported.  The \"Clang x64\"\nenvironment should be used because it supports native Windows\nthread-local storage unlike the GCC-based environments.  The required\ndependencies can be installed with:\n\n    pacman -S base-devel mingw-w64-clang-x86_64-{llvm,ncurses,libffi,check,pkgconf,zstd,autotools,clang}\n\n[GTKWave](http://gtkwave.sourceforge.net/) or [Surfer](https://surfer-project.org/)\ncan be used to view simulation waveforms.  For GTKWave, version 3.3.79 or later is\nrequired for the default FST format.\n\n#### Testing\n\nTo run the regression tests:\n\n    make check\n\nThe unit tests require the [check](https://libcheck.github.io/check/)\nlibrary.\n\n### Reporting bugs\n\nReport bugs to [nick@nickg.me.uk](mailto:nick+nvc@nickg.me.uk) or using\nthe [GitHub issue tracker](https://github.com/nickg/nvc/issues).  Please\ninclude enough information to reproduce the problem, ideally with a\nsmall VHDL test case.  Issue\n[#412](https://github.com/nickg/nvc/issues/412) is a good example.\n\nPlease remember that this software is provided to you with NO WARRANTY\nand no expectation of support, but I will do my best to help with any\nissues you encounter.\n\n### Contributing\n\nPatches can be sent as either pull requests on GitHub or by email using\n[git --send-email](https://git-send-email.io/).  Please note however\nthat as this is purely a spare-time hobby project for me, I have limited\ntime available to review patches.  All code submitted must follow the\nguidelines in [contrib/STYLE.md](contrib/STYLE.md).\n\nI will not accept patches that add new copyright owners under `src/`.\nThis is to ensure there is clear legal ownership should, for example,\nthe license need to be updated.  Significant contributors are instead\nlisted in [THANKS.md](THANKS.md).\n\n### Language Support\n\nVHDL standard revisions are commonly referred to by the year they were\npublished.  For example IEEE 1076-2008 is known as VHDL-2008.  The\ndefault standard in NVC is currently VHDL-2008 but this can be changed\nwith the `--std` argument.  For example `--std=1993` selects the\nVHDL-1993 standard.\n\nThe 1993, 2000, and 2002 revisions of the standard are fully supported.\nPlease raise bugs for any missing or incorrectly implemented features\nyou encounter.  The current status of VHDL-2008 and VHDL-2019 support\ncan be found on the [features](https://www.nickg.me.uk/nvc/features.html)\npage.\n\n##### VHPI\n\nThe VHDL standard contains a comprehensive API called VHPI for\ninterfacing with foreign code written in C or another language.  NVC\nimplements a subset of VHPI sufficient for running\n[cocotb](https://www.cocotb.org/).  Refer to the\n[manual](https://www.nickg.me.uk/nvc/manual.html#VHPI) for more\ninformation.\n\n### Vendor Libraries\n\nNVC provides scripts to compile popular verification frameworks and the\nsimulation libraries of common FPGA vendors.\n\n* For [OSVVM](https://osvvm.org/) use `nvc --install osvvm`\n* For [UVVM](https://www.uvvm.org/) use `nvc --install uvvm`\n* For Xilinx ISE use `nvc --install ise`\n* For Xilinx Vivado use `nvc --install vivado` and additionally `nvc\n  --install xpm_vhdl` if you require simulation models of the XPM macros\n* For Altera Quartus use `nvc --install quartus`\n* For Lattice iCEcube2 use `nvc --install icecube2`\n* For [Free Model Foundry](https://freemodelfoundry.com/) common\n  packages use `nvc --install fmf`\n\nThe libraries will be installed under `~/.nvc/lib`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickg%2Fnvc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnickg%2Fnvc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickg%2Fnvc/lists"}