Skip to content

Commit 6f1e26d

Browse files
docs: rewrite all prose for a plain human register
One editorial pass over the paper, all READMEs and docs/. No numbers, claims, qualifiers, links, commands, tables or code blocks changed (verified: numeric-token multisets identical per file, code fences and link targets byte-identical, both paper builds clean). What changed, uniformly: - em-dash chains -> ordinary punctuation (paper: 73 -> 7, the rest of the tree: prose now dash-free; survivors sit in table cells, code comments and the Figure 1 LaTeX block) - emphatic mid-sentence bold and rhetorical italics removed; bold now marks term introductions, table cells and status leads only - 'honest(ly)' framing (20+ uses), ALL-CAPS emphasis, emoji, seesaw 'not X but Y' constructions, staccato fragments and meta-commentary ('Reading the numbers:', 'Two comparisons.') replaced with plain sentences - abstract recast as First/Second/Third sentences; stacked-adjective taglines and marketing register ('vast headroom', 'where the savings live') replaced with stated facts Also fixes three leftovers in ntt-core/README.md: the design bullet still said the FSM was not yet formally verified (it is, fv_core.sby), a stale ~102 MHz figure, and a 1/3 list numbering gap. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 5f5df94 commit 6f1e26d

21 files changed

Lines changed: 772 additions & 761 deletions

File tree

README.md

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
# FoldNTT
22

33
<p align="center">
4-
<img src="docs/assets/foldntt-arch-3d.png" alt="FoldNTT 3D floor-plan model of the accelerator" width="440"><br/>
5-
<sub><i>FoldNTT as a 3D floor-plan (generated by <a href="https://github.com/NyxFoundation">visually-3d</a>, grounded in the real RTL): copper <b>K-RED</b> multipliers (1 DSP each, not 3), the half-size ψ-fold ROM, the banked coefficient memory and the control/verification blocks the view in which the ψ-fold idea was first spotted.</i></sub>
4+
<img src="docs/assets/foldntt-arch-3d.png" alt="FoldNTT 3D floor-plan model of the accelerator" width="440"><br/>
5+
<sub><i>FoldNTT as a 3D floor-plan (generated by <a href="https://github.com/NyxFoundation">visually-3d</a>, grounded in the real RTL): copper K-RED multipliers (1 DSP each, not 3), the half-size ψ-fold ROM, the banked coefficient memory and the control/verification blocks. This is the view in which the ψ-fold idea was first spotted.</i></sub>
66
</p>
77

