

DekatronPC - vacuum tube and cold-cathode tube based computer
- Size
- 224.2 × 153.7 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 196
- Nets
- 107
- Pads
- 576
- Tracks, vias
- 1,062, 14
- Pours
- 3
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 16 Feb 2020
- Updated
- 5 Nov 2026
Overview
Stand is an open-source printed circuit board by radiolok, from the radiolok/dekatronpc repository on GitHub. It is a 2-layer board of 224.2 × 153.7 mm with 196 parts on 107 nets, routed with 1,062 tracks and 14 vias.
It is built around the TL494, L7812ABV and LM317AT, with the LM337SP, HER108 and BC327 among its other parts. Its parts include 54 resistors, 48 diodes, 36 capacitors, 21 transistors and 15 connectors.
Main components
8TL494
SOP-160℃~+70℃ 1kHz~300kHz 250mA 6mA Built-in LDO regulator External SOP-16 DC-DC Converters ROHSJSMSEMIDC-DC ConvertersL7812ABV
TO-220-40℃~+125℃@(Tj) 1 12V 1A 27V 2V@(1A) 4.4mA 60dB@(120Hz) Fixed Over Current Protection、Over Temperature Protection、Short Circuit Protection Positive TO-220 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSSTMicroelectronicsVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsLM317AT
TO-220-40℃~+125℃ 0.003%Vout 1 1.25V~37V 1.5A 40V 80dB@(120Hz) Adjustable Over Current Protection、Short Circuit Protection Positive TO-220 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSTexas InstrumentsVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsLM337SP
TO-2200.003%Vout 0℃~+125℃@(Tj) 1 1.2V~37V 1.5A 77dB@(120Hz) Adjustable Negative Over Current Protection、Thermal shutdown TO-220 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSSTMicroelectronicsVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsHER108
DO-41-65℃~+150℃ 1.7V@1A 1A 1kV 5uA@1kV 70ns DO-41 Fast Recovery / High Efficiency Diodes ROHSMDDHigh Effic RectifierBC327
TO-921 PNP 100MHz 45V 5V 625mW 630 700mV 800mA PNP TO-92 Bipolar (BJT) ROHSDDFBipolar (BJT)BC337
TO-92-31 NPN 100 100MHz 100nA 45V 5V 625mW 700mV 800mA NPN TO-92-3 Bipolar (BJT) ROHSFoshan Blue Rocket ElecBipolar (BJT)IRFBE30SPBF
D2PAK(TO-263)-55℃~+150℃ 1 N-channel 1.3nF 125W 190pF 2V 310pF 3Ω@10V 4.1A 78nC@10V 800V N-Channel D2PAK(TO-263) MOSFETs ROHSVishay IntertechnologyMOSFETs
README
README.mdDekatronPC
Ламповый компьютер на декатронах А110 с системой команд Brainfuck. Счётчики машины — реверсивные декатроны: они умеют ровно то, что нужно Brainfuck, — прибавить и отнять единицу. Логика вокруг них — вакуумные лампы 6Н16Б и 6Ж2Б, без кремниевых полупроводников в вычислительном тракте.
A vacuum-tube Brainfuck computer built around A110 dekatron counting tubes. RTL in SystemVerilog, an FPGA emulator for blocks not yet built, requirements and microarchitecture docs in Russian.
Машина
| Параметр | Значение |
|---|---|
| Архитектура | гарвардская: отдельные память программ и память данных |
| Система команд | один набор из 16 опкодов (ISA16): Brainfuck и шесть служебных, 4 бита на команду |
| Счётчик команд IP | 5 декатронов, 0…99999 |
| Счётчик вложенности Loop | 2 декатрона, 0…99; переполнение — аппаратная ошибка, машина замирает до сброса |
| Указатель данных AP | 5 декатронов; в RTL счёт замыкается 0 ↔ 99999 (предел 29999 — открытый вопрос OPEN-001) |
| Значение ячейки Data | 3 декатрона, 0…255 |
| Всего декатронов | 15 |
| Память программ | 100 000 × 4 бит, верхняя декада 99990…99999 — ПЗУ загрузчика |
| Память данных | 100 000 ячеек × 10 бит (BCD: сотни, десятки, единицы); физически — ферритовые кубы КП128/17-М70, до их установки память играет эмулятор на ПЛИС |
| Тактовая частота | 100 кГц (сборка по умолчанию; статический анализ по SPICE-задержкам ламп даёт минимальный период ≈ 9 мкс; тайминги самого декатрона — OPEN-013/014) |
| Логика | ≈ 1070 ламп + 15 декатронов А110 по синтезу RTL в библиотеку спроектированных ламповых ячеек (среднее по четырём зёрнам ABC, ±10), без памяти; бюджет 1200, цель — меньше 1000 |
Адреса и данные хранятся в BCD прямо так, как их показывают декатроны: память адресуется тетрадами без перевода в двоичный код. Цикл просматривается самой линией выборки: при [ с нулевой ячейкой или ] с ненулевой IP проматывается до парной скобки, счётчик Loop считает вложенность.
Конфигурация счётчиков проверена на наборе из ста реальных программ с GitHub — Brainfuck-100 в сабмодуле bfutils: в 5 + 2 + 5 + 3 декатрона помещаются 97 программ из 100.
Система команд
Один 4-битный набор, режимов нет (ISA16, doc/isa16.md). Коды 0x0…0xA — Brainfuck.
| Опкод | Символ | Команда |
|---|---|---|
| 0x0 | N | NOP |
| 0x1 | H | HALT |
| 0x2 / 0x3 | + - | INC / DEC ячейки |
| 0x4 / 0x5 | > < | AINC / ADEC |
| 0x6 / 0x7 | [ ] | цикл по нулю ячейки |
| 0x8 / 0x9 | . , | COUT / CIN |
| 0xA | 0 | [-] — ячейка ← 0 (ставит MemLock) |
| 0xB | S / E | LD — начало загрузки; в потоке загрузки — её конец (EOT), в память не пишется |
| 0xC | A | CLRA — AP ← 0 |
| 0xD | P | MemLock — ставит флаг MemLock без загрузки: ячейка ← счётчик данных (копирование >P<) |
| 0xE / 0xF | { } | цикл по нулю AP (нужен загрузчику) |
Промотка считает [ ] и { } вместе, поэтому вкладывать один вид в другой нельзя. Аппаратный сброс ставит IP = 99990 и запускает загрузчик 0<{0<} … LD из верхней декады памяти программ, защищённой от записи (очистка памяти данных и загрузка с адреса 0); программный сброс обнуляет все счётчики, в том числе IP. EOT запускает программный сброс. Полная семантика, MemLock и ленивое чтение памяти данных — в TRS.md, разделы 6–10.
Документы
| Документ | Что в нём |
|---|---|
| TRS.md | требования: архитектура, ISA, память, декатроны, RTL, верификация, стенд, ламповые модули, открытые вопросы, чек-лист и план работ. Каждое требование имеет ID (REQ-*, OPEN-*) и статус |
| SCHEMES.md | структурные схемы ядра в семи листах: декатрон, модуль, счётчик, IpLine, ApLine, MachineCtrl, верхний уровень |
| doc/dpcrun_golden_model.md | C++ golden model: семантика, расхождения RTL и TRS, найденные дефекты |
| tb/README.md | testbench на cocotb и pyuvm |
| doc/isa16.md | система команд ISA16 и выбор между вариантами |
| doc/tube_count_below_1000.md | путь подсчёта ламп: что сделано и что отвергнуто (ранее — doc/tube_count_reduction.md, doc/tube_count_1000.md) |
| sch/logic/README.md | библиотека ламповых ячеек: SPICE, схемы KiCad, страницы ячеек; метод — doc/cell_design_method.md |
| doc/vtube_sta.md, doc/synth_sim.md | статический анализ времён и симуляция нетлиста с задержками ламп |
| doc/video_theses.md | что сделано после опубликованных видео |
| rtl/DekatronPC/Dekatron/DekatronCounter.md | устройство декатронного счётчика |
| rtl/DekatronPC/emulator_inspection.md | разбор слоя эмулятора на ПЛИС |
| history.md | журнал сессий работы над проектом |
Репозиторий
| Путь | Содержимое |
|---|---|
rtl/DekatronPC/ | ядро: DekatronPC.sv, MachineCtrl.sv, IpLine.sv, ApLine.sv, IpMemory.sv, RAM.sv, верх для DE0-Nano De0Nano.sv |
rtl/DekatronPC/Dekatron/ | декатрон: модель лампы DekatronTubeV2, модуль, счётчик, генератор фаз, формирователь импульсов |
rtl/parameters.sv | разрядность счётчиков |
rtl/Emulator/ | слой эмулятора на ПЛИС: клавиатура, индикатор МС6205, ИН-12, загрузчик прошивки |
rtl/Logic/, rtl/Functions/ | примитивы и кодеры |
sch/logic/ | ламповые логические ячейки, по папке на ячейку (схема, тестбенч, описание, картинки; перечень в sch/logic/README.md), и библиотека ячеек для синтеза vtube_cells.lib / vtube_cells.v / vtube_timing.json |
rtl/programs/ | тестовые программы *.bfk и загрузчик |
rtl/run/ | скрипты моделирования, синтеза и подсчёта ламп |
rtl/quartus/ | проект Quartus |
tb/ | testbench на cocotb и pyuvm |
bfutils/ | сабмодуль radiolok/bfutils: компилятор, эмулятор, golden model dpcrun, набор Brainfuck-100 |
sch/ | схемы KiCad: эмулятор, экспериментальная декатронная ячейка, библиотеки ламп, ферритовая память (sch/fcore), блок питания стенда (sch/stand) |
doc/ | отчёты и справочная литература |
img/schemes/ | картинки для SCHEMES.md |
web/ | симулятор в браузере: пульт, декатроны, загрузка по SOT/EOT, Brainfuck-100 (web/README.md) |
tools/ | spice/ (расчёт ячеек), kicad/ (генераторы схем), digitize/ (оцифровка справочников), netview/ (схемы нетлиста), synth/, bf100/ |
tools/schemes/ | генератор SCHEMES.md и картинок схем: python3 tools/schemes/build.py |
Блоки Dekatron.sv, DekatronPulseAllow, DekatronCarrySignal, InsnDecoder, BcdToBinEnc в тракте памяти и папка rtl/[DEPRECATED] — старый тракт, подлежит удалению (TRS, раздел 19.4).
Сборка и проверка
git clone --recursive https://github.com/radiolok/dekatronpc.git
cd dekatronpc
git submodule update --init # если клонировали без --recursive
docker build -t dekatron-pc . # Verilator, Icarus, Yosys, cocotb — то же окружение, что в CI
# Quartus собирается отдельно: ./rtl/run/build_fpga.sh, CI — .github/workflows/fpga.yml| Задача | Команда |
|---|---|
| один тест на Icarus | cd tb && make test_compare SIM=icarus |
| регрессия cocotb | cd tb && make regression |
| моделирование RTL | cd rtl/run && ./run_tests.sh -t |
| то же с моделью задержек ламп | cd rtl/run && ./run_tests.sh -d |
| синтез в лампы (Yosys), подсчёт ламп | cd rtl/run && ./run_tests.sh -s |
RTL-тесты на нетлисте (-t — с задержками ламп) | cd rtl/run && ./synth_sim.sh [-t] |
Полная сборка DekatronPC и эмулятора в Verilator и синтез — тяжёлые задачи; на слабой машине начинайте с одиночных целей на Icarus. CI: .github/workflows/ (docker-image.yml, fpga.yml, web.yml, pages.yml).
Состояние
Версия требований — TRS v0.53 (2026-11-04).
- Готово в RTL: ISA16, модель декатрона и счётчик с завершением операции в такте приёма, IpLine / ApLine / MachineCtrl с предвыборкой и MemLock, банковая память, загрузчик в верхней декаде, терминал по UART.
- Проверка: golden model
bfutils/dpcrunсовпадает с RTL шаг в шаг (pi.bfk — 221 386 шагов, вывод3.141); cocotb, Icarus, Verilator, синтез и симуляция нетлиста (в том числе с задержками ламп из SPICE) идут в CI; есть симулятор в браузере. - Ламповые ячейки (NOR, NAND, AOI, защёлки, триггеры) рассчитаны в SPICE и нарисованы в KiCad; на железе подтверждены только отдельные измерения (ёмкость ламп, блок питания).
- Открыто: OPEN-001 (предел AP), OPEN-007 (BELL), OPEN-011, OPEN-012, OPEN-013/014 (тайминги декатрона), OPEN-018. Следующие этапы: P&R-инструмент (REQ-PR-*), платы модуля декатрона, испытательный стенд, ферритовая память, первые ламповые модули.
Полный чек-лист — в TRS.md, разделы 19–22.
Parts
196| Qty | Value | Footprint | References |
|---|---|---|---|
| 24 | 1N4007 | Diode_THT:D_DO-41_SOD81_P10.16mm_Horizontal | D1, D2, D3, D12, D13, D14, D15, D23, D24, D25, D26, D34, D35, D36, D37, D39 +8 |
| 18 | HER108 | Diode_THT:D_DO-41_SOD81_P10.16mm_Horizontal | D6, D7, D10, D11, D17, D18, D19, D20, D21, D22, D28, D29, D30, D31, D32, D33 +2 |
| 14 | 1uF | Capacitor_THT:C_Axial_L3.8mm_D2.6mm_P7.50mm_Horizontal | C7, C8, C9, C12, C16, C17, C18, C20, C27, C30, C31, C33, C41, C43 |
| 9 | 1k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R11, R14, R20, R21, R26, R27, R37, R40, R41 |
| 6 | 10 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R18, R19, R28, R29, R42, R43 |
| 6 | 10k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R6, R10, R12, R15, R36, R38 |
| 6 | 18v | Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal | D5, D16, D27, D38, D47, D48 |
| 6 | BC327 | PCM_Package_TO_SOT_THT_AKL:TO-92_Inline_Wide_CBE | Q13, Q14, Q15, Q20, Q22, Q24 |
| 6 | BC337 | PCM_Package_TO_SOT_THT_AKL:TO-92_Inline_Wide_CBE | Q16, Q17, Q18, Q19, Q21, Q23 |
| 6 | IRFBE30S | PCM_Package_TO_SOT_SMD_AKL:TO-263-2 | Q4, Q5, Q6, Q7, Q8, Q9 |
| 5 | Voltage | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J4, J5, J8, J14, J15 |
| 5 | Vout | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal | J2, J6, J9, J12, J13 |
| 3 | , , | ||
| 3 | 1 | Resistor_THT:R_Axial_DIN0411_L9.9mm_D3.6mm_P15.24mm_Horizontal | R24, R35, R50 |
| 3 | 1.1k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R8, R34, R49 |
| 3 | 1.1nF | Capacitor_THT:C_Axial_L3.8mm_D2.6mm_P7.50mm_Horizontal | C5, C19, C32 |
| 3 | 100 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R25, R32, R47 |
| 3 | 10k | Resistor_THT:R_Axial_DIN0918_L18.0mm_D9.0mm_P25.40mm_Horizontal | R1, R2, R3 |
| 3 | 10nF | Capacitor_THT:C_Rect_L7.0mm_W2.5mm_P5.00mm | C15, C26, C39 |
| 3 | 10nF 630v | Capacitor_THT:C_Rect_L11.5mm_W6.4mm_P10.00mm_MKT | C3, C23, C36 |
| 3 | 10uF 160v | Capacitor_THT:CP_Radial_D10.0mm_P3.50mm | C2, C6, C29 |
| 3 | 136V/80V/56V RMS | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal | J1, J3, J7 |
| 3 | 18k | Resistor_THT:R_Axial_DIN0516_L15.5mm_D5.0mm_P5.08mm_Vertical | R9, R17, R46 |
| 3 | 2N3904 | PCM_Package_TO_SOT_THT_AKL:TO-92_Inline_Wide_EBC | Q1, Q2, Q3 |
| 3 | 330uF 315v | Capacitor_THT:CP_Radial_D30.0mm_P10.00mm_SnapIn | C1, C4, C28 |
| 3 | 4.7k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R13, R16, R39 |
| 3 | 470 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R51, R52, R53 |
| 3 | 47k | Resistor_THT:R_Axial_DIN0414_L11.9mm_D4.5mm_P15.24mm_Horizontal | R22, R30, R44 |
| 3 | 82uF 315V | Capacitor_THT:CP_Radial_D18.0mm_P7.50mm | C14, C25, C38 |
| 3 | 91k | Resistor_THT:R_Axial_DIN0516_L15.5mm_D5.0mm_P5.08mm_Vertical | R7, R33, R48 |
| 3 | L7812ABV | PCM_Package_TO_SOT_THT_AKL:TO-220-3_Vertical | U3, U4, U7 |
| 3 | PC817 | PCM_Package_DIP_AKL:DIP-4_W7.62mm_LongPads | OC1, OC2, OC3 |
| 3 | TL431LP | Package_TO_SOT_THT:TO-92_Inline_Wide | U2, U6, U9 |
| 3 | TL494 | Package_DIP:DIP-16_W7.62mm | U1, U5, U8 |
| 3 | Transformer_SP_1S | User:EL33 | T1, T2, T3 |
| 2 | 10uF 50v | Capacitor_THT:CP_Radial_D10.0mm_P3.50mm | C44, C45 |
| 2 | 12k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R58, R60 |
| 2 | 220 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R57, R62 |
| 2 | 2200uF 50v | Capacitor_THT:CP_Radial_D18.0mm_P7.50mm | C40, C42 |
| 2 | 24V RMS | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal | J10, J11 |
| 2 | 680 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R59, R61 |
| 1 | LM317AT | PCM_Package_TO_SOT_THT_AKL:TO-220-3_Vertical | U10 |
| 1 | LM337SP | PCM_Package_TO_SOT_THT_AKL:TO-220-3_Vertical | U11 |
| 1 | ~ | DekatronPC:Радиатор | radiator1 |
The 195 most common of 196 parts.
More from radiolok/dekatronpc
2- 2 layers

