Skip to content
Open
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
import type { Block } from '../types'

export const body: Block[] = [
{
kind: 'p',
text: '[Measured] A number is not a comparison until its measurement passport travels with it. Our isolated GFTernary decoder measured 66 LUT at 974.66 MHz on a Xilinx Artix-7 XC7A200T on the ALINX AX7203 board.'
},
{
kind: 'p',
text: 'The result came from the open flow recorded in the source: Yosys 0.65, nextpnr-xilinx 1743d0f and Icarus Verilog 13.0; the reported figure is the median of five seeds, with DSP inference disabled. This is an isolated decoder, not a complete inference system.'
},
{
kind: 'h',
text: 'The baseline belongs on the same line'
},
{
kind: 'p',
text: 'The same source records a bare-wire baseline on the same part: 112 LUT at 827.81 MHz. The 66-LUT result is therefore a property of this decoder, this downstream register and this synthesis flow. It is not a claim that a ternary datapath has a universal area advantage.'
},
{
kind: 'table',
head: ['Passport field', 'Recorded value'],
rows: [
['Part and board', 'Xilinx Artix-7 XC7A200T; ALINX AX7203'],
['Flow', 'Yosys 0.65; nextpnr-xilinx 1743d0f; Icarus Verilog 13.0'],
['Statistic', 'Median of five seeds'],
['DSP inference', 'Disabled'],
['Baseline', 'Bare wire on the same part: 112 LUT at 827.81 MHz'],
['Measured object', 'Isolated GFTernary decoder, not a system'],
]
},
{
kind: 'h',
text: 'A second measurement limits the first'
},
{
kind: 'p',
text: '[Measured] An APoT sweep in the same project produced 130, 380, 230 and 384 LUT at shift widths 2 through 5. The sequence is non-monotone. That makes a small gap between two synthesis points unsafe as a general area claim; a single logic-synthesis count is not a substitute for a post-route or device-level comparison.'
},
{
kind: 'h',
text: 'What the receipt proves'
},
{
kind: 'ul',
items: [
'It records one reproducible isolated-decoder result: 66 LUT at 974.66 MHz on the named FPGA part and open toolchain.',
'It records a same-part baseline, so the reader can see what was compared rather than only the headline number.',
'It records the non-monotone APoT sweep instead of smoothing away an inconvenient tool behaviour.'
]
},
{
kind: 'h',
text: 'What it does not prove'
},
{
kind: 'ul',
items: [
'We have no own tokens-per-second measurement on AX7203 or another board in this post.',
'An isolated decoder is not a complete model, memory system, prefill path or decode path.',
'The result is not a cross-device characterisation and does not compare a takum implementation in the same flow.',
'No claim about an ASIC, fabricated die, power or system throughput follows from these LUT and frequency figures.'
]
},
{
kind: 'p',
text: 'For an engineer, the practical rule is simple: put the part, board, toolchain, seed statistic, disabled features, same-part baseline and measured object next to every hardware number. Without those fields, a tok/s headline cannot be reproduced or fairly compared.'
}
]

export const ruBody: Block[] = [
{
kind: 'p',
text: '[Измерено] Число ещё не является сравнением, пока рядом с ним не опубликован паспорт замера. Для изолированного декодера GFTernary измерено 66 LUT при 974,66 МГц на Xilinx Artix-7 XC7A200T на плате ALINX AX7203.'
},
{
kind: 'p',
text: 'В исходнике зафиксирован открытый поток: Yosys 0.65, nextpnr-xilinx 1743d0f и Icarus Verilog 13.0; приведена медиана пяти seed, инференс DSP выключен. Это изолированный декодер, а не законченная система инференса.'
},
{
kind: 'h',
text: 'Базовая линия должна стоять в той же строке'
},
{
kind: 'p',
text: 'Тот же источник даёт базовую линию голого провода на той же части: 112 LUT при 827,81 МГц. Поэтому результат 66 LUT — свойство этого декодера, downstream-регистра и этого потока синтеза. Это не заявление об универсальном преимуществе троичного датапути по площади.'
},
{
kind: 'table',
head: ['Поле паспорта', 'Зафиксированное значение'],
rows: [
['Часть и плата', 'Xilinx Artix-7 XC7A200T; ALINX AX7203'],
['Поток', 'Yosys 0.65; nextpnr-xilinx 1743d0f; Icarus Verilog 13.0'],
['Статистика', 'Медиана пяти seed'],
['Инференс DSP', 'Выключен'],
['Базовая линия', 'Голый провод на той же части: 112 LUT при 827,81 МГц'],
['Измеряемый объект', 'Изолированный декодер GFTernary, не система'],
]
},
{
kind: 'h',
text: 'Второй замер ограничивает первый'
},
{
kind: 'p',
text: '[Измерено] Развёртка APoT в том же проекте дала 130, 380, 230 и 384 LUT при ширинах сдвига от 2 до 5. Последовательность немонотонна. Поэтому небольшую разницу между двумя точками синтеза нельзя превращать в общее заявление о площади; один логический синтез не заменяет сравнение после разводки или на устройстве.'
},
{
kind: 'h',
text: 'Что подтверждает квитанция'
},
{
kind: 'ul',
items: [
'Один воспроизводимый результат для изолированного декодера: 66 LUT при 974,66 МГц на названной FPGA и открытом тулчейне.',
'Базовая линия на той же части, чтобы читатель видел не только заголовочное число, но и объект сравнения.',
'Немонотонная APoT-развёртка, опубликованная без сглаживания неудобного поведения инструмента.'
]
},
{
kind: 'h',
text: 'Чего это не доказывает'
},
{
kind: 'ul',
items: [
'Собственного измерения токенов в секунду на AX7203 или другой плате в этом посте нет.',
'Изолированный декодер не является полной моделью, системой памяти, prefill-трактом или decode-трактом.',
'Это не многоугловая характеризация и не сравнение реализации takum в том же потоке.',
'Из LUT и частоты нельзя выводить заявления об ASIC, изготовленном кристалле, мощности или пропускной способности системы.'
]
},
{
kind: 'p',
text: 'Практическое правило для инженера простое: рядом с каждым аппаратным числом указывать часть, плату, тулчейн, статистику seed, выключенные функции, базовую линию на той же части и измеряемый объект. Без этих полей заголовок tok/s нельзя воспроизвести или честно сравнить.'
}
]
29 changes: 29 additions & 0 deletions apps/website/src/data/blog/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,35 @@ import type { PostMeta } from './types'

