doc: refresh README/tutorial/CLAUDE for profiles, clock, SVF
Bring the docs up to date and keep each in its lane: - README (overview): both programming paths (Xilinx proxy flash + SVF), probe profiles, neutral JTAG clock + per-device cap, runtime YAML registry, IGLOO2 bundled; run-from-repo-root fixed - tutorial (user view): probe profiles + jtag_close, the prog tag, a JTAG-clock section, a new "Programming via SVF" section, prog/max_tck in the add-a-target table, troubleshooting rows - CLAUDE.md (design): architecture tree lists the project modules + YAML data files; roadmap gains phases 5 (probes/JTAG-link) and 6 (SVF) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
34
CLAUDE.md
34
CLAUDE.md
@@ -12,28 +12,40 @@ when reality changes, not for every transient task.
|
||||
|
||||
`bs_explorer` is an application layer on top of Viveris's
|
||||
[jtag-boundary-scanner](https://github.com/viveris/jtag-boundary-scanner)
|
||||
library (LGPL). End goal: program SPI configuration memories attached
|
||||
to FPGAs (Xilinx KU15P first, then others) over JTAG, from a CLI tool
|
||||
running on a host with an FTDI probe.
|
||||
library (LGPL). End goal: program FPGAs/CPLDs over JTAG from a CLI tool
|
||||
on a host with an FTDI/Digilent/J-Link probe — Xilinx external SPI
|
||||
configuration flash via a BSCAN proxy (started with the KU15P), and
|
||||
other families (Lattice, Microsemi, …) by playing a vendor-exported SVF.
|
||||
|
||||
The Viveris library itself lives unchanged in `modules/`. Everything
|
||||
new is in `bs/` (the REPL) and future modules (`fpga/`, `bscan/`,
|
||||
`spi_flash/`) sitting alongside the Viveris ones.
|
||||
new is in `bs/` (the REPL) and the project modules (`fpga/`, `bscan/`,
|
||||
`spi_flash/`, `svf/`, `probes/`) sitting alongside the Viveris ones.
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
bs/ Application (readline REPL, no business logic)
|
||||
modules/ — Viveris's library (LGPL, unchanged) —
|
||||
modules/
|
||||
— Viveris's library (LGPL, unchanged) —
|
||||
├── jtag_core/ TAP state machine, IR/DR shifts
|
||||
├── bsdl_parser/ .bsd loader
|
||||
├── bus_over_jtag/ SPI/I²C/MDIO/parallel mem bit-bang over EXTEST
|
||||
├── drivers/ FTDI, J-Link, Linux GPIO, LPT, Digilent (optional)
|
||||
├── script/ Script engine (40+ commands, the real UI)
|
||||
├── drivers/ FTDI, J-Link, Linux GPIO, LPT, Digilent (optional, dlopen)
|
||||
├── script/ Script engine (the real UI)
|
||||
├── config/ Built-in config.script
|
||||
├── os_interface/ Portable fs/network wrappers
|
||||
└── natsort/ Natural pin-name sorting
|
||||
├── natsort/ Natural pin-name sorting
|
||||
— new (this project) —
|
||||
├── fpga/ Registry loader (parses fpga_registry.yaml, libyaml)
|
||||
├── bscan/ JTAG TAP primitives (set_ir/shift_ir/shift_dr/tap_reset/
|
||||
│ idle_cycles) + BSCAN proxy (bitstream load, SPI-over-USER1)
|
||||
├── spi_flash/ SPI NOR chip DB + read/erase/program/verify over a callback
|
||||
├── svf/ SVF player (svf_play): SIR/SDR/RUNTEST/STATE, masked compare
|
||||
└── probes/ Probe-config profiles loader (parses probes.yaml, libyaml)
|
||||
fpga_registry.yaml FPGA registry (IDCODE → BSDL, IR opcodes, proxy, caveats, prog, max_tck)
|
||||
probes.yaml Probe-config profiles (defaults + per-probe overrides)
|
||||
bsdl_files/ BSDL files for target FPGAs
|
||||
bscan_proxies/ BSCAN proxy bitstreams (MIT, from quartiq)
|
||||
scripts/ Example scripts
|
||||
doc/ Tutorial and longer-form docs (doc/tutorial.md is the end-to-end walkthrough)
|
||||
libs/libftd2xx/ Vendored FTDI SDK
|
||||
@@ -49,10 +61,12 @@ Adding a feature usually means adding a new script command in
|
||||
| Phase | Module | Status | Summary |
|
||||
|-------|--------|--------|---------|
|
||||
| 1 | `bs/` cleanup, REPL polish, README | **done** (commit `7cb3627`) | Fix format-strings, delete dead code, tab-completion, banner |
|
||||
| 2 | `fpga/` | **done** (commit `545fe09`) | Per-target descriptor (IDCODE, BSDL, IR codes, proxy path, caveats). Compile-time registry. |
|
||||
| 2 | `fpga/` | **done** (commit `545fe09`) | Per-target descriptor (IDCODE, BSDL, IR codes, proxy path, caveats). Now a **runtime YAML** registry (`fpga_registry.yaml`, libyaml), later gaining `prog` method + `max_tck_khz`. |
|
||||
| 2.5 | `bscan/` | **done** (commit `dec0d14`) | Load BSCAN proxy bitstream via `CFG_IN`, expose fast `bscan_spi_xfer()` via `USER1`. Required for realistic flashing speeds. |
|
||||
| 3 | `spi_flash/` | **done** (commit `c4afe87`) | Chip DB (JEDEC ID → page/sector/cmd set) + generic `read/erase/program/verify` over an `xfer` callback. detect+read validated on KCU105; erase/program implemented but not yet hardware-tested. |
|
||||
| 4 | script commands | **done** (commit `d6f843e`) | `flash_detect`, `flash_read` (+file), `flash_erase`, `flash_write`, `flash_verify`. Full set validated on KCU105 (save/erase/write-random/verify/restore round-trip). ~100 KB/s write once the proxy is loaded. |
|
||||
| 5 | `probes/` + JTAG-link | **done** | `probes.yaml` probe-config profiles (`jtag_open <idx> <profile>`, `jtag_profiles`, `jtag_close`); driver-neutral `JTAG_TCK_FREQ_KHZ`/`JTAG_RTCK`; device `max_tck_khz` clock cap resolved at `jtag_autoinit`; `prog` method tag. See the config-strategy design note. Validated on the IGLOO2 (FlashPro). |
|
||||
| 6 | `svf/` | **done** (subset, commit `c77d86e`) | SVF player + `svf_play`: SIR/SDR with masked TDO compare, RUNTEST, STATE — single-device. Validated on the IGLOO2 IDCODE; a real Libero SVF and a generic `program` dispatch off the `prog` tag are still TODO. |
|
||||
|
||||
Move forward phase by phase: validate one with the user before starting
|
||||
the next. Don't break the validated path
|
||||
|
||||
Reference in New Issue
Block a user