- 2 layers83.8 × 114.3 mm

Similar boards
- 2 layers120.3 × 100 mm

- 2 layers100 × 100 mm

Bidirectional Power Converter 24V-12V with BMS
kwiecinski/BMS-and-offgrid-photovoltaic-management-system
Project contains BMS for lead-acid batteries and ESP-based board used to pull information from EASUN offgrid inverter, energy meters and sensors.
161 parts3MIT - 2 layers146.8 × 93.9 mm

Power supply
Ekstazaa/Symmetric-Linear-Power-Supply-30V
Repositiry contains description of Linear power supply project. It is based on Trafo with own pcb board with rectifier, filtres and regulator LM3178 and LM337.
47 parts1MIT - 2 layers213.6 × 127.5 mm

- 2 layers120.1 × 120 mm

Mono amplifier
dario0603/AB-class-amplifier
Design and simulation of a Class-AB audio power amplifier, focusing on output-stage linearity, crossover distortion reduction, and overcurrent protection.
97 parts1 - 2 layers50.5 × 42 mm

Audio amplifier
DesignGraveyard/V007_LTspice_26_in_5_steps
In this step-by-step tutorial, you will learn how to simulate electronic circuits in LTspice using a USB-powered audio amplifier as a practical example.
39 parts - 2 layers160 × 95 mm

Placa Control Fuentes y Carga
edgranzella/Placa-de-Corte-TX
Circuito Impreso de la plaquetita de Corte TX que va apilada sobre el Arduino Nano de la placa Controladora de Fuentes y Carga.
142 parts - 2 layers117.1 × 84.6 mm

Questions
How big is the Stand PCB?
It measures 224.2 × 153.7 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Stand use?
196 parts, built around the TL494, L7812ABV, LM317AT and LM337SP. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Stand KiCad files?
From the radiolok/dekatronpc repository on GitHub, at the commit this page was made from: the board is sch/stand/stand.kicad_pcb and its schematic sch/logic/A1OOI_N16J2/A1OOI_N16J2.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Stand design in my own project?
Its repository states no licence, so its author keeps all rights: ask radiolok before reusing the design.