Sawmill plugin for Xilinx Vivado synthesis and implementation logs
Project description
sawmill-plugin-vivado
A Sawmill plugin for parsing Xilinx Vivado synthesis, implementation, and bitstream logs.
See Sawmill for more info.
Installation
[uv] pip install git+https://github.com/sjalloq/sawmill-plugin-vivado.git
Or for development:
git clone https://github.com/sjalloq/sawmill-plugin-vivado.git
cd sawmill-plugin-vivado
make install
Confirm it's registered:
sawmill --list-plugins
Usage
# Launch the TUI on a Vivado log
sawmill vivado.log
# Filter to errors and critical warnings only
sawmill vivado.log --severity error
sawmill vivado.log --severity critical_warning
# CI mode — fail on warnings and above
sawmill vivado.log --check
# Fail only on errors
sawmill vivado.log --check --fail-on error
What It Parses
Vivado logs use this message format:
TYPE: [Category ID-Number] message text [/path/to/file.v:line]
For example:
INFO: [Synth 8-6157] synthesizing module 'top' [/src/top.v:53]
WARNING: [Vivado 12-3523] Attempt to change 'name' is not allowed
CRITICAL WARNING: [Constraints 18-4427] Constraint override warning
ERROR: [Route 35-9] Routing failed
The plugin handles multi-line messages (indented continuation lines, tables)
and extracts file references from both [/path:line] and /path:line formats.
Severity Levels
| ID | Name | Level | Style |
|---|---|---|---|
error |
Error | 3 | red bold |
critical_warning |
Critical Warning | 2 | red |
warning |
Warning | 1 | yellow |
info |
Info | 0 | cyan |
Detection
The plugin identifies Vivado logs by checking (in order of confidence):
- Vivado header (
# Vivado v2025.2 ...) — 0.95 - Multiple Vivado message IDs (Synth, DRC, Timing, etc.) — 0.85
- Severity pattern density (5+ matching lines) — 0.6
- Filename contains "vivado" — 0.4
Domain-Specific Filters
These filters let you focus on specific Vivado subsystems. Severity filtering
(errors, warnings, etc.) is handled by sawmill's built-in --severity flag and
TUI severity toggles.
| Filter | Pattern | Description |
|---|---|---|
| Timing Issues | (timing|slack|WNS|TNS|setup|hold) |
Timing-related messages |
| Synthesis | \[Synth \d+-\d+\] |
Synthesis messages |
| DRC | \[DRC \d+-\d+\] |
Design Rule Check messages |
| Constraints | \[Constraints \d+-\d+\] |
Constraint-related messages |
| IP Flow | \[IP_Flow \d+-\d+\] |
IP core generation messages |
| Routing | \[Route \d+-\d+\] |
Routing messages |
How It Works
Sawmill discovers plugins via Python entry points. This plugin declares its
entry point in pyproject.toml:
[project.entry-points."sawmill.plugins"]
vivado = "sawmill_plugin_vivado:VivadoPlugin"
Running pip install -e . registers it. Sawmill calls can_handle() on each
plugin to auto-detect which one should parse a given log file.
Testing
make test # 46 tests
make lint # ruff check + format
Notes
- Does the wider Xilinx toolset use the same log style? Would this work for Vitis et al?
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sawmill_plugin_vivado-0.2.2.tar.gz.
File metadata
- Download URL: sawmill_plugin_vivado-0.2.2.tar.gz
- Upload date:
- Size: 40.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e863472d20f249ce8b22c20231c959f3d8f210383159a4672a16a72fdfc63380
|
|
| MD5 |
b40971631e1e39180da1678500f4605c
|
|
| BLAKE2b-256 |
cac1b53a8496dab310ab65c60656598d52603b61ed2c0d8554262c995d4052aa
|
Provenance
The following attestation bundles were made for sawmill_plugin_vivado-0.2.2.tar.gz:
Publisher:
publish.yml on sjalloq/sawmill-plugin-vivado
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sawmill_plugin_vivado-0.2.2.tar.gz -
Subject digest:
e863472d20f249ce8b22c20231c959f3d8f210383159a4672a16a72fdfc63380 - Sigstore transparency entry: 1092549066
- Sigstore integration time:
-
Permalink:
sjalloq/sawmill-plugin-vivado@979703a18356f126661450a8b40af0b4dd1338f3 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/sjalloq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@979703a18356f126661450a8b40af0b4dd1338f3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sawmill_plugin_vivado-0.2.2-py3-none-any.whl.
File metadata
- Download URL: sawmill_plugin_vivado-0.2.2-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
033c137fe09acc70a5f4abc58f8898535c19bb15de327ecb0767157b2a133982
|
|
| MD5 |
ab9a89f28ced45ffd0eb47553fd5327d
|
|
| BLAKE2b-256 |
b565585cbe88006edabb68e46839db5dce0f3afeb0351c324f1b03cf3598aff6
|
Provenance
The following attestation bundles were made for sawmill_plugin_vivado-0.2.2-py3-none-any.whl:
Publisher:
publish.yml on sjalloq/sawmill-plugin-vivado
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sawmill_plugin_vivado-0.2.2-py3-none-any.whl -
Subject digest:
033c137fe09acc70a5f4abc58f8898535c19bb15de327ecb0767157b2a133982 - Sigstore transparency entry: 1092549089
- Sigstore integration time:
-
Permalink:
sjalloq/sawmill-plugin-vivado@979703a18356f126661450a8b40af0b4dd1338f3 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/sjalloq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@979703a18356f126661450a8b40af0b4dd1338f3 -
Trigger Event:
push
-
Statement type: