Successfully reported this slideshow.
Your SlideShare is downloading. ×

ゼロから始める自作 CPU 入門

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 38 Ad

More Related Content

Slideshows for you (20)

Viewers also liked (20)

Advertisement

Similar to ゼロから始める自作 CPU 入門 (20)

Advertisement

Recently uploaded (20)

ゼロから始める自作 CPU 入門

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

×