『CPUの創りかた』
IC10個のお手軽CPU設計超入門 : 初歩のデジタル回路動作の基本原理と製作
https://gyazo.com/47e40029e8421718eaf105250cf627f2
解説内容や情報は基本的に、初版発行時の2003年8月段階のものから変更されておりませんので、ご注意ください。
6刷以降のものを買えば丸い?あんも.icon
Chapter 1 はじめの一歩のその前に
1-1 ココロの準備
いちばん大事なこと
IC10個だけでCPUを作る
楽しむために
1-2 装備の点検
抵抗
カーボン抵抗器
1/4W
コンデンサ
セラミックコンデンサ
応答速度
電解コンデンサ
容量
アルミ電解コンデンサ
ダイオード
東芝1S1588相当品
IC
74HC00
部品の初期不良
テスターは信用できるものを
アナログかデジタルか
おまけ: テスターの安物って何が違うの?
アナログのほうがテスターの動作原理を理解しやすい
電磁石で針を動かしている
テスターによる回路への影響の理解に役立つ?あんも.icon
Chapter 2 LED
2-1 とりあえずLEDの点灯方法
完成したCPUを妄想してみる
豆電球と何が違うのか
アノード: +
カソード: -
解決策
部品のデータシートで確認する
2-2 もうちょっとだけ真面目に考える
LEDの順電圧
発光で消費される
抵抗の消費電力の計算
おまけ: LEDの購入の実際
Chapter 3 デジタル回路の基礎の基礎
3-1 74HCシリーズ
汎用IC
74シリーズの歴史(ショートバージョン)
CPLDとFPGA
どうやって1と0を表現するのか
デジタル信号の電圧
デジタル信号の電流
3-2 簡単な論理回路
NOT(論理反転)
AND(論理積)
OR(論理和)
NAND
多入力ゲート
3-3 実際の回路
使わないピン
ICソケットを使うと便利
静電気はどんなときに犯行に及ぶのか
電源も必要です
5V安定化電源
NP12-1S0523
ICへの応答速度のよい給電
パスコン: バイパスコンデンサ
まとめとか
電源の配線
電源には十分太いワイヤーを使う
0.3mm^2程度
ケーブル太さの表記
導体断面積
導体直径
AWG: American wire grade
電源の配線を網目のようにする
電源パターンつきのユニバーサル基板が便利
Chapter 4 リセットとクロック回路
4-1 リセットとスイッチ
ここはアナログな話ですが
74HC14 シュミットトリガー・インバーター
プルアップ
スイッチのオープン状態を片側に倒しておく
5Vになるようにしておくのがプルアップ
チャタリングの問題
CRのフィルタ
C: キャパシタ
コンデンサを使う
微分方程式で示しておく?あんも.icon
電気の分野をよく知らない
チャタリング防止
シュミットトリガ
リセット回路
おまけ: スイッチと電流と接点不良とPC
4-2 クロックジェネレータ
発振の原理
実際の発振波形
無極性電解コンデンサ
ノンポーラ
バイポーラ
Chapter 5 ROMを作る
5-1 ROMというのは
ROMとはプログラムを格納する場所ですか?
使用するROM
DIPスイッチによるROM
入力に便利なインターフェースは持っておくといい?あんも.icon
手動クロック回路も同じ方針
Dual In-line Package
ROMとして必要な機能
1bitのROM
ビット数が多いときの問題点
5-2 ROMの回路
メモリーセルの材料128人前
8bit出力
実際のROMの回路
CPUの動作テストだけなら2命令で妥協できる
DIPスイッチ2個分
74HC540 インバーター8回路
74HC04は6回路
アドレスの選択
74HC154
4bitの入力を16本のワイヤーに対応づける
74HC154の中身
この回路での注意
少しでも楽に製作する方法
ダイオードアレイ
プリント基板をつくる
エッチング
Chapter 6 CPUの設計準備
6-1 CPUの仕様
ようやくCPUの話になるわけですが
TD4: とりあえず動作するだけの4bitCPU
勝手に仕様を決めさせていただきますが
レジスタ構成
プログラムカウンタ: 4bit
Aレジスタ: 4bit
Bレジスタ: 4bit
キャリーフラグ
入力ポート: 4bit
出力ポート: 4bit
命令フォーマット
8bit
上位4bit: オペレーションコード
オペコード
下位4bit: イミディエイトコード
命令一覧
4bitのオペコードで表現できる16命令まで?あんも.icon
ADD
ADD A, Im: 0000
ADD B, Im: 0101
MOV
MOV A, Im: 0011
MOV B, Im: 0111
MOV A, B: 0001
MOV B, A: 0100
ジャンプ
JMP Im: 1111
条件分岐: jump if not carry
JNC Im: 1110
入力ポートからレジスタへ
IN A: 0010
IN B: 0110
Bレジスタから出力ポートへ
OUT B: 1001
イミディエイトデータを直接出力ポートへ
OUT Im: 1011
PCとの比較
6-2 機械語とは
CPUと機械語
TD4エミュレータ
処理単位は4bit
数値の転送命令
レジスタ間転送命令
加算命令
プログラム
ジャンプ命令
フラグと条件付きジャンプ(条件分岐)命令
値の大きさを見る
繰り上がりが起こるかをチェックする
プログラムカウンタ
I/O
入力命令(IN)
出力命令(OUT)
Chapter 7 1bitCPU(らしきもの)
7-1 フリップ・フロップ
フリップ・フロップ登場
実際の動作
74HC74 フリップフロップ
データの保持
7-2 1bitCPU
転送命令の正体
演算が可能な1bitCPU
おまけ: フリップ・フロップの仕組み
データの流れを変更する方法
74HC153 4チャンネルデータセレクタ
おまけ: ドライブ能力とオーバークロック
7-3 切り替えスイッチを手に入れた我々が次に目指すもの
電気式で命令を切り替えられる1bitCPU
複数のレジスタを持つCPU(これが普通ですが)
74HC161
2チャンネルデータセレクタ・フリップフロップ4回路
本来はカウンタ用
実際の回路
4つのレジスタ
ABは通常のレジスタとして残る
CDは後に他の用途に使われる
Chapter 8 ALUとプログラムカウンタ
8-1 ALU
肝心のALUが売ってない!
ALU: arithmetic logic unit
74HC181
加算器のみに絞って代用する
74HC283 4bit加算器
加算回路
二進数1bitの加算回路
全加算器
演算回路を追加する
演算回路を追加したのはいいのだけれど
すべての命令が演算回路を通ることになる
細工して副作用がないようにする
MOV A, B
Imに0000を入れておく
MOV A, Im
データセレクタで0000を入れる
フラグ
TD4は加算しかできないのでキャリーで値の大きさを見ることにした
通常のCPUは減算ができるので減算で値の大きさを見ている
フラグの設計
すべての命令でフラグが変化してしまう
JNCはADDの直後にする
キャリーフラグが立つのはADDのみ
他の命令はキャリーフラグは0になる
8-2 プログラムカウンタ
プログラムカウンタとは
インストラクションポインタ
プログラムカウンタはいつカウントアップするのか
TD4のプログラムカウンタに要請されている機能
リセット信号で0にリセットされる
1クロックの立ち上がりで+1される
レジスタに利用していた74HC161を使う
本来のカウンタの役割
Dレジスタがプログラムカウンタになる
ROMに渡して命令フェッチができるようになった
ジャンプ命令
JMP ImはMOV PC, Imと同等
PC: プログラムカウンタ
Dレジスタに転送する仕組みはすでに作ってある
条件ジャンプ命令
プログラムカウンタの手前にキャリーフラグを受けるNAND噛ませる?
通常のジャンプ命令に支障がないようにする方法?
8-3 I/Oポート
出カポート
Cレジスタの出力を出力ポートにする
入力ポート
Cレジスタの出力がつながっていた部分を入力ポートにできる
Chapter 9 命令デコーダ
9-1 命令デコーダのお仕事
後は何が必要なのか
命令フェッチ
プログラムカウンタにしたがってROMから命令が読み出される
ImはALUに送られる
オペコード4bitとCフラグ1bit
実行部
SELECT A信号とSELECT B信号: 2bit
4チャンネルデータセレクタが対応するレジスタを選択してALUへ送る
LOAD信号4本: 4bit
計算結果を対応するレジスタに転送する
MOV A,Im
MOV B,lm
MOV A,B
MOV B,A
ADD A,Im
ADD B,Im
IN A
IN B
OUT Im
OUT B
JMP Im
JNC Im
9-2 デコーダの設計
とりあえず書き出してみました
任意の入力から任意の出力を得る方法が存在するのは保証されている?あんも.icon
NANDの万能さを見ると直感的にはうまくいきそう
真理値表の単純化
小規模な論理回路になるようにうまくオペコードが設計されている?あんも.icon
ド・モルガン律
そろそろ最終回
カルノー図(自由選択科目)
紅白対抗カルノー図・ルールの説明
最終兵器カルノー図、いよいよ実戦配備
カルノー図から回路へ
実際の回路
仕組まれた奇跡
命令デコーダ単純に実装できるようにオペコードと命令を定めた
Chapter 10 全回路図
10-1 回路図について
CPUの全回路図
クロックとリセット回路
ROMの回路図
製作例・部品面
製作例・配線面
パーツごとに別の基板で作る?あんも.icon
Chapter 11 動作確認
11-1 最初は部分的な確認
通電しなくても確認できること
電源のチェック
クリップなど
リセット回路のチェック
プログラムカウンタのチェック
ROMのチェック
命令デコーダのチェック
イミディエイトデータのチェック
加算器のチェック・加算器からレジスタへの配線
いよいよ転送の実行
ここまで書いてナンですが
11-2 プログラムの実行
サンプルプログラム1: LEDちかちか
サンプルプログラム2: ラーメンタイマー
ブザーを鳴らす回路
おまけ:最大動作周波数
11-3 もう少しマトモなCPU
8bit化
ALUの強化
CPLDなどについて
既製品のCPUをいじってみる
APPENDIX
配線作業などについて
確実なはんだづけ
20〜30Wのはんだごて
温度調整機能はなくてもよい
リード線
ワイヤストリッパーで皮膜を剥ぐ
単芯多芯
はんだのノリ
ユニバーサル基板
はんだ吸収線
部品の値の読み方
抵抗
2桁の仮数部と1桁の指数部
黒: 0
茶: 1
赤: 2
橙: 3
黄: 4
緑: 5
青: 6
紫: 7
灰: 8
白: 9
許容差
銀
金
赤
サポートについて