0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CPU の創りかたを読んで CPU を実装してみた

Last updated at Posted at 2025-03-22

はじめに

4 年ほど前に「CPU の創りかた」という本を買いました。当時、まだ営業として働いていましたが、コンピューターサイエンスの基礎を勉強しようと思い、いくつか調べてこの本を買いました。
しかし当時は、買った本を読んでも内容を理解できず、そのまま放置していました。今回エンジニアとして働き始めて 1 年経ち、久々に読んだところ、
内容が理解できるようになっていたので、実際に IC チップで実装してみました。

CPU の基本構成

以下は、本書の構成順に沿って、今回作成した CPU の基本構成をまとめたものです。

1. クロック & リセット

  • クロック
  • リセット

2. ROM

  • Arduino UNO R4 minima を使って、ROM を代用

3. レジスタ

  • 汎用レジスタ
  • プログラムカウンタ

4. I / O

  • LEDとトグルスイッチによる入出力

5. ALU

  • 加算器

6. 命令デコーダ

  • 命令デコーダ

実装の詳細

IMG_2336.jpg

使用したパーツ

以下パーツを秋葉原の秋月商店に実際に行って可能な限り揃え、不足したパーツは樫木総業の EC にて購入しました。

  • Arduino UNO R4 minima
  • IC チップ
    • 74HC14 x 1: シュミットトリガー・インバーター
    • 74HC163 x 4: 4 ビット同期カウンタ
    • 74HC153 x 2: 4 ビットマルチプレクサ
    • 74HC283 x 1: 4 ビット全加算器
    • 74HC74 x 1: D フリップフロップ
    • 74HC32 x 1: 2 入力 OR ゲート
    • 74HC10 x 1: 3 入力 NAND ゲート
  • 抵抗 (まとめ買いのため、個数記載ない)
    • 100Ω
    • 1kΩ
    • 3.3kΩ
    • 10kΩ
    • 33kΩ
    • 100kΩ
  • コンデンサ (まとめ買いのため、個数記載ない)
    • 10μF
    • 100μF
  • そのほか
    • バレッドボード
    • バレッドボード用ジャンパーワイヤー
    • 自励式ブザー
    • タクトスイッチ
    • トグルスイッチ

得られた知見

  1. CPU の基本動作の理解
    1. 理論では理解していた、ロジック IC の動作を実際に確認できた。
    2. フリップフロップを使って、データを保存する仕組みを理解できた。
  2. CPU の基本的な全体像の理解
    1. クロックの役割
      1. クロックの信号を受け取り、その信号の周期に従って、フリップフロップなどの IC 回路の動作を制御する。
    2. リセットの役割
      1. リセット信号を受け取り、IC 回路の出力をリセットする。
    3. レジスタの役割
      1. フリップフロップとデータセレクタを使って、データを保存する方法。
    4. データセレクタの役割
      1. データセレクタは、データを選択的に読み取るための回路。フリップフロップ 1 つで 1 ビットのデータを保存する。データセレクタは、フリップフロップの出力を受け取るが、命令デコーダによって選択されたフリップフロップからのデータのみを出力する。
    5. プログラムカウンタの役割
      1. プログラムカウンタは、プログラムの実行順序を管理する。 カウンタは読み取る ROM のアドレスとなる。
    6. 命令デコーダの役割
      1. 命令デコーダは、命令コードの入力からデータセレクタやフリップフロップのロード信号を出力する。
    7. ALU
      1. 今回は全加算器を利用。命令デコーダに沿ってセレクタから出力された結果を使って、演算を行う。
    8. ROM
      1. 4 ビットのアドレスパスを受け取り、そのアドレスに対応するデータ(命令コードと Immediate データ)を 8 ビット出力する。
  3. 基礎の電子回路の仕組みやデバッグの方法
    1. 実際にテスターを使った回路のデバッグの難しさ
    2. 中学理科レベルの電気の知識

Arduino UNO R4 minima での実装

今回、Arduino UNO R4 minima は ROM として利用しています。
今回の ROM の役割は、4 ビットのアドレスパスを受け取り、そのアドレスに対応するデータ(命令コードと Immediate データ)を 8 ビット出力することです。

利用したコードは Github にて公開しています。
https://github.com/ZawaPaP/CPU-

まとめ

実際の IC チップを使用した CPU の実装は、基礎の理論と実践の両方を学ぶことができる貴重な経験でした。これまで、Nand2Tetris などで基礎の CPU の仕組みを学んでいたのですが、実際に自分で作ってみると、
どのような回路を作ればよいか、どのように回路を組み立てればよいか、といったことを改めて復習し、理顔を深めることができました。

参考資料

CPU の創りかたは有名な本のため、さまざまな人が実装しています。インターネット上の記事を色々と参考にさせていただきました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?