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
1,761 changes: 0 additions & 1,761 deletions apps/website/messages/de.json

This file was deleted.

1,793 changes: 0 additions & 1,793 deletions apps/website/messages/es.json

This file was deleted.

1,793 changes: 0 additions & 1,793 deletions apps/website/messages/zh.json

This file was deleted.

Binary file added apps/website/public/term/devkit-flow/card.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
95 changes: 95 additions & 0 deletions apps/website/public/term/devkit-flow/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>tri devkit · the FPGA flow, layer by layer · Trinity S³AI</title>
<meta name="description" content="One real XC7A200T build: 116.9 s with openXC7, 83.5 s with t27 L3+L4, byte-identical. Place &amp; route is 60%.">
<link rel="canonical" href="https://t27.ai/term/devkit-flow/">
<link rel="icon" href="../../favicon.svg" type="image/svg+xml">
<meta property="og:type" content="article">
<meta property="og:site_name" content="Trinity S³AI">
<meta property="og:title" content="tri devkit · the FPGA flow, layer by layer">
<meta property="og:description" content="One real XC7A200T build: 116.9 s with openXC7, 83.5 s with t27 L3+L4, byte-identical. Place &amp; route is 60%.">
<meta property="og:url" content="https://t27.ai/term/devkit-flow/">
<meta property="og:image" content="https://t27.ai/term/devkit-flow/card.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="tri devkit · the FPGA flow, layer by layer: the terminal session it shows">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="tri devkit · the FPGA flow, layer by layer">
<meta name="twitter:description" content="One real XC7A200T build: 116.9 s with openXC7, 83.5 s with t27 L3+L4, byte-identical. Place &amp; route is 60%.">
<meta name="twitter:image" content="https://t27.ai/term/devkit-flow/card.png">
<meta name="twitter:image:alt" content="tri devkit · the FPGA flow, layer by layer: the terminal session it shows">
<style>@font-face{font-family:Outfit;src:url(../../fonts/outfit-latin.woff2) format('woff2');font-weight:100 900;font-display:swap}
*{box-sizing:border-box}html,body{margin:0;background:#000;color:#ebebeb}
body{font:16px/1.6 Outfit,system-ui,sans-serif;background-image:linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);background-size:40px 40px}
main{max-width:980px;margin:0 auto;padding:28px 20px 64px}
a{color:#00ff88}a:hover{color:#fff}
.brand{display:flex;align-items:center;gap:10px;color:#fff;text-decoration:none;font-weight:700;font-size:20px}
.brand img{width:30px;height:30px}
.top{display:flex;justify-content:space-between;align-items:center;margin-bottom:28px}
.top .all{color:#888;font-size:14px;text-decoration:none}.top .all:hover{color:#00ff88}
h1{font-size:clamp(26px,4.4vw,42px);line-height:1.15;margin:0 0 10px;color:#fff}
.lede{color:#888;margin:0 0 22px;font-size:18px}
.facts{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0}
.facts span{border:1px solid rgba(255,255,255,.08);border-radius:999px;padding:3px 12px;font-size:13px;color:#bbb}
.facts b{color:#ffd700;font-weight:600}
.cmds{font:13px/1.5 'JetBrains Mono',Menlo,monospace;background:#0a0a0a;border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:12px 16px;margin:18px 0;white-space:pre-wrap;overflow-wrap:anywhere}
.cmds i{color:#ffd700;font-style:normal}
.honest{color:#888;font-size:14px;border-left:2px solid #00ff88;padding-left:12px}
.links{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}
.links a{border:1px solid rgba(255,255,255,.16);border-radius:8px;padding:6px 14px;text-decoration:none;font-size:14px}
.links a.x{background:#00ff88;color:#000;border-color:#00ff88;font-weight:600}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px}
.grid a{display:block;border:1px solid rgba(255,255,255,.08);border-radius:12px;overflow:hidden;text-decoration:none;color:#ebebeb;background:#050505}
.grid a:hover{border-color:#00ff88}.grid img{width:100%;display:block;aspect-ratio:1200/630}
.grid div{padding:10px 14px}.grid b{display:block;color:#fff}.grid small{color:#888}</style>
</head>
<body>
<main>
<div class="top"><a class="brand" href="../../"><img src="../../favicon.svg" alt="">Trinity S³AI</a><a class="all" href="../">All recordings →</a></div>
<h1>tri devkit · the FPGA flow, layer by layer</h1>
<p class="lede">One real XC7A200T build: 116.9 s with openXC7, 83.5 s with t27 L3+L4, byte-identical. Place &amp; route is 60%.</p>
<div id="player"><noscript><figure style='margin:0 0 1.6em;border:1px solid rgba(255,255,255,.08);border-radius:12px;overflow:hidden;background:#000'><div style='padding:8px 12px;background:#0a0a0a;color:#888;font:12px system-ui;text-align:center;border-bottom:1px solid rgba(255,255,255,.08)'>tri devkit · the FPGA flow, layer by layer</div><pre style='margin:0;padding:14px 16px;color:#ebebeb;background:#000;font:12px/1.25 Menlo,monospace;overflow-x:auto'>
<span style='color:#ebebeb;font-weight:700'> share of one build</span><span style='color:#ebebeb'> </span>
<span style='color:#ebebeb'> L1 synthesis </span><span style='color:#757575'>████▎</span><span style='color:#ebebeb'> 10.9 % </span>
<span style='color:#ebebeb'> L2 place &amp; route </span><span style='color:#5ce1e6'>███████████████████████▉</span><span style='color:#ebebeb'> 60.0 % </span>
<span style='color:#ebebeb'> L3 FASM → frames </span><span style='color:#00ff88'>███████████▌</span><span style='color:#ebebeb'> 29.0 % </span>
<span style='color:#ebebeb'> L4 frames → .bit </span><span style='color:#00ff88'>▏</span><span style='color:#ebebeb'> 0.2 % </span>

<span style='color:#ebebeb'>Amdahl ceilings: the whole flow if one more layer took 0 s (the most a rewrite could give) </span>
<span style='color:#ebebeb'> L1 synthesis 83.45 s -> 70.76 s 1.65x vs openXC7 today </span>
<span style='color:#ebebeb'> L2 place &amp; route 83.45 s -> 13.36 s 8.75x vs openXC7 today </span>
<span style='color:#ebebeb'>load 13 on 8 cpus; times are wall seconds and move with load -- re-time before quoting </span>

<span style='color:#00ff88'>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓</span><span style='color:#ebebeb'> </span>
<span style='color:#00ff88'>┃</span><span style='color:#ebebeb'> </span><span style='color:#00ff88;font-weight:700'>✔ t27 layers byte-identical to openXC7: frames True, .bit True</span><span style='color:#ebebeb'> </span><span style='color:#00ff88'>┃</span><span style='color:#ebebeb'> </span>
<span style='color:#00ff88'>┃</span><span style='color:#ebebeb'> one build 116.9 s -> 83.4 s (1.40x), 33.4 s saved </span><span style='color:#00ff88'>┃</span><span style='color:#ebebeb'> </span>
<span style='color:#00ff88'>┃</span><span style='color:#ebebeb'> L1 and L2 are not rewritten; their rows are ceilings, not results </span><span style='color:#00ff88'>┃</span><span style='color:#ebebeb'> </span>
<span style='color:#00ff88'>┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛</span><span style='color:#ebebeb'> </span>
<span style='color:#ebebeb'>flow: SAME saved 33.4 s per build </span>
<span style='color:#ffd700'>trinity-fpga $ </span><span style='color:#ebebeb'>tri devkit impact --out /tmp/devkit-flow/rec1 --builds 20 </span>
<span style='color:#ffd700'>╭────────────────────────────────────────────────────────────────────────╮</span><span style='color:#ebebeb'> </span>
<span style='color:#ffd700'>│</span><span style='color:#ffd700;font-weight:700'> ▼ Trinity S³AI tri devkit impact</span><span style='color:#ebebeb'> </span><span style='color:#757575'>the FPGA flow, layer by layer </span><span style='color:#ffd700'>│</span><span style='color:#ebebeb'> </span>
<span style='color:#ffd700'>╰────────────────────────────────────────────────────────────────────────╯</span><span style='color:#ebebeb'> </span>

<span style='color:#ebebeb'>measured 116.9 s -> 83.5 s per build, 33.4 s saved (2026-10-03T11:31:08+0700, load 12.6) </span>
<span style='color:#ebebeb'>assumed 20 builds a day, 1 person, 230 working days (assumptions, not measurements) </span>
<span style='color:#ebebeb'>result 42.7 hours a year of waiting removed </span>
<span style='color:#ebebeb'>ceiling + L1 synthesis: at most 16.2 more hours a year, if it took 0 s </span>
<span style='color:#ebebeb'>ceiling + L2 place &amp; route: at most 89.6 more hours a year, if it took 0 s </span>
<span style='color:#ebebeb'>impact: 42.7 h/yr measured saving at the stated assumptions </span>
<span style='color:#ffd700'>trinity-fpga $ </span><span style='color:#ebebeb'> </span></pre></figure></noscript></div>
<div class="facts"><span>recorded <b>2026-10-03 04:31 UTC</b></span><span>real <b>127.4 s</b></span><span>shown <b>12.2 s</b></span><span>exit codes <b>0 0</b></span></div>
<div class="cmds"><i>$</i> tri devkit flow --build --out /tmp/devkit-flow/rec1
<i>$</i> tri devkit impact --out /tmp/devkit-flow/rec1 --builds 20</div>
<p class="honest">Staged: the prompt and the typing. Real: every byte the commands printed, at the time they printed it. Any silence longer than 2 s is shown for 2 s, and the title bar says so while it happens. Edited: home directory shown as ~.</p>
<div class="links"><a href="https://t27.ai/#/devkit">Read the post</a><a href="card.png">Preview card</a></div>
</main>
<script type="module">
import { mount } from '../player.js'
mount(document.getElementById('player'), { src: 'session.cast', share: 'https://t27.ai/term/devkit-flow/', title: "tri devkit \u00b7 the FPGA flow, layer by layer" })
</script>
</body>
</html>
22 changes: 22 additions & 0 deletions apps/website/public/term/devkit-flow/meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"id": "devkit-flow",
"title": "tri devkit · the FPGA flow, layer by layer",
"desc": "One real XC7A200T build: 116.9 s with openXC7, 83.5 s with t27 L3+L4, byte-identical. Place & route is 60%.",
"url": "https://t27.ai/term/devkit-flow/",
"post": "https://t27.ai/#/devkit",
"recorded": "2026-10-03 04:31 UTC",
"real_s": 127.4,
"shown_s": 12.2,
"commands": [
"tri devkit flow --build --out /tmp/devkit-flow/rec1",
"tri devkit impact --out /tmp/devkit-flow/rec1 --builds 20"
],
"exit_codes": [
"0",
"0"
],
"redacted": [
"home directory shown as ~"
],
"published": "2026-10-03"
}
132 changes: 132 additions & 0 deletions apps/website/public/term/devkit-flow/session.cast
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
{"version": 2, "width": 104, "height": 30, "timestamp": 1791001873, "title": "tri devkit \u00b7 the FPGA flow, layer by layer", "commands": ["tri devkit flow --build --out /tmp/devkit-flow/rec1", "tri devkit impact --out /tmp/devkit-flow/rec1 --builds 20"], "redacted": ["home directory shown as ~"]}
[0.0, "o", "\u001b[38;2;255;215;0mtrinity-fpga $ \u001b[0m"]
[0.4051, "o", "t"]
[0.4415, "o", "r"]
[0.4786, "o", "i"]
[0.5154, "o", " "]
[0.5554, "o", "d"]
[0.5955, "o", "e"]
[0.6321, "o", "v"]
[0.6677, "o", "k"]
[0.7077, "o", "i"]
[0.7477, "o", "t"]
[0.7849, "o", " "]
[0.8237, "o", "f"]
[0.8638, "o", "l"]
[0.9038, "o", "o"]
[0.9404, "o", "w"]
[0.9804, "o", " "]
[1.0198, "o", "-"]
[1.0571, "o", "-"]
[1.0971, "o", "b"]
[1.1371, "o", "u"]
[1.1772, "o", "i"]
[1.2154, "o", "l"]
[1.2554, "o", "d"]
[1.2955, "o", " "]
[1.3355, "o", "-"]
[1.3755, "o", "-"]
[1.4136, "o", "o"]
[1.4487, "o", "u"]
[1.4888, "o", "t"]
[1.5288, "o", " "]
[1.5688, "o", "/"]
[1.6071, "o", "t"]
[1.6471, "o", "m"]
[1.6871, "o", "p"]
[1.7272, "o", "/"]
[1.7672, "o", "d"]
[1.807, "o", "e"]
[1.8471, "o", "v"]
[1.8846, "o", "k"]
[1.9237, "o", "i"]
[1.9592, "o", "t"]
[1.9992, "o", "-"]
[2.0392, "o", "f"]
[2.0792, "o", "l"]
[2.1144, "o", "o"]
[2.154, "o", "w"]
[2.1942, "o", "/"]
[2.2336, "o", "r"]
[2.2734, "o", "e"]
[2.3109, "o", "c"]
[2.351, "o", "1"]
[2.697, "o", "\r\n"]
[2.8095, "o", "\u001b[38;2;255;215;0m╭────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[38;2;255;215;0m│\u001b[0m\u001b[38;2;255;215;0;1m ▼ Trinity S³AI tri devkit flow\u001b[0m \u001b[2mthe FPGA flow, layer by layer \u001b[0m\u001b[38;2;255;215;0m│\u001b[0m\r\n\u001b[38;2;255;215;0m╰────────────────────────────────────────────────────────────────────────╯\u001b[0m\r\n\r\n$ tri fpga-build --out /tmp/devkit-flow/rec1\r\n"]
[119.9503, "o", " [yosys ] rc=0 12.7 s rss 348.9 MB\r\n [nextpnr ] rc=0 70.1 s rss 669.5 MB\r\n [fasm2frames ] rc=0 33.9 s rss 763.0 MB\r\n [frames2bit ] rc=0 0.2 s rss 45.0 MB\r\n"]
[119.9593, "o", "design trinet_node_v2_ax7203 part xc7a200tfbg484-2 FASM 121,587 lines\r\n"]
[119.9741, "o", "$ bitwalk --fasm db-artix7-xc7a200tfbg484-2-prjxray-db-ab1fc60-v2.txt node.fasm ours.frames (3 runs)\r\n"]
[121.2821, "o", "$ bitwalk --write ours.frames ours.bit (3 runs)\r\n"]
[122.3235, "o", "\r\n"]
[122.3235, "o", "layer openXC7 tool now t27 t27 s same bytes\r\n"]
[122.3235, "o", "L1 synthesis yosys 12.69 s not yet – –\r\n"]
[122.3236, "o", "L2 place & route nextpnr-xilinx 70.09 s not yet – –\r\nL3 FASM → frames fasm2frames.py 33.86 s bitwalk --fasm 0.42 yes\r\nL4 frames → .bit xc7frames2bit 0.22 s bitwalk --write 0.25 yes\r\nwhole flow 116.86 s with L3+L4 in t27 83.45 (1.40x)\r\n\r\n\u001b[1m share of one build\u001b[0m\r\n"]
[122.3236, "o", " L1 synthesis \u001b[2m████▎\u001b[0m 10.9 %\r\n L2 place & route \u001b[36m███████████████████████▉\u001b[0m 60.0 %\r\n L3 FASM → frames \u001b[32m███████████▌\u001b[0m 29.0 %\r\n L4 frames → .bit \u001b[32m▏\u001b[0m 0.2 %\r\n\r\nAmdahl ceilings: the whole flow if one more layer took 0 s (the most a rewrite could give)\r\n L1 synthesis 83.45 s -> 70.76 s 1.65x vs openXC7 today\r\n L2 place & route 83.45 s -> 13.36 s 8.75x vs openXC7 today\r\n"]
[122.3237, "o", "load 13 on 8 cpus; times are wall seconds and move with load -- re-time before quoting\r\n"]
[122.3307, "o", "\r\n"]
[122.3309, "o", "\u001b[32m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\u001b[0m\r\n"]
[122.3309, "o", "\u001b[32m┃\u001b[0m \u001b[32;1m✔ t27 layers byte-identical to openXC7: frames True, .bit True\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┃\u001b[0m \u001b[0m one build 116.9 s -> 83.4 s (1.40x), 33.4 s saved\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┃\u001b[0m \u001b[0m L1 and L2 are not rewritten; their rows are ceilings, not results\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m\r\nflow: SAME saved 33.4 s per build\r\n"]
[122.3379, "x", "0"]
[123.342, "o", "\u001b[38;2;255;215;0mtrinity-fpga $ \u001b[0m"]
[123.7421, "o", "t"]
[123.7804, "o", "r"]
[123.8204, "o", "i"]
[123.8567, "o", " "]
[123.8966, "o", "d"]
[123.9341, "o", "e"]
[123.9726, "o", "v"]
[124.01, "o", "k"]
[124.0471, "o", "i"]
[124.0871, "o", "t"]
[124.1226, "o", " "]
[124.1626, "o", "i"]
[124.2008, "o", "m"]
[124.2383, "o", "p"]
[124.2784, "o", "a"]
[124.3184, "o", "c"]
[124.3554, "o", "t"]
[124.3954, "o", " "]
[124.4355, "o", "-"]
[124.4708, "o", "-"]
[124.5108, "o", "o"]
[124.5473, "o", "u"]
[124.5874, "o", "t"]
[124.6258, "o", " "]
[124.6636, "o", "/"]
[124.7037, "o", "t"]
[124.7435, "o", "m"]
[124.7805, "o", "p"]
[124.8206, "o", "/"]
[124.8606, "o", "d"]
[124.8982, "o", "e"]
[124.9382, "o", "v"]
[124.9782, "o", "k"]
[125.0179, "o", "i"]
[125.058, "o", "t"]
[125.098, "o", "-"]
[125.138, "o", "f"]
[125.1748, "o", "l"]
[125.2123, "o", "o"]
[125.248, "o", "w"]
[125.2882, "o", "/"]
[125.328, "o", "r"]
[125.3668, "o", "e"]
[125.4061, "o", "c"]
[125.4462, "o", "1"]
[125.4858, "o", " "]
[125.5255, "o", "-"]
[125.5636, "o", "-"]
[125.6037, "o", "b"]
[125.6438, "o", "u"]
[125.6846, "o", "i"]
[125.7198, "o", "l"]
[125.7595, "o", "d"]
[125.7995, "o", "s"]
[125.8395, "o", " "]
[125.8766, "o", "2"]
[125.9166, "o", "0"]
[126.2536, "o", "\r\n"]
[126.3494, "o", "\u001b[38;2;255;215;0m╭────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[38;2;255;215;0m│\u001b[0m\u001b[38;2;255;215;0;1m ▼ Trinity S³AI tri devkit impact\u001b[0m \u001b[2mthe FPGA flow, layer by layer \u001b[0m\u001b[38;2;255;215;0m│\u001b[0m\r\n\u001b[38;2;255;215;0m╰────────────────────────────────────────────────────────────────────────╯\u001b[0m\r\n\r\nmeasured 116.9 s -> 83.5 s per build, 33.4 s saved (2026-10-03T11:31:08+0700, load 12.6)\r\nassumed 20 builds a day, 1 person, 230 working days (assumptions, not measurements)\r\nresult 42.7 hours a year of waiting removed\r\nceiling + L1 synthesis: at most 16.2 more hours a year, if it took 0 s\r\nceiling + L2 place & route: at most 89.6 more hours a year, if it took"]
[126.3496, "o", " 0 s\r\nimpact: 42.7 h/yr measured saving at the stated assumptions\r\n"]
[126.3573, "x", "0"]
[127.3583, "o", "\u001b[38;2;255;215;0mtrinity-fpga $ \u001b[0m"]
Loading
Loading