|
Download README.md from Snapkitty/bit-string-accelerator: direct link, hf CLI and curl.
- Browser
- Download file 5.78 kB
-
https://huggingface.co/Snapkitty/bit-string-accelerator/resolve/main/README.md
- Command line
-
hf download hf://Snapkitty/bit-string-accelerator/README.md
-
curl -L -o README.md https://huggingface.co/Snapkitty/bit-string-accelerator/resolve/main/README.md
5.78 kB
| license: epl-2.0 | |
| tags: | |
| - snapkitty | |
| - october-2026-drop | |
| - systemverilog | |
| - rtl | |
| - fpga | |
| - asic | |
| - formal-verification | |
| - hardware | |
| > Mirrored from [https://github.com/SNAPKITTYAGENT9NOVA/bit-string-accelerator](https://github.com/SNAPKITTYAGENT9NOVA/bit-string-accelerator) at commit `d2b5cfe`. Part of the **SnapKitty October 2026 main drop**. | |
| # bit-string-accelerator | |
| [](https://github.com/SNAPKITTYAGENT9NOVA/bit-string-accelerator/actions/workflows/ci.yml) | |
| Synthesizable SystemVerilog bit-string accelerator for deterministic 64-bit-word bit addressing. | |
| effective_bit_address = (base_address * 8) + bit_offset (mod 2^64) | |
| word_address = (effective_bit_address / 64) * 8 | |
| bit_index = effective_bit_address mod 64 | |
| Operations: GET, TEST, SET, CLEAR, TOGGLE. Interface contract and verification | |
| evidence: [`docs/verification.md`](docs/verification.md). | |
| ## Layout | |
| | Path | Contents | | |
| |------|----------| | |
| | `rtl/`, `verification/`, `formal/`, `isa/`, `spice/`, `docs/` | Compact accelerator, its self-checking testbench, Why3 proofs, ISA and timing model | | |
| | `bit_accelerator/` | Multi-stage v2 accelerator with its own testbench and proofs (also in `rust-opencl-gpu`) | | |
| | `fpga/` | Hardware build: UART + block-RAM wrapper, iCEBreaker and ULX3S bitstreams, host tool `bitacc` ([`fpga/README.md`](fpga/README.md)) | | |
| | `asic/` | sky130 standard-cell synthesis, equivalence proof, timing ([`asic/README.md`](asic/README.md)) | | |
| | `pcie/` | Parallel engine with range operations (count, find, fill, bulk logic, pattern match) + PCIe core for the LiteFury, LiteX SoC, host program, open-source timing flow ([`pcie/README.md`](pcie/README.md)) | | |
| | `tapeout/` | Tiny Tapeout (ttsky26d, sky130A) project, hardened and prechecked ([`tapeout/README.md`](tapeout/README.md), [`tapeout/SIGNOFF.md`](tapeout/SIGNOFF.md)) | | |
| | `gpu/` | Rust/OpenCL (`ocl`) crate from `rust-opencl-gpu` | | |
| | `.github/workflows/ci.yml` | CI: lint, simulation, proofs, SPICE, Rust | | |
| ## Requirements | |
| Ubuntu 24.04: | |
| ```sh | |
| sudo apt-get install iverilog verilator why3 z3 ngspice pocl-opencl-icd ocl-icd-opencl-dev \ | |
| yosys nextpnr-ice40 nextpnr-ecp5 fpga-icestorm fpga-trellis | |
| why3 config detect | |
| ``` | |
| plus a Rust toolchain (1.85 or newer) for `gpu/`. `pocl-opencl-icd` provides a | |
| CPU OpenCL device; any other OpenCL driver works too. | |
| ## Build and test | |
| ```sh | |
| make test # everything CI runs | |
| make lint # verilator -Wall | |
| make sim # testbench under Icarus and Verilator (SEED=n OPS=n to vary) | |
| make formal # Why3 proofs, every goal must be proved by Z3 | |
| make spice # ngspice timing model | |
| make accel # bit_accelerator/ v2: lint, sim, proofs | |
| make gpu # gpu/: cargo fmt, clippy, tests | |
| make fpga # FPGA wrapper: lint, testbench, host co-simulation, both bitstreams | |
| make fpga-gl # FPGA wrapper on post-synthesis netlists (slow) | |
| make asic # sky130 synthesis + RTL/netlist equivalence proof | |
| make pcie # parallel engine + PCIe core vs the reference core (make -j helps) | |
| make tapeout # Tiny Tapeout project: RTL test at both divisor settings | |
| ``` | |
| ## Roadmap | |
| Single-op core (reference, proofs) → parallel engine (`pcie/`, identical | |
| results) → DMA work queue → range operations (one descriptor, up to the whole | |
| bit store) → LiteFury PCIe prototype → custom PCIe board, with the Tiny | |
| Tapeout chip (`tapeout/`) as a separate silicon proof of the core. | |
| The PCIe design does not depend on the transport, so the same card works in | |
| the NUC's M.2 slot or in a USB4/Thunderbolt enclosure. | |
| ## Running on hardware | |
| `make -C fpga icebreaker prog-icebreaker` (or `ulx3s prog-ulx3s`) builds and | |
| loads a bitstream. Then `bitacc --port /dev/ttyUSB1 selftest` runs the on-board | |
| acceptance test. See [`fpga/README.md`](fpga/README.md). | |
| | Target | Size | Speed | | |
| |---|---|---| | |
| | iCE40UP5K (iCEBreaker), core + UART + RAM | 1138 LC (21%), 4 BRAM | 39.06 MHz (12 MHz board clock) | | |
| | ECP5 25F (ULX3S), core + UART + RAM | 1171 LUT4 (4%), 2 BRAM | 73.22 MHz (25 MHz board clock) | | |
| | sky130 HD standard cells, core only | 1538 cells, 10,063 µm² | 500 MHz pre-layout, typical corner | | |
| GPU tests run serially (`RUST_TEST_THREADS=1`): PoCL 5.0 can abort with a | |
| `pocl_release_dlhandle_cache` assertion when several OpenCL contexts are released | |
| from different threads at the same time. With one test thread it passed 40 of | |
| 40 runs, against 26 of 40 with parallel threads. | |
| ## Known limits | |
| - BIT_TEST behaves like BIT_GET; there is no separate condition flag output. | |
| - `base_address << 3` drops the top 3 bits of `base_address` (64-bit wrap). | |
| - The bitstreams have not been run on a physical board yet (no board was available); pin | |
| assignments come from the boards' reference constraint files. | |
| - `asic/` numbers are pre-layout for the bare core. `tapeout/` has a full layout (GDS) of the | |
| Tiny Tapeout top that passes DRC, LVS, antenna, timing and the Tiny Tapeout precheck; it has | |
| not been submitted or fabricated. The SPICE deck is an RC model, not extracted silicon. | |
| - The PCIe design has not run on a LiteFury: the bitstream needs Vivado. An open-source place | |
| and route (nextpnr-xilinx) reaches 88 MHz (84 MHz with a 2-unit MATCH), not 125 MHz; | |
| Vivado's result is unknown. The card is slower than one CPU core for COUNT/BULK; MATCH | |
| (pattern search) with 2 units is expected to be about 2x a 4-thread CPU at 125 MHz and about | |
| 1.2-1.5x at 84 MHz; see `pcie/README.md`. | |
| The Windows OpenCL SDK and `OpenCL.lib` from `rust-opencl-gpu` are not included | |
| here; the `ocl` crate locates the system OpenCL library. | |
| --- | |
| ## License | |
| Licensed under **EPL-2.0**. Full text: [LICENSE](LICENSE). | |