Personal collection of small scripts and helpers for work.
Project description
rpkbin — Core IC Design & Verification Utilities
rpkbin is a practical toolbox for hardware design and verification work. It includes small, focused utilities for bit-true modeling, spreadsheet extraction, control-flow modeling, and long-running batch workflows.
If you are new here, start with the task you want to solve:
| I want to... | Start with |
|---|---|
| Run many shell/Python jobs and watch them live | Wave |
| Run commands/functions in parallel from Python | Job Manager |
| Model registers and bit fields | MapBV |
| Simulate fixed-point arithmetic | NumBV |
| Extract structured data from Excel files | Excel Extractor |
| Sketch or validate low-level control flow | CFG |
| Compile high-level IR (HIR) to pseudo ASM for MCU targets | Codegen |
Core Features
1. MapBV — BitVector with Bidirectional Mapping
MapBV allows you to define a hierarchy of bit-fields that stay synchronized automatically.
- Hierarchical Slicing: Define a 32-bit register and slice it into named fields.
- Bidirectional Linking: Use
concatto build a new view from existing variables; updating the view updates the sources. - Symbolic Evaluation: Use
.eval()to test "what-if" scenarios without changing actual values.
Learn more in MapBV Documentation
2. NumBV — Bit-True Fixed-Point Arithmetic
Bit-exact fixed-point simulation for DSP pipeline verification. Pure NumPy, with no external fixed-point dependency.
- Two-layer API: Operator layer (
+,*) for convenience; function layer (nbv.add(),nbv.mul()) for explicit pipeline staging. - Five Rounding Modes:
trunc,round,round_half_even(convergent, Xilinx DSP48),ceil,round_to_zero. - Unified Operations: One
NumBVclass handles both scalar and array computations. Backed by NumPy by default, with an optional JAX backend for XLA acceleration.
Learn more in NumBV Documentation
3. Excel Extractor — Template-Based Extraction
Intelligently extract data from complex spreadsheets.
- Layout Description: Define the "shape" of data instead of hardcoded coordinates.
- Fuzzy Matching: Matches headers even with slight spelling variations.
- Merged Cell Support: Correctly resolves values spanning across merged rows/cols.
Learn more in Excel Extractor Documentation
4. CFG — Low-Level Control Flow Toolkit
Organize assembly-like flows, FSM state machines, and MCU branch layouts before writing target-specific code.
- Explicit Flow Modeling: Build labeled blocks and priority-ordered branch edges without committing to an ISA.
- Readable Checks & Layouts: Validate common control-flow mistakes, print text layouts, and choose deterministic block emission order.
- Program Call Checks: Mark subroutine calls with
CallRefand check call depth against hardware or coding-rule limits.
Learn more in CFG Documentation
5. Job Manager
A practical, cross-platform job manager for running shell commands and Python callables safely in parallel.
- One API for Common Workloads: Run local functions (
FuncJob) and CLI tasks (CmdJob) with the same manager. - Resource-Aware Scheduling: Limit concurrency by global resources such as GPU count or license tokens.
- Operationally Friendly: Built-in cancellation, retries, live logs, and callbacks for automation pipelines.
6. Wave — Batch Workflow Orchestration with Live TUI
A workflow layer built on top of Job Manager for declaring and observing long-running batch flows.
- Plain Python wave files: declare jobs, parsers, hooks, and actions in a normal
.pyfile. - Live TUI by default: dashboard, per-job logs, parsed data, events, system messages, and a command bar.
- Headless mode when needed: use
--no-tuifor CI or script-only environments. - Operational controls: rerun jobs, stop/cancel by job or tag, send stdin, send OS signals, or send PTY terminal keys.
- Automation hooks: react to log patterns, parsed data, elapsed time, lifecycle events, or user-defined actions.
7. Codegen — MCU Compiler Backend Framework
A target-agnostic compiler backend that translates High-level IR (HIR) to pseudo assembly. Supports pattern rewrite optimizations, graph-coloring register allocation, and safe variable spilling.
- HIR Lowering: Lowers structured control flow (if/while/for/poll) and volatile memory loads/stores.
- Physical Register Alias Resolution: Supports overlapping registers (e.g. 16-bit register composed of two 8-bit aliases).
- Safe Variable Spilling: Automatically spills live variables to configured SRAM locations when registers are exhausted.
Quick Start: Wave
Install Wave support:
pip install -e .[wave]
Create hello.wave.py:
from rpkbin.wave import session, CmdJob
session.configure(max_workers=2)
session.add(CmdJob("hello", "python -c \"print('hello from wave')\""))
session.add(CmdJob("list", "python -c \"import os; print(os.getcwd())\""))
Run it:
rpk-wave run hello.wave.py
Useful TUI commands:
status
logs hello
show hello
rerun hello
stop hello
For CI or plain terminal output:
rpk-wave run hello.wave.py --no-tui
Installation
# Core (installs NumPy)
pip install -e .
# Optional NumBV JAX backend
pip install -e .[jax]
# Install specific features
pip install -e .[wave] # Installs textual, prompt_toolkit, rich
pip install -e .[excel] # Installs openpyxl, xlrd, rapidfuzz
pip install -e .[cfg] # Installs networkx
# Install everything
pip install -e .[all]
Testing
Run tests using pytest from the root directory:
pytest tests/ -v
(All tests require only numpy — no optional dependencies needed.)
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 rpkbin-0.1.8.tar.gz.
File metadata
- Download URL: rpkbin-0.1.8.tar.gz
- Upload date:
- Size: 213.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71a6bb6289f45e6efaa6cbe1484b46fa959bc53f2302e57036d8b182abe782aa
|
|
| MD5 |
0b2456143cbda6a6e574b735f93864dc
|
|
| BLAKE2b-256 |
c6de10f7301c5db117352eea5fe4510843f3579b38166c8379c2bfd071e3b975
|
Provenance
The following attestation bundles were made for rpkbin-0.1.8.tar.gz:
Publisher:
python-publish.yml on redpigkiller/rpkbin
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rpkbin-0.1.8.tar.gz -
Subject digest:
71a6bb6289f45e6efaa6cbe1484b46fa959bc53f2302e57036d8b182abe782aa - Sigstore transparency entry: 2163720711
- Sigstore integration time:
-
Permalink:
redpigkiller/rpkbin@f09f664f7fb4d82bbc751415e290666141ae29b5 -
Branch / Tag:
refs/tags/v0.1.8 - Owner: https://github.com/redpigkiller
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@f09f664f7fb4d82bbc751415e290666141ae29b5 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rpkbin-0.1.8-py3-none-any.whl.
File metadata
- Download URL: rpkbin-0.1.8-py3-none-any.whl
- Upload date:
- Size: 236.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
541c85f92ffb5b52506867c40ffea04c4732e4a763a4acfb4fcce90d28a0c8fb
|
|
| MD5 |
7c37524996bde5a595157f6c784e85a6
|
|
| BLAKE2b-256 |
8c1329d7c94a27cd1ecf08fcb868a20fc66a69b0b195e51bc1cc1d7cf0d6b5c3
|
Provenance
The following attestation bundles were made for rpkbin-0.1.8-py3-none-any.whl:
Publisher:
python-publish.yml on redpigkiller/rpkbin
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rpkbin-0.1.8-py3-none-any.whl -
Subject digest:
541c85f92ffb5b52506867c40ffea04c4732e4a763a4acfb4fcce90d28a0c8fb - Sigstore transparency entry: 2163720725
- Sigstore integration time:
-
Permalink:
redpigkiller/rpkbin@f09f664f7fb4d82bbc751415e290666141ae29b5 -
Branch / Tag:
refs/tags/v0.1.8 - Owner: https://github.com/redpigkiller
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@f09f664f7fb4d82bbc751415e290666141ae29b5 -
Trigger Event:
release
-
Statement type: