30日でできない!コンピューター自作入門 - カーネル/vm探検隊@つくば
DESCRIPTION
http://open-arch.org/TRANSCRIPT
![Page 1: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/1.jpg)
30日でできない!
コンピューター自作入門
@hktechno
![Page 2: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/2.jpg)
自己紹介
@hktechno川田 裕貴 (かわたひろたか)● 筑波大学 情報学群 情報科学類 ++3 年
● 信仰: Emacs, Debian, Python● 2011年度未踏IT人材発掘・育成事業
○ Open Design Computer Project コクリエーター
![Page 3: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/3.jpg)
今日話すこと
について
![Page 4: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/4.jpg)
この本ご存知ですか?
![Page 5: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/5.jpg)
30日でOS自作できた人、挙手! ノシ
![Page 6: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/6.jpg)
できないですよねー (´・ω・`)
![Page 7: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/7.jpg)
30日ではできないけれど...
2人がかりで
2年ぐらいあればどうにか形にはなりました。
ぼっちの人は頑張ってください。
![Page 8: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/8.jpg)
Open Design Computer?No Intel.No ARM.No MIPS.
The "mist32" Architecture.All new open design processor.
![Page 9: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/9.jpg)
デモ...
![Page 10: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/10.jpg)
搭載している FPGA
ALTERA Cyclone IV EP4CE115[Terasic DE2-115 Development Board]
![Page 11: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/11.jpg)
魔法のデバイス FPGA
自由に回路を書き換え可能な ICハードウェア記述言(HDL)で回路を記述
主な用途
プロトタイプ小ロットのチップ
![Page 12: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/12.jpg)
プロジェクトの特徴
開発ツールを一通り揃える
当たり前だけど、ないと使ってくれない
再利用可能な状態でソース・仕様を公開
プロセッサの HDL は BSD ライセンス
モバイル機器に使われるようなものを想定
OSが乗ったタブレットとかスマホとか
![Page 13: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/13.jpg)
つまり...
敵は ARMCortex-Axx シリーズ
![Page 14: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/14.jpg)
mist32 アーキテクチャ
ハードウェアとソフトウェアの協調動作
OS を支援する機能をたくさん載せる
アウトオブオーダー実行
回路規模は大きくなるが速くなる
独自の命令セット
アウトオブオーダー実行に最適化
![Page 15: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/15.jpg)
mist32 の位置づけ ( �⌓�) 性能の目安→↑ビット数
![Page 16: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/16.jpg)
アセンブラとバイナリ00000470 <genrand_int31>:
470: 11 00 03 c0 push rbase
474: 11 00 03 e0 push rret
478: 18 00 03 c0 srspr rbase
47c: 0e e0 03 a0 lih rtmp,0x0
480: 0d 40 47 a0 wl16 rtmp,0x220
484: 20 70 03 e2 movepc rret,8
488: 14 40 03 a0 b rtmp,#al
48c: 08 30 00 01 shr r0,0x1
490: 12 00 03 e0 pop rret
494: 12 00 03 c0 pop rbase
498: 14 40 03 e0 b rret,#al
call
return
32bitaddr
![Page 17: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/17.jpg)
全体図的な何か
![Page 18: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/18.jpg)
![Page 19: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/19.jpg)
開発規模について
MIST1032SAプロセッサ + ペリフェラル
行数 : 81,000行使用LE : 101,800LE [in-order: 32,000LE]
開発環境
GCC : 3,100行binutils(gas, ld) : 1,800行シミュレータ : 1,500行Newlib : 1,000行
![Page 20: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/20.jpg)
やったこと
プロセッサー・ペリフェラルの開発
Verilog HDL がりがり
プロセッサの仕様策定
レジスタ, 命令セット, MMU, 割り込み...
開発環境の開発
binutils (as, ld...), gcc, シミュレータ...
![Page 21: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/21.jpg)
僕がやったこと
プロセッサー・ペリフェラルの開発
Verilog HDL がりがり
プロセッサの仕様策定
レジスタ, 命令セット, MMU, 割り込み...
開発環境の開発
binutils (as, ld...), gcc, シミュレータ...
![Page 22: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/22.jpg)
全般的に言えること
とにかく資料がねぇ!(特に日本語)
![Page 23: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/23.jpg)
作成の流れ
命令セット仕様策定
プロセッサコアの開発 アセンブラの開発
周辺機能仕様策定
割り込み・IO・MMU作成 コンパイラ・シミュレータの開発
コアのバグつぶし
バグの叩き合い
バグとの戦い
バグと共に(ry
![Page 24: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/24.jpg)
プロセッサの仕様策定
もともと @cpulabs が開発してるプロセッサコアを元にする (mist32 の原型)つまり、このプロジェクトは僕はおまけ。
アウトオブオーダー実行にとにかく最適化。一番楽しい時間帯。妄想アワー。
今思えば失敗したこと: 2オペランド...
![Page 25: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/25.jpg)
アウトオブオーダー実行
知らない人いないよね。Wikipedia でも見てください。
書く時間がなかったなんていえな(ry
![Page 26: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/26.jpg)
mist1032sa プロセッサ
Load/Store 型 RISC スーパースカラ
2命令同時フェッチ/4命令同時実行片方向の分岐予測と投機的実行Tomasulo のアルゴリズム (OoO)レジスタリネーミングwith Flag 命令の撤廃
![Page 27: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/27.jpg)
with Flag 命令とは
典型的な例: ADDC (Add with Carry Flag)
フラグを見に行くのはブランチ系命令だけに。フラグを書き込む命令は b の直前にある前提。
コンパクトな回路規模で OoO するには:命令の依存関係をとにかく少なくする必要
![Page 28: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/28.jpg)
できなくなること
例えば x86 で言うと...CMP -> MOV -> MOV -> Jxx
CMP のフラグが Jxx まで引き継がれる、はず
OoO する際にフラグへの依存ができる
mist32 では、これを許さない!
Branch の直前に、フラグ変更命令を置く制約
![Page 29: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/29.jpg)
ADDC はどうするの?
現状の mist32:フラグを参照する命令は branch のみ
(基本的には)
ADDC のような命令は、キャリーをレジスタに返すような命令を作ればいい!なんか問題でもある?
![Page 30: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/30.jpg)
![Page 31: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/31.jpg)
レジスタ
汎用レジスタ:
32bit レジスタ 32本
その他システムレジスタ:
スタックポインタ
プログラムカウンタ
ページテーブル, コントロールレジスタ...
![Page 32: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/32.jpg)
奴らは戦力外通告だ!
アウトオブオーダーの邪魔になる技術例
ARM : 複雑な CC 実行!
SPARC : レジスタウィンドウ!!
MIPS : ディレイドブランチ!!!
SuperH : ディレイドブランチ...!!!!
x86 : 論外!!!!!
![Page 33: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/33.jpg)
MMUページテーブル
2段ページングに対応
1ページ 16KB
NX ビットみたいなものつけたり
権限設定もできる
当たり前だけどセグメントなんてついてないよ
![Page 34: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/34.jpg)
割り込み
何段階か割り込み優先度を設定すぐに割り込む
一定時間おきに割り込みを一気に割り込む
コンテキスト終了と同時に割り込む
クソみたいな割り込みによって、コンテキストが突然終了してほしくない!
![Page 35: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/35.jpg)
コンテキストスイッチ
ハードウェアコンテキストスイッチ支援を実装割り込みなどと協調動作できる
みんな使えよ!使うんだぞ!約束だぞ!
優先度によるキャッシュの有効活用優先度の高いコンテキスト情報は
必ずキャッシュに載せるとか
![Page 36: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/36.jpg)
プロセッサの開発
開発したのは良いものの...
DE2-115 に入りきらない!
論理合成時間かかりすぎ。(数時間)
OoO するとやっぱりでかくなるね...
インオーダーコアも作ろうか(´・ω・`)↑ 未踏成果報告会3日ぐらい前
![Page 37: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/37.jpg)
Binutils の移植
アセンブラも資料無くて大変だった他の簡単なプロセッサを参考に、コピペしつつ1度作れてしまえば次は簡単、のような
CGEN (Cpu GENerator) 使おう!
sourceware.org/cgen/
![Page 38: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/38.jpg)
コンパイラ (gcc) の移植
RTL テンプレートと、C をごりごり。
正直面白くない。GCC Internals を頑張って読もう。
なぜ LLVM にしなかったのかと一晩(ryまさかここまで LLVM, clang が進化するとは先見性の無さ...('A`)
![Page 39: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/39.jpg)
gcc の移植
とにかく
gcc/config/<arch>/<arch>.mdgcc/config/<arch>/<arch>.cgcc/config/<arch>/<arch>.h
コレを書けばいい!
![Page 40: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/40.jpg)
RTL テンプレート
(define_insn "addsi3" [(set (match_operand:SI 0 "register_operand" "=r,r") (plus:SI (match_operand:SI 1 "register_operand" "%0,0") (match_operand:SI 2 "nonmemory_operand" "r,I")))] "" "@ add\t%0, %2 add\t%0, %2")
![Page 41: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/41.jpg)
シミュレータ
とりあえず、書けばいいよ!割り込みとか、IO 考えなければ、割と簡単。
![Page 42: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/42.jpg)
さあ動かすぞ!
うごかなーい
実用的な、回路規模は FPGA 自体の回路規模の 80% ぐらいまでそれ以上になると、論理合成できても動かないことが多々
![Page 43: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/43.jpg)
未踏での評価
担当 PM の評価はほどほどに良かったけど...
みんな(PM も含め)ハードウェアにもプロセッサにもあまり興味がないみたいねと言うより、純粋な技術に興味がないみたいね確かに新規性ないね(´・ω・`)
モノはできてから応募したほうがいいかもね
![Page 44: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/44.jpg)
これから...
回路規模の縮小化
DE2-115 デモボードに乗るようにする
インオーダーコアの制作 → Done!とりあえず規模の小さいものも作る
OS をはやく載せられる状態に
GCC のバグつぶし、OS 支援機能テスト
![Page 45: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/45.jpg)
![Page 46: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/46.jpg)
Webプロセッサの仕様と移植に関する資料
open-arch.org
ソースコードgithub.com/technogithub.com/cpulabs
![Page 47: 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば](https://reader036.vdocuments.pub/reader036/viewer/2022081800/5562f936d8b42a6f598b4915/html5/thumbnails/47.jpg)
OS 載せるぞ!
今後に期待してください
Expect Us!