88
[![verify](https://github.com/NyxFoundation/FoldNTT/actions/workflows/verify.yml/badge.svg)](https://github.com/NyxFoundation/FoldNTT/actions/workflows/verify.yml)
99

10-
**A new, formally-verified, DSP-minimal NTT accelerator for Falcon / Proth
11-
primes — with an on-board Basys 3 demo, entirely Vivado-free.**
10+
A formally verified NTT accelerator for Falcon / Proth primes, with an
11+
on-board Basys 3 demo and a Vivado-free toolchain.
1212

13-
*Why "Fold"?* Both core ideas **fold**: **K-RED** folds modular reduction into
14-
shift-adds (one multiplier per butterfly instead of three), and the **ψ-fold**
15-
twiddle ROM folds the table in half (a shift-add derives the other half). Every
16-
module is proven equal to its mathematical spec with z3 + SymbiYosys, and the
17-
whole core runs end-to-end on a real FPGA.
13+
The name comes from the two core ideas, both of which fold something: K-RED
14+
folds modular reduction into shift-adds (one multiplier per butterfly instead
15+
of three), and the ψ-fold twiddle ROM folds the table in half (a shift-add
16+
derives the other half). Every module is proven equal to its mathematical
17+
spec with z3 + SymbiYosys, and the whole core runs end-to-end on a real FPGA.
1818

19-
FoldNTT began as a formal-verification study of the released **CFNTT** radix-2
19+
FoldNTT began as a formal-verification study of the released CFNTT radix-2
2020
accelerator ([xiang-rc/cfntt_ref](https://github.com/xiang-rc/cfntt_ref), Chen
21-
et al., TCHES 2022) — that study *found a real bug* in its inverse transform
22-
and grew into an own-FSM architecture that fixes it and is DSP-lean by design.
21+
et al., TCHES 2022). That study found a bug in the inverse transform; the
22+
project became an own-FSM architecture that fixes it with fewer multipliers.
2323

2424
## Architecture
2525

26-
The whole accelerator is **one butterfly working in place**: a control FSM
27-
walks the transform (stages → groups → butterflies), reading two coefficients
28-
and a twiddle each step, and writing the two results straight back. The two
29-
🟡 **folds**the K-RED butterfly and the ψ-fold ROM — are where the savings
30-
live.
26+
The accelerator is one butterfly working in place: a control FSM walks the
27+
transform (stages → groups → butterflies), reading two coefficients and a
28+
twiddle each step and writing the two results straight back. The two folds,
29+
the K-RED butterfly and the ψ-fold ROM (highlighted in the diagrams), provide
30+
the DSP and ROM savings.
3131

3232
```mermaid
3333
flowchart LR
@@ -50,10 +50,10 @@ flowchart LR
5050
class BF,ROM fold;
5151
```
5252

53-
Inside the butterfly, one **K-RED** multiplier replaces the reference's three
54-
(the extra two Barrett multipliers become shift-adds), and the per-stage `×½`
55-
gate on the inverse pathfused from the same twiddle — is the fix for the
56-
bug we found:
53+
Inside the butterfly, one K-RED multiplier replaces the reference's three
54+
(the two extra Barrett multipliers become shift-adds). The per-stage `×½`
55+
gate on the inverse path, fused from the same twiddle, fixes the bug we
56+
found:
5757

5858
```mermaid
5959
flowchart LR
@@ -71,20 +71,20 @@ flowchart LR
7171
class MUL,HALF fold;
7272
```
7373

74-
*Block folder:* the butterfly is [`kred-butterfly/`](kred-butterfly/), the
74+
Block to folder: the butterfly is [`kred-butterfly/`](kred-butterfly/), the
7575
twiddle ROM is [`psi-fold-rom/`](psi-fold-rom/), and the FSM + RAM + on-board
76-
self-test are [`ntt-core/`](ntt-core/). (The paper's Fig. 1 in [`docs/`](docs/)
77-
is the same butterfly at gate/register level.)
76+
self-test are [`ntt-core/`](ntt-core/). The paper's Fig. 1 in [`docs/`](docs/)
77+
shows the same butterfly at gate/register level.
7878

79-
## Inventions (one folder each)
79+
## Inventions
8080

8181
| Folder | Invention | Verified | Result |
8282
|---|---|---|---|
8383
| [`kred-butterfly/`](kred-butterfly/) | 1-multiplier **K-RED** butterfly (shift-add reduction; fuses the inverse-transform halving) | z3 full-domain + SymbiYosys | **3→1 DSP** / butterfly |
84-
| [`psi-fold-rom/`](psi-fold-rom/) | **ψ-fold** twiddle ROM stores half the words, shift-add derives the rest | z3 + SbY miter vs shipped ROM | **−50%** stored bits |
84+
| [`psi-fold-rom/`](psi-fold-rom/) | **ψ-fold** twiddle ROM: stores half the words, shift-add derives the rest | z3 + SbY miter vs shipped ROM | **−50%** stored bits |
8585
| [`ntt-core/`](ntt-core/) | the **architecture**: own-FSM banked core + Basys 3 self-test | iverilog round-trip + golden cross-check | `INTT(NTT(x))==x`; 1 DSP, 1 BRAM |
8686
| [`generator/`](generator/) | generalization to **any Proth prime** (Falcon + Kyber) | exhaustive on Kyber q=3329 | one core, many primes |
87-
| [`fpga/`](fpga/) | open FPGA flowarea, post-route **Fmax**, bitstream (openXC7) | CI | ~136 MHz core, no Vivado |
87+
| [`fpga/`](fpga/) | open FPGA flow: area, post-route Fmax, bitstream (openXC7) | CI | ~136 MHz core, no Vivado |
8888
| [`verification/`](verification/) | the CFNTT reference proofs, the bug finding, mutation non-vacuity | z3 + SbY, CI | bug reported upstream |
8989
| [`docs/`](docs/) | the paper (single-column + IEEE two-column builds) | | |
9090
| `cfntt_ref/` | the upstream CFNTT reference (git submodule) | | ground truth |
@@ -115,14 +115,14 @@ openFPGALoader -b basys3 ntt-core/build/design.bit # LED1 = self-test PASS
115115

116116
## Results (measured, CI-reproducible)
117117

118-
- **DSP** 3→1 per butterfly; whole shipped core **1 DSP, 1 BRAM**, ~136 MHz
119-
(open-flow, Artix-7 xc7a100t) — the K-RED multiplier is Fmax-neutral.
118+
- **DSP** 3→1 per butterfly; the whole shipped core uses 1 DSP and 1 BRAM at
119+
~136 MHz (open flow, Artix-7 xc7a100t). The K-RED multiplier is Fmax-neutral.
120120
- **Twiddle ROM** −50% stored bits (ψ-fold), proven equal to the shipped table.
121121
- **Correctness** the own-FSM core round-trips `INTT(NTT(x))==x` and its NTT
122122
matches the golden reference bit-for-bit; the reference's inverse-transform
123-
bug (missing per-stage halving) was found *by verifying* and reported upstream.
124-
- **Open toolchain** synthesis → place-and-route → **bitstream** with no Vivado
123+
bug (missing per-stage halving) was found by verification, reported upstream.
124+
- **Open toolchain** synthesis → place-and-route → bitstream with no Vivado
125125
(yosys + openXC7 nextpnr-xilinx + prjxray).
126126

127127
See [`docs/`](docs/) for the paper and [`docs/venue-assessment.md`](docs/venue-assessment.md)
128-
for an honest submission strategy.
128+
for the submission strategy.

docs/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# docs/ — paper materials
22

3-
Living write-up of the two verified inventions (`../verification/`), building
3+
Write-up of the two verified inventions (`../verification/`), building
44
toward a submission. Produced phase-by-phase by an autonomous loop; every
55
claim traces to a CI-reproducible script.
66

@@ -12,7 +12,7 @@ claim traces to a CI-reproducible script.
1212
| `evaluation.md` | system-sim results + synthesis cost table (PnR TODO) |
1313
| `generalization.md` | Proth-prime generator; Falcon + Kyber instances |
1414
| `paper/paper.md` | full manuscript draft (section TODOs + refs inline) |
15-
| `venue-assessment.md` | honest where-to-submit / what-level analysis |
15+
| `venue-assessment.md` | where-to-submit / what-level analysis |
1616

1717
Status: draft complete; open items in `paper-plan.md` → "Remaining before
1818
submission" (background prose, bibliography, one prior-work diff, whole-core

docs/artifact.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Artifact appendix
22

3-
Everything in the paper is reproducible from this repository. The claims and
4-
the scripts that regenerate them:
3+
Everything in the paper is reproducible from this repository. Each claim
4+
maps to the script that regenerates it:
55

66
| Paper claim | Reproduce with |
77
|---|---|

0 commit comments

Comments
 (0)