277,248個のNANDゲートだけで組まれた16ビットPC:メモリまで論理ゲートで組み立てる代償

277,248個のNANDゲートだけで組まれた16ビットPC:メモリまで論理ゲートで組み立てる代償

コンピュータサイエンスハードウェア論理ゲート

データソース:HN + web research

277,248個の2入力NANDゲートだけで構成された完全な16ビットコンピュータが、ブラウザ上で動作しています。他の論理ゲートは一切含まず、16.4 kHzのクロック周波数でテトリスのクローンを滑らかに実行します。高級言語や抽象化レイヤーが何重にも重なる現代において、NAND-16は最も原始的な手法で車輪を再発明することを選びました。私たちは直感的に、複雑なコンピュータを構築するには専用のALUや独立したメモリチップなど、固有の役割を持つコンポーネントが不可欠だと考えがちです。しかしNAND-16は明快な事実を提示しています。汎用計算を実現するためのハードルは、最も基本的な単一のスイッチだけで十分だということです。

複雑さに専用部品は不要

NANDゲートチップ 図:7400シリーズの4回路2入力NANDゲートIC。このコンピュータ全体が、277,248個のこの基本論理素子だけで組まれている。出典:Wikimedia Commons

NAND-16プロジェクト全体で使われている論理素子は、NAND(否定論理積)ゲートのただ1種類のみです。これは、たった1つの形状のレゴブロックだけを渡されて、エレベーター付きの高層ビルを建てるよう命じられるようなものです。このシステムでは、加算器、レジスタ、命令デコードロジックのすべてが、まったく同一のブロックの組み合わせから生み出されています。システム全体をあえて単一のゲートに制約することで、計算能力がどのように立ち現れるのかが極めて明瞭になります。

プロジェクトのガイドツアー(Genesis)は、「単一のゲートからコンピュータを再発明する」というテーマのもと全15章で構成されています。2つのNANDゲートを組み合わせてRSフリップフロップを作る手順から、それを足がかりにしてレジスタや演算ユニットを段階的に組み上げていく過程が解説されます。この一連のステップをたどることで、ハードウェア設計の神秘性は完全に解体されます。高度なコンピュータの機能であっても、突き詰めれば無数のスイッチが状態を反転させているだけの現象にすぎないことが理解できます。

27万ゲートという規模:メモリ実装がもたらす代償

Hacker Newsで「277,248」という数字を目にしたとき、多くの人がまず戸惑いを覚えました。歴史的な名機であるARM1プロセッサでさえ、トランジスタ数は2万5,000個足らずでした。それに対してNAND-16が10倍以上もの規模を要しているのは、ROMとRAMまでもが純粋なNANDゲートのアレイだけで組まれているためです。既製のメモリICは一切使用されていません。

通常のコンピュータアーキテクチャでは、演算ユニットとメモリは物理的に分かれており、メモリ素子は高密度化のために最適化された独自のトランジスタ構造を持っています。しかしNAND-16では、すべての記憶素子を生の論理ゲートから力技で組み上げています。命令とデータを保持するための領域を論理ゲートだけで賄おうとすると、ゲート数は必然的に爆発します。

ブラウザのテレメトリ表示によれば、クロックサイクル数は160,208に達し、実行命令数はおよそ58,402、プログラムカウンタは046Cで停止しています。これは機械語の命令を1行ずつ物理的にシミュレーションしている生きた環境です。ブラウザ内でのゲート評価速度は約23.0 M/s、命令実行周波数は約4.0 k/sに達します。これらのパフォーマンス数値が物語る本質は、27万個のゲートの大部分が演算を行っているのではなく、単にメモリとして機能しているという事実です。汎用計算は単一のスイッチだけで作れるものの、その代償としてメモリ領域を確保するために膨大な数のスイッチを並べなければならないのです。

単一のゲートを壊してシステムの崩壊を観察する

NAND-16 スクリーンショット 図:ブラウザ上で動作するNAND-16。画面上部には回路の計算結果を継続的に検証する独立監査エンジン(audit)が備わっている。出典:somethingbig.ai

全体が同一のコンポーネントで組まれているため、デバッグやトラブルシューティングは直感的な物理実験そのものになります。本プロジェクトには「Fault Lab(故障ラボ)」が組み込まれており、任意のゲートを永久に0または1に固定して、マシン全体がどのように動作不能に陥るかを観察できます。第2相クロックを切断すれば画面はフリーズし、ビデオRAM内のゲートを1つ壊せば、ゲーム画面上に消去不能なゴーストブロックが即座に出現します。

用意された故障シナリオには、切断されたキャリーチェーン、決して分岐しないジャンプ命令、機能が低下した疑似乱数生成器などが含まれます。キーボードでゲームを操作中にキーが反応しなくなった場合、その原因は基底にある特定の論理ゲートが強制的に固定されたことにあるケースが多々あります。

すべての動作状態はウェブ上でリアルタイムに可視化されます。ページ上部には独立した監査機能(audit)が常駐し、独立実装された評価エンジンでサイクルを再実行して、ネットリストの状態不整合を検知すると画面を真っ赤に染めて警告します。さらにロジックアナライザは、1命令ごとのステップ実行だけでなく、1サイクルの状態を記録してゲート遅延に応じたバレットタイム再生までサポートしています。画面上の任意のピクセルをダブルクリックすれば、その表示を保持している最下層のラッチ回路へダイレクトにトレース可能です。すべてのゲートがブラウザの画面上に広げられたとき、ハードウェアのブラックボックスは跡形もなく消滅します。

コミュニティの反応と「AI時代」のフィルター

このプロジェクトに対するコミュニティの反応は大きく2つに分かれました。一方は、NANDゲートのアレイだけでメモリまで再現しきったエンジニアリングの執念に感嘆し、原理からデジタル宇宙を立ち上げる純粋さを絶賛しました。もう一方はやや冷ややかで、「数年前に見れば驚嘆しただろうが、現在のこの規模ならAIが生成したネットリストである可能性が高く、過度に熱狂するほどではない」という見解を示しました。Hacker Newsでの議論は、現代のテックコミュニティが大規模プロジェクトに接する際の典型的な懐疑心を映し出しています。

時代による受け止め方の変化が工数の重みに対する認識を変えたとしても、システムを駆動する物理原則の本質は変わりません。作者がネットリストの生成に自動化ツールを多用したかどうかに関わらず、NAND-16はコンピュータが纏う複雑さのベールを剥ぎ取り、誰もが自由に分解できる形でブラウザに提示しました。計算に謎の魔法など使われていません。十分な数の同一スイッチを一定の規則に従って配線すれば、システム全体は確実に息づきます。すべてが透明化されたコンピュータは、それ自体が最良の動作原理の教科書なのです。

参考リンク:

  • NAND-16 プロジェクトページ
  • HN ディスカッション
  • Wikimedia Commons