SlideShare ist ein Scribd-Unternehmen logo
1 von 76
//CPUの創りかた
B3 fumi
流れ
• はじめに
• プルアップ・ダウン
• チャタリング
• 発振回路
• ROM
• CPUの仕様
• 機械語
• FF
• 1BitCPU
• ALU
• IO
• 命令デコーダ
• 実際の回路
古のオタクにオススメできる一冊。
• 渡波郁著:初版2003年 314P
• 絵柄から時代を感じる。
• 完全に枯れているので初歩を学ぶには最適
• 10個のICで動くCPUを自作します。
• 文章がかなり冗長なので飽きずに読むことができる。
• ノリが00年代なのであいたたたたた(汗
• くどいと思う人もいるかもしれない。
• 入門なのでCPUに詳しい人にはオススメしない
1.はじめに
• 手軽に3GHz、5GHzといった高速CPUが手に入る
• 自作なんて意味ない
• でも仕組みを理解するには最適。
• ここでは徹底的に単純化したCPUを設計します
• それも自由に動作できる限界の4bitです。
• ICたったの10個だけ。
• 16ステップしか動かない
• 実用性?そんなもの(
• 100%からくり人形です。
• メカなので直感的にわかります
今回作るCPUの仕様
(ToriaezuDousasuru4bitCPU)
Intel pentium4 TD4
汎用レジスタ 32bit*8 4bit*2
アドレス空間 32bit*2 4bit
プログラムカウンタ 32bit 4bit
フラグレジスタ 32bit 1bit
算術演算 浮動小数計算 4bit adder
動作クロック 1.4GHz 3MHz
トランジスタ数 4200万以上 1500
CPUとは
• プログラムカウンター命令をメモリから取り出す(命令フェッチ)
• 命令を解読(デコード)
• デコード結果に従い演算を行う(実行)
• 演算結果を格納(ストア)
クロックごとにこれを繰り返す機械です。
2. 74HCシリーズ
• 論理回路:流石にご存知ですよね…?ね?ね??
https://wwws.kobe-c.ac.jp/deguchi/sc180/logic/gate.html
汎用IC
• 74HCシリーズは汎用のロジックICです。
https://wwws.kobe-c.ac.jp/deguchi/sc180/logic/gate.html
74HC00
• 4つ入ってるだけです。
https://www.technobotsonline.com/74hc00-quad-2-
input-nand-gate.html
74HCシリーズ
• いろんな論理回路をくっつければ思うように動作させることが
できる。(汎用IC)
https://assets.nexperia.com/documents/data-sheet/74HC_HCT153.pdf
よく使われるものはパッケージに
• 74HC153
https://assets.nexperia.com/documents/data-sheet/74HC_HCT153.pdf
0と1をどう表現するのか
• 電圧が低いか高いかで判断します。
• 今回は0V=0、5V=1とします。
• Active-LOW, Active-HIGH
• 正論理と負論理がICごと決まっているので注意する。
電子回路の復習
LED
抵抗
コンデンサ
トグルスイッチ
プッシュスイッチ
押しボタン
プルアップ/ダウン
これで完成!…?
対チャタリング
• キャッシュみたいなもの。
クロック
発振回路(クロックジェネレータ)
• 手動ならこれでOK。
• 高速で押してください。
発振回路(クロックジェネレータ)
ROM
• 書き換えられない消えない記憶装置
• 起動するときにしか普通は使わない
• BIOS読み込み
• このCPUではROMにプログラムを
格納。
• 普通はHDDなどのRAMに格納される
• 1Bit記録したい…どうしよう…
スイッチ
全部は無理
• CPUはROMから一気に全部プログラムを取り出せない。
• 今回はたったの4Bit…
• ちょっとずつ取り出す必要!
• 漫画のn巻を貸して!
ROM
(128bit)
CPU
データバス(8bit)
アドレスバス(4bit)
N番地のデータをくれ
あいよ
実際はどうなってるか
• UV-EEPROM 256Kbit
• 昔はヒューズで書いてた
• 15bit address A0~A14
• 8bit data Q0~Q7
1bitのROM
https://assets.nexperia.com/documents/data-
sheet/74HC_HCT154.pdf
74HC153
https://assets.nexperia.com/documents/data-
sheet/74HC_HCT154.pdf
CPUの仕様
Intel pentium4 TD4
汎用レジスタ 32bit*8 4bit*2
アドレス空間 32bit*2 4bit
プログラムカウンタ 32bit 4bit
フラグレジスタ 32bit 1bit
算術演算 浮動小数計算 4bit adder
動作クロック 1.4GHz 3MHz
トランジスタ数 4200万以上 1500
命令フォーマット
7 6 5 4 3 2 1 0
オペレーションコード イミディエイトデータ(Im)
ADD A, Im 0000
ADD B, Im 0101
MOV A,Im 0011
MOV B, Im 0111
MOV A, B 0001
MOV B, A1 0100
JMP lm 1111
JNC lm 1110
IN A 0010
IN B 0110
OUT B 1001
OUT Im 1011
ADD A, 0(NOP) 0000
命令をするのに使うデータ4bit
機械語で書くと…
プログラム
フリップフロップ
立ち上がった瞬間にDの状態がQに記録される
立ち上がった瞬間にDの状態がQに記録される
4bitメモリの完成です
AとBのやりとり
ロード・保持を切り替える
計算させたい
保持もしたい
4bitでMOVしようとすると…?
4ch スイッチ必要
2ch スイッチ
2ch スイッチ
2ch スイッチ
2ch スイッチ
そんな夢を叶えるICがあります 74HC161
http://www.coins.tsukuba.ac.jp/logic-system-jikken/PDF/HD74HC163.pdf
MOV A, B
LOAD1 L
LOAD2H
LOAD3H
LOAD4H
SELECTA H
SELECTB L
ALU
• オペレーションコードに
応じて計算できるように
してあげればいい!
←これ
加算器
増やせば
桁が増える
=
4bit全加算器
74HC283
http://www.ti.com/lit/ds/schs176d/schs176d.pdf
とにかくALUを作ってみる
ADD A, Imをやってみよう!
じゃあMOV A, Bは?
余計なものが加算されてしまう
A←B+Imが実行されてしまう
Im=0000とする
MOVが実現できる
A←B+0000なのでA←B
MOV A, Imをやると?
Dレジスタを犠牲にした
フラグ
• 加算しかできないので桁上がりで条件を判断する。
• 9以下であればジャンプしたい!
桁上がりをFFで保持
プログラムカウンター
• ただのカウンターです。
• リセットされば0に戻る。
I/Oポート
• 結局電圧。
• そう、LEDですね。
命令デコード(命令フェッチ)
• あと少し。
• 最後は、命令を解釈して実行するための指示を出す回路のみ。
まとめると…?
最後はプログラミング
0000 OUT 0111 LEDを3つON
0001 ADD A, 0001 Aレジスタ+1
0010 JNC 0001 キャリーまでループ
0011 ADD A,0001 Aレジスタ+1
0100 JNC 0011 キャリーまでループ
0101 OUT 0110 LEDを2つON
0110 ADD A,0001 Aレジスタ+1
0111 JNC 0110
1000 ADD A, 1000 Aレジスタ+1
1001 JNC 1000 キャリーまでループ
1010 OUT 0000 LED全OFF
1011 OUT 0100 LED1個ON
1100 ADD 0001 Aレジスタ+1
1101 JNC 1010 キャリーまでループ
1110 OUT 1000 終了LEDON
1111 JMP 1111 終了

Weitere ähnliche Inhalte

Was ist angesagt?

Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニックGenya Murakami
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
Sphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメントSphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメントIosif Takakura
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理信之 岩永
 
C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化についてAimingStudy
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化marsee101
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013DQNEO
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編Fixstars Corporation
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 

Was ist angesagt? (20)

Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
Gpu vs fpga
Gpu vs fpgaGpu vs fpga
Gpu vs fpga
 
Sphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメントSphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメント
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
 
C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化について
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
Java8でRDBMS作ったよ
Java8でRDBMS作ったよJava8でRDBMS作ったよ
Java8でRDBMS作ったよ
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 

CPUの創りかた

Hinweis der Redaktion

  1. 300Pのこの書籍をさらっとサマライズしていこうと思います 皆さんにとっては当たり前かもしれない
  2. ビデオ貸し出し