Slide 1

Slide 1 text

簡単な4bit CPUの作成 電気電子工学実験 テーマS(a) 自由設計 mikiken (@mikikeen) 1

Slide 2

Slide 2 text

何を作ったか • 書籍「CPUの創りかた」で解説されている4bit CPUを FPGAで実装 • 予めROMに書き込んだプログラムを実行できる • LEDチカチカ • タイマー (参考: GitHubリポジトリ) https://github.com/mikiken/TD4 2

Slide 3

Slide 3 text

「CPUの創りかた」―マイナビ出版 (2003) • 汎用ロジックICを用い、簡単な4bit CPU「TD4」†1を作る • アナログ回路の基礎から、丁寧に解説されている • 30刷以上重版 (技術書としては異例) †1 “とりあえず動作するだけの 4bitCPU” の略 3 https://www.google.co.jp/books/edition/CPU%E3%81%AE% E5%89%B5%E3%82%8A%E3%81%8B%E3%81%9F/2UbaDwA AQBAJ?hl=ja&gbpv=1&printsec=frontcover

Slide 4

Slide 4 text

動機 • FPGAで何か作るといえばCPU • 自作CPUに関する書籍はいくつかあるが… • 「CPUの創りかた」なら授業時間内で作れそう 4

Slide 5

Slide 5 text

TD4の仕様 • • • • • • • • • • • • 5 • 命令長8bit • オペコード4bit, オペランド4bit • 表現できるアドレスの大きさも4bit = プログラムは16 Stepまで • 演算用レジスタは2つ

Slide 6

Slide 6 text

どのような手順で作ったか • 基本的には本の記述に従って実装 • 具体的には • レジスタ → ALU†2 → プログラムカウンタ → 命令デコーダ → ROM の順 • ROMは実装方針に迷ったので後回しに †2 Arithmetic Logic Unit (算術論理演算装置). 大層な名前がついているが、今回のCPUの場合、ただの4bitの全加算器 6

Slide 7

Slide 7 text

7 回路の全体像

Slide 8

Slide 8 text

8

Slide 9

Slide 9 text

ROM (メモリ) クロック生成 ← プログラムカウンタ ALU (4bit FA) 命令デコーダ レジスタ データセレクタ 9 Aレジスタ → Bレジスタ → キャリーフラグ

Slide 10

Slide 10 text

• リセットがかかると、ROMの0000番地の命令から実行開始 • ROMに入っている機械語命令 • 上位4bit(オペコード)を命令デコーダが読み込む • 下位4bitを(オペランド)をレジスタに読み込む • ALUはレジスタから値を読み込み、演算を行う • 演算結果をレジスタに書き込む • プログラムカウンタを+1する • このような動作をクロックに合わせて、繰り返し行う 10 回路の全体像

Slide 11

Slide 11 text

ROMの実現方法 • 書籍では、8bit DIP SW✕16個 でROMを表現 • 評価ボードのDIPスイッチが 足りない • Verilogで、各アドレスに対し 機械語命令を返す論理素子を 記述することでROMを表現 11

Slide 12

Slide 12 text

サンプルプログラム1 : LEDチカチカ 12

Slide 13

Slide 13 text

サンプルプログラム1 : LEDチカチカ 13

Slide 14

Slide 14 text

サンプルプログラム2 : タイマー • 実演します 14

Slide 15

Slide 15 text

感想 • ブラックボックスだと思っていたCPUの仕組みを ある程度知ることができ、勉強になった • もう少し大規模なCPUをHDLを用いて実装してみたい 15