From a6d5c728998550caaedd4a5437fa3dbb8dc37c63 Mon Sep 17 00:00:00 2001 From: Dmitrii Vasilev Date: Sat, 8 Aug 2026 18:10:11 +0700 Subject: [PATCH] Finish the withdrawal: the figure was on four more pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The first pass caught the evidence and licensing pages. Grepping the bundle rather than trusting the diff found it still shipping from the service page's proof strip, the about page's achievements list, and module 05 of the course, in both languages — six more strings. Module 05 no longer promises a frequency at all. It now teaches the thing that is actually true and more useful: that a hard multiplier in the path can leave you with no frequency report whatsoever, because the router has no timing model through the block. Verified by grepping the served bundle, not the source: the only remaining occurrences are inside the two withdrawal notices. Co-Authored-By: Claude Opus 5 --- apps/website/src/pages/AboutAuthor.tsx | 2 +- apps/website/src/pages/Course.tsx | 4 ++-- apps/website/src/pages/HardwareVerification.tsx | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/website/src/pages/AboutAuthor.tsx b/apps/website/src/pages/AboutAuthor.tsx index 92b07bfd44..9cc1a64ac6 100644 --- a/apps/website/src/pages/AboutAuthor.tsx +++ b/apps/website/src/pages/AboutAuthor.tsx @@ -159,7 +159,7 @@ const DEFAULT_BIO = [ const DEFAULT_ACHIEVEMENTS = [ 'On-FPGA neural training — verified primitives that train themselves on-chip: 100% held-out accuracy, with the whole spec → silicon path bit-exact.', - 'GF16 4×4 matmul — 323 MHz, 41.2 GOPS, 0 DSP48, 0 latches on a Xilinx Artix-7, with clean timing sign-off.', + 'GF16 4×4 matmul — maps into Xilinx Artix-7 fabric with 0 DSP48 and 0 latches: 32,252 LUTs, or 21,223 with the hard multipliers allowed.', 'Silicon confirmed — TinyTapeout SKY130 ASIC: GDS, gate-level test, and precheck all passing.', 'Per-node bit-exact verification — every RTL node checked against an independent Python golden model (iverilog + KAT vectors), catching spec/RTL divergence before synthesis.', 'tri-net — a full ternary network stack (133 .t27 specs): GF16 PHY, a BPSK modem over AD9361, mesh routing, and AEAD crypto — proven device-to-device over the air.', diff --git a/apps/website/src/pages/Course.tsx b/apps/website/src/pages/Course.tsx index 816086f524..52c12b11d0 100644 --- a/apps/website/src/pages/Course.tsx +++ b/apps/website/src/pages/Course.tsx @@ -16,7 +16,7 @@ const MODULES = [ { n: '02', title: 'Exactly as much Verilog as you need', body: 'Synchronous design, registers versus latches, and why an accidental latch is the classic bug that only shows up on silicon. Your first module and testbench.' }, { n: '03', title: 'Arithmetic — the foundation of ML in hardware', body: 'Why floating point is expensive, what quantisation really costs, and where ternary and low-precision formats come from. GF-T and the BitNet wave, explained from the inside.' }, { n: '04', title: 'Bit-exact verification (the heart of the course)', body: 'An independent reference model in Python, KAT vectors per stage, cross-checked through iverilog. Why a testbench written from the same assumptions as the design will happily agree with the bug.' }, - { n: '05', title: 'A matrix multiplier that closes timing', body: 'MAC to array to pipeline. Reading timing reports and fighting for frequency, using a real case: 323 MHz, 41.2 GOPS, zero DSP blocks.' }, + { n: '05', title: 'A matrix multiplier that closes timing', body: 'MAC to array to pipeline. Reading the router’s timing report and fighting for frequency on a real case — including why a hard multiplier in the path can leave you with no frequency report at all.' }, { n: '06', title: 'Neural network inference on the FPGA', body: 'Layers, activations, dataflow and on-chip memory — running on the board, not in a simulator.' }, { n: '07', title: 'Training on-chip (the capstone)', body: 'Backward pass and SGD in RTL. The network learns XOR on the FPGA itself — 4/4, bit-exact against the reference. Almost nobody has built this by hand.' }, { n: '08', title: 'Onward to silicon', body: 'The Tiny Tapeout path: preparing a design, what changes between FPGA and ASIC, and where the open-silicon ecosystem stands after the move to IHP.' }, @@ -64,7 +64,7 @@ const RU = { { n: '02', title: 'Verilog ровно столько, сколько нужно', body: 'Синхронный дизайн, регистры против защёлок и почему случайная защёлка — классический баг, который вылезает только на кремнии. Первый модуль и тестбенч.' }, { n: '03', title: 'Арифметика — фундамент ML в железе', body: 'Почему float дорог, чего на самом деле стоит квантизация и откуда берутся тернарные и низкоразрядные форматы. GF-T и волна BitNet — изнутри.' }, { n: '04', title: 'Побитовая верификация (сердце курса)', body: 'Независимая эталонная модель на Python, KAT-векторы по ступеням, сверка через iverilog. Почему тестбенч, написанный из тех же предпосылок, что и дизайн, радостно соглашается с багом.' }, - { n: '05', title: 'Матричный умножитель, который закрывает тайминг', body: 'MAC → массив → конвейер. Чтение отчётов и борьба за частоту на реальном примере: 323 МГц, 41.2 GOPS, ноль DSP-блоков.' }, + { n: '05', title: 'Матричный умножитель, который закрывает тайминг', body: 'MAC → массив → конвейер. Чтение отчёта разводчика о тайминге и борьба за частоту на реальном примере — включая то, почему аппаратный умножитель в тракте может оставить вас вообще без отчёта о частоте.' }, { n: '06', title: 'Инференс нейросети на FPGA', body: 'Слои, активации, потоки данных и память на кристалле — работающие на плате, а не в симуляторе.' }, { n: '07', title: 'Обучение на кристалле (капстоун)', body: 'Обратный проход и SGD в RTL. Сеть учит XOR прямо на FPGA — 4 из 4, побитово против эталона. Руками это почти никто не делал.' }, { n: '08', title: 'Дальше — на кремний', body: 'Путь Tiny Tapeout: подготовка дизайна, что меняется между FPGA и ASIC, и где сейчас открытая кремниевая экосистема после перехода на IHP.' }, diff --git a/apps/website/src/pages/HardwareVerification.tsx b/apps/website/src/pages/HardwareVerification.tsx index f8ba1aba87..29c862b4c9 100644 --- a/apps/website/src/pages/HardwareVerification.tsx +++ b/apps/website/src/pages/HardwareVerification.tsx @@ -89,7 +89,7 @@ const TIERS = [ ] const PROOF = [ - ['323 MHz · 41.2 GOPS', 'GF16 4×4 matmul on Xilinx Artix-7 — 0 DSP48, 0 latches.'], + ['32,252 LUT · 0 DSP48', 'A GF16 4×4 matmul that maps into Artix-7 fabric with no hard multipliers at all — 21,223 LUTs if the 64 DSP blocks are allowed. Combinational, 0 latches.'], ['100% held-out', 'A neural network that trains itself on the FPGA — bit-exact from spec to silicon.'], ['SKY130 silicon', 'Taped out through Tiny Tapeout: GDS, gate-level test and precheck passed.'], ['83 formats', 'Published bit-exact conformance vectors for FP8, BF16, MXFP4 and microscaling.'], @@ -144,7 +144,7 @@ const RU = { proofTitle: 'Почему числам можно верить', proofLede: 'Этот пайплайн я построил для собственной работы — тернарный формат чисел прошёл путь от статьи на arXiv до работающего кремния, с побитовой проверкой на каждом шаге.', proof: [ - ['323 МГц · 41.2 GOPS', 'GF16 4×4 matmul на Artix-7 — 0 DSP48, 0 защёлок.'], + ['32 252 LUT · 0 DSP48', 'Матричный умножитель GF16 4×4 умещается в логику Artix-7 вообще без аппаратных умножителей — 21 223 LUT, если разрешить 64 DSP-блока. Комбинационный, 0 защёлок.'], ['100% held-out', 'Нейросеть, обучающаяся прямо на FPGA — путь спека→кремний побитово точен.'], ['Кремний SKY130', 'ASIC через TinyTapeout: GDS ✅ · gate-level тест ✅ · precheck ✅.'], ['83 формата', 'Опубликованные побитовые векторы соответствия для FP8, BF16, MXFP4 и microscaling.'],