ゼロから始める自作 cpu 入門
TRANSCRIPT
![Page 1: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/1.jpg)
ゼロから始める自作CPU 入門セキュリティ・キャンプフォーラム2015
ローレイヤー勉強会
![Page 2: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/2.jpg)
お前だれよ
● 川田裕貴@hktechno
o 筑波大学システム情報工学研究科コンピュータサイエンス専攻 M1
o セキュリティ&プログラミングキャンプ2008 プログラミングコース参加 2009, 10, 12 OS 組チューター
![Page 3: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/3.jpg)
とても、ローレイヤーな話をします
![Page 4: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/4.jpg)
低レイヤとは システムソフトウェア
VM
OS Kernel
アセンブラ
バイナリ
CPUCPUマニアが考えるローレイヤ
![Page 5: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/5.jpg)
自作PC != 自作コンピュータ
本格的自作コンピューター
自作コンピューターというのであれば、CPU
から作らなければ!
・命令セット・MMU
・IOコントローラ全部作る
![Page 6: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/6.jpg)
Open Design Computer Project
● オリジナル ”コンピューター”を作ったo CPU だけじゃないo 基板から、CPU から、ペリフェラルまで
● 2011年度 IPA未踏 IT 人材発掘育成事業採択● http://open-arch.org/
● ↓一緒にやってる人@cpu_labs
![Page 7: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/7.jpg)
mist32 プロセッサ
● 名前の由来はわからないw
● 32bit RISC アーキテクチャ● 2オペランド● Out of order 実行● レジスタリネーミング● 投機的実行● オープンソース
![Page 8: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/8.jpg)
CPU も自作できる
● がんばれば。
![Page 9: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/9.jpg)
CPU 自作って楽しいの?
● 楽しい。● 作りながら学べる。
● 理由:
o やってる人が少ないo なんかかっこいいo 自分の好きなように設計できるo 上から下まで全部自由
![Page 10: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/10.jpg)
自作 CPU で広がる夢
● CPU を自作することで....
o こんな命令があればセキュアになるのにo こんな機能があればセキュアになるのにo こんな命令セットもうイヤだ!o ぼくのかんがえたさいきょうの CPU!
![Page 11: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/11.jpg)
自作 CPU を作ってどうする?
● 考えてはいけない。● とりあえず作ってみると楽しい
● 期待してはいけないこと:
o 既存の CPU より性能の良い物ができるo 誰かに使ってもらえるo 実用性o 就活の役に立つ
![Page 12: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/12.jpg)
CPU 自作のメリット
● 得ることができる特殊能力o C のコードから吐かれるアセンブラがわかるようになる
o アセンブラからバイナリが想像できるようになる
o アセンブラの命令列から、命令がどうやって実行されるかがわかる
![Page 13: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/13.jpg)
とりあえず、自作 CPU の民を増やしたい!
![Page 14: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/14.jpg)
そもそも CPU とは
● 何が違うかo アセンブラが違うだけ?
● Intel x86
● Power PC
● SPARC
● ARM Cortex-A
● ARM Cortex-M
● AVR
● PIC
![Page 15: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/15.jpg)
CPU の分類?
![Page 16: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/16.jpg)
CPU 自作の構成要素
● ISA (命令セットアーキテクチャ)
● プロセッサコア● ペリフェラル
o MMU
o 割り込みo タイマーo など...
● ソフトウェアo アセンブラ, コンパイラ, OS...
![Page 17: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/17.jpg)
ISA (命令セット)
● 自作 CPU の唯一?見える部分o バイナリ、アセンブラは見ることが可能
● ISA の設計は楽しい● バグが発生しない!● バイナリアンの君なら、きっと既存の ISA
への不満もたまってるはず
![Page 18: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/18.jpg)
ISA (命令セット)
● 命令フォーマットo 種類、オペランドの数、どうやってバイナリに詰め込むかなど...
● ニーモニックo add, sub, shr, sar, jxx…
● どんな命令を用意するかo 変態命令をつけるとかo 例えば、”短歌”に最適化された命令
![Page 19: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/19.jpg)
ISA の例
● 固定長 4byte
● 半固定長 2byte, 4byte
● 可変長
● 変種o BPT(Byte Per Tanka)世界一の命令セットo 絶対 ASCII が現れない命令セットo 全部 ASCII で書ける命令セット
![Page 20: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/20.jpg)
プロセッサコア
● 命令の実行ユニットを何かしらで作る
● 一番の肝o 工夫をたくさん入れるo 先人たちの知識を利用するo または、全く新しいものを作る
![Page 21: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/21.jpg)
4bit CPU の回路
![Page 22: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/22.jpg)
どうやってコアを書くか
● FPGA を使うo 回路を動的に構成できる魔法の LSI
o Verilog HDL とか VHDL を使って書く
● FPGA は速い!は間違いo 実際の素子と比べると、とても遅い。o 特別な処理を回路に起こすと、速い
(ただし、専用の IC よりはずっと遅い)
![Page 23: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/23.jpg)
基本的なパイプライン
● Instruction Fetch
● Instruction Decode
● Execution
o Memory Access
● Write Back
![Page 24: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/24.jpg)
● Instruction Fetch
● Instruction Buffer
● Instruction Decode
● Dispatch
● Execution
MIST32 (In-order: MIST1032ISA)
IB
![Page 25: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/25.jpg)
実行ポート4個 OoOな領域
2命令同時Fetch
Decode
…
(Super-
Scalar)
![Page 26: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/26.jpg)
● ほとんどのプロセッサでは、アセンブラの通りには実行されていないo 高速化のためo ハードウェアが実行しやすいように実行したほうが速い
● ソフトウェアで頑張ればよいのでは?o 夢の VLIW...
アセンブラと実行順序
![Page 27: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/27.jpg)
Out of Order Execution (例)
mov eax, [eax]
xor ebx, ebx
add ebx, eax
inc ecx
add eax, ecx
Load (遅い)
↑の命令とは依存がない
↑の命令とは依存がない
1
1
2
1
2
命令の順番を入れ替えても構わないしかも、開いてるポートに並列に実行できる
![Page 28: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/28.jpg)
Out of Order Execution
● Register Renaming
o 物理レジスタを仮想レジスタにリネームo 命令の依存をより少なくできる
mov eax, [eax]
inc eax
mov [eax], eax
mov eax, ebx
mov eax, [eax]
同じ eax レジスタだが、依存はない
← 先に実行可能
![Page 29: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/29.jpg)
![Page 30: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/30.jpg)
http://arstechnica.com/business/2010/09/intels-next-must-have-upgrade-a-look-at-sandy-bridge/
![Page 31: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/31.jpg)
プロセッサコアの設計
● レジスタo 何 bit でいくつ用意するか
● パイプラインo どういう構成で、何段にするか
● 実行ユニットo 何個用意するか、並列化させるか
● その他もろもろo 分岐予測、投機的実行など...
![Page 32: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/32.jpg)
プロセッサコアと ISA
● 便利な命令や、複雑な命令をたくさん積めばいいじゃないか?o そういうわけにも行かない
● 回路規模o 複雑な実行ユニットは、回路規模が大きくなる、クリティカルパスが長くなる
o クロックが上がらなくなる
![Page 33: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/33.jpg)
MMU とか
● 作らなくても良い● ただし、OS を動かすには普通は必要
● 実は作るのが結構大変o ページテーブルを考えたり、
TLB の事を考えたり...
![Page 34: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/34.jpg)
シミュレータ
● 実機より信頼の置けるシミュレータo シミュレータが信頼出来ないとデバッグで死ぬ!
● 簡単なものでもいいからつくろうo cycle-accurate でなくてもよい
● シミュレータの高速化も、また楽しい
![Page 35: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/35.jpg)
アセンブラ・コンパイラ
● コアだけでは、プログラムは書けないo ハンドアセンブルで書く人は除く
● アセンブラやコンパイラが必要o 一般的には binutils, gcc を使うが?o 簡単なものなら自作も可能
![Page 36: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/36.jpg)
オペレーティングシステム
● OS も自作可能、だが...
● mist32 向けには xv6 を移植したo Unix V6 っぽい何かo その上で mruby もうごくo http://www.slideshare.net/hktechno/xv6-mist32-mruby
![Page 37: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/37.jpg)
OS を移植すると...
● OS のことも学べるo どうやって起動するのかo OS を動かすにはどんな機能が必要かo どうすれば、もっと速く OS を実行できるか...
![Page 38: ゼロから始める自作 CPU 入門](https://reader034.vdocuments.site/reader034/viewer/2022050907/55a6938c1a28ab604d8b479c/html5/thumbnails/38.jpg)
まとめ
CPU を自作すると...
低レイヤーな知識が大体学べる。超楽しい。
ソフトウェアの高速化、OS の作り方、コンパイラ・アセンブラ、CPU のパイプラインの中身、などを学びたいなら CPU を作ろう。