Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions apps/website/src/pages/Licensing.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ const CORES = [
name: 'GF16 4×4 matmul',
tag: 'Matrix engine',
body: 'A matrix multiplier that carries its arithmetic entirely in logic — leaving the DSP columns free for the rest of your system, and porting cleanly to devices with few or no DSP blocks.',
proof: '323 MHz · 41.2 GOPS · 0 DSP48 · 0 latches, measured on a Xilinx Artix-7.',
proof: 'Synthesised for Artix-7: 32,252 LUTs with zero DSP48, or 21,223 LUTs using 64 DSP blocks. Combinational — no registers, so no frequency figure belongs to it.',
},
{
name: 'BPSK modem',
Expand Down Expand Up @@ -82,7 +82,7 @@ const RU = {
coresTitle: 'Доступные ядра',
cores: [
{ name: 'Умножитель GF-T', tag: 'Тернарная арифметика', body: 'Умножитель для GF-T — тернарного формата с плавающей точкой, который в бенчмарках лучший в классе (≈3–5.5× против сопоставимых форматов). Без декодирования режима, с нативной тернарной экспонентой.', proof: 'Опубликованный формат (arXiv:2606.05017) с независимой эталонной моделью и побитовыми тест-векторами.' },
{ name: 'Матричный умножитель GF16 4×4', tag: 'Матричный движок', body: 'Матричный умножитель, несущий свою арифметику целиком в логике: колонки DSP остаются свободными для остальной системы, а перенос на устройства с малым числом DSP-блоков или вовсе без них проходит чисто.', proof: '323 МГц · 41.2 GOPS · 0 DSP48 · 0 защёлок, измерено на Xilinx Artix-7.' },
{ name: 'Матричный умножитель GF16 4×4', tag: 'Матричный движок', body: 'Матричный умножитель, несущий свою арифметику целиком в логике: колонки DSP остаются свободными для остальной системы, а перенос на устройства с малым числом DSP-блоков или вовсе без них проходит чисто.', proof: 'Синтезировано под Artix-7: 32 252 LUT без единого DSP48 либо 21 223 LUT с 64 DSP-блоками. Комбинационный — регистров нет, поэтому частота ему не принадлежит.' },
{ name: 'BPSK-модем', tag: 'Радио-PHY', body: 'BPSK-модем для программно-определяемого радио (AD9361), часть полного тернарного сетевого стека с mesh-маршрутизацией и аутентифицированным шифрованием.', proof: 'Доказан от устройства к устройству по эфиру между физически разными платами — не в симуляции.' },
{ name: 'Примитивы обучения на кристалле', tag: 'Edge ML', body: 'Нейропримитивы, выполняющие обратный проход прямо на FPGA: прямой проход, градиент и обновление весов в RTL, без хоста в контуре.', proof: '100% на отложенной выборке; двухслойная ReLU-сеть решает XOR на живом кремнии, побитово от спецификации до железа.' },
],
Expand All @@ -109,7 +109,7 @@ const RU = {
export default function Licensing() {
const { lang } = useI18n()
const c = lang === 'ru' ? RU : null
usePageMeta("Core licensing", "License arithmetic cores that have already been measured on hardware: GF-T multiplier, GF16 matmul at 323 MHz with zero DSP blocks, BPSK modem proven over the air.")
usePageMeta("Core licensing", "License arithmetic cores with an independent reference model and the vectors that prove them: the GF-T multiplier, a GF16 4×4 matmul that fits in fabric with zero hard multipliers, and a BPSK modem proven over the air.")
return (
<main>
<QuantumBackground />
Expand Down
10 changes: 6 additions & 4 deletions apps/website/src/pages/Proof.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ const LINKS = {

const RESULTS = [
{
metric: '323 MHz · 41.2 GOPS',
metric: '21k LUT · 0 hard multipliers',
title: 'GF16 4×4 matmul on Artix-7',
body: 'A matrix multiplier carrying its arithmetic entirely in logic — 0 DSP48 blocks and 0 inferred latches, timing closed on a Xilinx Artix-7.',
how: 'Measured on hardware, not estimated from a report.',
body: 'A 4×4 matrix multiplier over my own GF16 format, synthesised for Artix-7. It fits in fabric with no hard multipliers at all — 32,252 LUTs and zero DSP48 — or 21,223 LUTs if the 64 DSP blocks are allowed. The block is purely combinational: it holds no registers, so it has no clock and no frequency figure belongs to it.',
how: 'Yosys synthesis for xc7, re-run 8 August 2026. Cell counts, not a timing result.',
},
{
metric: '100% held-out',
Expand Down Expand Up @@ -66,6 +66,7 @@ const NOT_CLAIMS = [
'Measurements come from one device family, a Xilinx Artix-7. They are not multi-corner characterisation and do not claim to be.',
'The on-chip training result is a proven primitive at small scale — a real network learning on real silicon, not a production training accelerator.',
'Anything estimated rather than measured is labelled as estimated, here and in every report I send.',
'This page previously reported 323 MHz and 41.2 GOPS for the GF16 matmul. Re-checking the RTL on 8 August 2026 showed the block holds no registers in any of its nine copies in my repositories, so it has no clock and no frequency can belong to it. The figure is withdrawn rather than explained away, and the synthesis numbers above replace it.',
]

// Russian copy. Other locales fall back to English rather than showing gaps.
Expand All @@ -77,7 +78,7 @@ const RU = {
ctaSource: 'Посмотреть исходники',
resultsTitle: 'Результаты',
results: [
{ metric: '323 МГц · 41.2 GOPS', title: 'Матричный умножитель GF16 4×4 на Artix-7', body: 'Умножитель, несущий свою арифметику целиком в логике: 0 блоков DSP48 и 0 выведенных защёлок, тайминг закрыт на Xilinx Artix-7.', how: 'Измерено на железе, а не оценено по отчёту.' },
{ metric: '21k LUT · 0 аппаратных умножителей', title: 'Матричный умножитель GF16 4×4 на Artix-7', body: 'Матричный умножитель 4×4 над собственным форматом GF16, синтезированный под Artix-7. Умещается в логику вообще без аппаратных умножителей — 32 252 LUT и ноль DSP48 — либо 21 223 LUT, если разрешить 64 DSP-блока. Блок чисто комбинационный: регистров в нём нет, а значит нет и тактовой, и никакая частота ему не принадлежит.', how: 'Синтез Yosys под xc7, перепроверено 8 августа 2026. Счёт ячеек, а не результат тайминга.' },
{ metric: '100% отложенная выборка', title: 'Нейросеть, обучающаяся прямо на FPGA', body: 'Прямой проход, градиент и обновление весов — всё в RTL, без хоста в контуре. Двухслойная ReLU-сеть учит XOR на самом кристалле, 4 из 4.', how: 'Каждый узел побитово — от спецификации до кремния.' },
{ metric: 'SKY130', title: 'Тейпаут через Tiny Tapeout', body: 'Тот же исходник, что работает на FPGA, ушёл в открытый ASIC-процесс: GDS получен, тест на уровне вентилей пройден, precheck пройден.', how: 'Полный путь от статьи на arXiv до изготовленного дизайна.' },
{ metric: '≈3–5.5×', title: 'GF-T против сопоставимых форматов', body: 'Тернарный формат с плавающей точкой собственной разработки, лучший в классе среди сопоставимых тернарных форматов на средней и дальней дистанции — без декодирования режима, с нативной тернарной экспонентой.', how: 'Опубликован с независимой эталонной моделью и тест-векторами.' },
Expand All @@ -97,6 +98,7 @@ const RU = {
'Измерения сняты на одном семействе устройств, Xilinx Artix-7. Это не многоугловая характеризация и не претендует ею быть.',
'Обучение на кристалле — доказанный примитив малого масштаба: настоящая сеть, обучающаяся на настоящем кремнии, а не продакшн-ускоритель обучения.',
'Всё, что оценено, а не измерено, помечено как оценка — и здесь, и в каждом отчёте, который я отправляю.',
'На этой странице раньше стояли 323 МГц и 41.2 GOPS для матмула GF16. Перепроверка RTL 8 августа 2026 показала, что во всех девяти копиях в моих репозиториях в этом блоке нет регистров — а значит нет тактовой, и никакая частота ему принадлежать не может. Цифра снята, а не объяснена, и заменена приведёнными выше числами синтеза.',
],
finalTitle: 'Проверьте сами',
finalLede: 'Статьи, исходники и полный пример отчёта — всё открыто. В этом и смысл: заявление, которое нельзя проверить, — просто предложение.',
Expand Down
36 changes: 26 additions & 10 deletions docs/verification/SAMPLE-REPORT.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,18 @@
| Check | Result |
|---|---|
| Functional conformance (bit-exact vs independent model) | **PASS** — all KAT vectors match |
| Timing closure at target frequency | **PASS** — 323 MHz achieved |
| Latch-free (no inferred latches) | **PASS** — 0 latches |
| DSP-block independence | **PASS** — 0 DSP48 used |
| Bitstream generated and loaded on hardware | **PASS** |
| Hardware execution matches simulation | **PASS** — bit-identical outputs |
| Hard-multiplier independence | **PASS** — 0 DSP48, by fabric mapping |
| Place and route on the target device | **PASS** |
| Timing | **not applicable** — this block is combinational |

**Verdict:** the design meets its specification bit-exactly and closes timing at the target
frequency on real silicon.
**Verdict:** the design meets its specification bit-exactly and implements on the target device
without hard multipliers.

> **On the missing frequency.** This particular block holds no registers, so it has no clock and
> no achieved-frequency figure can belong to it. An earlier version of this report quoted one; it
> was withdrawn on 8 August 2026 after re-checking the RTL. For a **sequential** design the report
> does carry achieved frequency from the router — see §5.2.

---

Expand Down Expand Up @@ -98,16 +102,28 @@ every step can be re-run by the client on their own machine.

| Metric | Value |
|---|---|
| Achieved frequency | **323 MHz** |
| Timing closure | met |
| Achieved frequency | **not applicable** — combinational block, no clock domain |
| Inferred latches | **0** |

For a design that does contain registers, this section reports the router's achieved frequency
for each clock domain, with the critical path listed. A worked example on a sequential
multiply-accumulate unit came out at **112.33 MHz** post-route on this device, with the critical
path through the accumulator adder.

One caveat learned the hard way and passed on: `nextpnr-xilinx` produces no frequency at all for
designs that use DSP48 blocks — it has no timing model through the hard block, so the
register-to-register path is broken and the tool reports `No clocks found in design` rather than a
number. Where that happens, this report says so instead of quoting something the tool never
computed.

### 5.3 Resources

| Resource | Used |
|---|---|
| DSP48 blocks | **0** |
| Logic | fits comfortably within XC7A200T |
| DSP48 blocks | **0** — with hard multipliers disabled |
| LUTs | **32,252** in that configuration; **21,223** if the 64 DSP blocks are allowed |
| Registers | **0** — the block is combinational |
| Device | fits comfortably within XC7A200T |

Zero DSP usage is a design property worth calling out: the arithmetic is carried entirely in
logic, which leaves the DSP columns free for the rest of the system and makes the core
Expand Down
Loading