プロジェクト 02

Turing Complete で論理ゲートから CPU をつくる

Turing Complete のサンドボックスモードで掲げた三つの長期的な学習目標で、決まった予定ではありません。16 ビットの Hack コアから始め、32 ビットの RV32I と Armv6-M のコアへ進みます。どのコアにも明確な命令セットアーキテクチャ(ISA)があり、回路をどう組むかは設計しながら探ります。

状態
進行中
開始
2026 年 9 月
使用予定
Turing Complete · Hack · RV32I · Armv6-M

知りたいこと

命令 ROM とデータ RAM を分けた(ハーバード・アーキテクチャ)16 ビットの Hack コアを作り、Add や Max などの Hack 機械語プログラムを動かします。次に、パイプラインなしの RV32I コアから始めて基本整数命令セット全体へ広げ、5 段パイプラインは後の課題にします。さらに Cortex-M0+ を参考に Armv6-M/Thumb コアに挑み、例外、割り込み、2 段パイプラインを順に実装し、共有システムバスの構成に倣います。Cortex-M0+ 互換と呼ぶのは十分に検証してからです。

開発プラン

  1. 01
    完了

    論理ゲートと組み合わせ回路

    NAND から NOT、AND、OR、NOR、XOR を作り、2 入力のゲートを組み合わせて入力を増やし、伝播遅延が最長経路をどう決めるかを見ます。

  2. 02
    進行中

    算術演算とメモリ

    1 ビットの信号を複数ビットのデータへ広げます。まず二進数の読み方と計算を押さえ、次に加算器、ラッチ、レジスタを組んで、計算した結果を保存し、次の演算に使えるようにします。

  3. 03
    予定

    Hack 16 ビット CPU

    Hack 命令セットの 16 ビットコア。命令 ROM とデータ RAM を分け、Add や Max などの Hack プログラムを動かします。

  4. 04
    予定

    RV32I

    32 ビットの RV32I コア。まずパイプラインなしで作り、基本整数命令セット全体に広げます。5 段パイプラインは後の課題です。

  5. 05
    予定

    Armv6-M

    Cortex-M0+ を参考にした 32 ビットの Armv6-M/Thumb コア。例外、割り込み、2 段パイプラインを順に実装します。

関連する記録

プロジェクトが進んだら、各段階で生まれた疑問、実装の過程、検証結果をここに追加します。

01

ブール代数

公開済み

NAND から論理ゲートを組み立てる

NAND から出発して、Turing Complete で NOT、AND、OR、NOR、XOR、XNOR と 3 入力のゲートを組み、それぞれ真理値表で確かめます。伝播遅延、つまり入力が変わってから出力が少し遅れて変わる理由も見ます。後半は組み合わせ回路の練習問題を 5 問解いて真理値表から配線を導き、最後にブール代数が CPU の中で何をしているかを見ます。

  • Turing Complete
  • NAND
  • Logic gates
記録を読む
02

算術演算とメモリ

公開済み

算術演算とメモリの前提知識

論理ゲートの次に、簡単な CPU コアに必要な部品と、ALU の中でまず知っておく回路を見ます。1 回の加算が命令の読み出しから解釈、計算、保存までどう進むかをたどり、計算した結果をなぜ保存しておく必要があるのかを確かめます。最後に、この先の内容を『CS:APP』の章と対応させます。

  • Turing Complete
  • ALU
  • CS:APP
記録を読む
03

算術演算とメモリ

公開済み

二進数と二進数の速算

符号なし整数を前提に、二進数の読み方と計算をまとめます。位の重みとビット幅、十進数との変換、加算と減算の繰り上がりと繰り下がり、乗算と除算、ビット演算と偶奇、いくつかの速算のこつと固定ビット幅の限界を扱います。最後に、128 から 1 までの位の重みを選んで目標の数を作る練習を置いています。

  • Turing Complete
  • Binary
  • Arithmetic
記録を読む
04

算術演算とメモリ

公開済み

論理判定から二進数の演算へ

六つの回路の練習を通して、論理判定から二進数の演算へ進みます。真の入力が二つ以上あるかの判定、奇数パリティ、四つの信号の計数、半加算器、全加算器、ビットの配線によるバイトの倍増を扱います。配線図と真理値表で確かめ、最後の回路が 0〜127 の入力でのみ倍増になる理由も説明します。

  • Turing Complete
  • Logic gates
  • Binary
  • Adders
記録を読む
05

算術演算とメモリ

公開済み

1 バイトの演算から 2 の補数と負数へ

1 バイトの NOT と NAND から始め、八つの全加算器を桁上がり信号でつなぎます。続いて 2 の補数で負数を表し、符号を反転する回路を組みます。配線図と計算例で、ビット反転と算術的な符号反転、桁上がりと符号付きオーバーフローを区別し、−128 の境界も確認します。

  • Turing Complete
  • Binary
  • Adders
  • Two's complement
記録を読む
06

算術演算とメモリ

更新中

フィードバック、タイミングとデータ制御

状態を保持し更新する仕組みを学びながら追記しています。フィードバックループ、OR による信号の保持、2 周期の遅延、ラッチ、フリップフロップ、周期ごとの反転を扱います。現在はスイッチで XOR を組むところまで進み、ハイインピーダンスとデータ選択を説明しています。データ制御回路は今後も追加します。

  • Turing Complete
  • Feedback
  • Sequential logic
  • Data control
記録を読む