/** Индекс блога: список и метаданные без тяжёлых тел публикаций. */
export const postsIndex: PostMeta[] = [
{
slug: 'a-measurement-number-needs-a-passport',
title: 'A measurement number needs its passport',
summary: '[Measured] An isolated GFTernary decoder is recorded at 66 LUT and 974.66 MHz on an Artix-7 XC7A200T, with its toolchain, seed statistic and same-part baseline. The receipt does not claim tokens per second or system throughput.',
date: '2026-09-13',
readingMinutes: 6,
tags: ['FPGA', 'Measurement', 'Reproducibility', 'GFTernary'],
receipts: [
{ label: 'Canonical source: gHashTag/trinity tnf.ts at commit 453fe953', href: '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/gHashTag/trinity/blob/453fe953372db51052e007334b69c9dbed595218/apps/website/src/content/tnf.ts' },
{ label: 'Source commit: website measurement passport and toolchain receipt', href: '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/gHashTag/trinity/commit/453fe953372db51052e007334b69c9dbed595218' },
],
openQuestions: [
'The post records an isolated decoder, not tokens per second, end-to-end inference, power, memory bandwidth or a full model.',
'The result is tied to one FPGA family and one open flow; cross-device and vendor-flow comparisons were not performed here.',
'A same-flow takum implementation was not synthesised beside this decoder.',
'The non-monotone APoT sweep is a warning about the measurement flow, not a model of all FPGA implementations.'
],
published: true,
ru: {
title: 'Аппаратному числу нужен паспорт замера',
summary: '[Измерено] Для изолированного декодера GFTernary зафиксированы 66 LUT и 974,66 МГц на Artix-7 XC7A200T, вместе с тулчейном, статистикой seed и базовой линией на той же части. Квитанция не заявляет токены в секунду или пропускную способность системы.',
openQuestions: [
'В посте записан изолированный декодер, а не токены в секунду, сквозной инференс, мощность, полоса памяти или целая модель.',
'Результат относится к одной семье FPGA и одному открытому потоку; сравнения между устройствами и с вендорским потоком здесь не проводились.',
'Реализация takum в том же потоке рядом с декодером не синтезировалась.',
'Немонотонная APoT-развёртка предупреждает о свойствах потока замера, а не является моделью всех реализаций на FPGA.'
]
}
},
{
slug: 'the-fpga-row-was-corrected',
title: 'The FPGA row was corrected before it became evidence',
Expand Down
2 changes: 2 additions & 0 deletions apps/website/src/data/blog/posts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { body as body_one_saturation_rule_five_artefacts, ruBody as ruBody_one_s
import { body as body_ninety_tests_were_unreachable, ruBody as ruBody_ninety_tests_were_unreachable } from './bodies/ninety-tests-were-unreachable'
import { body as body_four_languages_one_tri_extension, ruBody as ruBody_four_languages_one_tri_extension } from './bodies/four-languages-one-tri-extension'
import { body as body_the_fpga_row_was_corrected, ruBody as ruBody_the_fpga_row_was_corrected } from './bodies/the-fpga-row-was-corrected'
import { body as body_a_measurement_number_needs_a_passport, ruBody as ruBody_a_measurement_number_needs_a_passport } from './bodies/a-measurement-number-needs-a-passport'
import type { Post, PostBody } from './types'
import { body as body_the_only_stable_speed_belonged_to_the_tool, ruBody as ruBody_the_only_stable_speed_belonged_to_the_tool } from './bodies/the-only-stable-speed-belonged-to-the-tool'
import { body as body_queen_review_lifecycle_queues, ruBody as ruBody_queen_review_lifecycle_queues } from './bodies/queen-review-lifecycle-queues'
Expand Down Expand Up @@ -71,6 +72,7 @@ import { body as body_real_value_in_integer_container, ruBody as ruBody_real_val
import { body as body_one_commit_nine_workflow_outcomes, ruBody as ruBody_one_commit_nine_workflow_outcomes } from './bodies/one-commit-nine-workflow-outcomes'

const bodies: Record<string, PostBody> = {
'a-measurement-number-needs-a-passport': { body: body_a_measurement_number_needs_a_passport, ruBody: ruBody_a_measurement_number_needs_a_passport },
'the-fpga-row-was-corrected': { body: body_the_fpga_row_was_corrected, ruBody: ruBody_the_fpga_row_was_corrected },
'signal-health-self-run32': { body: body_signal_health_self_run32, ruBody: ruBody_signal_health_self_run32 },
'queen-phone-orientation-gate': { body: body_queen_phone_orientation_gate, ruBody: ruBody_queen_phone_orientation_gate },
Expand Down
Loading