Skip to main content

Knowledge graph extractor for SystemVerilog, Verilog, and VHDL

Project description

hdl-kgraph

CI

A knowledge graph for your HDL design. hdl-kgraph parses SystemVerilog, Verilog, and VHDL sources and builds a queryable graph of modules, entities, instances, ports, parameters, signals, classes, packages, and the relationships between them — design hierarchy, port connectivity, package imports, class inheritance, clock domains, and more.

Status: alpha (v0.7). Milestones M1–M6 are in: SystemVerilog/Verilog and VHDL extraction with mixed-language linking, the SV preprocessor and real-world build inputs (.f filelists, defines, hdl-kgraph.toml), incremental rebuilds and watch mode, the clock/reset/CDC/lint/metrics analyses with an interactive visualization, and an MCP server so AI assistants can query the design. M7 adds opt-in semantic enrichment (build --enrich): the pyslang frontend elaborates the design — unrolling parameterized generates so instance counts match reality — and records a discrepancy report. hdl-kgraph enriched summarizes exactly what enrichment changed vs the default build. See the roadmap.

Why

HDL codebases are graphs — hierarchy, connectivity, clock domains — but the tools that understand them are locked inside simulators and synthesis flows. hdl-kgraph extracts that structure into a local-first SQLite database you can query from the CLI, scripts, or AI assistants via MCP. The architecture follows code-review-graph, adapted for hardware.

Quickstart

pip install hdl-kgraph

hdl-kgraph build ./rtl            # parse sources -> ./rtl/.hdl-kgraph/graph.db
hdl-kgraph build -f sim/tb.f      # or drive the build from a vendor-style filelist
hdl-kgraph status                 # files, parse errors, node/edge counts
hdl-kgraph tree soc_top           # print the design hierarchy from a top module
hdl-kgraph query instances-of fifo
hdl-kgraph query unresolved       # what couldn't be resolved (vendor IP, macros)

Most commands take --json for scripting. Unresolved targets render as [?] and ambiguous matches as [~0.6]: every cross-file edge carries a confidence score — the graph's honest contract about what was proven syntactically vs inferred by name matching (docs/extraction.md).

Features

Real-world build inputs. .f filelists (+incdir+/+define+, nested -f, $VAR expansion), preprocessor defines and include dirs, VHDL library mapping, --exclude/--max-file-size for vendored IP, and an hdl-kgraph.toml config. Per-file diagnostics (build -v, status --errors) tell you which files have parse errors or preprocessor warnings and why files were skipped. → docs/build-inputs.md

Incremental updates. update re-parses only changed files plus their include/macro dependents — one edit in a 2000-file design lands in under a second — and watch does it on every save burst. detect-changes (exit codes: 0 clean, 1 dirty, 2 error; diffs against git, svn, or Perforce) and impact answer "what changed, and what does it affect?" in CI. → docs/incremental.md

Mixed Verilog/VHDL designs link into one hierarchy. tree and query cross the language boundary in both directions; cross-language matches are scored ≤0.8, never 1.0. → docs/extraction.md

Analyses. Clock domains, reset trees, CDC suspects, signal drivers/readers, UVM topology, graph-level lint checks, fan-in/out and hub/bridge metrics, and a self-contained interactive HTML visualization (visualize: hierarchy + force-directed views, community filters, --collapse for subsystem supernodes, --layout tiers for large designs). → docs/analyses.md

AI assistants over MCP. hdl-kgraph setup detects installed assistants (Claude Code/Desktop, Cursor, Codex, Windsurf, Gemini CLI, VS Code) and writes their MCP config; hdl-kgraph serve exposes nine read-only, paginated tools (pip install 'hdl-kgraph[mcp]'). → docs/mcp.md

What gets extracted

  • Design units: modules, interfaces, packages, programs; VHDL entities, architectures, packages, configurations
  • Structure: instances with port connections and parameter overrides, include/define relationships, filelists
  • Verification: SV classes (UVM hierarchies via inheritance chains), constraints, covergroups, assertions/properties/sequences, clocking blocks
  • Dataflow: signal drivers/readers (process-, assign-, and instance-level), clock and reset trees, CDC-suspect crossings

Modports, checkers, UDPs, and generate blocks are not extracted yet. The full list, the confidence convention, and the schema pointers live in docs/extraction.md.

Roadmap at a glance

Milestone Theme
M1 (v0.1) SystemVerilog/Verilog structural graph + CLI
M2 (v0.2) Preprocessor, .f filelists, includes
M3 (v0.3) VHDL + mixed-language linking
M4 (v0.4) Incremental updates, watch mode, impact analysis
M5 (v0.5) Clock/reset/CDC analyses, lint checks, visualization
M6 (v0.6) MCP server for AI assistants
M7 (v0.7) Semantic enrichment via native frontends (pyslang elaboration; GHDL/VHDL planned)
M8 (v1.0) C/C++/Python boundary (DPI-C, cocotb), stable API
M9 (v1.x) Chisel/FIRRTL, Amaranth, SpinalHDL
M10 (v1.x) Tcl/SDC/UPF constraints, Perl scripting, SLN portable stimulus

Details and acceptance criteria: ROADMAP.md.

Development

git clone https://github.com/chuanseng-ng/hdl-kgraph
cd hdl-kgraph
pip install -e .[dev]
ruff check . && ruff format --check . && mypy && pytest

See CONTRIBUTING.md. The single most useful contribution right now: the smallest HDL file that breaks extraction.

License

MIT

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

hdl_kgraph-0.7.4.tar.gz (510.8 kB view details)

Uploaded Source

Built Distribution

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

hdl_kgraph-0.7.4-py3-none-any.whl (269.2 kB view details)

Uploaded Python 3

File details

Details for the file hdl_kgraph-0.7.4.tar.gz.

File metadata

  • Download URL: hdl_kgraph-0.7.4.tar.gz
  • Upload date:
  • Size: 510.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for hdl_kgraph-0.7.4.tar.gz
Algorithm Hash digest
SHA256 91a569d0ae5fbc986149e3baf2f1676ba35dee868df8a4ea950090bb6209400e
MD5 f51b0977d1ecc4e962c59a2b2743ebe4
BLAKE2b-256 cb464bba2f669f4d58201cecfa3a614baa38a28d7336430febae14f74ce86220

See more details on using hashes here.

Provenance

The following attestation bundles were made for hdl_kgraph-0.7.4.tar.gz:

Publisher: release.yml on chuanseng-ng/hdl-kgraph

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

File details

Details for the file hdl_kgraph-0.7.4-py3-none-any.whl.

File metadata

  • Download URL: hdl_kgraph-0.7.4-py3-none-any.whl
  • Upload date:
  • Size: 269.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for hdl_kgraph-0.7.4-py3-none-any.whl
Algorithm Hash digest
SHA256 fc0d4c9656f7b2e80b67a1f947e0e2c975a3f715d170ad069de7c6d009465286
MD5 c914e47bf96a70d28a93f900cb5e30a0
BLAKE2b-256 726440b6854fb153a1aa0554b9bea6d1e9b2731cab3b156aeab0275737e02e04

See more details on using hashes here.

Provenance

The following attestation bundles were made for hdl_kgraph-0.7.4-py3-none-any.whl:

Publisher: release.yml on chuanseng-ng/hdl-kgraph

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

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