Skip to main content

A package manager for FPGA/HDL development: resolve, fetch and assemble IP cores from the LibFPGA registry.

Project description

lfpga

A package manager for FPGA/HDL development. Resolve, fetch and assemble open IP cores from the LibFPGA registry into a source list your simulator or synthesis tool can consume.

The registry is the pypi.org of FPGA IP: curated, ownership-claimed, and toolchain-verified. lfpga is the pip, and its superpower is that every package can carry an earned verification badge (lints clean, synthesizes, testbench passes).

$ lfpga init my-soc
$ lfpga add libfpga
Found libfpga: https://github.com/libfpga/libfpga
  license MIT · verilog · ✓ lint, synth, testbench, formal
$ lfpga add picorv32
$ lfpga install
  libfpga        a4ef4a3fa4ac  1 files  ✓ lint, synth, testbench, formal
  picorv32       e9c4c5b8...   1 files  unverified

Wrote lfpga.lock and build/sources.f (2 source files).

Then point your tool at the generated filelist:

$ verilator --lint-only -f build/sources.f
$ iverilog -o sim.vvp -f build/sources.f
# Vivado: read_verilog -f build/sources.f (via -f)

Why a package manager for FPGA is different

FPGA IP is source, not binaries: there is no ABI and no linking, so lfpga vendors declared HDL files and hands them to the tool of your choice. It does not replace your simulator or synthesizer; it produces the inputs they expect. See the design notes for the full rationale (name collisions, fuzzy versioning, filesets, vendor primitives).

Install

pip install lfpga        # Python 3.11+

Commands

Command What it does
lfpga init [name] Create a libfpga.yaml here
lfpga add <pkg> Add a dependency (name, name@rev, or a git URL)
lfpga install Resolve, pin (lfpga.lock), fetch, and write build/sources.f
lfpga list Show the locked dependencies and their badges
lfpga sources [--format verilator] Emit the assembled source list

The manifest (libfpga.yaml)

One file, like Cargo.toml: it both declares your dependencies and (if you publish) describes this repo as a package for the registry.

name: my-soc
dependencies:
  libfpga: "*"                       # latest default branch
  picorv32: { rev: v1.0.3 }          # pin a tag, branch or commit
  libfpga-myhdl: { modules: [lfpga_mac] }   # sub-select from a repo
  private-mac: { git: "https://github.com/acme/mac.git" }

The lockfile (lfpga.lock)

Commit it. Because HDL builds are source-and-elaborate, reproducibility is lockfile-first: it pins the exact commit and the exact build sources, so a build is identical across machines and over time.

Status

Phase 0 (MVP): manifest, lockfile, git fetch, and a filelist emitter, all against the live registry. On the roadmap: SemVer range resolution over registry tags, sim/synth/formal filesets, Edalize/FuseSoC integration (lfpga sim / lfpga synth), and lfpga publish gated by the verification toolchain.

MIT licensed. Part of LibFPGA.

Project details


Download files

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

Source Distribution

lfpga-0.1.0.tar.gz (13.1 kB view details)

Uploaded Source

Built Distribution

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

lfpga-0.1.0-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file lfpga-0.1.0.tar.gz.

File metadata

  • Download URL: lfpga-0.1.0.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for lfpga-0.1.0.tar.gz
Algorithm Hash digest
SHA256 cc70716aa92ded1794de13cbed80582eaa62ff7015208192f8b799ee8c40e278
MD5 2b70fa6b29e3e4ffc194229a73a0f61a
BLAKE2b-256 6e71a10e8d249d39c43d2044bb8fc04f9a1ac64042d8f89cf8dbf3059859128f

See more details on using hashes here.

File details

Details for the file lfpga-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: lfpga-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 13.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for lfpga-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c97d98b7de14ae01f832fb0f9d8ebebbcc86815c0c75d4310ddfd637ad53d814
MD5 0391f524a10087336b9815861aa4ad0a
BLAKE2b-256 65478d173e213c39757251b5dd9f25947edf2a546960800a1750e0c8fbcb93b6

See more details on using hashes here.

Supported by

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