Skip to content

Commit 2b53a83

Browse files
docs(readme): Results leads with the performance chart
The DSP / twiddle-ROM / Fmax bullets become one dark-theme bar chart (docs/assets/results-summary.png, same data as the paper's Fig. 3, normalized to the reference core), matching the README's other visuals. The chart's TikZ source is committed next to it with rebuild instructions. Bullets that don't chart — correctness, open toolchain, license — stay. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 03010be commit 2b53a83

3 files changed

Lines changed: 43 additions & 5 deletions

File tree

README.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,17 @@ openFPGALoader -b basys3 ntt-core/build/design.bit # LED1 = self-test PASS
147147

148148
## Results (measured, CI-reproducible)
149149

150-
- **DSP** 3→1 per butterfly; the whole shipped core uses 1 DSP and 1 BRAM at
151-
~136 MHz (open flow, Artix-7 xc7a100t). The K-RED multiplier is Fmax-neutral.
152-
- **Twiddle ROM** −50% stored bits (ψ-fold), proven equal to the shipped table.
153-
- **Correctness** the own-FSM core round-trips `INTT(NTT(x))==x` and its NTT
150+
<p align="center">
151+
<img src="docs/assets/results-summary.png" alt="FoldNTT vs the reference core, normalized to the reference (100%)" width="88%"><br/>
152+
<sub><i>Open flow (yosys + openXC7 nextpnr-xilinx), Artix-7 xc7a100t. The whole
153+
shipped core uses 1 DSP and 1 BRAM; the ψ-fold ROM is proven equal to the
154+
shipped table at every address.</i></sub>
155+
</p>
156+
157+
- **Correctness**: the own-FSM core round-trips `INTT(NTT(x))==x` and its NTT
154158
matches the golden reference bit-for-bit; the reference's inverse-transform
155159
bug (missing per-stage halving) was found by verification, reported upstream.
156-
- **Open toolchain** synthesis → place-and-route → bitstream with no Vivado
160+
- **Open toolchain**: synthesis → place-and-route → bitstream with no Vivado
157161
(yosys + openXC7 nextpnr-xilinx + prjxray).
158162
- MIT-licensed throughout (the upstream `cfntt_ref` submodule is also MIT).
159163

docs/assets/results-bars.tex

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
% Source for docs/assets/results-summary.png (README Results chart).
2+
% Rebuild: xelatex results-bars.tex && magick -density 300 results-bars.pdf \
3+
% -background '#0d1117' -flatten results-summary.png
4+
% Data = docs/paper/paper.md Fig. 3 (fpga/fpga_cost*.sh + fmax*.sh outputs).
5+
\documentclass[border=14pt]{standalone}
6+
\usepackage{fontspec}
7+
\setmainfont{DejaVu Sans}
8+
\usepackage{tikz}
9+
\definecolor{bg}{HTML}{0d1117}
10+
\definecolor{track}{HTML}{21262d}
11+
\definecolor{trackline}{HTML}{30363d}
12+
\definecolor{bar}{HTML}{4493f8}
13+
\definecolor{fg}{HTML}{e6edf3}
14+
\definecolor{muted}{HTML}{9198a1}
15+
\pagecolor{bg}
16+
\begin{document}
17+
\begin{tikzpicture}[font=\small]
18+
\newcommand{\perfbar}[4]{%
19+
\draw[fill=track, draw=trackline] (0,#1) rectangle (6.0,#1+0.42);
20+
\draw[fill=bar, draw=bar] (0,#1) rectangle (#2,#1+0.42);
21+
\node[anchor=east, text=fg] at (-0.18,#1+0.21) {#3};
22+
\node[anchor=west, text=muted] at (6.15,#1+0.21) {#4};}
23+
\node[anchor=west, text=fg, font=\small\bfseries] at (-3.4,4.55)
24+
{FoldNTT streaming retrofit vs the reference core};
25+
\perfbar{3.05}{2.00}{DSP48 per butterfly}{33\%\; (3 $\to$ 1)}
26+
\perfbar{2.25}{3.00}{stored twiddle bits}{50\%}
27+
\perfbar{1.45}{4.76}{ENS area score}{79\%\; (969 $\to$ 769)}
28+
\perfbar{0.65}{5.96}{whole-core Fmax}{99\%\; ($\sim$137 $\to$ $\sim$136 MHz)}
29+
\draw[muted, dashed] (6.0,0.45) -- (6.0,3.70)
30+
node[above, text=muted, font=\footnotesize] {reference = 100\%};
31+
\node[anchor=west, text=muted, font=\footnotesize] at (-3.4,0.02)
32+
{lower is better for the first three bars; same function, inverse transform corrected};
33+
\end{tikzpicture}
34+
\end{document}

docs/assets/results-summary.png

23.9 KB
Loading

0 commit comments

Comments
 (0)