公開済み
NAND から論理ゲートを組み立てる
NAND から出発して、Turing Complete で NOT、AND、OR、NOR、XOR、XNOR と 3 入力のゲートを組み、それぞれ真理値表で確かめます。伝播遅延、つまり入力が変わってから出力が少し遅れて変わる理由も見ます。後半は組み合わせ回路の練習問題を 5 問解いて真理値表から配線を導き、最後にブール代数が CPU の中で何をしているかを見ます。
- Turing Complete
- NAND
- Logic gates
プロジェクト 02
Turing Complete のサンドボックスモードで掲げた三つの長期的な学習目標で、決まった予定ではありません。16 ビットの Hack コアから始め、32 ビットの RV32I と Armv6-M のコアへ進みます。どのコアにも明確な命令セットアーキテクチャ(ISA)があり、回路をどう組むかは設計しながら探ります。
命令 ROM とデータ RAM を分けた(ハーバード・アーキテクチャ)16 ビットの Hack コアを作り、Add や Max などの Hack 機械語プログラムを動かします。次に、パイプラインなしの RV32I コアから始めて基本整数命令セット全体へ広げ、5 段パイプラインは後の課題にします。さらに Cortex-M0+ を参考に Armv6-M/Thumb コアに挑み、例外、割り込み、2 段パイプラインを順に実装し、共有システムバスの構成に倣います。Cortex-M0+ 互換と呼ぶのは十分に検証してからです。
NAND から NOT、AND、OR、NOR、XOR を作り、2 入力のゲートを組み合わせて入力を増やし、伝播遅延が最長経路をどう決めるかを見ます。
1 ビットの信号を複数ビットのデータへ広げます。まず二進数の読み方と計算を押さえ、次に加算器、ラッチ、レジスタを組んで、計算した結果を保存し、次の演算に使えるようにします。
Hack 命令セットの 16 ビットコア。命令 ROM とデータ RAM を分け、Add や Max などの Hack プログラムを動かします。
32 ビットの RV32I コア。まずパイプラインなしで作り、基本整数命令セット全体に広げます。5 段パイプラインは後の課題です。
Cortex-M0+ を参考にした 32 ビットの Armv6-M/Thumb コア。例外、割り込み、2 段パイプラインを順に実装します。
プロジェクトが進んだら、各段階で生まれた疑問、実装の過程、検証結果をここに追加します。
公開済み
NAND から出発して、Turing Complete で NOT、AND、OR、NOR、XOR、XNOR と 3 入力のゲートを組み、それぞれ真理値表で確かめます。伝播遅延、つまり入力が変わってから出力が少し遅れて変わる理由も見ます。後半は組み合わせ回路の練習問題を 5 問解いて真理値表から配線を導き、最後にブール代数が CPU の中で何をしているかを見ます。
公開済み
論理ゲートの次に、簡単な CPU コアに必要な部品と、ALU の中でまず知っておく回路を見ます。1 回の加算が命令の読み出しから解釈、計算、保存までどう進むかをたどり、計算した結果をなぜ保存しておく必要があるのかを確かめます。最後に、この先の内容を『CS:APP』の章と対応させます。
公開済み
符号なし整数を前提に、二進数の読み方と計算をまとめます。位の重みとビット幅、十進数との変換、加算と減算の繰り上がりと繰り下がり、乗算と除算、ビット演算と偶奇、いくつかの速算のこつと固定ビット幅の限界を扱います。最後に、128 から 1 までの位の重みを選んで目標の数を作る練習を置いています。
公開済み
六つの回路の練習を通して、論理判定から二進数の演算へ進みます。真の入力が二つ以上あるかの判定、奇数パリティ、四つの信号の計数、半加算器、全加算器、ビットの配線によるバイトの倍増を扱います。配線図と真理値表で確かめ、最後の回路が 0〜127 の入力でのみ倍増になる理由も説明します。
公開済み
1 バイトの NOT と NAND から始め、八つの全加算器を桁上がり信号でつなぎます。続いて 2 の補数で負数を表し、符号を反転する回路を組みます。配線図と計算例で、ビット反転と算術的な符号反転、桁上がりと符号付きオーバーフローを区別し、−128 の境界も確認します。
更新中
状態を保持し更新する仕組みを学びながら追記しています。フィードバックループ、OR による信号の保持、2 周期の遅延、ラッチ、フリップフロップ、周期ごとの反転を扱います。現在はスイッチで XOR を組むところまで進み、ハイインピーダンスとデータ選択を説明しています。データ制御回路は今後も追加します。