Simplifying Access to Open-Source EDA Software

Free and Open-Source Silicon (FOSSi) hardware designs face an interesting challenge. There’s a sizable and growing set of open source tools. But, obtaining the software in pre-built form – especially the latest versions – can be a challenge due to the number of Linux OS variants. EDAPack adapts the approach that the Python ecosystem has developed to this challenge of distributing binaries with broad Linux distribution compatibility. Together, EDAPack and IVPM provide a simple and fast way for projects to ensure that the proper version of open-source EDA tools are available in the same way that they manage other dependencies.

Problem and opportunity

How do you normally install software? While there are many possible paths, a common path is to install new software using your operating system’s package manager. Most Linux variants use something like apt or yum. macOS and Windows have App Stores. These built-in package managers are great for obtaining widely-used, stable software packages. They’re not as great for niche software, software that changes frequently, or software where multiple versions are simultaneously in use. Open-source EDA software, for example.

There are projects that distribute bundles of pre-built open-source EDA software, such as Tabby CAD, or create Docker images with pre-built software. These are great if they supply all the tools and tool versions that you need, and supports the Linux version that you’re using. But, often we only need one or two tools.

One substantial challenge with EDA software is that the community is small enough that it’s not feasible to independently support each Linux distribution with pre-built packages. But, at the same time, Linux distributions are sufficiently different that a single binary can’t support all relevant distributions.

Python and manylinux

As it so happens, the Python ecosystem has developed quite an elegant solution to this problem. Using native-compiled extension code is a key technique to increase Python performance. Obtaining these binary wheels in pre-built form simplifies package installation and avoids users running into compilation errors due to missing development libraries and toolchains.

But, how to ensure broad compatibility across platforms? They key is to build native-compiled code on a platform with the same characteristics as the target platform. The Python Packaging Authority (ppya) defines a set of Docker images https://github.com/pypa/manylinux for just this purpose. Each are based on a specific Linux distribution, and specify a set of compatible Linux distributions. A key benefit of using these images vs just using the base Docker image is that the pypa project keeps manylinux images updated with recent versions of tools such as compilers and Python interpreters. While the software you build with a manylinux image may be compatible with an older Linux distribution versions, you aren’t locked into the old development tools that shipped with that distribution version.

EDAPack - Multi-Platform OSS EDA Binaries

The EDAPack project borrows the Python manylinux infrastructure to build open-source EDA tool binaries that support multiple Linux platforms. In cases where an open-source EDA tool benefits from associated packages, EDAPack includes those as well. For example, the EDAPack release of the Yosys synthesis engine includes associated tools for equivalency checking (eqy), formal verification (sby), and includes the yosys-slang plug-in that supports a broader set of SystemVerilog constructs.

Managing Installed Tools with IVPM

It’s great to have access to pre-built binaries, but downloading and managing multiple versions of tools is cumbersome. Fortunately, we can use IVPM to simplify the setup process even further. IVPM approaches this by having each project capture their dependencies – including tools – in a YAML file named ivpm.yaml. In the case of using packages from EDAPack, a project specifies the dependency source as gh-rls (Github Release).

package:
  name: ivpm-fusesoc-example-registry

  dep-sets:
  - name: default
    deps:
    - name: iverilog
      src: gh-rls
      url: https://github.com/edapack/iverilog-bin
      cache: true

When we fetch the project’s dependencies, we get tools as well. To save both time and disk space, we’ve marked our tools packages as being cached. This means that all projects that use the same version of a given tool simply link to a single installation in IVPM’s cache directory.

The obvious win here is that anyone wanting to a given project can very quickly gather the open-source tools required in order to use the project. But, beyond that, the project creator can pin tools to specific version to reduce issues due to using different tool versions. In addition, it’s easy to different projects to require and use different tool versions. IVPM’s cache holds the total set of active tool versions, and each project holds links to the specific required versions.

Conclusions and Next Steps

The EDAPack organization hosts a growing collection of projects that build and release open-source EDA software. Most packages focus on supporting x86 Linux via the manylinux build system. IVPM supports fetching tools and other artifacts from Github Releases, making it easy to load and configure the precise set of tools and tool versions required by any project managed with IVPM.

Feel free to reach out if you’d like to contribute a new open-source EDA tool to the EDAPack collection or add support for a new platform to a supported EDA tool.

Next time we’ll look at direnv, my new favorite tool for project-centric environment management and see how IVPM integrates.

Video

Increasingly, topics on the blog benefit from a demo. I’m experimenting with recording companion videos that provide space for this.

References

Copyright 2014-2026 Matthew Ballance. All Rights Reserved

The views and opinions expressed above are solely those of the author and do not represent those of my employer or any other party.


Bits, Bytes, and Gates Direct to your Inbox